From 05bcf33eec13bd597b22c6d7ad8e5ac9fb560a99 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 18 Mar 2014 02:38:12 +0100 Subject: Issue #19977: Fix test_capi when LC_CTYPE locale is POSIX --- Modules/_testembed.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_testembed.c b/Modules/_testembed.c index a21d2518be..39ff0977c8 100644 --- a/Modules/_testembed.c +++ b/Modules/_testembed.c @@ -109,11 +109,11 @@ static void test_forced_io_encoding(void) printf("--- Use defaults ---\n"); check_stdio_details(NULL, NULL); printf("--- Set errors only ---\n"); - check_stdio_details(NULL, "surrogateescape"); + check_stdio_details(NULL, "ignore"); printf("--- Set encoding only ---\n"); check_stdio_details("latin-1", NULL); printf("--- Set encoding and errors ---\n"); - check_stdio_details("latin-1", "surrogateescape"); + check_stdio_details("latin-1", "replace"); /* Check calling after initialization fails */ Py_Initialize(); -- cgit v1.2.1 From e6d37dabcc2c8e050f608dae95b7eef10ddb1e31 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Thu, 20 Mar 2014 18:00:35 -0500 Subject: remove the ability of datetime.time to be considered false (closes #13936) --- Modules/_datetimemodule.c | 38 +------------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 496ff348f1..04d9b5d1b2 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3805,29 +3805,6 @@ time_replace(PyDateTime_Time *self, PyObject *args, PyObject *kw) return clone; } -static int -time_bool(PyObject *self) -{ - PyObject *offset, *tzinfo; - int offsecs = 0; - - if (TIME_GET_SECOND(self) || TIME_GET_MICROSECOND(self)) { - /* Since utcoffset is in whole minutes, nothing can - * alter the conclusion that this is nonzero. - */ - return 1; - } - tzinfo = GET_TIME_TZINFO(self); - if (tzinfo != Py_None) { - offset = call_utcoffset(tzinfo, Py_None); - if (offset == NULL) - return -1; - offsecs = GET_TD_DAYS(offset)*86400 + GET_TD_SECONDS(offset); - Py_DECREF(offset); - } - return (TIME_GET_MINUTE(self)*60 - offsecs + TIME_GET_HOUR(self)*3600) != 0; -} - /* Pickle support, a simple use of __reduce__. */ /* Let basestate be the non-tzinfo data string. @@ -3895,19 +3872,6 @@ PyDoc_STR("time([hour[, minute[, second[, microsecond[, tzinfo]]]]]) --> a time All arguments are optional. tzinfo may be None, or an instance of\n\ a tzinfo subclass. The remaining arguments may be ints.\n"); -static PyNumberMethods time_as_number = { - 0, /* nb_add */ - 0, /* nb_subtract */ - 0, /* nb_multiply */ - 0, /* nb_remainder */ - 0, /* nb_divmod */ - 0, /* nb_power */ - 0, /* nb_negative */ - 0, /* nb_positive */ - 0, /* nb_absolute */ - (inquiry)time_bool, /* nb_bool */ -}; - static PyTypeObject PyDateTime_TimeType = { PyVarObject_HEAD_INIT(NULL, 0) "datetime.time", /* tp_name */ @@ -3919,7 +3883,7 @@ static PyTypeObject PyDateTime_TimeType = { 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)time_repr, /* tp_repr */ - &time_as_number, /* tp_as_number */ + 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)time_hash, /* tp_hash */ -- cgit v1.2.1 From e572e42f0cdf547372a6985bcc2f0f2d60b9f8ff Mon Sep 17 00:00:00 2001 From: Giampaolo Rodola' Date: Fri, 4 Apr 2014 15:34:17 +0200 Subject: fix #21076: turn signal module constants into enums --- Modules/signalmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index fedaddff35..c648bde24e 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -967,7 +967,7 @@ static struct PyModuleDef signalmodule = { }; PyMODINIT_FUNC -PyInit_signal(void) +PyInit__signal(void) { PyObject *m, *d, *x; int i; @@ -1380,7 +1380,7 @@ PyErr_SetInterrupt(void) void PyOS_InitInterrupts(void) { - PyObject *m = PyImport_ImportModule("signal"); + PyObject *m = PyImport_ImportModule("_signal"); if (m) { Py_DECREF(m); } -- cgit v1.2.1 From a229ca8e007f5c87b692adc5f7dccc9c1ad0de9f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 4 Apr 2014 16:30:04 +0200 Subject: Issue #21076: the C signal module has been renamed to _signal --- Modules/Setup.config.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/Setup.config.in b/Modules/Setup.config.in index 5ac2404bf8..adac030b6a 100644 --- a/Modules/Setup.config.in +++ b/Modules/Setup.config.in @@ -7,7 +7,7 @@ @USE_THREAD_MODULE@_thread _threadmodule.c # The signal module -@USE_SIGNAL_MODULE@signal signalmodule.c +@USE_SIGNAL_MODULE@_signal signalmodule.c # The rest of the modules previously listed in this file are built # by the setup.py script in Python 2.1 and later. -- cgit v1.2.1 From 3f16b927b6791867124ec969049fde4d61df0157 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 9 Apr 2014 23:55:56 -0400 Subject: PEP 465: a dedicated infix operator for matrix multiplication (closes #21176) --- Modules/_operator.c | 4 ++ Modules/_testcapimodule.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) (limited to 'Modules') diff --git a/Modules/_operator.c b/Modules/_operator.c index e8bef04f84..bcc0a0ee5c 100644 --- a/Modules/_operator.c +++ b/Modules/_operator.c @@ -69,6 +69,7 @@ spami(truth , PyObject_IsTrue) spam2(op_add , PyNumber_Add) spam2(op_sub , PyNumber_Subtract) spam2(op_mul , PyNumber_Multiply) +spam2(op_matmul , PyNumber_MatrixMultiply) spam2(op_floordiv , PyNumber_FloorDivide) spam2(op_truediv , PyNumber_TrueDivide) spam2(op_mod , PyNumber_Remainder) @@ -86,6 +87,7 @@ spam2(op_or_ , PyNumber_Or) spam2(op_iadd , PyNumber_InPlaceAdd) spam2(op_isub , PyNumber_InPlaceSubtract) spam2(op_imul , PyNumber_InPlaceMultiply) +spam2(op_imatmul , PyNumber_InPlaceMatrixMultiply) spam2(op_ifloordiv , PyNumber_InPlaceFloorDivide) spam2(op_itruediv , PyNumber_InPlaceTrueDivide) spam2(op_imod , PyNumber_InPlaceRemainder) @@ -343,6 +345,7 @@ spam2o(index, "index(a) -- Same as a.__index__()") spam2(add, "add(a, b) -- Same as a + b.") spam2(sub, "sub(a, b) -- Same as a - b.") spam2(mul, "mul(a, b) -- Same as a * b.") +spam2(matmul, "matmul(a, b) -- Same as a @ b.") spam2(floordiv, "floordiv(a, b) -- Same as a // b.") spam2(truediv, "truediv(a, b) -- Same as a / b.") spam2(mod, "mod(a, b) -- Same as a % b.") @@ -360,6 +363,7 @@ spam2(or_, "or_(a, b) -- Same as a | b.") spam2(iadd, "a = iadd(a, b) -- Same as a += b.") spam2(isub, "a = isub(a, b) -- Same as a -= b.") spam2(imul, "a = imul(a, b) -- Same as a *= b.") +spam2(imatmul, "a = imatmul(a, b) -- Same as a @= b.") spam2(ifloordiv, "a = ifloordiv(a, b) -- Same as a //= b.") spam2(itruediv, "a = itruediv(a, b) -- Same as a /= b") spam2(imod, "a = imod(a, b) -- Same as a %= b.") diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index db2376d036..291eee69ef 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3298,6 +3298,109 @@ static PyTypeObject test_structmembersType = { }; +typedef struct { + PyObject_HEAD +} matmulObject; + +static PyObject * +matmulType_matmul(PyObject *self, PyObject *other) +{ + return Py_BuildValue("(sOO)", "matmul", self, other); +} + +static PyObject * +matmulType_imatmul(PyObject *self, PyObject *other) +{ + return Py_BuildValue("(sOO)", "imatmul", self, other); +} + +static void +matmulType_dealloc(PyObject *self) +{ + return Py_TYPE(self)->tp_free(self); +} + +static PyNumberMethods matmulType_as_number = { + 0, /* nb_add */ + 0, /* nb_subtract */ + 0, /* nb_multiply */ + 0, /* nb_remainde r*/ + 0, /* nb_divmod */ + 0, /* nb_power */ + 0, /* nb_negative */ + 0, /* tp_positive */ + 0, /* tp_absolute */ + 0, /* tp_bool */ + 0, /* nb_invert */ + 0, /* nb_lshift */ + 0, /* nb_rshift */ + 0, /* nb_and */ + 0, /* nb_xor */ + 0, /* nb_or */ + 0, /* nb_int */ + 0, /* nb_reserved */ + 0, /* nb_float */ + 0, /* nb_inplace_add */ + 0, /* nb_inplace_subtract */ + 0, /* nb_inplace_multiply */ + 0, /* nb_inplace_remainder */ + 0, /* nb_inplace_power */ + 0, /* nb_inplace_lshift */ + 0, /* nb_inplace_rshift */ + 0, /* nb_inplace_and */ + 0, /* nb_inplace_xor */ + 0, /* nb_inplace_or */ + 0, /* nb_floor_divide */ + 0, /* nb_true_divide */ + 0, /* nb_inplace_floor_divide */ + 0, /* nb_inplace_true_divide */ + 0, /* nb_index */ + matmulType_matmul, /* nb_matrix_multiply */ + matmulType_imatmul /* nb_matrix_inplace_multiply */ +}; + +static PyTypeObject matmulType = { + PyVarObject_HEAD_INIT(NULL, 0) + "matmulType", + sizeof(matmulObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + matmulType_dealloc, /* destructor tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + &matmulType_as_number, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + 0, /* tp_flags */ + "C level type with matrix operations defined", + 0, /* traverseproc tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + PyType_GenericNew, /* tp_new */ + PyObject_Del, /* tp_free */ +}; + static struct PyModuleDef _testcapimodule = { PyModuleDef_HEAD_INIT, @@ -3327,6 +3430,10 @@ PyInit__testcapi(void) /* don't use a name starting with "test", since we don't want test_capi to automatically call this */ PyModule_AddObject(m, "_test_structmembersType", (PyObject *)&test_structmembersType); + if (PyType_Ready(&matmulType) < 0) + return NULL; + Py_INCREF(&matmulType); + PyModule_AddObject(m, "matmulType", (PyObject *)&matmulType); PyModule_AddObject(m, "CHAR_MAX", PyLong_FromLong(CHAR_MAX)); PyModule_AddObject(m, "CHAR_MIN", PyLong_FromLong(CHAR_MIN)); -- cgit v1.2.1 From eca5207a320a2a23dcc7ff2b07bcf46fd99770a8 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Thu, 10 Apr 2014 09:29:39 -0400 Subject: Issue #20539: Improve math.factorial error messages and types for large inputs. - Better message for the OverflowError in large positive inputs. - Changed exception type from OverflowError to ValueError for large negative inputs. --- Modules/mathmodule.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 7f094ffb53..7f525ea66f 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -1408,6 +1408,7 @@ static PyObject * math_factorial(PyObject *self, PyObject *arg) { long x; + int overflow; PyObject *result, *odd_part, *two_valuation; if (PyFloat_Check(arg)) { @@ -1421,15 +1422,22 @@ math_factorial(PyObject *self, PyObject *arg) lx = PyLong_FromDouble(dx); if (lx == NULL) return NULL; - x = PyLong_AsLong(lx); + x = PyLong_AsLongAndOverflow(lx, &overflow); Py_DECREF(lx); } else - x = PyLong_AsLong(arg); + x = PyLong_AsLongAndOverflow(arg, &overflow); - if (x == -1 && PyErr_Occurred()) + if (x == -1 && PyErr_Occurred()) { + return NULL; + } + else if (overflow == 1) { + PyErr_Format(PyExc_OverflowError, + "factorial() argument should not exceed %ld", + LONG_MAX); return NULL; - if (x < 0) { + } + else if (overflow == -1 || x < 0) { PyErr_SetString(PyExc_ValueError, "factorial() not defined for negative values"); return NULL; -- cgit v1.2.1 From 09a907858efb25892f040e94f70e319102f71512 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 23 Apr 2014 00:58:48 -0700 Subject: Add implementation notes --- Modules/_collectionsmodule.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index c1aa9a30bc..0ab4156a24 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -3,7 +3,7 @@ /* collections module implementation of a deque() datatype Written and maintained by Raymond D. Hettinger - Copyright (c) 2004-2013 Python Software Foundation. + Copyright (c) 2004-2014 Python Software Foundation. All rights reserved. */ @@ -145,6 +145,12 @@ typedef struct { static PyTypeObject deque_type; +/* XXX Todo: + If aligned memory allocations become available, make the + deque object 64 byte aligned so that all of the fields + can be retrieved or updated in a single cache line. +*/ + static PyObject * deque_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { @@ -454,6 +460,31 @@ deque_inplace_concat(dequeobject *deque, PyObject *other) return (PyObject *)deque; } +/* The rotate() method is part of the public API and is used internally +as a primitive for other methods. + +Rotation by 1 or -1 is a common case, so any optimizations for high +volume rotations should take care not to penalize the common case. + +Conceptually, a rotate by one is equivalent to a pop on one side and an +append on the other. However, a pop/append pair is unnecessarily slow +because it requires a incref/decref pair for an object located randomly +in memory. It is better to just move the object pointer from one block +to the next without changing the reference count. + +When moving batches of pointers, it is tempting to use memcpy() but that +proved to be slower than a simple loop for a variety of reasons. +Memcpy() cannot know in advance that we're copying pointers instead of +bytes, that the source and destination are pointer aligned and +non-overlapping, that moving just one pointer is a common case, that we +never need to move more than BLOCKLEN pointers, and that at least one +pointer is always moved. + +For high volume rotations, newblock() and freeblock() are never called +more than once. Previously emptied blocks are immediately reused as a +destination block. If a block is left-over at the end, it is freed. +*/ + static int _deque_rotate(dequeobject *deque, Py_ssize_t n) { -- cgit v1.2.1 From 95786a96fb11060c6fd20ee70611ec936d20dcc5 Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Wed, 23 Apr 2014 13:51:27 -0500 Subject: Fix compiler warning on Windows ..\Modules\_testcapimodule.c(3320): warning C4098: 'matmulType_dealloc' : 'void' function returning a value --- Modules/_testcapimodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 291eee69ef..750e90fa4c 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3317,7 +3317,7 @@ matmulType_imatmul(PyObject *self, PyObject *other) static void matmulType_dealloc(PyObject *self) { - return Py_TYPE(self)->tp_free(self); + Py_TYPE(self)->tp_free(self); } static PyNumberMethods matmulType_as_number = { -- cgit v1.2.1 From b7e74d4b32d290a54851d0a2dd03b2815639b715 Mon Sep 17 00:00:00 2001 From: Tim Golden Date: Sun, 27 Apr 2014 18:00:10 +0100 Subject: Issue #18314 os.unlink will now remove junction points on Windows. Patch by Kim Gr?sman. --- Modules/_winapi.c | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++ Modules/posixmodule.c | 45 +++++---------------- Modules/winreparse.h | 53 ++++++++++++++++++++++++ 3 files changed, 171 insertions(+), 36 deletions(-) create mode 100644 Modules/winreparse.h (limited to 'Modules') diff --git a/Modules/_winapi.c b/Modules/_winapi.c index b755178427..80c1e929d9 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -40,6 +40,7 @@ #define WINDOWS_LEAN_AND_MEAN #include "windows.h" #include +#include "winreparse.h" #if defined(MS_WIN32) && !defined(MS_WIN64) #define HANDLE_TO_PYNUM(handle) \ @@ -400,6 +401,112 @@ winapi_CreateFile(PyObject *self, PyObject *args) return Py_BuildValue(F_HANDLE, handle); } +static PyObject * +winapi_CreateJunction(PyObject *self, PyObject *args) +{ + /* Input arguments */ + LPWSTR src_path = NULL; + LPWSTR dst_path = NULL; + + /* Privilege adjustment */ + HANDLE token = NULL; + TOKEN_PRIVILEGES tp; + + /* Reparse data buffer */ + const USHORT prefix_len = 4; + USHORT print_len = 0; + USHORT rdb_size = 0; + PREPARSE_DATA_BUFFER rdb = NULL; + + /* Junction point creation */ + HANDLE junction = NULL; + DWORD ret = 0; + + if (!PyArg_ParseTuple(args, "uu", + &src_path, &dst_path)) + return NULL; + + if (memcmp(src_path, L"\\??\\", prefix_len * sizeof(WCHAR)) == 0) + return PyErr_SetFromWindowsErr(ERROR_INVALID_PARAMETER); + + /* Adjust privileges to allow rewriting directory entry as a + junction point. */ + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token)) + goto cleanup; + + if (!LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &tp.Privileges[0].Luid)) + goto cleanup; + + tp.PrivilegeCount = 1; + tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + if (!AdjustTokenPrivileges(token, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), + NULL, NULL)) + goto cleanup; + + if (GetFileAttributesW(src_path) == INVALID_FILE_ATTRIBUTES) + goto cleanup; + + print_len = (USHORT)GetFullPathNameW(src_path, 0, NULL, NULL); + if (print_len == 0) + goto cleanup; + + /* NUL terminator should not be part of print_len */ + --print_len; + + rdb_size = REPARSE_DATA_BUFFER_HEADER_SIZE + + sizeof(rdb->MountPointReparseBuffer) - + sizeof(rdb->MountPointReparseBuffer.PathBuffer) + + /* Two +1's for NUL terminators. */ + (prefix_len + print_len + 1 + print_len + 1) * sizeof(WCHAR); + rdb = (PREPARSE_DATA_BUFFER)PyMem_RawMalloc(rdb_size, 1); + + rdb->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT; + rdb->ReparseDataLength = rdb_size - REPARSE_DATA_BUFFER_HEADER_SIZE; + rdb->MountPointReparseBuffer.SubstituteNameOffset = 0; + rdb->MountPointReparseBuffer.SubstituteNameLength = + (prefix_len + print_len) * sizeof(WCHAR); + rdb->MountPointReparseBuffer.PrintNameOffset = + rdb->MountPointReparseBuffer.SubstituteNameLength + sizeof(WCHAR); + rdb->MountPointReparseBuffer.PrintNameLength = print_len * sizeof(WCHAR); + + lstrcpyW(rdb->MountPointReparseBuffer.PathBuffer, L"\\??\\"); + if (GetFullPathNameW(src_path, print_len + 1, + rdb->MountPointReparseBuffer.PathBuffer + prefix_len, + NULL) == 0) + goto cleanup; + + lstrcpyW(rdb->MountPointReparseBuffer.PathBuffer + + prefix_len + print_len + 1, + rdb->MountPointReparseBuffer.PathBuffer + prefix_len); + + /* Create a directory for the junction point. */ + if (!CreateDirectoryW(dst_path, NULL)) + goto cleanup; + + junction = CreateFileW(dst_path, GENERIC_READ | GENERIC_WRITE, 0, NULL, + OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, NULL); + if (junction == INVALID_HANDLE_VALUE) + goto cleanup; + + /* Make the directory entry a junction point. */ + if (!DeviceIoControl(junction, FSCTL_SET_REPARSE_POINT, rdb, rdb_size, + NULL, 0, &ret, NULL)) + goto cleanup; + +cleanup: + ret = GetLastError(); + + CloseHandle(token); + CloseHandle(junction); + free(rdb); + + if (ret != 0) + return PyErr_SetFromWindowsErr(ret); + + Py_RETURN_NONE; +} + static PyObject * winapi_CreateNamedPipe(PyObject *self, PyObject *args) { @@ -1225,6 +1332,8 @@ static PyMethodDef winapi_functions[] = { METH_VARARGS | METH_KEYWORDS, ""}, {"CreateFile", winapi_CreateFile, METH_VARARGS, ""}, + {"CreateJunction", winapi_CreateJunction, METH_VARARGS, + ""}, {"CreateNamedPipe", winapi_CreateNamedPipe, METH_VARARGS, ""}, {"CreatePipe", winapi_CreatePipe, METH_VARARGS, diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 8cd5485ceb..916be81e43 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -27,6 +27,8 @@ #include "Python.h" #ifndef MS_WINDOWS #include "posixmodule.h" +#else +#include "winreparse.h" #endif #ifdef __cplusplus @@ -301,6 +303,9 @@ extern int lstat(const char *, struct stat *); #ifndef IO_REPARSE_TAG_SYMLINK #define IO_REPARSE_TAG_SYMLINK (0xA000000CL) #endif +#ifndef IO_REPARSE_TAG_MOUNT_POINT +#define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L) +#endif #include "osdefs.h" #include #include @@ -1109,41 +1114,6 @@ _PyVerify_fd_dup2(int fd1, int fd2) #endif #ifdef MS_WINDOWS -/* The following structure was copied from - http://msdn.microsoft.com/en-us/library/ms791514.aspx as the required - include doesn't seem to be present in the Windows SDK (at least as included - with Visual Studio Express). */ -typedef struct _REPARSE_DATA_BUFFER { - ULONG ReparseTag; - USHORT ReparseDataLength; - USHORT Reserved; - union { - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - ULONG Flags; - WCHAR PathBuffer[1]; - } SymbolicLinkReparseBuffer; - - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - WCHAR PathBuffer[1]; - } MountPointReparseBuffer; - - struct { - UCHAR DataBuffer[1]; - } GenericReparseBuffer; - }; -} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; - -#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER,\ - GenericReparseBuffer) -#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) static int win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag) @@ -4492,7 +4462,10 @@ BOOL WINAPI Py_DeleteFileW(LPCWSTR lpFileName) find_data_handle = FindFirstFileW(lpFileName, &find_data); if(find_data_handle != INVALID_HANDLE_VALUE) { - is_link = find_data.dwReserved0 == IO_REPARSE_TAG_SYMLINK; + /* IO_REPARSE_TAG_SYMLINK if it is a symlink and + IO_REPARSE_TAG_MOUNT_POINT if it is a junction point. */ + is_link = find_data.dwReserved0 == IO_REPARSE_TAG_SYMLINK || + find_data.dwReserved0 == IO_REPARSE_TAG_MOUNT_POINT; FindClose(find_data_handle); } } diff --git a/Modules/winreparse.h b/Modules/winreparse.h new file mode 100644 index 0000000000..66f7775dd2 --- /dev/null +++ b/Modules/winreparse.h @@ -0,0 +1,53 @@ +#ifndef Py_WINREPARSE_H +#define Py_WINREPARSE_H + +#ifdef MS_WINDOWS +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The following structure was copied from + http://msdn.microsoft.com/en-us/library/ff552012.aspx as the required + include doesn't seem to be present in the Windows SDK (at least as included + with Visual Studio Express). */ +typedef struct _REPARSE_DATA_BUFFER { + ULONG ReparseTag; + USHORT ReparseDataLength; + USHORT Reserved; + union { + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + ULONG Flags; + WCHAR PathBuffer[1]; + } SymbolicLinkReparseBuffer; + + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + WCHAR PathBuffer[1]; + } MountPointReparseBuffer; + + struct { + UCHAR DataBuffer[1]; + } GenericReparseBuffer; + }; +} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; + +#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER,\ + GenericReparseBuffer) +#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) + +#ifdef __cplusplus +} +#endif + +#endif /* MS_WINDOWS */ + +#endif /* !Py_WINREPARSE_H */ -- cgit v1.2.1 From 98c06b21e3bba89436fd1faafcb63c7e5e5c1350 Mon Sep 17 00:00:00 2001 From: Tim Golden Date: Sun, 27 Apr 2014 18:35:36 +0100 Subject: Backed out changeset: 17df50df62c7 --- Modules/_winapi.c | 109 -------------------------------------------------- Modules/posixmodule.c | 45 ++++++++++++++++----- Modules/winreparse.h | 53 ------------------------ 3 files changed, 36 insertions(+), 171 deletions(-) delete mode 100644 Modules/winreparse.h (limited to 'Modules') diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 80c1e929d9..b755178427 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -40,7 +40,6 @@ #define WINDOWS_LEAN_AND_MEAN #include "windows.h" #include -#include "winreparse.h" #if defined(MS_WIN32) && !defined(MS_WIN64) #define HANDLE_TO_PYNUM(handle) \ @@ -401,112 +400,6 @@ winapi_CreateFile(PyObject *self, PyObject *args) return Py_BuildValue(F_HANDLE, handle); } -static PyObject * -winapi_CreateJunction(PyObject *self, PyObject *args) -{ - /* Input arguments */ - LPWSTR src_path = NULL; - LPWSTR dst_path = NULL; - - /* Privilege adjustment */ - HANDLE token = NULL; - TOKEN_PRIVILEGES tp; - - /* Reparse data buffer */ - const USHORT prefix_len = 4; - USHORT print_len = 0; - USHORT rdb_size = 0; - PREPARSE_DATA_BUFFER rdb = NULL; - - /* Junction point creation */ - HANDLE junction = NULL; - DWORD ret = 0; - - if (!PyArg_ParseTuple(args, "uu", - &src_path, &dst_path)) - return NULL; - - if (memcmp(src_path, L"\\??\\", prefix_len * sizeof(WCHAR)) == 0) - return PyErr_SetFromWindowsErr(ERROR_INVALID_PARAMETER); - - /* Adjust privileges to allow rewriting directory entry as a - junction point. */ - if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token)) - goto cleanup; - - if (!LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &tp.Privileges[0].Luid)) - goto cleanup; - - tp.PrivilegeCount = 1; - tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - if (!AdjustTokenPrivileges(token, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), - NULL, NULL)) - goto cleanup; - - if (GetFileAttributesW(src_path) == INVALID_FILE_ATTRIBUTES) - goto cleanup; - - print_len = (USHORT)GetFullPathNameW(src_path, 0, NULL, NULL); - if (print_len == 0) - goto cleanup; - - /* NUL terminator should not be part of print_len */ - --print_len; - - rdb_size = REPARSE_DATA_BUFFER_HEADER_SIZE + - sizeof(rdb->MountPointReparseBuffer) - - sizeof(rdb->MountPointReparseBuffer.PathBuffer) + - /* Two +1's for NUL terminators. */ - (prefix_len + print_len + 1 + print_len + 1) * sizeof(WCHAR); - rdb = (PREPARSE_DATA_BUFFER)PyMem_RawMalloc(rdb_size, 1); - - rdb->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT; - rdb->ReparseDataLength = rdb_size - REPARSE_DATA_BUFFER_HEADER_SIZE; - rdb->MountPointReparseBuffer.SubstituteNameOffset = 0; - rdb->MountPointReparseBuffer.SubstituteNameLength = - (prefix_len + print_len) * sizeof(WCHAR); - rdb->MountPointReparseBuffer.PrintNameOffset = - rdb->MountPointReparseBuffer.SubstituteNameLength + sizeof(WCHAR); - rdb->MountPointReparseBuffer.PrintNameLength = print_len * sizeof(WCHAR); - - lstrcpyW(rdb->MountPointReparseBuffer.PathBuffer, L"\\??\\"); - if (GetFullPathNameW(src_path, print_len + 1, - rdb->MountPointReparseBuffer.PathBuffer + prefix_len, - NULL) == 0) - goto cleanup; - - lstrcpyW(rdb->MountPointReparseBuffer.PathBuffer + - prefix_len + print_len + 1, - rdb->MountPointReparseBuffer.PathBuffer + prefix_len); - - /* Create a directory for the junction point. */ - if (!CreateDirectoryW(dst_path, NULL)) - goto cleanup; - - junction = CreateFileW(dst_path, GENERIC_READ | GENERIC_WRITE, 0, NULL, - OPEN_EXISTING, - FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, NULL); - if (junction == INVALID_HANDLE_VALUE) - goto cleanup; - - /* Make the directory entry a junction point. */ - if (!DeviceIoControl(junction, FSCTL_SET_REPARSE_POINT, rdb, rdb_size, - NULL, 0, &ret, NULL)) - goto cleanup; - -cleanup: - ret = GetLastError(); - - CloseHandle(token); - CloseHandle(junction); - free(rdb); - - if (ret != 0) - return PyErr_SetFromWindowsErr(ret); - - Py_RETURN_NONE; -} - static PyObject * winapi_CreateNamedPipe(PyObject *self, PyObject *args) { @@ -1332,8 +1225,6 @@ static PyMethodDef winapi_functions[] = { METH_VARARGS | METH_KEYWORDS, ""}, {"CreateFile", winapi_CreateFile, METH_VARARGS, ""}, - {"CreateJunction", winapi_CreateJunction, METH_VARARGS, - ""}, {"CreateNamedPipe", winapi_CreateNamedPipe, METH_VARARGS, ""}, {"CreatePipe", winapi_CreatePipe, METH_VARARGS, diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 916be81e43..8cd5485ceb 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -27,8 +27,6 @@ #include "Python.h" #ifndef MS_WINDOWS #include "posixmodule.h" -#else -#include "winreparse.h" #endif #ifdef __cplusplus @@ -303,9 +301,6 @@ extern int lstat(const char *, struct stat *); #ifndef IO_REPARSE_TAG_SYMLINK #define IO_REPARSE_TAG_SYMLINK (0xA000000CL) #endif -#ifndef IO_REPARSE_TAG_MOUNT_POINT -#define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L) -#endif #include "osdefs.h" #include #include @@ -1114,6 +1109,41 @@ _PyVerify_fd_dup2(int fd1, int fd2) #endif #ifdef MS_WINDOWS +/* The following structure was copied from + http://msdn.microsoft.com/en-us/library/ms791514.aspx as the required + include doesn't seem to be present in the Windows SDK (at least as included + with Visual Studio Express). */ +typedef struct _REPARSE_DATA_BUFFER { + ULONG ReparseTag; + USHORT ReparseDataLength; + USHORT Reserved; + union { + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + ULONG Flags; + WCHAR PathBuffer[1]; + } SymbolicLinkReparseBuffer; + + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + WCHAR PathBuffer[1]; + } MountPointReparseBuffer; + + struct { + UCHAR DataBuffer[1]; + } GenericReparseBuffer; + }; +} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; + +#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER,\ + GenericReparseBuffer) +#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) static int win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag) @@ -4462,10 +4492,7 @@ BOOL WINAPI Py_DeleteFileW(LPCWSTR lpFileName) find_data_handle = FindFirstFileW(lpFileName, &find_data); if(find_data_handle != INVALID_HANDLE_VALUE) { - /* IO_REPARSE_TAG_SYMLINK if it is a symlink and - IO_REPARSE_TAG_MOUNT_POINT if it is a junction point. */ - is_link = find_data.dwReserved0 == IO_REPARSE_TAG_SYMLINK || - find_data.dwReserved0 == IO_REPARSE_TAG_MOUNT_POINT; + is_link = find_data.dwReserved0 == IO_REPARSE_TAG_SYMLINK; FindClose(find_data_handle); } } diff --git a/Modules/winreparse.h b/Modules/winreparse.h deleted file mode 100644 index 66f7775dd2..0000000000 --- a/Modules/winreparse.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef Py_WINREPARSE_H -#define Py_WINREPARSE_H - -#ifdef MS_WINDOWS -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* The following structure was copied from - http://msdn.microsoft.com/en-us/library/ff552012.aspx as the required - include doesn't seem to be present in the Windows SDK (at least as included - with Visual Studio Express). */ -typedef struct _REPARSE_DATA_BUFFER { - ULONG ReparseTag; - USHORT ReparseDataLength; - USHORT Reserved; - union { - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - ULONG Flags; - WCHAR PathBuffer[1]; - } SymbolicLinkReparseBuffer; - - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - WCHAR PathBuffer[1]; - } MountPointReparseBuffer; - - struct { - UCHAR DataBuffer[1]; - } GenericReparseBuffer; - }; -} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; - -#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER,\ - GenericReparseBuffer) -#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) - -#ifdef __cplusplus -} -#endif - -#endif /* MS_WINDOWS */ - -#endif /* !Py_WINREPARSE_H */ -- cgit v1.2.1 From 31fcf08b73e602cc878f2efa002db4f9f14f5ffe Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Tue, 29 Apr 2014 00:56:08 +0200 Subject: Issue #20355: -W command line options now have higher priority than the PYTHONWARNINGS environment variable. Patch by Arfrever. --- Modules/main.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/main.c b/Modules/main.c index 87a21d7c30..1c25326d0c 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -343,6 +343,8 @@ Py_Main(int argc, wchar_t **argv) int version = 0; int saw_unbuffered_flag = 0; PyCompilerFlags cf; + PyObject *warning_option = NULL; + PyObject *warning_options = NULL; cf.cf_flags = 0; @@ -465,7 +467,15 @@ Py_Main(int argc, wchar_t **argv) break; case 'W': - PySys_AddWarnOption(_PyOS_optarg); + if (warning_options == NULL) + warning_options = PyList_New(0); + if (warning_options == NULL) + Py_FatalError("failure in handling of -W argument"); + warning_option = PyUnicode_FromWideChar(_PyOS_optarg, -1); + if (warning_option == NULL) + Py_FatalError("failure in handling of -W argument"); + PyList_Append(warning_options, warning_option); + Py_DECREF(warning_option); break; case 'X': @@ -559,6 +569,12 @@ Py_Main(int argc, wchar_t **argv) PyMem_RawFree(buf); } #endif + if (warning_options != NULL) { + Py_ssize_t i; + for (i = 0; i < PyList_GET_SIZE(warning_options); i++) { + PySys_AddWarnOptionUnicode(PyList_GET_ITEM(warning_options, i)); + } + } if (command == NULL && module == NULL && _PyOS_optind < argc && wcscmp(argv[_PyOS_optind], L"-") != 0) @@ -652,6 +668,7 @@ Py_Main(int argc, wchar_t **argv) Py_SetProgramName(argv[0]); #endif Py_Initialize(); + Py_XDECREF(warning_options); if (!Py_QuietFlag && (Py_VerboseFlag || (command == NULL && filename == NULL && -- cgit v1.2.1 From 563838be24bb081331ccb946b9d4c1b9a3a92aa8 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Tue, 29 Apr 2014 10:14:02 +0200 Subject: Issue #21057: TextIOWrapper now allows the underlying binary stream's read() or read1() method to return an arbitrary bytes-like object (such as a memoryview). Patch by Nikolaus Rath. --- Modules/_io/textio.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 5739bc4d01..d5c7339b96 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -1439,6 +1439,7 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint) PyObject *dec_buffer = NULL; PyObject *dec_flags = NULL; PyObject *input_chunk = NULL; + Py_buffer input_chunk_buf; PyObject *decoded_chars, *chunk_size; Py_ssize_t nbytes, nchars; int eof; @@ -1470,6 +1471,15 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint) Py_DECREF(state); return -1; } + + if (!PyBytes_Check(dec_buffer)) { + PyErr_Format(PyExc_TypeError, + "decoder getstate() should have returned a bytes " + "object, not '%.200s'", + Py_TYPE(dec_buffer)->tp_name); + Py_DECREF(state); + return -1; + } Py_INCREF(dec_buffer); Py_INCREF(dec_flags); Py_DECREF(state); @@ -1482,23 +1492,24 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint) chunk_size = PyLong_FromSsize_t(Py_MAX(self->chunk_size, size_hint)); if (chunk_size == NULL) goto fail; + input_chunk = PyObject_CallMethodObjArgs(self->buffer, (self->has_read1 ? _PyIO_str_read1: _PyIO_str_read), chunk_size, NULL); Py_DECREF(chunk_size); if (input_chunk == NULL) goto fail; - if (!PyBytes_Check(input_chunk)) { + + if (PyObject_GetBuffer(input_chunk, &input_chunk_buf, 0) != 0) { PyErr_Format(PyExc_TypeError, - "underlying %s() should have returned a bytes object, " + "underlying %s() should have returned a bytes-like object, " "not '%.200s'", (self->has_read1 ? "read1": "read"), Py_TYPE(input_chunk)->tp_name); goto fail; } - nbytes = PyBytes_Size(input_chunk); + nbytes = input_chunk_buf.len; eof = (nbytes == 0); - if (Py_TYPE(self->decoder) == &PyIncrementalNewlineDecoder_Type) { decoded_chars = _PyIncrementalNewlineDecoder_decode( self->decoder, input_chunk, eof); @@ -1507,6 +1518,7 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint) decoded_chars = PyObject_CallMethodObjArgs(self->decoder, _PyIO_str_decode, input_chunk, eof ? Py_True : Py_False, NULL); } + PyBuffer_Release(&input_chunk_buf); if (check_decoded(decoded_chars) < 0) goto fail; @@ -1523,18 +1535,12 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint) /* At the snapshot point, len(dec_buffer) bytes before the read, the * next input to be decoded is dec_buffer + input_chunk. */ - PyObject *next_input = PyNumber_Add(dec_buffer, input_chunk); - if (next_input == NULL) - goto fail; - if (!PyBytes_Check(next_input)) { - PyErr_Format(PyExc_TypeError, - "decoder getstate() should have returned a bytes " - "object, not '%.200s'", - Py_TYPE(next_input)->tp_name); - Py_DECREF(next_input); + PyObject *next_input = dec_buffer; + PyBytes_Concat(&next_input, input_chunk); + if (next_input == NULL) { + dec_buffer = NULL; /* Reference lost to PyBytes_Concat */ goto fail; } - Py_DECREF(dec_buffer); Py_CLEAR(self->snapshot); self->snapshot = Py_BuildValue("NN", dec_flags, next_input); } -- cgit v1.2.1 From e8e4b6765e8170d474f369406dbe8fd8904e60ec Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Tue, 29 Apr 2014 18:23:35 +0200 Subject: Issue #21374: Fix pickling of DecimalTuple. --- Modules/_decimal/_decimal.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index ea5253efb6..8be9be6489 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -3542,7 +3542,7 @@ PyDec_Round(PyObject *dec, PyObject *args) } } -static PyObject *DecimalTuple = NULL; +static PyTypeObject *DecimalTuple = NULL; /* Return the DecimalTuple representation of a PyDecObject. */ static PyObject * PyDec_AsTuple(PyObject *dec, PyObject *dummy UNUSED) @@ -3625,7 +3625,7 @@ PyDec_AsTuple(PyObject *dec, PyObject *dummy UNUSED) } } - result = PyObject_CallFunctionObjArgs(DecimalTuple, + result = PyObject_CallFunctionObjArgs((PyObject *)DecimalTuple, sign, coeff, expt, NULL); out: @@ -5562,9 +5562,14 @@ PyInit__decimal(void) /* DecimalTuple */ ASSIGN_PTR(collections, PyImport_ImportModule("collections")); - ASSIGN_PTR(DecimalTuple, PyObject_CallMethod(collections, + ASSIGN_PTR(DecimalTuple, (PyTypeObject *)PyObject_CallMethod(collections, "namedtuple", "(ss)", "DecimalTuple", "sign digits exponent")); + + ASSIGN_PTR(obj, PyUnicode_FromString("decimal")); + CHECK_INT(PyDict_SetItemString(DecimalTuple->tp_dict, "__module__", obj)); + Py_CLEAR(obj); + /* MutableMapping */ ASSIGN_PTR(MutableMapping, PyObject_GetAttrString(collections, "MutableMapping")); @@ -5591,7 +5596,7 @@ PyInit__decimal(void) CHECK_INT(PyModule_AddObject(m, "Context", (PyObject *)&PyDecContext_Type)); Py_INCREF(DecimalTuple); - CHECK_INT(PyModule_AddObject(m, "DecimalTuple", DecimalTuple)); + CHECK_INT(PyModule_AddObject(m, "DecimalTuple", (PyObject *)DecimalTuple)); /* Create top level exception */ -- cgit v1.2.1 From f42fb32bc7d8c8639a2cf0848228bdcccc494d1b Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Thu, 1 May 2014 15:53:42 +0200 Subject: Issue #21407: _decimal now supports function signatures. --- Modules/_decimal/docstrings.h | 860 +++++++++++++++++++++++------------------- 1 file changed, 482 insertions(+), 378 deletions(-) (limited to 'Modules') diff --git a/Modules/_decimal/docstrings.h b/Modules/_decimal/docstrings.h index a6490b982a..035ca9c2d2 100644 --- a/Modules/_decimal/docstrings.h +++ b/Modules/_decimal/docstrings.h @@ -19,26 +19,30 @@ PyDoc_STRVAR(doc__decimal, "C decimal arithmetic module"); -PyDoc_STRVAR(doc_getcontext,"\n\ -getcontext() - Get the current default context.\n\ +PyDoc_STRVAR(doc_getcontext, +"getcontext($module, /)\n--\n\n\ +Get the current default context.\n\ \n"); -PyDoc_STRVAR(doc_setcontext,"\n\ -setcontext(c) - Set a new default context.\n\ +PyDoc_STRVAR(doc_setcontext, +"setcontext($module, context, /)\n--\n\n\ +Set a new default context.\n\ \n"); -PyDoc_STRVAR(doc_localcontext,"\n\ -localcontext(ctx=None) - Return a context manager that will set the default\n\ -context to a copy of ctx on entry to the with-statement and restore the\n\ -previous default context when exiting the with-statement. If no context is\n\ -specified, a copy of the current default context is used.\n\ +PyDoc_STRVAR(doc_localcontext, +"localcontext($module, /, ctx=None)\n--\n\n\ +Return a context manager that will set the default context to a copy of ctx\n\ +on entry to the with-statement and restore the previous default context when\n\ +exiting the with-statement. If no context is specified, a copy of the current\n\ +default context is used.\n\ \n"); #ifdef EXTRA_FUNCTIONALITY -PyDoc_STRVAR(doc_ieee_context,"\n\ -IEEEContext(bits) - Return a context object initialized to the proper values for\n\ -one of the IEEE interchange formats. The argument must be a multiple of 32 and\n\ -less than IEEE_CONTEXT_MAX_BITS. For the most common values, the constants\n\ +PyDoc_STRVAR(doc_ieee_context, +"IEEEContext($module, bits, /)\n--\n\n\ +Return a context object initialized to the proper values for one of the\n\ +IEEE interchange formats. The argument must be a multiple of 32 and less\n\ +than IEEE_CONTEXT_MAX_BITS. For the most common values, the constants\n\ DECIMAL32, DECIMAL64 and DECIMAL128 are provided.\n\ \n"); #endif @@ -48,32 +52,34 @@ DECIMAL32, DECIMAL64 and DECIMAL128 are provided.\n\ /* Decimal Object and Methods */ /******************************************************************************/ -PyDoc_STRVAR(doc_decimal,"\n\ -Decimal(value=\"0\", context=None): Construct a new Decimal object.\n\ -value can be an integer, string, tuple, or another Decimal object.\n\ -If no value is given, return Decimal('0'). The context does not affect\n\ -the conversion and is only passed to determine if the InvalidOperation\n\ -trap is active.\n\ +PyDoc_STRVAR(doc_decimal, +"Decimal(value=\"0\", context=None)\n--\n\n\ +Construct a new Decimal object. 'value' can be an integer, string, tuple,\n\ +or another Decimal object. If no value is given, return Decimal('0'). The\n\ +context does not affect the conversion and is only passed to determine if\n\ +the InvalidOperation trap is active.\n\ \n"); -PyDoc_STRVAR(doc_adjusted,"\n\ -adjusted() - Return the adjusted exponent of the number.\n\ -\n\ -Defined as exp + digits - 1.\n\ +PyDoc_STRVAR(doc_adjusted, +"adjusted($self, /)\n--\n\n\ +Return the adjusted exponent of the number. Defined as exp + digits - 1.\n\ \n"); -PyDoc_STRVAR(doc_as_tuple,"\n\ -as_tuple() - Return a tuple representation of the number.\n\ +PyDoc_STRVAR(doc_as_tuple, +"as_tuple($self, /)\n--\n\n\ +Return a tuple representation of the number.\n\ \n"); -PyDoc_STRVAR(doc_canonical,"\n\ -canonical() - Return the canonical encoding of the argument. Currently,\n\ -the encoding of a Decimal instance is always canonical, so this operation\n\ -returns its argument unchanged.\n\ +PyDoc_STRVAR(doc_canonical, +"canonical($self, /)\n--\n\n\ +Return the canonical encoding of the argument. Currently, the encoding\n\ +of a Decimal instance is always canonical, so this operation returns its\n\ +argument unchanged.\n\ \n"); -PyDoc_STRVAR(doc_compare,"\n\ -compare(other, context=None) - Compare self to other. Return a decimal value:\n\ +PyDoc_STRVAR(doc_compare, +"compare($self, /, other, context=None)\n--\n\n\ +Compare self to other. Return a decimal value:\n\ \n\ a or b is a NaN ==> Decimal('NaN')\n\ a < b ==> Decimal('-1')\n\ @@ -81,17 +87,18 @@ compare(other, context=None) - Compare self to other. Return a decimal value:\n\ a > b ==> Decimal('1')\n\ \n"); -PyDoc_STRVAR(doc_compare_signal,"\n\ -compare_signal(other, context=None) - Identical to compare, except that\n\ -all NaNs signal.\n\ +PyDoc_STRVAR(doc_compare_signal, +"compare_signal($self, /, other, context=None)\n--\n\n\ +Identical to compare, except that all NaNs signal.\n\ \n"); -PyDoc_STRVAR(doc_compare_total,"\n\ -compare_total(other, context=None) - Compare two operands using their\n\ -abstract representation rather than their numerical value. Similar to the\n\ -compare() method, but the result gives a total ordering on Decimal instances.\n\ -Two Decimal instances with the same numeric value but different representations\n\ -compare unequal in this ordering:\n\ +PyDoc_STRVAR(doc_compare_total, +"compare_total($self, /, other, context=None)\n--\n\n\ +Compare two operands using their abstract representation rather than\n\ +their numerical value. Similar to the compare() method, but the result\n\ +gives a total ordering on Decimal instances. Two Decimal instances with\n\ +the same numeric value but different representations compare unequal\n\ +in this ordering:\n\ \n\ >>> Decimal('12.0').compare_total(Decimal('12'))\n\ Decimal('-1')\n\ @@ -107,36 +114,39 @@ and no rounding is performed. As an exception, the C version may raise\n\ InvalidOperation if the second operand cannot be converted exactly.\n\ \n"); -PyDoc_STRVAR(doc_compare_total_mag,"\n\ -compare_total_mag(other, context=None) - Compare two operands using their\n\ -abstract representation rather than their value as in compare_total(), but\n\ -ignoring the sign of each operand. x.compare_total_mag(y) is equivalent to\n\ -x.copy_abs().compare_total(y.copy_abs()).\n\ +PyDoc_STRVAR(doc_compare_total_mag, +"compare_total_mag($self, /, other, context=None)\n--\n\n\ +Compare two operands using their abstract representation rather than their\n\ +value as in compare_total(), but ignoring the sign of each operand.\n\ +\n\ +x.compare_total_mag(y) is equivalent to x.copy_abs().compare_total(y.copy_abs()).\n\ \n\ This operation is unaffected by context and is quiet: no flags are changed\n\ and no rounding is performed. As an exception, the C version may raise\n\ InvalidOperation if the second operand cannot be converted exactly.\n\ \n"); -PyDoc_STRVAR(doc_conjugate,"\n\ -conjugate() - Return self.\n\ +PyDoc_STRVAR(doc_conjugate, +"conjugate($self, /)\n--\n\n\ +Return self.\n\ \n"); -PyDoc_STRVAR(doc_copy_abs,"\n\ -copy_abs() - Return the absolute value of the argument. This operation\n\ -is unaffected by context and is quiet: no flags are changed and no rounding\n\ -is performed.\n\ +PyDoc_STRVAR(doc_copy_abs, +"copy_abs($self, /)\n--\n\n\ +Return the absolute value of the argument. This operation is unaffected by\n\ +context and is quiet: no flags are changed and no rounding is performed.\n\ \n"); -PyDoc_STRVAR(doc_copy_negate,"\n\ -copy_negate() - Return the negation of the argument. This operation is\n\ -unaffected by context and is quiet: no flags are changed and no rounding\n\ -is performed.\n\ +PyDoc_STRVAR(doc_copy_negate, +"copy_negate($self, /)\n--\n\n\ +Return the negation of the argument. This operation is unaffected by context\n\ +and is quiet: no flags are changed and no rounding is performed.\n\ \n"); -PyDoc_STRVAR(doc_copy_sign,"\n\ -copy_sign(other, context=None) - Return a copy of the first operand with\n\ -the sign set to be the same as the sign of the second operand. For example:\n\ +PyDoc_STRVAR(doc_copy_sign, +"copy_sign($self, /, other, context=None)\n--\n\n\ +Return a copy of the first operand with the sign set to be the same as the\n\ +sign of the second operand. For example:\n\ \n\ >>> Decimal('2.3').copy_sign(Decimal('-1.5'))\n\ Decimal('-2.3')\n\ @@ -146,14 +156,16 @@ and no rounding is performed. As an exception, the C version may raise\n\ InvalidOperation if the second operand cannot be converted exactly.\n\ \n"); -PyDoc_STRVAR(doc_exp,"\n\ -exp(context=None) - Return the value of the (natural) exponential function\n\ -e**x at the given number. The function always uses the ROUND_HALF_EVEN mode\n\ -and the result is correctly rounded.\n\ +PyDoc_STRVAR(doc_exp, +"exp($self, /, context=None)\n--\n\n\ +Return the value of the (natural) exponential function e**x at the given\n\ +number. The function always uses the ROUND_HALF_EVEN mode and the result\n\ +is correctly rounded.\n\ \n"); -PyDoc_STRVAR(doc_from_float,"\n\ -from_float(f) - Class method that converts a float to a decimal number, exactly.\n\ +PyDoc_STRVAR(doc_from_float, +"from_float($cls, f, /)\n--\n\n\ +Class method that converts a float to a decimal number, exactly.\n\ Since 0.1 is not exactly representable in binary floating point,\n\ Decimal.from_float(0.1) is not the same as Decimal('0.1').\n\ \n\ @@ -168,155 +180,176 @@ Decimal.from_float(0.1) is not the same as Decimal('0.1').\n\ \n\ \n"); -PyDoc_STRVAR(doc_fma,"\n\ -fma(other, third, context=None) - Fused multiply-add. Return self*other+third\n\ -with no rounding of the intermediate product self*other.\n\ +PyDoc_STRVAR(doc_fma, +"fma($self, /, other, third, context=None)\n--\n\n\ +Fused multiply-add. Return self*other+third with no rounding of the\n\ +intermediate product self*other.\n\ \n\ >>> Decimal(2).fma(3, 5)\n\ Decimal('11')\n\ \n\ \n"); -PyDoc_STRVAR(doc_is_canonical,"\n\ -is_canonical() - Return True if the argument is canonical and False otherwise.\n\ -Currently, a Decimal instance is always canonical, so this operation always\n\ -returns True.\n\ +PyDoc_STRVAR(doc_is_canonical, +"is_canonical($self, /)\n--\n\n\ +Return True if the argument is canonical and False otherwise. Currently,\n\ +a Decimal instance is always canonical, so this operation always returns\n\ +True.\n\ \n"); -PyDoc_STRVAR(doc_is_finite,"\n\ -is_finite() - Return True if the argument is a finite number, and False if the\n\ -argument is infinite or a NaN.\n\ +PyDoc_STRVAR(doc_is_finite, +"is_finite($self, /)\n--\n\n\ +Return True if the argument is a finite number, and False if the argument\n\ +is infinite or a NaN.\n\ \n"); -PyDoc_STRVAR(doc_is_infinite,"\n\ -is_infinite() - Return True if the argument is either positive or negative\n\ -infinity and False otherwise.\n\ +PyDoc_STRVAR(doc_is_infinite, +"is_infinite($self, /)\n--\n\n\ +Return True if the argument is either positive or negative infinity and\n\ +False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_is_nan,"\n\ -is_nan() - Return True if the argument is a (quiet or signaling) NaN and\n\ -False otherwise.\n\ +PyDoc_STRVAR(doc_is_nan, +"is_nan($self, /)\n--\n\n\ +Return True if the argument is a (quiet or signaling) NaN and False\n\ +otherwise.\n\ \n"); -PyDoc_STRVAR(doc_is_normal,"\n\ -is_normal(context=None) - Return True if the argument is a normal finite\n\ -non-zero number with an adjusted exponent greater than or equal to Emin.\n\ -Return False if the argument is zero, subnormal, infinite or a NaN.\n\ +PyDoc_STRVAR(doc_is_normal, +"is_normal($self, /, context=None)\n--\n\n\ +Return True if the argument is a normal finite non-zero number with an\n\ +adjusted exponent greater than or equal to Emin. Return False if the\n\ +argument is zero, subnormal, infinite or a NaN.\n\ \n"); -PyDoc_STRVAR(doc_is_qnan,"\n\ -is_qnan() - Return True if the argument is a quiet NaN, and False otherwise.\n\ +PyDoc_STRVAR(doc_is_qnan, +"is_qnan($self, /)\n--\n\n\ +Return True if the argument is a quiet NaN, and False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_is_signed,"\n\ -is_signed() - Return True if the argument has a negative sign and\n\ -False otherwise. Note that both zeros and NaNs can carry signs.\n\ +PyDoc_STRVAR(doc_is_signed, +"is_signed($self, /)\n--\n\n\ +Return True if the argument has a negative sign and False otherwise.\n\ +Note that both zeros and NaNs can carry signs.\n\ \n"); -PyDoc_STRVAR(doc_is_snan,"\n\ -is_snan() - Return True if the argument is a signaling NaN and False otherwise.\n\ +PyDoc_STRVAR(doc_is_snan, +"is_snan($self, /)\n--\n\n\ +Return True if the argument is a signaling NaN and False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_is_subnormal,"\n\ -is_subnormal(context=None) - Return True if the argument is subnormal, and\n\ -False otherwise. A number is subnormal if it is non-zero, finite, and has an\n\ -adjusted exponent less than Emin.\n\ +PyDoc_STRVAR(doc_is_subnormal, +"is_subnormal($self, /, context=None)\n--\n\n\ +Return True if the argument is subnormal, and False otherwise. A number is\n\ +subnormal if it is non-zero, finite, and has an adjusted exponent less\n\ +than Emin.\n\ \n"); -PyDoc_STRVAR(doc_is_zero,"\n\ -is_zero() - Return True if the argument is a (positive or negative) zero and\n\ -False otherwise.\n\ +PyDoc_STRVAR(doc_is_zero, +"is_zero($self, /)\n--\n\n\ +Return True if the argument is a (positive or negative) zero and False\n\ +otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ln,"\n\ -ln(context=None) - Return the natural (base e) logarithm of the operand.\n\ -The function always uses the ROUND_HALF_EVEN mode and the result is\n\ -correctly rounded.\n\ +PyDoc_STRVAR(doc_ln, +"ln($self, /, context=None)\n--\n\n\ +Return the natural (base e) logarithm of the operand. The function always\n\ +uses the ROUND_HALF_EVEN mode and the result is correctly rounded.\n\ \n"); -PyDoc_STRVAR(doc_log10,"\n\ -log10(context=None) - Return the base ten logarithm of the operand.\n\ -The function always uses the ROUND_HALF_EVEN mode and the result is\n\ -correctly rounded.\n\ +PyDoc_STRVAR(doc_log10, +"log10($self, /, context=None)\n--\n\n\ +Return the base ten logarithm of the operand. The function always uses the\n\ +ROUND_HALF_EVEN mode and the result is correctly rounded.\n\ \n"); -PyDoc_STRVAR(doc_logb,"\n\ -logb(context=None) - For a non-zero number, return the adjusted exponent\n\ -of the operand as a Decimal instance. If the operand is a zero, then\n\ -Decimal('-Infinity') is returned and the DivisionByZero condition is\n\ -raised. If the operand is an infinity then Decimal('Infinity') is returned.\n\ +PyDoc_STRVAR(doc_logb, +"logb($self, /, context=None)\n--\n\n\ +For a non-zero number, return the adjusted exponent of the operand as a\n\ +Decimal instance. If the operand is a zero, then Decimal('-Infinity') is\n\ +returned and the DivisionByZero condition is raised. If the operand is\n\ +an infinity then Decimal('Infinity') is returned.\n\ \n"); -PyDoc_STRVAR(doc_logical_and,"\n\ -logical_and(other, context=None) - Return the digit-wise and of the two\n\ -(logical) operands.\n\ +PyDoc_STRVAR(doc_logical_and, +"logical_and($self, /, other, context=None)\n--\n\n\ +Return the digit-wise 'and' of the two (logical) operands.\n\ \n"); -PyDoc_STRVAR(doc_logical_invert,"\n\ -logical_invert(context=None) - Return the digit-wise inversion of the\n\ -(logical) operand.\n\ +PyDoc_STRVAR(doc_logical_invert, +"logical_invert($self, /, context=None)\n--\n\n\ +Return the digit-wise inversion of the (logical) operand.\n\ \n"); -PyDoc_STRVAR(doc_logical_or,"\n\ -logical_or(other, context=None) - Return the digit-wise or of the two\n\ -(logical) operands.\n\ +PyDoc_STRVAR(doc_logical_or, +"logical_or($self, /, other, context=None)\n--\n\n\ +Return the digit-wise 'or' of the two (logical) operands.\n\ \n"); -PyDoc_STRVAR(doc_logical_xor,"\n\ -logical_xor(other, context=None) - Return the digit-wise exclusive or of the\n\ -two (logical) operands.\n\ +PyDoc_STRVAR(doc_logical_xor, +"logical_xor($self, /, other, context=None)\n--\n\n\ +Return the digit-wise 'exclusive or' of the two (logical) operands.\n\ \n"); -PyDoc_STRVAR(doc_max,"\n\ -max(other, context=None) - Maximum of self and other. If one operand is a\n\ -quiet NaN and the other is numeric, the numeric operand is returned.\n\ +PyDoc_STRVAR(doc_max, +"max($self, /, other, context=None)\n--\n\n\ +Maximum of self and other. If one operand is a quiet NaN and the other is\n\ +numeric, the numeric operand is returned.\n\ \n"); -PyDoc_STRVAR(doc_max_mag,"\n\ -max_mag(other, context=None) - Similar to the max() method, but the\n\ -comparison is done using the absolute values of the operands.\n\ +PyDoc_STRVAR(doc_max_mag, +"max_mag($self, /, other, context=None)\n--\n\n\ +Similar to the max() method, but the comparison is done using the absolute\n\ +values of the operands.\n\ \n"); -PyDoc_STRVAR(doc_min,"\n\ -min(other, context=None) - Minimum of self and other. If one operand is a\n\ -quiet NaN and the other is numeric, the numeric operand is returned.\n\ +PyDoc_STRVAR(doc_min, +"min($self, /, other, context=None)\n--\n\n\ +Minimum of self and other. If one operand is a quiet NaN and the other is\n\ +numeric, the numeric operand is returned.\n\ \n"); -PyDoc_STRVAR(doc_min_mag,"\n\ -min_mag(other, context=None) - Similar to the min() method, but the\n\ -comparison is done using the absolute values of the operands.\n\ +PyDoc_STRVAR(doc_min_mag, +"min_mag($self, /, other, context=None)\n--\n\n\ +Similar to the min() method, but the comparison is done using the absolute\n\ +values of the operands.\n\ \n"); -PyDoc_STRVAR(doc_next_minus,"\n\ -next_minus(context=None) - Return the largest number representable in the\n\ -given context (or in the current default context if no context is given) that\n\ -is smaller than the given operand.\n\ +PyDoc_STRVAR(doc_next_minus, +"next_minus($self, /, context=None)\n--\n\n\ +Return the largest number representable in the given context (or in the\n\ +current default context if no context is given) that is smaller than the\n\ +given operand.\n\ \n"); -PyDoc_STRVAR(doc_next_plus,"\n\ -next_plus(context=None) - Return the smallest number representable in the\n\ -given context (or in the current default context if no context is given) that\n\ -is larger than the given operand.\n\ +PyDoc_STRVAR(doc_next_plus, +"next_plus($self, /, context=None)\n--\n\n\ +Return the smallest number representable in the given context (or in the\n\ +current default context if no context is given) that is larger than the\n\ +given operand.\n\ \n"); -PyDoc_STRVAR(doc_next_toward,"\n\ -next_toward(other, context=None) - If the two operands are unequal, return\n\ -the number closest to the first operand in the direction of the second operand.\n\ -If both operands are numerically equal, return a copy of the first operand\n\ -with the sign set to be the same as the sign of the second operand.\n\ +PyDoc_STRVAR(doc_next_toward, +"next_toward($self, /, other, context=None)\n--\n\n\ +If the two operands are unequal, return the number closest to the first\n\ +operand in the direction of the second operand. If both operands are\n\ +numerically equal, return a copy of the first operand with the sign set\n\ +to be the same as the sign of the second operand.\n\ \n"); -PyDoc_STRVAR(doc_normalize,"\n\ -normalize(context=None) - Normalize the number by stripping the rightmost\n\ -trailing zeros and converting any result equal to Decimal('0') to Decimal('0e0').\n\ -Used for producing canonical values for members of an equivalence class. For\n\ -example, Decimal('32.100') and Decimal('0.321000e+2') both normalize to the\n\ -equivalent value Decimal('32.1').\n\ +PyDoc_STRVAR(doc_normalize, +"normalize($self, /, context=None)\n--\n\n\ +Normalize the number by stripping the rightmost trailing zeros and\n\ +converting any result equal to Decimal('0') to Decimal('0e0'). Used\n\ +for producing canonical values for members of an equivalence class.\n\ +For example, Decimal('32.100') and Decimal('0.321000e+2') both normalize\n\ +to the equivalent value Decimal('32.1').\n\ \n"); -PyDoc_STRVAR(doc_number_class,"\n\ -number_class(context=None) - Return a string describing the class of the\n\ -operand. The returned value is one of the following ten strings:\n\ +PyDoc_STRVAR(doc_number_class, +"number_class($self, /, context=None)\n--\n\n\ +Return a string describing the class of the operand. The returned value\n\ +is one of the following ten strings:\n\ \n\ * '-Infinity', indicating that the operand is negative infinity.\n\ * '-Normal', indicating that the operand is a negative normal number.\n\ @@ -331,9 +364,10 @@ operand. The returned value is one of the following ten strings:\n\ \n\ \n"); -PyDoc_STRVAR(doc_quantize,"\n\ -quantize(exp, rounding=None, context=None) - Return a value equal to the\n\ -first operand after rounding and having the exponent of the second operand.\n\ +PyDoc_STRVAR(doc_quantize, +"quantize($self, /, exp, rounding=None, context=None)\n--\n\n\ +Return a value equal to the first operand after rounding and having the\n\ +exponent of the second operand.\n\ \n\ >>> Decimal('1.41421356').quantize(Decimal('1.000'))\n\ Decimal('1.414')\n\ @@ -352,93 +386,98 @@ rounding argument if given, else by the given context argument; if neither\n\ argument is given, the rounding mode of the current thread's context is used.\n\ \n"); -PyDoc_STRVAR(doc_radix,"\n\ -radix() - Return Decimal(10), the radix (base) in which the Decimal class does\n\ +PyDoc_STRVAR(doc_radix, +"radix($self, /)\n--\n\n\ +Return Decimal(10), the radix (base) in which the Decimal class does\n\ all its arithmetic. Included for compatibility with the specification.\n\ \n"); -PyDoc_STRVAR(doc_remainder_near,"\n\ -remainder_near(other, context=None) - Return the remainder from dividing\n\ -self by other. This differs from self % other in that the sign of the\n\ -remainder is chosen so as to minimize its absolute value. More precisely, the\n\ -return value is self - n * other where n is the integer nearest to the exact\n\ -value of self / other, and if two integers are equally near then the even one\n\ -is chosen.\n\ +PyDoc_STRVAR(doc_remainder_near, +"remainder_near($self, /, other, context=None)\n--\n\n\ +Return the remainder from dividing self by other. This differs from\n\ +self % other in that the sign of the remainder is chosen so as to minimize\n\ +its absolute value. More precisely, the return value is self - n * other\n\ +where n is the integer nearest to the exact value of self / other, and\n\ +if two integers are equally near then the even one is chosen.\n\ \n\ If the result is zero then its sign will be the sign of self.\n\ \n"); -PyDoc_STRVAR(doc_rotate,"\n\ -rotate(other, context=None) - Return the result of rotating the digits of the\n\ -first operand by an amount specified by the second operand. The second operand\n\ -must be an integer in the range -precision through precision. The absolute\n\ -value of the second operand gives the number of places to rotate. If the second\n\ -operand is positive then rotation is to the left; otherwise rotation is to the\n\ -right. The coefficient of the first operand is padded on the left with zeros to\n\ +PyDoc_STRVAR(doc_rotate, +"rotate($self, /, other, context=None)\n--\n\n\ +Return the result of rotating the digits of the first operand by an amount\n\ +specified by the second operand. The second operand must be an integer in\n\ +the range -precision through precision. The absolute value of the second\n\ +operand gives the number of places to rotate. If the second operand is\n\ +positive then rotation is to the left; otherwise rotation is to the right.\n\ +The coefficient of the first operand is padded on the left with zeros to\n\ length precision if necessary. The sign and exponent of the first operand are\n\ unchanged.\n\ \n"); -PyDoc_STRVAR(doc_same_quantum,"\n\ -same_quantum(other, context=None) - Test whether self and other have the\n\ -same exponent or whether both are NaN.\n\ +PyDoc_STRVAR(doc_same_quantum, +"same_quantum($self, /, other, context=None)\n--\n\n\ +Test whether self and other have the same exponent or whether both are NaN.\n\ \n\ This operation is unaffected by context and is quiet: no flags are changed\n\ and no rounding is performed. As an exception, the C version may raise\n\ InvalidOperation if the second operand cannot be converted exactly.\n\ \n"); -PyDoc_STRVAR(doc_scaleb,"\n\ -scaleb(other, context=None) - Return the first operand with the exponent\n\ -adjusted the second. Equivalently, return the first operand multiplied by\n\ -10**other. The second operand must be an integer.\n\ +PyDoc_STRVAR(doc_scaleb, +"scaleb($self, /, other, context=None)\n--\n\n\ +Return the first operand with the exponent adjusted the second. Equivalently,\n\ +return the first operand multiplied by 10**other. The second operand must be\n\ +an integer.\n\ \n"); -PyDoc_STRVAR(doc_shift,"\n\ -shift(other, context=None) - Return the result of shifting the digits of\n\ -the first operand by an amount specified by the second operand. The second\n\ -operand must be an integer in the range -precision through precision. The\n\ -absolute value of the second operand gives the number of places to shift.\n\ -If the second operand is positive, then the shift is to the left; otherwise\n\ -the shift is to the right. Digits shifted into the coefficient are zeros.\n\ -The sign and exponent of the first operand are unchanged.\n\ +PyDoc_STRVAR(doc_shift, +"shift($self, /, other, context=None)\n--\n\n\ +Return the result of shifting the digits of the first operand by an amount\n\ +specified by the second operand. The second operand must be an integer in\n\ +the range -precision through precision. The absolute value of the second\n\ +operand gives the number of places to shift. If the second operand is\n\ +positive, then the shift is to the left; otherwise the shift is to the\n\ +right. Digits shifted into the coefficient are zeros. The sign and exponent\n\ +of the first operand are unchanged.\n\ \n"); -PyDoc_STRVAR(doc_sqrt,"\n\ -sqrt(context=None) - Return the square root of the argument to full precision.\n\ -The result is correctly rounded using the ROUND_HALF_EVEN rounding mode.\n\ +PyDoc_STRVAR(doc_sqrt, +"sqrt($self, /, context=None)\n--\n\n\ +Return the square root of the argument to full precision. The result is\n\ +correctly rounded using the ROUND_HALF_EVEN rounding mode.\n\ \n"); -PyDoc_STRVAR(doc_to_eng_string,"\n\ -to_eng_string(context=None) - Convert to an engineering-type string.\n\ -Engineering notation has an exponent which is a multiple of 3, so there\n\ -are up to 3 digits left of the decimal place. For example, Decimal('123E+1')\n\ -is converted to Decimal('1.23E+3').\n\ +PyDoc_STRVAR(doc_to_eng_string, +"to_eng_string($self, /, context=None)\n--\n\n\ +Convert to an engineering-type string. Engineering notation has an exponent\n\ +which is a multiple of 3, so there are up to 3 digits left of the decimal\n\ +place. For example, Decimal('123E+1') is converted to Decimal('1.23E+3').\n\ \n\ The value of context.capitals determines whether the exponent sign is lower\n\ or upper case. Otherwise, the context does not affect the operation.\n\ \n"); -PyDoc_STRVAR(doc_to_integral,"\n\ -to_integral(rounding=None, context=None) - Identical to the\n\ -to_integral_value() method. The to_integral() name has been kept\n\ -for compatibility with older versions.\n\ +PyDoc_STRVAR(doc_to_integral, +"to_integral($self, /, rounding=None, context=None)\n--\n\n\ +Identical to the to_integral_value() method. The to_integral() name has been\n\ +kept for compatibility with older versions.\n\ \n"); -PyDoc_STRVAR(doc_to_integral_exact,"\n\ -to_integral_exact(rounding=None, context=None) - Round to the nearest\n\ -integer, signaling Inexact or Rounded as appropriate if rounding occurs.\n\ -The rounding mode is determined by the rounding parameter if given, else\n\ -by the given context. If neither parameter is given, then the rounding mode\n\ -of the current default context is used.\n\ +PyDoc_STRVAR(doc_to_integral_exact, +"to_integral_exact($self, /, rounding=None, context=None)\n--\n\n\ +Round to the nearest integer, signaling Inexact or Rounded as appropriate if\n\ +rounding occurs. The rounding mode is determined by the rounding parameter\n\ +if given, else by the given context. If neither parameter is given, then the\n\ +rounding mode of the current default context is used.\n\ \n"); -PyDoc_STRVAR(doc_to_integral_value,"\n\ -to_integral_value(rounding=None, context=None) - Round to the nearest\n\ -integer without signaling Inexact or Rounded. The rounding mode is determined\n\ -by the rounding parameter if given, else by the given context. If neither\n\ -parameter is given, then the rounding mode of the current default context is\n\ -used.\n\ +PyDoc_STRVAR(doc_to_integral_value, +"to_integral_value($self, /, rounding=None, context=None)\n--\n\n\ +Round to the nearest integer without signaling Inexact or Rounded. The\n\ +rounding mode is determined by the rounding parameter if given, else by\n\ +the given context. If neither parameter is given, then the rounding mode\n\ +of the current default context is used.\n\ \n"); @@ -446,9 +485,10 @@ used.\n\ /* Context Object and Methods */ /******************************************************************************/ -PyDoc_STRVAR(doc_context,"\n\ +PyDoc_STRVAR(doc_context, +"Context(prec=None, rounding=None, Emin=None, Emax=None, capitals=None, clamp=None, flags=None, traps=None)\n--\n\n\ The context affects almost all operations and controls rounding,\n\ -Over/Underflow, raising of exceptions and much more. A new context\n\ +Over/Underflow, raising of exceptions and much more. A new context\n\ can be constructed as follows:\n\ \n\ >>> c = Context(prec=28, Emin=-425000000, Emax=425000000,\n\ @@ -460,308 +500,372 @@ can be constructed as follows:\n\ \n"); #ifdef EXTRA_FUNCTIONALITY -PyDoc_STRVAR(doc_ctx_apply,"\n\ -apply(x) - Apply self to Decimal x.\n\ +PyDoc_STRVAR(doc_ctx_apply, +"apply($self, x, /)\n--\n\n\ +Apply self to Decimal x.\n\ \n"); #endif -PyDoc_STRVAR(doc_ctx_clear_flags,"\n\ -clear_flags() - Reset all flags to False.\n\ +PyDoc_STRVAR(doc_ctx_clear_flags, +"clear_flags($self, /)\n--\n\n\ +Reset all flags to False.\n\ \n"); -PyDoc_STRVAR(doc_ctx_clear_traps,"\n\ -clear_traps() - Set all traps to False.\n\ +PyDoc_STRVAR(doc_ctx_clear_traps, +"clear_traps($self, /)\n--\n\n\ +Set all traps to False.\n\ \n"); -PyDoc_STRVAR(doc_ctx_copy,"\n\ -copy() - Return a duplicate of the context with all flags cleared.\n\ +PyDoc_STRVAR(doc_ctx_copy, +"copy($self, /)\n--\n\n\ +Return a duplicate of the context with all flags cleared.\n\ \n"); -PyDoc_STRVAR(doc_ctx_copy_decimal,"\n\ -copy_decimal(x) - Return a copy of Decimal x.\n\ +PyDoc_STRVAR(doc_ctx_copy_decimal, +"copy_decimal($self, x, /)\n--\n\n\ +Return a copy of Decimal x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_create_decimal,"\n\ -create_decimal(x) - Create a new Decimal instance from x, using self as the\n\ -context. Unlike the Decimal constructor, this function observes the context\n\ -limits.\n\ +PyDoc_STRVAR(doc_ctx_create_decimal, +"create_decimal($self, num=\"0\", /)\n--\n\n\ +Create a new Decimal instance from num, using self as the context. Unlike the\n\ +Decimal constructor, this function observes the context limits.\n\ \n"); -PyDoc_STRVAR(doc_ctx_create_decimal_from_float,"\n\ -create_decimal_from_float(f) - Create a new Decimal instance from float f.\n\ -Unlike the Decimal.from_float() class method, this function observes the\n\ -context limits.\n\ +PyDoc_STRVAR(doc_ctx_create_decimal_from_float, +"create_decimal_from_float($self, f, /)\n--\n\n\ +Create a new Decimal instance from float f. Unlike the Decimal.from_float()\n\ +class method, this function observes the context limits.\n\ \n"); -PyDoc_STRVAR(doc_ctx_Etiny,"\n\ -Etiny() - Return a value equal to Emin - prec + 1, which is the minimum\n\ -exponent value for subnormal results. When underflow occurs, the exponent\n\ -is set to Etiny.\n\ +PyDoc_STRVAR(doc_ctx_Etiny, +"Etiny($self, /)\n--\n\n\ +Return a value equal to Emin - prec + 1, which is the minimum exponent value\n\ +for subnormal results. When underflow occurs, the exponent is set to Etiny.\n\ \n"); -PyDoc_STRVAR(doc_ctx_Etop,"\n\ -Etop() - Return a value equal to Emax - prec + 1. This is the maximum exponent\n\ -if the _clamp field of the context is set to 1 (IEEE clamp mode). Etop() must\n\ -not be negative.\n\ +PyDoc_STRVAR(doc_ctx_Etop, +"Etop($self, /)\n--\n\n\ +Return a value equal to Emax - prec + 1. This is the maximum exponent\n\ +if the _clamp field of the context is set to 1 (IEEE clamp mode). Etop()\n\ +must not be negative.\n\ \n"); -PyDoc_STRVAR(doc_ctx_abs,"\n\ -abs(x) - Return the absolute value of x.\n\ +PyDoc_STRVAR(doc_ctx_abs, +"abs($self, x, /)\n--\n\n\ +Return the absolute value of x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_add,"\n\ -add(x, y) - Return the sum of x and y.\n\ +PyDoc_STRVAR(doc_ctx_add, +"add($self, x, y, /)\n--\n\n\ +Return the sum of x and y.\n\ \n"); -PyDoc_STRVAR(doc_ctx_canonical,"\n\ -canonical(x) - Return a new instance of x.\n\ +PyDoc_STRVAR(doc_ctx_canonical, +"canonical($self, x, /)\n--\n\n\ +Return a new instance of x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_compare,"\n\ -compare(x, y) - Compare x and y numerically.\n\ +PyDoc_STRVAR(doc_ctx_compare, +"compare($self, x, y, /)\n--\n\n\ +Compare x and y numerically.\n\ \n"); -PyDoc_STRVAR(doc_ctx_compare_signal,"\n\ -compare_signal(x, y) - Compare x and y numerically. All NaNs signal.\n\ +PyDoc_STRVAR(doc_ctx_compare_signal, +"compare_signal($self, x, y, /)\n--\n\n\ +Compare x and y numerically. All NaNs signal.\n\ \n"); -PyDoc_STRVAR(doc_ctx_compare_total,"\n\ -compare_total(x, y) - Compare x and y using their abstract representation.\n\ +PyDoc_STRVAR(doc_ctx_compare_total, +"compare_total($self, x, y, /)\n--\n\n\ +Compare x and y using their abstract representation.\n\ \n"); -PyDoc_STRVAR(doc_ctx_compare_total_mag,"\n\ -compare_total_mag(x, y) - Compare x and y using their abstract representation,\n\ -ignoring sign.\n\ +PyDoc_STRVAR(doc_ctx_compare_total_mag, +"compare_total_mag($self, x, y, /)\n--\n\n\ +Compare x and y using their abstract representation, ignoring sign.\n\ \n"); -PyDoc_STRVAR(doc_ctx_copy_abs,"\n\ -copy_abs(x) - Return a copy of x with the sign set to 0.\n\ +PyDoc_STRVAR(doc_ctx_copy_abs, +"copy_abs($self, x, /)\n--\n\n\ +Return a copy of x with the sign set to 0.\n\ \n"); -PyDoc_STRVAR(doc_ctx_copy_negate,"\n\ -copy_negate(x) - Return a copy of x with the sign inverted.\n\ +PyDoc_STRVAR(doc_ctx_copy_negate, +"copy_negate($self, x, /)\n--\n\n\ +Return a copy of x with the sign inverted.\n\ \n"); -PyDoc_STRVAR(doc_ctx_copy_sign,"\n\ -copy_sign(x, y) - Copy the sign from y to x.\n\ +PyDoc_STRVAR(doc_ctx_copy_sign, +"copy_sign($self, x, y, /)\n--\n\n\ +Copy the sign from y to x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_divide,"\n\ -divide(x, y) - Return x divided by y.\n\ +PyDoc_STRVAR(doc_ctx_divide, +"divide($self, x, y, /)\n--\n\n\ +Return x divided by y.\n\ \n"); -PyDoc_STRVAR(doc_ctx_divide_int,"\n\ -divide_int(x, y) - Return x divided by y, truncated to an integer.\n\ +PyDoc_STRVAR(doc_ctx_divide_int, +"divide_int($self, x, y, /)\n--\n\n\ +Return x divided by y, truncated to an integer.\n\ \n"); -PyDoc_STRVAR(doc_ctx_divmod,"\n\ -divmod(x, y) - Return quotient and remainder of the division x / y.\n\ +PyDoc_STRVAR(doc_ctx_divmod, +"divmod($self, x, y, /)\n--\n\n\ +Return quotient and remainder of the division x / y.\n\ \n"); -PyDoc_STRVAR(doc_ctx_exp,"\n\ -exp(x) - Return e ** x.\n\ +PyDoc_STRVAR(doc_ctx_exp, +"exp($self, x, /)\n--\n\n\ +Return e ** x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_fma,"\n\ -fma(x, y, z) - Return x multiplied by y, plus z.\n\ +PyDoc_STRVAR(doc_ctx_fma, +"fma($self, x, y, z, /)\n--\n\n\ +Return x multiplied by y, plus z.\n\ \n"); -PyDoc_STRVAR(doc_ctx_is_canonical,"\n\ -is_canonical(x) - Return True if x is canonical, False otherwise.\n\ +PyDoc_STRVAR(doc_ctx_is_canonical, +"is_canonical($self, x, /)\n--\n\n\ +Return True if x is canonical, False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ctx_is_finite,"\n\ -is_finite(x) - Return True if x is finite, False otherwise.\n\ +PyDoc_STRVAR(doc_ctx_is_finite, +"is_finite($self, x, /)\n--\n\n\ +Return True if x is finite, False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ctx_is_infinite,"\n\ -is_infinite(x) - Return True if x is infinite, False otherwise.\n\ +PyDoc_STRVAR(doc_ctx_is_infinite, +"is_infinite($self, x, /)\n--\n\n\ +Return True if x is infinite, False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ctx_is_nan,"\n\ -is_nan(x) - Return True if x is a qNaN or sNaN, False otherwise.\n\ +PyDoc_STRVAR(doc_ctx_is_nan, +"is_nan($self, x, /)\n--\n\n\ +Return True if x is a qNaN or sNaN, False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ctx_is_normal,"\n\ -is_normal(x) - Return True if x is a normal number, False otherwise.\n\ +PyDoc_STRVAR(doc_ctx_is_normal, +"is_normal($self, x, /)\n--\n\n\ +Return True if x is a normal number, False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ctx_is_qnan,"\n\ -is_qnan(x) - Return True if x is a quiet NaN, False otherwise.\n\ +PyDoc_STRVAR(doc_ctx_is_qnan, +"is_qnan($self, x, /)\n--\n\n\ +Return True if x is a quiet NaN, False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ctx_is_signed,"\n\ -is_signed(x) - Return True if x is negative, False otherwise.\n\ +PyDoc_STRVAR(doc_ctx_is_signed, +"is_signed($self, x, /)\n--\n\n\ +Return True if x is negative, False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ctx_is_snan,"\n\ -is_snan() - Return True if x is a signaling NaN, False otherwise.\n\ +PyDoc_STRVAR(doc_ctx_is_snan, +"is_snan($self, x, /)\n--\n\n\ +Return True if x is a signaling NaN, False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ctx_is_subnormal,"\n\ -is_subnormal(x) - Return True if x is subnormal, False otherwise.\n\ +PyDoc_STRVAR(doc_ctx_is_subnormal, +"is_subnormal($self, x, /)\n--\n\n\ +Return True if x is subnormal, False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ctx_is_zero,"\n\ -is_zero(x) - Return True if x is a zero, False otherwise.\n\ +PyDoc_STRVAR(doc_ctx_is_zero, +"is_zero($self, x, /)\n--\n\n\ +Return True if x is a zero, False otherwise.\n\ \n"); -PyDoc_STRVAR(doc_ctx_ln,"\n\ -ln(x) - Return the natural (base e) logarithm of x.\n\ +PyDoc_STRVAR(doc_ctx_ln, +"ln($self, x, /)\n--\n\n\ +Return the natural (base e) logarithm of x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_log10,"\n\ -log10(x) - Return the base 10 logarithm of x.\n\ +PyDoc_STRVAR(doc_ctx_log10, +"log10($self, x, /)\n--\n\n\ +Return the base 10 logarithm of x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_logb,"\n\ -logb(x) - Return the exponent of the magnitude of the operand's MSD.\n\ +PyDoc_STRVAR(doc_ctx_logb, +"logb($self, x, /)\n--\n\n\ +Return the exponent of the magnitude of the operand's MSD.\n\ \n"); -PyDoc_STRVAR(doc_ctx_logical_and,"\n\ -logical_and(x, y) - Digit-wise and of x and y.\n\ +PyDoc_STRVAR(doc_ctx_logical_and, +"logical_and($self, x, y, /)\n--\n\n\ +Digit-wise and of x and y.\n\ \n"); -PyDoc_STRVAR(doc_ctx_logical_invert,"\n\ -logical_invert(x) - Invert all digits of x.\n\ +PyDoc_STRVAR(doc_ctx_logical_invert, +"logical_invert($self, x, /)\n--\n\n\ +Invert all digits of x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_logical_or,"\n\ -logical_or(x, y) - Digit-wise or of x and y.\n\ +PyDoc_STRVAR(doc_ctx_logical_or, +"logical_or($self, x, y, /)\n--\n\n\ +Digit-wise or of x and y.\n\ \n"); -PyDoc_STRVAR(doc_ctx_logical_xor,"\n\ -logical_xor(x, y) - Digit-wise xor of x and y.\n\ +PyDoc_STRVAR(doc_ctx_logical_xor, +"logical_xor($self, x, y, /)\n--\n\n\ +Digit-wise xor of x and y.\n\ \n"); -PyDoc_STRVAR(doc_ctx_max,"\n\ -max(x, y) - Compare the values numerically and return the maximum.\n\ +PyDoc_STRVAR(doc_ctx_max, +"max($self, x, y, /)\n--\n\n\ +Compare the values numerically and return the maximum.\n\ \n"); -PyDoc_STRVAR(doc_ctx_max_mag,"\n\ -max_mag(x, y) - Compare the values numerically with their sign ignored.\n\ +PyDoc_STRVAR(doc_ctx_max_mag, +"max_mag($self, x, y, /)\n--\n\n\ +Compare the values numerically with their sign ignored.\n\ \n"); -PyDoc_STRVAR(doc_ctx_min,"\n\ -min(x, y) - Compare the values numerically and return the minimum.\n\ +PyDoc_STRVAR(doc_ctx_min, +"min($self, x, y, /)\n--\n\n\ +Compare the values numerically and return the minimum.\n\ \n"); -PyDoc_STRVAR(doc_ctx_min_mag,"\n\ -min_mag(x, y) - Compare the values numerically with their sign ignored.\n\ +PyDoc_STRVAR(doc_ctx_min_mag, +"min_mag($self, x, y, /)\n--\n\n\ +Compare the values numerically with their sign ignored.\n\ \n"); -PyDoc_STRVAR(doc_ctx_minus,"\n\ -minus(x) - Minus corresponds to the unary prefix minus operator in Python,\n\ -but applies the context to the result.\n\ +PyDoc_STRVAR(doc_ctx_minus, +"minus($self, x, /)\n--\n\n\ +Minus corresponds to the unary prefix minus operator in Python, but applies\n\ +the context to the result.\n\ \n"); -PyDoc_STRVAR(doc_ctx_multiply,"\n\ -multiply(x, y) - Return the product of x and y.\n\ +PyDoc_STRVAR(doc_ctx_multiply, +"multiply($self, x, y, /)\n--\n\n\ +Return the product of x and y.\n\ \n"); -PyDoc_STRVAR(doc_ctx_next_minus,"\n\ -next_minus(x) - Return the largest representable number smaller than x.\n\ +PyDoc_STRVAR(doc_ctx_next_minus, +"next_minus($self, x, /)\n--\n\n\ +Return the largest representable number smaller than x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_next_plus,"\n\ -next_plus(x) - Return the smallest representable number larger than x.\n\ +PyDoc_STRVAR(doc_ctx_next_plus, +"next_plus($self, x, /)\n--\n\n\ +Return the smallest representable number larger than x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_next_toward,"\n\ -next_toward(x) - Return the number closest to x, in the direction towards y.\n\ +PyDoc_STRVAR(doc_ctx_next_toward, +"next_toward($self, x, y, /)\n--\n\n\ +Return the number closest to x, in the direction towards y.\n\ \n"); -PyDoc_STRVAR(doc_ctx_normalize,"\n\ -normalize(x) - Reduce x to its simplest form. Alias for reduce(x).\n\ +PyDoc_STRVAR(doc_ctx_normalize, +"normalize($self, x, /)\n--\n\n\ +Reduce x to its simplest form. Alias for reduce(x).\n\ \n"); -PyDoc_STRVAR(doc_ctx_number_class,"\n\ -number_class(x) - Return an indication of the class of x.\n\ +PyDoc_STRVAR(doc_ctx_number_class, +"number_class($self, x, /)\n--\n\n\ +Return an indication of the class of x.\n\ \n"); -PyDoc_STRVAR(doc_ctx_plus,"\n\ -plus(x) - Plus corresponds to the unary prefix plus operator in Python,\n\ -but applies the context to the result.\n\ +PyDoc_STRVAR(doc_ctx_plus, +"plus($self, x, /)\n--\n\n\ +Plus corresponds to the unary prefix plus operator in Python, but applies\n\ +the context to the result.\n\ \n"); -PyDoc_STRVAR(doc_ctx_power,"\n\ -power(x, y) - Compute x**y. If x is negative, then y must be integral.\n\ -The result will be inexact unless y is integral and the result is finite\n\ -and can be expressed exactly in 'precision' digits. In the Python version\n\ -the result is always correctly rounded, in the C version the result is\n\ -almost always correctly rounded.\n\ +PyDoc_STRVAR(doc_ctx_power, +"power($self, /, a, b, modulo=None)\n--\n\n\ +Compute a**b. If 'a' is negative, then 'b' must be integral. The result\n\ +will be inexact unless 'a' is integral and the result is finite and can\n\ +be expressed exactly in 'precision' digits. In the Python version the\n\ +result is always correctly rounded, in the C version the result is almost\n\ +always correctly rounded.\n\ \n\ -power(x, y, m) - Compute (x**y) % m. The following restrictions hold:\n\ +If modulo is given, compute (a**b) % modulo. The following restrictions\n\ +hold:\n\ \n\ * all three arguments must be integral\n\ - * y must be nonnegative\n\ - * at least one of x or y must be nonzero\n\ - * m must be nonzero and less than 10**prec in absolute value\n\ + * 'b' must be nonnegative\n\ + * at least one of 'a' or 'b' must be nonzero\n\ + * modulo must be nonzero and less than 10**prec in absolute value\n\ \n\ \n"); -PyDoc_STRVAR(doc_ctx_quantize,"\n\ -quantize(x, y) - Return a value equal to x (rounded), having the exponent of y.\n\ +PyDoc_STRVAR(doc_ctx_quantize, +"quantize($self, x, y, /)\n--\n\n\ +Return a value equal to x (rounded), having the exponent of y.\n\ \n"); -PyDoc_STRVAR(doc_ctx_radix,"\n\ -radix() - Return 10.\n\ +PyDoc_STRVAR(doc_ctx_radix, +"radix($self, /)\n--\n\n\ +Return 10.\n\ \n"); -PyDoc_STRVAR(doc_ctx_remainder,"\n\ -remainder(x, y) - Return the remainder from integer division. The sign of\n\ -the result, if non-zero, is the same as that of the original dividend.\n\ +PyDoc_STRVAR(doc_ctx_remainder, +"remainder($self, x, y, /)\n--\n\n\ +Return the remainder from integer division. The sign of the result,\n\ +if non-zero, is the same as that of the original dividend.\n\ \n"); -PyDoc_STRVAR(doc_ctx_remainder_near,"\n\ -remainder_near(x, y) - Return x - y * n, where n is the integer nearest the\n\ -exact value of x / y (if the result is 0 then its sign will be the sign of x).\n\ +PyDoc_STRVAR(doc_ctx_remainder_near, +"remainder_near($self, x, y, /)\n--\n\n\ +Return x - y * n, where n is the integer nearest the exact value of x / y\n\ +(if the result is 0 then its sign will be the sign of x).\n\ \n"); -PyDoc_STRVAR(doc_ctx_rotate,"\n\ -rotate(x, y) - Return a copy of x, rotated by y places.\n\ +PyDoc_STRVAR(doc_ctx_rotate, +"rotate($self, x, y, /)\n--\n\n\ +Return a copy of x, rotated by y places.\n\ \n"); -PyDoc_STRVAR(doc_ctx_same_quantum,"\n\ -same_quantum(x, y) - Return True if the two operands have the same exponent.\n\ +PyDoc_STRVAR(doc_ctx_same_quantum, +"same_quantum($self, x, y, /)\n--\n\n\ +Return True if the two operands have the same exponent.\n\ \n"); -PyDoc_STRVAR(doc_ctx_scaleb,"\n\ -scaleb(x, y) - Return the first operand after adding the second value\n\ -to its exp.\n\ +PyDoc_STRVAR(doc_ctx_scaleb, +"scaleb($self, x, y, /)\n--\n\n\ +Return the first operand after adding the second value to its exp.\n\ \n"); -PyDoc_STRVAR(doc_ctx_shift,"\n\ -shift(x, y) - Return a copy of x, shifted by y places.\n\ +PyDoc_STRVAR(doc_ctx_shift, +"shift($self, x, y, /)\n--\n\n\ +Return a copy of x, shifted by y places.\n\ \n"); -PyDoc_STRVAR(doc_ctx_sqrt,"\n\ -sqrt(x) - Square root of a non-negative number to context precision.\n\ +PyDoc_STRVAR(doc_ctx_sqrt, +"sqrt($self, x, /)\n--\n\n\ +Square root of a non-negative number to context precision.\n\ \n"); -PyDoc_STRVAR(doc_ctx_subtract,"\n\ -subtract(x, y) - Return the difference between x and y.\n\ +PyDoc_STRVAR(doc_ctx_subtract, +"subtract($self, x, y, /)\n--\n\n\ +Return the difference between x and y.\n\ \n"); -PyDoc_STRVAR(doc_ctx_to_eng_string,"\n\ -to_eng_string(x) - Convert a number to a string, using engineering notation.\n\ +PyDoc_STRVAR(doc_ctx_to_eng_string, +"to_eng_string($self, x, /)\n--\n\n\ +Convert a number to a string, using engineering notation.\n\ \n"); -PyDoc_STRVAR(doc_ctx_to_integral,"\n\ -to_integral(x) - Identical to to_integral_value(x).\n\ +PyDoc_STRVAR(doc_ctx_to_integral, +"to_integral($self, x, /)\n--\n\n\ +Identical to to_integral_value(x).\n\ \n"); -PyDoc_STRVAR(doc_ctx_to_integral_exact,"\n\ -to_integral_exact(x) - Round to an integer. Signal if the result is\n\ -rounded or inexact.\n\ +PyDoc_STRVAR(doc_ctx_to_integral_exact, +"to_integral_exact($self, x, /)\n--\n\n\ +Round to an integer. Signal if the result is rounded or inexact.\n\ \n"); -PyDoc_STRVAR(doc_ctx_to_integral_value,"\n\ -to_integral_value(x) - Round to an integer.\n\ +PyDoc_STRVAR(doc_ctx_to_integral_value, +"to_integral_value($self, x, /)\n--\n\n\ +Round to an integer.\n\ \n"); -PyDoc_STRVAR(doc_ctx_to_sci_string,"\n\ -to_sci_string(x) - Convert a number to a string using scientific notation.\n\ +PyDoc_STRVAR(doc_ctx_to_sci_string, +"to_sci_string($self, x, /)\n--\n\n\ +Convert a number to a string using scientific notation.\n\ \n"); -- cgit v1.2.1 From 9d4d71210755e9f5672c1d8452623f1090c9a30a Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Fri, 2 May 2014 14:34:11 +0200 Subject: Use $type instead of $cls in the signature specification. --- Modules/_decimal/docstrings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_decimal/docstrings.h b/Modules/_decimal/docstrings.h index 035ca9c2d2..71029a994b 100644 --- a/Modules/_decimal/docstrings.h +++ b/Modules/_decimal/docstrings.h @@ -164,7 +164,7 @@ is correctly rounded.\n\ \n"); PyDoc_STRVAR(doc_from_float, -"from_float($cls, f, /)\n--\n\n\ +"from_float($type, f, /)\n--\n\n\ Class method that converts a float to a decimal number, exactly.\n\ Since 0.1 is not exactly representable in binary floating point,\n\ Decimal.from_float(0.1) is not the same as Decimal('0.1').\n\ -- cgit v1.2.1 From 595eab7fac1c64b8a25352d0dd40f1e7b62ee58a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 2 May 2014 22:31:14 +0200 Subject: Issue #21233: Add new C functions: PyMem_RawCalloc(), PyMem_Calloc(), PyObject_Calloc(), _PyObject_GC_Calloc(). bytes(int) and bytearray(int) are now using ``calloc()`` instead of ``malloc()`` for large objects which is faster and use less memory (until the bytearray buffer is filled with data). --- Modules/_testcapimodule.c | 73 +++++++++++++++++++++++++++++++++++++++++++---- Modules/_tracemalloc.c | 57 +++++++++++++++++++++++++++++------- Modules/gcmodule.c | 24 +++++++++++++--- 3 files changed, 135 insertions(+), 19 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 750e90fa4c..a75500426c 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2710,6 +2710,20 @@ test_pymem_alloc0(PyObject *self) { void *ptr; + ptr = PyMem_RawMalloc(0); + if (ptr == NULL) { + PyErr_SetString(PyExc_RuntimeError, "PyMem_RawMalloc(0) returns NULL"); + return NULL; + } + PyMem_RawFree(ptr); + + ptr = PyMem_RawCalloc(0, 0); + if (ptr == NULL) { + PyErr_SetString(PyExc_RuntimeError, "PyMem_RawCalloc(0, 0) returns NULL"); + return NULL; + } + PyMem_RawFree(ptr); + ptr = PyMem_Malloc(0); if (ptr == NULL) { PyErr_SetString(PyExc_RuntimeError, "PyMem_Malloc(0) returns NULL"); @@ -2717,6 +2731,13 @@ test_pymem_alloc0(PyObject *self) } PyMem_Free(ptr); + ptr = PyMem_Calloc(0, 0); + if (ptr == NULL) { + PyErr_SetString(PyExc_RuntimeError, "PyMem_Calloc(0, 0) returns NULL"); + return NULL; + } + PyMem_Free(ptr); + ptr = PyObject_Malloc(0); if (ptr == NULL) { PyErr_SetString(PyExc_RuntimeError, "PyObject_Malloc(0) returns NULL"); @@ -2724,6 +2745,13 @@ test_pymem_alloc0(PyObject *self) } PyObject_Free(ptr); + ptr = PyObject_Calloc(0, 0); + if (ptr == NULL) { + PyErr_SetString(PyExc_RuntimeError, "PyObject_Calloc(0, 0) returns NULL"); + return NULL; + } + PyObject_Free(ptr); + Py_RETURN_NONE; } @@ -2731,6 +2759,8 @@ typedef struct { PyMemAllocator alloc; size_t malloc_size; + size_t calloc_nelem; + size_t calloc_elsize; void *realloc_ptr; size_t realloc_new_size; void *free_ptr; @@ -2743,6 +2773,14 @@ static void* hook_malloc (void* ctx, size_t size) return hook->alloc.malloc(hook->alloc.ctx, size); } +static void* hook_calloc (void* ctx, size_t nelem, size_t elsize) +{ + alloc_hook_t *hook = (alloc_hook_t *)ctx; + hook->calloc_nelem = nelem; + hook->calloc_elsize = elsize; + return hook->alloc.calloc(hook->alloc.ctx, nelem, elsize); +} + static void* hook_realloc (void* ctx, void* ptr, size_t new_size) { alloc_hook_t *hook = (alloc_hook_t *)ctx; @@ -2765,16 +2803,14 @@ test_setallocators(PyMemAllocatorDomain domain) const char *error_msg; alloc_hook_t hook; PyMemAllocator alloc; - size_t size, size2; + size_t size, size2, nelem, elsize; void *ptr, *ptr2; - hook.malloc_size = 0; - hook.realloc_ptr = NULL; - hook.realloc_new_size = 0; - hook.free_ptr = NULL; + memset(&hook, 0, sizeof(hook)); alloc.ctx = &hook; alloc.malloc = &hook_malloc; + alloc.calloc = &hook_calloc; alloc.realloc = &hook_realloc; alloc.free = &hook_free; PyMem_GetAllocator(domain, &hook.alloc); @@ -2831,6 +2867,33 @@ test_setallocators(PyMemAllocatorDomain domain) goto fail; } + nelem = 2; + elsize = 5; + switch(domain) + { + case PYMEM_DOMAIN_RAW: ptr = PyMem_RawCalloc(nelem, elsize); break; + case PYMEM_DOMAIN_MEM: ptr = PyMem_Calloc(nelem, elsize); break; + case PYMEM_DOMAIN_OBJ: ptr = PyObject_Calloc(nelem, elsize); break; + default: ptr = NULL; break; + } + + if (ptr == NULL) { + error_msg = "calloc failed"; + goto fail; + } + + if (hook.calloc_nelem != nelem || hook.calloc_elsize != elsize) { + error_msg = "calloc invalid nelem or elsize"; + goto fail; + } + + switch(domain) + { + case PYMEM_DOMAIN_RAW: PyMem_RawFree(ptr); break; + case PYMEM_DOMAIN_MEM: PyMem_Free(ptr); break; + case PYMEM_DOMAIN_OBJ: PyObject_Free(ptr); break; + } + Py_INCREF(Py_None); res = Py_None; goto finally; diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 780e8eda82..e254a9029d 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -476,17 +476,22 @@ tracemalloc_remove_trace(void *ptr) } static void* -tracemalloc_malloc(void *ctx, size_t size) +tracemalloc_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) { PyMemAllocator *alloc = (PyMemAllocator *)ctx; void *ptr; - ptr = alloc->malloc(alloc->ctx, size); + assert(nelem <= PY_SIZE_MAX / elsize); + + if (use_calloc) + ptr = alloc->calloc(alloc->ctx, nelem, elsize); + else + ptr = alloc->malloc(alloc->ctx, nelem * elsize); if (ptr == NULL) return NULL; TABLES_LOCK(); - if (tracemalloc_add_trace(ptr, size) < 0) { + if (tracemalloc_add_trace(ptr, nelem * elsize) < 0) { /* Failed to allocate a trace for the new memory block */ TABLES_UNLOCK(); alloc->free(alloc->ctx, ptr); @@ -560,13 +565,16 @@ tracemalloc_free(void *ctx, void *ptr) } static void* -tracemalloc_malloc_gil(void *ctx, size_t size) +tracemalloc_alloc_gil(int use_calloc, void *ctx, size_t nelem, size_t elsize) { void *ptr; if (get_reentrant()) { PyMemAllocator *alloc = (PyMemAllocator *)ctx; - return alloc->malloc(alloc->ctx, size); + if (use_calloc) + return alloc->calloc(alloc->ctx, nelem, elsize); + else + return alloc->malloc(alloc->ctx, nelem * elsize); } /* Ignore reentrant call. PyObjet_Malloc() calls PyMem_Malloc() for @@ -574,12 +582,24 @@ tracemalloc_malloc_gil(void *ctx, size_t size) allocation twice. */ set_reentrant(1); - ptr = tracemalloc_malloc(ctx, size); + ptr = tracemalloc_alloc(use_calloc, ctx, nelem, elsize); set_reentrant(0); return ptr; } +static void* +tracemalloc_malloc_gil(void *ctx, size_t size) +{ + return tracemalloc_alloc_gil(0, ctx, 1, size); +} + +static void* +tracemalloc_calloc_gil(void *ctx, size_t nelem, size_t elsize) +{ + return tracemalloc_alloc_gil(1, ctx, nelem, elsize); +} + static void* tracemalloc_realloc_gil(void *ctx, void *ptr, size_t new_size) { @@ -614,7 +634,7 @@ tracemalloc_realloc_gil(void *ctx, void *ptr, size_t new_size) #ifdef TRACE_RAW_MALLOC static void* -tracemalloc_raw_malloc(void *ctx, size_t size) +tracemalloc_raw_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) { #ifdef WITH_THREAD PyGILState_STATE gil_state; @@ -623,7 +643,10 @@ tracemalloc_raw_malloc(void *ctx, size_t size) if (get_reentrant()) { PyMemAllocator *alloc = (PyMemAllocator *)ctx; - return alloc->malloc(alloc->ctx, size); + if (use_calloc) + return alloc->calloc(alloc->ctx, nelem, elsize); + else + return alloc->malloc(alloc->ctx, nelem * elsize); } /* Ignore reentrant call. PyGILState_Ensure() may call PyMem_RawMalloc() @@ -633,16 +656,28 @@ tracemalloc_raw_malloc(void *ctx, size_t size) #ifdef WITH_THREAD gil_state = PyGILState_Ensure(); - ptr = tracemalloc_malloc(ctx, size); + ptr = tracemalloc_alloc(use_calloc, ctx, nelem, elsize); PyGILState_Release(gil_state); #else - ptr = tracemalloc_malloc(ctx, size); + ptr = tracemalloc_alloc(use_calloc, ctx, nelem, elsize); #endif set_reentrant(0); return ptr; } +static void* +tracemalloc_raw_malloc(void *ctx, size_t size) +{ + return tracemalloc_raw_alloc(0, ctx, 1, size); +} + +static void* +tracemalloc_raw_calloc(void *ctx, size_t nelem, size_t elsize) +{ + return tracemalloc_raw_alloc(1, ctx, nelem, elsize); +} + static void* tracemalloc_raw_realloc(void *ctx, void *ptr, size_t new_size) { @@ -856,6 +891,7 @@ tracemalloc_start(int max_nframe) #ifdef TRACE_RAW_MALLOC alloc.malloc = tracemalloc_raw_malloc; + alloc.calloc = tracemalloc_raw_calloc; alloc.realloc = tracemalloc_raw_realloc; alloc.free = tracemalloc_free; @@ -865,6 +901,7 @@ tracemalloc_start(int max_nframe) #endif alloc.malloc = tracemalloc_malloc_gil; + alloc.calloc = tracemalloc_calloc_gil; alloc.realloc = tracemalloc_realloc_gil; alloc.free = tracemalloc_free; diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 6281a7c343..cff5d097af 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -1703,15 +1703,19 @@ PyObject_GC_UnTrack(void *op) _PyObject_GC_UNTRACK(op); } -PyObject * -_PyObject_GC_Malloc(size_t basicsize) +static PyObject * +_PyObject_GC_Alloc(int use_calloc, size_t basicsize) { PyObject *op; PyGC_Head *g; + size_t size; if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head)) return PyErr_NoMemory(); - g = (PyGC_Head *)PyObject_MALLOC( - sizeof(PyGC_Head) + basicsize); + size = sizeof(PyGC_Head) + basicsize; + if (use_calloc) + g = (PyGC_Head *)PyObject_Calloc(1, size); + else + g = (PyGC_Head *)PyObject_Malloc(size); if (g == NULL) return PyErr_NoMemory(); g->gc.gc_refs = 0; @@ -1730,6 +1734,18 @@ _PyObject_GC_Malloc(size_t basicsize) return op; } +PyObject * +_PyObject_GC_Malloc(size_t basicsize) +{ + return _PyObject_GC_Alloc(0, basicsize); +} + +PyObject * +_PyObject_GC_Calloc(size_t basicsize) +{ + return _PyObject_GC_Alloc(1, basicsize); +} + PyObject * _PyObject_GC_New(PyTypeObject *tp) { -- cgit v1.2.1 From c899dddc4036f54f79975ae7bf1a50ee6a4a864c Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 3 May 2014 16:41:19 -0700 Subject: Issue #21101: Eliminate double hashing in the C code for collections.Counter(). --- Modules/_collectionsmodule.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 0ab4156a24..c6c8666d81 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1831,18 +1831,29 @@ _count_elements(PyObject *self, PyObject *args) if (mapping_get != NULL && mapping_get == dict_get && mapping_setitem != NULL && mapping_setitem == dict_setitem) { while (1) { + Py_hash_t hash; + key = PyIter_Next(it); if (key == NULL) break; - oldval = PyDict_GetItem(mapping, key); + + if (!PyUnicode_CheckExact(key) || + (hash = ((PyASCIIObject *) key)->hash) == -1) + { + hash = PyObject_Hash(key); + if (hash == -1) + goto done; + } + + oldval = _PyDict_GetItem_KnownHash(mapping, key, hash); if (oldval == NULL) { - if (PyDict_SetItem(mapping, key, one) == -1) + if (_PyDict_SetItem_KnownHash(mapping, key, one, hash) == -1) break; } else { newval = PyNumber_Add(oldval, one); if (newval == NULL) break; - if (PyDict_SetItem(mapping, key, newval) == -1) + if (_PyDict_SetItem_KnownHash(mapping, key, newval, hash) == -1) break; Py_CLEAR(newval); } -- cgit v1.2.1 From 7117f4d7f6c206972e1a9ef2f993f4c1da4a80fd Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 3 May 2014 18:36:48 -0700 Subject: Simplify and speedup the internals of the heapq module. --- Modules/_heapqmodule.c | 107 +++++++++++++++++-------------------------------- 1 file changed, 36 insertions(+), 71 deletions(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index eee56a0027..7f3ce79163 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -11,7 +11,7 @@ annotated by François Pinard, and converted to C by Raymond Hettinger. static int _siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) { - PyObject *newitem, *parent, *olditem; + PyObject *newitem, *parent; int cmp; Py_ssize_t parentpos; Py_ssize_t size; @@ -23,39 +23,28 @@ _siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) return -1; } - newitem = PyList_GET_ITEM(heap, pos); - Py_INCREF(newitem); /* Follow the path to the root, moving parents down until finding a place newitem fits. */ + newitem = PyList_GET_ITEM(heap, pos); while (pos > startpos){ parentpos = (pos - 1) >> 1; parent = PyList_GET_ITEM(heap, parentpos); cmp = PyObject_RichCompareBool(newitem, parent, Py_LT); - if (cmp == -1) { - Py_DECREF(newitem); + if (cmp == -1) return -1; - } if (size != PyList_GET_SIZE(heap)) { - Py_DECREF(newitem); PyErr_SetString(PyExc_RuntimeError, "list changed size during iteration"); return -1; } if (cmp == 0) break; - Py_INCREF(parent); - olditem = PyList_GET_ITEM(heap, pos); + parent = PyList_GET_ITEM(heap, parentpos); + newitem = PyList_GET_ITEM(heap, pos); + PyList_SET_ITEM(heap, parentpos, newitem); PyList_SET_ITEM(heap, pos, parent); - Py_DECREF(olditem); pos = parentpos; - if (size != PyList_GET_SIZE(heap)) { - PyErr_SetString(PyExc_RuntimeError, - "list changed size during iteration"); - return -1; - } } - Py_DECREF(PyList_GET_ITEM(heap, pos)); - PyList_SET_ITEM(heap, pos, newitem); return 0; } @@ -63,20 +52,16 @@ static int _siftup(PyListObject *heap, Py_ssize_t pos) { Py_ssize_t startpos, endpos, childpos, rightpos, limit; + PyObject *tmp1, *tmp2; int cmp; - PyObject *newitem, *tmp, *olditem; - Py_ssize_t size; assert(PyList_Check(heap)); - size = PyList_GET_SIZE(heap); - endpos = size; + endpos = PyList_GET_SIZE(heap); startpos = pos; if (pos >= endpos) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } - newitem = PyList_GET_ITEM(heap, pos); - Py_INCREF(newitem); /* Bubble up the smaller child until hitting a leaf. */ limit = endpos / 2; /* smallest pos that has no child */ @@ -89,37 +74,24 @@ _siftup(PyListObject *heap, Py_ssize_t pos) PyList_GET_ITEM(heap, childpos), PyList_GET_ITEM(heap, rightpos), Py_LT); - if (cmp == -1) { - Py_DECREF(newitem); + if (cmp == -1) return -1; - } if (cmp == 0) childpos = rightpos; - } - if (size != PyList_GET_SIZE(heap)) { - Py_DECREF(newitem); - PyErr_SetString(PyExc_RuntimeError, - "list changed size during iteration"); - return -1; + if (endpos != PyList_GET_SIZE(heap)) { + PyErr_SetString(PyExc_RuntimeError, + "list changed size during iteration"); + return -1; + } } /* Move the smaller child up. */ - tmp = PyList_GET_ITEM(heap, childpos); - Py_INCREF(tmp); - olditem = PyList_GET_ITEM(heap, pos); - PyList_SET_ITEM(heap, pos, tmp); - Py_DECREF(olditem); + tmp1 = PyList_GET_ITEM(heap, childpos); + tmp2 = PyList_GET_ITEM(heap, pos); + PyList_SET_ITEM(heap, childpos, tmp2); + PyList_SET_ITEM(heap, pos, tmp1); pos = childpos; - if (size != PyList_GET_SIZE(heap)) { - PyErr_SetString(PyExc_RuntimeError, - "list changed size during iteration"); - return -1; - } } - - /* The leaf at pos is empty now. Put newitem there, and bubble - it up to its final resting place (by sifting its parents down). */ - Py_DECREF(PyList_GET_ITEM(heap, pos)); - PyList_SET_ITEM(heap, pos, newitem); + /* Bubble it up to its final resting place (by sifting its parents down). */ return _siftdown(heap, startpos, pos); } @@ -392,27 +364,23 @@ _siftdownmax(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) return -1; } - newitem = PyList_GET_ITEM(heap, pos); - Py_INCREF(newitem); /* Follow the path to the root, moving parents down until finding a place newitem fits. */ + newitem = PyList_GET_ITEM(heap, pos); while (pos > startpos){ parentpos = (pos - 1) >> 1; parent = PyList_GET_ITEM(heap, parentpos); cmp = PyObject_RichCompareBool(parent, newitem, Py_LT); - if (cmp == -1) { - Py_DECREF(newitem); + if (cmp == -1) return -1; - } if (cmp == 0) break; - Py_INCREF(parent); - Py_DECREF(PyList_GET_ITEM(heap, pos)); + parent = PyList_GET_ITEM(heap, parentpos); + newitem = PyList_GET_ITEM(heap, pos); + PyList_SET_ITEM(heap, parentpos, newitem); PyList_SET_ITEM(heap, pos, parent); pos = parentpos; } - Py_DECREF(PyList_GET_ITEM(heap, pos)); - PyList_SET_ITEM(heap, pos, newitem); return 0; } @@ -420,8 +388,8 @@ static int _siftupmax(PyListObject *heap, Py_ssize_t pos) { Py_ssize_t startpos, endpos, childpos, rightpos, limit; + PyObject *tmp1, *tmp2; int cmp; - PyObject *newitem, *tmp; assert(PyList_Check(heap)); endpos = PyList_GET_SIZE(heap); @@ -430,8 +398,6 @@ _siftupmax(PyListObject *heap, Py_ssize_t pos) PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } - newitem = PyList_GET_ITEM(heap, pos); - Py_INCREF(newitem); /* Bubble up the smaller child until hitting a leaf. */ limit = endpos / 2; /* smallest pos that has no child */ @@ -444,25 +410,24 @@ _siftupmax(PyListObject *heap, Py_ssize_t pos) PyList_GET_ITEM(heap, rightpos), PyList_GET_ITEM(heap, childpos), Py_LT); - if (cmp == -1) { - Py_DECREF(newitem); + if (cmp == -1) return -1; - } if (cmp == 0) childpos = rightpos; + if (endpos != PyList_GET_SIZE(heap)) { + PyErr_SetString(PyExc_RuntimeError, + "list changed size during iteration"); + return -1; + } } /* Move the smaller child up. */ - tmp = PyList_GET_ITEM(heap, childpos); - Py_INCREF(tmp); - Py_DECREF(PyList_GET_ITEM(heap, pos)); - PyList_SET_ITEM(heap, pos, tmp); + tmp1 = PyList_GET_ITEM(heap, childpos); + tmp2 = PyList_GET_ITEM(heap, pos); + PyList_SET_ITEM(heap, childpos, tmp2); + PyList_SET_ITEM(heap, pos, tmp1); pos = childpos; } - - /* The leaf at pos is empty now. Put newitem there, and bubble - it up to its final resting place (by sifting its parents down). */ - Py_DECREF(PyList_GET_ITEM(heap, pos)); - PyList_SET_ITEM(heap, pos, newitem); + /* Bubble it up to its final resting place (by sifting its parents down). */ return _siftdownmax(heap, startpos, pos); } -- cgit v1.2.1 From 9b4ca9d6ac0a423db72b065f13fd98c2292afb62 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 3 May 2014 18:45:54 -0700 Subject: Neaten-up a bit add add missing size change check. --- Modules/_heapqmodule.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 7f3ce79163..b3e4753f26 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -12,9 +12,8 @@ static int _siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) { PyObject *newitem, *parent; + Py_ssize_t parentpos, size; int cmp; - Py_ssize_t parentpos; - Py_ssize_t size; assert(PyList_Check(heap)); size = PyList_GET_SIZE(heap); @@ -26,7 +25,7 @@ _siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) /* Follow the path to the root, moving parents down until finding a place newitem fits. */ newitem = PyList_GET_ITEM(heap, pos); - while (pos > startpos){ + while (pos > startpos) { parentpos = (pos - 1) >> 1; parent = PyList_GET_ITEM(heap, parentpos); cmp = PyObject_RichCompareBool(newitem, parent, Py_LT); @@ -355,11 +354,12 @@ static int _siftdownmax(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) { PyObject *newitem, *parent; + Py_ssize_t parentpos, size; int cmp; - Py_ssize_t parentpos; assert(PyList_Check(heap)); - if (pos >= PyList_GET_SIZE(heap)) { + size = PyList_GET_SIZE(heap); + if (pos >= size) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } @@ -367,12 +367,17 @@ _siftdownmax(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) /* Follow the path to the root, moving parents down until finding a place newitem fits. */ newitem = PyList_GET_ITEM(heap, pos); - while (pos > startpos){ + while (pos > startpos) { parentpos = (pos - 1) >> 1; parent = PyList_GET_ITEM(heap, parentpos); cmp = PyObject_RichCompareBool(parent, newitem, Py_LT); if (cmp == -1) return -1; + if (size != PyList_GET_SIZE(heap)) { + PyErr_SetString(PyExc_RuntimeError, + "list changed size during iteration"); + return -1; + } if (cmp == 0) break; parent = PyList_GET_ITEM(heap, parentpos); -- cgit v1.2.1 From cc45cc84efd64ba56840459a59702f56bb9b469c Mon Sep 17 00:00:00 2001 From: Tim Golden Date: Mon, 5 May 2014 19:46:17 +0100 Subject: Issue18314 Allow unlink to remove junctions. Includes support for creating junctions. Patch by Kim Gr?sman --- Modules/_winapi.c | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++ Modules/posixmodule.c | 45 ++++------------- Modules/winreparse.h | 53 +++++++++++++++++++ 3 files changed, 199 insertions(+), 36 deletions(-) create mode 100644 Modules/winreparse.h (limited to 'Modules') diff --git a/Modules/_winapi.c b/Modules/_winapi.c index b755178427..f118436f91 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -40,6 +40,7 @@ #define WINDOWS_LEAN_AND_MEAN #include "windows.h" #include +#include "winreparse.h" #if defined(MS_WIN32) && !defined(MS_WIN64) #define HANDLE_TO_PYNUM(handle) \ @@ -400,6 +401,140 @@ winapi_CreateFile(PyObject *self, PyObject *args) return Py_BuildValue(F_HANDLE, handle); } +static PyObject * +winapi_CreateJunction(PyObject *self, PyObject *args) +{ + /* Input arguments */ + LPWSTR src_path = NULL; + LPWSTR dst_path = NULL; + + /* Privilege adjustment */ + HANDLE token = NULL; + TOKEN_PRIVILEGES tp; + + /* Reparse data buffer */ + const USHORT prefix_len = 4; + USHORT print_len = 0; + USHORT rdb_size = 0; + PREPARSE_DATA_BUFFER rdb = NULL; + + /* Junction point creation */ + HANDLE junction = NULL; + DWORD ret = 0; + + if (!PyArg_ParseTuple(args, "uu", &src_path, &dst_path)) + return NULL; + + if (src_path == NULL || dst_path == NULL) + return PyErr_SetFromWindowsErr(ERROR_INVALID_PARAMETER); + + if (wcsncmp(src_path, L"\\??\\", prefix_len) == 0) + return PyErr_SetFromWindowsErr(ERROR_INVALID_PARAMETER); + + /* Adjust privileges to allow rewriting directory entry as a + junction point. */ + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token)) + goto cleanup; + + if (!LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &tp.Privileges[0].Luid)) + goto cleanup; + + tp.PrivilegeCount = 1; + tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + if (!AdjustTokenPrivileges(token, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), + NULL, NULL)) + goto cleanup; + + if (GetFileAttributesW(src_path) == INVALID_FILE_ATTRIBUTES) + goto cleanup; + + /* Store the absolute link target path length in print_len. */ + print_len = (USHORT)GetFullPathNameW(src_path, 0, NULL, NULL); + if (print_len == 0) + goto cleanup; + + /* NUL terminator should not be part of print_len. */ + --print_len; + + /* REPARSE_DATA_BUFFER usage is heavily under-documented, especially for + junction points. Here's what I've learned along the way: + - A junction point has two components: a print name and a substitute + name. They both describe the link target, but the substitute name is + the physical target and the print name is shown in directory listings. + - The print name must be a native name, prefixed with "\??\". + - Both names are stored after each other in the same buffer (the + PathBuffer) and both must be NUL-terminated. + - There are four members defining their respective offset and length + inside PathBuffer: SubstituteNameOffset, SubstituteNameLength, + PrintNameOffset and PrintNameLength. + - The total size we need to allocate for the REPARSE_DATA_BUFFER, thus, + is the sum of: + - the fixed header size (REPARSE_DATA_BUFFER_HEADER_SIZE) + - the size of the MountPointReparseBuffer member without the PathBuffer + - the size of the prefix ("\??\") in bytes + - the size of the print name in bytes + - the size of the substitute name in bytes + - the size of two NUL terminators in bytes */ + rdb_size = REPARSE_DATA_BUFFER_HEADER_SIZE + + sizeof(rdb->MountPointReparseBuffer) - + sizeof(rdb->MountPointReparseBuffer.PathBuffer) + + /* Two +1's for NUL terminators. */ + (prefix_len + print_len + 1 + print_len + 1) * sizeof(WCHAR); + rdb = (PREPARSE_DATA_BUFFER)PyMem_RawMalloc(rdb_size); + if (rdb == NULL) + goto cleanup; + + memset(rdb, 0, rdb_size); + rdb->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT; + rdb->ReparseDataLength = rdb_size - REPARSE_DATA_BUFFER_HEADER_SIZE; + rdb->MountPointReparseBuffer.SubstituteNameOffset = 0; + rdb->MountPointReparseBuffer.SubstituteNameLength = + (prefix_len + print_len) * sizeof(WCHAR); + rdb->MountPointReparseBuffer.PrintNameOffset = + rdb->MountPointReparseBuffer.SubstituteNameLength + sizeof(WCHAR); + rdb->MountPointReparseBuffer.PrintNameLength = print_len * sizeof(WCHAR); + + /* Store the full native path of link target at the substitute name + offset (0). */ + wcscpy(rdb->MountPointReparseBuffer.PathBuffer, L"\\??\\"); + if (GetFullPathNameW(src_path, print_len + 1, + rdb->MountPointReparseBuffer.PathBuffer + prefix_len, + NULL) == 0) + goto cleanup; + + /* Copy everything but the native prefix to the print name offset. */ + wcscpy(rdb->MountPointReparseBuffer.PathBuffer + + prefix_len + print_len + 1, + rdb->MountPointReparseBuffer.PathBuffer + prefix_len); + + /* Create a directory for the junction point. */ + if (!CreateDirectoryW(dst_path, NULL)) + goto cleanup; + + junction = CreateFileW(dst_path, GENERIC_READ | GENERIC_WRITE, 0, NULL, + OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, NULL); + if (junction == INVALID_HANDLE_VALUE) + goto cleanup; + + /* Make the directory entry a junction point. */ + if (!DeviceIoControl(junction, FSCTL_SET_REPARSE_POINT, rdb, rdb_size, + NULL, 0, &ret, NULL)) + goto cleanup; + +cleanup: + ret = GetLastError(); + + CloseHandle(token); + CloseHandle(junction); + PyMem_RawFree(rdb); + + if (ret != 0) + return PyErr_SetFromWindowsErr(ret); + + Py_RETURN_NONE; +} + static PyObject * winapi_CreateNamedPipe(PyObject *self, PyObject *args) { @@ -1225,6 +1360,8 @@ static PyMethodDef winapi_functions[] = { METH_VARARGS | METH_KEYWORDS, ""}, {"CreateFile", winapi_CreateFile, METH_VARARGS, ""}, + {"CreateJunction", winapi_CreateJunction, METH_VARARGS, + ""}, {"CreateNamedPipe", winapi_CreateNamedPipe, METH_VARARGS, ""}, {"CreatePipe", winapi_CreatePipe, METH_VARARGS, diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 8cd5485ceb..916be81e43 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -27,6 +27,8 @@ #include "Python.h" #ifndef MS_WINDOWS #include "posixmodule.h" +#else +#include "winreparse.h" #endif #ifdef __cplusplus @@ -301,6 +303,9 @@ extern int lstat(const char *, struct stat *); #ifndef IO_REPARSE_TAG_SYMLINK #define IO_REPARSE_TAG_SYMLINK (0xA000000CL) #endif +#ifndef IO_REPARSE_TAG_MOUNT_POINT +#define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L) +#endif #include "osdefs.h" #include #include @@ -1109,41 +1114,6 @@ _PyVerify_fd_dup2(int fd1, int fd2) #endif #ifdef MS_WINDOWS -/* The following structure was copied from - http://msdn.microsoft.com/en-us/library/ms791514.aspx as the required - include doesn't seem to be present in the Windows SDK (at least as included - with Visual Studio Express). */ -typedef struct _REPARSE_DATA_BUFFER { - ULONG ReparseTag; - USHORT ReparseDataLength; - USHORT Reserved; - union { - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - ULONG Flags; - WCHAR PathBuffer[1]; - } SymbolicLinkReparseBuffer; - - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - WCHAR PathBuffer[1]; - } MountPointReparseBuffer; - - struct { - UCHAR DataBuffer[1]; - } GenericReparseBuffer; - }; -} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; - -#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER,\ - GenericReparseBuffer) -#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) static int win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag) @@ -4492,7 +4462,10 @@ BOOL WINAPI Py_DeleteFileW(LPCWSTR lpFileName) find_data_handle = FindFirstFileW(lpFileName, &find_data); if(find_data_handle != INVALID_HANDLE_VALUE) { - is_link = find_data.dwReserved0 == IO_REPARSE_TAG_SYMLINK; + /* IO_REPARSE_TAG_SYMLINK if it is a symlink and + IO_REPARSE_TAG_MOUNT_POINT if it is a junction point. */ + is_link = find_data.dwReserved0 == IO_REPARSE_TAG_SYMLINK || + find_data.dwReserved0 == IO_REPARSE_TAG_MOUNT_POINT; FindClose(find_data_handle); } } diff --git a/Modules/winreparse.h b/Modules/winreparse.h new file mode 100644 index 0000000000..66f7775dd2 --- /dev/null +++ b/Modules/winreparse.h @@ -0,0 +1,53 @@ +#ifndef Py_WINREPARSE_H +#define Py_WINREPARSE_H + +#ifdef MS_WINDOWS +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The following structure was copied from + http://msdn.microsoft.com/en-us/library/ff552012.aspx as the required + include doesn't seem to be present in the Windows SDK (at least as included + with Visual Studio Express). */ +typedef struct _REPARSE_DATA_BUFFER { + ULONG ReparseTag; + USHORT ReparseDataLength; + USHORT Reserved; + union { + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + ULONG Flags; + WCHAR PathBuffer[1]; + } SymbolicLinkReparseBuffer; + + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + WCHAR PathBuffer[1]; + } MountPointReparseBuffer; + + struct { + UCHAR DataBuffer[1]; + } GenericReparseBuffer; + }; +} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; + +#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER,\ + GenericReparseBuffer) +#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) + +#ifdef __cplusplus +} +#endif + +#endif /* MS_WINDOWS */ + +#endif /* !Py_WINREPARSE_H */ -- cgit v1.2.1 From 57b5f165b71ad407ef15d8747b64ae6e7ca05414 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 11 May 2014 01:55:46 -0700 Subject: Issue #21424: Optimize heaqp.nlargest() to make fewer tuple comparisons. Consolidates the logic for nlargest() into a single function so that decoration tuples (elem,order) or (key, order, elem) only need to be formed when a new element is added to the heap. Formerly, a tuple was created for every element regardless of whether it was added to the heap. The change reduces the number of tuples created, the number of ordering integers created, and total number of tuple comparisons. --- Modules/_heapqmodule.c | 85 -------------------------------------------------- 1 file changed, 85 deletions(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index b3e4753f26..964f511646 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -267,89 +267,6 @@ heapify(PyObject *self, PyObject *heap) PyDoc_STRVAR(heapify_doc, "Transform list into a heap, in-place, in O(len(heap)) time."); -static PyObject * -nlargest(PyObject *self, PyObject *args) -{ - PyObject *heap=NULL, *elem, *iterable, *sol, *it, *oldelem; - Py_ssize_t i, n; - int cmp; - - if (!PyArg_ParseTuple(args, "nO:nlargest", &n, &iterable)) - return NULL; - - it = PyObject_GetIter(iterable); - if (it == NULL) - return NULL; - - heap = PyList_New(0); - if (heap == NULL) - goto fail; - - for (i=0 ; i=0 ; i--) - if(_siftup((PyListObject *)heap, i) == -1) - goto fail; - - sol = PyList_GET_ITEM(heap, 0); - while (1) { - elem = PyIter_Next(it); - if (elem == NULL) { - if (PyErr_Occurred()) - goto fail; - else - goto sortit; - } - cmp = PyObject_RichCompareBool(sol, elem, Py_LT); - if (cmp == -1) { - Py_DECREF(elem); - goto fail; - } - if (cmp == 0) { - Py_DECREF(elem); - continue; - } - oldelem = PyList_GET_ITEM(heap, 0); - PyList_SET_ITEM(heap, 0, elem); - Py_DECREF(oldelem); - if (_siftup((PyListObject *)heap, 0) == -1) - goto fail; - sol = PyList_GET_ITEM(heap, 0); - } -sortit: - if (PyList_Sort(heap) == -1) - goto fail; - if (PyList_Reverse(heap) == -1) - goto fail; - Py_DECREF(it); - return heap; - -fail: - Py_DECREF(it); - Py_XDECREF(heap); - return NULL; -} - -PyDoc_STRVAR(nlargest_doc, -"Find the n largest elements in a dataset.\n\ -\n\ -Equivalent to: sorted(iterable, reverse=True)[:n]\n"); - static int _siftdownmax(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) { @@ -531,8 +448,6 @@ static PyMethodDef heapq_methods[] = { METH_VARARGS, heapreplace_doc}, {"heapify", (PyCFunction)heapify, METH_O, heapify_doc}, - {"nlargest", (PyCFunction)nlargest, - METH_VARARGS, nlargest_doc}, {"nsmallest", (PyCFunction)nsmallest, METH_VARARGS, nsmallest_doc}, {NULL, NULL} /* sentinel */ -- cgit v1.2.1 From b0b34f0523b28fbe2d91061dd1b948a96f718592 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 11 May 2014 14:21:23 -0700 Subject: Issue 21424: Apply the nlargest() optimizations to nsmallest() as well. --- Modules/_heapqmodule.c | 92 +++++++++++--------------------------------------- 1 file changed, 19 insertions(+), 73 deletions(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 964f511646..ad190dfc03 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -354,88 +354,34 @@ _siftupmax(PyListObject *heap, Py_ssize_t pos) } static PyObject * -nsmallest(PyObject *self, PyObject *args) +_heapreplace_max(PyObject *self, PyObject *args) { - PyObject *heap=NULL, *elem, *iterable, *los, *it, *oldelem; - Py_ssize_t i, n; - int cmp; + PyObject *heap, *item, *returnitem; - if (!PyArg_ParseTuple(args, "nO:nsmallest", &n, &iterable)) + if (!PyArg_UnpackTuple(args, "_heapreplace_max", 2, 2, &heap, &item)) return NULL; - it = PyObject_GetIter(iterable); - if (it == NULL) + if (!PyList_Check(heap)) { + PyErr_SetString(PyExc_TypeError, "heap argument must be a list"); return NULL; - - heap = PyList_New(0); - if (heap == NULL) - goto fail; - - for (i=0 ; i=0 ; i--) - if(_siftupmax((PyListObject *)heap, i) == -1) - goto fail; - - los = PyList_GET_ITEM(heap, 0); - while (1) { - elem = PyIter_Next(it); - if (elem == NULL) { - if (PyErr_Occurred()) - goto fail; - else - goto sortit; - } - cmp = PyObject_RichCompareBool(elem, los, Py_LT); - if (cmp == -1) { - Py_DECREF(elem); - goto fail; - } - if (cmp == 0) { - Py_DECREF(elem); - continue; - } - oldelem = PyList_GET_ITEM(heap, 0); - PyList_SET_ITEM(heap, 0, elem); - Py_DECREF(oldelem); - if (_siftupmax((PyListObject *)heap, 0) == -1) - goto fail; - los = PyList_GET_ITEM(heap, 0); + if (PyList_GET_SIZE(heap) < 1) { + PyErr_SetString(PyExc_IndexError, "index out of range"); + return NULL; } -sortit: - if (PyList_Sort(heap) == -1) - goto fail; - Py_DECREF(it); - return heap; - -fail: - Py_DECREF(it); - Py_XDECREF(heap); - return NULL; + returnitem = PyList_GET_ITEM(heap, 0); + Py_INCREF(item); + PyList_SET_ITEM(heap, 0, item); + if (_siftupmax((PyListObject *)heap, 0) == -1) { + Py_DECREF(returnitem); + return NULL; + } + return returnitem; } -PyDoc_STRVAR(nsmallest_doc, -"Find the n smallest elements in a dataset.\n\ -\n\ -Equivalent to: sorted(iterable)[:n]\n"); +PyDoc_STRVAR(heapreplace_max_doc, "Maxheap variant of heapreplace"); static PyMethodDef heapq_methods[] = { {"heappush", (PyCFunction)heappush, @@ -448,8 +394,8 @@ static PyMethodDef heapq_methods[] = { METH_VARARGS, heapreplace_doc}, {"heapify", (PyCFunction)heapify, METH_O, heapify_doc}, - {"nsmallest", (PyCFunction)nsmallest, - METH_VARARGS, nsmallest_doc}, + {"_heapreplace_max",(PyCFunction)_heapreplace_max, + METH_VARARGS, heapreplace_max_doc}, {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From bfa0854fdb5785d4143dcb58774fd74a34a3e124 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 14 May 2014 17:13:14 +0200 Subject: Issue #21488: Add support of keyword arguments for codecs.encode and codecs.decode --- Modules/_codecsmodule.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index 0b093ab19f..1b21300c8d 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -89,13 +89,15 @@ a ValueError. Other possible values are 'ignore', 'replace' and\n\ codecs.register_error that can handle ValueErrors."); static PyObject * -codec_encode(PyObject *self, PyObject *args) +codec_encode(PyObject *self, PyObject *args, PyObject *kwargs) { + static char *kwlist[] = {"obj", "encoding", "errors", NULL}; const char *encoding = NULL; const char *errors = NULL; PyObject *v; - if (!PyArg_ParseTuple(args, "O|ss:encode", &v, &encoding, &errors)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:encode", kwlist, + &v, &encoding, &errors)) return NULL; if (encoding == NULL) @@ -116,13 +118,15 @@ as well as any other name registered with codecs.register_error that is\n\ able to handle ValueErrors."); static PyObject * -codec_decode(PyObject *self, PyObject *args) +codec_decode(PyObject *self, PyObject *args, PyObject *kwargs) { + static char *kwlist[] = {"obj", "encoding", "errors", NULL}; const char *encoding = NULL; const char *errors = NULL; PyObject *v; - if (!PyArg_ParseTuple(args, "O|ss:decode", &v, &encoding, &errors)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:decode", kwlist, + &v, &encoding, &errors)) return NULL; if (encoding == NULL) @@ -1120,9 +1124,9 @@ static PyMethodDef _codecs_functions[] = { register__doc__}, {"lookup", codec_lookup, METH_VARARGS, lookup__doc__}, - {"encode", codec_encode, METH_VARARGS, + {"encode", (PyCFunction)codec_encode, METH_VARARGS|METH_KEYWORDS, encode__doc__}, - {"decode", codec_decode, METH_VARARGS, + {"decode", (PyCFunction)codec_decode, METH_VARARGS|METH_KEYWORDS, decode__doc__}, {"escape_encode", escape_encode, METH_VARARGS}, {"escape_decode", escape_decode, METH_VARARGS}, -- cgit v1.2.1 From e409cb0905a799d6de9b91b82b0bb5648b12aaec Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 14 May 2014 17:24:35 +0200 Subject: Issue #21490: Add new C macros: Py_ABS() and Py_STRINGIFY() Keep _Py_STRINGIZE() in PC/pyconfig.h to not introduce a dependency between pyconfig.h and pymacros.h. --- Modules/_ssl.c | 4 +--- Modules/_struct.c | 9 ++++----- Modules/_tracemalloc.c | 3 --- 3 files changed, 5 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 503147698d..3b7226d15f 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -249,10 +249,8 @@ typedef enum { } timeout_state; /* Wrap error strings with filename and line # */ -#define STRINGIFY1(x) #x -#define STRINGIFY2(x) STRINGIFY1(x) #define ERRSTR1(x,y,z) (x ":" y ": " z) -#define ERRSTR(x) ERRSTR1("_ssl.c", STRINGIFY2(__LINE__), x) +#define ERRSTR(x) ERRSTR1("_ssl.c", Py_STRINGIFY(__LINE__), x) /* diff --git a/Modules/_struct.c b/Modules/_struct.c index 1de94e406e..4941fc8c82 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -85,8 +85,6 @@ typedef struct { char c; _Bool x; } s_bool; #define BOOL_ALIGN 0 #endif -#define STRINGIFY(x) #x - #ifdef __powerc #pragma options align=reset #endif @@ -546,8 +544,8 @@ np_short(char *p, PyObject *v, const formatdef *f) return -1; if (x < SHRT_MIN || x > SHRT_MAX){ PyErr_SetString(StructError, - "short format requires " STRINGIFY(SHRT_MIN) - " <= number <= " STRINGIFY(SHRT_MAX)); + "short format requires " Py_STRINGIFY(SHRT_MIN) + " <= number <= " Py_STRINGIFY(SHRT_MAX)); return -1; } y = (short)x; @@ -564,7 +562,8 @@ np_ushort(char *p, PyObject *v, const formatdef *f) return -1; if (x < 0 || x > USHRT_MAX){ PyErr_SetString(StructError, - "ushort format requires 0 <= number <= " STRINGIFY(USHRT_MAX)); + "ushort format requires 0 <= number <= " + Py_STRINGIFY(USHRT_MAX)); return -1; } y = (unsigned short)x; diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index e254a9029d..429b209c02 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -16,9 +16,6 @@ static void raw_free(void *ptr); # define TRACE_DEBUG #endif -#define _STR(VAL) #VAL -#define STR(VAL) _STR(VAL) - /* Protected by the GIL */ static struct { PyMemAllocator mem; -- cgit v1.2.1 From 576d77f10758144db0fff75bcccf7153ce017f8a Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 18 May 2014 21:32:40 +0100 Subject: Add comment and make minor code clean-up to improve clarity. --- Modules/_collectionsmodule.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index c6c8666d81..b2783d2739 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1831,6 +1831,16 @@ _count_elements(PyObject *self, PyObject *args) if (mapping_get != NULL && mapping_get == dict_get && mapping_setitem != NULL && mapping_setitem == dict_setitem) { while (1) { + /* Fast path advantages: + 1. Eliminate double hashing + (by re-using the same hash for both the get and set) + 2. Avoid argument overhead of PyObject_CallFunctionObjArgs + (argument tuple creation and parsing) + 3. Avoid indirection through a bound method object + (creates another argument tuple) + 4. Avoid initial increment from zero + (reuse an existing one-object instead) + */ Py_hash_t hash; key = PyIter_Next(it); @@ -1848,13 +1858,13 @@ _count_elements(PyObject *self, PyObject *args) oldval = _PyDict_GetItem_KnownHash(mapping, key, hash); if (oldval == NULL) { if (_PyDict_SetItem_KnownHash(mapping, key, one, hash) == -1) - break; + goto done; } else { newval = PyNumber_Add(oldval, one); if (newval == NULL) - break; + goto done; if (_PyDict_SetItem_KnownHash(mapping, key, newval, hash) == -1) - break; + goto done; Py_CLEAR(newval); } Py_DECREF(key); -- cgit v1.2.1 From 6c809c2057f1ecb17e127b2ccb0f4a1d191d913e Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 21 May 2014 17:12:21 +0300 Subject: Issue #21525: Most Tkinter methods which accepted tuples now accept lists too. --- Modules/_tkinter.c | 73 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 33 deletions(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index af430fba98..e47e8f3d14 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -457,6 +457,26 @@ SplitObj(PyObject *arg) return result; /* Fall through, returning arg. */ } + else if (PyList_Check(arg)) { + int i, size; + PyObject *elem, *newelem, *result; + + size = PyList_GET_SIZE(arg); + result = PyTuple_New(size); + if (!result) + return NULL; + /* Recursively invoke SplitObj for all list items. */ + for(i = 0; i < size; i++) { + elem = PyList_GET_ITEM(arg, i); + newelem = SplitObj(elem); + if (!newelem) { + Py_XDECREF(result); + return NULL; + } + PyTuple_SetItem(result, i, newelem); + } + return result; + } else if (PyUnicode_Check(arg)) { int argc; char **argv; @@ -882,21 +902,23 @@ AsObj(PyObject *value) } else if (PyFloat_Check(value)) return Tcl_NewDoubleObj(PyFloat_AS_DOUBLE(value)); - else if (PyTuple_Check(value)) { + else if (PyTuple_Check(value) || PyList_Check(value)) { Tcl_Obj **argv; Py_ssize_t size, i; - size = PyTuple_Size(value); + size = PySequence_Fast_GET_SIZE(value); if (!CHECK_SIZE(size, sizeof(Tcl_Obj *))) { - PyErr_SetString(PyExc_OverflowError, "tuple is too long"); + PyErr_SetString(PyExc_OverflowError, + PyTuple_Check(value) ? "tuple is too long" : + "list is too long"); return NULL; } argv = (Tcl_Obj **) ckalloc(((size_t)size) * sizeof(Tcl_Obj *)); if(!argv) return 0; for (i = 0; i < size; i++) - argv[i] = AsObj(PyTuple_GetItem(value,i)); - result = Tcl_NewListObj(PyTuple_Size(value), argv); + argv[i] = AsObj(PySequence_Fast_GET_ITEM(value,i)); + result = Tcl_NewListObj(size, argv); ckfree(FREECAST argv); return result; } @@ -1071,7 +1093,7 @@ Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) if (args == NULL) /* do nothing */; - else if (!PyTuple_Check(args)) { + else if (!(PyTuple_Check(args) || PyList_Check(args))) { objv[0] = AsObj(args); if (objv[0] == 0) goto finally; @@ -1079,11 +1101,13 @@ Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) Tcl_IncrRefCount(objv[0]); } else { - objc = PyTuple_Size(args); + objc = PySequence_Fast_GET_SIZE(args); if (objc > ARGSZ) { if (!CHECK_SIZE(objc, sizeof(Tcl_Obj *))) { - PyErr_SetString(PyExc_OverflowError, "tuple is too long"); + PyErr_SetString(PyExc_OverflowError, + PyTuple_Check(args) ? "tuple is too long" : + "list is too long"); return NULL; } objv = (Tcl_Obj **)ckalloc(((size_t)objc) * sizeof(Tcl_Obj *)); @@ -1095,7 +1119,7 @@ Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) } for (i = 0; i < objc; i++) { - PyObject *v = PyTuple_GetItem(args, i); + PyObject *v = PySequence_Fast_GET_ITEM(args, i); if (v == Py_None) { objc = i; break; @@ -1834,6 +1858,9 @@ Tkapp_SplitList(PyObject *self, PyObject *args) Py_INCREF(arg); return arg; } + if (PyList_Check(arg)) { + return PySequence_Tuple(arg); + } if (!PyArg_ParseTuple(args, "et:splitlist", "utf-8", &list)) return NULL; @@ -1894,7 +1921,7 @@ Tkapp_Split(PyObject *self, PyObject *args) } return v; } - if (PyTuple_Check(arg)) + if (PyTuple_Check(arg) || PyList_Check(arg)) return SplitObj(arg); if (!PyArg_ParseTuple(args, "et:split", "utf-8", &list)) @@ -2684,35 +2711,15 @@ _flatten1(FlattenContext* context, PyObject* item, int depth) PyErr_SetString(PyExc_ValueError, "nesting too deep in _flatten"); return 0; - } else if (PyList_Check(item)) { - size = PyList_GET_SIZE(item); + } else if (PyTuple_Check(item) || PyList_Check(item)) { + size = PySequence_Fast_GET_SIZE(item); /* preallocate (assume no nesting) */ if (context->size + size > context->maxsize && !_bump(context, size)) return 0; /* copy items to output tuple */ for (i = 0; i < size; i++) { - PyObject *o = PyList_GET_ITEM(item, i); - if (PyList_Check(o) || PyTuple_Check(o)) { - if (!_flatten1(context, o, depth + 1)) - return 0; - } else if (o != Py_None) { - if (context->size + 1 > context->maxsize && - !_bump(context, 1)) - return 0; - Py_INCREF(o); - PyTuple_SET_ITEM(context->tuple, - context->size++, o); - } - } - } else if (PyTuple_Check(item)) { - /* same, for tuples */ - size = PyTuple_GET_SIZE(item); - if (context->size + size > context->maxsize && - !_bump(context, size)) - return 0; - for (i = 0; i < size; i++) { - PyObject *o = PyTuple_GET_ITEM(item, i); + PyObject *o = PySequence_Fast_GET_ITEM(item, i); if (PyList_Check(o) || PyTuple_Check(o)) { if (!_flatten1(context, o, depth + 1)) return 0; -- cgit v1.2.1 From 6248652cd68fb12e060c9ec640e74c15be10af8f Mon Sep 17 00:00:00 2001 From: Charles-Fran?ois Natali Date: Thu, 22 May 2014 19:45:39 +0100 Subject: Issue #21455: Add a default backlog to socket.listen(). --- Modules/socketmodule.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index d0149dda1c..5a2893ce4d 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -121,7 +121,7 @@ getpeername() -- return remote address [*]\n\ getsockname() -- return local address\n\ getsockopt(level, optname[, buflen]) -- get socket options\n\ gettimeout() -- return timeout or None\n\ -listen(n) -- start listening for incoming connections\n\ +listen([n]) -- start listening for incoming connections\n\ recv(buflen[, flags]) -- receive data\n\ recv_into(buffer[, nbytes[, flags]]) -- receive data (into a buffer)\n\ recvfrom(buflen[, flags]) -- receive data and sender\'s address\n\ @@ -2534,14 +2534,16 @@ info is a pair (hostaddr, port)."); /* s.listen(n) method */ static PyObject * -sock_listen(PySocketSockObject *s, PyObject *arg) +sock_listen(PySocketSockObject *s, PyObject *args) { - int backlog; + /* We try to choose a default backlog high enough to avoid connection drops + * for common workloads, yet not too high to limit resource usage. */ + int backlog = Py_MIN(SOMAXCONN, 128); int res; - backlog = _PyLong_AsInt(arg); - if (backlog == -1 && PyErr_Occurred()) + if (!PyArg_ParseTuple(args, "|i:listen", &backlog)) return NULL; + Py_BEGIN_ALLOW_THREADS /* To avoid problems on systems that don't allow a negative backlog * (which doesn't make sense anyway) we force a minimum value of 0. */ @@ -2556,12 +2558,12 @@ sock_listen(PySocketSockObject *s, PyObject *arg) } PyDoc_STRVAR(listen_doc, -"listen(backlog)\n\ +"listen([backlog])\n\ \n\ -Enable a server to accept connections. The backlog argument must be at\n\ -least 0 (if it is lower, it is set to 0); it specifies the number of\n\ +Enable a server to accept connections. If backlog is specified, it must be\n\ +at least 0 (if it is lower, it is set to 0); it specifies the number of\n\ unaccepted connections that the system will allow before refusing new\n\ -connections."); +connections. If not specified, a default reasonable value is chosen."); /* @@ -3795,7 +3797,7 @@ static PyMethodDef sock_methods[] = { {"share", (PyCFunction)sock_share, METH_VARARGS, sock_share_doc}, #endif - {"listen", (PyCFunction)sock_listen, METH_O, + {"listen", (PyCFunction)sock_listen, METH_VARARGS, listen_doc}, {"recv", (PyCFunction)sock_recv, METH_VARARGS, recv_doc}, -- cgit v1.2.1 From 15370b8b3c42f1e19da83f3eba199e1f5a2bcc28 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 24 May 2014 19:21:53 +0200 Subject: Issue #21555: simplify code in gcmodule.c by using the pytime.h functions instead of trying to call time.time() via the C API. Patch by Geoffrey Spear. --- Modules/gcmodule.c | 50 +++++++++----------------------------------------- 1 file changed, 9 insertions(+), 41 deletions(-) (limited to 'Modules') diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index e1b693f9dc..57a9b19a4e 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -25,6 +25,7 @@ #include "Python.h" #include "frameobject.h" /* for PyFrame_ClearFreeList */ +#include "pytime.h" /* for _PyTime_gettimeofday, _PyTime_INTERVAL */ /* Get an object's GC head */ #define AS_GC(o) ((PyGC_Head *)(o)-1) @@ -166,7 +167,6 @@ static Py_ssize_t long_lived_pending = 0; DEBUG_UNCOLLECTABLE | \ DEBUG_SAVEALL static int debug; -static PyObject *tmod = NULL; /* Running stats per generation */ struct gc_generation_stats { @@ -894,26 +894,6 @@ clear_freelists(void) (void)PySet_ClearFreeList(); } -static double -get_time(void) -{ - double result = 0; - if (tmod != NULL) { - _Py_IDENTIFIER(time); - - PyObject *f = _PyObject_CallMethodId(tmod, &PyId_time, NULL); - if (f == NULL) { - PyErr_Clear(); - } - else { - if (PyFloat_Check(f)) - result = PyFloat_AsDouble(f); - Py_DECREF(f); - } - } - return result; -} - /* This is the main function. Read this to understand how the * collection process works. */ static Py_ssize_t @@ -928,7 +908,8 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, PyGC_Head unreachable; /* non-problematic unreachable trash */ PyGC_Head finalizers; /* objects with, & reachable from, __del__ */ PyGC_Head *gc; - double t1 = 0.0; + _PyTime_timeval t1; + struct gc_generation_stats *stats = &generation_stats[generation]; if (debug & DEBUG_STATS) { @@ -938,7 +919,8 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, for (i = 0; i < NUM_GENERATIONS; i++) PySys_WriteStderr(" %" PY_FORMAT_SIZE_T "d", gc_list_size(GEN_HEAD(i))); - t1 = get_time(); + _PyTime_gettimeofday(&t1); + PySys_WriteStderr("\n"); } @@ -1042,7 +1024,9 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, debug_cycle("uncollectable", FROM_GC(gc)); } if (debug & DEBUG_STATS) { - double t2 = get_time(); + _PyTime_timeval t2; + _PyTime_gettimeofday(&t2); + if (m == 0 && n == 0) PySys_WriteStderr("gc: done"); else @@ -1051,10 +1035,7 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, "%" PY_FORMAT_SIZE_T "d unreachable, " "%" PY_FORMAT_SIZE_T "d uncollectable", n+m, n); - if (t1 && t2) { - PySys_WriteStderr(", %.4fs elapsed", t2-t1); - } - PySys_WriteStderr(".\n"); + PySys_WriteStderr(", %.4fs elapsed\n", _PyTime_INTERVAL(t1, t2)); } /* Append instances in the uncollectable set to a Python @@ -1581,18 +1562,6 @@ PyInit_gc(void) if (PyModule_AddObject(m, "callbacks", callbacks) < 0) return NULL; - /* Importing can't be done in collect() because collect() - * can be called via PyGC_Collect() in Py_Finalize(). - * This wouldn't be a problem, except that is - * reset to 0 before calling collect which trips up - * the import and triggers an assertion. - */ - if (tmod == NULL) { - tmod = PyImport_ImportModuleNoBlock("time"); - if (tmod == NULL) - PyErr_Clear(); - } - #define ADD_INT(NAME) if (PyModule_AddIntConstant(m, #NAME, NAME) < 0) return NULL ADD_INT(DEBUG_STATS); ADD_INT(DEBUG_COLLECTABLE); @@ -1681,7 +1650,6 @@ void _PyGC_Fini(void) { Py_CLEAR(callbacks); - Py_CLEAR(tmod); } /* for debugging */ -- cgit v1.2.1 From a154828389e0fd87406eff28f7351c26982195c5 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 24 May 2014 19:24:40 +0200 Subject: Cleanup other stats formatting code in gcmodule.c --- Modules/gcmodule.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 57a9b19a4e..5e8e17b0a5 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -917,7 +917,7 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, generation); PySys_WriteStderr("gc: objects in each generation:"); for (i = 0; i < NUM_GENERATIONS; i++) - PySys_WriteStderr(" %" PY_FORMAT_SIZE_T "d", + PySys_FormatStderr(" %zd", gc_list_size(GEN_HEAD(i))); _PyTime_gettimeofday(&t1); @@ -1030,10 +1030,8 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, if (m == 0 && n == 0) PySys_WriteStderr("gc: done"); else - PySys_WriteStderr( - "gc: done, " - "%" PY_FORMAT_SIZE_T "d unreachable, " - "%" PY_FORMAT_SIZE_T "d uncollectable", + PySys_FormatStderr( + "gc: done, %zd unreachable, %zd uncollectable", n+m, n); PySys_WriteStderr(", %.4fs elapsed\n", _PyTime_INTERVAL(t1, t2)); } -- cgit v1.2.1 From fe0c3ab1d309a195619902c095de2038312a6da6 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 25 May 2014 18:22:35 -0700 Subject: Issue 21137: Better repr for threading.Lock() --- Modules/_threadmodule.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 9925b0e7ec..b68c177f03 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -192,6 +192,13 @@ PyDoc_STRVAR(locked_doc, \n\ Return whether the lock is in the locked state."); +static PyObject * +lock_repr(lockobject *self) +{ + return PyUnicode_FromFormat("<%s %s object at %p>", + self->locked ? "locked" : "unlocked", Py_TYPE(self)->tp_name, self); +} + static PyMethodDef lock_methods[] = { {"acquire_lock", (PyCFunction)lock_PyThread_acquire_lock, METH_VARARGS | METH_KEYWORDS, acquire_doc}, @@ -223,7 +230,7 @@ static PyTypeObject Locktype = { 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_reserved*/ - 0, /*tp_repr*/ + (reprfunc)lock_repr, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ @@ -475,8 +482,10 @@ rlock_new(PyTypeObject *type, PyObject *args, PyObject *kwds) static PyObject * rlock_repr(rlockobject *self) { - return PyUnicode_FromFormat("<%s owner=%ld count=%lu>", - Py_TYPE(self)->tp_name, self->rlock_owner, self->rlock_count); + return PyUnicode_FromFormat("<%s %s object owner=%ld count=%lu at %p>", + self->rlock_count ? "locked" : "unlocked", + Py_TYPE(self)->tp_name, self->rlock_owner, + self->rlock_count, self); } -- cgit v1.2.1 From 49ff56876cc4538bd5f122bd01b90bc16cca8f11 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 28 May 2014 16:57:55 +0300 Subject: Issue #3015: _tkinter.create() now creates tkapp object with wantobject=1 by default. --- Modules/_tkinter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index e47e8f3d14..0b8e555693 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -2777,7 +2777,7 @@ Tkinter_Create(PyObject *self, PyObject *args) try getting rid of it. */ char *className = NULL; int interactive = 0; - int wantobjects = 0; + int wantobjects = 1; int wantTk = 1; /* If false, then Tk_Init() doesn't get called */ int sync = 0; /* pass -sync to wish */ char *use = NULL; /* pass -use to wish */ -- cgit v1.2.1 From 1be655495f46dd956c0df2bb04f237e1d127e762 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 2 Jun 2014 21:57:10 +0200 Subject: Issue #21233: Rename the C structure "PyMemAllocator" to "PyMemAllocatorEx" to make sure that the code using it will be adapted for the new "calloc" field (instead of crashing). --- Modules/_testcapimodule.c | 4 ++-- Modules/_tracemalloc.c | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index c83a4c8ce5..05a27d61f6 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2756,7 +2756,7 @@ test_pymem_alloc0(PyObject *self) } typedef struct { - PyMemAllocator alloc; + PyMemAllocatorEx alloc; size_t malloc_size; size_t calloc_nelem; @@ -2802,7 +2802,7 @@ test_setallocators(PyMemAllocatorDomain domain) PyObject *res = NULL; const char *error_msg; alloc_hook_t hook; - PyMemAllocator alloc; + PyMemAllocatorEx alloc; size_t size, size2, nelem, elsize; void *ptr, *ptr2; diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 1e454144de..257ae1b57a 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -18,9 +18,9 @@ static void raw_free(void *ptr); /* Protected by the GIL */ static struct { - PyMemAllocator mem; - PyMemAllocator raw; - PyMemAllocator obj; + PyMemAllocatorEx mem; + PyMemAllocatorEx raw; + PyMemAllocatorEx obj; } allocators; static struct { @@ -475,7 +475,7 @@ tracemalloc_remove_trace(void *ptr) static void* tracemalloc_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) { - PyMemAllocator *alloc = (PyMemAllocator *)ctx; + PyMemAllocatorEx *alloc = (PyMemAllocatorEx *)ctx; void *ptr; assert(elsize == 0 || nelem <= PY_SIZE_MAX / elsize); @@ -501,7 +501,7 @@ tracemalloc_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) static void* tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) { - PyMemAllocator *alloc = (PyMemAllocator *)ctx; + PyMemAllocatorEx *alloc = (PyMemAllocatorEx *)ctx; void *ptr2; ptr2 = alloc->realloc(alloc->ctx, ptr, new_size); @@ -546,7 +546,7 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) static void tracemalloc_free(void *ctx, void *ptr) { - PyMemAllocator *alloc = (PyMemAllocator *)ctx; + PyMemAllocatorEx *alloc = (PyMemAllocatorEx *)ctx; if (ptr == NULL) return; @@ -567,7 +567,7 @@ tracemalloc_alloc_gil(int use_calloc, void *ctx, size_t nelem, size_t elsize) void *ptr; if (get_reentrant()) { - PyMemAllocator *alloc = (PyMemAllocator *)ctx; + PyMemAllocatorEx *alloc = (PyMemAllocatorEx *)ctx; if (use_calloc) return alloc->calloc(alloc->ctx, nelem, elsize); else @@ -607,7 +607,7 @@ tracemalloc_realloc_gil(void *ctx, void *ptr, size_t new_size) Example: PyMem_RawRealloc() is called internally by pymalloc (_PyObject_Malloc() and _PyObject_Realloc()) to allocate a new arena (new_arena()). */ - PyMemAllocator *alloc = (PyMemAllocator *)ctx; + PyMemAllocatorEx *alloc = (PyMemAllocatorEx *)ctx; ptr2 = alloc->realloc(alloc->ctx, ptr, new_size); if (ptr2 != NULL && ptr != NULL) { @@ -639,7 +639,7 @@ tracemalloc_raw_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) void *ptr; if (get_reentrant()) { - PyMemAllocator *alloc = (PyMemAllocator *)ctx; + PyMemAllocatorEx *alloc = (PyMemAllocatorEx *)ctx; if (use_calloc) return alloc->calloc(alloc->ctx, nelem, elsize); else @@ -685,7 +685,7 @@ tracemalloc_raw_realloc(void *ctx, void *ptr, size_t new_size) if (get_reentrant()) { /* Reentrant call to PyMem_RawRealloc(). */ - PyMemAllocator *alloc = (PyMemAllocator *)ctx; + PyMemAllocatorEx *alloc = (PyMemAllocatorEx *)ctx; ptr2 = alloc->realloc(alloc->ctx, ptr, new_size); @@ -863,7 +863,7 @@ tracemalloc_deinit(void) static int tracemalloc_start(int max_nframe) { - PyMemAllocator alloc; + PyMemAllocatorEx alloc; size_t size; if (tracemalloc_init() < 0) -- cgit v1.2.1 From 9891ea69889dec10ed4d1664fde8348eaeef441f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 3 Jun 2014 18:45:05 +0200 Subject: All modern compilers provide a offsetof() function offsetof() is used directly in many other .c files without any issue. --- Modules/socketmodule.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 5a2893ce4d..1facc49cb0 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -288,10 +288,6 @@ if_indextoname(index) -- return the corresponding interface name\n\ #include -#ifndef offsetof -# define offsetof(type, member) ((size_t)(&((type *)0)->member)) -#endif - #ifndef O_NONBLOCK # define O_NONBLOCK O_NDELAY #endif -- cgit v1.2.1 From f24d9a71e13ee7c4c45002096bb04840e4bb901f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 14 Jun 2014 16:43:35 -0700 Subject: Factor common code into internal functions. Clean-up names of static functions. Use Py_RETURN_NONE macro. Expose private functions needed to support merge(). Move C imports to the bottom of the Python file. --- Modules/_heapqmodule.c | 96 +++++++++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 41 deletions(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index ad190dfc03..4372ad497d 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -9,7 +9,7 @@ annotated by François Pinard, and converted to C by Raymond Hettinger. #include "Python.h" static int -_siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) +siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) { PyObject *newitem, *parent; Py_ssize_t parentpos, size; @@ -48,7 +48,7 @@ _siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) } static int -_siftup(PyListObject *heap, Py_ssize_t pos) +siftup(PyListObject *heap, Py_ssize_t pos) { Py_ssize_t startpos, endpos, childpos, rightpos, limit; PyObject *tmp1, *tmp2; @@ -91,7 +91,7 @@ _siftup(PyListObject *heap, Py_ssize_t pos) pos = childpos; } /* Bubble it up to its final resting place (by sifting its parents down). */ - return _siftdown(heap, startpos, pos); + return siftdown(heap, startpos, pos); } static PyObject * @@ -110,17 +110,16 @@ heappush(PyObject *self, PyObject *args) if (PyList_Append(heap, item) == -1) return NULL; - if (_siftdown((PyListObject *)heap, 0, PyList_GET_SIZE(heap)-1) == -1) + if (siftdown((PyListObject *)heap, 0, PyList_GET_SIZE(heap)-1) == -1) return NULL; - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } PyDoc_STRVAR(heappush_doc, "heappush(heap, item) -> None. Push item onto heap, maintaining the heap invariant."); static PyObject * -heappop(PyObject *self, PyObject *heap) +heappop_internal(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) { PyObject *lastelt, *returnitem; Py_ssize_t n; @@ -130,7 +129,7 @@ heappop(PyObject *self, PyObject *heap) return NULL; } - /* # raises appropriate IndexError if heap is empty */ + /* raises IndexError if the heap is empty */ n = PyList_GET_SIZE(heap); if (n == 0) { PyErr_SetString(PyExc_IndexError, "index out of range"); @@ -149,18 +148,24 @@ heappop(PyObject *self, PyObject *heap) return lastelt; returnitem = PyList_GET_ITEM(heap, 0); PyList_SET_ITEM(heap, 0, lastelt); - if (_siftup((PyListObject *)heap, 0) == -1) { + if (siftup_func((PyListObject *)heap, 0) == -1) { Py_DECREF(returnitem); return NULL; } return returnitem; } +static PyObject * +heappop(PyObject *self, PyObject *heap) +{ + return heappop_internal(heap, siftup); +} + PyDoc_STRVAR(heappop_doc, "Pop the smallest item off the heap, maintaining the heap invariant."); static PyObject * -heapreplace(PyObject *self, PyObject *args) +heapreplace_internal(PyObject *args, int siftup_func(PyListObject *, Py_ssize_t)) { PyObject *heap, *item, *returnitem; @@ -180,13 +185,19 @@ heapreplace(PyObject *self, PyObject *args) returnitem = PyList_GET_ITEM(heap, 0); Py_INCREF(item); PyList_SET_ITEM(heap, 0, item); - if (_siftup((PyListObject *)heap, 0) == -1) { + if (siftup_func((PyListObject *)heap, 0) == -1) { Py_DECREF(returnitem); return NULL; } return returnitem; } +static PyObject * +heapreplace(PyObject *self, PyObject *args) +{ + return heapreplace_internal(args, siftup); +} + PyDoc_STRVAR(heapreplace_doc, "heapreplace(heap, item) -> value. Pop and return the current smallest value, and add the new item.\n\ \n\ @@ -227,7 +238,7 @@ heappushpop(PyObject *self, PyObject *args) returnitem = PyList_GET_ITEM(heap, 0); Py_INCREF(item); PyList_SET_ITEM(heap, 0, item); - if (_siftup((PyListObject *)heap, 0) == -1) { + if (siftup((PyListObject *)heap, 0) == -1) { Py_DECREF(returnitem); return NULL; } @@ -240,7 +251,7 @@ from the heap. The combined action runs more efficiently than\n\ heappush() followed by a separate call to heappop()."); static PyObject * -heapify(PyObject *self, PyObject *heap) +heapify_internal(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) { Py_ssize_t i, n; @@ -258,17 +269,22 @@ heapify(PyObject *self, PyObject *heap) and that's again n//2-1. */ for (i=n/2-1 ; i>=0 ; i--) - if(_siftup((PyListObject *)heap, i) == -1) + if(siftup_func((PyListObject *)heap, i) == -1) return NULL; - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; +} + +static PyObject * +heapify(PyObject *self, PyObject *heap) +{ + return heapify_internal(heap, siftup); } PyDoc_STRVAR(heapify_doc, "Transform list into a heap, in-place, in O(len(heap)) time."); static int -_siftdownmax(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) +siftdown_max(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) { PyObject *newitem, *parent; Py_ssize_t parentpos, size; @@ -307,7 +323,7 @@ _siftdownmax(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) } static int -_siftupmax(PyListObject *heap, Py_ssize_t pos) +siftup_max(PyListObject *heap, Py_ssize_t pos) { Py_ssize_t startpos, endpos, childpos, rightpos, limit; PyObject *tmp1, *tmp2; @@ -350,38 +366,32 @@ _siftupmax(PyListObject *heap, Py_ssize_t pos) pos = childpos; } /* Bubble it up to its final resting place (by sifting its parents down). */ - return _siftdownmax(heap, startpos, pos); + return siftdown_max(heap, startpos, pos); } static PyObject * -_heapreplace_max(PyObject *self, PyObject *args) +heappop_max(PyObject *self, PyObject *heap) { - PyObject *heap, *item, *returnitem; + return heappop_internal(heap, siftup_max); +} - if (!PyArg_UnpackTuple(args, "_heapreplace_max", 2, 2, &heap, &item)) - return NULL; +PyDoc_STRVAR(heappop_max_doc, "Maxheap variant of heappop."); - if (!PyList_Check(heap)) { - PyErr_SetString(PyExc_TypeError, "heap argument must be a list"); - return NULL; - } +static PyObject * +heapreplace_max(PyObject *self, PyObject *args) +{ + return heapreplace_internal(args, siftup_max); +} - if (PyList_GET_SIZE(heap) < 1) { - PyErr_SetString(PyExc_IndexError, "index out of range"); - return NULL; - } +PyDoc_STRVAR(heapreplace_max_doc, "Maxheap variant of heapreplace"); - returnitem = PyList_GET_ITEM(heap, 0); - Py_INCREF(item); - PyList_SET_ITEM(heap, 0, item); - if (_siftupmax((PyListObject *)heap, 0) == -1) { - Py_DECREF(returnitem); - return NULL; - } - return returnitem; +static PyObject * +heapify_max(PyObject *self, PyObject *heap) +{ + return heapify_internal(heap, siftup_max); } -PyDoc_STRVAR(heapreplace_max_doc, "Maxheap variant of heapreplace"); +PyDoc_STRVAR(heapify_max_doc, "Maxheap variant of heapify."); static PyMethodDef heapq_methods[] = { {"heappush", (PyCFunction)heappush, @@ -394,8 +404,12 @@ static PyMethodDef heapq_methods[] = { METH_VARARGS, heapreplace_doc}, {"heapify", (PyCFunction)heapify, METH_O, heapify_doc}, - {"_heapreplace_max",(PyCFunction)_heapreplace_max, + {"_heappop_max", (PyCFunction)heappop_max, + METH_O, heappop_max_doc}, + {"_heapreplace_max",(PyCFunction)heapreplace_max, METH_VARARGS, heapreplace_max_doc}, + {"_heapify_max", (PyCFunction)heapify_max, + METH_O, heapify_max_doc}, {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From 531431bce7b7b8484e092eaa4b0790552b4b48d3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 17 Jun 2014 23:31:25 +0200 Subject: Issue #10310: Use "unsigned int field:1" instead of "signed int field:1" in a private structure of the _io module to fix a compiler warning (overflow when assigning the value 1). Fix also a cast in incrementalnewlinedecoder_setstate(). Patch written by Hallvard B Furuseth. --- Modules/_io/textio.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 140688fe22..aed5b2d606 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -224,8 +224,8 @@ typedef struct { PyObject_HEAD PyObject *decoder; PyObject *errors; - signed int pendingcr: 1; - signed int translate: 1; + unsigned int pendingcr: 1; + unsigned int translate: 1; unsigned int seennl: 3; } nldecoder_object; @@ -546,7 +546,7 @@ incrementalnewlinedecoder_setstate(nldecoder_object *self, PyObject *state) if (!PyArg_Parse(state, "(OK)", &buffer, &flag)) return NULL; - self->pendingcr = (int) flag & 1; + self->pendingcr = (int) (flag & 1); flag >>= 1; if (self->decoder != Py_None) -- cgit v1.2.1 From 64655f353c612df060788dbf626554251c82539d Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Thu, 19 Jun 2014 09:46:37 -0500 Subject: Issue #21741: Add st_file_attributes to os.stat_result on Windows. Patch by Ben Hoyt. --- Modules/_stat.c | 36 ++++++++++++++++++++++++++++++++++++ Modules/posixmodule.c | 16 ++++++++++++++++ 2 files changed, 52 insertions(+) (limited to 'Modules') diff --git a/Modules/_stat.c b/Modules/_stat.c index a301fa8840..f6cb303500 100644 --- a/Modules/_stat.c +++ b/Modules/_stat.c @@ -27,9 +27,21 @@ extern "C" { #endif /* HAVE_SYS_STAT_H */ #ifdef MS_WINDOWS +#include typedef unsigned short mode_t; + +/* FILE_ATTRIBUTE_INTEGRITY_STREAM and FILE_ATTRIBUTE_NO_SCRUB_DATA + are not present in VC2010, so define them manually */ +#ifndef FILE_ATTRIBUTE_INTEGRITY_STREAM +# define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x8000 +#endif + +#ifndef FILE_ATTRIBUTE_NO_SCRUB_DATA +# define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x20000 #endif +#endif /* MS_WINDOWS */ + /* From Python's stat.py */ #ifndef S_IMODE # define S_IMODE 07777 @@ -473,6 +485,10 @@ ST_SIZE\n\ ST_ATIME\n\ ST_MTIME\n\ ST_CTIME\n\ +\n" + +"FILE_ATTRIBUTE_*: Windows file attribute constants\n\ + (only present on Windows)\n\ "); @@ -555,6 +571,26 @@ PyInit__stat(void) if (PyModule_AddIntConstant(m, "ST_MTIME", 8)) return NULL; if (PyModule_AddIntConstant(m, "ST_CTIME", 9)) return NULL; +#ifdef MS_WINDOWS + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_ARCHIVE)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_COMPRESSED)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_DEVICE)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_DIRECTORY)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_ENCRYPTED)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_HIDDEN)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_INTEGRITY_STREAM)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_NORMAL)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_NO_SCRUB_DATA)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_OFFLINE)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_READONLY)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_REPARSE_POINT)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_SPARSE_FILE)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_SYSTEM)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_TEMPORARY)) return NULL; + if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_VIRTUAL)) return NULL; +#endif + return m; } diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 916be81e43..899618f266 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1417,6 +1417,7 @@ win32_wchdir(LPCWSTR path) Therefore, we implement our own stat, based on the Win32 API directly. */ #define HAVE_STAT_NSEC 1 +#define HAVE_STRUCT_STAT_ST_FILE_ATTRIBUTES 1 struct win32_stat{ unsigned long st_dev; @@ -1433,6 +1434,7 @@ struct win32_stat{ int st_mtime_nsec; time_t st_ctime; int st_ctime_nsec; + unsigned long st_file_attributes; }; static __int64 secs_between_epochs = 11644473600; /* Seconds between 1.1.1601 and 1.1.1970 */ @@ -1497,6 +1499,7 @@ attribute_data_to_stat(BY_HANDLE_FILE_INFORMATION *info, ULONG reparse_tag, stru /* now set the bits that make this a symlink */ result->st_mode |= S_IFLNK; } + result->st_file_attributes = info->dwFileAttributes; return 0; } @@ -1960,6 +1963,9 @@ static PyStructSequence_Field stat_result_fields[] = { #endif #ifdef HAVE_STRUCT_STAT_ST_BIRTHTIME {"st_birthtime", "time of creation"}, +#endif +#ifdef HAVE_STRUCT_STAT_ST_FILE_ATTRIBUTES + {"st_file_attributes", "Windows file attribute bits"}, #endif {0} }; @@ -2000,6 +2006,12 @@ static PyStructSequence_Field stat_result_fields[] = { #define ST_BIRTHTIME_IDX ST_GEN_IDX #endif +#ifdef HAVE_STRUCT_STAT_ST_FILE_ATTRIBUTES +#define ST_FILE_ATTRIBUTES_IDX (ST_BIRTHTIME_IDX+1) +#else +#define ST_FILE_ATTRIBUTES_IDX ST_BIRTHTIME_IDX +#endif + static PyStructSequence_Desc stat_result_desc = { "stat_result", /* name */ stat_result__doc__, /* doc */ @@ -2267,6 +2279,10 @@ _pystat_fromstructstat(STRUCT_STAT *st) PyStructSequence_SET_ITEM(v, ST_FLAGS_IDX, PyLong_FromLong((long)st->st_flags)); #endif +#ifdef HAVE_STRUCT_STAT_ST_FILE_ATTRIBUTES + PyStructSequence_SET_ITEM(v, ST_FILE_ATTRIBUTES_IDX, + PyLong_FromUnsignedLong(st->st_file_attributes)); +#endif if (PyErr_Occurred()) { Py_DECREF(v); -- cgit v1.2.1 From f89b06cb9e9169495342e996c37134783c54a4ba Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 22 Jun 2014 14:17:44 -0700 Subject: add BufferedIOBase.readinto1 (closes #20578) Patch by Nikolaus Rath. --- Modules/_io/bufferedio.c | 66 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 4c0262e25a..2feda5a350 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -24,6 +24,7 @@ _Py_IDENTIFIER(read); _Py_IDENTIFIER(read1); _Py_IDENTIFIER(readable); _Py_IDENTIFIER(readinto); +_Py_IDENTIFIER(readinto1); _Py_IDENTIFIER(writable); _Py_IDENTIFIER(write); @@ -47,17 +48,21 @@ PyDoc_STRVAR(bufferediobase_doc, ); static PyObject * -bufferediobase_readinto(PyObject *self, PyObject *args) +_bufferediobase_readinto_generic(PyObject *self, PyObject *args, char readinto1) { Py_buffer buf; Py_ssize_t len; PyObject *data; - if (!PyArg_ParseTuple(args, "w*:readinto", &buf)) { + if (!PyArg_ParseTuple(args, + readinto1 ? "w*:readinto1" : "w*:readinto", + &buf)) { return NULL; } - data = _PyObject_CallMethodId(self, &PyId_read, "n", buf.len); + data = _PyObject_CallMethodId(self, + readinto1 ? &PyId_read1 : &PyId_read, + "n", buf.len); if (data == NULL) goto error; @@ -88,6 +93,18 @@ bufferediobase_readinto(PyObject *self, PyObject *args) return NULL; } +static PyObject * +bufferediobase_readinto(PyObject *self, PyObject *args) +{ + return _bufferediobase_readinto_generic(self, args, 0); +} + +static PyObject * +bufferediobase_readinto1(PyObject *self, PyObject *args) +{ + return _bufferediobase_readinto_generic(self, args, 1); +} + static PyObject * bufferediobase_unsupported(const char *message) { @@ -167,6 +184,7 @@ static PyMethodDef bufferediobase_methods[] = { {"read", bufferediobase_read, METH_VARARGS, bufferediobase_read_doc}, {"read1", bufferediobase_read1, METH_VARARGS, bufferediobase_read1_doc}, {"readinto", bufferediobase_readinto, METH_VARARGS, NULL}, + {"readinto1", bufferediobase_readinto1, METH_VARARGS, NULL}, {"write", bufferediobase_write, METH_VARARGS, bufferediobase_write_doc}, {NULL, NULL} }; @@ -989,7 +1007,7 @@ buffered_read1(buffered *self, PyObject *args) } static PyObject * -buffered_readinto(buffered *self, PyObject *args) +_buffered_readinto_generic(buffered *self, PyObject *args, char readinto1) { Py_buffer buf; Py_ssize_t n, written = 0, remaining; @@ -997,7 +1015,9 @@ buffered_readinto(buffered *self, PyObject *args) CHECK_INITIALIZED(self) - if (!PyArg_ParseTuple(args, "w*:readinto", &buf)) + if (!PyArg_ParseTuple(args, + readinto1 ? "w*:readinto1" : "w*:readinto", + &buf)) return NULL; n = Py_SAFE_DOWNCAST(READAHEAD(self), Py_off_t, Py_ssize_t); @@ -1035,7 +1055,10 @@ buffered_readinto(buffered *self, PyObject *args) n = _bufferedreader_raw_read(self, (char *) buf.buf + written, remaining); } - else { + + /* In readinto1 mode, we do not want to fill the internal + buffer if we already have some data to return */ + else if (!(readinto1 && written)) { n = _bufferedreader_fill_buffer(self); if (n > 0) { if (n > remaining) @@ -1046,6 +1069,9 @@ buffered_readinto(buffered *self, PyObject *args) continue; /* short circuit */ } } + else + n = 0; + if (n == 0 || (n == -2 && written > 0)) break; if (n < 0) { @@ -1055,6 +1081,12 @@ buffered_readinto(buffered *self, PyObject *args) } goto end; } + + /* At most one read in readinto1 mode */ + if (readinto1) { + written += n; + break; + } } res = PyLong_FromSsize_t(written); @@ -1065,6 +1097,19 @@ end_unlocked: return res; } +static PyObject * +buffered_readinto(buffered *self, PyObject *args) +{ + return _buffered_readinto_generic(self, args, 0); +} + +static PyObject * +buffered_readinto1(buffered *self, PyObject *args) +{ + return _buffered_readinto_generic(self, args, 1); +} + + static PyObject * _buffered_readline(buffered *self, Py_ssize_t limit) { @@ -1750,6 +1795,7 @@ static PyMethodDef bufferedreader_methods[] = { {"peek", (PyCFunction)buffered_peek, METH_VARARGS}, {"read1", (PyCFunction)buffered_read1, METH_VARARGS}, {"readinto", (PyCFunction)buffered_readinto, METH_VARARGS}, + {"readinto1", (PyCFunction)buffered_readinto1, METH_VARARGS}, {"readline", (PyCFunction)buffered_readline, METH_VARARGS}, {"seek", (PyCFunction)buffered_seek, METH_VARARGS}, {"tell", (PyCFunction)buffered_tell, METH_NOARGS}, @@ -2348,6 +2394,12 @@ bufferedrwpair_readinto(rwpair *self, PyObject *args) return _forward_call(self->reader, &PyId_readinto, args); } +static PyObject * +bufferedrwpair_readinto1(rwpair *self, PyObject *args) +{ + return _forward_call(self->reader, &PyId_readinto1, args); +} + static PyObject * bufferedrwpair_write(rwpair *self, PyObject *args) { @@ -2413,6 +2465,7 @@ static PyMethodDef bufferedrwpair_methods[] = { {"peek", (PyCFunction)bufferedrwpair_peek, METH_VARARGS}, {"read1", (PyCFunction)bufferedrwpair_read1, METH_VARARGS}, {"readinto", (PyCFunction)bufferedrwpair_readinto, METH_VARARGS}, + {"readinto1", (PyCFunction)bufferedrwpair_readinto1, METH_VARARGS}, {"write", (PyCFunction)bufferedrwpair_write, METH_VARARGS}, {"flush", (PyCFunction)bufferedrwpair_flush, METH_NOARGS}, @@ -2561,6 +2614,7 @@ static PyMethodDef bufferedrandom_methods[] = { {"read", (PyCFunction)buffered_read, METH_VARARGS}, {"read1", (PyCFunction)buffered_read1, METH_VARARGS}, {"readinto", (PyCFunction)buffered_readinto, METH_VARARGS}, + {"readinto1", (PyCFunction)buffered_readinto1, METH_VARARGS}, {"readline", (PyCFunction)buffered_readline, METH_VARARGS}, {"peek", (PyCFunction)buffered_peek, METH_VARARGS}, {"write", (PyCFunction)bufferedwriter_write, METH_VARARGS}, -- cgit v1.2.1 From 6415ae4101b2ec7a354621328366c6bc59cded8b Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Fri, 27 Jun 2014 23:49:29 -0400 Subject: Issue #21863: cProfile now displays the module name of C extension functions, in addition to their own name. --- Modules/_lsprof.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c index 0137d95443..66e534f2a8 100644 --- a/Modules/_lsprof.c +++ b/Modules/_lsprof.c @@ -202,6 +202,8 @@ normalizeUserObj(PyObject *obj) */ PyObject *self = fn->m_self; PyObject *name = PyUnicode_FromString(fn->m_ml->ml_name); + PyObject *modname = fn->m_module; + if (name != NULL) { PyObject *mo = _PyType_Lookup(Py_TYPE(self), name); Py_XINCREF(mo); @@ -213,9 +215,14 @@ normalizeUserObj(PyObject *obj) return res; } } + /* Otherwise, use __module__ */ PyErr_Clear(); - return PyUnicode_FromFormat("", - fn->m_ml->ml_name); + if (modname != NULL && PyUnicode_Check(modname)) + return PyUnicode_FromFormat("", + modname, fn->m_ml->ml_name); + else + return PyUnicode_FromFormat("", + fn->m_ml->ml_name); } } -- cgit v1.2.1 From b46526728f13e548ee7cef8b2c0510efbbb57da3 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sun, 29 Jun 2014 20:07:28 -0400 Subject: Issue #21679: Prevent extraneous fstat() calls during open(). Patch by Bohuslav Kabrda. --- Modules/_io/_iomodule.c | 28 +++++++++------------------- Modules/_io/fileio.c | 46 +++++++++++++++++++++++++--------------------- 2 files changed, 34 insertions(+), 40 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index 660ff1fe58..9e14b4ff40 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -237,8 +237,8 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds) PyObject *raw, *modeobj = NULL, *buffer, *wrapper, *result = NULL; + _Py_IDENTIFIER(_blksize); _Py_IDENTIFIER(isatty); - _Py_IDENTIFIER(fileno); _Py_IDENTIFIER(mode); _Py_IDENTIFIER(close); @@ -380,24 +380,14 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds) line_buffering = 0; if (buffering < 0) { - buffering = DEFAULT_BUFFER_SIZE; -#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE - { - struct stat st; - long fileno; - PyObject *res = _PyObject_CallMethodId(raw, &PyId_fileno, NULL); - if (res == NULL) - goto error; - - fileno = PyLong_AsLong(res); - Py_DECREF(res); - if (fileno == -1 && PyErr_Occurred()) - goto error; - - if (fstat(fileno, &st) >= 0 && st.st_blksize > 1) - buffering = st.st_blksize; - } -#endif + PyObject *blksize_obj; + blksize_obj = _PyObject_GetAttrId(raw, &PyId__blksize); + if (blksize_obj == NULL) + goto error; + buffering = PyLong_AsLong(blksize_obj); + Py_DECREF(blksize_obj); + if (buffering == -1 && PyErr_Occurred()) + goto error; } if (buffering < 0) { PyErr_SetString(PyExc_ValueError, diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index cbb2daf5c2..038b2c6459 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -53,6 +53,7 @@ typedef struct { signed int seekable : 2; /* -1 means unknown */ unsigned int closefd : 1; char finalizing; + unsigned int blksize; PyObject *weakreflist; PyObject *dict; } fileio; @@ -161,6 +162,7 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) self->writable = 0; self->appending = 0; self->seekable = -1; + self->blksize = 0; self->closefd = 1; self->weakreflist = NULL; } @@ -168,26 +170,6 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return (PyObject *) self; } -/* On Unix, open will succeed for directories. - In Python, there should be no file objects referring to - directories, so we need a check. */ - -static int -dircheck(fileio* self, PyObject *nameobj) -{ -#if defined(HAVE_FSTAT) && defined(S_ISDIR) && defined(EISDIR) - struct stat buf; - if (self->fd < 0) - return 0; - if (fstat(self->fd, &buf) == 0 && S_ISDIR(buf.st_mode)) { - errno = EISDIR; - PyErr_SetFromErrnoWithFilenameObject(PyExc_IOError, nameobj); - return -1; - } -#endif - return 0; -} - static int check_fd(int fd) { @@ -233,6 +215,9 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) #elif !defined(MS_WINDOWS) int *atomic_flag_works = NULL; #endif +#ifdef HAVE_FSTAT + struct stat fdfstat; +#endif assert(PyFileIO_Check(oself)); if (self->fd >= 0) { @@ -421,8 +406,26 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) goto error; #endif } - if (dircheck(self, nameobj) < 0) + + self->blksize = DEFAULT_BUFFER_SIZE; +#ifdef HAVE_FSTAT + if (fstat(self->fd, &fdfstat) < 0) goto error; +#if defined(S_ISDIR) && defined(EISDIR) + /* On Unix, open will succeed for directories. + In Python, there should be no file objects referring to + directories, so we need a check. */ + if (S_ISDIR(fdfstat.st_mode)) { + errno = EISDIR; + PyErr_SetFromErrnoWithFilenameObject(PyExc_IOError, nameobj); + goto error; + } +#endif /* defined(S_ISDIR) */ +#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE + if (fdfstat.st_blksize > 1) + self->blksize = fdfstat.st_blksize; +#endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */ +#endif /* HAVE_FSTAT */ #if defined(MS_WINDOWS) || defined(__CYGWIN__) /* don't translate newlines (\r\n <=> \n) */ @@ -1216,6 +1219,7 @@ static PyGetSetDef fileio_getsetlist[] = { }; static PyMemberDef fileio_members[] = { + {"_blksize", T_UINT, offsetof(fileio, blksize), 0}, {"_finalizing", T_BOOL, offsetof(fileio, finalizing), 0}, {NULL} }; -- cgit v1.2.1 From 75f17e79ab6400664e161ae87c6d70a2e4d46ce1 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 4 Jul 2014 17:00:25 -0700 Subject: properly decref the return value of close() --- Modules/_io/_iomodule.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index 9e14b4ff40..6f7af41382 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -455,11 +455,13 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds) error: if (result != NULL) { - PyObject *exc, *val, *tb; + PyObject *exc, *val, *tb, *close_result; PyErr_Fetch(&exc, &val, &tb); - if (_PyObject_CallMethodId(result, &PyId_close, NULL) != NULL) + close_result = _PyObject_CallMethodId(result, &PyId_close, NULL); + if (close_result != NULL) { + Py_DECREF(close_result); PyErr_Restore(exc, val, tb); - else { + } else { PyObject *exc2, *val2, *tb2; PyErr_Fetch(&exc2, &val2, &tb2); PyErr_NormalizeException(&exc, &val, &tb); -- cgit v1.2.1 From f537e35a6439d211f036aacbe0ec8ddcfef48b5a Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 6 Jul 2014 13:04:20 -0700 Subject: upgrade to unicode 7.0.0 --- Modules/unicodedata_db.h | 7238 ++++---- Modules/unicodename_db.h | 40478 ++++++++++++++++++++++++--------------------- 2 files changed, 25129 insertions(+), 22587 deletions(-) (limited to 'Modules') diff --git a/Modules/unicodedata_db.h b/Modules/unicodedata_db.h index ec11fa1da4..a79132fd1e 100644 --- a/Modules/unicodedata_db.h +++ b/Modules/unicodedata_db.h @@ -1,6 +1,6 @@ /* this file was generated by Tools/unicode/makeunicodedata.py 3.2 */ -#define UNIDATA_VERSION "6.3.0" +#define UNIDATA_VERSION "7.0.0" /* a list of unique database records */ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {0, 0, 0, 0, 0, 0}, @@ -323,7 +323,9 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {27, 0, 19, 0, 1, 136}, {14, 0, 19, 0, 5, 0}, {8, 0, 19, 0, 5, 0}, + {9, 0, 9, 0, 5, 0}, {9, 0, 4, 0, 5, 0}, + {30, 0, 4, 0, 5, 0}, {9, 0, 12, 0, 5, 0}, {30, 0, 1, 0, 5, 170}, {5, 216, 1, 0, 5, 0}, @@ -335,8 +337,8 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { }; /* Reindexing of NFC first characters. */ -#define TOTAL_FIRST 372 -#define TOTAL_LAST 56 +#define TOTAL_FIRST 376 +#define TOTAL_LAST 62 struct reindex{int start;short count,index;}; static struct reindex nfc_first[] = { { 60, 2, 0}, @@ -546,6 +548,9 @@ static struct reindex nfc_first[] = { { 69787, 0, 368}, { 69797, 0, 369}, { 69937, 1, 370}, + { 70471, 0, 372}, + { 70841, 0, 373}, + { 71096, 1, 374}, {0,0,0} }; @@ -583,6 +588,12 @@ static struct reindex nfc_last[] = { { 12441, 1, 52}, { 69818, 0, 54}, { 69927, 0, 55}, + { 70462, 0, 56}, + { 70487, 0, 57}, + { 70832, 0, 58}, + { 70842, 0, 59}, + { 70845, 0, 60}, + { 71087, 0, 61}, {0,0,0} }; @@ -714,36 +725,43 @@ static unsigned char index1[] = { 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 123, 124, - 125, 126, 127, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 84, - 138, 139, 140, 141, 142, 84, 84, 84, 84, 84, 84, 143, 84, 144, 145, 146, - 84, 147, 84, 148, 84, 84, 84, 149, 84, 84, 84, 150, 151, 152, 153, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 154, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 41, 41, 41, 41, 41, 41, 155, 84, 156, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 41, 41, 41, 41, 41, 41, 41, 41, 157, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 41, 41, 41, 41, 158, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 159, 160, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 161, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 78, 162, 163, 164, 165, 84, 166, 84, 167, 168, 169, 170, 171, 172, - 173, 174, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 175, 176, 84, 84, 177, 178, 179, - 180, 181, 84, 182, 183, 184, 185, 186, 187, 188, 189, 190, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 101, 101, 101, + 125, 126, 127, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 138, 41, 41, 145, 138, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 138, 138, 138, 155, 138, 138, 138, 156, + 157, 158, 159, 160, 161, 162, 138, 138, 163, 138, 164, 165, 166, 138, + 138, 138, 167, 138, 138, 138, 168, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 169, 170, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 41, 171, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 41, 41, 41, 41, 172, 173, 174, 175, 138, 138, 138, 138, + 138, 138, 176, 177, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 178, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 179, 180, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 78, + 181, 182, 183, 184, 138, 185, 138, 186, 187, 188, 189, 190, 191, 192, + 193, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 194, 195, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 196, 197, 138, 138, 198, 199, 200, 201, 202, 138, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, @@ -767,359 +785,459 @@ static unsigned char index1[] = { 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 191, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 215, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 192, - 101, 193, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 122, 122, 122, 122, 194, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 195, 84, 196, 197, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 121, 121, 121, 121, 121, 121, 121, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 216, + 101, 217, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 122, 122, 122, 122, 218, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 219, 138, 220, 221, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, @@ -1155,8 +1273,8 @@ static unsigned char index1[] = { 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 222, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 198, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, @@ -1192,7 +1310,7 @@ static unsigned char index1[] = { 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 198, + 121, 121, 121, 121, 222, }; static unsigned short index2[] = { @@ -1244,7 +1362,7 @@ static unsigned short index2[] = { 69, 59, 69, 69, 70, 60, 62, 62, 62, 60, 60, 60, 62, 62, 71, 60, 60, 60, 62, 62, 62, 62, 60, 61, 62, 62, 60, 72, 73, 73, 72, 73, 73, 72, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 44, 47, 44, 47, 74, 54, 44, - 47, 0, 0, 51, 47, 47, 47, 75, 0, 0, 0, 0, 0, 58, 76, 38, 75, 38, 38, 38, + 47, 0, 0, 51, 47, 47, 47, 75, 44, 0, 0, 0, 0, 58, 76, 38, 75, 38, 38, 38, 0, 38, 0, 38, 38, 43, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 39, 39, 39, 39, 39, 39, 39, 38, 38, 43, 43, 43, 43, 43, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, @@ -1267,153 +1385,154 @@ static unsigned short index2[] = { 38, 43, 38, 43, 38, 43, 44, 47, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 47, 38, 43, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 44, 47, 44, 47, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 0, 0, 53, 83, 83, 83, 83, 83, 83, 0, 47, 47, 47, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 53, 83, 83, 83, 83, 83, 83, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 35, - 0, 83, 84, 0, 0, 0, 0, 85, 0, 86, 81, 81, 81, 81, 86, 81, 81, 81, 87, 86, - 81, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86, 86, 81, 81, 86, 81, 81, 87, - 88, 81, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 104, 81, 86, 104, 97, 0, 0, 0, 0, 0, 0, 0, 0, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, - 0, 107, 107, 107, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, - 108, 108, 108, 0, 78, 78, 109, 110, 110, 111, 112, 113, 26, 26, 81, 81, - 81, 81, 81, 81, 81, 81, 114, 115, 116, 113, 117, 0, 113, 113, 118, 118, - 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 120, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 121, - 122, 123, 114, 115, 116, 124, 125, 126, 126, 127, 86, 81, 81, 81, 81, 81, - 86, 81, 81, 86, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 110, - 129, 129, 113, 118, 118, 130, 118, 118, 118, 118, 131, 131, 131, 131, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 35, 0, 83, 84, 0, 0, 26, 26, 85, 0, 86, 81, 81, 81, 81, 86, 81, + 81, 81, 87, 86, 81, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86, 86, 81, 81, + 86, 81, 81, 87, 88, 81, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 104, 81, 86, 104, 97, 0, 0, 0, 0, 0, + 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, + 0, 0, 0, 0, 107, 107, 107, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 108, 108, 108, 108, 108, 108, 78, 78, 109, 110, 110, 111, 112, 113, 26, + 26, 81, 81, 81, 81, 81, 81, 81, 81, 114, 115, 116, 113, 117, 0, 113, 113, + 118, 118, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 120, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 121, 122, 123, 114, 115, 116, 124, 125, 126, 126, 127, 86, 81, 81, + 81, 81, 81, 86, 81, 81, 86, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 110, 129, 129, 113, 118, 118, 130, 118, 118, 118, 118, 131, 131, + 131, 131, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 119, 118, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 119, 113, 118, 81, 81, 81, 81, 81, 81, 81, - 108, 26, 81, 81, 81, 81, 86, 81, 120, 120, 81, 81, 26, 86, 81, 81, 86, - 118, 118, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 118, 118, - 118, 133, 133, 118, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 0, 117, 118, 134, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 119, 118, 119, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 119, 113, 118, 81, 81, 81, 81, + 81, 81, 81, 108, 26, 81, 81, 81, 81, 86, 81, 120, 120, 81, 81, 26, 86, + 81, 81, 86, 118, 118, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 118, 118, 118, 133, 133, 118, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 0, 117, 118, 134, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 81, 86, 81, 81, 86, 81, 81, - 86, 86, 86, 81, 86, 86, 81, 86, 81, 81, 81, 86, 81, 86, 81, 86, 81, 86, - 81, 81, 0, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 81, 86, 81, 81, + 86, 81, 81, 86, 86, 86, 81, 86, 86, 81, 86, 81, 81, 81, 86, 81, 86, 81, + 86, 81, 86, 81, 81, 0, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 107, 107, 107, 107, 107, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 81, - 81, 81, 81, 81, 81, 81, 86, 81, 137, 137, 26, 138, 138, 138, 137, 0, 0, - 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 81, 81, 81, 81, 137, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 137, 81, 81, 81, 137, 81, 81, 81, 81, 81, 0, - 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 104, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 86, 86, 86, - 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, - 81, 86, 81, 81, 86, 81, 81, 81, 86, 86, 86, 121, 122, 123, 81, 81, 81, - 86, 81, 81, 86, 86, 81, 81, 81, 81, 0, 135, 135, 135, 139, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, - 48, 48, 48, 48, 48, 48, 140, 48, 48, 140, 48, 48, 48, 48, 48, 135, 139, - 141, 48, 139, 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, 139, 139, - 139, 139, 142, 139, 139, 48, 81, 86, 81, 81, 135, 135, 135, 143, 143, - 143, 143, 143, 143, 143, 143, 48, 48, 135, 135, 83, 83, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 83, 53, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 48, 48, 48, 48, 0, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, - 48, 0, 0, 0, 48, 48, 48, 48, 0, 0, 145, 48, 146, 139, 139, 135, 135, 135, - 135, 0, 0, 139, 139, 0, 0, 147, 147, 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, - 146, 0, 0, 0, 0, 143, 143, 0, 143, 48, 48, 135, 135, 0, 0, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 48, 48, 85, 85, 148, 148, 148, 148, - 148, 148, 80, 85, 0, 0, 0, 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, 48, - 48, 0, 0, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, - 48, 0, 48, 143, 0, 48, 143, 0, 48, 48, 0, 0, 145, 0, 139, 139, 139, 135, - 135, 0, 0, 0, 0, 135, 135, 0, 0, 135, 135, 142, 0, 0, 0, 135, 0, 0, 0, 0, - 0, 0, 0, 143, 143, 143, 48, 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 135, 135, 48, 48, 48, 135, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 0, 48, 48, 48, 48, 48, 0, 0, 145, 48, 139, 139, 139, 135, 135, 135, - 135, 135, 0, 135, 135, 139, 0, 139, 139, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 83, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, - 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, - 48, 48, 48, 0, 0, 145, 48, 146, 135, 139, 135, 135, 135, 135, 0, 0, 139, - 147, 0, 0, 147, 147, 142, 0, 0, 0, 0, 0, 0, 0, 0, 149, 146, 0, 0, 0, 0, - 143, 143, 0, 48, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 80, 48, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 135, 48, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, - 0, 48, 48, 140, 48, 0, 0, 0, 48, 48, 0, 48, 0, 48, 48, 0, 0, 0, 48, 48, - 0, 0, 0, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 0, 0, 0, 146, 139, 135, 139, 139, 0, 0, 0, 139, 139, 139, 0, 147, - 147, 147, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, - 148, 148, 26, 26, 26, 26, 26, 26, 85, 26, 0, 0, 0, 0, 0, 0, 139, 139, - 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, - 0, 0, 48, 135, 135, 135, 139, 139, 139, 139, 0, 135, 135, 150, 0, 135, - 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 151, 152, 0, 48, 48, 0, 0, 0, 0, 0, - 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 0, 0, 0, 0, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, 80, 0, 0, - 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, - 48, 0, 0, 145, 48, 139, 154, 147, 139, 146, 139, 139, 0, 154, 147, 147, - 0, 147, 147, 135, 142, 0, 0, 0, 0, 0, 0, 0, 146, 146, 0, 0, 0, 0, 0, 0, - 0, 48, 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, - 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 0, 48, 146, 139, 139, 135, 135, 135, 135, 0, 139, 139, 139, 0, - 147, 147, 147, 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 148, 148, 148, 148, 148, 148, 0, 0, 0, 80, 48, 48, 48, 48, 48, 48, - 0, 0, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 81, 81, 81, 81, 81, 81, 81, 86, 81, 137, 137, 26, 138, 138, + 138, 137, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 81, 81, + 81, 81, 137, 81, 81, 81, 81, 81, 81, 81, 81, 81, 137, 81, 81, 81, 137, + 81, 81, 81, 81, 81, 0, 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 0, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 86, 86, 86, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 86, 81, 81, 86, 81, 81, + 81, 86, 86, 86, 121, 122, 123, 81, 81, 81, 86, 81, 81, 86, 86, 81, 81, + 81, 81, 81, 135, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, 48, 48, 48, 140, + 48, 48, 140, 48, 48, 48, 48, 48, 135, 139, 141, 48, 139, 139, 139, 135, + 135, 135, 135, 135, 135, 135, 135, 139, 139, 139, 139, 142, 139, 139, 48, + 81, 86, 81, 81, 135, 135, 135, 143, 143, 143, 143, 143, 143, 143, 143, + 48, 48, 135, 135, 83, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 83, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, + 48, 0, 0, 145, 48, 146, 139, 139, 135, 135, 135, 135, 0, 0, 139, 139, 0, + 0, 147, 147, 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 143, 143, + 0, 143, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 48, 48, 85, 85, 148, 148, 148, 148, 148, 148, 80, 85, 0, 0, 0, + 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 143, 0, 48, 143, 0, + 48, 48, 0, 0, 145, 0, 139, 139, 139, 135, 135, 0, 0, 0, 0, 135, 135, 0, + 0, 135, 135, 142, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 143, 143, 143, 48, + 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 135, 135, 48, 48, 48, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 135, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, + 48, 0, 0, 145, 48, 139, 139, 139, 135, 135, 135, 135, 135, 0, 135, 135, + 139, 0, 139, 139, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 83, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 139, + 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 0, + 0, 145, 48, 146, 135, 139, 135, 135, 135, 135, 0, 0, 139, 147, 0, 0, 147, + 147, 142, 0, 0, 0, 0, 0, 0, 0, 0, 149, 146, 0, 0, 0, 0, 143, 143, 0, 48, + 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 80, 48, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 48, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 0, 48, 48, 140, 48, + 0, 0, 0, 48, 48, 0, 48, 0, 48, 48, 0, 0, 0, 48, 48, 0, 0, 0, 48, 48, 48, + 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 146, + 139, 135, 139, 139, 0, 0, 0, 139, 139, 139, 0, 147, 147, 147, 142, 0, 0, + 48, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, 148, 26, 26, 26, + 26, 26, 26, 85, 26, 0, 0, 0, 0, 0, 135, 139, 139, 139, 0, 48, 48, 48, 48, + 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 0, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, - 155, 0, 0, 0, 0, 146, 139, 139, 135, 135, 135, 0, 135, 0, 139, 139, 147, - 139, 147, 147, 147, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 139, 139, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 135, 48, 156, 135, 135, 135, 135, 157, - 157, 142, 0, 0, 0, 0, 85, 48, 48, 48, 48, 48, 48, 53, 135, 158, 158, 158, - 158, 135, 135, 135, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 48, 0, 0, 48, 48, - 0, 48, 0, 0, 48, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, - 48, 48, 0, 48, 48, 48, 0, 48, 0, 48, 0, 0, 48, 48, 0, 48, 48, 48, 48, - 135, 48, 156, 135, 135, 135, 135, 159, 159, 0, 135, 135, 48, 0, 0, 48, - 48, 48, 48, 48, 0, 53, 0, 160, 160, 160, 160, 135, 135, 0, 0, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 156, 156, 48, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 80, 80, 80, 83, 83, 83, 83, 83, 83, 83, 83, 161, 83, - 83, 83, 83, 83, 83, 80, 83, 80, 80, 80, 86, 86, 80, 80, 80, 80, 80, 80, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, 148, 148, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 135, 135, + 135, 139, 139, 139, 139, 0, 135, 135, 150, 0, 135, 135, 135, 142, 0, 0, + 0, 0, 0, 0, 0, 151, 152, 0, 48, 48, 0, 0, 0, 0, 0, 0, 48, 48, 135, 135, + 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 153, 153, 153, 153, 153, 153, 153, 80, 0, 135, 139, 139, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 0, 145, 48, + 139, 154, 147, 139, 146, 139, 139, 0, 154, 147, 147, 0, 147, 147, 135, + 142, 0, 0, 0, 0, 0, 0, 0, 146, 146, 0, 0, 0, 0, 0, 0, 0, 48, 0, 48, 48, + 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 48, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 139, 139, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, + 146, 139, 139, 135, 135, 135, 135, 0, 139, 139, 139, 0, 147, 147, 147, + 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, + 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, + 148, 148, 148, 148, 148, 0, 0, 0, 80, 48, 48, 48, 48, 48, 48, 0, 0, 139, + 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 155, 0, 0, 0, + 0, 146, 139, 139, 135, 135, 135, 0, 135, 0, 139, 139, 147, 139, 147, 147, + 147, 146, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 0, 0, 139, 139, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 48, 156, 135, 135, 135, 135, + 157, 157, 142, 0, 0, 0, 0, 85, 48, 48, 48, 48, 48, 48, 53, 135, 158, 158, + 158, 158, 135, 135, 135, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 48, 0, 0, + 48, 48, 0, 48, 0, 0, 48, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, + 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 0, 48, 0, 0, 48, 48, 0, 48, 48, 48, + 48, 135, 48, 156, 135, 135, 135, 135, 159, 159, 0, 135, 135, 48, 0, 0, + 48, 48, 48, 48, 48, 0, 53, 0, 160, 160, 160, 160, 135, 135, 0, 0, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 156, 156, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 80, 80, 80, 83, 83, 83, 83, 83, 83, 83, 83, 161, + 83, 83, 83, 83, 83, 83, 80, 83, 80, 80, 80, 86, 86, 80, 80, 80, 80, 80, + 80, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 80, 86, 80, 86, 80, 162, 163, 164, 163, 164, 139, 139, 48, 48, 48, 143, 48, 48, 48, 48, 0, 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, @@ -1513,10 +1632,10 @@ static unsigned short index2[] = { 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 83, 83, 83, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 48, 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, + 48, 48, 48, 83, 83, 83, 173, 173, 173, 48, 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, + 48, 48, 48, 48, 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 142, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, @@ -1544,7 +1663,7 @@ static unsigned short index2[] = { 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 0, 0, 135, 135, 135, 139, 139, 139, 139, 135, 135, 139, 139, + 48, 48, 48, 48, 0, 135, 135, 135, 139, 139, 139, 139, 135, 135, 139, 139, 139, 0, 0, 0, 0, 139, 139, 135, 139, 139, 139, 139, 139, 139, 87, 81, 86, 0, 0, 0, 0, 26, 0, 0, 0, 138, 138, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, @@ -1567,295 +1686,297 @@ static unsigned short index2[] = { 81, 81, 81, 81, 81, 81, 0, 0, 86, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 53, 83, 83, 83, 83, - 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 83, 0, 0, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86, 86, 81, 81, 86, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 139, 48, 140, 48, - 140, 48, 140, 48, 140, 48, 140, 48, 48, 48, 140, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, + 139, 48, 140, 48, 140, 48, 140, 48, 140, 48, 140, 48, 48, 48, 140, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 146, 135, + 135, 135, 135, 135, 147, 135, 147, 139, 139, 147, 147, 135, 147, 175, 48, + 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 83, 83, 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 81, 86, 81, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 0, 0, 0, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 139, 135, 135, 135, 135, 139, 139, 135, 135, 175, 142, 135, + 135, 48, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 146, 135, 135, 135, 135, 135, - 147, 135, 147, 139, 139, 147, 147, 135, 147, 175, 48, 48, 48, 48, 48, 48, - 48, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 83, 83, - 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 86, 81, - 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 135, - 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, 135, - 135, 135, 139, 139, 135, 135, 175, 142, 139, 139, 48, 48, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, - 139, 135, 135, 139, 139, 139, 135, 139, 135, 135, 135, 175, 175, 0, 0, 0, - 0, 0, 0, 0, 0, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 145, 139, 135, 135, 139, 139, 139, 135, 139, 135, + 135, 135, 175, 175, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 139, 139, 139, 139, 139, - 135, 135, 135, 135, 135, 135, 135, 135, 139, 139, 135, 145, 0, 0, 0, 83, - 83, 83, 83, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, - 0, 48, 48, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, + 139, 139, 139, 139, 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, + 139, 139, 135, 145, 0, 0, 0, 83, 83, 83, 83, 83, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 0, 0, 0, 48, 48, 48, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, 53, 83, 83, + 53, 53, 53, 53, 53, 53, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, - 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 83, 176, 86, 86, 86, 86, 86, - 81, 81, 86, 86, 86, 86, 81, 139, 176, 176, 176, 176, 176, 176, 176, 48, - 48, 48, 48, 86, 48, 48, 48, 48, 139, 139, 81, 48, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 0, 0, 83, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, + 83, 176, 86, 86, 86, 86, 86, 81, 81, 86, 86, 86, 86, 81, 139, 176, 176, + 176, 176, 176, 176, 176, 48, 48, 48, 48, 86, 48, 48, 48, 48, 139, 139, + 81, 48, 48, 0, 81, 81, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 51, 51, 51, 53, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 51, 51, 51, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 51, 47, 47, 47, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 51, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 51, 51, 51, 51, 51, + 47, 47, 47, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 81, 81, 86, 81, - 81, 81, 81, 81, 81, 81, 86, 81, 81, 177, 178, 86, 179, 81, 81, 81, 81, + 51, 51, 51, 51, 81, 81, 86, 81, 81, 81, 81, 81, 81, 81, 86, 81, 81, 177, + 178, 86, 179, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 86, - 81, 86, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 43, 43, 43, 43, 35, 181, 47, 47, 44, 47, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 44, 47, 44, 47, 44, 47, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, - 38, 38, 38, 38, 43, 43, 43, 43, 43, 43, 0, 0, 38, 38, 38, 38, 38, 38, 0, - 0, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, + 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 180, 86, 81, 86, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 43, 43, 43, 43, 35, 181, 47, 47, 44, 47, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 47, 44, 47, 44, 47, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 43, 43, 43, 43, 0, 0, 38, 38, 38, 38, 38, 38, 0, 0, 43, 43, 43, 43, 43, 43, - 43, 43, 0, 38, 0, 38, 0, 38, 0, 38, 43, 43, 43, 43, 43, 43, 43, 43, 38, - 38, 38, 38, 38, 38, 38, 38, 43, 182, 43, 182, 43, 182, 43, 182, 43, 182, - 43, 182, 43, 182, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 183, 183, 183, - 183, 183, 183, 183, 183, 43, 43, 43, 43, 43, 43, 43, 43, 183, 183, 183, - 183, 183, 183, 183, 183, 43, 43, 43, 43, 43, 43, 43, 43, 183, 183, 183, - 183, 183, 183, 183, 183, 43, 43, 43, 43, 43, 0, 43, 43, 38, 38, 38, 184, - 183, 58, 182, 58, 58, 76, 43, 43, 43, 0, 43, 43, 38, 184, 38, 184, 183, - 76, 76, 76, 43, 43, 43, 182, 0, 0, 43, 43, 38, 38, 38, 184, 0, 76, 76, - 76, 43, 43, 43, 182, 43, 43, 43, 43, 38, 38, 38, 184, 38, 76, 185, 185, - 0, 0, 43, 43, 43, 0, 43, 43, 38, 184, 38, 184, 183, 185, 58, 0, 186, 186, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 174, 174, 174, 188, 189, - 190, 191, 84, 190, 190, 190, 22, 192, 193, 194, 195, 196, 193, 194, 195, - 196, 22, 22, 22, 138, 197, 197, 197, 22, 198, 199, 200, 201, 202, 203, - 204, 21, 205, 110, 205, 206, 207, 22, 192, 192, 138, 28, 36, 22, 192, - 138, 197, 208, 208, 138, 138, 138, 209, 163, 164, 192, 192, 192, 138, - 138, 138, 138, 138, 138, 138, 138, 78, 138, 208, 138, 138, 192, 138, 138, - 138, 138, 138, 138, 138, 187, 174, 174, 174, 174, 174, 0, 210, 211, 212, - 213, 174, 174, 174, 174, 174, 174, 214, 51, 0, 0, 34, 214, 214, 214, 214, - 214, 215, 215, 216, 217, 218, 219, 214, 34, 34, 34, 34, 214, 214, 214, - 214, 214, 215, 215, 216, 217, 218, 0, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 0, 0, 0, 85, 85, 85, 85, 85, 85, 85, 85, 220, 221, 85, - 85, 23, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 176, 176, - 81, 81, 81, 81, 176, 176, 176, 81, 81, 82, 82, 82, 82, 81, 82, 82, 82, - 176, 176, 81, 86, 81, 176, 176, 86, 86, 86, 86, 81, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 49, 223, 26, 223, 222, 49, 26, 223, 35, - 49, 49, 49, 35, 35, 49, 49, 49, 46, 26, 49, 223, 26, 78, 49, 49, 49, 49, - 49, 26, 26, 222, 223, 223, 26, 49, 26, 224, 26, 49, 26, 184, 224, 49, 49, - 225, 35, 49, 49, 44, 49, 35, 156, 156, 156, 156, 35, 26, 222, 35, 35, 49, - 49, 226, 78, 78, 78, 78, 49, 35, 35, 35, 35, 26, 78, 26, 26, 47, 80, 227, - 227, 227, 37, 37, 227, 227, 227, 227, 227, 227, 37, 37, 37, 37, 227, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, - 229, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, - 229, 229, 229, 173, 173, 173, 44, 47, 173, 173, 173, 173, 37, 0, 0, 0, 0, - 0, 0, 40, 40, 40, 40, 40, 30, 30, 30, 30, 30, 230, 230, 26, 26, 26, 26, - 78, 26, 26, 78, 26, 26, 78, 26, 26, 26, 26, 26, 26, 26, 230, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 231, 230, 230, 26, 26, 40, 26, 40, + 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 43, 43, 43, 43, 43, 43, + 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 43, 43, 43, 43, 0, 0, 38, 38, 38, + 38, 38, 38, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 0, 38, 0, 38, 0, 38, 0, + 38, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, + 182, 43, 182, 43, 182, 43, 182, 43, 182, 43, 182, 43, 182, 0, 0, 43, 43, + 43, 43, 43, 43, 43, 43, 183, 183, 183, 183, 183, 183, 183, 183, 43, 43, + 43, 43, 43, 43, 43, 43, 183, 183, 183, 183, 183, 183, 183, 183, 43, 43, + 43, 43, 43, 43, 43, 43, 183, 183, 183, 183, 183, 183, 183, 183, 43, 43, + 43, 43, 43, 0, 43, 43, 38, 38, 38, 184, 183, 58, 182, 58, 58, 76, 43, 43, + 43, 0, 43, 43, 38, 184, 38, 184, 183, 76, 76, 76, 43, 43, 43, 182, 0, 0, + 43, 43, 38, 38, 38, 184, 0, 76, 76, 76, 43, 43, 43, 182, 43, 43, 43, 43, + 38, 38, 38, 184, 38, 76, 185, 185, 0, 0, 43, 43, 43, 0, 43, 43, 38, 184, + 38, 184, 183, 185, 58, 0, 186, 186, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 174, 174, 174, 188, 189, 190, 191, 84, 190, 190, 190, 22, 192, + 193, 194, 195, 196, 193, 194, 195, 196, 22, 22, 22, 138, 197, 197, 197, + 22, 198, 199, 200, 201, 202, 203, 204, 21, 205, 110, 205, 206, 207, 22, + 192, 192, 138, 28, 36, 22, 192, 138, 197, 208, 208, 138, 138, 138, 209, + 163, 164, 192, 192, 192, 138, 138, 138, 138, 138, 138, 138, 138, 78, 138, + 208, 138, 138, 192, 138, 138, 138, 138, 138, 138, 138, 187, 174, 174, + 174, 174, 174, 0, 210, 211, 212, 213, 174, 174, 174, 174, 174, 174, 214, + 51, 0, 0, 34, 214, 214, 214, 214, 214, 215, 215, 216, 217, 218, 219, 214, + 34, 34, 34, 34, 214, 214, 214, 214, 214, 215, 215, 216, 217, 218, 0, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 85, 85, 85, 85, + 85, 85, 85, 85, 220, 221, 85, 85, 23, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 81, 81, 176, 176, 81, 81, 81, 81, 176, 176, 176, 81, 81, 82, + 82, 82, 82, 81, 82, 82, 82, 176, 176, 81, 86, 81, 176, 176, 86, 86, 86, + 86, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 49, 223, + 26, 223, 222, 49, 26, 223, 35, 49, 49, 49, 35, 35, 49, 49, 49, 46, 26, + 49, 223, 26, 78, 49, 49, 49, 49, 49, 26, 26, 222, 223, 223, 26, 49, 26, + 224, 26, 49, 26, 184, 224, 49, 49, 225, 35, 49, 49, 44, 49, 35, 156, 156, + 156, 156, 35, 26, 222, 35, 35, 49, 49, 226, 78, 78, 78, 78, 49, 35, 35, + 35, 35, 26, 78, 26, 26, 47, 80, 227, 227, 227, 37, 37, 227, 227, 227, + 227, 227, 227, 37, 37, 37, 37, 227, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 229, 229, 229, 229, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 173, 173, 173, 44, + 47, 173, 173, 173, 173, 37, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 30, 30, + 30, 30, 30, 230, 230, 26, 26, 26, 26, 78, 26, 26, 78, 26, 26, 78, 26, 26, + 26, 26, 26, 26, 26, 230, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 40, 232, 233, 233, 234, 78, 78, 40, 233, 234, - 232, 233, 234, 232, 78, 40, 78, 233, 235, 236, 78, 233, 232, 78, 78, 78, - 233, 232, 232, 233, 40, 233, 233, 232, 232, 40, 234, 40, 234, 40, 40, 40, - 40, 233, 237, 226, 233, 226, 226, 232, 232, 232, 40, 40, 40, 40, 78, 232, - 78, 232, 233, 233, 232, 232, 232, 234, 232, 232, 234, 232, 232, 234, 233, - 234, 232, 232, 233, 78, 78, 78, 78, 78, 233, 232, 232, 232, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 232, 238, 40, 234, 78, 233, 233, 233, 233, 232, - 232, 233, 233, 78, 230, 238, 238, 234, 234, 232, 232, 234, 234, 232, 232, - 234, 234, 232, 232, 232, 232, 232, 232, 234, 234, 233, 233, 234, 234, - 233, 233, 234, 234, 232, 232, 232, 78, 78, 232, 232, 232, 232, 78, 78, - 40, 78, 78, 232, 40, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, 78, 40, - 232, 232, 232, 232, 232, 232, 234, 234, 234, 234, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 78, 78, 78, 78, 78, 232, 233, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 232, 232, 232, 232, 232, 78, 78, 232, 232, 78, 78, - 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 234, 234, 234, - 234, 232, 232, 232, 232, 232, 232, 234, 234, 234, 234, 78, 78, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 26, - 26, 26, 26, 26, 26, 26, 26, 163, 164, 163, 164, 26, 26, 26, 26, 26, 26, - 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 232, 232, 26, 26, - 26, 26, 26, 26, 26, 239, 240, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 231, 230, 230, 26, 26, 40, 26, 40, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 40, 232, + 233, 233, 234, 78, 78, 40, 233, 234, 232, 233, 234, 232, 78, 40, 78, 233, + 235, 236, 78, 233, 232, 78, 78, 78, 233, 232, 232, 233, 40, 233, 233, + 232, 232, 40, 234, 40, 234, 40, 40, 40, 40, 233, 237, 226, 233, 226, 226, + 232, 232, 232, 40, 40, 40, 40, 78, 232, 78, 232, 233, 233, 232, 232, 232, + 234, 232, 232, 234, 232, 232, 234, 233, 234, 232, 232, 233, 78, 78, 78, + 78, 78, 233, 232, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 238, + 40, 234, 78, 233, 233, 233, 233, 232, 232, 233, 233, 78, 230, 238, 238, + 234, 234, 232, 232, 234, 234, 232, 232, 234, 234, 232, 232, 232, 232, + 232, 232, 234, 234, 233, 233, 234, 234, 233, 233, 234, 234, 232, 232, + 232, 78, 78, 232, 232, 232, 232, 78, 78, 40, 78, 78, 232, 40, 78, 78, 78, + 78, 78, 78, 78, 78, 232, 232, 78, 40, 232, 232, 232, 232, 232, 232, 234, + 234, 234, 234, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, + 78, 78, 232, 233, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, 232, 232, + 232, 78, 78, 232, 232, 78, 78, 78, 78, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 234, 234, 234, 234, 232, 232, 232, 232, 232, 232, 234, + 234, 234, 234, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 26, 26, 26, 26, 26, 26, 26, 26, 163, 164, + 163, 164, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 232, 232, 26, 26, 26, 26, 26, 26, 26, 239, 240, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 26, 78, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 80, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 80, 80, 80, 80, 80, 80, 26, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 26, 26, 26, + 26, 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, + 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 227, 242, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, - 242, 242, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 227, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 30, 30, 26, 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, - 30, 30, 26, 26, 30, 40, 26, 26, 26, 26, 30, 30, 26, 26, 30, 40, 26, 26, - 26, 26, 30, 30, 30, 26, 26, 30, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 30, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, - 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 30, 30, 26, 26, 30, 26, 26, - 26, 26, 30, 30, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 30, 26, - 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, - 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, 30, - 26, 30, 30, 30, 30, 26, 30, 30, 26, 40, 26, 26, 26, 26, 26, 26, 26, 26, + 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 26, 30, + 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, + 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 30, + 40, 26, 26, 26, 26, 30, 30, 26, 26, 30, 40, 26, 26, 26, 26, 30, 30, 30, + 26, 26, 30, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78, + 78, 26, 26, 26, 26, 26, 30, 30, 26, 26, 30, 26, 26, 26, 26, 30, 30, 26, + 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 30, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, - 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, - 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, 30, 26, 30, 30, 30, 30, + 26, 30, 30, 26, 40, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 26, 26, 26, 26, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, - 163, 164, 163, 164, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 153, 153, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 232, 78, 78, - 232, 232, 163, 164, 78, 232, 232, 78, 232, 232, 232, 78, 78, 78, 78, 78, - 232, 232, 232, 232, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 232, - 232, 232, 232, 9, 10, 9, 10, 9, 10, 9, 10, 163, 164, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 232, 78, 78, 232, 232, 163, 164, + 78, 232, 232, 78, 232, 232, 232, 78, 78, 78, 78, 78, 232, 232, 232, 232, + 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 232, 232, 232, 232, 9, 10, + 9, 10, 9, 10, 9, 10, 163, 164, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, 78, 78, 78, + 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 163, 164, 9, 10, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, - 164, 163, 164, 163, 164, 163, 164, 78, 78, 232, 232, 232, 232, 232, 232, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 163, 164, 9, 10, 163, + 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, + 164, 163, 164, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, 78, + 78, 78, 78, 78, 232, 78, 78, 78, 78, 78, 78, 78, 232, 232, 232, 232, 232, + 232, 78, 78, 78, 232, 78, 78, 78, 78, 232, 232, 232, 232, 232, 78, 232, + 232, 78, 78, 163, 164, 163, 164, 232, 78, 78, 78, 78, 232, 78, 232, 232, + 232, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, + 232, 232, 232, 232, 78, 78, 163, 164, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 232, 232, 226, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, 232, 232, 78, 78, 232, + 78, 232, 78, 78, 232, 78, 232, 232, 232, 232, 78, 78, 78, 78, 78, 232, + 232, 78, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, + 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, 78, 78, 78, + 78, 232, 232, 232, 232, 78, 232, 232, 78, 78, 232, 226, 216, 216, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 78, 78, 78, 78, 78, 78, 78, 78, 232, 78, 78, 78, 78, 78, 78, 78, - 232, 232, 232, 232, 232, 232, 78, 78, 78, 232, 78, 78, 78, 78, 232, 232, - 232, 232, 232, 78, 232, 232, 78, 78, 163, 164, 163, 164, 232, 78, 78, 78, - 78, 232, 78, 232, 232, 232, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 232, 232, 232, 232, 232, 232, 78, 78, 163, 164, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, 226, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, - 232, 232, 78, 78, 232, 78, 232, 78, 78, 232, 78, 232, 232, 232, 232, 78, - 78, 78, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 232, 232, 78, 78, 78, 78, 232, 232, 232, 232, 78, 232, 232, 78, 78, 232, - 226, 216, 216, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, - 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, - 78, 78, 243, 78, 232, 78, 78, 78, 232, 232, 232, 232, 232, 78, 78, 78, - 78, 78, 232, 232, 232, 78, 78, 78, 78, 232, 78, 78, 78, 232, 232, 232, - 232, 232, 78, 232, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, 78, 78, 243, 78, + 232, 78, 78, 78, 232, 232, 232, 232, 232, 78, 78, 78, 78, 78, 232, 232, + 232, 78, 78, 78, 78, 232, 78, 78, 78, 232, 232, 232, 232, 232, 78, 232, + 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 26, + 26, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, + 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 26, 26, 78, 78, 78, 78, 78, 78, 0, 0, 0, 26, 26, 26, 26, - 26, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 44, 47, 44, 44, 44, 47, 47, 44, - 47, 44, 47, 44, 47, 44, 44, 44, 44, 47, 44, 47, 47, 44, 47, 47, 47, 47, - 47, 47, 51, 51, 44, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 47, 26, - 26, 26, 26, 26, 26, 44, 47, 44, 47, 81, 81, 81, 44, 47, 0, 0, 0, 0, 0, - 138, 138, 138, 138, 153, 138, 138, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 44, 47, 44, + 44, 44, 47, 47, 44, 47, 44, 47, 44, 47, 44, 44, 44, 44, 47, 44, 47, 47, + 44, 47, 47, 47, 47, 47, 47, 51, 51, 44, 44, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 47, 26, 26, 26, 26, 26, 26, 44, 47, 44, 47, 81, 81, 81, 44, + 47, 0, 0, 0, 0, 0, 138, 138, 138, 138, 153, 138, 138, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 0, 0, 47, 0, - 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, + 0, 0, 0, 47, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 51, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 142, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, - 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, - 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 51, 83, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, - 48, 48, 48, 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, + 0, 48, 48, 48, 48, 48, 48, 48, 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 138, 138, 28, 36, 28, 36, 138, 138, 138, 28, 36, 138, 28, 36, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 84, 138, 138, 84, 138, 28, 36, 138, - 138, 28, 36, 163, 164, 163, 164, 163, 164, 163, 164, 138, 138, 138, 138, - 138, 52, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 84, 84, 0, 0, + 81, 81, 81, 81, 138, 138, 28, 36, 28, 36, 138, 138, 138, 28, 36, 138, 28, + 36, 138, 138, 138, 138, 138, 138, 138, 138, 138, 84, 138, 138, 84, 138, + 28, 36, 138, 138, 28, 36, 163, 164, 163, 164, 163, 164, 163, 164, 138, + 138, 138, 138, 138, 52, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 84, 84, 138, 138, 138, 138, 84, 138, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 244, + 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 0, 244, + 244, 244, 244, 245, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 0, 244, 244, 244, 244, 245, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 244, 244, 244, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, @@ -1870,63 +1991,64 @@ static unsigned short index2[] = { 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 0, 0, 0, 0, 246, 247, 247, 247, - 244, 248, 170, 249, 250, 251, 250, 251, 250, 251, 250, 251, 250, 251, - 244, 244, 250, 251, 250, 251, 250, 251, 250, 251, 252, 253, 254, 254, - 244, 249, 249, 249, 249, 249, 249, 249, 249, 249, 255, 256, 257, 258, - 259, 259, 252, 248, 248, 248, 248, 248, 245, 244, 260, 260, 260, 248, - 170, 247, 244, 26, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, - 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 170, 261, 170, - 261, 170, 261, 170, 170, 170, 170, 170, 170, 261, 261, 170, 261, 261, - 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 261, 170, 170, 0, 0, 262, 262, 263, 263, 248, 264, 265, - 252, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 261, 170, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 0, + 0, 0, 0, 246, 247, 247, 247, 244, 248, 170, 249, 250, 251, 250, 251, 250, + 251, 250, 251, 250, 251, 244, 244, 250, 251, 250, 251, 250, 251, 250, + 251, 252, 253, 254, 254, 244, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 255, 256, 257, 258, 259, 259, 252, 248, 248, 248, 248, 248, 245, + 244, 260, 260, 260, 248, 170, 247, 244, 26, 0, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, - 261, 170, 261, 170, 261, 170, 261, 170, 170, 261, 170, 261, 170, 261, - 170, 170, 170, 170, 170, 170, 261, 261, 170, 261, 261, 170, 261, 261, - 170, 261, 261, 170, 261, 261, 170, 170, 170, 170, 170, 170, 170, 170, + 261, 170, 170, 261, 170, 261, 170, 261, 170, 170, 170, 170, 170, 170, + 261, 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 261, 170, 170, 261, 261, 261, 261, 247, 248, 248, 264, 265, 0, 0, 0, 0, - 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 261, 170, 170, 0, 0, 262, 262, + 263, 263, 248, 264, 265, 252, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, + 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 170, + 261, 170, 261, 170, 261, 170, 170, 170, 170, 170, 170, 261, 261, 170, + 261, 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, + 170, 170, 170, 170, 170, 261, 170, 170, 261, 261, 261, 261, 247, 248, + 248, 264, 265, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 0, 0, 0, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 0, 266, 266, 267, 267, - 267, 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 170, 170, + 265, 265, 0, 266, 266, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, + 170, 170, 170, 0, 0, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 245, 245, 0, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 0, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 269, 269, 269, 269, 269, 269, 269, 269, 245, 270, 270, - 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 269, 269, 269, 269, + 269, 269, 269, 245, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, - 245, 245, 266, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 268, + 268, 268, 268, 268, 268, 245, 245, 245, 266, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 245, 245, 268, + 268, 268, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 245, 245, 245, 245, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, @@ -1934,17 +2056,16 @@ static unsigned short index2[] = { 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 245, - 245, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 245, 245, 245, 245, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 245, 245, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 245, 170, 170, 170, 170, 170, 170, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, @@ -1957,21 +2078,21 @@ static unsigned short index2[] = { 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 170, 170, 170, 170, 170, 170, 170, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 248, 170, 170, 170, 170, 170, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 248, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, @@ -1979,96 +2100,98 @@ static unsigned short index2[] = { 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 244, 244, 244, 244, 244, 244, 244, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, - 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 138, 138, - 138, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 48, 81, 82, 82, 82, 138, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 138, 52, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 0, 0, 0, 0, 0, 0, 0, 81, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 53, 53, 53, 53, 53, 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 53, 138, 138, 138, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 48, 81, 82, 82, 82, 138, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 138, 52, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 51, 51, 0, 81, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 173, 173, 173, 173, 173, - 173, 173, 173, 173, 173, 81, 81, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 54, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 47, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 51, 47, 47, 47, 47, 47, 47, 47, 47, 44, 47, 44, - 47, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 52, 271, 271, 44, 47, 44, - 47, 0, 44, 47, 44, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 47, 44, - 47, 44, 47, 44, 47, 44, 47, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 47, 48, 48, 48, 48, - 48, 48, 48, 135, 48, 48, 48, 142, 48, 48, 48, 48, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 139, 139, 135, 135, 139, 26, 26, 26, 26, 0, 0, 0, 0, 148, 148, 148, - 148, 148, 148, 80, 80, 85, 225, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 81, + 81, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 54, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 47, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 51, + 47, 47, 47, 47, 47, 47, 47, 47, 44, 47, 44, 47, 44, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 47, 52, 271, 271, 44, 47, 44, 47, 0, 44, 47, 44, 47, 47, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, + 47, 44, 47, 44, 44, 44, 44, 0, 0, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 51, 51, 47, 48, 48, 48, 48, 48, 48, + 48, 135, 48, 48, 48, 142, 48, 48, 48, 48, 135, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, + 139, 135, 135, 139, 26, 26, 26, 26, 0, 0, 0, 0, 148, 148, 148, 148, 148, + 148, 80, 80, 85, 225, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 138, 138, 138, 138, 0, 0, 0, 0, - 0, 0, 0, 0, 139, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0, 0, + 0, 139, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 48, 48, 48, 48, 48, 48, 83, + 83, 83, 48, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 48, 48, 48, 48, 48, 48, - 83, 83, 83, 48, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 86, - 86, 86, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 139, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 170, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 86, 86, + 86, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 139, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, - 0, 0, 135, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, + 135, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, - 139, 139, 135, 135, 135, 135, 139, 139, 135, 139, 139, 139, 175, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, 53, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 139, + 139, 135, 135, 135, 135, 139, 139, 135, 139, 139, 139, 175, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, 53, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 0, 0, 0, 0, 83, 83, 48, 48, 48, 48, 48, 135, 53, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, + 135, 135, 135, 139, 139, 135, 135, 139, 139, 135, 135, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 48, 48, 135, 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 0, 0, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 83, 83, 83, 83, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, + 48, 48, 48, 48, 48, 80, 80, 80, 48, 139, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 139, 139, 135, 135, - 139, 139, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 135, 48, 48, - 48, 48, 48, 48, 48, 48, 135, 139, 0, 0, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 0, 0, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, 80, 80, 80, - 48, 139, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 81, - 48, 81, 81, 86, 48, 48, 81, 81, 48, 48, 48, 48, 48, 81, 81, 48, 81, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 48, 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, - 135, 139, 139, 83, 83, 48, 53, 53, 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, - 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, - 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 81, 48, 81, 81, 86, 48, 48, 81, 81, + 48, 48, 48, 48, 48, 81, 81, 48, 81, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 53, 83, 83, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, 135, 139, 139, 83, 83, 48, 53, + 53, 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, + 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 271, 51, 51, 51, 51, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 139, 139, 135, 139, 139, 135, 139, 139, 83, 139, - 142, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, - 0, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 135, 139, 139, + 135, 139, 139, 83, 139, 142, 0, 0, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 0, 0, 0, 0, 0, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, @@ -2079,12 +2202,12 @@ static unsigned short index2[] = { 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 272, 272, 272, 272, 272, 272, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, @@ -2093,7 +2216,8 @@ static unsigned short index2[] = { 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 273, 273, 273, 273, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, @@ -2102,8 +2226,7 @@ static unsigned short index2[] = { 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 273, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, @@ -2113,36 +2236,37 @@ static unsigned short index2[] = { 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 170, 170, 274, 170, 274, 170, 170, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 170, 274, 170, 274, 170, 170, 274, 274, 170, 170, 170, + 274, 274, 274, 274, 274, 170, 170, 274, 170, 274, 170, 170, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 170, 274, 170, 274, 170, 170, + 274, 274, 170, 170, 170, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 0, 0, 274, + 274, 274, 274, 0, 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, - 35, 35, 35, 35, 0, 0, 0, 0, 0, 275, 276, 275, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 215, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 0, 275, 275, 275, 275, 275, 0, 275, 0, 275, 275, 0, - 275, 275, 0, 275, 275, 275, 275, 275, 275, 275, 275, 275, 277, 131, 131, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 275, 276, 275, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 215, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 0, 275, 275, 275, 275, 275, + 0, 275, 0, 275, 275, 0, 275, 275, 0, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 277, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 278, 278, - 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, + 131, 131, 131, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, @@ -2158,27 +2282,28 @@ static unsigned short index2[] = { 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 279, 195, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 195, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, + 131, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 280, 26, 0, 0, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 281, 281, 281, 281, 281, 281, + 281, 282, 283, 281, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 86, 86, + 86, 86, 86, 86, 86, 0, 0, 281, 284, 284, 285, 285, 282, 283, 282, 283, + 282, 283, 282, 283, 282, 283, 282, 283, 282, 283, 282, 283, 247, 247, + 282, 283, 281, 281, 281, 281, 285, 285, 285, 286, 281, 286, 0, 281, 286, + 281, 281, 284, 287, 288, 287, 288, 287, 288, 289, 281, 281, 290, 291, + 292, 292, 293, 0, 281, 294, 289, 281, 0, 0, 0, 0, 131, 131, 131, 118, + 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 280, 26, 0, 0, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 281, 281, 281, 281, 281, 281, 281, 282, 283, 281, 0, 0, - 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, - 284, 284, 285, 285, 282, 283, 282, 283, 282, 283, 282, 283, 282, 283, - 282, 283, 282, 283, 282, 283, 247, 247, 282, 283, 281, 281, 281, 281, - 285, 285, 285, 286, 281, 286, 0, 281, 286, 281, 281, 284, 287, 288, 287, - 288, 287, 288, 289, 281, 281, 290, 291, 292, 292, 293, 0, 281, 294, 289, - 281, 0, 0, 0, 0, 131, 131, 131, 118, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, @@ -2186,379 +2311,517 @@ static unsigned short index2[] = { 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 0, 0, 174, 0, 295, 295, 296, 297, 296, 295, 295, 298, - 299, 295, 300, 301, 302, 301, 301, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 301, 295, 304, 305, 304, 295, 295, 306, 306, 306, 306, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 174, 0, 295, 295, + 296, 297, 296, 295, 295, 298, 299, 295, 300, 301, 302, 301, 301, 303, + 303, 303, 303, 303, 303, 303, 303, 303, 303, 301, 295, 304, 305, 304, + 295, 295, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 298, 295, 299, 307, 308, 307, + 298, 295, 299, 307, 308, 307, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 298, 305, - 299, 305, 298, 299, 310, 311, 312, 310, 310, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 314, 313, 313, 313, 313, 313, 313, 313, 313, + 309, 309, 309, 309, 298, 305, 299, 305, 298, 299, 310, 311, 312, 310, + 310, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 314, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, 313, 314, 314, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 0, - 0, 0, 313, 313, 313, 313, 313, 313, 0, 0, 313, 313, 313, 313, 313, 313, - 0, 0, 313, 313, 313, 313, 313, 313, 0, 0, 313, 313, 313, 0, 0, 0, 297, - 297, 305, 307, 315, 297, 297, 0, 316, 317, 317, 317, 317, 316, 316, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 318, 318, 318, 26, 30, 0, 0, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, + 313, 314, 314, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 0, 0, 0, 313, 313, 313, 313, 313, 313, 0, + 0, 313, 313, 313, 313, 313, 313, 0, 0, 313, 313, 313, 313, 313, 313, 0, + 0, 313, 313, 313, 0, 0, 0, 297, 297, 305, 307, 315, 297, 297, 0, 316, + 317, 317, 317, 317, 316, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 318, + 318, 26, 30, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 0, 0, 0, 0, 83, 138, 83, 0, 0, 0, 0, 148, 148, 148, 148, 148, 148, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 83, 138, 83, 0, 0, + 0, 0, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 319, 319, 319, 319, 319, 319, 319, 319, 319, + 148, 148, 148, 148, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 153, 153, 153, 153, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 153, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 153, 153, 153, 153, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 153, 153, + 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 86, 0, 0, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, + 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 148, 148, + 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 173, 48, 48, 48, 48, 48, 48, 48, + 48, 173, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 173, 48, - 48, 48, 48, 48, 48, 48, 48, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 0, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, - 48, 83, 173, 173, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 83, 173, 173, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 0, 0, 107, 0, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 0, + 0, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 0, 107, 107, 0, 0, 0, 107, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 0, 107, 107, 0, 0, 0, 107, 0, 0, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 0, 104, 321, 321, 321, 321, 321, 321, 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 0, 104, 320, 320, 320, 320, 320, 320, 320, 320, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 322, 322, 321, 321, 321, + 321, 321, 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 321, 321, 321, + 321, 321, 321, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 320, 320, 320, 320, 320, - 320, 0, 0, 0, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 321, 321, 321, 321, 321, 321, 0, 0, 0, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, - 0, 0, 0, 0, 0, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 107, 135, 135, 135, 0, 135, 135, 0, 0, 0, 0, 0, 135, 86, 135, 81, 107, - 107, 107, 107, 0, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 135, 135, 135, 0, + 135, 135, 0, 0, 0, 0, 0, 135, 86, 135, 81, 107, 107, 107, 107, 0, 107, + 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 0, 0, 0, 0, 81, 176, 86, 0, 0, 0, 0, 142, 321, 321, 321, 321, 321, + 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 81, 176, 86, 0, 0, 0, 0, 142, - 320, 320, 320, 320, 320, 320, 320, 320, 0, 0, 0, 0, 0, 0, 0, 0, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 321, 321, 104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 320, 320, - 104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 321, 321, 321, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 322, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 81, 86, + 0, 0, 0, 0, 321, 321, 321, 321, 321, 104, 104, 104, 104, 104, 104, 104, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, - 138, 138, 138, 138, 138, 138, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 0, 0, 320, 320, 320, 320, 320, 320, 320, 320, 107, 107, 107, 107, + 107, 107, 107, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 0, 0, 0, 0, 0, 320, 320, 320, 320, 320, 320, 320, 320, 107, 107, + 107, 107, 107, 107, 107, 0, 0, 321, 321, 321, 321, 321, 321, 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 321, 321, 321, 321, 321, 321, + 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 104, 104, 104, 104, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 321, 321, 321, 321, 321, 321, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 0, 139, 135, 139, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 323, 323, 323, + 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 0, 139, + 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 142, 83, 83, 83, 83, 83, 83, - 83, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 140, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, 139, 139, 139, 135, - 135, 135, 135, 139, 139, 142, 141, 83, 83, 188, 83, 83, 83, 83, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, - 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, - 0, 81, 81, 81, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 142, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 135, 135, 139, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, + 48, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, + 48, 48, 48, 139, 139, 139, 135, 135, 135, 135, 139, 139, 142, 141, 83, + 83, 188, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 149, 135, 135, 135, 135, 139, 135, 150, 150, 135, 135, - 135, 142, 142, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 83, - 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 139, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 81, 81, 81, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 149, 135, 135, + 135, 135, 139, 135, 150, 150, 135, 135, 135, 142, 142, 0, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 145, 83, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 139, 175, 48, 48, 48, 48, 83, 83, 83, 83, - 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 139, 175, 48, 48, 48, 48, 83, 83, 83, + 83, 0, 0, 0, 0, 83, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 48, 0, 0, 0, 0, 0, 0, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, + 135, 139, 139, 135, 175, 145, 135, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, - 139, 135, 139, 139, 135, 135, 135, 135, 135, 135, 175, 145, 0, 0, 0, 0, - 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 135, 139, 139, 139, 135, 135, 135, 135, 135, 135, 145, 142, + 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, + 0, 0, 0, 0, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, + 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, + 48, 48, 48, 48, 0, 0, 145, 48, 146, 139, 135, 139, 139, 139, 139, 0, 0, + 139, 139, 0, 0, 147, 147, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, + 0, 0, 48, 48, 48, 48, 48, 139, 139, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, + 0, 0, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 146, 139, 139, 135, 135, 135, 135, + 135, 135, 139, 149, 147, 147, 146, 147, 135, 135, 139, 142, 145, 48, 48, + 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 146, 139, 139, 135, 135, 135, 135, 0, 0, 139, + 139, 147, 147, 135, 135, 139, 142, 145, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, + 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, 139, 139, 135, 139, + 142, 135, 83, 83, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 135, 139, 139, 135, 135, 135, + 135, 135, 135, 175, 145, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, + 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, - 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 0, 83, + 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 176, 176, 176, 176, 176, 83, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 81, + 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 80, 80, 80, 80, 53, 53, 53, + 53, 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 0, 148, 148, 148, 148, 148, 148, 148, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 139, 139, 139, 139, 139, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 135, 135, 135, 135, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 80, 135, + 176, 83, 174, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 322, 322, 322, 322, 322, 322, 322, 323, 323, 176, 176, 176, 80, 80, 80, - 324, 323, 323, 323, 323, 323, 174, 174, 174, 174, 174, 174, 174, 174, 86, - 86, 86, 86, 86, 86, 86, 86, 80, 80, 81, 81, 81, 81, 81, 86, 86, 80, 80, + 80, 80, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 322, 322, 322, 322, 322, 322, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 80, 80, 80, 80, 80, 80, 324, 324, 324, 324, 324, 324, 324, 325, 325, 176, + 176, 176, 80, 80, 80, 326, 325, 325, 325, 325, 325, 174, 174, 174, 174, + 174, 174, 174, 174, 86, 86, 86, 86, 86, 86, 86, 86, 80, 80, 81, 81, 81, + 81, 81, 86, 86, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, + 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 324, 324, + 324, 324, 324, 324, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 81, 81, 81, 26, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 81, + 81, 81, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 0, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 0, - 49, 49, 0, 0, 49, 0, 0, 49, 49, 0, 0, 49, 49, 49, 49, 0, 49, 49, 49, 49, - 49, 49, 49, 49, 35, 35, 35, 35, 0, 35, 0, 35, 35, 35, 35, 35, 35, 35, 0, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 0, 49, 49, 49, 49, 0, 0, 49, - 49, 49, 49, 49, 49, 49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 0, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 49, 49, 0, 49, 49, 49, 49, 0, 49, 49, 49, 49, 49, 0, - 49, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 49, 0, 49, 49, 0, 0, 49, 0, 0, 49, 49, 0, 0, 49, + 49, 49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 0, 35, 0, + 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 49, 0, 49, 49, 49, 49, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 0, 49, 49, + 49, 49, 49, 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 0, 49, + 49, 49, 49, 0, 49, 49, 49, 49, 49, 0, 49, 0, 0, 0, 49, 49, 49, 49, 49, + 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 325, + 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 327, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, + 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 327, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 327, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 325, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 49, 49, 49, 327, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 325, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 49, 49, 49, 49, 49, 49, 49, 327, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, - 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 325, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 325, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 35, 0, 0, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, - 326, 326, 326, 326, 326, 326, 131, 131, 131, 131, 0, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, 131, 0, 131, 0, 0, - 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, 131, - 131, 131, 0, 131, 0, 131, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 131, 0, 131, - 0, 131, 0, 131, 131, 131, 0, 131, 131, 0, 131, 0, 0, 131, 0, 131, 0, 131, - 0, 131, 0, 131, 0, 131, 131, 0, 131, 0, 0, 131, 131, 131, 131, 0, 131, - 131, 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 0, 131, 131, 131, - 131, 0, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 0, 131, 131, 131, 131, 131, 0, + 35, 35, 35, 35, 49, 35, 0, 0, 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 0, 0, 321, 321, 321, 321, 321, 321, 321, 321, 321, 86, 86, 86, 86, + 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, + 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 131, 0, 131, 131, 0, 131, 0, 0, 131, 0, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 0, 131, 131, 131, 131, 0, 131, 0, 131, 0, 0, 0, 0, 0, + 0, 131, 0, 0, 0, 0, 131, 0, 131, 0, 131, 0, 131, 131, 131, 0, 131, 131, + 0, 131, 0, 0, 131, 0, 131, 0, 131, 0, 131, 0, 131, 0, 131, 131, 0, 131, + 0, 0, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 0, 131, + 131, 131, 131, 0, 131, 131, 131, 131, 0, 131, 0, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 0, + 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 0, 0, 0, 0, 0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 153, 153, 0, 0, + 0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 327, 0, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 329, 0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 222, 222, 0, 0, 0, 0, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 241, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 0, + 241, 241, 241, 241, 241, 241, 241, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 222, 222, 0, 0, 0, 0, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 241, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 268, 268, 268, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 268, 268, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 0, 0, 0, 0, 0, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 0, 0, 0, 0, 0, 0, 0, 268, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 0, 0, 0, 0, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 0, 0, + 0, 0, 0, 0, 268, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, - 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, - 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 0, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, @@ -2567,76 +2830,103 @@ static unsigned short index2[] = { 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 0, 0, 0, 0, 0, 0, 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 274, 274, 274, 274, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 174, 174, 174, 174, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, 174, 174, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, @@ -2649,8 +2939,8 @@ static unsigned short index2[] = { 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, @@ -2659,7 +2949,7 @@ static unsigned short index2[] = { 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 0, 0, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 0, 0, }; /* decomposition data */ @@ -3146,359 +3436,355 @@ static unsigned int decomp_data[] = { 50, 49, 26085, 770, 50, 50, 26085, 770, 50, 51, 26085, 770, 50, 52, 26085, 770, 50, 53, 26085, 770, 50, 54, 26085, 770, 50, 55, 26085, 770, 50, 56, 26085, 770, 50, 57, 26085, 770, 51, 48, 26085, 770, 51, 49, - 26085, 778, 103, 97, 108, 259, 42863, 259, 294, 259, 339, 256, 35912, - 256, 26356, 256, 36554, 256, 36040, 256, 28369, 256, 20018, 256, 21477, - 256, 40860, 256, 40860, 256, 22865, 256, 37329, 256, 21895, 256, 22856, - 256, 25078, 256, 30313, 256, 32645, 256, 34367, 256, 34746, 256, 35064, - 256, 37007, 256, 27138, 256, 27931, 256, 28889, 256, 29662, 256, 33853, - 256, 37226, 256, 39409, 256, 20098, 256, 21365, 256, 27396, 256, 29211, - 256, 34349, 256, 40478, 256, 23888, 256, 28651, 256, 34253, 256, 35172, - 256, 25289, 256, 33240, 256, 34847, 256, 24266, 256, 26391, 256, 28010, - 256, 29436, 256, 37070, 256, 20358, 256, 20919, 256, 21214, 256, 25796, - 256, 27347, 256, 29200, 256, 30439, 256, 32769, 256, 34310, 256, 34396, - 256, 36335, 256, 38706, 256, 39791, 256, 40442, 256, 30860, 256, 31103, - 256, 32160, 256, 33737, 256, 37636, 256, 40575, 256, 35542, 256, 22751, - 256, 24324, 256, 31840, 256, 32894, 256, 29282, 256, 30922, 256, 36034, - 256, 38647, 256, 22744, 256, 23650, 256, 27155, 256, 28122, 256, 28431, - 256, 32047, 256, 32311, 256, 38475, 256, 21202, 256, 32907, 256, 20956, - 256, 20940, 256, 31260, 256, 32190, 256, 33777, 256, 38517, 256, 35712, - 256, 25295, 256, 27138, 256, 35582, 256, 20025, 256, 23527, 256, 24594, - 256, 29575, 256, 30064, 256, 21271, 256, 30971, 256, 20415, 256, 24489, - 256, 19981, 256, 27852, 256, 25976, 256, 32034, 256, 21443, 256, 22622, - 256, 30465, 256, 33865, 256, 35498, 256, 27578, 256, 36784, 256, 27784, - 256, 25342, 256, 33509, 256, 25504, 256, 30053, 256, 20142, 256, 20841, - 256, 20937, 256, 26753, 256, 31975, 256, 33391, 256, 35538, 256, 37327, - 256, 21237, 256, 21570, 256, 22899, 256, 24300, 256, 26053, 256, 28670, - 256, 31018, 256, 38317, 256, 39530, 256, 40599, 256, 40654, 256, 21147, - 256, 26310, 256, 27511, 256, 36706, 256, 24180, 256, 24976, 256, 25088, - 256, 25754, 256, 28451, 256, 29001, 256, 29833, 256, 31178, 256, 32244, - 256, 32879, 256, 36646, 256, 34030, 256, 36899, 256, 37706, 256, 21015, - 256, 21155, 256, 21693, 256, 28872, 256, 35010, 256, 35498, 256, 24265, - 256, 24565, 256, 25467, 256, 27566, 256, 31806, 256, 29557, 256, 20196, - 256, 22265, 256, 23527, 256, 23994, 256, 24604, 256, 29618, 256, 29801, - 256, 32666, 256, 32838, 256, 37428, 256, 38646, 256, 38728, 256, 38936, - 256, 20363, 256, 31150, 256, 37300, 256, 38584, 256, 24801, 256, 20102, - 256, 20698, 256, 23534, 256, 23615, 256, 26009, 256, 27138, 256, 29134, - 256, 30274, 256, 34044, 256, 36988, 256, 40845, 256, 26248, 256, 38446, - 256, 21129, 256, 26491, 256, 26611, 256, 27969, 256, 28316, 256, 29705, - 256, 30041, 256, 30827, 256, 32016, 256, 39006, 256, 20845, 256, 25134, - 256, 38520, 256, 20523, 256, 23833, 256, 28138, 256, 36650, 256, 24459, - 256, 24900, 256, 26647, 256, 29575, 256, 38534, 256, 21033, 256, 21519, - 256, 23653, 256, 26131, 256, 26446, 256, 26792, 256, 27877, 256, 29702, - 256, 30178, 256, 32633, 256, 35023, 256, 35041, 256, 37324, 256, 38626, - 256, 21311, 256, 28346, 256, 21533, 256, 29136, 256, 29848, 256, 34298, - 256, 38563, 256, 40023, 256, 40607, 256, 26519, 256, 28107, 256, 33256, - 256, 31435, 256, 31520, 256, 31890, 256, 29376, 256, 28825, 256, 35672, - 256, 20160, 256, 33590, 256, 21050, 256, 20999, 256, 24230, 256, 25299, - 256, 31958, 256, 23429, 256, 27934, 256, 26292, 256, 36667, 256, 34892, - 256, 38477, 256, 35211, 256, 24275, 256, 20800, 256, 21952, 256, 22618, - 256, 26228, 256, 20958, 256, 29482, 256, 30410, 256, 31036, 256, 31070, - 256, 31077, 256, 31119, 256, 38742, 256, 31934, 256, 32701, 256, 34322, - 256, 35576, 256, 36920, 256, 37117, 256, 39151, 256, 39164, 256, 39208, - 256, 40372, 256, 37086, 256, 38583, 256, 20398, 256, 20711, 256, 20813, - 256, 21193, 256, 21220, 256, 21329, 256, 21917, 256, 22022, 256, 22120, - 256, 22592, 256, 22696, 256, 23652, 256, 23662, 256, 24724, 256, 24936, - 256, 24974, 256, 25074, 256, 25935, 256, 26082, 256, 26257, 256, 26757, - 256, 28023, 256, 28186, 256, 28450, 256, 29038, 256, 29227, 256, 29730, - 256, 30865, 256, 31038, 256, 31049, 256, 31048, 256, 31056, 256, 31062, - 256, 31069, 256, 31117, 256, 31118, 256, 31296, 256, 31361, 256, 31680, - 256, 32244, 256, 32265, 256, 32321, 256, 32626, 256, 32773, 256, 33261, - 256, 33401, 256, 33401, 256, 33879, 256, 35088, 256, 35222, 256, 35585, - 256, 35641, 256, 36051, 256, 36104, 256, 36790, 256, 36920, 256, 38627, - 256, 38911, 256, 38971, 256, 24693, 256, 148206, 256, 33304, 256, 20006, - 256, 20917, 256, 20840, 256, 20352, 256, 20805, 256, 20864, 256, 21191, - 256, 21242, 256, 21917, 256, 21845, 256, 21913, 256, 21986, 256, 22618, - 256, 22707, 256, 22852, 256, 22868, 256, 23138, 256, 23336, 256, 24274, - 256, 24281, 256, 24425, 256, 24493, 256, 24792, 256, 24910, 256, 24840, - 256, 24974, 256, 24928, 256, 25074, 256, 25140, 256, 25540, 256, 25628, - 256, 25682, 256, 25942, 256, 26228, 256, 26391, 256, 26395, 256, 26454, - 256, 27513, 256, 27578, 256, 27969, 256, 28379, 256, 28363, 256, 28450, - 256, 28702, 256, 29038, 256, 30631, 256, 29237, 256, 29359, 256, 29482, - 256, 29809, 256, 29958, 256, 30011, 256, 30237, 256, 30239, 256, 30410, - 256, 30427, 256, 30452, 256, 30538, 256, 30528, 256, 30924, 256, 31409, - 256, 31680, 256, 31867, 256, 32091, 256, 32244, 256, 32574, 256, 32773, - 256, 33618, 256, 33775, 256, 34681, 256, 35137, 256, 35206, 256, 35222, - 256, 35519, 256, 35576, 256, 35531, 256, 35585, 256, 35582, 256, 35565, - 256, 35641, 256, 35722, 256, 36104, 256, 36664, 256, 36978, 256, 37273, - 256, 37494, 256, 38524, 256, 38627, 256, 38742, 256, 38875, 256, 38911, - 256, 38923, 256, 38971, 256, 39698, 256, 40860, 256, 141386, 256, 141380, - 256, 144341, 256, 15261, 256, 16408, 256, 16441, 256, 152137, 256, - 154832, 256, 163539, 256, 40771, 256, 40846, 514, 102, 102, 514, 102, - 105, 514, 102, 108, 770, 102, 102, 105, 770, 102, 102, 108, 514, 383, - 116, 514, 115, 116, 514, 1396, 1398, 514, 1396, 1381, 514, 1396, 1387, - 514, 1406, 1398, 514, 1396, 1389, 512, 1497, 1460, 512, 1522, 1463, 262, - 1506, 262, 1488, 262, 1491, 262, 1492, 262, 1499, 262, 1500, 262, 1501, - 262, 1512, 262, 1514, 262, 43, 512, 1513, 1473, 512, 1513, 1474, 512, - 64329, 1473, 512, 64329, 1474, 512, 1488, 1463, 512, 1488, 1464, 512, - 1488, 1468, 512, 1489, 1468, 512, 1490, 1468, 512, 1491, 1468, 512, 1492, - 1468, 512, 1493, 1468, 512, 1494, 1468, 512, 1496, 1468, 512, 1497, 1468, - 512, 1498, 1468, 512, 1499, 1468, 512, 1500, 1468, 512, 1502, 1468, 512, - 1504, 1468, 512, 1505, 1468, 512, 1507, 1468, 512, 1508, 1468, 512, 1510, - 1468, 512, 1511, 1468, 512, 1512, 1468, 512, 1513, 1468, 512, 1514, 1468, - 512, 1493, 1465, 512, 1489, 1471, 512, 1499, 1471, 512, 1508, 1471, 514, - 1488, 1500, 267, 1649, 268, 1649, 267, 1659, 268, 1659, 269, 1659, 270, - 1659, 267, 1662, 268, 1662, 269, 1662, 270, 1662, 267, 1664, 268, 1664, - 269, 1664, 270, 1664, 267, 1658, 268, 1658, 269, 1658, 270, 1658, 267, - 1663, 268, 1663, 269, 1663, 270, 1663, 267, 1657, 268, 1657, 269, 1657, - 270, 1657, 267, 1700, 268, 1700, 269, 1700, 270, 1700, 267, 1702, 268, - 1702, 269, 1702, 270, 1702, 267, 1668, 268, 1668, 269, 1668, 270, 1668, - 267, 1667, 268, 1667, 269, 1667, 270, 1667, 267, 1670, 268, 1670, 269, - 1670, 270, 1670, 267, 1671, 268, 1671, 269, 1671, 270, 1671, 267, 1677, - 268, 1677, 267, 1676, 268, 1676, 267, 1678, 268, 1678, 267, 1672, 268, - 1672, 267, 1688, 268, 1688, 267, 1681, 268, 1681, 267, 1705, 268, 1705, - 269, 1705, 270, 1705, 267, 1711, 268, 1711, 269, 1711, 270, 1711, 267, - 1715, 268, 1715, 269, 1715, 270, 1715, 267, 1713, 268, 1713, 269, 1713, - 270, 1713, 267, 1722, 268, 1722, 267, 1723, 268, 1723, 269, 1723, 270, - 1723, 267, 1728, 268, 1728, 267, 1729, 268, 1729, 269, 1729, 270, 1729, - 267, 1726, 268, 1726, 269, 1726, 270, 1726, 267, 1746, 268, 1746, 267, - 1747, 268, 1747, 267, 1709, 268, 1709, 269, 1709, 270, 1709, 267, 1735, - 268, 1735, 267, 1734, 268, 1734, 267, 1736, 268, 1736, 267, 1655, 267, - 1739, 268, 1739, 267, 1733, 268, 1733, 267, 1737, 268, 1737, 267, 1744, - 268, 1744, 269, 1744, 270, 1744, 269, 1609, 270, 1609, 523, 1574, 1575, - 524, 1574, 1575, 523, 1574, 1749, 524, 1574, 1749, 523, 1574, 1608, 524, - 1574, 1608, 523, 1574, 1735, 524, 1574, 1735, 523, 1574, 1734, 524, 1574, - 1734, 523, 1574, 1736, 524, 1574, 1736, 523, 1574, 1744, 524, 1574, 1744, - 525, 1574, 1744, 523, 1574, 1609, 524, 1574, 1609, 525, 1574, 1609, 267, - 1740, 268, 1740, 269, 1740, 270, 1740, 523, 1574, 1580, 523, 1574, 1581, - 523, 1574, 1605, 523, 1574, 1609, 523, 1574, 1610, 523, 1576, 1580, 523, - 1576, 1581, 523, 1576, 1582, 523, 1576, 1605, 523, 1576, 1609, 523, 1576, - 1610, 523, 1578, 1580, 523, 1578, 1581, 523, 1578, 1582, 523, 1578, 1605, - 523, 1578, 1609, 523, 1578, 1610, 523, 1579, 1580, 523, 1579, 1605, 523, - 1579, 1609, 523, 1579, 1610, 523, 1580, 1581, 523, 1580, 1605, 523, 1581, - 1580, 523, 1581, 1605, 523, 1582, 1580, 523, 1582, 1581, 523, 1582, 1605, - 523, 1587, 1580, 523, 1587, 1581, 523, 1587, 1582, 523, 1587, 1605, 523, - 1589, 1581, 523, 1589, 1605, 523, 1590, 1580, 523, 1590, 1581, 523, 1590, - 1582, 523, 1590, 1605, 523, 1591, 1581, 523, 1591, 1605, 523, 1592, 1605, - 523, 1593, 1580, 523, 1593, 1605, 523, 1594, 1580, 523, 1594, 1605, 523, - 1601, 1580, 523, 1601, 1581, 523, 1601, 1582, 523, 1601, 1605, 523, 1601, - 1609, 523, 1601, 1610, 523, 1602, 1581, 523, 1602, 1605, 523, 1602, 1609, - 523, 1602, 1610, 523, 1603, 1575, 523, 1603, 1580, 523, 1603, 1581, 523, - 1603, 1582, 523, 1603, 1604, 523, 1603, 1605, 523, 1603, 1609, 523, 1603, - 1610, 523, 1604, 1580, 523, 1604, 1581, 523, 1604, 1582, 523, 1604, 1605, - 523, 1604, 1609, 523, 1604, 1610, 523, 1605, 1580, 523, 1605, 1581, 523, - 1605, 1582, 523, 1605, 1605, 523, 1605, 1609, 523, 1605, 1610, 523, 1606, - 1580, 523, 1606, 1581, 523, 1606, 1582, 523, 1606, 1605, 523, 1606, 1609, - 523, 1606, 1610, 523, 1607, 1580, 523, 1607, 1605, 523, 1607, 1609, 523, - 1607, 1610, 523, 1610, 1580, 523, 1610, 1581, 523, 1610, 1582, 523, 1610, - 1605, 523, 1610, 1609, 523, 1610, 1610, 523, 1584, 1648, 523, 1585, 1648, - 523, 1609, 1648, 779, 32, 1612, 1617, 779, 32, 1613, 1617, 779, 32, 1614, - 1617, 779, 32, 1615, 1617, 779, 32, 1616, 1617, 779, 32, 1617, 1648, 524, - 1574, 1585, 524, 1574, 1586, 524, 1574, 1605, 524, 1574, 1606, 524, 1574, - 1609, 524, 1574, 1610, 524, 1576, 1585, 524, 1576, 1586, 524, 1576, 1605, - 524, 1576, 1606, 524, 1576, 1609, 524, 1576, 1610, 524, 1578, 1585, 524, - 1578, 1586, 524, 1578, 1605, 524, 1578, 1606, 524, 1578, 1609, 524, 1578, - 1610, 524, 1579, 1585, 524, 1579, 1586, 524, 1579, 1605, 524, 1579, 1606, - 524, 1579, 1609, 524, 1579, 1610, 524, 1601, 1609, 524, 1601, 1610, 524, - 1602, 1609, 524, 1602, 1610, 524, 1603, 1575, 524, 1603, 1604, 524, 1603, - 1605, 524, 1603, 1609, 524, 1603, 1610, 524, 1604, 1605, 524, 1604, 1609, - 524, 1604, 1610, 524, 1605, 1575, 524, 1605, 1605, 524, 1606, 1585, 524, - 1606, 1586, 524, 1606, 1605, 524, 1606, 1606, 524, 1606, 1609, 524, 1606, - 1610, 524, 1609, 1648, 524, 1610, 1585, 524, 1610, 1586, 524, 1610, 1605, - 524, 1610, 1606, 524, 1610, 1609, 524, 1610, 1610, 525, 1574, 1580, 525, - 1574, 1581, 525, 1574, 1582, 525, 1574, 1605, 525, 1574, 1607, 525, 1576, - 1580, 525, 1576, 1581, 525, 1576, 1582, 525, 1576, 1605, 525, 1576, 1607, - 525, 1578, 1580, 525, 1578, 1581, 525, 1578, 1582, 525, 1578, 1605, 525, - 1578, 1607, 525, 1579, 1605, 525, 1580, 1581, 525, 1580, 1605, 525, 1581, - 1580, 525, 1581, 1605, 525, 1582, 1580, 525, 1582, 1605, 525, 1587, 1580, - 525, 1587, 1581, 525, 1587, 1582, 525, 1587, 1605, 525, 1589, 1581, 525, - 1589, 1582, 525, 1589, 1605, 525, 1590, 1580, 525, 1590, 1581, 525, 1590, - 1582, 525, 1590, 1605, 525, 1591, 1581, 525, 1592, 1605, 525, 1593, 1580, - 525, 1593, 1605, 525, 1594, 1580, 525, 1594, 1605, 525, 1601, 1580, 525, - 1601, 1581, 525, 1601, 1582, 525, 1601, 1605, 525, 1602, 1581, 525, 1602, - 1605, 525, 1603, 1580, 525, 1603, 1581, 525, 1603, 1582, 525, 1603, 1604, - 525, 1603, 1605, 525, 1604, 1580, 525, 1604, 1581, 525, 1604, 1582, 525, - 1604, 1605, 525, 1604, 1607, 525, 1605, 1580, 525, 1605, 1581, 525, 1605, - 1582, 525, 1605, 1605, 525, 1606, 1580, 525, 1606, 1581, 525, 1606, 1582, - 525, 1606, 1605, 525, 1606, 1607, 525, 1607, 1580, 525, 1607, 1605, 525, - 1607, 1648, 525, 1610, 1580, 525, 1610, 1581, 525, 1610, 1582, 525, 1610, - 1605, 525, 1610, 1607, 526, 1574, 1605, 526, 1574, 1607, 526, 1576, 1605, - 526, 1576, 1607, 526, 1578, 1605, 526, 1578, 1607, 526, 1579, 1605, 526, - 1579, 1607, 526, 1587, 1605, 526, 1587, 1607, 526, 1588, 1605, 526, 1588, - 1607, 526, 1603, 1604, 526, 1603, 1605, 526, 1604, 1605, 526, 1606, 1605, - 526, 1606, 1607, 526, 1610, 1605, 526, 1610, 1607, 782, 1600, 1614, 1617, - 782, 1600, 1615, 1617, 782, 1600, 1616, 1617, 523, 1591, 1609, 523, 1591, - 1610, 523, 1593, 1609, 523, 1593, 1610, 523, 1594, 1609, 523, 1594, 1610, - 523, 1587, 1609, 523, 1587, 1610, 523, 1588, 1609, 523, 1588, 1610, 523, - 1581, 1609, 523, 1581, 1610, 523, 1580, 1609, 523, 1580, 1610, 523, 1582, - 1609, 523, 1582, 1610, 523, 1589, 1609, 523, 1589, 1610, 523, 1590, 1609, - 523, 1590, 1610, 523, 1588, 1580, 523, 1588, 1581, 523, 1588, 1582, 523, - 1588, 1605, 523, 1588, 1585, 523, 1587, 1585, 523, 1589, 1585, 523, 1590, - 1585, 524, 1591, 1609, 524, 1591, 1610, 524, 1593, 1609, 524, 1593, 1610, - 524, 1594, 1609, 524, 1594, 1610, 524, 1587, 1609, 524, 1587, 1610, 524, - 1588, 1609, 524, 1588, 1610, 524, 1581, 1609, 524, 1581, 1610, 524, 1580, - 1609, 524, 1580, 1610, 524, 1582, 1609, 524, 1582, 1610, 524, 1589, 1609, - 524, 1589, 1610, 524, 1590, 1609, 524, 1590, 1610, 524, 1588, 1580, 524, - 1588, 1581, 524, 1588, 1582, 524, 1588, 1605, 524, 1588, 1585, 524, 1587, - 1585, 524, 1589, 1585, 524, 1590, 1585, 525, 1588, 1580, 525, 1588, 1581, - 525, 1588, 1582, 525, 1588, 1605, 525, 1587, 1607, 525, 1588, 1607, 525, - 1591, 1605, 526, 1587, 1580, 526, 1587, 1581, 526, 1587, 1582, 526, 1588, - 1580, 526, 1588, 1581, 526, 1588, 1582, 526, 1591, 1605, 526, 1592, 1605, - 524, 1575, 1611, 523, 1575, 1611, 781, 1578, 1580, 1605, 780, 1578, 1581, - 1580, 781, 1578, 1581, 1580, 781, 1578, 1581, 1605, 781, 1578, 1582, - 1605, 781, 1578, 1605, 1580, 781, 1578, 1605, 1581, 781, 1578, 1605, - 1582, 780, 1580, 1605, 1581, 781, 1580, 1605, 1581, 780, 1581, 1605, - 1610, 780, 1581, 1605, 1609, 781, 1587, 1581, 1580, 781, 1587, 1580, - 1581, 780, 1587, 1580, 1609, 780, 1587, 1605, 1581, 781, 1587, 1605, - 1581, 781, 1587, 1605, 1580, 780, 1587, 1605, 1605, 781, 1587, 1605, - 1605, 780, 1589, 1581, 1581, 781, 1589, 1581, 1581, 780, 1589, 1605, - 1605, 780, 1588, 1581, 1605, 781, 1588, 1581, 1605, 780, 1588, 1580, - 1610, 780, 1588, 1605, 1582, 781, 1588, 1605, 1582, 780, 1588, 1605, - 1605, 781, 1588, 1605, 1605, 780, 1590, 1581, 1609, 780, 1590, 1582, - 1605, 781, 1590, 1582, 1605, 780, 1591, 1605, 1581, 781, 1591, 1605, - 1581, 781, 1591, 1605, 1605, 780, 1591, 1605, 1610, 780, 1593, 1580, - 1605, 780, 1593, 1605, 1605, 781, 1593, 1605, 1605, 780, 1593, 1605, - 1609, 780, 1594, 1605, 1605, 780, 1594, 1605, 1610, 780, 1594, 1605, - 1609, 780, 1601, 1582, 1605, 781, 1601, 1582, 1605, 780, 1602, 1605, - 1581, 780, 1602, 1605, 1605, 780, 1604, 1581, 1605, 780, 1604, 1581, - 1610, 780, 1604, 1581, 1609, 781, 1604, 1580, 1580, 780, 1604, 1580, - 1580, 780, 1604, 1582, 1605, 781, 1604, 1582, 1605, 780, 1604, 1605, - 1581, 781, 1604, 1605, 1581, 781, 1605, 1581, 1580, 781, 1605, 1581, - 1605, 780, 1605, 1581, 1610, 781, 1605, 1580, 1581, 781, 1605, 1580, - 1605, 781, 1605, 1582, 1580, 781, 1605, 1582, 1605, 781, 1605, 1580, - 1582, 781, 1607, 1605, 1580, 781, 1607, 1605, 1605, 781, 1606, 1581, - 1605, 780, 1606, 1581, 1609, 780, 1606, 1580, 1605, 781, 1606, 1580, - 1605, 780, 1606, 1580, 1609, 780, 1606, 1605, 1610, 780, 1606, 1605, - 1609, 780, 1610, 1605, 1605, 781, 1610, 1605, 1605, 780, 1576, 1582, - 1610, 780, 1578, 1580, 1610, 780, 1578, 1580, 1609, 780, 1578, 1582, - 1610, 780, 1578, 1582, 1609, 780, 1578, 1605, 1610, 780, 1578, 1605, - 1609, 780, 1580, 1605, 1610, 780, 1580, 1581, 1609, 780, 1580, 1605, - 1609, 780, 1587, 1582, 1609, 780, 1589, 1581, 1610, 780, 1588, 1581, - 1610, 780, 1590, 1581, 1610, 780, 1604, 1580, 1610, 780, 1604, 1605, - 1610, 780, 1610, 1581, 1610, 780, 1610, 1580, 1610, 780, 1610, 1605, - 1610, 780, 1605, 1605, 1610, 780, 1602, 1605, 1610, 780, 1606, 1581, - 1610, 781, 1602, 1605, 1581, 781, 1604, 1581, 1605, 780, 1593, 1605, - 1610, 780, 1603, 1605, 1610, 781, 1606, 1580, 1581, 780, 1605, 1582, - 1610, 781, 1604, 1580, 1605, 780, 1603, 1605, 1605, 780, 1604, 1580, - 1605, 780, 1606, 1580, 1581, 780, 1580, 1581, 1610, 780, 1581, 1580, - 1610, 780, 1605, 1580, 1610, 780, 1601, 1605, 1610, 780, 1576, 1581, - 1610, 781, 1603, 1605, 1605, 781, 1593, 1580, 1605, 781, 1589, 1605, - 1605, 780, 1587, 1582, 1610, 780, 1606, 1580, 1610, 779, 1589, 1604, - 1746, 779, 1602, 1604, 1746, 1035, 1575, 1604, 1604, 1607, 1035, 1575, - 1603, 1576, 1585, 1035, 1605, 1581, 1605, 1583, 1035, 1589, 1604, 1593, - 1605, 1035, 1585, 1587, 1608, 1604, 1035, 1593, 1604, 1610, 1607, 1035, - 1608, 1587, 1604, 1605, 779, 1589, 1604, 1609, 4619, 1589, 1604, 1609, - 32, 1575, 1604, 1604, 1607, 32, 1593, 1604, 1610, 1607, 32, 1608, 1587, - 1604, 1605, 2059, 1580, 1604, 32, 1580, 1604, 1575, 1604, 1607, 1035, - 1585, 1740, 1575, 1604, 265, 44, 265, 12289, 265, 12290, 265, 58, 265, - 59, 265, 33, 265, 63, 265, 12310, 265, 12311, 265, 8230, 265, 8229, 265, - 8212, 265, 8211, 265, 95, 265, 95, 265, 40, 265, 41, 265, 123, 265, 125, - 265, 12308, 265, 12309, 265, 12304, 265, 12305, 265, 12298, 265, 12299, - 265, 12296, 265, 12297, 265, 12300, 265, 12301, 265, 12302, 265, 12303, - 265, 91, 265, 93, 258, 8254, 258, 8254, 258, 8254, 258, 8254, 258, 95, - 258, 95, 258, 95, 271, 44, 271, 12289, 271, 46, 271, 59, 271, 58, 271, - 63, 271, 33, 271, 8212, 271, 40, 271, 41, 271, 123, 271, 125, 271, 12308, - 271, 12309, 271, 35, 271, 38, 271, 42, 271, 43, 271, 45, 271, 60, 271, - 62, 271, 61, 271, 92, 271, 36, 271, 37, 271, 64, 523, 32, 1611, 526, - 1600, 1611, 523, 32, 1612, 523, 32, 1613, 523, 32, 1614, 526, 1600, 1614, - 523, 32, 1615, 526, 1600, 1615, 523, 32, 1616, 526, 1600, 1616, 523, 32, - 1617, 526, 1600, 1617, 523, 32, 1618, 526, 1600, 1618, 267, 1569, 267, - 1570, 268, 1570, 267, 1571, 268, 1571, 267, 1572, 268, 1572, 267, 1573, - 268, 1573, 267, 1574, 268, 1574, 269, 1574, 270, 1574, 267, 1575, 268, - 1575, 267, 1576, 268, 1576, 269, 1576, 270, 1576, 267, 1577, 268, 1577, - 267, 1578, 268, 1578, 269, 1578, 270, 1578, 267, 1579, 268, 1579, 269, - 1579, 270, 1579, 267, 1580, 268, 1580, 269, 1580, 270, 1580, 267, 1581, - 268, 1581, 269, 1581, 270, 1581, 267, 1582, 268, 1582, 269, 1582, 270, - 1582, 267, 1583, 268, 1583, 267, 1584, 268, 1584, 267, 1585, 268, 1585, - 267, 1586, 268, 1586, 267, 1587, 268, 1587, 269, 1587, 270, 1587, 267, - 1588, 268, 1588, 269, 1588, 270, 1588, 267, 1589, 268, 1589, 269, 1589, - 270, 1589, 267, 1590, 268, 1590, 269, 1590, 270, 1590, 267, 1591, 268, - 1591, 269, 1591, 270, 1591, 267, 1592, 268, 1592, 269, 1592, 270, 1592, - 267, 1593, 268, 1593, 269, 1593, 270, 1593, 267, 1594, 268, 1594, 269, - 1594, 270, 1594, 267, 1601, 268, 1601, 269, 1601, 270, 1601, 267, 1602, - 268, 1602, 269, 1602, 270, 1602, 267, 1603, 268, 1603, 269, 1603, 270, - 1603, 267, 1604, 268, 1604, 269, 1604, 270, 1604, 267, 1605, 268, 1605, - 269, 1605, 270, 1605, 267, 1606, 268, 1606, 269, 1606, 270, 1606, 267, - 1607, 268, 1607, 269, 1607, 270, 1607, 267, 1608, 268, 1608, 267, 1609, - 268, 1609, 267, 1610, 268, 1610, 269, 1610, 270, 1610, 523, 1604, 1570, - 524, 1604, 1570, 523, 1604, 1571, 524, 1604, 1571, 523, 1604, 1573, 524, - 1604, 1573, 523, 1604, 1575, 524, 1604, 1575, 264, 33, 264, 34, 264, 35, - 264, 36, 264, 37, 264, 38, 264, 39, 264, 40, 264, 41, 264, 42, 264, 43, - 264, 44, 264, 45, 264, 46, 264, 47, 264, 48, 264, 49, 264, 50, 264, 51, - 264, 52, 264, 53, 264, 54, 264, 55, 264, 56, 264, 57, 264, 58, 264, 59, - 264, 60, 264, 61, 264, 62, 264, 63, 264, 64, 264, 65, 264, 66, 264, 67, - 264, 68, 264, 69, 264, 70, 264, 71, 264, 72, 264, 73, 264, 74, 264, 75, - 264, 76, 264, 77, 264, 78, 264, 79, 264, 80, 264, 81, 264, 82, 264, 83, - 264, 84, 264, 85, 264, 86, 264, 87, 264, 88, 264, 89, 264, 90, 264, 91, - 264, 92, 264, 93, 264, 94, 264, 95, 264, 96, 264, 97, 264, 98, 264, 99, - 264, 100, 264, 101, 264, 102, 264, 103, 264, 104, 264, 105, 264, 106, - 264, 107, 264, 108, 264, 109, 264, 110, 264, 111, 264, 112, 264, 113, - 264, 114, 264, 115, 264, 116, 264, 117, 264, 118, 264, 119, 264, 120, - 264, 121, 264, 122, 264, 123, 264, 124, 264, 125, 264, 126, 264, 10629, - 264, 10630, 272, 12290, 272, 12300, 272, 12301, 272, 12289, 272, 12539, - 272, 12530, 272, 12449, 272, 12451, 272, 12453, 272, 12455, 272, 12457, - 272, 12515, 272, 12517, 272, 12519, 272, 12483, 272, 12540, 272, 12450, - 272, 12452, 272, 12454, 272, 12456, 272, 12458, 272, 12459, 272, 12461, - 272, 12463, 272, 12465, 272, 12467, 272, 12469, 272, 12471, 272, 12473, - 272, 12475, 272, 12477, 272, 12479, 272, 12481, 272, 12484, 272, 12486, - 272, 12488, 272, 12490, 272, 12491, 272, 12492, 272, 12493, 272, 12494, - 272, 12495, 272, 12498, 272, 12501, 272, 12504, 272, 12507, 272, 12510, - 272, 12511, 272, 12512, 272, 12513, 272, 12514, 272, 12516, 272, 12518, - 272, 12520, 272, 12521, 272, 12522, 272, 12523, 272, 12524, 272, 12525, - 272, 12527, 272, 12531, 272, 12441, 272, 12442, 272, 12644, 272, 12593, - 272, 12594, 272, 12595, 272, 12596, 272, 12597, 272, 12598, 272, 12599, - 272, 12600, 272, 12601, 272, 12602, 272, 12603, 272, 12604, 272, 12605, - 272, 12606, 272, 12607, 272, 12608, 272, 12609, 272, 12610, 272, 12611, - 272, 12612, 272, 12613, 272, 12614, 272, 12615, 272, 12616, 272, 12617, - 272, 12618, 272, 12619, 272, 12620, 272, 12621, 272, 12622, 272, 12623, - 272, 12624, 272, 12625, 272, 12626, 272, 12627, 272, 12628, 272, 12629, - 272, 12630, 272, 12631, 272, 12632, 272, 12633, 272, 12634, 272, 12635, - 272, 12636, 272, 12637, 272, 12638, 272, 12639, 272, 12640, 272, 12641, - 272, 12642, 272, 12643, 264, 162, 264, 163, 264, 172, 264, 175, 264, 166, - 264, 165, 264, 8361, 272, 9474, 272, 8592, 272, 8593, 272, 8594, 272, - 8595, 272, 9632, 272, 9675, 512, 69785, 69818, 512, 69787, 69818, 512, - 69797, 69818, 512, 69937, 69927, 512, 69938, 69927, 512, 119127, 119141, - 512, 119128, 119141, 512, 119135, 119150, 512, 119135, 119151, 512, - 119135, 119152, 512, 119135, 119153, 512, 119135, 119154, 512, 119225, - 119141, 512, 119226, 119141, 512, 119227, 119150, 512, 119228, 119150, - 512, 119227, 119151, 512, 119228, 119151, 262, 65, 262, 66, 262, 67, 262, - 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, - 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, - 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, - 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, - 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, - 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, - 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, - 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, - 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, - 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, - 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 105, 262, 106, 262, 107, - 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, - 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, - 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, - 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, - 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, - 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, - 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, + 26085, 778, 103, 97, 108, 259, 1098, 259, 1100, 259, 42863, 259, 294, + 259, 339, 259, 42791, 259, 43831, 259, 619, 259, 43858, 256, 35912, 256, + 26356, 256, 36554, 256, 36040, 256, 28369, 256, 20018, 256, 21477, 256, + 40860, 256, 40860, 256, 22865, 256, 37329, 256, 21895, 256, 22856, 256, + 25078, 256, 30313, 256, 32645, 256, 34367, 256, 34746, 256, 35064, 256, + 37007, 256, 27138, 256, 27931, 256, 28889, 256, 29662, 256, 33853, 256, + 37226, 256, 39409, 256, 20098, 256, 21365, 256, 27396, 256, 29211, 256, + 34349, 256, 40478, 256, 23888, 256, 28651, 256, 34253, 256, 35172, 256, + 25289, 256, 33240, 256, 34847, 256, 24266, 256, 26391, 256, 28010, 256, + 29436, 256, 37070, 256, 20358, 256, 20919, 256, 21214, 256, 25796, 256, + 27347, 256, 29200, 256, 30439, 256, 32769, 256, 34310, 256, 34396, 256, + 36335, 256, 38706, 256, 39791, 256, 40442, 256, 30860, 256, 31103, 256, + 32160, 256, 33737, 256, 37636, 256, 40575, 256, 35542, 256, 22751, 256, + 24324, 256, 31840, 256, 32894, 256, 29282, 256, 30922, 256, 36034, 256, + 38647, 256, 22744, 256, 23650, 256, 27155, 256, 28122, 256, 28431, 256, + 32047, 256, 32311, 256, 38475, 256, 21202, 256, 32907, 256, 20956, 256, + 20940, 256, 31260, 256, 32190, 256, 33777, 256, 38517, 256, 35712, 256, + 25295, 256, 27138, 256, 35582, 256, 20025, 256, 23527, 256, 24594, 256, + 29575, 256, 30064, 256, 21271, 256, 30971, 256, 20415, 256, 24489, 256, + 19981, 256, 27852, 256, 25976, 256, 32034, 256, 21443, 256, 22622, 256, + 30465, 256, 33865, 256, 35498, 256, 27578, 256, 36784, 256, 27784, 256, + 25342, 256, 33509, 256, 25504, 256, 30053, 256, 20142, 256, 20841, 256, + 20937, 256, 26753, 256, 31975, 256, 33391, 256, 35538, 256, 37327, 256, + 21237, 256, 21570, 256, 22899, 256, 24300, 256, 26053, 256, 28670, 256, + 31018, 256, 38317, 256, 39530, 256, 40599, 256, 40654, 256, 21147, 256, + 26310, 256, 27511, 256, 36706, 256, 24180, 256, 24976, 256, 25088, 256, + 25754, 256, 28451, 256, 29001, 256, 29833, 256, 31178, 256, 32244, 256, + 32879, 256, 36646, 256, 34030, 256, 36899, 256, 37706, 256, 21015, 256, + 21155, 256, 21693, 256, 28872, 256, 35010, 256, 35498, 256, 24265, 256, + 24565, 256, 25467, 256, 27566, 256, 31806, 256, 29557, 256, 20196, 256, + 22265, 256, 23527, 256, 23994, 256, 24604, 256, 29618, 256, 29801, 256, + 32666, 256, 32838, 256, 37428, 256, 38646, 256, 38728, 256, 38936, 256, + 20363, 256, 31150, 256, 37300, 256, 38584, 256, 24801, 256, 20102, 256, + 20698, 256, 23534, 256, 23615, 256, 26009, 256, 27138, 256, 29134, 256, + 30274, 256, 34044, 256, 36988, 256, 40845, 256, 26248, 256, 38446, 256, + 21129, 256, 26491, 256, 26611, 256, 27969, 256, 28316, 256, 29705, 256, + 30041, 256, 30827, 256, 32016, 256, 39006, 256, 20845, 256, 25134, 256, + 38520, 256, 20523, 256, 23833, 256, 28138, 256, 36650, 256, 24459, 256, + 24900, 256, 26647, 256, 29575, 256, 38534, 256, 21033, 256, 21519, 256, + 23653, 256, 26131, 256, 26446, 256, 26792, 256, 27877, 256, 29702, 256, + 30178, 256, 32633, 256, 35023, 256, 35041, 256, 37324, 256, 38626, 256, + 21311, 256, 28346, 256, 21533, 256, 29136, 256, 29848, 256, 34298, 256, + 38563, 256, 40023, 256, 40607, 256, 26519, 256, 28107, 256, 33256, 256, + 31435, 256, 31520, 256, 31890, 256, 29376, 256, 28825, 256, 35672, 256, + 20160, 256, 33590, 256, 21050, 256, 20999, 256, 24230, 256, 25299, 256, + 31958, 256, 23429, 256, 27934, 256, 26292, 256, 36667, 256, 34892, 256, + 38477, 256, 35211, 256, 24275, 256, 20800, 256, 21952, 256, 22618, 256, + 26228, 256, 20958, 256, 29482, 256, 30410, 256, 31036, 256, 31070, 256, + 31077, 256, 31119, 256, 38742, 256, 31934, 256, 32701, 256, 34322, 256, + 35576, 256, 36920, 256, 37117, 256, 39151, 256, 39164, 256, 39208, 256, + 40372, 256, 37086, 256, 38583, 256, 20398, 256, 20711, 256, 20813, 256, + 21193, 256, 21220, 256, 21329, 256, 21917, 256, 22022, 256, 22120, 256, + 22592, 256, 22696, 256, 23652, 256, 23662, 256, 24724, 256, 24936, 256, + 24974, 256, 25074, 256, 25935, 256, 26082, 256, 26257, 256, 26757, 256, + 28023, 256, 28186, 256, 28450, 256, 29038, 256, 29227, 256, 29730, 256, + 30865, 256, 31038, 256, 31049, 256, 31048, 256, 31056, 256, 31062, 256, + 31069, 256, 31117, 256, 31118, 256, 31296, 256, 31361, 256, 31680, 256, + 32244, 256, 32265, 256, 32321, 256, 32626, 256, 32773, 256, 33261, 256, + 33401, 256, 33401, 256, 33879, 256, 35088, 256, 35222, 256, 35585, 256, + 35641, 256, 36051, 256, 36104, 256, 36790, 256, 36920, 256, 38627, 256, + 38911, 256, 38971, 256, 24693, 256, 148206, 256, 33304, 256, 20006, 256, + 20917, 256, 20840, 256, 20352, 256, 20805, 256, 20864, 256, 21191, 256, + 21242, 256, 21917, 256, 21845, 256, 21913, 256, 21986, 256, 22618, 256, + 22707, 256, 22852, 256, 22868, 256, 23138, 256, 23336, 256, 24274, 256, + 24281, 256, 24425, 256, 24493, 256, 24792, 256, 24910, 256, 24840, 256, + 24974, 256, 24928, 256, 25074, 256, 25140, 256, 25540, 256, 25628, 256, + 25682, 256, 25942, 256, 26228, 256, 26391, 256, 26395, 256, 26454, 256, + 27513, 256, 27578, 256, 27969, 256, 28379, 256, 28363, 256, 28450, 256, + 28702, 256, 29038, 256, 30631, 256, 29237, 256, 29359, 256, 29482, 256, + 29809, 256, 29958, 256, 30011, 256, 30237, 256, 30239, 256, 30410, 256, + 30427, 256, 30452, 256, 30538, 256, 30528, 256, 30924, 256, 31409, 256, + 31680, 256, 31867, 256, 32091, 256, 32244, 256, 32574, 256, 32773, 256, + 33618, 256, 33775, 256, 34681, 256, 35137, 256, 35206, 256, 35222, 256, + 35519, 256, 35576, 256, 35531, 256, 35585, 256, 35582, 256, 35565, 256, + 35641, 256, 35722, 256, 36104, 256, 36664, 256, 36978, 256, 37273, 256, + 37494, 256, 38524, 256, 38627, 256, 38742, 256, 38875, 256, 38911, 256, + 38923, 256, 38971, 256, 39698, 256, 40860, 256, 141386, 256, 141380, 256, + 144341, 256, 15261, 256, 16408, 256, 16441, 256, 152137, 256, 154832, + 256, 163539, 256, 40771, 256, 40846, 514, 102, 102, 514, 102, 105, 514, + 102, 108, 770, 102, 102, 105, 770, 102, 102, 108, 514, 383, 116, 514, + 115, 116, 514, 1396, 1398, 514, 1396, 1381, 514, 1396, 1387, 514, 1406, + 1398, 514, 1396, 1389, 512, 1497, 1460, 512, 1522, 1463, 262, 1506, 262, + 1488, 262, 1491, 262, 1492, 262, 1499, 262, 1500, 262, 1501, 262, 1512, + 262, 1514, 262, 43, 512, 1513, 1473, 512, 1513, 1474, 512, 64329, 1473, + 512, 64329, 1474, 512, 1488, 1463, 512, 1488, 1464, 512, 1488, 1468, 512, + 1489, 1468, 512, 1490, 1468, 512, 1491, 1468, 512, 1492, 1468, 512, 1493, + 1468, 512, 1494, 1468, 512, 1496, 1468, 512, 1497, 1468, 512, 1498, 1468, + 512, 1499, 1468, 512, 1500, 1468, 512, 1502, 1468, 512, 1504, 1468, 512, + 1505, 1468, 512, 1507, 1468, 512, 1508, 1468, 512, 1510, 1468, 512, 1511, + 1468, 512, 1512, 1468, 512, 1513, 1468, 512, 1514, 1468, 512, 1493, 1465, + 512, 1489, 1471, 512, 1499, 1471, 512, 1508, 1471, 514, 1488, 1500, 267, + 1649, 268, 1649, 267, 1659, 268, 1659, 269, 1659, 270, 1659, 267, 1662, + 268, 1662, 269, 1662, 270, 1662, 267, 1664, 268, 1664, 269, 1664, 270, + 1664, 267, 1658, 268, 1658, 269, 1658, 270, 1658, 267, 1663, 268, 1663, + 269, 1663, 270, 1663, 267, 1657, 268, 1657, 269, 1657, 270, 1657, 267, + 1700, 268, 1700, 269, 1700, 270, 1700, 267, 1702, 268, 1702, 269, 1702, + 270, 1702, 267, 1668, 268, 1668, 269, 1668, 270, 1668, 267, 1667, 268, + 1667, 269, 1667, 270, 1667, 267, 1670, 268, 1670, 269, 1670, 270, 1670, + 267, 1671, 268, 1671, 269, 1671, 270, 1671, 267, 1677, 268, 1677, 267, + 1676, 268, 1676, 267, 1678, 268, 1678, 267, 1672, 268, 1672, 267, 1688, + 268, 1688, 267, 1681, 268, 1681, 267, 1705, 268, 1705, 269, 1705, 270, + 1705, 267, 1711, 268, 1711, 269, 1711, 270, 1711, 267, 1715, 268, 1715, + 269, 1715, 270, 1715, 267, 1713, 268, 1713, 269, 1713, 270, 1713, 267, + 1722, 268, 1722, 267, 1723, 268, 1723, 269, 1723, 270, 1723, 267, 1728, + 268, 1728, 267, 1729, 268, 1729, 269, 1729, 270, 1729, 267, 1726, 268, + 1726, 269, 1726, 270, 1726, 267, 1746, 268, 1746, 267, 1747, 268, 1747, + 267, 1709, 268, 1709, 269, 1709, 270, 1709, 267, 1735, 268, 1735, 267, + 1734, 268, 1734, 267, 1736, 268, 1736, 267, 1655, 267, 1739, 268, 1739, + 267, 1733, 268, 1733, 267, 1737, 268, 1737, 267, 1744, 268, 1744, 269, + 1744, 270, 1744, 269, 1609, 270, 1609, 523, 1574, 1575, 524, 1574, 1575, + 523, 1574, 1749, 524, 1574, 1749, 523, 1574, 1608, 524, 1574, 1608, 523, + 1574, 1735, 524, 1574, 1735, 523, 1574, 1734, 524, 1574, 1734, 523, 1574, + 1736, 524, 1574, 1736, 523, 1574, 1744, 524, 1574, 1744, 525, 1574, 1744, + 523, 1574, 1609, 524, 1574, 1609, 525, 1574, 1609, 267, 1740, 268, 1740, + 269, 1740, 270, 1740, 523, 1574, 1580, 523, 1574, 1581, 523, 1574, 1605, + 523, 1574, 1609, 523, 1574, 1610, 523, 1576, 1580, 523, 1576, 1581, 523, + 1576, 1582, 523, 1576, 1605, 523, 1576, 1609, 523, 1576, 1610, 523, 1578, + 1580, 523, 1578, 1581, 523, 1578, 1582, 523, 1578, 1605, 523, 1578, 1609, + 523, 1578, 1610, 523, 1579, 1580, 523, 1579, 1605, 523, 1579, 1609, 523, + 1579, 1610, 523, 1580, 1581, 523, 1580, 1605, 523, 1581, 1580, 523, 1581, + 1605, 523, 1582, 1580, 523, 1582, 1581, 523, 1582, 1605, 523, 1587, 1580, + 523, 1587, 1581, 523, 1587, 1582, 523, 1587, 1605, 523, 1589, 1581, 523, + 1589, 1605, 523, 1590, 1580, 523, 1590, 1581, 523, 1590, 1582, 523, 1590, + 1605, 523, 1591, 1581, 523, 1591, 1605, 523, 1592, 1605, 523, 1593, 1580, + 523, 1593, 1605, 523, 1594, 1580, 523, 1594, 1605, 523, 1601, 1580, 523, + 1601, 1581, 523, 1601, 1582, 523, 1601, 1605, 523, 1601, 1609, 523, 1601, + 1610, 523, 1602, 1581, 523, 1602, 1605, 523, 1602, 1609, 523, 1602, 1610, + 523, 1603, 1575, 523, 1603, 1580, 523, 1603, 1581, 523, 1603, 1582, 523, + 1603, 1604, 523, 1603, 1605, 523, 1603, 1609, 523, 1603, 1610, 523, 1604, + 1580, 523, 1604, 1581, 523, 1604, 1582, 523, 1604, 1605, 523, 1604, 1609, + 523, 1604, 1610, 523, 1605, 1580, 523, 1605, 1581, 523, 1605, 1582, 523, + 1605, 1605, 523, 1605, 1609, 523, 1605, 1610, 523, 1606, 1580, 523, 1606, + 1581, 523, 1606, 1582, 523, 1606, 1605, 523, 1606, 1609, 523, 1606, 1610, + 523, 1607, 1580, 523, 1607, 1605, 523, 1607, 1609, 523, 1607, 1610, 523, + 1610, 1580, 523, 1610, 1581, 523, 1610, 1582, 523, 1610, 1605, 523, 1610, + 1609, 523, 1610, 1610, 523, 1584, 1648, 523, 1585, 1648, 523, 1609, 1648, + 779, 32, 1612, 1617, 779, 32, 1613, 1617, 779, 32, 1614, 1617, 779, 32, + 1615, 1617, 779, 32, 1616, 1617, 779, 32, 1617, 1648, 524, 1574, 1585, + 524, 1574, 1586, 524, 1574, 1605, 524, 1574, 1606, 524, 1574, 1609, 524, + 1574, 1610, 524, 1576, 1585, 524, 1576, 1586, 524, 1576, 1605, 524, 1576, + 1606, 524, 1576, 1609, 524, 1576, 1610, 524, 1578, 1585, 524, 1578, 1586, + 524, 1578, 1605, 524, 1578, 1606, 524, 1578, 1609, 524, 1578, 1610, 524, + 1579, 1585, 524, 1579, 1586, 524, 1579, 1605, 524, 1579, 1606, 524, 1579, + 1609, 524, 1579, 1610, 524, 1601, 1609, 524, 1601, 1610, 524, 1602, 1609, + 524, 1602, 1610, 524, 1603, 1575, 524, 1603, 1604, 524, 1603, 1605, 524, + 1603, 1609, 524, 1603, 1610, 524, 1604, 1605, 524, 1604, 1609, 524, 1604, + 1610, 524, 1605, 1575, 524, 1605, 1605, 524, 1606, 1585, 524, 1606, 1586, + 524, 1606, 1605, 524, 1606, 1606, 524, 1606, 1609, 524, 1606, 1610, 524, + 1609, 1648, 524, 1610, 1585, 524, 1610, 1586, 524, 1610, 1605, 524, 1610, + 1606, 524, 1610, 1609, 524, 1610, 1610, 525, 1574, 1580, 525, 1574, 1581, + 525, 1574, 1582, 525, 1574, 1605, 525, 1574, 1607, 525, 1576, 1580, 525, + 1576, 1581, 525, 1576, 1582, 525, 1576, 1605, 525, 1576, 1607, 525, 1578, + 1580, 525, 1578, 1581, 525, 1578, 1582, 525, 1578, 1605, 525, 1578, 1607, + 525, 1579, 1605, 525, 1580, 1581, 525, 1580, 1605, 525, 1581, 1580, 525, + 1581, 1605, 525, 1582, 1580, 525, 1582, 1605, 525, 1587, 1580, 525, 1587, + 1581, 525, 1587, 1582, 525, 1587, 1605, 525, 1589, 1581, 525, 1589, 1582, + 525, 1589, 1605, 525, 1590, 1580, 525, 1590, 1581, 525, 1590, 1582, 525, + 1590, 1605, 525, 1591, 1581, 525, 1592, 1605, 525, 1593, 1580, 525, 1593, + 1605, 525, 1594, 1580, 525, 1594, 1605, 525, 1601, 1580, 525, 1601, 1581, + 525, 1601, 1582, 525, 1601, 1605, 525, 1602, 1581, 525, 1602, 1605, 525, + 1603, 1580, 525, 1603, 1581, 525, 1603, 1582, 525, 1603, 1604, 525, 1603, + 1605, 525, 1604, 1580, 525, 1604, 1581, 525, 1604, 1582, 525, 1604, 1605, + 525, 1604, 1607, 525, 1605, 1580, 525, 1605, 1581, 525, 1605, 1582, 525, + 1605, 1605, 525, 1606, 1580, 525, 1606, 1581, 525, 1606, 1582, 525, 1606, + 1605, 525, 1606, 1607, 525, 1607, 1580, 525, 1607, 1605, 525, 1607, 1648, + 525, 1610, 1580, 525, 1610, 1581, 525, 1610, 1582, 525, 1610, 1605, 525, + 1610, 1607, 526, 1574, 1605, 526, 1574, 1607, 526, 1576, 1605, 526, 1576, + 1607, 526, 1578, 1605, 526, 1578, 1607, 526, 1579, 1605, 526, 1579, 1607, + 526, 1587, 1605, 526, 1587, 1607, 526, 1588, 1605, 526, 1588, 1607, 526, + 1603, 1604, 526, 1603, 1605, 526, 1604, 1605, 526, 1606, 1605, 526, 1606, + 1607, 526, 1610, 1605, 526, 1610, 1607, 782, 1600, 1614, 1617, 782, 1600, + 1615, 1617, 782, 1600, 1616, 1617, 523, 1591, 1609, 523, 1591, 1610, 523, + 1593, 1609, 523, 1593, 1610, 523, 1594, 1609, 523, 1594, 1610, 523, 1587, + 1609, 523, 1587, 1610, 523, 1588, 1609, 523, 1588, 1610, 523, 1581, 1609, + 523, 1581, 1610, 523, 1580, 1609, 523, 1580, 1610, 523, 1582, 1609, 523, + 1582, 1610, 523, 1589, 1609, 523, 1589, 1610, 523, 1590, 1609, 523, 1590, + 1610, 523, 1588, 1580, 523, 1588, 1581, 523, 1588, 1582, 523, 1588, 1605, + 523, 1588, 1585, 523, 1587, 1585, 523, 1589, 1585, 523, 1590, 1585, 524, + 1591, 1609, 524, 1591, 1610, 524, 1593, 1609, 524, 1593, 1610, 524, 1594, + 1609, 524, 1594, 1610, 524, 1587, 1609, 524, 1587, 1610, 524, 1588, 1609, + 524, 1588, 1610, 524, 1581, 1609, 524, 1581, 1610, 524, 1580, 1609, 524, + 1580, 1610, 524, 1582, 1609, 524, 1582, 1610, 524, 1589, 1609, 524, 1589, + 1610, 524, 1590, 1609, 524, 1590, 1610, 524, 1588, 1580, 524, 1588, 1581, + 524, 1588, 1582, 524, 1588, 1605, 524, 1588, 1585, 524, 1587, 1585, 524, + 1589, 1585, 524, 1590, 1585, 525, 1588, 1580, 525, 1588, 1581, 525, 1588, + 1582, 525, 1588, 1605, 525, 1587, 1607, 525, 1588, 1607, 525, 1591, 1605, + 526, 1587, 1580, 526, 1587, 1581, 526, 1587, 1582, 526, 1588, 1580, 526, + 1588, 1581, 526, 1588, 1582, 526, 1591, 1605, 526, 1592, 1605, 524, 1575, + 1611, 523, 1575, 1611, 781, 1578, 1580, 1605, 780, 1578, 1581, 1580, 781, + 1578, 1581, 1580, 781, 1578, 1581, 1605, 781, 1578, 1582, 1605, 781, + 1578, 1605, 1580, 781, 1578, 1605, 1581, 781, 1578, 1605, 1582, 780, + 1580, 1605, 1581, 781, 1580, 1605, 1581, 780, 1581, 1605, 1610, 780, + 1581, 1605, 1609, 781, 1587, 1581, 1580, 781, 1587, 1580, 1581, 780, + 1587, 1580, 1609, 780, 1587, 1605, 1581, 781, 1587, 1605, 1581, 781, + 1587, 1605, 1580, 780, 1587, 1605, 1605, 781, 1587, 1605, 1605, 780, + 1589, 1581, 1581, 781, 1589, 1581, 1581, 780, 1589, 1605, 1605, 780, + 1588, 1581, 1605, 781, 1588, 1581, 1605, 780, 1588, 1580, 1610, 780, + 1588, 1605, 1582, 781, 1588, 1605, 1582, 780, 1588, 1605, 1605, 781, + 1588, 1605, 1605, 780, 1590, 1581, 1609, 780, 1590, 1582, 1605, 781, + 1590, 1582, 1605, 780, 1591, 1605, 1581, 781, 1591, 1605, 1581, 781, + 1591, 1605, 1605, 780, 1591, 1605, 1610, 780, 1593, 1580, 1605, 780, + 1593, 1605, 1605, 781, 1593, 1605, 1605, 780, 1593, 1605, 1609, 780, + 1594, 1605, 1605, 780, 1594, 1605, 1610, 780, 1594, 1605, 1609, 780, + 1601, 1582, 1605, 781, 1601, 1582, 1605, 780, 1602, 1605, 1581, 780, + 1602, 1605, 1605, 780, 1604, 1581, 1605, 780, 1604, 1581, 1610, 780, + 1604, 1581, 1609, 781, 1604, 1580, 1580, 780, 1604, 1580, 1580, 780, + 1604, 1582, 1605, 781, 1604, 1582, 1605, 780, 1604, 1605, 1581, 781, + 1604, 1605, 1581, 781, 1605, 1581, 1580, 781, 1605, 1581, 1605, 780, + 1605, 1581, 1610, 781, 1605, 1580, 1581, 781, 1605, 1580, 1605, 781, + 1605, 1582, 1580, 781, 1605, 1582, 1605, 781, 1605, 1580, 1582, 781, + 1607, 1605, 1580, 781, 1607, 1605, 1605, 781, 1606, 1581, 1605, 780, + 1606, 1581, 1609, 780, 1606, 1580, 1605, 781, 1606, 1580, 1605, 780, + 1606, 1580, 1609, 780, 1606, 1605, 1610, 780, 1606, 1605, 1609, 780, + 1610, 1605, 1605, 781, 1610, 1605, 1605, 780, 1576, 1582, 1610, 780, + 1578, 1580, 1610, 780, 1578, 1580, 1609, 780, 1578, 1582, 1610, 780, + 1578, 1582, 1609, 780, 1578, 1605, 1610, 780, 1578, 1605, 1609, 780, + 1580, 1605, 1610, 780, 1580, 1581, 1609, 780, 1580, 1605, 1609, 780, + 1587, 1582, 1609, 780, 1589, 1581, 1610, 780, 1588, 1581, 1610, 780, + 1590, 1581, 1610, 780, 1604, 1580, 1610, 780, 1604, 1605, 1610, 780, + 1610, 1581, 1610, 780, 1610, 1580, 1610, 780, 1610, 1605, 1610, 780, + 1605, 1605, 1610, 780, 1602, 1605, 1610, 780, 1606, 1581, 1610, 781, + 1602, 1605, 1581, 781, 1604, 1581, 1605, 780, 1593, 1605, 1610, 780, + 1603, 1605, 1610, 781, 1606, 1580, 1581, 780, 1605, 1582, 1610, 781, + 1604, 1580, 1605, 780, 1603, 1605, 1605, 780, 1604, 1580, 1605, 780, + 1606, 1580, 1581, 780, 1580, 1581, 1610, 780, 1581, 1580, 1610, 780, + 1605, 1580, 1610, 780, 1601, 1605, 1610, 780, 1576, 1581, 1610, 781, + 1603, 1605, 1605, 781, 1593, 1580, 1605, 781, 1589, 1605, 1605, 780, + 1587, 1582, 1610, 780, 1606, 1580, 1610, 779, 1589, 1604, 1746, 779, + 1602, 1604, 1746, 1035, 1575, 1604, 1604, 1607, 1035, 1575, 1603, 1576, + 1585, 1035, 1605, 1581, 1605, 1583, 1035, 1589, 1604, 1593, 1605, 1035, + 1585, 1587, 1608, 1604, 1035, 1593, 1604, 1610, 1607, 1035, 1608, 1587, + 1604, 1605, 779, 1589, 1604, 1609, 4619, 1589, 1604, 1609, 32, 1575, + 1604, 1604, 1607, 32, 1593, 1604, 1610, 1607, 32, 1608, 1587, 1604, 1605, + 2059, 1580, 1604, 32, 1580, 1604, 1575, 1604, 1607, 1035, 1585, 1740, + 1575, 1604, 265, 44, 265, 12289, 265, 12290, 265, 58, 265, 59, 265, 33, + 265, 63, 265, 12310, 265, 12311, 265, 8230, 265, 8229, 265, 8212, 265, + 8211, 265, 95, 265, 95, 265, 40, 265, 41, 265, 123, 265, 125, 265, 12308, + 265, 12309, 265, 12304, 265, 12305, 265, 12298, 265, 12299, 265, 12296, + 265, 12297, 265, 12300, 265, 12301, 265, 12302, 265, 12303, 265, 91, 265, + 93, 258, 8254, 258, 8254, 258, 8254, 258, 8254, 258, 95, 258, 95, 258, + 95, 271, 44, 271, 12289, 271, 46, 271, 59, 271, 58, 271, 63, 271, 33, + 271, 8212, 271, 40, 271, 41, 271, 123, 271, 125, 271, 12308, 271, 12309, + 271, 35, 271, 38, 271, 42, 271, 43, 271, 45, 271, 60, 271, 62, 271, 61, + 271, 92, 271, 36, 271, 37, 271, 64, 523, 32, 1611, 526, 1600, 1611, 523, + 32, 1612, 523, 32, 1613, 523, 32, 1614, 526, 1600, 1614, 523, 32, 1615, + 526, 1600, 1615, 523, 32, 1616, 526, 1600, 1616, 523, 32, 1617, 526, + 1600, 1617, 523, 32, 1618, 526, 1600, 1618, 267, 1569, 267, 1570, 268, + 1570, 267, 1571, 268, 1571, 267, 1572, 268, 1572, 267, 1573, 268, 1573, + 267, 1574, 268, 1574, 269, 1574, 270, 1574, 267, 1575, 268, 1575, 267, + 1576, 268, 1576, 269, 1576, 270, 1576, 267, 1577, 268, 1577, 267, 1578, + 268, 1578, 269, 1578, 270, 1578, 267, 1579, 268, 1579, 269, 1579, 270, + 1579, 267, 1580, 268, 1580, 269, 1580, 270, 1580, 267, 1581, 268, 1581, + 269, 1581, 270, 1581, 267, 1582, 268, 1582, 269, 1582, 270, 1582, 267, + 1583, 268, 1583, 267, 1584, 268, 1584, 267, 1585, 268, 1585, 267, 1586, + 268, 1586, 267, 1587, 268, 1587, 269, 1587, 270, 1587, 267, 1588, 268, + 1588, 269, 1588, 270, 1588, 267, 1589, 268, 1589, 269, 1589, 270, 1589, + 267, 1590, 268, 1590, 269, 1590, 270, 1590, 267, 1591, 268, 1591, 269, + 1591, 270, 1591, 267, 1592, 268, 1592, 269, 1592, 270, 1592, 267, 1593, + 268, 1593, 269, 1593, 270, 1593, 267, 1594, 268, 1594, 269, 1594, 270, + 1594, 267, 1601, 268, 1601, 269, 1601, 270, 1601, 267, 1602, 268, 1602, + 269, 1602, 270, 1602, 267, 1603, 268, 1603, 269, 1603, 270, 1603, 267, + 1604, 268, 1604, 269, 1604, 270, 1604, 267, 1605, 268, 1605, 269, 1605, + 270, 1605, 267, 1606, 268, 1606, 269, 1606, 270, 1606, 267, 1607, 268, + 1607, 269, 1607, 270, 1607, 267, 1608, 268, 1608, 267, 1609, 268, 1609, + 267, 1610, 268, 1610, 269, 1610, 270, 1610, 523, 1604, 1570, 524, 1604, + 1570, 523, 1604, 1571, 524, 1604, 1571, 523, 1604, 1573, 524, 1604, 1573, + 523, 1604, 1575, 524, 1604, 1575, 264, 33, 264, 34, 264, 35, 264, 36, + 264, 37, 264, 38, 264, 39, 264, 40, 264, 41, 264, 42, 264, 43, 264, 44, + 264, 45, 264, 46, 264, 47, 264, 48, 264, 49, 264, 50, 264, 51, 264, 52, + 264, 53, 264, 54, 264, 55, 264, 56, 264, 57, 264, 58, 264, 59, 264, 60, + 264, 61, 264, 62, 264, 63, 264, 64, 264, 65, 264, 66, 264, 67, 264, 68, + 264, 69, 264, 70, 264, 71, 264, 72, 264, 73, 264, 74, 264, 75, 264, 76, + 264, 77, 264, 78, 264, 79, 264, 80, 264, 81, 264, 82, 264, 83, 264, 84, + 264, 85, 264, 86, 264, 87, 264, 88, 264, 89, 264, 90, 264, 91, 264, 92, + 264, 93, 264, 94, 264, 95, 264, 96, 264, 97, 264, 98, 264, 99, 264, 100, + 264, 101, 264, 102, 264, 103, 264, 104, 264, 105, 264, 106, 264, 107, + 264, 108, 264, 109, 264, 110, 264, 111, 264, 112, 264, 113, 264, 114, + 264, 115, 264, 116, 264, 117, 264, 118, 264, 119, 264, 120, 264, 121, + 264, 122, 264, 123, 264, 124, 264, 125, 264, 126, 264, 10629, 264, 10630, + 272, 12290, 272, 12300, 272, 12301, 272, 12289, 272, 12539, 272, 12530, + 272, 12449, 272, 12451, 272, 12453, 272, 12455, 272, 12457, 272, 12515, + 272, 12517, 272, 12519, 272, 12483, 272, 12540, 272, 12450, 272, 12452, + 272, 12454, 272, 12456, 272, 12458, 272, 12459, 272, 12461, 272, 12463, + 272, 12465, 272, 12467, 272, 12469, 272, 12471, 272, 12473, 272, 12475, + 272, 12477, 272, 12479, 272, 12481, 272, 12484, 272, 12486, 272, 12488, + 272, 12490, 272, 12491, 272, 12492, 272, 12493, 272, 12494, 272, 12495, + 272, 12498, 272, 12501, 272, 12504, 272, 12507, 272, 12510, 272, 12511, + 272, 12512, 272, 12513, 272, 12514, 272, 12516, 272, 12518, 272, 12520, + 272, 12521, 272, 12522, 272, 12523, 272, 12524, 272, 12525, 272, 12527, + 272, 12531, 272, 12441, 272, 12442, 272, 12644, 272, 12593, 272, 12594, + 272, 12595, 272, 12596, 272, 12597, 272, 12598, 272, 12599, 272, 12600, + 272, 12601, 272, 12602, 272, 12603, 272, 12604, 272, 12605, 272, 12606, + 272, 12607, 272, 12608, 272, 12609, 272, 12610, 272, 12611, 272, 12612, + 272, 12613, 272, 12614, 272, 12615, 272, 12616, 272, 12617, 272, 12618, + 272, 12619, 272, 12620, 272, 12621, 272, 12622, 272, 12623, 272, 12624, + 272, 12625, 272, 12626, 272, 12627, 272, 12628, 272, 12629, 272, 12630, + 272, 12631, 272, 12632, 272, 12633, 272, 12634, 272, 12635, 272, 12636, + 272, 12637, 272, 12638, 272, 12639, 272, 12640, 272, 12641, 272, 12642, + 272, 12643, 264, 162, 264, 163, 264, 172, 264, 175, 264, 166, 264, 165, + 264, 8361, 272, 9474, 272, 8592, 272, 8593, 272, 8594, 272, 8595, 272, + 9632, 272, 9675, 512, 69785, 69818, 512, 69787, 69818, 512, 69797, 69818, + 512, 69937, 69927, 512, 69938, 69927, 512, 70471, 70462, 512, 70471, + 70487, 512, 70841, 70842, 512, 70841, 70832, 512, 70841, 70845, 512, + 71096, 71087, 512, 71097, 71087, 512, 119127, 119141, 512, 119128, + 119141, 512, 119135, 119150, 512, 119135, 119151, 512, 119135, 119152, + 512, 119135, 119153, 512, 119135, 119154, 512, 119225, 119141, 512, + 119226, 119141, 512, 119227, 119150, 512, 119228, 119150, 512, 119227, + 119151, 512, 119228, 119151, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, + 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, + 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, + 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, + 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, + 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, + 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, + 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, + 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, + 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, + 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, + 262, 101, 262, 102, 262, 103, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, - 262, 65, 262, 67, 262, 68, 262, 71, 262, 74, 262, 75, 262, 78, 262, 79, - 262, 80, 262, 81, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, - 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 102, 262, - 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, - 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, - 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, - 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, - 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, - 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, - 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, - 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, - 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, - 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 68, 262, 69, 262, 70, - 262, 71, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, + 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, + 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, + 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, + 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, + 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, + 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, + 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, + 262, 67, 262, 68, 262, 71, 262, 74, 262, 75, 262, 78, 262, 79, 262, 80, 262, 81, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, - 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, - 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, - 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, - 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 68, - 262, 69, 262, 70, 262, 71, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, - 262, 79, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, - 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, - 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, - 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, - 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, - 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, - 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, - 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, + 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 102, 262, 104, 262, + 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 112, 262, + 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, + 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, + 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, + 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, + 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, + 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, + 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, + 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, + 262, 121, 262, 122, 262, 65, 262, 66, 262, 68, 262, 69, 262, 70, 262, 71, + 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, + 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 97, + 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, + 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, + 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, + 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 68, 262, 69, + 262, 70, 262, 71, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 79, + 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, @@ -3536,33 +3822,15 @@ static unsigned int decomp_data[] = { 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, - 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, - 305, 262, 567, 262, 913, 262, 914, 262, 915, 262, 916, 262, 917, 262, - 918, 262, 919, 262, 920, 262, 921, 262, 922, 262, 923, 262, 924, 262, - 925, 262, 926, 262, 927, 262, 928, 262, 929, 262, 1012, 262, 931, 262, - 932, 262, 933, 262, 934, 262, 935, 262, 936, 262, 937, 262, 8711, 262, - 945, 262, 946, 262, 947, 262, 948, 262, 949, 262, 950, 262, 951, 262, - 952, 262, 953, 262, 954, 262, 955, 262, 956, 262, 957, 262, 958, 262, - 959, 262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 262, 965, 262, - 966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 262, 977, 262, - 1008, 262, 981, 262, 1009, 262, 982, 262, 913, 262, 914, 262, 915, 262, - 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262, 922, 262, - 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262, 929, 262, - 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262, 936, 262, - 937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 262, 949, 262, - 950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 262, 956, 262, - 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 963, 262, - 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, - 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 913, 262, - 914, 262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, - 921, 262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, - 928, 262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, - 935, 262, 936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, - 948, 262, 949, 262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 262, - 955, 262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, - 962, 262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, - 969, 262, 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, - 982, 262, 913, 262, 914, 262, 915, 262, 916, 262, 917, 262, 918, 262, + 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, + 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, + 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, + 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, + 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, + 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, + 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, + 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 305, 262, + 567, 262, 913, 262, 914, 262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262, 936, 262, 937, 262, 8711, 262, 945, 262, @@ -3578,427 +3846,329 @@ static unsigned int decomp_data[] = { 951, 262, 952, 262, 953, 262, 954, 262, 955, 262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 262, - 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 988, 262, 989, 262, - 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, - 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, - 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, - 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, - 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, - 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, - 56, 262, 57, 262, 1575, 262, 1576, 262, 1580, 262, 1583, 262, 1608, 262, - 1586, 262, 1581, 262, 1591, 262, 1610, 262, 1603, 262, 1604, 262, 1605, - 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, - 1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590, - 262, 1592, 262, 1594, 262, 1646, 262, 1722, 262, 1697, 262, 1647, 262, - 1576, 262, 1580, 262, 1607, 262, 1581, 262, 1610, 262, 1603, 262, 1604, - 262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, - 1602, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1590, 262, 1594, - 262, 1580, 262, 1581, 262, 1610, 262, 1604, 262, 1606, 262, 1587, 262, - 1593, 262, 1589, 262, 1602, 262, 1588, 262, 1582, 262, 1590, 262, 1594, - 262, 1722, 262, 1647, 262, 1576, 262, 1580, 262, 1607, 262, 1581, 262, - 1591, 262, 1610, 262, 1603, 262, 1605, 262, 1606, 262, 1587, 262, 1593, - 262, 1601, 262, 1589, 262, 1602, 262, 1588, 262, 1578, 262, 1579, 262, - 1582, 262, 1590, 262, 1592, 262, 1594, 262, 1646, 262, 1697, 262, 1575, - 262, 1576, 262, 1580, 262, 1583, 262, 1607, 262, 1608, 262, 1586, 262, - 1581, 262, 1591, 262, 1610, 262, 1604, 262, 1605, 262, 1606, 262, 1587, - 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 1585, 262, 1588, 262, - 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590, 262, 1592, 262, 1594, - 262, 1576, 262, 1580, 262, 1583, 262, 1608, 262, 1586, 262, 1581, 262, - 1591, 262, 1610, 262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 1593, - 262, 1601, 262, 1589, 262, 1602, 262, 1585, 262, 1588, 262, 1578, 262, - 1579, 262, 1582, 262, 1584, 262, 1590, 262, 1592, 262, 1594, 514, 48, 46, - 514, 48, 44, 514, 49, 44, 514, 50, 44, 514, 51, 44, 514, 52, 44, 514, 53, - 44, 514, 54, 44, 514, 55, 44, 514, 56, 44, 514, 57, 44, 770, 40, 65, 41, - 770, 40, 66, 41, 770, 40, 67, 41, 770, 40, 68, 41, 770, 40, 69, 41, 770, - 40, 70, 41, 770, 40, 71, 41, 770, 40, 72, 41, 770, 40, 73, 41, 770, 40, - 74, 41, 770, 40, 75, 41, 770, 40, 76, 41, 770, 40, 77, 41, 770, 40, 78, - 41, 770, 40, 79, 41, 770, 40, 80, 41, 770, 40, 81, 41, 770, 40, 82, 41, - 770, 40, 83, 41, 770, 40, 84, 41, 770, 40, 85, 41, 770, 40, 86, 41, 770, - 40, 87, 41, 770, 40, 88, 41, 770, 40, 89, 41, 770, 40, 90, 41, 770, - 12308, 83, 12309, 263, 67, 263, 82, 519, 67, 68, 519, 87, 90, 266, 65, - 266, 66, 266, 67, 266, 68, 266, 69, 266, 70, 266, 71, 266, 72, 266, 73, - 266, 74, 266, 75, 266, 76, 266, 77, 266, 78, 266, 79, 266, 80, 266, 81, - 266, 82, 266, 83, 266, 84, 266, 85, 266, 86, 266, 87, 266, 88, 266, 89, - 266, 90, 522, 72, 86, 522, 77, 86, 522, 83, 68, 522, 83, 83, 778, 80, 80, - 86, 522, 87, 67, 515, 77, 67, 515, 77, 68, 522, 68, 74, 522, 12411, - 12363, 522, 12467, 12467, 266, 12469, 266, 25163, 266, 23383, 266, 21452, - 266, 12487, 266, 20108, 266, 22810, 266, 35299, 266, 22825, 266, 20132, - 266, 26144, 266, 28961, 266, 26009, 266, 21069, 266, 24460, 266, 20877, - 266, 26032, 266, 21021, 266, 32066, 266, 29983, 266, 36009, 266, 22768, - 266, 21561, 266, 28436, 266, 25237, 266, 25429, 266, 19968, 266, 19977, - 266, 36938, 266, 24038, 266, 20013, 266, 21491, 266, 25351, 266, 36208, - 266, 25171, 266, 31105, 266, 31354, 266, 21512, 266, 28288, 266, 26377, - 266, 26376, 266, 30003, 266, 21106, 266, 21942, 770, 12308, 26412, 12309, - 770, 12308, 19977, 12309, 770, 12308, 20108, 12309, 770, 12308, 23433, - 12309, 770, 12308, 28857, 12309, 770, 12308, 25171, 12309, 770, 12308, - 30423, 12309, 770, 12308, 21213, 12309, 770, 12308, 25943, 12309, 263, - 24471, 263, 21487, 256, 20029, 256, 20024, 256, 20033, 256, 131362, 256, - 20320, 256, 20398, 256, 20411, 256, 20482, 256, 20602, 256, 20633, 256, - 20711, 256, 20687, 256, 13470, 256, 132666, 256, 20813, 256, 20820, 256, - 20836, 256, 20855, 256, 132380, 256, 13497, 256, 20839, 256, 20877, 256, - 132427, 256, 20887, 256, 20900, 256, 20172, 256, 20908, 256, 20917, 256, - 168415, 256, 20981, 256, 20995, 256, 13535, 256, 21051, 256, 21062, 256, - 21106, 256, 21111, 256, 13589, 256, 21191, 256, 21193, 256, 21220, 256, - 21242, 256, 21253, 256, 21254, 256, 21271, 256, 21321, 256, 21329, 256, - 21338, 256, 21363, 256, 21373, 256, 21375, 256, 21375, 256, 21375, 256, - 133676, 256, 28784, 256, 21450, 256, 21471, 256, 133987, 256, 21483, 256, - 21489, 256, 21510, 256, 21662, 256, 21560, 256, 21576, 256, 21608, 256, - 21666, 256, 21750, 256, 21776, 256, 21843, 256, 21859, 256, 21892, 256, - 21892, 256, 21913, 256, 21931, 256, 21939, 256, 21954, 256, 22294, 256, - 22022, 256, 22295, 256, 22097, 256, 22132, 256, 20999, 256, 22766, 256, - 22478, 256, 22516, 256, 22541, 256, 22411, 256, 22578, 256, 22577, 256, - 22700, 256, 136420, 256, 22770, 256, 22775, 256, 22790, 256, 22810, 256, - 22818, 256, 22882, 256, 136872, 256, 136938, 256, 23020, 256, 23067, 256, - 23079, 256, 23000, 256, 23142, 256, 14062, 256, 14076, 256, 23304, 256, - 23358, 256, 23358, 256, 137672, 256, 23491, 256, 23512, 256, 23527, 256, - 23539, 256, 138008, 256, 23551, 256, 23558, 256, 24403, 256, 23586, 256, - 14209, 256, 23648, 256, 23662, 256, 23744, 256, 23693, 256, 138724, 256, - 23875, 256, 138726, 256, 23918, 256, 23915, 256, 23932, 256, 24033, 256, - 24034, 256, 14383, 256, 24061, 256, 24104, 256, 24125, 256, 24169, 256, - 14434, 256, 139651, 256, 14460, 256, 24240, 256, 24243, 256, 24246, 256, - 24266, 256, 172946, 256, 24318, 256, 140081, 256, 140081, 256, 33281, - 256, 24354, 256, 24354, 256, 14535, 256, 144056, 256, 156122, 256, 24418, - 256, 24427, 256, 14563, 256, 24474, 256, 24525, 256, 24535, 256, 24569, - 256, 24705, 256, 14650, 256, 14620, 256, 24724, 256, 141012, 256, 24775, - 256, 24904, 256, 24908, 256, 24910, 256, 24908, 256, 24954, 256, 24974, - 256, 25010, 256, 24996, 256, 25007, 256, 25054, 256, 25074, 256, 25078, - 256, 25104, 256, 25115, 256, 25181, 256, 25265, 256, 25300, 256, 25424, - 256, 142092, 256, 25405, 256, 25340, 256, 25448, 256, 25475, 256, 25572, - 256, 142321, 256, 25634, 256, 25541, 256, 25513, 256, 14894, 256, 25705, - 256, 25726, 256, 25757, 256, 25719, 256, 14956, 256, 25935, 256, 25964, - 256, 143370, 256, 26083, 256, 26360, 256, 26185, 256, 15129, 256, 26257, - 256, 15112, 256, 15076, 256, 20882, 256, 20885, 256, 26368, 256, 26268, - 256, 32941, 256, 17369, 256, 26391, 256, 26395, 256, 26401, 256, 26462, - 256, 26451, 256, 144323, 256, 15177, 256, 26618, 256, 26501, 256, 26706, - 256, 26757, 256, 144493, 256, 26766, 256, 26655, 256, 26900, 256, 15261, - 256, 26946, 256, 27043, 256, 27114, 256, 27304, 256, 145059, 256, 27355, - 256, 15384, 256, 27425, 256, 145575, 256, 27476, 256, 15438, 256, 27506, - 256, 27551, 256, 27578, 256, 27579, 256, 146061, 256, 138507, 256, - 146170, 256, 27726, 256, 146620, 256, 27839, 256, 27853, 256, 27751, 256, - 27926, 256, 27966, 256, 28023, 256, 27969, 256, 28009, 256, 28024, 256, - 28037, 256, 146718, 256, 27956, 256, 28207, 256, 28270, 256, 15667, 256, - 28363, 256, 28359, 256, 147153, 256, 28153, 256, 28526, 256, 147294, 256, - 147342, 256, 28614, 256, 28729, 256, 28702, 256, 28699, 256, 15766, 256, - 28746, 256, 28797, 256, 28791, 256, 28845, 256, 132389, 256, 28997, 256, - 148067, 256, 29084, 256, 148395, 256, 29224, 256, 29237, 256, 29264, 256, - 149000, 256, 29312, 256, 29333, 256, 149301, 256, 149524, 256, 29562, - 256, 29579, 256, 16044, 256, 29605, 256, 16056, 256, 16056, 256, 29767, - 256, 29788, 256, 29809, 256, 29829, 256, 29898, 256, 16155, 256, 29988, - 256, 150582, 256, 30014, 256, 150674, 256, 30064, 256, 139679, 256, - 30224, 256, 151457, 256, 151480, 256, 151620, 256, 16380, 256, 16392, - 256, 30452, 256, 151795, 256, 151794, 256, 151833, 256, 151859, 256, - 30494, 256, 30495, 256, 30495, 256, 30538, 256, 16441, 256, 30603, 256, - 16454, 256, 16534, 256, 152605, 256, 30798, 256, 30860, 256, 30924, 256, - 16611, 256, 153126, 256, 31062, 256, 153242, 256, 153285, 256, 31119, - 256, 31211, 256, 16687, 256, 31296, 256, 31306, 256, 31311, 256, 153980, - 256, 154279, 256, 154279, 256, 31470, 256, 16898, 256, 154539, 256, - 31686, 256, 31689, 256, 16935, 256, 154752, 256, 31954, 256, 17056, 256, - 31976, 256, 31971, 256, 32000, 256, 155526, 256, 32099, 256, 17153, 256, - 32199, 256, 32258, 256, 32325, 256, 17204, 256, 156200, 256, 156231, 256, - 17241, 256, 156377, 256, 32634, 256, 156478, 256, 32661, 256, 32762, 256, - 32773, 256, 156890, 256, 156963, 256, 32864, 256, 157096, 256, 32880, - 256, 144223, 256, 17365, 256, 32946, 256, 33027, 256, 17419, 256, 33086, - 256, 23221, 256, 157607, 256, 157621, 256, 144275, 256, 144284, 256, - 33281, 256, 33284, 256, 36766, 256, 17515, 256, 33425, 256, 33419, 256, - 33437, 256, 21171, 256, 33457, 256, 33459, 256, 33469, 256, 33510, 256, - 158524, 256, 33509, 256, 33565, 256, 33635, 256, 33709, 256, 33571, 256, - 33725, 256, 33767, 256, 33879, 256, 33619, 256, 33738, 256, 33740, 256, - 33756, 256, 158774, 256, 159083, 256, 158933, 256, 17707, 256, 34033, - 256, 34035, 256, 34070, 256, 160714, 256, 34148, 256, 159532, 256, 17757, - 256, 17761, 256, 159665, 256, 159954, 256, 17771, 256, 34384, 256, 34396, - 256, 34407, 256, 34409, 256, 34473, 256, 34440, 256, 34574, 256, 34530, - 256, 34681, 256, 34600, 256, 34667, 256, 34694, 256, 17879, 256, 34785, - 256, 34817, 256, 17913, 256, 34912, 256, 34915, 256, 161383, 256, 35031, - 256, 35038, 256, 17973, 256, 35066, 256, 13499, 256, 161966, 256, 162150, - 256, 18110, 256, 18119, 256, 35488, 256, 35565, 256, 35722, 256, 35925, - 256, 162984, 256, 36011, 256, 36033, 256, 36123, 256, 36215, 256, 163631, - 256, 133124, 256, 36299, 256, 36284, 256, 36336, 256, 133342, 256, 36564, - 256, 36664, 256, 165330, 256, 165357, 256, 37012, 256, 37105, 256, 37137, - 256, 165678, 256, 37147, 256, 37432, 256, 37591, 256, 37592, 256, 37500, - 256, 37881, 256, 37909, 256, 166906, 256, 38283, 256, 18837, 256, 38327, - 256, 167287, 256, 18918, 256, 38595, 256, 23986, 256, 38691, 256, 168261, - 256, 168474, 256, 19054, 256, 19062, 256, 38880, 256, 168970, 256, 19122, - 256, 169110, 256, 38923, 256, 38923, 256, 38953, 256, 169398, 256, 39138, - 256, 19251, 256, 39209, 256, 39335, 256, 39362, 256, 39422, 256, 19406, - 256, 170800, 256, 39698, 256, 40000, 256, 40189, 256, 19662, 256, 19693, - 256, 40295, 256, 172238, 256, 19704, 256, 172293, 256, 172558, 256, - 172689, 256, 40635, 256, 19798, 256, 40697, 256, 40702, 256, 40709, 256, - 40719, 256, 40726, 256, 40763, 256, 173568, + 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 913, 262, 914, 262, + 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262, + 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262, + 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262, + 936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 262, + 949, 262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 262, + 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, + 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, + 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, + 913, 262, 914, 262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, + 920, 262, 921, 262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, + 927, 262, 928, 262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, + 934, 262, 935, 262, 936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, + 947, 262, 948, 262, 949, 262, 950, 262, 951, 262, 952, 262, 953, 262, + 954, 262, 955, 262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, + 961, 262, 962, 262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, + 968, 262, 969, 262, 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, + 1009, 262, 982, 262, 913, 262, 914, 262, 915, 262, 916, 262, 917, 262, + 918, 262, 919, 262, 920, 262, 921, 262, 922, 262, 923, 262, 924, 262, + 925, 262, 926, 262, 927, 262, 928, 262, 929, 262, 1012, 262, 931, 262, + 932, 262, 933, 262, 934, 262, 935, 262, 936, 262, 937, 262, 8711, 262, + 945, 262, 946, 262, 947, 262, 948, 262, 949, 262, 950, 262, 951, 262, + 952, 262, 953, 262, 954, 262, 955, 262, 956, 262, 957, 262, 958, 262, + 959, 262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 262, 965, 262, + 966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 262, 977, 262, + 1008, 262, 981, 262, 1009, 262, 982, 262, 988, 262, 989, 262, 48, 262, + 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, + 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, + 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, + 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, + 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, + 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, + 57, 262, 1575, 262, 1576, 262, 1580, 262, 1583, 262, 1608, 262, 1586, + 262, 1581, 262, 1591, 262, 1610, 262, 1603, 262, 1604, 262, 1605, 262, + 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 1585, + 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590, 262, + 1592, 262, 1594, 262, 1646, 262, 1722, 262, 1697, 262, 1647, 262, 1576, + 262, 1580, 262, 1607, 262, 1581, 262, 1610, 262, 1603, 262, 1604, 262, + 1605, 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, + 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1590, 262, 1594, 262, + 1580, 262, 1581, 262, 1610, 262, 1604, 262, 1606, 262, 1587, 262, 1593, + 262, 1589, 262, 1602, 262, 1588, 262, 1582, 262, 1590, 262, 1594, 262, + 1722, 262, 1647, 262, 1576, 262, 1580, 262, 1607, 262, 1581, 262, 1591, + 262, 1610, 262, 1603, 262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, + 1601, 262, 1589, 262, 1602, 262, 1588, 262, 1578, 262, 1579, 262, 1582, + 262, 1590, 262, 1592, 262, 1594, 262, 1646, 262, 1697, 262, 1575, 262, + 1576, 262, 1580, 262, 1583, 262, 1607, 262, 1608, 262, 1586, 262, 1581, + 262, 1591, 262, 1610, 262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, + 1593, 262, 1601, 262, 1589, 262, 1602, 262, 1585, 262, 1588, 262, 1578, + 262, 1579, 262, 1582, 262, 1584, 262, 1590, 262, 1592, 262, 1594, 262, + 1576, 262, 1580, 262, 1583, 262, 1608, 262, 1586, 262, 1581, 262, 1591, + 262, 1610, 262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, + 1601, 262, 1589, 262, 1602, 262, 1585, 262, 1588, 262, 1578, 262, 1579, + 262, 1582, 262, 1584, 262, 1590, 262, 1592, 262, 1594, 514, 48, 46, 514, + 48, 44, 514, 49, 44, 514, 50, 44, 514, 51, 44, 514, 52, 44, 514, 53, 44, + 514, 54, 44, 514, 55, 44, 514, 56, 44, 514, 57, 44, 770, 40, 65, 41, 770, + 40, 66, 41, 770, 40, 67, 41, 770, 40, 68, 41, 770, 40, 69, 41, 770, 40, + 70, 41, 770, 40, 71, 41, 770, 40, 72, 41, 770, 40, 73, 41, 770, 40, 74, + 41, 770, 40, 75, 41, 770, 40, 76, 41, 770, 40, 77, 41, 770, 40, 78, 41, + 770, 40, 79, 41, 770, 40, 80, 41, 770, 40, 81, 41, 770, 40, 82, 41, 770, + 40, 83, 41, 770, 40, 84, 41, 770, 40, 85, 41, 770, 40, 86, 41, 770, 40, + 87, 41, 770, 40, 88, 41, 770, 40, 89, 41, 770, 40, 90, 41, 770, 12308, + 83, 12309, 263, 67, 263, 82, 519, 67, 68, 519, 87, 90, 266, 65, 266, 66, + 266, 67, 266, 68, 266, 69, 266, 70, 266, 71, 266, 72, 266, 73, 266, 74, + 266, 75, 266, 76, 266, 77, 266, 78, 266, 79, 266, 80, 266, 81, 266, 82, + 266, 83, 266, 84, 266, 85, 266, 86, 266, 87, 266, 88, 266, 89, 266, 90, + 522, 72, 86, 522, 77, 86, 522, 83, 68, 522, 83, 83, 778, 80, 80, 86, 522, + 87, 67, 515, 77, 67, 515, 77, 68, 522, 68, 74, 522, 12411, 12363, 522, + 12467, 12467, 266, 12469, 266, 25163, 266, 23383, 266, 21452, 266, 12487, + 266, 20108, 266, 22810, 266, 35299, 266, 22825, 266, 20132, 266, 26144, + 266, 28961, 266, 26009, 266, 21069, 266, 24460, 266, 20877, 266, 26032, + 266, 21021, 266, 32066, 266, 29983, 266, 36009, 266, 22768, 266, 21561, + 266, 28436, 266, 25237, 266, 25429, 266, 19968, 266, 19977, 266, 36938, + 266, 24038, 266, 20013, 266, 21491, 266, 25351, 266, 36208, 266, 25171, + 266, 31105, 266, 31354, 266, 21512, 266, 28288, 266, 26377, 266, 26376, + 266, 30003, 266, 21106, 266, 21942, 770, 12308, 26412, 12309, 770, 12308, + 19977, 12309, 770, 12308, 20108, 12309, 770, 12308, 23433, 12309, 770, + 12308, 28857, 12309, 770, 12308, 25171, 12309, 770, 12308, 30423, 12309, + 770, 12308, 21213, 12309, 770, 12308, 25943, 12309, 263, 24471, 263, + 21487, 256, 20029, 256, 20024, 256, 20033, 256, 131362, 256, 20320, 256, + 20398, 256, 20411, 256, 20482, 256, 20602, 256, 20633, 256, 20711, 256, + 20687, 256, 13470, 256, 132666, 256, 20813, 256, 20820, 256, 20836, 256, + 20855, 256, 132380, 256, 13497, 256, 20839, 256, 20877, 256, 132427, 256, + 20887, 256, 20900, 256, 20172, 256, 20908, 256, 20917, 256, 168415, 256, + 20981, 256, 20995, 256, 13535, 256, 21051, 256, 21062, 256, 21106, 256, + 21111, 256, 13589, 256, 21191, 256, 21193, 256, 21220, 256, 21242, 256, + 21253, 256, 21254, 256, 21271, 256, 21321, 256, 21329, 256, 21338, 256, + 21363, 256, 21373, 256, 21375, 256, 21375, 256, 21375, 256, 133676, 256, + 28784, 256, 21450, 256, 21471, 256, 133987, 256, 21483, 256, 21489, 256, + 21510, 256, 21662, 256, 21560, 256, 21576, 256, 21608, 256, 21666, 256, + 21750, 256, 21776, 256, 21843, 256, 21859, 256, 21892, 256, 21892, 256, + 21913, 256, 21931, 256, 21939, 256, 21954, 256, 22294, 256, 22022, 256, + 22295, 256, 22097, 256, 22132, 256, 20999, 256, 22766, 256, 22478, 256, + 22516, 256, 22541, 256, 22411, 256, 22578, 256, 22577, 256, 22700, 256, + 136420, 256, 22770, 256, 22775, 256, 22790, 256, 22810, 256, 22818, 256, + 22882, 256, 136872, 256, 136938, 256, 23020, 256, 23067, 256, 23079, 256, + 23000, 256, 23142, 256, 14062, 256, 14076, 256, 23304, 256, 23358, 256, + 23358, 256, 137672, 256, 23491, 256, 23512, 256, 23527, 256, 23539, 256, + 138008, 256, 23551, 256, 23558, 256, 24403, 256, 23586, 256, 14209, 256, + 23648, 256, 23662, 256, 23744, 256, 23693, 256, 138724, 256, 23875, 256, + 138726, 256, 23918, 256, 23915, 256, 23932, 256, 24033, 256, 24034, 256, + 14383, 256, 24061, 256, 24104, 256, 24125, 256, 24169, 256, 14434, 256, + 139651, 256, 14460, 256, 24240, 256, 24243, 256, 24246, 256, 24266, 256, + 172946, 256, 24318, 256, 140081, 256, 140081, 256, 33281, 256, 24354, + 256, 24354, 256, 14535, 256, 144056, 256, 156122, 256, 24418, 256, 24427, + 256, 14563, 256, 24474, 256, 24525, 256, 24535, 256, 24569, 256, 24705, + 256, 14650, 256, 14620, 256, 24724, 256, 141012, 256, 24775, 256, 24904, + 256, 24908, 256, 24910, 256, 24908, 256, 24954, 256, 24974, 256, 25010, + 256, 24996, 256, 25007, 256, 25054, 256, 25074, 256, 25078, 256, 25104, + 256, 25115, 256, 25181, 256, 25265, 256, 25300, 256, 25424, 256, 142092, + 256, 25405, 256, 25340, 256, 25448, 256, 25475, 256, 25572, 256, 142321, + 256, 25634, 256, 25541, 256, 25513, 256, 14894, 256, 25705, 256, 25726, + 256, 25757, 256, 25719, 256, 14956, 256, 25935, 256, 25964, 256, 143370, + 256, 26083, 256, 26360, 256, 26185, 256, 15129, 256, 26257, 256, 15112, + 256, 15076, 256, 20882, 256, 20885, 256, 26368, 256, 26268, 256, 32941, + 256, 17369, 256, 26391, 256, 26395, 256, 26401, 256, 26462, 256, 26451, + 256, 144323, 256, 15177, 256, 26618, 256, 26501, 256, 26706, 256, 26757, + 256, 144493, 256, 26766, 256, 26655, 256, 26900, 256, 15261, 256, 26946, + 256, 27043, 256, 27114, 256, 27304, 256, 145059, 256, 27355, 256, 15384, + 256, 27425, 256, 145575, 256, 27476, 256, 15438, 256, 27506, 256, 27551, + 256, 27578, 256, 27579, 256, 146061, 256, 138507, 256, 146170, 256, + 27726, 256, 146620, 256, 27839, 256, 27853, 256, 27751, 256, 27926, 256, + 27966, 256, 28023, 256, 27969, 256, 28009, 256, 28024, 256, 28037, 256, + 146718, 256, 27956, 256, 28207, 256, 28270, 256, 15667, 256, 28363, 256, + 28359, 256, 147153, 256, 28153, 256, 28526, 256, 147294, 256, 147342, + 256, 28614, 256, 28729, 256, 28702, 256, 28699, 256, 15766, 256, 28746, + 256, 28797, 256, 28791, 256, 28845, 256, 132389, 256, 28997, 256, 148067, + 256, 29084, 256, 148395, 256, 29224, 256, 29237, 256, 29264, 256, 149000, + 256, 29312, 256, 29333, 256, 149301, 256, 149524, 256, 29562, 256, 29579, + 256, 16044, 256, 29605, 256, 16056, 256, 16056, 256, 29767, 256, 29788, + 256, 29809, 256, 29829, 256, 29898, 256, 16155, 256, 29988, 256, 150582, + 256, 30014, 256, 150674, 256, 30064, 256, 139679, 256, 30224, 256, + 151457, 256, 151480, 256, 151620, 256, 16380, 256, 16392, 256, 30452, + 256, 151795, 256, 151794, 256, 151833, 256, 151859, 256, 30494, 256, + 30495, 256, 30495, 256, 30538, 256, 16441, 256, 30603, 256, 16454, 256, + 16534, 256, 152605, 256, 30798, 256, 30860, 256, 30924, 256, 16611, 256, + 153126, 256, 31062, 256, 153242, 256, 153285, 256, 31119, 256, 31211, + 256, 16687, 256, 31296, 256, 31306, 256, 31311, 256, 153980, 256, 154279, + 256, 154279, 256, 31470, 256, 16898, 256, 154539, 256, 31686, 256, 31689, + 256, 16935, 256, 154752, 256, 31954, 256, 17056, 256, 31976, 256, 31971, + 256, 32000, 256, 155526, 256, 32099, 256, 17153, 256, 32199, 256, 32258, + 256, 32325, 256, 17204, 256, 156200, 256, 156231, 256, 17241, 256, + 156377, 256, 32634, 256, 156478, 256, 32661, 256, 32762, 256, 32773, 256, + 156890, 256, 156963, 256, 32864, 256, 157096, 256, 32880, 256, 144223, + 256, 17365, 256, 32946, 256, 33027, 256, 17419, 256, 33086, 256, 23221, + 256, 157607, 256, 157621, 256, 144275, 256, 144284, 256, 33281, 256, + 33284, 256, 36766, 256, 17515, 256, 33425, 256, 33419, 256, 33437, 256, + 21171, 256, 33457, 256, 33459, 256, 33469, 256, 33510, 256, 158524, 256, + 33509, 256, 33565, 256, 33635, 256, 33709, 256, 33571, 256, 33725, 256, + 33767, 256, 33879, 256, 33619, 256, 33738, 256, 33740, 256, 33756, 256, + 158774, 256, 159083, 256, 158933, 256, 17707, 256, 34033, 256, 34035, + 256, 34070, 256, 160714, 256, 34148, 256, 159532, 256, 17757, 256, 17761, + 256, 159665, 256, 159954, 256, 17771, 256, 34384, 256, 34396, 256, 34407, + 256, 34409, 256, 34473, 256, 34440, 256, 34574, 256, 34530, 256, 34681, + 256, 34600, 256, 34667, 256, 34694, 256, 17879, 256, 34785, 256, 34817, + 256, 17913, 256, 34912, 256, 34915, 256, 161383, 256, 35031, 256, 35038, + 256, 17973, 256, 35066, 256, 13499, 256, 161966, 256, 162150, 256, 18110, + 256, 18119, 256, 35488, 256, 35565, 256, 35722, 256, 35925, 256, 162984, + 256, 36011, 256, 36033, 256, 36123, 256, 36215, 256, 163631, 256, 133124, + 256, 36299, 256, 36284, 256, 36336, 256, 133342, 256, 36564, 256, 36664, + 256, 165330, 256, 165357, 256, 37012, 256, 37105, 256, 37137, 256, + 165678, 256, 37147, 256, 37432, 256, 37591, 256, 37592, 256, 37500, 256, + 37881, 256, 37909, 256, 166906, 256, 38283, 256, 18837, 256, 38327, 256, + 167287, 256, 18918, 256, 38595, 256, 23986, 256, 38691, 256, 168261, 256, + 168474, 256, 19054, 256, 19062, 256, 38880, 256, 168970, 256, 19122, 256, + 169110, 256, 38923, 256, 38923, 256, 38953, 256, 169398, 256, 39138, 256, + 19251, 256, 39209, 256, 39335, 256, 39362, 256, 39422, 256, 19406, 256, + 170800, 256, 39698, 256, 40000, 256, 40189, 256, 19662, 256, 19693, 256, + 40295, 256, 172238, 256, 19704, 256, 172293, 256, 172558, 256, 172689, + 256, 40635, 256, 19798, 256, 40697, 256, 40702, 256, 40709, 256, 40719, + 256, 40726, 256, 40763, 256, 173568, }; /* index tables for the decomposition data */ -#define DECOMP_SHIFT 8 +#define DECOMP_SHIFT 7 static unsigned char decomp_index1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 16, 7, 17, 18, 19, 20, 21, 22, 23, 24, 7, 7, 7, 7, 7, 25, - 7, 26, 27, 28, 29, 30, 31, 32, 33, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 34, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 35, 36, 37, 38, 39, 40, - 41, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 43, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 44, 7, 7, 45, - 46, 47, 48, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 49, 7, 7, 50, 51, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 52, 53, 54, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, -}; - -static unsigned short decomp_index2[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 12, 0, 0, 0, 0, 13, 14, 15, 0, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 0, 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, + 45, 0, 0, 46, 0, 47, 0, 0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 0, 0, 0, 0, 0, 0, 62, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 78, 0, 0, 0, 79, 0, 0, 80, 0, + 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 83, 0, 0, 0, 0, 84, 85, + 86, 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 92, 93, 0, 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 6, 0, 0, 0, 0, 8, 0, 0, 11, 13, 15, 18, 0, 0, 20, 23, 25, 0, 27, - 31, 35, 0, 39, 42, 45, 48, 51, 54, 0, 57, 60, 63, 66, 69, 72, 75, 78, 81, - 0, 84, 87, 90, 93, 96, 99, 0, 0, 102, 105, 108, 111, 114, 0, 0, 117, 120, - 123, 126, 129, 132, 0, 135, 138, 141, 144, 147, 150, 153, 156, 159, 0, - 162, 165, 168, 171, 174, 177, 0, 0, 180, 183, 186, 189, 192, 0, 195, 198, - 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, - 243, 0, 0, 246, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, - 282, 285, 288, 291, 294, 297, 300, 303, 0, 0, 306, 309, 312, 315, 318, - 321, 324, 327, 330, 0, 333, 336, 339, 342, 345, 348, 0, 351, 354, 357, - 360, 363, 366, 369, 372, 0, 0, 375, 378, 381, 384, 387, 390, 393, 0, 0, - 396, 399, 402, 405, 408, 411, 0, 0, 414, 417, 420, 423, 426, 429, 432, - 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 0, 0, 468, 471, - 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, - 516, 519, 522, 525, 528, 531, 534, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 542, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 548, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 554, 557, 560, 563, 566, 569, 572, - 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, - 617, 620, 623, 0, 626, 629, 632, 635, 638, 641, 0, 0, 644, 647, 650, 653, - 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 0, 0, 692, - 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, - 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, - 779, 782, 785, 788, 791, 794, 797, 0, 0, 800, 803, 0, 0, 0, 0, 0, 0, 806, - 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 848, 850, 852, 854, 856, 858, 860, 862, 864, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 866, - 869, 872, 875, 878, 881, 0, 0, 884, 886, 888, 890, 892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 894, 896, 0, 898, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 903, 0, 0, 0, 0, - 0, 905, 0, 0, 0, 908, 0, 0, 0, 0, 0, 910, 913, 916, 919, 921, 924, 927, - 0, 930, 0, 933, 936, 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 942, 945, 948, 951, 954, 957, 960, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 963, 966, - 969, 972, 975, 0, 978, 980, 982, 984, 987, 990, 992, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 994, 996, 998, 0, - 1000, 1002, 0, 0, 0, 1004, 0, 0, 0, 0, 0, 0, 1006, 1009, 0, 1012, 0, 0, - 0, 1015, 0, 0, 0, 0, 1018, 1021, 1024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1033, 1036, 0, 1039, 0, 0, 0, 1042, 0, 0, 0, - 0, 1045, 1048, 1051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1054, 1057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1060, 1063, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1066, 1069, 1072, 1075, 0, 0, 1078, 1081, 0, 0, 1084, 1087, - 1090, 1093, 1096, 1099, 0, 0, 1102, 1105, 1108, 1111, 1114, 1117, 0, 0, - 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, - 0, 0, 1156, 1159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1165, 1168, 1171, 1174, - 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1180, 1183, 1186, 1189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 0, 1195, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4012,21 +4182,13 @@ static unsigned short decomp_index2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1201, 0, 0, 0, - 0, 0, 0, 0, 1204, 0, 0, 1207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1210, - 1213, 1216, 1219, 1222, 1225, 1228, 1231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1234, 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1240, 1243, - 0, 1246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1249, 0, 0, 1252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1255, 1258, 1261, 0, 0, 1264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4036,181 +4198,42 @@ static unsigned short decomp_index2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1267, 0, 0, 1270, 1273, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1276, 1279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1285, 1288, 1291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1297, 0, 0, 0, 0, 0, 0, 1300, 1303, 0, - 1306, 1309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1312, 1315, 1318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1321, 0, 1324, 1327, 1330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1339, 1342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1350, 0, 0, 0, 0, 1353, 0, 0, 0, 0, - 1356, 0, 0, 0, 0, 1359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1362, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1365, 0, 1368, 1371, 1374, 1377, 1380, 0, 0, 0, 0, - 0, 0, 0, 1383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1386, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1389, 0, 0, 0, 0, 1392, 0, 0, 0, 0, 1395, 0, - 0, 0, 0, 1398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1409, 0, 1412, 0, - 1415, 0, 1418, 0, 1421, 0, 0, 0, 1424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1427, 0, 1430, 0, 0, 1433, 1436, 0, 1439, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1442, 1444, 1446, 0, 1448, 1450, 1452, - 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, 0, 1470, 1472, 1474, - 1476, 1478, 1480, 1482, 1484, 1486, 1488, 1490, 1492, 1494, 1496, 1498, - 1500, 1502, 1504, 0, 1506, 1508, 1510, 1512, 1514, 1516, 1518, 1520, - 1522, 1524, 1526, 1528, 1530, 1532, 1534, 1536, 1538, 1540, 1542, 1544, - 1546, 1548, 1550, 1552, 1554, 1556, 1558, 1560, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1564, 1566, 1568, - 1570, 1572, 1574, 1576, 1578, 1580, 1582, 1584, 1586, 1588, 1590, 1592, - 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, 1616, - 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1638, 1641, 1644, 1647, 1650, 1653, - 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, - 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, - 1728, 1731, 1734, 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, - 1764, 1767, 1770, 1773, 1776, 1779, 1782, 1785, 1788, 1791, 1794, 1797, - 1800, 1803, 1806, 1809, 1812, 1815, 1818, 1821, 1824, 1827, 1830, 1833, - 1836, 1839, 1842, 1845, 1848, 1851, 1854, 1857, 1860, 1863, 1866, 1869, - 1872, 1875, 1878, 1881, 1884, 1887, 1890, 1893, 1896, 1899, 1902, 1905, - 1908, 1911, 1914, 1917, 1920, 1923, 1926, 1929, 1932, 1935, 1938, 1941, - 1944, 1947, 1950, 1953, 1956, 1959, 1962, 1965, 1968, 1971, 1974, 1977, - 1980, 1983, 1986, 1989, 1992, 1995, 1998, 2001, 2004, 2007, 2010, 2013, - 2016, 2019, 2022, 2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 2049, - 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2085, - 2088, 2091, 2094, 2097, 2100, 2103, 0, 0, 0, 0, 2106, 2109, 2112, 2115, - 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, - 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, - 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, - 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, - 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2283, 2286, 2289, 2292, 2295, - 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 2331, - 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, - 2370, 2373, 0, 0, 0, 0, 0, 0, 2376, 2379, 2382, 2385, 2388, 2391, 2394, - 2397, 2400, 2403, 2406, 2409, 2412, 2415, 2418, 2421, 2424, 2427, 2430, - 2433, 2436, 2439, 0, 0, 2442, 2445, 2448, 2451, 2454, 2457, 0, 0, 2460, - 2463, 2466, 2469, 2472, 2475, 2478, 2481, 2484, 2487, 2490, 2493, 2496, - 2499, 2502, 2505, 2508, 2511, 2514, 2517, 2520, 2523, 2526, 2529, 2532, - 2535, 2538, 2541, 2544, 2547, 2550, 2553, 2556, 2559, 2562, 2565, 2568, - 2571, 0, 0, 2574, 2577, 2580, 2583, 2586, 2589, 0, 0, 2592, 2595, 2598, - 2601, 2604, 2607, 2610, 2613, 0, 2616, 0, 2619, 0, 2622, 0, 2625, 2628, - 2631, 2634, 2637, 2640, 2643, 2646, 2649, 2652, 2655, 2658, 2661, 2664, - 2667, 2670, 2673, 2676, 2679, 2681, 2684, 2686, 2689, 2691, 2694, 2696, - 2699, 2701, 2704, 2706, 2709, 0, 0, 2711, 2714, 2717, 2720, 2723, 2726, - 2729, 2732, 2735, 2738, 2741, 2744, 2747, 2750, 2753, 2756, 2759, 2762, - 2765, 2768, 2771, 2774, 2777, 2780, 2783, 2786, 2789, 2792, 2795, 2798, - 2801, 2804, 2807, 2810, 2813, 2816, 2819, 2822, 2825, 2828, 2831, 2834, - 2837, 2840, 2843, 2846, 2849, 2852, 2855, 2858, 2861, 2864, 2867, 0, - 2870, 2873, 2876, 2879, 2882, 2885, 2887, 2890, 2893, 2895, 2898, 2901, - 2904, 2907, 2910, 0, 2913, 2916, 2919, 2922, 2924, 2927, 2929, 2932, - 2935, 2938, 2941, 2944, 2947, 2950, 0, 0, 2952, 2955, 2958, 2961, 2964, - 2967, 0, 2969, 2972, 2975, 2978, 2981, 2984, 2987, 2989, 2992, 2995, - 2998, 3001, 3004, 3007, 3010, 3012, 3015, 3018, 3020, 0, 0, 3022, 3025, - 3028, 0, 3031, 3034, 3037, 3040, 3042, 3045, 3047, 3050, 3052, 0, 3055, - 3057, 3059, 3061, 3063, 3065, 3067, 3069, 3071, 3073, 3075, 0, 0, 0, 0, - 0, 0, 3077, 0, 0, 0, 0, 0, 3079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3082, 3084, 3087, 0, 0, 0, 0, 0, 0, 0, 0, 3091, 0, 0, 0, 3093, 3096, 0, - 3100, 3103, 0, 0, 0, 0, 3107, 0, 3110, 0, 0, 0, 0, 0, 0, 0, 0, 3113, - 3116, 3119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3122, 0, 0, 0, 0, 0, - 0, 0, 3127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3129, 3131, - 0, 0, 3133, 3135, 3137, 3139, 3141, 3143, 3145, 3147, 3149, 3151, 3153, - 3155, 3157, 3159, 3161, 3163, 3165, 3167, 3169, 3171, 3173, 3175, 3177, - 3179, 3181, 3183, 3185, 0, 3187, 3189, 3191, 3193, 3195, 3197, 3199, - 3201, 3203, 3205, 3207, 3209, 3211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3216, 3220, 3224, - 3226, 0, 3229, 3233, 3237, 0, 3239, 3242, 3244, 3246, 3248, 3250, 3252, - 3254, 3256, 3258, 3260, 0, 3262, 3264, 0, 0, 3267, 3269, 3271, 3273, - 3275, 0, 0, 3277, 3280, 3284, 0, 3287, 0, 3289, 0, 3291, 0, 3293, 3295, - 3297, 3299, 0, 3301, 3303, 3305, 0, 3307, 3309, 3311, 3313, 3315, 3317, - 3319, 0, 3321, 3325, 3327, 3329, 3331, 3333, 0, 0, 0, 0, 3335, 3337, - 3339, 3341, 3343, 0, 0, 0, 0, 0, 0, 3345, 3349, 3353, 3358, 3362, 3366, - 3370, 3374, 3378, 3382, 3386, 3390, 3394, 3398, 3402, 3406, 3409, 3411, - 3414, 3418, 3421, 3423, 3426, 3430, 3435, 3438, 3440, 3443, 3447, 3449, - 3451, 3453, 3455, 3457, 3460, 3464, 3467, 3469, 3472, 3476, 3481, 3484, - 3486, 3489, 3493, 3495, 3497, 3499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3501, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3505, 3508, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3511, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3514, - 3517, 3520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3523, 0, 0, 0, 0, 3526, 0, 0, 3529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3532, 0, 3535, - 0, 0, 0, 0, 0, 3538, 3541, 0, 3545, 3548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3552, 0, 0, 3555, 0, 0, 3558, 0, 3561, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3564, 0, 3567, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3570, 3573, 3576, 3579, 3582, 0, 0, 3585, 3588, - 0, 0, 3591, 3594, 0, 0, 0, 0, 0, 0, 3597, 3600, 0, 0, 3603, 3606, 0, 0, - 3609, 3612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3615, 3618, 3621, 3624, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, - 3630, 3633, 3636, 0, 0, 0, 0, 0, 0, 3639, 3642, 3645, 3648, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3651, 3653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4223,35 +4246,19 @@ static unsigned short decomp_index2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3655, 3657, 3659, 3661, 3663, 3665, 3667, 3669, - 3671, 3673, 3676, 3679, 3682, 3685, 3688, 3691, 3694, 3697, 3700, 3703, - 3706, 3710, 3714, 3718, 3722, 3726, 3730, 3734, 3738, 3742, 3747, 3752, - 3757, 3762, 3767, 3772, 3777, 3782, 3787, 3792, 3797, 3800, 3803, 3806, - 3809, 3812, 3815, 3818, 3821, 3824, 3828, 3832, 3836, 3840, 3844, 3848, - 3852, 3856, 3860, 3864, 3868, 3872, 3876, 3880, 3884, 3888, 3892, 3896, - 3900, 3904, 3908, 3912, 3916, 3920, 3924, 3928, 3932, 3936, 3940, 3944, - 3948, 3952, 3956, 3960, 3964, 3968, 3972, 3974, 3976, 3978, 3980, 3982, - 3984, 3986, 3988, 3990, 3992, 3994, 3996, 3998, 4000, 4002, 4004, 4006, - 4008, 4010, 4012, 4014, 4016, 4018, 4020, 4022, 4024, 4026, 4028, 4030, - 4032, 4034, 4036, 4038, 4040, 4042, 4044, 4046, 4048, 4050, 4052, 4054, - 4056, 4058, 4060, 4062, 4064, 4066, 4068, 4070, 4072, 4074, 4076, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4083, 4087, 4090, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4097, 4099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4262,7 +4269,6 @@ static unsigned short decomp_index2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4274,881 +4280,1339 @@ static unsigned short decomp_index2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4107, - 4109, 4111, 4113, 4115, 4117, 4119, 4121, 4123, 4125, 4127, 4129, 4131, - 4133, 4135, 4137, 4139, 4141, 4143, 4145, 4147, 4149, 4151, 4153, 4155, - 4157, 4159, 4161, 4163, 4165, 4167, 4169, 4171, 4173, 4175, 4177, 4179, - 4181, 4183, 4185, 4187, 4189, 4191, 4193, 4195, 4197, 4199, 4201, 4203, - 4205, 4207, 4209, 4211, 4213, 4215, 4217, 4219, 4221, 4223, 4225, 4227, - 4229, 4231, 4233, 4235, 4237, 4239, 4241, 4243, 4245, 4247, 4249, 4251, - 4253, 4255, 4257, 4259, 4261, 4263, 4265, 4267, 4269, 4271, 4273, 4275, - 4277, 4279, 4281, 4283, 4285, 4287, 4289, 4291, 4293, 4295, 4297, 4299, - 4301, 4303, 4305, 4307, 4309, 4311, 4313, 4315, 4317, 4319, 4321, 4323, - 4325, 4327, 4329, 4331, 4333, 4335, 4337, 4339, 4341, 4343, 4345, 4347, - 4349, 4351, 4353, 4355, 4357, 4359, 4361, 4363, 4365, 4367, 4369, 4371, - 4373, 4375, 4377, 4379, 4381, 4383, 4385, 4387, 4389, 4391, 4393, 4395, - 4397, 4399, 4401, 4403, 4405, 4407, 4409, 4411, 4413, 4415, 4417, 4419, - 4421, 4423, 4425, 4427, 4429, 4431, 4433, 4435, 4437, 4439, 4441, 4443, - 4445, 4447, 4449, 4451, 4453, 4455, 4457, 4459, 4461, 4463, 4465, 4467, - 4469, 4471, 4473, 4475, 4477, 4479, 4481, 4483, 4485, 4487, 4489, 4491, - 4493, 4495, 4497, 4499, 4501, 4503, 4505, 4507, 4509, 4511, 4513, 4515, - 4517, 4519, 4521, 4523, 4525, 4527, 4529, 4531, 4533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4537, 0, 4539, - 4541, 4543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4545, 0, - 4548, 0, 4551, 0, 4554, 0, 4557, 0, 4560, 0, 4563, 0, 4566, 0, 4569, 0, - 4572, 0, 4575, 0, 4578, 0, 0, 4581, 0, 4584, 0, 4587, 0, 0, 0, 0, 0, 0, - 4590, 4593, 0, 4596, 4599, 0, 4602, 4605, 0, 4608, 4611, 0, 4614, 4617, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4620, - 0, 0, 0, 0, 0, 0, 4623, 4626, 0, 4629, 4632, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4635, 0, 4638, 0, 4641, 0, 4644, 0, 4647, 0, 4650, 0, 4653, 0, - 4656, 0, 4659, 0, 4662, 0, 4665, 0, 4668, 0, 0, 4671, 0, 4674, 0, 4677, - 0, 0, 0, 0, 0, 0, 4680, 4683, 0, 4686, 4689, 0, 4692, 4695, 0, 4698, - 4701, 0, 4704, 4707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4710, 0, 0, 4713, 4716, 4719, 4722, 0, 0, 0, 4725, 4728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4731, 4733, 4735, 4737, 4739, 4741, 4743, 4745, 4747, 4749, 4751, - 4753, 4755, 4757, 4759, 4761, 4763, 4765, 4767, 4769, 4771, 4773, 4775, - 4777, 4779, 4781, 4783, 4785, 4787, 4789, 4791, 4793, 4795, 4797, 4799, - 4801, 4803, 4805, 4807, 4809, 4811, 4813, 4815, 4817, 4819, 4821, 4823, - 4825, 4827, 4829, 4831, 4833, 4835, 4837, 4839, 4841, 4843, 4845, 4847, - 4849, 4851, 4853, 4855, 4857, 4859, 4861, 4863, 4865, 4867, 4869, 4871, - 4873, 4875, 4877, 4879, 4881, 4883, 4885, 4887, 4889, 4891, 4893, 4895, - 4897, 4899, 4901, 4903, 4905, 4907, 4909, 4911, 4913, 4915, 4917, 0, 0, - 0, 4919, 4921, 4923, 4925, 4927, 4929, 4931, 4933, 4935, 4937, 4939, - 4941, 4943, 4945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4947, 4951, 4955, 4959, 4963, 4967, 4971, 4975, 4979, - 4983, 4987, 4991, 4995, 4999, 5003, 5008, 5013, 5018, 5023, 5028, 5033, - 5038, 5043, 5048, 5053, 5058, 5063, 5068, 5073, 5078, 5086, 0, 5093, - 5097, 5101, 5105, 5109, 5113, 5117, 5121, 5125, 5129, 5133, 5137, 5141, - 5145, 5149, 5153, 5157, 5161, 5165, 5169, 5173, 5177, 5181, 5185, 5189, - 5193, 5197, 5201, 5205, 5209, 5213, 5217, 5221, 5225, 5229, 5233, 5237, - 5239, 5241, 5243, 0, 0, 0, 0, 0, 0, 0, 0, 5245, 5249, 5252, 5255, 5258, - 5261, 5264, 5267, 5270, 5273, 5276, 5279, 5282, 5285, 5288, 5291, 5294, - 5296, 5298, 5300, 5302, 5304, 5306, 5308, 5310, 5312, 5314, 5316, 5318, - 5320, 5322, 5325, 5328, 5331, 5334, 5337, 5340, 5343, 5346, 5349, 5352, - 5355, 5358, 5361, 5364, 5370, 5375, 0, 5378, 5380, 5382, 5384, 5386, - 5388, 5390, 5392, 5394, 5396, 5398, 5400, 5402, 5404, 5406, 5408, 5410, - 5412, 5414, 5416, 5418, 5420, 5422, 5424, 5426, 5428, 5430, 5432, 5434, - 5436, 5438, 5440, 5442, 5444, 5446, 5448, 5450, 5452, 5454, 5456, 5458, - 5460, 5462, 5464, 5466, 5468, 5470, 5472, 5474, 5476, 5479, 5482, 5485, - 5488, 5491, 5494, 5497, 5500, 5503, 5506, 5509, 5512, 5515, 5518, 5521, - 5524, 5527, 5530, 5533, 5536, 5539, 5542, 5545, 5548, 5552, 5556, 5560, - 5563, 5567, 5570, 5574, 5576, 5578, 5580, 5582, 5584, 5586, 5588, 5590, - 5592, 5594, 5596, 5598, 5600, 5602, 5604, 5606, 5608, 5610, 5612, 5614, - 5616, 5618, 5620, 5622, 5624, 5626, 5628, 5630, 5632, 5634, 5636, 5638, - 5640, 5642, 5644, 5646, 5648, 5650, 5652, 5654, 5656, 5658, 5660, 5662, - 5664, 5666, 0, 5668, 5673, 5678, 5683, 5687, 5692, 5696, 5700, 5706, - 5711, 5715, 5719, 5723, 5728, 5733, 5737, 5741, 5744, 5748, 5753, 5758, - 5761, 5767, 5774, 5780, 5784, 5790, 5796, 5801, 5805, 5809, 5813, 5818, - 5824, 5829, 5833, 5837, 5841, 5844, 5847, 5850, 5853, 5857, 5861, 5867, - 5871, 5876, 5882, 5886, 5889, 5892, 5898, 5903, 5909, 5913, 5919, 5922, - 5926, 5930, 5934, 5938, 5942, 5947, 5951, 5954, 5958, 5962, 5966, 5971, - 5975, 5979, 5983, 5989, 5994, 5997, 6003, 6006, 6011, 6016, 6020, 6024, - 6028, 6033, 6036, 6040, 6045, 6048, 6054, 6058, 6061, 6064, 6067, 6070, - 6073, 6076, 6079, 6082, 6085, 6088, 6092, 6096, 6100, 6104, 6108, 6112, - 6116, 6120, 6124, 6128, 6132, 6136, 6140, 6144, 6148, 6152, 6155, 6158, - 6162, 6165, 6168, 6171, 6175, 6179, 6182, 6185, 6188, 6191, 6194, 6199, - 6202, 6205, 6208, 6211, 6214, 6217, 6220, 6223, 6227, 6232, 6235, 6238, - 6241, 6244, 6247, 6250, 6253, 6257, 6261, 6265, 6269, 6272, 6275, 6278, - 6281, 6284, 6287, 6290, 6293, 6296, 6299, 6303, 6307, 6310, 6314, 6318, - 6322, 6325, 6329, 6333, 6338, 6341, 6345, 6349, 6353, 6357, 6363, 6370, - 6373, 6376, 6379, 6382, 6385, 6388, 6391, 6394, 6397, 6400, 6403, 6406, - 6409, 6412, 6415, 6418, 6421, 6424, 6429, 6432, 6435, 6438, 6443, 6447, - 6450, 6453, 6456, 6459, 6462, 6465, 6468, 6471, 6474, 6477, 6481, 6484, - 6487, 6491, 6495, 6498, 6503, 6507, 6510, 6513, 6516, 6519, 6523, 6527, - 6530, 6533, 6536, 6539, 6542, 6545, 6548, 6551, 6554, 6558, 6562, 6566, - 6570, 6574, 6578, 6582, 6586, 6590, 6594, 6598, 6602, 6606, 6610, 6614, - 6618, 6622, 6626, 6630, 6634, 6638, 6642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6648, 6650, 0, 0, 0, 0, 0, 0, 6652, 6654, 6656, 6658, 6660, 6662, 6664, - 6666, 6668, 6670, 6672, 6674, 6676, 6678, 6680, 6682, 6684, 6686, 6688, - 6690, 6692, 6694, 6696, 6698, 6700, 6702, 6704, 6706, 6708, 6710, 6712, - 6714, 6716, 6718, 6720, 6722, 6724, 6726, 6728, 6730, 6732, 6734, 6736, - 6738, 6740, 6742, 6744, 6746, 6748, 6750, 6752, 6754, 6756, 6758, 6760, - 6762, 6764, 6766, 6768, 6770, 6772, 6774, 6776, 6778, 6780, 6782, 6784, - 6786, 6788, 6790, 6792, 6794, 6796, 6798, 6800, 6802, 6804, 6806, 6808, - 6810, 6812, 6814, 6816, 6818, 6820, 6822, 6824, 6826, 6828, 6830, 6832, - 6834, 6836, 6838, 6840, 6842, 6844, 6846, 6848, 6850, 6852, 6854, 6856, - 6858, 6860, 6862, 6864, 6866, 6868, 6870, 6872, 6874, 6876, 6878, 6880, - 6882, 6884, 6886, 6888, 6890, 6892, 6894, 6896, 6898, 6900, 6902, 6904, - 6906, 6908, 6910, 6912, 6914, 6916, 6918, 6920, 6922, 6924, 6926, 6928, - 6930, 6932, 6934, 6936, 6938, 6940, 6942, 6944, 6946, 6948, 6950, 6952, - 6954, 6956, 6958, 6960, 6962, 6964, 6966, 6968, 6970, 6972, 6974, 6976, - 6978, 6980, 6982, 6984, 6986, 6988, 6990, 6992, 6994, 6996, 6998, 7000, - 7002, 7004, 7006, 7008, 7010, 7012, 7014, 7016, 7018, 7020, 7022, 7024, - 7026, 7028, 7030, 7032, 7034, 7036, 7038, 7040, 7042, 7044, 7046, 7048, - 7050, 7052, 7054, 7056, 7058, 7060, 7062, 7064, 7066, 7068, 7070, 7072, - 7074, 7076, 7078, 7080, 7082, 7084, 7086, 7088, 7090, 7092, 7094, 7096, - 7098, 7100, 7102, 7104, 7106, 7108, 7110, 7112, 7114, 7116, 7118, 7120, - 7122, 7124, 7126, 7128, 7130, 7132, 7134, 7136, 7138, 7140, 7142, 7144, - 7146, 7148, 7150, 7152, 7154, 7156, 7158, 7160, 7162, 7164, 7166, 7168, - 7170, 7172, 7174, 7176, 7178, 7180, 7182, 7184, 7186, 7188, 7190, 0, 0, - 7192, 0, 7194, 0, 0, 7196, 7198, 7200, 7202, 7204, 7206, 7208, 7210, - 7212, 7214, 0, 7216, 0, 7218, 0, 0, 7220, 7222, 0, 0, 0, 7224, 7226, - 7228, 7230, 7232, 7234, 7236, 7238, 7240, 7242, 7244, 7246, 7248, 7250, - 7252, 7254, 7256, 7258, 7260, 7262, 7264, 7266, 7268, 7270, 7272, 7274, - 7276, 7278, 7280, 7282, 7284, 7286, 7288, 7290, 7292, 7294, 7296, 7298, - 7300, 7302, 7304, 7306, 7308, 7310, 7312, 7314, 7316, 7318, 7320, 7322, - 7324, 7326, 7328, 7330, 7332, 7334, 7336, 7338, 7340, 7342, 7344, 7346, - 7348, 7350, 7352, 7354, 7356, 7358, 0, 0, 7360, 7362, 7364, 7366, 7368, - 7370, 7372, 7374, 7376, 7378, 7380, 7382, 7384, 7386, 7388, 7390, 7392, - 7394, 7396, 7398, 7400, 7402, 7404, 7406, 7408, 7410, 7412, 7414, 7416, - 7418, 7420, 7422, 7424, 7426, 7428, 7430, 7432, 7434, 7436, 7438, 7440, - 7442, 7444, 7446, 7448, 7450, 7452, 7454, 7456, 7458, 7460, 7462, 7464, - 7466, 7468, 7470, 7472, 7474, 7476, 7478, 7480, 7482, 7484, 7486, 7488, - 7490, 7492, 7494, 7496, 7498, 7500, 7502, 7504, 7506, 7508, 7510, 7512, - 7514, 7516, 7518, 7520, 7522, 7524, 7526, 7528, 7530, 7532, 7534, 7536, - 7538, 7540, 7542, 7544, 7546, 7548, 7550, 7552, 7554, 7556, 7558, 7560, - 7562, 7564, 7566, 7568, 7570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7572, 7575, 7578, 7581, 7585, 7589, 7592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7595, 7598, 7601, 7604, 7607, 0, 0, 0, 0, 0, 7610, 0, 7613, 7616, - 7618, 7620, 7622, 7624, 7626, 7628, 7630, 7632, 7634, 7636, 7639, 7642, - 7645, 7648, 7651, 7654, 7657, 7660, 7663, 7666, 7669, 7672, 0, 7675, - 7678, 7681, 7684, 7687, 0, 7690, 0, 7693, 7696, 0, 7699, 7702, 0, 7705, - 7708, 7711, 7714, 7717, 7720, 7723, 7726, 7729, 7732, 7735, 7737, 7739, - 7741, 7743, 7745, 7747, 7749, 7751, 7753, 7755, 7757, 7759, 7761, 7763, - 7765, 7767, 7769, 7771, 7773, 7775, 7777, 7779, 7781, 7783, 7785, 7787, - 7789, 7791, 7793, 7795, 7797, 7799, 7801, 7803, 7805, 7807, 7809, 7811, - 7813, 7815, 7817, 7819, 7821, 7823, 7825, 7827, 7829, 7831, 7833, 7835, - 7837, 7839, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, - 7861, 7863, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879, 7881, 7883, - 7885, 7887, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907, - 7909, 7911, 7913, 7915, 7917, 7919, 7921, 7923, 7925, 7927, 7929, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7931, 7933, 7935, 7937, 7939, 7941, 7943, 7945, - 7947, 7949, 7951, 7953, 7955, 7957, 7959, 7961, 7963, 7965, 7967, 7969, - 7971, 7973, 7975, 7977, 7980, 7983, 7986, 7989, 7992, 7995, 7998, 8001, - 8004, 8007, 8010, 8013, 8016, 8019, 8022, 8025, 8028, 8031, 8033, 8035, - 8037, 8039, 8042, 8045, 8048, 8051, 8054, 8057, 8060, 8063, 8066, 8069, - 8072, 8075, 8078, 8081, 8084, 8087, 8090, 8093, 8096, 8099, 8102, 8105, - 8108, 8111, 8114, 8117, 8120, 8123, 8126, 8129, 8132, 8135, 8138, 8141, - 8144, 8147, 8150, 8153, 8156, 8159, 8162, 8165, 8168, 8171, 8174, 8177, - 8180, 8183, 8186, 8189, 8192, 8195, 8198, 8201, 8204, 8207, 8210, 8213, - 8216, 8219, 8222, 8225, 8228, 8231, 8234, 8237, 8240, 8243, 8246, 8249, - 8252, 8255, 8258, 8261, 8264, 8267, 8270, 8273, 8276, 8279, 8282, 8285, - 8288, 8291, 8294, 8297, 8300, 8303, 8306, 8309, 8312, 8315, 8318, 8321, - 8325, 8329, 8333, 8337, 8341, 8345, 8348, 8351, 8354, 8357, 8360, 8363, - 8366, 8369, 8372, 8375, 8378, 8381, 8384, 8387, 8390, 8393, 8396, 8399, - 8402, 8405, 8408, 8411, 8414, 8417, 8420, 8423, 8426, 8429, 8432, 8435, - 8438, 8441, 8444, 8447, 8450, 8453, 8456, 8459, 8462, 8465, 8468, 8471, - 8474, 8477, 8480, 8483, 8486, 8489, 8492, 8495, 8498, 8501, 8504, 8507, - 8510, 8513, 8516, 8519, 8522, 8525, 8528, 8531, 8534, 8537, 8540, 8543, - 8546, 8549, 8552, 8555, 8558, 8561, 8564, 8567, 8570, 8573, 8576, 8579, - 8582, 8585, 8588, 8591, 8594, 8597, 8600, 8603, 8606, 8609, 8612, 8615, - 8618, 8621, 8624, 8627, 8630, 8633, 8636, 8639, 8642, 8645, 8648, 8651, - 8654, 8657, 8660, 8663, 8666, 8669, 8672, 8675, 8678, 8681, 8684, 8687, - 8690, 8693, 8696, 8699, 8702, 8705, 8708, 8711, 8714, 8717, 8720, 8723, - 8726, 8729, 8732, 8735, 8738, 8741, 8744, 8747, 8750, 8753, 8756, 8759, - 8762, 8765, 8768, 8771, 8775, 8779, 8783, 8786, 8789, 8792, 8795, 8798, - 8801, 8804, 8807, 8810, 8813, 8816, 8819, 8822, 8825, 8828, 8831, 8834, - 8837, 8840, 8843, 8846, 8849, 8852, 8855, 8858, 8861, 8864, 8867, 8870, - 8873, 8876, 8879, 8882, 8885, 8888, 8891, 8894, 8897, 8900, 8903, 8906, - 8909, 8912, 8915, 8918, 8921, 8924, 8927, 8930, 8933, 8936, 8939, 8942, - 8945, 8948, 8951, 8954, 8957, 8960, 8963, 8966, 8969, 8972, 8975, 8978, - 8981, 8984, 8987, 8990, 8993, 8996, 8999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9002, 9006, 9010, 9014, 9018, 9022, 9026, 9030, - 9034, 9038, 9042, 9046, 9050, 9054, 9058, 9062, 9066, 9070, 9074, 9078, - 9082, 9086, 9090, 9094, 9098, 9102, 9106, 9110, 9114, 9118, 9122, 9126, - 9130, 9134, 9138, 9142, 9146, 9150, 9154, 9158, 9162, 9166, 9170, 9174, - 9178, 9182, 9186, 9190, 9194, 9198, 9202, 9206, 9210, 9214, 9218, 9222, - 9226, 9230, 9234, 9238, 9242, 9246, 9250, 9254, 0, 0, 9258, 9262, 9266, - 9270, 9274, 9278, 9282, 9286, 9290, 9294, 9298, 9302, 9306, 9310, 9314, - 9318, 9322, 9326, 9330, 9334, 9338, 9342, 9346, 9350, 9354, 9358, 9362, - 9366, 9370, 9374, 9378, 9382, 9386, 9390, 9394, 9398, 9402, 9406, 9410, - 9414, 9418, 9422, 9426, 9430, 9434, 9438, 9442, 9446, 9450, 9454, 9458, - 9462, 9466, 9470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9474, - 9478, 9482, 9487, 9492, 9497, 9502, 9507, 9512, 9517, 9521, 9540, 9549, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9554, 9556, - 9558, 9560, 9562, 9564, 9566, 9568, 9570, 9572, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9574, 9576, 9578, 9580, 9582, - 9584, 9586, 9588, 9590, 9592, 9594, 9596, 9598, 9600, 9602, 9604, 9606, - 9608, 9610, 9612, 9614, 0, 0, 9616, 9618, 9620, 9622, 9624, 9626, 9628, - 9630, 9632, 9634, 9636, 9638, 0, 9640, 9642, 9644, 9646, 9648, 9650, - 9652, 9654, 9656, 9658, 9660, 9662, 9664, 9666, 9668, 9670, 9672, 9674, - 9676, 0, 9678, 9680, 9682, 9684, 0, 0, 0, 0, 9686, 9689, 9692, 0, 9695, - 0, 9698, 9701, 9704, 9707, 9710, 9713, 9716, 9719, 9722, 9725, 9728, - 9730, 9732, 9734, 9736, 9738, 9740, 9742, 9744, 9746, 9748, 9750, 9752, - 9754, 9756, 9758, 9760, 9762, 9764, 9766, 9768, 9770, 9772, 9774, 9776, - 9778, 9780, 9782, 9784, 9786, 9788, 9790, 9792, 9794, 9796, 9798, 9800, - 9802, 9804, 9806, 9808, 9810, 9812, 9814, 9816, 9818, 9820, 9822, 9824, - 9826, 9828, 9830, 9832, 9834, 9836, 9838, 9840, 9842, 9844, 9846, 9848, - 9850, 9852, 9854, 9856, 9858, 9860, 9862, 9864, 9866, 9868, 9870, 9872, - 9874, 9876, 9878, 9880, 9882, 9884, 9886, 9888, 9890, 9892, 9894, 9896, - 9898, 9900, 9902, 9904, 9906, 9908, 9910, 9912, 9914, 9916, 9918, 9920, - 9922, 9924, 9926, 9928, 9930, 9932, 9934, 9936, 9938, 9940, 9942, 9944, - 9946, 9948, 9950, 9952, 9954, 9956, 9958, 9960, 9962, 9965, 9968, 9971, - 9974, 9977, 9980, 9983, 0, 0, 0, 0, 9986, 9988, 9990, 9992, 9994, 9996, - 9998, 10000, 10002, 10004, 10006, 10008, 10010, 10012, 10014, 10016, - 10018, 10020, 10022, 10024, 10026, 10028, 10030, 10032, 10034, 10036, - 10038, 10040, 10042, 10044, 10046, 10048, 10050, 10052, 10054, 10056, - 10058, 10060, 10062, 10064, 10066, 10068, 10070, 10072, 10074, 10076, - 10078, 10080, 10082, 10084, 10086, 10088, 10090, 10092, 10094, 10096, - 10098, 10100, 10102, 10104, 10106, 10108, 10110, 10112, 10114, 10116, - 10118, 10120, 10122, 10124, 10126, 10128, 10130, 10132, 10134, 10136, - 10138, 10140, 10142, 10144, 10146, 10148, 10150, 10152, 10154, 10156, - 10158, 10160, 10162, 10164, 10166, 10168, 10170, 10172, 10174, 10176, - 10178, 10180, 10182, 10184, 10186, 10188, 10190, 10192, 10194, 10196, - 10198, 10200, 10202, 10204, 10206, 10208, 10210, 10212, 10214, 10216, - 10218, 10220, 10222, 10224, 10226, 10228, 10230, 10232, 10234, 10236, - 10238, 10240, 10242, 10244, 10246, 10248, 10250, 10252, 10254, 10256, - 10258, 10260, 10262, 10264, 10266, 10268, 10270, 10272, 10274, 10276, - 10278, 10280, 10282, 10284, 10286, 10288, 10290, 10292, 10294, 10296, - 10298, 10300, 10302, 10304, 10306, 10308, 10310, 10312, 10314, 10316, - 10318, 10320, 10322, 10324, 10326, 10328, 10330, 10332, 10334, 10336, - 10338, 10340, 10342, 10344, 10346, 10348, 10350, 10352, 10354, 10356, - 10358, 10360, 10362, 10364, 0, 0, 0, 10366, 10368, 10370, 10372, 10374, - 10376, 0, 0, 10378, 10380, 10382, 10384, 10386, 10388, 0, 0, 10390, - 10392, 10394, 10396, 10398, 10400, 0, 0, 10402, 10404, 10406, 0, 0, 0, - 10408, 10410, 10412, 10414, 10416, 10418, 10420, 0, 10422, 10424, 10426, - 10428, 10430, 10432, 10434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10436, 0, 10439, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 10442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10445, 10448, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10451, 10454, 10457, 10460, 10463, - 10466, 10469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10472, 10475, - 10478, 10481, 10484, 10487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10490, 10492, 10494, 10496, 10498, 10500, 10502, 10504, 10506, 10508, - 10510, 10512, 10514, 10516, 10518, 10520, 10522, 10524, 10526, 10528, - 10530, 10532, 10534, 10536, 10538, 10540, 10542, 10544, 10546, 10548, - 10550, 10552, 10554, 10556, 10558, 10560, 10562, 10564, 10566, 10568, - 10570, 10572, 10574, 10576, 10578, 10580, 10582, 10584, 10586, 10588, - 10590, 10592, 10594, 10596, 10598, 10600, 10602, 10604, 10606, 10608, - 10610, 10612, 10614, 10616, 10618, 10620, 10622, 10624, 10626, 10628, - 10630, 10632, 10634, 10636, 10638, 10640, 10642, 10644, 10646, 10648, - 10650, 10652, 10654, 10656, 10658, 0, 10660, 10662, 10664, 10666, 10668, - 10670, 10672, 10674, 10676, 10678, 10680, 10682, 10684, 10686, 10688, - 10690, 10692, 10694, 10696, 10698, 10700, 10702, 10704, 10706, 10708, - 10710, 10712, 10714, 10716, 10718, 10720, 10722, 10724, 10726, 10728, - 10730, 10732, 10734, 10736, 10738, 10740, 10742, 10744, 10746, 10748, - 10750, 10752, 10754, 10756, 10758, 10760, 10762, 10764, 10766, 10768, - 10770, 10772, 10774, 10776, 10778, 10780, 10782, 10784, 10786, 10788, - 10790, 10792, 10794, 10796, 10798, 10800, 0, 10802, 10804, 0, 0, 10806, - 0, 0, 10808, 10810, 0, 0, 10812, 10814, 10816, 10818, 0, 10820, 10822, - 10824, 10826, 10828, 10830, 10832, 10834, 10836, 10838, 10840, 10842, 0, - 10844, 0, 10846, 10848, 10850, 10852, 10854, 10856, 10858, 0, 10860, - 10862, 10864, 10866, 10868, 10870, 10872, 10874, 10876, 10878, 10880, - 10882, 10884, 10886, 10888, 10890, 10892, 10894, 10896, 10898, 10900, - 10902, 10904, 10906, 10908, 10910, 10912, 10914, 10916, 10918, 10920, - 10922, 10924, 10926, 10928, 10930, 10932, 10934, 10936, 10938, 10940, - 10942, 10944, 10946, 10948, 10950, 10952, 10954, 10956, 10958, 10960, - 10962, 10964, 10966, 10968, 10970, 10972, 10974, 10976, 10978, 10980, - 10982, 10984, 10986, 10988, 0, 10990, 10992, 10994, 10996, 0, 0, 10998, - 11000, 11002, 11004, 11006, 11008, 11010, 11012, 0, 11014, 11016, 11018, - 11020, 11022, 11024, 11026, 0, 11028, 11030, 11032, 11034, 11036, 11038, - 11040, 11042, 11044, 11046, 11048, 11050, 11052, 11054, 11056, 11058, - 11060, 11062, 11064, 11066, 11068, 11070, 11072, 11074, 11076, 11078, - 11080, 11082, 0, 11084, 11086, 11088, 11090, 0, 11092, 11094, 11096, - 11098, 11100, 0, 11102, 0, 0, 0, 11104, 11106, 11108, 11110, 11112, - 11114, 11116, 0, 11118, 11120, 11122, 11124, 11126, 11128, 11130, 11132, - 11134, 11136, 11138, 11140, 11142, 11144, 11146, 11148, 11150, 11152, - 11154, 11156, 11158, 11160, 11162, 11164, 11166, 11168, 11170, 11172, - 11174, 11176, 11178, 11180, 11182, 11184, 11186, 11188, 11190, 11192, - 11194, 11196, 11198, 11200, 11202, 11204, 11206, 11208, 11210, 11212, - 11214, 11216, 11218, 11220, 11222, 11224, 11226, 11228, 11230, 11232, - 11234, 11236, 11238, 11240, 11242, 11244, 11246, 11248, 11250, 11252, - 11254, 11256, 11258, 11260, 11262, 11264, 11266, 11268, 11270, 11272, - 11274, 11276, 11278, 11280, 11282, 11284, 11286, 11288, 11290, 11292, - 11294, 11296, 11298, 11300, 11302, 11304, 11306, 11308, 11310, 11312, - 11314, 11316, 11318, 11320, 11322, 11324, 11326, 11328, 11330, 11332, - 11334, 11336, 11338, 11340, 11342, 11344, 11346, 11348, 11350, 11352, - 11354, 11356, 11358, 11360, 11362, 11364, 11366, 11368, 11370, 11372, - 11374, 11376, 11378, 11380, 11382, 11384, 11386, 11388, 11390, 11392, - 11394, 11396, 11398, 11400, 11402, 11404, 11406, 11408, 11410, 11412, - 11414, 11416, 11418, 11420, 11422, 11424, 11426, 11428, 11430, 11432, - 11434, 11436, 11438, 11440, 11442, 11444, 11446, 11448, 11450, 11452, - 11454, 11456, 11458, 11460, 11462, 11464, 11466, 11468, 11470, 11472, - 11474, 11476, 11478, 11480, 11482, 11484, 11486, 11488, 11490, 11492, - 11494, 11496, 11498, 11500, 11502, 11504, 11506, 11508, 11510, 11512, - 11514, 11516, 11518, 11520, 11522, 11524, 11526, 11528, 11530, 11532, - 11534, 11536, 11538, 11540, 11542, 11544, 11546, 11548, 11550, 11552, - 11554, 11556, 11558, 11560, 11562, 11564, 11566, 11568, 11570, 11572, - 11574, 11576, 11578, 11580, 11582, 11584, 11586, 11588, 11590, 11592, - 11594, 11596, 11598, 11600, 11602, 11604, 11606, 11608, 11610, 11612, - 11614, 11616, 11618, 11620, 11622, 11624, 11626, 11628, 11630, 11632, - 11634, 11636, 11638, 11640, 11642, 11644, 11646, 11648, 11650, 11652, - 11654, 11656, 11658, 11660, 11662, 11664, 11666, 11668, 11670, 11672, - 11674, 11676, 11678, 11680, 11682, 11684, 11686, 11688, 11690, 11692, - 11694, 11696, 11698, 11700, 11702, 11704, 11706, 11708, 11710, 11712, - 11714, 11716, 11718, 11720, 11722, 11724, 11726, 11728, 11730, 11732, - 11734, 11736, 11738, 11740, 11742, 11744, 11746, 11748, 11750, 11752, - 11754, 11756, 11758, 11760, 11762, 11764, 11766, 11768, 11770, 11772, - 11774, 11776, 11778, 11780, 11782, 11784, 11786, 11788, 11790, 11792, - 11794, 11796, 0, 0, 11798, 11800, 11802, 11804, 11806, 11808, 11810, - 11812, 11814, 11816, 11818, 11820, 11822, 11824, 11826, 11828, 11830, - 11832, 11834, 11836, 11838, 11840, 11842, 11844, 11846, 11848, 11850, - 11852, 11854, 11856, 11858, 11860, 11862, 11864, 11866, 11868, 11870, - 11872, 11874, 11876, 11878, 11880, 11882, 11884, 11886, 11888, 11890, - 11892, 11894, 11896, 11898, 11900, 11902, 11904, 11906, 11908, 11910, - 11912, 11914, 11916, 11918, 11920, 11922, 11924, 11926, 11928, 11930, - 11932, 11934, 11936, 11938, 11940, 11942, 11944, 11946, 11948, 11950, - 11952, 11954, 11956, 11958, 11960, 11962, 11964, 11966, 11968, 11970, - 11972, 11974, 11976, 11978, 11980, 11982, 11984, 11986, 11988, 11990, - 11992, 11994, 11996, 11998, 12000, 12002, 12004, 12006, 12008, 12010, - 12012, 12014, 12016, 12018, 12020, 12022, 12024, 12026, 12028, 12030, - 12032, 12034, 12036, 12038, 12040, 12042, 12044, 12046, 12048, 12050, - 12052, 12054, 12056, 12058, 12060, 12062, 12064, 12066, 12068, 12070, - 12072, 12074, 12076, 12078, 12080, 12082, 12084, 12086, 12088, 12090, - 12092, 12094, 12096, 12098, 12100, 12102, 12104, 12106, 12108, 12110, - 12112, 12114, 12116, 12118, 12120, 12122, 12124, 12126, 12128, 12130, - 12132, 12134, 12136, 12138, 12140, 12142, 12144, 12146, 12148, 12150, - 12152, 12154, 12156, 12158, 12160, 12162, 12164, 12166, 12168, 12170, - 12172, 12174, 12176, 12178, 12180, 12182, 12184, 12186, 12188, 12190, - 12192, 12194, 12196, 12198, 12200, 12202, 12204, 12206, 12208, 12210, - 12212, 12214, 12216, 12218, 12220, 12222, 12224, 12226, 12228, 12230, - 12232, 12234, 12236, 12238, 12240, 12242, 12244, 12246, 12248, 12250, - 12252, 12254, 12256, 12258, 12260, 12262, 12264, 12266, 12268, 12270, - 12272, 12274, 12276, 12278, 12280, 12282, 12284, 12286, 12288, 12290, - 12292, 12294, 12296, 12298, 12300, 12302, 12304, 12306, 12308, 12310, - 12312, 12314, 12316, 12318, 12320, 12322, 12324, 12326, 12328, 12330, - 12332, 12334, 12336, 12338, 12340, 12342, 12344, 12346, 12348, 12350, - 12352, 12354, 12356, 12358, 12360, 12362, 12364, 12366, 12368, 12370, - 12372, 12374, 12376, 12378, 12380, 0, 0, 12382, 12384, 12386, 12388, - 12390, 12392, 12394, 12396, 12398, 12400, 12402, 12404, 12406, 12408, - 12410, 12412, 12414, 12416, 12418, 12420, 12422, 12424, 12426, 12428, - 12430, 12432, 12434, 12436, 12438, 12440, 12442, 12444, 12446, 12448, - 12450, 12452, 12454, 12456, 12458, 12460, 12462, 12464, 12466, 12468, - 12470, 12472, 12474, 12476, 12478, 12480, 12482, 12484, 12486, 12488, 0, - 12490, 12492, 12494, 12496, 12498, 12500, 12502, 12504, 12506, 12508, - 12510, 12512, 12514, 12516, 12518, 12520, 12522, 12524, 12526, 12528, - 12530, 12532, 12534, 12536, 12538, 12540, 12542, 0, 12544, 12546, 0, - 12548, 0, 0, 12550, 0, 12552, 12554, 12556, 12558, 12560, 12562, 12564, - 12566, 12568, 12570, 0, 12572, 12574, 12576, 12578, 0, 12580, 0, 12582, - 0, 0, 0, 0, 0, 0, 12584, 0, 0, 0, 0, 12586, 0, 12588, 0, 12590, 0, 12592, - 12594, 12596, 0, 12598, 12600, 0, 12602, 0, 0, 12604, 0, 12606, 0, 12608, - 0, 12610, 0, 12612, 0, 12614, 12616, 0, 12618, 0, 0, 12620, 12622, 12624, - 12626, 0, 12628, 12630, 12632, 12634, 12636, 12638, 12640, 0, 12642, - 12644, 12646, 12648, 0, 12650, 12652, 12654, 12656, 0, 12658, 0, 12660, - 12662, 12664, 12666, 12668, 12670, 12672, 12674, 12676, 12678, 0, 12680, - 12682, 12684, 12686, 12688, 12690, 12692, 12694, 12696, 12698, 12700, - 12702, 12704, 12706, 12708, 12710, 12712, 0, 0, 0, 0, 0, 12714, 12716, - 12718, 0, 12720, 12722, 12724, 12726, 12728, 0, 12730, 12732, 12734, - 12736, 12738, 12740, 12742, 12744, 12746, 12748, 12750, 12752, 12754, - 12756, 12758, 12760, 12762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12764, 12767, 12770, 12773, 12776, 12779, 12782, 12785, - 12788, 12791, 12794, 0, 0, 0, 0, 0, 12797, 12801, 12805, 12809, 12813, - 12817, 12821, 12825, 12829, 12833, 12837, 12841, 12845, 12849, 12853, - 12857, 12861, 12865, 12869, 12873, 12877, 12881, 12885, 12889, 12893, - 12897, 12901, 12905, 12907, 12909, 12912, 0, 12915, 12917, 12919, 12921, - 12923, 12925, 12927, 12929, 12931, 12933, 12935, 12937, 12939, 12941, - 12943, 12945, 12947, 12949, 12951, 12953, 12955, 12957, 12959, 12961, - 12963, 12965, 12967, 12970, 12973, 12976, 12979, 12983, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12986, 12989, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12995, 12998, 13001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13003, 13005, 13007, 13009, 13011, 13013, 13015, 13017, 13019, 13021, - 13023, 13025, 13027, 13029, 13031, 13033, 13035, 13037, 13039, 13041, - 13043, 13045, 13047, 13049, 13051, 13053, 13055, 13057, 13059, 13061, - 13063, 13065, 13067, 13069, 13071, 13073, 13075, 13077, 13079, 13081, - 13083, 13085, 13087, 0, 0, 0, 0, 0, 13089, 13093, 13097, 13101, 13105, - 13109, 13113, 13117, 13121, 0, 0, 0, 0, 0, 0, 0, 13125, 13127, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 13129, 13131, 13133, 13135, 13137, 13139, 13141, 13143, 13145, - 13147, 13149, 13151, 13153, 13155, 13157, 13159, 13161, 13163, 13165, - 13167, 13169, 13171, 13173, 13175, 13177, 13179, 13181, 13183, 13185, - 13187, 13189, 13191, 13193, 13195, 13197, 13199, 13201, 13203, 13205, - 13207, 13209, 13211, 13213, 13215, 13217, 13219, 13221, 13223, 13225, - 13227, 13229, 13231, 13233, 13235, 13237, 13239, 13241, 13243, 13245, - 13247, 13249, 13251, 13253, 13255, 13257, 13259, 13261, 13263, 13265, - 13267, 13269, 13271, 13273, 13275, 13277, 13279, 13281, 13283, 13285, - 13287, 13289, 13291, 13293, 13295, 13297, 13299, 13301, 13303, 13305, - 13307, 13309, 13311, 13313, 13315, 13317, 13319, 13321, 13323, 13325, - 13327, 13329, 13331, 13333, 13335, 13337, 13339, 13341, 13343, 13345, - 13347, 13349, 13351, 13353, 13355, 13357, 13359, 13361, 13363, 13365, - 13367, 13369, 13371, 13373, 13375, 13377, 13379, 13381, 13383, 13385, - 13387, 13389, 13391, 13393, 13395, 13397, 13399, 13401, 13403, 13405, - 13407, 13409, 13411, 13413, 13415, 13417, 13419, 13421, 13423, 13425, - 13427, 13429, 13431, 13433, 13435, 13437, 13439, 13441, 13443, 13445, - 13447, 13449, 13451, 13453, 13455, 13457, 13459, 13461, 13463, 13465, - 13467, 13469, 13471, 13473, 13475, 13477, 13479, 13481, 13483, 13485, - 13487, 13489, 13491, 13493, 13495, 13497, 13499, 13501, 13503, 13505, - 13507, 13509, 13511, 13513, 13515, 13517, 13519, 13521, 13523, 13525, - 13527, 13529, 13531, 13533, 13535, 13537, 13539, 13541, 13543, 13545, - 13547, 13549, 13551, 13553, 13555, 13557, 13559, 13561, 13563, 13565, - 13567, 13569, 13571, 13573, 13575, 13577, 13579, 13581, 13583, 13585, - 13587, 13589, 13591, 13593, 13595, 13597, 13599, 13601, 13603, 13605, - 13607, 13609, 13611, 13613, 13615, 13617, 13619, 13621, 13623, 13625, - 13627, 13629, 13631, 13633, 13635, 13637, 13639, 13641, 13643, 13645, - 13647, 13649, 13651, 13653, 13655, 13657, 13659, 13661, 13663, 13665, - 13667, 13669, 13671, 13673, 13675, 13677, 13679, 13681, 13683, 13685, - 13687, 13689, 13691, 13693, 13695, 13697, 13699, 13701, 13703, 13705, - 13707, 13709, 13711, 13713, 13715, 13717, 13719, 13721, 13723, 13725, - 13727, 13729, 13731, 13733, 13735, 13737, 13739, 13741, 13743, 13745, - 13747, 13749, 13751, 13753, 13755, 13757, 13759, 13761, 13763, 13765, - 13767, 13769, 13771, 13773, 13775, 13777, 13779, 13781, 13783, 13785, - 13787, 13789, 13791, 13793, 13795, 13797, 13799, 13801, 13803, 13805, - 13807, 13809, 13811, 13813, 13815, 13817, 13819, 13821, 13823, 13825, - 13827, 13829, 13831, 13833, 13835, 13837, 13839, 13841, 13843, 13845, - 13847, 13849, 13851, 13853, 13855, 13857, 13859, 13861, 13863, 13865, - 13867, 13869, 13871, 13873, 13875, 13877, 13879, 13881, 13883, 13885, - 13887, 13889, 13891, 13893, 13895, 13897, 13899, 13901, 13903, 13905, - 13907, 13909, 13911, 13913, 13915, 13917, 13919, 13921, 13923, 13925, - 13927, 13929, 13931, 13933, 13935, 13937, 13939, 13941, 13943, 13945, - 13947, 13949, 13951, 13953, 13955, 13957, 13959, 13961, 13963, 13965, - 13967, 13969, 13971, 13973, 13975, 13977, 13979, 13981, 13983, 13985, - 13987, 13989, 13991, 13993, 13995, 13997, 13999, 14001, 14003, 14005, - 14007, 14009, 14011, 14013, 14015, 14017, 14019, 14021, 14023, 14025, - 14027, 14029, 14031, 14033, 14035, 14037, 14039, 14041, 14043, 14045, - 14047, 14049, 14051, 14053, 14055, 14057, 14059, 14061, 14063, 14065, - 14067, 14069, 14071, 14073, 14075, 14077, 14079, 14081, 14083, 14085, - 14087, 14089, 14091, 14093, 14095, 14097, 14099, 14101, 14103, 14105, - 14107, 14109, 14111, 14113, 14115, 14117, 14119, 14121, 14123, 14125, - 14127, 14129, 14131, 14133, 14135, 14137, 14139, 14141, 14143, 14145, - 14147, 14149, 14151, 14153, 14155, 14157, 14159, 14161, 14163, 14165, - 14167, 14169, 14171, 14173, 14175, 14177, 14179, 14181, 14183, 14185, - 14187, 14189, 14191, 14193, 14195, 14197, 14199, 14201, 14203, 14205, - 14207, 14209, 14211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static unsigned short decomp_index2[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 6, 0, 0, 0, 0, 8, 0, 0, 11, 13, 15, 18, 0, 0, 20, 23, 25, 0, 27, + 31, 35, 0, 39, 42, 45, 48, 51, 54, 0, 57, 60, 63, 66, 69, 72, 75, 78, 81, + 0, 84, 87, 90, 93, 96, 99, 0, 0, 102, 105, 108, 111, 114, 0, 0, 117, 120, + 123, 126, 129, 132, 0, 135, 138, 141, 144, 147, 150, 153, 156, 159, 0, + 162, 165, 168, 171, 174, 177, 0, 0, 180, 183, 186, 189, 192, 0, 195, 198, + 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, + 243, 0, 0, 246, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, + 282, 285, 288, 291, 294, 297, 300, 303, 0, 0, 306, 309, 312, 315, 318, + 321, 324, 327, 330, 0, 333, 336, 339, 342, 345, 348, 0, 351, 354, 357, + 360, 363, 366, 369, 372, 0, 0, 375, 378, 381, 384, 387, 390, 393, 0, 0, + 396, 399, 402, 405, 408, 411, 0, 0, 414, 417, 420, 423, 426, 429, 432, + 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 0, 0, 468, 471, + 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, + 516, 519, 522, 525, 528, 531, 534, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 542, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 548, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 554, 557, 560, 563, 566, 569, 572, + 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, + 617, 620, 623, 0, 626, 629, 632, 635, 638, 641, 0, 0, 644, 647, 650, 653, + 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 0, 0, 692, + 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, + 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, + 779, 782, 785, 788, 791, 794, 797, 0, 0, 800, 803, 0, 0, 0, 0, 0, 0, 806, + 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 848, 850, 852, 854, 856, 858, 860, 862, 864, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 866, + 869, 872, 875, 878, 881, 0, 0, 884, 886, 888, 890, 892, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 894, 896, 0, 898, 900, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 903, 0, 0, 0, 0, + 0, 905, 0, 0, 0, 908, 0, 0, 0, 0, 0, 910, 913, 916, 919, 921, 924, 927, + 0, 930, 0, 933, 936, 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 942, 945, 948, 951, 954, 957, 960, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 963, 966, + 969, 972, 975, 0, 978, 980, 982, 984, 987, 990, 992, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 994, 996, 998, 0, + 1000, 1002, 0, 0, 0, 1004, 0, 0, 0, 0, 0, 0, 1006, 1009, 0, 1012, 0, 0, + 0, 1015, 0, 0, 0, 0, 1018, 1021, 1024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1033, 1036, 0, 1039, 0, 0, 0, 1042, 0, 0, 0, + 0, 1045, 1048, 1051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1054, 1057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1060, 1063, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1066, 1069, 1072, 1075, 0, 0, 1078, 1081, 0, 0, 1084, 1087, + 1090, 1093, 1096, 1099, 0, 0, 1102, 1105, 1108, 1111, 1114, 1117, 0, 0, + 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, + 0, 0, 1156, 1159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1162, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1165, 1168, 1171, 1174, 1177, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1180, 1183, 1186, 1189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1192, 0, 1195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1201, 0, 0, 0, + 0, 0, 0, 0, 1204, 0, 0, 1207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1210, + 1213, 1216, 1219, 1222, 1225, 1228, 1231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1234, 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1240, 1243, + 0, 1246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1249, 0, 0, 1252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1255, 1258, 1261, 0, 0, 1264, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1267, 0, 0, 1270, 1273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1276, 1279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1285, 1288, 1291, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1297, 0, 0, 0, 0, 0, 0, 1300, 1303, 0, 1306, 1309, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1312, 1315, 1318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1321, 0, 1324, 1327, 1330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1339, 1342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1347, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1350, 0, 0, 0, 0, 1353, 0, 0, 0, 0, 1356, 0, 0, 0, 0, 1359, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1365, 0, + 1368, 1371, 1374, 1377, 1380, 0, 0, 0, 0, 0, 0, 0, 1383, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1386, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1389, 0, 0, 0, 0, 1392, 0, 0, 0, 0, 1395, 0, 0, 0, 0, 1398, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1404, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1407, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1409, 0, 1412, 0, 1415, 0, 1418, 0, 1421, 0, 0, + 0, 1424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1427, 0, 1430, + 0, 0, 1433, 1436, 0, 1439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1442, 1444, 1446, 0, + 1448, 1450, 1452, 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, 0, + 1470, 1472, 1474, 1476, 1478, 1480, 1482, 1484, 1486, 1488, 1490, 1492, + 1494, 1496, 1498, 1500, 1502, 1504, 0, 1506, 1508, 1510, 1512, 1514, + 1516, 1518, 1520, 1522, 1524, 1526, 1528, 1530, 1532, 1534, 1536, 1538, + 1540, 1542, 1544, 1546, 1548, 1550, 1552, 1554, 1556, 1558, 1560, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1564, 1566, 1568, 1570, 1572, 1574, 1576, 1578, 1580, 1582, 1584, 1586, + 1588, 1590, 1592, 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, 1610, + 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, + 1636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1638, 1641, 1644, + 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, + 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, + 1719, 1722, 1725, 1728, 1731, 1734, 1737, 1740, 1743, 1746, 1749, 1752, + 1755, 1758, 1761, 1764, 1767, 1770, 1773, 1776, 1779, 1782, 1785, 1788, + 1791, 1794, 1797, 1800, 1803, 1806, 1809, 1812, 1815, 1818, 1821, 1824, + 1827, 1830, 1833, 1836, 1839, 1842, 1845, 1848, 1851, 1854, 1857, 1860, + 1863, 1866, 1869, 1872, 1875, 1878, 1881, 1884, 1887, 1890, 1893, 1896, + 1899, 1902, 1905, 1908, 1911, 1914, 1917, 1920, 1923, 1926, 1929, 1932, + 1935, 1938, 1941, 1944, 1947, 1950, 1953, 1956, 1959, 1962, 1965, 1968, + 1971, 1974, 1977, 1980, 1983, 1986, 1989, 1992, 1995, 1998, 2001, 2004, + 2007, 2010, 2013, 2016, 2019, 2022, 2025, 2028, 2031, 2034, 2037, 2040, + 2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2073, 2076, + 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 0, 0, 0, 0, 2106, + 2109, 2112, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, + 2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, + 2181, 2184, 2187, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, + 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, + 2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2283, 2286, + 2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2322, + 2325, 2328, 2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, + 2361, 2364, 2367, 2370, 2373, 0, 0, 0, 0, 0, 0, 2376, 2379, 2382, 2385, + 2388, 2391, 2394, 2397, 2400, 2403, 2406, 2409, 2412, 2415, 2418, 2421, + 2424, 2427, 2430, 2433, 2436, 2439, 0, 0, 2442, 2445, 2448, 2451, 2454, + 2457, 0, 0, 2460, 2463, 2466, 2469, 2472, 2475, 2478, 2481, 2484, 2487, + 2490, 2493, 2496, 2499, 2502, 2505, 2508, 2511, 2514, 2517, 2520, 2523, + 2526, 2529, 2532, 2535, 2538, 2541, 2544, 2547, 2550, 2553, 2556, 2559, + 2562, 2565, 2568, 2571, 0, 0, 2574, 2577, 2580, 2583, 2586, 2589, 0, 0, + 2592, 2595, 2598, 2601, 2604, 2607, 2610, 2613, 0, 2616, 0, 2619, 0, + 2622, 0, 2625, 2628, 2631, 2634, 2637, 2640, 2643, 2646, 2649, 2652, + 2655, 2658, 2661, 2664, 2667, 2670, 2673, 2676, 2679, 2681, 2684, 2686, + 2689, 2691, 2694, 2696, 2699, 2701, 2704, 2706, 2709, 0, 0, 2711, 2714, + 2717, 2720, 2723, 2726, 2729, 2732, 2735, 2738, 2741, 2744, 2747, 2750, + 2753, 2756, 2759, 2762, 2765, 2768, 2771, 2774, 2777, 2780, 2783, 2786, + 2789, 2792, 2795, 2798, 2801, 2804, 2807, 2810, 2813, 2816, 2819, 2822, + 2825, 2828, 2831, 2834, 2837, 2840, 2843, 2846, 2849, 2852, 2855, 2858, + 2861, 2864, 2867, 0, 2870, 2873, 2876, 2879, 2882, 2885, 2887, 2890, + 2893, 2895, 2898, 2901, 2904, 2907, 2910, 0, 2913, 2916, 2919, 2922, + 2924, 2927, 2929, 2932, 2935, 2938, 2941, 2944, 2947, 2950, 0, 0, 2952, + 2955, 2958, 2961, 2964, 2967, 0, 2969, 2972, 2975, 2978, 2981, 2984, + 2987, 2989, 2992, 2995, 2998, 3001, 3004, 3007, 3010, 3012, 3015, 3018, + 3020, 0, 0, 3022, 3025, 3028, 0, 3031, 3034, 3037, 3040, 3042, 3045, + 3047, 3050, 3052, 0, 3055, 3057, 3059, 3061, 3063, 3065, 3067, 3069, + 3071, 3073, 3075, 0, 0, 0, 0, 0, 0, 3077, 0, 0, 0, 0, 0, 3079, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3082, 3084, 3087, 0, 0, 0, 0, 0, 0, 0, 0, + 3091, 0, 0, 0, 3093, 3096, 0, 3100, 3103, 0, 0, 0, 0, 3107, 0, 3110, 0, + 0, 0, 0, 0, 0, 0, 0, 3113, 3116, 3119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3122, 0, 0, 0, 0, 0, 0, 0, 3127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3129, 3131, 0, 0, 3133, 3135, 3137, 3139, 3141, 3143, + 3145, 3147, 3149, 3151, 3153, 3155, 3157, 3159, 3161, 3163, 3165, 3167, + 3169, 3171, 3173, 3175, 3177, 3179, 3181, 3183, 3185, 0, 3187, 3189, + 3191, 3193, 3195, 3197, 3199, 3201, 3203, 3205, 3207, 3209, 3211, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3216, 3220, 3224, 3226, 0, 3229, 3233, 3237, 0, 3239, 3242, 3244, + 3246, 3248, 3250, 3252, 3254, 3256, 3258, 3260, 0, 3262, 3264, 0, 0, + 3267, 3269, 3271, 3273, 3275, 0, 0, 3277, 3280, 3284, 0, 3287, 0, 3289, + 0, 3291, 0, 3293, 3295, 3297, 3299, 0, 3301, 3303, 3305, 0, 3307, 3309, + 3311, 3313, 3315, 3317, 3319, 0, 3321, 3325, 3327, 3329, 3331, 3333, 0, + 0, 0, 0, 3335, 3337, 3339, 3341, 3343, 0, 0, 0, 0, 0, 0, 3345, 3349, + 3353, 3358, 3362, 3366, 3370, 3374, 3378, 3382, 3386, 3390, 3394, 3398, + 3402, 3406, 3409, 3411, 3414, 3418, 3421, 3423, 3426, 3430, 3435, 3438, + 3440, 3443, 3447, 3449, 3451, 3453, 3455, 3457, 3460, 3464, 3467, 3469, + 3472, 3476, 3481, 3484, 3486, 3489, 3493, 3495, 3497, 3499, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3505, 3508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3511, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3514, 3517, 3520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3523, 0, 0, 0, 0, 3526, + 0, 0, 3529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3532, 0, 3535, 0, 0, 0, 0, 0, 3538, 3541, 0, 3545, 3548, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3552, 0, 0, 3555, 0, 0, 3558, + 0, 3561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3564, 0, 3567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3570, 3573, 3576, 3579, + 3582, 0, 0, 3585, 3588, 0, 0, 3591, 3594, 0, 0, 0, 0, 0, 0, 3597, 3600, + 0, 0, 3603, 3606, 0, 0, 3609, 3612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3615, + 3618, 3621, 3624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3627, 3630, 3633, 3636, 0, 0, 0, 0, 0, 0, 3639, 3642, + 3645, 3648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3651, 3653, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3655, 3657, 3659, 3661, 3663, 3665, 3667, 3669, + 3671, 3673, 3676, 3679, 3682, 3685, 3688, 3691, 3694, 3697, 3700, 3703, + 3706, 3710, 3714, 3718, 3722, 3726, 3730, 3734, 3738, 3742, 3747, 3752, + 3757, 3762, 3767, 3772, 3777, 3782, 3787, 3792, 3797, 3800, 3803, 3806, + 3809, 3812, 3815, 3818, 3821, 3824, 3828, 3832, 3836, 3840, 3844, 3848, + 3852, 3856, 3860, 3864, 3868, 3872, 3876, 3880, 3884, 3888, 3892, 3896, + 3900, 3904, 3908, 3912, 3916, 3920, 3924, 3928, 3932, 3936, 3940, 3944, + 3948, 3952, 3956, 3960, 3964, 3968, 3972, 3974, 3976, 3978, 3980, 3982, + 3984, 3986, 3988, 3990, 3992, 3994, 3996, 3998, 4000, 4002, 4004, 4006, + 4008, 4010, 4012, 4014, 4016, 4018, 4020, 4022, 4024, 4026, 4028, 4030, + 4032, 4034, 4036, 4038, 4040, 4042, 4044, 4046, 4048, 4050, 4052, 4054, + 4056, 4058, 4060, 4062, 4064, 4066, 4068, 4070, 4072, 4074, 4076, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4083, 4087, 4090, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4097, 4099, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4101, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4103, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4107, + 4109, 4111, 4113, 4115, 4117, 4119, 4121, 4123, 4125, 4127, 4129, 4131, + 4133, 4135, 4137, 4139, 4141, 4143, 4145, 4147, 4149, 4151, 4153, 4155, + 4157, 4159, 4161, 4163, 4165, 4167, 4169, 4171, 4173, 4175, 4177, 4179, + 4181, 4183, 4185, 4187, 4189, 4191, 4193, 4195, 4197, 4199, 4201, 4203, + 4205, 4207, 4209, 4211, 4213, 4215, 4217, 4219, 4221, 4223, 4225, 4227, + 4229, 4231, 4233, 4235, 4237, 4239, 4241, 4243, 4245, 4247, 4249, 4251, + 4253, 4255, 4257, 4259, 4261, 4263, 4265, 4267, 4269, 4271, 4273, 4275, + 4277, 4279, 4281, 4283, 4285, 4287, 4289, 4291, 4293, 4295, 4297, 4299, + 4301, 4303, 4305, 4307, 4309, 4311, 4313, 4315, 4317, 4319, 4321, 4323, + 4325, 4327, 4329, 4331, 4333, 4335, 4337, 4339, 4341, 4343, 4345, 4347, + 4349, 4351, 4353, 4355, 4357, 4359, 4361, 4363, 4365, 4367, 4369, 4371, + 4373, 4375, 4377, 4379, 4381, 4383, 4385, 4387, 4389, 4391, 4393, 4395, + 4397, 4399, 4401, 4403, 4405, 4407, 4409, 4411, 4413, 4415, 4417, 4419, + 4421, 4423, 4425, 4427, 4429, 4431, 4433, 4435, 4437, 4439, 4441, 4443, + 4445, 4447, 4449, 4451, 4453, 4455, 4457, 4459, 4461, 4463, 4465, 4467, + 4469, 4471, 4473, 4475, 4477, 4479, 4481, 4483, 4485, 4487, 4489, 4491, + 4493, 4495, 4497, 4499, 4501, 4503, 4505, 4507, 4509, 4511, 4513, 4515, + 4517, 4519, 4521, 4523, 4525, 4527, 4529, 4531, 4533, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4537, 0, 4539, + 4541, 4543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4545, 0, + 4548, 0, 4551, 0, 4554, 0, 4557, 0, 4560, 0, 4563, 0, 4566, 0, 4569, 0, + 4572, 0, 4575, 0, 4578, 0, 0, 4581, 0, 4584, 0, 4587, 0, 0, 0, 0, 0, 0, + 4590, 4593, 0, 4596, 4599, 0, 4602, 4605, 0, 4608, 4611, 0, 4614, 4617, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4620, + 0, 0, 0, 0, 0, 0, 4623, 4626, 0, 4629, 4632, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4635, 0, 4638, 0, 4641, 0, 4644, 0, 4647, 0, 4650, 0, 4653, 0, + 4656, 0, 4659, 0, 4662, 0, 4665, 0, 4668, 0, 0, 4671, 0, 4674, 0, 4677, + 0, 0, 0, 0, 0, 0, 4680, 4683, 0, 4686, 4689, 0, 4692, 4695, 0, 4698, + 4701, 0, 4704, 4707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4710, 0, 0, 4713, 4716, 4719, 4722, 0, 0, 0, 4725, 4728, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4731, 4733, 4735, 4737, 4739, 4741, 4743, 4745, 4747, 4749, 4751, + 4753, 4755, 4757, 4759, 4761, 4763, 4765, 4767, 4769, 4771, 4773, 4775, + 4777, 4779, 4781, 4783, 4785, 4787, 4789, 4791, 4793, 4795, 4797, 4799, + 4801, 4803, 4805, 4807, 4809, 4811, 4813, 4815, 4817, 4819, 4821, 4823, + 4825, 4827, 4829, 4831, 4833, 4835, 4837, 4839, 4841, 4843, 4845, 4847, + 4849, 4851, 4853, 4855, 4857, 4859, 4861, 4863, 4865, 4867, 4869, 4871, + 4873, 4875, 4877, 4879, 4881, 4883, 4885, 4887, 4889, 4891, 4893, 4895, + 4897, 4899, 4901, 4903, 4905, 4907, 4909, 4911, 4913, 4915, 4917, 0, 0, + 0, 4919, 4921, 4923, 4925, 4927, 4929, 4931, 4933, 4935, 4937, 4939, + 4941, 4943, 4945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4947, 4951, 4955, 4959, 4963, 4967, 4971, 4975, 4979, + 4983, 4987, 4991, 4995, 4999, 5003, 5008, 5013, 5018, 5023, 5028, 5033, + 5038, 5043, 5048, 5053, 5058, 5063, 5068, 5073, 5078, 5086, 0, 5093, + 5097, 5101, 5105, 5109, 5113, 5117, 5121, 5125, 5129, 5133, 5137, 5141, + 5145, 5149, 5153, 5157, 5161, 5165, 5169, 5173, 5177, 5181, 5185, 5189, + 5193, 5197, 5201, 5205, 5209, 5213, 5217, 5221, 5225, 5229, 5233, 5237, + 5239, 5241, 5243, 0, 0, 0, 0, 0, 0, 0, 0, 5245, 5249, 5252, 5255, 5258, + 5261, 5264, 5267, 5270, 5273, 5276, 5279, 5282, 5285, 5288, 5291, 5294, + 5296, 5298, 5300, 5302, 5304, 5306, 5308, 5310, 5312, 5314, 5316, 5318, + 5320, 5322, 5325, 5328, 5331, 5334, 5337, 5340, 5343, 5346, 5349, 5352, + 5355, 5358, 5361, 5364, 5370, 5375, 0, 5378, 5380, 5382, 5384, 5386, + 5388, 5390, 5392, 5394, 5396, 5398, 5400, 5402, 5404, 5406, 5408, 5410, + 5412, 5414, 5416, 5418, 5420, 5422, 5424, 5426, 5428, 5430, 5432, 5434, + 5436, 5438, 5440, 5442, 5444, 5446, 5448, 5450, 5452, 5454, 5456, 5458, + 5460, 5462, 5464, 5466, 5468, 5470, 5472, 5474, 5476, 5479, 5482, 5485, + 5488, 5491, 5494, 5497, 5500, 5503, 5506, 5509, 5512, 5515, 5518, 5521, + 5524, 5527, 5530, 5533, 5536, 5539, 5542, 5545, 5548, 5552, 5556, 5560, + 5563, 5567, 5570, 5574, 5576, 5578, 5580, 5582, 5584, 5586, 5588, 5590, + 5592, 5594, 5596, 5598, 5600, 5602, 5604, 5606, 5608, 5610, 5612, 5614, + 5616, 5618, 5620, 5622, 5624, 5626, 5628, 5630, 5632, 5634, 5636, 5638, + 5640, 5642, 5644, 5646, 5648, 5650, 5652, 5654, 5656, 5658, 5660, 5662, + 5664, 5666, 0, 5668, 5673, 5678, 5683, 5687, 5692, 5696, 5700, 5706, + 5711, 5715, 5719, 5723, 5728, 5733, 5737, 5741, 5744, 5748, 5753, 5758, + 5761, 5767, 5774, 5780, 5784, 5790, 5796, 5801, 5805, 5809, 5813, 5818, + 5824, 5829, 5833, 5837, 5841, 5844, 5847, 5850, 5853, 5857, 5861, 5867, + 5871, 5876, 5882, 5886, 5889, 5892, 5898, 5903, 5909, 5913, 5919, 5922, + 5926, 5930, 5934, 5938, 5942, 5947, 5951, 5954, 5958, 5962, 5966, 5971, + 5975, 5979, 5983, 5989, 5994, 5997, 6003, 6006, 6011, 6016, 6020, 6024, + 6028, 6033, 6036, 6040, 6045, 6048, 6054, 6058, 6061, 6064, 6067, 6070, + 6073, 6076, 6079, 6082, 6085, 6088, 6092, 6096, 6100, 6104, 6108, 6112, + 6116, 6120, 6124, 6128, 6132, 6136, 6140, 6144, 6148, 6152, 6155, 6158, + 6162, 6165, 6168, 6171, 6175, 6179, 6182, 6185, 6188, 6191, 6194, 6199, + 6202, 6205, 6208, 6211, 6214, 6217, 6220, 6223, 6227, 6232, 6235, 6238, + 6241, 6244, 6247, 6250, 6253, 6257, 6261, 6265, 6269, 6272, 6275, 6278, + 6281, 6284, 6287, 6290, 6293, 6296, 6299, 6303, 6307, 6310, 6314, 6318, + 6322, 6325, 6329, 6333, 6338, 6341, 6345, 6349, 6353, 6357, 6363, 6370, + 6373, 6376, 6379, 6382, 6385, 6388, 6391, 6394, 6397, 6400, 6403, 6406, + 6409, 6412, 6415, 6418, 6421, 6424, 6429, 6432, 6435, 6438, 6443, 6447, + 6450, 6453, 6456, 6459, 6462, 6465, 6468, 6471, 6474, 6477, 6481, 6484, + 6487, 6491, 6495, 6498, 6503, 6507, 6510, 6513, 6516, 6519, 6523, 6527, + 6530, 6533, 6536, 6539, 6542, 6545, 6548, 6551, 6554, 6558, 6562, 6566, + 6570, 6574, 6578, 6582, 6586, 6590, 6594, 6598, 6602, 6606, 6610, 6614, + 6618, 6622, 6626, 6630, 6634, 6638, 6642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6646, 6648, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6650, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6652, 6654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6656, 6658, 6660, 6662, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6664, 6666, 6668, 6670, 6672, 6674, 6676, 6678, + 6680, 6682, 6684, 6686, 6688, 6690, 6692, 6694, 6696, 6698, 6700, 6702, + 6704, 6706, 6708, 6710, 6712, 6714, 6716, 6718, 6720, 6722, 6724, 6726, + 6728, 6730, 6732, 6734, 6736, 6738, 6740, 6742, 6744, 6746, 6748, 6750, + 6752, 6754, 6756, 6758, 6760, 6762, 6764, 6766, 6768, 6770, 6772, 6774, + 6776, 6778, 6780, 6782, 6784, 6786, 6788, 6790, 6792, 6794, 6796, 6798, + 6800, 6802, 6804, 6806, 6808, 6810, 6812, 6814, 6816, 6818, 6820, 6822, + 6824, 6826, 6828, 6830, 6832, 6834, 6836, 6838, 6840, 6842, 6844, 6846, + 6848, 6850, 6852, 6854, 6856, 6858, 6860, 6862, 6864, 6866, 6868, 6870, + 6872, 6874, 6876, 6878, 6880, 6882, 6884, 6886, 6888, 6890, 6892, 6894, + 6896, 6898, 6900, 6902, 6904, 6906, 6908, 6910, 6912, 6914, 6916, 6918, + 6920, 6922, 6924, 6926, 6928, 6930, 6932, 6934, 6936, 6938, 6940, 6942, + 6944, 6946, 6948, 6950, 6952, 6954, 6956, 6958, 6960, 6962, 6964, 6966, + 6968, 6970, 6972, 6974, 6976, 6978, 6980, 6982, 6984, 6986, 6988, 6990, + 6992, 6994, 6996, 6998, 7000, 7002, 7004, 7006, 7008, 7010, 7012, 7014, + 7016, 7018, 7020, 7022, 7024, 7026, 7028, 7030, 7032, 7034, 7036, 7038, + 7040, 7042, 7044, 7046, 7048, 7050, 7052, 7054, 7056, 7058, 7060, 7062, + 7064, 7066, 7068, 7070, 7072, 7074, 7076, 7078, 7080, 7082, 7084, 7086, + 7088, 7090, 7092, 7094, 7096, 7098, 7100, 7102, 7104, 7106, 7108, 7110, + 7112, 7114, 7116, 7118, 7120, 7122, 7124, 7126, 7128, 7130, 7132, 7134, + 7136, 7138, 7140, 7142, 7144, 7146, 7148, 7150, 7152, 7154, 7156, 7158, + 7160, 7162, 7164, 7166, 7168, 7170, 7172, 7174, 7176, 7178, 7180, 7182, + 7184, 7186, 7188, 7190, 7192, 7194, 7196, 7198, 7200, 7202, 0, 0, 7204, + 0, 7206, 0, 0, 7208, 7210, 7212, 7214, 7216, 7218, 7220, 7222, 7224, + 7226, 0, 7228, 0, 7230, 0, 0, 7232, 7234, 0, 0, 0, 7236, 7238, 7240, + 7242, 7244, 7246, 7248, 7250, 7252, 7254, 7256, 7258, 7260, 7262, 7264, + 7266, 7268, 7270, 7272, 7274, 7276, 7278, 7280, 7282, 7284, 7286, 7288, + 7290, 7292, 7294, 7296, 7298, 7300, 7302, 7304, 7306, 7308, 7310, 7312, + 7314, 7316, 7318, 7320, 7322, 7324, 7326, 7328, 7330, 7332, 7334, 7336, + 7338, 7340, 7342, 7344, 7346, 7348, 7350, 7352, 7354, 7356, 7358, 7360, + 7362, 7364, 7366, 7368, 7370, 0, 0, 7372, 7374, 7376, 7378, 7380, 7382, + 7384, 7386, 7388, 7390, 7392, 7394, 7396, 7398, 7400, 7402, 7404, 7406, + 7408, 7410, 7412, 7414, 7416, 7418, 7420, 7422, 7424, 7426, 7428, 7430, + 7432, 7434, 7436, 7438, 7440, 7442, 7444, 7446, 7448, 7450, 7452, 7454, + 7456, 7458, 7460, 7462, 7464, 7466, 7468, 7470, 7472, 7474, 7476, 7478, + 7480, 7482, 7484, 7486, 7488, 7490, 7492, 7494, 7496, 7498, 7500, 7502, + 7504, 7506, 7508, 7510, 7512, 7514, 7516, 7518, 7520, 7522, 7524, 7526, + 7528, 7530, 7532, 7534, 7536, 7538, 7540, 7542, 7544, 7546, 7548, 7550, + 7552, 7554, 7556, 7558, 7560, 7562, 7564, 7566, 7568, 7570, 7572, 7574, + 7576, 7578, 7580, 7582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7584, + 7587, 7590, 7593, 7597, 7601, 7604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7607, 7610, 7613, 7616, 7619, 0, 0, 0, 0, 0, 7622, 0, 7625, 7628, 7630, + 7632, 7634, 7636, 7638, 7640, 7642, 7644, 7646, 7648, 7651, 7654, 7657, + 7660, 7663, 7666, 7669, 7672, 7675, 7678, 7681, 7684, 0, 7687, 7690, + 7693, 7696, 7699, 0, 7702, 0, 7705, 7708, 0, 7711, 7714, 0, 7717, 7720, + 7723, 7726, 7729, 7732, 7735, 7738, 7741, 7744, 7747, 7749, 7751, 7753, + 7755, 7757, 7759, 7761, 7763, 7765, 7767, 7769, 7771, 7773, 7775, 7777, + 7779, 7781, 7783, 7785, 7787, 7789, 7791, 7793, 7795, 7797, 7799, 7801, + 7803, 7805, 7807, 7809, 7811, 7813, 7815, 7817, 7819, 7821, 7823, 7825, + 7827, 7829, 7831, 7833, 7835, 7837, 7839, 7841, 7843, 7845, 7847, 7849, + 7851, 7853, 7855, 7857, 7859, 7861, 7863, 7865, 7867, 7869, 7871, 7873, + 7875, 7877, 7879, 7881, 7883, 7885, 7887, 7889, 7891, 7893, 7895, 7897, + 7899, 7901, 7903, 7905, 7907, 7909, 7911, 7913, 7915, 7917, 7919, 7921, + 7923, 7925, 7927, 7929, 7931, 7933, 7935, 7937, 7939, 7941, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7943, 7945, 7947, 7949, 7951, 7953, 7955, 7957, 7959, + 7961, 7963, 7965, 7967, 7969, 7971, 7973, 7975, 7977, 7979, 7981, 7983, + 7985, 7987, 7989, 7992, 7995, 7998, 8001, 8004, 8007, 8010, 8013, 8016, + 8019, 8022, 8025, 8028, 8031, 8034, 8037, 8040, 8043, 8045, 8047, 8049, + 8051, 8054, 8057, 8060, 8063, 8066, 8069, 8072, 8075, 8078, 8081, 8084, + 8087, 8090, 8093, 8096, 8099, 8102, 8105, 8108, 8111, 8114, 8117, 8120, + 8123, 8126, 8129, 8132, 8135, 8138, 8141, 8144, 8147, 8150, 8153, 8156, + 8159, 8162, 8165, 8168, 8171, 8174, 8177, 8180, 8183, 8186, 8189, 8192, + 8195, 8198, 8201, 8204, 8207, 8210, 8213, 8216, 8219, 8222, 8225, 8228, + 8231, 8234, 8237, 8240, 8243, 8246, 8249, 8252, 8255, 8258, 8261, 8264, + 8267, 8270, 8273, 8276, 8279, 8282, 8285, 8288, 8291, 8294, 8297, 8300, + 8303, 8306, 8309, 8312, 8315, 8318, 8321, 8324, 8327, 8330, 8333, 8337, + 8341, 8345, 8349, 8353, 8357, 8360, 8363, 8366, 8369, 8372, 8375, 8378, + 8381, 8384, 8387, 8390, 8393, 8396, 8399, 8402, 8405, 8408, 8411, 8414, + 8417, 8420, 8423, 8426, 8429, 8432, 8435, 8438, 8441, 8444, 8447, 8450, + 8453, 8456, 8459, 8462, 8465, 8468, 8471, 8474, 8477, 8480, 8483, 8486, + 8489, 8492, 8495, 8498, 8501, 8504, 8507, 8510, 8513, 8516, 8519, 8522, + 8525, 8528, 8531, 8534, 8537, 8540, 8543, 8546, 8549, 8552, 8555, 8558, + 8561, 8564, 8567, 8570, 8573, 8576, 8579, 8582, 8585, 8588, 8591, 8594, + 8597, 8600, 8603, 8606, 8609, 8612, 8615, 8618, 8621, 8624, 8627, 8630, + 8633, 8636, 8639, 8642, 8645, 8648, 8651, 8654, 8657, 8660, 8663, 8666, + 8669, 8672, 8675, 8678, 8681, 8684, 8687, 8690, 8693, 8696, 8699, 8702, + 8705, 8708, 8711, 8714, 8717, 8720, 8723, 8726, 8729, 8732, 8735, 8738, + 8741, 8744, 8747, 8750, 8753, 8756, 8759, 8762, 8765, 8768, 8771, 8774, + 8777, 8780, 8783, 8787, 8791, 8795, 8798, 8801, 8804, 8807, 8810, 8813, + 8816, 8819, 8822, 8825, 8828, 8831, 8834, 8837, 8840, 8843, 8846, 8849, + 8852, 8855, 8858, 8861, 8864, 8867, 8870, 8873, 8876, 8879, 8882, 8885, + 8888, 8891, 8894, 8897, 8900, 8903, 8906, 8909, 8912, 8915, 8918, 8921, + 8924, 8927, 8930, 8933, 8936, 8939, 8942, 8945, 8948, 8951, 8954, 8957, + 8960, 8963, 8966, 8969, 8972, 8975, 8978, 8981, 8984, 8987, 8990, 8993, + 8996, 8999, 9002, 9005, 9008, 9011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9014, 9018, 9022, 9026, 9030, 9034, 9038, 9042, 9046, + 9050, 9054, 9058, 9062, 9066, 9070, 9074, 9078, 9082, 9086, 9090, 9094, + 9098, 9102, 9106, 9110, 9114, 9118, 9122, 9126, 9130, 9134, 9138, 9142, + 9146, 9150, 9154, 9158, 9162, 9166, 9170, 9174, 9178, 9182, 9186, 9190, + 9194, 9198, 9202, 9206, 9210, 9214, 9218, 9222, 9226, 9230, 9234, 9238, + 9242, 9246, 9250, 9254, 9258, 9262, 9266, 0, 0, 9270, 9274, 9278, 9282, + 9286, 9290, 9294, 9298, 9302, 9306, 9310, 9314, 9318, 9322, 9326, 9330, + 9334, 9338, 9342, 9346, 9350, 9354, 9358, 9362, 9366, 9370, 9374, 9378, + 9382, 9386, 9390, 9394, 9398, 9402, 9406, 9410, 9414, 9418, 9422, 9426, + 9430, 9434, 9438, 9442, 9446, 9450, 9454, 9458, 9462, 9466, 9470, 9474, + 9478, 9482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9486, 9490, + 9494, 9499, 9504, 9509, 9514, 9519, 9524, 9529, 9533, 9552, 9561, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9566, 9568, 9570, + 9572, 9574, 9576, 9578, 9580, 9582, 9584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9586, 9588, 9590, 9592, 9594, 9596, + 9598, 9600, 9602, 9604, 9606, 9608, 9610, 9612, 9614, 9616, 9618, 9620, + 9622, 9624, 9626, 0, 0, 9628, 9630, 9632, 9634, 9636, 9638, 9640, 9642, + 9644, 9646, 9648, 9650, 0, 9652, 9654, 9656, 9658, 9660, 9662, 9664, + 9666, 9668, 9670, 9672, 9674, 9676, 9678, 9680, 9682, 9684, 9686, 9688, + 0, 9690, 9692, 9694, 9696, 0, 0, 0, 0, 9698, 9701, 9704, 0, 9707, 0, + 9710, 9713, 9716, 9719, 9722, 9725, 9728, 9731, 9734, 9737, 9740, 9742, + 9744, 9746, 9748, 9750, 9752, 9754, 9756, 9758, 9760, 9762, 9764, 9766, + 9768, 9770, 9772, 9774, 9776, 9778, 9780, 9782, 9784, 9786, 9788, 9790, + 9792, 9794, 9796, 9798, 9800, 9802, 9804, 9806, 9808, 9810, 9812, 9814, + 9816, 9818, 9820, 9822, 9824, 9826, 9828, 9830, 9832, 9834, 9836, 9838, + 9840, 9842, 9844, 9846, 9848, 9850, 9852, 9854, 9856, 9858, 9860, 9862, + 9864, 9866, 9868, 9870, 9872, 9874, 9876, 9878, 9880, 9882, 9884, 9886, + 9888, 9890, 9892, 9894, 9896, 9898, 9900, 9902, 9904, 9906, 9908, 9910, + 9912, 9914, 9916, 9918, 9920, 9922, 9924, 9926, 9928, 9930, 9932, 9934, + 9936, 9938, 9940, 9942, 9944, 9946, 9948, 9950, 9952, 9954, 9956, 9958, + 9960, 9962, 9964, 9966, 9968, 9970, 9972, 9974, 9977, 9980, 9983, 9986, + 9989, 9992, 9995, 0, 0, 0, 0, 9998, 10000, 10002, 10004, 10006, 10008, + 10010, 10012, 10014, 10016, 10018, 10020, 10022, 10024, 10026, 10028, + 10030, 10032, 10034, 10036, 10038, 10040, 10042, 10044, 10046, 10048, + 10050, 10052, 10054, 10056, 10058, 10060, 10062, 10064, 10066, 10068, + 10070, 10072, 10074, 10076, 10078, 10080, 10082, 10084, 10086, 10088, + 10090, 10092, 10094, 10096, 10098, 10100, 10102, 10104, 10106, 10108, + 10110, 10112, 10114, 10116, 10118, 10120, 10122, 10124, 10126, 10128, + 10130, 10132, 10134, 10136, 10138, 10140, 10142, 10144, 10146, 10148, + 10150, 10152, 10154, 10156, 10158, 10160, 10162, 10164, 10166, 10168, + 10170, 10172, 10174, 10176, 10178, 10180, 10182, 10184, 10186, 10188, + 10190, 10192, 10194, 10196, 10198, 10200, 10202, 10204, 10206, 10208, + 10210, 10212, 10214, 10216, 10218, 10220, 10222, 10224, 10226, 10228, + 10230, 10232, 10234, 10236, 10238, 10240, 10242, 10244, 10246, 10248, + 10250, 10252, 10254, 10256, 10258, 10260, 10262, 10264, 10266, 10268, + 10270, 10272, 10274, 10276, 10278, 10280, 10282, 10284, 10286, 10288, + 10290, 10292, 10294, 10296, 10298, 10300, 10302, 10304, 10306, 10308, + 10310, 10312, 10314, 10316, 10318, 10320, 10322, 10324, 10326, 10328, + 10330, 10332, 10334, 10336, 10338, 10340, 10342, 10344, 10346, 10348, + 10350, 10352, 10354, 10356, 10358, 10360, 10362, 10364, 10366, 10368, + 10370, 10372, 10374, 10376, 0, 0, 0, 10378, 10380, 10382, 10384, 10386, + 10388, 0, 0, 10390, 10392, 10394, 10396, 10398, 10400, 0, 0, 10402, + 10404, 10406, 10408, 10410, 10412, 0, 0, 10414, 10416, 10418, 0, 0, 0, + 10420, 10422, 10424, 10426, 10428, 10430, 10432, 0, 10434, 10436, 10438, + 10440, 10442, 10444, 10446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10448, 0, 10451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10457, 10460, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10463, 10466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10469, + 10472, 0, 10475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10478, 10481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 10484, 10487, 10490, 10493, 10496, 10499, 10502, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10505, 10508, 10511, 10514, 10517, + 10520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10523, 10525, 10527, + 10529, 10531, 10533, 10535, 10537, 10539, 10541, 10543, 10545, 10547, + 10549, 10551, 10553, 10555, 10557, 10559, 10561, 10563, 10565, 10567, + 10569, 10571, 10573, 10575, 10577, 10579, 10581, 10583, 10585, 10587, + 10589, 10591, 10593, 10595, 10597, 10599, 10601, 10603, 10605, 10607, + 10609, 10611, 10613, 10615, 10617, 10619, 10621, 10623, 10625, 10627, + 10629, 10631, 10633, 10635, 10637, 10639, 10641, 10643, 10645, 10647, + 10649, 10651, 10653, 10655, 10657, 10659, 10661, 10663, 10665, 10667, + 10669, 10671, 10673, 10675, 10677, 10679, 10681, 10683, 10685, 10687, + 10689, 10691, 0, 10693, 10695, 10697, 10699, 10701, 10703, 10705, 10707, + 10709, 10711, 10713, 10715, 10717, 10719, 10721, 10723, 10725, 10727, + 10729, 10731, 10733, 10735, 10737, 10739, 10741, 10743, 10745, 10747, + 10749, 10751, 10753, 10755, 10757, 10759, 10761, 10763, 10765, 10767, + 10769, 10771, 10773, 10775, 10777, 10779, 10781, 10783, 10785, 10787, + 10789, 10791, 10793, 10795, 10797, 10799, 10801, 10803, 10805, 10807, + 10809, 10811, 10813, 10815, 10817, 10819, 10821, 10823, 10825, 10827, + 10829, 10831, 10833, 0, 10835, 10837, 0, 0, 10839, 0, 0, 10841, 10843, 0, + 0, 10845, 10847, 10849, 10851, 0, 10853, 10855, 10857, 10859, 10861, + 10863, 10865, 10867, 10869, 10871, 10873, 10875, 0, 10877, 0, 10879, + 10881, 10883, 10885, 10887, 10889, 10891, 0, 10893, 10895, 10897, 10899, + 10901, 10903, 10905, 10907, 10909, 10911, 10913, 10915, 10917, 10919, + 10921, 10923, 10925, 10927, 10929, 10931, 10933, 10935, 10937, 10939, + 10941, 10943, 10945, 10947, 10949, 10951, 10953, 10955, 10957, 10959, + 10961, 10963, 10965, 10967, 10969, 10971, 10973, 10975, 10977, 10979, + 10981, 10983, 10985, 10987, 10989, 10991, 10993, 10995, 10997, 10999, + 11001, 11003, 11005, 11007, 11009, 11011, 11013, 11015, 11017, 11019, + 11021, 0, 11023, 11025, 11027, 11029, 0, 0, 11031, 11033, 11035, 11037, + 11039, 11041, 11043, 11045, 0, 11047, 11049, 11051, 11053, 11055, 11057, + 11059, 0, 11061, 11063, 11065, 11067, 11069, 11071, 11073, 11075, 11077, + 11079, 11081, 11083, 11085, 11087, 11089, 11091, 11093, 11095, 11097, + 11099, 11101, 11103, 11105, 11107, 11109, 11111, 11113, 11115, 0, 11117, + 11119, 11121, 11123, 0, 11125, 11127, 11129, 11131, 11133, 0, 11135, 0, + 0, 0, 11137, 11139, 11141, 11143, 11145, 11147, 11149, 0, 11151, 11153, + 11155, 11157, 11159, 11161, 11163, 11165, 11167, 11169, 11171, 11173, + 11175, 11177, 11179, 11181, 11183, 11185, 11187, 11189, 11191, 11193, + 11195, 11197, 11199, 11201, 11203, 11205, 11207, 11209, 11211, 11213, + 11215, 11217, 11219, 11221, 11223, 11225, 11227, 11229, 11231, 11233, + 11235, 11237, 11239, 11241, 11243, 11245, 11247, 11249, 11251, 11253, + 11255, 11257, 11259, 11261, 11263, 11265, 11267, 11269, 11271, 11273, + 11275, 11277, 11279, 11281, 11283, 11285, 11287, 11289, 11291, 11293, + 11295, 11297, 11299, 11301, 11303, 11305, 11307, 11309, 11311, 11313, + 11315, 11317, 11319, 11321, 11323, 11325, 11327, 11329, 11331, 11333, + 11335, 11337, 11339, 11341, 11343, 11345, 11347, 11349, 11351, 11353, + 11355, 11357, 11359, 11361, 11363, 11365, 11367, 11369, 11371, 11373, + 11375, 11377, 11379, 11381, 11383, 11385, 11387, 11389, 11391, 11393, + 11395, 11397, 11399, 11401, 11403, 11405, 11407, 11409, 11411, 11413, + 11415, 11417, 11419, 11421, 11423, 11425, 11427, 11429, 11431, 11433, + 11435, 11437, 11439, 11441, 11443, 11445, 11447, 11449, 11451, 11453, + 11455, 11457, 11459, 11461, 11463, 11465, 11467, 11469, 11471, 11473, + 11475, 11477, 11479, 11481, 11483, 11485, 11487, 11489, 11491, 11493, + 11495, 11497, 11499, 11501, 11503, 11505, 11507, 11509, 11511, 11513, + 11515, 11517, 11519, 11521, 11523, 11525, 11527, 11529, 11531, 11533, + 11535, 11537, 11539, 11541, 11543, 11545, 11547, 11549, 11551, 11553, + 11555, 11557, 11559, 11561, 11563, 11565, 11567, 11569, 11571, 11573, + 11575, 11577, 11579, 11581, 11583, 11585, 11587, 11589, 11591, 11593, + 11595, 11597, 11599, 11601, 11603, 11605, 11607, 11609, 11611, 11613, + 11615, 11617, 11619, 11621, 11623, 11625, 11627, 11629, 11631, 11633, + 11635, 11637, 11639, 11641, 11643, 11645, 11647, 11649, 11651, 11653, + 11655, 11657, 11659, 11661, 11663, 11665, 11667, 11669, 11671, 11673, + 11675, 11677, 11679, 11681, 11683, 11685, 11687, 11689, 11691, 11693, + 11695, 11697, 11699, 11701, 11703, 11705, 11707, 11709, 11711, 11713, + 11715, 11717, 11719, 11721, 11723, 11725, 11727, 11729, 11731, 11733, + 11735, 11737, 11739, 11741, 11743, 11745, 11747, 11749, 11751, 11753, + 11755, 11757, 11759, 11761, 11763, 11765, 11767, 11769, 11771, 11773, + 11775, 11777, 11779, 11781, 11783, 11785, 11787, 11789, 11791, 11793, + 11795, 11797, 11799, 11801, 11803, 11805, 11807, 11809, 11811, 11813, + 11815, 11817, 11819, 11821, 11823, 11825, 11827, 11829, 0, 0, 11831, + 11833, 11835, 11837, 11839, 11841, 11843, 11845, 11847, 11849, 11851, + 11853, 11855, 11857, 11859, 11861, 11863, 11865, 11867, 11869, 11871, + 11873, 11875, 11877, 11879, 11881, 11883, 11885, 11887, 11889, 11891, + 11893, 11895, 11897, 11899, 11901, 11903, 11905, 11907, 11909, 11911, + 11913, 11915, 11917, 11919, 11921, 11923, 11925, 11927, 11929, 11931, + 11933, 11935, 11937, 11939, 11941, 11943, 11945, 11947, 11949, 11951, + 11953, 11955, 11957, 11959, 11961, 11963, 11965, 11967, 11969, 11971, + 11973, 11975, 11977, 11979, 11981, 11983, 11985, 11987, 11989, 11991, + 11993, 11995, 11997, 11999, 12001, 12003, 12005, 12007, 12009, 12011, + 12013, 12015, 12017, 12019, 12021, 12023, 12025, 12027, 12029, 12031, + 12033, 12035, 12037, 12039, 12041, 12043, 12045, 12047, 12049, 12051, + 12053, 12055, 12057, 12059, 12061, 12063, 12065, 12067, 12069, 12071, + 12073, 12075, 12077, 12079, 12081, 12083, 12085, 12087, 12089, 12091, + 12093, 12095, 12097, 12099, 12101, 12103, 12105, 12107, 12109, 12111, + 12113, 12115, 12117, 12119, 12121, 12123, 12125, 12127, 12129, 12131, + 12133, 12135, 12137, 12139, 12141, 12143, 12145, 12147, 12149, 12151, + 12153, 12155, 12157, 12159, 12161, 12163, 12165, 12167, 12169, 12171, + 12173, 12175, 12177, 12179, 12181, 12183, 12185, 12187, 12189, 12191, + 12193, 12195, 12197, 12199, 12201, 12203, 12205, 12207, 12209, 12211, + 12213, 12215, 12217, 12219, 12221, 12223, 12225, 12227, 12229, 12231, + 12233, 12235, 12237, 12239, 12241, 12243, 12245, 12247, 12249, 12251, + 12253, 12255, 12257, 12259, 12261, 12263, 12265, 12267, 12269, 12271, + 12273, 12275, 12277, 12279, 12281, 12283, 12285, 12287, 12289, 12291, + 12293, 12295, 12297, 12299, 12301, 12303, 12305, 12307, 12309, 12311, + 12313, 12315, 12317, 12319, 12321, 12323, 12325, 12327, 12329, 12331, + 12333, 12335, 12337, 12339, 12341, 12343, 12345, 12347, 12349, 12351, + 12353, 12355, 12357, 12359, 12361, 12363, 12365, 12367, 12369, 12371, + 12373, 12375, 12377, 12379, 12381, 12383, 12385, 12387, 12389, 12391, + 12393, 12395, 12397, 12399, 12401, 12403, 12405, 12407, 12409, 12411, + 12413, 0, 0, 12415, 12417, 12419, 12421, 12423, 12425, 12427, 12429, + 12431, 12433, 12435, 12437, 12439, 12441, 12443, 12445, 12447, 12449, + 12451, 12453, 12455, 12457, 12459, 12461, 12463, 12465, 12467, 12469, + 12471, 12473, 12475, 12477, 12479, 12481, 12483, 12485, 12487, 12489, + 12491, 12493, 12495, 12497, 12499, 12501, 12503, 12505, 12507, 12509, + 12511, 12513, 12515, 12517, 12519, 12521, 0, 12523, 12525, 12527, 12529, + 12531, 12533, 12535, 12537, 12539, 12541, 12543, 12545, 12547, 12549, + 12551, 12553, 12555, 12557, 12559, 12561, 12563, 12565, 12567, 12569, + 12571, 12573, 12575, 0, 12577, 12579, 0, 12581, 0, 0, 12583, 0, 12585, + 12587, 12589, 12591, 12593, 12595, 12597, 12599, 12601, 12603, 0, 12605, + 12607, 12609, 12611, 0, 12613, 0, 12615, 0, 0, 0, 0, 0, 0, 12617, 0, 0, + 0, 0, 12619, 0, 12621, 0, 12623, 0, 12625, 12627, 12629, 0, 12631, 12633, + 0, 12635, 0, 0, 12637, 0, 12639, 0, 12641, 0, 12643, 0, 12645, 0, 12647, + 12649, 0, 12651, 0, 0, 12653, 12655, 12657, 12659, 0, 12661, 12663, + 12665, 12667, 12669, 12671, 12673, 0, 12675, 12677, 12679, 12681, 0, + 12683, 12685, 12687, 12689, 0, 12691, 0, 12693, 12695, 12697, 12699, + 12701, 12703, 12705, 12707, 12709, 12711, 0, 12713, 12715, 12717, 12719, + 12721, 12723, 12725, 12727, 12729, 12731, 12733, 12735, 12737, 12739, + 12741, 12743, 12745, 0, 0, 0, 0, 0, 12747, 12749, 12751, 0, 12753, 12755, + 12757, 12759, 12761, 0, 12763, 12765, 12767, 12769, 12771, 12773, 12775, + 12777, 12779, 12781, 12783, 12785, 12787, 12789, 12791, 12793, 12795, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12797, 12800, + 12803, 12806, 12809, 12812, 12815, 12818, 12821, 12824, 12827, 0, 0, 0, + 0, 0, 12830, 12834, 12838, 12842, 12846, 12850, 12854, 12858, 12862, + 12866, 12870, 12874, 12878, 12882, 12886, 12890, 12894, 12898, 12902, + 12906, 12910, 12914, 12918, 12922, 12926, 12930, 12934, 12938, 12940, + 12942, 12945, 0, 12948, 12950, 12952, 12954, 12956, 12958, 12960, 12962, + 12964, 12966, 12968, 12970, 12972, 12974, 12976, 12978, 12980, 12982, + 12984, 12986, 12988, 12990, 12992, 12994, 12996, 12998, 13000, 13003, + 13006, 13009, 13012, 13016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13019, 13022, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 13025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13028, 13031, + 13034, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13036, 13038, 13040, 13042, + 13044, 13046, 13048, 13050, 13052, 13054, 13056, 13058, 13060, 13062, + 13064, 13066, 13068, 13070, 13072, 13074, 13076, 13078, 13080, 13082, + 13084, 13086, 13088, 13090, 13092, 13094, 13096, 13098, 13100, 13102, + 13104, 13106, 13108, 13110, 13112, 13114, 13116, 13118, 13120, 0, 0, 0, + 0, 0, 13122, 13126, 13130, 13134, 13138, 13142, 13146, 13150, 13154, 0, + 0, 0, 0, 0, 0, 0, 13158, 13160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13162, 13164, 13166, 13168, 13170, 13172, 13174, + 13176, 13178, 13180, 13182, 13184, 13186, 13188, 13190, 13192, 13194, + 13196, 13198, 13200, 13202, 13204, 13206, 13208, 13210, 13212, 13214, + 13216, 13218, 13220, 13222, 13224, 13226, 13228, 13230, 13232, 13234, + 13236, 13238, 13240, 13242, 13244, 13246, 13248, 13250, 13252, 13254, + 13256, 13258, 13260, 13262, 13264, 13266, 13268, 13270, 13272, 13274, + 13276, 13278, 13280, 13282, 13284, 13286, 13288, 13290, 13292, 13294, + 13296, 13298, 13300, 13302, 13304, 13306, 13308, 13310, 13312, 13314, + 13316, 13318, 13320, 13322, 13324, 13326, 13328, 13330, 13332, 13334, + 13336, 13338, 13340, 13342, 13344, 13346, 13348, 13350, 13352, 13354, + 13356, 13358, 13360, 13362, 13364, 13366, 13368, 13370, 13372, 13374, + 13376, 13378, 13380, 13382, 13384, 13386, 13388, 13390, 13392, 13394, + 13396, 13398, 13400, 13402, 13404, 13406, 13408, 13410, 13412, 13414, + 13416, 13418, 13420, 13422, 13424, 13426, 13428, 13430, 13432, 13434, + 13436, 13438, 13440, 13442, 13444, 13446, 13448, 13450, 13452, 13454, + 13456, 13458, 13460, 13462, 13464, 13466, 13468, 13470, 13472, 13474, + 13476, 13478, 13480, 13482, 13484, 13486, 13488, 13490, 13492, 13494, + 13496, 13498, 13500, 13502, 13504, 13506, 13508, 13510, 13512, 13514, + 13516, 13518, 13520, 13522, 13524, 13526, 13528, 13530, 13532, 13534, + 13536, 13538, 13540, 13542, 13544, 13546, 13548, 13550, 13552, 13554, + 13556, 13558, 13560, 13562, 13564, 13566, 13568, 13570, 13572, 13574, + 13576, 13578, 13580, 13582, 13584, 13586, 13588, 13590, 13592, 13594, + 13596, 13598, 13600, 13602, 13604, 13606, 13608, 13610, 13612, 13614, + 13616, 13618, 13620, 13622, 13624, 13626, 13628, 13630, 13632, 13634, + 13636, 13638, 13640, 13642, 13644, 13646, 13648, 13650, 13652, 13654, + 13656, 13658, 13660, 13662, 13664, 13666, 13668, 13670, 13672, 13674, + 13676, 13678, 13680, 13682, 13684, 13686, 13688, 13690, 13692, 13694, + 13696, 13698, 13700, 13702, 13704, 13706, 13708, 13710, 13712, 13714, + 13716, 13718, 13720, 13722, 13724, 13726, 13728, 13730, 13732, 13734, + 13736, 13738, 13740, 13742, 13744, 13746, 13748, 13750, 13752, 13754, + 13756, 13758, 13760, 13762, 13764, 13766, 13768, 13770, 13772, 13774, + 13776, 13778, 13780, 13782, 13784, 13786, 13788, 13790, 13792, 13794, + 13796, 13798, 13800, 13802, 13804, 13806, 13808, 13810, 13812, 13814, + 13816, 13818, 13820, 13822, 13824, 13826, 13828, 13830, 13832, 13834, + 13836, 13838, 13840, 13842, 13844, 13846, 13848, 13850, 13852, 13854, + 13856, 13858, 13860, 13862, 13864, 13866, 13868, 13870, 13872, 13874, + 13876, 13878, 13880, 13882, 13884, 13886, 13888, 13890, 13892, 13894, + 13896, 13898, 13900, 13902, 13904, 13906, 13908, 13910, 13912, 13914, + 13916, 13918, 13920, 13922, 13924, 13926, 13928, 13930, 13932, 13934, + 13936, 13938, 13940, 13942, 13944, 13946, 13948, 13950, 13952, 13954, + 13956, 13958, 13960, 13962, 13964, 13966, 13968, 13970, 13972, 13974, + 13976, 13978, 13980, 13982, 13984, 13986, 13988, 13990, 13992, 13994, + 13996, 13998, 14000, 14002, 14004, 14006, 14008, 14010, 14012, 14014, + 14016, 14018, 14020, 14022, 14024, 14026, 14028, 14030, 14032, 14034, + 14036, 14038, 14040, 14042, 14044, 14046, 14048, 14050, 14052, 14054, + 14056, 14058, 14060, 14062, 14064, 14066, 14068, 14070, 14072, 14074, + 14076, 14078, 14080, 14082, 14084, 14086, 14088, 14090, 14092, 14094, + 14096, 14098, 14100, 14102, 14104, 14106, 14108, 14110, 14112, 14114, + 14116, 14118, 14120, 14122, 14124, 14126, 14128, 14130, 14132, 14134, + 14136, 14138, 14140, 14142, 14144, 14146, 14148, 14150, 14152, 14154, + 14156, 14158, 14160, 14162, 14164, 14166, 14168, 14170, 14172, 14174, + 14176, 14178, 14180, 14182, 14184, 14186, 14188, 14190, 14192, 14194, + 14196, 14198, 14200, 14202, 14204, 14206, 14208, 14210, 14212, 14214, + 14216, 14218, 14220, 14222, 14224, 14226, 14228, 14230, 14232, 14234, + 14236, 14238, 14240, 14242, 14244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; /* NFC pairs */ #define COMP_SHIFT 2 static unsigned short comp_index[] = { - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 13, - 14, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 0, 19, 20, 21, 0, 0, - 0, 0, 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 0, 0, 33, 0, 0, 0, 0, 0, 0, - 0, 0, 34, 35, 36, 0, 37, 38, 39, 0, 0, 0, 0, 0, 0, 0, 40, 41, 42, 43, 44, - 45, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 0, 49, 0, 50, 51, 52, 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 55, 56, 57, - 0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 62, - 63, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 67, 68, 69, 70, 71, 72, 0, 0, 0, - 0, 0, 0, 0, 0, 73, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 76, 77, - 78, 79, 80, 81, 0, 0, 0, 0, 0, 0, 0, 82, 83, 84, 0, 85, 86, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 87, 88, 0, 89, 90, 91, 0, 0, 0, 0, 0, 0, 0, 92, 93, 94, - 95, 96, 97, 98, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 101, 102, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 110, 111, 0, 112, 0, 113, 0, 0, 0, 0, 0, 0, 0, 114, 115, 116, - 117, 118, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 121, 0, 122, 0, 0, - 0, 0, 0, 0, 0, 123, 124, 125, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, - 128, 0, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 132, 133, 134, 135, 136, 137, - 138, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 140, 141, 142, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 144, 145, 146, 0, 147, - 148, 149, 0, 0, 0, 0, 0, 0, 0, 150, 151, 152, 153, 154, 155, 156, 0, 0, - 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 160, - 0, 161, 162, 163, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 166, 167, 168, 0, - 0, 0, 0, 0, 0, 0, 169, 170, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, - 173, 174, 0, 175, 176, 177, 0, 0, 0, 0, 0, 0, 0, 178, 179, 180, 181, 182, - 183, 0, 0, 0, 0, 0, 0, 0, 0, 184, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 186, 187, 188, 189, 190, 191, 192, 0, 0, 0, 0, 0, 0, 0, 193, 194, 195, - 0, 196, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 199, 0, 200, 201, 202, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 205, 206, 207, 208, 209, 0, 0, 0, 0, 0, 0, 0, - 210, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 213, 214, 0, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, - 218, 219, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 222, 223, 0, 224, 0, - 225, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, - 228, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 240, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, - 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 260, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 264, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 266, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 283, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 287, 0, - 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 290, 0, 291, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 292, 0, 293, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 306, 0, 307, - 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 311, 0, 0, 312, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 315, 0, 316, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 321, 0, 322, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 324, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 0, 0, 0, 328, 329, 0, 330, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0, - 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, - 0, 0, 0, 337, 338, 0, 339, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, - 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 344, 345, 0, 346, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 349, - 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, - 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 355, 0, 0, 0, 0, 0, 0, 356, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 362, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 366, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 376, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, - 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 385, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 397, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 409, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 419, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, - 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 441, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 442, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 450, - 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, - 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, - 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, - 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, - 0, 0, 474, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 481, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 484, - 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, - 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, - 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, - 0, 0, 498, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, - 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, - 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 520, - 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, - 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, - 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 633, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, + 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 20, 0, 21, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 33, 34, 35, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 39, 0, + 40, 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 46, 47, 0, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, + 51, 52, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 57, 58, 59, 0, + 0, 0, 0, 0, 0, 0, 0, 60, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 63, 64, 65, 0, 66, 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, 72, 73, 0, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 77, 0, 78, 79, 80, 81, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 83, 84, 85, + 0, 86, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 89, 90, 91, 92, 93, 0, 0, + 0, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 104, 0, 0, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 107, 108, 109, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 112, 113, + 114, 115, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 124, 0, 0, 125, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 127, 128, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 130, 131, 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0, 136, 137, 138, 139, + 140, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 144, 145, 146, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 148, 149, 150, 151, 152, 153, 154, 0, 0, 0, 0, 0, 0, 0, 0, 155, 156, 157, + 158, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 166, 167, 168, 0, 0, 0, 0, 0, 0, + 0, 0, 169, 0, 0, 170, 171, 172, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 175, + 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 179, 180, 181, 182, + 183, 184, 185, 0, 0, 0, 0, 0, 0, 0, 0, 186, 187, 188, 189, 190, 191, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 194, 195, 196, 197, 198, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 201, 202, + 203, 204, 205, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 208, 0, 209, + 210, 211, 0, 0, 0, 0, 0, 0, 0, 0, 212, 213, 214, 215, 216, 217, 218, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 221, 222, 223, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 227, 228, 0, 229, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 230, 231, 232, 0, 233, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 235, + 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 249, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 251, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 255, 256, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, + 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, + 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 265, 266, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 270, 271, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 277, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 282, + 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 297, 298, 299, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 301, 0, 302, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 305, 306, 0, 307, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 309, 0, 310, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 322, 0, 0, + 323, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 326, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 327, 0, 0, 0, 328, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 330, + 331, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 336, 337, 338, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 341, + 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 345, 346, 0, + 0, 347, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 352, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, + 354, 355, 0, 356, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 359, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 361, 362, 363, 0, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, + 0, 367, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 370, 0, + 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 374, 375, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 379, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 381, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 385, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 398, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 402, 403, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 407, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, + 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 461, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, + 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, + 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, + 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, + 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 494, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, + 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 503, + 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 512, 0, + 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, + 0, 518, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 523, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, + 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, + 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, + 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 540, 0, 0, + 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 554, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 558, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 656, }; static unsigned int comp_data[] = { - 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 0, 8800, 0, 0, 0, 8815, 192, 193, 194, - 195, 256, 258, 550, 196, 7842, 197, 0, 461, 512, 514, 0, 0, 0, 7840, 0, - 7680, 0, 0, 260, 0, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0, 0, 262, - 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 199, 0, 0, 0, 0, 7690, 0, 0, 0, 0, - 270, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 200, 201, 202, 7868, - 274, 276, 278, 203, 7866, 0, 0, 282, 516, 518, 0, 0, 0, 7864, 0, 0, 0, - 552, 280, 7704, 0, 7706, 0, 0, 0, 0, 7710, 0, 0, 500, 284, 0, 7712, 286, - 288, 0, 0, 0, 0, 486, 0, 290, 0, 0, 0, 0, 292, 0, 0, 0, 7714, 7718, 0, 0, - 0, 542, 0, 7716, 0, 0, 0, 7720, 0, 0, 7722, 0, 0, 0, 204, 205, 206, 296, - 298, 300, 304, 207, 7880, 0, 0, 463, 520, 522, 0, 0, 0, 7882, 0, 0, 0, 0, - 302, 0, 0, 7724, 0, 0, 0, 0, 308, 0, 0, 7728, 0, 0, 0, 0, 0, 488, 0, - 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 313, 0, 0, 0, 0, 0, 317, 0, - 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 7742, 0, 0, 0, 0, 7744, 0, - 0, 7746, 0, 0, 504, 323, 0, 209, 0, 0, 7748, 0, 0, 0, 0, 327, 0, 7750, 0, - 0, 0, 325, 0, 7754, 0, 0, 7752, 0, 210, 211, 212, 213, 332, 334, 558, - 214, 7886, 0, 336, 465, 524, 526, 0, 0, 416, 7884, 0, 0, 0, 0, 490, 0, 0, - 7764, 0, 0, 0, 0, 7766, 0, 0, 340, 0, 0, 0, 0, 7768, 0, 0, 0, 0, 344, - 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 0, 0, 0, 0, 7774, 0, 0, 346, 348, - 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0, 536, 350, 0, 0, 0, 0, - 7786, 0, 0, 0, 0, 356, 0, 7788, 0, 0, 538, 354, 0, 7792, 0, 0, 7790, 0, - 217, 218, 219, 360, 362, 364, 0, 220, 7910, 366, 368, 467, 532, 534, 0, - 0, 431, 7908, 7794, 0, 0, 0, 370, 7798, 0, 7796, 0, 0, 0, 0, 0, 7804, 0, - 7806, 0, 0, 7808, 7810, 372, 0, 0, 0, 7814, 7812, 0, 7816, 0, 0, 0, 0, - 7818, 7820, 7922, 221, 374, 7928, 562, 0, 7822, 376, 7926, 0, 0, 0, 0, - 7924, 0, 0, 0, 377, 7824, 0, 0, 0, 379, 0, 0, 0, 0, 381, 0, 7826, 0, 0, - 0, 0, 7828, 0, 224, 225, 226, 227, 257, 259, 551, 228, 7843, 229, 0, 462, - 513, 515, 0, 0, 0, 7841, 0, 7681, 0, 0, 261, 0, 0, 0, 7683, 0, 0, 7685, - 0, 0, 0, 0, 7687, 0, 0, 263, 265, 0, 0, 0, 267, 0, 0, 0, 0, 269, 0, 231, - 0, 0, 0, 0, 7691, 0, 0, 0, 0, 271, 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, - 7695, 0, 232, 233, 234, 7869, 275, 277, 279, 235, 7867, 0, 0, 283, 517, - 519, 0, 0, 0, 7865, 0, 0, 0, 553, 281, 7705, 0, 7707, 0, 0, 0, 0, 7711, - 0, 0, 501, 285, 0, 7713, 287, 289, 0, 0, 0, 0, 487, 0, 291, 0, 0, 0, 0, - 293, 0, 0, 0, 7715, 7719, 0, 0, 0, 543, 0, 7717, 0, 0, 0, 7721, 0, 0, - 7723, 0, 7830, 0, 236, 237, 238, 297, 299, 301, 0, 239, 7881, 0, 0, 464, - 521, 523, 0, 0, 0, 7883, 0, 0, 0, 0, 303, 0, 0, 7725, 0, 0, 0, 0, 309, 0, - 0, 0, 0, 496, 0, 7729, 0, 0, 0, 0, 0, 489, 0, 7731, 0, 0, 0, 311, 0, 0, - 0, 0, 7733, 0, 0, 314, 0, 0, 0, 0, 0, 318, 0, 7735, 0, 0, 0, 316, 0, - 7741, 0, 0, 7739, 0, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0, 0, 505, - 324, 0, 241, 0, 0, 7749, 0, 0, 0, 0, 328, 0, 7751, 0, 0, 0, 326, 0, 7755, - 0, 0, 7753, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, 0, 337, 466, - 525, 527, 0, 0, 417, 7885, 0, 0, 0, 0, 491, 0, 0, 7765, 0, 0, 0, 0, 7767, - 0, 0, 341, 0, 0, 0, 0, 7769, 0, 0, 0, 0, 345, 529, 531, 0, 0, 0, 7771, 0, - 0, 0, 343, 0, 0, 0, 0, 7775, 0, 0, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0, - 353, 0, 7779, 0, 0, 537, 351, 0, 0, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, - 7789, 0, 0, 539, 355, 0, 7793, 0, 0, 7791, 0, 249, 250, 251, 361, 363, - 365, 0, 252, 7911, 367, 369, 468, 533, 535, 0, 0, 432, 7909, 7795, 0, 0, - 0, 371, 7799, 0, 7797, 0, 0, 0, 0, 0, 7805, 0, 7807, 0, 0, 7809, 7811, - 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 7817, 0, 0, 0, 0, 7819, 7821, - 7923, 253, 375, 7929, 563, 0, 7823, 255, 7927, 7833, 0, 0, 0, 7925, 0, 0, - 0, 378, 7825, 0, 0, 0, 380, 0, 0, 0, 0, 382, 0, 7827, 0, 0, 0, 0, 7829, - 0, 8173, 901, 0, 0, 8129, 0, 0, 0, 7846, 7844, 0, 7850, 7848, 0, 0, 0, - 478, 0, 0, 0, 0, 506, 0, 0, 0, 508, 0, 0, 482, 0, 0, 0, 0, 7688, 0, 0, - 7872, 7870, 0, 7876, 7874, 0, 0, 0, 0, 7726, 0, 0, 7890, 7888, 0, 7894, - 7892, 0, 0, 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 554, 0, 0, 0, 0, 510, 0, - 0, 475, 471, 0, 0, 469, 0, 0, 0, 0, 0, 0, 473, 7847, 7845, 0, 7851, 7849, - 0, 0, 0, 479, 0, 0, 0, 0, 507, 0, 0, 0, 509, 0, 0, 483, 0, 0, 0, 0, 7689, - 0, 0, 7873, 7871, 0, 7877, 7875, 0, 0, 0, 0, 7727, 0, 0, 7891, 7889, 0, - 7895, 7893, 0, 0, 0, 0, 7757, 0, 0, 557, 0, 0, 7759, 555, 0, 0, 0, 0, - 511, 0, 0, 476, 472, 0, 0, 470, 0, 0, 0, 0, 0, 0, 474, 7856, 7854, 0, - 7860, 7858, 0, 0, 0, 7857, 7855, 0, 7861, 7859, 0, 0, 0, 7700, 7702, 0, - 0, 7701, 7703, 0, 0, 7760, 7762, 0, 0, 7761, 7763, 0, 0, 0, 0, 7780, 0, - 0, 0, 7781, 0, 0, 0, 7782, 0, 0, 0, 7783, 0, 0, 7800, 0, 0, 0, 7801, 0, - 0, 0, 0, 0, 7802, 0, 0, 0, 7803, 0, 0, 7835, 0, 7900, 7898, 0, 7904, - 7902, 0, 0, 0, 0, 7906, 0, 0, 7901, 7899, 0, 7905, 7903, 0, 0, 0, 0, - 7907, 0, 0, 7914, 7912, 0, 7918, 7916, 0, 0, 0, 0, 7920, 0, 0, 7915, - 7913, 0, 7919, 7917, 0, 0, 0, 0, 7921, 0, 0, 0, 0, 0, 494, 492, 0, 0, 0, - 493, 0, 0, 0, 480, 0, 0, 0, 481, 0, 0, 0, 0, 7708, 0, 0, 0, 7709, 0, 0, - 560, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 495, 8122, 902, 0, 0, 8121, 8120, 0, - 0, 0, 0, 7944, 7945, 0, 8124, 0, 0, 8136, 904, 0, 0, 0, 0, 7960, 7961, - 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 8140, 0, 0, 8154, 906, 0, 0, 8153, - 8152, 0, 938, 0, 0, 7992, 7993, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, - 0, 8172, 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 8186, 911, - 0, 0, 0, 0, 8040, 8041, 0, 8188, 0, 0, 0, 8116, 0, 0, 0, 8132, 0, 0, - 8048, 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 7936, 7937, 8118, 8115, 0, 0, - 8050, 941, 0, 0, 0, 0, 7952, 7953, 8052, 942, 0, 0, 0, 0, 7968, 7969, - 8134, 8131, 0, 0, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 7984, 7985, - 8150, 0, 0, 0, 8056, 972, 0, 0, 0, 0, 8000, 8001, 0, 0, 8164, 8165, 8058, - 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 8016, 8017, 8166, 0, 0, 0, 8060, - 974, 0, 0, 0, 0, 8032, 8033, 8182, 8179, 0, 0, 8146, 912, 0, 0, 8151, 0, - 0, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 0, 8180, 0, 0, 0, 979, 0, 0, 0, 0, - 0, 980, 0, 0, 0, 1031, 0, 1232, 0, 1234, 0, 1027, 0, 0, 1024, 0, 0, 0, 0, - 1238, 0, 1025, 0, 1217, 0, 1244, 0, 0, 0, 1246, 1037, 0, 0, 0, 1250, - 1049, 0, 1252, 0, 1036, 0, 0, 0, 0, 0, 1254, 1262, 1038, 0, 1264, 0, 0, - 1266, 0, 0, 0, 0, 1268, 0, 0, 0, 1272, 0, 0, 0, 1260, 0, 1233, 0, 1235, - 0, 1107, 0, 0, 1104, 0, 0, 0, 0, 1239, 0, 1105, 0, 1218, 0, 1245, 0, 0, - 0, 1247, 1117, 0, 0, 0, 1251, 1081, 0, 1253, 0, 1116, 0, 0, 0, 0, 0, - 1255, 1263, 1118, 0, 1265, 0, 0, 1267, 0, 0, 0, 0, 1269, 0, 0, 0, 1273, - 0, 0, 0, 1261, 0, 0, 0, 1111, 1142, 0, 0, 0, 1143, 0, 0, 0, 0, 0, 0, - 1242, 0, 0, 0, 1243, 0, 0, 0, 1258, 0, 0, 0, 1259, 0, 0, 1570, 1571, - 1573, 0, 0, 0, 0, 0, 0, 1572, 0, 0, 0, 1574, 0, 0, 0, 1730, 0, 0, 0, - 1747, 0, 0, 0, 1728, 0, 2345, 0, 0, 0, 2353, 0, 0, 0, 2356, 0, 0, 0, 0, - 2507, 2508, 2891, 2888, 2892, 0, 2964, 0, 0, 0, 0, 0, 0, 3018, 3020, 0, - 0, 0, 0, 0, 0, 3019, 0, 3144, 0, 0, 0, 0, 0, 3264, 0, 0, 3274, 3271, - 3272, 0, 0, 0, 0, 0, 0, 3275, 0, 3402, 3404, 0, 0, 3403, 0, 0, 0, 0, 0, - 3546, 3548, 3550, 0, 0, 0, 0, 0, 3549, 0, 0, 4134, 0, 0, 0, 0, 6918, 0, - 0, 0, 6920, 0, 0, 0, 6922, 0, 0, 0, 6924, 0, 0, 0, 6926, 0, 0, 0, 6930, - 0, 0, 0, 6971, 0, 0, 0, 6973, 0, 0, 0, 6976, 0, 0, 0, 6977, 0, 0, 0, - 6979, 7736, 0, 0, 0, 7737, 0, 0, 0, 7772, 0, 0, 0, 7773, 0, 0, 0, 0, 0, - 7784, 0, 0, 0, 7785, 0, 0, 0, 7852, 0, 0, 7862, 0, 0, 0, 0, 7853, 0, 0, - 7863, 0, 0, 0, 0, 7878, 0, 0, 0, 7879, 0, 0, 0, 7896, 0, 0, 0, 7897, 0, - 7938, 7940, 0, 0, 7942, 8064, 0, 0, 7939, 7941, 0, 0, 7943, 8065, 0, 0, - 0, 8066, 0, 0, 0, 8067, 0, 0, 0, 8068, 0, 0, 0, 8069, 0, 0, 0, 8070, 0, - 0, 0, 8071, 0, 0, 7946, 7948, 0, 0, 7950, 8072, 0, 0, 7947, 7949, 0, 0, - 7951, 8073, 0, 0, 0, 8074, 0, 0, 0, 8075, 0, 0, 0, 8076, 0, 0, 0, 8077, - 0, 0, 0, 8078, 0, 0, 0, 8079, 0, 0, 7954, 7956, 0, 0, 7955, 7957, 0, 0, - 7962, 7964, 0, 0, 7963, 7965, 0, 0, 7970, 7972, 0, 0, 7974, 8080, 0, 0, - 7971, 7973, 0, 0, 7975, 8081, 0, 0, 0, 8082, 0, 0, 0, 8083, 0, 0, 0, - 8084, 0, 0, 0, 8085, 0, 0, 0, 8086, 0, 0, 0, 8087, 0, 0, 7978, 7980, 0, - 0, 7982, 8088, 0, 0, 7979, 7981, 0, 0, 7983, 8089, 0, 0, 0, 8090, 0, 0, - 0, 8091, 0, 0, 0, 8092, 0, 0, 0, 8093, 0, 0, 0, 8094, 0, 0, 0, 8095, 0, - 0, 7986, 7988, 0, 0, 7990, 0, 0, 0, 7987, 7989, 0, 0, 7991, 0, 0, 0, - 7994, 7996, 0, 0, 7998, 0, 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 0, 8002, - 8004, 0, 0, 8003, 8005, 0, 0, 8010, 8012, 0, 0, 8011, 8013, 0, 0, 8018, - 8020, 0, 0, 8022, 0, 0, 0, 8019, 8021, 0, 0, 8023, 0, 0, 0, 8027, 8029, - 0, 0, 8031, 0, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 0, 8035, 8037, 0, - 0, 8039, 8097, 0, 0, 0, 8098, 0, 0, 0, 8099, 0, 0, 0, 8100, 0, 0, 0, - 8101, 0, 0, 0, 8102, 0, 0, 0, 8103, 0, 0, 8042, 8044, 0, 0, 8046, 8104, - 0, 0, 8043, 8045, 0, 0, 8047, 8105, 0, 0, 0, 8106, 0, 0, 0, 8107, 0, 0, - 0, 8108, 0, 0, 0, 8109, 0, 0, 0, 8110, 0, 0, 0, 8111, 0, 0, 0, 8114, 0, - 0, 0, 8130, 0, 0, 0, 8178, 0, 0, 0, 8119, 0, 0, 8141, 8142, 0, 0, 8143, - 0, 0, 0, 0, 8135, 0, 0, 0, 8183, 0, 0, 8157, 8158, 0, 0, 8159, 0, 0, 0, - 0, 0, 0, 8602, 0, 0, 0, 8603, 0, 0, 0, 8622, 0, 0, 0, 8653, 0, 0, 0, - 8655, 0, 0, 0, 8654, 0, 0, 0, 8708, 0, 0, 0, 8713, 0, 0, 0, 8716, 0, 0, - 0, 8740, 0, 0, 0, 8742, 0, 0, 0, 8769, 0, 0, 0, 8772, 0, 0, 0, 8775, 0, - 0, 0, 8777, 0, 0, 0, 8813, 0, 0, 0, 8802, 0, 0, 0, 8816, 0, 0, 0, 8817, - 0, 0, 0, 8820, 0, 0, 0, 8821, 0, 0, 0, 8824, 0, 0, 0, 8825, 0, 0, 0, - 8832, 0, 0, 0, 8833, 0, 0, 0, 8928, 0, 0, 0, 8929, 0, 0, 0, 8836, 0, 0, - 0, 8837, 0, 0, 0, 8840, 0, 0, 0, 8841, 0, 0, 0, 8930, 0, 0, 0, 8931, 0, - 0, 0, 8876, 0, 0, 0, 8877, 0, 0, 0, 8878, 0, 0, 0, 8879, 0, 0, 0, 8938, - 0, 0, 0, 8939, 0, 0, 0, 8940, 0, 0, 0, 8941, 12436, 0, 0, 0, 12364, 0, 0, - 0, 12366, 0, 0, 0, 12368, 0, 0, 0, 12370, 0, 0, 0, 12372, 0, 0, 0, 12374, - 0, 0, 0, 12376, 0, 0, 0, 12378, 0, 0, 0, 12380, 0, 0, 0, 12382, 0, 0, 0, - 12384, 0, 0, 0, 12386, 0, 0, 0, 12389, 0, 0, 0, 12391, 0, 0, 0, 12393, 0, - 0, 0, 12400, 12401, 0, 0, 12403, 12404, 0, 0, 12406, 12407, 0, 0, 12409, - 12410, 0, 0, 12412, 12413, 0, 0, 12446, 0, 0, 0, 12532, 0, 0, 0, 12460, - 0, 0, 0, 12462, 0, 0, 0, 12464, 0, 0, 0, 12466, 0, 0, 0, 12468, 0, 0, 0, - 12470, 0, 0, 0, 12472, 0, 0, 0, 12474, 0, 0, 0, 12476, 0, 0, 0, 12478, 0, - 0, 0, 12480, 0, 0, 0, 12482, 0, 0, 0, 12485, 0, 0, 0, 12487, 0, 0, 0, - 12489, 0, 0, 0, 12496, 12497, 0, 0, 12499, 12500, 0, 0, 12502, 12503, 0, - 0, 12505, 12506, 0, 0, 12508, 12509, 0, 0, 12535, 0, 0, 0, 12536, 0, 0, - 0, 12537, 0, 0, 0, 12538, 0, 0, 0, 12542, 0, 0, 0, 0, 0, 69786, 0, 0, 0, - 69788, 0, 0, 0, 69803, 0, 0, 0, 0, 69934, 0, 0, 0, 69935, + 0, 0, 0, 0, 0, 0, 0, 8814, 0, 8800, 0, 0, 0, 0, 0, 8815, 0, 0, 192, 193, + 194, 195, 256, 258, 550, 196, 7842, 197, 0, 461, 512, 514, 0, 0, 0, 7840, + 0, 7680, 0, 0, 260, 0, 0, 0, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0, + 0, 0, 0, 262, 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 199, 0, + 0, 7690, 0, 0, 0, 0, 270, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, + 0, 0, 200, 201, 202, 7868, 274, 276, 278, 203, 7866, 0, 0, 282, 516, 518, + 0, 0, 0, 7864, 0, 0, 0, 552, 280, 7704, 0, 7706, 0, 0, 7710, 0, 0, 0, 0, + 500, 284, 0, 7712, 286, 288, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 290, 0, 0, + 292, 0, 0, 0, 7714, 7718, 0, 0, 0, 542, 0, 7716, 0, 0, 0, 7720, 0, 0, + 7722, 0, 0, 0, 0, 0, 204, 205, 206, 296, 298, 300, 304, 207, 7880, 0, 0, + 463, 520, 522, 0, 0, 0, 7882, 302, 0, 0, 7724, 0, 0, 308, 0, 0, 0, 0, + 7728, 0, 488, 0, 0, 0, 0, 0, 7730, 0, 0, 0, 310, 7732, 0, 0, 0, 0, 313, + 0, 0, 0, 0, 0, 317, 0, 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, + 0, 7742, 7744, 0, 0, 0, 0, 0, 0, 7746, 504, 323, 0, 209, 0, 0, 7748, 0, + 0, 0, 0, 327, 0, 7750, 0, 0, 0, 325, 0, 7754, 0, 0, 7752, 0, 0, 0, 210, + 211, 212, 213, 332, 334, 558, 214, 7886, 0, 336, 465, 524, 526, 0, 0, + 416, 7884, 490, 0, 0, 0, 0, 7764, 0, 0, 0, 0, 7766, 0, 0, 0, 0, 340, + 7768, 0, 0, 0, 0, 344, 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 7774, 0, 0, + 0, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0, 536, 350, + 0, 0, 7786, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 7788, 0, 0, 538, 354, 0, + 7792, 0, 0, 7790, 0, 0, 0, 217, 218, 219, 360, 362, 364, 0, 220, 7910, + 366, 368, 467, 532, 534, 0, 0, 431, 7908, 7794, 0, 0, 0, 370, 7798, 0, + 7796, 0, 0, 0, 7804, 0, 0, 0, 0, 0, 7806, 7808, 7810, 372, 0, 0, 0, 7814, + 7812, 0, 7816, 0, 0, 7818, 7820, 0, 0, 7922, 221, 374, 7928, 562, 0, + 7822, 376, 7926, 0, 0, 0, 0, 7924, 0, 0, 0, 0, 0, 377, 7824, 0, 0, 0, + 379, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 7826, 7828, 0, 0, 0, 224, 225, 226, + 227, 257, 259, 551, 228, 7843, 229, 0, 462, 513, 515, 0, 0, 0, 7841, 0, + 7681, 0, 0, 261, 0, 7683, 0, 0, 0, 0, 0, 0, 7685, 7687, 0, 0, 0, 0, 263, + 265, 0, 0, 0, 267, 0, 0, 0, 0, 269, 0, 231, 0, 0, 7691, 0, 0, 0, 0, 271, + 0, 0, 0, 0, 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, 7695, 0, 0, 0, 232, + 233, 234, 7869, 275, 277, 279, 235, 7867, 0, 0, 283, 517, 519, 0, 0, 0, + 7865, 0, 0, 0, 553, 281, 7705, 0, 7707, 0, 0, 7711, 0, 0, 0, 0, 501, 285, + 0, 7713, 287, 289, 0, 0, 0, 0, 487, 0, 291, 0, 0, 293, 0, 0, 0, 7715, + 7719, 0, 0, 0, 543, 0, 0, 0, 0, 0, 7717, 0, 0, 0, 7721, 0, 0, 7723, 0, + 7830, 0, 0, 0, 236, 237, 238, 297, 299, 301, 0, 239, 7881, 0, 0, 464, + 521, 523, 0, 0, 0, 7883, 0, 0, 0, 0, 303, 0, 0, 7725, 0, 0, 309, 0, 0, 0, + 0, 496, 0, 0, 0, 7729, 0, 0, 0, 0, 0, 489, 0, 7731, 0, 0, 0, 311, 0, 0, + 0, 0, 7733, 0, 0, 0, 0, 314, 0, 318, 0, 0, 0, 0, 0, 7735, 0, 0, 0, 316, + 0, 7741, 0, 0, 7739, 0, 0, 0, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0, + 0, 0, 0, 505, 324, 0, 241, 0, 0, 7749, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, + 7751, 0, 0, 0, 326, 0, 7755, 0, 0, 7753, 0, 0, 0, 242, 243, 244, 245, + 333, 335, 559, 246, 7887, 0, 337, 466, 525, 527, 0, 0, 417, 7885, 0, 0, + 0, 0, 491, 0, 0, 0, 0, 7765, 7767, 0, 0, 0, 0, 341, 0, 0, 0, 0, 7769, 0, + 0, 0, 0, 345, 529, 531, 0, 0, 0, 7771, 0, 0, 0, 343, 0, 0, 0, 0, 7775, 0, + 0, 0, 0, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 7779, + 0, 0, 537, 351, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, 7789, 0, 0, 539, 355, + 0, 7793, 0, 0, 7791, 0, 0, 0, 249, 250, 251, 361, 363, 365, 0, 252, 7911, + 367, 369, 468, 533, 535, 0, 0, 432, 7909, 7795, 0, 0, 0, 371, 7799, 0, + 7797, 0, 0, 0, 7805, 0, 7807, 0, 0, 0, 0, 7809, 7811, 373, 0, 0, 0, 7815, + 7813, 0, 7832, 0, 0, 0, 7817, 0, 0, 7819, 7821, 0, 0, 7923, 253, 375, + 7929, 563, 0, 7823, 255, 7927, 7833, 0, 0, 0, 7925, 0, 378, 7825, 0, 0, + 0, 380, 0, 0, 0, 0, 382, 0, 7827, 0, 0, 0, 0, 7829, 0, 0, 0, 8173, 901, + 0, 0, 8129, 0, 7846, 7844, 0, 7850, 7848, 0, 0, 0, 0, 0, 478, 0, 0, 506, + 0, 0, 0, 0, 0, 508, 0, 0, 482, 0, 0, 7688, 0, 0, 0, 0, 7872, 7870, 0, + 7876, 0, 0, 0, 0, 7874, 0, 0, 7726, 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, + 0, 0, 0, 7892, 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 554, 0, 0, 510, + 0, 0, 0, 0, 475, 471, 0, 0, 469, 0, 0, 473, 0, 0, 7847, 7845, 0, 7851, + 7849, 0, 0, 0, 0, 0, 479, 0, 0, 507, 0, 0, 0, 0, 0, 509, 0, 0, 483, 0, 0, + 7689, 0, 0, 0, 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 7727, 0, + 0, 0, 0, 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, 0, 0, 7757, 0, 0, 557, 0, + 0, 7759, 0, 0, 555, 0, 0, 511, 0, 0, 0, 0, 476, 472, 0, 0, 470, 0, 0, + 474, 0, 0, 7856, 7854, 0, 7860, 7858, 0, 0, 0, 0, 0, 7857, 7855, 0, 7861, + 0, 0, 0, 0, 7859, 0, 7700, 7702, 0, 0, 0, 0, 7701, 7703, 7760, 7762, 0, + 0, 0, 0, 7761, 7763, 0, 0, 7780, 0, 7781, 0, 0, 0, 0, 0, 7782, 0, 7783, + 0, 0, 0, 0, 7800, 0, 0, 0, 0, 0, 7801, 0, 0, 0, 7802, 0, 7803, 0, 0, 0, + 0, 7835, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, 0, 0, 7902, 0, 0, 0, 0, + 7906, 7901, 7899, 0, 7905, 7903, 0, 0, 0, 0, 7907, 0, 0, 0, 0, 7914, + 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, 7920, 7915, 7913, 0, 7919, + 7917, 0, 0, 0, 0, 7921, 0, 0, 0, 494, 0, 0, 492, 0, 0, 0, 0, 0, 493, 0, + 480, 0, 0, 0, 0, 0, 481, 0, 0, 7708, 0, 0, 0, 0, 0, 7709, 560, 0, 0, 0, + 0, 0, 561, 0, 0, 0, 0, 495, 0, 0, 8122, 902, 0, 0, 8121, 8120, 7944, + 7945, 0, 0, 0, 0, 0, 8124, 8136, 904, 0, 0, 0, 0, 7960, 7961, 0, 0, 8138, + 905, 7976, 7977, 0, 0, 0, 0, 0, 8140, 8154, 906, 0, 0, 8153, 8152, 0, + 938, 0, 0, 7992, 7993, 0, 0, 8184, 908, 8008, 8009, 0, 0, 0, 0, 0, 8172, + 0, 0, 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 0, 0, 8186, + 911, 0, 0, 0, 0, 8040, 8041, 0, 8188, 0, 0, 0, 0, 0, 8116, 0, 8132, 0, 0, + 0, 0, 8048, 940, 0, 0, 8113, 8112, 7936, 7937, 0, 0, 0, 0, 8118, 8115, + 8050, 941, 0, 0, 0, 0, 7952, 7953, 0, 0, 8052, 942, 7968, 7969, 0, 0, 0, + 0, 8134, 8131, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 7984, 7985, + 8150, 0, 0, 0, 0, 0, 8056, 972, 8000, 8001, 0, 0, 0, 0, 8164, 8165, 0, 0, + 8058, 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 8016, 8017, 0, 0, 0, 0, 8166, + 0, 8060, 974, 0, 0, 0, 0, 8032, 8033, 8182, 8179, 0, 0, 0, 0, 8146, 912, + 0, 0, 8151, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 0, 0, 0, 8180, 0, 979, 0, + 0, 0, 0, 0, 980, 0, 1031, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 1027, 1024, 0, + 0, 0, 0, 1238, 0, 1025, 0, 0, 0, 1217, 0, 1244, 0, 0, 0, 0, 0, 1246, 0, + 0, 1037, 0, 0, 0, 1250, 1049, 0, 1252, 0, 0, 0, 1036, 0, 0, 0, 1254, 0, + 0, 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 1268, 0, 0, 0, 0, 0, 1272, 0, + 1260, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 1107, 1104, 0, 0, 0, 0, 1239, 0, + 1105, 0, 0, 0, 1218, 0, 1245, 0, 0, 0, 0, 0, 1247, 0, 0, 1117, 0, 0, 0, + 1251, 1081, 0, 1253, 0, 0, 0, 1116, 0, 0, 0, 1255, 0, 0, 1263, 1118, 0, + 1265, 0, 0, 1267, 0, 0, 1269, 0, 0, 0, 0, 0, 1273, 0, 1261, 0, 0, 0, 0, + 0, 1111, 0, 0, 1142, 0, 1143, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 1243, 0, + 1258, 0, 0, 0, 0, 0, 1259, 1570, 1571, 1573, 0, 0, 0, 0, 1572, 0, 1574, + 0, 0, 0, 0, 0, 1730, 0, 1747, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 2345, 0, + 2353, 0, 0, 0, 0, 0, 2356, 0, 0, 2507, 2508, 0, 0, 2891, 2888, 2892, 0, + 0, 0, 2964, 0, 0, 0, 0, 3018, 3020, 0, 0, 0, 0, 3019, 0, 0, 0, 3144, 0, + 0, 0, 3264, 3274, 3271, 3272, 0, 0, 0, 0, 3275, 0, 0, 0, 3402, 3404, 0, + 0, 0, 0, 3403, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 3549, 4134, 0, 0, 0, + 0, 0, 0, 6918, 0, 6920, 0, 0, 0, 0, 0, 6922, 0, 6924, 0, 0, 0, 0, 0, + 6926, 0, 6930, 0, 0, 0, 0, 0, 6971, 0, 6973, 0, 0, 0, 0, 0, 6976, 0, + 6977, 0, 0, 0, 0, 0, 6979, 0, 0, 7736, 0, 7737, 0, 0, 0, 0, 0, 7772, 0, + 7773, 0, 0, 0, 7784, 0, 0, 0, 0, 0, 7785, 0, 7852, 0, 0, 7862, 0, 0, + 7853, 0, 0, 7863, 0, 0, 7878, 0, 0, 0, 0, 0, 7879, 0, 7896, 0, 0, 0, 0, + 0, 7897, 0, 0, 0, 7938, 7940, 0, 0, 7942, 8064, 7939, 7941, 0, 0, 7943, + 8065, 0, 0, 0, 0, 0, 8066, 0, 8067, 0, 0, 0, 0, 0, 8068, 0, 8069, 0, 0, + 0, 0, 0, 8070, 0, 8071, 0, 0, 0, 0, 7946, 7948, 0, 0, 7950, 8072, 7947, + 7949, 0, 0, 7951, 8073, 0, 0, 0, 0, 0, 8074, 0, 8075, 0, 0, 0, 0, 0, + 8076, 0, 8077, 0, 0, 0, 0, 0, 8078, 0, 8079, 0, 0, 0, 0, 7954, 7956, + 7955, 7957, 0, 0, 0, 0, 7962, 7964, 7963, 7965, 0, 0, 0, 0, 7970, 7972, + 0, 0, 7974, 8080, 7971, 7973, 0, 0, 7975, 8081, 0, 0, 0, 0, 0, 8082, 0, + 8083, 0, 0, 0, 0, 0, 8084, 0, 8085, 0, 0, 0, 0, 0, 8086, 0, 8087, 0, 0, + 0, 0, 7978, 7980, 0, 0, 7982, 8088, 7979, 7981, 0, 0, 7983, 8089, 0, 0, + 0, 0, 0, 8090, 0, 8091, 0, 0, 0, 0, 0, 8092, 0, 8093, 0, 0, 0, 0, 0, + 8094, 0, 8095, 0, 0, 0, 0, 7986, 7988, 0, 0, 7990, 0, 7987, 7989, 0, 0, + 7991, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 7998, 0, 7995, 7997, 0, 0, 7999, + 0, 0, 0, 0, 0, 8002, 8004, 8003, 8005, 0, 0, 0, 0, 8010, 8012, 8011, + 8013, 0, 0, 0, 0, 8018, 8020, 0, 0, 8022, 0, 8019, 8021, 0, 0, 8023, 0, + 0, 0, 0, 0, 8027, 8029, 0, 0, 8031, 0, 8034, 8036, 0, 0, 8038, 8096, 0, + 0, 0, 0, 8035, 8037, 0, 0, 8039, 8097, 0, 8098, 0, 0, 0, 0, 0, 8099, 0, + 8100, 0, 0, 0, 0, 0, 8101, 0, 8102, 0, 0, 0, 0, 0, 8103, 8042, 8044, 0, + 0, 8046, 8104, 0, 0, 0, 0, 8043, 8045, 0, 0, 8047, 8105, 0, 8106, 0, 0, + 0, 0, 0, 8107, 0, 8108, 0, 0, 0, 0, 0, 8109, 0, 8110, 0, 0, 0, 0, 0, + 8111, 0, 8114, 0, 0, 0, 0, 0, 8130, 0, 8178, 0, 0, 0, 0, 0, 8119, 8141, + 8142, 0, 0, 8143, 0, 0, 0, 0, 0, 0, 8135, 0, 8183, 0, 0, 0, 0, 8157, + 8158, 0, 0, 8159, 0, 0, 0, 0, 8602, 0, 8603, 0, 0, 0, 0, 0, 8622, 0, + 8653, 0, 0, 0, 0, 0, 8655, 0, 8654, 0, 0, 0, 0, 0, 8708, 0, 8713, 0, 0, + 0, 0, 0, 8716, 0, 8740, 0, 0, 0, 0, 0, 8742, 0, 8769, 0, 0, 0, 0, 0, + 8772, 0, 8775, 0, 0, 0, 0, 0, 8777, 0, 8813, 0, 0, 0, 0, 0, 8802, 0, + 8816, 0, 0, 0, 0, 0, 8817, 0, 8820, 0, 0, 0, 0, 0, 8821, 0, 8824, 0, 0, + 0, 0, 0, 8825, 0, 8832, 0, 0, 0, 0, 0, 8833, 0, 8928, 0, 0, 0, 0, 0, + 8929, 0, 8836, 0, 0, 0, 0, 0, 8837, 0, 8840, 0, 0, 0, 0, 0, 8841, 0, + 8930, 0, 0, 0, 0, 0, 8931, 0, 8876, 0, 0, 0, 0, 0, 8877, 0, 8878, 0, 0, + 0, 0, 0, 8879, 0, 8938, 0, 0, 0, 0, 0, 8939, 0, 8940, 0, 0, 0, 0, 0, + 8941, 0, 0, 12436, 0, 12364, 0, 0, 0, 0, 0, 12366, 0, 12368, 0, 0, 0, 0, + 0, 12370, 0, 12372, 0, 0, 0, 0, 0, 12374, 0, 12376, 0, 0, 0, 0, 0, 12378, + 0, 12380, 0, 0, 0, 0, 0, 12382, 0, 12384, 0, 0, 0, 0, 0, 12386, 0, 12389, + 0, 0, 0, 0, 0, 12391, 0, 12393, 0, 0, 0, 0, 0, 12400, 12401, 12403, + 12404, 0, 0, 0, 0, 12406, 12407, 12409, 12410, 0, 0, 0, 0, 12412, 12413, + 12446, 0, 0, 0, 0, 0, 12532, 0, 12460, 0, 0, 0, 0, 0, 12462, 0, 12464, 0, + 0, 0, 0, 0, 12466, 0, 12468, 0, 0, 0, 0, 0, 12470, 0, 12472, 0, 0, 0, 0, + 0, 12474, 0, 12476, 0, 0, 0, 0, 0, 12478, 0, 12480, 0, 0, 0, 0, 0, 12482, + 0, 12485, 0, 0, 0, 0, 0, 12487, 0, 12489, 0, 0, 0, 0, 0, 12496, 12497, + 12499, 12500, 0, 0, 0, 0, 12502, 12503, 12505, 12506, 0, 0, 0, 0, 12508, + 12509, 12535, 0, 0, 0, 0, 0, 12536, 0, 12537, 0, 0, 0, 0, 0, 12538, 0, + 12542, 0, 0, 0, 69786, 0, 0, 0, 0, 0, 69788, 0, 69803, 0, 0, 0, 0, 0, 0, + 69934, 0, 69935, 0, 0, 70475, 70476, 0, 0, 70844, 70843, 70846, 0, 0, + 71098, 0, 0, 0, 0, 0, 71099, }; static const change_record change_records_3_2_0[] = { @@ -5210,73 +5674,74 @@ static const change_record change_records_3_2_0[] = { }; static unsigned char changes_3_2_0_index[] = { 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 2, 2, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 2, 2, 2, 37, 38, 2, 39, 2, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 2, 51, 2, 2, 52, 53, 54, 55, 56, 2, 57, 58, 59, 60, 2, 2, 61, 62, 63, - 64, 65, 65, 2, 2, 2, 2, 66, 2, 67, 68, 69, 70, 71, 2, 2, 2, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 2, 2, 2, 2, 2, 2, 82, 2, 2, 2, 2, 2, 83, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 84, 2, 85, 2, 2, 2, 2, 2, 2, 2, 2, 86, - 87, 2, 2, 2, 2, 2, 2, 2, 88, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 89, 90, + 19, 20, 21, 22, 23, 24, 25, 2, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 2, 2, 2, 38, 39, 2, 40, 2, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 2, 52, 2, 2, 53, 54, 55, 56, 57, 2, 58, 59, 60, 61, 2, 2, 62, 63, + 64, 65, 66, 66, 2, 2, 2, 2, 67, 68, 69, 70, 71, 72, 73, 2, 2, 2, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 2, 2, 2, 2, 2, 2, 84, 2, 2, 2, 2, 2, 85, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 91, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 86, 2, 87, 2, 2, 2, 2, 2, 2, 2, 2, + 88, 89, 2, 2, 2, 2, 2, 2, 2, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 91, + 92, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 93, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 92, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 93, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 94, 95, 2, 2, 2, 2, 2, 2, 2, 2, 96, 49, 49, - 97, 98, 49, 99, 100, 101, 102, 103, 104, 105, 106, 107, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 94, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 95, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 96, 97, 2, 2, 2, 2, 2, 2, 2, 2, 98, 50, 50, + 99, 100, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 108, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 110, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 109, 110, 111, 112, 113, 114, 2, 2, 2, 115, 116, 2, 117, 118, - 119, 120, 121, 122, 2, 123, 124, 125, 126, 127, 2, 2, 2, 2, 2, 2, 128, 2, - 129, 130, 131, 2, 132, 2, 133, 2, 2, 2, 134, 2, 2, 2, 135, 136, 137, 138, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 139, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 49, 49, 49, 49, 49, 49, 140, 2, 141, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 49, 49, 49, 49, 49, 49, 49, - 49, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 111, 112, 113, 114, 115, 116, 2, 2, 117, 118, 119, 2, 120, + 121, 122, 123, 124, 125, 2, 126, 127, 128, 129, 130, 131, 2, 50, 50, 132, + 2, 133, 134, 135, 136, 137, 138, 139, 140, 141, 2, 2, 2, 142, 2, 2, 2, + 143, 144, 145, 146, 147, 148, 149, 2, 2, 150, 2, 151, 152, 153, 2, 2, 2, + 154, 2, 2, 2, 155, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, + 50, 156, 157, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 50, 50, 50, 50, 50, 50, 50, 50, 158, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 49, 49, 49, 49, 143, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 144, 145, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, + 50, 50, 159, 160, 161, 162, 2, 2, 2, 2, 2, 2, 163, 164, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 146, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 165, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 166, 167, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 168, 2, + 169, 2, 170, 2, 2, 171, 2, 2, 2, 172, 173, 174, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 147, 2, 148, 2, 149, 2, 2, 150, 2, 2, 2, 151, 152, - 153, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 154, 155, - 2, 2, 156, 157, 158, 159, 160, 2, 161, 162, 163, 164, 165, 166, 167, 148, - 168, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 169, 170, 93, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 82, 171, 2, 172, 173, 2, 2, 2, + 50, 175, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 176, 177, 2, 2, 178, 179, 180, + 181, 182, 2, 183, 184, 50, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 194, 195, 95, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 84, 196, 2, 197, 198, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 174, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 175, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 176, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 199, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 200, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 201, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 177, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 178, 49, 179, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 203, 50, 204, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 199, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 174, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5511,7 +5976,7 @@ static unsigned char changes_3_2_0_index[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 49, 180, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 50, 205, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5575,7 +6040,7 @@ static unsigned char changes_3_2_0_index[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, }; static unsigned char changes_3_2_0_data[] = { @@ -5611,7 +6076,7 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 10, 0, 9, 9, 0, 0, 0, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5623,16 +6088,16 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5660,16 +6125,16 @@ static unsigned char changes_3_2_0_data[] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5696,18 +6161,18 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 20, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5716,64 +6181,67 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, - 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5781,66 +6249,68 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, @@ -5850,209 +6320,214 @@ static unsigned char changes_3_2_0_data[] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 35, 4, 0, 0, 36, 37, 38, 39, 40, 41, 1, 1, 0, 0, 0, - 4, 35, 8, 6, 7, 36, 37, 38, 39, 40, 41, 1, 1, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 35, 4, 0, 0, 36, 37, 38, + 39, 40, 41, 1, 1, 0, 0, 0, 4, 35, 8, 6, 7, 36, 37, 38, 39, 40, 41, 1, 1, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 43, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 45, 46, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 9, 9, 9, + 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 9, 9, 9, 9, + 34, 34, 34, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6061,493 +6536,616 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 9, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, - 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, - 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, + 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, - 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, + 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, - 9, 0, 9, 0, 9, 0, 9, 0, 9, 9, 0, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, - 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, + 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9, + 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 9, 0, 9, 0, 0, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const change_record* get_change_3_2_0(Py_UCS4 n) diff --git a/Modules/unicodename_db.h b/Modules/unicodename_db.h index 7ccb1261f5..dd05f852b5 100644 --- a/Modules/unicodename_db.h +++ b/Modules/unicodename_db.h @@ -4,76 +4,75 @@ /* lexicon */ static unsigned char lexicon[] = { - 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 89, 76, 76, 65, 66, 76, - 197, 83, 77, 65, 76, 204, 83, 73, 71, 206, 67, 65, 80, 73, 84, 65, 204, - 76, 65, 84, 73, 206, 89, 201, 65, 82, 65, 66, 73, 195, 67, 74, 203, 77, + 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 73, 71, 206, 83, 89, 76, + 76, 65, 66, 76, 197, 83, 77, 65, 76, 204, 67, 65, 80, 73, 84, 65, 204, + 76, 65, 84, 73, 206, 65, 82, 65, 66, 73, 195, 89, 201, 67, 74, 203, 77, 65, 84, 72, 69, 77, 65, 84, 73, 67, 65, 204, 69, 71, 89, 80, 84, 73, 65, - 206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 67, 79, 77, 80, 65, 84, 73, - 66, 73, 76, 73, 84, 217, 67, 85, 78, 69, 73, 70, 79, 82, 205, 83, 89, 77, - 66, 79, 204, 70, 79, 82, 77, 128, 67, 65, 78, 65, 68, 73, 65, 206, 83, - 89, 76, 76, 65, 66, 73, 67, 211, 66, 65, 77, 85, 205, 68, 73, 71, 73, - 212, 65, 78, 196, 66, 79, 76, 196, 72, 65, 78, 71, 85, 204, 86, 79, 87, - 69, 204, 71, 82, 69, 69, 203, 76, 73, 71, 65, 84, 85, 82, 197, 77, 85, - 83, 73, 67, 65, 204, 69, 84, 72, 73, 79, 80, 73, 195, 84, 73, 77, 69, - 211, 70, 79, 210, 73, 84, 65, 76, 73, 195, 67, 89, 82, 73, 76, 76, 73, - 195, 82, 65, 68, 73, 67, 65, 204, 83, 65, 78, 83, 45, 83, 69, 82, 73, - 198, 84, 65, 77, 73, 204, 67, 73, 82, 67, 76, 69, 196, 67, 79, 77, 66, - 73, 78, 73, 78, 199, 84, 65, 201, 70, 73, 78, 65, 204, 86, 65, 201, 83, - 81, 85, 65, 82, 197, 76, 69, 70, 212, 82, 73, 71, 72, 212, 86, 65, 82, - 73, 65, 84, 73, 79, 206, 66, 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, - 82, 206, 65, 66, 79, 86, 69, 128, 66, 89, 90, 65, 78, 84, 73, 78, 197, - 83, 73, 71, 78, 128, 66, 69, 76, 79, 87, 128, 68, 79, 85, 66, 76, 197, - 73, 83, 79, 76, 65, 84, 69, 196, 78, 85, 77, 66, 69, 210, 75, 65, 84, 65, - 75, 65, 78, 193, 194, 77, 79, 68, 73, 70, 73, 69, 210, 68, 79, 212, 75, - 65, 78, 71, 88, 201, 65, 128, 76, 73, 78, 69, 65, 210, 84, 73, 66, 69, - 84, 65, 206, 79, 198, 73, 78, 73, 84, 73, 65, 204, 77, 69, 69, 205, 86, - 69, 82, 84, 73, 67, 65, 204, 77, 89, 65, 78, 77, 65, 210, 85, 128, 75, - 72, 77, 69, 210, 87, 72, 73, 84, 197, 65, 66, 79, 86, 197, 67, 65, 82, - 82, 73, 69, 210, 73, 128, 65, 82, 82, 79, 87, 128, 89, 69, 200, 79, 128, - 77, 65, 82, 75, 128, 65, 82, 82, 79, 215, 67, 79, 80, 84, 73, 195, 80, - 72, 65, 83, 69, 45, 197, 77, 79, 78, 71, 79, 76, 73, 65, 206, 68, 69, 86, - 65, 78, 65, 71, 65, 82, 201, 66, 76, 65, 67, 203, 84, 73, 76, 197, 83, - 89, 77, 66, 79, 76, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 90, 69, - 196, 84, 72, 65, 205, 74, 79, 78, 71, 83, 69, 79, 78, 199, 83, 84, 82, - 79, 75, 69, 128, 83, 81, 85, 65, 82, 69, 196, 66, 79, 216, 72, 69, 66, - 82, 69, 215, 77, 73, 65, 207, 80, 76, 85, 211, 82, 73, 71, 72, 84, 87, - 65, 82, 68, 211, 71, 69, 79, 82, 71, 73, 65, 206, 68, 82, 65, 87, 73, 78, - 71, 211, 67, 72, 79, 83, 69, 79, 78, 199, 72, 65, 76, 70, 87, 73, 68, 84, - 200, 66, 65, 76, 73, 78, 69, 83, 197, 72, 79, 79, 75, 128, 213, 84, 87, - 79, 128, 73, 68, 69, 79, 71, 82, 65, 205, 80, 72, 65, 83, 69, 45, 196, - 65, 76, 67, 72, 69, 77, 73, 67, 65, 204, 65, 76, 69, 198, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 73, 195, 79, 78, 69, 128, 84, 79, 128, 84, 87, 207, - 72, 69, 65, 86, 217, 79, 86, 69, 210, 67, 79, 78, 83, 79, 78, 65, 78, - 212, 66, 82, 65, 72, 77, 201, 83, 67, 82, 73, 80, 212, 85, 208, 76, 79, - 215, 72, 65, 200, 79, 78, 197, 68, 79, 87, 206, 72, 73, 71, 200, 70, 85, - 76, 76, 87, 73, 68, 84, 200, 66, 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, - 65, 204, 84, 65, 199, 66, 65, 82, 128, 68, 79, 77, 73, 78, 207, 78, 85, - 77, 69, 82, 73, 195, 70, 82, 65, 75, 84, 85, 210, 84, 72, 82, 69, 197, - 67, 72, 65, 82, 65, 67, 84, 69, 210, 77, 65, 76, 65, 89, 65, 76, 65, 205, - 80, 72, 65, 83, 69, 45, 195, 84, 79, 78, 197, 68, 79, 85, 66, 76, 69, 45, - 83, 84, 82, 85, 67, 203, 76, 69, 70, 84, 87, 65, 82, 68, 211, 72, 73, 82, - 65, 71, 65, 78, 193, 65, 67, 85, 84, 69, 128, 74, 85, 78, 71, 83, 69, 79, - 78, 199, 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, 66, 69, 78, 71, 65, 76, - 201, 77, 69, 68, 73, 65, 204, 84, 69, 76, 85, 71, 213, 86, 79, 67, 65, - 76, 73, 195, 65, 82, 77, 69, 78, 73, 65, 206, 74, 69, 69, 205, 78, 69, - 71, 65, 84, 73, 86, 197, 73, 68, 69, 79, 71, 82, 65, 80, 200, 74, 65, 86, - 65, 78, 69, 83, 197, 79, 82, 73, 89, 193, 84, 72, 82, 69, 69, 128, 87, - 69, 83, 84, 45, 67, 82, 69, 197, 70, 79, 85, 82, 128, 72, 65, 128, 72, - 65, 76, 198, 77, 65, 82, 203, 75, 65, 78, 78, 65, 68, 193, 78, 69, 215, - 80, 72, 65, 83, 69, 45, 193, 84, 72, 65, 201, 67, 72, 69, 82, 79, 75, 69, - 197, 68, 79, 84, 211, 71, 85, 74, 65, 82, 65, 84, 201, 67, 72, 65, 205, - 76, 85, 197, 83, 72, 65, 82, 65, 68, 193, 83, 73, 78, 72, 65, 76, 193, - 75, 65, 128, 82, 85, 78, 73, 195, 83, 65, 85, 82, 65, 83, 72, 84, 82, - 193, 84, 69, 84, 82, 65, 71, 82, 65, 205, 68, 69, 83, 69, 82, 69, 212, - 72, 65, 77, 90, 193, 83, 89, 82, 73, 65, 195, 84, 73, 76, 68, 69, 128, - 71, 85, 82, 77, 85, 75, 72, 201, 77, 65, 128, 77, 65, 89, 69, 203, 77, - 69, 69, 84, 69, 201, 78, 79, 84, 65, 84, 73, 79, 206, 70, 73, 86, 69, - 128, 80, 65, 128, 89, 65, 128, 76, 73, 71, 72, 212, 83, 73, 88, 128, 69, - 73, 71, 72, 84, 128, 76, 69, 80, 67, 72, 193, 78, 65, 128, 83, 69, 86, - 69, 78, 128, 76, 79, 78, 199, 78, 73, 78, 69, 128, 84, 85, 82, 75, 73, - 195, 72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 79, 80, 69, 206, 82, 65, - 128, 83, 65, 128, 83, 85, 78, 68, 65, 78, 69, 83, 197, 86, 73, 69, 212, - 76, 65, 207, 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, + 206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 67, 85, 78, 69, 73, 70, 79, + 82, 205, 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 83, 89, 77, + 66, 79, 204, 70, 79, 82, 77, 128, 68, 73, 71, 73, 212, 67, 65, 78, 65, + 68, 73, 65, 206, 83, 89, 76, 76, 65, 66, 73, 67, 211, 66, 65, 77, 85, + 205, 86, 79, 87, 69, 204, 65, 78, 196, 66, 79, 76, 196, 72, 65, 78, 71, + 85, 204, 76, 73, 78, 69, 65, 210, 71, 82, 69, 69, 203, 76, 73, 71, 65, + 84, 85, 82, 197, 84, 73, 77, 69, 211, 77, 85, 83, 73, 67, 65, 204, 69, + 84, 72, 73, 79, 80, 73, 195, 193, 70, 79, 210, 67, 89, 82, 73, 76, 76, + 73, 195, 73, 84, 65, 76, 73, 195, 67, 79, 77, 66, 73, 78, 73, 78, 199, + 82, 65, 68, 73, 67, 65, 204, 83, 65, 78, 83, 45, 83, 69, 82, 73, 198, 67, + 73, 82, 67, 76, 69, 196, 84, 65, 77, 73, 204, 84, 65, 201, 70, 73, 78, + 65, 204, 78, 85, 77, 66, 69, 210, 65, 82, 82, 79, 87, 128, 86, 65, 201, + 76, 69, 70, 212, 82, 73, 71, 72, 212, 83, 81, 85, 65, 82, 197, 68, 79, + 85, 66, 76, 197, 65, 82, 82, 79, 215, 65, 66, 79, 86, 69, 128, 83, 73, + 71, 78, 128, 86, 65, 82, 73, 65, 84, 73, 79, 206, 66, 69, 76, 79, 87, + 128, 66, 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 66, 89, + 90, 65, 78, 84, 73, 78, 197, 87, 72, 73, 84, 197, 66, 76, 65, 67, 203, + 73, 83, 79, 76, 65, 84, 69, 196, 65, 128, 194, 75, 65, 84, 65, 75, 65, + 78, 193, 77, 79, 68, 73, 70, 73, 69, 210, 77, 89, 65, 78, 77, 65, 210, + 68, 79, 212, 75, 65, 78, 71, 88, 201, 75, 73, 75, 65, 75, 85, 201, 77, + 69, 78, 68, 197, 85, 128, 84, 73, 66, 69, 84, 65, 206, 79, 198, 73, 128, + 79, 128, 72, 69, 65, 86, 217, 73, 78, 73, 84, 73, 65, 204, 86, 69, 82, + 84, 73, 67, 65, 204, 77, 69, 69, 205, 67, 79, 80, 84, 73, 195, 75, 72, + 77, 69, 210, 77, 65, 82, 75, 128, 65, 66, 79, 86, 197, 67, 65, 82, 82, + 73, 69, 210, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 89, 69, 200, 80, + 72, 65, 83, 69, 45, 197, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201, 77, 79, + 78, 71, 79, 76, 73, 65, 206, 83, 84, 82, 79, 75, 69, 128, 76, 69, 70, 84, + 87, 65, 82, 68, 211, 83, 89, 77, 66, 79, 76, 128, 84, 73, 76, 197, 68, + 85, 80, 76, 79, 89, 65, 206, 66, 79, 216, 80, 65, 82, 69, 78, 84, 72, 69, + 83, 73, 90, 69, 196, 83, 81, 85, 65, 82, 69, 196, 84, 72, 65, 205, 74, + 79, 78, 71, 83, 69, 79, 78, 199, 80, 76, 85, 211, 79, 78, 69, 128, 72, + 69, 66, 82, 69, 215, 77, 73, 65, 207, 84, 87, 79, 128, 213, 67, 79, 78, + 83, 79, 78, 65, 78, 212, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, 75, + 128, 68, 82, 65, 87, 73, 78, 71, 211, 72, 77, 79, 78, 199, 80, 65, 72, + 65, 87, 200, 67, 72, 79, 83, 69, 79, 78, 199, 76, 79, 215, 86, 79, 67, + 65, 76, 73, 195, 72, 65, 76, 70, 87, 73, 68, 84, 200, 66, 65, 76, 73, 78, + 69, 83, 197, 84, 87, 207, 79, 78, 197, 85, 208, 83, 67, 82, 73, 80, 212, + 73, 68, 69, 79, 71, 82, 65, 205, 80, 72, 65, 83, 69, 45, 196, 84, 79, + 128, 65, 76, 67, 72, 69, 77, 73, 67, 65, 204, 65, 76, 69, 198, 72, 73, + 71, 200, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 84, 72, 82, 69, + 197, 68, 79, 87, 206, 79, 86, 69, 210, 83, 73, 78, 72, 65, 76, 193, 78, + 85, 77, 69, 82, 73, 195, 66, 65, 82, 128, 84, 79, 78, 197, 66, 82, 65, + 72, 77, 201, 66, 65, 82, 194, 70, 79, 85, 82, 128, 72, 65, 200, 77, 65, + 82, 203, 84, 72, 82, 69, 69, 128, 78, 79, 82, 84, 200, 70, 85, 76, 76, + 87, 73, 68, 84, 200, 66, 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, + 204, 76, 73, 71, 72, 212, 84, 65, 199, 68, 79, 77, 73, 78, 207, 76, 79, + 78, 199, 65, 67, 85, 84, 69, 128, 70, 82, 65, 75, 84, 85, 210, 72, 65, + 128, 77, 65, 76, 65, 89, 65, 76, 65, 205, 67, 72, 65, 82, 65, 67, 84, 69, + 210, 80, 72, 65, 83, 69, 45, 195, 68, 79, 85, 66, 76, 69, 45, 83, 84, 82, + 85, 67, 203, 72, 65, 76, 198, 72, 73, 82, 65, 71, 65, 78, 193, 74, 85, + 78, 71, 83, 69, 79, 78, 199, 84, 69, 76, 85, 71, 213, 65, 82, 77, 69, 78, + 73, 65, 206, 66, 69, 78, 71, 65, 76, 201, 71, 76, 65, 71, 79, 76, 73, 84, + 73, 195, 85, 80, 87, 65, 82, 68, 211, 70, 73, 86, 69, 128, 77, 69, 68, + 73, 65, 204, 78, 69, 71, 65, 84, 73, 86, 197, 74, 69, 69, 205, 75, 65, + 128, 68, 79, 87, 78, 87, 65, 82, 68, 211, 73, 68, 69, 79, 71, 82, 65, 80, + 200, 74, 65, 86, 65, 78, 69, 83, 197, 68, 79, 84, 211, 79, 82, 73, 89, + 193, 80, 65, 128, 87, 69, 83, 84, 45, 67, 82, 69, 197, 82, 85, 78, 73, + 195, 83, 128, 75, 65, 78, 78, 65, 68, 193, 83, 73, 88, 128, 77, 65, 128, + 78, 69, 215, 80, 72, 65, 83, 69, 45, 193, 83, 79, 85, 84, 200, 84, 72, + 65, 201, 89, 65, 128, 67, 65, 82, 196, 67, 72, 69, 82, 79, 75, 69, 197, + 69, 73, 71, 72, 84, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 83, 69, + 86, 69, 78, 128, 83, 72, 65, 82, 65, 68, 193, 67, 73, 84, 201, 71, 85, + 74, 65, 82, 65, 84, 201, 78, 65, 128, 78, 73, 78, 69, 128, 84, 85, 82, + 78, 69, 196, 87, 65, 82, 65, 78, 199, 67, 72, 65, 205, 71, 82, 65, 78, + 84, 72, 193, 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, 88, 128, 90, 90, 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89, 65, 128, 90, 90, 89, 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90, 85, 82, 128, 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83, 89, 65, @@ -84,181 +83,192 @@ static unsigned char lexicon[] = { 90, 69, 80, 128, 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90, 65, 88, 128, 90, 90, 65, 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65, 128, 90, 90, 65, 128, 90, 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90, 87, 78, - 74, 128, 90, 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 65, 82, - 65, 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, 85, 79, 88, - 128, 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, 90, 85, 66, - 85, 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 83, 72, 65, 128, 90, 82, - 65, 128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, 79, 128, 90, - 79, 65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, 90, 74, - 69, 128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, 78, 79, - 82, 128, 90, 73, 76, 68, 69, 128, 90, 73, 71, 90, 65, 199, 90, 73, 71, - 128, 90, 73, 68, 193, 90, 73, 66, 128, 90, 73, 194, 90, 73, 51, 128, 90, - 201, 90, 72, 89, 88, 128, 90, 72, 89, 84, 128, 90, 72, 89, 82, 88, 128, - 90, 72, 89, 82, 128, 90, 72, 89, 80, 128, 90, 72, 89, 128, 90, 72, 87, - 69, 128, 90, 72, 87, 65, 128, 90, 72, 85, 88, 128, 90, 72, 85, 84, 128, - 90, 72, 85, 82, 88, 128, 90, 72, 85, 82, 128, 90, 72, 85, 80, 128, 90, - 72, 85, 79, 88, 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 128, 90, - 72, 85, 128, 90, 72, 79, 88, 128, 90, 72, 79, 84, 128, 90, 72, 79, 80, - 128, 90, 72, 79, 79, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, 69, - 128, 90, 72, 73, 128, 90, 72, 69, 88, 128, 90, 72, 69, 84, 128, 90, 72, - 69, 80, 128, 90, 72, 69, 69, 128, 90, 72, 69, 128, 90, 72, 197, 90, 72, - 65, 88, 128, 90, 72, 65, 84, 128, 90, 72, 65, 82, 128, 90, 72, 65, 80, - 128, 90, 72, 65, 73, 78, 128, 90, 72, 65, 65, 128, 90, 72, 65, 128, 90, - 72, 128, 90, 69, 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, 82, 207, 90, - 69, 78, 128, 90, 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, 74, 65, 128, - 90, 69, 50, 128, 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78, 128, - 90, 65, 89, 73, 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65, - 128, 90, 65, 82, 81, 65, 128, 90, 65, 81, 69, 198, 90, 65, 77, 88, 128, - 90, 65, 204, 90, 65, 73, 78, 128, 90, 65, 73, 206, 90, 65, 73, 128, 90, - 65, 72, 128, 90, 65, 200, 90, 65, 71, 128, 90, 65, 69, 70, 128, 90, 48, - 49, 54, 72, 128, 90, 48, 49, 54, 71, 128, 90, 48, 49, 54, 70, 128, 90, - 48, 49, 54, 69, 128, 90, 48, 49, 54, 68, 128, 90, 48, 49, 54, 67, 128, - 90, 48, 49, 54, 66, 128, 90, 48, 49, 54, 65, 128, 90, 48, 49, 54, 128, - 90, 48, 49, 53, 73, 128, 90, 48, 49, 53, 72, 128, 90, 48, 49, 53, 71, - 128, 90, 48, 49, 53, 70, 128, 90, 48, 49, 53, 69, 128, 90, 48, 49, 53, - 68, 128, 90, 48, 49, 53, 67, 128, 90, 48, 49, 53, 66, 128, 90, 48, 49, - 53, 65, 128, 90, 48, 49, 53, 128, 90, 48, 49, 52, 128, 90, 48, 49, 51, - 128, 90, 48, 49, 50, 128, 90, 48, 49, 49, 128, 90, 48, 49, 48, 128, 90, - 48, 48, 57, 128, 90, 48, 48, 56, 128, 90, 48, 48, 55, 128, 90, 48, 48, - 54, 128, 90, 48, 48, 53, 65, 128, 90, 48, 48, 53, 128, 90, 48, 48, 52, - 65, 128, 90, 48, 48, 52, 128, 90, 48, 48, 51, 66, 128, 90, 48, 48, 51, - 65, 128, 90, 48, 48, 51, 128, 90, 48, 48, 50, 68, 128, 90, 48, 48, 50, - 67, 128, 90, 48, 48, 50, 66, 128, 90, 48, 48, 50, 65, 128, 90, 48, 48, - 50, 128, 90, 48, 48, 49, 128, 90, 128, 218, 89, 89, 88, 128, 89, 89, 84, - 128, 89, 89, 82, 88, 128, 89, 89, 82, 128, 89, 89, 80, 128, 89, 89, 69, - 128, 89, 89, 65, 65, 128, 89, 89, 65, 128, 89, 89, 128, 89, 87, 79, 79, - 128, 89, 87, 79, 128, 89, 87, 73, 73, 128, 89, 87, 73, 128, 89, 87, 69, - 128, 89, 87, 65, 65, 128, 89, 87, 65, 128, 89, 86, 128, 89, 85, 88, 128, - 89, 85, 87, 79, 81, 128, 89, 85, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, - 85, 128, 89, 85, 85, 128, 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211, - 89, 85, 82, 88, 128, 89, 85, 82, 128, 89, 85, 81, 128, 89, 85, 209, 89, - 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, - 128, 89, 85, 79, 77, 128, 89, 85, 79, 128, 89, 85, 78, 128, 89, 85, 77, - 128, 89, 85, 69, 81, 128, 89, 85, 69, 128, 89, 85, 68, 72, 128, 89, 85, - 68, 200, 89, 85, 65, 78, 128, 89, 85, 65, 69, 78, 128, 89, 85, 45, 89, - 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85, 45, 85, 128, 89, 85, 45, - 79, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, 69, - 128, 89, 85, 45, 65, 69, 128, 89, 85, 45, 65, 128, 89, 85, 128, 89, 213, - 89, 80, 83, 73, 76, 73, 128, 89, 80, 79, 82, 82, 79, 73, 128, 89, 80, 79, - 75, 82, 73, 83, 73, 83, 128, 89, 80, 79, 75, 82, 73, 83, 73, 211, 89, 80, - 79, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 89, 79, 89, 128, 89, 79, - 88, 128, 89, 79, 85, 84, 72, 70, 85, 76, 78, 69, 83, 83, 128, 89, 79, 85, - 84, 72, 70, 85, 204, 89, 79, 84, 128, 89, 79, 82, 73, 128, 89, 79, 81, - 128, 89, 79, 209, 89, 79, 80, 128, 89, 79, 79, 128, 89, 79, 77, 79, 128, - 89, 79, 71, 72, 128, 89, 79, 68, 72, 128, 89, 79, 68, 128, 89, 79, 196, - 89, 79, 65, 128, 89, 79, 45, 89, 69, 79, 128, 89, 79, 45, 89, 65, 69, - 128, 89, 79, 45, 89, 65, 128, 89, 79, 45, 79, 128, 89, 79, 45, 73, 128, - 89, 79, 45, 69, 79, 128, 89, 79, 45, 65, 69, 128, 89, 79, 45, 65, 128, - 89, 79, 128, 89, 207, 89, 73, 90, 69, 84, 128, 89, 73, 88, 128, 89, 73, - 87, 78, 128, 89, 73, 84, 128, 89, 73, 80, 128, 89, 73, 78, 71, 128, 89, - 73, 73, 128, 89, 73, 199, 89, 73, 69, 88, 128, 89, 73, 69, 84, 128, 89, - 73, 69, 80, 128, 89, 73, 69, 69, 128, 89, 73, 69, 128, 89, 73, 68, 68, - 73, 83, 200, 89, 73, 45, 85, 128, 89, 73, 128, 89, 70, 69, 83, 73, 83, - 128, 89, 70, 69, 83, 73, 211, 89, 70, 69, 206, 89, 69, 89, 128, 89, 69, - 87, 128, 89, 69, 85, 88, 128, 89, 69, 85, 82, 65, 69, 128, 89, 69, 85, - 81, 128, 89, 69, 85, 77, 128, 89, 69, 85, 65, 69, 84, 128, 89, 69, 85, - 65, 69, 128, 89, 69, 84, 73, 86, 128, 89, 69, 83, 84, 85, 128, 89, 69, - 83, 73, 69, 85, 78, 71, 45, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, - 78, 71, 45, 80, 65, 78, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, - 71, 45, 77, 73, 69, 85, 77, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 72, - 73, 69, 85, 72, 128, 89, 69, 83, 73, 69, 85, 78, 71, 128, 89, 69, 82, 85, - 128, 89, 69, 82, 213, 89, 69, 82, 73, 128, 89, 69, 82, 65, 200, 89, 69, - 82, 128, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 89, 69, 79, 45, - 89, 65, 128, 89, 69, 79, 45, 85, 128, 89, 69, 79, 45, 79, 128, 89, 69, - 78, 73, 83, 69, 201, 89, 69, 78, 65, 80, 128, 89, 69, 78, 128, 89, 69, - 206, 89, 69, 76, 76, 79, 87, 128, 89, 69, 76, 76, 79, 215, 89, 69, 72, - 128, 89, 69, 69, 128, 89, 69, 65, 210, 89, 69, 65, 128, 89, 65, 90, 90, - 128, 89, 65, 90, 72, 128, 89, 65, 90, 128, 89, 65, 89, 65, 78, 78, 65, - 128, 89, 65, 89, 128, 89, 65, 87, 128, 89, 65, 86, 128, 89, 65, 85, 128, - 89, 65, 84, 84, 128, 89, 65, 84, 73, 128, 89, 65, 84, 72, 128, 89, 65, - 84, 128, 89, 65, 83, 83, 128, 89, 65, 83, 72, 128, 89, 65, 83, 128, 89, - 65, 82, 82, 128, 89, 65, 82, 128, 89, 65, 210, 89, 65, 81, 128, 89, 65, - 80, 128, 89, 65, 78, 83, 65, 89, 65, 128, 89, 65, 78, 71, 128, 89, 65, - 78, 199, 89, 65, 78, 128, 89, 65, 77, 79, 75, 128, 89, 65, 77, 65, 75, - 75, 65, 78, 128, 89, 65, 77, 128, 89, 65, 76, 128, 89, 65, 75, 72, 72, - 128, 89, 65, 75, 72, 128, 89, 65, 75, 65, 83, 72, 128, 89, 65, 75, 128, - 89, 65, 74, 85, 82, 86, 69, 68, 73, 195, 89, 65, 74, 128, 89, 65, 73, - 128, 89, 65, 72, 72, 128, 89, 65, 72, 128, 89, 65, 71, 78, 128, 89, 65, - 71, 72, 72, 128, 89, 65, 71, 72, 128, 89, 65, 71, 128, 89, 65, 70, 213, - 89, 65, 70, 128, 89, 65, 69, 77, 77, 65, 69, 128, 89, 65, 68, 72, 128, - 89, 65, 68, 68, 72, 128, 89, 65, 68, 68, 128, 89, 65, 68, 128, 89, 65, - 67, 72, 128, 89, 65, 66, 72, 128, 89, 65, 66, 128, 89, 65, 65, 82, 85, - 128, 89, 65, 65, 73, 128, 89, 65, 65, 68, 79, 128, 89, 65, 45, 89, 79, - 128, 89, 65, 45, 85, 128, 89, 65, 45, 79, 128, 89, 48, 48, 56, 128, 89, - 48, 48, 55, 128, 89, 48, 48, 54, 128, 89, 48, 48, 53, 128, 89, 48, 48, - 52, 128, 89, 48, 48, 51, 128, 89, 48, 48, 50, 128, 89, 48, 48, 49, 65, - 128, 89, 48, 48, 49, 128, 89, 45, 67, 82, 69, 197, 88, 89, 88, 128, 88, - 89, 85, 128, 88, 89, 84, 128, 88, 89, 82, 88, 128, 88, 89, 82, 128, 88, - 89, 80, 128, 88, 89, 79, 128, 88, 89, 73, 128, 88, 89, 69, 69, 128, 88, - 89, 69, 128, 88, 89, 65, 65, 128, 88, 89, 65, 128, 88, 89, 128, 88, 87, - 73, 128, 88, 87, 69, 69, 128, 88, 87, 69, 128, 88, 87, 65, 65, 128, 88, - 87, 65, 128, 88, 86, 69, 128, 88, 86, 65, 128, 88, 85, 79, 88, 128, 88, - 85, 79, 128, 88, 85, 128, 88, 83, 72, 65, 65, 89, 65, 84, 72, 73, 89, 65, - 128, 88, 79, 88, 128, 88, 79, 84, 128, 88, 79, 82, 128, 88, 79, 80, 128, - 88, 79, 65, 128, 88, 79, 128, 88, 73, 88, 128, 88, 73, 84, 128, 88, 73, - 82, 79, 206, 88, 73, 80, 128, 88, 73, 69, 88, 128, 88, 73, 69, 84, 128, - 88, 73, 69, 80, 128, 88, 73, 69, 128, 88, 73, 128, 88, 71, 128, 88, 69, - 83, 84, 69, 211, 88, 69, 72, 128, 88, 69, 69, 128, 88, 69, 128, 88, 65, - 78, 128, 88, 65, 65, 128, 88, 65, 128, 88, 48, 48, 56, 65, 128, 88, 48, - 48, 56, 128, 88, 48, 48, 55, 128, 88, 48, 48, 54, 65, 128, 88, 48, 48, - 54, 128, 88, 48, 48, 53, 128, 88, 48, 48, 52, 66, 128, 88, 48, 48, 52, - 65, 128, 88, 48, 48, 52, 128, 88, 48, 48, 51, 128, 88, 48, 48, 50, 128, - 88, 48, 48, 49, 128, 87, 90, 128, 87, 89, 78, 78, 128, 87, 89, 78, 206, - 87, 86, 128, 87, 85, 80, 128, 87, 85, 79, 88, 128, 87, 85, 79, 80, 128, - 87, 85, 79, 128, 87, 85, 78, 74, 207, 87, 85, 78, 128, 87, 85, 76, 85, - 128, 87, 85, 76, 213, 87, 85, 69, 128, 87, 85, 65, 69, 84, 128, 87, 85, - 65, 69, 78, 128, 87, 85, 128, 87, 82, 217, 87, 82, 79, 78, 71, 128, 87, - 82, 73, 84, 73, 78, 199, 87, 82, 69, 78, 67, 72, 128, 87, 82, 69, 65, 84, - 200, 87, 82, 65, 80, 80, 69, 196, 87, 82, 65, 80, 128, 87, 79, 88, 128, - 87, 79, 82, 82, 73, 69, 196, 87, 79, 82, 75, 69, 82, 128, 87, 79, 82, 75, - 128, 87, 79, 82, 203, 87, 79, 82, 68, 83, 80, 65, 67, 69, 128, 87, 79, - 82, 196, 87, 79, 80, 128, 87, 79, 79, 78, 128, 87, 79, 79, 76, 128, 87, - 79, 79, 68, 83, 45, 67, 82, 69, 197, 87, 79, 79, 68, 128, 87, 79, 78, - 128, 87, 79, 206, 87, 79, 77, 69, 78, 211, 87, 79, 77, 69, 206, 87, 79, - 77, 65, 78, 211, 87, 79, 77, 65, 78, 128, 87, 79, 77, 65, 206, 87, 79, - 76, 79, 83, 79, 128, 87, 79, 76, 198, 87, 79, 69, 128, 87, 79, 65, 128, - 87, 73, 84, 72, 79, 85, 212, 87, 73, 84, 72, 73, 78, 128, 87, 73, 78, 84, - 69, 82, 128, 87, 73, 78, 75, 73, 78, 199, 87, 73, 78, 74, 65, 128, 87, - 73, 78, 71, 83, 128, 87, 73, 78, 69, 128, 87, 73, 78, 197, 87, 73, 78, - 68, 85, 128, 87, 73, 78, 68, 128, 87, 73, 78, 196, 87, 73, 78, 128, 87, + 74, 128, 90, 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 202, 90, + 87, 65, 82, 65, 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, + 85, 79, 88, 128, 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, + 90, 85, 66, 85, 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 83, 72, 65, + 128, 90, 82, 65, 128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, + 79, 128, 90, 79, 65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, + 193, 90, 74, 69, 128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, + 73, 78, 79, 82, 128, 90, 73, 76, 68, 69, 128, 90, 73, 71, 90, 65, 199, + 90, 73, 71, 128, 90, 73, 68, 193, 90, 73, 66, 128, 90, 73, 194, 90, 73, + 51, 128, 90, 201, 90, 72, 89, 88, 128, 90, 72, 89, 84, 128, 90, 72, 89, + 82, 88, 128, 90, 72, 89, 82, 128, 90, 72, 89, 80, 128, 90, 72, 89, 128, + 90, 72, 87, 69, 128, 90, 72, 87, 65, 128, 90, 72, 85, 88, 128, 90, 72, + 85, 84, 128, 90, 72, 85, 82, 88, 128, 90, 72, 85, 82, 128, 90, 72, 85, + 80, 128, 90, 72, 85, 79, 88, 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, + 79, 128, 90, 72, 85, 128, 90, 72, 79, 88, 128, 90, 72, 79, 84, 128, 90, + 72, 79, 80, 128, 90, 72, 79, 79, 128, 90, 72, 79, 73, 128, 90, 72, 79, + 128, 90, 72, 73, 86, 69, 84, 69, 128, 90, 72, 73, 76, 128, 90, 72, 73, + 128, 90, 72, 69, 88, 128, 90, 72, 69, 84, 128, 90, 72, 69, 80, 128, 90, + 72, 69, 69, 128, 90, 72, 69, 128, 90, 72, 197, 90, 72, 65, 89, 73, 78, + 128, 90, 72, 65, 88, 128, 90, 72, 65, 84, 128, 90, 72, 65, 82, 128, 90, + 72, 65, 80, 128, 90, 72, 65, 73, 78, 128, 90, 72, 65, 65, 128, 90, 72, + 65, 128, 90, 72, 128, 90, 69, 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, + 82, 207, 90, 69, 78, 128, 90, 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, + 74, 65, 128, 90, 69, 50, 128, 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, + 73, 78, 128, 90, 65, 89, 73, 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, + 90, 65, 84, 65, 128, 90, 65, 82, 81, 65, 128, 90, 65, 82, 76, 128, 90, + 65, 81, 69, 198, 90, 65, 77, 88, 128, 90, 65, 204, 90, 65, 73, 78, 128, + 90, 65, 73, 206, 90, 65, 73, 128, 90, 65, 72, 128, 90, 65, 200, 90, 65, + 71, 128, 90, 65, 69, 70, 128, 90, 193, 90, 48, 49, 54, 72, 128, 90, 48, + 49, 54, 71, 128, 90, 48, 49, 54, 70, 128, 90, 48, 49, 54, 69, 128, 90, + 48, 49, 54, 68, 128, 90, 48, 49, 54, 67, 128, 90, 48, 49, 54, 66, 128, + 90, 48, 49, 54, 65, 128, 90, 48, 49, 54, 128, 90, 48, 49, 53, 73, 128, + 90, 48, 49, 53, 72, 128, 90, 48, 49, 53, 71, 128, 90, 48, 49, 53, 70, + 128, 90, 48, 49, 53, 69, 128, 90, 48, 49, 53, 68, 128, 90, 48, 49, 53, + 67, 128, 90, 48, 49, 53, 66, 128, 90, 48, 49, 53, 65, 128, 90, 48, 49, + 53, 128, 90, 48, 49, 52, 128, 90, 48, 49, 51, 128, 90, 48, 49, 50, 128, + 90, 48, 49, 49, 128, 90, 48, 49, 48, 128, 90, 48, 48, 57, 128, 90, 48, + 48, 56, 128, 90, 48, 48, 55, 128, 90, 48, 48, 54, 128, 90, 48, 48, 53, + 65, 128, 90, 48, 48, 53, 128, 90, 48, 48, 52, 65, 128, 90, 48, 48, 52, + 128, 90, 48, 48, 51, 66, 128, 90, 48, 48, 51, 65, 128, 90, 48, 48, 51, + 128, 90, 48, 48, 50, 68, 128, 90, 48, 48, 50, 67, 128, 90, 48, 48, 50, + 66, 128, 90, 48, 48, 50, 65, 128, 90, 48, 48, 50, 128, 90, 48, 48, 49, + 128, 90, 128, 218, 89, 89, 88, 128, 89, 89, 84, 128, 89, 89, 82, 88, 128, + 89, 89, 82, 128, 89, 89, 80, 128, 89, 89, 69, 128, 89, 89, 65, 65, 128, + 89, 89, 65, 128, 89, 89, 128, 89, 87, 79, 79, 128, 89, 87, 79, 128, 89, + 87, 73, 73, 128, 89, 87, 73, 128, 89, 87, 69, 128, 89, 87, 65, 65, 128, + 89, 87, 65, 128, 89, 86, 128, 89, 85, 88, 128, 89, 85, 87, 79, 81, 128, + 89, 85, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 85, 128, + 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, 89, + 85, 82, 128, 89, 85, 81, 128, 89, 85, 209, 89, 85, 80, 128, 89, 85, 79, + 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, 128, 89, 85, 79, 77, 128, + 89, 85, 79, 128, 89, 85, 78, 128, 89, 85, 77, 128, 89, 85, 74, 128, 89, + 85, 69, 81, 128, 89, 85, 69, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200, + 89, 85, 65, 78, 128, 89, 85, 65, 69, 78, 128, 89, 85, 45, 89, 69, 79, + 128, 89, 85, 45, 89, 69, 128, 89, 85, 45, 85, 128, 89, 85, 45, 79, 128, + 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, 69, 128, 89, + 85, 45, 65, 69, 128, 89, 85, 45, 65, 128, 89, 85, 128, 89, 213, 89, 82, + 89, 128, 89, 80, 83, 73, 76, 73, 128, 89, 80, 79, 82, 82, 79, 73, 128, + 89, 80, 79, 75, 82, 73, 83, 73, 83, 128, 89, 80, 79, 75, 82, 73, 83, 73, + 211, 89, 80, 79, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 89, 79, 89, + 128, 89, 79, 88, 128, 89, 79, 87, 68, 128, 89, 79, 85, 84, 72, 70, 85, + 76, 78, 69, 83, 83, 128, 89, 79, 85, 84, 72, 70, 85, 204, 89, 79, 84, + 128, 89, 79, 82, 73, 128, 89, 79, 81, 128, 89, 79, 209, 89, 79, 80, 128, + 89, 79, 79, 128, 89, 79, 77, 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, + 72, 128, 89, 79, 68, 128, 89, 79, 196, 89, 79, 65, 128, 89, 79, 45, 89, + 69, 79, 128, 89, 79, 45, 89, 65, 69, 128, 89, 79, 45, 89, 65, 128, 89, + 79, 45, 79, 128, 89, 79, 45, 73, 128, 89, 79, 45, 69, 79, 128, 89, 79, + 45, 65, 69, 128, 89, 79, 45, 65, 128, 89, 79, 128, 89, 207, 89, 73, 90, + 69, 84, 128, 89, 73, 88, 128, 89, 73, 87, 78, 128, 89, 73, 84, 128, 89, + 73, 80, 128, 89, 73, 78, 71, 128, 89, 73, 73, 128, 89, 73, 199, 89, 73, + 69, 88, 128, 89, 73, 69, 84, 128, 89, 73, 69, 80, 128, 89, 73, 69, 69, + 128, 89, 73, 69, 128, 89, 73, 68, 68, 73, 83, 200, 89, 73, 45, 85, 128, + 89, 73, 128, 89, 70, 69, 83, 73, 83, 128, 89, 70, 69, 83, 73, 211, 89, + 70, 69, 206, 89, 69, 89, 128, 89, 69, 87, 128, 89, 69, 85, 88, 128, 89, + 69, 85, 82, 65, 69, 128, 89, 69, 85, 81, 128, 89, 69, 85, 77, 128, 89, + 69, 85, 65, 69, 84, 128, 89, 69, 85, 65, 69, 128, 89, 69, 84, 73, 86, + 128, 89, 69, 83, 84, 85, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 83, 73, + 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 80, 65, 78, 83, 73, 79, + 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 77, 73, 69, 85, 77, 128, 89, + 69, 83, 73, 69, 85, 78, 71, 45, 72, 73, 69, 85, 72, 128, 89, 69, 83, 73, + 69, 85, 78, 71, 128, 89, 69, 82, 85, 128, 89, 69, 82, 213, 89, 69, 82, + 73, 128, 89, 69, 82, 65, 200, 89, 69, 82, 128, 89, 69, 79, 82, 73, 78, + 72, 73, 69, 85, 72, 128, 89, 69, 79, 45, 89, 65, 128, 89, 69, 79, 45, 85, + 128, 89, 69, 79, 45, 79, 128, 89, 69, 78, 73, 83, 69, 201, 89, 69, 78, + 65, 80, 128, 89, 69, 78, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, 128, + 89, 69, 76, 76, 79, 215, 89, 69, 73, 78, 128, 89, 69, 72, 128, 89, 69, + 69, 71, 128, 89, 69, 69, 128, 89, 69, 65, 210, 89, 69, 65, 128, 89, 65, + 90, 90, 128, 89, 65, 90, 72, 128, 89, 65, 90, 128, 89, 65, 89, 68, 128, + 89, 65, 89, 65, 78, 78, 65, 128, 89, 65, 89, 128, 89, 65, 87, 128, 89, + 65, 86, 128, 89, 65, 85, 128, 89, 65, 84, 84, 128, 89, 65, 84, 73, 128, + 89, 65, 84, 72, 128, 89, 65, 84, 128, 89, 65, 83, 83, 128, 89, 65, 83, + 72, 128, 89, 65, 83, 128, 89, 65, 82, 82, 128, 89, 65, 82, 128, 89, 65, + 210, 89, 65, 81, 128, 89, 65, 80, 128, 89, 65, 78, 83, 65, 89, 65, 128, + 89, 65, 78, 71, 128, 89, 65, 78, 199, 89, 65, 78, 128, 89, 65, 77, 79, + 75, 128, 89, 65, 77, 65, 75, 75, 65, 78, 128, 89, 65, 77, 128, 89, 65, + 76, 128, 89, 65, 75, 72, 72, 128, 89, 65, 75, 72, 128, 89, 65, 75, 65, + 83, 72, 128, 89, 65, 75, 128, 89, 65, 74, 85, 82, 86, 69, 68, 73, 195, + 89, 65, 74, 128, 89, 65, 73, 128, 89, 65, 72, 72, 128, 89, 65, 72, 128, + 89, 65, 71, 78, 128, 89, 65, 71, 72, 72, 128, 89, 65, 71, 72, 128, 89, + 65, 71, 128, 89, 65, 70, 213, 89, 65, 70, 128, 89, 65, 69, 77, 77, 65, + 69, 128, 89, 65, 68, 72, 128, 89, 65, 68, 68, 72, 128, 89, 65, 68, 68, + 128, 89, 65, 68, 128, 89, 65, 67, 72, 128, 89, 65, 66, 72, 128, 89, 65, + 66, 128, 89, 65, 65, 82, 85, 128, 89, 65, 65, 73, 128, 89, 65, 65, 68, + 79, 128, 89, 65, 45, 89, 79, 128, 89, 65, 45, 85, 128, 89, 65, 45, 79, + 128, 89, 48, 48, 56, 128, 89, 48, 48, 55, 128, 89, 48, 48, 54, 128, 89, + 48, 48, 53, 128, 89, 48, 48, 52, 128, 89, 48, 48, 51, 128, 89, 48, 48, + 50, 128, 89, 48, 48, 49, 65, 128, 89, 48, 48, 49, 128, 89, 45, 67, 82, + 69, 197, 88, 89, 88, 128, 88, 89, 85, 128, 88, 89, 84, 128, 88, 89, 82, + 88, 128, 88, 89, 82, 128, 88, 89, 80, 128, 88, 89, 79, 79, 74, 128, 88, + 89, 79, 79, 128, 88, 89, 79, 128, 88, 89, 73, 128, 88, 89, 69, 69, 205, + 88, 89, 69, 69, 128, 88, 89, 69, 128, 88, 89, 65, 65, 128, 88, 89, 65, + 128, 88, 89, 128, 88, 87, 73, 128, 88, 87, 69, 69, 128, 88, 87, 69, 128, + 88, 87, 65, 65, 128, 88, 87, 65, 128, 88, 87, 128, 88, 86, 69, 128, 88, + 86, 65, 128, 88, 85, 79, 88, 128, 88, 85, 79, 128, 88, 85, 128, 88, 83, + 72, 65, 65, 89, 65, 84, 72, 73, 89, 65, 128, 88, 79, 88, 128, 88, 79, 84, + 128, 88, 79, 82, 128, 88, 79, 80, 72, 128, 88, 79, 80, 128, 88, 79, 65, + 128, 88, 79, 128, 88, 73, 88, 128, 88, 73, 84, 128, 88, 73, 82, 79, 206, + 88, 73, 80, 128, 88, 73, 69, 88, 128, 88, 73, 69, 84, 128, 88, 73, 69, + 80, 128, 88, 73, 69, 128, 88, 73, 65, 66, 128, 88, 73, 128, 88, 71, 128, + 88, 69, 89, 78, 128, 88, 69, 83, 84, 69, 211, 88, 69, 72, 128, 88, 69, + 69, 128, 88, 69, 128, 88, 65, 85, 83, 128, 88, 65, 85, 128, 88, 65, 80, + 72, 128, 88, 65, 78, 128, 88, 65, 65, 128, 88, 65, 128, 88, 48, 48, 56, + 65, 128, 88, 48, 48, 56, 128, 88, 48, 48, 55, 128, 88, 48, 48, 54, 65, + 128, 88, 48, 48, 54, 128, 88, 48, 48, 53, 128, 88, 48, 48, 52, 66, 128, + 88, 48, 48, 52, 65, 128, 88, 48, 48, 52, 128, 88, 48, 48, 51, 128, 88, + 48, 48, 50, 128, 88, 48, 48, 49, 128, 88, 45, 216, 87, 90, 128, 87, 89, + 78, 78, 128, 87, 89, 78, 206, 87, 86, 73, 128, 87, 86, 69, 128, 87, 86, + 65, 128, 87, 86, 128, 87, 85, 80, 128, 87, 85, 79, 88, 128, 87, 85, 79, + 80, 128, 87, 85, 79, 128, 87, 85, 78, 74, 207, 87, 85, 78, 128, 87, 85, + 76, 85, 128, 87, 85, 76, 213, 87, 85, 73, 128, 87, 85, 69, 128, 87, 85, + 65, 69, 84, 128, 87, 85, 65, 69, 78, 128, 87, 85, 128, 87, 82, 217, 87, + 82, 79, 78, 71, 128, 87, 82, 73, 84, 73, 78, 199, 87, 82, 69, 78, 67, 72, + 128, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, 80, 69, 196, 87, 82, 65, + 80, 128, 87, 79, 88, 128, 87, 79, 87, 128, 87, 79, 82, 82, 73, 69, 196, + 87, 79, 82, 76, 196, 87, 79, 82, 75, 69, 82, 128, 87, 79, 82, 75, 128, + 87, 79, 82, 203, 87, 79, 82, 68, 83, 80, 65, 67, 69, 128, 87, 79, 82, + 196, 87, 79, 80, 128, 87, 79, 79, 78, 128, 87, 79, 79, 76, 128, 87, 79, + 79, 68, 83, 45, 67, 82, 69, 197, 87, 79, 79, 68, 128, 87, 79, 78, 128, + 87, 79, 206, 87, 79, 77, 69, 78, 211, 87, 79, 77, 69, 206, 87, 79, 77, + 65, 78, 211, 87, 79, 77, 65, 78, 128, 87, 79, 77, 65, 206, 87, 79, 76, + 79, 83, 79, 128, 87, 79, 76, 198, 87, 79, 69, 128, 87, 79, 65, 128, 87, + 73, 84, 72, 79, 85, 212, 87, 73, 84, 72, 73, 78, 128, 87, 73, 84, 72, 73, + 206, 87, 73, 82, 69, 196, 87, 73, 78, 84, 69, 82, 128, 87, 73, 78, 75, + 73, 78, 199, 87, 73, 78, 74, 65, 128, 87, 73, 78, 71, 83, 128, 87, 73, + 78, 69, 128, 87, 73, 78, 197, 87, 73, 78, 68, 85, 128, 87, 73, 78, 68, + 79, 87, 128, 87, 73, 78, 68, 128, 87, 73, 78, 196, 87, 73, 78, 128, 87, 73, 71, 78, 89, 65, 78, 128, 87, 73, 71, 71, 76, 217, 87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68, 197, 87, 73, 65, 78, 71, 87, 65, 65, 75, 128, 87, 73, 65, 78, 71, 128, 87, 72, 79, 76, 197, 87, 72, 73, 84, 69, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 87, 72, 73, 84, 69, 128, 87, 72, 69, 69, 76, 69, 196, 87, 72, 69, 69, 76, 67, 72, 65, 73, 210, 87, 72, 69, 69, 76, 128, 87, 72, 69, 69, 204, 87, 72, 69, 65, 84, 128, 87, 72, - 65, 76, 69, 128, 87, 71, 128, 87, 69, 88, 128, 87, 69, 85, 88, 128, 87, - 69, 83, 84, 69, 82, 206, 87, 69, 83, 84, 128, 87, 69, 83, 212, 87, 69, - 80, 128, 87, 69, 79, 128, 87, 69, 78, 128, 87, 69, 76, 76, 128, 87, 69, - 73, 71, 72, 212, 87, 69, 73, 69, 82, 83, 84, 82, 65, 83, 211, 87, 69, 69, - 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, 68, 68, - 73, 78, 71, 128, 87, 69, 65, 82, 217, 87, 69, 65, 80, 79, 78, 128, 87, - 67, 128, 87, 66, 128, 87, 65, 89, 128, 87, 65, 217, 87, 65, 88, 73, 78, - 199, 87, 65, 88, 128, 87, 65, 87, 45, 65, 89, 73, 78, 45, 82, 69, 83, 72, - 128, 87, 65, 87, 128, 87, 65, 215, 87, 65, 86, 217, 87, 65, 86, 73, 78, - 199, 87, 65, 86, 69, 83, 128, 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, - 65, 85, 128, 87, 65, 84, 84, 79, 128, 87, 65, 84, 69, 82, 77, 69, 76, 79, - 78, 128, 87, 65, 84, 69, 82, 128, 87, 65, 84, 69, 210, 87, 65, 84, 67, - 72, 128, 87, 65, 84, 128, 87, 65, 83, 84, 73, 78, 71, 128, 87, 65, 83, - 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, 65, 128, 87, 65, 83, 76, - 193, 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 65, 76, 76, 65, - 205, 87, 65, 82, 78, 73, 78, 199, 87, 65, 80, 128, 87, 65, 78, 73, 78, - 199, 87, 65, 78, 71, 75, 85, 79, 81, 128, 87, 65, 78, 68, 69, 82, 69, 82, - 128, 87, 65, 78, 128, 87, 65, 76, 76, 128, 87, 65, 76, 75, 128, 87, 65, - 76, 203, 87, 65, 73, 84, 73, 78, 71, 128, 87, 65, 73, 128, 87, 65, 69, - 78, 128, 87, 65, 69, 128, 87, 65, 65, 86, 85, 128, 87, 48, 50, 53, 128, - 87, 48, 50, 52, 65, 128, 87, 48, 50, 52, 128, 87, 48, 50, 51, 128, 87, - 48, 50, 50, 128, 87, 48, 50, 49, 128, 87, 48, 50, 48, 128, 87, 48, 49, - 57, 128, 87, 48, 49, 56, 65, 128, 87, 48, 49, 56, 128, 87, 48, 49, 55, - 65, 128, 87, 48, 49, 55, 128, 87, 48, 49, 54, 128, 87, 48, 49, 53, 128, - 87, 48, 49, 52, 65, 128, 87, 48, 49, 52, 128, 87, 48, 49, 51, 128, 87, - 48, 49, 50, 128, 87, 48, 49, 49, 128, 87, 48, 49, 48, 65, 128, 87, 48, - 49, 48, 128, 87, 48, 48, 57, 65, 128, 87, 48, 48, 57, 128, 87, 48, 48, - 56, 128, 87, 48, 48, 55, 128, 87, 48, 48, 54, 128, 87, 48, 48, 53, 128, - 87, 48, 48, 52, 128, 87, 48, 48, 51, 65, 128, 87, 48, 48, 51, 128, 87, - 48, 48, 50, 128, 87, 48, 48, 49, 128, 86, 90, 77, 69, 84, 128, 86, 89, - 88, 128, 86, 89, 84, 128, 86, 89, 82, 88, 128, 86, 89, 82, 128, 86, 89, - 80, 128, 86, 89, 128, 86, 87, 65, 128, 86, 85, 88, 128, 86, 85, 85, 128, + 65, 76, 69, 128, 87, 72, 128, 87, 71, 128, 87, 69, 88, 128, 87, 69, 85, + 88, 128, 87, 69, 83, 84, 69, 82, 206, 87, 69, 83, 84, 128, 87, 69, 83, + 212, 87, 69, 80, 128, 87, 69, 79, 128, 87, 69, 78, 128, 87, 69, 76, 76, + 128, 87, 69, 73, 71, 72, 212, 87, 69, 73, 69, 82, 83, 84, 82, 65, 83, + 211, 87, 69, 73, 128, 87, 69, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, + 65, 73, 76, 69, 196, 87, 69, 68, 68, 73, 78, 71, 128, 87, 69, 66, 128, + 87, 69, 65, 82, 217, 87, 69, 65, 80, 79, 78, 128, 87, 67, 128, 87, 66, + 128, 87, 65, 89, 128, 87, 65, 217, 87, 65, 88, 73, 78, 199, 87, 65, 88, + 128, 87, 65, 87, 45, 65, 89, 73, 78, 45, 82, 69, 83, 72, 128, 87, 65, 87, + 128, 87, 65, 215, 87, 65, 86, 217, 87, 65, 86, 73, 78, 199, 87, 65, 86, + 69, 83, 128, 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, 85, 128, 87, + 65, 84, 84, 79, 128, 87, 65, 84, 69, 82, 77, 69, 76, 79, 78, 128, 87, 65, + 84, 69, 82, 128, 87, 65, 84, 69, 210, 87, 65, 84, 67, 72, 128, 87, 65, + 84, 128, 87, 65, 83, 84, 73, 78, 71, 128, 87, 65, 83, 84, 69, 66, 65, 83, + 75, 69, 84, 128, 87, 65, 83, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, + 65, 128, 87, 65, 83, 76, 193, 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, + 65, 83, 65, 76, 76, 65, 205, 87, 65, 82, 78, 73, 78, 199, 87, 65, 80, + 128, 87, 65, 78, 73, 78, 199, 87, 65, 78, 71, 75, 85, 79, 81, 128, 87, + 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 78, 128, 87, 65, 76, 76, 128, + 87, 65, 76, 75, 128, 87, 65, 76, 203, 87, 65, 73, 84, 73, 78, 71, 128, + 87, 65, 73, 128, 87, 65, 69, 78, 128, 87, 65, 69, 128, 87, 65, 68, 68, + 65, 128, 87, 65, 65, 86, 85, 128, 87, 48, 50, 53, 128, 87, 48, 50, 52, + 65, 128, 87, 48, 50, 52, 128, 87, 48, 50, 51, 128, 87, 48, 50, 50, 128, + 87, 48, 50, 49, 128, 87, 48, 50, 48, 128, 87, 48, 49, 57, 128, 87, 48, + 49, 56, 65, 128, 87, 48, 49, 56, 128, 87, 48, 49, 55, 65, 128, 87, 48, + 49, 55, 128, 87, 48, 49, 54, 128, 87, 48, 49, 53, 128, 87, 48, 49, 52, + 65, 128, 87, 48, 49, 52, 128, 87, 48, 49, 51, 128, 87, 48, 49, 50, 128, + 87, 48, 49, 49, 128, 87, 48, 49, 48, 65, 128, 87, 48, 49, 48, 128, 87, + 48, 48, 57, 65, 128, 87, 48, 48, 57, 128, 87, 48, 48, 56, 128, 87, 48, + 48, 55, 128, 87, 48, 48, 54, 128, 87, 48, 48, 53, 128, 87, 48, 48, 52, + 128, 87, 48, 48, 51, 65, 128, 87, 48, 48, 51, 128, 87, 48, 48, 50, 128, + 87, 48, 48, 49, 128, 86, 90, 77, 69, 84, 128, 86, 89, 88, 128, 86, 89, + 84, 128, 86, 89, 82, 88, 128, 86, 89, 82, 128, 86, 89, 80, 128, 86, 89, + 128, 86, 87, 74, 128, 86, 87, 65, 128, 86, 85, 88, 128, 86, 85, 85, 128, 86, 85, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, 85, 80, 128, 86, 85, 76, 71, 65, 210, 86, 85, 69, 81, 128, 86, 84, 83, 128, 86, 84, 128, 86, 83, 57, 57, 128, 86, 83, 57, 56, 128, 86, 83, 57, 55, 128, 86, @@ -347,232 +357,250 @@ static unsigned char lexicon[] = { 48, 49, 128, 86, 83, 49, 48, 48, 128, 86, 83, 49, 48, 128, 86, 83, 49, 128, 86, 83, 128, 86, 82, 65, 67, 72, 89, 128, 86, 79, 88, 128, 86, 79, 87, 69, 76, 45, 67, 65, 82, 82, 73, 69, 210, 86, 79, 87, 128, 86, 79, 85, - 128, 86, 79, 84, 128, 86, 79, 80, 128, 86, 79, 79, 128, 86, 79, 77, 128, - 86, 79, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, 197, 86, 79, 76, 67, 65, - 78, 79, 128, 86, 79, 73, 196, 86, 79, 73, 67, 73, 78, 71, 128, 86, 79, - 73, 67, 69, 76, 69, 83, 211, 86, 79, 73, 67, 69, 196, 86, 79, 67, 65, 76, - 73, 90, 65, 84, 73, 79, 206, 86, 79, 67, 65, 204, 86, 79, 128, 86, 73, - 88, 128, 86, 73, 84, 82, 73, 79, 76, 45, 50, 128, 86, 73, 84, 82, 73, 79, - 76, 128, 86, 73, 84, 65, 69, 45, 50, 128, 86, 73, 84, 65, 69, 128, 86, - 73, 84, 128, 86, 73, 83, 73, 71, 79, 84, 72, 73, 195, 86, 73, 83, 65, 82, - 71, 65, 89, 65, 128, 86, 73, 83, 65, 82, 71, 65, 128, 86, 73, 83, 65, 82, - 71, 193, 86, 73, 82, 73, 65, 77, 128, 86, 73, 82, 71, 79, 128, 86, 73, - 82, 71, 65, 128, 86, 73, 82, 65, 77, 65, 128, 86, 73, 80, 128, 86, 73, - 79, 76, 73, 78, 128, 86, 73, 78, 69, 71, 65, 82, 45, 51, 128, 86, 73, 78, - 69, 71, 65, 82, 45, 50, 128, 86, 73, 78, 69, 71, 65, 82, 128, 86, 73, 78, - 69, 71, 65, 210, 86, 73, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, 76, - 65, 71, 69, 128, 86, 73, 73, 128, 86, 73, 69, 88, 128, 86, 73, 69, 87, - 73, 78, 199, 86, 73, 69, 87, 68, 65, 84, 193, 86, 73, 69, 84, 128, 86, - 73, 69, 80, 128, 86, 73, 69, 128, 86, 73, 68, 74, 45, 50, 128, 86, 73, - 68, 74, 128, 86, 73, 68, 69, 79, 67, 65, 83, 83, 69, 84, 84, 69, 128, 86, - 73, 68, 69, 207, 86, 73, 68, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, - 73, 66, 82, 65, 84, 73, 79, 206, 86, 73, 128, 86, 70, 65, 128, 86, 69, - 88, 128, 86, 69, 87, 128, 86, 69, 215, 86, 69, 85, 88, 128, 86, 69, 85, - 77, 128, 86, 69, 85, 65, 69, 80, 69, 78, 128, 86, 69, 85, 65, 69, 128, - 86, 69, 83, 84, 65, 128, 86, 69, 83, 83, 69, 204, 86, 69, 82, 217, 86, - 69, 82, 84, 73, 67, 65, 76, 76, 89, 128, 86, 69, 82, 84, 73, 67, 65, 76, - 76, 217, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 54, 128, 86, - 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 53, 128, 86, 69, 82, 84, - 73, 67, 65, 76, 45, 48, 54, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, - 76, 45, 48, 54, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, - 54, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, - 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 48, 128, 86, - 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 54, 128, 86, 69, 82, 84, - 73, 67, 65, 76, 45, 48, 53, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, - 76, 45, 48, 53, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, - 53, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, - 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 49, 128, 86, - 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 48, 128, 86, 69, 82, 84, - 73, 67, 65, 76, 45, 48, 52, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, - 76, 45, 48, 52, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, - 52, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, - 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 50, 128, 86, - 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 49, 128, 86, 69, 82, 84, - 73, 67, 65, 76, 45, 48, 52, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, - 76, 45, 48, 51, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, - 51, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, - 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 51, 128, 86, - 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 50, 128, 86, 69, 82, 84, - 73, 67, 65, 76, 45, 48, 51, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, - 76, 45, 48, 51, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, - 50, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, - 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 52, 128, 86, - 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 51, 128, 86, 69, 82, 84, - 73, 67, 65, 76, 45, 48, 50, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, - 76, 45, 48, 50, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, - 50, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, - 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 53, 128, 86, - 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 52, 128, 86, 69, 82, 84, - 73, 67, 65, 76, 45, 48, 49, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, - 76, 45, 48, 49, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, - 49, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, - 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 54, 128, 86, - 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 53, 128, 86, 69, 82, 84, - 73, 67, 65, 76, 45, 48, 48, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, - 76, 45, 48, 48, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, - 48, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, - 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 48, 128, 86, - 69, 82, 84, 73, 67, 65, 76, 128, 86, 69, 82, 83, 73, 67, 76, 69, 128, 86, - 69, 82, 83, 197, 86, 69, 82, 71, 69, 128, 86, 69, 82, 68, 73, 71, 82, 73, - 83, 128, 86, 69, 80, 128, 86, 69, 78, 68, 128, 86, 69, 73, 76, 128, 86, + 128, 86, 79, 84, 128, 86, 79, 211, 86, 79, 80, 128, 86, 79, 79, 73, 128, + 86, 79, 79, 128, 86, 79, 77, 128, 86, 79, 76, 85, 77, 197, 86, 79, 76, + 84, 65, 71, 197, 86, 79, 76, 67, 65, 78, 79, 128, 86, 79, 76, 65, 80, 85, + 203, 86, 79, 73, 196, 86, 79, 73, 67, 73, 78, 71, 128, 86, 79, 73, 67, + 69, 76, 69, 83, 211, 86, 79, 73, 67, 69, 196, 86, 79, 67, 65, 76, 73, 90, + 65, 84, 73, 79, 206, 86, 79, 67, 65, 204, 86, 79, 128, 86, 73, 89, 79, + 128, 86, 73, 88, 128, 86, 73, 84, 82, 73, 79, 76, 45, 50, 128, 86, 73, + 84, 82, 73, 79, 76, 128, 86, 73, 84, 65, 69, 45, 50, 128, 86, 73, 84, 65, + 69, 128, 86, 73, 84, 128, 86, 73, 83, 73, 71, 79, 84, 72, 73, 195, 86, + 73, 83, 65, 82, 71, 65, 89, 65, 128, 86, 73, 83, 65, 82, 71, 65, 128, 86, + 73, 83, 65, 82, 71, 193, 86, 73, 82, 73, 65, 77, 128, 86, 73, 82, 71, 79, + 128, 86, 73, 82, 71, 65, 128, 86, 73, 82, 65, 77, 65, 128, 86, 73, 80, + 128, 86, 73, 79, 76, 73, 78, 128, 86, 73, 78, 69, 71, 65, 82, 45, 51, + 128, 86, 73, 78, 69, 71, 65, 82, 45, 50, 128, 86, 73, 78, 69, 71, 65, 82, + 128, 86, 73, 78, 69, 71, 65, 210, 86, 73, 78, 69, 128, 86, 73, 78, 197, + 86, 73, 78, 128, 86, 73, 76, 76, 65, 71, 69, 128, 86, 73, 73, 128, 86, + 73, 69, 88, 128, 86, 73, 69, 87, 73, 78, 199, 86, 73, 69, 87, 68, 65, 84, + 193, 86, 73, 69, 84, 128, 86, 73, 69, 212, 86, 73, 69, 80, 128, 86, 73, + 69, 128, 86, 73, 68, 74, 45, 50, 128, 86, 73, 68, 74, 128, 86, 73, 68, + 69, 79, 67, 65, 83, 83, 69, 84, 84, 69, 128, 86, 73, 68, 69, 207, 86, 73, + 68, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, 73, 66, 82, 65, 84, 73, 79, + 206, 86, 70, 65, 128, 86, 69, 89, 90, 128, 86, 69, 88, 128, 86, 69, 87, + 128, 86, 69, 215, 86, 69, 85, 88, 128, 86, 69, 85, 77, 128, 86, 69, 85, + 65, 69, 80, 69, 78, 128, 86, 69, 85, 65, 69, 128, 86, 69, 83, 84, 65, + 128, 86, 69, 83, 83, 69, 204, 86, 69, 82, 217, 86, 69, 82, 84, 73, 67, + 65, 76, 76, 89, 128, 86, 69, 82, 84, 73, 67, 65, 76, 76, 217, 86, 69, 82, + 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, + 65, 76, 45, 48, 54, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, + 48, 54, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, + 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 50, 128, + 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 49, 128, 86, 69, 82, + 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, + 65, 76, 45, 48, 53, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, + 48, 53, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, + 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 51, 128, + 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 50, 128, 86, 69, 82, + 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, + 65, 76, 45, 48, 53, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, + 48, 52, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, + 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 52, 128, + 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 51, 128, 86, 69, 82, + 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, + 65, 76, 45, 48, 52, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, + 48, 52, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, + 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 53, 128, + 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 52, 128, 86, 69, 82, + 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, + 65, 76, 45, 48, 51, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, + 48, 51, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, + 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 54, 128, + 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 53, 128, 86, 69, 82, + 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, + 65, 76, 45, 48, 50, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, + 48, 50, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, + 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 48, 128, + 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 54, 128, 86, 69, 82, + 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, + 65, 76, 45, 48, 49, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, + 48, 49, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, + 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 49, 128, + 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 48, 128, 86, 69, 82, + 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, + 65, 76, 45, 48, 48, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, + 48, 48, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, + 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 50, 128, + 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 49, 128, 86, 69, 82, + 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, + 65, 76, 128, 86, 69, 82, 83, 73, 67, 76, 69, 128, 86, 69, 82, 83, 197, + 86, 69, 82, 71, 69, 128, 86, 69, 82, 68, 73, 71, 82, 73, 83, 128, 86, 69, + 82, 128, 86, 69, 80, 128, 86, 69, 78, 68, 128, 86, 69, 73, 76, 128, 86, 69, 72, 73, 67, 76, 69, 128, 86, 69, 72, 128, 86, 69, 200, 86, 69, 69, 128, 86, 69, 197, 86, 69, 68, 69, 128, 86, 69, 67, 84, 79, 210, 86, 65, 89, 65, 78, 78, 65, 128, 86, 65, 88, 128, 86, 65, 86, 128, 86, 65, 214, 86, 65, 85, 128, 86, 65, 84, 72, 89, 128, 86, 65, 84, 128, 86, 65, 83, 84, 78, 69, 83, 211, 86, 65, 83, 73, 83, 128, 86, 65, 82, 89, 211, 86, - 65, 82, 73, 75, 65, 128, 86, 65, 82, 73, 65, 78, 212, 86, 65, 82, 73, 65, - 128, 86, 65, 82, 73, 193, 86, 65, 82, 69, 73, 65, 201, 86, 65, 82, 69, - 73, 193, 86, 65, 80, 79, 85, 82, 83, 128, 86, 65, 80, 128, 86, 65, 78, - 69, 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 65, 128, 86, 65, 77, 65, - 71, 79, 77, 85, 75, 72, 193, 86, 65, 76, 76, 69, 89, 128, 86, 65, 73, - 128, 86, 65, 72, 128, 86, 65, 65, 86, 85, 128, 86, 65, 65, 128, 86, 48, - 52, 48, 65, 128, 86, 48, 52, 48, 128, 86, 48, 51, 57, 128, 86, 48, 51, - 56, 128, 86, 48, 51, 55, 65, 128, 86, 48, 51, 55, 128, 86, 48, 51, 54, - 128, 86, 48, 51, 53, 128, 86, 48, 51, 52, 128, 86, 48, 51, 51, 65, 128, - 86, 48, 51, 51, 128, 86, 48, 51, 50, 128, 86, 48, 51, 49, 65, 128, 86, - 48, 51, 49, 128, 86, 48, 51, 48, 65, 128, 86, 48, 51, 48, 128, 86, 48, - 50, 57, 65, 128, 86, 48, 50, 57, 128, 86, 48, 50, 56, 65, 128, 86, 48, - 50, 56, 128, 86, 48, 50, 55, 128, 86, 48, 50, 54, 128, 86, 48, 50, 53, - 128, 86, 48, 50, 52, 128, 86, 48, 50, 51, 65, 128, 86, 48, 50, 51, 128, - 86, 48, 50, 50, 128, 86, 48, 50, 49, 128, 86, 48, 50, 48, 76, 128, 86, - 48, 50, 48, 75, 128, 86, 48, 50, 48, 74, 128, 86, 48, 50, 48, 73, 128, - 86, 48, 50, 48, 72, 128, 86, 48, 50, 48, 71, 128, 86, 48, 50, 48, 70, - 128, 86, 48, 50, 48, 69, 128, 86, 48, 50, 48, 68, 128, 86, 48, 50, 48, - 67, 128, 86, 48, 50, 48, 66, 128, 86, 48, 50, 48, 65, 128, 86, 48, 50, - 48, 128, 86, 48, 49, 57, 128, 86, 48, 49, 56, 128, 86, 48, 49, 55, 128, - 86, 48, 49, 54, 128, 86, 48, 49, 53, 128, 86, 48, 49, 52, 128, 86, 48, - 49, 51, 128, 86, 48, 49, 50, 66, 128, 86, 48, 49, 50, 65, 128, 86, 48, - 49, 50, 128, 86, 48, 49, 49, 67, 128, 86, 48, 49, 49, 66, 128, 86, 48, - 49, 49, 65, 128, 86, 48, 49, 49, 128, 86, 48, 49, 48, 128, 86, 48, 48, - 57, 128, 86, 48, 48, 56, 128, 86, 48, 48, 55, 66, 128, 86, 48, 48, 55, - 65, 128, 86, 48, 48, 55, 128, 86, 48, 48, 54, 128, 86, 48, 48, 53, 128, - 86, 48, 48, 52, 128, 86, 48, 48, 51, 128, 86, 48, 48, 50, 65, 128, 86, - 48, 48, 50, 128, 86, 48, 48, 49, 73, 128, 86, 48, 48, 49, 72, 128, 86, - 48, 48, 49, 71, 128, 86, 48, 48, 49, 70, 128, 86, 48, 48, 49, 69, 128, - 86, 48, 48, 49, 68, 128, 86, 48, 48, 49, 67, 128, 86, 48, 48, 49, 66, - 128, 86, 48, 48, 49, 65, 128, 86, 48, 48, 49, 128, 85, 90, 85, 128, 85, - 90, 51, 128, 85, 90, 179, 85, 89, 65, 78, 78, 65, 128, 85, 89, 128, 85, - 85, 89, 65, 78, 78, 65, 128, 85, 85, 85, 85, 128, 85, 85, 85, 51, 128, - 85, 85, 85, 50, 128, 85, 85, 69, 128, 85, 84, 85, 75, 73, 128, 85, 83, - 83, 85, 51, 128, 85, 83, 83, 85, 128, 85, 83, 72, 88, 128, 85, 83, 72, - 85, 77, 88, 128, 85, 83, 72, 69, 78, 78, 65, 128, 85, 83, 72, 50, 128, - 85, 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 45, 50, 128, - 85, 83, 69, 45, 49, 128, 85, 83, 69, 128, 85, 83, 197, 85, 82, 85, 218, - 85, 82, 85, 83, 128, 85, 82, 85, 68, 65, 128, 85, 82, 85, 68, 193, 85, - 82, 85, 128, 85, 82, 213, 85, 82, 78, 128, 85, 82, 73, 78, 69, 128, 85, - 82, 73, 51, 128, 85, 82, 73, 128, 85, 82, 65, 78, 85, 83, 128, 85, 82, - 65, 128, 85, 82, 52, 128, 85, 82, 50, 128, 85, 82, 178, 85, 80, 87, 65, - 82, 68, 83, 128, 85, 80, 87, 65, 82, 68, 211, 85, 80, 87, 65, 82, 68, - 128, 85, 80, 87, 65, 82, 196, 85, 80, 84, 85, 82, 78, 128, 85, 80, 83, - 73, 76, 79, 78, 128, 85, 80, 83, 73, 76, 79, 206, 85, 80, 82, 73, 71, 72, - 212, 85, 80, 80, 69, 210, 85, 80, 65, 68, 72, 77, 65, 78, 73, 89, 65, - 128, 85, 80, 45, 80, 79, 73, 78, 84, 73, 78, 199, 85, 79, 78, 128, 85, - 78, 78, 128, 85, 78, 77, 65, 82, 82, 73, 69, 196, 85, 78, 75, 78, 79, 87, - 78, 128, 85, 78, 73, 86, 69, 82, 83, 65, 204, 85, 78, 73, 84, 89, 128, - 85, 78, 73, 84, 128, 85, 78, 73, 212, 85, 78, 73, 79, 78, 128, 85, 78, - 73, 79, 206, 85, 78, 73, 70, 73, 69, 196, 85, 78, 68, 207, 85, 78, 68, - 69, 82, 84, 73, 69, 128, 85, 78, 68, 69, 82, 76, 73, 78, 197, 85, 78, 68, - 69, 82, 68, 79, 84, 128, 85, 78, 68, 69, 82, 66, 65, 82, 128, 85, 78, 68, - 69, 210, 85, 78, 67, 73, 193, 85, 78, 65, 83, 80, 73, 82, 65, 84, 69, 68, - 128, 85, 78, 65, 80, 128, 85, 78, 65, 77, 85, 83, 69, 196, 85, 78, 65, - 128, 85, 206, 85, 77, 85, 77, 128, 85, 77, 85, 205, 85, 77, 66, 82, 69, - 76, 76, 65, 128, 85, 77, 66, 82, 69, 76, 76, 193, 85, 77, 66, 73, 78, - 128, 85, 75, 85, 128, 85, 75, 82, 65, 73, 78, 73, 65, 206, 85, 75, 65, - 82, 65, 128, 85, 75, 65, 82, 193, 85, 75, 128, 85, 73, 76, 76, 69, 65, - 78, 78, 128, 85, 73, 71, 72, 85, 210, 85, 71, 65, 82, 73, 84, 73, 195, - 85, 69, 89, 128, 85, 69, 73, 128, 85, 69, 69, 128, 85, 69, 65, 128, 85, - 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 84, 84, 193, - 85, 68, 65, 65, 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66, 85, - 70, 73, 76, 73, 128, 85, 66, 72, 65, 89, 65, 84, 207, 85, 66, 65, 68, 65, - 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, 85, 65, 78, 71, 128, 85, - 65, 128, 85, 178, 85, 48, 52, 50, 128, 85, 48, 52, 49, 128, 85, 48, 52, - 48, 128, 85, 48, 51, 57, 128, 85, 48, 51, 56, 128, 85, 48, 51, 55, 128, - 85, 48, 51, 54, 128, 85, 48, 51, 53, 128, 85, 48, 51, 52, 128, 85, 48, - 51, 51, 128, 85, 48, 51, 50, 65, 128, 85, 48, 51, 50, 128, 85, 48, 51, - 49, 128, 85, 48, 51, 48, 128, 85, 48, 50, 57, 65, 128, 85, 48, 50, 57, - 128, 85, 48, 50, 56, 128, 85, 48, 50, 55, 128, 85, 48, 50, 54, 128, 85, - 48, 50, 53, 128, 85, 48, 50, 52, 128, 85, 48, 50, 51, 65, 128, 85, 48, - 50, 51, 128, 85, 48, 50, 50, 128, 85, 48, 50, 49, 128, 85, 48, 50, 48, - 128, 85, 48, 49, 57, 128, 85, 48, 49, 56, 128, 85, 48, 49, 55, 128, 85, - 48, 49, 54, 128, 85, 48, 49, 53, 128, 85, 48, 49, 52, 128, 85, 48, 49, - 51, 128, 85, 48, 49, 50, 128, 85, 48, 49, 49, 128, 85, 48, 49, 48, 128, - 85, 48, 48, 57, 128, 85, 48, 48, 56, 128, 85, 48, 48, 55, 128, 85, 48, - 48, 54, 66, 128, 85, 48, 48, 54, 65, 128, 85, 48, 48, 54, 128, 85, 48, - 48, 53, 128, 85, 48, 48, 52, 128, 85, 48, 48, 51, 128, 85, 48, 48, 50, - 128, 85, 48, 48, 49, 128, 85, 45, 73, 45, 73, 128, 85, 45, 69, 79, 45, - 69, 85, 128, 85, 45, 66, 82, 74, 71, 85, 128, 84, 90, 85, 128, 84, 90, - 79, 65, 128, 84, 90, 79, 128, 84, 90, 73, 210, 84, 90, 73, 128, 84, 90, - 69, 69, 128, 84, 90, 69, 128, 84, 90, 65, 65, 128, 84, 90, 65, 128, 84, - 90, 128, 84, 89, 210, 84, 89, 80, 69, 45, 183, 84, 89, 80, 69, 45, 182, - 84, 89, 80, 69, 45, 181, 84, 89, 80, 69, 45, 180, 84, 89, 80, 69, 45, - 179, 84, 89, 80, 69, 45, 178, 84, 89, 80, 69, 45, 177, 84, 89, 80, 197, - 84, 89, 79, 128, 84, 89, 73, 128, 84, 89, 69, 128, 84, 89, 65, 128, 84, - 87, 79, 79, 128, 84, 87, 79, 45, 87, 65, 217, 84, 87, 79, 45, 84, 72, 73, - 82, 84, 89, 128, 84, 87, 79, 45, 76, 73, 78, 197, 84, 87, 79, 45, 72, 69, - 65, 68, 69, 196, 84, 87, 79, 45, 69, 205, 84, 87, 73, 83, 84, 69, 196, - 84, 87, 73, 73, 128, 84, 87, 73, 128, 84, 87, 69, 78, 84, 89, 45, 84, 87, - 79, 128, 84, 87, 69, 78, 84, 89, 45, 84, 72, 82, 69, 69, 128, 84, 87, 69, - 78, 84, 89, 45, 83, 73, 88, 128, 84, 87, 69, 78, 84, 89, 45, 83, 69, 86, - 69, 78, 128, 84, 87, 69, 78, 84, 89, 45, 79, 78, 69, 128, 84, 87, 69, 78, - 84, 89, 45, 78, 73, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 70, 79, 85, - 82, 128, 84, 87, 69, 78, 84, 89, 45, 70, 73, 86, 69, 128, 84, 87, 69, 78, - 84, 89, 45, 69, 73, 71, 72, 84, 200, 84, 87, 69, 78, 84, 89, 45, 69, 73, - 71, 72, 84, 128, 84, 87, 69, 78, 84, 89, 128, 84, 87, 69, 78, 84, 217, - 84, 87, 69, 76, 86, 69, 45, 84, 72, 73, 82, 84, 89, 128, 84, 87, 69, 76, - 86, 69, 128, 84, 87, 69, 76, 86, 197, 84, 87, 69, 128, 84, 87, 65, 65, - 128, 84, 87, 65, 128, 84, 86, 82, 73, 68, 79, 128, 84, 86, 73, 77, 65, - 68, 85, 210, 84, 85, 88, 128, 84, 85, 85, 77, 85, 128, 84, 85, 85, 128, - 84, 85, 84, 84, 89, 128, 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 84, 85, - 84, 128, 84, 85, 82, 88, 128, 84, 85, 82, 85, 128, 84, 85, 82, 84, 76, - 69, 128, 84, 85, 82, 79, 50, 128, 84, 85, 82, 78, 83, 84, 73, 76, 69, - 128, 84, 85, 82, 78, 69, 196, 84, 85, 82, 206, 84, 85, 82, 75, 73, 83, - 200, 84, 85, 82, 66, 65, 78, 128, 84, 85, 82, 128, 84, 85, 80, 128, 84, - 85, 79, 88, 128, 84, 85, 79, 84, 128, 84, 85, 79, 80, 128, 84, 85, 79, - 128, 84, 85, 78, 78, 89, 128, 84, 85, 77, 69, 84, 69, 83, 128, 84, 85, - 77, 65, 69, 128, 84, 85, 77, 128, 84, 85, 76, 73, 80, 128, 84, 85, 75, - 87, 69, 78, 84, 73, 83, 128, 84, 85, 75, 128, 84, 85, 71, 82, 73, 203, - 84, 85, 71, 50, 128, 84, 85, 71, 178, 84, 85, 65, 82, 69, 199, 84, 85, - 65, 69, 80, 128, 84, 85, 65, 69, 128, 84, 213, 84, 84, 85, 85, 128, 84, - 84, 85, 68, 68, 65, 71, 128, 84, 84, 85, 68, 68, 65, 65, 71, 128, 84, 84, - 85, 128, 84, 84, 84, 72, 65, 128, 84, 84, 84, 65, 128, 84, 84, 83, 85, - 128, 84, 84, 83, 79, 128, 84, 84, 83, 73, 128, 84, 84, 83, 69, 69, 128, - 84, 84, 83, 69, 128, 84, 84, 83, 65, 128, 84, 84, 79, 79, 128, 84, 84, - 73, 73, 128, 84, 84, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, 72, 85, - 128, 84, 84, 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 128, - 84, 84, 72, 69, 69, 128, 84, 84, 72, 69, 128, 84, 84, 72, 65, 65, 128, - 84, 84, 72, 128, 84, 84, 69, 72, 69, 72, 128, 84, 84, 69, 72, 69, 200, - 84, 84, 69, 72, 128, 84, 84, 69, 200, 84, 84, 69, 69, 128, 84, 84, 65, - 89, 65, 78, 78, 65, 128, 84, 84, 65, 85, 128, 84, 84, 65, 73, 128, 84, - 84, 65, 65, 128, 84, 84, 50, 128, 84, 83, 87, 69, 128, 84, 83, 87, 65, - 128, 84, 83, 86, 128, 84, 83, 83, 69, 128, 84, 83, 83, 65, 128, 84, 83, - 72, 85, 71, 83, 128, 84, 83, 72, 79, 79, 75, 128, 84, 83, 72, 79, 79, - 203, 84, 83, 72, 69, 83, 128, 84, 83, 72, 69, 71, 128, 84, 83, 72, 69, - 199, 84, 83, 72, 69, 128, 84, 83, 72, 65, 128, 84, 83, 69, 82, 69, 128, - 84, 83, 65, 68, 73, 128, 84, 83, 65, 68, 201, 84, 83, 65, 65, 68, 73, 89, - 128, 84, 83, 65, 65, 128, 84, 83, 193, 84, 82, 89, 66, 76, 73, 79, 206, - 84, 82, 85, 84, 72, 128, 84, 82, 85, 78, 75, 128, 84, 82, 85, 78, 67, 65, - 84, 69, 196, 84, 82, 85, 77, 80, 69, 84, 128, 84, 82, 85, 69, 128, 84, - 82, 85, 67, 75, 128, 84, 82, 79, 80, 73, 67, 65, 204, 84, 82, 79, 80, 72, - 89, 128, 84, 82, 79, 77, 73, 75, 79, 83, 89, 78, 65, 71, 77, 65, 128, 84, - 82, 79, 77, 73, 75, 79, 80, 83, 73, 70, 73, 83, 84, 79, 78, 128, 84, 82, - 79, 77, 73, 75, 79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 84, - 82, 79, 77, 73, 75, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, 206, 84, 82, - 79, 77, 73, 75, 79, 76, 89, 71, 73, 83, 77, 65, 128, 84, 82, 79, 76, 76, - 69, 89, 66, 85, 83, 128, 84, 82, 79, 75, 85, 84, 65, 83, 84, 201, 84, 82, - 79, 69, 90, 69, 78, 73, 65, 206, 84, 82, 73, 85, 77, 80, 72, 128, 84, 82, - 73, 84, 79, 211, 84, 82, 73, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 82, - 73, 83, 73, 77, 79, 85, 128, 84, 82, 73, 83, 69, 77, 69, 128, 84, 82, 73, - 80, 79, 68, 128, 84, 82, 73, 80, 76, 73, 128, 84, 82, 73, 80, 76, 197, - 84, 82, 73, 79, 206, 84, 82, 73, 73, 83, 65, 80, 128, 84, 82, 73, 71, 82, - 65, 77, 77, 79, 211, 84, 82, 73, 71, 82, 65, 205, 84, 82, 73, 71, 79, 82, - 71, 79, 78, 128, 84, 82, 73, 70, 79, 78, 73, 65, 83, 128, 84, 82, 73, 70, - 79, 76, 73, 65, 84, 197, 84, 82, 73, 68, 69, 78, 84, 128, 84, 82, 73, 68, - 69, 78, 212, 84, 82, 73, 67, 79, 76, 79, 78, 128, 84, 82, 73, 65, 78, 71, - 85, 76, 65, 210, 84, 82, 73, 65, 78, 71, 76, 69, 45, 82, 79, 85, 78, 196, - 84, 82, 73, 65, 78, 71, 76, 69, 45, 72, 69, 65, 68, 69, 196, 84, 82, 73, - 65, 78, 71, 76, 69, 128, 84, 82, 73, 65, 78, 71, 76, 197, 84, 82, 73, 65, - 128, 84, 82, 73, 128, 84, 82, 69, 83, 73, 76, 76, 79, 128, 84, 82, 69, - 78, 68, 128, 84, 82, 69, 78, 196, 84, 82, 69, 77, 79, 76, 79, 45, 51, + 65, 82, 73, 75, 65, 128, 86, 65, 82, 73, 65, 78, 84, 128, 86, 65, 82, 73, + 65, 78, 212, 86, 65, 82, 73, 65, 128, 86, 65, 82, 73, 193, 86, 65, 82, + 69, 73, 65, 201, 86, 65, 82, 69, 73, 193, 86, 65, 80, 79, 85, 82, 83, + 128, 86, 65, 80, 128, 86, 65, 78, 69, 128, 86, 65, 77, 65, 71, 79, 77, + 85, 75, 72, 65, 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 193, 86, 65, + 76, 76, 69, 89, 128, 86, 65, 74, 128, 86, 65, 73, 128, 86, 65, 72, 128, + 86, 65, 200, 86, 65, 65, 86, 85, 128, 86, 65, 65, 128, 86, 48, 52, 48, + 65, 128, 86, 48, 52, 48, 128, 86, 48, 51, 57, 128, 86, 48, 51, 56, 128, + 86, 48, 51, 55, 65, 128, 86, 48, 51, 55, 128, 86, 48, 51, 54, 128, 86, + 48, 51, 53, 128, 86, 48, 51, 52, 128, 86, 48, 51, 51, 65, 128, 86, 48, + 51, 51, 128, 86, 48, 51, 50, 128, 86, 48, 51, 49, 65, 128, 86, 48, 51, + 49, 128, 86, 48, 51, 48, 65, 128, 86, 48, 51, 48, 128, 86, 48, 50, 57, + 65, 128, 86, 48, 50, 57, 128, 86, 48, 50, 56, 65, 128, 86, 48, 50, 56, + 128, 86, 48, 50, 55, 128, 86, 48, 50, 54, 128, 86, 48, 50, 53, 128, 86, + 48, 50, 52, 128, 86, 48, 50, 51, 65, 128, 86, 48, 50, 51, 128, 86, 48, + 50, 50, 128, 86, 48, 50, 49, 128, 86, 48, 50, 48, 76, 128, 86, 48, 50, + 48, 75, 128, 86, 48, 50, 48, 74, 128, 86, 48, 50, 48, 73, 128, 86, 48, + 50, 48, 72, 128, 86, 48, 50, 48, 71, 128, 86, 48, 50, 48, 70, 128, 86, + 48, 50, 48, 69, 128, 86, 48, 50, 48, 68, 128, 86, 48, 50, 48, 67, 128, + 86, 48, 50, 48, 66, 128, 86, 48, 50, 48, 65, 128, 86, 48, 50, 48, 128, + 86, 48, 49, 57, 128, 86, 48, 49, 56, 128, 86, 48, 49, 55, 128, 86, 48, + 49, 54, 128, 86, 48, 49, 53, 128, 86, 48, 49, 52, 128, 86, 48, 49, 51, + 128, 86, 48, 49, 50, 66, 128, 86, 48, 49, 50, 65, 128, 86, 48, 49, 50, + 128, 86, 48, 49, 49, 67, 128, 86, 48, 49, 49, 66, 128, 86, 48, 49, 49, + 65, 128, 86, 48, 49, 49, 128, 86, 48, 49, 48, 128, 86, 48, 48, 57, 128, + 86, 48, 48, 56, 128, 86, 48, 48, 55, 66, 128, 86, 48, 48, 55, 65, 128, + 86, 48, 48, 55, 128, 86, 48, 48, 54, 128, 86, 48, 48, 53, 128, 86, 48, + 48, 52, 128, 86, 48, 48, 51, 128, 86, 48, 48, 50, 65, 128, 86, 48, 48, + 50, 128, 86, 48, 48, 49, 73, 128, 86, 48, 48, 49, 72, 128, 86, 48, 48, + 49, 71, 128, 86, 48, 48, 49, 70, 128, 86, 48, 48, 49, 69, 128, 86, 48, + 48, 49, 68, 128, 86, 48, 48, 49, 67, 128, 86, 48, 48, 49, 66, 128, 86, + 48, 48, 49, 65, 128, 86, 48, 48, 49, 128, 85, 90, 85, 128, 85, 90, 51, + 128, 85, 90, 179, 85, 89, 65, 78, 78, 65, 128, 85, 89, 128, 85, 87, 85, + 128, 85, 85, 89, 65, 78, 78, 65, 128, 85, 85, 85, 85, 128, 85, 85, 85, + 51, 128, 85, 85, 85, 50, 128, 85, 85, 69, 128, 85, 84, 85, 75, 73, 128, + 85, 83, 83, 85, 51, 128, 85, 83, 83, 85, 128, 85, 83, 72, 88, 128, 85, + 83, 72, 85, 77, 88, 128, 85, 83, 72, 69, 78, 78, 65, 128, 85, 83, 72, 50, + 128, 85, 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 45, 50, + 128, 85, 83, 69, 45, 49, 128, 85, 83, 69, 128, 85, 83, 197, 85, 82, 85, + 218, 85, 82, 85, 83, 128, 85, 82, 85, 68, 65, 128, 85, 82, 85, 68, 193, + 85, 82, 85, 128, 85, 82, 213, 85, 82, 78, 128, 85, 82, 73, 78, 69, 128, + 85, 82, 73, 51, 128, 85, 82, 73, 128, 85, 82, 65, 78, 85, 83, 128, 85, + 82, 65, 128, 85, 82, 52, 128, 85, 82, 50, 128, 85, 82, 178, 85, 80, 87, + 65, 82, 68, 83, 128, 85, 80, 87, 65, 82, 68, 128, 85, 80, 87, 65, 82, + 196, 85, 80, 84, 85, 82, 78, 128, 85, 80, 83, 73, 76, 79, 78, 128, 85, + 80, 83, 73, 76, 79, 206, 85, 80, 82, 73, 71, 72, 212, 85, 80, 80, 69, + 210, 85, 80, 65, 68, 72, 77, 65, 78, 73, 89, 65, 128, 85, 80, 45, 80, 79, + 73, 78, 84, 73, 78, 199, 85, 79, 78, 128, 85, 78, 78, 128, 85, 78, 77, + 65, 82, 82, 73, 69, 196, 85, 78, 75, 78, 79, 87, 78, 128, 85, 78, 73, 86, + 69, 82, 83, 65, 204, 85, 78, 73, 84, 89, 128, 85, 78, 73, 84, 128, 85, + 78, 73, 212, 85, 78, 73, 79, 78, 128, 85, 78, 73, 79, 206, 85, 78, 73, + 70, 73, 69, 196, 85, 78, 68, 207, 85, 78, 68, 69, 82, 84, 73, 69, 128, + 85, 78, 68, 69, 82, 76, 73, 78, 197, 85, 78, 68, 69, 82, 68, 79, 84, 128, + 85, 78, 68, 69, 82, 66, 65, 82, 128, 85, 78, 68, 69, 210, 85, 78, 67, 73, + 193, 85, 78, 67, 69, 82, 84, 65, 73, 78, 84, 217, 85, 78, 65, 83, 80, 73, + 82, 65, 84, 69, 68, 128, 85, 78, 65, 80, 128, 85, 78, 65, 77, 85, 83, 69, + 196, 85, 78, 65, 128, 85, 206, 85, 77, 85, 77, 128, 85, 77, 85, 205, 85, + 77, 66, 82, 69, 76, 76, 65, 128, 85, 77, 66, 82, 69, 76, 76, 193, 85, 77, + 66, 73, 78, 128, 85, 75, 85, 128, 85, 75, 82, 65, 73, 78, 73, 65, 206, + 85, 75, 65, 82, 65, 128, 85, 75, 65, 82, 193, 85, 75, 128, 85, 73, 76, + 76, 69, 65, 78, 78, 128, 85, 73, 71, 72, 85, 210, 85, 71, 65, 82, 73, 84, + 73, 195, 85, 69, 89, 128, 85, 69, 73, 128, 85, 69, 69, 128, 85, 69, 65, + 128, 85, 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 84, + 84, 193, 85, 68, 65, 65, 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, + 66, 85, 70, 73, 76, 73, 128, 85, 66, 72, 65, 89, 65, 84, 207, 85, 66, 65, + 68, 65, 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, 85, 65, 78, 71, + 128, 85, 65, 128, 85, 178, 85, 48, 52, 50, 128, 85, 48, 52, 49, 128, 85, + 48, 52, 48, 128, 85, 48, 51, 57, 128, 85, 48, 51, 56, 128, 85, 48, 51, + 55, 128, 85, 48, 51, 54, 128, 85, 48, 51, 53, 128, 85, 48, 51, 52, 128, + 85, 48, 51, 51, 128, 85, 48, 51, 50, 65, 128, 85, 48, 51, 50, 128, 85, + 48, 51, 49, 128, 85, 48, 51, 48, 128, 85, 48, 50, 57, 65, 128, 85, 48, + 50, 57, 128, 85, 48, 50, 56, 128, 85, 48, 50, 55, 128, 85, 48, 50, 54, + 128, 85, 48, 50, 53, 128, 85, 48, 50, 52, 128, 85, 48, 50, 51, 65, 128, + 85, 48, 50, 51, 128, 85, 48, 50, 50, 128, 85, 48, 50, 49, 128, 85, 48, + 50, 48, 128, 85, 48, 49, 57, 128, 85, 48, 49, 56, 128, 85, 48, 49, 55, + 128, 85, 48, 49, 54, 128, 85, 48, 49, 53, 128, 85, 48, 49, 52, 128, 85, + 48, 49, 51, 128, 85, 48, 49, 50, 128, 85, 48, 49, 49, 128, 85, 48, 49, + 48, 128, 85, 48, 48, 57, 128, 85, 48, 48, 56, 128, 85, 48, 48, 55, 128, + 85, 48, 48, 54, 66, 128, 85, 48, 48, 54, 65, 128, 85, 48, 48, 54, 128, + 85, 48, 48, 53, 128, 85, 48, 48, 52, 128, 85, 48, 48, 51, 128, 85, 48, + 48, 50, 128, 85, 48, 48, 49, 128, 85, 45, 83, 72, 65, 80, 69, 196, 85, + 45, 73, 45, 73, 128, 85, 45, 69, 79, 45, 69, 85, 128, 85, 45, 66, 82, 74, + 71, 85, 128, 84, 90, 85, 128, 84, 90, 79, 65, 128, 84, 90, 79, 128, 84, + 90, 73, 210, 84, 90, 73, 128, 84, 90, 69, 69, 128, 84, 90, 69, 128, 84, + 90, 65, 65, 128, 84, 90, 65, 128, 84, 90, 128, 84, 89, 210, 84, 89, 80, + 69, 45, 183, 84, 89, 80, 69, 45, 182, 84, 89, 80, 69, 45, 181, 84, 89, + 80, 69, 45, 180, 84, 89, 80, 69, 45, 179, 84, 89, 80, 69, 45, 178, 84, + 89, 80, 69, 45, 177, 84, 89, 80, 197, 84, 89, 79, 128, 84, 89, 73, 128, + 84, 89, 69, 128, 84, 89, 65, 89, 128, 84, 89, 65, 128, 84, 88, 87, 86, + 128, 84, 88, 87, 214, 84, 88, 72, 69, 69, 202, 84, 87, 79, 79, 128, 84, + 87, 79, 45, 87, 65, 217, 84, 87, 79, 45, 84, 72, 73, 82, 84, 89, 128, 84, + 87, 79, 45, 76, 73, 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 69, 196, 84, + 87, 79, 45, 69, 205, 84, 87, 73, 83, 84, 69, 196, 84, 87, 73, 73, 128, + 84, 87, 73, 128, 84, 87, 69, 78, 84, 89, 45, 84, 87, 79, 128, 84, 87, 69, + 78, 84, 89, 45, 84, 72, 82, 69, 69, 128, 84, 87, 69, 78, 84, 89, 45, 83, + 73, 88, 128, 84, 87, 69, 78, 84, 89, 45, 83, 69, 86, 69, 78, 128, 84, 87, + 69, 78, 84, 89, 45, 79, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 78, 73, + 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 70, 79, 85, 82, 128, 84, 87, 69, + 78, 84, 89, 45, 70, 73, 86, 69, 128, 84, 87, 69, 78, 84, 89, 45, 69, 73, + 71, 72, 84, 200, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, 128, 84, + 87, 69, 78, 84, 89, 128, 84, 87, 69, 78, 84, 217, 84, 87, 69, 76, 86, 69, + 45, 84, 72, 73, 82, 84, 89, 128, 84, 87, 69, 76, 86, 69, 128, 84, 87, 69, + 76, 86, 197, 84, 87, 69, 128, 84, 87, 65, 65, 128, 84, 87, 65, 128, 84, + 86, 82, 73, 68, 79, 128, 84, 86, 73, 77, 65, 68, 85, 210, 84, 85, 88, + 128, 84, 85, 85, 77, 85, 128, 84, 85, 85, 128, 84, 85, 84, 84, 89, 128, + 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 84, 85, 84, 128, 84, 85, 82, 88, + 128, 84, 85, 82, 85, 128, 84, 85, 82, 84, 76, 69, 128, 84, 85, 82, 79, + 50, 128, 84, 85, 82, 78, 83, 84, 73, 76, 69, 128, 84, 85, 82, 206, 84, + 85, 82, 75, 73, 83, 200, 84, 85, 82, 75, 73, 195, 84, 85, 82, 66, 65, 78, + 128, 84, 85, 82, 128, 84, 85, 80, 128, 84, 85, 79, 88, 128, 84, 85, 79, + 84, 128, 84, 85, 79, 80, 128, 84, 85, 79, 128, 84, 85, 78, 78, 89, 128, + 84, 85, 77, 69, 84, 69, 83, 128, 84, 85, 77, 65, 69, 128, 84, 85, 77, + 128, 84, 85, 76, 73, 80, 128, 84, 85, 75, 87, 69, 78, 84, 73, 83, 128, + 84, 85, 75, 128, 84, 85, 71, 82, 73, 203, 84, 85, 71, 50, 128, 84, 85, + 71, 178, 84, 85, 66, 128, 84, 85, 65, 82, 69, 199, 84, 85, 65, 69, 80, + 128, 84, 85, 65, 69, 128, 84, 213, 84, 84, 85, 85, 128, 84, 84, 85, 68, + 68, 65, 71, 128, 84, 84, 85, 68, 68, 65, 65, 71, 128, 84, 84, 85, 128, + 84, 84, 84, 72, 65, 128, 84, 84, 84, 65, 128, 84, 84, 83, 85, 128, 84, + 84, 83, 79, 128, 84, 84, 83, 73, 128, 84, 84, 83, 69, 69, 128, 84, 84, + 83, 69, 128, 84, 84, 83, 65, 128, 84, 84, 79, 79, 128, 84, 84, 73, 73, + 128, 84, 84, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, 72, 85, 128, 84, + 84, 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, 84, + 72, 69, 69, 128, 84, 84, 72, 69, 128, 84, 84, 72, 65, 65, 128, 84, 84, + 72, 128, 84, 84, 69, 72, 69, 72, 128, 84, 84, 69, 72, 69, 200, 84, 84, + 69, 72, 128, 84, 84, 69, 200, 84, 84, 69, 69, 128, 84, 84, 65, 89, 65, + 78, 78, 65, 128, 84, 84, 65, 85, 128, 84, 84, 65, 73, 128, 84, 84, 65, + 65, 128, 84, 84, 50, 128, 84, 83, 87, 69, 128, 84, 83, 87, 66, 128, 84, + 83, 87, 65, 128, 84, 83, 86, 128, 84, 83, 83, 69, 128, 84, 83, 83, 65, + 128, 84, 83, 79, 214, 84, 83, 73, 85, 128, 84, 83, 72, 85, 71, 83, 128, + 84, 83, 72, 79, 79, 75, 128, 84, 83, 72, 79, 79, 203, 84, 83, 72, 79, 79, + 74, 128, 84, 83, 72, 69, 83, 128, 84, 83, 72, 69, 71, 128, 84, 83, 72, + 69, 199, 84, 83, 72, 69, 69, 74, 128, 84, 83, 72, 69, 128, 84, 83, 72, + 65, 194, 84, 83, 72, 65, 128, 84, 83, 69, 82, 69, 128, 84, 83, 69, 69, + 66, 128, 84, 83, 65, 68, 73, 128, 84, 83, 65, 68, 201, 84, 83, 65, 66, + 128, 84, 83, 65, 65, 68, 73, 89, 128, 84, 83, 65, 65, 128, 84, 83, 193, + 84, 82, 89, 66, 76, 73, 79, 206, 84, 82, 85, 84, 72, 128, 84, 82, 85, 78, + 75, 128, 84, 82, 85, 78, 67, 65, 84, 69, 196, 84, 82, 85, 77, 80, 69, 84, + 128, 84, 82, 85, 77, 80, 45, 57, 128, 84, 82, 85, 77, 80, 45, 56, 128, + 84, 82, 85, 77, 80, 45, 55, 128, 84, 82, 85, 77, 80, 45, 54, 128, 84, 82, + 85, 77, 80, 45, 53, 128, 84, 82, 85, 77, 80, 45, 52, 128, 84, 82, 85, 77, + 80, 45, 51, 128, 84, 82, 85, 77, 80, 45, 50, 49, 128, 84, 82, 85, 77, 80, + 45, 50, 48, 128, 84, 82, 85, 77, 80, 45, 50, 128, 84, 82, 85, 77, 80, 45, + 49, 57, 128, 84, 82, 85, 77, 80, 45, 49, 56, 128, 84, 82, 85, 77, 80, 45, + 49, 55, 128, 84, 82, 85, 77, 80, 45, 49, 54, 128, 84, 82, 85, 77, 80, 45, + 49, 53, 128, 84, 82, 85, 77, 80, 45, 49, 52, 128, 84, 82, 85, 77, 80, 45, + 49, 51, 128, 84, 82, 85, 77, 80, 45, 49, 50, 128, 84, 82, 85, 77, 80, 45, + 49, 49, 128, 84, 82, 85, 77, 80, 45, 49, 48, 128, 84, 82, 85, 77, 80, 45, + 49, 128, 84, 82, 85, 69, 128, 84, 82, 85, 67, 75, 128, 84, 82, 79, 80, + 73, 67, 65, 204, 84, 82, 79, 80, 72, 89, 128, 84, 82, 79, 77, 73, 75, 79, + 83, 89, 78, 65, 71, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79, 80, 83, 73, + 70, 73, 83, 84, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, 80, 65, 82, 65, + 75, 65, 76, 69, 83, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79, 78, 128, 84, + 82, 79, 77, 73, 75, 79, 206, 84, 82, 79, 77, 73, 75, 79, 76, 89, 71, 73, + 83, 77, 65, 128, 84, 82, 79, 76, 76, 69, 89, 66, 85, 83, 128, 84, 82, 79, + 75, 85, 84, 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, 84, + 82, 73, 85, 77, 80, 72, 128, 84, 82, 73, 84, 79, 211, 84, 82, 73, 84, 73, + 77, 79, 82, 73, 79, 78, 128, 84, 82, 73, 83, 73, 77, 79, 85, 128, 84, 82, + 73, 83, 69, 77, 69, 128, 84, 82, 73, 80, 79, 68, 128, 84, 82, 73, 80, 76, + 73, 128, 84, 82, 73, 80, 76, 197, 84, 82, 73, 79, 206, 84, 82, 73, 76, + 76, 73, 79, 78, 83, 128, 84, 82, 73, 73, 83, 65, 80, 128, 84, 82, 73, 71, + 82, 65, 77, 77, 79, 211, 84, 82, 73, 71, 82, 65, 205, 84, 82, 73, 71, 79, + 82, 71, 79, 78, 128, 84, 82, 73, 70, 79, 78, 73, 65, 83, 128, 84, 82, 73, + 70, 79, 76, 73, 65, 84, 197, 84, 82, 73, 68, 69, 78, 84, 128, 84, 82, 73, + 68, 69, 78, 212, 84, 82, 73, 67, 79, 76, 79, 78, 128, 84, 82, 73, 65, 78, + 71, 85, 76, 65, 210, 84, 82, 73, 65, 78, 71, 76, 69, 45, 82, 79, 85, 78, + 196, 84, 82, 73, 65, 78, 71, 76, 69, 45, 72, 69, 65, 68, 69, 196, 84, 82, + 73, 65, 78, 71, 76, 69, 128, 84, 82, 73, 65, 78, 71, 76, 197, 84, 82, 73, + 65, 128, 84, 82, 73, 128, 84, 82, 69, 83, 73, 76, 76, 79, 128, 84, 82, + 69, 78, 68, 128, 84, 82, 69, 78, 196, 84, 82, 69, 77, 79, 76, 79, 45, 51, 128, 84, 82, 69, 77, 79, 76, 79, 45, 50, 128, 84, 82, 69, 77, 79, 76, 79, 45, 49, 128, 84, 82, 69, 69, 128, 84, 82, 69, 197, 84, 82, 69, 65, 68, 73, 78, 71, 128, 84, 82, 65, 89, 128, 84, 82, 65, 80, 69, 90, 73, 85, 77, @@ -583,1414 +611,1483 @@ static unsigned char lexicon[] = { 84, 82, 65, 205, 84, 82, 65, 73, 78, 128, 84, 82, 65, 73, 206, 84, 82, 65, 73, 76, 73, 78, 199, 84, 82, 65, 70, 70, 73, 67, 128, 84, 82, 65, 70, 70, 73, 195, 84, 82, 65, 68, 197, 84, 82, 65, 67, 84, 79, 82, 128, 84, - 82, 65, 67, 75, 128, 84, 82, 128, 84, 79, 88, 128, 84, 79, 87, 69, 82, - 128, 84, 79, 85, 82, 78, 79, 73, 211, 84, 79, 84, 65, 204, 84, 79, 84, - 128, 84, 79, 82, 84, 79, 73, 83, 197, 84, 79, 82, 67, 85, 76, 85, 83, - 128, 84, 79, 82, 67, 85, 76, 85, 211, 84, 79, 82, 67, 72, 128, 84, 79, - 81, 128, 84, 79, 80, 66, 65, 82, 128, 84, 79, 80, 45, 76, 73, 71, 72, 84, - 69, 196, 84, 79, 80, 128, 84, 79, 208, 84, 79, 79, 84, 72, 128, 84, 79, - 79, 78, 128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, 85, 69, 128, 84, - 79, 78, 71, 85, 197, 84, 79, 78, 71, 128, 84, 79, 78, 69, 45, 56, 128, - 84, 79, 78, 69, 45, 55, 128, 84, 79, 78, 69, 45, 54, 128, 84, 79, 78, 69, - 45, 53, 128, 84, 79, 78, 69, 45, 52, 128, 84, 79, 78, 69, 45, 51, 128, - 84, 79, 78, 69, 45, 50, 128, 84, 79, 78, 69, 45, 49, 128, 84, 79, 78, 69, - 128, 84, 79, 78, 65, 204, 84, 79, 77, 80, 73, 128, 84, 79, 77, 65, 84, - 79, 128, 84, 79, 76, 79, 78, 71, 128, 84, 79, 75, 89, 207, 84, 79, 73, - 76, 69, 84, 128, 84, 79, 71, 69, 84, 72, 69, 82, 128, 84, 79, 68, 207, - 84, 79, 65, 78, 68, 65, 75, 72, 73, 65, 84, 128, 84, 79, 65, 128, 84, 78, - 128, 84, 76, 86, 128, 84, 76, 85, 128, 84, 76, 79, 128, 84, 76, 73, 128, - 84, 76, 72, 89, 65, 128, 84, 76, 72, 87, 69, 128, 84, 76, 72, 85, 128, - 84, 76, 72, 79, 79, 128, 84, 76, 72, 79, 128, 84, 76, 72, 73, 128, 84, - 76, 72, 69, 69, 128, 84, 76, 72, 69, 128, 84, 76, 72, 65, 128, 84, 76, - 69, 69, 128, 84, 76, 65, 128, 84, 74, 69, 128, 84, 73, 88, 128, 84, 73, - 87, 78, 128, 84, 73, 87, 65, 218, 84, 73, 84, 85, 65, 69, 80, 128, 84, - 73, 84, 76, 79, 128, 84, 73, 84, 193, 84, 73, 84, 128, 84, 73, 82, 89, - 65, 75, 128, 84, 73, 82, 84, 193, 84, 73, 82, 79, 78, 73, 65, 206, 84, - 73, 82, 69, 196, 84, 73, 82, 128, 84, 73, 210, 84, 73, 80, 80, 73, 128, - 84, 73, 80, 69, 72, 65, 128, 84, 73, 80, 128, 84, 73, 208, 84, 73, 78, - 89, 128, 84, 73, 78, 217, 84, 73, 78, 78, 69, 128, 84, 73, 78, 67, 84, - 85, 82, 69, 128, 84, 73, 78, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, - 128, 84, 73, 77, 69, 210, 84, 73, 77, 69, 128, 84, 73, 76, 68, 197, 84, - 73, 76, 128, 84, 73, 204, 84, 73, 75, 69, 85, 84, 45, 84, 72, 73, 69, 85, - 84, 72, 128, 84, 73, 75, 69, 85, 84, 45, 83, 73, 79, 83, 45, 75, 73, 89, - 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 45, 83, 73, 79, 83, 128, 84, 73, - 75, 69, 85, 84, 45, 82, 73, 69, 85, 76, 128, 84, 73, 75, 69, 85, 84, 45, - 80, 73, 69, 85, 80, 128, 84, 73, 75, 69, 85, 84, 45, 77, 73, 69, 85, 77, - 128, 84, 73, 75, 69, 85, 84, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, - 69, 85, 84, 45, 67, 73, 69, 85, 67, 128, 84, 73, 75, 69, 85, 84, 45, 67, - 72, 73, 69, 85, 67, 72, 128, 84, 73, 75, 69, 85, 84, 128, 84, 73, 75, 69, - 85, 212, 84, 73, 71, 72, 84, 76, 89, 45, 67, 76, 79, 83, 69, 196, 84, 73, - 71, 72, 212, 84, 73, 71, 69, 82, 128, 84, 73, 71, 69, 210, 84, 73, 70, - 73, 78, 65, 71, 200, 84, 73, 69, 88, 128, 84, 73, 69, 80, 128, 84, 73, - 197, 84, 73, 67, 75, 69, 84, 128, 84, 73, 67, 75, 128, 84, 73, 67, 203, - 84, 73, 65, 82, 65, 128, 84, 72, 90, 128, 84, 72, 89, 79, 79, 205, 84, - 72, 87, 79, 79, 128, 84, 72, 87, 79, 128, 84, 72, 87, 73, 73, 128, 84, - 72, 87, 73, 128, 84, 72, 87, 69, 69, 128, 84, 72, 87, 65, 65, 128, 84, - 72, 87, 65, 128, 84, 72, 85, 82, 211, 84, 72, 85, 82, 73, 83, 65, 218, - 84, 72, 85, 78, 71, 128, 84, 72, 85, 78, 68, 69, 82, 83, 84, 79, 82, 77, - 128, 84, 72, 85, 78, 68, 69, 82, 128, 84, 72, 85, 78, 68, 69, 210, 84, - 72, 85, 77, 66, 211, 84, 72, 82, 79, 87, 73, 78, 199, 84, 72, 82, 79, 85, - 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 84, 72, 82, 69, 69, 45, 84, 72, - 73, 82, 84, 89, 128, 84, 72, 82, 69, 69, 45, 80, 69, 82, 45, 69, 205, 84, - 72, 82, 69, 69, 45, 76, 73, 78, 197, 84, 72, 82, 69, 69, 45, 69, 205, 84, - 72, 82, 69, 69, 45, 196, 84, 72, 82, 69, 65, 68, 128, 84, 72, 79, 85, 83, - 65, 78, 68, 211, 84, 72, 79, 85, 83, 65, 78, 68, 128, 84, 72, 79, 85, 83, - 65, 78, 196, 84, 72, 79, 85, 71, 72, 212, 84, 72, 79, 85, 128, 84, 72, - 79, 82, 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, 78, 71, 128, 84, 72, - 79, 65, 128, 84, 72, 207, 84, 72, 73, 85, 84, 72, 128, 84, 72, 73, 84, - 65, 128, 84, 72, 73, 82, 84, 89, 45, 83, 69, 67, 79, 78, 196, 84, 72, 73, - 82, 84, 89, 45, 79, 78, 69, 128, 84, 72, 73, 82, 84, 217, 84, 72, 73, 82, - 84, 69, 69, 78, 128, 84, 72, 73, 82, 84, 69, 69, 206, 84, 72, 73, 82, 68, - 83, 128, 84, 72, 73, 82, 68, 211, 84, 72, 73, 82, 68, 128, 84, 72, 73, - 82, 196, 84, 72, 73, 206, 84, 72, 73, 73, 128, 84, 72, 73, 71, 72, 128, - 84, 72, 73, 69, 85, 84, 200, 84, 72, 69, 89, 128, 84, 72, 69, 84, 72, 69, - 128, 84, 72, 69, 84, 72, 128, 84, 72, 69, 84, 65, 128, 84, 72, 69, 84, - 193, 84, 72, 69, 83, 80, 73, 65, 206, 84, 72, 69, 83, 69, 79, 83, 128, - 84, 72, 69, 83, 69, 79, 211, 84, 72, 69, 211, 84, 72, 69, 82, 77, 79, 68, - 89, 78, 65, 77, 73, 67, 128, 84, 72, 69, 82, 69, 70, 79, 82, 69, 128, 84, - 72, 69, 82, 197, 84, 72, 69, 206, 84, 72, 69, 77, 65, 84, 73, 83, 77, 79, - 211, 84, 72, 69, 77, 65, 128, 84, 72, 69, 77, 193, 84, 72, 69, 72, 128, - 84, 72, 69, 200, 84, 72, 197, 84, 72, 65, 87, 128, 84, 72, 65, 78, 84, - 72, 65, 75, 72, 65, 84, 128, 84, 72, 65, 78, 78, 65, 128, 84, 72, 65, 78, - 128, 84, 72, 65, 206, 84, 72, 65, 76, 128, 84, 72, 65, 204, 84, 72, 65, - 72, 65, 78, 128, 84, 72, 65, 65, 78, 193, 84, 72, 65, 65, 76, 85, 128, - 84, 72, 45, 67, 82, 69, 197, 84, 69, 88, 84, 128, 84, 69, 88, 128, 84, - 69, 86, 73, 82, 128, 84, 69, 85, 84, 69, 85, 88, 128, 84, 69, 85, 84, 69, - 85, 87, 69, 78, 128, 84, 69, 85, 84, 128, 84, 69, 85, 78, 128, 84, 69, - 85, 65, 69, 81, 128, 84, 69, 85, 65, 69, 78, 128, 84, 69, 85, 128, 84, - 69, 84, 82, 65, 83, 73, 77, 79, 85, 128, 84, 69, 84, 82, 65, 83, 69, 77, - 69, 128, 84, 69, 84, 82, 65, 80, 76, 73, 128, 84, 69, 84, 82, 65, 70, 79, - 78, 73, 65, 83, 128, 84, 69, 84, 72, 128, 84, 69, 84, 200, 84, 69, 84, - 65, 82, 84, 79, 211, 84, 69, 84, 65, 82, 84, 73, 77, 79, 82, 73, 79, 78, - 128, 84, 69, 84, 128, 84, 69, 212, 84, 69, 83, 83, 69, 82, 65, 128, 84, - 69, 83, 83, 69, 82, 193, 84, 69, 83, 83, 65, 82, 79, 206, 84, 69, 83, + 82, 65, 67, 75, 66, 65, 76, 76, 128, 84, 82, 65, 67, 75, 128, 84, 82, 65, + 128, 84, 82, 128, 84, 79, 88, 128, 84, 79, 87, 69, 82, 128, 84, 79, 86, + 128, 84, 79, 85, 82, 78, 79, 73, 211, 84, 79, 85, 67, 72, 84, 79, 78, + 197, 84, 79, 84, 65, 204, 84, 79, 84, 128, 84, 79, 83, 128, 84, 79, 82, + 84, 79, 73, 83, 197, 84, 79, 82, 78, 65, 68, 79, 128, 84, 79, 82, 67, 85, + 76, 85, 83, 128, 84, 79, 82, 67, 85, 76, 85, 211, 84, 79, 82, 67, 72, + 128, 84, 79, 81, 128, 84, 79, 80, 66, 65, 82, 128, 84, 79, 80, 45, 76, + 73, 71, 72, 84, 69, 196, 84, 79, 80, 128, 84, 79, 208, 84, 79, 79, 84, + 72, 128, 84, 79, 79, 78, 128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, + 85, 69, 128, 84, 79, 78, 71, 85, 197, 84, 79, 78, 71, 128, 84, 79, 78, + 69, 45, 56, 128, 84, 79, 78, 69, 45, 55, 128, 84, 79, 78, 69, 45, 54, + 128, 84, 79, 78, 69, 45, 53, 128, 84, 79, 78, 69, 45, 52, 128, 84, 79, + 78, 69, 45, 51, 128, 84, 79, 78, 69, 45, 50, 128, 84, 79, 78, 69, 45, 49, + 128, 84, 79, 78, 69, 128, 84, 79, 78, 65, 204, 84, 79, 77, 80, 73, 128, + 84, 79, 77, 65, 84, 79, 128, 84, 79, 76, 79, 78, 71, 128, 84, 79, 75, 89, + 207, 84, 79, 73, 76, 69, 84, 128, 84, 79, 71, 69, 84, 72, 69, 82, 128, + 84, 79, 68, 207, 84, 79, 65, 78, 68, 65, 75, 72, 73, 65, 84, 128, 84, 79, + 65, 128, 84, 78, 128, 84, 76, 86, 128, 84, 76, 85, 128, 84, 76, 79, 128, + 84, 76, 73, 128, 84, 76, 72, 89, 65, 128, 84, 76, 72, 87, 69, 128, 84, + 76, 72, 85, 128, 84, 76, 72, 79, 79, 128, 84, 76, 72, 79, 128, 84, 76, + 72, 73, 128, 84, 76, 72, 69, 69, 128, 84, 76, 72, 69, 128, 84, 76, 72, + 65, 128, 84, 76, 69, 69, 128, 84, 76, 65, 128, 84, 74, 69, 128, 84, 73, + 88, 128, 84, 73, 87, 82, 128, 84, 73, 87, 78, 128, 84, 73, 87, 65, 218, + 84, 73, 84, 85, 65, 69, 80, 128, 84, 73, 84, 76, 79, 128, 84, 73, 84, + 193, 84, 73, 84, 128, 84, 73, 82, 89, 65, 75, 128, 84, 73, 82, 84, 193, + 84, 73, 82, 79, 78, 73, 65, 206, 84, 73, 82, 72, 85, 84, 193, 84, 73, 82, + 69, 196, 84, 73, 82, 128, 84, 73, 210, 84, 73, 80, 80, 73, 128, 84, 73, + 80, 69, 72, 65, 128, 84, 73, 80, 128, 84, 73, 208, 84, 73, 78, 89, 128, + 84, 73, 78, 217, 84, 73, 78, 78, 69, 128, 84, 73, 78, 67, 84, 85, 82, 69, + 128, 84, 73, 78, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73, + 77, 69, 210, 84, 73, 77, 69, 128, 84, 73, 76, 69, 83, 128, 84, 73, 76, + 68, 69, 128, 84, 73, 76, 68, 197, 84, 73, 76, 128, 84, 73, 204, 84, 73, + 75, 69, 85, 84, 45, 84, 72, 73, 69, 85, 84, 72, 128, 84, 73, 75, 69, 85, + 84, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, 69, + 85, 84, 45, 83, 73, 79, 83, 128, 84, 73, 75, 69, 85, 84, 45, 82, 73, 69, + 85, 76, 128, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 84, 73, + 75, 69, 85, 84, 45, 77, 73, 69, 85, 77, 128, 84, 73, 75, 69, 85, 84, 45, + 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 45, 67, 73, 69, 85, + 67, 128, 84, 73, 75, 69, 85, 84, 45, 67, 72, 73, 69, 85, 67, 72, 128, 84, + 73, 75, 69, 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73, 71, 72, 84, 76, + 89, 45, 67, 76, 79, 83, 69, 196, 84, 73, 71, 72, 212, 84, 73, 71, 69, 82, + 128, 84, 73, 71, 69, 210, 84, 73, 70, 73, 78, 65, 71, 200, 84, 73, 69, + 88, 128, 84, 73, 69, 80, 128, 84, 73, 197, 84, 73, 67, 75, 69, 84, 83, + 128, 84, 73, 67, 75, 69, 84, 128, 84, 73, 67, 75, 128, 84, 73, 67, 203, + 84, 73, 65, 82, 65, 128, 84, 73, 50, 128, 84, 72, 90, 128, 84, 72, 89, + 79, 79, 205, 84, 72, 87, 79, 79, 128, 84, 72, 87, 79, 128, 84, 72, 87, + 73, 73, 128, 84, 72, 87, 73, 128, 84, 72, 87, 69, 69, 128, 84, 72, 87, + 65, 65, 128, 84, 72, 87, 65, 128, 84, 72, 85, 82, 211, 84, 72, 85, 82, + 73, 83, 65, 218, 84, 72, 85, 78, 71, 128, 84, 72, 85, 78, 68, 69, 82, 83, + 84, 79, 82, 77, 128, 84, 72, 85, 78, 68, 69, 82, 128, 84, 72, 85, 78, 68, + 69, 210, 84, 72, 85, 77, 66, 211, 84, 72, 82, 79, 87, 73, 78, 199, 84, + 72, 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 84, 72, 82, 69, + 69, 45, 84, 72, 73, 82, 84, 89, 128, 84, 72, 82, 69, 69, 45, 80, 69, 82, + 45, 69, 205, 84, 72, 82, 69, 69, 45, 76, 73, 78, 197, 84, 72, 82, 69, 69, + 45, 69, 205, 84, 72, 82, 69, 69, 45, 196, 84, 72, 82, 69, 65, 68, 128, + 84, 72, 79, 85, 83, 65, 78, 68, 83, 128, 84, 72, 79, 85, 83, 65, 78, 68, + 211, 84, 72, 79, 85, 83, 65, 78, 68, 128, 84, 72, 79, 85, 83, 65, 78, + 196, 84, 72, 79, 85, 71, 72, 212, 84, 72, 79, 85, 128, 84, 72, 79, 82, + 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, 78, 71, 128, 84, 72, 79, 77, + 128, 84, 72, 79, 74, 128, 84, 72, 79, 65, 128, 84, 72, 207, 84, 72, 73, + 85, 84, 72, 128, 84, 72, 73, 84, 65, 128, 84, 72, 73, 82, 84, 89, 45, 83, + 69, 67, 79, 78, 196, 84, 72, 73, 82, 84, 89, 45, 79, 78, 69, 128, 84, 72, + 73, 82, 84, 217, 84, 72, 73, 82, 84, 69, 69, 78, 128, 84, 72, 73, 82, 84, + 69, 69, 206, 84, 72, 73, 82, 68, 83, 128, 84, 72, 73, 82, 68, 211, 84, + 72, 73, 82, 68, 45, 83, 84, 65, 71, 197, 84, 72, 73, 82, 68, 128, 84, 72, + 73, 82, 196, 84, 72, 73, 73, 128, 84, 72, 73, 71, 72, 128, 84, 72, 73, + 69, 85, 84, 200, 84, 72, 73, 67, 203, 84, 72, 73, 65, 66, 128, 84, 72, + 69, 89, 128, 84, 72, 69, 84, 72, 69, 128, 84, 72, 69, 84, 72, 128, 84, + 72, 69, 84, 65, 128, 84, 72, 69, 84, 193, 84, 72, 69, 83, 80, 73, 65, + 206, 84, 72, 69, 83, 69, 79, 83, 128, 84, 72, 69, 83, 69, 79, 211, 84, + 72, 69, 211, 84, 72, 69, 82, 77, 79, 77, 69, 84, 69, 82, 128, 84, 72, 69, + 82, 77, 79, 68, 89, 78, 65, 77, 73, 67, 128, 84, 72, 69, 82, 69, 70, 79, + 82, 69, 128, 84, 72, 69, 82, 197, 84, 72, 69, 206, 84, 72, 69, 77, 65, + 84, 73, 83, 77, 79, 211, 84, 72, 69, 77, 65, 128, 84, 72, 69, 77, 193, + 84, 72, 69, 72, 128, 84, 72, 69, 200, 84, 72, 69, 65, 128, 84, 72, 197, + 84, 72, 65, 87, 128, 84, 72, 65, 78, 84, 72, 65, 75, 72, 65, 84, 128, 84, + 72, 65, 78, 78, 65, 128, 84, 72, 65, 78, 128, 84, 72, 65, 206, 84, 72, + 65, 77, 69, 68, 72, 128, 84, 72, 65, 76, 128, 84, 72, 65, 204, 84, 72, + 65, 74, 128, 84, 72, 65, 72, 65, 78, 128, 84, 72, 65, 65, 78, 193, 84, + 72, 65, 65, 76, 85, 128, 84, 72, 45, 67, 82, 69, 197, 84, 69, 88, 84, + 128, 84, 69, 88, 212, 84, 69, 88, 128, 84, 69, 86, 73, 82, 128, 84, 69, + 85, 84, 69, 85, 88, 128, 84, 69, 85, 84, 69, 85, 87, 69, 78, 128, 84, 69, + 85, 84, 128, 84, 69, 85, 78, 128, 84, 69, 85, 65, 69, 81, 128, 84, 69, + 85, 65, 69, 78, 128, 84, 69, 85, 128, 84, 69, 84, 82, 65, 83, 73, 77, 79, + 85, 128, 84, 69, 84, 82, 65, 83, 69, 77, 69, 128, 84, 69, 84, 82, 65, 80, + 76, 73, 128, 84, 69, 84, 82, 65, 71, 82, 65, 205, 84, 69, 84, 82, 65, 70, + 79, 78, 73, 65, 83, 128, 84, 69, 84, 72, 128, 84, 69, 84, 200, 84, 69, + 84, 65, 82, 84, 79, 211, 84, 69, 84, 65, 82, 84, 73, 77, 79, 82, 73, 79, + 78, 128, 84, 69, 84, 128, 84, 69, 212, 84, 69, 83, 83, 69, 82, 65, 128, + 84, 69, 83, 83, 69, 82, 193, 84, 69, 83, 83, 65, 82, 79, 206, 84, 69, 83, 200, 84, 69, 82, 77, 73, 78, 65, 84, 79, 82, 128, 84, 69, 80, 128, 84, 69, 78, 85, 84, 79, 128, 84, 69, 78, 85, 128, 84, 69, 78, 213, 84, 69, - 78, 84, 72, 128, 84, 69, 78, 84, 128, 84, 69, 78, 211, 84, 69, 78, 78, - 73, 211, 84, 69, 78, 71, 197, 84, 69, 78, 45, 84, 72, 73, 82, 84, 89, - 128, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211, 84, 69, 76, - 85, 128, 84, 69, 76, 79, 85, 211, 84, 69, 76, 76, 69, 210, 84, 69, 76, - 73, 83, 72, 193, 84, 69, 76, 69, 86, 73, 83, 73, 79, 78, 128, 84, 69, 76, - 69, 83, 67, 79, 80, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78, 69, 128, 84, - 69, 76, 69, 80, 72, 79, 78, 197, 84, 69, 76, 69, 73, 65, 128, 84, 69, 76, - 69, 71, 82, 65, 80, 200, 84, 69, 73, 87, 83, 128, 84, 69, 71, 69, 72, - 128, 84, 69, 69, 69, 69, 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128, - 84, 69, 65, 82, 211, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 80, 79, 75, - 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78, 75, 69, 196, - 84, 69, 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196, 84, 69, 65, - 82, 45, 79, 70, 198, 84, 69, 65, 67, 85, 208, 84, 69, 45, 85, 128, 84, - 69, 45, 50, 128, 84, 67, 72, 69, 72, 69, 72, 128, 84, 67, 72, 69, 72, 69, - 200, 84, 67, 72, 69, 72, 128, 84, 67, 72, 69, 200, 84, 67, 72, 69, 128, - 84, 195, 84, 65, 89, 128, 84, 65, 88, 73, 128, 84, 65, 88, 128, 84, 65, - 87, 69, 76, 76, 69, 77, 69, 212, 84, 65, 87, 65, 128, 84, 65, 87, 128, - 84, 65, 86, 73, 89, 65, 78, 73, 128, 84, 65, 86, 128, 84, 65, 214, 84, - 65, 85, 82, 85, 83, 128, 84, 65, 213, 84, 65, 84, 87, 69, 69, 76, 128, - 84, 65, 84, 87, 69, 69, 204, 84, 65, 84, 84, 79, 79, 69, 196, 84, 65, 84, - 128, 84, 65, 82, 85, 78, 71, 128, 84, 65, 82, 84, 65, 82, 45, 50, 128, - 84, 65, 82, 84, 65, 82, 128, 84, 65, 81, 128, 84, 65, 80, 69, 82, 128, - 84, 65, 80, 197, 84, 65, 80, 128, 84, 65, 79, 128, 84, 65, 78, 78, 69, - 196, 84, 65, 78, 71, 69, 82, 73, 78, 69, 128, 84, 65, 78, 199, 84, 65, - 78, 65, 66, 65, 84, 193, 84, 65, 78, 128, 84, 65, 77, 73, 78, 71, 128, - 84, 65, 77, 128, 84, 65, 76, 76, 128, 84, 65, 76, 204, 84, 65, 76, 73, - 78, 71, 128, 84, 65, 76, 73, 78, 199, 84, 65, 76, 69, 78, 84, 83, 128, - 84, 65, 76, 69, 78, 212, 84, 65, 75, 82, 201, 84, 65, 75, 72, 65, 76, 76, - 85, 83, 128, 84, 65, 75, 69, 128, 84, 65, 75, 52, 128, 84, 65, 75, 128, - 84, 65, 73, 83, 89, 79, 85, 128, 84, 65, 73, 76, 76, 69, 83, 211, 84, 65, - 73, 76, 128, 84, 65, 73, 204, 84, 65, 72, 128, 84, 65, 200, 84, 65, 71, - 66, 65, 78, 87, 193, 84, 65, 71, 65, 76, 79, 199, 84, 65, 71, 128, 84, - 65, 69, 206, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, - 65, 84, 73, 79, 78, 128, 84, 65, 66, 85, 76, 65, 84, 73, 79, 206, 84, 65, - 66, 83, 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, 65, 194, 84, - 65, 65, 83, 72, 65, 69, 128, 84, 65, 65, 81, 128, 84, 65, 65, 77, 128, - 84, 65, 65, 76, 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 65, 70, 128, - 84, 65, 50, 128, 84, 65, 45, 82, 79, 76, 128, 84, 65, 45, 50, 128, 84, - 48, 51, 54, 128, 84, 48, 51, 53, 128, 84, 48, 51, 52, 128, 84, 48, 51, - 51, 65, 128, 84, 48, 51, 51, 128, 84, 48, 51, 50, 65, 128, 84, 48, 51, - 50, 128, 84, 48, 51, 49, 128, 84, 48, 51, 48, 128, 84, 48, 50, 57, 128, - 84, 48, 50, 56, 128, 84, 48, 50, 55, 128, 84, 48, 50, 54, 128, 84, 48, - 50, 53, 128, 84, 48, 50, 52, 128, 84, 48, 50, 51, 128, 84, 48, 50, 50, - 128, 84, 48, 50, 49, 128, 84, 48, 50, 48, 128, 84, 48, 49, 57, 128, 84, - 48, 49, 56, 128, 84, 48, 49, 55, 128, 84, 48, 49, 54, 65, 128, 84, 48, - 49, 54, 128, 84, 48, 49, 53, 128, 84, 48, 49, 52, 128, 84, 48, 49, 51, - 128, 84, 48, 49, 50, 128, 84, 48, 49, 49, 65, 128, 84, 48, 49, 49, 128, - 84, 48, 49, 48, 128, 84, 48, 48, 57, 65, 128, 84, 48, 48, 57, 128, 84, - 48, 48, 56, 65, 128, 84, 48, 48, 56, 128, 84, 48, 48, 55, 65, 128, 84, - 48, 48, 55, 128, 84, 48, 48, 54, 128, 84, 48, 48, 53, 128, 84, 48, 48, - 52, 128, 84, 48, 48, 51, 65, 128, 84, 48, 48, 51, 128, 84, 48, 48, 50, - 128, 84, 48, 48, 49, 128, 84, 45, 83, 72, 73, 82, 84, 128, 83, 90, 90, - 128, 83, 90, 87, 71, 128, 83, 90, 87, 65, 128, 83, 90, 85, 128, 83, 90, - 79, 128, 83, 90, 73, 128, 83, 90, 69, 69, 128, 83, 90, 69, 128, 83, 90, - 65, 65, 128, 83, 90, 65, 128, 83, 90, 128, 83, 89, 88, 128, 83, 89, 84, - 128, 83, 89, 83, 84, 69, 205, 83, 89, 82, 88, 128, 83, 89, 82, 77, 65, - 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 128, 83, 89, 82, 73, 78, 71, 69, - 128, 83, 89, 82, 128, 83, 89, 80, 128, 83, 89, 79, 85, 87, 65, 128, 83, - 89, 78, 69, 86, 77, 65, 128, 83, 89, 78, 68, 69, 83, 77, 79, 211, 83, 89, - 78, 67, 72, 82, 79, 78, 79, 85, 211, 83, 89, 78, 65, 71, 77, 193, 83, 89, - 78, 65, 70, 73, 128, 83, 89, 78, 128, 83, 89, 77, 77, 69, 84, 82, 89, - 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 83, 89, 77, 66, 79, 76, 83, - 128, 83, 89, 77, 66, 79, 76, 45, 57, 128, 83, 89, 77, 66, 79, 76, 45, 56, - 128, 83, 89, 77, 66, 79, 76, 45, 55, 128, 83, 89, 77, 66, 79, 76, 45, 54, - 128, 83, 89, 77, 66, 79, 76, 45, 53, 52, 128, 83, 89, 77, 66, 79, 76, 45, - 53, 51, 128, 83, 89, 77, 66, 79, 76, 45, 53, 50, 128, 83, 89, 77, 66, 79, - 76, 45, 53, 49, 128, 83, 89, 77, 66, 79, 76, 45, 53, 48, 128, 83, 89, 77, - 66, 79, 76, 45, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, 57, 128, 83, 89, - 77, 66, 79, 76, 45, 52, 56, 128, 83, 89, 77, 66, 79, 76, 45, 52, 55, 128, - 83, 89, 77, 66, 79, 76, 45, 52, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, - 51, 128, 83, 89, 77, 66, 79, 76, 45, 52, 50, 128, 83, 89, 77, 66, 79, 76, - 45, 52, 48, 128, 83, 89, 77, 66, 79, 76, 45, 52, 128, 83, 89, 77, 66, 79, - 76, 45, 51, 57, 128, 83, 89, 77, 66, 79, 76, 45, 51, 56, 128, 83, 89, 77, - 66, 79, 76, 45, 51, 55, 128, 83, 89, 77, 66, 79, 76, 45, 51, 54, 128, 83, - 89, 77, 66, 79, 76, 45, 51, 50, 128, 83, 89, 77, 66, 79, 76, 45, 51, 48, - 128, 83, 89, 77, 66, 79, 76, 45, 51, 128, 83, 89, 77, 66, 79, 76, 45, 50, - 57, 128, 83, 89, 77, 66, 79, 76, 45, 50, 55, 128, 83, 89, 77, 66, 79, 76, - 45, 50, 54, 128, 83, 89, 77, 66, 79, 76, 45, 50, 53, 128, 83, 89, 77, 66, - 79, 76, 45, 50, 52, 128, 83, 89, 77, 66, 79, 76, 45, 50, 51, 128, 83, 89, - 77, 66, 79, 76, 45, 50, 50, 128, 83, 89, 77, 66, 79, 76, 45, 50, 49, 128, - 83, 89, 77, 66, 79, 76, 45, 50, 48, 128, 83, 89, 77, 66, 79, 76, 45, 50, - 128, 83, 89, 77, 66, 79, 76, 45, 49, 57, 128, 83, 89, 77, 66, 79, 76, 45, - 49, 56, 128, 83, 89, 77, 66, 79, 76, 45, 49, 55, 128, 83, 89, 77, 66, 79, - 76, 45, 49, 54, 128, 83, 89, 77, 66, 79, 76, 45, 49, 53, 128, 83, 89, 77, - 66, 79, 76, 45, 49, 52, 128, 83, 89, 77, 66, 79, 76, 45, 49, 51, 128, 83, - 89, 77, 66, 79, 76, 45, 49, 50, 128, 83, 89, 77, 66, 79, 76, 45, 49, 49, - 128, 83, 89, 77, 66, 79, 76, 45, 49, 48, 128, 83, 89, 77, 66, 79, 76, 45, - 49, 128, 83, 89, 76, 79, 84, 201, 83, 89, 128, 83, 87, 90, 128, 83, 87, - 85, 78, 199, 83, 87, 79, 82, 68, 83, 128, 83, 87, 79, 82, 68, 128, 83, - 87, 79, 79, 128, 83, 87, 79, 128, 83, 87, 73, 82, 204, 83, 87, 73, 77, - 77, 73, 78, 71, 128, 83, 87, 73, 77, 77, 69, 82, 128, 83, 87, 73, 73, - 128, 83, 87, 73, 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 83, 87, - 69, 69, 212, 83, 87, 69, 65, 84, 128, 83, 87, 69, 65, 212, 83, 87, 65, - 83, 200, 83, 87, 65, 80, 80, 73, 78, 71, 128, 83, 87, 65, 65, 128, 83, - 87, 128, 83, 86, 65, 83, 84, 201, 83, 86, 65, 82, 73, 84, 65, 128, 83, - 86, 65, 82, 73, 84, 193, 83, 85, 88, 128, 83, 85, 85, 128, 83, 85, 84, - 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, 83, 85, 83, 72, 73, 128, - 83, 85, 82, 89, 65, 128, 83, 85, 82, 88, 128, 83, 85, 82, 82, 79, 85, 78, - 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 83, 85, 82, 70, 69, 82, 128, - 83, 85, 82, 70, 65, 67, 197, 83, 85, 82, 69, 128, 83, 85, 82, 65, 78, 71, - 128, 83, 85, 82, 57, 128, 83, 85, 82, 128, 83, 85, 210, 83, 85, 80, 82, - 65, 76, 73, 78, 69, 65, 210, 83, 85, 80, 69, 82, 86, 73, 83, 69, 128, 83, - 85, 80, 69, 82, 83, 69, 84, 128, 83, 85, 80, 69, 82, 83, 69, 212, 83, 85, - 80, 69, 82, 83, 67, 82, 73, 80, 212, 83, 85, 80, 69, 82, 73, 77, 80, 79, - 83, 69, 196, 83, 85, 80, 69, 82, 70, 73, 88, 69, 196, 83, 85, 80, 69, - 210, 83, 85, 80, 128, 83, 85, 79, 88, 128, 83, 85, 79, 80, 128, 83, 85, - 79, 128, 83, 85, 78, 83, 69, 212, 83, 85, 78, 82, 73, 83, 69, 128, 83, - 85, 78, 82, 73, 83, 197, 83, 85, 78, 71, 76, 65, 83, 83, 69, 83, 128, 83, - 85, 78, 71, 128, 83, 85, 78, 70, 76, 79, 87, 69, 82, 128, 83, 85, 78, - 128, 83, 85, 206, 83, 85, 77, 77, 69, 82, 128, 83, 85, 77, 77, 65, 84, - 73, 79, 78, 128, 83, 85, 77, 77, 65, 84, 73, 79, 206, 83, 85, 77, 65, 83, - 72, 128, 83, 85, 77, 128, 83, 85, 76, 70, 85, 82, 128, 83, 85, 75, 85, - 78, 128, 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, 213, 83, - 85, 73, 84, 65, 66, 76, 69, 128, 83, 85, 73, 84, 128, 83, 85, 72, 85, 82, - 128, 83, 85, 69, 128, 83, 85, 68, 50, 128, 83, 85, 68, 128, 83, 85, 67, - 67, 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, 211, 83, 85, 67, 67, - 69, 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, 85, 66, 85, 78, 73, 84, - 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, 206, 83, 85, 66, 83, 84, - 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 197, 83, 85, - 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, 83, 85, 66, 83, 67, 82, 73, - 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, 85, 66, 76, 73, - 78, 69, 65, 210, 83, 85, 66, 76, 73, 77, 65, 84, 73, 79, 78, 128, 83, 85, - 66, 76, 73, 77, 65, 84, 69, 45, 51, 128, 83, 85, 66, 76, 73, 77, 65, 84, - 69, 45, 50, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 128, 83, 85, 66, 76, - 73, 77, 65, 84, 197, 83, 85, 66, 74, 79, 73, 78, 69, 196, 83, 85, 66, 74, - 69, 67, 84, 128, 83, 85, 66, 73, 84, 79, 128, 83, 85, 66, 71, 82, 79, 85, - 80, 128, 83, 85, 66, 71, 82, 79, 85, 208, 83, 85, 66, 128, 83, 85, 65, - 69, 84, 128, 83, 85, 65, 69, 78, 128, 83, 85, 65, 69, 128, 83, 85, 65, - 128, 83, 213, 83, 84, 88, 128, 83, 84, 87, 65, 128, 83, 84, 85, 68, 89, - 128, 83, 84, 85, 67, 75, 45, 79, 85, 212, 83, 84, 83, 128, 83, 84, 82, - 79, 78, 199, 83, 84, 82, 79, 75, 69, 83, 128, 83, 84, 82, 79, 75, 69, - 211, 83, 84, 82, 79, 75, 69, 45, 57, 128, 83, 84, 82, 79, 75, 69, 45, 56, - 128, 83, 84, 82, 79, 75, 69, 45, 55, 128, 83, 84, 82, 79, 75, 69, 45, 54, - 128, 83, 84, 82, 79, 75, 69, 45, 53, 128, 83, 84, 82, 79, 75, 69, 45, 52, - 128, 83, 84, 82, 79, 75, 69, 45, 51, 128, 83, 84, 82, 79, 75, 69, 45, 50, - 128, 83, 84, 82, 79, 75, 69, 45, 49, 49, 128, 83, 84, 82, 79, 75, 69, 45, - 49, 48, 128, 83, 84, 82, 79, 75, 69, 45, 49, 128, 83, 84, 82, 79, 75, - 197, 83, 84, 82, 73, 80, 69, 128, 83, 84, 82, 73, 78, 71, 128, 83, 84, - 82, 73, 78, 199, 83, 84, 82, 73, 75, 69, 84, 72, 82, 79, 85, 71, 72, 128, - 83, 84, 82, 73, 68, 69, 128, 83, 84, 82, 73, 67, 84, 76, 217, 83, 84, 82, - 69, 84, 67, 72, 69, 196, 83, 84, 82, 69, 83, 211, 83, 84, 82, 69, 78, 71, - 84, 72, 128, 83, 84, 82, 69, 65, 77, 69, 82, 128, 83, 84, 82, 65, 87, 66, - 69, 82, 82, 89, 128, 83, 84, 82, 65, 84, 85, 77, 45, 50, 128, 83, 84, 82, - 65, 84, 85, 77, 128, 83, 84, 82, 65, 84, 85, 205, 83, 84, 82, 65, 84, 73, - 65, 206, 83, 84, 82, 65, 73, 78, 69, 82, 128, 83, 84, 82, 65, 73, 71, 72, - 84, 78, 69, 83, 83, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83, 84, 82, 65, - 73, 70, 128, 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65, 128, 83, 84, - 79, 86, 69, 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80, 87, 65, 84, 67, - 72, 128, 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79, 80, 80, 65, 71, - 69, 128, 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84, 79, 78, 69, 128, - 83, 84, 79, 67, 75, 128, 83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, - 204, 83, 84, 73, 76, 197, 83, 84, 73, 71, 77, 65, 128, 83, 84, 69, 80, - 128, 83, 84, 69, 77, 128, 83, 84, 69, 65, 77, 73, 78, 199, 83, 84, 69, - 65, 77, 128, 83, 84, 69, 65, 205, 83, 84, 65, 86, 82, 79, 85, 128, 83, - 84, 65, 86, 82, 79, 83, 128, 83, 84, 65, 86, 82, 79, 211, 83, 84, 65, 85, - 82, 79, 83, 128, 83, 84, 65, 84, 85, 197, 83, 84, 65, 84, 73, 79, 78, - 128, 83, 84, 65, 84, 69, 82, 83, 128, 83, 84, 65, 84, 69, 128, 83, 84, - 65, 82, 212, 83, 84, 65, 82, 83, 128, 83, 84, 65, 82, 82, 69, 196, 83, - 84, 65, 82, 75, 128, 83, 84, 65, 82, 128, 83, 84, 65, 210, 83, 84, 65, - 78, 68, 83, 84, 73, 76, 76, 128, 83, 84, 65, 78, 68, 65, 82, 196, 83, 84, - 65, 78, 68, 128, 83, 84, 65, 78, 128, 83, 84, 65, 76, 76, 73, 79, 78, - 128, 83, 84, 65, 70, 70, 128, 83, 84, 65, 70, 198, 83, 84, 65, 67, 67, - 65, 84, 79, 128, 83, 84, 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, 79, 128, - 83, 84, 50, 128, 83, 83, 89, 88, 128, 83, 83, 89, 84, 128, 83, 83, 89, - 82, 88, 128, 83, 83, 89, 82, 128, 83, 83, 89, 80, 128, 83, 83, 89, 128, - 83, 83, 85, 88, 128, 83, 83, 85, 85, 128, 83, 83, 85, 84, 128, 83, 83, - 85, 80, 128, 83, 83, 79, 88, 128, 83, 83, 79, 84, 128, 83, 83, 79, 80, - 128, 83, 83, 79, 79, 128, 83, 83, 79, 128, 83, 83, 73, 88, 128, 83, 83, - 73, 84, 128, 83, 83, 73, 80, 128, 83, 83, 73, 73, 128, 83, 83, 73, 69, - 88, 128, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, 73, 128, - 83, 83, 72, 69, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, 83, - 69, 69, 128, 83, 83, 65, 88, 128, 83, 83, 65, 85, 128, 83, 83, 65, 84, - 128, 83, 83, 65, 80, 128, 83, 83, 65, 78, 71, 89, 69, 79, 82, 73, 78, 72, - 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 45, 80, - 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, - 83, 65, 78, 71, 84, 72, 73, 69, 85, 84, 72, 128, 83, 83, 65, 78, 71, 83, - 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, - 79, 83, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, - 45, 75, 73, 89, 69, 79, 75, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, - 83, 83, 65, 78, 71, 82, 73, 69, 85, 76, 45, 75, 72, 73, 69, 85, 75, 72, - 128, 83, 83, 65, 78, 71, 82, 73, 69, 85, 76, 128, 83, 83, 65, 78, 71, 80, - 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 83, 83, - 65, 78, 71, 77, 73, 69, 85, 77, 128, 83, 83, 65, 78, 71, 75, 73, 89, 69, - 79, 75, 128, 83, 83, 65, 78, 71, 73, 69, 85, 78, 71, 128, 83, 83, 65, 78, - 71, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 45, - 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 83, - 83, 65, 78, 71, 65, 82, 65, 69, 65, 128, 83, 83, 65, 73, 128, 83, 83, 65, - 65, 128, 83, 83, 51, 128, 83, 83, 50, 128, 83, 82, 128, 83, 81, 85, 73, - 83, 200, 83, 81, 85, 73, 82, 82, 69, 204, 83, 81, 85, 73, 71, 71, 76, + 78, 84, 72, 128, 84, 69, 78, 84, 128, 84, 69, 78, 83, 128, 84, 69, 78, + 211, 84, 69, 78, 78, 73, 211, 84, 69, 78, 71, 197, 84, 69, 78, 45, 84, + 72, 73, 82, 84, 89, 128, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, + 85, 211, 84, 69, 76, 85, 128, 84, 69, 76, 79, 85, 211, 84, 69, 76, 76, + 69, 210, 84, 69, 76, 73, 83, 72, 193, 84, 69, 76, 69, 86, 73, 83, 73, 79, + 78, 128, 84, 69, 76, 69, 83, 67, 79, 80, 69, 128, 84, 69, 76, 69, 80, 72, + 79, 78, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78, 197, 84, 69, 76, 69, 73, + 65, 128, 84, 69, 76, 69, 71, 82, 65, 80, 200, 84, 69, 75, 128, 84, 69, + 73, 87, 83, 128, 84, 69, 71, 69, 72, 128, 84, 69, 69, 78, 83, 128, 84, + 69, 69, 69, 69, 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128, 84, 69, + 65, 82, 211, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 80, 79, 75, 69, 196, + 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78, 75, 69, 196, 84, 69, + 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196, 84, 69, 65, 82, 45, + 79, 70, 198, 84, 69, 65, 67, 85, 208, 84, 69, 45, 85, 128, 84, 69, 45, + 50, 128, 84, 67, 72, 69, 72, 69, 72, 128, 84, 67, 72, 69, 72, 69, 200, + 84, 67, 72, 69, 72, 128, 84, 67, 72, 69, 200, 84, 67, 72, 69, 128, 84, + 195, 84, 65, 89, 128, 84, 65, 88, 73, 128, 84, 65, 88, 128, 84, 65, 87, + 69, 76, 76, 69, 77, 69, 212, 84, 65, 87, 65, 128, 84, 65, 87, 128, 84, + 65, 86, 73, 89, 65, 78, 73, 128, 84, 65, 86, 128, 84, 65, 214, 84, 65, + 85, 82, 85, 83, 128, 84, 65, 85, 77, 128, 84, 65, 213, 84, 65, 84, 87, + 69, 69, 76, 128, 84, 65, 84, 87, 69, 69, 204, 84, 65, 84, 84, 79, 79, 69, + 196, 84, 65, 84, 128, 84, 65, 83, 128, 84, 65, 82, 85, 78, 71, 128, 84, + 65, 82, 84, 65, 82, 45, 50, 128, 84, 65, 82, 84, 65, 82, 128, 84, 65, 82, + 71, 69, 84, 128, 84, 65, 81, 128, 84, 65, 80, 69, 82, 128, 84, 65, 80, + 197, 84, 65, 80, 128, 84, 65, 79, 128, 84, 65, 78, 78, 69, 196, 84, 65, + 78, 71, 69, 82, 73, 78, 69, 128, 84, 65, 78, 71, 69, 78, 84, 128, 84, 65, + 78, 71, 69, 78, 212, 84, 65, 78, 199, 84, 65, 78, 65, 66, 65, 84, 193, + 84, 65, 78, 128, 84, 65, 77, 73, 78, 71, 128, 84, 65, 77, 128, 84, 65, + 76, 76, 128, 84, 65, 76, 204, 84, 65, 76, 73, 78, 71, 128, 84, 65, 76, + 73, 78, 199, 84, 65, 76, 69, 78, 84, 83, 128, 84, 65, 76, 69, 78, 212, + 84, 65, 75, 82, 201, 84, 65, 75, 72, 65, 76, 76, 85, 83, 128, 84, 65, 75, + 69, 128, 84, 65, 75, 52, 128, 84, 65, 75, 128, 84, 65, 73, 83, 89, 79, + 85, 128, 84, 65, 73, 76, 76, 69, 83, 211, 84, 65, 73, 76, 128, 84, 65, + 73, 204, 84, 65, 72, 128, 84, 65, 200, 84, 65, 71, 66, 65, 78, 87, 193, + 84, 65, 71, 65, 76, 79, 199, 84, 65, 71, 128, 84, 65, 69, 206, 84, 65, + 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, 65, 84, 73, 79, 78, + 128, 84, 65, 66, 85, 76, 65, 84, 73, 79, 206, 84, 65, 66, 83, 128, 84, + 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, 65, 194, 84, 65, 65, 83, 72, + 65, 69, 128, 84, 65, 65, 81, 128, 84, 65, 65, 77, 128, 84, 65, 65, 76, + 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 65, 70, 128, 84, 65, 50, 128, + 84, 65, 45, 82, 79, 76, 128, 84, 65, 45, 50, 128, 84, 48, 51, 54, 128, + 84, 48, 51, 53, 128, 84, 48, 51, 52, 128, 84, 48, 51, 51, 65, 128, 84, + 48, 51, 51, 128, 84, 48, 51, 50, 65, 128, 84, 48, 51, 50, 128, 84, 48, + 51, 49, 128, 84, 48, 51, 48, 128, 84, 48, 50, 57, 128, 84, 48, 50, 56, + 128, 84, 48, 50, 55, 128, 84, 48, 50, 54, 128, 84, 48, 50, 53, 128, 84, + 48, 50, 52, 128, 84, 48, 50, 51, 128, 84, 48, 50, 50, 128, 84, 48, 50, + 49, 128, 84, 48, 50, 48, 128, 84, 48, 49, 57, 128, 84, 48, 49, 56, 128, + 84, 48, 49, 55, 128, 84, 48, 49, 54, 65, 128, 84, 48, 49, 54, 128, 84, + 48, 49, 53, 128, 84, 48, 49, 52, 128, 84, 48, 49, 51, 128, 84, 48, 49, + 50, 128, 84, 48, 49, 49, 65, 128, 84, 48, 49, 49, 128, 84, 48, 49, 48, + 128, 84, 48, 48, 57, 65, 128, 84, 48, 48, 57, 128, 84, 48, 48, 56, 65, + 128, 84, 48, 48, 56, 128, 84, 48, 48, 55, 65, 128, 84, 48, 48, 55, 128, + 84, 48, 48, 54, 128, 84, 48, 48, 53, 128, 84, 48, 48, 52, 128, 84, 48, + 48, 51, 65, 128, 84, 48, 48, 51, 128, 84, 48, 48, 50, 128, 84, 48, 48, + 49, 128, 84, 45, 83, 72, 73, 82, 84, 128, 83, 90, 90, 128, 83, 90, 87, + 71, 128, 83, 90, 87, 65, 128, 83, 90, 85, 128, 83, 90, 79, 128, 83, 90, + 73, 128, 83, 90, 69, 69, 128, 83, 90, 69, 128, 83, 90, 65, 65, 128, 83, + 90, 65, 128, 83, 90, 128, 83, 89, 88, 128, 83, 89, 84, 128, 83, 89, 83, + 84, 69, 205, 83, 89, 82, 88, 128, 83, 89, 82, 77, 65, 84, 73, 75, 73, + 128, 83, 89, 82, 77, 65, 128, 83, 89, 82, 73, 78, 71, 69, 128, 83, 89, + 82, 73, 65, 195, 83, 89, 82, 128, 83, 89, 80, 128, 83, 89, 79, 85, 87, + 65, 128, 83, 89, 78, 69, 86, 77, 65, 128, 83, 89, 78, 68, 69, 83, 77, 79, + 211, 83, 89, 78, 67, 72, 82, 79, 78, 79, 85, 211, 83, 89, 78, 65, 71, 77, + 193, 83, 89, 78, 65, 70, 73, 128, 83, 89, 78, 128, 83, 89, 77, 77, 69, + 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 83, 89, 77, 66, 79, + 76, 83, 128, 83, 89, 77, 66, 79, 76, 45, 57, 128, 83, 89, 77, 66, 79, 76, + 45, 56, 128, 83, 89, 77, 66, 79, 76, 45, 55, 128, 83, 89, 77, 66, 79, 76, + 45, 54, 128, 83, 89, 77, 66, 79, 76, 45, 53, 52, 128, 83, 89, 77, 66, 79, + 76, 45, 53, 51, 128, 83, 89, 77, 66, 79, 76, 45, 53, 50, 128, 83, 89, 77, + 66, 79, 76, 45, 53, 49, 128, 83, 89, 77, 66, 79, 76, 45, 53, 48, 128, 83, + 89, 77, 66, 79, 76, 45, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, 57, 128, + 83, 89, 77, 66, 79, 76, 45, 52, 56, 128, 83, 89, 77, 66, 79, 76, 45, 52, + 55, 128, 83, 89, 77, 66, 79, 76, 45, 52, 53, 128, 83, 89, 77, 66, 79, 76, + 45, 52, 51, 128, 83, 89, 77, 66, 79, 76, 45, 52, 50, 128, 83, 89, 77, 66, + 79, 76, 45, 52, 48, 128, 83, 89, 77, 66, 79, 76, 45, 52, 128, 83, 89, 77, + 66, 79, 76, 45, 51, 57, 128, 83, 89, 77, 66, 79, 76, 45, 51, 56, 128, 83, + 89, 77, 66, 79, 76, 45, 51, 55, 128, 83, 89, 77, 66, 79, 76, 45, 51, 54, + 128, 83, 89, 77, 66, 79, 76, 45, 51, 50, 128, 83, 89, 77, 66, 79, 76, 45, + 51, 48, 128, 83, 89, 77, 66, 79, 76, 45, 51, 128, 83, 89, 77, 66, 79, 76, + 45, 50, 57, 128, 83, 89, 77, 66, 79, 76, 45, 50, 55, 128, 83, 89, 77, 66, + 79, 76, 45, 50, 54, 128, 83, 89, 77, 66, 79, 76, 45, 50, 53, 128, 83, 89, + 77, 66, 79, 76, 45, 50, 52, 128, 83, 89, 77, 66, 79, 76, 45, 50, 51, 128, + 83, 89, 77, 66, 79, 76, 45, 50, 50, 128, 83, 89, 77, 66, 79, 76, 45, 50, + 49, 128, 83, 89, 77, 66, 79, 76, 45, 50, 48, 128, 83, 89, 77, 66, 79, 76, + 45, 50, 128, 83, 89, 77, 66, 79, 76, 45, 49, 57, 128, 83, 89, 77, 66, 79, + 76, 45, 49, 56, 128, 83, 89, 77, 66, 79, 76, 45, 49, 55, 128, 83, 89, 77, + 66, 79, 76, 45, 49, 54, 128, 83, 89, 77, 66, 79, 76, 45, 49, 53, 128, 83, + 89, 77, 66, 79, 76, 45, 49, 52, 128, 83, 89, 77, 66, 79, 76, 45, 49, 51, + 128, 83, 89, 77, 66, 79, 76, 45, 49, 50, 128, 83, 89, 77, 66, 79, 76, 45, + 49, 49, 128, 83, 89, 77, 66, 79, 76, 45, 49, 48, 128, 83, 89, 77, 66, 79, + 76, 45, 49, 128, 83, 89, 76, 79, 84, 201, 83, 89, 128, 83, 87, 90, 128, + 83, 87, 85, 78, 199, 83, 87, 79, 82, 68, 83, 128, 83, 87, 79, 82, 68, + 128, 83, 87, 79, 79, 128, 83, 87, 79, 128, 83, 87, 73, 82, 204, 83, 87, + 73, 77, 77, 73, 78, 71, 128, 83, 87, 73, 77, 77, 69, 82, 128, 83, 87, 73, + 73, 128, 83, 87, 73, 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 83, + 87, 69, 69, 212, 83, 87, 69, 65, 84, 128, 83, 87, 69, 65, 212, 83, 87, + 65, 83, 200, 83, 87, 65, 80, 80, 73, 78, 71, 128, 83, 87, 65, 65, 128, + 83, 87, 128, 83, 86, 65, 83, 84, 201, 83, 86, 65, 82, 73, 84, 65, 128, + 83, 86, 65, 82, 73, 84, 193, 83, 85, 88, 128, 83, 85, 85, 128, 83, 85, + 84, 82, 193, 83, 85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, + 83, 85, 83, 72, 73, 128, 83, 85, 82, 89, 65, 128, 83, 85, 82, 88, 128, + 83, 85, 82, 82, 79, 85, 78, 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 83, + 85, 82, 70, 69, 82, 128, 83, 85, 82, 70, 65, 67, 197, 83, 85, 82, 69, + 128, 83, 85, 82, 65, 78, 71, 128, 83, 85, 82, 57, 128, 83, 85, 82, 128, + 83, 85, 210, 83, 85, 80, 82, 65, 76, 73, 78, 69, 65, 210, 83, 85, 80, 69, + 82, 86, 73, 83, 69, 128, 83, 85, 80, 69, 82, 83, 69, 84, 128, 83, 85, 80, + 69, 82, 83, 69, 212, 83, 85, 80, 69, 82, 83, 67, 82, 73, 80, 212, 83, 85, + 80, 69, 82, 73, 77, 80, 79, 83, 69, 196, 83, 85, 80, 69, 82, 70, 73, 88, + 69, 196, 83, 85, 80, 69, 210, 83, 85, 80, 128, 83, 85, 79, 88, 128, 83, + 85, 79, 80, 128, 83, 85, 79, 128, 83, 85, 78, 83, 69, 212, 83, 85, 78, + 82, 73, 83, 69, 128, 83, 85, 78, 82, 73, 83, 197, 83, 85, 78, 71, 76, 65, + 83, 83, 69, 83, 128, 83, 85, 78, 71, 128, 83, 85, 78, 70, 76, 79, 87, 69, + 82, 128, 83, 85, 78, 68, 65, 78, 69, 83, 197, 83, 85, 78, 128, 83, 85, + 206, 83, 85, 77, 77, 69, 82, 128, 83, 85, 77, 77, 65, 84, 73, 79, 78, + 128, 83, 85, 77, 77, 65, 84, 73, 79, 206, 83, 85, 77, 65, 83, 72, 128, + 83, 85, 77, 128, 83, 85, 76, 70, 85, 82, 128, 83, 85, 75, 85, 78, 128, + 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, 213, 83, 85, 73, + 84, 65, 66, 76, 69, 128, 83, 85, 73, 84, 128, 83, 85, 73, 212, 83, 85, + 72, 85, 82, 128, 83, 85, 69, 128, 83, 85, 68, 50, 128, 83, 85, 68, 128, + 83, 85, 67, 67, 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, 211, 83, + 85, 67, 67, 69, 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, 85, 66, 85, + 78, 73, 84, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, 206, 83, 85, + 66, 83, 84, 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, + 197, 83, 85, 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, 83, 85, 66, + 83, 67, 82, 73, 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, + 85, 66, 76, 73, 78, 69, 65, 210, 83, 85, 66, 76, 73, 77, 65, 84, 73, 79, + 78, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 45, 51, 128, 83, 85, 66, 76, + 73, 77, 65, 84, 69, 45, 50, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 128, + 83, 85, 66, 76, 73, 77, 65, 84, 197, 83, 85, 66, 74, 79, 73, 78, 69, 196, + 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, 66, 73, 84, 79, 128, 83, 85, 66, + 71, 82, 79, 85, 80, 128, 83, 85, 66, 71, 82, 79, 85, 208, 83, 85, 66, + 128, 83, 85, 65, 77, 128, 83, 85, 65, 69, 84, 128, 83, 85, 65, 69, 78, + 128, 83, 85, 65, 69, 128, 83, 85, 65, 66, 128, 83, 85, 65, 128, 83, 213, + 83, 84, 88, 128, 83, 84, 87, 65, 128, 83, 84, 85, 68, 89, 128, 83, 84, + 85, 68, 73, 207, 83, 84, 85, 67, 75, 45, 79, 85, 212, 83, 84, 83, 128, + 83, 84, 82, 79, 78, 199, 83, 84, 82, 79, 75, 69, 83, 128, 83, 84, 82, 79, + 75, 69, 211, 83, 84, 82, 79, 75, 69, 45, 57, 128, 83, 84, 82, 79, 75, 69, + 45, 56, 128, 83, 84, 82, 79, 75, 69, 45, 55, 128, 83, 84, 82, 79, 75, 69, + 45, 54, 128, 83, 84, 82, 79, 75, 69, 45, 53, 128, 83, 84, 82, 79, 75, 69, + 45, 52, 128, 83, 84, 82, 79, 75, 69, 45, 51, 128, 83, 84, 82, 79, 75, 69, + 45, 50, 128, 83, 84, 82, 79, 75, 69, 45, 49, 49, 128, 83, 84, 82, 79, 75, + 69, 45, 49, 48, 128, 83, 84, 82, 79, 75, 69, 45, 49, 128, 83, 84, 82, 79, + 75, 197, 83, 84, 82, 73, 80, 69, 128, 83, 84, 82, 73, 78, 71, 128, 83, + 84, 82, 73, 78, 199, 83, 84, 82, 73, 75, 69, 84, 72, 82, 79, 85, 71, 72, + 128, 83, 84, 82, 73, 68, 69, 128, 83, 84, 82, 73, 67, 84, 76, 217, 83, + 84, 82, 69, 84, 67, 72, 69, 196, 83, 84, 82, 69, 83, 211, 83, 84, 82, 69, + 78, 71, 84, 72, 128, 83, 84, 82, 69, 65, 77, 69, 82, 128, 83, 84, 82, 65, + 87, 66, 69, 82, 82, 89, 128, 83, 84, 82, 65, 84, 85, 77, 45, 50, 128, 83, + 84, 82, 65, 84, 85, 77, 128, 83, 84, 82, 65, 84, 85, 205, 83, 84, 82, 65, + 84, 73, 65, 206, 83, 84, 82, 65, 73, 78, 69, 82, 128, 83, 84, 82, 65, 73, + 71, 72, 84, 78, 69, 83, 83, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83, 84, + 82, 65, 73, 70, 128, 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65, 128, + 83, 84, 79, 86, 69, 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80, 87, 65, + 84, 67, 72, 128, 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79, 80, 80, + 65, 71, 69, 128, 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84, 79, 78, + 69, 128, 83, 84, 79, 67, 75, 128, 83, 84, 79, 67, 203, 83, 84, 73, 82, + 82, 85, 208, 83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204, 83, 84, + 73, 76, 197, 83, 84, 73, 71, 77, 65, 128, 83, 84, 69, 82, 69, 79, 128, + 83, 84, 69, 80, 128, 83, 84, 69, 78, 79, 71, 82, 65, 80, 72, 73, 195, 83, + 84, 69, 77, 128, 83, 84, 69, 65, 77, 73, 78, 199, 83, 84, 69, 65, 77, + 128, 83, 84, 69, 65, 205, 83, 84, 65, 86, 82, 79, 85, 128, 83, 84, 65, + 86, 82, 79, 83, 128, 83, 84, 65, 86, 82, 79, 211, 83, 84, 65, 85, 82, 79, + 83, 128, 83, 84, 65, 84, 85, 197, 83, 84, 65, 84, 73, 79, 78, 128, 83, + 84, 65, 84, 69, 82, 83, 128, 83, 84, 65, 84, 69, 128, 83, 84, 65, 82, + 212, 83, 84, 65, 82, 83, 128, 83, 84, 65, 82, 82, 69, 196, 83, 84, 65, + 82, 75, 128, 83, 84, 65, 82, 128, 83, 84, 65, 210, 83, 84, 65, 78, 68, + 83, 84, 73, 76, 76, 128, 83, 84, 65, 78, 68, 65, 82, 196, 83, 84, 65, 78, + 68, 128, 83, 84, 65, 78, 128, 83, 84, 65, 77, 80, 69, 196, 83, 84, 65, + 76, 76, 73, 79, 78, 128, 83, 84, 65, 70, 70, 128, 83, 84, 65, 70, 198, + 83, 84, 65, 68, 73, 85, 77, 128, 83, 84, 65, 67, 67, 65, 84, 79, 128, 83, + 84, 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, 79, 128, 83, 84, 50, 128, 83, + 83, 89, 88, 128, 83, 83, 89, 84, 128, 83, 83, 89, 82, 88, 128, 83, 83, + 89, 82, 128, 83, 83, 89, 80, 128, 83, 83, 89, 128, 83, 83, 85, 88, 128, + 83, 83, 85, 85, 128, 83, 83, 85, 84, 128, 83, 83, 85, 80, 128, 83, 83, + 79, 88, 128, 83, 83, 79, 84, 128, 83, 83, 79, 80, 128, 83, 83, 79, 79, + 128, 83, 83, 79, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, 83, + 73, 80, 128, 83, 83, 73, 73, 128, 83, 83, 73, 69, 88, 128, 83, 83, 73, + 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, 73, 128, 83, 83, 72, 73, 78, + 128, 83, 83, 72, 69, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, + 83, 69, 69, 128, 83, 83, 65, 88, 128, 83, 83, 65, 85, 128, 83, 83, 65, + 84, 128, 83, 83, 65, 80, 128, 83, 83, 65, 78, 71, 89, 69, 79, 82, 73, 78, + 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 45, + 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, + 83, 83, 65, 78, 71, 84, 72, 73, 69, 85, 84, 72, 128, 83, 83, 65, 78, 71, + 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, + 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 83, 73, 79, + 83, 45, 75, 73, 89, 69, 79, 75, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, + 128, 83, 83, 65, 78, 71, 82, 73, 69, 85, 76, 45, 75, 72, 73, 69, 85, 75, + 72, 128, 83, 83, 65, 78, 71, 82, 73, 69, 85, 76, 128, 83, 83, 65, 78, 71, + 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 83, + 83, 65, 78, 71, 77, 73, 69, 85, 77, 128, 83, 83, 65, 78, 71, 75, 73, 89, + 69, 79, 75, 128, 83, 83, 65, 78, 71, 73, 69, 85, 78, 71, 128, 83, 83, 65, + 78, 71, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, + 45, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, + 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, 128, 83, 83, 65, 73, 128, 83, 83, + 65, 65, 128, 83, 83, 51, 128, 83, 83, 50, 128, 83, 82, 128, 83, 81, 85, + 73, 83, 200, 83, 81, 85, 73, 82, 82, 69, 204, 83, 81, 85, 73, 71, 71, 76, 197, 83, 81, 85, 65, 212, 83, 81, 85, 65, 82, 69, 83, 128, 83, 81, 85, - 65, 82, 69, 68, 128, 83, 81, 85, 65, 82, 69, 128, 83, 80, 87, 65, 128, - 83, 80, 85, 78, 71, 211, 83, 80, 82, 79, 85, 84, 128, 83, 80, 82, 73, 78, - 71, 83, 128, 83, 80, 82, 73, 78, 71, 128, 83, 80, 82, 69, 67, 72, 71, 69, - 83, 65, 78, 199, 83, 80, 79, 85, 84, 73, 78, 199, 83, 80, 79, 84, 128, - 83, 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 83, 80, 76, - 65, 83, 72, 73, 78, 199, 83, 80, 73, 82, 73, 84, 85, 211, 83, 80, 73, 82, - 73, 84, 128, 83, 80, 73, 82, 73, 212, 83, 80, 73, 82, 65, 78, 84, 128, - 83, 80, 73, 82, 65, 76, 128, 83, 80, 73, 82, 65, 204, 83, 80, 73, 68, 69, - 82, 217, 83, 80, 73, 67, 69, 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, - 83, 80, 69, 83, 77, 73, 76, 207, 83, 80, 69, 69, 68, 66, 79, 65, 84, 128, - 83, 80, 69, 69, 67, 72, 128, 83, 80, 69, 69, 67, 200, 83, 80, 69, 67, 73, - 65, 76, 128, 83, 80, 69, 65, 82, 128, 83, 80, 69, 65, 75, 69, 82, 128, - 83, 80, 69, 65, 75, 69, 210, 83, 80, 69, 65, 75, 45, 78, 79, 45, 69, 86, - 73, 204, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 73, 78, - 199, 83, 80, 65, 82, 75, 76, 69, 83, 128, 83, 80, 65, 82, 75, 76, 69, 82, - 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 71, 72, 69, 84, 84, 73, - 128, 83, 80, 65, 68, 69, 83, 128, 83, 80, 65, 68, 197, 83, 80, 65, 67, - 73, 78, 199, 83, 80, 65, 67, 197, 83, 80, 65, 128, 83, 79, 89, 128, 83, - 79, 87, 73, 76, 207, 83, 79, 87, 128, 83, 79, 85, 84, 72, 69, 82, 206, - 83, 79, 85, 84, 72, 45, 83, 76, 65, 86, 69, 217, 83, 79, 85, 84, 200, 83, + 65, 82, 69, 68, 128, 83, 81, 85, 65, 82, 69, 128, 83, 80, 89, 128, 83, + 80, 87, 65, 128, 83, 80, 85, 78, 71, 211, 83, 80, 82, 79, 85, 84, 128, + 83, 80, 82, 73, 78, 71, 83, 128, 83, 80, 82, 73, 78, 71, 128, 83, 80, 82, + 69, 67, 72, 71, 69, 83, 65, 78, 199, 83, 80, 79, 85, 84, 73, 78, 199, 83, + 80, 79, 84, 128, 83, 80, 79, 82, 84, 211, 83, 80, 79, 79, 78, 128, 83, + 80, 76, 73, 84, 84, 73, 78, 199, 83, 80, 76, 65, 89, 69, 68, 128, 83, 80, + 76, 65, 83, 72, 73, 78, 199, 83, 80, 73, 82, 73, 84, 85, 211, 83, 80, 73, + 82, 73, 84, 128, 83, 80, 73, 82, 73, 212, 83, 80, 73, 82, 65, 78, 84, + 128, 83, 80, 73, 82, 65, 76, 128, 83, 80, 73, 82, 65, 204, 83, 80, 73, + 68, 69, 82, 217, 83, 80, 73, 68, 69, 82, 128, 83, 80, 73, 68, 69, 210, + 83, 80, 73, 67, 69, 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, 83, 80, 69, + 83, 77, 73, 76, 207, 83, 80, 69, 69, 68, 66, 79, 65, 84, 128, 83, 80, 69, + 69, 67, 72, 128, 83, 80, 69, 69, 67, 200, 83, 80, 69, 67, 73, 65, 76, + 128, 83, 80, 69, 65, 82, 128, 83, 80, 69, 65, 75, 73, 78, 199, 83, 80, + 69, 65, 75, 69, 82, 128, 83, 80, 69, 65, 75, 69, 210, 83, 80, 69, 65, 75, + 45, 78, 79, 45, 69, 86, 73, 204, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, + 82, 75, 76, 73, 78, 199, 83, 80, 65, 82, 75, 76, 69, 83, 128, 83, 80, 65, + 82, 75, 76, 69, 82, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 71, + 72, 69, 84, 84, 73, 128, 83, 80, 65, 68, 69, 83, 128, 83, 80, 65, 68, + 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 65, 67, 197, 83, 80, 65, 128, + 83, 79, 89, 128, 83, 79, 87, 73, 76, 207, 83, 79, 87, 128, 83, 79, 85, + 84, 72, 69, 82, 206, 83, 79, 85, 84, 72, 45, 83, 76, 65, 86, 69, 217, 83, 79, 85, 82, 67, 69, 128, 83, 79, 85, 78, 68, 128, 83, 79, 85, 78, 196, 83, 79, 85, 78, 65, 80, 128, 83, 79, 85, 128, 83, 79, 83, 128, 83, 79, 82, 193, 83, 79, 81, 128, 83, 79, 79, 206, 83, 79, 78, 74, 65, 77, 128, 83, 79, 78, 71, 128, 83, 79, 78, 128, 83, 79, 77, 80, 69, 78, 199, 83, 79, 77, 128, 83, 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, - 211, 83, 79, 72, 128, 83, 79, 71, 68, 73, 65, 206, 83, 79, 70, 84, 87, - 65, 82, 69, 45, 70, 85, 78, 67, 84, 73, 79, 206, 83, 79, 70, 84, 78, 69, - 83, 83, 128, 83, 79, 70, 212, 83, 79, 198, 83, 79, 67, 73, 69, 84, 89, - 128, 83, 79, 67, 67, 69, 210, 83, 79, 65, 80, 128, 83, 79, 65, 128, 83, - 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, 87, 77, 65, 206, 83, - 78, 79, 87, 70, 76, 65, 75, 69, 128, 83, 78, 79, 87, 66, 79, 65, 82, 68, - 69, 82, 128, 83, 78, 79, 87, 128, 83, 78, 79, 85, 84, 128, 83, 78, 79, - 85, 212, 83, 78, 65, 208, 83, 78, 65, 75, 69, 128, 83, 78, 65, 75, 197, - 83, 78, 65, 73, 76, 128, 83, 78, 193, 83, 77, 79, 75, 73, 78, 199, 83, - 77, 73, 82, 75, 73, 78, 199, 83, 77, 73, 76, 73, 78, 199, 83, 77, 73, 76, - 69, 128, 83, 77, 69, 65, 82, 128, 83, 77, 65, 83, 200, 83, 77, 65, 76, - 76, 69, 210, 83, 77, 65, 76, 76, 128, 83, 76, 85, 82, 128, 83, 76, 79, - 87, 76, 89, 128, 83, 76, 79, 215, 83, 76, 79, 86, 79, 128, 83, 76, 79, - 212, 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, 128, 83, 76, 73, - 78, 71, 128, 83, 76, 73, 68, 73, 78, 71, 128, 83, 76, 73, 67, 69, 128, - 83, 76, 73, 67, 197, 83, 76, 69, 69, 80, 217, 83, 76, 69, 69, 80, 73, 78, - 199, 83, 76, 65, 86, 79, 78, 73, 195, 83, 76, 65, 86, 69, 128, 83, 76, - 65, 83, 72, 128, 83, 76, 65, 83, 200, 83, 76, 65, 78, 84, 69, 196, 83, - 75, 87, 65, 128, 83, 75, 87, 128, 83, 75, 85, 76, 76, 128, 83, 75, 85, - 76, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, 78, 128, 83, 75, 73, - 69, 82, 128, 83, 75, 201, 83, 75, 69, 87, 69, 196, 83, 75, 65, 84, 69, - 128, 83, 75, 128, 83, 74, 69, 128, 83, 73, 88, 84, 89, 45, 70, 79, 85, - 82, 84, 200, 83, 73, 88, 84, 89, 128, 83, 73, 88, 84, 217, 83, 73, 88, - 84, 72, 83, 128, 83, 73, 88, 84, 72, 211, 83, 73, 88, 84, 72, 128, 83, - 73, 88, 84, 69, 69, 78, 84, 72, 83, 128, 83, 73, 88, 84, 69, 69, 78, 84, - 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 200, 83, 73, 88, 84, 69, 69, 78, - 128, 83, 73, 88, 84, 69, 69, 206, 83, 73, 88, 45, 84, 72, 73, 82, 84, 89, - 128, 83, 73, 88, 45, 83, 84, 82, 73, 78, 199, 83, 73, 88, 45, 80, 69, 82, - 45, 69, 205, 83, 73, 88, 45, 76, 73, 78, 197, 83, 73, 216, 83, 73, 84, - 69, 128, 83, 73, 83, 65, 128, 83, 73, 82, 73, 78, 71, 85, 128, 83, 73, - 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 83, 73, 79, 83, 45, 83, 83, - 65, 78, 71, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, 82, 73, 69, 85, 76, - 128, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 45, 75, 73, 89, 69, 79, 75, - 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, 128, 83, 73, 79, 83, - 45, 80, 65, 78, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, 78, 73, 69, 85, - 78, 128, 83, 73, 79, 83, 45, 77, 73, 69, 85, 77, 128, 83, 73, 79, 83, 45, - 75, 72, 73, 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, - 79, 85, 78, 80, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45, 73, 69, 85, 78, - 71, 128, 83, 73, 79, 83, 45, 72, 73, 69, 85, 72, 128, 83, 73, 79, 83, 45, - 67, 73, 69, 85, 67, 128, 83, 73, 79, 83, 45, 67, 72, 73, 69, 85, 67, 72, - 128, 83, 73, 79, 211, 83, 73, 78, 75, 73, 78, 71, 128, 83, 73, 78, 71, - 76, 69, 45, 83, 72, 73, 70, 84, 45, 51, 128, 83, 73, 78, 71, 76, 69, 45, - 83, 72, 73, 70, 84, 45, 50, 128, 83, 73, 78, 71, 76, 69, 45, 76, 73, 78, - 197, 83, 73, 78, 71, 76, 69, 128, 83, 73, 78, 71, 76, 197, 83, 73, 78, - 71, 65, 65, 84, 128, 83, 73, 78, 197, 83, 73, 78, 68, 72, 201, 83, 73, - 206, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 83, 73, 77, 73, 76, 65, 82, - 128, 83, 73, 77, 73, 76, 65, 210, 83, 73, 77, 65, 78, 83, 73, 211, 83, - 73, 77, 65, 76, 85, 78, 71, 85, 206, 83, 73, 77, 65, 128, 83, 73, 76, 86, - 69, 82, 128, 83, 73, 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, - 76, 72, 79, 85, 69, 84, 84, 69, 128, 83, 73, 76, 72, 79, 85, 69, 84, 84, - 197, 83, 73, 76, 65, 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, - 83, 73, 75, 178, 83, 73, 71, 78, 83, 128, 83, 73, 71, 77, 65, 128, 83, - 73, 71, 77, 193, 83, 73, 71, 69, 204, 83, 73, 71, 52, 128, 83, 73, 71, - 180, 83, 73, 71, 128, 83, 73, 69, 69, 128, 83, 73, 68, 69, 87, 65, 89, - 211, 83, 73, 67, 75, 78, 69, 83, 83, 128, 83, 73, 67, 75, 76, 69, 128, - 83, 73, 66, 197, 83, 201, 83, 72, 89, 88, 128, 83, 72, 89, 84, 128, 83, - 72, 89, 82, 88, 128, 83, 72, 89, 82, 128, 83, 72, 89, 80, 128, 83, 72, - 89, 69, 128, 83, 72, 89, 65, 128, 83, 72, 89, 128, 83, 72, 87, 79, 89, - 128, 83, 72, 87, 79, 79, 128, 83, 72, 87, 79, 128, 83, 72, 87, 73, 73, - 128, 83, 72, 87, 73, 128, 83, 72, 87, 69, 128, 83, 72, 87, 65, 65, 128, - 83, 72, 87, 65, 128, 83, 72, 85, 88, 128, 83, 72, 85, 85, 128, 83, 72, - 85, 84, 128, 83, 72, 85, 82, 88, 128, 83, 72, 85, 82, 128, 83, 72, 85, - 80, 128, 83, 72, 85, 79, 88, 128, 83, 72, 85, 79, 80, 128, 83, 72, 85, - 79, 128, 83, 72, 85, 77, 128, 83, 72, 85, 70, 70, 76, 197, 83, 72, 85, - 69, 81, 128, 83, 72, 85, 69, 78, 83, 72, 85, 69, 84, 128, 83, 72, 85, 66, - 85, 82, 128, 83, 72, 85, 50, 128, 83, 72, 85, 178, 83, 72, 85, 128, 83, - 72, 213, 83, 72, 84, 65, 80, 73, 67, 128, 83, 72, 84, 65, 128, 83, 72, - 82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80, 128, 83, 72, 82, 73, 73, - 128, 83, 72, 79, 89, 128, 83, 72, 79, 88, 128, 83, 72, 79, 87, 69, 82, - 128, 83, 72, 79, 85, 76, 68, 69, 82, 69, 196, 83, 72, 79, 84, 128, 83, - 72, 79, 82, 84, 83, 128, 83, 72, 79, 82, 84, 211, 83, 72, 79, 82, 84, 69, - 78, 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 69, 128, 83, 72, 79, 82, - 84, 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 79, 82, 84, 45, 84, 87, - 73, 71, 45, 84, 89, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 83, - 79, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 79, 83, 211, 83, 72, - 79, 82, 84, 45, 84, 87, 73, 71, 45, 78, 65, 85, 196, 83, 72, 79, 82, 84, - 45, 84, 87, 73, 71, 45, 77, 65, 68, 210, 83, 72, 79, 82, 84, 45, 84, 87, - 73, 71, 45, 72, 65, 71, 65, 76, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, - 71, 45, 66, 74, 65, 82, 75, 65, 206, 83, 72, 79, 82, 84, 45, 84, 87, 73, - 71, 45, 65, 210, 83, 72, 79, 82, 84, 128, 83, 72, 79, 82, 212, 83, 72, - 79, 81, 128, 83, 72, 79, 209, 83, 72, 79, 80, 128, 83, 72, 79, 79, 84, - 73, 78, 199, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, 83, 72, 79, - 71, 201, 83, 72, 79, 199, 83, 72, 79, 69, 128, 83, 72, 79, 197, 83, 72, - 79, 65, 128, 83, 72, 79, 128, 83, 72, 73, 89, 89, 65, 65, 76, 65, 65, - 128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, 72, 73, 82, 212, - 83, 72, 73, 82, 65, 69, 128, 83, 72, 73, 82, 128, 83, 72, 73, 210, 83, - 72, 73, 81, 128, 83, 72, 73, 80, 128, 83, 72, 73, 78, 84, 207, 83, 72, - 73, 78, 73, 71, 128, 83, 72, 73, 78, 68, 193, 83, 72, 73, 78, 128, 83, - 72, 73, 206, 83, 72, 73, 77, 65, 128, 83, 72, 73, 77, 193, 83, 72, 73, - 77, 128, 83, 72, 73, 205, 83, 72, 73, 73, 78, 128, 83, 72, 73, 73, 128, - 83, 72, 73, 70, 212, 83, 72, 73, 69, 76, 68, 128, 83, 72, 73, 68, 128, - 83, 72, 73, 196, 83, 72, 72, 65, 128, 83, 72, 72, 193, 83, 72, 69, 88, - 128, 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, 128, 83, 72, 69, 85, - 79, 81, 128, 83, 72, 69, 85, 65, 69, 81, 84, 85, 128, 83, 72, 69, 85, 65, - 69, 81, 128, 83, 72, 69, 85, 65, 69, 128, 83, 72, 69, 84, 128, 83, 72, - 69, 212, 83, 72, 69, 83, 72, 76, 65, 77, 128, 83, 72, 69, 83, 72, 73, 71, - 128, 83, 72, 69, 83, 72, 73, 199, 83, 72, 69, 83, 72, 50, 128, 83, 72, - 69, 83, 72, 128, 83, 72, 69, 81, 69, 204, 83, 72, 69, 80, 128, 83, 72, - 69, 78, 128, 83, 72, 69, 76, 76, 128, 83, 72, 69, 76, 204, 83, 72, 69, - 76, 70, 128, 83, 72, 69, 73, 128, 83, 72, 69, 71, 57, 128, 83, 72, 69, - 69, 80, 128, 83, 72, 69, 69, 78, 85, 128, 83, 72, 69, 69, 78, 128, 83, - 72, 69, 69, 206, 83, 72, 69, 69, 128, 83, 72, 69, 45, 71, 79, 65, 84, - 128, 83, 72, 197, 83, 72, 67, 72, 65, 128, 83, 72, 65, 89, 128, 83, 72, - 65, 88, 128, 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 86, 73, - 65, 206, 83, 72, 65, 86, 69, 196, 83, 72, 65, 85, 128, 83, 72, 65, 84, - 128, 83, 72, 65, 82, 85, 128, 83, 72, 65, 82, 213, 83, 72, 65, 82, 80, - 128, 83, 72, 65, 82, 208, 83, 72, 65, 82, 65, 128, 83, 72, 65, 82, 50, - 128, 83, 72, 65, 82, 178, 83, 72, 65, 80, 73, 78, 71, 128, 83, 72, 65, - 80, 69, 83, 128, 83, 72, 65, 80, 197, 83, 72, 65, 80, 128, 83, 72, 65, - 78, 71, 128, 83, 72, 65, 78, 128, 83, 72, 65, 206, 83, 72, 65, 77, 82, - 79, 67, 75, 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, 128, 83, 72, 65, - 75, 84, 73, 128, 83, 72, 65, 73, 128, 83, 72, 65, 68, 79, 87, 69, 196, - 83, 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65, 68, 68, - 193, 83, 72, 65, 68, 128, 83, 72, 65, 196, 83, 72, 65, 66, 54, 128, 83, - 72, 65, 65, 128, 83, 72, 65, 54, 128, 83, 72, 65, 51, 128, 83, 72, 65, - 179, 83, 71, 82, 193, 83, 71, 79, 210, 83, 71, 67, 128, 83, 71, 65, 215, - 83, 71, 65, 194, 83, 71, 128, 83, 69, 88, 84, 85, 76, 193, 83, 69, 88, - 84, 73, 76, 69, 128, 83, 69, 88, 84, 65, 78, 211, 83, 69, 86, 69, 82, 65, - 78, 67, 69, 128, 83, 69, 86, 69, 78, 84, 89, 128, 83, 69, 86, 69, 78, 84, - 217, 83, 69, 86, 69, 78, 84, 72, 128, 83, 69, 86, 69, 78, 84, 69, 69, 78, - 128, 83, 69, 86, 69, 78, 84, 69, 69, 206, 83, 69, 86, 69, 78, 45, 84, 72, - 73, 82, 84, 89, 128, 83, 69, 86, 69, 206, 83, 69, 85, 88, 128, 83, 69, - 85, 78, 89, 65, 77, 128, 83, 69, 85, 65, 69, 81, 128, 83, 69, 84, 70, 79, - 78, 128, 83, 69, 83, 84, 69, 82, 84, 73, 85, 211, 83, 69, 83, 81, 85, 73, - 81, 85, 65, 68, 82, 65, 84, 69, 128, 83, 69, 83, 65, 77, 197, 83, 69, 82, - 86, 73, 67, 197, 83, 69, 82, 73, 70, 83, 128, 83, 69, 82, 73, 70, 211, - 83, 69, 81, 85, 69, 78, 67, 197, 83, 69, 80, 84, 69, 77, 66, 69, 82, 128, - 83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 83, 69, 80, 65, 82, 65, 84, 79, - 210, 83, 69, 78, 84, 79, 128, 83, 69, 78, 84, 73, 128, 83, 69, 77, 85, - 78, 67, 73, 193, 83, 69, 77, 75, 65, 84, 72, 128, 83, 69, 77, 75, 128, - 83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 69, 77, 73, 83, 79, 70, 212, 83, - 69, 77, 73, 83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 77, 73, 77, 73, 78, - 73, 77, 193, 83, 69, 77, 73, 68, 73, 82, 69, 67, 212, 83, 69, 77, 73, 67, - 79, 76, 79, 78, 128, 83, 69, 77, 73, 67, 79, 76, 79, 206, 83, 69, 77, 73, - 67, 73, 82, 67, 85, 76, 65, 210, 83, 69, 77, 73, 67, 73, 82, 67, 76, 197, - 83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, 69, 77, 73, 45, 86, 79, 73, - 67, 69, 196, 83, 69, 76, 70, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, - 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 56, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, - 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 53, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, - 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 50, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, - 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 56, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 55, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 56, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 53, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 52, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 56, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 50, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 49, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 56, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 57, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 55, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 54, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 52, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 51, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 49, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 48, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 57, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 54, 56, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 54, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 54, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 54, 53, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 51, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 54, 50, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 48, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 56, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 53, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 53, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 50, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 55, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 52, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 49, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 57, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, - 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 54, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, - 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 51, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, - 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 48, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 57, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 56, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 54, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 54, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 51, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 50, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, - 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 55, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 54, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, - 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 51, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 50, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 48, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, - 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 55, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 50, 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 52, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 51, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 50, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 48, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 56, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 55, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 50, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 52, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 49, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 48, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 56, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 53, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 52, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 49, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 48, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 57, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 56, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 48, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 48, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 53, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 52, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 48, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, - 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 49, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 50, 48, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 57, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 57, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 55, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 54, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 57, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 51, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 57, 50, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 48, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 55, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 56, 54, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 52, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 51, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 48, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 55, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 56, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 55, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 55, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 52, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 51, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, - 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 48, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 56, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 55, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, - 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 52, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 54, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 54, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 49, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 48, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, - 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 56, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 53, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 53, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 52, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 49, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 57, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 56, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 53, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 50, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 49, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 57, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 54, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 53, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 50, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 49, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 57, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 54, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 53, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, - 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 50, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 57, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, - 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 54, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 51, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 50, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 48, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 48, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 55, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 54, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 48, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 48, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 51, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 48, 50, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 48, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 48, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, 84, 79, 210, 83, 69, 76, 69, - 67, 84, 69, 196, 83, 69, 73, 83, 77, 65, 128, 83, 69, 73, 83, 77, 193, - 83, 69, 72, 128, 83, 69, 71, 79, 76, 128, 83, 69, 71, 78, 79, 128, 83, - 69, 71, 77, 69, 78, 84, 128, 83, 69, 69, 78, 85, 128, 83, 69, 69, 78, - 128, 83, 69, 69, 206, 83, 69, 69, 68, 76, 73, 78, 71, 128, 83, 69, 69, - 45, 78, 79, 45, 69, 86, 73, 204, 83, 69, 67, 84, 79, 82, 128, 83, 69, 67, - 84, 73, 79, 78, 128, 83, 69, 67, 84, 73, 79, 206, 83, 69, 67, 82, 69, 84, - 128, 83, 69, 67, 79, 78, 68, 128, 83, 69, 66, 65, 84, 66, 69, 73, 212, - 83, 69, 65, 84, 128, 83, 69, 65, 76, 128, 83, 69, 65, 71, 85, 76, 204, - 83, 68, 79, 78, 199, 83, 68, 128, 83, 67, 87, 65, 128, 83, 67, 82, 85, - 80, 76, 69, 128, 83, 67, 82, 79, 76, 76, 128, 83, 67, 82, 73, 80, 84, - 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, 83, 67, 82, - 69, 65, 77, 73, 78, 199, 83, 67, 79, 82, 80, 73, 85, 83, 128, 83, 67, 79, - 82, 69, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, 73, 128, 83, - 67, 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 82, 79, 69, 68, 69, - 82, 128, 83, 67, 72, 79, 79, 76, 128, 83, 67, 72, 79, 79, 204, 83, 67, - 72, 79, 76, 65, 82, 128, 83, 67, 72, 69, 77, 193, 83, 67, 69, 80, 84, 69, - 210, 83, 67, 65, 78, 68, 73, 67, 85, 83, 128, 83, 67, 65, 78, 68, 73, 67, - 85, 211, 83, 67, 65, 206, 83, 67, 65, 76, 69, 83, 128, 83, 66, 85, 194, - 83, 66, 82, 85, 204, 83, 65, 89, 73, 83, 201, 83, 65, 89, 65, 78, 78, 65, - 128, 83, 65, 89, 128, 83, 65, 88, 79, 80, 72, 79, 78, 69, 128, 83, 65, - 88, 73, 77, 65, 84, 65, 128, 83, 65, 87, 65, 78, 128, 83, 65, 87, 128, - 83, 65, 86, 79, 85, 82, 73, 78, 199, 83, 65, 85, 73, 76, 128, 83, 65, 84, - 85, 82, 78, 128, 83, 65, 84, 75, 65, 65, 78, 75, 85, 85, 128, 83, 65, 84, - 75, 65, 65, 78, 128, 83, 65, 84, 69, 76, 76, 73, 84, 197, 83, 65, 84, 67, - 72, 69, 76, 128, 83, 65, 84, 65, 78, 71, 65, 128, 83, 65, 83, 72, 128, - 83, 65, 83, 65, 75, 128, 83, 65, 82, 73, 128, 83, 65, 82, 193, 83, 65, - 82, 128, 83, 65, 81, 128, 83, 65, 80, 65, 128, 83, 65, 78, 89, 79, 79, - 71, 193, 83, 65, 78, 89, 65, 75, 193, 83, 65, 78, 84, 73, 73, 77, 85, - 128, 83, 65, 78, 78, 89, 65, 128, 83, 65, 78, 71, 65, 50, 128, 83, 65, - 78, 68, 65, 76, 128, 83, 65, 78, 65, 72, 128, 83, 65, 78, 128, 83, 65, - 77, 89, 79, 203, 83, 65, 77, 86, 65, 84, 128, 83, 65, 77, 80, 73, 128, - 83, 65, 77, 80, 72, 65, 79, 128, 83, 65, 77, 75, 65, 128, 83, 65, 77, 69, - 75, 72, 128, 83, 65, 77, 69, 75, 200, 83, 65, 77, 66, 65, 128, 83, 65, - 77, 65, 82, 73, 84, 65, 206, 83, 65, 77, 128, 83, 65, 76, 84, 73, 82, 69, - 128, 83, 65, 76, 84, 73, 76, 76, 79, 128, 83, 65, 76, 84, 45, 50, 128, - 83, 65, 76, 84, 128, 83, 65, 76, 212, 83, 65, 76, 76, 65, 76, 76, 65, 72, - 79, 213, 83, 65, 76, 76, 193, 83, 65, 76, 65, 205, 83, 65, 76, 65, 128, - 83, 65, 76, 45, 65, 77, 77, 79, 78, 73, 65, 67, 128, 83, 65, 76, 128, 83, - 65, 75, 79, 84, 128, 83, 65, 75, 69, 85, 65, 69, 128, 83, 65, 75, 197, - 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 66, 79, 65, 84, 128, 83, 65, - 73, 76, 128, 83, 65, 73, 75, 85, 82, 85, 128, 83, 65, 72, 128, 83, 65, - 71, 73, 84, 84, 65, 82, 73, 85, 83, 128, 83, 65, 71, 65, 128, 83, 65, 71, - 128, 83, 65, 199, 83, 65, 70, 72, 65, 128, 83, 65, 68, 72, 69, 128, 83, - 65, 68, 69, 128, 83, 65, 68, 128, 83, 65, 196, 83, 65, 67, 82, 73, 70, - 73, 67, 73, 65, 204, 83, 65, 65, 73, 128, 83, 65, 65, 68, 72, 85, 128, - 83, 65, 45, 73, 128, 83, 65, 45, 50, 128, 83, 48, 52, 54, 128, 83, 48, - 52, 53, 128, 83, 48, 52, 52, 128, 83, 48, 52, 51, 128, 83, 48, 52, 50, - 128, 83, 48, 52, 49, 128, 83, 48, 52, 48, 128, 83, 48, 51, 57, 128, 83, - 48, 51, 56, 128, 83, 48, 51, 55, 128, 83, 48, 51, 54, 128, 83, 48, 51, - 53, 65, 128, 83, 48, 51, 53, 128, 83, 48, 51, 52, 128, 83, 48, 51, 51, - 128, 83, 48, 51, 50, 128, 83, 48, 51, 49, 128, 83, 48, 51, 48, 128, 83, - 48, 50, 57, 128, 83, 48, 50, 56, 128, 83, 48, 50, 55, 128, 83, 48, 50, - 54, 66, 128, 83, 48, 50, 54, 65, 128, 83, 48, 50, 54, 128, 83, 48, 50, - 53, 128, 83, 48, 50, 52, 128, 83, 48, 50, 51, 128, 83, 48, 50, 50, 128, - 83, 48, 50, 49, 128, 83, 48, 50, 48, 128, 83, 48, 49, 57, 128, 83, 48, - 49, 56, 128, 83, 48, 49, 55, 65, 128, 83, 48, 49, 55, 128, 83, 48, 49, - 54, 128, 83, 48, 49, 53, 128, 83, 48, 49, 52, 66, 128, 83, 48, 49, 52, - 65, 128, 83, 48, 49, 52, 128, 83, 48, 49, 51, 128, 83, 48, 49, 50, 128, - 83, 48, 49, 49, 128, 83, 48, 49, 48, 128, 83, 48, 48, 57, 128, 83, 48, - 48, 56, 128, 83, 48, 48, 55, 128, 83, 48, 48, 54, 65, 128, 83, 48, 48, - 54, 128, 83, 48, 48, 53, 128, 83, 48, 48, 52, 128, 83, 48, 48, 51, 128, - 83, 48, 48, 50, 65, 128, 83, 48, 48, 50, 128, 83, 48, 48, 49, 128, 83, - 45, 87, 128, 83, 45, 83, 72, 65, 80, 69, 196, 82, 89, 89, 128, 82, 89, - 88, 128, 82, 89, 84, 128, 82, 89, 82, 88, 128, 82, 89, 82, 128, 82, 89, - 80, 128, 82, 87, 79, 79, 128, 82, 87, 79, 128, 82, 87, 73, 73, 128, 82, - 87, 73, 128, 82, 87, 69, 69, 128, 82, 87, 69, 128, 82, 87, 65, 72, 65, - 128, 82, 87, 65, 65, 128, 82, 87, 65, 128, 82, 85, 88, 128, 82, 85, 85, - 66, 85, 82, 85, 128, 82, 85, 85, 128, 82, 85, 84, 128, 82, 85, 83, 73, - 128, 82, 85, 82, 88, 128, 82, 85, 82, 128, 82, 85, 80, 73, 73, 128, 82, - 85, 80, 69, 197, 82, 85, 80, 128, 82, 85, 79, 88, 128, 82, 85, 79, 80, - 128, 82, 85, 79, 128, 82, 85, 78, 79, 85, 84, 128, 82, 85, 78, 78, 73, - 78, 199, 82, 85, 78, 78, 69, 82, 128, 82, 85, 78, 128, 82, 85, 77, 201, - 82, 85, 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 82, 85, 76, 69, 82, - 128, 82, 85, 76, 69, 45, 68, 69, 76, 65, 89, 69, 68, 128, 82, 85, 76, 69, - 128, 82, 85, 75, 75, 65, 75, 72, 65, 128, 82, 85, 73, 83, 128, 82, 85, - 71, 66, 217, 82, 85, 194, 82, 85, 65, 128, 82, 84, 72, 65, 78, 199, 82, - 84, 65, 71, 83, 128, 82, 84, 65, 71, 211, 82, 82, 89, 88, 128, 82, 82, - 89, 84, 128, 82, 82, 89, 82, 88, 128, 82, 82, 89, 82, 128, 82, 82, 89, - 80, 128, 82, 82, 85, 88, 128, 82, 82, 85, 85, 128, 82, 82, 85, 84, 128, - 82, 82, 85, 82, 88, 128, 82, 82, 85, 82, 128, 82, 82, 85, 80, 128, 82, - 82, 85, 79, 88, 128, 82, 82, 85, 79, 128, 82, 82, 85, 128, 82, 82, 79, - 88, 128, 82, 82, 79, 84, 128, 82, 82, 79, 80, 128, 82, 82, 79, 79, 128, - 82, 82, 79, 128, 82, 82, 73, 73, 128, 82, 82, 73, 128, 82, 82, 69, 88, - 128, 82, 82, 69, 84, 128, 82, 82, 69, 80, 128, 82, 82, 69, 72, 128, 82, - 82, 69, 200, 82, 82, 69, 69, 128, 82, 82, 69, 128, 82, 82, 65, 88, 128, - 82, 82, 65, 85, 128, 82, 82, 65, 73, 128, 82, 82, 65, 65, 128, 82, 82, - 65, 128, 82, 79, 87, 66, 79, 65, 84, 128, 82, 79, 85, 78, 68, 69, 196, - 82, 79, 85, 78, 68, 45, 84, 73, 80, 80, 69, 196, 82, 79, 84, 85, 78, 68, - 65, 128, 82, 79, 84, 65, 84, 69, 196, 82, 79, 83, 72, 128, 82, 79, 83, - 69, 84, 84, 69, 128, 82, 79, 83, 69, 128, 82, 79, 79, 84, 128, 82, 79, - 79, 83, 84, 69, 82, 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, - 79, 77, 65, 206, 82, 79, 77, 128, 82, 79, 76, 76, 69, 210, 82, 79, 72, - 73, 78, 71, 89, 193, 82, 79, 196, 82, 79, 67, 75, 69, 84, 128, 82, 79, - 67, 203, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, 82, 79, 65, 83, 84, - 69, 196, 82, 79, 65, 82, 128, 82, 79, 65, 128, 82, 78, 89, 73, 78, 199, - 82, 78, 79, 79, 78, 128, 82, 78, 79, 79, 206, 82, 78, 65, 205, 82, 77, - 84, 128, 82, 76, 79, 128, 82, 76, 77, 128, 82, 76, 73, 128, 82, 76, 69, - 128, 82, 74, 69, 211, 82, 74, 69, 128, 82, 74, 197, 82, 73, 86, 69, 82, - 128, 82, 73, 84, 85, 65, 76, 128, 82, 73, 84, 84, 79, 82, 85, 128, 82, - 73, 84, 83, 73, 128, 82, 73, 83, 73, 78, 199, 82, 73, 83, 72, 128, 82, - 73, 82, 65, 128, 82, 73, 80, 128, 82, 73, 78, 71, 211, 82, 73, 78, 70, - 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, 206, 82, 73, 77, 71, 66, 65, + 211, 83, 79, 76, 73, 196, 83, 79, 72, 128, 83, 79, 71, 68, 73, 65, 206, + 83, 79, 70, 84, 87, 65, 82, 69, 45, 70, 85, 78, 67, 84, 73, 79, 206, 83, + 79, 70, 84, 78, 69, 83, 83, 128, 83, 79, 70, 212, 83, 79, 198, 83, 79, + 67, 73, 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 83, 79, 65, 80, 128, + 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, + 87, 77, 65, 206, 83, 78, 79, 87, 70, 76, 65, 75, 69, 128, 83, 78, 79, 87, + 66, 79, 65, 82, 68, 69, 82, 128, 83, 78, 79, 87, 128, 83, 78, 79, 215, + 83, 78, 79, 85, 84, 128, 83, 78, 79, 85, 212, 83, 78, 65, 208, 83, 78, + 65, 75, 69, 128, 83, 78, 65, 75, 197, 83, 78, 65, 73, 76, 128, 83, 78, + 193, 83, 77, 79, 75, 73, 78, 199, 83, 77, 73, 82, 75, 73, 78, 199, 83, + 77, 73, 76, 73, 78, 199, 83, 77, 73, 76, 69, 128, 83, 77, 69, 65, 82, + 128, 83, 77, 65, 83, 200, 83, 77, 65, 76, 76, 69, 210, 83, 77, 65, 76, + 76, 128, 83, 76, 85, 82, 128, 83, 76, 79, 87, 76, 89, 128, 83, 76, 79, + 215, 83, 76, 79, 86, 79, 128, 83, 76, 79, 212, 83, 76, 79, 80, 73, 78, + 199, 83, 76, 79, 80, 69, 128, 83, 76, 79, 65, 206, 83, 76, 73, 78, 71, + 128, 83, 76, 73, 71, 72, 84, 76, 217, 83, 76, 73, 68, 73, 78, 71, 128, + 83, 76, 73, 68, 69, 82, 128, 83, 76, 73, 67, 69, 128, 83, 76, 73, 67, + 197, 83, 76, 69, 85, 84, 200, 83, 76, 69, 69, 80, 217, 83, 76, 69, 69, + 80, 73, 78, 199, 83, 76, 65, 86, 79, 78, 73, 195, 83, 76, 65, 86, 69, + 128, 83, 76, 65, 83, 72, 128, 83, 76, 65, 83, 200, 83, 76, 65, 78, 84, + 69, 196, 83, 75, 87, 65, 128, 83, 75, 87, 128, 83, 75, 85, 76, 76, 128, + 83, 75, 85, 76, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, 78, 128, + 83, 75, 73, 69, 82, 128, 83, 75, 201, 83, 75, 69, 87, 69, 196, 83, 75, + 65, 84, 69, 128, 83, 75, 128, 83, 74, 69, 128, 83, 73, 90, 197, 83, 73, + 88, 84, 89, 45, 70, 79, 85, 82, 84, 200, 83, 73, 88, 84, 89, 128, 83, 73, + 88, 84, 217, 83, 73, 88, 84, 72, 83, 128, 83, 73, 88, 84, 72, 211, 83, + 73, 88, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 83, 128, 83, 73, + 88, 84, 69, 69, 78, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 200, 83, + 73, 88, 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 83, 73, 88, 45, + 84, 72, 73, 82, 84, 89, 128, 83, 73, 88, 45, 83, 84, 82, 73, 78, 199, 83, + 73, 88, 45, 80, 69, 82, 45, 69, 205, 83, 73, 88, 45, 76, 73, 78, 197, 83, + 73, 216, 83, 73, 84, 69, 128, 83, 73, 83, 65, 128, 83, 73, 82, 73, 78, + 71, 85, 128, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 83, 73, + 79, 83, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, + 82, 73, 69, 85, 76, 128, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 45, 75, + 73, 89, 69, 79, 75, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, + 128, 83, 73, 79, 83, 45, 80, 65, 78, 83, 73, 79, 83, 128, 83, 73, 79, 83, + 45, 78, 73, 69, 85, 78, 128, 83, 73, 79, 83, 45, 77, 73, 69, 85, 77, 128, + 83, 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, + 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 83, 73, 79, 83, + 45, 73, 69, 85, 78, 71, 128, 83, 73, 79, 83, 45, 72, 73, 69, 85, 72, 128, + 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 83, 73, 79, 83, 45, 67, 72, + 73, 69, 85, 67, 72, 128, 83, 73, 79, 211, 83, 73, 78, 85, 83, 79, 73, + 196, 83, 73, 78, 75, 73, 78, 71, 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, + 73, 70, 84, 45, 51, 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, + 45, 50, 128, 83, 73, 78, 71, 76, 69, 45, 76, 73, 78, 197, 83, 73, 78, 71, + 76, 69, 128, 83, 73, 78, 71, 76, 197, 83, 73, 78, 71, 65, 65, 84, 128, + 83, 73, 78, 197, 83, 73, 78, 68, 72, 201, 83, 73, 206, 83, 73, 77, 80, + 76, 73, 70, 73, 69, 196, 83, 73, 77, 73, 76, 65, 82, 128, 83, 73, 77, 73, + 76, 65, 210, 83, 73, 77, 65, 78, 83, 73, 211, 83, 73, 77, 65, 76, 85, 78, + 71, 85, 206, 83, 73, 77, 65, 128, 83, 73, 76, 86, 69, 82, 128, 83, 73, + 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 72, 79, 85, 69, 84, + 84, 69, 128, 83, 73, 76, 72, 79, 85, 69, 84, 84, 197, 83, 73, 76, 65, 51, + 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, + 71, 78, 83, 128, 83, 73, 71, 77, 65, 128, 83, 73, 71, 77, 193, 83, 73, + 71, 69, 204, 83, 73, 71, 52, 128, 83, 73, 71, 180, 83, 73, 71, 128, 83, + 73, 69, 69, 128, 83, 73, 68, 69, 87, 65, 89, 211, 83, 73, 68, 68, 72, 65, + 77, 128, 83, 73, 68, 68, 72, 65, 205, 83, 73, 67, 75, 78, 69, 83, 83, + 128, 83, 73, 67, 75, 76, 69, 128, 83, 73, 66, 197, 83, 73, 65, 128, 83, + 201, 83, 72, 89, 88, 128, 83, 72, 89, 84, 128, 83, 72, 89, 82, 88, 128, + 83, 72, 89, 82, 128, 83, 72, 89, 80, 128, 83, 72, 89, 69, 128, 83, 72, + 89, 65, 128, 83, 72, 89, 128, 83, 72, 87, 79, 89, 128, 83, 72, 87, 79, + 79, 128, 83, 72, 87, 79, 128, 83, 72, 87, 73, 73, 128, 83, 72, 87, 73, + 128, 83, 72, 87, 69, 128, 83, 72, 87, 197, 83, 72, 87, 65, 65, 128, 83, + 72, 87, 65, 128, 83, 72, 85, 88, 128, 83, 72, 85, 85, 128, 83, 72, 85, + 84, 128, 83, 72, 85, 82, 88, 128, 83, 72, 85, 82, 128, 83, 72, 85, 80, + 128, 83, 72, 85, 79, 88, 128, 83, 72, 85, 79, 80, 128, 83, 72, 85, 79, + 128, 83, 72, 85, 77, 128, 83, 72, 85, 76, 128, 83, 72, 85, 70, 70, 76, + 197, 83, 72, 85, 69, 81, 128, 83, 72, 85, 69, 78, 83, 72, 85, 69, 84, + 128, 83, 72, 85, 66, 85, 82, 128, 83, 72, 85, 50, 128, 83, 72, 85, 178, + 83, 72, 85, 128, 83, 72, 213, 83, 72, 84, 65, 80, 73, 67, 128, 83, 72, + 84, 65, 128, 83, 72, 82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80, 128, + 83, 72, 82, 73, 73, 128, 83, 72, 82, 73, 128, 83, 72, 79, 89, 128, 83, + 72, 79, 88, 128, 83, 72, 79, 87, 69, 82, 128, 83, 72, 79, 85, 76, 68, 69, + 82, 69, 196, 83, 72, 79, 84, 128, 83, 72, 79, 82, 84, 83, 128, 83, 72, + 79, 82, 84, 211, 83, 72, 79, 82, 84, 72, 65, 78, 196, 83, 72, 79, 82, 84, + 69, 78, 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 69, 128, 83, 72, 79, + 82, 84, 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 79, 82, 84, 45, 84, + 87, 73, 71, 45, 84, 89, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, + 83, 79, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 79, 83, 211, 83, + 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 78, 65, 85, 196, 83, 72, 79, 82, + 84, 45, 84, 87, 73, 71, 45, 77, 65, 68, 210, 83, 72, 79, 82, 84, 45, 84, + 87, 73, 71, 45, 72, 65, 71, 65, 76, 204, 83, 72, 79, 82, 84, 45, 84, 87, + 73, 71, 45, 66, 74, 65, 82, 75, 65, 206, 83, 72, 79, 82, 84, 45, 84, 87, + 73, 71, 45, 65, 210, 83, 72, 79, 82, 84, 128, 83, 72, 79, 82, 212, 83, + 72, 79, 81, 128, 83, 72, 79, 209, 83, 72, 79, 80, 80, 73, 78, 199, 83, + 72, 79, 80, 128, 83, 72, 79, 79, 84, 73, 78, 199, 83, 72, 79, 79, 84, + 128, 83, 72, 79, 79, 73, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, 201, + 83, 72, 79, 199, 83, 72, 79, 69, 128, 83, 72, 79, 197, 83, 72, 79, 65, + 128, 83, 72, 79, 128, 83, 72, 73, 89, 89, 65, 65, 76, 65, 65, 128, 83, + 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, 72, 73, 82, 212, 83, 72, + 73, 82, 65, 69, 128, 83, 72, 73, 82, 128, 83, 72, 73, 210, 83, 72, 73, + 81, 128, 83, 72, 73, 80, 128, 83, 72, 73, 78, 84, 207, 83, 72, 73, 78, + 73, 71, 128, 83, 72, 73, 78, 68, 193, 83, 72, 73, 206, 83, 72, 73, 77, + 65, 128, 83, 72, 73, 77, 193, 83, 72, 73, 77, 128, 83, 72, 73, 205, 83, + 72, 73, 73, 78, 128, 83, 72, 73, 73, 128, 83, 72, 73, 70, 212, 83, 72, + 73, 69, 76, 68, 128, 83, 72, 73, 68, 128, 83, 72, 73, 196, 83, 72, 72, + 65, 128, 83, 72, 72, 193, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, + 83, 72, 69, 85, 88, 128, 83, 72, 69, 85, 79, 81, 128, 83, 72, 69, 85, 65, + 69, 81, 84, 85, 128, 83, 72, 69, 85, 65, 69, 81, 128, 83, 72, 69, 85, 65, + 69, 128, 83, 72, 69, 84, 128, 83, 72, 69, 212, 83, 72, 69, 83, 72, 76, + 65, 77, 128, 83, 72, 69, 83, 72, 73, 71, 128, 83, 72, 69, 83, 72, 73, + 199, 83, 72, 69, 83, 72, 50, 128, 83, 72, 69, 83, 72, 128, 83, 72, 69, + 81, 69, 204, 83, 72, 69, 80, 128, 83, 72, 69, 78, 128, 83, 72, 69, 76, + 76, 128, 83, 72, 69, 76, 204, 83, 72, 69, 76, 70, 128, 83, 72, 69, 73, + 128, 83, 72, 69, 71, 57, 128, 83, 72, 69, 69, 80, 128, 83, 72, 69, 69, + 78, 85, 128, 83, 72, 69, 69, 78, 128, 83, 72, 69, 69, 206, 83, 72, 69, + 69, 128, 83, 72, 69, 45, 71, 79, 65, 84, 128, 83, 72, 197, 83, 72, 67, + 72, 79, 79, 73, 128, 83, 72, 67, 72, 65, 128, 83, 72, 65, 89, 128, 83, + 72, 65, 88, 128, 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 86, + 73, 65, 206, 83, 72, 65, 86, 69, 196, 83, 72, 65, 85, 128, 83, 72, 65, + 84, 128, 83, 72, 65, 82, 85, 128, 83, 72, 65, 82, 213, 83, 72, 65, 82, + 80, 128, 83, 72, 65, 82, 208, 83, 72, 65, 82, 65, 128, 83, 72, 65, 82, + 50, 128, 83, 72, 65, 82, 178, 83, 72, 65, 80, 73, 78, 71, 128, 83, 72, + 65, 80, 69, 83, 128, 83, 72, 65, 80, 197, 83, 72, 65, 80, 128, 83, 72, + 65, 78, 71, 128, 83, 72, 65, 78, 128, 83, 72, 65, 206, 83, 72, 65, 77, + 82, 79, 67, 75, 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, 128, 83, 72, + 65, 75, 84, 73, 128, 83, 72, 65, 75, 128, 83, 72, 65, 73, 128, 83, 72, + 65, 70, 84, 128, 83, 72, 65, 70, 212, 83, 72, 65, 68, 79, 87, 69, 196, + 83, 72, 65, 68, 69, 196, 83, 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, + 128, 83, 72, 65, 68, 68, 193, 83, 72, 65, 68, 128, 83, 72, 65, 196, 83, + 72, 65, 66, 54, 128, 83, 72, 65, 65, 128, 83, 72, 65, 54, 128, 83, 72, + 65, 51, 128, 83, 72, 65, 179, 83, 71, 82, 193, 83, 71, 79, 210, 83, 71, + 67, 128, 83, 71, 65, 215, 83, 71, 65, 194, 83, 71, 128, 83, 69, 89, 75, + 128, 83, 69, 88, 84, 85, 76, 193, 83, 69, 88, 84, 73, 76, 69, 128, 83, + 69, 88, 84, 65, 78, 211, 83, 69, 86, 69, 82, 65, 78, 67, 69, 128, 83, 69, + 86, 69, 78, 84, 89, 128, 83, 69, 86, 69, 78, 84, 217, 83, 69, 86, 69, 78, + 84, 72, 128, 83, 69, 86, 69, 78, 84, 69, 69, 78, 128, 83, 69, 86, 69, 78, + 84, 69, 69, 206, 83, 69, 86, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, 83, + 69, 86, 69, 206, 83, 69, 85, 88, 128, 83, 69, 85, 78, 89, 65, 77, 128, + 83, 69, 85, 65, 69, 81, 128, 83, 69, 84, 70, 79, 78, 128, 83, 69, 83, 84, + 69, 82, 84, 73, 85, 211, 83, 69, 83, 81, 85, 73, 81, 85, 65, 68, 82, 65, + 84, 69, 128, 83, 69, 83, 65, 77, 197, 83, 69, 82, 86, 73, 67, 197, 83, + 69, 82, 73, 70, 83, 128, 83, 69, 82, 73, 70, 211, 83, 69, 82, 73, 70, + 128, 83, 69, 81, 85, 69, 78, 67, 197, 83, 69, 80, 84, 69, 77, 66, 69, 82, + 128, 83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 83, 69, 80, 65, 82, 65, 84, + 79, 210, 83, 69, 78, 84, 79, 128, 83, 69, 78, 84, 73, 128, 83, 69, 77, + 85, 78, 67, 73, 193, 83, 69, 77, 75, 65, 84, 72, 128, 83, 69, 77, 75, + 128, 83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 69, 77, 73, 83, 79, 70, + 212, 83, 69, 77, 73, 83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 77, 73, 77, + 73, 78, 73, 77, 193, 83, 69, 77, 73, 68, 73, 82, 69, 67, 212, 83, 69, 77, + 73, 67, 79, 76, 79, 78, 128, 83, 69, 77, 73, 67, 79, 76, 79, 206, 83, 69, + 77, 73, 67, 73, 82, 67, 85, 76, 65, 210, 83, 69, 77, 73, 67, 73, 82, 67, + 76, 197, 83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, 69, 77, 73, 45, 86, + 79, 73, 67, 69, 196, 83, 69, 76, 70, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 57, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 56, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 57, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 53, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 57, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 50, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 55, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 56, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 52, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 56, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 49, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 56, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 57, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, + 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 54, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, + 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 51, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, + 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 48, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 57, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 56, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 54, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 54, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 53, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 51, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 50, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 48, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 56, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 55, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 53, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 52, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 50, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 49, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 55, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 52, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 49, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 57, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 54, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 51, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 48, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 56, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 54, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 51, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 50, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 55, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 54, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 51, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 50, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, + 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 55, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 54, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, + 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 51, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 50, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 50, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 48, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, + 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 55, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 50, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 50, 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 52, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 51, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 50, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 48, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 50, 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 56, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 55, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 50, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 52, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 49, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 48, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 48, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 56, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 48, 55, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 48, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 53, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 52, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 48, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 48, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 49, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 48, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 57, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 57, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, + 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 54, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 57, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 51, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 50, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 55, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 54, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 56, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 51, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 48, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 55, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 55, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 55, 54, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 52, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 51, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 55, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 48, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 56, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 55, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 54, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 52, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 51, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 54, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, + 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 48, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 56, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 55, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, + 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 52, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 49, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 48, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, + 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 56, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 53, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 52, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 49, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 57, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 56, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 53, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 50, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 49, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 57, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 54, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 53, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 50, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 49, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 57, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 54, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 53, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, + 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 50, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 57, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 48, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, + 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 54, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 48, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 48, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 51, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 50, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 48, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 48, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 128, 83, + 69, 76, 69, 67, 84, 79, 210, 83, 69, 76, 69, 67, 84, 69, 196, 83, 69, 73, + 83, 77, 65, 128, 83, 69, 73, 83, 77, 193, 83, 69, 72, 128, 83, 69, 71, + 79, 76, 128, 83, 69, 71, 78, 79, 128, 83, 69, 71, 77, 69, 78, 84, 128, + 83, 69, 69, 86, 128, 83, 69, 69, 78, 85, 128, 83, 69, 69, 78, 128, 83, + 69, 69, 206, 83, 69, 69, 68, 76, 73, 78, 71, 128, 83, 69, 69, 45, 78, 79, + 45, 69, 86, 73, 204, 83, 69, 67, 84, 79, 82, 128, 83, 69, 67, 84, 73, 79, + 78, 128, 83, 69, 67, 84, 73, 79, 206, 83, 69, 67, 82, 69, 84, 128, 83, + 69, 67, 79, 78, 68, 128, 83, 69, 67, 65, 78, 84, 128, 83, 69, 66, 65, 84, + 66, 69, 73, 212, 83, 69, 65, 84, 128, 83, 69, 65, 76, 128, 83, 69, 65, + 71, 85, 76, 204, 83, 68, 79, 78, 199, 83, 68, 128, 83, 67, 87, 65, 128, + 83, 67, 82, 85, 80, 76, 69, 128, 83, 67, 82, 79, 76, 76, 128, 83, 67, 82, + 73, 80, 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, + 83, 67, 82, 69, 65, 77, 73, 78, 199, 83, 67, 79, 82, 80, 73, 85, 83, 128, + 83, 67, 79, 82, 69, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, 73, + 128, 83, 67, 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 82, 79, + 69, 68, 69, 82, 128, 83, 67, 72, 79, 79, 76, 128, 83, 67, 72, 79, 79, + 204, 83, 67, 72, 79, 76, 65, 82, 128, 83, 67, 72, 69, 77, 193, 83, 67, + 69, 80, 84, 69, 210, 83, 67, 65, 78, 68, 73, 67, 85, 83, 128, 83, 67, 65, + 78, 68, 73, 67, 85, 211, 83, 67, 65, 206, 83, 67, 65, 76, 69, 83, 128, + 83, 66, 85, 194, 83, 66, 82, 85, 204, 83, 65, 89, 73, 83, 201, 83, 65, + 89, 65, 78, 78, 65, 128, 83, 65, 89, 128, 83, 65, 88, 79, 80, 72, 79, 78, + 69, 128, 83, 65, 88, 73, 77, 65, 84, 65, 128, 83, 65, 87, 65, 78, 128, + 83, 65, 87, 128, 83, 65, 86, 79, 85, 82, 73, 78, 199, 83, 65, 85, 82, 65, + 83, 72, 84, 82, 193, 83, 65, 85, 73, 76, 128, 83, 65, 84, 85, 82, 78, + 128, 83, 65, 84, 75, 65, 65, 78, 75, 85, 85, 128, 83, 65, 84, 75, 65, 65, + 78, 128, 83, 65, 84, 69, 76, 76, 73, 84, 69, 128, 83, 65, 84, 69, 76, 76, + 73, 84, 197, 83, 65, 84, 67, 72, 69, 76, 128, 83, 65, 84, 65, 78, 71, 65, + 128, 83, 65, 83, 72, 128, 83, 65, 83, 65, 75, 128, 83, 65, 82, 73, 128, + 83, 65, 82, 193, 83, 65, 82, 128, 83, 65, 81, 128, 83, 65, 80, 65, 128, + 83, 65, 78, 89, 79, 79, 71, 193, 83, 65, 78, 89, 65, 75, 193, 83, 65, 78, + 84, 73, 73, 77, 85, 128, 83, 65, 78, 78, 89, 65, 128, 83, 65, 78, 71, 65, + 50, 128, 83, 65, 78, 68, 72, 201, 83, 65, 78, 68, 65, 76, 128, 83, 65, + 78, 65, 72, 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, 203, 83, 65, 77, + 86, 65, 84, 128, 83, 65, 77, 80, 73, 128, 83, 65, 77, 80, 72, 65, 79, + 128, 83, 65, 77, 75, 65, 128, 83, 65, 77, 69, 75, 72, 128, 83, 65, 77, + 69, 75, 200, 83, 65, 77, 66, 65, 128, 83, 65, 77, 65, 82, 73, 84, 65, + 206, 83, 65, 77, 128, 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 76, 84, + 73, 76, 76, 79, 128, 83, 65, 76, 84, 45, 50, 128, 83, 65, 76, 84, 128, + 83, 65, 76, 212, 83, 65, 76, 76, 65, 76, 76, 65, 72, 79, 213, 83, 65, 76, + 76, 193, 83, 65, 76, 65, 205, 83, 65, 76, 65, 128, 83, 65, 76, 45, 65, + 77, 77, 79, 78, 73, 65, 67, 128, 83, 65, 76, 128, 83, 65, 75, 79, 84, + 128, 83, 65, 75, 69, 85, 65, 69, 128, 83, 65, 75, 197, 83, 65, 74, 68, + 65, 72, 128, 83, 65, 73, 76, 66, 79, 65, 84, 128, 83, 65, 73, 76, 128, + 83, 65, 73, 75, 85, 82, 85, 128, 83, 65, 72, 128, 83, 65, 71, 73, 84, 84, + 65, 82, 73, 85, 83, 128, 83, 65, 71, 65, 128, 83, 65, 71, 128, 83, 65, + 199, 83, 65, 70, 72, 65, 128, 83, 65, 70, 69, 84, 217, 83, 65, 68, 72, + 69, 128, 83, 65, 68, 69, 128, 83, 65, 68, 128, 83, 65, 196, 83, 65, 67, + 82, 73, 70, 73, 67, 73, 65, 204, 83, 65, 65, 73, 128, 83, 65, 65, 68, 72, + 85, 128, 83, 65, 45, 73, 128, 83, 65, 45, 50, 128, 83, 48, 52, 54, 128, + 83, 48, 52, 53, 128, 83, 48, 52, 52, 128, 83, 48, 52, 51, 128, 83, 48, + 52, 50, 128, 83, 48, 52, 49, 128, 83, 48, 52, 48, 128, 83, 48, 51, 57, + 128, 83, 48, 51, 56, 128, 83, 48, 51, 55, 128, 83, 48, 51, 54, 128, 83, + 48, 51, 53, 65, 128, 83, 48, 51, 53, 128, 83, 48, 51, 52, 128, 83, 48, + 51, 51, 128, 83, 48, 51, 50, 128, 83, 48, 51, 49, 128, 83, 48, 51, 48, + 128, 83, 48, 50, 57, 128, 83, 48, 50, 56, 128, 83, 48, 50, 55, 128, 83, + 48, 50, 54, 66, 128, 83, 48, 50, 54, 65, 128, 83, 48, 50, 54, 128, 83, + 48, 50, 53, 128, 83, 48, 50, 52, 128, 83, 48, 50, 51, 128, 83, 48, 50, + 50, 128, 83, 48, 50, 49, 128, 83, 48, 50, 48, 128, 83, 48, 49, 57, 128, + 83, 48, 49, 56, 128, 83, 48, 49, 55, 65, 128, 83, 48, 49, 55, 128, 83, + 48, 49, 54, 128, 83, 48, 49, 53, 128, 83, 48, 49, 52, 66, 128, 83, 48, + 49, 52, 65, 128, 83, 48, 49, 52, 128, 83, 48, 49, 51, 128, 83, 48, 49, + 50, 128, 83, 48, 49, 49, 128, 83, 48, 49, 48, 128, 83, 48, 48, 57, 128, + 83, 48, 48, 56, 128, 83, 48, 48, 55, 128, 83, 48, 48, 54, 65, 128, 83, + 48, 48, 54, 128, 83, 48, 48, 53, 128, 83, 48, 48, 52, 128, 83, 48, 48, + 51, 128, 83, 48, 48, 50, 65, 128, 83, 48, 48, 50, 128, 83, 48, 48, 49, + 128, 83, 45, 87, 128, 83, 45, 83, 72, 65, 80, 69, 196, 82, 89, 89, 128, + 82, 89, 88, 128, 82, 89, 84, 128, 82, 89, 82, 88, 128, 82, 89, 82, 128, + 82, 89, 80, 128, 82, 87, 79, 79, 128, 82, 87, 79, 128, 82, 87, 73, 73, + 128, 82, 87, 73, 128, 82, 87, 69, 69, 128, 82, 87, 69, 128, 82, 87, 65, + 72, 65, 128, 82, 87, 65, 65, 128, 82, 87, 65, 128, 82, 85, 88, 128, 82, + 85, 85, 66, 85, 82, 85, 128, 82, 85, 85, 128, 82, 85, 84, 128, 82, 85, + 83, 73, 128, 82, 85, 82, 88, 128, 82, 85, 82, 128, 82, 85, 80, 73, 73, + 128, 82, 85, 80, 69, 197, 82, 85, 80, 128, 82, 85, 79, 88, 128, 82, 85, + 79, 80, 128, 82, 85, 79, 128, 82, 85, 78, 79, 85, 84, 128, 82, 85, 78, + 78, 73, 78, 199, 82, 85, 78, 78, 69, 82, 128, 82, 85, 78, 128, 82, 85, + 77, 201, 82, 85, 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 82, 85, 76, + 69, 82, 128, 82, 85, 76, 69, 45, 68, 69, 76, 65, 89, 69, 68, 128, 82, 85, + 76, 69, 128, 82, 85, 75, 75, 65, 75, 72, 65, 128, 82, 85, 73, 83, 128, + 82, 85, 71, 66, 217, 82, 85, 66, 76, 197, 82, 85, 194, 82, 85, 65, 128, + 82, 84, 72, 65, 78, 199, 82, 84, 65, 71, 83, 128, 82, 84, 65, 71, 211, + 82, 82, 89, 88, 128, 82, 82, 89, 84, 128, 82, 82, 89, 82, 88, 128, 82, + 82, 89, 82, 128, 82, 82, 89, 80, 128, 82, 82, 85, 88, 128, 82, 82, 85, + 85, 128, 82, 82, 85, 84, 128, 82, 82, 85, 82, 88, 128, 82, 82, 85, 82, + 128, 82, 82, 85, 80, 128, 82, 82, 85, 79, 88, 128, 82, 82, 85, 79, 128, + 82, 82, 85, 128, 82, 82, 79, 88, 128, 82, 82, 79, 84, 128, 82, 82, 79, + 80, 128, 82, 82, 79, 79, 128, 82, 82, 79, 128, 82, 82, 73, 73, 128, 82, + 82, 73, 128, 82, 82, 69, 88, 128, 82, 82, 69, 84, 128, 82, 82, 69, 80, + 128, 82, 82, 69, 72, 128, 82, 82, 69, 200, 82, 82, 69, 69, 128, 82, 82, + 69, 128, 82, 82, 65, 88, 128, 82, 82, 65, 85, 128, 82, 82, 65, 73, 128, + 82, 82, 65, 65, 128, 82, 82, 65, 128, 82, 79, 87, 66, 79, 65, 84, 128, + 82, 79, 85, 78, 68, 69, 196, 82, 79, 85, 78, 68, 45, 84, 73, 80, 80, 69, + 196, 82, 79, 84, 85, 78, 68, 65, 128, 82, 79, 84, 65, 84, 69, 196, 82, + 79, 83, 72, 128, 82, 79, 83, 69, 84, 84, 69, 128, 82, 79, 83, 69, 128, + 82, 79, 79, 84, 128, 82, 79, 79, 83, 84, 69, 82, 128, 82, 79, 79, 75, + 128, 82, 79, 79, 70, 128, 82, 79, 77, 65, 78, 73, 65, 206, 82, 79, 77, + 65, 206, 82, 79, 77, 128, 82, 79, 76, 76, 69, 210, 82, 79, 76, 76, 69, + 68, 45, 85, 208, 82, 79, 72, 73, 78, 71, 89, 193, 82, 79, 71, 128, 82, + 79, 196, 82, 79, 67, 75, 69, 84, 128, 82, 79, 67, 203, 82, 79, 67, 128, + 82, 79, 66, 65, 84, 128, 82, 79, 65, 83, 84, 69, 196, 82, 79, 65, 82, + 128, 82, 79, 65, 128, 82, 78, 89, 73, 78, 199, 82, 78, 79, 79, 78, 128, + 82, 78, 79, 79, 206, 82, 78, 65, 205, 82, 77, 84, 128, 82, 76, 79, 128, + 82, 76, 77, 128, 82, 76, 73, 128, 82, 76, 69, 128, 82, 74, 69, 211, 82, + 74, 69, 128, 82, 74, 197, 82, 73, 86, 69, 82, 128, 82, 73, 84, 85, 65, + 76, 128, 82, 73, 84, 84, 79, 82, 85, 128, 82, 73, 84, 83, 73, 128, 82, + 73, 83, 73, 78, 199, 82, 73, 83, 72, 128, 82, 73, 82, 65, 128, 82, 73, + 80, 128, 82, 73, 78, 71, 211, 82, 73, 78, 71, 73, 78, 199, 82, 73, 78, + 70, 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, 206, 82, 73, 77, 71, 66, 65, 128, 82, 73, 75, 82, 73, 75, 128, 82, 73, 71, 86, 69, 68, 73, 195, 82, 73, 71, 72, 84, 87, 65, 82, 68, 83, 128, 82, 73, 71, 72, 84, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 84, 79, 45, 76, 69, 70, 212, 82, 73, 71, 72, 84, 45, 83, 73, 68, 197, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 79, 87, 69, 196, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 69, 196, 82, 73, 71, 72, - 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 82, 73, 71, 72, 84, 45, 72, 65, - 78, 68, 69, 196, 82, 73, 71, 72, 84, 45, 72, 65, 78, 196, 82, 73, 71, 72, - 84, 45, 70, 65, 67, 73, 78, 199, 82, 73, 71, 72, 84, 128, 82, 73, 69, 85, - 76, 45, 89, 69, 83, 73, 69, 85, 78, 71, 128, 82, 73, 69, 85, 76, 45, 89, - 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 45, 72, 73, 69, 85, 72, 128, 82, - 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 82, - 73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84, 45, 72, 73, 69, 85, 72, 128, - 82, 73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, - 45, 84, 72, 73, 69, 85, 84, 72, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, - 78, 71, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, - 78, 71, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, - 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 75, - 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 83, 73, 79, 83, 128, 82, - 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, 85, 84, 128, - 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 82, - 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, 80, 72, - 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 72, 73, 69, 85, 72, - 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, - 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 65, 78, - 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 78, 73, 69, 85, 78, 128, 82, - 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 83, 73, 79, 83, 128, 82, 73, - 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 75, 73, 89, 69, 79, 75, 128, 82, - 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 72, 73, 69, 85, 72, 128, 82, - 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 128, 82, 73, 69, 85, 76, 45, 75, - 73, 89, 69, 79, 75, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 75, - 73, 89, 69, 79, 75, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, - 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 75, 65, 80, 89, 69, - 79, 85, 78, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 72, 73, 69, - 85, 72, 128, 82, 73, 69, 85, 76, 45, 67, 73, 69, 85, 67, 128, 82, 73, 69, - 85, 204, 82, 73, 69, 76, 128, 82, 73, 69, 69, 128, 82, 73, 67, 69, 77, - 128, 82, 73, 67, 69, 128, 82, 73, 67, 197, 82, 73, 66, 66, 79, 78, 128, - 82, 73, 65, 204, 82, 72, 79, 84, 73, 195, 82, 72, 79, 128, 82, 72, 207, - 82, 72, 65, 128, 82, 71, 89, 73, 78, 71, 83, 128, 82, 71, 89, 65, 78, - 128, 82, 71, 89, 193, 82, 69, 86, 79, 76, 86, 73, 78, 199, 82, 69, 86, - 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 86, 77, 65, 128, 82, 69, 86, 73, - 65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 128, 82, 69, 86, 69, 82, 83, 69, - 196, 82, 69, 86, 69, 82, 83, 197, 82, 69, 85, 88, 128, 82, 69, 85, 128, - 82, 69, 84, 85, 82, 78, 128, 82, 69, 84, 85, 82, 206, 82, 69, 84, 82, 79, - 70, 76, 69, 216, 82, 69, 84, 82, 69, 65, 84, 128, 82, 69, 84, 79, 82, 84, - 128, 82, 69, 83, 85, 80, 73, 78, 85, 83, 128, 82, 69, 83, 84, 82, 79, 79, - 77, 128, 82, 69, 83, 84, 82, 73, 67, 84, 69, 196, 82, 69, 83, 84, 128, - 82, 69, 83, 80, 79, 78, 83, 69, 128, 82, 69, 83, 79, 85, 82, 67, 69, 128, - 82, 69, 83, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 83, 73, 83, 84, 65, - 78, 67, 69, 128, 82, 69, 83, 73, 68, 69, 78, 67, 69, 128, 82, 69, 83, - 200, 82, 69, 82, 69, 78, 71, 71, 65, 78, 128, 82, 69, 82, 69, 75, 65, 78, - 128, 82, 69, 80, 82, 69, 83, 69, 78, 84, 128, 82, 69, 80, 76, 65, 67, 69, - 77, 69, 78, 212, 82, 69, 80, 72, 128, 82, 69, 80, 69, 84, 73, 84, 73, 79, - 206, 82, 69, 80, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, 128, 82, - 69, 80, 69, 65, 212, 82, 69, 80, 65, 89, 65, 128, 82, 69, 80, 65, 128, - 82, 69, 80, 193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78, 128, - 82, 69, 206, 82, 69, 77, 85, 128, 82, 69, 77, 69, 68, 89, 128, 82, 69, - 76, 73, 71, 73, 79, 78, 128, 82, 69, 76, 73, 69, 86, 69, 196, 82, 69, 76, - 69, 65, 83, 69, 128, 82, 69, 76, 65, 84, 73, 79, 78, 65, 204, 82, 69, 76, - 65, 84, 73, 79, 78, 128, 82, 69, 76, 65, 65, 128, 82, 69, 74, 65, 78, - 199, 82, 69, 73, 196, 82, 69, 71, 85, 76, 85, 83, 45, 52, 128, 82, 69, - 71, 85, 76, 85, 83, 45, 51, 128, 82, 69, 71, 85, 76, 85, 83, 45, 50, 128, - 82, 69, 71, 85, 76, 85, 83, 128, 82, 69, 71, 85, 76, 85, 211, 82, 69, 71, - 73, 83, 84, 69, 82, 69, 196, 82, 69, 71, 73, 79, 78, 65, 204, 82, 69, 71, - 73, 65, 45, 50, 128, 82, 69, 71, 73, 65, 128, 82, 69, 70, 79, 82, 77, 69, - 196, 82, 69, 70, 69, 82, 69, 78, 67, 197, 82, 69, 68, 85, 80, 76, 73, 67, - 65, 84, 73, 79, 78, 128, 82, 69, 67, 89, 67, 76, 73, 78, 199, 82, 69, 67, - 89, 67, 76, 69, 196, 82, 69, 67, 84, 73, 76, 73, 78, 69, 65, 210, 82, 69, - 67, 84, 65, 78, 71, 85, 76, 65, 210, 82, 69, 67, 84, 65, 78, 71, 76, 69, - 128, 82, 69, 67, 84, 65, 78, 71, 76, 197, 82, 69, 67, 82, 69, 65, 84, 73, - 79, 78, 65, 204, 82, 69, 67, 79, 82, 68, 73, 78, 199, 82, 69, 67, 79, 82, - 68, 69, 82, 128, 82, 69, 67, 79, 82, 196, 82, 69, 67, 69, 80, 84, 73, 86, - 197, 82, 69, 67, 69, 73, 86, 69, 82, 128, 82, 69, 65, 76, 71, 65, 82, 45, - 50, 128, 82, 69, 65, 76, 71, 65, 82, 128, 82, 69, 65, 72, 77, 85, 75, - 128, 82, 69, 65, 67, 72, 128, 82, 68, 207, 82, 68, 69, 204, 82, 66, 65, - 83, 193, 82, 65, 89, 83, 128, 82, 65, 89, 65, 78, 78, 65, 128, 82, 65, - 84, 73, 79, 128, 82, 65, 84, 72, 65, 128, 82, 65, 84, 72, 193, 82, 65, - 84, 65, 128, 82, 65, 84, 128, 82, 65, 83, 87, 65, 68, 73, 128, 82, 65, - 83, 79, 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 81, 128, 82, 65, 80, - 73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 65, 128, 82, 65, - 78, 128, 82, 65, 77, 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 75, 72, - 65, 78, 71, 128, 82, 65, 75, 65, 65, 82, 65, 65, 78, 83, 65, 89, 65, 128, - 82, 65, 73, 83, 73, 78, 199, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 66, - 79, 87, 128, 82, 65, 73, 76, 87, 65, 89, 128, 82, 65, 73, 76, 87, 65, - 217, 82, 65, 73, 76, 128, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, - 82, 65, 72, 77, 65, 84, 85, 76, 76, 65, 200, 82, 65, 72, 128, 82, 65, 70, - 69, 128, 82, 65, 69, 77, 128, 82, 65, 68, 73, 79, 65, 67, 84, 73, 86, - 197, 82, 65, 68, 73, 79, 128, 82, 65, 68, 73, 207, 82, 65, 68, 201, 82, - 65, 68, 128, 82, 65, 196, 82, 65, 67, 81, 85, 69, 212, 82, 65, 67, 73, - 78, 71, 128, 82, 65, 66, 66, 73, 84, 128, 82, 65, 66, 66, 73, 212, 82, - 65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 51, 128, 82, 65, 50, 128, 82, - 65, 45, 50, 128, 82, 48, 50, 57, 128, 82, 48, 50, 56, 128, 82, 48, 50, - 55, 128, 82, 48, 50, 54, 128, 82, 48, 50, 53, 128, 82, 48, 50, 52, 128, - 82, 48, 50, 51, 128, 82, 48, 50, 50, 128, 82, 48, 50, 49, 128, 82, 48, - 50, 48, 128, 82, 48, 49, 57, 128, 82, 48, 49, 56, 128, 82, 48, 49, 55, - 128, 82, 48, 49, 54, 65, 128, 82, 48, 49, 54, 128, 82, 48, 49, 53, 128, - 82, 48, 49, 52, 128, 82, 48, 49, 51, 128, 82, 48, 49, 50, 128, 82, 48, - 49, 49, 128, 82, 48, 49, 48, 65, 128, 82, 48, 49, 48, 128, 82, 48, 48, - 57, 128, 82, 48, 48, 56, 128, 82, 48, 48, 55, 128, 82, 48, 48, 54, 128, - 82, 48, 48, 53, 128, 82, 48, 48, 52, 128, 82, 48, 48, 51, 66, 128, 82, - 48, 48, 51, 65, 128, 82, 48, 48, 51, 128, 82, 48, 48, 50, 65, 128, 82, - 48, 48, 50, 128, 82, 48, 48, 49, 128, 82, 45, 67, 82, 69, 197, 81, 89, - 88, 128, 81, 89, 85, 128, 81, 89, 84, 128, 81, 89, 82, 88, 128, 81, 89, - 82, 128, 81, 89, 80, 128, 81, 89, 79, 128, 81, 89, 73, 128, 81, 89, 69, - 69, 128, 81, 89, 69, 128, 81, 89, 65, 65, 128, 81, 89, 65, 128, 81, 89, - 128, 81, 87, 73, 128, 81, 87, 69, 69, 128, 81, 87, 69, 128, 81, 87, 65, - 65, 128, 81, 87, 65, 128, 81, 85, 88, 128, 81, 85, 86, 128, 81, 85, 85, - 86, 128, 81, 85, 85, 128, 81, 85, 84, 128, 81, 85, 83, 72, 83, 72, 65, - 89, 65, 128, 81, 85, 82, 88, 128, 81, 85, 82, 128, 81, 85, 80, 128, 81, - 85, 79, 88, 128, 81, 85, 79, 84, 197, 81, 85, 79, 84, 65, 84, 73, 79, - 206, 81, 85, 79, 84, 128, 81, 85, 79, 80, 128, 81, 85, 79, 128, 81, 85, - 75, 128, 81, 85, 73, 78, 84, 69, 83, 83, 69, 78, 67, 69, 128, 81, 85, 73, - 78, 68, 73, 67, 69, 83, 73, 77, 193, 81, 85, 73, 78, 67, 85, 78, 88, 128, - 81, 85, 73, 78, 65, 82, 73, 85, 211, 81, 85, 73, 76, 76, 128, 81, 85, 73, - 67, 203, 81, 85, 73, 128, 81, 85, 70, 128, 81, 85, 69, 83, 84, 73, 79, - 78, 69, 196, 81, 85, 69, 83, 84, 73, 79, 78, 128, 81, 85, 69, 83, 84, 73, - 79, 206, 81, 85, 69, 69, 78, 128, 81, 85, 69, 69, 206, 81, 85, 69, 128, - 81, 85, 66, 85, 84, 83, 128, 81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, - 85, 65, 82, 84, 69, 82, 83, 128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, - 65, 82, 84, 69, 82, 128, 81, 85, 65, 82, 84, 69, 210, 81, 85, 65, 78, 84, - 73, 84, 217, 81, 85, 65, 68, 82, 85, 80, 76, 197, 81, 85, 65, 68, 82, 65, - 78, 84, 128, 81, 85, 65, 68, 82, 65, 78, 212, 81, 85, 65, 68, 128, 81, - 85, 65, 196, 81, 85, 65, 128, 81, 85, 128, 81, 208, 81, 79, 88, 128, 81, - 79, 84, 128, 81, 79, 80, 72, 128, 81, 79, 80, 65, 128, 81, 79, 80, 128, - 81, 79, 79, 128, 81, 79, 207, 81, 79, 70, 128, 81, 79, 198, 81, 79, 65, - 128, 81, 79, 128, 81, 78, 128, 81, 73, 88, 128, 81, 73, 84, 83, 65, 128, - 81, 73, 84, 128, 81, 73, 80, 128, 81, 73, 73, 128, 81, 73, 69, 88, 128, - 81, 73, 69, 84, 128, 81, 73, 69, 80, 128, 81, 73, 69, 128, 81, 73, 128, - 81, 72, 87, 73, 128, 81, 72, 87, 69, 69, 128, 81, 72, 87, 69, 128, 81, - 72, 87, 65, 65, 128, 81, 72, 87, 65, 128, 81, 72, 85, 128, 81, 72, 79, - 128, 81, 72, 73, 128, 81, 72, 69, 69, 128, 81, 72, 69, 128, 81, 72, 65, - 65, 128, 81, 72, 65, 128, 81, 71, 65, 128, 81, 69, 84, 65, 78, 65, 128, - 81, 69, 69, 128, 81, 69, 128, 81, 65, 85, 128, 81, 65, 84, 65, 78, 128, - 81, 65, 82, 78, 69, 217, 81, 65, 82, 128, 81, 65, 81, 128, 81, 65, 80, - 72, 128, 81, 65, 77, 65, 84, 83, 128, 81, 65, 77, 65, 84, 211, 81, 65, - 76, 193, 81, 65, 73, 82, 84, 72, 82, 65, 128, 81, 65, 73, 128, 81, 65, - 70, 128, 81, 65, 198, 81, 65, 68, 77, 65, 128, 81, 65, 65, 73, 128, 81, - 65, 65, 70, 85, 128, 81, 65, 65, 70, 128, 81, 48, 48, 55, 128, 81, 48, - 48, 54, 128, 81, 48, 48, 53, 128, 81, 48, 48, 52, 128, 81, 48, 48, 51, - 128, 81, 48, 48, 50, 128, 81, 48, 48, 49, 128, 80, 90, 128, 80, 89, 88, - 128, 80, 89, 84, 128, 80, 89, 82, 88, 128, 80, 89, 82, 128, 80, 89, 80, - 128, 80, 89, 128, 80, 87, 79, 89, 128, 80, 87, 79, 79, 128, 80, 87, 79, - 128, 80, 87, 207, 80, 87, 73, 73, 128, 80, 87, 73, 128, 80, 87, 69, 69, - 128, 80, 87, 69, 128, 80, 87, 65, 65, 128, 80, 87, 128, 80, 86, 128, 80, - 85, 88, 128, 80, 85, 85, 84, 128, 80, 85, 85, 128, 80, 85, 84, 82, 69, - 70, 65, 67, 84, 73, 79, 78, 128, 80, 85, 84, 128, 80, 85, 212, 80, 85, - 83, 72, 80, 73, 78, 128, 80, 85, 83, 72, 80, 73, 75, 65, 128, 80, 85, 83, - 72, 73, 78, 199, 80, 85, 82, 88, 128, 80, 85, 82, 83, 69, 128, 80, 85, - 82, 80, 76, 197, 80, 85, 82, 78, 65, 77, 65, 128, 80, 85, 82, 73, 84, 89, - 128, 80, 85, 82, 73, 70, 89, 128, 80, 85, 82, 128, 80, 85, 81, 128, 80, - 85, 80, 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 128, - 80, 85, 78, 71, 65, 65, 77, 128, 80, 85, 78, 71, 128, 80, 85, 78, 67, 84, - 85, 65, 84, 73, 79, 78, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 206, - 80, 85, 77, 80, 128, 80, 85, 77, 128, 80, 85, 69, 128, 80, 85, 66, 76, - 73, 195, 80, 85, 65, 81, 128, 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, - 85, 49, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, 128, 80, - 83, 73, 76, 201, 80, 83, 73, 70, 73, 83, 84, 79, 83, 89, 78, 65, 71, 77, - 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 80, 65, 82, 65, 75, 65, 76, 69, - 83, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 206, 80, 83, 73, 70, 73, - 83, 84, 79, 76, 89, 71, 73, 83, 77, 65, 128, 80, 83, 73, 128, 80, 83, - 128, 80, 82, 79, 86, 69, 128, 80, 82, 79, 84, 79, 86, 65, 82, 89, 211, - 80, 82, 79, 84, 79, 211, 80, 82, 79, 84, 69, 67, 84, 69, 196, 80, 82, 79, - 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 80, 82, 79, 80, 79, 82, - 84, 73, 79, 78, 65, 204, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 128, 80, - 82, 79, 80, 69, 82, 84, 217, 80, 82, 79, 80, 69, 76, 76, 69, 210, 80, 82, - 79, 79, 70, 128, 80, 82, 79, 76, 79, 78, 71, 69, 196, 80, 82, 79, 76, 65, - 84, 73, 79, 78, 197, 80, 82, 79, 74, 69, 67, 84, 73, 86, 69, 128, 80, 82, - 79, 74, 69, 67, 84, 73, 79, 78, 128, 80, 82, 79, 71, 82, 69, 83, 83, 128, - 80, 82, 79, 71, 82, 65, 205, 80, 82, 79, 70, 79, 85, 78, 68, 128, 80, 82, - 79, 68, 85, 67, 84, 128, 80, 82, 79, 68, 85, 67, 212, 80, 82, 73, 86, 65, - 84, 69, 128, 80, 82, 73, 86, 65, 84, 197, 80, 82, 73, 86, 65, 67, 217, - 80, 82, 73, 83, 72, 84, 72, 65, 77, 65, 84, 82, 193, 80, 82, 73, 78, 84, - 83, 128, 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 78, - 67, 69, 83, 83, 128, 80, 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, - 82, 69, 86, 73, 79, 85, 211, 80, 82, 69, 83, 69, 84, 128, 80, 82, 69, 83, - 69, 78, 84, 65, 84, 73, 79, 206, 80, 82, 69, 83, 67, 82, 73, 80, 84, 73, - 79, 206, 80, 82, 69, 80, 79, 78, 68, 69, 82, 65, 78, 67, 69, 128, 80, 82, - 69, 78, 75, 72, 65, 128, 80, 82, 69, 70, 65, 67, 197, 80, 82, 69, 67, 73, - 80, 73, 84, 65, 84, 69, 128, 80, 82, 69, 67, 69, 68, 73, 78, 199, 80, 82, - 69, 67, 69, 68, 69, 83, 128, 80, 82, 69, 67, 69, 68, 69, 211, 80, 82, 69, - 67, 69, 68, 69, 196, 80, 82, 69, 67, 69, 68, 69, 128, 80, 82, 69, 67, 69, - 68, 197, 80, 82, 65, 77, 45, 80, 73, 73, 128, 80, 82, 65, 77, 45, 80, 73, - 201, 80, 82, 65, 77, 45, 77, 85, 79, 89, 128, 80, 82, 65, 77, 45, 77, 85, - 79, 217, 80, 82, 65, 77, 45, 66, 85, 79, 78, 128, 80, 82, 65, 77, 45, 66, - 85, 79, 206, 80, 82, 65, 77, 45, 66, 69, 73, 128, 80, 82, 65, 77, 45, 66, - 69, 201, 80, 82, 65, 77, 128, 80, 82, 65, 205, 80, 82, 128, 80, 80, 86, - 128, 80, 80, 77, 128, 80, 80, 65, 128, 80, 79, 89, 128, 80, 79, 88, 128, - 80, 79, 87, 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 87, 68, 69, 82, - 69, 196, 80, 79, 87, 68, 69, 82, 128, 80, 79, 85, 78, 196, 80, 79, 85, - 76, 84, 82, 217, 80, 79, 85, 67, 72, 128, 80, 79, 84, 65, 84, 79, 128, - 80, 79, 84, 65, 66, 76, 197, 80, 79, 212, 80, 79, 83, 84, 80, 79, 83, 73, - 84, 73, 79, 206, 80, 79, 83, 84, 66, 79, 88, 128, 80, 79, 83, 84, 65, - 204, 80, 79, 83, 84, 128, 80, 79, 83, 212, 80, 79, 83, 83, 69, 83, 83, - 73, 79, 78, 128, 80, 79, 82, 82, 69, 67, 84, 85, 83, 128, 80, 79, 82, 82, - 69, 67, 84, 85, 211, 80, 79, 80, 80, 69, 82, 128, 80, 79, 80, 128, 80, - 79, 208, 80, 79, 79, 68, 76, 69, 128, 80, 79, 79, 128, 80, 79, 78, 68, - 79, 128, 80, 79, 206, 80, 79, 77, 77, 69, 69, 128, 80, 79, 77, 77, 69, - 197, 80, 79, 76, 73, 83, 72, 128, 80, 79, 76, 73, 67, 197, 80, 79, 76, - 201, 80, 79, 76, 69, 128, 80, 79, 76, 197, 80, 79, 75, 82, 89, 84, 73, - 69, 128, 80, 79, 75, 79, 74, 73, 128, 80, 79, 73, 78, 84, 211, 80, 79, - 73, 78, 84, 79, 128, 80, 79, 73, 78, 84, 69, 82, 128, 80, 79, 73, 78, 84, - 69, 196, 80, 79, 73, 78, 84, 128, 80, 79, 73, 78, 212, 80, 79, 69, 84, - 82, 217, 80, 79, 69, 84, 73, 195, 80, 79, 68, 65, 84, 85, 83, 128, 80, - 79, 65, 128, 80, 79, 128, 80, 207, 80, 78, 69, 85, 77, 65, 84, 65, 128, - 80, 76, 85, 84, 79, 128, 80, 76, 85, 83, 45, 77, 73, 78, 85, 211, 80, 76, - 85, 83, 128, 80, 76, 85, 82, 65, 76, 128, 80, 76, 85, 77, 69, 196, 80, - 76, 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, 85, 71, 128, 80, 76, 85, - 128, 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, 80, 76, 69, 84, - 72, 82, 79, 78, 128, 80, 76, 68, 128, 80, 76, 65, 89, 73, 78, 199, 80, - 76, 65, 83, 84, 73, 67, 83, 128, 80, 76, 65, 78, 69, 128, 80, 76, 65, 78, - 197, 80, 76, 65, 78, 67, 203, 80, 76, 65, 75, 128, 80, 76, 65, 71, 73, - 79, 211, 80, 76, 65, 67, 69, 72, 79, 76, 68, 69, 210, 80, 76, 65, 67, - 197, 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, 128, 80, 73, - 90, 90, 65, 128, 80, 73, 88, 128, 80, 73, 87, 82, 128, 80, 73, 84, 67, - 72, 70, 79, 82, 75, 128, 80, 73, 84, 67, 72, 70, 79, 82, 203, 80, 73, 84, - 128, 80, 73, 83, 84, 79, 76, 128, 80, 73, 83, 69, 76, 69, 72, 128, 80, - 73, 83, 67, 69, 83, 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, 73, 199, - 80, 73, 82, 73, 69, 69, 78, 128, 80, 73, 80, 73, 78, 71, 128, 80, 73, 80, - 65, 69, 77, 71, 66, 73, 69, 69, 128, 80, 73, 80, 65, 69, 77, 66, 65, 128, - 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 204, 80, 73, 78, 69, 65, 80, - 80, 76, 69, 128, 80, 73, 78, 197, 80, 73, 78, 65, 82, 66, 79, 82, 65, 83, - 128, 80, 73, 76, 76, 128, 80, 73, 76, 197, 80, 73, 76, 67, 82, 79, 215, - 80, 73, 75, 85, 82, 85, 128, 80, 73, 75, 79, 128, 80, 73, 71, 128, 80, - 73, 199, 80, 73, 69, 88, 128, 80, 73, 69, 85, 80, 45, 84, 72, 73, 69, 85, - 84, 72, 128, 80, 73, 69, 85, 80, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, - 128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, - 128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, - 72, 128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, - 128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, - 128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, - 80, 73, 69, 85, 80, 45, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 80, - 72, 128, 80, 73, 69, 85, 80, 45, 82, 73, 69, 85, 76, 128, 80, 73, 69, 85, - 80, 45, 78, 73, 69, 85, 78, 128, 80, 73, 69, 85, 80, 45, 77, 73, 69, 85, - 77, 128, 80, 73, 69, 85, 80, 45, 75, 72, 73, 69, 85, 75, 72, 128, 80, 73, - 69, 85, 80, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 67, 72, - 73, 69, 85, 67, 72, 128, 80, 73, 69, 85, 208, 80, 73, 69, 84, 128, 80, - 73, 69, 80, 128, 80, 73, 69, 69, 84, 128, 80, 73, 69, 69, 81, 128, 80, - 73, 69, 67, 69, 128, 80, 73, 69, 128, 80, 73, 67, 75, 69, 84, 128, 80, - 73, 67, 75, 128, 80, 73, 65, 83, 85, 84, 79, 82, 85, 128, 80, 73, 65, 83, - 77, 193, 80, 73, 65, 78, 79, 128, 80, 201, 80, 72, 87, 65, 128, 80, 72, - 85, 84, 72, 65, 79, 128, 80, 72, 85, 210, 80, 72, 85, 78, 71, 128, 80, - 72, 82, 65, 83, 69, 128, 80, 72, 79, 78, 69, 83, 128, 80, 72, 79, 69, 78, - 73, 67, 73, 65, 206, 80, 72, 79, 65, 128, 80, 72, 79, 128, 80, 72, 207, - 80, 72, 78, 65, 69, 203, 80, 72, 73, 78, 84, 72, 85, 128, 80, 72, 73, 76, - 79, 83, 79, 80, 72, 69, 82, 211, 80, 72, 73, 76, 73, 80, 80, 73, 78, 197, - 80, 72, 73, 69, 85, 80, 72, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 72, - 73, 69, 85, 80, 72, 45, 83, 73, 79, 83, 128, 80, 72, 73, 69, 85, 80, 72, - 45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, 85, 80, 72, 45, 72, 73, 69, - 85, 72, 128, 80, 72, 73, 69, 85, 80, 200, 80, 72, 73, 128, 80, 72, 201, - 80, 72, 69, 69, 128, 80, 72, 69, 128, 80, 72, 65, 83, 69, 45, 198, 80, - 72, 65, 83, 69, 45, 194, 80, 72, 65, 82, 89, 78, 71, 69, 65, 204, 80, 72, - 65, 82, 128, 80, 72, 65, 78, 128, 80, 72, 65, 77, 128, 80, 72, 65, 73, - 83, 84, 79, 211, 80, 72, 65, 71, 83, 45, 80, 193, 80, 72, 65, 65, 82, 75, - 65, 65, 128, 80, 72, 65, 65, 128, 80, 72, 65, 128, 80, 71, 128, 80, 70, - 128, 80, 69, 85, 88, 128, 80, 69, 85, 84, 65, 69, 128, 80, 69, 85, 84, - 128, 80, 69, 84, 65, 83, 84, 79, 75, 79, 85, 70, 73, 83, 77, 65, 128, 80, - 69, 84, 65, 83, 84, 73, 128, 80, 69, 84, 65, 83, 77, 65, 128, 80, 69, 84, - 65, 76, 76, 69, 196, 80, 69, 83, 79, 128, 80, 69, 83, 207, 80, 69, 83, - 72, 50, 128, 80, 69, 83, 69, 84, 193, 80, 69, 211, 80, 69, 82, 84, 72, - 207, 80, 69, 82, 83, 80, 69, 67, 84, 73, 86, 69, 128, 80, 69, 82, 83, 79, - 78, 65, 204, 80, 69, 82, 83, 79, 78, 128, 80, 69, 82, 83, 79, 206, 80, - 69, 82, 83, 73, 65, 206, 80, 69, 82, 83, 69, 86, 69, 82, 73, 78, 199, 80, - 69, 82, 80, 69, 78, 68, 73, 67, 85, 76, 65, 82, 128, 80, 69, 82, 80, 69, - 78, 68, 73, 67, 85, 76, 65, 210, 80, 69, 82, 77, 73, 84, 84, 69, 196, 80, - 69, 82, 77, 65, 78, 69, 78, 212, 80, 69, 82, 73, 83, 80, 79, 77, 69, 78, - 73, 128, 80, 69, 82, 73, 83, 80, 79, 77, 69, 78, 201, 80, 69, 82, 70, 79, - 82, 77, 73, 78, 199, 80, 69, 82, 70, 69, 67, 84, 85, 205, 80, 69, 82, 70, - 69, 67, 84, 65, 128, 80, 69, 82, 70, 69, 67, 84, 193, 80, 69, 82, 67, 85, - 83, 83, 73, 86, 69, 128, 80, 69, 82, 67, 69, 78, 212, 80, 69, 80, 69, 84, - 128, 80, 69, 80, 69, 212, 80, 69, 79, 82, 84, 200, 80, 69, 79, 80, 76, - 69, 128, 80, 69, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, 84, 65, 71, - 82, 65, 77, 128, 80, 69, 78, 84, 65, 71, 79, 78, 128, 80, 69, 78, 83, 85, - 128, 80, 69, 78, 83, 73, 86, 197, 80, 69, 78, 78, 217, 80, 69, 78, 73, - 72, 73, 128, 80, 69, 78, 71, 85, 73, 78, 128, 80, 69, 78, 71, 75, 65, 76, - 128, 80, 69, 78, 69, 84, 82, 65, 84, 73, 79, 78, 128, 80, 69, 78, 67, 73, - 76, 128, 80, 69, 76, 65, 83, 84, 79, 78, 128, 80, 69, 76, 65, 83, 84, 79, - 206, 80, 69, 73, 84, 72, 128, 80, 69, 72, 69, 72, 128, 80, 69, 72, 69, - 200, 80, 69, 72, 128, 80, 69, 200, 80, 69, 69, 90, 73, 128, 80, 69, 69, - 83, 72, 73, 128, 80, 69, 69, 80, 128, 80, 69, 69, 77, 128, 80, 69, 69, - 128, 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 83, 128, 80, 69, 68, 69, 83, - 84, 82, 73, 65, 78, 128, 80, 69, 68, 69, 83, 84, 65, 76, 128, 80, 69, 68, - 69, 83, 84, 65, 204, 80, 69, 68, 65, 204, 80, 69, 65, 67, 72, 128, 80, - 69, 65, 67, 69, 128, 80, 69, 65, 67, 197, 80, 68, 73, 128, 80, 68, 70, - 128, 80, 68, 128, 80, 67, 128, 80, 65, 90, 69, 82, 128, 80, 65, 89, 69, - 82, 79, 75, 128, 80, 65, 89, 65, 78, 78, 65, 128, 80, 65, 89, 128, 80, - 65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 215, 80, 65, 86, 73, 89, 65, - 78, 73, 128, 80, 65, 85, 128, 80, 65, 84, 84, 69, 82, 78, 128, 80, 65, - 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, 200, 80, 65, 84, 65, 75, - 128, 80, 65, 84, 65, 72, 128, 80, 65, 84, 128, 80, 65, 83, 85, 81, 128, - 80, 65, 83, 83, 80, 79, 82, 212, 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, - 76, 76, 45, 85, 80, 45, 79, 85, 84, 80, 85, 212, 80, 65, 83, 83, 73, 86, - 69, 45, 80, 85, 76, 76, 45, 68, 79, 87, 78, 45, 79, 85, 84, 80, 85, 212, - 80, 65, 83, 72, 84, 65, 128, 80, 65, 83, 72, 65, 69, 128, 80, 65, 83, 69, - 81, 128, 80, 65, 83, 65, 78, 71, 65, 206, 80, 65, 82, 85, 77, 128, 80, - 65, 82, 84, 217, 80, 65, 82, 84, 78, 69, 82, 83, 72, 73, 208, 80, 65, 82, - 84, 73, 65, 76, 76, 89, 45, 82, 69, 67, 89, 67, 76, 69, 196, 80, 65, 82, - 84, 73, 65, 204, 80, 65, 82, 84, 72, 73, 65, 206, 80, 65, 82, 212, 80, - 65, 82, 73, 67, 72, 79, 78, 128, 80, 65, 82, 69, 83, 84, 73, 71, 77, 69, - 78, 79, 206, 80, 65, 82, 69, 82, 69, 78, 128, 80, 65, 82, 69, 78, 84, 72, - 69, 83, 73, 83, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 211, 80, 65, - 82, 65, 80, 72, 82, 65, 83, 197, 80, 65, 82, 65, 76, 76, 69, 76, 79, 71, - 82, 65, 77, 128, 80, 65, 82, 65, 76, 76, 69, 76, 128, 80, 65, 82, 65, 76, - 76, 69, 204, 80, 65, 82, 65, 75, 76, 73, 84, 73, 75, 73, 128, 80, 65, 82, - 65, 75, 76, 73, 84, 73, 75, 201, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, - 193, 80, 65, 82, 65, 71, 82, 65, 80, 72, 79, 83, 128, 80, 65, 82, 65, 71, - 82, 65, 80, 72, 128, 80, 65, 82, 65, 71, 82, 65, 80, 200, 80, 65, 82, 65, - 128, 80, 65, 82, 128, 80, 65, 80, 89, 82, 85, 83, 128, 80, 65, 80, 69, - 82, 67, 76, 73, 80, 128, 80, 65, 80, 69, 210, 80, 65, 80, 128, 80, 65, - 208, 80, 65, 207, 80, 65, 78, 89, 85, 75, 85, 128, 80, 65, 78, 89, 73, - 75, 85, 128, 80, 65, 78, 89, 69, 67, 69, 75, 128, 80, 65, 78, 89, 65, 78, - 71, 71, 65, 128, 80, 65, 78, 89, 65, 75, 82, 65, 128, 80, 65, 78, 84, 73, - 128, 80, 65, 78, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, 65, 78, - 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, - 128, 80, 65, 78, 79, 78, 71, 79, 78, 65, 78, 128, 80, 65, 78, 79, 76, 79, - 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128, 80, 65, 78, 71, 82, - 65, 78, 71, 75, 69, 80, 128, 80, 65, 78, 71, 79, 76, 65, 84, 128, 80, 65, - 78, 71, 76, 79, 78, 71, 128, 80, 65, 78, 71, 76, 65, 89, 65, 82, 128, 80, - 65, 78, 71, 75, 79, 78, 128, 80, 65, 78, 71, 75, 65, 84, 128, 80, 65, 78, - 71, 72, 85, 76, 85, 128, 80, 65, 78, 71, 128, 80, 65, 78, 69, 85, 76, 69, - 85, 78, 71, 128, 80, 65, 78, 68, 193, 80, 65, 78, 65, 69, 76, 65, 69, 78, - 71, 128, 80, 65, 78, 128, 80, 65, 77, 85, 78, 71, 75, 65, 72, 128, 80, - 65, 77, 85, 68, 80, 79, 68, 128, 80, 65, 77, 83, 72, 65, 69, 128, 80, 65, - 77, 80, 72, 89, 76, 73, 65, 206, 80, 65, 77, 73, 78, 71, 75, 65, 76, 128, - 80, 65, 77, 69, 80, 69, 84, 128, 80, 65, 77, 69, 78, 69, 78, 71, 128, 80, - 65, 77, 65, 68, 65, 128, 80, 65, 77, 65, 65, 69, 72, 128, 80, 65, 76, 85, - 84, 65, 128, 80, 65, 76, 79, 67, 72, 75, 65, 128, 80, 65, 76, 205, 80, - 65, 76, 76, 65, 87, 65, 128, 80, 65, 76, 76, 65, 83, 128, 80, 65, 76, 69, - 84, 84, 69, 128, 80, 65, 76, 65, 85, 78, 199, 80, 65, 76, 65, 84, 65, 76, - 73, 90, 69, 196, 80, 65, 76, 65, 84, 65, 76, 73, 90, 65, 84, 73, 79, 78, - 128, 80, 65, 76, 65, 84, 65, 204, 80, 65, 75, 80, 65, 203, 80, 65, 73, - 89, 65, 78, 78, 79, 73, 128, 80, 65, 73, 82, 84, 72, 82, 65, 128, 80, 65, - 73, 82, 69, 196, 80, 65, 73, 128, 80, 65, 72, 76, 65, 86, 201, 80, 65, - 72, 128, 80, 65, 71, 69, 82, 128, 80, 65, 71, 197, 80, 65, 68, 77, 193, - 80, 65, 68, 68, 73, 78, 199, 80, 65, 68, 193, 80, 65, 68, 128, 80, 65, - 67, 75, 73, 78, 71, 128, 80, 65, 67, 75, 65, 71, 69, 128, 80, 65, 65, 84, - 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 128, 80, 65, 65, 82, 65, 69, - 128, 80, 65, 65, 77, 128, 80, 65, 65, 73, 128, 80, 65, 65, 45, 80, 73, - 76, 76, 65, 128, 80, 65, 65, 128, 80, 50, 128, 80, 48, 49, 49, 128, 80, - 48, 49, 48, 128, 80, 48, 48, 57, 128, 80, 48, 48, 56, 128, 80, 48, 48, - 55, 128, 80, 48, 48, 54, 128, 80, 48, 48, 53, 128, 80, 48, 48, 52, 128, - 80, 48, 48, 51, 65, 128, 80, 48, 48, 51, 128, 80, 48, 48, 50, 128, 80, - 48, 48, 49, 65, 128, 80, 48, 48, 49, 128, 79, 89, 82, 65, 78, 73, 83, 77, - 193, 79, 89, 65, 78, 78, 65, 128, 79, 88, 73, 65, 128, 79, 88, 73, 193, - 79, 88, 69, 73, 65, 201, 79, 88, 69, 73, 193, 79, 86, 69, 82, 82, 73, 68, - 69, 128, 79, 86, 69, 82, 76, 79, 78, 199, 79, 86, 69, 82, 76, 73, 78, 69, + 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 82, 73, 71, 72, 84, 45, 76, 73, + 71, 72, 84, 69, 196, 82, 73, 71, 72, 84, 45, 72, 65, 78, 68, 69, 196, 82, + 73, 71, 72, 84, 45, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 70, 65, 67, + 73, 78, 199, 82, 73, 71, 72, 84, 128, 82, 73, 69, 85, 76, 45, 89, 69, 83, + 73, 69, 85, 78, 71, 128, 82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, + 72, 73, 69, 85, 72, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, + 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, + 84, 73, 75, 69, 85, 84, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, + 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 84, 72, 73, 69, + 85, 84, 72, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 84, 73, 75, + 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 83, 73, 79, + 83, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, + 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, + 128, 82, 73, 69, 85, 76, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, + 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, + 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, + 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, + 76, 45, 80, 73, 69, 85, 80, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, + 76, 45, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, + 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 65, 78, 83, 73, 79, 83, 128, + 82, 73, 69, 85, 76, 45, 78, 73, 69, 85, 78, 128, 82, 73, 69, 85, 76, 45, + 77, 73, 69, 85, 77, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 77, + 73, 69, 85, 77, 45, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, + 77, 73, 69, 85, 77, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, + 77, 73, 69, 85, 77, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, + 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, + 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, + 75, 128, 82, 73, 69, 85, 76, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, + 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 72, 73, 69, 85, 72, 128, 82, 73, + 69, 85, 76, 45, 67, 73, 69, 85, 67, 128, 82, 73, 69, 85, 204, 82, 73, 69, + 76, 128, 82, 73, 69, 69, 128, 82, 73, 67, 69, 77, 128, 82, 73, 67, 69, + 128, 82, 73, 67, 197, 82, 73, 66, 66, 79, 78, 128, 82, 73, 66, 66, 79, + 206, 82, 73, 65, 204, 82, 72, 79, 84, 73, 195, 82, 72, 79, 128, 82, 72, + 207, 82, 72, 65, 128, 82, 72, 128, 82, 71, 89, 73, 78, 71, 83, 128, 82, + 71, 89, 65, 78, 128, 82, 71, 89, 193, 82, 69, 86, 79, 76, 86, 73, 78, + 199, 82, 69, 86, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 86, 77, 65, + 128, 82, 69, 86, 73, 65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 45, 83, 67, + 72, 87, 65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 128, 82, 69, 86, 69, 82, + 83, 69, 196, 82, 69, 86, 69, 82, 83, 197, 82, 69, 85, 88, 128, 82, 69, + 85, 128, 82, 69, 84, 85, 82, 78, 128, 82, 69, 84, 85, 82, 206, 82, 69, + 84, 82, 79, 70, 76, 69, 216, 82, 69, 84, 82, 69, 65, 84, 128, 82, 69, 84, + 79, 82, 84, 128, 82, 69, 83, 85, 80, 73, 78, 85, 83, 128, 82, 69, 83, 84, + 82, 79, 79, 77, 128, 82, 69, 83, 84, 82, 73, 67, 84, 69, 196, 82, 69, 83, + 84, 128, 82, 69, 83, 80, 79, 78, 83, 69, 128, 82, 69, 83, 79, 85, 82, 67, + 69, 128, 82, 69, 83, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 83, 73, 83, + 84, 65, 78, 67, 69, 128, 82, 69, 83, 73, 68, 69, 78, 67, 69, 128, 82, 69, + 83, 200, 82, 69, 82, 69, 78, 71, 71, 65, 78, 128, 82, 69, 82, 69, 75, 65, + 78, 128, 82, 69, 80, 82, 69, 83, 69, 78, 84, 128, 82, 69, 80, 76, 65, 67, + 69, 77, 69, 78, 212, 82, 69, 80, 72, 128, 82, 69, 80, 69, 84, 73, 84, 73, + 79, 206, 82, 69, 80, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, 128, + 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 89, 65, 128, 82, 69, 80, 65, + 128, 82, 69, 80, 193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78, + 128, 82, 69, 206, 82, 69, 77, 85, 128, 82, 69, 77, 73, 78, 68, 69, 210, + 82, 69, 77, 69, 68, 89, 128, 82, 69, 76, 73, 71, 73, 79, 78, 128, 82, 69, + 76, 73, 69, 86, 69, 196, 82, 69, 76, 69, 65, 83, 69, 128, 82, 69, 76, 65, + 84, 73, 79, 78, 65, 204, 82, 69, 76, 65, 84, 73, 79, 78, 128, 82, 69, 76, + 65, 65, 128, 82, 69, 74, 65, 78, 199, 82, 69, 73, 196, 82, 69, 73, 128, + 82, 69, 71, 85, 76, 85, 83, 45, 52, 128, 82, 69, 71, 85, 76, 85, 83, 45, + 51, 128, 82, 69, 71, 85, 76, 85, 83, 45, 50, 128, 82, 69, 71, 85, 76, 85, + 83, 128, 82, 69, 71, 85, 76, 85, 211, 82, 69, 71, 73, 83, 84, 69, 82, 69, + 196, 82, 69, 71, 73, 79, 78, 65, 204, 82, 69, 71, 73, 65, 45, 50, 128, + 82, 69, 71, 73, 65, 128, 82, 69, 70, 79, 82, 77, 69, 196, 82, 69, 70, 69, + 82, 69, 78, 67, 197, 82, 69, 68, 85, 80, 76, 73, 67, 65, 84, 73, 79, 78, + 128, 82, 69, 67, 89, 67, 76, 73, 78, 199, 82, 69, 67, 89, 67, 76, 69, + 196, 82, 69, 67, 84, 73, 76, 73, 78, 69, 65, 210, 82, 69, 67, 84, 65, 78, + 71, 85, 76, 65, 210, 82, 69, 67, 84, 65, 78, 71, 76, 69, 128, 82, 69, 67, + 84, 65, 78, 71, 76, 197, 82, 69, 67, 82, 69, 65, 84, 73, 79, 78, 65, 204, + 82, 69, 67, 79, 82, 68, 73, 78, 199, 82, 69, 67, 79, 82, 68, 69, 82, 128, + 82, 69, 67, 79, 82, 68, 128, 82, 69, 67, 79, 82, 196, 82, 69, 67, 69, 80, + 84, 73, 86, 197, 82, 69, 67, 69, 73, 86, 69, 82, 128, 82, 69, 67, 69, 73, + 86, 69, 210, 82, 69, 65, 76, 71, 65, 82, 45, 50, 128, 82, 69, 65, 76, 71, + 65, 82, 128, 82, 69, 65, 72, 77, 85, 75, 128, 82, 69, 65, 67, 72, 128, + 82, 68, 207, 82, 68, 69, 204, 82, 66, 65, 83, 193, 82, 65, 89, 83, 128, + 82, 65, 89, 211, 82, 65, 89, 65, 78, 78, 65, 128, 82, 65, 84, 73, 79, + 128, 82, 65, 84, 72, 65, 128, 82, 65, 84, 72, 193, 82, 65, 84, 65, 128, + 82, 65, 84, 128, 82, 65, 83, 87, 65, 68, 73, 128, 82, 65, 83, 79, 85, + 204, 82, 65, 83, 72, 65, 128, 82, 65, 81, 128, 82, 65, 80, 73, 83, 77, + 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 65, 128, 82, 65, 78, 128, 82, + 65, 77, 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 75, 72, 65, 78, 71, + 128, 82, 65, 75, 65, 65, 82, 65, 65, 78, 83, 65, 89, 65, 128, 82, 65, 73, + 83, 73, 78, 199, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 66, 79, 87, + 128, 82, 65, 73, 76, 87, 65, 89, 128, 82, 65, 73, 76, 87, 65, 217, 82, + 65, 73, 76, 128, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, + 72, 77, 65, 84, 85, 76, 76, 65, 200, 82, 65, 72, 128, 82, 65, 70, 69, + 128, 82, 65, 69, 77, 128, 82, 65, 68, 73, 79, 65, 67, 84, 73, 86, 197, + 82, 65, 68, 73, 79, 128, 82, 65, 68, 73, 207, 82, 65, 68, 201, 82, 65, + 68, 128, 82, 65, 196, 82, 65, 67, 81, 85, 69, 212, 82, 65, 67, 73, 78, + 71, 128, 82, 65, 67, 73, 78, 199, 82, 65, 66, 66, 73, 84, 128, 82, 65, + 66, 66, 73, 212, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 51, 128, + 82, 65, 50, 128, 82, 65, 45, 50, 128, 82, 48, 50, 57, 128, 82, 48, 50, + 56, 128, 82, 48, 50, 55, 128, 82, 48, 50, 54, 128, 82, 48, 50, 53, 128, + 82, 48, 50, 52, 128, 82, 48, 50, 51, 128, 82, 48, 50, 50, 128, 82, 48, + 50, 49, 128, 82, 48, 50, 48, 128, 82, 48, 49, 57, 128, 82, 48, 49, 56, + 128, 82, 48, 49, 55, 128, 82, 48, 49, 54, 65, 128, 82, 48, 49, 54, 128, + 82, 48, 49, 53, 128, 82, 48, 49, 52, 128, 82, 48, 49, 51, 128, 82, 48, + 49, 50, 128, 82, 48, 49, 49, 128, 82, 48, 49, 48, 65, 128, 82, 48, 49, + 48, 128, 82, 48, 48, 57, 128, 82, 48, 48, 56, 128, 82, 48, 48, 55, 128, + 82, 48, 48, 54, 128, 82, 48, 48, 53, 128, 82, 48, 48, 52, 128, 82, 48, + 48, 51, 66, 128, 82, 48, 48, 51, 65, 128, 82, 48, 48, 51, 128, 82, 48, + 48, 50, 65, 128, 82, 48, 48, 50, 128, 82, 48, 48, 49, 128, 82, 45, 67, + 82, 69, 197, 81, 89, 88, 128, 81, 89, 85, 128, 81, 89, 84, 128, 81, 89, + 82, 88, 128, 81, 89, 82, 128, 81, 89, 80, 128, 81, 89, 79, 128, 81, 89, + 73, 128, 81, 89, 69, 69, 128, 81, 89, 69, 128, 81, 89, 65, 65, 128, 81, + 89, 65, 128, 81, 89, 128, 81, 87, 73, 128, 81, 87, 69, 69, 128, 81, 87, + 69, 128, 81, 87, 65, 65, 128, 81, 87, 65, 128, 81, 85, 88, 128, 81, 85, + 86, 128, 81, 85, 85, 86, 128, 81, 85, 85, 128, 81, 85, 84, 128, 81, 85, + 83, 72, 83, 72, 65, 89, 65, 128, 81, 85, 82, 88, 128, 81, 85, 82, 128, + 81, 85, 80, 128, 81, 85, 79, 88, 128, 81, 85, 79, 84, 197, 81, 85, 79, + 84, 65, 84, 73, 79, 206, 81, 85, 79, 84, 128, 81, 85, 79, 80, 128, 81, + 85, 79, 128, 81, 85, 75, 128, 81, 85, 73, 78, 84, 69, 83, 83, 69, 78, 67, + 69, 128, 81, 85, 73, 78, 68, 73, 67, 69, 83, 73, 77, 193, 81, 85, 73, 78, + 67, 85, 78, 88, 128, 81, 85, 73, 78, 65, 82, 73, 85, 211, 81, 85, 73, 76, + 212, 81, 85, 73, 76, 76, 128, 81, 85, 73, 67, 203, 81, 85, 73, 128, 81, + 85, 70, 128, 81, 85, 69, 83, 84, 73, 79, 78, 69, 196, 81, 85, 69, 83, 84, + 73, 79, 78, 128, 81, 85, 69, 83, 84, 73, 79, 206, 81, 85, 69, 69, 78, + 128, 81, 85, 69, 69, 206, 81, 85, 69, 128, 81, 85, 66, 85, 84, 83, 128, + 81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, 85, 65, 82, 84, 69, 82, 83, + 128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, 65, 82, 84, 69, 82, 128, + 81, 85, 65, 82, 84, 69, 210, 81, 85, 65, 78, 84, 73, 84, 217, 81, 85, 65, + 68, 82, 85, 80, 76, 197, 81, 85, 65, 68, 82, 65, 78, 84, 128, 81, 85, 65, + 68, 82, 65, 78, 212, 81, 85, 65, 68, 67, 79, 76, 79, 78, 128, 81, 85, 65, + 68, 128, 81, 85, 65, 196, 81, 85, 65, 128, 81, 85, 128, 81, 208, 81, 79, + 88, 128, 81, 79, 84, 128, 81, 79, 80, 72, 128, 81, 79, 80, 65, 128, 81, + 79, 80, 128, 81, 79, 79, 128, 81, 79, 207, 81, 79, 70, 128, 81, 79, 198, + 81, 79, 65, 128, 81, 79, 128, 81, 78, 128, 81, 73, 88, 128, 81, 73, 84, + 83, 65, 128, 81, 73, 84, 128, 81, 73, 80, 128, 81, 73, 73, 128, 81, 73, + 69, 88, 128, 81, 73, 69, 84, 128, 81, 73, 69, 80, 128, 81, 73, 69, 128, + 81, 73, 128, 81, 72, 87, 73, 128, 81, 72, 87, 69, 69, 128, 81, 72, 87, + 69, 128, 81, 72, 87, 65, 65, 128, 81, 72, 87, 65, 128, 81, 72, 85, 128, + 81, 72, 79, 80, 72, 128, 81, 72, 79, 128, 81, 72, 73, 128, 81, 72, 69, + 69, 128, 81, 72, 69, 128, 81, 72, 65, 85, 128, 81, 72, 65, 65, 128, 81, + 72, 65, 128, 81, 71, 65, 128, 81, 69, 84, 65, 78, 65, 128, 81, 69, 69, + 128, 81, 69, 128, 81, 65, 89, 128, 81, 65, 85, 128, 81, 65, 84, 65, 78, + 128, 81, 65, 82, 78, 69, 217, 81, 65, 82, 128, 81, 65, 81, 128, 81, 65, + 80, 72, 128, 81, 65, 77, 65, 84, 83, 128, 81, 65, 77, 65, 84, 211, 81, + 65, 76, 193, 81, 65, 73, 82, 84, 72, 82, 65, 128, 81, 65, 73, 128, 81, + 65, 70, 128, 81, 65, 198, 81, 65, 68, 77, 65, 128, 81, 65, 65, 73, 128, + 81, 65, 65, 70, 85, 128, 81, 65, 65, 70, 128, 81, 48, 48, 55, 128, 81, + 48, 48, 54, 128, 81, 48, 48, 53, 128, 81, 48, 48, 52, 128, 81, 48, 48, + 51, 128, 81, 48, 48, 50, 128, 81, 48, 48, 49, 128, 80, 90, 128, 80, 89, + 88, 128, 80, 89, 84, 128, 80, 89, 82, 88, 128, 80, 89, 82, 128, 80, 89, + 80, 128, 80, 87, 79, 89, 128, 80, 87, 79, 79, 128, 80, 87, 79, 128, 80, + 87, 207, 80, 87, 73, 73, 128, 80, 87, 73, 128, 80, 87, 69, 69, 128, 80, + 87, 69, 128, 80, 87, 65, 65, 128, 80, 87, 128, 80, 86, 128, 80, 85, 88, + 128, 80, 85, 85, 84, 128, 80, 85, 85, 128, 80, 85, 84, 82, 69, 70, 65, + 67, 84, 73, 79, 78, 128, 80, 85, 84, 128, 80, 85, 212, 80, 85, 83, 72, + 80, 73, 78, 128, 80, 85, 83, 72, 80, 73, 75, 65, 128, 80, 85, 83, 72, 73, + 78, 199, 80, 85, 82, 88, 128, 80, 85, 82, 83, 69, 128, 80, 85, 82, 80, + 76, 197, 80, 85, 82, 78, 65, 77, 65, 128, 80, 85, 82, 73, 84, 89, 128, + 80, 85, 82, 73, 70, 89, 128, 80, 85, 82, 128, 80, 85, 81, 128, 80, 85, + 80, 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 128, 80, + 85, 78, 71, 65, 65, 77, 128, 80, 85, 78, 71, 128, 80, 85, 78, 67, 84, 85, + 65, 84, 73, 79, 78, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 206, 80, + 85, 77, 80, 128, 80, 85, 77, 128, 80, 85, 69, 128, 80, 85, 66, 76, 73, + 195, 80, 85, 194, 80, 85, 65, 81, 128, 80, 85, 65, 69, 128, 80, 85, 50, + 128, 80, 85, 49, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, + 128, 80, 83, 73, 76, 201, 80, 83, 73, 70, 73, 83, 84, 79, 83, 89, 78, 65, + 71, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 80, 65, 82, 65, 75, 65, + 76, 69, 83, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 206, 80, 83, 73, + 70, 73, 83, 84, 79, 76, 89, 71, 73, 83, 77, 65, 128, 80, 83, 73, 128, 80, + 83, 65, 76, 84, 69, 210, 80, 83, 128, 80, 82, 79, 86, 69, 128, 80, 82, + 79, 84, 79, 86, 65, 82, 89, 211, 80, 82, 79, 84, 79, 211, 80, 82, 79, 84, + 69, 67, 84, 69, 196, 80, 82, 79, 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, + 73, 128, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 65, 204, 80, 82, 79, 80, + 79, 82, 84, 73, 79, 78, 128, 80, 82, 79, 80, 69, 82, 84, 217, 80, 82, 79, + 80, 69, 76, 76, 69, 210, 80, 82, 79, 79, 70, 128, 80, 82, 79, 76, 79, 78, + 71, 69, 196, 80, 82, 79, 76, 65, 84, 73, 79, 78, 197, 80, 82, 79, 74, 69, + 67, 84, 79, 82, 128, 80, 82, 79, 74, 69, 67, 84, 73, 86, 69, 128, 80, 82, + 79, 74, 69, 67, 84, 73, 79, 78, 128, 80, 82, 79, 72, 73, 66, 73, 84, 69, + 196, 80, 82, 79, 71, 82, 69, 83, 83, 128, 80, 82, 79, 71, 82, 65, 205, + 80, 82, 79, 70, 79, 85, 78, 68, 128, 80, 82, 79, 68, 85, 67, 84, 128, 80, + 82, 79, 68, 85, 67, 212, 80, 82, 73, 86, 65, 84, 69, 128, 80, 82, 73, 86, + 65, 84, 197, 80, 82, 73, 86, 65, 67, 217, 80, 82, 73, 83, 72, 84, 72, 65, + 77, 65, 84, 82, 193, 80, 82, 73, 78, 84, 83, 128, 80, 82, 73, 78, 84, 69, + 82, 128, 80, 82, 73, 78, 84, 69, 210, 80, 82, 73, 78, 84, 128, 80, 82, + 73, 78, 212, 80, 82, 73, 78, 67, 69, 83, 83, 128, 80, 82, 73, 77, 69, + 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211, 80, 82, 69, + 83, 69, 84, 128, 80, 82, 69, 83, 69, 78, 84, 65, 84, 73, 79, 206, 80, 82, + 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, 82, 69, 80, 79, 78, 68, 69, + 82, 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, 72, 65, 128, 80, 82, 69, 70, + 65, 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, 69, 128, 80, 82, 69, + 67, 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, 83, 128, 80, 82, 69, + 67, 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69, 67, 69, + 68, 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, 82, 65, 77, 45, 80, 73, 73, + 128, 80, 82, 65, 77, 45, 80, 73, 201, 80, 82, 65, 77, 45, 77, 85, 79, 89, + 128, 80, 82, 65, 77, 45, 77, 85, 79, 217, 80, 82, 65, 77, 45, 66, 85, 79, + 78, 128, 80, 82, 65, 77, 45, 66, 85, 79, 206, 80, 82, 65, 77, 45, 66, 69, + 73, 128, 80, 82, 65, 77, 45, 66, 69, 201, 80, 82, 65, 77, 128, 80, 82, + 65, 205, 80, 82, 128, 80, 80, 86, 128, 80, 80, 77, 128, 80, 80, 65, 128, + 80, 79, 89, 128, 80, 79, 88, 128, 80, 79, 87, 69, 82, 211, 80, 79, 87, + 69, 82, 128, 80, 79, 87, 68, 69, 82, 69, 196, 80, 79, 87, 68, 69, 82, + 128, 80, 79, 85, 78, 196, 80, 79, 85, 76, 84, 82, 217, 80, 79, 85, 67, + 72, 128, 80, 79, 84, 65, 84, 79, 128, 80, 79, 84, 65, 66, 76, 197, 80, + 79, 212, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, + 66, 79, 88, 128, 80, 79, 83, 84, 65, 204, 80, 79, 83, 84, 128, 80, 79, + 83, 212, 80, 79, 83, 83, 69, 83, 83, 73, 79, 78, 128, 80, 79, 82, 84, 65, + 66, 76, 197, 80, 79, 82, 82, 69, 67, 84, 85, 83, 128, 80, 79, 82, 82, 69, + 67, 84, 85, 211, 80, 79, 80, 80, 69, 82, 128, 80, 79, 80, 128, 80, 79, + 208, 80, 79, 79, 68, 76, 69, 128, 80, 79, 79, 128, 80, 79, 78, 68, 79, + 128, 80, 79, 206, 80, 79, 77, 77, 69, 69, 128, 80, 79, 77, 77, 69, 197, + 80, 79, 76, 73, 83, 72, 128, 80, 79, 76, 73, 67, 197, 80, 79, 76, 201, + 80, 79, 76, 69, 128, 80, 79, 76, 197, 80, 79, 75, 82, 89, 84, 73, 69, + 128, 80, 79, 75, 79, 74, 73, 128, 80, 79, 73, 78, 84, 211, 80, 79, 73, + 78, 84, 79, 128, 80, 79, 73, 78, 84, 69, 82, 128, 80, 79, 73, 78, 84, 69, + 196, 80, 79, 73, 78, 84, 128, 80, 79, 73, 78, 212, 80, 79, 69, 84, 82, + 217, 80, 79, 69, 84, 73, 195, 80, 79, 68, 65, 84, 85, 83, 128, 80, 79, + 67, 75, 69, 212, 80, 79, 65, 128, 80, 79, 128, 80, 207, 80, 78, 69, 85, + 77, 65, 84, 65, 128, 80, 76, 85, 84, 79, 128, 80, 76, 85, 84, 65, 128, + 80, 76, 85, 83, 45, 77, 73, 78, 85, 211, 80, 76, 85, 83, 128, 80, 76, 85, + 82, 65, 76, 128, 80, 76, 85, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76, + 85, 75, 128, 80, 76, 85, 71, 128, 80, 76, 85, 128, 80, 76, 79, 87, 128, + 80, 76, 79, 80, 72, 85, 128, 80, 76, 72, 65, 85, 128, 80, 76, 69, 84, 72, + 82, 79, 78, 128, 80, 76, 68, 128, 80, 76, 65, 89, 73, 78, 199, 80, 76, + 65, 84, 69, 128, 80, 76, 65, 83, 84, 73, 67, 83, 128, 80, 76, 65, 78, 69, + 128, 80, 76, 65, 78, 197, 80, 76, 65, 78, 67, 203, 80, 76, 65, 75, 128, + 80, 76, 65, 71, 73, 79, 211, 80, 76, 65, 67, 69, 72, 79, 76, 68, 69, 210, + 80, 76, 65, 67, 197, 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, + 128, 80, 73, 90, 90, 65, 128, 80, 73, 88, 128, 80, 73, 87, 82, 128, 80, + 73, 84, 67, 72, 70, 79, 82, 75, 128, 80, 73, 84, 67, 72, 70, 79, 82, 203, + 80, 73, 84, 128, 80, 73, 83, 84, 79, 76, 128, 80, 73, 83, 69, 76, 69, 72, + 128, 80, 73, 83, 67, 69, 83, 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, + 73, 199, 80, 73, 82, 73, 69, 69, 78, 128, 80, 73, 82, 65, 67, 89, 128, + 80, 73, 82, 50, 128, 80, 73, 80, 73, 78, 71, 128, 80, 73, 80, 65, 69, 77, + 71, 66, 73, 69, 69, 128, 80, 73, 80, 65, 69, 77, 66, 65, 128, 80, 73, 80, + 128, 80, 73, 78, 87, 72, 69, 69, 204, 80, 73, 78, 69, 65, 80, 80, 76, 69, + 128, 80, 73, 78, 197, 80, 73, 78, 65, 82, 66, 79, 82, 65, 83, 128, 80, + 73, 76, 76, 128, 80, 73, 76, 197, 80, 73, 76, 67, 82, 79, 215, 80, 73, + 75, 85, 82, 85, 128, 80, 73, 75, 79, 128, 80, 73, 71, 128, 80, 73, 199, + 80, 73, 69, 88, 128, 80, 73, 69, 85, 80, 45, 84, 72, 73, 69, 85, 84, 72, + 128, 80, 73, 69, 85, 80, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80, + 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 80, + 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, + 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, + 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 80, + 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 80, 73, + 69, 85, 80, 45, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, + 80, 73, 69, 85, 80, 45, 82, 73, 69, 85, 76, 128, 80, 73, 69, 85, 80, 45, + 78, 73, 69, 85, 78, 128, 80, 73, 69, 85, 80, 45, 77, 73, 69, 85, 77, 128, + 80, 73, 69, 85, 80, 45, 75, 72, 73, 69, 85, 75, 72, 128, 80, 73, 69, 85, + 80, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 67, 72, 73, 69, + 85, 67, 72, 128, 80, 73, 69, 85, 208, 80, 73, 69, 84, 128, 80, 73, 69, + 80, 128, 80, 73, 69, 69, 84, 128, 80, 73, 69, 69, 81, 128, 80, 73, 69, + 67, 69, 128, 80, 73, 69, 128, 80, 73, 67, 84, 85, 82, 69, 128, 80, 73, + 67, 75, 69, 84, 128, 80, 73, 67, 75, 128, 80, 73, 65, 83, 85, 84, 79, 82, + 85, 128, 80, 73, 65, 83, 77, 193, 80, 73, 65, 78, 79, 128, 80, 201, 80, + 72, 87, 65, 128, 80, 72, 85, 84, 72, 65, 79, 128, 80, 72, 85, 210, 80, + 72, 85, 78, 71, 128, 80, 72, 82, 65, 83, 69, 128, 80, 72, 79, 78, 69, 83, + 128, 80, 72, 79, 69, 78, 73, 67, 73, 65, 206, 80, 72, 79, 65, 128, 80, + 72, 79, 128, 80, 72, 207, 80, 72, 78, 65, 69, 203, 80, 72, 73, 78, 84, + 72, 85, 128, 80, 72, 73, 76, 79, 83, 79, 80, 72, 69, 82, 211, 80, 72, 73, + 76, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, 45, 84, 72, 73, + 69, 85, 84, 72, 128, 80, 72, 73, 69, 85, 80, 72, 45, 83, 73, 79, 83, 128, + 80, 72, 73, 69, 85, 80, 72, 45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, + 85, 80, 72, 45, 72, 73, 69, 85, 72, 128, 80, 72, 73, 69, 85, 80, 200, 80, + 72, 73, 128, 80, 72, 201, 80, 72, 69, 69, 128, 80, 72, 69, 128, 80, 72, + 65, 83, 69, 45, 198, 80, 72, 65, 83, 69, 45, 194, 80, 72, 65, 82, 89, 78, + 71, 69, 65, 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, 72, 65, + 77, 128, 80, 72, 65, 73, 83, 84, 79, 211, 80, 72, 65, 71, 83, 45, 80, + 193, 80, 72, 65, 66, 128, 80, 72, 65, 65, 82, 75, 65, 65, 128, 80, 72, + 65, 65, 128, 80, 72, 65, 128, 80, 71, 128, 80, 70, 128, 80, 69, 85, 88, + 128, 80, 69, 85, 84, 65, 69, 128, 80, 69, 85, 84, 128, 80, 69, 84, 65, + 83, 84, 79, 75, 79, 85, 70, 73, 83, 77, 65, 128, 80, 69, 84, 65, 83, 84, + 73, 128, 80, 69, 84, 65, 83, 77, 65, 128, 80, 69, 84, 65, 76, 76, 69, + 196, 80, 69, 83, 79, 128, 80, 69, 83, 207, 80, 69, 83, 72, 50, 128, 80, + 69, 83, 72, 178, 80, 69, 83, 69, 84, 193, 80, 69, 211, 80, 69, 82, 84, + 72, 207, 80, 69, 82, 83, 80, 69, 67, 84, 73, 86, 69, 128, 80, 69, 82, 83, + 79, 78, 65, 204, 80, 69, 82, 83, 79, 78, 128, 80, 69, 82, 83, 79, 206, + 80, 69, 82, 83, 73, 65, 206, 80, 69, 82, 83, 69, 86, 69, 82, 73, 78, 199, + 80, 69, 82, 80, 69, 78, 68, 73, 67, 85, 76, 65, 82, 128, 80, 69, 82, 80, + 69, 78, 68, 73, 67, 85, 76, 65, 210, 80, 69, 82, 78, 73, 206, 80, 69, 82, + 77, 73, 84, 84, 69, 196, 80, 69, 82, 77, 73, 195, 80, 69, 82, 77, 65, 78, + 69, 78, 212, 80, 69, 82, 73, 83, 80, 79, 77, 69, 78, 73, 128, 80, 69, 82, + 73, 83, 80, 79, 77, 69, 78, 201, 80, 69, 82, 70, 79, 82, 77, 73, 78, 199, + 80, 69, 82, 70, 69, 67, 84, 85, 205, 80, 69, 82, 70, 69, 67, 84, 65, 128, + 80, 69, 82, 70, 69, 67, 84, 193, 80, 69, 82, 67, 85, 83, 83, 73, 86, 69, + 128, 80, 69, 82, 67, 69, 78, 212, 80, 69, 80, 80, 69, 82, 128, 80, 69, + 80, 69, 84, 128, 80, 69, 80, 69, 212, 80, 69, 79, 82, 84, 200, 80, 69, + 79, 80, 76, 69, 128, 80, 69, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, + 84, 65, 71, 82, 65, 77, 128, 80, 69, 78, 84, 65, 71, 79, 78, 128, 80, 69, + 78, 83, 85, 128, 80, 69, 78, 83, 73, 86, 197, 80, 69, 78, 78, 217, 80, + 69, 78, 78, 65, 78, 84, 128, 80, 69, 78, 73, 72, 73, 128, 80, 69, 78, 71, + 85, 73, 78, 128, 80, 69, 78, 71, 75, 65, 76, 128, 80, 69, 78, 69, 84, 82, + 65, 84, 73, 79, 78, 128, 80, 69, 78, 67, 73, 76, 128, 80, 69, 206, 80, + 69, 76, 65, 83, 84, 79, 78, 128, 80, 69, 76, 65, 83, 84, 79, 206, 80, 69, + 73, 84, 72, 128, 80, 69, 72, 69, 72, 128, 80, 69, 72, 69, 200, 80, 69, + 72, 128, 80, 69, 200, 80, 69, 69, 90, 73, 128, 80, 69, 69, 83, 72, 73, + 128, 80, 69, 69, 80, 128, 80, 69, 69, 77, 128, 80, 69, 69, 73, 128, 80, + 69, 69, 128, 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 83, 128, 80, 69, 68, + 69, 83, 84, 82, 73, 65, 78, 128, 80, 69, 68, 69, 83, 84, 65, 76, 128, 80, + 69, 68, 69, 83, 84, 65, 204, 80, 69, 68, 65, 204, 80, 69, 65, 67, 72, + 128, 80, 69, 65, 67, 69, 128, 80, 69, 65, 67, 197, 80, 68, 73, 128, 80, + 68, 70, 128, 80, 68, 128, 80, 67, 128, 80, 65, 90, 69, 82, 128, 80, 65, + 89, 69, 82, 79, 75, 128, 80, 65, 89, 65, 78, 78, 65, 128, 80, 65, 89, + 128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 215, 80, 65, 86, 73, + 89, 65, 78, 73, 128, 80, 65, 85, 128, 80, 65, 213, 80, 65, 84, 84, 69, + 82, 78, 128, 80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, + 200, 80, 65, 84, 65, 75, 128, 80, 65, 84, 65, 72, 128, 80, 65, 84, 128, + 80, 65, 83, 85, 81, 128, 80, 65, 83, 83, 80, 79, 82, 212, 80, 65, 83, 83, + 73, 86, 69, 45, 80, 85, 76, 76, 45, 85, 80, 45, 79, 85, 84, 80, 85, 212, + 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, 76, 76, 45, 68, 79, 87, 78, 45, + 79, 85, 84, 80, 85, 212, 80, 65, 83, 83, 69, 78, 71, 69, 210, 80, 65, 83, + 72, 84, 65, 128, 80, 65, 83, 72, 65, 69, 128, 80, 65, 83, 69, 81, 128, + 80, 65, 83, 65, 78, 71, 65, 206, 80, 65, 82, 85, 77, 128, 80, 65, 82, 84, + 217, 80, 65, 82, 84, 78, 69, 82, 83, 72, 73, 208, 80, 65, 82, 84, 73, 65, + 76, 76, 89, 45, 82, 69, 67, 89, 67, 76, 69, 196, 80, 65, 82, 84, 73, 65, + 204, 80, 65, 82, 84, 72, 73, 65, 206, 80, 65, 82, 212, 80, 65, 82, 75, + 128, 80, 65, 82, 73, 67, 72, 79, 78, 128, 80, 65, 82, 69, 83, 84, 73, 71, + 77, 69, 78, 79, 206, 80, 65, 82, 69, 82, 69, 78, 128, 80, 65, 82, 69, 78, + 84, 72, 69, 83, 73, 83, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 211, + 80, 65, 82, 69, 78, 84, 72, 69, 83, 69, 211, 80, 65, 82, 65, 80, 72, 82, + 65, 83, 197, 80, 65, 82, 65, 76, 76, 69, 76, 79, 71, 82, 65, 77, 128, 80, + 65, 82, 65, 76, 76, 69, 76, 128, 80, 65, 82, 65, 76, 76, 69, 204, 80, 65, + 82, 65, 75, 76, 73, 84, 73, 75, 73, 128, 80, 65, 82, 65, 75, 76, 73, 84, + 73, 75, 201, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 193, 80, 65, 82, 65, + 71, 82, 65, 80, 72, 79, 83, 128, 80, 65, 82, 65, 71, 82, 65, 80, 72, 128, + 80, 65, 82, 65, 71, 82, 65, 80, 200, 80, 65, 82, 65, 128, 80, 65, 82, + 128, 80, 65, 80, 89, 82, 85, 83, 128, 80, 65, 80, 69, 82, 67, 76, 73, 80, + 83, 128, 80, 65, 80, 69, 82, 67, 76, 73, 80, 128, 80, 65, 80, 69, 210, + 80, 65, 80, 128, 80, 65, 208, 80, 65, 207, 80, 65, 78, 89, 85, 75, 85, + 128, 80, 65, 78, 89, 73, 75, 85, 128, 80, 65, 78, 89, 69, 67, 69, 75, + 128, 80, 65, 78, 89, 65, 78, 71, 71, 65, 128, 80, 65, 78, 89, 65, 75, 82, + 65, 128, 80, 65, 78, 84, 73, 128, 80, 65, 78, 83, 73, 79, 83, 45, 80, 73, + 69, 85, 80, 128, 80, 65, 78, 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, + 85, 78, 80, 73, 69, 85, 80, 128, 80, 65, 78, 79, 78, 71, 79, 78, 65, 78, + 128, 80, 65, 78, 79, 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, + 68, 128, 80, 65, 78, 71, 82, 65, 78, 71, 75, 69, 80, 128, 80, 65, 78, 71, + 79, 76, 65, 84, 128, 80, 65, 78, 71, 76, 79, 78, 71, 128, 80, 65, 78, 71, + 76, 65, 89, 65, 82, 128, 80, 65, 78, 71, 75, 79, 78, 128, 80, 65, 78, 71, + 75, 65, 84, 128, 80, 65, 78, 71, 72, 85, 76, 85, 128, 80, 65, 78, 71, + 128, 80, 65, 78, 69, 85, 76, 69, 85, 78, 71, 128, 80, 65, 78, 68, 193, + 80, 65, 78, 65, 69, 76, 65, 69, 78, 71, 128, 80, 65, 78, 128, 80, 65, 77, + 85, 78, 71, 75, 65, 72, 128, 80, 65, 77, 85, 68, 80, 79, 68, 128, 80, 65, + 77, 83, 72, 65, 69, 128, 80, 65, 77, 80, 72, 89, 76, 73, 65, 206, 80, 65, + 77, 73, 78, 71, 75, 65, 76, 128, 80, 65, 77, 69, 80, 69, 84, 128, 80, 65, + 77, 69, 78, 69, 78, 71, 128, 80, 65, 77, 65, 68, 65, 128, 80, 65, 77, 65, + 65, 69, 72, 128, 80, 65, 76, 85, 84, 65, 128, 80, 65, 76, 79, 67, 72, 75, + 65, 128, 80, 65, 76, 77, 89, 82, 69, 78, 197, 80, 65, 76, 205, 80, 65, + 76, 76, 65, 87, 65, 128, 80, 65, 76, 76, 65, 83, 128, 80, 65, 76, 69, 84, + 84, 69, 128, 80, 65, 76, 65, 85, 78, 199, 80, 65, 76, 65, 84, 65, 76, 73, + 90, 69, 196, 80, 65, 76, 65, 84, 65, 76, 73, 90, 65, 84, 73, 79, 78, 128, + 80, 65, 76, 65, 84, 65, 204, 80, 65, 75, 80, 65, 203, 80, 65, 73, 89, 65, + 78, 78, 79, 73, 128, 80, 65, 73, 82, 84, 72, 82, 65, 128, 80, 65, 73, 82, + 69, 196, 80, 65, 73, 78, 84, 66, 82, 85, 83, 72, 128, 80, 65, 73, 128, + 80, 65, 72, 76, 65, 86, 201, 80, 65, 72, 128, 80, 65, 71, 69, 83, 128, + 80, 65, 71, 69, 82, 128, 80, 65, 71, 197, 80, 65, 68, 77, 193, 80, 65, + 68, 68, 73, 78, 199, 80, 65, 68, 193, 80, 65, 68, 128, 80, 65, 67, 75, + 73, 78, 71, 128, 80, 65, 67, 75, 65, 71, 69, 128, 80, 65, 65, 84, 85, + 128, 80, 65, 65, 83, 69, 78, 84, 79, 128, 80, 65, 65, 82, 65, 69, 128, + 80, 65, 65, 77, 128, 80, 65, 65, 73, 128, 80, 65, 65, 45, 80, 73, 76, 76, + 65, 128, 80, 65, 65, 128, 80, 50, 128, 80, 48, 49, 49, 128, 80, 48, 49, + 48, 128, 80, 48, 48, 57, 128, 80, 48, 48, 56, 128, 80, 48, 48, 55, 128, + 80, 48, 48, 54, 128, 80, 48, 48, 53, 128, 80, 48, 48, 52, 128, 80, 48, + 48, 51, 65, 128, 80, 48, 48, 51, 128, 80, 48, 48, 50, 128, 80, 48, 48, + 49, 65, 128, 80, 48, 48, 49, 128, 79, 89, 82, 65, 78, 73, 83, 77, 193, + 79, 89, 65, 78, 78, 65, 128, 79, 88, 73, 65, 128, 79, 88, 73, 193, 79, + 88, 69, 73, 65, 201, 79, 88, 69, 73, 193, 79, 86, 69, 82, 82, 73, 68, 69, + 128, 79, 86, 69, 82, 76, 79, 78, 199, 79, 86, 69, 82, 76, 73, 78, 69, 128, 79, 86, 69, 82, 76, 65, 89, 128, 79, 86, 69, 82, 76, 65, 80, 80, 73, - 78, 199, 79, 86, 69, 82, 76, 65, 73, 68, 128, 79, 86, 69, 82, 66, 65, 82, - 128, 79, 86, 65, 204, 79, 86, 128, 79, 85, 84, 76, 73, 78, 69, 196, 79, - 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, 79, 85, 84, 66, 79, - 216, 79, 85, 78, 75, 73, 193, 79, 85, 78, 67, 69, 128, 79, 85, 78, 67, - 197, 79, 84, 85, 128, 79, 84, 84, 65, 86, 193, 79, 84, 84, 128, 79, 84, - 72, 65, 76, 65, 206, 79, 84, 72, 65, 76, 128, 79, 83, 77, 65, 78, 89, - 193, 79, 83, 67, 128, 79, 82, 84, 72, 79, 71, 79, 78, 65, 204, 79, 82, - 84, 72, 79, 68, 79, 216, 79, 82, 78, 65, 84, 197, 79, 82, 78, 65, 77, 69, - 78, 84, 128, 79, 82, 78, 65, 77, 69, 78, 212, 79, 82, 75, 72, 79, 206, - 79, 82, 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, 82, 69, - 45, 50, 128, 79, 82, 68, 73, 78, 65, 204, 79, 82, 68, 69, 210, 79, 82, - 67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 197, 79, 80, 84, 73, 79, 206, - 79, 80, 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83, 83, 73, 79, 78, 128, - 79, 80, 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, 78, - 199, 79, 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85, 67, 72, 85, 83, - 128, 79, 80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, - 210, 79, 80, 69, 82, 65, 84, 73, 78, 199, 79, 80, 69, 78, 73, 78, 199, - 79, 80, 69, 78, 45, 80, 128, 79, 80, 69, 78, 45, 79, 85, 84, 76, 73, 78, - 69, 196, 79, 80, 69, 78, 45, 72, 69, 65, 68, 69, 196, 79, 80, 69, 78, 45, - 67, 73, 82, 67, 85, 73, 84, 45, 79, 85, 84, 80, 85, 212, 79, 79, 90, 69, - 128, 79, 79, 89, 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 77, 85, - 128, 79, 79, 69, 128, 79, 79, 66, 79, 79, 70, 73, 76, 73, 128, 79, 78, - 85, 128, 79, 78, 83, 85, 128, 79, 78, 78, 128, 79, 78, 75, 65, 82, 128, - 79, 78, 69, 83, 69, 76, 70, 128, 79, 78, 69, 45, 87, 65, 217, 79, 78, 69, - 45, 84, 72, 73, 82, 84, 89, 128, 79, 78, 69, 45, 76, 73, 78, 197, 79, 78, - 67, 79, 77, 73, 78, 199, 79, 78, 65, 80, 128, 79, 77, 73, 83, 83, 73, 79, - 206, 79, 77, 73, 67, 82, 79, 78, 128, 79, 77, 73, 67, 82, 79, 206, 79, - 77, 69, 71, 65, 128, 79, 77, 69, 71, 193, 79, 77, 65, 76, 79, 78, 128, - 79, 76, 73, 86, 69, 128, 79, 76, 73, 71, 79, 206, 79, 76, 68, 128, 79, - 75, 84, 207, 79, 75, 65, 82, 65, 128, 79, 75, 65, 82, 193, 79, 74, 73, - 66, 87, 65, 217, 79, 74, 69, 79, 78, 128, 79, 73, 76, 128, 79, 72, 77, - 128, 79, 72, 205, 79, 71, 82, 69, 128, 79, 71, 79, 78, 69, 75, 128, 79, - 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 70, 70, 73, 67, 69, 82, - 128, 79, 70, 70, 73, 67, 69, 128, 79, 70, 70, 73, 67, 197, 79, 70, 70, - 128, 79, 69, 89, 128, 79, 69, 75, 128, 79, 68, 69, 78, 128, 79, 68, 196, - 79, 67, 84, 79, 80, 85, 83, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, - 84, 69, 212, 79, 67, 210, 79, 67, 76, 79, 67, 75, 128, 79, 67, 67, 76, - 85, 83, 73, 79, 78, 128, 79, 66, 83, 84, 82, 85, 67, 84, 73, 79, 78, 128, - 79, 66, 79, 76, 211, 79, 66, 79, 204, 79, 66, 79, 70, 73, 76, 73, 128, - 79, 66, 76, 73, 81, 85, 197, 79, 66, 74, 69, 67, 212, 79, 66, 69, 76, 85, - 83, 128, 79, 66, 69, 76, 79, 83, 128, 79, 66, 128, 79, 65, 89, 128, 79, - 65, 75, 128, 79, 65, 66, 79, 65, 70, 73, 76, 73, 128, 79, 193, 79, 48, - 53, 49, 128, 79, 48, 53, 48, 66, 128, 79, 48, 53, 48, 65, 128, 79, 48, - 53, 48, 128, 79, 48, 52, 57, 128, 79, 48, 52, 56, 128, 79, 48, 52, 55, - 128, 79, 48, 52, 54, 128, 79, 48, 52, 53, 128, 79, 48, 52, 52, 128, 79, - 48, 52, 51, 128, 79, 48, 52, 50, 128, 79, 48, 52, 49, 128, 79, 48, 52, - 48, 128, 79, 48, 51, 57, 128, 79, 48, 51, 56, 128, 79, 48, 51, 55, 128, - 79, 48, 51, 54, 68, 128, 79, 48, 51, 54, 67, 128, 79, 48, 51, 54, 66, - 128, 79, 48, 51, 54, 65, 128, 79, 48, 51, 54, 128, 79, 48, 51, 53, 128, - 79, 48, 51, 52, 128, 79, 48, 51, 51, 65, 128, 79, 48, 51, 51, 128, 79, - 48, 51, 50, 128, 79, 48, 51, 49, 128, 79, 48, 51, 48, 65, 128, 79, 48, - 51, 48, 128, 79, 48, 50, 57, 65, 128, 79, 48, 50, 57, 128, 79, 48, 50, - 56, 128, 79, 48, 50, 55, 128, 79, 48, 50, 54, 128, 79, 48, 50, 53, 65, - 128, 79, 48, 50, 53, 128, 79, 48, 50, 52, 65, 128, 79, 48, 50, 52, 128, - 79, 48, 50, 51, 128, 79, 48, 50, 50, 128, 79, 48, 50, 49, 128, 79, 48, - 50, 48, 65, 128, 79, 48, 50, 48, 128, 79, 48, 49, 57, 65, 128, 79, 48, - 49, 57, 128, 79, 48, 49, 56, 128, 79, 48, 49, 55, 128, 79, 48, 49, 54, - 128, 79, 48, 49, 53, 128, 79, 48, 49, 52, 128, 79, 48, 49, 51, 128, 79, - 48, 49, 50, 128, 79, 48, 49, 49, 128, 79, 48, 49, 48, 67, 128, 79, 48, - 49, 48, 66, 128, 79, 48, 49, 48, 65, 128, 79, 48, 49, 48, 128, 79, 48, - 48, 57, 128, 79, 48, 48, 56, 128, 79, 48, 48, 55, 128, 79, 48, 48, 54, - 70, 128, 79, 48, 48, 54, 69, 128, 79, 48, 48, 54, 68, 128, 79, 48, 48, - 54, 67, 128, 79, 48, 48, 54, 66, 128, 79, 48, 48, 54, 65, 128, 79, 48, - 48, 54, 128, 79, 48, 48, 53, 65, 128, 79, 48, 48, 53, 128, 79, 48, 48, - 52, 128, 79, 48, 48, 51, 128, 79, 48, 48, 50, 128, 79, 48, 48, 49, 65, - 128, 79, 48, 48, 49, 128, 79, 45, 89, 69, 128, 79, 45, 79, 45, 73, 128, - 79, 45, 69, 128, 78, 90, 89, 88, 128, 78, 90, 89, 84, 128, 78, 90, 89, - 82, 88, 128, 78, 90, 89, 82, 128, 78, 90, 89, 80, 128, 78, 90, 89, 128, - 78, 90, 85, 88, 128, 78, 90, 85, 82, 88, 128, 78, 90, 85, 82, 128, 78, - 90, 85, 81, 128, 78, 90, 85, 80, 128, 78, 90, 85, 79, 88, 128, 78, 90, - 85, 79, 128, 78, 90, 85, 206, 78, 90, 85, 128, 78, 90, 79, 88, 128, 78, - 90, 79, 80, 128, 78, 90, 73, 88, 128, 78, 90, 73, 84, 128, 78, 90, 73, - 80, 128, 78, 90, 73, 69, 88, 128, 78, 90, 73, 69, 80, 128, 78, 90, 73, - 69, 128, 78, 90, 73, 128, 78, 90, 69, 88, 128, 78, 90, 69, 85, 77, 128, - 78, 90, 69, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, - 81, 128, 78, 90, 65, 80, 128, 78, 90, 65, 128, 78, 90, 193, 78, 89, 87, - 65, 128, 78, 89, 85, 88, 128, 78, 89, 85, 85, 128, 78, 89, 85, 84, 128, - 78, 89, 85, 80, 128, 78, 89, 85, 79, 88, 128, 78, 89, 85, 79, 80, 128, - 78, 89, 85, 79, 128, 78, 89, 85, 69, 128, 78, 89, 85, 128, 78, 89, 79, - 88, 128, 78, 89, 79, 84, 128, 78, 89, 79, 80, 128, 78, 89, 79, 79, 128, - 78, 89, 79, 65, 128, 78, 89, 79, 128, 78, 89, 74, 65, 128, 78, 89, 73, - 88, 128, 78, 89, 73, 84, 128, 78, 89, 73, 212, 78, 89, 73, 211, 78, 89, - 73, 210, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, 68, 79, 128, 78, 89, - 73, 73, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, 69, 84, 128, 78, 89, - 73, 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, 128, 78, 89, 201, 78, - 89, 72, 65, 128, 78, 89, 69, 84, 128, 78, 89, 69, 212, 78, 89, 69, 72, - 128, 78, 89, 69, 200, 78, 89, 69, 69, 128, 78, 89, 69, 128, 78, 89, 196, - 78, 89, 67, 65, 128, 78, 89, 65, 85, 128, 78, 89, 65, 73, 128, 78, 89, - 65, 72, 128, 78, 89, 65, 69, 77, 65, 69, 128, 78, 89, 65, 65, 128, 78, - 87, 79, 79, 128, 78, 87, 79, 128, 78, 87, 73, 73, 128, 78, 87, 73, 128, - 78, 87, 69, 128, 78, 87, 65, 65, 128, 78, 87, 65, 128, 78, 87, 128, 78, - 86, 128, 78, 85, 88, 128, 78, 85, 85, 78, 128, 78, 85, 85, 128, 78, 85, - 84, 73, 76, 76, 85, 128, 78, 85, 84, 128, 78, 85, 212, 78, 85, 82, 88, - 128, 78, 85, 82, 128, 78, 85, 80, 128, 78, 85, 79, 88, 128, 78, 85, 79, - 80, 128, 78, 85, 79, 128, 78, 85, 78, 85, 90, 128, 78, 85, 78, 85, 218, - 78, 85, 78, 71, 128, 78, 85, 78, 65, 86, 85, 212, 78, 85, 78, 65, 86, 73, - 203, 78, 85, 78, 128, 78, 85, 206, 78, 85, 77, 69, 82, 207, 78, 85, 77, - 69, 82, 65, 84, 79, 210, 78, 85, 77, 69, 82, 65, 204, 78, 85, 77, 66, 69, - 82, 83, 128, 78, 85, 77, 66, 69, 82, 128, 78, 85, 77, 128, 78, 85, 76, - 76, 128, 78, 85, 76, 204, 78, 85, 76, 128, 78, 85, 75, 84, 65, 128, 78, - 85, 69, 78, 71, 128, 78, 85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, - 65, 69, 128, 78, 85, 49, 49, 128, 78, 85, 49, 177, 78, 85, 48, 50, 50, - 65, 128, 78, 85, 48, 50, 50, 128, 78, 85, 48, 50, 49, 128, 78, 85, 48, - 50, 48, 128, 78, 85, 48, 49, 57, 128, 78, 85, 48, 49, 56, 65, 128, 78, - 85, 48, 49, 56, 128, 78, 85, 48, 49, 55, 128, 78, 85, 48, 49, 54, 128, - 78, 85, 48, 49, 53, 128, 78, 85, 48, 49, 52, 128, 78, 85, 48, 49, 51, - 128, 78, 85, 48, 49, 50, 128, 78, 85, 48, 49, 49, 65, 128, 78, 85, 48, - 49, 49, 128, 78, 85, 48, 49, 48, 65, 128, 78, 85, 48, 49, 48, 128, 78, - 85, 48, 48, 57, 128, 78, 85, 48, 48, 56, 128, 78, 85, 48, 48, 55, 128, - 78, 85, 48, 48, 54, 128, 78, 85, 48, 48, 53, 128, 78, 85, 48, 48, 52, - 128, 78, 85, 48, 48, 51, 128, 78, 85, 48, 48, 50, 128, 78, 85, 48, 48, - 49, 128, 78, 84, 85, 85, 128, 78, 84, 85, 77, 128, 78, 84, 213, 78, 84, - 79, 81, 80, 69, 78, 128, 78, 84, 73, 69, 197, 78, 84, 69, 85, 78, 71, 66, - 65, 128, 78, 84, 69, 85, 77, 128, 78, 84, 69, 78, 128, 78, 84, 69, 69, - 128, 78, 84, 65, 80, 128, 78, 84, 65, 208, 78, 84, 65, 65, 128, 78, 83, - 85, 79, 212, 78, 83, 85, 78, 128, 78, 83, 85, 77, 128, 78, 83, 79, 77, - 128, 78, 83, 73, 69, 69, 84, 128, 78, 83, 73, 69, 69, 80, 128, 78, 83, - 73, 69, 69, 128, 78, 83, 72, 85, 84, 128, 78, 83, 72, 85, 212, 78, 83, - 72, 85, 79, 80, 128, 78, 83, 72, 85, 69, 128, 78, 83, 72, 73, 69, 69, - 128, 78, 83, 72, 69, 69, 128, 78, 83, 72, 65, 81, 128, 78, 83, 72, 65, - 128, 78, 83, 69, 85, 65, 69, 78, 128, 78, 83, 69, 78, 128, 78, 83, 65, - 128, 78, 82, 89, 88, 128, 78, 82, 89, 84, 128, 78, 82, 89, 82, 88, 128, - 78, 82, 89, 82, 128, 78, 82, 89, 80, 128, 78, 82, 89, 128, 78, 82, 85, - 88, 128, 78, 82, 85, 84, 128, 78, 82, 85, 82, 88, 128, 78, 82, 85, 82, - 128, 78, 82, 85, 80, 128, 78, 82, 85, 128, 78, 82, 79, 88, 128, 78, 82, - 79, 80, 128, 78, 82, 79, 128, 78, 82, 69, 88, 128, 78, 82, 69, 84, 128, - 78, 82, 69, 80, 128, 78, 82, 69, 128, 78, 82, 65, 88, 128, 78, 82, 65, - 84, 128, 78, 82, 65, 80, 128, 78, 82, 65, 128, 78, 79, 89, 128, 78, 79, - 88, 128, 78, 79, 86, 69, 77, 66, 69, 82, 128, 78, 79, 84, 84, 79, 128, - 78, 79, 84, 69, 83, 128, 78, 79, 84, 69, 72, 69, 65, 68, 128, 78, 79, 84, - 69, 72, 69, 65, 196, 78, 79, 84, 69, 66, 79, 79, 75, 128, 78, 79, 84, 69, - 66, 79, 79, 203, 78, 79, 84, 69, 128, 78, 79, 84, 197, 78, 79, 84, 67, - 72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 212, 78, - 79, 83, 69, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 72, - 69, 82, 206, 78, 79, 82, 84, 200, 78, 79, 82, 77, 65, 204, 78, 79, 210, + 78, 199, 79, 86, 69, 82, 76, 65, 80, 128, 79, 86, 69, 82, 76, 65, 73, 68, + 128, 79, 86, 69, 82, 66, 65, 82, 128, 79, 86, 65, 204, 79, 85, 84, 76, + 73, 78, 69, 196, 79, 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, + 79, 85, 84, 66, 79, 216, 79, 85, 78, 75, 73, 193, 79, 85, 78, 67, 69, + 128, 79, 85, 78, 67, 197, 79, 84, 85, 128, 79, 84, 84, 65, 86, 193, 79, + 84, 84, 128, 79, 84, 72, 65, 76, 65, 206, 79, 84, 72, 65, 76, 128, 79, + 83, 77, 65, 78, 89, 193, 79, 83, 67, 128, 79, 82, 84, 72, 79, 71, 79, 78, + 65, 204, 79, 82, 84, 72, 79, 68, 79, 216, 79, 82, 78, 65, 84, 197, 79, + 82, 78, 65, 77, 69, 78, 84, 128, 79, 82, 78, 65, 77, 69, 78, 212, 79, 82, + 75, 72, 79, 206, 79, 82, 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, + 128, 79, 82, 69, 45, 50, 128, 79, 82, 68, 73, 78, 65, 204, 79, 82, 68, + 69, 210, 79, 82, 67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 197, 79, 80, + 84, 73, 79, 206, 79, 80, 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83, 83, + 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80, 80, + 79, 83, 73, 78, 199, 79, 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85, 67, + 72, 85, 83, 128, 79, 80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, + 84, 79, 210, 79, 80, 69, 82, 65, 84, 73, 78, 199, 79, 80, 69, 78, 73, 78, + 199, 79, 80, 69, 78, 45, 80, 128, 79, 80, 69, 78, 45, 79, 85, 84, 76, 73, + 78, 69, 196, 79, 80, 69, 78, 45, 79, 128, 79, 80, 69, 78, 45, 207, 79, + 80, 69, 78, 45, 72, 69, 65, 68, 69, 196, 79, 80, 69, 78, 45, 67, 73, 82, + 67, 85, 73, 84, 45, 79, 85, 84, 80, 85, 212, 79, 80, 69, 206, 79, 79, 90, + 69, 128, 79, 79, 89, 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 77, + 85, 128, 79, 79, 72, 128, 79, 79, 69, 128, 79, 79, 66, 79, 79, 70, 73, + 76, 73, 128, 79, 78, 85, 128, 79, 78, 83, 85, 128, 79, 78, 78, 128, 79, + 78, 75, 65, 82, 128, 79, 78, 69, 83, 69, 76, 70, 128, 79, 78, 69, 45, 87, + 65, 217, 79, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 79, 78, 69, 45, 76, + 73, 78, 197, 79, 78, 67, 79, 77, 73, 78, 199, 79, 78, 65, 80, 128, 79, + 77, 73, 83, 83, 73, 79, 206, 79, 77, 73, 67, 82, 79, 78, 128, 79, 77, 73, + 67, 82, 79, 206, 79, 77, 69, 71, 65, 128, 79, 77, 69, 71, 193, 79, 77, + 65, 76, 79, 78, 128, 79, 76, 73, 86, 69, 128, 79, 76, 73, 71, 79, 206, + 79, 76, 68, 128, 79, 75, 84, 207, 79, 75, 65, 82, 65, 128, 79, 75, 65, + 82, 193, 79, 74, 73, 66, 87, 65, 217, 79, 74, 69, 79, 78, 128, 79, 73, + 76, 128, 79, 73, 204, 79, 72, 77, 128, 79, 72, 205, 79, 71, 82, 69, 128, + 79, 71, 79, 78, 69, 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, + 205, 79, 70, 70, 73, 67, 69, 82, 128, 79, 70, 70, 73, 67, 69, 128, 79, + 70, 70, 73, 67, 197, 79, 70, 70, 128, 79, 69, 89, 128, 79, 69, 75, 128, + 79, 68, 69, 78, 128, 79, 68, 68, 128, 79, 68, 196, 79, 67, 84, 79, 80, + 85, 83, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 84, 69, 212, 79, + 67, 84, 65, 71, 79, 78, 128, 79, 67, 210, 79, 67, 76, 79, 67, 75, 128, + 79, 67, 67, 76, 85, 83, 73, 79, 78, 128, 79, 66, 83, 84, 82, 85, 67, 84, + 73, 79, 78, 128, 79, 66, 79, 76, 211, 79, 66, 79, 204, 79, 66, 79, 70, + 73, 76, 73, 128, 79, 66, 76, 73, 81, 85, 197, 79, 66, 74, 69, 67, 212, + 79, 66, 69, 76, 85, 83, 128, 79, 66, 69, 76, 79, 83, 128, 79, 66, 128, + 79, 65, 89, 128, 79, 65, 75, 128, 79, 65, 66, 79, 65, 70, 73, 76, 73, + 128, 79, 193, 79, 48, 53, 49, 128, 79, 48, 53, 48, 66, 128, 79, 48, 53, + 48, 65, 128, 79, 48, 53, 48, 128, 79, 48, 52, 57, 128, 79, 48, 52, 56, + 128, 79, 48, 52, 55, 128, 79, 48, 52, 54, 128, 79, 48, 52, 53, 128, 79, + 48, 52, 52, 128, 79, 48, 52, 51, 128, 79, 48, 52, 50, 128, 79, 48, 52, + 49, 128, 79, 48, 52, 48, 128, 79, 48, 51, 57, 128, 79, 48, 51, 56, 128, + 79, 48, 51, 55, 128, 79, 48, 51, 54, 68, 128, 79, 48, 51, 54, 67, 128, + 79, 48, 51, 54, 66, 128, 79, 48, 51, 54, 65, 128, 79, 48, 51, 54, 128, + 79, 48, 51, 53, 128, 79, 48, 51, 52, 128, 79, 48, 51, 51, 65, 128, 79, + 48, 51, 51, 128, 79, 48, 51, 50, 128, 79, 48, 51, 49, 128, 79, 48, 51, + 48, 65, 128, 79, 48, 51, 48, 128, 79, 48, 50, 57, 65, 128, 79, 48, 50, + 57, 128, 79, 48, 50, 56, 128, 79, 48, 50, 55, 128, 79, 48, 50, 54, 128, + 79, 48, 50, 53, 65, 128, 79, 48, 50, 53, 128, 79, 48, 50, 52, 65, 128, + 79, 48, 50, 52, 128, 79, 48, 50, 51, 128, 79, 48, 50, 50, 128, 79, 48, + 50, 49, 128, 79, 48, 50, 48, 65, 128, 79, 48, 50, 48, 128, 79, 48, 49, + 57, 65, 128, 79, 48, 49, 57, 128, 79, 48, 49, 56, 128, 79, 48, 49, 55, + 128, 79, 48, 49, 54, 128, 79, 48, 49, 53, 128, 79, 48, 49, 52, 128, 79, + 48, 49, 51, 128, 79, 48, 49, 50, 128, 79, 48, 49, 49, 128, 79, 48, 49, + 48, 67, 128, 79, 48, 49, 48, 66, 128, 79, 48, 49, 48, 65, 128, 79, 48, + 49, 48, 128, 79, 48, 48, 57, 128, 79, 48, 48, 56, 128, 79, 48, 48, 55, + 128, 79, 48, 48, 54, 70, 128, 79, 48, 48, 54, 69, 128, 79, 48, 48, 54, + 68, 128, 79, 48, 48, 54, 67, 128, 79, 48, 48, 54, 66, 128, 79, 48, 48, + 54, 65, 128, 79, 48, 48, 54, 128, 79, 48, 48, 53, 65, 128, 79, 48, 48, + 53, 128, 79, 48, 48, 52, 128, 79, 48, 48, 51, 128, 79, 48, 48, 50, 128, + 79, 48, 48, 49, 65, 128, 79, 48, 48, 49, 128, 79, 45, 89, 69, 128, 79, + 45, 79, 45, 73, 128, 79, 45, 69, 128, 78, 90, 89, 88, 128, 78, 90, 89, + 84, 128, 78, 90, 89, 82, 88, 128, 78, 90, 89, 82, 128, 78, 90, 89, 80, + 128, 78, 90, 89, 128, 78, 90, 85, 88, 128, 78, 90, 85, 82, 88, 128, 78, + 90, 85, 82, 128, 78, 90, 85, 81, 128, 78, 90, 85, 80, 128, 78, 90, 85, + 79, 88, 128, 78, 90, 85, 79, 128, 78, 90, 85, 206, 78, 90, 85, 128, 78, + 90, 79, 88, 128, 78, 90, 79, 80, 128, 78, 90, 73, 88, 128, 78, 90, 73, + 84, 128, 78, 90, 73, 80, 128, 78, 90, 73, 69, 88, 128, 78, 90, 73, 69, + 80, 128, 78, 90, 73, 69, 128, 78, 90, 73, 128, 78, 90, 69, 88, 128, 78, + 90, 69, 85, 77, 128, 78, 90, 69, 128, 78, 90, 65, 88, 128, 78, 90, 65, + 84, 128, 78, 90, 65, 81, 128, 78, 90, 65, 80, 128, 78, 90, 65, 128, 78, + 90, 193, 78, 89, 87, 65, 128, 78, 89, 85, 88, 128, 78, 89, 85, 85, 128, + 78, 89, 85, 84, 128, 78, 89, 85, 80, 128, 78, 89, 85, 79, 88, 128, 78, + 89, 85, 79, 80, 128, 78, 89, 85, 79, 128, 78, 89, 85, 78, 128, 78, 89, + 85, 69, 128, 78, 89, 85, 128, 78, 89, 79, 88, 128, 78, 89, 79, 84, 128, + 78, 89, 79, 80, 128, 78, 89, 79, 79, 128, 78, 89, 79, 78, 128, 78, 89, + 79, 65, 128, 78, 89, 79, 128, 78, 89, 74, 65, 128, 78, 89, 73, 88, 128, + 78, 89, 73, 84, 128, 78, 89, 73, 212, 78, 89, 73, 211, 78, 89, 73, 210, + 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, 68, 79, 128, 78, 89, 73, 78, + 128, 78, 89, 73, 73, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, 69, 84, + 128, 78, 89, 73, 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, 128, 78, + 89, 201, 78, 89, 72, 65, 128, 78, 89, 69, 84, 128, 78, 89, 69, 212, 78, + 89, 69, 78, 128, 78, 89, 69, 72, 128, 78, 89, 69, 200, 78, 89, 69, 69, + 128, 78, 89, 69, 128, 78, 89, 196, 78, 89, 67, 65, 128, 78, 89, 65, 85, + 128, 78, 89, 65, 73, 128, 78, 89, 65, 72, 128, 78, 89, 65, 69, 77, 65, + 69, 128, 78, 89, 65, 65, 128, 78, 87, 79, 79, 128, 78, 87, 79, 128, 78, + 87, 73, 73, 128, 78, 87, 73, 128, 78, 87, 69, 128, 78, 87, 65, 65, 128, + 78, 87, 65, 128, 78, 87, 128, 78, 86, 128, 78, 85, 88, 128, 78, 85, 85, + 78, 128, 78, 85, 85, 128, 78, 85, 84, 73, 76, 76, 85, 128, 78, 85, 84, + 128, 78, 85, 212, 78, 85, 82, 88, 128, 78, 85, 82, 128, 78, 85, 80, 128, + 78, 85, 79, 88, 128, 78, 85, 79, 80, 128, 78, 85, 79, 128, 78, 85, 78, + 85, 90, 128, 78, 85, 78, 85, 218, 78, 85, 78, 71, 128, 78, 85, 78, 65, + 86, 85, 212, 78, 85, 78, 65, 86, 73, 203, 78, 85, 78, 128, 78, 85, 206, + 78, 85, 77, 69, 82, 207, 78, 85, 77, 69, 82, 65, 84, 79, 210, 78, 85, 77, + 69, 82, 65, 204, 78, 85, 77, 66, 69, 82, 83, 128, 78, 85, 77, 66, 69, 82, + 128, 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 76, + 128, 78, 85, 75, 84, 65, 128, 78, 85, 69, 78, 71, 128, 78, 85, 69, 128, + 78, 85, 66, 73, 65, 206, 78, 85, 65, 69, 128, 78, 85, 49, 49, 128, 78, + 85, 49, 177, 78, 85, 48, 50, 50, 65, 128, 78, 85, 48, 50, 50, 128, 78, + 85, 48, 50, 49, 128, 78, 85, 48, 50, 48, 128, 78, 85, 48, 49, 57, 128, + 78, 85, 48, 49, 56, 65, 128, 78, 85, 48, 49, 56, 128, 78, 85, 48, 49, 55, + 128, 78, 85, 48, 49, 54, 128, 78, 85, 48, 49, 53, 128, 78, 85, 48, 49, + 52, 128, 78, 85, 48, 49, 51, 128, 78, 85, 48, 49, 50, 128, 78, 85, 48, + 49, 49, 65, 128, 78, 85, 48, 49, 49, 128, 78, 85, 48, 49, 48, 65, 128, + 78, 85, 48, 49, 48, 128, 78, 85, 48, 48, 57, 128, 78, 85, 48, 48, 56, + 128, 78, 85, 48, 48, 55, 128, 78, 85, 48, 48, 54, 128, 78, 85, 48, 48, + 53, 128, 78, 85, 48, 48, 52, 128, 78, 85, 48, 48, 51, 128, 78, 85, 48, + 48, 50, 128, 78, 85, 48, 48, 49, 128, 78, 84, 88, 73, 86, 128, 78, 84, + 85, 85, 128, 78, 84, 85, 77, 128, 78, 84, 85, 74, 128, 78, 84, 213, 78, + 84, 83, 65, 85, 128, 78, 84, 79, 81, 80, 69, 78, 128, 78, 84, 79, 71, + 128, 78, 84, 79, 199, 78, 84, 73, 69, 197, 78, 84, 72, 65, 85, 128, 78, + 84, 69, 85, 78, 71, 66, 65, 128, 78, 84, 69, 85, 77, 128, 78, 84, 69, 78, + 128, 78, 84, 69, 69, 128, 78, 84, 65, 80, 128, 78, 84, 65, 208, 78, 84, + 65, 65, 128, 78, 83, 85, 79, 212, 78, 83, 85, 78, 128, 78, 83, 85, 77, + 128, 78, 83, 79, 77, 128, 78, 83, 73, 69, 69, 84, 128, 78, 83, 73, 69, + 69, 80, 128, 78, 83, 73, 69, 69, 128, 78, 83, 72, 85, 84, 128, 78, 83, + 72, 85, 212, 78, 83, 72, 85, 79, 80, 128, 78, 83, 72, 85, 69, 128, 78, + 83, 72, 73, 69, 69, 128, 78, 83, 72, 69, 69, 128, 78, 83, 72, 65, 81, + 128, 78, 83, 72, 65, 128, 78, 83, 69, 85, 65, 69, 78, 128, 78, 83, 69, + 78, 128, 78, 83, 65, 128, 78, 82, 89, 88, 128, 78, 82, 89, 84, 128, 78, + 82, 89, 82, 88, 128, 78, 82, 89, 82, 128, 78, 82, 89, 80, 128, 78, 82, + 89, 128, 78, 82, 85, 88, 128, 78, 82, 85, 84, 128, 78, 82, 85, 82, 88, + 128, 78, 82, 85, 82, 128, 78, 82, 85, 80, 128, 78, 82, 85, 65, 128, 78, + 82, 85, 128, 78, 82, 79, 88, 128, 78, 82, 79, 80, 128, 78, 82, 79, 128, + 78, 82, 69, 88, 128, 78, 82, 69, 84, 128, 78, 82, 69, 211, 78, 82, 69, + 80, 128, 78, 82, 69, 128, 78, 82, 65, 88, 128, 78, 82, 65, 84, 128, 78, + 82, 65, 80, 128, 78, 82, 65, 128, 78, 81, 73, 71, 128, 78, 79, 89, 128, + 78, 79, 88, 128, 78, 79, 87, 67, 128, 78, 79, 86, 69, 77, 66, 69, 82, + 128, 78, 79, 84, 84, 79, 128, 78, 79, 84, 69, 83, 128, 78, 79, 84, 69, + 72, 69, 65, 68, 128, 78, 79, 84, 69, 72, 69, 65, 196, 78, 79, 84, 69, 66, + 79, 79, 75, 128, 78, 79, 84, 69, 66, 79, 79, 203, 78, 79, 84, 69, 128, + 78, 79, 84, 197, 78, 79, 84, 67, 72, 69, 196, 78, 79, 84, 67, 72, 128, + 78, 79, 84, 65, 84, 73, 79, 206, 78, 79, 84, 128, 78, 79, 212, 78, 79, + 83, 69, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 72, 69, + 82, 206, 78, 79, 82, 84, 72, 69, 65, 83, 84, 45, 80, 79, 73, 78, 84, 73, + 78, 199, 78, 79, 82, 77, 65, 204, 78, 79, 82, 68, 73, 195, 78, 79, 210, 78, 79, 80, 128, 78, 79, 79, 78, 85, 128, 78, 79, 79, 128, 78, 79, 78, 70, 79, 82, 75, 73, 78, 71, 128, 78, 79, 78, 45, 80, 79, 84, 65, 66, 76, 197, 78, 79, 78, 45, 74, 79, 73, 78, 69, 82, 128, 78, 79, 78, 45, 66, 82, - 69, 65, 75, 73, 78, 199, 78, 79, 77, 73, 78, 65, 204, 78, 79, 75, 72, 85, - 75, 128, 78, 79, 68, 69, 128, 78, 79, 65, 128, 78, 79, 45, 66, 82, 69, - 65, 203, 78, 78, 85, 85, 128, 78, 78, 85, 128, 78, 78, 79, 79, 128, 78, - 78, 79, 128, 78, 78, 78, 85, 85, 128, 78, 78, 78, 85, 128, 78, 78, 78, - 79, 79, 128, 78, 78, 78, 79, 128, 78, 78, 78, 73, 73, 128, 78, 78, 78, - 73, 128, 78, 78, 78, 69, 69, 128, 78, 78, 78, 69, 128, 78, 78, 78, 65, - 85, 128, 78, 78, 78, 65, 73, 128, 78, 78, 78, 65, 65, 128, 78, 78, 78, - 65, 128, 78, 78, 78, 128, 78, 78, 72, 65, 128, 78, 78, 71, 79, 79, 128, - 78, 78, 71, 79, 128, 78, 78, 71, 73, 73, 128, 78, 78, 71, 73, 128, 78, - 78, 71, 65, 65, 128, 78, 78, 71, 65, 128, 78, 78, 71, 128, 78, 78, 66, - 83, 80, 128, 78, 77, 128, 78, 76, 48, 50, 48, 128, 78, 76, 48, 49, 57, - 128, 78, 76, 48, 49, 56, 128, 78, 76, 48, 49, 55, 65, 128, 78, 76, 48, - 49, 55, 128, 78, 76, 48, 49, 54, 128, 78, 76, 48, 49, 53, 128, 78, 76, - 48, 49, 52, 128, 78, 76, 48, 49, 51, 128, 78, 76, 48, 49, 50, 128, 78, - 76, 48, 49, 49, 128, 78, 76, 48, 49, 48, 128, 78, 76, 48, 48, 57, 128, - 78, 76, 48, 48, 56, 128, 78, 76, 48, 48, 55, 128, 78, 76, 48, 48, 54, - 128, 78, 76, 48, 48, 53, 65, 128, 78, 76, 48, 48, 53, 128, 78, 76, 48, - 48, 52, 128, 78, 76, 48, 48, 51, 128, 78, 76, 48, 48, 50, 128, 78, 76, - 48, 48, 49, 128, 78, 76, 128, 78, 75, 79, 77, 128, 78, 75, 207, 78, 75, - 73, 78, 68, 73, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78, 74, 89, 88, - 128, 78, 74, 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74, 89, 82, 128, - 78, 74, 89, 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128, 78, 74, 85, - 82, 88, 128, 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128, 78, 74, 85, - 80, 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, 74, 85, 69, - 81, 128, 78, 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74, 79, 88, 128, - 78, 74, 79, 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79, 128, 78, 74, - 79, 128, 78, 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74, 73, 80, 128, - 78, 74, 73, 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74, 73, 69, 80, - 128, 78, 74, 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74, 73, 128, 78, - 74, 201, 78, 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128, 78, 74, 69, - 85, 65, 69, 78, 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78, 74, 69, 69, - 69, 69, 128, 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74, 69, 128, 78, - 74, 65, 81, 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77, 76, 73, 128, - 78, 74, 65, 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88, 128, 78, 73, - 84, 82, 69, 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, 71, 85, 128, - 78, 73, 80, 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69, 84, 89, 128, - 78, 73, 78, 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78, 128, 78, 73, 78, - 69, 84, 69, 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 78, - 73, 78, 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78, 68, 65, 178, 78, - 73, 77, 128, 78, 73, 205, 78, 73, 75, 72, 65, 72, 73, 84, 128, 78, 73, - 75, 65, 72, 73, 84, 128, 78, 73, 75, 65, 128, 78, 73, 72, 83, 72, 86, 65, - 83, 65, 128, 78, 73, 71, 73, 68, 65, 77, 73, 78, 128, 78, 73, 71, 73, 68, - 65, 69, 83, 72, 128, 78, 73, 71, 72, 84, 128, 78, 73, 71, 72, 212, 78, - 73, 71, 71, 65, 72, 73, 84, 65, 128, 78, 73, 69, 88, 128, 78, 73, 69, 85, - 78, 45, 84, 73, 75, 69, 85, 84, 128, 78, 73, 69, 85, 78, 45, 84, 72, 73, - 69, 85, 84, 72, 128, 78, 73, 69, 85, 78, 45, 83, 73, 79, 83, 128, 78, 73, - 69, 85, 78, 45, 82, 73, 69, 85, 76, 128, 78, 73, 69, 85, 78, 45, 80, 73, - 69, 85, 80, 128, 78, 73, 69, 85, 78, 45, 80, 65, 78, 83, 73, 79, 83, 128, - 78, 73, 69, 85, 78, 45, 75, 73, 89, 69, 79, 75, 128, 78, 73, 69, 85, 78, - 45, 72, 73, 69, 85, 72, 128, 78, 73, 69, 85, 78, 45, 67, 73, 69, 85, 67, - 128, 78, 73, 69, 85, 78, 45, 67, 72, 73, 69, 85, 67, 72, 128, 78, 73, 69, - 85, 206, 78, 73, 69, 80, 128, 78, 73, 69, 128, 78, 73, 66, 128, 78, 73, - 65, 128, 78, 73, 50, 128, 78, 72, 85, 69, 128, 78, 72, 74, 65, 128, 78, - 72, 128, 78, 71, 89, 69, 128, 78, 71, 86, 69, 128, 78, 71, 85, 85, 128, - 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78, 71, 85, 79, 128, - 78, 71, 85, 65, 69, 84, 128, 78, 71, 85, 65, 69, 128, 78, 71, 79, 88, - 128, 78, 71, 79, 85, 128, 78, 71, 79, 213, 78, 71, 79, 84, 128, 78, 71, - 79, 81, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 77, - 128, 78, 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, - 75, 89, 69, 69, 128, 78, 71, 75, 87, 65, 69, 78, 128, 78, 71, 75, 85, 80, - 128, 78, 71, 75, 85, 78, 128, 78, 71, 75, 85, 77, 128, 78, 71, 75, 85, - 69, 78, 90, 69, 85, 77, 128, 78, 71, 75, 85, 197, 78, 71, 75, 73, 78, 68, - 201, 78, 71, 75, 73, 69, 69, 128, 78, 71, 75, 69, 85, 88, 128, 78, 71, - 75, 69, 85, 82, 73, 128, 78, 71, 75, 69, 85, 65, 69, 81, 128, 78, 71, 75, - 69, 85, 65, 69, 77, 128, 78, 71, 75, 65, 81, 128, 78, 71, 75, 65, 80, - 128, 78, 71, 75, 65, 65, 77, 73, 128, 78, 71, 75, 65, 128, 78, 71, 73, - 69, 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 128, 78, 71, 72, - 65, 128, 78, 71, 71, 87, 65, 69, 78, 128, 78, 71, 71, 85, 82, 65, 69, - 128, 78, 71, 71, 85, 80, 128, 78, 71, 71, 85, 79, 81, 128, 78, 71, 71, - 85, 79, 209, 78, 71, 71, 85, 79, 78, 128, 78, 71, 71, 85, 79, 77, 128, - 78, 71, 71, 85, 77, 128, 78, 71, 71, 85, 69, 69, 84, 128, 78, 71, 71, 85, - 65, 69, 83, 72, 65, 197, 78, 71, 71, 85, 65, 69, 206, 78, 71, 71, 85, - 128, 78, 71, 71, 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, - 78, 71, 71, 69, 85, 88, 128, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 71, - 71, 69, 85, 65, 69, 128, 78, 71, 71, 69, 213, 78, 71, 71, 69, 78, 128, - 78, 71, 71, 69, 69, 84, 128, 78, 71, 71, 69, 69, 69, 69, 128, 78, 71, 71, - 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 65, 80, 128, 78, 71, 71, - 65, 65, 77, 65, 69, 128, 78, 71, 71, 65, 65, 77, 128, 78, 71, 71, 128, - 78, 71, 69, 88, 128, 78, 71, 69, 85, 82, 69, 85, 84, 128, 78, 71, 69, 80, - 128, 78, 71, 69, 78, 128, 78, 71, 69, 69, 128, 78, 71, 69, 65, 68, 65, - 76, 128, 78, 71, 65, 88, 128, 78, 71, 65, 85, 128, 78, 71, 65, 84, 128, - 78, 71, 65, 211, 78, 71, 65, 81, 128, 78, 71, 65, 80, 128, 78, 71, 65, - 78, 71, 85, 128, 78, 71, 65, 78, 128, 78, 71, 65, 73, 128, 78, 71, 65, - 72, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, 78, 70, 128, 78, 69, 88, - 212, 78, 69, 88, 128, 78, 69, 87, 83, 80, 65, 80, 69, 82, 128, 78, 69, - 87, 76, 73, 78, 69, 128, 78, 69, 87, 128, 78, 69, 85, 84, 82, 65, 204, - 78, 69, 85, 84, 69, 82, 128, 78, 69, 84, 128, 78, 69, 212, 78, 69, 83, - 84, 69, 196, 78, 69, 81, 85, 68, 65, 65, 128, 78, 69, 80, 84, 85, 78, 69, - 128, 78, 69, 80, 128, 78, 69, 79, 128, 78, 69, 207, 78, 69, 78, 65, 78, - 79, 128, 78, 69, 78, 128, 78, 69, 76, 128, 78, 69, 73, 84, 72, 69, 210, - 78, 69, 71, 65, 84, 73, 79, 206, 78, 69, 71, 65, 84, 69, 196, 78, 69, 67, - 75, 84, 73, 69, 128, 78, 69, 66, 69, 78, 83, 84, 73, 77, 77, 69, 128, 78, - 68, 85, 88, 128, 78, 68, 85, 84, 128, 78, 68, 85, 82, 88, 128, 78, 68, - 85, 82, 128, 78, 68, 85, 80, 128, 78, 68, 85, 78, 128, 78, 68, 213, 78, - 68, 79, 88, 128, 78, 68, 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, - 79, 128, 78, 68, 79, 78, 128, 78, 68, 79, 77, 66, 85, 128, 78, 68, 79, - 76, 197, 78, 68, 73, 88, 128, 78, 68, 73, 84, 128, 78, 68, 73, 81, 128, - 78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, - 68, 73, 68, 65, 128, 78, 68, 73, 65, 81, 128, 78, 68, 69, 88, 128, 78, - 68, 69, 85, 88, 128, 78, 68, 69, 85, 84, 128, 78, 68, 69, 85, 65, 69, 82, - 69, 69, 128, 78, 68, 69, 80, 128, 78, 68, 69, 69, 128, 78, 68, 69, 128, - 78, 68, 65, 88, 128, 78, 68, 65, 84, 128, 78, 68, 65, 80, 128, 78, 68, - 65, 77, 128, 78, 68, 65, 65, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 68, - 65, 65, 128, 78, 68, 65, 193, 78, 66, 89, 88, 128, 78, 66, 89, 84, 128, - 78, 66, 89, 82, 88, 128, 78, 66, 89, 82, 128, 78, 66, 89, 80, 128, 78, - 66, 89, 128, 78, 66, 85, 88, 128, 78, 66, 85, 84, 128, 78, 66, 85, 82, - 88, 128, 78, 66, 85, 82, 128, 78, 66, 85, 80, 128, 78, 66, 85, 128, 78, - 66, 79, 88, 128, 78, 66, 79, 84, 128, 78, 66, 79, 80, 128, 78, 66, 79, - 128, 78, 66, 73, 88, 128, 78, 66, 73, 84, 128, 78, 66, 73, 80, 128, 78, - 66, 73, 69, 88, 128, 78, 66, 73, 69, 80, 128, 78, 66, 73, 69, 128, 78, - 66, 73, 128, 78, 66, 72, 128, 78, 66, 65, 88, 128, 78, 66, 65, 84, 128, - 78, 66, 65, 80, 128, 78, 66, 65, 128, 78, 65, 89, 65, 78, 78, 65, 128, - 78, 65, 89, 128, 78, 65, 88, 73, 65, 206, 78, 65, 88, 128, 78, 65, 85, - 84, 72, 83, 128, 78, 65, 85, 68, 73, 218, 78, 65, 84, 85, 82, 65, 204, - 78, 65, 84, 73, 79, 78, 65, 204, 78, 65, 83, 75, 65, 80, 201, 78, 65, 83, - 72, 73, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, 78, 128, 78, 65, - 83, 65, 76, 73, 90, 65, 84, 73, 79, 206, 78, 65, 82, 82, 79, 215, 78, 65, - 82, 128, 78, 65, 81, 128, 78, 65, 79, 211, 78, 65, 78, 83, 65, 78, 65, - 81, 128, 78, 65, 78, 71, 77, 79, 78, 84, 72, 79, 128, 78, 65, 78, 68, - 128, 78, 65, 78, 65, 128, 78, 65, 77, 69, 128, 78, 65, 77, 197, 78, 65, - 77, 50, 128, 78, 65, 77, 128, 78, 65, 75, 128, 78, 65, 73, 82, 193, 78, - 65, 73, 204, 78, 65, 71, 82, 201, 78, 65, 71, 65, 82, 128, 78, 65, 71, - 65, 128, 78, 65, 71, 193, 78, 65, 71, 128, 78, 65, 199, 78, 65, 69, 128, - 78, 65, 66, 76, 65, 128, 78, 65, 65, 83, 73, 75, 89, 65, 89, 65, 128, 78, + 69, 65, 75, 73, 78, 199, 78, 79, 78, 128, 78, 79, 77, 73, 78, 65, 204, + 78, 79, 75, 72, 85, 75, 128, 78, 79, 68, 69, 128, 78, 79, 65, 128, 78, + 79, 45, 66, 82, 69, 65, 203, 78, 78, 85, 85, 128, 78, 78, 85, 128, 78, + 78, 79, 79, 128, 78, 78, 79, 128, 78, 78, 78, 85, 85, 128, 78, 78, 78, + 85, 128, 78, 78, 78, 79, 79, 128, 78, 78, 78, 79, 128, 78, 78, 78, 73, + 73, 128, 78, 78, 78, 73, 128, 78, 78, 78, 69, 69, 128, 78, 78, 78, 69, + 128, 78, 78, 78, 65, 85, 128, 78, 78, 78, 65, 73, 128, 78, 78, 78, 65, + 65, 128, 78, 78, 78, 65, 128, 78, 78, 78, 128, 78, 78, 72, 65, 128, 78, + 78, 71, 79, 79, 128, 78, 78, 71, 79, 128, 78, 78, 71, 73, 73, 128, 78, + 78, 71, 73, 128, 78, 78, 71, 65, 65, 128, 78, 78, 71, 65, 128, 78, 78, + 71, 128, 78, 78, 66, 83, 80, 128, 78, 77, 128, 78, 76, 65, 85, 128, 78, + 76, 48, 50, 48, 128, 78, 76, 48, 49, 57, 128, 78, 76, 48, 49, 56, 128, + 78, 76, 48, 49, 55, 65, 128, 78, 76, 48, 49, 55, 128, 78, 76, 48, 49, 54, + 128, 78, 76, 48, 49, 53, 128, 78, 76, 48, 49, 52, 128, 78, 76, 48, 49, + 51, 128, 78, 76, 48, 49, 50, 128, 78, 76, 48, 49, 49, 128, 78, 76, 48, + 49, 48, 128, 78, 76, 48, 48, 57, 128, 78, 76, 48, 48, 56, 128, 78, 76, + 48, 48, 55, 128, 78, 76, 48, 48, 54, 128, 78, 76, 48, 48, 53, 65, 128, + 78, 76, 48, 48, 53, 128, 78, 76, 48, 48, 52, 128, 78, 76, 48, 48, 51, + 128, 78, 76, 48, 48, 50, 128, 78, 76, 48, 48, 49, 128, 78, 76, 128, 78, + 75, 79, 77, 128, 78, 75, 207, 78, 75, 73, 78, 68, 73, 128, 78, 75, 65, + 85, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78, 74, 89, 88, 128, 78, 74, + 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74, 89, 82, 128, 78, 74, 89, + 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128, 78, 74, 85, 82, 88, 128, + 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128, 78, 74, 85, 80, 128, 78, + 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, 74, 85, 69, 81, 128, 78, + 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74, 79, 88, 128, 78, 74, 79, + 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79, 128, 78, 74, 79, 128, 78, + 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74, 73, 80, 128, 78, 74, 73, + 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74, 73, 69, 80, 128, 78, 74, + 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74, 73, 128, 78, 74, 201, 78, + 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128, 78, 74, 69, 85, 65, 69, 78, + 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78, 74, 69, 69, 69, 69, 128, + 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74, 69, 128, 78, 74, 65, 81, + 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77, 76, 73, 128, 78, 74, 65, + 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88, 128, 78, 73, 84, 82, 69, + 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, 71, 85, 128, 78, 73, 80, + 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69, 84, 89, 128, 78, 73, 78, + 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78, 128, 78, 73, 78, 69, 84, 69, + 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 78, 73, 78, + 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78, 68, 65, 178, 78, 73, 78, + 57, 128, 78, 73, 78, 128, 78, 73, 77, 128, 78, 73, 205, 78, 73, 75, 72, + 65, 72, 73, 84, 128, 78, 73, 75, 65, 72, 73, 84, 128, 78, 73, 75, 65, + 128, 78, 73, 72, 83, 72, 86, 65, 83, 65, 128, 78, 73, 71, 73, 68, 65, 77, + 73, 78, 128, 78, 73, 71, 73, 68, 65, 69, 83, 72, 128, 78, 73, 71, 72, 84, + 128, 78, 73, 71, 72, 212, 78, 73, 71, 71, 65, 72, 73, 84, 65, 128, 78, + 73, 69, 88, 128, 78, 73, 69, 85, 78, 45, 84, 73, 75, 69, 85, 84, 128, 78, + 73, 69, 85, 78, 45, 84, 72, 73, 69, 85, 84, 72, 128, 78, 73, 69, 85, 78, + 45, 83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 82, 73, 69, 85, 76, 128, + 78, 73, 69, 85, 78, 45, 80, 73, 69, 85, 80, 128, 78, 73, 69, 85, 78, 45, + 80, 65, 78, 83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 75, 73, 89, 69, + 79, 75, 128, 78, 73, 69, 85, 78, 45, 72, 73, 69, 85, 72, 128, 78, 73, 69, + 85, 78, 45, 67, 73, 69, 85, 67, 128, 78, 73, 69, 85, 78, 45, 67, 72, 73, + 69, 85, 67, 72, 128, 78, 73, 69, 85, 206, 78, 73, 69, 80, 128, 78, 73, + 69, 128, 78, 73, 66, 128, 78, 73, 65, 128, 78, 73, 50, 128, 78, 72, 85, + 69, 128, 78, 72, 74, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, 71, + 86, 69, 128, 78, 71, 85, 85, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, + 79, 84, 128, 78, 71, 85, 79, 128, 78, 71, 85, 65, 78, 128, 78, 71, 85, + 65, 69, 84, 128, 78, 71, 85, 65, 69, 128, 78, 71, 79, 88, 128, 78, 71, + 79, 85, 128, 78, 71, 79, 213, 78, 71, 79, 84, 128, 78, 71, 79, 81, 128, + 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 77, 128, 78, 71, + 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 89, 69, + 69, 128, 78, 71, 75, 87, 65, 69, 78, 128, 78, 71, 75, 85, 80, 128, 78, + 71, 75, 85, 78, 128, 78, 71, 75, 85, 77, 128, 78, 71, 75, 85, 69, 78, 90, + 69, 85, 77, 128, 78, 71, 75, 85, 197, 78, 71, 75, 73, 78, 68, 201, 78, + 71, 75, 73, 69, 69, 128, 78, 71, 75, 69, 85, 88, 128, 78, 71, 75, 69, 85, + 82, 73, 128, 78, 71, 75, 69, 85, 65, 69, 81, 128, 78, 71, 75, 69, 85, 65, + 69, 77, 128, 78, 71, 75, 65, 81, 128, 78, 71, 75, 65, 80, 128, 78, 71, + 75, 65, 65, 77, 73, 128, 78, 71, 75, 65, 128, 78, 71, 73, 69, 88, 128, + 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 128, 78, 71, 72, 65, 128, 78, + 71, 71, 87, 65, 69, 78, 128, 78, 71, 71, 85, 82, 65, 69, 128, 78, 71, 71, + 85, 80, 128, 78, 71, 71, 85, 79, 81, 128, 78, 71, 71, 85, 79, 209, 78, + 71, 71, 85, 79, 78, 128, 78, 71, 71, 85, 79, 77, 128, 78, 71, 71, 85, 77, + 128, 78, 71, 71, 85, 69, 69, 84, 128, 78, 71, 71, 85, 65, 69, 83, 72, 65, + 197, 78, 71, 71, 85, 65, 69, 206, 78, 71, 71, 85, 65, 128, 78, 71, 71, + 85, 128, 78, 71, 71, 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, + 128, 78, 71, 71, 69, 85, 88, 128, 78, 71, 71, 69, 85, 65, 69, 84, 128, + 78, 71, 71, 69, 85, 65, 69, 128, 78, 71, 71, 69, 213, 78, 71, 71, 69, 78, + 128, 78, 71, 71, 69, 69, 84, 128, 78, 71, 71, 69, 69, 69, 69, 128, 78, + 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 65, 80, 128, 78, + 71, 71, 65, 65, 77, 65, 69, 128, 78, 71, 71, 65, 65, 77, 128, 78, 71, 71, + 65, 65, 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, 85, 82, + 69, 85, 84, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, + 69, 128, 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, 65, 88, 128, 78, 71, + 65, 85, 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 81, 128, + 78, 71, 65, 80, 128, 78, 71, 65, 78, 71, 85, 128, 78, 71, 65, 78, 128, + 78, 71, 65, 73, 128, 78, 71, 65, 72, 128, 78, 71, 65, 65, 73, 128, 78, + 71, 193, 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 83, + 80, 65, 80, 69, 82, 128, 78, 69, 87, 76, 73, 78, 69, 128, 78, 69, 87, 76, + 73, 78, 197, 78, 69, 87, 128, 78, 69, 85, 84, 82, 65, 204, 78, 69, 85, + 84, 69, 82, 128, 78, 69, 84, 87, 79, 82, 75, 69, 196, 78, 69, 84, 128, + 78, 69, 212, 78, 69, 83, 84, 69, 196, 78, 69, 81, 85, 68, 65, 65, 128, + 78, 69, 80, 84, 85, 78, 69, 128, 78, 69, 80, 128, 78, 69, 79, 128, 78, + 69, 207, 78, 69, 78, 79, 69, 128, 78, 69, 78, 65, 78, 79, 128, 78, 69, + 78, 128, 78, 69, 76, 128, 78, 69, 73, 84, 72, 69, 210, 78, 69, 71, 65, + 84, 73, 79, 206, 78, 69, 71, 65, 84, 69, 196, 78, 69, 67, 75, 84, 73, 69, + 128, 78, 69, 66, 69, 78, 83, 84, 73, 77, 77, 69, 128, 78, 68, 85, 88, + 128, 78, 68, 85, 84, 128, 78, 68, 85, 82, 88, 128, 78, 68, 85, 82, 128, + 78, 68, 85, 80, 128, 78, 68, 85, 78, 128, 78, 68, 213, 78, 68, 79, 88, + 128, 78, 68, 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, 79, 128, 78, + 68, 79, 78, 128, 78, 68, 79, 77, 66, 85, 128, 78, 68, 79, 76, 197, 78, + 68, 73, 88, 128, 78, 68, 73, 84, 128, 78, 68, 73, 81, 128, 78, 68, 73, + 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73, 68, + 65, 128, 78, 68, 73, 65, 81, 128, 78, 68, 69, 88, 128, 78, 68, 69, 85, + 88, 128, 78, 68, 69, 85, 84, 128, 78, 68, 69, 85, 65, 69, 82, 69, 69, + 128, 78, 68, 69, 80, 128, 78, 68, 69, 69, 128, 78, 68, 69, 128, 78, 68, + 65, 88, 128, 78, 68, 65, 84, 128, 78, 68, 65, 80, 128, 78, 68, 65, 77, + 128, 78, 68, 65, 65, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 68, 65, 65, + 128, 78, 68, 65, 193, 78, 67, 72, 65, 85, 128, 78, 66, 89, 88, 128, 78, + 66, 89, 84, 128, 78, 66, 89, 82, 88, 128, 78, 66, 89, 82, 128, 78, 66, + 89, 80, 128, 78, 66, 89, 128, 78, 66, 85, 88, 128, 78, 66, 85, 84, 128, + 78, 66, 85, 82, 88, 128, 78, 66, 85, 82, 128, 78, 66, 85, 80, 128, 78, + 66, 85, 128, 78, 66, 79, 88, 128, 78, 66, 79, 84, 128, 78, 66, 79, 80, + 128, 78, 66, 79, 128, 78, 66, 73, 88, 128, 78, 66, 73, 84, 128, 78, 66, + 73, 80, 128, 78, 66, 73, 69, 88, 128, 78, 66, 73, 69, 80, 128, 78, 66, + 73, 69, 128, 78, 66, 73, 128, 78, 66, 72, 128, 78, 66, 65, 88, 128, 78, + 66, 65, 84, 128, 78, 66, 65, 80, 128, 78, 66, 65, 128, 78, 65, 89, 65, + 78, 78, 65, 128, 78, 65, 89, 128, 78, 65, 88, 73, 65, 206, 78, 65, 88, + 128, 78, 65, 85, 84, 72, 83, 128, 78, 65, 85, 68, 73, 218, 78, 65, 84, + 85, 82, 65, 204, 78, 65, 84, 73, 79, 78, 65, 204, 78, 65, 83, 75, 65, 80, + 201, 78, 65, 83, 72, 73, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, + 78, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, 206, 78, 65, 83, 65, + 204, 78, 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 81, 128, 78, 65, + 79, 211, 78, 65, 78, 83, 65, 78, 65, 81, 128, 78, 65, 78, 71, 77, 79, 78, + 84, 72, 79, 128, 78, 65, 78, 68, 128, 78, 65, 78, 65, 128, 78, 65, 77, + 69, 128, 78, 65, 77, 197, 78, 65, 77, 50, 128, 78, 65, 77, 128, 78, 65, + 75, 128, 78, 65, 73, 82, 193, 78, 65, 73, 204, 78, 65, 71, 82, 201, 78, + 65, 71, 65, 82, 128, 78, 65, 71, 65, 128, 78, 65, 71, 193, 78, 65, 71, + 128, 78, 65, 199, 78, 65, 69, 128, 78, 65, 66, 76, 65, 128, 78, 65, 66, + 65, 84, 65, 69, 65, 206, 78, 65, 65, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, 75, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, 73, 128, 78, 65, - 193, 78, 65, 50, 128, 78, 65, 45, 50, 128, 78, 48, 52, 50, 128, 78, 48, - 52, 49, 128, 78, 48, 52, 48, 128, 78, 48, 51, 57, 128, 78, 48, 51, 56, - 128, 78, 48, 51, 55, 65, 128, 78, 48, 51, 55, 128, 78, 48, 51, 54, 128, - 78, 48, 51, 53, 65, 128, 78, 48, 51, 53, 128, 78, 48, 51, 52, 65, 128, - 78, 48, 51, 52, 128, 78, 48, 51, 51, 65, 128, 78, 48, 51, 51, 128, 78, - 48, 51, 50, 128, 78, 48, 51, 49, 128, 78, 48, 51, 48, 128, 78, 48, 50, - 57, 128, 78, 48, 50, 56, 128, 78, 48, 50, 55, 128, 78, 48, 50, 54, 128, - 78, 48, 50, 53, 65, 128, 78, 48, 50, 53, 128, 78, 48, 50, 52, 128, 78, - 48, 50, 51, 128, 78, 48, 50, 50, 128, 78, 48, 50, 49, 128, 78, 48, 50, - 48, 128, 78, 48, 49, 57, 128, 78, 48, 49, 56, 66, 128, 78, 48, 49, 56, - 65, 128, 78, 48, 49, 56, 128, 78, 48, 49, 55, 128, 78, 48, 49, 54, 128, - 78, 48, 49, 53, 128, 78, 48, 49, 52, 128, 78, 48, 49, 51, 128, 78, 48, - 49, 50, 128, 78, 48, 49, 49, 128, 78, 48, 49, 48, 128, 78, 48, 48, 57, - 128, 78, 48, 48, 56, 128, 78, 48, 48, 55, 128, 78, 48, 48, 54, 128, 78, - 48, 48, 53, 128, 78, 48, 48, 52, 128, 78, 48, 48, 51, 128, 78, 48, 48, - 50, 128, 78, 48, 48, 49, 128, 78, 45, 67, 82, 69, 197, 78, 45, 65, 82, - 217, 77, 89, 88, 128, 77, 89, 84, 128, 77, 89, 83, 76, 73, 84, 69, 128, - 77, 89, 80, 128, 77, 89, 65, 128, 77, 89, 193, 77, 89, 128, 77, 217, 77, - 87, 79, 79, 128, 77, 87, 79, 128, 77, 87, 73, 73, 128, 77, 87, 73, 128, - 77, 87, 69, 69, 128, 77, 87, 69, 128, 77, 87, 65, 65, 128, 77, 87, 65, - 128, 77, 87, 128, 77, 215, 77, 86, 83, 128, 77, 86, 79, 80, 128, 77, 86, - 73, 128, 77, 86, 69, 85, 65, 69, 78, 71, 65, 77, 128, 77, 86, 128, 77, - 214, 77, 85, 88, 128, 77, 85, 85, 83, 73, 75, 65, 84, 79, 65, 78, 128, - 77, 85, 85, 82, 68, 72, 65, 74, 193, 77, 85, 85, 128, 77, 85, 84, 128, - 77, 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 77, 85, 83, 72, 82, 79, 79, - 77, 128, 77, 85, 83, 72, 51, 128, 77, 85, 83, 72, 179, 77, 85, 83, 72, - 128, 77, 85, 83, 200, 77, 85, 82, 88, 128, 77, 85, 82, 71, 85, 50, 128, - 77, 85, 82, 69, 128, 77, 85, 82, 68, 65, 128, 77, 85, 82, 68, 193, 77, - 85, 82, 128, 77, 85, 81, 68, 65, 77, 128, 77, 85, 80, 128, 77, 85, 79, - 88, 128, 77, 85, 79, 84, 128, 77, 85, 79, 80, 128, 77, 85, 79, 77, 65, - 69, 128, 77, 85, 79, 128, 77, 85, 78, 83, 85, 66, 128, 77, 85, 78, 65, - 72, 128, 77, 85, 76, 84, 73, 83, 69, 84, 128, 77, 85, 76, 84, 73, 83, 69, - 212, 77, 85, 76, 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 77, 85, - 76, 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 206, 77, 85, 76, 84, 73, 80, - 76, 197, 77, 85, 76, 84, 73, 79, 67, 85, 76, 65, 210, 77, 85, 76, 84, 73, - 77, 65, 80, 128, 77, 85, 76, 84, 201, 77, 85, 75, 80, 72, 82, 69, 78, 71, - 128, 77, 85, 73, 78, 128, 77, 85, 71, 83, 128, 77, 85, 71, 128, 77, 85, - 199, 77, 85, 69, 128, 77, 85, 67, 72, 128, 77, 85, 67, 200, 77, 85, 67, - 65, 65, 68, 128, 77, 85, 65, 78, 128, 77, 85, 65, 69, 128, 77, 85, 45, - 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, 65, 128, 77, - 79, 89, 65, 73, 128, 77, 79, 88, 128, 77, 79, 86, 73, 197, 77, 79, 86, - 69, 196, 77, 79, 85, 84, 72, 128, 77, 79, 85, 84, 200, 77, 79, 85, 83, - 69, 128, 77, 79, 85, 83, 197, 77, 79, 85, 78, 84, 65, 73, 78, 83, 128, - 77, 79, 85, 78, 84, 65, 73, 78, 128, 77, 79, 85, 78, 84, 65, 73, 206, 77, - 79, 85, 78, 212, 77, 79, 85, 78, 68, 128, 77, 79, 85, 78, 196, 77, 79, - 84, 72, 69, 82, 128, 77, 79, 84, 128, 77, 79, 82, 84, 85, 85, 77, 128, - 77, 79, 82, 84, 65, 82, 128, 77, 79, 82, 80, 72, 79, 76, 79, 71, 73, 67, - 65, 204, 77, 79, 82, 78, 73, 78, 71, 128, 77, 79, 80, 128, 77, 79, 79, - 83, 69, 45, 67, 82, 69, 197, 77, 79, 79, 78, 128, 77, 79, 79, 206, 77, - 79, 79, 77, 80, 85, 81, 128, 77, 79, 79, 77, 69, 85, 84, 128, 77, 79, 79, - 128, 77, 79, 78, 84, 73, 69, 69, 78, 128, 77, 79, 78, 84, 72, 128, 77, - 79, 78, 84, 200, 77, 79, 78, 83, 84, 69, 82, 128, 77, 79, 78, 79, 83, 84, - 65, 66, 76, 197, 77, 79, 78, 79, 83, 80, 65, 67, 197, 77, 79, 78, 79, 82, - 65, 73, 76, 128, 77, 79, 78, 79, 71, 82, 65, 80, 200, 77, 79, 78, 79, 71, - 82, 65, 77, 77, 79, 211, 77, 79, 78, 79, 71, 82, 65, 205, 77, 79, 78, 79, - 70, 79, 78, 73, 65, 83, 128, 77, 79, 78, 79, 67, 85, 76, 65, 210, 77, 79, - 78, 75, 69, 89, 128, 77, 79, 78, 75, 69, 217, 77, 79, 78, 73, 128, 77, - 79, 78, 71, 75, 69, 85, 65, 69, 81, 128, 77, 79, 78, 69, 217, 77, 79, 78, - 128, 77, 79, 206, 77, 79, 76, 128, 77, 79, 72, 65, 77, 77, 65, 196, 77, - 79, 68, 85, 76, 207, 77, 79, 68, 69, 83, 84, 89, 128, 77, 79, 68, 69, 76, - 83, 128, 77, 79, 68, 69, 76, 128, 77, 79, 68, 69, 128, 77, 79, 66, 73, - 76, 197, 77, 79, 65, 128, 77, 207, 77, 78, 89, 65, 205, 77, 78, 65, 83, - 128, 77, 77, 83, 80, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, 76, - 128, 77, 75, 80, 65, 82, 65, 209, 77, 73, 88, 128, 77, 73, 84, 128, 77, - 73, 83, 82, 65, 128, 77, 73, 82, 73, 66, 65, 65, 82, 85, 128, 77, 73, 82, - 73, 128, 77, 73, 82, 69, 68, 128, 77, 73, 80, 128, 77, 73, 78, 89, 128, - 77, 73, 78, 85, 83, 45, 79, 82, 45, 80, 76, 85, 211, 77, 73, 78, 85, 83, - 128, 77, 73, 78, 73, 83, 84, 69, 82, 128, 77, 73, 78, 73, 77, 65, 128, - 77, 73, 78, 73, 68, 73, 83, 67, 128, 77, 73, 78, 73, 66, 85, 83, 128, 77, - 73, 77, 69, 128, 77, 73, 77, 128, 77, 73, 76, 76, 73, 79, 78, 211, 77, - 73, 76, 76, 69, 84, 128, 77, 73, 76, 76, 197, 77, 73, 76, 204, 77, 73, - 76, 75, 217, 77, 73, 76, 128, 77, 73, 75, 85, 82, 79, 78, 128, 77, 73, - 75, 82, 79, 206, 77, 73, 75, 82, 73, 128, 77, 73, 73, 78, 128, 77, 73, - 73, 128, 77, 73, 199, 77, 73, 69, 88, 128, 77, 73, 69, 85, 77, 45, 84, - 73, 75, 69, 85, 84, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, 71, 83, - 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, 71, 78, 73, 69, - 85, 78, 128, 77, 73, 69, 85, 77, 45, 82, 73, 69, 85, 76, 128, 77, 73, 69, - 85, 77, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 77, 73, 69, 85, - 77, 45, 80, 73, 69, 85, 80, 128, 77, 73, 69, 85, 77, 45, 80, 65, 78, 83, - 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 78, 73, 69, 85, 78, 128, 77, 73, - 69, 85, 77, 45, 67, 73, 69, 85, 67, 128, 77, 73, 69, 85, 77, 45, 67, 72, - 73, 69, 85, 67, 72, 128, 77, 73, 69, 85, 205, 77, 73, 69, 80, 128, 77, - 73, 69, 69, 128, 77, 73, 69, 128, 77, 73, 68, 76, 73, 78, 197, 77, 73, - 68, 68, 76, 69, 45, 87, 69, 76, 83, 200, 77, 73, 68, 68, 76, 197, 77, 73, + 193, 78, 65, 52, 128, 78, 65, 50, 128, 78, 65, 45, 50, 128, 78, 48, 52, + 50, 128, 78, 48, 52, 49, 128, 78, 48, 52, 48, 128, 78, 48, 51, 57, 128, + 78, 48, 51, 56, 128, 78, 48, 51, 55, 65, 128, 78, 48, 51, 55, 128, 78, + 48, 51, 54, 128, 78, 48, 51, 53, 65, 128, 78, 48, 51, 53, 128, 78, 48, + 51, 52, 65, 128, 78, 48, 51, 52, 128, 78, 48, 51, 51, 65, 128, 78, 48, + 51, 51, 128, 78, 48, 51, 50, 128, 78, 48, 51, 49, 128, 78, 48, 51, 48, + 128, 78, 48, 50, 57, 128, 78, 48, 50, 56, 128, 78, 48, 50, 55, 128, 78, + 48, 50, 54, 128, 78, 48, 50, 53, 65, 128, 78, 48, 50, 53, 128, 78, 48, + 50, 52, 128, 78, 48, 50, 51, 128, 78, 48, 50, 50, 128, 78, 48, 50, 49, + 128, 78, 48, 50, 48, 128, 78, 48, 49, 57, 128, 78, 48, 49, 56, 66, 128, + 78, 48, 49, 56, 65, 128, 78, 48, 49, 56, 128, 78, 48, 49, 55, 128, 78, + 48, 49, 54, 128, 78, 48, 49, 53, 128, 78, 48, 49, 52, 128, 78, 48, 49, + 51, 128, 78, 48, 49, 50, 128, 78, 48, 49, 49, 128, 78, 48, 49, 48, 128, + 78, 48, 48, 57, 128, 78, 48, 48, 56, 128, 78, 48, 48, 55, 128, 78, 48, + 48, 54, 128, 78, 48, 48, 53, 128, 78, 48, 48, 52, 128, 78, 48, 48, 51, + 128, 78, 48, 48, 50, 128, 78, 48, 48, 49, 128, 78, 45, 67, 82, 69, 197, + 78, 45, 65, 82, 217, 77, 89, 88, 128, 77, 89, 84, 128, 77, 89, 83, 76, + 73, 84, 69, 128, 77, 89, 80, 128, 77, 89, 65, 128, 77, 89, 193, 77, 89, + 128, 77, 217, 77, 87, 79, 79, 128, 77, 87, 79, 128, 77, 87, 73, 73, 128, + 77, 87, 73, 128, 77, 87, 69, 69, 128, 77, 87, 69, 128, 77, 87, 65, 65, + 128, 77, 87, 65, 128, 77, 87, 128, 77, 215, 77, 86, 83, 128, 77, 86, 79, + 80, 128, 77, 86, 73, 128, 77, 86, 69, 85, 65, 69, 78, 71, 65, 77, 128, + 77, 86, 128, 77, 214, 77, 85, 88, 128, 77, 85, 85, 83, 73, 75, 65, 84, + 79, 65, 78, 128, 77, 85, 85, 82, 68, 72, 65, 74, 193, 77, 85, 85, 128, + 77, 85, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 77, 85, + 83, 72, 82, 79, 79, 77, 128, 77, 85, 83, 72, 51, 128, 77, 85, 83, 72, + 179, 77, 85, 83, 72, 128, 77, 85, 83, 200, 77, 85, 83, 128, 77, 85, 82, + 88, 128, 77, 85, 82, 71, 85, 50, 128, 77, 85, 82, 69, 128, 77, 85, 82, + 68, 65, 128, 77, 85, 82, 68, 193, 77, 85, 82, 128, 77, 85, 81, 68, 65, + 77, 128, 77, 85, 80, 128, 77, 85, 79, 88, 128, 77, 85, 79, 84, 128, 77, + 85, 79, 80, 128, 77, 85, 79, 77, 65, 69, 128, 77, 85, 79, 128, 77, 85, + 78, 83, 85, 66, 128, 77, 85, 78, 65, 72, 128, 77, 85, 78, 128, 77, 85, + 76, 84, 73, 83, 69, 84, 128, 77, 85, 76, 84, 73, 83, 69, 212, 77, 85, 76, + 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 77, 85, 76, 84, 73, 80, + 76, 73, 67, 65, 84, 73, 79, 206, 77, 85, 76, 84, 73, 80, 76, 197, 77, 85, + 76, 84, 73, 79, 67, 85, 76, 65, 210, 77, 85, 76, 84, 73, 77, 65, 80, 128, + 77, 85, 76, 84, 201, 77, 85, 75, 80, 72, 82, 69, 78, 71, 128, 77, 85, 73, + 78, 128, 77, 85, 71, 83, 128, 77, 85, 71, 128, 77, 85, 199, 77, 85, 69, + 78, 128, 77, 85, 69, 128, 77, 85, 67, 72, 128, 77, 85, 67, 200, 77, 85, + 67, 65, 65, 68, 128, 77, 85, 65, 83, 128, 77, 85, 65, 78, 128, 77, 85, + 65, 69, 128, 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, + 128, 77, 82, 207, 77, 80, 65, 128, 77, 79, 89, 65, 73, 128, 77, 79, 88, + 128, 77, 79, 86, 73, 197, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, + 77, 79, 85, 84, 200, 77, 79, 85, 83, 69, 128, 77, 79, 85, 83, 197, 77, + 79, 85, 78, 84, 65, 73, 78, 83, 128, 77, 79, 85, 78, 84, 65, 73, 78, 128, + 77, 79, 85, 78, 84, 65, 73, 206, 77, 79, 85, 78, 212, 77, 79, 85, 78, 68, + 128, 77, 79, 85, 78, 196, 77, 79, 84, 79, 82, 87, 65, 89, 128, 77, 79, + 84, 79, 82, 67, 89, 67, 76, 69, 128, 77, 79, 84, 79, 210, 77, 79, 84, 72, + 69, 82, 128, 77, 79, 84, 128, 77, 79, 82, 84, 85, 85, 77, 128, 77, 79, + 82, 84, 65, 82, 128, 77, 79, 82, 80, 72, 79, 76, 79, 71, 73, 67, 65, 204, + 77, 79, 82, 78, 73, 78, 71, 128, 77, 79, 80, 128, 77, 79, 79, 83, 69, 45, + 67, 82, 69, 197, 77, 79, 79, 78, 128, 77, 79, 79, 206, 77, 79, 79, 77, + 80, 85, 81, 128, 77, 79, 79, 77, 69, 85, 84, 128, 77, 79, 79, 68, 128, + 77, 79, 79, 196, 77, 79, 79, 128, 77, 79, 78, 84, 73, 69, 69, 78, 128, + 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78, 83, 84, 69, 82, + 128, 77, 79, 78, 79, 83, 84, 65, 66, 76, 197, 77, 79, 78, 79, 83, 80, 65, + 67, 197, 77, 79, 78, 79, 82, 65, 73, 76, 128, 77, 79, 78, 79, 71, 82, 65, + 80, 200, 77, 79, 78, 79, 71, 82, 65, 77, 77, 79, 211, 77, 79, 78, 79, 71, + 82, 65, 205, 77, 79, 78, 79, 70, 79, 78, 73, 65, 83, 128, 77, 79, 78, 79, + 67, 85, 76, 65, 210, 77, 79, 78, 75, 69, 89, 128, 77, 79, 78, 75, 69, + 217, 77, 79, 78, 73, 128, 77, 79, 78, 71, 75, 69, 85, 65, 69, 81, 128, + 77, 79, 78, 69, 217, 77, 79, 78, 128, 77, 79, 206, 77, 79, 76, 128, 77, + 79, 72, 65, 77, 77, 65, 196, 77, 79, 68, 85, 76, 207, 77, 79, 68, 201, + 77, 79, 68, 69, 83, 84, 89, 128, 77, 79, 68, 69, 77, 128, 77, 79, 68, 69, + 76, 83, 128, 77, 79, 68, 69, 76, 128, 77, 79, 68, 69, 128, 77, 79, 66, + 73, 76, 197, 77, 79, 65, 128, 77, 207, 77, 78, 89, 65, 205, 77, 78, 65, + 83, 128, 77, 77, 83, 80, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, + 76, 128, 77, 75, 80, 65, 82, 65, 209, 77, 73, 88, 128, 77, 73, 84, 128, + 77, 73, 83, 82, 65, 128, 77, 73, 82, 73, 66, 65, 65, 82, 85, 128, 77, 73, + 82, 73, 128, 77, 73, 82, 69, 68, 128, 77, 73, 80, 128, 77, 73, 78, 89, + 128, 77, 73, 78, 85, 83, 45, 79, 82, 45, 80, 76, 85, 211, 77, 73, 78, 85, + 83, 128, 77, 73, 78, 73, 83, 84, 69, 82, 128, 77, 73, 78, 73, 77, 73, 90, + 69, 128, 77, 73, 78, 73, 77, 65, 128, 77, 73, 78, 73, 68, 73, 83, 67, + 128, 77, 73, 78, 73, 66, 85, 83, 128, 77, 73, 77, 69, 128, 77, 73, 77, + 128, 77, 73, 76, 76, 73, 79, 78, 83, 128, 77, 73, 76, 76, 73, 79, 78, + 211, 77, 73, 76, 76, 69, 84, 128, 77, 73, 76, 76, 197, 77, 73, 76, 204, + 77, 73, 76, 75, 217, 77, 73, 76, 73, 84, 65, 82, 217, 77, 73, 76, 128, + 77, 73, 75, 85, 82, 79, 78, 128, 77, 73, 75, 82, 79, 206, 77, 73, 75, 82, + 73, 128, 77, 73, 73, 78, 128, 77, 73, 73, 128, 77, 73, 199, 77, 73, 69, + 88, 128, 77, 73, 69, 85, 77, 45, 84, 73, 75, 69, 85, 84, 128, 77, 73, 69, + 85, 77, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, + 45, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, + 82, 73, 69, 85, 76, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 45, + 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 128, 77, + 73, 69, 85, 77, 45, 80, 65, 78, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, + 45, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 67, 73, 69, 85, 67, + 128, 77, 73, 69, 85, 77, 45, 67, 72, 73, 69, 85, 67, 72, 128, 77, 73, 69, + 85, 205, 77, 73, 69, 80, 128, 77, 73, 69, 69, 128, 77, 73, 69, 128, 77, + 73, 68, 76, 73, 78, 197, 77, 73, 68, 68, 76, 69, 45, 87, 69, 76, 83, 200, + 77, 73, 68, 68, 76, 197, 77, 73, 68, 45, 76, 69, 86, 69, 204, 77, 73, 196, 77, 73, 67, 82, 79, 83, 67, 79, 80, 69, 128, 77, 73, 67, 82, 79, 80, 72, 79, 78, 69, 128, 77, 73, 67, 82, 207, 77, 73, 67, 210, 77, 72, 90, 128, 77, 72, 65, 128, 77, 72, 128, 77, 71, 85, 88, 128, 77, 71, 85, 84, @@ -2018,161 +2115,219 @@ static unsigned char lexicon[] = { 77, 69, 82, 79, 73, 84, 73, 195, 77, 69, 82, 75, 72, 65, 128, 77, 69, 82, 75, 72, 193, 77, 69, 82, 73, 68, 73, 65, 78, 83, 128, 77, 69, 82, 73, 128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, 69, - 82, 67, 85, 82, 217, 77, 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, 77, - 69, 77, 79, 128, 77, 69, 77, 66, 69, 82, 83, 72, 73, 80, 128, 77, 69, 77, - 66, 69, 82, 128, 77, 69, 77, 66, 69, 210, 77, 69, 77, 45, 81, 79, 80, 72, - 128, 77, 69, 77, 128, 77, 69, 205, 77, 69, 76, 79, 68, 73, 195, 77, 69, - 76, 73, 75, 128, 77, 69, 73, 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, - 128, 77, 69, 71, 65, 80, 72, 79, 78, 69, 128, 77, 69, 71, 65, 76, 73, - 128, 77, 69, 69, 84, 79, 82, 85, 128, 77, 69, 69, 84, 128, 77, 69, 69, - 77, 85, 128, 77, 69, 69, 77, 128, 77, 69, 69, 69, 69, 128, 77, 69, 68, + 82, 67, 85, 82, 217, 77, 69, 78, 79, 69, 128, 77, 69, 78, 68, 85, 84, + 128, 77, 69, 78, 128, 77, 69, 77, 79, 128, 77, 69, 77, 66, 69, 82, 83, + 72, 73, 80, 128, 77, 69, 77, 66, 69, 82, 128, 77, 69, 77, 66, 69, 210, + 77, 69, 77, 45, 81, 79, 80, 72, 128, 77, 69, 77, 128, 77, 69, 205, 77, + 69, 76, 79, 68, 73, 195, 77, 69, 76, 73, 75, 128, 77, 69, 73, 90, 73, + 128, 77, 69, 71, 65, 84, 79, 78, 128, 77, 69, 71, 65, 80, 72, 79, 78, 69, + 128, 77, 69, 71, 65, 76, 73, 128, 77, 69, 69, 84, 79, 82, 85, 128, 77, + 69, 69, 84, 69, 201, 77, 69, 69, 84, 128, 77, 69, 69, 77, 85, 128, 77, + 69, 69, 77, 128, 77, 69, 69, 202, 77, 69, 69, 69, 69, 128, 77, 69, 68, 73, 85, 77, 128, 77, 69, 68, 73, 85, 205, 77, 69, 68, 73, 67, 73, 78, 69, - 128, 77, 69, 68, 73, 67, 65, 204, 77, 69, 65, 84, 128, 77, 69, 65, 212, - 77, 69, 65, 83, 85, 82, 69, 196, 77, 69, 65, 83, 85, 82, 69, 128, 77, 69, - 65, 83, 85, 82, 197, 77, 68, 85, 206, 77, 196, 77, 67, 72, 213, 77, 67, - 72, 65, 206, 77, 195, 77, 66, 85, 79, 81, 128, 77, 66, 85, 79, 128, 77, - 66, 85, 69, 128, 77, 66, 85, 65, 69, 77, 128, 77, 66, 85, 65, 69, 128, - 77, 66, 79, 79, 128, 77, 66, 79, 128, 77, 66, 73, 84, 128, 77, 66, 73, - 212, 77, 66, 73, 82, 73, 69, 69, 78, 128, 77, 66, 73, 128, 77, 66, 69, - 85, 88, 128, 77, 66, 69, 85, 82, 73, 128, 77, 66, 69, 85, 77, 128, 77, - 66, 69, 82, 65, 69, 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 75, 69, 69, - 84, 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 81, 128, 77, - 66, 65, 78, 89, 73, 128, 77, 66, 65, 65, 82, 65, 69, 128, 77, 66, 65, 65, - 75, 69, 84, 128, 77, 66, 65, 65, 128, 77, 66, 65, 193, 77, 66, 193, 77, - 66, 52, 128, 77, 66, 51, 128, 77, 66, 50, 128, 77, 66, 128, 77, 194, 77, - 65, 89, 65, 78, 78, 65, 128, 77, 65, 89, 128, 77, 65, 88, 73, 77, 65, - 128, 77, 65, 88, 128, 77, 65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, - 77, 65, 84, 82, 73, 88, 128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, - 65, 84, 128, 77, 65, 83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, - 83, 83, 65, 71, 69, 128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, - 77, 65, 83, 72, 70, 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, - 67, 85, 76, 73, 78, 197, 77, 65, 82, 89, 128, 77, 65, 82, 85, 75, 85, - 128, 77, 65, 82, 84, 89, 82, 73, 193, 77, 65, 82, 82, 89, 73, 78, 199, - 77, 65, 82, 82, 73, 65, 71, 197, 77, 65, 82, 75, 69, 82, 128, 77, 65, 82, - 75, 45, 52, 128, 77, 65, 82, 75, 45, 51, 128, 77, 65, 82, 75, 45, 50, - 128, 77, 65, 82, 75, 45, 49, 128, 77, 65, 82, 69, 128, 77, 65, 82, 67, - 72, 128, 77, 65, 82, 67, 65, 84, 79, 45, 83, 84, 65, 67, 67, 65, 84, 79, - 128, 77, 65, 82, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65, 83, 73, 84, 69, - 128, 77, 65, 82, 66, 85, 84, 65, 128, 77, 65, 82, 66, 85, 84, 193, 77, - 65, 82, 128, 77, 65, 81, 65, 70, 128, 77, 65, 81, 128, 77, 65, 80, 76, - 197, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, 65, 79, 128, 77, 65, 78, - 83, 89, 79, 78, 128, 77, 65, 78, 83, 85, 65, 69, 128, 77, 65, 78, 78, 65, - 218, 77, 65, 78, 78, 65, 128, 77, 65, 78, 71, 65, 76, 65, 77, 128, 77, - 65, 78, 68, 65, 73, 76, 73, 78, 199, 77, 65, 78, 68, 65, 73, 195, 77, 65, - 78, 67, 72, 213, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, 65, 76, 84, 69, - 83, 197, 77, 65, 76, 69, 69, 82, 73, 128, 77, 65, 76, 69, 128, 77, 65, - 76, 197, 77, 65, 76, 65, 75, 79, 206, 77, 65, 75, 83, 85, 82, 65, 128, - 77, 65, 75, 83, 85, 82, 193, 77, 65, 73, 90, 69, 128, 77, 65, 73, 89, 65, - 77, 79, 75, 128, 77, 65, 73, 84, 65, 73, 75, 72, 85, 128, 77, 65, 73, 82, - 85, 128, 77, 65, 73, 77, 85, 65, 78, 128, 77, 65, 73, 77, 65, 76, 65, 73, + 128, 77, 69, 68, 73, 67, 65, 204, 77, 69, 68, 65, 76, 128, 77, 69, 65, + 84, 128, 77, 69, 65, 212, 77, 69, 65, 83, 85, 82, 69, 196, 77, 69, 65, + 83, 85, 82, 69, 128, 77, 69, 65, 83, 85, 82, 197, 77, 68, 85, 206, 77, + 196, 77, 67, 72, 213, 77, 67, 72, 65, 206, 77, 195, 77, 66, 85, 85, 128, + 77, 66, 85, 79, 81, 128, 77, 66, 85, 79, 128, 77, 66, 85, 69, 128, 77, + 66, 85, 65, 69, 77, 128, 77, 66, 85, 65, 69, 128, 77, 66, 79, 79, 128, + 77, 66, 79, 128, 77, 66, 73, 84, 128, 77, 66, 73, 212, 77, 66, 73, 82, + 73, 69, 69, 78, 128, 77, 66, 73, 128, 77, 66, 69, 85, 88, 128, 77, 66, + 69, 85, 82, 73, 128, 77, 66, 69, 85, 77, 128, 77, 66, 69, 82, 65, 69, + 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 75, 69, 69, 84, 128, 77, 66, + 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 81, 128, 77, 66, 65, 78, 89, + 73, 128, 77, 66, 65, 65, 82, 65, 69, 128, 77, 66, 65, 65, 75, 69, 84, + 128, 77, 66, 65, 65, 128, 77, 66, 65, 193, 77, 66, 193, 77, 66, 52, 128, + 77, 66, 51, 128, 77, 66, 50, 128, 77, 66, 128, 77, 194, 77, 65, 89, 69, + 203, 77, 65, 89, 65, 78, 78, 65, 128, 77, 65, 89, 128, 77, 65, 88, 73, + 77, 73, 90, 69, 128, 77, 65, 88, 73, 77, 65, 128, 77, 65, 88, 128, 77, + 65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, 77, 65, 84, 82, 73, 88, + 128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, 65, 84, 128, 77, 65, + 83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, 83, 83, 65, 71, 69, + 128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, 77, 65, 83, 72, 70, + 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, 78, + 197, 77, 65, 82, 89, 128, 77, 65, 82, 87, 65, 82, 201, 77, 65, 82, 85, + 75, 85, 128, 77, 65, 82, 84, 89, 82, 73, 193, 77, 65, 82, 82, 89, 73, 78, + 199, 77, 65, 82, 82, 73, 65, 71, 197, 77, 65, 82, 75, 211, 77, 65, 82, + 75, 69, 82, 128, 77, 65, 82, 75, 45, 52, 128, 77, 65, 82, 75, 45, 51, + 128, 77, 65, 82, 75, 45, 50, 128, 77, 65, 82, 75, 45, 49, 128, 77, 65, + 82, 69, 128, 77, 65, 82, 67, 72, 128, 77, 65, 82, 67, 65, 84, 79, 45, 83, + 84, 65, 67, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65, 84, 79, 128, 77, 65, + 82, 67, 65, 83, 73, 84, 69, 128, 77, 65, 82, 66, 85, 84, 65, 128, 77, 65, + 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, 65, 70, 128, 77, 65, + 81, 128, 77, 65, 80, 76, 197, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, + 65, 79, 128, 77, 65, 78, 84, 69, 76, 80, 73, 69, 67, 197, 77, 65, 78, 83, + 89, 79, 78, 128, 77, 65, 78, 83, 85, 65, 69, 128, 77, 65, 78, 78, 65, + 218, 77, 65, 78, 78, 65, 128, 77, 65, 78, 73, 67, 72, 65, 69, 65, 206, + 77, 65, 78, 71, 65, 76, 65, 77, 128, 77, 65, 78, 68, 65, 73, 76, 73, 78, + 199, 77, 65, 78, 68, 65, 73, 195, 77, 65, 78, 67, 72, 213, 77, 65, 78, + 65, 212, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, 65, 76, 84, 69, 83, + 197, 77, 65, 76, 69, 69, 82, 73, 128, 77, 65, 76, 69, 128, 77, 65, 76, + 197, 77, 65, 76, 65, 75, 79, 206, 77, 65, 75, 83, 85, 82, 65, 128, 77, + 65, 75, 83, 85, 82, 193, 77, 65, 73, 90, 69, 128, 77, 65, 73, 89, 65, 77, + 79, 75, 128, 77, 65, 73, 84, 65, 73, 75, 72, 85, 128, 77, 65, 73, 82, 85, + 128, 77, 65, 73, 77, 85, 65, 78, 128, 77, 65, 73, 77, 65, 76, 65, 73, 128, 77, 65, 73, 76, 66, 79, 216, 77, 65, 73, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78, 128, 77, 65, 73, 128, 77, 65, 72, 74, 79, 78, 199, 77, 65, 72, 72, 65, 128, 77, 65, 72, 65, 80, 82, 65, 78, 65, 128, 77, 65, - 72, 65, 80, 65, 75, 72, 128, 77, 65, 72, 65, 65, 80, 82, 65, 65, 78, 193, - 77, 65, 72, 128, 77, 65, 71, 78, 73, 70, 89, 73, 78, 199, 77, 65, 69, 83, - 73, 128, 77, 65, 69, 78, 89, 73, 128, 77, 65, 69, 78, 74, 69, 84, 128, - 77, 65, 69, 77, 86, 69, 85, 88, 128, 77, 65, 69, 77, 75, 80, 69, 78, 128, - 77, 65, 69, 77, 71, 66, 73, 69, 69, 128, 77, 65, 69, 77, 66, 71, 66, 73, - 69, 69, 128, 77, 65, 69, 77, 66, 65, 128, 77, 65, 69, 77, 128, 77, 65, - 69, 76, 69, 69, 128, 77, 65, 69, 75, 69, 85, 80, 128, 77, 65, 68, 89, 65, - 128, 77, 65, 68, 85, 128, 77, 65, 68, 68, 65, 200, 77, 65, 68, 68, 65, - 128, 77, 65, 68, 68, 193, 77, 65, 67, 82, 79, 78, 45, 71, 82, 65, 86, 69, - 128, 77, 65, 67, 82, 79, 78, 45, 66, 82, 69, 86, 69, 128, 77, 65, 67, 82, - 79, 78, 45, 65, 67, 85, 84, 69, 128, 77, 65, 67, 82, 79, 78, 128, 77, 65, - 67, 82, 79, 206, 77, 65, 67, 72, 73, 78, 69, 128, 77, 65, 65, 89, 89, 65, - 65, 128, 77, 65, 65, 73, 128, 77, 65, 65, 128, 77, 65, 50, 128, 77, 48, - 52, 52, 128, 77, 48, 52, 51, 128, 77, 48, 52, 50, 128, 77, 48, 52, 49, - 128, 77, 48, 52, 48, 65, 128, 77, 48, 52, 48, 128, 77, 48, 51, 57, 128, - 77, 48, 51, 56, 128, 77, 48, 51, 55, 128, 77, 48, 51, 54, 128, 77, 48, - 51, 53, 128, 77, 48, 51, 52, 128, 77, 48, 51, 51, 66, 128, 77, 48, 51, - 51, 65, 128, 77, 48, 51, 51, 128, 77, 48, 51, 50, 128, 77, 48, 51, 49, - 65, 128, 77, 48, 51, 49, 128, 77, 48, 51, 48, 128, 77, 48, 50, 57, 128, - 77, 48, 50, 56, 65, 128, 77, 48, 50, 56, 128, 77, 48, 50, 55, 128, 77, - 48, 50, 54, 128, 77, 48, 50, 53, 128, 77, 48, 50, 52, 65, 128, 77, 48, - 50, 52, 128, 77, 48, 50, 51, 128, 77, 48, 50, 50, 65, 128, 77, 48, 50, - 50, 128, 77, 48, 50, 49, 128, 77, 48, 50, 48, 128, 77, 48, 49, 57, 128, - 77, 48, 49, 56, 128, 77, 48, 49, 55, 65, 128, 77, 48, 49, 55, 128, 77, - 48, 49, 54, 65, 128, 77, 48, 49, 54, 128, 77, 48, 49, 53, 65, 128, 77, - 48, 49, 53, 128, 77, 48, 49, 52, 128, 77, 48, 49, 51, 128, 77, 48, 49, + 72, 65, 80, 65, 75, 72, 128, 77, 65, 72, 65, 74, 65, 78, 201, 77, 65, 72, + 65, 65, 80, 82, 65, 65, 78, 193, 77, 65, 72, 128, 77, 65, 71, 78, 73, 70, + 89, 73, 78, 199, 77, 65, 69, 83, 73, 128, 77, 65, 69, 78, 89, 73, 128, + 77, 65, 69, 78, 74, 69, 84, 128, 77, 65, 69, 77, 86, 69, 85, 88, 128, 77, + 65, 69, 77, 75, 80, 69, 78, 128, 77, 65, 69, 77, 71, 66, 73, 69, 69, 128, + 77, 65, 69, 77, 66, 71, 66, 73, 69, 69, 128, 77, 65, 69, 77, 66, 65, 128, + 77, 65, 69, 77, 128, 77, 65, 69, 76, 69, 69, 128, 77, 65, 69, 75, 69, 85, + 80, 128, 77, 65, 68, 89, 65, 128, 77, 65, 68, 85, 128, 77, 65, 68, 68, + 65, 200, 77, 65, 68, 68, 65, 128, 77, 65, 68, 68, 193, 77, 65, 67, 82, + 79, 78, 45, 71, 82, 65, 86, 69, 128, 77, 65, 67, 82, 79, 78, 45, 66, 82, + 69, 86, 69, 128, 77, 65, 67, 82, 79, 78, 45, 65, 67, 85, 84, 69, 128, 77, + 65, 67, 82, 79, 78, 128, 77, 65, 67, 82, 79, 206, 77, 65, 67, 72, 73, 78, + 69, 128, 77, 65, 65, 89, 89, 65, 65, 128, 77, 65, 65, 73, 128, 77, 65, + 65, 128, 77, 65, 50, 128, 77, 49, 57, 183, 77, 49, 57, 182, 77, 49, 57, + 181, 77, 49, 57, 180, 77, 49, 57, 179, 77, 49, 57, 178, 77, 49, 57, 177, + 77, 49, 57, 176, 77, 49, 56, 185, 77, 49, 56, 184, 77, 49, 56, 183, 77, + 49, 56, 182, 77, 49, 56, 181, 77, 49, 56, 180, 77, 49, 56, 179, 77, 49, + 56, 178, 77, 49, 56, 177, 77, 49, 56, 176, 77, 49, 55, 185, 77, 49, 55, + 184, 77, 49, 55, 183, 77, 49, 55, 182, 77, 49, 55, 181, 77, 49, 55, 180, + 77, 49, 55, 179, 77, 49, 55, 178, 77, 49, 55, 177, 77, 49, 55, 176, 77, + 49, 54, 185, 77, 49, 54, 184, 77, 49, 54, 183, 77, 49, 54, 182, 77, 49, + 54, 181, 77, 49, 54, 180, 77, 49, 54, 179, 77, 49, 54, 178, 77, 49, 54, + 177, 77, 49, 54, 176, 77, 49, 53, 185, 77, 49, 53, 184, 77, 49, 53, 183, + 77, 49, 53, 182, 77, 49, 53, 181, 77, 49, 53, 180, 77, 49, 53, 179, 77, + 49, 53, 178, 77, 49, 53, 177, 77, 49, 53, 176, 77, 49, 52, 185, 77, 49, + 52, 184, 77, 49, 52, 183, 77, 49, 52, 182, 77, 49, 52, 181, 77, 49, 52, + 180, 77, 49, 52, 179, 77, 49, 52, 178, 77, 49, 52, 177, 77, 49, 52, 176, + 77, 49, 51, 185, 77, 49, 51, 184, 77, 49, 51, 183, 77, 49, 51, 182, 77, + 49, 51, 181, 77, 49, 51, 180, 77, 49, 51, 179, 77, 49, 51, 178, 77, 49, + 51, 177, 77, 49, 51, 176, 77, 49, 50, 185, 77, 49, 50, 184, 77, 49, 50, + 183, 77, 49, 50, 182, 77, 49, 50, 181, 77, 49, 50, 180, 77, 49, 50, 179, + 77, 49, 50, 178, 77, 49, 50, 177, 77, 49, 50, 176, 77, 49, 49, 185, 77, + 49, 49, 184, 77, 49, 49, 183, 77, 49, 49, 182, 77, 49, 49, 181, 77, 49, + 49, 180, 77, 49, 49, 179, 77, 49, 49, 178, 77, 49, 49, 177, 77, 49, 49, + 176, 77, 49, 48, 185, 77, 49, 48, 184, 77, 49, 48, 183, 77, 49, 48, 182, + 77, 49, 48, 181, 77, 49, 48, 180, 77, 49, 48, 179, 77, 49, 48, 178, 77, + 49, 48, 177, 77, 49, 48, 176, 77, 48, 57, 185, 77, 48, 57, 184, 77, 48, + 57, 183, 77, 48, 57, 182, 77, 48, 57, 181, 77, 48, 57, 180, 77, 48, 57, + 179, 77, 48, 57, 178, 77, 48, 57, 177, 77, 48, 57, 176, 77, 48, 56, 185, + 77, 48, 56, 184, 77, 48, 56, 183, 77, 48, 56, 182, 77, 48, 56, 181, 77, + 48, 56, 180, 77, 48, 56, 179, 77, 48, 56, 178, 77, 48, 56, 177, 77, 48, + 56, 176, 77, 48, 55, 185, 77, 48, 55, 184, 77, 48, 55, 183, 77, 48, 55, + 182, 77, 48, 55, 181, 77, 48, 55, 180, 77, 48, 55, 179, 77, 48, 55, 178, + 77, 48, 55, 177, 77, 48, 55, 176, 77, 48, 54, 185, 77, 48, 54, 184, 77, + 48, 54, 183, 77, 48, 54, 182, 77, 48, 54, 181, 77, 48, 54, 180, 77, 48, + 54, 179, 77, 48, 54, 178, 77, 48, 54, 177, 77, 48, 54, 176, 77, 48, 53, + 185, 77, 48, 53, 184, 77, 48, 53, 183, 77, 48, 53, 182, 77, 48, 53, 181, + 77, 48, 53, 180, 77, 48, 53, 179, 77, 48, 53, 178, 77, 48, 53, 177, 77, + 48, 53, 176, 77, 48, 52, 185, 77, 48, 52, 184, 77, 48, 52, 183, 77, 48, + 52, 182, 77, 48, 52, 181, 77, 48, 52, 52, 128, 77, 48, 52, 180, 77, 48, + 52, 51, 128, 77, 48, 52, 179, 77, 48, 52, 50, 128, 77, 48, 52, 178, 77, + 48, 52, 49, 128, 77, 48, 52, 177, 77, 48, 52, 48, 65, 128, 77, 48, 52, + 48, 128, 77, 48, 52, 176, 77, 48, 51, 57, 128, 77, 48, 51, 185, 77, 48, + 51, 56, 128, 77, 48, 51, 184, 77, 48, 51, 55, 128, 77, 48, 51, 183, 77, + 48, 51, 54, 128, 77, 48, 51, 182, 77, 48, 51, 53, 128, 77, 48, 51, 181, + 77, 48, 51, 52, 128, 77, 48, 51, 180, 77, 48, 51, 51, 66, 128, 77, 48, + 51, 51, 65, 128, 77, 48, 51, 51, 128, 77, 48, 51, 179, 77, 48, 51, 50, + 128, 77, 48, 51, 178, 77, 48, 51, 49, 65, 128, 77, 48, 51, 49, 128, 77, + 48, 51, 177, 77, 48, 51, 48, 128, 77, 48, 51, 176, 77, 48, 50, 57, 128, + 77, 48, 50, 185, 77, 48, 50, 56, 65, 128, 77, 48, 50, 56, 128, 77, 48, + 50, 184, 77, 48, 50, 55, 128, 77, 48, 50, 183, 77, 48, 50, 54, 128, 77, + 48, 50, 182, 77, 48, 50, 53, 128, 77, 48, 50, 181, 77, 48, 50, 52, 65, + 128, 77, 48, 50, 52, 128, 77, 48, 50, 180, 77, 48, 50, 51, 128, 77, 48, + 50, 179, 77, 48, 50, 50, 65, 128, 77, 48, 50, 50, 128, 77, 48, 50, 178, + 77, 48, 50, 49, 128, 77, 48, 50, 177, 77, 48, 50, 48, 128, 77, 48, 50, + 176, 77, 48, 49, 57, 128, 77, 48, 49, 185, 77, 48, 49, 56, 128, 77, 48, + 49, 184, 77, 48, 49, 55, 65, 128, 77, 48, 49, 55, 128, 77, 48, 49, 183, + 77, 48, 49, 54, 65, 128, 77, 48, 49, 54, 128, 77, 48, 49, 182, 77, 48, + 49, 53, 65, 128, 77, 48, 49, 53, 128, 77, 48, 49, 181, 77, 48, 49, 52, + 128, 77, 48, 49, 180, 77, 48, 49, 51, 128, 77, 48, 49, 179, 77, 48, 49, 50, 72, 128, 77, 48, 49, 50, 71, 128, 77, 48, 49, 50, 70, 128, 77, 48, 49, 50, 69, 128, 77, 48, 49, 50, 68, 128, 77, 48, 49, 50, 67, 128, 77, 48, 49, 50, 66, 128, 77, 48, 49, 50, 65, 128, 77, 48, 49, 50, 128, 77, - 48, 49, 49, 128, 77, 48, 49, 48, 65, 128, 77, 48, 49, 48, 128, 77, 48, - 48, 57, 128, 77, 48, 48, 56, 128, 77, 48, 48, 55, 128, 77, 48, 48, 54, - 128, 77, 48, 48, 53, 128, 77, 48, 48, 52, 128, 77, 48, 48, 51, 65, 128, - 77, 48, 48, 51, 128, 77, 48, 48, 50, 128, 77, 48, 48, 49, 66, 128, 77, - 48, 48, 49, 65, 128, 77, 48, 48, 49, 128, 76, 218, 76, 89, 89, 128, 76, - 89, 88, 128, 76, 89, 84, 128, 76, 89, 82, 88, 128, 76, 89, 82, 128, 76, - 89, 80, 128, 76, 89, 68, 73, 65, 206, 76, 89, 67, 73, 65, 206, 76, 88, - 128, 76, 87, 79, 79, 128, 76, 87, 79, 128, 76, 87, 73, 73, 128, 76, 87, - 73, 128, 76, 87, 69, 128, 76, 87, 65, 65, 128, 76, 87, 65, 128, 76, 85, - 88, 128, 76, 85, 85, 128, 76, 85, 84, 128, 76, 85, 82, 88, 128, 76, 85, - 80, 128, 76, 85, 79, 88, 128, 76, 85, 79, 84, 128, 76, 85, 79, 80, 128, - 76, 85, 79, 128, 76, 85, 78, 71, 83, 73, 128, 76, 85, 78, 65, 84, 197, - 76, 85, 205, 76, 85, 76, 128, 76, 85, 73, 83, 128, 76, 85, 72, 85, 82, - 128, 76, 85, 72, 128, 76, 85, 71, 71, 65, 71, 69, 128, 76, 85, 71, 65, - 76, 128, 76, 85, 71, 65, 204, 76, 85, 69, 128, 76, 85, 65, 69, 80, 128, - 76, 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, 76, 82, 79, 128, 76, 82, - 77, 128, 76, 82, 73, 128, 76, 82, 69, 128, 76, 79, 90, 69, 78, 71, 69, - 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 69, 82, - 69, 196, 76, 79, 87, 69, 210, 76, 79, 87, 45, 185, 76, 79, 86, 197, 76, - 79, 85, 82, 69, 128, 76, 79, 85, 68, 83, 80, 69, 65, 75, 69, 82, 128, 76, - 79, 85, 68, 76, 217, 76, 79, 84, 85, 83, 128, 76, 79, 84, 128, 76, 79, - 82, 82, 89, 128, 76, 79, 82, 82, 65, 73, 78, 69, 128, 76, 79, 81, 128, - 76, 79, 80, 128, 76, 79, 79, 84, 128, 76, 79, 79, 80, 69, 196, 76, 79, - 79, 80, 128, 76, 79, 79, 208, 76, 79, 79, 78, 128, 76, 79, 79, 203, 76, - 79, 79, 128, 76, 79, 78, 83, 85, 77, 128, 76, 79, 78, 71, 65, 128, 76, - 79, 78, 71, 193, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 89, 82, - 128, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 83, 79, 204, 76, 79, - 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 79, 83, 211, 76, 79, 78, 71, 45, - 66, 82, 65, 78, 67, 72, 45, 77, 65, 68, 210, 76, 79, 78, 71, 45, 66, 82, - 65, 78, 67, 72, 45, 72, 65, 71, 65, 76, 204, 76, 79, 78, 71, 45, 66, 82, - 65, 78, 67, 72, 45, 65, 210, 76, 79, 77, 77, 65, 69, 128, 76, 79, 77, - 128, 76, 79, 205, 76, 79, 76, 76, 73, 80, 79, 80, 128, 76, 79, 76, 76, - 128, 76, 79, 71, 210, 76, 79, 71, 79, 84, 89, 80, 197, 76, 79, 71, 79, - 71, 82, 65, 205, 76, 79, 71, 128, 76, 79, 68, 69, 83, 84, 79, 78, 69, - 128, 76, 79, 67, 79, 77, 79, 84, 73, 86, 69, 128, 76, 79, 67, 75, 73, 78, - 71, 45, 83, 72, 73, 70, 212, 76, 79, 67, 203, 76, 79, 67, 65, 84, 73, 86, - 69, 128, 76, 79, 67, 65, 84, 73, 79, 206, 76, 79, 65, 128, 76, 78, 128, - 76, 76, 85, 85, 128, 76, 76, 79, 79, 128, 76, 76, 76, 85, 85, 128, 76, - 76, 76, 85, 128, 76, 76, 76, 79, 79, 128, 76, 76, 76, 79, 128, 76, 76, - 76, 73, 73, 128, 76, 76, 76, 73, 128, 76, 76, 76, 69, 69, 128, 76, 76, - 76, 69, 128, 76, 76, 76, 65, 85, 128, 76, 76, 76, 65, 73, 128, 76, 76, - 76, 65, 65, 128, 76, 76, 76, 65, 128, 76, 76, 76, 128, 76, 74, 85, 68, - 73, 74, 69, 128, 76, 74, 69, 128, 76, 74, 128, 76, 73, 88, 128, 76, 73, - 87, 78, 128, 76, 73, 86, 82, 197, 76, 73, 84, 84, 76, 197, 76, 73, 84, - 84, 69, 210, 76, 73, 84, 82, 193, 76, 73, 84, 128, 76, 73, 83, 213, 76, - 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 81, 128, 76, 73, 80, 83, - 84, 73, 67, 75, 128, 76, 73, 78, 75, 73, 78, 199, 76, 73, 78, 203, 76, - 73, 78, 71, 83, 65, 128, 76, 73, 78, 69, 83, 128, 76, 73, 78, 69, 211, - 76, 73, 78, 69, 45, 57, 128, 76, 73, 78, 69, 45, 55, 128, 76, 73, 78, 69, - 45, 51, 128, 76, 73, 78, 69, 45, 49, 128, 76, 73, 77, 77, 85, 52, 128, - 76, 73, 77, 77, 85, 50, 128, 76, 73, 77, 77, 85, 128, 76, 73, 77, 77, - 213, 76, 73, 77, 73, 84, 69, 196, 76, 73, 77, 73, 84, 65, 84, 73, 79, 78, - 128, 76, 73, 77, 73, 84, 128, 76, 73, 77, 69, 128, 76, 73, 77, 66, 213, - 76, 73, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, 128, 76, - 73, 71, 72, 84, 78, 73, 78, 71, 128, 76, 73, 71, 72, 84, 72, 79, 85, 83, - 69, 128, 76, 73, 71, 72, 84, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, + 48, 49, 178, 77, 48, 49, 49, 128, 77, 48, 49, 177, 77, 48, 49, 48, 65, + 128, 77, 48, 49, 48, 128, 77, 48, 49, 176, 77, 48, 48, 57, 128, 77, 48, + 48, 185, 77, 48, 48, 56, 128, 77, 48, 48, 184, 77, 48, 48, 55, 128, 77, + 48, 48, 183, 77, 48, 48, 54, 128, 77, 48, 48, 182, 77, 48, 48, 53, 128, + 77, 48, 48, 181, 77, 48, 48, 52, 128, 77, 48, 48, 180, 77, 48, 48, 51, + 65, 128, 77, 48, 48, 51, 128, 77, 48, 48, 179, 77, 48, 48, 50, 128, 77, + 48, 48, 178, 77, 48, 48, 49, 66, 128, 77, 48, 48, 49, 65, 128, 77, 48, + 48, 49, 128, 77, 48, 48, 177, 76, 218, 76, 89, 89, 128, 76, 89, 88, 128, + 76, 89, 84, 128, 76, 89, 82, 88, 128, 76, 89, 82, 128, 76, 89, 80, 128, + 76, 89, 73, 84, 128, 76, 89, 68, 73, 65, 206, 76, 89, 67, 73, 65, 206, + 76, 88, 128, 76, 87, 79, 79, 128, 76, 87, 79, 128, 76, 87, 73, 73, 128, + 76, 87, 73, 128, 76, 87, 69, 128, 76, 87, 65, 65, 128, 76, 87, 65, 128, + 76, 85, 88, 128, 76, 85, 85, 128, 76, 85, 84, 128, 76, 85, 82, 88, 128, + 76, 85, 80, 128, 76, 85, 79, 88, 128, 76, 85, 79, 84, 128, 76, 85, 79, + 80, 128, 76, 85, 79, 128, 76, 85, 78, 71, 83, 73, 128, 76, 85, 78, 65, + 84, 197, 76, 85, 205, 76, 85, 76, 128, 76, 85, 73, 83, 128, 76, 85, 72, + 85, 82, 128, 76, 85, 72, 128, 76, 85, 71, 71, 65, 71, 69, 128, 76, 85, + 71, 65, 76, 128, 76, 85, 71, 65, 204, 76, 85, 69, 128, 76, 85, 197, 76, + 85, 66, 128, 76, 85, 65, 69, 80, 128, 76, 85, 51, 128, 76, 85, 50, 128, + 76, 85, 178, 76, 82, 79, 128, 76, 82, 77, 128, 76, 82, 73, 128, 76, 82, + 69, 128, 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, + 76, 79, 88, 128, 76, 79, 87, 69, 82, 69, 196, 76, 79, 87, 69, 210, 76, + 79, 87, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 76, 79, 87, 45, 77, + 73, 196, 76, 79, 87, 45, 70, 65, 76, 76, 73, 78, 199, 76, 79, 87, 45, + 185, 76, 79, 86, 197, 76, 79, 85, 82, 69, 128, 76, 79, 85, 68, 83, 80, + 69, 65, 75, 69, 82, 128, 76, 79, 85, 68, 76, 217, 76, 79, 84, 85, 83, + 128, 76, 79, 84, 128, 76, 79, 82, 82, 89, 128, 76, 79, 82, 82, 65, 73, + 78, 69, 128, 76, 79, 81, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, 76, + 79, 79, 80, 69, 196, 76, 79, 79, 80, 128, 76, 79, 79, 208, 76, 79, 79, + 78, 128, 76, 79, 79, 203, 76, 79, 79, 128, 76, 79, 78, 83, 85, 77, 128, + 76, 79, 78, 71, 65, 128, 76, 79, 78, 71, 193, 76, 79, 78, 71, 45, 66, 82, + 65, 78, 67, 72, 45, 89, 82, 128, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, + 72, 45, 83, 79, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 79, + 83, 211, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 77, 65, 68, 210, + 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 72, 65, 71, 65, 76, 204, + 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 65, 210, 76, 79, 77, 77, + 65, 69, 128, 76, 79, 77, 128, 76, 79, 205, 76, 79, 76, 76, 73, 80, 79, + 80, 128, 76, 79, 76, 76, 128, 76, 79, 71, 210, 76, 79, 71, 79, 84, 89, + 80, 197, 76, 79, 71, 79, 71, 82, 65, 205, 76, 79, 71, 128, 76, 79, 68, + 69, 83, 84, 79, 78, 69, 128, 76, 79, 67, 79, 77, 79, 84, 73, 86, 69, 128, + 76, 79, 67, 75, 73, 78, 71, 45, 83, 72, 73, 70, 212, 76, 79, 67, 203, 76, + 79, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, 73, 79, 206, 76, 79, + 65, 128, 76, 78, 128, 76, 76, 85, 85, 128, 76, 76, 79, 79, 128, 76, 76, + 76, 85, 85, 128, 76, 76, 76, 85, 128, 76, 76, 76, 79, 79, 128, 76, 76, + 76, 79, 128, 76, 76, 76, 73, 73, 128, 76, 76, 76, 73, 128, 76, 76, 76, + 69, 69, 128, 76, 76, 76, 69, 128, 76, 76, 76, 65, 85, 128, 76, 76, 76, + 65, 73, 128, 76, 76, 76, 65, 65, 128, 76, 76, 76, 65, 128, 76, 76, 76, + 128, 76, 74, 85, 68, 73, 74, 69, 128, 76, 74, 69, 128, 76, 74, 128, 76, + 73, 88, 128, 76, 73, 87, 78, 128, 76, 73, 86, 82, 197, 76, 73, 84, 84, + 76, 197, 76, 73, 84, 84, 69, 210, 76, 73, 84, 82, 193, 76, 73, 84, 200, + 76, 73, 84, 128, 76, 73, 83, 213, 76, 73, 83, 128, 76, 73, 82, 193, 76, + 73, 81, 85, 73, 196, 76, 73, 81, 128, 76, 73, 80, 83, 84, 73, 67, 75, + 128, 76, 73, 78, 75, 73, 78, 199, 76, 73, 78, 75, 69, 196, 76, 73, 78, + 203, 76, 73, 78, 71, 83, 65, 128, 76, 73, 78, 69, 83, 128, 76, 73, 78, + 69, 211, 76, 73, 78, 69, 45, 57, 128, 76, 73, 78, 69, 45, 55, 128, 76, + 73, 78, 69, 45, 51, 128, 76, 73, 78, 69, 45, 49, 128, 76, 73, 77, 77, 85, + 52, 128, 76, 73, 77, 77, 85, 50, 128, 76, 73, 77, 77, 85, 128, 76, 73, + 77, 77, 213, 76, 73, 77, 73, 84, 69, 196, 76, 73, 77, 73, 84, 65, 84, 73, + 79, 78, 128, 76, 73, 77, 73, 84, 128, 76, 73, 77, 69, 128, 76, 73, 77, + 66, 213, 76, 73, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, + 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, 128, 76, 73, 71, 72, 84, 78, 73, + 78, 199, 76, 73, 71, 72, 84, 72, 79, 85, 83, 69, 128, 76, 73, 71, 72, 84, + 128, 76, 73, 70, 84, 69, 82, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 128, 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, 76, 73, 69, 69, 128, 76, 73, 69, 128, 76, 73, 68, 128, 76, 73, 66, 82, 65, 128, 76, 73, 66, 69, 82, 84, 89, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, 72, 73, 73, 128, 76, 72, 65, 86, 73, 89, 65, 78, 73, 128, 76, 72, 65, 199, 76, 72, 65, 65, 128, 76, 72, 128, 76, 69, 90, 72, 128, 76, 69, 88, 128, 76, 69, - 86, 69, 204, 76, 69, 85, 77, 128, 76, 69, 85, 65, 69, 80, 128, 76, 69, - 85, 65, 69, 77, 128, 76, 69, 85, 128, 76, 69, 213, 76, 69, 84, 84, 69, - 82, 83, 128, 76, 69, 84, 84, 69, 82, 128, 76, 69, 212, 76, 69, 83, 83, - 69, 210, 76, 69, 83, 83, 45, 84, 72, 65, 78, 128, 76, 69, 83, 83, 45, 84, - 72, 65, 206, 76, 69, 80, 128, 76, 69, 79, 80, 65, 82, 68, 128, 76, 69, - 79, 128, 76, 69, 78, 84, 73, 67, 85, 76, 65, 210, 76, 69, 78, 73, 83, - 128, 76, 69, 78, 71, 84, 72, 69, 78, 69, 82, 128, 76, 69, 78, 71, 84, - 200, 76, 69, 78, 71, 65, 128, 76, 69, 78, 71, 193, 76, 69, 77, 79, 78, - 128, 76, 69, 77, 79, 73, 128, 76, 69, 76, 69, 84, 128, 76, 69, 76, 69, - 212, 76, 69, 203, 76, 69, 73, 77, 77, 65, 128, 76, 69, 73, 77, 77, 193, - 76, 69, 71, 83, 128, 76, 69, 71, 73, 79, 78, 128, 76, 69, 71, 69, 84, 79, - 211, 76, 69, 71, 128, 76, 69, 70, 84, 87, 65, 82, 68, 83, 128, 76, 69, - 70, 84, 45, 84, 79, 45, 82, 73, 71, 72, 212, 76, 69, 70, 84, 45, 83, 84, - 69, 205, 76, 69, 70, 84, 45, 83, 73, 68, 197, 76, 69, 70, 84, 45, 83, 72, - 65, 68, 69, 196, 76, 69, 70, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 76, + 86, 73, 84, 65, 84, 73, 78, 71, 128, 76, 69, 85, 77, 128, 76, 69, 85, 65, + 69, 80, 128, 76, 69, 85, 65, 69, 77, 128, 76, 69, 85, 128, 76, 69, 213, + 76, 69, 84, 84, 69, 82, 83, 128, 76, 69, 84, 84, 69, 82, 128, 76, 69, + 212, 76, 69, 83, 83, 69, 210, 76, 69, 83, 83, 45, 84, 72, 65, 78, 128, + 76, 69, 83, 83, 45, 84, 72, 65, 206, 76, 69, 80, 67, 72, 193, 76, 69, 80, + 128, 76, 69, 79, 80, 65, 82, 68, 128, 76, 69, 79, 128, 76, 69, 78, 84, + 73, 67, 85, 76, 65, 210, 76, 69, 78, 73, 83, 128, 76, 69, 78, 73, 211, + 76, 69, 78, 71, 84, 72, 69, 78, 69, 82, 128, 76, 69, 78, 71, 84, 200, 76, + 69, 78, 71, 65, 128, 76, 69, 78, 71, 193, 76, 69, 77, 79, 78, 128, 76, + 69, 77, 79, 73, 128, 76, 69, 76, 69, 84, 128, 76, 69, 76, 69, 212, 76, + 69, 203, 76, 69, 73, 77, 77, 65, 128, 76, 69, 73, 77, 77, 193, 76, 69, + 73, 128, 76, 69, 71, 83, 128, 76, 69, 71, 73, 79, 78, 128, 76, 69, 71, + 69, 84, 79, 211, 76, 69, 71, 128, 76, 69, 199, 76, 69, 70, 84, 87, 65, + 82, 68, 83, 128, 76, 69, 70, 84, 45, 84, 79, 45, 82, 73, 71, 72, 212, 76, + 69, 70, 84, 45, 83, 84, 69, 205, 76, 69, 70, 84, 45, 83, 73, 68, 197, 76, + 69, 70, 84, 45, 83, 72, 65, 68, 69, 196, 76, 69, 70, 84, 45, 80, 79, 73, + 78, 84, 73, 78, 199, 76, 69, 70, 84, 45, 76, 73, 71, 72, 84, 69, 196, 76, 69, 70, 84, 45, 72, 65, 78, 68, 69, 196, 76, 69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, 84, 45, 70, 65, 67, 73, 78, 199, 76, 69, 70, 84, 128, 76, 69, 69, 82, 65, 69, 87, 65, 128, 76, 69, 69, 75, 128, 76, 69, 69, 69, @@ -2181,137 +2336,151 @@ static unsigned char lexicon[] = { 69, 65, 68, 69, 82, 128, 76, 69, 65, 196, 76, 68, 65, 78, 128, 76, 68, 50, 128, 76, 67, 201, 76, 67, 197, 76, 65, 90, 217, 76, 65, 89, 65, 78, 78, 65, 128, 76, 65, 88, 128, 76, 65, 87, 128, 76, 65, 215, 76, 65, 85, - 76, 65, 128, 76, 65, 85, 75, 65, 218, 76, 65, 84, 73, 78, 65, 84, 197, - 76, 65, 84, 73, 75, 128, 76, 65, 84, 69, 82, 65, 204, 76, 65, 84, 197, - 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 71, 69, - 210, 76, 65, 82, 71, 69, 128, 76, 65, 82, 71, 197, 76, 65, 81, 128, 76, - 65, 80, 65, 81, 128, 76, 65, 80, 128, 76, 65, 78, 84, 69, 82, 78, 128, - 76, 65, 78, 71, 85, 65, 71, 197, 76, 65, 78, 69, 83, 128, 76, 65, 77, 69, - 68, 72, 128, 76, 65, 77, 69, 68, 128, 76, 65, 77, 69, 196, 76, 65, 77, - 69, 128, 76, 65, 77, 197, 76, 65, 77, 68, 65, 128, 76, 65, 77, 68, 128, - 76, 65, 77, 66, 68, 193, 76, 65, 77, 65, 68, 72, 128, 76, 65, 76, 128, - 76, 65, 204, 76, 65, 75, 75, 72, 65, 78, 71, 89, 65, 79, 128, 76, 65, 74, - 65, 78, 89, 65, 76, 65, 78, 128, 76, 65, 201, 76, 65, 72, 83, 72, 85, - 128, 76, 65, 72, 128, 76, 65, 71, 85, 83, 128, 76, 65, 71, 213, 76, 65, - 71, 65, 82, 128, 76, 65, 71, 65, 210, 76, 65, 71, 65, 66, 128, 76, 65, - 71, 65, 194, 76, 65, 69, 86, 128, 76, 65, 69, 128, 76, 65, 68, 217, 76, - 65, 67, 75, 128, 76, 65, 67, 65, 128, 76, 65, 66, 79, 85, 82, 73, 78, 71, - 128, 76, 65, 66, 79, 82, 128, 76, 65, 66, 73, 65, 76, 73, 90, 65, 84, 73, - 79, 206, 76, 65, 66, 73, 65, 204, 76, 65, 66, 65, 84, 128, 76, 65, 65, - 78, 65, 69, 128, 76, 65, 65, 78, 128, 76, 65, 65, 77, 85, 128, 76, 65, - 65, 77, 128, 76, 65, 65, 73, 128, 76, 48, 48, 54, 65, 128, 76, 48, 48, - 50, 65, 128, 76, 45, 84, 89, 80, 197, 76, 45, 83, 72, 65, 80, 69, 196, - 75, 89, 85, 82, 73, 73, 128, 75, 89, 85, 128, 75, 89, 79, 128, 75, 89, - 76, 73, 83, 77, 65, 128, 75, 89, 73, 128, 75, 89, 69, 128, 75, 89, 65, - 84, 72, 79, 211, 75, 89, 65, 65, 128, 75, 89, 65, 128, 75, 88, 87, 73, - 128, 75, 88, 87, 69, 69, 128, 75, 88, 87, 69, 128, 75, 88, 87, 65, 65, - 128, 75, 88, 87, 65, 128, 75, 88, 85, 128, 75, 88, 79, 128, 75, 88, 73, - 128, 75, 88, 69, 69, 128, 75, 88, 69, 128, 75, 88, 65, 65, 128, 75, 88, - 65, 128, 75, 87, 85, 51, 49, 56, 128, 75, 87, 79, 79, 128, 75, 87, 79, - 128, 75, 87, 73, 73, 128, 75, 87, 73, 128, 75, 87, 69, 69, 128, 75, 87, - 69, 128, 75, 87, 65, 89, 128, 75, 87, 65, 69, 84, 128, 75, 87, 65, 65, - 128, 75, 86, 65, 128, 75, 86, 128, 75, 85, 88, 128, 75, 85, 85, 72, 128, - 75, 85, 84, 128, 75, 85, 83, 77, 65, 128, 75, 85, 83, 72, 85, 50, 128, - 75, 85, 82, 88, 128, 75, 85, 82, 85, 90, 69, 73, 82, 79, 128, 75, 85, 82, - 84, 128, 75, 85, 82, 79, 79, 78, 69, 128, 75, 85, 82, 128, 75, 85, 210, - 75, 85, 81, 128, 75, 85, 79, 88, 128, 75, 85, 79, 80, 128, 75, 85, 79, - 208, 75, 85, 79, 77, 128, 75, 85, 79, 128, 75, 85, 78, 71, 128, 75, 85, - 78, 68, 68, 65, 76, 73, 89, 65, 128, 75, 85, 76, 128, 75, 85, 204, 75, - 85, 69, 84, 128, 75, 85, 55, 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, - 51, 128, 75, 85, 179, 75, 84, 128, 75, 83, 83, 85, 85, 128, 75, 83, 83, - 85, 128, 75, 83, 83, 79, 79, 128, 75, 83, 83, 79, 128, 75, 83, 83, 73, - 73, 128, 75, 83, 83, 73, 128, 75, 83, 83, 69, 69, 128, 75, 83, 83, 69, - 128, 75, 83, 83, 65, 85, 128, 75, 83, 83, 65, 73, 128, 75, 83, 83, 65, - 65, 128, 75, 83, 83, 65, 128, 75, 83, 83, 128, 75, 83, 73, 128, 75, 82, - 69, 77, 65, 83, 84, 73, 128, 75, 82, 65, 84, 73, 77, 79, 89, 80, 79, 82, - 82, 79, 79, 78, 128, 75, 82, 65, 84, 73, 77, 79, 75, 79, 85, 70, 73, 83, - 77, 65, 128, 75, 82, 65, 84, 73, 77, 65, 84, 65, 128, 75, 82, 65, 84, 73, - 77, 193, 75, 80, 85, 128, 75, 80, 79, 81, 128, 75, 80, 79, 79, 128, 75, - 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, 85, 88, 128, 75, 80, 69, 69, - 128, 75, 80, 69, 128, 75, 80, 65, 82, 65, 81, 128, 75, 80, 65, 78, 128, - 75, 80, 65, 128, 75, 79, 88, 128, 75, 79, 86, 85, 85, 128, 75, 79, 84, - 79, 128, 75, 79, 82, 85, 78, 65, 128, 75, 79, 82, 79, 78, 73, 83, 128, - 75, 79, 82, 69, 65, 206, 75, 79, 82, 65, 78, 73, 195, 75, 79, 81, 78, 68, - 79, 78, 128, 75, 79, 80, 80, 65, 128, 75, 79, 80, 128, 75, 79, 79, 80, - 79, 128, 75, 79, 79, 77, 85, 85, 84, 128, 75, 79, 79, 128, 75, 79, 78, - 84, 69, 86, 77, 65, 128, 75, 79, 78, 84, 69, 86, 77, 193, 75, 79, 77, - 201, 75, 79, 77, 66, 85, 86, 65, 128, 75, 79, 77, 66, 85, 86, 193, 75, - 79, 77, 66, 213, 75, 79, 75, 79, 128, 75, 79, 75, 128, 75, 79, 203, 75, + 76, 65, 128, 76, 65, 85, 75, 65, 218, 76, 65, 85, 74, 128, 76, 65, 84, + 73, 78, 65, 84, 197, 76, 65, 84, 73, 75, 128, 76, 65, 84, 69, 82, 65, + 204, 76, 65, 84, 197, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, + 204, 76, 65, 82, 71, 69, 210, 76, 65, 82, 71, 69, 128, 76, 65, 82, 71, + 197, 76, 65, 81, 128, 76, 65, 80, 65, 81, 128, 76, 65, 207, 76, 65, 78, + 84, 69, 82, 78, 128, 76, 65, 78, 71, 85, 65, 71, 197, 76, 65, 78, 69, 83, + 128, 76, 65, 78, 128, 76, 65, 77, 80, 128, 76, 65, 77, 69, 68, 72, 128, + 76, 65, 77, 69, 68, 128, 76, 65, 77, 69, 196, 76, 65, 77, 69, 128, 76, + 65, 77, 197, 76, 65, 77, 68, 65, 128, 76, 65, 77, 68, 128, 76, 65, 77, + 66, 68, 193, 76, 65, 77, 65, 68, 72, 128, 76, 65, 76, 128, 76, 65, 204, + 76, 65, 75, 75, 72, 65, 78, 71, 89, 65, 79, 128, 76, 65, 74, 65, 78, 89, + 65, 76, 65, 78, 128, 76, 65, 73, 78, 199, 76, 65, 201, 76, 65, 72, 83, + 72, 85, 128, 76, 65, 72, 128, 76, 65, 71, 85, 83, 128, 76, 65, 71, 213, + 76, 65, 71, 65, 82, 128, 76, 65, 71, 65, 210, 76, 65, 71, 65, 66, 128, + 76, 65, 71, 65, 194, 76, 65, 69, 86, 128, 76, 65, 69, 128, 76, 65, 68, + 217, 76, 65, 67, 75, 128, 76, 65, 67, 65, 128, 76, 65, 66, 79, 85, 82, + 73, 78, 71, 128, 76, 65, 66, 79, 82, 128, 76, 65, 66, 73, 65, 76, 73, 90, + 65, 84, 73, 79, 206, 76, 65, 66, 73, 65, 204, 76, 65, 66, 69, 76, 128, + 76, 65, 66, 65, 84, 128, 76, 65, 65, 78, 65, 69, 128, 76, 65, 65, 78, + 128, 76, 65, 65, 77, 85, 128, 76, 65, 65, 77, 128, 76, 65, 65, 73, 128, + 76, 54, 128, 76, 52, 128, 76, 51, 128, 76, 50, 128, 76, 48, 48, 54, 65, + 128, 76, 48, 48, 50, 65, 128, 76, 45, 84, 89, 80, 197, 76, 45, 83, 72, + 65, 80, 69, 196, 75, 89, 85, 82, 73, 73, 128, 75, 89, 85, 128, 75, 89, + 79, 128, 75, 89, 76, 73, 83, 77, 65, 128, 75, 89, 73, 128, 75, 89, 69, + 128, 75, 89, 65, 84, 72, 79, 211, 75, 89, 65, 65, 128, 75, 89, 65, 128, + 75, 88, 87, 73, 128, 75, 88, 87, 69, 69, 128, 75, 88, 87, 69, 128, 75, + 88, 87, 65, 65, 128, 75, 88, 87, 65, 128, 75, 88, 85, 128, 75, 88, 79, + 128, 75, 88, 73, 128, 75, 88, 69, 69, 128, 75, 88, 69, 128, 75, 88, 65, + 65, 128, 75, 88, 65, 128, 75, 87, 86, 128, 75, 87, 85, 51, 49, 56, 128, + 75, 87, 79, 79, 128, 75, 87, 79, 128, 75, 87, 77, 128, 75, 87, 73, 73, + 128, 75, 87, 73, 128, 75, 87, 69, 69, 128, 75, 87, 69, 128, 75, 87, 66, + 128, 75, 87, 65, 89, 128, 75, 87, 65, 69, 84, 128, 75, 87, 65, 65, 128, + 75, 86, 65, 128, 75, 86, 128, 75, 85, 88, 128, 75, 85, 86, 128, 75, 85, + 85, 72, 128, 75, 85, 84, 128, 75, 85, 83, 77, 65, 128, 75, 85, 83, 72, + 85, 50, 128, 75, 85, 82, 88, 128, 75, 85, 82, 85, 90, 69, 73, 82, 79, + 128, 75, 85, 82, 84, 128, 75, 85, 82, 79, 79, 78, 69, 128, 75, 85, 82, + 128, 75, 85, 210, 75, 85, 81, 128, 75, 85, 79, 88, 128, 75, 85, 79, 80, + 128, 75, 85, 79, 208, 75, 85, 79, 77, 128, 75, 85, 79, 128, 75, 85, 78, + 71, 128, 75, 85, 78, 68, 68, 65, 76, 73, 89, 65, 128, 75, 85, 76, 128, + 75, 85, 204, 75, 85, 71, 128, 75, 85, 69, 84, 128, 75, 85, 66, 128, 75, + 85, 65, 86, 128, 75, 85, 65, 66, 128, 75, 85, 65, 128, 75, 85, 55, 128, + 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, 128, + 75, 83, 83, 85, 85, 128, 75, 83, 83, 85, 128, 75, 83, 83, 79, 79, 128, + 75, 83, 83, 79, 128, 75, 83, 83, 73, 73, 128, 75, 83, 83, 73, 128, 75, + 83, 83, 69, 69, 128, 75, 83, 83, 69, 128, 75, 83, 83, 65, 85, 128, 75, + 83, 83, 65, 73, 128, 75, 83, 83, 65, 65, 128, 75, 83, 83, 65, 128, 75, + 83, 83, 128, 75, 83, 73, 128, 75, 82, 69, 77, 65, 83, 84, 73, 128, 75, + 82, 65, 84, 73, 77, 79, 89, 80, 79, 82, 82, 79, 79, 78, 128, 75, 82, 65, + 84, 73, 77, 79, 75, 79, 85, 70, 73, 83, 77, 65, 128, 75, 82, 65, 84, 73, + 77, 65, 84, 65, 128, 75, 82, 65, 84, 73, 77, 193, 75, 80, 85, 128, 75, + 80, 79, 81, 128, 75, 80, 79, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, + 75, 80, 69, 85, 88, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, 80, + 65, 82, 65, 81, 128, 75, 80, 65, 78, 128, 75, 80, 65, 72, 128, 75, 80, + 65, 128, 75, 79, 88, 128, 75, 79, 86, 85, 85, 128, 75, 79, 86, 128, 75, + 79, 84, 79, 128, 75, 79, 82, 85, 78, 65, 128, 75, 79, 82, 79, 78, 73, 83, + 128, 75, 79, 82, 69, 65, 206, 75, 79, 82, 65, 78, 73, 195, 75, 79, 81, + 78, 68, 79, 78, 128, 75, 79, 80, 80, 65, 128, 75, 79, 80, 128, 75, 79, + 79, 86, 128, 75, 79, 79, 80, 79, 128, 75, 79, 79, 77, 85, 85, 84, 128, + 75, 79, 79, 66, 128, 75, 79, 79, 128, 75, 79, 78, 84, 69, 86, 77, 65, + 128, 75, 79, 78, 84, 69, 86, 77, 193, 75, 79, 77, 201, 75, 79, 77, 66, + 85, 86, 65, 128, 75, 79, 77, 66, 85, 86, 193, 75, 79, 77, 66, 213, 75, + 79, 75, 79, 128, 75, 79, 75, 69, 128, 75, 79, 75, 128, 75, 79, 203, 75, 79, 73, 128, 75, 79, 201, 75, 79, 72, 128, 75, 79, 71, 72, 79, 77, 128, - 75, 79, 69, 84, 128, 75, 79, 65, 76, 65, 128, 75, 79, 65, 128, 75, 78, - 73, 71, 72, 84, 128, 75, 78, 73, 71, 72, 212, 75, 78, 73, 70, 69, 128, - 75, 78, 73, 70, 197, 75, 77, 128, 75, 205, 75, 76, 73, 84, 79, 78, 128, - 75, 76, 65, 83, 77, 65, 128, 75, 76, 65, 83, 77, 193, 75, 76, 65, 128, - 75, 76, 128, 75, 75, 85, 128, 75, 75, 79, 128, 75, 75, 73, 128, 75, 75, - 69, 69, 128, 75, 75, 69, 128, 75, 75, 65, 128, 75, 75, 128, 75, 74, 69, - 128, 75, 73, 89, 69, 79, 75, 45, 84, 73, 75, 69, 85, 84, 128, 75, 73, 89, - 69, 79, 75, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 75, 73, - 89, 69, 79, 75, 45, 82, 73, 69, 85, 76, 128, 75, 73, 89, 69, 79, 75, 45, - 80, 73, 69, 85, 80, 128, 75, 73, 89, 69, 79, 75, 45, 78, 73, 69, 85, 78, - 128, 75, 73, 89, 69, 79, 75, 45, 75, 72, 73, 69, 85, 75, 72, 128, 75, 73, - 89, 69, 79, 75, 45, 67, 72, 73, 69, 85, 67, 72, 128, 75, 73, 89, 69, 79, - 203, 75, 73, 88, 128, 75, 73, 84, 128, 75, 73, 83, 83, 73, 78, 199, 75, - 73, 83, 83, 128, 75, 73, 83, 211, 75, 73, 83, 73, 77, 53, 128, 75, 73, - 83, 73, 77, 181, 75, 73, 83, 72, 128, 75, 73, 83, 65, 76, 128, 75, 73, - 82, 79, 87, 65, 84, 84, 79, 128, 75, 73, 82, 79, 77, 69, 69, 84, 79, 82, - 85, 128, 75, 73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 75, 73, 82, 79, - 128, 75, 73, 82, 71, 72, 73, 218, 75, 73, 81, 128, 75, 73, 80, 128, 75, - 73, 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 78, 68, 69, 82, 71, 65, - 82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128, 75, 73, 73, 128, 75, - 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 128, 75, 73, 69, 69, - 77, 128, 75, 73, 69, 128, 75, 73, 68, 128, 75, 73, 196, 75, 73, 67, 75, - 128, 75, 72, 90, 128, 75, 72, 87, 65, 73, 128, 75, 72, 85, 69, 78, 45, - 76, 85, 197, 75, 72, 85, 69, 206, 75, 72, 85, 68, 65, 77, 128, 75, 72, - 85, 65, 84, 128, 75, 72, 79, 85, 128, 75, 72, 79, 212, 75, 72, 79, 78, - 128, 75, 72, 79, 77, 85, 84, 128, 75, 72, 79, 128, 75, 72, 207, 75, 72, - 77, 213, 75, 72, 73, 84, 128, 75, 72, 73, 78, 89, 65, 128, 75, 72, 73, - 69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 72, 79, 128, 75, 72, 72, 65, - 128, 75, 72, 69, 84, 72, 128, 75, 72, 69, 73, 128, 75, 72, 69, 69, 128, - 75, 72, 69, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 75, 72, 65, 82, - 128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199, 75, 72, 65, 78, 68, - 193, 75, 72, 65, 78, 128, 75, 72, 65, 77, 84, 201, 75, 72, 65, 75, 65, - 83, 83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, 72, 128, 75, 72, - 65, 200, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, 67, 65, 80, 128, - 75, 69, 89, 67, 65, 208, 75, 69, 89, 66, 79, 65, 82, 68, 128, 75, 69, 88, - 128, 75, 69, 85, 89, 69, 85, 88, 128, 75, 69, 85, 83, 72, 69, 85, 65, 69, - 80, 128, 75, 69, 85, 83, 69, 85, 88, 128, 75, 69, 85, 80, 85, 81, 128, - 75, 69, 85, 79, 212, 75, 69, 85, 77, 128, 75, 69, 85, 75, 69, 85, 84, 78, - 68, 65, 128, 75, 69, 85, 75, 65, 81, 128, 75, 69, 85, 65, 69, 84, 77, 69, - 85, 78, 128, 75, 69, 85, 65, 69, 82, 73, 128, 75, 69, 84, 84, 201, 75, - 69, 83, 72, 50, 128, 75, 69, 82, 69, 84, 128, 75, 69, 79, 87, 128, 75, - 69, 78, 84, 73, 77, 65, 84, 65, 128, 75, 69, 78, 84, 73, 77, 65, 84, 193, - 75, 69, 78, 84, 73, 77, 193, 75, 69, 78, 65, 84, 128, 75, 69, 78, 128, - 75, 69, 206, 75, 69, 77, 80, 85, 76, 128, 75, 69, 77, 80, 85, 204, 75, - 69, 77, 80, 76, 73, 128, 75, 69, 77, 80, 76, 201, 75, 69, 77, 80, 72, 82, - 69, 78, 71, 128, 75, 69, 77, 66, 65, 78, 71, 128, 75, 69, 76, 86, 73, - 206, 75, 69, 72, 69, 72, 128, 75, 69, 72, 69, 200, 75, 69, 72, 128, 75, - 69, 70, 85, 76, 65, 128, 75, 69, 69, 83, 85, 128, 75, 69, 69, 80, 73, 78, - 199, 75, 69, 69, 78, 71, 128, 75, 67, 65, 76, 128, 75, 66, 128, 75, 65, - 90, 65, 75, 200, 75, 65, 89, 65, 78, 78, 65, 128, 75, 65, 89, 65, 200, - 75, 65, 88, 128, 75, 65, 87, 73, 128, 75, 65, 86, 89, 75, 65, 128, 75, - 65, 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 85, 128, 75, 65, 84, 79, - 128, 75, 65, 84, 72, 73, 83, 84, 73, 128, 75, 65, 84, 72, 65, 75, 193, - 75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75, 65, 84, 65, 86, 193, 75, 65, - 84, 65, 75, 65, 78, 65, 45, 72, 73, 82, 65, 71, 65, 78, 193, 75, 65, 83, - 82, 65, 84, 65, 78, 128, 75, 65, 83, 82, 65, 84, 65, 206, 75, 65, 83, 82, - 65, 128, 75, 65, 83, 82, 193, 75, 65, 83, 75, 65, 76, 128, 75, 65, 83, - 75, 65, 204, 75, 65, 83, 72, 77, 73, 82, 201, 75, 65, 82, 83, 72, 65, 78, - 65, 128, 75, 65, 82, 79, 82, 73, 73, 128, 75, 65, 82, 207, 75, 65, 82, - 69, 206, 75, 65, 82, 65, 84, 84, 79, 128, 75, 65, 82, 65, 78, 128, 75, - 65, 80, 89, 69, 79, 85, 78, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, - 75, 65, 80, 89, 69, 79, 85, 78, 82, 73, 69, 85, 76, 128, 75, 65, 80, 89, - 69, 79, 85, 78, 80, 72, 73, 69, 85, 80, 72, 128, 75, 65, 80, 89, 69, 79, - 85, 78, 77, 73, 69, 85, 77, 128, 75, 65, 80, 80, 65, 128, 75, 65, 80, 80, - 193, 75, 65, 80, 79, 128, 75, 65, 80, 72, 128, 75, 65, 80, 65, 76, 128, - 75, 65, 80, 65, 128, 75, 65, 78, 84, 65, 74, 193, 75, 65, 78, 71, 128, - 75, 65, 78, 199, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, - 65, 77, 50, 128, 75, 65, 77, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, - 66, 65, 84, 128, 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 84, 72, 201, - 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, 75, 65, 201, 75, 65, 70, 65, - 128, 75, 65, 70, 128, 75, 65, 198, 75, 65, 68, 53, 128, 75, 65, 68, 181, - 75, 65, 68, 52, 128, 75, 65, 68, 51, 128, 75, 65, 68, 179, 75, 65, 68, - 50, 128, 75, 65, 68, 128, 75, 65, 66, 193, 75, 65, 66, 128, 75, 65, 65, - 73, 128, 75, 65, 65, 70, 85, 128, 75, 65, 65, 70, 128, 75, 65, 50, 128, + 75, 79, 69, 84, 128, 75, 79, 66, 128, 75, 79, 65, 76, 65, 128, 75, 79, + 65, 128, 75, 78, 79, 66, 83, 128, 75, 78, 73, 71, 72, 84, 128, 75, 78, + 73, 71, 72, 212, 75, 78, 73, 70, 69, 128, 75, 78, 73, 70, 197, 75, 77, + 128, 75, 205, 75, 76, 73, 84, 79, 78, 128, 75, 76, 65, 83, 77, 65, 128, + 75, 76, 65, 83, 77, 193, 75, 76, 65, 128, 75, 76, 128, 75, 75, 85, 128, + 75, 75, 79, 128, 75, 75, 73, 128, 75, 75, 69, 69, 128, 75, 75, 69, 128, + 75, 75, 65, 128, 75, 75, 128, 75, 74, 69, 128, 75, 73, 89, 69, 79, 75, + 45, 84, 73, 75, 69, 85, 84, 128, 75, 73, 89, 69, 79, 75, 45, 83, 73, 79, + 83, 45, 75, 73, 89, 69, 79, 75, 128, 75, 73, 89, 69, 79, 75, 45, 82, 73, + 69, 85, 76, 128, 75, 73, 89, 69, 79, 75, 45, 80, 73, 69, 85, 80, 128, 75, + 73, 89, 69, 79, 75, 45, 78, 73, 69, 85, 78, 128, 75, 73, 89, 69, 79, 75, + 45, 75, 72, 73, 69, 85, 75, 72, 128, 75, 73, 89, 69, 79, 75, 45, 67, 72, + 73, 69, 85, 67, 72, 128, 75, 73, 89, 69, 79, 203, 75, 73, 88, 128, 75, + 73, 87, 128, 75, 73, 86, 128, 75, 73, 84, 128, 75, 73, 83, 83, 73, 78, + 199, 75, 73, 83, 83, 128, 75, 73, 83, 211, 75, 73, 83, 73, 77, 53, 128, + 75, 73, 83, 73, 77, 181, 75, 73, 83, 72, 128, 75, 73, 83, 65, 76, 128, + 75, 73, 82, 79, 87, 65, 84, 84, 79, 128, 75, 73, 82, 79, 77, 69, 69, 84, + 79, 82, 85, 128, 75, 73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 75, 73, 82, + 79, 128, 75, 73, 82, 71, 72, 73, 218, 75, 73, 81, 128, 75, 73, 80, 128, + 75, 73, 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 78, 68, 69, 82, 71, + 65, 82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128, 75, 73, 73, 128, + 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 128, 75, 73, 69, + 69, 77, 128, 75, 73, 69, 128, 75, 73, 68, 128, 75, 73, 196, 75, 73, 67, + 75, 128, 75, 73, 66, 128, 75, 73, 65, 86, 128, 75, 73, 65, 66, 128, 75, + 72, 90, 128, 75, 72, 87, 65, 73, 128, 75, 72, 85, 69, 78, 45, 76, 85, + 197, 75, 72, 85, 69, 206, 75, 72, 85, 68, 65, 87, 65, 68, 201, 75, 72, + 85, 68, 65, 77, 128, 75, 72, 85, 65, 84, 128, 75, 72, 79, 85, 128, 75, + 72, 79, 212, 75, 72, 79, 78, 128, 75, 72, 79, 77, 85, 84, 128, 75, 72, + 79, 74, 75, 201, 75, 72, 79, 128, 75, 72, 207, 75, 72, 77, 213, 75, 72, + 73, 84, 128, 75, 72, 73, 78, 89, 65, 128, 75, 72, 73, 69, 85, 75, 200, + 75, 72, 73, 128, 75, 72, 201, 75, 72, 72, 79, 128, 75, 72, 72, 65, 128, + 75, 72, 69, 84, 72, 128, 75, 72, 69, 73, 128, 75, 72, 69, 69, 128, 75, + 72, 69, 128, 75, 72, 65, 86, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72, + 201, 75, 72, 65, 82, 128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199, + 75, 72, 65, 78, 68, 193, 75, 72, 65, 78, 128, 75, 72, 65, 77, 84, 201, + 75, 72, 65, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, + 72, 128, 75, 72, 65, 200, 75, 72, 65, 66, 128, 75, 72, 65, 65, 128, 75, + 71, 128, 75, 69, 89, 67, 65, 80, 128, 75, 69, 89, 67, 65, 208, 75, 69, + 89, 66, 79, 65, 82, 68, 128, 75, 69, 89, 66, 79, 65, 82, 196, 75, 69, 88, + 128, 75, 69, 86, 128, 75, 69, 85, 89, 69, 85, 88, 128, 75, 69, 85, 83, + 72, 69, 85, 65, 69, 80, 128, 75, 69, 85, 83, 69, 85, 88, 128, 75, 69, 85, + 80, 85, 81, 128, 75, 69, 85, 79, 212, 75, 69, 85, 77, 128, 75, 69, 85, + 75, 69, 85, 84, 78, 68, 65, 128, 75, 69, 85, 75, 65, 81, 128, 75, 69, 85, + 65, 69, 84, 77, 69, 85, 78, 128, 75, 69, 85, 65, 69, 82, 73, 128, 75, 69, + 84, 84, 201, 75, 69, 83, 72, 50, 128, 75, 69, 82, 69, 84, 128, 75, 69, + 79, 87, 128, 75, 69, 78, 84, 73, 77, 65, 84, 65, 128, 75, 69, 78, 84, 73, + 77, 65, 84, 193, 75, 69, 78, 84, 73, 77, 193, 75, 69, 78, 65, 84, 128, + 75, 69, 78, 128, 75, 69, 206, 75, 69, 77, 80, 85, 76, 128, 75, 69, 77, + 80, 85, 204, 75, 69, 77, 80, 76, 73, 128, 75, 69, 77, 80, 76, 201, 75, + 69, 77, 80, 72, 82, 69, 78, 71, 128, 75, 69, 77, 66, 65, 78, 71, 128, 75, + 69, 76, 86, 73, 206, 75, 69, 72, 69, 72, 128, 75, 69, 72, 69, 200, 75, + 69, 72, 128, 75, 69, 70, 85, 76, 65, 128, 75, 69, 69, 86, 128, 75, 69, + 69, 83, 85, 128, 75, 69, 69, 80, 73, 78, 199, 75, 69, 69, 78, 71, 128, + 75, 69, 69, 66, 128, 75, 69, 66, 128, 75, 69, 65, 65, 69, 128, 75, 67, + 65, 76, 128, 75, 66, 128, 75, 65, 90, 65, 75, 200, 75, 65, 89, 65, 78, + 78, 65, 128, 75, 65, 89, 65, 200, 75, 65, 88, 128, 75, 65, 87, 86, 128, + 75, 65, 87, 73, 128, 75, 65, 87, 66, 128, 75, 65, 86, 89, 75, 65, 128, + 75, 65, 86, 128, 75, 65, 85, 86, 128, 75, 65, 85, 78, 65, 128, 75, 65, + 85, 206, 75, 65, 85, 66, 128, 75, 65, 84, 79, 128, 75, 65, 84, 72, 73, + 83, 84, 73, 128, 75, 65, 84, 72, 65, 75, 193, 75, 65, 84, 65, 86, 65, 83, + 77, 65, 128, 75, 65, 84, 65, 86, 193, 75, 65, 84, 65, 75, 65, 78, 65, 45, + 72, 73, 82, 65, 71, 65, 78, 193, 75, 65, 83, 82, 65, 84, 65, 78, 128, 75, + 65, 83, 82, 65, 84, 65, 206, 75, 65, 83, 82, 65, 128, 75, 65, 83, 82, + 193, 75, 65, 83, 75, 65, 76, 128, 75, 65, 83, 75, 65, 204, 75, 65, 83, + 72, 77, 73, 82, 201, 75, 65, 82, 83, 72, 65, 78, 65, 128, 75, 65, 82, 79, + 82, 73, 73, 128, 75, 65, 82, 207, 75, 65, 82, 69, 206, 75, 65, 82, 65, + 84, 84, 79, 128, 75, 65, 82, 65, 78, 128, 75, 65, 80, 89, 69, 79, 85, 78, + 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 75, 65, 80, 89, 69, 79, 85, + 78, 82, 73, 69, 85, 76, 128, 75, 65, 80, 89, 69, 79, 85, 78, 80, 72, 73, + 69, 85, 80, 72, 128, 75, 65, 80, 89, 69, 79, 85, 78, 77, 73, 69, 85, 77, + 128, 75, 65, 80, 80, 65, 128, 75, 65, 80, 80, 193, 75, 65, 80, 79, 128, + 75, 65, 80, 72, 128, 75, 65, 80, 65, 76, 128, 75, 65, 80, 65, 128, 75, + 65, 208, 75, 65, 78, 84, 65, 74, 193, 75, 65, 78, 71, 128, 75, 65, 78, + 199, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, 65, 77, 50, + 128, 75, 65, 77, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, + 128, 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 86, 128, 75, 65, 73, 84, + 72, 201, 75, 65, 73, 82, 73, 128, 75, 65, 73, 66, 128, 75, 65, 73, 128, + 75, 65, 201, 75, 65, 70, 65, 128, 75, 65, 70, 128, 75, 65, 198, 75, 65, + 68, 53, 128, 75, 65, 68, 181, 75, 65, 68, 52, 128, 75, 65, 68, 51, 128, + 75, 65, 68, 179, 75, 65, 68, 50, 128, 75, 65, 68, 128, 75, 65, 66, 193, + 75, 65, 66, 128, 75, 65, 65, 86, 128, 75, 65, 65, 73, 128, 75, 65, 65, + 70, 85, 128, 75, 65, 65, 70, 128, 75, 65, 65, 66, 128, 75, 65, 50, 128, 75, 65, 178, 75, 48, 48, 56, 128, 75, 48, 48, 55, 128, 75, 48, 48, 54, 128, 75, 48, 48, 53, 128, 75, 48, 48, 52, 128, 75, 48, 48, 51, 128, 75, 48, 48, 50, 128, 75, 48, 48, 49, 128, 74, 87, 65, 128, 74, 85, 85, 128, @@ -2319,1509 +2488,1538 @@ static unsigned char lexicon[] = { 74, 85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84, 128, 74, 85, 79, 80, 128, 74, 85, 78, 79, 128, 74, 85, 78, 69, 128, 74, 85, 76, 89, 128, 74, 85, 69, 85, 73, 128, 74, 85, 68, 85, 76, 128, 74, 85, 68, 71, 69, 128, - 74, 85, 68, 69, 79, 45, 83, 80, 65, 78, 73, 83, 200, 74, 79, 89, 79, 85, - 211, 74, 79, 89, 128, 74, 79, 86, 69, 128, 74, 79, 212, 74, 79, 78, 71, - 128, 74, 79, 78, 193, 74, 79, 75, 69, 82, 128, 74, 79, 73, 78, 69, 68, - 128, 74, 79, 73, 78, 128, 74, 79, 65, 128, 74, 74, 89, 88, 128, 74, 74, - 89, 84, 128, 74, 74, 89, 80, 128, 74, 74, 89, 128, 74, 74, 85, 88, 128, - 74, 74, 85, 84, 128, 74, 74, 85, 82, 88, 128, 74, 74, 85, 82, 128, 74, - 74, 85, 80, 128, 74, 74, 85, 79, 88, 128, 74, 74, 85, 79, 80, 128, 74, - 74, 85, 79, 128, 74, 74, 85, 128, 74, 74, 79, 88, 128, 74, 74, 79, 84, - 128, 74, 74, 79, 80, 128, 74, 74, 79, 128, 74, 74, 73, 88, 128, 74, 74, - 73, 84, 128, 74, 74, 73, 80, 128, 74, 74, 73, 69, 88, 128, 74, 74, 73, - 69, 84, 128, 74, 74, 73, 69, 80, 128, 74, 74, 73, 69, 128, 74, 74, 73, - 128, 74, 74, 69, 69, 128, 74, 74, 69, 128, 74, 74, 65, 128, 74, 73, 76, - 128, 74, 73, 73, 128, 74, 73, 72, 86, 65, 77, 85, 76, 73, 89, 65, 128, - 74, 73, 65, 128, 74, 72, 79, 128, 74, 72, 69, 72, 128, 74, 72, 65, 78, - 128, 74, 72, 65, 77, 128, 74, 72, 65, 65, 128, 74, 72, 65, 128, 74, 69, - 85, 128, 74, 69, 82, 85, 83, 65, 76, 69, 77, 128, 74, 69, 82, 65, 206, - 74, 69, 82, 65, 128, 74, 69, 82, 128, 74, 69, 72, 128, 74, 69, 200, 74, - 69, 71, 79, 71, 65, 78, 128, 74, 69, 69, 77, 128, 74, 69, 65, 78, 83, - 128, 74, 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73, 89, 65, 78, 73, - 128, 74, 65, 85, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, - 74, 65, 80, 65, 78, 128, 74, 65, 78, 85, 65, 82, 89, 128, 74, 65, 76, 76, - 65, 74, 65, 76, 65, 76, 79, 85, 72, 79, 85, 128, 74, 65, 73, 128, 74, 65, - 72, 128, 74, 65, 68, 69, 128, 74, 65, 67, 75, 45, 79, 45, 76, 65, 78, 84, - 69, 82, 78, 128, 74, 65, 67, 203, 74, 45, 83, 73, 77, 80, 76, 73, 70, 73, - 69, 196, 202, 73, 90, 72, 73, 84, 83, 65, 128, 73, 90, 72, 73, 84, 83, - 193, 73, 90, 72, 69, 128, 73, 90, 65, 75, 65, 89, 193, 73, 89, 69, 75, - 128, 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, - 84, 211, 73, 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, - 83, 83, 72, 65, 82, 128, 73, 83, 79, 78, 128, 73, 83, 79, 206, 73, 83, - 79, 76, 65, 84, 69, 128, 73, 83, 69, 78, 45, 73, 83, 69, 78, 128, 73, 83, - 65, 75, 73, 193, 73, 83, 45, 80, 73, 76, 76, 65, 128, 73, 82, 85, 89, 65, - 78, 78, 65, 128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, 73, 82, 79, 78, - 45, 67, 79, 80, 80, 69, 210, 73, 82, 79, 78, 128, 73, 79, 84, 73, 70, 73, - 69, 196, 73, 79, 84, 65, 84, 69, 196, 73, 79, 84, 65, 128, 73, 79, 84, - 193, 73, 79, 82, 128, 73, 79, 68, 72, 65, 68, 72, 128, 73, 78, 86, 73, - 83, 73, 66, 76, 197, 73, 78, 86, 69, 82, 84, 69, 68, 128, 73, 78, 86, 69, - 82, 84, 69, 196, 73, 78, 86, 69, 82, 83, 197, 73, 78, 84, 82, 79, 68, 85, - 67, 69, 82, 128, 73, 78, 84, 73, 128, 73, 78, 84, 69, 82, 83, 89, 76, 76, - 65, 66, 73, 195, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 78, 128, 73, - 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 206, 73, 78, 84, 69, 82, 83, 69, - 67, 84, 73, 78, 199, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 71, 128, 73, - 78, 84, 69, 82, 80, 79, 76, 65, 84, 73, 79, 206, 73, 78, 84, 69, 82, 76, - 79, 67, 75, 69, 196, 73, 78, 84, 69, 82, 76, 73, 78, 69, 65, 210, 73, 78, - 84, 69, 82, 76, 65, 67, 69, 196, 73, 78, 84, 69, 82, 73, 79, 210, 73, 78, - 84, 69, 82, 69, 83, 212, 73, 78, 84, 69, 82, 67, 65, 76, 65, 84, 69, 128, - 73, 78, 84, 69, 71, 82, 65, 84, 73, 79, 78, 128, 73, 78, 84, 69, 71, 82, - 65, 84, 73, 79, 206, 73, 78, 84, 69, 71, 82, 65, 76, 128, 73, 78, 84, 69, - 71, 82, 65, 204, 73, 78, 83, 85, 76, 65, 210, 73, 78, 83, 84, 82, 85, 77, - 69, 78, 84, 65, 204, 73, 78, 83, 73, 68, 69, 128, 73, 78, 83, 69, 82, 84, - 73, 79, 206, 73, 78, 83, 69, 67, 84, 128, 73, 78, 83, 67, 82, 73, 80, 84, - 73, 79, 78, 65, 204, 73, 78, 80, 85, 212, 73, 78, 78, 79, 67, 69, 78, 67, - 69, 128, 73, 78, 78, 78, 128, 73, 78, 78, 69, 82, 128, 73, 78, 78, 69, - 210, 73, 78, 78, 128, 73, 78, 73, 78, 71, 85, 128, 73, 78, 73, 128, 73, - 78, 72, 73, 66, 73, 212, 73, 78, 72, 69, 82, 69, 78, 212, 73, 78, 71, 87, - 65, 90, 128, 73, 78, 70, 79, 82, 77, 65, 84, 73, 79, 206, 73, 78, 70, 76, - 85, 69, 78, 67, 69, 128, 73, 78, 70, 73, 78, 73, 84, 89, 128, 73, 78, 70, - 73, 78, 73, 84, 217, 73, 78, 68, 85, 83, 84, 82, 73, 65, 204, 73, 78, 68, - 73, 82, 69, 67, 212, 73, 78, 68, 73, 67, 65, 84, 79, 82, 128, 73, 78, 68, - 73, 67, 65, 84, 79, 210, 73, 78, 68, 73, 195, 73, 78, 68, 73, 65, 206, - 73, 78, 68, 69, 88, 128, 73, 78, 68, 69, 80, 69, 78, 68, 69, 78, 212, 73, - 78, 67, 82, 69, 77, 69, 78, 84, 128, 73, 78, 67, 82, 69, 65, 83, 69, 211, - 73, 78, 67, 82, 69, 65, 83, 69, 128, 73, 78, 67, 79, 77, 80, 76, 69, 84, - 197, 73, 78, 67, 79, 77, 73, 78, 199, 73, 78, 67, 76, 85, 68, 73, 78, - 199, 73, 78, 67, 72, 128, 73, 78, 66, 79, 216, 73, 78, 65, 80, 128, 73, - 78, 45, 65, 76, 65, 70, 128, 73, 77, 80, 69, 82, 73, 65, 204, 73, 77, 80, - 69, 82, 70, 69, 67, 84, 85, 205, 73, 77, 80, 69, 82, 70, 69, 67, 84, 65, - 128, 73, 77, 80, 69, 82, 70, 69, 67, 84, 193, 73, 77, 78, 128, 73, 77, - 73, 83, 69, 79, 211, 73, 77, 73, 78, 51, 128, 73, 77, 73, 78, 128, 73, - 77, 73, 206, 73, 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, 73, 77, 73, 70, - 84, 72, 79, 82, 65, 128, 73, 77, 73, 70, 79, 78, 79, 78, 128, 73, 77, 73, - 68, 73, 65, 82, 71, 79, 78, 128, 73, 77, 65, 71, 197, 73, 76, 85, 89, 65, - 78, 78, 65, 128, 73, 76, 85, 89, 128, 73, 76, 85, 85, 89, 65, 78, 78, 65, - 128, 73, 76, 85, 84, 128, 73, 76, 73, 77, 77, 85, 52, 128, 73, 76, 73, - 77, 77, 85, 51, 128, 73, 76, 73, 77, 77, 85, 128, 73, 76, 73, 77, 77, - 213, 73, 76, 50, 128, 73, 75, 65, 82, 65, 128, 73, 75, 65, 82, 193, 73, - 74, 128, 73, 73, 89, 65, 78, 78, 65, 128, 73, 71, 73, 128, 73, 71, 201, - 73, 71, 71, 87, 83, 128, 73, 70, 73, 78, 128, 73, 69, 85, 78, 71, 45, 84, - 73, 75, 69, 85, 84, 128, 73, 69, 85, 78, 71, 45, 84, 72, 73, 69, 85, 84, - 72, 128, 73, 69, 85, 78, 71, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, - 75, 128, 73, 69, 85, 78, 71, 45, 82, 73, 69, 85, 76, 128, 73, 69, 85, 78, - 71, 45, 80, 73, 69, 85, 80, 128, 73, 69, 85, 78, 71, 45, 80, 72, 73, 69, - 85, 80, 72, 128, 73, 69, 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128, 73, - 69, 85, 78, 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, 73, 69, 85, 78, 71, - 45, 67, 73, 69, 85, 67, 128, 73, 69, 85, 78, 71, 45, 67, 72, 73, 69, 85, - 67, 72, 128, 73, 69, 85, 78, 199, 73, 68, 76, 69, 128, 73, 68, 73, 77, - 128, 73, 68, 73, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 57, 48, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 56, 68, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 67, 65, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 57, 69, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 68, 52, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 55, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 55, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 55, 54, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 51, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 49, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 49, 50, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 55, 48, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 54, 70, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 54, 69, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 50, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 54, 54, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 54, 53, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 54, 53, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 53, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 53, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 48, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 54, 50, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 54, 50, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 54, 50, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 70, 56, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 68, 69, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 66, 56, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 53, 66, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 53, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 53, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 56, 70, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 53, 66, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 52, 51, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 53, 52, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 53, 51, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 53, 51, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 68, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 55, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 52, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 53, 50, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 53, 49, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 52, 69, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 56, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 50, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 48, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 52, 69, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, - 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 57, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 55, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, - 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 48, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 69, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, - 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 55, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 53, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 69, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 67, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 53, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 51, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 67, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 65, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 51, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 49, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 65, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 56, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 49, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 70, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 56, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 54, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 70, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 68, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 54, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 52, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 68, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 66, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 52, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 50, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 66, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 57, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 50, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 48, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 57, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 55, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 48, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 69, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 55, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 53, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 69, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 67, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 53, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 51, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 67, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 65, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 51, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 49, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 65, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 56, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 49, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 70, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 56, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 54, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 70, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 68, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 54, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 52, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 68, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 66, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 52, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 50, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 66, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 57, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 50, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 48, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 70, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 57, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 55, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 54, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 48, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 69, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 68, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 55, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 53, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 52, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 69, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 67, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 66, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 53, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 51, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 50, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 67, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 65, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 57, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 51, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 49, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 48, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 65, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 56, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 55, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 49, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 70, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 69, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 56, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 54, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 53, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 70, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 68, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 67, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 54, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 52, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 51, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 68, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 66, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 65, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 52, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 50, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 49, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 66, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 57, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 56, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 50, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 48, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 70, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 57, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 55, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 54, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 48, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 69, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 68, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 55, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 53, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 52, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 69, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 67, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 66, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 53, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 51, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 50, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 67, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 65, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 57, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 51, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 49, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 48, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 65, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 56, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 55, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 49, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 70, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 69, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 56, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 54, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 53, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 70, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 68, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 67, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 54, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 52, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 51, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 48, 48, 128, 73, 68, 69, 78, 84, 73, 70, 73, 67, 65, 84, - 73, 79, 78, 128, 73, 68, 69, 78, 84, 73, 67, 65, 204, 73, 67, 72, 79, 85, - 128, 73, 67, 72, 79, 83, 128, 73, 67, 72, 73, 77, 65, 84, 79, 83, 128, - 73, 67, 72, 65, 68, 73, 78, 128, 73, 67, 69, 76, 65, 78, 68, 73, 67, 45, - 89, 82, 128, 73, 66, 73, 70, 73, 76, 73, 128, 73, 65, 85, 68, 65, 128, - 73, 48, 49, 53, 128, 73, 48, 49, 52, 128, 73, 48, 49, 51, 128, 73, 48, - 49, 50, 128, 73, 48, 49, 49, 65, 128, 73, 48, 49, 49, 128, 73, 48, 49, - 48, 65, 128, 73, 48, 49, 48, 128, 73, 48, 48, 57, 65, 128, 73, 48, 48, - 57, 128, 73, 48, 48, 56, 128, 73, 48, 48, 55, 128, 73, 48, 48, 54, 128, - 73, 48, 48, 53, 65, 128, 73, 48, 48, 53, 128, 73, 48, 48, 52, 128, 73, - 48, 48, 51, 128, 73, 48, 48, 50, 128, 73, 48, 48, 49, 128, 73, 45, 89, - 85, 128, 73, 45, 89, 79, 128, 73, 45, 89, 69, 79, 128, 73, 45, 89, 69, - 128, 73, 45, 89, 65, 69, 128, 73, 45, 89, 65, 45, 79, 128, 73, 45, 89, - 65, 128, 73, 45, 79, 45, 73, 128, 73, 45, 79, 128, 73, 45, 69, 85, 128, - 73, 45, 66, 69, 65, 77, 128, 73, 45, 65, 82, 65, 69, 65, 128, 73, 45, 65, - 128, 72, 90, 90, 90, 71, 128, 72, 90, 90, 90, 128, 72, 90, 90, 80, 128, - 72, 90, 90, 128, 72, 90, 87, 71, 128, 72, 90, 87, 128, 72, 90, 84, 128, - 72, 90, 71, 128, 72, 89, 83, 84, 69, 82, 69, 83, 73, 211, 72, 89, 80, 79, - 68, 73, 65, 83, 84, 79, 76, 69, 128, 72, 89, 80, 72, 69, 78, 65, 84, 73, - 79, 206, 72, 89, 80, 72, 69, 78, 45, 77, 73, 78, 85, 83, 128, 72, 89, 80, - 72, 69, 78, 128, 72, 89, 80, 72, 69, 206, 72, 88, 87, 71, 128, 72, 88, - 85, 79, 88, 128, 72, 88, 85, 79, 84, 128, 72, 88, 85, 79, 80, 128, 72, - 88, 85, 79, 128, 72, 88, 79, 88, 128, 72, 88, 79, 84, 128, 72, 88, 79, - 80, 128, 72, 88, 79, 128, 72, 88, 73, 88, 128, 72, 88, 73, 84, 128, 72, - 88, 73, 80, 128, 72, 88, 73, 69, 88, 128, 72, 88, 73, 69, 84, 128, 72, - 88, 73, 69, 80, 128, 72, 88, 73, 69, 128, 72, 88, 73, 128, 72, 88, 69, - 88, 128, 72, 88, 69, 80, 128, 72, 88, 69, 128, 72, 88, 65, 88, 128, 72, - 88, 65, 84, 128, 72, 88, 65, 80, 128, 72, 88, 65, 128, 72, 87, 85, 128, - 72, 87, 65, 73, 82, 128, 72, 86, 128, 72, 85, 83, 72, 69, 196, 72, 85, - 82, 65, 78, 128, 72, 85, 79, 84, 128, 72, 85, 78, 68, 82, 69, 68, 128, - 72, 85, 78, 68, 82, 69, 196, 72, 85, 78, 128, 72, 85, 77, 65, 78, 128, - 72, 85, 77, 65, 206, 72, 85, 76, 50, 128, 72, 85, 73, 73, 84, 79, 128, - 72, 85, 66, 50, 128, 72, 85, 66, 178, 72, 85, 66, 128, 72, 85, 65, 82, - 65, 68, 68, 79, 128, 72, 84, 83, 128, 72, 84, 74, 128, 72, 82, 89, 86, - 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, 80, 128, 72, 79, - 85, 83, 197, 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, 85, 82, 71, - 76, 65, 83, 211, 72, 79, 85, 82, 128, 72, 79, 85, 210, 72, 79, 84, 69, - 76, 128, 72, 79, 84, 65, 128, 72, 79, 83, 80, 73, 84, 65, 76, 128, 72, - 79, 82, 83, 69, 128, 72, 79, 82, 83, 197, 72, 79, 82, 78, 83, 128, 72, - 79, 82, 73, 90, 79, 78, 84, 65, 76, 76, 217, 72, 79, 82, 73, 90, 79, 78, - 84, 65, 76, 45, 48, 54, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 76, 45, 48, 54, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, - 76, 45, 48, 54, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, - 45, 48, 54, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, - 48, 54, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, - 54, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, - 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, - 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, - 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 52, - 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 51, 128, - 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 50, 128, 72, - 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 49, 128, 72, 79, - 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 48, 128, 72, 79, 82, - 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 54, 128, 72, 79, 82, 73, - 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 53, 128, 72, 79, 82, 73, 90, - 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, - 78, 84, 65, 76, 45, 48, 52, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, - 84, 65, 76, 45, 48, 52, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 76, 45, 48, 52, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, - 76, 45, 48, 52, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, - 45, 48, 51, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, - 48, 51, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, - 51, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, - 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, - 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, - 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 48, - 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 54, 128, - 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 53, 128, 72, - 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 52, 128, 72, 79, - 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 51, 128, 72, 79, 82, - 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 50, 128, 72, 79, 82, 73, - 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 49, 128, 72, 79, 82, 73, 90, - 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, - 78, 84, 65, 76, 45, 48, 49, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, - 84, 65, 76, 45, 48, 49, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 76, 45, 48, 49, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, - 76, 45, 48, 49, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, - 45, 48, 49, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, - 48, 49, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, - 49, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, - 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, - 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, - 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 51, - 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 50, 128, - 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 49, 128, 72, - 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 48, 128, 72, 79, - 82, 73, 90, 79, 78, 84, 65, 76, 128, 72, 79, 82, 73, 128, 72, 79, 82, - 193, 72, 79, 79, 82, 85, 128, 72, 79, 79, 80, 128, 72, 79, 79, 78, 128, - 72, 79, 79, 75, 69, 196, 72, 79, 78, 69, 89, 66, 69, 69, 128, 72, 79, 78, - 69, 217, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 79, 77, 79, 84, - 72, 69, 84, 73, 195, 72, 79, 76, 69, 128, 72, 79, 76, 68, 73, 78, 199, + 74, 85, 68, 69, 79, 45, 83, 80, 65, 78, 73, 83, 200, 74, 79, 89, 83, 84, + 73, 67, 75, 128, 74, 79, 89, 79, 85, 211, 74, 79, 89, 128, 74, 79, 86, + 69, 128, 74, 79, 212, 74, 79, 78, 71, 128, 74, 79, 78, 193, 74, 79, 75, + 69, 82, 128, 74, 79, 73, 78, 69, 68, 128, 74, 79, 73, 78, 128, 74, 79, + 65, 128, 74, 74, 89, 88, 128, 74, 74, 89, 84, 128, 74, 74, 89, 80, 128, + 74, 74, 89, 128, 74, 74, 85, 88, 128, 74, 74, 85, 84, 128, 74, 74, 85, + 82, 88, 128, 74, 74, 85, 82, 128, 74, 74, 85, 80, 128, 74, 74, 85, 79, + 88, 128, 74, 74, 85, 79, 80, 128, 74, 74, 85, 79, 128, 74, 74, 85, 128, + 74, 74, 79, 88, 128, 74, 74, 79, 84, 128, 74, 74, 79, 80, 128, 74, 74, + 79, 128, 74, 74, 73, 88, 128, 74, 74, 73, 84, 128, 74, 74, 73, 80, 128, + 74, 74, 73, 69, 88, 128, 74, 74, 73, 69, 84, 128, 74, 74, 73, 69, 80, + 128, 74, 74, 73, 69, 128, 74, 74, 73, 128, 74, 74, 69, 69, 128, 74, 74, + 69, 128, 74, 74, 65, 128, 74, 73, 76, 128, 74, 73, 73, 128, 74, 73, 72, + 86, 65, 77, 85, 76, 73, 89, 65, 128, 74, 73, 65, 128, 74, 72, 79, 88, + 128, 74, 72, 79, 128, 74, 72, 69, 72, 128, 74, 72, 65, 89, 73, 78, 128, + 74, 72, 65, 78, 128, 74, 72, 65, 77, 128, 74, 72, 65, 65, 128, 74, 72, + 65, 128, 74, 69, 85, 128, 74, 69, 82, 85, 83, 65, 76, 69, 77, 128, 74, + 69, 82, 65, 206, 74, 69, 82, 65, 128, 74, 69, 82, 128, 74, 69, 72, 128, + 74, 69, 200, 74, 69, 71, 79, 71, 65, 78, 128, 74, 69, 69, 77, 128, 74, + 69, 65, 78, 83, 128, 74, 65, 89, 78, 128, 74, 65, 89, 73, 78, 128, 74, + 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, + 85, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 74, 65, 80, + 65, 78, 128, 74, 65, 78, 85, 65, 82, 89, 128, 74, 65, 76, 76, 65, 74, 65, + 76, 65, 76, 79, 85, 72, 79, 85, 128, 74, 65, 73, 128, 74, 65, 72, 128, + 74, 65, 68, 69, 128, 74, 65, 67, 75, 83, 128, 74, 65, 67, 75, 45, 79, 45, + 76, 65, 78, 84, 69, 82, 78, 128, 74, 65, 67, 203, 74, 45, 83, 73, 77, 80, + 76, 73, 70, 73, 69, 196, 73, 90, 72, 73, 84, 83, 65, 128, 73, 90, 72, 73, + 84, 83, 193, 73, 90, 72, 69, 128, 73, 90, 65, 75, 65, 89, 193, 73, 89, + 69, 75, 128, 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 84, + 211, 73, 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, + 83, 72, 65, 82, 128, 73, 83, 79, 83, 67, 69, 76, 69, 211, 73, 83, 79, 78, + 128, 73, 83, 79, 206, 73, 83, 79, 76, 65, 84, 69, 128, 73, 83, 76, 65, + 78, 68, 128, 73, 83, 69, 78, 45, 73, 83, 69, 78, 128, 73, 83, 65, 75, 73, + 193, 73, 83, 45, 80, 73, 76, 76, 65, 128, 73, 82, 85, 89, 65, 78, 78, 65, + 128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, 73, 82, 79, 78, 45, 67, 79, + 80, 80, 69, 210, 73, 82, 79, 78, 128, 73, 82, 66, 128, 73, 79, 84, 73, + 70, 73, 69, 196, 73, 79, 84, 65, 84, 69, 196, 73, 79, 84, 65, 128, 73, + 79, 84, 193, 73, 79, 82, 128, 73, 79, 68, 72, 65, 68, 72, 128, 73, 78, + 86, 73, 83, 73, 66, 76, 197, 73, 78, 86, 69, 82, 84, 69, 68, 128, 73, 78, + 86, 69, 82, 84, 69, 196, 73, 78, 86, 69, 82, 83, 197, 73, 78, 84, 82, 79, + 68, 85, 67, 69, 82, 128, 73, 78, 84, 73, 128, 73, 78, 84, 69, 82, 83, 89, + 76, 76, 65, 66, 73, 195, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 78, + 128, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 206, 73, 78, 84, 69, 82, + 83, 69, 67, 84, 73, 78, 199, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 71, + 128, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 199, 73, 78, 84, 69, 82, 80, + 79, 76, 65, 84, 73, 79, 206, 73, 78, 84, 69, 82, 76, 79, 67, 75, 69, 196, + 73, 78, 84, 69, 82, 76, 73, 78, 69, 65, 210, 73, 78, 84, 69, 82, 76, 65, + 67, 69, 196, 73, 78, 84, 69, 82, 73, 79, 210, 73, 78, 84, 69, 82, 69, 83, + 212, 73, 78, 84, 69, 82, 67, 65, 76, 65, 84, 69, 128, 73, 78, 84, 69, 71, + 82, 65, 84, 73, 79, 78, 128, 73, 78, 84, 69, 71, 82, 65, 84, 73, 79, 206, + 73, 78, 84, 69, 71, 82, 65, 76, 128, 73, 78, 84, 69, 71, 82, 65, 204, 73, + 78, 83, 85, 76, 65, 210, 73, 78, 83, 84, 82, 85, 77, 69, 78, 84, 65, 204, + 73, 78, 83, 73, 68, 69, 128, 73, 78, 83, 73, 68, 197, 73, 78, 83, 69, 82, + 84, 73, 79, 206, 73, 78, 83, 69, 67, 84, 128, 73, 78, 83, 67, 82, 73, 80, + 84, 73, 79, 78, 65, 204, 73, 78, 80, 85, 212, 73, 78, 78, 79, 67, 69, 78, + 67, 69, 128, 73, 78, 78, 78, 128, 73, 78, 78, 69, 82, 128, 73, 78, 78, + 69, 210, 73, 78, 78, 128, 73, 78, 73, 78, 71, 85, 128, 73, 78, 73, 128, + 73, 78, 72, 73, 66, 73, 212, 73, 78, 72, 69, 82, 69, 78, 212, 73, 78, 71, + 87, 65, 90, 128, 73, 78, 70, 79, 82, 77, 65, 84, 73, 79, 206, 73, 78, 70, + 76, 85, 69, 78, 67, 69, 128, 73, 78, 70, 73, 78, 73, 84, 89, 128, 73, 78, + 70, 73, 78, 73, 84, 217, 73, 78, 68, 85, 83, 84, 82, 73, 65, 204, 73, 78, + 68, 73, 82, 69, 67, 212, 73, 78, 68, 73, 67, 65, 84, 79, 82, 128, 73, 78, + 68, 73, 67, 65, 84, 79, 210, 73, 78, 68, 73, 195, 73, 78, 68, 73, 65, + 206, 73, 78, 68, 69, 88, 128, 73, 78, 68, 69, 216, 73, 78, 68, 69, 80, + 69, 78, 68, 69, 78, 212, 73, 78, 67, 82, 69, 77, 69, 78, 84, 128, 73, 78, + 67, 82, 69, 65, 83, 69, 211, 73, 78, 67, 82, 69, 65, 83, 69, 128, 73, 78, + 67, 82, 69, 65, 83, 197, 73, 78, 67, 79, 77, 80, 76, 69, 84, 197, 73, 78, + 67, 79, 77, 73, 78, 199, 73, 78, 67, 76, 85, 68, 73, 78, 199, 73, 78, 67, + 72, 128, 73, 78, 66, 79, 216, 73, 78, 65, 80, 128, 73, 78, 45, 65, 76, + 65, 70, 128, 73, 77, 80, 69, 82, 73, 65, 204, 73, 77, 80, 69, 82, 70, 69, + 67, 84, 85, 205, 73, 77, 80, 69, 82, 70, 69, 67, 84, 65, 128, 73, 77, 80, + 69, 82, 70, 69, 67, 84, 193, 73, 77, 78, 128, 73, 77, 73, 83, 69, 79, + 211, 73, 77, 73, 78, 51, 128, 73, 77, 73, 78, 128, 73, 77, 73, 206, 73, + 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, 73, 77, 73, 70, 84, 72, 79, 82, + 65, 128, 73, 77, 73, 70, 79, 78, 79, 78, 128, 73, 77, 73, 68, 73, 65, 82, + 71, 79, 78, 128, 73, 77, 65, 71, 197, 73, 76, 85, 89, 65, 78, 78, 65, + 128, 73, 76, 85, 89, 128, 73, 76, 85, 85, 89, 65, 78, 78, 65, 128, 73, + 76, 85, 84, 128, 73, 76, 73, 77, 77, 85, 52, 128, 73, 76, 73, 77, 77, 85, + 51, 128, 73, 76, 73, 77, 77, 85, 128, 73, 76, 73, 77, 77, 213, 73, 76, + 50, 128, 73, 75, 65, 82, 65, 128, 73, 75, 65, 82, 193, 73, 74, 128, 73, + 73, 89, 65, 78, 78, 65, 128, 73, 71, 73, 128, 73, 71, 201, 73, 71, 71, + 87, 83, 128, 73, 70, 73, 78, 128, 73, 69, 85, 78, 71, 45, 84, 73, 75, 69, + 85, 84, 128, 73, 69, 85, 78, 71, 45, 84, 72, 73, 69, 85, 84, 72, 128, 73, + 69, 85, 78, 71, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 73, + 69, 85, 78, 71, 45, 82, 73, 69, 85, 76, 128, 73, 69, 85, 78, 71, 45, 80, + 73, 69, 85, 80, 128, 73, 69, 85, 78, 71, 45, 80, 72, 73, 69, 85, 80, 72, + 128, 73, 69, 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128, 73, 69, 85, 78, + 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, 73, 69, 85, 78, 71, 45, 67, 73, + 69, 85, 67, 128, 73, 69, 85, 78, 71, 45, 67, 72, 73, 69, 85, 67, 72, 128, + 73, 69, 85, 78, 199, 73, 68, 76, 69, 128, 73, 68, 73, 77, 128, 73, 68, + 73, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 57, 48, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 68, 55, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 67, 65, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 57, 69, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 55, 68, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 55, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 55, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 54, 68, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 51, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 49, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 55, 49, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 55, 48, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 54, 70, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 69, 56, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 50, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 54, 55, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 54, 54, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 54, 53, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 57, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 53, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 53, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 54, 51, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 54, 50, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 54, 50, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 52, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 70, 56, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 68, 69, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 53, 66, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 53, 66, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 53, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 57, 49, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 56, 70, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 53, 66, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 53, 52, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 53, 52, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 53, 51, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 51, 67, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 68, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 55, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 53, 50, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 53, 50, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 53, 49, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 65, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 56, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 50, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 52, 69, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 52, 69, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 65, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 57, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 55, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 49, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 48, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 56, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 55, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 53, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 70, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 69, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 54, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 53, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 51, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 68, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 67, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 52, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 51, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 49, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 66, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 65, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 50, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 49, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 70, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 57, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 56, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 48, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 70, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 68, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 55, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 54, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 69, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 68, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 66, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 53, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 52, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 67, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 66, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 57, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 51, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 50, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 65, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 57, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 55, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 49, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 48, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 56, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 55, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 53, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 70, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 69, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 54, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 53, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 51, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 68, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 67, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 52, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 51, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 49, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 66, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 65, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 50, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 49, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 70, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 57, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 56, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 48, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 70, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 68, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 55, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 54, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 69, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 68, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 66, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 53, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 52, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 67, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 66, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 57, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 51, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 50, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 65, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 57, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 55, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 49, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 48, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 69, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 56, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 55, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 53, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 70, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 69, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 67, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 54, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 53, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 51, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 68, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 67, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 65, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 52, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 51, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 49, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 66, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 65, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 56, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 50, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 49, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 70, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 57, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 56, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 54, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 48, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 70, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 68, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 55, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 54, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 52, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 69, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 68, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 66, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 53, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 52, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 50, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 67, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 66, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 57, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 51, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 50, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 48, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 65, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 57, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 55, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 49, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 48, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 69, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 56, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 55, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 53, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 70, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 69, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 67, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 54, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 53, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 51, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 68, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 67, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 65, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 52, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 51, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 49, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 66, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 65, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 56, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 50, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 49, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 70, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 57, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 56, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 54, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 48, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 70, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 68, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 55, 128, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 54, 128, 73, 68, + 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 52, 128, 73, 68, 69, 79, 71, 82, + 65, 80, 72, 45, 50, 70, 56, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 45, 50, 70, 56, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 50, 70, 56, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, + 56, 48, 48, 128, 73, 68, 69, 78, 84, 73, 70, 73, 67, 65, 84, 73, 79, 78, + 128, 73, 68, 69, 78, 84, 73, 67, 65, 204, 73, 67, 79, 78, 128, 73, 67, + 72, 79, 85, 128, 73, 67, 72, 79, 83, 128, 73, 67, 72, 73, 77, 65, 84, 79, + 83, 128, 73, 67, 72, 65, 68, 73, 78, 128, 73, 67, 69, 76, 65, 78, 68, 73, + 67, 45, 89, 82, 128, 73, 66, 73, 70, 73, 76, 73, 128, 73, 65, 85, 68, 65, + 128, 73, 48, 49, 53, 128, 73, 48, 49, 52, 128, 73, 48, 49, 51, 128, 73, + 48, 49, 50, 128, 73, 48, 49, 49, 65, 128, 73, 48, 49, 49, 128, 73, 48, + 49, 48, 65, 128, 73, 48, 49, 48, 128, 73, 48, 48, 57, 65, 128, 73, 48, + 48, 57, 128, 73, 48, 48, 56, 128, 73, 48, 48, 55, 128, 73, 48, 48, 54, + 128, 73, 48, 48, 53, 65, 128, 73, 48, 48, 53, 128, 73, 48, 48, 52, 128, + 73, 48, 48, 51, 128, 73, 48, 48, 50, 128, 73, 48, 48, 49, 128, 73, 45, + 89, 85, 128, 73, 45, 89, 79, 128, 73, 45, 89, 69, 79, 128, 73, 45, 89, + 69, 128, 73, 45, 89, 65, 69, 128, 73, 45, 89, 65, 45, 79, 128, 73, 45, + 89, 65, 128, 73, 45, 79, 45, 73, 128, 73, 45, 79, 128, 73, 45, 69, 85, + 128, 73, 45, 66, 69, 65, 77, 128, 73, 45, 65, 82, 65, 69, 65, 128, 73, + 45, 65, 128, 72, 90, 90, 90, 71, 128, 72, 90, 90, 90, 128, 72, 90, 90, + 80, 128, 72, 90, 90, 128, 72, 90, 87, 71, 128, 72, 90, 87, 128, 72, 90, + 84, 128, 72, 90, 71, 128, 72, 89, 83, 84, 69, 82, 69, 83, 73, 211, 72, + 89, 80, 79, 68, 73, 65, 83, 84, 79, 76, 69, 128, 72, 89, 80, 72, 69, 78, + 65, 84, 73, 79, 206, 72, 89, 80, 72, 69, 78, 45, 77, 73, 78, 85, 83, 128, + 72, 89, 80, 72, 69, 78, 128, 72, 89, 80, 72, 69, 206, 72, 88, 87, 71, + 128, 72, 88, 85, 79, 88, 128, 72, 88, 85, 79, 84, 128, 72, 88, 85, 79, + 80, 128, 72, 88, 85, 79, 128, 72, 88, 79, 88, 128, 72, 88, 79, 84, 128, + 72, 88, 79, 80, 128, 72, 88, 79, 128, 72, 88, 73, 88, 128, 72, 88, 73, + 84, 128, 72, 88, 73, 80, 128, 72, 88, 73, 69, 88, 128, 72, 88, 73, 69, + 84, 128, 72, 88, 73, 69, 80, 128, 72, 88, 73, 69, 128, 72, 88, 73, 128, + 72, 88, 69, 88, 128, 72, 88, 69, 80, 128, 72, 88, 69, 128, 72, 88, 65, + 88, 128, 72, 88, 65, 84, 128, 72, 88, 65, 80, 128, 72, 88, 65, 128, 72, + 87, 85, 128, 72, 87, 65, 73, 82, 128, 72, 87, 65, 72, 128, 72, 86, 128, + 72, 85, 86, 65, 128, 72, 85, 83, 72, 69, 196, 72, 85, 83, 72, 128, 72, + 85, 82, 65, 78, 128, 72, 85, 79, 84, 128, 72, 85, 78, 68, 82, 69, 68, 83, + 128, 72, 85, 78, 68, 82, 69, 68, 128, 72, 85, 78, 68, 82, 69, 196, 72, + 85, 78, 128, 72, 85, 77, 65, 78, 128, 72, 85, 77, 65, 206, 72, 85, 76, + 50, 128, 72, 85, 73, 73, 84, 79, 128, 72, 85, 66, 50, 128, 72, 85, 66, + 178, 72, 85, 66, 128, 72, 85, 65, 82, 65, 68, 68, 79, 128, 72, 85, 65, + 78, 128, 72, 84, 83, 128, 72, 84, 74, 128, 72, 82, 89, 86, 78, 73, 193, + 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, 80, 128, 72, 79, 85, 83, 197, + 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, 85, 82, 71, 76, 65, 83, + 211, 72, 79, 85, 82, 128, 72, 79, 85, 210, 72, 79, 84, 69, 76, 128, 72, + 79, 84, 65, 128, 72, 79, 83, 80, 73, 84, 65, 76, 128, 72, 79, 82, 83, 69, + 128, 72, 79, 82, 83, 197, 72, 79, 82, 82, 128, 72, 79, 82, 78, 83, 128, + 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 76, 217, 72, 79, 82, 73, 90, 79, + 78, 84, 65, 76, 45, 48, 54, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, + 84, 65, 76, 45, 48, 54, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, + 65, 76, 45, 48, 54, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, + 76, 45, 48, 54, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, + 45, 48, 54, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, + 48, 54, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, + 54, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, + 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, + 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, + 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 51, + 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 50, 128, + 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 49, 128, 72, + 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 48, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 54, 128, 72, 79, 82, + 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 53, 128, 72, 79, 82, 73, + 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 52, 128, 72, 79, 82, 73, 90, + 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, + 78, 84, 65, 76, 45, 48, 52, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, + 84, 65, 76, 45, 48, 52, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, + 65, 76, 45, 48, 52, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, + 76, 45, 48, 51, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, + 45, 48, 51, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, + 48, 51, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, + 51, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, + 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, + 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, + 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 54, + 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 53, 128, + 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 52, 128, 72, + 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 51, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 50, 128, 72, 79, 82, + 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 49, 128, 72, 79, 82, 73, + 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 48, 128, 72, 79, 82, 73, 90, + 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, + 78, 84, 65, 76, 45, 48, 49, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, + 84, 65, 76, 45, 48, 49, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, + 65, 76, 45, 48, 49, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, + 76, 45, 48, 49, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, + 45, 48, 49, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, + 48, 49, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, + 48, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, + 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, + 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, + 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 50, + 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 49, 128, + 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 48, 128, 72, + 79, 82, 73, 90, 79, 78, 84, 65, 76, 128, 72, 79, 82, 73, 128, 72, 79, 82, + 193, 72, 79, 79, 85, 128, 72, 79, 79, 82, 85, 128, 72, 79, 79, 80, 128, + 72, 79, 79, 78, 128, 72, 79, 79, 75, 69, 196, 72, 79, 78, 69, 89, 66, 69, + 69, 128, 72, 79, 78, 69, 217, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, + 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 195, 72, 79, 76, 79, 128, 72, + 79, 76, 76, 79, 215, 72, 79, 76, 69, 128, 72, 79, 76, 68, 73, 78, 199, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 75, 65, 128, 72, - 79, 73, 128, 72, 79, 67, 72, 79, 128, 72, 78, 85, 84, 128, 72, 78, 85, - 79, 88, 128, 72, 78, 85, 79, 128, 72, 78, 79, 88, 128, 72, 78, 79, 84, - 128, 72, 78, 79, 80, 128, 72, 78, 73, 88, 128, 72, 78, 73, 84, 128, 72, - 78, 73, 80, 128, 72, 78, 73, 69, 88, 128, 72, 78, 73, 69, 84, 128, 72, - 78, 73, 69, 80, 128, 72, 78, 73, 69, 128, 72, 78, 73, 128, 72, 78, 69, - 88, 128, 72, 78, 69, 80, 128, 72, 78, 69, 128, 72, 78, 65, 88, 128, 72, - 78, 65, 84, 128, 72, 78, 65, 80, 128, 72, 78, 65, 128, 72, 77, 89, 88, - 128, 72, 77, 89, 82, 88, 128, 72, 77, 89, 82, 128, 72, 77, 89, 80, 128, - 72, 77, 89, 128, 72, 77, 85, 88, 128, 72, 77, 85, 84, 128, 72, 77, 85, - 82, 88, 128, 72, 77, 85, 82, 128, 72, 77, 85, 80, 128, 72, 77, 85, 79, - 88, 128, 72, 77, 85, 79, 80, 128, 72, 77, 85, 79, 128, 72, 77, 85, 128, - 72, 77, 79, 88, 128, 72, 77, 79, 84, 128, 72, 77, 79, 80, 128, 72, 77, - 79, 128, 72, 77, 73, 88, 128, 72, 77, 73, 84, 128, 72, 77, 73, 80, 128, - 72, 77, 73, 69, 88, 128, 72, 77, 73, 69, 80, 128, 72, 77, 73, 69, 128, - 72, 77, 73, 128, 72, 77, 69, 128, 72, 77, 65, 88, 128, 72, 77, 65, 84, - 128, 72, 77, 65, 80, 128, 72, 77, 65, 128, 72, 76, 89, 88, 128, 72, 76, - 89, 84, 128, 72, 76, 89, 82, 88, 128, 72, 76, 89, 82, 128, 72, 76, 89, - 80, 128, 72, 76, 89, 128, 72, 76, 85, 88, 128, 72, 76, 85, 84, 128, 72, - 76, 85, 82, 88, 128, 72, 76, 85, 82, 128, 72, 76, 85, 80, 128, 72, 76, - 85, 79, 88, 128, 72, 76, 85, 79, 80, 128, 72, 76, 85, 79, 128, 72, 76, - 85, 128, 72, 76, 79, 88, 128, 72, 76, 79, 80, 128, 72, 76, 79, 128, 72, - 76, 73, 88, 128, 72, 76, 73, 84, 128, 72, 76, 73, 80, 128, 72, 76, 73, - 69, 88, 128, 72, 76, 73, 69, 80, 128, 72, 76, 73, 69, 128, 72, 76, 73, - 128, 72, 76, 69, 88, 128, 72, 76, 69, 80, 128, 72, 76, 69, 128, 72, 76, - 65, 88, 128, 72, 76, 65, 84, 128, 72, 76, 65, 80, 128, 72, 76, 65, 128, - 72, 75, 128, 72, 73, 90, 66, 128, 72, 73, 83, 84, 79, 82, 73, 195, 72, - 73, 82, 73, 81, 128, 72, 73, 71, 72, 45, 83, 80, 69, 69, 196, 72, 73, 71, - 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 71, 72, 45, 72, - 69, 69, 76, 69, 196, 72, 73, 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, 73, - 79, 83, 128, 72, 73, 69, 85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, 69, - 85, 72, 45, 80, 73, 69, 85, 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, 69, - 85, 78, 128, 72, 73, 69, 85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, 69, - 85, 200, 72, 73, 69, 82, 79, 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, - 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, 69, 84, 128, 72, 73, 68, 69, - 128, 72, 73, 66, 73, 83, 67, 85, 83, 128, 72, 72, 87, 65, 128, 72, 72, - 85, 128, 72, 72, 73, 128, 72, 72, 69, 69, 128, 72, 72, 69, 128, 72, 72, - 65, 65, 128, 72, 71, 128, 72, 69, 88, 73, 70, 79, 82, 205, 72, 69, 88, - 65, 71, 82, 65, 205, 72, 69, 88, 65, 71, 79, 78, 128, 72, 69, 82, 85, 84, - 85, 128, 72, 69, 82, 85, 128, 72, 69, 82, 77, 73, 84, 73, 65, 206, 72, - 69, 82, 77, 73, 79, 78, 73, 65, 206, 72, 69, 82, 77, 69, 83, 128, 72, 69, - 82, 69, 128, 72, 69, 82, 66, 128, 72, 69, 82, 65, 69, 85, 205, 72, 69, - 78, 71, 128, 72, 69, 78, 199, 72, 69, 77, 80, 128, 72, 69, 76, 77, 69, - 84, 128, 72, 69, 76, 77, 69, 212, 72, 69, 76, 205, 72, 69, 76, 73, 67, - 79, 80, 84, 69, 82, 128, 72, 69, 75, 85, 84, 65, 65, 82, 85, 128, 72, 69, - 73, 83, 69, 73, 128, 72, 69, 65, 86, 89, 128, 72, 69, 65, 86, 69, 78, 76, - 217, 72, 69, 65, 86, 69, 78, 128, 72, 69, 65, 86, 69, 206, 72, 69, 65, - 82, 84, 83, 128, 72, 69, 65, 82, 84, 45, 83, 72, 65, 80, 69, 196, 72, 69, - 65, 82, 84, 128, 72, 69, 65, 82, 212, 72, 69, 65, 82, 45, 78, 79, 45, 69, - 86, 73, 204, 72, 69, 65, 68, 83, 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, - 83, 84, 79, 78, 197, 72, 69, 65, 68, 80, 72, 79, 78, 69, 128, 72, 69, 65, - 68, 73, 78, 71, 128, 72, 66, 65, 83, 65, 45, 69, 83, 65, 83, 193, 72, 66, - 65, 83, 193, 72, 65, 89, 65, 78, 78, 65, 128, 72, 65, 86, 69, 128, 72, - 65, 85, 80, 84, 83, 84, 73, 77, 77, 69, 128, 72, 65, 84, 72, 73, 128, 72, - 65, 84, 69, 128, 72, 65, 84, 67, 72, 73, 78, 199, 72, 65, 84, 65, 198, - 72, 65, 83, 69, 210, 72, 65, 83, 65, 78, 84, 65, 128, 72, 65, 82, 80, 79, - 79, 78, 128, 72, 65, 82, 80, 79, 79, 206, 72, 65, 82, 77, 79, 78, 73, 67, - 128, 72, 65, 82, 75, 76, 69, 65, 206, 72, 65, 82, 68, 78, 69, 83, 83, - 128, 72, 65, 82, 196, 72, 65, 80, 80, 217, 72, 65, 78, 85, 78, 79, 207, - 72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, - 211, 72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 76, 69, 128, 72, - 65, 78, 68, 66, 65, 71, 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, - 65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 83, 84, 69, 210, 72, + 79, 67, 72, 79, 128, 72, 78, 85, 84, 128, 72, 78, 85, 79, 88, 128, 72, + 78, 85, 79, 128, 72, 78, 85, 66, 128, 72, 78, 79, 88, 128, 72, 78, 79, + 84, 128, 72, 78, 79, 80, 128, 72, 78, 73, 88, 128, 72, 78, 73, 84, 128, + 72, 78, 73, 80, 128, 72, 78, 73, 69, 88, 128, 72, 78, 73, 69, 84, 128, + 72, 78, 73, 69, 80, 128, 72, 78, 73, 69, 128, 72, 78, 73, 128, 72, 78, + 69, 88, 128, 72, 78, 69, 80, 128, 72, 78, 69, 128, 72, 78, 65, 88, 128, + 72, 78, 65, 85, 128, 72, 78, 65, 84, 128, 72, 78, 65, 80, 128, 72, 78, + 65, 128, 72, 77, 89, 88, 128, 72, 77, 89, 82, 88, 128, 72, 77, 89, 82, + 128, 72, 77, 89, 80, 128, 72, 77, 89, 128, 72, 77, 85, 88, 128, 72, 77, + 85, 84, 128, 72, 77, 85, 82, 88, 128, 72, 77, 85, 82, 128, 72, 77, 85, + 80, 128, 72, 77, 85, 79, 88, 128, 72, 77, 85, 79, 80, 128, 72, 77, 85, + 79, 128, 72, 77, 85, 128, 72, 77, 79, 88, 128, 72, 77, 79, 84, 128, 72, + 77, 79, 80, 128, 72, 77, 79, 128, 72, 77, 73, 88, 128, 72, 77, 73, 84, + 128, 72, 77, 73, 80, 128, 72, 77, 73, 69, 88, 128, 72, 77, 73, 69, 80, + 128, 72, 77, 73, 69, 128, 72, 77, 73, 128, 72, 77, 69, 128, 72, 77, 65, + 88, 128, 72, 77, 65, 84, 128, 72, 77, 65, 80, 128, 72, 77, 65, 128, 72, + 76, 89, 88, 128, 72, 76, 89, 84, 128, 72, 76, 89, 82, 88, 128, 72, 76, + 89, 82, 128, 72, 76, 89, 80, 128, 72, 76, 89, 128, 72, 76, 85, 88, 128, + 72, 76, 85, 84, 128, 72, 76, 85, 82, 88, 128, 72, 76, 85, 82, 128, 72, + 76, 85, 80, 128, 72, 76, 85, 79, 88, 128, 72, 76, 85, 79, 80, 128, 72, + 76, 85, 79, 128, 72, 76, 85, 128, 72, 76, 79, 88, 128, 72, 76, 79, 80, + 128, 72, 76, 79, 128, 72, 76, 73, 88, 128, 72, 76, 73, 84, 128, 72, 76, + 73, 80, 128, 72, 76, 73, 69, 88, 128, 72, 76, 73, 69, 80, 128, 72, 76, + 73, 69, 128, 72, 76, 73, 128, 72, 76, 69, 88, 128, 72, 76, 69, 80, 128, + 72, 76, 69, 128, 72, 76, 65, 88, 128, 72, 76, 65, 85, 128, 72, 76, 65, + 84, 128, 72, 76, 65, 80, 128, 72, 76, 65, 128, 72, 76, 128, 72, 75, 128, + 72, 73, 90, 66, 128, 72, 73, 89, 79, 128, 72, 73, 83, 84, 79, 82, 73, + 195, 72, 73, 82, 73, 81, 128, 72, 73, 71, 72, 45, 83, 80, 69, 69, 196, + 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 71, + 72, 45, 76, 79, 215, 72, 73, 71, 72, 45, 72, 69, 69, 76, 69, 196, 72, 73, + 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, 73, 79, 83, 128, 72, 73, 69, 85, + 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, 69, 85, 72, 45, 80, 73, 69, 85, + 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, 69, 85, 78, 128, 72, 73, 69, 85, + 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, 69, 85, 200, 72, 73, 69, 82, 79, + 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, 128, 72, 73, 68, 73, 78, 199, + 72, 73, 68, 69, 84, 128, 72, 73, 68, 69, 128, 72, 73, 66, 73, 83, 67, 85, + 83, 128, 72, 72, 87, 65, 128, 72, 72, 85, 128, 72, 72, 73, 128, 72, 72, + 69, 69, 128, 72, 72, 69, 128, 72, 72, 65, 65, 128, 72, 71, 128, 72, 69, + 89, 84, 128, 72, 69, 88, 73, 70, 79, 82, 205, 72, 69, 88, 65, 71, 82, 65, + 205, 72, 69, 88, 65, 71, 79, 78, 128, 72, 69, 82, 85, 84, 85, 128, 72, + 69, 82, 85, 128, 72, 69, 82, 77, 73, 84, 73, 65, 206, 72, 69, 82, 77, 73, + 79, 78, 73, 65, 206, 72, 69, 82, 77, 69, 83, 128, 72, 69, 82, 69, 128, + 72, 69, 82, 66, 128, 72, 69, 82, 65, 69, 85, 205, 72, 69, 78, 71, 128, + 72, 69, 78, 199, 72, 69, 77, 80, 128, 72, 69, 76, 77, 69, 84, 128, 72, + 69, 76, 77, 69, 212, 72, 69, 76, 205, 72, 69, 76, 73, 67, 79, 80, 84, 69, + 82, 128, 72, 69, 75, 85, 84, 65, 65, 82, 85, 128, 72, 69, 73, 83, 69, 73, + 128, 72, 69, 69, 73, 128, 72, 69, 65, 86, 89, 128, 72, 69, 65, 86, 69, + 78, 76, 217, 72, 69, 65, 86, 69, 78, 128, 72, 69, 65, 86, 69, 206, 72, + 69, 65, 82, 84, 83, 128, 72, 69, 65, 82, 84, 45, 83, 72, 65, 80, 69, 196, + 72, 69, 65, 82, 84, 128, 72, 69, 65, 82, 212, 72, 69, 65, 82, 45, 78, 79, + 45, 69, 86, 73, 204, 72, 69, 65, 68, 83, 84, 82, 79, 75, 69, 128, 72, 69, + 65, 68, 83, 84, 79, 78, 197, 72, 69, 65, 68, 80, 72, 79, 78, 69, 128, 72, + 69, 65, 68, 73, 78, 71, 128, 72, 66, 65, 83, 65, 45, 69, 83, 65, 83, 193, + 72, 66, 65, 83, 193, 72, 65, 89, 65, 78, 78, 65, 128, 72, 65, 87, 74, + 128, 72, 65, 86, 69, 128, 72, 65, 85, 80, 84, 83, 84, 73, 77, 77, 69, + 128, 72, 65, 213, 72, 65, 84, 72, 73, 128, 72, 65, 84, 69, 128, 72, 65, + 84, 67, 72, 73, 78, 199, 72, 65, 84, 65, 198, 72, 65, 83, 69, 210, 72, + 65, 83, 65, 78, 84, 65, 128, 72, 65, 82, 80, 79, 79, 78, 128, 72, 65, 82, + 80, 79, 79, 206, 72, 65, 82, 77, 79, 78, 73, 67, 128, 72, 65, 82, 75, 76, + 69, 65, 206, 72, 65, 82, 68, 78, 69, 83, 83, 128, 72, 65, 82, 196, 72, + 65, 80, 80, 217, 72, 65, 78, 85, 78, 79, 207, 72, 65, 78, 71, 90, 72, 79, + 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 211, 72, 65, 78, 68, 76, + 69, 83, 128, 72, 65, 78, 68, 76, 69, 128, 72, 65, 78, 68, 66, 65, 71, + 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 128, 72, 65, + 77, 90, 65, 128, 72, 65, 77, 90, 193, 72, 65, 77, 83, 84, 69, 210, 72, 65, 77, 77, 69, 82, 128, 72, 65, 77, 77, 69, 210, 72, 65, 77, 66, 85, 82, 71, 69, 82, 128, 72, 65, 76, 81, 65, 128, 72, 65, 76, 79, 128, 72, 65, 76, 70, 45, 67, 73, 82, 67, 76, 197, 72, 65, 76, 70, 128, 72, 65, 76, 66, 69, 82, 68, 128, 72, 65, 76, 65, 78, 84, 65, 128, 72, 65, 73, 84, 85, - 128, 72, 65, 73, 82, 67, 85, 84, 128, 72, 65, 73, 82, 128, 72, 65, 71, - 76, 65, 218, 72, 65, 71, 76, 128, 72, 65, 70, 85, 75, 72, 65, 128, 72, - 65, 70, 85, 75, 72, 128, 72, 65, 69, 71, 204, 72, 65, 65, 82, 85, 128, - 72, 65, 65, 77, 128, 72, 65, 193, 72, 65, 45, 72, 65, 128, 72, 48, 48, - 56, 128, 72, 48, 48, 55, 128, 72, 48, 48, 54, 65, 128, 72, 48, 48, 54, - 128, 72, 48, 48, 53, 128, 72, 48, 48, 52, 128, 72, 48, 48, 51, 128, 72, - 48, 48, 50, 128, 72, 48, 48, 49, 128, 72, 45, 84, 89, 80, 197, 71, 89, - 85, 128, 71, 89, 79, 78, 128, 71, 89, 79, 128, 71, 89, 73, 128, 71, 89, - 70, 213, 71, 89, 69, 69, 128, 71, 89, 65, 83, 128, 71, 89, 65, 65, 128, - 71, 89, 65, 128, 71, 89, 128, 71, 87, 85, 128, 71, 87, 73, 128, 71, 87, - 69, 69, 128, 71, 87, 69, 128, 71, 87, 65, 65, 128, 71, 87, 65, 128, 71, - 86, 128, 71, 85, 82, 85, 83, 72, 128, 71, 85, 82, 85, 78, 128, 71, 85, - 82, 65, 77, 85, 84, 79, 78, 128, 71, 85, 82, 55, 128, 71, 85, 78, 85, + 128, 72, 65, 73, 211, 72, 65, 73, 82, 67, 85, 84, 128, 72, 65, 73, 82, + 128, 72, 65, 71, 76, 65, 218, 72, 65, 71, 76, 128, 72, 65, 70, 85, 75, + 72, 65, 128, 72, 65, 70, 85, 75, 72, 128, 72, 65, 69, 71, 204, 72, 65, + 65, 82, 85, 128, 72, 65, 65, 77, 128, 72, 65, 193, 72, 65, 45, 72, 65, + 128, 72, 48, 48, 56, 128, 72, 48, 48, 55, 128, 72, 48, 48, 54, 65, 128, + 72, 48, 48, 54, 128, 72, 48, 48, 53, 128, 72, 48, 48, 52, 128, 72, 48, + 48, 51, 128, 72, 48, 48, 50, 128, 72, 48, 48, 49, 128, 72, 45, 84, 89, + 80, 197, 71, 89, 85, 128, 71, 89, 79, 78, 128, 71, 89, 79, 128, 71, 89, + 73, 128, 71, 89, 70, 213, 71, 89, 69, 69, 128, 71, 89, 65, 83, 128, 71, + 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 128, 71, 87, 85, 128, 71, 87, + 73, 128, 71, 87, 69, 69, 128, 71, 87, 69, 128, 71, 87, 65, 65, 128, 71, + 87, 65, 128, 71, 86, 65, 78, 71, 128, 71, 86, 128, 71, 85, 82, 85, 83, + 72, 128, 71, 85, 82, 85, 78, 128, 71, 85, 82, 77, 85, 75, 72, 201, 71, + 85, 82, 65, 77, 85, 84, 79, 78, 128, 71, 85, 82, 55, 128, 71, 85, 78, 85, 128, 71, 85, 78, 213, 71, 85, 205, 71, 85, 76, 128, 71, 85, 73, 84, 65, - 82, 128, 71, 85, 199, 71, 85, 69, 72, 128, 71, 85, 69, 200, 71, 85, 68, - 128, 71, 85, 196, 71, 85, 65, 82, 68, 83, 77, 65, 78, 128, 71, 85, 65, - 82, 68, 69, 68, 78, 69, 83, 83, 128, 71, 85, 65, 82, 68, 69, 196, 71, 85, - 65, 82, 68, 128, 71, 85, 65, 82, 65, 78, 201, 71, 85, 193, 71, 85, 178, - 71, 84, 69, 210, 71, 83, 85, 77, 128, 71, 83, 85, 205, 71, 82, 213, 71, - 82, 79, 87, 73, 78, 199, 71, 82, 79, 85, 78, 68, 128, 71, 82, 79, 78, 84, - 72, 73, 83, 77, 65, 84, 65, 128, 71, 82, 73, 78, 78, 73, 78, 199, 71, 82, - 73, 77, 65, 67, 73, 78, 199, 71, 82, 69, 71, 79, 82, 73, 65, 206, 71, 82, - 69, 69, 206, 71, 82, 69, 65, 84, 78, 69, 83, 83, 128, 71, 82, 69, 65, 84, - 69, 82, 45, 84, 72, 65, 78, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, - 65, 206, 71, 82, 69, 65, 84, 69, 210, 71, 82, 69, 65, 212, 71, 82, 65, - 86, 69, 89, 65, 82, 196, 71, 82, 65, 86, 69, 45, 77, 65, 67, 82, 79, 78, - 128, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, - 128, 71, 82, 65, 86, 197, 71, 82, 65, 84, 69, 82, 128, 71, 82, 65, 83, - 83, 128, 71, 82, 65, 83, 211, 71, 82, 65, 80, 72, 69, 77, 197, 71, 82, - 65, 80, 69, 83, 128, 71, 82, 65, 77, 77, 193, 71, 82, 65, 73, 78, 128, - 71, 82, 65, 68, 85, 65, 84, 73, 79, 206, 71, 82, 65, 67, 69, 128, 71, 82, - 65, 67, 197, 71, 80, 65, 128, 71, 79, 82, 84, 72, 77, 73, 75, 79, 206, - 71, 79, 82, 84, 128, 71, 79, 82, 71, 79, 84, 69, 82, 73, 128, 71, 79, 82, - 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 71, 79, 82, 71, 79, 206, - 71, 79, 82, 71, 73, 128, 71, 79, 82, 65, 128, 71, 79, 79, 196, 71, 79, - 78, 71, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, 78, 199, - 71, 79, 66, 76, 73, 78, 128, 71, 79, 65, 76, 128, 71, 79, 65, 204, 71, - 79, 65, 128, 71, 78, 89, 73, 83, 128, 71, 78, 65, 86, 73, 89, 65, 78, 73, - 128, 71, 76, 79, 87, 73, 78, 199, 71, 76, 79, 84, 84, 65, 204, 71, 76, - 79, 66, 197, 71, 76, 73, 83, 83, 65, 78, 68, 207, 71, 76, 69, 73, 67, - 200, 71, 76, 65, 71, 79, 76, 73, 128, 71, 76, 65, 128, 71, 74, 69, 128, - 71, 73, 88, 128, 71, 73, 84, 128, 71, 73, 83, 72, 128, 71, 73, 83, 200, - 71, 73, 83, 65, 76, 128, 71, 73, 82, 85, 68, 65, 65, 128, 71, 73, 82, 76, + 82, 128, 71, 85, 199, 71, 85, 69, 73, 128, 71, 85, 69, 72, 128, 71, 85, + 69, 200, 71, 85, 68, 128, 71, 85, 196, 71, 85, 65, 82, 68, 83, 77, 65, + 78, 128, 71, 85, 65, 82, 68, 69, 68, 78, 69, 83, 83, 128, 71, 85, 65, 82, + 68, 69, 196, 71, 85, 65, 82, 68, 128, 71, 85, 65, 82, 65, 78, 201, 71, + 85, 193, 71, 85, 178, 71, 84, 69, 210, 71, 83, 85, 77, 128, 71, 83, 85, + 205, 71, 82, 213, 71, 82, 79, 87, 73, 78, 199, 71, 82, 79, 85, 78, 68, + 128, 71, 82, 79, 78, 84, 72, 73, 83, 77, 65, 84, 65, 128, 71, 82, 73, 78, + 78, 73, 78, 199, 71, 82, 73, 77, 65, 67, 73, 78, 199, 71, 82, 69, 71, 79, + 82, 73, 65, 206, 71, 82, 69, 69, 206, 71, 82, 69, 65, 84, 78, 69, 83, 83, + 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 65, 78, 128, 71, 82, 69, 65, + 84, 69, 82, 45, 84, 72, 65, 206, 71, 82, 69, 65, 84, 69, 210, 71, 82, 69, + 65, 212, 71, 82, 65, 86, 69, 89, 65, 82, 196, 71, 82, 65, 86, 69, 45, 77, + 65, 67, 82, 79, 78, 128, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 45, + 71, 82, 65, 86, 69, 128, 71, 82, 65, 86, 197, 71, 82, 65, 84, 69, 82, + 128, 71, 82, 65, 83, 83, 128, 71, 82, 65, 83, 211, 71, 82, 65, 80, 72, + 69, 77, 197, 71, 82, 65, 80, 69, 83, 128, 71, 82, 65, 77, 77, 193, 71, + 82, 65, 73, 78, 128, 71, 82, 65, 68, 85, 65, 84, 73, 79, 206, 71, 82, 65, + 67, 69, 128, 71, 82, 65, 67, 197, 71, 80, 65, 128, 71, 79, 82, 84, 72, + 77, 73, 75, 79, 206, 71, 79, 82, 84, 128, 71, 79, 82, 71, 79, 84, 69, 82, + 73, 128, 71, 79, 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 71, + 79, 82, 71, 79, 206, 71, 79, 82, 71, 73, 128, 71, 79, 82, 65, 128, 71, + 79, 79, 196, 71, 79, 78, 71, 128, 71, 79, 76, 70, 69, 82, 128, 71, 79, + 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, 78, 199, 71, 79, 66, 76, 73, + 78, 128, 71, 79, 65, 76, 128, 71, 79, 65, 204, 71, 79, 65, 128, 71, 78, + 89, 73, 83, 128, 71, 78, 65, 86, 73, 89, 65, 78, 73, 128, 71, 76, 79, 87, + 73, 78, 199, 71, 76, 79, 84, 84, 65, 204, 71, 76, 79, 66, 197, 71, 76, + 73, 83, 83, 65, 78, 68, 207, 71, 76, 69, 73, 67, 200, 71, 76, 65, 71, 79, + 76, 73, 128, 71, 76, 65, 128, 71, 74, 69, 128, 71, 73, 88, 128, 71, 73, + 84, 128, 71, 73, 83, 72, 128, 71, 73, 83, 200, 71, 73, 83, 65, 76, 128, + 71, 73, 82, 85, 68, 65, 65, 128, 71, 73, 82, 76, 211, 71, 73, 82, 76, 128, 71, 73, 82, 51, 128, 71, 73, 82, 179, 71, 73, 82, 50, 128, 71, 73, 82, 178, 71, 73, 80, 128, 71, 73, 78, 73, 73, 128, 71, 73, 77, 69, 76, 128, 71, 73, 77, 69, 204, 71, 73, 77, 128, 71, 73, 71, 65, 128, 71, 73, - 69, 84, 128, 71, 73, 68, 73, 77, 128, 71, 73, 66, 66, 79, 85, 211, 71, - 73, 66, 65, 128, 71, 73, 52, 128, 71, 73, 180, 71, 72, 90, 128, 71, 72, - 87, 65, 128, 71, 72, 85, 78, 78, 65, 128, 71, 72, 85, 78, 78, 193, 71, - 72, 85, 128, 71, 72, 79, 85, 128, 71, 72, 79, 83, 84, 128, 71, 72, 79, - 128, 71, 72, 73, 128, 71, 72, 72, 65, 128, 71, 72, 69, 85, 88, 128, 71, + 71, 128, 71, 73, 69, 84, 128, 71, 73, 68, 73, 77, 128, 71, 73, 66, 66, + 79, 85, 211, 71, 73, 66, 65, 128, 71, 73, 52, 128, 71, 73, 180, 71, 72, + 90, 128, 71, 72, 87, 65, 128, 71, 72, 85, 78, 78, 65, 128, 71, 72, 85, + 78, 78, 193, 71, 72, 85, 128, 71, 72, 79, 85, 128, 71, 72, 79, 83, 84, + 128, 71, 72, 79, 128, 71, 72, 73, 77, 69, 76, 128, 71, 72, 73, 128, 71, + 72, 72, 65, 128, 71, 72, 69, 89, 83, 128, 71, 72, 69, 85, 88, 128, 71, 72, 69, 85, 78, 128, 71, 72, 69, 85, 71, 72, 69, 85, 65, 69, 77, 128, 71, 72, 69, 85, 71, 72, 69, 78, 128, 71, 72, 69, 85, 65, 69, 82, 65, 69, 128, 71, 72, 69, 85, 65, 69, 71, 72, 69, 85, 65, 69, 128, 71, 72, 69, 84, 128, 71, 72, 69, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 128, 71, 72, 65, 82, 65, 69, 128, 71, 72, 65, 80, 128, 71, 72, 65, 78, - 128, 71, 72, 65, 77, 65, 76, 128, 71, 72, 65, 73, 78, 85, 128, 71, 72, - 65, 73, 78, 128, 71, 72, 65, 73, 206, 71, 72, 65, 68, 128, 71, 72, 65, - 65, 77, 65, 69, 128, 71, 72, 65, 65, 128, 71, 71, 87, 73, 128, 71, 71, - 87, 69, 69, 128, 71, 71, 87, 69, 128, 71, 71, 87, 65, 65, 128, 71, 71, - 87, 65, 128, 71, 71, 85, 88, 128, 71, 71, 85, 84, 128, 71, 71, 85, 82, - 88, 128, 71, 71, 85, 82, 128, 71, 71, 85, 79, 88, 128, 71, 71, 85, 79, - 84, 128, 71, 71, 85, 79, 80, 128, 71, 71, 85, 79, 128, 71, 71, 79, 88, - 128, 71, 71, 79, 84, 128, 71, 71, 79, 80, 128, 71, 71, 73, 88, 128, 71, - 71, 73, 84, 128, 71, 71, 73, 69, 88, 128, 71, 71, 73, 69, 80, 128, 71, - 71, 73, 69, 128, 71, 71, 69, 88, 128, 71, 71, 69, 84, 128, 71, 71, 69, - 80, 128, 71, 71, 65, 88, 128, 71, 71, 65, 84, 128, 71, 71, 65, 65, 128, - 71, 69, 84, 193, 71, 69, 83, 84, 85, 82, 69, 128, 71, 69, 83, 72, 85, - 128, 71, 69, 83, 72, 84, 73, 78, 128, 71, 69, 83, 72, 84, 73, 206, 71, - 69, 83, 72, 50, 128, 71, 69, 82, 83, 72, 65, 89, 73, 77, 128, 71, 69, 82, - 77, 65, 206, 71, 69, 82, 69, 83, 72, 128, 71, 69, 82, 69, 83, 200, 71, - 69, 79, 77, 69, 84, 82, 73, 67, 65, 76, 76, 217, 71, 69, 79, 77, 69, 84, - 82, 73, 195, 71, 69, 78, 84, 76, 197, 71, 69, 78, 73, 84, 73, 86, 69, - 128, 71, 69, 78, 73, 75, 201, 71, 69, 78, 69, 82, 73, 195, 71, 69, 77, - 73, 78, 73, 128, 71, 69, 77, 73, 78, 65, 84, 73, 79, 206, 71, 69, 205, - 71, 69, 68, 79, 76, 65, 128, 71, 69, 68, 69, 128, 71, 69, 66, 207, 71, - 69, 66, 193, 71, 69, 65, 82, 128, 71, 69, 65, 210, 71, 68, 65, 78, 128, - 71, 67, 73, 71, 128, 71, 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 73, - 69, 197, 71, 66, 69, 85, 88, 128, 71, 66, 69, 84, 128, 71, 66, 65, 89, - 73, 128, 71, 66, 65, 75, 85, 82, 85, 78, 69, 78, 128, 71, 66, 128, 71, - 65, 89, 65, 78, 85, 75, 73, 84, 84, 65, 128, 71, 65, 89, 65, 78, 78, 65, - 128, 71, 65, 89, 128, 71, 65, 85, 78, 84, 76, 69, 84, 128, 71, 65, 84, - 72, 69, 82, 73, 78, 71, 128, 71, 65, 84, 72, 69, 82, 73, 78, 199, 71, 65, - 84, 69, 128, 71, 65, 83, 72, 65, 78, 128, 71, 65, 82, 83, 72, 85, 78, 73, - 128, 71, 65, 82, 79, 78, 128, 71, 65, 82, 77, 69, 78, 84, 128, 71, 65, - 82, 68, 69, 78, 128, 71, 65, 82, 51, 128, 71, 65, 80, 80, 69, 196, 71, - 65, 208, 71, 65, 78, 77, 65, 128, 71, 65, 78, 71, 73, 65, 128, 71, 65, - 78, 68, 193, 71, 65, 78, 50, 128, 71, 65, 78, 178, 71, 65, 77, 77, 65, - 128, 71, 65, 77, 76, 65, 128, 71, 65, 77, 76, 128, 71, 65, 77, 69, 128, - 71, 65, 77, 197, 71, 65, 77, 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, - 65, 77, 65, 204, 71, 65, 71, 128, 71, 65, 70, 128, 71, 65, 198, 71, 65, - 69, 84, 84, 65, 45, 80, 73, 76, 76, 65, 128, 71, 65, 68, 79, 76, 128, 71, - 65, 68, 128, 71, 65, 196, 71, 65, 66, 65, 128, 71, 65, 66, 193, 71, 65, - 65, 70, 85, 128, 71, 65, 178, 71, 48, 53, 52, 128, 71, 48, 53, 51, 128, - 71, 48, 53, 50, 128, 71, 48, 53, 49, 128, 71, 48, 53, 48, 128, 71, 48, - 52, 57, 128, 71, 48, 52, 56, 128, 71, 48, 52, 55, 128, 71, 48, 52, 54, - 128, 71, 48, 52, 53, 65, 128, 71, 48, 52, 53, 128, 71, 48, 52, 52, 128, - 71, 48, 52, 51, 65, 128, 71, 48, 52, 51, 128, 71, 48, 52, 50, 128, 71, - 48, 52, 49, 128, 71, 48, 52, 48, 128, 71, 48, 51, 57, 128, 71, 48, 51, - 56, 128, 71, 48, 51, 55, 65, 128, 71, 48, 51, 55, 128, 71, 48, 51, 54, - 65, 128, 71, 48, 51, 54, 128, 71, 48, 51, 53, 128, 71, 48, 51, 52, 128, - 71, 48, 51, 51, 128, 71, 48, 51, 50, 128, 71, 48, 51, 49, 128, 71, 48, - 51, 48, 128, 71, 48, 50, 57, 128, 71, 48, 50, 56, 128, 71, 48, 50, 55, - 128, 71, 48, 50, 54, 65, 128, 71, 48, 50, 54, 128, 71, 48, 50, 53, 128, - 71, 48, 50, 52, 128, 71, 48, 50, 51, 128, 71, 48, 50, 50, 128, 71, 48, - 50, 49, 128, 71, 48, 50, 48, 65, 128, 71, 48, 50, 48, 128, 71, 48, 49, - 57, 128, 71, 48, 49, 56, 128, 71, 48, 49, 55, 128, 71, 48, 49, 54, 128, - 71, 48, 49, 53, 128, 71, 48, 49, 52, 128, 71, 48, 49, 51, 128, 71, 48, - 49, 50, 128, 71, 48, 49, 49, 65, 128, 71, 48, 49, 49, 128, 71, 48, 49, - 48, 128, 71, 48, 48, 57, 128, 71, 48, 48, 56, 128, 71, 48, 48, 55, 66, - 128, 71, 48, 48, 55, 65, 128, 71, 48, 48, 55, 128, 71, 48, 48, 54, 65, - 128, 71, 48, 48, 54, 128, 71, 48, 48, 53, 128, 71, 48, 48, 52, 128, 71, - 48, 48, 51, 128, 71, 48, 48, 50, 128, 71, 48, 48, 49, 128, 70, 89, 88, - 128, 70, 89, 84, 128, 70, 89, 80, 128, 70, 89, 65, 128, 70, 87, 73, 128, - 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, - 128, 70, 86, 83, 51, 128, 70, 86, 83, 50, 128, 70, 86, 83, 49, 128, 70, - 85, 88, 128, 70, 85, 84, 128, 70, 85, 83, 69, 128, 70, 85, 83, 193, 70, - 85, 82, 88, 128, 70, 85, 80, 128, 70, 85, 78, 69, 82, 65, 204, 70, 85, - 78, 67, 84, 73, 79, 78, 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 128, 70, - 85, 76, 76, 78, 69, 83, 83, 128, 70, 85, 76, 204, 70, 85, 74, 73, 128, - 70, 85, 69, 84, 128, 70, 85, 69, 204, 70, 85, 69, 128, 70, 84, 72, 79, - 82, 193, 70, 83, 73, 128, 70, 82, 79, 87, 78, 73, 78, 71, 128, 70, 82, - 79, 87, 78, 73, 78, 199, 70, 82, 79, 87, 78, 128, 70, 82, 79, 78, 84, 45, - 84, 73, 76, 84, 69, 196, 70, 82, 79, 78, 84, 45, 70, 65, 67, 73, 78, 199, - 70, 82, 79, 205, 70, 82, 79, 71, 128, 70, 82, 79, 199, 70, 82, 73, 84, - 85, 128, 70, 82, 73, 69, 83, 128, 70, 82, 73, 69, 196, 70, 82, 73, 67, - 65, 84, 73, 86, 69, 128, 70, 82, 69, 84, 66, 79, 65, 82, 68, 128, 70, 82, - 69, 78, 67, 200, 70, 82, 69, 69, 128, 70, 82, 69, 197, 70, 82, 65, 78, - 195, 70, 82, 65, 77, 69, 128, 70, 82, 65, 71, 82, 65, 78, 84, 128, 70, - 82, 65, 71, 77, 69, 78, 84, 128, 70, 82, 65, 67, 84, 73, 79, 206, 70, 79, - 88, 128, 70, 79, 85, 82, 84, 69, 69, 78, 128, 70, 79, 85, 82, 84, 69, 69, - 206, 70, 79, 85, 82, 45, 84, 72, 73, 82, 84, 89, 128, 70, 79, 85, 82, 45, - 83, 84, 82, 73, 78, 199, 70, 79, 85, 82, 45, 80, 69, 82, 45, 69, 205, 70, - 79, 85, 82, 45, 76, 73, 78, 197, 70, 79, 85, 210, 70, 79, 85, 78, 84, 65, - 73, 78, 128, 70, 79, 83, 84, 69, 82, 73, 78, 71, 128, 70, 79, 82, 87, 65, - 82, 68, 128, 70, 79, 82, 84, 89, 128, 70, 79, 82, 84, 217, 70, 79, 82, - 84, 69, 128, 70, 79, 82, 77, 211, 70, 79, 82, 77, 65, 84, 84, 73, 78, 71, - 128, 70, 79, 82, 75, 69, 196, 70, 79, 82, 67, 69, 83, 128, 70, 79, 82, - 67, 69, 128, 70, 79, 80, 128, 70, 79, 79, 84, 83, 84, 79, 79, 76, 128, - 70, 79, 79, 84, 80, 82, 73, 78, 84, 83, 128, 70, 79, 79, 84, 78, 79, 84, - 197, 70, 79, 79, 84, 66, 65, 76, 76, 128, 70, 79, 79, 84, 128, 70, 79, - 79, 68, 128, 70, 79, 79, 128, 70, 79, 78, 71, 77, 65, 78, 128, 70, 79, - 77, 128, 70, 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71, - 128, 70, 79, 76, 68, 69, 82, 128, 70, 79, 76, 68, 69, 196, 70, 79, 71, - 71, 89, 128, 70, 207, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 84, - 69, 82, 73, 78, 199, 70, 76, 85, 84, 69, 128, 70, 76, 85, 83, 72, 69, - 196, 70, 76, 79, 87, 73, 78, 199, 70, 76, 79, 87, 69, 210, 70, 76, 79, - 85, 82, 73, 83, 72, 128, 70, 76, 79, 82, 69, 84, 84, 69, 128, 70, 76, 79, - 82, 65, 204, 70, 76, 79, 80, 80, 217, 70, 76, 79, 79, 82, 128, 70, 76, - 73, 80, 128, 70, 76, 73, 71, 72, 84, 128, 70, 76, 69, 88, 85, 83, 128, - 70, 76, 69, 88, 69, 196, 70, 76, 69, 85, 82, 45, 68, 69, 45, 76, 73, 83, - 128, 70, 76, 65, 84, 84, 69, 78, 69, 196, 70, 76, 65, 84, 78, 69, 83, 83, - 128, 70, 76, 65, 84, 128, 70, 76, 65, 212, 70, 76, 65, 71, 83, 128, 70, - 76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45, 52, 128, 70, 76, 65, 71, 45, - 51, 128, 70, 76, 65, 71, 45, 50, 128, 70, 76, 65, 71, 45, 49, 128, 70, - 76, 65, 71, 128, 70, 76, 65, 199, 70, 76, 65, 128, 70, 76, 128, 70, 73, - 88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 88, 128, 70, 73, 86, 69, 45, 84, - 72, 73, 82, 84, 89, 128, 70, 73, 86, 69, 45, 76, 73, 78, 197, 70, 73, 86, - 197, 70, 73, 84, 65, 128, 70, 73, 84, 128, 70, 73, 83, 84, 69, 196, 70, - 73, 83, 84, 128, 70, 73, 83, 72, 73, 78, 199, 70, 73, 83, 72, 72, 79, 79, - 75, 128, 70, 73, 83, 72, 72, 79, 79, 203, 70, 73, 83, 72, 69, 89, 69, + 128, 71, 72, 65, 77, 77, 65, 128, 71, 72, 65, 77, 65, 76, 128, 71, 72, + 65, 73, 78, 85, 128, 71, 72, 65, 73, 78, 128, 71, 72, 65, 73, 206, 71, + 72, 65, 68, 128, 71, 72, 65, 65, 77, 65, 69, 128, 71, 72, 65, 65, 128, + 71, 71, 87, 73, 128, 71, 71, 87, 69, 69, 128, 71, 71, 87, 69, 128, 71, + 71, 87, 65, 65, 128, 71, 71, 87, 65, 128, 71, 71, 85, 88, 128, 71, 71, + 85, 84, 128, 71, 71, 85, 82, 88, 128, 71, 71, 85, 82, 128, 71, 71, 85, + 79, 88, 128, 71, 71, 85, 79, 84, 128, 71, 71, 85, 79, 80, 128, 71, 71, + 85, 79, 128, 71, 71, 79, 88, 128, 71, 71, 79, 84, 128, 71, 71, 79, 80, + 128, 71, 71, 73, 88, 128, 71, 71, 73, 84, 128, 71, 71, 73, 69, 88, 128, + 71, 71, 73, 69, 80, 128, 71, 71, 73, 69, 128, 71, 71, 69, 88, 128, 71, + 71, 69, 84, 128, 71, 71, 69, 80, 128, 71, 71, 65, 88, 128, 71, 71, 65, + 84, 128, 71, 69, 84, 193, 71, 69, 83, 84, 85, 82, 69, 128, 71, 69, 83, + 72, 85, 128, 71, 69, 83, 72, 84, 73, 78, 128, 71, 69, 83, 72, 84, 73, + 206, 71, 69, 83, 72, 50, 128, 71, 69, 82, 83, 72, 65, 89, 73, 77, 128, + 71, 69, 82, 77, 65, 206, 71, 69, 82, 69, 83, 72, 128, 71, 69, 82, 69, 83, + 200, 71, 69, 79, 77, 69, 84, 82, 73, 67, 65, 76, 76, 217, 71, 69, 79, 77, + 69, 84, 82, 73, 195, 71, 69, 78, 84, 76, 197, 71, 69, 78, 73, 84, 73, 86, + 69, 128, 71, 69, 78, 73, 75, 201, 71, 69, 78, 69, 82, 73, 195, 71, 69, + 77, 73, 78, 73, 128, 71, 69, 77, 73, 78, 65, 84, 73, 79, 206, 71, 69, + 205, 71, 69, 69, 77, 128, 71, 69, 68, 79, 76, 65, 128, 71, 69, 68, 69, + 128, 71, 69, 66, 207, 71, 69, 66, 193, 71, 69, 65, 82, 128, 71, 69, 65, + 210, 71, 69, 50, 50, 128, 71, 68, 65, 78, 128, 71, 67, 73, 71, 128, 71, + 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 73, 69, 197, 71, 66, 69, 85, + 88, 128, 71, 66, 69, 84, 128, 71, 66, 65, 89, 73, 128, 71, 66, 65, 75, + 85, 82, 85, 78, 69, 78, 128, 71, 66, 128, 71, 65, 89, 65, 78, 85, 75, 73, + 84, 84, 65, 128, 71, 65, 89, 65, 78, 78, 65, 128, 71, 65, 89, 128, 71, + 65, 85, 78, 84, 76, 69, 84, 128, 71, 65, 84, 72, 69, 82, 73, 78, 71, 128, + 71, 65, 84, 72, 69, 82, 73, 78, 199, 71, 65, 84, 69, 128, 71, 65, 83, 72, + 65, 78, 128, 71, 65, 82, 83, 72, 85, 78, 73, 128, 71, 65, 82, 79, 78, + 128, 71, 65, 82, 77, 69, 78, 84, 128, 71, 65, 82, 68, 69, 78, 128, 71, + 65, 82, 51, 128, 71, 65, 80, 80, 69, 196, 71, 65, 208, 71, 65, 78, 77, + 65, 128, 71, 65, 78, 71, 73, 65, 128, 71, 65, 78, 68, 193, 71, 65, 78, + 50, 128, 71, 65, 78, 178, 71, 65, 77, 77, 65, 128, 71, 65, 77, 76, 65, + 128, 71, 65, 77, 76, 128, 71, 65, 77, 69, 128, 71, 65, 77, 197, 71, 65, + 77, 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, + 71, 128, 71, 65, 70, 128, 71, 65, 198, 71, 65, 69, 84, 84, 65, 45, 80, + 73, 76, 76, 65, 128, 71, 65, 68, 79, 76, 128, 71, 65, 68, 128, 71, 65, + 196, 71, 65, 66, 65, 128, 71, 65, 66, 193, 71, 65, 65, 70, 85, 128, 71, + 65, 178, 71, 48, 53, 52, 128, 71, 48, 53, 51, 128, 71, 48, 53, 50, 128, + 71, 48, 53, 49, 128, 71, 48, 53, 48, 128, 71, 48, 52, 57, 128, 71, 48, + 52, 56, 128, 71, 48, 52, 55, 128, 71, 48, 52, 54, 128, 71, 48, 52, 53, + 65, 128, 71, 48, 52, 53, 128, 71, 48, 52, 52, 128, 71, 48, 52, 51, 65, + 128, 71, 48, 52, 51, 128, 71, 48, 52, 50, 128, 71, 48, 52, 49, 128, 71, + 48, 52, 48, 128, 71, 48, 51, 57, 128, 71, 48, 51, 56, 128, 71, 48, 51, + 55, 65, 128, 71, 48, 51, 55, 128, 71, 48, 51, 54, 65, 128, 71, 48, 51, + 54, 128, 71, 48, 51, 53, 128, 71, 48, 51, 52, 128, 71, 48, 51, 51, 128, + 71, 48, 51, 50, 128, 71, 48, 51, 49, 128, 71, 48, 51, 48, 128, 71, 48, + 50, 57, 128, 71, 48, 50, 56, 128, 71, 48, 50, 55, 128, 71, 48, 50, 54, + 65, 128, 71, 48, 50, 54, 128, 71, 48, 50, 53, 128, 71, 48, 50, 52, 128, + 71, 48, 50, 51, 128, 71, 48, 50, 50, 128, 71, 48, 50, 49, 128, 71, 48, + 50, 48, 65, 128, 71, 48, 50, 48, 128, 71, 48, 49, 57, 128, 71, 48, 49, + 56, 128, 71, 48, 49, 55, 128, 71, 48, 49, 54, 128, 71, 48, 49, 53, 128, + 71, 48, 49, 52, 128, 71, 48, 49, 51, 128, 71, 48, 49, 50, 128, 71, 48, + 49, 49, 65, 128, 71, 48, 49, 49, 128, 71, 48, 49, 48, 128, 71, 48, 48, + 57, 128, 71, 48, 48, 56, 128, 71, 48, 48, 55, 66, 128, 71, 48, 48, 55, + 65, 128, 71, 48, 48, 55, 128, 71, 48, 48, 54, 65, 128, 71, 48, 48, 54, + 128, 71, 48, 48, 53, 128, 71, 48, 48, 52, 128, 71, 48, 48, 51, 128, 71, + 48, 48, 50, 128, 71, 48, 48, 49, 128, 70, 89, 88, 128, 70, 89, 84, 128, + 70, 89, 80, 128, 70, 89, 65, 128, 70, 87, 73, 128, 70, 87, 69, 69, 128, + 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, 128, 70, 86, 83, 51, + 128, 70, 86, 83, 50, 128, 70, 86, 83, 49, 128, 70, 85, 88, 128, 70, 85, + 84, 128, 70, 85, 83, 69, 128, 70, 85, 83, 193, 70, 85, 82, 88, 128, 70, + 85, 80, 128, 70, 85, 78, 69, 82, 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, + 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 128, 70, 85, 76, 76, 78, 69, 83, + 83, 128, 70, 85, 76, 204, 70, 85, 74, 73, 128, 70, 85, 69, 84, 128, 70, + 85, 69, 204, 70, 85, 69, 128, 70, 85, 65, 128, 70, 84, 72, 79, 82, 193, + 70, 83, 73, 128, 70, 82, 79, 87, 78, 73, 78, 71, 128, 70, 82, 79, 87, 78, + 73, 78, 199, 70, 82, 79, 87, 78, 128, 70, 82, 79, 78, 84, 45, 84, 73, 76, + 84, 69, 196, 70, 82, 79, 78, 84, 45, 70, 65, 67, 73, 78, 199, 70, 82, 79, + 205, 70, 82, 79, 71, 128, 70, 82, 79, 199, 70, 82, 73, 84, 85, 128, 70, + 82, 73, 69, 83, 128, 70, 82, 73, 69, 196, 70, 82, 73, 67, 65, 84, 73, 86, + 69, 128, 70, 82, 69, 84, 66, 79, 65, 82, 68, 128, 70, 82, 69, 78, 67, + 200, 70, 82, 69, 69, 128, 70, 82, 69, 197, 70, 82, 65, 78, 75, 211, 70, + 82, 65, 78, 195, 70, 82, 65, 77, 69, 83, 128, 70, 82, 65, 77, 69, 128, + 70, 82, 65, 77, 197, 70, 82, 65, 71, 82, 65, 78, 84, 128, 70, 82, 65, 71, + 77, 69, 78, 84, 128, 70, 82, 65, 67, 84, 73, 79, 206, 70, 79, 88, 128, + 70, 79, 85, 82, 84, 69, 69, 78, 128, 70, 79, 85, 82, 84, 69, 69, 206, 70, + 79, 85, 82, 45, 84, 72, 73, 82, 84, 89, 128, 70, 79, 85, 82, 45, 83, 84, + 82, 73, 78, 199, 70, 79, 85, 82, 45, 80, 69, 82, 45, 69, 205, 70, 79, 85, + 82, 45, 76, 73, 78, 197, 70, 79, 85, 210, 70, 79, 85, 78, 84, 65, 73, 78, + 128, 70, 79, 85, 78, 84, 65, 73, 206, 70, 79, 83, 84, 69, 82, 73, 78, 71, + 128, 70, 79, 82, 87, 65, 82, 68, 128, 70, 79, 82, 84, 89, 128, 70, 79, + 82, 84, 217, 70, 79, 82, 84, 69, 128, 70, 79, 82, 77, 211, 70, 79, 82, + 77, 65, 84, 84, 73, 78, 71, 128, 70, 79, 82, 77, 65, 212, 70, 79, 82, 75, + 69, 196, 70, 79, 82, 67, 69, 83, 128, 70, 79, 82, 67, 69, 128, 70, 79, + 80, 128, 70, 79, 79, 84, 83, 84, 79, 79, 76, 128, 70, 79, 79, 84, 80, 82, + 73, 78, 84, 83, 128, 70, 79, 79, 84, 78, 79, 84, 197, 70, 79, 79, 84, 66, + 65, 76, 76, 128, 70, 79, 79, 84, 128, 70, 79, 79, 76, 128, 70, 79, 79, + 68, 128, 70, 79, 79, 128, 70, 79, 78, 212, 70, 79, 78, 71, 77, 65, 78, + 128, 70, 79, 77, 128, 70, 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, + 73, 78, 71, 128, 70, 79, 76, 68, 69, 82, 128, 70, 79, 76, 68, 69, 196, + 70, 79, 71, 71, 89, 128, 70, 79, 71, 128, 70, 207, 70, 77, 128, 70, 76, + 89, 73, 78, 199, 70, 76, 89, 128, 70, 76, 85, 84, 84, 69, 82, 73, 78, + 199, 70, 76, 85, 84, 69, 128, 70, 76, 85, 83, 72, 69, 196, 70, 76, 79, + 87, 73, 78, 199, 70, 76, 79, 87, 69, 82, 83, 128, 70, 76, 79, 87, 69, + 210, 70, 76, 79, 85, 82, 73, 83, 72, 128, 70, 76, 79, 82, 69, 84, 84, 69, + 128, 70, 76, 79, 82, 65, 204, 70, 76, 79, 80, 80, 217, 70, 76, 79, 79, + 82, 128, 70, 76, 73, 80, 128, 70, 76, 73, 71, 72, 84, 128, 70, 76, 69, + 88, 85, 83, 128, 70, 76, 69, 88, 69, 196, 70, 76, 69, 85, 82, 79, 78, + 128, 70, 76, 69, 85, 82, 45, 68, 69, 45, 76, 73, 83, 128, 70, 76, 65, 84, + 84, 69, 78, 69, 196, 70, 76, 65, 84, 78, 69, 83, 83, 128, 70, 76, 65, 84, + 128, 70, 76, 65, 212, 70, 76, 65, 83, 72, 128, 70, 76, 65, 71, 83, 128, + 70, 76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45, 52, 128, 70, 76, 65, 71, + 45, 51, 128, 70, 76, 65, 71, 45, 50, 128, 70, 76, 65, 71, 45, 49, 128, + 70, 76, 65, 71, 128, 70, 76, 65, 199, 70, 76, 65, 128, 70, 76, 128, 70, + 73, 88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 88, 128, 70, 73, 86, 69, 45, + 84, 72, 73, 82, 84, 89, 128, 70, 73, 86, 69, 45, 76, 73, 78, 197, 70, 73, + 86, 197, 70, 73, 84, 65, 128, 70, 73, 84, 128, 70, 73, 83, 84, 69, 196, + 70, 73, 83, 84, 128, 70, 73, 83, 72, 73, 78, 199, 70, 73, 83, 72, 72, 79, + 79, 75, 128, 70, 73, 83, 72, 72, 79, 79, 203, 70, 73, 83, 72, 69, 89, 69, 128, 70, 73, 83, 72, 128, 70, 73, 83, 200, 70, 73, 82, 83, 212, 70, 73, 82, 73, 128, 70, 73, 82, 69, 87, 79, 82, 75, 83, 128, 70, 73, 82, 69, 87, 79, 82, 203, 70, 73, 82, 69, 128, 70, 73, 82, 197, 70, 73, 80, 128, 70, - 73, 78, 73, 84, 197, 70, 73, 78, 71, 69, 82, 78, 65, 73, 76, 83, 128, 70, - 73, 78, 71, 69, 82, 69, 196, 70, 73, 78, 65, 78, 67, 73, 65, 76, 128, 70, - 73, 76, 76, 69, 82, 128, 70, 73, 76, 76, 69, 196, 70, 73, 76, 76, 128, - 70, 73, 76, 204, 70, 73, 76, 197, 70, 73, 73, 128, 70, 73, 71, 85, 82, - 69, 45, 51, 128, 70, 73, 71, 85, 82, 69, 45, 50, 128, 70, 73, 71, 85, 82, - 69, 45, 49, 128, 70, 73, 71, 85, 82, 197, 70, 73, 71, 72, 84, 128, 70, - 73, 70, 84, 89, 128, 70, 73, 70, 84, 217, 70, 73, 70, 84, 72, 83, 128, - 70, 73, 70, 84, 72, 128, 70, 73, 70, 84, 69, 69, 78, 128, 70, 73, 70, 84, - 69, 69, 206, 70, 73, 69, 76, 68, 128, 70, 72, 84, 79, 82, 193, 70, 70, - 76, 128, 70, 70, 73, 128, 70, 69, 85, 88, 128, 70, 69, 85, 70, 69, 85, - 65, 69, 84, 128, 70, 69, 83, 84, 73, 86, 65, 76, 128, 70, 69, 82, 82, 89, - 128, 70, 69, 82, 82, 73, 211, 70, 69, 82, 77, 65, 84, 65, 128, 70, 69, - 82, 77, 65, 84, 193, 70, 69, 79, 200, 70, 69, 78, 199, 70, 69, 78, 67, - 69, 128, 70, 69, 77, 73, 78, 73, 78, 197, 70, 69, 77, 65, 76, 69, 128, - 70, 69, 77, 65, 76, 197, 70, 69, 76, 76, 79, 87, 83, 72, 73, 80, 128, 70, - 69, 73, 128, 70, 69, 72, 213, 70, 69, 72, 128, 70, 69, 200, 70, 69, 69, - 78, 71, 128, 70, 69, 69, 68, 128, 70, 69, 69, 196, 70, 69, 69, 128, 70, - 69, 66, 82, 85, 65, 82, 89, 128, 70, 69, 65, 84, 72, 69, 82, 128, 70, 69, - 65, 84, 72, 69, 210, 70, 69, 65, 82, 78, 128, 70, 69, 65, 82, 70, 85, - 204, 70, 69, 65, 82, 128, 70, 65, 89, 65, 78, 78, 65, 128, 70, 65, 89, - 128, 70, 65, 88, 128, 70, 65, 216, 70, 65, 84, 73, 71, 85, 69, 128, 70, - 65, 84, 72, 69, 82, 128, 70, 65, 84, 72, 69, 210, 70, 65, 84, 72, 65, 84, - 65, 78, 128, 70, 65, 84, 72, 65, 84, 65, 206, 70, 65, 84, 72, 65, 128, - 70, 65, 84, 72, 193, 70, 65, 84, 128, 70, 65, 82, 83, 201, 70, 65, 81, - 128, 70, 65, 80, 128, 70, 65, 78, 71, 128, 70, 65, 78, 69, 82, 79, 83, - 73, 211, 70, 65, 78, 128, 70, 65, 77, 73, 76, 89, 128, 70, 65, 76, 76, - 73, 78, 199, 70, 65, 76, 76, 69, 206, 70, 65, 73, 76, 85, 82, 69, 128, - 70, 65, 73, 72, 85, 128, 70, 65, 72, 82, 69, 78, 72, 69, 73, 84, 128, 70, - 65, 67, 84, 79, 82, 89, 128, 70, 65, 67, 84, 79, 210, 70, 65, 67, 83, 73, - 77, 73, 76, 197, 70, 65, 67, 69, 45, 54, 128, 70, 65, 67, 69, 45, 53, - 128, 70, 65, 67, 69, 45, 52, 128, 70, 65, 67, 69, 45, 51, 128, 70, 65, - 67, 69, 45, 50, 128, 70, 65, 67, 69, 45, 49, 128, 70, 65, 65, 77, 65, 69, - 128, 70, 65, 65, 73, 128, 70, 65, 65, 70, 85, 128, 70, 48, 53, 51, 128, - 70, 48, 53, 50, 128, 70, 48, 53, 49, 67, 128, 70, 48, 53, 49, 66, 128, - 70, 48, 53, 49, 65, 128, 70, 48, 53, 49, 128, 70, 48, 53, 48, 128, 70, - 48, 52, 57, 128, 70, 48, 52, 56, 128, 70, 48, 52, 55, 65, 128, 70, 48, - 52, 55, 128, 70, 48, 52, 54, 65, 128, 70, 48, 52, 54, 128, 70, 48, 52, - 53, 65, 128, 70, 48, 52, 53, 128, 70, 48, 52, 52, 128, 70, 48, 52, 51, - 128, 70, 48, 52, 50, 128, 70, 48, 52, 49, 128, 70, 48, 52, 48, 128, 70, - 48, 51, 57, 128, 70, 48, 51, 56, 65, 128, 70, 48, 51, 56, 128, 70, 48, - 51, 55, 65, 128, 70, 48, 51, 55, 128, 70, 48, 51, 54, 128, 70, 48, 51, - 53, 128, 70, 48, 51, 52, 128, 70, 48, 51, 51, 128, 70, 48, 51, 50, 128, - 70, 48, 51, 49, 65, 128, 70, 48, 51, 49, 128, 70, 48, 51, 48, 128, 70, - 48, 50, 57, 128, 70, 48, 50, 56, 128, 70, 48, 50, 55, 128, 70, 48, 50, - 54, 128, 70, 48, 50, 53, 128, 70, 48, 50, 52, 128, 70, 48, 50, 51, 128, - 70, 48, 50, 50, 128, 70, 48, 50, 49, 65, 128, 70, 48, 50, 49, 128, 70, - 48, 50, 48, 128, 70, 48, 49, 57, 128, 70, 48, 49, 56, 128, 70, 48, 49, - 55, 128, 70, 48, 49, 54, 128, 70, 48, 49, 53, 128, 70, 48, 49, 52, 128, - 70, 48, 49, 51, 65, 128, 70, 48, 49, 51, 128, 70, 48, 49, 50, 128, 70, - 48, 49, 49, 128, 70, 48, 49, 48, 128, 70, 48, 48, 57, 128, 70, 48, 48, - 56, 128, 70, 48, 48, 55, 128, 70, 48, 48, 54, 128, 70, 48, 48, 53, 128, - 70, 48, 48, 52, 128, 70, 48, 48, 51, 128, 70, 48, 48, 50, 128, 70, 48, - 48, 49, 65, 128, 70, 48, 48, 49, 128, 69, 90, 200, 69, 90, 69, 78, 128, - 69, 90, 69, 206, 69, 90, 128, 69, 89, 69, 83, 128, 69, 89, 69, 71, 76, - 65, 83, 83, 69, 83, 128, 69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, - 65, 78, 78, 65, 128, 69, 88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82, - 73, 65, 204, 69, 88, 84, 82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45, - 72, 73, 71, 200, 69, 88, 84, 69, 78, 83, 73, 79, 78, 128, 69, 88, 84, 69, - 78, 68, 69, 196, 69, 88, 80, 82, 69, 83, 83, 73, 79, 78, 76, 69, 83, 211, - 69, 88, 80, 79, 78, 69, 78, 212, 69, 88, 79, 128, 69, 88, 207, 69, 88, - 73, 83, 84, 83, 128, 69, 88, 73, 83, 84, 128, 69, 88, 72, 65, 85, 83, 84, - 73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 78, 128, 69, 88, - 67, 76, 65, 77, 65, 84, 73, 79, 206, 69, 88, 67, 72, 65, 78, 71, 69, 128, - 69, 88, 67, 69, 83, 83, 128, 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, - 87, 69, 128, 69, 86, 69, 82, 71, 82, 69, 69, 206, 69, 86, 69, 78, 73, 78, - 71, 128, 69, 85, 82, 79, 80, 69, 65, 206, 69, 85, 82, 79, 80, 69, 45, 65, - 70, 82, 73, 67, 65, 128, 69, 85, 82, 79, 45, 67, 85, 82, 82, 69, 78, 67, - 217, 69, 85, 82, 207, 69, 85, 76, 69, 210, 69, 85, 45, 85, 128, 69, 85, - 45, 79, 128, 69, 85, 45, 69, 85, 128, 69, 85, 45, 69, 79, 128, 69, 85, - 45, 69, 128, 69, 85, 45, 65, 128, 69, 84, 88, 128, 69, 84, 78, 65, 72, - 84, 65, 128, 69, 84, 72, 69, 204, 69, 84, 69, 82, 79, 206, 69, 84, 69, - 82, 78, 73, 84, 89, 128, 69, 84, 66, 128, 69, 83, 85, 75, 85, 85, 68, 79, - 128, 69, 83, 84, 73, 77, 65, 84, 69, 83, 128, 69, 83, 84, 73, 77, 65, 84, - 69, 196, 69, 83, 72, 69, 51, 128, 69, 83, 72, 50, 49, 128, 69, 83, 72, - 178, 69, 83, 72, 49, 54, 128, 69, 83, 67, 65, 80, 69, 128, 69, 83, 67, - 128, 69, 83, 65, 128, 69, 83, 45, 84, 69, 128, 69, 82, 82, 79, 82, 45, - 66, 65, 82, 82, 69, 196, 69, 82, 82, 128, 69, 82, 73, 78, 50, 128, 69, - 82, 71, 128, 69, 82, 65, 83, 197, 69, 81, 85, 73, 86, 65, 76, 69, 78, - 212, 69, 81, 85, 73, 68, 128, 69, 81, 85, 73, 65, 78, 71, 85, 76, 65, - 210, 69, 81, 85, 65, 76, 83, 128, 69, 81, 85, 65, 76, 211, 69, 81, 85, - 65, 76, 128, 69, 80, 83, 73, 76, 79, 78, 128, 69, 80, 83, 73, 76, 79, + 73, 78, 73, 84, 197, 70, 73, 78, 71, 69, 82, 83, 128, 70, 73, 78, 71, 69, + 82, 211, 70, 73, 78, 71, 69, 82, 78, 65, 73, 76, 83, 128, 70, 73, 78, 71, + 69, 82, 69, 196, 70, 73, 78, 71, 69, 82, 45, 80, 79, 83, 212, 70, 73, 78, + 71, 69, 210, 70, 73, 78, 65, 78, 67, 73, 65, 76, 128, 70, 73, 78, 65, 76, + 128, 70, 73, 76, 205, 70, 73, 76, 76, 69, 82, 128, 70, 73, 76, 76, 69, + 196, 70, 73, 76, 76, 128, 70, 73, 76, 204, 70, 73, 76, 197, 70, 73, 73, + 128, 70, 73, 71, 85, 82, 69, 45, 51, 128, 70, 73, 71, 85, 82, 69, 45, 50, + 128, 70, 73, 71, 85, 82, 69, 45, 49, 128, 70, 73, 71, 85, 82, 197, 70, + 73, 71, 72, 84, 128, 70, 73, 70, 84, 89, 128, 70, 73, 70, 84, 217, 70, + 73, 70, 84, 72, 83, 128, 70, 73, 70, 84, 72, 128, 70, 73, 70, 84, 69, 69, + 78, 128, 70, 73, 70, 84, 69, 69, 206, 70, 73, 69, 76, 68, 128, 70, 72, + 84, 79, 82, 193, 70, 70, 76, 128, 70, 70, 73, 128, 70, 69, 85, 88, 128, + 70, 69, 85, 70, 69, 85, 65, 69, 84, 128, 70, 69, 83, 84, 73, 86, 65, 76, + 128, 70, 69, 82, 82, 89, 128, 70, 69, 82, 82, 73, 211, 70, 69, 82, 77, + 65, 84, 65, 128, 70, 69, 82, 77, 65, 84, 193, 70, 69, 79, 200, 70, 69, + 78, 199, 70, 69, 78, 67, 69, 128, 70, 69, 77, 73, 78, 73, 78, 197, 70, + 69, 77, 65, 76, 69, 128, 70, 69, 77, 65, 76, 197, 70, 69, 76, 76, 79, 87, + 83, 72, 73, 80, 128, 70, 69, 73, 128, 70, 69, 72, 213, 70, 69, 72, 128, + 70, 69, 200, 70, 69, 69, 78, 71, 128, 70, 69, 69, 77, 128, 70, 69, 69, + 68, 128, 70, 69, 69, 196, 70, 69, 69, 128, 70, 69, 66, 82, 85, 65, 82, + 89, 128, 70, 69, 65, 84, 72, 69, 82, 128, 70, 69, 65, 84, 72, 69, 210, + 70, 69, 65, 82, 78, 128, 70, 69, 65, 82, 70, 85, 204, 70, 69, 65, 82, + 128, 70, 65, 89, 65, 78, 78, 65, 128, 70, 65, 89, 128, 70, 65, 88, 128, + 70, 65, 216, 70, 65, 84, 73, 71, 85, 69, 128, 70, 65, 84, 72, 69, 82, + 128, 70, 65, 84, 72, 69, 210, 70, 65, 84, 72, 65, 84, 65, 78, 128, 70, + 65, 84, 72, 65, 84, 65, 206, 70, 65, 84, 72, 65, 128, 70, 65, 84, 72, + 193, 70, 65, 84, 128, 70, 65, 82, 83, 201, 70, 65, 81, 128, 70, 65, 80, + 128, 70, 65, 78, 71, 128, 70, 65, 78, 69, 82, 79, 83, 73, 211, 70, 65, + 78, 128, 70, 65, 77, 73, 76, 89, 128, 70, 65, 77, 128, 70, 65, 76, 76, + 69, 206, 70, 65, 74, 128, 70, 65, 73, 76, 85, 82, 69, 128, 70, 65, 73, + 72, 85, 128, 70, 65, 73, 66, 128, 70, 65, 72, 82, 69, 78, 72, 69, 73, 84, + 128, 70, 65, 67, 84, 79, 82, 89, 128, 70, 65, 67, 84, 79, 210, 70, 65, + 67, 83, 73, 77, 73, 76, 197, 70, 65, 67, 69, 45, 54, 128, 70, 65, 67, 69, + 45, 53, 128, 70, 65, 67, 69, 45, 52, 128, 70, 65, 67, 69, 45, 51, 128, + 70, 65, 67, 69, 45, 50, 128, 70, 65, 67, 69, 45, 49, 128, 70, 65, 65, 77, + 65, 69, 128, 70, 65, 65, 73, 128, 70, 65, 65, 70, 85, 128, 70, 48, 53, + 51, 128, 70, 48, 53, 50, 128, 70, 48, 53, 49, 67, 128, 70, 48, 53, 49, + 66, 128, 70, 48, 53, 49, 65, 128, 70, 48, 53, 49, 128, 70, 48, 53, 48, + 128, 70, 48, 52, 57, 128, 70, 48, 52, 56, 128, 70, 48, 52, 55, 65, 128, + 70, 48, 52, 55, 128, 70, 48, 52, 54, 65, 128, 70, 48, 52, 54, 128, 70, + 48, 52, 53, 65, 128, 70, 48, 52, 53, 128, 70, 48, 52, 52, 128, 70, 48, + 52, 51, 128, 70, 48, 52, 50, 128, 70, 48, 52, 49, 128, 70, 48, 52, 48, + 128, 70, 48, 51, 57, 128, 70, 48, 51, 56, 65, 128, 70, 48, 51, 56, 128, + 70, 48, 51, 55, 65, 128, 70, 48, 51, 55, 128, 70, 48, 51, 54, 128, 70, + 48, 51, 53, 128, 70, 48, 51, 52, 128, 70, 48, 51, 51, 128, 70, 48, 51, + 50, 128, 70, 48, 51, 49, 65, 128, 70, 48, 51, 49, 128, 70, 48, 51, 48, + 128, 70, 48, 50, 57, 128, 70, 48, 50, 56, 128, 70, 48, 50, 55, 128, 70, + 48, 50, 54, 128, 70, 48, 50, 53, 128, 70, 48, 50, 52, 128, 70, 48, 50, + 51, 128, 70, 48, 50, 50, 128, 70, 48, 50, 49, 65, 128, 70, 48, 50, 49, + 128, 70, 48, 50, 48, 128, 70, 48, 49, 57, 128, 70, 48, 49, 56, 128, 70, + 48, 49, 55, 128, 70, 48, 49, 54, 128, 70, 48, 49, 53, 128, 70, 48, 49, + 52, 128, 70, 48, 49, 51, 65, 128, 70, 48, 49, 51, 128, 70, 48, 49, 50, + 128, 70, 48, 49, 49, 128, 70, 48, 49, 48, 128, 70, 48, 48, 57, 128, 70, + 48, 48, 56, 128, 70, 48, 48, 55, 128, 70, 48, 48, 54, 128, 70, 48, 48, + 53, 128, 70, 48, 48, 52, 128, 70, 48, 48, 51, 128, 70, 48, 48, 50, 128, + 70, 48, 48, 49, 65, 128, 70, 48, 48, 49, 128, 69, 90, 200, 69, 90, 69, + 78, 128, 69, 90, 69, 206, 69, 90, 128, 69, 89, 89, 89, 128, 69, 89, 69, + 83, 128, 69, 89, 69, 71, 76, 65, 83, 83, 69, 83, 128, 69, 89, 66, 69, 89, + 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, 128, 69, 88, 84, 82, 69, 77, + 69, 76, 217, 69, 88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82, 73, 65, + 204, 69, 88, 84, 82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45, 72, 73, + 71, 200, 69, 88, 84, 69, 78, 83, 73, 79, 78, 128, 69, 88, 84, 69, 78, 68, + 69, 68, 128, 69, 88, 84, 69, 78, 68, 69, 196, 69, 88, 80, 82, 69, 83, 83, + 73, 79, 78, 76, 69, 83, 211, 69, 88, 80, 79, 78, 69, 78, 212, 69, 88, 79, + 128, 69, 88, 207, 69, 88, 73, 83, 84, 83, 128, 69, 88, 73, 83, 84, 128, + 69, 88, 72, 65, 85, 83, 84, 73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65, + 84, 73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 206, 69, 88, + 67, 72, 65, 78, 71, 69, 128, 69, 88, 67, 69, 83, 83, 128, 69, 88, 67, 69, + 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 82, 71, 82, 69, 69, + 206, 69, 86, 69, 78, 73, 78, 71, 128, 69, 85, 82, 79, 80, 69, 65, 206, + 69, 85, 82, 79, 80, 69, 45, 65, 70, 82, 73, 67, 65, 128, 69, 85, 82, 79, + 45, 67, 85, 82, 82, 69, 78, 67, 217, 69, 85, 82, 207, 69, 85, 76, 69, + 210, 69, 85, 45, 85, 128, 69, 85, 45, 79, 128, 69, 85, 45, 69, 85, 128, + 69, 85, 45, 69, 79, 128, 69, 85, 45, 69, 128, 69, 85, 45, 65, 128, 69, + 84, 88, 128, 69, 84, 78, 65, 72, 84, 65, 128, 69, 84, 72, 69, 204, 69, + 84, 69, 82, 79, 206, 69, 84, 69, 82, 78, 73, 84, 89, 128, 69, 84, 69, 82, + 78, 73, 84, 217, 69, 84, 66, 128, 69, 83, 85, 75, 85, 85, 68, 79, 128, + 69, 83, 84, 73, 77, 65, 84, 69, 83, 128, 69, 83, 84, 73, 77, 65, 84, 69, + 196, 69, 83, 72, 69, 51, 128, 69, 83, 72, 50, 49, 128, 69, 83, 72, 49, + 54, 128, 69, 83, 67, 65, 80, 69, 128, 69, 83, 67, 128, 69, 83, 65, 128, + 69, 83, 45, 84, 69, 128, 69, 83, 45, 51, 128, 69, 83, 45, 50, 128, 69, + 83, 45, 49, 128, 69, 82, 82, 79, 82, 45, 66, 65, 82, 82, 69, 196, 69, 82, + 82, 128, 69, 82, 73, 78, 50, 128, 69, 82, 71, 128, 69, 82, 65, 83, 197, + 69, 81, 85, 73, 86, 65, 76, 69, 78, 212, 69, 81, 85, 73, 76, 65, 84, 69, + 82, 65, 204, 69, 81, 85, 73, 68, 128, 69, 81, 85, 73, 65, 78, 71, 85, 76, + 65, 210, 69, 81, 85, 65, 76, 83, 128, 69, 81, 85, 65, 76, 211, 69, 81, + 85, 65, 76, 128, 69, 80, 83, 73, 76, 79, 78, 128, 69, 80, 83, 73, 76, 79, 206, 69, 80, 79, 67, 72, 128, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 69, 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69, 78, 84, 72, 69, 84, - 73, 195, 69, 80, 69, 71, 69, 82, 77, 65, 128, 69, 79, 84, 128, 69, 79, - 77, 128, 69, 79, 76, 72, 88, 128, 69, 79, 76, 128, 69, 79, 72, 128, 69, - 78, 89, 128, 69, 78, 86, 69, 76, 79, 80, 69, 128, 69, 78, 86, 69, 76, 79, - 80, 197, 69, 78, 85, 77, 69, 82, 65, 84, 73, 79, 206, 69, 78, 84, 82, 89, - 45, 50, 128, 69, 78, 84, 82, 89, 45, 49, 128, 69, 78, 84, 82, 89, 128, - 69, 78, 84, 82, 217, 69, 78, 84, 72, 85, 83, 73, 65, 83, 77, 128, 69, 78, - 84, 69, 82, 80, 82, 73, 83, 69, 128, 69, 78, 84, 69, 82, 73, 78, 199, 69, - 78, 84, 69, 82, 128, 69, 78, 84, 69, 210, 69, 78, 81, 85, 73, 82, 89, - 128, 69, 78, 81, 128, 69, 78, 79, 211, 69, 78, 78, 128, 69, 78, 76, 65, - 82, 71, 69, 77, 69, 78, 84, 128, 69, 78, 71, 73, 78, 69, 128, 69, 78, 68, - 79, 70, 79, 78, 79, 78, 128, 69, 78, 68, 73, 78, 199, 69, 78, 68, 69, 80, - 128, 69, 78, 68, 69, 65, 86, 79, 85, 82, 128, 69, 78, 67, 79, 85, 78, 84, - 69, 82, 83, 128, 69, 78, 67, 76, 79, 83, 85, 82, 69, 128, 69, 78, 67, 76, - 79, 83, 73, 78, 199, 69, 78, 67, 128, 69, 78, 65, 82, 88, 73, 211, 69, - 78, 65, 82, 77, 79, 78, 73, 79, 211, 69, 77, 80, 84, 217, 69, 77, 80, 72, - 65, 84, 73, 195, 69, 77, 80, 72, 65, 83, 73, 211, 69, 77, 66, 82, 79, 73, - 68, 69, 82, 89, 128, 69, 77, 66, 76, 69, 77, 128, 69, 77, 66, 69, 76, 76, - 73, 83, 72, 77, 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, - 69, 76, 84, 128, 69, 76, 76, 73, 80, 84, 73, 195, 69, 76, 76, 73, 80, 83, - 73, 83, 128, 69, 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, - 69, 76, 69, 86, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, 69, 76, 69, 86, - 69, 78, 128, 69, 76, 69, 86, 69, 206, 69, 76, 69, 80, 72, 65, 78, 84, - 128, 69, 76, 69, 77, 69, 78, 212, 69, 76, 69, 67, 84, 82, 73, 67, 65, - 204, 69, 76, 69, 67, 84, 82, 73, 195, 69, 76, 65, 70, 82, 79, 78, 128, - 69, 75, 83, 84, 82, 69, 80, 84, 79, 78, 128, 69, 75, 83, 128, 69, 75, 70, - 79, 78, 73, 84, 73, 75, 79, 78, 128, 69, 75, 65, 82, 65, 128, 69, 74, 69, - 67, 212, 69, 73, 83, 128, 69, 73, 71, 72, 84, 89, 128, 69, 73, 71, 72, - 84, 217, 69, 73, 71, 72, 84, 72, 83, 128, 69, 73, 71, 72, 84, 72, 211, - 69, 73, 71, 72, 84, 72, 128, 69, 73, 71, 72, 84, 69, 69, 78, 128, 69, 73, - 71, 72, 84, 69, 69, 206, 69, 73, 71, 72, 84, 45, 84, 72, 73, 82, 84, 89, - 128, 69, 73, 69, 128, 69, 72, 87, 65, 218, 69, 71, 89, 80, 84, 79, 76, - 79, 71, 73, 67, 65, 204, 69, 71, 73, 82, 128, 69, 71, 71, 128, 69, 69, - 89, 65, 78, 78, 65, 128, 69, 69, 75, 65, 65, 128, 69, 69, 72, 128, 69, - 69, 66, 69, 69, 70, 73, 76, 73, 128, 69, 68, 73, 84, 79, 82, 73, 65, 204, - 69, 68, 73, 78, 128, 69, 68, 68, 128, 69, 66, 69, 70, 73, 76, 73, 128, - 69, 65, 83, 84, 69, 82, 206, 69, 65, 83, 212, 69, 65, 82, 84, 72, 76, - 217, 69, 65, 82, 84, 72, 128, 69, 65, 82, 84, 200, 69, 65, 82, 83, 128, - 69, 65, 82, 76, 217, 69, 65, 77, 72, 65, 78, 67, 72, 79, 76, 76, 128, 69, - 65, 71, 76, 69, 128, 69, 65, 68, 72, 65, 68, 72, 128, 69, 65, 66, 72, 65, - 68, 72, 128, 69, 178, 69, 48, 51, 56, 128, 69, 48, 51, 55, 128, 69, 48, - 51, 54, 128, 69, 48, 51, 52, 65, 128, 69, 48, 51, 52, 128, 69, 48, 51, - 51, 128, 69, 48, 51, 50, 128, 69, 48, 51, 49, 128, 69, 48, 51, 48, 128, - 69, 48, 50, 57, 128, 69, 48, 50, 56, 65, 128, 69, 48, 50, 56, 128, 69, - 48, 50, 55, 128, 69, 48, 50, 54, 128, 69, 48, 50, 53, 128, 69, 48, 50, - 52, 128, 69, 48, 50, 51, 128, 69, 48, 50, 50, 128, 69, 48, 50, 49, 128, - 69, 48, 50, 48, 65, 128, 69, 48, 50, 48, 128, 69, 48, 49, 57, 128, 69, - 48, 49, 56, 128, 69, 48, 49, 55, 65, 128, 69, 48, 49, 55, 128, 69, 48, - 49, 54, 65, 128, 69, 48, 49, 54, 128, 69, 48, 49, 53, 128, 69, 48, 49, - 52, 128, 69, 48, 49, 51, 128, 69, 48, 49, 50, 128, 69, 48, 49, 49, 128, - 69, 48, 49, 48, 128, 69, 48, 48, 57, 65, 128, 69, 48, 48, 57, 128, 69, - 48, 48, 56, 65, 128, 69, 48, 48, 56, 128, 69, 48, 48, 55, 128, 69, 48, - 48, 54, 128, 69, 48, 48, 53, 128, 69, 48, 48, 52, 128, 69, 48, 48, 51, - 128, 69, 48, 48, 50, 128, 69, 48, 48, 49, 128, 69, 45, 77, 65, 73, 204, - 68, 90, 90, 69, 128, 68, 90, 90, 65, 128, 68, 90, 87, 69, 128, 68, 90, - 85, 128, 68, 90, 79, 128, 68, 90, 74, 69, 128, 68, 90, 73, 128, 68, 90, - 72, 69, 128, 68, 90, 72, 65, 128, 68, 90, 69, 76, 79, 128, 68, 90, 69, - 69, 128, 68, 90, 69, 128, 68, 90, 65, 65, 128, 68, 90, 65, 128, 68, 90, - 128, 68, 218, 68, 89, 79, 128, 68, 89, 207, 68, 89, 69, 72, 128, 68, 89, - 69, 200, 68, 87, 79, 128, 68, 87, 69, 128, 68, 87, 65, 128, 68, 86, 73, - 83, 86, 65, 82, 65, 128, 68, 86, 68, 128, 68, 86, 128, 68, 85, 84, 73, - 69, 83, 128, 68, 85, 83, 75, 128, 68, 85, 83, 72, 69, 78, 78, 65, 128, - 68, 85, 82, 65, 84, 73, 79, 78, 128, 68, 85, 82, 50, 128, 68, 85, 80, 79, - 78, 68, 73, 85, 211, 68, 85, 79, 88, 128, 68, 85, 79, 128, 68, 85, 78, - 52, 128, 68, 85, 78, 51, 128, 68, 85, 78, 179, 68, 85, 77, 128, 68, 85, - 204, 68, 85, 72, 128, 68, 85, 71, 85, 68, 128, 68, 85, 66, 50, 128, 68, - 85, 66, 128, 68, 85, 194, 68, 82, 89, 128, 68, 82, 217, 68, 82, 85, 77, - 128, 68, 82, 85, 205, 68, 82, 79, 80, 83, 128, 68, 82, 79, 80, 76, 69, - 84, 128, 68, 82, 79, 80, 45, 83, 72, 65, 68, 79, 87, 69, 196, 68, 82, 79, - 77, 69, 68, 65, 82, 217, 68, 82, 73, 86, 69, 128, 68, 82, 73, 86, 197, - 68, 82, 73, 78, 75, 128, 68, 82, 73, 204, 68, 82, 69, 83, 83, 128, 68, - 82, 65, 85, 71, 72, 84, 211, 68, 82, 65, 77, 128, 68, 82, 65, 205, 68, - 82, 65, 71, 79, 78, 128, 68, 82, 65, 71, 79, 206, 68, 82, 65, 70, 84, 73, - 78, 199, 68, 82, 65, 67, 72, 77, 65, 83, 128, 68, 82, 65, 67, 72, 77, 65, - 128, 68, 82, 65, 67, 72, 77, 193, 68, 79, 87, 78, 87, 65, 82, 68, 83, - 128, 68, 79, 87, 78, 87, 65, 82, 68, 211, 68, 79, 87, 78, 45, 80, 79, 73, - 78, 84, 73, 78, 199, 68, 79, 87, 78, 128, 68, 79, 86, 69, 128, 68, 79, - 85, 71, 72, 78, 85, 84, 128, 68, 79, 85, 66, 84, 128, 68, 79, 85, 66, 76, - 69, 196, 68, 79, 85, 66, 76, 69, 45, 76, 73, 78, 197, 68, 79, 85, 66, 76, - 69, 45, 69, 78, 68, 69, 196, 68, 79, 85, 66, 76, 69, 128, 68, 79, 84, 84, - 69, 68, 45, 80, 128, 68, 79, 84, 84, 69, 68, 45, 78, 128, 68, 79, 84, 84, - 69, 68, 45, 76, 128, 68, 79, 84, 84, 69, 68, 128, 68, 79, 84, 84, 69, - 196, 68, 79, 84, 83, 45, 56, 128, 68, 79, 84, 83, 45, 55, 56, 128, 68, - 79, 84, 83, 45, 55, 128, 68, 79, 84, 83, 45, 54, 56, 128, 68, 79, 84, 83, - 45, 54, 55, 56, 128, 68, 79, 84, 83, 45, 54, 55, 128, 68, 79, 84, 83, 45, - 54, 128, 68, 79, 84, 83, 45, 53, 56, 128, 68, 79, 84, 83, 45, 53, 55, 56, - 128, 68, 79, 84, 83, 45, 53, 55, 128, 68, 79, 84, 83, 45, 53, 54, 56, - 128, 68, 79, 84, 83, 45, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 53, 54, - 55, 128, 68, 79, 84, 83, 45, 53, 54, 128, 68, 79, 84, 83, 45, 53, 128, - 68, 79, 84, 83, 45, 52, 56, 128, 68, 79, 84, 83, 45, 52, 55, 56, 128, 68, - 79, 84, 83, 45, 52, 55, 128, 68, 79, 84, 83, 45, 52, 54, 56, 128, 68, 79, - 84, 83, 45, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 54, 55, 128, 68, - 79, 84, 83, 45, 52, 54, 128, 68, 79, 84, 83, 45, 52, 53, 56, 128, 68, 79, - 84, 83, 45, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 55, 128, 68, - 79, 84, 83, 45, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 52, - 53, 54, 128, 68, 79, 84, 83, 45, 52, 53, 128, 68, 79, 84, 83, 45, 52, - 128, 68, 79, 84, 83, 45, 51, 56, 128, 68, 79, 84, 83, 45, 51, 55, 56, - 128, 68, 79, 84, 83, 45, 51, 55, 128, 68, 79, 84, 83, 45, 51, 54, 56, + 73, 195, 69, 80, 69, 71, 69, 82, 77, 65, 128, 69, 80, 65, 67, 212, 69, + 79, 84, 128, 69, 79, 77, 128, 69, 79, 76, 72, 88, 128, 69, 79, 76, 128, + 69, 79, 72, 128, 69, 78, 89, 128, 69, 78, 86, 69, 76, 79, 80, 69, 128, + 69, 78, 86, 69, 76, 79, 80, 197, 69, 78, 85, 77, 69, 82, 65, 84, 73, 79, + 206, 69, 78, 84, 82, 89, 45, 50, 128, 69, 78, 84, 82, 89, 45, 49, 128, + 69, 78, 84, 82, 89, 128, 69, 78, 84, 82, 217, 69, 78, 84, 72, 85, 83, 73, + 65, 83, 77, 128, 69, 78, 84, 69, 82, 80, 82, 73, 83, 69, 128, 69, 78, 84, + 69, 82, 73, 78, 199, 69, 78, 84, 69, 82, 128, 69, 78, 84, 69, 210, 69, + 78, 81, 85, 73, 82, 89, 128, 69, 78, 81, 128, 69, 78, 79, 211, 69, 78, + 78, 73, 128, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, + 128, 69, 78, 71, 73, 78, 69, 128, 69, 78, 68, 79, 70, 79, 78, 79, 78, + 128, 69, 78, 68, 73, 78, 199, 69, 78, 68, 69, 80, 128, 69, 78, 68, 69, + 65, 86, 79, 85, 82, 128, 69, 78, 67, 79, 85, 78, 84, 69, 82, 83, 128, 69, + 78, 67, 76, 79, 83, 85, 82, 69, 128, 69, 78, 67, 76, 79, 83, 73, 78, 199, + 69, 78, 67, 128, 69, 78, 65, 82, 88, 73, 211, 69, 78, 65, 82, 77, 79, 78, + 73, 79, 211, 69, 77, 80, 84, 217, 69, 77, 80, 72, 65, 84, 73, 195, 69, + 77, 80, 72, 65, 83, 73, 211, 69, 77, 66, 82, 79, 73, 68, 69, 82, 89, 128, + 69, 77, 66, 76, 69, 77, 128, 69, 77, 66, 69, 76, 76, 73, 83, 72, 77, 69, + 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 69, 76, 84, 128, + 69, 76, 76, 73, 80, 84, 73, 195, 69, 76, 76, 73, 80, 83, 73, 83, 128, 69, + 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, 69, 86, 69, + 78, 45, 84, 72, 73, 82, 84, 89, 128, 69, 76, 69, 86, 69, 78, 128, 69, 76, + 69, 86, 69, 206, 69, 76, 69, 80, 72, 65, 78, 84, 128, 69, 76, 69, 77, 69, + 78, 212, 69, 76, 69, 67, 84, 82, 73, 67, 65, 204, 69, 76, 69, 67, 84, 82, + 73, 195, 69, 76, 66, 65, 83, 65, 206, 69, 76, 65, 77, 73, 84, 69, 128, + 69, 76, 65, 77, 73, 84, 197, 69, 76, 65, 70, 82, 79, 78, 128, 69, 75, 83, + 84, 82, 69, 80, 84, 79, 78, 128, 69, 75, 83, 128, 69, 75, 70, 79, 78, 73, + 84, 73, 75, 79, 78, 128, 69, 75, 65, 82, 65, 128, 69, 75, 65, 77, 128, + 69, 74, 69, 67, 212, 69, 73, 83, 128, 69, 73, 71, 72, 84, 89, 128, 69, + 73, 71, 72, 84, 217, 69, 73, 71, 72, 84, 72, 83, 128, 69, 73, 71, 72, 84, + 72, 211, 69, 73, 71, 72, 84, 72, 128, 69, 73, 71, 72, 84, 69, 69, 78, + 128, 69, 73, 71, 72, 84, 69, 69, 206, 69, 73, 71, 72, 84, 45, 84, 72, 73, + 82, 84, 89, 128, 69, 73, 69, 128, 69, 72, 87, 65, 218, 69, 71, 89, 80, + 84, 79, 76, 79, 71, 73, 67, 65, 204, 69, 71, 73, 82, 128, 69, 71, 71, + 128, 69, 69, 89, 65, 78, 78, 65, 128, 69, 69, 75, 65, 65, 128, 69, 69, + 72, 128, 69, 69, 66, 69, 69, 70, 73, 76, 73, 128, 69, 68, 73, 84, 79, 82, + 73, 65, 204, 69, 68, 73, 78, 128, 69, 68, 68, 128, 69, 66, 69, 70, 73, + 76, 73, 128, 69, 65, 83, 84, 69, 82, 206, 69, 65, 83, 84, 128, 69, 65, + 83, 212, 69, 65, 82, 84, 72, 76, 217, 69, 65, 82, 84, 72, 128, 69, 65, + 82, 84, 200, 69, 65, 82, 83, 128, 69, 65, 82, 76, 217, 69, 65, 77, 72, + 65, 78, 67, 72, 79, 76, 76, 128, 69, 65, 71, 76, 69, 128, 69, 65, 68, 72, + 65, 68, 72, 128, 69, 65, 66, 72, 65, 68, 72, 128, 69, 178, 69, 48, 51, + 56, 128, 69, 48, 51, 55, 128, 69, 48, 51, 54, 128, 69, 48, 51, 52, 65, + 128, 69, 48, 51, 52, 128, 69, 48, 51, 51, 128, 69, 48, 51, 50, 128, 69, + 48, 51, 49, 128, 69, 48, 51, 48, 128, 69, 48, 50, 57, 128, 69, 48, 50, + 56, 65, 128, 69, 48, 50, 56, 128, 69, 48, 50, 55, 128, 69, 48, 50, 54, + 128, 69, 48, 50, 53, 128, 69, 48, 50, 52, 128, 69, 48, 50, 51, 128, 69, + 48, 50, 50, 128, 69, 48, 50, 49, 128, 69, 48, 50, 48, 65, 128, 69, 48, + 50, 48, 128, 69, 48, 49, 57, 128, 69, 48, 49, 56, 128, 69, 48, 49, 55, + 65, 128, 69, 48, 49, 55, 128, 69, 48, 49, 54, 65, 128, 69, 48, 49, 54, + 128, 69, 48, 49, 53, 128, 69, 48, 49, 52, 128, 69, 48, 49, 51, 128, 69, + 48, 49, 50, 128, 69, 48, 49, 49, 128, 69, 48, 49, 48, 128, 69, 48, 48, + 57, 65, 128, 69, 48, 48, 57, 128, 69, 48, 48, 56, 65, 128, 69, 48, 48, + 56, 128, 69, 48, 48, 55, 128, 69, 48, 48, 54, 128, 69, 48, 48, 53, 128, + 69, 48, 48, 52, 128, 69, 48, 48, 51, 128, 69, 48, 48, 50, 128, 69, 48, + 48, 49, 128, 69, 45, 77, 65, 73, 204, 68, 90, 90, 72, 69, 128, 68, 90, + 90, 69, 128, 68, 90, 90, 65, 128, 68, 90, 89, 65, 89, 128, 68, 90, 87, + 69, 128, 68, 90, 85, 128, 68, 90, 79, 128, 68, 90, 74, 69, 128, 68, 90, + 73, 84, 65, 128, 68, 90, 73, 128, 68, 90, 72, 79, 73, 128, 68, 90, 72, + 69, 128, 68, 90, 72, 65, 128, 68, 90, 69, 76, 79, 128, 68, 90, 69, 69, + 128, 68, 90, 69, 128, 68, 90, 65, 89, 128, 68, 90, 65, 65, 128, 68, 90, + 65, 128, 68, 90, 128, 68, 218, 68, 89, 79, 128, 68, 89, 207, 68, 89, 69, + 72, 128, 68, 89, 69, 200, 68, 89, 65, 78, 128, 68, 87, 79, 128, 68, 87, + 69, 128, 68, 87, 65, 128, 68, 86, 73, 83, 86, 65, 82, 65, 128, 68, 86, + 68, 128, 68, 86, 128, 68, 85, 84, 73, 69, 83, 128, 68, 85, 83, 75, 128, + 68, 85, 83, 72, 69, 78, 78, 65, 128, 68, 85, 82, 65, 84, 73, 79, 78, 128, + 68, 85, 82, 50, 128, 68, 85, 80, 79, 78, 68, 73, 85, 211, 68, 85, 79, 88, + 128, 68, 85, 79, 128, 68, 85, 78, 52, 128, 68, 85, 78, 51, 128, 68, 85, + 78, 179, 68, 85, 77, 128, 68, 85, 204, 68, 85, 72, 128, 68, 85, 71, 85, + 68, 128, 68, 85, 66, 50, 128, 68, 85, 66, 128, 68, 85, 194, 68, 82, 89, + 128, 68, 82, 217, 68, 82, 85, 77, 128, 68, 82, 85, 205, 68, 82, 79, 80, + 83, 128, 68, 82, 79, 80, 76, 69, 84, 128, 68, 82, 79, 80, 45, 83, 72, 65, + 68, 79, 87, 69, 196, 68, 82, 79, 77, 69, 68, 65, 82, 217, 68, 82, 73, 86, + 69, 128, 68, 82, 73, 86, 197, 68, 82, 73, 78, 75, 128, 68, 82, 73, 204, + 68, 82, 69, 83, 83, 128, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, 65, 77, + 128, 68, 82, 65, 205, 68, 82, 65, 71, 79, 78, 128, 68, 82, 65, 71, 79, + 206, 68, 82, 65, 70, 84, 73, 78, 199, 68, 82, 65, 67, 72, 77, 65, 83, + 128, 68, 82, 65, 67, 72, 77, 65, 128, 68, 82, 65, 67, 72, 77, 193, 68, + 79, 87, 78, 87, 65, 82, 68, 83, 128, 68, 79, 87, 78, 45, 80, 79, 73, 78, + 84, 73, 78, 199, 68, 79, 87, 78, 128, 68, 79, 86, 69, 128, 68, 79, 86, + 197, 68, 79, 85, 71, 72, 78, 85, 84, 128, 68, 79, 85, 66, 84, 128, 68, + 79, 85, 66, 76, 69, 196, 68, 79, 85, 66, 76, 69, 45, 76, 73, 78, 197, 68, + 79, 85, 66, 76, 69, 45, 69, 78, 68, 69, 196, 68, 79, 85, 66, 76, 69, 128, + 68, 79, 84, 84, 69, 68, 45, 80, 128, 68, 79, 84, 84, 69, 68, 45, 78, 128, + 68, 79, 84, 84, 69, 68, 45, 76, 128, 68, 79, 84, 84, 69, 68, 128, 68, 79, + 84, 84, 69, 196, 68, 79, 84, 83, 45, 56, 128, 68, 79, 84, 83, 45, 55, 56, + 128, 68, 79, 84, 83, 45, 55, 128, 68, 79, 84, 83, 45, 54, 56, 128, 68, + 79, 84, 83, 45, 54, 55, 56, 128, 68, 79, 84, 83, 45, 54, 55, 128, 68, 79, + 84, 83, 45, 54, 128, 68, 79, 84, 83, 45, 53, 56, 128, 68, 79, 84, 83, 45, + 53, 55, 56, 128, 68, 79, 84, 83, 45, 53, 55, 128, 68, 79, 84, 83, 45, 53, + 54, 56, 128, 68, 79, 84, 83, 45, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 53, 54, 128, 68, 79, 84, 83, 45, 53, + 128, 68, 79, 84, 83, 45, 52, 56, 128, 68, 79, 84, 83, 45, 52, 55, 56, + 128, 68, 79, 84, 83, 45, 52, 55, 128, 68, 79, 84, 83, 45, 52, 54, 56, + 128, 68, 79, 84, 83, 45, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 54, + 55, 128, 68, 79, 84, 83, 45, 52, 54, 128, 68, 79, 84, 83, 45, 52, 53, 56, + 128, 68, 79, 84, 83, 45, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, + 55, 128, 68, 79, 84, 83, 45, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 52, + 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, 128, 68, 79, 84, + 83, 45, 52, 53, 54, 128, 68, 79, 84, 83, 45, 52, 53, 128, 68, 79, 84, 83, + 45, 52, 128, 68, 79, 84, 83, 45, 51, 56, 128, 68, 79, 84, 83, 45, 51, 55, + 56, 128, 68, 79, 84, 83, 45, 51, 55, 128, 68, 79, 84, 83, 45, 51, 54, 56, 128, 68, 79, 84, 83, 45, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 54, 55, 128, 68, 79, 84, 83, 45, 51, 54, 128, 68, 79, 84, 83, 45, 51, 53, 56, 128, 68, 79, 84, 83, 45, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53, @@ -3952,99 +4150,106 @@ static unsigned char lexicon[] = { 71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65, 73, 206, 68, 79, 76, 80, 72, 73, 78, 128, 68, 79, 76, 76, 83, 128, 68, 79, 76, 76, 65, 210, 68, 79, 76, 73, 85, 77, 128, 68, 79, 75, 77, 65, 73, 128, 68, 79, 73, 84, - 128, 68, 79, 71, 128, 68, 79, 199, 68, 79, 69, 211, 68, 79, 68, 69, 75, - 65, 84, 65, 128, 68, 79, 66, 82, 79, 128, 68, 79, 65, 67, 72, 65, 83, 72, - 77, 69, 69, 128, 68, 79, 65, 67, 72, 65, 83, 72, 77, 69, 197, 68, 79, 65, - 128, 68, 79, 45, 79, 128, 68, 77, 128, 68, 205, 68, 76, 85, 128, 68, 76, - 79, 128, 68, 76, 73, 128, 68, 76, 72, 89, 65, 128, 68, 76, 72, 65, 128, - 68, 76, 69, 69, 128, 68, 76, 65, 128, 68, 76, 128, 68, 75, 65, 82, 128, - 68, 75, 65, 210, 68, 74, 69, 82, 86, 73, 128, 68, 74, 69, 82, 86, 128, - 68, 74, 69, 128, 68, 74, 65, 128, 68, 73, 90, 90, 217, 68, 73, 86, 79, - 82, 67, 197, 68, 73, 86, 73, 83, 73, 79, 78, 128, 68, 73, 86, 73, 83, 73, - 79, 206, 68, 73, 86, 73, 78, 65, 84, 73, 79, 78, 128, 68, 73, 86, 73, 68, - 69, 83, 128, 68, 73, 86, 73, 68, 69, 82, 128, 68, 73, 86, 73, 68, 69, - 196, 68, 73, 86, 73, 68, 69, 128, 68, 73, 86, 73, 68, 197, 68, 73, 86, - 69, 82, 71, 69, 78, 67, 69, 128, 68, 73, 84, 84, 207, 68, 73, 83, 84, 79, - 82, 84, 73, 79, 78, 128, 68, 73, 83, 84, 73, 78, 71, 85, 73, 83, 72, 128, - 68, 73, 83, 84, 73, 76, 76, 128, 68, 73, 83, 83, 79, 76, 86, 69, 45, 50, - 128, 68, 73, 83, 83, 79, 76, 86, 69, 128, 68, 73, 83, 80, 69, 82, 83, 73, - 79, 78, 128, 68, 73, 83, 75, 128, 68, 73, 83, 73, 77, 79, 85, 128, 68, - 73, 83, 72, 128, 68, 73, 83, 67, 79, 78, 84, 73, 78, 85, 79, 85, 211, 68, - 73, 83, 195, 68, 73, 83, 65, 80, 80, 79, 73, 78, 84, 69, 196, 68, 73, 83, - 65, 66, 76, 69, 196, 68, 73, 82, 71, 193, 68, 73, 82, 69, 67, 84, 76, - 217, 68, 73, 82, 69, 67, 84, 73, 79, 78, 65, 204, 68, 73, 80, 84, 69, - 128, 68, 73, 80, 80, 69, 82, 128, 68, 73, 80, 76, 79, 85, 78, 128, 68, - 73, 80, 76, 73, 128, 68, 73, 80, 76, 201, 68, 73, 78, 71, 66, 65, 212, - 68, 73, 206, 68, 73, 77, 77, 73, 78, 71, 128, 68, 73, 77, 73, 78, 85, 84, - 73, 79, 78, 45, 51, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 50, - 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 49, 128, 68, 73, 77, 73, - 78, 73, 83, 72, 77, 69, 78, 84, 128, 68, 73, 77, 73, 68, 73, 193, 68, 73, - 77, 69, 78, 83, 73, 79, 78, 65, 204, 68, 73, 77, 69, 78, 83, 73, 79, 206, - 68, 73, 77, 50, 128, 68, 73, 76, 128, 68, 73, 71, 82, 65, 80, 72, 128, - 68, 73, 71, 82, 65, 80, 200, 68, 73, 71, 82, 65, 77, 77, 79, 211, 68, 73, - 71, 82, 65, 77, 77, 193, 68, 73, 71, 82, 65, 205, 68, 73, 71, 79, 82, 71, - 79, 78, 128, 68, 73, 71, 79, 82, 71, 79, 206, 68, 73, 71, 65, 77, 77, 65, - 128, 68, 73, 71, 193, 68, 73, 70, 84, 79, 71, 71, 79, 211, 68, 73, 70, - 79, 78, 73, 65, 83, 128, 68, 73, 70, 70, 73, 67, 85, 76, 84, 217, 68, 73, - 70, 70, 73, 67, 85, 76, 84, 73, 69, 83, 128, 68, 73, 70, 70, 69, 82, 69, - 78, 84, 73, 65, 76, 128, 68, 73, 70, 70, 69, 82, 69, 78, 67, 197, 68, 73, - 70, 65, 84, 128, 68, 73, 69, 83, 73, 83, 128, 68, 73, 69, 83, 73, 211, - 68, 73, 69, 80, 128, 68, 73, 197, 68, 73, 66, 128, 68, 73, 65, 84, 79, - 78, 79, 206, 68, 73, 65, 84, 79, 78, 73, 75, 201, 68, 73, 65, 83, 84, 79, - 76, 201, 68, 73, 65, 77, 79, 78, 68, 83, 128, 68, 73, 65, 77, 79, 78, 68, - 128, 68, 73, 65, 77, 79, 78, 196, 68, 73, 65, 77, 69, 84, 69, 210, 68, - 73, 65, 76, 89, 84, 73, 75, 65, 128, 68, 73, 65, 76, 89, 84, 73, 75, 193, - 68, 73, 65, 76, 69, 67, 84, 45, 208, 68, 73, 65, 71, 79, 78, 65, 76, 128, - 68, 73, 65, 71, 79, 78, 65, 204, 68, 73, 65, 69, 82, 69, 83, 73, 90, 69, - 196, 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, 68, 73, 65, 69, 82, 69, 83, - 73, 211, 68, 72, 79, 85, 128, 68, 72, 79, 79, 128, 68, 72, 79, 128, 68, - 72, 73, 128, 68, 72, 72, 85, 128, 68, 72, 72, 79, 79, 128, 68, 72, 72, - 79, 128, 68, 72, 72, 73, 128, 68, 72, 72, 69, 69, 128, 68, 72, 72, 69, - 128, 68, 72, 72, 65, 128, 68, 72, 69, 69, 128, 68, 72, 65, 82, 77, 65, - 128, 68, 72, 65, 76, 69, 84, 72, 128, 68, 72, 65, 76, 65, 84, 72, 128, - 68, 72, 65, 76, 128, 68, 72, 65, 68, 72, 69, 128, 68, 72, 65, 65, 76, 85, - 128, 68, 72, 65, 65, 128, 68, 72, 65, 128, 68, 69, 90, 200, 68, 69, 89, - 84, 69, 82, 79, 213, 68, 69, 89, 84, 69, 82, 79, 211, 68, 69, 88, 73, 65, - 128, 68, 69, 86, 73, 67, 197, 68, 69, 86, 69, 76, 79, 80, 77, 69, 78, 84, - 128, 68, 69, 85, 78, 71, 128, 68, 69, 83, 203, 68, 69, 83, 73, 71, 78, - 128, 68, 69, 83, 73, 128, 68, 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, - 68, 69, 83, 67, 69, 78, 68, 73, 78, 199, 68, 69, 83, 67, 69, 78, 68, 69, - 82, 128, 68, 69, 82, 69, 84, 45, 72, 73, 68, 69, 84, 128, 68, 69, 82, 69, - 84, 128, 68, 69, 80, 65, 82, 84, 85, 82, 69, 128, 68, 69, 80, 65, 82, 84, - 77, 69, 78, 212, 68, 69, 80, 65, 82, 84, 73, 78, 199, 68, 69, 78, 84, 73, - 83, 84, 82, 217, 68, 69, 78, 84, 65, 204, 68, 69, 78, 79, 77, 73, 78, 65, - 84, 79, 82, 128, 68, 69, 78, 79, 77, 73, 78, 65, 84, 79, 210, 68, 69, 78, - 78, 69, 78, 128, 68, 69, 78, 71, 128, 68, 69, 78, 197, 68, 69, 78, 65, - 82, 73, 85, 211, 68, 69, 76, 84, 65, 128, 68, 69, 76, 84, 193, 68, 69, - 76, 84, 128, 68, 69, 76, 80, 72, 73, 195, 68, 69, 76, 73, 86, 69, 82, - 217, 68, 69, 76, 73, 86, 69, 82, 65, 78, 67, 69, 128, 68, 69, 76, 73, 77, - 73, 84, 69, 82, 128, 68, 69, 76, 73, 77, 73, 84, 69, 210, 68, 69, 76, 73, - 67, 73, 79, 85, 211, 68, 69, 76, 69, 84, 69, 128, 68, 69, 76, 69, 84, - 197, 68, 69, 75, 65, 128, 68, 69, 75, 128, 68, 69, 73, 128, 68, 69, 72, - 73, 128, 68, 69, 71, 82, 69, 197, 68, 69, 70, 73, 78, 73, 84, 73, 79, 78, + 128, 68, 79, 73, 128, 68, 79, 71, 128, 68, 79, 199, 68, 79, 69, 211, 68, + 79, 68, 69, 75, 65, 84, 65, 128, 68, 79, 67, 85, 77, 69, 78, 84, 128, 68, + 79, 67, 85, 77, 69, 78, 212, 68, 79, 66, 82, 79, 128, 68, 79, 65, 67, 72, + 65, 83, 72, 77, 69, 69, 128, 68, 79, 65, 67, 72, 65, 83, 72, 77, 69, 197, + 68, 79, 65, 128, 68, 79, 45, 79, 128, 68, 77, 128, 68, 205, 68, 76, 85, + 128, 68, 76, 79, 128, 68, 76, 73, 128, 68, 76, 72, 89, 65, 128, 68, 76, + 72, 65, 128, 68, 76, 69, 69, 128, 68, 76, 65, 128, 68, 76, 128, 68, 75, + 65, 82, 128, 68, 75, 65, 210, 68, 74, 69, 82, 86, 73, 128, 68, 74, 69, + 82, 86, 128, 68, 74, 69, 128, 68, 74, 65, 128, 68, 73, 90, 90, 217, 68, + 73, 86, 79, 82, 67, 197, 68, 73, 86, 73, 83, 73, 79, 78, 128, 68, 73, 86, + 73, 83, 73, 79, 206, 68, 73, 86, 73, 78, 65, 84, 73, 79, 78, 128, 68, 73, + 86, 73, 68, 69, 83, 128, 68, 73, 86, 73, 68, 69, 82, 83, 128, 68, 73, 86, + 73, 68, 69, 82, 128, 68, 73, 86, 73, 68, 69, 196, 68, 73, 86, 73, 68, 69, + 128, 68, 73, 86, 73, 68, 197, 68, 73, 86, 69, 82, 71, 69, 78, 67, 69, + 128, 68, 73, 84, 84, 207, 68, 73, 83, 84, 79, 82, 84, 73, 79, 78, 128, + 68, 73, 83, 84, 73, 78, 71, 85, 73, 83, 72, 128, 68, 73, 83, 84, 73, 76, + 76, 128, 68, 73, 83, 83, 79, 76, 86, 69, 45, 50, 128, 68, 73, 83, 83, 79, + 76, 86, 69, 128, 68, 73, 83, 80, 69, 82, 83, 73, 79, 78, 128, 68, 73, 83, + 75, 128, 68, 73, 83, 73, 77, 79, 85, 128, 68, 73, 83, 72, 128, 68, 73, + 83, 67, 79, 78, 84, 73, 78, 85, 79, 85, 211, 68, 73, 83, 195, 68, 73, 83, + 65, 80, 80, 79, 73, 78, 84, 69, 196, 68, 73, 83, 65, 66, 76, 69, 196, 68, + 73, 82, 71, 193, 68, 73, 82, 69, 67, 84, 76, 217, 68, 73, 82, 69, 67, 84, + 73, 79, 78, 65, 204, 68, 73, 80, 84, 69, 128, 68, 73, 80, 80, 69, 82, + 128, 68, 73, 80, 76, 79, 85, 78, 128, 68, 73, 80, 76, 73, 128, 68, 73, + 80, 76, 201, 68, 73, 78, 71, 66, 65, 212, 68, 73, 206, 68, 73, 77, 77, + 73, 78, 71, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 51, 128, 68, + 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 50, 128, 68, 73, 77, 73, 78, 85, + 84, 73, 79, 78, 45, 49, 128, 68, 73, 77, 73, 78, 73, 83, 72, 77, 69, 78, + 84, 128, 68, 73, 77, 73, 68, 73, 193, 68, 73, 77, 69, 78, 83, 73, 79, 78, + 65, 204, 68, 73, 77, 69, 78, 83, 73, 79, 206, 68, 73, 77, 50, 128, 68, + 73, 76, 128, 68, 73, 71, 82, 65, 80, 72, 128, 68, 73, 71, 82, 65, 80, + 200, 68, 73, 71, 82, 65, 77, 77, 79, 211, 68, 73, 71, 82, 65, 77, 77, + 193, 68, 73, 71, 82, 65, 205, 68, 73, 71, 79, 82, 71, 79, 78, 128, 68, + 73, 71, 79, 82, 71, 79, 206, 68, 73, 71, 65, 77, 77, 65, 128, 68, 73, 71, + 193, 68, 73, 70, 84, 79, 71, 71, 79, 211, 68, 73, 70, 79, 78, 73, 65, 83, + 128, 68, 73, 70, 70, 73, 67, 85, 76, 84, 217, 68, 73, 70, 70, 73, 67, 85, + 76, 84, 73, 69, 83, 128, 68, 73, 70, 70, 69, 82, 69, 78, 84, 73, 65, 76, + 128, 68, 73, 70, 70, 69, 82, 69, 78, 67, 197, 68, 73, 70, 65, 84, 128, + 68, 73, 69, 83, 73, 83, 128, 68, 73, 69, 83, 73, 211, 68, 73, 69, 83, 69, + 204, 68, 73, 69, 80, 128, 68, 73, 197, 68, 73, 66, 128, 68, 73, 65, 84, + 79, 78, 79, 206, 68, 73, 65, 84, 79, 78, 73, 75, 201, 68, 73, 65, 83, 84, + 79, 76, 201, 68, 73, 65, 77, 79, 78, 68, 83, 128, 68, 73, 65, 77, 79, 78, + 68, 128, 68, 73, 65, 77, 79, 78, 196, 68, 73, 65, 77, 69, 84, 69, 210, + 68, 73, 65, 76, 89, 84, 73, 75, 65, 128, 68, 73, 65, 76, 89, 84, 73, 75, + 193, 68, 73, 65, 76, 69, 67, 84, 45, 208, 68, 73, 65, 71, 79, 78, 65, 76, + 128, 68, 73, 65, 71, 79, 78, 65, 204, 68, 73, 65, 69, 82, 69, 83, 73, 90, + 69, 196, 68, 73, 65, 69, 82, 69, 83, 73, 83, 45, 82, 73, 78, 71, 128, 68, + 73, 65, 69, 82, 69, 83, 73, 83, 128, 68, 73, 65, 69, 82, 69, 83, 73, 211, + 68, 72, 79, 85, 128, 68, 72, 79, 79, 128, 68, 72, 79, 128, 68, 72, 73, + 73, 128, 68, 72, 73, 128, 68, 72, 72, 85, 128, 68, 72, 72, 79, 79, 128, + 68, 72, 72, 79, 128, 68, 72, 72, 73, 128, 68, 72, 72, 69, 69, 128, 68, + 72, 72, 69, 128, 68, 72, 72, 65, 128, 68, 72, 69, 69, 128, 68, 72, 65, + 82, 77, 65, 128, 68, 72, 65, 77, 69, 68, 72, 128, 68, 72, 65, 76, 69, 84, + 72, 128, 68, 72, 65, 76, 65, 84, 72, 128, 68, 72, 65, 76, 128, 68, 72, + 65, 68, 72, 69, 128, 68, 72, 65, 65, 76, 85, 128, 68, 72, 65, 65, 128, + 68, 72, 65, 128, 68, 69, 90, 200, 68, 69, 89, 84, 69, 82, 79, 213, 68, + 69, 89, 84, 69, 82, 79, 211, 68, 69, 88, 73, 65, 128, 68, 69, 86, 73, 67, + 197, 68, 69, 86, 69, 76, 79, 80, 77, 69, 78, 84, 128, 68, 69, 85, 78, 71, + 128, 68, 69, 83, 75, 84, 79, 208, 68, 69, 83, 203, 68, 69, 83, 73, 71, + 78, 128, 68, 69, 83, 73, 128, 68, 69, 83, 69, 82, 84, 128, 68, 69, 83, + 69, 82, 212, 68, 69, 83, 69, 82, 69, 212, 68, 69, 83, 67, 82, 73, 80, 84, + 73, 79, 206, 68, 69, 83, 67, 69, 78, 68, 73, 78, 199, 68, 69, 83, 67, 69, + 78, 68, 69, 82, 128, 68, 69, 82, 69, 84, 45, 72, 73, 68, 69, 84, 128, 68, + 69, 82, 69, 84, 128, 68, 69, 82, 69, 76, 73, 67, 212, 68, 69, 80, 65, 82, + 84, 85, 82, 69, 128, 68, 69, 80, 65, 82, 84, 77, 69, 78, 212, 68, 69, 80, + 65, 82, 84, 73, 78, 199, 68, 69, 78, 84, 73, 83, 84, 82, 217, 68, 69, 78, + 84, 65, 204, 68, 69, 78, 79, 77, 73, 78, 65, 84, 79, 82, 128, 68, 69, 78, + 79, 77, 73, 78, 65, 84, 79, 210, 68, 69, 78, 78, 69, 78, 128, 68, 69, 78, + 71, 128, 68, 69, 78, 197, 68, 69, 78, 65, 82, 73, 85, 211, 68, 69, 76, + 84, 65, 128, 68, 69, 76, 84, 193, 68, 69, 76, 84, 128, 68, 69, 76, 80, + 72, 73, 195, 68, 69, 76, 73, 86, 69, 82, 217, 68, 69, 76, 73, 86, 69, 82, + 65, 78, 67, 69, 128, 68, 69, 76, 73, 77, 73, 84, 69, 82, 128, 68, 69, 76, + 73, 77, 73, 84, 69, 210, 68, 69, 76, 73, 67, 73, 79, 85, 211, 68, 69, 76, + 69, 84, 69, 128, 68, 69, 76, 69, 84, 197, 68, 69, 75, 65, 128, 68, 69, + 75, 128, 68, 69, 73, 128, 68, 69, 72, 73, 128, 68, 69, 71, 82, 69, 69, + 83, 128, 68, 69, 71, 82, 69, 197, 68, 69, 70, 73, 78, 73, 84, 73, 79, 78, 128, 68, 69, 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 128, 68, 69, 69, 80, 76, 89, 128, 68, 69, 69, 76, 128, 68, 69, 67, 82, 69, 83, 67, 69, 78, 68, 79, 128, 68, 69, 67, 82, 69, 65, 83, 69, 128, 68, - 69, 67, 79, 82, 65, 84, 73, 86, 197, 68, 69, 67, 79, 82, 65, 84, 73, 79, - 78, 128, 68, 69, 67, 73, 83, 73, 86, 69, 78, 69, 83, 83, 128, 68, 69, 67, - 73, 77, 65, 204, 68, 69, 67, 73, 68, 85, 79, 85, 211, 68, 69, 67, 69, 77, - 66, 69, 82, 128, 68, 69, 67, 65, 89, 69, 68, 128, 68, 69, 66, 73, 212, - 68, 69, 65, 84, 72, 128, 68, 69, 65, 68, 128, 68, 68, 87, 65, 128, 68, - 68, 85, 88, 128, 68, 68, 85, 84, 128, 68, 68, 85, 82, 88, 128, 68, 68, - 85, 82, 128, 68, 68, 85, 80, 128, 68, 68, 85, 79, 88, 128, 68, 68, 85, - 79, 80, 128, 68, 68, 85, 79, 128, 68, 68, 85, 128, 68, 68, 79, 88, 128, - 68, 68, 79, 84, 128, 68, 68, 79, 80, 128, 68, 68, 79, 65, 128, 68, 68, - 73, 88, 128, 68, 68, 73, 84, 128, 68, 68, 73, 80, 128, 68, 68, 73, 69, - 88, 128, 68, 68, 73, 69, 80, 128, 68, 68, 73, 69, 128, 68, 68, 73, 128, - 68, 68, 72, 85, 128, 68, 68, 72, 79, 128, 68, 68, 72, 73, 128, 68, 68, - 72, 69, 69, 128, 68, 68, 72, 69, 128, 68, 68, 72, 65, 65, 128, 68, 68, - 72, 65, 128, 68, 68, 69, 88, 128, 68, 68, 69, 80, 128, 68, 68, 69, 69, - 128, 68, 68, 69, 128, 68, 68, 68, 72, 65, 128, 68, 68, 68, 65, 128, 68, - 68, 65, 89, 65, 78, 78, 65, 128, 68, 68, 65, 88, 128, 68, 68, 65, 84, - 128, 68, 68, 65, 80, 128, 68, 68, 65, 76, 128, 68, 68, 65, 204, 68, 68, - 65, 72, 65, 76, 128, 68, 68, 65, 72, 65, 204, 68, 68, 65, 65, 128, 68, - 67, 83, 128, 68, 67, 52, 128, 68, 67, 51, 128, 68, 67, 50, 128, 68, 67, - 49, 128, 68, 194, 68, 65, 89, 45, 78, 73, 71, 72, 84, 128, 68, 65, 217, + 69, 67, 82, 69, 65, 83, 197, 68, 69, 67, 79, 82, 65, 84, 73, 86, 197, 68, + 69, 67, 79, 82, 65, 84, 73, 79, 78, 128, 68, 69, 67, 73, 83, 73, 86, 69, + 78, 69, 83, 83, 128, 68, 69, 67, 73, 77, 65, 204, 68, 69, 67, 73, 68, 85, + 79, 85, 211, 68, 69, 67, 69, 77, 66, 69, 82, 128, 68, 69, 67, 65, 89, 69, + 68, 128, 68, 69, 66, 73, 212, 68, 69, 65, 84, 72, 128, 68, 69, 65, 68, + 128, 68, 68, 87, 65, 128, 68, 68, 85, 88, 128, 68, 68, 85, 84, 128, 68, + 68, 85, 82, 88, 128, 68, 68, 85, 82, 128, 68, 68, 85, 80, 128, 68, 68, + 85, 79, 88, 128, 68, 68, 85, 79, 80, 128, 68, 68, 85, 79, 128, 68, 68, + 85, 128, 68, 68, 79, 88, 128, 68, 68, 79, 84, 128, 68, 68, 79, 80, 128, + 68, 68, 79, 65, 128, 68, 68, 73, 88, 128, 68, 68, 73, 84, 128, 68, 68, + 73, 80, 128, 68, 68, 73, 69, 88, 128, 68, 68, 73, 69, 80, 128, 68, 68, + 73, 69, 128, 68, 68, 73, 128, 68, 68, 72, 85, 128, 68, 68, 72, 79, 128, + 68, 68, 72, 73, 128, 68, 68, 72, 69, 69, 128, 68, 68, 72, 69, 128, 68, + 68, 72, 65, 65, 128, 68, 68, 72, 65, 128, 68, 68, 69, 88, 128, 68, 68, + 69, 80, 128, 68, 68, 69, 69, 128, 68, 68, 69, 128, 68, 68, 68, 72, 65, + 128, 68, 68, 68, 65, 128, 68, 68, 65, 89, 65, 78, 78, 65, 128, 68, 68, + 65, 88, 128, 68, 68, 65, 84, 128, 68, 68, 65, 80, 128, 68, 68, 65, 76, + 128, 68, 68, 65, 204, 68, 68, 65, 72, 65, 76, 128, 68, 68, 65, 72, 65, + 204, 68, 68, 65, 65, 128, 68, 67, 83, 128, 68, 67, 72, 69, 128, 68, 67, + 52, 128, 68, 67, 51, 128, 68, 67, 50, 128, 68, 67, 49, 128, 68, 194, 68, + 65, 89, 45, 78, 73, 71, 72, 84, 128, 68, 65, 217, 68, 65, 87, 66, 128, 68, 65, 86, 73, 89, 65, 78, 73, 128, 68, 65, 86, 73, 68, 128, 68, 65, 84, 197, 68, 65, 83, 73, 65, 128, 68, 65, 83, 73, 193, 68, 65, 83, 72, 69, 196, 68, 65, 83, 72, 128, 68, 65, 83, 200, 68, 65, 83, 69, 73, 65, 128, @@ -4061,285 +4266,310 @@ static unsigned char lexicon[] = { 69, 84, 72, 128, 68, 65, 76, 69, 84, 128, 68, 65, 76, 69, 212, 68, 65, 76, 68, 65, 128, 68, 65, 76, 65, 84, 72, 128, 68, 65, 76, 65, 84, 200, 68, 65, 76, 65, 84, 128, 68, 65, 73, 82, 128, 68, 65, 73, 78, 71, 128, - 68, 65, 72, 89, 65, 65, 85, 83, 72, 45, 50, 128, 68, 65, 72, 89, 65, 65, - 85, 83, 72, 128, 68, 65, 71, 83, 128, 68, 65, 71, 71, 69, 82, 128, 68, - 65, 71, 71, 69, 210, 68, 65, 71, 69, 83, 72, 128, 68, 65, 71, 69, 83, - 200, 68, 65, 71, 66, 65, 83, 73, 78, 78, 65, 128, 68, 65, 71, 65, 218, - 68, 65, 71, 65, 76, 71, 65, 128, 68, 65, 199, 68, 65, 69, 78, 71, 128, - 68, 65, 69, 199, 68, 65, 68, 128, 68, 65, 196, 68, 65, 65, 83, 85, 128, - 68, 65, 65, 68, 72, 85, 128, 68, 48, 54, 55, 72, 128, 68, 48, 54, 55, 71, - 128, 68, 48, 54, 55, 70, 128, 68, 48, 54, 55, 69, 128, 68, 48, 54, 55, - 68, 128, 68, 48, 54, 55, 67, 128, 68, 48, 54, 55, 66, 128, 68, 48, 54, - 55, 65, 128, 68, 48, 54, 55, 128, 68, 48, 54, 54, 128, 68, 48, 54, 53, - 128, 68, 48, 54, 52, 128, 68, 48, 54, 51, 128, 68, 48, 54, 50, 128, 68, - 48, 54, 49, 128, 68, 48, 54, 48, 128, 68, 48, 53, 57, 128, 68, 48, 53, - 56, 128, 68, 48, 53, 55, 128, 68, 48, 53, 54, 128, 68, 48, 53, 53, 128, - 68, 48, 53, 52, 65, 128, 68, 48, 53, 52, 128, 68, 48, 53, 51, 128, 68, - 48, 53, 50, 65, 128, 68, 48, 53, 50, 128, 68, 48, 53, 49, 128, 68, 48, - 53, 48, 73, 128, 68, 48, 53, 48, 72, 128, 68, 48, 53, 48, 71, 128, 68, - 48, 53, 48, 70, 128, 68, 48, 53, 48, 69, 128, 68, 48, 53, 48, 68, 128, - 68, 48, 53, 48, 67, 128, 68, 48, 53, 48, 66, 128, 68, 48, 53, 48, 65, - 128, 68, 48, 53, 48, 128, 68, 48, 52, 57, 128, 68, 48, 52, 56, 65, 128, - 68, 48, 52, 56, 128, 68, 48, 52, 55, 128, 68, 48, 52, 54, 65, 128, 68, - 48, 52, 54, 128, 68, 48, 52, 53, 128, 68, 48, 52, 52, 128, 68, 48, 52, - 51, 128, 68, 48, 52, 50, 128, 68, 48, 52, 49, 128, 68, 48, 52, 48, 128, - 68, 48, 51, 57, 128, 68, 48, 51, 56, 128, 68, 48, 51, 55, 128, 68, 48, - 51, 54, 128, 68, 48, 51, 53, 128, 68, 48, 51, 52, 65, 128, 68, 48, 51, - 52, 128, 68, 48, 51, 51, 128, 68, 48, 51, 50, 128, 68, 48, 51, 49, 65, - 128, 68, 48, 51, 49, 128, 68, 48, 51, 48, 128, 68, 48, 50, 57, 128, 68, - 48, 50, 56, 128, 68, 48, 50, 55, 65, 128, 68, 48, 50, 55, 128, 68, 48, - 50, 54, 128, 68, 48, 50, 53, 128, 68, 48, 50, 52, 128, 68, 48, 50, 51, - 128, 68, 48, 50, 50, 128, 68, 48, 50, 49, 128, 68, 48, 50, 48, 128, 68, - 48, 49, 57, 128, 68, 48, 49, 56, 128, 68, 48, 49, 55, 128, 68, 48, 49, - 54, 128, 68, 48, 49, 53, 128, 68, 48, 49, 52, 128, 68, 48, 49, 51, 128, - 68, 48, 49, 50, 128, 68, 48, 49, 49, 128, 68, 48, 49, 48, 128, 68, 48, - 48, 57, 128, 68, 48, 48, 56, 65, 128, 68, 48, 48, 56, 128, 68, 48, 48, - 55, 128, 68, 48, 48, 54, 128, 68, 48, 48, 53, 128, 68, 48, 48, 52, 128, - 68, 48, 48, 51, 128, 68, 48, 48, 50, 128, 68, 48, 48, 49, 128, 67, 89, - 88, 128, 67, 89, 84, 128, 67, 89, 82, 88, 128, 67, 89, 82, 69, 78, 65, - 73, 195, 67, 89, 82, 128, 67, 89, 80, 82, 73, 79, 212, 67, 89, 80, 69, - 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, 82, 73, 67, 73, - 84, 89, 128, 67, 89, 67, 76, 79, 78, 69, 128, 67, 89, 65, 128, 67, 89, - 128, 67, 87, 79, 79, 128, 67, 87, 79, 128, 67, 87, 73, 73, 128, 67, 87, - 73, 128, 67, 87, 69, 79, 82, 84, 72, 128, 67, 87, 69, 128, 67, 87, 65, - 65, 128, 67, 85, 88, 128, 67, 85, 85, 128, 67, 85, 212, 67, 85, 83, 84, - 79, 77, 83, 128, 67, 85, 83, 84, 79, 77, 69, 210, 67, 85, 83, 84, 65, 82, - 68, 128, 67, 85, 82, 88, 128, 67, 85, 82, 86, 73, 78, 199, 67, 85, 82, - 86, 69, 196, 67, 85, 82, 86, 69, 128, 67, 85, 82, 86, 197, 67, 85, 82, - 83, 73, 86, 197, 67, 85, 82, 82, 217, 67, 85, 82, 82, 69, 78, 84, 128, - 67, 85, 82, 82, 69, 78, 212, 67, 85, 82, 76, 217, 67, 85, 82, 76, 128, - 67, 85, 82, 128, 67, 85, 80, 128, 67, 85, 79, 88, 128, 67, 85, 79, 80, - 128, 67, 85, 79, 128, 67, 85, 205, 67, 85, 66, 69, 68, 128, 67, 85, 66, - 197, 67, 85, 65, 84, 82, 73, 76, 76, 79, 128, 67, 85, 65, 84, 82, 73, 76, - 76, 207, 67, 85, 128, 67, 83, 73, 128, 67, 82, 89, 83, 84, 65, 204, 67, - 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, 195, 67, 82, 89, 73, 78, 199, - 67, 82, 85, 90, 69, 73, 82, 207, 67, 82, 85, 67, 73, 66, 76, 69, 45, 53, - 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 52, 128, 67, 82, 85, 67, 73, 66, - 76, 69, 45, 51, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 50, 128, 67, 82, - 85, 67, 73, 66, 76, 69, 128, 67, 82, 79, 87, 78, 128, 67, 82, 79, 83, 83, - 73, 78, 71, 128, 67, 82, 79, 83, 83, 73, 78, 199, 67, 82, 79, 83, 83, 72, - 65, 84, 67, 200, 67, 82, 79, 83, 83, 69, 68, 45, 84, 65, 73, 76, 128, 67, - 82, 79, 83, 83, 69, 196, 67, 82, 79, 83, 83, 66, 79, 78, 69, 83, 128, 67, - 82, 79, 83, 83, 128, 67, 82, 79, 83, 211, 67, 82, 79, 80, 128, 67, 82, - 79, 73, 88, 128, 67, 82, 79, 67, 85, 211, 67, 82, 79, 67, 79, 68, 73, 76, - 69, 128, 67, 82, 69, 83, 67, 69, 78, 84, 128, 67, 82, 69, 83, 67, 69, 78, - 212, 67, 82, 69, 68, 73, 212, 67, 82, 69, 65, 84, 73, 86, 197, 67, 82, - 69, 65, 77, 128, 67, 82, 65, 67, 75, 69, 82, 128, 67, 82, 128, 67, 79, - 88, 128, 67, 79, 87, 128, 67, 79, 215, 67, 79, 86, 69, 82, 128, 67, 79, - 85, 80, 76, 197, 67, 79, 85, 78, 84, 73, 78, 199, 67, 79, 85, 78, 84, 69, - 82, 83, 73, 78, 75, 128, 67, 79, 85, 78, 84, 69, 82, 66, 79, 82, 69, 128, - 67, 79, 85, 78, 67, 73, 204, 67, 79, 84, 128, 67, 79, 82, 82, 69, 83, 80, - 79, 78, 68, 211, 67, 79, 82, 82, 69, 67, 84, 128, 67, 79, 82, 80, 83, 69, - 128, 67, 79, 82, 80, 79, 82, 65, 84, 73, 79, 78, 128, 67, 79, 82, 79, 78, - 73, 83, 128, 67, 79, 82, 78, 69, 82, 83, 128, 67, 79, 82, 78, 69, 82, - 128, 67, 79, 82, 78, 69, 210, 67, 79, 80, 89, 82, 73, 71, 72, 84, 128, - 67, 79, 80, 89, 82, 73, 71, 72, 212, 67, 79, 80, 89, 128, 67, 79, 80, 82, - 79, 68, 85, 67, 84, 128, 67, 79, 80, 80, 69, 82, 45, 50, 128, 67, 79, 80, - 80, 69, 82, 128, 67, 79, 80, 128, 67, 79, 79, 76, 128, 67, 79, 79, 75, - 73, 78, 71, 128, 67, 79, 79, 75, 73, 69, 128, 67, 79, 79, 75, 69, 196, - 67, 79, 79, 128, 67, 79, 78, 86, 69, 82, 71, 73, 78, 199, 67, 79, 78, 86, - 69, 78, 73, 69, 78, 67, 197, 67, 79, 78, 84, 82, 79, 76, 128, 67, 79, 78, - 84, 82, 79, 204, 67, 79, 78, 84, 82, 65, 82, 73, 69, 84, 89, 128, 67, 79, - 78, 84, 82, 65, 67, 84, 73, 79, 78, 128, 67, 79, 78, 84, 79, 85, 82, 69, - 196, 67, 79, 78, 84, 79, 85, 210, 67, 79, 78, 84, 69, 78, 84, 73, 79, 78, - 128, 67, 79, 78, 84, 69, 77, 80, 76, 65, 84, 73, 79, 78, 128, 67, 79, 78, - 84, 65, 73, 78, 211, 67, 79, 78, 84, 65, 73, 78, 73, 78, 199, 67, 79, 78, - 84, 65, 73, 206, 67, 79, 78, 84, 65, 67, 84, 128, 67, 79, 78, 83, 84, 82, - 85, 67, 84, 73, 79, 206, 67, 79, 78, 83, 84, 65, 78, 84, 128, 67, 79, 78, - 83, 84, 65, 78, 212, 67, 79, 78, 83, 84, 65, 78, 67, 89, 128, 67, 79, 78, - 83, 69, 67, 85, 84, 73, 86, 197, 67, 79, 78, 74, 85, 78, 67, 84, 73, 79, - 78, 128, 67, 79, 78, 74, 85, 71, 65, 84, 197, 67, 79, 78, 74, 79, 73, 78, - 73, 78, 199, 67, 79, 78, 73, 67, 65, 204, 67, 79, 78, 71, 82, 85, 69, 78, - 212, 67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 128, 67, 79, - 78, 70, 85, 83, 69, 196, 67, 79, 78, 70, 79, 85, 78, 68, 69, 196, 67, 79, - 78, 70, 76, 73, 67, 84, 128, 67, 79, 78, 70, 69, 84, 84, 201, 67, 79, 78, - 67, 65, 86, 69, 45, 83, 73, 68, 69, 196, 67, 79, 78, 67, 65, 86, 69, 45, - 80, 79, 73, 78, 84, 69, 196, 67, 79, 78, 128, 67, 79, 77, 80, 85, 84, 69, - 82, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 78, 128, 67, 79, 77, 80, - 79, 83, 73, 84, 73, 79, 206, 67, 79, 77, 80, 76, 73, 65, 78, 67, 69, 128, - 67, 79, 77, 80, 76, 69, 84, 73, 79, 78, 128, 67, 79, 77, 80, 76, 69, 84, - 69, 68, 128, 67, 79, 77, 80, 76, 69, 77, 69, 78, 84, 128, 67, 79, 77, 80, - 65, 82, 69, 128, 67, 79, 77, 77, 79, 206, 67, 79, 77, 77, 69, 82, 67, 73, - 65, 204, 67, 79, 77, 77, 65, 78, 68, 128, 67, 79, 77, 77, 65, 128, 67, - 79, 77, 77, 193, 67, 79, 77, 69, 84, 128, 67, 79, 77, 66, 128, 67, 79, - 76, 85, 77, 78, 128, 67, 79, 76, 79, 82, 128, 67, 79, 76, 76, 73, 83, 73, - 79, 206, 67, 79, 76, 76, 128, 67, 79, 76, 196, 67, 79, 70, 70, 73, 78, - 128, 67, 79, 69, 78, 71, 128, 67, 79, 69, 78, 199, 67, 79, 68, 65, 128, - 67, 79, 67, 75, 84, 65, 73, 204, 67, 79, 65, 83, 84, 69, 82, 128, 67, 79, - 65, 128, 67, 79, 128, 67, 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, - 67, 76, 85, 66, 83, 128, 67, 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, - 76, 85, 66, 128, 67, 76, 85, 194, 67, 76, 79, 86, 69, 82, 128, 67, 76, - 79, 85, 68, 128, 67, 76, 79, 85, 196, 67, 76, 79, 84, 72, 69, 83, 128, - 67, 76, 79, 84, 72, 128, 67, 76, 79, 83, 69, 84, 128, 67, 76, 79, 83, 69, - 78, 69, 83, 83, 128, 67, 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 197, - 67, 76, 79, 67, 75, 87, 73, 83, 197, 67, 76, 79, 67, 203, 67, 76, 73, 86, - 73, 83, 128, 67, 76, 73, 80, 66, 79, 65, 82, 68, 128, 67, 76, 73, 78, 75, - 73, 78, 199, 67, 76, 73, 78, 71, 73, 78, 199, 67, 76, 73, 77, 65, 67, 85, - 83, 128, 67, 76, 73, 70, 70, 128, 67, 76, 73, 67, 75, 128, 67, 76, 69, - 70, 45, 50, 128, 67, 76, 69, 70, 45, 49, 128, 67, 76, 69, 70, 128, 67, - 76, 69, 198, 67, 76, 69, 65, 86, 69, 82, 128, 67, 76, 69, 65, 210, 67, - 76, 65, 87, 128, 67, 76, 65, 80, 80, 73, 78, 199, 67, 76, 65, 80, 80, 69, - 210, 67, 76, 65, 78, 128, 67, 76, 65, 73, 77, 128, 67, 76, 128, 67, 73, - 88, 128, 67, 73, 86, 73, 76, 73, 65, 78, 128, 67, 73, 84, 89, 83, 67, 65, - 80, 197, 67, 73, 84, 128, 67, 73, 82, 67, 85, 211, 67, 73, 82, 67, 85, - 77, 70, 76, 69, 88, 128, 67, 73, 82, 67, 85, 77, 70, 76, 69, 216, 67, 73, - 82, 67, 85, 76, 65, 84, 73, 79, 206, 67, 73, 82, 67, 76, 69, 83, 128, 67, - 73, 82, 67, 76, 69, 128, 67, 73, 80, 128, 67, 73, 78, 78, 65, 66, 65, 82, - 128, 67, 73, 78, 69, 77, 65, 128, 67, 73, 73, 128, 67, 73, 69, 88, 128, - 67, 73, 69, 85, 67, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 67, - 73, 69, 85, 67, 45, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, 45, 73, - 69, 85, 78, 71, 128, 67, 73, 69, 85, 195, 67, 73, 69, 84, 128, 67, 73, - 69, 80, 128, 67, 73, 69, 128, 67, 72, 89, 88, 128, 67, 72, 89, 84, 128, - 67, 72, 89, 82, 88, 128, 67, 72, 89, 82, 128, 67, 72, 89, 80, 128, 67, - 72, 85, 88, 128, 67, 72, 85, 82, 88, 128, 67, 72, 85, 82, 67, 72, 128, - 67, 72, 85, 82, 128, 67, 72, 85, 80, 128, 67, 72, 85, 79, 88, 128, 67, - 72, 85, 79, 84, 128, 67, 72, 85, 79, 80, 128, 67, 72, 85, 79, 128, 67, - 72, 85, 76, 65, 128, 67, 72, 85, 128, 67, 72, 82, 89, 83, 65, 78, 84, 72, - 69, 77, 85, 77, 128, 67, 72, 82, 79, 78, 79, 85, 128, 67, 72, 82, 79, 78, - 79, 78, 128, 67, 72, 82, 79, 77, 193, 67, 72, 82, 79, 193, 67, 72, 82, - 73, 86, 73, 128, 67, 72, 82, 73, 83, 84, 77, 65, 83, 128, 67, 72, 82, 73, - 83, 84, 77, 65, 211, 67, 72, 79, 88, 128, 67, 72, 79, 84, 128, 67, 72, - 79, 82, 69, 86, 77, 193, 67, 72, 79, 80, 128, 67, 72, 79, 75, 69, 128, - 67, 72, 79, 69, 128, 67, 72, 79, 67, 79, 76, 65, 84, 197, 67, 72, 79, 65, - 128, 67, 72, 207, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 83, - 73, 79, 83, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 67, - 73, 69, 85, 67, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 73, 79, 83, 128, - 67, 72, 73, 84, 85, 69, 85, 77, 67, 73, 69, 85, 67, 128, 67, 72, 73, 84, - 85, 69, 85, 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 72, 73, 82, 79, 78, - 128, 67, 72, 73, 82, 69, 84, 128, 67, 72, 73, 78, 71, 128, 67, 72, 73, - 78, 69, 83, 197, 67, 72, 73, 78, 128, 67, 72, 73, 77, 69, 128, 67, 72, - 73, 76, 76, 213, 67, 72, 73, 76, 68, 82, 69, 206, 67, 72, 73, 76, 68, - 128, 67, 72, 73, 76, 128, 67, 72, 73, 75, 201, 67, 72, 73, 69, 85, 67, - 72, 45, 75, 72, 73, 69, 85, 75, 72, 128, 67, 72, 73, 69, 85, 67, 72, 45, - 72, 73, 69, 85, 72, 128, 67, 72, 73, 69, 85, 67, 200, 67, 72, 73, 67, 75, - 69, 78, 128, 67, 72, 73, 67, 75, 128, 67, 72, 73, 128, 67, 72, 201, 67, - 72, 72, 65, 128, 67, 72, 69, 88, 128, 67, 72, 69, 86, 82, 79, 206, 67, - 72, 69, 84, 128, 67, 72, 69, 83, 84, 78, 85, 84, 128, 67, 72, 69, 83, - 211, 67, 72, 69, 82, 82, 217, 67, 72, 69, 82, 82, 73, 69, 83, 128, 67, + 68, 65, 73, 128, 68, 65, 72, 89, 65, 65, 85, 83, 72, 45, 50, 128, 68, 65, + 72, 89, 65, 65, 85, 83, 72, 128, 68, 65, 71, 83, 128, 68, 65, 71, 71, 69, + 82, 128, 68, 65, 71, 71, 69, 210, 68, 65, 71, 69, 83, 72, 128, 68, 65, + 71, 69, 83, 200, 68, 65, 71, 66, 65, 83, 73, 78, 78, 65, 128, 68, 65, 71, + 65, 218, 68, 65, 71, 65, 76, 71, 65, 128, 68, 65, 71, 51, 128, 68, 65, + 199, 68, 65, 69, 78, 71, 128, 68, 65, 69, 199, 68, 65, 68, 128, 68, 65, + 196, 68, 65, 65, 83, 85, 128, 68, 65, 65, 68, 72, 85, 128, 68, 48, 54, + 55, 72, 128, 68, 48, 54, 55, 71, 128, 68, 48, 54, 55, 70, 128, 68, 48, + 54, 55, 69, 128, 68, 48, 54, 55, 68, 128, 68, 48, 54, 55, 67, 128, 68, + 48, 54, 55, 66, 128, 68, 48, 54, 55, 65, 128, 68, 48, 54, 55, 128, 68, + 48, 54, 54, 128, 68, 48, 54, 53, 128, 68, 48, 54, 52, 128, 68, 48, 54, + 51, 128, 68, 48, 54, 50, 128, 68, 48, 54, 49, 128, 68, 48, 54, 48, 128, + 68, 48, 53, 57, 128, 68, 48, 53, 56, 128, 68, 48, 53, 55, 128, 68, 48, + 53, 54, 128, 68, 48, 53, 53, 128, 68, 48, 53, 52, 65, 128, 68, 48, 53, + 52, 128, 68, 48, 53, 51, 128, 68, 48, 53, 50, 65, 128, 68, 48, 53, 50, + 128, 68, 48, 53, 49, 128, 68, 48, 53, 48, 73, 128, 68, 48, 53, 48, 72, + 128, 68, 48, 53, 48, 71, 128, 68, 48, 53, 48, 70, 128, 68, 48, 53, 48, + 69, 128, 68, 48, 53, 48, 68, 128, 68, 48, 53, 48, 67, 128, 68, 48, 53, + 48, 66, 128, 68, 48, 53, 48, 65, 128, 68, 48, 53, 48, 128, 68, 48, 52, + 57, 128, 68, 48, 52, 56, 65, 128, 68, 48, 52, 56, 128, 68, 48, 52, 55, + 128, 68, 48, 52, 54, 65, 128, 68, 48, 52, 54, 128, 68, 48, 52, 53, 128, + 68, 48, 52, 52, 128, 68, 48, 52, 51, 128, 68, 48, 52, 50, 128, 68, 48, + 52, 49, 128, 68, 48, 52, 48, 128, 68, 48, 51, 57, 128, 68, 48, 51, 56, + 128, 68, 48, 51, 55, 128, 68, 48, 51, 54, 128, 68, 48, 51, 53, 128, 68, + 48, 51, 52, 65, 128, 68, 48, 51, 52, 128, 68, 48, 51, 51, 128, 68, 48, + 51, 50, 128, 68, 48, 51, 49, 65, 128, 68, 48, 51, 49, 128, 68, 48, 51, + 48, 128, 68, 48, 50, 57, 128, 68, 48, 50, 56, 128, 68, 48, 50, 55, 65, + 128, 68, 48, 50, 55, 128, 68, 48, 50, 54, 128, 68, 48, 50, 53, 128, 68, + 48, 50, 52, 128, 68, 48, 50, 51, 128, 68, 48, 50, 50, 128, 68, 48, 50, + 49, 128, 68, 48, 50, 48, 128, 68, 48, 49, 57, 128, 68, 48, 49, 56, 128, + 68, 48, 49, 55, 128, 68, 48, 49, 54, 128, 68, 48, 49, 53, 128, 68, 48, + 49, 52, 128, 68, 48, 49, 51, 128, 68, 48, 49, 50, 128, 68, 48, 49, 49, + 128, 68, 48, 49, 48, 128, 68, 48, 48, 57, 128, 68, 48, 48, 56, 65, 128, + 68, 48, 48, 56, 128, 68, 48, 48, 55, 128, 68, 48, 48, 54, 128, 68, 48, + 48, 53, 128, 68, 48, 48, 52, 128, 68, 48, 48, 51, 128, 68, 48, 48, 50, + 128, 68, 48, 48, 49, 128, 67, 89, 88, 128, 67, 89, 84, 128, 67, 89, 82, + 88, 128, 67, 89, 82, 69, 78, 65, 73, 195, 67, 89, 82, 128, 67, 89, 80, + 82, 73, 79, 212, 67, 89, 80, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, + 89, 76, 73, 78, 68, 82, 73, 67, 73, 84, 89, 128, 67, 89, 67, 76, 79, 78, + 69, 128, 67, 89, 65, 89, 128, 67, 89, 65, 87, 128, 67, 89, 65, 128, 67, + 87, 79, 79, 128, 67, 87, 79, 128, 67, 87, 73, 73, 128, 67, 87, 73, 128, + 67, 87, 69, 79, 82, 84, 72, 128, 67, 87, 69, 128, 67, 87, 65, 65, 128, + 67, 85, 88, 128, 67, 85, 85, 128, 67, 85, 212, 67, 85, 83, 84, 79, 77, + 83, 128, 67, 85, 83, 84, 79, 77, 69, 210, 67, 85, 83, 84, 65, 82, 68, + 128, 67, 85, 83, 80, 128, 67, 85, 82, 88, 128, 67, 85, 82, 86, 73, 78, + 199, 67, 85, 82, 86, 69, 196, 67, 85, 82, 86, 69, 128, 67, 85, 82, 86, + 197, 67, 85, 82, 83, 73, 86, 197, 67, 85, 82, 82, 217, 67, 85, 82, 82, + 69, 78, 84, 128, 67, 85, 82, 82, 69, 78, 212, 67, 85, 82, 76, 217, 67, + 85, 82, 76, 128, 67, 85, 82, 128, 67, 85, 80, 128, 67, 85, 79, 88, 128, + 67, 85, 79, 80, 128, 67, 85, 79, 128, 67, 85, 205, 67, 85, 66, 69, 68, + 128, 67, 85, 66, 197, 67, 85, 65, 84, 82, 73, 76, 76, 79, 128, 67, 85, + 65, 84, 82, 73, 76, 76, 207, 67, 85, 65, 205, 67, 85, 128, 67, 83, 73, + 128, 67, 82, 89, 83, 84, 65, 204, 67, 82, 89, 80, 84, 79, 71, 82, 65, 77, + 77, 73, 195, 67, 82, 89, 73, 78, 199, 67, 82, 85, 90, 69, 73, 82, 207, + 67, 82, 85, 67, 73, 70, 79, 82, 205, 67, 82, 85, 67, 73, 66, 76, 69, 45, + 53, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 52, 128, 67, 82, 85, 67, 73, + 66, 76, 69, 45, 51, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 50, 128, 67, + 82, 85, 67, 73, 66, 76, 69, 128, 67, 82, 79, 87, 78, 128, 67, 82, 79, 83, + 83, 73, 78, 71, 128, 67, 82, 79, 83, 83, 73, 78, 199, 67, 82, 79, 83, 83, + 72, 65, 84, 67, 200, 67, 82, 79, 83, 83, 69, 68, 45, 84, 65, 73, 76, 128, + 67, 82, 79, 83, 83, 69, 196, 67, 82, 79, 83, 83, 66, 79, 78, 69, 83, 128, + 67, 82, 79, 83, 83, 128, 67, 82, 79, 83, 211, 67, 82, 79, 80, 128, 67, + 82, 79, 73, 88, 128, 67, 82, 79, 67, 85, 211, 67, 82, 79, 67, 79, 68, 73, + 76, 69, 128, 67, 82, 69, 83, 67, 69, 78, 84, 128, 67, 82, 69, 83, 67, 69, + 78, 212, 67, 82, 69, 68, 73, 212, 67, 82, 69, 65, 84, 73, 86, 197, 67, + 82, 69, 65, 77, 128, 67, 82, 65, 89, 79, 78, 128, 67, 82, 65, 67, 75, 69, + 82, 128, 67, 82, 128, 67, 79, 88, 128, 67, 79, 87, 128, 67, 79, 215, 67, + 79, 86, 69, 82, 128, 67, 79, 85, 80, 76, 197, 67, 79, 85, 78, 84, 73, 78, + 199, 67, 79, 85, 78, 84, 69, 82, 83, 73, 78, 75, 128, 67, 79, 85, 78, 84, + 69, 82, 66, 79, 82, 69, 128, 67, 79, 85, 78, 67, 73, 204, 67, 79, 85, 67, + 200, 67, 79, 84, 128, 67, 79, 82, 82, 69, 83, 80, 79, 78, 68, 211, 67, + 79, 82, 82, 69, 67, 84, 128, 67, 79, 82, 80, 83, 69, 128, 67, 79, 82, 80, + 79, 82, 65, 84, 73, 79, 78, 128, 67, 79, 82, 79, 78, 73, 83, 128, 67, 79, + 82, 78, 69, 82, 83, 128, 67, 79, 82, 78, 69, 82, 128, 67, 79, 82, 78, 69, + 210, 67, 79, 80, 89, 82, 73, 71, 72, 84, 128, 67, 79, 80, 89, 82, 73, 71, + 72, 212, 67, 79, 80, 89, 128, 67, 79, 80, 82, 79, 68, 85, 67, 84, 128, + 67, 79, 80, 80, 69, 82, 45, 50, 128, 67, 79, 80, 80, 69, 82, 128, 67, 79, + 80, 128, 67, 79, 79, 76, 128, 67, 79, 79, 75, 73, 78, 71, 128, 67, 79, + 79, 75, 73, 69, 128, 67, 79, 79, 75, 69, 196, 67, 79, 79, 128, 67, 79, + 78, 86, 69, 82, 71, 73, 78, 199, 67, 79, 78, 86, 69, 78, 73, 69, 78, 67, + 197, 67, 79, 78, 84, 82, 79, 76, 128, 67, 79, 78, 84, 82, 79, 204, 67, + 79, 78, 84, 82, 65, 82, 73, 69, 84, 89, 128, 67, 79, 78, 84, 82, 65, 67, + 84, 73, 79, 78, 128, 67, 79, 78, 84, 79, 85, 82, 69, 196, 67, 79, 78, 84, + 79, 85, 210, 67, 79, 78, 84, 73, 78, 85, 73, 78, 199, 67, 79, 78, 84, 69, + 78, 84, 73, 79, 78, 128, 67, 79, 78, 84, 69, 77, 80, 76, 65, 84, 73, 79, + 78, 128, 67, 79, 78, 84, 65, 73, 78, 211, 67, 79, 78, 84, 65, 73, 78, 73, + 78, 199, 67, 79, 78, 84, 65, 73, 206, 67, 79, 78, 84, 65, 67, 84, 128, + 67, 79, 78, 83, 84, 82, 85, 67, 84, 73, 79, 78, 128, 67, 79, 78, 83, 84, + 82, 85, 67, 84, 73, 79, 206, 67, 79, 78, 83, 84, 65, 78, 84, 128, 67, 79, + 78, 83, 84, 65, 78, 212, 67, 79, 78, 83, 84, 65, 78, 67, 89, 128, 67, 79, + 78, 83, 69, 67, 85, 84, 73, 86, 197, 67, 79, 78, 74, 85, 78, 67, 84, 73, + 79, 78, 128, 67, 79, 78, 74, 85, 71, 65, 84, 197, 67, 79, 78, 74, 79, 73, + 78, 73, 78, 199, 67, 79, 78, 73, 67, 65, 204, 67, 79, 78, 71, 82, 85, 69, + 78, 212, 67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 128, 67, + 79, 78, 70, 85, 83, 69, 196, 67, 79, 78, 70, 79, 85, 78, 68, 69, 196, 67, + 79, 78, 70, 76, 73, 67, 84, 128, 67, 79, 78, 70, 69, 84, 84, 201, 67, 79, + 78, 67, 65, 86, 69, 45, 83, 73, 68, 69, 196, 67, 79, 78, 67, 65, 86, 69, + 45, 80, 79, 73, 78, 84, 69, 196, 67, 79, 77, 80, 85, 84, 69, 82, 83, 128, + 67, 79, 77, 80, 85, 84, 69, 82, 128, 67, 79, 77, 80, 82, 69, 83, 83, 73, + 79, 78, 128, 67, 79, 77, 80, 82, 69, 83, 83, 69, 196, 67, 79, 77, 80, 79, + 83, 73, 84, 73, 79, 78, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 206, + 67, 79, 77, 80, 76, 73, 65, 78, 67, 69, 128, 67, 79, 77, 80, 76, 69, 84, + 73, 79, 78, 128, 67, 79, 77, 80, 76, 69, 84, 69, 68, 128, 67, 79, 77, 80, + 76, 69, 77, 69, 78, 84, 128, 67, 79, 77, 80, 65, 82, 69, 128, 67, 79, 77, + 77, 79, 206, 67, 79, 77, 77, 69, 82, 67, 73, 65, 204, 67, 79, 77, 77, 65, + 78, 68, 128, 67, 79, 77, 77, 65, 128, 67, 79, 77, 77, 193, 67, 79, 77, + 69, 84, 128, 67, 79, 77, 66, 128, 67, 79, 76, 85, 77, 78, 128, 67, 79, + 76, 79, 82, 128, 67, 79, 76, 76, 73, 83, 73, 79, 206, 67, 79, 76, 76, + 128, 67, 79, 76, 196, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, 78, 71, + 128, 67, 79, 69, 78, 199, 67, 79, 68, 65, 128, 67, 79, 67, 75, 84, 65, + 73, 204, 67, 79, 65, 83, 84, 69, 82, 128, 67, 79, 65, 128, 67, 79, 128, + 67, 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 83, + 128, 67, 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, + 67, 76, 85, 194, 67, 76, 79, 86, 69, 82, 128, 67, 76, 79, 85, 68, 128, + 67, 76, 79, 85, 196, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, 79, 84, 72, + 128, 67, 76, 79, 83, 69, 84, 128, 67, 76, 79, 83, 69, 78, 69, 83, 83, + 128, 67, 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 197, 67, 76, 79, 67, + 75, 87, 73, 83, 197, 67, 76, 79, 67, 203, 67, 76, 73, 86, 73, 83, 128, + 67, 76, 73, 80, 66, 79, 65, 82, 68, 128, 67, 76, 73, 78, 75, 73, 78, 199, + 67, 76, 73, 78, 71, 73, 78, 199, 67, 76, 73, 77, 65, 67, 85, 83, 128, 67, + 76, 73, 70, 70, 128, 67, 76, 73, 67, 75, 128, 67, 76, 69, 70, 45, 50, + 128, 67, 76, 69, 70, 45, 49, 128, 67, 76, 69, 70, 128, 67, 76, 69, 198, + 67, 76, 69, 65, 86, 69, 82, 128, 67, 76, 69, 65, 210, 67, 76, 65, 87, + 128, 67, 76, 65, 83, 83, 73, 67, 65, 204, 67, 76, 65, 80, 80, 73, 78, + 199, 67, 76, 65, 80, 80, 69, 210, 67, 76, 65, 78, 128, 67, 76, 65, 206, + 67, 76, 65, 77, 83, 72, 69, 76, 204, 67, 76, 65, 73, 77, 128, 67, 76, + 128, 67, 73, 88, 128, 67, 73, 86, 73, 76, 73, 65, 78, 128, 67, 73, 84, + 89, 83, 67, 65, 80, 69, 128, 67, 73, 84, 89, 83, 67, 65, 80, 197, 67, 73, + 84, 65, 84, 73, 79, 206, 67, 73, 84, 128, 67, 73, 82, 67, 85, 211, 67, + 73, 82, 67, 85, 77, 70, 76, 69, 88, 128, 67, 73, 82, 67, 85, 77, 70, 76, + 69, 216, 67, 73, 82, 67, 85, 76, 65, 84, 73, 79, 206, 67, 73, 82, 67, 76, + 73, 78, 199, 67, 73, 82, 67, 76, 69, 83, 128, 67, 73, 82, 67, 76, 69, + 128, 67, 73, 80, 128, 67, 73, 78, 78, 65, 66, 65, 82, 128, 67, 73, 78, + 69, 77, 65, 128, 67, 73, 206, 67, 73, 205, 67, 73, 73, 128, 67, 73, 69, + 88, 128, 67, 73, 69, 85, 67, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, + 128, 67, 73, 69, 85, 67, 45, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, + 45, 73, 69, 85, 78, 71, 128, 67, 73, 69, 85, 195, 67, 73, 69, 84, 128, + 67, 73, 69, 80, 128, 67, 73, 69, 128, 67, 72, 89, 88, 128, 67, 72, 89, + 84, 128, 67, 72, 89, 82, 88, 128, 67, 72, 89, 82, 128, 67, 72, 89, 80, + 128, 67, 72, 87, 86, 128, 67, 72, 85, 88, 128, 67, 72, 85, 82, 88, 128, + 67, 72, 85, 82, 67, 72, 128, 67, 72, 85, 82, 128, 67, 72, 85, 80, 128, + 67, 72, 85, 79, 88, 128, 67, 72, 85, 79, 84, 128, 67, 72, 85, 79, 80, + 128, 67, 72, 85, 79, 128, 67, 72, 85, 76, 65, 128, 67, 72, 85, 128, 67, + 72, 82, 89, 83, 65, 78, 84, 72, 69, 77, 85, 77, 128, 67, 72, 82, 79, 78, + 79, 85, 128, 67, 72, 82, 79, 78, 79, 78, 128, 67, 72, 82, 79, 77, 193, + 67, 72, 82, 79, 193, 67, 72, 82, 73, 86, 73, 128, 67, 72, 82, 73, 83, 84, + 77, 65, 83, 128, 67, 72, 82, 73, 83, 84, 77, 65, 211, 67, 72, 79, 89, + 128, 67, 72, 79, 88, 128, 67, 72, 79, 84, 128, 67, 72, 79, 82, 69, 86, + 77, 193, 67, 72, 79, 80, 128, 67, 72, 79, 75, 69, 128, 67, 72, 79, 69, + 128, 67, 72, 79, 67, 79, 76, 65, 84, 197, 67, 72, 79, 65, 128, 67, 72, + 207, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, + 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, 69, 85, + 67, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 73, 79, 83, 128, 67, 72, 73, + 84, 85, 69, 85, 77, 67, 73, 69, 85, 67, 128, 67, 72, 73, 84, 85, 69, 85, + 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 72, 73, 82, 79, 78, 128, 67, 72, + 73, 82, 69, 84, 128, 67, 72, 73, 80, 77, 85, 78, 75, 128, 67, 72, 73, 78, + 79, 79, 203, 67, 72, 73, 78, 71, 128, 67, 72, 73, 78, 69, 83, 197, 67, + 72, 73, 78, 128, 67, 72, 73, 77, 69, 128, 67, 72, 73, 76, 76, 213, 67, + 72, 73, 76, 68, 82, 69, 206, 67, 72, 73, 76, 68, 128, 67, 72, 73, 76, + 128, 67, 72, 73, 75, 201, 67, 72, 73, 69, 85, 67, 72, 45, 75, 72, 73, 69, + 85, 75, 72, 128, 67, 72, 73, 69, 85, 67, 72, 45, 72, 73, 69, 85, 72, 128, + 67, 72, 73, 69, 85, 67, 200, 67, 72, 73, 67, 75, 69, 78, 128, 67, 72, 73, + 67, 75, 128, 67, 72, 73, 128, 67, 72, 201, 67, 72, 72, 65, 128, 67, 72, + 69, 88, 128, 67, 72, 69, 86, 82, 79, 206, 67, 72, 69, 84, 128, 67, 72, + 69, 83, 84, 78, 85, 84, 128, 67, 72, 69, 83, 211, 67, 72, 69, 82, 89, + 128, 67, 72, 69, 82, 82, 217, 67, 72, 69, 82, 82, 73, 69, 83, 128, 67, 72, 69, 81, 85, 69, 82, 69, 196, 67, 72, 69, 80, 128, 67, 72, 69, 206, 67, 72, 69, 73, 78, 65, 80, 128, 67, 72, 69, 73, 75, 72, 69, 73, 128, 67, 72, 69, 73, 75, 72, 65, 78, 128, 67, 72, 69, 69, 82, 73, 78, 199, 67, 72, - 69, 69, 128, 67, 72, 69, 67, 75, 128, 67, 72, 69, 67, 203, 67, 72, 197, - 67, 72, 65, 88, 128, 67, 72, 65, 86, 73, 89, 65, 78, 73, 128, 67, 72, 65, - 84, 84, 65, 87, 65, 128, 67, 72, 65, 84, 128, 67, 72, 65, 82, 84, 128, - 67, 72, 65, 82, 212, 67, 72, 65, 82, 73, 79, 84, 128, 67, 72, 65, 82, 73, - 79, 212, 67, 72, 65, 82, 65, 67, 84, 69, 82, 83, 128, 67, 72, 65, 82, 65, - 67, 84, 69, 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 128, 67, 72, - 65, 78, 71, 128, 67, 72, 65, 78, 128, 67, 72, 65, 77, 75, 79, 128, 67, - 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65, 77, 73, 76, 73, 128, 67, 72, - 65, 75, 77, 193, 67, 72, 65, 73, 82, 128, 67, 72, 65, 73, 78, 83, 128, - 67, 72, 65, 68, 65, 128, 67, 72, 65, 196, 67, 72, 65, 65, 128, 67, 71, - 74, 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 128, 67, 69, 82, 69, 77, - 79, 78, 89, 128, 67, 69, 82, 69, 75, 128, 67, 69, 82, 45, 87, 65, 128, - 67, 69, 80, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, - 78, 71, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, - 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, - 73, 69, 85, 77, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, - 85, 77, 67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, - 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 69, 78, 84, 85, 82, 73, 65, 204, - 67, 69, 78, 84, 82, 69, 76, 73, 78, 197, 67, 69, 78, 84, 82, 69, 196, 67, - 69, 78, 84, 82, 69, 128, 67, 69, 78, 84, 82, 197, 67, 69, 78, 128, 67, - 69, 76, 83, 73, 85, 83, 128, 67, 69, 76, 69, 66, 82, 65, 84, 73, 79, 78, - 128, 67, 69, 73, 82, 84, 128, 67, 69, 73, 76, 73, 78, 71, 128, 67, 69, - 69, 128, 67, 69, 68, 73, 76, 76, 65, 128, 67, 69, 68, 73, 76, 76, 193, - 67, 69, 68, 201, 67, 69, 67, 69, 75, 128, 67, 69, 67, 65, 75, 128, 67, - 69, 67, 65, 203, 67, 69, 65, 76, 67, 128, 67, 67, 85, 128, 67, 67, 79, - 128, 67, 67, 73, 128, 67, 67, 72, 85, 128, 67, 67, 72, 79, 128, 67, 67, - 72, 73, 128, 67, 67, 72, 72, 85, 128, 67, 67, 72, 72, 79, 128, 67, 67, - 72, 72, 73, 128, 67, 67, 72, 72, 69, 69, 128, 67, 67, 72, 72, 69, 128, - 67, 67, 72, 72, 65, 65, 128, 67, 67, 72, 72, 65, 128, 67, 67, 72, 69, 69, - 128, 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, 65, 128, - 67, 67, 72, 128, 67, 67, 69, 69, 128, 67, 67, 69, 128, 67, 67, 65, 65, - 128, 67, 67, 65, 128, 67, 65, 89, 78, 128, 67, 65, 89, 65, 78, 78, 65, - 128, 67, 65, 88, 128, 67, 65, 86, 69, 128, 67, 65, 85, 84, 73, 79, 206, - 67, 65, 85, 76, 68, 82, 79, 78, 128, 67, 65, 85, 68, 65, 128, 67, 65, 85, + 69, 69, 77, 128, 67, 72, 69, 69, 128, 67, 72, 69, 67, 75, 69, 210, 67, + 72, 69, 67, 75, 128, 67, 72, 69, 67, 203, 67, 72, 197, 67, 72, 65, 88, + 128, 67, 72, 65, 86, 73, 89, 65, 78, 73, 128, 67, 72, 65, 84, 84, 65, 87, + 65, 128, 67, 72, 65, 84, 128, 67, 72, 65, 82, 84, 128, 67, 72, 65, 82, + 212, 67, 72, 65, 82, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, 67, + 72, 65, 82, 65, 67, 84, 69, 82, 83, 128, 67, 72, 65, 82, 65, 67, 84, 69, + 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 84, 69, 82, 128, 67, 72, + 65, 80, 128, 67, 72, 65, 78, 71, 128, 67, 72, 65, 78, 128, 67, 72, 65, + 77, 75, 79, 128, 67, 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65, 77, 73, + 76, 73, 128, 67, 72, 65, 75, 77, 193, 67, 72, 65, 73, 82, 128, 67, 72, + 65, 73, 78, 83, 128, 67, 72, 65, 68, 65, 128, 67, 72, 65, 196, 67, 72, + 65, 65, 128, 67, 71, 74, 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 128, + 67, 69, 82, 69, 77, 79, 78, 89, 128, 67, 69, 82, 69, 75, 128, 67, 69, 82, + 45, 87, 65, 128, 67, 69, 80, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, + 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, + 73, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 67, 69, 79, + 78, 71, 67, 72, 73, 69, 85, 77, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, + 67, 72, 73, 69, 85, 77, 67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, + 72, 73, 69, 85, 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 69, 78, 84, 85, + 82, 73, 65, 204, 67, 69, 78, 84, 82, 69, 76, 73, 78, 197, 67, 69, 78, 84, + 82, 69, 68, 128, 67, 69, 78, 84, 82, 69, 196, 67, 69, 78, 84, 82, 69, + 128, 67, 69, 78, 84, 82, 197, 67, 69, 78, 84, 82, 65, 76, 73, 90, 65, 84, + 73, 79, 206, 67, 69, 78, 128, 67, 69, 76, 84, 73, 195, 67, 69, 76, 83, + 73, 85, 83, 128, 67, 69, 76, 69, 66, 82, 65, 84, 73, 79, 78, 128, 67, 69, + 73, 82, 84, 128, 67, 69, 73, 76, 73, 78, 71, 128, 67, 69, 69, 86, 128, + 67, 69, 69, 66, 128, 67, 69, 69, 128, 67, 69, 68, 73, 76, 76, 65, 128, + 67, 69, 68, 73, 76, 76, 193, 67, 69, 68, 201, 67, 69, 67, 69, 75, 128, + 67, 69, 67, 65, 75, 128, 67, 69, 67, 65, 203, 67, 69, 65, 76, 67, 128, + 67, 67, 85, 128, 67, 67, 79, 128, 67, 67, 73, 128, 67, 67, 72, 85, 128, + 67, 67, 72, 79, 128, 67, 67, 72, 73, 128, 67, 67, 72, 72, 85, 128, 67, + 67, 72, 72, 79, 128, 67, 67, 72, 72, 73, 128, 67, 67, 72, 72, 69, 69, + 128, 67, 67, 72, 72, 69, 128, 67, 67, 72, 72, 65, 65, 128, 67, 67, 72, + 72, 65, 128, 67, 67, 72, 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, 72, + 65, 65, 128, 67, 67, 72, 65, 128, 67, 67, 72, 128, 67, 67, 69, 69, 128, + 67, 67, 69, 128, 67, 67, 65, 65, 128, 67, 67, 65, 128, 67, 65, 89, 78, + 128, 67, 65, 89, 65, 78, 78, 65, 128, 67, 65, 88, 128, 67, 65, 86, 69, + 128, 67, 65, 85, 84, 73, 79, 206, 67, 65, 85, 76, 68, 82, 79, 78, 128, + 67, 65, 85, 68, 65, 128, 67, 65, 85, 67, 65, 83, 73, 65, 206, 67, 65, 85, 128, 67, 65, 84, 65, 87, 65, 128, 67, 65, 84, 128, 67, 65, 212, 67, 65, - 83, 84, 76, 69, 128, 67, 65, 82, 89, 83, 84, 73, 65, 206, 67, 65, 82, 84, - 128, 67, 65, 82, 211, 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, 80, - 69, 78, 84, 82, 217, 67, 65, 82, 208, 67, 65, 82, 79, 85, 83, 69, 204, - 67, 65, 82, 79, 78, 128, 67, 65, 82, 79, 206, 67, 65, 82, 73, 203, 67, - 65, 82, 73, 65, 206, 67, 65, 82, 69, 84, 128, 67, 65, 82, 69, 212, 67, - 65, 82, 197, 67, 65, 82, 68, 83, 128, 67, 65, 82, 68, 128, 67, 65, 82, - 196, 67, 65, 82, 128, 67, 65, 210, 67, 65, 80, 85, 212, 67, 65, 80, 84, - 73, 86, 69, 128, 67, 65, 80, 82, 73, 67, 79, 82, 78, 128, 67, 65, 80, 79, - 128, 67, 65, 80, 73, 84, 65, 76, 128, 67, 65, 78, 84, 73, 76, 76, 65, 84, - 73, 79, 206, 67, 65, 78, 199, 67, 65, 78, 68, 89, 128, 67, 65, 78, 68, - 82, 65, 66, 73, 78, 68, 85, 128, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, - 213, 67, 65, 78, 68, 82, 65, 128, 67, 65, 78, 68, 82, 193, 67, 65, 78, - 67, 69, 82, 128, 67, 65, 78, 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 65, - 78, 67, 69, 76, 128, 67, 65, 78, 67, 69, 204, 67, 65, 78, 128, 67, 65, - 77, 78, 85, 195, 67, 65, 77, 69, 82, 65, 128, 67, 65, 77, 69, 76, 128, - 67, 65, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, 76, 88, 128, 67, - 65, 76, 76, 128, 67, 65, 76, 69, 78, 68, 65, 82, 128, 67, 65, 76, 67, - 128, 67, 65, 75, 82, 65, 128, 67, 65, 75, 197, 67, 65, 73, 128, 67, 65, - 72, 128, 67, 65, 69, 83, 85, 82, 65, 128, 67, 65, 68, 85, 67, 69, 85, 83, - 128, 67, 65, 68, 193, 67, 65, 67, 84, 85, 83, 128, 67, 65, 66, 76, 69, - 87, 65, 89, 128, 67, 65, 66, 66, 65, 71, 69, 45, 84, 82, 69, 69, 128, 67, - 65, 65, 78, 71, 128, 67, 65, 65, 73, 128, 67, 193, 67, 48, 50, 52, 128, - 67, 48, 50, 51, 128, 67, 48, 50, 50, 128, 67, 48, 50, 49, 128, 67, 48, - 50, 48, 128, 67, 48, 49, 57, 128, 67, 48, 49, 56, 128, 67, 48, 49, 55, - 128, 67, 48, 49, 54, 128, 67, 48, 49, 53, 128, 67, 48, 49, 52, 128, 67, - 48, 49, 51, 128, 67, 48, 49, 50, 128, 67, 48, 49, 49, 128, 67, 48, 49, - 48, 65, 128, 67, 48, 49, 48, 128, 67, 48, 48, 57, 128, 67, 48, 48, 56, - 128, 67, 48, 48, 55, 128, 67, 48, 48, 54, 128, 67, 48, 48, 53, 128, 67, - 48, 48, 52, 128, 67, 48, 48, 51, 128, 67, 48, 48, 50, 67, 128, 67, 48, - 48, 50, 66, 128, 67, 48, 48, 50, 65, 128, 67, 48, 48, 50, 128, 67, 48, - 48, 49, 128, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 67, 45, 51, - 57, 128, 67, 45, 49, 56, 128, 66, 90, 85, 78, 199, 66, 90, 72, 201, 66, - 89, 84, 197, 66, 89, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75, - 82, 65, 73, 78, 73, 65, 206, 66, 88, 71, 128, 66, 87, 73, 128, 66, 87, - 69, 69, 128, 66, 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, 77, 73, 83, - 72, 128, 66, 85, 84, 84, 79, 78, 128, 66, 85, 212, 66, 85, 83, 84, 211, - 66, 85, 83, 212, 66, 85, 83, 83, 89, 69, 82, 85, 128, 66, 85, 211, 66, + 83, 84, 76, 69, 128, 67, 65, 83, 75, 69, 212, 67, 65, 82, 89, 83, 84, 73, + 65, 206, 67, 65, 82, 84, 82, 73, 68, 71, 69, 128, 67, 65, 82, 84, 128, + 67, 65, 82, 211, 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, 80, 69, 78, + 84, 82, 217, 67, 65, 82, 208, 67, 65, 82, 79, 85, 83, 69, 204, 67, 65, + 82, 79, 78, 128, 67, 65, 82, 79, 206, 67, 65, 82, 73, 203, 67, 65, 82, + 73, 65, 206, 67, 65, 82, 69, 84, 128, 67, 65, 82, 69, 212, 67, 65, 82, + 197, 67, 65, 82, 68, 83, 128, 67, 65, 82, 68, 128, 67, 65, 82, 128, 67, + 65, 210, 67, 65, 80, 85, 212, 67, 65, 80, 84, 73, 86, 69, 128, 67, 65, + 80, 82, 73, 67, 79, 82, 78, 128, 67, 65, 80, 80, 69, 196, 67, 65, 80, 79, + 128, 67, 65, 80, 73, 84, 85, 76, 85, 77, 128, 67, 65, 80, 73, 84, 65, 76, + 128, 67, 65, 78, 84, 73, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 199, + 67, 65, 78, 68, 89, 128, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 85, 128, + 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 213, 67, 65, 78, 68, 82, 65, 128, + 67, 65, 78, 68, 82, 193, 67, 65, 78, 68, 76, 69, 128, 67, 65, 78, 67, 69, + 82, 128, 67, 65, 78, 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 67, + 69, 76, 128, 67, 65, 78, 67, 69, 204, 67, 65, 78, 128, 67, 65, 77, 80, + 73, 78, 71, 128, 67, 65, 77, 78, 85, 195, 67, 65, 77, 69, 82, 65, 128, + 67, 65, 77, 69, 82, 193, 67, 65, 77, 69, 76, 128, 67, 65, 76, 89, 65, + 128, 67, 65, 76, 89, 193, 67, 65, 76, 88, 128, 67, 65, 76, 76, 128, 67, + 65, 76, 69, 78, 68, 65, 82, 128, 67, 65, 76, 69, 78, 68, 65, 210, 67, 65, + 76, 67, 85, 76, 65, 84, 79, 82, 128, 67, 65, 76, 67, 128, 67, 65, 75, 82, + 65, 128, 67, 65, 75, 197, 67, 65, 73, 128, 67, 65, 72, 128, 67, 65, 69, + 83, 85, 82, 65, 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, + 193, 67, 65, 67, 84, 85, 83, 128, 67, 65, 66, 76, 69, 87, 65, 89, 128, + 67, 65, 66, 73, 78, 69, 84, 128, 67, 65, 66, 66, 65, 71, 69, 45, 84, 82, + 69, 69, 128, 67, 65, 65, 78, 71, 128, 67, 65, 65, 73, 128, 67, 193, 67, + 48, 50, 52, 128, 67, 48, 50, 51, 128, 67, 48, 50, 50, 128, 67, 48, 50, + 49, 128, 67, 48, 50, 48, 128, 67, 48, 49, 57, 128, 67, 48, 49, 56, 128, + 67, 48, 49, 55, 128, 67, 48, 49, 54, 128, 67, 48, 49, 53, 128, 67, 48, + 49, 52, 128, 67, 48, 49, 51, 128, 67, 48, 49, 50, 128, 67, 48, 49, 49, + 128, 67, 48, 49, 48, 65, 128, 67, 48, 49, 48, 128, 67, 48, 48, 57, 128, + 67, 48, 48, 56, 128, 67, 48, 48, 55, 128, 67, 48, 48, 54, 128, 67, 48, + 48, 53, 128, 67, 48, 48, 52, 128, 67, 48, 48, 51, 128, 67, 48, 48, 50, + 67, 128, 67, 48, 48, 50, 66, 128, 67, 48, 48, 50, 65, 128, 67, 48, 48, + 50, 128, 67, 48, 48, 49, 128, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, + 196, 67, 45, 51, 57, 128, 67, 45, 49, 56, 128, 66, 90, 85, 78, 199, 66, + 90, 72, 201, 66, 89, 84, 197, 66, 89, 69, 76, 79, 82, 85, 83, 83, 73, 65, + 78, 45, 85, 75, 82, 65, 73, 78, 73, 65, 206, 66, 88, 71, 128, 66, 87, 73, + 128, 66, 87, 69, 69, 128, 66, 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, + 77, 73, 83, 72, 128, 66, 85, 84, 84, 79, 78, 128, 66, 85, 84, 84, 79, + 206, 66, 85, 212, 66, 85, 83, 84, 211, 66, 85, 83, 212, 66, 85, 83, 83, + 89, 69, 82, 85, 128, 66, 85, 83, 73, 78, 69, 83, 211, 66, 85, 211, 66, 85, 82, 213, 66, 85, 82, 50, 128, 66, 85, 210, 66, 85, 79, 88, 128, 66, 85, 79, 80, 128, 66, 85, 78, 78, 217, 66, 85, 78, 71, 128, 66, 85, 77, 80, 217, 66, 85, 76, 85, 71, 128, 66, 85, 76, 85, 199, 66, 85, 76, 76, - 83, 69, 89, 69, 128, 66, 85, 76, 76, 211, 66, 85, 76, 76, 69, 84, 128, - 66, 85, 76, 76, 69, 212, 66, 85, 76, 76, 128, 66, 85, 76, 66, 128, 66, - 85, 75, 89, 128, 66, 85, 73, 76, 68, 73, 78, 71, 83, 128, 66, 85, 73, 76, - 68, 73, 78, 71, 128, 66, 85, 72, 73, 196, 66, 85, 71, 73, 78, 69, 83, - 197, 66, 85, 71, 128, 66, 85, 70, 70, 65, 76, 79, 128, 66, 85, 67, 75, - 76, 69, 128, 66, 83, 84, 65, 82, 128, 66, 83, 75, 85, 210, 66, 83, 75, - 65, 173, 66, 83, 68, 85, 211, 66, 82, 85, 83, 72, 128, 66, 82, 85, 83, - 200, 66, 82, 79, 78, 90, 69, 128, 66, 82, 79, 75, 69, 206, 66, 82, 79, - 65, 196, 66, 82, 73, 83, 84, 76, 69, 128, 66, 82, 73, 71, 72, 84, 78, 69, - 83, 211, 66, 82, 73, 69, 70, 67, 65, 83, 69, 128, 66, 82, 73, 68, 71, - 197, 66, 82, 73, 68, 197, 66, 82, 73, 67, 75, 128, 66, 82, 69, 86, 73, - 83, 128, 66, 82, 69, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 66, 82, 69, - 86, 197, 66, 82, 69, 65, 84, 200, 66, 82, 69, 65, 75, 84, 72, 82, 79, 85, - 71, 72, 128, 66, 82, 69, 65, 68, 128, 66, 82, 68, 193, 66, 82, 65, 78, - 67, 72, 73, 78, 199, 66, 82, 65, 78, 67, 72, 128, 66, 82, 65, 78, 67, + 83, 69, 89, 69, 128, 66, 85, 76, 76, 211, 66, 85, 76, 76, 72, 79, 82, 78, + 128, 66, 85, 76, 76, 72, 79, 82, 206, 66, 85, 76, 76, 69, 84, 128, 66, + 85, 76, 76, 69, 212, 66, 85, 76, 76, 128, 66, 85, 76, 66, 128, 66, 85, + 75, 89, 128, 66, 85, 73, 76, 68, 73, 78, 71, 83, 128, 66, 85, 73, 76, 68, + 73, 78, 71, 128, 66, 85, 73, 76, 68, 73, 78, 199, 66, 85, 72, 73, 196, + 66, 85, 71, 73, 78, 69, 83, 197, 66, 85, 71, 128, 66, 85, 70, 70, 65, 76, + 79, 128, 66, 85, 68, 128, 66, 85, 67, 75, 76, 69, 128, 66, 85, 66, 66, + 76, 69, 83, 128, 66, 85, 66, 66, 76, 69, 128, 66, 83, 84, 65, 82, 128, + 66, 83, 75, 85, 210, 66, 83, 75, 65, 173, 66, 83, 68, 85, 211, 66, 82, + 85, 83, 200, 66, 82, 79, 78, 90, 69, 128, 66, 82, 79, 75, 69, 206, 66, + 82, 79, 65, 196, 66, 82, 73, 83, 84, 76, 69, 128, 66, 82, 73, 71, 72, 84, + 78, 69, 83, 211, 66, 82, 73, 69, 70, 67, 65, 83, 69, 128, 66, 82, 73, 68, + 71, 197, 66, 82, 73, 68, 197, 66, 82, 73, 67, 75, 128, 66, 82, 69, 86, + 73, 83, 128, 66, 82, 69, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 66, 82, + 69, 86, 197, 66, 82, 69, 65, 84, 200, 66, 82, 69, 65, 75, 84, 72, 82, 79, + 85, 71, 72, 128, 66, 82, 69, 65, 68, 128, 66, 82, 68, 193, 66, 82, 65, + 78, 67, 72, 73, 78, 199, 66, 82, 65, 78, 67, 72, 128, 66, 82, 65, 78, 67, 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, 84, 69, 196, 66, 82, 65, 67, 75, 69, 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, - 66, 80, 72, 128, 66, 79, 89, 128, 66, 79, 87, 84, 73, 69, 128, 66, 79, - 87, 84, 73, 197, 66, 79, 87, 76, 73, 78, 71, 128, 66, 79, 87, 76, 128, - 66, 79, 87, 73, 78, 199, 66, 79, 215, 66, 79, 85, 81, 85, 69, 84, 128, - 66, 79, 85, 78, 68, 65, 82, 217, 66, 79, 84, 84, 79, 77, 45, 76, 73, 71, - 72, 84, 69, 196, 66, 79, 84, 84, 79, 77, 128, 66, 79, 84, 84, 79, 205, - 66, 79, 84, 84, 76, 69, 128, 66, 79, 84, 84, 76, 197, 66, 79, 84, 200, - 66, 79, 82, 85, 84, 79, 128, 66, 79, 82, 65, 88, 45, 51, 128, 66, 79, 82, - 65, 88, 45, 50, 128, 66, 79, 82, 65, 88, 128, 66, 79, 80, 79, 77, 79, 70, - 207, 66, 79, 79, 84, 83, 128, 66, 79, 79, 84, 128, 66, 79, 79, 77, 69, - 82, 65, 78, 71, 128, 66, 79, 79, 75, 83, 128, 66, 79, 79, 75, 77, 65, 82, - 75, 128, 66, 79, 79, 75, 77, 65, 82, 203, 66, 79, 78, 69, 128, 66, 79, - 77, 66, 128, 66, 79, 77, 128, 66, 79, 76, 84, 128, 66, 79, 76, 212, 66, - 79, 72, 65, 73, 82, 73, 195, 66, 79, 68, 89, 128, 66, 79, 65, 82, 128, - 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 85, 197, 66, 76, 79, 87, - 70, 73, 83, 72, 128, 66, 76, 79, 83, 83, 79, 77, 128, 66, 76, 79, 79, 68, - 128, 66, 76, 79, 78, 196, 66, 76, 79, 67, 75, 128, 66, 76, 69, 78, 68, - 69, 196, 66, 76, 65, 78, 75, 128, 66, 76, 65, 78, 203, 66, 76, 65, 68, - 197, 66, 76, 65, 67, 75, 70, 79, 79, 212, 66, 76, 65, 67, 75, 45, 76, 69, - 84, 84, 69, 210, 66, 76, 65, 67, 75, 45, 70, 69, 65, 84, 72, 69, 82, 69, - 196, 66, 76, 65, 67, 75, 128, 66, 75, 65, 173, 66, 73, 84, 84, 69, 82, - 128, 66, 73, 84, 73, 78, 199, 66, 73, 83, 77, 85, 84, 200, 66, 73, 83, - 77, 73, 76, 76, 65, 200, 66, 73, 83, 72, 79, 80, 128, 66, 73, 83, 69, 67, - 84, 73, 78, 199, 66, 73, 83, 65, 72, 128, 66, 73, 82, 85, 128, 66, 73, - 82, 84, 72, 68, 65, 217, 66, 73, 82, 71, 65, 128, 66, 73, 82, 68, 128, - 66, 73, 79, 72, 65, 90, 65, 82, 196, 66, 73, 78, 79, 67, 85, 76, 65, 210, - 66, 73, 78, 68, 73, 78, 199, 66, 73, 78, 68, 73, 128, 66, 73, 78, 65, 82, - 217, 66, 73, 76, 76, 73, 65, 82, 68, 83, 128, 66, 73, 76, 65, 66, 73, 65, - 204, 66, 73, 75, 73, 78, 73, 128, 66, 73, 71, 128, 66, 73, 199, 66, 73, - 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 66, 73, 68, 65, 75, 85, 79, + 66, 80, 72, 128, 66, 79, 89, 211, 66, 79, 89, 128, 66, 79, 87, 84, 73, + 69, 128, 66, 79, 87, 84, 73, 197, 66, 79, 87, 76, 73, 78, 71, 128, 66, + 79, 87, 76, 128, 66, 79, 87, 73, 78, 199, 66, 79, 215, 66, 79, 85, 81, + 85, 69, 84, 128, 66, 79, 85, 81, 85, 69, 212, 66, 79, 85, 78, 68, 65, 82, + 217, 66, 79, 84, 84, 79, 77, 45, 83, 72, 65, 68, 69, 196, 66, 79, 84, 84, + 79, 77, 45, 76, 73, 71, 72, 84, 69, 196, 66, 79, 84, 84, 79, 77, 128, 66, + 79, 84, 84, 79, 205, 66, 79, 84, 84, 76, 69, 128, 66, 79, 84, 84, 76, + 197, 66, 79, 84, 200, 66, 79, 82, 85, 84, 79, 128, 66, 79, 82, 65, 88, + 45, 51, 128, 66, 79, 82, 65, 88, 45, 50, 128, 66, 79, 82, 65, 88, 128, + 66, 79, 80, 79, 77, 79, 70, 207, 66, 79, 79, 84, 83, 128, 66, 79, 79, 84, + 128, 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 66, 79, 79, 75, 83, 128, + 66, 79, 79, 75, 77, 65, 82, 75, 128, 66, 79, 79, 75, 77, 65, 82, 203, 66, + 79, 78, 69, 128, 66, 79, 77, 66, 128, 66, 79, 77, 128, 66, 79, 76, 84, + 128, 66, 79, 76, 212, 66, 79, 72, 65, 73, 82, 73, 195, 66, 79, 68, 89, + 128, 66, 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, + 85, 197, 66, 76, 79, 87, 73, 78, 199, 66, 76, 79, 87, 70, 73, 83, 72, + 128, 66, 76, 79, 83, 83, 79, 77, 128, 66, 76, 79, 79, 68, 128, 66, 76, + 79, 78, 196, 66, 76, 79, 67, 75, 128, 66, 76, 69, 78, 68, 69, 196, 66, + 76, 65, 78, 75, 128, 66, 76, 65, 78, 203, 66, 76, 65, 68, 197, 66, 76, + 65, 67, 75, 76, 69, 84, 84, 69, 210, 66, 76, 65, 67, 75, 70, 79, 79, 212, + 66, 76, 65, 67, 75, 45, 76, 69, 84, 84, 69, 210, 66, 76, 65, 67, 75, 45, + 70, 69, 65, 84, 72, 69, 82, 69, 196, 66, 76, 65, 67, 75, 128, 66, 75, 65, + 173, 66, 73, 84, 84, 69, 82, 128, 66, 73, 84, 73, 78, 199, 66, 73, 83, + 77, 85, 84, 200, 66, 73, 83, 77, 73, 76, 76, 65, 200, 66, 73, 83, 72, 79, + 80, 128, 66, 73, 83, 69, 67, 84, 73, 78, 199, 66, 73, 83, 65, 72, 128, + 66, 73, 82, 85, 128, 66, 73, 82, 84, 72, 68, 65, 217, 66, 73, 82, 71, 65, + 128, 66, 73, 82, 68, 128, 66, 73, 79, 72, 65, 90, 65, 82, 196, 66, 73, + 78, 79, 67, 85, 76, 65, 210, 66, 73, 78, 68, 73, 78, 199, 66, 73, 78, 68, + 73, 128, 66, 73, 78, 65, 82, 217, 66, 73, 76, 76, 73, 79, 78, 83, 128, + 66, 73, 76, 76, 73, 65, 82, 68, 83, 128, 66, 73, 76, 65, 66, 73, 65, 204, + 66, 73, 75, 73, 78, 73, 128, 66, 73, 71, 128, 66, 73, 199, 66, 73, 69, + 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 66, 73, 68, 65, 75, 85, 79, 206, 66, 73, 67, 89, 67, 76, 73, 83, 84, 128, 66, 73, 67, 89, 67, 76, 69, 83, 128, 66, 73, 67, 89, 67, 76, 69, 128, 66, 73, 67, 69, 80, 83, 128, 66, 73, 66, 76, 69, 45, 67, 82, 69, 197, 66, 73, 66, 128, 66, 201, 66, @@ -4351,15487 +4581,17201 @@ static unsigned char lexicon[] = { 84, 87, 69, 69, 206, 66, 69, 84, 72, 128, 66, 69, 84, 65, 128, 66, 69, 84, 193, 66, 69, 212, 66, 69, 83, 73, 68, 197, 66, 69, 82, 75, 65, 78, 65, 206, 66, 69, 82, 66, 69, 210, 66, 69, 80, 128, 66, 69, 79, 82, 195, - 66, 69, 78, 90, 69, 78, 197, 66, 69, 78, 84, 207, 66, 69, 78, 68, 69, - 128, 66, 69, 78, 68, 128, 66, 69, 206, 66, 69, 76, 84, 128, 66, 69, 76, - 212, 66, 69, 76, 79, 215, 66, 69, 76, 76, 128, 66, 69, 76, 204, 66, 69, - 76, 71, 84, 72, 79, 210, 66, 69, 76, 128, 66, 69, 73, 84, 72, 128, 66, - 69, 72, 73, 78, 196, 66, 69, 72, 69, 72, 128, 66, 69, 72, 69, 200, 66, - 69, 72, 128, 66, 69, 200, 66, 69, 71, 73, 78, 78, 73, 78, 71, 128, 66, - 69, 71, 73, 78, 78, 69, 82, 128, 66, 69, 71, 73, 206, 66, 69, 70, 79, 82, - 197, 66, 69, 69, 84, 76, 69, 128, 66, 69, 69, 84, 65, 128, 66, 69, 69, - 210, 66, 69, 69, 72, 73, 86, 69, 128, 66, 69, 69, 72, 128, 66, 69, 69, - 200, 66, 69, 67, 65, 85, 83, 69, 128, 66, 69, 65, 86, 69, 210, 66, 69, - 65, 84, 73, 78, 199, 66, 69, 65, 84, 128, 66, 69, 65, 210, 66, 69, 65, - 78, 128, 66, 69, 65, 77, 69, 196, 66, 67, 65, 68, 128, 66, 67, 65, 196, - 66, 66, 89, 88, 128, 66, 66, 89, 84, 128, 66, 66, 89, 80, 128, 66, 66, - 89, 128, 66, 66, 85, 88, 128, 66, 66, 85, 84, 128, 66, 66, 85, 82, 88, - 128, 66, 66, 85, 82, 128, 66, 66, 85, 80, 128, 66, 66, 85, 79, 88, 128, - 66, 66, 85, 79, 80, 128, 66, 66, 85, 79, 128, 66, 66, 85, 128, 66, 66, - 79, 88, 128, 66, 66, 79, 84, 128, 66, 66, 79, 80, 128, 66, 66, 79, 128, - 66, 66, 73, 88, 128, 66, 66, 73, 80, 128, 66, 66, 73, 69, 88, 128, 66, - 66, 73, 69, 84, 128, 66, 66, 73, 69, 80, 128, 66, 66, 73, 69, 128, 66, - 66, 73, 128, 66, 66, 69, 88, 128, 66, 66, 69, 80, 128, 66, 66, 69, 69, - 128, 66, 66, 69, 128, 66, 66, 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, - 65, 80, 128, 66, 66, 65, 65, 128, 66, 66, 65, 128, 66, 65, 89, 65, 78, - 78, 65, 128, 66, 65, 85, 128, 66, 65, 84, 84, 69, 82, 89, 128, 66, 65, - 84, 72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, - 65, 84, 72, 128, 66, 65, 84, 200, 66, 65, 84, 65, 203, 66, 65, 83, 83, - 65, 128, 66, 65, 83, 75, 69, 84, 66, 65, 76, 204, 66, 65, 83, 72, 75, 73, - 210, 66, 65, 83, 72, 128, 66, 65, 83, 69, 66, 65, 76, 76, 128, 66, 65, - 83, 69, 128, 66, 65, 83, 197, 66, 65, 82, 83, 128, 66, 65, 82, 82, 73, - 69, 82, 128, 66, 65, 82, 82, 69, 75, 72, 128, 66, 65, 82, 82, 69, 69, - 128, 66, 65, 82, 82, 69, 197, 66, 65, 82, 76, 73, 78, 69, 128, 66, 65, - 82, 76, 69, 89, 128, 66, 65, 82, 73, 89, 79, 79, 83, 65, 78, 128, 66, 65, - 82, 66, 69, 210, 66, 65, 82, 194, 66, 65, 82, 65, 50, 128, 66, 65, 210, - 66, 65, 78, 84, 79, 67, 128, 66, 65, 78, 75, 78, 79, 84, 197, 66, 65, 78, - 75, 128, 66, 65, 78, 203, 66, 65, 78, 68, 128, 66, 65, 78, 65, 78, 65, - 128, 66, 65, 78, 50, 128, 66, 65, 78, 178, 66, 65, 77, 66, 79, 79, 83, - 128, 66, 65, 77, 66, 79, 79, 128, 66, 65, 76, 85, 68, 65, 128, 66, 65, - 76, 76, 79, 212, 66, 65, 76, 76, 79, 79, 78, 45, 83, 80, 79, 75, 69, 196, - 66, 65, 76, 76, 79, 79, 78, 128, 66, 65, 76, 65, 71, 128, 66, 65, 76, - 128, 66, 65, 204, 66, 65, 73, 82, 75, 65, 78, 128, 66, 65, 73, 77, 65, - 73, 128, 66, 65, 72, 84, 128, 66, 65, 72, 73, 82, 71, 79, 77, 85, 75, 72, - 65, 128, 66, 65, 72, 65, 82, 50, 128, 66, 65, 72, 128, 66, 65, 71, 71, - 65, 71, 197, 66, 65, 71, 65, 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, - 65, 68, 71, 69, 82, 128, 66, 65, 68, 71, 69, 128, 66, 65, 68, 128, 66, - 65, 67, 84, 82, 73, 65, 206, 66, 65, 67, 75, 87, 65, 82, 68, 128, 66, 65, - 67, 75, 83, 80, 65, 67, 69, 128, 66, 65, 67, 75, 83, 76, 65, 83, 72, 128, - 66, 65, 67, 75, 83, 76, 65, 83, 200, 66, 65, 67, 75, 72, 65, 78, 196, 66, - 65, 67, 75, 45, 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, - 203, 66, 65, 66, 89, 128, 66, 65, 66, 217, 66, 65, 65, 82, 69, 82, 85, - 128, 66, 65, 45, 50, 128, 66, 51, 48, 53, 128, 66, 50, 53, 57, 128, 66, - 50, 53, 56, 128, 66, 50, 53, 55, 128, 66, 50, 53, 54, 128, 66, 50, 53, - 53, 128, 66, 50, 53, 180, 66, 50, 53, 51, 128, 66, 50, 53, 50, 128, 66, - 50, 53, 49, 128, 66, 50, 53, 48, 128, 66, 50, 52, 57, 128, 66, 50, 52, - 56, 128, 66, 50, 52, 183, 66, 50, 52, 54, 128, 66, 50, 52, 53, 128, 66, - 50, 52, 179, 66, 50, 52, 178, 66, 50, 52, 177, 66, 50, 52, 176, 66, 50, - 51, 54, 128, 66, 50, 51, 52, 128, 66, 50, 51, 179, 66, 50, 51, 50, 128, - 66, 50, 51, 177, 66, 50, 51, 176, 66, 50, 50, 57, 128, 66, 50, 50, 56, - 128, 66, 50, 50, 55, 128, 66, 50, 50, 54, 128, 66, 50, 50, 181, 66, 50, - 50, 50, 128, 66, 50, 50, 49, 128, 66, 50, 50, 176, 66, 50, 49, 57, 128, - 66, 50, 49, 56, 128, 66, 50, 49, 55, 128, 66, 50, 49, 54, 128, 66, 50, - 49, 53, 128, 66, 50, 49, 52, 128, 66, 50, 49, 51, 128, 66, 50, 49, 50, - 128, 66, 50, 49, 49, 128, 66, 50, 49, 48, 128, 66, 50, 48, 57, 128, 66, - 50, 48, 56, 128, 66, 50, 48, 55, 128, 66, 50, 48, 54, 128, 66, 50, 48, - 53, 128, 66, 50, 48, 52, 128, 66, 50, 48, 51, 128, 66, 50, 48, 50, 128, - 66, 50, 48, 49, 128, 66, 50, 48, 48, 128, 66, 49, 57, 177, 66, 49, 57, - 48, 128, 66, 49, 56, 57, 128, 66, 49, 56, 53, 128, 66, 49, 56, 52, 128, - 66, 49, 56, 51, 128, 66, 49, 56, 50, 128, 66, 49, 56, 49, 128, 66, 49, - 56, 48, 128, 66, 49, 55, 57, 128, 66, 49, 55, 56, 128, 66, 49, 55, 55, - 128, 66, 49, 55, 182, 66, 49, 55, 52, 128, 66, 49, 55, 179, 66, 49, 55, - 50, 128, 66, 49, 55, 49, 128, 66, 49, 55, 48, 128, 66, 49, 54, 57, 128, - 66, 49, 54, 56, 128, 66, 49, 54, 55, 128, 66, 49, 54, 54, 128, 66, 49, - 54, 53, 128, 66, 49, 54, 52, 128, 66, 49, 54, 179, 66, 49, 54, 178, 66, - 49, 54, 49, 128, 66, 49, 54, 48, 128, 66, 49, 53, 185, 66, 49, 53, 56, - 128, 66, 49, 53, 55, 128, 66, 49, 53, 182, 66, 49, 53, 53, 128, 66, 49, - 53, 52, 128, 66, 49, 53, 51, 128, 66, 49, 53, 50, 128, 66, 49, 53, 177, - 66, 49, 53, 48, 128, 66, 49, 52, 54, 128, 66, 49, 52, 181, 66, 49, 52, - 50, 128, 66, 49, 52, 177, 66, 49, 52, 176, 66, 49, 51, 181, 66, 49, 51, - 179, 66, 49, 51, 50, 128, 66, 49, 51, 177, 66, 49, 51, 176, 66, 49, 50, - 184, 66, 49, 50, 183, 66, 49, 50, 181, 66, 49, 50, 179, 66, 49, 50, 178, - 66, 49, 50, 177, 66, 49, 50, 176, 66, 49, 48, 57, 205, 66, 49, 48, 57, - 198, 66, 49, 48, 56, 205, 66, 49, 48, 56, 198, 66, 49, 48, 55, 205, 66, - 49, 48, 55, 198, 66, 49, 48, 54, 205, 66, 49, 48, 54, 198, 66, 49, 48, - 53, 205, 66, 49, 48, 53, 198, 66, 49, 48, 181, 66, 49, 48, 180, 66, 49, - 48, 178, 66, 49, 48, 176, 66, 48, 57, 177, 66, 48, 57, 176, 66, 48, 56, - 57, 128, 66, 48, 56, 183, 66, 48, 56, 54, 128, 66, 48, 56, 181, 66, 48, - 56, 51, 128, 66, 48, 56, 50, 128, 66, 48, 56, 177, 66, 48, 56, 176, 66, - 48, 55, 57, 128, 66, 48, 55, 184, 66, 48, 55, 183, 66, 48, 55, 182, 66, - 48, 55, 181, 66, 48, 55, 180, 66, 48, 55, 179, 66, 48, 55, 178, 66, 48, - 55, 177, 66, 48, 55, 176, 66, 48, 54, 185, 66, 48, 54, 184, 66, 48, 54, - 183, 66, 48, 54, 182, 66, 48, 54, 181, 66, 48, 54, 52, 128, 66, 48, 54, - 51, 128, 66, 48, 54, 178, 66, 48, 54, 177, 66, 48, 54, 176, 66, 48, 53, - 185, 66, 48, 53, 184, 66, 48, 53, 183, 66, 48, 53, 54, 128, 66, 48, 53, - 181, 66, 48, 53, 180, 66, 48, 53, 179, 66, 48, 53, 178, 66, 48, 53, 177, - 66, 48, 53, 176, 66, 48, 52, 57, 128, 66, 48, 52, 184, 66, 48, 52, 55, - 128, 66, 48, 52, 182, 66, 48, 52, 181, 66, 48, 52, 180, 66, 48, 52, 179, - 66, 48, 52, 178, 66, 48, 52, 177, 66, 48, 52, 176, 66, 48, 51, 185, 66, - 48, 51, 184, 66, 48, 51, 183, 66, 48, 51, 182, 66, 48, 51, 52, 128, 66, - 48, 51, 179, 66, 48, 51, 178, 66, 48, 51, 177, 66, 48, 51, 176, 66, 48, - 50, 185, 66, 48, 50, 184, 66, 48, 50, 183, 66, 48, 50, 182, 66, 48, 50, - 181, 66, 48, 50, 180, 66, 48, 50, 179, 66, 48, 50, 50, 128, 66, 48, 50, - 177, 66, 48, 50, 176, 66, 48, 49, 57, 128, 66, 48, 49, 56, 128, 66, 48, - 49, 183, 66, 48, 49, 182, 66, 48, 49, 181, 66, 48, 49, 180, 66, 48, 49, - 179, 66, 48, 49, 178, 66, 48, 49, 177, 66, 48, 49, 176, 66, 48, 48, 57, - 128, 66, 48, 48, 185, 66, 48, 48, 56, 128, 66, 48, 48, 184, 66, 48, 48, - 55, 128, 66, 48, 48, 183, 66, 48, 48, 54, 128, 66, 48, 48, 182, 66, 48, - 48, 53, 65, 128, 66, 48, 48, 53, 128, 66, 48, 48, 181, 66, 48, 48, 52, - 128, 66, 48, 48, 180, 66, 48, 48, 51, 128, 66, 48, 48, 179, 66, 48, 48, - 50, 128, 66, 48, 48, 178, 66, 48, 48, 49, 128, 66, 48, 48, 177, 65, 90, - 85, 128, 65, 89, 69, 210, 65, 89, 66, 128, 65, 89, 65, 72, 128, 65, 88, - 69, 128, 65, 87, 69, 128, 65, 86, 69, 83, 84, 65, 206, 65, 86, 69, 82, - 65, 71, 197, 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89, 65, 128, 65, - 86, 65, 71, 82, 65, 72, 65, 128, 65, 85, 89, 65, 78, 78, 65, 128, 65, 85, - 84, 85, 77, 78, 128, 65, 85, 84, 79, 77, 79, 66, 73, 76, 69, 128, 65, 85, - 84, 79, 77, 65, 84, 69, 196, 65, 85, 83, 84, 82, 65, 204, 65, 85, 82, 73, - 80, 73, 71, 77, 69, 78, 84, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, - 72, 65, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 45, 50, 128, 65, 85, - 82, 65, 77, 65, 90, 68, 65, 65, 128, 65, 85, 78, 78, 128, 65, 85, 71, 85, - 83, 84, 128, 65, 85, 71, 77, 69, 78, 84, 65, 84, 73, 79, 206, 65, 85, 69, - 128, 65, 85, 66, 69, 82, 71, 73, 78, 69, 128, 65, 84, 84, 73, 195, 65, - 84, 84, 72, 65, 67, 65, 78, 128, 65, 84, 84, 69, 78, 84, 73, 79, 78, 128, - 65, 84, 84, 65, 203, 65, 84, 79, 205, 65, 84, 78, 65, 200, 65, 84, 77, - 65, 65, 85, 128, 65, 84, 73, 89, 65, 128, 65, 84, 72, 76, 69, 84, 73, - 195, 65, 84, 72, 65, 82, 86, 65, 86, 69, 68, 73, 195, 65, 84, 72, 65, 80, - 65, 83, 67, 65, 206, 65, 83, 90, 128, 65, 83, 89, 85, 82, 193, 65, 83, - 89, 77, 80, 84, 79, 84, 73, 67, 65, 76, 76, 217, 65, 83, 84, 82, 79, 78, - 79, 77, 73, 67, 65, 204, 65, 83, 84, 82, 79, 76, 79, 71, 73, 67, 65, 204, - 65, 83, 84, 79, 78, 73, 83, 72, 69, 196, 65, 83, 84, 69, 82, 73, 83, 77, - 128, 65, 83, 84, 69, 82, 73, 83, 75, 211, 65, 83, 84, 69, 82, 73, 83, 75, - 128, 65, 83, 84, 69, 82, 73, 83, 203, 65, 83, 84, 69, 82, 73, 83, 67, 85, - 83, 128, 65, 83, 83, 89, 82, 73, 65, 206, 65, 83, 83, 69, 82, 84, 73, 79, - 78, 128, 65, 83, 80, 73, 82, 65, 84, 73, 79, 78, 128, 65, 83, 80, 73, 82, - 65, 84, 69, 196, 65, 83, 80, 69, 82, 128, 65, 83, 73, 65, 45, 65, 85, 83, - 84, 82, 65, 76, 73, 65, 128, 65, 83, 72, 71, 65, 66, 128, 65, 83, 72, 69, - 83, 128, 65, 83, 72, 57, 128, 65, 83, 72, 178, 65, 83, 67, 69, 78, 84, + 66, 69, 78, 90, 69, 78, 197, 66, 69, 78, 84, 207, 66, 69, 78, 212, 66, + 69, 78, 68, 69, 128, 66, 69, 78, 68, 128, 66, 69, 206, 66, 69, 76, 84, + 128, 66, 69, 76, 212, 66, 69, 76, 79, 215, 66, 69, 76, 76, 72, 79, 208, + 66, 69, 76, 76, 128, 66, 69, 76, 204, 66, 69, 76, 71, 84, 72, 79, 210, + 66, 69, 73, 84, 72, 128, 66, 69, 72, 73, 78, 196, 66, 69, 72, 69, 72, + 128, 66, 69, 72, 69, 200, 66, 69, 72, 128, 66, 69, 200, 66, 69, 71, 73, + 78, 78, 73, 78, 71, 128, 66, 69, 71, 73, 78, 78, 69, 82, 128, 66, 69, 71, + 73, 206, 66, 69, 70, 79, 82, 197, 66, 69, 69, 84, 76, 69, 128, 66, 69, + 69, 84, 65, 128, 66, 69, 69, 210, 66, 69, 69, 72, 73, 86, 69, 128, 66, + 69, 69, 72, 128, 66, 69, 69, 200, 66, 69, 67, 65, 85, 83, 69, 128, 66, + 69, 65, 86, 69, 210, 66, 69, 65, 84, 73, 78, 199, 66, 69, 65, 84, 128, + 66, 69, 65, 210, 66, 69, 65, 78, 128, 66, 69, 65, 77, 69, 196, 66, 69, + 65, 67, 200, 66, 67, 65, 68, 128, 66, 67, 65, 196, 66, 66, 89, 88, 128, + 66, 66, 89, 84, 128, 66, 66, 89, 80, 128, 66, 66, 89, 128, 66, 66, 85, + 88, 128, 66, 66, 85, 84, 128, 66, 66, 85, 82, 88, 128, 66, 66, 85, 82, + 128, 66, 66, 85, 80, 128, 66, 66, 85, 79, 88, 128, 66, 66, 85, 79, 80, + 128, 66, 66, 85, 79, 128, 66, 66, 85, 128, 66, 66, 79, 88, 128, 66, 66, + 79, 84, 128, 66, 66, 79, 80, 128, 66, 66, 79, 128, 66, 66, 73, 88, 128, + 66, 66, 73, 80, 128, 66, 66, 73, 69, 88, 128, 66, 66, 73, 69, 84, 128, + 66, 66, 73, 69, 80, 128, 66, 66, 73, 69, 128, 66, 66, 73, 128, 66, 66, + 69, 88, 128, 66, 66, 69, 80, 128, 66, 66, 69, 69, 128, 66, 66, 69, 128, + 66, 66, 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, + 65, 65, 128, 66, 66, 65, 128, 66, 65, 89, 65, 78, 78, 65, 128, 66, 65, + 85, 128, 66, 65, 84, 84, 69, 82, 89, 128, 66, 65, 84, 72, 84, 85, 66, + 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65, 84, 72, 128, + 66, 65, 84, 200, 66, 65, 84, 65, 203, 66, 65, 83, 83, 65, 128, 66, 65, + 83, 83, 193, 66, 65, 83, 75, 69, 84, 66, 65, 76, 204, 66, 65, 83, 72, 75, + 73, 210, 66, 65, 83, 72, 128, 66, 65, 83, 69, 76, 73, 78, 197, 66, 65, + 83, 69, 66, 65, 76, 76, 128, 66, 65, 83, 69, 128, 66, 65, 83, 197, 66, + 65, 82, 83, 128, 66, 65, 82, 82, 73, 69, 82, 128, 66, 65, 82, 82, 69, 75, + 72, 128, 66, 65, 82, 82, 69, 69, 128, 66, 65, 82, 82, 69, 197, 66, 65, + 82, 76, 73, 78, 69, 128, 66, 65, 82, 76, 69, 89, 128, 66, 65, 82, 73, 89, + 79, 79, 83, 65, 78, 128, 66, 65, 82, 66, 69, 210, 66, 65, 82, 65, 50, + 128, 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, 65, 78, 75, 78, 79, + 84, 197, 66, 65, 78, 75, 128, 66, 65, 78, 203, 66, 65, 78, 68, 128, 66, + 65, 78, 65, 78, 65, 128, 66, 65, 78, 50, 128, 66, 65, 78, 178, 66, 65, + 77, 66, 79, 79, 83, 128, 66, 65, 77, 66, 79, 79, 128, 66, 65, 76, 85, 68, + 65, 128, 66, 65, 76, 76, 80, 79, 73, 78, 212, 66, 65, 76, 76, 79, 84, + 128, 66, 65, 76, 76, 79, 212, 66, 65, 76, 76, 79, 79, 78, 45, 83, 80, 79, + 75, 69, 196, 66, 65, 76, 76, 79, 79, 78, 128, 66, 65, 76, 65, 71, 128, + 66, 65, 76, 128, 66, 65, 204, 66, 65, 73, 82, 75, 65, 78, 128, 66, 65, + 73, 77, 65, 73, 128, 66, 65, 72, 84, 128, 66, 65, 72, 73, 82, 71, 79, 77, + 85, 75, 72, 65, 128, 66, 65, 72, 65, 82, 50, 128, 66, 65, 72, 128, 66, + 65, 71, 83, 128, 66, 65, 71, 71, 65, 71, 197, 66, 65, 71, 65, 128, 66, + 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, 65, 68, + 71, 69, 128, 66, 65, 68, 128, 66, 65, 67, 84, 82, 73, 65, 206, 66, 65, + 67, 75, 87, 65, 82, 68, 128, 66, 65, 67, 75, 83, 80, 65, 67, 69, 128, 66, + 65, 67, 75, 83, 76, 65, 83, 72, 128, 66, 65, 67, 75, 83, 76, 65, 83, 200, + 66, 65, 67, 75, 83, 76, 65, 78, 84, 69, 196, 66, 65, 67, 75, 72, 65, 78, + 196, 66, 65, 67, 75, 45, 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, + 66, 65, 67, 203, 66, 65, 66, 89, 128, 66, 65, 66, 217, 66, 65, 65, 82, + 69, 82, 85, 128, 66, 65, 45, 50, 128, 66, 51, 48, 53, 128, 66, 50, 53, + 57, 128, 66, 50, 53, 56, 128, 66, 50, 53, 55, 128, 66, 50, 53, 54, 128, + 66, 50, 53, 53, 128, 66, 50, 53, 180, 66, 50, 53, 51, 128, 66, 50, 53, + 50, 128, 66, 50, 53, 49, 128, 66, 50, 53, 48, 128, 66, 50, 52, 57, 128, + 66, 50, 52, 56, 128, 66, 50, 52, 183, 66, 50, 52, 54, 128, 66, 50, 52, + 53, 128, 66, 50, 52, 179, 66, 50, 52, 178, 66, 50, 52, 177, 66, 50, 52, + 176, 66, 50, 51, 54, 128, 66, 50, 51, 52, 128, 66, 50, 51, 179, 66, 50, + 51, 50, 128, 66, 50, 51, 177, 66, 50, 51, 176, 66, 50, 50, 57, 128, 66, + 50, 50, 56, 128, 66, 50, 50, 55, 128, 66, 50, 50, 54, 128, 66, 50, 50, + 181, 66, 50, 50, 50, 128, 66, 50, 50, 49, 128, 66, 50, 50, 176, 66, 50, + 49, 57, 128, 66, 50, 49, 56, 128, 66, 50, 49, 55, 128, 66, 50, 49, 54, + 128, 66, 50, 49, 53, 128, 66, 50, 49, 52, 128, 66, 50, 49, 51, 128, 66, + 50, 49, 50, 128, 66, 50, 49, 49, 128, 66, 50, 49, 48, 128, 66, 50, 48, + 57, 128, 66, 50, 48, 56, 128, 66, 50, 48, 55, 128, 66, 50, 48, 54, 128, + 66, 50, 48, 53, 128, 66, 50, 48, 52, 128, 66, 50, 48, 51, 128, 66, 50, + 48, 50, 128, 66, 50, 48, 49, 128, 66, 50, 48, 48, 128, 66, 49, 57, 177, + 66, 49, 57, 48, 128, 66, 49, 56, 57, 128, 66, 49, 56, 53, 128, 66, 49, + 56, 52, 128, 66, 49, 56, 51, 128, 66, 49, 56, 50, 128, 66, 49, 56, 49, + 128, 66, 49, 56, 48, 128, 66, 49, 55, 57, 128, 66, 49, 55, 56, 128, 66, + 49, 55, 55, 128, 66, 49, 55, 182, 66, 49, 55, 52, 128, 66, 49, 55, 179, + 66, 49, 55, 50, 128, 66, 49, 55, 49, 128, 66, 49, 55, 48, 128, 66, 49, + 54, 57, 128, 66, 49, 54, 56, 128, 66, 49, 54, 55, 128, 66, 49, 54, 54, + 128, 66, 49, 54, 53, 128, 66, 49, 54, 52, 128, 66, 49, 54, 179, 66, 49, + 54, 178, 66, 49, 54, 49, 128, 66, 49, 54, 48, 128, 66, 49, 53, 185, 66, + 49, 53, 56, 128, 66, 49, 53, 55, 128, 66, 49, 53, 182, 66, 49, 53, 53, + 128, 66, 49, 53, 52, 128, 66, 49, 53, 51, 128, 66, 49, 53, 50, 128, 66, + 49, 53, 177, 66, 49, 53, 48, 128, 66, 49, 52, 54, 128, 66, 49, 52, 181, + 66, 49, 52, 50, 128, 66, 49, 52, 177, 66, 49, 52, 176, 66, 49, 51, 181, + 66, 49, 51, 179, 66, 49, 51, 50, 128, 66, 49, 51, 177, 66, 49, 51, 176, + 66, 49, 50, 184, 66, 49, 50, 183, 66, 49, 50, 181, 66, 49, 50, 179, 66, + 49, 50, 178, 66, 49, 50, 177, 66, 49, 50, 176, 66, 49, 48, 57, 205, 66, + 49, 48, 57, 198, 66, 49, 48, 56, 205, 66, 49, 48, 56, 198, 66, 49, 48, + 55, 205, 66, 49, 48, 55, 198, 66, 49, 48, 54, 205, 66, 49, 48, 54, 198, + 66, 49, 48, 53, 205, 66, 49, 48, 53, 198, 66, 49, 48, 181, 66, 49, 48, + 180, 66, 49, 48, 178, 66, 49, 48, 176, 66, 48, 57, 177, 66, 48, 57, 176, + 66, 48, 56, 57, 128, 66, 48, 56, 183, 66, 48, 56, 54, 128, 66, 48, 56, + 181, 66, 48, 56, 51, 128, 66, 48, 56, 50, 128, 66, 48, 56, 177, 66, 48, + 56, 176, 66, 48, 55, 57, 128, 66, 48, 55, 184, 66, 48, 55, 183, 66, 48, + 55, 182, 66, 48, 55, 181, 66, 48, 55, 180, 66, 48, 55, 179, 66, 48, 55, + 178, 66, 48, 55, 177, 66, 48, 55, 176, 66, 48, 54, 185, 66, 48, 54, 184, + 66, 48, 54, 183, 66, 48, 54, 182, 66, 48, 54, 181, 66, 48, 54, 52, 128, + 66, 48, 54, 51, 128, 66, 48, 54, 178, 66, 48, 54, 177, 66, 48, 54, 176, + 66, 48, 53, 185, 66, 48, 53, 184, 66, 48, 53, 183, 66, 48, 53, 54, 128, + 66, 48, 53, 181, 66, 48, 53, 180, 66, 48, 53, 179, 66, 48, 53, 178, 66, + 48, 53, 177, 66, 48, 53, 176, 66, 48, 52, 57, 128, 66, 48, 52, 184, 66, + 48, 52, 55, 128, 66, 48, 52, 182, 66, 48, 52, 181, 66, 48, 52, 180, 66, + 48, 52, 179, 66, 48, 52, 178, 66, 48, 52, 177, 66, 48, 52, 176, 66, 48, + 51, 185, 66, 48, 51, 184, 66, 48, 51, 183, 66, 48, 51, 182, 66, 48, 51, + 52, 128, 66, 48, 51, 179, 66, 48, 51, 178, 66, 48, 51, 177, 66, 48, 51, + 176, 66, 48, 50, 185, 66, 48, 50, 184, 66, 48, 50, 183, 66, 48, 50, 182, + 66, 48, 50, 181, 66, 48, 50, 180, 66, 48, 50, 179, 66, 48, 50, 50, 128, + 66, 48, 50, 177, 66, 48, 50, 176, 66, 48, 49, 57, 128, 66, 48, 49, 56, + 128, 66, 48, 49, 183, 66, 48, 49, 182, 66, 48, 49, 181, 66, 48, 49, 180, + 66, 48, 49, 179, 66, 48, 49, 178, 66, 48, 49, 177, 66, 48, 49, 176, 66, + 48, 48, 57, 128, 66, 48, 48, 185, 66, 48, 48, 56, 128, 66, 48, 48, 184, + 66, 48, 48, 55, 128, 66, 48, 48, 183, 66, 48, 48, 54, 128, 66, 48, 48, + 182, 66, 48, 48, 53, 65, 128, 66, 48, 48, 53, 128, 66, 48, 48, 181, 66, + 48, 48, 52, 128, 66, 48, 48, 180, 66, 48, 48, 51, 128, 66, 48, 48, 179, + 66, 48, 48, 50, 128, 66, 48, 48, 178, 66, 48, 48, 49, 128, 66, 48, 48, + 177, 65, 90, 85, 128, 65, 89, 69, 210, 65, 89, 66, 128, 65, 89, 65, 72, + 128, 65, 88, 69, 128, 65, 87, 69, 128, 65, 86, 69, 83, 84, 65, 206, 65, + 86, 69, 82, 65, 71, 197, 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89, + 65, 128, 65, 86, 65, 71, 82, 65, 72, 65, 128, 65, 85, 89, 65, 78, 78, 65, + 128, 65, 85, 84, 85, 77, 78, 128, 65, 85, 84, 79, 77, 79, 66, 73, 76, 69, + 128, 65, 85, 84, 79, 77, 65, 84, 69, 196, 65, 85, 83, 84, 82, 65, 204, + 65, 85, 82, 73, 80, 73, 71, 77, 69, 78, 84, 128, 65, 85, 82, 65, 77, 65, + 90, 68, 65, 65, 72, 65, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 45, + 50, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 128, 65, 85, 78, 78, + 128, 65, 85, 71, 85, 83, 84, 128, 65, 85, 71, 77, 69, 78, 84, 65, 84, 73, + 79, 206, 65, 85, 69, 128, 65, 85, 66, 69, 82, 71, 73, 78, 69, 128, 65, + 84, 84, 73, 195, 65, 84, 84, 72, 65, 67, 65, 78, 128, 65, 84, 84, 69, 78, + 84, 73, 79, 78, 128, 65, 84, 84, 65, 203, 65, 84, 84, 65, 67, 72, 69, + 196, 65, 84, 79, 205, 65, 84, 78, 65, 200, 65, 84, 77, 65, 65, 85, 128, + 65, 84, 73, 89, 65, 128, 65, 84, 72, 76, 69, 84, 73, 195, 65, 84, 72, 65, + 82, 86, 65, 86, 69, 68, 73, 195, 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, + 65, 83, 90, 128, 65, 83, 89, 85, 82, 193, 65, 83, 89, 77, 80, 84, 79, 84, + 73, 67, 65, 76, 76, 217, 65, 83, 84, 82, 79, 78, 79, 77, 73, 67, 65, 204, + 65, 83, 84, 82, 79, 76, 79, 71, 73, 67, 65, 204, 65, 83, 84, 79, 78, 73, + 83, 72, 69, 196, 65, 83, 84, 69, 82, 73, 83, 77, 128, 65, 83, 84, 69, 82, + 73, 83, 75, 211, 65, 83, 84, 69, 82, 73, 83, 75, 128, 65, 83, 84, 69, 82, + 73, 83, 203, 65, 83, 84, 69, 82, 73, 83, 67, 85, 83, 128, 65, 83, 83, 89, + 82, 73, 65, 206, 65, 83, 83, 69, 82, 84, 73, 79, 78, 128, 65, 83, 80, 73, + 82, 65, 84, 73, 79, 78, 128, 65, 83, 80, 73, 82, 65, 84, 69, 196, 65, 83, + 80, 69, 82, 128, 65, 83, 73, 65, 45, 65, 85, 83, 84, 82, 65, 76, 73, 65, + 128, 65, 83, 72, 71, 65, 66, 128, 65, 83, 72, 69, 83, 128, 65, 83, 72, + 57, 128, 65, 83, 72, 51, 128, 65, 83, 72, 178, 65, 83, 67, 69, 78, 84, 128, 65, 83, 67, 69, 78, 68, 73, 78, 199, 65, 83, 65, 76, 50, 128, 65, 82, 85, 72, 85, 65, 128, 65, 82, 84, 73, 83, 212, 65, 82, 84, 73, 67, 85, 76, 65, 84, 69, 196, 65, 82, 84, 65, 66, 197, 65, 82, 83, 69, 79, 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 83, 69, 78, 73, 67, 128, 65, 82, 82, 79, 87, 83, 128, 65, 82, 82, 79, 87, 211, 65, 82, 82, 79, 87, 72, 69, 65, 68, 128, 65, 82, 82, 79, 87, 72, 69, 65, 196, 65, 82, 82, 79, 87, 45, - 84, 65, 73, 76, 128, 65, 82, 82, 73, 86, 69, 128, 65, 82, 82, 65, 89, - 128, 65, 82, 80, 69, 71, 71, 73, 65, 84, 207, 65, 82, 79, 85, 83, 73, 78, - 199, 65, 82, 79, 85, 82, 193, 65, 82, 79, 85, 78, 68, 45, 80, 82, 79, 70, - 73, 76, 69, 128, 65, 82, 79, 85, 78, 196, 65, 82, 77, 89, 128, 65, 82, - 77, 79, 85, 82, 128, 65, 82, 205, 65, 82, 76, 65, 85, 199, 65, 82, 75, - 84, 73, 75, 207, 65, 82, 75, 65, 66, 128, 65, 82, 75, 65, 65, 78, 85, - 128, 65, 82, 73, 83, 84, 69, 82, 65, 128, 65, 82, 73, 83, 84, 69, 82, - 193, 65, 82, 73, 69, 83, 128, 65, 82, 71, 79, 84, 69, 82, 73, 128, 65, - 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 65, 82, 71, 73, 128, - 65, 82, 69, 80, 65, 128, 65, 82, 69, 65, 128, 65, 82, 68, 72, 65, 86, 73, - 83, 65, 82, 71, 65, 128, 65, 82, 67, 72, 65, 73, 79, 78, 128, 65, 82, 67, - 72, 65, 73, 79, 206, 65, 82, 67, 72, 65, 73, 195, 65, 82, 67, 200, 65, - 82, 67, 128, 65, 82, 195, 65, 82, 65, 77, 65, 73, 195, 65, 82, 65, 69, - 65, 69, 128, 65, 82, 65, 69, 65, 45, 85, 128, 65, 82, 65, 69, 65, 45, 73, - 128, 65, 82, 65, 69, 65, 45, 69, 79, 128, 65, 82, 65, 69, 65, 45, 69, - 128, 65, 82, 65, 69, 65, 45, 65, 128, 65, 82, 65, 68, 128, 65, 82, 65, - 196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, 65, 82, 65, 66, 73, - 65, 206, 65, 82, 45, 82, 65, 72, 77, 65, 206, 65, 82, 45, 82, 65, 72, 69, - 69, 77, 128, 65, 81, 85, 65, 82, 73, 85, 83, 128, 65, 81, 85, 65, 70, 79, - 82, 84, 73, 83, 128, 65, 81, 85, 193, 65, 80, 85, 206, 65, 80, 82, 73, - 76, 128, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 76, 217, 65, 80, 80, - 82, 79, 88, 73, 77, 65, 84, 69, 128, 65, 80, 80, 82, 79, 65, 67, 72, 69, - 211, 65, 80, 80, 82, 79, 65, 67, 72, 128, 65, 80, 80, 76, 73, 67, 65, 84, - 73, 79, 78, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73, 79, 206, 65, 80, 79, - 84, 72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, 128, 65, 80, 79, 83, - 84, 82, 79, 80, 72, 69, 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 83, 128, - 65, 80, 79, 83, 84, 82, 79, 70, 79, 211, 65, 80, 79, 83, 84, 82, 79, 70, - 79, 201, 65, 80, 79, 68, 69, 88, 73, 65, 128, 65, 80, 79, 68, 69, 82, 77, - 193, 65, 80, 76, 79, 85, 78, 128, 65, 80, 76, 201, 65, 80, 204, 65, 80, - 73, 78, 128, 65, 80, 69, 83, 207, 65, 80, 67, 128, 65, 80, 65, 82, 84, - 128, 65, 80, 65, 65, 84, 79, 128, 65, 78, 85, 83, 86, 65, 82, 65, 89, 65, - 128, 65, 78, 85, 83, 86, 65, 82, 65, 128, 65, 78, 85, 83, 86, 65, 82, - 193, 65, 78, 85, 68, 65, 84, 84, 65, 128, 65, 78, 85, 68, 65, 84, 84, - 193, 65, 78, 84, 73, 82, 69, 83, 84, 82, 73, 67, 84, 73, 79, 78, 128, 65, - 78, 84, 73, 77, 79, 78, 89, 45, 50, 128, 65, 78, 84, 73, 77, 79, 78, 89, - 128, 65, 78, 84, 73, 77, 79, 78, 217, 65, 78, 84, 73, 77, 79, 78, 73, 65, - 84, 69, 128, 65, 78, 84, 73, 75, 69, 78, 79, 77, 65, 128, 65, 78, 84, 73, - 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, 65, 128, 65, 78, 84, 73, 70, 79, - 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, 83, 69, 45, - 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, - 83, 197, 65, 78, 84, 69, 78, 78, 65, 128, 65, 78, 84, 69, 78, 78, 193, - 65, 78, 84, 65, 82, 71, 79, 77, 85, 75, 72, 65, 128, 65, 78, 83, 85, 218, - 65, 78, 83, 72, 69, 128, 65, 78, 80, 69, 65, 128, 65, 78, 207, 65, 78, - 78, 85, 73, 84, 217, 65, 78, 78, 79, 84, 65, 84, 73, 79, 206, 65, 78, 78, - 65, 65, 85, 128, 65, 78, 75, 72, 128, 65, 78, 74, 73, 128, 65, 78, 72, - 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, 85, 73, 83, 72, 69, - 196, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 82, 217, 65, 78, 71, - 75, 72, 65, 78, 75, 72, 85, 128, 65, 78, 71, 69, 210, 65, 78, 71, 69, 76, - 128, 65, 78, 71, 69, 68, 128, 65, 78, 68, 65, 80, 128, 65, 78, 67, 79, - 82, 65, 128, 65, 78, 67, 72, 79, 82, 128, 65, 78, 65, 84, 82, 73, 67, 72, - 73, 83, 77, 65, 128, 65, 78, 65, 80, 128, 65, 77, 80, 83, 128, 65, 77, - 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 79, 85, 78, 212, 65, 77, 69, 82, - 73, 67, 65, 83, 128, 65, 77, 69, 82, 73, 67, 65, 206, 65, 77, 66, 85, 76, - 65, 78, 67, 69, 128, 65, 77, 66, 193, 65, 77, 65, 82, 128, 65, 77, 65, - 210, 65, 77, 65, 76, 71, 65, 77, 65, 84, 73, 79, 206, 65, 77, 65, 76, 71, - 65, 77, 128, 65, 76, 86, 69, 79, 76, 65, 210, 65, 76, 85, 77, 128, 65, - 76, 84, 69, 82, 78, 65, 84, 73, 86, 197, 65, 76, 84, 69, 82, 78, 65, 84, - 73, 79, 206, 65, 76, 84, 69, 82, 78, 65, 84, 197, 65, 76, 84, 65, 128, - 65, 76, 80, 72, 65, 128, 65, 76, 80, 72, 193, 65, 76, 80, 65, 80, 82, 65, - 78, 65, 128, 65, 76, 80, 65, 80, 82, 65, 65, 78, 193, 65, 76, 80, 65, - 128, 65, 76, 77, 79, 83, 212, 65, 76, 77, 128, 65, 76, 76, 79, 128, 65, - 76, 76, 73, 65, 78, 67, 69, 128, 65, 76, 76, 201, 65, 76, 76, 65, 200, - 65, 76, 75, 65, 76, 73, 45, 50, 128, 65, 76, 75, 65, 76, 73, 128, 65, 76, - 73, 71, 78, 69, 196, 65, 76, 73, 70, 85, 128, 65, 76, 73, 69, 78, 128, - 65, 76, 73, 69, 206, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, - 69, 85, 212, 65, 76, 69, 82, 84, 128, 65, 76, 69, 80, 72, 128, 65, 76, - 69, 77, 66, 73, 67, 128, 65, 76, 69, 70, 128, 65, 76, 65, 89, 72, 69, - 128, 65, 76, 65, 89, 72, 197, 65, 76, 65, 82, 205, 65, 76, 65, 80, 72, - 128, 65, 76, 45, 76, 65, 75, 85, 78, 65, 128, 65, 75, 84, 73, 69, 83, 69, - 76, 83, 75, 65, 66, 128, 65, 75, 83, 65, 128, 65, 75, 72, 77, 73, 77, 73, - 195, 65, 75, 66, 65, 210, 65, 75, 65, 82, 65, 128, 65, 75, 65, 82, 193, - 65, 73, 89, 65, 78, 78, 65, 128, 65, 73, 86, 73, 76, 73, 203, 65, 73, 84, - 79, 206, 65, 73, 82, 80, 76, 65, 78, 69, 128, 65, 73, 78, 213, 65, 73, - 78, 78, 128, 65, 73, 76, 77, 128, 65, 73, 75, 65, 82, 65, 128, 65, 73, - 72, 86, 85, 83, 128, 65, 72, 83, 68, 65, 128, 65, 72, 83, 65, 128, 65, - 72, 65, 78, 199, 65, 72, 65, 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, - 71, 85, 78, 71, 128, 65, 71, 79, 71, 201, 65, 71, 71, 82, 65, 86, 65, 84, - 73, 79, 78, 128, 65, 71, 71, 82, 65, 86, 65, 84, 69, 196, 65, 71, 65, 73, - 78, 128, 65, 70, 84, 69, 210, 65, 70, 83, 65, 65, 81, 128, 65, 70, 82, - 73, 67, 65, 206, 65, 70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, 68, - 128, 65, 70, 71, 72, 65, 78, 201, 65, 70, 70, 82, 73, 67, 65, 84, 73, 79, - 206, 65, 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 83, 67, + 84, 65, 73, 76, 128, 65, 82, 82, 73, 86, 73, 78, 71, 128, 65, 82, 82, 73, + 86, 69, 128, 65, 82, 82, 65, 89, 128, 65, 82, 80, 69, 71, 71, 73, 65, 84, + 207, 65, 82, 79, 85, 83, 73, 78, 199, 65, 82, 79, 85, 82, 193, 65, 82, + 79, 85, 78, 68, 45, 80, 82, 79, 70, 73, 76, 69, 128, 65, 82, 79, 85, 78, + 196, 65, 82, 77, 89, 128, 65, 82, 77, 79, 85, 82, 128, 65, 82, 205, 65, + 82, 76, 65, 85, 199, 65, 82, 75, 84, 73, 75, 207, 65, 82, 75, 65, 66, + 128, 65, 82, 75, 65, 65, 78, 85, 128, 65, 82, 73, 83, 84, 69, 82, 65, + 128, 65, 82, 73, 83, 84, 69, 82, 193, 65, 82, 73, 69, 83, 128, 65, 82, + 71, 79, 84, 69, 82, 73, 128, 65, 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, + 79, 78, 128, 65, 82, 71, 73, 128, 65, 82, 69, 80, 65, 128, 65, 82, 69, + 65, 128, 65, 82, 68, 72, 65, 86, 73, 83, 65, 82, 71, 65, 128, 65, 82, 68, + 72, 65, 67, 65, 78, 68, 82, 65, 128, 65, 82, 67, 72, 65, 73, 79, 78, 128, + 65, 82, 67, 72, 65, 73, 79, 206, 65, 82, 67, 72, 65, 73, 195, 65, 82, 67, + 200, 65, 82, 67, 128, 65, 82, 195, 65, 82, 65, 77, 65, 73, 195, 65, 82, + 65, 69, 65, 69, 128, 65, 82, 65, 69, 65, 45, 85, 128, 65, 82, 65, 69, 65, + 45, 73, 128, 65, 82, 65, 69, 65, 45, 69, 79, 128, 65, 82, 65, 69, 65, 45, + 69, 128, 65, 82, 65, 69, 65, 45, 65, 128, 65, 82, 65, 68, 128, 65, 82, + 65, 196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, 65, 82, 65, 66, + 73, 65, 206, 65, 82, 45, 82, 65, 72, 77, 65, 206, 65, 82, 45, 82, 65, 72, + 69, 69, 77, 128, 65, 81, 85, 65, 82, 73, 85, 83, 128, 65, 81, 85, 65, 70, + 79, 82, 84, 73, 83, 128, 65, 81, 85, 193, 65, 80, 85, 206, 65, 80, 82, + 73, 76, 128, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 76, 217, 65, 80, + 80, 82, 79, 88, 73, 77, 65, 84, 69, 128, 65, 80, 80, 82, 79, 65, 67, 72, + 69, 211, 65, 80, 80, 82, 79, 65, 67, 72, 128, 65, 80, 80, 76, 73, 67, 65, + 84, 73, 79, 78, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73, 79, 206, 65, 80, + 79, 84, 72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, 128, 65, 80, 79, + 83, 84, 82, 79, 80, 72, 69, 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 83, + 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 211, 65, 80, 79, 83, 84, 82, 79, + 70, 79, 201, 65, 80, 79, 68, 69, 88, 73, 65, 128, 65, 80, 79, 68, 69, 82, + 77, 193, 65, 80, 76, 79, 85, 78, 128, 65, 80, 76, 201, 65, 80, 204, 65, + 80, 73, 78, 128, 65, 80, 69, 83, 207, 65, 80, 67, 128, 65, 80, 65, 82, + 84, 128, 65, 80, 65, 65, 84, 79, 128, 65, 79, 85, 128, 65, 79, 82, 128, + 65, 78, 85, 83, 86, 65, 82, 65, 89, 65, 128, 65, 78, 85, 83, 86, 65, 82, + 65, 128, 65, 78, 85, 83, 86, 65, 82, 193, 65, 78, 85, 68, 65, 84, 84, 65, + 128, 65, 78, 85, 68, 65, 84, 84, 193, 65, 78, 84, 73, 82, 69, 83, 84, 82, + 73, 67, 84, 73, 79, 78, 128, 65, 78, 84, 73, 77, 79, 78, 89, 45, 50, 128, + 65, 78, 84, 73, 77, 79, 78, 89, 128, 65, 78, 84, 73, 77, 79, 78, 217, 65, + 78, 84, 73, 77, 79, 78, 73, 65, 84, 69, 128, 65, 78, 84, 73, 75, 69, 78, + 79, 77, 65, 128, 65, 78, 84, 73, 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, + 65, 128, 65, 78, 84, 73, 70, 79, 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, + 79, 67, 75, 87, 73, 83, 69, 45, 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, + 73, 67, 76, 79, 67, 75, 87, 73, 83, 69, 128, 65, 78, 84, 73, 67, 76, 79, + 67, 75, 87, 73, 83, 197, 65, 78, 84, 69, 78, 78, 65, 128, 65, 78, 84, 69, + 78, 78, 193, 65, 78, 84, 65, 82, 71, 79, 77, 85, 75, 72, 65, 128, 65, 78, + 83, 85, 218, 65, 78, 83, 72, 69, 128, 65, 78, 80, 69, 65, 128, 65, 78, + 207, 65, 78, 78, 85, 73, 84, 217, 65, 78, 78, 79, 84, 65, 84, 73, 79, + 206, 65, 78, 78, 65, 65, 85, 128, 65, 78, 75, 72, 128, 65, 78, 74, 73, + 128, 65, 78, 72, 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, + 85, 73, 83, 72, 69, 196, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 82, + 217, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, 128, 65, 78, 71, 69, 210, + 65, 78, 71, 69, 76, 128, 65, 78, 71, 69, 68, 128, 65, 78, 68, 65, 80, + 128, 65, 78, 67, 79, 82, 65, 128, 65, 78, 67, 72, 79, 82, 128, 65, 78, + 65, 84, 82, 73, 67, 72, 73, 83, 77, 65, 128, 65, 78, 65, 80, 128, 65, 77, + 80, 83, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 80, 69, 82, + 83, 65, 78, 196, 65, 77, 79, 85, 78, 212, 65, 77, 69, 82, 73, 67, 65, 83, + 128, 65, 77, 69, 82, 73, 67, 65, 206, 65, 77, 66, 85, 76, 65, 78, 67, 69, + 128, 65, 77, 66, 193, 65, 77, 65, 82, 128, 65, 77, 65, 210, 65, 77, 65, + 76, 71, 65, 77, 65, 84, 73, 79, 206, 65, 77, 65, 76, 71, 65, 77, 128, 65, + 76, 86, 69, 79, 76, 65, 210, 65, 76, 85, 77, 128, 65, 76, 84, 69, 82, 78, + 65, 84, 73, 86, 197, 65, 76, 84, 69, 82, 78, 65, 84, 73, 79, 206, 65, 76, + 84, 69, 82, 78, 65, 84, 197, 65, 76, 84, 65, 128, 65, 76, 80, 72, 65, + 128, 65, 76, 80, 72, 193, 65, 76, 80, 65, 80, 82, 65, 78, 65, 128, 65, + 76, 80, 65, 80, 82, 65, 65, 78, 193, 65, 76, 80, 65, 128, 65, 76, 77, 79, + 83, 212, 65, 76, 77, 128, 65, 76, 76, 79, 128, 65, 76, 76, 73, 65, 78, + 67, 69, 128, 65, 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 75, 65, 76, + 73, 45, 50, 128, 65, 76, 75, 65, 76, 73, 128, 65, 76, 73, 71, 78, 69, + 196, 65, 76, 73, 70, 85, 128, 65, 76, 73, 69, 78, 128, 65, 76, 73, 69, + 206, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 69, 85, 212, 65, + 76, 69, 82, 84, 128, 65, 76, 69, 80, 72, 128, 65, 76, 69, 77, 66, 73, 67, + 128, 65, 76, 69, 70, 128, 65, 76, 66, 65, 78, 73, 65, 206, 65, 76, 65, + 89, 72, 69, 128, 65, 76, 65, 89, 72, 197, 65, 76, 65, 82, 205, 65, 76, + 65, 80, 72, 128, 65, 76, 45, 76, 65, 75, 85, 78, 65, 128, 65, 75, 84, 73, + 69, 83, 69, 76, 83, 75, 65, 66, 128, 65, 75, 83, 65, 128, 65, 75, 72, 77, + 73, 77, 73, 195, 65, 75, 66, 65, 210, 65, 75, 65, 82, 65, 128, 65, 75, + 65, 82, 193, 65, 73, 89, 65, 78, 78, 65, 128, 65, 73, 86, 73, 76, 73, + 203, 65, 73, 84, 79, 206, 65, 73, 82, 80, 76, 65, 78, 69, 128, 65, 73, + 82, 80, 76, 65, 78, 197, 65, 73, 78, 213, 65, 73, 78, 78, 128, 65, 73, + 76, 77, 128, 65, 73, 75, 65, 82, 65, 128, 65, 73, 72, 86, 85, 83, 128, + 65, 72, 83, 68, 65, 128, 65, 72, 83, 65, 128, 65, 72, 65, 78, 199, 65, + 72, 65, 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 85, 78, 71, 128, + 65, 71, 79, 71, 201, 65, 71, 71, 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, + 71, 71, 82, 65, 86, 65, 84, 69, 196, 65, 71, 65, 73, 78, 128, 65, 70, 84, + 69, 210, 65, 70, 83, 65, 65, 81, 128, 65, 70, 82, 73, 67, 65, 206, 65, + 70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, 68, 128, 65, 70, 71, 72, + 65, 78, 201, 65, 70, 70, 82, 73, 67, 65, 84, 73, 79, 206, 65, 70, 70, 73, + 216, 65, 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, 67, 128, 65, 69, 83, 128, 65, 69, 82, 73, 65, 204, 65, 69, 82, 128, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 76, 128, 65, 69, 75, 128, 65, 69, 71, 69, 65, 206, 65, 69, 71, 128, 65, 69, 69, 89, 65, 78, 78, 65, 128, 65, 69, 69, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 68, 128, 65, 69, 66, 128, 65, 68, 86, 65, 78, 84, 65, 71, 69, 128, 65, 68, 86, 65, 78, 67, 69, - 128, 65, 68, 69, 71, 128, 65, 68, 69, 199, 65, 68, 68, 82, 69, 83, 83, - 69, 196, 65, 68, 68, 82, 69, 83, 211, 65, 68, 68, 65, 75, 128, 65, 68, - 65, 203, 65, 67, 85, 84, 69, 45, 77, 65, 67, 82, 79, 78, 128, 65, 67, 85, - 84, 69, 45, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 128, 65, 67, 85, - 84, 197, 65, 67, 84, 85, 65, 76, 76, 217, 65, 67, 84, 73, 86, 65, 84, - 197, 65, 67, 82, 79, 80, 72, 79, 78, 73, 195, 65, 67, 75, 78, 79, 87, 76, - 69, 68, 71, 69, 128, 65, 67, 67, 85, 77, 85, 76, 65, 84, 73, 79, 78, 128, - 65, 67, 67, 79, 85, 78, 212, 65, 67, 67, 69, 80, 84, 128, 65, 67, 67, 69, - 78, 84, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, 65, 67, 67, 69, 78, 84, - 128, 65, 67, 67, 69, 78, 212, 65, 67, 65, 68, 69, 77, 217, 65, 66, 89, - 83, 77, 65, 204, 65, 66, 85, 78, 68, 65, 78, 67, 69, 128, 65, 66, 75, 72, - 65, 83, 73, 65, 206, 65, 66, 66, 82, 69, 86, 73, 65, 84, 73, 79, 206, 65, - 66, 65, 70, 73, 76, 73, 128, 65, 66, 178, 65, 65, 89, 65, 78, 78, 65, - 128, 65, 65, 89, 128, 65, 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128, - 65, 65, 66, 65, 65, 70, 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65, - 48, 51, 49, 128, 65, 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65, - 65, 48, 50, 56, 128, 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128, - 65, 65, 48, 50, 53, 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51, - 128, 65, 65, 48, 50, 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50, - 48, 128, 65, 65, 48, 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48, - 49, 55, 128, 65, 65, 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65, - 48, 49, 52, 128, 65, 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65, - 65, 48, 49, 49, 128, 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128, - 65, 65, 48, 48, 56, 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, - 65, 128, 65, 65, 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, - 48, 53, 128, 65, 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, - 48, 48, 50, 128, 65, 65, 48, 48, 49, 128, 65, 48, 55, 48, 128, 65, 48, - 54, 57, 128, 65, 48, 54, 56, 128, 65, 48, 54, 55, 128, 65, 48, 54, 54, - 128, 65, 48, 54, 53, 128, 65, 48, 54, 52, 128, 65, 48, 54, 51, 128, 65, - 48, 54, 50, 128, 65, 48, 54, 49, 128, 65, 48, 54, 48, 128, 65, 48, 53, - 57, 128, 65, 48, 53, 56, 128, 65, 48, 53, 55, 128, 65, 48, 53, 54, 128, - 65, 48, 53, 53, 128, 65, 48, 53, 52, 128, 65, 48, 53, 51, 128, 65, 48, - 53, 50, 128, 65, 48, 53, 49, 128, 65, 48, 53, 48, 128, 65, 48, 52, 57, - 128, 65, 48, 52, 56, 128, 65, 48, 52, 55, 128, 65, 48, 52, 54, 128, 65, - 48, 52, 53, 65, 128, 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, - 52, 51, 65, 128, 65, 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, - 52, 50, 128, 65, 48, 52, 49, 128, 65, 48, 52, 48, 65, 128, 65, 48, 52, - 48, 128, 65, 48, 51, 57, 128, 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, - 65, 48, 51, 54, 128, 65, 48, 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, - 51, 51, 128, 65, 48, 51, 50, 65, 128, 65, 48, 49, 55, 65, 128, 65, 48, - 49, 52, 65, 128, 65, 48, 48, 54, 66, 128, 65, 48, 48, 54, 65, 128, 65, - 48, 48, 53, 65, 128, 65, 45, 69, 85, 128, 45, 85, 205, 45, 80, 72, 82, - 85, 128, 45, 75, 72, 89, 85, 196, 45, 75, 72, 89, 73, 76, 128, 45, 68, - 90, 85, 196, 45, 67, 72, 65, 210, 45, 67, 72, 65, 76, 128, + 128, 65, 68, 77, 73, 83, 83, 73, 79, 206, 65, 68, 69, 71, 128, 65, 68, + 69, 199, 65, 68, 68, 82, 69, 83, 83, 69, 196, 65, 68, 68, 82, 69, 83, + 211, 65, 68, 68, 65, 75, 128, 65, 68, 65, 203, 65, 67, 85, 84, 69, 45, + 77, 65, 67, 82, 79, 78, 128, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, + 45, 65, 67, 85, 84, 69, 128, 65, 67, 85, 84, 197, 65, 67, 84, 85, 65, 76, + 76, 217, 65, 67, 84, 73, 86, 65, 84, 197, 65, 67, 82, 79, 80, 72, 79, 78, + 73, 195, 65, 67, 75, 78, 79, 87, 76, 69, 68, 71, 69, 128, 65, 67, 67, 85, + 77, 85, 76, 65, 84, 73, 79, 78, 128, 65, 67, 67, 79, 85, 78, 212, 65, 67, + 67, 79, 77, 77, 79, 68, 65, 84, 73, 79, 78, 128, 65, 67, 67, 69, 80, 84, + 128, 65, 67, 67, 69, 78, 84, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, 65, + 67, 67, 69, 78, 84, 128, 65, 67, 67, 69, 78, 212, 65, 67, 65, 68, 69, 77, + 217, 65, 66, 89, 83, 77, 65, 204, 65, 66, 85, 78, 68, 65, 78, 67, 69, + 128, 65, 66, 75, 72, 65, 83, 73, 65, 206, 65, 66, 66, 82, 69, 86, 73, 65, + 84, 73, 79, 206, 65, 66, 65, 70, 73, 76, 73, 128, 65, 66, 178, 65, 66, + 49, 57, 49, 128, 65, 66, 49, 56, 56, 128, 65, 66, 49, 56, 48, 128, 65, + 66, 49, 55, 49, 128, 65, 66, 49, 54, 52, 128, 65, 66, 49, 51, 49, 66, + 128, 65, 66, 49, 51, 49, 65, 128, 65, 66, 49, 50, 51, 128, 65, 66, 49, + 50, 50, 128, 65, 66, 49, 50, 48, 128, 65, 66, 49, 49, 56, 128, 65, 66, + 48, 56, 55, 128, 65, 66, 48, 56, 54, 128, 65, 66, 48, 56, 53, 128, 65, + 66, 48, 56, 50, 128, 65, 66, 48, 56, 49, 128, 65, 66, 48, 56, 48, 128, + 65, 66, 48, 55, 57, 128, 65, 66, 48, 55, 56, 128, 65, 66, 48, 55, 55, + 128, 65, 66, 48, 55, 54, 128, 65, 66, 48, 55, 52, 128, 65, 66, 48, 55, + 51, 128, 65, 66, 48, 55, 48, 128, 65, 66, 48, 54, 57, 128, 65, 66, 48, + 54, 55, 128, 65, 66, 48, 54, 54, 128, 65, 66, 48, 54, 53, 128, 65, 66, + 48, 54, 49, 128, 65, 66, 48, 54, 48, 128, 65, 66, 48, 53, 57, 128, 65, + 66, 48, 53, 56, 128, 65, 66, 48, 53, 55, 128, 65, 66, 48, 53, 54, 128, + 65, 66, 48, 53, 53, 128, 65, 66, 48, 53, 52, 128, 65, 66, 48, 53, 51, + 128, 65, 66, 48, 53, 49, 128, 65, 66, 48, 53, 48, 128, 65, 66, 48, 52, + 57, 128, 65, 66, 48, 52, 56, 128, 65, 66, 48, 52, 55, 128, 65, 66, 48, + 52, 54, 128, 65, 66, 48, 52, 53, 128, 65, 66, 48, 52, 52, 128, 65, 66, + 48, 52, 49, 128, 65, 66, 48, 52, 48, 128, 65, 66, 48, 51, 57, 128, 65, + 66, 48, 51, 56, 128, 65, 66, 48, 51, 55, 128, 65, 66, 48, 51, 52, 128, + 65, 66, 48, 51, 49, 128, 65, 66, 48, 51, 48, 128, 65, 66, 48, 50, 57, + 128, 65, 66, 48, 50, 56, 128, 65, 66, 48, 50, 55, 128, 65, 66, 48, 50, + 54, 128, 65, 66, 48, 50, 52, 128, 65, 66, 48, 50, 51, 77, 128, 65, 66, + 48, 50, 51, 128, 65, 66, 48, 50, 50, 77, 128, 65, 66, 48, 50, 50, 70, + 128, 65, 66, 48, 50, 50, 128, 65, 66, 48, 50, 49, 77, 128, 65, 66, 48, + 50, 49, 70, 128, 65, 66, 48, 50, 49, 128, 65, 66, 48, 50, 48, 128, 65, + 66, 48, 49, 55, 128, 65, 66, 48, 49, 54, 128, 65, 66, 48, 49, 51, 128, + 65, 66, 48, 49, 49, 128, 65, 66, 48, 49, 48, 128, 65, 66, 48, 48, 57, + 128, 65, 66, 48, 48, 56, 128, 65, 66, 48, 48, 55, 128, 65, 66, 48, 48, + 54, 128, 65, 66, 48, 48, 53, 128, 65, 66, 48, 48, 52, 128, 65, 66, 48, + 48, 51, 128, 65, 66, 48, 48, 50, 128, 65, 66, 48, 48, 49, 128, 65, 65, + 89, 73, 78, 128, 65, 65, 89, 65, 78, 78, 65, 128, 65, 65, 89, 128, 65, + 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128, 65, 65, 66, 65, 65, 70, + 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65, 48, 51, 49, 128, 65, + 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65, 65, 48, 50, 56, 128, + 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128, 65, 65, 48, 50, 53, + 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51, 128, 65, 65, 48, 50, + 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50, 48, 128, 65, 65, 48, + 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48, 49, 55, 128, 65, 65, + 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65, 48, 49, 52, 128, 65, + 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65, 65, 48, 49, 49, 128, + 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128, 65, 65, 48, 48, 56, + 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, 65, 128, 65, 65, + 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, 48, 53, 128, 65, + 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, 48, 48, 50, 128, + 65, 65, 48, 48, 49, 128, 65, 56, 48, 55, 128, 65, 56, 48, 54, 128, 65, + 56, 48, 53, 128, 65, 56, 48, 52, 128, 65, 56, 48, 51, 128, 65, 56, 48, + 50, 128, 65, 56, 48, 49, 128, 65, 56, 48, 48, 128, 65, 55, 51, 178, 65, + 55, 50, 182, 65, 55, 49, 183, 65, 55, 49, 181, 65, 55, 49, 180, 65, 55, + 49, 179, 65, 55, 49, 178, 65, 55, 49, 177, 65, 55, 49, 176, 65, 55, 48, + 57, 45, 182, 65, 55, 48, 57, 45, 180, 65, 55, 48, 57, 45, 179, 65, 55, + 48, 57, 45, 178, 65, 55, 48, 185, 65, 55, 48, 184, 65, 55, 48, 183, 65, + 55, 48, 182, 65, 55, 48, 181, 65, 55, 48, 180, 65, 55, 48, 179, 65, 55, + 48, 178, 65, 55, 48, 177, 65, 54, 54, 52, 128, 65, 54, 54, 51, 128, 65, + 54, 54, 50, 128, 65, 54, 54, 49, 128, 65, 54, 54, 48, 128, 65, 54, 53, + 57, 128, 65, 54, 53, 56, 128, 65, 54, 53, 55, 128, 65, 54, 53, 54, 128, + 65, 54, 53, 53, 128, 65, 54, 53, 52, 128, 65, 54, 53, 51, 128, 65, 54, + 53, 50, 128, 65, 54, 53, 49, 128, 65, 54, 52, 57, 128, 65, 54, 52, 56, + 128, 65, 54, 52, 54, 128, 65, 54, 52, 53, 128, 65, 54, 52, 52, 128, 65, + 54, 52, 51, 128, 65, 54, 52, 50, 128, 65, 54, 52, 48, 128, 65, 54, 51, + 56, 128, 65, 54, 51, 55, 128, 65, 54, 51, 52, 128, 65, 54, 50, 57, 128, + 65, 54, 50, 56, 128, 65, 54, 50, 55, 128, 65, 54, 50, 54, 128, 65, 54, + 50, 52, 128, 65, 54, 50, 51, 128, 65, 54, 50, 50, 128, 65, 54, 50, 49, + 128, 65, 54, 50, 48, 128, 65, 54, 49, 57, 128, 65, 54, 49, 56, 128, 65, + 54, 49, 55, 128, 65, 54, 49, 54, 128, 65, 54, 49, 53, 128, 65, 54, 49, + 52, 128, 65, 54, 49, 51, 128, 65, 54, 49, 50, 128, 65, 54, 49, 49, 128, + 65, 54, 49, 48, 128, 65, 54, 48, 57, 128, 65, 54, 48, 56, 128, 65, 54, + 48, 54, 128, 65, 54, 48, 52, 128, 65, 54, 48, 51, 128, 65, 54, 48, 50, + 128, 65, 54, 48, 49, 128, 65, 54, 48, 48, 128, 65, 53, 57, 56, 128, 65, + 53, 57, 54, 128, 65, 53, 57, 53, 128, 65, 53, 57, 52, 128, 65, 53, 57, + 50, 128, 65, 53, 57, 49, 128, 65, 53, 56, 57, 128, 65, 53, 56, 56, 128, + 65, 53, 56, 55, 128, 65, 53, 56, 54, 128, 65, 53, 56, 53, 128, 65, 53, + 56, 52, 128, 65, 53, 56, 51, 128, 65, 53, 56, 50, 128, 65, 53, 56, 49, + 128, 65, 53, 56, 48, 128, 65, 53, 55, 57, 128, 65, 53, 55, 56, 128, 65, + 53, 55, 55, 128, 65, 53, 55, 54, 128, 65, 53, 55, 53, 128, 65, 53, 55, + 52, 128, 65, 53, 55, 51, 128, 65, 53, 55, 50, 128, 65, 53, 55, 49, 128, + 65, 53, 55, 48, 128, 65, 53, 54, 57, 128, 65, 53, 54, 56, 128, 65, 53, + 54, 54, 128, 65, 53, 54, 53, 128, 65, 53, 54, 52, 128, 65, 53, 54, 51, + 128, 65, 53, 53, 57, 128, 65, 53, 53, 55, 128, 65, 53, 53, 54, 128, 65, + 53, 53, 53, 128, 65, 53, 53, 52, 128, 65, 53, 53, 51, 128, 65, 53, 53, + 50, 128, 65, 53, 53, 49, 128, 65, 53, 53, 48, 128, 65, 53, 52, 57, 128, + 65, 53, 52, 56, 128, 65, 53, 52, 55, 128, 65, 53, 52, 53, 128, 65, 53, + 52, 50, 128, 65, 53, 52, 49, 128, 65, 53, 52, 48, 128, 65, 53, 51, 57, + 128, 65, 53, 51, 56, 128, 65, 53, 51, 55, 128, 65, 53, 51, 54, 128, 65, + 53, 51, 53, 128, 65, 53, 51, 52, 128, 65, 53, 51, 50, 128, 65, 53, 51, + 49, 128, 65, 53, 51, 48, 128, 65, 53, 50, 57, 128, 65, 53, 50, 56, 128, + 65, 53, 50, 55, 128, 65, 53, 50, 54, 128, 65, 53, 50, 53, 128, 65, 53, + 50, 52, 128, 65, 53, 50, 51, 128, 65, 53, 50, 49, 128, 65, 53, 50, 48, + 128, 65, 53, 49, 54, 128, 65, 53, 49, 53, 128, 65, 53, 49, 51, 128, 65, + 53, 49, 50, 128, 65, 53, 49, 49, 128, 65, 53, 49, 48, 128, 65, 53, 48, + 57, 128, 65, 53, 48, 56, 128, 65, 53, 48, 54, 128, 65, 53, 48, 53, 128, + 65, 53, 48, 52, 128, 65, 53, 48, 51, 128, 65, 53, 48, 50, 128, 65, 53, + 48, 49, 128, 65, 52, 49, 56, 45, 86, 65, 83, 128, 65, 52, 49, 55, 45, 86, + 65, 83, 128, 65, 52, 49, 54, 45, 86, 65, 83, 128, 65, 52, 49, 53, 45, 86, + 65, 83, 128, 65, 52, 49, 52, 45, 86, 65, 83, 128, 65, 52, 49, 51, 45, 86, + 65, 83, 128, 65, 52, 49, 50, 45, 86, 65, 83, 128, 65, 52, 49, 49, 45, 86, + 65, 83, 128, 65, 52, 49, 48, 45, 86, 65, 83, 128, 65, 52, 48, 57, 45, 86, + 65, 83, 128, 65, 52, 48, 56, 45, 86, 65, 83, 128, 65, 52, 48, 55, 45, 86, + 65, 83, 128, 65, 52, 48, 54, 45, 86, 65, 83, 128, 65, 52, 48, 53, 45, 86, + 65, 83, 128, 65, 52, 48, 52, 45, 86, 65, 83, 128, 65, 52, 48, 51, 45, 86, + 65, 83, 128, 65, 52, 48, 50, 45, 86, 65, 83, 128, 65, 52, 48, 49, 45, 86, + 65, 83, 128, 65, 52, 48, 48, 45, 86, 65, 83, 128, 65, 51, 55, 49, 128, + 65, 51, 55, 48, 128, 65, 51, 54, 57, 128, 65, 51, 54, 56, 128, 65, 51, + 54, 55, 128, 65, 51, 54, 54, 128, 65, 51, 54, 53, 128, 65, 51, 54, 52, + 128, 65, 51, 54, 51, 128, 65, 51, 54, 50, 128, 65, 51, 54, 49, 128, 65, + 51, 54, 48, 128, 65, 51, 53, 57, 128, 65, 51, 53, 56, 128, 65, 51, 53, + 55, 128, 65, 51, 53, 54, 128, 65, 51, 53, 53, 128, 65, 51, 53, 52, 128, + 65, 51, 53, 51, 128, 65, 51, 53, 50, 128, 65, 51, 53, 49, 128, 65, 51, + 53, 48, 128, 65, 51, 52, 57, 128, 65, 51, 52, 56, 128, 65, 51, 52, 55, + 128, 65, 51, 52, 54, 128, 65, 51, 52, 53, 128, 65, 51, 52, 52, 128, 65, + 51, 52, 51, 128, 65, 51, 52, 50, 128, 65, 51, 52, 49, 128, 65, 51, 52, + 48, 128, 65, 51, 51, 57, 128, 65, 51, 51, 56, 128, 65, 51, 51, 55, 128, + 65, 51, 51, 54, 128, 65, 51, 51, 53, 128, 65, 51, 51, 52, 128, 65, 51, + 51, 51, 128, 65, 51, 51, 50, 128, 65, 51, 51, 49, 128, 65, 51, 51, 48, + 128, 65, 51, 50, 57, 128, 65, 51, 50, 56, 128, 65, 51, 50, 55, 128, 65, + 51, 50, 54, 128, 65, 51, 50, 53, 128, 65, 51, 50, 52, 128, 65, 51, 50, + 51, 128, 65, 51, 50, 50, 128, 65, 51, 50, 49, 128, 65, 51, 50, 48, 128, + 65, 51, 49, 57, 128, 65, 51, 49, 56, 128, 65, 51, 49, 55, 128, 65, 51, + 49, 54, 128, 65, 51, 49, 53, 128, 65, 51, 49, 52, 128, 65, 51, 49, 51, + 67, 128, 65, 51, 49, 51, 66, 128, 65, 51, 49, 51, 65, 128, 65, 51, 49, + 50, 128, 65, 51, 49, 49, 128, 65, 51, 49, 48, 128, 65, 51, 48, 57, 67, + 128, 65, 51, 48, 57, 66, 128, 65, 51, 48, 57, 65, 128, 65, 51, 48, 56, + 128, 65, 51, 48, 55, 128, 65, 51, 48, 54, 128, 65, 51, 48, 53, 128, 65, + 51, 48, 52, 128, 65, 51, 48, 51, 128, 65, 51, 48, 50, 128, 65, 51, 48, + 49, 128, 65, 49, 51, 49, 67, 128, 65, 49, 50, 48, 66, 128, 65, 49, 48, + 48, 45, 49, 48, 50, 128, 65, 48, 55, 48, 128, 65, 48, 54, 57, 128, 65, + 48, 54, 56, 128, 65, 48, 54, 55, 128, 65, 48, 54, 54, 128, 65, 48, 54, + 53, 128, 65, 48, 54, 52, 128, 65, 48, 54, 51, 128, 65, 48, 54, 50, 128, + 65, 48, 54, 49, 128, 65, 48, 54, 48, 128, 65, 48, 53, 57, 128, 65, 48, + 53, 56, 128, 65, 48, 53, 55, 128, 65, 48, 53, 54, 128, 65, 48, 53, 53, + 128, 65, 48, 53, 52, 128, 65, 48, 53, 51, 128, 65, 48, 53, 50, 128, 65, + 48, 53, 49, 128, 65, 48, 53, 48, 128, 65, 48, 52, 57, 128, 65, 48, 52, + 56, 128, 65, 48, 52, 55, 128, 65, 48, 52, 54, 128, 65, 48, 52, 53, 65, + 128, 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, 52, 51, 65, 128, + 65, 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, 52, 50, 128, 65, + 48, 52, 49, 128, 65, 48, 52, 48, 65, 128, 65, 48, 52, 48, 128, 65, 48, + 51, 57, 128, 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, 65, 48, 51, 54, + 128, 65, 48, 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, 51, 51, 128, 65, + 48, 51, 50, 65, 128, 65, 48, 50, 56, 66, 128, 65, 48, 49, 55, 65, 128, + 65, 48, 49, 52, 65, 128, 65, 48, 48, 54, 66, 128, 65, 48, 48, 54, 65, + 128, 65, 48, 48, 53, 65, 128, 65, 45, 69, 85, 128, 45, 85, 205, 45, 80, + 72, 82, 85, 128, 45, 75, 72, 89, 85, 196, 45, 75, 72, 89, 73, 76, 128, + 45, 68, 90, 85, 196, 45, 67, 72, 65, 210, 45, 67, 72, 65, 76, 128, }; static unsigned int lexicon_offset[] = { - 0, 0, 6, 10, 18, 23, 27, 34, 39, 41, 47, 50, 62, 70, 80, 93, 102, 108, - 113, 121, 130, 135, 140, 143, 147, 153, 158, 163, 171, 178, 186, 191, - 194, 200, 208, 215, 225, 230, 237, 246, 249, 254, 257, 263, 267, 272, - 281, 288, 295, 301, 310, 315, 321, 327, 335, 144, 341, 349, 350, 358, - 361, 367, 369, 375, 382, 384, 391, 395, 403, 410, 412, 417, 422, 427, - 434, 436, 299, 442, 445, 447, 452, 457, 463, 470, 479, 489, 494, 498, - 505, 518, 522, 531, 538, 545, 548, 554, 558, 562, 572, 580, 588, 596, - 605, 613, 618, 619, 623, 631, 638, 648, 652, 663, 667, 670, 673, 678, - 348, 682, 691, 697, 703, 705, 708, 711, 714, 718, 722, 731, 739, 744, - 747, 751, 757, 764, 771, 776, 785, 794, 801, 805, 818, 827, 835, 841, - 557, 850, 860, 867, 873, 879, 886, 894, 898, 749, 906, 915, 503, 923, - 928, 934, 17, 943, 948, 951, 955, 959, 966, 969, 976, 980, 988, 992, - 1000, 1004, 1007, 1014, 1021, 192, 1024, 1029, 1039, 1048, 1055, 1060, - 1066, 1072, 1080, 1083, 1088, 1094, 1102, 1107, 1110, 1113, 111, 1118, - 1122, 1128, 1134, 1137, 1143, 1147, 1152, 1158, 1168, 1172, 1175, 1178, - 1187, 1191, 1194, 1199, 1204, 1210, 1215, 1220, 1225, 1229, 1234, 1240, - 1245, 1250, 1254, 1260, 1265, 1270, 1275, 1279, 1284, 1289, 1294, 1300, - 1306, 1312, 1317, 1321, 1326, 1331, 1336, 1340, 1345, 1350, 1355, 1360, - 1195, 1200, 1205, 1211, 1216, 1364, 1226, 1370, 1375, 1380, 1387, 1391, - 1400, 1230, 1404, 1235, 1241, 1246, 1408, 1413, 1418, 1422, 1426, 1432, - 1436, 1251, 1439, 1261, 1444, 1448, 1266, 1454, 1271, 1458, 1462, 1276, - 1466, 1471, 1475, 1478, 1482, 1280, 1285, 1487, 1290, 1493, 1499, 1505, - 1511, 1295, 1307, 1313, 1515, 1519, 1523, 1526, 1318, 1530, 1532, 1537, - 1542, 1548, 1553, 1558, 1562, 1567, 1572, 1577, 1582, 1588, 1593, 1598, - 1604, 1610, 1615, 1619, 1624, 1629, 1634, 1639, 1643, 1651, 1655, 1660, - 1665, 1670, 1675, 1679, 1682, 1687, 1692, 1697, 1702, 1708, 1713, 1717, - 1322, 1720, 1725, 1730, 1327, 1734, 1738, 1745, 1332, 1752, 1337, 1756, - 1758, 1763, 1769, 1341, 1774, 1783, 1346, 1788, 1794, 1351, 1799, 1804, - 1807, 1812, 1816, 1820, 1824, 1827, 1831, 1356, 1361, 1058, 1836, 1842, - 1848, 1854, 1860, 1866, 1872, 1878, 1884, 1889, 1895, 1901, 1907, 1913, - 1919, 1925, 1931, 1937, 1943, 1948, 1953, 1958, 1963, 1968, 1973, 1978, - 1983, 1988, 1993, 1999, 2004, 2010, 2015, 2021, 2027, 2032, 2038, 2044, - 2050, 2056, 2061, 2066, 2068, 2069, 2073, 2077, 2082, 2086, 2090, 2094, - 2099, 2103, 2106, 2111, 2115, 2120, 2124, 2128, 2133, 2137, 2140, 2144, - 2150, 2164, 2168, 2172, 2176, 2179, 2184, 2188, 2192, 2195, 2199, 2204, - 2209, 2214, 2219, 2223, 2227, 2231, 2236, 2240, 2245, 2249, 2254, 2260, - 2267, 2273, 2278, 2283, 2288, 2294, 2299, 2305, 2310, 2313, 1212, 2315, - 2322, 2330, 2340, 2349, 2363, 2367, 2371, 2384, 2392, 2396, 2401, 2405, - 2408, 2412, 2416, 2421, 2426, 2431, 2435, 2438, 2442, 2449, 2456, 2462, - 2467, 2472, 2478, 2484, 2489, 2492, 1760, 2494, 2500, 2504, 2509, 2513, - 2517, 1765, 1771, 2522, 2526, 2529, 2534, 2539, 2544, 2549, 2553, 2560, - 2565, 2568, 2575, 2581, 2585, 2589, 2593, 2598, 2605, 2610, 2615, 2622, - 2628, 2634, 2640, 2654, 2671, 2686, 2701, 2710, 2715, 2719, 2724, 2729, - 2733, 2745, 2752, 2758, 2263, 2764, 2771, 2777, 2781, 2784, 2791, 2797, - 2801, 2805, 2809, 2091, 2813, 2818, 2823, 2827, 2835, 2839, 2843, 2847, - 2851, 2856, 2861, 2866, 2870, 2875, 2880, 2884, 2889, 2893, 2896, 2900, - 2904, 2912, 2917, 2921, 2925, 2931, 2940, 2944, 2948, 2954, 2959, 2966, - 2970, 2980, 2984, 2988, 2993, 2997, 3002, 3008, 3013, 3017, 3021, 3025, - 2452, 3033, 3038, 3044, 3049, 3053, 3058, 3063, 3067, 3073, 3078, 2095, - 3084, 3090, 3095, 3100, 3105, 3110, 3115, 3120, 3125, 3130, 3135, 3141, - 3146, 1227, 92, 3152, 3156, 3160, 3164, 3169, 3173, 3177, 3181, 3185, - 3190, 3194, 3199, 3203, 3206, 3210, 3215, 3219, 3224, 3228, 3232, 3236, - 3241, 3245, 3248, 3261, 3265, 3269, 3273, 3277, 3281, 3284, 3288, 3292, - 3297, 3301, 3306, 3311, 3316, 3320, 3323, 3326, 3332, 3336, 3340, 3343, - 3347, 3351, 3354, 3360, 3365, 3370, 3376, 3381, 3386, 3392, 3398, 3403, - 3408, 3413, 1120, 547, 3418, 3421, 3426, 3430, 3433, 3437, 3442, 3447, - 3451, 3456, 3460, 3465, 3469, 3473, 3479, 3485, 3488, 3491, 3497, 3504, - 3511, 3517, 3524, 3529, 3533, 3540, 3547, 3552, 3556, 3566, 3570, 3574, - 3579, 3584, 3594, 2107, 3599, 3603, 3606, 3612, 3617, 3623, 3629, 3634, - 3641, 3645, 3649, 620, 671, 1388, 3653, 3660, 3667, 3674, 3681, 3687, - 3693, 3698, 3702, 3708, 3713, 3717, 2116, 3721, 3729, 600, 3735, 3746, - 3750, 3760, 2121, 3766, 3771, 3786, 3792, 3799, 3809, 3815, 3820, 3826, - 3832, 3835, 3839, 3844, 3851, 3856, 3860, 3864, 3868, 3872, 3877, 3883, - 3894, 3211, 3899, 3911, 3919, 3924, 1564, 3931, 3934, 3937, 3941, 3944, - 3950, 3954, 3968, 3972, 3975, 3979, 3985, 3991, 3996, 4000, 4004, 4010, - 4021, 4027, 4032, 4038, 4042, 4050, 4060, 4066, 4071, 4080, 4088, 4095, - 4099, 4105, 4114, 4123, 4127, 4132, 4137, 4141, 4149, 4153, 4158, 4162, - 2129, 1401, 4168, 4173, 4179, 4184, 4189, 4194, 4199, 4204, 4209, 4215, - 4220, 4226, 4231, 4236, 4241, 4247, 4252, 4257, 4262, 4267, 4273, 4278, - 4284, 4289, 4294, 4299, 4304, 4309, 4314, 4320, 4325, 4330, 319, 456, - 4335, 4341, 4345, 4349, 4354, 4358, 4362, 4365, 4369, 4373, 4377, 4381, - 4386, 4390, 4394, 4400, 4165, 4405, 4409, 4412, 4417, 4422, 4427, 4432, - 4437, 4442, 4447, 4452, 4457, 4462, 4466, 4471, 4476, 4481, 4486, 4491, - 4496, 4501, 4506, 4511, 4516, 4520, 4525, 4530, 4535, 4540, 4545, 4550, - 4555, 4560, 4565, 4570, 4574, 4579, 4584, 4589, 4594, 4599, 4604, 4609, - 4614, 4619, 4624, 4628, 4633, 4638, 4643, 4648, 4653, 4658, 4663, 4668, - 4673, 4678, 4682, 4687, 4692, 4697, 4702, 4707, 4712, 4717, 4722, 4727, - 4732, 4736, 4741, 4746, 4751, 4756, 4761, 4766, 4771, 4776, 4781, 4786, - 4790, 4795, 4800, 4805, 4810, 4816, 4822, 4828, 4834, 4840, 4846, 4852, - 4857, 4863, 4869, 4875, 4881, 4887, 4893, 4899, 4905, 4911, 4917, 4922, - 4928, 4934, 4940, 4946, 4952, 4958, 4964, 4970, 4976, 4982, 4987, 4993, - 4999, 5005, 5011, 5017, 5023, 5029, 5035, 5041, 5047, 5052, 5058, 5064, - 5070, 5076, 5082, 5088, 5094, 5100, 5106, 5112, 5117, 5123, 5129, 5135, - 5141, 5147, 5153, 5159, 5165, 5171, 5177, 5182, 5186, 5192, 5198, 5204, - 5210, 5216, 5222, 5228, 5234, 5240, 5246, 5251, 5257, 5263, 5269, 5275, - 5281, 5287, 5293, 5299, 5305, 5311, 5316, 5322, 5328, 5334, 5340, 5346, - 5352, 5358, 5364, 5370, 5376, 5381, 5387, 5393, 5399, 5405, 5411, 5417, - 5423, 5429, 5435, 5441, 5446, 5452, 5458, 5464, 5470, 5476, 5482, 5488, - 5494, 5500, 5506, 5511, 5517, 5523, 5529, 5535, 5541, 5547, 5553, 5559, - 5565, 5571, 5576, 5582, 5588, 5594, 5600, 5606, 5612, 5618, 5624, 5630, - 5636, 5641, 5647, 5653, 5659, 5665, 5671, 5677, 5683, 5689, 5695, 5701, - 5706, 5712, 5718, 5724, 5730, 5736, 5742, 5748, 5754, 5760, 5766, 5771, - 5777, 5783, 5789, 5795, 5801, 5807, 5813, 5819, 5825, 5831, 5836, 5840, - 5843, 5850, 5854, 5867, 5871, 5875, 5879, 5883, 5887, 5891, 5897, 5904, - 5912, 5916, 5924, 5933, 5939, 5951, 5956, 5959, 5963, 5973, 5981, 5989, - 5995, 5999, 6009, 6019, 6027, 6034, 6041, 6047, 6053, 6060, 6064, 6071, - 6081, 6091, 6099, 6106, 6111, 6115, 6123, 6127, 6132, 6139, 6147, 6152, - 6157, 6161, 6168, 6173, 6187, 6192, 6197, 6204, 6213, 6216, 6220, 6224, - 6228, 6231, 6236, 6241, 6250, 6256, 6262, 6268, 6272, 6283, 6293, 6308, - 6323, 6338, 6353, 6368, 6383, 6398, 6413, 6428, 6443, 6458, 6473, 6488, - 6503, 6518, 6533, 6548, 6563, 6578, 6593, 6608, 6623, 6638, 6653, 6668, - 6683, 6698, 6713, 6728, 6743, 6758, 6773, 6788, 6803, 6818, 6833, 6848, - 6863, 6878, 6893, 6908, 6923, 6938, 6953, 6968, 6983, 6998, 7013, 7028, - 7037, 7046, 7051, 7057, 7067, 7071, 7076, 7081, 7089, 7093, 7096, 7100, - 2975, 7103, 7108, 298, 425, 7114, 7122, 7126, 7130, 7133, 7137, 7143, - 7147, 7155, 7161, 7166, 7173, 7180, 7186, 7191, 7198, 7204, 7212, 7216, - 7221, 7233, 7244, 7251, 7255, 7259, 7265, 3233, 7269, 7275, 7280, 7285, - 7290, 7296, 7301, 7306, 7311, 7316, 7322, 7327, 7332, 7338, 7343, 7349, - 7354, 7360, 7365, 7371, 7376, 7381, 7386, 7391, 7396, 7402, 7407, 7412, - 7417, 7423, 7429, 7435, 7441, 7447, 7453, 7459, 7465, 7471, 7477, 7483, - 7489, 7494, 7499, 7504, 7509, 7514, 7519, 7524, 7529, 7535, 7541, 7546, - 7552, 7558, 7564, 7569, 7574, 7579, 7584, 7590, 7596, 7601, 7606, 7611, - 7616, 7621, 7627, 7632, 7638, 7644, 7650, 7656, 7662, 7668, 7674, 7680, - 7686, 2138, 7132, 7691, 7695, 7699, 7702, 7709, 7712, 7720, 7725, 7730, - 7721, 7735, 2165, 7739, 7745, 7751, 7756, 7761, 7768, 7776, 7781, 7785, - 7788, 7792, 7798, 7804, 7808, 2173, 560, 7811, 7815, 7820, 7826, 7831, - 7835, 7838, 7842, 7848, 7853, 7857, 7864, 7868, 7872, 7876, 945, 769, - 7879, 7887, 7894, 7901, 7907, 7914, 7922, 7929, 7936, 7941, 7953, 1247, - 1409, 1414, 7964, 1419, 7968, 7972, 7981, 7989, 7998, 8004, 8009, 8013, - 8019, 8024, 2706, 8031, 8035, 8044, 8053, 8062, 8071, 8076, 8081, 8093, - 8098, 8106, 2224, 8110, 8112, 8117, 8121, 8130, 8138, 1423, 133, 3461, - 3466, 8144, 8148, 8157, 8163, 8168, 8171, 8180, 2698, 8186, 8194, 8198, - 8202, 8206, 2237, 8210, 8215, 8222, 8228, 8234, 8237, 8239, 8242, 8250, - 8258, 8266, 8269, 8274, 2250, 8279, 7732, 8282, 8284, 8289, 8294, 8299, - 8304, 8309, 8314, 8319, 8324, 8329, 8334, 8340, 8345, 8350, 8355, 8361, - 8366, 8371, 8376, 8381, 8386, 8391, 8397, 8402, 8407, 8412, 8417, 8422, - 8427, 8432, 8437, 8442, 8447, 8452, 8457, 8462, 8467, 8472, 8477, 8482, - 8488, 8494, 8499, 8504, 8509, 8514, 8519, 2261, 2268, 2274, 8524, 8530, - 8538, 2300, 2306, 8546, 8550, 8555, 8559, 8563, 8567, 8572, 8576, 8581, - 8585, 8588, 8591, 8597, 8603, 8609, 8615, 8621, 8627, 8633, 8637, 8641, - 8645, 8649, 8653, 8658, 8665, 8676, 8684, 8694, 8700, 8707, 8712, 8716, - 8727, 8740, 8751, 8764, 8775, 8787, 8799, 8811, 8824, 8837, 8844, 8850, - 8864, 8871, 8877, 8881, 8886, 8890, 8897, 8905, 8909, 8915, 8919, 8925, - 8935, 8939, 8944, 8949, 8956, 8962, 8972, 7909, 8978, 8982, 8989, 8996, - 768, 9000, 9004, 9009, 9014, 9019, 9023, 9029, 9037, 9043, 9047, 9053, - 9063, 9067, 9073, 9078, 9082, 9088, 9094, 2161, 9099, 9101, 9106, 9114, - 9123, 9127, 9133, 9138, 9143, 9148, 9153, 9159, 9164, 9169, 4006, 9174, - 9179, 9183, 9189, 9194, 9200, 9205, 9210, 9216, 9221, 9128, 9227, 9231, - 9238, 9244, 9249, 9253, 6183, 9258, 9267, 9272, 9277, 8218, 8225, 9282, - 2853, 9286, 9291, 9296, 9139, 9300, 9305, 9144, 9149, 9310, 9317, 9324, - 9330, 9336, 9342, 9347, 9352, 9357, 9154, 9160, 9363, 9369, 9374, 9382, - 9165, 9387, 990, 9390, 9398, 9404, 9410, 9419, 9427, 9432, 9438, 9446, - 9453, 9468, 9485, 9504, 9513, 9521, 9536, 9547, 9557, 9567, 9575, 9581, - 9593, 9602, 9610, 9617, 9624, 9630, 9635, 9643, 9653, 9660, 9670, 9680, - 9690, 9698, 9705, 9714, 9724, 9738, 9753, 9762, 9770, 9775, 9779, 9788, - 9794, 9799, 9809, 9819, 9829, 9834, 9838, 9847, 9852, 9862, 9873, 9886, - 9894, 9907, 9919, 9927, 9932, 9936, 9942, 9947, 9955, 9963, 9970, 9975, - 9983, 9989, 9992, 9996, 10002, 10010, 10015, 10019, 10027, 10036, 10044, - 10050, 10054, 10061, 10072, 10076, 10079, 10085, 9170, 10090, 10096, - 10103, 10109, 10114, 10121, 10128, 10135, 10142, 10149, 10156, 10163, - 10170, 10175, 9481, 10180, 10186, 10193, 10200, 10205, 10212, 10221, - 10225, 10237, 8256, 10241, 10244, 10248, 10252, 10256, 10260, 10266, - 10272, 10277, 10283, 10288, 10293, 10299, 10304, 10309, 8952, 10314, - 10318, 10322, 10326, 10331, 10336, 10344, 10350, 10354, 10358, 10365, - 10370, 10378, 10383, 10387, 10390, 10396, 10403, 10407, 10410, 10415, - 10419, 4045, 10425, 10434, 36, 10442, 10448, 10453, 8967, 10458, 10463, - 10467, 10470, 10485, 10504, 10516, 10529, 10542, 10555, 10569, 10582, - 10597, 10604, 9175, 10610, 10624, 10629, 10635, 10640, 10648, 10653, - 8040, 10658, 10661, 10668, 10673, 10677, 2858, 998, 10683, 10687, 10693, - 10699, 10704, 10710, 10715, 9184, 10721, 10727, 10732, 10737, 10745, - 10751, 10764, 10772, 10779, 9190, 10785, 10793, 10801, 10808, 10821, - 10833, 10843, 10851, 10858, 10865, 10874, 10883, 10891, 10898, 10903, - 10909, 9195, 10914, 10920, 9201, 10925, 10928, 10935, 10941, 10954, 8669, - 10965, 10971, 10980, 10988, 10995, 11001, 11007, 11012, 11016, 11021, - 10477, 11027, 9206, 11034, 11039, 11046, 11052, 11058, 11063, 11071, - 11079, 11086, 11090, 11104, 11114, 11119, 11123, 11134, 11140, 11145, - 11150, 9211, 9217, 11154, 11157, 11162, 11174, 11181, 11186, 11190, - 11195, 11199, 11206, 11212, 9222, 9129, 11219, 2863, 8, 11226, 11231, - 11235, 11241, 11249, 11259, 11264, 11269, 11276, 11283, 11287, 11298, - 11308, 11317, 11329, 11334, 11338, 11346, 11360, 11364, 11367, 11375, - 11382, 11390, 11394, 11405, 11409, 11416, 11421, 11425, 11431, 11436, - 11440, 11446, 11451, 11462, 11466, 11469, 11475, 11480, 11486, 11492, - 11499, 11510, 11520, 11530, 11539, 11546, 11555, 9232, 9239, 9245, 9250, - 11561, 11567, 9254, 11573, 11576, 11583, 11588, 11603, 11619, 11634, - 11642, 11648, 11653, 838, 420, 11658, 11666, 11673, 11679, 11684, 11689, - 9259, 11691, 11695, 11700, 11704, 11714, 11719, 11723, 11732, 11736, - 11739, 9268, 11746, 11749, 11757, 11764, 11772, 11776, 11783, 11792, - 11795, 11799, 11803, 11809, 11813, 11817, 11821, 11827, 11837, 11841, - 11849, 11853, 11860, 11864, 11869, 11873, 11880, 11886, 11894, 11900, - 11905, 11915, 11920, 11925, 11929, 11937, 3905, 11945, 11950, 9273, - 11954, 11958, 11961, 11969, 11976, 11980, 5991, 11984, 11989, 11993, - 12004, 12014, 12019, 12025, 12029, 12032, 12040, 12045, 12050, 12057, - 12062, 9278, 12067, 12071, 12078, 1722, 6145, 12083, 12088, 12093, 12098, - 12104, 12109, 12115, 12120, 12125, 12130, 12135, 12140, 12145, 12150, - 12155, 12160, 12165, 12170, 12175, 12180, 12185, 12190, 12195, 12201, - 12206, 12211, 12216, 12221, 12226, 12232, 12237, 12242, 12248, 12253, - 12259, 12264, 12270, 12275, 12280, 12285, 12290, 12296, 12301, 12306, - 12311, 737, 139, 12319, 12323, 12328, 12333, 12337, 12341, 12345, 12350, - 12354, 12359, 12363, 12366, 12370, 12374, 12380, 12385, 12395, 12401, - 12409, 12413, 12417, 12424, 12432, 12441, 12452, 12459, 12466, 12470, - 12479, 12488, 12496, 12505, 12514, 12523, 12532, 12542, 12552, 12562, - 12572, 12582, 12591, 12601, 12611, 12621, 12631, 12641, 12651, 12661, - 12670, 12680, 12690, 12700, 12710, 12720, 12730, 12739, 12749, 12759, - 12769, 12779, 12789, 12799, 12809, 12819, 12829, 12838, 12848, 12858, - 12868, 12878, 12888, 12898, 12908, 12918, 12928, 12938, 12947, 1256, - 12953, 12956, 12960, 12965, 12972, 12978, 12983, 12987, 12992, 13001, - 13009, 13014, 13018, 13022, 13028, 13033, 13039, 9287, 13044, 13049, - 13058, 9292, 13063, 13066, 13072, 13080, 9297, 13087, 13091, 13095, - 13099, 13109, 13115, 13121, 13126, 13135, 13143, 13150, 13157, 13162, - 13169, 13174, 13178, 13181, 13192, 13202, 13211, 13219, 13230, 13242, - 13252, 13257, 13261, 13266, 13271, 13275, 13281, 13289, 13296, 13307, - 13312, 13322, 13326, 13329, 13336, 13346, 13355, 13362, 13366, 13373, - 13379, 13384, 13389, 13393, 13402, 13407, 13413, 13417, 13422, 13426, - 13435, 13443, 13451, 13458, 13466, 13478, 13489, 13499, 13506, 13512, - 13521, 13532, 13541, 13553, 13565, 13577, 13587, 13596, 13605, 13613, - 13620, 13629, 13637, 13641, 13647, 13653, 13658, 7753, 13662, 13664, - 13668, 13673, 13679, 13688, 13692, 13698, 13706, 13713, 13722, 13731, - 13740, 13749, 13758, 13767, 13776, 13785, 13795, 13805, 13814, 13820, - 13827, 13834, 13840, 13854, 13861, 13869, 13878, 13884, 13893, 13902, - 13913, 13923, 13931, 13938, 13946, 13955, 13968, 13976, 13983, 13996, - 14002, 14008, 14018, 14027, 14036, 14041, 14045, 14051, 14057, 14064, - 8966, 14069, 14074, 14081, 14086, 12376, 14091, 14099, 14105, 14110, - 14118, 14126, 14133, 14141, 14147, 14155, 14163, 14169, 14174, 14180, - 14187, 14193, 14198, 14202, 14213, 14221, 14227, 14232, 14241, 14247, - 14252, 14261, 14275, 3853, 14279, 14284, 14289, 14295, 14300, 14305, - 14309, 14314, 14319, 14324, 7752, 14329, 14334, 14339, 14344, 14349, - 14353, 14358, 14363, 14368, 14373, 14379, 14385, 14390, 14394, 14399, - 14404, 14409, 9301, 14414, 14419, 14424, 14429, 14434, 14451, 14469, - 14481, 14494, 14511, 14527, 14544, 14554, 14573, 14584, 14595, 14606, - 14617, 14629, 14640, 14651, 14668, 14679, 14690, 14695, 9306, 14700, - 14704, 2381, 14708, 14711, 14717, 14725, 14733, 14738, 14746, 14754, - 14761, 14766, 14772, 14779, 14787, 14794, 14806, 14814, 14819, 11597, - 14825, 14834, 14843, 14851, 14858, 14864, 14872, 14879, 14885, 14892, - 14898, 14907, 14915, 14925, 14932, 14938, 14946, 14952, 14960, 14967, - 14980, 14987, 14996, 15005, 15014, 15022, 15032, 15039, 15044, 3560, - 15051, 15056, 1372, 15060, 14330, 15064, 15070, 15074, 15082, 15094, - 15099, 15106, 15112, 15117, 15124, 14335, 15128, 15132, 15136, 14340, - 15140, 14345, 15144, 15151, 15156, 15160, 15167, 15171, 15179, 15186, - 15190, 15197, 15214, 15223, 15227, 15230, 15238, 15244, 15249, 3638, - 15253, 15255, 15263, 15270, 15280, 15292, 15297, 15303, 15308, 15312, - 15318, 15323, 15329, 15332, 15339, 15347, 15354, 15360, 15366, 15371, - 15378, 15384, 15389, 15396, 15400, 15406, 15410, 15417, 15423, 15429, - 15437, 15443, 15448, 15454, 15462, 15470, 15476, 15482, 15487, 15494, - 15499, 15503, 15509, 15514, 15521, 15526, 15532, 15535, 15541, 15547, - 15550, 15554, 15566, 15572, 15577, 15584, 15590, 15596, 15607, 15617, - 15626, 15634, 15641, 15652, 15662, 15672, 15680, 15683, 14359, 15688, - 15693, 14364, 14499, 15701, 15714, 15729, 15740, 14516, 15758, 15771, - 15784, 15795, 10492, 15806, 15819, 15838, 15849, 15860, 15871, 2649, - 15884, 15888, 15896, 15911, 15926, 15937, 15944, 15950, 15958, 15962, - 15968, 15971, 15981, 15989, 15996, 16004, 16014, 16019, 16026, 16031, - 16038, 16049, 16059, 16065, 16070, 16075, 14369, 16079, 16085, 16091, - 16096, 16101, 16106, 16110, 14374, 14380, 16114, 14386, 16119, 16127, - 16136, 16143, 9150, 16147, 16149, 16154, 16159, 16165, 16170, 16175, - 16180, 16185, 16189, 16195, 16201, 16206, 16212, 16217, 16222, 16228, - 16233, 16238, 16243, 16248, 16254, 16259, 16264, 16270, 16276, 16281, - 16286, 16293, 16299, 16310, 16317, 16322, 16326, 16330, 16333, 16341, - 16346, 16353, 16360, 16366, 16371, 16376, 16383, 16393, 16398, 16405, - 16411, 16421, 16431, 16445, 16459, 16473, 16487, 16502, 16517, 16534, - 16552, 16565, 16571, 16576, 16581, 16585, 16590, 16598, 16604, 16609, - 16614, 16618, 16623, 16627, 16632, 16636, 16647, 16653, 16658, 16663, - 16670, 16675, 16679, 16684, 16689, 16695, 16702, 16708, 16713, 16717, - 16723, 16728, 16733, 16737, 16743, 16748, 16753, 16760, 16765, 13111, - 16769, 16774, 16778, 16783, 16789, 16795, 16802, 16812, 16820, 16827, - 16832, 16836, 16845, 16853, 16860, 16867, 16873, 16879, 16884, 16889, - 16895, 16900, 16906, 16911, 16917, 16923, 16930, 16936, 16941, 16946, - 9348, 16955, 16958, 16964, 16969, 16974, 16984, 16991, 16997, 17002, - 17007, 17013, 17018, 17024, 17029, 17035, 17041, 17046, 17054, 17061, - 17066, 17071, 17077, 17082, 17086, 17095, 17106, 17113, 17118, 17126, - 17132, 17139, 17145, 17150, 17154, 17160, 17165, 17170, 17175, 1440, - 7777, 2877, 17179, 17183, 17187, 17191, 17195, 17199, 17202, 17209, - 17217, 14400, 17224, 17234, 17242, 17249, 17257, 17267, 17276, 17289, - 17294, 17299, 17307, 17314, 13207, 13216, 17321, 17331, 17346, 17352, - 17359, 17366, 17372, 17380, 17390, 17400, 14405, 17409, 17415, 17421, - 17429, 17437, 17442, 17451, 17459, 17471, 17481, 17491, 17501, 17510, - 17522, 17532, 17542, 17553, 17558, 17570, 17582, 17594, 17606, 17618, - 17630, 17642, 17654, 17666, 17678, 17689, 17701, 17713, 17725, 17737, - 17749, 17761, 17773, 17785, 17797, 17809, 17820, 17832, 17844, 17856, - 17868, 17880, 17892, 17904, 17916, 17928, 17940, 17951, 17963, 17975, - 17987, 17999, 18011, 18023, 18035, 18047, 18059, 18071, 18082, 18094, - 18106, 18118, 18130, 18142, 18154, 18166, 18178, 18190, 18202, 18213, - 18225, 18237, 18249, 18261, 18273, 18285, 18297, 18309, 18321, 18333, - 18344, 18356, 18368, 18380, 18392, 18404, 18416, 18428, 18440, 18452, - 18464, 18475, 18487, 18499, 18511, 18523, 18536, 18549, 18562, 18575, - 18588, 18601, 18614, 18626, 18639, 18652, 18665, 18678, 18691, 18704, - 18717, 18730, 18743, 18756, 18768, 18781, 18794, 18807, 18820, 18833, - 18846, 18859, 18872, 18885, 18898, 18910, 18923, 18936, 18949, 18962, - 18975, 18988, 19001, 19014, 19027, 19040, 19052, 19065, 19078, 19091, - 19104, 19117, 19130, 19143, 19156, 19169, 19182, 19194, 19207, 19220, - 19233, 19246, 19259, 19272, 19285, 19298, 19311, 19324, 19336, 19347, - 19360, 19373, 19386, 19399, 19412, 19425, 19438, 19451, 19464, 19477, - 19489, 19502, 19515, 19528, 19541, 19554, 19567, 19580, 19593, 19606, - 19619, 19631, 19644, 19657, 19670, 19683, 19696, 19709, 19722, 19735, - 19748, 19761, 19773, 19786, 19799, 19812, 19825, 19838, 19851, 19864, - 19877, 19890, 19903, 19915, 19928, 19941, 19954, 19967, 19980, 19993, - 20006, 20019, 20032, 20045, 20057, 20070, 20083, 20096, 20109, 20122, - 20135, 20148, 20161, 20174, 20187, 20199, 20212, 20225, 20238, 20251, - 20264, 20277, 20290, 20303, 20316, 20329, 20341, 20354, 20367, 20380, - 20393, 20406, 20419, 20432, 20445, 20458, 20471, 20483, 20496, 20509, - 20522, 20535, 20548, 20561, 20574, 20587, 20600, 20613, 20625, 20638, - 20651, 20664, 20677, 20690, 20703, 20716, 20729, 20742, 20755, 20767, - 20778, 20786, 20794, 20801, 20807, 20811, 20817, 20823, 20831, 20837, - 20842, 20846, 20855, 9155, 20866, 20873, 20881, 20888, 20895, 10948, - 20902, 20911, 20916, 20921, 7805, 20928, 20933, 20936, 20941, 20949, - 20956, 20963, 20970, 20976, 20985, 20994, 21000, 21009, 21013, 21019, - 21024, 21034, 21041, 21047, 21055, 21061, 21068, 21078, 21087, 21091, - 21098, 21102, 21107, 21113, 21121, 21125, 21135, 14415, 21144, 21150, - 21154, 21163, 14420, 21169, 21176, 21187, 21195, 21204, 21212, 8931, - 21220, 21225, 21231, 21236, 21240, 21244, 21248, 9639, 21253, 21261, - 21268, 21277, 21284, 21291, 10878, 21298, 21304, 21308, 21314, 21321, - 21327, 21335, 21341, 21348, 21354, 21360, 21369, 21373, 21381, 21390, - 21397, 21402, 21406, 21417, 21422, 21427, 21432, 21445, 7995, 21449, - 21455, 21463, 21467, 21474, 21483, 21488, 14691, 21496, 21500, 21512, - 21517, 21521, 21524, 21530, 21536, 21541, 21545, 21548, 21559, 21564, - 9383, 21571, 21576, 9388, 21581, 21586, 21591, 21596, 21601, 21606, - 21611, 21616, 21621, 21626, 21631, 21636, 21642, 21647, 21652, 21657, - 21662, 21667, 21672, 21677, 21682, 21687, 21693, 21699, 21704, 21709, - 21714, 21719, 21724, 21729, 21734, 21739, 21744, 21750, 21755, 21760, - 21765, 21771, 21777, 21782, 21787, 21792, 21797, 21802, 21807, 21812, - 21817, 21823, 21828, 21833, 21838, 21843, 21849, 21854, 21859, 21863, - 1368, 129, 21871, 21875, 21879, 21883, 21888, 21892, 13117, 12476, 21896, - 21901, 21905, 21910, 21914, 21919, 21923, 21929, 21934, 21938, 21942, - 21950, 21954, 21958, 21963, 21968, 21972, 21978, 21983, 21987, 21992, - 21997, 22001, 22008, 22015, 22022, 22026, 22030, 22035, 22039, 22042, - 22048, 22061, 22066, 22075, 22080, 9428, 22085, 22088, 2712, 2717, 22092, - 22098, 22104, 7209, 22109, 22114, 22119, 22125, 22130, 13909, 22135, - 22140, 22145, 22150, 22156, 22161, 22166, 22172, 22177, 22181, 22186, - 22191, 22196, 22201, 22205, 22210, 22214, 22219, 22224, 22229, 22234, - 22238, 22243, 22247, 22252, 22257, 22262, 22267, 2886, 22182, 22271, - 22279, 22286, 9733, 22298, 22306, 22187, 22313, 22318, 22326, 22192, - 22331, 22336, 22344, 22349, 22197, 22354, 22359, 22363, 22369, 22377, - 22380, 22387, 22391, 22395, 22401, 22408, 22413, 8958, 1727, 1732, 22417, - 22423, 22429, 22434, 22438, 22442, 22446, 22450, 22454, 22458, 22462, - 22466, 22469, 22475, 22482, 22490, 22496, 22502, 22507, 22512, 22516, - 13829, 13836, 22521, 22533, 22536, 22543, 16362, 22550, 22558, 22569, - 22578, 22591, 22601, 22615, 22627, 22641, 22653, 22663, 22675, 22681, - 22696, 22720, 22738, 22757, 22770, 22784, 22802, 22818, 22835, 22853, - 22864, 22883, 22900, 22920, 22938, 22950, 22964, 22978, 22990, 23007, - 23026, 23044, 23056, 23074, 23093, 14559, 23106, 23126, 23138, 10523, - 23150, 23155, 23160, 23165, 23171, 23176, 23180, 23187, 2398, 23191, - 23197, 23201, 23204, 23208, 23216, 23222, 22215, 23226, 23235, 23246, - 23252, 23258, 23267, 23275, 23282, 23287, 23291, 23298, 23304, 23313, - 23321, 23328, 23338, 23347, 23357, 23362, 23371, 23380, 23391, 23402, - 3963, 23412, 23416, 23426, 23434, 23444, 23455, 23460, 23470, 23478, - 23485, 23491, 23498, 23503, 22225, 23507, 23516, 23520, 23523, 23528, - 23535, 23544, 23552, 23560, 23570, 23579, 23585, 23591, 22230, 22235, - 23595, 23605, 23615, 23625, 23633, 23640, 23650, 23658, 23666, 23672, - 23680, 930, 23689, 14750, 542, 23703, 23712, 23720, 23731, 23742, 23752, - 23761, 23773, 23782, 23791, 23797, 23806, 23815, 23825, 23833, 23841, - 9360, 23847, 23850, 23854, 23859, 23864, 9848, 22248, 22253, 23872, - 23878, 23884, 23889, 23894, 23898, 23906, 23912, 23918, 23922, 3525, - 23930, 23935, 23940, 23944, 23948, 9928, 23955, 23963, 23977, 23984, - 23990, 9937, 9943, 23998, 24006, 24013, 24018, 24023, 22258, 24029, - 24040, 24044, 24049, 2601, 24054, 24065, 24071, 24076, 24080, 24084, - 24087, 24094, 24101, 24108, 24114, 24118, 22263, 24123, 24127, 24131, - 1037, 24136, 24141, 24146, 24151, 24156, 24161, 24166, 24171, 24176, - 24181, 24186, 24191, 24196, 24201, 24207, 24212, 24217, 24222, 24227, - 24232, 24237, 24243, 24248, 24253, 24258, 24263, 24268, 24273, 24278, - 24284, 24290, 24295, 24301, 24306, 24311, 5, 24317, 24321, 24325, 24329, - 24334, 24338, 24342, 24346, 24350, 24355, 24359, 24364, 24368, 24371, - 24375, 24380, 24384, 24389, 24393, 24397, 24401, 24406, 24410, 24414, - 24424, 24429, 24433, 24437, 24442, 24447, 24456, 24461, 24466, 24470, - 24474, 24487, 24499, 24508, 24517, 24523, 24528, 24532, 24536, 24546, - 24555, 24563, 24569, 24574, 24578, 24585, 24595, 24604, 24612, 24620, - 24627, 24635, 24644, 24653, 24661, 24666, 24670, 24674, 24677, 24679, - 24683, 24687, 24692, 24697, 24701, 24705, 24708, 24712, 24715, 24719, - 24722, 24725, 24729, 24735, 24739, 24743, 24747, 24752, 24757, 24762, - 24766, 24769, 24774, 24780, 24785, 24791, 24796, 24800, 24804, 24808, - 24813, 24817, 24822, 24826, 24830, 24837, 24841, 24844, 24848, 24854, - 24860, 24864, 24868, 24873, 24880, 24886, 24890, 24899, 24903, 24907, - 24910, 24916, 24921, 24927, 1489, 1791, 24932, 24937, 24942, 24947, - 24952, 24957, 24962, 2148, 2194, 24967, 24970, 24974, 24978, 24983, - 24987, 24991, 24994, 24999, 25004, 25008, 25011, 25016, 25020, 25025, - 25029, 14762, 25034, 25037, 25040, 25044, 25049, 25053, 25066, 25070, - 25073, 25081, 25090, 25097, 25102, 25108, 25114, 25122, 25129, 25136, - 25140, 25144, 25148, 25153, 25158, 25162, 25170, 25175, 25187, 25198, - 25203, 25207, 25211, 25217, 25222, 25227, 25231, 25235, 25238, 25244, - 7915, 2316, 25248, 25253, 25269, 9475, 25289, 25298, 25314, 25318, 25321, - 25327, 25337, 25343, 25352, 25367, 25379, 25390, 25398, 25407, 25413, - 25422, 25432, 25443, 25454, 25463, 25470, 25479, 25487, 25494, 25502, - 25509, 25516, 25529, 25536, 25542, 25547, 25556, 25562, 25567, 25575, - 25582, 23436, 25594, 25606, 25620, 25628, 25635, 25647, 25656, 25665, - 25673, 25681, 25689, 25696, 25705, 25713, 25723, 25732, 25742, 25751, - 25760, 25768, 25773, 25777, 25780, 25784, 25788, 25792, 25796, 25800, - 25806, 25812, 25820, 14807, 25827, 25832, 25839, 25845, 25852, 14815, - 25859, 25862, 25874, 25882, 25888, 25893, 25897, 9878, 25908, 25918, - 25927, 25934, 25938, 14820, 25941, 25948, 25952, 25958, 25961, 25968, - 25974, 25981, 25987, 25991, 25996, 26000, 26009, 26016, 26022, 7956, - 26029, 26037, 26044, 26050, 26055, 26061, 26067, 26075, 26079, 26082, - 26084, 25785, 26093, 26099, 26109, 26114, 26121, 26127, 26132, 26137, - 26142, 26146, 26151, 26158, 26167, 26171, 26178, 26187, 26193, 26198, - 26204, 26209, 26216, 26227, 26232, 26236, 26246, 26252, 26256, 26261, - 26271, 26280, 26284, 26291, 26299, 26306, 26312, 26317, 26325, 26332, - 26344, 26353, 26357, 13053, 26365, 26375, 26379, 25077, 26390, 26395, - 26399, 26406, 26413, 21974, 25710, 26418, 26422, 26425, 22870, 26430, - 26444, 26460, 26478, 26497, 26514, 26532, 22889, 26549, 26569, 22906, - 26581, 26593, 15745, 26605, 22926, 26619, 26631, 10536, 26645, 26650, - 26655, 26660, 26666, 26672, 26678, 26682, 26689, 26694, 26704, 26710, - 10183, 26716, 26718, 26723, 26731, 26735, 26154, 26741, 26748, 11524, - 11534, 26755, 26765, 26770, 26774, 26777, 26783, 26791, 26803, 26813, - 26829, 26842, 26856, 15763, 26870, 26877, 26881, 26884, 26889, 26893, - 26900, 26907, 26917, 26922, 26927, 26932, 26940, 26948, 26957, 26962, - 9572, 26966, 26969, 26972, 26977, 26984, 26989, 27005, 27013, 27021, - 9423, 27029, 27034, 27038, 27044, 27050, 27053, 27059, 27071, 27079, - 27086, 27092, 27099, 27110, 27124, 27137, 27146, 27155, 27167, 27178, - 27188, 27197, 27206, 27214, 27225, 7938, 27232, 27238, 27243, 27249, - 27256, 27266, 27276, 27285, 27291, 27298, 27303, 27310, 27318, 27326, - 27338, 6246, 27345, 27354, 27362, 27368, 27374, 27379, 27383, 27386, - 27392, 27399, 27404, 27409, 27413, 27425, 27436, 27445, 27453, 14947, - 27458, 27464, 27470, 11517, 8635, 27475, 27479, 27483, 27486, 27489, - 27495, 27503, 27511, 27515, 27519, 27524, 27527, 27536, 27540, 27548, - 27559, 27563, 27569, 27575, 27579, 27585, 27593, 27615, 27639, 27646, - 27653, 27659, 27667, 27673, 27678, 27689, 27707, 27714, 27722, 27726, - 27735, 27748, 27756, 27768, 27779, 27789, 27803, 27812, 27820, 27832, - 9492, 27843, 27854, 27866, 27876, 27885, 27890, 27894, 27902, 27912, - 27917, 27921, 27924, 27927, 27935, 27943, 27952, 27962, 27971, 27977, - 27991, 2663, 28013, 28024, 28033, 28043, 28055, 28064, 28073, 28083, - 28091, 28099, 28108, 28113, 28124, 28129, 28140, 28144, 28154, 28163, - 28171, 28181, 28191, 28199, 28208, 28215, 28223, 28230, 28239, 28243, - 28251, 28258, 28266, 28273, 28284, 28299, 28306, 28312, 28322, 28331, - 28337, 28341, 28348, 28352, 14031, 28358, 28362, 28367, 28374, 28378, - 28382, 28390, 28398, 28404, 28413, 28420, 28425, 28430, 28440, 23505, - 28444, 28447, 28452, 28457, 28462, 28467, 28472, 28477, 28482, 28487, - 28493, 28498, 28503, 28509, 1218, 704, 28514, 28523, 2364, 28530, 28535, - 28539, 28545, 1267, 546, 318, 28550, 28559, 28567, 28576, 28584, 28595, - 28604, 28612, 28616, 28619, 28627, 28635, 28640, 14775, 28646, 28652, - 28658, 5872, 28663, 28667, 28673, 28677, 28684, 1455, 28690, 28697, 9579, - 28701, 28711, 28719, 28725, 28734, 28742, 28748, 28756, 28763, 11110, - 28769, 28776, 28781, 28788, 1496, 2147, 28794, 28800, 28807, 28818, - 28829, 28837, 28844, 28854, 28863, 28871, 28880, 28887, 28894, 28907, - 28918, 1272, 28937, 28942, 28950, 3575, 28954, 28959, 28963, 1459, 24706, - 28973, 28977, 28982, 28986, 3493, 28992, 29000, 29007, 29018, 29026, - 29034, 3576, 279, 29039, 29047, 29055, 29062, 29068, 29073, 2216, 29080, - 29086, 25992, 26222, 29092, 106, 29096, 29100, 29106, 615, 9328, 29111, - 29118, 29124, 2327, 29128, 29132, 15187, 29135, 29140, 29147, 29153, - 29158, 29166, 29173, 29179, 22351, 29183, 29187, 3646, 16625, 29191, - 29196, 29199, 29207, 29215, 29220, 29223, 29230, 29240, 29252, 29257, - 29261, 29269, 29276, 29282, 29289, 29296, 29299, 29303, 29307, 1463, - 29317, 29319, 29324, 29330, 29336, 29341, 29346, 29351, 29356, 29361, - 29366, 29371, 29376, 29381, 29386, 29391, 29396, 29401, 29406, 29412, - 29418, 29424, 29430, 29435, 29440, 29445, 29451, 29456, 29461, 29466, - 29472, 29477, 29483, 29488, 29493, 29498, 29503, 29509, 29514, 29520, - 29525, 29530, 29535, 29540, 29546, 29551, 29557, 29562, 29567, 29572, - 29577, 29582, 29587, 29592, 29597, 29602, 29608, 29614, 29620, 29625, - 29630, 29635, 29640, 29646, 29652, 29658, 29664, 29670, 29676, 29681, - 29687, 29692, 29697, 29702, 29707, 29713, 2443, 29718, 2450, 2457, 2754, - 29723, 2463, 2473, 29729, 29733, 29738, 29743, 29749, 29754, 29759, - 29763, 29768, 29774, 29779, 29784, 29789, 29795, 29800, 29804, 29808, - 29813, 29818, 29823, 29828, 29833, 29839, 29845, 29850, 29854, 29859, - 29865, 29869, 29874, 29879, 29884, 29889, 29893, 29896, 29901, 29906, - 29911, 29916, 29921, 29927, 29933, 29938, 29943, 29947, 29952, 29957, - 29962, 29967, 29972, 29976, 29981, 29986, 29991, 29995, 29999, 30003, - 30008, 30016, 30021, 30027, 30033, 30039, 30044, 30048, 30051, 30056, - 30061, 30065, 30070, 30074, 30079, 30083, 30086, 30091, 17302, 30096, - 30101, 30106, 30114, 21280, 28694, 9026, 30119, 30124, 30128, 30133, - 30137, 30141, 30146, 30150, 30153, 30156, 30160, 30165, 30169, 30177, - 30181, 30184, 30189, 30193, 30197, 30202, 30207, 30211, 30217, 30222, - 30227, 30234, 30241, 30245, 30248, 30254, 30263, 30270, 30278, 30285, - 30289, 30294, 30298, 30302, 30308, 30314, 30318, 30324, 30329, 30334, - 30338, 30345, 30351, 30357, 30363, 30369, 30376, 30382, 30388, 30394, - 30400, 30406, 30412, 30418, 30425, 30431, 30438, 30444, 30450, 30456, - 30462, 30468, 30474, 30480, 30486, 30492, 11418, 30498, 30503, 30508, - 30511, 30519, 30524, 30533, 30539, 30544, 30549, 30554, 30558, 30563, - 30568, 30573, 30578, 30583, 30590, 30597, 30603, 30609, 30614, 16303, - 30621, 30627, 30634, 30640, 30646, 30651, 30659, 30664, 16082, 30668, - 30673, 30678, 30684, 30689, 30694, 30698, 30703, 30708, 30714, 30719, - 30724, 30728, 30733, 30738, 30742, 30747, 30752, 30757, 30761, 30766, - 30771, 30776, 30780, 30784, 15293, 30788, 30797, 30803, 30809, 30818, - 30826, 30835, 30843, 30848, 30852, 30859, 30865, 30869, 30872, 30877, - 30886, 30894, 30899, 1495, 30905, 30908, 30912, 22424, 22430, 30918, - 30922, 30933, 30944, 30955, 30967, 30974, 30981, 30986, 30990, 5909, 755, - 21279, 30998, 31003, 31007, 31012, 31016, 31022, 31027, 31033, 31038, - 31044, 31049, 31055, 31060, 31066, 31072, 31078, 31083, 31039, 31045, - 31087, 31092, 31098, 31103, 31109, 31114, 31120, 31125, 31050, 10421, - 31129, 31061, 31067, 31073, 2831, 3423, 31135, 31138, 31144, 31150, - 31156, 31163, 31169, 31175, 31181, 31187, 31193, 31199, 31205, 31211, - 31217, 31223, 31229, 31235, 31242, 31248, 31254, 31260, 31266, 31272, - 31275, 31280, 31283, 31290, 31298, 31303, 31308, 31314, 31319, 31324, - 31328, 31333, 31339, 31344, 31350, 31355, 31361, 31366, 31372, 31378, - 31382, 31387, 31392, 31397, 31402, 31406, 31411, 31416, 31421, 31427, - 31433, 31439, 31445, 31450, 31454, 31457, 31463, 31469, 31478, 31486, - 31493, 31498, 31502, 31506, 31511, 15146, 31516, 31524, 31530, 3683, - 1377, 31535, 31539, 8005, 31545, 31551, 31558, 8014, 31562, 31568, 31575, - 31581, 31590, 31598, 31610, 31614, 31621, 31627, 31631, 31634, 31643, - 31651, 31040, 31656, 31666, 31676, 31686, 31692, 31697, 31707, 31712, - 31725, 31739, 31750, 31762, 31774, 31788, 31801, 31813, 31825, 14600, - 31839, 31844, 31849, 31853, 31857, 31861, 1780, 27176, 31865, 31870, - 31088, 31875, 31878, 31883, 31888, 31893, 31899, 31905, 10098, 31910, - 31917, 15697, 31923, 31928, 31933, 31937, 31942, 31947, 31093, 31952, - 31957, 31962, 31968, 31099, 31973, 31976, 31983, 31991, 31997, 32003, - 32009, 32020, 32025, 32032, 32039, 32046, 32054, 32063, 32072, 32078, - 32084, 32092, 31104, 32097, 32103, 32109, 31110, 32114, 32119, 32127, - 32135, 32141, 32148, 32154, 32161, 32168, 32174, 32182, 32192, 32199, - 32204, 32210, 32215, 32220, 32227, 32236, 32244, 32249, 32255, 32262, - 32270, 32276, 32281, 32287, 32296, 27957, 32303, 32307, 32312, 32321, - 32326, 32331, 32336, 12405, 32344, 32349, 32354, 32359, 32363, 32368, - 32373, 32380, 32385, 32390, 32395, 31115, 21216, 32401, 2519, 244, 32404, - 32407, 32411, 32415, 32425, 32433, 32437, 32444, 32451, 32455, 32458, - 32464, 32472, 32480, 32484, 32488, 32491, 32498, 32502, 32506, 32513, - 32521, 31051, 32528, 32536, 10158, 664, 308, 32548, 32553, 32558, 32564, - 32569, 32574, 3704, 32579, 32582, 32587, 32592, 32597, 32602, 32607, - 32614, 22529, 32619, 32624, 32629, 32634, 32639, 32645, 32650, 32656, - 31286, 32662, 32667, 32673, 32679, 32689, 32694, 32699, 32703, 32708, - 32713, 32718, 32723, 32736, 32741, 22302, 16705, 3710, 32745, 32750, - 32755, 32761, 32766, 32771, 32775, 32780, 32785, 32791, 32796, 32801, - 1382, 32805, 32810, 32815, 32820, 32824, 32829, 32834, 32839, 32845, - 32851, 32856, 32860, 32864, 32869, 32874, 32879, 32883, 32891, 32895, - 32901, 32905, 32912, 16498, 31062, 32918, 32925, 32933, 32940, 32946, - 32959, 32971, 32977, 32981, 2773, 32985, 32989, 32493, 32998, 33009, - 33014, 33019, 33024, 33028, 33033, 22435, 33037, 33041, 33046, 31068, - 21300, 33050, 33055, 33061, 33066, 33070, 33074, 33077, 33081, 33087, - 33098, 33110, 31074, 33115, 33118, 33122, 347, 33127, 33132, 33137, - 33142, 33147, 33152, 33158, 33163, 33168, 33174, 33179, 33185, 33190, - 33196, 33201, 33206, 33211, 33216, 33221, 33226, 33231, 33236, 33242, - 33247, 33252, 33257, 33262, 33267, 33272, 33277, 33283, 33289, 33294, - 33299, 33304, 33309, 33314, 33319, 33324, 33329, 33334, 33339, 33344, - 33349, 33354, 33359, 33364, 33369, 33374, 33379, 33385, 313, 26, 33390, - 33394, 33398, 33406, 33410, 33414, 33417, 33420, 33422, 33427, 33431, - 33436, 33440, 33445, 33449, 33454, 33458, 33461, 33463, 33467, 33472, - 33476, 33487, 33490, 33492, 33496, 33508, 33517, 33521, 33525, 33531, - 33536, 33545, 33551, 33556, 33561, 33565, 33570, 33577, 33582, 33588, - 33593, 33597, 33604, 25718, 25728, 33608, 33613, 33618, 33623, 33630, - 33634, 33641, 8113, 33647, 33656, 33664, 33679, 33693, 33701, 33712, - 33721, 33726, 7227, 33736, 33741, 33746, 33750, 33753, 33757, 33762, - 33766, 33773, 33778, 33783, 8912, 33793, 33795, 33798, 33802, 33808, - 33812, 33817, 33822, 33828, 33833, 33839, 33844, 33854, 33863, 33871, - 33876, 33882, 33887, 33894, 33898, 33906, 33913, 33926, 33934, 33938, - 33948, 33953, 33957, 33965, 33973, 33977, 33986, 33992, 33997, 34005, - 34015, 34024, 34033, 34042, 34053, 34061, 34072, 34081, 34088, 34094, - 34099, 34110, 34115, 34119, 34122, 34126, 34134, 34140, 34148, 34155, - 34161, 34166, 34172, 2418, 34176, 34178, 34183, 34188, 34193, 34196, - 34198, 34202, 34205, 34212, 34216, 9891, 34220, 34226, 34236, 34241, - 34247, 34251, 34256, 34269, 26104, 34275, 34284, 17475, 34291, 34300, - 31672, 34308, 34313, 34317, 34325, 34332, 34337, 34341, 34346, 34350, - 34358, 34364, 34370, 34375, 34379, 34382, 34387, 34400, 34416, 22996, - 34433, 34445, 34462, 34474, 34488, 23013, 23032, 34500, 34512, 2680, - 34526, 34531, 34536, 34541, 34545, 34552, 34564, 34570, 34573, 34584, - 34595, 34600, 32089, 695, 34604, 34608, 34612, 34615, 34620, 34625, - 34631, 34636, 34641, 34647, 34653, 34658, 34662, 34667, 34672, 34677, - 34681, 34684, 34690, 34695, 34700, 34705, 34709, 34714, 34720, 34728, - 26337, 34733, 34738, 34745, 34751, 34757, 34762, 34770, 22538, 34777, - 34782, 34787, 34792, 34796, 34799, 34804, 34808, 34812, 34819, 34825, - 34831, 34837, 34844, 34849, 34855, 33968, 34859, 34863, 34868, 34881, - 34886, 34892, 34900, 34907, 34915, 34925, 34931, 34937, 34943, 34947, - 34956, 34964, 34971, 34976, 34981, 10444, 34986, 34994, 35001, 35007, - 35017, 35022, 35028, 35036, 3608, 35043, 35050, 3614, 35054, 35059, - 35070, 35077, 35083, 35092, 35096, 4015, 35099, 35106, 35112, 35118, - 35126, 35136, 29063, 35143, 35151, 35156, 35162, 35167, 25964, 35173, - 35180, 35186, 35195, 23677, 35202, 35207, 35211, 35219, 35227, 9607, - 5895, 35234, 35238, 35240, 35244, 35249, 35251, 35257, 35262, 35267, - 35274, 32610, 35280, 35285, 35289, 35294, 35298, 35307, 35311, 35317, - 35324, 35330, 35337, 35342, 35351, 35356, 35360, 35365, 35372, 35380, - 35388, 35393, 21356, 35397, 35400, 35404, 35408, 35412, 35415, 35417, - 35425, 35429, 35436, 35440, 35444, 35452, 35459, 35469, 35473, 35477, - 35485, 35493, 35499, 35504, 35513, 13357, 35519, 35528, 35533, 35540, - 35548, 35556, 35564, 35571, 35578, 35585, 35592, 35599, 35604, 35610, - 35627, 35635, 35645, 35653, 35660, 407, 35664, 35670, 35674, 35679, - 33717, 35685, 35688, 35692, 35700, 3619, 35708, 35714, 35720, 35729, - 35739, 35746, 35752, 3625, 3631, 35761, 35768, 35776, 35781, 35785, - 35792, 35800, 35807, 35813, 35822, 35832, 35838, 35846, 35855, 35862, - 35870, 35877, 22032, 35881, 35888, 35894, 35904, 35913, 35924, 35928, - 35938, 35944, 35951, 35959, 35968, 35977, 35987, 35998, 36005, 36010, - 36017, 3029, 36025, 36031, 36036, 36042, 36048, 36053, 36066, 36079, - 36092, 36099, 36105, 36113, 36121, 36126, 36130, 1469, 36134, 36139, - 36144, 36149, 36154, 36160, 36165, 36170, 36175, 36180, 36185, 36190, - 36195, 36201, 36207, 36212, 36217, 36223, 36228, 36233, 36238, 36244, - 36249, 36254, 36259, 36264, 36270, 36275, 36280, 36286, 36291, 36296, - 36301, 36306, 36311, 36317, 36322, 36328, 36333, 36339, 36344, 36349, - 36354, 36360, 36366, 36372, 36378, 36384, 36390, 36396, 36402, 36407, - 36412, 36418, 36423, 36428, 36433, 36438, 36443, 36448, 36453, 36459, - 36464, 36469, 36475, 36481, 101, 36486, 36488, 36492, 36496, 36500, - 36505, 36509, 9528, 36513, 36519, 1741, 6280, 36525, 36528, 36533, 36537, - 36542, 36546, 36550, 36555, 10245, 36559, 36563, 36567, 36571, 15385, - 36576, 36580, 36585, 36590, 36595, 36599, 36606, 26128, 36612, 36615, - 36619, 36624, 36630, 36634, 36642, 36648, 36653, 36657, 36663, 36667, - 36671, 3462, 3467, 29255, 36674, 36678, 36682, 36686, 36690, 36698, - 36705, 36709, 36716, 36721, 317, 36726, 36730, 36736, 36748, 36754, - 36760, 36764, 36770, 36779, 36783, 36787, 36792, 36798, 36803, 36807, - 36812, 36816, 36820, 36827, 36833, 36838, 36853, 36868, 36883, 36899, - 36917, 10195, 36931, 36938, 36942, 36945, 36954, 36959, 36963, 36971, - 33919, 36979, 36983, 36993, 37004, 29225, 37017, 37021, 37030, 37038, - 9785, 14913, 37042, 22447, 37045, 30173, 37050, 9784, 37055, 37061, - 37066, 37072, 37077, 37083, 37088, 37094, 37099, 37105, 37111, 37117, - 37122, 37078, 37084, 37089, 37095, 37100, 37106, 37112, 8126, 3874, - 37126, 37134, 37138, 37141, 37145, 37150, 37155, 37161, 37167, 37172, - 37176, 25976, 37180, 37184, 37190, 37194, 9049, 37203, 37210, 37214, - 11875, 37221, 37227, 37232, 37239, 37246, 37253, 28571, 8049, 37260, - 37267, 37274, 37280, 37285, 37292, 37303, 37309, 37314, 37319, 37324, - 37331, 37079, 37335, 37345, 37356, 37362, 37367, 37372, 37377, 37382, - 37387, 37391, 37395, 37401, 37409, 2319, 865, 10261, 10273, 10278, 10284, - 37418, 10289, 10294, 10300, 37423, 37433, 37437, 10305, 37442, 16903, - 37445, 37450, 37454, 37459, 37464, 37471, 37478, 37482, 37485, 37493, - 10208, 37500, 37503, 37509, 37519, 5929, 37528, 37532, 37540, 37544, - 37554, 37560, 37571, 37577, 37583, 37588, 37594, 37600, 37606, 37611, - 37614, 37621, 37627, 37632, 37639, 37646, 37650, 37660, 37673, 37682, - 37691, 37702, 37715, 37726, 37735, 37746, 37751, 37760, 37765, 10310, - 37771, 37778, 37786, 37791, 37795, 37802, 37809, 3829, 16, 37813, 37818, - 16757, 37822, 37825, 37828, 28077, 37832, 28580, 37840, 37844, 37848, - 37851, 37857, 37101, 37863, 37871, 37877, 37884, 28060, 37888, 28254, - 37892, 37901, 37907, 37913, 37918, 37922, 37928, 37932, 37940, 37948, - 26194, 37954, 37961, 37967, 37972, 37977, 37981, 37987, 37992, 37998, - 4056, 791, 38005, 38009, 38012, 15275, 38024, 35851, 38035, 38038, 38045, - 38049, 38055, 38059, 38065, 38070, 38076, 38081, 38086, 38090, 38094, - 38099, 38104, 38114, 38120, 38133, 38139, 38145, 38152, 38157, 38163, - 38168, 16643, 1472, 1019, 31218, 31224, 38173, 31230, 31243, 31249, - 31255, 38179, 31261, 31267, 38185, 38191, 22, 38199, 38206, 38210, 38214, - 38222, 31978, 38226, 38230, 38237, 38242, 38246, 38251, 38257, 38262, - 38268, 38273, 38277, 38281, 38285, 38290, 38294, 38299, 38303, 38310, - 38315, 38319, 38324, 38328, 38333, 38337, 38342, 38348, 15495, 15500, - 38353, 38357, 38360, 38364, 21183, 38369, 38373, 38379, 38386, 38391, - 38401, 38406, 38414, 38418, 38421, 31993, 38425, 4109, 38430, 38435, - 38439, 38444, 38448, 38453, 13375, 38464, 38468, 38471, 38476, 38480, - 38484, 38487, 38491, 8145, 13391, 38494, 38497, 38503, 38508, 38514, - 38519, 38525, 38530, 38536, 38541, 38547, 38553, 38559, 38564, 38568, - 38572, 38581, 38597, 38613, 38623, 27967, 38630, 38634, 38639, 38644, - 38648, 38652, 35972, 38658, 38663, 38667, 38674, 38679, 38683, 38687, - 26996, 38693, 21451, 38698, 38705, 38713, 38719, 38726, 38734, 38740, - 38744, 38750, 38758, 38762, 38771, 9509, 38779, 38783, 38791, 38798, - 38803, 38808, 38812, 38815, 38819, 38822, 38826, 38833, 38838, 38844, - 26415, 31281, 38848, 38855, 38861, 38867, 38872, 38875, 38877, 38884, - 38891, 38897, 38901, 38904, 38908, 38912, 38916, 38921, 38925, 38929, - 38932, 38936, 38950, 23062, 38969, 38982, 38995, 39008, 23080, 39023, - 10497, 39038, 39044, 39048, 39052, 39059, 39064, 39068, 39075, 39081, - 39086, 39092, 39102, 39114, 39125, 39130, 39137, 39141, 39145, 39148, - 15891, 3677, 39156, 15522, 39169, 39176, 39180, 39184, 39189, 39194, - 39200, 39204, 39208, 39211, 7742, 15533, 39216, 39220, 39226, 39235, - 39240, 39247, 35828, 39253, 39258, 39262, 39267, 39274, 39278, 39281, - 39285, 39290, 14565, 39297, 39304, 1077, 39308, 39313, 39318, 39324, - 39329, 39334, 39338, 39348, 39353, 39359, 39364, 39370, 39375, 39381, - 39391, 39396, 39401, 39405, 7229, 7241, 39410, 39413, 39420, 39426, - 34084, 34091, 39435, 39439, 32041, 39447, 39458, 39466, 36020, 39473, - 39478, 39483, 39494, 39501, 39512, 32065, 21457, 39520, 735, 39525, - 39531, 28051, 39537, 39542, 39552, 39561, 39568, 39574, 39578, 39581, - 39588, 39594, 39601, 39607, 39617, 39625, 39631, 39637, 39642, 39646, - 39653, 39659, 39666, 38917, 535, 13818, 39672, 39677, 39680, 39686, - 39694, 1396, 39699, 39703, 39708, 39715, 39721, 39725, 39729, 39734, - 39743, 39750, 39760, 39766, 28095, 39783, 39792, 39800, 39806, 39811, - 39818, 39824, 39832, 39841, 39849, 39853, 39858, 39866, 32074, 39872, - 39891, 15824, 39905, 39921, 39935, 39941, 39946, 39951, 39956, 39962, - 32080, 39967, 39974, 39979, 39983, 345, 2936, 39990, 39995, 40000, 27322, - 39821, 40004, 40009, 40017, 40021, 40024, 40030, 40036, 40040, 28150, - 40043, 40048, 40052, 40055, 40060, 40064, 40069, 40074, 40078, 40083, - 40087, 40091, 21179, 21190, 40095, 40100, 40106, 26953, 40111, 40115, - 21266, 16072, 40118, 40123, 40128, 40133, 40138, 40143, 40148, 40153, - 450, 49, 31299, 31304, 31309, 31315, 31320, 31325, 40158, 31329, 40162, - 40166, 40170, 31334, 31340, 40184, 31351, 31356, 40192, 40197, 31362, - 40202, 40207, 40212, 40217, 40223, 40229, 40235, 31379, 40248, 40254, - 31383, 40258, 31388, 40263, 31393, 31398, 40266, 40271, 40275, 30948, - 40281, 13599, 40288, 40293, 31403, 40297, 40302, 40307, 40312, 40316, - 40321, 40326, 40332, 40337, 40342, 40348, 40354, 40359, 40363, 40368, - 40373, 40378, 40382, 40387, 40392, 40397, 40403, 40409, 40415, 40420, - 40424, 40429, 40433, 31407, 31412, 31417, 40437, 40441, 40445, 31422, - 31428, 31434, 31446, 40457, 26013, 40461, 40465, 40470, 40475, 40480, - 40485, 40489, 40493, 40503, 40508, 40513, 40517, 40521, 40524, 40532, - 31494, 40537, 1479, 40543, 40551, 40560, 40564, 40568, 40576, 40582, - 40590, 40606, 40610, 40614, 40619, 40634, 31531, 1749, 12055, 40638, - 1378, 40650, 40651, 40659, 40666, 40671, 40678, 40683, 9379, 1119, 10332, - 40690, 40695, 40698, 40701, 40710, 1286, 40715, 39065, 40722, 40727, - 40731, 22503, 2557, 40739, 10741, 40749, 40755, 2337, 2347, 40764, 40773, - 40783, 40794, 3293, 34237, 10384, 3807, 16681, 1291, 40799, 40807, 40814, - 40819, 40823, 40827, 23875, 10411, 40835, 40844, 40853, 40861, 40868, - 40879, 40884, 40897, 40910, 40922, 40934, 40946, 40959, 40970, 40981, - 40991, 40999, 41007, 41019, 41031, 41042, 41051, 41059, 41066, 41078, - 41085, 41094, 41101, 41114, 41119, 41129, 41134, 41140, 41145, 37211, - 41149, 41156, 41160, 41167, 41175, 2518, 41182, 41193, 41203, 41212, - 41220, 41230, 41238, 41248, 41257, 41262, 41268, 41274, 3709, 41285, - 41295, 41304, 41313, 41323, 41331, 41340, 41345, 41350, 41355, 1705, 37, - 41363, 41371, 41382, 41393, 16356, 41403, 41407, 41414, 41420, 41425, - 41429, 41440, 41450, 41459, 41470, 16730, 16735, 41475, 41484, 41489, - 41499, 41504, 41512, 41520, 41527, 41533, 7078, 228, 41537, 41543, 41548, - 41551, 2117, 39181, 41559, 41563, 41566, 1512, 41572, 13980, 1296, 41577, - 41590, 41604, 2643, 41622, 41634, 41646, 2657, 2674, 41660, 41673, 2689, - 41687, 41699, 2704, 41713, 1302, 1308, 1314, 10659, 41718, 41723, 41728, - 41732, 41747, 41762, 41777, 41792, 41807, 41822, 41837, 41852, 41867, - 41882, 41897, 41912, 41927, 41942, 41957, 41972, 41987, 42002, 42017, - 42032, 42047, 42062, 42077, 42092, 42107, 42122, 42137, 42152, 42167, - 42182, 42197, 42212, 42227, 42242, 42257, 42272, 42287, 42302, 42317, - 42332, 42347, 42362, 42377, 42392, 42407, 42422, 42437, 42452, 42467, - 42482, 42497, 42512, 42527, 42542, 42557, 42572, 42587, 42602, 42617, - 42632, 42647, 42662, 42677, 42692, 42707, 42722, 42737, 42752, 42767, - 42782, 42797, 42812, 42827, 42842, 42857, 42872, 42887, 42902, 42917, - 42932, 42947, 42962, 42977, 42992, 43007, 43022, 43037, 43052, 43067, - 43082, 43097, 43112, 43127, 43142, 43157, 43172, 43187, 43202, 43217, - 43232, 43247, 43262, 43277, 43292, 43307, 43322, 43337, 43352, 43367, - 43382, 43397, 43412, 43427, 43442, 43457, 43472, 43487, 43502, 43517, - 43532, 43547, 43562, 43577, 43592, 43607, 43622, 43637, 43652, 43667, - 43682, 43697, 43712, 43727, 43742, 43757, 43772, 43787, 43802, 43817, - 43832, 43847, 43862, 43877, 43892, 43907, 43922, 43937, 43952, 43967, - 43982, 43997, 44012, 44027, 44042, 44057, 44072, 44087, 44102, 44117, - 44132, 44147, 44162, 44177, 44192, 44207, 44222, 44237, 44252, 44267, - 44282, 44297, 44312, 44327, 44342, 44357, 44372, 44387, 44402, 44417, - 44432, 44447, 44462, 44477, 44492, 44507, 44522, 44537, 44552, 44567, - 44582, 44597, 44612, 44627, 44642, 44657, 44672, 44687, 44702, 44717, - 44732, 44747, 44762, 44777, 44792, 44807, 44822, 44837, 44852, 44867, - 44882, 44897, 44912, 44927, 44942, 44957, 44972, 44987, 45002, 45017, - 45032, 45047, 45062, 45077, 45092, 45107, 45122, 45137, 45152, 45167, - 45182, 45197, 45212, 45227, 45242, 45257, 45272, 45287, 45302, 45317, - 45332, 45347, 45362, 45377, 45392, 45407, 45422, 45437, 45452, 45467, - 45482, 45497, 45512, 45527, 45542, 45557, 45572, 45587, 45602, 45617, - 45632, 45647, 45662, 45677, 45692, 45707, 45722, 45737, 45752, 45767, - 45782, 45797, 45812, 45827, 45842, 45857, 45872, 45887, 45902, 45917, - 45932, 45947, 45962, 45977, 45992, 46007, 46022, 46037, 46052, 46067, - 46082, 46097, 46112, 46127, 46142, 46157, 46172, 46187, 46202, 46217, - 46232, 46247, 46262, 46277, 46292, 46307, 46322, 46337, 46352, 46367, - 46382, 46397, 46412, 46427, 46442, 46457, 46472, 46487, 46502, 46517, - 46532, 46547, 46562, 46577, 46592, 46607, 46622, 46637, 46652, 46667, - 46682, 46697, 46712, 46727, 46742, 46757, 46772, 46787, 46802, 46817, - 46832, 46847, 46862, 46877, 46892, 46907, 46922, 46937, 46952, 46967, - 46982, 46997, 47012, 47027, 47042, 47057, 47072, 47087, 47102, 47117, - 47132, 47147, 47162, 47177, 47192, 47207, 47222, 47237, 47252, 47267, - 47282, 47297, 47312, 47327, 47342, 47357, 47372, 47387, 47402, 47417, - 47432, 47447, 47462, 47477, 47492, 47507, 47522, 47537, 47552, 47567, - 47582, 47597, 47612, 47627, 47642, 47657, 47672, 47687, 47702, 47717, - 47732, 47747, 47762, 47777, 47792, 47807, 47822, 47837, 47852, 47867, - 47882, 47897, 47912, 47927, 47942, 47957, 47972, 47987, 48002, 48017, - 48032, 48047, 48062, 48077, 48092, 48107, 48122, 48137, 48152, 48167, - 48182, 48197, 48212, 48227, 48242, 48257, 48272, 48287, 48302, 48317, - 48332, 48347, 48362, 48377, 48392, 48407, 48422, 48437, 48452, 48467, - 48482, 48497, 48512, 48527, 48542, 48557, 48572, 48587, 48602, 48617, - 48632, 48647, 48662, 48677, 48692, 48707, 48722, 48737, 48752, 48767, - 48782, 48797, 48812, 48827, 48842, 48857, 48872, 48887, 48902, 48917, - 48932, 48947, 48962, 48977, 48992, 49007, 49022, 49037, 49052, 49067, - 49082, 49097, 49112, 49127, 49142, 49157, 49172, 49187, 49202, 49217, - 49232, 49247, 49262, 49277, 49292, 49307, 49322, 49337, 49352, 49367, - 49382, 49397, 49412, 49427, 49442, 49457, 49472, 49487, 49502, 49517, - 49532, 49548, 49564, 49580, 49596, 49612, 49628, 49644, 49660, 49676, - 49692, 49708, 49724, 49740, 49756, 49772, 49788, 49804, 49820, 49836, - 49852, 49868, 49884, 49900, 49916, 49932, 49948, 49964, 49980, 49996, - 50012, 50028, 50044, 50060, 50076, 50092, 50108, 50124, 50140, 50156, - 50172, 50188, 50204, 50220, 50236, 50252, 50268, 50284, 50300, 50316, - 50332, 50348, 50364, 50380, 50396, 50412, 50428, 50444, 50460, 50476, - 50492, 50508, 50524, 50540, 50556, 50572, 50588, 50604, 50620, 50636, - 50652, 50668, 50684, 50700, 50716, 50732, 50748, 50764, 50780, 50796, - 50812, 50828, 50844, 50860, 50876, 50892, 50908, 50924, 50940, 50956, - 50972, 50988, 51004, 51020, 51036, 51052, 51068, 51084, 51100, 51116, - 51132, 51148, 51164, 51180, 51196, 51212, 51228, 51244, 51260, 51276, - 51292, 51308, 51324, 51340, 51356, 51372, 51388, 51404, 51420, 51436, - 51452, 51468, 51484, 51500, 51516, 51532, 51548, 51564, 51580, 51596, - 51612, 51628, 51644, 51660, 51676, 51692, 51708, 51724, 51740, 51756, - 51772, 51788, 51804, 51820, 51836, 51852, 51868, 51884, 51900, 51916, - 51932, 51948, 51964, 51980, 51996, 52012, 52028, 52044, 52060, 52076, - 52092, 52108, 52124, 52140, 52156, 52172, 52188, 52204, 52220, 52236, - 52252, 52268, 52284, 52300, 52316, 52332, 52348, 52364, 52380, 52396, - 52412, 52428, 52444, 52460, 52476, 52492, 52508, 52524, 52540, 52556, - 52572, 52588, 52604, 52620, 52636, 52652, 52668, 52684, 52700, 52716, - 52732, 52748, 52764, 52780, 52796, 52812, 52828, 52844, 52860, 52876, - 52892, 52908, 52924, 52940, 52956, 52972, 52988, 53004, 53020, 53036, - 53052, 53068, 53084, 53100, 53116, 53132, 53148, 53164, 53180, 53196, - 53212, 53228, 53244, 53260, 53276, 53292, 53308, 53324, 53340, 53356, - 53372, 53388, 53404, 53420, 53436, 53452, 53468, 53484, 53500, 53516, - 53532, 53548, 53564, 53580, 53596, 53612, 53628, 53644, 53660, 53676, - 53692, 53708, 53724, 53740, 53756, 53772, 53788, 53804, 53820, 53836, - 53852, 53868, 53884, 53900, 53916, 53932, 53948, 53964, 53980, 53996, - 54012, 54028, 54044, 54060, 54076, 54092, 54108, 54124, 54140, 54156, - 54172, 54188, 54204, 54220, 54236, 54252, 54268, 54284, 54300, 54316, - 54332, 54348, 54364, 54380, 54396, 54412, 54428, 54444, 54460, 54476, - 54492, 54508, 54524, 54540, 54556, 54572, 54588, 54604, 54620, 54636, - 54652, 54668, 54684, 54700, 54716, 54732, 54748, 54764, 54780, 54796, - 54812, 54828, 54844, 54860, 54876, 54892, 54908, 54924, 54940, 54956, - 54972, 54988, 55004, 55020, 55036, 55052, 55068, 55084, 55100, 55116, - 55132, 55148, 55164, 55180, 55196, 55212, 55228, 55244, 55260, 55276, - 55292, 55308, 55324, 55340, 55356, 55372, 55388, 55404, 55420, 55436, - 55452, 55468, 55484, 55500, 55516, 55532, 55548, 55564, 55580, 55596, - 55612, 55628, 55644, 55660, 55676, 55692, 55708, 55724, 55740, 55756, - 55772, 55788, 55804, 55820, 55836, 55852, 55868, 55884, 55900, 55916, - 55932, 55948, 55964, 55980, 55996, 56012, 56028, 56044, 56060, 56076, - 56092, 56108, 56124, 56140, 56156, 56172, 56188, 56204, 56220, 56236, - 56252, 56268, 56284, 56300, 56316, 56332, 56348, 56364, 56380, 56396, - 56412, 56428, 56444, 56460, 56476, 56492, 56508, 56524, 56540, 56556, - 56572, 56588, 56604, 56620, 56636, 56652, 56668, 56684, 56700, 56716, - 56732, 56748, 56764, 56780, 56796, 56812, 56828, 56844, 56860, 56876, - 56892, 56908, 56924, 56940, 56956, 56972, 56988, 57004, 57020, 57036, - 57052, 57068, 57084, 57100, 57116, 57132, 57148, 57164, 57180, 57196, - 57212, 57228, 57244, 57260, 57276, 57292, 57308, 57324, 57340, 57356, - 57372, 57388, 57404, 57420, 57436, 57452, 57468, 57484, 57500, 57516, - 57532, 57548, 57564, 57580, 57596, 57612, 57628, 57644, 57660, 57676, - 57692, 57708, 57724, 57740, 57756, 57772, 57788, 57804, 57820, 57836, - 57852, 57868, 57884, 57900, 57916, 57932, 57948, 57964, 57980, 57996, - 58012, 58028, 58044, 58060, 58076, 58092, 58108, 58124, 58140, 58156, - 58172, 58188, 58204, 58219, 16762, 58228, 58234, 58240, 58250, 58258, - 14894, 15445, 9960, 58271, 1520, 58279, 3761, 27432, 7183, 58285, 58290, - 58295, 58300, 58305, 58311, 58316, 58322, 58327, 58333, 58338, 58343, - 58348, 58353, 58359, 58364, 58369, 58374, 58379, 58384, 58389, 58394, - 58400, 58405, 58411, 58418, 2561, 58423, 58429, 8526, 58433, 58438, - 58445, 58453, 40, 58457, 58463, 58468, 58473, 58477, 58482, 58486, 58490, - 10684, 58494, 58504, 58517, 58528, 58541, 58548, 58554, 58559, 58565, - 58571, 58577, 58582, 58587, 58592, 58597, 58601, 58606, 58611, 58616, - 58622, 58628, 58634, 58639, 58643, 58648, 58653, 58657, 58662, 58667, - 58672, 58676, 10700, 10711, 10716, 1563, 58680, 1568, 58686, 16239, - 58689, 58695, 1599, 58701, 1605, 1611, 10746, 58706, 58714, 58721, 58725, - 58731, 58736, 30977, 58741, 58748, 58753, 58757, 58761, 1616, 16331, - 58770, 58774, 16342, 1125, 58778, 58785, 58790, 58794, 16367, 1620, - 37350, 58797, 58802, 58812, 58821, 58826, 58830, 58836, 1625, 39259, - 58841, 58850, 58856, 58861, 10904, 10910, 58867, 58879, 58896, 58913, - 58930, 58947, 58964, 58981, 58998, 59015, 59032, 59049, 59066, 59083, - 59100, 59117, 59134, 59151, 59168, 59185, 59202, 59219, 59236, 59253, - 59270, 59287, 59304, 59321, 59338, 59355, 59372, 59389, 59406, 59423, - 59440, 59457, 59474, 59491, 59508, 59525, 59542, 59559, 59576, 59593, - 59610, 59627, 59644, 59661, 59678, 59695, 59712, 59723, 59728, 1630, - 59732, 59738, 59743, 59748, 9326, 1635, 59754, 59763, 27731, 59768, - 59779, 59789, 59794, 59801, 59807, 59812, 59817, 16619, 59821, 10921, - 1640, 10926, 59827, 59832, 59838, 59843, 59848, 59853, 59858, 59863, - 59868, 59873, 59879, 59885, 59891, 59896, 59900, 59905, 59910, 59914, - 59919, 59924, 59929, 59933, 59938, 59944, 59949, 59954, 59958, 59963, - 59968, 59974, 59979, 59984, 59990, 59996, 60001, 60005, 60010, 60015, - 60020, 60024, 60029, 60034, 60039, 60045, 60051, 60056, 60060, 60064, - 60069, 60074, 60079, 29129, 60083, 60088, 60093, 60099, 60104, 60109, - 60113, 60118, 60123, 60129, 60134, 60139, 60145, 60151, 60156, 60160, - 60165, 60170, 60174, 60179, 60184, 60189, 60195, 60201, 60206, 60210, - 60215, 60220, 60224, 60229, 60234, 60239, 60243, 60246, 31639, 60251, - 60259, 16685, 3663, 11017, 60265, 60275, 60290, 11022, 60301, 60306, - 60317, 60329, 60341, 60353, 2695, 60365, 60370, 60382, 60386, 60392, - 60398, 60403, 1652, 1078, 60412, 60417, 39309, 60421, 60425, 60430, - 60434, 16770, 60439, 60442, 60450, 60458, 1656, 11047, 11053, 1661, - 60466, 60473, 60478, 60487, 60497, 60504, 60509, 60514, 1666, 60521, - 60526, 16885, 60530, 60535, 60542, 60548, 60552, 60563, 60573, 16907, - 9234, 9241, 1671, 60580, 60586, 60594, 60601, 60607, 60614, 60626, 60632, - 60637, 60649, 60660, 60669, 60679, 3740, 30813, 30822, 16947, 1676, 1680, - 60687, 60698, 60703, 1683, 60711, 60716, 16998, 60728, 60734, 60739, - 60747, 1688, 60752, 60757, 60765, 60773, 60780, 60789, 60797, 60806, - 1693, 60810, 1698, 60815, 60822, 17072, 60830, 60836, 60841, 60849, - 60856, 60864, 22574, 60869, 11182, 60878, 60884, 60891, 60898, 60904, - 60914, 60920, 60925, 60936, 60941, 60949, 11191, 11196, 60957, 60963, - 60971, 3805, 17114, 39397, 60976, 60982, 60987, 60995, 61002, 12036, - 61007, 61013, 1709, 61018, 61021, 1132, 61027, 61032, 61037, 61043, - 61048, 61053, 61058, 61063, 61068, 61073, 1718, 9, 61079, 61083, 61088, - 61092, 61096, 61100, 31879, 61105, 61110, 61115, 61119, 61122, 61126, - 61130, 61135, 61139, 61144, 61148, 34616, 34621, 34626, 61151, 61158, - 61164, 39118, 61174, 34632, 32137, 31894, 31900, 34648, 31906, 61179, - 61184, 32170, 61188, 61191, 61195, 61202, 61205, 61210, 61214, 61218, - 61221, 61231, 61243, 61250, 61256, 61263, 33573, 61266, 8543, 877, 61269, - 61273, 61278, 3690, 61282, 61285, 13632, 61292, 61299, 61312, 61320, - 61329, 61338, 61343, 61353, 61366, 61378, 61385, 61390, 61399, 61412, - 36060, 61430, 61435, 61442, 61448, 656, 61453, 61461, 61468, 27271, 627, - 61474, 61480, 61490, 61496, 61501, 31924, 6003, 31938, 61505, 61515, - 61520, 61530, 61545, 61551, 61557, 31948, 61562, 31094, 61566, 61571, - 61576, 61580, 61585, 16950, 61592, 61597, 61601, 6044, 31974, 61605, - 61611, 312, 61621, 61628, 61635, 61640, 61649, 58806, 61655, 61663, - 61667, 61671, 61675, 61679, 61684, 61688, 61694, 61702, 61707, 61712, - 61716, 61721, 61725, 61729, 61735, 61741, 61746, 61750, 32098, 61755, - 32104, 32110, 61760, 61766, 61773, 61778, 61782, 31111, 16612, 61785, - 61789, 61794, 61801, 61807, 61811, 61816, 38828, 61822, 61826, 61830, - 61835, 61841, 61847, 61859, 61868, 61878, 61884, 61891, 61896, 61901, - 61905, 61908, 61914, 61921, 61926, 61931, 61938, 61945, 61951, 61956, - 61961, 61969, 32115, 2423, 61974, 61979, 61985, 61990, 61996, 62001, - 62006, 62011, 62017, 32136, 62022, 62028, 62034, 62040, 32200, 62045, - 62050, 62055, 32211, 62060, 62065, 62070, 62076, 62082, 32216, 62087, - 62092, 62097, 32271, 32277, 62102, 62107, 32282, 62112, 27958, 32304, - 32308, 62117, 62093, 62121, 62129, 62135, 62143, 62150, 62156, 62166, - 62172, 62179, 10631, 32322, 62185, 62198, 62207, 62213, 62222, 62228, - 23512, 62235, 62242, 62252, 32272, 62255, 62262, 62267, 62271, 62275, - 62280, 6120, 62284, 62289, 62294, 34710, 34715, 62298, 34729, 62303, - 34734, 62308, 62314, 34746, 34752, 34758, 62319, 62325, 22539, 62336, - 62339, 62351, 62359, 32345, 62363, 62372, 62382, 62391, 32355, 62396, - 62403, 62412, 62418, 62426, 62433, 6095, 4397, 62438, 32283, 62444, - 62447, 62453, 62460, 62465, 62470, 23422, 62474, 62480, 62486, 62491, - 62496, 62500, 62506, 62512, 33483, 863, 35723, 36644, 36650, 32391, - 62517, 62521, 62525, 62528, 62541, 62547, 62551, 62554, 62559, 33786, - 62563, 31116, 21287, 62569, 6024, 6032, 9075, 62572, 62577, 62582, 62587, - 62592, 62597, 62602, 62607, 62612, 62617, 62623, 62628, 62633, 62639, - 62644, 62649, 62654, 62659, 62664, 62669, 62675, 62680, 62686, 62691, - 62696, 62701, 62706, 62711, 62716, 62721, 62726, 62731, 62736, 62742, - 62747, 62752, 62757, 62762, 62767, 62772, 62778, 62783, 62788, 62793, - 62798, 62803, 62808, 62813, 62818, 62823, 62829, 62834, 62839, 62844, - 62849, 62855, 62861, 62866, 62872, 62877, 62882, 62887, 62892, 62897, - 1513, 245, 62902, 62906, 62910, 62914, 25133, 62918, 62922, 62927, 62931, - 62936, 62940, 62945, 62950, 62955, 62959, 62963, 62968, 62972, 13369, - 62977, 62981, 62988, 62998, 15206, 63007, 63016, 63020, 63025, 63030, - 63034, 24924, 3019, 63038, 63044, 17363, 63048, 63057, 63065, 63071, - 63083, 63095, 63099, 63104, 63108, 63114, 63120, 63125, 63135, 63145, - 63151, 63156, 63160, 63165, 63171, 63180, 63189, 63197, 15560, 63201, - 63210, 63218, 63230, 63241, 63252, 63261, 63265, 63274, 63284, 63292, - 63298, 63303, 63309, 63314, 98, 30925, 63325, 26266, 26276, 63331, 63338, - 63344, 63348, 63358, 63369, 63377, 63386, 63391, 63396, 63400, 17317, - 63408, 63412, 63418, 63428, 63435, 63441, 34809, 63447, 63449, 63452, - 63456, 63466, 63472, 63479, 13315, 63486, 63492, 63501, 63510, 63516, - 63522, 63528, 63533, 63540, 63547, 63553, 63566, 63575, 63584, 63589, - 63593, 63599, 63606, 63613, 63620, 63627, 63634, 63639, 63643, 63647, - 63650, 63660, 63664, 63676, 63685, 63689, 63694, 63698, 63704, 63709, - 63716, 63725, 63733, 63741, 63746, 63750, 63755, 63760, 63770, 63778, - 63783, 63787, 63791, 63797, 63809, 63817, 63827, 63834, 63840, 63845, - 63849, 63853, 63857, 63866, 63875, 63884, 63890, 63896, 63902, 63907, - 63914, 63920, 63928, 63935, 12463, 63941, 63947, 63951, 14244, 63955, - 63960, 63970, 63979, 63985, 63991, 63999, 64006, 64010, 64014, 64020, - 64028, 64035, 64041, 64052, 64056, 64060, 64064, 64067, 64073, 64078, - 64082, 64086, 64095, 64103, 64110, 64116, 64123, 24046, 38870, 64128, - 64136, 64140, 64144, 64147, 64155, 64162, 64168, 64177, 64185, 64191, - 64196, 64200, 64205, 64209, 64213, 64218, 64227, 64231, 64238, 64245, - 64251, 64259, 64265, 64276, 64284, 64290, 22669, 64299, 64306, 64313, - 64320, 64327, 64334, 41907, 13153, 64341, 64348, 64353, 34845, 6217, - 64359, 64364, 64369, 64375, 64381, 64387, 64392, 64397, 64402, 64407, - 64413, 64418, 64424, 64429, 64435, 64440, 64445, 64450, 64455, 64460, - 64465, 64470, 64476, 64481, 64487, 64492, 64497, 64502, 64507, 64512, - 64517, 64523, 64528, 64533, 64538, 64543, 64548, 64553, 64558, 64563, - 64568, 64573, 64579, 64584, 64589, 64594, 64599, 64604, 64609, 64614, - 64619, 64625, 64630, 64635, 64640, 64645, 64650, 64655, 64660, 64665, - 64670, 64675, 64680, 64685, 64691, 1834, 224, 37446, 64696, 64699, 64704, - 64708, 64711, 64716, 63737, 64727, 64737, 64744, 64760, 64769, 64779, - 64789, 64797, 64811, 64819, 64823, 64826, 64833, 64839, 64850, 64862, - 64873, 64882, 64889, 1297, 23311, 64899, 2590, 64903, 64912, 1138, 17290, - 38083, 64920, 64928, 64942, 64955, 64959, 64964, 64969, 64974, 64980, - 64986, 64991, 8535, 64996, 65000, 65008, 11048, 65013, 65019, 65028, - 1721, 11060, 736, 65032, 65041, 65051, 27030, 65060, 65066, 16862, 65072, - 65076, 3964, 11391, 65082, 65089, 60693, 65093, 65097, 3988, 189, 14159, - 65103, 65115, 65119, 65125, 27751, 65129, 11379, 2730, 4, 65134, 65144, - 65150, 65161, 65168, 65174, 65180, 65188, 65195, 65201, 65211, 65221, - 65231, 23499, 1309, 65240, 65244, 65248, 65254, 65258, 2753, 2759, 8532, - 2264, 65262, 65266, 65275, 65283, 65294, 65302, 65310, 65316, 65321, - 65332, 65343, 65351, 65357, 9694, 65362, 65370, 65374, 65378, 65382, - 65394, 28136, 65401, 65411, 65417, 65423, 9796, 65433, 65444, 65454, - 65463, 65467, 65474, 1140, 1170, 65484, 65489, 65497, 65505, 65516, - 65523, 65537, 14088, 393, 65547, 65551, 65559, 65568, 65576, 65582, - 65596, 65603, 65609, 65618, 65625, 65635, 65643, 3812, 156, 65651, 65662, - 65666, 65678, 27949, 161, 65684, 65689, 65693, 65700, 65706, 65714, - 65721, 8818, 65728, 65737, 65745, 3878, 65758, 8199, 65762, 2798, 443, - 65767, 65780, 65785, 1833, 650, 65789, 3895, 65797, 65803, 65807, 931, - 65817, 65826, 65831, 14928, 14935, 45269, 65835, 3822, 13041, 65843, - 65850, 23555, 65854, 65861, 65867, 65872, 65877, 14948, 372, 65882, - 65894, 65900, 65908, 2810, 1753, 65916, 65918, 65923, 65928, 65933, - 65939, 65944, 65949, 65954, 65959, 65964, 65969, 65975, 65980, 65985, - 65990, 65995, 66000, 66005, 66010, 66015, 66021, 66026, 66031, 66036, - 66042, 66047, 66053, 66058, 66063, 66068, 66073, 66078, 66083, 66088, - 66094, 66099, 66105, 66110, 66115, 66120, 66125, 66130, 66135, 66140, - 66145, 66151, 66156, 66161, 66166, 66170, 66174, 66179, 66183, 66188, - 66193, 66199, 66204, 66208, 66213, 66217, 66220, 66222, 66226, 66229, - 66234, 66238, 66242, 66246, 66250, 66259, 66263, 32549, 66266, 32554, - 66273, 66278, 32559, 66287, 66296, 32565, 66301, 32570, 66310, 66315, - 11578, 66319, 66324, 66329, 32575, 66333, 40225, 66337, 66340, 66344, - 8211, 66350, 66355, 66359, 3705, 32580, 66362, 66366, 66369, 66374, - 66378, 66384, 66392, 66405, 66414, 66420, 66425, 66431, 66435, 66441, - 66449, 66454, 66458, 66465, 66471, 66479, 66488, 66496, 32583, 66503, - 66513, 66522, 66535, 66540, 66545, 66554, 66560, 66567, 66578, 66590, - 66597, 66606, 66615, 66624, 66631, 66637, 66644, 66652, 66659, 66667, - 66676, 66684, 66691, 66699, 66708, 66716, 66725, 66735, 66744, 66752, - 66759, 66767, 66776, 66784, 66793, 66803, 66812, 66820, 66829, 66839, - 66848, 66858, 66869, 66879, 66888, 66896, 66903, 66911, 66920, 66928, - 66937, 66947, 66956, 66964, 66973, 66983, 66992, 67002, 67013, 67023, - 67032, 67040, 67049, 67059, 67068, 67078, 67089, 67099, 67108, 67118, - 67129, 67139, 67150, 67162, 67173, 67183, 67192, 67200, 67207, 67215, - 67224, 67232, 67241, 67251, 67260, 67268, 67277, 67287, 67296, 67306, - 67317, 67327, 67336, 67344, 67353, 67363, 67372, 67382, 67393, 67403, - 67412, 67422, 67433, 67443, 67454, 67466, 67477, 67487, 67496, 67504, - 67513, 67523, 67532, 67542, 67553, 67563, 67572, 67582, 67593, 67603, - 67614, 67626, 67637, 67647, 67656, 67666, 67677, 67687, 67698, 67710, - 67721, 67731, 67742, 67754, 67765, 67777, 67790, 67802, 67813, 67823, - 67832, 67840, 67847, 67855, 67864, 67872, 67881, 67891, 67900, 67908, - 67917, 67927, 67936, 67946, 67957, 67967, 67976, 67984, 67993, 68003, - 68012, 68022, 68033, 68043, 68052, 68062, 68073, 68083, 68094, 68106, - 68117, 68127, 68136, 68144, 68153, 68163, 68172, 68182, 68193, 68203, - 68212, 68222, 68233, 68243, 68254, 68266, 68277, 68287, 68296, 68306, - 68317, 68327, 68338, 68350, 68361, 68371, 68382, 68394, 68405, 68417, - 68430, 68442, 68453, 68463, 68472, 68480, 68489, 68499, 68508, 68518, - 68529, 68539, 68548, 68558, 68569, 68579, 68590, 68602, 68613, 68623, - 68632, 68642, 68653, 68663, 68674, 68686, 68697, 68707, 68718, 68730, - 68741, 68753, 68766, 68778, 68789, 68799, 68808, 68818, 68829, 68839, - 68850, 68862, 68873, 68883, 68894, 68906, 68917, 68929, 68942, 68954, - 68965, 68975, 68986, 68998, 69009, 69021, 69034, 69046, 69057, 69069, - 69082, 69094, 69107, 69121, 69134, 69146, 69157, 69167, 69176, 69184, - 69191, 69196, 8058, 69203, 32593, 69208, 69213, 32598, 69219, 20929, - 32603, 69224, 69230, 69238, 69244, 69250, 69257, 69264, 69269, 69273, - 69276, 69280, 69289, 69295, 69307, 69318, 69322, 3081, 8033, 69327, - 69330, 69332, 69336, 69340, 69344, 69350, 69355, 25944, 69360, 69364, - 69367, 69372, 69376, 69383, 69389, 69393, 6170, 69397, 32620, 69402, - 69409, 69418, 69426, 69437, 69445, 69453, 69460, 69467, 69473, 69484, - 32625, 69489, 69500, 69512, 69520, 69531, 69540, 69551, 69556, 69564, - 2556, 69569, 34295, 69582, 69586, 69598, 69606, 69611, 69619, 17485, - 69630, 69636, 69643, 69651, 69657, 32635, 69662, 3914, 58254, 69669, - 69672, 69680, 69693, 69706, 69719, 69732, 69739, 69750, 69759, 41724, - 41729, 69764, 69768, 69776, 69783, 69792, 69800, 69806, 69815, 69823, - 69831, 69835, 69844, 69853, 69863, 69876, 69889, 69899, 32640, 69905, - 69912, 69918, 32646, 69923, 69926, 69930, 69938, 69947, 41462, 69955, - 69964, 69972, 69979, 69987, 69997, 70006, 70015, 70024, 70032, 70043, - 70053, 9366, 21567, 70062, 70067, 70072, 70076, 70080, 70085, 70091, - 70096, 70101, 70107, 70112, 70117, 21532, 70122, 70129, 70137, 70145, - 70150, 70157, 70164, 70169, 70173, 70177, 70185, 70193, 32663, 70199, - 70205, 70217, 70223, 70227, 70234, 70239, 70250, 70260, 70270, 70282, - 70288, 70298, 70308, 32690, 70317, 70326, 70332, 70344, 70355, 70362, - 70367, 70371, 70379, 70385, 70390, 70395, 70402, 70410, 70422, 70432, - 70441, 70450, 70457, 34157, 23851, 70463, 70468, 70472, 70476, 70481, - 70487, 70498, 70511, 70516, 70523, 32695, 70528, 70540, 70549, 70559, - 70570, 70583, 70590, 70599, 70608, 70616, 70621, 70627, 1069, 70632, - 70637, 70642, 70647, 70653, 70658, 70663, 70669, 70675, 70680, 70684, - 70689, 70694, 70699, 58766, 70704, 70709, 70714, 70719, 70725, 70731, - 70736, 70740, 70745, 70750, 70755, 70761, 70766, 70772, 70777, 70782, - 70787, 70792, 70796, 70802, 70807, 70816, 70821, 70826, 70831, 70836, - 70840, 70847, 70853, 17135, 17142, 70858, 70862, 70866, 70870, 70874, - 45524, 70878, 70808, 70880, 70890, 32704, 70893, 70902, 70908, 6143, - 32709, 70912, 70918, 70923, 70929, 70934, 70938, 70945, 70950, 70960, - 70969, 70973, 70979, 70985, 70991, 70995, 71003, 71010, 71018, 71026, - 32714, 71033, 71036, 71043, 71049, 71054, 71058, 71064, 71071, 71076, - 71080, 71089, 71097, 71103, 71108, 32719, 71115, 71122, 71128, 71133, - 71139, 71146, 71152, 21294, 27455, 71158, 71163, 71169, 71181, 70841, - 70848, 21470, 71191, 71196, 71203, 71209, 71216, 71222, 71233, 71238, - 9110, 71246, 71249, 71255, 71259, 71263, 71266, 71272, 32468, 6194, 964, - 13419, 71279, 71285, 71291, 71297, 71303, 71309, 71315, 71321, 71327, - 71332, 71337, 71342, 71347, 71352, 71357, 71362, 71367, 71372, 71377, - 71382, 71387, 71392, 71398, 71403, 71408, 71414, 71419, 71424, 71430, - 71436, 71442, 71448, 71454, 71460, 71466, 71472, 71478, 71483, 71488, - 71494, 71499, 71504, 71510, 71515, 71520, 71525, 71530, 71535, 71540, - 71545, 71550, 71555, 71560, 71565, 71570, 71576, 71581, 71586, 71591, - 71597, 71602, 71607, 71612, 71617, 71623, 71628, 71633, 71638, 71643, - 71648, 71653, 71658, 71663, 71668, 71673, 71678, 71683, 71688, 71693, - 71698, 71703, 71708, 71713, 71718, 71724, 71729, 71734, 71739, 71744, - 71749, 71754, 71759, 1864, 142, 71764, 71768, 71772, 71777, 71785, 71789, - 71796, 71804, 71808, 71821, 71829, 71833, 71836, 71841, 71845, 71850, - 71854, 71862, 71866, 20937, 71871, 71875, 60967, 71879, 71882, 71890, - 71898, 71906, 71911, 71918, 71924, 71930, 71935, 71942, 71947, 71955, - 64947, 71962, 71967, 71972, 71976, 11645, 71980, 71985, 71990, 71994, - 71997, 72003, 72007, 72017, 72026, 72029, 72033, 72040, 72053, 72059, - 72067, 72078, 72089, 72100, 72111, 72120, 72126, 72135, 72143, 72153, - 72166, 72173, 72184, 72190, 72195, 72200, 72206, 72212, 72222, 72231, - 70530, 72239, 72245, 72253, 72259, 72267, 72270, 72274, 72278, 72281, - 72287, 72293, 72301, 72313, 72325, 72332, 72336, 72347, 72355, 72362, - 72374, 72382, 72390, 72397, 72403, 72413, 72422, 72427, 72437, 72446, - 40788, 72453, 72457, 72462, 72470, 72477, 72483, 72487, 72497, 72508, - 72516, 72523, 72535, 72547, 72556, 69572, 72563, 72574, 72588, 72596, - 72606, 72613, 72621, 72633, 72642, 72650, 72660, 72671, 72683, 72692, - 72702, 72709, 72718, 72733, 72741, 72751, 72760, 72768, 72781, 72796, - 72800, 72809, 72821, 72832, 72843, 72854, 72864, 72875, 72883, 72889, - 72899, 72907, 72913, 29028, 72918, 72924, 72929, 72936, 9708, 17505, - 72942, 72951, 72956, 72960, 72967, 72973, 72978, 72983, 72991, 72999, - 73003, 73006, 73009, 73011, 73018, 73024, 73035, 73040, 73044, 73051, - 73057, 73062, 73070, 65446, 65456, 73076, 73083, 73093, 10618, 73100, - 73105, 29224, 73114, 73119, 73126, 73136, 73144, 73152, 73161, 73167, - 73173, 73180, 73187, 73192, 73196, 73204, 73209, 73214, 73222, 73229, - 73234, 73240, 73243, 73247, 73256, 71816, 73265, 73269, 73275, 73286, - 73296, 17514, 73307, 73315, 17526, 73322, 73326, 73335, 27341, 73342, - 73346, 73351, 73368, 73380, 10576, 73392, 73397, 73402, 73407, 21010, - 73411, 73416, 73421, 73427, 73432, 5846, 21014, 73437, 73442, 73448, - 73455, 73460, 73465, 73471, 73477, 73483, 73488, 73494, 73498, 73512, - 73520, 73528, 73534, 73539, 73546, 73556, 73565, 73570, 73575, 73583, - 73588, 73594, 73599, 73608, 59823, 73613, 73616, 73634, 73653, 73666, - 73680, 73696, 73703, 73710, 73716, 73723, 73728, 73734, 73740, 73748, - 73754, 73759, 73764, 73780, 10589, 73794, 73801, 73809, 73815, 73819, - 73822, 73827, 73832, 73839, 73844, 73853, 73858, 73864, 73873, 73882, - 73887, 73891, 73899, 73908, 11674, 73917, 73925, 73930, 73936, 11685, - 73941, 73944, 73949, 73959, 73968, 73973, 73979, 73984, 73992, 73999, - 74010, 74020, 74025, 64875, 74030, 74036, 74041, 74048, 74057, 74065, - 74071, 74077, 74084, 74090, 74094, 16960, 3055, 74099, 74103, 74107, - 74113, 74122, 74128, 74135, 74139, 74160, 74182, 74198, 74215, 74234, - 74243, 74253, 74260, 74267, 27228, 74273, 74277, 74285, 74297, 74303, - 74311, 74315, 74323, 74330, 74334, 74340, 74346, 74351, 3563, 41924, - 74357, 74361, 74365, 74369, 74374, 74379, 74384, 74390, 74396, 74402, - 74409, 74415, 74422, 74428, 74434, 74439, 74445, 74450, 74454, 74459, - 74463, 74468, 41939, 74472, 74477, 74485, 74489, 74494, 74501, 74510, - 74516, 74520, 74527, 74531, 74534, 74541, 74550, 74555, 74559, 74567, - 74576, 74580, 74588, 74594, 74599, 74604, 74610, 74616, 74621, 74625, - 74631, 74636, 74640, 74644, 74647, 74652, 74660, 74670, 74675, 39416, - 74683, 74695, 74699, 74705, 74717, 74728, 74735, 74741, 74748, 74760, - 74767, 74773, 21088, 74777, 74783, 74790, 74796, 74802, 74807, 74812, - 74817, 74826, 7033, 74831, 16426, 74837, 74841, 74845, 74849, 74857, - 74866, 74870, 74877, 74886, 74899, 74905, 74464, 30088, 74910, 74912, - 74917, 74922, 74927, 74932, 74937, 74942, 74947, 74952, 74957, 74962, - 74967, 74972, 74977, 74982, 74988, 74993, 74998, 75003, 75008, 75013, - 75018, 75023, 75028, 75034, 75040, 75046, 75051, 75056, 75068, 75073, - 1870, 46, 75078, 75083, 32746, 75087, 32751, 32756, 32762, 32767, 75091, - 32772, 22083, 75113, 75117, 75121, 75126, 75130, 32776, 75134, 75142, - 32781, 75149, 75152, 75157, 75161, 9543, 75170, 32786, 21945, 75173, - 75177, 1428, 75182, 32797, 75185, 75190, 25737, 25747, 35258, 75195, - 75200, 75205, 75210, 75216, 75221, 75230, 75235, 75242, 75248, 75253, - 75258, 75263, 75273, 75282, 75287, 75295, 75299, 75307, 32611, 37317, - 75314, 75320, 75325, 75330, 12016, 75335, 75341, 75346, 75353, 75359, - 75364, 75372, 75382, 75392, 75398, 75403, 75409, 17536, 75416, 36073, - 75429, 75434, 75440, 30993, 75453, 75459, 75463, 75472, 75479, 75485, - 75493, 75502, 75509, 75515, 75518, 75522, 25878, 75526, 75533, 75539, - 75547, 75552, 23994, 75558, 75561, 75569, 75577, 75591, 75598, 75604, - 75611, 75617, 32811, 75621, 75628, 75636, 75644, 75650, 32816, 75658, - 75664, 75669, 75679, 75685, 75694, 30830, 34716, 75702, 75707, 75712, - 75716, 75721, 75725, 75733, 14920, 39429, 75738, 75743, 32821, 62269, - 75747, 75752, 75756, 75765, 75773, 75779, 75784, 75790, 75797, 75803, - 75808, 75813, 75822, 75834, 75849, 33083, 75855, 16545, 32825, 75859, - 75866, 24104, 75872, 75879, 75888, 75895, 75904, 75910, 75915, 75923, - 75929, 32835, 75934, 75943, 74723, 75952, 75959, 75965, 75971, 75981, - 75989, 75996, 76000, 32840, 76003, 32846, 32852, 76008, 76016, 76024, - 76034, 76043, 76051, 76058, 76068, 32857, 76072, 76074, 76078, 76083, - 76087, 76091, 76097, 76102, 76106, 76117, 76122, 76127, 3060, 76131, - 76138, 76142, 76151, 76159, 76166, 76171, 76176, 62315, 76180, 76183, - 76189, 76197, 76203, 76207, 76212, 76219, 76224, 76230, 34747, 76235, - 76238, 76243, 76247, 76252, 76257, 76261, 76269, 76273, 25756, 25765, - 76279, 76285, 76291, 76296, 76300, 76303, 76313, 76322, 76327, 76333, - 76340, 76346, 76350, 76358, 76363, 34753, 76367, 76375, 76381, 76388, - 76393, 76397, 76402, 58440, 34759, 76408, 76413, 76417, 76422, 76427, - 76432, 76436, 76441, 76446, 76452, 76457, 76462, 76468, 76474, 76479, - 76483, 76488, 76493, 76498, 76502, 24103, 76507, 76512, 76518, 76524, - 76530, 76535, 76539, 76544, 76549, 76554, 76558, 76563, 76568, 76573, - 76578, 76582, 32865, 76590, 76594, 76602, 76610, 76621, 76626, 76630, - 22397, 76635, 76641, 76651, 76658, 76663, 76672, 76677, 76681, 76686, - 76694, 76702, 76709, 65109, 76715, 76723, 76730, 76741, 76747, 76751, - 76757, 32875, 76760, 76767, 76775, 76780, 39620, 76784, 76789, 76796, - 76801, 8992, 76805, 76813, 76820, 76827, 76833, 76847, 63381, 76855, - 76861, 76865, 76868, 76876, 76883, 76888, 76901, 76908, 76912, 76919, - 76924, 60860, 76929, 76932, 76939, 76945, 76949, 76957, 76966, 76976, - 76986, 76995, 77003, 77014, 77019, 77023, 77028, 77032, 35389, 77040, - 21357, 35398, 77045, 77050, 77055, 77060, 77065, 77070, 77075, 77079, - 77084, 77089, 77094, 77099, 77104, 77109, 77113, 77118, 77123, 77127, - 77131, 77135, 77139, 77144, 77149, 77153, 77158, 77162, 77166, 77171, - 77176, 77181, 77186, 77190, 77195, 77200, 77204, 77209, 77214, 77219, - 77224, 77229, 77234, 77239, 77244, 77249, 77254, 77259, 77264, 77269, - 77274, 77279, 77284, 77289, 77294, 77299, 77304, 77308, 77313, 77318, - 77323, 77328, 77333, 77338, 77343, 77348, 77353, 77358, 77363, 77367, - 77372, 77376, 77381, 77386, 77391, 77396, 77401, 77406, 77411, 77416, - 77421, 77425, 77429, 77434, 77439, 77443, 77448, 77453, 77457, 77462, - 77467, 77472, 77477, 77481, 77486, 77491, 77495, 77500, 77504, 77508, - 77512, 77516, 77521, 77525, 77529, 77533, 77537, 77541, 77545, 77549, - 77553, 77557, 77562, 77567, 77572, 77577, 77582, 77587, 77592, 77597, - 77602, 77607, 77611, 77615, 77619, 77623, 77627, 77631, 77636, 77640, - 77645, 77649, 77654, 77659, 77663, 77667, 77672, 77676, 77680, 77684, - 77688, 77692, 77696, 77700, 77704, 77708, 77712, 77716, 77720, 77724, - 77728, 77733, 77738, 77742, 77746, 77750, 77754, 77758, 77762, 77767, - 77771, 77775, 77779, 77783, 77787, 77791, 77796, 77800, 77805, 77809, - 77813, 77817, 77821, 77825, 77829, 77833, 77837, 77841, 77845, 77849, - 77854, 77858, 77862, 77866, 77870, 77874, 77878, 77882, 77886, 77890, - 77894, 77898, 77903, 77907, 77911, 77916, 77921, 77925, 77929, 77933, - 77937, 77941, 77945, 77949, 77953, 77958, 77962, 77967, 77971, 77976, - 77980, 77985, 77989, 77995, 78000, 78004, 78009, 78013, 78018, 78022, - 78027, 78031, 78036, 1521, 78040, 2824, 1759, 1764, 78044, 78048, 2828, - 78052, 1397, 78057, 1342, 78061, 2840, 78065, 78072, 78079, 78093, 2844, - 7131, 78102, 78110, 78117, 78128, 78137, 78144, 78156, 78169, 78182, - 78193, 78198, 78205, 78217, 78221, 2848, 11747, 78231, 78236, 78245, - 78255, 2852, 78260, 78264, 78269, 78276, 78282, 78290, 78302, 1347, - 13042, 78312, 78316, 78322, 78336, 78348, 78360, 78370, 78379, 78388, - 78397, 78405, 78416, 78424, 4051, 78434, 78445, 78454, 78460, 78475, - 78482, 78488, 35514, 78493, 2876, 13046, 78497, 78504, 8930, 78513, 2881, - 32361, 78519, 60609, 78526, 78532, 78543, 78549, 78556, 78562, 78570, - 78577, 78583, 78593, 78602, 78613, 78620, 78626, 78636, 78644, 78650, - 78665, 78671, 78676, 78683, 78686, 78692, 78699, 78705, 78713, 78722, - 78730, 78736, 78745, 41464, 78759, 78764, 78770, 14757, 78775, 78788, - 78797, 78805, 78812, 78816, 78820, 78823, 78830, 78837, 78845, 78853, - 78862, 78870, 14684, 78878, 78883, 78887, 78899, 78906, 78915, 748, - 78925, 78934, 78945, 2897, 78949, 78953, 78959, 78972, 78984, 78994, - 79003, 79015, 26369, 79026, 79034, 79043, 79054, 79065, 79075, 79085, - 79094, 79102, 11312, 79109, 79113, 79116, 79121, 79126, 79130, 79136, - 1352, 11818, 79143, 79154, 79163, 79171, 79180, 79188, 79204, 79215, - 79224, 79232, 79244, 79255, 79271, 79281, 79302, 79315, 79323, 79330, - 14868, 79343, 79348, 79354, 5908, 79360, 79363, 79370, 79380, 8176, - 79387, 79392, 79397, 79402, 79410, 79419, 79427, 9756, 9765, 79432, - 79443, 79448, 79454, 2913, 2918, 79460, 10879, 79466, 79473, 79480, - 79493, 2251, 68, 79498, 79503, 79513, 79519, 79528, 79536, 79546, 79550, - 79555, 79559, 79571, 2941, 79579, 79587, 79592, 79603, 79614, 79623, - 79628, 79634, 79639, 79649, 79659, 79664, 79670, 79674, 79679, 79688, - 21410, 79692, 4128, 20, 79697, 79706, 79713, 79720, 79726, 79732, 864, - 79737, 79742, 60937, 79747, 79752, 79758, 79764, 79772, 79777, 79784, - 79790, 79795, 38030, 41358, 79801, 2945, 32, 79811, 79824, 79829, 79837, - 79842, 79848, 2967, 28310, 79853, 79861, 79868, 79873, 58682, 61940, - 79882, 79886, 1704, 1813, 79891, 79896, 79903, 1817, 247, 79910, 79916, - 2989, 79921, 79926, 79933, 1821, 79938, 79944, 79949, 79961, 6119, 79971, - 1828, 79977, 79982, 79989, 79996, 80011, 80018, 80029, 80037, 2618, - 80041, 80053, 80058, 80062, 80068, 28135, 2256, 80072, 80083, 80087, - 80091, 80097, 80101, 80110, 80114, 80125, 80129, 2302, 32190, 80133, - 80143, 3080, 9371, 80151, 80156, 80160, 80169, 80176, 80182, 3050, 17152, - 80186, 80199, 80217, 80222, 80230, 80238, 80248, 9985, 13154, 80260, - 80273, 80280, 80287, 80303, 80310, 80316, 1064, 80323, 80330, 80340, - 80349, 80361, 42328, 80369, 3064, 12030, 80372, 80380, 80384, 78272, - 3068, 80388, 21191, 12046, 3756, 80392, 3074, 80396, 80406, 80412, 80418, - 80424, 80430, 80436, 80442, 80448, 80454, 80460, 80466, 80472, 80478, - 80484, 80490, 80496, 80502, 80508, 80514, 80520, 80526, 80532, 80538, - 80544, 80550, 80556, 80563, 80570, 80576, 80582, 80588, 80594, 80600, - 80606, 1357, 16062, 12068, 80612, 80617, 80622, 80627, 80632, 80637, - 80642, 80647, 80652, 80657, 80662, 80667, 80672, 80677, 80682, 80687, - 80692, 80697, 80702, 80707, 80712, 80717, 80722, 80727, 80732, 80737, - 80743, 80748, 80753, 80759, 80764, 80770, 80775, 80780, 80786, 80791, - 80796, 80801, 80806, 80811, 80816, 80821, 80826, 80407, 80413, 80419, - 80425, 80431, 80437, 80443, 80449, 80455, 80461, 80467, 80473, 80479, - 80485, 80491, 80832, 80497, 80503, 80509, 80838, 80515, 80521, 80527, - 80533, 80539, 80545, 80551, 80571, 80844, 80850, 80577, 80856, 80583, - 80589, 80595, 80601, 80607, 3091, 3096, 80862, 80867, 80870, 80876, - 80882, 80889, 80894, 80899, 2307, + 0, 0, 6, 10, 14, 22, 27, 34, 39, 45, 47, 50, 62, 70, 80, 89, 102, 108, + 113, 118, 126, 135, 140, 145, 148, 152, 158, 164, 169, 177, 182, 189, + 197, 198, 201, 209, 215, 224, 231, 241, 248, 253, 256, 261, 149, 267, + 273, 276, 280, 285, 291, 297, 302, 308, 313, 322, 328, 335, 342, 351, + 356, 361, 369, 371, 372, 380, 388, 395, 398, 404, 411, 416, 418, 425, + 427, 306, 429, 431, 436, 443, 451, 455, 461, 466, 471, 476, 483, 493, + 496, 503, 513, 522, 529, 538, 545, 549, 557, 560, 573, 580, 584, 593, + 597, 601, 607, 611, 615, 616, 625, 633, 638, 646, 651, 657, 665, 668, + 675, 684, 692, 695, 698, 700, 706, 714, 721, 724, 734, 738, 742, 753, + 758, 762, 766, 773, 780, 784, 788, 782, 794, 798, 803, 806, 810, 816, + 821, 830, 838, 843, 610, 543, 848, 851, 857, 861, 867, 874, 877, 886, + 895, 902, 915, 919, 927, 936, 942, 950, 957, 967, 974, 979, 985, 993, + 997, 1000, 21, 1009, 1018, 1026, 1030, 1035, 1038, 1047, 1052, 1054, + 1061, 1065, 1068, 1071, 1078, 1083, 1087, 1090, 1094, 1102, 1108, 1118, + 1124, 1131, 1135, 1143, 1146, 1151, 1157, 1163, 1167, 1174, 1179, 1184, + 1190, 1195, 1200, 1205, 1209, 1214, 1220, 1225, 1230, 1234, 1240, 1245, + 1250, 1255, 1259, 1264, 1269, 1274, 1280, 1286, 1292, 1297, 1301, 1306, + 1311, 1316, 1320, 1325, 1330, 1335, 1340, 1175, 1180, 1185, 1191, 1196, + 1344, 1206, 1350, 1355, 1360, 1367, 1371, 1374, 1383, 1210, 1387, 1215, + 1221, 1226, 1391, 1396, 1401, 1405, 1409, 1415, 1419, 1231, 1422, 1241, + 1427, 1431, 1246, 1437, 1251, 1441, 1445, 1256, 1449, 1454, 1458, 1461, + 1465, 1260, 1265, 1470, 1270, 1476, 1482, 1488, 1494, 1275, 1287, 1293, + 1498, 1502, 1506, 1509, 1298, 1513, 1515, 1520, 1525, 1531, 1536, 1541, + 1545, 1550, 1555, 1560, 1565, 1571, 1576, 1581, 1587, 1593, 1598, 1602, + 1607, 1612, 1617, 1622, 1627, 1631, 1639, 1644, 1648, 1653, 1658, 1663, + 1668, 1672, 1675, 1682, 1687, 1692, 1697, 1702, 1708, 1713, 1717, 1302, + 1720, 1725, 1730, 1307, 1734, 1738, 1745, 1312, 1752, 1317, 1756, 1758, + 1763, 1769, 1321, 1774, 1783, 1326, 1788, 1794, 1799, 1331, 1804, 1809, + 1812, 1817, 1821, 1825, 1829, 1832, 1836, 1336, 1341, 1841, 1843, 1849, + 1855, 1861, 1867, 1873, 1879, 1885, 1891, 1896, 1902, 1908, 1914, 1920, + 1926, 1932, 1938, 1944, 1950, 1955, 1960, 1965, 1970, 1975, 1980, 1985, + 1990, 1995, 2000, 2006, 2011, 2017, 2022, 2028, 2034, 2039, 2045, 2051, + 2057, 2063, 2068, 2073, 2075, 2076, 2080, 2084, 2089, 2093, 2097, 2101, + 2106, 2110, 2113, 2118, 2122, 2127, 2131, 2135, 2140, 2144, 2147, 2151, + 2157, 2171, 2175, 2179, 2183, 2186, 2191, 2195, 2199, 2202, 2206, 2211, + 2216, 2221, 2226, 2230, 2234, 2238, 2242, 2247, 2251, 2256, 2260, 2265, + 2271, 2278, 2284, 2289, 2294, 2299, 2305, 2310, 2316, 2321, 2324, 2326, + 1192, 2330, 2337, 2345, 2355, 2364, 2378, 2382, 2386, 2391, 2404, 2412, + 2416, 2421, 2425, 2428, 2432, 2436, 2441, 2446, 2451, 2455, 2458, 2462, + 2469, 2476, 2482, 2487, 2492, 2498, 2504, 2509, 2512, 1760, 2514, 2520, + 2524, 2529, 2533, 2537, 1678, 1771, 2542, 2546, 2549, 2554, 2559, 2564, + 2569, 2573, 2580, 2585, 2588, 2595, 2601, 2605, 2609, 2613, 2618, 2625, + 2630, 2635, 2642, 2648, 2654, 2660, 2674, 2691, 2706, 2721, 2730, 2735, + 2739, 2744, 2749, 2753, 2765, 2772, 2778, 2274, 2784, 2791, 2797, 2801, + 2804, 2811, 2817, 2822, 2826, 2831, 2835, 2839, 2098, 2843, 2848, 2853, + 2857, 2862, 2870, 2874, 2878, 2882, 2886, 2891, 2896, 2901, 2905, 2910, + 2915, 2919, 2924, 2928, 2931, 2935, 2939, 2947, 2952, 2956, 2960, 2966, + 2975, 2979, 2983, 2989, 2994, 3001, 3005, 3015, 3019, 3023, 3028, 3032, + 3037, 3043, 3048, 3052, 3056, 3060, 2472, 3068, 3073, 3079, 3084, 3088, + 3093, 3098, 3102, 3108, 3113, 2102, 3119, 3125, 3130, 3135, 3140, 3145, + 3150, 3155, 3160, 3165, 3170, 3176, 3181, 1207, 101, 3187, 3191, 3195, + 3199, 3204, 3208, 3212, 3218, 3223, 3227, 3231, 3236, 3241, 3245, 3250, + 3254, 3257, 3261, 3266, 3270, 3275, 3279, 3282, 3286, 3290, 3295, 3299, + 3302, 3315, 3319, 3323, 3327, 3332, 3336, 3340, 3343, 3347, 3351, 3356, + 3360, 3365, 3370, 3375, 3379, 3384, 3387, 3390, 3395, 3401, 3405, 3409, + 3412, 3417, 3421, 3426, 3430, 3434, 3437, 3443, 3448, 3453, 3459, 3464, + 3469, 3475, 3481, 3486, 3491, 3496, 3501, 1063, 559, 3504, 3507, 3512, + 3516, 3520, 3524, 3528, 3531, 3535, 3540, 3545, 3549, 3554, 3558, 3563, + 3567, 3571, 3575, 3581, 3587, 3590, 3593, 3599, 3606, 3613, 3619, 3626, + 3631, 3635, 3639, 3646, 3651, 3658, 3663, 3667, 3677, 3681, 3685, 3690, + 3695, 3705, 2114, 3710, 3714, 3717, 3723, 3728, 3734, 3740, 3745, 3752, + 3756, 3760, 612, 693, 1368, 3764, 3771, 3778, 3784, 3789, 3796, 3803, + 3809, 3815, 3820, 3824, 3830, 3837, 3842, 3846, 2123, 3850, 3858, 679, + 3864, 3875, 3879, 3889, 2128, 3895, 3900, 3915, 3921, 3928, 3938, 3944, + 3949, 3955, 3961, 3964, 3967, 3971, 3976, 3983, 3988, 3992, 3996, 4000, + 4004, 4009, 4015, 4026, 4030, 3262, 4035, 4047, 4055, 4059, 4064, 1547, + 4071, 4074, 4077, 4081, 4084, 4090, 4094, 4108, 4112, 4115, 4119, 4125, + 4131, 4136, 4140, 4144, 4150, 4161, 4167, 4172, 4178, 4182, 4190, 4202, + 4212, 4218, 4223, 4232, 4240, 4247, 4251, 4257, 4266, 4275, 4279, 4284, + 4289, 4293, 4301, 4305, 4310, 4314, 4320, 2136, 1384, 4326, 4331, 4337, + 4342, 4347, 4352, 4357, 4362, 4367, 4373, 4378, 4384, 4389, 4394, 4399, + 4405, 4410, 4415, 4420, 4425, 4431, 4436, 4442, 4447, 4452, 4457, 4462, + 4467, 4472, 4478, 4483, 4488, 271, 301, 4493, 4499, 4503, 4507, 4512, + 4516, 4520, 4523, 4527, 4531, 4535, 4539, 4543, 4548, 4552, 4556, 4562, + 4323, 4567, 4571, 4574, 4579, 4584, 4589, 4594, 4599, 4604, 4609, 4614, + 4619, 4624, 4628, 4633, 4638, 4643, 4648, 4653, 4658, 4663, 4668, 4673, + 4678, 4682, 4687, 4692, 4697, 4702, 4707, 4712, 4717, 4722, 4727, 4732, + 4736, 4741, 4746, 4751, 4756, 4761, 4766, 4771, 4776, 4781, 4786, 4790, + 4795, 4800, 4805, 4810, 4815, 4820, 4825, 4830, 4835, 4840, 4844, 4849, + 4854, 4859, 4864, 4869, 4874, 4879, 4884, 4889, 4894, 4898, 4903, 4908, + 4913, 4918, 4923, 4928, 4933, 4938, 4943, 4948, 4952, 4957, 4962, 4967, + 4972, 4978, 4984, 4990, 4996, 5002, 5008, 5014, 5019, 5025, 5031, 5037, + 5043, 5049, 5055, 5061, 5067, 5073, 5079, 5084, 5090, 5096, 5102, 5108, + 5114, 5120, 5126, 5132, 5138, 5144, 5149, 5155, 5161, 5167, 5173, 5179, + 5185, 5191, 5197, 5203, 5209, 5214, 5220, 5226, 5232, 5238, 5244, 5250, + 5256, 5262, 5268, 5274, 5279, 5285, 5291, 5297, 5303, 5309, 5315, 5321, + 5327, 5333, 5339, 5344, 5348, 5354, 5360, 5366, 5372, 5378, 5384, 5390, + 5396, 5402, 5408, 5413, 5419, 5425, 5431, 5437, 5443, 5449, 5455, 5461, + 5467, 5473, 5478, 5484, 5490, 5496, 5502, 5508, 5514, 5520, 5526, 5532, + 5538, 5543, 5549, 5555, 5561, 5567, 5573, 5579, 5585, 5591, 5597, 5603, + 5608, 5614, 5620, 5626, 5632, 5638, 5644, 5650, 5656, 5662, 5668, 5673, + 5679, 5685, 5691, 5697, 5703, 5709, 5715, 5721, 5727, 5733, 5738, 5744, + 5750, 5756, 5762, 5768, 5774, 5780, 5786, 5792, 5798, 5803, 5809, 5815, + 5821, 5827, 5833, 5839, 5845, 5851, 5857, 5863, 5868, 5874, 5880, 5886, + 5892, 5898, 5904, 5910, 5916, 5922, 5928, 5933, 5939, 5945, 5951, 5957, + 5963, 5969, 5975, 5981, 5987, 5993, 5998, 6002, 6005, 6012, 6016, 6029, + 6033, 6037, 6041, 6044, 6048, 6053, 6057, 6061, 6067, 6074, 6082, 6089, + 6093, 6101, 6110, 6116, 6128, 6133, 6136, 6141, 6145, 6155, 6163, 6171, + 6177, 6181, 6191, 6201, 6209, 6216, 6223, 6229, 6235, 6242, 6246, 6253, + 6263, 6273, 6281, 6288, 6293, 6297, 6301, 6309, 6313, 6318, 6325, 6333, + 6338, 6342, 6347, 6351, 6358, 6363, 6377, 6382, 6387, 6394, 3517, 6403, + 6407, 6412, 6416, 6420, 6423, 6428, 6433, 6442, 6448, 6454, 6460, 6464, + 6475, 6485, 6500, 6515, 6530, 6545, 6560, 6575, 6590, 6605, 6620, 6635, + 6650, 6665, 6680, 6695, 6710, 6725, 6740, 6755, 6770, 6785, 6800, 6815, + 6830, 6845, 6860, 6875, 6890, 6905, 6920, 6935, 6950, 6965, 6980, 6995, + 7010, 7025, 7040, 7055, 7070, 7085, 7100, 7115, 7130, 7145, 7160, 7175, + 7190, 7205, 7220, 7229, 7238, 7243, 7249, 7259, 7263, 7267, 7272, 7277, + 7285, 7289, 7292, 7296, 3010, 7299, 7304, 305, 474, 7310, 7318, 7322, + 7326, 7329, 7333, 7339, 7343, 7351, 7357, 7362, 7369, 7377, 7384, 7390, + 7395, 7402, 7408, 7416, 7420, 7425, 7437, 7448, 7455, 7459, 7463, 7467, + 7470, 7476, 3287, 7480, 7486, 7491, 7496, 7501, 7507, 7512, 7517, 7522, + 7527, 7533, 7538, 7543, 7549, 7554, 7560, 7565, 7571, 7576, 7582, 7587, + 7592, 7597, 7602, 7607, 7613, 7618, 7623, 7628, 7634, 7640, 7646, 7652, + 7658, 7664, 7670, 7676, 7682, 7688, 7694, 7700, 7705, 7710, 7715, 7720, + 7725, 7730, 7735, 7740, 7746, 7752, 7757, 7763, 7769, 7775, 7780, 7785, + 7790, 7795, 7801, 7807, 7812, 7817, 7822, 7827, 7832, 7838, 7843, 7849, + 7855, 7861, 7867, 7873, 7879, 7885, 7891, 7897, 2145, 7328, 7902, 7906, + 7910, 7913, 7920, 7923, 7927, 7935, 7940, 7945, 7936, 7950, 2172, 7954, + 7960, 7966, 7971, 7976, 7983, 7991, 7996, 8000, 8003, 8007, 8013, 8019, + 8023, 2180, 595, 8026, 8030, 8035, 8041, 8046, 8050, 8053, 8057, 8063, + 8068, 8072, 8079, 8083, 8087, 8091, 800, 872, 8094, 8102, 8109, 8115, + 8122, 8130, 8137, 8144, 8149, 8161, 1227, 1392, 1397, 8172, 1402, 8176, + 8180, 8189, 8197, 8206, 8212, 8217, 8221, 8227, 8232, 2726, 8239, 8243, + 8252, 8261, 8270, 8279, 8284, 8289, 8300, 8312, 8317, 8325, 2231, 8329, + 8331, 8336, 8340, 8349, 8357, 1406, 138, 3559, 3564, 8363, 8367, 8376, + 8382, 8387, 8390, 8399, 3568, 2718, 8405, 8413, 8417, 8421, 8425, 2248, + 8429, 8434, 8441, 8447, 8453, 8456, 8458, 8461, 8469, 8477, 8485, 8488, + 8493, 2261, 8498, 7947, 8501, 8503, 8508, 8513, 8518, 8523, 8528, 8533, + 8538, 8543, 8548, 8553, 8559, 8564, 8569, 8574, 8580, 8585, 8590, 8595, + 8600, 8605, 8610, 8616, 8621, 8626, 8631, 8636, 8641, 8646, 8651, 8656, + 8661, 8666, 8671, 8676, 8681, 8686, 8691, 8696, 8701, 8707, 8713, 8718, + 8723, 8728, 8733, 8738, 2272, 2279, 2285, 8743, 8751, 8757, 8765, 2311, + 2317, 8773, 8777, 8782, 8786, 8790, 8794, 8799, 8803, 8808, 8812, 8815, + 8818, 8824, 8830, 8836, 8842, 8848, 8854, 8860, 8864, 8868, 8872, 8876, + 8881, 8885, 8890, 8894, 8900, 8905, 8912, 8923, 8931, 8941, 8947, 8954, + 8959, 8963, 8974, 8987, 8998, 9011, 9022, 9034, 9046, 9058, 9071, 9084, + 9091, 9097, 9111, 9118, 9124, 9128, 9133, 9137, 9144, 9152, 9156, 9162, + 9166, 9172, 9182, 9186, 9191, 9196, 9203, 9209, 8117, 9219, 9223, 9230, + 9236, 9243, 871, 9247, 9251, 9256, 9261, 9266, 9270, 9276, 9284, 9290, + 9294, 9300, 9310, 9314, 9320, 9325, 9329, 9333, 9339, 9345, 2168, 9350, + 9352, 9357, 9365, 9374, 9378, 9384, 9389, 9394, 9399, 9404, 9410, 9415, + 9420, 4146, 9425, 9430, 9434, 9440, 9445, 9451, 9456, 9461, 9467, 9472, + 9379, 9478, 9482, 9489, 9495, 9500, 9504, 6373, 9509, 9518, 9523, 9528, + 8437, 8444, 9533, 2888, 9537, 9542, 9547, 9552, 9390, 9556, 9561, 9566, + 9395, 9570, 9400, 9575, 9582, 9589, 9595, 9602, 9608, 9614, 9619, 9626, + 9631, 9636, 9641, 9647, 9405, 9411, 9653, 9659, 9664, 9669, 9677, 9416, + 9682, 1028, 9685, 9693, 9699, 9705, 9714, 9722, 9730, 9738, 9746, 9754, + 9762, 9770, 9778, 9787, 9796, 9804, 9813, 9822, 9831, 9840, 9849, 9858, + 9867, 9876, 9885, 9894, 9902, 9907, 9913, 9921, 9928, 9943, 9960, 9979, + 9988, 9996, 10011, 10022, 10032, 10042, 10050, 10056, 10068, 10077, + 10085, 10092, 10099, 10105, 10110, 10120, 10128, 10138, 10145, 10155, + 10165, 10175, 10183, 10190, 10199, 10209, 10223, 10238, 10247, 10255, + 10260, 10264, 10273, 10279, 10284, 10294, 10304, 10314, 10319, 10323, + 10332, 10337, 10347, 10358, 10371, 10379, 10392, 10404, 10412, 10417, + 10421, 10427, 10432, 10440, 10448, 10455, 10460, 10468, 10478, 10484, + 10488, 10491, 10495, 10501, 10505, 10513, 10522, 10527, 10531, 10535, + 10543, 10551, 10560, 10568, 10574, 10578, 10585, 10596, 10600, 10603, + 10609, 9421, 10614, 10620, 10627, 10633, 10638, 10645, 10652, 10659, + 10666, 10673, 10680, 10687, 10694, 10699, 9956, 10704, 10710, 10717, + 10724, 10729, 10736, 10745, 10749, 10761, 8475, 10765, 10768, 10772, + 10776, 10780, 10784, 10790, 10796, 10801, 10807, 10812, 10817, 10823, + 10828, 10833, 9199, 10838, 10842, 10846, 10850, 10855, 10860, 10865, + 10873, 10879, 10883, 10887, 10894, 10899, 10907, 10914, 10919, 10923, + 10926, 10932, 10939, 10943, 10946, 10951, 10955, 4185, 10961, 10970, 36, + 10978, 10984, 10989, 10994, 9214, 11000, 11006, 11011, 11015, 11018, + 11033, 11052, 11064, 11077, 11090, 11103, 11117, 11130, 11145, 11152, + 9426, 11158, 11172, 11177, 11183, 11188, 11196, 11201, 8248, 11206, + 11209, 11217, 11224, 11229, 11233, 11239, 2893, 1133, 11243, 11247, + 11253, 11259, 11264, 11270, 11275, 9435, 11281, 11287, 11292, 11297, + 11305, 11311, 11324, 11332, 11339, 9441, 11345, 11353, 11361, 11368, + 11381, 11393, 11403, 11411, 11418, 11425, 11435, 11444, 11453, 11461, + 11468, 11473, 11479, 9446, 11484, 11490, 11495, 11500, 9452, 11505, + 11508, 11515, 11521, 11534, 8916, 11545, 11551, 11560, 11568, 11575, + 11581, 11592, 11598, 3780, 11603, 11608, 11025, 11614, 11621, 11626, + 9457, 11632, 11637, 11644, 11650, 11656, 11661, 11669, 11677, 11684, + 11688, 11700, 11714, 11724, 11729, 11733, 11744, 11750, 11755, 11760, + 9462, 11764, 9468, 11769, 11772, 11777, 11789, 11796, 11801, 11805, + 11813, 11818, 11822, 11827, 11834, 11840, 9473, 9380, 11847, 2898, 8, + 11854, 11859, 11863, 11867, 11873, 11881, 11891, 11896, 11901, 11908, + 11915, 11919, 11930, 11940, 11949, 11958, 11970, 11975, 11979, 11987, + 12001, 12005, 12008, 12016, 12023, 12031, 12035, 12046, 12050, 12057, + 12062, 12066, 12072, 12077, 12082, 12086, 12092, 12097, 12108, 12112, + 12115, 12121, 12126, 12132, 12138, 12145, 12156, 12166, 12176, 12185, + 12192, 12201, 12205, 9483, 9490, 9496, 9501, 12211, 12217, 12223, 9505, + 12229, 12232, 12239, 12244, 12259, 12275, 12290, 12298, 12304, 12309, + 864, 354, 12314, 12322, 12329, 12335, 12340, 12345, 9510, 12347, 12351, + 12356, 12360, 12370, 12375, 12379, 12388, 12392, 12395, 12402, 9519, + 12407, 12410, 12418, 12425, 12433, 12437, 12441, 12448, 12457, 12464, + 12460, 12471, 12475, 12481, 12485, 12489, 12493, 12499, 12509, 12517, + 12524, 12528, 12536, 12540, 12547, 12551, 12556, 12560, 12567, 12573, + 12581, 12587, 12592, 12602, 12607, 12612, 12616, 12624, 4041, 12632, + 12637, 9524, 12641, 12645, 12648, 12656, 12663, 12667, 6173, 12671, + 12676, 12680, 12691, 12701, 12706, 12712, 12716, 12719, 12727, 12732, + 12737, 12744, 12749, 9529, 12754, 12758, 12765, 1722, 6331, 12770, 12775, + 12780, 12785, 12791, 12796, 12802, 12807, 12812, 12817, 12822, 12827, + 12832, 12837, 12842, 12847, 12852, 12857, 12862, 12867, 12872, 12877, + 12882, 12888, 12893, 12898, 12903, 12908, 12913, 12919, 12924, 12929, + 12935, 12940, 12946, 12951, 12957, 12962, 12967, 12972, 12977, 12983, + 12988, 12993, 12998, 836, 117, 13006, 13010, 13015, 13020, 13024, 13028, + 13032, 13037, 13041, 13046, 13050, 13053, 13057, 13061, 13067, 13072, + 13082, 13088, 13096, 13102, 13106, 13110, 13117, 13125, 13134, 13145, + 13152, 13159, 13163, 13172, 13181, 13189, 13198, 13207, 13216, 13225, + 13235, 13245, 13255, 13265, 13275, 13284, 13294, 13304, 13314, 13324, + 13334, 13344, 13354, 13363, 13373, 13383, 13393, 13403, 13413, 13423, + 13432, 13442, 13452, 13462, 13472, 13482, 13492, 13502, 13512, 13522, + 13531, 13541, 13551, 13561, 13571, 13581, 13591, 13601, 13611, 13621, + 13631, 13640, 1236, 13646, 13649, 13653, 13658, 13665, 13671, 13676, + 13680, 13685, 13694, 13702, 13707, 13711, 13715, 13721, 13726, 13732, + 9538, 13737, 13742, 13751, 9548, 13756, 13759, 13765, 13773, 9553, 13780, + 13784, 13788, 13793, 13797, 13807, 13813, 13819, 13824, 13833, 13841, + 13848, 13855, 13860, 13867, 13872, 13876, 13879, 13890, 13900, 13909, + 13917, 13928, 13940, 13950, 13955, 13959, 13964, 13969, 13973, 13979, + 13987, 13994, 14005, 14010, 14020, 14029, 14033, 14036, 14043, 14053, + 14062, 14069, 14073, 14080, 14086, 14091, 14096, 14100, 14109, 14114, + 14118, 14124, 14128, 14133, 14137, 14146, 14154, 14162, 14169, 14177, + 14189, 14200, 14210, 14217, 14223, 14232, 14243, 14252, 14264, 14276, + 14288, 14298, 14307, 14316, 14324, 14331, 14340, 14348, 14352, 14357, + 14363, 14369, 14374, 14379, 7968, 14383, 14385, 14389, 14394, 14400, + 14406, 14415, 14419, 14425, 14433, 14440, 14449, 14458, 14467, 14476, + 14485, 14494, 14503, 14512, 14522, 14532, 14541, 14547, 14554, 14561, + 14567, 14581, 14588, 14596, 14605, 14611, 14620, 14629, 14640, 14650, + 14658, 14665, 14673, 14682, 14695, 14703, 14710, 14723, 14729, 14735, + 14745, 14754, 14763, 14768, 14772, 14778, 14784, 14789, 14796, 14803, + 9213, 14808, 14813, 14820, 14827, 14832, 14844, 13063, 14849, 14857, + 14863, 14868, 14876, 14884, 14891, 14899, 14905, 14913, 14921, 14927, + 14932, 14938, 14945, 14951, 14956, 14960, 14971, 14979, 14985, 14990, + 14997, 15006, 15012, 15017, 15025, 15034, 15048, 3985, 15052, 15057, + 15062, 15068, 15073, 15078, 15082, 15087, 15092, 15097, 7967, 15102, + 15107, 15112, 15117, 15122, 15126, 15131, 15136, 15141, 15146, 15152, + 15158, 15163, 15167, 15173, 15178, 15183, 15188, 9557, 15193, 15198, + 15203, 15208, 15213, 15230, 15248, 15260, 15273, 15290, 15306, 15323, + 15333, 15352, 15363, 15374, 15385, 15396, 15408, 15419, 15430, 15447, + 15458, 15469, 15474, 9562, 15479, 15483, 2401, 15487, 15490, 15496, + 15504, 15512, 15517, 15525, 15533, 15540, 15544, 15549, 15555, 15562, + 15570, 15577, 15589, 15597, 15602, 15608, 12253, 15614, 15623, 15631, + 15640, 15648, 15655, 15661, 15669, 15676, 15682, 15689, 15696, 15702, + 15708, 15717, 15725, 15735, 15742, 15748, 15756, 15762, 15770, 15778, + 15785, 15798, 15805, 15814, 15823, 15832, 15840, 15850, 15857, 15862, + 3671, 15869, 15874, 1352, 15878, 15103, 15882, 15888, 15892, 15900, + 15912, 15919, 15925, 15930, 15937, 15108, 15941, 15945, 15949, 15113, + 15953, 15118, 15957, 15964, 15969, 15973, 15980, 15984, 15992, 15999, + 16004, 16008, 16015, 16032, 16041, 16045, 16048, 16056, 16062, 16067, + 3749, 16071, 16073, 16081, 16088, 16098, 16110, 16115, 16119, 16125, + 16130, 16134, 16140, 16145, 16151, 16154, 16161, 16169, 16176, 16182, + 16188, 16193, 16200, 16206, 16211, 16218, 16222, 16228, 16232, 16239, + 16245, 16250, 16256, 16264, 16272, 16279, 16285, 16290, 16296, 16302, + 16310, 16318, 16324, 16330, 16335, 16342, 16347, 16351, 16357, 16362, + 16369, 16374, 16380, 16383, 16389, 16395, 16398, 16402, 16406, 16418, + 16424, 16429, 16436, 16442, 16448, 16459, 16469, 16478, 16486, 16493, + 16504, 16514, 16524, 16532, 16535, 15132, 16540, 16545, 15137, 15278, + 16553, 16566, 16581, 16592, 15295, 16610, 16623, 16636, 16647, 11040, + 16658, 16671, 16690, 16701, 16712, 16723, 2669, 16736, 16740, 16748, + 16756, 16771, 16786, 16797, 16804, 16810, 16818, 16822, 16828, 16831, + 16841, 16849, 16856, 16864, 16874, 16879, 16886, 16891, 16898, 16909, + 16919, 16925, 16930, 16935, 15142, 16939, 16945, 16951, 16956, 16961, + 16966, 16970, 15147, 15153, 16974, 15159, 16979, 16987, 16995, 17002, + 17011, 17018, 17022, 9401, 17026, 17028, 17033, 17038, 17044, 17049, + 17054, 17059, 17064, 17068, 17074, 17080, 17085, 17091, 17096, 17101, + 17105, 17111, 17116, 17121, 17126, 17131, 17137, 17142, 17147, 17153, + 17159, 17164, 17169, 17174, 17181, 17187, 17198, 17205, 17210, 17214, + 17218, 17221, 17229, 17234, 17241, 17248, 17254, 17259, 17264, 17269, + 17276, 17286, 17291, 17298, 17304, 17313, 17323, 17333, 17347, 17361, + 17375, 17389, 17404, 17419, 17436, 17454, 17467, 17473, 17478, 17483, + 17487, 17495, 17500, 17508, 17514, 17520, 17525, 17530, 17534, 17539, + 17543, 17548, 17552, 17563, 17569, 17574, 17579, 17586, 17591, 17595, + 17600, 17605, 17611, 17618, 15168, 17624, 17628, 17634, 17639, 17644, + 17648, 17654, 17659, 17664, 17671, 17676, 13809, 17680, 17685, 17689, + 17694, 17700, 17706, 17713, 17723, 17731, 17738, 17743, 17747, 17756, + 17764, 17771, 17778, 17784, 17790, 17795, 17800, 17806, 17811, 17817, + 17822, 17828, 17834, 17841, 17847, 17852, 17857, 9627, 17866, 17869, + 17877, 17883, 17888, 17893, 17903, 17910, 17916, 17921, 17926, 17932, + 17937, 17943, 17948, 17954, 17960, 17965, 17973, 17980, 17985, 17990, + 17996, 18001, 18005, 18014, 18025, 18032, 18037, 18042, 18048, 18053, + 18061, 18067, 18073, 18080, 18086, 18091, 18095, 18101, 18106, 18111, + 18116, 1423, 7992, 2912, 18120, 18124, 18128, 18132, 18136, 18140, 18143, + 18148, 18155, 18163, 15179, 18170, 18180, 18188, 18195, 18203, 18213, + 18222, 18235, 18240, 18245, 18253, 18260, 13905, 13914, 18267, 18277, + 18292, 18298, 18305, 18312, 18318, 18324, 18332, 18342, 18352, 15184, + 18361, 18367, 18373, 18381, 18389, 18394, 18403, 18411, 18423, 18433, + 18443, 18453, 18462, 18474, 18484, 18494, 18505, 18510, 18522, 18534, + 18546, 18558, 18570, 18582, 18594, 18606, 18618, 18630, 18641, 18653, + 18665, 18677, 18689, 18701, 18713, 18725, 18737, 18749, 18761, 18772, + 18784, 18796, 18808, 18820, 18832, 18844, 18856, 18868, 18880, 18892, + 18903, 18915, 18927, 18939, 18951, 18963, 18975, 18987, 18999, 19011, + 19023, 19034, 19046, 19058, 19070, 19082, 19094, 19106, 19118, 19130, + 19142, 19154, 19165, 19177, 19189, 19201, 19213, 19225, 19237, 19249, + 19261, 19273, 19285, 19296, 19308, 19320, 19332, 19344, 19356, 19368, + 19380, 19392, 19404, 19416, 19427, 19439, 19451, 19463, 19475, 19488, + 19501, 19514, 19527, 19540, 19553, 19566, 19578, 19591, 19604, 19617, + 19630, 19643, 19656, 19669, 19682, 19695, 19708, 19720, 19733, 19746, + 19759, 19772, 19785, 19798, 19811, 19824, 19837, 19850, 19862, 19875, + 19888, 19901, 19914, 19927, 19940, 19953, 19966, 19979, 19992, 20004, + 20017, 20030, 20043, 20056, 20069, 20082, 20095, 20108, 20121, 20134, + 20146, 20159, 20172, 20185, 20198, 20211, 20224, 20237, 20250, 20263, + 20276, 20288, 20299, 20312, 20325, 20338, 20351, 20364, 20377, 20390, + 20403, 20416, 20429, 20441, 20454, 20467, 20480, 20493, 20506, 20519, + 20532, 20545, 20558, 20571, 20583, 20596, 20609, 20622, 20635, 20648, + 20661, 20674, 20687, 20700, 20713, 20725, 20738, 20751, 20764, 20777, + 20790, 20803, 20816, 20829, 20842, 20855, 20867, 20880, 20893, 20906, + 20919, 20932, 20945, 20958, 20971, 20984, 20997, 21009, 21022, 21035, + 21048, 21061, 21074, 21087, 21100, 21113, 21126, 21139, 21151, 21164, + 21177, 21190, 21203, 21216, 21229, 21242, 21255, 21268, 21281, 21293, + 21306, 21319, 21332, 21345, 21358, 21371, 21384, 21397, 21410, 21423, + 21435, 21448, 21461, 21474, 21487, 21500, 21513, 21526, 21539, 21552, + 21565, 21577, 21590, 21603, 21616, 21629, 21642, 21655, 21668, 21681, + 21694, 21707, 21719, 21730, 21739, 21747, 21755, 21762, 21768, 21772, + 21778, 21784, 21792, 21797, 21803, 21808, 21812, 21821, 9406, 21832, + 21839, 21847, 21854, 21861, 11528, 21868, 21875, 21884, 21889, 21894, + 8020, 21901, 21906, 21909, 21914, 21922, 21929, 21936, 21943, 21949, + 21958, 21967, 21973, 21982, 21986, 21992, 21997, 22007, 22014, 22020, + 22028, 22034, 22041, 22051, 22060, 22064, 22071, 22075, 22080, 22086, + 22094, 22098, 22108, 15194, 22117, 22123, 22127, 22136, 22146, 15199, + 22152, 22159, 22170, 22178, 22188, 22197, 22205, 9178, 22213, 22218, + 22224, 22229, 22233, 22237, 22241, 10124, 22246, 22254, 22261, 22270, + 22277, 22284, 22290, 11448, 22297, 22303, 22307, 22313, 22320, 22326, + 22334, 22340, 22347, 22353, 22359, 22368, 22372, 22380, 22389, 22396, + 22401, 22405, 22416, 22421, 22426, 22431, 22444, 8203, 22448, 22454, + 22462, 22466, 22473, 22482, 22487, 15470, 22495, 22499, 22511, 22516, + 22520, 22523, 22529, 22535, 22541, 22546, 22550, 22553, 22564, 22569, + 9678, 22576, 22581, 1242, 9683, 22586, 22591, 22596, 22601, 22606, 22611, + 22616, 22621, 22626, 22631, 22636, 22641, 22647, 22652, 22657, 22662, + 22667, 22672, 22677, 22682, 22687, 22692, 22698, 22704, 22709, 22714, + 22719, 22724, 22729, 22734, 22739, 22744, 22749, 22755, 22760, 22765, + 22770, 22776, 22782, 22787, 22792, 22797, 22802, 22807, 22812, 22817, + 22822, 22828, 22833, 22838, 22843, 22848, 22854, 22859, 22864, 22868, + 134, 22876, 22880, 22884, 22888, 22893, 22897, 13815, 2327, 22901, 22906, + 22910, 22915, 22919, 22924, 22928, 22934, 22939, 22943, 22947, 22955, + 22959, 22963, 22968, 22973, 22977, 22983, 22988, 22992, 22997, 23002, + 23006, 23013, 23020, 23027, 23031, 23035, 23040, 23044, 23047, 23053, + 23066, 23071, 23080, 23085, 9903, 23090, 23095, 23098, 2732, 2737, 23102, + 23108, 23114, 7413, 23119, 23124, 23129, 23135, 23140, 14636, 23145, + 23150, 23155, 23160, 23166, 23171, 23176, 23182, 23187, 23191, 23196, + 23201, 23206, 23211, 23215, 23220, 23224, 23229, 23234, 23239, 23244, + 23248, 23253, 23257, 23262, 23267, 23272, 23277, 2921, 23192, 23281, + 23289, 23296, 10218, 23308, 23316, 23197, 23323, 23328, 23336, 23202, + 23341, 23346, 23354, 23359, 23207, 23364, 23372, 23377, 23381, 23387, + 23396, 23404, 23408, 23411, 23418, 23422, 23426, 23432, 23439, 23444, + 9205, 1727, 1732, 23448, 23454, 23460, 23465, 23469, 23473, 23477, 23481, + 23485, 23489, 23493, 23497, 23500, 23506, 23513, 23521, 23527, 23533, + 23538, 23543, 23547, 23552, 14556, 14563, 23559, 23571, 23574, 23581, + 17250, 23588, 23596, 23607, 23616, 23629, 23639, 23653, 23665, 23679, + 23692, 23704, 23714, 23726, 23732, 23747, 23771, 23789, 23808, 23821, + 23835, 23853, 23869, 23886, 23904, 23915, 23934, 23951, 23971, 23989, + 24001, 24015, 24029, 24041, 24058, 24077, 24095, 24107, 24125, 24144, + 15338, 24157, 24177, 24189, 11071, 24201, 24206, 24211, 24216, 24222, + 24227, 24231, 24238, 24244, 2418, 24248, 24254, 24258, 24261, 24265, + 24268, 24276, 24282, 23225, 24286, 24295, 24306, 24312, 24318, 24333, + 24342, 24350, 24357, 24362, 24366, 24373, 24379, 24388, 24396, 24403, + 24413, 24422, 24432, 24437, 24446, 24455, 24466, 24477, 4103, 24487, + 24491, 24501, 24509, 24519, 24530, 24535, 24545, 24553, 24560, 24566, + 24573, 24578, 23235, 24582, 24591, 24595, 24598, 24603, 24611, 24618, + 24627, 24635, 24643, 24653, 24662, 24668, 24674, 24678, 23240, 23245, + 24682, 24692, 24702, 24712, 24720, 24727, 24737, 24745, 24753, 24759, + 24767, 812, 24776, 15529, 577, 24790, 24799, 24807, 24818, 24829, 24839, + 24848, 24860, 24869, 24878, 24885, 24891, 24900, 24909, 24917, 24927, + 24935, 24943, 9644, 24949, 24952, 24956, 24961, 24966, 24970, 10333, + 23258, 23263, 24978, 24984, 24990, 24995, 25000, 25004, 25012, 25018, + 25024, 25028, 3627, 25036, 25041, 25046, 25050, 25054, 10413, 25061, + 25069, 25083, 25090, 25096, 10422, 10428, 25104, 25112, 25119, 25124, + 25129, 23268, 25135, 25146, 25150, 25155, 2621, 25160, 25171, 25177, + 25182, 25186, 25190, 25193, 25200, 25207, 25213, 25220, 25226, 25230, + 23273, 25235, 25239, 25243, 1428, 8385, 25248, 25253, 25258, 25263, + 25268, 25273, 25278, 25283, 25288, 25293, 25298, 25303, 25308, 25313, + 25319, 25324, 25329, 25334, 25339, 25344, 25349, 25355, 25360, 25365, + 25370, 25375, 25380, 25385, 25390, 25396, 25402, 25407, 25413, 25418, + 25423, 5, 25429, 25433, 25437, 25441, 25446, 25450, 25454, 25458, 25462, + 25467, 25471, 25476, 25480, 25483, 25487, 25492, 25496, 25501, 25505, + 25509, 25513, 25518, 25522, 25526, 25536, 25541, 25545, 25549, 25554, + 25559, 25568, 25573, 25578, 25582, 25586, 25599, 25611, 25620, 25629, + 25634, 25640, 25645, 25649, 25653, 25663, 25672, 25680, 25686, 25691, + 25695, 25702, 25712, 25721, 25729, 25737, 25744, 25752, 25761, 25770, + 25778, 25788, 25793, 25797, 25801, 25804, 25806, 25810, 25814, 25819, + 25824, 25828, 25832, 25835, 25839, 25842, 25846, 25849, 25852, 25856, + 25862, 25866, 25870, 25874, 25879, 25884, 25889, 25893, 25896, 25901, + 25907, 25912, 25918, 25923, 25927, 25933, 25937, 25941, 25946, 25950, + 25955, 25960, 25964, 25968, 25975, 25979, 25982, 25986, 25990, 25996, + 26002, 26006, 26010, 26015, 26022, 26028, 26032, 26041, 26045, 26049, + 26052, 26058, 26063, 26069, 1472, 1791, 26074, 26079, 26084, 26089, + 26094, 26099, 26104, 2155, 2201, 26109, 26112, 26116, 26120, 26125, + 26129, 15541, 26133, 26138, 26143, 26147, 26150, 26155, 26159, 26164, + 26168, 15545, 26173, 26176, 26179, 26183, 26188, 26192, 26205, 26209, + 26212, 26220, 26229, 26236, 26241, 26247, 26253, 26261, 26268, 26275, + 26279, 26283, 26287, 26292, 26297, 26301, 26309, 26314, 26326, 26337, + 26342, 26346, 26350, 26356, 26359, 26364, 26369, 26373, 26377, 26380, + 26386, 8123, 2331, 26390, 26395, 26411, 9950, 26431, 26440, 26456, 26460, + 26467, 26470, 26476, 26486, 26492, 26501, 26516, 26528, 26539, 26547, + 26556, 26562, 26571, 26581, 26591, 26602, 26613, 26623, 26632, 26639, + 26648, 26656, 26663, 26671, 26678, 26685, 26698, 26705, 26713, 26720, + 26726, 26731, 26740, 26746, 26751, 26759, 26766, 24511, 26778, 26790, + 26804, 26812, 26819, 26831, 26840, 26849, 26857, 26865, 26873, 26880, + 26889, 26897, 26907, 26916, 26926, 26935, 26944, 26952, 26957, 26961, + 26964, 26968, 26972, 26976, 26980, 26984, 26990, 26996, 27004, 15590, + 27011, 27016, 27023, 27029, 27036, 15598, 27043, 27046, 27058, 27066, + 27072, 27077, 27081, 10363, 27092, 27100, 27110, 27119, 27126, 27130, + 15609, 27133, 27140, 27144, 27150, 27153, 27160, 27166, 27173, 27179, + 27183, 27188, 27192, 27201, 27208, 27214, 8164, 27221, 27229, 27236, + 27242, 27247, 27253, 27259, 27267, 27273, 27277, 27280, 27282, 26969, + 27291, 27297, 27303, 27313, 27318, 27325, 27331, 27336, 27341, 27346, + 27350, 27355, 27362, 27368, 27377, 27381, 27388, 27394, 27403, 27409, + 27414, 27420, 27425, 27432, 27443, 27448, 27452, 27462, 27468, 27472, + 27477, 27487, 27496, 27500, 27507, 27515, 27522, 27528, 27533, 27541, + 27548, 27553, 27560, 27572, 27581, 27585, 13746, 27593, 27603, 27607, + 26216, 27618, 27623, 27627, 27634, 27641, 22979, 26894, 27646, 27650, + 27653, 23921, 27658, 27672, 27688, 27706, 27725, 27742, 27760, 23940, + 27777, 27797, 23957, 27809, 27821, 16597, 27833, 23977, 27847, 27859, + 11084, 27873, 27878, 27883, 27888, 27894, 27900, 27906, 27910, 27918, + 27925, 27930, 27940, 27946, 10707, 27952, 27954, 27959, 27967, 27971, + 27358, 27977, 27984, 12170, 12180, 27991, 28001, 28006, 28010, 28013, + 28019, 28027, 28039, 28049, 28065, 28078, 28092, 16615, 28106, 28113, + 28117, 28120, 28125, 28129, 28136, 28143, 28153, 28158, 28163, 28168, + 28176, 28184, 28189, 28198, 28203, 3329, 28207, 28210, 28213, 28218, + 28225, 28230, 28246, 28254, 28262, 9718, 28270, 28275, 28279, 28285, + 28290, 28296, 28299, 28305, 28317, 28325, 28332, 28338, 28345, 28356, + 28370, 28383, 28389, 28398, 28404, 28413, 28425, 28436, 28446, 28455, + 28464, 28472, 28483, 8146, 28490, 28497, 28503, 28508, 28514, 28521, + 28531, 28541, 28550, 28556, 28563, 28568, 28576, 28583, 28591, 28599, + 28611, 6438, 28618, 28621, 28630, 28638, 28644, 28650, 28655, 28659, + 28662, 28668, 28675, 28680, 28685, 28690, 28694, 28706, 28717, 28726, + 28734, 15757, 28739, 28745, 28751, 12163, 8862, 28756, 28760, 28764, + 28767, 28770, 28776, 28784, 28792, 28796, 28800, 28805, 28808, 28817, + 28821, 28824, 28832, 28843, 28847, 28853, 28859, 28863, 28869, 28877, + 28899, 28923, 28932, 28939, 28946, 28952, 28960, 28966, 28971, 28982, + 29000, 29007, 29015, 29019, 29024, 29033, 29046, 29054, 29066, 29077, + 29088, 29098, 29112, 29121, 29129, 29141, 9967, 29152, 29163, 29175, + 29185, 29194, 29199, 29203, 29211, 29222, 29232, 29237, 29241, 29244, + 29247, 29255, 29263, 29272, 29282, 29291, 29297, 29311, 2683, 29333, + 29344, 29353, 29363, 29375, 29384, 29393, 29403, 29411, 29419, 29428, + 29433, 29444, 29449, 29460, 29464, 29474, 29483, 29491, 29501, 29511, + 29519, 29528, 29535, 29543, 29550, 29559, 29568, 29572, 29580, 29587, + 29595, 29602, 29613, 29628, 29635, 29641, 29651, 29660, 29666, 29677, + 29681, 29688, 29692, 29698, 14758, 29704, 29708, 29713, 29720, 29724, + 29728, 29736, 29744, 29750, 29759, 29766, 29771, 29776, 29786, 24580, + 29790, 29793, 29798, 29803, 29808, 29813, 29818, 29823, 29828, 29833, + 29839, 29844, 29849, 29855, 1198, 699, 29860, 29869, 2379, 29876, 29881, + 29885, 29891, 1247, 558, 270, 29896, 29905, 29913, 29922, 29930, 29941, + 29949, 29958, 29966, 10502, 29970, 29978, 29986, 29991, 15558, 29997, + 30003, 30009, 6034, 30014, 30018, 30024, 30028, 30035, 1438, 30041, + 30048, 1347, 6042, 30052, 30062, 30070, 30076, 30085, 30093, 30099, + 30107, 30114, 11720, 30120, 30127, 30132, 30139, 1479, 199, 2154, 30145, + 30151, 30158, 30169, 30180, 30188, 30195, 30205, 30214, 30222, 30231, + 30238, 30245, 30258, 30265, 30271, 30282, 30301, 1252, 30305, 30310, + 30318, 3686, 30322, 30327, 30331, 30335, 1442, 25833, 30345, 30349, + 30354, 30358, 3595, 30364, 30372, 30379, 30390, 30398, 30406, 3687, 320, + 30411, 30419, 30427, 30434, 30440, 30445, 2223, 11251, 30452, 30458, + 27184, 27438, 30464, 542, 106, 30468, 30472, 30478, 635, 9593, 30483, + 30490, 30496, 30500, 1624, 30503, 30507, 16005, 30510, 30515, 30522, + 30528, 30533, 30541, 30548, 30554, 23361, 30558, 30562, 3757, 17541, + 30566, 30571, 30575, 30578, 30586, 30594, 30599, 30607, 30610, 30617, + 30627, 30639, 30644, 30648, 30656, 30663, 30669, 30676, 30683, 30686, + 30690, 30694, 1446, 30704, 30706, 30711, 30717, 30723, 30728, 30733, + 30738, 30743, 30748, 30753, 30758, 30763, 30768, 30773, 30778, 30783, + 30788, 30793, 30799, 30805, 30811, 30817, 30822, 30827, 30832, 30838, + 30843, 30848, 30853, 30859, 30864, 30870, 30875, 30880, 30885, 30890, + 30896, 30901, 30907, 30912, 30917, 30922, 30927, 30933, 30938, 30944, + 30949, 30954, 30959, 30964, 30969, 30974, 30979, 30984, 30989, 30995, + 31001, 31007, 31012, 31017, 31022, 31027, 31033, 31039, 31045, 31051, + 31057, 31063, 31068, 31074, 31079, 31084, 31089, 31094, 31100, 2463, + 31105, 2470, 2477, 2774, 31110, 2483, 2493, 31116, 31120, 31125, 31130, + 31136, 31141, 31146, 31150, 31155, 31161, 31166, 31171, 31176, 31182, + 31187, 31191, 31195, 31200, 31205, 31210, 31215, 31220, 31226, 31232, + 31237, 31241, 31246, 31252, 31256, 31261, 31266, 31271, 31276, 31280, + 31283, 31288, 31293, 31298, 31303, 31308, 31314, 31320, 31325, 31330, + 31335, 31339, 31344, 31349, 31354, 31359, 31364, 31369, 31373, 31378, + 31383, 31388, 31392, 31396, 31400, 31405, 31413, 31418, 31423, 31429, + 31435, 31441, 31446, 31450, 31453, 31458, 31463, 31467, 31472, 31477, + 31481, 31486, 31490, 31493, 31498, 3853, 18248, 31503, 31508, 31513, + 31521, 22273, 30045, 9273, 31526, 31531, 31535, 31540, 31544, 31548, + 31553, 31557, 31560, 31563, 31567, 31572, 31576, 31584, 31588, 31591, + 31596, 31600, 31604, 31609, 31614, 31618, 31624, 31629, 31634, 31641, + 31648, 31652, 31655, 31661, 31670, 31677, 31685, 31692, 31696, 31701, + 31705, 31709, 31715, 31721, 31725, 31731, 31736, 31741, 31745, 31752, + 31758, 31764, 31770, 31776, 31783, 31789, 31795, 31801, 31807, 31813, + 31819, 31825, 31832, 31838, 31845, 31851, 31857, 31863, 31869, 31875, + 31881, 31887, 31893, 31899, 12059, 31905, 31911, 31916, 31921, 31926, + 31929, 31935, 31943, 31948, 31952, 31957, 31963, 31972, 31978, 31983, + 31988, 31993, 31997, 32002, 32007, 32012, 32017, 32022, 32029, 32036, + 32042, 32048, 32053, 17191, 32060, 32066, 32073, 32079, 32085, 32090, + 32098, 32103, 10117, 32107, 32112, 32117, 32123, 32128, 32133, 32137, + 32142, 32147, 32153, 32158, 32163, 32168, 32172, 32177, 32182, 32186, + 32191, 32196, 32200, 32205, 32209, 32214, 32219, 32224, 32228, 32233, + 32237, 32241, 16111, 32246, 32255, 32261, 32267, 32276, 32284, 32293, + 32301, 32306, 32310, 32317, 32323, 32331, 32335, 32338, 32343, 32352, + 32360, 32378, 32384, 1478, 32390, 32393, 32397, 23455, 23461, 32403, + 32407, 32418, 32429, 32440, 32452, 32456, 32463, 32470, 32475, 32479, + 6079, 855, 22272, 32487, 32492, 32496, 32501, 32505, 32511, 32516, 32522, + 32527, 32533, 32538, 32544, 32549, 32555, 32561, 32567, 32572, 32528, + 32534, 32576, 32581, 32587, 32592, 32598, 32603, 32609, 32614, 32539, + 10957, 32618, 32550, 32556, 32562, 2866, 3509, 32624, 32627, 32632, + 32638, 32644, 32650, 32657, 32663, 32669, 32675, 32681, 32687, 32693, + 32699, 32705, 32711, 32717, 32723, 32729, 32736, 32742, 32748, 32754, + 32760, 32766, 32769, 32774, 32777, 32784, 32789, 32797, 32802, 32807, + 32813, 32818, 32823, 32827, 32832, 32838, 32843, 32849, 32854, 32860, + 32865, 32871, 32877, 32881, 32886, 32891, 32896, 32901, 32905, 32910, + 32915, 32920, 32926, 32932, 32938, 32944, 32949, 32953, 32956, 32962, + 32968, 32977, 32985, 32992, 32997, 33001, 33005, 33010, 15959, 33015, + 33023, 33029, 3805, 1357, 33034, 33038, 8213, 33044, 33050, 33057, 8222, + 33061, 33067, 33074, 33080, 33089, 33097, 33109, 33113, 33120, 33126, + 33131, 33135, 33139, 33142, 33151, 33159, 32529, 33164, 33174, 33184, + 33194, 33200, 33205, 33215, 33220, 33233, 33247, 33258, 33270, 33282, + 33296, 33309, 33321, 33333, 15379, 33347, 33352, 33357, 33361, 33365, + 33369, 1780, 28434, 33373, 33378, 32577, 33383, 33386, 33391, 33396, + 33401, 33407, 33413, 10622, 33418, 33424, 33431, 16549, 33437, 33442, + 33447, 33451, 33456, 33461, 32582, 33466, 33471, 33476, 33482, 32588, + 33487, 33490, 33497, 33505, 33511, 33517, 33523, 33534, 33539, 33546, + 33553, 33560, 33568, 33577, 33586, 33592, 33598, 33606, 32593, 33611, + 33617, 33623, 32599, 33628, 33633, 33641, 33649, 33655, 33662, 33668, + 33675, 33682, 33688, 33696, 33706, 33713, 33719, 33724, 33730, 33735, + 33740, 33747, 33756, 33764, 33769, 33775, 33782, 33790, 33796, 33801, + 33807, 33816, 33823, 29277, 33829, 33833, 33838, 33847, 33852, 33857, + 33862, 13092, 33870, 33875, 33880, 33885, 33889, 33894, 33899, 33906, + 33911, 33916, 33921, 32604, 22209, 33927, 2539, 222, 33930, 33933, 33937, + 33941, 33951, 33959, 33966, 33970, 33977, 33984, 33993, 33997, 34000, + 34006, 34014, 34022, 34026, 34030, 34033, 34039, 34046, 34050, 34054, + 34061, 34069, 32540, 34076, 34084, 10682, 598, 349, 34096, 34101, 34106, + 34112, 34117, 34122, 3826, 34127, 34130, 34135, 34140, 34145, 34150, + 34155, 34162, 23567, 34167, 34172, 34177, 34182, 34187, 34193, 34198, + 34204, 32780, 34210, 34215, 34221, 34227, 34237, 34242, 34247, 34251, + 34256, 34261, 34266, 34271, 34284, 34289, 23312, 17621, 3839, 34293, + 34299, 34304, 34309, 34315, 34320, 34325, 34329, 34334, 34339, 34345, + 34350, 34355, 1362, 34359, 34364, 34369, 34374, 34378, 34383, 34388, + 34393, 34399, 34405, 34410, 34414, 34418, 34423, 34428, 34433, 34437, + 34445, 34449, 34455, 34459, 34466, 17400, 32551, 34472, 34479, 34487, + 34494, 34500, 34513, 34525, 34530, 34536, 34540, 2793, 34544, 34548, + 34041, 34557, 34568, 34573, 29340, 34578, 34583, 34587, 34592, 23466, + 34596, 34600, 34605, 32557, 22299, 34609, 34614, 34620, 34625, 34629, + 34633, 34636, 34640, 34646, 34655, 34666, 34678, 32563, 34683, 34686, + 34690, 34694, 378, 34699, 34704, 34709, 34714, 34719, 34724, 34730, + 34735, 34740, 34746, 34751, 34757, 34762, 34768, 34773, 34778, 34783, + 34788, 34793, 34798, 34803, 34808, 34814, 34819, 34824, 34829, 34834, + 34839, 34844, 34849, 34855, 34861, 34866, 34871, 34876, 34881, 34886, + 34891, 34896, 34901, 34906, 34911, 34916, 34921, 34926, 34931, 34936, + 34941, 34946, 34951, 34957, 311, 13, 34962, 34966, 34970, 34978, 34982, + 34986, 34989, 34992, 34994, 34999, 35003, 35008, 35012, 35017, 35021, + 35026, 35030, 35033, 35035, 35039, 35044, 35048, 35059, 35062, 35064, + 35068, 35080, 35089, 35093, 35097, 35103, 35108, 35117, 35123, 35128, + 35133, 35137, 35141, 35146, 35153, 35158, 35164, 35169, 35173, 35180, + 26902, 26912, 35184, 35189, 35194, 35199, 35206, 35210, 35217, 35223, + 8332, 35227, 35236, 35244, 35259, 35273, 35281, 35292, 35301, 35306, + 7431, 35316, 35321, 35326, 35330, 35333, 35338, 35342, 35347, 35351, + 35358, 35363, 35368, 35373, 9159, 35383, 35385, 35388, 35391, 35395, + 35401, 35405, 35410, 35415, 35421, 35426, 35432, 35437, 35447, 35456, + 35464, 35469, 35475, 35480, 35489, 35500, 35505, 35512, 35516, 35524, + 35531, 35544, 35552, 35556, 35566, 35571, 35575, 35583, 35591, 35596, + 35600, 35604, 35613, 35619, 35624, 35632, 35642, 35651, 35660, 35669, + 35680, 35688, 35699, 35708, 35715, 35721, 35726, 35737, 35742, 35746, + 35749, 35753, 35761, 35767, 35771, 35779, 35785, 35792, 35798, 35803, + 35809, 2438, 35813, 35815, 35820, 35825, 35830, 35833, 35835, 35839, + 35842, 35849, 35853, 10376, 35857, 35863, 35873, 35878, 35884, 35888, + 35893, 35906, 27308, 35912, 35921, 35930, 18427, 35937, 35946, 33180, + 35954, 35959, 35963, 35972, 35980, 35987, 35992, 35996, 36001, 36009, + 36013, 36021, 36027, 36033, 36038, 36042, 36045, 36050, 36063, 36079, + 24047, 36096, 36108, 36125, 36137, 36151, 24064, 24083, 36163, 36175, + 2700, 36189, 36194, 36199, 36204, 36208, 36215, 36227, 36233, 36242, + 36245, 36256, 36267, 36272, 33603, 792, 36276, 36280, 36284, 36287, + 36292, 36297, 36303, 36308, 36313, 36319, 36325, 36330, 36334, 36339, + 36344, 36349, 36353, 36356, 36362, 36367, 36372, 36377, 36381, 36386, + 36392, 36400, 27565, 36405, 36410, 36417, 36423, 36429, 36434, 36442, + 23576, 36449, 36454, 36459, 36464, 36468, 36471, 36476, 36480, 36484, + 36491, 36497, 36503, 36509, 36516, 36521, 36527, 35586, 36531, 36535, + 36540, 36553, 36558, 36564, 36572, 36579, 36587, 36597, 36603, 36609, + 36615, 36619, 36628, 36636, 36643, 36648, 36653, 10980, 36658, 36666, + 36673, 36679, 36689, 36694, 36700, 36708, 3719, 36715, 36721, 36728, + 3725, 36732, 36737, 36748, 36755, 36761, 36770, 36774, 4155, 36777, + 36784, 36790, 36796, 36804, 36814, 30435, 36821, 36829, 36835, 36840, + 36846, 36851, 36855, 27156, 36861, 36868, 36874, 36883, 36890, 24764, + 36896, 36901, 36905, 36913, 36921, 10082, 6065, 36928, 36932, 36934, + 36938, 36943, 36945, 36950, 36956, 36961, 36966, 36973, 34158, 36979, + 36984, 36988, 36993, 36997, 37006, 37010, 37016, 37023, 37029, 37036, + 37041, 37050, 37055, 37059, 37064, 37071, 37079, 37087, 37092, 22355, + 37096, 37099, 37103, 37107, 37111, 37114, 37116, 37121, 37129, 37133, + 37142, 37149, 37153, 37157, 37165, 37172, 37182, 37186, 37190, 37198, + 37206, 37212, 37217, 37226, 14064, 37232, 37241, 37246, 37253, 37260, + 37268, 37276, 37284, 37289, 37296, 37303, 37310, 37317, 37324, 37329, + 37335, 37352, 37360, 37370, 37378, 37385, 392, 37389, 37395, 37399, + 37404, 35297, 37410, 37413, 37417, 37428, 37436, 3730, 37444, 37450, + 37456, 37466, 37475, 37485, 37492, 37498, 37503, 3736, 3742, 37512, + 37519, 37527, 37532, 37536, 37543, 37551, 37558, 37564, 37573, 37583, + 37589, 37597, 37606, 37613, 37621, 37628, 23037, 37632, 37639, 37645, + 37655, 37664, 37672, 37683, 37687, 37697, 37703, 37710, 37718, 37727, + 37736, 37746, 37757, 37764, 37769, 37776, 3064, 37784, 37790, 37795, + 37801, 37807, 37812, 37825, 37838, 37851, 37858, 37864, 37872, 37880, + 37885, 37889, 1452, 37893, 37897, 37901, 37905, 37909, 37913, 37917, + 37921, 37925, 37929, 37933, 37937, 37941, 37945, 37949, 37953, 37957, + 37961, 37965, 37969, 37973, 37977, 37981, 37985, 37989, 37993, 37997, + 38001, 38005, 38009, 38013, 38017, 38021, 38025, 38029, 38033, 38037, + 38041, 38045, 38049, 38053, 38057, 38061, 38065, 38069, 38073, 38077, + 38081, 38085, 38089, 38093, 38097, 38101, 38105, 38109, 38113, 38117, + 38121, 38125, 38129, 38133, 38137, 38141, 38145, 38149, 38153, 38157, + 38161, 38165, 38169, 38173, 38177, 38181, 38185, 38189, 38193, 38197, + 38201, 38205, 38209, 38213, 38217, 38221, 38225, 38229, 38233, 38237, + 38241, 38245, 38249, 38253, 38257, 38261, 38265, 38269, 38273, 38277, + 38281, 38285, 38289, 38293, 38297, 38301, 38305, 38309, 38313, 38317, + 38321, 38325, 38329, 38333, 38337, 38341, 38345, 38349, 38353, 38357, + 38361, 38365, 38369, 38373, 38377, 38381, 38385, 38389, 38393, 38397, + 38401, 38405, 38409, 38413, 38417, 38421, 38425, 38429, 38433, 38437, + 38441, 38445, 38449, 38453, 38457, 38461, 38465, 38469, 38473, 38477, + 38481, 38485, 38489, 38493, 38497, 38501, 38505, 38510, 38514, 38519, + 38523, 38528, 38532, 38537, 38541, 38547, 38552, 38556, 38561, 38565, + 38570, 38574, 38579, 38583, 38588, 38592, 38597, 38601, 38606, 38610, + 38616, 38622, 38627, 38631, 38636, 38640, 38646, 38651, 38655, 38660, + 38664, 38669, 38673, 38679, 38684, 38688, 38693, 38697, 38702, 38706, + 38711, 38715, 38721, 38726, 38730, 38735, 38739, 38745, 38750, 38754, + 38759, 38763, 38768, 38772, 38777, 38781, 38786, 38790, 38796, 38801, + 38805, 38811, 38816, 38820, 38826, 38831, 38835, 38840, 38844, 38849, + 38853, 38859, 38865, 38871, 38877, 38883, 38889, 38895, 38901, 38906, + 38910, 38915, 38919, 38925, 38930, 38934, 38939, 38943, 38948, 38952, + 38957, 38961, 38966, 38970, 38975, 38979, 38984, 38988, 38994, 38999, + 39003, 39008, 39012, 39018, 39024, 39029, 111, 88, 39033, 39035, 39039, + 39043, 39047, 39052, 39056, 39060, 10003, 39065, 39071, 1741, 6472, + 39077, 39080, 39085, 39089, 39094, 39098, 39102, 39107, 10769, 39111, + 39115, 39119, 594, 39123, 16207, 39128, 39132, 39137, 39142, 39147, + 39151, 39158, 27332, 39164, 39167, 39171, 39176, 39182, 39186, 39194, + 39200, 39205, 39209, 39212, 39216, 39222, 39226, 39230, 3560, 3565, + 30642, 39233, 39237, 39241, 39245, 39249, 39257, 39264, 39268, 39275, + 39280, 39294, 39301, 39312, 324, 39317, 39321, 39327, 39339, 39345, + 39351, 30679, 39355, 39361, 39370, 39374, 39378, 39383, 39389, 39394, + 39398, 39403, 39407, 39411, 39418, 39424, 39429, 39444, 39459, 39474, + 39490, 39508, 10719, 39522, 39529, 39533, 39536, 39545, 39550, 39554, + 39562, 35537, 39570, 39574, 39584, 39595, 30612, 39608, 39612, 39621, + 39629, 10270, 15723, 39633, 23478, 39636, 31580, 39641, 10269, 39646, + 39652, 39657, 39663, 39668, 39674, 39679, 39685, 39690, 39696, 39702, + 39708, 39713, 39669, 39675, 39680, 39686, 39691, 39697, 39703, 8345, + 4006, 39717, 39725, 39729, 39732, 39736, 39741, 39746, 39752, 39758, + 39763, 39767, 39771, 27168, 39775, 39779, 39783, 39789, 39793, 29217, + 9296, 39802, 39809, 39815, 39819, 12562, 39826, 39832, 39837, 39844, + 39851, 39858, 29917, 8257, 39865, 39872, 39879, 39885, 39890, 39897, + 39908, 39914, 39919, 39924, 39929, 39936, 39670, 39940, 39950, 39959, + 39970, 39976, 39983, 39988, 39993, 39998, 40003, 40008, 40012, 40016, + 40022, 40030, 2334, 955, 10785, 10797, 10802, 10808, 40039, 10813, 10818, + 10824, 40044, 40054, 40058, 10829, 40063, 17814, 40066, 40071, 40075, + 36237, 40086, 40091, 40098, 40105, 40109, 40112, 40120, 10732, 40127, + 40130, 40136, 40146, 6106, 40155, 40161, 40165, 40173, 40177, 40187, + 40193, 40198, 40209, 40215, 40221, 40226, 40232, 40238, 40244, 40249, + 40252, 40259, 40265, 40269, 40274, 40281, 40288, 40292, 40295, 40305, + 40318, 40327, 40336, 40347, 40360, 40372, 40383, 40392, 40403, 40408, + 40417, 40422, 10834, 40428, 40435, 40443, 40448, 40452, 40459, 40466, + 3958, 20, 40470, 40475, 17668, 40479, 40482, 40485, 29397, 40489, 29926, + 40497, 40501, 40505, 40508, 40514, 40520, 32628, 40525, 40533, 40539, + 40546, 29380, 40550, 29583, 40554, 40563, 40569, 40575, 40580, 40584, + 29945, 40590, 40593, 40601, 40609, 27410, 40615, 40619, 40624, 40631, + 40637, 40642, 40647, 40651, 40657, 40662, 40668, 4208, 883, 40675, 40679, + 40682, 16093, 40694, 40705, 37602, 40710, 40713, 40720, 40724, 40730, + 40734, 40740, 40745, 40751, 40756, 40761, 40765, 40769, 40774, 40779, + 40789, 40795, 40808, 40814, 40820, 40826, 40833, 40838, 40844, 40849, + 17559, 1455, 771, 40854, 40857, 40860, 40863, 32712, 32718, 40866, 32724, + 32737, 32743, 32749, 40872, 32755, 32761, 40878, 40884, 26, 40892, 40899, + 40903, 40907, 40915, 33492, 40919, 40923, 40930, 40935, 40939, 40944, + 40950, 40955, 40961, 40966, 40970, 40974, 40978, 40983, 40987, 40992, + 40996, 41000, 41007, 41012, 41016, 41020, 41025, 41029, 41034, 41038, + 41042, 41047, 41053, 16343, 16348, 41058, 41062, 41065, 41069, 41073, + 22166, 41078, 41082, 41088, 41095, 41100, 41110, 41115, 41123, 41127, + 41130, 33507, 41134, 4261, 41139, 41144, 41148, 41153, 41157, 41162, + 14082, 41173, 41177, 41180, 41184, 41189, 41193, 41198, 41203, 41207, + 41211, 41215, 41218, 41222, 8364, 14098, 41225, 41228, 41234, 41239, + 41245, 41250, 41256, 41261, 41267, 41272, 41278, 41284, 41290, 41295, + 41299, 41303, 41312, 41328, 41344, 41354, 29287, 41361, 41365, 41370, + 41375, 41379, 41383, 37731, 41389, 41394, 41398, 41405, 41410, 41415, + 41419, 41423, 41429, 28237, 41433, 22450, 41438, 41445, 41453, 41459, + 41466, 41474, 41480, 41484, 41489, 41495, 41503, 41508, 41512, 41521, + 9984, 41529, 41533, 41541, 41548, 41553, 41558, 41563, 41567, 41570, + 41574, 41577, 41581, 41588, 41593, 41597, 41603, 27643, 32775, 41607, + 41613, 41620, 41626, 41632, 41637, 41640, 41642, 41649, 41656, 41662, + 41666, 41669, 41673, 41677, 41681, 41686, 41690, 41694, 41697, 41701, + 41715, 24113, 41734, 41747, 41760, 41773, 24131, 41788, 11045, 41803, + 41809, 41813, 41817, 41821, 41825, 41832, 41837, 41841, 41848, 41854, + 41859, 41865, 41875, 41887, 41898, 41903, 41910, 41914, 41918, 41921, + 16751, 3799, 41929, 16370, 41942, 41949, 41953, 41957, 41962, 41967, + 41973, 41977, 41981, 41984, 41989, 41993, 41998, 7957, 16381, 42003, + 42007, 42013, 42022, 42027, 42036, 42043, 37579, 42049, 42054, 42058, + 42063, 42070, 42076, 42080, 42083, 42087, 42092, 15344, 42099, 42106, + 42110, 42113, 42118, 42123, 42129, 42134, 42139, 42143, 42148, 42158, + 42163, 42169, 42174, 42180, 42185, 42191, 42201, 42206, 42211, 42215, + 42220, 7433, 7445, 42225, 42228, 42235, 42241, 42250, 35711, 35718, + 42258, 42262, 42266, 33555, 42274, 42285, 42293, 37779, 42300, 42305, + 42310, 42321, 42328, 42339, 33579, 22456, 42347, 834, 42352, 14429, + 42358, 29371, 42364, 42369, 42379, 42388, 42395, 42401, 42405, 42408, + 42415, 42421, 42428, 42434, 42444, 42452, 42458, 42464, 42469, 42473, + 42480, 42485, 42491, 42498, 42504, 41682, 42509, 42513, 526, 14545, + 42519, 42524, 42527, 42533, 42541, 1379, 42546, 42550, 42555, 42560, + 42565, 42572, 42576, 42581, 42587, 42591, 32785, 42596, 42601, 42610, + 42617, 42627, 42633, 29415, 42650, 42659, 42667, 42673, 42678, 42685, + 42691, 42699, 42708, 42716, 42720, 42725, 42733, 30360, 33588, 42739, + 42758, 16676, 42772, 42788, 42802, 42808, 42813, 42818, 42823, 42829, + 33594, 42834, 42837, 42844, 42849, 42853, 376, 2971, 42860, 42865, 42870, + 28595, 42688, 42874, 42879, 42887, 42891, 42894, 42899, 42905, 42911, + 42916, 42920, 29470, 42923, 42928, 42932, 42935, 42940, 42944, 42949, + 42954, 42958, 42963, 42967, 42971, 42975, 22162, 22173, 42980, 42985, + 42991, 42996, 28194, 43001, 43005, 22259, 16932, 43008, 43013, 43018, + 43023, 43028, 43033, 43038, 43043, 469, 49, 32798, 32803, 32808, 32814, + 32819, 32824, 43048, 32828, 43052, 43056, 43060, 32833, 32839, 43074, + 32850, 32855, 43082, 43087, 32861, 43092, 43097, 43102, 43107, 43113, + 43119, 43125, 32878, 43138, 43147, 43153, 32882, 43157, 32887, 43162, + 32892, 32897, 43165, 43170, 43174, 32433, 43180, 14310, 43187, 43192, + 32902, 43196, 43201, 43206, 43211, 43215, 43220, 43225, 43231, 43236, + 43241, 43247, 43253, 43258, 43262, 43267, 43272, 43277, 43281, 43286, + 43291, 43296, 43302, 43308, 43314, 43319, 43323, 43328, 43332, 32906, + 32911, 32916, 43336, 43340, 43344, 32921, 32927, 32933, 32945, 43356, + 27205, 43360, 43365, 43369, 43374, 43381, 43386, 43391, 43396, 43400, + 43404, 43414, 43419, 43424, 43428, 43432, 43435, 43443, 32993, 43448, + 1462, 43454, 43459, 43465, 43473, 43482, 43486, 43490, 43498, 43504, + 43512, 43528, 43532, 43536, 43541, 43547, 43562, 33030, 1749, 12742, + 43566, 1358, 1373, 43578, 43586, 43593, 43598, 43605, 43610, 9674, 1062, + 2525, 10861, 43617, 9572, 43622, 43625, 43634, 1266, 43639, 41838, 43646, + 43655, 43660, 43664, 43672, 23534, 2577, 43679, 11301, 43689, 43695, + 2352, 2362, 43704, 43713, 43723, 43734, 3352, 35874, 43739, 10920, 3936, + 17597, 1271, 43743, 43751, 43758, 43763, 43767, 43771, 24981, 42094, + 10947, 43779, 43788, 43797, 43805, 43812, 43823, 43828, 43841, 43854, + 43866, 43878, 43890, 43901, 43914, 43925, 43936, 43946, 43954, 43962, + 43974, 43986, 43997, 44006, 44014, 44021, 44033, 44040, 44046, 44055, + 44062, 44075, 44080, 44090, 44095, 44101, 44106, 39816, 44110, 44117, + 44121, 44128, 44136, 2538, 44143, 44154, 44164, 44173, 44181, 44191, + 44199, 44209, 44218, 44223, 44229, 44235, 44240, 3838, 44251, 44261, + 44270, 44279, 44287, 44297, 44305, 44314, 44319, 44324, 44329, 1679, 37, + 44337, 44345, 44356, 44367, 17244, 44377, 44381, 44388, 44394, 44399, + 44403, 44414, 44424, 44433, 44444, 17641, 17646, 44449, 44458, 44463, + 44473, 44478, 44486, 44494, 44501, 44507, 1641, 251, 44511, 44517, 44522, + 44525, 2124, 41954, 44533, 44537, 44540, 1495, 44546, 14707, 1276, 44551, + 44564, 44578, 2663, 44596, 44608, 44620, 2677, 2694, 44634, 44647, 2709, + 44661, 44673, 2724, 44687, 1282, 1288, 1294, 11207, 44692, 44697, 44702, + 44706, 44721, 44736, 44751, 44766, 44781, 44796, 44811, 44826, 44841, + 44856, 44871, 44886, 44901, 44916, 44931, 44946, 44961, 44976, 44991, + 45006, 45021, 45036, 45051, 45066, 45081, 45096, 45111, 45126, 45141, + 45156, 45171, 45186, 45201, 45216, 45231, 45246, 45261, 45276, 45291, + 45306, 45321, 45336, 45351, 45366, 45381, 45396, 45411, 45426, 45441, + 45456, 45471, 45486, 45501, 45516, 45531, 45546, 45561, 45576, 45591, + 45606, 45621, 45636, 45651, 45666, 45681, 45696, 45711, 45726, 45741, + 45756, 45771, 45786, 45801, 45816, 45831, 45846, 45861, 45876, 45891, + 45906, 45921, 45936, 45951, 45966, 45981, 45996, 46011, 46026, 46041, + 46056, 46071, 46086, 46101, 46116, 46131, 46146, 46161, 46176, 46191, + 46206, 46221, 46236, 46251, 46266, 46281, 46296, 46311, 46326, 46341, + 46356, 46371, 46386, 46401, 46416, 46431, 46446, 46461, 46476, 46491, + 46506, 46521, 46536, 46551, 46566, 46581, 46596, 46611, 46626, 46641, + 46656, 46671, 46686, 46701, 46716, 46731, 46746, 46761, 46776, 46791, + 46806, 46821, 46836, 46851, 46866, 46881, 46896, 46911, 46926, 46941, + 46956, 46971, 46986, 47001, 47016, 47031, 47046, 47061, 47076, 47091, + 47106, 47121, 47136, 47151, 47166, 47181, 47196, 47211, 47226, 47241, + 47256, 47271, 47286, 47301, 47316, 47331, 47346, 47361, 47376, 47391, + 47406, 47421, 47436, 47451, 47466, 47481, 47496, 47511, 47526, 47541, + 47556, 47571, 47586, 47601, 47616, 47631, 47646, 47661, 47676, 47691, + 47706, 47721, 47736, 47751, 47766, 47781, 47796, 47811, 47826, 47841, + 47856, 47871, 47886, 47901, 47916, 47931, 47946, 47961, 47976, 47991, + 48006, 48021, 48036, 48051, 48066, 48081, 48096, 48111, 48126, 48141, + 48156, 48171, 48186, 48201, 48216, 48231, 48246, 48261, 48276, 48291, + 48306, 48321, 48336, 48351, 48366, 48381, 48396, 48411, 48426, 48441, + 48456, 48471, 48486, 48501, 48516, 48531, 48546, 48561, 48576, 48591, + 48606, 48621, 48636, 48651, 48666, 48681, 48696, 48711, 48726, 48741, + 48756, 48771, 48786, 48801, 48816, 48831, 48846, 48861, 48876, 48891, + 48906, 48921, 48936, 48951, 48966, 48981, 48996, 49011, 49026, 49041, + 49056, 49071, 49086, 49101, 49116, 49131, 49146, 49161, 49176, 49191, + 49206, 49221, 49236, 49251, 49266, 49281, 49296, 49311, 49326, 49341, + 49356, 49371, 49386, 49401, 49416, 49431, 49446, 49461, 49476, 49491, + 49506, 49521, 49536, 49551, 49566, 49581, 49596, 49611, 49626, 49641, + 49656, 49671, 49686, 49701, 49716, 49731, 49746, 49761, 49776, 49791, + 49806, 49821, 49836, 49851, 49866, 49881, 49896, 49911, 49926, 49941, + 49956, 49971, 49986, 50001, 50016, 50031, 50046, 50061, 50076, 50091, + 50106, 50121, 50136, 50151, 50166, 50181, 50196, 50211, 50226, 50241, + 50256, 50271, 50286, 50301, 50316, 50331, 50346, 50361, 50376, 50391, + 50406, 50421, 50436, 50451, 50466, 50481, 50496, 50511, 50526, 50541, + 50556, 50571, 50586, 50601, 50616, 50631, 50646, 50661, 50676, 50691, + 50706, 50721, 50736, 50751, 50766, 50781, 50796, 50811, 50826, 50841, + 50856, 50871, 50886, 50901, 50916, 50931, 50946, 50961, 50976, 50991, + 51006, 51021, 51036, 51051, 51066, 51081, 51096, 51111, 51126, 51141, + 51156, 51171, 51186, 51201, 51216, 51231, 51246, 51261, 51276, 51291, + 51306, 51321, 51336, 51351, 51366, 51381, 51396, 51411, 51426, 51441, + 51456, 51471, 51486, 51501, 51516, 51531, 51546, 51561, 51576, 51591, + 51606, 51621, 51636, 51651, 51666, 51681, 51696, 51711, 51726, 51741, + 51756, 51771, 51786, 51801, 51816, 51831, 51846, 51861, 51876, 51891, + 51906, 51921, 51936, 51951, 51966, 51981, 51996, 52011, 52026, 52041, + 52056, 52071, 52086, 52101, 52116, 52131, 52146, 52161, 52176, 52191, + 52206, 52221, 52236, 52251, 52266, 52281, 52296, 52311, 52326, 52341, + 52356, 52371, 52386, 52401, 52416, 52431, 52446, 52461, 52476, 52491, + 52506, 52522, 52538, 52554, 52570, 52586, 52602, 52618, 52634, 52650, + 52666, 52682, 52698, 52714, 52730, 52746, 52762, 52778, 52794, 52810, + 52826, 52842, 52858, 52874, 52890, 52906, 52922, 52938, 52954, 52970, + 52986, 53002, 53018, 53034, 53050, 53066, 53082, 53098, 53114, 53130, + 53146, 53162, 53178, 53194, 53210, 53226, 53242, 53258, 53274, 53290, + 53306, 53322, 53338, 53354, 53370, 53386, 53402, 53418, 53434, 53450, + 53466, 53482, 53498, 53514, 53530, 53546, 53562, 53578, 53594, 53610, + 53626, 53642, 53658, 53674, 53690, 53706, 53722, 53738, 53754, 53770, + 53786, 53802, 53818, 53834, 53850, 53866, 53882, 53898, 53914, 53930, + 53946, 53962, 53978, 53994, 54010, 54026, 54042, 54058, 54074, 54090, + 54106, 54122, 54138, 54154, 54170, 54186, 54202, 54218, 54234, 54250, + 54266, 54282, 54298, 54314, 54330, 54346, 54362, 54378, 54394, 54410, + 54426, 54442, 54458, 54474, 54490, 54506, 54522, 54538, 54554, 54570, + 54586, 54602, 54618, 54634, 54650, 54666, 54682, 54698, 54714, 54730, + 54746, 54762, 54778, 54794, 54810, 54826, 54842, 54858, 54874, 54890, + 54906, 54922, 54938, 54954, 54970, 54986, 55002, 55018, 55034, 55050, + 55066, 55082, 55098, 55114, 55130, 55146, 55162, 55178, 55194, 55210, + 55226, 55242, 55258, 55274, 55290, 55306, 55322, 55338, 55354, 55370, + 55386, 55402, 55418, 55434, 55450, 55466, 55482, 55498, 55514, 55530, + 55546, 55562, 55578, 55594, 55610, 55626, 55642, 55658, 55674, 55690, + 55706, 55722, 55738, 55754, 55770, 55786, 55802, 55818, 55834, 55850, + 55866, 55882, 55898, 55914, 55930, 55946, 55962, 55978, 55994, 56010, + 56026, 56042, 56058, 56074, 56090, 56106, 56122, 56138, 56154, 56170, + 56186, 56202, 56218, 56234, 56250, 56266, 56282, 56298, 56314, 56330, + 56346, 56362, 56378, 56394, 56410, 56426, 56442, 56458, 56474, 56490, + 56506, 56522, 56538, 56554, 56570, 56586, 56602, 56618, 56634, 56650, + 56666, 56682, 56698, 56714, 56730, 56746, 56762, 56778, 56794, 56810, + 56826, 56842, 56858, 56874, 56890, 56906, 56922, 56938, 56954, 56970, + 56986, 57002, 57018, 57034, 57050, 57066, 57082, 57098, 57114, 57130, + 57146, 57162, 57178, 57194, 57210, 57226, 57242, 57258, 57274, 57290, + 57306, 57322, 57338, 57354, 57370, 57386, 57402, 57418, 57434, 57450, + 57466, 57482, 57498, 57514, 57530, 57546, 57562, 57578, 57594, 57610, + 57626, 57642, 57658, 57674, 57690, 57706, 57722, 57738, 57754, 57770, + 57786, 57802, 57818, 57834, 57850, 57866, 57882, 57898, 57914, 57930, + 57946, 57962, 57978, 57994, 58010, 58026, 58042, 58058, 58074, 58090, + 58106, 58122, 58138, 58154, 58170, 58186, 58202, 58218, 58234, 58250, + 58266, 58282, 58298, 58314, 58330, 58346, 58362, 58378, 58394, 58410, + 58426, 58442, 58458, 58474, 58490, 58506, 58522, 58538, 58554, 58570, + 58586, 58602, 58618, 58634, 58650, 58666, 58682, 58698, 58714, 58730, + 58746, 58762, 58778, 58794, 58810, 58826, 58842, 58858, 58874, 58890, + 58906, 58922, 58938, 58954, 58970, 58986, 59002, 59018, 59034, 59050, + 59066, 59082, 59098, 59114, 59130, 59146, 59162, 59178, 59194, 59210, + 59226, 59242, 59258, 59274, 59290, 59306, 59322, 59338, 59354, 59370, + 59386, 59402, 59418, 59434, 59450, 59466, 59482, 59498, 59514, 59530, + 59546, 59562, 59578, 59594, 59610, 59626, 59642, 59658, 59674, 59690, + 59706, 59722, 59738, 59754, 59770, 59786, 59802, 59818, 59834, 59850, + 59866, 59882, 59898, 59914, 59930, 59946, 59962, 59978, 59994, 60010, + 60026, 60042, 60058, 60074, 60090, 60106, 60122, 60138, 60154, 60170, + 60186, 60202, 60218, 60234, 60250, 60266, 60282, 60298, 60314, 60330, + 60346, 60362, 60378, 60394, 60410, 60426, 60442, 60458, 60474, 60490, + 60506, 60522, 60538, 60554, 60570, 60586, 60602, 60618, 60634, 60650, + 60666, 60682, 60698, 60714, 60730, 60746, 60762, 60778, 60794, 60810, + 60826, 60842, 60858, 60874, 60890, 60906, 60922, 60938, 60954, 60970, + 60986, 61002, 61018, 61034, 61050, 61066, 61082, 61098, 61114, 61130, + 61146, 61162, 61178, 61193, 17673, 61202, 61207, 61213, 61219, 61229, + 61237, 15704, 16287, 10445, 61250, 1503, 1507, 61258, 3890, 28713, 7387, + 61264, 61269, 61274, 61279, 61284, 61290, 61295, 61301, 61306, 61312, + 61317, 61322, 61327, 61332, 61338, 61343, 61348, 61353, 61358, 61363, + 61368, 61373, 61379, 61384, 61390, 61397, 2581, 61402, 61408, 8753, + 61412, 61417, 61424, 61432, 46, 61436, 61442, 61447, 61452, 61456, 61461, + 61465, 61469, 11244, 61473, 61483, 61496, 61507, 61520, 61527, 61533, + 61538, 61544, 61550, 61556, 61561, 61566, 61571, 61576, 61580, 61585, + 61590, 61595, 61601, 61607, 61613, 61618, 61622, 61627, 61632, 61636, + 61641, 61646, 61651, 61655, 11260, 11271, 11276, 1546, 61659, 61665, + 1551, 61670, 61673, 17122, 61678, 61684, 61689, 1582, 61695, 1588, 1594, + 11306, 61700, 61709, 61717, 61724, 61728, 61734, 61739, 32466, 61744, + 61751, 61756, 61760, 61764, 61773, 1599, 17219, 61778, 61782, 17230, + 1105, 61786, 61793, 61798, 61802, 17260, 1603, 39964, 61805, 61810, + 61820, 61829, 61834, 61838, 61844, 1608, 42055, 61849, 61858, 61864, + 61869, 61874, 11474, 11480, 61880, 61892, 61909, 61926, 61943, 61960, + 61977, 61994, 62011, 62028, 62045, 62062, 62079, 62096, 62113, 62130, + 62147, 62164, 62181, 62198, 62215, 62232, 62249, 62266, 62283, 62300, + 62317, 62334, 62351, 62368, 62385, 62402, 62419, 62436, 62453, 62470, + 62487, 62504, 62521, 62538, 62555, 62572, 62589, 62606, 62623, 62640, + 62657, 62674, 62691, 62708, 62725, 62736, 62741, 1613, 62745, 62750, + 62756, 62761, 62766, 9591, 1618, 62772, 62781, 29029, 62786, 62797, + 11491, 62807, 62812, 62818, 62823, 62830, 62836, 62841, 1623, 17535, + 62846, 11501, 1628, 11506, 62852, 62857, 62863, 62868, 62873, 62878, + 62883, 62888, 62893, 62898, 62903, 62909, 62915, 62921, 62926, 62930, + 62935, 62940, 62944, 62949, 62954, 62959, 62964, 62968, 62973, 62979, + 62984, 62989, 62993, 62998, 63003, 63009, 63014, 63019, 63025, 63031, + 63036, 63040, 63045, 63050, 63055, 63059, 63064, 63069, 63074, 63080, + 63086, 63091, 63095, 63099, 63104, 63109, 63114, 30504, 63118, 63123, + 63128, 63134, 63139, 63144, 63148, 63153, 63158, 63164, 63169, 63174, + 63180, 63186, 63191, 63195, 63200, 63205, 63209, 63214, 63219, 63224, + 63230, 63236, 63241, 63245, 63250, 63255, 63259, 63264, 63269, 63274, + 63279, 63283, 63286, 63289, 63294, 33147, 63299, 63307, 17601, 3774, + 11604, 63313, 63323, 63338, 63346, 11609, 63357, 63362, 63373, 63385, + 63397, 63409, 2715, 63421, 63426, 63438, 63442, 63448, 63454, 63459, + 1645, 16826, 63468, 63473, 42114, 63477, 63481, 63486, 63490, 17681, + 63495, 63498, 63503, 63511, 63519, 1649, 11645, 11651, 1654, 63527, + 63534, 63539, 63548, 63558, 63565, 63570, 63575, 1659, 63582, 63587, + 17796, 63591, 63596, 63603, 63609, 63613, 63624, 63634, 17818, 9485, + 9492, 63641, 1664, 63646, 63652, 63660, 63667, 63673, 63680, 63692, + 63698, 63703, 63715, 63726, 63735, 63745, 3869, 32271, 32280, 17858, + 1669, 1673, 63753, 63764, 63769, 1683, 63777, 63782, 63787, 17917, 63799, + 63802, 63808, 63813, 63821, 1688, 63826, 63831, 63839, 63847, 63854, + 63863, 63871, 63880, 1693, 63884, 1698, 22330, 63889, 63896, 17991, + 63904, 63910, 63915, 63923, 63930, 63938, 17309, 63943, 11797, 63952, + 63958, 63963, 63970, 63977, 63983, 16991, 63993, 63999, 64004, 64015, + 64020, 64028, 11814, 11819, 64036, 64042, 64046, 64054, 3934, 18038, + 42207, 64059, 64065, 64070, 64078, 64085, 12723, 64090, 64096, 1709, + 64101, 64104, 1172, 64110, 64115, 64120, 64126, 64131, 64136, 64141, + 64146, 64151, 64156, 1718, 9, 64162, 64166, 64171, 64175, 64179, 64183, + 33387, 64188, 24277, 64193, 64198, 64202, 64205, 64209, 64213, 64218, + 64222, 64227, 64231, 64237, 36288, 36293, 36298, 64240, 64247, 64253, + 64261, 41891, 64271, 36304, 33651, 33402, 33408, 36320, 33414, 64276, + 64281, 33684, 64285, 64288, 64292, 64299, 64302, 64307, 64312, 64316, + 64320, 64323, 64333, 64345, 64352, 64358, 33419, 64365, 35149, 64368, + 8770, 940, 64371, 64375, 64380, 3812, 64384, 64387, 14343, 64394, 64401, + 64414, 64422, 64431, 64440, 64445, 64455, 64468, 64480, 64487, 64492, + 64501, 64514, 37819, 64532, 64537, 64544, 64550, 746, 64555, 64563, + 64570, 28536, 710, 64576, 64582, 64592, 64598, 64603, 33438, 6185, 33452, + 64607, 64617, 64622, 64632, 64647, 64653, 64659, 33462, 64664, 32583, + 64668, 64673, 64680, 64685, 64689, 64694, 17861, 64701, 64706, 64710, + 6226, 33488, 64714, 64720, 310, 64730, 64737, 64744, 64749, 64758, 61814, + 64764, 64772, 64776, 64780, 64784, 64788, 64793, 64797, 64803, 64811, + 64816, 64821, 64826, 64830, 64835, 64839, 64843, 64849, 64855, 64860, + 64864, 64869, 33612, 64873, 33618, 33624, 64878, 64884, 64891, 64896, + 64900, 32600, 17528, 64903, 64907, 64912, 64919, 64925, 64929, 64934, + 41583, 64940, 64944, 64951, 64955, 64960, 64966, 64972, 64978, 64990, + 64999, 65009, 65015, 65022, 65027, 65032, 65036, 65039, 65045, 65052, + 65057, 65062, 65069, 65076, 65083, 65089, 65094, 65099, 65107, 33629, + 2443, 65112, 65117, 65123, 65128, 65134, 65139, 65144, 65149, 65155, + 33650, 65160, 65166, 65172, 65178, 33720, 65183, 65188, 65193, 33731, + 65198, 65203, 65208, 65214, 65220, 33736, 65225, 65230, 65235, 33791, + 33797, 65240, 65245, 33802, 33824, 29278, 33830, 33834, 65250, 12467, + 65254, 65262, 65268, 65276, 65283, 65289, 65299, 65305, 65312, 11179, + 33848, 65318, 65331, 65340, 65346, 65355, 65361, 24587, 65368, 65375, + 65385, 65388, 33792, 65393, 65400, 65405, 65409, 65413, 65418, 65422, + 6306, 65427, 65432, 65437, 36382, 36387, 65441, 36401, 65446, 36406, + 65451, 65457, 36418, 36424, 36430, 65462, 65468, 23577, 65479, 65482, + 65494, 65502, 33871, 65506, 65515, 65525, 65534, 33881, 65539, 65546, + 65555, 65561, 65569, 65576, 6277, 4559, 65581, 33803, 65587, 65590, + 65596, 65603, 65608, 65613, 24497, 65617, 65623, 65629, 65634, 65639, + 65643, 65649, 65655, 35055, 953, 37469, 39196, 39202, 33912, 33917, + 65660, 65664, 65668, 65671, 65684, 65690, 65694, 65697, 65702, 35376, + 65706, 32605, 22280, 65712, 6206, 6214, 9322, 65715, 65720, 65725, 65730, + 65735, 65740, 65745, 65750, 65755, 65760, 65766, 65771, 65776, 65782, + 65787, 65792, 65797, 65802, 65807, 65812, 65818, 65823, 65829, 65834, + 65839, 65844, 65849, 65854, 65859, 65864, 65869, 65874, 65879, 65885, + 65890, 65895, 65900, 65905, 65910, 65915, 65921, 65926, 65931, 65936, + 65941, 65946, 65951, 65956, 65961, 65966, 65972, 65977, 65982, 65987, + 65992, 65998, 66004, 66009, 66015, 66020, 66025, 66030, 66035, 66040, + 1496, 223, 66045, 66049, 66053, 66057, 26272, 66061, 66065, 66070, 66074, + 66079, 66083, 66088, 66093, 66098, 66102, 66106, 66111, 66115, 14076, + 66120, 66124, 66131, 66141, 16024, 66150, 66159, 66163, 66168, 66173, + 66177, 66181, 26066, 3054, 66185, 66191, 18309, 66195, 66204, 66212, + 66218, 66230, 66242, 66246, 66251, 66255, 66261, 66267, 66272, 66282, + 66292, 66298, 66303, 66307, 66313, 66318, 66325, 66331, 66336, 66345, + 66354, 66362, 16412, 66366, 66375, 66383, 66395, 66406, 66417, 66426, + 66430, 66439, 66447, 66457, 66465, 66471, 66476, 66482, 66487, 66498, 85, + 32410, 66504, 27482, 27492, 66510, 66517, 66523, 66527, 66537, 66548, + 66556, 66565, 66570, 66575, 66580, 66584, 66588, 18263, 66596, 66600, + 66606, 66616, 66623, 66629, 66635, 36481, 66639, 66641, 66644, 66650, + 66654, 66664, 66670, 66677, 66684, 14013, 66692, 66698, 66707, 66716, + 66722, 66728, 66734, 66739, 66746, 66753, 66759, 66767, 66780, 66789, + 66798, 66803, 66807, 66813, 66819, 66826, 66833, 66840, 66847, 66854, + 66859, 66863, 66867, 66870, 66880, 66884, 66896, 66905, 66909, 66914, + 66918, 66924, 66929, 66936, 66945, 66953, 66961, 66966, 66970, 66975, + 66980, 66990, 66998, 67003, 67007, 67011, 67017, 67025, 67032, 67044, + 67052, 67063, 67069, 67079, 67085, 67089, 67096, 67102, 67107, 67111, + 67115, 67119, 67128, 67137, 67146, 67152, 67158, 67164, 67169, 67176, + 67182, 67190, 67197, 13156, 67203, 67209, 67213, 15009, 67217, 67222, + 67232, 67241, 67247, 67253, 67261, 67268, 67272, 67276, 67282, 67290, + 67297, 67303, 67314, 67318, 67322, 67326, 67329, 67335, 67340, 67345, + 67349, 67353, 67362, 67370, 67377, 67383, 67390, 25152, 41635, 67395, + 67403, 67407, 67411, 67414, 67422, 67429, 67435, 67444, 67452, 67458, + 67463, 67467, 67472, 67476, 67480, 67485, 67494, 67498, 67505, 39305, + 67509, 67515, 67519, 67527, 67533, 67538, 67549, 67557, 67563, 23720, + 67572, 67579, 67586, 67593, 67600, 67607, 44881, 13851, 67614, 67621, + 67626, 36517, 6404, 67632, 67637, 67642, 67648, 67654, 67660, 67665, + 67670, 67675, 67680, 67686, 67691, 67697, 67702, 67708, 67713, 67718, + 67723, 67728, 67733, 67738, 67743, 67749, 67754, 67760, 67765, 67770, + 67775, 67780, 67785, 67790, 67796, 67801, 67806, 67811, 67816, 67821, + 67826, 67831, 67836, 67841, 67846, 67852, 67857, 67862, 67867, 67872, + 67877, 67882, 67887, 67892, 67898, 67903, 67908, 67913, 67918, 67923, + 67928, 67933, 67938, 67943, 67948, 67953, 67958, 67964, 1839, 240, 40067, + 67969, 67972, 67977, 67981, 67984, 3391, 67989, 67994, 66957, 68005, + 68015, 68022, 68031, 68047, 68056, 68066, 68076, 68085, 68093, 68107, + 68115, 68119, 68122, 68129, 68135, 68146, 68158, 68169, 68178, 68185, + 1277, 24386, 68195, 2610, 68199, 68208, 1119, 18236, 21794, 68216, 68224, + 68238, 68251, 68255, 68260, 68265, 68270, 68276, 68282, 68287, 8762, + 68292, 68296, 68304, 11646, 68309, 68315, 68324, 68332, 1721, 11658, 835, + 6340, 68336, 68345, 68355, 2400, 28271, 68364, 68370, 17773, 28286, + 68376, 4104, 12032, 68382, 68389, 63759, 68393, 68397, 68403, 68408, + 68413, 4128, 180, 14917, 68418, 68430, 68434, 68440, 29049, 68444, 12020, + 2750, 4, 68449, 68459, 68470, 68476, 68487, 68494, 68500, 68506, 68514, + 68521, 68527, 68537, 68547, 68557, 68566, 24574, 1289, 68571, 68575, + 68579, 68585, 68589, 2773, 2779, 8759, 2275, 68593, 68597, 68606, 68614, + 68625, 68633, 68641, 68647, 68652, 68663, 68674, 68682, 68688, 10179, + 68693, 68701, 68705, 68709, 68714, 68718, 68730, 29456, 15977, 68737, + 68747, 68753, 68759, 10281, 68769, 68780, 68790, 68799, 68803, 68810, + 1121, 2603, 68820, 68825, 68833, 68841, 68852, 68859, 68873, 14846, 453, + 68883, 68887, 68895, 68904, 68912, 68918, 68932, 68939, 68945, 68954, + 68961, 68971, 68979, 68986, 68994, 69001, 3941, 143, 69009, 69020, 69024, + 69036, 69042, 12202, 167, 69047, 69052, 69056, 69063, 69069, 69077, + 69084, 9065, 69091, 69100, 69108, 4010, 69121, 4027, 69125, 2823, 494, + 69130, 69143, 69148, 1838, 736, 69152, 4031, 69160, 69166, 69170, 813, + 69180, 69189, 69194, 15738, 15745, 48243, 69198, 4056, 3951, 13734, + 69206, 69213, 69218, 24638, 69222, 69229, 69235, 69240, 69245, 15758, + 161, 69250, 69262, 69268, 69276, 2840, 1753, 69284, 69286, 69291, 69296, + 69301, 69307, 69312, 69317, 69322, 69327, 69332, 69337, 69343, 69348, + 69353, 69358, 69363, 69368, 69373, 69378, 69383, 69389, 69394, 69399, + 69404, 69410, 69415, 69421, 69426, 69431, 69436, 69441, 69446, 69451, + 69456, 69462, 69467, 69473, 69478, 69483, 69488, 69493, 69498, 69503, + 69508, 69513, 69519, 69525, 69530, 69535, 69541, 69546, 69550, 69554, + 69559, 69565, 69569, 69575, 69580, 69585, 69591, 69596, 69600, 69605, + 69610, 69614, 69617, 69619, 69623, 69626, 69631, 69635, 69640, 69644, + 69648, 69652, 69661, 69665, 34097, 69668, 34102, 69675, 69680, 34107, + 69689, 69698, 34113, 69703, 34118, 69712, 69717, 12234, 69721, 69726, + 69731, 34123, 69735, 43115, 69739, 69742, 69746, 8430, 69752, 69757, + 69761, 3827, 34128, 69764, 69768, 69771, 69776, 69780, 69786, 69794, + 69807, 69816, 69822, 69827, 69833, 69837, 69843, 69851, 69856, 69860, + 69867, 69873, 69881, 69890, 69898, 34131, 69905, 69915, 69928, 69933, + 69938, 69942, 69951, 69957, 69964, 69975, 69987, 69994, 70003, 70012, + 70021, 70028, 70034, 70041, 70049, 70056, 70064, 70073, 70081, 70088, + 70096, 70105, 70113, 70122, 70132, 70141, 70149, 70156, 70164, 70173, + 70181, 70190, 70200, 70209, 70217, 70226, 70236, 70245, 70255, 70266, + 70276, 70285, 70293, 70300, 70308, 70317, 70325, 70334, 70344, 70353, + 70361, 70370, 70380, 70389, 70399, 70410, 70420, 70429, 70437, 70446, + 70456, 70465, 70475, 70486, 70496, 70505, 70515, 70526, 70536, 70547, + 70559, 70570, 70580, 70589, 70597, 70604, 70612, 70621, 70629, 70638, + 70648, 70657, 70665, 70674, 70684, 70693, 70703, 70714, 70724, 70733, + 70741, 70750, 70760, 70769, 70779, 70790, 70800, 70809, 70819, 70830, + 70840, 70851, 70863, 70874, 70884, 70893, 70901, 70910, 70920, 70929, + 70939, 70950, 70960, 70969, 70979, 70990, 71000, 71011, 71023, 71034, + 71044, 71053, 71063, 71074, 71084, 71095, 71107, 71118, 71128, 71139, + 71151, 71162, 71174, 71187, 71199, 71210, 71220, 71229, 71237, 71244, + 71252, 71261, 71269, 71278, 71288, 71297, 71305, 71314, 71324, 71333, + 71343, 71354, 71364, 71373, 71381, 71390, 71400, 71409, 71419, 71430, + 71440, 71449, 71459, 71470, 71480, 71491, 71503, 71514, 71524, 71533, + 71541, 71550, 71560, 71569, 71579, 71590, 71600, 71609, 71619, 71630, + 71640, 71651, 71663, 71674, 71684, 71693, 71703, 71714, 71724, 71735, + 71747, 71758, 71768, 71779, 71791, 71802, 71814, 71827, 71839, 71850, + 71860, 71869, 71877, 71886, 71896, 71905, 71915, 71926, 71936, 71945, + 71955, 71966, 71976, 71987, 71999, 72010, 72020, 72029, 72039, 72050, + 72060, 72071, 72083, 72094, 72104, 72115, 72127, 72138, 72150, 72163, + 72175, 72186, 72196, 72205, 72215, 72226, 72236, 72247, 72259, 72270, + 72280, 72291, 72303, 72314, 72326, 72339, 72351, 72362, 72372, 72383, + 72395, 72406, 72418, 72431, 72443, 72454, 72466, 72479, 72491, 72504, + 72518, 72531, 72543, 72554, 72564, 72573, 72581, 72588, 72593, 8266, + 72600, 34141, 72605, 72610, 34146, 72616, 21902, 34151, 72621, 72627, + 72635, 72641, 72647, 72654, 72661, 72666, 72670, 72674, 72677, 72681, + 72690, 72699, 72707, 72713, 72725, 72736, 72740, 3116, 8241, 72745, + 72748, 72750, 72754, 72758, 72762, 72768, 72773, 27136, 72778, 72782, + 72785, 72790, 72794, 72801, 72807, 72811, 6360, 72815, 34168, 72820, + 72827, 72836, 72844, 72855, 72863, 72872, 72880, 72887, 72894, 72900, + 72911, 34173, 72916, 72927, 72939, 72947, 72958, 72967, 72978, 72983, + 72991, 2576, 72996, 35941, 73009, 73013, 73025, 73033, 73038, 73046, + 18437, 73057, 73063, 73070, 73078, 73084, 34183, 73089, 4050, 61233, + 73096, 73099, 73107, 73120, 73133, 73146, 73159, 73166, 73177, 73186, + 44698, 44703, 73191, 73195, 73203, 73210, 73219, 73227, 73233, 73242, + 73250, 73258, 73262, 73271, 73280, 73290, 73303, 73316, 73326, 34188, + 73332, 73339, 73345, 73351, 34194, 73356, 73359, 73363, 73371, 73380, + 44436, 73388, 73397, 73405, 73412, 73420, 73430, 73439, 73448, 73457, + 73465, 73476, 73491, 73501, 9656, 22572, 73510, 73515, 73520, 73524, + 73529, 73533, 73538, 73544, 73549, 73554, 73560, 73565, 73570, 22537, + 73575, 73582, 73590, 73598, 73606, 73611, 73618, 73625, 73630, 2253, + 73634, 73638, 73646, 73654, 34211, 73660, 73666, 73678, 73684, 73691, + 73695, 73702, 73707, 73714, 73720, 73727, 73738, 73748, 73758, 73770, + 73776, 73784, 73794, 73804, 34238, 73813, 73822, 73828, 73840, 73851, + 73858, 73863, 73867, 73875, 73881, 73886, 73891, 73898, 73906, 73918, + 73928, 73937, 73946, 73953, 35794, 24953, 73959, 73964, 73968, 73972, + 73977, 73985, 73991, 74002, 74015, 74020, 74027, 34243, 74032, 74044, + 74053, 74061, 74071, 74082, 74095, 74102, 74111, 74120, 74128, 74133, + 74139, 1485, 74144, 74149, 74154, 74159, 74165, 74170, 74175, 74181, + 74187, 74192, 74196, 74201, 74206, 74211, 61769, 74216, 74221, 74226, + 74231, 74237, 74243, 74248, 74252, 74257, 74262, 74267, 74273, 74278, + 74284, 74289, 74294, 74299, 74304, 74308, 74314, 74319, 74328, 74333, + 74338, 74343, 74348, 74352, 74359, 74365, 4316, 18083, 3081, 74370, + 74374, 74379, 74383, 74387, 74391, 48498, 74395, 74320, 74397, 74407, + 34252, 74410, 74415, 74424, 74430, 6329, 34257, 74434, 74440, 74445, + 74451, 74456, 74460, 74467, 74472, 74482, 74491, 74495, 74501, 74507, + 74513, 74517, 74525, 74532, 74540, 74548, 34262, 74555, 74558, 74565, + 74571, 74576, 74580, 74586, 74593, 74598, 74602, 74611, 74619, 74625, + 74630, 34267, 74637, 74644, 74650, 74655, 74661, 74668, 74674, 22293, + 28736, 74680, 74685, 74691, 74695, 74707, 74353, 74360, 22469, 74717, + 74722, 74729, 74735, 74742, 74748, 74759, 74764, 74772, 9361, 74777, + 74780, 74786, 74790, 74794, 74797, 74803, 34010, 4317, 1059, 14130, + 74810, 74816, 74822, 74828, 74834, 74840, 74846, 74852, 74858, 74863, + 74868, 74873, 74878, 74883, 74888, 74893, 74898, 74903, 74908, 74913, + 74918, 74923, 74929, 74934, 74939, 74945, 74950, 74955, 74961, 74967, + 74973, 74979, 74985, 74991, 74997, 75003, 75009, 75014, 75019, 75025, + 75030, 75035, 75041, 75046, 75051, 75056, 75061, 75066, 75071, 75076, + 75081, 75086, 75091, 75096, 75101, 75107, 75112, 75117, 75122, 75128, + 75133, 75138, 75143, 75148, 75154, 75159, 75164, 75169, 75174, 75179, + 75184, 75189, 75194, 75199, 75204, 75209, 75214, 75219, 75224, 75229, + 75234, 75239, 75244, 75249, 75255, 75260, 75265, 75270, 75275, 75280, + 75285, 75290, 1871, 147, 75295, 75299, 75303, 75308, 75316, 75320, 75327, + 75335, 75339, 75352, 75360, 75365, 75370, 27545, 75374, 75379, 75383, + 75388, 75392, 75400, 75404, 21910, 75409, 75413, 64050, 75417, 75420, + 75428, 75436, 75444, 75449, 75454, 75461, 75467, 75473, 75478, 75485, + 75490, 75498, 68243, 75505, 75510, 75515, 75519, 12301, 75523, 75528, + 75533, 75537, 75540, 75546, 75550, 75560, 75569, 75573, 75576, 75580, + 75587, 75600, 75606, 75614, 75623, 75634, 75645, 75656, 75667, 75676, + 75682, 75691, 75699, 75709, 75722, 75729, 75740, 75746, 75751, 75756, + 75762, 75768, 75778, 75787, 74034, 75795, 75801, 75809, 75815, 75822, + 75830, 75833, 75837, 75841, 75844, 75850, 75856, 75864, 75876, 75888, + 75895, 75900, 75904, 75915, 75923, 75930, 75942, 75950, 75958, 75965, + 75971, 75981, 75990, 75995, 76005, 76014, 43728, 76021, 76025, 76030, + 76038, 76045, 76051, 76055, 76065, 76076, 76084, 76091, 76103, 76115, + 76124, 72999, 76131, 76141, 76152, 76166, 76174, 76184, 76191, 76199, + 76212, 76224, 76233, 76241, 76251, 76262, 76274, 76283, 76293, 76300, + 76309, 76324, 76332, 76342, 76351, 76359, 76372, 61203, 76387, 76397, + 76406, 76418, 76428, 76440, 76451, 76462, 76473, 76483, 76494, 76502, + 76508, 76518, 76526, 76532, 30400, 76537, 76543, 76548, 76555, 10193, + 18457, 76561, 76570, 76575, 76579, 76586, 76592, 76597, 76602, 76610, + 76618, 76622, 76625, 76628, 76630, 76637, 76643, 76654, 76659, 76663, + 76670, 76676, 76681, 76689, 68782, 68792, 76695, 76702, 76712, 11166, + 76719, 76724, 30611, 76733, 76738, 76745, 76755, 76763, 76771, 76780, + 76786, 76792, 76799, 76806, 76811, 76815, 76823, 76828, 76833, 76842, + 76850, 76857, 76862, 76866, 76875, 76881, 76884, 76888, 76897, 76907, + 75347, 76916, 76924, 76928, 76934, 76945, 76955, 18466, 76966, 76974, + 76982, 18478, 76989, 76993, 77002, 77009, 77012, 28614, 77015, 77019, + 77024, 77041, 77053, 11124, 77065, 77070, 77075, 77080, 21983, 77084, + 77089, 77094, 77100, 77105, 6008, 77110, 21987, 77115, 77120, 77126, + 77133, 77138, 77143, 77149, 77155, 77161, 77166, 77172, 77176, 77190, + 77198, 77206, 77212, 77217, 77224, 77234, 77243, 77248, 77253, 77258, + 77266, 77271, 77277, 77282, 77291, 62848, 77296, 77299, 77317, 77336, + 77349, 77363, 77379, 77386, 77393, 77402, 77409, 77415, 77422, 77427, + 77433, 77439, 77447, 77453, 77458, 77463, 77479, 11137, 77493, 77500, + 77508, 77514, 77518, 77521, 77526, 77531, 77538, 77543, 77552, 77557, + 77563, 77569, 77578, 77587, 77592, 77596, 77604, 77613, 12330, 77622, + 77630, 77636, 77641, 77648, 77654, 12341, 77659, 77662, 77667, 34294, + 77677, 77686, 77691, 77697, 77702, 77710, 77717, 77728, 77738, 77743, + 77751, 68171, 77756, 77762, 77767, 77774, 77783, 77791, 77797, 77803, + 77810, 77816, 77820, 17879, 3090, 77825, 77829, 77833, 77839, 77848, + 77854, 77861, 77865, 77886, 77908, 77924, 77941, 77960, 77969, 77979, + 77987, 77994, 78001, 78007, 28486, 78021, 78025, 78031, 78039, 78051, + 78057, 78065, 78070, 78075, 78079, 78087, 78094, 78098, 78104, 78110, + 78115, 3674, 44898, 78121, 78125, 78129, 78133, 78138, 78143, 78148, + 78154, 78160, 78166, 78173, 78179, 78186, 78192, 78198, 78203, 78209, + 78214, 78218, 78223, 78227, 78232, 44913, 78236, 78241, 78249, 78253, + 78258, 78265, 78274, 78280, 78289, 78293, 78300, 78304, 78307, 78314, + 78320, 78329, 78339, 78344, 78348, 78356, 78365, 78369, 78377, 78383, + 78388, 78393, 78399, 78405, 78410, 78414, 78420, 78425, 78429, 78432, + 78437, 78445, 78455, 78461, 78466, 78476, 42231, 78484, 78496, 78500, + 78506, 78518, 78529, 78536, 78542, 78549, 78556, 78568, 78575, 78581, + 22061, 78585, 78593, 78599, 78606, 78612, 78618, 78624, 78629, 78634, + 78639, 78648, 78656, 78667, 7225, 78672, 17328, 78678, 78682, 78686, + 78690, 78698, 78707, 78711, 78718, 78727, 78735, 78748, 78754, 78228, + 31495, 78759, 78761, 78766, 78771, 78776, 78781, 78786, 78791, 78796, + 78801, 78806, 78811, 78816, 78821, 78826, 78831, 78837, 78842, 78847, + 78852, 78857, 78862, 78867, 78872, 78877, 78883, 78889, 78895, 78900, + 78905, 78917, 78922, 1877, 44, 78927, 78932, 34300, 78936, 34305, 34310, + 34316, 34321, 78940, 34326, 23088, 78962, 78966, 78970, 78975, 78979, + 34330, 78983, 78991, 78998, 34335, 79004, 79007, 79012, 79016, 79025, + 10018, 79033, 34340, 22950, 79036, 79040, 1411, 79045, 34351, 79048, + 79053, 26921, 26931, 36957, 79058, 79063, 79068, 79073, 79079, 79084, + 79093, 79098, 79107, 79115, 79122, 79128, 79133, 79138, 79143, 79153, + 79162, 79170, 79175, 79183, 79187, 79195, 79199, 79206, 79214, 34159, + 39922, 79221, 79227, 79232, 79237, 12703, 29671, 79242, 79247, 79254, + 79260, 79265, 79273, 79283, 79293, 79299, 79304, 79310, 18488, 79317, + 37832, 79330, 79335, 79341, 32482, 79354, 79360, 79364, 79373, 79380, + 79386, 79394, 79403, 79410, 79416, 79419, 79423, 79427, 27062, 79431, + 79438, 79444, 79452, 79457, 25100, 79463, 79466, 79474, 79481, 79489, + 79502, 79516, 79523, 79529, 79536, 79542, 34365, 79546, 79553, 79561, + 79569, 79575, 34370, 79583, 79589, 79594, 79604, 79610, 79619, 32288, + 36388, 79627, 79632, 79637, 79641, 79646, 79650, 79658, 15730, 42244, + 79663, 79668, 34375, 65407, 79672, 79677, 79681, 79688, 79697, 79705, + 79711, 79716, 79722, 79729, 79735, 79740, 79745, 79756, 79765, 79777, + 79792, 34642, 79798, 17447, 34379, 79802, 79809, 25216, 79815, 79822, + 79831, 79838, 79847, 79853, 79858, 79866, 79872, 34389, 79877, 79886, + 78524, 79895, 79902, 79908, 79914, 79923, 79933, 79941, 79948, 79952, + 34394, 79955, 34400, 34406, 79960, 79968, 79976, 79986, 79995, 80003, + 80010, 80020, 34411, 80024, 80026, 80030, 80035, 80039, 80043, 80049, + 80054, 80058, 80069, 80074, 80079, 3095, 80083, 80090, 80094, 80103, + 80111, 80118, 80123, 80128, 65458, 80132, 80135, 80141, 80149, 80155, + 80159, 80164, 80171, 80176, 80180, 80186, 36419, 80191, 80194, 80199, + 80203, 80208, 80215, 80220, 80224, 40816, 80232, 26940, 26949, 80238, + 80244, 80250, 80255, 80259, 80262, 80272, 80281, 80286, 80292, 80299, + 80305, 80309, 80317, 80322, 36425, 75542, 80326, 80334, 80340, 80347, + 80352, 80356, 80361, 61419, 80367, 36431, 80372, 80377, 80381, 80386, + 80391, 80396, 80400, 80405, 80410, 80416, 80421, 80426, 80432, 80438, + 80443, 80447, 80452, 80457, 80462, 80466, 25215, 80471, 80476, 80482, + 80488, 80494, 80499, 80503, 80508, 80513, 80518, 80522, 80527, 80532, + 80537, 80542, 45168, 80546, 34419, 80554, 80558, 80566, 80574, 80585, + 80590, 80594, 23428, 80599, 80605, 80610, 80620, 80627, 80632, 80640, + 80649, 80654, 80658, 80663, 80671, 80679, 80686, 68424, 80692, 80700, + 80707, 80718, 80724, 80730, 34429, 80733, 80740, 80748, 80753, 42447, + 80757, 80762, 80769, 80774, 9239, 80778, 80786, 80793, 80800, 80809, + 80816, 80822, 80836, 10473, 80844, 80850, 80854, 80857, 80865, 80872, + 80877, 80890, 80897, 80901, 80906, 80913, 80918, 63934, 80923, 80926, + 80933, 80939, 80943, 80951, 80960, 80970, 80980, 80989, 81000, 81008, + 81019, 81024, 81028, 81033, 81037, 37088, 81045, 22356, 37097, 81050, + 81055, 81060, 81065, 81070, 81075, 81080, 81084, 81089, 81094, 81099, + 81104, 81109, 81114, 81118, 81123, 81128, 81132, 81136, 81140, 81144, + 81149, 81154, 81158, 81163, 81167, 81171, 81176, 81181, 81186, 81191, + 81195, 81200, 81205, 81209, 81214, 81219, 81224, 81229, 81234, 81239, + 81244, 81249, 81254, 81259, 81264, 81269, 81274, 81279, 81284, 81289, + 81294, 81299, 81304, 81309, 81313, 81318, 81323, 81328, 81333, 81338, + 81343, 81348, 81353, 81358, 81363, 81368, 81372, 81377, 81381, 81386, + 81391, 81396, 81401, 81406, 81411, 81416, 81421, 81426, 81430, 81434, + 81439, 81444, 81448, 81453, 81458, 81462, 81467, 81472, 81477, 81482, + 81486, 81491, 81496, 81500, 81505, 81509, 81513, 81517, 81521, 81526, + 81530, 81534, 81538, 81542, 81546, 81550, 81554, 81558, 81562, 81567, + 81572, 81577, 81582, 81587, 81592, 81597, 81602, 81607, 81612, 81616, + 81620, 81624, 81628, 81632, 81636, 81641, 81645, 81650, 81654, 81659, + 81664, 81668, 81672, 81677, 81681, 81685, 81689, 81693, 81697, 81701, + 81705, 81709, 81713, 81717, 81721, 81725, 81729, 81733, 81738, 81743, + 81747, 81751, 81755, 81759, 81763, 81767, 81772, 81776, 81780, 81784, + 81788, 81792, 81796, 81801, 81805, 81810, 81814, 81818, 81822, 81826, + 81830, 81834, 81838, 81842, 81846, 81850, 81854, 81859, 81863, 81867, + 81871, 81875, 81879, 81883, 81887, 81891, 81895, 81899, 81903, 81908, + 81912, 81916, 81921, 81926, 81930, 81934, 81938, 81942, 81946, 81950, + 81954, 81958, 81963, 81967, 81972, 81976, 81981, 81985, 81990, 81994, + 82000, 82005, 82009, 82014, 82018, 82023, 82027, 82032, 82036, 82041, + 1504, 82045, 2854, 1759, 1677, 82049, 82053, 2863, 82057, 1380, 82062, + 1322, 82066, 2875, 82070, 82077, 82084, 82098, 2879, 7327, 82107, 82115, + 82122, 82133, 82142, 82149, 82161, 82174, 82187, 82198, 82203, 82210, + 82222, 82226, 2883, 12408, 82236, 82241, 82250, 82260, 82265, 2887, + 82273, 82277, 82282, 82289, 82295, 82303, 82315, 1327, 13735, 82325, + 82329, 82335, 82349, 82361, 82373, 82383, 82392, 82401, 82410, 82418, + 82429, 82437, 4203, 82447, 82458, 82467, 82473, 82488, 82495, 82501, + 82506, 37227, 82511, 2911, 13739, 82515, 82522, 9177, 82531, 2916, 33887, + 82537, 63675, 82544, 82550, 82561, 82567, 82574, 82580, 82588, 82595, + 82601, 82611, 82620, 82631, 82640, 82647, 82653, 82663, 82671, 82677, + 82692, 82698, 82703, 82710, 82713, 82719, 82726, 82732, 82740, 82749, + 82757, 82763, 82772, 44438, 82786, 82791, 82797, 15536, 82802, 82815, + 82827, 82836, 82844, 82851, 82855, 82859, 82862, 82869, 82876, 82884, + 82892, 82901, 82909, 15463, 82917, 82922, 82926, 82938, 82945, 82954, + 781, 82964, 82973, 82984, 2932, 82988, 82992, 82998, 83011, 83023, 83033, + 83042, 83054, 27597, 83065, 83073, 83082, 83093, 83104, 83114, 83124, + 83133, 83141, 11944, 83148, 83152, 83155, 83160, 83165, 83169, 83175, + 1332, 83182, 83186, 12490, 83190, 83201, 83210, 83218, 83227, 83235, + 83251, 83262, 83271, 83279, 83291, 83302, 83318, 83328, 83349, 83363, + 83376, 83384, 83391, 7373, 83404, 83409, 83415, 6078, 83421, 83424, + 83431, 83441, 8395, 83448, 83453, 83458, 83463, 83471, 83480, 83488, + 10241, 10250, 83493, 83504, 83509, 83515, 2948, 1160, 83521, 11449, + 83527, 83534, 83541, 83554, 2262, 68, 83559, 83564, 83574, 83583, 83589, + 83598, 83606, 83616, 83620, 83625, 83629, 83641, 2976, 83649, 83657, + 83662, 83673, 83684, 83693, 22397, 83698, 83704, 83709, 83719, 83729, + 83734, 83740, 83744, 83749, 83758, 22409, 83762, 4280, 24, 83767, 83776, + 83783, 83790, 83796, 83802, 954, 83807, 83812, 64016, 83817, 83822, + 83828, 83834, 83842, 83847, 83855, 83862, 83868, 83873, 40700, 44332, + 83879, 2980, 32, 83889, 83902, 83907, 83915, 83920, 83926, 3002, 29639, + 83931, 83939, 83946, 83951, 83960, 61661, 65078, 83968, 83972, 1704, + 1818, 83977, 83982, 83989, 1822, 254, 83996, 84002, 3024, 84007, 84012, + 84019, 1826, 84024, 84030, 84035, 84047, 6305, 84057, 1833, 84063, 84068, + 84075, 84082, 84097, 84104, 84115, 84120, 84128, 2638, 84132, 84144, + 84149, 84153, 84159, 29455, 2267, 84163, 84174, 84178, 84182, 84188, + 84192, 84201, 84205, 84216, 84220, 2313, 33704, 84224, 84234, 3115, + 84242, 9661, 84251, 84256, 84260, 84269, 84276, 84282, 3085, 18093, + 84286, 84299, 84317, 84322, 84330, 84338, 84348, 10480, 13852, 84360, + 84373, 84380, 84394, 84401, 84417, 84424, 84430, 22441, 13100, 84437, + 84444, 84454, 84463, 45167, 84475, 45302, 84483, 84486, 84492, 84498, + 84504, 84510, 84516, 84523, 84530, 84536, 84542, 84548, 84554, 84560, + 84566, 84572, 84578, 84584, 84590, 84596, 84602, 84608, 84614, 84620, + 84626, 84632, 84638, 84644, 84650, 84656, 84662, 84668, 84674, 84680, + 84686, 84692, 84698, 84704, 84710, 84716, 84722, 84728, 84734, 84740, + 84746, 84752, 84758, 84764, 84770, 84776, 84782, 84788, 84794, 84800, + 84806, 84812, 84818, 84824, 84830, 84836, 84843, 84849, 84856, 84863, + 84869, 84876, 84883, 84889, 84895, 84901, 84907, 84913, 84919, 84925, + 84931, 84937, 84943, 84949, 84955, 84961, 84967, 84973, 3099, 9634, + 84979, 84985, 84993, 84997, 82285, 3103, 85001, 22174, 12733, 3885, + 85005, 3109, 85009, 85019, 85025, 85031, 85037, 85043, 85049, 85055, + 85061, 85067, 85073, 85079, 85085, 85091, 85097, 85103, 85109, 85115, + 85121, 85127, 85133, 85139, 85145, 85151, 85157, 85163, 85169, 85176, + 85183, 85189, 85195, 85201, 85207, 85213, 85219, 1337, 85225, 85230, + 85235, 85240, 85245, 85250, 85255, 85260, 85265, 85269, 85273, 85277, + 85281, 85285, 85289, 85293, 85297, 85301, 85307, 85313, 85319, 85325, + 85329, 85333, 85337, 85341, 85345, 85349, 85353, 85357, 85361, 85366, + 85371, 85376, 85381, 85386, 85391, 85396, 85401, 85406, 85411, 85416, + 85421, 85426, 85431, 85436, 85441, 85446, 85451, 85456, 85461, 85466, + 85471, 85476, 85481, 85486, 85491, 85496, 85501, 85506, 85511, 85516, + 85521, 85526, 85531, 85536, 85541, 85546, 85551, 85556, 85561, 85566, + 85571, 85576, 85581, 85586, 85591, 85596, 85601, 85606, 85611, 85616, + 85621, 85626, 85631, 85636, 85641, 85646, 85651, 85656, 85661, 85666, + 85671, 85676, 85681, 85686, 85691, 85696, 85701, 85706, 85711, 85716, + 85721, 85726, 85731, 85736, 85741, 85746, 85751, 85756, 85761, 85766, + 85771, 85776, 85781, 85786, 85791, 85796, 85801, 85806, 85811, 85816, + 85821, 85826, 85831, 85836, 85841, 85846, 85851, 85856, 85861, 85866, + 85871, 85876, 85881, 85886, 85891, 85896, 85901, 85906, 85911, 85916, + 85921, 85926, 85931, 85936, 85941, 85946, 85951, 85956, 85961, 85966, + 85971, 85976, 85981, 85986, 85991, 85996, 86001, 86006, 86011, 86016, + 86021, 86030, 86039, 86048, 86057, 86066, 86075, 86084, 86093, 86102, + 86111, 86120, 86129, 86138, 86147, 86156, 86165, 86174, 86183, 86192, + 86197, 86202, 86207, 86212, 86217, 86222, 86227, 86232, 86237, 86242, + 86247, 86252, 86257, 86262, 86267, 86272, 86277, 86282, 86287, 86292, + 86297, 86302, 86307, 86312, 86317, 86322, 86327, 86332, 86337, 86342, + 86347, 86352, 86357, 86362, 86367, 86372, 86377, 86382, 86387, 86392, + 86397, 86402, 86407, 86412, 86417, 86422, 86427, 86432, 86437, 86442, + 86447, 86452, 86457, 86462, 86467, 86472, 86477, 86482, 86488, 86494, + 86500, 86505, 86510, 86515, 86521, 86527, 86533, 86538, 86543, 86548, + 86553, 86558, 86563, 86568, 16922, 12755, 86573, 86579, 86585, 86594, + 86599, 86604, 86609, 86614, 86619, 86624, 86629, 86634, 86639, 86644, + 86649, 86654, 86659, 86664, 86669, 86674, 86679, 86684, 86689, 86694, + 86699, 86704, 86709, 86714, 86719, 86725, 86730, 86735, 86741, 86746, + 86752, 86757, 86762, 86768, 86773, 86778, 86783, 86788, 86793, 86798, + 86803, 86808, 85020, 85026, 85032, 85038, 86814, 85044, 85050, 85056, + 85062, 85068, 85074, 85080, 85086, 85092, 85098, 85104, 86820, 85110, + 85116, 85122, 86826, 85128, 85134, 85140, 85146, 85152, 85158, 85164, + 85184, 86832, 86838, 85190, 86844, 85196, 85202, 85208, 85214, 85220, + 3126, 3131, 86850, 86855, 86858, 86864, 86870, 86877, 86882, 86887, 2318, }; /* code->name phrasebook */ -#define phrasebook_shift 7 -#define phrasebook_short 209 +#define phrasebook_shift 8 +#define phrasebook_short 204 static unsigned char phrasebook[] = { - 0, 219, 20, 245, 39, 79, 224, 1, 79, 54, 50, 247, 140, 50, 225, 185, 50, - 254, 134, 254, 65, 43, 226, 7, 44, 226, 7, 253, 224, 96, 50, 249, 227, - 240, 174, 243, 236, 218, 131, 219, 48, 21, 210, 86, 21, 111, 21, 105, 21, - 158, 21, 161, 21, 190, 21, 195, 21, 199, 21, 196, 21, 201, 249, 234, 220, - 152, 233, 21, 50, 245, 106, 50, 242, 137, 50, 224, 16, 79, 249, 225, 253, - 214, 7, 6, 1, 61, 7, 6, 1, 253, 166, 7, 6, 1, 251, 74, 7, 6, 1, 249, 68, - 7, 6, 1, 76, 7, 6, 1, 245, 14, 7, 6, 1, 243, 209, 7, 6, 1, 242, 67, 7, 6, - 1, 74, 7, 6, 1, 235, 150, 7, 6, 1, 235, 29, 7, 6, 1, 156, 7, 6, 1, 194, - 7, 6, 1, 230, 30, 7, 6, 1, 78, 7, 6, 1, 226, 109, 7, 6, 1, 224, 99, 7, 6, - 1, 153, 7, 6, 1, 222, 93, 7, 6, 1, 217, 153, 7, 6, 1, 69, 7, 6, 1, 214, - 105, 7, 6, 1, 212, 98, 7, 6, 1, 211, 178, 7, 6, 1, 211, 117, 7, 6, 1, - 210, 159, 43, 42, 127, 223, 53, 219, 48, 44, 42, 127, 250, 39, 255, 23, - 121, 232, 219, 242, 144, 255, 23, 7, 4, 1, 61, 7, 4, 1, 253, 166, 7, 4, - 1, 251, 74, 7, 4, 1, 249, 68, 7, 4, 1, 76, 7, 4, 1, 245, 14, 7, 4, 1, - 243, 209, 7, 4, 1, 242, 67, 7, 4, 1, 74, 7, 4, 1, 235, 150, 7, 4, 1, 235, - 29, 7, 4, 1, 156, 7, 4, 1, 194, 7, 4, 1, 230, 30, 7, 4, 1, 78, 7, 4, 1, - 226, 109, 7, 4, 1, 224, 99, 7, 4, 1, 153, 7, 4, 1, 222, 93, 7, 4, 1, 217, - 153, 7, 4, 1, 69, 7, 4, 1, 214, 105, 7, 4, 1, 212, 98, 7, 4, 1, 211, 178, - 7, 4, 1, 211, 117, 7, 4, 1, 210, 159, 43, 249, 107, 127, 67, 232, 219, - 44, 249, 107, 127, 184, 228, 78, 219, 20, 235, 200, 245, 39, 79, 250, - 184, 50, 224, 231, 50, 249, 106, 50, 211, 40, 50, 251, 143, 130, 221, - 175, 50, 248, 9, 249, 171, 50, 244, 144, 226, 158, 235, 245, 233, 48, 52, - 254, 118, 224, 1, 79, 228, 57, 50, 219, 54, 240, 175, 223, 105, 50, 231, - 237, 248, 79, 50, 225, 24, 50, 218, 24, 105, 218, 24, 158, 255, 12, 255, - 23, 230, 233, 50, 225, 71, 50, 230, 229, 247, 128, 250, 191, 218, 24, - 111, 231, 153, 226, 158, 235, 245, 222, 250, 52, 254, 118, 224, 1, 79, - 212, 114, 244, 10, 123, 224, 24, 212, 114, 244, 10, 123, 242, 34, 212, - 114, 244, 10, 134, 224, 22, 235, 200, 224, 16, 79, 7, 6, 1, 116, 2, 242, - 143, 7, 6, 1, 116, 2, 142, 7, 6, 1, 116, 2, 250, 38, 7, 6, 1, 116, 2, - 184, 7, 6, 1, 116, 2, 248, 9, 7, 6, 1, 116, 2, 222, 237, 48, 7, 6, 1, - 254, 252, 7, 6, 1, 251, 75, 2, 250, 191, 7, 6, 1, 160, 2, 242, 143, 7, 6, - 1, 160, 2, 142, 7, 6, 1, 160, 2, 250, 38, 7, 6, 1, 160, 2, 248, 9, 7, 6, - 1, 240, 161, 2, 242, 143, 7, 6, 1, 240, 161, 2, 142, 7, 6, 1, 240, 161, - 2, 250, 38, 7, 6, 1, 240, 161, 2, 248, 9, 7, 6, 1, 245, 67, 7, 6, 1, 230, - 31, 2, 184, 7, 6, 1, 144, 2, 242, 143, 7, 6, 1, 144, 2, 142, 7, 6, 1, - 144, 2, 250, 38, 7, 6, 1, 144, 2, 184, 7, 6, 1, 144, 2, 248, 9, 230, 89, - 50, 7, 6, 1, 144, 2, 91, 7, 6, 1, 104, 2, 242, 143, 7, 6, 1, 104, 2, 142, - 7, 6, 1, 104, 2, 250, 38, 7, 6, 1, 104, 2, 248, 9, 7, 6, 1, 211, 118, 2, - 142, 7, 6, 1, 216, 152, 7, 4, 1, 220, 78, 222, 93, 7, 4, 1, 116, 2, 242, - 143, 7, 4, 1, 116, 2, 142, 7, 4, 1, 116, 2, 250, 38, 7, 4, 1, 116, 2, - 184, 7, 4, 1, 116, 2, 248, 9, 7, 4, 1, 116, 2, 222, 237, 48, 7, 4, 1, - 254, 252, 7, 4, 1, 251, 75, 2, 250, 191, 7, 4, 1, 160, 2, 242, 143, 7, 4, - 1, 160, 2, 142, 7, 4, 1, 160, 2, 250, 38, 7, 4, 1, 160, 2, 248, 9, 7, 4, - 1, 240, 161, 2, 242, 143, 7, 4, 1, 240, 161, 2, 142, 7, 4, 1, 240, 161, - 2, 250, 38, 7, 4, 1, 240, 161, 2, 248, 9, 7, 4, 1, 245, 67, 7, 4, 1, 230, - 31, 2, 184, 7, 4, 1, 144, 2, 242, 143, 7, 4, 1, 144, 2, 142, 7, 4, 1, - 144, 2, 250, 38, 7, 4, 1, 144, 2, 184, 7, 4, 1, 144, 2, 248, 9, 247, 177, - 50, 7, 4, 1, 144, 2, 91, 7, 4, 1, 104, 2, 242, 143, 7, 4, 1, 104, 2, 142, - 7, 4, 1, 104, 2, 250, 38, 7, 4, 1, 104, 2, 248, 9, 7, 4, 1, 211, 118, 2, - 142, 7, 4, 1, 216, 152, 7, 4, 1, 211, 118, 2, 248, 9, 7, 6, 1, 116, 2, - 231, 237, 7, 4, 1, 116, 2, 231, 237, 7, 6, 1, 116, 2, 251, 154, 7, 4, 1, - 116, 2, 251, 154, 7, 6, 1, 116, 2, 226, 228, 7, 4, 1, 116, 2, 226, 228, - 7, 6, 1, 251, 75, 2, 142, 7, 4, 1, 251, 75, 2, 142, 7, 6, 1, 251, 75, 2, - 250, 38, 7, 4, 1, 251, 75, 2, 250, 38, 7, 6, 1, 251, 75, 2, 59, 48, 7, 4, - 1, 251, 75, 2, 59, 48, 7, 6, 1, 251, 75, 2, 250, 242, 7, 4, 1, 251, 75, - 2, 250, 242, 7, 6, 1, 249, 69, 2, 250, 242, 7, 4, 1, 249, 69, 2, 250, - 242, 7, 6, 1, 249, 69, 2, 91, 7, 4, 1, 249, 69, 2, 91, 7, 6, 1, 160, 2, - 231, 237, 7, 4, 1, 160, 2, 231, 237, 7, 6, 1, 160, 2, 251, 154, 7, 4, 1, - 160, 2, 251, 154, 7, 6, 1, 160, 2, 59, 48, 7, 4, 1, 160, 2, 59, 48, 7, 6, - 1, 160, 2, 226, 228, 7, 4, 1, 160, 2, 226, 228, 7, 6, 1, 160, 2, 250, - 242, 7, 4, 1, 160, 2, 250, 242, 7, 6, 1, 243, 210, 2, 250, 38, 7, 4, 1, - 243, 210, 2, 250, 38, 7, 6, 1, 243, 210, 2, 251, 154, 7, 4, 1, 243, 210, - 2, 251, 154, 7, 6, 1, 243, 210, 2, 59, 48, 7, 4, 1, 243, 210, 2, 59, 48, - 7, 6, 1, 243, 210, 2, 250, 191, 7, 4, 1, 243, 210, 2, 250, 191, 7, 6, 1, - 242, 68, 2, 250, 38, 7, 4, 1, 242, 68, 2, 250, 38, 7, 6, 1, 242, 68, 2, - 91, 7, 4, 1, 242, 68, 2, 91, 7, 6, 1, 240, 161, 2, 184, 7, 4, 1, 240, - 161, 2, 184, 7, 6, 1, 240, 161, 2, 231, 237, 7, 4, 1, 240, 161, 2, 231, - 237, 7, 6, 1, 240, 161, 2, 251, 154, 7, 4, 1, 240, 161, 2, 251, 154, 7, - 6, 1, 240, 161, 2, 226, 228, 7, 4, 1, 240, 161, 2, 226, 228, 7, 6, 1, - 240, 161, 2, 59, 48, 7, 4, 1, 247, 127, 74, 7, 6, 27, 236, 38, 7, 4, 27, - 236, 38, 7, 6, 1, 235, 151, 2, 250, 38, 7, 4, 1, 235, 151, 2, 250, 38, 7, - 6, 1, 235, 30, 2, 250, 191, 7, 4, 1, 235, 30, 2, 250, 191, 7, 4, 1, 233, - 245, 7, 6, 1, 233, 155, 2, 142, 7, 4, 1, 233, 155, 2, 142, 7, 6, 1, 233, - 155, 2, 250, 191, 7, 4, 1, 233, 155, 2, 250, 191, 7, 6, 1, 233, 155, 2, - 250, 242, 7, 4, 1, 233, 155, 2, 250, 242, 7, 6, 1, 233, 155, 2, 230, 229, - 247, 128, 7, 4, 1, 233, 155, 2, 230, 229, 247, 128, 7, 6, 1, 233, 155, 2, - 91, 7, 4, 1, 233, 155, 2, 91, 7, 6, 1, 230, 31, 2, 142, 7, 4, 1, 230, 31, - 2, 142, 7, 6, 1, 230, 31, 2, 250, 191, 7, 4, 1, 230, 31, 2, 250, 191, 7, - 6, 1, 230, 31, 2, 250, 242, 7, 4, 1, 230, 31, 2, 250, 242, 7, 4, 1, 230, - 31, 224, 207, 251, 86, 254, 65, 7, 6, 1, 245, 146, 7, 4, 1, 245, 146, 7, - 6, 1, 144, 2, 231, 237, 7, 4, 1, 144, 2, 231, 237, 7, 6, 1, 144, 2, 251, - 154, 7, 4, 1, 144, 2, 251, 154, 7, 6, 1, 144, 2, 52, 142, 7, 4, 1, 144, - 2, 52, 142, 7, 6, 27, 226, 238, 7, 4, 27, 226, 238, 7, 6, 1, 223, 227, 2, - 142, 7, 4, 1, 223, 227, 2, 142, 7, 6, 1, 223, 227, 2, 250, 191, 7, 4, 1, - 223, 227, 2, 250, 191, 7, 6, 1, 223, 227, 2, 250, 242, 7, 4, 1, 223, 227, - 2, 250, 242, 7, 6, 1, 222, 94, 2, 142, 7, 4, 1, 222, 94, 2, 142, 7, 6, 1, - 222, 94, 2, 250, 38, 7, 4, 1, 222, 94, 2, 250, 38, 7, 6, 1, 222, 94, 2, - 250, 191, 7, 4, 1, 222, 94, 2, 250, 191, 7, 6, 1, 222, 94, 2, 250, 242, - 7, 4, 1, 222, 94, 2, 250, 242, 7, 6, 1, 217, 154, 2, 250, 191, 7, 4, 1, - 217, 154, 2, 250, 191, 7, 6, 1, 217, 154, 2, 250, 242, 7, 4, 1, 217, 154, - 2, 250, 242, 7, 6, 1, 217, 154, 2, 91, 7, 4, 1, 217, 154, 2, 91, 7, 6, 1, - 104, 2, 184, 7, 4, 1, 104, 2, 184, 7, 6, 1, 104, 2, 231, 237, 7, 4, 1, - 104, 2, 231, 237, 7, 6, 1, 104, 2, 251, 154, 7, 4, 1, 104, 2, 251, 154, - 7, 6, 1, 104, 2, 222, 237, 48, 7, 4, 1, 104, 2, 222, 237, 48, 7, 6, 1, - 104, 2, 52, 142, 7, 4, 1, 104, 2, 52, 142, 7, 6, 1, 104, 2, 226, 228, 7, - 4, 1, 104, 2, 226, 228, 7, 6, 1, 212, 99, 2, 250, 38, 7, 4, 1, 212, 99, - 2, 250, 38, 7, 6, 1, 211, 118, 2, 250, 38, 7, 4, 1, 211, 118, 2, 250, 38, - 7, 6, 1, 211, 118, 2, 248, 9, 7, 6, 1, 210, 160, 2, 142, 7, 4, 1, 210, - 160, 2, 142, 7, 6, 1, 210, 160, 2, 59, 48, 7, 4, 1, 210, 160, 2, 59, 48, - 7, 6, 1, 210, 160, 2, 250, 242, 7, 4, 1, 210, 160, 2, 250, 242, 7, 4, 1, - 200, 222, 93, 7, 4, 1, 57, 2, 91, 7, 6, 1, 57, 2, 103, 7, 6, 1, 57, 2, - 216, 12, 7, 4, 1, 57, 2, 216, 12, 7, 6, 1, 138, 195, 7, 4, 1, 138, 195, - 7, 6, 1, 204, 78, 7, 6, 1, 251, 75, 2, 103, 7, 4, 1, 251, 75, 2, 103, 7, - 6, 1, 254, 228, 249, 68, 7, 6, 1, 249, 69, 2, 103, 7, 6, 1, 249, 69, 2, - 216, 12, 7, 4, 1, 249, 69, 2, 216, 12, 7, 4, 1, 215, 94, 248, 62, 7, 6, - 1, 223, 52, 76, 7, 6, 1, 221, 197, 7, 6, 1, 204, 76, 7, 6, 1, 245, 15, 2, - 103, 7, 4, 1, 245, 15, 2, 103, 7, 6, 1, 243, 210, 2, 103, 7, 6, 1, 243, - 114, 7, 4, 1, 240, 208, 7, 6, 1, 235, 192, 7, 6, 1, 240, 161, 2, 91, 7, - 6, 1, 235, 30, 2, 103, 7, 4, 1, 235, 30, 2, 103, 7, 4, 1, 233, 155, 2, - 130, 7, 4, 1, 233, 106, 2, 91, 7, 6, 1, 215, 94, 194, 7, 6, 1, 230, 31, - 2, 43, 103, 7, 4, 1, 230, 31, 2, 200, 44, 233, 42, 7, 6, 1, 144, 2, 230, - 229, 184, 7, 6, 1, 144, 2, 240, 255, 7, 4, 1, 144, 2, 240, 255, 7, 6, 1, - 226, 223, 7, 4, 1, 226, 223, 7, 6, 1, 226, 110, 2, 103, 7, 4, 1, 226, - 110, 2, 103, 7, 1, 210, 214, 7, 6, 1, 138, 105, 7, 4, 1, 138, 105, 7, 6, - 1, 245, 83, 7, 1, 223, 52, 245, 84, 232, 129, 7, 4, 1, 217, 154, 2, 226, - 70, 103, 7, 6, 1, 217, 154, 2, 103, 7, 4, 1, 217, 154, 2, 103, 7, 6, 1, - 217, 154, 2, 223, 58, 103, 7, 6, 1, 104, 2, 240, 255, 7, 4, 1, 104, 2, - 240, 255, 7, 6, 1, 214, 157, 7, 6, 1, 214, 106, 2, 103, 7, 6, 1, 211, - 118, 2, 103, 7, 4, 1, 211, 118, 2, 103, 7, 6, 1, 210, 160, 2, 91, 7, 4, - 1, 210, 160, 2, 91, 7, 6, 1, 245, 16, 7, 6, 1, 245, 17, 223, 51, 7, 4, 1, - 245, 17, 223, 51, 7, 4, 1, 245, 17, 2, 217, 78, 7, 1, 113, 2, 91, 7, 6, - 1, 138, 190, 7, 4, 1, 138, 190, 7, 1, 235, 200, 242, 187, 218, 132, 2, - 91, 7, 1, 211, 181, 7, 1, 248, 55, 250, 19, 7, 1, 233, 83, 250, 19, 7, 1, - 254, 145, 250, 19, 7, 1, 223, 58, 250, 19, 7, 6, 1, 246, 48, 2, 250, 242, - 7, 6, 1, 249, 69, 2, 4, 1, 210, 160, 2, 250, 242, 7, 4, 1, 246, 48, 2, - 250, 242, 7, 6, 1, 232, 194, 7, 6, 1, 233, 155, 2, 4, 1, 235, 150, 7, 4, - 1, 232, 194, 7, 6, 1, 228, 191, 7, 6, 1, 230, 31, 2, 4, 1, 235, 150, 7, - 4, 1, 228, 191, 7, 6, 1, 116, 2, 250, 242, 7, 4, 1, 116, 2, 250, 242, 7, - 6, 1, 240, 161, 2, 250, 242, 7, 4, 1, 240, 161, 2, 250, 242, 7, 6, 1, - 144, 2, 250, 242, 7, 4, 1, 144, 2, 250, 242, 7, 6, 1, 104, 2, 250, 242, - 7, 4, 1, 104, 2, 250, 242, 7, 6, 1, 104, 2, 248, 10, 22, 231, 237, 7, 4, - 1, 104, 2, 248, 10, 22, 231, 237, 7, 6, 1, 104, 2, 248, 10, 22, 142, 7, - 4, 1, 104, 2, 248, 10, 22, 142, 7, 6, 1, 104, 2, 248, 10, 22, 250, 242, - 7, 4, 1, 104, 2, 248, 10, 22, 250, 242, 7, 6, 1, 104, 2, 248, 10, 22, - 242, 143, 7, 4, 1, 104, 2, 248, 10, 22, 242, 143, 7, 4, 1, 215, 94, 76, - 7, 6, 1, 116, 2, 248, 10, 22, 231, 237, 7, 4, 1, 116, 2, 248, 10, 22, - 231, 237, 7, 6, 1, 116, 2, 59, 72, 22, 231, 237, 7, 4, 1, 116, 2, 59, 72, - 22, 231, 237, 7, 6, 1, 254, 253, 2, 231, 237, 7, 4, 1, 254, 253, 2, 231, - 237, 7, 6, 1, 243, 210, 2, 91, 7, 4, 1, 243, 210, 2, 91, 7, 6, 1, 243, - 210, 2, 250, 242, 7, 4, 1, 243, 210, 2, 250, 242, 7, 6, 1, 235, 30, 2, - 250, 242, 7, 4, 1, 235, 30, 2, 250, 242, 7, 6, 1, 144, 2, 226, 228, 7, 4, - 1, 144, 2, 226, 228, 7, 6, 1, 144, 2, 226, 229, 22, 231, 237, 7, 4, 1, - 144, 2, 226, 229, 22, 231, 237, 7, 6, 1, 245, 17, 2, 250, 242, 7, 4, 1, - 245, 17, 2, 250, 242, 7, 4, 1, 235, 151, 2, 250, 242, 7, 6, 1, 246, 47, - 7, 6, 1, 249, 69, 2, 4, 1, 210, 159, 7, 4, 1, 246, 47, 7, 6, 1, 243, 210, - 2, 142, 7, 4, 1, 243, 210, 2, 142, 7, 6, 1, 240, 206, 7, 6, 1, 211, 181, - 7, 6, 1, 230, 31, 2, 242, 143, 7, 4, 1, 230, 31, 2, 242, 143, 7, 6, 1, - 116, 2, 222, 237, 72, 22, 142, 7, 4, 1, 116, 2, 222, 237, 72, 22, 142, 7, - 6, 1, 254, 253, 2, 142, 7, 4, 1, 254, 253, 2, 142, 7, 6, 1, 144, 2, 218, - 105, 22, 142, 7, 4, 1, 144, 2, 218, 105, 22, 142, 7, 6, 1, 116, 2, 52, - 242, 143, 7, 4, 1, 116, 2, 52, 242, 143, 7, 6, 1, 116, 2, 235, 200, 251, - 154, 7, 4, 1, 116, 2, 235, 200, 251, 154, 7, 6, 1, 160, 2, 52, 242, 143, - 7, 4, 1, 160, 2, 52, 242, 143, 7, 6, 1, 160, 2, 235, 200, 251, 154, 7, 4, - 1, 160, 2, 235, 200, 251, 154, 7, 6, 1, 240, 161, 2, 52, 242, 143, 7, 4, - 1, 240, 161, 2, 52, 242, 143, 7, 6, 1, 240, 161, 2, 235, 200, 251, 154, - 7, 4, 1, 240, 161, 2, 235, 200, 251, 154, 7, 6, 1, 144, 2, 52, 242, 143, - 7, 4, 1, 144, 2, 52, 242, 143, 7, 6, 1, 144, 2, 235, 200, 251, 154, 7, 4, - 1, 144, 2, 235, 200, 251, 154, 7, 6, 1, 223, 227, 2, 52, 242, 143, 7, 4, - 1, 223, 227, 2, 52, 242, 143, 7, 6, 1, 223, 227, 2, 235, 200, 251, 154, - 7, 4, 1, 223, 227, 2, 235, 200, 251, 154, 7, 6, 1, 104, 2, 52, 242, 143, - 7, 4, 1, 104, 2, 52, 242, 143, 7, 6, 1, 104, 2, 235, 200, 251, 154, 7, 4, - 1, 104, 2, 235, 200, 251, 154, 7, 6, 1, 222, 94, 2, 249, 228, 51, 7, 4, - 1, 222, 94, 2, 249, 228, 51, 7, 6, 1, 217, 154, 2, 249, 228, 51, 7, 4, 1, - 217, 154, 2, 249, 228, 51, 7, 6, 1, 210, 231, 7, 4, 1, 210, 231, 7, 6, 1, - 242, 68, 2, 250, 242, 7, 4, 1, 242, 68, 2, 250, 242, 7, 6, 1, 230, 31, 2, - 200, 44, 233, 42, 7, 4, 1, 249, 69, 2, 249, 108, 7, 6, 1, 226, 138, 7, 4, - 1, 226, 138, 7, 6, 1, 210, 160, 2, 103, 7, 4, 1, 210, 160, 2, 103, 7, 6, - 1, 116, 2, 59, 48, 7, 4, 1, 116, 2, 59, 48, 7, 6, 1, 160, 2, 250, 191, 7, - 4, 1, 160, 2, 250, 191, 7, 6, 1, 144, 2, 248, 10, 22, 231, 237, 7, 4, 1, - 144, 2, 248, 10, 22, 231, 237, 7, 6, 1, 144, 2, 216, 90, 22, 231, 237, 7, - 4, 1, 144, 2, 216, 90, 22, 231, 237, 7, 6, 1, 144, 2, 59, 48, 7, 4, 1, - 144, 2, 59, 48, 7, 6, 1, 144, 2, 59, 72, 22, 231, 237, 7, 4, 1, 144, 2, - 59, 72, 22, 231, 237, 7, 6, 1, 211, 118, 2, 231, 237, 7, 4, 1, 211, 118, - 2, 231, 237, 7, 4, 1, 233, 155, 2, 249, 108, 7, 4, 1, 230, 31, 2, 249, - 108, 7, 4, 1, 217, 154, 2, 249, 108, 7, 4, 1, 247, 127, 235, 150, 7, 4, - 1, 248, 151, 247, 228, 7, 4, 1, 224, 34, 247, 228, 7, 6, 1, 116, 2, 91, - 7, 6, 1, 251, 75, 2, 91, 7, 4, 1, 251, 75, 2, 91, 7, 6, 1, 233, 155, 2, - 130, 7, 6, 1, 217, 154, 2, 248, 7, 91, 7, 4, 1, 222, 94, 2, 217, 251, - 217, 78, 7, 4, 1, 210, 160, 2, 217, 251, 217, 78, 7, 6, 1, 242, 187, 218, - 131, 7, 4, 1, 242, 187, 218, 131, 7, 6, 1, 57, 2, 91, 7, 6, 1, 104, 130, - 7, 6, 1, 215, 94, 214, 105, 7, 6, 1, 160, 2, 91, 7, 4, 1, 160, 2, 91, 7, - 6, 1, 235, 151, 2, 91, 7, 4, 1, 235, 151, 2, 91, 7, 6, 1, 4, 224, 100, 2, - 241, 59, 217, 78, 7, 4, 1, 224, 100, 2, 241, 59, 217, 78, 7, 6, 1, 223, - 227, 2, 91, 7, 4, 1, 223, 227, 2, 91, 7, 6, 1, 211, 118, 2, 91, 7, 4, 1, - 211, 118, 2, 91, 7, 4, 1, 215, 94, 61, 7, 4, 1, 254, 151, 7, 4, 1, 215, - 94, 254, 151, 7, 4, 1, 57, 2, 103, 7, 4, 1, 204, 78, 7, 4, 1, 251, 75, 2, - 249, 108, 7, 4, 1, 249, 69, 2, 217, 78, 7, 4, 1, 249, 69, 2, 103, 7, 4, - 1, 223, 52, 76, 7, 4, 1, 221, 197, 7, 4, 1, 221, 198, 2, 103, 7, 4, 1, - 204, 76, 7, 4, 1, 223, 52, 204, 76, 7, 4, 1, 223, 52, 204, 160, 2, 103, - 7, 4, 1, 250, 8, 223, 52, 204, 76, 7, 4, 1, 247, 127, 235, 151, 2, 91, 7, - 4, 1, 243, 210, 2, 103, 7, 4, 1, 119, 243, 209, 7, 1, 4, 6, 243, 209, 7, - 4, 1, 243, 114, 7, 4, 1, 223, 154, 240, 255, 7, 4, 1, 215, 94, 242, 67, - 7, 4, 1, 242, 68, 2, 103, 7, 4, 1, 241, 215, 2, 103, 7, 4, 1, 240, 161, - 2, 91, 7, 4, 1, 235, 192, 7, 1, 4, 6, 74, 7, 4, 1, 233, 155, 2, 230, 229, - 184, 7, 4, 1, 233, 155, 2, 252, 49, 7, 4, 1, 233, 155, 2, 223, 58, 103, - 7, 4, 1, 233, 7, 7, 4, 1, 215, 94, 194, 7, 4, 1, 215, 94, 232, 55, 2, - 200, 233, 42, 7, 4, 1, 232, 55, 2, 103, 7, 4, 1, 230, 31, 2, 43, 103, 7, - 4, 1, 230, 31, 2, 223, 58, 103, 7, 1, 4, 6, 230, 30, 7, 4, 1, 252, 142, - 78, 7, 1, 4, 6, 226, 238, 7, 4, 1, 250, 8, 226, 205, 7, 4, 1, 225, 136, - 7, 4, 1, 215, 94, 153, 7, 4, 1, 215, 94, 223, 227, 2, 200, 233, 42, 7, 4, - 1, 215, 94, 223, 227, 2, 103, 7, 4, 1, 223, 227, 2, 200, 233, 42, 7, 4, - 1, 223, 227, 2, 217, 78, 7, 4, 1, 223, 227, 2, 244, 95, 7, 4, 1, 223, 52, - 223, 227, 2, 244, 95, 7, 1, 4, 6, 153, 7, 1, 4, 6, 235, 200, 153, 7, 4, - 1, 222, 94, 2, 103, 7, 4, 1, 245, 83, 7, 4, 1, 247, 127, 235, 151, 2, - 218, 105, 22, 103, 7, 4, 1, 218, 233, 223, 52, 245, 83, 7, 4, 1, 245, 84, - 2, 249, 108, 7, 4, 1, 215, 94, 217, 153, 7, 4, 1, 217, 154, 2, 223, 58, - 103, 7, 4, 1, 104, 130, 7, 4, 1, 214, 157, 7, 4, 1, 214, 106, 2, 103, 7, - 4, 1, 215, 94, 214, 105, 7, 4, 1, 215, 94, 212, 98, 7, 4, 1, 215, 94, - 211, 117, 7, 1, 4, 6, 211, 117, 7, 4, 1, 210, 160, 2, 223, 58, 103, 7, 4, - 1, 210, 160, 2, 249, 108, 7, 4, 1, 245, 16, 7, 4, 1, 245, 17, 2, 249, - 108, 7, 1, 242, 187, 218, 131, 7, 1, 225, 142, 213, 135, 244, 1, 7, 1, - 235, 200, 242, 187, 218, 131, 7, 1, 218, 112, 251, 74, 7, 1, 251, 254, - 250, 19, 7, 1, 4, 6, 253, 166, 7, 4, 1, 250, 8, 204, 76, 7, 1, 4, 6, 243, - 210, 2, 103, 7, 1, 4, 6, 242, 67, 7, 4, 1, 235, 151, 2, 249, 135, 7, 4, - 1, 215, 94, 235, 29, 7, 1, 4, 6, 156, 7, 4, 1, 224, 100, 2, 103, 7, 1, - 242, 187, 218, 132, 2, 91, 7, 1, 223, 52, 242, 187, 218, 132, 2, 91, 7, - 4, 1, 246, 48, 247, 228, 7, 4, 1, 248, 34, 247, 228, 7, 4, 1, 246, 48, - 247, 229, 2, 249, 108, 7, 4, 1, 215, 186, 247, 228, 7, 4, 1, 216, 236, - 247, 228, 7, 4, 1, 217, 30, 247, 229, 2, 249, 108, 7, 4, 1, 244, 142, - 247, 228, 7, 4, 1, 232, 105, 247, 228, 7, 4, 1, 232, 56, 247, 228, 7, 1, - 251, 254, 225, 184, 7, 1, 252, 6, 225, 184, 7, 4, 1, 215, 94, 242, 68, 2, - 244, 95, 7, 4, 1, 215, 94, 242, 68, 2, 244, 96, 22, 217, 78, 58, 1, 4, - 242, 67, 58, 1, 4, 242, 68, 2, 103, 58, 1, 4, 235, 150, 58, 1, 4, 153, - 58, 1, 4, 215, 94, 153, 58, 1, 4, 215, 94, 223, 227, 2, 103, 58, 1, 4, 6, - 235, 200, 153, 58, 1, 4, 212, 98, 58, 1, 4, 211, 117, 58, 1, 224, 193, - 58, 1, 52, 224, 193, 58, 1, 215, 94, 249, 227, 58, 1, 254, 65, 58, 1, - 223, 52, 249, 227, 58, 1, 44, 163, 222, 236, 58, 1, 43, 163, 222, 236, - 58, 1, 242, 187, 218, 131, 58, 1, 223, 52, 242, 187, 218, 131, 58, 1, 43, - 254, 1, 58, 1, 44, 254, 1, 58, 1, 120, 254, 1, 58, 1, 124, 254, 1, 58, 1, - 250, 39, 255, 23, 250, 242, 58, 1, 67, 232, 219, 58, 1, 231, 237, 58, 1, - 255, 12, 255, 23, 58, 1, 242, 144, 255, 23, 58, 1, 121, 67, 232, 219, 58, - 1, 121, 231, 237, 58, 1, 121, 242, 144, 255, 23, 58, 1, 121, 255, 12, - 255, 23, 58, 1, 215, 223, 249, 234, 58, 1, 163, 215, 223, 249, 234, 58, - 1, 250, 181, 44, 163, 222, 236, 58, 1, 250, 181, 43, 163, 222, 236, 58, - 1, 120, 217, 88, 58, 1, 124, 217, 88, 58, 1, 96, 50, 58, 1, 230, 187, 50, - 251, 154, 59, 48, 222, 237, 48, 226, 228, 4, 184, 52, 255, 12, 255, 23, - 58, 1, 223, 39, 103, 58, 1, 249, 139, 255, 23, 58, 1, 4, 243, 114, 58, 1, - 4, 156, 58, 1, 4, 222, 93, 58, 1, 4, 211, 178, 58, 1, 4, 223, 52, 242, - 187, 218, 131, 58, 1, 245, 28, 138, 130, 58, 1, 125, 138, 130, 58, 1, - 230, 230, 138, 130, 58, 1, 121, 138, 130, 58, 1, 245, 27, 138, 130, 58, - 1, 210, 254, 248, 52, 138, 79, 58, 1, 211, 70, 248, 52, 138, 79, 58, 1, - 213, 133, 58, 1, 214, 186, 58, 1, 52, 254, 65, 58, 1, 121, 124, 254, 1, - 58, 1, 121, 120, 254, 1, 58, 1, 121, 43, 254, 1, 58, 1, 121, 44, 254, 1, - 58, 1, 121, 222, 236, 58, 1, 230, 229, 242, 144, 255, 23, 58, 1, 230, - 229, 52, 242, 144, 255, 23, 58, 1, 230, 229, 52, 255, 12, 255, 23, 58, 1, - 121, 184, 58, 1, 223, 160, 249, 234, 58, 1, 252, 66, 125, 216, 31, 58, 1, - 245, 151, 125, 216, 31, 58, 1, 252, 66, 121, 216, 31, 58, 1, 245, 151, - 121, 216, 31, 58, 1, 220, 56, 58, 1, 204, 220, 56, 58, 1, 121, 43, 75, - 38, 242, 144, 255, 23, 38, 255, 12, 255, 23, 38, 250, 39, 255, 23, 38, - 184, 38, 231, 237, 38, 226, 123, 38, 251, 154, 38, 59, 48, 38, 248, 9, - 38, 241, 59, 48, 38, 222, 237, 48, 38, 52, 255, 12, 255, 23, 38, 250, - 242, 38, 67, 232, 220, 48, 38, 52, 67, 232, 220, 48, 38, 52, 242, 144, - 255, 23, 38, 251, 7, 38, 235, 200, 251, 154, 38, 215, 94, 249, 228, 48, - 38, 249, 228, 48, 38, 223, 52, 249, 228, 48, 38, 249, 228, 72, 222, 254, - 38, 242, 144, 255, 24, 51, 38, 255, 12, 255, 24, 51, 38, 43, 217, 89, 51, - 38, 44, 217, 89, 51, 38, 43, 254, 118, 48, 38, 240, 255, 38, 43, 163, - 222, 237, 51, 38, 120, 217, 89, 51, 38, 124, 217, 89, 51, 38, 96, 5, 51, - 38, 230, 187, 5, 51, 38, 226, 68, 241, 59, 51, 38, 223, 58, 241, 59, 51, - 38, 59, 51, 38, 248, 10, 51, 38, 222, 237, 51, 38, 249, 228, 51, 38, 250, - 191, 38, 226, 228, 38, 67, 232, 220, 51, 38, 251, 148, 51, 38, 235, 200, - 52, 254, 32, 51, 38, 250, 243, 51, 38, 250, 39, 255, 24, 51, 38, 251, - 155, 51, 38, 235, 200, 251, 155, 51, 38, 216, 90, 51, 38, 231, 238, 51, - 38, 121, 232, 219, 38, 52, 121, 232, 219, 38, 216, 90, 226, 124, 38, 219, - 253, 218, 105, 226, 124, 38, 200, 218, 105, 226, 124, 38, 219, 253, 219, - 49, 226, 124, 38, 200, 219, 49, 226, 124, 38, 44, 163, 222, 237, 51, 38, - 235, 200, 251, 148, 51, 38, 42, 51, 38, 221, 182, 51, 38, 211, 179, 48, - 38, 67, 184, 38, 52, 226, 123, 38, 242, 144, 138, 79, 38, 255, 12, 138, - 79, 38, 26, 225, 178, 38, 26, 234, 8, 38, 26, 248, 4, 216, 19, 38, 26, - 210, 219, 38, 251, 148, 48, 38, 245, 106, 5, 51, 38, 52, 67, 232, 220, - 51, 38, 43, 254, 118, 51, 38, 228, 57, 216, 90, 48, 38, 241, 65, 48, 38, - 254, 156, 128, 216, 43, 48, 38, 43, 44, 80, 51, 38, 214, 153, 80, 51, 38, - 242, 149, 235, 69, 38, 44, 254, 2, 48, 38, 43, 163, 222, 237, 48, 38, - 244, 139, 38, 211, 179, 51, 38, 43, 254, 2, 51, 38, 44, 254, 2, 51, 38, - 44, 254, 2, 22, 120, 254, 2, 51, 38, 44, 163, 222, 237, 48, 38, 59, 72, - 222, 254, 38, 253, 225, 51, 38, 52, 222, 237, 51, 38, 210, 35, 48, 38, - 52, 251, 155, 51, 38, 52, 251, 154, 38, 52, 231, 237, 38, 52, 231, 238, - 51, 38, 52, 184, 38, 52, 235, 200, 251, 154, 38, 52, 97, 80, 51, 38, 7, - 4, 1, 61, 38, 7, 4, 1, 76, 38, 7, 4, 1, 74, 38, 7, 4, 1, 78, 38, 7, 4, 1, - 69, 38, 7, 4, 1, 251, 74, 38, 7, 4, 1, 249, 68, 38, 7, 4, 1, 242, 67, 38, - 7, 4, 1, 194, 38, 7, 4, 1, 153, 38, 7, 4, 1, 217, 153, 38, 7, 4, 1, 214, - 105, 38, 7, 4, 1, 211, 178, 26, 6, 1, 241, 203, 26, 4, 1, 241, 203, 26, - 6, 1, 254, 31, 221, 248, 26, 4, 1, 254, 31, 221, 248, 26, 227, 202, 50, - 26, 232, 114, 227, 202, 50, 26, 6, 1, 226, 55, 247, 235, 26, 4, 1, 226, - 55, 247, 235, 26, 210, 219, 26, 4, 223, 52, 232, 88, 219, 180, 87, 26, 4, - 246, 126, 232, 88, 219, 180, 87, 26, 4, 223, 52, 246, 126, 232, 88, 219, - 180, 87, 26, 224, 16, 79, 26, 216, 19, 26, 248, 4, 216, 19, 26, 6, 1, - 254, 152, 2, 216, 19, 26, 254, 105, 217, 3, 26, 6, 1, 245, 109, 2, 216, - 19, 26, 6, 1, 245, 72, 2, 216, 19, 26, 6, 1, 235, 193, 2, 216, 19, 26, 6, - 1, 226, 204, 2, 216, 19, 26, 6, 1, 214, 158, 2, 216, 19, 26, 6, 1, 226, - 206, 2, 216, 19, 26, 4, 1, 235, 193, 2, 248, 4, 22, 216, 19, 26, 6, 1, - 254, 151, 26, 6, 1, 252, 34, 26, 6, 1, 243, 114, 26, 6, 1, 248, 62, 26, - 6, 1, 245, 108, 26, 6, 1, 210, 85, 26, 6, 1, 245, 71, 26, 6, 1, 216, 180, - 26, 6, 1, 235, 192, 26, 6, 1, 234, 228, 26, 6, 1, 233, 104, 26, 6, 1, - 230, 107, 26, 6, 1, 227, 242, 26, 6, 1, 211, 157, 26, 6, 1, 226, 203, 26, - 6, 1, 225, 111, 26, 6, 1, 223, 40, 26, 6, 1, 219, 179, 26, 6, 1, 217, 42, - 26, 6, 1, 214, 157, 26, 6, 1, 225, 136, 26, 6, 1, 250, 118, 26, 6, 1, - 224, 164, 26, 6, 1, 226, 205, 26, 6, 1, 235, 193, 2, 248, 3, 26, 6, 1, - 214, 158, 2, 248, 3, 26, 4, 1, 254, 152, 2, 216, 19, 26, 4, 1, 245, 109, - 2, 216, 19, 26, 4, 1, 245, 72, 2, 216, 19, 26, 4, 1, 235, 193, 2, 216, - 19, 26, 4, 1, 214, 158, 2, 248, 4, 22, 216, 19, 26, 4, 1, 254, 151, 26, - 4, 1, 252, 34, 26, 4, 1, 243, 114, 26, 4, 1, 248, 62, 26, 4, 1, 245, 108, - 26, 4, 1, 210, 85, 26, 4, 1, 245, 71, 26, 4, 1, 216, 180, 26, 4, 1, 235, - 192, 26, 4, 1, 234, 228, 26, 4, 1, 233, 104, 26, 4, 1, 230, 107, 26, 4, - 1, 227, 242, 26, 4, 1, 211, 157, 26, 4, 1, 226, 203, 26, 4, 1, 225, 111, - 26, 4, 1, 223, 40, 26, 4, 1, 40, 219, 179, 26, 4, 1, 219, 179, 26, 4, 1, - 217, 42, 26, 4, 1, 214, 157, 26, 4, 1, 225, 136, 26, 4, 1, 250, 118, 26, - 4, 1, 224, 164, 26, 4, 1, 226, 205, 26, 4, 1, 235, 193, 2, 248, 3, 26, 4, - 1, 214, 158, 2, 248, 3, 26, 4, 1, 226, 204, 2, 216, 19, 26, 4, 1, 214, - 158, 2, 216, 19, 26, 4, 1, 226, 206, 2, 216, 19, 26, 6, 234, 253, 87, 26, - 252, 35, 87, 26, 216, 181, 87, 26, 214, 158, 2, 241, 59, 87, 26, 214, - 158, 2, 255, 12, 22, 241, 59, 87, 26, 214, 158, 2, 248, 10, 22, 241, 59, - 87, 26, 225, 137, 87, 26, 225, 112, 87, 26, 234, 253, 87, 26, 1, 254, 31, - 234, 12, 26, 4, 1, 254, 31, 234, 12, 26, 1, 218, 139, 26, 4, 1, 218, 139, - 26, 1, 247, 235, 26, 4, 1, 247, 235, 26, 1, 234, 12, 26, 4, 1, 234, 12, - 26, 1, 221, 248, 26, 4, 1, 221, 248, 81, 6, 1, 220, 57, 81, 4, 1, 220, - 57, 81, 6, 1, 244, 148, 81, 4, 1, 244, 148, 81, 6, 1, 234, 123, 81, 4, 1, - 234, 123, 81, 6, 1, 241, 52, 81, 4, 1, 241, 52, 81, 6, 1, 243, 109, 81, - 4, 1, 243, 109, 81, 6, 1, 220, 24, 81, 4, 1, 220, 24, 81, 6, 1, 248, 77, - 81, 4, 1, 248, 77, 26, 234, 229, 87, 26, 223, 41, 87, 26, 232, 88, 219, - 180, 87, 26, 1, 210, 224, 26, 6, 216, 181, 87, 26, 232, 88, 245, 109, 87, - 26, 223, 52, 232, 88, 245, 109, 87, 26, 6, 1, 220, 9, 26, 4, 1, 220, 9, - 26, 6, 232, 88, 219, 180, 87, 26, 6, 1, 221, 245, 26, 4, 1, 221, 245, 26, - 223, 41, 2, 218, 105, 87, 26, 6, 223, 52, 232, 88, 219, 180, 87, 26, 6, - 246, 126, 232, 88, 219, 180, 87, 26, 6, 223, 52, 246, 126, 232, 88, 219, - 180, 87, 33, 6, 1, 236, 68, 2, 242, 143, 33, 6, 1, 235, 196, 33, 6, 1, - 247, 170, 33, 6, 1, 242, 194, 33, 6, 1, 214, 202, 236, 67, 33, 6, 1, 246, - 44, 33, 6, 1, 251, 84, 74, 33, 6, 1, 211, 8, 33, 6, 1, 235, 132, 33, 6, - 1, 232, 193, 33, 6, 1, 228, 183, 33, 6, 1, 215, 175, 33, 6, 1, 234, 54, - 33, 6, 1, 240, 161, 2, 242, 143, 33, 6, 1, 219, 253, 69, 33, 6, 1, 246, - 40, 33, 6, 1, 61, 33, 6, 1, 252, 83, 33, 6, 1, 213, 255, 33, 6, 1, 242, - 243, 33, 6, 1, 248, 98, 33, 6, 1, 236, 67, 33, 6, 1, 210, 74, 33, 6, 1, - 210, 94, 33, 6, 1, 74, 33, 6, 1, 219, 253, 74, 33, 6, 1, 176, 33, 6, 1, - 245, 182, 33, 6, 1, 245, 167, 33, 6, 1, 245, 158, 33, 6, 1, 78, 33, 6, 1, - 225, 224, 33, 6, 1, 245, 100, 33, 6, 1, 245, 90, 33, 6, 1, 217, 23, 33, - 6, 1, 69, 33, 6, 1, 245, 210, 33, 6, 1, 162, 33, 6, 1, 215, 179, 33, 6, - 1, 250, 139, 33, 6, 1, 220, 104, 33, 6, 1, 220, 67, 33, 6, 1, 242, 10, - 50, 33, 6, 1, 211, 27, 33, 6, 1, 219, 54, 50, 33, 6, 1, 76, 33, 6, 1, - 210, 212, 33, 6, 1, 192, 33, 4, 1, 61, 33, 4, 1, 252, 83, 33, 4, 1, 213, - 255, 33, 4, 1, 242, 243, 33, 4, 1, 248, 98, 33, 4, 1, 236, 67, 33, 4, 1, - 210, 74, 33, 4, 1, 210, 94, 33, 4, 1, 74, 33, 4, 1, 219, 253, 74, 33, 4, - 1, 176, 33, 4, 1, 245, 182, 33, 4, 1, 245, 167, 33, 4, 1, 245, 158, 33, - 4, 1, 78, 33, 4, 1, 225, 224, 33, 4, 1, 245, 100, 33, 4, 1, 245, 90, 33, - 4, 1, 217, 23, 33, 4, 1, 69, 33, 4, 1, 245, 210, 33, 4, 1, 162, 33, 4, 1, - 215, 179, 33, 4, 1, 250, 139, 33, 4, 1, 220, 104, 33, 4, 1, 220, 67, 33, - 4, 1, 242, 10, 50, 33, 4, 1, 211, 27, 33, 4, 1, 219, 54, 50, 33, 4, 1, - 76, 33, 4, 1, 210, 212, 33, 4, 1, 192, 33, 4, 1, 236, 68, 2, 242, 143, - 33, 4, 1, 235, 196, 33, 4, 1, 247, 170, 33, 4, 1, 242, 194, 33, 4, 1, - 214, 202, 236, 67, 33, 4, 1, 246, 44, 33, 4, 1, 251, 84, 74, 33, 4, 1, - 211, 8, 33, 4, 1, 235, 132, 33, 4, 1, 232, 193, 33, 4, 1, 228, 183, 33, - 4, 1, 215, 175, 33, 4, 1, 234, 54, 33, 4, 1, 240, 161, 2, 242, 143, 33, - 4, 1, 219, 253, 69, 33, 4, 1, 246, 40, 33, 6, 1, 226, 205, 33, 4, 1, 226, - 205, 33, 6, 1, 211, 59, 33, 4, 1, 211, 59, 33, 6, 1, 235, 190, 76, 33, 4, - 1, 235, 190, 76, 33, 6, 1, 232, 198, 210, 183, 33, 4, 1, 232, 198, 210, - 183, 33, 6, 1, 235, 190, 232, 198, 210, 183, 33, 4, 1, 235, 190, 232, - 198, 210, 183, 33, 6, 1, 252, 1, 210, 183, 33, 4, 1, 252, 1, 210, 183, - 33, 6, 1, 235, 190, 252, 1, 210, 183, 33, 4, 1, 235, 190, 252, 1, 210, - 183, 33, 6, 1, 233, 239, 33, 4, 1, 233, 239, 33, 6, 1, 224, 164, 33, 4, - 1, 224, 164, 33, 6, 1, 244, 90, 33, 4, 1, 244, 90, 33, 6, 1, 235, 152, - 33, 4, 1, 235, 152, 33, 6, 1, 235, 153, 2, 52, 242, 144, 255, 23, 33, 4, - 1, 235, 153, 2, 52, 242, 144, 255, 23, 33, 6, 1, 214, 205, 33, 4, 1, 214, - 205, 33, 6, 1, 222, 187, 226, 205, 33, 4, 1, 222, 187, 226, 205, 33, 6, - 1, 226, 206, 2, 216, 66, 33, 4, 1, 226, 206, 2, 216, 66, 33, 6, 1, 226, - 144, 33, 4, 1, 226, 144, 33, 6, 1, 234, 12, 33, 4, 1, 234, 12, 33, 216, - 147, 50, 38, 33, 216, 66, 38, 33, 226, 69, 38, 33, 248, 162, 225, 21, 38, - 33, 224, 158, 225, 21, 38, 33, 225, 6, 38, 33, 240, 218, 216, 147, 50, - 38, 33, 230, 196, 50, 33, 6, 1, 219, 253, 240, 161, 2, 217, 78, 33, 4, 1, - 219, 253, 240, 161, 2, 217, 78, 33, 6, 1, 220, 148, 50, 33, 4, 1, 220, - 148, 50, 33, 6, 1, 245, 101, 2, 216, 115, 33, 4, 1, 245, 101, 2, 216, - 115, 33, 6, 1, 242, 244, 2, 214, 156, 33, 4, 1, 242, 244, 2, 214, 156, - 33, 6, 1, 242, 244, 2, 91, 33, 4, 1, 242, 244, 2, 91, 33, 6, 1, 242, 244, - 2, 230, 229, 103, 33, 4, 1, 242, 244, 2, 230, 229, 103, 33, 6, 1, 210, - 75, 2, 248, 47, 33, 4, 1, 210, 75, 2, 248, 47, 33, 6, 1, 210, 95, 2, 248, - 47, 33, 4, 1, 210, 95, 2, 248, 47, 33, 6, 1, 235, 19, 2, 248, 47, 33, 4, - 1, 235, 19, 2, 248, 47, 33, 6, 1, 235, 19, 2, 67, 91, 33, 4, 1, 235, 19, - 2, 67, 91, 33, 6, 1, 235, 19, 2, 91, 33, 4, 1, 235, 19, 2, 91, 33, 6, 1, - 252, 132, 176, 33, 4, 1, 252, 132, 176, 33, 6, 1, 245, 159, 2, 248, 47, - 33, 4, 1, 245, 159, 2, 248, 47, 33, 6, 27, 245, 159, 242, 243, 33, 4, 27, - 245, 159, 242, 243, 33, 6, 1, 225, 225, 2, 230, 229, 103, 33, 4, 1, 225, - 225, 2, 230, 229, 103, 33, 6, 1, 255, 29, 162, 33, 4, 1, 255, 29, 162, - 33, 6, 1, 245, 91, 2, 248, 47, 33, 4, 1, 245, 91, 2, 248, 47, 33, 6, 1, - 217, 24, 2, 248, 47, 33, 4, 1, 217, 24, 2, 248, 47, 33, 6, 1, 218, 123, - 69, 33, 4, 1, 218, 123, 69, 33, 6, 1, 218, 123, 104, 2, 91, 33, 4, 1, - 218, 123, 104, 2, 91, 33, 6, 1, 242, 56, 2, 248, 47, 33, 4, 1, 242, 56, - 2, 248, 47, 33, 6, 27, 217, 24, 215, 179, 33, 4, 27, 217, 24, 215, 179, - 33, 6, 1, 250, 140, 2, 248, 47, 33, 4, 1, 250, 140, 2, 248, 47, 33, 6, 1, - 250, 140, 2, 67, 91, 33, 4, 1, 250, 140, 2, 67, 91, 33, 6, 1, 220, 35, - 33, 4, 1, 220, 35, 33, 6, 1, 255, 29, 250, 139, 33, 4, 1, 255, 29, 250, - 139, 33, 6, 1, 255, 29, 250, 140, 2, 248, 47, 33, 4, 1, 255, 29, 250, - 140, 2, 248, 47, 33, 1, 226, 62, 33, 6, 1, 210, 75, 2, 251, 154, 33, 4, - 1, 210, 75, 2, 251, 154, 33, 6, 1, 235, 19, 2, 103, 33, 4, 1, 235, 19, 2, - 103, 33, 6, 1, 245, 183, 2, 217, 78, 33, 4, 1, 245, 183, 2, 217, 78, 33, - 6, 1, 245, 159, 2, 103, 33, 4, 1, 245, 159, 2, 103, 33, 6, 1, 245, 159, - 2, 217, 78, 33, 4, 1, 245, 159, 2, 217, 78, 33, 6, 1, 234, 133, 250, 139, - 33, 4, 1, 234, 133, 250, 139, 33, 6, 1, 245, 168, 2, 217, 78, 33, 4, 1, - 245, 168, 2, 217, 78, 33, 4, 1, 226, 62, 33, 6, 1, 116, 2, 251, 154, 33, - 4, 1, 116, 2, 251, 154, 33, 6, 1, 116, 2, 248, 9, 33, 4, 1, 116, 2, 248, - 9, 33, 6, 27, 116, 236, 67, 33, 4, 27, 116, 236, 67, 33, 6, 1, 236, 68, - 2, 251, 154, 33, 4, 1, 236, 68, 2, 251, 154, 33, 6, 1, 221, 197, 33, 4, - 1, 221, 197, 33, 6, 1, 221, 198, 2, 248, 9, 33, 4, 1, 221, 198, 2, 248, - 9, 33, 6, 1, 210, 75, 2, 248, 9, 33, 4, 1, 210, 75, 2, 248, 9, 33, 6, 1, - 210, 95, 2, 248, 9, 33, 4, 1, 210, 95, 2, 248, 9, 33, 6, 1, 255, 29, 246, - 44, 33, 4, 1, 255, 29, 246, 44, 33, 6, 1, 240, 161, 2, 231, 237, 33, 4, - 1, 240, 161, 2, 231, 237, 33, 6, 1, 240, 161, 2, 248, 9, 33, 4, 1, 240, - 161, 2, 248, 9, 33, 6, 1, 144, 2, 248, 9, 33, 4, 1, 144, 2, 248, 9, 33, - 6, 1, 252, 142, 78, 33, 4, 1, 252, 142, 78, 33, 6, 1, 252, 142, 144, 2, - 248, 9, 33, 4, 1, 252, 142, 144, 2, 248, 9, 33, 6, 1, 160, 2, 248, 9, 33, - 4, 1, 160, 2, 248, 9, 33, 6, 1, 104, 2, 231, 237, 33, 4, 1, 104, 2, 231, - 237, 33, 6, 1, 104, 2, 248, 9, 33, 4, 1, 104, 2, 248, 9, 33, 6, 1, 104, - 2, 52, 142, 33, 4, 1, 104, 2, 52, 142, 33, 6, 1, 250, 140, 2, 248, 9, 33, - 4, 1, 250, 140, 2, 248, 9, 33, 6, 1, 242, 244, 2, 248, 47, 33, 4, 1, 242, - 244, 2, 248, 47, 33, 6, 1, 211, 28, 2, 248, 9, 33, 4, 1, 211, 28, 2, 248, - 9, 33, 6, 1, 242, 244, 2, 218, 105, 22, 103, 33, 4, 1, 242, 244, 2, 218, - 105, 22, 103, 33, 6, 1, 242, 56, 2, 103, 33, 4, 1, 242, 56, 2, 103, 33, - 6, 1, 242, 56, 2, 91, 33, 4, 1, 242, 56, 2, 91, 33, 6, 1, 234, 20, 248, - 98, 33, 4, 1, 234, 20, 248, 98, 33, 6, 1, 234, 20, 247, 170, 33, 4, 1, - 234, 20, 247, 170, 33, 6, 1, 234, 20, 210, 27, 33, 4, 1, 234, 20, 210, - 27, 33, 6, 1, 234, 20, 246, 38, 33, 4, 1, 234, 20, 246, 38, 33, 6, 1, - 234, 20, 232, 193, 33, 4, 1, 234, 20, 232, 193, 33, 6, 1, 234, 20, 228, - 183, 33, 4, 1, 234, 20, 228, 183, 33, 6, 1, 234, 20, 219, 111, 33, 4, 1, - 234, 20, 219, 111, 33, 6, 1, 234, 20, 216, 61, 33, 4, 1, 234, 20, 216, - 61, 33, 6, 1, 223, 52, 210, 94, 33, 4, 1, 223, 52, 210, 94, 33, 6, 1, - 245, 183, 2, 103, 33, 4, 1, 245, 183, 2, 103, 33, 6, 1, 233, 4, 33, 4, 1, - 233, 4, 33, 6, 1, 223, 42, 33, 4, 1, 223, 42, 33, 6, 1, 211, 92, 33, 4, - 1, 211, 92, 33, 6, 1, 224, 91, 33, 4, 1, 224, 91, 33, 6, 1, 212, 22, 33, - 4, 1, 212, 22, 33, 6, 1, 254, 175, 176, 33, 4, 1, 254, 175, 176, 33, 6, - 1, 245, 183, 2, 230, 229, 103, 33, 4, 1, 245, 183, 2, 230, 229, 103, 33, - 6, 1, 245, 159, 2, 230, 229, 103, 33, 4, 1, 245, 159, 2, 230, 229, 103, - 33, 6, 1, 225, 225, 2, 248, 47, 33, 4, 1, 225, 225, 2, 248, 47, 33, 6, 1, - 220, 36, 2, 248, 47, 33, 4, 1, 220, 36, 2, 248, 47, 150, 6, 1, 253, 172, - 150, 6, 1, 252, 47, 150, 6, 1, 242, 210, 150, 6, 1, 248, 229, 150, 6, 1, - 245, 221, 150, 6, 1, 210, 116, 150, 6, 1, 245, 205, 150, 6, 1, 245, 73, - 150, 6, 1, 112, 150, 6, 1, 210, 74, 150, 6, 1, 235, 234, 150, 6, 1, 232, - 196, 150, 6, 1, 211, 160, 150, 6, 1, 251, 41, 150, 6, 1, 234, 171, 150, - 6, 1, 241, 75, 150, 6, 1, 235, 147, 150, 6, 1, 242, 253, 150, 6, 1, 250, - 134, 150, 6, 1, 231, 63, 150, 6, 1, 211, 8, 150, 6, 1, 228, 44, 150, 6, - 1, 220, 104, 150, 6, 1, 213, 138, 150, 6, 1, 250, 165, 150, 6, 1, 225, - 208, 150, 6, 1, 235, 116, 150, 6, 1, 205, 150, 6, 1, 221, 163, 150, 6, 1, - 213, 179, 150, 6, 1, 216, 63, 150, 6, 1, 223, 98, 150, 6, 1, 249, 246, - 150, 6, 1, 210, 249, 150, 6, 1, 225, 49, 150, 6, 1, 234, 182, 150, 6, 1, - 226, 226, 150, 6, 1, 244, 150, 150, 58, 1, 43, 163, 222, 236, 150, 254, - 65, 150, 245, 162, 79, 150, 245, 39, 79, 150, 249, 227, 150, 224, 16, 79, - 150, 255, 30, 79, 150, 4, 1, 253, 172, 150, 4, 1, 252, 47, 150, 4, 1, - 242, 210, 150, 4, 1, 248, 229, 150, 4, 1, 245, 221, 150, 4, 1, 210, 116, - 150, 4, 1, 245, 205, 150, 4, 1, 245, 73, 150, 4, 1, 112, 150, 4, 1, 210, - 74, 150, 4, 1, 235, 234, 150, 4, 1, 232, 196, 150, 4, 1, 211, 160, 150, - 4, 1, 251, 41, 150, 4, 1, 234, 171, 150, 4, 1, 241, 75, 150, 4, 1, 235, - 147, 150, 4, 1, 242, 253, 150, 4, 1, 250, 134, 150, 4, 1, 231, 63, 150, - 4, 1, 211, 8, 150, 4, 1, 228, 44, 150, 4, 1, 220, 104, 150, 4, 1, 213, - 138, 150, 4, 1, 250, 165, 150, 4, 1, 225, 208, 150, 4, 1, 235, 116, 150, - 4, 1, 205, 150, 4, 1, 221, 163, 150, 4, 1, 213, 179, 150, 4, 1, 216, 63, - 150, 4, 1, 223, 98, 150, 4, 1, 249, 246, 150, 4, 1, 210, 249, 150, 4, 1, - 225, 49, 150, 4, 1, 234, 182, 150, 4, 1, 226, 226, 150, 4, 1, 244, 150, - 150, 4, 27, 245, 222, 210, 249, 150, 243, 236, 218, 131, 150, 240, 175, - 150, 246, 103, 50, 94, 255, 24, 245, 65, 94, 255, 24, 221, 164, 94, 255, - 24, 220, 90, 94, 255, 24, 210, 104, 224, 74, 94, 255, 24, 210, 104, 243, - 132, 94, 255, 24, 216, 76, 94, 255, 24, 223, 50, 94, 255, 24, 210, 103, - 94, 255, 24, 225, 249, 94, 255, 24, 211, 20, 94, 255, 24, 216, 215, 94, - 255, 24, 243, 48, 94, 255, 24, 243, 49, 230, 74, 94, 255, 24, 243, 46, - 94, 255, 24, 224, 75, 226, 20, 94, 255, 24, 216, 254, 243, 63, 94, 255, - 24, 225, 230, 94, 255, 24, 253, 208, 242, 48, 94, 255, 24, 230, 84, 94, - 255, 24, 231, 213, 94, 255, 24, 231, 54, 94, 255, 24, 231, 55, 234, 183, - 94, 255, 24, 248, 171, 94, 255, 24, 224, 86, 94, 255, 24, 216, 254, 224, - 70, 94, 255, 24, 211, 30, 252, 48, 210, 230, 94, 255, 24, 226, 211, 94, - 255, 24, 236, 26, 94, 255, 24, 248, 78, 94, 255, 24, 210, 33, 94, 164, - 231, 148, 250, 43, 94, 225, 14, 220, 38, 94, 225, 14, 242, 1, 221, 164, - 94, 225, 14, 242, 1, 225, 243, 94, 225, 14, 242, 1, 224, 79, 94, 225, 14, - 241, 165, 94, 225, 14, 215, 177, 94, 225, 14, 221, 164, 94, 225, 14, 225, - 243, 94, 225, 14, 224, 79, 94, 225, 14, 241, 68, 94, 225, 14, 241, 69, - 242, 3, 31, 214, 3, 94, 225, 14, 224, 20, 94, 225, 14, 248, 216, 177, - 231, 176, 94, 225, 14, 231, 43, 94, 224, 144, 231, 173, 94, 225, 14, 223, - 172, 94, 224, 144, 225, 251, 94, 225, 14, 220, 23, 247, 128, 94, 225, 14, - 219, 161, 247, 128, 94, 224, 144, 219, 55, 225, 245, 94, 164, 214, 160, - 247, 128, 94, 164, 232, 114, 247, 128, 94, 224, 144, 227, 199, 242, 47, - 94, 225, 14, 224, 80, 224, 74, 94, 1, 254, 179, 94, 1, 252, 36, 94, 1, - 242, 208, 94, 1, 248, 197, 94, 1, 241, 245, 94, 1, 214, 3, 94, 1, 210, - 97, 94, 1, 241, 204, 94, 1, 216, 231, 94, 1, 210, 233, 94, 1, 40, 235, 0, - 94, 1, 235, 0, 94, 1, 233, 100, 94, 1, 40, 231, 70, 94, 1, 231, 70, 94, - 1, 40, 227, 198, 94, 1, 227, 198, 94, 1, 221, 251, 94, 1, 253, 170, 94, - 1, 40, 225, 224, 94, 1, 225, 224, 94, 1, 40, 215, 180, 94, 1, 215, 180, - 94, 1, 224, 42, 94, 1, 223, 70, 94, 1, 220, 22, 94, 1, 217, 39, 94, 27, - 211, 6, 52, 214, 3, 94, 27, 211, 6, 214, 4, 210, 233, 94, 27, 211, 6, 52, - 210, 233, 94, 224, 144, 243, 48, 94, 224, 144, 243, 46, 9, 54, 50, 9, 5, - 221, 244, 9, 244, 38, 231, 159, 9, 5, 222, 25, 9, 5, 221, 247, 254, 45, - 249, 117, 222, 195, 254, 45, 244, 12, 222, 195, 9, 223, 137, 254, 45, - 225, 186, 230, 198, 50, 254, 45, 225, 186, 216, 249, 216, 149, 50, 254, - 230, 50, 9, 249, 227, 9, 248, 158, 220, 139, 9, 225, 16, 213, 241, 50, 9, - 5, 230, 179, 9, 5, 222, 5, 254, 181, 212, 45, 9, 5, 254, 181, 253, 229, - 9, 5, 223, 170, 254, 180, 9, 5, 223, 178, 254, 161, 254, 112, 9, 5, 217, - 71, 9, 4, 125, 217, 81, 9, 4, 125, 27, 109, 2, 233, 109, 2, 211, 43, 9, - 4, 125, 210, 108, 9, 4, 244, 173, 9, 4, 248, 192, 9, 4, 234, 211, 9, 220, - 152, 9, 1, 79, 9, 215, 212, 59, 224, 144, 79, 9, 224, 16, 79, 9, 1, 234, - 215, 211, 43, 9, 1, 242, 26, 9, 1, 109, 2, 231, 233, 48, 9, 1, 109, 2, - 182, 48, 9, 1, 212, 31, 2, 182, 48, 9, 1, 109, 2, 182, 51, 9, 1, 77, 2, - 182, 48, 9, 1, 254, 179, 9, 1, 252, 62, 9, 1, 217, 9, 231, 169, 9, 1, - 217, 8, 9, 1, 216, 193, 9, 1, 235, 129, 9, 1, 242, 44, 9, 1, 234, 135, 9, - 1, 248, 203, 9, 1, 216, 203, 9, 1, 223, 98, 9, 1, 210, 108, 9, 1, 221, - 168, 9, 1, 220, 61, 9, 1, 222, 28, 9, 1, 248, 224, 9, 1, 217, 81, 9, 1, - 210, 111, 9, 1, 254, 205, 9, 1, 242, 251, 9, 1, 234, 181, 2, 113, 170, - 48, 9, 1, 234, 181, 2, 134, 170, 51, 9, 1, 244, 176, 77, 2, 235, 200, - 214, 105, 9, 1, 244, 176, 77, 2, 113, 170, 48, 9, 1, 244, 176, 77, 2, - 134, 170, 48, 9, 217, 44, 9, 1, 244, 150, 9, 1, 224, 84, 9, 1, 235, 0, 9, - 1, 233, 108, 9, 1, 231, 83, 9, 1, 228, 67, 9, 1, 241, 225, 9, 1, 212, 30, - 9, 1, 109, 231, 197, 9, 1, 211, 43, 9, 244, 171, 9, 248, 190, 9, 234, - 209, 9, 244, 173, 9, 248, 192, 9, 234, 211, 9, 220, 95, 9, 218, 46, 9, - 231, 231, 48, 9, 182, 48, 9, 182, 51, 9, 218, 66, 254, 179, 9, 235, 200, - 248, 192, 9, 164, 228, 68, 242, 225, 9, 209, 255, 9, 25, 5, 4, 214, 106, - 48, 9, 25, 5, 235, 200, 4, 214, 106, 48, 9, 25, 5, 59, 51, 9, 223, 52, - 248, 192, 9, 244, 174, 2, 113, 247, 126, 9, 212, 32, 182, 51, 254, 45, - 21, 210, 86, 254, 45, 21, 111, 254, 45, 21, 105, 254, 45, 21, 158, 254, - 45, 21, 161, 254, 45, 21, 190, 254, 45, 21, 195, 254, 45, 21, 199, 254, - 45, 21, 196, 254, 45, 21, 201, 9, 225, 185, 50, 9, 248, 91, 220, 139, 9, - 216, 147, 220, 139, 9, 244, 89, 225, 12, 218, 158, 9, 1, 247, 127, 252, - 62, 9, 1, 247, 127, 224, 84, 9, 1, 218, 24, 254, 179, 9, 1, 109, 212, 46, - 9, 1, 109, 2, 212, 32, 182, 48, 9, 1, 109, 2, 212, 32, 182, 51, 9, 1, - 125, 242, 26, 9, 1, 125, 182, 254, 179, 9, 1, 125, 182, 212, 30, 9, 1, - 104, 2, 182, 48, 9, 1, 125, 182, 211, 43, 9, 1, 215, 149, 9, 1, 215, 147, - 9, 1, 252, 72, 9, 1, 217, 9, 2, 222, 236, 9, 1, 217, 9, 2, 134, 170, 72, - 246, 111, 9, 1, 225, 208, 9, 1, 217, 6, 9, 1, 252, 60, 9, 1, 122, 2, 182, - 48, 9, 1, 122, 2, 113, 170, 67, 48, 9, 1, 227, 157, 9, 1, 246, 51, 9, 1, - 122, 2, 134, 170, 48, 9, 1, 217, 27, 9, 1, 217, 25, 9, 1, 248, 138, 9, 1, - 248, 204, 2, 222, 236, 9, 1, 248, 204, 2, 59, 51, 9, 1, 248, 204, 2, 59, - 252, 51, 22, 4, 217, 81, 9, 1, 248, 209, 9, 1, 248, 140, 9, 1, 246, 78, - 9, 1, 248, 204, 2, 134, 170, 72, 246, 111, 9, 1, 248, 204, 2, 244, 19, - 170, 48, 9, 1, 222, 173, 9, 1, 223, 99, 2, 4, 214, 105, 9, 1, 223, 99, 2, - 222, 236, 9, 1, 223, 99, 2, 59, 51, 9, 1, 223, 99, 2, 4, 214, 106, 51, 9, - 1, 223, 99, 2, 59, 252, 51, 22, 59, 48, 9, 1, 223, 99, 2, 113, 170, 48, - 9, 1, 235, 126, 9, 1, 223, 99, 2, 244, 19, 170, 48, 9, 1, 221, 169, 2, - 59, 252, 51, 22, 59, 48, 9, 1, 221, 169, 2, 134, 170, 51, 9, 1, 221, 169, - 2, 134, 170, 252, 51, 22, 134, 170, 48, 9, 1, 222, 29, 2, 113, 170, 51, - 9, 1, 222, 29, 2, 134, 170, 48, 9, 1, 217, 82, 2, 134, 170, 48, 9, 1, - 254, 206, 2, 134, 170, 48, 9, 1, 247, 127, 244, 150, 9, 1, 244, 151, 2, - 59, 230, 114, 51, 9, 1, 244, 151, 2, 59, 51, 9, 1, 213, 248, 9, 1, 244, - 151, 2, 134, 170, 51, 9, 1, 225, 206, 9, 1, 224, 85, 2, 59, 48, 9, 1, - 224, 85, 2, 134, 170, 48, 9, 1, 234, 180, 9, 1, 217, 251, 235, 0, 9, 1, - 235, 1, 2, 222, 236, 9, 1, 235, 1, 2, 59, 48, 9, 1, 229, 84, 9, 1, 235, - 1, 2, 134, 170, 51, 9, 1, 243, 129, 9, 1, 243, 130, 2, 222, 236, 9, 1, - 229, 7, 9, 1, 243, 130, 2, 113, 170, 51, 9, 1, 242, 108, 9, 1, 243, 130, - 2, 134, 170, 48, 9, 1, 233, 109, 2, 4, 214, 105, 9, 1, 233, 109, 2, 59, - 48, 9, 1, 233, 109, 2, 134, 170, 48, 9, 1, 233, 109, 2, 134, 170, 51, 9, - 1, 228, 68, 2, 59, 51, 9, 1, 228, 68, 242, 225, 9, 1, 222, 216, 9, 1, - 228, 68, 2, 222, 236, 9, 1, 228, 68, 2, 134, 170, 48, 9, 1, 241, 226, - 247, 149, 9, 1, 217, 28, 2, 59, 48, 9, 1, 241, 226, 2, 77, 48, 9, 1, 241, - 226, 242, 178, 9, 1, 241, 226, 242, 179, 2, 182, 48, 9, 1, 217, 9, 231, - 170, 242, 178, 9, 1, 212, 31, 2, 222, 236, 9, 1, 234, 79, 226, 238, 9, 1, - 226, 238, 9, 1, 69, 9, 1, 210, 212, 9, 1, 234, 79, 210, 212, 9, 1, 212, - 31, 2, 113, 170, 48, 9, 1, 213, 255, 9, 1, 244, 176, 211, 43, 9, 1, 77, - 2, 217, 78, 9, 1, 77, 2, 4, 214, 105, 9, 1, 212, 31, 2, 59, 48, 9, 1, 76, - 9, 1, 77, 2, 134, 170, 51, 9, 1, 77, 252, 140, 9, 1, 77, 252, 141, 2, - 182, 48, 9, 243, 236, 218, 131, 9, 1, 254, 252, 9, 4, 125, 27, 222, 29, - 2, 233, 109, 2, 109, 231, 197, 9, 4, 125, 27, 224, 85, 2, 233, 109, 2, - 109, 231, 197, 9, 4, 125, 66, 65, 17, 9, 4, 125, 233, 109, 254, 179, 9, - 4, 125, 235, 129, 9, 4, 125, 134, 247, 126, 9, 4, 125, 221, 168, 9, 245, - 151, 64, 253, 174, 9, 218, 154, 64, 222, 140, 245, 183, 241, 162, 9, 4, - 125, 222, 185, 210, 86, 9, 4, 125, 214, 159, 223, 118, 210, 86, 9, 4, - 125, 247, 127, 241, 243, 64, 234, 135, 9, 4, 125, 66, 53, 17, 9, 4, 121, - 221, 168, 9, 4, 125, 231, 232, 9, 4, 212, 30, 9, 4, 211, 43, 9, 4, 125, - 211, 43, 9, 4, 125, 228, 67, 9, 225, 44, 64, 222, 15, 9, 245, 160, 250, - 183, 121, 218, 131, 9, 245, 160, 250, 183, 125, 218, 131, 9, 222, 185, - 125, 218, 132, 2, 244, 112, 250, 182, 9, 4, 121, 231, 83, 9, 1, 248, 204, - 2, 235, 200, 214, 105, 9, 1, 223, 99, 2, 235, 200, 214, 105, 245, 30, - 254, 45, 21, 210, 86, 245, 30, 254, 45, 21, 111, 245, 30, 254, 45, 21, - 105, 245, 30, 254, 45, 21, 158, 245, 30, 254, 45, 21, 161, 245, 30, 254, - 45, 21, 190, 245, 30, 254, 45, 21, 195, 245, 30, 254, 45, 21, 199, 245, - 30, 254, 45, 21, 196, 245, 30, 254, 45, 21, 201, 9, 1, 220, 62, 2, 59, - 51, 9, 1, 248, 225, 2, 59, 51, 9, 1, 242, 252, 2, 59, 51, 9, 5, 219, 160, - 254, 134, 9, 5, 219, 160, 224, 238, 231, 63, 9, 1, 241, 226, 2, 235, 200, - 214, 105, 183, 245, 151, 64, 226, 18, 183, 218, 20, 243, 236, 218, 131, - 183, 218, 68, 243, 236, 218, 131, 183, 218, 20, 249, 234, 183, 218, 68, - 249, 234, 183, 203, 249, 234, 183, 249, 235, 219, 108, 233, 52, 183, 249, - 235, 219, 108, 222, 254, 183, 218, 20, 249, 235, 219, 108, 233, 52, 183, - 218, 68, 249, 235, 219, 108, 222, 254, 183, 249, 188, 183, 242, 8, 226, - 254, 183, 242, 8, 231, 41, 183, 242, 8, 253, 226, 183, 255, 30, 79, 183, - 1, 254, 183, 183, 1, 218, 24, 254, 183, 183, 1, 252, 33, 183, 1, 243, - 120, 183, 1, 243, 121, 243, 98, 183, 1, 248, 200, 183, 1, 247, 127, 248, - 201, 222, 232, 183, 1, 241, 245, 183, 1, 212, 30, 183, 1, 210, 108, 183, - 1, 241, 202, 183, 1, 216, 227, 183, 1, 216, 228, 243, 98, 183, 1, 210, - 199, 183, 1, 210, 200, 241, 245, 183, 1, 234, 231, 183, 1, 233, 107, 183, - 1, 230, 195, 183, 1, 227, 198, 183, 1, 220, 145, 183, 1, 40, 220, 145, - 183, 1, 76, 183, 1, 225, 224, 183, 1, 223, 52, 225, 224, 183, 1, 222, 26, - 183, 1, 224, 78, 183, 1, 222, 232, 183, 1, 220, 22, 183, 1, 217, 37, 183, - 1, 225, 172, 252, 20, 183, 1, 225, 172, 242, 249, 183, 1, 225, 172, 248, - 28, 183, 224, 154, 48, 183, 224, 154, 51, 183, 224, 154, 246, 125, 183, - 210, 17, 48, 183, 210, 17, 51, 183, 210, 17, 246, 125, 183, 223, 134, 48, - 183, 223, 134, 51, 183, 246, 126, 210, 24, 241, 51, 183, 246, 126, 210, - 24, 254, 113, 183, 241, 248, 48, 183, 241, 248, 51, 183, 241, 247, 246, - 125, 183, 245, 87, 48, 183, 245, 87, 51, 183, 222, 109, 183, 244, 144, - 247, 128, 183, 223, 251, 183, 222, 136, 183, 113, 67, 170, 48, 183, 113, - 67, 170, 51, 183, 134, 170, 48, 183, 134, 170, 51, 183, 226, 252, 232, - 220, 48, 183, 226, 252, 232, 220, 51, 183, 230, 61, 183, 252, 139, 183, - 1, 219, 51, 210, 80, 183, 1, 219, 51, 234, 128, 183, 1, 219, 51, 244, - 162, 9, 1, 252, 63, 2, 134, 170, 241, 1, 51, 9, 1, 252, 63, 2, 59, 252, - 51, 22, 134, 170, 48, 9, 1, 252, 63, 2, 134, 170, 225, 10, 214, 153, 51, - 9, 1, 252, 63, 2, 134, 170, 225, 10, 214, 153, 252, 51, 22, 113, 170, 48, - 9, 1, 252, 63, 2, 113, 170, 252, 51, 22, 59, 48, 9, 1, 252, 63, 2, 235, - 200, 4, 214, 106, 51, 9, 1, 252, 63, 2, 4, 214, 105, 9, 1, 122, 2, 113, - 170, 48, 9, 1, 122, 2, 134, 170, 225, 10, 214, 153, 51, 9, 1, 248, 204, - 2, 113, 170, 213, 189, 252, 51, 22, 4, 217, 81, 9, 1, 248, 204, 2, 235, - 200, 4, 214, 106, 51, 9, 1, 223, 99, 2, 91, 9, 1, 221, 169, 2, 244, 19, - 170, 48, 9, 1, 254, 206, 2, 113, 170, 48, 9, 1, 254, 206, 2, 134, 170, - 225, 10, 246, 112, 48, 9, 1, 254, 206, 2, 113, 170, 213, 189, 48, 9, 1, - 244, 151, 2, 113, 170, 51, 9, 1, 244, 151, 2, 134, 170, 225, 10, 214, - 153, 51, 9, 1, 234, 181, 2, 59, 48, 9, 1, 234, 181, 2, 134, 170, 48, 9, - 1, 234, 181, 2, 134, 170, 225, 10, 214, 153, 51, 9, 1, 66, 2, 59, 48, 9, - 1, 66, 2, 59, 51, 9, 1, 228, 68, 2, 113, 170, 51, 9, 1, 228, 68, 2, 4, - 217, 81, 9, 1, 228, 68, 2, 4, 214, 105, 9, 1, 233, 109, 2, 130, 9, 1, - 223, 99, 2, 113, 170, 213, 189, 48, 9, 1, 223, 99, 2, 182, 48, 9, 1, 221, - 169, 2, 113, 170, 213, 189, 48, 9, 1, 122, 2, 4, 9, 1, 217, 82, 51, 9, 1, - 122, 2, 4, 9, 1, 217, 82, 22, 113, 247, 126, 9, 1, 221, 169, 2, 4, 9, 1, - 217, 82, 22, 113, 247, 126, 9, 1, 223, 99, 2, 4, 9, 1, 217, 82, 22, 113, - 247, 126, 9, 1, 122, 2, 4, 9, 1, 217, 82, 48, 9, 1, 109, 2, 245, 30, 254, - 45, 21, 113, 48, 9, 1, 109, 2, 245, 30, 254, 45, 21, 134, 48, 9, 1, 244, - 176, 77, 2, 245, 30, 254, 45, 21, 113, 48, 9, 1, 244, 176, 77, 2, 245, - 30, 254, 45, 21, 134, 48, 9, 1, 244, 176, 77, 2, 245, 30, 254, 45, 21, - 244, 19, 51, 9, 1, 212, 31, 2, 245, 30, 254, 45, 21, 113, 48, 9, 1, 212, - 31, 2, 245, 30, 254, 45, 21, 134, 48, 9, 1, 77, 252, 141, 2, 245, 30, - 254, 45, 21, 113, 48, 9, 1, 77, 252, 141, 2, 245, 30, 254, 45, 21, 134, - 48, 9, 1, 122, 2, 245, 30, 254, 45, 21, 244, 19, 51, 9, 1, 221, 169, 2, - 245, 30, 254, 45, 21, 244, 19, 48, 9, 1, 221, 169, 2, 235, 200, 214, 105, - 9, 1, 235, 1, 2, 113, 170, 48, 216, 206, 1, 242, 53, 216, 206, 1, 220, - 70, 216, 206, 1, 228, 66, 216, 206, 1, 223, 187, 216, 206, 1, 252, 197, - 216, 206, 1, 233, 1, 216, 206, 1, 235, 14, 216, 206, 1, 254, 168, 216, - 206, 1, 214, 25, 216, 206, 1, 231, 82, 216, 206, 1, 244, 202, 216, 206, - 1, 248, 31, 216, 206, 1, 216, 208, 216, 206, 1, 233, 137, 216, 206, 1, - 243, 138, 216, 206, 1, 242, 184, 216, 206, 1, 221, 167, 216, 206, 1, 248, - 156, 216, 206, 1, 210, 100, 216, 206, 1, 217, 38, 216, 206, 1, 211, 103, - 216, 206, 1, 225, 237, 216, 206, 1, 235, 134, 216, 206, 1, 250, 142, 216, - 206, 1, 215, 156, 216, 206, 1, 241, 195, 216, 206, 1, 234, 137, 216, 206, - 1, 216, 207, 216, 206, 1, 210, 115, 216, 206, 1, 220, 60, 216, 206, 1, - 222, 32, 216, 206, 1, 248, 227, 216, 206, 1, 112, 216, 206, 1, 210, 23, - 216, 206, 1, 254, 202, 216, 206, 1, 242, 250, 216, 206, 1, 224, 88, 216, - 206, 1, 212, 63, 216, 206, 255, 31, 216, 206, 255, 47, 216, 206, 240, - 121, 216, 206, 245, 216, 216, 206, 214, 222, 216, 206, 226, 186, 216, - 206, 245, 224, 216, 206, 245, 24, 216, 206, 226, 251, 216, 206, 227, 3, - 216, 206, 218, 46, 216, 206, 1, 229, 230, 228, 142, 21, 210, 86, 228, - 142, 21, 111, 228, 142, 21, 105, 228, 142, 21, 158, 228, 142, 21, 161, - 228, 142, 21, 190, 228, 142, 21, 195, 228, 142, 21, 199, 228, 142, 21, - 196, 228, 142, 21, 201, 228, 142, 1, 61, 228, 142, 1, 245, 217, 228, 142, - 1, 74, 228, 142, 1, 76, 228, 142, 1, 69, 228, 142, 1, 226, 187, 228, 142, - 1, 78, 228, 142, 1, 248, 217, 228, 142, 1, 230, 30, 228, 142, 1, 252, - 199, 228, 142, 1, 191, 228, 142, 1, 217, 106, 228, 142, 1, 235, 147, 228, - 142, 1, 250, 165, 228, 142, 1, 248, 229, 228, 142, 1, 205, 228, 142, 1, - 222, 181, 228, 142, 1, 206, 228, 142, 1, 243, 86, 228, 142, 1, 244, 204, - 228, 142, 1, 176, 228, 142, 1, 233, 141, 228, 142, 1, 229, 234, 211, 223, - 228, 142, 1, 186, 228, 142, 1, 227, 169, 228, 142, 1, 198, 228, 142, 1, - 162, 228, 142, 1, 212, 65, 228, 142, 1, 192, 228, 142, 1, 227, 170, 211, - 223, 228, 142, 1, 235, 67, 235, 147, 228, 142, 1, 235, 67, 250, 165, 228, - 142, 1, 235, 67, 205, 228, 142, 38, 219, 253, 125, 216, 31, 228, 142, 38, - 219, 253, 121, 216, 31, 228, 142, 38, 219, 253, 222, 231, 216, 31, 228, - 142, 38, 200, 248, 46, 216, 31, 228, 142, 38, 200, 125, 216, 31, 228, - 142, 38, 200, 121, 216, 31, 228, 142, 38, 200, 222, 231, 216, 31, 228, - 142, 38, 229, 198, 79, 228, 142, 38, 52, 59, 48, 228, 142, 125, 138, 254, - 65, 228, 142, 121, 138, 254, 65, 228, 142, 16, 226, 188, 248, 58, 228, - 142, 16, 243, 85, 228, 142, 249, 227, 228, 142, 245, 39, 79, 228, 142, - 233, 114, 221, 254, 1, 254, 185, 221, 254, 1, 251, 236, 221, 254, 1, 243, - 119, 221, 254, 1, 248, 202, 221, 254, 1, 235, 158, 221, 254, 1, 252, 197, - 221, 254, 1, 210, 89, 221, 254, 1, 235, 166, 221, 254, 1, 216, 68, 221, - 254, 1, 210, 182, 221, 254, 1, 235, 15, 221, 254, 1, 233, 134, 221, 254, - 1, 230, 195, 221, 254, 1, 227, 198, 221, 254, 1, 219, 158, 221, 254, 1, - 236, 6, 221, 254, 1, 244, 129, 221, 254, 1, 215, 182, 221, 254, 1, 224, - 13, 221, 254, 1, 222, 232, 221, 254, 1, 220, 87, 221, 254, 1, 217, 101, - 221, 254, 164, 236, 6, 221, 254, 164, 236, 5, 221, 254, 164, 226, 247, - 221, 254, 164, 248, 215, 221, 254, 58, 1, 245, 113, 210, 182, 221, 254, - 164, 245, 113, 210, 182, 221, 254, 25, 5, 200, 76, 221, 254, 25, 5, 76, - 221, 254, 25, 5, 226, 122, 255, 82, 221, 254, 25, 5, 200, 255, 82, 221, - 254, 25, 5, 255, 82, 221, 254, 25, 5, 226, 122, 61, 221, 254, 25, 5, 200, - 61, 221, 254, 25, 5, 61, 221, 254, 58, 1, 219, 253, 61, 221, 254, 25, 5, - 219, 253, 61, 221, 254, 25, 5, 200, 69, 221, 254, 25, 5, 69, 221, 254, - 58, 1, 74, 221, 254, 25, 5, 200, 74, 221, 254, 25, 5, 74, 221, 254, 25, - 5, 78, 221, 254, 25, 5, 218, 46, 221, 254, 164, 229, 97, 221, 254, 224, - 144, 229, 97, 221, 254, 224, 144, 254, 227, 221, 254, 224, 144, 254, 122, - 221, 254, 224, 144, 252, 122, 221, 254, 224, 144, 253, 209, 221, 254, - 224, 144, 220, 10, 221, 254, 255, 30, 79, 221, 254, 224, 144, 231, 73, - 224, 48, 221, 254, 224, 144, 210, 31, 221, 254, 224, 144, 224, 48, 221, - 254, 224, 144, 210, 114, 221, 254, 224, 144, 215, 90, 221, 254, 224, 144, - 254, 17, 221, 254, 224, 144, 219, 55, 231, 150, 221, 254, 224, 144, 254, - 108, 231, 187, 1, 242, 31, 231, 187, 1, 255, 34, 231, 187, 1, 254, 225, - 231, 187, 1, 255, 8, 231, 187, 1, 254, 218, 231, 187, 1, 214, 124, 231, - 187, 1, 253, 168, 231, 187, 1, 235, 166, 231, 187, 1, 253, 206, 231, 187, - 1, 254, 190, 231, 187, 1, 254, 195, 231, 187, 1, 254, 187, 231, 187, 1, - 254, 144, 231, 187, 1, 254, 131, 231, 187, 1, 253, 245, 231, 187, 1, 236, - 6, 231, 187, 1, 254, 80, 231, 187, 1, 253, 216, 231, 187, 1, 254, 53, - 231, 187, 1, 254, 49, 231, 187, 1, 253, 239, 231, 187, 1, 253, 214, 231, - 187, 1, 246, 63, 231, 187, 1, 235, 8, 231, 187, 1, 254, 205, 231, 187, - 254, 231, 79, 231, 187, 213, 136, 79, 231, 187, 243, 60, 79, 231, 187, - 224, 143, 9, 1, 252, 63, 2, 4, 214, 106, 51, 9, 1, 151, 2, 113, 170, 48, - 9, 1, 217, 82, 2, 113, 170, 48, 9, 1, 244, 151, 2, 59, 252, 51, 22, 134, - 170, 48, 9, 1, 224, 85, 2, 59, 51, 9, 1, 233, 109, 2, 52, 130, 9, 1, 66, - 2, 134, 170, 48, 9, 1, 77, 2, 113, 170, 252, 51, 22, 182, 48, 9, 1, 77, - 2, 113, 170, 252, 51, 22, 59, 48, 9, 1, 223, 99, 2, 232, 129, 9, 1, 212, - 31, 2, 59, 211, 231, 9, 1, 222, 203, 211, 43, 9, 249, 107, 244, 173, 9, - 249, 107, 248, 192, 9, 249, 107, 234, 211, 9, 249, 107, 244, 171, 9, 249, - 107, 248, 190, 9, 249, 107, 234, 209, 9, 138, 123, 59, 48, 9, 138, 113, - 170, 48, 9, 138, 232, 130, 48, 9, 138, 123, 59, 51, 9, 138, 113, 170, 51, - 9, 138, 232, 130, 51, 9, 204, 244, 171, 9, 204, 248, 190, 9, 204, 234, - 209, 9, 4, 125, 212, 30, 9, 244, 174, 2, 222, 236, 9, 244, 174, 2, 59, - 48, 9, 234, 212, 2, 59, 51, 9, 43, 254, 2, 48, 9, 44, 254, 2, 48, 9, 43, - 254, 2, 51, 9, 44, 254, 2, 51, 9, 52, 44, 254, 2, 48, 9, 52, 44, 254, 2, - 72, 2, 247, 128, 9, 44, 254, 2, 72, 2, 247, 128, 9, 248, 193, 2, 247, - 128, 84, 5, 235, 200, 251, 7, 84, 5, 251, 7, 84, 5, 254, 83, 84, 5, 213, - 147, 84, 1, 219, 253, 61, 84, 1, 61, 84, 1, 255, 82, 84, 1, 74, 84, 1, - 236, 40, 84, 1, 69, 84, 1, 214, 118, 84, 1, 149, 153, 84, 1, 149, 156, - 84, 1, 251, 10, 76, 84, 1, 219, 253, 76, 84, 1, 76, 84, 1, 254, 210, 84, - 1, 251, 10, 78, 84, 1, 219, 253, 78, 84, 1, 78, 84, 1, 253, 200, 84, 1, - 176, 84, 1, 234, 138, 84, 1, 243, 142, 84, 1, 243, 0, 84, 1, 229, 82, 84, - 1, 251, 41, 84, 1, 250, 165, 84, 1, 235, 147, 84, 1, 235, 120, 84, 1, - 227, 169, 84, 1, 215, 157, 84, 1, 215, 145, 84, 1, 248, 143, 84, 1, 248, - 127, 84, 1, 228, 115, 84, 1, 217, 106, 84, 1, 216, 209, 84, 1, 248, 229, - 84, 1, 248, 33, 84, 1, 198, 84, 1, 228, 97, 84, 1, 191, 84, 1, 225, 150, - 84, 1, 252, 199, 84, 1, 252, 26, 84, 1, 186, 84, 1, 192, 84, 1, 205, 84, - 1, 222, 181, 84, 1, 233, 141, 84, 1, 232, 190, 84, 1, 232, 181, 84, 1, - 214, 27, 84, 1, 220, 104, 84, 1, 218, 225, 84, 1, 206, 84, 1, 162, 84, - 25, 5, 226, 238, 84, 25, 5, 226, 185, 84, 5, 227, 209, 84, 5, 253, 183, - 84, 25, 5, 255, 82, 84, 25, 5, 74, 84, 25, 5, 236, 40, 84, 25, 5, 69, 84, - 25, 5, 214, 118, 84, 25, 5, 149, 153, 84, 25, 5, 149, 222, 182, 84, 25, - 5, 251, 10, 76, 84, 25, 5, 219, 253, 76, 84, 25, 5, 76, 84, 25, 5, 254, - 210, 84, 25, 5, 251, 10, 78, 84, 25, 5, 219, 253, 78, 84, 25, 5, 78, 84, - 25, 5, 253, 200, 84, 5, 213, 152, 84, 25, 5, 224, 188, 76, 84, 25, 5, - 253, 179, 84, 226, 208, 84, 218, 113, 5, 214, 216, 84, 218, 113, 5, 254, - 85, 84, 242, 144, 255, 23, 84, 255, 12, 255, 23, 84, 25, 5, 251, 10, 200, - 76, 84, 25, 5, 214, 214, 84, 25, 5, 214, 117, 84, 1, 224, 91, 84, 1, 234, - 121, 84, 1, 242, 233, 84, 1, 210, 116, 84, 1, 248, 132, 84, 1, 223, 42, - 84, 1, 244, 204, 84, 1, 210, 168, 84, 1, 149, 222, 182, 84, 1, 149, 232, - 191, 84, 25, 5, 149, 156, 84, 25, 5, 149, 232, 191, 84, 248, 186, 84, 52, - 248, 186, 84, 21, 210, 86, 84, 21, 111, 84, 21, 105, 84, 21, 158, 84, 21, - 161, 84, 21, 190, 84, 21, 195, 84, 21, 199, 84, 21, 196, 84, 21, 201, 84, - 255, 30, 50, 84, 5, 125, 219, 19, 247, 128, 84, 1, 251, 10, 61, 84, 1, - 226, 238, 84, 1, 226, 185, 84, 1, 253, 179, 84, 1, 214, 214, 84, 1, 214, - 117, 84, 1, 210, 82, 84, 1, 114, 192, 84, 1, 243, 36, 84, 1, 235, 102, - 84, 1, 242, 187, 218, 131, 84, 1, 248, 133, 84, 1, 252, 119, 146, 5, 251, - 7, 146, 5, 254, 83, 146, 5, 213, 147, 146, 1, 61, 146, 1, 255, 82, 146, - 1, 74, 146, 1, 236, 40, 146, 1, 69, 146, 1, 214, 118, 146, 1, 149, 153, - 146, 1, 149, 156, 146, 1, 76, 146, 1, 254, 210, 146, 1, 78, 146, 1, 253, - 200, 146, 1, 176, 146, 1, 234, 138, 146, 1, 243, 142, 146, 1, 243, 0, - 146, 1, 229, 82, 146, 1, 251, 41, 146, 1, 250, 165, 146, 1, 235, 147, - 146, 1, 235, 120, 146, 1, 227, 169, 146, 1, 215, 157, 146, 1, 215, 145, - 146, 1, 248, 143, 146, 1, 248, 127, 146, 1, 228, 115, 146, 1, 217, 106, - 146, 1, 216, 209, 146, 1, 248, 229, 146, 1, 248, 33, 146, 1, 198, 146, 1, - 191, 146, 1, 225, 150, 146, 1, 252, 199, 146, 1, 252, 26, 146, 1, 186, - 146, 1, 192, 146, 1, 205, 146, 1, 233, 141, 146, 1, 220, 104, 146, 1, - 218, 225, 146, 1, 206, 146, 1, 162, 146, 5, 227, 209, 146, 5, 253, 183, - 146, 25, 5, 255, 82, 146, 25, 5, 74, 146, 25, 5, 236, 40, 146, 25, 5, 69, - 146, 25, 5, 214, 118, 146, 25, 5, 149, 153, 146, 25, 5, 149, 222, 182, - 146, 25, 5, 76, 146, 25, 5, 254, 210, 146, 25, 5, 78, 146, 25, 5, 253, - 200, 146, 5, 213, 152, 146, 1, 234, 130, 217, 106, 146, 253, 201, 233, - 29, 79, 146, 1, 222, 181, 146, 1, 223, 42, 146, 1, 210, 168, 146, 1, 149, - 222, 182, 146, 1, 149, 232, 191, 146, 25, 5, 149, 156, 146, 25, 5, 149, - 232, 191, 146, 21, 210, 86, 146, 21, 111, 146, 21, 105, 146, 21, 158, - 146, 21, 161, 146, 21, 190, 146, 21, 195, 146, 21, 199, 146, 21, 196, - 146, 21, 201, 146, 1, 223, 191, 2, 230, 229, 248, 6, 146, 1, 223, 191, 2, - 232, 114, 248, 6, 146, 222, 120, 79, 146, 222, 120, 50, 146, 249, 106, - 227, 201, 111, 146, 249, 106, 227, 201, 105, 146, 249, 106, 227, 201, - 158, 146, 249, 106, 227, 201, 161, 146, 249, 106, 227, 201, 123, 233, 22, - 216, 202, 216, 197, 248, 56, 146, 249, 106, 248, 57, 219, 121, 146, 235, - 167, 146, 243, 110, 79, 185, 5, 255, 7, 251, 251, 185, 5, 251, 251, 185, - 5, 213, 147, 185, 1, 61, 185, 1, 255, 82, 185, 1, 74, 185, 1, 236, 40, - 185, 1, 69, 185, 1, 214, 118, 185, 1, 245, 217, 185, 1, 254, 210, 185, 1, - 226, 187, 185, 1, 253, 200, 185, 1, 176, 185, 1, 234, 138, 185, 1, 243, - 142, 185, 1, 243, 0, 185, 1, 229, 82, 185, 1, 251, 41, 185, 1, 250, 165, - 185, 1, 235, 147, 185, 1, 235, 120, 185, 1, 227, 169, 185, 1, 215, 157, - 185, 1, 215, 145, 185, 1, 248, 143, 185, 1, 248, 127, 185, 1, 228, 115, - 185, 1, 217, 106, 185, 1, 216, 209, 185, 1, 248, 229, 185, 1, 248, 33, - 185, 1, 198, 185, 1, 191, 185, 1, 225, 150, 185, 1, 252, 199, 185, 1, - 252, 26, 185, 1, 186, 185, 1, 192, 185, 1, 205, 185, 1, 233, 141, 185, 1, - 232, 190, 185, 1, 214, 27, 185, 1, 220, 104, 185, 1, 206, 185, 1, 162, - 185, 5, 227, 209, 185, 25, 5, 255, 82, 185, 25, 5, 74, 185, 25, 5, 236, - 40, 185, 25, 5, 69, 185, 25, 5, 214, 118, 185, 25, 5, 245, 217, 185, 25, - 5, 254, 210, 185, 25, 5, 226, 187, 185, 25, 5, 253, 200, 185, 5, 213, - 152, 185, 5, 214, 218, 185, 1, 234, 121, 185, 1, 242, 233, 185, 1, 210, - 116, 185, 1, 222, 181, 185, 1, 244, 204, 185, 21, 210, 86, 185, 21, 111, - 185, 21, 105, 185, 21, 158, 185, 21, 161, 185, 21, 190, 185, 21, 195, - 185, 21, 199, 185, 21, 196, 185, 21, 201, 185, 216, 75, 185, 255, 6, 185, - 235, 185, 185, 214, 146, 185, 245, 189, 226, 192, 185, 5, 211, 78, 171, - 5, 251, 7, 171, 5, 254, 83, 171, 5, 213, 147, 171, 1, 61, 171, 1, 255, - 82, 171, 1, 74, 171, 1, 236, 40, 171, 1, 69, 171, 1, 214, 118, 171, 1, - 149, 153, 171, 1, 149, 156, 171, 25, 251, 10, 76, 171, 1, 76, 171, 1, - 254, 210, 171, 25, 251, 10, 78, 171, 1, 78, 171, 1, 253, 200, 171, 1, - 176, 171, 1, 234, 138, 171, 1, 243, 142, 171, 1, 243, 0, 171, 1, 229, 82, - 171, 1, 251, 41, 171, 1, 250, 165, 171, 1, 235, 147, 171, 1, 235, 120, - 171, 1, 227, 169, 171, 1, 215, 157, 171, 1, 215, 145, 171, 1, 248, 143, - 171, 1, 248, 127, 171, 1, 228, 115, 171, 1, 217, 106, 171, 1, 216, 209, - 171, 1, 248, 229, 171, 1, 248, 33, 171, 1, 198, 171, 1, 191, 171, 1, 225, - 150, 171, 1, 252, 199, 171, 1, 252, 26, 171, 1, 186, 171, 1, 192, 171, 1, - 205, 171, 1, 233, 141, 171, 1, 232, 190, 171, 1, 214, 27, 171, 1, 220, - 104, 171, 1, 218, 225, 171, 1, 206, 171, 1, 162, 171, 5, 227, 209, 171, - 5, 253, 183, 171, 25, 5, 255, 82, 171, 25, 5, 74, 171, 25, 5, 236, 40, - 171, 25, 5, 69, 171, 25, 5, 214, 118, 171, 25, 5, 149, 153, 171, 25, 5, - 149, 222, 182, 171, 25, 5, 251, 10, 76, 171, 25, 5, 76, 171, 25, 5, 254, - 210, 171, 25, 5, 251, 10, 78, 171, 25, 5, 78, 171, 25, 5, 253, 200, 171, - 5, 213, 152, 171, 226, 208, 171, 1, 149, 222, 182, 171, 1, 149, 232, 191, - 171, 25, 5, 149, 156, 171, 25, 5, 149, 232, 191, 171, 21, 210, 86, 171, - 21, 111, 171, 21, 105, 171, 21, 158, 171, 21, 161, 171, 21, 190, 171, 21, - 195, 171, 21, 199, 171, 21, 196, 171, 21, 201, 171, 255, 30, 50, 171, - 222, 120, 50, 157, 5, 251, 7, 157, 5, 254, 83, 157, 5, 213, 147, 157, 1, - 61, 157, 1, 255, 82, 157, 1, 74, 157, 1, 236, 40, 157, 1, 69, 157, 1, - 214, 118, 157, 1, 149, 153, 157, 1, 149, 156, 157, 1, 76, 157, 1, 254, - 210, 157, 1, 78, 157, 1, 253, 200, 157, 1, 176, 157, 1, 234, 138, 157, 1, - 243, 142, 157, 1, 243, 0, 157, 1, 229, 82, 157, 1, 251, 41, 157, 1, 250, - 165, 157, 1, 235, 147, 157, 1, 235, 120, 157, 1, 227, 169, 157, 1, 215, - 157, 157, 1, 215, 145, 157, 1, 248, 143, 157, 1, 248, 127, 157, 1, 228, - 115, 157, 1, 217, 106, 157, 1, 216, 209, 157, 1, 248, 229, 157, 1, 248, - 33, 157, 1, 198, 157, 1, 191, 157, 1, 225, 150, 157, 1, 252, 199, 157, 1, - 252, 26, 157, 1, 186, 157, 1, 192, 157, 1, 205, 157, 1, 233, 141, 157, 1, - 232, 190, 157, 1, 214, 27, 157, 1, 220, 104, 157, 1, 218, 225, 157, 1, - 206, 157, 1, 162, 157, 5, 227, 209, 157, 5, 253, 183, 157, 25, 5, 255, - 82, 157, 25, 5, 74, 157, 25, 5, 236, 40, 157, 25, 5, 69, 157, 25, 5, 214, - 118, 157, 25, 5, 149, 153, 157, 25, 5, 149, 222, 182, 157, 25, 5, 76, - 157, 25, 5, 254, 210, 157, 25, 5, 78, 157, 25, 5, 253, 200, 157, 5, 213, - 152, 157, 254, 211, 233, 29, 79, 157, 253, 201, 233, 29, 79, 157, 1, 222, - 181, 157, 1, 223, 42, 157, 1, 210, 168, 157, 1, 149, 222, 182, 157, 1, - 149, 232, 191, 157, 25, 5, 149, 156, 157, 25, 5, 149, 232, 191, 157, 21, - 210, 86, 157, 21, 111, 157, 21, 105, 157, 21, 158, 157, 21, 161, 157, 21, - 190, 157, 21, 195, 157, 21, 199, 157, 21, 196, 157, 21, 201, 157, 235, - 167, 157, 1, 212, 65, 157, 244, 10, 123, 224, 24, 157, 244, 10, 123, 242, - 34, 157, 244, 10, 134, 224, 22, 157, 244, 10, 123, 219, 119, 157, 244, - 10, 123, 245, 196, 157, 244, 10, 134, 219, 118, 36, 5, 254, 83, 36, 5, - 213, 147, 36, 1, 61, 36, 1, 255, 82, 36, 1, 74, 36, 1, 236, 40, 36, 1, - 69, 36, 1, 214, 118, 36, 1, 76, 36, 1, 245, 217, 36, 1, 254, 210, 36, 1, - 78, 36, 1, 226, 187, 36, 1, 253, 200, 36, 1, 176, 36, 1, 229, 82, 36, 1, - 251, 41, 36, 1, 235, 147, 36, 1, 227, 169, 36, 1, 215, 157, 36, 1, 228, - 115, 36, 1, 217, 106, 36, 1, 198, 36, 1, 228, 97, 36, 1, 191, 36, 1, 186, - 36, 1, 192, 36, 1, 205, 36, 1, 222, 181, 36, 1, 233, 141, 36, 1, 232, - 190, 36, 1, 232, 181, 36, 1, 214, 27, 36, 1, 220, 104, 36, 1, 218, 225, - 36, 1, 206, 36, 1, 162, 36, 25, 5, 255, 82, 36, 25, 5, 74, 36, 25, 5, - 236, 40, 36, 25, 5, 69, 36, 25, 5, 214, 118, 36, 25, 5, 76, 36, 25, 5, - 245, 217, 36, 25, 5, 254, 210, 36, 25, 5, 78, 36, 25, 5, 226, 187, 36, - 25, 5, 253, 200, 36, 5, 213, 152, 36, 226, 208, 36, 253, 201, 233, 29, - 79, 36, 21, 210, 86, 36, 21, 111, 36, 21, 105, 36, 21, 158, 36, 21, 161, - 36, 21, 190, 36, 21, 195, 36, 21, 199, 36, 21, 196, 36, 21, 201, 36, 54, - 216, 248, 36, 54, 123, 240, 217, 36, 54, 123, 216, 148, 36, 248, 154, 50, - 36, 230, 140, 50, 36, 211, 45, 50, 36, 248, 95, 50, 36, 249, 147, 50, 36, - 253, 246, 72, 50, 36, 222, 120, 50, 36, 54, 50, 148, 5, 251, 7, 148, 5, - 254, 83, 148, 5, 213, 147, 148, 1, 61, 148, 1, 255, 82, 148, 1, 74, 148, - 1, 236, 40, 148, 1, 69, 148, 1, 214, 118, 148, 1, 149, 153, 148, 1, 149, - 156, 148, 1, 76, 148, 1, 245, 217, 148, 1, 254, 210, 148, 1, 78, 148, 1, - 226, 187, 148, 1, 253, 200, 148, 1, 176, 148, 1, 234, 138, 148, 1, 243, - 142, 148, 1, 243, 0, 148, 1, 229, 82, 148, 1, 251, 41, 148, 1, 250, 165, - 148, 1, 235, 147, 148, 1, 235, 120, 148, 1, 227, 169, 148, 1, 215, 157, - 148, 1, 215, 145, 148, 1, 248, 143, 148, 1, 248, 127, 148, 1, 228, 115, - 148, 1, 217, 106, 148, 1, 216, 209, 148, 1, 248, 229, 148, 1, 248, 33, - 148, 1, 198, 148, 1, 191, 148, 1, 225, 150, 148, 1, 252, 199, 148, 1, - 252, 26, 148, 1, 186, 148, 1, 192, 148, 1, 205, 148, 1, 222, 181, 148, 1, - 233, 141, 148, 1, 232, 190, 148, 1, 214, 27, 148, 1, 220, 104, 148, 1, - 218, 225, 148, 1, 206, 148, 1, 162, 148, 5, 253, 183, 148, 25, 5, 255, - 82, 148, 25, 5, 74, 148, 25, 5, 236, 40, 148, 25, 5, 69, 148, 25, 5, 214, - 118, 148, 25, 5, 149, 153, 148, 25, 5, 149, 222, 182, 148, 25, 5, 76, - 148, 25, 5, 245, 217, 148, 25, 5, 254, 210, 148, 25, 5, 78, 148, 25, 5, - 226, 187, 148, 25, 5, 253, 200, 148, 5, 213, 152, 148, 233, 29, 79, 148, - 254, 211, 233, 29, 79, 148, 1, 215, 184, 148, 1, 246, 46, 148, 1, 149, - 222, 182, 148, 1, 149, 232, 191, 148, 25, 5, 149, 156, 148, 25, 5, 149, - 232, 191, 148, 21, 210, 86, 148, 21, 111, 148, 21, 105, 148, 21, 158, - 148, 21, 161, 148, 21, 190, 148, 21, 195, 148, 21, 199, 148, 21, 196, - 148, 21, 201, 148, 244, 10, 21, 210, 87, 31, 226, 241, 224, 226, 64, 161, - 148, 244, 10, 21, 123, 31, 226, 241, 224, 226, 64, 161, 148, 244, 10, 21, - 113, 31, 226, 241, 224, 226, 64, 161, 148, 244, 10, 21, 134, 31, 226, - 241, 224, 226, 64, 161, 148, 244, 10, 21, 123, 31, 245, 50, 224, 226, 64, - 161, 148, 244, 10, 21, 113, 31, 245, 50, 224, 226, 64, 161, 148, 244, 10, - 21, 134, 31, 245, 50, 224, 226, 64, 161, 148, 5, 215, 84, 165, 5, 254, - 83, 165, 5, 213, 147, 165, 1, 61, 165, 1, 255, 82, 165, 1, 74, 165, 1, - 236, 40, 165, 1, 69, 165, 1, 214, 118, 165, 1, 149, 153, 165, 1, 149, - 156, 165, 1, 76, 165, 1, 245, 217, 165, 1, 254, 210, 165, 1, 78, 165, 1, - 226, 187, 165, 1, 253, 200, 165, 1, 176, 165, 1, 234, 138, 165, 1, 243, - 142, 165, 1, 243, 0, 165, 1, 229, 82, 165, 1, 251, 41, 165, 1, 250, 165, - 165, 1, 235, 147, 165, 1, 235, 120, 165, 1, 227, 169, 165, 1, 215, 157, - 165, 1, 215, 145, 165, 1, 248, 143, 165, 1, 248, 127, 165, 1, 228, 115, - 165, 1, 217, 106, 165, 1, 216, 209, 165, 1, 248, 229, 165, 1, 248, 33, - 165, 1, 198, 165, 1, 191, 165, 1, 225, 150, 165, 1, 252, 199, 165, 1, - 252, 26, 165, 1, 186, 165, 1, 192, 165, 1, 205, 165, 1, 222, 181, 165, 1, - 233, 141, 165, 1, 232, 190, 165, 1, 214, 27, 165, 1, 220, 104, 165, 1, - 218, 225, 165, 1, 206, 165, 1, 162, 165, 5, 227, 209, 165, 5, 253, 183, - 165, 25, 5, 255, 82, 165, 25, 5, 74, 165, 25, 5, 236, 40, 165, 25, 5, 69, - 165, 25, 5, 214, 118, 165, 25, 5, 149, 153, 165, 25, 5, 149, 222, 182, - 165, 25, 5, 76, 165, 25, 5, 245, 217, 165, 25, 5, 254, 210, 165, 25, 5, - 78, 165, 25, 5, 226, 187, 165, 25, 5, 253, 200, 165, 5, 213, 152, 165, - 233, 29, 79, 165, 254, 211, 233, 29, 79, 165, 1, 244, 204, 165, 1, 149, - 222, 182, 165, 1, 149, 232, 191, 165, 25, 5, 149, 156, 165, 25, 5, 149, - 232, 191, 165, 21, 210, 86, 165, 21, 111, 165, 21, 105, 165, 21, 158, - 165, 21, 161, 165, 21, 190, 165, 21, 195, 165, 21, 199, 165, 21, 196, - 165, 21, 201, 165, 5, 235, 108, 165, 5, 214, 161, 136, 5, 254, 83, 136, - 5, 213, 147, 136, 1, 61, 136, 1, 255, 82, 136, 1, 74, 136, 1, 236, 40, - 136, 1, 69, 136, 1, 214, 118, 136, 1, 149, 153, 136, 1, 149, 156, 136, 1, - 76, 136, 1, 245, 217, 136, 1, 254, 210, 136, 1, 78, 136, 1, 226, 187, - 136, 1, 253, 200, 136, 1, 176, 136, 1, 234, 138, 136, 1, 243, 142, 136, - 1, 243, 0, 136, 1, 229, 82, 136, 1, 251, 41, 136, 1, 250, 165, 136, 1, - 235, 147, 136, 1, 235, 120, 136, 1, 227, 169, 136, 1, 215, 157, 136, 1, - 215, 145, 136, 1, 248, 143, 136, 1, 248, 127, 136, 1, 228, 115, 136, 1, - 217, 106, 136, 1, 216, 209, 136, 1, 248, 229, 136, 1, 248, 33, 136, 1, - 198, 136, 1, 228, 97, 136, 1, 191, 136, 1, 225, 150, 136, 1, 252, 199, - 136, 1, 252, 26, 136, 1, 186, 136, 1, 192, 136, 1, 205, 136, 1, 222, 181, - 136, 1, 233, 141, 136, 1, 232, 190, 136, 1, 232, 181, 136, 1, 214, 27, - 136, 1, 220, 104, 136, 1, 218, 225, 136, 1, 206, 136, 1, 162, 136, 1, - 215, 126, 136, 5, 253, 183, 136, 25, 5, 255, 82, 136, 25, 5, 74, 136, 25, - 5, 236, 40, 136, 25, 5, 69, 136, 25, 5, 214, 118, 136, 25, 5, 149, 153, - 136, 25, 5, 149, 222, 182, 136, 25, 5, 76, 136, 25, 5, 245, 217, 136, 25, - 5, 254, 210, 136, 25, 5, 78, 136, 25, 5, 226, 187, 136, 25, 5, 253, 200, - 136, 5, 213, 152, 136, 1, 59, 223, 76, 136, 253, 201, 233, 29, 79, 136, - 1, 149, 222, 182, 136, 1, 149, 232, 191, 136, 25, 5, 149, 156, 136, 25, - 5, 149, 232, 191, 136, 21, 210, 86, 136, 21, 111, 136, 21, 105, 136, 21, - 158, 136, 21, 161, 136, 21, 190, 136, 21, 195, 136, 21, 199, 136, 21, - 196, 136, 21, 201, 136, 54, 216, 248, 136, 54, 123, 240, 217, 136, 54, - 123, 216, 148, 136, 244, 10, 123, 224, 24, 136, 244, 10, 123, 242, 34, - 136, 244, 10, 134, 224, 22, 136, 248, 158, 79, 136, 1, 250, 107, 228, - 116, 136, 1, 250, 107, 230, 30, 136, 1, 250, 107, 222, 182, 136, 1, 250, - 107, 156, 136, 1, 250, 107, 232, 191, 136, 1, 250, 107, 235, 29, 175, 5, - 254, 82, 175, 5, 213, 146, 175, 1, 253, 173, 175, 1, 255, 36, 175, 1, - 254, 232, 175, 1, 254, 247, 175, 1, 235, 157, 175, 1, 236, 39, 175, 1, - 214, 110, 175, 1, 214, 112, 175, 1, 235, 180, 175, 1, 235, 181, 175, 1, - 236, 25, 175, 1, 236, 27, 175, 1, 245, 25, 175, 1, 245, 212, 175, 1, 254, - 197, 175, 1, 226, 112, 175, 1, 226, 181, 175, 1, 253, 186, 175, 1, 254, - 154, 234, 193, 175, 1, 231, 214, 234, 193, 175, 1, 254, 154, 243, 89, - 175, 1, 231, 214, 243, 89, 175, 1, 234, 235, 229, 227, 175, 1, 221, 238, - 243, 89, 175, 1, 254, 154, 250, 224, 175, 1, 231, 214, 250, 224, 175, 1, - 254, 154, 235, 133, 175, 1, 231, 214, 235, 133, 175, 1, 217, 99, 229, - 227, 175, 1, 217, 99, 221, 237, 229, 228, 175, 1, 221, 238, 235, 133, - 175, 1, 254, 154, 215, 153, 175, 1, 231, 214, 215, 153, 175, 1, 254, 154, - 248, 134, 175, 1, 231, 214, 248, 134, 175, 1, 230, 58, 229, 185, 175, 1, - 221, 238, 248, 134, 175, 1, 254, 154, 217, 31, 175, 1, 231, 214, 217, 31, - 175, 1, 254, 154, 248, 152, 175, 1, 231, 214, 248, 152, 175, 1, 248, 182, - 229, 185, 175, 1, 221, 238, 248, 152, 175, 1, 254, 154, 225, 232, 175, 1, - 231, 214, 225, 232, 175, 1, 254, 154, 252, 120, 175, 1, 231, 214, 252, - 120, 175, 1, 231, 136, 175, 1, 254, 139, 252, 120, 175, 1, 211, 51, 175, - 1, 223, 136, 175, 1, 248, 182, 233, 73, 175, 1, 214, 1, 175, 1, 217, 99, - 221, 212, 175, 1, 230, 58, 221, 212, 175, 1, 248, 182, 221, 212, 175, 1, - 241, 249, 175, 1, 230, 58, 233, 73, 175, 1, 244, 164, 175, 5, 254, 186, - 175, 25, 5, 254, 242, 175, 25, 5, 234, 161, 254, 249, 175, 25, 5, 247, - 236, 254, 249, 175, 25, 5, 234, 161, 235, 177, 175, 25, 5, 247, 236, 235, - 177, 175, 25, 5, 234, 161, 226, 92, 175, 25, 5, 247, 236, 226, 92, 175, - 25, 5, 243, 131, 175, 25, 5, 234, 21, 175, 25, 5, 247, 236, 234, 21, 175, - 25, 5, 234, 23, 248, 75, 175, 25, 5, 234, 22, 242, 54, 254, 242, 175, 25, - 5, 234, 22, 242, 54, 247, 236, 254, 242, 175, 25, 5, 234, 22, 242, 54, - 243, 88, 175, 25, 5, 243, 88, 175, 25, 5, 247, 236, 243, 131, 175, 25, 5, - 247, 236, 243, 88, 175, 224, 144, 233, 213, 168, 135, 234, 35, 234, 252, - 168, 135, 234, 112, 234, 134, 168, 135, 234, 112, 234, 105, 168, 135, - 234, 112, 234, 101, 168, 135, 234, 112, 234, 109, 168, 135, 234, 112, - 223, 157, 168, 135, 229, 10, 228, 253, 168, 135, 250, 95, 250, 155, 168, - 135, 250, 95, 250, 103, 168, 135, 250, 95, 250, 154, 168, 135, 219, 61, - 219, 60, 168, 135, 250, 95, 250, 91, 168, 135, 210, 245, 210, 252, 168, - 135, 247, 154, 250, 162, 168, 135, 216, 43, 225, 242, 168, 135, 216, 158, - 216, 201, 168, 135, 216, 158, 229, 206, 168, 135, 216, 158, 225, 114, - 168, 135, 228, 80, 229, 103, 168, 135, 247, 154, 248, 76, 168, 135, 216, - 43, 217, 56, 168, 135, 216, 158, 216, 132, 168, 135, 216, 158, 216, 205, - 168, 135, 216, 158, 216, 155, 168, 135, 228, 80, 227, 242, 168, 135, 251, - 214, 252, 172, 168, 135, 225, 20, 225, 45, 168, 135, 225, 125, 225, 116, - 168, 135, 244, 52, 244, 204, 168, 135, 225, 125, 225, 144, 168, 135, 244, - 52, 244, 181, 168, 135, 225, 125, 221, 249, 168, 135, 230, 167, 186, 168, - 135, 210, 245, 211, 79, 168, 135, 222, 214, 222, 141, 168, 135, 222, 142, - 168, 135, 232, 163, 232, 212, 168, 135, 232, 103, 168, 135, 211, 228, - 212, 61, 168, 135, 219, 61, 222, 8, 168, 135, 219, 61, 222, 116, 168, - 135, 219, 61, 218, 83, 168, 135, 241, 76, 241, 166, 168, 135, 232, 163, - 250, 76, 168, 135, 144, 254, 123, 168, 135, 241, 76, 228, 75, 168, 135, - 226, 72, 168, 135, 221, 232, 61, 168, 135, 231, 209, 242, 24, 168, 135, - 221, 232, 255, 82, 168, 135, 221, 232, 254, 144, 168, 135, 221, 232, 74, - 168, 135, 221, 232, 236, 40, 168, 135, 221, 232, 214, 214, 168, 135, 221, - 232, 214, 212, 168, 135, 221, 232, 69, 168, 135, 221, 232, 214, 118, 168, - 135, 225, 127, 168, 249, 106, 16, 252, 173, 168, 135, 221, 232, 76, 168, - 135, 221, 232, 254, 252, 168, 135, 221, 232, 78, 168, 135, 221, 232, 254, - 211, 231, 203, 168, 135, 221, 232, 254, 211, 231, 204, 168, 135, 233, - 112, 168, 135, 231, 200, 168, 135, 231, 201, 168, 135, 231, 209, 245, - 188, 168, 135, 231, 209, 216, 157, 168, 135, 231, 209, 215, 229, 168, - 135, 231, 209, 250, 143, 168, 135, 216, 199, 168, 135, 228, 210, 168, - 135, 211, 73, 168, 135, 244, 43, 168, 21, 210, 86, 168, 21, 111, 168, 21, - 105, 168, 21, 158, 168, 21, 161, 168, 21, 190, 168, 21, 195, 168, 21, - 199, 168, 21, 196, 168, 21, 201, 168, 135, 254, 119, 168, 135, 234, 110, - 209, 209, 1, 234, 34, 209, 209, 1, 234, 112, 218, 36, 209, 209, 1, 234, - 112, 217, 63, 209, 209, 1, 229, 9, 209, 209, 1, 249, 246, 209, 209, 1, - 219, 61, 217, 63, 209, 209, 1, 227, 138, 209, 209, 1, 247, 153, 209, 209, - 1, 112, 209, 209, 1, 216, 158, 218, 36, 209, 209, 1, 216, 158, 217, 63, - 209, 209, 1, 228, 79, 209, 209, 1, 251, 213, 209, 209, 1, 225, 19, 209, - 209, 1, 225, 125, 218, 36, 209, 209, 1, 244, 52, 217, 63, 209, 209, 1, - 225, 125, 217, 63, 209, 209, 1, 244, 52, 218, 36, 209, 209, 1, 230, 166, - 209, 209, 1, 210, 244, 209, 209, 1, 232, 163, 232, 212, 209, 209, 1, 232, - 163, 232, 127, 209, 209, 1, 211, 227, 209, 209, 1, 219, 61, 218, 36, 209, - 209, 1, 241, 76, 218, 36, 209, 209, 1, 78, 209, 209, 1, 241, 76, 217, 63, - 209, 209, 245, 171, 209, 209, 25, 5, 61, 209, 209, 25, 5, 231, 209, 234, - 240, 209, 209, 25, 5, 255, 82, 209, 209, 25, 5, 254, 144, 209, 209, 25, - 5, 74, 209, 209, 25, 5, 236, 40, 209, 209, 25, 5, 211, 117, 209, 209, 25, - 5, 210, 169, 209, 209, 25, 5, 69, 209, 209, 25, 5, 214, 118, 209, 209, - 25, 5, 231, 209, 234, 19, 209, 209, 220, 147, 5, 232, 162, 209, 209, 220, - 147, 5, 227, 138, 209, 209, 25, 5, 76, 209, 209, 25, 5, 245, 203, 209, - 209, 25, 5, 78, 209, 209, 25, 5, 253, 175, 209, 209, 25, 5, 254, 210, - 209, 209, 234, 35, 233, 141, 209, 209, 138, 231, 209, 245, 188, 209, 209, - 138, 231, 209, 216, 157, 209, 209, 138, 231, 209, 216, 118, 209, 209, - 138, 231, 209, 250, 231, 209, 209, 251, 12, 79, 209, 209, 228, 219, 209, - 209, 21, 210, 86, 209, 209, 21, 111, 209, 209, 21, 105, 209, 209, 21, - 158, 209, 209, 21, 161, 209, 209, 21, 190, 209, 209, 21, 195, 209, 209, - 21, 199, 209, 209, 21, 196, 209, 209, 21, 201, 209, 209, 241, 76, 228, - 79, 209, 209, 241, 76, 230, 166, 209, 209, 1, 234, 113, 242, 181, 209, - 209, 1, 234, 113, 227, 138, 63, 3, 226, 208, 63, 164, 242, 122, 211, 0, - 230, 253, 215, 190, 61, 63, 164, 242, 122, 211, 0, 230, 253, 255, 168, - 222, 218, 252, 85, 186, 63, 164, 242, 122, 211, 0, 230, 253, 255, 168, - 242, 122, 215, 174, 186, 63, 164, 65, 211, 0, 230, 253, 231, 98, 186, 63, - 164, 250, 4, 211, 0, 230, 253, 220, 111, 186, 63, 164, 250, 247, 211, 0, - 230, 253, 225, 115, 220, 98, 186, 63, 164, 211, 0, 230, 253, 215, 174, - 220, 98, 186, 63, 164, 221, 210, 220, 97, 63, 164, 251, 136, 211, 0, 230, - 252, 63, 164, 251, 231, 220, 5, 211, 0, 230, 252, 63, 164, 235, 204, 215, - 173, 63, 164, 248, 69, 215, 174, 251, 135, 63, 164, 220, 97, 63, 164, - 227, 143, 220, 97, 63, 164, 215, 174, 220, 97, 63, 164, 227, 143, 215, - 174, 220, 97, 63, 164, 222, 239, 250, 130, 218, 238, 220, 97, 63, 164, - 223, 45, 242, 153, 220, 97, 63, 164, 250, 247, 255, 172, 222, 146, 231, - 97, 200, 251, 15, 63, 164, 242, 122, 215, 173, 63, 232, 150, 5, 250, 163, - 222, 145, 63, 232, 150, 5, 233, 2, 222, 145, 63, 253, 220, 5, 220, 107, - 243, 72, 255, 173, 222, 145, 63, 253, 220, 5, 255, 170, 191, 63, 253, - 220, 5, 221, 184, 215, 169, 63, 5, 223, 133, 247, 167, 243, 71, 63, 5, - 223, 133, 247, 167, 242, 183, 63, 5, 223, 133, 247, 167, 242, 123, 63, 5, - 223, 133, 229, 224, 243, 71, 63, 5, 223, 133, 229, 224, 242, 183, 63, 5, - 223, 133, 247, 167, 223, 133, 229, 223, 63, 21, 210, 86, 63, 21, 111, 63, - 21, 105, 63, 21, 158, 63, 21, 161, 63, 21, 190, 63, 21, 195, 63, 21, 199, - 63, 21, 196, 63, 21, 201, 63, 21, 163, 111, 63, 21, 163, 105, 63, 21, - 163, 158, 63, 21, 163, 161, 63, 21, 163, 190, 63, 21, 163, 195, 63, 21, - 163, 199, 63, 21, 163, 196, 63, 21, 163, 201, 63, 21, 163, 210, 86, 63, - 164, 251, 138, 222, 145, 63, 164, 229, 73, 251, 76, 227, 153, 210, 25, - 63, 164, 250, 247, 255, 172, 222, 146, 251, 77, 230, 207, 251, 15, 63, - 164, 229, 73, 251, 76, 220, 108, 222, 145, 63, 164, 250, 140, 230, 252, - 63, 164, 215, 185, 255, 169, 63, 164, 242, 107, 222, 146, 242, 70, 63, - 164, 242, 107, 222, 146, 242, 76, 63, 164, 254, 124, 234, 129, 242, 70, - 63, 164, 254, 124, 234, 129, 242, 76, 63, 5, 211, 65, 215, 172, 63, 5, - 231, 172, 215, 172, 63, 1, 176, 63, 1, 234, 138, 63, 1, 243, 142, 63, 1, - 243, 0, 63, 1, 229, 82, 63, 1, 251, 41, 63, 1, 250, 165, 63, 1, 235, 147, - 63, 1, 227, 169, 63, 1, 215, 157, 63, 1, 215, 145, 63, 1, 248, 143, 63, - 1, 248, 127, 63, 1, 228, 115, 63, 1, 217, 106, 63, 1, 216, 209, 63, 1, - 248, 229, 63, 1, 248, 33, 63, 1, 198, 63, 1, 191, 63, 1, 225, 150, 63, 1, - 252, 199, 63, 1, 252, 26, 63, 1, 186, 63, 1, 215, 184, 63, 1, 215, 176, - 63, 1, 246, 46, 63, 1, 246, 41, 63, 1, 212, 65, 63, 1, 210, 82, 63, 1, - 210, 116, 63, 1, 255, 175, 63, 1, 192, 63, 1, 205, 63, 1, 233, 141, 63, - 1, 220, 104, 63, 1, 218, 225, 63, 1, 206, 63, 1, 162, 63, 1, 61, 63, 1, - 233, 237, 63, 1, 244, 85, 205, 63, 1, 234, 52, 63, 1, 222, 181, 63, 25, - 5, 255, 82, 63, 25, 5, 74, 63, 25, 5, 236, 40, 63, 25, 5, 69, 63, 25, 5, - 214, 118, 63, 25, 5, 149, 153, 63, 25, 5, 149, 222, 182, 63, 25, 5, 149, - 156, 63, 25, 5, 149, 232, 191, 63, 25, 5, 76, 63, 25, 5, 245, 217, 63, - 25, 5, 78, 63, 25, 5, 226, 187, 63, 5, 222, 224, 218, 85, 229, 83, 222, - 213, 63, 5, 222, 218, 252, 84, 63, 25, 5, 223, 52, 74, 63, 25, 5, 223, - 52, 236, 40, 63, 5, 227, 153, 210, 26, 229, 231, 248, 229, 63, 5, 219, - 73, 233, 66, 63, 164, 242, 36, 63, 164, 226, 61, 63, 5, 233, 69, 222, - 145, 63, 5, 211, 70, 222, 145, 63, 5, 233, 70, 215, 185, 251, 15, 63, 5, - 231, 100, 251, 15, 63, 5, 242, 126, 251, 16, 223, 43, 63, 5, 242, 126, - 231, 90, 223, 43, 63, 5, 235, 200, 231, 100, 251, 15, 63, 218, 74, 5, - 233, 70, 215, 185, 251, 15, 63, 218, 74, 5, 231, 100, 251, 15, 63, 218, - 74, 5, 235, 200, 231, 100, 251, 15, 63, 218, 74, 1, 176, 63, 218, 74, 1, - 234, 138, 63, 218, 74, 1, 243, 142, 63, 218, 74, 1, 243, 0, 63, 218, 74, - 1, 229, 82, 63, 218, 74, 1, 251, 41, 63, 218, 74, 1, 250, 165, 63, 218, - 74, 1, 235, 147, 63, 218, 74, 1, 227, 169, 63, 218, 74, 1, 215, 157, 63, - 218, 74, 1, 215, 145, 63, 218, 74, 1, 248, 143, 63, 218, 74, 1, 248, 127, - 63, 218, 74, 1, 228, 115, 63, 218, 74, 1, 217, 106, 63, 218, 74, 1, 216, - 209, 63, 218, 74, 1, 248, 229, 63, 218, 74, 1, 248, 33, 63, 218, 74, 1, - 198, 63, 218, 74, 1, 191, 63, 218, 74, 1, 225, 150, 63, 218, 74, 1, 252, - 199, 63, 218, 74, 1, 252, 26, 63, 218, 74, 1, 186, 63, 218, 74, 1, 215, - 184, 63, 218, 74, 1, 215, 176, 63, 218, 74, 1, 246, 46, 63, 218, 74, 1, - 246, 41, 63, 218, 74, 1, 212, 65, 63, 218, 74, 1, 210, 82, 63, 218, 74, - 1, 210, 116, 63, 218, 74, 1, 255, 175, 63, 218, 74, 1, 192, 63, 218, 74, - 1, 205, 63, 218, 74, 1, 233, 141, 63, 218, 74, 1, 220, 104, 63, 218, 74, - 1, 218, 225, 63, 218, 74, 1, 206, 63, 218, 74, 1, 162, 63, 218, 74, 1, - 61, 63, 218, 74, 1, 233, 237, 63, 218, 74, 1, 244, 85, 212, 65, 63, 218, - 74, 1, 244, 85, 192, 63, 218, 74, 1, 244, 85, 205, 63, 233, 224, 222, - 143, 234, 138, 63, 233, 224, 222, 143, 234, 139, 251, 77, 230, 207, 251, - 15, 63, 251, 4, 5, 114, 252, 78, 63, 251, 4, 5, 193, 252, 78, 63, 251, 4, - 5, 251, 5, 217, 21, 63, 251, 4, 5, 221, 209, 255, 174, 63, 16, 246, 99, - 251, 133, 63, 16, 223, 132, 222, 225, 63, 16, 226, 81, 243, 70, 63, 16, - 223, 132, 222, 226, 223, 45, 242, 152, 63, 16, 225, 115, 191, 63, 16, - 228, 64, 251, 133, 63, 16, 228, 64, 251, 134, 227, 143, 255, 171, 63, 16, - 228, 64, 251, 134, 242, 124, 255, 171, 63, 16, 228, 64, 251, 134, 251, - 77, 255, 171, 63, 5, 223, 133, 229, 224, 223, 133, 247, 166, 63, 5, 223, - 133, 229, 224, 242, 123, 63, 164, 251, 137, 220, 5, 242, 222, 230, 253, - 223, 44, 63, 164, 230, 168, 211, 0, 242, 222, 230, 253, 223, 44, 63, 164, - 227, 143, 215, 173, 63, 164, 65, 251, 160, 222, 215, 211, 0, 230, 253, - 231, 98, 186, 63, 164, 250, 4, 251, 160, 222, 215, 211, 0, 230, 253, 220, - 111, 186, 222, 253, 218, 0, 50, 233, 51, 218, 0, 50, 222, 253, 218, 0, 5, - 2, 247, 126, 233, 51, 218, 0, 5, 2, 247, 126, 63, 164, 233, 61, 231, 101, - 222, 145, 63, 164, 215, 251, 231, 101, 222, 145, 68, 1, 176, 68, 1, 234, - 138, 68, 1, 243, 142, 68, 1, 243, 0, 68, 1, 229, 82, 68, 1, 251, 41, 68, - 1, 250, 165, 68, 1, 235, 147, 68, 1, 235, 120, 68, 1, 227, 169, 68, 1, - 228, 81, 68, 1, 215, 157, 68, 1, 215, 145, 68, 1, 248, 143, 68, 1, 248, - 127, 68, 1, 228, 115, 68, 1, 217, 106, 68, 1, 216, 209, 68, 1, 248, 229, - 68, 1, 248, 33, 68, 1, 198, 68, 1, 191, 68, 1, 225, 150, 68, 1, 252, 199, - 68, 1, 252, 26, 68, 1, 186, 68, 1, 192, 68, 1, 205, 68, 1, 233, 141, 68, - 1, 212, 65, 68, 1, 206, 68, 1, 162, 68, 1, 232, 190, 68, 1, 61, 68, 1, - 220, 88, 61, 68, 1, 74, 68, 1, 236, 40, 68, 1, 69, 68, 1, 214, 118, 68, - 1, 76, 68, 1, 230, 156, 76, 68, 1, 78, 68, 1, 253, 200, 68, 25, 5, 217, - 65, 255, 82, 68, 25, 5, 255, 82, 68, 25, 5, 74, 68, 25, 5, 236, 40, 68, - 25, 5, 69, 68, 25, 5, 214, 118, 68, 25, 5, 76, 68, 25, 5, 254, 210, 68, - 25, 5, 230, 156, 236, 40, 68, 25, 5, 230, 156, 78, 68, 25, 5, 160, 48, - 68, 5, 254, 83, 68, 5, 59, 51, 68, 5, 213, 147, 68, 5, 213, 152, 68, 5, - 253, 243, 68, 117, 5, 147, 192, 68, 117, 5, 147, 205, 68, 117, 5, 147, - 212, 65, 68, 117, 5, 147, 162, 68, 1, 242, 139, 206, 68, 21, 210, 86, 68, - 21, 111, 68, 21, 105, 68, 21, 158, 68, 21, 161, 68, 21, 190, 68, 21, 195, - 68, 21, 199, 68, 21, 196, 68, 21, 201, 68, 5, 232, 198, 221, 174, 68, 5, - 221, 174, 68, 16, 232, 159, 68, 16, 249, 221, 68, 16, 254, 229, 68, 16, - 243, 55, 68, 1, 220, 104, 68, 1, 218, 225, 68, 1, 149, 153, 68, 1, 149, - 222, 182, 68, 1, 149, 156, 68, 1, 149, 232, 191, 68, 25, 5, 149, 153, 68, - 25, 5, 149, 222, 182, 68, 25, 5, 149, 156, 68, 25, 5, 149, 232, 191, 68, - 1, 230, 156, 229, 82, 68, 1, 230, 156, 235, 120, 68, 1, 230, 156, 252, - 119, 68, 1, 230, 156, 252, 114, 68, 117, 5, 230, 156, 147, 198, 68, 117, - 5, 230, 156, 147, 186, 68, 117, 5, 230, 156, 147, 233, 141, 68, 1, 220, - 110, 234, 219, 220, 104, 68, 25, 5, 220, 110, 234, 219, 245, 63, 68, 138, - 164, 220, 110, 234, 219, 241, 254, 68, 138, 164, 220, 110, 234, 219, 234, - 189, 225, 124, 68, 1, 212, 7, 224, 111, 234, 219, 216, 209, 68, 1, 212, - 7, 224, 111, 234, 219, 224, 117, 68, 25, 5, 212, 7, 224, 111, 234, 219, - 245, 63, 68, 25, 5, 212, 7, 224, 111, 234, 219, 214, 214, 68, 5, 212, 7, - 224, 111, 234, 219, 216, 30, 68, 5, 212, 7, 224, 111, 234, 219, 216, 29, - 68, 5, 212, 7, 224, 111, 234, 219, 216, 28, 68, 5, 212, 7, 224, 111, 234, - 219, 216, 27, 68, 5, 212, 7, 224, 111, 234, 219, 216, 26, 68, 1, 245, - 227, 224, 111, 234, 219, 228, 115, 68, 1, 245, 227, 224, 111, 234, 219, - 210, 176, 68, 1, 245, 227, 224, 111, 234, 219, 242, 224, 68, 25, 5, 243, - 66, 234, 219, 74, 68, 25, 5, 234, 194, 226, 238, 68, 25, 5, 234, 194, 69, - 68, 25, 5, 234, 194, 245, 217, 68, 1, 220, 88, 176, 68, 1, 220, 88, 234, - 138, 68, 1, 220, 88, 243, 142, 68, 1, 220, 88, 251, 41, 68, 1, 220, 88, - 210, 116, 68, 1, 220, 88, 227, 169, 68, 1, 220, 88, 248, 229, 68, 1, 220, - 88, 198, 68, 1, 220, 88, 225, 150, 68, 1, 220, 88, 244, 204, 68, 1, 220, - 88, 252, 199, 68, 1, 220, 88, 216, 209, 68, 1, 220, 88, 162, 68, 117, 5, - 220, 88, 147, 212, 65, 68, 25, 5, 220, 88, 255, 82, 68, 25, 5, 220, 88, - 76, 68, 25, 5, 220, 88, 160, 48, 68, 25, 5, 220, 88, 40, 211, 117, 68, 5, - 220, 88, 216, 29, 68, 5, 220, 88, 216, 28, 68, 5, 220, 88, 216, 26, 68, - 5, 220, 88, 216, 25, 68, 5, 220, 88, 249, 160, 216, 29, 68, 5, 220, 88, - 249, 160, 216, 28, 68, 5, 220, 88, 249, 160, 245, 161, 216, 31, 68, 1, - 222, 130, 226, 67, 244, 204, 68, 5, 222, 130, 226, 67, 216, 26, 68, 220, - 88, 21, 210, 86, 68, 220, 88, 21, 111, 68, 220, 88, 21, 105, 68, 220, 88, - 21, 158, 68, 220, 88, 21, 161, 68, 220, 88, 21, 190, 68, 220, 88, 21, - 195, 68, 220, 88, 21, 199, 68, 220, 88, 21, 196, 68, 220, 88, 21, 201, - 68, 5, 234, 132, 216, 30, 68, 5, 234, 132, 216, 28, 68, 25, 5, 254, 199, - 61, 68, 25, 5, 254, 199, 254, 210, 68, 16, 220, 88, 111, 68, 16, 220, 88, - 245, 38, 98, 6, 1, 254, 131, 98, 6, 1, 252, 160, 98, 6, 1, 243, 113, 98, - 6, 1, 247, 136, 98, 6, 1, 245, 158, 98, 6, 1, 213, 160, 98, 6, 1, 210, - 89, 98, 6, 1, 217, 61, 98, 6, 1, 236, 6, 98, 6, 1, 234, 240, 98, 6, 1, - 233, 87, 98, 6, 1, 231, 190, 98, 6, 1, 229, 200, 98, 6, 1, 226, 200, 98, - 6, 1, 226, 21, 98, 6, 1, 210, 78, 98, 6, 1, 223, 174, 98, 6, 1, 221, 245, - 98, 6, 1, 217, 51, 98, 6, 1, 214, 190, 98, 6, 1, 225, 143, 98, 6, 1, 234, - 127, 98, 6, 1, 242, 248, 98, 6, 1, 224, 76, 98, 6, 1, 220, 22, 98, 6, 1, - 250, 105, 98, 6, 1, 251, 15, 98, 6, 1, 235, 106, 98, 6, 1, 250, 48, 98, - 6, 1, 250, 151, 98, 6, 1, 211, 163, 98, 6, 1, 235, 117, 98, 6, 1, 242, - 50, 98, 6, 1, 241, 245, 98, 6, 1, 241, 182, 98, 6, 1, 212, 22, 98, 6, 1, - 242, 11, 98, 6, 1, 241, 72, 98, 6, 1, 210, 246, 98, 6, 1, 254, 241, 98, - 1, 254, 131, 98, 1, 252, 160, 98, 1, 243, 113, 98, 1, 247, 136, 98, 1, - 245, 158, 98, 1, 213, 160, 98, 1, 210, 89, 98, 1, 217, 61, 98, 1, 236, 6, - 98, 1, 234, 240, 98, 1, 233, 87, 98, 1, 231, 190, 98, 1, 229, 200, 98, 1, - 226, 200, 98, 1, 226, 21, 98, 1, 210, 78, 98, 1, 223, 174, 98, 1, 221, - 245, 98, 1, 217, 51, 98, 1, 214, 190, 98, 1, 225, 143, 98, 1, 234, 127, - 98, 1, 242, 248, 98, 1, 224, 76, 98, 1, 220, 22, 98, 1, 250, 105, 98, 1, - 251, 15, 98, 1, 235, 106, 98, 1, 250, 48, 98, 1, 250, 151, 98, 1, 211, - 163, 98, 1, 235, 117, 98, 1, 242, 50, 98, 1, 241, 245, 98, 1, 241, 182, - 98, 1, 212, 22, 98, 1, 242, 11, 98, 1, 241, 72, 98, 1, 244, 129, 98, 1, - 210, 246, 98, 1, 245, 173, 98, 1, 215, 94, 243, 113, 98, 1, 254, 205, 98, - 226, 19, 220, 139, 58, 1, 98, 229, 200, 98, 1, 254, 241, 98, 1, 242, 10, - 50, 98, 1, 233, 133, 50, 24, 100, 234, 64, 24, 100, 218, 217, 24, 100, - 228, 231, 24, 100, 216, 102, 24, 100, 218, 206, 24, 100, 223, 29, 24, - 100, 230, 222, 24, 100, 225, 98, 24, 100, 218, 214, 24, 100, 219, 150, - 24, 100, 218, 211, 24, 100, 236, 63, 24, 100, 250, 54, 24, 100, 218, 221, - 24, 100, 250, 114, 24, 100, 234, 116, 24, 100, 216, 174, 24, 100, 225, - 134, 24, 100, 241, 179, 24, 100, 228, 227, 24, 100, 218, 215, 24, 100, - 228, 221, 24, 100, 228, 225, 24, 100, 216, 99, 24, 100, 223, 17, 24, 100, - 218, 213, 24, 100, 223, 27, 24, 100, 234, 224, 24, 100, 230, 215, 24, - 100, 234, 227, 24, 100, 225, 93, 24, 100, 225, 91, 24, 100, 225, 79, 24, - 100, 225, 87, 24, 100, 225, 85, 24, 100, 225, 82, 24, 100, 225, 84, 24, - 100, 225, 81, 24, 100, 225, 86, 24, 100, 225, 96, 24, 100, 225, 97, 24, - 100, 225, 80, 24, 100, 225, 90, 24, 100, 234, 225, 24, 100, 234, 223, 24, - 100, 219, 143, 24, 100, 219, 141, 24, 100, 219, 133, 24, 100, 219, 136, - 24, 100, 219, 142, 24, 100, 219, 138, 24, 100, 219, 137, 24, 100, 219, - 135, 24, 100, 219, 146, 24, 100, 219, 148, 24, 100, 219, 149, 24, 100, - 219, 144, 24, 100, 219, 134, 24, 100, 219, 139, 24, 100, 219, 147, 24, - 100, 250, 98, 24, 100, 250, 96, 24, 100, 250, 176, 24, 100, 250, 174, 24, - 100, 226, 36, 24, 100, 236, 58, 24, 100, 236, 49, 24, 100, 236, 57, 24, - 100, 236, 54, 24, 100, 236, 52, 24, 100, 236, 56, 24, 100, 218, 218, 24, - 100, 236, 61, 24, 100, 236, 62, 24, 100, 236, 50, 24, 100, 236, 55, 24, - 100, 211, 26, 24, 100, 250, 53, 24, 100, 250, 99, 24, 100, 250, 97, 24, - 100, 250, 177, 24, 100, 250, 175, 24, 100, 250, 112, 24, 100, 250, 113, - 24, 100, 250, 100, 24, 100, 250, 178, 24, 100, 225, 132, 24, 100, 234, - 226, 24, 100, 218, 219, 24, 100, 211, 32, 24, 100, 234, 55, 24, 100, 228, - 223, 24, 100, 228, 229, 24, 100, 228, 228, 24, 100, 216, 96, 24, 100, - 244, 111, 24, 143, 244, 111, 24, 143, 61, 24, 143, 254, 252, 24, 143, - 192, 24, 143, 211, 92, 24, 143, 245, 125, 24, 143, 76, 24, 143, 211, 36, - 24, 143, 211, 47, 24, 143, 78, 24, 143, 212, 65, 24, 143, 212, 62, 24, - 143, 226, 238, 24, 143, 210, 244, 24, 143, 69, 24, 143, 212, 11, 24, 143, - 212, 22, 24, 143, 211, 250, 24, 143, 210, 212, 24, 143, 245, 63, 24, 143, - 211, 8, 24, 143, 74, 24, 143, 255, 166, 24, 143, 255, 165, 24, 143, 211, - 106, 24, 143, 211, 104, 24, 143, 245, 123, 24, 143, 245, 122, 24, 143, - 245, 124, 24, 143, 211, 35, 24, 143, 211, 34, 24, 143, 227, 88, 24, 143, - 227, 89, 24, 143, 227, 82, 24, 143, 227, 87, 24, 143, 227, 85, 24, 143, - 210, 238, 24, 143, 210, 237, 24, 143, 210, 236, 24, 143, 210, 239, 24, - 143, 210, 240, 24, 143, 215, 30, 24, 143, 215, 29, 24, 143, 215, 27, 24, - 143, 215, 24, 24, 143, 215, 25, 24, 143, 210, 211, 24, 143, 210, 208, 24, - 143, 210, 209, 24, 143, 210, 203, 24, 143, 210, 204, 24, 143, 210, 205, - 24, 143, 210, 207, 24, 143, 245, 57, 24, 143, 245, 59, 24, 143, 211, 7, - 24, 143, 240, 160, 24, 143, 240, 152, 24, 143, 240, 155, 24, 143, 240, - 153, 24, 143, 240, 157, 24, 143, 240, 159, 24, 143, 254, 42, 24, 143, - 254, 39, 24, 143, 254, 37, 24, 143, 254, 38, 24, 143, 218, 222, 24, 143, - 255, 167, 24, 143, 211, 105, 24, 143, 211, 33, 24, 143, 227, 84, 24, 143, - 227, 83, 24, 90, 234, 64, 24, 90, 218, 217, 24, 90, 234, 57, 24, 90, 228, - 231, 24, 90, 228, 229, 24, 90, 228, 228, 24, 90, 216, 102, 24, 90, 223, - 29, 24, 90, 223, 24, 24, 90, 223, 21, 24, 90, 223, 14, 24, 90, 223, 9, - 24, 90, 223, 4, 24, 90, 223, 15, 24, 90, 223, 27, 24, 90, 230, 222, 24, - 90, 225, 98, 24, 90, 225, 87, 24, 90, 219, 150, 24, 90, 218, 211, 24, 90, - 236, 63, 24, 90, 250, 54, 24, 90, 250, 114, 24, 90, 234, 116, 24, 90, - 216, 174, 24, 90, 225, 134, 24, 90, 241, 179, 24, 90, 234, 58, 24, 90, - 234, 56, 24, 90, 228, 227, 24, 90, 228, 221, 24, 90, 228, 223, 24, 90, - 228, 226, 24, 90, 228, 222, 24, 90, 216, 99, 24, 90, 216, 96, 24, 90, - 223, 22, 24, 90, 223, 17, 24, 90, 223, 3, 24, 90, 223, 2, 24, 90, 218, - 213, 24, 90, 223, 19, 24, 90, 223, 18, 24, 90, 223, 11, 24, 90, 223, 13, - 24, 90, 223, 26, 24, 90, 223, 6, 24, 90, 223, 16, 24, 90, 223, 25, 24, - 90, 223, 1, 24, 90, 230, 218, 24, 90, 230, 213, 24, 90, 230, 215, 24, 90, - 230, 212, 24, 90, 230, 210, 24, 90, 230, 216, 24, 90, 230, 221, 24, 90, - 230, 219, 24, 90, 234, 227, 24, 90, 225, 89, 24, 90, 225, 90, 24, 90, - 225, 95, 24, 90, 234, 225, 24, 90, 219, 143, 24, 90, 219, 133, 24, 90, - 219, 136, 24, 90, 219, 138, 24, 90, 226, 36, 24, 90, 236, 58, 24, 90, - 236, 51, 24, 90, 218, 218, 24, 90, 236, 59, 24, 90, 211, 26, 24, 90, 211, - 22, 24, 90, 211, 23, 24, 90, 225, 132, 24, 90, 234, 226, 24, 90, 241, - 177, 24, 90, 241, 175, 24, 90, 241, 178, 24, 90, 241, 176, 24, 90, 211, - 32, 24, 90, 234, 60, 24, 90, 234, 59, 24, 90, 234, 63, 24, 90, 234, 61, - 24, 90, 234, 62, 24, 90, 218, 215, 29, 3, 162, 29, 3, 240, 229, 29, 3, - 241, 187, 29, 3, 242, 53, 29, 3, 241, 227, 29, 3, 241, 245, 29, 3, 241, - 75, 29, 3, 241, 74, 29, 3, 233, 141, 29, 3, 232, 103, 29, 3, 232, 247, - 29, 3, 233, 140, 29, 3, 233, 56, 29, 3, 233, 64, 29, 3, 232, 162, 29, 3, - 232, 75, 29, 3, 241, 196, 29, 3, 241, 190, 29, 3, 241, 192, 29, 3, 241, - 195, 29, 3, 241, 193, 29, 3, 241, 194, 29, 3, 241, 191, 29, 3, 241, 189, - 29, 3, 186, 29, 3, 230, 107, 29, 3, 230, 235, 29, 3, 231, 242, 29, 3, - 231, 85, 29, 3, 231, 96, 29, 3, 230, 166, 29, 3, 230, 47, 29, 3, 217, - 164, 29, 3, 217, 158, 29, 3, 217, 160, 29, 3, 217, 163, 29, 3, 217, 161, - 29, 3, 217, 162, 29, 3, 217, 159, 29, 3, 217, 157, 29, 3, 205, 29, 3, - 222, 142, 29, 3, 223, 38, 29, 3, 223, 187, 29, 3, 223, 111, 29, 3, 223, - 131, 29, 3, 222, 213, 29, 3, 222, 111, 29, 3, 206, 29, 3, 218, 84, 29, 3, - 219, 193, 29, 3, 222, 33, 29, 3, 221, 172, 29, 3, 221, 183, 29, 3, 219, - 60, 29, 3, 217, 254, 29, 3, 220, 104, 29, 3, 219, 227, 29, 3, 220, 34, - 29, 3, 220, 100, 29, 3, 220, 63, 29, 3, 220, 65, 29, 3, 220, 9, 29, 3, - 219, 210, 29, 3, 224, 91, 29, 3, 224, 33, 29, 3, 224, 56, 29, 3, 224, 90, - 29, 3, 224, 71, 29, 3, 224, 72, 29, 3, 224, 45, 29, 3, 224, 44, 29, 3, - 223, 245, 29, 3, 223, 241, 29, 3, 223, 244, 29, 3, 223, 242, 29, 3, 223, - 243, 29, 3, 224, 68, 29, 3, 224, 62, 29, 3, 224, 64, 29, 3, 224, 67, 29, - 3, 224, 65, 29, 3, 224, 66, 29, 3, 224, 63, 29, 3, 224, 61, 29, 3, 224, - 57, 29, 3, 224, 60, 29, 3, 224, 58, 29, 3, 224, 59, 29, 3, 252, 199, 29, - 3, 251, 133, 29, 3, 252, 14, 29, 3, 252, 197, 29, 3, 252, 74, 29, 3, 252, - 83, 29, 3, 251, 213, 29, 3, 251, 91, 29, 3, 214, 27, 29, 3, 212, 116, 29, - 3, 213, 176, 29, 3, 214, 26, 29, 3, 213, 250, 29, 3, 213, 255, 29, 3, - 213, 138, 29, 3, 212, 107, 29, 3, 217, 106, 29, 3, 215, 119, 29, 3, 216, - 118, 29, 3, 217, 102, 29, 3, 217, 12, 29, 3, 217, 23, 29, 3, 112, 29, 3, - 215, 80, 29, 3, 251, 41, 29, 3, 249, 120, 29, 3, 250, 59, 29, 3, 251, 40, - 29, 3, 250, 190, 29, 3, 250, 198, 29, 3, 249, 246, 29, 3, 249, 89, 29, 3, - 211, 165, 29, 3, 211, 141, 29, 3, 211, 157, 29, 3, 211, 164, 29, 3, 211, - 161, 29, 3, 211, 162, 29, 3, 211, 148, 29, 3, 211, 147, 29, 3, 211, 136, - 29, 3, 211, 132, 29, 3, 211, 135, 29, 3, 211, 133, 29, 3, 211, 134, 29, - 3, 198, 29, 3, 227, 242, 29, 3, 228, 238, 29, 3, 229, 230, 29, 3, 229, - 108, 29, 3, 229, 112, 29, 3, 228, 79, 29, 3, 227, 178, 29, 3, 227, 169, - 29, 3, 227, 132, 29, 3, 227, 152, 29, 3, 227, 168, 29, 3, 227, 159, 29, - 3, 227, 160, 29, 3, 227, 138, 29, 3, 227, 123, 29, 3, 242, 187, 61, 29, - 3, 242, 187, 69, 29, 3, 242, 187, 74, 29, 3, 242, 187, 255, 82, 29, 3, - 242, 187, 245, 217, 29, 3, 242, 187, 76, 29, 3, 242, 187, 78, 29, 3, 242, - 187, 212, 65, 29, 3, 176, 29, 3, 233, 223, 29, 3, 234, 98, 29, 3, 235, - 16, 29, 3, 234, 187, 29, 3, 234, 188, 29, 3, 234, 34, 29, 3, 234, 33, 29, - 3, 233, 188, 29, 3, 233, 182, 29, 3, 233, 187, 29, 3, 233, 183, 29, 3, - 233, 184, 29, 3, 233, 177, 29, 3, 233, 171, 29, 3, 233, 173, 29, 3, 233, - 176, 29, 3, 233, 174, 29, 3, 233, 175, 29, 3, 233, 172, 29, 3, 233, 170, - 29, 3, 233, 166, 29, 3, 233, 169, 29, 3, 233, 167, 29, 3, 233, 168, 29, - 3, 212, 65, 29, 3, 211, 195, 29, 3, 211, 250, 29, 3, 212, 64, 29, 3, 212, - 17, 29, 3, 212, 22, 29, 3, 211, 227, 29, 3, 211, 226, 29, 3, 225, 142, - 61, 29, 3, 225, 142, 69, 29, 3, 225, 142, 74, 29, 3, 225, 142, 255, 82, - 29, 3, 225, 142, 245, 217, 29, 3, 225, 142, 76, 29, 3, 225, 142, 78, 29, - 3, 210, 116, 29, 3, 210, 13, 29, 3, 210, 44, 29, 3, 210, 115, 29, 3, 210, - 92, 29, 3, 210, 94, 29, 3, 210, 23, 29, 3, 210, 0, 29, 3, 210, 82, 29, 3, - 210, 62, 29, 3, 210, 69, 29, 3, 210, 81, 29, 3, 210, 73, 29, 3, 210, 74, - 29, 3, 210, 67, 29, 3, 210, 53, 29, 3, 192, 29, 3, 210, 212, 29, 3, 211, - 8, 29, 3, 211, 103, 29, 3, 211, 44, 29, 3, 211, 47, 29, 3, 210, 244, 29, - 3, 210, 235, 29, 3, 248, 229, 29, 3, 246, 86, 29, 3, 248, 11, 29, 3, 248, - 228, 29, 3, 248, 85, 29, 3, 248, 98, 29, 3, 247, 153, 29, 3, 246, 55, 29, - 3, 248, 143, 29, 3, 248, 108, 29, 3, 248, 120, 29, 3, 248, 142, 29, 3, - 248, 130, 29, 3, 248, 131, 29, 3, 248, 113, 29, 3, 248, 99, 29, 3, 235, - 147, 29, 3, 235, 57, 29, 3, 235, 114, 29, 3, 235, 146, 29, 3, 235, 130, - 29, 3, 235, 132, 29, 3, 235, 74, 29, 3, 235, 37, 29, 3, 243, 142, 29, 3, - 242, 120, 29, 3, 242, 221, 29, 3, 243, 139, 29, 3, 243, 62, 29, 3, 243, - 69, 29, 3, 242, 181, 29, 3, 242, 180, 29, 3, 242, 85, 29, 3, 242, 81, 29, - 3, 242, 84, 29, 3, 242, 82, 29, 3, 242, 83, 29, 3, 243, 36, 29, 3, 243, - 16, 29, 3, 243, 26, 29, 3, 243, 35, 29, 3, 243, 30, 29, 3, 243, 31, 29, - 3, 243, 20, 29, 3, 243, 5, 29, 3, 216, 209, 29, 3, 216, 137, 29, 3, 216, - 176, 29, 3, 216, 208, 29, 3, 216, 195, 29, 3, 216, 196, 29, 3, 216, 157, - 29, 3, 216, 129, 29, 3, 250, 165, 29, 3, 250, 77, 29, 3, 250, 118, 29, 3, - 250, 164, 29, 3, 250, 136, 29, 3, 250, 139, 29, 3, 250, 94, 29, 3, 250, - 66, 29, 3, 225, 150, 29, 3, 225, 117, 29, 3, 225, 136, 29, 3, 225, 149, - 29, 3, 225, 138, 29, 3, 225, 139, 29, 3, 225, 124, 29, 3, 225, 113, 29, - 3, 215, 184, 29, 3, 215, 164, 29, 3, 215, 168, 29, 3, 215, 183, 29, 3, - 215, 178, 29, 3, 215, 179, 29, 3, 215, 167, 29, 3, 215, 162, 29, 3, 215, - 39, 29, 3, 215, 31, 29, 3, 215, 35, 29, 3, 215, 38, 29, 3, 215, 36, 29, - 3, 215, 37, 29, 3, 215, 33, 29, 3, 215, 32, 29, 3, 244, 204, 29, 3, 243, - 241, 29, 3, 244, 129, 29, 3, 244, 203, 29, 3, 244, 155, 29, 3, 244, 162, - 29, 3, 244, 51, 29, 3, 243, 220, 29, 3, 191, 29, 3, 224, 153, 29, 3, 225, - 111, 29, 3, 226, 93, 29, 3, 225, 214, 29, 3, 225, 224, 29, 3, 225, 19, - 29, 3, 224, 117, 29, 3, 222, 101, 29, 3, 230, 36, 29, 3, 243, 214, 29, - 38, 243, 60, 22, 25, 233, 29, 79, 29, 38, 25, 233, 29, 79, 29, 38, 243, - 60, 79, 29, 221, 175, 79, 29, 211, 208, 29, 243, 236, 218, 131, 29, 249, - 227, 29, 220, 152, 29, 249, 234, 29, 224, 202, 249, 234, 29, 224, 16, 79, - 29, 226, 19, 220, 139, 29, 21, 111, 29, 21, 105, 29, 21, 158, 29, 21, - 161, 29, 21, 190, 29, 21, 195, 29, 21, 199, 29, 21, 196, 29, 21, 201, 29, - 54, 216, 248, 29, 54, 215, 73, 29, 54, 216, 163, 29, 54, 244, 23, 29, 54, - 244, 122, 29, 54, 219, 113, 29, 54, 220, 118, 29, 54, 245, 192, 29, 54, - 228, 200, 29, 54, 240, 217, 29, 54, 216, 249, 216, 148, 29, 3, 221, 179, - 230, 47, 29, 3, 230, 43, 29, 3, 230, 44, 29, 3, 230, 45, 29, 3, 221, 179, - 251, 91, 29, 3, 251, 88, 29, 3, 251, 89, 29, 3, 251, 90, 29, 3, 221, 179, - 243, 220, 29, 3, 243, 216, 29, 3, 243, 217, 29, 3, 243, 218, 29, 3, 221, - 179, 224, 117, 29, 3, 224, 113, 29, 3, 224, 114, 29, 3, 224, 115, 29, - 216, 32, 164, 210, 247, 29, 216, 32, 164, 248, 49, 29, 216, 32, 164, 222, - 241, 29, 216, 32, 164, 219, 253, 222, 241, 29, 216, 32, 164, 247, 243, - 29, 216, 32, 164, 234, 170, 29, 216, 32, 164, 250, 102, 29, 216, 32, 164, - 241, 184, 29, 216, 32, 164, 248, 48, 29, 216, 32, 164, 233, 200, 169, 1, - 61, 169, 1, 76, 169, 1, 74, 169, 1, 78, 169, 1, 69, 169, 1, 214, 105, - 169, 1, 243, 142, 169, 1, 176, 169, 1, 243, 69, 169, 1, 242, 221, 169, 1, - 242, 181, 169, 1, 242, 120, 169, 1, 242, 86, 169, 1, 162, 169, 1, 241, - 245, 169, 1, 241, 187, 169, 1, 241, 75, 169, 1, 240, 229, 169, 1, 240, - 208, 169, 1, 233, 141, 169, 1, 233, 64, 169, 1, 232, 247, 169, 1, 232, - 162, 169, 1, 232, 103, 169, 1, 232, 76, 169, 1, 186, 169, 1, 231, 96, - 169, 1, 230, 235, 169, 1, 230, 166, 169, 1, 230, 107, 169, 1, 198, 169, - 1, 241, 97, 169, 1, 229, 218, 169, 1, 229, 112, 169, 1, 228, 238, 169, 1, - 228, 79, 169, 1, 227, 242, 169, 1, 227, 180, 169, 1, 224, 32, 169, 1, - 224, 19, 169, 1, 224, 12, 169, 1, 224, 4, 169, 1, 223, 249, 169, 1, 223, - 247, 169, 1, 206, 169, 1, 222, 93, 169, 1, 221, 183, 169, 1, 219, 193, - 169, 1, 219, 60, 169, 1, 218, 84, 169, 1, 218, 3, 169, 1, 248, 229, 169, - 1, 217, 106, 169, 1, 248, 98, 169, 1, 217, 23, 169, 1, 248, 11, 169, 1, - 216, 118, 169, 1, 247, 153, 169, 1, 246, 86, 169, 1, 246, 58, 169, 1, - 247, 164, 169, 1, 216, 60, 169, 1, 216, 59, 169, 1, 216, 48, 169, 1, 216, - 47, 169, 1, 216, 46, 169, 1, 216, 45, 169, 1, 215, 184, 169, 1, 215, 179, - 169, 1, 215, 168, 169, 1, 215, 167, 169, 1, 215, 164, 169, 1, 215, 163, - 169, 1, 212, 65, 169, 1, 212, 22, 169, 1, 211, 250, 169, 1, 211, 227, - 169, 1, 211, 195, 169, 1, 211, 183, 169, 1, 192, 169, 1, 211, 47, 169, 1, - 211, 8, 169, 1, 210, 244, 169, 1, 210, 212, 169, 1, 210, 177, 18, 19, - 240, 175, 18, 19, 76, 18, 19, 255, 46, 18, 19, 74, 18, 19, 236, 40, 18, - 19, 78, 18, 19, 226, 187, 18, 19, 211, 116, 226, 187, 18, 19, 73, 245, - 217, 18, 19, 73, 74, 18, 19, 61, 18, 19, 255, 82, 18, 19, 212, 22, 18, - 19, 159, 212, 22, 18, 19, 211, 250, 18, 19, 159, 211, 250, 18, 19, 211, - 242, 18, 19, 159, 211, 242, 18, 19, 211, 227, 18, 19, 159, 211, 227, 18, - 19, 211, 215, 18, 19, 159, 211, 215, 18, 19, 229, 195, 211, 215, 18, 19, - 212, 65, 18, 19, 159, 212, 65, 18, 19, 212, 64, 18, 19, 159, 212, 64, 18, - 19, 229, 195, 212, 64, 18, 19, 254, 210, 18, 19, 211, 116, 212, 98, 18, - 19, 242, 187, 218, 131, 18, 19, 40, 142, 18, 19, 40, 242, 143, 18, 19, - 40, 251, 183, 163, 222, 236, 18, 19, 40, 216, 15, 163, 222, 236, 18, 19, - 40, 44, 163, 222, 236, 18, 19, 40, 222, 236, 18, 19, 40, 52, 142, 18, 19, - 40, 52, 219, 253, 67, 218, 92, 18, 19, 40, 230, 229, 247, 128, 18, 19, - 40, 219, 253, 203, 91, 18, 19, 40, 225, 25, 18, 19, 40, 124, 217, 88, 18, - 19, 245, 158, 18, 19, 236, 6, 18, 19, 226, 200, 18, 19, 254, 131, 18, 19, - 225, 224, 18, 19, 226, 91, 18, 19, 225, 111, 18, 19, 225, 74, 18, 19, - 225, 19, 18, 19, 224, 252, 18, 19, 211, 116, 224, 252, 18, 19, 73, 241, - 227, 18, 19, 73, 241, 187, 18, 19, 191, 18, 19, 226, 93, 18, 19, 224, - 115, 18, 19, 159, 224, 115, 18, 19, 224, 113, 18, 19, 159, 224, 113, 18, - 19, 224, 112, 18, 19, 159, 224, 112, 18, 19, 224, 110, 18, 19, 159, 224, - 110, 18, 19, 224, 109, 18, 19, 159, 224, 109, 18, 19, 224, 117, 18, 19, - 159, 224, 117, 18, 19, 224, 116, 18, 19, 159, 224, 116, 18, 19, 211, 116, - 224, 116, 18, 19, 226, 109, 18, 19, 159, 226, 109, 18, 19, 73, 242, 67, - 18, 19, 217, 23, 18, 19, 217, 100, 18, 19, 216, 118, 18, 19, 216, 104, - 18, 19, 112, 18, 19, 216, 18, 18, 19, 211, 116, 216, 18, 18, 19, 73, 248, - 85, 18, 19, 73, 248, 11, 18, 19, 217, 106, 18, 19, 217, 102, 18, 19, 215, - 78, 18, 19, 159, 215, 78, 18, 19, 215, 62, 18, 19, 159, 215, 62, 18, 19, - 215, 61, 18, 19, 159, 215, 61, 18, 19, 105, 18, 19, 159, 105, 18, 19, - 215, 54, 18, 19, 159, 215, 54, 18, 19, 215, 80, 18, 19, 159, 215, 80, 18, - 19, 215, 79, 18, 19, 159, 215, 79, 18, 19, 229, 195, 215, 79, 18, 19, - 217, 153, 18, 19, 215, 152, 18, 19, 215, 136, 18, 19, 215, 134, 18, 19, - 215, 157, 18, 19, 234, 188, 18, 19, 235, 13, 18, 19, 234, 98, 18, 19, - 234, 89, 18, 19, 234, 34, 18, 19, 234, 16, 18, 19, 211, 116, 234, 16, 18, - 19, 176, 18, 19, 235, 16, 18, 19, 233, 184, 18, 19, 159, 233, 184, 18, - 19, 233, 182, 18, 19, 159, 233, 182, 18, 19, 233, 181, 18, 19, 159, 233, - 181, 18, 19, 233, 180, 18, 19, 159, 233, 180, 18, 19, 233, 179, 18, 19, - 159, 233, 179, 18, 19, 233, 188, 18, 19, 159, 233, 188, 18, 19, 233, 187, - 18, 19, 159, 233, 187, 18, 19, 229, 195, 233, 187, 18, 19, 235, 29, 18, - 19, 233, 189, 18, 19, 219, 29, 234, 182, 18, 19, 219, 29, 234, 90, 18, - 19, 219, 29, 234, 29, 18, 19, 219, 29, 234, 254, 18, 19, 250, 198, 18, - 19, 251, 39, 18, 19, 250, 59, 18, 19, 250, 49, 18, 19, 249, 246, 18, 19, - 249, 182, 18, 19, 211, 116, 249, 182, 18, 19, 251, 41, 18, 19, 251, 40, - 18, 19, 249, 87, 18, 19, 159, 249, 87, 18, 19, 249, 85, 18, 19, 159, 249, - 85, 18, 19, 249, 84, 18, 19, 159, 249, 84, 18, 19, 249, 83, 18, 19, 159, - 249, 83, 18, 19, 249, 82, 18, 19, 159, 249, 82, 18, 19, 249, 89, 18, 19, - 159, 249, 89, 18, 19, 249, 88, 18, 19, 159, 249, 88, 18, 19, 229, 195, - 249, 88, 18, 19, 251, 74, 18, 19, 221, 211, 216, 211, 18, 19, 231, 96, - 18, 19, 231, 241, 18, 19, 230, 235, 18, 19, 230, 206, 18, 19, 230, 166, - 18, 19, 230, 137, 18, 19, 211, 116, 230, 137, 18, 19, 186, 18, 19, 231, - 242, 18, 19, 230, 45, 18, 19, 159, 230, 45, 18, 19, 230, 43, 18, 19, 159, - 230, 43, 18, 19, 230, 42, 18, 19, 159, 230, 42, 18, 19, 230, 41, 18, 19, - 159, 230, 41, 18, 19, 230, 40, 18, 19, 159, 230, 40, 18, 19, 230, 47, 18, - 19, 159, 230, 47, 18, 19, 230, 46, 18, 19, 159, 230, 46, 18, 19, 229, - 195, 230, 46, 18, 19, 194, 18, 19, 159, 194, 18, 19, 230, 239, 18, 19, - 253, 213, 194, 18, 19, 221, 211, 194, 18, 19, 229, 112, 18, 19, 229, 229, - 18, 19, 228, 238, 18, 19, 228, 213, 18, 19, 228, 79, 18, 19, 228, 69, 18, - 19, 211, 116, 228, 69, 18, 19, 198, 18, 19, 229, 230, 18, 19, 227, 176, - 18, 19, 159, 227, 176, 18, 19, 227, 178, 18, 19, 159, 227, 178, 18, 19, - 227, 177, 18, 19, 159, 227, 177, 18, 19, 229, 195, 227, 177, 18, 19, 230, - 30, 18, 19, 73, 229, 84, 18, 19, 228, 243, 18, 19, 233, 64, 18, 19, 233, - 139, 18, 19, 232, 247, 18, 19, 232, 233, 18, 19, 232, 162, 18, 19, 232, - 133, 18, 19, 211, 116, 232, 133, 18, 19, 233, 141, 18, 19, 233, 140, 18, - 19, 232, 73, 18, 19, 159, 232, 73, 18, 19, 232, 72, 18, 19, 159, 232, 72, - 18, 19, 232, 71, 18, 19, 159, 232, 71, 18, 19, 232, 70, 18, 19, 159, 232, - 70, 18, 19, 232, 69, 18, 19, 159, 232, 69, 18, 19, 232, 75, 18, 19, 159, - 232, 75, 18, 19, 232, 74, 18, 19, 159, 232, 74, 18, 19, 156, 18, 19, 159, - 156, 18, 19, 147, 156, 18, 19, 221, 183, 18, 19, 222, 31, 18, 19, 219, - 193, 18, 19, 219, 177, 18, 19, 219, 60, 18, 19, 219, 42, 18, 19, 211, - 116, 219, 42, 18, 19, 206, 18, 19, 222, 33, 18, 19, 217, 250, 18, 19, - 159, 217, 250, 18, 19, 217, 244, 18, 19, 159, 217, 244, 18, 19, 217, 243, - 18, 19, 159, 217, 243, 18, 19, 217, 239, 18, 19, 159, 217, 239, 18, 19, - 217, 238, 18, 19, 159, 217, 238, 18, 19, 217, 254, 18, 19, 159, 217, 254, - 18, 19, 217, 253, 18, 19, 159, 217, 253, 18, 19, 229, 195, 217, 253, 18, - 19, 222, 93, 18, 19, 253, 213, 222, 93, 18, 19, 217, 255, 18, 19, 251, - 226, 222, 93, 18, 19, 230, 132, 219, 110, 18, 19, 229, 195, 219, 101, 18, - 19, 229, 195, 222, 91, 18, 19, 229, 195, 218, 237, 18, 19, 229, 195, 218, - 87, 18, 19, 229, 195, 219, 100, 18, 19, 229, 195, 221, 186, 18, 19, 220, - 65, 18, 19, 220, 34, 18, 19, 220, 29, 18, 19, 220, 9, 18, 19, 220, 3, 18, - 19, 220, 104, 18, 19, 220, 100, 18, 19, 219, 208, 18, 19, 159, 219, 208, - 18, 19, 219, 207, 18, 19, 159, 219, 207, 18, 19, 219, 206, 18, 19, 159, - 219, 206, 18, 19, 219, 205, 18, 19, 159, 219, 205, 18, 19, 219, 204, 18, - 19, 159, 219, 204, 18, 19, 219, 210, 18, 19, 159, 219, 210, 18, 19, 219, - 209, 18, 19, 159, 219, 209, 18, 19, 220, 106, 18, 19, 211, 47, 18, 19, - 211, 101, 18, 19, 211, 8, 18, 19, 210, 255, 18, 19, 210, 244, 18, 19, - 210, 229, 18, 19, 211, 116, 210, 229, 18, 19, 192, 18, 19, 211, 103, 18, - 19, 210, 174, 18, 19, 159, 210, 174, 18, 19, 210, 173, 18, 19, 159, 210, - 173, 18, 19, 210, 172, 18, 19, 159, 210, 172, 18, 19, 210, 171, 18, 19, - 159, 210, 171, 18, 19, 210, 170, 18, 19, 159, 210, 170, 18, 19, 210, 176, - 18, 19, 159, 210, 176, 18, 19, 210, 175, 18, 19, 159, 210, 175, 18, 19, - 229, 195, 210, 175, 18, 19, 211, 117, 18, 19, 252, 12, 211, 117, 18, 19, - 159, 211, 117, 18, 19, 221, 211, 211, 8, 18, 19, 223, 131, 18, 19, 223, - 226, 223, 131, 18, 19, 159, 233, 64, 18, 19, 223, 186, 18, 19, 223, 38, - 18, 19, 222, 242, 18, 19, 222, 213, 18, 19, 222, 199, 18, 19, 159, 232, - 162, 18, 19, 205, 18, 19, 223, 187, 18, 19, 159, 233, 141, 18, 19, 222, - 110, 18, 19, 159, 222, 110, 18, 19, 153, 18, 19, 159, 153, 18, 19, 147, - 153, 18, 19, 244, 162, 18, 19, 244, 201, 18, 19, 244, 129, 18, 19, 244, - 116, 18, 19, 244, 51, 18, 19, 244, 42, 18, 19, 244, 204, 18, 19, 244, - 203, 18, 19, 243, 219, 18, 19, 159, 243, 219, 18, 19, 245, 14, 18, 19, - 216, 196, 18, 19, 230, 28, 216, 196, 18, 19, 216, 176, 18, 19, 230, 28, - 216, 176, 18, 19, 216, 172, 18, 19, 230, 28, 216, 172, 18, 19, 216, 157, - 18, 19, 216, 154, 18, 19, 216, 209, 18, 19, 216, 208, 18, 19, 216, 128, - 18, 19, 159, 216, 128, 18, 19, 216, 211, 18, 19, 215, 143, 18, 19, 215, - 141, 18, 19, 215, 140, 18, 19, 215, 145, 18, 19, 215, 146, 18, 19, 215, - 52, 18, 19, 215, 51, 18, 19, 215, 50, 18, 19, 215, 53, 18, 19, 227, 197, - 241, 245, 18, 19, 227, 197, 241, 187, 18, 19, 227, 197, 241, 168, 18, 19, - 227, 197, 241, 75, 18, 19, 227, 197, 241, 60, 18, 19, 227, 197, 162, 18, - 19, 227, 197, 242, 53, 18, 19, 227, 197, 242, 67, 18, 19, 227, 196, 242, - 67, 18, 19, 241, 161, 18, 19, 224, 87, 18, 19, 224, 56, 18, 19, 224, 51, - 18, 19, 224, 45, 18, 19, 224, 40, 18, 19, 224, 91, 18, 19, 224, 90, 18, - 19, 224, 99, 18, 19, 216, 56, 18, 19, 216, 54, 18, 19, 216, 53, 18, 19, - 216, 57, 18, 19, 159, 223, 131, 18, 19, 159, 223, 38, 18, 19, 159, 222, - 213, 18, 19, 159, 205, 18, 19, 229, 80, 18, 19, 229, 32, 18, 19, 229, 28, - 18, 19, 229, 9, 18, 19, 229, 4, 18, 19, 229, 82, 18, 19, 229, 81, 18, 19, - 229, 84, 18, 19, 228, 108, 18, 19, 221, 211, 220, 65, 18, 19, 221, 211, - 220, 34, 18, 19, 221, 211, 220, 9, 18, 19, 221, 211, 220, 104, 18, 19, - 211, 213, 216, 196, 18, 19, 211, 213, 216, 176, 18, 19, 211, 213, 216, - 157, 18, 19, 211, 213, 216, 209, 18, 19, 211, 213, 216, 211, 18, 19, 232, - 254, 18, 19, 232, 253, 18, 19, 232, 252, 18, 19, 232, 251, 18, 19, 233, - 4, 18, 19, 233, 3, 18, 19, 233, 5, 18, 19, 216, 210, 216, 196, 18, 19, - 216, 210, 216, 176, 18, 19, 216, 210, 216, 172, 18, 19, 216, 210, 216, - 157, 18, 19, 216, 210, 216, 154, 18, 19, 216, 210, 216, 209, 18, 19, 216, - 210, 216, 208, 18, 19, 216, 210, 216, 211, 18, 19, 254, 198, 253, 166, - 18, 19, 251, 226, 76, 18, 19, 251, 226, 74, 18, 19, 251, 226, 78, 18, 19, - 251, 226, 61, 18, 19, 251, 226, 212, 22, 18, 19, 251, 226, 211, 250, 18, - 19, 251, 226, 211, 227, 18, 19, 251, 226, 212, 65, 18, 19, 251, 226, 229, - 112, 18, 19, 251, 226, 228, 238, 18, 19, 251, 226, 228, 79, 18, 19, 251, - 226, 198, 18, 19, 251, 226, 234, 188, 18, 19, 251, 226, 234, 98, 18, 19, - 251, 226, 234, 34, 18, 19, 251, 226, 176, 18, 19, 221, 211, 241, 245, 18, - 19, 221, 211, 241, 187, 18, 19, 221, 211, 241, 75, 18, 19, 221, 211, 162, - 18, 19, 73, 242, 227, 18, 19, 73, 242, 231, 18, 19, 73, 242, 243, 18, 19, - 73, 242, 242, 18, 19, 73, 242, 232, 18, 19, 73, 243, 0, 18, 19, 73, 222, - 142, 18, 19, 73, 222, 213, 18, 19, 73, 223, 131, 18, 19, 73, 223, 111, - 18, 19, 73, 223, 38, 18, 19, 73, 205, 18, 19, 73, 211, 195, 18, 19, 73, - 211, 227, 18, 19, 73, 212, 22, 18, 19, 73, 212, 17, 18, 19, 73, 211, 250, - 18, 19, 73, 212, 65, 18, 19, 73, 240, 201, 18, 19, 73, 240, 202, 18, 19, - 73, 240, 205, 18, 19, 73, 240, 204, 18, 19, 73, 240, 203, 18, 19, 73, - 240, 207, 18, 19, 73, 216, 137, 18, 19, 73, 216, 157, 18, 19, 73, 216, - 196, 18, 19, 73, 216, 195, 18, 19, 73, 216, 176, 18, 19, 73, 216, 209, - 18, 19, 73, 215, 124, 18, 19, 73, 215, 134, 18, 19, 73, 215, 152, 18, 19, - 73, 215, 151, 18, 19, 73, 215, 136, 18, 19, 73, 215, 157, 18, 19, 73, - 224, 153, 18, 19, 73, 225, 19, 18, 19, 73, 225, 224, 18, 19, 73, 225, - 214, 18, 19, 73, 225, 111, 18, 19, 73, 191, 18, 19, 73, 226, 109, 18, 19, - 73, 242, 120, 18, 19, 73, 242, 181, 18, 19, 73, 243, 69, 18, 19, 73, 243, - 62, 18, 19, 73, 242, 221, 18, 19, 73, 243, 142, 18, 19, 73, 234, 106, 18, - 19, 73, 234, 111, 18, 19, 73, 234, 125, 18, 19, 73, 234, 124, 18, 19, 73, - 234, 118, 18, 19, 73, 234, 138, 18, 19, 73, 234, 47, 18, 19, 73, 234, 48, - 18, 19, 73, 234, 51, 18, 19, 73, 234, 50, 18, 19, 73, 234, 49, 18, 19, - 73, 234, 52, 18, 19, 73, 234, 53, 18, 19, 73, 227, 242, 18, 19, 73, 228, - 79, 18, 19, 73, 229, 112, 18, 19, 73, 229, 108, 18, 19, 73, 228, 238, 18, - 19, 73, 198, 18, 19, 73, 230, 107, 18, 19, 73, 230, 166, 18, 19, 73, 231, - 96, 18, 19, 73, 231, 85, 18, 19, 73, 230, 235, 18, 19, 73, 186, 18, 19, - 73, 210, 212, 18, 19, 73, 210, 244, 18, 19, 73, 211, 47, 18, 19, 73, 211, - 44, 18, 19, 73, 211, 8, 18, 19, 73, 192, 18, 19, 73, 235, 57, 18, 19, - 221, 211, 235, 57, 18, 19, 73, 235, 74, 18, 19, 73, 235, 132, 18, 19, 73, - 235, 130, 18, 19, 73, 235, 114, 18, 19, 221, 211, 235, 114, 18, 19, 73, - 235, 147, 18, 19, 73, 235, 87, 18, 19, 73, 235, 91, 18, 19, 73, 235, 101, - 18, 19, 73, 235, 100, 18, 19, 73, 235, 99, 18, 19, 73, 235, 102, 18, 19, - 73, 232, 103, 18, 19, 73, 232, 162, 18, 19, 73, 233, 64, 18, 19, 73, 233, - 56, 18, 19, 73, 232, 247, 18, 19, 73, 233, 141, 18, 19, 73, 247, 157, 18, - 19, 73, 247, 158, 18, 19, 73, 247, 163, 18, 19, 73, 247, 162, 18, 19, 73, - 247, 159, 18, 19, 73, 247, 164, 18, 19, 73, 232, 250, 18, 19, 73, 232, - 252, 18, 19, 73, 233, 0, 18, 19, 73, 232, 255, 18, 19, 73, 232, 254, 18, - 19, 73, 233, 4, 18, 19, 73, 216, 51, 18, 19, 73, 216, 53, 18, 19, 73, - 216, 56, 18, 19, 73, 216, 55, 18, 19, 73, 216, 54, 18, 19, 73, 216, 57, - 18, 19, 73, 216, 46, 18, 19, 73, 216, 47, 18, 19, 73, 216, 59, 18, 19, - 73, 216, 58, 18, 19, 73, 216, 48, 18, 19, 73, 216, 60, 18, 19, 73, 210, - 13, 18, 19, 73, 210, 23, 18, 19, 73, 210, 94, 18, 19, 73, 210, 92, 18, - 19, 73, 210, 44, 18, 19, 73, 210, 116, 18, 19, 73, 210, 159, 18, 19, 73, - 65, 210, 159, 18, 19, 73, 246, 36, 18, 19, 73, 246, 37, 18, 19, 73, 246, - 44, 18, 19, 73, 246, 43, 18, 19, 73, 246, 39, 18, 19, 73, 246, 46, 18, - 19, 73, 218, 84, 18, 19, 73, 219, 60, 18, 19, 73, 221, 183, 18, 19, 73, - 221, 172, 18, 19, 73, 219, 193, 18, 19, 73, 206, 18, 19, 73, 219, 227, - 18, 19, 73, 220, 9, 18, 19, 73, 220, 65, 18, 19, 73, 220, 63, 18, 19, 73, - 220, 34, 18, 19, 73, 220, 104, 18, 19, 73, 220, 106, 18, 19, 73, 215, - 164, 18, 19, 73, 215, 167, 18, 19, 73, 215, 179, 18, 19, 73, 215, 178, - 18, 19, 73, 215, 168, 18, 19, 73, 215, 184, 18, 19, 73, 250, 77, 18, 19, - 73, 250, 94, 18, 19, 73, 250, 139, 18, 19, 73, 250, 136, 18, 19, 73, 250, - 118, 18, 19, 73, 250, 165, 18, 19, 73, 215, 127, 18, 19, 73, 215, 128, - 18, 19, 73, 215, 131, 18, 19, 73, 215, 130, 18, 19, 73, 215, 129, 18, 19, - 73, 215, 132, 18, 19, 250, 119, 50, 18, 19, 243, 236, 218, 131, 18, 19, - 224, 83, 18, 19, 229, 78, 18, 19, 228, 105, 18, 19, 228, 104, 18, 19, - 228, 103, 18, 19, 228, 102, 18, 19, 228, 107, 18, 19, 228, 106, 18, 19, - 211, 213, 216, 126, 18, 19, 211, 213, 216, 125, 18, 19, 211, 213, 216, - 124, 18, 19, 211, 213, 216, 123, 18, 19, 211, 213, 216, 122, 18, 19, 211, - 213, 216, 129, 18, 19, 211, 213, 216, 128, 18, 19, 211, 213, 40, 216, - 211, 18, 19, 251, 226, 212, 98, 226, 230, 219, 21, 79, 226, 230, 1, 252, - 56, 226, 230, 1, 232, 92, 226, 230, 1, 244, 159, 226, 230, 1, 222, 17, - 226, 230, 1, 228, 198, 226, 230, 1, 214, 226, 226, 230, 1, 248, 205, 226, - 230, 1, 216, 81, 226, 230, 1, 249, 237, 226, 230, 1, 250, 188, 226, 230, - 1, 230, 96, 226, 230, 1, 242, 163, 226, 230, 1, 229, 68, 226, 230, 1, - 218, 124, 226, 230, 1, 222, 137, 226, 230, 1, 254, 207, 226, 230, 1, 226, - 191, 226, 230, 1, 214, 150, 226, 230, 1, 245, 239, 226, 230, 1, 235, 195, - 226, 230, 1, 245, 240, 226, 230, 1, 226, 162, 226, 230, 1, 214, 206, 226, - 230, 1, 236, 46, 226, 230, 1, 245, 237, 226, 230, 1, 225, 205, 226, 230, - 244, 158, 79, 226, 230, 223, 52, 244, 158, 79, 178, 1, 244, 149, 244, - 141, 244, 163, 245, 14, 178, 1, 214, 105, 178, 1, 214, 135, 214, 151, 69, - 178, 1, 210, 214, 178, 1, 211, 117, 178, 1, 212, 98, 178, 1, 216, 131, - 216, 130, 216, 152, 178, 1, 245, 67, 178, 1, 254, 101, 61, 178, 1, 226, - 147, 78, 178, 1, 255, 26, 61, 178, 1, 254, 236, 178, 1, 232, 139, 78, - 178, 1, 219, 246, 78, 178, 1, 78, 178, 1, 226, 238, 178, 1, 226, 200, - 178, 1, 223, 167, 223, 180, 223, 97, 153, 178, 1, 234, 199, 178, 1, 250, - 185, 178, 1, 234, 200, 235, 29, 178, 1, 243, 209, 178, 1, 245, 146, 178, - 1, 243, 65, 242, 73, 243, 209, 178, 1, 243, 103, 178, 1, 211, 188, 211, - 182, 212, 98, 178, 1, 242, 45, 242, 67, 178, 1, 242, 49, 242, 67, 178, 1, - 232, 141, 242, 67, 178, 1, 219, 249, 242, 67, 178, 1, 229, 190, 227, 161, - 229, 191, 230, 30, 178, 1, 219, 247, 230, 30, 178, 1, 246, 123, 178, 1, - 235, 175, 235, 179, 235, 168, 74, 178, 1, 76, 178, 1, 235, 123, 235, 150, - 178, 1, 243, 50, 178, 1, 232, 142, 254, 252, 178, 1, 219, 251, 61, 178, - 1, 235, 160, 245, 121, 178, 1, 225, 167, 225, 189, 226, 109, 178, 1, 254, - 172, 245, 119, 178, 1, 219, 26, 222, 93, 178, 1, 219, 181, 232, 138, 222, - 93, 178, 1, 219, 245, 222, 93, 178, 1, 251, 74, 178, 1, 210, 159, 178, 1, - 216, 64, 216, 74, 215, 41, 217, 153, 178, 1, 219, 244, 217, 153, 178, 1, - 249, 68, 178, 1, 252, 39, 252, 42, 251, 232, 253, 166, 178, 1, 219, 250, - 253, 166, 178, 1, 246, 122, 178, 1, 226, 175, 178, 1, 245, 204, 245, 206, - 76, 178, 1, 231, 183, 231, 191, 194, 178, 1, 232, 140, 194, 178, 1, 219, - 248, 194, 178, 1, 233, 79, 233, 120, 232, 149, 156, 178, 1, 246, 124, - 178, 1, 235, 237, 178, 1, 235, 238, 178, 1, 248, 218, 248, 223, 249, 68, - 178, 1, 226, 142, 245, 66, 78, 178, 1, 245, 235, 178, 1, 235, 194, 178, - 1, 249, 86, 178, 1, 251, 25, 178, 1, 250, 197, 178, 1, 218, 163, 178, 1, - 232, 137, 178, 1, 219, 243, 178, 1, 240, 117, 178, 1, 224, 99, 178, 1, - 211, 178, 178, 219, 157, 224, 143, 178, 230, 90, 224, 143, 178, 249, 139, - 224, 143, 178, 254, 14, 87, 178, 215, 82, 87, 178, 252, 54, 87, 217, 84, - 1, 61, 217, 84, 1, 74, 217, 84, 1, 69, 217, 84, 1, 176, 217, 84, 1, 243, - 142, 217, 84, 1, 229, 82, 217, 84, 1, 217, 106, 217, 84, 1, 248, 229, - 217, 84, 1, 198, 217, 84, 1, 191, 217, 84, 1, 252, 199, 217, 84, 1, 186, - 217, 84, 1, 192, 217, 84, 1, 233, 141, 217, 84, 1, 212, 65, 217, 84, 1, - 206, 217, 84, 1, 162, 217, 84, 25, 5, 74, 217, 84, 25, 5, 69, 217, 84, 5, - 213, 152, 242, 14, 1, 61, 242, 14, 1, 74, 242, 14, 1, 69, 242, 14, 1, - 176, 242, 14, 1, 243, 142, 242, 14, 1, 229, 82, 242, 14, 1, 217, 106, - 242, 14, 1, 248, 229, 242, 14, 1, 198, 242, 14, 1, 191, 242, 14, 1, 252, - 199, 242, 14, 1, 186, 242, 14, 1, 192, 242, 14, 1, 205, 242, 14, 1, 233, - 141, 242, 14, 1, 212, 65, 242, 14, 1, 206, 242, 14, 1, 162, 242, 14, 25, - 5, 74, 242, 14, 25, 5, 69, 242, 14, 5, 226, 53, 225, 129, 219, 157, 224, - 143, 225, 129, 52, 224, 143, 251, 128, 1, 61, 251, 128, 1, 74, 251, 128, - 1, 69, 251, 128, 1, 176, 251, 128, 1, 243, 142, 251, 128, 1, 229, 82, - 251, 128, 1, 217, 106, 251, 128, 1, 248, 229, 251, 128, 1, 198, 251, 128, - 1, 191, 251, 128, 1, 252, 199, 251, 128, 1, 186, 251, 128, 1, 192, 251, - 128, 1, 205, 251, 128, 1, 233, 141, 251, 128, 1, 212, 65, 251, 128, 1, - 206, 251, 128, 1, 162, 251, 128, 25, 5, 74, 251, 128, 25, 5, 69, 217, 83, - 1, 61, 217, 83, 1, 74, 217, 83, 1, 69, 217, 83, 1, 176, 217, 83, 1, 243, - 142, 217, 83, 1, 229, 82, 217, 83, 1, 217, 106, 217, 83, 1, 248, 229, - 217, 83, 1, 198, 217, 83, 1, 191, 217, 83, 1, 252, 199, 217, 83, 1, 186, - 217, 83, 1, 192, 217, 83, 1, 233, 141, 217, 83, 1, 212, 65, 217, 83, 1, - 206, 217, 83, 25, 5, 74, 217, 83, 25, 5, 69, 70, 1, 176, 70, 1, 234, 138, - 70, 1, 234, 34, 70, 1, 234, 111, 70, 1, 229, 9, 70, 1, 251, 41, 70, 1, - 250, 165, 70, 1, 249, 246, 70, 1, 250, 94, 70, 1, 227, 138, 70, 1, 248, - 229, 70, 1, 215, 145, 70, 1, 247, 153, 70, 1, 215, 140, 70, 1, 228, 85, - 70, 1, 217, 106, 70, 1, 216, 209, 70, 1, 112, 70, 1, 216, 157, 70, 1, - 228, 79, 70, 1, 252, 199, 70, 1, 225, 150, 70, 1, 225, 19, 70, 1, 225, - 124, 70, 1, 230, 166, 70, 1, 210, 244, 70, 1, 222, 213, 70, 1, 232, 162, - 70, 1, 213, 138, 70, 1, 220, 104, 70, 1, 218, 186, 70, 1, 206, 70, 1, - 162, 70, 1, 233, 141, 70, 1, 224, 91, 70, 235, 250, 25, 224, 77, 70, 235, - 250, 25, 224, 90, 70, 235, 250, 25, 224, 56, 70, 235, 250, 25, 224, 51, - 70, 235, 250, 25, 224, 33, 70, 235, 250, 25, 224, 5, 70, 235, 250, 25, - 223, 249, 70, 235, 250, 25, 223, 248, 70, 235, 250, 25, 222, 102, 70, - 235, 250, 25, 222, 95, 70, 235, 250, 25, 232, 67, 70, 235, 250, 25, 232, - 57, 70, 235, 250, 25, 224, 72, 70, 235, 250, 25, 224, 83, 70, 235, 250, - 25, 224, 41, 215, 49, 111, 70, 235, 250, 25, 224, 41, 215, 49, 105, 70, - 235, 250, 25, 224, 73, 70, 25, 235, 236, 254, 53, 70, 25, 235, 236, 255, - 82, 70, 25, 5, 255, 82, 70, 25, 5, 74, 70, 25, 5, 236, 40, 70, 25, 5, - 211, 117, 70, 25, 5, 210, 169, 70, 25, 5, 69, 70, 25, 5, 214, 118, 70, - 25, 5, 214, 229, 70, 25, 5, 226, 238, 70, 25, 5, 192, 70, 25, 5, 236, 67, - 70, 25, 5, 76, 70, 25, 5, 254, 252, 70, 25, 5, 254, 210, 70, 25, 5, 226, - 187, 70, 25, 5, 253, 200, 70, 5, 228, 211, 70, 5, 223, 129, 70, 5, 210, - 180, 70, 5, 230, 57, 70, 5, 215, 214, 70, 5, 252, 151, 70, 5, 222, 208, - 70, 5, 216, 41, 70, 5, 234, 247, 70, 5, 254, 212, 70, 5, 221, 246, 221, - 240, 70, 5, 213, 149, 70, 5, 249, 240, 70, 5, 252, 125, 70, 5, 234, 131, - 70, 5, 252, 145, 70, 5, 251, 17, 225, 75, 233, 193, 70, 5, 233, 36, 216, - 18, 70, 5, 252, 28, 70, 5, 225, 126, 230, 104, 70, 5, 234, 15, 70, 249, - 106, 16, 223, 31, 70, 5, 253, 182, 70, 5, 253, 203, 70, 21, 210, 86, 70, - 21, 111, 70, 21, 105, 70, 21, 158, 70, 21, 161, 70, 21, 190, 70, 21, 195, - 70, 21, 199, 70, 21, 196, 70, 21, 201, 70, 16, 233, 36, 253, 205, 219, - 45, 70, 16, 233, 36, 253, 205, 230, 76, 70, 16, 233, 36, 253, 205, 225, - 74, 70, 16, 233, 36, 253, 205, 252, 57, 70, 16, 233, 36, 253, 205, 251, - 111, 70, 16, 233, 36, 253, 205, 224, 218, 70, 16, 233, 36, 253, 205, 224, - 212, 70, 16, 233, 36, 253, 205, 224, 210, 70, 16, 233, 36, 253, 205, 224, - 216, 70, 16, 233, 36, 253, 205, 224, 214, 83, 251, 244, 83, 245, 171, 83, - 249, 227, 83, 243, 236, 218, 131, 83, 249, 234, 83, 244, 19, 247, 126, - 83, 216, 40, 219, 54, 240, 175, 83, 219, 192, 3, 251, 180, 231, 159, 83, - 231, 188, 249, 227, 83, 231, 188, 243, 236, 218, 131, 83, 228, 196, 83, - 244, 5, 45, 221, 159, 111, 83, 244, 5, 45, 221, 159, 105, 83, 244, 5, 45, - 221, 159, 158, 83, 25, 220, 139, 83, 21, 210, 86, 83, 21, 111, 83, 21, - 105, 83, 21, 158, 83, 21, 161, 83, 21, 190, 83, 21, 195, 83, 21, 199, 83, - 21, 196, 83, 21, 201, 83, 1, 61, 83, 1, 76, 83, 1, 74, 83, 1, 78, 83, 1, - 69, 83, 1, 226, 238, 83, 1, 214, 214, 83, 1, 245, 217, 83, 1, 198, 83, 1, - 254, 123, 83, 1, 252, 199, 83, 1, 191, 83, 1, 224, 91, 83, 1, 243, 142, - 83, 1, 186, 83, 1, 233, 141, 83, 1, 206, 83, 1, 220, 104, 83, 1, 217, - 106, 83, 1, 248, 229, 83, 1, 250, 165, 83, 1, 235, 147, 83, 1, 192, 83, - 1, 205, 83, 1, 212, 65, 83, 1, 244, 204, 83, 1, 176, 83, 1, 234, 138, 83, - 1, 215, 184, 83, 1, 210, 116, 83, 1, 242, 53, 83, 1, 210, 16, 83, 1, 233, - 4, 83, 1, 210, 69, 83, 1, 250, 118, 83, 1, 216, 40, 200, 25, 50, 83, 1, - 216, 40, 76, 83, 1, 216, 40, 74, 83, 1, 216, 40, 78, 83, 1, 216, 40, 69, - 83, 1, 216, 40, 226, 238, 83, 1, 216, 40, 214, 214, 83, 1, 216, 40, 254, - 123, 83, 1, 216, 40, 252, 199, 83, 1, 216, 40, 191, 83, 1, 216, 40, 224, - 91, 83, 1, 216, 40, 243, 142, 83, 1, 216, 40, 186, 83, 1, 216, 40, 217, - 106, 83, 1, 216, 40, 248, 229, 83, 1, 216, 40, 250, 165, 83, 1, 216, 40, - 235, 147, 83, 1, 216, 40, 215, 184, 83, 1, 216, 40, 192, 83, 1, 216, 40, - 212, 65, 83, 1, 216, 40, 176, 83, 1, 216, 40, 243, 139, 83, 1, 216, 40, - 242, 53, 83, 1, 216, 40, 235, 113, 83, 1, 216, 40, 228, 236, 83, 1, 216, - 40, 246, 46, 83, 1, 219, 192, 76, 83, 1, 219, 192, 74, 83, 1, 219, 192, - 235, 158, 83, 1, 219, 192, 214, 214, 83, 1, 219, 192, 69, 83, 1, 219, - 192, 254, 123, 83, 1, 219, 192, 176, 83, 1, 219, 192, 243, 142, 83, 1, - 219, 192, 162, 83, 1, 219, 192, 191, 83, 1, 219, 192, 220, 104, 83, 1, - 219, 192, 217, 106, 83, 1, 219, 192, 248, 229, 83, 1, 219, 192, 235, 147, - 83, 1, 219, 192, 244, 204, 83, 1, 219, 192, 243, 139, 83, 1, 219, 192, - 242, 53, 83, 1, 219, 192, 215, 184, 83, 1, 219, 192, 210, 116, 83, 1, - 219, 192, 223, 187, 83, 1, 219, 192, 250, 165, 83, 1, 219, 192, 210, 82, - 83, 1, 231, 188, 74, 83, 1, 231, 188, 176, 83, 1, 231, 188, 205, 83, 1, - 231, 188, 244, 204, 83, 1, 231, 188, 210, 82, 83, 1, 254, 171, 243, 123, - 254, 84, 111, 83, 1, 254, 171, 243, 123, 213, 148, 111, 83, 1, 254, 171, - 243, 123, 248, 194, 83, 1, 254, 171, 243, 123, 214, 224, 83, 1, 254, 171, - 243, 123, 235, 200, 214, 224, 83, 1, 254, 171, 243, 123, 252, 163, 83, 1, - 254, 171, 243, 123, 134, 252, 163, 83, 1, 254, 171, 243, 123, 61, 83, 1, - 254, 171, 243, 123, 74, 83, 1, 254, 171, 243, 123, 176, 83, 1, 254, 171, - 243, 123, 229, 82, 83, 1, 254, 171, 243, 123, 251, 41, 83, 1, 254, 171, - 243, 123, 215, 157, 83, 1, 254, 171, 243, 123, 215, 145, 83, 1, 254, 171, - 243, 123, 248, 143, 83, 1, 254, 171, 243, 123, 228, 115, 83, 1, 254, 171, - 243, 123, 217, 106, 83, 1, 254, 171, 243, 123, 248, 229, 83, 1, 254, 171, - 243, 123, 191, 83, 1, 254, 171, 243, 123, 225, 150, 83, 1, 254, 171, 243, - 123, 218, 225, 83, 1, 254, 171, 243, 123, 210, 82, 83, 1, 254, 171, 243, - 123, 210, 116, 83, 1, 254, 171, 243, 123, 254, 218, 83, 1, 216, 40, 254, - 171, 243, 123, 217, 106, 83, 1, 216, 40, 254, 171, 243, 123, 210, 82, 83, - 1, 231, 188, 254, 171, 243, 123, 243, 0, 83, 1, 231, 188, 254, 171, 243, - 123, 229, 82, 83, 1, 231, 188, 254, 171, 243, 123, 251, 41, 83, 1, 231, - 188, 254, 171, 243, 123, 235, 120, 83, 1, 231, 188, 254, 171, 243, 123, - 215, 157, 83, 1, 231, 188, 254, 171, 243, 123, 248, 127, 83, 1, 231, 188, - 254, 171, 243, 123, 217, 106, 83, 1, 231, 188, 254, 171, 243, 123, 248, - 33, 83, 1, 231, 188, 254, 171, 243, 123, 218, 225, 83, 1, 231, 188, 254, - 171, 243, 123, 249, 80, 83, 1, 231, 188, 254, 171, 243, 123, 210, 82, 83, - 1, 231, 188, 254, 171, 243, 123, 210, 116, 83, 1, 254, 171, 243, 123, - 163, 69, 83, 1, 254, 171, 243, 123, 163, 192, 83, 1, 231, 188, 254, 171, - 243, 123, 252, 26, 83, 1, 254, 171, 243, 123, 248, 219, 83, 1, 231, 188, - 254, 171, 243, 123, 233, 4, 18, 19, 226, 113, 18, 19, 253, 175, 18, 19, - 255, 37, 18, 19, 212, 25, 18, 19, 224, 224, 18, 19, 225, 233, 18, 19, - 224, 108, 18, 19, 217, 32, 18, 19, 234, 195, 18, 19, 233, 185, 18, 19, - 231, 137, 18, 19, 228, 42, 18, 19, 229, 186, 18, 19, 233, 74, 18, 19, - 219, 24, 18, 19, 221, 213, 18, 19, 219, 234, 18, 19, 220, 68, 18, 19, - 219, 203, 18, 19, 210, 220, 18, 19, 211, 52, 18, 19, 223, 137, 18, 19, - 227, 175, 18, 19, 226, 220, 227, 175, 18, 19, 227, 174, 18, 19, 226, 220, - 227, 174, 18, 19, 227, 173, 18, 19, 226, 220, 227, 173, 18, 19, 227, 172, - 18, 19, 226, 220, 227, 172, 18, 19, 222, 107, 18, 19, 222, 106, 18, 19, - 222, 105, 18, 19, 222, 104, 18, 19, 222, 103, 18, 19, 222, 111, 18, 19, - 226, 220, 226, 109, 18, 19, 226, 220, 217, 153, 18, 19, 226, 220, 235, - 29, 18, 19, 226, 220, 251, 74, 18, 19, 226, 220, 194, 18, 19, 226, 220, - 230, 30, 18, 19, 226, 220, 222, 93, 18, 19, 226, 220, 220, 106, 18, 19, - 245, 227, 212, 98, 18, 19, 212, 7, 212, 98, 18, 19, 40, 4, 222, 236, 18, - 19, 40, 223, 160, 247, 128, 18, 19, 223, 226, 222, 108, 18, 19, 159, 232, - 133, 18, 19, 159, 233, 140, 18, 19, 216, 127, 18, 19, 216, 129, 18, 19, - 215, 137, 18, 19, 215, 139, 18, 19, 215, 144, 18, 19, 216, 50, 18, 19, - 216, 52, 18, 19, 221, 211, 219, 208, 18, 19, 221, 211, 220, 3, 18, 19, - 221, 211, 241, 60, 18, 19, 73, 242, 80, 18, 19, 73, 248, 60, 243, 62, 18, - 19, 73, 243, 139, 18, 19, 73, 242, 85, 18, 19, 221, 211, 235, 39, 18, 19, - 73, 235, 37, 18, 19, 252, 76, 248, 60, 156, 18, 19, 252, 76, 248, 60, - 153, 18, 19, 73, 248, 55, 222, 93, 232, 229, 213, 122, 233, 16, 232, 229, - 1, 176, 232, 229, 1, 234, 138, 232, 229, 1, 243, 142, 232, 229, 1, 243, - 0, 232, 229, 1, 229, 82, 232, 229, 1, 251, 41, 232, 229, 1, 250, 165, - 232, 229, 1, 235, 147, 232, 229, 1, 235, 120, 232, 229, 1, 211, 71, 232, - 229, 1, 217, 106, 232, 229, 1, 216, 209, 232, 229, 1, 248, 229, 232, 229, - 1, 248, 33, 232, 229, 1, 198, 232, 229, 1, 191, 232, 229, 1, 225, 150, - 232, 229, 1, 252, 199, 232, 229, 1, 252, 26, 232, 229, 1, 186, 232, 229, - 1, 192, 232, 229, 1, 205, 232, 229, 1, 233, 141, 232, 229, 1, 212, 65, - 232, 229, 1, 220, 104, 232, 229, 1, 218, 225, 232, 229, 1, 206, 232, 229, - 1, 162, 232, 229, 25, 5, 61, 232, 229, 25, 5, 74, 232, 229, 25, 5, 69, - 232, 229, 25, 5, 245, 217, 232, 229, 25, 5, 254, 210, 232, 229, 25, 5, - 226, 187, 232, 229, 25, 5, 253, 200, 232, 229, 25, 5, 76, 232, 229, 25, - 5, 78, 232, 229, 218, 74, 1, 192, 232, 229, 218, 74, 1, 205, 232, 229, - 218, 74, 1, 212, 65, 232, 229, 4, 1, 176, 232, 229, 4, 1, 229, 82, 232, - 229, 4, 1, 254, 83, 232, 229, 4, 1, 217, 106, 232, 229, 4, 1, 198, 232, - 229, 4, 1, 191, 232, 229, 4, 1, 186, 232, 229, 4, 1, 205, 232, 229, 4, 1, - 233, 141, 232, 229, 5, 230, 94, 232, 229, 5, 234, 177, 232, 229, 5, 222, - 34, 232, 229, 5, 232, 133, 232, 229, 245, 39, 79, 232, 229, 224, 16, 79, - 232, 229, 21, 210, 86, 232, 229, 21, 111, 232, 229, 21, 105, 232, 229, - 21, 158, 232, 229, 21, 161, 232, 229, 21, 190, 232, 229, 21, 195, 232, - 229, 21, 199, 232, 229, 21, 196, 232, 229, 21, 201, 39, 233, 65, 1, 176, - 39, 233, 65, 1, 211, 165, 39, 233, 65, 1, 229, 82, 39, 233, 65, 1, 215, - 184, 39, 233, 65, 1, 206, 39, 233, 65, 1, 192, 39, 233, 65, 1, 217, 106, - 39, 233, 65, 1, 216, 209, 39, 233, 65, 1, 233, 141, 39, 233, 65, 1, 191, - 39, 233, 65, 1, 225, 150, 39, 233, 65, 1, 186, 39, 233, 65, 1, 244, 204, - 39, 233, 65, 1, 214, 27, 39, 233, 65, 1, 162, 39, 233, 65, 1, 224, 91, - 39, 233, 65, 1, 234, 138, 39, 233, 65, 1, 215, 176, 39, 233, 65, 1, 198, - 39, 233, 65, 1, 61, 39, 233, 65, 1, 74, 39, 233, 65, 1, 245, 217, 39, - 233, 65, 1, 245, 205, 39, 233, 65, 1, 69, 39, 233, 65, 1, 226, 187, 39, - 233, 65, 1, 78, 39, 233, 65, 1, 214, 214, 39, 233, 65, 1, 76, 39, 233, - 65, 1, 253, 198, 39, 233, 65, 1, 254, 210, 39, 233, 65, 1, 216, 29, 39, - 233, 65, 1, 216, 28, 39, 233, 65, 1, 216, 27, 39, 233, 65, 1, 216, 26, - 39, 233, 65, 1, 216, 25, 166, 39, 173, 1, 125, 224, 91, 166, 39, 173, 1, - 121, 224, 91, 166, 39, 173, 1, 125, 176, 166, 39, 173, 1, 125, 211, 165, - 166, 39, 173, 1, 125, 229, 82, 166, 39, 173, 1, 121, 176, 166, 39, 173, - 1, 121, 211, 165, 166, 39, 173, 1, 121, 229, 82, 166, 39, 173, 1, 125, - 215, 184, 166, 39, 173, 1, 125, 206, 166, 39, 173, 1, 125, 192, 166, 39, - 173, 1, 121, 215, 184, 166, 39, 173, 1, 121, 206, 166, 39, 173, 1, 121, - 192, 166, 39, 173, 1, 125, 217, 106, 166, 39, 173, 1, 125, 216, 209, 166, - 39, 173, 1, 125, 198, 166, 39, 173, 1, 121, 217, 106, 166, 39, 173, 1, - 121, 216, 209, 166, 39, 173, 1, 121, 198, 166, 39, 173, 1, 125, 191, 166, - 39, 173, 1, 125, 225, 150, 166, 39, 173, 1, 125, 186, 166, 39, 173, 1, - 121, 191, 166, 39, 173, 1, 121, 225, 150, 166, 39, 173, 1, 121, 186, 166, - 39, 173, 1, 125, 244, 204, 166, 39, 173, 1, 125, 214, 27, 166, 39, 173, - 1, 125, 233, 141, 166, 39, 173, 1, 121, 244, 204, 166, 39, 173, 1, 121, - 214, 27, 166, 39, 173, 1, 121, 233, 141, 166, 39, 173, 1, 125, 162, 166, - 39, 173, 1, 125, 248, 229, 166, 39, 173, 1, 125, 252, 199, 166, 39, 173, - 1, 121, 162, 166, 39, 173, 1, 121, 248, 229, 166, 39, 173, 1, 121, 252, - 199, 166, 39, 173, 1, 125, 233, 190, 166, 39, 173, 1, 125, 211, 138, 166, - 39, 173, 1, 121, 233, 190, 166, 39, 173, 1, 121, 211, 138, 166, 39, 173, - 1, 125, 218, 83, 166, 39, 173, 1, 121, 218, 83, 166, 39, 173, 25, 5, 25, - 219, 241, 166, 39, 173, 25, 5, 255, 82, 166, 39, 173, 25, 5, 236, 40, - 166, 39, 173, 25, 5, 69, 166, 39, 173, 25, 5, 214, 118, 166, 39, 173, 25, - 5, 76, 166, 39, 173, 25, 5, 254, 252, 166, 39, 173, 25, 5, 78, 166, 39, - 173, 25, 5, 227, 4, 166, 39, 173, 25, 5, 214, 214, 166, 39, 173, 25, 5, - 253, 175, 166, 39, 173, 25, 5, 255, 37, 166, 39, 173, 25, 5, 214, 111, - 166, 39, 173, 25, 5, 226, 113, 166, 39, 173, 25, 5, 227, 1, 166, 39, 173, - 25, 5, 214, 210, 166, 39, 173, 25, 5, 235, 158, 166, 39, 173, 1, 40, 214, - 105, 166, 39, 173, 1, 40, 229, 84, 166, 39, 173, 1, 40, 230, 30, 166, 39, - 173, 1, 40, 194, 166, 39, 173, 1, 40, 235, 29, 166, 39, 173, 1, 40, 249, - 68, 166, 39, 173, 1, 40, 253, 166, 166, 39, 173, 138, 231, 163, 166, 39, - 173, 138, 231, 162, 166, 39, 173, 21, 210, 86, 166, 39, 173, 21, 111, - 166, 39, 173, 21, 105, 166, 39, 173, 21, 158, 166, 39, 173, 21, 161, 166, - 39, 173, 21, 190, 166, 39, 173, 21, 195, 166, 39, 173, 21, 199, 166, 39, - 173, 21, 196, 166, 39, 173, 21, 201, 166, 39, 173, 89, 21, 111, 166, 39, - 173, 5, 233, 126, 166, 39, 173, 5, 233, 125, 70, 16, 225, 240, 70, 16, - 230, 77, 234, 31, 70, 16, 225, 75, 234, 31, 70, 16, 252, 58, 234, 31, 70, - 16, 251, 112, 234, 31, 70, 16, 224, 219, 234, 31, 70, 16, 224, 213, 234, - 31, 70, 16, 224, 211, 234, 31, 70, 16, 224, 217, 234, 31, 70, 16, 224, - 215, 234, 31, 70, 16, 248, 181, 234, 31, 70, 16, 248, 177, 234, 31, 70, - 16, 248, 176, 234, 31, 70, 16, 248, 179, 234, 31, 70, 16, 248, 178, 234, - 31, 70, 16, 248, 175, 234, 31, 70, 16, 215, 87, 70, 16, 230, 77, 222, - 207, 70, 16, 225, 75, 222, 207, 70, 16, 252, 58, 222, 207, 70, 16, 251, - 112, 222, 207, 70, 16, 224, 219, 222, 207, 70, 16, 224, 213, 222, 207, - 70, 16, 224, 211, 222, 207, 70, 16, 224, 217, 222, 207, 70, 16, 224, 215, - 222, 207, 70, 16, 248, 181, 222, 207, 70, 16, 248, 177, 222, 207, 70, 16, - 248, 176, 222, 207, 70, 16, 248, 179, 222, 207, 70, 16, 248, 178, 222, - 207, 70, 16, 248, 175, 222, 207, 251, 129, 1, 176, 251, 129, 1, 243, 142, - 251, 129, 1, 229, 82, 251, 129, 1, 229, 27, 251, 129, 1, 191, 251, 129, - 1, 252, 199, 251, 129, 1, 186, 251, 129, 1, 230, 110, 251, 129, 1, 217, - 106, 251, 129, 1, 248, 229, 251, 129, 1, 198, 251, 129, 1, 228, 41, 251, - 129, 1, 251, 41, 251, 129, 1, 235, 147, 251, 129, 1, 227, 169, 251, 129, - 1, 227, 162, 251, 129, 1, 192, 251, 129, 1, 205, 251, 129, 1, 233, 141, - 251, 129, 1, 214, 27, 251, 129, 1, 206, 251, 129, 1, 61, 251, 129, 1, - 162, 251, 129, 25, 5, 74, 251, 129, 25, 5, 69, 251, 129, 25, 5, 76, 251, - 129, 25, 5, 78, 251, 129, 25, 5, 254, 252, 251, 129, 226, 64, 251, 129, - 245, 151, 64, 221, 174, 39, 89, 1, 125, 176, 39, 89, 1, 125, 234, 138, - 39, 89, 1, 125, 233, 177, 39, 89, 1, 121, 176, 39, 89, 1, 121, 233, 177, - 39, 89, 1, 121, 234, 138, 39, 89, 1, 229, 82, 39, 89, 1, 125, 251, 41, - 39, 89, 1, 125, 250, 165, 39, 89, 1, 121, 251, 41, 39, 89, 1, 121, 206, - 39, 89, 1, 121, 250, 165, 39, 89, 1, 227, 169, 39, 89, 1, 223, 143, 39, - 89, 1, 125, 223, 141, 39, 89, 1, 248, 229, 39, 89, 1, 121, 223, 141, 39, - 89, 1, 223, 152, 39, 89, 1, 125, 217, 106, 39, 89, 1, 125, 216, 209, 39, - 89, 1, 121, 217, 106, 39, 89, 1, 121, 216, 209, 39, 89, 1, 198, 39, 89, - 1, 252, 199, 39, 89, 1, 125, 191, 39, 89, 1, 125, 225, 150, 39, 89, 1, - 125, 244, 204, 39, 89, 1, 121, 191, 39, 89, 1, 121, 244, 204, 39, 89, 1, - 121, 225, 150, 39, 89, 1, 186, 39, 89, 1, 121, 192, 39, 89, 1, 125, 192, - 39, 89, 1, 205, 39, 89, 1, 222, 139, 39, 89, 1, 233, 141, 39, 89, 1, 232, - 98, 39, 89, 1, 212, 65, 39, 89, 1, 125, 220, 104, 39, 89, 1, 125, 218, - 225, 39, 89, 1, 125, 206, 39, 89, 1, 125, 162, 39, 89, 1, 232, 190, 39, - 89, 1, 61, 39, 89, 1, 121, 162, 39, 89, 1, 74, 39, 89, 1, 236, 40, 39, - 89, 1, 69, 39, 89, 1, 214, 118, 39, 89, 1, 245, 217, 39, 89, 1, 226, 187, - 39, 89, 1, 233, 126, 39, 89, 1, 242, 139, 206, 39, 89, 117, 5, 147, 205, - 39, 89, 117, 5, 147, 233, 141, 39, 89, 117, 5, 233, 142, 217, 59, 233, - 115, 39, 89, 5, 231, 209, 234, 237, 233, 115, 39, 89, 117, 5, 40, 229, - 82, 39, 89, 117, 5, 121, 191, 39, 89, 117, 5, 125, 223, 142, 177, 121, - 191, 39, 89, 117, 5, 186, 39, 89, 117, 5, 252, 199, 39, 89, 117, 5, 206, - 39, 89, 5, 222, 12, 39, 89, 25, 5, 61, 39, 89, 25, 5, 231, 209, 221, 228, - 39, 89, 25, 5, 255, 82, 39, 89, 25, 5, 217, 65, 255, 82, 39, 89, 25, 5, - 74, 39, 89, 25, 5, 236, 40, 39, 89, 25, 5, 214, 214, 39, 89, 25, 5, 214, - 117, 39, 89, 25, 5, 69, 39, 89, 25, 5, 214, 118, 39, 89, 25, 5, 78, 39, - 89, 25, 5, 227, 5, 51, 39, 89, 25, 5, 226, 113, 39, 89, 25, 5, 76, 39, - 89, 25, 5, 254, 252, 39, 89, 25, 5, 226, 187, 39, 89, 25, 5, 254, 210, - 39, 89, 25, 5, 89, 254, 210, 39, 89, 25, 5, 227, 5, 48, 39, 89, 5, 231, - 209, 234, 236, 39, 89, 5, 216, 30, 39, 89, 5, 216, 29, 39, 89, 5, 234, - 103, 216, 28, 39, 89, 5, 234, 103, 216, 27, 39, 89, 5, 234, 103, 216, 26, - 39, 89, 5, 223, 191, 242, 52, 39, 89, 5, 231, 209, 221, 255, 39, 89, 5, - 234, 102, 234, 221, 39, 89, 38, 249, 123, 247, 128, 39, 89, 241, 53, 21, - 210, 86, 39, 89, 241, 53, 21, 111, 39, 89, 241, 53, 21, 105, 39, 89, 241, - 53, 21, 158, 39, 89, 241, 53, 21, 161, 39, 89, 241, 53, 21, 190, 39, 89, - 241, 53, 21, 195, 39, 89, 241, 53, 21, 199, 39, 89, 241, 53, 21, 196, 39, - 89, 241, 53, 21, 201, 39, 89, 89, 21, 210, 86, 39, 89, 89, 21, 111, 39, - 89, 89, 21, 105, 39, 89, 89, 21, 158, 39, 89, 89, 21, 161, 39, 89, 89, - 21, 190, 39, 89, 89, 21, 195, 39, 89, 89, 21, 199, 39, 89, 89, 21, 196, - 39, 89, 89, 21, 201, 39, 89, 5, 211, 249, 39, 89, 5, 211, 248, 39, 89, 5, - 221, 217, 39, 89, 5, 234, 166, 39, 89, 5, 240, 239, 39, 89, 5, 247, 142, - 39, 89, 5, 223, 52, 222, 189, 223, 152, 39, 89, 5, 231, 209, 211, 72, 39, - 89, 5, 235, 12, 39, 89, 5, 235, 11, 39, 89, 5, 221, 224, 39, 89, 5, 221, - 223, 39, 89, 5, 242, 16, 39, 89, 5, 251, 38, 102, 5, 214, 200, 223, 33, - 102, 5, 214, 200, 251, 9, 102, 5, 250, 194, 102, 5, 218, 16, 102, 5, 251, - 241, 102, 1, 254, 193, 102, 1, 254, 194, 217, 14, 102, 1, 236, 36, 102, - 1, 236, 37, 217, 14, 102, 1, 214, 203, 102, 1, 214, 204, 217, 14, 102, 1, - 223, 191, 223, 82, 102, 1, 223, 191, 223, 83, 217, 14, 102, 1, 233, 142, - 233, 30, 102, 1, 233, 142, 233, 31, 217, 14, 102, 1, 245, 187, 102, 1, - 254, 208, 102, 1, 226, 216, 102, 1, 226, 217, 217, 14, 102, 1, 176, 102, - 1, 235, 19, 231, 212, 102, 1, 243, 142, 102, 1, 243, 143, 242, 168, 102, - 1, 229, 82, 102, 1, 251, 41, 102, 1, 251, 42, 233, 129, 102, 1, 235, 147, - 102, 1, 235, 148, 235, 124, 102, 1, 227, 169, 102, 1, 217, 107, 233, 82, - 102, 1, 217, 107, 230, 72, 231, 212, 102, 1, 248, 230, 230, 72, 254, 153, - 102, 1, 248, 230, 230, 72, 231, 212, 102, 1, 229, 234, 223, 155, 102, 1, - 217, 106, 102, 1, 217, 107, 217, 36, 102, 1, 248, 229, 102, 1, 248, 230, - 231, 230, 102, 1, 198, 102, 1, 191, 102, 1, 226, 94, 234, 232, 102, 1, - 252, 199, 102, 1, 252, 200, 234, 178, 102, 1, 186, 102, 1, 192, 102, 1, - 205, 102, 1, 233, 141, 102, 1, 212, 65, 102, 1, 222, 36, 222, 22, 102, 1, - 222, 36, 221, 235, 102, 1, 206, 102, 1, 162, 102, 5, 223, 73, 102, 25, 5, - 217, 14, 102, 25, 5, 214, 199, 102, 25, 5, 214, 200, 221, 231, 102, 25, - 5, 218, 48, 102, 25, 5, 218, 49, 236, 28, 102, 25, 5, 223, 191, 223, 82, - 102, 25, 5, 223, 191, 223, 83, 217, 14, 102, 25, 5, 233, 142, 233, 30, - 102, 25, 5, 233, 142, 233, 31, 217, 14, 102, 25, 5, 217, 66, 102, 25, 5, - 217, 67, 223, 82, 102, 25, 5, 217, 67, 217, 14, 102, 25, 5, 217, 67, 223, - 83, 217, 14, 102, 25, 5, 225, 187, 102, 25, 5, 225, 188, 217, 14, 102, - 255, 3, 255, 2, 102, 1, 235, 1, 221, 230, 102, 1, 234, 108, 221, 230, - 102, 1, 215, 34, 221, 230, 102, 1, 245, 211, 221, 230, 102, 1, 214, 0, - 221, 230, 102, 1, 210, 107, 221, 230, 102, 1, 253, 217, 221, 230, 102, - 21, 210, 86, 102, 21, 111, 102, 21, 105, 102, 21, 158, 102, 21, 161, 102, - 21, 190, 102, 21, 195, 102, 21, 199, 102, 21, 196, 102, 21, 201, 102, - 226, 33, 102, 226, 59, 102, 211, 238, 102, 250, 244, 226, 52, 102, 250, - 244, 219, 174, 102, 250, 244, 226, 6, 102, 226, 58, 102, 28, 16, 247, - 134, 102, 28, 16, 248, 59, 102, 28, 16, 246, 72, 102, 28, 16, 248, 184, - 102, 28, 16, 248, 185, 218, 16, 102, 28, 16, 247, 213, 102, 28, 16, 248, - 222, 102, 28, 16, 248, 41, 102, 28, 16, 248, 206, 102, 28, 16, 248, 185, - 243, 64, 102, 28, 16, 38, 217, 10, 102, 28, 16, 38, 245, 149, 102, 28, - 16, 38, 234, 173, 102, 28, 16, 38, 234, 175, 102, 28, 16, 38, 235, 128, - 102, 28, 16, 38, 234, 174, 2, 235, 128, 102, 28, 16, 38, 234, 176, 2, - 235, 128, 102, 28, 16, 38, 252, 45, 102, 28, 16, 38, 242, 172, 102, 28, - 16, 222, 252, 204, 246, 82, 102, 28, 16, 222, 252, 204, 248, 220, 102, - 28, 16, 222, 252, 250, 8, 215, 112, 102, 28, 16, 222, 252, 250, 8, 217, - 74, 102, 28, 16, 233, 50, 204, 226, 47, 102, 28, 16, 233, 50, 204, 224, - 142, 102, 28, 16, 233, 50, 250, 8, 225, 41, 102, 28, 16, 233, 50, 250, 8, - 225, 29, 102, 28, 16, 233, 50, 204, 225, 64, 207, 5, 226, 30, 207, 5, - 226, 43, 207, 5, 226, 39, 207, 1, 61, 207, 1, 74, 207, 1, 69, 207, 1, - 254, 252, 207, 1, 78, 207, 1, 76, 207, 1, 245, 63, 207, 1, 176, 207, 1, - 224, 91, 207, 1, 243, 142, 207, 1, 229, 82, 207, 1, 251, 41, 207, 1, 235, - 147, 207, 1, 210, 116, 207, 1, 227, 169, 207, 1, 217, 106, 207, 1, 248, - 229, 207, 1, 198, 207, 1, 191, 207, 1, 244, 204, 207, 1, 214, 27, 207, 1, - 252, 199, 207, 1, 186, 207, 1, 192, 207, 1, 205, 207, 1, 233, 141, 207, - 1, 212, 65, 207, 1, 206, 207, 1, 211, 165, 207, 1, 162, 207, 117, 5, 226, - 56, 207, 117, 5, 226, 32, 207, 117, 5, 226, 29, 207, 25, 5, 226, 46, 207, - 25, 5, 226, 28, 207, 25, 5, 226, 50, 207, 25, 5, 226, 38, 207, 25, 5, - 226, 57, 207, 25, 5, 226, 48, 207, 5, 226, 60, 207, 5, 213, 152, 207, - 117, 5, 225, 252, 186, 207, 117, 5, 225, 252, 212, 65, 207, 1, 234, 138, - 207, 1, 217, 232, 207, 21, 210, 86, 207, 21, 111, 207, 21, 105, 207, 21, - 158, 207, 21, 161, 207, 21, 190, 207, 21, 195, 207, 21, 199, 207, 21, - 196, 207, 21, 201, 207, 253, 183, 207, 1, 223, 55, 207, 1, 233, 13, 207, - 1, 252, 26, 207, 1, 40, 235, 29, 207, 1, 40, 194, 252, 128, 1, 61, 252, - 128, 1, 219, 166, 61, 252, 128, 1, 162, 252, 128, 1, 219, 166, 162, 252, - 128, 1, 231, 186, 162, 252, 128, 1, 252, 199, 252, 128, 1, 234, 218, 252, - 199, 252, 128, 1, 191, 252, 128, 1, 219, 166, 191, 252, 128, 1, 198, 252, - 128, 1, 231, 186, 198, 252, 128, 1, 212, 65, 252, 128, 1, 219, 166, 212, - 65, 252, 128, 1, 226, 71, 212, 65, 252, 128, 1, 243, 142, 252, 128, 1, - 219, 166, 243, 142, 252, 128, 1, 235, 147, 252, 128, 1, 248, 229, 252, - 128, 1, 205, 252, 128, 1, 219, 166, 205, 252, 128, 1, 186, 252, 128, 1, - 219, 166, 186, 252, 128, 1, 219, 28, 217, 106, 252, 128, 1, 228, 60, 217, - 106, 252, 128, 1, 206, 252, 128, 1, 219, 166, 206, 252, 128, 1, 231, 186, - 206, 252, 128, 1, 192, 252, 128, 1, 219, 166, 192, 252, 128, 1, 229, 82, - 252, 128, 1, 233, 141, 252, 128, 1, 219, 166, 233, 141, 252, 128, 1, 227, - 169, 252, 128, 1, 251, 41, 252, 128, 1, 229, 153, 252, 128, 1, 231, 129, - 252, 128, 1, 74, 252, 128, 1, 69, 252, 128, 5, 216, 34, 252, 128, 25, 5, - 76, 252, 128, 25, 5, 226, 71, 76, 252, 128, 25, 5, 245, 217, 252, 128, - 25, 5, 74, 252, 128, 25, 5, 234, 218, 74, 252, 128, 25, 5, 78, 252, 128, - 25, 5, 234, 218, 78, 252, 128, 25, 5, 69, 252, 128, 25, 5, 104, 31, 219, - 166, 206, 252, 128, 117, 5, 229, 84, 252, 128, 117, 5, 242, 67, 252, 128, - 226, 41, 252, 128, 226, 37, 252, 128, 16, 251, 249, 229, 234, 231, 42, - 252, 128, 16, 251, 249, 225, 67, 252, 128, 16, 251, 249, 235, 54, 252, - 128, 16, 251, 249, 226, 41, 197, 1, 176, 197, 1, 234, 45, 197, 1, 234, - 138, 197, 1, 243, 142, 197, 1, 242, 193, 197, 1, 229, 82, 197, 1, 251, - 41, 197, 1, 250, 165, 197, 1, 235, 147, 197, 1, 227, 169, 197, 1, 217, - 106, 197, 1, 216, 209, 197, 1, 248, 229, 197, 1, 198, 197, 1, 191, 197, - 1, 225, 45, 197, 1, 225, 150, 197, 1, 244, 204, 197, 1, 244, 83, 197, 1, - 252, 199, 197, 1, 251, 230, 197, 1, 186, 197, 1, 230, 173, 197, 1, 215, - 184, 197, 1, 215, 176, 197, 1, 246, 46, 197, 1, 192, 197, 1, 205, 197, 1, - 233, 141, 197, 1, 162, 197, 1, 241, 160, 197, 1, 214, 27, 197, 1, 206, - 197, 1, 220, 104, 197, 1, 212, 65, 197, 1, 61, 197, 218, 74, 1, 192, 197, - 218, 74, 1, 205, 197, 25, 5, 255, 82, 197, 25, 5, 74, 197, 25, 5, 78, - 197, 25, 5, 226, 187, 197, 25, 5, 69, 197, 25, 5, 214, 118, 197, 25, 5, - 76, 197, 117, 5, 235, 29, 197, 117, 5, 194, 197, 117, 5, 156, 197, 117, - 5, 230, 30, 197, 117, 5, 226, 109, 197, 117, 5, 153, 197, 117, 5, 217, - 153, 197, 117, 5, 227, 146, 197, 117, 5, 234, 236, 197, 5, 223, 153, 197, - 5, 227, 209, 197, 224, 144, 217, 104, 197, 224, 144, 227, 156, 216, 121, - 217, 104, 197, 224, 144, 250, 172, 197, 224, 144, 215, 171, 250, 172, - 197, 224, 144, 215, 170, 197, 21, 210, 86, 197, 21, 111, 197, 21, 105, - 197, 21, 158, 197, 21, 161, 197, 21, 190, 197, 21, 195, 197, 21, 199, - 197, 21, 196, 197, 21, 201, 197, 1, 215, 157, 197, 1, 215, 145, 197, 1, - 248, 143, 226, 214, 250, 111, 21, 210, 86, 226, 214, 250, 111, 21, 111, - 226, 214, 250, 111, 21, 105, 226, 214, 250, 111, 21, 158, 226, 214, 250, - 111, 21, 161, 226, 214, 250, 111, 21, 190, 226, 214, 250, 111, 21, 195, - 226, 214, 250, 111, 21, 199, 226, 214, 250, 111, 21, 196, 226, 214, 250, - 111, 21, 201, 226, 214, 250, 111, 1, 233, 141, 226, 214, 250, 111, 1, - 253, 214, 226, 214, 250, 111, 1, 254, 225, 226, 214, 250, 111, 1, 254, - 123, 226, 214, 250, 111, 1, 254, 187, 226, 214, 250, 111, 1, 233, 140, - 226, 214, 250, 111, 1, 255, 44, 226, 214, 250, 111, 1, 255, 45, 226, 214, - 250, 111, 1, 255, 43, 226, 214, 250, 111, 1, 255, 38, 226, 214, 250, 111, - 1, 232, 247, 226, 214, 250, 111, 1, 235, 178, 226, 214, 250, 111, 1, 236, - 41, 226, 214, 250, 111, 1, 235, 197, 226, 214, 250, 111, 1, 235, 186, - 226, 214, 250, 111, 1, 232, 103, 226, 214, 250, 111, 1, 214, 221, 226, - 214, 250, 111, 1, 214, 219, 226, 214, 250, 111, 1, 214, 168, 226, 214, - 250, 111, 1, 214, 111, 226, 214, 250, 111, 1, 233, 64, 226, 214, 250, - 111, 1, 245, 116, 226, 214, 250, 111, 1, 245, 220, 226, 214, 250, 111, 1, - 245, 158, 226, 214, 250, 111, 1, 245, 94, 226, 214, 250, 111, 1, 232, - 162, 226, 214, 250, 111, 1, 226, 141, 226, 214, 250, 111, 1, 227, 0, 226, - 214, 250, 111, 1, 226, 129, 226, 214, 250, 111, 1, 226, 226, 226, 214, - 250, 111, 230, 108, 215, 122, 226, 214, 250, 111, 243, 137, 215, 123, - 226, 214, 250, 111, 230, 106, 215, 123, 226, 214, 250, 111, 223, 95, 226, - 214, 250, 111, 225, 148, 226, 214, 250, 111, 254, 217, 226, 214, 250, - 111, 224, 144, 230, 103, 226, 214, 250, 111, 224, 144, 52, 230, 103, 207, - 224, 144, 251, 249, 218, 9, 207, 224, 144, 251, 249, 226, 42, 207, 224, - 144, 251, 249, 224, 132, 207, 224, 144, 251, 249, 251, 27, 207, 224, 144, - 251, 249, 233, 14, 221, 227, 207, 224, 144, 251, 249, 235, 19, 221, 227, - 207, 224, 144, 251, 249, 248, 230, 221, 227, 207, 224, 144, 251, 249, - 252, 200, 221, 227, 213, 252, 138, 234, 216, 213, 252, 138, 220, 79, 213, - 252, 138, 224, 201, 213, 252, 5, 228, 214, 213, 252, 5, 211, 80, 230, - 227, 218, 1, 213, 252, 138, 211, 80, 254, 222, 235, 250, 218, 1, 213, - 252, 138, 211, 80, 235, 250, 218, 1, 213, 252, 138, 211, 80, 234, 204, - 235, 250, 218, 1, 213, 252, 138, 251, 10, 51, 213, 252, 138, 211, 80, - 234, 204, 235, 250, 218, 2, 221, 199, 213, 252, 138, 52, 218, 1, 213, - 252, 138, 215, 212, 218, 1, 213, 252, 138, 234, 204, 254, 85, 213, 252, - 138, 59, 51, 213, 252, 138, 113, 170, 51, 213, 252, 138, 134, 170, 51, - 213, 252, 138, 222, 243, 234, 215, 235, 250, 218, 1, 213, 252, 138, 253, - 212, 235, 250, 218, 1, 213, 252, 5, 213, 148, 218, 1, 213, 252, 5, 213, - 148, 214, 216, 213, 252, 5, 223, 52, 213, 148, 214, 216, 213, 252, 5, - 213, 148, 254, 85, 213, 252, 5, 223, 52, 213, 148, 254, 85, 213, 252, 5, - 213, 148, 214, 217, 2, 217, 78, 213, 252, 5, 213, 148, 254, 86, 2, 217, - 78, 213, 252, 5, 254, 84, 254, 99, 213, 252, 5, 254, 84, 252, 174, 213, - 252, 5, 254, 84, 214, 20, 213, 252, 5, 254, 84, 214, 21, 2, 217, 78, 213, - 252, 5, 216, 69, 213, 252, 5, 241, 198, 200, 254, 83, 213, 252, 5, 200, - 254, 83, 213, 252, 5, 222, 144, 200, 254, 83, 213, 252, 5, 254, 84, 214, - 223, 230, 95, 213, 252, 5, 254, 28, 213, 252, 5, 222, 189, 254, 28, 213, - 252, 138, 251, 10, 48, 213, 252, 5, 235, 108, 213, 252, 5, 214, 161, 7, - 1, 4, 6, 61, 7, 1, 4, 6, 254, 252, 7, 4, 1, 215, 94, 254, 252, 7, 1, 4, - 6, 252, 142, 253, 166, 7, 1, 4, 6, 251, 74, 7, 1, 4, 6, 249, 68, 7, 1, 4, - 6, 245, 67, 7, 1, 4, 6, 76, 7, 4, 1, 215, 94, 204, 76, 7, 4, 1, 215, 94, - 74, 7, 1, 4, 6, 235, 150, 7, 1, 4, 6, 235, 29, 7, 1, 4, 6, 233, 155, 2, - 91, 7, 1, 4, 6, 194, 7, 1, 4, 6, 223, 52, 230, 30, 7, 1, 4, 6, 78, 7, 1, - 4, 6, 204, 78, 7, 4, 1, 219, 189, 78, 7, 4, 1, 219, 189, 204, 78, 7, 4, - 1, 219, 189, 144, 2, 91, 7, 4, 1, 215, 94, 226, 238, 7, 1, 4, 6, 226, - 138, 7, 4, 1, 216, 15, 163, 78, 7, 4, 1, 251, 183, 163, 78, 7, 1, 4, 6, - 226, 109, 7, 1, 4, 6, 223, 52, 153, 7, 1, 4, 6, 215, 94, 153, 7, 1, 4, 6, - 217, 153, 7, 1, 4, 6, 69, 7, 4, 1, 219, 189, 69, 7, 4, 1, 219, 189, 248, - 8, 69, 7, 4, 1, 219, 189, 215, 94, 194, 7, 1, 4, 6, 214, 105, 7, 1, 4, 6, - 212, 98, 7, 1, 4, 6, 210, 159, 7, 1, 4, 6, 245, 16, 7, 1, 213, 135, 233, - 88, 218, 252, 7, 1, 254, 205, 26, 1, 4, 6, 243, 114, 26, 1, 4, 6, 233, - 104, 26, 1, 4, 6, 225, 111, 26, 1, 4, 6, 223, 40, 26, 1, 4, 6, 224, 164, - 33, 1, 4, 6, 245, 182, 58, 1, 6, 61, 58, 1, 6, 254, 252, 58, 1, 6, 253, - 166, 58, 1, 6, 252, 142, 253, 166, 58, 1, 6, 249, 68, 58, 1, 6, 76, 58, - 1, 6, 223, 52, 76, 58, 1, 6, 243, 209, 58, 1, 6, 242, 67, 58, 1, 6, 74, - 58, 1, 6, 235, 150, 58, 1, 6, 235, 29, 58, 1, 6, 156, 58, 1, 6, 194, 58, - 1, 6, 230, 30, 58, 1, 6, 223, 52, 230, 30, 58, 1, 6, 78, 58, 1, 6, 226, - 138, 58, 1, 6, 226, 109, 58, 1, 6, 153, 58, 1, 6, 217, 153, 58, 1, 6, 69, - 58, 1, 6, 212, 98, 58, 1, 4, 61, 58, 1, 4, 215, 94, 61, 58, 1, 4, 254, - 151, 58, 1, 4, 215, 94, 254, 252, 58, 1, 4, 253, 166, 58, 1, 4, 249, 68, - 58, 1, 4, 76, 58, 1, 4, 221, 197, 58, 1, 4, 204, 76, 58, 1, 4, 215, 94, - 204, 76, 58, 1, 4, 243, 209, 58, 1, 4, 215, 94, 74, 58, 1, 4, 235, 29, - 58, 1, 4, 194, 58, 1, 4, 245, 146, 58, 1, 4, 78, 58, 1, 4, 204, 78, 58, - 1, 4, 216, 15, 163, 78, 58, 1, 4, 251, 183, 163, 78, 58, 1, 4, 226, 109, - 58, 1, 4, 217, 153, 58, 1, 4, 69, 58, 1, 4, 219, 189, 69, 58, 1, 4, 215, - 94, 194, 58, 1, 4, 214, 105, 58, 1, 4, 254, 205, 58, 1, 4, 252, 34, 58, - 1, 4, 26, 243, 114, 58, 1, 4, 248, 62, 58, 1, 4, 26, 225, 136, 58, 1, 4, - 250, 118, 7, 218, 66, 4, 1, 74, 7, 218, 66, 4, 1, 153, 7, 218, 66, 4, 1, - 69, 7, 218, 66, 4, 1, 214, 105, 26, 218, 66, 4, 1, 252, 34, 26, 218, 66, - 4, 1, 243, 114, 26, 218, 66, 4, 1, 223, 40, 26, 218, 66, 4, 1, 225, 136, - 26, 218, 66, 4, 1, 250, 118, 7, 4, 1, 214, 214, 7, 4, 1, 57, 2, 230, 229, - 184, 7, 4, 1, 249, 69, 2, 230, 229, 184, 7, 4, 1, 245, 15, 2, 230, 229, - 184, 7, 4, 1, 232, 55, 2, 230, 229, 184, 7, 4, 1, 230, 31, 2, 230, 229, - 184, 7, 4, 1, 226, 110, 2, 230, 229, 184, 7, 4, 1, 223, 227, 2, 230, 229, - 184, 7, 4, 1, 223, 227, 2, 244, 96, 22, 230, 229, 184, 7, 4, 1, 222, 94, - 2, 230, 229, 184, 7, 4, 1, 217, 154, 2, 230, 229, 184, 7, 4, 1, 210, 160, - 2, 230, 229, 184, 7, 4, 1, 215, 94, 243, 209, 58, 1, 33, 245, 158, 7, 4, - 1, 235, 220, 243, 209, 7, 4, 1, 216, 212, 2, 218, 109, 7, 4, 6, 1, 240, - 161, 2, 91, 7, 4, 1, 235, 193, 2, 91, 7, 4, 1, 226, 110, 2, 91, 7, 4, 6, - 1, 104, 2, 91, 7, 4, 1, 214, 158, 2, 91, 7, 4, 1, 57, 2, 226, 70, 103, 7, - 4, 1, 249, 69, 2, 226, 70, 103, 7, 4, 1, 245, 15, 2, 226, 70, 103, 7, 4, - 1, 243, 210, 2, 226, 70, 103, 7, 4, 1, 235, 30, 2, 226, 70, 103, 7, 4, 1, - 233, 155, 2, 226, 70, 103, 7, 4, 1, 232, 55, 2, 226, 70, 103, 7, 4, 1, - 230, 31, 2, 226, 70, 103, 7, 4, 1, 226, 110, 2, 226, 70, 103, 7, 4, 1, - 223, 227, 2, 226, 70, 103, 7, 4, 1, 222, 94, 2, 226, 70, 103, 7, 4, 1, - 245, 84, 2, 226, 70, 103, 7, 4, 1, 214, 106, 2, 226, 70, 103, 7, 4, 1, - 211, 179, 2, 226, 70, 103, 7, 4, 1, 210, 160, 2, 226, 70, 103, 7, 4, 1, - 116, 2, 223, 58, 103, 7, 4, 1, 254, 152, 2, 223, 58, 103, 7, 4, 1, 249, - 69, 2, 241, 59, 22, 217, 78, 7, 4, 1, 160, 2, 223, 58, 103, 7, 4, 1, 204, - 160, 2, 223, 58, 103, 7, 4, 1, 223, 52, 204, 160, 2, 223, 58, 103, 7, 4, - 1, 221, 198, 2, 223, 58, 103, 7, 4, 1, 240, 161, 2, 223, 58, 103, 7, 4, - 1, 204, 144, 2, 223, 58, 103, 7, 4, 1, 245, 84, 2, 223, 58, 103, 7, 4, 1, - 104, 2, 223, 58, 103, 7, 4, 1, 245, 17, 2, 223, 58, 103, 58, 1, 4, 215, - 94, 254, 151, 58, 1, 4, 251, 74, 58, 1, 4, 251, 75, 2, 249, 108, 58, 1, - 4, 245, 67, 58, 1, 4, 223, 52, 204, 76, 58, 1, 4, 245, 14, 58, 1, 4, 247, - 127, 235, 151, 2, 91, 58, 1, 4, 119, 243, 209, 58, 1, 4, 215, 94, 242, - 67, 58, 1, 4, 240, 161, 2, 91, 58, 1, 4, 235, 192, 58, 1, 4, 6, 74, 58, - 1, 4, 6, 240, 161, 2, 91, 58, 1, 4, 235, 151, 2, 249, 135, 58, 1, 4, 233, - 155, 2, 223, 58, 103, 58, 1, 4, 233, 155, 2, 226, 70, 103, 58, 1, 4, 6, - 156, 58, 1, 4, 232, 55, 2, 103, 58, 1, 4, 215, 94, 232, 55, 2, 200, 233, - 42, 58, 1, 4, 230, 31, 2, 43, 103, 58, 1, 4, 230, 31, 2, 223, 58, 103, - 58, 1, 4, 6, 230, 30, 58, 1, 4, 252, 142, 78, 58, 1, 4, 225, 136, 58, 1, - 4, 222, 94, 2, 103, 58, 1, 4, 245, 83, 58, 1, 4, 217, 154, 2, 226, 70, - 103, 58, 1, 4, 104, 130, 58, 1, 4, 214, 157, 58, 1, 4, 6, 69, 58, 1, 4, - 214, 106, 2, 103, 58, 1, 4, 215, 94, 214, 105, 58, 1, 4, 210, 159, 58, 1, - 4, 210, 160, 2, 223, 58, 103, 58, 1, 4, 210, 160, 2, 249, 108, 58, 1, 4, - 245, 16, 58, 1, 4, 216, 180, 38, 246, 126, 242, 144, 255, 23, 38, 246, - 126, 255, 12, 255, 23, 38, 219, 71, 51, 38, 218, 7, 79, 38, 231, 236, 38, - 242, 141, 38, 231, 234, 38, 255, 10, 38, 242, 142, 38, 255, 11, 38, 7, 4, - 1, 223, 227, 51, 38, 251, 153, 38, 231, 235, 38, 52, 250, 39, 48, 38, - 226, 229, 48, 38, 210, 35, 51, 38, 235, 179, 51, 38, 214, 151, 48, 38, - 214, 134, 48, 38, 7, 4, 1, 244, 71, 204, 116, 48, 38, 7, 4, 1, 254, 252, - 38, 7, 4, 1, 254, 81, 38, 7, 4, 1, 253, 184, 38, 7, 4, 1, 251, 75, 250, - 191, 38, 7, 4, 1, 235, 220, 249, 68, 38, 7, 4, 1, 245, 67, 38, 7, 4, 1, - 243, 209, 38, 7, 1, 4, 6, 243, 209, 38, 7, 4, 1, 235, 29, 38, 7, 4, 1, - 156, 38, 7, 1, 4, 6, 156, 38, 7, 1, 4, 6, 194, 38, 7, 4, 1, 230, 30, 38, - 7, 1, 4, 6, 230, 30, 38, 7, 1, 4, 6, 153, 38, 7, 4, 1, 223, 227, 222, - 188, 38, 7, 4, 1, 222, 93, 38, 7, 4, 1, 200, 222, 93, 38, 7, 4, 1, 210, - 159, 38, 52, 235, 200, 251, 155, 51, 38, 254, 156, 128, 216, 43, 51, 38, - 43, 254, 2, 48, 38, 44, 254, 2, 22, 124, 254, 2, 51, 7, 6, 1, 116, 2, - 222, 237, 51, 7, 4, 1, 116, 2, 222, 237, 51, 7, 6, 1, 57, 2, 59, 48, 7, - 4, 1, 57, 2, 59, 48, 7, 6, 1, 57, 2, 59, 51, 7, 4, 1, 57, 2, 59, 51, 7, - 6, 1, 57, 2, 232, 220, 51, 7, 4, 1, 57, 2, 232, 220, 51, 7, 6, 1, 251, - 75, 2, 250, 192, 22, 142, 7, 4, 1, 251, 75, 2, 250, 192, 22, 142, 7, 6, - 1, 249, 69, 2, 59, 48, 7, 4, 1, 249, 69, 2, 59, 48, 7, 6, 1, 249, 69, 2, - 59, 51, 7, 4, 1, 249, 69, 2, 59, 51, 7, 6, 1, 249, 69, 2, 232, 220, 51, - 7, 4, 1, 249, 69, 2, 232, 220, 51, 7, 6, 1, 249, 69, 2, 250, 191, 7, 4, - 1, 249, 69, 2, 250, 191, 7, 6, 1, 249, 69, 2, 250, 39, 51, 7, 4, 1, 249, - 69, 2, 250, 39, 51, 7, 6, 1, 160, 2, 231, 238, 22, 242, 143, 7, 4, 1, - 160, 2, 231, 238, 22, 242, 143, 7, 6, 1, 160, 2, 231, 238, 22, 142, 7, 4, - 1, 160, 2, 231, 238, 22, 142, 7, 6, 1, 160, 2, 250, 39, 51, 7, 4, 1, 160, - 2, 250, 39, 51, 7, 6, 1, 160, 2, 216, 90, 51, 7, 4, 1, 160, 2, 216, 90, - 51, 7, 6, 1, 160, 2, 250, 192, 22, 251, 154, 7, 4, 1, 160, 2, 250, 192, - 22, 251, 154, 7, 6, 1, 245, 15, 2, 59, 48, 7, 4, 1, 245, 15, 2, 59, 48, - 7, 6, 1, 243, 210, 2, 231, 237, 7, 4, 1, 243, 210, 2, 231, 237, 7, 6, 1, - 242, 68, 2, 59, 48, 7, 4, 1, 242, 68, 2, 59, 48, 7, 6, 1, 242, 68, 2, 59, - 51, 7, 4, 1, 242, 68, 2, 59, 51, 7, 6, 1, 242, 68, 2, 248, 9, 7, 4, 1, - 242, 68, 2, 248, 9, 7, 6, 1, 242, 68, 2, 250, 191, 7, 4, 1, 242, 68, 2, - 250, 191, 7, 6, 1, 242, 68, 2, 251, 155, 51, 7, 4, 1, 242, 68, 2, 251, - 155, 51, 7, 6, 1, 240, 161, 2, 216, 90, 51, 7, 4, 1, 240, 161, 2, 216, - 90, 51, 7, 6, 1, 240, 161, 2, 248, 10, 22, 142, 7, 4, 1, 240, 161, 2, - 248, 10, 22, 142, 7, 6, 1, 235, 30, 2, 142, 7, 4, 1, 235, 30, 2, 142, 7, - 6, 1, 235, 30, 2, 59, 51, 7, 4, 1, 235, 30, 2, 59, 51, 7, 6, 1, 235, 30, - 2, 232, 220, 51, 7, 4, 1, 235, 30, 2, 232, 220, 51, 7, 6, 1, 233, 155, 2, - 59, 51, 7, 4, 1, 233, 155, 2, 59, 51, 7, 6, 1, 233, 155, 2, 59, 252, 51, - 22, 231, 237, 7, 4, 1, 233, 155, 2, 59, 252, 51, 22, 231, 237, 7, 6, 1, - 233, 155, 2, 232, 220, 51, 7, 4, 1, 233, 155, 2, 232, 220, 51, 7, 6, 1, - 233, 155, 2, 250, 39, 51, 7, 4, 1, 233, 155, 2, 250, 39, 51, 7, 6, 1, - 232, 55, 2, 142, 7, 4, 1, 232, 55, 2, 142, 7, 6, 1, 232, 55, 2, 59, 48, - 7, 4, 1, 232, 55, 2, 59, 48, 7, 6, 1, 232, 55, 2, 59, 51, 7, 4, 1, 232, - 55, 2, 59, 51, 7, 6, 1, 230, 31, 2, 59, 48, 7, 4, 1, 230, 31, 2, 59, 48, - 7, 6, 1, 230, 31, 2, 59, 51, 7, 4, 1, 230, 31, 2, 59, 51, 7, 6, 1, 230, - 31, 2, 232, 220, 51, 7, 4, 1, 230, 31, 2, 232, 220, 51, 7, 6, 1, 230, 31, - 2, 250, 39, 51, 7, 4, 1, 230, 31, 2, 250, 39, 51, 7, 6, 1, 144, 2, 216, - 90, 22, 142, 7, 4, 1, 144, 2, 216, 90, 22, 142, 7, 6, 1, 144, 2, 216, 90, - 22, 248, 9, 7, 4, 1, 144, 2, 216, 90, 22, 248, 9, 7, 6, 1, 144, 2, 231, - 238, 22, 242, 143, 7, 4, 1, 144, 2, 231, 238, 22, 242, 143, 7, 6, 1, 144, - 2, 231, 238, 22, 142, 7, 4, 1, 144, 2, 231, 238, 22, 142, 7, 6, 1, 226, - 110, 2, 142, 7, 4, 1, 226, 110, 2, 142, 7, 6, 1, 226, 110, 2, 59, 48, 7, - 4, 1, 226, 110, 2, 59, 48, 7, 6, 1, 223, 227, 2, 59, 48, 7, 4, 1, 223, - 227, 2, 59, 48, 7, 6, 1, 223, 227, 2, 59, 51, 7, 4, 1, 223, 227, 2, 59, - 51, 7, 6, 1, 223, 227, 2, 59, 252, 51, 22, 231, 237, 7, 4, 1, 223, 227, - 2, 59, 252, 51, 22, 231, 237, 7, 6, 1, 223, 227, 2, 232, 220, 51, 7, 4, - 1, 223, 227, 2, 232, 220, 51, 7, 6, 1, 222, 94, 2, 59, 48, 7, 4, 1, 222, - 94, 2, 59, 48, 7, 6, 1, 222, 94, 2, 59, 51, 7, 4, 1, 222, 94, 2, 59, 51, - 7, 6, 1, 222, 94, 2, 255, 12, 22, 59, 48, 7, 4, 1, 222, 94, 2, 255, 12, - 22, 59, 48, 7, 6, 1, 222, 94, 2, 250, 243, 22, 59, 48, 7, 4, 1, 222, 94, - 2, 250, 243, 22, 59, 48, 7, 6, 1, 222, 94, 2, 59, 252, 51, 22, 59, 48, 7, - 4, 1, 222, 94, 2, 59, 252, 51, 22, 59, 48, 7, 6, 1, 217, 154, 2, 59, 48, - 7, 4, 1, 217, 154, 2, 59, 48, 7, 6, 1, 217, 154, 2, 59, 51, 7, 4, 1, 217, - 154, 2, 59, 51, 7, 6, 1, 217, 154, 2, 232, 220, 51, 7, 4, 1, 217, 154, 2, - 232, 220, 51, 7, 6, 1, 217, 154, 2, 250, 39, 51, 7, 4, 1, 217, 154, 2, - 250, 39, 51, 7, 6, 1, 104, 2, 248, 10, 51, 7, 4, 1, 104, 2, 248, 10, 51, - 7, 6, 1, 104, 2, 216, 90, 51, 7, 4, 1, 104, 2, 216, 90, 51, 7, 6, 1, 104, - 2, 250, 39, 51, 7, 4, 1, 104, 2, 250, 39, 51, 7, 6, 1, 104, 2, 216, 90, - 22, 142, 7, 4, 1, 104, 2, 216, 90, 22, 142, 7, 6, 1, 104, 2, 231, 238, - 22, 248, 9, 7, 4, 1, 104, 2, 231, 238, 22, 248, 9, 7, 6, 1, 214, 106, 2, - 184, 7, 4, 1, 214, 106, 2, 184, 7, 6, 1, 214, 106, 2, 59, 51, 7, 4, 1, - 214, 106, 2, 59, 51, 7, 6, 1, 212, 99, 2, 242, 143, 7, 4, 1, 212, 99, 2, - 242, 143, 7, 6, 1, 212, 99, 2, 142, 7, 4, 1, 212, 99, 2, 142, 7, 6, 1, - 212, 99, 2, 248, 9, 7, 4, 1, 212, 99, 2, 248, 9, 7, 6, 1, 212, 99, 2, 59, - 48, 7, 4, 1, 212, 99, 2, 59, 48, 7, 6, 1, 212, 99, 2, 59, 51, 7, 4, 1, - 212, 99, 2, 59, 51, 7, 6, 1, 211, 179, 2, 59, 48, 7, 4, 1, 211, 179, 2, - 59, 48, 7, 6, 1, 211, 179, 2, 248, 9, 7, 4, 1, 211, 179, 2, 248, 9, 7, 6, - 1, 211, 118, 2, 59, 48, 7, 4, 1, 211, 118, 2, 59, 48, 7, 6, 1, 210, 160, - 2, 250, 38, 7, 4, 1, 210, 160, 2, 250, 38, 7, 6, 1, 210, 160, 2, 59, 51, - 7, 4, 1, 210, 160, 2, 59, 51, 7, 6, 1, 210, 160, 2, 232, 220, 51, 7, 4, - 1, 210, 160, 2, 232, 220, 51, 7, 4, 1, 242, 68, 2, 232, 220, 51, 7, 4, 1, - 217, 154, 2, 248, 9, 7, 4, 1, 212, 99, 2, 222, 237, 48, 7, 4, 1, 211, - 118, 2, 222, 237, 48, 7, 4, 1, 116, 2, 44, 163, 222, 236, 7, 4, 1, 200, - 222, 94, 2, 59, 48, 7, 4, 1, 200, 222, 94, 2, 248, 7, 91, 7, 4, 1, 200, - 222, 94, 2, 125, 91, 7, 6, 1, 220, 78, 222, 93, 7, 4, 1, 248, 62, 7, 6, - 1, 116, 2, 59, 51, 7, 4, 1, 116, 2, 59, 51, 7, 6, 1, 116, 2, 241, 59, 48, - 7, 4, 1, 116, 2, 241, 59, 48, 7, 6, 1, 116, 2, 250, 39, 22, 142, 7, 4, 1, - 116, 2, 250, 39, 22, 142, 7, 6, 1, 116, 2, 250, 39, 22, 242, 143, 7, 4, - 1, 116, 2, 250, 39, 22, 242, 143, 7, 6, 1, 116, 2, 250, 39, 22, 241, 59, - 48, 7, 4, 1, 116, 2, 250, 39, 22, 241, 59, 48, 7, 6, 1, 116, 2, 250, 39, - 22, 184, 7, 4, 1, 116, 2, 250, 39, 22, 184, 7, 6, 1, 116, 2, 250, 39, 22, - 59, 51, 7, 4, 1, 116, 2, 250, 39, 22, 59, 51, 7, 6, 1, 116, 2, 251, 155, - 22, 142, 7, 4, 1, 116, 2, 251, 155, 22, 142, 7, 6, 1, 116, 2, 251, 155, - 22, 242, 143, 7, 4, 1, 116, 2, 251, 155, 22, 242, 143, 7, 6, 1, 116, 2, - 251, 155, 22, 241, 59, 48, 7, 4, 1, 116, 2, 251, 155, 22, 241, 59, 48, 7, - 6, 1, 116, 2, 251, 155, 22, 184, 7, 4, 1, 116, 2, 251, 155, 22, 184, 7, - 6, 1, 116, 2, 251, 155, 22, 59, 51, 7, 4, 1, 116, 2, 251, 155, 22, 59, - 51, 7, 6, 1, 160, 2, 59, 51, 7, 4, 1, 160, 2, 59, 51, 7, 6, 1, 160, 2, - 241, 59, 48, 7, 4, 1, 160, 2, 241, 59, 48, 7, 6, 1, 160, 2, 184, 7, 4, 1, - 160, 2, 184, 7, 6, 1, 160, 2, 250, 39, 22, 142, 7, 4, 1, 160, 2, 250, 39, - 22, 142, 7, 6, 1, 160, 2, 250, 39, 22, 242, 143, 7, 4, 1, 160, 2, 250, - 39, 22, 242, 143, 7, 6, 1, 160, 2, 250, 39, 22, 241, 59, 48, 7, 4, 1, - 160, 2, 250, 39, 22, 241, 59, 48, 7, 6, 1, 160, 2, 250, 39, 22, 184, 7, - 4, 1, 160, 2, 250, 39, 22, 184, 7, 6, 1, 160, 2, 250, 39, 22, 59, 51, 7, - 4, 1, 160, 2, 250, 39, 22, 59, 51, 7, 6, 1, 240, 161, 2, 241, 59, 48, 7, - 4, 1, 240, 161, 2, 241, 59, 48, 7, 6, 1, 240, 161, 2, 59, 51, 7, 4, 1, - 240, 161, 2, 59, 51, 7, 6, 1, 144, 2, 59, 51, 7, 4, 1, 144, 2, 59, 51, 7, - 6, 1, 144, 2, 241, 59, 48, 7, 4, 1, 144, 2, 241, 59, 48, 7, 6, 1, 144, 2, - 250, 39, 22, 142, 7, 4, 1, 144, 2, 250, 39, 22, 142, 7, 6, 1, 144, 2, - 250, 39, 22, 242, 143, 7, 4, 1, 144, 2, 250, 39, 22, 242, 143, 7, 6, 1, - 144, 2, 250, 39, 22, 241, 59, 48, 7, 4, 1, 144, 2, 250, 39, 22, 241, 59, - 48, 7, 6, 1, 144, 2, 250, 39, 22, 184, 7, 4, 1, 144, 2, 250, 39, 22, 184, - 7, 6, 1, 144, 2, 250, 39, 22, 59, 51, 7, 4, 1, 144, 2, 250, 39, 22, 59, - 51, 7, 6, 1, 144, 2, 241, 0, 22, 142, 7, 4, 1, 144, 2, 241, 0, 22, 142, - 7, 6, 1, 144, 2, 241, 0, 22, 242, 143, 7, 4, 1, 144, 2, 241, 0, 22, 242, - 143, 7, 6, 1, 144, 2, 241, 0, 22, 241, 59, 48, 7, 4, 1, 144, 2, 241, 0, - 22, 241, 59, 48, 7, 6, 1, 144, 2, 241, 0, 22, 184, 7, 4, 1, 144, 2, 241, - 0, 22, 184, 7, 6, 1, 144, 2, 241, 0, 22, 59, 51, 7, 4, 1, 144, 2, 241, 0, - 22, 59, 51, 7, 6, 1, 104, 2, 59, 51, 7, 4, 1, 104, 2, 59, 51, 7, 6, 1, - 104, 2, 241, 59, 48, 7, 4, 1, 104, 2, 241, 59, 48, 7, 6, 1, 104, 2, 241, - 0, 22, 142, 7, 4, 1, 104, 2, 241, 0, 22, 142, 7, 6, 1, 104, 2, 241, 0, - 22, 242, 143, 7, 4, 1, 104, 2, 241, 0, 22, 242, 143, 7, 6, 1, 104, 2, - 241, 0, 22, 241, 59, 48, 7, 4, 1, 104, 2, 241, 0, 22, 241, 59, 48, 7, 6, - 1, 104, 2, 241, 0, 22, 184, 7, 4, 1, 104, 2, 241, 0, 22, 184, 7, 6, 1, - 104, 2, 241, 0, 22, 59, 51, 7, 4, 1, 104, 2, 241, 0, 22, 59, 51, 7, 6, 1, - 211, 118, 2, 242, 143, 7, 4, 1, 211, 118, 2, 242, 143, 7, 6, 1, 211, 118, - 2, 59, 51, 7, 4, 1, 211, 118, 2, 59, 51, 7, 6, 1, 211, 118, 2, 241, 59, - 48, 7, 4, 1, 211, 118, 2, 241, 59, 48, 7, 6, 1, 211, 118, 2, 184, 7, 4, - 1, 211, 118, 2, 184, 7, 6, 1, 230, 228, 232, 191, 7, 4, 1, 230, 228, 232, - 191, 7, 6, 1, 230, 228, 214, 105, 7, 4, 1, 230, 228, 214, 105, 7, 6, 1, - 211, 118, 2, 232, 129, 7, 4, 1, 211, 118, 2, 232, 129, 26, 4, 1, 254, - 152, 2, 224, 157, 26, 4, 1, 254, 152, 2, 248, 161, 26, 4, 1, 254, 152, 2, - 224, 158, 22, 214, 13, 26, 4, 1, 254, 152, 2, 248, 162, 22, 214, 13, 26, - 4, 1, 254, 152, 2, 224, 158, 22, 226, 114, 26, 4, 1, 254, 152, 2, 248, - 162, 22, 226, 114, 26, 4, 1, 254, 152, 2, 224, 158, 22, 225, 178, 26, 4, - 1, 254, 152, 2, 248, 162, 22, 225, 178, 26, 6, 1, 254, 152, 2, 224, 157, - 26, 6, 1, 254, 152, 2, 248, 161, 26, 6, 1, 254, 152, 2, 224, 158, 22, - 214, 13, 26, 6, 1, 254, 152, 2, 248, 162, 22, 214, 13, 26, 6, 1, 254, - 152, 2, 224, 158, 22, 226, 114, 26, 6, 1, 254, 152, 2, 248, 162, 22, 226, - 114, 26, 6, 1, 254, 152, 2, 224, 158, 22, 225, 178, 26, 6, 1, 254, 152, - 2, 248, 162, 22, 225, 178, 26, 4, 1, 245, 109, 2, 224, 157, 26, 4, 1, - 245, 109, 2, 248, 161, 26, 4, 1, 245, 109, 2, 224, 158, 22, 214, 13, 26, - 4, 1, 245, 109, 2, 248, 162, 22, 214, 13, 26, 4, 1, 245, 109, 2, 224, - 158, 22, 226, 114, 26, 4, 1, 245, 109, 2, 248, 162, 22, 226, 114, 26, 6, - 1, 245, 109, 2, 224, 157, 26, 6, 1, 245, 109, 2, 248, 161, 26, 6, 1, 245, - 109, 2, 224, 158, 22, 214, 13, 26, 6, 1, 245, 109, 2, 248, 162, 22, 214, - 13, 26, 6, 1, 245, 109, 2, 224, 158, 22, 226, 114, 26, 6, 1, 245, 109, 2, - 248, 162, 22, 226, 114, 26, 4, 1, 245, 72, 2, 224, 157, 26, 4, 1, 245, - 72, 2, 248, 161, 26, 4, 1, 245, 72, 2, 224, 158, 22, 214, 13, 26, 4, 1, - 245, 72, 2, 248, 162, 22, 214, 13, 26, 4, 1, 245, 72, 2, 224, 158, 22, - 226, 114, 26, 4, 1, 245, 72, 2, 248, 162, 22, 226, 114, 26, 4, 1, 245, - 72, 2, 224, 158, 22, 225, 178, 26, 4, 1, 245, 72, 2, 248, 162, 22, 225, - 178, 26, 6, 1, 245, 72, 2, 224, 157, 26, 6, 1, 245, 72, 2, 248, 161, 26, - 6, 1, 245, 72, 2, 224, 158, 22, 214, 13, 26, 6, 1, 245, 72, 2, 248, 162, - 22, 214, 13, 26, 6, 1, 245, 72, 2, 224, 158, 22, 226, 114, 26, 6, 1, 245, - 72, 2, 248, 162, 22, 226, 114, 26, 6, 1, 245, 72, 2, 224, 158, 22, 225, - 178, 26, 6, 1, 245, 72, 2, 248, 162, 22, 225, 178, 26, 4, 1, 235, 193, 2, - 224, 157, 26, 4, 1, 235, 193, 2, 248, 161, 26, 4, 1, 235, 193, 2, 224, - 158, 22, 214, 13, 26, 4, 1, 235, 193, 2, 248, 162, 22, 214, 13, 26, 4, 1, - 235, 193, 2, 224, 158, 22, 226, 114, 26, 4, 1, 235, 193, 2, 248, 162, 22, - 226, 114, 26, 4, 1, 235, 193, 2, 224, 158, 22, 225, 178, 26, 4, 1, 235, - 193, 2, 248, 162, 22, 225, 178, 26, 6, 1, 235, 193, 2, 224, 157, 26, 6, - 1, 235, 193, 2, 248, 161, 26, 6, 1, 235, 193, 2, 224, 158, 22, 214, 13, - 26, 6, 1, 235, 193, 2, 248, 162, 22, 214, 13, 26, 6, 1, 235, 193, 2, 224, - 158, 22, 226, 114, 26, 6, 1, 235, 193, 2, 248, 162, 22, 226, 114, 26, 6, - 1, 235, 193, 2, 224, 158, 22, 225, 178, 26, 6, 1, 235, 193, 2, 248, 162, - 22, 225, 178, 26, 4, 1, 226, 204, 2, 224, 157, 26, 4, 1, 226, 204, 2, - 248, 161, 26, 4, 1, 226, 204, 2, 224, 158, 22, 214, 13, 26, 4, 1, 226, - 204, 2, 248, 162, 22, 214, 13, 26, 4, 1, 226, 204, 2, 224, 158, 22, 226, - 114, 26, 4, 1, 226, 204, 2, 248, 162, 22, 226, 114, 26, 6, 1, 226, 204, - 2, 224, 157, 26, 6, 1, 226, 204, 2, 248, 161, 26, 6, 1, 226, 204, 2, 224, - 158, 22, 214, 13, 26, 6, 1, 226, 204, 2, 248, 162, 22, 214, 13, 26, 6, 1, - 226, 204, 2, 224, 158, 22, 226, 114, 26, 6, 1, 226, 204, 2, 248, 162, 22, - 226, 114, 26, 4, 1, 214, 158, 2, 224, 157, 26, 4, 1, 214, 158, 2, 248, - 161, 26, 4, 1, 214, 158, 2, 224, 158, 22, 214, 13, 26, 4, 1, 214, 158, 2, - 248, 162, 22, 214, 13, 26, 4, 1, 214, 158, 2, 224, 158, 22, 226, 114, 26, - 4, 1, 214, 158, 2, 248, 162, 22, 226, 114, 26, 4, 1, 214, 158, 2, 224, - 158, 22, 225, 178, 26, 4, 1, 214, 158, 2, 248, 162, 22, 225, 178, 26, 6, - 1, 214, 158, 2, 248, 161, 26, 6, 1, 214, 158, 2, 248, 162, 22, 214, 13, - 26, 6, 1, 214, 158, 2, 248, 162, 22, 226, 114, 26, 6, 1, 214, 158, 2, - 248, 162, 22, 225, 178, 26, 4, 1, 226, 206, 2, 224, 157, 26, 4, 1, 226, - 206, 2, 248, 161, 26, 4, 1, 226, 206, 2, 224, 158, 22, 214, 13, 26, 4, 1, - 226, 206, 2, 248, 162, 22, 214, 13, 26, 4, 1, 226, 206, 2, 224, 158, 22, - 226, 114, 26, 4, 1, 226, 206, 2, 248, 162, 22, 226, 114, 26, 4, 1, 226, - 206, 2, 224, 158, 22, 225, 178, 26, 4, 1, 226, 206, 2, 248, 162, 22, 225, - 178, 26, 6, 1, 226, 206, 2, 224, 157, 26, 6, 1, 226, 206, 2, 248, 161, - 26, 6, 1, 226, 206, 2, 224, 158, 22, 214, 13, 26, 6, 1, 226, 206, 2, 248, - 162, 22, 214, 13, 26, 6, 1, 226, 206, 2, 224, 158, 22, 226, 114, 26, 6, - 1, 226, 206, 2, 248, 162, 22, 226, 114, 26, 6, 1, 226, 206, 2, 224, 158, - 22, 225, 178, 26, 6, 1, 226, 206, 2, 248, 162, 22, 225, 178, 26, 4, 1, - 254, 152, 2, 214, 13, 26, 4, 1, 254, 152, 2, 226, 114, 26, 4, 1, 245, - 109, 2, 214, 13, 26, 4, 1, 245, 109, 2, 226, 114, 26, 4, 1, 245, 72, 2, - 214, 13, 26, 4, 1, 245, 72, 2, 226, 114, 26, 4, 1, 235, 193, 2, 214, 13, - 26, 4, 1, 235, 193, 2, 226, 114, 26, 4, 1, 226, 204, 2, 214, 13, 26, 4, - 1, 226, 204, 2, 226, 114, 26, 4, 1, 214, 158, 2, 214, 13, 26, 4, 1, 214, - 158, 2, 226, 114, 26, 4, 1, 226, 206, 2, 214, 13, 26, 4, 1, 226, 206, 2, - 226, 114, 26, 4, 1, 254, 152, 2, 224, 158, 22, 210, 219, 26, 4, 1, 254, - 152, 2, 248, 162, 22, 210, 219, 26, 4, 1, 254, 152, 2, 224, 158, 22, 214, - 14, 22, 210, 219, 26, 4, 1, 254, 152, 2, 248, 162, 22, 214, 14, 22, 210, - 219, 26, 4, 1, 254, 152, 2, 224, 158, 22, 226, 115, 22, 210, 219, 26, 4, - 1, 254, 152, 2, 248, 162, 22, 226, 115, 22, 210, 219, 26, 4, 1, 254, 152, - 2, 224, 158, 22, 225, 179, 22, 210, 219, 26, 4, 1, 254, 152, 2, 248, 162, - 22, 225, 179, 22, 210, 219, 26, 6, 1, 254, 152, 2, 224, 158, 22, 224, - 170, 26, 6, 1, 254, 152, 2, 248, 162, 22, 224, 170, 26, 6, 1, 254, 152, - 2, 224, 158, 22, 214, 14, 22, 224, 170, 26, 6, 1, 254, 152, 2, 248, 162, - 22, 214, 14, 22, 224, 170, 26, 6, 1, 254, 152, 2, 224, 158, 22, 226, 115, - 22, 224, 170, 26, 6, 1, 254, 152, 2, 248, 162, 22, 226, 115, 22, 224, - 170, 26, 6, 1, 254, 152, 2, 224, 158, 22, 225, 179, 22, 224, 170, 26, 6, - 1, 254, 152, 2, 248, 162, 22, 225, 179, 22, 224, 170, 26, 4, 1, 245, 72, - 2, 224, 158, 22, 210, 219, 26, 4, 1, 245, 72, 2, 248, 162, 22, 210, 219, - 26, 4, 1, 245, 72, 2, 224, 158, 22, 214, 14, 22, 210, 219, 26, 4, 1, 245, - 72, 2, 248, 162, 22, 214, 14, 22, 210, 219, 26, 4, 1, 245, 72, 2, 224, - 158, 22, 226, 115, 22, 210, 219, 26, 4, 1, 245, 72, 2, 248, 162, 22, 226, - 115, 22, 210, 219, 26, 4, 1, 245, 72, 2, 224, 158, 22, 225, 179, 22, 210, - 219, 26, 4, 1, 245, 72, 2, 248, 162, 22, 225, 179, 22, 210, 219, 26, 6, - 1, 245, 72, 2, 224, 158, 22, 224, 170, 26, 6, 1, 245, 72, 2, 248, 162, - 22, 224, 170, 26, 6, 1, 245, 72, 2, 224, 158, 22, 214, 14, 22, 224, 170, - 26, 6, 1, 245, 72, 2, 248, 162, 22, 214, 14, 22, 224, 170, 26, 6, 1, 245, - 72, 2, 224, 158, 22, 226, 115, 22, 224, 170, 26, 6, 1, 245, 72, 2, 248, - 162, 22, 226, 115, 22, 224, 170, 26, 6, 1, 245, 72, 2, 224, 158, 22, 225, - 179, 22, 224, 170, 26, 6, 1, 245, 72, 2, 248, 162, 22, 225, 179, 22, 224, - 170, 26, 4, 1, 226, 206, 2, 224, 158, 22, 210, 219, 26, 4, 1, 226, 206, - 2, 248, 162, 22, 210, 219, 26, 4, 1, 226, 206, 2, 224, 158, 22, 214, 14, - 22, 210, 219, 26, 4, 1, 226, 206, 2, 248, 162, 22, 214, 14, 22, 210, 219, - 26, 4, 1, 226, 206, 2, 224, 158, 22, 226, 115, 22, 210, 219, 26, 4, 1, - 226, 206, 2, 248, 162, 22, 226, 115, 22, 210, 219, 26, 4, 1, 226, 206, 2, - 224, 158, 22, 225, 179, 22, 210, 219, 26, 4, 1, 226, 206, 2, 248, 162, - 22, 225, 179, 22, 210, 219, 26, 6, 1, 226, 206, 2, 224, 158, 22, 224, - 170, 26, 6, 1, 226, 206, 2, 248, 162, 22, 224, 170, 26, 6, 1, 226, 206, - 2, 224, 158, 22, 214, 14, 22, 224, 170, 26, 6, 1, 226, 206, 2, 248, 162, - 22, 214, 14, 22, 224, 170, 26, 6, 1, 226, 206, 2, 224, 158, 22, 226, 115, - 22, 224, 170, 26, 6, 1, 226, 206, 2, 248, 162, 22, 226, 115, 22, 224, - 170, 26, 6, 1, 226, 206, 2, 224, 158, 22, 225, 179, 22, 224, 170, 26, 6, - 1, 226, 206, 2, 248, 162, 22, 225, 179, 22, 224, 170, 26, 4, 1, 254, 152, - 2, 213, 120, 26, 4, 1, 254, 152, 2, 231, 237, 26, 4, 1, 254, 152, 2, 214, - 14, 22, 210, 219, 26, 4, 1, 254, 152, 2, 210, 219, 26, 4, 1, 254, 152, 2, - 226, 115, 22, 210, 219, 26, 4, 1, 254, 152, 2, 225, 178, 26, 4, 1, 254, - 152, 2, 225, 179, 22, 210, 219, 26, 6, 1, 254, 152, 2, 213, 120, 26, 6, - 1, 254, 152, 2, 231, 237, 26, 6, 1, 254, 152, 2, 214, 13, 26, 6, 1, 254, - 152, 2, 226, 114, 26, 6, 1, 254, 152, 2, 224, 170, 26, 234, 8, 26, 224, - 170, 26, 224, 157, 26, 225, 178, 26, 248, 4, 22, 225, 178, 26, 4, 1, 245, - 72, 2, 214, 14, 22, 210, 219, 26, 4, 1, 245, 72, 2, 210, 219, 26, 4, 1, - 245, 72, 2, 226, 115, 22, 210, 219, 26, 4, 1, 245, 72, 2, 225, 178, 26, - 4, 1, 245, 72, 2, 225, 179, 22, 210, 219, 26, 6, 1, 245, 109, 2, 214, 13, - 26, 6, 1, 245, 109, 2, 226, 114, 26, 6, 1, 245, 72, 2, 214, 13, 26, 6, 1, - 245, 72, 2, 226, 114, 26, 6, 1, 245, 72, 2, 224, 170, 26, 224, 158, 22, - 214, 13, 26, 224, 158, 22, 226, 114, 26, 224, 158, 22, 225, 178, 26, 4, - 1, 235, 193, 2, 213, 120, 26, 4, 1, 235, 193, 2, 231, 237, 26, 4, 1, 235, - 193, 2, 248, 4, 22, 214, 13, 26, 4, 1, 235, 193, 2, 248, 4, 22, 226, 114, - 26, 4, 1, 235, 193, 2, 225, 178, 26, 4, 1, 235, 193, 2, 248, 4, 22, 225, - 178, 26, 6, 1, 235, 193, 2, 213, 120, 26, 6, 1, 235, 193, 2, 231, 237, - 26, 6, 1, 235, 193, 2, 214, 13, 26, 6, 1, 235, 193, 2, 226, 114, 26, 248, - 162, 22, 214, 13, 26, 248, 162, 22, 226, 114, 26, 248, 162, 22, 225, 178, - 26, 4, 1, 214, 158, 2, 213, 120, 26, 4, 1, 214, 158, 2, 231, 237, 26, 4, - 1, 214, 158, 2, 248, 4, 22, 214, 13, 26, 4, 1, 214, 158, 2, 248, 4, 22, - 226, 114, 26, 4, 1, 223, 41, 2, 224, 157, 26, 4, 1, 223, 41, 2, 248, 161, - 26, 4, 1, 214, 158, 2, 225, 178, 26, 4, 1, 214, 158, 2, 248, 4, 22, 225, - 178, 26, 6, 1, 214, 158, 2, 213, 120, 26, 6, 1, 214, 158, 2, 231, 237, - 26, 6, 1, 214, 158, 2, 214, 13, 26, 6, 1, 214, 158, 2, 226, 114, 26, 6, - 1, 223, 41, 2, 248, 161, 26, 248, 4, 22, 214, 13, 26, 248, 4, 22, 226, - 114, 26, 214, 13, 26, 4, 1, 226, 206, 2, 214, 14, 22, 210, 219, 26, 4, 1, - 226, 206, 2, 210, 219, 26, 4, 1, 226, 206, 2, 226, 115, 22, 210, 219, 26, - 4, 1, 226, 206, 2, 225, 178, 26, 4, 1, 226, 206, 2, 225, 179, 22, 210, - 219, 26, 6, 1, 226, 204, 2, 214, 13, 26, 6, 1, 226, 204, 2, 226, 114, 26, - 6, 1, 226, 206, 2, 214, 13, 26, 6, 1, 226, 206, 2, 226, 114, 26, 6, 1, - 226, 206, 2, 224, 170, 26, 226, 114, 26, 248, 161, 245, 159, 224, 30, - 245, 168, 224, 30, 245, 159, 219, 20, 245, 168, 219, 20, 216, 142, 219, - 20, 244, 17, 219, 20, 219, 125, 219, 20, 244, 120, 219, 20, 224, 144, - 219, 20, 216, 171, 219, 20, 242, 42, 219, 20, 210, 87, 211, 245, 219, 20, - 210, 87, 211, 245, 228, 72, 210, 87, 211, 245, 235, 69, 233, 44, 79, 222, - 246, 79, 240, 175, 228, 73, 240, 175, 244, 120, 248, 164, 245, 159, 248, - 164, 245, 168, 248, 164, 203, 130, 52, 67, 232, 219, 52, 121, 232, 219, - 43, 219, 157, 224, 1, 79, 44, 219, 157, 224, 1, 79, 219, 157, 232, 115, - 224, 1, 79, 219, 157, 241, 170, 224, 1, 79, 43, 52, 224, 1, 79, 44, 52, - 224, 1, 79, 52, 232, 115, 224, 1, 79, 52, 241, 170, 224, 1, 79, 248, 213, - 52, 248, 213, 251, 121, 215, 223, 251, 121, 123, 59, 233, 62, 113, 59, - 233, 62, 203, 245, 171, 240, 173, 225, 13, 232, 220, 220, 139, 226, 19, - 220, 139, 233, 44, 245, 166, 222, 246, 245, 166, 224, 249, 247, 204, 244, - 27, 233, 44, 226, 121, 222, 246, 226, 121, 229, 199, 228, 78, 219, 20, - 225, 186, 230, 198, 50, 225, 186, 216, 249, 216, 149, 50, 224, 193, 52, - 224, 193, 215, 212, 224, 193, 223, 52, 224, 193, 223, 52, 52, 224, 193, - 223, 52, 215, 212, 224, 193, 250, 246, 219, 157, 233, 48, 254, 118, 224, - 1, 79, 219, 157, 222, 250, 254, 118, 224, 1, 79, 223, 110, 79, 52, 245, - 39, 79, 235, 208, 226, 123, 214, 180, 135, 216, 112, 250, 247, 235, 223, - 225, 13, 253, 222, 240, 176, 251, 121, 244, 10, 219, 97, 43, 42, 251, - 166, 2, 224, 10, 44, 42, 251, 166, 2, 224, 10, 52, 224, 16, 79, 224, 16, - 245, 39, 79, 245, 39, 224, 16, 79, 216, 71, 5, 245, 73, 223, 52, 225, 71, - 50, 85, 140, 251, 121, 85, 97, 251, 121, 121, 253, 224, 223, 52, 220, - 152, 250, 9, 214, 163, 113, 253, 223, 254, 167, 213, 188, 249, 225, 230, - 187, 50, 217, 235, 248, 164, 235, 200, 214, 180, 244, 60, 224, 144, 79, - 134, 59, 224, 143, 224, 27, 224, 193, 244, 19, 59, 224, 143, 244, 89, 59, - 224, 143, 113, 59, 224, 143, 244, 19, 59, 79, 246, 126, 249, 138, 215, - 222, 67, 244, 19, 247, 126, 231, 87, 11, 219, 20, 211, 209, 235, 69, 243, - 234, 254, 60, 235, 198, 216, 86, 235, 198, 220, 139, 235, 198, 225, 25, - 233, 44, 235, 171, 222, 246, 235, 171, 244, 100, 218, 91, 235, 171, 224, - 249, 247, 204, 235, 171, 235, 235, 217, 183, 217, 252, 255, 14, 217, 183, - 217, 252, 235, 235, 9, 244, 28, 220, 82, 255, 14, 9, 244, 28, 220, 82, - 229, 194, 21, 220, 83, 228, 74, 21, 220, 83, 218, 24, 210, 86, 218, 24, - 7, 4, 1, 74, 218, 24, 161, 218, 24, 190, 218, 24, 195, 218, 24, 199, 218, - 24, 196, 218, 24, 201, 218, 24, 96, 50, 218, 24, 230, 186, 218, 24, 245, - 106, 50, 218, 24, 43, 226, 7, 218, 24, 44, 226, 7, 218, 24, 7, 4, 1, 230, - 30, 218, 66, 210, 86, 218, 66, 111, 218, 66, 105, 218, 66, 158, 218, 66, - 161, 218, 66, 190, 218, 66, 195, 218, 66, 199, 218, 66, 196, 218, 66, - 201, 218, 66, 96, 50, 218, 66, 230, 186, 218, 66, 245, 106, 50, 218, 66, - 43, 226, 7, 218, 66, 44, 226, 7, 7, 218, 66, 4, 1, 61, 7, 218, 66, 4, 1, - 76, 7, 218, 66, 4, 1, 78, 7, 218, 66, 4, 1, 211, 178, 7, 218, 66, 4, 1, - 221, 197, 7, 218, 66, 4, 1, 242, 67, 7, 218, 66, 4, 1, 235, 29, 7, 218, - 66, 4, 1, 156, 7, 218, 66, 4, 1, 194, 7, 218, 66, 4, 1, 230, 30, 7, 218, - 66, 4, 1, 226, 109, 7, 218, 66, 4, 1, 222, 93, 7, 218, 66, 4, 1, 217, - 153, 245, 54, 50, 249, 235, 50, 249, 125, 50, 244, 3, 244, 6, 50, 232, - 204, 50, 230, 199, 50, 229, 215, 50, 225, 165, 50, 222, 120, 50, 211, - 217, 50, 166, 220, 51, 50, 247, 135, 50, 245, 55, 50, 234, 82, 50, 215, - 113, 50, 246, 109, 50, 243, 47, 225, 196, 50, 225, 163, 50, 242, 116, 50, - 253, 190, 50, 240, 235, 50, 250, 193, 50, 232, 197, 216, 4, 50, 219, 2, - 50, 216, 246, 50, 235, 248, 222, 120, 50, 215, 97, 232, 204, 50, 38, 43, - 242, 6, 48, 38, 44, 242, 6, 48, 38, 200, 67, 232, 220, 226, 124, 38, 219, - 253, 67, 232, 220, 226, 124, 38, 254, 96, 80, 48, 38, 250, 10, 80, 48, - 38, 43, 80, 48, 38, 44, 80, 48, 38, 222, 237, 226, 124, 38, 250, 10, 222, - 237, 226, 124, 38, 254, 96, 222, 237, 226, 124, 38, 134, 170, 48, 38, - 244, 19, 170, 48, 38, 245, 154, 250, 43, 38, 245, 154, 218, 236, 38, 245, - 154, 248, 0, 38, 245, 154, 250, 44, 252, 188, 38, 43, 44, 80, 48, 38, - 245, 154, 221, 190, 38, 245, 154, 234, 141, 38, 245, 154, 214, 155, 225, - 10, 215, 226, 38, 223, 53, 219, 49, 226, 124, 38, 52, 67, 218, 105, 226, - 124, 38, 254, 106, 87, 38, 215, 212, 214, 182, 38, 211, 247, 251, 148, - 48, 38, 140, 80, 226, 124, 38, 200, 52, 219, 49, 226, 124, 38, 97, 242, - 6, 2, 252, 147, 246, 111, 38, 140, 242, 6, 2, 252, 147, 246, 111, 38, 43, - 80, 51, 38, 44, 80, 51, 38, 253, 225, 48, 255, 20, 226, 235, 255, 4, 216, - 43, 216, 197, 218, 75, 139, 6, 251, 74, 248, 79, 250, 186, 250, 183, 232, - 220, 87, 250, 248, 226, 235, 251, 34, 214, 189, 245, 56, 249, 199, 221, - 187, 248, 79, 244, 187, 119, 4, 243, 209, 119, 6, 242, 67, 251, 227, 6, - 242, 67, 139, 6, 242, 67, 225, 40, 249, 199, 225, 40, 249, 200, 115, 113, - 225, 111, 119, 6, 74, 251, 227, 6, 74, 119, 6, 156, 119, 4, 156, 233, - 155, 57, 252, 149, 87, 139, 6, 230, 30, 227, 200, 50, 219, 33, 223, 122, - 249, 170, 119, 6, 226, 109, 139, 6, 226, 109, 139, 6, 224, 99, 119, 6, - 153, 251, 227, 6, 153, 139, 6, 153, 224, 199, 217, 72, 223, 65, 220, 134, - 79, 217, 2, 50, 215, 254, 164, 50, 213, 240, 139, 6, 210, 159, 226, 137, - 50, 226, 225, 50, 235, 200, 226, 225, 50, 251, 227, 6, 210, 159, 215, 94, - 26, 4, 1, 235, 192, 234, 179, 50, 254, 115, 50, 119, 6, 253, 166, 251, - 227, 6, 251, 74, 245, 76, 87, 119, 4, 76, 119, 6, 76, 119, 6, 245, 14, - 215, 94, 6, 245, 14, 119, 6, 194, 119, 4, 78, 109, 87, 252, 37, 87, 242, - 209, 87, 248, 198, 87, 235, 239, 219, 31, 222, 189, 6, 224, 99, 244, 190, - 50, 139, 4, 225, 111, 139, 4, 243, 114, 139, 6, 243, 114, 139, 6, 225, - 111, 139, 230, 29, 218, 41, 215, 94, 35, 6, 243, 209, 215, 94, 35, 6, - 156, 223, 52, 35, 6, 156, 215, 94, 35, 6, 211, 117, 139, 32, 6, 249, 68, - 139, 32, 4, 249, 68, 139, 32, 4, 76, 139, 32, 4, 74, 139, 32, 4, 235, - 150, 224, 173, 232, 219, 215, 94, 254, 134, 225, 186, 50, 254, 189, 215, - 94, 4, 245, 14, 16, 31, 221, 254, 219, 31, 212, 114, 244, 10, 123, 220, - 120, 212, 114, 244, 10, 123, 228, 199, 212, 114, 244, 10, 123, 216, 242, - 212, 114, 244, 10, 123, 216, 169, 212, 114, 244, 10, 113, 216, 167, 212, - 114, 244, 10, 123, 244, 125, 212, 114, 244, 10, 113, 244, 124, 212, 114, - 244, 10, 134, 244, 124, 212, 114, 244, 10, 244, 19, 244, 124, 212, 114, - 244, 10, 123, 219, 117, 212, 114, 244, 10, 244, 89, 219, 115, 212, 114, - 244, 10, 123, 245, 196, 212, 114, 244, 10, 134, 245, 194, 212, 114, 244, - 10, 244, 89, 245, 194, 212, 114, 244, 10, 220, 124, 245, 194, 244, 10, - 227, 201, 111, 222, 200, 227, 202, 111, 222, 200, 227, 202, 105, 222, - 200, 227, 202, 158, 222, 200, 227, 202, 161, 222, 200, 227, 202, 190, - 222, 200, 227, 202, 195, 222, 200, 227, 202, 199, 222, 200, 227, 202, - 196, 222, 200, 227, 202, 201, 222, 200, 227, 202, 216, 248, 222, 200, - 227, 202, 245, 175, 222, 200, 227, 202, 215, 76, 222, 200, 227, 202, 244, - 122, 222, 200, 227, 202, 123, 240, 217, 222, 200, 227, 202, 244, 89, 240, - 217, 222, 200, 227, 202, 123, 216, 148, 4, 222, 200, 227, 202, 111, 4, - 222, 200, 227, 202, 105, 4, 222, 200, 227, 202, 158, 4, 222, 200, 227, - 202, 161, 4, 222, 200, 227, 202, 190, 4, 222, 200, 227, 202, 195, 4, 222, - 200, 227, 202, 199, 4, 222, 200, 227, 202, 196, 4, 222, 200, 227, 202, - 201, 4, 222, 200, 227, 202, 216, 248, 4, 222, 200, 227, 202, 245, 175, 4, - 222, 200, 227, 202, 215, 76, 4, 222, 200, 227, 202, 244, 122, 4, 222, - 200, 227, 202, 123, 240, 217, 4, 222, 200, 227, 202, 244, 89, 240, 217, - 4, 222, 200, 227, 202, 123, 216, 148, 222, 200, 227, 202, 123, 216, 149, - 251, 75, 249, 68, 222, 200, 227, 202, 244, 89, 216, 148, 222, 200, 227, - 202, 216, 249, 216, 148, 222, 200, 227, 202, 223, 52, 123, 240, 217, 7, - 4, 1, 223, 52, 251, 74, 222, 200, 227, 202, 219, 127, 233, 84, 17, 222, - 200, 227, 202, 244, 123, 245, 234, 17, 222, 200, 227, 202, 244, 123, 216, - 148, 222, 200, 227, 202, 123, 240, 218, 216, 148, 212, 114, 244, 10, 210, - 87, 216, 167, 140, 75, 214, 153, 75, 97, 75, 246, 112, 75, 43, 44, 75, - 120, 124, 75, 228, 61, 212, 9, 75, 228, 61, 245, 228, 75, 219, 30, 245, - 228, 75, 219, 30, 212, 9, 75, 140, 80, 2, 91, 97, 80, 2, 91, 140, 212, - 36, 75, 97, 212, 36, 75, 140, 113, 241, 241, 75, 214, 153, 113, 241, 241, - 75, 97, 113, 241, 241, 75, 246, 112, 113, 241, 241, 75, 140, 80, 2, 217, - 78, 97, 80, 2, 217, 78, 140, 80, 243, 251, 130, 214, 153, 80, 243, 251, - 130, 97, 80, 243, 251, 130, 246, 112, 80, 243, 251, 130, 120, 124, 80, 2, - 252, 135, 140, 80, 2, 103, 97, 80, 2, 103, 140, 80, 2, 232, 129, 97, 80, - 2, 232, 129, 43, 44, 212, 36, 75, 43, 44, 80, 2, 91, 246, 112, 210, 35, - 75, 214, 153, 80, 2, 216, 78, 233, 43, 214, 153, 80, 2, 216, 78, 222, - 244, 246, 112, 80, 2, 216, 78, 233, 43, 246, 112, 80, 2, 216, 78, 222, - 244, 97, 80, 2, 249, 169, 246, 111, 246, 112, 80, 2, 249, 169, 233, 43, - 254, 96, 216, 15, 220, 155, 75, 250, 10, 216, 15, 220, 155, 75, 228, 61, - 212, 9, 80, 216, 43, 200, 130, 140, 80, 216, 43, 252, 149, 115, 97, 80, - 216, 43, 130, 254, 96, 204, 250, 44, 75, 250, 10, 204, 250, 44, 75, 140, - 242, 6, 2, 252, 147, 214, 152, 140, 242, 6, 2, 252, 147, 246, 111, 214, - 153, 242, 6, 2, 252, 147, 222, 244, 214, 153, 242, 6, 2, 252, 147, 233, - 43, 97, 242, 6, 2, 252, 147, 214, 152, 97, 242, 6, 2, 252, 147, 246, 111, - 246, 112, 242, 6, 2, 252, 147, 222, 244, 246, 112, 242, 6, 2, 252, 147, - 233, 43, 97, 80, 115, 140, 75, 214, 153, 80, 140, 64, 246, 112, 75, 140, - 80, 115, 97, 75, 140, 226, 74, 253, 255, 214, 153, 226, 74, 253, 255, 97, - 226, 74, 253, 255, 246, 112, 226, 74, 253, 255, 140, 242, 6, 115, 97, - 242, 5, 97, 242, 6, 115, 140, 242, 5, 140, 52, 80, 2, 91, 43, 44, 52, 80, - 2, 91, 97, 52, 80, 2, 91, 140, 52, 75, 214, 153, 52, 75, 97, 52, 75, 246, - 112, 52, 75, 43, 44, 52, 75, 120, 124, 52, 75, 228, 61, 212, 9, 52, 75, - 228, 61, 245, 228, 52, 75, 219, 30, 245, 228, 52, 75, 219, 30, 212, 9, - 52, 75, 140, 215, 212, 75, 97, 215, 212, 75, 140, 218, 232, 75, 97, 218, - 232, 75, 214, 153, 80, 2, 52, 91, 246, 112, 80, 2, 52, 91, 140, 248, 163, - 75, 214, 153, 248, 163, 75, 97, 248, 163, 75, 246, 112, 248, 163, 75, - 140, 80, 216, 43, 130, 97, 80, 216, 43, 130, 140, 71, 75, 214, 153, 71, - 75, 97, 71, 75, 246, 112, 71, 75, 214, 153, 71, 80, 243, 251, 130, 214, - 153, 71, 80, 226, 201, 225, 217, 214, 153, 71, 80, 226, 201, 225, 218, 2, - 203, 130, 214, 153, 71, 80, 226, 201, 225, 218, 2, 67, 130, 214, 153, 71, - 52, 75, 214, 153, 71, 52, 80, 226, 201, 225, 217, 97, 71, 80, 243, 251, - 212, 56, 228, 61, 212, 9, 80, 216, 43, 249, 168, 219, 30, 245, 228, 80, - 216, 43, 249, 168, 120, 124, 71, 75, 44, 80, 2, 4, 250, 43, 246, 112, 80, - 140, 64, 214, 153, 75, 134, 97, 253, 255, 140, 80, 2, 67, 91, 97, 80, 2, - 67, 91, 43, 44, 80, 2, 67, 91, 140, 80, 2, 52, 67, 91, 97, 80, 2, 52, 67, - 91, 43, 44, 80, 2, 52, 67, 91, 140, 226, 177, 75, 97, 226, 177, 75, 43, - 44, 226, 177, 75, 31, 254, 163, 249, 222, 226, 1, 247, 241, 216, 188, - 245, 35, 216, 188, 247, 146, 228, 57, 245, 36, 245, 160, 220, 129, 235, - 252, 229, 226, 245, 178, 226, 235, 228, 57, 254, 132, 245, 178, 226, 235, - 4, 245, 178, 226, 235, 249, 194, 253, 246, 231, 67, 247, 146, 228, 57, - 249, 196, 253, 246, 231, 67, 4, 249, 194, 253, 246, 231, 67, 245, 151, - 64, 224, 175, 230, 29, 224, 183, 230, 29, 249, 173, 230, 29, 218, 41, - 230, 187, 50, 230, 185, 50, 59, 225, 25, 247, 177, 219, 97, 220, 130, - 230, 186, 253, 225, 226, 171, 222, 237, 226, 171, 251, 122, 226, 171, 42, - 222, 195, 249, 117, 222, 195, 244, 12, 222, 195, 224, 171, 112, 235, 241, - 44, 254, 117, 254, 117, 231, 93, 254, 117, 219, 1, 254, 117, 247, 179, - 247, 146, 228, 57, 247, 182, 226, 12, 112, 228, 57, 226, 12, 112, 232, - 152, 254, 126, 232, 152, 226, 162, 235, 205, 214, 175, 235, 218, 52, 235, - 218, 215, 212, 235, 218, 249, 190, 235, 218, 218, 14, 235, 218, 213, 129, - 235, 218, 250, 10, 235, 218, 250, 10, 249, 190, 235, 218, 254, 96, 249, - 190, 235, 218, 216, 187, 252, 75, 223, 140, 224, 172, 59, 230, 186, 245, - 41, 243, 53, 224, 172, 241, 64, 216, 90, 226, 171, 223, 52, 184, 235, - 200, 233, 71, 222, 93, 219, 159, 212, 35, 211, 200, 224, 183, 228, 57, - 184, 230, 187, 184, 253, 218, 128, 112, 228, 57, 253, 218, 128, 112, 254, - 56, 128, 112, 254, 56, 251, 96, 228, 57, 255, 13, 128, 112, 229, 105, - 254, 56, 228, 64, 255, 13, 128, 112, 254, 156, 128, 112, 228, 57, 254, - 156, 128, 112, 254, 156, 128, 177, 128, 112, 215, 212, 184, 254, 164, - 128, 112, 245, 102, 112, 243, 52, 245, 102, 112, 247, 242, 252, 31, 254, - 58, 216, 197, 232, 227, 243, 52, 128, 112, 254, 56, 128, 216, 43, 177, - 216, 197, 236, 22, 226, 235, 236, 22, 64, 177, 254, 56, 128, 112, 249, - 235, 245, 105, 245, 106, 249, 234, 222, 237, 236, 7, 128, 112, 222, 237, - 128, 112, 249, 162, 112, 245, 75, 245, 104, 112, 218, 159, 245, 105, 248, - 63, 128, 112, 128, 216, 43, 251, 86, 248, 80, 231, 93, 251, 85, 224, 14, - 128, 112, 228, 57, 128, 112, 240, 111, 112, 228, 57, 240, 111, 112, 218, - 111, 245, 102, 112, 233, 21, 177, 128, 112, 242, 137, 177, 128, 112, 233, - 21, 115, 128, 112, 242, 137, 115, 128, 112, 233, 21, 251, 96, 228, 57, - 128, 112, 242, 137, 251, 96, 228, 57, 128, 112, 230, 102, 233, 20, 230, - 102, 242, 136, 252, 31, 228, 57, 245, 102, 112, 228, 57, 233, 20, 228, - 57, 242, 136, 229, 105, 233, 21, 228, 64, 128, 112, 229, 105, 242, 137, - 228, 64, 128, 112, 233, 21, 177, 245, 102, 112, 242, 137, 177, 245, 102, - 112, 229, 105, 233, 21, 228, 64, 245, 102, 112, 229, 105, 242, 137, 228, - 64, 245, 102, 112, 233, 21, 177, 242, 136, 242, 137, 177, 233, 20, 229, - 105, 233, 21, 228, 64, 242, 136, 229, 105, 242, 137, 228, 64, 233, 20, - 224, 205, 218, 56, 224, 206, 177, 128, 112, 218, 57, 177, 128, 112, 224, - 206, 177, 245, 102, 112, 218, 57, 177, 245, 102, 112, 247, 146, 228, 57, - 224, 208, 247, 146, 228, 57, 218, 58, 218, 65, 226, 235, 218, 23, 226, - 235, 228, 57, 116, 218, 65, 226, 235, 228, 57, 116, 218, 23, 226, 235, - 218, 65, 64, 177, 128, 112, 218, 23, 64, 177, 128, 112, 229, 105, 116, - 218, 65, 64, 228, 64, 128, 112, 229, 105, 116, 218, 23, 64, 228, 64, 128, - 112, 218, 65, 64, 2, 228, 57, 128, 112, 218, 23, 64, 2, 228, 57, 128, - 112, 230, 86, 230, 87, 230, 88, 230, 87, 214, 175, 42, 236, 22, 226, 235, - 42, 226, 154, 226, 235, 42, 236, 22, 64, 177, 128, 112, 42, 226, 154, 64, - 177, 128, 112, 42, 251, 3, 42, 249, 110, 37, 225, 25, 37, 230, 186, 37, - 216, 86, 37, 247, 177, 219, 97, 37, 59, 226, 171, 37, 222, 237, 226, 171, - 37, 253, 225, 226, 171, 37, 245, 105, 37, 248, 164, 92, 225, 25, 92, 230, - 186, 92, 216, 86, 92, 59, 226, 171, 44, 217, 88, 43, 217, 88, 124, 217, - 88, 120, 217, 88, 253, 228, 230, 161, 215, 192, 244, 33, 215, 212, 67, - 252, 149, 44, 215, 93, 52, 67, 252, 149, 52, 44, 215, 93, 247, 146, 228, - 57, 224, 166, 228, 57, 215, 192, 247, 146, 228, 57, 244, 34, 229, 107, - 52, 67, 252, 149, 52, 44, 215, 93, 224, 206, 214, 184, 223, 94, 218, 57, - 214, 184, 223, 94, 228, 62, 218, 78, 226, 235, 249, 194, 253, 246, 228, - 62, 218, 77, 228, 62, 218, 78, 64, 177, 128, 112, 249, 194, 253, 246, - 228, 62, 218, 78, 177, 128, 112, 226, 154, 226, 235, 236, 22, 226, 235, - 230, 92, 241, 207, 249, 204, 231, 142, 235, 215, 211, 145, 229, 207, 228, - 63, 44, 254, 118, 2, 254, 33, 44, 215, 226, 230, 29, 232, 152, 254, 126, - 230, 29, 232, 152, 226, 162, 230, 29, 235, 205, 230, 29, 214, 175, 248, - 1, 226, 171, 59, 226, 171, 218, 159, 226, 171, 247, 177, 216, 86, 251, - 172, 43, 228, 62, 244, 189, 220, 151, 224, 183, 44, 228, 62, 244, 189, - 220, 151, 224, 183, 43, 220, 151, 224, 183, 44, 220, 151, 224, 183, 223, - 52, 216, 90, 245, 105, 249, 107, 232, 152, 226, 162, 249, 107, 232, 152, - 254, 126, 52, 218, 64, 52, 218, 22, 52, 235, 205, 52, 214, 175, 225, 50, - 128, 22, 226, 12, 112, 233, 21, 2, 247, 128, 242, 137, 2, 247, 128, 213, - 187, 230, 102, 233, 20, 213, 187, 230, 102, 242, 136, 233, 21, 128, 216, - 43, 177, 242, 136, 242, 137, 128, 216, 43, 177, 233, 20, 128, 216, 43, - 177, 233, 20, 128, 216, 43, 177, 242, 136, 128, 216, 43, 177, 224, 205, - 128, 216, 43, 177, 218, 56, 247, 146, 228, 57, 224, 209, 177, 245, 107, - 247, 146, 228, 57, 218, 59, 177, 245, 107, 228, 57, 42, 236, 22, 64, 177, - 128, 112, 228, 57, 42, 226, 154, 64, 177, 128, 112, 42, 236, 22, 64, 177, - 228, 57, 128, 112, 42, 226, 154, 64, 177, 228, 57, 128, 112, 233, 21, - 251, 96, 228, 57, 245, 102, 112, 242, 137, 251, 96, 228, 57, 245, 102, - 112, 224, 206, 251, 96, 228, 57, 245, 102, 112, 218, 57, 251, 96, 228, - 57, 245, 102, 112, 228, 57, 228, 62, 218, 78, 226, 235, 247, 146, 228, - 57, 249, 196, 253, 246, 228, 62, 218, 77, 228, 57, 228, 62, 218, 78, 64, - 177, 128, 112, 247, 146, 228, 57, 249, 196, 253, 246, 228, 62, 218, 78, - 177, 245, 107, 67, 245, 171, 230, 227, 203, 245, 171, 120, 44, 248, 7, - 245, 171, 124, 44, 248, 7, 245, 171, 245, 178, 64, 2, 200, 203, 91, 245, - 178, 64, 2, 67, 252, 149, 253, 215, 245, 151, 64, 203, 91, 4, 245, 178, - 64, 2, 67, 252, 149, 253, 215, 245, 151, 64, 203, 91, 245, 178, 64, 2, - 59, 48, 245, 178, 64, 2, 226, 127, 4, 245, 178, 64, 2, 226, 127, 245, - 178, 64, 2, 214, 183, 245, 178, 64, 2, 113, 203, 218, 92, 249, 194, 2, - 200, 203, 91, 249, 194, 2, 67, 252, 149, 253, 215, 245, 151, 64, 203, 91, - 4, 249, 194, 2, 67, 252, 149, 253, 215, 245, 151, 64, 203, 91, 249, 194, - 2, 226, 127, 4, 249, 194, 2, 226, 127, 210, 160, 189, 252, 181, 231, 66, - 248, 2, 50, 245, 180, 75, 240, 241, 120, 254, 1, 124, 254, 1, 224, 178, - 225, 168, 212, 32, 232, 219, 43, 250, 189, 44, 250, 189, 43, 244, 65, 44, - 244, 65, 251, 183, 44, 249, 140, 251, 183, 43, 249, 140, 216, 15, 44, - 249, 140, 216, 15, 43, 249, 140, 223, 52, 228, 57, 50, 42, 232, 110, 254, - 33, 221, 166, 221, 173, 217, 2, 223, 123, 224, 244, 235, 245, 213, 165, - 218, 236, 225, 44, 64, 235, 214, 50, 215, 94, 228, 57, 50, 212, 42, 240, - 243, 216, 15, 43, 249, 168, 216, 15, 44, 249, 168, 251, 183, 43, 249, - 168, 251, 183, 44, 249, 168, 216, 15, 163, 235, 218, 251, 183, 163, 235, - 218, 243, 248, 219, 77, 120, 254, 2, 252, 32, 113, 203, 252, 137, 226, - 164, 234, 144, 245, 98, 216, 43, 216, 197, 222, 254, 211, 179, 236, 7, - 116, 223, 120, 251, 171, 234, 143, 233, 48, 254, 118, 127, 222, 250, 254, - 118, 127, 245, 98, 216, 43, 216, 197, 233, 52, 252, 43, 222, 236, 249, - 78, 254, 164, 254, 9, 217, 182, 216, 5, 222, 125, 247, 223, 226, 155, - 249, 206, 217, 53, 219, 88, 249, 159, 249, 158, 254, 74, 243, 232, 16, - 240, 158, 254, 74, 243, 232, 16, 218, 230, 224, 30, 254, 74, 243, 232, - 16, 224, 31, 245, 107, 254, 74, 243, 232, 16, 224, 31, 247, 182, 254, 74, - 243, 232, 16, 224, 31, 248, 0, 254, 74, 243, 232, 16, 224, 31, 235, 62, - 254, 74, 243, 232, 16, 224, 31, 250, 43, 254, 74, 243, 232, 16, 250, 44, - 218, 137, 254, 74, 243, 232, 16, 250, 44, 235, 62, 254, 74, 243, 232, 16, - 219, 98, 130, 254, 74, 243, 232, 16, 252, 189, 130, 254, 74, 243, 232, - 16, 224, 31, 219, 97, 254, 74, 243, 232, 16, 224, 31, 252, 188, 254, 74, - 243, 232, 16, 224, 31, 233, 20, 254, 74, 243, 232, 16, 224, 31, 242, 136, - 254, 74, 243, 232, 16, 140, 214, 19, 254, 74, 243, 232, 16, 97, 214, 19, - 254, 74, 243, 232, 16, 224, 31, 140, 75, 254, 74, 243, 232, 16, 224, 31, - 97, 75, 254, 74, 243, 232, 16, 250, 44, 252, 188, 254, 74, 243, 232, 16, - 124, 217, 89, 214, 183, 254, 74, 243, 232, 16, 248, 63, 218, 137, 254, - 74, 243, 232, 16, 224, 31, 124, 250, 246, 254, 74, 243, 232, 16, 224, 31, - 248, 62, 254, 74, 243, 232, 16, 124, 217, 89, 235, 62, 254, 74, 243, 232, - 16, 214, 153, 214, 19, 254, 74, 243, 232, 16, 224, 31, 214, 153, 75, 254, - 74, 243, 232, 16, 120, 217, 89, 226, 127, 254, 74, 243, 232, 16, 248, 74, - 218, 137, 254, 74, 243, 232, 16, 224, 31, 120, 250, 246, 254, 74, 243, - 232, 16, 224, 31, 248, 73, 254, 74, 243, 232, 16, 120, 217, 89, 235, 62, - 254, 74, 243, 232, 16, 246, 112, 214, 19, 254, 74, 243, 232, 16, 224, 31, - 246, 112, 75, 254, 74, 243, 232, 16, 224, 0, 214, 183, 254, 74, 243, 232, - 16, 248, 63, 214, 183, 254, 74, 243, 232, 16, 248, 1, 214, 183, 254, 74, - 243, 232, 16, 235, 63, 214, 183, 254, 74, 243, 232, 16, 250, 44, 214, - 183, 254, 74, 243, 232, 16, 120, 220, 7, 235, 62, 254, 74, 243, 232, 16, - 224, 0, 224, 30, 254, 74, 243, 232, 16, 250, 44, 218, 158, 254, 74, 243, - 232, 16, 224, 31, 249, 234, 254, 74, 243, 232, 16, 120, 217, 89, 248, 9, - 254, 74, 243, 232, 16, 248, 74, 248, 9, 254, 74, 243, 232, 16, 218, 159, - 248, 9, 254, 74, 243, 232, 16, 235, 63, 248, 9, 254, 74, 243, 232, 16, - 250, 44, 248, 9, 254, 74, 243, 232, 16, 124, 220, 7, 218, 137, 254, 74, - 243, 232, 16, 43, 220, 7, 218, 137, 254, 74, 243, 232, 16, 216, 90, 248, - 9, 254, 74, 243, 232, 16, 242, 137, 248, 9, 254, 74, 243, 232, 16, 249, - 228, 130, 254, 74, 243, 232, 16, 248, 74, 184, 254, 74, 243, 232, 16, - 210, 34, 254, 74, 243, 232, 16, 218, 138, 184, 254, 74, 243, 232, 16, - 220, 153, 214, 183, 254, 74, 243, 232, 16, 224, 31, 228, 57, 245, 107, - 254, 74, 243, 232, 16, 224, 31, 224, 15, 254, 74, 243, 232, 16, 124, 250, - 247, 184, 254, 74, 243, 232, 16, 120, 250, 247, 184, 254, 74, 243, 232, - 16, 235, 192, 254, 74, 243, 232, 16, 223, 40, 254, 74, 243, 232, 16, 226, - 205, 254, 74, 243, 232, 16, 254, 152, 214, 183, 254, 74, 243, 232, 16, - 245, 109, 214, 183, 254, 74, 243, 232, 16, 235, 193, 214, 183, 254, 74, - 243, 232, 16, 226, 206, 214, 183, 254, 74, 243, 232, 16, 254, 151, 228, - 57, 250, 138, 79, 44, 254, 118, 2, 246, 112, 210, 35, 75, 219, 237, 204, - 251, 171, 252, 53, 87, 67, 232, 220, 2, 230, 229, 247, 128, 235, 223, 87, - 249, 191, 214, 181, 87, 247, 197, 214, 181, 87, 245, 162, 87, 249, 218, - 87, 71, 42, 2, 250, 183, 67, 232, 219, 245, 138, 87, 254, 147, 234, 145, - 87, 241, 220, 87, 37, 203, 252, 149, 2, 228, 55, 37, 215, 227, 246, 114, - 251, 143, 250, 44, 2, 228, 59, 75, 214, 179, 87, 230, 142, 87, 240, 171, - 87, 226, 178, 242, 66, 87, 226, 178, 233, 153, 87, 225, 248, 87, 225, - 247, 87, 247, 205, 249, 105, 16, 244, 28, 105, 219, 52, 87, 254, 74, 243, - 232, 16, 224, 30, 248, 91, 220, 140, 234, 145, 87, 224, 195, 226, 79, - 229, 87, 226, 79, 224, 191, 221, 191, 87, 250, 25, 221, 191, 87, 43, 226, - 8, 214, 160, 103, 43, 226, 8, 245, 29, 43, 226, 8, 232, 114, 103, 44, - 226, 8, 214, 160, 103, 44, 226, 8, 245, 29, 44, 226, 8, 232, 114, 103, - 43, 42, 251, 166, 214, 160, 249, 168, 43, 42, 251, 166, 245, 29, 43, 42, - 251, 166, 232, 114, 249, 168, 44, 42, 251, 166, 214, 160, 249, 168, 44, - 42, 251, 166, 245, 29, 44, 42, 251, 166, 232, 114, 249, 168, 43, 249, - 107, 251, 166, 214, 160, 103, 43, 249, 107, 251, 166, 230, 229, 225, 104, - 43, 249, 107, 251, 166, 232, 114, 103, 249, 107, 251, 166, 245, 29, 44, - 249, 107, 251, 166, 214, 160, 103, 44, 249, 107, 251, 166, 230, 229, 225, - 104, 44, 249, 107, 251, 166, 232, 114, 103, 235, 219, 245, 29, 203, 232, - 220, 245, 29, 214, 160, 43, 177, 232, 114, 44, 249, 107, 251, 166, 221, - 174, 214, 160, 44, 177, 232, 114, 43, 249, 107, 251, 166, 221, 174, 218, - 42, 216, 14, 218, 42, 251, 182, 216, 15, 42, 127, 251, 183, 42, 127, 251, - 183, 42, 251, 166, 115, 216, 15, 42, 127, 34, 16, 251, 182, 43, 67, 93, - 232, 219, 44, 67, 93, 232, 219, 203, 221, 207, 232, 218, 203, 221, 207, - 232, 217, 203, 221, 207, 232, 216, 203, 221, 207, 232, 215, 248, 54, 16, - 193, 67, 22, 216, 15, 222, 254, 248, 54, 16, 193, 67, 22, 251, 183, 222, - 254, 248, 54, 16, 193, 67, 2, 250, 43, 248, 54, 16, 193, 124, 22, 203, 2, - 250, 43, 248, 54, 16, 193, 120, 22, 203, 2, 250, 43, 248, 54, 16, 193, - 67, 2, 215, 226, 248, 54, 16, 193, 124, 22, 203, 2, 215, 226, 248, 54, - 16, 193, 120, 22, 203, 2, 215, 226, 248, 54, 16, 193, 67, 22, 212, 35, - 248, 54, 16, 193, 124, 22, 203, 2, 212, 35, 248, 54, 16, 193, 120, 22, - 203, 2, 212, 35, 248, 54, 16, 193, 124, 22, 241, 51, 248, 54, 16, 193, - 120, 22, 241, 51, 248, 54, 16, 193, 67, 22, 216, 15, 233, 52, 248, 54, - 16, 193, 67, 22, 251, 183, 233, 52, 42, 244, 40, 223, 57, 87, 245, 190, - 87, 67, 232, 220, 245, 29, 231, 38, 251, 154, 231, 38, 200, 115, 219, - 252, 231, 38, 219, 253, 115, 232, 143, 231, 38, 200, 115, 113, 219, 239, - 231, 38, 113, 219, 240, 115, 232, 143, 231, 38, 113, 219, 240, 235, 70, - 231, 38, 215, 209, 231, 38, 216, 224, 231, 38, 225, 191, 245, 232, 242, - 129, 243, 226, 216, 15, 226, 7, 251, 183, 226, 7, 216, 15, 249, 107, 127, - 251, 183, 249, 107, 127, 216, 15, 216, 7, 220, 55, 127, 251, 183, 216, 7, - 220, 55, 127, 71, 215, 240, 252, 43, 222, 237, 2, 250, 43, 218, 122, 244, - 72, 255, 26, 249, 104, 245, 179, 235, 205, 248, 91, 245, 32, 87, 85, 222, - 250, 52, 215, 226, 85, 233, 48, 52, 215, 226, 85, 214, 162, 52, 215, 226, - 85, 246, 113, 52, 215, 226, 85, 222, 250, 52, 215, 227, 2, 67, 130, 85, - 233, 48, 52, 215, 227, 2, 67, 130, 85, 222, 250, 215, 227, 2, 52, 67, - 130, 254, 182, 250, 11, 218, 128, 216, 87, 250, 11, 240, 244, 2, 244, 58, - 221, 243, 16, 31, 227, 206, 16, 31, 218, 154, 64, 241, 240, 16, 31, 218, - 154, 64, 216, 213, 16, 31, 245, 151, 64, 216, 213, 16, 31, 245, 151, 64, - 215, 244, 16, 31, 245, 140, 16, 31, 255, 16, 16, 31, 252, 52, 16, 31, - 252, 187, 16, 31, 203, 217, 90, 16, 31, 232, 220, 244, 153, 16, 31, 67, - 217, 90, 16, 31, 244, 28, 244, 153, 16, 31, 250, 238, 223, 56, 16, 31, - 220, 30, 226, 134, 16, 31, 220, 30, 236, 6, 16, 31, 248, 159, 232, 210, - 245, 85, 16, 31, 248, 39, 249, 186, 111, 16, 31, 248, 39, 249, 186, 105, - 16, 31, 248, 39, 249, 186, 158, 16, 31, 248, 39, 249, 186, 161, 16, 31, - 152, 255, 16, 16, 31, 217, 178, 236, 69, 16, 31, 245, 151, 64, 215, 245, - 251, 221, 16, 31, 251, 13, 16, 31, 245, 151, 64, 231, 86, 16, 31, 218, - 62, 16, 31, 245, 85, 16, 31, 244, 115, 220, 139, 16, 31, 242, 128, 220, - 139, 16, 31, 223, 124, 220, 139, 16, 31, 214, 174, 220, 139, 16, 31, 219, - 20, 16, 31, 248, 71, 251, 224, 87, 204, 251, 171, 16, 31, 229, 90, 16, - 31, 248, 72, 244, 28, 105, 16, 31, 218, 63, 244, 28, 105, 226, 245, 103, - 226, 245, 250, 160, 226, 245, 244, 31, 226, 245, 235, 200, 244, 31, 226, - 245, 252, 50, 251, 132, 226, 245, 251, 178, 216, 112, 226, 245, 251, 163, - 252, 154, 240, 110, 226, 245, 254, 135, 64, 250, 137, 226, 245, 248, 164, - 226, 245, 249, 95, 255, 20, 227, 204, 226, 245, 52, 252, 188, 37, 21, - 111, 37, 21, 105, 37, 21, 158, 37, 21, 161, 37, 21, 190, 37, 21, 195, 37, - 21, 199, 37, 21, 196, 37, 21, 201, 37, 54, 216, 248, 37, 54, 245, 175, - 37, 54, 215, 76, 37, 54, 216, 165, 37, 54, 244, 13, 37, 54, 244, 126, 37, - 54, 219, 121, 37, 54, 220, 121, 37, 54, 245, 198, 37, 54, 228, 202, 37, - 54, 215, 73, 88, 21, 111, 88, 21, 105, 88, 21, 158, 88, 21, 161, 88, 21, - 190, 88, 21, 195, 88, 21, 199, 88, 21, 196, 88, 21, 201, 88, 54, 216, - 248, 88, 54, 245, 175, 88, 54, 215, 76, 88, 54, 216, 165, 88, 54, 244, - 13, 88, 54, 244, 126, 88, 54, 219, 121, 88, 54, 220, 121, 88, 54, 245, - 198, 88, 54, 228, 202, 88, 54, 215, 73, 21, 123, 243, 236, 218, 131, 21, - 113, 243, 236, 218, 131, 21, 134, 243, 236, 218, 131, 21, 244, 19, 243, - 236, 218, 131, 21, 244, 89, 243, 236, 218, 131, 21, 219, 127, 243, 236, - 218, 131, 21, 220, 124, 243, 236, 218, 131, 21, 245, 201, 243, 236, 218, - 131, 21, 228, 205, 243, 236, 218, 131, 54, 216, 249, 243, 236, 218, 131, - 54, 245, 176, 243, 236, 218, 131, 54, 215, 77, 243, 236, 218, 131, 54, - 216, 166, 243, 236, 218, 131, 54, 244, 14, 243, 236, 218, 131, 54, 244, - 127, 243, 236, 218, 131, 54, 219, 122, 243, 236, 218, 131, 54, 220, 122, - 243, 236, 218, 131, 54, 245, 199, 243, 236, 218, 131, 54, 228, 203, 243, - 236, 218, 131, 54, 215, 74, 243, 236, 218, 131, 88, 7, 4, 1, 61, 88, 7, - 4, 1, 253, 166, 88, 7, 4, 1, 251, 74, 88, 7, 4, 1, 249, 68, 88, 7, 4, 1, - 76, 88, 7, 4, 1, 245, 14, 88, 7, 4, 1, 243, 209, 88, 7, 4, 1, 242, 67, - 88, 7, 4, 1, 74, 88, 7, 4, 1, 235, 150, 88, 7, 4, 1, 235, 29, 88, 7, 4, - 1, 156, 88, 7, 4, 1, 194, 88, 7, 4, 1, 230, 30, 88, 7, 4, 1, 78, 88, 7, - 4, 1, 226, 109, 88, 7, 4, 1, 224, 99, 88, 7, 4, 1, 153, 88, 7, 4, 1, 222, - 93, 88, 7, 4, 1, 217, 153, 88, 7, 4, 1, 69, 88, 7, 4, 1, 214, 105, 88, 7, - 4, 1, 212, 98, 88, 7, 4, 1, 211, 178, 88, 7, 4, 1, 211, 117, 88, 7, 4, 1, - 210, 159, 37, 7, 6, 1, 61, 37, 7, 6, 1, 253, 166, 37, 7, 6, 1, 251, 74, - 37, 7, 6, 1, 249, 68, 37, 7, 6, 1, 76, 37, 7, 6, 1, 245, 14, 37, 7, 6, 1, - 243, 209, 37, 7, 6, 1, 242, 67, 37, 7, 6, 1, 74, 37, 7, 6, 1, 235, 150, - 37, 7, 6, 1, 235, 29, 37, 7, 6, 1, 156, 37, 7, 6, 1, 194, 37, 7, 6, 1, - 230, 30, 37, 7, 6, 1, 78, 37, 7, 6, 1, 226, 109, 37, 7, 6, 1, 224, 99, - 37, 7, 6, 1, 153, 37, 7, 6, 1, 222, 93, 37, 7, 6, 1, 217, 153, 37, 7, 6, - 1, 69, 37, 7, 6, 1, 214, 105, 37, 7, 6, 1, 212, 98, 37, 7, 6, 1, 211, - 178, 37, 7, 6, 1, 211, 117, 37, 7, 6, 1, 210, 159, 37, 7, 4, 1, 61, 37, - 7, 4, 1, 253, 166, 37, 7, 4, 1, 251, 74, 37, 7, 4, 1, 249, 68, 37, 7, 4, - 1, 76, 37, 7, 4, 1, 245, 14, 37, 7, 4, 1, 243, 209, 37, 7, 4, 1, 242, 67, - 37, 7, 4, 1, 74, 37, 7, 4, 1, 235, 150, 37, 7, 4, 1, 235, 29, 37, 7, 4, - 1, 156, 37, 7, 4, 1, 194, 37, 7, 4, 1, 230, 30, 37, 7, 4, 1, 78, 37, 7, - 4, 1, 226, 109, 37, 7, 4, 1, 224, 99, 37, 7, 4, 1, 153, 37, 7, 4, 1, 222, - 93, 37, 7, 4, 1, 217, 153, 37, 7, 4, 1, 69, 37, 7, 4, 1, 214, 105, 37, 7, - 4, 1, 212, 98, 37, 7, 4, 1, 211, 178, 37, 7, 4, 1, 211, 117, 37, 7, 4, 1, - 210, 159, 37, 21, 210, 86, 152, 37, 54, 245, 175, 152, 37, 54, 215, 76, - 152, 37, 54, 216, 165, 152, 37, 54, 244, 13, 152, 37, 54, 244, 126, 152, - 37, 54, 219, 121, 152, 37, 54, 220, 121, 152, 37, 54, 245, 198, 152, 37, - 54, 228, 202, 152, 37, 54, 215, 73, 52, 37, 21, 111, 52, 37, 21, 105, 52, - 37, 21, 158, 52, 37, 21, 161, 52, 37, 21, 190, 52, 37, 21, 195, 52, 37, - 21, 199, 52, 37, 21, 196, 52, 37, 21, 201, 52, 37, 54, 216, 248, 152, 37, - 21, 210, 86, 93, 99, 193, 241, 51, 93, 99, 114, 241, 51, 93, 99, 193, - 213, 239, 93, 99, 114, 213, 239, 93, 99, 193, 215, 212, 248, 165, 241, - 51, 93, 99, 114, 215, 212, 248, 165, 241, 51, 93, 99, 193, 215, 212, 248, - 165, 213, 239, 93, 99, 114, 215, 212, 248, 165, 213, 239, 93, 99, 193, - 224, 27, 248, 165, 241, 51, 93, 99, 114, 224, 27, 248, 165, 241, 51, 93, - 99, 193, 224, 27, 248, 165, 213, 239, 93, 99, 114, 224, 27, 248, 165, - 213, 239, 93, 99, 193, 124, 22, 222, 254, 93, 99, 124, 193, 22, 44, 241, - 228, 93, 99, 124, 114, 22, 44, 232, 236, 93, 99, 114, 124, 22, 222, 254, - 93, 99, 193, 124, 22, 233, 52, 93, 99, 124, 193, 22, 43, 241, 228, 93, - 99, 124, 114, 22, 43, 232, 236, 93, 99, 114, 124, 22, 233, 52, 93, 99, - 193, 120, 22, 222, 254, 93, 99, 120, 193, 22, 44, 241, 228, 93, 99, 120, - 114, 22, 44, 232, 236, 93, 99, 114, 120, 22, 222, 254, 93, 99, 193, 120, - 22, 233, 52, 93, 99, 120, 193, 22, 43, 241, 228, 93, 99, 120, 114, 22, - 43, 232, 236, 93, 99, 114, 120, 22, 233, 52, 93, 99, 193, 67, 22, 222, - 254, 93, 99, 67, 193, 22, 44, 241, 228, 93, 99, 120, 114, 22, 44, 124, - 232, 236, 93, 99, 124, 114, 22, 44, 120, 232, 236, 93, 99, 67, 114, 22, - 44, 232, 236, 93, 99, 124, 193, 22, 44, 120, 241, 228, 93, 99, 120, 193, - 22, 44, 124, 241, 228, 93, 99, 114, 67, 22, 222, 254, 93, 99, 193, 67, - 22, 233, 52, 93, 99, 67, 193, 22, 43, 241, 228, 93, 99, 120, 114, 22, 43, - 124, 232, 236, 93, 99, 124, 114, 22, 43, 120, 232, 236, 93, 99, 67, 114, - 22, 43, 232, 236, 93, 99, 124, 193, 22, 43, 120, 241, 228, 93, 99, 120, - 193, 22, 43, 124, 241, 228, 93, 99, 114, 67, 22, 233, 52, 93, 99, 193, - 124, 22, 241, 51, 93, 99, 43, 114, 22, 44, 124, 232, 236, 93, 99, 44, - 114, 22, 43, 124, 232, 236, 93, 99, 124, 193, 22, 203, 241, 228, 93, 99, - 124, 114, 22, 203, 232, 236, 93, 99, 44, 193, 22, 43, 124, 241, 228, 93, - 99, 43, 193, 22, 44, 124, 241, 228, 93, 99, 114, 124, 22, 241, 51, 93, - 99, 193, 120, 22, 241, 51, 93, 99, 43, 114, 22, 44, 120, 232, 236, 93, - 99, 44, 114, 22, 43, 120, 232, 236, 93, 99, 120, 193, 22, 203, 241, 228, - 93, 99, 120, 114, 22, 203, 232, 236, 93, 99, 44, 193, 22, 43, 120, 241, - 228, 93, 99, 43, 193, 22, 44, 120, 241, 228, 93, 99, 114, 120, 22, 241, - 51, 93, 99, 193, 67, 22, 241, 51, 93, 99, 43, 114, 22, 44, 67, 232, 236, - 93, 99, 44, 114, 22, 43, 67, 232, 236, 93, 99, 67, 193, 22, 203, 241, - 228, 93, 99, 120, 114, 22, 124, 203, 232, 236, 93, 99, 124, 114, 22, 120, - 203, 232, 236, 93, 99, 67, 114, 22, 203, 232, 236, 93, 99, 43, 120, 114, - 22, 44, 124, 232, 236, 93, 99, 44, 120, 114, 22, 43, 124, 232, 236, 93, - 99, 43, 124, 114, 22, 44, 120, 232, 236, 93, 99, 44, 124, 114, 22, 43, - 120, 232, 236, 93, 99, 124, 193, 22, 120, 203, 241, 228, 93, 99, 120, - 193, 22, 124, 203, 241, 228, 93, 99, 44, 193, 22, 43, 67, 241, 228, 93, - 99, 43, 193, 22, 44, 67, 241, 228, 93, 99, 114, 67, 22, 241, 51, 93, 99, - 193, 52, 248, 165, 241, 51, 93, 99, 114, 52, 248, 165, 241, 51, 93, 99, - 193, 52, 248, 165, 213, 239, 93, 99, 114, 52, 248, 165, 213, 239, 93, 99, - 52, 241, 51, 93, 99, 52, 213, 239, 93, 99, 124, 219, 157, 22, 44, 246, - 121, 93, 99, 124, 52, 22, 44, 219, 156, 93, 99, 52, 124, 22, 222, 254, - 93, 99, 124, 219, 157, 22, 43, 246, 121, 93, 99, 124, 52, 22, 43, 219, - 156, 93, 99, 52, 124, 22, 233, 52, 93, 99, 120, 219, 157, 22, 44, 246, - 121, 93, 99, 120, 52, 22, 44, 219, 156, 93, 99, 52, 120, 22, 222, 254, - 93, 99, 120, 219, 157, 22, 43, 246, 121, 93, 99, 120, 52, 22, 43, 219, - 156, 93, 99, 52, 120, 22, 233, 52, 93, 99, 67, 219, 157, 22, 44, 246, - 121, 93, 99, 67, 52, 22, 44, 219, 156, 93, 99, 52, 67, 22, 222, 254, 93, - 99, 67, 219, 157, 22, 43, 246, 121, 93, 99, 67, 52, 22, 43, 219, 156, 93, - 99, 52, 67, 22, 233, 52, 93, 99, 124, 219, 157, 22, 203, 246, 121, 93, - 99, 124, 52, 22, 203, 219, 156, 93, 99, 52, 124, 22, 241, 51, 93, 99, - 120, 219, 157, 22, 203, 246, 121, 93, 99, 120, 52, 22, 203, 219, 156, 93, - 99, 52, 120, 22, 241, 51, 93, 99, 67, 219, 157, 22, 203, 246, 121, 93, - 99, 67, 52, 22, 203, 219, 156, 93, 99, 52, 67, 22, 241, 51, 93, 99, 193, - 254, 34, 124, 22, 222, 254, 93, 99, 193, 254, 34, 124, 22, 233, 52, 93, - 99, 193, 254, 34, 120, 22, 233, 52, 93, 99, 193, 254, 34, 120, 22, 222, - 254, 93, 99, 193, 248, 7, 214, 160, 44, 216, 43, 232, 114, 233, 52, 93, - 99, 193, 248, 7, 214, 160, 43, 216, 43, 232, 114, 222, 254, 93, 99, 193, - 248, 7, 249, 138, 93, 99, 193, 233, 52, 93, 99, 193, 214, 163, 93, 99, - 193, 222, 254, 93, 99, 193, 246, 114, 93, 99, 114, 233, 52, 93, 99, 114, - 214, 163, 93, 99, 114, 222, 254, 93, 99, 114, 246, 114, 93, 99, 193, 43, - 22, 114, 222, 254, 93, 99, 193, 120, 22, 114, 246, 114, 93, 99, 114, 43, - 22, 193, 222, 254, 93, 99, 114, 120, 22, 193, 246, 114, 214, 160, 163, - 251, 221, 232, 114, 123, 245, 197, 251, 221, 232, 114, 123, 224, 25, 251, - 221, 232, 114, 134, 245, 195, 251, 221, 232, 114, 163, 251, 221, 232, - 114, 244, 89, 245, 195, 251, 221, 232, 114, 134, 224, 23, 251, 221, 232, - 114, 220, 124, 245, 195, 251, 221, 243, 236, 251, 221, 43, 220, 124, 245, - 195, 251, 221, 43, 134, 224, 23, 251, 221, 43, 244, 89, 245, 195, 251, - 221, 43, 163, 251, 221, 43, 134, 245, 195, 251, 221, 43, 123, 224, 25, - 251, 221, 43, 123, 245, 197, 251, 221, 44, 163, 251, 221, 193, 220, 94, - 231, 87, 220, 94, 248, 170, 220, 94, 214, 160, 123, 245, 197, 251, 221, - 44, 123, 245, 197, 251, 221, 224, 29, 232, 114, 233, 52, 224, 29, 232, - 114, 222, 254, 224, 29, 214, 160, 233, 52, 224, 29, 214, 160, 43, 22, - 232, 114, 43, 22, 232, 114, 222, 254, 224, 29, 214, 160, 43, 22, 232, - 114, 222, 254, 224, 29, 214, 160, 43, 22, 214, 160, 44, 22, 232, 114, - 233, 52, 224, 29, 214, 160, 43, 22, 214, 160, 44, 22, 232, 114, 222, 254, - 224, 29, 214, 160, 222, 254, 224, 29, 214, 160, 44, 22, 232, 114, 233, - 52, 224, 29, 214, 160, 44, 22, 232, 114, 43, 22, 232, 114, 222, 254, 85, - 218, 236, 71, 218, 236, 71, 42, 2, 222, 185, 249, 167, 71, 42, 249, 195, - 85, 4, 218, 236, 42, 2, 203, 244, 113, 42, 2, 67, 244, 113, 42, 2, 226, - 148, 249, 134, 244, 113, 42, 2, 214, 160, 43, 216, 43, 232, 114, 44, 244, - 113, 42, 2, 214, 160, 44, 216, 43, 232, 114, 43, 244, 113, 42, 2, 248, 7, - 249, 134, 244, 113, 85, 4, 218, 236, 71, 4, 218, 236, 85, 223, 119, 71, - 223, 119, 85, 67, 223, 119, 71, 67, 223, 119, 85, 226, 10, 71, 226, 10, - 85, 214, 162, 215, 226, 71, 214, 162, 215, 226, 85, 214, 162, 4, 215, - 226, 71, 214, 162, 4, 215, 226, 85, 222, 250, 215, 226, 71, 222, 250, - 215, 226, 85, 222, 250, 4, 215, 226, 71, 222, 250, 4, 215, 226, 85, 222, - 250, 225, 11, 71, 222, 250, 225, 11, 85, 246, 113, 215, 226, 71, 246, - 113, 215, 226, 85, 246, 113, 4, 215, 226, 71, 246, 113, 4, 215, 226, 85, - 233, 48, 215, 226, 71, 233, 48, 215, 226, 85, 233, 48, 4, 215, 226, 71, - 233, 48, 4, 215, 226, 85, 233, 48, 225, 11, 71, 233, 48, 225, 11, 85, - 248, 0, 71, 248, 0, 71, 248, 1, 249, 195, 85, 4, 248, 0, 244, 97, 232, - 110, 71, 250, 43, 246, 126, 250, 43, 250, 44, 2, 67, 244, 113, 251, 119, - 85, 250, 43, 250, 44, 2, 43, 163, 251, 229, 250, 44, 2, 44, 163, 251, - 229, 250, 44, 2, 232, 114, 163, 251, 229, 250, 44, 2, 214, 160, 163, 251, - 229, 250, 44, 2, 214, 160, 44, 224, 29, 251, 229, 250, 44, 2, 254, 164, - 251, 96, 214, 160, 43, 224, 29, 251, 229, 43, 163, 85, 250, 43, 44, 163, - 85, 250, 43, 235, 201, 251, 121, 235, 201, 71, 250, 43, 214, 160, 163, - 235, 201, 71, 250, 43, 232, 114, 163, 235, 201, 71, 250, 43, 214, 160, - 43, 224, 29, 250, 41, 254, 33, 214, 160, 44, 224, 29, 250, 41, 254, 33, - 232, 114, 44, 224, 29, 250, 41, 254, 33, 232, 114, 43, 224, 29, 250, 41, - 254, 33, 214, 160, 163, 250, 43, 232, 114, 163, 250, 43, 85, 232, 114, - 44, 215, 226, 85, 232, 114, 43, 215, 226, 85, 214, 160, 43, 215, 226, 85, - 214, 160, 44, 215, 226, 71, 251, 121, 42, 2, 43, 163, 251, 229, 42, 2, - 44, 163, 251, 229, 42, 2, 214, 160, 43, 248, 7, 163, 251, 229, 42, 2, - 232, 114, 44, 248, 7, 163, 251, 229, 71, 42, 2, 67, 251, 240, 232, 219, - 71, 214, 162, 215, 227, 2, 247, 128, 214, 162, 215, 227, 2, 43, 163, 251, - 229, 214, 162, 215, 227, 2, 44, 163, 251, 229, 233, 91, 250, 43, 71, 42, - 2, 214, 160, 43, 224, 28, 71, 42, 2, 232, 114, 43, 224, 28, 71, 42, 2, - 232, 114, 44, 224, 28, 71, 42, 2, 214, 160, 44, 224, 28, 71, 250, 44, 2, - 214, 160, 43, 224, 28, 71, 250, 44, 2, 232, 114, 43, 224, 28, 71, 250, - 44, 2, 232, 114, 44, 224, 28, 71, 250, 44, 2, 214, 160, 44, 224, 28, 214, - 160, 43, 215, 226, 214, 160, 44, 215, 226, 232, 114, 43, 215, 226, 71, - 231, 87, 218, 236, 85, 231, 87, 218, 236, 71, 231, 87, 4, 218, 236, 85, - 231, 87, 4, 218, 236, 232, 114, 44, 215, 226, 85, 218, 39, 2, 223, 135, - 249, 255, 214, 194, 219, 62, 249, 230, 85, 218, 158, 71, 218, 158, 232, - 234, 216, 133, 218, 38, 253, 242, 228, 76, 248, 46, 228, 76, 249, 203, - 226, 167, 85, 217, 1, 71, 217, 1, 252, 164, 251, 171, 252, 164, 93, 2, - 250, 137, 252, 164, 93, 2, 211, 178, 222, 0, 214, 195, 2, 223, 163, 246, - 92, 240, 250, 252, 30, 71, 220, 4, 225, 104, 85, 220, 4, 225, 104, 220, - 89, 223, 52, 222, 189, 244, 63, 241, 235, 251, 121, 85, 43, 225, 10, 235, - 249, 85, 44, 225, 10, 235, 249, 71, 43, 225, 10, 235, 249, 71, 120, 225, - 10, 235, 249, 71, 44, 225, 10, 235, 249, 71, 124, 225, 10, 235, 249, 219, - 103, 22, 249, 137, 250, 227, 50, 223, 175, 50, 251, 247, 50, 251, 33, - 254, 110, 226, 149, 249, 138, 250, 119, 223, 40, 249, 139, 64, 232, 124, - 249, 139, 64, 235, 122, 218, 159, 22, 249, 144, 244, 176, 87, 255, 1, - 220, 91, 242, 29, 22, 219, 191, 225, 223, 87, 210, 254, 211, 69, 215, - 216, 31, 241, 230, 215, 216, 31, 233, 113, 215, 216, 31, 244, 104, 215, - 216, 31, 216, 134, 215, 216, 31, 211, 239, 215, 216, 31, 212, 40, 215, - 216, 31, 230, 120, 215, 216, 31, 245, 231, 212, 1, 64, 248, 26, 71, 243, - 247, 244, 198, 71, 219, 76, 244, 198, 85, 219, 76, 244, 198, 71, 218, 39, - 2, 223, 135, 244, 100, 224, 25, 230, 133, 233, 86, 224, 25, 230, 133, - 231, 59, 244, 146, 50, 245, 231, 231, 195, 50, 235, 44, 221, 222, 214, - 145, 229, 98, 225, 23, 254, 20, 217, 41, 243, 59, 251, 11, 233, 25, 213, - 150, 232, 244, 221, 193, 222, 21, 251, 0, 254, 50, 225, 55, 71, 250, 125, - 234, 84, 71, 250, 125, 224, 17, 71, 250, 125, 222, 197, 71, 250, 125, - 251, 239, 71, 250, 125, 234, 36, 71, 250, 125, 225, 235, 85, 250, 125, - 234, 84, 85, 250, 125, 224, 17, 85, 250, 125, 222, 197, 85, 250, 125, - 251, 239, 85, 250, 125, 234, 36, 85, 250, 125, 225, 235, 85, 219, 18, - 218, 51, 71, 241, 235, 218, 51, 71, 248, 1, 218, 51, 85, 249, 253, 218, - 51, 71, 219, 18, 218, 51, 85, 241, 235, 218, 51, 85, 248, 1, 218, 51, 71, - 249, 253, 218, 51, 240, 250, 218, 240, 224, 25, 228, 52, 245, 197, 228, - 52, 252, 81, 245, 197, 228, 47, 252, 81, 219, 120, 228, 47, 230, 62, 244, - 74, 50, 230, 62, 229, 193, 50, 230, 62, 220, 78, 50, 212, 9, 183, 249, - 138, 245, 228, 183, 249, 138, 214, 171, 223, 115, 87, 223, 115, 16, 31, - 215, 48, 225, 37, 223, 115, 16, 31, 215, 47, 225, 37, 223, 115, 16, 31, - 215, 46, 225, 37, 223, 115, 16, 31, 215, 45, 225, 37, 223, 115, 16, 31, - 215, 44, 225, 37, 223, 115, 16, 31, 215, 43, 225, 37, 223, 115, 16, 31, - 215, 42, 225, 37, 223, 115, 16, 31, 243, 57, 231, 143, 85, 214, 171, 223, - 115, 87, 223, 116, 226, 24, 87, 226, 0, 226, 24, 87, 225, 177, 226, 24, - 50, 211, 255, 87, 247, 249, 244, 197, 247, 249, 244, 196, 247, 249, 244, - 195, 247, 249, 244, 194, 247, 249, 244, 193, 247, 249, 244, 192, 71, 250, - 44, 2, 59, 222, 254, 71, 250, 44, 2, 113, 247, 126, 85, 250, 44, 2, 71, - 59, 222, 254, 85, 250, 44, 2, 113, 71, 247, 126, 230, 147, 31, 211, 69, - 230, 147, 31, 210, 253, 247, 232, 31, 242, 138, 211, 69, 247, 232, 31, - 233, 19, 210, 253, 247, 232, 31, 233, 19, 211, 69, 247, 232, 31, 242, - 138, 210, 253, 71, 244, 81, 85, 244, 81, 242, 29, 22, 225, 107, 254, 128, - 249, 136, 217, 236, 218, 166, 64, 254, 235, 221, 208, 254, 178, 244, 59, - 243, 67, 218, 166, 64, 241, 209, 253, 207, 87, 244, 70, 226, 130, 71, - 218, 158, 134, 232, 214, 249, 183, 222, 254, 134, 232, 214, 249, 183, - 233, 52, 212, 50, 50, 125, 213, 130, 50, 246, 118, 244, 146, 50, 246, - 118, 231, 195, 50, 235, 210, 244, 146, 22, 231, 195, 50, 231, 195, 22, - 244, 146, 50, 231, 195, 2, 218, 105, 50, 231, 195, 2, 218, 105, 22, 231, - 195, 22, 244, 146, 50, 67, 231, 195, 2, 218, 105, 50, 203, 231, 195, 2, - 218, 105, 50, 231, 87, 71, 250, 43, 231, 87, 85, 250, 43, 231, 87, 4, 71, - 250, 43, 231, 158, 87, 247, 175, 87, 214, 169, 225, 255, 87, 249, 239, - 243, 231, 214, 141, 229, 93, 250, 169, 226, 65, 235, 50, 213, 185, 250, - 101, 85, 230, 134, 232, 231, 220, 114, 220, 149, 224, 8, 220, 132, 219, - 57, 252, 167, 252, 134, 92, 234, 144, 71, 246, 101, 231, 190, 71, 246, - 101, 234, 84, 85, 246, 101, 231, 190, 85, 246, 101, 234, 84, 219, 63, - 211, 230, 219, 66, 218, 39, 252, 59, 249, 255, 223, 162, 85, 219, 62, - 216, 135, 250, 0, 22, 223, 162, 215, 94, 71, 220, 4, 225, 104, 215, 94, - 85, 220, 4, 225, 104, 71, 248, 1, 236, 7, 218, 236, 249, 133, 233, 97, - 247, 201, 250, 252, 226, 170, 225, 107, 250, 253, 219, 90, 241, 219, 2, - 71, 249, 138, 37, 249, 133, 233, 97, 250, 161, 228, 80, 245, 132, 254, - 149, 226, 195, 43, 212, 26, 215, 252, 85, 215, 55, 43, 212, 26, 215, 252, - 71, 215, 55, 43, 212, 26, 215, 252, 85, 43, 233, 98, 231, 58, 71, 43, - 233, 98, 231, 58, 246, 97, 219, 84, 50, 114, 71, 246, 113, 215, 226, 43, - 250, 8, 245, 132, 92, 222, 0, 244, 183, 248, 7, 236, 7, 71, 250, 44, 236, - 7, 85, 218, 236, 85, 215, 193, 223, 63, 43, 245, 131, 223, 63, 43, 245, - 130, 253, 219, 16, 31, 214, 145, 114, 250, 44, 2, 218, 105, 22, 113, 170, - 48, 225, 192, 222, 251, 235, 212, 225, 192, 233, 49, 235, 212, 225, 192, - 235, 200, 225, 192, 85, 249, 139, 226, 201, 220, 31, 220, 19, 219, 231, - 250, 69, 250, 234, 241, 164, 219, 128, 243, 68, 211, 230, 240, 227, 243, - 68, 2, 242, 19, 231, 178, 16, 31, 232, 235, 230, 120, 214, 195, 226, 201, - 242, 129, 244, 20, 244, 82, 236, 7, 241, 66, 244, 137, 222, 16, 42, 244, - 19, 249, 167, 219, 106, 240, 119, 219, 109, 225, 171, 2, 252, 167, 216, - 243, 235, 137, 252, 154, 87, 241, 238, 242, 140, 87, 243, 239, 224, 145, - 249, 111, 226, 201, 85, 218, 236, 71, 244, 82, 2, 203, 230, 229, 85, 218, - 106, 214, 160, 251, 225, 221, 195, 85, 221, 195, 232, 114, 251, 225, 221, - 195, 71, 221, 195, 71, 114, 250, 138, 79, 217, 2, 232, 160, 50, 217, 54, - 246, 96, 254, 200, 245, 127, 223, 160, 244, 93, 223, 160, 242, 22, 213, - 174, 242, 22, 211, 198, 242, 22, 232, 114, 44, 225, 201, 225, 201, 214, - 160, 44, 225, 201, 71, 228, 235, 85, 228, 235, 250, 138, 79, 114, 250, - 138, 79, 230, 89, 211, 178, 114, 230, 89, 211, 178, 252, 164, 211, 178, - 114, 252, 164, 211, 178, 226, 130, 26, 249, 138, 114, 26, 249, 138, 204, - 250, 183, 249, 138, 114, 204, 250, 183, 249, 138, 7, 249, 138, 220, 93, - 71, 7, 249, 138, 226, 130, 7, 249, 138, 231, 192, 249, 138, 218, 159, 64, - 248, 157, 244, 19, 217, 16, 253, 224, 244, 19, 252, 165, 253, 224, 114, - 244, 19, 252, 165, 253, 224, 244, 19, 249, 251, 253, 224, 85, 244, 19, - 225, 12, 218, 158, 71, 244, 19, 225, 12, 218, 158, 219, 13, 218, 113, - 226, 130, 71, 218, 158, 37, 71, 218, 158, 204, 250, 183, 85, 218, 158, - 85, 250, 183, 71, 218, 158, 226, 130, 85, 218, 158, 114, 226, 130, 85, - 218, 158, 225, 63, 218, 158, 220, 93, 71, 218, 158, 114, 253, 224, 204, - 250, 183, 253, 224, 245, 201, 218, 246, 253, 224, 245, 201, 225, 12, 85, - 218, 158, 245, 201, 225, 12, 225, 63, 218, 158, 219, 127, 225, 12, 85, - 218, 158, 245, 201, 225, 12, 223, 117, 85, 218, 158, 114, 245, 201, 225, - 12, 223, 117, 85, 218, 158, 215, 77, 225, 12, 85, 218, 158, 219, 122, - 225, 12, 253, 224, 217, 16, 253, 224, 204, 250, 183, 217, 16, 253, 224, - 114, 217, 16, 253, 224, 219, 127, 225, 160, 85, 22, 71, 244, 62, 85, 244, - 62, 71, 244, 62, 245, 201, 225, 160, 226, 130, 85, 244, 62, 37, 204, 250, - 183, 245, 201, 225, 12, 218, 158, 114, 217, 16, 225, 63, 253, 224, 219, - 64, 216, 106, 215, 219, 219, 64, 114, 250, 122, 219, 64, 219, 15, 114, - 219, 15, 252, 165, 253, 224, 245, 201, 217, 16, 224, 174, 253, 224, 114, - 245, 201, 217, 16, 224, 174, 253, 224, 249, 139, 79, 220, 93, 71, 250, - 43, 152, 92, 249, 139, 79, 232, 114, 44, 246, 94, 71, 218, 236, 214, 160, - 44, 246, 94, 71, 218, 236, 232, 114, 44, 220, 93, 71, 218, 236, 214, 160, - 44, 220, 93, 71, 218, 236, 85, 224, 16, 164, 226, 151, 71, 224, 16, 164, - 226, 151, 71, 245, 39, 164, 226, 151, 85, 248, 1, 230, 187, 71, 211, 178, - 114, 245, 39, 164, 87, 193, 67, 130, 231, 87, 67, 130, 114, 67, 130, 114, - 219, 157, 215, 94, 249, 228, 224, 1, 164, 226, 151, 114, 219, 157, 249, - 228, 224, 1, 164, 226, 151, 114, 52, 215, 94, 249, 228, 224, 1, 164, 226, - 151, 114, 52, 249, 228, 224, 1, 164, 226, 151, 114, 121, 219, 157, 249, - 228, 224, 1, 164, 226, 151, 114, 121, 52, 249, 228, 224, 1, 164, 226, - 151, 249, 99, 218, 142, 226, 19, 5, 226, 151, 114, 245, 39, 164, 226, - 151, 114, 241, 235, 245, 39, 164, 226, 151, 114, 85, 241, 234, 222, 189, - 114, 85, 241, 235, 251, 121, 244, 63, 241, 234, 222, 189, 244, 63, 241, - 235, 251, 121, 231, 87, 43, 226, 8, 226, 151, 231, 87, 44, 226, 8, 226, - 151, 231, 87, 244, 71, 43, 226, 8, 226, 151, 231, 87, 244, 71, 44, 226, - 8, 226, 151, 231, 87, 233, 48, 254, 118, 251, 166, 226, 151, 231, 87, - 222, 250, 254, 118, 251, 166, 226, 151, 114, 233, 48, 254, 118, 224, 1, - 164, 226, 151, 114, 222, 250, 254, 118, 224, 1, 164, 226, 151, 114, 233, - 48, 254, 118, 251, 166, 226, 151, 114, 222, 250, 254, 118, 251, 166, 226, - 151, 193, 43, 216, 7, 220, 55, 251, 166, 226, 151, 193, 44, 216, 7, 220, - 55, 251, 166, 226, 151, 231, 87, 43, 249, 107, 251, 166, 226, 151, 231, - 87, 44, 249, 107, 251, 166, 226, 151, 247, 212, 152, 37, 21, 111, 247, - 212, 152, 37, 21, 105, 247, 212, 152, 37, 21, 158, 247, 212, 152, 37, 21, - 161, 247, 212, 152, 37, 21, 190, 247, 212, 152, 37, 21, 195, 247, 212, - 152, 37, 21, 199, 247, 212, 152, 37, 21, 196, 247, 212, 152, 37, 21, 201, - 247, 212, 152, 37, 54, 216, 248, 247, 212, 37, 35, 21, 111, 247, 212, 37, - 35, 21, 105, 247, 212, 37, 35, 21, 158, 247, 212, 37, 35, 21, 161, 247, - 212, 37, 35, 21, 190, 247, 212, 37, 35, 21, 195, 247, 212, 37, 35, 21, - 199, 247, 212, 37, 35, 21, 196, 247, 212, 37, 35, 21, 201, 247, 212, 37, - 35, 54, 216, 248, 247, 212, 152, 37, 35, 21, 111, 247, 212, 152, 37, 35, - 21, 105, 247, 212, 152, 37, 35, 21, 158, 247, 212, 152, 37, 35, 21, 161, - 247, 212, 152, 37, 35, 21, 190, 247, 212, 152, 37, 35, 21, 195, 247, 212, - 152, 37, 35, 21, 199, 247, 212, 152, 37, 35, 21, 196, 247, 212, 152, 37, - 35, 21, 201, 247, 212, 152, 37, 35, 54, 216, 248, 114, 211, 246, 97, 75, - 114, 96, 50, 114, 230, 187, 50, 114, 247, 177, 50, 114, 219, 30, 245, - 228, 75, 114, 97, 75, 114, 228, 61, 245, 228, 75, 246, 106, 225, 14, 97, - 75, 114, 222, 186, 97, 75, 215, 225, 97, 75, 114, 215, 225, 97, 75, 248, - 163, 215, 225, 97, 75, 114, 248, 163, 215, 225, 97, 75, 85, 97, 75, 216, - 145, 216, 13, 97, 254, 1, 216, 145, 251, 181, 97, 254, 1, 85, 97, 254, 1, - 114, 85, 249, 99, 246, 112, 22, 97, 75, 114, 85, 249, 99, 214, 153, 22, - 97, 75, 218, 233, 85, 97, 75, 114, 249, 214, 85, 97, 75, 222, 249, 71, - 97, 75, 233, 47, 71, 97, 75, 252, 191, 220, 93, 71, 97, 75, 243, 249, - 220, 93, 71, 97, 75, 114, 232, 114, 222, 248, 71, 97, 75, 114, 214, 160, - 222, 248, 71, 97, 75, 228, 54, 232, 114, 222, 248, 71, 97, 75, 249, 107, - 232, 129, 228, 54, 214, 160, 222, 248, 71, 97, 75, 37, 114, 71, 97, 75, - 211, 252, 97, 75, 251, 228, 219, 30, 245, 228, 75, 251, 228, 97, 75, 251, - 228, 228, 61, 245, 228, 75, 114, 251, 228, 219, 30, 245, 228, 75, 114, - 251, 228, 97, 75, 114, 251, 228, 228, 61, 245, 228, 75, 217, 18, 97, 75, - 114, 217, 17, 97, 75, 212, 18, 97, 75, 114, 212, 18, 97, 75, 226, 176, - 97, 75, 52, 249, 107, 232, 129, 134, 247, 222, 254, 117, 71, 215, 227, - 249, 195, 4, 71, 215, 226, 225, 174, 204, 218, 64, 204, 218, 22, 43, 222, - 92, 252, 181, 248, 68, 44, 222, 92, 252, 181, 248, 68, 177, 2, 59, 235, - 222, 223, 53, 219, 49, 224, 204, 218, 64, 218, 23, 224, 204, 219, 48, 67, - 252, 149, 2, 203, 91, 11, 222, 231, 248, 6, 200, 247, 176, 11, 244, 183, - 248, 6, 92, 232, 152, 254, 126, 92, 232, 152, 226, 162, 71, 248, 1, 2, - 250, 181, 247, 128, 22, 2, 247, 128, 245, 178, 64, 226, 174, 214, 152, - 232, 114, 44, 249, 169, 2, 247, 128, 214, 160, 43, 249, 169, 2, 247, 128, - 43, 226, 132, 235, 72, 44, 226, 132, 235, 72, 243, 236, 226, 132, 235, - 72, 233, 91, 120, 217, 88, 233, 91, 124, 217, 88, 43, 22, 44, 52, 215, - 93, 43, 22, 44, 217, 88, 43, 230, 92, 200, 44, 217, 88, 200, 43, 217, 88, - 120, 217, 89, 2, 250, 44, 48, 232, 111, 247, 181, 251, 86, 203, 222, 135, - 71, 249, 213, 248, 0, 71, 249, 213, 248, 1, 2, 140, 216, 115, 71, 249, - 213, 248, 1, 2, 97, 216, 115, 71, 42, 2, 140, 216, 115, 71, 42, 2, 97, - 216, 115, 11, 43, 71, 42, 127, 11, 44, 71, 42, 127, 11, 43, 254, 118, - 127, 11, 44, 254, 118, 127, 11, 43, 52, 254, 118, 127, 11, 44, 52, 254, - 118, 127, 11, 43, 71, 216, 7, 220, 55, 127, 11, 44, 71, 216, 7, 220, 55, - 127, 11, 43, 244, 71, 226, 7, 11, 44, 244, 71, 226, 7, 214, 153, 224, 27, - 75, 246, 112, 224, 27, 75, 254, 96, 243, 105, 250, 44, 75, 250, 10, 243, - 105, 250, 44, 75, 44, 80, 2, 37, 225, 25, 200, 140, 75, 200, 97, 75, 200, - 43, 44, 75, 200, 140, 52, 75, 200, 97, 52, 75, 200, 43, 44, 52, 75, 200, - 140, 80, 243, 251, 130, 200, 97, 80, 243, 251, 130, 200, 140, 52, 80, - 243, 251, 130, 200, 97, 52, 80, 243, 251, 130, 200, 97, 218, 232, 75, 46, - 47, 251, 223, 46, 47, 247, 125, 46, 47, 246, 253, 46, 47, 247, 124, 46, - 47, 246, 189, 46, 47, 247, 60, 46, 47, 246, 252, 46, 47, 247, 123, 46, - 47, 246, 157, 46, 47, 247, 28, 46, 47, 246, 220, 46, 47, 247, 91, 46, 47, - 246, 188, 46, 47, 247, 59, 46, 47, 246, 251, 46, 47, 247, 122, 46, 47, - 246, 141, 46, 47, 247, 12, 46, 47, 246, 204, 46, 47, 247, 75, 46, 47, - 246, 172, 46, 47, 247, 43, 46, 47, 246, 235, 46, 47, 247, 106, 46, 47, - 246, 156, 46, 47, 247, 27, 46, 47, 246, 219, 46, 47, 247, 90, 46, 47, - 246, 187, 46, 47, 247, 58, 46, 47, 246, 250, 46, 47, 247, 121, 46, 47, - 246, 133, 46, 47, 247, 4, 46, 47, 246, 196, 46, 47, 247, 67, 46, 47, 246, - 164, 46, 47, 247, 35, 46, 47, 246, 227, 46, 47, 247, 98, 46, 47, 246, - 148, 46, 47, 247, 19, 46, 47, 246, 211, 46, 47, 247, 82, 46, 47, 246, - 179, 46, 47, 247, 50, 46, 47, 246, 242, 46, 47, 247, 113, 46, 47, 246, - 140, 46, 47, 247, 11, 46, 47, 246, 203, 46, 47, 247, 74, 46, 47, 246, - 171, 46, 47, 247, 42, 46, 47, 246, 234, 46, 47, 247, 105, 46, 47, 246, - 155, 46, 47, 247, 26, 46, 47, 246, 218, 46, 47, 247, 89, 46, 47, 246, - 186, 46, 47, 247, 57, 46, 47, 246, 249, 46, 47, 247, 120, 46, 47, 246, - 129, 46, 47, 247, 0, 46, 47, 246, 192, 46, 47, 247, 63, 46, 47, 246, 160, - 46, 47, 247, 31, 46, 47, 246, 223, 46, 47, 247, 94, 46, 47, 246, 144, 46, - 47, 247, 15, 46, 47, 246, 207, 46, 47, 247, 78, 46, 47, 246, 175, 46, 47, - 247, 46, 46, 47, 246, 238, 46, 47, 247, 109, 46, 47, 246, 136, 46, 47, - 247, 7, 46, 47, 246, 199, 46, 47, 247, 70, 46, 47, 246, 167, 46, 47, 247, - 38, 46, 47, 246, 230, 46, 47, 247, 101, 46, 47, 246, 151, 46, 47, 247, - 22, 46, 47, 246, 214, 46, 47, 247, 85, 46, 47, 246, 182, 46, 47, 247, 53, - 46, 47, 246, 245, 46, 47, 247, 116, 46, 47, 246, 132, 46, 47, 247, 3, 46, - 47, 246, 195, 46, 47, 247, 66, 46, 47, 246, 163, 46, 47, 247, 34, 46, 47, - 246, 226, 46, 47, 247, 97, 46, 47, 246, 147, 46, 47, 247, 18, 46, 47, - 246, 210, 46, 47, 247, 81, 46, 47, 246, 178, 46, 47, 247, 49, 46, 47, - 246, 241, 46, 47, 247, 112, 46, 47, 246, 139, 46, 47, 247, 10, 46, 47, - 246, 202, 46, 47, 247, 73, 46, 47, 246, 170, 46, 47, 247, 41, 46, 47, - 246, 233, 46, 47, 247, 104, 46, 47, 246, 154, 46, 47, 247, 25, 46, 47, - 246, 217, 46, 47, 247, 88, 46, 47, 246, 185, 46, 47, 247, 56, 46, 47, - 246, 248, 46, 47, 247, 119, 46, 47, 246, 127, 46, 47, 246, 254, 46, 47, - 246, 190, 46, 47, 247, 61, 46, 47, 246, 158, 46, 47, 247, 29, 46, 47, - 246, 221, 46, 47, 247, 92, 46, 47, 246, 142, 46, 47, 247, 13, 46, 47, - 246, 205, 46, 47, 247, 76, 46, 47, 246, 173, 46, 47, 247, 44, 46, 47, - 246, 236, 46, 47, 247, 107, 46, 47, 246, 134, 46, 47, 247, 5, 46, 47, - 246, 197, 46, 47, 247, 68, 46, 47, 246, 165, 46, 47, 247, 36, 46, 47, - 246, 228, 46, 47, 247, 99, 46, 47, 246, 149, 46, 47, 247, 20, 46, 47, - 246, 212, 46, 47, 247, 83, 46, 47, 246, 180, 46, 47, 247, 51, 46, 47, - 246, 243, 46, 47, 247, 114, 46, 47, 246, 130, 46, 47, 247, 1, 46, 47, - 246, 193, 46, 47, 247, 64, 46, 47, 246, 161, 46, 47, 247, 32, 46, 47, - 246, 224, 46, 47, 247, 95, 46, 47, 246, 145, 46, 47, 247, 16, 46, 47, - 246, 208, 46, 47, 247, 79, 46, 47, 246, 176, 46, 47, 247, 47, 46, 47, - 246, 239, 46, 47, 247, 110, 46, 47, 246, 137, 46, 47, 247, 8, 46, 47, - 246, 200, 46, 47, 247, 71, 46, 47, 246, 168, 46, 47, 247, 39, 46, 47, - 246, 231, 46, 47, 247, 102, 46, 47, 246, 152, 46, 47, 247, 23, 46, 47, - 246, 215, 46, 47, 247, 86, 46, 47, 246, 183, 46, 47, 247, 54, 46, 47, - 246, 246, 46, 47, 247, 117, 46, 47, 246, 128, 46, 47, 246, 255, 46, 47, - 246, 191, 46, 47, 247, 62, 46, 47, 246, 159, 46, 47, 247, 30, 46, 47, - 246, 222, 46, 47, 247, 93, 46, 47, 246, 143, 46, 47, 247, 14, 46, 47, - 246, 206, 46, 47, 247, 77, 46, 47, 246, 174, 46, 47, 247, 45, 46, 47, - 246, 237, 46, 47, 247, 108, 46, 47, 246, 135, 46, 47, 247, 6, 46, 47, - 246, 198, 46, 47, 247, 69, 46, 47, 246, 166, 46, 47, 247, 37, 46, 47, - 246, 229, 46, 47, 247, 100, 46, 47, 246, 150, 46, 47, 247, 21, 46, 47, - 246, 213, 46, 47, 247, 84, 46, 47, 246, 181, 46, 47, 247, 52, 46, 47, - 246, 244, 46, 47, 247, 115, 46, 47, 246, 131, 46, 47, 247, 2, 46, 47, - 246, 194, 46, 47, 247, 65, 46, 47, 246, 162, 46, 47, 247, 33, 46, 47, - 246, 225, 46, 47, 247, 96, 46, 47, 246, 146, 46, 47, 247, 17, 46, 47, - 246, 209, 46, 47, 247, 80, 46, 47, 246, 177, 46, 47, 247, 48, 46, 47, - 246, 240, 46, 47, 247, 111, 46, 47, 246, 138, 46, 47, 247, 9, 46, 47, - 246, 201, 46, 47, 247, 72, 46, 47, 246, 169, 46, 47, 247, 40, 46, 47, - 246, 232, 46, 47, 247, 103, 46, 47, 246, 153, 46, 47, 247, 24, 46, 47, - 246, 216, 46, 47, 247, 87, 46, 47, 246, 184, 46, 47, 247, 55, 46, 47, - 246, 247, 46, 47, 247, 118, 97, 215, 58, 80, 2, 67, 91, 97, 215, 58, 80, - 2, 52, 67, 91, 140, 52, 80, 2, 67, 91, 97, 52, 80, 2, 67, 91, 43, 44, 52, - 80, 2, 67, 91, 97, 215, 58, 80, 243, 251, 130, 140, 52, 80, 243, 251, - 130, 97, 52, 80, 243, 251, 130, 246, 112, 80, 2, 203, 91, 214, 153, 80, - 2, 203, 91, 214, 153, 215, 212, 75, 246, 112, 215, 212, 75, 140, 52, 248, - 165, 75, 97, 52, 248, 165, 75, 140, 215, 212, 248, 165, 75, 97, 215, 212, - 248, 165, 75, 97, 215, 58, 215, 212, 248, 165, 75, 97, 80, 2, 246, 126, - 218, 141, 214, 153, 80, 216, 43, 130, 246, 112, 80, 216, 43, 130, 97, 80, - 2, 217, 79, 2, 67, 91, 97, 80, 2, 217, 79, 2, 52, 67, 91, 97, 215, 58, - 80, 2, 217, 78, 97, 215, 58, 80, 2, 217, 79, 2, 67, 91, 97, 215, 58, 80, - 2, 217, 79, 2, 52, 67, 91, 140, 254, 3, 97, 254, 3, 140, 52, 254, 3, 97, - 52, 254, 3, 140, 80, 216, 43, 85, 248, 0, 97, 80, 216, 43, 85, 248, 0, - 140, 80, 243, 251, 252, 149, 216, 43, 85, 248, 0, 97, 80, 243, 251, 252, - 149, 216, 43, 85, 248, 0, 228, 61, 212, 9, 22, 219, 30, 245, 228, 75, - 228, 61, 245, 228, 22, 219, 30, 212, 9, 75, 228, 61, 212, 9, 80, 2, 103, - 228, 61, 245, 228, 80, 2, 103, 219, 30, 245, 228, 80, 2, 103, 219, 30, - 212, 9, 80, 2, 103, 228, 61, 212, 9, 80, 22, 228, 61, 245, 228, 75, 228, - 61, 245, 228, 80, 22, 219, 30, 245, 228, 75, 219, 30, 245, 228, 80, 22, - 219, 30, 212, 9, 75, 219, 30, 212, 9, 80, 22, 228, 61, 212, 9, 75, 222, - 231, 248, 7, 249, 133, 244, 183, 248, 6, 244, 183, 248, 7, 249, 133, 222, - 231, 248, 6, 219, 30, 245, 228, 80, 249, 133, 228, 61, 245, 228, 75, 228, - 61, 245, 228, 80, 249, 133, 219, 30, 245, 228, 75, 244, 183, 248, 7, 249, - 133, 228, 61, 245, 228, 75, 222, 231, 248, 7, 249, 133, 219, 30, 245, - 228, 75, 228, 61, 245, 228, 80, 249, 133, 228, 61, 212, 9, 75, 228, 61, - 212, 9, 80, 249, 133, 228, 61, 245, 228, 75, 212, 36, 80, 225, 10, 247, - 203, 222, 254, 80, 225, 10, 97, 216, 189, 249, 98, 214, 152, 80, 225, 10, - 97, 216, 189, 249, 98, 246, 111, 80, 225, 10, 246, 112, 216, 189, 249, - 98, 233, 43, 80, 225, 10, 246, 112, 216, 189, 249, 98, 222, 244, 222, - 247, 254, 34, 250, 10, 75, 233, 46, 254, 34, 254, 96, 75, 216, 15, 254, - 34, 254, 96, 75, 251, 183, 254, 34, 254, 96, 75, 216, 15, 254, 34, 250, - 10, 80, 2, 230, 186, 216, 15, 254, 34, 254, 96, 80, 2, 225, 25, 232, 114, - 44, 220, 154, 250, 10, 75, 232, 114, 43, 220, 154, 254, 96, 75, 254, 96, - 250, 8, 250, 44, 75, 250, 10, 250, 8, 250, 44, 75, 97, 80, 72, 219, 253, - 140, 75, 140, 80, 72, 219, 253, 97, 75, 219, 253, 97, 80, 72, 140, 75, - 97, 80, 2, 96, 51, 140, 80, 2, 96, 51, 97, 80, 216, 140, 211, 178, 43, - 44, 80, 216, 140, 4, 250, 43, 214, 153, 215, 58, 80, 243, 251, 4, 250, - 43, 43, 252, 147, 120, 44, 252, 147, 124, 242, 5, 43, 252, 147, 124, 44, - 252, 147, 120, 242, 5, 120, 252, 147, 44, 124, 252, 147, 43, 242, 5, 120, - 252, 147, 43, 124, 252, 147, 44, 242, 5, 43, 252, 147, 120, 44, 252, 147, - 120, 242, 5, 120, 252, 147, 44, 124, 252, 147, 44, 242, 5, 43, 252, 147, - 124, 44, 252, 147, 124, 242, 5, 120, 252, 147, 43, 124, 252, 147, 43, - 242, 5, 140, 242, 6, 2, 252, 147, 120, 216, 43, 130, 97, 242, 6, 2, 252, - 147, 120, 216, 43, 130, 214, 153, 242, 6, 2, 252, 147, 44, 216, 43, 130, - 246, 112, 242, 6, 2, 252, 147, 44, 216, 43, 130, 140, 242, 6, 2, 252, - 147, 124, 216, 43, 130, 97, 242, 6, 2, 252, 147, 124, 216, 43, 130, 214, - 153, 242, 6, 2, 252, 147, 43, 216, 43, 130, 246, 112, 242, 6, 2, 252, - 147, 43, 216, 43, 130, 140, 242, 6, 2, 252, 147, 120, 243, 251, 130, 97, - 242, 6, 2, 252, 147, 120, 243, 251, 130, 214, 153, 242, 6, 2, 252, 147, - 44, 243, 251, 130, 246, 112, 242, 6, 2, 252, 147, 44, 243, 251, 130, 140, - 242, 6, 2, 252, 147, 124, 243, 251, 130, 97, 242, 6, 2, 252, 147, 124, - 243, 251, 130, 214, 153, 242, 6, 2, 252, 147, 43, 243, 251, 130, 246, - 112, 242, 6, 2, 252, 147, 43, 243, 251, 130, 140, 242, 6, 2, 252, 147, - 120, 72, 140, 242, 6, 2, 252, 147, 246, 114, 214, 153, 242, 6, 2, 252, - 147, 43, 252, 38, 214, 153, 242, 6, 2, 252, 147, 222, 254, 97, 242, 6, 2, - 252, 147, 120, 72, 97, 242, 6, 2, 252, 147, 246, 114, 246, 112, 242, 6, - 2, 252, 147, 43, 252, 38, 246, 112, 242, 6, 2, 252, 147, 222, 254, 140, - 242, 6, 2, 252, 147, 120, 72, 97, 242, 6, 2, 252, 147, 214, 163, 140, - 242, 6, 2, 252, 147, 124, 72, 97, 242, 6, 2, 252, 147, 246, 114, 97, 242, - 6, 2, 252, 147, 120, 72, 140, 242, 6, 2, 252, 147, 214, 163, 97, 242, 6, - 2, 252, 147, 124, 72, 140, 242, 6, 2, 252, 147, 246, 114, 140, 242, 6, 2, - 252, 147, 120, 72, 200, 248, 164, 140, 242, 6, 2, 252, 147, 124, 252, 51, - 200, 248, 164, 97, 242, 6, 2, 252, 147, 120, 72, 200, 248, 164, 97, 242, - 6, 2, 252, 147, 124, 252, 51, 200, 248, 164, 214, 153, 242, 6, 2, 252, - 147, 43, 252, 38, 246, 112, 242, 6, 2, 252, 147, 222, 254, 246, 112, 242, - 6, 2, 252, 147, 43, 252, 38, 214, 153, 242, 6, 2, 252, 147, 222, 254, 44, - 52, 80, 2, 222, 185, 241, 242, 245, 106, 5, 72, 97, 75, 216, 90, 226, - 172, 72, 97, 75, 140, 80, 72, 216, 90, 226, 171, 97, 80, 72, 216, 90, - 226, 171, 97, 80, 72, 254, 156, 128, 112, 233, 21, 72, 140, 75, 140, 80, - 216, 140, 233, 20, 242, 137, 72, 97, 75, 218, 65, 72, 97, 75, 140, 80, - 216, 140, 218, 64, 218, 23, 72, 140, 75, 43, 244, 99, 217, 78, 44, 244, - 99, 217, 78, 120, 244, 99, 217, 78, 124, 244, 99, 217, 78, 215, 212, 67, - 252, 149, 248, 68, 210, 160, 189, 218, 244, 210, 160, 189, 215, 49, 249, - 234, 43, 71, 249, 107, 127, 44, 71, 249, 107, 127, 43, 71, 226, 7, 44, - 71, 226, 7, 210, 160, 189, 43, 236, 22, 127, 210, 160, 189, 44, 236, 22, - 127, 210, 160, 189, 43, 251, 250, 127, 210, 160, 189, 44, 251, 250, 127, - 43, 42, 251, 166, 2, 214, 183, 44, 42, 251, 166, 2, 214, 183, 43, 42, - 251, 166, 2, 216, 116, 236, 7, 216, 15, 249, 168, 44, 42, 251, 166, 2, - 216, 116, 236, 7, 251, 183, 249, 168, 43, 42, 251, 166, 2, 216, 116, 236, - 7, 251, 183, 249, 168, 44, 42, 251, 166, 2, 216, 116, 236, 7, 216, 15, - 249, 168, 43, 254, 118, 251, 166, 2, 247, 128, 44, 254, 118, 251, 166, 2, - 247, 128, 43, 254, 34, 233, 21, 127, 44, 254, 34, 242, 137, 127, 52, 43, - 254, 34, 242, 137, 127, 52, 44, 254, 34, 233, 21, 127, 43, 85, 216, 7, - 220, 55, 127, 44, 85, 216, 7, 220, 55, 127, 246, 126, 244, 143, 67, 210, - 35, 232, 219, 231, 93, 254, 118, 226, 174, 233, 52, 44, 254, 118, 214, - 12, 2, 218, 236, 231, 93, 44, 254, 118, 2, 247, 128, 254, 118, 2, 222, - 94, 235, 222, 255, 12, 254, 117, 219, 1, 254, 118, 226, 174, 233, 52, - 219, 1, 254, 118, 226, 174, 214, 163, 215, 94, 254, 117, 223, 52, 254, - 117, 254, 118, 2, 214, 183, 223, 52, 254, 118, 2, 214, 183, 226, 252, - 254, 118, 226, 174, 214, 163, 226, 252, 254, 118, 226, 174, 246, 114, - 231, 93, 254, 118, 2, 204, 254, 13, 245, 148, 236, 7, 80, 225, 10, 120, - 22, 222, 254, 231, 93, 254, 118, 2, 204, 254, 13, 245, 148, 236, 7, 80, - 225, 10, 120, 22, 233, 52, 231, 93, 254, 118, 2, 204, 254, 13, 245, 148, - 236, 7, 80, 225, 10, 124, 22, 222, 254, 231, 93, 254, 118, 2, 204, 254, - 13, 245, 148, 236, 7, 80, 225, 10, 124, 22, 233, 52, 231, 93, 254, 118, - 2, 204, 254, 13, 245, 148, 236, 7, 80, 225, 10, 44, 22, 214, 163, 231, - 93, 254, 118, 2, 204, 254, 13, 245, 148, 236, 7, 80, 225, 10, 43, 22, - 214, 163, 231, 93, 254, 118, 2, 204, 254, 13, 245, 148, 236, 7, 80, 225, - 10, 44, 22, 246, 114, 231, 93, 254, 118, 2, 204, 254, 13, 245, 148, 236, - 7, 80, 225, 10, 43, 22, 246, 114, 223, 52, 245, 160, 220, 129, 245, 160, - 220, 130, 2, 226, 127, 245, 160, 220, 130, 2, 4, 250, 44, 48, 245, 160, - 220, 130, 2, 44, 80, 48, 245, 160, 220, 130, 2, 43, 80, 48, 250, 44, 2, - 203, 130, 37, 67, 130, 37, 226, 11, 37, 223, 53, 219, 48, 37, 225, 174, - 250, 44, 247, 181, 251, 86, 203, 252, 149, 22, 216, 15, 163, 247, 181, - 251, 86, 67, 130, 250, 44, 2, 218, 25, 211, 178, 37, 254, 95, 247, 177, - 50, 120, 80, 216, 140, 250, 43, 37, 71, 251, 121, 37, 251, 121, 37, 233, - 20, 37, 242, 136, 250, 44, 2, 4, 250, 44, 216, 43, 216, 197, 222, 254, - 250, 44, 2, 113, 203, 218, 93, 216, 43, 216, 197, 222, 254, 92, 222, 231, - 248, 7, 219, 97, 92, 244, 183, 248, 7, 219, 97, 92, 253, 224, 92, 4, 250, - 43, 92, 218, 236, 113, 235, 71, 218, 234, 215, 227, 2, 59, 48, 215, 227, - 2, 214, 183, 222, 94, 236, 7, 215, 226, 215, 227, 2, 220, 136, 253, 215, - 251, 182, 44, 215, 227, 72, 43, 215, 226, 43, 215, 227, 252, 38, 67, 130, - 67, 252, 149, 252, 38, 44, 215, 226, 251, 173, 2, 43, 163, 251, 229, 251, - 173, 2, 44, 163, 251, 229, 85, 251, 172, 30, 2, 43, 163, 251, 229, 30, 2, - 44, 163, 251, 229, 71, 240, 243, 85, 240, 243, 43, 211, 244, 244, 143, - 44, 211, 244, 244, 143, 43, 52, 211, 244, 244, 143, 44, 52, 211, 244, - 244, 143, 235, 255, 235, 241, 216, 113, 115, 235, 241, 235, 242, 229, - 107, 2, 67, 130, 246, 120, 230, 92, 42, 2, 249, 189, 226, 131, 235, 253, - 253, 245, 219, 221, 224, 183, 245, 106, 5, 22, 219, 99, 226, 11, 245, - 106, 5, 22, 219, 99, 226, 12, 2, 216, 90, 48, 240, 111, 216, 43, 22, 219, - 99, 226, 11, 242, 190, 218, 157, 216, 186, 246, 113, 215, 227, 2, 43, - 163, 251, 229, 246, 113, 215, 227, 2, 44, 163, 251, 229, 85, 248, 1, 2, - 124, 75, 85, 232, 110, 71, 250, 44, 2, 124, 75, 85, 250, 44, 2, 124, 75, - 245, 93, 71, 218, 236, 245, 93, 85, 218, 236, 245, 93, 71, 248, 0, 245, - 93, 85, 248, 0, 245, 93, 71, 250, 43, 245, 93, 85, 250, 43, 222, 134, - 223, 53, 219, 49, 226, 171, 219, 49, 2, 226, 127, 223, 53, 219, 49, 2, - 203, 91, 252, 1, 219, 48, 252, 1, 223, 53, 219, 48, 52, 225, 25, 215, - 212, 225, 25, 233, 48, 249, 99, 254, 118, 127, 222, 250, 249, 99, 254, - 118, 127, 216, 79, 230, 184, 230, 29, 37, 59, 226, 171, 230, 29, 37, 96, - 226, 171, 230, 29, 37, 30, 226, 171, 230, 29, 214, 176, 226, 172, 2, 247, - 128, 230, 29, 214, 176, 226, 172, 2, 225, 25, 230, 29, 42, 235, 206, 226, - 171, 230, 29, 42, 214, 176, 226, 171, 113, 232, 152, 22, 226, 171, 113, - 232, 152, 177, 226, 171, 230, 29, 30, 226, 171, 230, 159, 113, 218, 44, - 218, 42, 2, 235, 218, 224, 27, 235, 219, 226, 171, 244, 107, 226, 3, 235, - 218, 235, 219, 2, 52, 91, 235, 219, 253, 181, 2, 219, 97, 250, 40, 243, - 233, 254, 96, 235, 216, 232, 220, 235, 217, 2, 223, 118, 225, 241, 254, - 10, 225, 4, 232, 220, 235, 217, 2, 220, 154, 225, 241, 254, 10, 225, 4, - 232, 220, 235, 217, 228, 57, 236, 1, 216, 197, 225, 4, 235, 219, 254, 10, - 116, 225, 14, 226, 171, 224, 21, 235, 219, 226, 171, 235, 219, 2, 140, - 80, 2, 103, 235, 219, 2, 30, 50, 235, 219, 2, 235, 205, 235, 219, 2, 214, - 175, 235, 219, 2, 226, 127, 235, 219, 2, 214, 183, 235, 72, 233, 91, 43, - 215, 227, 226, 171, 210, 160, 189, 221, 203, 249, 217, 210, 160, 189, - 221, 203, 225, 59, 210, 160, 189, 221, 203, 224, 179, 96, 5, 2, 4, 250, - 44, 48, 96, 5, 2, 250, 39, 255, 24, 48, 96, 5, 2, 216, 90, 48, 96, 5, 2, - 59, 51, 96, 5, 2, 216, 90, 51, 96, 5, 2, 218, 66, 105, 96, 5, 2, 85, 215, - 226, 230, 187, 5, 2, 249, 228, 48, 230, 187, 5, 2, 59, 51, 230, 187, 5, - 2, 244, 183, 247, 126, 230, 187, 5, 2, 222, 231, 247, 126, 96, 5, 236, 7, - 43, 163, 250, 43, 96, 5, 236, 7, 44, 163, 250, 43, 213, 254, 177, 249, - 139, 224, 183, 230, 89, 5, 2, 59, 48, 230, 89, 5, 2, 214, 183, 220, 151, - 224, 184, 2, 251, 183, 250, 7, 219, 79, 224, 183, 230, 89, 5, 236, 7, 43, - 163, 250, 43, 230, 89, 5, 236, 7, 44, 163, 250, 43, 37, 230, 89, 5, 2, - 250, 39, 255, 23, 230, 89, 5, 236, 7, 52, 250, 43, 37, 247, 177, 50, 96, - 5, 236, 7, 215, 226, 230, 187, 5, 236, 7, 215, 226, 230, 89, 5, 236, 7, - 215, 226, 235, 213, 224, 183, 222, 245, 235, 213, 224, 183, 210, 160, - 189, 223, 93, 249, 217, 254, 142, 177, 249, 173, 235, 206, 2, 247, 128, - 214, 176, 2, 230, 187, 50, 214, 176, 2, 226, 127, 235, 206, 2, 226, 127, - 235, 206, 2, 232, 152, 254, 126, 214, 176, 2, 232, 152, 226, 162, 214, - 176, 72, 235, 205, 235, 206, 72, 214, 175, 214, 176, 72, 252, 149, 72, - 235, 205, 235, 206, 72, 252, 149, 72, 214, 175, 214, 176, 252, 38, 22, - 235, 71, 2, 214, 175, 235, 206, 252, 38, 22, 235, 71, 2, 235, 205, 250, - 8, 214, 176, 2, 220, 135, 250, 8, 235, 206, 2, 220, 135, 52, 42, 235, - 205, 52, 42, 214, 175, 250, 8, 214, 176, 2, 220, 136, 22, 219, 79, 224, - 183, 232, 152, 22, 2, 59, 48, 232, 152, 177, 2, 59, 48, 52, 232, 152, - 254, 126, 52, 232, 152, 226, 162, 113, 235, 207, 232, 152, 254, 126, 113, - 235, 207, 232, 152, 226, 162, 219, 87, 233, 91, 226, 162, 219, 87, 233, - 91, 254, 126, 232, 152, 177, 226, 125, 232, 152, 254, 126, 232, 152, 22, - 2, 230, 229, 218, 141, 232, 152, 177, 2, 230, 229, 218, 141, 232, 152, - 22, 2, 203, 248, 164, 232, 152, 177, 2, 203, 248, 164, 232, 152, 22, 2, - 52, 226, 127, 232, 152, 22, 2, 214, 183, 232, 152, 22, 2, 52, 214, 183, - 4, 213, 251, 2, 214, 183, 232, 152, 177, 2, 52, 226, 127, 232, 152, 177, - 2, 52, 214, 183, 210, 160, 189, 247, 137, 254, 87, 210, 160, 189, 223, - 151, 254, 87, 245, 106, 5, 2, 59, 51, 240, 111, 2, 59, 48, 215, 212, 203, - 252, 149, 2, 52, 67, 91, 215, 212, 203, 252, 149, 2, 215, 212, 67, 91, - 216, 90, 226, 172, 2, 59, 48, 216, 90, 226, 172, 2, 222, 231, 247, 126, - 219, 164, 230, 187, 219, 163, 249, 207, 2, 59, 48, 245, 106, 2, 253, 224, - 254, 156, 128, 216, 43, 2, 250, 39, 255, 23, 254, 56, 128, 177, 128, 112, - 245, 106, 5, 72, 96, 50, 96, 5, 72, 245, 106, 50, 245, 106, 5, 72, 216, - 90, 226, 171, 52, 249, 235, 245, 107, 113, 249, 202, 245, 106, 219, 178, - 134, 249, 202, 245, 106, 219, 178, 245, 106, 5, 2, 113, 170, 72, 22, 113, - 170, 51, 245, 102, 2, 244, 19, 170, 48, 233, 21, 2, 250, 44, 235, 222, - 242, 137, 2, 250, 44, 235, 222, 233, 21, 2, 224, 16, 164, 48, 242, 137, - 2, 224, 16, 164, 48, 233, 21, 177, 219, 99, 128, 112, 242, 137, 177, 219, - 99, 128, 112, 233, 21, 177, 219, 99, 128, 216, 43, 2, 59, 235, 222, 242, - 137, 177, 219, 99, 128, 216, 43, 2, 59, 235, 222, 233, 21, 177, 219, 99, - 128, 216, 43, 2, 59, 48, 242, 137, 177, 219, 99, 128, 216, 43, 2, 59, 48, - 233, 21, 177, 219, 99, 128, 216, 43, 2, 59, 72, 222, 254, 242, 137, 177, - 219, 99, 128, 216, 43, 2, 59, 72, 233, 52, 233, 21, 177, 254, 57, 242, - 137, 177, 254, 57, 233, 21, 22, 219, 155, 228, 57, 128, 112, 242, 137, - 22, 219, 155, 228, 57, 128, 112, 233, 21, 22, 228, 57, 254, 57, 242, 137, - 22, 228, 57, 254, 57, 233, 21, 72, 246, 119, 128, 72, 242, 136, 242, 137, - 72, 246, 119, 128, 72, 233, 20, 233, 21, 72, 219, 164, 177, 245, 107, - 242, 137, 72, 219, 164, 177, 245, 107, 233, 21, 72, 219, 164, 72, 242, - 136, 242, 137, 72, 219, 164, 72, 233, 20, 233, 21, 72, 242, 137, 72, 246, - 119, 245, 107, 242, 137, 72, 233, 21, 72, 246, 119, 245, 107, 233, 21, - 72, 219, 99, 128, 72, 242, 137, 72, 219, 99, 245, 107, 242, 137, 72, 219, - 99, 128, 72, 233, 21, 72, 219, 99, 245, 107, 219, 99, 128, 216, 43, 177, - 233, 20, 219, 99, 128, 216, 43, 177, 242, 136, 219, 99, 128, 216, 43, - 177, 233, 21, 2, 59, 235, 222, 219, 99, 128, 216, 43, 177, 242, 137, 2, - 59, 235, 222, 246, 119, 128, 216, 43, 177, 233, 20, 246, 119, 128, 216, - 43, 177, 242, 136, 246, 119, 219, 99, 128, 216, 43, 177, 233, 20, 246, - 119, 219, 99, 128, 216, 43, 177, 242, 136, 219, 164, 177, 233, 20, 219, - 164, 177, 242, 136, 219, 164, 72, 233, 21, 72, 245, 106, 50, 219, 164, - 72, 242, 137, 72, 245, 106, 50, 52, 229, 96, 233, 20, 52, 229, 96, 242, - 136, 52, 229, 96, 233, 21, 2, 214, 183, 242, 137, 226, 125, 233, 20, 242, - 137, 252, 38, 233, 20, 233, 21, 250, 8, 251, 86, 249, 100, 242, 137, 250, - 8, 251, 86, 249, 100, 233, 21, 250, 8, 251, 86, 249, 101, 72, 219, 99, - 245, 107, 242, 137, 250, 8, 251, 86, 249, 101, 72, 219, 99, 245, 107, - 219, 80, 216, 201, 233, 89, 216, 201, 219, 80, 216, 202, 177, 128, 112, - 233, 89, 216, 202, 177, 128, 112, 245, 106, 5, 2, 251, 116, 48, 224, 206, - 72, 219, 155, 245, 106, 50, 218, 57, 72, 219, 155, 245, 106, 50, 224, - 206, 72, 219, 155, 228, 57, 128, 112, 218, 57, 72, 219, 155, 228, 57, - 128, 112, 224, 206, 72, 245, 106, 50, 218, 57, 72, 245, 106, 50, 224, - 206, 72, 228, 57, 128, 112, 218, 57, 72, 228, 57, 128, 112, 224, 206, 72, - 254, 156, 128, 112, 218, 57, 72, 254, 156, 128, 112, 224, 206, 72, 228, - 57, 254, 156, 128, 112, 218, 57, 72, 228, 57, 254, 156, 128, 112, 52, - 224, 205, 52, 218, 56, 218, 65, 2, 247, 128, 218, 23, 2, 247, 128, 218, - 65, 2, 96, 5, 51, 218, 23, 2, 96, 5, 51, 218, 65, 2, 230, 89, 5, 51, 218, - 23, 2, 230, 89, 5, 51, 218, 65, 64, 177, 128, 216, 43, 2, 59, 48, 218, - 23, 64, 177, 128, 216, 43, 2, 59, 48, 218, 65, 64, 72, 245, 106, 50, 218, - 23, 64, 72, 245, 106, 50, 218, 65, 64, 72, 216, 90, 226, 171, 218, 23, - 64, 72, 216, 90, 226, 171, 218, 65, 64, 72, 254, 156, 128, 112, 218, 23, - 64, 72, 254, 156, 128, 112, 218, 65, 64, 72, 228, 57, 128, 112, 218, 23, - 64, 72, 228, 57, 128, 112, 42, 43, 204, 93, 226, 171, 42, 44, 204, 93, - 226, 171, 250, 8, 218, 64, 250, 8, 218, 22, 250, 8, 218, 65, 177, 128, - 112, 250, 8, 218, 23, 177, 128, 112, 218, 65, 72, 218, 22, 218, 23, 72, - 218, 64, 218, 65, 72, 218, 64, 218, 23, 72, 218, 22, 218, 23, 252, 38, - 218, 64, 218, 23, 252, 38, 22, 235, 71, 251, 86, 248, 165, 2, 218, 64, - 245, 178, 64, 226, 174, 246, 111, 225, 51, 2, 217, 13, 216, 14, 215, 241, - 235, 205, 244, 29, 228, 70, 219, 253, 43, 217, 88, 219, 253, 124, 217, - 88, 219, 253, 120, 217, 88, 225, 175, 2, 222, 93, 67, 252, 149, 215, 212, - 44, 215, 93, 52, 67, 252, 149, 43, 215, 93, 67, 252, 149, 52, 43, 215, - 93, 52, 67, 252, 149, 52, 43, 215, 93, 200, 248, 165, 243, 251, 43, 231, - 68, 64, 52, 213, 239, 219, 253, 124, 217, 89, 2, 226, 127, 219, 253, 120, - 217, 89, 2, 214, 183, 219, 253, 120, 217, 89, 72, 219, 253, 124, 217, 88, - 52, 124, 217, 88, 52, 120, 217, 88, 52, 218, 105, 228, 57, 50, 223, 52, - 52, 218, 105, 228, 57, 50, 247, 146, 228, 57, 247, 183, 2, 223, 52, 229, - 106, 219, 97, 67, 232, 220, 2, 250, 44, 48, 67, 232, 220, 2, 250, 44, 51, - 124, 217, 89, 2, 250, 44, 51, 226, 12, 2, 203, 91, 226, 12, 2, 216, 90, - 226, 171, 215, 212, 67, 252, 149, 251, 252, 223, 94, 215, 212, 67, 252, - 149, 2, 203, 91, 215, 212, 249, 235, 226, 171, 215, 212, 229, 96, 233, - 20, 215, 212, 229, 96, 242, 136, 246, 119, 219, 99, 233, 21, 177, 128, - 112, 246, 119, 219, 99, 242, 137, 177, 128, 112, 215, 212, 219, 49, 251, - 252, 223, 94, 233, 91, 215, 212, 67, 252, 149, 226, 171, 52, 219, 49, - 226, 171, 71, 67, 130, 230, 29, 71, 67, 130, 228, 61, 245, 228, 71, 75, - 228, 61, 212, 9, 71, 75, 219, 30, 245, 228, 71, 75, 219, 30, 212, 9, 71, - 75, 43, 44, 71, 75, 140, 85, 75, 214, 153, 85, 75, 246, 112, 85, 75, 228, - 61, 245, 228, 85, 75, 228, 61, 212, 9, 85, 75, 219, 30, 245, 228, 85, 75, - 219, 30, 212, 9, 85, 75, 43, 44, 85, 75, 120, 124, 85, 75, 97, 80, 2, - 216, 78, 246, 111, 97, 80, 2, 216, 78, 214, 152, 140, 80, 2, 216, 78, - 246, 111, 140, 80, 2, 216, 78, 214, 152, 42, 2, 216, 15, 163, 251, 229, - 42, 2, 251, 183, 163, 251, 229, 42, 2, 214, 160, 44, 248, 7, 163, 251, - 229, 42, 2, 232, 114, 43, 248, 7, 163, 251, 229, 248, 1, 2, 43, 163, 251, - 229, 248, 1, 2, 44, 163, 251, 229, 248, 1, 2, 216, 15, 163, 251, 229, - 248, 1, 2, 251, 183, 163, 251, 229, 246, 126, 218, 236, 85, 233, 91, 218, - 236, 71, 233, 91, 218, 236, 85, 213, 187, 4, 218, 236, 71, 213, 187, 4, - 218, 236, 85, 225, 193, 71, 225, 193, 71, 241, 200, 85, 241, 200, 203, - 85, 241, 200, 85, 233, 91, 250, 43, 85, 231, 87, 248, 0, 71, 231, 87, - 248, 0, 85, 231, 87, 232, 110, 71, 231, 87, 232, 110, 85, 4, 248, 0, 85, - 4, 232, 110, 71, 4, 232, 110, 85, 203, 245, 172, 71, 203, 245, 172, 85, - 67, 245, 172, 71, 67, 245, 172, 43, 80, 2, 4, 250, 43, 134, 140, 253, - 255, 43, 80, 2, 37, 225, 25, 200, 140, 218, 232, 75, 140, 215, 58, 80, 2, - 67, 91, 140, 215, 58, 80, 2, 52, 67, 91, 140, 215, 58, 80, 243, 251, 130, - 140, 215, 58, 215, 212, 248, 165, 75, 140, 80, 2, 246, 126, 218, 141, - 140, 80, 2, 217, 79, 2, 67, 91, 140, 80, 2, 217, 79, 2, 52, 67, 91, 140, - 215, 58, 80, 2, 217, 78, 140, 215, 58, 80, 2, 217, 79, 2, 67, 91, 140, - 215, 58, 80, 2, 217, 79, 2, 52, 67, 91, 140, 80, 216, 140, 211, 178, 212, - 36, 80, 225, 10, 247, 203, 233, 52, 245, 106, 5, 72, 140, 75, 223, 53, - 216, 90, 226, 172, 72, 140, 75, 140, 80, 72, 223, 53, 254, 156, 128, 112, - 97, 80, 216, 140, 242, 136, 97, 80, 216, 140, 218, 22, 140, 224, 27, 75, - 97, 224, 27, 75, 223, 53, 216, 90, 226, 172, 72, 97, 75, 97, 80, 72, 223, - 53, 254, 156, 128, 112, 216, 90, 226, 172, 72, 140, 75, 140, 80, 72, 254, - 156, 128, 112, 140, 80, 72, 223, 53, 216, 90, 226, 171, 97, 80, 72, 223, - 53, 216, 90, 226, 171, 71, 231, 87, 218, 158, 85, 4, 218, 158, 71, 4, - 218, 158, 85, 222, 250, 225, 193, 71, 222, 250, 225, 193, 114, 233, 91, - 250, 43, 114, 226, 128, 2, 226, 128, 235, 222, 114, 250, 44, 2, 250, 44, - 235, 222, 114, 250, 43, 114, 37, 222, 0, 145, 6, 1, 253, 167, 145, 6, 1, - 251, 125, 145, 6, 1, 213, 253, 145, 6, 1, 242, 192, 145, 6, 1, 247, 148, - 145, 6, 1, 211, 21, 145, 6, 1, 210, 68, 145, 6, 1, 246, 42, 145, 6, 1, - 210, 91, 145, 6, 1, 235, 154, 145, 6, 1, 65, 235, 154, 145, 6, 1, 74, - 145, 6, 1, 247, 168, 145, 6, 1, 234, 246, 145, 6, 1, 232, 192, 145, 6, 1, - 230, 34, 145, 6, 1, 229, 196, 145, 6, 1, 226, 189, 145, 6, 1, 225, 7, - 145, 6, 1, 222, 230, 145, 6, 1, 219, 85, 145, 6, 1, 215, 81, 145, 6, 1, - 214, 201, 145, 6, 1, 243, 254, 145, 6, 1, 241, 206, 145, 6, 1, 226, 139, - 145, 6, 1, 225, 224, 145, 6, 1, 219, 230, 145, 6, 1, 215, 168, 145, 6, 1, - 250, 83, 145, 6, 1, 220, 104, 145, 6, 1, 211, 27, 145, 6, 1, 211, 29, - 145, 6, 1, 211, 57, 145, 6, 1, 218, 255, 162, 145, 6, 1, 210, 212, 145, - 6, 1, 4, 210, 183, 145, 6, 1, 4, 210, 184, 2, 217, 78, 145, 6, 1, 210, - 244, 145, 6, 1, 235, 191, 4, 210, 183, 145, 6, 1, 252, 1, 210, 183, 145, - 6, 1, 235, 191, 252, 1, 210, 183, 145, 6, 1, 244, 90, 145, 6, 1, 235, - 152, 145, 6, 1, 219, 229, 145, 6, 1, 215, 203, 61, 145, 6, 1, 233, 81, - 230, 34, 145, 4, 1, 253, 167, 145, 4, 1, 251, 125, 145, 4, 1, 213, 253, - 145, 4, 1, 242, 192, 145, 4, 1, 247, 148, 145, 4, 1, 211, 21, 145, 4, 1, - 210, 68, 145, 4, 1, 246, 42, 145, 4, 1, 210, 91, 145, 4, 1, 235, 154, - 145, 4, 1, 65, 235, 154, 145, 4, 1, 74, 145, 4, 1, 247, 168, 145, 4, 1, - 234, 246, 145, 4, 1, 232, 192, 145, 4, 1, 230, 34, 145, 4, 1, 229, 196, - 145, 4, 1, 226, 189, 145, 4, 1, 225, 7, 145, 4, 1, 222, 230, 145, 4, 1, - 219, 85, 145, 4, 1, 215, 81, 145, 4, 1, 214, 201, 145, 4, 1, 243, 254, - 145, 4, 1, 241, 206, 145, 4, 1, 226, 139, 145, 4, 1, 225, 224, 145, 4, 1, - 219, 230, 145, 4, 1, 215, 168, 145, 4, 1, 250, 83, 145, 4, 1, 220, 104, - 145, 4, 1, 211, 27, 145, 4, 1, 211, 29, 145, 4, 1, 211, 57, 145, 4, 1, - 218, 255, 162, 145, 4, 1, 210, 212, 145, 4, 1, 4, 210, 183, 145, 4, 1, 4, - 210, 184, 2, 217, 78, 145, 4, 1, 210, 244, 145, 4, 1, 235, 191, 4, 210, - 183, 145, 4, 1, 252, 1, 210, 183, 145, 4, 1, 235, 191, 252, 1, 210, 183, - 145, 4, 1, 244, 90, 145, 4, 1, 235, 152, 145, 4, 1, 219, 229, 145, 4, 1, - 215, 203, 61, 145, 4, 1, 233, 81, 230, 34, 7, 6, 1, 233, 155, 2, 52, 130, - 7, 4, 1, 233, 155, 2, 52, 130, 7, 6, 1, 233, 155, 2, 230, 229, 184, 7, 6, - 1, 226, 110, 2, 91, 7, 6, 1, 223, 227, 2, 217, 78, 7, 4, 1, 116, 2, 91, - 7, 4, 1, 217, 154, 2, 248, 7, 91, 7, 6, 1, 242, 68, 2, 248, 47, 7, 4, 1, - 242, 68, 2, 248, 47, 7, 6, 1, 235, 30, 2, 248, 47, 7, 4, 1, 235, 30, 2, - 248, 47, 7, 6, 1, 210, 160, 2, 248, 47, 7, 4, 1, 210, 160, 2, 248, 47, 7, - 6, 1, 254, 151, 7, 6, 1, 232, 55, 2, 103, 7, 6, 1, 215, 94, 61, 7, 6, 1, - 215, 94, 254, 151, 7, 4, 1, 214, 106, 2, 44, 103, 7, 6, 1, 212, 99, 2, - 103, 7, 4, 1, 212, 99, 2, 103, 7, 4, 1, 214, 106, 2, 249, 108, 7, 6, 1, - 163, 242, 67, 7, 4, 1, 163, 242, 67, 7, 4, 1, 217, 76, 225, 136, 7, 4, 1, - 160, 2, 228, 55, 7, 4, 1, 215, 94, 223, 227, 2, 217, 78, 7, 4, 1, 144, 2, - 121, 222, 237, 235, 222, 7, 1, 4, 6, 215, 94, 76, 7, 218, 66, 4, 1, 235, - 150, 58, 1, 6, 214, 105, 7, 6, 1, 222, 94, 2, 217, 251, 217, 78, 7, 6, 1, - 210, 160, 2, 217, 251, 217, 78, 81, 6, 1, 254, 173, 81, 4, 1, 254, 173, - 81, 6, 1, 213, 173, 81, 4, 1, 213, 173, 81, 6, 1, 243, 114, 81, 4, 1, - 243, 114, 81, 6, 1, 248, 199, 81, 4, 1, 248, 199, 81, 6, 1, 245, 202, 81, - 4, 1, 245, 202, 81, 6, 1, 219, 35, 81, 4, 1, 219, 35, 81, 6, 1, 210, 101, - 81, 4, 1, 210, 101, 81, 6, 1, 241, 255, 81, 4, 1, 241, 255, 81, 6, 1, - 216, 178, 81, 4, 1, 216, 178, 81, 6, 1, 240, 123, 81, 4, 1, 240, 123, 81, - 6, 1, 234, 233, 81, 4, 1, 234, 233, 81, 6, 1, 233, 78, 81, 4, 1, 233, 78, - 81, 6, 1, 230, 235, 81, 4, 1, 230, 235, 81, 6, 1, 228, 238, 81, 4, 1, - 228, 238, 81, 6, 1, 233, 239, 81, 4, 1, 233, 239, 81, 6, 1, 78, 81, 4, 1, - 78, 81, 6, 1, 225, 111, 81, 4, 1, 225, 111, 81, 6, 1, 222, 213, 81, 4, 1, - 222, 213, 81, 6, 1, 219, 167, 81, 4, 1, 219, 167, 81, 6, 1, 217, 42, 81, - 4, 1, 217, 42, 81, 6, 1, 214, 229, 81, 4, 1, 214, 229, 81, 6, 1, 244, - 129, 81, 4, 1, 244, 129, 81, 6, 1, 234, 118, 81, 4, 1, 234, 118, 81, 6, - 1, 224, 164, 81, 4, 1, 224, 164, 81, 6, 1, 226, 182, 81, 4, 1, 226, 182, - 81, 6, 1, 248, 5, 254, 179, 81, 4, 1, 248, 5, 254, 179, 81, 6, 1, 55, 81, - 254, 205, 81, 4, 1, 55, 81, 254, 205, 81, 6, 1, 249, 123, 245, 202, 81, - 4, 1, 249, 123, 245, 202, 81, 6, 1, 248, 5, 234, 233, 81, 4, 1, 248, 5, - 234, 233, 81, 6, 1, 248, 5, 228, 238, 81, 4, 1, 248, 5, 228, 238, 81, 6, - 1, 249, 123, 228, 238, 81, 4, 1, 249, 123, 228, 238, 81, 6, 1, 55, 81, - 226, 182, 81, 4, 1, 55, 81, 226, 182, 81, 6, 1, 221, 248, 81, 4, 1, 221, - 248, 81, 6, 1, 249, 136, 220, 57, 81, 4, 1, 249, 136, 220, 57, 81, 6, 1, - 55, 81, 220, 57, 81, 4, 1, 55, 81, 220, 57, 81, 6, 1, 55, 81, 245, 83, - 81, 4, 1, 55, 81, 245, 83, 81, 6, 1, 254, 191, 234, 123, 81, 4, 1, 254, - 191, 234, 123, 81, 6, 1, 248, 5, 241, 52, 81, 4, 1, 248, 5, 241, 52, 81, - 6, 1, 55, 81, 241, 52, 81, 4, 1, 55, 81, 241, 52, 81, 6, 1, 55, 81, 162, - 81, 4, 1, 55, 81, 162, 81, 6, 1, 233, 154, 162, 81, 4, 1, 233, 154, 162, - 81, 6, 1, 55, 81, 241, 224, 81, 4, 1, 55, 81, 241, 224, 81, 6, 1, 55, 81, - 242, 2, 81, 4, 1, 55, 81, 242, 2, 81, 6, 1, 55, 81, 243, 109, 81, 4, 1, - 55, 81, 243, 109, 81, 6, 1, 55, 81, 247, 171, 81, 4, 1, 55, 81, 247, 171, - 81, 6, 1, 55, 81, 220, 24, 81, 4, 1, 55, 81, 220, 24, 81, 6, 1, 55, 227, - 212, 220, 24, 81, 4, 1, 55, 227, 212, 220, 24, 81, 6, 1, 55, 227, 212, - 229, 32, 81, 4, 1, 55, 227, 212, 229, 32, 81, 6, 1, 55, 227, 212, 227, - 152, 81, 4, 1, 55, 227, 212, 227, 152, 81, 6, 1, 55, 227, 212, 212, 37, - 81, 4, 1, 55, 227, 212, 212, 37, 81, 16, 234, 252, 81, 16, 230, 236, 222, - 213, 81, 16, 225, 112, 222, 213, 81, 16, 218, 149, 81, 16, 217, 43, 222, - 213, 81, 16, 234, 119, 222, 213, 81, 16, 220, 25, 219, 167, 81, 6, 1, - 249, 123, 220, 57, 81, 4, 1, 249, 123, 220, 57, 81, 6, 1, 249, 123, 243, - 109, 81, 4, 1, 249, 123, 243, 109, 81, 38, 228, 239, 48, 81, 38, 218, - 249, 253, 232, 81, 38, 218, 249, 233, 27, 81, 6, 1, 251, 207, 234, 123, - 81, 4, 1, 251, 207, 234, 123, 81, 55, 227, 212, 243, 236, 218, 131, 81, - 55, 227, 212, 247, 205, 224, 16, 79, 81, 55, 227, 212, 235, 244, 224, 16, - 79, 81, 55, 227, 212, 213, 241, 247, 180, 81, 244, 10, 123, 242, 34, 81, - 243, 236, 218, 131, 81, 230, 129, 247, 180, 98, 4, 1, 254, 131, 98, 4, 1, - 252, 160, 98, 4, 1, 243, 113, 98, 4, 1, 247, 136, 98, 4, 1, 245, 158, 98, - 4, 1, 213, 160, 98, 4, 1, 210, 89, 98, 4, 1, 217, 61, 98, 4, 1, 236, 6, - 98, 4, 1, 234, 240, 98, 4, 1, 233, 87, 98, 4, 1, 231, 190, 98, 4, 1, 229, - 200, 98, 4, 1, 226, 200, 98, 4, 1, 226, 21, 98, 4, 1, 210, 78, 98, 4, 1, - 223, 174, 98, 4, 1, 221, 245, 98, 4, 1, 217, 51, 98, 4, 1, 214, 190, 98, - 4, 1, 225, 143, 98, 4, 1, 234, 127, 98, 4, 1, 242, 248, 98, 4, 1, 224, - 76, 98, 4, 1, 220, 22, 98, 4, 1, 250, 105, 98, 4, 1, 251, 15, 98, 4, 1, - 235, 106, 98, 4, 1, 250, 48, 98, 4, 1, 250, 151, 98, 4, 1, 211, 163, 98, - 4, 1, 235, 117, 98, 4, 1, 242, 50, 98, 4, 1, 241, 245, 98, 4, 1, 241, - 182, 98, 4, 1, 212, 22, 98, 4, 1, 242, 11, 98, 4, 1, 241, 72, 98, 4, 1, - 210, 246, 98, 4, 1, 254, 241, 216, 109, 1, 192, 216, 109, 1, 211, 99, - 216, 109, 1, 211, 98, 216, 109, 1, 211, 88, 216, 109, 1, 211, 86, 216, - 109, 1, 252, 40, 255, 25, 211, 81, 216, 109, 1, 211, 81, 216, 109, 1, - 211, 96, 216, 109, 1, 211, 93, 216, 109, 1, 211, 95, 216, 109, 1, 211, - 94, 216, 109, 1, 211, 12, 216, 109, 1, 211, 90, 216, 109, 1, 211, 79, - 216, 109, 1, 215, 116, 211, 79, 216, 109, 1, 211, 76, 216, 109, 1, 211, - 84, 216, 109, 1, 252, 40, 255, 25, 211, 84, 216, 109, 1, 215, 116, 211, - 84, 216, 109, 1, 211, 83, 216, 109, 1, 211, 103, 216, 109, 1, 211, 77, - 216, 109, 1, 215, 116, 211, 77, 216, 109, 1, 211, 66, 216, 109, 1, 215, - 116, 211, 66, 216, 109, 1, 211, 8, 216, 109, 1, 211, 49, 216, 109, 1, - 254, 216, 211, 49, 216, 109, 1, 215, 116, 211, 49, 216, 109, 1, 211, 75, - 216, 109, 1, 211, 74, 216, 109, 1, 211, 71, 216, 109, 1, 215, 116, 211, - 85, 216, 109, 1, 215, 116, 211, 69, 216, 109, 1, 211, 67, 216, 109, 1, - 210, 212, 216, 109, 1, 211, 64, 216, 109, 1, 211, 63, 216, 109, 1, 211, - 87, 216, 109, 1, 215, 116, 211, 87, 216, 109, 1, 253, 171, 211, 87, 216, - 109, 1, 211, 62, 216, 109, 1, 211, 60, 216, 109, 1, 211, 61, 216, 109, 1, - 211, 59, 216, 109, 1, 211, 58, 216, 109, 1, 211, 97, 216, 109, 1, 211, - 56, 216, 109, 1, 211, 54, 216, 109, 1, 211, 53, 216, 109, 1, 211, 52, - 216, 109, 1, 211, 50, 216, 109, 1, 217, 35, 211, 50, 216, 109, 1, 211, - 48, 216, 109, 1, 211, 47, 216, 109, 1, 210, 244, 216, 109, 58, 1, 233, - 132, 79, 216, 109, 220, 140, 79, 216, 109, 117, 235, 69, 29, 3, 232, 161, - 29, 3, 230, 165, 29, 3, 222, 211, 29, 3, 219, 59, 29, 3, 220, 8, 29, 3, - 251, 212, 29, 3, 216, 42, 29, 3, 249, 245, 29, 3, 228, 77, 29, 3, 227, - 137, 29, 3, 242, 187, 227, 4, 29, 3, 210, 22, 29, 3, 247, 151, 29, 3, - 248, 112, 29, 3, 235, 73, 29, 3, 216, 156, 29, 3, 250, 93, 29, 3, 225, - 123, 29, 3, 225, 18, 29, 3, 243, 6, 29, 3, 243, 2, 29, 3, 243, 3, 29, 3, - 243, 4, 29, 3, 218, 225, 29, 3, 218, 181, 29, 3, 218, 194, 29, 3, 218, - 224, 29, 3, 218, 198, 29, 3, 218, 199, 29, 3, 218, 186, 29, 3, 250, 221, - 29, 3, 250, 200, 29, 3, 250, 202, 29, 3, 250, 220, 29, 3, 250, 218, 29, - 3, 250, 219, 29, 3, 250, 201, 29, 3, 209, 243, 29, 3, 209, 221, 29, 3, - 209, 234, 29, 3, 209, 242, 29, 3, 209, 237, 29, 3, 209, 238, 29, 3, 209, - 226, 29, 3, 250, 216, 29, 3, 250, 203, 29, 3, 250, 205, 29, 3, 250, 215, - 29, 3, 250, 213, 29, 3, 250, 214, 29, 3, 250, 204, 29, 3, 223, 239, 29, - 3, 223, 229, 29, 3, 223, 235, 29, 3, 223, 238, 29, 3, 223, 236, 29, 3, - 223, 237, 29, 3, 223, 234, 29, 3, 233, 165, 29, 3, 233, 157, 29, 3, 233, - 160, 29, 3, 233, 164, 29, 3, 233, 161, 29, 3, 233, 162, 29, 3, 233, 158, - 29, 3, 211, 130, 29, 3, 211, 120, 29, 3, 211, 126, 29, 3, 211, 129, 29, - 3, 211, 127, 29, 3, 211, 128, 29, 3, 211, 125, 29, 3, 242, 78, 29, 3, - 242, 69, 29, 3, 242, 72, 29, 3, 242, 77, 29, 3, 242, 74, 29, 3, 242, 75, - 29, 3, 242, 71, 38, 33, 1, 252, 83, 38, 33, 1, 213, 255, 38, 33, 1, 242, - 243, 38, 33, 1, 248, 98, 38, 33, 1, 210, 74, 38, 33, 1, 210, 94, 38, 33, - 1, 176, 38, 33, 1, 245, 182, 38, 33, 1, 245, 167, 38, 33, 1, 245, 158, - 38, 33, 1, 78, 38, 33, 1, 225, 224, 38, 33, 1, 245, 100, 38, 33, 1, 245, - 90, 38, 33, 1, 217, 23, 38, 33, 1, 162, 38, 33, 1, 215, 179, 38, 33, 1, - 250, 139, 38, 33, 1, 220, 104, 38, 33, 1, 220, 67, 38, 33, 1, 244, 90, - 38, 33, 1, 245, 89, 38, 33, 1, 61, 38, 33, 1, 236, 67, 38, 33, 1, 247, - 169, 38, 33, 1, 230, 145, 214, 205, 38, 33, 1, 211, 59, 38, 33, 1, 210, - 212, 38, 33, 1, 235, 190, 61, 38, 33, 1, 232, 198, 210, 183, 38, 33, 1, - 252, 1, 210, 183, 38, 33, 1, 235, 190, 252, 1, 210, 183, 44, 254, 118, - 218, 61, 231, 159, 44, 254, 118, 246, 126, 218, 61, 231, 159, 43, 218, - 61, 127, 44, 218, 61, 127, 43, 246, 126, 218, 61, 127, 44, 246, 126, 218, - 61, 127, 223, 160, 235, 209, 231, 159, 223, 160, 246, 126, 235, 209, 231, - 159, 246, 126, 215, 242, 231, 159, 43, 215, 242, 127, 44, 215, 242, 127, - 223, 160, 218, 236, 43, 223, 160, 226, 202, 127, 44, 223, 160, 226, 202, - 127, 245, 218, 249, 166, 226, 17, 244, 30, 226, 17, 223, 52, 244, 30, - 226, 17, 240, 172, 246, 126, 226, 255, 246, 112, 254, 127, 214, 153, 254, - 127, 246, 126, 222, 250, 254, 117, 52, 226, 252, 240, 175, 235, 200, 235, - 208, 226, 63, 251, 162, 240, 176, 2, 248, 9, 216, 90, 2, 222, 237, 48, - 43, 121, 226, 9, 127, 44, 121, 226, 9, 127, 216, 90, 2, 59, 48, 216, 90, - 2, 59, 51, 43, 67, 252, 149, 2, 224, 10, 44, 67, 252, 149, 2, 224, 10, - 216, 15, 43, 163, 127, 216, 15, 44, 163, 127, 251, 183, 43, 163, 127, - 251, 183, 44, 163, 127, 43, 219, 189, 104, 127, 44, 219, 189, 104, 127, - 43, 52, 226, 7, 44, 52, 226, 7, 113, 170, 115, 123, 59, 224, 143, 123, - 59, 115, 113, 170, 224, 143, 92, 244, 19, 59, 224, 143, 244, 89, 59, 79, - 223, 52, 224, 16, 79, 67, 184, 222, 237, 225, 13, 211, 209, 220, 140, - 230, 229, 247, 128, 215, 94, 249, 227, 223, 160, 247, 128, 223, 160, 249, - 227, 215, 94, 220, 152, 248, 214, 2, 43, 242, 115, 248, 214, 2, 44, 242, - 115, 215, 94, 248, 213, 216, 15, 163, 221, 175, 50, 215, 59, 248, 164, - 216, 144, 248, 164, 10, 34, 223, 79, 10, 34, 250, 18, 10, 34, 221, 178, - 111, 10, 34, 221, 178, 105, 10, 34, 221, 178, 158, 10, 34, 225, 170, 10, - 34, 251, 171, 10, 34, 217, 93, 10, 34, 234, 39, 111, 10, 34, 234, 39, - 105, 10, 34, 247, 178, 10, 34, 221, 181, 10, 34, 4, 111, 10, 34, 4, 105, - 10, 34, 233, 103, 111, 10, 34, 233, 103, 105, 10, 34, 233, 103, 158, 10, - 34, 233, 103, 161, 10, 34, 219, 70, 10, 34, 216, 146, 10, 34, 219, 68, - 111, 10, 34, 219, 68, 105, 10, 34, 241, 235, 111, 10, 34, 241, 235, 105, - 10, 34, 242, 22, 10, 34, 223, 150, 10, 34, 250, 90, 10, 34, 218, 38, 10, - 34, 230, 133, 10, 34, 248, 96, 10, 34, 230, 125, 10, 34, 250, 33, 10, 34, - 212, 41, 111, 10, 34, 212, 41, 105, 10, 34, 244, 104, 10, 34, 225, 236, - 111, 10, 34, 225, 236, 105, 10, 34, 219, 162, 163, 215, 237, 215, 189, - 10, 34, 249, 153, 10, 34, 247, 144, 10, 34, 235, 143, 10, 34, 251, 206, - 64, 250, 2, 10, 34, 245, 23, 10, 34, 218, 251, 111, 10, 34, 218, 251, - 105, 10, 34, 252, 162, 10, 34, 219, 169, 10, 34, 251, 71, 219, 169, 10, - 34, 229, 95, 111, 10, 34, 229, 95, 105, 10, 34, 229, 95, 158, 10, 34, - 229, 95, 161, 10, 34, 231, 51, 10, 34, 220, 59, 10, 34, 223, 156, 10, 34, - 245, 45, 10, 34, 226, 213, 10, 34, 251, 141, 111, 10, 34, 251, 141, 105, - 10, 34, 231, 91, 10, 34, 230, 128, 10, 34, 242, 147, 111, 10, 34, 242, - 147, 105, 10, 34, 242, 147, 158, 10, 34, 216, 107, 10, 34, 250, 1, 10, - 34, 212, 9, 111, 10, 34, 212, 9, 105, 10, 34, 251, 71, 221, 172, 10, 34, - 219, 162, 240, 255, 10, 34, 240, 255, 10, 34, 251, 71, 219, 4, 10, 34, - 251, 71, 220, 54, 10, 34, 244, 40, 10, 34, 251, 71, 250, 236, 10, 34, - 219, 162, 212, 57, 10, 34, 212, 58, 111, 10, 34, 212, 58, 105, 10, 34, - 250, 35, 10, 34, 251, 71, 242, 173, 10, 34, 200, 111, 10, 34, 200, 105, - 10, 34, 251, 71, 232, 143, 10, 34, 251, 71, 243, 95, 10, 34, 230, 124, - 111, 10, 34, 230, 124, 105, 10, 34, 223, 162, 10, 34, 251, 215, 10, 34, - 251, 71, 217, 57, 233, 58, 10, 34, 251, 71, 233, 59, 10, 34, 251, 71, - 211, 239, 10, 34, 251, 71, 244, 54, 10, 34, 245, 226, 111, 10, 34, 245, - 226, 105, 10, 34, 245, 226, 158, 10, 34, 251, 71, 245, 225, 10, 34, 241, - 242, 10, 34, 251, 71, 240, 252, 10, 34, 251, 202, 10, 34, 242, 229, 10, - 34, 251, 71, 244, 98, 10, 34, 251, 71, 251, 245, 10, 34, 251, 71, 222, 3, - 10, 34, 219, 162, 212, 2, 10, 34, 219, 162, 211, 41, 10, 34, 251, 71, - 243, 252, 10, 34, 235, 149, 245, 49, 10, 34, 251, 71, 245, 49, 10, 34, - 235, 149, 216, 16, 10, 34, 251, 71, 216, 16, 10, 34, 235, 149, 246, 104, - 10, 34, 251, 71, 246, 104, 10, 34, 215, 91, 10, 34, 235, 149, 215, 91, - 10, 34, 251, 71, 215, 91, 60, 34, 111, 60, 34, 232, 219, 60, 34, 247, - 128, 60, 34, 219, 97, 60, 34, 221, 177, 60, 34, 103, 60, 34, 105, 60, 34, - 232, 243, 60, 34, 231, 190, 60, 34, 233, 39, 60, 34, 245, 137, 60, 34, - 196, 60, 34, 124, 251, 171, 60, 34, 249, 155, 60, 34, 240, 118, 60, 34, - 217, 93, 60, 34, 204, 251, 171, 60, 34, 234, 38, 60, 34, 224, 227, 60, - 34, 211, 202, 60, 34, 218, 245, 60, 34, 44, 204, 251, 171, 60, 34, 241, - 183, 245, 153, 60, 34, 216, 248, 60, 34, 247, 178, 60, 34, 221, 181, 60, - 34, 250, 18, 60, 34, 224, 185, 60, 34, 254, 224, 60, 34, 230, 115, 60, - 34, 245, 153, 60, 34, 245, 231, 60, 34, 221, 202, 60, 34, 242, 181, 60, - 34, 242, 182, 219, 83, 60, 34, 245, 48, 60, 34, 252, 0, 60, 34, 211, 221, - 60, 34, 250, 109, 60, 34, 222, 198, 60, 34, 236, 2, 60, 34, 219, 81, 60, - 34, 233, 102, 60, 34, 249, 164, 60, 34, 218, 239, 60, 34, 230, 120, 60, - 34, 222, 227, 60, 34, 211, 206, 60, 34, 226, 194, 60, 34, 215, 98, 60, - 34, 246, 88, 60, 34, 219, 253, 216, 146, 60, 34, 246, 126, 250, 18, 60, - 34, 200, 218, 110, 60, 34, 113, 242, 17, 60, 34, 220, 2, 60, 34, 251, - 177, 60, 34, 219, 67, 60, 34, 251, 145, 60, 34, 218, 140, 60, 34, 241, - 234, 60, 34, 242, 35, 60, 34, 247, 131, 60, 34, 242, 22, 60, 34, 251, - 162, 60, 34, 223, 150, 60, 34, 221, 189, 60, 34, 247, 207, 60, 34, 253, - 176, 60, 34, 218, 236, 60, 34, 228, 56, 60, 34, 218, 38, 60, 34, 221, - 213, 60, 34, 230, 133, 60, 34, 215, 236, 60, 34, 233, 128, 60, 34, 218, - 131, 60, 34, 248, 96, 60, 34, 212, 21, 60, 34, 247, 154, 228, 56, 60, 34, - 249, 223, 60, 34, 243, 229, 60, 34, 250, 29, 60, 34, 218, 144, 60, 34, - 212, 40, 60, 34, 244, 104, 60, 34, 250, 26, 60, 34, 244, 169, 60, 34, 52, - 211, 178, 60, 34, 163, 215, 237, 215, 189, 60, 34, 219, 91, 60, 34, 244, - 179, 60, 34, 249, 153, 60, 34, 247, 144, 60, 34, 224, 182, 60, 34, 235, - 143, 60, 34, 231, 72, 60, 34, 216, 89, 60, 34, 217, 246, 60, 34, 232, - 237, 60, 34, 214, 131, 60, 34, 244, 128, 60, 34, 251, 206, 64, 250, 2, - 60, 34, 219, 190, 60, 34, 246, 126, 216, 243, 60, 34, 211, 253, 60, 34, - 219, 105, 60, 34, 247, 195, 60, 34, 245, 23, 60, 34, 219, 7, 60, 34, 75, - 60, 34, 218, 133, 60, 34, 218, 250, 60, 34, 216, 0, 60, 34, 242, 154, 60, - 34, 250, 226, 60, 34, 218, 162, 60, 34, 252, 162, 60, 34, 223, 34, 60, - 34, 219, 169, 60, 34, 235, 136, 60, 34, 229, 94, 60, 34, 220, 59, 60, 34, - 244, 157, 60, 34, 226, 213, 60, 34, 254, 126, 60, 34, 225, 32, 60, 34, - 245, 235, 60, 34, 251, 140, 60, 34, 231, 91, 60, 34, 230, 188, 60, 34, - 220, 158, 60, 34, 254, 4, 60, 34, 230, 128, 60, 34, 216, 20, 60, 34, 226, - 169, 60, 34, 251, 209, 60, 34, 218, 129, 60, 34, 249, 233, 60, 34, 242, - 146, 60, 34, 216, 107, 60, 34, 235, 224, 60, 34, 251, 219, 60, 34, 212, - 58, 245, 153, 60, 34, 250, 1, 60, 34, 212, 8, 60, 34, 221, 172, 60, 34, - 240, 255, 60, 34, 219, 4, 60, 34, 214, 22, 60, 34, 252, 80, 60, 34, 225, - 76, 60, 34, 252, 182, 60, 34, 220, 54, 60, 34, 223, 113, 60, 34, 222, - 128, 60, 34, 244, 40, 60, 34, 251, 208, 60, 34, 250, 236, 60, 34, 251, - 234, 60, 34, 230, 130, 60, 34, 212, 57, 60, 34, 250, 35, 60, 34, 211, - 236, 60, 34, 247, 188, 60, 34, 213, 161, 60, 34, 242, 173, 60, 34, 232, - 143, 60, 34, 243, 95, 60, 34, 230, 123, 60, 34, 219, 96, 60, 34, 219, - 253, 217, 77, 251, 245, 60, 34, 223, 162, 60, 34, 251, 215, 60, 34, 211, - 197, 60, 34, 244, 198, 60, 34, 233, 58, 60, 34, 217, 57, 233, 58, 60, 34, - 233, 54, 60, 34, 219, 32, 60, 34, 233, 59, 60, 34, 211, 239, 60, 34, 244, - 54, 60, 34, 245, 225, 60, 34, 241, 242, 60, 34, 244, 8, 60, 34, 240, 252, - 60, 34, 251, 202, 60, 34, 217, 64, 60, 34, 242, 41, 60, 34, 244, 121, 60, - 34, 222, 30, 211, 236, 60, 34, 250, 228, 60, 34, 242, 229, 60, 34, 244, - 98, 60, 34, 251, 245, 60, 34, 222, 3, 60, 34, 248, 82, 60, 34, 212, 2, - 60, 34, 241, 217, 60, 34, 211, 41, 60, 34, 230, 197, 60, 34, 251, 229, - 60, 34, 245, 163, 60, 34, 243, 252, 60, 34, 215, 210, 60, 34, 246, 90, - 60, 34, 223, 144, 60, 34, 228, 58, 60, 34, 245, 49, 60, 34, 216, 16, 60, - 34, 246, 104, 60, 34, 215, 91, 60, 34, 244, 56, 110, 248, 45, 135, 43, - 216, 43, 222, 254, 110, 248, 45, 135, 72, 216, 43, 51, 110, 248, 45, 135, - 43, 216, 43, 230, 229, 22, 222, 254, 110, 248, 45, 135, 72, 216, 43, 230, - 229, 22, 51, 110, 248, 45, 135, 243, 236, 218, 11, 110, 248, 45, 135, - 218, 12, 243, 251, 48, 110, 248, 45, 135, 218, 12, 243, 251, 51, 110, - 248, 45, 135, 218, 12, 243, 251, 233, 52, 110, 248, 45, 135, 218, 12, - 243, 251, 214, 160, 233, 52, 110, 248, 45, 135, 218, 12, 243, 251, 214, - 160, 222, 254, 110, 248, 45, 135, 218, 12, 243, 251, 232, 114, 233, 52, - 110, 248, 45, 135, 226, 126, 110, 219, 20, 110, 249, 227, 110, 243, 236, - 218, 131, 247, 185, 79, 235, 137, 235, 243, 218, 161, 87, 110, 235, 164, - 79, 110, 250, 4, 79, 110, 54, 210, 86, 43, 254, 118, 127, 44, 254, 118, - 127, 43, 52, 254, 118, 127, 44, 52, 254, 118, 127, 43, 249, 169, 127, 44, - 249, 169, 127, 43, 71, 249, 169, 127, 44, 71, 249, 169, 127, 43, 85, 233, - 26, 127, 44, 85, 233, 26, 127, 224, 240, 79, 243, 39, 79, 43, 216, 7, - 220, 55, 127, 44, 216, 7, 220, 55, 127, 43, 71, 233, 26, 127, 44, 71, - 233, 26, 127, 43, 71, 216, 7, 220, 55, 127, 44, 71, 216, 7, 220, 55, 127, - 43, 71, 42, 127, 44, 71, 42, 127, 212, 36, 248, 164, 223, 52, 52, 224, - 194, 224, 1, 79, 52, 224, 194, 224, 1, 79, 121, 52, 224, 194, 224, 1, 79, - 224, 240, 164, 244, 198, 242, 15, 227, 202, 111, 242, 15, 227, 202, 105, - 242, 15, 227, 202, 158, 242, 15, 227, 202, 161, 242, 15, 227, 202, 190, - 242, 15, 227, 202, 195, 242, 15, 227, 202, 199, 242, 15, 227, 202, 196, - 242, 15, 227, 202, 201, 110, 233, 9, 138, 79, 110, 222, 231, 138, 79, - 110, 248, 52, 138, 79, 110, 245, 136, 138, 79, 24, 219, 157, 59, 138, 79, - 24, 52, 59, 138, 79, 212, 32, 248, 164, 67, 234, 239, 223, 80, 79, 67, - 234, 239, 223, 80, 2, 213, 135, 219, 33, 79, 67, 234, 239, 223, 80, 164, - 214, 160, 242, 34, 67, 234, 239, 223, 80, 2, 213, 135, 219, 33, 164, 214, - 160, 242, 34, 67, 234, 239, 223, 80, 164, 232, 114, 242, 34, 37, 224, - 240, 79, 110, 217, 4, 232, 220, 244, 154, 220, 140, 87, 242, 15, 227, - 202, 216, 248, 242, 15, 227, 202, 215, 73, 242, 15, 227, 202, 216, 163, - 67, 110, 235, 164, 79, 231, 145, 79, 226, 3, 254, 148, 79, 110, 45, 235, - 245, 110, 163, 244, 114, 219, 20, 141, 1, 4, 61, 141, 1, 61, 141, 1, 4, - 74, 141, 1, 74, 141, 1, 4, 69, 141, 1, 69, 141, 1, 4, 76, 141, 1, 76, - 141, 1, 4, 78, 141, 1, 78, 141, 1, 176, 141, 1, 243, 142, 141, 1, 234, - 98, 141, 1, 242, 221, 141, 1, 233, 223, 141, 1, 242, 120, 141, 1, 234, - 188, 141, 1, 243, 69, 141, 1, 234, 34, 141, 1, 242, 181, 141, 1, 206, - 141, 1, 210, 116, 141, 1, 219, 193, 141, 1, 210, 44, 141, 1, 218, 84, - 141, 1, 210, 13, 141, 1, 221, 183, 141, 1, 210, 94, 141, 1, 219, 60, 141, - 1, 210, 23, 141, 1, 217, 106, 141, 1, 248, 229, 141, 1, 216, 118, 141, 1, - 248, 11, 141, 1, 4, 215, 119, 141, 1, 215, 119, 141, 1, 246, 86, 141, 1, - 217, 23, 141, 1, 248, 98, 141, 1, 112, 141, 1, 247, 153, 141, 1, 198, - 141, 1, 228, 238, 141, 1, 227, 242, 141, 1, 229, 112, 141, 1, 228, 79, - 141, 1, 162, 141, 1, 252, 199, 141, 1, 191, 141, 1, 241, 187, 141, 1, - 252, 14, 141, 1, 225, 111, 141, 1, 240, 229, 141, 1, 251, 133, 141, 1, - 224, 153, 141, 1, 241, 245, 141, 1, 252, 83, 141, 1, 225, 224, 141, 1, - 241, 75, 141, 1, 251, 213, 141, 1, 225, 19, 141, 1, 186, 141, 1, 230, - 235, 141, 1, 230, 107, 141, 1, 231, 96, 141, 1, 230, 166, 141, 1, 4, 192, - 141, 1, 192, 141, 1, 4, 210, 212, 141, 1, 210, 212, 141, 1, 4, 210, 244, - 141, 1, 210, 244, 141, 1, 205, 141, 1, 223, 38, 141, 1, 222, 142, 141, 1, - 223, 131, 141, 1, 222, 213, 141, 1, 4, 212, 65, 141, 1, 212, 65, 141, 1, - 211, 250, 141, 1, 212, 22, 141, 1, 211, 227, 141, 1, 230, 30, 141, 1, - 212, 116, 141, 1, 4, 176, 141, 1, 4, 234, 188, 38, 234, 207, 213, 135, - 219, 33, 79, 38, 234, 207, 220, 157, 219, 33, 79, 234, 207, 213, 135, - 219, 33, 79, 234, 207, 220, 157, 219, 33, 79, 141, 235, 164, 79, 141, - 213, 135, 235, 164, 79, 141, 247, 229, 210, 225, 234, 207, 52, 240, 175, - 56, 1, 4, 61, 56, 1, 61, 56, 1, 4, 74, 56, 1, 74, 56, 1, 4, 69, 56, 1, - 69, 56, 1, 4, 76, 56, 1, 76, 56, 1, 4, 78, 56, 1, 78, 56, 1, 176, 56, 1, - 243, 142, 56, 1, 234, 98, 56, 1, 242, 221, 56, 1, 233, 223, 56, 1, 242, - 120, 56, 1, 234, 188, 56, 1, 243, 69, 56, 1, 234, 34, 56, 1, 242, 181, - 56, 1, 206, 56, 1, 210, 116, 56, 1, 219, 193, 56, 1, 210, 44, 56, 1, 218, - 84, 56, 1, 210, 13, 56, 1, 221, 183, 56, 1, 210, 94, 56, 1, 219, 60, 56, - 1, 210, 23, 56, 1, 217, 106, 56, 1, 248, 229, 56, 1, 216, 118, 56, 1, - 248, 11, 56, 1, 4, 215, 119, 56, 1, 215, 119, 56, 1, 246, 86, 56, 1, 217, - 23, 56, 1, 248, 98, 56, 1, 112, 56, 1, 247, 153, 56, 1, 198, 56, 1, 228, - 238, 56, 1, 227, 242, 56, 1, 229, 112, 56, 1, 228, 79, 56, 1, 162, 56, 1, - 252, 199, 56, 1, 191, 56, 1, 241, 187, 56, 1, 252, 14, 56, 1, 225, 111, - 56, 1, 240, 229, 56, 1, 251, 133, 56, 1, 224, 153, 56, 1, 241, 245, 56, - 1, 252, 83, 56, 1, 225, 224, 56, 1, 241, 75, 56, 1, 251, 213, 56, 1, 225, - 19, 56, 1, 186, 56, 1, 230, 235, 56, 1, 230, 107, 56, 1, 231, 96, 56, 1, - 230, 166, 56, 1, 4, 192, 56, 1, 192, 56, 1, 4, 210, 212, 56, 1, 210, 212, - 56, 1, 4, 210, 244, 56, 1, 210, 244, 56, 1, 205, 56, 1, 223, 38, 56, 1, - 222, 142, 56, 1, 223, 131, 56, 1, 222, 213, 56, 1, 4, 212, 65, 56, 1, - 212, 65, 56, 1, 211, 250, 56, 1, 212, 22, 56, 1, 211, 227, 56, 1, 230, - 30, 56, 1, 212, 116, 56, 1, 4, 176, 56, 1, 4, 234, 188, 56, 1, 214, 27, - 56, 1, 213, 176, 56, 1, 213, 255, 56, 1, 213, 138, 56, 230, 229, 247, - 128, 234, 207, 224, 176, 219, 33, 79, 56, 235, 164, 79, 56, 213, 135, - 235, 164, 79, 56, 247, 229, 234, 5, 251, 192, 1, 253, 166, 251, 192, 1, - 226, 109, 251, 192, 1, 194, 251, 192, 1, 245, 14, 251, 192, 1, 249, 68, - 251, 192, 1, 217, 153, 251, 192, 1, 230, 30, 251, 192, 1, 156, 251, 192, - 1, 243, 209, 251, 192, 1, 235, 29, 251, 192, 1, 242, 67, 251, 192, 1, - 235, 150, 251, 192, 1, 224, 99, 251, 192, 1, 211, 178, 251, 192, 1, 210, - 83, 251, 192, 1, 250, 166, 251, 192, 1, 220, 106, 251, 192, 1, 153, 251, - 192, 1, 210, 159, 251, 192, 1, 251, 74, 251, 192, 1, 222, 93, 251, 192, - 1, 61, 251, 192, 1, 78, 251, 192, 1, 76, 251, 192, 1, 245, 205, 251, 192, - 1, 254, 210, 251, 192, 1, 245, 203, 251, 192, 1, 253, 200, 251, 192, 1, - 226, 138, 251, 192, 1, 254, 131, 251, 192, 1, 245, 158, 251, 192, 1, 254, - 123, 251, 192, 1, 245, 146, 251, 192, 1, 245, 100, 251, 192, 1, 74, 251, - 192, 1, 69, 251, 192, 1, 235, 162, 251, 192, 1, 214, 105, 251, 192, 1, - 229, 84, 251, 192, 1, 242, 185, 251, 192, 1, 236, 41, 24, 1, 234, 64, 24, - 1, 218, 217, 24, 1, 234, 57, 24, 1, 228, 231, 24, 1, 228, 229, 24, 1, - 228, 228, 24, 1, 216, 102, 24, 1, 218, 206, 24, 1, 223, 29, 24, 1, 223, - 24, 24, 1, 223, 21, 24, 1, 223, 14, 24, 1, 223, 9, 24, 1, 223, 4, 24, 1, - 223, 15, 24, 1, 223, 27, 24, 1, 230, 222, 24, 1, 225, 98, 24, 1, 218, - 214, 24, 1, 225, 87, 24, 1, 219, 150, 24, 1, 218, 211, 24, 1, 236, 63, - 24, 1, 250, 54, 24, 1, 218, 221, 24, 1, 250, 114, 24, 1, 234, 116, 24, 1, - 216, 174, 24, 1, 225, 134, 24, 1, 241, 179, 24, 1, 61, 24, 1, 254, 252, - 24, 1, 192, 24, 1, 211, 92, 24, 1, 245, 125, 24, 1, 76, 24, 1, 211, 36, - 24, 1, 211, 47, 24, 1, 78, 24, 1, 212, 65, 24, 1, 212, 62, 24, 1, 226, - 238, 24, 1, 210, 244, 24, 1, 69, 24, 1, 212, 11, 24, 1, 212, 22, 24, 1, - 211, 250, 24, 1, 210, 212, 24, 1, 245, 63, 24, 1, 211, 8, 24, 1, 74, 24, - 244, 111, 24, 1, 218, 215, 24, 1, 228, 221, 24, 1, 228, 223, 24, 1, 228, - 226, 24, 1, 223, 22, 24, 1, 223, 3, 24, 1, 223, 11, 24, 1, 223, 16, 24, - 1, 223, 1, 24, 1, 230, 215, 24, 1, 230, 212, 24, 1, 230, 216, 24, 1, 234, - 227, 24, 1, 225, 93, 24, 1, 225, 79, 24, 1, 225, 85, 24, 1, 225, 82, 24, - 1, 225, 96, 24, 1, 225, 80, 24, 1, 234, 225, 24, 1, 234, 223, 24, 1, 219, - 143, 24, 1, 219, 141, 24, 1, 219, 133, 24, 1, 219, 138, 24, 1, 219, 148, - 24, 1, 226, 36, 24, 1, 218, 218, 24, 1, 211, 26, 24, 1, 211, 22, 24, 1, - 211, 23, 24, 1, 234, 226, 24, 1, 218, 219, 24, 1, 211, 32, 24, 1, 210, - 238, 24, 1, 210, 237, 24, 1, 210, 240, 24, 1, 210, 203, 24, 1, 210, 204, - 24, 1, 210, 207, 24, 1, 254, 42, 24, 1, 254, 36, 110, 254, 107, 232, 209, - 79, 110, 254, 107, 223, 53, 79, 110, 254, 107, 123, 79, 110, 254, 107, - 113, 79, 110, 254, 107, 134, 79, 110, 254, 107, 244, 19, 79, 110, 254, - 107, 216, 15, 79, 110, 254, 107, 230, 229, 79, 110, 254, 107, 251, 183, - 79, 110, 254, 107, 244, 100, 79, 110, 254, 107, 221, 178, 79, 110, 254, - 107, 216, 170, 79, 110, 254, 107, 244, 12, 79, 110, 254, 107, 241, 231, - 79, 110, 254, 107, 245, 232, 79, 110, 254, 107, 231, 191, 79, 251, 192, - 1, 251, 133, 251, 192, 1, 210, 44, 251, 192, 1, 235, 114, 251, 192, 1, - 242, 120, 251, 192, 1, 245, 217, 251, 192, 1, 245, 143, 251, 192, 1, 226, - 187, 251, 192, 1, 226, 191, 251, 192, 1, 235, 186, 251, 192, 1, 254, 109, - 251, 192, 1, 235, 231, 251, 192, 1, 214, 168, 251, 192, 1, 236, 23, 251, - 192, 1, 229, 62, 251, 192, 1, 254, 204, 251, 192, 1, 253, 195, 251, 192, - 1, 254, 144, 251, 192, 1, 226, 208, 251, 192, 1, 226, 193, 251, 192, 1, - 235, 228, 251, 192, 40, 1, 226, 109, 251, 192, 40, 1, 217, 153, 251, 192, - 40, 1, 235, 29, 251, 192, 40, 1, 242, 67, 251, 192, 1, 243, 1, 251, 192, - 1, 233, 5, 251, 192, 1, 209, 250, 10, 218, 105, 217, 153, 10, 218, 105, - 212, 4, 10, 218, 105, 211, 158, 10, 218, 105, 251, 87, 10, 218, 105, 217, - 255, 10, 218, 105, 240, 165, 10, 218, 105, 240, 169, 10, 218, 105, 240, - 238, 10, 218, 105, 240, 166, 10, 218, 105, 217, 156, 10, 218, 105, 240, - 168, 10, 218, 105, 240, 164, 10, 218, 105, 240, 236, 10, 218, 105, 240, - 167, 10, 218, 105, 240, 163, 10, 218, 105, 230, 30, 10, 218, 105, 242, - 67, 10, 218, 105, 222, 93, 10, 218, 105, 226, 109, 10, 218, 105, 219, 23, - 10, 218, 105, 249, 68, 10, 218, 105, 240, 170, 10, 218, 105, 241, 197, - 10, 218, 105, 217, 165, 10, 218, 105, 217, 234, 10, 218, 105, 218, 170, - 10, 218, 105, 220, 112, 10, 218, 105, 225, 228, 10, 218, 105, 224, 101, - 10, 218, 105, 216, 44, 10, 218, 105, 217, 155, 10, 218, 105, 217, 245, - 10, 218, 105, 240, 177, 10, 218, 105, 240, 162, 10, 218, 105, 225, 152, - 10, 218, 105, 224, 99, 56, 1, 4, 233, 223, 56, 1, 4, 219, 193, 56, 1, 4, - 218, 84, 56, 1, 4, 112, 56, 1, 4, 227, 242, 56, 1, 4, 162, 56, 1, 4, 241, - 187, 56, 1, 4, 240, 229, 56, 1, 4, 241, 245, 56, 1, 4, 241, 75, 56, 1, 4, - 230, 107, 56, 1, 4, 205, 56, 1, 4, 223, 38, 56, 1, 4, 222, 142, 56, 1, 4, - 223, 131, 56, 1, 4, 222, 213, 88, 24, 234, 64, 88, 24, 228, 231, 88, 24, - 216, 102, 88, 24, 223, 29, 88, 24, 230, 222, 88, 24, 225, 98, 88, 24, - 219, 150, 88, 24, 236, 63, 88, 24, 250, 54, 88, 24, 250, 114, 88, 24, - 234, 116, 88, 24, 216, 174, 88, 24, 225, 134, 88, 24, 241, 179, 88, 24, - 234, 65, 61, 88, 24, 228, 232, 61, 88, 24, 216, 103, 61, 88, 24, 223, 30, - 61, 88, 24, 230, 223, 61, 88, 24, 225, 99, 61, 88, 24, 219, 151, 61, 88, - 24, 236, 64, 61, 88, 24, 250, 55, 61, 88, 24, 250, 115, 61, 88, 24, 234, - 117, 61, 88, 24, 216, 175, 61, 88, 24, 225, 135, 61, 88, 24, 241, 180, - 61, 88, 24, 250, 55, 69, 88, 234, 9, 135, 226, 221, 88, 234, 9, 135, 144, - 240, 229, 88, 154, 111, 88, 154, 105, 88, 154, 158, 88, 154, 161, 88, - 154, 190, 88, 154, 195, 88, 154, 199, 88, 154, 196, 88, 154, 201, 88, - 154, 216, 248, 88, 154, 230, 133, 88, 154, 244, 104, 88, 154, 212, 40, - 88, 154, 211, 214, 88, 154, 231, 44, 88, 154, 245, 231, 88, 154, 218, 38, - 88, 154, 218, 134, 88, 154, 241, 251, 88, 154, 219, 56, 88, 154, 229, - 209, 88, 154, 219, 6, 88, 154, 244, 110, 88, 154, 249, 208, 88, 154, 233, - 131, 88, 154, 223, 74, 88, 154, 251, 23, 88, 154, 218, 88, 88, 154, 218, - 21, 88, 154, 245, 135, 88, 154, 223, 66, 88, 154, 254, 159, 88, 154, 244, - 136, 88, 154, 223, 64, 88, 154, 220, 158, 88, 154, 223, 130, 37, 154, - 224, 15, 37, 154, 234, 86, 37, 154, 221, 200, 37, 154, 234, 5, 37, 54, - 216, 249, 226, 201, 85, 218, 236, 37, 54, 215, 74, 226, 201, 85, 218, - 236, 37, 54, 216, 164, 226, 201, 85, 218, 236, 37, 54, 244, 24, 226, 201, - 85, 218, 236, 37, 54, 244, 123, 226, 201, 85, 218, 236, 37, 54, 219, 114, - 226, 201, 85, 218, 236, 37, 54, 220, 119, 226, 201, 85, 218, 236, 37, 54, - 245, 193, 226, 201, 85, 218, 236, 225, 255, 50, 37, 54, 215, 74, 111, 37, - 54, 215, 74, 105, 37, 54, 215, 74, 158, 37, 54, 215, 74, 161, 37, 54, - 215, 74, 190, 37, 54, 215, 74, 195, 37, 54, 215, 74, 199, 37, 54, 215, - 74, 196, 37, 54, 215, 74, 201, 37, 54, 216, 163, 37, 54, 216, 164, 111, - 37, 54, 216, 164, 105, 37, 54, 216, 164, 158, 37, 54, 216, 164, 161, 37, - 54, 216, 164, 190, 37, 24, 234, 64, 37, 24, 228, 231, 37, 24, 216, 102, - 37, 24, 223, 29, 37, 24, 230, 222, 37, 24, 225, 98, 37, 24, 219, 150, 37, - 24, 236, 63, 37, 24, 250, 54, 37, 24, 250, 114, 37, 24, 234, 116, 37, 24, - 216, 174, 37, 24, 225, 134, 37, 24, 241, 179, 37, 24, 234, 65, 61, 37, - 24, 228, 232, 61, 37, 24, 216, 103, 61, 37, 24, 223, 30, 61, 37, 24, 230, - 223, 61, 37, 24, 225, 99, 61, 37, 24, 219, 151, 61, 37, 24, 236, 64, 61, - 37, 24, 250, 55, 61, 37, 24, 250, 115, 61, 37, 24, 234, 117, 61, 37, 24, - 216, 175, 61, 37, 24, 225, 135, 61, 37, 24, 241, 180, 61, 37, 234, 9, - 135, 250, 156, 37, 234, 9, 135, 235, 53, 37, 24, 236, 64, 69, 234, 9, - 218, 161, 87, 37, 154, 111, 37, 154, 105, 37, 154, 158, 37, 154, 161, 37, - 154, 190, 37, 154, 195, 37, 154, 199, 37, 154, 196, 37, 154, 201, 37, - 154, 216, 248, 37, 154, 230, 133, 37, 154, 244, 104, 37, 154, 212, 40, - 37, 154, 211, 214, 37, 154, 231, 44, 37, 154, 245, 231, 37, 154, 218, 38, - 37, 154, 218, 134, 37, 154, 241, 251, 37, 154, 219, 56, 37, 154, 229, - 209, 37, 154, 219, 6, 37, 154, 244, 110, 37, 154, 249, 208, 37, 154, 233, - 131, 37, 154, 221, 176, 37, 154, 231, 194, 37, 154, 244, 145, 37, 154, - 218, 50, 37, 154, 245, 42, 37, 154, 224, 190, 37, 154, 253, 204, 37, 154, - 235, 165, 37, 154, 223, 64, 37, 154, 249, 172, 37, 154, 249, 163, 37, - 154, 241, 172, 37, 154, 250, 182, 37, 154, 232, 116, 37, 154, 233, 52, - 37, 154, 222, 254, 37, 154, 231, 88, 37, 154, 223, 90, 37, 154, 218, 88, - 37, 154, 218, 21, 37, 154, 245, 135, 37, 154, 223, 66, 37, 154, 254, 159, - 37, 154, 228, 217, 37, 54, 216, 164, 195, 37, 54, 216, 164, 199, 37, 54, - 216, 164, 196, 37, 54, 216, 164, 201, 37, 54, 244, 23, 37, 54, 244, 24, - 111, 37, 54, 244, 24, 105, 37, 54, 244, 24, 158, 37, 54, 244, 24, 161, - 37, 54, 244, 24, 190, 37, 54, 244, 24, 195, 37, 54, 244, 24, 199, 37, 54, - 244, 24, 196, 37, 54, 244, 24, 201, 37, 54, 244, 122, 110, 217, 4, 16, - 31, 235, 139, 110, 217, 4, 16, 31, 244, 156, 110, 217, 4, 16, 31, 231, - 165, 110, 217, 4, 16, 31, 254, 55, 110, 217, 4, 16, 31, 231, 137, 110, - 217, 4, 16, 31, 235, 51, 110, 217, 4, 16, 31, 235, 52, 110, 217, 4, 16, - 31, 253, 196, 110, 217, 4, 16, 31, 220, 138, 110, 217, 4, 16, 31, 226, - 243, 110, 217, 4, 16, 31, 228, 45, 110, 217, 4, 16, 31, 248, 93, 42, 241, - 197, 42, 245, 96, 42, 245, 51, 232, 225, 232, 246, 50, 37, 56, 61, 37, - 56, 74, 37, 56, 69, 37, 56, 76, 37, 56, 78, 37, 56, 176, 37, 56, 234, 98, - 37, 56, 233, 223, 37, 56, 234, 188, 37, 56, 234, 34, 37, 56, 206, 37, 56, - 219, 193, 37, 56, 218, 84, 37, 56, 221, 183, 37, 56, 219, 60, 37, 56, - 217, 106, 37, 56, 216, 118, 37, 56, 215, 119, 37, 56, 217, 23, 37, 56, - 112, 37, 56, 198, 37, 56, 228, 238, 37, 56, 227, 242, 37, 56, 229, 112, - 37, 56, 228, 79, 37, 56, 162, 37, 56, 241, 187, 37, 56, 240, 229, 37, 56, - 241, 245, 37, 56, 241, 75, 37, 56, 186, 37, 56, 230, 235, 37, 56, 230, - 107, 37, 56, 231, 96, 37, 56, 230, 166, 37, 56, 192, 37, 56, 210, 212, - 37, 56, 210, 244, 37, 56, 205, 37, 56, 223, 38, 37, 56, 222, 142, 37, 56, - 223, 131, 37, 56, 222, 213, 37, 56, 212, 65, 37, 56, 211, 250, 37, 56, - 212, 22, 37, 56, 211, 227, 42, 254, 79, 42, 253, 247, 42, 254, 103, 42, - 255, 40, 42, 235, 233, 42, 235, 203, 42, 214, 166, 42, 245, 74, 42, 245, - 214, 42, 226, 190, 42, 226, 184, 42, 234, 251, 42, 234, 220, 42, 234, - 217, 42, 243, 99, 42, 243, 108, 42, 242, 211, 42, 242, 207, 42, 233, 156, - 42, 242, 200, 42, 234, 78, 42, 234, 77, 42, 234, 76, 42, 234, 75, 42, - 242, 93, 42, 242, 92, 42, 233, 199, 42, 233, 201, 42, 234, 184, 42, 234, - 7, 42, 234, 14, 42, 222, 18, 42, 221, 239, 42, 219, 131, 42, 220, 143, - 42, 220, 142, 42, 248, 226, 42, 248, 44, 42, 247, 129, 42, 216, 33, 42, - 229, 205, 42, 228, 46, 42, 242, 39, 42, 226, 88, 42, 226, 87, 42, 252, - 196, 42, 225, 108, 42, 225, 72, 42, 225, 73, 42, 251, 242, 42, 240, 228, - 42, 240, 224, 42, 251, 99, 42, 240, 211, 42, 241, 222, 42, 225, 162, 42, - 225, 197, 42, 241, 205, 42, 225, 194, 42, 225, 210, 42, 252, 69, 42, 225, - 9, 42, 251, 188, 42, 241, 63, 42, 224, 253, 42, 241, 55, 42, 241, 57, 42, - 231, 206, 42, 231, 202, 42, 231, 211, 42, 231, 155, 42, 231, 180, 42, - 230, 202, 42, 230, 181, 42, 230, 180, 42, 231, 79, 42, 231, 76, 42, 231, - 80, 42, 211, 102, 42, 211, 100, 42, 210, 201, 42, 222, 229, 42, 222, 233, - 42, 222, 119, 42, 222, 113, 42, 223, 88, 42, 223, 85, 42, 212, 38, 110, - 217, 4, 16, 31, 240, 246, 210, 86, 110, 217, 4, 16, 31, 240, 246, 111, - 110, 217, 4, 16, 31, 240, 246, 105, 110, 217, 4, 16, 31, 240, 246, 158, - 110, 217, 4, 16, 31, 240, 246, 161, 110, 217, 4, 16, 31, 240, 246, 190, - 110, 217, 4, 16, 31, 240, 246, 195, 110, 217, 4, 16, 31, 240, 246, 199, - 110, 217, 4, 16, 31, 240, 246, 196, 110, 217, 4, 16, 31, 240, 246, 201, - 110, 217, 4, 16, 31, 240, 246, 216, 248, 110, 217, 4, 16, 31, 240, 246, - 245, 175, 110, 217, 4, 16, 31, 240, 246, 215, 76, 110, 217, 4, 16, 31, - 240, 246, 216, 165, 110, 217, 4, 16, 31, 240, 246, 244, 13, 110, 217, 4, - 16, 31, 240, 246, 244, 126, 110, 217, 4, 16, 31, 240, 246, 219, 121, 110, - 217, 4, 16, 31, 240, 246, 220, 121, 110, 217, 4, 16, 31, 240, 246, 245, - 198, 110, 217, 4, 16, 31, 240, 246, 228, 202, 110, 217, 4, 16, 31, 240, - 246, 215, 73, 110, 217, 4, 16, 31, 240, 246, 215, 67, 110, 217, 4, 16, - 31, 240, 246, 215, 63, 110, 217, 4, 16, 31, 240, 246, 215, 64, 110, 217, - 4, 16, 31, 240, 246, 215, 69, 42, 240, 237, 42, 248, 229, 42, 253, 200, - 42, 130, 42, 226, 129, 42, 225, 229, 42, 247, 155, 42, 247, 156, 218, - 235, 42, 247, 156, 249, 116, 42, 235, 162, 42, 245, 99, 229, 210, 241, - 223, 42, 245, 99, 229, 210, 217, 175, 42, 245, 99, 229, 210, 217, 75, 42, - 245, 99, 229, 210, 231, 75, 42, 249, 165, 42, 226, 94, 254, 133, 42, 198, - 42, 230, 108, 61, 42, 186, 42, 176, 42, 234, 191, 42, 231, 134, 42, 243, - 87, 42, 251, 26, 42, 234, 190, 42, 225, 153, 42, 229, 86, 42, 230, 108, - 245, 14, 42, 230, 108, 243, 209, 42, 231, 20, 42, 234, 140, 42, 240, 170, - 42, 234, 100, 42, 230, 237, 42, 242, 223, 42, 216, 120, 42, 230, 108, - 156, 42, 230, 174, 42, 247, 165, 42, 234, 46, 42, 244, 53, 42, 228, 117, - 42, 230, 108, 194, 42, 230, 171, 42, 249, 247, 42, 234, 40, 42, 230, 172, - 218, 235, 42, 249, 248, 218, 235, 42, 232, 55, 218, 235, 42, 234, 41, - 218, 235, 42, 230, 172, 249, 116, 42, 249, 248, 249, 116, 42, 232, 55, - 249, 116, 42, 234, 41, 249, 116, 42, 232, 55, 115, 222, 93, 42, 232, 55, - 115, 222, 94, 218, 235, 42, 191, 42, 234, 1, 42, 230, 110, 42, 242, 158, - 42, 223, 179, 42, 223, 180, 115, 222, 93, 42, 223, 180, 115, 222, 94, - 218, 235, 42, 224, 165, 42, 228, 18, 42, 230, 108, 222, 93, 42, 230, 109, - 42, 224, 119, 42, 227, 180, 42, 230, 108, 214, 105, 42, 230, 54, 42, 233, - 191, 42, 230, 55, 231, 79, 42, 224, 118, 42, 227, 179, 42, 230, 108, 212, - 98, 42, 230, 48, 42, 233, 189, 42, 230, 49, 231, 79, 42, 235, 30, 226, - 224, 42, 232, 55, 226, 224, 42, 254, 144, 42, 251, 168, 42, 250, 222, 42, - 250, 199, 42, 251, 75, 115, 234, 140, 42, 249, 246, 42, 248, 150, 42, - 242, 79, 42, 162, 42, 240, 238, 42, 236, 6, 42, 234, 53, 42, 234, 41, - 251, 2, 42, 233, 225, 42, 232, 165, 42, 232, 164, 42, 232, 153, 42, 232, - 68, 42, 231, 135, 219, 81, 42, 230, 201, 42, 230, 157, 42, 225, 151, 42, - 225, 22, 42, 224, 222, 42, 224, 220, 42, 218, 229, 42, 218, 3, 42, 212, - 24, 42, 214, 106, 115, 194, 42, 116, 115, 194, 110, 217, 4, 16, 31, 248, - 154, 111, 110, 217, 4, 16, 31, 248, 154, 105, 110, 217, 4, 16, 31, 248, - 154, 158, 110, 217, 4, 16, 31, 248, 154, 161, 110, 217, 4, 16, 31, 248, - 154, 190, 110, 217, 4, 16, 31, 248, 154, 195, 110, 217, 4, 16, 31, 248, - 154, 199, 110, 217, 4, 16, 31, 248, 154, 196, 110, 217, 4, 16, 31, 248, - 154, 201, 110, 217, 4, 16, 31, 248, 154, 216, 248, 110, 217, 4, 16, 31, - 248, 154, 245, 175, 110, 217, 4, 16, 31, 248, 154, 215, 76, 110, 217, 4, - 16, 31, 248, 154, 216, 165, 110, 217, 4, 16, 31, 248, 154, 244, 13, 110, - 217, 4, 16, 31, 248, 154, 244, 126, 110, 217, 4, 16, 31, 248, 154, 219, - 121, 110, 217, 4, 16, 31, 248, 154, 220, 121, 110, 217, 4, 16, 31, 248, - 154, 245, 198, 110, 217, 4, 16, 31, 248, 154, 228, 202, 110, 217, 4, 16, - 31, 248, 154, 215, 73, 110, 217, 4, 16, 31, 248, 154, 215, 67, 110, 217, - 4, 16, 31, 248, 154, 215, 63, 110, 217, 4, 16, 31, 248, 154, 215, 64, - 110, 217, 4, 16, 31, 248, 154, 215, 69, 110, 217, 4, 16, 31, 248, 154, - 215, 70, 110, 217, 4, 16, 31, 248, 154, 215, 65, 110, 217, 4, 16, 31, - 248, 154, 215, 66, 110, 217, 4, 16, 31, 248, 154, 215, 72, 110, 217, 4, - 16, 31, 248, 154, 215, 68, 110, 217, 4, 16, 31, 248, 154, 216, 163, 110, - 217, 4, 16, 31, 248, 154, 216, 162, 42, 243, 125, 241, 199, 31, 216, 197, - 249, 148, 241, 230, 241, 199, 31, 216, 197, 223, 125, 245, 231, 241, 199, - 31, 247, 239, 253, 215, 216, 197, 252, 64, 241, 199, 31, 210, 223, 244, - 46, 241, 199, 31, 212, 59, 241, 199, 31, 249, 211, 241, 199, 31, 216, - 197, 254, 11, 241, 199, 31, 241, 67, 216, 39, 241, 199, 31, 4, 217, 62, - 241, 199, 31, 215, 238, 241, 199, 31, 225, 222, 241, 199, 31, 218, 160, - 241, 199, 31, 244, 147, 241, 199, 31, 242, 139, 224, 243, 241, 199, 31, - 230, 160, 241, 199, 31, 245, 134, 241, 199, 31, 244, 47, 241, 199, 31, - 211, 207, 226, 201, 216, 197, 248, 94, 241, 199, 31, 254, 59, 241, 199, - 31, 249, 193, 241, 199, 31, 251, 235, 216, 139, 241, 199, 31, 242, 156, - 241, 199, 31, 218, 247, 254, 78, 241, 199, 31, 223, 56, 241, 199, 31, - 235, 227, 241, 199, 31, 242, 139, 217, 62, 241, 199, 31, 230, 116, 249, - 167, 241, 199, 31, 242, 139, 224, 200, 241, 199, 31, 216, 197, 255, 27, - 212, 40, 241, 199, 31, 216, 197, 250, 16, 244, 104, 241, 199, 31, 235, - 240, 241, 199, 31, 246, 65, 241, 199, 31, 223, 59, 241, 199, 31, 242, - 139, 224, 227, 241, 199, 31, 224, 180, 241, 199, 31, 248, 169, 64, 216, - 197, 232, 236, 241, 199, 31, 216, 197, 244, 182, 241, 199, 31, 226, 167, - 241, 199, 31, 226, 248, 241, 199, 31, 248, 67, 241, 199, 31, 248, 87, - 241, 199, 31, 235, 254, 241, 199, 31, 251, 157, 241, 199, 31, 249, 229, - 216, 43, 231, 81, 241, 199, 31, 243, 94, 216, 39, 241, 199, 31, 224, 128, - 214, 154, 241, 199, 31, 226, 166, 241, 199, 31, 216, 197, 212, 13, 241, - 199, 31, 223, 48, 241, 199, 31, 216, 197, 250, 228, 241, 199, 31, 216, - 197, 254, 7, 216, 134, 241, 199, 31, 216, 197, 234, 185, 218, 136, 230, - 120, 241, 199, 31, 248, 40, 241, 199, 31, 216, 197, 231, 157, 231, 207, - 241, 199, 31, 255, 28, 241, 199, 31, 216, 197, 212, 54, 241, 199, 31, - 216, 197, 243, 54, 211, 239, 241, 199, 31, 216, 197, 235, 58, 233, 113, - 241, 199, 31, 247, 192, 241, 199, 31, 232, 226, 241, 199, 31, 235, 230, - 215, 188, 241, 199, 31, 4, 224, 200, 241, 199, 31, 254, 226, 249, 220, - 241, 199, 31, 252, 67, 249, 220, 8, 3, 235, 166, 8, 3, 235, 159, 8, 3, - 74, 8, 3, 235, 189, 8, 3, 236, 65, 8, 3, 236, 48, 8, 3, 236, 67, 8, 3, - 236, 66, 8, 3, 253, 214, 8, 3, 253, 177, 8, 3, 61, 8, 3, 254, 80, 8, 3, - 214, 164, 8, 3, 214, 167, 8, 3, 214, 165, 8, 3, 226, 144, 8, 3, 226, 118, - 8, 3, 78, 8, 3, 226, 179, 8, 3, 245, 43, 8, 3, 76, 8, 3, 211, 195, 8, 3, - 251, 236, 8, 3, 251, 233, 8, 3, 252, 14, 8, 3, 251, 246, 8, 3, 252, 3, 8, - 3, 252, 2, 8, 3, 252, 5, 8, 3, 252, 4, 8, 3, 252, 129, 8, 3, 252, 121, 8, - 3, 252, 199, 8, 3, 252, 150, 8, 3, 251, 109, 8, 3, 251, 113, 8, 3, 251, - 110, 8, 3, 251, 187, 8, 3, 251, 171, 8, 3, 251, 213, 8, 3, 251, 193, 8, - 3, 252, 29, 8, 3, 252, 83, 8, 3, 252, 41, 8, 3, 251, 95, 8, 3, 251, 92, - 8, 3, 251, 133, 8, 3, 251, 108, 8, 3, 251, 102, 8, 3, 251, 106, 8, 3, - 251, 80, 8, 3, 251, 78, 8, 3, 251, 85, 8, 3, 251, 83, 8, 3, 251, 81, 8, - 3, 251, 82, 8, 3, 225, 52, 8, 3, 225, 48, 8, 3, 225, 111, 8, 3, 225, 62, - 8, 3, 225, 78, 8, 3, 225, 105, 8, 3, 225, 101, 8, 3, 225, 244, 8, 3, 225, - 234, 8, 3, 191, 8, 3, 226, 25, 8, 3, 224, 138, 8, 3, 224, 140, 8, 3, 224, - 139, 8, 3, 224, 236, 8, 3, 224, 225, 8, 3, 225, 19, 8, 3, 224, 248, 8, 3, - 224, 124, 8, 3, 224, 120, 8, 3, 224, 153, 8, 3, 224, 137, 8, 3, 224, 129, - 8, 3, 224, 135, 8, 3, 224, 103, 8, 3, 224, 102, 8, 3, 224, 107, 8, 3, - 224, 106, 8, 3, 224, 104, 8, 3, 224, 105, 8, 3, 252, 104, 8, 3, 252, 103, - 8, 3, 252, 110, 8, 3, 252, 105, 8, 3, 252, 107, 8, 3, 252, 106, 8, 3, - 252, 109, 8, 3, 252, 108, 8, 3, 252, 116, 8, 3, 252, 115, 8, 3, 252, 119, - 8, 3, 252, 117, 8, 3, 252, 95, 8, 3, 252, 97, 8, 3, 252, 96, 8, 3, 252, - 100, 8, 3, 252, 99, 8, 3, 252, 102, 8, 3, 252, 101, 8, 3, 252, 111, 8, 3, - 252, 114, 8, 3, 252, 112, 8, 3, 252, 91, 8, 3, 252, 90, 8, 3, 252, 98, 8, - 3, 252, 94, 8, 3, 252, 92, 8, 3, 252, 93, 8, 3, 252, 87, 8, 3, 252, 86, - 8, 3, 252, 89, 8, 3, 252, 88, 8, 3, 229, 174, 8, 3, 229, 173, 8, 3, 229, - 179, 8, 3, 229, 175, 8, 3, 229, 176, 8, 3, 229, 178, 8, 3, 229, 177, 8, - 3, 229, 182, 8, 3, 229, 181, 8, 3, 229, 184, 8, 3, 229, 183, 8, 3, 229, - 170, 8, 3, 229, 169, 8, 3, 229, 172, 8, 3, 229, 171, 8, 3, 229, 163, 8, - 3, 229, 162, 8, 3, 229, 167, 8, 3, 229, 166, 8, 3, 229, 164, 8, 3, 229, - 165, 8, 3, 229, 157, 8, 3, 229, 156, 8, 3, 229, 161, 8, 3, 229, 160, 8, - 3, 229, 158, 8, 3, 229, 159, 8, 3, 241, 117, 8, 3, 241, 116, 8, 3, 241, - 122, 8, 3, 241, 118, 8, 3, 241, 119, 8, 3, 241, 121, 8, 3, 241, 120, 8, - 3, 241, 125, 8, 3, 241, 124, 8, 3, 241, 127, 8, 3, 241, 126, 8, 3, 241, - 108, 8, 3, 241, 110, 8, 3, 241, 109, 8, 3, 241, 113, 8, 3, 241, 112, 8, - 3, 241, 115, 8, 3, 241, 114, 8, 3, 241, 104, 8, 3, 241, 103, 8, 3, 241, - 111, 8, 3, 241, 107, 8, 3, 241, 105, 8, 3, 241, 106, 8, 3, 241, 98, 8, 3, - 241, 102, 8, 3, 241, 101, 8, 3, 241, 99, 8, 3, 241, 100, 8, 3, 230, 177, - 8, 3, 230, 176, 8, 3, 230, 235, 8, 3, 230, 183, 8, 3, 230, 208, 8, 3, - 230, 226, 8, 3, 230, 224, 8, 3, 231, 144, 8, 3, 231, 139, 8, 3, 186, 8, - 3, 231, 177, 8, 3, 230, 79, 8, 3, 230, 78, 8, 3, 230, 82, 8, 3, 230, 80, - 8, 3, 230, 126, 8, 3, 230, 112, 8, 3, 230, 166, 8, 3, 230, 131, 8, 3, - 231, 31, 8, 3, 231, 96, 8, 3, 230, 60, 8, 3, 230, 56, 8, 3, 230, 107, 8, - 3, 230, 75, 8, 3, 230, 68, 8, 3, 230, 73, 8, 3, 230, 33, 8, 3, 230, 32, - 8, 3, 230, 38, 8, 3, 230, 35, 8, 3, 244, 91, 8, 3, 244, 86, 8, 3, 244, - 129, 8, 3, 244, 106, 8, 3, 244, 175, 8, 3, 244, 166, 8, 3, 244, 204, 8, - 3, 244, 178, 8, 3, 244, 11, 8, 3, 244, 51, 8, 3, 244, 35, 8, 3, 243, 225, - 8, 3, 243, 224, 8, 3, 243, 241, 8, 3, 243, 230, 8, 3, 243, 228, 8, 3, - 243, 229, 8, 3, 243, 212, 8, 3, 243, 211, 8, 3, 243, 215, 8, 3, 243, 213, - 8, 3, 213, 144, 8, 3, 213, 139, 8, 3, 213, 176, 8, 3, 213, 153, 8, 3, - 213, 166, 8, 3, 213, 163, 8, 3, 213, 168, 8, 3, 213, 167, 8, 3, 214, 7, - 8, 3, 214, 2, 8, 3, 214, 27, 8, 3, 214, 18, 8, 3, 213, 125, 8, 3, 213, - 121, 8, 3, 213, 138, 8, 3, 213, 126, 8, 3, 213, 178, 8, 3, 213, 244, 8, - 3, 212, 110, 8, 3, 212, 108, 8, 3, 212, 116, 8, 3, 212, 113, 8, 3, 212, - 111, 8, 3, 212, 112, 8, 3, 212, 102, 8, 3, 212, 101, 8, 3, 212, 106, 8, - 3, 212, 105, 8, 3, 212, 103, 8, 3, 212, 104, 8, 3, 247, 186, 8, 3, 247, - 174, 8, 3, 248, 11, 8, 3, 247, 211, 8, 3, 247, 244, 8, 3, 247, 248, 8, 3, - 247, 247, 8, 3, 248, 160, 8, 3, 248, 155, 8, 3, 248, 229, 8, 3, 248, 180, - 8, 3, 246, 70, 8, 3, 246, 71, 8, 3, 247, 128, 8, 3, 246, 110, 8, 3, 247, - 153, 8, 3, 247, 130, 8, 3, 248, 38, 8, 3, 248, 98, 8, 3, 248, 53, 8, 3, - 246, 61, 8, 3, 246, 59, 8, 3, 246, 86, 8, 3, 246, 69, 8, 3, 246, 64, 8, - 3, 246, 67, 8, 3, 216, 68, 8, 3, 216, 62, 8, 3, 216, 118, 8, 3, 216, 77, - 8, 3, 216, 110, 8, 3, 216, 112, 8, 3, 216, 111, 8, 3, 217, 47, 8, 3, 217, - 34, 8, 3, 217, 106, 8, 3, 217, 55, 8, 3, 215, 103, 8, 3, 215, 102, 8, 3, - 215, 105, 8, 3, 215, 104, 8, 3, 216, 6, 8, 3, 216, 2, 8, 3, 112, 8, 3, - 216, 14, 8, 3, 216, 214, 8, 3, 217, 23, 8, 3, 216, 238, 8, 3, 215, 88, 8, - 3, 215, 83, 8, 3, 215, 119, 8, 3, 215, 101, 8, 3, 215, 89, 8, 3, 215, 99, - 8, 3, 248, 115, 8, 3, 248, 114, 8, 3, 248, 120, 8, 3, 248, 116, 8, 3, - 248, 117, 8, 3, 248, 119, 8, 3, 248, 118, 8, 3, 248, 136, 8, 3, 248, 135, - 8, 3, 248, 143, 8, 3, 248, 137, 8, 3, 248, 105, 8, 3, 248, 107, 8, 3, - 248, 106, 8, 3, 248, 110, 8, 3, 248, 109, 8, 3, 248, 113, 8, 3, 248, 111, - 8, 3, 248, 128, 8, 3, 248, 131, 8, 3, 248, 129, 8, 3, 248, 101, 8, 3, - 248, 100, 8, 3, 248, 108, 8, 3, 248, 104, 8, 3, 248, 102, 8, 3, 248, 103, - 8, 3, 229, 131, 8, 3, 229, 130, 8, 3, 229, 138, 8, 3, 229, 133, 8, 3, - 229, 134, 8, 3, 229, 135, 8, 3, 229, 147, 8, 3, 229, 146, 8, 3, 229, 153, - 8, 3, 229, 148, 8, 3, 229, 123, 8, 3, 229, 122, 8, 3, 229, 129, 8, 3, - 229, 124, 8, 3, 229, 139, 8, 3, 229, 145, 8, 3, 229, 143, 8, 3, 229, 115, - 8, 3, 229, 114, 8, 3, 229, 120, 8, 3, 229, 118, 8, 3, 229, 116, 8, 3, - 229, 117, 8, 3, 241, 84, 8, 3, 241, 83, 8, 3, 241, 90, 8, 3, 241, 85, 8, - 3, 241, 87, 8, 3, 241, 86, 8, 3, 241, 89, 8, 3, 241, 88, 8, 3, 241, 95, - 8, 3, 241, 94, 8, 3, 241, 97, 8, 3, 241, 96, 8, 3, 241, 78, 8, 3, 241, - 79, 8, 3, 241, 81, 8, 3, 241, 80, 8, 3, 241, 82, 8, 3, 241, 91, 8, 3, - 241, 93, 8, 3, 241, 92, 8, 3, 241, 77, 8, 3, 228, 194, 8, 3, 228, 192, 8, - 3, 228, 238, 8, 3, 228, 197, 8, 3, 228, 220, 8, 3, 228, 234, 8, 3, 228, - 233, 8, 3, 229, 188, 8, 3, 198, 8, 3, 229, 202, 8, 3, 227, 190, 8, 3, - 227, 192, 8, 3, 227, 191, 8, 3, 228, 56, 8, 3, 228, 43, 8, 3, 228, 79, 8, - 3, 228, 65, 8, 3, 229, 88, 8, 3, 229, 112, 8, 3, 229, 99, 8, 3, 227, 185, - 8, 3, 227, 181, 8, 3, 227, 242, 8, 3, 227, 189, 8, 3, 227, 187, 8, 3, - 227, 188, 8, 3, 241, 148, 8, 3, 241, 147, 8, 3, 241, 153, 8, 3, 241, 149, - 8, 3, 241, 150, 8, 3, 241, 152, 8, 3, 241, 151, 8, 3, 241, 158, 8, 3, - 241, 157, 8, 3, 241, 160, 8, 3, 241, 159, 8, 3, 241, 140, 8, 3, 241, 142, - 8, 3, 241, 141, 8, 3, 241, 144, 8, 3, 241, 146, 8, 3, 241, 145, 8, 3, - 241, 154, 8, 3, 241, 156, 8, 3, 241, 155, 8, 3, 241, 136, 8, 3, 241, 135, - 8, 3, 241, 143, 8, 3, 241, 139, 8, 3, 241, 137, 8, 3, 241, 138, 8, 3, - 241, 130, 8, 3, 241, 129, 8, 3, 241, 134, 8, 3, 241, 133, 8, 3, 241, 131, - 8, 3, 241, 132, 8, 3, 232, 201, 8, 3, 232, 195, 8, 3, 232, 247, 8, 3, - 232, 208, 8, 3, 232, 239, 8, 3, 232, 238, 8, 3, 232, 242, 8, 3, 232, 240, - 8, 3, 233, 85, 8, 3, 233, 75, 8, 3, 233, 141, 8, 3, 233, 94, 8, 3, 232, - 84, 8, 3, 232, 83, 8, 3, 232, 86, 8, 3, 232, 85, 8, 3, 232, 122, 8, 3, - 232, 112, 8, 3, 232, 162, 8, 3, 232, 126, 8, 3, 233, 8, 8, 3, 233, 64, 8, - 3, 233, 23, 8, 3, 232, 79, 8, 3, 232, 77, 8, 3, 232, 103, 8, 3, 232, 82, - 8, 3, 232, 80, 8, 3, 232, 81, 8, 3, 232, 59, 8, 3, 232, 58, 8, 3, 232, - 67, 8, 3, 232, 62, 8, 3, 232, 60, 8, 3, 232, 61, 8, 3, 242, 196, 8, 3, - 242, 195, 8, 3, 242, 221, 8, 3, 242, 206, 8, 3, 242, 213, 8, 3, 242, 212, - 8, 3, 242, 215, 8, 3, 242, 214, 8, 3, 243, 96, 8, 3, 243, 91, 8, 3, 243, - 142, 8, 3, 243, 106, 8, 3, 242, 98, 8, 3, 242, 97, 8, 3, 242, 100, 8, 3, - 242, 99, 8, 3, 242, 161, 8, 3, 242, 159, 8, 3, 242, 181, 8, 3, 242, 169, - 8, 3, 243, 40, 8, 3, 243, 38, 8, 3, 243, 69, 8, 3, 243, 51, 8, 3, 242, - 88, 8, 3, 242, 87, 8, 3, 242, 120, 8, 3, 242, 96, 8, 3, 242, 89, 8, 3, - 242, 95, 8, 3, 234, 67, 8, 3, 234, 66, 8, 3, 234, 98, 8, 3, 234, 81, 8, - 3, 234, 91, 8, 3, 234, 94, 8, 3, 234, 92, 8, 3, 234, 208, 8, 3, 234, 196, - 8, 3, 176, 8, 3, 234, 234, 8, 3, 233, 206, 8, 3, 233, 211, 8, 3, 233, - 208, 8, 3, 234, 6, 8, 3, 234, 2, 8, 3, 234, 34, 8, 3, 234, 13, 8, 3, 234, - 162, 8, 3, 234, 146, 8, 3, 234, 188, 8, 3, 234, 165, 8, 3, 233, 195, 8, - 3, 233, 192, 8, 3, 233, 223, 8, 3, 233, 205, 8, 3, 233, 198, 8, 3, 233, - 202, 8, 3, 243, 22, 8, 3, 243, 21, 8, 3, 243, 26, 8, 3, 243, 23, 8, 3, - 243, 25, 8, 3, 243, 24, 8, 3, 243, 33, 8, 3, 243, 32, 8, 3, 243, 36, 8, - 3, 243, 34, 8, 3, 243, 13, 8, 3, 243, 12, 8, 3, 243, 15, 8, 3, 243, 14, - 8, 3, 243, 18, 8, 3, 243, 17, 8, 3, 243, 20, 8, 3, 243, 19, 8, 3, 243, - 28, 8, 3, 243, 27, 8, 3, 243, 31, 8, 3, 243, 29, 8, 3, 243, 8, 8, 3, 243, - 7, 8, 3, 243, 16, 8, 3, 243, 11, 8, 3, 243, 9, 8, 3, 243, 10, 8, 3, 230, - 254, 8, 3, 230, 255, 8, 3, 231, 17, 8, 3, 231, 16, 8, 3, 231, 19, 8, 3, - 231, 18, 8, 3, 230, 245, 8, 3, 230, 247, 8, 3, 230, 246, 8, 3, 230, 250, - 8, 3, 230, 249, 8, 3, 230, 252, 8, 3, 230, 251, 8, 3, 231, 0, 8, 3, 231, - 2, 8, 3, 231, 1, 8, 3, 230, 241, 8, 3, 230, 240, 8, 3, 230, 248, 8, 3, - 230, 244, 8, 3, 230, 242, 8, 3, 230, 243, 8, 3, 240, 187, 8, 3, 240, 186, - 8, 3, 240, 193, 8, 3, 240, 188, 8, 3, 240, 190, 8, 3, 240, 189, 8, 3, - 240, 192, 8, 3, 240, 191, 8, 3, 240, 198, 8, 3, 240, 197, 8, 3, 240, 200, - 8, 3, 240, 199, 8, 3, 240, 179, 8, 3, 240, 178, 8, 3, 240, 181, 8, 3, - 240, 180, 8, 3, 240, 183, 8, 3, 240, 182, 8, 3, 240, 185, 8, 3, 240, 184, - 8, 3, 240, 194, 8, 3, 240, 196, 8, 3, 240, 195, 8, 3, 229, 29, 8, 3, 229, - 31, 8, 3, 229, 30, 8, 3, 229, 72, 8, 3, 229, 70, 8, 3, 229, 82, 8, 3, - 229, 75, 8, 3, 228, 248, 8, 3, 228, 247, 8, 3, 228, 249, 8, 3, 229, 1, 8, - 3, 228, 254, 8, 3, 229, 9, 8, 3, 229, 3, 8, 3, 229, 63, 8, 3, 229, 69, 8, - 3, 229, 65, 8, 3, 241, 163, 8, 3, 241, 173, 8, 3, 241, 182, 8, 3, 242, 2, - 8, 3, 241, 250, 8, 3, 162, 8, 3, 242, 13, 8, 3, 240, 213, 8, 3, 240, 212, - 8, 3, 240, 215, 8, 3, 240, 214, 8, 3, 240, 249, 8, 3, 240, 240, 8, 3, - 241, 75, 8, 3, 241, 54, 8, 3, 241, 201, 8, 3, 241, 245, 8, 3, 241, 213, - 8, 3, 212, 43, 8, 3, 212, 28, 8, 3, 212, 65, 8, 3, 212, 51, 8, 3, 211, - 185, 8, 3, 211, 187, 8, 3, 211, 186, 8, 3, 211, 203, 8, 3, 211, 227, 8, - 3, 211, 210, 8, 3, 212, 5, 8, 3, 212, 22, 8, 3, 212, 10, 8, 3, 210, 30, - 8, 3, 210, 29, 8, 3, 210, 44, 8, 3, 210, 32, 8, 3, 210, 37, 8, 3, 210, - 39, 8, 3, 210, 38, 8, 3, 210, 102, 8, 3, 210, 99, 8, 3, 210, 116, 8, 3, - 210, 105, 8, 3, 210, 6, 8, 3, 210, 8, 8, 3, 210, 7, 8, 3, 210, 19, 8, 3, - 210, 18, 8, 3, 210, 23, 8, 3, 210, 20, 8, 3, 210, 84, 8, 3, 210, 94, 8, - 3, 210, 88, 8, 3, 210, 2, 8, 3, 210, 1, 8, 3, 210, 13, 8, 3, 210, 5, 8, - 3, 210, 3, 8, 3, 210, 4, 8, 3, 209, 245, 8, 3, 209, 244, 8, 3, 209, 250, - 8, 3, 209, 248, 8, 3, 209, 246, 8, 3, 209, 247, 8, 3, 250, 36, 8, 3, 250, - 32, 8, 3, 250, 59, 8, 3, 250, 45, 8, 3, 250, 56, 8, 3, 250, 50, 8, 3, - 250, 58, 8, 3, 250, 57, 8, 3, 250, 232, 8, 3, 250, 225, 8, 3, 251, 41, 8, - 3, 251, 3, 8, 3, 249, 112, 8, 3, 249, 114, 8, 3, 249, 113, 8, 3, 249, - 161, 8, 3, 249, 152, 8, 3, 249, 246, 8, 3, 249, 177, 8, 3, 250, 168, 8, - 3, 250, 198, 8, 3, 250, 173, 8, 3, 249, 92, 8, 3, 249, 90, 8, 3, 249, - 120, 8, 3, 249, 110, 8, 3, 249, 97, 8, 3, 249, 109, 8, 3, 249, 71, 8, 3, - 249, 70, 8, 3, 249, 81, 8, 3, 249, 77, 8, 3, 249, 72, 8, 3, 249, 74, 8, - 3, 209, 228, 8, 3, 209, 227, 8, 3, 209, 234, 8, 3, 209, 229, 8, 3, 209, - 231, 8, 3, 209, 230, 8, 3, 209, 233, 8, 3, 209, 232, 8, 3, 209, 240, 8, - 3, 209, 239, 8, 3, 209, 243, 8, 3, 209, 241, 8, 3, 209, 224, 8, 3, 209, - 226, 8, 3, 209, 225, 8, 3, 209, 235, 8, 3, 209, 238, 8, 3, 209, 236, 8, - 3, 209, 217, 8, 3, 209, 221, 8, 3, 209, 220, 8, 3, 209, 218, 8, 3, 209, - 219, 8, 3, 209, 211, 8, 3, 209, 210, 8, 3, 209, 216, 8, 3, 209, 214, 8, - 3, 209, 212, 8, 3, 209, 213, 8, 3, 227, 108, 8, 3, 227, 107, 8, 3, 227, - 113, 8, 3, 227, 109, 8, 3, 227, 110, 8, 3, 227, 112, 8, 3, 227, 111, 8, - 3, 227, 118, 8, 3, 227, 117, 8, 3, 227, 121, 8, 3, 227, 120, 8, 3, 227, - 101, 8, 3, 227, 102, 8, 3, 227, 105, 8, 3, 227, 106, 8, 3, 227, 114, 8, - 3, 227, 116, 8, 3, 227, 96, 8, 3, 227, 104, 8, 3, 227, 100, 8, 3, 227, - 97, 8, 3, 227, 98, 8, 3, 227, 91, 8, 3, 227, 90, 8, 3, 227, 95, 8, 3, - 227, 94, 8, 3, 227, 92, 8, 3, 227, 93, 8, 3, 219, 129, 8, 3, 195, 8, 3, - 219, 193, 8, 3, 219, 132, 8, 3, 219, 185, 8, 3, 219, 188, 8, 3, 219, 186, - 8, 3, 221, 228, 8, 3, 221, 216, 8, 3, 206, 8, 3, 221, 236, 8, 3, 218, 29, - 8, 3, 218, 31, 8, 3, 218, 30, 8, 3, 219, 36, 8, 3, 219, 25, 8, 3, 219, - 60, 8, 3, 219, 40, 8, 3, 220, 116, 8, 3, 221, 183, 8, 3, 220, 141, 8, 3, - 218, 6, 8, 3, 218, 4, 8, 3, 218, 84, 8, 3, 218, 28, 8, 3, 218, 10, 8, 3, - 218, 18, 8, 3, 217, 167, 8, 3, 217, 166, 8, 3, 217, 233, 8, 3, 217, 174, - 8, 3, 217, 169, 8, 3, 217, 173, 8, 3, 218, 188, 8, 3, 218, 187, 8, 3, - 218, 194, 8, 3, 218, 189, 8, 3, 218, 191, 8, 3, 218, 193, 8, 3, 218, 192, - 8, 3, 218, 202, 8, 3, 218, 200, 8, 3, 218, 225, 8, 3, 218, 203, 8, 3, - 218, 183, 8, 3, 218, 182, 8, 3, 218, 186, 8, 3, 218, 184, 8, 3, 218, 196, - 8, 3, 218, 199, 8, 3, 218, 197, 8, 3, 218, 179, 8, 3, 218, 177, 8, 3, - 218, 181, 8, 3, 218, 180, 8, 3, 218, 172, 8, 3, 218, 171, 8, 3, 218, 176, - 8, 3, 218, 175, 8, 3, 218, 173, 8, 3, 218, 174, 8, 3, 210, 77, 8, 3, 210, - 76, 8, 3, 210, 82, 8, 3, 210, 79, 8, 3, 210, 59, 8, 3, 210, 61, 8, 3, - 210, 60, 8, 3, 210, 64, 8, 3, 210, 63, 8, 3, 210, 67, 8, 3, 210, 65, 8, - 3, 210, 71, 8, 3, 210, 70, 8, 3, 210, 74, 8, 3, 210, 72, 8, 3, 210, 55, - 8, 3, 210, 54, 8, 3, 210, 62, 8, 3, 210, 58, 8, 3, 210, 56, 8, 3, 210, - 57, 8, 3, 210, 47, 8, 3, 210, 46, 8, 3, 210, 51, 8, 3, 210, 50, 8, 3, - 210, 48, 8, 3, 210, 49, 8, 3, 250, 144, 8, 3, 250, 141, 8, 3, 250, 165, - 8, 3, 250, 152, 8, 3, 250, 73, 8, 3, 250, 72, 8, 3, 250, 75, 8, 3, 250, - 74, 8, 3, 250, 87, 8, 3, 250, 86, 8, 3, 250, 94, 8, 3, 250, 89, 8, 3, - 250, 123, 8, 3, 250, 121, 8, 3, 250, 139, 8, 3, 250, 129, 8, 3, 250, 67, - 8, 3, 250, 77, 8, 3, 250, 71, 8, 3, 250, 68, 8, 3, 250, 70, 8, 3, 250, - 61, 8, 3, 250, 60, 8, 3, 250, 65, 8, 3, 250, 64, 8, 3, 250, 62, 8, 3, - 250, 63, 8, 3, 222, 177, 8, 3, 222, 181, 8, 3, 222, 160, 8, 3, 222, 161, - 8, 3, 222, 164, 8, 3, 222, 163, 8, 3, 222, 167, 8, 3, 222, 165, 8, 3, - 222, 171, 8, 3, 222, 170, 8, 3, 222, 176, 8, 3, 222, 172, 8, 3, 222, 156, - 8, 3, 222, 154, 8, 3, 222, 162, 8, 3, 222, 159, 8, 3, 222, 157, 8, 3, - 222, 158, 8, 3, 222, 149, 8, 3, 222, 148, 8, 3, 222, 153, 8, 3, 222, 152, - 8, 3, 222, 150, 8, 3, 222, 151, 8, 3, 228, 39, 8, 3, 228, 38, 8, 3, 228, - 41, 8, 3, 228, 40, 8, 3, 228, 31, 8, 3, 228, 33, 8, 3, 228, 32, 8, 3, - 228, 35, 8, 3, 228, 34, 8, 3, 228, 37, 8, 3, 228, 36, 8, 3, 228, 26, 8, - 3, 228, 25, 8, 3, 228, 30, 8, 3, 228, 29, 8, 3, 228, 27, 8, 3, 228, 28, - 8, 3, 228, 20, 8, 3, 228, 19, 8, 3, 228, 24, 8, 3, 228, 23, 8, 3, 228, - 21, 8, 3, 228, 22, 8, 3, 220, 74, 8, 3, 220, 69, 8, 3, 220, 104, 8, 3, - 220, 85, 8, 3, 219, 217, 8, 3, 219, 219, 8, 3, 219, 218, 8, 3, 219, 238, - 8, 3, 219, 235, 8, 3, 220, 9, 8, 3, 220, 0, 8, 3, 220, 44, 8, 3, 220, 37, - 8, 3, 220, 65, 8, 3, 220, 52, 8, 3, 219, 213, 8, 3, 219, 211, 8, 3, 219, - 227, 8, 3, 219, 216, 8, 3, 219, 214, 8, 3, 219, 215, 8, 3, 219, 196, 8, - 3, 219, 195, 8, 3, 219, 202, 8, 3, 219, 199, 8, 3, 219, 197, 8, 3, 219, - 198, 8, 3, 223, 144, 8, 3, 223, 138, 8, 3, 205, 8, 3, 223, 150, 8, 3, - 222, 122, 8, 3, 222, 124, 8, 3, 222, 123, 8, 3, 222, 190, 8, 3, 222, 183, - 8, 3, 222, 213, 8, 3, 222, 194, 8, 3, 223, 46, 8, 3, 223, 131, 8, 3, 223, - 84, 8, 3, 222, 115, 8, 3, 222, 112, 8, 3, 222, 142, 8, 3, 222, 121, 8, 3, - 222, 117, 8, 3, 222, 118, 8, 3, 222, 97, 8, 3, 222, 96, 8, 3, 222, 102, - 8, 3, 222, 100, 8, 3, 222, 98, 8, 3, 222, 99, 8, 3, 235, 104, 8, 3, 235, - 103, 8, 3, 235, 114, 8, 3, 235, 105, 8, 3, 235, 110, 8, 3, 235, 109, 8, - 3, 235, 112, 8, 3, 235, 111, 8, 3, 235, 47, 8, 3, 235, 46, 8, 3, 235, 49, - 8, 3, 235, 48, 8, 3, 235, 62, 8, 3, 235, 60, 8, 3, 235, 74, 8, 3, 235, - 64, 8, 3, 235, 40, 8, 3, 235, 38, 8, 3, 235, 57, 8, 3, 235, 45, 8, 3, - 235, 42, 8, 3, 235, 43, 8, 3, 235, 32, 8, 3, 235, 31, 8, 3, 235, 36, 8, - 3, 235, 35, 8, 3, 235, 33, 8, 3, 235, 34, 8, 3, 224, 49, 8, 3, 224, 47, - 8, 3, 224, 56, 8, 3, 224, 50, 8, 3, 224, 53, 8, 3, 224, 52, 8, 3, 224, - 55, 8, 3, 224, 54, 8, 3, 224, 2, 8, 3, 223, 255, 8, 3, 224, 4, 8, 3, 224, - 3, 8, 3, 224, 36, 8, 3, 224, 35, 8, 3, 224, 45, 8, 3, 224, 39, 8, 3, 223, - 250, 8, 3, 223, 246, 8, 3, 224, 33, 8, 3, 223, 254, 8, 3, 223, 252, 8, 3, - 223, 253, 8, 3, 223, 230, 8, 3, 223, 228, 8, 3, 223, 240, 8, 3, 223, 233, - 8, 3, 223, 231, 8, 3, 223, 232, 8, 3, 235, 93, 8, 3, 235, 92, 8, 3, 235, - 99, 8, 3, 235, 94, 8, 3, 235, 96, 8, 3, 235, 95, 8, 3, 235, 98, 8, 3, - 235, 97, 8, 3, 235, 84, 8, 3, 235, 86, 8, 3, 235, 85, 8, 3, 235, 89, 8, - 3, 235, 88, 8, 3, 235, 91, 8, 3, 235, 90, 8, 3, 235, 80, 8, 3, 235, 79, - 8, 3, 235, 87, 8, 3, 235, 83, 8, 3, 235, 81, 8, 3, 235, 82, 8, 3, 235, - 76, 8, 3, 235, 75, 8, 3, 235, 78, 8, 3, 235, 77, 8, 3, 228, 167, 8, 3, - 228, 166, 8, 3, 228, 174, 8, 3, 228, 168, 8, 3, 228, 170, 8, 3, 228, 169, - 8, 3, 228, 173, 8, 3, 228, 171, 8, 3, 228, 156, 8, 3, 228, 157, 8, 3, - 228, 162, 8, 3, 228, 161, 8, 3, 228, 165, 8, 3, 228, 163, 8, 3, 228, 151, - 8, 3, 228, 160, 8, 3, 228, 155, 8, 3, 228, 152, 8, 3, 228, 153, 8, 3, - 228, 146, 8, 3, 228, 145, 8, 3, 228, 150, 8, 3, 228, 149, 8, 3, 228, 147, - 8, 3, 228, 148, 8, 3, 227, 141, 8, 3, 227, 140, 8, 3, 227, 152, 8, 3, - 227, 145, 8, 3, 227, 149, 8, 3, 227, 148, 8, 3, 227, 151, 8, 3, 227, 150, - 8, 3, 227, 128, 8, 3, 227, 130, 8, 3, 227, 129, 8, 3, 227, 134, 8, 3, - 227, 133, 8, 3, 227, 138, 8, 3, 227, 135, 8, 3, 227, 126, 8, 3, 227, 124, - 8, 3, 227, 132, 8, 3, 227, 127, 8, 3, 211, 150, 8, 3, 211, 149, 8, 3, - 211, 157, 8, 3, 211, 152, 8, 3, 211, 154, 8, 3, 211, 153, 8, 3, 211, 156, - 8, 3, 211, 155, 8, 3, 211, 139, 8, 3, 211, 140, 8, 3, 211, 144, 8, 3, - 211, 143, 8, 3, 211, 148, 8, 3, 211, 146, 8, 3, 211, 121, 8, 3, 211, 119, - 8, 3, 211, 131, 8, 3, 211, 124, 8, 3, 211, 122, 8, 3, 211, 123, 8, 3, - 210, 250, 8, 3, 210, 248, 8, 3, 211, 8, 8, 3, 210, 251, 8, 3, 211, 2, 8, - 3, 211, 1, 8, 3, 211, 5, 8, 3, 211, 3, 8, 3, 210, 191, 8, 3, 210, 190, 8, - 3, 210, 194, 8, 3, 210, 192, 8, 3, 210, 224, 8, 3, 210, 221, 8, 3, 210, - 244, 8, 3, 210, 228, 8, 3, 210, 182, 8, 3, 210, 178, 8, 3, 210, 212, 8, - 3, 210, 189, 8, 3, 210, 185, 8, 3, 210, 186, 8, 3, 210, 162, 8, 3, 210, - 161, 8, 3, 210, 169, 8, 3, 210, 165, 8, 3, 210, 163, 8, 3, 210, 164, 8, - 34, 224, 36, 8, 34, 232, 247, 8, 34, 234, 67, 8, 34, 227, 145, 8, 34, - 249, 77, 8, 34, 218, 194, 8, 34, 243, 19, 8, 34, 243, 51, 8, 34, 230, - 235, 8, 34, 240, 187, 8, 34, 232, 61, 8, 34, 252, 91, 8, 34, 230, 131, 8, - 34, 210, 244, 8, 34, 224, 124, 8, 34, 240, 181, 8, 34, 217, 47, 8, 34, - 243, 142, 8, 34, 210, 5, 8, 34, 249, 71, 8, 34, 248, 103, 8, 34, 251, - 106, 8, 34, 243, 15, 8, 34, 227, 135, 8, 34, 215, 119, 8, 34, 226, 179, - 8, 34, 235, 80, 8, 34, 210, 19, 8, 34, 224, 103, 8, 34, 241, 115, 8, 34, - 210, 250, 8, 34, 212, 112, 8, 34, 219, 202, 8, 34, 213, 244, 8, 34, 210, - 116, 8, 34, 235, 74, 8, 34, 227, 100, 8, 34, 235, 78, 8, 34, 242, 161, 8, - 34, 235, 98, 8, 34, 211, 227, 8, 34, 246, 86, 8, 34, 219, 215, 8, 34, - 232, 242, 8, 34, 249, 81, 8, 34, 249, 113, 8, 34, 250, 45, 8, 34, 240, - 184, 8, 34, 220, 74, 8, 34, 210, 4, 8, 34, 220, 0, 8, 34, 250, 139, 8, - 34, 209, 231, 8, 34, 229, 178, 8, 34, 234, 188, 232, 202, 1, 252, 199, - 232, 202, 1, 191, 232, 202, 1, 225, 150, 232, 202, 1, 248, 229, 232, 202, - 1, 217, 106, 232, 202, 1, 216, 209, 232, 202, 1, 243, 142, 232, 202, 1, - 176, 232, 202, 1, 234, 138, 232, 202, 1, 235, 147, 232, 202, 1, 251, 41, - 232, 202, 1, 250, 165, 232, 202, 1, 246, 46, 232, 202, 1, 215, 184, 232, - 202, 1, 215, 176, 232, 202, 1, 186, 232, 202, 1, 198, 232, 202, 1, 233, - 141, 232, 202, 1, 206, 232, 202, 1, 210, 82, 232, 202, 1, 210, 116, 232, - 202, 1, 229, 82, 232, 202, 1, 162, 232, 202, 1, 211, 165, 232, 202, 1, - 241, 196, 232, 202, 1, 244, 204, 232, 202, 1, 212, 65, 232, 202, 1, 220, - 104, 232, 202, 1, 192, 232, 202, 1, 243, 0, 232, 202, 1, 61, 232, 202, 1, - 254, 252, 232, 202, 1, 76, 232, 202, 1, 245, 63, 232, 202, 1, 74, 232, - 202, 1, 78, 232, 202, 1, 69, 232, 202, 1, 214, 214, 232, 202, 1, 214, - 208, 232, 202, 1, 226, 238, 232, 202, 1, 138, 230, 37, 216, 118, 232, - 202, 1, 138, 229, 234, 225, 19, 232, 202, 1, 138, 230, 37, 249, 80, 232, - 202, 1, 138, 230, 37, 251, 213, 232, 202, 1, 138, 230, 37, 198, 232, 202, - 1, 138, 230, 37, 235, 121, 232, 202, 224, 144, 249, 227, 232, 202, 224, - 144, 243, 236, 218, 131, 41, 3, 245, 217, 41, 3, 245, 213, 41, 3, 241, - 227, 41, 3, 212, 17, 41, 3, 212, 16, 41, 3, 225, 214, 41, 3, 252, 21, 41, - 3, 252, 74, 41, 3, 231, 121, 41, 3, 233, 253, 41, 3, 231, 11, 41, 3, 243, - 82, 41, 3, 244, 155, 41, 3, 213, 250, 41, 3, 217, 12, 41, 3, 216, 195, - 41, 3, 248, 24, 41, 3, 248, 21, 41, 3, 233, 56, 41, 3, 223, 111, 41, 3, - 248, 85, 41, 3, 229, 144, 41, 3, 221, 172, 41, 3, 220, 63, 41, 3, 210, - 92, 41, 3, 210, 73, 41, 3, 250, 190, 41, 3, 235, 130, 41, 3, 228, 181, - 41, 3, 211, 44, 41, 3, 234, 187, 41, 3, 229, 56, 41, 3, 243, 62, 41, 3, - 231, 85, 41, 3, 229, 108, 41, 3, 227, 159, 41, 3, 74, 41, 3, 236, 6, 41, - 3, 241, 187, 41, 3, 241, 167, 41, 3, 211, 250, 41, 3, 211, 241, 41, 3, - 225, 111, 41, 3, 252, 19, 41, 3, 252, 14, 41, 3, 231, 114, 41, 3, 233, - 250, 41, 3, 231, 8, 41, 3, 243, 78, 41, 3, 244, 129, 41, 3, 213, 176, 41, - 3, 216, 118, 41, 3, 216, 176, 41, 3, 248, 16, 41, 3, 248, 20, 41, 3, 232, - 247, 41, 3, 223, 38, 41, 3, 248, 11, 41, 3, 229, 138, 41, 3, 219, 193, - 41, 3, 220, 34, 41, 3, 210, 44, 41, 3, 210, 69, 41, 3, 250, 59, 41, 3, - 235, 114, 41, 3, 228, 174, 41, 3, 211, 8, 41, 3, 234, 98, 41, 3, 229, 48, - 41, 3, 242, 221, 41, 3, 230, 235, 41, 3, 228, 238, 41, 3, 227, 152, 41, - 3, 61, 41, 3, 254, 131, 41, 3, 229, 77, 41, 3, 162, 41, 3, 242, 25, 41, - 3, 212, 65, 41, 3, 212, 55, 41, 3, 191, 41, 3, 252, 26, 41, 3, 252, 199, - 41, 3, 231, 129, 41, 3, 234, 1, 41, 3, 234, 0, 41, 3, 231, 15, 41, 3, - 243, 86, 41, 3, 244, 204, 41, 3, 214, 27, 41, 3, 217, 106, 41, 3, 216, - 209, 41, 3, 248, 33, 41, 3, 248, 23, 41, 3, 233, 141, 41, 3, 205, 41, 3, - 248, 229, 41, 3, 229, 153, 41, 3, 206, 41, 3, 220, 104, 41, 3, 210, 116, - 41, 3, 210, 82, 41, 3, 251, 41, 41, 3, 235, 147, 41, 3, 228, 190, 41, 3, - 192, 41, 3, 176, 41, 3, 234, 240, 41, 3, 229, 61, 41, 3, 243, 142, 41, 3, - 186, 41, 3, 198, 41, 3, 227, 169, 41, 3, 226, 187, 41, 3, 226, 183, 41, - 3, 241, 60, 41, 3, 211, 215, 41, 3, 211, 211, 41, 3, 224, 252, 41, 3, - 252, 17, 41, 3, 251, 201, 41, 3, 231, 109, 41, 3, 233, 248, 41, 3, 231, - 4, 41, 3, 243, 74, 41, 3, 244, 42, 41, 3, 213, 127, 41, 3, 216, 18, 41, - 3, 216, 154, 41, 3, 248, 14, 41, 3, 248, 18, 41, 3, 232, 133, 41, 3, 222, - 199, 41, 3, 247, 133, 41, 3, 229, 125, 41, 3, 219, 42, 41, 3, 220, 3, 41, - 3, 210, 21, 41, 3, 210, 66, 41, 3, 249, 182, 41, 3, 235, 65, 41, 3, 228, - 164, 41, 3, 210, 229, 41, 3, 234, 16, 41, 3, 229, 46, 41, 3, 242, 171, - 41, 3, 230, 137, 41, 3, 228, 69, 41, 3, 227, 136, 41, 3, 69, 41, 3, 214, - 190, 41, 3, 240, 229, 41, 3, 240, 219, 41, 3, 211, 195, 41, 3, 211, 189, - 41, 3, 224, 153, 41, 3, 252, 16, 41, 3, 251, 133, 41, 3, 231, 108, 41, 3, - 233, 246, 41, 3, 231, 3, 41, 3, 243, 73, 41, 3, 243, 241, 41, 3, 212, - 116, 41, 3, 215, 119, 41, 3, 216, 137, 41, 3, 248, 12, 41, 3, 248, 17, - 41, 3, 232, 103, 41, 3, 222, 142, 41, 3, 246, 86, 41, 3, 229, 120, 41, 3, - 218, 84, 41, 3, 219, 227, 41, 3, 210, 13, 41, 3, 210, 62, 41, 3, 249, - 120, 41, 3, 235, 57, 41, 3, 228, 160, 41, 3, 210, 212, 41, 3, 233, 223, - 41, 3, 229, 45, 41, 3, 242, 120, 41, 3, 230, 107, 41, 3, 227, 242, 41, 3, - 227, 132, 41, 3, 78, 41, 3, 226, 200, 41, 3, 229, 5, 41, 3, 241, 75, 41, - 3, 241, 63, 41, 3, 211, 227, 41, 3, 211, 216, 41, 3, 225, 19, 41, 3, 252, - 18, 41, 3, 251, 213, 41, 3, 231, 110, 41, 3, 233, 249, 41, 3, 231, 6, 41, - 3, 243, 76, 41, 3, 243, 75, 41, 3, 244, 51, 41, 3, 213, 138, 41, 3, 112, - 41, 3, 216, 157, 41, 3, 248, 15, 41, 3, 248, 19, 41, 3, 232, 162, 41, 3, - 222, 213, 41, 3, 247, 153, 41, 3, 229, 129, 41, 3, 219, 60, 41, 3, 220, - 9, 41, 3, 210, 23, 41, 3, 210, 67, 41, 3, 249, 246, 41, 3, 235, 74, 41, - 3, 228, 165, 41, 3, 210, 244, 41, 3, 234, 34, 41, 3, 229, 47, 41, 3, 242, - 181, 41, 3, 230, 166, 41, 3, 228, 79, 41, 3, 227, 138, 41, 3, 76, 41, 3, - 245, 158, 41, 3, 229, 66, 41, 3, 241, 245, 41, 3, 241, 216, 41, 3, 212, - 22, 41, 3, 212, 12, 41, 3, 225, 224, 41, 3, 252, 22, 41, 3, 252, 83, 41, - 3, 231, 122, 41, 3, 233, 254, 41, 3, 233, 252, 41, 3, 231, 12, 41, 3, - 243, 83, 41, 3, 243, 81, 41, 3, 244, 162, 41, 3, 213, 255, 41, 3, 217, - 23, 41, 3, 216, 196, 41, 3, 248, 25, 41, 3, 248, 22, 41, 3, 233, 64, 41, - 3, 223, 131, 41, 3, 248, 98, 41, 3, 229, 145, 41, 3, 221, 183, 41, 3, - 220, 65, 41, 3, 210, 94, 41, 3, 210, 74, 41, 3, 250, 198, 41, 3, 235, - 132, 41, 3, 228, 183, 41, 3, 211, 47, 41, 3, 234, 188, 41, 3, 229, 57, - 41, 3, 229, 53, 41, 3, 243, 69, 41, 3, 243, 58, 41, 3, 231, 96, 41, 3, - 229, 112, 41, 3, 227, 160, 41, 3, 229, 84, 41, 3, 233, 28, 41, 249, 227, - 41, 243, 236, 218, 131, 41, 224, 16, 79, 41, 3, 229, 128, 244, 204, 41, - 3, 229, 128, 176, 41, 3, 229, 128, 219, 42, 41, 16, 244, 152, 41, 16, - 234, 186, 41, 16, 216, 82, 41, 16, 228, 213, 41, 16, 252, 155, 41, 16, - 244, 203, 41, 16, 217, 102, 41, 16, 248, 184, 41, 16, 247, 132, 41, 16, - 233, 212, 41, 16, 216, 22, 41, 16, 247, 152, 41, 16, 235, 66, 41, 21, - 210, 86, 41, 21, 111, 41, 21, 105, 41, 21, 158, 41, 21, 161, 41, 21, 190, - 41, 21, 195, 41, 21, 199, 41, 21, 196, 41, 21, 201, 41, 3, 229, 128, 186, - 41, 3, 229, 128, 247, 153, 33, 6, 1, 210, 90, 33, 4, 1, 210, 90, 33, 6, - 1, 246, 42, 33, 4, 1, 246, 42, 33, 6, 1, 223, 52, 246, 44, 33, 4, 1, 223, - 52, 246, 44, 33, 6, 1, 235, 192, 33, 4, 1, 235, 192, 33, 6, 1, 247, 169, - 33, 4, 1, 247, 169, 33, 6, 1, 230, 145, 214, 205, 33, 4, 1, 230, 145, - 214, 205, 33, 6, 1, 251, 144, 226, 205, 33, 4, 1, 251, 144, 226, 205, 33, - 6, 1, 229, 92, 211, 31, 33, 4, 1, 229, 92, 211, 31, 33, 6, 1, 211, 28, 2, - 252, 193, 211, 31, 33, 4, 1, 211, 28, 2, 252, 193, 211, 31, 33, 6, 1, - 235, 190, 211, 59, 33, 4, 1, 235, 190, 211, 59, 33, 6, 1, 223, 52, 210, - 212, 33, 4, 1, 223, 52, 210, 212, 33, 6, 1, 235, 190, 61, 33, 4, 1, 235, - 190, 61, 33, 6, 1, 250, 8, 232, 198, 210, 183, 33, 4, 1, 250, 8, 232, - 198, 210, 183, 33, 6, 1, 251, 222, 210, 183, 33, 4, 1, 251, 222, 210, - 183, 33, 6, 1, 235, 190, 250, 8, 232, 198, 210, 183, 33, 4, 1, 235, 190, - 250, 8, 232, 198, 210, 183, 33, 6, 1, 210, 246, 33, 4, 1, 210, 246, 33, - 6, 1, 223, 52, 215, 179, 33, 4, 1, 223, 52, 215, 179, 33, 6, 1, 219, 54, - 248, 98, 33, 4, 1, 219, 54, 248, 98, 33, 6, 1, 219, 54, 245, 182, 33, 4, - 1, 219, 54, 245, 182, 33, 6, 1, 219, 54, 245, 167, 33, 4, 1, 219, 54, - 245, 167, 33, 6, 1, 230, 149, 78, 33, 4, 1, 230, 149, 78, 33, 6, 1, 251, - 248, 78, 33, 4, 1, 251, 248, 78, 33, 6, 1, 52, 230, 149, 78, 33, 4, 1, - 52, 230, 149, 78, 33, 1, 230, 91, 78, 38, 33, 212, 100, 38, 33, 216, 249, - 230, 196, 50, 38, 33, 240, 218, 230, 196, 50, 38, 33, 216, 149, 230, 196, - 50, 219, 95, 253, 224, 38, 33, 1, 214, 202, 236, 67, 38, 33, 1, 74, 38, - 33, 1, 211, 8, 38, 33, 1, 69, 38, 33, 1, 242, 10, 50, 38, 33, 1, 211, 27, - 38, 33, 1, 219, 54, 50, 38, 33, 1, 226, 205, 38, 33, 234, 198, 38, 33, - 225, 231, 33, 234, 198, 33, 225, 231, 33, 6, 1, 246, 54, 33, 4, 1, 246, - 54, 33, 6, 1, 246, 35, 33, 4, 1, 246, 35, 33, 6, 1, 210, 52, 33, 4, 1, - 210, 52, 33, 6, 1, 250, 214, 33, 4, 1, 250, 214, 33, 6, 1, 246, 33, 33, - 4, 1, 246, 33, 33, 6, 1, 217, 24, 2, 230, 229, 103, 33, 4, 1, 217, 24, 2, - 230, 229, 103, 33, 6, 1, 215, 78, 33, 4, 1, 215, 78, 33, 6, 1, 215, 161, - 33, 4, 1, 215, 161, 33, 6, 1, 215, 165, 33, 4, 1, 215, 165, 33, 6, 1, - 217, 29, 33, 4, 1, 217, 29, 33, 6, 1, 240, 205, 33, 4, 1, 240, 205, 33, - 6, 1, 219, 208, 33, 4, 1, 219, 208, 38, 33, 1, 235, 190, 76, 20, 1, 61, - 20, 1, 176, 20, 1, 69, 20, 1, 233, 223, 20, 1, 245, 217, 20, 1, 223, 111, - 20, 1, 217, 87, 20, 1, 78, 20, 1, 227, 152, 20, 1, 74, 20, 1, 233, 141, - 20, 1, 191, 20, 1, 222, 242, 20, 1, 223, 32, 20, 1, 233, 55, 20, 1, 231, - 84, 20, 1, 217, 102, 20, 1, 229, 151, 20, 1, 228, 188, 20, 1, 194, 20, 1, - 218, 5, 20, 1, 230, 107, 20, 1, 220, 29, 20, 1, 219, 193, 20, 1, 220, 39, - 20, 1, 220, 125, 20, 1, 233, 161, 20, 1, 234, 162, 20, 1, 227, 213, 20, - 1, 227, 242, 20, 1, 228, 159, 20, 1, 210, 226, 20, 1, 219, 227, 20, 1, - 210, 187, 20, 1, 192, 20, 1, 228, 14, 20, 1, 234, 148, 20, 1, 225, 154, - 20, 1, 228, 181, 20, 1, 227, 251, 20, 1, 224, 147, 20, 1, 211, 192, 20, - 1, 225, 214, 20, 1, 244, 155, 20, 1, 222, 142, 20, 1, 232, 103, 20, 1, - 230, 235, 20, 1, 228, 238, 20, 1, 223, 54, 20, 1, 223, 174, 20, 1, 234, - 171, 20, 1, 229, 12, 20, 1, 229, 61, 20, 1, 229, 82, 20, 1, 220, 9, 20, - 1, 224, 150, 20, 1, 243, 241, 20, 1, 244, 45, 20, 1, 212, 65, 20, 1, 198, - 20, 1, 232, 247, 20, 1, 225, 111, 20, 1, 232, 125, 20, 1, 234, 34, 20, 1, - 231, 119, 20, 1, 223, 86, 20, 1, 231, 63, 20, 1, 186, 20, 1, 216, 118, - 20, 1, 234, 98, 20, 1, 230, 166, 20, 1, 231, 127, 20, 1, 216, 231, 20, 1, - 234, 1, 20, 1, 216, 248, 20, 1, 227, 243, 20, 1, 221, 253, 20, 1, 244, - 200, 20, 1, 234, 3, 20, 1, 234, 30, 20, 38, 164, 234, 11, 20, 38, 164, - 215, 111, 20, 228, 187, 20, 243, 236, 218, 131, 20, 249, 234, 20, 249, - 227, 20, 220, 152, 20, 224, 16, 79, 58, 1, 250, 104, 138, 210, 254, 225, - 64, 58, 1, 250, 104, 138, 211, 70, 225, 64, 58, 1, 250, 104, 138, 210, - 254, 220, 86, 58, 1, 250, 104, 138, 211, 70, 220, 86, 58, 1, 250, 104, - 138, 210, 254, 224, 33, 58, 1, 250, 104, 138, 211, 70, 224, 33, 58, 1, - 250, 104, 138, 210, 254, 222, 142, 58, 1, 250, 104, 138, 211, 70, 222, - 142, 58, 1, 245, 28, 246, 126, 138, 130, 58, 1, 125, 246, 126, 138, 130, - 58, 1, 230, 230, 246, 126, 138, 130, 58, 1, 121, 246, 126, 138, 130, 58, - 1, 245, 27, 246, 126, 138, 130, 58, 1, 245, 28, 246, 126, 233, 45, 138, - 130, 58, 1, 125, 246, 126, 233, 45, 138, 130, 58, 1, 230, 230, 246, 126, - 233, 45, 138, 130, 58, 1, 121, 246, 126, 233, 45, 138, 130, 58, 1, 245, - 27, 246, 126, 233, 45, 138, 130, 58, 1, 245, 28, 233, 45, 138, 130, 58, - 1, 125, 233, 45, 138, 130, 58, 1, 230, 230, 233, 45, 138, 130, 58, 1, - 121, 233, 45, 138, 130, 58, 1, 245, 27, 233, 45, 138, 130, 58, 1, 59, 67, - 130, 58, 1, 59, 219, 97, 58, 1, 59, 203, 130, 58, 1, 232, 114, 44, 249, - 169, 254, 117, 58, 1, 223, 160, 120, 75, 58, 1, 223, 160, 124, 75, 58, 1, - 223, 160, 245, 39, 79, 58, 1, 223, 160, 235, 200, 245, 39, 79, 58, 1, - 121, 235, 200, 245, 39, 79, 58, 1, 218, 113, 22, 125, 216, 31, 58, 1, - 218, 113, 22, 121, 216, 31, 7, 6, 1, 245, 207, 254, 179, 7, 4, 1, 245, - 207, 254, 179, 7, 6, 1, 245, 207, 254, 205, 7, 4, 1, 245, 207, 254, 205, - 7, 6, 1, 241, 214, 7, 4, 1, 241, 214, 7, 6, 1, 215, 40, 7, 4, 1, 215, 40, - 7, 6, 1, 215, 230, 7, 4, 1, 215, 230, 7, 6, 1, 249, 118, 7, 4, 1, 249, - 118, 7, 6, 1, 249, 119, 2, 249, 227, 7, 4, 1, 249, 119, 2, 249, 227, 7, - 1, 4, 6, 245, 14, 7, 1, 4, 6, 222, 93, 7, 6, 1, 255, 82, 7, 4, 1, 255, - 82, 7, 6, 1, 254, 81, 7, 4, 1, 254, 81, 7, 6, 1, 253, 200, 7, 4, 1, 253, - 200, 7, 6, 1, 253, 184, 7, 4, 1, 253, 184, 7, 6, 1, 253, 185, 2, 203, - 130, 7, 4, 1, 253, 185, 2, 203, 130, 7, 6, 1, 253, 175, 7, 4, 1, 253, - 175, 7, 6, 1, 223, 52, 251, 75, 2, 247, 128, 7, 4, 1, 223, 52, 251, 75, - 2, 247, 128, 7, 6, 1, 235, 30, 2, 91, 7, 4, 1, 235, 30, 2, 91, 7, 6, 1, - 235, 30, 2, 248, 7, 91, 7, 4, 1, 235, 30, 2, 248, 7, 91, 7, 6, 1, 235, - 30, 2, 218, 105, 22, 248, 7, 91, 7, 4, 1, 235, 30, 2, 218, 105, 22, 248, - 7, 91, 7, 6, 1, 251, 143, 156, 7, 4, 1, 251, 143, 156, 7, 6, 1, 233, 155, - 2, 125, 91, 7, 4, 1, 233, 155, 2, 125, 91, 7, 6, 1, 144, 2, 200, 218, - 105, 226, 124, 7, 4, 1, 144, 2, 200, 218, 105, 226, 124, 7, 6, 1, 144, 2, - 232, 129, 7, 4, 1, 144, 2, 232, 129, 7, 6, 1, 226, 187, 7, 4, 1, 226, - 187, 7, 6, 1, 226, 110, 2, 218, 105, 216, 140, 248, 47, 7, 4, 1, 226, - 110, 2, 218, 105, 216, 140, 248, 47, 7, 6, 1, 226, 110, 2, 244, 61, 7, 4, - 1, 226, 110, 2, 244, 61, 7, 6, 1, 226, 110, 2, 218, 231, 217, 78, 7, 4, - 1, 226, 110, 2, 218, 231, 217, 78, 7, 6, 1, 224, 100, 2, 218, 105, 216, - 140, 248, 47, 7, 4, 1, 224, 100, 2, 218, 105, 216, 140, 248, 47, 7, 6, 1, - 224, 100, 2, 248, 7, 91, 7, 4, 1, 224, 100, 2, 248, 7, 91, 7, 6, 1, 223, - 227, 222, 188, 7, 4, 1, 223, 227, 222, 188, 7, 6, 1, 222, 132, 222, 188, - 7, 4, 1, 222, 132, 222, 188, 7, 6, 1, 214, 106, 2, 248, 7, 91, 7, 4, 1, - 214, 106, 2, 248, 7, 91, 7, 6, 1, 212, 106, 7, 4, 1, 212, 106, 7, 6, 1, - 213, 145, 210, 159, 7, 4, 1, 213, 145, 210, 159, 7, 6, 1, 216, 153, 2, - 91, 7, 4, 1, 216, 153, 2, 91, 7, 6, 1, 216, 153, 2, 218, 105, 216, 140, - 248, 47, 7, 4, 1, 216, 153, 2, 218, 105, 216, 140, 248, 47, 7, 6, 1, 213, - 245, 7, 4, 1, 213, 245, 7, 6, 1, 245, 73, 7, 4, 1, 245, 73, 7, 6, 1, 235, - 178, 7, 4, 1, 235, 178, 7, 6, 1, 249, 215, 7, 4, 1, 249, 215, 58, 1, 214, - 133, 7, 4, 1, 246, 77, 7, 4, 1, 232, 89, 7, 4, 1, 230, 85, 7, 4, 1, 227, - 205, 7, 4, 1, 222, 131, 7, 1, 4, 6, 222, 131, 7, 4, 1, 215, 109, 7, 4, 1, - 214, 197, 7, 6, 1, 235, 220, 249, 68, 7, 4, 1, 235, 220, 249, 68, 7, 6, - 1, 235, 220, 245, 14, 7, 4, 1, 235, 220, 245, 14, 7, 6, 1, 235, 220, 243, - 209, 7, 6, 1, 215, 94, 235, 220, 243, 209, 7, 4, 1, 215, 94, 235, 220, - 243, 209, 7, 6, 1, 215, 94, 156, 7, 4, 1, 215, 94, 156, 7, 6, 1, 235, - 220, 153, 7, 4, 1, 235, 220, 153, 7, 6, 1, 235, 220, 222, 93, 7, 4, 1, - 235, 220, 222, 93, 7, 6, 1, 235, 220, 217, 153, 7, 4, 1, 235, 220, 217, - 153, 58, 1, 121, 250, 39, 255, 23, 58, 1, 249, 234, 58, 1, 219, 253, 245, - 106, 50, 7, 6, 1, 222, 1, 7, 4, 1, 222, 1, 7, 6, 1, 215, 94, 242, 67, 7, - 4, 1, 233, 155, 2, 223, 58, 241, 59, 22, 252, 49, 7, 6, 1, 230, 31, 2, - 248, 47, 7, 4, 1, 230, 31, 2, 248, 47, 7, 6, 1, 251, 75, 2, 130, 7, 4, 1, - 251, 75, 2, 130, 7, 6, 1, 243, 210, 2, 226, 252, 91, 7, 4, 1, 243, 210, - 2, 226, 252, 91, 7, 6, 1, 235, 30, 2, 226, 252, 91, 7, 4, 1, 235, 30, 2, - 226, 252, 91, 7, 6, 1, 230, 31, 2, 226, 252, 91, 7, 4, 1, 230, 31, 2, - 226, 252, 91, 7, 6, 1, 223, 227, 2, 226, 252, 91, 7, 4, 1, 223, 227, 2, - 226, 252, 91, 7, 6, 1, 222, 94, 2, 226, 252, 91, 7, 4, 1, 222, 94, 2, - 226, 252, 91, 7, 6, 1, 242, 68, 2, 103, 58, 1, 6, 242, 68, 2, 91, 58, 1, - 4, 27, 226, 238, 7, 1, 4, 6, 215, 94, 194, 7, 245, 111, 1, 223, 52, 245, - 14, 7, 245, 111, 1, 223, 52, 226, 109, 7, 245, 111, 1, 235, 200, 194, 7, - 245, 111, 1, 240, 161, 232, 135, 7, 245, 111, 1, 254, 31, 194, 217, 231, - 229, 219, 1, 61, 217, 231, 229, 219, 1, 74, 217, 231, 229, 219, 5, 246, - 56, 217, 231, 229, 219, 1, 69, 217, 231, 229, 219, 1, 76, 217, 231, 229, - 219, 1, 78, 217, 231, 229, 219, 5, 242, 4, 217, 231, 229, 219, 1, 234, - 34, 217, 231, 229, 219, 1, 234, 111, 217, 231, 229, 219, 1, 242, 181, - 217, 231, 229, 219, 1, 242, 231, 217, 231, 229, 219, 5, 254, 83, 217, - 231, 229, 219, 1, 249, 246, 217, 231, 229, 219, 1, 250, 94, 217, 231, - 229, 219, 1, 235, 74, 217, 231, 229, 219, 1, 235, 115, 217, 231, 229, - 219, 1, 215, 134, 217, 231, 229, 219, 1, 215, 140, 217, 231, 229, 219, 1, - 248, 113, 217, 231, 229, 219, 1, 248, 122, 217, 231, 229, 219, 1, 112, - 217, 231, 229, 219, 1, 216, 157, 217, 231, 229, 219, 1, 247, 153, 217, - 231, 229, 219, 1, 248, 15, 217, 231, 229, 219, 1, 228, 79, 217, 231, 229, - 219, 1, 225, 19, 217, 231, 229, 219, 1, 225, 124, 217, 231, 229, 219, 1, - 251, 213, 217, 231, 229, 219, 1, 252, 18, 217, 231, 229, 219, 1, 230, - 166, 217, 231, 229, 219, 1, 222, 213, 217, 231, 229, 219, 1, 232, 162, - 217, 231, 229, 219, 1, 222, 167, 217, 231, 229, 219, 1, 219, 60, 217, - 231, 229, 219, 1, 241, 75, 217, 231, 229, 219, 25, 5, 61, 217, 231, 229, - 219, 25, 5, 74, 217, 231, 229, 219, 25, 5, 69, 217, 231, 229, 219, 25, 5, - 76, 217, 231, 229, 219, 25, 5, 226, 187, 217, 231, 229, 219, 225, 15, - 231, 163, 217, 231, 229, 219, 225, 15, 231, 162, 217, 231, 229, 219, 225, - 15, 231, 161, 217, 231, 229, 219, 225, 15, 231, 160, 228, 61, 235, 247, - 244, 10, 123, 224, 24, 228, 61, 235, 247, 244, 10, 123, 242, 34, 228, 61, - 235, 247, 244, 10, 134, 224, 22, 228, 61, 235, 247, 244, 10, 123, 219, - 119, 228, 61, 235, 247, 244, 10, 123, 245, 196, 228, 61, 235, 247, 244, - 10, 134, 219, 118, 228, 61, 235, 247, 224, 25, 79, 228, 61, 235, 247, - 225, 43, 79, 228, 61, 235, 247, 222, 120, 79, 228, 61, 235, 247, 224, 26, - 79, 225, 147, 1, 176, 225, 147, 1, 234, 138, 225, 147, 1, 243, 142, 225, - 147, 1, 229, 82, 225, 147, 1, 251, 41, 225, 147, 1, 250, 165, 225, 147, - 1, 235, 147, 225, 147, 1, 227, 169, 225, 147, 1, 217, 106, 225, 147, 1, - 216, 209, 225, 147, 1, 248, 229, 225, 147, 1, 198, 225, 147, 1, 191, 225, - 147, 1, 225, 150, 225, 147, 1, 252, 199, 225, 147, 1, 186, 225, 147, 1, - 215, 184, 225, 147, 1, 215, 176, 225, 147, 1, 246, 46, 225, 147, 1, 212, - 65, 225, 147, 1, 210, 82, 225, 147, 1, 210, 116, 225, 147, 1, 4, 61, 225, - 147, 1, 192, 225, 147, 1, 205, 225, 147, 1, 233, 141, 225, 147, 1, 220, - 104, 225, 147, 1, 206, 225, 147, 1, 162, 225, 147, 1, 61, 225, 147, 1, - 74, 225, 147, 1, 69, 225, 147, 1, 76, 225, 147, 1, 78, 225, 147, 1, 224, - 91, 225, 147, 1, 211, 165, 225, 147, 1, 244, 204, 225, 147, 1, 243, 36, - 225, 147, 1, 245, 217, 225, 147, 218, 74, 1, 212, 65, 225, 147, 218, 74, - 1, 192, 225, 147, 1, 215, 157, 225, 147, 1, 215, 145, 225, 147, 1, 248, - 143, 225, 147, 1, 228, 115, 225, 147, 1, 254, 149, 192, 225, 147, 1, 213, - 134, 220, 104, 225, 147, 1, 213, 135, 162, 225, 147, 1, 253, 231, 244, - 204, 225, 147, 218, 74, 1, 205, 225, 147, 218, 26, 1, 205, 225, 147, 1, - 251, 7, 225, 147, 219, 157, 241, 243, 79, 225, 147, 52, 241, 243, 79, - 225, 147, 164, 220, 97, 225, 147, 164, 52, 220, 97, 179, 5, 254, 83, 179, - 5, 213, 147, 179, 1, 61, 179, 1, 255, 82, 179, 1, 74, 179, 1, 236, 40, - 179, 1, 69, 179, 1, 214, 118, 179, 1, 149, 153, 179, 1, 149, 222, 182, - 179, 1, 149, 156, 179, 1, 149, 232, 191, 179, 1, 76, 179, 1, 245, 217, - 179, 1, 254, 210, 179, 1, 78, 179, 1, 226, 187, 179, 1, 253, 200, 179, 1, - 176, 179, 1, 234, 138, 179, 1, 243, 142, 179, 1, 243, 0, 179, 1, 229, 82, - 179, 1, 251, 41, 179, 1, 250, 165, 179, 1, 235, 147, 179, 1, 235, 120, - 179, 1, 227, 169, 179, 1, 215, 157, 179, 1, 215, 145, 179, 1, 248, 143, - 179, 1, 248, 127, 179, 1, 228, 115, 179, 1, 217, 106, 179, 1, 216, 209, - 179, 1, 248, 229, 179, 1, 248, 33, 179, 1, 198, 179, 1, 191, 179, 1, 225, - 150, 179, 1, 252, 199, 179, 1, 252, 26, 179, 1, 186, 179, 1, 192, 179, 1, - 205, 179, 1, 233, 141, 179, 1, 214, 27, 179, 1, 220, 104, 179, 1, 218, - 225, 179, 1, 206, 179, 1, 162, 179, 1, 232, 190, 179, 117, 5, 242, 51, - 179, 25, 5, 255, 82, 179, 25, 5, 74, 179, 25, 5, 236, 40, 179, 25, 5, 69, - 179, 25, 5, 214, 118, 179, 25, 5, 149, 153, 179, 25, 5, 149, 222, 182, - 179, 25, 5, 149, 156, 179, 25, 5, 149, 232, 191, 179, 25, 5, 76, 179, 25, - 5, 245, 217, 179, 25, 5, 254, 210, 179, 25, 5, 78, 179, 25, 5, 226, 187, - 179, 25, 5, 253, 200, 179, 5, 213, 152, 179, 248, 186, 179, 52, 248, 186, - 179, 21, 210, 86, 179, 21, 111, 179, 21, 105, 179, 21, 158, 179, 21, 161, - 179, 21, 190, 179, 21, 195, 179, 21, 199, 179, 21, 196, 179, 21, 201, 38, - 84, 21, 210, 86, 38, 84, 21, 111, 38, 84, 21, 105, 38, 84, 21, 158, 38, - 84, 21, 161, 38, 84, 21, 190, 38, 84, 21, 195, 38, 84, 21, 199, 38, 84, - 21, 196, 38, 84, 21, 201, 38, 84, 1, 61, 38, 84, 1, 69, 38, 84, 1, 176, - 38, 84, 1, 198, 38, 84, 1, 191, 38, 84, 1, 205, 38, 84, 1, 213, 176, 38, - 84, 5, 253, 183, 84, 5, 219, 19, 251, 7, 84, 5, 251, 8, 213, 152, 84, 5, - 52, 251, 8, 213, 152, 84, 5, 251, 8, 105, 84, 5, 251, 8, 158, 84, 5, 251, - 8, 253, 183, 84, 5, 224, 127, 84, 243, 107, 244, 111, 84, 250, 246, 84, - 241, 237, 234, 194, 232, 248, 21, 210, 86, 234, 194, 232, 248, 21, 111, - 234, 194, 232, 248, 21, 105, 234, 194, 232, 248, 21, 158, 234, 194, 232, - 248, 21, 161, 234, 194, 232, 248, 21, 190, 234, 194, 232, 248, 21, 195, - 234, 194, 232, 248, 21, 199, 234, 194, 232, 248, 21, 196, 234, 194, 232, - 248, 21, 201, 234, 194, 232, 248, 1, 176, 234, 194, 232, 248, 1, 234, - 138, 234, 194, 232, 248, 1, 243, 142, 234, 194, 232, 248, 1, 229, 82, - 234, 194, 232, 248, 1, 206, 234, 194, 232, 248, 1, 220, 104, 234, 194, - 232, 248, 1, 210, 116, 234, 194, 232, 248, 1, 227, 169, 234, 194, 232, - 248, 1, 217, 106, 234, 194, 232, 248, 1, 240, 233, 234, 194, 232, 248, 1, - 198, 234, 194, 232, 248, 1, 191, 234, 194, 232, 248, 1, 225, 150, 234, - 194, 232, 248, 1, 186, 234, 194, 232, 248, 1, 248, 229, 234, 194, 232, - 248, 1, 252, 199, 234, 194, 232, 248, 1, 205, 234, 194, 232, 248, 1, 192, - 234, 194, 232, 248, 1, 233, 141, 234, 194, 232, 248, 1, 212, 65, 234, - 194, 232, 248, 1, 216, 209, 234, 194, 232, 248, 1, 162, 234, 194, 232, - 248, 1, 214, 27, 234, 194, 232, 248, 1, 251, 41, 234, 194, 232, 248, 1, - 61, 234, 194, 232, 248, 1, 226, 238, 234, 194, 232, 248, 1, 74, 234, 194, - 232, 248, 1, 226, 187, 234, 194, 232, 248, 25, 214, 214, 234, 194, 232, - 248, 25, 76, 234, 194, 232, 248, 25, 69, 234, 194, 232, 248, 25, 245, - 217, 234, 194, 232, 248, 25, 78, 234, 194, 232, 248, 138, 225, 33, 234, - 194, 232, 248, 138, 251, 20, 234, 194, 232, 248, 138, 251, 21, 225, 33, - 234, 194, 232, 248, 5, 249, 85, 234, 194, 232, 248, 5, 219, 201, 223, 96, - 1, 176, 223, 96, 1, 243, 142, 223, 96, 1, 229, 82, 223, 96, 1, 217, 106, - 223, 96, 1, 248, 229, 223, 96, 1, 198, 223, 96, 1, 191, 223, 96, 1, 252, - 199, 223, 96, 1, 186, 223, 96, 1, 251, 41, 223, 96, 1, 235, 147, 223, 96, - 1, 227, 169, 223, 96, 1, 206, 223, 96, 1, 205, 223, 96, 1, 233, 141, 223, - 96, 1, 192, 223, 96, 1, 212, 65, 223, 96, 1, 162, 223, 96, 1, 231, 129, - 223, 96, 1, 229, 61, 223, 96, 1, 229, 153, 223, 96, 1, 227, 139, 223, 96, - 1, 61, 223, 96, 25, 5, 74, 223, 96, 25, 5, 69, 223, 96, 25, 5, 76, 223, - 96, 25, 5, 254, 210, 223, 96, 25, 5, 78, 223, 96, 25, 5, 253, 200, 223, - 96, 25, 5, 245, 63, 223, 96, 25, 5, 245, 241, 223, 96, 117, 5, 229, 84, - 223, 96, 117, 5, 230, 30, 223, 96, 117, 5, 153, 223, 96, 117, 5, 242, 67, - 223, 96, 213, 152, 223, 96, 221, 175, 79, 24, 100, 216, 98, 24, 100, 216, - 97, 24, 100, 216, 95, 24, 100, 216, 100, 24, 100, 223, 24, 24, 100, 223, - 8, 24, 100, 223, 3, 24, 100, 223, 5, 24, 100, 223, 21, 24, 100, 223, 14, - 24, 100, 223, 7, 24, 100, 223, 26, 24, 100, 223, 9, 24, 100, 223, 28, 24, - 100, 223, 25, 24, 100, 230, 218, 24, 100, 230, 209, 24, 100, 230, 212, - 24, 100, 225, 83, 24, 100, 225, 94, 24, 100, 225, 95, 24, 100, 218, 209, - 24, 100, 236, 53, 24, 100, 236, 60, 24, 100, 218, 220, 24, 100, 218, 207, - 24, 100, 225, 133, 24, 100, 241, 174, 24, 100, 218, 204, 155, 5, 226, 31, - 155, 5, 250, 195, 155, 5, 233, 72, 155, 5, 211, 243, 155, 1, 61, 155, 1, - 240, 161, 234, 197, 155, 1, 74, 155, 1, 236, 40, 155, 1, 69, 155, 1, 226, - 94, 250, 171, 155, 1, 229, 83, 233, 34, 155, 1, 229, 83, 233, 35, 223, - 145, 155, 1, 76, 155, 1, 254, 210, 155, 1, 78, 155, 1, 176, 155, 1, 235, - 19, 221, 230, 155, 1, 235, 19, 230, 71, 155, 1, 243, 142, 155, 1, 243, - 143, 230, 71, 155, 1, 229, 82, 155, 1, 251, 41, 155, 1, 251, 42, 230, 71, - 155, 1, 235, 147, 155, 1, 227, 170, 230, 71, 155, 1, 235, 148, 231, 212, - 155, 1, 227, 169, 155, 1, 215, 157, 155, 1, 215, 158, 231, 212, 155, 1, - 248, 143, 155, 1, 248, 144, 231, 212, 155, 1, 229, 234, 230, 71, 155, 1, - 217, 106, 155, 1, 217, 107, 230, 71, 155, 1, 248, 229, 155, 1, 248, 230, - 231, 212, 155, 1, 198, 155, 1, 191, 155, 1, 226, 94, 230, 71, 155, 1, - 252, 199, 155, 1, 252, 200, 230, 71, 155, 1, 186, 155, 1, 192, 155, 1, - 205, 155, 1, 223, 191, 254, 219, 155, 1, 233, 141, 155, 1, 212, 65, 155, - 1, 222, 36, 230, 71, 155, 1, 222, 36, 231, 212, 155, 1, 206, 155, 1, 162, - 155, 5, 250, 196, 216, 251, 155, 25, 5, 217, 48, 155, 25, 5, 216, 36, - 155, 25, 5, 211, 190, 155, 25, 5, 211, 191, 231, 74, 155, 25, 5, 218, 48, - 155, 25, 5, 218, 49, 231, 62, 155, 25, 5, 217, 66, 155, 25, 5, 247, 202, - 230, 70, 155, 25, 5, 225, 187, 155, 117, 5, 234, 164, 155, 117, 5, 225, - 199, 155, 117, 5, 251, 27, 155, 226, 44, 155, 43, 223, 72, 155, 44, 223, - 72, 155, 226, 83, 254, 125, 155, 226, 83, 231, 229, 155, 226, 83, 232, - 93, 155, 226, 83, 211, 238, 155, 226, 83, 226, 45, 155, 226, 83, 232, - 211, 155, 226, 83, 232, 87, 155, 226, 83, 255, 2, 155, 226, 83, 255, 3, - 255, 2, 155, 226, 83, 225, 54, 155, 215, 94, 226, 83, 225, 54, 155, 226, - 40, 155, 21, 210, 86, 155, 21, 111, 155, 21, 105, 155, 21, 158, 155, 21, - 161, 155, 21, 190, 155, 21, 195, 155, 21, 199, 155, 21, 196, 155, 21, - 201, 155, 226, 83, 216, 70, 215, 107, 155, 226, 83, 235, 174, 172, 1, 61, - 172, 1, 74, 172, 1, 69, 172, 1, 76, 172, 1, 254, 210, 172, 1, 78, 172, 1, - 176, 172, 1, 234, 138, 172, 1, 243, 142, 172, 1, 243, 0, 172, 1, 228, - 250, 172, 1, 229, 82, 172, 1, 250, 165, 172, 1, 250, 120, 172, 1, 235, - 147, 172, 1, 235, 120, 172, 1, 228, 240, 172, 1, 228, 242, 172, 1, 228, - 241, 172, 1, 217, 106, 172, 1, 216, 209, 172, 1, 248, 229, 172, 1, 248, - 33, 172, 1, 227, 211, 172, 1, 198, 172, 1, 248, 143, 172, 1, 191, 172, 1, - 224, 223, 172, 1, 225, 150, 172, 1, 252, 199, 172, 1, 252, 26, 172, 1, - 230, 100, 172, 1, 186, 172, 1, 252, 119, 172, 1, 192, 172, 1, 205, 172, - 1, 233, 141, 172, 1, 214, 27, 172, 1, 218, 225, 172, 1, 206, 172, 1, 162, - 172, 25, 5, 255, 82, 172, 25, 5, 74, 172, 25, 5, 236, 40, 172, 25, 5, - 245, 203, 172, 25, 5, 69, 172, 25, 5, 226, 238, 172, 25, 5, 78, 172, 25, - 5, 254, 210, 172, 25, 5, 253, 200, 172, 25, 5, 214, 214, 172, 117, 5, - 192, 172, 117, 5, 205, 172, 117, 5, 233, 141, 172, 117, 5, 212, 65, 172, - 1, 40, 235, 29, 172, 1, 40, 243, 209, 172, 1, 40, 229, 84, 172, 117, 5, - 40, 229, 84, 172, 1, 40, 250, 166, 172, 1, 40, 217, 153, 172, 1, 40, 230, - 30, 172, 1, 40, 226, 109, 172, 1, 40, 211, 117, 172, 1, 40, 153, 172, 1, - 40, 156, 172, 1, 40, 218, 228, 172, 117, 5, 40, 194, 172, 117, 5, 40, - 242, 67, 172, 21, 210, 86, 172, 21, 111, 172, 21, 105, 172, 21, 158, 172, - 21, 161, 172, 21, 190, 172, 21, 195, 172, 21, 199, 172, 21, 196, 172, 21, - 201, 172, 224, 144, 218, 253, 172, 224, 144, 248, 186, 172, 224, 144, 52, - 248, 186, 172, 224, 144, 215, 212, 248, 186, 68, 1, 234, 132, 243, 142, - 68, 1, 234, 132, 251, 41, 68, 1, 234, 132, 250, 165, 68, 1, 234, 132, - 235, 147, 68, 1, 234, 132, 235, 120, 68, 1, 234, 132, 227, 169, 68, 1, - 234, 132, 215, 157, 68, 1, 234, 132, 215, 145, 68, 1, 234, 132, 248, 143, - 68, 1, 234, 132, 248, 127, 68, 1, 234, 132, 248, 33, 68, 1, 234, 132, - 198, 68, 1, 234, 132, 206, 68, 1, 234, 132, 162, 68, 1, 234, 132, 241, - 196, 68, 1, 234, 132, 244, 204, 68, 58, 1, 234, 132, 223, 112, 68, 1, - 234, 132, 211, 165, 68, 1, 234, 132, 210, 116, 68, 1, 234, 132, 205, 68, - 232, 151, 234, 132, 227, 1, 68, 232, 151, 234, 132, 224, 46, 68, 232, - 151, 234, 132, 241, 128, 68, 16, 254, 199, 245, 38, 68, 16, 254, 199, - 111, 68, 16, 254, 199, 105, 68, 1, 254, 199, 205, 68, 5, 226, 27, 234, - 219, 216, 31, 39, 208, 1, 121, 234, 34, 39, 208, 1, 125, 234, 34, 39, - 208, 1, 121, 234, 111, 39, 208, 1, 125, 234, 111, 39, 208, 1, 121, 234, - 120, 39, 208, 1, 125, 234, 120, 39, 208, 1, 121, 242, 181, 39, 208, 1, - 125, 242, 181, 39, 208, 1, 121, 229, 9, 39, 208, 1, 125, 229, 9, 39, 208, - 1, 121, 249, 246, 39, 208, 1, 125, 249, 246, 39, 208, 1, 121, 250, 94, - 39, 208, 1, 125, 250, 94, 39, 208, 1, 121, 219, 60, 39, 208, 1, 125, 219, - 60, 39, 208, 1, 121, 227, 138, 39, 208, 1, 125, 227, 138, 39, 208, 1, - 121, 247, 153, 39, 208, 1, 125, 247, 153, 39, 208, 1, 121, 112, 39, 208, - 1, 125, 112, 39, 208, 1, 121, 216, 157, 39, 208, 1, 125, 216, 157, 39, - 208, 1, 121, 228, 79, 39, 208, 1, 125, 228, 79, 39, 208, 1, 121, 251, - 213, 39, 208, 1, 125, 251, 213, 39, 208, 1, 121, 225, 19, 39, 208, 1, - 125, 225, 19, 39, 208, 1, 121, 225, 124, 39, 208, 1, 125, 225, 124, 39, - 208, 1, 121, 244, 51, 39, 208, 1, 125, 244, 51, 39, 208, 1, 121, 230, - 166, 39, 208, 1, 125, 230, 166, 39, 208, 1, 121, 210, 244, 39, 208, 1, - 125, 210, 244, 39, 208, 1, 121, 222, 213, 39, 208, 1, 125, 222, 213, 39, - 208, 1, 121, 232, 162, 39, 208, 1, 125, 232, 162, 39, 208, 1, 121, 213, - 138, 39, 208, 1, 125, 213, 138, 39, 208, 1, 121, 241, 75, 39, 208, 1, - 125, 241, 75, 39, 208, 1, 121, 78, 39, 208, 1, 125, 78, 39, 208, 231, - 209, 234, 236, 39, 208, 25, 255, 82, 39, 208, 25, 74, 39, 208, 25, 214, - 214, 39, 208, 25, 69, 39, 208, 25, 76, 39, 208, 25, 78, 39, 208, 231, - 209, 234, 114, 39, 208, 25, 240, 126, 39, 208, 25, 214, 213, 39, 208, 25, - 214, 229, 39, 208, 25, 253, 198, 39, 208, 25, 253, 175, 39, 208, 25, 254, - 131, 39, 208, 25, 254, 144, 39, 208, 138, 231, 209, 245, 188, 39, 208, - 138, 231, 209, 227, 210, 39, 208, 138, 231, 209, 216, 157, 39, 208, 138, - 231, 209, 219, 44, 39, 208, 16, 234, 19, 39, 208, 16, 227, 210, 39, 208, - 16, 221, 255, 39, 208, 16, 241, 76, 241, 71, 39, 208, 16, 234, 28, 234, - 27, 188, 187, 1, 76, 188, 187, 1, 78, 188, 187, 1, 250, 165, 188, 187, 1, - 227, 169, 188, 187, 1, 215, 157, 188, 187, 1, 215, 145, 188, 187, 1, 248, - 143, 188, 187, 1, 248, 127, 188, 187, 1, 228, 115, 188, 187, 1, 220, 104, - 188, 187, 1, 218, 225, 188, 187, 25, 5, 236, 40, 188, 187, 25, 5, 214, - 118, 188, 187, 25, 5, 255, 46, 188, 187, 25, 5, 253, 200, 188, 187, 25, - 5, 255, 39, 188, 187, 250, 133, 188, 187, 254, 215, 234, 104, 188, 187, - 254, 111, 188, 187, 3, 223, 77, 79, 188, 187, 211, 209, 223, 77, 79, 188, - 187, 25, 5, 213, 147, 188, 187, 213, 152, 29, 3, 215, 138, 29, 3, 215, - 141, 29, 3, 215, 144, 29, 3, 215, 142, 29, 3, 215, 143, 29, 3, 215, 140, - 29, 3, 248, 121, 29, 3, 248, 123, 29, 3, 248, 126, 29, 3, 248, 124, 29, - 3, 248, 125, 29, 3, 248, 122, 29, 3, 246, 36, 29, 3, 246, 39, 29, 3, 246, - 45, 29, 3, 246, 43, 29, 3, 246, 44, 29, 3, 246, 37, 29, 3, 250, 212, 29, - 3, 250, 206, 29, 3, 250, 208, 29, 3, 250, 211, 29, 3, 250, 209, 29, 3, - 250, 210, 29, 3, 250, 207, 29, 3, 252, 119, 29, 3, 252, 98, 29, 3, 252, - 110, 29, 3, 252, 118, 29, 3, 252, 113, 29, 3, 252, 114, 29, 3, 252, 102, - 188, 187, 1, 234, 25, 188, 187, 1, 221, 255, 188, 187, 1, 233, 115, 188, - 187, 1, 230, 177, 188, 187, 1, 191, 188, 187, 1, 198, 188, 187, 1, 250, - 110, 188, 187, 1, 216, 91, 188, 187, 1, 234, 107, 188, 187, 1, 228, 255, - 188, 187, 1, 216, 151, 188, 187, 1, 212, 60, 188, 187, 1, 211, 69, 188, - 187, 1, 240, 223, 188, 187, 1, 214, 190, 188, 187, 1, 74, 188, 187, 1, - 225, 145, 188, 187, 1, 253, 210, 188, 187, 1, 242, 174, 188, 187, 1, 235, - 118, 188, 187, 1, 223, 169, 188, 187, 1, 252, 199, 188, 187, 1, 235, 106, - 188, 187, 1, 247, 227, 188, 187, 1, 242, 228, 188, 187, 1, 248, 13, 188, - 187, 1, 252, 24, 188, 187, 1, 234, 26, 232, 134, 188, 187, 1, 233, 116, - 232, 134, 188, 187, 1, 230, 178, 232, 134, 188, 187, 1, 226, 94, 232, - 134, 188, 187, 1, 229, 234, 232, 134, 188, 187, 1, 216, 92, 232, 134, - 188, 187, 1, 229, 0, 232, 134, 188, 187, 1, 240, 161, 232, 134, 188, 187, - 25, 5, 226, 199, 188, 187, 25, 5, 236, 4, 188, 187, 25, 5, 254, 130, 188, - 187, 25, 5, 211, 38, 188, 187, 25, 5, 219, 34, 188, 187, 25, 5, 214, 187, - 188, 187, 25, 5, 250, 131, 188, 187, 25, 5, 227, 195, 188, 187, 250, 132, - 188, 187, 232, 90, 235, 156, 188, 187, 254, 54, 235, 156, 188, 187, 21, - 210, 86, 188, 187, 21, 111, 188, 187, 21, 105, 188, 187, 21, 158, 188, - 187, 21, 161, 188, 187, 21, 190, 188, 187, 21, 195, 188, 187, 21, 199, - 188, 187, 21, 196, 188, 187, 21, 201, 24, 143, 227, 81, 24, 143, 227, 86, - 24, 143, 210, 243, 24, 143, 210, 242, 24, 143, 210, 241, 24, 143, 215, - 23, 24, 143, 215, 26, 24, 143, 210, 210, 24, 143, 210, 206, 24, 143, 245, - 62, 24, 143, 245, 60, 24, 143, 245, 61, 24, 143, 245, 58, 24, 143, 240, - 151, 24, 143, 240, 150, 24, 143, 240, 148, 24, 143, 240, 149, 24, 143, - 240, 154, 24, 143, 240, 147, 24, 143, 240, 146, 24, 143, 240, 156, 24, - 143, 254, 41, 24, 143, 254, 40, 24, 90, 228, 224, 24, 90, 228, 230, 24, - 90, 218, 206, 24, 90, 218, 205, 24, 90, 216, 97, 24, 90, 216, 95, 24, 90, - 216, 94, 24, 90, 216, 100, 24, 90, 216, 101, 24, 90, 216, 93, 24, 90, - 223, 8, 24, 90, 223, 23, 24, 90, 218, 212, 24, 90, 223, 20, 24, 90, 223, - 10, 24, 90, 223, 12, 24, 90, 222, 255, 24, 90, 223, 0, 24, 90, 234, 224, - 24, 90, 230, 217, 24, 90, 230, 211, 24, 90, 218, 216, 24, 90, 230, 214, - 24, 90, 230, 220, 24, 90, 225, 79, 24, 90, 225, 88, 24, 90, 225, 92, 24, - 90, 218, 214, 24, 90, 225, 82, 24, 90, 225, 96, 24, 90, 225, 97, 24, 90, - 219, 142, 24, 90, 219, 145, 24, 90, 218, 210, 24, 90, 218, 208, 24, 90, - 219, 140, 24, 90, 219, 148, 24, 90, 219, 149, 24, 90, 219, 134, 24, 90, - 219, 147, 24, 90, 226, 34, 24, 90, 226, 35, 24, 90, 211, 24, 24, 90, 211, - 25, 24, 90, 250, 52, 24, 90, 250, 51, 24, 90, 218, 221, 24, 90, 225, 131, - 24, 90, 225, 130, 10, 14, 238, 31, 10, 14, 238, 30, 10, 14, 238, 29, 10, - 14, 238, 28, 10, 14, 238, 27, 10, 14, 238, 26, 10, 14, 238, 25, 10, 14, - 238, 24, 10, 14, 238, 23, 10, 14, 238, 22, 10, 14, 238, 21, 10, 14, 238, - 20, 10, 14, 238, 19, 10, 14, 238, 18, 10, 14, 238, 17, 10, 14, 238, 16, - 10, 14, 238, 15, 10, 14, 238, 14, 10, 14, 238, 13, 10, 14, 238, 12, 10, - 14, 238, 11, 10, 14, 238, 10, 10, 14, 238, 9, 10, 14, 238, 8, 10, 14, - 238, 7, 10, 14, 238, 6, 10, 14, 238, 5, 10, 14, 238, 4, 10, 14, 238, 3, - 10, 14, 238, 2, 10, 14, 238, 1, 10, 14, 238, 0, 10, 14, 237, 255, 10, 14, - 237, 254, 10, 14, 237, 253, 10, 14, 237, 252, 10, 14, 237, 251, 10, 14, - 237, 250, 10, 14, 237, 249, 10, 14, 237, 248, 10, 14, 237, 247, 10, 14, - 237, 246, 10, 14, 237, 245, 10, 14, 237, 244, 10, 14, 237, 243, 10, 14, - 237, 242, 10, 14, 237, 241, 10, 14, 237, 240, 10, 14, 237, 239, 10, 14, - 237, 238, 10, 14, 237, 237, 10, 14, 237, 236, 10, 14, 237, 235, 10, 14, - 237, 234, 10, 14, 237, 233, 10, 14, 237, 232, 10, 14, 237, 231, 10, 14, - 237, 230, 10, 14, 237, 229, 10, 14, 237, 228, 10, 14, 237, 227, 10, 14, - 237, 226, 10, 14, 237, 225, 10, 14, 237, 224, 10, 14, 237, 223, 10, 14, - 237, 222, 10, 14, 237, 221, 10, 14, 237, 220, 10, 14, 237, 219, 10, 14, - 237, 218, 10, 14, 237, 217, 10, 14, 237, 216, 10, 14, 237, 215, 10, 14, - 237, 214, 10, 14, 237, 213, 10, 14, 237, 212, 10, 14, 237, 211, 10, 14, - 237, 210, 10, 14, 237, 209, 10, 14, 237, 208, 10, 14, 237, 207, 10, 14, - 237, 206, 10, 14, 237, 205, 10, 14, 237, 204, 10, 14, 237, 203, 10, 14, - 237, 202, 10, 14, 237, 201, 10, 14, 237, 200, 10, 14, 237, 199, 10, 14, - 237, 198, 10, 14, 237, 197, 10, 14, 237, 196, 10, 14, 237, 195, 10, 14, - 237, 194, 10, 14, 237, 193, 10, 14, 237, 192, 10, 14, 237, 191, 10, 14, - 237, 190, 10, 14, 237, 189, 10, 14, 237, 188, 10, 14, 237, 187, 10, 14, - 237, 186, 10, 14, 237, 185, 10, 14, 237, 184, 10, 14, 237, 183, 10, 14, - 237, 182, 10, 14, 237, 181, 10, 14, 237, 180, 10, 14, 237, 179, 10, 14, - 237, 178, 10, 14, 237, 177, 10, 14, 237, 176, 10, 14, 237, 175, 10, 14, - 237, 174, 10, 14, 237, 173, 10, 14, 237, 172, 10, 14, 237, 171, 10, 14, - 237, 170, 10, 14, 237, 169, 10, 14, 237, 168, 10, 14, 237, 167, 10, 14, - 237, 166, 10, 14, 237, 165, 10, 14, 237, 164, 10, 14, 237, 163, 10, 14, - 237, 162, 10, 14, 237, 161, 10, 14, 237, 160, 10, 14, 237, 159, 10, 14, - 237, 158, 10, 14, 237, 157, 10, 14, 237, 156, 10, 14, 237, 155, 10, 14, - 237, 154, 10, 14, 237, 153, 10, 14, 237, 152, 10, 14, 237, 151, 10, 14, - 237, 150, 10, 14, 237, 149, 10, 14, 237, 148, 10, 14, 237, 147, 10, 14, - 237, 146, 10, 14, 237, 145, 10, 14, 237, 144, 10, 14, 237, 143, 10, 14, - 237, 142, 10, 14, 237, 141, 10, 14, 237, 140, 10, 14, 237, 139, 10, 14, - 237, 138, 10, 14, 237, 137, 10, 14, 237, 136, 10, 14, 237, 135, 10, 14, - 237, 134, 10, 14, 237, 133, 10, 14, 237, 132, 10, 14, 237, 131, 10, 14, - 237, 130, 10, 14, 237, 129, 10, 14, 237, 128, 10, 14, 237, 127, 10, 14, - 237, 126, 10, 14, 237, 125, 10, 14, 237, 124, 10, 14, 237, 123, 10, 14, - 237, 122, 10, 14, 237, 121, 10, 14, 237, 120, 10, 14, 237, 119, 10, 14, - 237, 118, 10, 14, 237, 117, 10, 14, 237, 116, 10, 14, 237, 115, 10, 14, - 237, 114, 10, 14, 237, 113, 10, 14, 237, 112, 10, 14, 237, 111, 10, 14, - 237, 110, 10, 14, 237, 109, 10, 14, 237, 108, 10, 14, 237, 107, 10, 14, - 237, 106, 10, 14, 237, 105, 10, 14, 237, 104, 10, 14, 237, 103, 10, 14, - 237, 102, 10, 14, 237, 101, 10, 14, 237, 100, 10, 14, 237, 99, 10, 14, - 237, 98, 10, 14, 237, 97, 10, 14, 237, 96, 10, 14, 237, 95, 10, 14, 237, - 94, 10, 14, 237, 93, 10, 14, 237, 92, 10, 14, 237, 91, 10, 14, 237, 90, - 10, 14, 237, 89, 10, 14, 237, 88, 10, 14, 237, 87, 10, 14, 237, 86, 10, - 14, 237, 85, 10, 14, 237, 84, 10, 14, 237, 83, 10, 14, 237, 82, 10, 14, - 237, 81, 10, 14, 237, 80, 10, 14, 237, 79, 10, 14, 237, 78, 10, 14, 237, - 77, 10, 14, 237, 76, 10, 14, 237, 75, 10, 14, 237, 74, 10, 14, 237, 73, - 10, 14, 237, 72, 10, 14, 237, 71, 10, 14, 237, 70, 10, 14, 237, 69, 10, - 14, 237, 68, 10, 14, 237, 67, 10, 14, 237, 66, 10, 14, 237, 65, 10, 14, - 237, 64, 10, 14, 237, 63, 10, 14, 237, 62, 10, 14, 237, 61, 10, 14, 237, - 60, 10, 14, 237, 59, 10, 14, 237, 58, 10, 14, 237, 57, 10, 14, 237, 56, - 10, 14, 237, 55, 10, 14, 237, 54, 10, 14, 237, 53, 10, 14, 237, 52, 10, - 14, 237, 51, 10, 14, 237, 50, 10, 14, 237, 49, 10, 14, 237, 48, 10, 14, - 237, 47, 10, 14, 237, 46, 10, 14, 237, 45, 10, 14, 237, 44, 10, 14, 237, - 43, 10, 14, 237, 42, 10, 14, 237, 41, 10, 14, 237, 40, 10, 14, 237, 39, - 10, 14, 237, 38, 10, 14, 237, 37, 10, 14, 237, 36, 10, 14, 237, 35, 10, - 14, 237, 34, 10, 14, 237, 33, 10, 14, 237, 32, 10, 14, 237, 31, 10, 14, - 237, 30, 10, 14, 237, 29, 10, 14, 237, 28, 10, 14, 237, 27, 10, 14, 237, - 26, 10, 14, 237, 25, 10, 14, 237, 24, 10, 14, 237, 23, 10, 14, 237, 22, - 10, 14, 237, 21, 10, 14, 237, 20, 10, 14, 237, 19, 10, 14, 237, 18, 10, - 14, 237, 17, 10, 14, 237, 16, 10, 14, 237, 15, 10, 14, 237, 14, 10, 14, - 237, 13, 10, 14, 237, 12, 10, 14, 237, 11, 10, 14, 237, 10, 10, 14, 237, - 9, 10, 14, 237, 8, 10, 14, 237, 7, 10, 14, 237, 6, 10, 14, 237, 5, 10, - 14, 237, 4, 10, 14, 237, 3, 10, 14, 237, 2, 10, 14, 237, 1, 10, 14, 237, - 0, 10, 14, 236, 255, 10, 14, 236, 254, 10, 14, 236, 253, 10, 14, 236, - 252, 10, 14, 236, 251, 10, 14, 236, 250, 10, 14, 236, 249, 10, 14, 236, - 248, 10, 14, 236, 247, 10, 14, 236, 246, 10, 14, 236, 245, 10, 14, 236, - 244, 10, 14, 236, 243, 10, 14, 236, 242, 10, 14, 236, 241, 10, 14, 236, - 240, 10, 14, 236, 239, 10, 14, 236, 238, 10, 14, 236, 237, 10, 14, 236, - 236, 10, 14, 236, 235, 10, 14, 236, 234, 10, 14, 236, 233, 10, 14, 236, - 232, 10, 14, 236, 231, 10, 14, 236, 230, 10, 14, 236, 229, 10, 14, 236, - 228, 10, 14, 236, 227, 10, 14, 236, 226, 10, 14, 236, 225, 10, 14, 236, - 224, 10, 14, 236, 223, 10, 14, 236, 222, 10, 14, 236, 221, 10, 14, 236, - 220, 10, 14, 236, 219, 10, 14, 236, 218, 10, 14, 236, 217, 10, 14, 236, - 216, 10, 14, 236, 215, 10, 14, 236, 214, 10, 14, 236, 213, 10, 14, 236, - 212, 10, 14, 236, 211, 10, 14, 236, 210, 10, 14, 236, 209, 10, 14, 236, - 208, 10, 14, 236, 207, 10, 14, 236, 206, 10, 14, 236, 205, 10, 14, 236, - 204, 10, 14, 236, 203, 10, 14, 236, 202, 10, 14, 236, 201, 10, 14, 236, - 200, 10, 14, 236, 199, 10, 14, 236, 198, 10, 14, 236, 197, 10, 14, 236, - 196, 10, 14, 236, 195, 10, 14, 236, 194, 10, 14, 236, 193, 10, 14, 236, - 192, 10, 14, 236, 191, 10, 14, 236, 190, 10, 14, 236, 189, 10, 14, 236, - 188, 10, 14, 236, 187, 10, 14, 236, 186, 10, 14, 236, 185, 10, 14, 236, - 184, 10, 14, 236, 183, 10, 14, 236, 182, 10, 14, 236, 181, 10, 14, 236, - 180, 10, 14, 236, 179, 10, 14, 236, 178, 10, 14, 236, 177, 10, 14, 236, - 176, 10, 14, 236, 175, 10, 14, 236, 174, 10, 14, 236, 173, 10, 14, 236, - 172, 10, 14, 236, 171, 10, 14, 236, 170, 10, 14, 236, 169, 10, 14, 236, - 168, 10, 14, 236, 167, 10, 14, 236, 166, 10, 14, 236, 165, 10, 14, 236, - 164, 10, 14, 236, 163, 10, 14, 236, 162, 10, 14, 236, 161, 10, 14, 236, - 160, 10, 14, 236, 159, 10, 14, 236, 158, 10, 14, 236, 157, 10, 14, 236, - 156, 10, 14, 236, 155, 10, 14, 236, 154, 10, 14, 236, 153, 10, 14, 236, - 152, 10, 14, 236, 151, 10, 14, 236, 150, 10, 14, 236, 149, 10, 14, 236, - 148, 10, 14, 236, 147, 10, 14, 236, 146, 10, 14, 236, 145, 10, 14, 236, - 144, 10, 14, 236, 143, 10, 14, 236, 142, 10, 14, 236, 141, 10, 14, 236, - 140, 10, 14, 236, 139, 10, 14, 236, 138, 10, 14, 236, 137, 10, 14, 236, - 136, 10, 14, 236, 135, 10, 14, 236, 134, 10, 14, 236, 133, 10, 14, 236, - 132, 10, 14, 236, 131, 10, 14, 236, 130, 10, 14, 236, 129, 10, 14, 236, - 128, 10, 14, 236, 127, 10, 14, 236, 126, 10, 14, 236, 125, 10, 14, 236, - 124, 10, 14, 236, 123, 10, 14, 236, 122, 10, 14, 236, 121, 10, 14, 236, - 120, 10, 14, 236, 119, 10, 14, 236, 118, 10, 14, 236, 117, 10, 14, 236, - 116, 10, 14, 236, 115, 10, 14, 236, 114, 10, 14, 236, 113, 10, 14, 236, - 112, 10, 14, 236, 111, 10, 14, 236, 110, 10, 14, 236, 109, 10, 14, 236, - 108, 10, 14, 236, 107, 10, 14, 236, 106, 10, 14, 236, 105, 10, 14, 236, - 104, 10, 14, 236, 103, 10, 14, 236, 102, 10, 14, 236, 101, 10, 14, 236, - 100, 10, 14, 236, 99, 10, 14, 236, 98, 10, 14, 236, 97, 10, 14, 236, 96, - 10, 14, 236, 95, 10, 14, 236, 94, 10, 14, 236, 93, 10, 14, 236, 92, 10, - 14, 236, 91, 10, 14, 236, 90, 10, 14, 236, 89, 10, 14, 236, 88, 10, 14, - 236, 87, 10, 14, 236, 86, 10, 14, 236, 85, 10, 14, 236, 84, 10, 14, 236, - 83, 10, 14, 236, 82, 10, 14, 236, 81, 10, 14, 236, 80, 10, 14, 236, 79, - 10, 14, 236, 78, 10, 14, 236, 77, 10, 14, 236, 76, 10, 14, 236, 75, 10, - 14, 236, 74, 10, 14, 236, 73, 10, 14, 236, 72, 7, 4, 27, 244, 133, 7, 4, - 27, 244, 129, 7, 4, 27, 244, 84, 7, 4, 27, 244, 132, 7, 4, 27, 244, 131, - 7, 4, 27, 200, 222, 94, 217, 153, 7, 4, 27, 218, 170, 150, 4, 27, 231, - 64, 228, 44, 150, 4, 27, 231, 64, 245, 221, 150, 4, 27, 231, 64, 235, - 234, 150, 4, 27, 213, 180, 228, 44, 150, 4, 27, 231, 64, 211, 160, 94, 1, - 210, 234, 2, 241, 165, 94, 225, 14, 235, 56, 214, 11, 94, 27, 211, 6, - 210, 234, 210, 234, 225, 243, 94, 1, 254, 147, 253, 170, 94, 1, 211, 247, - 254, 179, 94, 1, 211, 247, 248, 197, 94, 1, 211, 247, 241, 245, 94, 1, - 211, 247, 235, 0, 94, 1, 211, 247, 233, 100, 94, 1, 211, 247, 40, 231, - 70, 94, 1, 211, 247, 223, 70, 94, 1, 211, 247, 217, 39, 94, 1, 254, 147, - 96, 50, 94, 1, 220, 23, 2, 220, 23, 247, 128, 94, 1, 220, 23, 2, 219, - 161, 247, 128, 94, 1, 220, 23, 2, 248, 216, 22, 220, 23, 247, 128, 94, 1, - 220, 23, 2, 248, 216, 22, 219, 161, 247, 128, 94, 1, 109, 2, 225, 243, - 94, 1, 109, 2, 224, 79, 94, 1, 109, 2, 231, 176, 94, 1, 252, 37, 2, 248, - 215, 94, 1, 242, 209, 2, 248, 215, 94, 1, 248, 198, 2, 248, 215, 94, 1, - 241, 246, 2, 231, 176, 94, 1, 214, 4, 2, 248, 215, 94, 1, 210, 98, 2, - 248, 215, 94, 1, 216, 232, 2, 248, 215, 94, 1, 210, 234, 2, 248, 215, 94, - 1, 40, 235, 1, 2, 248, 215, 94, 1, 235, 1, 2, 248, 215, 94, 1, 233, 101, - 2, 248, 215, 94, 1, 231, 71, 2, 248, 215, 94, 1, 227, 199, 2, 248, 215, - 94, 1, 221, 252, 2, 248, 215, 94, 1, 40, 225, 225, 2, 248, 215, 94, 1, - 225, 225, 2, 248, 215, 94, 1, 215, 181, 2, 248, 215, 94, 1, 224, 43, 2, - 248, 215, 94, 1, 223, 71, 2, 248, 215, 94, 1, 220, 23, 2, 248, 215, 94, - 1, 217, 40, 2, 248, 215, 94, 1, 214, 4, 2, 241, 68, 94, 1, 252, 37, 2, - 223, 172, 94, 1, 235, 1, 2, 223, 172, 94, 1, 225, 225, 2, 223, 172, 94, - 27, 109, 233, 100, 9, 1, 109, 212, 47, 53, 17, 9, 1, 109, 212, 47, 40, - 17, 9, 1, 252, 73, 53, 17, 9, 1, 252, 73, 40, 17, 9, 1, 252, 73, 65, 17, - 9, 1, 252, 73, 147, 17, 9, 1, 225, 209, 53, 17, 9, 1, 225, 209, 40, 17, - 9, 1, 225, 209, 65, 17, 9, 1, 225, 209, 147, 17, 9, 1, 252, 61, 53, 17, - 9, 1, 252, 61, 40, 17, 9, 1, 252, 61, 65, 17, 9, 1, 252, 61, 147, 17, 9, - 1, 215, 148, 53, 17, 9, 1, 215, 148, 40, 17, 9, 1, 215, 148, 65, 17, 9, - 1, 215, 148, 147, 17, 9, 1, 217, 7, 53, 17, 9, 1, 217, 7, 40, 17, 9, 1, - 217, 7, 65, 17, 9, 1, 217, 7, 147, 17, 9, 1, 215, 150, 53, 17, 9, 1, 215, - 150, 40, 17, 9, 1, 215, 150, 65, 17, 9, 1, 215, 150, 147, 17, 9, 1, 213, - 249, 53, 17, 9, 1, 213, 249, 40, 17, 9, 1, 213, 249, 65, 17, 9, 1, 213, - 249, 147, 17, 9, 1, 225, 207, 53, 17, 9, 1, 225, 207, 40, 17, 9, 1, 225, - 207, 65, 17, 9, 1, 225, 207, 147, 17, 9, 1, 246, 52, 53, 17, 9, 1, 246, - 52, 40, 17, 9, 1, 246, 52, 65, 17, 9, 1, 246, 52, 147, 17, 9, 1, 227, - 158, 53, 17, 9, 1, 227, 158, 40, 17, 9, 1, 227, 158, 65, 17, 9, 1, 227, - 158, 147, 17, 9, 1, 217, 28, 53, 17, 9, 1, 217, 28, 40, 17, 9, 1, 217, - 28, 65, 17, 9, 1, 217, 28, 147, 17, 9, 1, 217, 26, 53, 17, 9, 1, 217, 26, - 40, 17, 9, 1, 217, 26, 65, 17, 9, 1, 217, 26, 147, 17, 9, 1, 248, 141, - 53, 17, 9, 1, 248, 141, 40, 17, 9, 1, 248, 210, 53, 17, 9, 1, 248, 210, - 40, 17, 9, 1, 246, 79, 53, 17, 9, 1, 246, 79, 40, 17, 9, 1, 248, 139, 53, - 17, 9, 1, 248, 139, 40, 17, 9, 1, 235, 127, 53, 17, 9, 1, 235, 127, 40, - 17, 9, 1, 222, 174, 53, 17, 9, 1, 222, 174, 40, 17, 9, 1, 234, 181, 53, - 17, 9, 1, 234, 181, 40, 17, 9, 1, 234, 181, 65, 17, 9, 1, 234, 181, 147, - 17, 9, 1, 243, 130, 53, 17, 9, 1, 243, 130, 40, 17, 9, 1, 243, 130, 65, - 17, 9, 1, 243, 130, 147, 17, 9, 1, 242, 109, 53, 17, 9, 1, 242, 109, 40, - 17, 9, 1, 242, 109, 65, 17, 9, 1, 242, 109, 147, 17, 9, 1, 229, 8, 53, - 17, 9, 1, 229, 8, 40, 17, 9, 1, 229, 8, 65, 17, 9, 1, 229, 8, 147, 17, 9, - 1, 228, 68, 242, 226, 53, 17, 9, 1, 228, 68, 242, 226, 40, 17, 9, 1, 222, - 217, 53, 17, 9, 1, 222, 217, 40, 17, 9, 1, 222, 217, 65, 17, 9, 1, 222, - 217, 147, 17, 9, 1, 241, 226, 2, 77, 72, 53, 17, 9, 1, 241, 226, 2, 77, - 72, 40, 17, 9, 1, 241, 226, 242, 179, 53, 17, 9, 1, 241, 226, 242, 179, - 40, 17, 9, 1, 241, 226, 242, 179, 65, 17, 9, 1, 241, 226, 242, 179, 147, - 17, 9, 1, 241, 226, 247, 150, 53, 17, 9, 1, 241, 226, 247, 150, 40, 17, - 9, 1, 241, 226, 247, 150, 65, 17, 9, 1, 241, 226, 247, 150, 147, 17, 9, - 1, 77, 252, 141, 53, 17, 9, 1, 77, 252, 141, 40, 17, 9, 1, 77, 252, 141, - 2, 182, 72, 53, 17, 9, 1, 77, 252, 141, 2, 182, 72, 40, 17, 9, 16, 59, - 48, 9, 16, 59, 51, 9, 16, 113, 170, 48, 9, 16, 113, 170, 51, 9, 16, 134, - 170, 48, 9, 16, 134, 170, 51, 9, 16, 134, 170, 225, 10, 246, 112, 48, 9, - 16, 134, 170, 225, 10, 246, 112, 51, 9, 16, 244, 19, 170, 48, 9, 16, 244, - 19, 170, 51, 9, 16, 52, 67, 252, 149, 51, 9, 16, 113, 170, 213, 189, 48, - 9, 16, 113, 170, 213, 189, 51, 9, 16, 222, 236, 9, 16, 4, 217, 82, 48, 9, - 16, 4, 217, 82, 51, 9, 1, 229, 85, 53, 17, 9, 1, 229, 85, 40, 17, 9, 1, - 229, 85, 65, 17, 9, 1, 229, 85, 147, 17, 9, 1, 104, 53, 17, 9, 1, 104, - 40, 17, 9, 1, 226, 239, 53, 17, 9, 1, 226, 239, 40, 17, 9, 1, 210, 213, - 53, 17, 9, 1, 210, 213, 40, 17, 9, 1, 104, 2, 182, 72, 53, 17, 9, 1, 214, - 0, 53, 17, 9, 1, 214, 0, 40, 17, 9, 1, 234, 79, 226, 239, 53, 17, 9, 1, - 234, 79, 226, 239, 40, 17, 9, 1, 234, 79, 210, 213, 53, 17, 9, 1, 234, - 79, 210, 213, 40, 17, 9, 1, 160, 53, 17, 9, 1, 160, 40, 17, 9, 1, 160, - 65, 17, 9, 1, 160, 147, 17, 9, 1, 214, 207, 234, 192, 234, 79, 109, 231, - 198, 65, 17, 9, 1, 214, 207, 234, 192, 234, 79, 109, 231, 198, 147, 17, - 9, 27, 77, 2, 182, 72, 2, 109, 53, 17, 9, 27, 77, 2, 182, 72, 2, 109, 40, - 17, 9, 27, 77, 2, 182, 72, 2, 254, 253, 53, 17, 9, 27, 77, 2, 182, 72, 2, - 254, 253, 40, 17, 9, 27, 77, 2, 182, 72, 2, 212, 31, 53, 17, 9, 27, 77, - 2, 182, 72, 2, 212, 31, 40, 17, 9, 27, 77, 2, 182, 72, 2, 104, 53, 17, 9, - 27, 77, 2, 182, 72, 2, 104, 40, 17, 9, 27, 77, 2, 182, 72, 2, 226, 239, - 53, 17, 9, 27, 77, 2, 182, 72, 2, 226, 239, 40, 17, 9, 27, 77, 2, 182, - 72, 2, 210, 213, 53, 17, 9, 27, 77, 2, 182, 72, 2, 210, 213, 40, 17, 9, - 27, 77, 2, 182, 72, 2, 160, 53, 17, 9, 27, 77, 2, 182, 72, 2, 160, 40, - 17, 9, 27, 77, 2, 182, 72, 2, 160, 65, 17, 9, 27, 214, 207, 234, 79, 77, - 2, 182, 72, 2, 109, 231, 198, 53, 17, 9, 27, 214, 207, 234, 79, 77, 2, - 182, 72, 2, 109, 231, 198, 40, 17, 9, 27, 214, 207, 234, 79, 77, 2, 182, - 72, 2, 109, 231, 198, 65, 17, 9, 1, 244, 176, 77, 53, 17, 9, 1, 244, 176, - 77, 40, 17, 9, 1, 244, 176, 77, 65, 17, 9, 1, 244, 176, 77, 147, 17, 9, - 27, 77, 2, 182, 72, 2, 151, 53, 17, 9, 27, 77, 2, 182, 72, 2, 122, 53, - 17, 9, 27, 77, 2, 182, 72, 2, 66, 53, 17, 9, 27, 77, 2, 182, 72, 2, 109, - 231, 198, 53, 17, 9, 27, 77, 2, 182, 72, 2, 77, 53, 17, 9, 27, 252, 63, - 2, 151, 53, 17, 9, 27, 252, 63, 2, 122, 53, 17, 9, 27, 252, 63, 2, 234, - 136, 53, 17, 9, 27, 252, 63, 2, 66, 53, 17, 9, 27, 252, 63, 2, 109, 231, - 198, 53, 17, 9, 27, 252, 63, 2, 77, 53, 17, 9, 27, 217, 9, 2, 151, 53, - 17, 9, 27, 217, 9, 2, 122, 53, 17, 9, 27, 217, 9, 2, 234, 136, 53, 17, 9, - 27, 217, 9, 2, 66, 53, 17, 9, 27, 217, 9, 2, 109, 231, 198, 53, 17, 9, - 27, 217, 9, 2, 77, 53, 17, 9, 27, 216, 194, 2, 151, 53, 17, 9, 27, 216, - 194, 2, 66, 53, 17, 9, 27, 216, 194, 2, 109, 231, 198, 53, 17, 9, 27, - 216, 194, 2, 77, 53, 17, 9, 27, 151, 2, 122, 53, 17, 9, 27, 151, 2, 66, - 53, 17, 9, 27, 122, 2, 151, 53, 17, 9, 27, 122, 2, 66, 53, 17, 9, 27, - 234, 136, 2, 151, 53, 17, 9, 27, 234, 136, 2, 122, 53, 17, 9, 27, 234, - 136, 2, 66, 53, 17, 9, 27, 221, 169, 2, 151, 53, 17, 9, 27, 221, 169, 2, - 122, 53, 17, 9, 27, 221, 169, 2, 234, 136, 53, 17, 9, 27, 221, 169, 2, - 66, 53, 17, 9, 27, 222, 29, 2, 122, 53, 17, 9, 27, 222, 29, 2, 66, 53, - 17, 9, 27, 248, 225, 2, 151, 53, 17, 9, 27, 248, 225, 2, 122, 53, 17, 9, - 27, 248, 225, 2, 234, 136, 53, 17, 9, 27, 248, 225, 2, 66, 53, 17, 9, 27, - 217, 82, 2, 122, 53, 17, 9, 27, 217, 82, 2, 66, 53, 17, 9, 27, 210, 112, - 2, 66, 53, 17, 9, 27, 254, 206, 2, 151, 53, 17, 9, 27, 254, 206, 2, 66, - 53, 17, 9, 27, 242, 252, 2, 151, 53, 17, 9, 27, 242, 252, 2, 66, 53, 17, - 9, 27, 244, 151, 2, 151, 53, 17, 9, 27, 244, 151, 2, 122, 53, 17, 9, 27, - 244, 151, 2, 234, 136, 53, 17, 9, 27, 244, 151, 2, 66, 53, 17, 9, 27, - 244, 151, 2, 109, 231, 198, 53, 17, 9, 27, 244, 151, 2, 77, 53, 17, 9, - 27, 224, 85, 2, 122, 53, 17, 9, 27, 224, 85, 2, 66, 53, 17, 9, 27, 224, - 85, 2, 109, 231, 198, 53, 17, 9, 27, 224, 85, 2, 77, 53, 17, 9, 27, 235, - 1, 2, 109, 53, 17, 9, 27, 235, 1, 2, 151, 53, 17, 9, 27, 235, 1, 2, 122, - 53, 17, 9, 27, 235, 1, 2, 234, 136, 53, 17, 9, 27, 235, 1, 2, 233, 109, - 53, 17, 9, 27, 235, 1, 2, 66, 53, 17, 9, 27, 235, 1, 2, 109, 231, 198, - 53, 17, 9, 27, 235, 1, 2, 77, 53, 17, 9, 27, 233, 109, 2, 151, 53, 17, 9, - 27, 233, 109, 2, 122, 53, 17, 9, 27, 233, 109, 2, 234, 136, 53, 17, 9, - 27, 233, 109, 2, 66, 53, 17, 9, 27, 233, 109, 2, 109, 231, 198, 53, 17, - 9, 27, 233, 109, 2, 77, 53, 17, 9, 27, 66, 2, 151, 53, 17, 9, 27, 66, 2, - 122, 53, 17, 9, 27, 66, 2, 234, 136, 53, 17, 9, 27, 66, 2, 66, 53, 17, 9, - 27, 66, 2, 109, 231, 198, 53, 17, 9, 27, 66, 2, 77, 53, 17, 9, 27, 228, - 68, 2, 151, 53, 17, 9, 27, 228, 68, 2, 122, 53, 17, 9, 27, 228, 68, 2, - 234, 136, 53, 17, 9, 27, 228, 68, 2, 66, 53, 17, 9, 27, 228, 68, 2, 109, - 231, 198, 53, 17, 9, 27, 228, 68, 2, 77, 53, 17, 9, 27, 241, 226, 2, 151, - 53, 17, 9, 27, 241, 226, 2, 66, 53, 17, 9, 27, 241, 226, 2, 109, 231, - 198, 53, 17, 9, 27, 241, 226, 2, 77, 53, 17, 9, 27, 77, 2, 151, 53, 17, - 9, 27, 77, 2, 122, 53, 17, 9, 27, 77, 2, 234, 136, 53, 17, 9, 27, 77, 2, - 66, 53, 17, 9, 27, 77, 2, 109, 231, 198, 53, 17, 9, 27, 77, 2, 77, 53, - 17, 9, 27, 216, 204, 2, 218, 24, 109, 53, 17, 9, 27, 223, 99, 2, 218, 24, - 109, 53, 17, 9, 27, 109, 231, 198, 2, 218, 24, 109, 53, 17, 9, 27, 220, - 96, 2, 248, 191, 53, 17, 9, 27, 220, 96, 2, 234, 210, 53, 17, 9, 27, 220, - 96, 2, 244, 174, 53, 17, 9, 27, 220, 96, 2, 248, 193, 53, 17, 9, 27, 220, - 96, 2, 234, 212, 53, 17, 9, 27, 220, 96, 2, 218, 24, 109, 53, 17, 9, 27, - 77, 2, 182, 72, 2, 223, 99, 40, 17, 9, 27, 77, 2, 182, 72, 2, 210, 109, - 40, 17, 9, 27, 77, 2, 182, 72, 2, 66, 40, 17, 9, 27, 77, 2, 182, 72, 2, - 228, 68, 40, 17, 9, 27, 77, 2, 182, 72, 2, 109, 231, 198, 40, 17, 9, 27, - 77, 2, 182, 72, 2, 77, 40, 17, 9, 27, 252, 63, 2, 223, 99, 40, 17, 9, 27, - 252, 63, 2, 210, 109, 40, 17, 9, 27, 252, 63, 2, 66, 40, 17, 9, 27, 252, - 63, 2, 228, 68, 40, 17, 9, 27, 252, 63, 2, 109, 231, 198, 40, 17, 9, 27, - 252, 63, 2, 77, 40, 17, 9, 27, 217, 9, 2, 223, 99, 40, 17, 9, 27, 217, 9, - 2, 210, 109, 40, 17, 9, 27, 217, 9, 2, 66, 40, 17, 9, 27, 217, 9, 2, 228, - 68, 40, 17, 9, 27, 217, 9, 2, 109, 231, 198, 40, 17, 9, 27, 217, 9, 2, - 77, 40, 17, 9, 27, 216, 194, 2, 223, 99, 40, 17, 9, 27, 216, 194, 2, 210, - 109, 40, 17, 9, 27, 216, 194, 2, 66, 40, 17, 9, 27, 216, 194, 2, 228, 68, - 40, 17, 9, 27, 216, 194, 2, 109, 231, 198, 40, 17, 9, 27, 216, 194, 2, - 77, 40, 17, 9, 27, 244, 151, 2, 109, 231, 198, 40, 17, 9, 27, 244, 151, - 2, 77, 40, 17, 9, 27, 224, 85, 2, 109, 231, 198, 40, 17, 9, 27, 224, 85, - 2, 77, 40, 17, 9, 27, 235, 1, 2, 109, 40, 17, 9, 27, 235, 1, 2, 233, 109, - 40, 17, 9, 27, 235, 1, 2, 66, 40, 17, 9, 27, 235, 1, 2, 109, 231, 198, - 40, 17, 9, 27, 235, 1, 2, 77, 40, 17, 9, 27, 233, 109, 2, 66, 40, 17, 9, - 27, 233, 109, 2, 109, 231, 198, 40, 17, 9, 27, 233, 109, 2, 77, 40, 17, - 9, 27, 66, 2, 109, 40, 17, 9, 27, 66, 2, 66, 40, 17, 9, 27, 228, 68, 2, - 223, 99, 40, 17, 9, 27, 228, 68, 2, 210, 109, 40, 17, 9, 27, 228, 68, 2, - 66, 40, 17, 9, 27, 228, 68, 2, 228, 68, 40, 17, 9, 27, 228, 68, 2, 109, - 231, 198, 40, 17, 9, 27, 228, 68, 2, 77, 40, 17, 9, 27, 109, 231, 198, 2, - 218, 24, 109, 40, 17, 9, 27, 77, 2, 223, 99, 40, 17, 9, 27, 77, 2, 210, - 109, 40, 17, 9, 27, 77, 2, 66, 40, 17, 9, 27, 77, 2, 228, 68, 40, 17, 9, - 27, 77, 2, 109, 231, 198, 40, 17, 9, 27, 77, 2, 77, 40, 17, 9, 27, 77, 2, - 182, 72, 2, 151, 65, 17, 9, 27, 77, 2, 182, 72, 2, 122, 65, 17, 9, 27, - 77, 2, 182, 72, 2, 234, 136, 65, 17, 9, 27, 77, 2, 182, 72, 2, 66, 65, - 17, 9, 27, 77, 2, 182, 72, 2, 241, 226, 65, 17, 9, 27, 252, 63, 2, 151, - 65, 17, 9, 27, 252, 63, 2, 122, 65, 17, 9, 27, 252, 63, 2, 234, 136, 65, - 17, 9, 27, 252, 63, 2, 66, 65, 17, 9, 27, 252, 63, 2, 241, 226, 65, 17, - 9, 27, 217, 9, 2, 151, 65, 17, 9, 27, 217, 9, 2, 122, 65, 17, 9, 27, 217, - 9, 2, 234, 136, 65, 17, 9, 27, 217, 9, 2, 66, 65, 17, 9, 27, 217, 9, 2, - 241, 226, 65, 17, 9, 27, 216, 194, 2, 66, 65, 17, 9, 27, 151, 2, 122, 65, - 17, 9, 27, 151, 2, 66, 65, 17, 9, 27, 122, 2, 151, 65, 17, 9, 27, 122, 2, - 66, 65, 17, 9, 27, 234, 136, 2, 151, 65, 17, 9, 27, 234, 136, 2, 66, 65, - 17, 9, 27, 221, 169, 2, 151, 65, 17, 9, 27, 221, 169, 2, 122, 65, 17, 9, - 27, 221, 169, 2, 234, 136, 65, 17, 9, 27, 221, 169, 2, 66, 65, 17, 9, 27, - 222, 29, 2, 122, 65, 17, 9, 27, 222, 29, 2, 234, 136, 65, 17, 9, 27, 222, - 29, 2, 66, 65, 17, 9, 27, 248, 225, 2, 151, 65, 17, 9, 27, 248, 225, 2, - 122, 65, 17, 9, 27, 248, 225, 2, 234, 136, 65, 17, 9, 27, 248, 225, 2, - 66, 65, 17, 9, 27, 217, 82, 2, 122, 65, 17, 9, 27, 210, 112, 2, 66, 65, - 17, 9, 27, 254, 206, 2, 151, 65, 17, 9, 27, 254, 206, 2, 66, 65, 17, 9, - 27, 242, 252, 2, 151, 65, 17, 9, 27, 242, 252, 2, 66, 65, 17, 9, 27, 244, - 151, 2, 151, 65, 17, 9, 27, 244, 151, 2, 122, 65, 17, 9, 27, 244, 151, 2, - 234, 136, 65, 17, 9, 27, 244, 151, 2, 66, 65, 17, 9, 27, 224, 85, 2, 122, - 65, 17, 9, 27, 224, 85, 2, 66, 65, 17, 9, 27, 235, 1, 2, 151, 65, 17, 9, - 27, 235, 1, 2, 122, 65, 17, 9, 27, 235, 1, 2, 234, 136, 65, 17, 9, 27, - 235, 1, 2, 233, 109, 65, 17, 9, 27, 235, 1, 2, 66, 65, 17, 9, 27, 233, - 109, 2, 151, 65, 17, 9, 27, 233, 109, 2, 122, 65, 17, 9, 27, 233, 109, 2, - 234, 136, 65, 17, 9, 27, 233, 109, 2, 66, 65, 17, 9, 27, 233, 109, 2, - 241, 226, 65, 17, 9, 27, 66, 2, 151, 65, 17, 9, 27, 66, 2, 122, 65, 17, - 9, 27, 66, 2, 234, 136, 65, 17, 9, 27, 66, 2, 66, 65, 17, 9, 27, 228, 68, - 2, 151, 65, 17, 9, 27, 228, 68, 2, 122, 65, 17, 9, 27, 228, 68, 2, 234, - 136, 65, 17, 9, 27, 228, 68, 2, 66, 65, 17, 9, 27, 228, 68, 2, 241, 226, - 65, 17, 9, 27, 241, 226, 2, 151, 65, 17, 9, 27, 241, 226, 2, 66, 65, 17, - 9, 27, 241, 226, 2, 218, 24, 109, 65, 17, 9, 27, 77, 2, 151, 65, 17, 9, - 27, 77, 2, 122, 65, 17, 9, 27, 77, 2, 234, 136, 65, 17, 9, 27, 77, 2, 66, - 65, 17, 9, 27, 77, 2, 241, 226, 65, 17, 9, 27, 77, 2, 182, 72, 2, 66, - 147, 17, 9, 27, 77, 2, 182, 72, 2, 241, 226, 147, 17, 9, 27, 252, 63, 2, - 66, 147, 17, 9, 27, 252, 63, 2, 241, 226, 147, 17, 9, 27, 217, 9, 2, 66, - 147, 17, 9, 27, 217, 9, 2, 241, 226, 147, 17, 9, 27, 216, 194, 2, 66, - 147, 17, 9, 27, 216, 194, 2, 241, 226, 147, 17, 9, 27, 221, 169, 2, 66, - 147, 17, 9, 27, 221, 169, 2, 241, 226, 147, 17, 9, 27, 220, 62, 2, 66, - 147, 17, 9, 27, 220, 62, 2, 241, 226, 147, 17, 9, 27, 235, 1, 2, 233, - 109, 147, 17, 9, 27, 235, 1, 2, 66, 147, 17, 9, 27, 233, 109, 2, 66, 147, - 17, 9, 27, 228, 68, 2, 66, 147, 17, 9, 27, 228, 68, 2, 241, 226, 147, 17, - 9, 27, 77, 2, 66, 147, 17, 9, 27, 77, 2, 241, 226, 147, 17, 9, 27, 220, - 96, 2, 244, 174, 147, 17, 9, 27, 220, 96, 2, 248, 193, 147, 17, 9, 27, - 220, 96, 2, 234, 212, 147, 17, 9, 27, 217, 82, 2, 109, 231, 198, 53, 17, - 9, 27, 217, 82, 2, 77, 53, 17, 9, 27, 254, 206, 2, 109, 231, 198, 53, 17, - 9, 27, 254, 206, 2, 77, 53, 17, 9, 27, 242, 252, 2, 109, 231, 198, 53, - 17, 9, 27, 242, 252, 2, 77, 53, 17, 9, 27, 221, 169, 2, 109, 231, 198, - 53, 17, 9, 27, 221, 169, 2, 77, 53, 17, 9, 27, 220, 62, 2, 109, 231, 198, - 53, 17, 9, 27, 220, 62, 2, 77, 53, 17, 9, 27, 122, 2, 109, 231, 198, 53, - 17, 9, 27, 122, 2, 77, 53, 17, 9, 27, 151, 2, 109, 231, 198, 53, 17, 9, - 27, 151, 2, 77, 53, 17, 9, 27, 234, 136, 2, 109, 231, 198, 53, 17, 9, 27, - 234, 136, 2, 77, 53, 17, 9, 27, 222, 29, 2, 109, 231, 198, 53, 17, 9, 27, - 222, 29, 2, 77, 53, 17, 9, 27, 248, 225, 2, 109, 231, 198, 53, 17, 9, 27, - 248, 225, 2, 77, 53, 17, 9, 27, 220, 62, 2, 151, 53, 17, 9, 27, 220, 62, - 2, 122, 53, 17, 9, 27, 220, 62, 2, 234, 136, 53, 17, 9, 27, 220, 62, 2, - 66, 53, 17, 9, 27, 220, 62, 2, 223, 99, 53, 17, 9, 27, 221, 169, 2, 223, - 99, 53, 17, 9, 27, 222, 29, 2, 223, 99, 53, 17, 9, 27, 248, 225, 2, 223, - 99, 53, 17, 9, 27, 217, 82, 2, 109, 231, 198, 40, 17, 9, 27, 217, 82, 2, - 77, 40, 17, 9, 27, 254, 206, 2, 109, 231, 198, 40, 17, 9, 27, 254, 206, - 2, 77, 40, 17, 9, 27, 242, 252, 2, 109, 231, 198, 40, 17, 9, 27, 242, - 252, 2, 77, 40, 17, 9, 27, 221, 169, 2, 109, 231, 198, 40, 17, 9, 27, - 221, 169, 2, 77, 40, 17, 9, 27, 220, 62, 2, 109, 231, 198, 40, 17, 9, 27, - 220, 62, 2, 77, 40, 17, 9, 27, 122, 2, 109, 231, 198, 40, 17, 9, 27, 122, - 2, 77, 40, 17, 9, 27, 151, 2, 109, 231, 198, 40, 17, 9, 27, 151, 2, 77, - 40, 17, 9, 27, 234, 136, 2, 109, 231, 198, 40, 17, 9, 27, 234, 136, 2, - 77, 40, 17, 9, 27, 222, 29, 2, 109, 231, 198, 40, 17, 9, 27, 222, 29, 2, - 77, 40, 17, 9, 27, 248, 225, 2, 109, 231, 198, 40, 17, 9, 27, 248, 225, - 2, 77, 40, 17, 9, 27, 220, 62, 2, 151, 40, 17, 9, 27, 220, 62, 2, 122, - 40, 17, 9, 27, 220, 62, 2, 234, 136, 40, 17, 9, 27, 220, 62, 2, 66, 40, - 17, 9, 27, 220, 62, 2, 223, 99, 40, 17, 9, 27, 221, 169, 2, 223, 99, 40, - 17, 9, 27, 222, 29, 2, 223, 99, 40, 17, 9, 27, 248, 225, 2, 223, 99, 40, - 17, 9, 27, 220, 62, 2, 151, 65, 17, 9, 27, 220, 62, 2, 122, 65, 17, 9, - 27, 220, 62, 2, 234, 136, 65, 17, 9, 27, 220, 62, 2, 66, 65, 17, 9, 27, - 221, 169, 2, 241, 226, 65, 17, 9, 27, 220, 62, 2, 241, 226, 65, 17, 9, - 27, 217, 82, 2, 66, 65, 17, 9, 27, 221, 169, 2, 151, 147, 17, 9, 27, 221, - 169, 2, 122, 147, 17, 9, 27, 221, 169, 2, 234, 136, 147, 17, 9, 27, 220, - 62, 2, 151, 147, 17, 9, 27, 220, 62, 2, 122, 147, 17, 9, 27, 220, 62, 2, - 234, 136, 147, 17, 9, 27, 217, 82, 2, 66, 147, 17, 9, 27, 210, 112, 2, - 66, 147, 17, 9, 27, 109, 2, 244, 172, 40, 17, 9, 27, 109, 2, 244, 172, - 53, 17, 226, 150, 43, 226, 7, 226, 150, 44, 226, 7, 9, 27, 217, 9, 2, - 151, 2, 66, 65, 17, 9, 27, 217, 9, 2, 122, 2, 151, 40, 17, 9, 27, 217, 9, - 2, 122, 2, 151, 65, 17, 9, 27, 217, 9, 2, 122, 2, 66, 65, 17, 9, 27, 217, - 9, 2, 234, 136, 2, 66, 65, 17, 9, 27, 217, 9, 2, 66, 2, 151, 65, 17, 9, - 27, 217, 9, 2, 66, 2, 122, 65, 17, 9, 27, 217, 9, 2, 66, 2, 234, 136, 65, - 17, 9, 27, 151, 2, 66, 2, 122, 40, 17, 9, 27, 151, 2, 66, 2, 122, 65, 17, - 9, 27, 122, 2, 66, 2, 77, 40, 17, 9, 27, 122, 2, 66, 2, 109, 231, 198, - 40, 17, 9, 27, 221, 169, 2, 122, 2, 151, 65, 17, 9, 27, 221, 169, 2, 151, - 2, 122, 65, 17, 9, 27, 221, 169, 2, 151, 2, 109, 231, 198, 40, 17, 9, 27, - 221, 169, 2, 66, 2, 122, 40, 17, 9, 27, 221, 169, 2, 66, 2, 122, 65, 17, - 9, 27, 221, 169, 2, 66, 2, 151, 65, 17, 9, 27, 221, 169, 2, 66, 2, 66, - 40, 17, 9, 27, 221, 169, 2, 66, 2, 66, 65, 17, 9, 27, 222, 29, 2, 122, 2, - 122, 40, 17, 9, 27, 222, 29, 2, 122, 2, 122, 65, 17, 9, 27, 222, 29, 2, - 66, 2, 66, 40, 17, 9, 27, 220, 62, 2, 122, 2, 66, 40, 17, 9, 27, 220, 62, - 2, 122, 2, 66, 65, 17, 9, 27, 220, 62, 2, 151, 2, 77, 40, 17, 9, 27, 220, - 62, 2, 66, 2, 234, 136, 40, 17, 9, 27, 220, 62, 2, 66, 2, 234, 136, 65, - 17, 9, 27, 220, 62, 2, 66, 2, 66, 40, 17, 9, 27, 220, 62, 2, 66, 2, 66, - 65, 17, 9, 27, 248, 225, 2, 122, 2, 109, 231, 198, 40, 17, 9, 27, 248, - 225, 2, 234, 136, 2, 66, 40, 17, 9, 27, 248, 225, 2, 234, 136, 2, 66, 65, - 17, 9, 27, 217, 82, 2, 66, 2, 122, 40, 17, 9, 27, 217, 82, 2, 66, 2, 122, - 65, 17, 9, 27, 217, 82, 2, 66, 2, 66, 65, 17, 9, 27, 217, 82, 2, 66, 2, - 77, 40, 17, 9, 27, 254, 206, 2, 151, 2, 66, 40, 17, 9, 27, 254, 206, 2, - 66, 2, 66, 40, 17, 9, 27, 254, 206, 2, 66, 2, 66, 65, 17, 9, 27, 254, - 206, 2, 66, 2, 109, 231, 198, 40, 17, 9, 27, 242, 252, 2, 66, 2, 66, 40, - 17, 9, 27, 242, 252, 2, 66, 2, 77, 40, 17, 9, 27, 242, 252, 2, 66, 2, - 109, 231, 198, 40, 17, 9, 27, 244, 151, 2, 234, 136, 2, 66, 40, 17, 9, - 27, 244, 151, 2, 234, 136, 2, 66, 65, 17, 9, 27, 224, 85, 2, 66, 2, 122, - 40, 17, 9, 27, 224, 85, 2, 66, 2, 66, 40, 17, 9, 27, 233, 109, 2, 122, 2, - 66, 40, 17, 9, 27, 233, 109, 2, 122, 2, 77, 40, 17, 9, 27, 233, 109, 2, - 122, 2, 109, 231, 198, 40, 17, 9, 27, 233, 109, 2, 151, 2, 151, 65, 17, - 9, 27, 233, 109, 2, 151, 2, 151, 40, 17, 9, 27, 233, 109, 2, 234, 136, 2, - 66, 40, 17, 9, 27, 233, 109, 2, 234, 136, 2, 66, 65, 17, 9, 27, 233, 109, - 2, 66, 2, 122, 40, 17, 9, 27, 233, 109, 2, 66, 2, 122, 65, 17, 9, 27, 66, - 2, 122, 2, 151, 65, 17, 9, 27, 66, 2, 122, 2, 66, 65, 17, 9, 27, 66, 2, - 122, 2, 77, 40, 17, 9, 27, 66, 2, 151, 2, 122, 65, 17, 9, 27, 66, 2, 151, - 2, 66, 65, 17, 9, 27, 66, 2, 234, 136, 2, 151, 65, 17, 9, 27, 66, 2, 234, - 136, 2, 66, 65, 17, 9, 27, 66, 2, 151, 2, 234, 136, 65, 17, 9, 27, 241, - 226, 2, 66, 2, 151, 65, 17, 9, 27, 241, 226, 2, 66, 2, 66, 65, 17, 9, 27, - 228, 68, 2, 122, 2, 66, 65, 17, 9, 27, 228, 68, 2, 122, 2, 109, 231, 198, - 40, 17, 9, 27, 228, 68, 2, 151, 2, 66, 40, 17, 9, 27, 228, 68, 2, 151, 2, - 66, 65, 17, 9, 27, 228, 68, 2, 151, 2, 109, 231, 198, 40, 17, 9, 27, 228, - 68, 2, 66, 2, 77, 40, 17, 9, 27, 228, 68, 2, 66, 2, 109, 231, 198, 40, - 17, 9, 27, 77, 2, 66, 2, 66, 40, 17, 9, 27, 77, 2, 66, 2, 66, 65, 17, 9, - 27, 252, 63, 2, 234, 136, 2, 77, 40, 17, 9, 27, 217, 9, 2, 151, 2, 77, - 40, 17, 9, 27, 217, 9, 2, 151, 2, 109, 231, 198, 40, 17, 9, 27, 217, 9, - 2, 234, 136, 2, 77, 40, 17, 9, 27, 217, 9, 2, 234, 136, 2, 109, 231, 198, - 40, 17, 9, 27, 217, 9, 2, 66, 2, 77, 40, 17, 9, 27, 217, 9, 2, 66, 2, - 109, 231, 198, 40, 17, 9, 27, 151, 2, 66, 2, 77, 40, 17, 9, 27, 151, 2, - 122, 2, 109, 231, 198, 40, 17, 9, 27, 151, 2, 66, 2, 109, 231, 198, 40, - 17, 9, 27, 221, 169, 2, 234, 136, 2, 109, 231, 198, 40, 17, 9, 27, 222, - 29, 2, 122, 2, 77, 40, 17, 9, 27, 220, 62, 2, 122, 2, 77, 40, 17, 9, 27, - 248, 225, 2, 122, 2, 77, 40, 17, 9, 27, 233, 109, 2, 151, 2, 77, 40, 17, - 9, 27, 233, 109, 2, 66, 2, 77, 40, 17, 9, 27, 77, 2, 122, 2, 77, 40, 17, - 9, 27, 77, 2, 151, 2, 77, 40, 17, 9, 27, 77, 2, 66, 2, 77, 40, 17, 9, 27, - 66, 2, 66, 2, 77, 40, 17, 9, 27, 224, 85, 2, 66, 2, 77, 40, 17, 9, 27, - 228, 68, 2, 122, 2, 77, 40, 17, 9, 27, 224, 85, 2, 66, 2, 122, 65, 17, 9, - 27, 233, 109, 2, 122, 2, 66, 65, 17, 9, 27, 254, 206, 2, 66, 2, 77, 40, - 17, 9, 27, 235, 1, 2, 66, 2, 77, 40, 17, 9, 27, 228, 68, 2, 151, 2, 122, - 65, 17, 9, 27, 66, 2, 234, 136, 2, 77, 40, 17, 9, 27, 233, 109, 2, 151, - 2, 66, 65, 17, 9, 27, 235, 1, 2, 66, 2, 66, 40, 17, 9, 27, 233, 109, 2, - 151, 2, 66, 40, 17, 9, 27, 228, 68, 2, 151, 2, 122, 40, 17, 9, 27, 151, - 2, 122, 2, 77, 40, 17, 9, 27, 122, 2, 151, 2, 77, 40, 17, 9, 27, 66, 2, - 151, 2, 77, 40, 17, 9, 27, 244, 151, 2, 66, 2, 77, 40, 17, 9, 27, 252, - 63, 2, 122, 2, 77, 40, 17, 9, 27, 235, 1, 2, 66, 2, 66, 65, 17, 9, 27, - 254, 206, 2, 151, 2, 66, 65, 17, 9, 27, 222, 29, 2, 66, 2, 66, 65, 17, 9, - 27, 221, 169, 2, 234, 136, 2, 77, 40, 17, 9, 27, 228, 68, 2, 151, 2, 77, - 40, 17, 9, 27, 222, 6, 214, 128, 253, 246, 234, 10, 218, 132, 5, 53, 17, - 9, 27, 224, 81, 214, 128, 253, 246, 234, 10, 218, 132, 5, 53, 17, 9, 27, - 254, 162, 53, 17, 9, 27, 254, 192, 53, 17, 9, 27, 230, 158, 53, 17, 9, - 27, 222, 7, 53, 17, 9, 27, 223, 146, 53, 17, 9, 27, 254, 181, 53, 17, 9, - 27, 212, 49, 53, 17, 9, 27, 222, 6, 53, 17, 9, 27, 222, 5, 254, 181, 212, - 48, 9, 27, 235, 140, 223, 37, 50, 9, 27, 251, 238, 254, 47, 254, 48, 45, - 221, 158, 45, 221, 47, 45, 220, 235, 45, 220, 224, 45, 220, 213, 45, 220, - 202, 45, 220, 191, 45, 220, 180, 45, 220, 169, 45, 221, 157, 45, 221, - 146, 45, 221, 135, 45, 221, 124, 45, 221, 113, 45, 221, 102, 45, 221, 91, - 224, 197, 244, 28, 31, 67, 249, 227, 224, 197, 244, 28, 31, 67, 110, 249, - 227, 224, 197, 244, 28, 31, 67, 110, 243, 236, 218, 131, 224, 197, 244, - 28, 31, 67, 249, 234, 224, 197, 244, 28, 31, 67, 220, 152, 224, 197, 244, - 28, 31, 67, 245, 39, 79, 224, 197, 244, 28, 31, 67, 224, 16, 79, 224, - 197, 244, 28, 31, 67, 43, 71, 233, 26, 127, 224, 197, 244, 28, 31, 67, - 44, 71, 233, 26, 251, 164, 224, 197, 244, 28, 31, 67, 203, 245, 171, 38, - 27, 43, 242, 34, 38, 27, 44, 242, 34, 38, 52, 216, 90, 43, 242, 34, 38, - 52, 216, 90, 44, 242, 34, 38, 231, 238, 43, 242, 34, 38, 231, 238, 44, - 242, 34, 38, 249, 205, 231, 237, 224, 197, 244, 28, 31, 67, 113, 59, 233, - 62, 224, 197, 244, 28, 31, 67, 245, 168, 248, 164, 224, 197, 244, 28, 31, - 67, 245, 159, 248, 164, 224, 197, 244, 28, 31, 67, 121, 232, 219, 224, - 197, 244, 28, 31, 67, 212, 32, 121, 232, 219, 224, 197, 244, 28, 31, 67, - 43, 226, 7, 224, 197, 244, 28, 31, 67, 44, 226, 7, 224, 197, 244, 28, 31, - 67, 43, 249, 107, 127, 224, 197, 244, 28, 31, 67, 44, 249, 107, 127, 224, - 197, 244, 28, 31, 67, 43, 216, 7, 220, 55, 127, 224, 197, 244, 28, 31, - 67, 44, 216, 7, 220, 55, 127, 224, 197, 244, 28, 31, 67, 43, 85, 233, 26, - 127, 224, 197, 244, 28, 31, 67, 44, 85, 233, 26, 127, 224, 197, 244, 28, - 31, 67, 43, 52, 254, 118, 127, 224, 197, 244, 28, 31, 67, 44, 52, 254, - 118, 127, 224, 197, 244, 28, 31, 67, 43, 254, 118, 127, 224, 197, 244, - 28, 31, 67, 44, 254, 118, 127, 224, 197, 244, 28, 31, 67, 43, 249, 169, - 127, 224, 197, 244, 28, 31, 67, 44, 249, 169, 127, 224, 197, 244, 28, 31, - 67, 43, 71, 249, 169, 127, 224, 197, 244, 28, 31, 67, 44, 71, 249, 169, - 127, 220, 133, 247, 128, 71, 220, 133, 247, 128, 224, 197, 244, 28, 31, - 67, 43, 42, 127, 224, 197, 244, 28, 31, 67, 44, 42, 127, 248, 163, 226, - 123, 250, 180, 226, 123, 212, 32, 226, 123, 52, 212, 32, 226, 123, 248, - 163, 121, 232, 219, 250, 180, 121, 232, 219, 212, 32, 121, 232, 219, 4, - 249, 227, 4, 110, 249, 227, 4, 243, 236, 218, 131, 4, 220, 152, 4, 249, - 234, 4, 224, 16, 79, 4, 245, 39, 79, 4, 245, 168, 248, 164, 4, 43, 226, - 7, 4, 44, 226, 7, 4, 43, 249, 107, 127, 4, 44, 249, 107, 127, 4, 43, 216, - 7, 220, 55, 127, 4, 44, 216, 7, 220, 55, 127, 4, 54, 50, 4, 254, 134, 4, - 253, 224, 4, 96, 50, 4, 240, 174, 4, 233, 21, 50, 4, 242, 137, 50, 4, - 245, 106, 50, 4, 223, 53, 219, 48, 4, 247, 140, 50, 4, 225, 185, 50, 4, - 249, 225, 253, 214, 9, 244, 172, 53, 17, 9, 217, 45, 2, 244, 172, 48, 9, - 248, 191, 53, 17, 9, 217, 79, 244, 9, 9, 234, 210, 53, 17, 9, 244, 174, - 53, 17, 9, 244, 174, 147, 17, 9, 248, 193, 53, 17, 9, 248, 193, 147, 17, - 9, 234, 212, 53, 17, 9, 234, 212, 147, 17, 9, 220, 96, 53, 17, 9, 220, - 96, 147, 17, 9, 218, 47, 53, 17, 9, 218, 47, 147, 17, 9, 1, 182, 53, 17, - 9, 1, 109, 2, 231, 233, 72, 53, 17, 9, 1, 109, 2, 231, 233, 72, 40, 17, - 9, 1, 109, 2, 182, 72, 53, 17, 9, 1, 109, 2, 182, 72, 40, 17, 9, 1, 212, - 31, 2, 182, 72, 53, 17, 9, 1, 212, 31, 2, 182, 72, 40, 17, 9, 1, 109, 2, - 182, 252, 51, 53, 17, 9, 1, 109, 2, 182, 252, 51, 40, 17, 9, 1, 77, 2, - 182, 72, 53, 17, 9, 1, 77, 2, 182, 72, 40, 17, 9, 1, 77, 2, 182, 72, 65, - 17, 9, 1, 77, 2, 182, 72, 147, 17, 9, 1, 109, 53, 17, 9, 1, 109, 40, 17, - 9, 1, 252, 63, 53, 17, 9, 1, 252, 63, 40, 17, 9, 1, 252, 63, 65, 17, 9, - 1, 252, 63, 147, 17, 9, 1, 217, 9, 231, 170, 53, 17, 9, 1, 217, 9, 231, - 170, 40, 17, 9, 1, 217, 9, 53, 17, 9, 1, 217, 9, 40, 17, 9, 1, 217, 9, - 65, 17, 9, 1, 217, 9, 147, 17, 9, 1, 216, 194, 53, 17, 9, 1, 216, 194, - 40, 17, 9, 1, 216, 194, 65, 17, 9, 1, 216, 194, 147, 17, 9, 1, 151, 53, - 17, 9, 1, 151, 40, 17, 9, 1, 151, 65, 17, 9, 1, 151, 147, 17, 9, 1, 122, - 53, 17, 9, 1, 122, 40, 17, 9, 1, 122, 65, 17, 9, 1, 122, 147, 17, 9, 1, - 234, 136, 53, 17, 9, 1, 234, 136, 40, 17, 9, 1, 234, 136, 65, 17, 9, 1, - 234, 136, 147, 17, 9, 1, 248, 204, 53, 17, 9, 1, 248, 204, 40, 17, 9, 1, - 216, 204, 53, 17, 9, 1, 216, 204, 40, 17, 9, 1, 223, 99, 53, 17, 9, 1, - 223, 99, 40, 17, 9, 1, 210, 109, 53, 17, 9, 1, 210, 109, 40, 17, 9, 1, - 221, 169, 53, 17, 9, 1, 221, 169, 40, 17, 9, 1, 221, 169, 65, 17, 9, 1, - 221, 169, 147, 17, 9, 1, 220, 62, 53, 17, 9, 1, 220, 62, 40, 17, 9, 1, - 220, 62, 65, 17, 9, 1, 220, 62, 147, 17, 9, 1, 222, 29, 53, 17, 9, 1, - 222, 29, 40, 17, 9, 1, 222, 29, 65, 17, 9, 1, 222, 29, 147, 17, 9, 1, - 248, 225, 53, 17, 9, 1, 248, 225, 40, 17, 9, 1, 248, 225, 65, 17, 9, 1, - 248, 225, 147, 17, 9, 1, 217, 82, 53, 17, 9, 1, 217, 82, 40, 17, 9, 1, - 217, 82, 65, 17, 9, 1, 217, 82, 147, 17, 9, 1, 210, 112, 53, 17, 9, 1, - 210, 112, 40, 17, 9, 1, 210, 112, 65, 17, 9, 1, 210, 112, 147, 17, 9, 1, - 254, 206, 53, 17, 9, 1, 254, 206, 40, 17, 9, 1, 254, 206, 65, 17, 9, 1, - 254, 206, 147, 17, 9, 1, 242, 252, 53, 17, 9, 1, 242, 252, 40, 17, 9, 1, - 242, 252, 65, 17, 9, 1, 242, 252, 147, 17, 9, 1, 244, 151, 53, 17, 9, 1, - 244, 151, 40, 17, 9, 1, 244, 151, 65, 17, 9, 1, 244, 151, 147, 17, 9, 1, - 224, 85, 53, 17, 9, 1, 224, 85, 40, 17, 9, 1, 224, 85, 65, 17, 9, 1, 224, - 85, 147, 17, 9, 1, 235, 1, 53, 17, 9, 1, 235, 1, 40, 17, 9, 1, 235, 1, - 65, 17, 9, 1, 235, 1, 147, 17, 9, 1, 233, 109, 53, 17, 9, 1, 233, 109, - 40, 17, 9, 1, 233, 109, 65, 17, 9, 1, 233, 109, 147, 17, 9, 1, 66, 53, - 17, 9, 1, 66, 40, 17, 9, 1, 66, 65, 17, 9, 1, 66, 147, 17, 9, 1, 228, 68, - 53, 17, 9, 1, 228, 68, 40, 17, 9, 1, 228, 68, 65, 17, 9, 1, 228, 68, 147, - 17, 9, 1, 241, 226, 53, 17, 9, 1, 241, 226, 40, 17, 9, 1, 241, 226, 65, - 17, 9, 1, 241, 226, 147, 17, 9, 1, 212, 31, 53, 17, 9, 1, 212, 31, 40, - 17, 9, 1, 109, 231, 198, 53, 17, 9, 1, 109, 231, 198, 40, 17, 9, 1, 77, - 53, 17, 9, 1, 77, 40, 17, 9, 1, 77, 65, 17, 9, 1, 77, 147, 17, 9, 27, - 233, 109, 2, 109, 2, 231, 233, 72, 53, 17, 9, 27, 233, 109, 2, 109, 2, - 231, 233, 72, 40, 17, 9, 27, 233, 109, 2, 109, 2, 182, 72, 53, 17, 9, 27, - 233, 109, 2, 109, 2, 182, 72, 40, 17, 9, 27, 233, 109, 2, 109, 2, 182, - 252, 51, 53, 17, 9, 27, 233, 109, 2, 109, 2, 182, 252, 51, 40, 17, 9, 27, - 233, 109, 2, 109, 53, 17, 9, 27, 233, 109, 2, 109, 40, 17, 210, 87, 211, - 245, 228, 78, 219, 20, 126, 245, 39, 79, 126, 224, 1, 79, 126, 54, 50, - 126, 247, 140, 50, 126, 225, 185, 50, 126, 254, 134, 126, 254, 65, 126, - 43, 226, 7, 126, 44, 226, 7, 126, 253, 224, 126, 96, 50, 126, 249, 227, - 126, 240, 174, 126, 243, 236, 218, 131, 126, 219, 48, 126, 21, 210, 86, - 126, 21, 111, 126, 21, 105, 126, 21, 158, 126, 21, 161, 126, 21, 190, - 126, 21, 195, 126, 21, 199, 126, 21, 196, 126, 21, 201, 126, 249, 234, - 126, 220, 152, 126, 233, 21, 50, 126, 245, 106, 50, 126, 242, 137, 50, - 126, 224, 16, 79, 126, 249, 225, 253, 214, 126, 7, 6, 1, 61, 126, 7, 6, - 1, 253, 166, 126, 7, 6, 1, 251, 74, 126, 7, 6, 1, 249, 68, 126, 7, 6, 1, - 76, 126, 7, 6, 1, 245, 14, 126, 7, 6, 1, 243, 209, 126, 7, 6, 1, 242, 67, - 126, 7, 6, 1, 74, 126, 7, 6, 1, 235, 150, 126, 7, 6, 1, 235, 29, 126, 7, - 6, 1, 156, 126, 7, 6, 1, 194, 126, 7, 6, 1, 230, 30, 126, 7, 6, 1, 78, - 126, 7, 6, 1, 226, 109, 126, 7, 6, 1, 224, 99, 126, 7, 6, 1, 153, 126, 7, - 6, 1, 222, 93, 126, 7, 6, 1, 217, 153, 126, 7, 6, 1, 69, 126, 7, 6, 1, - 214, 105, 126, 7, 6, 1, 212, 98, 126, 7, 6, 1, 211, 178, 126, 7, 6, 1, - 211, 117, 126, 7, 6, 1, 210, 159, 126, 43, 42, 127, 126, 223, 53, 219, - 48, 126, 44, 42, 127, 126, 250, 39, 255, 23, 126, 121, 232, 219, 126, - 242, 144, 255, 23, 126, 7, 4, 1, 61, 126, 7, 4, 1, 253, 166, 126, 7, 4, - 1, 251, 74, 126, 7, 4, 1, 249, 68, 126, 7, 4, 1, 76, 126, 7, 4, 1, 245, - 14, 126, 7, 4, 1, 243, 209, 126, 7, 4, 1, 242, 67, 126, 7, 4, 1, 74, 126, - 7, 4, 1, 235, 150, 126, 7, 4, 1, 235, 29, 126, 7, 4, 1, 156, 126, 7, 4, - 1, 194, 126, 7, 4, 1, 230, 30, 126, 7, 4, 1, 78, 126, 7, 4, 1, 226, 109, - 126, 7, 4, 1, 224, 99, 126, 7, 4, 1, 153, 126, 7, 4, 1, 222, 93, 126, 7, - 4, 1, 217, 153, 126, 7, 4, 1, 69, 126, 7, 4, 1, 214, 105, 126, 7, 4, 1, - 212, 98, 126, 7, 4, 1, 211, 178, 126, 7, 4, 1, 211, 117, 126, 7, 4, 1, - 210, 159, 126, 43, 249, 107, 127, 126, 67, 232, 219, 126, 44, 249, 107, - 127, 126, 184, 126, 43, 71, 226, 7, 126, 44, 71, 226, 7, 101, 110, 243, - 236, 218, 131, 101, 43, 249, 169, 127, 101, 44, 249, 169, 127, 101, 110, - 249, 227, 101, 56, 230, 229, 247, 128, 101, 56, 1, 211, 227, 101, 56, 1, - 4, 61, 101, 56, 1, 4, 74, 101, 56, 1, 4, 69, 101, 56, 1, 4, 76, 101, 56, - 1, 4, 78, 101, 56, 1, 4, 192, 101, 56, 1, 4, 210, 212, 101, 56, 1, 4, - 210, 244, 101, 56, 1, 4, 215, 119, 101, 234, 207, 224, 176, 219, 33, 79, - 101, 56, 1, 61, 101, 56, 1, 74, 101, 56, 1, 69, 101, 56, 1, 76, 101, 56, - 1, 78, 101, 56, 1, 176, 101, 56, 1, 234, 98, 101, 56, 1, 233, 223, 101, - 56, 1, 234, 188, 101, 56, 1, 234, 34, 101, 56, 1, 206, 101, 56, 1, 219, - 193, 101, 56, 1, 218, 84, 101, 56, 1, 221, 183, 101, 56, 1, 219, 60, 101, - 56, 1, 217, 106, 101, 56, 1, 216, 118, 101, 56, 1, 215, 119, 101, 56, 1, - 217, 23, 101, 56, 1, 112, 101, 56, 1, 198, 101, 56, 1, 228, 238, 101, 56, - 1, 227, 242, 101, 56, 1, 229, 112, 101, 56, 1, 228, 79, 101, 56, 1, 162, - 101, 56, 1, 241, 187, 101, 56, 1, 240, 229, 101, 56, 1, 241, 245, 101, - 56, 1, 241, 75, 101, 56, 1, 186, 101, 56, 1, 230, 235, 101, 56, 1, 230, - 107, 101, 56, 1, 231, 96, 101, 56, 1, 230, 166, 101, 56, 1, 192, 101, 56, - 1, 210, 212, 101, 56, 1, 210, 244, 101, 56, 1, 205, 101, 56, 1, 223, 38, - 101, 56, 1, 222, 142, 101, 56, 1, 223, 131, 101, 56, 1, 222, 213, 101, - 56, 1, 212, 65, 101, 56, 1, 230, 30, 101, 56, 213, 135, 219, 33, 79, 101, - 56, 220, 157, 219, 33, 79, 101, 24, 244, 111, 101, 24, 1, 234, 64, 101, - 24, 1, 218, 217, 101, 24, 1, 234, 57, 101, 24, 1, 228, 231, 101, 24, 1, - 228, 229, 101, 24, 1, 228, 228, 101, 24, 1, 216, 102, 101, 24, 1, 218, - 206, 101, 24, 1, 223, 29, 101, 24, 1, 223, 24, 101, 24, 1, 223, 21, 101, - 24, 1, 223, 14, 101, 24, 1, 223, 9, 101, 24, 1, 223, 4, 101, 24, 1, 223, - 15, 101, 24, 1, 223, 27, 101, 24, 1, 230, 222, 101, 24, 1, 225, 98, 101, - 24, 1, 218, 214, 101, 24, 1, 225, 87, 101, 24, 1, 219, 150, 101, 24, 1, - 218, 211, 101, 24, 1, 236, 63, 101, 24, 1, 250, 54, 101, 24, 1, 218, 221, - 101, 24, 1, 250, 114, 101, 24, 1, 234, 116, 101, 24, 1, 216, 174, 101, - 24, 1, 225, 134, 101, 24, 1, 241, 179, 101, 24, 1, 61, 101, 24, 1, 254, - 252, 101, 24, 1, 192, 101, 24, 1, 211, 92, 101, 24, 1, 245, 125, 101, 24, - 1, 76, 101, 24, 1, 211, 36, 101, 24, 1, 211, 47, 101, 24, 1, 78, 101, 24, - 1, 212, 65, 101, 24, 1, 212, 62, 101, 24, 1, 226, 238, 101, 24, 1, 210, - 244, 101, 24, 1, 69, 101, 24, 1, 212, 11, 101, 24, 1, 212, 22, 101, 24, - 1, 211, 250, 101, 24, 1, 210, 212, 101, 24, 1, 245, 63, 101, 24, 1, 211, - 8, 101, 24, 1, 74, 126, 250, 184, 50, 126, 224, 231, 50, 126, 228, 57, - 50, 126, 231, 237, 126, 251, 143, 130, 126, 211, 40, 50, 126, 211, 217, - 50, 101, 244, 26, 193, 213, 239, 101, 140, 75, 101, 214, 153, 75, 101, - 97, 75, 101, 246, 112, 75, 101, 85, 218, 236, 101, 71, 250, 43, 235, 211, - 254, 107, 254, 128, 235, 211, 254, 107, 220, 139, 235, 211, 254, 107, - 216, 237, 226, 253, 223, 75, 250, 150, 223, 75, 250, 150, 62, 57, 3, 253, - 150, 61, 62, 57, 3, 253, 119, 76, 62, 57, 3, 253, 128, 74, 62, 57, 3, - 253, 96, 78, 62, 57, 3, 253, 146, 69, 62, 57, 3, 253, 165, 248, 229, 62, - 57, 3, 253, 112, 248, 98, 62, 57, 3, 253, 152, 248, 11, 62, 57, 3, 253, - 142, 247, 153, 62, 57, 3, 253, 106, 246, 86, 62, 57, 3, 253, 100, 235, - 147, 62, 57, 3, 253, 111, 235, 132, 62, 57, 3, 253, 121, 235, 74, 62, 57, - 3, 253, 92, 235, 57, 62, 57, 3, 253, 80, 176, 62, 57, 3, 253, 113, 234, - 188, 62, 57, 3, 253, 90, 234, 98, 62, 57, 3, 253, 87, 234, 34, 62, 57, 3, - 253, 76, 233, 223, 62, 57, 3, 253, 77, 186, 62, 57, 3, 253, 143, 231, 96, - 62, 57, 3, 253, 84, 230, 235, 62, 57, 3, 253, 141, 230, 166, 62, 57, 3, - 253, 133, 230, 107, 62, 57, 3, 253, 154, 198, 62, 57, 3, 253, 132, 229, - 112, 62, 57, 3, 253, 126, 228, 238, 62, 57, 3, 253, 105, 228, 79, 62, 57, - 3, 253, 102, 227, 242, 62, 57, 3, 253, 161, 191, 62, 57, 3, 253, 85, 225, - 224, 62, 57, 3, 253, 118, 225, 111, 62, 57, 3, 253, 145, 225, 19, 62, 57, - 3, 253, 107, 224, 153, 62, 57, 3, 253, 140, 224, 91, 62, 57, 3, 253, 79, - 224, 72, 62, 57, 3, 253, 135, 224, 56, 62, 57, 3, 253, 124, 224, 45, 62, - 57, 3, 253, 97, 205, 62, 57, 3, 253, 129, 223, 131, 62, 57, 3, 253, 104, - 223, 38, 62, 57, 3, 253, 163, 222, 213, 62, 57, 3, 253, 130, 222, 142, - 62, 57, 3, 253, 125, 206, 62, 57, 3, 253, 148, 221, 183, 62, 57, 3, 253, - 116, 219, 193, 62, 57, 3, 253, 144, 219, 60, 62, 57, 3, 253, 99, 218, 84, - 62, 57, 3, 253, 98, 217, 106, 62, 57, 3, 253, 159, 217, 23, 62, 57, 3, - 253, 120, 216, 118, 62, 57, 3, 253, 157, 112, 62, 57, 3, 253, 88, 215, - 119, 62, 57, 3, 253, 103, 212, 65, 62, 57, 3, 253, 82, 212, 22, 62, 57, - 3, 253, 117, 211, 250, 62, 57, 3, 253, 115, 211, 227, 62, 57, 3, 253, - 139, 210, 116, 62, 57, 3, 253, 83, 210, 94, 62, 57, 3, 253, 136, 210, 23, - 62, 57, 3, 253, 131, 255, 84, 62, 57, 3, 253, 114, 255, 83, 62, 57, 3, - 253, 73, 253, 200, 62, 57, 3, 253, 86, 246, 54, 62, 57, 3, 253, 69, 246, - 53, 62, 57, 3, 253, 109, 227, 178, 62, 57, 3, 253, 127, 224, 151, 62, 57, - 3, 253, 95, 224, 155, 62, 57, 3, 253, 81, 223, 189, 62, 57, 3, 253, 123, - 223, 188, 62, 57, 3, 253, 89, 222, 212, 62, 57, 3, 253, 91, 217, 103, 62, - 57, 3, 253, 71, 215, 78, 62, 57, 3, 253, 68, 105, 62, 57, 16, 253, 138, - 62, 57, 16, 253, 137, 62, 57, 16, 253, 134, 62, 57, 16, 253, 122, 62, 57, - 16, 253, 110, 62, 57, 16, 253, 108, 62, 57, 16, 253, 101, 62, 57, 16, - 253, 94, 62, 57, 16, 253, 93, 62, 57, 16, 253, 78, 62, 57, 16, 253, 75, - 62, 57, 16, 253, 74, 62, 57, 16, 253, 72, 62, 57, 16, 253, 70, 62, 57, - 106, 253, 67, 231, 190, 62, 57, 106, 253, 66, 211, 221, 62, 57, 106, 253, - 65, 248, 82, 62, 57, 106, 253, 64, 245, 103, 62, 57, 106, 253, 63, 231, - 164, 62, 57, 106, 253, 62, 218, 164, 62, 57, 106, 253, 61, 245, 45, 62, - 57, 106, 253, 60, 223, 156, 62, 57, 106, 253, 59, 220, 64, 62, 57, 106, - 253, 58, 241, 244, 62, 57, 106, 253, 57, 219, 27, 62, 57, 106, 253, 56, - 251, 211, 62, 57, 106, 253, 55, 249, 153, 62, 57, 106, 253, 54, 251, 123, - 62, 57, 106, 253, 53, 212, 2, 62, 57, 106, 253, 52, 252, 144, 62, 57, - 106, 253, 51, 226, 209, 62, 57, 106, 253, 50, 219, 0, 62, 57, 106, 253, - 49, 249, 76, 62, 57, 230, 147, 253, 48, 234, 230, 62, 57, 230, 147, 253, - 47, 234, 238, 62, 57, 106, 253, 46, 226, 222, 62, 57, 106, 253, 45, 211, - 236, 62, 57, 106, 253, 44, 62, 57, 230, 147, 253, 43, 254, 25, 62, 57, - 230, 147, 253, 42, 231, 57, 62, 57, 106, 253, 41, 251, 142, 62, 57, 106, - 253, 40, 242, 173, 62, 57, 106, 253, 39, 62, 57, 106, 253, 38, 211, 212, - 62, 57, 106, 253, 37, 62, 57, 106, 253, 36, 62, 57, 106, 253, 35, 240, - 255, 62, 57, 106, 253, 34, 62, 57, 106, 253, 33, 62, 57, 106, 253, 32, - 62, 57, 230, 147, 253, 30, 215, 92, 62, 57, 106, 253, 29, 62, 57, 106, - 253, 28, 62, 57, 106, 253, 27, 250, 2, 62, 57, 106, 253, 26, 62, 57, 106, - 253, 25, 62, 57, 106, 253, 24, 243, 100, 62, 57, 106, 253, 23, 254, 12, - 62, 57, 106, 253, 22, 62, 57, 106, 253, 21, 62, 57, 106, 253, 20, 62, 57, - 106, 253, 19, 62, 57, 106, 253, 18, 62, 57, 106, 253, 17, 62, 57, 106, - 253, 16, 62, 57, 106, 253, 15, 62, 57, 106, 253, 14, 62, 57, 106, 253, - 13, 230, 139, 62, 57, 106, 253, 12, 62, 57, 106, 253, 11, 215, 236, 62, - 57, 106, 253, 10, 62, 57, 106, 253, 9, 62, 57, 106, 253, 8, 62, 57, 106, - 253, 7, 62, 57, 106, 253, 6, 62, 57, 106, 253, 5, 62, 57, 106, 253, 4, - 62, 57, 106, 253, 3, 62, 57, 106, 253, 2, 62, 57, 106, 253, 1, 62, 57, - 106, 253, 0, 62, 57, 106, 252, 255, 241, 218, 62, 57, 106, 252, 234, 244, - 36, 62, 57, 106, 252, 231, 252, 124, 62, 57, 106, 252, 226, 219, 7, 62, - 57, 106, 252, 225, 75, 62, 57, 106, 252, 224, 62, 57, 106, 252, 223, 217, - 237, 62, 57, 106, 252, 222, 62, 57, 106, 252, 221, 62, 57, 106, 252, 220, - 211, 254, 250, 147, 62, 57, 106, 252, 219, 250, 147, 62, 57, 106, 252, - 218, 250, 148, 244, 7, 62, 57, 106, 252, 217, 212, 0, 62, 57, 106, 252, - 216, 62, 57, 106, 252, 215, 62, 57, 230, 147, 252, 214, 247, 206, 62, 57, - 106, 252, 213, 62, 57, 106, 252, 212, 62, 57, 106, 252, 210, 62, 57, 106, - 252, 209, 62, 57, 106, 252, 208, 62, 57, 106, 252, 207, 248, 167, 62, 57, - 106, 252, 206, 62, 57, 106, 252, 205, 62, 57, 106, 252, 204, 62, 57, 106, - 252, 203, 62, 57, 106, 252, 202, 62, 57, 106, 213, 186, 253, 31, 62, 57, - 106, 213, 186, 252, 254, 62, 57, 106, 213, 186, 252, 253, 62, 57, 106, - 213, 186, 252, 252, 62, 57, 106, 213, 186, 252, 251, 62, 57, 106, 213, - 186, 252, 250, 62, 57, 106, 213, 186, 252, 249, 62, 57, 106, 213, 186, - 252, 248, 62, 57, 106, 213, 186, 252, 247, 62, 57, 106, 213, 186, 252, - 246, 62, 57, 106, 213, 186, 252, 245, 62, 57, 106, 213, 186, 252, 244, - 62, 57, 106, 213, 186, 252, 243, 62, 57, 106, 213, 186, 252, 242, 62, 57, - 106, 213, 186, 252, 241, 62, 57, 106, 213, 186, 252, 240, 62, 57, 106, - 213, 186, 252, 239, 62, 57, 106, 213, 186, 252, 238, 62, 57, 106, 213, - 186, 252, 237, 62, 57, 106, 213, 186, 252, 236, 62, 57, 106, 213, 186, - 252, 235, 62, 57, 106, 213, 186, 252, 233, 62, 57, 106, 213, 186, 252, - 232, 62, 57, 106, 213, 186, 252, 230, 62, 57, 106, 213, 186, 252, 229, - 62, 57, 106, 213, 186, 252, 228, 62, 57, 106, 213, 186, 252, 227, 62, 57, - 106, 213, 186, 252, 211, 62, 57, 106, 213, 186, 252, 201, 254, 245, 211, - 209, 220, 140, 232, 219, 254, 245, 211, 209, 220, 140, 247, 128, 254, - 245, 250, 138, 79, 254, 245, 54, 111, 254, 245, 54, 105, 254, 245, 54, - 158, 254, 245, 54, 161, 254, 245, 54, 190, 254, 245, 54, 195, 254, 245, - 54, 199, 254, 245, 54, 196, 254, 245, 54, 201, 254, 245, 54, 216, 248, - 254, 245, 54, 215, 73, 254, 245, 54, 216, 163, 254, 245, 54, 244, 23, - 254, 245, 54, 244, 122, 254, 245, 54, 219, 113, 254, 245, 54, 220, 118, - 254, 245, 54, 245, 192, 254, 245, 54, 228, 200, 254, 245, 54, 123, 240, - 217, 254, 245, 54, 113, 240, 217, 254, 245, 54, 134, 240, 217, 254, 245, - 54, 244, 19, 240, 217, 254, 245, 54, 244, 89, 240, 217, 254, 245, 54, - 219, 127, 240, 217, 254, 245, 54, 220, 124, 240, 217, 254, 245, 54, 245, - 201, 240, 217, 254, 245, 54, 228, 205, 240, 217, 254, 245, 54, 123, 216, - 148, 254, 245, 54, 113, 216, 148, 254, 245, 54, 134, 216, 148, 254, 245, - 54, 244, 19, 216, 148, 254, 245, 54, 244, 89, 216, 148, 254, 245, 54, - 219, 127, 216, 148, 254, 245, 54, 220, 124, 216, 148, 254, 245, 54, 245, - 201, 216, 148, 254, 245, 54, 228, 205, 216, 148, 254, 245, 54, 216, 249, - 216, 148, 254, 245, 54, 215, 74, 216, 148, 254, 245, 54, 216, 164, 216, - 148, 254, 245, 54, 244, 24, 216, 148, 254, 245, 54, 244, 123, 216, 148, - 254, 245, 54, 219, 114, 216, 148, 254, 245, 54, 220, 119, 216, 148, 254, - 245, 54, 245, 193, 216, 148, 254, 245, 54, 228, 201, 216, 148, 254, 245, - 212, 14, 252, 136, 214, 173, 254, 245, 212, 14, 244, 100, 218, 60, 254, - 245, 212, 14, 221, 178, 218, 60, 254, 245, 212, 14, 216, 170, 218, 60, - 254, 245, 212, 14, 244, 12, 218, 60, 254, 245, 246, 89, 231, 95, 244, - 100, 218, 60, 254, 245, 232, 205, 231, 95, 244, 100, 218, 60, 254, 245, - 231, 95, 221, 178, 218, 60, 254, 245, 231, 95, 216, 170, 218, 60, 26, - 255, 15, 253, 202, 123, 224, 24, 26, 255, 15, 253, 202, 123, 242, 34, 26, - 255, 15, 253, 202, 123, 246, 108, 26, 255, 15, 253, 202, 190, 26, 255, - 15, 253, 202, 244, 122, 26, 255, 15, 253, 202, 244, 89, 240, 217, 26, - 255, 15, 253, 202, 244, 89, 216, 148, 26, 255, 15, 253, 202, 244, 123, - 216, 148, 26, 255, 15, 253, 202, 244, 89, 217, 68, 26, 255, 15, 253, 202, - 216, 249, 217, 68, 26, 255, 15, 253, 202, 244, 123, 217, 68, 26, 255, 15, - 253, 202, 123, 240, 218, 217, 68, 26, 255, 15, 253, 202, 244, 89, 240, - 218, 217, 68, 26, 255, 15, 253, 202, 123, 216, 149, 217, 68, 26, 255, 15, - 253, 202, 244, 89, 216, 149, 217, 68, 26, 255, 15, 253, 202, 244, 89, - 218, 152, 26, 255, 15, 253, 202, 216, 249, 218, 152, 26, 255, 15, 253, - 202, 244, 123, 218, 152, 26, 255, 15, 253, 202, 123, 240, 218, 218, 152, - 26, 255, 15, 253, 202, 244, 89, 240, 218, 218, 152, 26, 255, 15, 253, - 202, 123, 216, 149, 218, 152, 26, 255, 15, 253, 202, 216, 249, 216, 149, - 218, 152, 26, 255, 15, 253, 202, 244, 123, 216, 149, 218, 152, 26, 255, - 15, 253, 202, 216, 249, 230, 169, 26, 255, 15, 241, 212, 123, 225, 34, - 26, 255, 15, 216, 182, 111, 26, 255, 15, 241, 208, 111, 26, 255, 15, 245, - 112, 105, 26, 255, 15, 216, 182, 105, 26, 255, 15, 249, 73, 113, 246, - 107, 26, 255, 15, 245, 112, 113, 246, 107, 26, 255, 15, 215, 204, 190, - 26, 255, 15, 215, 204, 216, 248, 26, 255, 15, 215, 204, 216, 249, 254, - 149, 17, 26, 255, 15, 241, 208, 216, 248, 26, 255, 15, 231, 46, 216, 248, - 26, 255, 15, 216, 182, 216, 248, 26, 255, 15, 216, 182, 216, 163, 26, - 255, 15, 215, 204, 244, 122, 26, 255, 15, 215, 204, 244, 123, 254, 149, - 17, 26, 255, 15, 241, 208, 244, 122, 26, 255, 15, 216, 182, 244, 122, 26, - 255, 15, 216, 182, 123, 240, 217, 26, 255, 15, 216, 182, 134, 240, 217, - 26, 255, 15, 245, 112, 244, 89, 240, 217, 26, 255, 15, 215, 204, 244, 89, - 240, 217, 26, 255, 15, 216, 182, 244, 89, 240, 217, 26, 255, 15, 250, - 235, 244, 89, 240, 217, 26, 255, 15, 229, 187, 244, 89, 240, 217, 26, - 255, 15, 216, 182, 123, 216, 148, 26, 255, 15, 216, 182, 244, 89, 216, - 148, 26, 255, 15, 248, 65, 244, 89, 230, 169, 26, 255, 15, 218, 120, 244, - 123, 230, 169, 26, 123, 163, 50, 26, 123, 163, 5, 254, 149, 17, 26, 113, - 216, 168, 50, 26, 134, 224, 23, 50, 26, 211, 45, 50, 26, 217, 69, 50, 26, - 246, 109, 50, 26, 226, 250, 50, 26, 113, 226, 249, 50, 26, 134, 226, 249, - 50, 26, 244, 19, 226, 249, 50, 26, 244, 89, 226, 249, 50, 26, 231, 40, - 50, 26, 233, 163, 252, 136, 50, 26, 232, 200, 50, 26, 226, 135, 50, 26, - 211, 159, 50, 26, 253, 251, 50, 26, 254, 8, 50, 26, 242, 151, 50, 26, - 215, 187, 252, 136, 50, 26, 210, 87, 50, 222, 200, 220, 115, 50, 222, - 200, 214, 185, 50, 222, 200, 220, 144, 50, 222, 200, 220, 113, 50, 222, - 200, 247, 221, 220, 113, 50, 222, 200, 219, 170, 50, 222, 200, 248, 61, - 50, 222, 200, 224, 9, 50, 222, 200, 220, 131, 50, 222, 200, 246, 68, 50, - 222, 200, 253, 246, 50, 222, 200, 250, 179, 50, 225, 146, 247, 199, 5, - 225, 216, 225, 146, 247, 199, 5, 225, 27, 241, 242, 225, 146, 247, 199, - 5, 217, 46, 241, 242, 225, 146, 247, 199, 5, 250, 255, 225, 146, 247, - 199, 5, 250, 109, 225, 146, 247, 199, 5, 211, 221, 225, 146, 247, 199, 5, - 241, 218, 225, 146, 247, 199, 5, 243, 92, 225, 146, 247, 199, 5, 216, - 117, 225, 146, 247, 199, 5, 75, 225, 146, 247, 199, 5, 251, 177, 225, - 146, 247, 199, 5, 220, 31, 225, 146, 247, 199, 5, 249, 252, 225, 146, - 247, 199, 5, 231, 189, 225, 146, 247, 199, 5, 231, 141, 225, 146, 247, - 199, 5, 221, 218, 225, 146, 247, 199, 5, 232, 243, 225, 146, 247, 199, 5, - 251, 196, 225, 146, 247, 199, 5, 250, 239, 225, 38, 225, 146, 247, 199, - 5, 247, 141, 225, 146, 247, 199, 5, 249, 231, 225, 146, 247, 199, 5, 219, - 89, 225, 146, 247, 199, 5, 249, 232, 225, 146, 247, 199, 5, 252, 71, 225, - 146, 247, 199, 5, 220, 18, 225, 146, 247, 199, 5, 240, 255, 225, 146, - 247, 199, 5, 241, 185, 225, 146, 247, 199, 5, 251, 120, 233, 42, 225, - 146, 247, 199, 5, 250, 232, 225, 146, 247, 199, 5, 223, 156, 225, 146, - 247, 199, 5, 245, 238, 225, 146, 247, 199, 5, 246, 115, 225, 146, 247, - 199, 5, 215, 106, 225, 146, 247, 199, 5, 252, 74, 225, 146, 247, 199, 5, - 225, 39, 215, 236, 225, 146, 247, 199, 5, 213, 159, 225, 146, 247, 199, - 5, 226, 22, 225, 146, 247, 199, 5, 222, 192, 225, 146, 247, 199, 5, 232, - 230, 225, 146, 247, 199, 5, 226, 119, 252, 192, 225, 146, 247, 199, 5, - 244, 56, 225, 146, 247, 199, 5, 242, 145, 225, 146, 247, 199, 5, 218, - 121, 225, 146, 247, 199, 5, 4, 253, 176, 225, 146, 247, 199, 5, 212, 32, - 252, 156, 225, 146, 247, 199, 5, 38, 226, 252, 91, 232, 65, 1, 61, 232, - 65, 1, 76, 232, 65, 1, 253, 166, 232, 65, 1, 252, 27, 232, 65, 1, 243, - 209, 232, 65, 1, 249, 68, 232, 65, 1, 74, 232, 65, 1, 212, 98, 232, 65, - 1, 210, 159, 232, 65, 1, 216, 211, 232, 65, 1, 235, 150, 232, 65, 1, 235, - 29, 232, 65, 1, 224, 99, 232, 65, 1, 156, 232, 65, 1, 194, 232, 65, 1, - 230, 30, 232, 65, 1, 230, 171, 232, 65, 1, 228, 116, 232, 65, 1, 69, 232, - 65, 1, 226, 109, 232, 65, 1, 234, 53, 232, 65, 1, 153, 232, 65, 1, 222, - 93, 232, 65, 1, 217, 153, 232, 65, 1, 215, 160, 232, 65, 1, 254, 131, - 232, 65, 1, 245, 158, 232, 65, 1, 242, 67, 232, 65, 1, 211, 178, 250, - 245, 1, 61, 250, 245, 1, 226, 95, 250, 245, 1, 249, 68, 250, 245, 1, 156, - 250, 245, 1, 214, 116, 250, 245, 1, 153, 250, 245, 1, 233, 68, 250, 245, - 1, 255, 84, 250, 245, 1, 224, 99, 250, 245, 1, 253, 166, 250, 245, 1, - 194, 250, 245, 1, 78, 250, 245, 1, 248, 231, 250, 245, 1, 217, 153, 250, - 245, 1, 220, 106, 250, 245, 1, 220, 105, 250, 245, 1, 222, 93, 250, 245, - 1, 251, 73, 250, 245, 1, 69, 250, 245, 1, 228, 116, 250, 245, 1, 211, - 178, 250, 245, 1, 230, 30, 250, 245, 1, 215, 159, 250, 245, 1, 226, 109, - 250, 245, 1, 218, 228, 250, 245, 1, 74, 250, 245, 1, 76, 250, 245, 1, - 214, 113, 250, 245, 1, 235, 29, 250, 245, 1, 235, 20, 250, 245, 1, 229, - 155, 250, 245, 1, 214, 118, 250, 245, 1, 243, 209, 250, 245, 1, 243, 144, - 250, 245, 1, 218, 170, 250, 245, 1, 218, 169, 250, 245, 1, 229, 84, 250, - 245, 1, 236, 40, 250, 245, 1, 251, 72, 250, 245, 1, 215, 160, 250, 245, - 1, 214, 115, 250, 245, 1, 222, 182, 250, 245, 1, 231, 134, 250, 245, 1, - 231, 133, 250, 245, 1, 231, 132, 250, 245, 1, 231, 131, 250, 245, 1, 233, - 67, 250, 245, 1, 245, 242, 250, 245, 1, 214, 114, 55, 32, 1, 61, 55, 32, - 1, 252, 83, 55, 32, 1, 234, 188, 55, 32, 1, 248, 98, 55, 32, 1, 76, 55, - 32, 1, 213, 255, 55, 32, 1, 210, 94, 55, 32, 1, 241, 245, 55, 32, 1, 216, - 196, 55, 32, 1, 74, 55, 32, 1, 176, 55, 32, 1, 245, 182, 55, 32, 1, 245, - 167, 55, 32, 1, 245, 158, 55, 32, 1, 245, 83, 55, 32, 1, 78, 55, 32, 1, - 225, 224, 55, 32, 1, 220, 65, 55, 32, 1, 233, 223, 55, 32, 1, 245, 100, - 55, 32, 1, 245, 90, 55, 32, 1, 217, 23, 55, 32, 1, 69, 55, 32, 1, 245, - 185, 55, 32, 1, 225, 139, 55, 32, 1, 234, 125, 55, 32, 1, 245, 210, 55, - 32, 1, 245, 92, 55, 32, 1, 250, 139, 55, 32, 1, 236, 40, 55, 32, 1, 214, - 118, 55, 32, 227, 202, 111, 55, 32, 227, 202, 190, 55, 32, 227, 202, 216, - 248, 55, 32, 227, 202, 244, 122, 242, 160, 1, 254, 213, 242, 160, 1, 252, - 171, 242, 160, 1, 242, 218, 242, 160, 1, 248, 212, 242, 160, 1, 254, 209, - 242, 160, 1, 224, 82, 242, 160, 1, 235, 161, 242, 160, 1, 242, 46, 242, - 160, 1, 216, 159, 242, 160, 1, 245, 191, 242, 160, 1, 233, 196, 242, 160, - 1, 233, 119, 242, 160, 1, 231, 184, 242, 160, 1, 229, 189, 242, 160, 1, - 235, 125, 242, 160, 1, 214, 136, 242, 160, 1, 226, 73, 242, 160, 1, 228, - 200, 242, 160, 1, 223, 168, 242, 160, 1, 221, 220, 242, 160, 1, 217, 5, - 242, 160, 1, 211, 234, 242, 160, 1, 244, 186, 242, 160, 1, 236, 44, 242, - 160, 1, 240, 206, 242, 160, 1, 226, 143, 242, 160, 1, 228, 205, 240, 217, - 214, 209, 1, 254, 155, 214, 209, 1, 252, 34, 214, 209, 1, 243, 115, 214, - 209, 1, 234, 138, 214, 209, 1, 248, 62, 214, 209, 1, 241, 75, 214, 209, - 1, 211, 227, 214, 209, 1, 210, 85, 214, 209, 1, 240, 248, 214, 209, 1, - 216, 231, 214, 209, 1, 210, 233, 214, 209, 1, 235, 0, 214, 209, 1, 220, - 22, 214, 209, 1, 233, 104, 214, 209, 1, 231, 70, 214, 209, 1, 248, 29, - 214, 209, 1, 227, 198, 214, 209, 1, 210, 13, 214, 209, 1, 221, 250, 214, - 209, 1, 254, 205, 214, 209, 1, 224, 153, 214, 209, 1, 222, 27, 214, 209, - 1, 224, 38, 214, 209, 1, 223, 147, 214, 209, 1, 216, 200, 214, 209, 1, - 242, 251, 214, 209, 1, 112, 214, 209, 1, 74, 214, 209, 1, 69, 214, 209, - 1, 218, 181, 214, 209, 211, 209, 247, 180, 55, 225, 172, 5, 61, 55, 225, - 172, 5, 74, 55, 225, 172, 5, 69, 55, 225, 172, 5, 176, 55, 225, 172, 5, - 233, 223, 55, 225, 172, 5, 243, 142, 55, 225, 172, 5, 242, 120, 55, 225, - 172, 5, 211, 165, 55, 225, 172, 5, 251, 41, 55, 225, 172, 5, 235, 147, - 55, 225, 172, 5, 235, 114, 55, 225, 172, 5, 217, 106, 55, 225, 172, 5, - 215, 119, 55, 225, 172, 5, 248, 229, 55, 225, 172, 5, 248, 11, 55, 225, - 172, 5, 246, 86, 55, 225, 172, 5, 216, 209, 55, 225, 172, 5, 191, 55, - 225, 172, 5, 252, 199, 55, 225, 172, 5, 244, 204, 55, 225, 172, 5, 198, - 55, 225, 172, 5, 227, 242, 55, 225, 172, 5, 186, 55, 225, 172, 5, 230, - 235, 55, 225, 172, 5, 230, 107, 55, 225, 172, 5, 192, 55, 225, 172, 5, - 214, 27, 55, 225, 172, 5, 213, 176, 55, 225, 172, 5, 205, 55, 225, 172, - 5, 222, 142, 55, 225, 172, 5, 233, 141, 55, 225, 172, 5, 206, 55, 225, - 172, 5, 210, 116, 55, 225, 172, 5, 220, 104, 55, 225, 172, 5, 218, 225, - 55, 225, 172, 5, 162, 55, 225, 172, 5, 253, 194, 55, 225, 172, 5, 253, - 193, 55, 225, 172, 5, 253, 192, 55, 225, 172, 5, 211, 142, 55, 225, 172, - 5, 248, 208, 55, 225, 172, 5, 248, 207, 55, 225, 172, 5, 252, 178, 55, - 225, 172, 5, 251, 93, 55, 225, 172, 211, 209, 247, 180, 55, 225, 172, 54, - 111, 55, 225, 172, 54, 105, 55, 225, 172, 54, 216, 248, 55, 225, 172, 54, - 215, 73, 55, 225, 172, 54, 240, 217, 181, 6, 1, 200, 74, 181, 6, 1, 200, - 76, 181, 6, 1, 200, 61, 181, 6, 1, 200, 254, 218, 181, 6, 1, 200, 78, - 181, 6, 1, 200, 226, 187, 181, 6, 1, 219, 253, 74, 181, 6, 1, 219, 253, - 76, 181, 6, 1, 219, 253, 61, 181, 6, 1, 219, 253, 254, 218, 181, 6, 1, - 219, 253, 78, 181, 6, 1, 219, 253, 226, 187, 181, 6, 1, 253, 175, 181, 6, - 1, 226, 120, 181, 6, 1, 211, 195, 181, 6, 1, 211, 44, 181, 6, 1, 242, 67, - 181, 6, 1, 225, 214, 181, 6, 1, 252, 74, 181, 6, 1, 217, 12, 181, 6, 1, - 248, 85, 181, 6, 1, 250, 136, 181, 6, 1, 235, 130, 181, 6, 1, 234, 195, - 181, 6, 1, 243, 90, 181, 6, 1, 245, 210, 181, 6, 1, 213, 250, 181, 6, 1, - 245, 67, 181, 6, 1, 216, 195, 181, 6, 1, 245, 90, 181, 6, 1, 210, 92, - 181, 6, 1, 245, 83, 181, 6, 1, 210, 73, 181, 6, 1, 245, 100, 181, 6, 1, - 245, 182, 181, 6, 1, 245, 167, 181, 6, 1, 245, 158, 181, 6, 1, 245, 146, - 181, 6, 1, 226, 223, 181, 6, 1, 245, 46, 181, 4, 1, 200, 74, 181, 4, 1, - 200, 76, 181, 4, 1, 200, 61, 181, 4, 1, 200, 254, 218, 181, 4, 1, 200, - 78, 181, 4, 1, 200, 226, 187, 181, 4, 1, 219, 253, 74, 181, 4, 1, 219, - 253, 76, 181, 4, 1, 219, 253, 61, 181, 4, 1, 219, 253, 254, 218, 181, 4, - 1, 219, 253, 78, 181, 4, 1, 219, 253, 226, 187, 181, 4, 1, 253, 175, 181, - 4, 1, 226, 120, 181, 4, 1, 211, 195, 181, 4, 1, 211, 44, 181, 4, 1, 242, - 67, 181, 4, 1, 225, 214, 181, 4, 1, 252, 74, 181, 4, 1, 217, 12, 181, 4, - 1, 248, 85, 181, 4, 1, 250, 136, 181, 4, 1, 235, 130, 181, 4, 1, 234, - 195, 181, 4, 1, 243, 90, 181, 4, 1, 245, 210, 181, 4, 1, 213, 250, 181, - 4, 1, 245, 67, 181, 4, 1, 216, 195, 181, 4, 1, 245, 90, 181, 4, 1, 210, - 92, 181, 4, 1, 245, 83, 181, 4, 1, 210, 73, 181, 4, 1, 245, 100, 181, 4, - 1, 245, 182, 181, 4, 1, 245, 167, 181, 4, 1, 245, 158, 181, 4, 1, 245, - 146, 181, 4, 1, 226, 223, 181, 4, 1, 245, 46, 220, 71, 1, 225, 212, 220, - 71, 1, 216, 6, 220, 71, 1, 234, 97, 220, 71, 1, 244, 155, 220, 71, 1, - 216, 173, 220, 71, 1, 219, 60, 220, 71, 1, 218, 15, 220, 71, 1, 250, 69, - 220, 71, 1, 211, 46, 220, 71, 1, 240, 216, 220, 71, 1, 252, 13, 220, 71, - 1, 248, 97, 220, 71, 1, 243, 128, 220, 71, 1, 213, 123, 220, 71, 1, 216, - 177, 220, 71, 1, 210, 21, 220, 71, 1, 231, 94, 220, 71, 1, 235, 55, 220, - 71, 1, 211, 225, 220, 71, 1, 242, 55, 220, 71, 1, 232, 148, 220, 71, 1, - 230, 194, 220, 71, 1, 236, 47, 220, 71, 1, 245, 209, 220, 71, 1, 253, - 239, 220, 71, 1, 255, 0, 220, 71, 1, 226, 200, 220, 71, 1, 211, 212, 220, - 71, 1, 226, 134, 220, 71, 1, 254, 218, 220, 71, 1, 222, 210, 220, 71, 1, - 227, 198, 220, 71, 1, 245, 225, 220, 71, 1, 254, 223, 220, 71, 1, 240, - 118, 220, 71, 1, 214, 163, 220, 71, 1, 227, 2, 220, 71, 1, 226, 180, 220, - 71, 1, 226, 222, 220, 71, 1, 253, 178, 220, 71, 1, 254, 27, 220, 71, 1, - 226, 162, 220, 71, 1, 254, 201, 220, 71, 1, 245, 94, 220, 71, 1, 254, 5, - 220, 71, 1, 245, 235, 220, 71, 1, 240, 125, 220, 71, 1, 211, 13, 226, - 145, 1, 254, 179, 226, 145, 1, 252, 199, 226, 145, 1, 217, 106, 226, 145, - 1, 235, 147, 226, 145, 1, 211, 165, 226, 145, 1, 234, 138, 226, 145, 1, - 248, 84, 226, 145, 1, 205, 226, 145, 1, 206, 226, 145, 1, 220, 28, 226, - 145, 1, 248, 33, 226, 145, 1, 250, 223, 226, 145, 1, 243, 142, 226, 145, - 1, 244, 204, 226, 145, 1, 224, 89, 226, 145, 1, 235, 15, 226, 145, 1, - 233, 136, 226, 145, 1, 230, 205, 226, 145, 1, 227, 182, 226, 145, 1, 212, - 30, 226, 145, 1, 162, 226, 145, 1, 192, 226, 145, 1, 61, 226, 145, 1, 76, - 226, 145, 1, 74, 226, 145, 1, 78, 226, 145, 1, 69, 226, 145, 1, 255, 82, - 226, 145, 1, 245, 217, 226, 145, 1, 226, 187, 226, 145, 21, 210, 86, 226, - 145, 21, 111, 226, 145, 21, 105, 226, 145, 21, 158, 226, 145, 21, 161, - 226, 145, 21, 190, 226, 145, 21, 195, 226, 145, 21, 199, 226, 145, 21, - 196, 226, 145, 21, 201, 249, 75, 3, 61, 249, 75, 3, 76, 249, 75, 3, 74, - 249, 75, 3, 78, 249, 75, 3, 69, 249, 75, 3, 235, 147, 249, 75, 3, 235, - 74, 249, 75, 3, 176, 249, 75, 3, 234, 188, 249, 75, 3, 234, 98, 249, 75, - 3, 234, 34, 249, 75, 3, 233, 223, 249, 75, 3, 233, 141, 249, 75, 3, 233, - 64, 249, 75, 3, 232, 247, 249, 75, 3, 232, 162, 249, 75, 3, 232, 103, - 249, 75, 3, 186, 249, 75, 3, 231, 96, 249, 75, 3, 230, 235, 249, 75, 3, - 230, 166, 249, 75, 3, 230, 107, 249, 75, 3, 198, 249, 75, 3, 229, 112, - 249, 75, 3, 228, 238, 249, 75, 3, 228, 79, 249, 75, 3, 227, 242, 249, 75, - 3, 191, 249, 75, 3, 225, 224, 249, 75, 3, 225, 111, 249, 75, 3, 225, 19, - 249, 75, 3, 224, 153, 249, 75, 3, 205, 249, 75, 3, 223, 131, 249, 75, 3, - 223, 38, 249, 75, 3, 222, 213, 249, 75, 3, 222, 142, 249, 75, 3, 206, - 249, 75, 3, 221, 183, 249, 75, 3, 219, 193, 249, 75, 3, 219, 60, 249, 75, - 3, 218, 84, 249, 75, 3, 217, 106, 249, 75, 3, 217, 23, 249, 75, 3, 216, - 118, 249, 75, 3, 112, 249, 75, 3, 215, 119, 249, 75, 3, 212, 65, 249, 75, - 3, 212, 22, 249, 75, 3, 211, 250, 249, 75, 3, 211, 227, 249, 75, 3, 211, - 165, 249, 75, 3, 211, 162, 249, 75, 3, 210, 116, 249, 75, 3, 210, 23, - 236, 8, 254, 35, 1, 254, 177, 236, 8, 254, 35, 1, 252, 33, 236, 8, 254, - 35, 1, 242, 208, 236, 8, 254, 35, 1, 248, 196, 236, 8, 254, 35, 1, 241, - 245, 236, 8, 254, 35, 1, 212, 30, 236, 8, 254, 35, 1, 210, 97, 236, 8, - 254, 35, 1, 241, 202, 236, 8, 254, 35, 1, 216, 227, 236, 8, 254, 35, 1, - 210, 232, 236, 8, 254, 35, 1, 234, 231, 236, 8, 254, 35, 1, 233, 99, 236, - 8, 254, 35, 1, 231, 70, 236, 8, 254, 35, 1, 227, 198, 236, 8, 254, 35, 1, - 221, 251, 236, 8, 254, 35, 1, 253, 170, 236, 8, 254, 35, 1, 225, 224, - 236, 8, 254, 35, 1, 222, 26, 236, 8, 254, 35, 1, 224, 37, 236, 8, 254, - 35, 1, 223, 70, 236, 8, 254, 35, 1, 220, 22, 236, 8, 254, 35, 1, 217, 37, - 236, 8, 254, 35, 221, 175, 50, 236, 8, 254, 35, 54, 111, 236, 8, 254, 35, - 54, 105, 236, 8, 254, 35, 54, 158, 236, 8, 254, 35, 54, 216, 248, 236, 8, - 254, 35, 54, 215, 73, 236, 8, 254, 35, 54, 123, 240, 217, 236, 8, 254, - 35, 54, 123, 216, 148, 236, 8, 254, 35, 54, 216, 249, 216, 148, 225, 122, - 1, 254, 174, 225, 122, 1, 252, 36, 225, 122, 1, 243, 116, 225, 122, 1, - 248, 64, 225, 122, 1, 241, 245, 225, 122, 1, 212, 37, 225, 122, 1, 210, - 110, 225, 122, 1, 241, 204, 225, 122, 1, 216, 231, 225, 122, 1, 210, 233, - 225, 122, 1, 235, 0, 225, 122, 1, 233, 105, 225, 122, 1, 231, 70, 225, - 122, 1, 227, 198, 225, 122, 1, 220, 146, 225, 122, 1, 254, 205, 225, 122, - 1, 225, 224, 225, 122, 1, 222, 27, 225, 122, 1, 224, 42, 225, 122, 1, - 222, 191, 225, 122, 1, 220, 22, 225, 122, 1, 217, 42, 225, 122, 54, 111, - 225, 122, 54, 216, 248, 225, 122, 54, 215, 73, 225, 122, 54, 123, 240, - 217, 225, 122, 54, 105, 225, 122, 54, 158, 225, 122, 211, 209, 220, 139, - 232, 64, 1, 61, 232, 64, 1, 253, 166, 232, 64, 1, 243, 209, 232, 64, 1, - 249, 68, 232, 64, 1, 76, 232, 64, 1, 214, 105, 232, 64, 1, 74, 232, 64, - 1, 211, 117, 232, 64, 1, 235, 29, 232, 64, 1, 156, 232, 64, 1, 194, 232, - 64, 1, 230, 30, 232, 64, 1, 78, 232, 64, 1, 153, 232, 64, 1, 218, 228, - 232, 64, 1, 217, 153, 232, 64, 1, 69, 232, 64, 1, 245, 14, 232, 64, 1, - 224, 99, 232, 64, 1, 222, 93, 232, 64, 1, 215, 160, 232, 64, 1, 254, 131, - 232, 64, 1, 245, 158, 232, 64, 1, 232, 67, 232, 64, 1, 228, 116, 232, 64, - 1, 251, 74, 232, 64, 215, 223, 79, 231, 53, 241, 181, 1, 61, 231, 53, - 241, 181, 1, 76, 231, 53, 241, 181, 1, 74, 231, 53, 241, 181, 1, 78, 231, - 53, 241, 181, 1, 192, 231, 53, 241, 181, 1, 212, 65, 231, 53, 241, 181, - 1, 252, 199, 231, 53, 241, 181, 1, 252, 198, 231, 53, 241, 181, 1, 191, - 231, 53, 241, 181, 1, 186, 231, 53, 241, 181, 1, 198, 231, 53, 241, 181, - 1, 229, 233, 231, 53, 241, 181, 1, 229, 112, 231, 53, 241, 181, 1, 229, - 111, 231, 53, 241, 181, 1, 205, 231, 53, 241, 181, 1, 223, 190, 231, 53, - 241, 181, 1, 233, 141, 231, 53, 241, 181, 1, 234, 138, 231, 53, 241, 181, - 1, 241, 196, 231, 53, 241, 181, 1, 206, 231, 53, 241, 181, 1, 222, 35, - 231, 53, 241, 181, 1, 221, 183, 231, 53, 241, 181, 1, 176, 231, 53, 241, - 181, 1, 224, 91, 231, 53, 241, 181, 1, 217, 106, 231, 53, 241, 181, 1, - 217, 105, 231, 53, 241, 181, 1, 217, 23, 231, 53, 241, 181, 1, 217, 22, - 231, 53, 241, 181, 1, 112, 231, 53, 241, 181, 1, 248, 229, 231, 53, 241, - 181, 16, 213, 170, 231, 53, 241, 181, 16, 213, 169, 231, 53, 249, 102, 1, - 61, 231, 53, 249, 102, 1, 76, 231, 53, 249, 102, 1, 74, 231, 53, 249, - 102, 1, 78, 231, 53, 249, 102, 1, 192, 231, 53, 249, 102, 1, 212, 65, - 231, 53, 249, 102, 1, 252, 199, 231, 53, 249, 102, 1, 191, 231, 53, 249, - 102, 1, 186, 231, 53, 249, 102, 1, 198, 231, 53, 249, 102, 1, 229, 112, - 231, 53, 249, 102, 1, 205, 231, 53, 249, 102, 1, 233, 141, 231, 53, 249, - 102, 1, 234, 138, 231, 53, 249, 102, 1, 241, 196, 231, 53, 249, 102, 1, - 206, 231, 53, 249, 102, 1, 254, 31, 206, 231, 53, 249, 102, 1, 221, 183, - 231, 53, 249, 102, 1, 176, 231, 53, 249, 102, 1, 224, 91, 231, 53, 249, - 102, 1, 217, 106, 231, 53, 249, 102, 1, 217, 23, 231, 53, 249, 102, 1, - 112, 231, 53, 249, 102, 1, 248, 229, 231, 53, 249, 102, 232, 151, 222, - 219, 231, 53, 249, 102, 232, 151, 236, 13, 234, 126, 1, 61, 234, 126, 25, - 5, 74, 234, 126, 25, 5, 69, 234, 126, 25, 5, 149, 153, 234, 126, 25, 5, - 76, 234, 126, 25, 5, 78, 234, 126, 25, 233, 29, 79, 234, 126, 5, 52, 222, - 237, 51, 234, 126, 5, 254, 83, 234, 126, 5, 213, 147, 234, 126, 1, 176, - 234, 126, 1, 234, 138, 234, 126, 1, 243, 142, 234, 126, 1, 243, 0, 234, - 126, 1, 251, 41, 234, 126, 1, 250, 165, 234, 126, 1, 235, 147, 234, 126, - 1, 227, 169, 234, 126, 1, 215, 157, 234, 126, 1, 215, 145, 234, 126, 1, - 248, 143, 234, 126, 1, 248, 127, 234, 126, 1, 228, 115, 234, 126, 1, 217, - 106, 234, 126, 1, 216, 209, 234, 126, 1, 248, 229, 234, 126, 1, 248, 33, - 234, 126, 1, 198, 234, 126, 1, 191, 234, 126, 1, 225, 150, 234, 126, 1, - 252, 199, 234, 126, 1, 252, 26, 234, 126, 1, 186, 234, 126, 1, 192, 234, - 126, 1, 205, 234, 126, 1, 233, 141, 234, 126, 1, 214, 27, 234, 126, 1, - 220, 104, 234, 126, 1, 218, 225, 234, 126, 1, 206, 234, 126, 1, 210, 116, - 234, 126, 1, 162, 234, 126, 1, 234, 52, 234, 126, 1, 215, 125, 234, 126, - 5, 252, 149, 48, 234, 126, 5, 250, 229, 234, 126, 5, 59, 51, 234, 126, - 213, 152, 234, 126, 21, 111, 234, 126, 21, 105, 234, 126, 21, 158, 234, - 126, 21, 161, 234, 126, 54, 216, 248, 234, 126, 54, 215, 73, 234, 126, - 54, 123, 240, 217, 234, 126, 54, 123, 216, 148, 234, 126, 224, 144, 247, - 128, 234, 126, 224, 144, 4, 250, 43, 234, 126, 224, 144, 250, 43, 234, - 126, 224, 144, 249, 145, 130, 234, 126, 224, 144, 231, 185, 234, 126, - 224, 144, 232, 121, 234, 126, 224, 144, 248, 186, 234, 126, 224, 144, 52, - 248, 186, 234, 126, 224, 144, 232, 213, 55, 219, 30, 254, 46, 1, 241, - 245, 55, 219, 30, 254, 46, 1, 233, 99, 55, 219, 30, 254, 46, 1, 241, 202, - 55, 219, 30, 254, 46, 1, 231, 70, 55, 219, 30, 254, 46, 1, 224, 37, 55, - 219, 30, 254, 46, 1, 212, 30, 55, 219, 30, 254, 46, 1, 220, 22, 55, 219, - 30, 254, 46, 1, 223, 70, 55, 219, 30, 254, 46, 1, 252, 33, 55, 219, 30, - 254, 46, 1, 217, 37, 55, 219, 30, 254, 46, 1, 221, 228, 55, 219, 30, 254, - 46, 1, 234, 231, 55, 219, 30, 254, 46, 1, 227, 198, 55, 219, 30, 254, 46, - 1, 234, 122, 55, 219, 30, 254, 46, 1, 222, 26, 55, 219, 30, 254, 46, 1, - 221, 251, 55, 219, 30, 254, 46, 1, 244, 162, 55, 219, 30, 254, 46, 1, - 254, 179, 55, 219, 30, 254, 46, 1, 253, 169, 55, 219, 30, 254, 46, 1, - 248, 30, 55, 219, 30, 254, 46, 1, 242, 208, 55, 219, 30, 254, 46, 1, 248, - 196, 55, 219, 30, 254, 46, 1, 242, 245, 55, 219, 30, 254, 46, 1, 216, - 227, 55, 219, 30, 254, 46, 1, 210, 96, 55, 219, 30, 254, 46, 1, 248, 27, - 55, 219, 30, 254, 46, 1, 210, 232, 55, 219, 30, 254, 46, 1, 216, 198, 55, - 219, 30, 254, 46, 1, 216, 179, 55, 219, 30, 254, 46, 54, 111, 55, 219, - 30, 254, 46, 54, 244, 122, 55, 219, 30, 254, 46, 132, 235, 245, 253, 180, - 1, 61, 253, 180, 1, 255, 82, 253, 180, 1, 254, 81, 253, 180, 1, 255, 41, - 253, 180, 1, 254, 131, 253, 180, 1, 255, 42, 253, 180, 1, 254, 252, 253, - 180, 1, 254, 248, 253, 180, 1, 76, 253, 180, 1, 245, 217, 253, 180, 1, - 78, 253, 180, 1, 226, 187, 253, 180, 1, 74, 253, 180, 1, 236, 40, 253, - 180, 1, 69, 253, 180, 1, 214, 118, 253, 180, 1, 234, 188, 253, 180, 1, - 211, 162, 253, 180, 1, 211, 128, 253, 180, 1, 211, 137, 253, 180, 1, 243, - 69, 253, 180, 1, 243, 31, 253, 180, 1, 242, 243, 253, 180, 1, 250, 198, - 253, 180, 1, 235, 132, 253, 180, 1, 217, 23, 253, 180, 1, 216, 196, 253, - 180, 1, 248, 98, 253, 180, 1, 248, 25, 253, 180, 1, 215, 152, 253, 180, - 1, 225, 224, 253, 180, 1, 244, 162, 253, 180, 1, 252, 83, 253, 180, 1, - 252, 22, 253, 180, 1, 229, 69, 253, 180, 1, 228, 244, 253, 180, 1, 228, - 245, 253, 180, 1, 229, 112, 253, 180, 1, 227, 160, 253, 180, 1, 228, 110, - 253, 180, 1, 231, 96, 253, 180, 1, 241, 123, 253, 180, 1, 210, 166, 253, - 180, 1, 211, 47, 253, 180, 1, 213, 255, 253, 180, 1, 223, 131, 253, 180, - 1, 233, 64, 253, 180, 1, 221, 183, 253, 180, 1, 210, 94, 253, 180, 1, - 220, 65, 253, 180, 1, 210, 74, 253, 180, 1, 219, 200, 253, 180, 1, 218, - 195, 253, 180, 1, 241, 245, 253, 180, 255, 30, 79, 216, 80, 113, 170, - 115, 123, 59, 224, 143, 4, 113, 170, 115, 123, 59, 224, 143, 233, 91, - 113, 170, 115, 123, 59, 224, 143, 233, 91, 123, 59, 115, 113, 170, 224, - 143, 233, 91, 113, 222, 235, 115, 123, 222, 237, 224, 143, 233, 91, 123, - 222, 237, 115, 113, 222, 235, 224, 143, 235, 225, 226, 2, 1, 254, 177, - 235, 225, 226, 2, 1, 252, 33, 235, 225, 226, 2, 1, 242, 208, 235, 225, - 226, 2, 1, 248, 196, 235, 225, 226, 2, 1, 241, 245, 235, 225, 226, 2, 1, - 212, 30, 235, 225, 226, 2, 1, 210, 97, 235, 225, 226, 2, 1, 241, 202, - 235, 225, 226, 2, 1, 216, 227, 235, 225, 226, 2, 1, 210, 232, 235, 225, - 226, 2, 1, 234, 231, 235, 225, 226, 2, 1, 233, 99, 235, 225, 226, 2, 1, - 231, 70, 235, 225, 226, 2, 1, 227, 198, 235, 225, 226, 2, 1, 221, 251, - 235, 225, 226, 2, 1, 253, 170, 235, 225, 226, 2, 1, 225, 224, 235, 225, - 226, 2, 1, 222, 26, 235, 225, 226, 2, 1, 224, 37, 235, 225, 226, 2, 1, - 223, 70, 235, 225, 226, 2, 1, 220, 22, 235, 225, 226, 2, 1, 217, 37, 235, - 225, 226, 2, 54, 111, 235, 225, 226, 2, 54, 105, 235, 225, 226, 2, 54, - 158, 235, 225, 226, 2, 54, 161, 235, 225, 226, 2, 54, 216, 248, 235, 225, - 226, 2, 54, 215, 73, 235, 225, 226, 2, 54, 123, 240, 217, 235, 225, 226, - 2, 54, 123, 216, 148, 235, 225, 226, 76, 1, 254, 177, 235, 225, 226, 76, - 1, 252, 33, 235, 225, 226, 76, 1, 242, 208, 235, 225, 226, 76, 1, 248, - 196, 235, 225, 226, 76, 1, 241, 245, 235, 225, 226, 76, 1, 212, 29, 235, - 225, 226, 76, 1, 210, 97, 235, 225, 226, 76, 1, 241, 202, 235, 225, 226, - 76, 1, 216, 227, 235, 225, 226, 76, 1, 210, 232, 235, 225, 226, 76, 1, - 234, 231, 235, 225, 226, 76, 1, 233, 99, 235, 225, 226, 76, 1, 231, 69, - 235, 225, 226, 76, 1, 227, 198, 235, 225, 226, 76, 1, 221, 251, 235, 225, - 226, 76, 1, 225, 224, 235, 225, 226, 76, 1, 222, 26, 235, 225, 226, 76, - 1, 220, 22, 235, 225, 226, 76, 1, 217, 37, 235, 225, 226, 76, 54, 111, - 235, 225, 226, 76, 54, 105, 235, 225, 226, 76, 54, 158, 235, 225, 226, - 76, 54, 161, 235, 225, 226, 76, 54, 216, 248, 235, 225, 226, 76, 54, 215, - 73, 235, 225, 226, 76, 54, 123, 240, 217, 235, 225, 226, 76, 54, 123, - 216, 148, 55, 202, 1, 226, 153, 61, 55, 202, 1, 211, 37, 61, 55, 202, 1, - 211, 37, 254, 252, 55, 202, 1, 226, 153, 74, 55, 202, 1, 211, 37, 74, 55, - 202, 1, 211, 37, 76, 55, 202, 1, 226, 153, 78, 55, 202, 1, 226, 153, 226, - 238, 55, 202, 1, 211, 37, 226, 238, 55, 202, 1, 226, 153, 255, 34, 55, - 202, 1, 211, 37, 255, 34, 55, 202, 1, 226, 153, 254, 251, 55, 202, 1, - 211, 37, 254, 251, 55, 202, 1, 226, 153, 254, 225, 55, 202, 1, 211, 37, - 254, 225, 55, 202, 1, 226, 153, 254, 246, 55, 202, 1, 211, 37, 254, 246, - 55, 202, 1, 226, 153, 255, 8, 55, 202, 1, 211, 37, 255, 8, 55, 202, 1, - 226, 153, 254, 250, 55, 202, 1, 226, 153, 245, 20, 55, 202, 1, 211, 37, - 245, 20, 55, 202, 1, 226, 153, 253, 175, 55, 202, 1, 211, 37, 253, 175, - 55, 202, 1, 226, 153, 254, 233, 55, 202, 1, 211, 37, 254, 233, 55, 202, - 1, 226, 153, 254, 244, 55, 202, 1, 211, 37, 254, 244, 55, 202, 1, 226, - 153, 226, 237, 55, 202, 1, 211, 37, 226, 237, 55, 202, 1, 226, 153, 254, - 187, 55, 202, 1, 211, 37, 254, 187, 55, 202, 1, 226, 153, 254, 243, 55, - 202, 1, 226, 153, 245, 169, 55, 202, 1, 226, 153, 245, 167, 55, 202, 1, - 226, 153, 254, 131, 55, 202, 1, 226, 153, 254, 241, 55, 202, 1, 211, 37, - 254, 241, 55, 202, 1, 226, 153, 245, 139, 55, 202, 1, 211, 37, 245, 139, - 55, 202, 1, 226, 153, 245, 155, 55, 202, 1, 211, 37, 245, 155, 55, 202, - 1, 226, 153, 245, 126, 55, 202, 1, 211, 37, 245, 126, 55, 202, 1, 211, - 37, 254, 123, 55, 202, 1, 226, 153, 245, 146, 55, 202, 1, 211, 37, 254, - 240, 55, 202, 1, 226, 153, 245, 116, 55, 202, 1, 226, 153, 226, 179, 55, - 202, 1, 226, 153, 240, 120, 55, 202, 1, 226, 153, 245, 223, 55, 202, 1, - 211, 37, 245, 223, 55, 202, 1, 226, 153, 254, 53, 55, 202, 1, 211, 37, - 254, 53, 55, 202, 1, 226, 153, 235, 188, 55, 202, 1, 211, 37, 235, 188, - 55, 202, 1, 226, 153, 226, 163, 55, 202, 1, 211, 37, 226, 163, 55, 202, - 1, 226, 153, 254, 49, 55, 202, 1, 211, 37, 254, 49, 55, 202, 1, 226, 153, - 254, 239, 55, 202, 1, 226, 153, 253, 245, 55, 202, 1, 226, 153, 254, 237, - 55, 202, 1, 226, 153, 253, 239, 55, 202, 1, 211, 37, 253, 239, 55, 202, - 1, 226, 153, 245, 83, 55, 202, 1, 211, 37, 245, 83, 55, 202, 1, 226, 153, - 253, 214, 55, 202, 1, 211, 37, 253, 214, 55, 202, 1, 226, 153, 254, 234, - 55, 202, 1, 211, 37, 254, 234, 55, 202, 1, 226, 153, 226, 144, 55, 202, - 1, 226, 153, 252, 133, 222, 129, 21, 111, 222, 129, 21, 105, 222, 129, - 21, 158, 222, 129, 21, 161, 222, 129, 21, 190, 222, 129, 21, 195, 222, - 129, 21, 199, 222, 129, 21, 196, 222, 129, 21, 201, 222, 129, 54, 216, - 248, 222, 129, 54, 215, 73, 222, 129, 54, 216, 163, 222, 129, 54, 244, - 23, 222, 129, 54, 244, 122, 222, 129, 54, 219, 113, 222, 129, 54, 220, - 118, 222, 129, 54, 245, 192, 222, 129, 54, 228, 200, 222, 129, 54, 123, - 240, 217, 222, 129, 54, 113, 240, 217, 222, 129, 54, 134, 240, 217, 222, - 129, 54, 244, 19, 240, 217, 222, 129, 54, 244, 89, 240, 217, 222, 129, - 54, 219, 127, 240, 217, 222, 129, 54, 220, 124, 240, 217, 222, 129, 54, - 245, 201, 240, 217, 222, 129, 54, 228, 205, 240, 217, 222, 129, 244, 10, - 123, 242, 34, 222, 129, 244, 10, 123, 224, 24, 222, 129, 244, 10, 123, - 216, 169, 222, 129, 244, 10, 113, 216, 167, 118, 5, 251, 7, 118, 5, 254, - 83, 118, 5, 213, 147, 118, 5, 235, 108, 118, 5, 214, 161, 118, 1, 61, - 118, 1, 255, 82, 118, 1, 74, 118, 1, 236, 40, 118, 1, 69, 118, 1, 214, - 118, 118, 1, 149, 153, 118, 1, 149, 222, 182, 118, 1, 149, 156, 118, 1, - 149, 232, 191, 118, 1, 76, 118, 1, 254, 210, 118, 1, 78, 118, 1, 253, - 200, 118, 1, 176, 118, 1, 234, 138, 118, 1, 243, 142, 118, 1, 243, 0, - 118, 1, 229, 82, 118, 1, 251, 41, 118, 1, 250, 165, 118, 1, 235, 147, - 118, 1, 235, 120, 118, 1, 227, 169, 118, 1, 215, 157, 118, 1, 215, 145, - 118, 1, 248, 143, 118, 1, 248, 127, 118, 1, 228, 115, 118, 1, 217, 106, - 118, 1, 216, 209, 118, 1, 248, 229, 118, 1, 248, 33, 118, 1, 198, 118, 1, - 191, 118, 1, 225, 150, 118, 1, 252, 199, 118, 1, 252, 26, 118, 1, 186, - 118, 1, 192, 118, 1, 205, 118, 1, 233, 141, 118, 1, 214, 27, 118, 1, 220, - 104, 118, 1, 218, 225, 118, 1, 206, 118, 1, 162, 118, 1, 232, 190, 118, - 1, 55, 36, 232, 181, 118, 1, 55, 36, 222, 181, 118, 1, 55, 36, 228, 97, - 118, 25, 5, 255, 82, 118, 25, 5, 252, 23, 255, 82, 118, 25, 5, 74, 118, - 25, 5, 236, 40, 118, 25, 5, 69, 118, 25, 5, 214, 118, 118, 25, 5, 149, - 153, 118, 25, 5, 149, 222, 182, 118, 25, 5, 149, 156, 118, 25, 5, 149, - 232, 191, 118, 25, 5, 76, 118, 25, 5, 254, 210, 118, 25, 5, 78, 118, 25, - 5, 253, 200, 118, 213, 152, 118, 248, 186, 118, 52, 248, 186, 118, 224, - 144, 247, 128, 118, 224, 144, 52, 247, 128, 118, 224, 144, 232, 219, 118, - 224, 144, 249, 145, 130, 118, 224, 144, 232, 121, 118, 54, 111, 118, 54, - 105, 118, 54, 158, 118, 54, 161, 118, 54, 190, 118, 54, 195, 118, 54, - 199, 118, 54, 196, 118, 54, 201, 118, 54, 216, 248, 118, 54, 215, 73, - 118, 54, 216, 163, 118, 54, 244, 23, 118, 54, 244, 122, 118, 54, 219, - 113, 118, 54, 220, 118, 118, 54, 245, 192, 118, 54, 228, 200, 118, 54, - 123, 240, 217, 118, 54, 123, 216, 148, 118, 21, 210, 86, 118, 21, 111, - 118, 21, 105, 118, 21, 158, 118, 21, 161, 118, 21, 190, 118, 21, 195, - 118, 21, 199, 118, 21, 196, 118, 21, 201, 234, 250, 5, 251, 7, 234, 250, - 5, 254, 83, 234, 250, 5, 213, 147, 234, 250, 1, 61, 234, 250, 1, 255, 82, - 234, 250, 1, 74, 234, 250, 1, 236, 40, 234, 250, 1, 69, 234, 250, 1, 214, - 118, 234, 250, 1, 76, 234, 250, 1, 254, 210, 234, 250, 1, 78, 234, 250, - 1, 253, 200, 234, 250, 1, 176, 234, 250, 1, 234, 138, 234, 250, 1, 243, - 142, 234, 250, 1, 243, 0, 234, 250, 1, 229, 82, 234, 250, 1, 251, 41, - 234, 250, 1, 250, 165, 234, 250, 1, 235, 147, 234, 250, 1, 235, 120, 234, - 250, 1, 227, 169, 234, 250, 1, 215, 157, 234, 250, 1, 215, 145, 234, 250, - 1, 248, 143, 234, 250, 1, 248, 132, 234, 250, 1, 248, 127, 234, 250, 1, - 223, 42, 234, 250, 1, 228, 115, 234, 250, 1, 217, 106, 234, 250, 1, 216, - 209, 234, 250, 1, 248, 229, 234, 250, 1, 248, 33, 234, 250, 1, 198, 234, - 250, 1, 191, 234, 250, 1, 225, 150, 234, 250, 1, 252, 199, 234, 250, 1, - 252, 26, 234, 250, 1, 186, 234, 250, 1, 192, 234, 250, 1, 205, 234, 250, - 1, 233, 141, 234, 250, 1, 214, 27, 234, 250, 1, 220, 104, 234, 250, 1, - 218, 225, 234, 250, 1, 206, 234, 250, 1, 162, 234, 250, 25, 5, 255, 82, - 234, 250, 25, 5, 74, 234, 250, 25, 5, 236, 40, 234, 250, 25, 5, 69, 234, - 250, 25, 5, 214, 118, 234, 250, 25, 5, 76, 234, 250, 25, 5, 254, 210, - 234, 250, 25, 5, 78, 234, 250, 25, 5, 253, 200, 234, 250, 5, 213, 152, - 234, 250, 5, 227, 209, 234, 250, 255, 30, 50, 234, 250, 245, 129, 50, - 234, 250, 54, 50, 234, 250, 221, 175, 79, 234, 250, 52, 221, 175, 79, - 234, 250, 248, 186, 234, 250, 52, 248, 186, 219, 38, 219, 46, 1, 222, 20, - 219, 38, 219, 46, 1, 217, 81, 219, 38, 219, 46, 1, 252, 176, 219, 38, - 219, 46, 1, 251, 31, 219, 38, 219, 46, 1, 248, 211, 219, 38, 219, 46, 1, - 243, 127, 219, 38, 219, 46, 1, 231, 215, 219, 38, 219, 46, 1, 229, 79, - 219, 38, 219, 46, 1, 233, 118, 219, 38, 219, 46, 1, 229, 218, 219, 38, - 219, 46, 1, 214, 24, 219, 38, 219, 46, 1, 226, 77, 219, 38, 219, 46, 1, - 211, 84, 219, 38, 219, 46, 1, 223, 171, 219, 38, 219, 46, 1, 242, 44, - 219, 38, 219, 46, 1, 234, 254, 219, 38, 219, 46, 1, 235, 142, 219, 38, - 219, 46, 1, 227, 166, 219, 38, 219, 46, 1, 254, 218, 219, 38, 219, 46, 1, - 245, 215, 219, 38, 219, 46, 1, 236, 41, 219, 38, 219, 46, 1, 214, 208, - 219, 38, 219, 46, 1, 226, 226, 219, 38, 219, 46, 1, 245, 205, 219, 38, - 219, 46, 1, 231, 228, 219, 38, 219, 46, 21, 210, 86, 219, 38, 219, 46, - 21, 111, 219, 38, 219, 46, 21, 105, 219, 38, 219, 46, 21, 158, 219, 38, - 219, 46, 21, 161, 219, 38, 219, 46, 21, 190, 219, 38, 219, 46, 21, 195, - 219, 38, 219, 46, 21, 199, 219, 38, 219, 46, 21, 196, 219, 38, 219, 46, - 21, 201, 250, 159, 5, 251, 7, 250, 159, 5, 254, 83, 250, 159, 5, 213, - 147, 250, 159, 1, 255, 82, 250, 159, 1, 74, 250, 159, 1, 69, 250, 159, 1, - 76, 250, 159, 1, 235, 16, 250, 159, 1, 234, 137, 250, 159, 1, 243, 139, - 250, 159, 1, 242, 255, 250, 159, 1, 229, 81, 250, 159, 1, 251, 40, 250, - 159, 1, 250, 164, 250, 159, 1, 235, 146, 250, 159, 1, 235, 119, 250, 159, - 1, 227, 168, 250, 159, 1, 215, 156, 250, 159, 1, 215, 144, 250, 159, 1, - 248, 142, 250, 159, 1, 248, 126, 250, 159, 1, 228, 114, 250, 159, 1, 217, - 102, 250, 159, 1, 216, 208, 250, 159, 1, 248, 228, 250, 159, 1, 248, 32, - 250, 159, 1, 229, 230, 250, 159, 1, 226, 93, 250, 159, 1, 225, 149, 250, - 159, 1, 252, 197, 250, 159, 1, 252, 25, 250, 159, 1, 231, 242, 250, 159, - 1, 210, 167, 250, 159, 1, 211, 103, 250, 159, 1, 223, 187, 250, 159, 1, - 233, 140, 250, 159, 1, 212, 64, 250, 159, 1, 222, 33, 250, 159, 1, 242, - 53, 250, 159, 25, 5, 61, 250, 159, 25, 5, 74, 250, 159, 25, 5, 236, 40, - 250, 159, 25, 5, 69, 250, 159, 25, 5, 214, 118, 250, 159, 25, 5, 76, 250, - 159, 25, 5, 254, 210, 250, 159, 25, 5, 78, 250, 159, 25, 5, 253, 200, - 250, 159, 25, 5, 226, 223, 250, 159, 144, 79, 250, 159, 253, 201, 79, - 250, 159, 213, 152, 250, 159, 231, 240, 250, 159, 21, 210, 86, 250, 159, - 21, 111, 250, 159, 21, 105, 250, 159, 21, 158, 250, 159, 21, 161, 250, - 159, 21, 190, 250, 159, 21, 195, 250, 159, 21, 199, 250, 159, 21, 196, - 250, 159, 21, 201, 250, 159, 221, 175, 79, 250, 159, 248, 186, 250, 159, - 52, 248, 186, 250, 159, 224, 16, 79, 174, 5, 251, 7, 174, 5, 254, 83, - 174, 5, 213, 147, 174, 1, 61, 174, 1, 255, 82, 174, 1, 74, 174, 1, 236, - 40, 174, 1, 69, 174, 1, 214, 118, 174, 1, 149, 153, 174, 1, 149, 222, - 182, 174, 1, 149, 156, 174, 1, 149, 232, 191, 174, 1, 76, 174, 1, 254, - 210, 174, 1, 78, 174, 1, 253, 200, 174, 1, 176, 174, 1, 234, 138, 174, 1, - 243, 142, 174, 1, 243, 0, 174, 1, 229, 82, 174, 1, 251, 41, 174, 1, 250, - 165, 174, 1, 235, 147, 174, 1, 235, 120, 174, 1, 227, 169, 174, 1, 215, - 157, 174, 1, 215, 145, 174, 1, 248, 143, 174, 1, 248, 127, 174, 1, 228, - 115, 174, 1, 217, 106, 174, 1, 216, 209, 174, 1, 248, 229, 174, 1, 248, - 33, 174, 1, 198, 174, 1, 191, 174, 1, 225, 150, 174, 1, 252, 199, 174, 1, - 252, 26, 174, 1, 186, 174, 1, 192, 174, 1, 205, 174, 1, 233, 141, 174, 1, - 232, 190, 174, 1, 214, 27, 174, 1, 220, 104, 174, 1, 218, 225, 174, 1, - 206, 174, 1, 162, 174, 25, 5, 255, 82, 174, 25, 5, 74, 174, 25, 5, 236, - 40, 174, 25, 5, 69, 174, 25, 5, 214, 118, 174, 25, 5, 149, 153, 174, 25, - 5, 149, 222, 182, 174, 25, 5, 149, 156, 174, 25, 5, 149, 232, 191, 174, - 25, 5, 76, 174, 25, 5, 254, 210, 174, 25, 5, 78, 174, 25, 5, 253, 200, - 174, 5, 213, 152, 174, 5, 253, 183, 174, 5, 235, 108, 174, 5, 214, 161, - 174, 226, 208, 174, 248, 186, 174, 52, 248, 186, 174, 255, 30, 50, 174, - 220, 139, 174, 21, 210, 86, 174, 21, 111, 174, 21, 105, 174, 21, 158, - 174, 21, 161, 174, 21, 190, 174, 21, 195, 174, 21, 199, 174, 21, 196, - 174, 21, 201, 217, 70, 1, 61, 217, 70, 1, 255, 82, 217, 70, 1, 74, 217, - 70, 1, 236, 40, 217, 70, 1, 69, 217, 70, 1, 214, 118, 217, 70, 1, 76, - 217, 70, 1, 254, 210, 217, 70, 1, 78, 217, 70, 1, 253, 200, 217, 70, 1, - 176, 217, 70, 1, 234, 138, 217, 70, 1, 243, 142, 217, 70, 1, 243, 0, 217, - 70, 1, 229, 82, 217, 70, 1, 251, 41, 217, 70, 1, 250, 165, 217, 70, 1, - 235, 147, 217, 70, 1, 235, 120, 217, 70, 1, 227, 169, 217, 70, 1, 215, - 157, 217, 70, 1, 215, 145, 217, 70, 1, 248, 143, 217, 70, 1, 248, 127, - 217, 70, 1, 228, 115, 217, 70, 1, 217, 106, 217, 70, 1, 216, 209, 217, - 70, 1, 248, 229, 217, 70, 1, 248, 33, 217, 70, 1, 198, 217, 70, 1, 191, - 217, 70, 1, 225, 150, 217, 70, 1, 252, 199, 217, 70, 1, 252, 26, 217, 70, - 1, 186, 217, 70, 1, 192, 217, 70, 1, 205, 217, 70, 1, 233, 141, 217, 70, - 1, 214, 27, 217, 70, 1, 220, 104, 217, 70, 1, 206, 217, 70, 1, 162, 217, - 70, 1, 222, 181, 217, 70, 5, 254, 83, 217, 70, 5, 213, 147, 217, 70, 25, - 5, 255, 82, 217, 70, 25, 5, 74, 217, 70, 25, 5, 236, 40, 217, 70, 25, 5, - 69, 217, 70, 25, 5, 214, 118, 217, 70, 25, 5, 76, 217, 70, 25, 5, 254, - 210, 217, 70, 25, 5, 78, 217, 70, 25, 5, 253, 200, 217, 70, 5, 213, 152, - 217, 70, 5, 227, 209, 217, 70, 21, 210, 86, 217, 70, 21, 111, 217, 70, - 21, 105, 217, 70, 21, 158, 217, 70, 21, 161, 217, 70, 21, 190, 217, 70, - 21, 195, 217, 70, 21, 199, 217, 70, 21, 196, 217, 70, 21, 201, 15, 5, 61, - 15, 5, 116, 30, 61, 15, 5, 116, 30, 252, 184, 15, 5, 116, 30, 243, 112, - 216, 240, 15, 5, 116, 30, 162, 15, 5, 116, 30, 236, 42, 15, 5, 116, 30, - 233, 122, 242, 101, 15, 5, 116, 30, 230, 66, 15, 5, 116, 30, 222, 23, 15, - 5, 255, 84, 15, 5, 255, 34, 15, 5, 255, 35, 30, 253, 237, 15, 5, 255, 35, - 30, 246, 75, 242, 101, 15, 5, 255, 35, 30, 243, 125, 15, 5, 255, 35, 30, - 243, 112, 216, 240, 15, 5, 255, 35, 30, 162, 15, 5, 255, 35, 30, 236, 43, - 242, 101, 15, 5, 255, 35, 30, 236, 16, 15, 5, 255, 35, 30, 233, 123, 15, - 5, 255, 35, 30, 220, 50, 15, 5, 255, 35, 30, 104, 96, 104, 96, 69, 15, 5, - 255, 35, 242, 101, 15, 5, 255, 32, 15, 5, 255, 33, 30, 252, 168, 15, 5, - 255, 33, 30, 243, 112, 216, 240, 15, 5, 255, 33, 30, 231, 97, 96, 245, - 158, 15, 5, 255, 33, 30, 220, 102, 15, 5, 255, 33, 30, 217, 73, 15, 5, - 255, 8, 15, 5, 254, 195, 15, 5, 254, 196, 30, 245, 95, 15, 5, 254, 196, - 30, 220, 12, 96, 242, 197, 15, 5, 254, 187, 15, 5, 254, 188, 30, 254, - 187, 15, 5, 254, 188, 30, 247, 224, 15, 5, 254, 188, 30, 242, 197, 15, 5, - 254, 188, 30, 162, 15, 5, 254, 188, 30, 235, 5, 15, 5, 254, 188, 30, 234, - 98, 15, 5, 254, 188, 30, 220, 65, 15, 5, 254, 188, 30, 214, 126, 15, 5, - 254, 184, 15, 5, 254, 177, 15, 5, 254, 140, 15, 5, 254, 141, 30, 220, 65, - 15, 5, 254, 131, 15, 5, 254, 132, 115, 254, 131, 15, 5, 254, 132, 134, - 216, 86, 15, 5, 254, 132, 96, 229, 222, 226, 168, 254, 132, 96, 229, 221, - 15, 5, 254, 132, 96, 229, 222, 218, 235, 15, 5, 254, 102, 15, 5, 254, 75, - 15, 5, 254, 43, 15, 5, 254, 44, 30, 233, 202, 15, 5, 254, 16, 15, 5, 253, - 244, 15, 5, 253, 239, 15, 5, 253, 240, 210, 40, 216, 240, 15, 5, 253, - 240, 235, 9, 216, 240, 15, 5, 253, 240, 115, 253, 240, 215, 115, 115, - 215, 115, 215, 115, 115, 215, 115, 226, 25, 15, 5, 253, 240, 115, 253, - 240, 115, 253, 239, 15, 5, 253, 240, 115, 253, 240, 115, 253, 240, 249, - 133, 253, 240, 115, 253, 240, 115, 253, 239, 15, 5, 253, 237, 15, 5, 253, - 234, 15, 5, 252, 199, 15, 5, 252, 184, 15, 5, 252, 179, 15, 5, 252, 175, - 15, 5, 252, 169, 15, 5, 252, 170, 115, 252, 169, 15, 5, 252, 168, 15, 5, - 130, 15, 5, 252, 148, 15, 5, 252, 14, 15, 5, 252, 15, 30, 61, 15, 5, 252, - 15, 30, 243, 103, 15, 5, 252, 15, 30, 236, 43, 242, 101, 15, 5, 251, 133, - 15, 5, 251, 134, 115, 251, 134, 255, 34, 15, 5, 251, 134, 115, 251, 134, - 214, 190, 15, 5, 251, 134, 249, 133, 251, 133, 15, 5, 251, 117, 15, 5, - 251, 118, 115, 251, 117, 15, 5, 251, 106, 15, 5, 251, 105, 15, 5, 248, - 229, 15, 5, 248, 220, 15, 5, 248, 221, 234, 72, 30, 116, 96, 231, 152, - 15, 5, 248, 221, 234, 72, 30, 254, 140, 15, 5, 248, 221, 234, 72, 30, - 252, 168, 15, 5, 248, 221, 234, 72, 30, 252, 14, 15, 5, 248, 221, 234, - 72, 30, 243, 142, 15, 5, 248, 221, 234, 72, 30, 243, 143, 96, 231, 152, - 15, 5, 248, 221, 234, 72, 30, 242, 221, 15, 5, 248, 221, 234, 72, 30, - 242, 204, 15, 5, 248, 221, 234, 72, 30, 242, 110, 15, 5, 248, 221, 234, - 72, 30, 162, 15, 5, 248, 221, 234, 72, 30, 235, 186, 15, 5, 248, 221, - 234, 72, 30, 235, 187, 96, 232, 103, 15, 5, 248, 221, 234, 72, 30, 234, - 248, 15, 5, 248, 221, 234, 72, 30, 233, 141, 15, 5, 248, 221, 234, 72, - 30, 232, 103, 15, 5, 248, 221, 234, 72, 30, 232, 104, 96, 231, 151, 15, - 5, 248, 221, 234, 72, 30, 232, 89, 15, 5, 248, 221, 234, 72, 30, 229, - 112, 15, 5, 248, 221, 234, 72, 30, 226, 26, 96, 226, 25, 15, 5, 248, 221, - 234, 72, 30, 219, 193, 15, 5, 248, 221, 234, 72, 30, 217, 73, 15, 5, 248, - 221, 234, 72, 30, 214, 231, 96, 242, 204, 15, 5, 248, 221, 234, 72, 30, - 214, 126, 15, 5, 248, 195, 15, 5, 248, 174, 15, 5, 248, 173, 15, 5, 248, - 172, 15, 5, 248, 11, 15, 5, 247, 250, 15, 5, 247, 225, 15, 5, 247, 226, - 30, 220, 65, 15, 5, 247, 224, 15, 5, 247, 214, 15, 5, 247, 215, 234, 214, - 104, 242, 102, 247, 195, 15, 5, 247, 195, 15, 5, 246, 86, 15, 5, 246, 87, - 115, 246, 86, 15, 5, 246, 87, 242, 101, 15, 5, 246, 87, 220, 47, 15, 5, - 246, 84, 15, 5, 246, 85, 30, 245, 80, 15, 5, 246, 83, 15, 5, 246, 82, 15, - 5, 246, 81, 15, 5, 246, 80, 15, 5, 246, 76, 15, 5, 246, 74, 15, 5, 246, - 75, 242, 101, 15, 5, 246, 75, 242, 102, 242, 101, 15, 5, 246, 73, 15, 5, - 246, 66, 15, 5, 76, 15, 5, 160, 30, 226, 25, 15, 5, 160, 115, 160, 227, - 199, 115, 227, 198, 15, 5, 245, 242, 15, 5, 245, 243, 30, 116, 96, 242, - 56, 96, 248, 229, 15, 5, 245, 243, 30, 243, 103, 15, 5, 245, 243, 30, - 230, 235, 15, 5, 245, 243, 30, 222, 10, 15, 5, 245, 243, 30, 220, 65, 15, - 5, 245, 243, 30, 69, 15, 5, 245, 219, 15, 5, 245, 208, 15, 5, 245, 182, - 15, 5, 245, 158, 15, 5, 245, 159, 30, 243, 111, 15, 5, 245, 159, 30, 243, - 112, 216, 240, 15, 5, 245, 159, 30, 231, 96, 15, 5, 245, 159, 249, 133, - 245, 158, 15, 5, 245, 159, 226, 168, 245, 158, 15, 5, 245, 159, 218, 235, - 15, 5, 245, 97, 15, 5, 245, 95, 15, 5, 245, 80, 15, 5, 245, 18, 15, 5, - 245, 19, 30, 61, 15, 5, 245, 19, 30, 116, 96, 233, 110, 15, 5, 245, 19, - 30, 116, 96, 233, 111, 30, 233, 110, 15, 5, 245, 19, 30, 254, 131, 15, 5, - 245, 19, 30, 252, 184, 15, 5, 245, 19, 30, 246, 75, 242, 101, 15, 5, 245, - 19, 30, 246, 75, 242, 102, 242, 101, 15, 5, 245, 19, 30, 162, 15, 5, 245, - 19, 30, 242, 56, 242, 101, 15, 5, 245, 19, 30, 236, 43, 242, 101, 15, 5, - 245, 19, 30, 234, 213, 15, 5, 245, 19, 30, 234, 214, 218, 235, 15, 5, - 245, 19, 30, 233, 221, 15, 5, 245, 19, 30, 233, 141, 15, 5, 245, 19, 30, - 233, 111, 30, 233, 110, 15, 5, 245, 19, 30, 232, 247, 15, 5, 245, 19, 30, - 232, 103, 15, 5, 245, 19, 30, 214, 230, 15, 5, 245, 19, 30, 214, 219, 15, - 5, 243, 142, 15, 5, 243, 143, 242, 101, 15, 5, 243, 140, 15, 5, 243, 141, - 30, 116, 96, 248, 230, 96, 162, 15, 5, 243, 141, 30, 116, 96, 162, 15, 5, - 243, 141, 30, 116, 96, 236, 42, 15, 5, 243, 141, 30, 255, 33, 216, 241, - 96, 217, 94, 15, 5, 243, 141, 30, 254, 131, 15, 5, 243, 141, 30, 253, - 239, 15, 5, 243, 141, 30, 253, 238, 96, 243, 125, 15, 5, 243, 141, 30, - 252, 184, 15, 5, 243, 141, 30, 252, 149, 96, 205, 15, 5, 243, 141, 30, - 251, 106, 15, 5, 243, 141, 30, 251, 107, 96, 205, 15, 5, 243, 141, 30, - 248, 229, 15, 5, 243, 141, 30, 248, 11, 15, 5, 243, 141, 30, 247, 226, - 30, 220, 65, 15, 5, 243, 141, 30, 246, 84, 15, 5, 243, 141, 30, 245, 182, - 15, 5, 243, 141, 30, 245, 183, 96, 233, 141, 15, 5, 243, 141, 30, 245, - 158, 15, 5, 243, 141, 30, 245, 159, 30, 243, 112, 216, 240, 15, 5, 243, - 141, 30, 243, 112, 216, 240, 15, 5, 243, 141, 30, 243, 103, 15, 5, 243, - 141, 30, 242, 221, 15, 5, 243, 141, 30, 242, 219, 15, 5, 243, 141, 30, - 242, 220, 96, 61, 15, 5, 243, 141, 30, 242, 205, 96, 218, 84, 15, 5, 243, - 141, 30, 242, 56, 96, 232, 104, 96, 245, 80, 15, 5, 243, 141, 30, 242, - 37, 15, 5, 243, 141, 30, 242, 38, 96, 233, 141, 15, 5, 243, 141, 30, 241, - 188, 96, 232, 247, 15, 5, 243, 141, 30, 240, 225, 15, 5, 243, 141, 30, - 236, 43, 242, 101, 15, 5, 243, 141, 30, 235, 173, 96, 240, 230, 96, 253, - 239, 15, 5, 243, 141, 30, 234, 248, 15, 5, 243, 141, 30, 234, 213, 15, 5, - 243, 141, 30, 234, 95, 15, 5, 243, 141, 30, 234, 96, 96, 233, 110, 15, 5, - 243, 141, 30, 233, 222, 96, 254, 131, 15, 5, 243, 141, 30, 233, 141, 15, - 5, 243, 141, 30, 231, 97, 96, 245, 158, 15, 5, 243, 141, 30, 230, 235, - 15, 5, 243, 141, 30, 227, 198, 15, 5, 243, 141, 30, 227, 199, 115, 227, - 198, 15, 5, 243, 141, 30, 191, 15, 5, 243, 141, 30, 222, 10, 15, 5, 243, - 141, 30, 221, 233, 15, 5, 243, 141, 30, 220, 65, 15, 5, 243, 141, 30, - 220, 66, 96, 215, 99, 15, 5, 243, 141, 30, 220, 32, 15, 5, 243, 141, 30, - 218, 44, 15, 5, 243, 141, 30, 217, 73, 15, 5, 243, 141, 30, 69, 15, 5, - 243, 141, 30, 214, 219, 15, 5, 243, 141, 30, 214, 220, 96, 246, 86, 15, - 5, 243, 141, 115, 243, 140, 15, 5, 243, 135, 15, 5, 243, 136, 249, 133, - 243, 135, 15, 5, 243, 133, 15, 5, 243, 134, 115, 243, 134, 243, 104, 115, - 243, 103, 15, 5, 243, 125, 15, 5, 243, 126, 243, 134, 115, 243, 134, 243, - 104, 115, 243, 103, 15, 5, 243, 124, 15, 5, 243, 122, 15, 5, 243, 113, - 15, 5, 243, 111, 15, 5, 243, 112, 216, 240, 15, 5, 243, 112, 115, 243, - 111, 15, 5, 243, 112, 249, 133, 243, 111, 15, 5, 243, 103, 15, 5, 243, - 102, 15, 5, 243, 97, 15, 5, 243, 43, 15, 5, 243, 44, 30, 233, 202, 15, 5, - 242, 221, 15, 5, 242, 222, 30, 76, 15, 5, 242, 222, 30, 69, 15, 5, 242, - 222, 249, 133, 242, 221, 15, 5, 242, 219, 15, 5, 242, 220, 115, 242, 219, - 15, 5, 242, 220, 249, 133, 242, 219, 15, 5, 242, 216, 15, 5, 242, 204, - 15, 5, 242, 205, 242, 101, 15, 5, 242, 202, 15, 5, 242, 203, 30, 116, 96, - 236, 42, 15, 5, 242, 203, 30, 243, 112, 216, 240, 15, 5, 242, 203, 30, - 236, 42, 15, 5, 242, 203, 30, 232, 104, 96, 236, 42, 15, 5, 242, 203, 30, - 191, 15, 5, 242, 199, 15, 5, 242, 197, 15, 5, 242, 198, 249, 133, 242, - 197, 15, 5, 242, 198, 30, 252, 184, 15, 5, 242, 198, 30, 217, 73, 15, 5, - 242, 198, 216, 240, 15, 5, 242, 120, 15, 5, 242, 121, 249, 133, 242, 120, - 15, 5, 242, 118, 15, 5, 242, 119, 30, 234, 248, 15, 5, 242, 119, 30, 234, - 249, 30, 236, 43, 242, 101, 15, 5, 242, 119, 30, 227, 198, 15, 5, 242, - 119, 30, 222, 11, 96, 215, 114, 15, 5, 242, 119, 242, 101, 15, 5, 242, - 110, 15, 5, 242, 111, 30, 116, 96, 233, 202, 15, 5, 242, 111, 30, 233, - 202, 15, 5, 242, 111, 115, 242, 111, 232, 96, 15, 5, 242, 105, 15, 5, - 242, 103, 15, 5, 242, 104, 30, 220, 65, 15, 5, 242, 95, 15, 5, 242, 94, - 15, 5, 242, 91, 15, 5, 242, 90, 15, 5, 162, 15, 5, 242, 56, 216, 240, 15, - 5, 242, 56, 242, 101, 15, 5, 242, 37, 15, 5, 241, 187, 15, 5, 241, 188, - 30, 253, 239, 15, 5, 241, 188, 30, 253, 237, 15, 5, 241, 188, 30, 252, - 184, 15, 5, 241, 188, 30, 247, 195, 15, 5, 241, 188, 30, 243, 133, 15, 5, - 241, 188, 30, 234, 87, 15, 5, 241, 188, 30, 227, 198, 15, 5, 241, 188, - 30, 220, 65, 15, 5, 241, 188, 30, 69, 15, 5, 240, 229, 15, 5, 240, 225, - 15, 5, 240, 226, 30, 254, 131, 15, 5, 240, 226, 30, 242, 37, 15, 5, 240, - 226, 30, 234, 213, 15, 5, 240, 226, 30, 232, 203, 15, 5, 240, 226, 30, - 214, 219, 15, 5, 240, 222, 15, 5, 74, 15, 5, 240, 161, 61, 15, 5, 240, - 122, 15, 5, 236, 70, 15, 5, 236, 71, 115, 236, 71, 251, 106, 15, 5, 236, - 71, 115, 236, 71, 218, 235, 15, 5, 236, 45, 15, 5, 236, 42, 15, 5, 236, - 43, 247, 250, 15, 5, 236, 43, 223, 38, 15, 5, 236, 43, 115, 236, 43, 220, - 16, 115, 220, 16, 214, 220, 115, 214, 219, 15, 5, 236, 43, 242, 101, 15, - 5, 236, 34, 15, 5, 236, 35, 30, 243, 112, 216, 240, 15, 5, 236, 33, 15, - 5, 236, 23, 15, 5, 236, 24, 30, 217, 73, 15, 5, 236, 24, 249, 133, 236, - 23, 15, 5, 236, 24, 226, 168, 236, 23, 15, 5, 236, 24, 218, 235, 15, 5, - 236, 16, 15, 5, 236, 6, 15, 5, 235, 186, 15, 5, 235, 172, 15, 5, 176, 15, - 5, 235, 19, 30, 61, 15, 5, 235, 19, 30, 255, 8, 15, 5, 235, 19, 30, 255, - 9, 96, 233, 221, 15, 5, 235, 19, 30, 253, 237, 15, 5, 235, 19, 30, 252, - 184, 15, 5, 235, 19, 30, 252, 168, 15, 5, 235, 19, 30, 130, 15, 5, 235, - 19, 30, 252, 14, 15, 5, 235, 19, 30, 245, 95, 15, 5, 235, 19, 30, 245, - 80, 15, 5, 235, 19, 30, 243, 142, 15, 5, 235, 19, 30, 243, 125, 15, 5, - 235, 19, 30, 243, 112, 216, 240, 15, 5, 235, 19, 30, 243, 103, 15, 5, - 235, 19, 30, 243, 104, 96, 220, 103, 96, 61, 15, 5, 235, 19, 30, 242, - 221, 15, 5, 235, 19, 30, 242, 204, 15, 5, 235, 19, 30, 242, 198, 96, 221, - 233, 15, 5, 235, 19, 30, 242, 198, 249, 133, 242, 197, 15, 5, 235, 19, - 30, 242, 120, 15, 5, 235, 19, 30, 242, 94, 15, 5, 235, 19, 30, 236, 42, - 15, 5, 235, 19, 30, 236, 23, 15, 5, 235, 19, 30, 234, 248, 15, 5, 235, - 19, 30, 234, 98, 15, 5, 235, 19, 30, 234, 95, 15, 5, 235, 19, 30, 232, - 247, 15, 5, 235, 19, 30, 232, 103, 15, 5, 235, 19, 30, 231, 96, 15, 5, - 235, 19, 30, 231, 97, 96, 246, 86, 15, 5, 235, 19, 30, 231, 97, 96, 242, - 221, 15, 5, 235, 19, 30, 231, 97, 96, 217, 23, 15, 5, 235, 19, 30, 230, - 235, 15, 5, 235, 19, 30, 230, 236, 96, 227, 193, 15, 5, 235, 19, 30, 229, - 112, 15, 5, 235, 19, 30, 227, 198, 15, 5, 235, 19, 30, 225, 111, 15, 5, - 235, 19, 30, 222, 142, 15, 5, 235, 19, 30, 206, 15, 5, 235, 19, 30, 221, - 233, 15, 5, 235, 19, 30, 220, 104, 15, 5, 235, 19, 30, 220, 65, 15, 5, - 235, 19, 30, 220, 32, 15, 5, 235, 19, 30, 219, 227, 15, 5, 235, 19, 30, - 219, 184, 15, 5, 235, 19, 30, 218, 52, 15, 5, 235, 19, 30, 217, 51, 15, - 5, 235, 19, 30, 69, 15, 5, 235, 19, 30, 214, 230, 15, 5, 235, 19, 30, - 214, 219, 15, 5, 235, 19, 30, 214, 193, 30, 191, 15, 5, 235, 19, 30, 214, - 126, 15, 5, 235, 19, 30, 210, 44, 15, 5, 235, 17, 15, 5, 235, 18, 249, - 133, 235, 17, 15, 5, 235, 10, 15, 5, 235, 7, 15, 5, 235, 5, 15, 5, 235, - 4, 15, 5, 235, 2, 15, 5, 235, 3, 115, 235, 2, 15, 5, 234, 248, 15, 5, - 234, 249, 30, 236, 43, 242, 101, 15, 5, 234, 244, 15, 5, 234, 245, 30, - 252, 184, 15, 5, 234, 245, 249, 133, 234, 244, 15, 5, 234, 242, 15, 5, - 234, 241, 15, 5, 234, 213, 15, 5, 234, 214, 233, 124, 30, 104, 115, 233, - 124, 30, 69, 15, 5, 234, 214, 115, 234, 214, 233, 124, 30, 104, 115, 233, - 124, 30, 69, 15, 5, 234, 163, 15, 5, 234, 98, 15, 5, 234, 99, 30, 252, - 184, 15, 5, 234, 99, 30, 69, 15, 5, 234, 99, 30, 214, 219, 15, 5, 234, - 95, 15, 5, 234, 87, 15, 5, 234, 74, 15, 5, 234, 73, 15, 5, 234, 71, 15, - 5, 234, 72, 115, 234, 71, 15, 5, 233, 223, 15, 5, 233, 224, 115, 241, - 188, 30, 253, 238, 233, 224, 115, 241, 188, 30, 253, 237, 15, 5, 233, - 221, 15, 5, 233, 219, 15, 5, 233, 220, 214, 12, 17, 15, 5, 233, 218, 15, - 5, 233, 215, 15, 5, 233, 216, 242, 101, 15, 5, 233, 214, 15, 5, 233, 202, - 15, 5, 233, 203, 226, 168, 233, 202, 15, 5, 233, 197, 15, 5, 233, 178, - 15, 5, 233, 141, 15, 5, 233, 123, 15, 5, 233, 124, 30, 61, 15, 5, 233, - 124, 30, 116, 96, 248, 230, 96, 162, 15, 5, 233, 124, 30, 116, 96, 243, - 103, 15, 5, 233, 124, 30, 116, 96, 233, 110, 15, 5, 233, 124, 30, 254, - 187, 15, 5, 233, 124, 30, 254, 131, 15, 5, 233, 124, 30, 253, 240, 210, - 40, 216, 240, 15, 5, 233, 124, 30, 252, 184, 15, 5, 233, 124, 30, 252, - 14, 15, 5, 233, 124, 30, 248, 174, 15, 5, 233, 124, 30, 245, 158, 15, 5, - 233, 124, 30, 243, 142, 15, 5, 233, 124, 30, 243, 103, 15, 5, 233, 124, - 30, 242, 110, 15, 5, 233, 124, 30, 242, 111, 96, 242, 110, 15, 5, 233, - 124, 30, 162, 15, 5, 233, 124, 30, 242, 37, 15, 5, 233, 124, 30, 241, - 188, 30, 227, 198, 15, 5, 233, 124, 30, 236, 43, 242, 101, 15, 5, 233, - 124, 30, 236, 23, 15, 5, 233, 124, 30, 236, 24, 96, 162, 15, 5, 233, 124, - 30, 236, 24, 96, 232, 103, 15, 5, 233, 124, 30, 234, 98, 15, 5, 233, 124, - 30, 234, 87, 15, 5, 233, 124, 30, 233, 221, 15, 5, 233, 124, 30, 233, - 215, 15, 5, 233, 124, 30, 233, 216, 96, 241, 188, 96, 61, 15, 5, 233, - 124, 30, 233, 123, 15, 5, 233, 124, 30, 232, 203, 15, 5, 233, 124, 30, - 232, 103, 15, 5, 233, 124, 30, 232, 91, 15, 5, 233, 124, 30, 231, 96, 15, - 5, 233, 124, 30, 231, 97, 96, 245, 158, 15, 5, 233, 124, 30, 230, 66, 15, - 5, 233, 124, 30, 229, 112, 15, 5, 233, 124, 30, 220, 66, 96, 218, 44, 15, - 5, 233, 124, 30, 220, 12, 96, 242, 198, 96, 245, 95, 15, 5, 233, 124, 30, - 220, 12, 96, 242, 198, 216, 240, 15, 5, 233, 124, 30, 219, 225, 15, 5, - 233, 124, 30, 219, 226, 96, 219, 225, 15, 5, 233, 124, 30, 218, 44, 15, - 5, 233, 124, 30, 217, 85, 15, 5, 233, 124, 30, 217, 73, 15, 5, 233, 124, - 30, 217, 24, 96, 116, 96, 218, 85, 96, 198, 15, 5, 233, 124, 30, 69, 15, - 5, 233, 124, 30, 104, 96, 61, 15, 5, 233, 124, 30, 104, 96, 104, 96, 69, - 15, 5, 233, 124, 30, 214, 231, 96, 253, 239, 15, 5, 233, 124, 30, 214, - 219, 15, 5, 233, 124, 30, 214, 126, 15, 5, 233, 124, 218, 235, 15, 5, - 233, 121, 15, 5, 233, 122, 30, 220, 65, 15, 5, 233, 122, 30, 220, 66, 96, - 218, 44, 15, 5, 233, 122, 242, 101, 15, 5, 233, 122, 242, 102, 115, 233, - 122, 242, 102, 220, 65, 15, 5, 233, 117, 15, 5, 233, 110, 15, 5, 233, - 111, 30, 233, 110, 15, 5, 233, 108, 15, 5, 233, 109, 30, 233, 202, 15, 5, - 233, 109, 30, 233, 203, 96, 222, 142, 15, 5, 232, 247, 15, 5, 232, 232, - 15, 5, 232, 222, 15, 5, 232, 203, 15, 5, 232, 103, 15, 5, 232, 104, 30, - 252, 184, 15, 5, 232, 101, 15, 5, 232, 102, 30, 254, 187, 15, 5, 232, - 102, 30, 252, 184, 15, 5, 232, 102, 30, 245, 80, 15, 5, 232, 102, 30, - 245, 81, 216, 240, 15, 5, 232, 102, 30, 243, 112, 216, 240, 15, 5, 232, - 102, 30, 241, 188, 30, 252, 184, 15, 5, 232, 102, 30, 236, 23, 15, 5, - 232, 102, 30, 235, 7, 15, 5, 232, 102, 30, 235, 5, 15, 5, 232, 102, 30, - 235, 6, 96, 253, 239, 15, 5, 232, 102, 30, 234, 98, 15, 5, 232, 102, 30, - 233, 142, 96, 253, 239, 15, 5, 232, 102, 30, 233, 123, 15, 5, 232, 102, - 30, 231, 97, 96, 245, 158, 15, 5, 232, 102, 30, 229, 112, 15, 5, 232, - 102, 30, 227, 242, 15, 5, 232, 102, 30, 219, 194, 96, 253, 239, 15, 5, - 232, 102, 30, 219, 176, 96, 251, 133, 15, 5, 232, 102, 30, 215, 114, 15, - 5, 232, 102, 216, 240, 15, 5, 232, 102, 249, 133, 232, 101, 15, 5, 232, - 102, 226, 168, 232, 101, 15, 5, 232, 102, 218, 235, 15, 5, 232, 102, 220, - 47, 15, 5, 232, 100, 15, 5, 232, 96, 15, 5, 232, 97, 115, 232, 96, 15, 5, - 232, 97, 226, 168, 232, 96, 15, 5, 232, 97, 220, 47, 15, 5, 232, 94, 15, - 5, 232, 91, 15, 5, 232, 89, 15, 5, 232, 90, 115, 232, 89, 15, 5, 232, 90, - 115, 232, 90, 243, 104, 115, 243, 103, 15, 5, 186, 15, 5, 231, 244, 30, - 217, 73, 15, 5, 231, 244, 242, 101, 15, 5, 231, 243, 15, 5, 231, 215, 15, - 5, 231, 171, 15, 5, 231, 152, 15, 5, 231, 151, 15, 5, 231, 96, 15, 5, - 231, 52, 15, 5, 230, 235, 15, 5, 230, 193, 15, 5, 230, 107, 15, 5, 230, - 108, 115, 230, 107, 15, 5, 230, 98, 15, 5, 230, 99, 242, 101, 15, 5, 230, - 83, 15, 5, 230, 69, 15, 5, 230, 66, 15, 5, 230, 67, 30, 61, 15, 5, 230, - 67, 30, 233, 202, 15, 5, 230, 67, 30, 210, 116, 15, 5, 230, 67, 115, 230, - 66, 15, 5, 230, 67, 115, 230, 67, 30, 116, 96, 198, 15, 5, 230, 67, 249, - 133, 230, 66, 15, 5, 230, 64, 15, 5, 230, 65, 30, 61, 15, 5, 230, 65, 30, - 116, 96, 248, 11, 15, 5, 230, 65, 30, 248, 11, 15, 5, 230, 65, 242, 101, - 15, 5, 198, 15, 5, 229, 232, 15, 5, 229, 221, 15, 5, 229, 222, 235, 199, - 15, 5, 229, 222, 30, 219, 228, 216, 240, 15, 5, 229, 222, 226, 168, 229, - 221, 15, 5, 229, 220, 15, 5, 229, 213, 227, 184, 15, 5, 229, 212, 15, 5, - 229, 211, 15, 5, 229, 112, 15, 5, 229, 113, 30, 61, 15, 5, 229, 113, 30, - 214, 219, 15, 5, 229, 113, 220, 47, 15, 5, 228, 238, 15, 5, 228, 239, 30, - 76, 15, 5, 228, 237, 15, 5, 228, 208, 15, 5, 228, 209, 30, 243, 112, 216, - 240, 15, 5, 228, 209, 30, 243, 104, 96, 243, 112, 216, 240, 15, 5, 228, - 206, 15, 5, 228, 207, 30, 254, 131, 15, 5, 228, 207, 30, 253, 239, 15, 5, - 228, 207, 30, 253, 240, 96, 253, 239, 15, 5, 228, 207, 30, 242, 110, 15, - 5, 228, 207, 30, 231, 97, 96, 243, 112, 216, 240, 15, 5, 228, 207, 30, - 229, 112, 15, 5, 228, 207, 30, 227, 198, 15, 5, 228, 207, 30, 220, 65, - 15, 5, 228, 207, 30, 220, 66, 96, 116, 254, 131, 15, 5, 228, 207, 30, - 220, 66, 96, 253, 239, 15, 5, 228, 207, 30, 220, 66, 96, 253, 240, 96, - 253, 239, 15, 5, 228, 207, 30, 214, 231, 96, 253, 239, 15, 5, 228, 207, - 30, 214, 126, 15, 5, 228, 195, 15, 5, 227, 242, 15, 5, 227, 214, 15, 5, - 227, 198, 15, 5, 227, 199, 233, 122, 30, 243, 103, 15, 5, 227, 199, 233, - 122, 30, 231, 152, 15, 5, 227, 199, 233, 122, 30, 222, 10, 15, 5, 227, - 199, 233, 122, 30, 222, 11, 115, 227, 199, 233, 122, 30, 222, 10, 15, 5, - 227, 199, 233, 122, 30, 214, 126, 15, 5, 227, 199, 216, 240, 15, 5, 227, - 199, 115, 227, 198, 15, 5, 227, 199, 249, 133, 227, 198, 15, 5, 227, 199, - 249, 133, 227, 199, 233, 122, 115, 233, 121, 15, 5, 227, 193, 15, 5, 227, - 194, 255, 33, 30, 253, 234, 15, 5, 227, 194, 255, 33, 30, 252, 14, 15, 5, - 227, 194, 255, 33, 30, 246, 82, 15, 5, 227, 194, 255, 33, 30, 242, 110, - 15, 5, 227, 194, 255, 33, 30, 236, 43, 242, 101, 15, 5, 227, 194, 255, - 33, 30, 235, 5, 15, 5, 227, 194, 255, 33, 30, 233, 141, 15, 5, 227, 194, - 255, 33, 30, 229, 112, 15, 5, 227, 194, 255, 33, 30, 219, 173, 15, 5, - 227, 194, 255, 33, 30, 214, 230, 15, 5, 227, 194, 234, 72, 30, 252, 14, - 15, 5, 227, 194, 234, 72, 30, 252, 15, 69, 15, 5, 191, 15, 5, 226, 84, - 15, 5, 226, 51, 15, 5, 226, 25, 15, 5, 225, 164, 15, 5, 225, 111, 15, 5, - 225, 112, 30, 61, 15, 5, 225, 112, 30, 255, 34, 15, 5, 225, 112, 30, 252, - 14, 15, 5, 225, 112, 30, 251, 133, 15, 5, 225, 112, 30, 76, 15, 5, 225, - 112, 30, 74, 15, 5, 225, 112, 30, 240, 122, 15, 5, 225, 112, 30, 69, 15, - 5, 225, 112, 30, 214, 230, 15, 5, 225, 112, 249, 133, 225, 111, 15, 5, - 225, 56, 15, 5, 225, 57, 30, 234, 244, 15, 5, 225, 57, 30, 214, 219, 15, - 5, 225, 57, 30, 210, 116, 15, 5, 225, 57, 226, 168, 225, 56, 15, 5, 205, - 15, 5, 223, 185, 15, 5, 223, 38, 15, 5, 222, 142, 15, 5, 206, 15, 5, 222, - 24, 227, 184, 15, 5, 222, 23, 15, 5, 222, 24, 30, 61, 15, 5, 222, 24, 30, - 246, 86, 15, 5, 222, 24, 30, 246, 84, 15, 5, 222, 24, 30, 162, 15, 5, - 222, 24, 30, 234, 248, 15, 5, 222, 24, 30, 233, 202, 15, 5, 222, 24, 30, - 232, 89, 15, 5, 222, 24, 30, 230, 235, 15, 5, 222, 24, 30, 227, 198, 15, - 5, 222, 24, 30, 222, 10, 15, 5, 222, 24, 30, 220, 32, 15, 5, 222, 24, 30, - 217, 94, 15, 5, 222, 24, 30, 214, 230, 15, 5, 222, 24, 30, 214, 225, 15, - 5, 222, 24, 30, 214, 197, 15, 5, 222, 24, 30, 214, 150, 15, 5, 222, 24, - 30, 214, 126, 15, 5, 222, 24, 115, 222, 23, 15, 5, 222, 24, 242, 101, 15, - 5, 222, 10, 15, 5, 222, 11, 233, 124, 30, 253, 237, 15, 5, 221, 241, 15, - 5, 221, 233, 15, 5, 220, 104, 15, 5, 220, 102, 15, 5, 220, 103, 30, 61, - 15, 5, 220, 103, 30, 252, 184, 15, 5, 220, 103, 30, 242, 197, 15, 5, 220, - 103, 30, 229, 112, 15, 5, 220, 103, 30, 219, 225, 15, 5, 220, 103, 30, - 215, 99, 15, 5, 220, 103, 30, 69, 15, 5, 220, 103, 30, 104, 96, 61, 15, - 5, 220, 101, 15, 5, 220, 99, 15, 5, 220, 80, 15, 5, 220, 65, 15, 5, 220, - 66, 240, 229, 15, 5, 220, 66, 115, 220, 66, 243, 134, 115, 243, 134, 243, - 104, 115, 243, 103, 15, 5, 220, 66, 115, 220, 66, 217, 95, 115, 217, 95, - 243, 104, 115, 243, 103, 15, 5, 220, 58, 15, 5, 220, 53, 15, 5, 220, 50, - 15, 5, 220, 49, 15, 5, 220, 46, 15, 5, 220, 32, 15, 5, 220, 33, 30, 61, - 15, 5, 220, 33, 30, 236, 23, 15, 5, 220, 26, 15, 5, 220, 27, 30, 61, 15, - 5, 220, 27, 30, 252, 169, 15, 5, 220, 27, 30, 251, 117, 15, 5, 220, 27, - 30, 247, 214, 15, 5, 220, 27, 30, 243, 103, 15, 5, 220, 27, 30, 236, 42, - 15, 5, 220, 27, 30, 236, 43, 242, 101, 15, 5, 220, 27, 30, 233, 197, 15, - 5, 220, 27, 30, 232, 91, 15, 5, 220, 27, 30, 230, 98, 15, 5, 220, 27, 30, - 222, 10, 15, 5, 220, 20, 15, 5, 220, 15, 15, 5, 220, 16, 216, 240, 15, 5, - 220, 16, 115, 220, 16, 251, 107, 115, 251, 106, 15, 5, 220, 11, 15, 5, - 219, 227, 15, 5, 219, 228, 115, 235, 200, 219, 227, 15, 5, 219, 225, 15, - 5, 219, 224, 15, 5, 219, 193, 15, 5, 219, 194, 242, 101, 15, 5, 219, 184, - 15, 5, 219, 182, 15, 5, 219, 183, 115, 219, 183, 219, 225, 15, 5, 219, - 175, 15, 5, 219, 173, 15, 5, 218, 84, 15, 5, 218, 85, 115, 218, 84, 15, - 5, 218, 55, 15, 5, 218, 54, 15, 5, 218, 52, 15, 5, 218, 44, 15, 5, 218, - 43, 15, 5, 218, 18, 15, 5, 218, 17, 15, 5, 217, 106, 15, 5, 217, 107, - 253, 224, 15, 5, 217, 107, 30, 241, 187, 15, 5, 217, 107, 30, 230, 235, - 15, 5, 217, 107, 242, 101, 15, 5, 217, 94, 15, 5, 217, 95, 115, 217, 95, - 228, 239, 115, 228, 239, 247, 196, 115, 247, 195, 15, 5, 217, 95, 218, - 235, 15, 5, 217, 85, 15, 5, 129, 30, 252, 14, 15, 5, 129, 30, 242, 110, - 15, 5, 129, 30, 220, 65, 15, 5, 129, 30, 219, 227, 15, 5, 129, 30, 215, - 114, 15, 5, 129, 30, 214, 219, 15, 5, 217, 73, 15, 5, 217, 51, 15, 5, - 217, 23, 15, 5, 217, 24, 242, 101, 15, 5, 216, 118, 15, 5, 216, 119, 216, - 240, 15, 5, 216, 91, 15, 5, 216, 73, 15, 5, 216, 74, 30, 217, 73, 15, 5, - 216, 74, 115, 216, 73, 15, 5, 216, 74, 115, 216, 74, 243, 134, 115, 243, - 134, 243, 104, 115, 243, 103, 15, 5, 215, 119, 15, 5, 215, 114, 15, 5, - 215, 112, 15, 5, 215, 109, 15, 5, 215, 99, 15, 5, 215, 100, 115, 215, - 100, 210, 117, 115, 210, 116, 15, 5, 69, 15, 5, 104, 242, 110, 15, 5, - 104, 104, 69, 15, 5, 104, 115, 104, 226, 94, 115, 226, 94, 243, 104, 115, - 243, 103, 15, 5, 104, 115, 104, 218, 19, 115, 218, 18, 15, 5, 104, 115, - 104, 104, 223, 52, 115, 104, 223, 51, 15, 5, 214, 230, 15, 5, 214, 225, - 15, 5, 214, 219, 15, 5, 214, 220, 233, 197, 15, 5, 214, 220, 30, 252, - 184, 15, 5, 214, 220, 30, 230, 235, 15, 5, 214, 220, 30, 104, 96, 104, - 96, 69, 15, 5, 214, 220, 30, 104, 96, 104, 96, 104, 242, 101, 15, 5, 214, - 220, 242, 101, 15, 5, 214, 220, 220, 47, 15, 5, 214, 220, 220, 48, 30, - 252, 184, 15, 5, 214, 215, 15, 5, 214, 197, 15, 5, 214, 198, 30, 233, - 123, 15, 5, 214, 198, 30, 231, 97, 96, 248, 229, 15, 5, 214, 198, 30, - 220, 102, 15, 5, 214, 198, 30, 69, 15, 5, 214, 196, 15, 5, 214, 192, 15, - 5, 214, 193, 30, 234, 213, 15, 5, 214, 193, 30, 191, 15, 5, 214, 190, 15, - 5, 214, 191, 242, 101, 15, 5, 214, 150, 15, 5, 214, 151, 249, 133, 214, - 150, 15, 5, 214, 151, 220, 47, 15, 5, 214, 148, 15, 5, 214, 149, 30, 116, - 96, 162, 15, 5, 214, 149, 30, 116, 96, 198, 15, 5, 214, 149, 30, 254, - 187, 15, 5, 214, 149, 30, 162, 15, 5, 214, 149, 30, 227, 198, 15, 5, 214, - 149, 30, 214, 230, 15, 5, 214, 149, 30, 214, 231, 96, 253, 239, 15, 5, - 214, 149, 30, 214, 231, 96, 252, 14, 15, 5, 214, 147, 15, 5, 214, 144, - 15, 5, 214, 143, 15, 5, 214, 139, 15, 5, 214, 140, 30, 61, 15, 5, 214, - 140, 30, 253, 234, 15, 5, 214, 140, 30, 130, 15, 5, 214, 140, 30, 246, - 76, 15, 5, 214, 140, 30, 243, 142, 15, 5, 214, 140, 30, 243, 125, 15, 5, - 214, 140, 30, 243, 112, 216, 240, 15, 5, 214, 140, 30, 243, 103, 15, 5, - 214, 140, 30, 242, 120, 15, 5, 214, 140, 30, 162, 15, 5, 214, 140, 30, - 236, 42, 15, 5, 214, 140, 30, 236, 23, 15, 5, 214, 140, 30, 235, 172, 15, - 5, 214, 140, 30, 234, 98, 15, 5, 214, 140, 30, 232, 89, 15, 5, 214, 140, - 30, 230, 193, 15, 5, 214, 140, 30, 191, 15, 5, 214, 140, 30, 220, 65, 15, - 5, 214, 140, 30, 219, 182, 15, 5, 214, 140, 30, 215, 119, 15, 5, 214, - 140, 30, 104, 96, 242, 110, 15, 5, 214, 140, 30, 214, 219, 15, 5, 214, - 140, 30, 214, 137, 15, 5, 214, 137, 15, 5, 214, 138, 30, 69, 15, 5, 214, - 126, 15, 5, 214, 127, 30, 61, 15, 5, 214, 127, 30, 233, 223, 15, 5, 214, - 127, 30, 233, 202, 15, 5, 214, 127, 30, 217, 73, 15, 5, 214, 122, 15, 5, - 214, 125, 15, 5, 214, 123, 15, 5, 214, 119, 15, 5, 214, 108, 15, 5, 214, - 109, 30, 234, 213, 15, 5, 214, 107, 15, 5, 210, 116, 15, 5, 210, 117, - 216, 240, 15, 5, 210, 117, 92, 30, 233, 202, 15, 5, 210, 113, 15, 5, 210, - 106, 15, 5, 210, 93, 15, 5, 210, 44, 15, 5, 210, 45, 115, 210, 44, 15, 5, - 210, 43, 15, 5, 210, 41, 15, 5, 210, 42, 235, 9, 216, 240, 15, 5, 210, - 36, 15, 5, 210, 28, 15, 5, 210, 13, 15, 5, 210, 11, 15, 5, 210, 12, 30, - 61, 15, 5, 210, 10, 15, 5, 210, 9, 15, 132, 5, 113, 253, 239, 15, 132, 5, - 134, 253, 239, 15, 132, 5, 244, 19, 253, 239, 15, 132, 5, 244, 89, 253, - 239, 15, 132, 5, 219, 127, 253, 239, 15, 132, 5, 220, 124, 253, 239, 15, - 132, 5, 245, 201, 253, 239, 15, 132, 5, 228, 205, 253, 239, 15, 132, 5, - 134, 247, 195, 15, 132, 5, 244, 19, 247, 195, 15, 132, 5, 244, 89, 247, - 195, 15, 132, 5, 219, 127, 247, 195, 15, 132, 5, 220, 124, 247, 195, 15, - 132, 5, 245, 201, 247, 195, 15, 132, 5, 228, 205, 247, 195, 15, 132, 5, - 244, 19, 69, 15, 132, 5, 244, 89, 69, 15, 132, 5, 219, 127, 69, 15, 132, - 5, 220, 124, 69, 15, 132, 5, 245, 201, 69, 15, 132, 5, 228, 205, 69, 15, - 132, 5, 123, 243, 45, 15, 132, 5, 113, 243, 45, 15, 132, 5, 134, 243, 45, - 15, 132, 5, 244, 19, 243, 45, 15, 132, 5, 244, 89, 243, 45, 15, 132, 5, - 219, 127, 243, 45, 15, 132, 5, 220, 124, 243, 45, 15, 132, 5, 245, 201, - 243, 45, 15, 132, 5, 228, 205, 243, 45, 15, 132, 5, 123, 243, 42, 15, - 132, 5, 113, 243, 42, 15, 132, 5, 134, 243, 42, 15, 132, 5, 244, 19, 243, - 42, 15, 132, 5, 244, 89, 243, 42, 15, 132, 5, 113, 220, 80, 15, 132, 5, - 134, 220, 80, 15, 132, 5, 134, 220, 81, 214, 12, 17, 15, 132, 5, 244, 19, - 220, 80, 15, 132, 5, 244, 89, 220, 80, 15, 132, 5, 219, 127, 220, 80, 15, - 132, 5, 220, 124, 220, 80, 15, 132, 5, 245, 201, 220, 80, 15, 132, 5, - 228, 205, 220, 80, 15, 132, 5, 123, 220, 75, 15, 132, 5, 113, 220, 75, - 15, 132, 5, 134, 220, 75, 15, 132, 5, 134, 220, 76, 214, 12, 17, 15, 132, - 5, 244, 19, 220, 75, 15, 132, 5, 244, 89, 220, 75, 15, 132, 5, 220, 81, - 30, 243, 126, 96, 247, 195, 15, 132, 5, 220, 81, 30, 243, 126, 96, 230, - 193, 15, 132, 5, 123, 251, 103, 15, 132, 5, 113, 251, 103, 15, 132, 5, - 134, 251, 103, 15, 132, 5, 134, 251, 104, 214, 12, 17, 15, 132, 5, 244, - 19, 251, 103, 15, 132, 5, 244, 89, 251, 103, 15, 132, 5, 134, 214, 12, - 244, 28, 245, 82, 15, 132, 5, 134, 214, 12, 244, 28, 245, 79, 15, 132, 5, - 244, 19, 214, 12, 244, 28, 232, 223, 15, 132, 5, 244, 19, 214, 12, 244, - 28, 232, 221, 15, 132, 5, 244, 19, 214, 12, 244, 28, 232, 224, 61, 15, - 132, 5, 244, 19, 214, 12, 244, 28, 232, 224, 253, 166, 15, 132, 5, 219, - 127, 214, 12, 244, 28, 253, 236, 15, 132, 5, 220, 124, 214, 12, 244, 28, - 236, 15, 15, 132, 5, 220, 124, 214, 12, 244, 28, 236, 17, 61, 15, 132, 5, - 220, 124, 214, 12, 244, 28, 236, 17, 253, 166, 15, 132, 5, 245, 201, 214, - 12, 244, 28, 214, 121, 15, 132, 5, 245, 201, 214, 12, 244, 28, 214, 120, - 15, 132, 5, 228, 205, 214, 12, 244, 28, 236, 31, 15, 132, 5, 228, 205, - 214, 12, 244, 28, 236, 30, 15, 132, 5, 228, 205, 214, 12, 244, 28, 236, - 29, 15, 132, 5, 228, 205, 214, 12, 244, 28, 236, 32, 61, 15, 132, 5, 113, - 253, 240, 216, 240, 15, 132, 5, 134, 253, 240, 216, 240, 15, 132, 5, 244, - 19, 253, 240, 216, 240, 15, 132, 5, 244, 89, 253, 240, 216, 240, 15, 132, - 5, 219, 127, 253, 240, 216, 240, 15, 132, 5, 123, 252, 158, 15, 132, 5, - 113, 252, 158, 15, 132, 5, 134, 252, 158, 15, 132, 5, 244, 19, 252, 158, - 15, 132, 5, 244, 19, 252, 159, 214, 12, 17, 15, 132, 5, 244, 89, 252, - 158, 15, 132, 5, 244, 89, 252, 159, 214, 12, 17, 15, 132, 5, 228, 215, - 15, 132, 5, 228, 216, 15, 132, 5, 123, 245, 78, 15, 132, 5, 113, 245, 78, - 15, 132, 5, 123, 216, 170, 247, 195, 15, 132, 5, 113, 216, 168, 247, 195, - 15, 132, 5, 244, 89, 219, 116, 247, 195, 15, 132, 5, 123, 216, 170, 214, - 12, 244, 28, 61, 15, 132, 5, 113, 216, 168, 214, 12, 244, 28, 61, 15, - 132, 5, 123, 245, 197, 253, 239, 15, 132, 5, 123, 224, 25, 253, 239, 15, - 132, 5, 55, 253, 227, 123, 219, 117, 15, 132, 5, 55, 253, 227, 123, 224, - 24, 15, 224, 144, 5, 55, 253, 227, 211, 209, 247, 180, 15, 224, 144, 5, - 67, 249, 234, 15, 224, 144, 5, 248, 7, 249, 234, 15, 224, 144, 5, 248, 7, - 215, 222, 12, 13, 255, 164, 12, 13, 255, 163, 12, 13, 255, 162, 12, 13, - 255, 161, 12, 13, 255, 160, 12, 13, 255, 159, 12, 13, 255, 158, 12, 13, - 255, 157, 12, 13, 255, 156, 12, 13, 255, 155, 12, 13, 255, 154, 12, 13, - 255, 153, 12, 13, 255, 152, 12, 13, 255, 151, 12, 13, 255, 150, 12, 13, - 255, 149, 12, 13, 255, 148, 12, 13, 255, 147, 12, 13, 255, 146, 12, 13, - 255, 145, 12, 13, 255, 144, 12, 13, 255, 143, 12, 13, 255, 142, 12, 13, - 255, 141, 12, 13, 255, 140, 12, 13, 255, 139, 12, 13, 255, 138, 12, 13, - 255, 137, 12, 13, 255, 136, 12, 13, 255, 135, 12, 13, 255, 134, 12, 13, - 255, 133, 12, 13, 255, 132, 12, 13, 255, 131, 12, 13, 255, 130, 12, 13, - 255, 129, 12, 13, 255, 128, 12, 13, 255, 127, 12, 13, 255, 126, 12, 13, - 255, 125, 12, 13, 255, 124, 12, 13, 255, 123, 12, 13, 255, 122, 12, 13, - 255, 121, 12, 13, 255, 120, 12, 13, 255, 119, 12, 13, 255, 118, 12, 13, - 255, 117, 12, 13, 255, 116, 12, 13, 255, 115, 12, 13, 255, 114, 12, 13, - 255, 113, 12, 13, 255, 112, 12, 13, 255, 111, 12, 13, 255, 110, 12, 13, - 255, 109, 12, 13, 255, 108, 12, 13, 255, 107, 12, 13, 255, 106, 12, 13, - 255, 105, 12, 13, 255, 104, 12, 13, 255, 103, 12, 13, 255, 102, 12, 13, - 255, 101, 12, 13, 255, 100, 12, 13, 255, 99, 12, 13, 255, 98, 12, 13, - 255, 97, 12, 13, 255, 96, 12, 13, 255, 95, 12, 13, 255, 94, 12, 13, 255, - 93, 12, 13, 255, 92, 12, 13, 255, 91, 12, 13, 255, 90, 12, 13, 255, 89, - 12, 13, 255, 88, 12, 13, 255, 87, 12, 13, 255, 86, 12, 13, 255, 85, 12, - 13, 253, 164, 12, 13, 253, 162, 12, 13, 253, 160, 12, 13, 253, 158, 12, - 13, 253, 156, 12, 13, 253, 155, 12, 13, 253, 153, 12, 13, 253, 151, 12, - 13, 253, 149, 12, 13, 253, 147, 12, 13, 251, 70, 12, 13, 251, 69, 12, 13, - 251, 68, 12, 13, 251, 67, 12, 13, 251, 66, 12, 13, 251, 65, 12, 13, 251, - 64, 12, 13, 251, 63, 12, 13, 251, 62, 12, 13, 251, 61, 12, 13, 251, 60, - 12, 13, 251, 59, 12, 13, 251, 58, 12, 13, 251, 57, 12, 13, 251, 56, 12, - 13, 251, 55, 12, 13, 251, 54, 12, 13, 251, 53, 12, 13, 251, 52, 12, 13, - 251, 51, 12, 13, 251, 50, 12, 13, 251, 49, 12, 13, 251, 48, 12, 13, 251, - 47, 12, 13, 251, 46, 12, 13, 251, 45, 12, 13, 251, 44, 12, 13, 251, 43, - 12, 13, 249, 67, 12, 13, 249, 66, 12, 13, 249, 65, 12, 13, 249, 64, 12, - 13, 249, 63, 12, 13, 249, 62, 12, 13, 249, 61, 12, 13, 249, 60, 12, 13, - 249, 59, 12, 13, 249, 58, 12, 13, 249, 57, 12, 13, 249, 56, 12, 13, 249, - 55, 12, 13, 249, 54, 12, 13, 249, 53, 12, 13, 249, 52, 12, 13, 249, 51, - 12, 13, 249, 50, 12, 13, 249, 49, 12, 13, 249, 48, 12, 13, 249, 47, 12, - 13, 249, 46, 12, 13, 249, 45, 12, 13, 249, 44, 12, 13, 249, 43, 12, 13, - 249, 42, 12, 13, 249, 41, 12, 13, 249, 40, 12, 13, 249, 39, 12, 13, 249, - 38, 12, 13, 249, 37, 12, 13, 249, 36, 12, 13, 249, 35, 12, 13, 249, 34, - 12, 13, 249, 33, 12, 13, 249, 32, 12, 13, 249, 31, 12, 13, 249, 30, 12, - 13, 249, 29, 12, 13, 249, 28, 12, 13, 249, 27, 12, 13, 249, 26, 12, 13, - 249, 25, 12, 13, 249, 24, 12, 13, 249, 23, 12, 13, 249, 22, 12, 13, 249, - 21, 12, 13, 249, 20, 12, 13, 249, 19, 12, 13, 249, 18, 12, 13, 249, 17, - 12, 13, 249, 16, 12, 13, 249, 15, 12, 13, 249, 14, 12, 13, 249, 13, 12, - 13, 249, 12, 12, 13, 249, 11, 12, 13, 249, 10, 12, 13, 249, 9, 12, 13, - 249, 8, 12, 13, 249, 7, 12, 13, 249, 6, 12, 13, 249, 5, 12, 13, 249, 4, - 12, 13, 249, 3, 12, 13, 249, 2, 12, 13, 249, 1, 12, 13, 249, 0, 12, 13, - 248, 255, 12, 13, 248, 254, 12, 13, 248, 253, 12, 13, 248, 252, 12, 13, - 248, 251, 12, 13, 248, 250, 12, 13, 248, 249, 12, 13, 248, 248, 12, 13, - 248, 247, 12, 13, 248, 246, 12, 13, 248, 245, 12, 13, 248, 244, 12, 13, - 248, 243, 12, 13, 248, 242, 12, 13, 248, 241, 12, 13, 248, 240, 12, 13, - 248, 239, 12, 13, 248, 238, 12, 13, 248, 237, 12, 13, 248, 236, 12, 13, - 248, 235, 12, 13, 248, 234, 12, 13, 248, 233, 12, 13, 248, 232, 12, 13, - 246, 31, 12, 13, 246, 30, 12, 13, 246, 29, 12, 13, 246, 28, 12, 13, 246, - 27, 12, 13, 246, 26, 12, 13, 246, 25, 12, 13, 246, 24, 12, 13, 246, 23, - 12, 13, 246, 22, 12, 13, 246, 21, 12, 13, 246, 20, 12, 13, 246, 19, 12, - 13, 246, 18, 12, 13, 246, 17, 12, 13, 246, 16, 12, 13, 246, 15, 12, 13, - 246, 14, 12, 13, 246, 13, 12, 13, 246, 12, 12, 13, 246, 11, 12, 13, 246, - 10, 12, 13, 246, 9, 12, 13, 246, 8, 12, 13, 246, 7, 12, 13, 246, 6, 12, - 13, 246, 5, 12, 13, 246, 4, 12, 13, 246, 3, 12, 13, 246, 2, 12, 13, 246, - 1, 12, 13, 246, 0, 12, 13, 245, 255, 12, 13, 245, 254, 12, 13, 245, 253, - 12, 13, 245, 252, 12, 13, 245, 251, 12, 13, 245, 250, 12, 13, 245, 249, - 12, 13, 245, 248, 12, 13, 245, 247, 12, 13, 245, 246, 12, 13, 245, 245, - 12, 13, 245, 244, 12, 13, 245, 13, 12, 13, 245, 12, 12, 13, 245, 11, 12, - 13, 245, 10, 12, 13, 245, 9, 12, 13, 245, 8, 12, 13, 245, 7, 12, 13, 245, - 6, 12, 13, 245, 5, 12, 13, 245, 4, 12, 13, 245, 3, 12, 13, 245, 2, 12, - 13, 245, 1, 12, 13, 245, 0, 12, 13, 244, 255, 12, 13, 244, 254, 12, 13, - 244, 253, 12, 13, 244, 252, 12, 13, 244, 251, 12, 13, 244, 250, 12, 13, - 244, 249, 12, 13, 244, 248, 12, 13, 244, 247, 12, 13, 244, 246, 12, 13, - 244, 245, 12, 13, 244, 244, 12, 13, 244, 243, 12, 13, 244, 242, 12, 13, - 244, 241, 12, 13, 244, 240, 12, 13, 244, 239, 12, 13, 244, 238, 12, 13, - 244, 237, 12, 13, 244, 236, 12, 13, 244, 235, 12, 13, 244, 234, 12, 13, - 244, 233, 12, 13, 244, 232, 12, 13, 244, 231, 12, 13, 244, 230, 12, 13, - 244, 229, 12, 13, 244, 228, 12, 13, 244, 227, 12, 13, 244, 226, 12, 13, - 244, 225, 12, 13, 244, 224, 12, 13, 244, 223, 12, 13, 244, 222, 12, 13, - 244, 221, 12, 13, 244, 220, 12, 13, 244, 219, 12, 13, 244, 218, 12, 13, - 244, 217, 12, 13, 244, 216, 12, 13, 244, 215, 12, 13, 244, 214, 12, 13, - 244, 213, 12, 13, 244, 212, 12, 13, 244, 211, 12, 13, 244, 210, 12, 13, - 244, 209, 12, 13, 244, 208, 12, 13, 244, 207, 12, 13, 244, 206, 12, 13, - 244, 205, 12, 13, 243, 208, 12, 13, 243, 207, 12, 13, 243, 206, 12, 13, - 243, 205, 12, 13, 243, 204, 12, 13, 243, 203, 12, 13, 243, 202, 12, 13, - 243, 201, 12, 13, 243, 200, 12, 13, 243, 199, 12, 13, 243, 198, 12, 13, - 243, 197, 12, 13, 243, 196, 12, 13, 243, 195, 12, 13, 243, 194, 12, 13, - 243, 193, 12, 13, 243, 192, 12, 13, 243, 191, 12, 13, 243, 190, 12, 13, - 243, 189, 12, 13, 243, 188, 12, 13, 243, 187, 12, 13, 243, 186, 12, 13, - 243, 185, 12, 13, 243, 184, 12, 13, 243, 183, 12, 13, 243, 182, 12, 13, - 243, 181, 12, 13, 243, 180, 12, 13, 243, 179, 12, 13, 243, 178, 12, 13, - 243, 177, 12, 13, 243, 176, 12, 13, 243, 175, 12, 13, 243, 174, 12, 13, - 243, 173, 12, 13, 243, 172, 12, 13, 243, 171, 12, 13, 243, 170, 12, 13, - 243, 169, 12, 13, 243, 168, 12, 13, 243, 167, 12, 13, 243, 166, 12, 13, - 243, 165, 12, 13, 243, 164, 12, 13, 243, 163, 12, 13, 243, 162, 12, 13, - 243, 161, 12, 13, 243, 160, 12, 13, 243, 159, 12, 13, 243, 158, 12, 13, - 243, 157, 12, 13, 243, 156, 12, 13, 243, 155, 12, 13, 243, 154, 12, 13, - 243, 153, 12, 13, 243, 152, 12, 13, 243, 151, 12, 13, 243, 150, 12, 13, - 243, 149, 12, 13, 243, 148, 12, 13, 243, 147, 12, 13, 243, 146, 12, 13, - 243, 145, 12, 13, 242, 65, 12, 13, 242, 64, 12, 13, 242, 63, 12, 13, 242, - 62, 12, 13, 242, 61, 12, 13, 242, 60, 12, 13, 242, 59, 12, 13, 242, 58, - 12, 13, 242, 57, 12, 13, 240, 145, 12, 13, 240, 144, 12, 13, 240, 143, - 12, 13, 240, 142, 12, 13, 240, 141, 12, 13, 240, 140, 12, 13, 240, 139, - 12, 13, 240, 138, 12, 13, 240, 137, 12, 13, 240, 136, 12, 13, 240, 135, - 12, 13, 240, 134, 12, 13, 240, 133, 12, 13, 240, 132, 12, 13, 240, 131, - 12, 13, 240, 130, 12, 13, 240, 129, 12, 13, 240, 128, 12, 13, 240, 127, - 12, 13, 235, 28, 12, 13, 235, 27, 12, 13, 235, 26, 12, 13, 235, 25, 12, - 13, 235, 24, 12, 13, 235, 23, 12, 13, 235, 22, 12, 13, 235, 21, 12, 13, - 233, 152, 12, 13, 233, 151, 12, 13, 233, 150, 12, 13, 233, 149, 12, 13, - 233, 148, 12, 13, 233, 147, 12, 13, 233, 146, 12, 13, 233, 145, 12, 13, - 233, 144, 12, 13, 233, 143, 12, 13, 232, 54, 12, 13, 232, 53, 12, 13, - 232, 52, 12, 13, 232, 51, 12, 13, 232, 50, 12, 13, 232, 49, 12, 13, 232, - 48, 12, 13, 232, 47, 12, 13, 232, 46, 12, 13, 232, 45, 12, 13, 232, 44, - 12, 13, 232, 43, 12, 13, 232, 42, 12, 13, 232, 41, 12, 13, 232, 40, 12, - 13, 232, 39, 12, 13, 232, 38, 12, 13, 232, 37, 12, 13, 232, 36, 12, 13, - 232, 35, 12, 13, 232, 34, 12, 13, 232, 33, 12, 13, 232, 32, 12, 13, 232, - 31, 12, 13, 232, 30, 12, 13, 232, 29, 12, 13, 232, 28, 12, 13, 232, 27, - 12, 13, 232, 26, 12, 13, 232, 25, 12, 13, 232, 24, 12, 13, 232, 23, 12, - 13, 232, 22, 12, 13, 232, 21, 12, 13, 232, 20, 12, 13, 232, 19, 12, 13, - 232, 18, 12, 13, 232, 17, 12, 13, 232, 16, 12, 13, 232, 15, 12, 13, 232, - 14, 12, 13, 232, 13, 12, 13, 232, 12, 12, 13, 232, 11, 12, 13, 232, 10, - 12, 13, 232, 9, 12, 13, 232, 8, 12, 13, 232, 7, 12, 13, 232, 6, 12, 13, - 232, 5, 12, 13, 232, 4, 12, 13, 232, 3, 12, 13, 232, 2, 12, 13, 232, 1, - 12, 13, 232, 0, 12, 13, 231, 255, 12, 13, 231, 254, 12, 13, 231, 253, 12, - 13, 231, 252, 12, 13, 231, 251, 12, 13, 231, 250, 12, 13, 231, 249, 12, - 13, 231, 248, 12, 13, 231, 247, 12, 13, 231, 246, 12, 13, 231, 245, 12, - 13, 230, 27, 12, 13, 230, 26, 12, 13, 230, 25, 12, 13, 230, 24, 12, 13, - 230, 23, 12, 13, 230, 22, 12, 13, 230, 21, 12, 13, 230, 20, 12, 13, 230, - 19, 12, 13, 230, 18, 12, 13, 230, 17, 12, 13, 230, 16, 12, 13, 230, 15, - 12, 13, 230, 14, 12, 13, 230, 13, 12, 13, 230, 12, 12, 13, 230, 11, 12, - 13, 230, 10, 12, 13, 230, 9, 12, 13, 230, 8, 12, 13, 230, 7, 12, 13, 230, - 6, 12, 13, 230, 5, 12, 13, 230, 4, 12, 13, 230, 3, 12, 13, 230, 2, 12, - 13, 230, 1, 12, 13, 230, 0, 12, 13, 229, 255, 12, 13, 229, 254, 12, 13, - 229, 253, 12, 13, 229, 252, 12, 13, 229, 251, 12, 13, 229, 250, 12, 13, - 229, 249, 12, 13, 229, 248, 12, 13, 229, 247, 12, 13, 229, 246, 12, 13, - 229, 245, 12, 13, 229, 244, 12, 13, 229, 243, 12, 13, 229, 242, 12, 13, - 229, 241, 12, 13, 229, 240, 12, 13, 229, 239, 12, 13, 229, 238, 12, 13, - 229, 237, 12, 13, 229, 236, 12, 13, 229, 235, 12, 13, 228, 139, 12, 13, - 228, 138, 12, 13, 228, 137, 12, 13, 228, 136, 12, 13, 228, 135, 12, 13, - 228, 134, 12, 13, 228, 133, 12, 13, 228, 132, 12, 13, 228, 131, 12, 13, - 228, 130, 12, 13, 228, 129, 12, 13, 228, 128, 12, 13, 228, 127, 12, 13, - 228, 126, 12, 13, 228, 125, 12, 13, 228, 124, 12, 13, 228, 123, 12, 13, - 228, 122, 12, 13, 228, 121, 12, 13, 228, 120, 12, 13, 228, 119, 12, 13, - 228, 118, 12, 13, 227, 241, 12, 13, 227, 240, 12, 13, 227, 239, 12, 13, - 227, 238, 12, 13, 227, 237, 12, 13, 227, 236, 12, 13, 227, 235, 12, 13, - 227, 234, 12, 13, 227, 233, 12, 13, 227, 232, 12, 13, 227, 231, 12, 13, - 227, 230, 12, 13, 227, 229, 12, 13, 227, 228, 12, 13, 227, 227, 12, 13, - 227, 226, 12, 13, 227, 225, 12, 13, 227, 224, 12, 13, 227, 223, 12, 13, - 227, 222, 12, 13, 227, 221, 12, 13, 227, 220, 12, 13, 227, 219, 12, 13, - 227, 218, 12, 13, 227, 217, 12, 13, 227, 216, 12, 13, 227, 80, 12, 13, - 227, 79, 12, 13, 227, 78, 12, 13, 227, 77, 12, 13, 227, 76, 12, 13, 227, - 75, 12, 13, 227, 74, 12, 13, 227, 73, 12, 13, 227, 72, 12, 13, 227, 71, - 12, 13, 227, 70, 12, 13, 227, 69, 12, 13, 227, 68, 12, 13, 227, 67, 12, - 13, 227, 66, 12, 13, 227, 65, 12, 13, 227, 64, 12, 13, 227, 63, 12, 13, - 227, 62, 12, 13, 227, 61, 12, 13, 227, 60, 12, 13, 227, 59, 12, 13, 227, - 58, 12, 13, 227, 57, 12, 13, 227, 56, 12, 13, 227, 55, 12, 13, 227, 54, - 12, 13, 227, 53, 12, 13, 227, 52, 12, 13, 227, 51, 12, 13, 227, 50, 12, - 13, 227, 49, 12, 13, 227, 48, 12, 13, 227, 47, 12, 13, 227, 46, 12, 13, - 227, 45, 12, 13, 227, 44, 12, 13, 227, 43, 12, 13, 227, 42, 12, 13, 227, - 41, 12, 13, 227, 40, 12, 13, 227, 39, 12, 13, 227, 38, 12, 13, 227, 37, - 12, 13, 227, 36, 12, 13, 227, 35, 12, 13, 227, 34, 12, 13, 227, 33, 12, - 13, 227, 32, 12, 13, 227, 31, 12, 13, 227, 30, 12, 13, 227, 29, 12, 13, - 227, 28, 12, 13, 227, 27, 12, 13, 227, 26, 12, 13, 227, 25, 12, 13, 227, - 24, 12, 13, 227, 23, 12, 13, 227, 22, 12, 13, 227, 21, 12, 13, 227, 20, - 12, 13, 227, 19, 12, 13, 227, 18, 12, 13, 227, 17, 12, 13, 227, 16, 12, - 13, 227, 15, 12, 13, 227, 14, 12, 13, 227, 13, 12, 13, 227, 12, 12, 13, - 227, 11, 12, 13, 227, 10, 12, 13, 227, 9, 12, 13, 227, 8, 12, 13, 227, 7, - 12, 13, 227, 6, 12, 13, 226, 108, 12, 13, 226, 107, 12, 13, 226, 106, 12, - 13, 226, 105, 12, 13, 226, 104, 12, 13, 226, 103, 12, 13, 226, 102, 12, - 13, 226, 101, 12, 13, 226, 100, 12, 13, 226, 99, 12, 13, 226, 98, 12, 13, - 226, 97, 12, 13, 226, 96, 12, 13, 224, 98, 12, 13, 224, 97, 12, 13, 224, - 96, 12, 13, 224, 95, 12, 13, 224, 94, 12, 13, 224, 93, 12, 13, 224, 92, - 12, 13, 223, 225, 12, 13, 223, 224, 12, 13, 223, 223, 12, 13, 223, 222, - 12, 13, 223, 221, 12, 13, 223, 220, 12, 13, 223, 219, 12, 13, 223, 218, - 12, 13, 223, 217, 12, 13, 223, 216, 12, 13, 223, 215, 12, 13, 223, 214, - 12, 13, 223, 213, 12, 13, 223, 212, 12, 13, 223, 211, 12, 13, 223, 210, - 12, 13, 223, 209, 12, 13, 223, 208, 12, 13, 223, 207, 12, 13, 223, 206, - 12, 13, 223, 205, 12, 13, 223, 204, 12, 13, 223, 203, 12, 13, 223, 202, - 12, 13, 223, 201, 12, 13, 223, 200, 12, 13, 223, 199, 12, 13, 223, 198, - 12, 13, 223, 197, 12, 13, 223, 196, 12, 13, 223, 195, 12, 13, 223, 194, - 12, 13, 223, 193, 12, 13, 223, 192, 12, 13, 222, 90, 12, 13, 222, 89, 12, - 13, 222, 88, 12, 13, 222, 87, 12, 13, 222, 86, 12, 13, 222, 85, 12, 13, - 222, 84, 12, 13, 222, 83, 12, 13, 222, 82, 12, 13, 222, 81, 12, 13, 222, - 80, 12, 13, 222, 79, 12, 13, 222, 78, 12, 13, 222, 77, 12, 13, 222, 76, - 12, 13, 222, 75, 12, 13, 222, 74, 12, 13, 222, 73, 12, 13, 222, 72, 12, - 13, 222, 71, 12, 13, 222, 70, 12, 13, 222, 69, 12, 13, 222, 68, 12, 13, - 222, 67, 12, 13, 222, 66, 12, 13, 222, 65, 12, 13, 222, 64, 12, 13, 222, - 63, 12, 13, 222, 62, 12, 13, 222, 61, 12, 13, 222, 60, 12, 13, 222, 59, - 12, 13, 222, 58, 12, 13, 222, 57, 12, 13, 222, 56, 12, 13, 222, 55, 12, - 13, 222, 54, 12, 13, 222, 53, 12, 13, 222, 52, 12, 13, 222, 51, 12, 13, - 222, 50, 12, 13, 222, 49, 12, 13, 222, 48, 12, 13, 222, 47, 12, 13, 222, - 46, 12, 13, 222, 45, 12, 13, 222, 44, 12, 13, 222, 43, 12, 13, 222, 42, - 12, 13, 222, 41, 12, 13, 222, 40, 12, 13, 222, 39, 12, 13, 222, 38, 12, - 13, 222, 37, 12, 13, 217, 151, 12, 13, 217, 150, 12, 13, 217, 149, 12, - 13, 217, 148, 12, 13, 217, 147, 12, 13, 217, 146, 12, 13, 217, 145, 12, - 13, 217, 144, 12, 13, 217, 143, 12, 13, 217, 142, 12, 13, 217, 141, 12, - 13, 217, 140, 12, 13, 217, 139, 12, 13, 217, 138, 12, 13, 217, 137, 12, - 13, 217, 136, 12, 13, 217, 135, 12, 13, 217, 134, 12, 13, 217, 133, 12, - 13, 217, 132, 12, 13, 217, 131, 12, 13, 217, 130, 12, 13, 217, 129, 12, - 13, 217, 128, 12, 13, 217, 127, 12, 13, 217, 126, 12, 13, 217, 125, 12, - 13, 217, 124, 12, 13, 217, 123, 12, 13, 217, 122, 12, 13, 217, 121, 12, - 13, 217, 120, 12, 13, 217, 119, 12, 13, 217, 118, 12, 13, 217, 117, 12, - 13, 217, 116, 12, 13, 217, 115, 12, 13, 217, 114, 12, 13, 217, 113, 12, - 13, 217, 112, 12, 13, 217, 111, 12, 13, 217, 110, 12, 13, 217, 109, 12, - 13, 217, 108, 12, 13, 215, 22, 12, 13, 215, 21, 12, 13, 215, 20, 12, 13, - 215, 19, 12, 13, 215, 18, 12, 13, 215, 17, 12, 13, 215, 16, 12, 13, 215, - 15, 12, 13, 215, 14, 12, 13, 215, 13, 12, 13, 215, 12, 12, 13, 215, 11, - 12, 13, 215, 10, 12, 13, 215, 9, 12, 13, 215, 8, 12, 13, 215, 7, 12, 13, - 215, 6, 12, 13, 215, 5, 12, 13, 215, 4, 12, 13, 215, 3, 12, 13, 215, 2, - 12, 13, 215, 1, 12, 13, 215, 0, 12, 13, 214, 255, 12, 13, 214, 254, 12, - 13, 214, 253, 12, 13, 214, 252, 12, 13, 214, 251, 12, 13, 214, 250, 12, - 13, 214, 249, 12, 13, 214, 248, 12, 13, 214, 247, 12, 13, 214, 246, 12, - 13, 214, 245, 12, 13, 214, 244, 12, 13, 214, 243, 12, 13, 214, 242, 12, - 13, 214, 241, 12, 13, 214, 240, 12, 13, 214, 239, 12, 13, 214, 238, 12, - 13, 214, 237, 12, 13, 214, 236, 12, 13, 214, 235, 12, 13, 214, 234, 12, - 13, 214, 233, 12, 13, 214, 232, 12, 13, 214, 104, 12, 13, 214, 103, 12, - 13, 214, 102, 12, 13, 214, 101, 12, 13, 214, 100, 12, 13, 214, 99, 12, - 13, 214, 98, 12, 13, 214, 97, 12, 13, 214, 96, 12, 13, 214, 95, 12, 13, - 214, 94, 12, 13, 214, 93, 12, 13, 214, 92, 12, 13, 214, 91, 12, 13, 214, - 90, 12, 13, 214, 89, 12, 13, 214, 88, 12, 13, 214, 87, 12, 13, 214, 86, - 12, 13, 214, 85, 12, 13, 214, 84, 12, 13, 214, 83, 12, 13, 214, 82, 12, - 13, 214, 81, 12, 13, 214, 80, 12, 13, 214, 79, 12, 13, 214, 78, 12, 13, - 214, 77, 12, 13, 214, 76, 12, 13, 214, 75, 12, 13, 214, 74, 12, 13, 214, - 73, 12, 13, 214, 72, 12, 13, 214, 71, 12, 13, 214, 70, 12, 13, 214, 69, - 12, 13, 214, 68, 12, 13, 214, 67, 12, 13, 214, 66, 12, 13, 214, 65, 12, - 13, 214, 64, 12, 13, 214, 63, 12, 13, 214, 62, 12, 13, 214, 61, 12, 13, - 214, 60, 12, 13, 214, 59, 12, 13, 214, 58, 12, 13, 214, 57, 12, 13, 214, - 56, 12, 13, 214, 55, 12, 13, 214, 54, 12, 13, 214, 53, 12, 13, 214, 52, - 12, 13, 214, 51, 12, 13, 214, 50, 12, 13, 214, 49, 12, 13, 214, 48, 12, - 13, 214, 47, 12, 13, 214, 46, 12, 13, 214, 45, 12, 13, 214, 44, 12, 13, - 214, 43, 12, 13, 214, 42, 12, 13, 214, 41, 12, 13, 214, 40, 12, 13, 214, - 39, 12, 13, 214, 38, 12, 13, 214, 37, 12, 13, 214, 36, 12, 13, 214, 35, - 12, 13, 214, 34, 12, 13, 214, 33, 12, 13, 214, 32, 12, 13, 214, 31, 12, - 13, 214, 30, 12, 13, 214, 29, 12, 13, 214, 28, 12, 13, 212, 97, 12, 13, - 212, 96, 12, 13, 212, 95, 12, 13, 212, 94, 12, 13, 212, 93, 12, 13, 212, - 92, 12, 13, 212, 91, 12, 13, 212, 90, 12, 13, 212, 89, 12, 13, 212, 88, - 12, 13, 212, 87, 12, 13, 212, 86, 12, 13, 212, 85, 12, 13, 212, 84, 12, - 13, 212, 83, 12, 13, 212, 82, 12, 13, 212, 81, 12, 13, 212, 80, 12, 13, - 212, 79, 12, 13, 212, 78, 12, 13, 212, 77, 12, 13, 212, 76, 12, 13, 212, - 75, 12, 13, 212, 74, 12, 13, 212, 73, 12, 13, 212, 72, 12, 13, 212, 71, - 12, 13, 212, 70, 12, 13, 212, 69, 12, 13, 212, 68, 12, 13, 212, 67, 12, - 13, 212, 66, 12, 13, 211, 177, 12, 13, 211, 176, 12, 13, 211, 175, 12, - 13, 211, 174, 12, 13, 211, 173, 12, 13, 211, 172, 12, 13, 211, 171, 12, - 13, 211, 170, 12, 13, 211, 169, 12, 13, 211, 168, 12, 13, 211, 167, 12, - 13, 211, 166, 12, 13, 211, 115, 12, 13, 211, 114, 12, 13, 211, 113, 12, - 13, 211, 112, 12, 13, 211, 111, 12, 13, 211, 110, 12, 13, 211, 109, 12, - 13, 211, 108, 12, 13, 211, 107, 12, 13, 210, 158, 12, 13, 210, 157, 12, - 13, 210, 156, 12, 13, 210, 155, 12, 13, 210, 154, 12, 13, 210, 153, 12, - 13, 210, 152, 12, 13, 210, 151, 12, 13, 210, 150, 12, 13, 210, 149, 12, - 13, 210, 148, 12, 13, 210, 147, 12, 13, 210, 146, 12, 13, 210, 145, 12, - 13, 210, 144, 12, 13, 210, 143, 12, 13, 210, 142, 12, 13, 210, 141, 12, - 13, 210, 140, 12, 13, 210, 139, 12, 13, 210, 138, 12, 13, 210, 137, 12, - 13, 210, 136, 12, 13, 210, 135, 12, 13, 210, 134, 12, 13, 210, 133, 12, - 13, 210, 132, 12, 13, 210, 131, 12, 13, 210, 130, 12, 13, 210, 129, 12, - 13, 210, 128, 12, 13, 210, 127, 12, 13, 210, 126, 12, 13, 210, 125, 12, - 13, 210, 124, 12, 13, 210, 123, 12, 13, 210, 122, 12, 13, 210, 121, 12, - 13, 210, 120, 12, 13, 210, 119, 12, 13, 210, 118, 12, 13, 255, 81, 12, - 13, 255, 80, 12, 13, 255, 79, 12, 13, 255, 78, 12, 13, 255, 77, 12, 13, - 255, 76, 12, 13, 255, 75, 12, 13, 255, 74, 12, 13, 255, 73, 12, 13, 255, - 72, 12, 13, 255, 71, 12, 13, 255, 70, 12, 13, 255, 69, 12, 13, 255, 68, - 12, 13, 255, 67, 12, 13, 255, 66, 12, 13, 255, 65, 12, 13, 255, 64, 12, - 13, 255, 63, 12, 13, 255, 62, 12, 13, 255, 61, 12, 13, 255, 60, 12, 13, - 255, 59, 12, 13, 255, 58, 12, 13, 255, 57, 12, 13, 255, 56, 12, 13, 255, - 55, 12, 13, 255, 54, 12, 13, 255, 53, 12, 13, 255, 52, 12, 13, 255, 51, - 12, 13, 255, 50, 12, 13, 255, 49, 12, 13, 255, 48, 20, 1, 167, 229, 17, - 231, 21, 20, 1, 167, 243, 77, 244, 44, 20, 1, 167, 224, 254, 231, 22, - 225, 60, 20, 1, 167, 224, 254, 231, 22, 225, 61, 20, 1, 167, 229, 231, - 231, 21, 20, 1, 167, 219, 223, 20, 1, 167, 216, 67, 231, 21, 20, 1, 167, - 227, 122, 231, 21, 20, 1, 167, 220, 21, 226, 94, 228, 174, 20, 1, 167, - 224, 254, 226, 94, 228, 175, 225, 60, 20, 1, 167, 224, 254, 226, 94, 228, - 175, 225, 61, 20, 1, 167, 231, 223, 20, 1, 167, 215, 120, 231, 224, 20, - 1, 167, 229, 76, 20, 1, 167, 231, 220, 20, 1, 167, 231, 181, 20, 1, 167, - 230, 53, 20, 1, 167, 220, 126, 20, 1, 167, 227, 246, 20, 1, 167, 234, - 155, 20, 1, 167, 228, 143, 20, 1, 167, 218, 5, 20, 1, 167, 229, 16, 20, - 1, 167, 233, 93, 20, 1, 167, 233, 18, 233, 195, 20, 1, 167, 227, 253, - 231, 29, 20, 1, 167, 231, 227, 20, 1, 167, 225, 250, 20, 1, 167, 242, - 238, 20, 1, 167, 226, 54, 20, 1, 167, 230, 156, 229, 50, 20, 1, 167, 227, - 103, 231, 32, 20, 1, 167, 104, 210, 188, 229, 225, 20, 1, 167, 242, 239, - 20, 1, 167, 227, 253, 227, 254, 20, 1, 167, 219, 130, 20, 1, 167, 231, - 14, 20, 1, 167, 231, 35, 20, 1, 167, 230, 135, 20, 1, 167, 234, 255, 20, - 1, 167, 226, 94, 233, 53, 20, 1, 167, 229, 154, 233, 53, 20, 1, 167, 225, - 161, 20, 1, 167, 231, 221, 20, 1, 167, 228, 212, 20, 1, 167, 224, 137, - 20, 1, 167, 215, 117, 20, 1, 167, 232, 99, 20, 1, 167, 219, 43, 20, 1, - 167, 216, 217, 20, 1, 167, 231, 218, 20, 1, 167, 234, 162, 20, 1, 167, - 229, 150, 20, 1, 167, 233, 207, 20, 1, 167, 230, 136, 20, 1, 167, 219, - 220, 20, 1, 167, 232, 144, 20, 1, 167, 244, 101, 20, 1, 167, 222, 201, - 20, 1, 167, 233, 247, 20, 1, 167, 219, 39, 20, 1, 167, 231, 178, 225, - 102, 20, 1, 167, 220, 14, 20, 1, 167, 227, 252, 20, 1, 167, 219, 255, - 228, 7, 210, 196, 20, 1, 167, 227, 142, 230, 153, 20, 1, 167, 226, 89, - 20, 1, 167, 228, 144, 20, 1, 167, 214, 170, 20, 1, 167, 229, 53, 20, 1, - 167, 231, 217, 20, 1, 167, 228, 186, 20, 1, 167, 231, 124, 20, 1, 167, - 227, 155, 20, 1, 167, 216, 221, 20, 1, 167, 219, 36, 20, 1, 167, 226, 90, - 20, 1, 167, 228, 11, 20, 1, 167, 231, 225, 20, 1, 167, 227, 152, 20, 1, - 167, 234, 222, 20, 1, 167, 228, 14, 20, 1, 167, 213, 250, 20, 1, 167, - 232, 103, 20, 1, 167, 229, 103, 20, 1, 167, 229, 201, 20, 1, 167, 231, - 123, 20, 1, 225, 141, 228, 9, 20, 1, 225, 141, 215, 120, 231, 222, 20, 1, - 225, 141, 219, 187, 20, 1, 225, 141, 220, 130, 215, 119, 20, 1, 225, 141, - 232, 146, 227, 249, 20, 1, 225, 141, 231, 130, 231, 226, 20, 1, 225, 141, - 234, 93, 20, 1, 225, 141, 211, 15, 20, 1, 225, 141, 231, 125, 20, 1, 225, - 141, 234, 243, 20, 1, 225, 141, 225, 211, 20, 1, 225, 141, 211, 89, 233, - 53, 20, 1, 225, 141, 233, 109, 228, 7, 227, 164, 20, 1, 225, 141, 227, - 247, 220, 40, 20, 1, 225, 141, 229, 121, 228, 189, 20, 1, 225, 141, 242, - 236, 20, 1, 225, 141, 225, 52, 20, 1, 225, 141, 215, 120, 228, 5, 20, 1, - 225, 141, 220, 45, 228, 184, 20, 1, 225, 141, 220, 41, 20, 1, 225, 141, - 231, 22, 216, 220, 20, 1, 225, 141, 231, 112, 231, 126, 20, 1, 225, 141, - 227, 153, 227, 249, 20, 1, 225, 141, 234, 151, 20, 1, 225, 141, 242, 237, - 20, 1, 225, 141, 234, 147, 20, 1, 225, 141, 233, 135, 20, 1, 225, 141, - 225, 253, 20, 1, 225, 141, 213, 182, 20, 1, 225, 141, 229, 18, 230, 51, - 20, 1, 225, 141, 229, 52, 231, 108, 20, 1, 225, 141, 211, 193, 20, 1, - 225, 141, 222, 13, 20, 1, 225, 141, 217, 98, 20, 1, 225, 141, 231, 34, - 20, 1, 225, 141, 229, 37, 20, 1, 225, 141, 229, 38, 233, 90, 20, 1, 225, - 141, 231, 24, 20, 1, 225, 141, 218, 53, 20, 1, 225, 141, 231, 116, 20, 1, - 225, 141, 230, 138, 20, 1, 225, 141, 227, 167, 20, 1, 225, 141, 224, 141, - 20, 1, 225, 141, 231, 33, 229, 54, 20, 1, 225, 141, 244, 134, 20, 1, 225, - 141, 231, 103, 20, 1, 225, 141, 244, 155, 20, 1, 225, 141, 234, 159, 20, - 1, 225, 141, 231, 244, 228, 178, 20, 1, 225, 141, 231, 244, 228, 154, 20, - 1, 225, 141, 233, 17, 20, 1, 225, 141, 229, 60, 20, 1, 225, 141, 228, 16, - 20, 1, 225, 141, 186, 20, 1, 225, 141, 234, 80, 20, 1, 225, 141, 229, 6, - 20, 1, 137, 229, 17, 231, 224, 20, 1, 137, 227, 121, 20, 1, 137, 210, - 196, 20, 1, 137, 212, 53, 20, 1, 137, 229, 53, 20, 1, 137, 229, 142, 20, - 1, 137, 229, 24, 20, 1, 137, 242, 246, 20, 1, 137, 231, 120, 20, 1, 137, - 243, 84, 20, 1, 137, 227, 144, 230, 175, 231, 36, 20, 1, 137, 227, 245, - 231, 111, 20, 1, 137, 231, 117, 20, 1, 137, 225, 58, 20, 1, 137, 229, - 127, 20, 1, 137, 231, 128, 251, 37, 20, 1, 137, 234, 149, 20, 1, 137, - 242, 247, 20, 1, 137, 234, 156, 20, 1, 137, 210, 213, 230, 81, 20, 1, - 137, 227, 115, 20, 1, 137, 231, 105, 20, 1, 137, 228, 15, 20, 1, 137, - 231, 111, 20, 1, 137, 211, 16, 20, 1, 137, 233, 255, 20, 1, 137, 235, 16, - 20, 1, 137, 220, 125, 20, 1, 137, 229, 136, 20, 1, 137, 217, 96, 20, 1, - 137, 228, 158, 20, 1, 137, 216, 67, 210, 198, 20, 1, 137, 218, 80, 20, 1, - 137, 229, 44, 227, 164, 20, 1, 137, 213, 181, 20, 1, 137, 229, 204, 20, - 1, 137, 231, 244, 234, 158, 20, 1, 137, 227, 254, 20, 1, 137, 229, 39, - 20, 1, 137, 233, 94, 20, 1, 137, 231, 113, 20, 1, 137, 231, 13, 20, 1, - 137, 227, 248, 20, 1, 137, 216, 216, 20, 1, 137, 229, 41, 20, 1, 137, - 243, 240, 20, 1, 137, 229, 141, 20, 1, 137, 228, 17, 20, 1, 137, 228, 13, - 20, 1, 137, 251, 115, 20, 1, 137, 213, 183, 20, 1, 137, 231, 118, 20, 1, - 137, 222, 142, 20, 1, 137, 228, 188, 20, 1, 137, 233, 108, 20, 1, 137, - 216, 65, 20, 1, 137, 227, 255, 229, 6, 20, 1, 137, 228, 180, 20, 1, 137, - 234, 162, 20, 1, 137, 229, 45, 20, 1, 137, 231, 217, 20, 1, 137, 231, - 106, 20, 1, 137, 232, 103, 20, 1, 137, 233, 195, 20, 1, 137, 228, 186, - 20, 1, 137, 229, 6, 20, 1, 137, 211, 184, 20, 1, 137, 229, 42, 20, 1, - 137, 228, 2, 20, 1, 137, 227, 250, 20, 1, 137, 233, 209, 228, 144, 20, 1, - 137, 228, 0, 20, 1, 137, 229, 149, 20, 1, 137, 231, 244, 228, 5, 20, 1, - 137, 211, 103, 20, 1, 137, 229, 148, 20, 1, 137, 219, 222, 20, 1, 137, - 220, 128, 20, 1, 137, 231, 114, 20, 1, 137, 231, 224, 20, 1, 137, 231, - 124, 20, 1, 137, 234, 150, 20, 1, 137, 231, 115, 20, 1, 137, 234, 154, - 20, 1, 137, 231, 128, 225, 106, 20, 1, 137, 210, 179, 20, 1, 137, 228, - 176, 20, 1, 137, 230, 225, 20, 1, 137, 230, 105, 20, 1, 137, 220, 17, 20, - 1, 137, 234, 172, 233, 76, 20, 1, 137, 234, 172, 244, 168, 20, 1, 137, - 229, 74, 20, 1, 137, 229, 201, 20, 1, 137, 232, 206, 20, 1, 137, 225, 68, - 20, 1, 137, 225, 202, 20, 1, 137, 216, 231, 20, 1, 107, 231, 104, 20, 1, - 107, 212, 51, 20, 1, 107, 228, 174, 20, 1, 107, 231, 21, 20, 1, 107, 228, - 172, 20, 1, 107, 232, 241, 20, 1, 107, 228, 177, 20, 1, 107, 228, 12, 20, - 1, 107, 229, 59, 20, 1, 107, 227, 164, 20, 1, 107, 211, 194, 20, 1, 107, - 229, 14, 20, 1, 107, 220, 63, 20, 1, 107, 229, 25, 20, 1, 107, 234, 157, - 20, 1, 107, 216, 218, 20, 1, 107, 220, 43, 20, 1, 107, 228, 185, 20, 1, - 107, 218, 53, 20, 1, 107, 234, 162, 20, 1, 107, 211, 91, 20, 1, 107, 233, - 210, 20, 1, 107, 221, 236, 20, 1, 107, 231, 26, 20, 1, 107, 229, 140, 20, - 1, 107, 231, 193, 20, 1, 107, 231, 32, 20, 1, 107, 220, 127, 20, 1, 107, - 211, 39, 20, 1, 107, 228, 179, 20, 1, 107, 234, 153, 231, 107, 20, 1, - 107, 229, 21, 20, 1, 107, 215, 119, 20, 1, 107, 242, 255, 20, 1, 107, - 229, 11, 20, 1, 107, 244, 135, 20, 1, 107, 229, 144, 20, 1, 107, 231, 5, - 20, 1, 107, 233, 11, 20, 1, 107, 229, 126, 20, 1, 107, 230, 152, 20, 1, - 107, 231, 9, 20, 1, 107, 224, 121, 20, 1, 107, 231, 7, 20, 1, 107, 231, - 23, 20, 1, 107, 232, 89, 20, 1, 107, 228, 4, 20, 1, 107, 231, 127, 20, 1, - 107, 233, 186, 20, 1, 107, 227, 155, 20, 1, 107, 216, 221, 20, 1, 107, - 219, 36, 20, 1, 107, 210, 179, 20, 1, 107, 234, 154, 20, 1, 107, 223, - 173, 20, 1, 107, 217, 11, 20, 1, 107, 229, 22, 20, 1, 107, 231, 28, 20, - 1, 107, 228, 3, 20, 1, 107, 234, 152, 20, 1, 107, 225, 62, 20, 1, 107, - 225, 155, 20, 1, 107, 227, 131, 20, 1, 107, 233, 17, 20, 1, 107, 229, 60, - 20, 1, 107, 231, 25, 20, 1, 107, 229, 34, 20, 1, 107, 210, 193, 20, 1, - 107, 226, 25, 20, 1, 107, 210, 192, 20, 1, 107, 229, 149, 20, 1, 107, - 227, 249, 20, 1, 107, 218, 82, 20, 1, 107, 233, 214, 20, 1, 107, 229, 49, - 20, 1, 107, 229, 19, 20, 1, 107, 215, 103, 20, 1, 107, 231, 36, 20, 1, - 107, 233, 204, 20, 1, 107, 228, 1, 20, 1, 107, 216, 219, 20, 1, 107, 231, - 219, 20, 1, 107, 229, 58, 20, 1, 107, 233, 10, 20, 1, 107, 229, 40, 20, - 1, 107, 228, 6, 20, 1, 107, 228, 158, 20, 1, 107, 242, 240, 20, 1, 107, - 233, 223, 20, 1, 107, 223, 87, 226, 213, 20, 1, 107, 217, 87, 20, 1, 107, - 216, 11, 20, 1, 107, 227, 152, 20, 1, 107, 222, 242, 20, 1, 107, 233, 55, - 20, 1, 107, 231, 84, 20, 1, 107, 194, 20, 1, 107, 218, 5, 20, 1, 107, - 230, 107, 20, 1, 107, 220, 29, 20, 1, 107, 220, 39, 20, 1, 107, 233, 161, - 20, 1, 107, 227, 242, 20, 1, 107, 219, 227, 20, 1, 107, 227, 251, 20, 1, - 107, 225, 214, 20, 1, 107, 228, 238, 20, 1, 107, 219, 254, 20, 1, 107, - 224, 136, 20, 1, 107, 230, 51, 20, 1, 107, 232, 125, 20, 1, 107, 223, 87, - 230, 101, 20, 1, 107, 216, 118, 20, 1, 107, 227, 243, 20, 1, 107, 231, - 128, 199, 20, 1, 107, 221, 234, 20, 1, 107, 244, 203, 20, 1, 82, 229, - 148, 20, 1, 82, 216, 17, 20, 1, 82, 231, 117, 20, 1, 82, 233, 94, 20, 1, - 82, 213, 128, 20, 1, 82, 232, 131, 20, 1, 82, 226, 93, 20, 1, 82, 219, - 47, 20, 1, 82, 223, 148, 20, 1, 82, 228, 8, 20, 1, 82, 229, 119, 20, 1, - 82, 224, 150, 20, 1, 82, 217, 63, 20, 1, 82, 229, 27, 20, 1, 82, 233, - 251, 20, 1, 82, 211, 187, 20, 1, 82, 221, 172, 20, 1, 82, 229, 50, 20, 1, - 82, 226, 90, 20, 1, 82, 216, 18, 20, 1, 82, 233, 208, 20, 1, 82, 232, - 145, 20, 1, 82, 228, 11, 20, 1, 82, 229, 3, 20, 1, 82, 231, 225, 20, 1, - 82, 229, 20, 20, 1, 82, 229, 2, 20, 1, 82, 228, 10, 20, 1, 82, 222, 240, - 20, 1, 82, 228, 176, 20, 1, 82, 225, 213, 20, 1, 82, 222, 33, 20, 1, 82, - 229, 35, 20, 1, 82, 231, 15, 20, 1, 82, 242, 234, 20, 1, 82, 229, 23, 20, - 1, 82, 228, 187, 20, 1, 82, 231, 177, 20, 1, 82, 232, 127, 20, 1, 82, - 229, 55, 20, 1, 82, 229, 132, 20, 1, 82, 217, 86, 227, 249, 20, 1, 82, - 220, 129, 20, 1, 82, 224, 146, 20, 1, 82, 229, 152, 219, 53, 20, 1, 82, - 229, 43, 227, 164, 20, 1, 82, 211, 4, 20, 1, 82, 242, 235, 20, 1, 82, - 215, 118, 20, 1, 82, 211, 19, 20, 1, 82, 225, 19, 20, 1, 82, 215, 108, - 20, 1, 82, 234, 160, 20, 1, 82, 218, 81, 20, 1, 82, 216, 220, 20, 1, 82, - 213, 184, 20, 1, 82, 212, 6, 20, 1, 82, 233, 138, 20, 1, 82, 224, 153, - 20, 1, 82, 217, 97, 20, 1, 82, 242, 254, 20, 1, 82, 229, 64, 20, 1, 82, - 220, 42, 20, 1, 82, 231, 10, 20, 1, 82, 231, 121, 20, 1, 82, 227, 119, - 20, 1, 82, 228, 141, 20, 1, 82, 243, 80, 20, 1, 82, 215, 109, 20, 1, 82, - 233, 217, 20, 1, 82, 211, 67, 20, 1, 82, 227, 153, 250, 24, 20, 1, 82, - 210, 250, 20, 1, 82, 231, 27, 20, 1, 82, 229, 137, 20, 1, 82, 225, 103, - 20, 1, 82, 210, 197, 20, 1, 82, 233, 12, 20, 1, 82, 243, 240, 20, 1, 82, - 243, 79, 20, 1, 82, 229, 13, 20, 1, 82, 234, 162, 20, 1, 82, 231, 228, - 20, 1, 82, 229, 26, 20, 1, 82, 242, 241, 20, 1, 82, 244, 204, 20, 1, 82, - 227, 244, 20, 1, 82, 225, 156, 20, 1, 82, 211, 17, 20, 1, 82, 229, 51, - 20, 1, 82, 227, 153, 252, 31, 20, 1, 82, 227, 99, 20, 1, 82, 224, 250, - 20, 1, 82, 230, 225, 20, 1, 82, 243, 238, 20, 1, 82, 229, 225, 20, 1, 82, - 230, 105, 20, 1, 82, 242, 240, 20, 1, 82, 243, 242, 74, 20, 1, 82, 230, - 52, 20, 1, 82, 224, 149, 20, 1, 82, 229, 15, 20, 1, 82, 233, 195, 20, 1, - 82, 225, 100, 20, 1, 82, 227, 252, 20, 1, 82, 211, 18, 20, 1, 82, 229, - 36, 20, 1, 82, 226, 94, 225, 190, 20, 1, 82, 243, 242, 251, 23, 20, 1, - 82, 244, 45, 20, 1, 82, 228, 181, 20, 1, 82, 61, 20, 1, 82, 216, 11, 20, - 1, 82, 78, 20, 1, 82, 74, 20, 1, 82, 233, 92, 20, 1, 82, 226, 94, 225, - 26, 20, 1, 82, 217, 102, 20, 1, 82, 217, 52, 20, 1, 82, 229, 152, 230, - 39, 240, 241, 20, 1, 82, 220, 17, 20, 1, 82, 211, 14, 20, 1, 82, 228, - 252, 20, 1, 82, 210, 202, 20, 1, 82, 210, 227, 217, 241, 20, 1, 82, 210, - 227, 249, 155, 20, 1, 82, 210, 187, 20, 1, 82, 210, 195, 20, 1, 82, 234, - 148, 20, 1, 82, 225, 154, 20, 1, 82, 228, 182, 245, 110, 20, 1, 82, 224, - 147, 20, 1, 82, 211, 192, 20, 1, 82, 244, 155, 20, 1, 82, 213, 250, 20, - 1, 82, 232, 103, 20, 1, 82, 230, 235, 20, 1, 82, 223, 54, 20, 1, 82, 223, - 174, 20, 1, 82, 228, 251, 20, 1, 82, 229, 82, 20, 1, 82, 220, 9, 20, 1, - 82, 219, 254, 20, 1, 82, 243, 242, 223, 89, 20, 1, 82, 198, 20, 1, 82, - 225, 111, 20, 1, 82, 232, 125, 20, 1, 82, 234, 34, 20, 1, 82, 231, 63, - 20, 1, 82, 186, 20, 1, 82, 231, 174, 20, 1, 82, 216, 222, 20, 1, 82, 234, - 98, 20, 1, 82, 230, 155, 20, 1, 82, 216, 248, 20, 1, 82, 244, 177, 20, 1, - 82, 242, 230, 20, 1, 225, 140, 176, 20, 1, 225, 140, 69, 20, 1, 225, 140, - 233, 223, 20, 1, 225, 140, 245, 217, 20, 1, 225, 140, 223, 111, 20, 1, - 225, 140, 217, 87, 20, 1, 225, 140, 227, 152, 20, 1, 225, 140, 233, 141, - 20, 1, 225, 140, 222, 242, 20, 1, 225, 140, 223, 32, 20, 1, 225, 140, - 231, 84, 20, 1, 225, 140, 217, 102, 20, 1, 225, 140, 229, 151, 20, 1, - 225, 140, 228, 188, 20, 1, 225, 140, 194, 20, 1, 225, 140, 218, 5, 20, 1, - 225, 140, 220, 29, 20, 1, 225, 140, 219, 193, 20, 1, 225, 140, 220, 125, - 20, 1, 225, 140, 233, 161, 20, 1, 225, 140, 234, 162, 20, 1, 225, 140, - 227, 213, 20, 1, 225, 140, 227, 242, 20, 1, 225, 140, 228, 159, 20, 1, - 225, 140, 210, 226, 20, 1, 225, 140, 219, 227, 20, 1, 225, 140, 192, 20, - 1, 225, 140, 228, 14, 20, 1, 225, 140, 225, 154, 20, 1, 225, 140, 227, - 251, 20, 1, 225, 140, 211, 192, 20, 1, 225, 140, 225, 214, 20, 1, 225, - 140, 222, 142, 20, 1, 225, 140, 228, 238, 20, 1, 225, 140, 223, 54, 20, - 1, 225, 140, 234, 171, 20, 1, 225, 140, 229, 12, 20, 1, 225, 140, 229, - 61, 20, 1, 225, 140, 220, 9, 20, 1, 225, 140, 224, 150, 20, 1, 225, 140, - 244, 45, 20, 1, 225, 140, 212, 65, 20, 1, 225, 140, 232, 247, 20, 1, 225, - 140, 232, 125, 20, 1, 225, 140, 234, 34, 20, 1, 225, 140, 231, 119, 20, - 1, 225, 140, 223, 86, 20, 1, 225, 140, 186, 20, 1, 225, 140, 230, 166, - 20, 1, 225, 140, 231, 127, 20, 1, 225, 140, 216, 231, 20, 1, 225, 140, - 234, 1, 20, 1, 225, 140, 221, 253, 20, 1, 225, 140, 212, 115, 95, 1, 191, - 95, 1, 252, 199, 95, 1, 8, 191, 95, 1, 225, 45, 95, 1, 186, 95, 1, 230, - 238, 95, 1, 254, 31, 186, 95, 1, 244, 204, 95, 1, 214, 27, 95, 1, 213, - 177, 95, 1, 217, 106, 95, 1, 248, 229, 95, 1, 8, 215, 157, 95, 1, 8, 217, - 106, 95, 1, 215, 157, 95, 1, 248, 143, 95, 1, 198, 95, 1, 228, 242, 95, - 1, 8, 228, 115, 95, 1, 254, 31, 198, 95, 1, 228, 115, 95, 1, 228, 101, - 95, 1, 233, 141, 95, 1, 232, 66, 95, 1, 233, 4, 95, 1, 232, 249, 95, 1, - 216, 57, 95, 1, 247, 161, 95, 1, 216, 49, 95, 1, 247, 160, 95, 1, 176, - 95, 1, 243, 142, 95, 1, 8, 176, 95, 1, 224, 91, 95, 1, 224, 69, 95, 1, - 229, 82, 95, 1, 229, 33, 95, 1, 254, 31, 229, 82, 95, 1, 162, 95, 1, 211, - 165, 95, 1, 243, 0, 95, 1, 242, 233, 95, 1, 215, 166, 95, 1, 246, 34, 95, - 1, 227, 169, 95, 1, 227, 154, 95, 1, 215, 176, 95, 1, 246, 41, 95, 1, 8, - 215, 176, 95, 1, 8, 246, 41, 95, 1, 223, 109, 215, 176, 95, 1, 220, 104, - 95, 1, 218, 225, 95, 1, 210, 82, 95, 1, 210, 14, 95, 1, 215, 184, 95, 1, - 246, 46, 95, 1, 8, 215, 184, 95, 1, 206, 95, 1, 210, 116, 95, 1, 210, 15, - 95, 1, 209, 243, 95, 1, 209, 223, 95, 1, 254, 31, 209, 243, 95, 1, 209, - 215, 95, 1, 209, 222, 95, 1, 212, 65, 95, 1, 254, 218, 95, 1, 241, 196, - 95, 1, 229, 197, 95, 5, 253, 230, 95, 5, 223, 109, 213, 133, 95, 5, 223, - 109, 253, 230, 95, 25, 5, 61, 95, 25, 5, 255, 82, 95, 25, 5, 254, 214, - 95, 25, 5, 254, 131, 95, 25, 5, 254, 123, 95, 25, 5, 78, 95, 25, 5, 226, - 187, 95, 25, 5, 211, 227, 95, 25, 5, 212, 98, 95, 25, 5, 76, 95, 25, 5, - 245, 158, 95, 25, 5, 245, 146, 95, 25, 5, 226, 236, 95, 25, 5, 74, 95, - 25, 5, 240, 126, 95, 25, 5, 240, 125, 95, 25, 5, 240, 124, 95, 25, 5, - 235, 196, 95, 25, 5, 236, 67, 95, 25, 5, 236, 40, 95, 25, 5, 235, 162, - 95, 25, 5, 235, 238, 95, 25, 5, 69, 95, 25, 5, 214, 229, 95, 25, 5, 214, - 228, 95, 25, 5, 214, 227, 95, 25, 5, 214, 118, 95, 25, 5, 214, 211, 95, - 25, 5, 214, 178, 95, 25, 5, 211, 117, 95, 25, 5, 211, 8, 95, 25, 5, 254, - 252, 95, 25, 5, 254, 248, 95, 25, 5, 245, 94, 95, 25, 5, 222, 185, 245, - 94, 95, 25, 5, 245, 100, 95, 25, 5, 222, 185, 245, 100, 95, 25, 5, 254, - 210, 95, 25, 5, 245, 203, 95, 25, 5, 253, 200, 95, 25, 5, 226, 138, 95, - 25, 5, 230, 30, 95, 25, 5, 229, 84, 95, 138, 222, 254, 95, 138, 216, 15, - 222, 254, 95, 138, 48, 95, 138, 51, 95, 1, 216, 29, 95, 1, 216, 28, 95, - 1, 216, 27, 95, 1, 216, 26, 95, 1, 216, 25, 95, 1, 216, 24, 95, 1, 216, - 23, 95, 1, 223, 109, 216, 30, 95, 1, 223, 109, 216, 29, 95, 1, 223, 109, - 216, 27, 95, 1, 223, 109, 216, 26, 95, 1, 223, 109, 216, 25, 95, 1, 223, - 109, 216, 23, 56, 1, 254, 31, 76, 141, 1, 254, 31, 211, 47, 49, 28, 16, - 224, 157, 49, 28, 16, 248, 166, 49, 28, 16, 225, 178, 49, 28, 16, 226, - 117, 245, 186, 49, 28, 16, 226, 117, 247, 209, 49, 28, 16, 214, 16, 245, - 186, 49, 28, 16, 214, 16, 247, 209, 49, 28, 16, 234, 203, 49, 28, 16, - 217, 170, 49, 28, 16, 226, 13, 49, 28, 16, 210, 217, 49, 28, 16, 210, - 218, 247, 209, 49, 28, 16, 233, 240, 49, 28, 16, 254, 76, 245, 186, 49, - 28, 16, 245, 34, 245, 186, 49, 28, 16, 217, 3, 49, 28, 16, 234, 167, 49, - 28, 16, 254, 66, 49, 28, 16, 254, 67, 247, 209, 49, 28, 16, 217, 176, 49, - 28, 16, 216, 160, 49, 28, 16, 226, 210, 254, 29, 49, 28, 16, 242, 166, - 254, 29, 49, 28, 16, 224, 156, 49, 28, 16, 250, 157, 49, 28, 16, 214, 6, - 49, 28, 16, 235, 170, 254, 29, 49, 28, 16, 234, 169, 254, 29, 49, 28, 16, - 234, 168, 254, 29, 49, 28, 16, 221, 215, 49, 28, 16, 226, 4, 49, 28, 16, - 218, 148, 254, 69, 49, 28, 16, 226, 116, 254, 29, 49, 28, 16, 214, 15, - 254, 29, 49, 28, 16, 254, 70, 254, 29, 49, 28, 16, 254, 64, 49, 28, 16, - 234, 43, 49, 28, 16, 223, 49, 49, 28, 16, 225, 109, 254, 29, 49, 28, 16, - 216, 84, 49, 28, 16, 254, 129, 49, 28, 16, 221, 161, 49, 28, 16, 217, - 179, 254, 29, 49, 28, 16, 217, 179, 231, 45, 218, 146, 49, 28, 16, 226, - 111, 254, 29, 49, 28, 16, 216, 191, 49, 28, 16, 233, 33, 49, 28, 16, 246, - 49, 49, 28, 16, 215, 228, 49, 28, 16, 216, 233, 49, 28, 16, 233, 243, 49, - 28, 16, 254, 76, 245, 34, 229, 100, 49, 28, 16, 243, 243, 254, 29, 49, - 28, 16, 236, 19, 49, 28, 16, 215, 200, 254, 29, 49, 28, 16, 234, 206, - 215, 199, 49, 28, 16, 225, 203, 49, 28, 16, 224, 161, 49, 28, 16, 234, - 17, 49, 28, 16, 250, 88, 254, 29, 49, 28, 16, 223, 149, 49, 28, 16, 226, - 16, 254, 29, 49, 28, 16, 226, 14, 254, 29, 49, 28, 16, 240, 116, 49, 28, - 16, 229, 208, 49, 28, 16, 225, 159, 49, 28, 16, 234, 18, 254, 158, 49, - 28, 16, 215, 200, 254, 158, 49, 28, 16, 218, 125, 49, 28, 16, 242, 130, - 49, 28, 16, 235, 170, 229, 100, 49, 28, 16, 226, 210, 229, 100, 49, 28, - 16, 226, 117, 229, 100, 49, 28, 16, 225, 158, 49, 28, 16, 234, 4, 49, 28, - 16, 225, 157, 49, 28, 16, 233, 242, 49, 28, 16, 225, 204, 229, 100, 49, - 28, 16, 234, 168, 229, 101, 254, 104, 49, 28, 16, 234, 169, 229, 101, - 254, 104, 49, 28, 16, 210, 215, 49, 28, 16, 254, 67, 229, 100, 49, 28, - 16, 254, 68, 217, 177, 229, 100, 49, 28, 16, 210, 216, 49, 28, 16, 233, - 241, 49, 28, 16, 245, 181, 49, 28, 16, 250, 158, 49, 28, 16, 230, 203, - 235, 169, 49, 28, 16, 214, 16, 229, 100, 49, 28, 16, 225, 109, 229, 100, - 49, 28, 16, 224, 162, 229, 100, 49, 28, 16, 226, 207, 49, 28, 16, 254, - 92, 49, 28, 16, 232, 63, 49, 28, 16, 226, 14, 229, 100, 49, 28, 16, 226, - 16, 229, 100, 49, 28, 16, 245, 68, 226, 15, 49, 28, 16, 233, 159, 49, 28, - 16, 254, 93, 49, 28, 16, 215, 200, 229, 100, 49, 28, 16, 245, 184, 49, - 28, 16, 217, 179, 229, 100, 49, 28, 16, 217, 171, 49, 28, 16, 250, 88, - 229, 100, 49, 28, 16, 245, 114, 49, 28, 16, 221, 162, 229, 100, 49, 28, - 16, 211, 151, 234, 43, 49, 28, 16, 215, 197, 49, 28, 16, 224, 163, 49, - 28, 16, 215, 201, 49, 28, 16, 215, 198, 49, 28, 16, 224, 160, 49, 28, 16, - 215, 196, 49, 28, 16, 224, 159, 49, 28, 16, 242, 165, 49, 28, 16, 254, - 22, 49, 28, 16, 245, 68, 254, 22, 49, 28, 16, 226, 111, 229, 100, 49, 28, - 16, 216, 190, 245, 77, 49, 28, 16, 216, 190, 245, 33, 49, 28, 16, 216, - 192, 254, 71, 49, 28, 16, 216, 185, 234, 253, 254, 63, 49, 28, 16, 234, - 205, 49, 28, 16, 245, 147, 49, 28, 16, 211, 11, 234, 202, 49, 28, 16, - 211, 11, 254, 104, 49, 28, 16, 218, 147, 49, 28, 16, 234, 44, 254, 104, - 49, 28, 16, 247, 210, 254, 29, 49, 28, 16, 233, 244, 254, 29, 49, 28, 16, - 233, 244, 254, 158, 49, 28, 16, 233, 244, 229, 100, 49, 28, 16, 254, 70, - 229, 100, 49, 28, 16, 254, 72, 49, 28, 16, 247, 209, 49, 28, 16, 215, - 211, 49, 28, 16, 216, 225, 49, 28, 16, 234, 8, 49, 28, 16, 233, 38, 245, - 142, 250, 79, 49, 28, 16, 233, 38, 246, 50, 250, 80, 49, 28, 16, 233, 38, - 215, 213, 250, 80, 49, 28, 16, 233, 38, 216, 235, 250, 80, 49, 28, 16, - 233, 38, 236, 14, 250, 79, 49, 28, 16, 242, 166, 229, 101, 254, 104, 49, - 28, 16, 242, 166, 226, 5, 254, 18, 49, 28, 16, 242, 166, 226, 5, 248, 37, - 49, 28, 16, 247, 233, 49, 28, 16, 247, 234, 226, 5, 254, 19, 234, 202, - 49, 28, 16, 247, 234, 226, 5, 254, 19, 254, 104, 49, 28, 16, 247, 234, - 226, 5, 248, 37, 49, 28, 16, 215, 217, 49, 28, 16, 254, 23, 49, 28, 16, - 236, 21, 49, 28, 16, 247, 254, 49, 28, 16, 254, 220, 225, 3, 254, 24, 49, - 28, 16, 254, 220, 254, 21, 49, 28, 16, 254, 220, 254, 24, 49, 28, 16, - 254, 220, 231, 39, 49, 28, 16, 254, 220, 231, 50, 49, 28, 16, 254, 220, - 242, 167, 49, 28, 16, 254, 220, 242, 164, 49, 28, 16, 254, 220, 225, 3, - 242, 167, 49, 28, 16, 231, 156, 224, 168, 240, 114, 49, 28, 16, 231, 156, - 254, 160, 224, 168, 240, 114, 49, 28, 16, 231, 156, 248, 36, 240, 114, - 49, 28, 16, 231, 156, 254, 160, 248, 36, 240, 114, 49, 28, 16, 231, 156, - 215, 206, 240, 114, 49, 28, 16, 231, 156, 215, 218, 49, 28, 16, 231, 156, - 216, 229, 240, 114, 49, 28, 16, 231, 156, 216, 229, 233, 41, 240, 114, - 49, 28, 16, 231, 156, 233, 41, 240, 114, 49, 28, 16, 231, 156, 225, 42, - 240, 114, 49, 28, 16, 235, 176, 216, 252, 240, 115, 49, 28, 16, 254, 68, - 216, 252, 240, 115, 49, 28, 16, 244, 180, 216, 226, 49, 28, 16, 244, 180, - 230, 148, 49, 28, 16, 244, 180, 247, 238, 49, 28, 16, 231, 156, 214, 10, - 240, 114, 49, 28, 16, 231, 156, 224, 167, 240, 114, 49, 28, 16, 231, 156, - 225, 42, 216, 229, 240, 114, 49, 28, 16, 242, 162, 230, 31, 254, 71, 49, - 28, 16, 242, 162, 230, 31, 247, 208, 49, 28, 16, 245, 156, 234, 253, 243, - 243, 213, 124, 49, 28, 16, 236, 20, 49, 28, 16, 236, 18, 49, 28, 16, 243, - 243, 254, 30, 248, 35, 240, 113, 49, 28, 16, 243, 243, 247, 252, 191, 49, - 28, 16, 243, 243, 247, 252, 229, 208, 49, 28, 16, 243, 243, 229, 203, - 240, 114, 49, 28, 16, 243, 243, 247, 252, 248, 11, 49, 28, 16, 243, 243, - 219, 104, 247, 251, 248, 11, 49, 28, 16, 243, 243, 247, 252, 234, 188, - 49, 28, 16, 243, 243, 247, 252, 210, 23, 49, 28, 16, 243, 243, 247, 252, - 228, 239, 234, 202, 49, 28, 16, 243, 243, 247, 252, 228, 239, 254, 104, - 49, 28, 16, 243, 243, 231, 196, 250, 81, 247, 238, 49, 28, 16, 243, 243, - 231, 196, 250, 81, 230, 148, 49, 28, 16, 244, 130, 219, 104, 250, 81, - 214, 9, 49, 28, 16, 243, 243, 219, 104, 250, 81, 217, 180, 49, 28, 16, - 243, 243, 229, 102, 49, 28, 16, 250, 82, 209, 249, 49, 28, 16, 250, 82, - 234, 42, 49, 28, 16, 250, 82, 219, 11, 49, 28, 16, 243, 243, 240, 161, - 211, 10, 216, 230, 49, 28, 16, 243, 243, 245, 157, 254, 94, 49, 28, 16, - 211, 10, 215, 207, 49, 28, 16, 247, 246, 215, 207, 49, 28, 16, 247, 246, - 216, 230, 49, 28, 16, 247, 246, 254, 73, 246, 50, 247, 147, 49, 28, 16, - 247, 246, 230, 146, 216, 234, 247, 147, 49, 28, 16, 247, 246, 247, 230, - 245, 44, 247, 147, 49, 28, 16, 247, 246, 215, 215, 226, 215, 247, 147, - 49, 28, 16, 211, 10, 254, 73, 246, 50, 247, 147, 49, 28, 16, 211, 10, - 230, 146, 216, 234, 247, 147, 49, 28, 16, 211, 10, 247, 230, 245, 44, - 247, 147, 49, 28, 16, 211, 10, 215, 215, 226, 215, 247, 147, 49, 28, 16, - 243, 56, 247, 245, 49, 28, 16, 243, 56, 211, 9, 49, 28, 16, 247, 253, - 254, 73, 230, 204, 49, 28, 16, 247, 253, 254, 73, 231, 78, 49, 28, 16, - 247, 253, 247, 209, 49, 28, 16, 247, 253, 216, 183, 49, 28, 16, 219, 165, - 216, 183, 49, 28, 16, 219, 165, 216, 184, 247, 194, 49, 28, 16, 219, 165, - 216, 184, 215, 208, 49, 28, 16, 219, 165, 216, 184, 216, 223, 49, 28, 16, - 219, 165, 253, 252, 49, 28, 16, 219, 165, 253, 253, 247, 194, 49, 28, 16, - 219, 165, 253, 253, 215, 208, 49, 28, 16, 219, 165, 253, 253, 216, 223, - 49, 28, 16, 247, 231, 243, 37, 49, 28, 16, 247, 237, 226, 138, 49, 28, - 16, 218, 139, 49, 28, 16, 254, 15, 191, 49, 28, 16, 254, 15, 213, 124, - 49, 28, 16, 254, 15, 243, 142, 49, 28, 16, 254, 15, 248, 11, 49, 28, 16, - 254, 15, 234, 188, 49, 28, 16, 254, 15, 210, 23, 49, 28, 16, 254, 15, - 228, 238, 49, 28, 16, 234, 168, 229, 101, 231, 49, 49, 28, 16, 234, 169, - 229, 101, 231, 49, 49, 28, 16, 234, 168, 229, 101, 234, 202, 49, 28, 16, - 234, 169, 229, 101, 234, 202, 49, 28, 16, 234, 44, 234, 202, 49, 28, 16, - 242, 166, 229, 101, 234, 202, 28, 16, 219, 157, 252, 143, 28, 16, 52, - 252, 143, 28, 16, 40, 252, 143, 28, 16, 223, 53, 40, 252, 143, 28, 16, - 248, 163, 252, 143, 28, 16, 219, 253, 252, 143, 28, 16, 43, 223, 80, 50, - 28, 16, 44, 223, 80, 50, 28, 16, 223, 80, 247, 126, 28, 16, 248, 204, - 221, 165, 28, 16, 248, 230, 251, 1, 28, 16, 221, 165, 28, 16, 249, 242, - 28, 16, 223, 78, 244, 119, 28, 16, 223, 78, 244, 118, 28, 16, 223, 78, - 244, 117, 28, 16, 244, 139, 28, 16, 244, 140, 51, 28, 16, 251, 156, 79, - 28, 16, 251, 32, 28, 16, 251, 167, 28, 16, 127, 28, 16, 226, 197, 218, - 165, 28, 16, 215, 57, 218, 165, 28, 16, 216, 143, 218, 165, 28, 16, 244, - 18, 218, 165, 28, 16, 244, 88, 218, 165, 28, 16, 219, 126, 218, 165, 28, - 16, 219, 124, 244, 2, 28, 16, 244, 16, 244, 2, 28, 16, 243, 210, 250, 22, - 28, 16, 243, 210, 250, 23, 226, 140, 254, 150, 28, 16, 243, 210, 250, 23, - 226, 140, 252, 130, 28, 16, 251, 75, 250, 22, 28, 16, 245, 15, 250, 22, - 28, 16, 245, 15, 250, 23, 226, 140, 254, 150, 28, 16, 245, 15, 250, 23, - 226, 140, 252, 130, 28, 16, 246, 91, 250, 21, 28, 16, 246, 91, 250, 20, - 28, 16, 230, 90, 231, 95, 223, 64, 28, 16, 52, 220, 77, 28, 16, 52, 244, - 73, 28, 16, 244, 74, 214, 163, 28, 16, 244, 74, 246, 114, 28, 16, 229, - 193, 214, 163, 28, 16, 229, 193, 246, 114, 28, 16, 220, 78, 214, 163, 28, - 16, 220, 78, 246, 114, 28, 16, 224, 25, 138, 220, 77, 28, 16, 224, 25, - 138, 244, 73, 28, 16, 249, 224, 216, 88, 28, 16, 249, 93, 216, 88, 28, - 16, 226, 140, 254, 150, 28, 16, 226, 140, 252, 130, 28, 16, 224, 7, 254, - 150, 28, 16, 224, 7, 252, 130, 28, 16, 230, 93, 223, 64, 28, 16, 211, - 251, 223, 64, 28, 16, 163, 223, 64, 28, 16, 224, 25, 223, 64, 28, 16, - 245, 197, 223, 64, 28, 16, 219, 120, 223, 64, 28, 16, 216, 161, 223, 64, - 28, 16, 219, 112, 223, 64, 28, 16, 123, 240, 218, 215, 71, 223, 64, 28, - 16, 211, 179, 228, 48, 28, 16, 96, 228, 48, 28, 16, 250, 44, 211, 179, - 228, 48, 28, 16, 42, 228, 49, 211, 253, 28, 16, 42, 228, 49, 251, 229, - 28, 16, 215, 227, 228, 49, 120, 211, 253, 28, 16, 215, 227, 228, 49, 120, - 251, 229, 28, 16, 215, 227, 228, 49, 43, 211, 253, 28, 16, 215, 227, 228, - 49, 43, 251, 229, 28, 16, 215, 227, 228, 49, 44, 211, 253, 28, 16, 215, - 227, 228, 49, 44, 251, 229, 28, 16, 215, 227, 228, 49, 124, 211, 253, 28, - 16, 215, 227, 228, 49, 124, 251, 229, 28, 16, 215, 227, 228, 49, 120, 44, - 211, 253, 28, 16, 215, 227, 228, 49, 120, 44, 251, 229, 28, 16, 230, 134, - 228, 49, 211, 253, 28, 16, 230, 134, 228, 49, 251, 229, 28, 16, 215, 224, - 228, 49, 124, 211, 253, 28, 16, 215, 224, 228, 49, 124, 251, 229, 28, 16, - 226, 8, 228, 48, 28, 16, 213, 132, 228, 48, 28, 16, 228, 49, 251, 229, - 28, 16, 227, 207, 228, 48, 28, 16, 249, 249, 228, 49, 211, 253, 28, 16, - 249, 249, 228, 49, 251, 229, 28, 16, 251, 154, 28, 16, 211, 251, 228, 52, - 28, 16, 163, 228, 52, 28, 16, 224, 25, 228, 52, 28, 16, 245, 197, 228, - 52, 28, 16, 219, 120, 228, 52, 28, 16, 216, 161, 228, 52, 28, 16, 219, - 112, 228, 52, 28, 16, 123, 240, 218, 215, 71, 228, 52, 28, 16, 38, 218, - 141, 28, 16, 38, 218, 242, 218, 141, 28, 16, 38, 215, 235, 28, 16, 38, - 215, 234, 28, 16, 38, 215, 233, 28, 16, 244, 109, 215, 235, 28, 16, 244, - 109, 215, 234, 28, 16, 244, 109, 215, 233, 28, 16, 38, 253, 197, 247, - 128, 28, 16, 38, 244, 80, 28, 16, 38, 244, 79, 28, 16, 38, 244, 78, 28, - 16, 38, 244, 77, 28, 16, 38, 244, 76, 28, 16, 252, 66, 252, 82, 28, 16, - 245, 151, 252, 82, 28, 16, 252, 66, 216, 112, 28, 16, 245, 151, 216, 112, - 28, 16, 252, 66, 219, 82, 28, 16, 245, 151, 219, 82, 28, 16, 252, 66, - 225, 118, 28, 16, 245, 151, 225, 118, 28, 16, 38, 255, 23, 28, 16, 38, - 218, 167, 28, 16, 38, 216, 239, 28, 16, 38, 218, 168, 28, 16, 38, 231, - 167, 28, 16, 38, 231, 166, 28, 16, 38, 255, 22, 28, 16, 38, 232, 118, 28, - 16, 254, 6, 214, 163, 28, 16, 254, 6, 246, 114, 28, 16, 38, 247, 143, 28, - 16, 38, 222, 234, 28, 16, 38, 244, 66, 28, 16, 38, 219, 78, 28, 16, 38, - 252, 46, 28, 16, 38, 52, 216, 20, 28, 16, 38, 215, 212, 216, 20, 28, 16, - 222, 238, 28, 16, 218, 76, 28, 16, 210, 159, 28, 16, 225, 110, 28, 16, - 231, 30, 28, 16, 244, 25, 28, 16, 249, 146, 28, 16, 248, 86, 28, 16, 242, - 157, 228, 53, 219, 97, 28, 16, 242, 157, 228, 53, 228, 80, 219, 97, 28, - 16, 216, 1, 28, 16, 215, 95, 28, 16, 235, 200, 215, 95, 28, 16, 215, 96, - 219, 97, 28, 16, 215, 96, 214, 163, 28, 16, 226, 152, 218, 104, 28, 16, - 226, 152, 218, 101, 28, 16, 226, 152, 218, 100, 28, 16, 226, 152, 218, - 99, 28, 16, 226, 152, 218, 98, 28, 16, 226, 152, 218, 97, 28, 16, 226, - 152, 218, 96, 28, 16, 226, 152, 218, 95, 28, 16, 226, 152, 218, 94, 28, - 16, 226, 152, 218, 103, 28, 16, 226, 152, 218, 102, 28, 16, 241, 252, 28, - 16, 229, 110, 28, 16, 245, 151, 64, 218, 135, 28, 16, 248, 79, 219, 97, - 28, 16, 38, 124, 251, 177, 28, 16, 38, 120, 251, 177, 28, 16, 38, 242, 7, - 28, 16, 38, 219, 69, 225, 46, 28, 16, 225, 219, 79, 28, 16, 225, 219, - 120, 79, 28, 16, 163, 225, 219, 79, 28, 16, 242, 189, 214, 163, 28, 16, - 242, 189, 246, 114, 28, 16, 2, 244, 108, 28, 16, 248, 188, 28, 16, 248, - 189, 254, 163, 28, 16, 231, 138, 28, 16, 232, 135, 28, 16, 251, 151, 28, - 16, 220, 156, 211, 253, 28, 16, 220, 156, 251, 229, 28, 16, 230, 189, 28, - 16, 230, 190, 251, 229, 28, 16, 220, 150, 211, 253, 28, 16, 220, 150, - 251, 229, 28, 16, 243, 227, 211, 253, 28, 16, 243, 227, 251, 229, 28, 16, - 232, 136, 225, 183, 223, 64, 28, 16, 232, 136, 236, 11, 223, 64, 28, 16, - 251, 152, 223, 64, 28, 16, 220, 156, 223, 64, 28, 16, 230, 190, 223, 64, - 28, 16, 220, 150, 223, 64, 28, 16, 216, 250, 225, 181, 249, 115, 224, - 177, 225, 182, 28, 16, 216, 250, 225, 181, 249, 115, 224, 177, 236, 10, - 28, 16, 216, 250, 225, 181, 249, 115, 224, 177, 225, 183, 247, 219, 28, - 16, 216, 250, 236, 9, 249, 115, 224, 177, 225, 182, 28, 16, 216, 250, - 236, 9, 249, 115, 224, 177, 236, 10, 28, 16, 216, 250, 236, 9, 249, 115, - 224, 177, 236, 11, 247, 219, 28, 16, 216, 250, 236, 9, 249, 115, 224, - 177, 236, 11, 247, 218, 28, 16, 216, 250, 236, 9, 249, 115, 224, 177, - 236, 11, 247, 217, 28, 16, 249, 141, 28, 16, 242, 133, 251, 75, 250, 22, - 28, 16, 242, 133, 245, 15, 250, 22, 28, 16, 42, 253, 166, 28, 16, 213, - 151, 28, 16, 225, 17, 28, 16, 250, 13, 28, 16, 221, 205, 28, 16, 250, 17, - 28, 16, 216, 8, 28, 16, 224, 245, 28, 16, 224, 246, 244, 68, 28, 16, 221, - 206, 244, 68, 28, 16, 216, 9, 223, 61, 28, 16, 225, 166, 218, 67, 26, - 213, 137, 189, 217, 230, 26, 213, 137, 189, 217, 219, 26, 213, 137, 189, - 217, 209, 26, 213, 137, 189, 217, 202, 26, 213, 137, 189, 217, 194, 26, - 213, 137, 189, 217, 188, 26, 213, 137, 189, 217, 187, 26, 213, 137, 189, - 217, 186, 26, 213, 137, 189, 217, 185, 26, 213, 137, 189, 217, 229, 26, - 213, 137, 189, 217, 228, 26, 213, 137, 189, 217, 227, 26, 213, 137, 189, - 217, 226, 26, 213, 137, 189, 217, 225, 26, 213, 137, 189, 217, 224, 26, - 213, 137, 189, 217, 223, 26, 213, 137, 189, 217, 222, 26, 213, 137, 189, - 217, 221, 26, 213, 137, 189, 217, 220, 26, 213, 137, 189, 217, 218, 26, - 213, 137, 189, 217, 217, 26, 213, 137, 189, 217, 216, 26, 213, 137, 189, - 217, 215, 26, 213, 137, 189, 217, 214, 26, 213, 137, 189, 217, 193, 26, - 213, 137, 189, 217, 192, 26, 213, 137, 189, 217, 191, 26, 213, 137, 189, - 217, 190, 26, 213, 137, 189, 217, 189, 26, 235, 221, 189, 217, 230, 26, - 235, 221, 189, 217, 219, 26, 235, 221, 189, 217, 202, 26, 235, 221, 189, - 217, 194, 26, 235, 221, 189, 217, 187, 26, 235, 221, 189, 217, 186, 26, - 235, 221, 189, 217, 228, 26, 235, 221, 189, 217, 227, 26, 235, 221, 189, - 217, 226, 26, 235, 221, 189, 217, 225, 26, 235, 221, 189, 217, 222, 26, - 235, 221, 189, 217, 221, 26, 235, 221, 189, 217, 220, 26, 235, 221, 189, - 217, 215, 26, 235, 221, 189, 217, 214, 26, 235, 221, 189, 217, 213, 26, - 235, 221, 189, 217, 212, 26, 235, 221, 189, 217, 211, 26, 235, 221, 189, - 217, 210, 26, 235, 221, 189, 217, 208, 26, 235, 221, 189, 217, 207, 26, - 235, 221, 189, 217, 206, 26, 235, 221, 189, 217, 205, 26, 235, 221, 189, - 217, 204, 26, 235, 221, 189, 217, 203, 26, 235, 221, 189, 217, 201, 26, - 235, 221, 189, 217, 200, 26, 235, 221, 189, 217, 199, 26, 235, 221, 189, - 217, 198, 26, 235, 221, 189, 217, 197, 26, 235, 221, 189, 217, 196, 26, - 235, 221, 189, 217, 195, 26, 235, 221, 189, 217, 193, 26, 235, 221, 189, - 217, 192, 26, 235, 221, 189, 217, 191, 26, 235, 221, 189, 217, 190, 26, - 235, 221, 189, 217, 189, 38, 26, 28, 215, 209, 38, 26, 28, 216, 224, 38, - 26, 28, 225, 191, 26, 28, 233, 37, 230, 147, 31, 245, 231, 247, 232, 31, - 241, 229, 245, 231, 247, 232, 31, 240, 221, 245, 231, 247, 232, 31, 245, - 230, 241, 230, 247, 232, 31, 245, 230, 240, 220, 247, 232, 31, 245, 231, - 180, 31, 250, 182, 180, 31, 243, 236, 250, 43, 180, 31, 230, 182, 180, - 31, 252, 138, 180, 31, 234, 185, 219, 81, 180, 31, 249, 187, 180, 31, - 253, 241, 180, 31, 226, 167, 180, 31, 251, 161, 226, 134, 180, 31, 248, - 81, 177, 247, 187, 180, 31, 247, 184, 180, 31, 210, 222, 180, 31, 235, - 254, 180, 31, 225, 200, 180, 31, 223, 130, 180, 31, 249, 197, 180, 31, - 241, 67, 252, 192, 180, 31, 212, 59, 180, 31, 244, 47, 180, 31, 254, 255, - 180, 31, 223, 92, 180, 31, 223, 68, 180, 31, 245, 229, 180, 31, 235, 59, - 180, 31, 249, 192, 180, 31, 245, 150, 180, 31, 246, 60, 180, 31, 250, - 153, 180, 31, 248, 90, 180, 31, 23, 223, 67, 180, 31, 226, 85, 180, 31, - 233, 40, 180, 31, 250, 6, 180, 31, 234, 83, 180, 31, 243, 93, 180, 31, - 218, 114, 180, 31, 224, 133, 180, 31, 243, 235, 180, 31, 223, 69, 180, - 31, 233, 77, 177, 230, 162, 180, 31, 223, 65, 180, 31, 242, 175, 216, 43, - 231, 81, 180, 31, 245, 152, 180, 31, 218, 126, 180, 31, 242, 135, 180, - 31, 245, 144, 180, 31, 225, 239, 180, 31, 222, 228, 180, 31, 244, 67, - 180, 31, 214, 8, 177, 212, 44, 180, 31, 249, 201, 180, 31, 231, 94, 180, - 31, 245, 69, 180, 31, 214, 172, 180, 31, 247, 220, 180, 31, 250, 8, 230, - 115, 180, 31, 242, 113, 180, 31, 243, 94, 236, 6, 180, 31, 231, 146, 180, - 31, 255, 19, 180, 31, 245, 165, 180, 31, 246, 117, 180, 31, 212, 42, 180, - 31, 219, 152, 180, 31, 235, 229, 180, 31, 248, 50, 180, 31, 248, 168, - 180, 31, 247, 216, 180, 31, 245, 37, 180, 31, 220, 117, 180, 31, 218, - 130, 180, 31, 242, 9, 180, 31, 249, 220, 180, 31, 250, 3, 180, 31, 244, - 185, 180, 31, 254, 221, 180, 31, 249, 219, 180, 31, 226, 201, 216, 197, - 213, 242, 180, 31, 247, 240, 180, 31, 233, 130, 180, 31, 244, 21, 249, - 157, 222, 204, 214, 174, 21, 111, 249, 157, 222, 204, 214, 174, 21, 105, - 249, 157, 222, 204, 214, 174, 21, 158, 249, 157, 222, 204, 214, 174, 21, - 161, 249, 157, 222, 204, 214, 174, 21, 190, 249, 157, 222, 204, 214, 174, - 21, 195, 249, 157, 222, 204, 214, 174, 21, 199, 249, 157, 222, 204, 214, - 174, 21, 196, 249, 157, 222, 204, 214, 174, 21, 201, 249, 157, 222, 204, - 216, 244, 21, 111, 249, 157, 222, 204, 216, 244, 21, 105, 249, 157, 222, - 204, 216, 244, 21, 158, 249, 157, 222, 204, 216, 244, 21, 161, 249, 157, - 222, 204, 216, 244, 21, 190, 249, 157, 222, 204, 216, 244, 21, 195, 249, - 157, 222, 204, 216, 244, 21, 199, 249, 157, 222, 204, 216, 244, 21, 196, - 249, 157, 222, 204, 216, 244, 21, 201, 11, 23, 6, 61, 11, 23, 6, 253, - 166, 11, 23, 6, 251, 74, 11, 23, 6, 249, 68, 11, 23, 6, 76, 11, 23, 6, - 245, 14, 11, 23, 6, 243, 209, 11, 23, 6, 242, 67, 11, 23, 6, 74, 11, 23, - 6, 235, 150, 11, 23, 6, 235, 29, 11, 23, 6, 156, 11, 23, 6, 194, 11, 23, - 6, 230, 30, 11, 23, 6, 78, 11, 23, 6, 226, 109, 11, 23, 6, 224, 99, 11, - 23, 6, 153, 11, 23, 6, 222, 93, 11, 23, 6, 217, 153, 11, 23, 6, 69, 11, - 23, 6, 214, 105, 11, 23, 6, 212, 98, 11, 23, 6, 211, 178, 11, 23, 6, 211, - 117, 11, 23, 6, 210, 159, 11, 23, 4, 61, 11, 23, 4, 253, 166, 11, 23, 4, - 251, 74, 11, 23, 4, 249, 68, 11, 23, 4, 76, 11, 23, 4, 245, 14, 11, 23, - 4, 243, 209, 11, 23, 4, 242, 67, 11, 23, 4, 74, 11, 23, 4, 235, 150, 11, - 23, 4, 235, 29, 11, 23, 4, 156, 11, 23, 4, 194, 11, 23, 4, 230, 30, 11, - 23, 4, 78, 11, 23, 4, 226, 109, 11, 23, 4, 224, 99, 11, 23, 4, 153, 11, - 23, 4, 222, 93, 11, 23, 4, 217, 153, 11, 23, 4, 69, 11, 23, 4, 214, 105, - 11, 23, 4, 212, 98, 11, 23, 4, 211, 178, 11, 23, 4, 211, 117, 11, 23, 4, - 210, 159, 11, 32, 6, 61, 11, 32, 6, 253, 166, 11, 32, 6, 251, 74, 11, 32, - 6, 249, 68, 11, 32, 6, 76, 11, 32, 6, 245, 14, 11, 32, 6, 243, 209, 11, - 32, 6, 242, 67, 11, 32, 6, 74, 11, 32, 6, 235, 150, 11, 32, 6, 235, 29, - 11, 32, 6, 156, 11, 32, 6, 194, 11, 32, 6, 230, 30, 11, 32, 6, 78, 11, - 32, 6, 226, 109, 11, 32, 6, 224, 99, 11, 32, 6, 153, 11, 32, 6, 222, 93, - 11, 32, 6, 217, 153, 11, 32, 6, 69, 11, 32, 6, 214, 105, 11, 32, 6, 212, - 98, 11, 32, 6, 211, 178, 11, 32, 6, 211, 117, 11, 32, 6, 210, 159, 11, - 32, 4, 61, 11, 32, 4, 253, 166, 11, 32, 4, 251, 74, 11, 32, 4, 249, 68, - 11, 32, 4, 76, 11, 32, 4, 245, 14, 11, 32, 4, 243, 209, 11, 32, 4, 74, - 11, 32, 4, 235, 150, 11, 32, 4, 235, 29, 11, 32, 4, 156, 11, 32, 4, 194, - 11, 32, 4, 230, 30, 11, 32, 4, 78, 11, 32, 4, 226, 109, 11, 32, 4, 224, - 99, 11, 32, 4, 153, 11, 32, 4, 222, 93, 11, 32, 4, 217, 153, 11, 32, 4, - 69, 11, 32, 4, 214, 105, 11, 32, 4, 212, 98, 11, 32, 4, 211, 178, 11, 32, - 4, 211, 117, 11, 32, 4, 210, 159, 11, 23, 32, 6, 61, 11, 23, 32, 6, 253, - 166, 11, 23, 32, 6, 251, 74, 11, 23, 32, 6, 249, 68, 11, 23, 32, 6, 76, - 11, 23, 32, 6, 245, 14, 11, 23, 32, 6, 243, 209, 11, 23, 32, 6, 242, 67, - 11, 23, 32, 6, 74, 11, 23, 32, 6, 235, 150, 11, 23, 32, 6, 235, 29, 11, - 23, 32, 6, 156, 11, 23, 32, 6, 194, 11, 23, 32, 6, 230, 30, 11, 23, 32, - 6, 78, 11, 23, 32, 6, 226, 109, 11, 23, 32, 6, 224, 99, 11, 23, 32, 6, - 153, 11, 23, 32, 6, 222, 93, 11, 23, 32, 6, 217, 153, 11, 23, 32, 6, 69, - 11, 23, 32, 6, 214, 105, 11, 23, 32, 6, 212, 98, 11, 23, 32, 6, 211, 178, - 11, 23, 32, 6, 211, 117, 11, 23, 32, 6, 210, 159, 11, 23, 32, 4, 61, 11, - 23, 32, 4, 253, 166, 11, 23, 32, 4, 251, 74, 11, 23, 32, 4, 249, 68, 11, - 23, 32, 4, 76, 11, 23, 32, 4, 245, 14, 11, 23, 32, 4, 243, 209, 11, 23, - 32, 4, 242, 67, 11, 23, 32, 4, 74, 11, 23, 32, 4, 235, 150, 11, 23, 32, - 4, 235, 29, 11, 23, 32, 4, 156, 11, 23, 32, 4, 194, 11, 23, 32, 4, 230, - 30, 11, 23, 32, 4, 78, 11, 23, 32, 4, 226, 109, 11, 23, 32, 4, 224, 99, - 11, 23, 32, 4, 153, 11, 23, 32, 4, 222, 93, 11, 23, 32, 4, 217, 153, 11, - 23, 32, 4, 69, 11, 23, 32, 4, 214, 105, 11, 23, 32, 4, 212, 98, 11, 23, - 32, 4, 211, 178, 11, 23, 32, 4, 211, 117, 11, 23, 32, 4, 210, 159, 11, - 119, 6, 61, 11, 119, 6, 251, 74, 11, 119, 6, 249, 68, 11, 119, 6, 243, - 209, 11, 119, 6, 235, 150, 11, 119, 6, 235, 29, 11, 119, 6, 230, 30, 11, - 119, 6, 78, 11, 119, 6, 226, 109, 11, 119, 6, 224, 99, 11, 119, 6, 222, - 93, 11, 119, 6, 217, 153, 11, 119, 6, 69, 11, 119, 6, 214, 105, 11, 119, - 6, 212, 98, 11, 119, 6, 211, 178, 11, 119, 6, 211, 117, 11, 119, 6, 210, - 159, 11, 119, 4, 61, 11, 119, 4, 253, 166, 11, 119, 4, 251, 74, 11, 119, - 4, 249, 68, 11, 119, 4, 245, 14, 11, 119, 4, 242, 67, 11, 119, 4, 74, 11, - 119, 4, 235, 150, 11, 119, 4, 235, 29, 11, 119, 4, 156, 11, 119, 4, 194, - 11, 119, 4, 230, 30, 11, 119, 4, 226, 109, 11, 119, 4, 224, 99, 11, 119, - 4, 153, 11, 119, 4, 222, 93, 11, 119, 4, 217, 153, 11, 119, 4, 69, 11, - 119, 4, 214, 105, 11, 119, 4, 212, 98, 11, 119, 4, 211, 178, 11, 119, 4, - 211, 117, 11, 119, 4, 210, 159, 11, 23, 119, 6, 61, 11, 23, 119, 6, 253, - 166, 11, 23, 119, 6, 251, 74, 11, 23, 119, 6, 249, 68, 11, 23, 119, 6, - 76, 11, 23, 119, 6, 245, 14, 11, 23, 119, 6, 243, 209, 11, 23, 119, 6, - 242, 67, 11, 23, 119, 6, 74, 11, 23, 119, 6, 235, 150, 11, 23, 119, 6, - 235, 29, 11, 23, 119, 6, 156, 11, 23, 119, 6, 194, 11, 23, 119, 6, 230, - 30, 11, 23, 119, 6, 78, 11, 23, 119, 6, 226, 109, 11, 23, 119, 6, 224, - 99, 11, 23, 119, 6, 153, 11, 23, 119, 6, 222, 93, 11, 23, 119, 6, 217, - 153, 11, 23, 119, 6, 69, 11, 23, 119, 6, 214, 105, 11, 23, 119, 6, 212, - 98, 11, 23, 119, 6, 211, 178, 11, 23, 119, 6, 211, 117, 11, 23, 119, 6, - 210, 159, 11, 23, 119, 4, 61, 11, 23, 119, 4, 253, 166, 11, 23, 119, 4, - 251, 74, 11, 23, 119, 4, 249, 68, 11, 23, 119, 4, 76, 11, 23, 119, 4, - 245, 14, 11, 23, 119, 4, 243, 209, 11, 23, 119, 4, 242, 67, 11, 23, 119, - 4, 74, 11, 23, 119, 4, 235, 150, 11, 23, 119, 4, 235, 29, 11, 23, 119, 4, - 156, 11, 23, 119, 4, 194, 11, 23, 119, 4, 230, 30, 11, 23, 119, 4, 78, - 11, 23, 119, 4, 226, 109, 11, 23, 119, 4, 224, 99, 11, 23, 119, 4, 153, - 11, 23, 119, 4, 222, 93, 11, 23, 119, 4, 217, 153, 11, 23, 119, 4, 69, - 11, 23, 119, 4, 214, 105, 11, 23, 119, 4, 212, 98, 11, 23, 119, 4, 211, - 178, 11, 23, 119, 4, 211, 117, 11, 23, 119, 4, 210, 159, 11, 133, 6, 61, - 11, 133, 6, 253, 166, 11, 133, 6, 249, 68, 11, 133, 6, 76, 11, 133, 6, - 245, 14, 11, 133, 6, 243, 209, 11, 133, 6, 235, 150, 11, 133, 6, 235, 29, - 11, 133, 6, 156, 11, 133, 6, 194, 11, 133, 6, 230, 30, 11, 133, 6, 78, - 11, 133, 6, 226, 109, 11, 133, 6, 224, 99, 11, 133, 6, 222, 93, 11, 133, - 6, 217, 153, 11, 133, 6, 69, 11, 133, 6, 214, 105, 11, 133, 6, 212, 98, - 11, 133, 6, 211, 178, 11, 133, 6, 211, 117, 11, 133, 4, 61, 11, 133, 4, - 253, 166, 11, 133, 4, 251, 74, 11, 133, 4, 249, 68, 11, 133, 4, 76, 11, - 133, 4, 245, 14, 11, 133, 4, 243, 209, 11, 133, 4, 242, 67, 11, 133, 4, - 74, 11, 133, 4, 235, 150, 11, 133, 4, 235, 29, 11, 133, 4, 156, 11, 133, - 4, 194, 11, 133, 4, 230, 30, 11, 133, 4, 78, 11, 133, 4, 226, 109, 11, - 133, 4, 224, 99, 11, 133, 4, 153, 11, 133, 4, 222, 93, 11, 133, 4, 217, - 153, 11, 133, 4, 69, 11, 133, 4, 214, 105, 11, 133, 4, 212, 98, 11, 133, - 4, 211, 178, 11, 133, 4, 211, 117, 11, 133, 4, 210, 159, 11, 139, 6, 61, - 11, 139, 6, 253, 166, 11, 139, 6, 249, 68, 11, 139, 6, 76, 11, 139, 6, - 245, 14, 11, 139, 6, 243, 209, 11, 139, 6, 74, 11, 139, 6, 235, 150, 11, - 139, 6, 235, 29, 11, 139, 6, 156, 11, 139, 6, 194, 11, 139, 6, 78, 11, - 139, 6, 222, 93, 11, 139, 6, 217, 153, 11, 139, 6, 69, 11, 139, 6, 214, - 105, 11, 139, 6, 212, 98, 11, 139, 6, 211, 178, 11, 139, 6, 211, 117, 11, - 139, 4, 61, 11, 139, 4, 253, 166, 11, 139, 4, 251, 74, 11, 139, 4, 249, - 68, 11, 139, 4, 76, 11, 139, 4, 245, 14, 11, 139, 4, 243, 209, 11, 139, - 4, 242, 67, 11, 139, 4, 74, 11, 139, 4, 235, 150, 11, 139, 4, 235, 29, - 11, 139, 4, 156, 11, 139, 4, 194, 11, 139, 4, 230, 30, 11, 139, 4, 78, - 11, 139, 4, 226, 109, 11, 139, 4, 224, 99, 11, 139, 4, 153, 11, 139, 4, - 222, 93, 11, 139, 4, 217, 153, 11, 139, 4, 69, 11, 139, 4, 214, 105, 11, - 139, 4, 212, 98, 11, 139, 4, 211, 178, 11, 139, 4, 211, 117, 11, 139, 4, - 210, 159, 11, 23, 133, 6, 61, 11, 23, 133, 6, 253, 166, 11, 23, 133, 6, - 251, 74, 11, 23, 133, 6, 249, 68, 11, 23, 133, 6, 76, 11, 23, 133, 6, - 245, 14, 11, 23, 133, 6, 243, 209, 11, 23, 133, 6, 242, 67, 11, 23, 133, - 6, 74, 11, 23, 133, 6, 235, 150, 11, 23, 133, 6, 235, 29, 11, 23, 133, 6, - 156, 11, 23, 133, 6, 194, 11, 23, 133, 6, 230, 30, 11, 23, 133, 6, 78, - 11, 23, 133, 6, 226, 109, 11, 23, 133, 6, 224, 99, 11, 23, 133, 6, 153, - 11, 23, 133, 6, 222, 93, 11, 23, 133, 6, 217, 153, 11, 23, 133, 6, 69, - 11, 23, 133, 6, 214, 105, 11, 23, 133, 6, 212, 98, 11, 23, 133, 6, 211, - 178, 11, 23, 133, 6, 211, 117, 11, 23, 133, 6, 210, 159, 11, 23, 133, 4, - 61, 11, 23, 133, 4, 253, 166, 11, 23, 133, 4, 251, 74, 11, 23, 133, 4, - 249, 68, 11, 23, 133, 4, 76, 11, 23, 133, 4, 245, 14, 11, 23, 133, 4, - 243, 209, 11, 23, 133, 4, 242, 67, 11, 23, 133, 4, 74, 11, 23, 133, 4, - 235, 150, 11, 23, 133, 4, 235, 29, 11, 23, 133, 4, 156, 11, 23, 133, 4, - 194, 11, 23, 133, 4, 230, 30, 11, 23, 133, 4, 78, 11, 23, 133, 4, 226, - 109, 11, 23, 133, 4, 224, 99, 11, 23, 133, 4, 153, 11, 23, 133, 4, 222, - 93, 11, 23, 133, 4, 217, 153, 11, 23, 133, 4, 69, 11, 23, 133, 4, 214, - 105, 11, 23, 133, 4, 212, 98, 11, 23, 133, 4, 211, 178, 11, 23, 133, 4, - 211, 117, 11, 23, 133, 4, 210, 159, 11, 35, 6, 61, 11, 35, 6, 253, 166, - 11, 35, 6, 251, 74, 11, 35, 6, 249, 68, 11, 35, 6, 76, 11, 35, 6, 245, - 14, 11, 35, 6, 243, 209, 11, 35, 6, 242, 67, 11, 35, 6, 74, 11, 35, 6, - 235, 150, 11, 35, 6, 235, 29, 11, 35, 6, 156, 11, 35, 6, 194, 11, 35, 6, - 230, 30, 11, 35, 6, 78, 11, 35, 6, 226, 109, 11, 35, 6, 224, 99, 11, 35, - 6, 153, 11, 35, 6, 222, 93, 11, 35, 6, 217, 153, 11, 35, 6, 69, 11, 35, - 6, 214, 105, 11, 35, 6, 212, 98, 11, 35, 6, 211, 178, 11, 35, 6, 211, - 117, 11, 35, 6, 210, 159, 11, 35, 4, 61, 11, 35, 4, 253, 166, 11, 35, 4, - 251, 74, 11, 35, 4, 249, 68, 11, 35, 4, 76, 11, 35, 4, 245, 14, 11, 35, - 4, 243, 209, 11, 35, 4, 242, 67, 11, 35, 4, 74, 11, 35, 4, 235, 150, 11, - 35, 4, 235, 29, 11, 35, 4, 156, 11, 35, 4, 194, 11, 35, 4, 230, 30, 11, - 35, 4, 78, 11, 35, 4, 226, 109, 11, 35, 4, 224, 99, 11, 35, 4, 153, 11, - 35, 4, 222, 93, 11, 35, 4, 217, 153, 11, 35, 4, 69, 11, 35, 4, 214, 105, - 11, 35, 4, 212, 98, 11, 35, 4, 211, 178, 11, 35, 4, 211, 117, 11, 35, 4, - 210, 159, 11, 35, 23, 6, 61, 11, 35, 23, 6, 253, 166, 11, 35, 23, 6, 251, - 74, 11, 35, 23, 6, 249, 68, 11, 35, 23, 6, 76, 11, 35, 23, 6, 245, 14, - 11, 35, 23, 6, 243, 209, 11, 35, 23, 6, 242, 67, 11, 35, 23, 6, 74, 11, - 35, 23, 6, 235, 150, 11, 35, 23, 6, 235, 29, 11, 35, 23, 6, 156, 11, 35, - 23, 6, 194, 11, 35, 23, 6, 230, 30, 11, 35, 23, 6, 78, 11, 35, 23, 6, - 226, 109, 11, 35, 23, 6, 224, 99, 11, 35, 23, 6, 153, 11, 35, 23, 6, 222, - 93, 11, 35, 23, 6, 217, 153, 11, 35, 23, 6, 69, 11, 35, 23, 6, 214, 105, - 11, 35, 23, 6, 212, 98, 11, 35, 23, 6, 211, 178, 11, 35, 23, 6, 211, 117, - 11, 35, 23, 6, 210, 159, 11, 35, 23, 4, 61, 11, 35, 23, 4, 253, 166, 11, - 35, 23, 4, 251, 74, 11, 35, 23, 4, 249, 68, 11, 35, 23, 4, 76, 11, 35, - 23, 4, 245, 14, 11, 35, 23, 4, 243, 209, 11, 35, 23, 4, 242, 67, 11, 35, - 23, 4, 74, 11, 35, 23, 4, 235, 150, 11, 35, 23, 4, 235, 29, 11, 35, 23, - 4, 156, 11, 35, 23, 4, 194, 11, 35, 23, 4, 230, 30, 11, 35, 23, 4, 78, - 11, 35, 23, 4, 226, 109, 11, 35, 23, 4, 224, 99, 11, 35, 23, 4, 153, 11, - 35, 23, 4, 222, 93, 11, 35, 23, 4, 217, 153, 11, 35, 23, 4, 69, 11, 35, - 23, 4, 214, 105, 11, 35, 23, 4, 212, 98, 11, 35, 23, 4, 211, 178, 11, 35, - 23, 4, 211, 117, 11, 35, 23, 4, 210, 159, 11, 35, 32, 6, 61, 11, 35, 32, - 6, 253, 166, 11, 35, 32, 6, 251, 74, 11, 35, 32, 6, 249, 68, 11, 35, 32, - 6, 76, 11, 35, 32, 6, 245, 14, 11, 35, 32, 6, 243, 209, 11, 35, 32, 6, - 242, 67, 11, 35, 32, 6, 74, 11, 35, 32, 6, 235, 150, 11, 35, 32, 6, 235, - 29, 11, 35, 32, 6, 156, 11, 35, 32, 6, 194, 11, 35, 32, 6, 230, 30, 11, - 35, 32, 6, 78, 11, 35, 32, 6, 226, 109, 11, 35, 32, 6, 224, 99, 11, 35, - 32, 6, 153, 11, 35, 32, 6, 222, 93, 11, 35, 32, 6, 217, 153, 11, 35, 32, - 6, 69, 11, 35, 32, 6, 214, 105, 11, 35, 32, 6, 212, 98, 11, 35, 32, 6, - 211, 178, 11, 35, 32, 6, 211, 117, 11, 35, 32, 6, 210, 159, 11, 35, 32, - 4, 61, 11, 35, 32, 4, 253, 166, 11, 35, 32, 4, 251, 74, 11, 35, 32, 4, - 249, 68, 11, 35, 32, 4, 76, 11, 35, 32, 4, 245, 14, 11, 35, 32, 4, 243, - 209, 11, 35, 32, 4, 242, 67, 11, 35, 32, 4, 74, 11, 35, 32, 4, 235, 150, - 11, 35, 32, 4, 235, 29, 11, 35, 32, 4, 156, 11, 35, 32, 4, 194, 11, 35, - 32, 4, 230, 30, 11, 35, 32, 4, 78, 11, 35, 32, 4, 226, 109, 11, 35, 32, - 4, 224, 99, 11, 35, 32, 4, 153, 11, 35, 32, 4, 222, 93, 11, 35, 32, 4, - 217, 153, 11, 35, 32, 4, 69, 11, 35, 32, 4, 214, 105, 11, 35, 32, 4, 212, - 98, 11, 35, 32, 4, 211, 178, 11, 35, 32, 4, 211, 117, 11, 35, 32, 4, 210, - 159, 11, 35, 23, 32, 6, 61, 11, 35, 23, 32, 6, 253, 166, 11, 35, 23, 32, - 6, 251, 74, 11, 35, 23, 32, 6, 249, 68, 11, 35, 23, 32, 6, 76, 11, 35, - 23, 32, 6, 245, 14, 11, 35, 23, 32, 6, 243, 209, 11, 35, 23, 32, 6, 242, - 67, 11, 35, 23, 32, 6, 74, 11, 35, 23, 32, 6, 235, 150, 11, 35, 23, 32, - 6, 235, 29, 11, 35, 23, 32, 6, 156, 11, 35, 23, 32, 6, 194, 11, 35, 23, - 32, 6, 230, 30, 11, 35, 23, 32, 6, 78, 11, 35, 23, 32, 6, 226, 109, 11, - 35, 23, 32, 6, 224, 99, 11, 35, 23, 32, 6, 153, 11, 35, 23, 32, 6, 222, - 93, 11, 35, 23, 32, 6, 217, 153, 11, 35, 23, 32, 6, 69, 11, 35, 23, 32, - 6, 214, 105, 11, 35, 23, 32, 6, 212, 98, 11, 35, 23, 32, 6, 211, 178, 11, - 35, 23, 32, 6, 211, 117, 11, 35, 23, 32, 6, 210, 159, 11, 35, 23, 32, 4, - 61, 11, 35, 23, 32, 4, 253, 166, 11, 35, 23, 32, 4, 251, 74, 11, 35, 23, - 32, 4, 249, 68, 11, 35, 23, 32, 4, 76, 11, 35, 23, 32, 4, 245, 14, 11, - 35, 23, 32, 4, 243, 209, 11, 35, 23, 32, 4, 242, 67, 11, 35, 23, 32, 4, - 74, 11, 35, 23, 32, 4, 235, 150, 11, 35, 23, 32, 4, 235, 29, 11, 35, 23, - 32, 4, 156, 11, 35, 23, 32, 4, 194, 11, 35, 23, 32, 4, 230, 30, 11, 35, - 23, 32, 4, 78, 11, 35, 23, 32, 4, 226, 109, 11, 35, 23, 32, 4, 224, 99, - 11, 35, 23, 32, 4, 153, 11, 35, 23, 32, 4, 222, 93, 11, 35, 23, 32, 4, - 217, 153, 11, 35, 23, 32, 4, 69, 11, 35, 23, 32, 4, 214, 105, 11, 35, 23, - 32, 4, 212, 98, 11, 35, 23, 32, 4, 211, 178, 11, 35, 23, 32, 4, 211, 117, - 11, 35, 23, 32, 4, 210, 159, 11, 230, 143, 6, 61, 11, 230, 143, 6, 253, - 166, 11, 230, 143, 6, 251, 74, 11, 230, 143, 6, 249, 68, 11, 230, 143, 6, - 76, 11, 230, 143, 6, 245, 14, 11, 230, 143, 6, 243, 209, 11, 230, 143, 6, - 242, 67, 11, 230, 143, 6, 74, 11, 230, 143, 6, 235, 150, 11, 230, 143, 6, - 235, 29, 11, 230, 143, 6, 156, 11, 230, 143, 6, 194, 11, 230, 143, 6, - 230, 30, 11, 230, 143, 6, 78, 11, 230, 143, 6, 226, 109, 11, 230, 143, 6, - 224, 99, 11, 230, 143, 6, 153, 11, 230, 143, 6, 222, 93, 11, 230, 143, 6, - 217, 153, 11, 230, 143, 6, 69, 11, 230, 143, 6, 214, 105, 11, 230, 143, - 6, 212, 98, 11, 230, 143, 6, 211, 178, 11, 230, 143, 6, 211, 117, 11, - 230, 143, 6, 210, 159, 11, 230, 143, 4, 61, 11, 230, 143, 4, 253, 166, - 11, 230, 143, 4, 251, 74, 11, 230, 143, 4, 249, 68, 11, 230, 143, 4, 76, - 11, 230, 143, 4, 245, 14, 11, 230, 143, 4, 243, 209, 11, 230, 143, 4, - 242, 67, 11, 230, 143, 4, 74, 11, 230, 143, 4, 235, 150, 11, 230, 143, 4, - 235, 29, 11, 230, 143, 4, 156, 11, 230, 143, 4, 194, 11, 230, 143, 4, - 230, 30, 11, 230, 143, 4, 78, 11, 230, 143, 4, 226, 109, 11, 230, 143, 4, - 224, 99, 11, 230, 143, 4, 153, 11, 230, 143, 4, 222, 93, 11, 230, 143, 4, - 217, 153, 11, 230, 143, 4, 69, 11, 230, 143, 4, 214, 105, 11, 230, 143, - 4, 212, 98, 11, 230, 143, 4, 211, 178, 11, 230, 143, 4, 211, 117, 11, - 230, 143, 4, 210, 159, 11, 32, 4, 247, 127, 74, 11, 32, 4, 247, 127, 235, - 150, 11, 23, 6, 254, 151, 11, 23, 6, 252, 34, 11, 23, 6, 243, 114, 11, - 23, 6, 248, 62, 11, 23, 6, 245, 108, 11, 23, 6, 210, 85, 11, 23, 6, 245, - 71, 11, 23, 6, 216, 180, 11, 23, 6, 235, 192, 11, 23, 6, 234, 228, 11, - 23, 6, 233, 104, 11, 23, 6, 230, 107, 11, 23, 6, 227, 242, 11, 23, 6, - 211, 157, 11, 23, 6, 226, 203, 11, 23, 6, 225, 111, 11, 23, 6, 223, 40, - 11, 23, 6, 216, 181, 87, 11, 23, 6, 219, 179, 11, 23, 6, 217, 42, 11, 23, - 6, 214, 157, 11, 23, 6, 225, 136, 11, 23, 6, 250, 118, 11, 23, 6, 224, - 164, 11, 23, 6, 226, 205, 11, 23, 229, 226, 11, 23, 4, 254, 151, 11, 23, - 4, 252, 34, 11, 23, 4, 243, 114, 11, 23, 4, 248, 62, 11, 23, 4, 245, 108, - 11, 23, 4, 210, 85, 11, 23, 4, 245, 71, 11, 23, 4, 216, 180, 11, 23, 4, - 235, 192, 11, 23, 4, 234, 228, 11, 23, 4, 233, 104, 11, 23, 4, 230, 107, - 11, 23, 4, 227, 242, 11, 23, 4, 211, 157, 11, 23, 4, 226, 203, 11, 23, 4, - 225, 111, 11, 23, 4, 223, 40, 11, 23, 4, 40, 219, 179, 11, 23, 4, 219, - 179, 11, 23, 4, 217, 42, 11, 23, 4, 214, 157, 11, 23, 4, 225, 136, 11, - 23, 4, 250, 118, 11, 23, 4, 224, 164, 11, 23, 4, 226, 205, 11, 23, 226, - 1, 247, 241, 11, 23, 245, 109, 87, 11, 23, 216, 181, 87, 11, 23, 234, - 229, 87, 11, 23, 225, 137, 87, 11, 23, 223, 41, 87, 11, 23, 225, 112, 87, - 11, 32, 6, 254, 151, 11, 32, 6, 252, 34, 11, 32, 6, 243, 114, 11, 32, 6, - 248, 62, 11, 32, 6, 245, 108, 11, 32, 6, 210, 85, 11, 32, 6, 245, 71, 11, - 32, 6, 216, 180, 11, 32, 6, 235, 192, 11, 32, 6, 234, 228, 11, 32, 6, - 233, 104, 11, 32, 6, 230, 107, 11, 32, 6, 227, 242, 11, 32, 6, 211, 157, - 11, 32, 6, 226, 203, 11, 32, 6, 225, 111, 11, 32, 6, 223, 40, 11, 32, 6, - 216, 181, 87, 11, 32, 6, 219, 179, 11, 32, 6, 217, 42, 11, 32, 6, 214, - 157, 11, 32, 6, 225, 136, 11, 32, 6, 250, 118, 11, 32, 6, 224, 164, 11, - 32, 6, 226, 205, 11, 32, 229, 226, 11, 32, 4, 254, 151, 11, 32, 4, 252, - 34, 11, 32, 4, 243, 114, 11, 32, 4, 248, 62, 11, 32, 4, 245, 108, 11, 32, - 4, 210, 85, 11, 32, 4, 245, 71, 11, 32, 4, 216, 180, 11, 32, 4, 235, 192, - 11, 32, 4, 234, 228, 11, 32, 4, 233, 104, 11, 32, 4, 230, 107, 11, 32, 4, - 227, 242, 11, 32, 4, 211, 157, 11, 32, 4, 226, 203, 11, 32, 4, 225, 111, - 11, 32, 4, 223, 40, 11, 32, 4, 40, 219, 179, 11, 32, 4, 219, 179, 11, 32, - 4, 217, 42, 11, 32, 4, 214, 157, 11, 32, 4, 225, 136, 11, 32, 4, 250, - 118, 11, 32, 4, 224, 164, 11, 32, 4, 226, 205, 11, 32, 226, 1, 247, 241, - 11, 32, 245, 109, 87, 11, 32, 216, 181, 87, 11, 32, 234, 229, 87, 11, 32, - 225, 137, 87, 11, 32, 223, 41, 87, 11, 32, 225, 112, 87, 11, 23, 32, 6, - 254, 151, 11, 23, 32, 6, 252, 34, 11, 23, 32, 6, 243, 114, 11, 23, 32, 6, - 248, 62, 11, 23, 32, 6, 245, 108, 11, 23, 32, 6, 210, 85, 11, 23, 32, 6, - 245, 71, 11, 23, 32, 6, 216, 180, 11, 23, 32, 6, 235, 192, 11, 23, 32, 6, - 234, 228, 11, 23, 32, 6, 233, 104, 11, 23, 32, 6, 230, 107, 11, 23, 32, - 6, 227, 242, 11, 23, 32, 6, 211, 157, 11, 23, 32, 6, 226, 203, 11, 23, - 32, 6, 225, 111, 11, 23, 32, 6, 223, 40, 11, 23, 32, 6, 216, 181, 87, 11, - 23, 32, 6, 219, 179, 11, 23, 32, 6, 217, 42, 11, 23, 32, 6, 214, 157, 11, - 23, 32, 6, 225, 136, 11, 23, 32, 6, 250, 118, 11, 23, 32, 6, 224, 164, - 11, 23, 32, 6, 226, 205, 11, 23, 32, 229, 226, 11, 23, 32, 4, 254, 151, - 11, 23, 32, 4, 252, 34, 11, 23, 32, 4, 243, 114, 11, 23, 32, 4, 248, 62, - 11, 23, 32, 4, 245, 108, 11, 23, 32, 4, 210, 85, 11, 23, 32, 4, 245, 71, - 11, 23, 32, 4, 216, 180, 11, 23, 32, 4, 235, 192, 11, 23, 32, 4, 234, - 228, 11, 23, 32, 4, 233, 104, 11, 23, 32, 4, 230, 107, 11, 23, 32, 4, - 227, 242, 11, 23, 32, 4, 211, 157, 11, 23, 32, 4, 226, 203, 11, 23, 32, - 4, 225, 111, 11, 23, 32, 4, 223, 40, 11, 23, 32, 4, 40, 219, 179, 11, 23, - 32, 4, 219, 179, 11, 23, 32, 4, 217, 42, 11, 23, 32, 4, 214, 157, 11, 23, - 32, 4, 225, 136, 11, 23, 32, 4, 250, 118, 11, 23, 32, 4, 224, 164, 11, - 23, 32, 4, 226, 205, 11, 23, 32, 226, 1, 247, 241, 11, 23, 32, 245, 109, - 87, 11, 23, 32, 216, 181, 87, 11, 23, 32, 234, 229, 87, 11, 23, 32, 225, - 137, 87, 11, 23, 32, 223, 41, 87, 11, 23, 32, 225, 112, 87, 11, 35, 23, - 6, 254, 151, 11, 35, 23, 6, 252, 34, 11, 35, 23, 6, 243, 114, 11, 35, 23, - 6, 248, 62, 11, 35, 23, 6, 245, 108, 11, 35, 23, 6, 210, 85, 11, 35, 23, - 6, 245, 71, 11, 35, 23, 6, 216, 180, 11, 35, 23, 6, 235, 192, 11, 35, 23, - 6, 234, 228, 11, 35, 23, 6, 233, 104, 11, 35, 23, 6, 230, 107, 11, 35, - 23, 6, 227, 242, 11, 35, 23, 6, 211, 157, 11, 35, 23, 6, 226, 203, 11, - 35, 23, 6, 225, 111, 11, 35, 23, 6, 223, 40, 11, 35, 23, 6, 216, 181, 87, - 11, 35, 23, 6, 219, 179, 11, 35, 23, 6, 217, 42, 11, 35, 23, 6, 214, 157, - 11, 35, 23, 6, 225, 136, 11, 35, 23, 6, 250, 118, 11, 35, 23, 6, 224, - 164, 11, 35, 23, 6, 226, 205, 11, 35, 23, 229, 226, 11, 35, 23, 4, 254, - 151, 11, 35, 23, 4, 252, 34, 11, 35, 23, 4, 243, 114, 11, 35, 23, 4, 248, - 62, 11, 35, 23, 4, 245, 108, 11, 35, 23, 4, 210, 85, 11, 35, 23, 4, 245, - 71, 11, 35, 23, 4, 216, 180, 11, 35, 23, 4, 235, 192, 11, 35, 23, 4, 234, - 228, 11, 35, 23, 4, 233, 104, 11, 35, 23, 4, 230, 107, 11, 35, 23, 4, - 227, 242, 11, 35, 23, 4, 211, 157, 11, 35, 23, 4, 226, 203, 11, 35, 23, - 4, 225, 111, 11, 35, 23, 4, 223, 40, 11, 35, 23, 4, 40, 219, 179, 11, 35, - 23, 4, 219, 179, 11, 35, 23, 4, 217, 42, 11, 35, 23, 4, 214, 157, 11, 35, - 23, 4, 225, 136, 11, 35, 23, 4, 250, 118, 11, 35, 23, 4, 224, 164, 11, - 35, 23, 4, 226, 205, 11, 35, 23, 226, 1, 247, 241, 11, 35, 23, 245, 109, - 87, 11, 35, 23, 216, 181, 87, 11, 35, 23, 234, 229, 87, 11, 35, 23, 225, - 137, 87, 11, 35, 23, 223, 41, 87, 11, 35, 23, 225, 112, 87, 11, 35, 23, - 32, 6, 254, 151, 11, 35, 23, 32, 6, 252, 34, 11, 35, 23, 32, 6, 243, 114, - 11, 35, 23, 32, 6, 248, 62, 11, 35, 23, 32, 6, 245, 108, 11, 35, 23, 32, - 6, 210, 85, 11, 35, 23, 32, 6, 245, 71, 11, 35, 23, 32, 6, 216, 180, 11, - 35, 23, 32, 6, 235, 192, 11, 35, 23, 32, 6, 234, 228, 11, 35, 23, 32, 6, - 233, 104, 11, 35, 23, 32, 6, 230, 107, 11, 35, 23, 32, 6, 227, 242, 11, - 35, 23, 32, 6, 211, 157, 11, 35, 23, 32, 6, 226, 203, 11, 35, 23, 32, 6, - 225, 111, 11, 35, 23, 32, 6, 223, 40, 11, 35, 23, 32, 6, 216, 181, 87, - 11, 35, 23, 32, 6, 219, 179, 11, 35, 23, 32, 6, 217, 42, 11, 35, 23, 32, - 6, 214, 157, 11, 35, 23, 32, 6, 225, 136, 11, 35, 23, 32, 6, 250, 118, - 11, 35, 23, 32, 6, 224, 164, 11, 35, 23, 32, 6, 226, 205, 11, 35, 23, 32, - 229, 226, 11, 35, 23, 32, 4, 254, 151, 11, 35, 23, 32, 4, 252, 34, 11, - 35, 23, 32, 4, 243, 114, 11, 35, 23, 32, 4, 248, 62, 11, 35, 23, 32, 4, - 245, 108, 11, 35, 23, 32, 4, 210, 85, 11, 35, 23, 32, 4, 245, 71, 11, 35, - 23, 32, 4, 216, 180, 11, 35, 23, 32, 4, 235, 192, 11, 35, 23, 32, 4, 234, - 228, 11, 35, 23, 32, 4, 233, 104, 11, 35, 23, 32, 4, 230, 107, 11, 35, - 23, 32, 4, 227, 242, 11, 35, 23, 32, 4, 211, 157, 11, 35, 23, 32, 4, 226, - 203, 11, 35, 23, 32, 4, 225, 111, 11, 35, 23, 32, 4, 223, 40, 11, 35, 23, - 32, 4, 40, 219, 179, 11, 35, 23, 32, 4, 219, 179, 11, 35, 23, 32, 4, 217, - 42, 11, 35, 23, 32, 4, 214, 157, 11, 35, 23, 32, 4, 225, 136, 11, 35, 23, - 32, 4, 250, 118, 11, 35, 23, 32, 4, 224, 164, 11, 35, 23, 32, 4, 226, - 205, 11, 35, 23, 32, 226, 1, 247, 241, 11, 35, 23, 32, 245, 109, 87, 11, - 35, 23, 32, 216, 181, 87, 11, 35, 23, 32, 234, 229, 87, 11, 35, 23, 32, - 225, 137, 87, 11, 35, 23, 32, 223, 41, 87, 11, 35, 23, 32, 225, 112, 87, - 11, 23, 6, 247, 235, 11, 23, 4, 247, 235, 11, 23, 21, 210, 86, 11, 23, - 21, 111, 11, 23, 21, 105, 11, 23, 21, 158, 11, 23, 21, 161, 11, 23, 21, - 190, 11, 23, 21, 195, 11, 23, 21, 199, 11, 23, 21, 196, 11, 23, 21, 201, - 11, 139, 21, 210, 86, 11, 139, 21, 111, 11, 139, 21, 105, 11, 139, 21, - 158, 11, 139, 21, 161, 11, 139, 21, 190, 11, 139, 21, 195, 11, 139, 21, - 199, 11, 139, 21, 196, 11, 139, 21, 201, 11, 35, 21, 210, 86, 11, 35, 21, - 111, 11, 35, 21, 105, 11, 35, 21, 158, 11, 35, 21, 161, 11, 35, 21, 190, - 11, 35, 21, 195, 11, 35, 21, 199, 11, 35, 21, 196, 11, 35, 21, 201, 11, - 35, 23, 21, 210, 86, 11, 35, 23, 21, 111, 11, 35, 23, 21, 105, 11, 35, - 23, 21, 158, 11, 35, 23, 21, 161, 11, 35, 23, 21, 190, 11, 35, 23, 21, - 195, 11, 35, 23, 21, 199, 11, 35, 23, 21, 196, 11, 35, 23, 21, 201, 11, - 230, 143, 21, 210, 86, 11, 230, 143, 21, 111, 11, 230, 143, 21, 105, 11, - 230, 143, 21, 158, 11, 230, 143, 21, 161, 11, 230, 143, 21, 190, 11, 230, - 143, 21, 195, 11, 230, 143, 21, 199, 11, 230, 143, 21, 196, 11, 230, 143, - 21, 201, 9, 11, 254, 179, 9, 11, 252, 62, 9, 11, 235, 129, 9, 11, 248, - 203, 9, 11, 212, 30, 9, 11, 210, 108, 9, 11, 242, 44, 9, 11, 217, 81, 9, - 11, 211, 43, 9, 11, 235, 0, 9, 11, 233, 108, 9, 11, 231, 83, 9, 11, 228, - 67, 9, 11, 221, 168, 9, 11, 254, 205, 9, 11, 244, 150, 9, 11, 222, 28, 9, - 11, 224, 84, 9, 11, 223, 98, 9, 11, 220, 61, 9, 11, 217, 8, 9, 11, 216, - 193, 9, 11, 234, 135, 9, 11, 216, 203, 9, 11, 248, 224, 9, 11, 210, 111, - 9, 11, 242, 251, 9, 11, 247, 127, 252, 62, 9, 11, 247, 127, 228, 67, 9, - 11, 247, 127, 244, 150, 9, 11, 247, 127, 224, 84, 9, 11, 65, 252, 62, 9, - 11, 65, 235, 129, 9, 11, 65, 241, 225, 9, 11, 65, 242, 44, 9, 11, 65, - 211, 43, 9, 11, 65, 235, 0, 9, 11, 65, 233, 108, 9, 11, 65, 231, 83, 9, - 11, 65, 228, 67, 9, 11, 65, 221, 168, 9, 11, 65, 254, 205, 9, 11, 65, - 244, 150, 9, 11, 65, 222, 28, 9, 11, 65, 224, 84, 9, 11, 65, 220, 61, 9, - 11, 65, 217, 8, 9, 11, 65, 216, 193, 9, 11, 65, 234, 135, 9, 11, 65, 248, - 224, 9, 11, 65, 242, 251, 9, 11, 217, 77, 235, 129, 9, 11, 217, 77, 242, - 44, 9, 11, 217, 77, 211, 43, 9, 11, 217, 77, 233, 108, 9, 11, 217, 77, - 228, 67, 9, 11, 217, 77, 221, 168, 9, 11, 217, 77, 254, 205, 9, 11, 217, - 77, 222, 28, 9, 11, 217, 77, 224, 84, 9, 11, 217, 77, 220, 61, 9, 11, - 217, 77, 234, 135, 9, 11, 217, 77, 248, 224, 9, 11, 217, 77, 242, 251, 9, - 11, 217, 77, 247, 127, 228, 67, 9, 11, 217, 77, 247, 127, 224, 84, 9, 11, - 218, 112, 252, 62, 9, 11, 218, 112, 235, 129, 9, 11, 218, 112, 241, 225, - 9, 11, 218, 112, 242, 44, 9, 11, 218, 112, 217, 81, 9, 11, 218, 112, 211, - 43, 9, 11, 218, 112, 235, 0, 9, 11, 218, 112, 231, 83, 9, 11, 218, 112, - 228, 67, 9, 11, 218, 112, 221, 168, 9, 11, 218, 112, 254, 205, 9, 11, - 218, 112, 244, 150, 9, 11, 218, 112, 222, 28, 9, 11, 218, 112, 224, 84, - 9, 11, 218, 112, 220, 61, 9, 11, 218, 112, 217, 8, 9, 11, 218, 112, 216, - 193, 9, 11, 218, 112, 234, 135, 9, 11, 218, 112, 248, 224, 9, 11, 218, - 112, 210, 111, 9, 11, 218, 112, 242, 251, 9, 11, 218, 112, 247, 127, 252, - 62, 9, 11, 218, 112, 247, 127, 244, 150, 9, 11, 232, 128, 254, 179, 9, - 11, 232, 128, 252, 62, 9, 11, 232, 128, 235, 129, 9, 11, 232, 128, 248, - 203, 9, 11, 232, 128, 241, 225, 9, 11, 232, 128, 212, 30, 9, 11, 232, - 128, 210, 108, 9, 11, 232, 128, 242, 44, 9, 11, 232, 128, 217, 81, 9, 11, - 232, 128, 211, 43, 9, 11, 232, 128, 233, 108, 9, 11, 232, 128, 231, 83, - 9, 11, 232, 128, 228, 67, 9, 11, 232, 128, 221, 168, 9, 11, 232, 128, - 254, 205, 9, 11, 232, 128, 244, 150, 9, 11, 232, 128, 222, 28, 9, 11, - 232, 128, 224, 84, 9, 11, 232, 128, 223, 98, 9, 11, 232, 128, 220, 61, 9, - 11, 232, 128, 217, 8, 9, 11, 232, 128, 216, 193, 9, 11, 232, 128, 234, - 135, 9, 11, 232, 128, 216, 203, 9, 11, 232, 128, 248, 224, 9, 11, 232, - 128, 210, 111, 9, 11, 232, 128, 242, 251, 9, 11, 139, 252, 62, 9, 11, - 139, 235, 129, 9, 11, 139, 248, 203, 9, 11, 139, 212, 30, 9, 11, 139, - 210, 108, 9, 11, 139, 242, 44, 9, 11, 139, 217, 81, 9, 11, 139, 211, 43, - 9, 11, 139, 233, 108, 9, 11, 139, 231, 83, 9, 11, 139, 228, 67, 9, 11, - 139, 221, 168, 9, 11, 139, 254, 205, 9, 11, 139, 244, 150, 9, 11, 139, - 222, 28, 9, 11, 139, 224, 84, 9, 11, 139, 223, 98, 9, 11, 139, 220, 61, - 9, 11, 139, 217, 8, 9, 11, 139, 216, 193, 9, 11, 139, 234, 135, 9, 11, - 139, 216, 203, 9, 11, 139, 248, 224, 9, 11, 139, 210, 111, 9, 11, 139, - 242, 251, 9, 11, 226, 172, 66, 2, 122, 2, 217, 44, 9, 11, 226, 172, 122, - 2, 248, 203, 231, 210, 86, 245, 228, 211, 239, 231, 210, 86, 219, 30, - 211, 239, 231, 210, 86, 212, 9, 211, 239, 231, 210, 86, 228, 61, 211, - 239, 231, 210, 86, 223, 114, 246, 104, 231, 210, 86, 242, 134, 246, 104, - 231, 210, 86, 71, 246, 104, 231, 210, 86, 123, 64, 250, 149, 231, 210, - 86, 113, 64, 250, 149, 231, 210, 86, 134, 64, 250, 149, 231, 210, 86, - 244, 19, 64, 250, 149, 231, 210, 86, 244, 89, 64, 250, 149, 231, 210, 86, - 219, 127, 64, 250, 149, 231, 210, 86, 220, 124, 64, 250, 149, 231, 210, - 86, 245, 201, 64, 250, 149, 231, 210, 86, 228, 205, 64, 250, 149, 231, - 210, 86, 123, 64, 252, 161, 231, 210, 86, 113, 64, 252, 161, 231, 210, - 86, 134, 64, 252, 161, 231, 210, 86, 244, 19, 64, 252, 161, 231, 210, 86, - 244, 89, 64, 252, 161, 231, 210, 86, 219, 127, 64, 252, 161, 231, 210, - 86, 220, 124, 64, 252, 161, 231, 210, 86, 245, 201, 64, 252, 161, 231, - 210, 86, 228, 205, 64, 252, 161, 231, 210, 86, 123, 64, 250, 42, 231, - 210, 86, 113, 64, 250, 42, 231, 210, 86, 134, 64, 250, 42, 231, 210, 86, - 244, 19, 64, 250, 42, 231, 210, 86, 244, 89, 64, 250, 42, 231, 210, 86, - 219, 127, 64, 250, 42, 231, 210, 86, 220, 124, 64, 250, 42, 231, 210, 86, - 245, 201, 64, 250, 42, 231, 210, 86, 228, 205, 64, 250, 42, 231, 210, 86, - 225, 28, 231, 210, 86, 226, 160, 231, 210, 86, 252, 162, 231, 210, 86, - 250, 78, 231, 210, 86, 218, 241, 231, 210, 86, 218, 40, 231, 210, 86, - 253, 187, 231, 210, 86, 211, 232, 231, 210, 86, 235, 68, 231, 210, 86, - 252, 192, 131, 86, 203, 252, 192, 131, 86, 241, 50, 131, 86, 241, 49, - 131, 86, 241, 48, 131, 86, 241, 47, 131, 86, 241, 46, 131, 86, 241, 45, - 131, 86, 241, 44, 131, 86, 241, 43, 131, 86, 241, 42, 131, 86, 241, 41, - 131, 86, 241, 40, 131, 86, 241, 39, 131, 86, 241, 38, 131, 86, 241, 37, - 131, 86, 241, 36, 131, 86, 241, 35, 131, 86, 241, 34, 131, 86, 241, 33, - 131, 86, 241, 32, 131, 86, 241, 31, 131, 86, 241, 30, 131, 86, 241, 29, - 131, 86, 241, 28, 131, 86, 241, 27, 131, 86, 241, 26, 131, 86, 241, 25, - 131, 86, 241, 24, 131, 86, 241, 23, 131, 86, 241, 22, 131, 86, 241, 21, - 131, 86, 241, 20, 131, 86, 241, 19, 131, 86, 241, 18, 131, 86, 241, 17, - 131, 86, 241, 16, 131, 86, 241, 15, 131, 86, 241, 14, 131, 86, 241, 13, - 131, 86, 241, 12, 131, 86, 241, 11, 131, 86, 241, 10, 131, 86, 241, 9, - 131, 86, 241, 8, 131, 86, 241, 7, 131, 86, 241, 6, 131, 86, 241, 5, 131, - 86, 241, 4, 131, 86, 241, 3, 131, 86, 241, 2, 131, 86, 67, 252, 192, 131, - 86, 213, 238, 131, 86, 213, 237, 131, 86, 213, 236, 131, 86, 213, 235, - 131, 86, 213, 234, 131, 86, 213, 233, 131, 86, 213, 232, 131, 86, 213, - 231, 131, 86, 213, 230, 131, 86, 213, 229, 131, 86, 213, 228, 131, 86, - 213, 227, 131, 86, 213, 226, 131, 86, 213, 225, 131, 86, 213, 224, 131, - 86, 213, 223, 131, 86, 213, 222, 131, 86, 213, 221, 131, 86, 213, 220, - 131, 86, 213, 219, 131, 86, 213, 218, 131, 86, 213, 217, 131, 86, 213, - 216, 131, 86, 213, 215, 131, 86, 213, 214, 131, 86, 213, 213, 131, 86, - 213, 212, 131, 86, 213, 211, 131, 86, 213, 210, 131, 86, 213, 209, 131, - 86, 213, 208, 131, 86, 213, 207, 131, 86, 213, 206, 131, 86, 213, 205, - 131, 86, 213, 204, 131, 86, 213, 203, 131, 86, 213, 202, 131, 86, 213, - 201, 131, 86, 213, 200, 131, 86, 213, 199, 131, 86, 213, 198, 131, 86, - 213, 197, 131, 86, 213, 196, 131, 86, 213, 195, 131, 86, 213, 194, 131, - 86, 213, 193, 131, 86, 213, 192, 131, 86, 213, 191, 131, 86, 213, 190, - 225, 36, 250, 251, 252, 192, 225, 36, 250, 251, 255, 18, 64, 219, 17, - 225, 36, 250, 251, 113, 64, 219, 17, 225, 36, 250, 251, 134, 64, 219, 17, - 225, 36, 250, 251, 244, 19, 64, 219, 17, 225, 36, 250, 251, 244, 89, 64, - 219, 17, 225, 36, 250, 251, 219, 127, 64, 219, 17, 225, 36, 250, 251, - 220, 124, 64, 219, 17, 225, 36, 250, 251, 245, 201, 64, 219, 17, 225, 36, - 250, 251, 228, 205, 64, 219, 17, 225, 36, 250, 251, 216, 249, 64, 219, - 17, 225, 36, 250, 251, 235, 145, 64, 219, 17, 225, 36, 250, 251, 234, 37, - 64, 219, 17, 225, 36, 250, 251, 224, 18, 64, 219, 17, 225, 36, 250, 251, - 234, 85, 64, 219, 17, 225, 36, 250, 251, 255, 18, 64, 241, 232, 225, 36, - 250, 251, 113, 64, 241, 232, 225, 36, 250, 251, 134, 64, 241, 232, 225, - 36, 250, 251, 244, 19, 64, 241, 232, 225, 36, 250, 251, 244, 89, 64, 241, - 232, 225, 36, 250, 251, 219, 127, 64, 241, 232, 225, 36, 250, 251, 220, - 124, 64, 241, 232, 225, 36, 250, 251, 245, 201, 64, 241, 232, 225, 36, - 250, 251, 228, 205, 64, 241, 232, 225, 36, 250, 251, 216, 249, 64, 241, - 232, 225, 36, 250, 251, 235, 145, 64, 241, 232, 225, 36, 250, 251, 234, - 37, 64, 241, 232, 225, 36, 250, 251, 224, 18, 64, 241, 232, 225, 36, 250, - 251, 234, 85, 64, 241, 232, 225, 36, 250, 251, 255, 18, 64, 247, 255, - 225, 36, 250, 251, 113, 64, 247, 255, 225, 36, 250, 251, 134, 64, 247, - 255, 225, 36, 250, 251, 244, 19, 64, 247, 255, 225, 36, 250, 251, 244, - 89, 64, 247, 255, 225, 36, 250, 251, 219, 127, 64, 247, 255, 225, 36, - 250, 251, 220, 124, 64, 247, 255, 225, 36, 250, 251, 245, 201, 64, 247, - 255, 225, 36, 250, 251, 228, 205, 64, 247, 255, 225, 36, 250, 251, 216, - 249, 64, 247, 255, 225, 36, 250, 251, 235, 145, 64, 247, 255, 225, 36, - 250, 251, 234, 37, 64, 247, 255, 225, 36, 250, 251, 224, 18, 64, 247, - 255, 225, 36, 250, 251, 234, 85, 64, 247, 255, 225, 36, 250, 251, 85, - 235, 68, 225, 36, 250, 251, 255, 18, 64, 249, 250, 225, 36, 250, 251, - 113, 64, 249, 250, 225, 36, 250, 251, 134, 64, 249, 250, 225, 36, 250, - 251, 244, 19, 64, 249, 250, 225, 36, 250, 251, 244, 89, 64, 249, 250, - 225, 36, 250, 251, 219, 127, 64, 249, 250, 225, 36, 250, 251, 220, 124, - 64, 249, 250, 225, 36, 250, 251, 245, 201, 64, 249, 250, 225, 36, 250, - 251, 228, 205, 64, 249, 250, 225, 36, 250, 251, 216, 249, 64, 249, 250, - 225, 36, 250, 251, 235, 145, 64, 249, 250, 225, 36, 250, 251, 234, 37, - 64, 249, 250, 225, 36, 250, 251, 224, 18, 64, 249, 250, 225, 36, 250, - 251, 234, 85, 64, 249, 250, 225, 36, 250, 251, 71, 235, 68, 21, 210, 87, - 243, 236, 218, 131, 21, 210, 87, 249, 227, 21, 123, 249, 227, 21, 113, - 249, 227, 21, 134, 249, 227, 21, 244, 19, 249, 227, 21, 244, 89, 249, - 227, 21, 219, 127, 249, 227, 21, 220, 124, 249, 227, 21, 245, 201, 249, - 227, 21, 228, 205, 249, 227, 88, 7, 6, 1, 61, 88, 7, 6, 1, 253, 166, 88, - 7, 6, 1, 251, 74, 88, 7, 6, 1, 249, 68, 88, 7, 6, 1, 76, 88, 7, 6, 1, - 245, 14, 88, 7, 6, 1, 243, 209, 88, 7, 6, 1, 242, 67, 88, 7, 6, 1, 74, - 88, 7, 6, 1, 235, 150, 88, 7, 6, 1, 235, 29, 88, 7, 6, 1, 156, 88, 7, 6, - 1, 194, 88, 7, 6, 1, 230, 30, 88, 7, 6, 1, 78, 88, 7, 6, 1, 226, 109, 88, - 7, 6, 1, 224, 99, 88, 7, 6, 1, 153, 88, 7, 6, 1, 222, 93, 88, 7, 6, 1, - 217, 153, 88, 7, 6, 1, 69, 88, 7, 6, 1, 214, 105, 88, 7, 6, 1, 212, 98, - 88, 7, 6, 1, 211, 178, 88, 7, 6, 1, 211, 117, 88, 7, 6, 1, 210, 159, 216, - 7, 220, 55, 251, 165, 7, 6, 1, 222, 93, 37, 32, 7, 6, 1, 251, 74, 37, 32, - 7, 6, 1, 153, 37, 250, 199, 37, 211, 180, 92, 7, 6, 1, 61, 92, 7, 6, 1, - 253, 166, 92, 7, 6, 1, 251, 74, 92, 7, 6, 1, 249, 68, 92, 7, 6, 1, 76, - 92, 7, 6, 1, 245, 14, 92, 7, 6, 1, 243, 209, 92, 7, 6, 1, 242, 67, 92, 7, - 6, 1, 74, 92, 7, 6, 1, 235, 150, 92, 7, 6, 1, 235, 29, 92, 7, 6, 1, 156, - 92, 7, 6, 1, 194, 92, 7, 6, 1, 230, 30, 92, 7, 6, 1, 78, 92, 7, 6, 1, - 226, 109, 92, 7, 6, 1, 224, 99, 92, 7, 6, 1, 153, 92, 7, 6, 1, 222, 93, - 92, 7, 6, 1, 217, 153, 92, 7, 6, 1, 69, 92, 7, 6, 1, 214, 105, 92, 7, 6, - 1, 212, 98, 92, 7, 6, 1, 211, 178, 92, 7, 6, 1, 211, 117, 92, 7, 6, 1, - 210, 159, 92, 240, 208, 92, 230, 54, 92, 221, 185, 92, 218, 228, 92, 224, - 221, 92, 212, 23, 152, 37, 7, 6, 1, 61, 152, 37, 7, 6, 1, 253, 166, 152, - 37, 7, 6, 1, 251, 74, 152, 37, 7, 6, 1, 249, 68, 152, 37, 7, 6, 1, 76, - 152, 37, 7, 6, 1, 245, 14, 152, 37, 7, 6, 1, 243, 209, 152, 37, 7, 6, 1, - 242, 67, 152, 37, 7, 6, 1, 74, 152, 37, 7, 6, 1, 235, 150, 152, 37, 7, 6, - 1, 235, 29, 152, 37, 7, 6, 1, 156, 152, 37, 7, 6, 1, 194, 152, 37, 7, 6, - 1, 230, 30, 152, 37, 7, 6, 1, 78, 152, 37, 7, 6, 1, 226, 109, 152, 37, 7, - 6, 1, 224, 99, 152, 37, 7, 6, 1, 153, 152, 37, 7, 6, 1, 222, 93, 152, 37, - 7, 6, 1, 217, 153, 152, 37, 7, 6, 1, 69, 152, 37, 7, 6, 1, 214, 105, 152, - 37, 7, 6, 1, 212, 98, 152, 37, 7, 6, 1, 211, 178, 152, 37, 7, 6, 1, 211, - 117, 152, 37, 7, 6, 1, 210, 159, 223, 160, 231, 102, 50, 223, 160, 231, - 99, 50, 152, 92, 7, 6, 1, 61, 152, 92, 7, 6, 1, 253, 166, 152, 92, 7, 6, - 1, 251, 74, 152, 92, 7, 6, 1, 249, 68, 152, 92, 7, 6, 1, 76, 152, 92, 7, - 6, 1, 245, 14, 152, 92, 7, 6, 1, 243, 209, 152, 92, 7, 6, 1, 242, 67, - 152, 92, 7, 6, 1, 74, 152, 92, 7, 6, 1, 235, 150, 152, 92, 7, 6, 1, 235, - 29, 152, 92, 7, 6, 1, 156, 152, 92, 7, 6, 1, 194, 152, 92, 7, 6, 1, 230, - 30, 152, 92, 7, 6, 1, 78, 152, 92, 7, 6, 1, 226, 109, 152, 92, 7, 6, 1, - 224, 99, 152, 92, 7, 6, 1, 153, 152, 92, 7, 6, 1, 222, 93, 152, 92, 7, 6, - 1, 217, 153, 152, 92, 7, 6, 1, 69, 152, 92, 7, 6, 1, 214, 105, 152, 92, - 7, 6, 1, 212, 98, 152, 92, 7, 6, 1, 211, 178, 152, 92, 7, 6, 1, 211, 117, - 152, 92, 7, 6, 1, 210, 159, 249, 136, 152, 92, 7, 6, 1, 226, 109, 152, - 92, 240, 120, 152, 92, 191, 152, 92, 206, 152, 92, 255, 34, 152, 92, 212, - 23, 42, 247, 172, 92, 250, 31, 92, 249, 178, 92, 244, 4, 92, 240, 112, - 92, 229, 91, 92, 229, 84, 92, 226, 218, 92, 219, 37, 92, 120, 2, 245, 39, - 79, 92, 213, 119, 223, 106, 235, 246, 16, 1, 61, 223, 106, 235, 246, 16, - 1, 253, 166, 223, 106, 235, 246, 16, 1, 251, 74, 223, 106, 235, 246, 16, - 1, 249, 68, 223, 106, 235, 246, 16, 1, 76, 223, 106, 235, 246, 16, 1, - 245, 14, 223, 106, 235, 246, 16, 1, 243, 209, 223, 106, 235, 246, 16, 1, - 242, 67, 223, 106, 235, 246, 16, 1, 74, 223, 106, 235, 246, 16, 1, 235, - 150, 223, 106, 235, 246, 16, 1, 235, 29, 223, 106, 235, 246, 16, 1, 156, - 223, 106, 235, 246, 16, 1, 194, 223, 106, 235, 246, 16, 1, 230, 30, 223, - 106, 235, 246, 16, 1, 78, 223, 106, 235, 246, 16, 1, 226, 109, 223, 106, - 235, 246, 16, 1, 224, 99, 223, 106, 235, 246, 16, 1, 153, 223, 106, 235, - 246, 16, 1, 222, 93, 223, 106, 235, 246, 16, 1, 217, 153, 223, 106, 235, - 246, 16, 1, 69, 223, 106, 235, 246, 16, 1, 214, 105, 223, 106, 235, 246, - 16, 1, 212, 98, 223, 106, 235, 246, 16, 1, 211, 178, 223, 106, 235, 246, - 16, 1, 211, 117, 223, 106, 235, 246, 16, 1, 210, 159, 42, 141, 241, 70, - 92, 56, 234, 24, 92, 56, 206, 92, 10, 214, 177, 238, 57, 92, 10, 214, - 177, 238, 61, 92, 10, 214, 177, 238, 69, 92, 56, 248, 98, 92, 10, 214, - 177, 238, 76, 92, 10, 214, 177, 238, 63, 92, 10, 214, 177, 238, 35, 92, - 10, 214, 177, 238, 62, 92, 10, 214, 177, 238, 75, 92, 10, 214, 177, 238, - 49, 92, 10, 214, 177, 238, 42, 92, 10, 214, 177, 238, 51, 92, 10, 214, - 177, 238, 72, 92, 10, 214, 177, 238, 58, 92, 10, 214, 177, 238, 74, 92, - 10, 214, 177, 238, 50, 92, 10, 214, 177, 238, 73, 92, 10, 214, 177, 238, - 36, 92, 10, 214, 177, 238, 41, 92, 10, 214, 177, 238, 34, 92, 10, 214, - 177, 238, 64, 92, 10, 214, 177, 238, 66, 92, 10, 214, 177, 238, 44, 92, - 10, 214, 177, 238, 55, 92, 10, 214, 177, 238, 53, 92, 10, 214, 177, 238, - 79, 92, 10, 214, 177, 238, 78, 92, 10, 214, 177, 238, 32, 92, 10, 214, - 177, 238, 59, 92, 10, 214, 177, 238, 77, 92, 10, 214, 177, 238, 68, 92, - 10, 214, 177, 238, 54, 92, 10, 214, 177, 238, 33, 92, 10, 214, 177, 238, - 56, 92, 10, 214, 177, 238, 38, 92, 10, 214, 177, 238, 37, 92, 10, 214, - 177, 238, 67, 92, 10, 214, 177, 238, 45, 92, 10, 214, 177, 238, 47, 92, - 10, 214, 177, 238, 48, 92, 10, 214, 177, 238, 40, 92, 10, 214, 177, 238, - 71, 92, 10, 214, 177, 238, 65, 216, 7, 220, 55, 251, 165, 10, 214, 177, - 238, 46, 216, 7, 220, 55, 251, 165, 10, 214, 177, 238, 78, 216, 7, 220, - 55, 251, 165, 10, 214, 177, 238, 76, 216, 7, 220, 55, 251, 165, 10, 214, - 177, 238, 60, 216, 7, 220, 55, 251, 165, 10, 214, 177, 238, 43, 216, 7, - 220, 55, 251, 165, 10, 214, 177, 238, 56, 216, 7, 220, 55, 251, 165, 10, - 214, 177, 238, 39, 216, 7, 220, 55, 251, 165, 10, 214, 177, 238, 70, 216, - 7, 220, 55, 251, 165, 10, 214, 177, 238, 52, 37, 154, 254, 254, 37, 154, - 255, 21, 249, 79, 244, 50, 250, 8, 214, 194, 228, 218, 2, 218, 155, 218, - 34, 115, 230, 119, 218, 33, 250, 34, 253, 215, 246, 62, 218, 32, 115, - 251, 126, 223, 161, 251, 148, 253, 215, 228, 217, 212, 41, 212, 35, 213, - 131, 230, 200, 212, 25, 245, 232, 242, 188, 245, 53, 245, 232, 242, 188, - 254, 136, 245, 232, 242, 188, 253, 233, 242, 188, 2, 231, 56, 166, 230, - 134, 87, 212, 27, 249, 145, 230, 134, 87, 244, 100, 224, 25, 230, 134, - 87, 212, 27, 242, 217, 230, 134, 87, 243, 236, 230, 134, 87, 212, 52, - 242, 217, 230, 134, 87, 233, 86, 224, 25, 230, 134, 87, 212, 52, 249, - 145, 230, 134, 87, 249, 145, 230, 133, 166, 230, 134, 2, 244, 198, 244, - 100, 224, 25, 230, 134, 2, 244, 198, 233, 86, 224, 25, 230, 134, 2, 244, - 198, 243, 236, 230, 134, 2, 244, 198, 218, 39, 2, 244, 198, 242, 186, - 218, 158, 220, 1, 218, 158, 250, 124, 221, 170, 245, 47, 215, 236, 248, - 92, 215, 236, 226, 63, 215, 236, 251, 35, 215, 110, 250, 126, 251, 218, - 222, 193, 241, 186, 218, 37, 251, 218, 245, 236, 64, 231, 199, 245, 236, - 64, 223, 34, 241, 211, 244, 19, 233, 60, 249, 254, 231, 175, 233, 59, - 244, 184, 233, 59, 233, 60, 244, 55, 236, 7, 211, 239, 230, 63, 216, 35, - 253, 199, 242, 150, 231, 72, 212, 39, 217, 58, 233, 32, 252, 157, 225, - 65, 223, 114, 254, 62, 242, 134, 254, 62, 225, 220, 225, 221, 250, 127, - 218, 116, 242, 30, 219, 92, 64, 225, 47, 231, 92, 226, 201, 251, 202, - 224, 232, 233, 42, 223, 35, 249, 150, 223, 35, 252, 167, 249, 181, 223, - 34, 249, 103, 22, 223, 34, 218, 143, 251, 175, 219, 16, 251, 159, 244, 3, - 243, 255, 222, 209, 217, 247, 224, 234, 248, 183, 226, 240, 218, 8, 244, - 0, 219, 232, 244, 99, 251, 29, 2, 217, 240, 248, 43, 219, 54, 240, 119, - 249, 149, 220, 72, 240, 118, 240, 119, 249, 149, 246, 116, 249, 180, 250, - 92, 130, 251, 6, 232, 147, 249, 96, 241, 62, 224, 236, 219, 242, 252, 44, - 251, 171, 224, 237, 64, 244, 41, 249, 179, 244, 32, 22, 234, 38, 217, 20, - 211, 230, 242, 20, 222, 14, 251, 185, 22, 249, 110, 211, 237, 242, 191, - 249, 243, 242, 191, 215, 194, 246, 98, 252, 70, 230, 98, 250, 15, 252, - 70, 230, 97, 252, 195, 251, 184, 223, 36, 211, 201, 224, 198, 251, 243, - 251, 28, 235, 144, 250, 85, 215, 236, 244, 170, 250, 84, 244, 102, 244, - 103, 219, 14, 252, 166, 225, 254, 224, 247, 249, 212, 252, 167, 217, 60, - 215, 236, 249, 136, 244, 75, 225, 66, 248, 89, 235, 137, 247, 139, 250, - 240, 218, 115, 211, 240, 250, 106, 230, 134, 213, 164, 250, 170, 221, - 201, 221, 226, 242, 155, 251, 3, 250, 241, 240, 252, 244, 138, 212, 0, - 222, 202, 249, 244, 244, 94, 225, 5, 22, 244, 98, 230, 232, 230, 113, - 251, 18, 250, 47, 241, 239, 253, 249, 226, 66, 216, 15, 242, 2, 250, 37, - 216, 243, 216, 114, 250, 28, 251, 210, 225, 180, 253, 248, 213, 172, 243, - 117, 247, 205, 241, 163, 219, 86, 231, 239, 251, 253, 243, 118, 247, 248, - 251, 174, 244, 60, 225, 36, 250, 249, 28, 228, 52, 230, 90, 28, 228, 47, - 221, 214, 242, 106, 28, 234, 143, 215, 191, 213, 154, 28, 221, 194, 222, - 126, 220, 13, 2, 221, 229, 216, 245, 223, 181, 22, 252, 167, 219, 107, - 22, 219, 107, 251, 195, 252, 131, 22, 241, 56, 250, 128, 244, 81, 219, - 65, 222, 127, 218, 13, 215, 195, 240, 253, 223, 182, 254, 137, 244, 39, - 222, 138, 244, 39, 217, 242, 240, 242, 251, 127, 240, 242, 2, 243, 101, - 226, 233, 251, 127, 235, 137, 224, 242, 226, 232, 245, 52, 224, 242, 226, - 232, 240, 251, 252, 153, 253, 189, 216, 253, 231, 239, 240, 247, 232, - 117, 240, 247, 249, 184, 218, 127, 221, 200, 248, 51, 218, 127, 244, 188, - 235, 155, 233, 95, 235, 137, 250, 234, 245, 52, 250, 234, 223, 144, 230, - 117, 226, 118, 212, 41, 251, 131, 249, 153, 216, 107, 233, 24, 223, 183, - 250, 232, 246, 104, 249, 143, 212, 3, 219, 72, 219, 70, 240, 252, 223, - 156, 242, 177, 220, 59, 230, 150, 222, 196, 250, 116, 247, 144, 225, 76, - 251, 211, 245, 177, 226, 242, 218, 254, 220, 54, 251, 130, 254, 100, 241, - 61, 233, 127, 252, 68, 244, 98, 215, 194, 244, 98, 251, 217, 215, 91, - 242, 0, 250, 117, 252, 195, 250, 117, 243, 250, 252, 195, 250, 117, 251, - 245, 225, 198, 234, 32, 224, 251, 246, 95, 251, 19, 252, 185, 251, 19, - 247, 138, 230, 118, 244, 198, 249, 154, 244, 198, 216, 108, 244, 198, - 223, 184, 244, 198, 250, 233, 244, 198, 246, 105, 244, 198, 218, 243, - 212, 3, 240, 253, 244, 198, 230, 151, 244, 198, 247, 145, 244, 198, 225, - 77, 244, 198, 243, 253, 244, 198, 242, 27, 244, 198, 211, 224, 244, 198, - 252, 79, 244, 198, 226, 49, 244, 198, 225, 77, 228, 58, 225, 236, 224, - 189, 245, 21, 245, 235, 228, 58, 230, 115, 216, 20, 71, 120, 225, 10, - 252, 190, 235, 249, 71, 124, 225, 10, 252, 190, 235, 249, 71, 43, 225, - 10, 252, 190, 235, 249, 71, 44, 225, 10, 252, 190, 235, 249, 244, 92, - 242, 23, 50, 212, 33, 242, 23, 50, 226, 219, 242, 23, 50, 216, 136, 120, - 50, 216, 136, 124, 50, 250, 27, 242, 18, 50, 204, 242, 18, 50, 249, 131, - 211, 220, 242, 2, 245, 22, 229, 109, 217, 152, 235, 131, 246, 100, 234, - 88, 251, 255, 211, 220, 250, 1, 224, 130, 242, 21, 224, 233, 231, 182, - 220, 6, 253, 211, 220, 6, 241, 171, 220, 6, 211, 220, 221, 242, 211, 220, - 251, 194, 244, 37, 251, 98, 236, 7, 219, 171, 251, 97, 236, 7, 219, 171, - 251, 170, 242, 201, 231, 190, 211, 221, 244, 182, 231, 191, 22, 211, 222, - 241, 67, 242, 17, 113, 231, 64, 241, 67, 242, 17, 113, 211, 219, 241, 67, - 242, 17, 225, 2, 226, 231, 211, 222, 2, 251, 114, 245, 233, 251, 149, 2, - 213, 246, 225, 171, 2, 251, 220, 242, 41, 231, 191, 2, 242, 117, 225, - 112, 231, 179, 231, 191, 2, 215, 98, 226, 212, 231, 190, 226, 212, 211, - 221, 252, 194, 249, 198, 211, 205, 224, 192, 235, 137, 226, 227, 235, - 137, 242, 176, 242, 229, 252, 195, 254, 121, 245, 26, 254, 169, 254, 170, - 230, 141, 236, 12, 219, 102, 235, 239, 248, 42, 225, 170, 242, 112, 248, - 187, 232, 207, 229, 216, 225, 1, 244, 199, 231, 147, 242, 40, 252, 146, - 225, 4, 217, 172, 225, 69, 234, 70, 79, 232, 117, 233, 16, 222, 236, 243, - 61, 218, 133, 234, 69, 251, 179, 249, 156, 2, 241, 234, 212, 19, 252, 77, - 241, 234, 251, 143, 241, 234, 113, 241, 232, 219, 12, 241, 234, 242, 127, - 241, 234, 241, 235, 2, 75, 251, 216, 241, 234, 242, 134, 241, 234, 211, - 42, 241, 234, 224, 131, 241, 234, 241, 235, 2, 223, 36, 223, 47, 241, - 232, 241, 235, 248, 89, 248, 1, 220, 84, 2, 116, 59, 235, 222, 245, 180, - 193, 251, 124, 254, 120, 87, 251, 203, 219, 94, 87, 249, 236, 87, 218, - 248, 217, 249, 87, 246, 93, 248, 165, 87, 225, 70, 64, 224, 252, 244, 69, - 252, 11, 247, 173, 87, 219, 5, 252, 166, 216, 150, 252, 166, 71, 244, 59, - 240, 218, 225, 8, 87, 230, 154, 252, 180, 249, 106, 245, 40, 114, 247, - 140, 50, 249, 147, 250, 250, 252, 152, 2, 211, 40, 50, 252, 152, 2, 247, - 140, 50, 252, 152, 2, 245, 55, 50, 252, 152, 2, 224, 231, 50, 230, 154, - 2, 211, 235, 250, 146, 2, 214, 153, 215, 232, 22, 211, 40, 50, 221, 180, - 225, 169, 249, 216, 251, 147, 230, 191, 244, 64, 247, 193, 226, 165, 247, - 198, 246, 57, 244, 115, 244, 48, 204, 244, 115, 244, 48, 226, 80, 2, 249, - 108, 226, 80, 244, 191, 214, 163, 251, 24, 217, 19, 251, 24, 250, 251, - 235, 249, 250, 146, 2, 214, 153, 215, 231, 250, 146, 2, 246, 112, 215, - 231, 252, 149, 250, 145, 250, 14, 224, 126, 222, 187, 224, 126, 226, 23, - 218, 123, 222, 133, 215, 223, 222, 133, 251, 199, 217, 92, 233, 57, 228, - 50, 228, 51, 2, 248, 88, 249, 155, 250, 8, 251, 200, 204, 251, 200, 242, - 134, 251, 200, 251, 216, 251, 200, 226, 161, 251, 200, 251, 197, 229, - 210, 252, 183, 221, 188, 231, 65, 217, 2, 223, 126, 226, 78, 244, 167, - 231, 239, 221, 225, 254, 97, 224, 148, 255, 5, 232, 119, 250, 135, 231, - 77, 226, 133, 215, 239, 236, 3, 215, 239, 226, 86, 246, 32, 87, 236, 0, - 245, 127, 245, 128, 2, 246, 112, 80, 48, 250, 8, 231, 205, 2, 232, 113, - 244, 81, 250, 8, 231, 205, 2, 223, 160, 244, 81, 204, 231, 205, 2, 223, - 160, 244, 81, 204, 231, 205, 2, 232, 113, 244, 81, 224, 239, 224, 240, - 240, 255, 229, 89, 230, 164, 225, 120, 230, 164, 225, 121, 2, 97, 80, - 253, 215, 233, 52, 213, 175, 230, 163, 230, 164, 225, 121, 226, 234, 228, - 80, 230, 164, 225, 119, 254, 98, 2, 252, 137, 251, 18, 213, 172, 251, 18, - 216, 255, 223, 176, 213, 171, 215, 60, 97, 253, 255, 250, 10, 97, 22, - 140, 204, 250, 44, 253, 255, 250, 10, 97, 22, 140, 204, 250, 44, 254, 0, - 2, 37, 123, 226, 124, 250, 10, 246, 112, 22, 214, 153, 204, 250, 44, 253, - 255, 254, 96, 246, 112, 22, 214, 153, 204, 250, 44, 253, 255, 121, 251, - 146, 87, 125, 251, 146, 87, 219, 9, 2, 251, 12, 91, 219, 8, 219, 9, 2, - 123, 219, 33, 212, 35, 219, 9, 2, 134, 219, 33, 212, 34, 252, 123, 245, - 180, 225, 30, 233, 48, 231, 216, 242, 191, 222, 250, 231, 216, 242, 191, - 232, 158, 2, 235, 232, 225, 202, 250, 8, 232, 158, 2, 234, 144, 234, 144, - 232, 157, 204, 232, 157, 252, 52, 252, 53, 2, 251, 12, 91, 251, 198, 232, - 210, 87, 223, 177, 251, 94, 252, 193, 2, 140, 80, 48, 245, 151, 2, 140, - 80, 48, 226, 201, 2, 245, 39, 164, 2, 43, 44, 80, 48, 219, 41, 2, 97, 80, - 48, 216, 15, 2, 214, 153, 80, 48, 228, 80, 123, 214, 184, 245, 199, 87, - 234, 142, 216, 248, 235, 226, 16, 31, 7, 6, 233, 15, 235, 226, 16, 31, 7, - 4, 233, 15, 235, 226, 16, 31, 227, 203, 235, 226, 16, 31, 217, 184, 235, - 226, 16, 31, 7, 233, 15, 244, 104, 245, 180, 216, 10, 211, 199, 242, 28, - 227, 186, 22, 251, 205, 241, 73, 225, 53, 230, 231, 217, 0, 249, 122, - 252, 167, 219, 127, 225, 12, 218, 159, 2, 230, 229, 247, 128, 235, 137, - 16, 31, 252, 65, 215, 221, 245, 164, 85, 42, 251, 94, 71, 42, 251, 94, - 233, 91, 223, 114, 250, 43, 233, 91, 251, 216, 250, 43, 233, 91, 226, - 161, 248, 0, 233, 91, 251, 216, 248, 0, 4, 226, 161, 248, 0, 4, 251, 216, - 248, 0, 214, 162, 223, 114, 215, 226, 246, 113, 223, 114, 215, 226, 214, - 162, 4, 223, 114, 215, 226, 246, 113, 4, 223, 114, 215, 226, 37, 249, - 139, 224, 255, 249, 139, 225, 0, 2, 242, 33, 51, 249, 139, 224, 255, 228, - 54, 43, 220, 155, 2, 134, 247, 126, 250, 12, 244, 199, 123, 226, 246, - 250, 12, 244, 199, 113, 226, 246, 250, 12, 244, 199, 134, 226, 246, 250, - 12, 244, 199, 244, 19, 226, 246, 250, 12, 244, 199, 244, 89, 226, 246, - 250, 12, 244, 199, 219, 127, 226, 246, 250, 12, 244, 199, 220, 124, 226, - 246, 250, 12, 244, 199, 245, 201, 226, 246, 250, 12, 244, 199, 228, 205, - 226, 246, 250, 12, 244, 199, 216, 249, 226, 246, 250, 12, 244, 199, 245, - 176, 226, 246, 250, 12, 244, 199, 215, 77, 226, 246, 250, 12, 244, 199, - 226, 196, 250, 12, 244, 199, 215, 56, 250, 12, 244, 199, 216, 141, 250, - 12, 244, 199, 244, 15, 250, 12, 244, 199, 244, 87, 250, 12, 244, 199, - 219, 123, 250, 12, 244, 199, 220, 123, 250, 12, 244, 199, 245, 200, 250, - 12, 244, 199, 228, 204, 250, 12, 244, 199, 216, 247, 250, 12, 244, 199, - 245, 174, 250, 12, 244, 199, 215, 75, 230, 122, 243, 237, 216, 37, 216, - 3, 218, 150, 64, 232, 245, 219, 172, 64, 235, 138, 230, 111, 242, 131, - 244, 198, 242, 131, 244, 199, 2, 219, 76, 245, 21, 244, 199, 2, 217, 15, - 64, 235, 59, 219, 76, 244, 199, 2, 204, 230, 115, 219, 76, 244, 199, 2, - 204, 230, 116, 22, 219, 76, 245, 21, 219, 76, 244, 199, 2, 204, 230, 116, - 22, 249, 238, 217, 248, 219, 76, 244, 199, 2, 204, 230, 116, 22, 216, - 105, 245, 21, 219, 76, 244, 199, 2, 242, 32, 219, 76, 244, 199, 2, 240, - 254, 211, 233, 244, 198, 219, 76, 244, 199, 2, 219, 76, 245, 21, 244, - 199, 221, 219, 248, 70, 244, 41, 223, 91, 244, 198, 219, 76, 244, 199, 2, - 241, 233, 245, 21, 219, 76, 244, 199, 2, 218, 35, 219, 75, 244, 198, 229, - 92, 244, 198, 245, 31, 244, 198, 214, 188, 244, 198, 244, 199, 2, 249, - 238, 217, 248, 225, 195, 244, 198, 249, 209, 244, 198, 249, 210, 244, - 198, 234, 68, 244, 198, 244, 199, 216, 138, 116, 234, 69, 234, 68, 244, - 199, 2, 219, 76, 245, 21, 234, 68, 244, 199, 2, 250, 8, 245, 21, 244, - 199, 2, 218, 89, 216, 20, 244, 199, 2, 218, 89, 216, 21, 22, 211, 233, - 245, 23, 244, 199, 2, 218, 89, 216, 21, 22, 216, 105, 245, 21, 247, 200, - 244, 198, 211, 204, 244, 198, 254, 116, 244, 198, 224, 230, 244, 198, - 249, 124, 244, 198, 225, 173, 244, 198, 244, 199, 2, 232, 132, 64, 215, - 205, 247, 200, 251, 96, 223, 91, 244, 198, 243, 247, 244, 199, 2, 204, - 230, 115, 254, 114, 244, 198, 244, 160, 244, 198, 212, 20, 244, 198, 219, - 93, 244, 198, 216, 72, 244, 198, 242, 132, 244, 198, 232, 120, 249, 124, - 244, 198, 244, 199, 2, 204, 230, 115, 240, 210, 244, 198, 244, 199, 2, - 204, 230, 116, 22, 249, 238, 217, 248, 244, 199, 221, 192, 236, 7, 244, - 161, 253, 221, 244, 198, 244, 57, 244, 198, 219, 94, 244, 198, 247, 173, - 244, 198, 244, 199, 211, 230, 230, 115, 244, 199, 2, 231, 89, 231, 149, - 242, 131, 250, 233, 244, 199, 2, 219, 76, 245, 21, 250, 233, 244, 199, 2, - 217, 15, 64, 235, 59, 219, 76, 250, 233, 244, 199, 2, 204, 230, 115, 219, - 76, 250, 233, 244, 199, 2, 241, 233, 245, 21, 250, 233, 244, 199, 2, 211, - 196, 219, 77, 234, 68, 250, 233, 244, 199, 2, 250, 8, 245, 21, 224, 230, - 250, 233, 244, 198, 249, 124, 250, 233, 244, 198, 212, 20, 250, 233, 244, - 198, 244, 199, 2, 228, 80, 242, 170, 243, 41, 244, 199, 2, 226, 219, 243, - 41, 225, 171, 251, 176, 248, 83, 221, 171, 230, 150, 241, 236, 230, 150, - 219, 10, 230, 150, 242, 12, 225, 171, 223, 159, 123, 242, 22, 225, 171, - 223, 159, 251, 186, 242, 18, 236, 7, 250, 187, 225, 171, 243, 246, 225, - 171, 2, 224, 230, 244, 198, 225, 171, 2, 244, 49, 242, 17, 222, 205, 241, - 221, 218, 145, 232, 155, 223, 165, 250, 252, 241, 169, 215, 249, 241, - 169, 215, 250, 2, 251, 122, 228, 58, 215, 249, 231, 37, 193, 223, 166, - 218, 151, 215, 247, 215, 248, 250, 252, 251, 100, 226, 198, 251, 100, - 215, 202, 251, 101, 218, 131, 230, 192, 254, 138, 244, 105, 245, 145, - 225, 2, 250, 252, 226, 198, 225, 2, 250, 252, 217, 33, 226, 198, 217, 33, - 253, 188, 226, 198, 253, 188, 223, 121, 213, 247, 248, 66, 215, 193, 253, - 250, 232, 123, 215, 255, 230, 144, 230, 121, 223, 164, 218, 7, 223, 164, - 230, 121, 251, 36, 254, 238, 215, 246, 220, 18, 222, 184, 219, 3, 203, - 215, 253, 232, 236, 67, 215, 253, 232, 236, 249, 198, 50, 225, 2, 250, - 237, 223, 47, 232, 236, 215, 223, 244, 82, 226, 201, 224, 241, 247, 131, - 228, 80, 245, 133, 50, 219, 74, 87, 228, 80, 219, 74, 87, 224, 125, 232, - 199, 236, 7, 235, 163, 225, 44, 87, 247, 154, 228, 57, 232, 199, 87, 224, - 235, 212, 41, 87, 228, 71, 212, 41, 87, 252, 10, 228, 80, 252, 9, 252, 8, - 230, 121, 252, 8, 225, 216, 228, 80, 225, 215, 250, 108, 249, 132, 231, - 61, 87, 211, 218, 87, 223, 62, 252, 195, 87, 216, 38, 212, 41, 250, 5, - 219, 236, 252, 126, 252, 124, 225, 246, 249, 185, 249, 94, 252, 177, 250, - 30, 43, 232, 95, 108, 16, 31, 224, 6, 108, 16, 31, 254, 201, 108, 16, 31, - 244, 104, 108, 16, 31, 245, 231, 108, 16, 31, 212, 40, 108, 16, 31, 254, - 51, 108, 16, 31, 254, 52, 223, 108, 108, 16, 31, 254, 52, 223, 107, 108, - 16, 31, 254, 52, 213, 143, 108, 16, 31, 254, 52, 213, 142, 108, 16, 31, - 213, 157, 108, 16, 31, 213, 156, 108, 16, 31, 213, 155, 108, 16, 31, 218, - 45, 108, 16, 31, 225, 128, 218, 45, 108, 16, 31, 85, 218, 45, 108, 16, - 31, 231, 60, 218, 72, 108, 16, 31, 231, 60, 218, 71, 108, 16, 31, 231, - 60, 218, 70, 108, 16, 31, 250, 46, 108, 16, 31, 222, 3, 108, 16, 31, 228, - 193, 108, 16, 31, 213, 141, 108, 16, 31, 213, 140, 108, 16, 31, 222, 206, - 222, 3, 108, 16, 31, 222, 206, 222, 2, 108, 16, 31, 242, 173, 108, 16, - 31, 219, 168, 108, 16, 31, 235, 184, 226, 157, 108, 16, 31, 235, 184, - 226, 156, 108, 16, 31, 249, 142, 64, 235, 183, 108, 16, 31, 223, 104, 64, - 235, 183, 108, 16, 31, 249, 176, 226, 157, 108, 16, 31, 235, 182, 226, - 157, 108, 16, 31, 218, 73, 64, 249, 175, 108, 16, 31, 249, 142, 64, 249, - 175, 108, 16, 31, 249, 142, 64, 249, 174, 108, 16, 31, 249, 176, 254, 91, - 108, 16, 31, 222, 4, 64, 249, 176, 254, 91, 108, 16, 31, 218, 73, 64, - 222, 4, 64, 249, 175, 108, 16, 31, 213, 243, 108, 16, 31, 216, 85, 226, - 157, 108, 16, 31, 233, 63, 226, 157, 108, 16, 31, 254, 90, 226, 157, 108, - 16, 31, 218, 73, 64, 254, 89, 108, 16, 31, 222, 4, 64, 254, 89, 108, 16, - 31, 218, 73, 64, 222, 4, 64, 254, 89, 108, 16, 31, 213, 158, 64, 254, 89, - 108, 16, 31, 223, 104, 64, 254, 89, 108, 16, 31, 223, 104, 64, 254, 88, - 108, 16, 31, 223, 103, 108, 16, 31, 223, 102, 108, 16, 31, 223, 101, 108, - 16, 31, 223, 100, 108, 16, 31, 254, 166, 108, 16, 31, 254, 165, 108, 16, - 31, 231, 168, 108, 16, 31, 222, 9, 108, 16, 31, 253, 254, 108, 16, 31, - 223, 128, 108, 16, 31, 223, 127, 108, 16, 31, 253, 191, 108, 16, 31, 251, - 237, 226, 157, 108, 16, 31, 217, 50, 108, 16, 31, 217, 49, 108, 16, 31, - 224, 11, 232, 228, 108, 16, 31, 251, 191, 108, 16, 31, 251, 190, 108, 16, - 31, 251, 189, 108, 16, 31, 254, 146, 108, 16, 31, 226, 222, 108, 16, 31, - 218, 250, 108, 16, 31, 216, 83, 108, 16, 31, 242, 103, 108, 16, 31, 212, - 28, 108, 16, 31, 224, 229, 108, 16, 31, 251, 22, 108, 16, 31, 215, 86, - 108, 16, 31, 250, 254, 230, 127, 108, 16, 31, 221, 204, 64, 235, 61, 108, - 16, 31, 251, 33, 108, 16, 31, 215, 220, 108, 16, 31, 218, 156, 215, 220, - 108, 16, 31, 232, 154, 108, 16, 31, 219, 58, 108, 16, 31, 214, 142, 108, - 16, 31, 240, 253, 246, 72, 108, 16, 31, 253, 235, 108, 16, 31, 224, 237, - 253, 235, 108, 16, 31, 251, 150, 108, 16, 31, 224, 228, 251, 150, 108, - 16, 31, 254, 143, 108, 16, 31, 218, 119, 218, 27, 218, 118, 108, 16, 31, - 218, 119, 218, 27, 218, 117, 108, 16, 31, 218, 69, 108, 16, 31, 224, 203, - 108, 16, 31, 247, 189, 108, 16, 31, 247, 191, 108, 16, 31, 247, 190, 108, - 16, 31, 224, 134, 108, 16, 31, 224, 123, 108, 16, 31, 249, 130, 108, 16, - 31, 249, 129, 108, 16, 31, 249, 128, 108, 16, 31, 249, 127, 108, 16, 31, - 249, 126, 108, 16, 31, 254, 178, 108, 16, 31, 252, 127, 64, 231, 154, - 108, 16, 31, 252, 127, 64, 214, 17, 108, 16, 31, 223, 60, 108, 16, 31, - 240, 245, 108, 16, 31, 228, 217, 108, 16, 31, 248, 153, 108, 16, 31, 230, - 139, 108, 16, 31, 163, 246, 102, 108, 16, 31, 163, 226, 136, 10, 14, 240, - 109, 10, 14, 240, 108, 10, 14, 240, 107, 10, 14, 240, 106, 10, 14, 240, - 105, 10, 14, 240, 104, 10, 14, 240, 103, 10, 14, 240, 102, 10, 14, 240, - 101, 10, 14, 240, 100, 10, 14, 240, 99, 10, 14, 240, 98, 10, 14, 240, 97, - 10, 14, 240, 96, 10, 14, 240, 95, 10, 14, 240, 94, 10, 14, 240, 93, 10, - 14, 240, 92, 10, 14, 240, 91, 10, 14, 240, 90, 10, 14, 240, 89, 10, 14, - 240, 88, 10, 14, 240, 87, 10, 14, 240, 86, 10, 14, 240, 85, 10, 14, 240, - 84, 10, 14, 240, 83, 10, 14, 240, 82, 10, 14, 240, 81, 10, 14, 240, 80, - 10, 14, 240, 79, 10, 14, 240, 78, 10, 14, 240, 77, 10, 14, 240, 76, 10, - 14, 240, 75, 10, 14, 240, 74, 10, 14, 240, 73, 10, 14, 240, 72, 10, 14, - 240, 71, 10, 14, 240, 70, 10, 14, 240, 69, 10, 14, 240, 68, 10, 14, 240, - 67, 10, 14, 240, 66, 10, 14, 240, 65, 10, 14, 240, 64, 10, 14, 240, 63, - 10, 14, 240, 62, 10, 14, 240, 61, 10, 14, 240, 60, 10, 14, 240, 59, 10, - 14, 240, 58, 10, 14, 240, 57, 10, 14, 240, 56, 10, 14, 240, 55, 10, 14, - 240, 54, 10, 14, 240, 53, 10, 14, 240, 52, 10, 14, 240, 51, 10, 14, 240, - 50, 10, 14, 240, 49, 10, 14, 240, 48, 10, 14, 240, 47, 10, 14, 240, 46, - 10, 14, 240, 45, 10, 14, 240, 44, 10, 14, 240, 43, 10, 14, 240, 42, 10, - 14, 240, 41, 10, 14, 240, 40, 10, 14, 240, 39, 10, 14, 240, 38, 10, 14, - 240, 37, 10, 14, 240, 36, 10, 14, 240, 35, 10, 14, 240, 34, 10, 14, 240, - 33, 10, 14, 240, 32, 10, 14, 240, 31, 10, 14, 240, 30, 10, 14, 240, 29, - 10, 14, 240, 28, 10, 14, 240, 27, 10, 14, 240, 26, 10, 14, 240, 25, 10, - 14, 240, 24, 10, 14, 240, 23, 10, 14, 240, 22, 10, 14, 240, 21, 10, 14, - 240, 20, 10, 14, 240, 19, 10, 14, 240, 18, 10, 14, 240, 17, 10, 14, 240, - 16, 10, 14, 240, 15, 10, 14, 240, 14, 10, 14, 240, 13, 10, 14, 240, 12, - 10, 14, 240, 11, 10, 14, 240, 10, 10, 14, 240, 9, 10, 14, 240, 8, 10, 14, - 240, 7, 10, 14, 240, 6, 10, 14, 240, 5, 10, 14, 240, 4, 10, 14, 240, 3, - 10, 14, 240, 2, 10, 14, 240, 1, 10, 14, 240, 0, 10, 14, 239, 255, 10, 14, - 239, 254, 10, 14, 239, 253, 10, 14, 239, 252, 10, 14, 239, 251, 10, 14, - 239, 250, 10, 14, 239, 249, 10, 14, 239, 248, 10, 14, 239, 247, 10, 14, - 239, 246, 10, 14, 239, 245, 10, 14, 239, 244, 10, 14, 239, 243, 10, 14, - 239, 242, 10, 14, 239, 241, 10, 14, 239, 240, 10, 14, 239, 239, 10, 14, - 239, 238, 10, 14, 239, 237, 10, 14, 239, 236, 10, 14, 239, 235, 10, 14, - 239, 234, 10, 14, 239, 233, 10, 14, 239, 232, 10, 14, 239, 231, 10, 14, - 239, 230, 10, 14, 239, 229, 10, 14, 239, 228, 10, 14, 239, 227, 10, 14, - 239, 226, 10, 14, 239, 225, 10, 14, 239, 224, 10, 14, 239, 223, 10, 14, - 239, 222, 10, 14, 239, 221, 10, 14, 239, 220, 10, 14, 239, 219, 10, 14, - 239, 218, 10, 14, 239, 217, 10, 14, 239, 216, 10, 14, 239, 215, 10, 14, - 239, 214, 10, 14, 239, 213, 10, 14, 239, 212, 10, 14, 239, 211, 10, 14, - 239, 210, 10, 14, 239, 209, 10, 14, 239, 208, 10, 14, 239, 207, 10, 14, - 239, 206, 10, 14, 239, 205, 10, 14, 239, 204, 10, 14, 239, 203, 10, 14, - 239, 202, 10, 14, 239, 201, 10, 14, 239, 200, 10, 14, 239, 199, 10, 14, - 239, 198, 10, 14, 239, 197, 10, 14, 239, 196, 10, 14, 239, 195, 10, 14, - 239, 194, 10, 14, 239, 193, 10, 14, 239, 192, 10, 14, 239, 191, 10, 14, - 239, 190, 10, 14, 239, 189, 10, 14, 239, 188, 10, 14, 239, 187, 10, 14, - 239, 186, 10, 14, 239, 185, 10, 14, 239, 184, 10, 14, 239, 183, 10, 14, - 239, 182, 10, 14, 239, 181, 10, 14, 239, 180, 10, 14, 239, 179, 10, 14, - 239, 178, 10, 14, 239, 177, 10, 14, 239, 176, 10, 14, 239, 175, 10, 14, - 239, 174, 10, 14, 239, 173, 10, 14, 239, 172, 10, 14, 239, 171, 10, 14, - 239, 170, 10, 14, 239, 169, 10, 14, 239, 168, 10, 14, 239, 167, 10, 14, - 239, 166, 10, 14, 239, 165, 10, 14, 239, 164, 10, 14, 239, 163, 10, 14, - 239, 162, 10, 14, 239, 161, 10, 14, 239, 160, 10, 14, 239, 159, 10, 14, - 239, 158, 10, 14, 239, 157, 10, 14, 239, 156, 10, 14, 239, 155, 10, 14, - 239, 154, 10, 14, 239, 153, 10, 14, 239, 152, 10, 14, 239, 151, 10, 14, - 239, 150, 10, 14, 239, 149, 10, 14, 239, 148, 10, 14, 239, 147, 10, 14, - 239, 146, 10, 14, 239, 145, 10, 14, 239, 144, 10, 14, 239, 143, 10, 14, - 239, 142, 10, 14, 239, 141, 10, 14, 239, 140, 10, 14, 239, 139, 10, 14, - 239, 138, 10, 14, 239, 137, 10, 14, 239, 136, 10, 14, 239, 135, 10, 14, - 239, 134, 10, 14, 239, 133, 10, 14, 239, 132, 10, 14, 239, 131, 10, 14, - 239, 130, 10, 14, 239, 129, 10, 14, 239, 128, 10, 14, 239, 127, 10, 14, - 239, 126, 10, 14, 239, 125, 10, 14, 239, 124, 10, 14, 239, 123, 10, 14, - 239, 122, 10, 14, 239, 121, 10, 14, 239, 120, 10, 14, 239, 119, 10, 14, - 239, 118, 10, 14, 239, 117, 10, 14, 239, 116, 10, 14, 239, 115, 10, 14, - 239, 114, 10, 14, 239, 113, 10, 14, 239, 112, 10, 14, 239, 111, 10, 14, - 239, 110, 10, 14, 239, 109, 10, 14, 239, 108, 10, 14, 239, 107, 10, 14, - 239, 106, 10, 14, 239, 105, 10, 14, 239, 104, 10, 14, 239, 103, 10, 14, - 239, 102, 10, 14, 239, 101, 10, 14, 239, 100, 10, 14, 239, 99, 10, 14, - 239, 98, 10, 14, 239, 97, 10, 14, 239, 96, 10, 14, 239, 95, 10, 14, 239, - 94, 10, 14, 239, 93, 10, 14, 239, 92, 10, 14, 239, 91, 10, 14, 239, 90, - 10, 14, 239, 89, 10, 14, 239, 88, 10, 14, 239, 87, 10, 14, 239, 86, 10, - 14, 239, 85, 10, 14, 239, 84, 10, 14, 239, 83, 10, 14, 239, 82, 10, 14, - 239, 81, 10, 14, 239, 80, 10, 14, 239, 79, 10, 14, 239, 78, 10, 14, 239, - 77, 10, 14, 239, 76, 10, 14, 239, 75, 10, 14, 239, 74, 10, 14, 239, 73, - 10, 14, 239, 72, 10, 14, 239, 71, 10, 14, 239, 70, 10, 14, 239, 69, 10, - 14, 239, 68, 10, 14, 239, 67, 10, 14, 239, 66, 10, 14, 239, 65, 10, 14, - 239, 64, 10, 14, 239, 63, 10, 14, 239, 62, 10, 14, 239, 61, 10, 14, 239, - 60, 10, 14, 239, 59, 10, 14, 239, 58, 10, 14, 239, 57, 10, 14, 239, 56, - 10, 14, 239, 55, 10, 14, 239, 54, 10, 14, 239, 53, 10, 14, 239, 52, 10, - 14, 239, 51, 10, 14, 239, 50, 10, 14, 239, 49, 10, 14, 239, 48, 10, 14, - 239, 47, 10, 14, 239, 46, 10, 14, 239, 45, 10, 14, 239, 44, 10, 14, 239, - 43, 10, 14, 239, 42, 10, 14, 239, 41, 10, 14, 239, 40, 10, 14, 239, 39, - 10, 14, 239, 38, 10, 14, 239, 37, 10, 14, 239, 36, 10, 14, 239, 35, 10, - 14, 239, 34, 10, 14, 239, 33, 10, 14, 239, 32, 10, 14, 239, 31, 10, 14, - 239, 30, 10, 14, 239, 29, 10, 14, 239, 28, 10, 14, 239, 27, 10, 14, 239, - 26, 10, 14, 239, 25, 10, 14, 239, 24, 10, 14, 239, 23, 10, 14, 239, 22, - 10, 14, 239, 21, 10, 14, 239, 20, 10, 14, 239, 19, 10, 14, 239, 18, 10, - 14, 239, 17, 10, 14, 239, 16, 10, 14, 239, 15, 10, 14, 239, 14, 10, 14, - 239, 13, 10, 14, 239, 12, 10, 14, 239, 11, 10, 14, 239, 10, 10, 14, 239, - 9, 10, 14, 239, 8, 10, 14, 239, 7, 10, 14, 239, 6, 10, 14, 239, 5, 10, - 14, 239, 4, 10, 14, 239, 3, 10, 14, 239, 2, 10, 14, 239, 1, 10, 14, 239, - 0, 10, 14, 238, 255, 10, 14, 238, 254, 10, 14, 238, 253, 10, 14, 238, - 252, 10, 14, 238, 251, 10, 14, 238, 250, 10, 14, 238, 249, 10, 14, 238, - 248, 10, 14, 238, 247, 10, 14, 238, 246, 10, 14, 238, 245, 10, 14, 238, - 244, 10, 14, 238, 243, 10, 14, 238, 242, 10, 14, 238, 241, 10, 14, 238, - 240, 10, 14, 238, 239, 10, 14, 238, 238, 10, 14, 238, 237, 10, 14, 238, - 236, 10, 14, 238, 235, 10, 14, 238, 234, 10, 14, 238, 233, 10, 14, 238, - 232, 10, 14, 238, 231, 10, 14, 238, 230, 10, 14, 238, 229, 10, 14, 238, - 228, 10, 14, 238, 227, 10, 14, 238, 226, 10, 14, 238, 225, 10, 14, 238, - 224, 10, 14, 238, 223, 10, 14, 238, 222, 10, 14, 238, 221, 10, 14, 238, - 220, 10, 14, 238, 219, 10, 14, 238, 218, 10, 14, 238, 217, 10, 14, 238, - 216, 10, 14, 238, 215, 10, 14, 238, 214, 10, 14, 238, 213, 10, 14, 238, - 212, 10, 14, 238, 211, 10, 14, 238, 210, 10, 14, 238, 209, 10, 14, 238, - 208, 10, 14, 238, 207, 10, 14, 238, 206, 10, 14, 238, 205, 10, 14, 238, - 204, 10, 14, 238, 203, 10, 14, 238, 202, 10, 14, 238, 201, 10, 14, 238, - 200, 10, 14, 238, 199, 10, 14, 238, 198, 10, 14, 238, 197, 10, 14, 238, - 196, 10, 14, 238, 195, 10, 14, 238, 194, 10, 14, 238, 193, 10, 14, 238, - 192, 10, 14, 238, 191, 10, 14, 238, 190, 10, 14, 238, 189, 10, 14, 238, - 188, 10, 14, 238, 187, 10, 14, 238, 186, 10, 14, 238, 185, 10, 14, 238, - 184, 10, 14, 238, 183, 10, 14, 238, 182, 10, 14, 238, 181, 10, 14, 238, - 180, 10, 14, 238, 179, 10, 14, 238, 178, 10, 14, 238, 177, 10, 14, 238, - 176, 10, 14, 238, 175, 10, 14, 238, 174, 10, 14, 238, 173, 10, 14, 238, - 172, 10, 14, 238, 171, 10, 14, 238, 170, 10, 14, 238, 169, 10, 14, 238, - 168, 10, 14, 238, 167, 10, 14, 238, 166, 10, 14, 238, 165, 10, 14, 238, - 164, 10, 14, 238, 163, 10, 14, 238, 162, 10, 14, 238, 161, 10, 14, 238, - 160, 10, 14, 238, 159, 10, 14, 238, 158, 10, 14, 238, 157, 10, 14, 238, - 156, 10, 14, 238, 155, 10, 14, 238, 154, 10, 14, 238, 153, 10, 14, 238, - 152, 10, 14, 238, 151, 10, 14, 238, 150, 10, 14, 238, 149, 10, 14, 238, - 148, 10, 14, 238, 147, 10, 14, 238, 146, 10, 14, 238, 145, 10, 14, 238, - 144, 10, 14, 238, 143, 10, 14, 238, 142, 10, 14, 238, 141, 10, 14, 238, - 140, 10, 14, 238, 139, 10, 14, 238, 138, 10, 14, 238, 137, 10, 14, 238, - 136, 10, 14, 238, 135, 10, 14, 238, 134, 10, 14, 238, 133, 10, 14, 238, - 132, 10, 14, 238, 131, 10, 14, 238, 130, 10, 14, 238, 129, 10, 14, 238, - 128, 10, 14, 238, 127, 10, 14, 238, 126, 10, 14, 238, 125, 10, 14, 238, - 124, 10, 14, 238, 123, 10, 14, 238, 122, 10, 14, 238, 121, 10, 14, 238, - 120, 10, 14, 238, 119, 10, 14, 238, 118, 10, 14, 238, 117, 10, 14, 238, - 116, 10, 14, 238, 115, 10, 14, 238, 114, 10, 14, 238, 113, 10, 14, 238, - 112, 10, 14, 238, 111, 10, 14, 238, 110, 10, 14, 238, 109, 10, 14, 238, - 108, 10, 14, 238, 107, 10, 14, 238, 106, 10, 14, 238, 105, 10, 14, 238, - 104, 10, 14, 238, 103, 10, 14, 238, 102, 10, 14, 238, 101, 10, 14, 238, - 100, 10, 14, 238, 99, 10, 14, 238, 98, 10, 14, 238, 97, 10, 14, 238, 96, - 10, 14, 238, 95, 10, 14, 238, 94, 10, 14, 238, 93, 10, 14, 238, 92, 10, - 14, 238, 91, 10, 14, 238, 90, 10, 14, 238, 89, 10, 14, 238, 88, 10, 14, - 238, 87, 10, 14, 238, 86, 10, 14, 238, 85, 10, 14, 238, 84, 10, 14, 238, - 83, 10, 14, 238, 82, 10, 14, 238, 81, 10, 14, 238, 80, 233, 96, 217, 85, - 129, 219, 20, 129, 245, 39, 79, 129, 224, 1, 79, 129, 54, 50, 129, 247, - 140, 50, 129, 225, 185, 50, 129, 254, 134, 129, 254, 65, 129, 43, 226, 7, - 129, 44, 226, 7, 129, 253, 224, 129, 96, 50, 129, 249, 227, 129, 240, - 174, 129, 243, 236, 218, 131, 129, 219, 48, 129, 21, 210, 86, 129, 21, - 111, 129, 21, 105, 129, 21, 158, 129, 21, 161, 129, 21, 190, 129, 21, - 195, 129, 21, 199, 129, 21, 196, 129, 21, 201, 129, 249, 234, 129, 220, - 152, 129, 233, 21, 50, 129, 245, 106, 50, 129, 242, 137, 50, 129, 224, - 16, 79, 129, 249, 225, 253, 214, 129, 7, 6, 1, 61, 129, 7, 6, 1, 253, - 166, 129, 7, 6, 1, 251, 74, 129, 7, 6, 1, 249, 68, 129, 7, 6, 1, 76, 129, - 7, 6, 1, 245, 14, 129, 7, 6, 1, 243, 209, 129, 7, 6, 1, 242, 67, 129, 7, - 6, 1, 74, 129, 7, 6, 1, 235, 150, 129, 7, 6, 1, 235, 29, 129, 7, 6, 1, - 156, 129, 7, 6, 1, 194, 129, 7, 6, 1, 230, 30, 129, 7, 6, 1, 78, 129, 7, - 6, 1, 226, 109, 129, 7, 6, 1, 224, 99, 129, 7, 6, 1, 153, 129, 7, 6, 1, - 222, 93, 129, 7, 6, 1, 217, 153, 129, 7, 6, 1, 69, 129, 7, 6, 1, 214, - 105, 129, 7, 6, 1, 212, 98, 129, 7, 6, 1, 211, 178, 129, 7, 6, 1, 211, - 117, 129, 7, 6, 1, 210, 159, 129, 43, 42, 127, 129, 223, 53, 219, 48, - 129, 44, 42, 127, 129, 250, 39, 255, 23, 129, 121, 232, 219, 129, 242, - 144, 255, 23, 129, 7, 4, 1, 61, 129, 7, 4, 1, 253, 166, 129, 7, 4, 1, - 251, 74, 129, 7, 4, 1, 249, 68, 129, 7, 4, 1, 76, 129, 7, 4, 1, 245, 14, - 129, 7, 4, 1, 243, 209, 129, 7, 4, 1, 242, 67, 129, 7, 4, 1, 74, 129, 7, - 4, 1, 235, 150, 129, 7, 4, 1, 235, 29, 129, 7, 4, 1, 156, 129, 7, 4, 1, - 194, 129, 7, 4, 1, 230, 30, 129, 7, 4, 1, 78, 129, 7, 4, 1, 226, 109, - 129, 7, 4, 1, 224, 99, 129, 7, 4, 1, 153, 129, 7, 4, 1, 222, 93, 129, 7, - 4, 1, 217, 153, 129, 7, 4, 1, 69, 129, 7, 4, 1, 214, 105, 129, 7, 4, 1, - 212, 98, 129, 7, 4, 1, 211, 178, 129, 7, 4, 1, 211, 117, 129, 7, 4, 1, - 210, 159, 129, 43, 249, 107, 127, 129, 67, 232, 219, 129, 44, 249, 107, - 127, 129, 184, 251, 14, 217, 85, 45, 221, 80, 45, 221, 69, 45, 221, 58, - 45, 221, 46, 45, 221, 35, 45, 221, 24, 45, 221, 13, 45, 221, 2, 45, 220, - 247, 45, 220, 239, 45, 220, 238, 45, 220, 237, 45, 220, 236, 45, 220, - 234, 45, 220, 233, 45, 220, 232, 45, 220, 231, 45, 220, 230, 45, 220, - 229, 45, 220, 228, 45, 220, 227, 45, 220, 226, 45, 220, 225, 45, 220, - 223, 45, 220, 222, 45, 220, 221, 45, 220, 220, 45, 220, 219, 45, 220, - 218, 45, 220, 217, 45, 220, 216, 45, 220, 215, 45, 220, 214, 45, 220, - 212, 45, 220, 211, 45, 220, 210, 45, 220, 209, 45, 220, 208, 45, 220, - 207, 45, 220, 206, 45, 220, 205, 45, 220, 204, 45, 220, 203, 45, 220, - 201, 45, 220, 200, 45, 220, 199, 45, 220, 198, 45, 220, 197, 45, 220, - 196, 45, 220, 195, 45, 220, 194, 45, 220, 193, 45, 220, 192, 45, 220, - 190, 45, 220, 189, 45, 220, 188, 45, 220, 187, 45, 220, 186, 45, 220, - 185, 45, 220, 184, 45, 220, 183, 45, 220, 182, 45, 220, 181, 45, 220, - 179, 45, 220, 178, 45, 220, 177, 45, 220, 176, 45, 220, 175, 45, 220, - 174, 45, 220, 173, 45, 220, 172, 45, 220, 171, 45, 220, 170, 45, 220, - 168, 45, 220, 167, 45, 220, 166, 45, 220, 165, 45, 220, 164, 45, 220, - 163, 45, 220, 162, 45, 220, 161, 45, 220, 160, 45, 220, 159, 45, 221, - 156, 45, 221, 155, 45, 221, 154, 45, 221, 153, 45, 221, 152, 45, 221, - 151, 45, 221, 150, 45, 221, 149, 45, 221, 148, 45, 221, 147, 45, 221, - 145, 45, 221, 144, 45, 221, 143, 45, 221, 142, 45, 221, 141, 45, 221, - 140, 45, 221, 139, 45, 221, 138, 45, 221, 137, 45, 221, 136, 45, 221, - 134, 45, 221, 133, 45, 221, 132, 45, 221, 131, 45, 221, 130, 45, 221, - 129, 45, 221, 128, 45, 221, 127, 45, 221, 126, 45, 221, 125, 45, 221, - 123, 45, 221, 122, 45, 221, 121, 45, 221, 120, 45, 221, 119, 45, 221, - 118, 45, 221, 117, 45, 221, 116, 45, 221, 115, 45, 221, 114, 45, 221, - 112, 45, 221, 111, 45, 221, 110, 45, 221, 109, 45, 221, 108, 45, 221, - 107, 45, 221, 106, 45, 221, 105, 45, 221, 104, 45, 221, 103, 45, 221, - 101, 45, 221, 100, 45, 221, 99, 45, 221, 98, 45, 221, 97, 45, 221, 96, - 45, 221, 95, 45, 221, 94, 45, 221, 93, 45, 221, 92, 45, 221, 90, 45, 221, - 89, 45, 221, 88, 45, 221, 87, 45, 221, 86, 45, 221, 85, 45, 221, 84, 45, - 221, 83, 45, 221, 82, 45, 221, 81, 45, 221, 79, 45, 221, 78, 45, 221, 77, - 45, 221, 76, 45, 221, 75, 45, 221, 74, 45, 221, 73, 45, 221, 72, 45, 221, - 71, 45, 221, 70, 45, 221, 68, 45, 221, 67, 45, 221, 66, 45, 221, 65, 45, - 221, 64, 45, 221, 63, 45, 221, 62, 45, 221, 61, 45, 221, 60, 45, 221, 59, - 45, 221, 57, 45, 221, 56, 45, 221, 55, 45, 221, 54, 45, 221, 53, 45, 221, - 52, 45, 221, 51, 45, 221, 50, 45, 221, 49, 45, 221, 48, 45, 221, 45, 45, - 221, 44, 45, 221, 43, 45, 221, 42, 45, 221, 41, 45, 221, 40, 45, 221, 39, - 45, 221, 38, 45, 221, 37, 45, 221, 36, 45, 221, 34, 45, 221, 33, 45, 221, - 32, 45, 221, 31, 45, 221, 30, 45, 221, 29, 45, 221, 28, 45, 221, 27, 45, - 221, 26, 45, 221, 25, 45, 221, 23, 45, 221, 22, 45, 221, 21, 45, 221, 20, - 45, 221, 19, 45, 221, 18, 45, 221, 17, 45, 221, 16, 45, 221, 15, 45, 221, - 14, 45, 221, 12, 45, 221, 11, 45, 221, 10, 45, 221, 9, 45, 221, 8, 45, - 221, 7, 45, 221, 6, 45, 221, 5, 45, 221, 4, 45, 221, 3, 45, 221, 1, 45, - 221, 0, 45, 220, 255, 45, 220, 254, 45, 220, 253, 45, 220, 252, 45, 220, - 251, 45, 220, 250, 45, 220, 249, 45, 220, 248, 45, 220, 246, 45, 220, - 245, 45, 220, 244, 45, 220, 243, 45, 220, 242, 45, 220, 241, 45, 220, - 240, 227, 206, 227, 208, 218, 154, 64, 241, 240, 219, 50, 218, 154, 64, - 216, 213, 218, 86, 245, 151, 64, 216, 213, 245, 64, 245, 151, 64, 215, - 244, 245, 117, 245, 140, 245, 141, 255, 16, 255, 17, 254, 176, 252, 55, - 252, 187, 251, 139, 135, 217, 90, 203, 217, 90, 240, 234, 217, 94, 232, - 220, 244, 153, 166, 232, 219, 245, 151, 64, 232, 219, 233, 6, 228, 140, - 245, 120, 232, 220, 217, 90, 67, 217, 90, 212, 118, 244, 28, 244, 153, - 244, 133, 250, 238, 223, 56, 249, 151, 220, 30, 226, 134, 232, 156, 111, - 219, 60, 220, 30, 236, 6, 232, 156, 210, 86, 219, 193, 248, 159, 232, - 210, 245, 85, 247, 163, 248, 39, 249, 186, 111, 248, 149, 248, 39, 249, - 186, 105, 248, 148, 248, 39, 249, 186, 158, 248, 147, 248, 39, 249, 186, - 161, 248, 146, 152, 255, 16, 229, 214, 217, 178, 236, 69, 217, 181, 245, - 151, 64, 215, 245, 251, 221, 245, 70, 251, 13, 251, 15, 245, 151, 64, - 231, 86, 245, 118, 218, 62, 218, 79, 245, 85, 245, 86, 235, 239, 220, - 140, 161, 244, 115, 220, 139, 243, 245, 235, 239, 220, 140, 158, 242, - 128, 220, 139, 242, 125, 235, 239, 220, 140, 105, 223, 124, 220, 139, - 222, 147, 235, 239, 220, 140, 111, 214, 174, 220, 139, 214, 133, 219, 23, - 248, 71, 248, 73, 226, 82, 250, 150, 226, 84, 125, 226, 244, 224, 196, - 241, 54, 251, 158, 225, 176, 241, 210, 251, 169, 228, 80, 251, 158, 241, - 210, 229, 180, 235, 249, 235, 251, 229, 87, 232, 219, 229, 104, 218, 154, - 64, 221, 160, 254, 26, 218, 225, 245, 151, 64, 221, 160, 254, 26, 245, - 88, 135, 217, 91, 220, 129, 203, 217, 91, 220, 129, 240, 231, 135, 217, - 91, 2, 235, 41, 203, 217, 91, 2, 235, 41, 240, 232, 232, 220, 217, 91, - 220, 129, 67, 217, 91, 220, 129, 212, 117, 226, 1, 232, 220, 244, 22, - 226, 1, 232, 220, 246, 114, 225, 35, 226, 1, 232, 220, 252, 186, 226, 1, - 232, 220, 214, 163, 225, 31, 223, 53, 232, 220, 244, 153, 223, 53, 235, - 249, 223, 38, 219, 157, 220, 30, 105, 219, 154, 218, 227, 219, 157, 220, - 30, 158, 219, 153, 218, 226, 248, 39, 249, 186, 218, 107, 248, 145, 224, - 186, 214, 132, 111, 224, 186, 214, 130, 224, 152, 224, 186, 214, 132, - 105, 224, 186, 214, 129, 224, 151, 220, 130, 215, 243, 218, 153, 218, 90, - 251, 14, 250, 150, 250, 217, 231, 48, 212, 59, 230, 48, 218, 154, 64, - 242, 114, 254, 26, 218, 154, 64, 224, 169, 254, 26, 219, 22, 245, 151, - 64, 242, 114, 254, 26, 245, 151, 64, 224, 169, 254, 26, 245, 115, 218, - 154, 64, 218, 107, 219, 37, 219, 157, 242, 148, 135, 235, 202, 220, 109, - 219, 157, 135, 235, 202, 221, 196, 249, 186, 220, 137, 235, 202, 249, - 121, 218, 108, 216, 237, 218, 170, 226, 173, 217, 168, 249, 226, 226, - 146, 224, 187, 231, 47, 225, 22, 254, 61, 224, 181, 249, 226, 254, 77, - 229, 168, 219, 202, 7, 6, 1, 243, 0, 7, 4, 1, 243, 0, 250, 167, 254, 157, - 183, 218, 68, 249, 235, 219, 108, 233, 52, 165, 1, 232, 181, 209, 209, 1, - 244, 52, 244, 44, 209, 209, 1, 244, 52, 244, 165, 209, 209, 1, 222, 213, - 209, 209, 1, 232, 162, 63, 164, 251, 231, 220, 5, 242, 222, 230, 253, - 223, 44, 243, 223, 243, 222, 243, 221, 230, 50, 209, 251, 209, 252, 209, - 254, 232, 107, 222, 221, 232, 109, 222, 223, 225, 227, 232, 106, 222, - 220, 228, 111, 230, 170, 211, 229, 232, 108, 222, 222, 243, 244, 225, - 226, 212, 15, 245, 170, 243, 233, 230, 234, 226, 201, 214, 134, 87, 230, - 234, 248, 165, 87, 8, 3, 235, 164, 79, 224, 197, 244, 28, 31, 67, 44, 71, - 233, 26, 127, 213, 118, 213, 7, 212, 195, 212, 184, 212, 173, 212, 162, - 212, 151, 212, 140, 212, 129, 213, 117, 213, 106, 213, 95, 213, 84, 213, - 73, 213, 62, 213, 51, 251, 79, 226, 159, 79, 251, 204, 209, 253, 15, 5, - 227, 215, 216, 240, 15, 5, 227, 215, 115, 227, 215, 251, 107, 115, 251, - 106, 49, 28, 16, 243, 243, 219, 104, 250, 81, 214, 9, 213, 40, 213, 29, - 213, 18, 213, 6, 212, 251, 212, 240, 212, 229, 212, 218, 212, 207, 212, - 199, 212, 198, 212, 197, 212, 196, 212, 194, 212, 193, 212, 192, 212, - 191, 212, 190, 212, 189, 212, 188, 212, 187, 212, 186, 212, 185, 212, - 183, 212, 182, 212, 181, 212, 180, 212, 179, 212, 178, 212, 177, 212, - 176, 212, 175, 212, 174, 212, 172, 212, 171, 212, 170, 212, 169, 212, - 168, 212, 167, 212, 166, 212, 165, 212, 164, 212, 163, 212, 161, 212, - 160, 212, 159, 212, 158, 212, 157, 212, 156, 212, 155, 212, 154, 212, - 153, 212, 152, 212, 150, 212, 149, 212, 148, 212, 147, 212, 146, 212, - 145, 212, 144, 212, 143, 212, 142, 212, 141, 212, 139, 212, 138, 212, - 137, 212, 136, 212, 135, 212, 134, 212, 133, 212, 132, 212, 131, 212, - 130, 212, 128, 212, 127, 212, 126, 212, 125, 212, 124, 212, 123, 212, - 122, 212, 121, 212, 120, 212, 119, 213, 116, 213, 115, 213, 114, 213, - 113, 213, 112, 213, 111, 213, 110, 213, 109, 213, 108, 213, 107, 213, - 105, 213, 104, 213, 103, 213, 102, 213, 101, 213, 100, 213, 99, 213, 98, - 213, 97, 213, 96, 213, 94, 213, 93, 213, 92, 213, 91, 213, 90, 213, 89, - 213, 88, 213, 87, 213, 86, 213, 85, 213, 83, 213, 82, 213, 81, 213, 80, - 213, 79, 213, 78, 213, 77, 213, 76, 213, 75, 213, 74, 213, 72, 213, 71, - 213, 70, 213, 69, 213, 68, 213, 67, 213, 66, 213, 65, 213, 64, 213, 63, - 213, 61, 213, 60, 213, 59, 213, 58, 213, 57, 213, 56, 213, 55, 213, 54, - 213, 53, 213, 52, 213, 50, 213, 49, 213, 48, 213, 47, 213, 46, 213, 45, - 213, 44, 213, 43, 213, 42, 213, 41, 213, 39, 213, 38, 213, 37, 213, 36, - 213, 35, 213, 34, 213, 33, 213, 32, 213, 31, 213, 30, 213, 28, 213, 27, - 213, 26, 213, 25, 213, 24, 213, 23, 213, 22, 213, 21, 213, 20, 213, 19, - 213, 17, 213, 16, 213, 15, 213, 14, 213, 13, 213, 12, 213, 11, 213, 10, - 213, 9, 213, 8, 213, 5, 213, 4, 213, 3, 213, 2, 213, 1, 213, 0, 212, 255, - 212, 254, 212, 253, 212, 252, 212, 250, 212, 249, 212, 248, 212, 247, - 212, 246, 212, 245, 212, 244, 212, 243, 212, 242, 212, 241, 212, 239, - 212, 238, 212, 237, 212, 236, 212, 235, 212, 234, 212, 233, 212, 232, - 212, 231, 212, 230, 212, 228, 212, 227, 212, 226, 212, 225, 212, 224, - 212, 223, 212, 222, 212, 221, 212, 220, 212, 219, 212, 217, 212, 216, - 212, 215, 212, 214, 212, 213, 212, 212, 212, 211, 212, 210, 212, 209, - 212, 208, 212, 206, 212, 205, 212, 204, 212, 203, 212, 202, 212, 201, - 212, 200, 7, 6, 1, 116, 2, 231, 238, 22, 242, 143, 7, 4, 1, 116, 2, 231, - 238, 22, 242, 143, 7, 6, 1, 160, 2, 67, 232, 220, 51, 7, 4, 1, 160, 2, - 67, 232, 220, 51, 7, 6, 1, 160, 2, 67, 232, 220, 252, 51, 22, 242, 143, - 7, 4, 1, 160, 2, 67, 232, 220, 252, 51, 22, 242, 143, 7, 6, 1, 160, 2, - 67, 232, 220, 252, 51, 22, 142, 7, 4, 1, 160, 2, 67, 232, 220, 252, 51, - 22, 142, 7, 6, 1, 160, 2, 250, 39, 22, 231, 237, 7, 4, 1, 160, 2, 250, - 39, 22, 231, 237, 7, 6, 1, 160, 2, 250, 39, 22, 250, 242, 7, 4, 1, 160, - 2, 250, 39, 22, 250, 242, 7, 6, 1, 240, 161, 2, 231, 238, 22, 242, 143, - 7, 4, 1, 240, 161, 2, 231, 238, 22, 242, 143, 7, 4, 1, 240, 161, 2, 59, - 72, 22, 142, 7, 4, 1, 229, 85, 2, 216, 90, 48, 7, 6, 1, 144, 2, 67, 232, - 220, 51, 7, 4, 1, 144, 2, 67, 232, 220, 51, 7, 6, 1, 144, 2, 67, 232, - 220, 252, 51, 22, 242, 143, 7, 4, 1, 144, 2, 67, 232, 220, 252, 51, 22, - 242, 143, 7, 6, 1, 144, 2, 67, 232, 220, 252, 51, 22, 142, 7, 4, 1, 144, - 2, 67, 232, 220, 252, 51, 22, 142, 7, 6, 1, 222, 94, 2, 67, 232, 220, 51, - 7, 4, 1, 222, 94, 2, 67, 232, 220, 51, 7, 6, 1, 104, 2, 231, 238, 22, - 242, 143, 7, 4, 1, 104, 2, 231, 238, 22, 242, 143, 7, 6, 1, 116, 2, 226, - 229, 22, 142, 7, 4, 1, 116, 2, 226, 229, 22, 142, 7, 6, 1, 116, 2, 226, - 229, 22, 184, 7, 4, 1, 116, 2, 226, 229, 22, 184, 7, 6, 1, 160, 2, 226, - 229, 22, 142, 7, 4, 1, 160, 2, 226, 229, 22, 142, 7, 6, 1, 160, 2, 226, - 229, 22, 184, 7, 4, 1, 160, 2, 226, 229, 22, 184, 7, 6, 1, 160, 2, 59, - 72, 22, 142, 7, 4, 1, 160, 2, 59, 72, 22, 142, 7, 6, 1, 160, 2, 59, 72, - 22, 184, 7, 4, 1, 160, 2, 59, 72, 22, 184, 7, 4, 1, 240, 161, 2, 59, 72, - 22, 242, 143, 7, 4, 1, 240, 161, 2, 59, 72, 22, 184, 7, 6, 1, 240, 161, - 2, 226, 229, 22, 142, 7, 4, 1, 240, 161, 2, 226, 229, 22, 59, 72, 22, - 142, 7, 6, 1, 240, 161, 2, 226, 229, 22, 184, 7, 4, 1, 240, 161, 2, 226, - 229, 22, 59, 72, 22, 184, 7, 6, 1, 235, 151, 2, 184, 7, 4, 1, 235, 151, - 2, 59, 72, 22, 184, 7, 6, 1, 233, 155, 2, 184, 7, 4, 1, 233, 155, 2, 184, - 7, 6, 1, 232, 55, 2, 184, 7, 4, 1, 232, 55, 2, 184, 7, 6, 1, 223, 227, 2, - 184, 7, 4, 1, 223, 227, 2, 184, 7, 6, 1, 104, 2, 226, 229, 22, 142, 7, 4, - 1, 104, 2, 226, 229, 22, 142, 7, 6, 1, 104, 2, 226, 229, 22, 184, 7, 4, - 1, 104, 2, 226, 229, 22, 184, 7, 6, 1, 104, 2, 231, 238, 22, 142, 7, 4, - 1, 104, 2, 231, 238, 22, 142, 7, 6, 1, 104, 2, 231, 238, 22, 184, 7, 4, - 1, 104, 2, 231, 238, 22, 184, 7, 4, 1, 254, 253, 2, 242, 143, 7, 4, 1, - 204, 144, 2, 242, 143, 7, 4, 1, 204, 144, 2, 142, 7, 4, 1, 215, 94, 214, - 106, 2, 242, 143, 7, 4, 1, 215, 94, 214, 106, 2, 142, 7, 4, 1, 221, 198, - 2, 242, 143, 7, 4, 1, 221, 198, 2, 142, 7, 4, 1, 241, 58, 221, 198, 2, - 242, 143, 7, 4, 1, 241, 58, 221, 198, 2, 142, 9, 220, 137, 77, 2, 182, - 72, 2, 254, 179, 9, 220, 137, 77, 2, 182, 72, 2, 212, 30, 9, 220, 137, - 77, 2, 182, 72, 2, 109, 231, 197, 9, 220, 137, 77, 2, 182, 72, 2, 226, - 238, 9, 220, 137, 77, 2, 182, 72, 2, 69, 9, 220, 137, 77, 2, 182, 72, 2, - 210, 212, 9, 220, 137, 77, 2, 182, 72, 2, 76, 9, 220, 137, 77, 2, 182, - 72, 2, 254, 252, 9, 220, 137, 228, 68, 2, 234, 180, 146, 1, 234, 115, 36, - 117, 235, 29, 36, 117, 229, 84, 36, 117, 251, 74, 36, 117, 227, 171, 36, - 117, 215, 160, 36, 117, 228, 116, 36, 117, 217, 153, 36, 117, 230, 30, - 36, 117, 226, 109, 36, 117, 194, 36, 117, 211, 117, 36, 117, 153, 36, - 117, 156, 36, 117, 214, 105, 36, 117, 232, 182, 36, 117, 232, 191, 36, - 117, 222, 182, 36, 117, 228, 98, 36, 117, 235, 150, 36, 117, 220, 106, - 36, 117, 218, 228, 36, 117, 222, 93, 36, 117, 242, 67, 36, 117, 233, 238, - 36, 3, 235, 16, 36, 3, 234, 98, 36, 3, 234, 89, 36, 3, 233, 223, 36, 3, - 233, 194, 36, 3, 234, 188, 36, 3, 234, 187, 36, 3, 234, 252, 36, 3, 234, - 34, 36, 3, 234, 16, 36, 3, 234, 201, 36, 3, 229, 81, 36, 3, 229, 32, 36, - 3, 229, 28, 36, 3, 228, 253, 36, 3, 228, 246, 36, 3, 229, 69, 36, 3, 229, - 67, 36, 3, 229, 78, 36, 3, 229, 9, 36, 3, 229, 4, 36, 3, 229, 71, 36, 3, - 251, 40, 36, 3, 250, 59, 36, 3, 250, 49, 36, 3, 249, 120, 36, 3, 249, 91, - 36, 3, 250, 198, 36, 3, 250, 190, 36, 3, 251, 30, 36, 3, 249, 246, 36, 3, - 249, 182, 36, 3, 250, 230, 36, 3, 227, 168, 36, 3, 227, 152, 36, 3, 227, - 147, 36, 3, 227, 132, 36, 3, 227, 125, 36, 3, 227, 160, 36, 3, 227, 159, - 36, 3, 227, 165, 36, 3, 227, 138, 36, 3, 227, 136, 36, 3, 227, 163, 36, - 3, 215, 156, 36, 3, 215, 136, 36, 3, 215, 135, 36, 3, 215, 124, 36, 3, - 215, 121, 36, 3, 215, 152, 36, 3, 215, 151, 36, 3, 215, 155, 36, 3, 215, - 134, 36, 3, 215, 133, 36, 3, 215, 154, 36, 3, 228, 114, 36, 3, 228, 100, - 36, 3, 228, 99, 36, 3, 228, 83, 36, 3, 228, 82, 36, 3, 228, 110, 36, 3, - 228, 109, 36, 3, 228, 113, 36, 3, 228, 85, 36, 3, 228, 84, 36, 3, 228, - 112, 36, 3, 217, 102, 36, 3, 216, 118, 36, 3, 216, 104, 36, 3, 215, 119, - 36, 3, 215, 85, 36, 3, 217, 23, 36, 3, 217, 12, 36, 3, 217, 80, 36, 3, - 112, 36, 3, 216, 18, 36, 3, 217, 42, 36, 3, 229, 230, 36, 3, 228, 238, - 36, 3, 228, 213, 36, 3, 227, 242, 36, 3, 227, 183, 36, 3, 229, 112, 36, - 3, 229, 108, 36, 3, 229, 217, 36, 3, 228, 79, 36, 3, 228, 69, 36, 3, 229, - 192, 36, 3, 226, 93, 36, 3, 225, 111, 36, 3, 225, 74, 36, 3, 224, 153, - 36, 3, 224, 122, 36, 3, 225, 224, 36, 3, 225, 214, 36, 3, 226, 75, 36, 3, - 225, 19, 36, 3, 224, 252, 36, 3, 225, 238, 36, 3, 231, 242, 36, 3, 230, - 235, 36, 3, 230, 206, 36, 3, 230, 107, 36, 3, 230, 59, 36, 3, 231, 96, - 36, 3, 231, 85, 36, 3, 231, 208, 36, 3, 230, 166, 36, 3, 230, 137, 36, 3, - 231, 140, 36, 3, 211, 103, 36, 3, 211, 8, 36, 3, 210, 255, 36, 3, 210, - 212, 36, 3, 210, 181, 36, 3, 211, 47, 36, 3, 211, 44, 36, 3, 211, 82, 36, - 3, 210, 244, 36, 3, 210, 229, 36, 3, 211, 55, 36, 3, 223, 187, 36, 3, - 223, 38, 36, 3, 222, 242, 36, 3, 222, 142, 36, 3, 222, 114, 36, 3, 223, - 131, 36, 3, 223, 111, 36, 3, 223, 169, 36, 3, 222, 213, 36, 3, 222, 199, - 36, 3, 223, 139, 36, 3, 233, 140, 36, 3, 232, 247, 36, 3, 232, 233, 36, - 3, 232, 103, 36, 3, 232, 78, 36, 3, 233, 64, 36, 3, 233, 56, 36, 3, 233, - 115, 36, 3, 232, 162, 36, 3, 232, 133, 36, 3, 233, 80, 36, 3, 214, 26, - 36, 3, 213, 176, 36, 3, 213, 162, 36, 3, 212, 116, 36, 3, 212, 109, 36, - 3, 213, 255, 36, 3, 213, 250, 36, 3, 214, 23, 36, 3, 213, 138, 36, 3, - 213, 127, 36, 3, 214, 5, 36, 3, 232, 180, 36, 3, 232, 175, 36, 3, 232, - 174, 36, 3, 232, 171, 36, 3, 232, 170, 36, 3, 232, 177, 36, 3, 232, 176, - 36, 3, 232, 179, 36, 3, 232, 173, 36, 3, 232, 172, 36, 3, 232, 178, 36, - 3, 232, 189, 36, 3, 232, 184, 36, 3, 232, 183, 36, 3, 232, 167, 36, 3, - 232, 166, 36, 3, 232, 186, 36, 3, 232, 185, 36, 3, 232, 188, 36, 3, 232, - 169, 36, 3, 232, 168, 36, 3, 232, 187, 36, 3, 222, 180, 36, 3, 222, 169, - 36, 3, 222, 168, 36, 3, 222, 162, 36, 3, 222, 155, 36, 3, 222, 176, 36, - 3, 222, 175, 36, 3, 222, 179, 36, 3, 222, 167, 36, 3, 222, 166, 36, 3, - 222, 178, 36, 3, 228, 96, 36, 3, 228, 91, 36, 3, 228, 90, 36, 3, 228, 87, - 36, 3, 228, 86, 36, 3, 228, 93, 36, 3, 228, 92, 36, 3, 228, 95, 36, 3, - 228, 89, 36, 3, 228, 88, 36, 3, 228, 94, 36, 3, 235, 146, 36, 3, 235, - 114, 36, 3, 235, 107, 36, 3, 235, 57, 36, 3, 235, 39, 36, 3, 235, 132, - 36, 3, 235, 130, 36, 3, 235, 141, 36, 3, 235, 74, 36, 3, 235, 65, 36, 3, - 235, 135, 36, 3, 220, 100, 36, 3, 220, 34, 36, 3, 220, 29, 36, 3, 219, - 227, 36, 3, 219, 212, 36, 3, 220, 65, 36, 3, 220, 63, 36, 3, 220, 92, 36, - 3, 220, 9, 36, 3, 220, 3, 36, 3, 220, 73, 36, 3, 218, 224, 36, 3, 218, - 194, 36, 3, 218, 190, 36, 3, 218, 181, 36, 3, 218, 178, 36, 3, 218, 199, - 36, 3, 218, 198, 36, 3, 218, 223, 36, 3, 218, 186, 36, 3, 218, 185, 36, - 3, 218, 201, 36, 3, 222, 33, 36, 3, 219, 193, 36, 3, 219, 177, 36, 3, - 218, 84, 36, 3, 218, 5, 36, 3, 221, 183, 36, 3, 221, 172, 36, 3, 222, 19, - 36, 3, 219, 60, 36, 3, 219, 42, 36, 3, 221, 221, 36, 3, 242, 53, 36, 3, - 241, 187, 36, 3, 241, 168, 36, 3, 240, 229, 36, 3, 240, 209, 36, 3, 241, - 245, 36, 3, 241, 227, 36, 3, 242, 43, 36, 3, 241, 75, 36, 3, 241, 60, 36, - 3, 241, 253, 36, 3, 233, 237, 36, 3, 233, 236, 36, 3, 233, 231, 36, 3, - 233, 230, 36, 3, 233, 227, 36, 3, 233, 226, 36, 3, 233, 233, 36, 3, 233, - 232, 36, 3, 233, 235, 36, 3, 233, 229, 36, 3, 233, 228, 36, 3, 233, 234, - 36, 3, 219, 233, 175, 117, 5, 211, 68, 175, 117, 5, 223, 158, 175, 117, - 5, 223, 81, 98, 1, 215, 28, 70, 117, 5, 249, 241, 176, 70, 117, 5, 249, - 241, 234, 138, 70, 117, 5, 249, 241, 234, 34, 70, 117, 5, 249, 241, 234, - 111, 70, 117, 5, 249, 241, 229, 9, 70, 117, 5, 249, 241, 251, 41, 70, - 117, 5, 249, 241, 250, 165, 70, 117, 5, 249, 241, 249, 246, 70, 117, 5, - 249, 241, 250, 94, 70, 117, 5, 249, 241, 227, 138, 70, 117, 5, 249, 241, - 248, 229, 70, 117, 5, 249, 241, 215, 145, 70, 117, 5, 249, 241, 247, 153, - 70, 117, 5, 249, 241, 215, 140, 70, 117, 5, 249, 241, 198, 70, 117, 5, - 249, 241, 217, 106, 70, 117, 5, 249, 241, 216, 209, 70, 117, 5, 249, 241, - 112, 70, 117, 5, 249, 241, 216, 157, 70, 117, 5, 249, 241, 228, 79, 70, - 117, 5, 249, 241, 252, 199, 70, 117, 5, 249, 241, 225, 150, 70, 117, 5, - 249, 241, 225, 19, 70, 117, 5, 249, 241, 225, 124, 70, 117, 5, 249, 241, - 230, 166, 70, 117, 5, 249, 241, 210, 244, 70, 117, 5, 249, 241, 222, 213, - 70, 117, 5, 249, 241, 232, 162, 70, 117, 5, 249, 241, 213, 138, 70, 117, - 5, 249, 241, 220, 104, 70, 117, 5, 249, 241, 218, 225, 70, 117, 5, 249, - 241, 206, 70, 117, 5, 249, 241, 162, 70, 117, 5, 249, 241, 233, 141, 70, - 25, 5, 249, 241, 224, 91, 70, 235, 250, 25, 5, 249, 241, 224, 33, 70, - 235, 250, 25, 5, 249, 241, 222, 102, 70, 235, 250, 25, 5, 249, 241, 222, - 95, 70, 235, 250, 25, 5, 249, 241, 224, 72, 70, 25, 5, 226, 208, 70, 25, - 5, 255, 43, 141, 1, 252, 7, 229, 82, 141, 1, 252, 7, 229, 32, 141, 1, - 252, 7, 228, 253, 141, 1, 252, 7, 229, 69, 141, 1, 252, 7, 229, 9, 56, 1, - 252, 7, 229, 82, 56, 1, 252, 7, 229, 32, 56, 1, 252, 7, 228, 253, 56, 1, - 252, 7, 229, 69, 56, 1, 252, 7, 229, 9, 56, 1, 254, 203, 250, 198, 56, 1, - 254, 203, 215, 119, 56, 1, 254, 203, 112, 56, 1, 254, 203, 226, 109, 58, - 1, 245, 28, 245, 27, 249, 190, 138, 130, 58, 1, 245, 27, 245, 28, 249, - 190, 138, 130, + 0, 214, 153, 242, 168, 83, 219, 180, 83, 43, 53, 245, 35, 53, 221, 131, + 53, 252, 125, 252, 53, 47, 221, 216, 48, 221, 216, 251, 209, 101, 53, + 247, 155, 237, 238, 241, 82, 213, 251, 214, 180, 18, 205, 85, 18, 102, + 18, 105, 18, 142, 18, 139, 18, 168, 18, 184, 18, 195, 18, 193, 18, 200, + 247, 162, 216, 52, 230, 10, 53, 242, 242, 53, 239, 230, 53, 219, 196, 83, + 247, 153, 251, 199, 7, 6, 1, 62, 7, 6, 1, 251, 150, 7, 6, 1, 249, 34, 7, + 6, 1, 246, 240, 7, 6, 1, 75, 7, 6, 1, 242, 139, 7, 6, 1, 241, 55, 7, 6, + 1, 239, 155, 7, 6, 1, 74, 7, 6, 1, 232, 203, 7, 6, 1, 232, 76, 7, 6, 1, + 149, 7, 6, 1, 229, 28, 7, 6, 1, 226, 33, 7, 6, 1, 76, 7, 6, 1, 222, 67, + 7, 6, 1, 220, 27, 7, 6, 1, 137, 7, 6, 1, 182, 7, 6, 1, 213, 10, 7, 6, 1, + 71, 7, 6, 1, 209, 148, 7, 6, 1, 207, 129, 7, 6, 1, 206, 195, 7, 6, 1, + 206, 123, 7, 6, 1, 205, 159, 47, 49, 145, 218, 225, 214, 180, 48, 49, + 145, 247, 228, 253, 21, 114, 229, 205, 239, 237, 253, 21, 7, 5, 1, 62, 7, + 5, 1, 251, 150, 7, 5, 1, 249, 34, 7, 5, 1, 246, 240, 7, 5, 1, 75, 7, 5, + 1, 242, 139, 7, 5, 1, 241, 55, 7, 5, 1, 239, 155, 7, 5, 1, 74, 7, 5, 1, + 232, 203, 7, 5, 1, 232, 76, 7, 5, 1, 149, 7, 5, 1, 229, 28, 7, 5, 1, 226, + 33, 7, 5, 1, 76, 7, 5, 1, 222, 67, 7, 5, 1, 220, 27, 7, 5, 1, 137, 7, 5, + 1, 182, 7, 5, 1, 213, 10, 7, 5, 1, 71, 7, 5, 1, 209, 148, 7, 5, 1, 207, + 129, 7, 5, 1, 206, 195, 7, 5, 1, 206, 123, 7, 5, 1, 205, 159, 47, 247, + 26, 145, 79, 229, 205, 48, 247, 26, 145, 211, 180, 224, 66, 214, 153, + 233, 2, 242, 168, 83, 248, 131, 53, 220, 165, 53, 247, 25, 53, 206, 43, + 53, 249, 111, 134, 217, 77, 53, 245, 166, 247, 94, 53, 242, 9, 222, 118, + 233, 49, 230, 41, 50, 252, 109, 219, 180, 83, 224, 43, 53, 214, 187, 237, + 239, 219, 23, 53, 228, 13, 245, 245, 53, 220, 217, 53, 213, 139, 105, + 213, 139, 142, 253, 9, 253, 21, 226, 252, 53, 221, 12, 53, 226, 247, 245, + 23, 248, 141, 213, 139, 102, 227, 179, 222, 118, 233, 49, 218, 162, 50, + 252, 109, 219, 180, 83, 207, 146, 241, 116, 119, 219, 204, 207, 146, 241, + 116, 119, 239, 121, 207, 146, 241, 116, 129, 219, 202, 233, 2, 219, 196, + 83, 7, 6, 1, 32, 2, 239, 236, 7, 6, 1, 32, 2, 153, 7, 6, 1, 32, 2, 247, + 227, 7, 6, 1, 32, 2, 211, 180, 7, 6, 1, 32, 2, 245, 166, 7, 6, 1, 32, 2, + 218, 149, 52, 7, 6, 1, 252, 248, 7, 6, 1, 249, 35, 2, 248, 141, 7, 6, 1, + 174, 2, 239, 236, 7, 6, 1, 174, 2, 153, 7, 6, 1, 174, 2, 247, 227, 7, 6, + 1, 174, 2, 245, 166, 7, 6, 1, 237, 225, 2, 239, 236, 7, 6, 1, 237, 225, + 2, 153, 7, 6, 1, 237, 225, 2, 247, 227, 7, 6, 1, 237, 225, 2, 245, 166, + 7, 6, 1, 242, 196, 7, 6, 1, 226, 34, 2, 211, 180, 7, 6, 1, 148, 2, 239, + 236, 7, 6, 1, 148, 2, 153, 7, 6, 1, 148, 2, 247, 227, 7, 6, 1, 148, 2, + 211, 180, 7, 6, 1, 148, 2, 245, 166, 226, 94, 53, 7, 6, 1, 148, 2, 91, 7, + 6, 1, 106, 2, 239, 236, 7, 6, 1, 106, 2, 153, 7, 6, 1, 106, 2, 247, 227, + 7, 6, 1, 106, 2, 245, 166, 7, 6, 1, 206, 124, 2, 153, 7, 6, 1, 211, 246, + 7, 5, 1, 215, 228, 182, 7, 5, 1, 32, 2, 239, 236, 7, 5, 1, 32, 2, 153, 7, + 5, 1, 32, 2, 247, 227, 7, 5, 1, 32, 2, 211, 180, 7, 5, 1, 32, 2, 245, + 166, 7, 5, 1, 32, 2, 218, 149, 52, 7, 5, 1, 252, 248, 7, 5, 1, 249, 35, + 2, 248, 141, 7, 5, 1, 174, 2, 239, 236, 7, 5, 1, 174, 2, 153, 7, 5, 1, + 174, 2, 247, 227, 7, 5, 1, 174, 2, 245, 166, 7, 5, 1, 237, 225, 2, 239, + 236, 7, 5, 1, 237, 225, 2, 153, 7, 5, 1, 237, 225, 2, 247, 227, 7, 5, 1, + 237, 225, 2, 245, 166, 7, 5, 1, 242, 196, 7, 5, 1, 226, 34, 2, 211, 180, + 7, 5, 1, 148, 2, 239, 236, 7, 5, 1, 148, 2, 153, 7, 5, 1, 148, 2, 247, + 227, 7, 5, 1, 148, 2, 211, 180, 7, 5, 1, 148, 2, 245, 166, 245, 75, 53, + 7, 5, 1, 148, 2, 91, 7, 5, 1, 106, 2, 239, 236, 7, 5, 1, 106, 2, 153, 7, + 5, 1, 106, 2, 247, 227, 7, 5, 1, 106, 2, 245, 166, 7, 5, 1, 206, 124, 2, + 153, 7, 5, 1, 211, 246, 7, 5, 1, 206, 124, 2, 245, 166, 7, 6, 1, 32, 2, + 228, 13, 7, 5, 1, 32, 2, 228, 13, 7, 6, 1, 32, 2, 249, 122, 7, 5, 1, 32, + 2, 249, 122, 7, 6, 1, 32, 2, 222, 196, 7, 5, 1, 32, 2, 222, 196, 7, 6, 1, + 249, 35, 2, 153, 7, 5, 1, 249, 35, 2, 153, 7, 6, 1, 249, 35, 2, 247, 227, + 7, 5, 1, 249, 35, 2, 247, 227, 7, 6, 1, 249, 35, 2, 67, 52, 7, 5, 1, 249, + 35, 2, 67, 52, 7, 6, 1, 249, 35, 2, 248, 195, 7, 5, 1, 249, 35, 2, 248, + 195, 7, 6, 1, 246, 241, 2, 248, 195, 7, 5, 1, 246, 241, 2, 248, 195, 7, + 6, 1, 246, 241, 2, 91, 7, 5, 1, 246, 241, 2, 91, 7, 6, 1, 174, 2, 228, + 13, 7, 5, 1, 174, 2, 228, 13, 7, 6, 1, 174, 2, 249, 122, 7, 5, 1, 174, 2, + 249, 122, 7, 6, 1, 174, 2, 67, 52, 7, 5, 1, 174, 2, 67, 52, 7, 6, 1, 174, + 2, 222, 196, 7, 5, 1, 174, 2, 222, 196, 7, 6, 1, 174, 2, 248, 195, 7, 5, + 1, 174, 2, 248, 195, 7, 6, 1, 241, 56, 2, 247, 227, 7, 5, 1, 241, 56, 2, + 247, 227, 7, 6, 1, 241, 56, 2, 249, 122, 7, 5, 1, 241, 56, 2, 249, 122, + 7, 6, 1, 241, 56, 2, 67, 52, 7, 5, 1, 241, 56, 2, 67, 52, 7, 6, 1, 241, + 56, 2, 248, 141, 7, 5, 1, 241, 56, 2, 248, 141, 7, 6, 1, 239, 156, 2, + 247, 227, 7, 5, 1, 239, 156, 2, 247, 227, 7, 6, 1, 239, 156, 2, 91, 7, 5, + 1, 239, 156, 2, 91, 7, 6, 1, 237, 225, 2, 211, 180, 7, 5, 1, 237, 225, 2, + 211, 180, 7, 6, 1, 237, 225, 2, 228, 13, 7, 5, 1, 237, 225, 2, 228, 13, + 7, 6, 1, 237, 225, 2, 249, 122, 7, 5, 1, 237, 225, 2, 249, 122, 7, 6, 1, + 237, 225, 2, 222, 196, 7, 5, 1, 237, 225, 2, 222, 196, 7, 6, 1, 237, 225, + 2, 67, 52, 7, 5, 1, 245, 22, 74, 7, 6, 28, 233, 100, 7, 5, 28, 233, 100, + 7, 6, 1, 232, 204, 2, 247, 227, 7, 5, 1, 232, 204, 2, 247, 227, 7, 6, 1, + 232, 77, 2, 248, 141, 7, 5, 1, 232, 77, 2, 248, 141, 7, 5, 1, 231, 2, 7, + 6, 1, 230, 159, 2, 153, 7, 5, 1, 230, 159, 2, 153, 7, 6, 1, 230, 159, 2, + 248, 141, 7, 5, 1, 230, 159, 2, 248, 141, 7, 6, 1, 230, 159, 2, 248, 195, + 7, 5, 1, 230, 159, 2, 248, 195, 7, 6, 1, 230, 159, 2, 226, 247, 245, 23, + 7, 5, 1, 230, 159, 2, 226, 247, 245, 23, 7, 6, 1, 230, 159, 2, 91, 7, 5, + 1, 230, 159, 2, 91, 7, 6, 1, 226, 34, 2, 153, 7, 5, 1, 226, 34, 2, 153, + 7, 6, 1, 226, 34, 2, 248, 141, 7, 5, 1, 226, 34, 2, 248, 141, 7, 6, 1, + 226, 34, 2, 248, 195, 7, 5, 1, 226, 34, 2, 248, 195, 7, 5, 1, 226, 34, + 220, 141, 249, 46, 252, 53, 7, 6, 1, 243, 28, 7, 5, 1, 243, 28, 7, 6, 1, + 148, 2, 228, 13, 7, 5, 1, 148, 2, 228, 13, 7, 6, 1, 148, 2, 249, 122, 7, + 5, 1, 148, 2, 249, 122, 7, 6, 1, 148, 2, 50, 153, 7, 5, 1, 148, 2, 50, + 153, 7, 6, 28, 222, 206, 7, 5, 28, 222, 206, 7, 6, 1, 219, 150, 2, 153, + 7, 5, 1, 219, 150, 2, 153, 7, 6, 1, 219, 150, 2, 248, 141, 7, 5, 1, 219, + 150, 2, 248, 141, 7, 6, 1, 219, 150, 2, 248, 195, 7, 5, 1, 219, 150, 2, + 248, 195, 7, 6, 1, 218, 1, 2, 153, 7, 5, 1, 218, 1, 2, 153, 7, 6, 1, 218, + 1, 2, 247, 227, 7, 5, 1, 218, 1, 2, 247, 227, 7, 6, 1, 218, 1, 2, 248, + 141, 7, 5, 1, 218, 1, 2, 248, 141, 7, 6, 1, 218, 1, 2, 248, 195, 7, 5, 1, + 218, 1, 2, 248, 195, 7, 6, 1, 213, 11, 2, 248, 141, 7, 5, 1, 213, 11, 2, + 248, 141, 7, 6, 1, 213, 11, 2, 248, 195, 7, 5, 1, 213, 11, 2, 248, 195, + 7, 6, 1, 213, 11, 2, 91, 7, 5, 1, 213, 11, 2, 91, 7, 6, 1, 106, 2, 211, + 180, 7, 5, 1, 106, 2, 211, 180, 7, 6, 1, 106, 2, 228, 13, 7, 5, 1, 106, + 2, 228, 13, 7, 6, 1, 106, 2, 249, 122, 7, 5, 1, 106, 2, 249, 122, 7, 6, + 1, 106, 2, 218, 149, 52, 7, 5, 1, 106, 2, 218, 149, 52, 7, 6, 1, 106, 2, + 50, 153, 7, 5, 1, 106, 2, 50, 153, 7, 6, 1, 106, 2, 222, 196, 7, 5, 1, + 106, 2, 222, 196, 7, 6, 1, 207, 130, 2, 247, 227, 7, 5, 1, 207, 130, 2, + 247, 227, 7, 6, 1, 206, 124, 2, 247, 227, 7, 5, 1, 206, 124, 2, 247, 227, + 7, 6, 1, 206, 124, 2, 245, 166, 7, 6, 1, 205, 160, 2, 153, 7, 5, 1, 205, + 160, 2, 153, 7, 6, 1, 205, 160, 2, 67, 52, 7, 5, 1, 205, 160, 2, 67, 52, + 7, 6, 1, 205, 160, 2, 248, 195, 7, 5, 1, 205, 160, 2, 248, 195, 7, 5, 1, + 152, 182, 7, 5, 1, 63, 2, 91, 7, 6, 1, 63, 2, 109, 7, 6, 1, 63, 2, 211, + 99, 7, 5, 1, 63, 2, 211, 99, 7, 6, 1, 135, 184, 7, 5, 1, 135, 184, 7, 6, + 1, 222, 142, 76, 7, 6, 1, 249, 35, 2, 109, 7, 5, 1, 249, 35, 2, 109, 7, + 6, 1, 252, 223, 246, 240, 7, 6, 1, 246, 241, 2, 109, 7, 6, 1, 246, 241, + 2, 211, 99, 7, 5, 1, 246, 241, 2, 211, 99, 7, 5, 1, 201, 245, 227, 7, 6, + 1, 218, 224, 75, 7, 6, 1, 217, 100, 7, 6, 1, 222, 142, 75, 7, 6, 1, 242, + 140, 2, 109, 7, 5, 1, 242, 140, 2, 109, 7, 6, 1, 241, 56, 2, 109, 7, 6, + 1, 240, 215, 7, 5, 1, 238, 17, 7, 6, 1, 232, 249, 7, 6, 1, 237, 225, 2, + 91, 7, 6, 1, 232, 77, 2, 109, 7, 5, 1, 232, 77, 2, 109, 7, 5, 1, 230, + 159, 2, 134, 7, 5, 1, 230, 104, 2, 91, 7, 6, 1, 201, 229, 28, 7, 6, 1, + 226, 34, 2, 47, 109, 7, 5, 1, 226, 34, 2, 152, 48, 230, 34, 7, 6, 1, 148, + 2, 226, 247, 211, 180, 7, 6, 1, 148, 2, 238, 69, 7, 5, 1, 148, 2, 238, + 69, 7, 6, 1, 222, 191, 7, 5, 1, 222, 191, 7, 6, 1, 222, 68, 2, 109, 7, 5, + 1, 222, 68, 2, 109, 7, 1, 205, 216, 7, 6, 1, 135, 105, 7, 5, 1, 135, 105, + 7, 6, 1, 242, 215, 7, 1, 218, 224, 242, 216, 229, 111, 7, 5, 1, 213, 11, + 2, 222, 26, 109, 7, 6, 1, 213, 11, 2, 109, 7, 5, 1, 213, 11, 2, 109, 7, + 6, 1, 213, 11, 2, 218, 230, 109, 7, 6, 1, 106, 2, 238, 69, 7, 5, 1, 106, + 2, 238, 69, 7, 6, 1, 209, 200, 7, 6, 1, 209, 149, 2, 109, 7, 6, 1, 206, + 124, 2, 109, 7, 5, 1, 206, 124, 2, 109, 7, 6, 1, 205, 160, 2, 91, 7, 5, + 1, 205, 160, 2, 91, 7, 6, 1, 242, 141, 7, 6, 1, 242, 142, 218, 223, 7, 5, + 1, 242, 142, 218, 223, 7, 5, 1, 242, 142, 2, 212, 191, 7, 1, 118, 2, 91, + 7, 6, 1, 135, 168, 7, 5, 1, 135, 168, 7, 1, 233, 2, 240, 25, 213, 252, 2, + 91, 7, 1, 206, 198, 7, 1, 245, 220, 247, 203, 7, 1, 230, 78, 247, 203, 7, + 1, 252, 137, 247, 203, 7, 1, 218, 230, 247, 203, 7, 6, 1, 243, 198, 2, + 248, 195, 7, 6, 1, 246, 241, 2, 5, 1, 205, 160, 2, 248, 195, 7, 5, 1, + 243, 198, 2, 248, 195, 7, 6, 1, 229, 176, 7, 6, 1, 230, 159, 2, 5, 1, + 232, 203, 7, 5, 1, 229, 176, 7, 6, 1, 224, 181, 7, 6, 1, 226, 34, 2, 5, + 1, 232, 203, 7, 5, 1, 224, 181, 7, 6, 1, 32, 2, 248, 195, 7, 5, 1, 32, 2, + 248, 195, 7, 6, 1, 237, 225, 2, 248, 195, 7, 5, 1, 237, 225, 2, 248, 195, + 7, 6, 1, 148, 2, 248, 195, 7, 5, 1, 148, 2, 248, 195, 7, 6, 1, 106, 2, + 248, 195, 7, 5, 1, 106, 2, 248, 195, 7, 6, 1, 106, 2, 245, 167, 23, 228, + 13, 7, 5, 1, 106, 2, 245, 167, 23, 228, 13, 7, 6, 1, 106, 2, 245, 167, + 23, 153, 7, 5, 1, 106, 2, 245, 167, 23, 153, 7, 6, 1, 106, 2, 245, 167, + 23, 248, 195, 7, 5, 1, 106, 2, 245, 167, 23, 248, 195, 7, 6, 1, 106, 2, + 245, 167, 23, 239, 236, 7, 5, 1, 106, 2, 245, 167, 23, 239, 236, 7, 5, 1, + 201, 75, 7, 6, 1, 32, 2, 245, 167, 23, 228, 13, 7, 5, 1, 32, 2, 245, 167, + 23, 228, 13, 7, 6, 1, 32, 2, 67, 84, 23, 228, 13, 7, 5, 1, 32, 2, 67, 84, + 23, 228, 13, 7, 6, 1, 252, 249, 2, 228, 13, 7, 5, 1, 252, 249, 2, 228, + 13, 7, 6, 1, 241, 56, 2, 91, 7, 5, 1, 241, 56, 2, 91, 7, 6, 1, 241, 56, + 2, 248, 195, 7, 5, 1, 241, 56, 2, 248, 195, 7, 6, 1, 232, 77, 2, 248, + 195, 7, 5, 1, 232, 77, 2, 248, 195, 7, 6, 1, 148, 2, 222, 196, 7, 5, 1, + 148, 2, 222, 196, 7, 6, 1, 148, 2, 222, 197, 23, 228, 13, 7, 5, 1, 148, + 2, 222, 197, 23, 228, 13, 7, 6, 1, 242, 142, 2, 248, 195, 7, 5, 1, 242, + 142, 2, 248, 195, 7, 5, 1, 232, 204, 2, 248, 195, 7, 6, 1, 243, 197, 7, + 6, 1, 246, 241, 2, 5, 1, 205, 159, 7, 5, 1, 243, 197, 7, 6, 1, 241, 56, + 2, 153, 7, 5, 1, 241, 56, 2, 153, 7, 6, 1, 238, 14, 7, 6, 1, 206, 198, 7, + 6, 1, 226, 34, 2, 239, 236, 7, 5, 1, 226, 34, 2, 239, 236, 7, 6, 1, 32, + 2, 218, 149, 84, 23, 153, 7, 5, 1, 32, 2, 218, 149, 84, 23, 153, 7, 6, 1, + 252, 249, 2, 153, 7, 5, 1, 252, 249, 2, 153, 7, 6, 1, 148, 2, 213, 225, + 23, 153, 7, 5, 1, 148, 2, 213, 225, 23, 153, 7, 6, 1, 32, 2, 50, 239, + 236, 7, 5, 1, 32, 2, 50, 239, 236, 7, 6, 1, 32, 2, 233, 2, 249, 122, 7, + 5, 1, 32, 2, 233, 2, 249, 122, 7, 6, 1, 174, 2, 50, 239, 236, 7, 5, 1, + 174, 2, 50, 239, 236, 7, 6, 1, 174, 2, 233, 2, 249, 122, 7, 5, 1, 174, 2, + 233, 2, 249, 122, 7, 6, 1, 237, 225, 2, 50, 239, 236, 7, 5, 1, 237, 225, + 2, 50, 239, 236, 7, 6, 1, 237, 225, 2, 233, 2, 249, 122, 7, 5, 1, 237, + 225, 2, 233, 2, 249, 122, 7, 6, 1, 148, 2, 50, 239, 236, 7, 5, 1, 148, 2, + 50, 239, 236, 7, 6, 1, 148, 2, 233, 2, 249, 122, 7, 5, 1, 148, 2, 233, 2, + 249, 122, 7, 6, 1, 219, 150, 2, 50, 239, 236, 7, 5, 1, 219, 150, 2, 50, + 239, 236, 7, 6, 1, 219, 150, 2, 233, 2, 249, 122, 7, 5, 1, 219, 150, 2, + 233, 2, 249, 122, 7, 6, 1, 106, 2, 50, 239, 236, 7, 5, 1, 106, 2, 50, + 239, 236, 7, 6, 1, 106, 2, 233, 2, 249, 122, 7, 5, 1, 106, 2, 233, 2, + 249, 122, 7, 6, 1, 218, 1, 2, 247, 156, 55, 7, 5, 1, 218, 1, 2, 247, 156, + 55, 7, 6, 1, 213, 11, 2, 247, 156, 55, 7, 5, 1, 213, 11, 2, 247, 156, 55, + 7, 6, 1, 205, 234, 7, 5, 1, 205, 234, 7, 6, 1, 239, 156, 2, 248, 195, 7, + 5, 1, 239, 156, 2, 248, 195, 7, 6, 1, 226, 34, 2, 152, 48, 230, 34, 7, 5, + 1, 246, 241, 2, 247, 27, 7, 6, 1, 222, 97, 7, 5, 1, 222, 97, 7, 6, 1, + 205, 160, 2, 109, 7, 5, 1, 205, 160, 2, 109, 7, 6, 1, 32, 2, 67, 52, 7, + 5, 1, 32, 2, 67, 52, 7, 6, 1, 174, 2, 248, 141, 7, 5, 1, 174, 2, 248, + 141, 7, 6, 1, 148, 2, 245, 167, 23, 228, 13, 7, 5, 1, 148, 2, 245, 167, + 23, 228, 13, 7, 6, 1, 148, 2, 211, 181, 23, 228, 13, 7, 5, 1, 148, 2, + 211, 181, 23, 228, 13, 7, 6, 1, 148, 2, 67, 52, 7, 5, 1, 148, 2, 67, 52, + 7, 6, 1, 148, 2, 67, 84, 23, 228, 13, 7, 5, 1, 148, 2, 67, 84, 23, 228, + 13, 7, 6, 1, 206, 124, 2, 228, 13, 7, 5, 1, 206, 124, 2, 228, 13, 7, 5, + 1, 230, 159, 2, 247, 27, 7, 5, 1, 226, 34, 2, 247, 27, 7, 5, 1, 213, 11, + 2, 247, 27, 7, 5, 1, 245, 22, 232, 203, 7, 5, 1, 246, 64, 245, 127, 7, 5, + 1, 219, 215, 245, 127, 7, 6, 1, 32, 2, 91, 7, 6, 1, 249, 35, 2, 91, 7, 5, + 1, 249, 35, 2, 91, 7, 6, 1, 230, 159, 2, 134, 7, 6, 1, 213, 11, 2, 245, + 163, 91, 7, 5, 1, 218, 1, 2, 213, 109, 212, 191, 7, 5, 1, 205, 160, 2, + 213, 109, 212, 191, 7, 6, 1, 240, 25, 213, 251, 7, 5, 1, 240, 25, 213, + 251, 7, 6, 1, 63, 2, 91, 7, 6, 1, 106, 134, 7, 6, 1, 201, 209, 148, 7, 6, + 1, 174, 2, 91, 7, 5, 1, 174, 2, 91, 7, 6, 1, 232, 204, 2, 91, 7, 5, 1, + 232, 204, 2, 91, 7, 6, 1, 5, 220, 28, 2, 238, 130, 212, 191, 7, 5, 1, + 220, 28, 2, 238, 130, 212, 191, 7, 6, 1, 219, 150, 2, 91, 7, 5, 1, 219, + 150, 2, 91, 7, 6, 1, 206, 124, 2, 91, 7, 5, 1, 206, 124, 2, 91, 7, 5, 1, + 201, 62, 7, 5, 1, 252, 144, 7, 5, 1, 201, 252, 144, 7, 5, 1, 63, 2, 109, + 7, 5, 1, 222, 142, 76, 7, 5, 1, 249, 35, 2, 247, 27, 7, 5, 1, 246, 241, + 2, 212, 191, 7, 5, 1, 246, 241, 2, 109, 7, 5, 1, 218, 224, 75, 7, 5, 1, + 217, 100, 7, 5, 1, 217, 101, 2, 109, 7, 5, 1, 222, 142, 75, 7, 5, 1, 218, + 224, 222, 142, 75, 7, 5, 1, 218, 224, 222, 142, 174, 2, 109, 7, 5, 1, + 247, 192, 218, 224, 222, 142, 75, 7, 5, 1, 245, 22, 232, 204, 2, 91, 7, + 5, 1, 241, 56, 2, 109, 7, 5, 1, 121, 241, 55, 7, 1, 5, 6, 241, 55, 7, 5, + 1, 240, 215, 7, 5, 1, 219, 75, 238, 69, 7, 5, 1, 201, 239, 155, 7, 5, 1, + 239, 156, 2, 109, 7, 5, 1, 239, 40, 2, 109, 7, 5, 1, 237, 225, 2, 91, 7, + 5, 1, 232, 249, 7, 1, 5, 6, 74, 7, 5, 1, 230, 159, 2, 226, 247, 211, 180, + 7, 5, 1, 230, 159, 2, 250, 24, 7, 5, 1, 230, 159, 2, 218, 230, 109, 7, 5, + 1, 229, 251, 7, 5, 1, 201, 229, 28, 7, 5, 1, 201, 229, 29, 2, 152, 230, + 34, 7, 5, 1, 229, 29, 2, 109, 7, 5, 1, 226, 34, 2, 47, 109, 7, 5, 1, 226, + 34, 2, 218, 230, 109, 7, 1, 5, 6, 226, 33, 7, 5, 1, 250, 123, 76, 7, 1, + 5, 6, 222, 206, 7, 5, 1, 247, 192, 222, 170, 7, 5, 1, 221, 78, 7, 5, 1, + 201, 137, 7, 5, 1, 201, 219, 150, 2, 152, 230, 34, 7, 5, 1, 201, 219, + 150, 2, 109, 7, 5, 1, 219, 150, 2, 152, 230, 34, 7, 5, 1, 219, 150, 2, + 212, 191, 7, 5, 1, 219, 150, 2, 241, 210, 7, 5, 1, 218, 224, 219, 150, 2, + 241, 210, 7, 1, 5, 6, 137, 7, 1, 5, 6, 233, 2, 137, 7, 5, 1, 218, 1, 2, + 109, 7, 5, 1, 242, 215, 7, 5, 1, 245, 22, 232, 204, 2, 213, 225, 23, 109, + 7, 5, 1, 214, 104, 218, 224, 242, 215, 7, 5, 1, 242, 216, 2, 247, 27, 7, + 5, 1, 201, 213, 10, 7, 5, 1, 213, 11, 2, 218, 230, 109, 7, 5, 1, 106, + 134, 7, 5, 1, 209, 200, 7, 5, 1, 209, 149, 2, 109, 7, 5, 1, 201, 209, + 148, 7, 5, 1, 201, 207, 129, 7, 5, 1, 201, 206, 123, 7, 1, 5, 6, 206, + 123, 7, 5, 1, 205, 160, 2, 218, 230, 109, 7, 5, 1, 205, 160, 2, 247, 27, + 7, 5, 1, 242, 141, 7, 5, 1, 242, 142, 2, 247, 27, 7, 1, 240, 25, 213, + 251, 7, 1, 221, 84, 208, 170, 241, 104, 7, 1, 233, 2, 240, 25, 213, 251, + 7, 1, 213, 232, 249, 34, 7, 1, 249, 228, 247, 203, 7, 1, 5, 6, 251, 150, + 7, 5, 1, 247, 192, 222, 142, 75, 7, 1, 5, 6, 241, 56, 2, 109, 7, 1, 5, 6, + 239, 155, 7, 5, 1, 232, 204, 2, 247, 56, 7, 5, 1, 201, 232, 76, 7, 1, 5, + 6, 149, 7, 5, 1, 220, 28, 2, 109, 7, 1, 240, 25, 213, 252, 2, 91, 7, 1, + 218, 224, 240, 25, 213, 252, 2, 91, 7, 5, 1, 243, 198, 245, 127, 7, 5, 1, + 245, 194, 245, 127, 7, 5, 1, 243, 198, 245, 128, 2, 247, 27, 7, 5, 1, + 210, 245, 245, 127, 7, 5, 1, 212, 85, 245, 127, 7, 5, 1, 212, 138, 245, + 128, 2, 247, 27, 7, 5, 1, 242, 7, 245, 127, 7, 5, 1, 229, 83, 245, 127, + 7, 5, 1, 229, 30, 245, 127, 7, 1, 249, 228, 221, 130, 7, 1, 249, 236, + 221, 130, 7, 5, 1, 201, 239, 156, 2, 241, 210, 7, 5, 1, 201, 239, 156, 2, + 241, 211, 23, 212, 191, 65, 1, 5, 239, 155, 65, 1, 5, 239, 156, 2, 109, + 65, 1, 5, 232, 203, 65, 1, 5, 137, 65, 1, 5, 201, 137, 65, 1, 5, 201, + 219, 150, 2, 109, 65, 1, 5, 6, 233, 2, 137, 65, 1, 5, 207, 129, 65, 1, 5, + 206, 123, 65, 1, 220, 127, 65, 1, 50, 220, 127, 65, 1, 201, 247, 155, 65, + 1, 252, 53, 65, 1, 218, 224, 247, 155, 65, 1, 48, 160, 218, 148, 65, 1, + 47, 160, 218, 148, 65, 1, 240, 25, 213, 251, 65, 1, 218, 224, 240, 25, + 213, 251, 65, 1, 47, 251, 243, 65, 1, 48, 251, 243, 65, 1, 120, 251, 243, + 65, 1, 130, 251, 243, 65, 1, 247, 228, 253, 21, 248, 195, 65, 1, 79, 229, + 205, 65, 1, 228, 13, 65, 1, 253, 9, 253, 21, 65, 1, 239, 237, 253, 21, + 65, 1, 114, 79, 229, 205, 65, 1, 114, 228, 13, 65, 1, 114, 239, 237, 253, + 21, 65, 1, 114, 253, 9, 253, 21, 65, 1, 211, 48, 247, 162, 65, 1, 160, + 211, 48, 247, 162, 65, 1, 248, 127, 48, 160, 218, 148, 65, 1, 248, 127, + 47, 160, 218, 148, 65, 1, 120, 212, 201, 65, 1, 130, 212, 201, 65, 1, + 101, 53, 65, 1, 226, 202, 53, 249, 122, 67, 52, 218, 149, 52, 222, 196, + 5, 211, 180, 50, 253, 9, 253, 21, 65, 1, 218, 209, 109, 65, 1, 247, 60, + 253, 21, 65, 1, 5, 240, 215, 65, 1, 5, 149, 65, 1, 5, 182, 65, 1, 5, 206, + 195, 65, 1, 5, 218, 224, 240, 25, 213, 251, 65, 1, 242, 156, 135, 134, + 65, 1, 127, 135, 134, 65, 1, 226, 249, 135, 134, 65, 1, 114, 135, 134, + 65, 1, 242, 155, 135, 134, 65, 1, 206, 1, 245, 217, 135, 83, 65, 1, 206, + 76, 245, 217, 135, 83, 65, 1, 208, 168, 65, 1, 209, 230, 65, 1, 50, 252, + 53, 65, 1, 114, 130, 251, 243, 65, 1, 114, 120, 251, 243, 65, 1, 114, 47, + 251, 243, 65, 1, 114, 48, 251, 243, 65, 1, 114, 218, 148, 65, 1, 226, + 247, 239, 237, 253, 21, 65, 1, 226, 247, 50, 239, 237, 253, 21, 65, 1, + 226, 247, 50, 253, 9, 253, 21, 65, 1, 114, 211, 180, 65, 1, 219, 81, 247, + 162, 65, 1, 250, 42, 127, 211, 118, 65, 1, 243, 34, 127, 211, 118, 65, 1, + 250, 42, 114, 211, 118, 65, 1, 243, 34, 114, 211, 118, 65, 1, 215, 205, + 65, 1, 222, 142, 215, 205, 65, 1, 114, 47, 45, 36, 239, 237, 253, 21, 36, + 253, 9, 253, 21, 36, 247, 228, 253, 21, 36, 211, 180, 36, 228, 13, 36, + 222, 81, 36, 249, 122, 36, 67, 52, 36, 245, 166, 36, 238, 130, 52, 36, + 218, 149, 52, 36, 50, 253, 9, 253, 21, 36, 248, 195, 36, 79, 229, 206, + 52, 36, 50, 79, 229, 206, 52, 36, 50, 239, 237, 253, 21, 36, 248, 217, + 36, 233, 2, 249, 122, 36, 201, 247, 156, 52, 36, 247, 156, 52, 36, 218, + 224, 247, 156, 52, 36, 247, 156, 84, 218, 167, 36, 239, 237, 253, 22, 55, + 36, 253, 9, 253, 22, 55, 36, 47, 212, 202, 55, 36, 48, 212, 202, 55, 36, + 47, 252, 109, 52, 36, 238, 69, 36, 47, 160, 218, 149, 55, 36, 120, 212, + 202, 55, 36, 130, 212, 202, 55, 36, 101, 3, 55, 36, 226, 202, 3, 55, 36, + 222, 24, 238, 130, 55, 36, 218, 230, 238, 130, 55, 36, 67, 55, 36, 245, + 167, 55, 36, 218, 149, 55, 36, 247, 156, 55, 36, 248, 141, 36, 222, 196, + 36, 79, 229, 206, 55, 36, 249, 116, 55, 36, 233, 2, 50, 252, 20, 55, 36, + 248, 196, 55, 36, 247, 228, 253, 22, 55, 36, 249, 123, 55, 36, 233, 2, + 249, 123, 55, 36, 211, 181, 55, 36, 228, 14, 55, 36, 114, 229, 205, 36, + 50, 114, 229, 205, 36, 211, 181, 222, 82, 36, 215, 144, 213, 225, 222, + 82, 36, 152, 213, 225, 222, 82, 36, 215, 144, 214, 181, 222, 82, 36, 152, + 214, 181, 222, 82, 36, 48, 160, 218, 149, 55, 36, 233, 2, 249, 116, 55, + 36, 49, 55, 36, 217, 85, 55, 36, 206, 196, 52, 36, 79, 211, 180, 36, 50, + 222, 81, 36, 239, 237, 135, 83, 36, 253, 9, 135, 83, 36, 27, 221, 124, + 36, 27, 231, 23, 36, 27, 245, 160, 211, 106, 36, 27, 205, 221, 36, 249, + 116, 52, 36, 242, 242, 3, 55, 36, 50, 79, 229, 206, 55, 36, 47, 252, 109, + 55, 36, 224, 43, 211, 181, 52, 36, 238, 136, 52, 36, 252, 149, 146, 211, + 130, 52, 36, 47, 48, 51, 55, 36, 167, 51, 55, 36, 239, 242, 232, 117, 36, + 48, 251, 244, 52, 36, 47, 160, 218, 149, 52, 36, 242, 4, 36, 206, 196, + 55, 36, 47, 251, 244, 55, 36, 48, 251, 244, 55, 36, 48, 251, 244, 23, + 120, 251, 244, 55, 36, 48, 160, 218, 149, 52, 36, 67, 84, 218, 167, 36, + 251, 210, 55, 36, 50, 218, 149, 55, 36, 205, 31, 52, 36, 50, 249, 123, + 55, 36, 50, 249, 122, 36, 50, 228, 13, 36, 50, 228, 14, 55, 36, 50, 211, + 180, 36, 50, 233, 2, 249, 122, 36, 50, 86, 51, 55, 36, 7, 5, 1, 62, 36, + 7, 5, 1, 75, 36, 7, 5, 1, 74, 36, 7, 5, 1, 76, 36, 7, 5, 1, 71, 36, 7, 5, + 1, 249, 34, 36, 7, 5, 1, 246, 240, 36, 7, 5, 1, 239, 155, 36, 7, 5, 1, + 229, 28, 36, 7, 5, 1, 137, 36, 7, 5, 1, 213, 10, 36, 7, 5, 1, 209, 148, + 36, 7, 5, 1, 206, 195, 27, 6, 1, 239, 28, 27, 5, 1, 239, 28, 27, 6, 1, + 252, 19, 217, 154, 27, 5, 1, 252, 19, 217, 154, 27, 223, 177, 53, 27, + 229, 92, 223, 177, 53, 27, 6, 1, 222, 10, 245, 134, 27, 5, 1, 222, 10, + 245, 134, 27, 205, 221, 27, 5, 218, 224, 229, 64, 215, 64, 93, 27, 5, + 244, 21, 229, 64, 215, 64, 93, 27, 5, 218, 224, 244, 21, 229, 64, 215, + 64, 93, 27, 219, 196, 83, 27, 6, 1, 205, 227, 27, 211, 106, 27, 245, 160, + 211, 106, 27, 6, 1, 252, 145, 2, 211, 106, 27, 252, 96, 212, 109, 27, 6, + 1, 242, 245, 2, 211, 106, 27, 6, 1, 242, 202, 2, 211, 106, 27, 6, 1, 232, + 250, 2, 211, 106, 27, 6, 1, 222, 169, 2, 211, 106, 27, 6, 1, 209, 201, 2, + 211, 106, 27, 6, 1, 222, 171, 2, 211, 106, 27, 5, 1, 232, 250, 2, 245, + 160, 23, 211, 106, 27, 6, 1, 252, 144, 27, 6, 1, 250, 8, 27, 6, 1, 240, + 215, 27, 6, 1, 245, 227, 27, 6, 1, 242, 244, 27, 6, 1, 205, 84, 27, 6, 1, + 242, 201, 27, 6, 1, 212, 23, 27, 6, 1, 232, 249, 27, 6, 1, 232, 14, 27, + 6, 1, 230, 102, 27, 6, 1, 226, 114, 27, 6, 1, 223, 217, 27, 6, 1, 206, + 169, 27, 6, 1, 222, 168, 27, 6, 1, 221, 53, 27, 6, 1, 218, 210, 27, 6, 1, + 215, 63, 27, 6, 1, 212, 151, 27, 6, 1, 209, 200, 27, 6, 1, 221, 78, 27, + 6, 1, 248, 58, 27, 6, 1, 220, 93, 27, 6, 1, 222, 170, 27, 6, 1, 232, 250, + 2, 245, 159, 27, 6, 1, 209, 201, 2, 245, 159, 27, 5, 1, 252, 145, 2, 211, + 106, 27, 5, 1, 242, 245, 2, 211, 106, 27, 5, 1, 242, 202, 2, 211, 106, + 27, 5, 1, 232, 250, 2, 211, 106, 27, 5, 1, 209, 201, 2, 245, 160, 23, + 211, 106, 27, 5, 1, 252, 144, 27, 5, 1, 250, 8, 27, 5, 1, 240, 215, 27, + 5, 1, 245, 227, 27, 5, 1, 242, 244, 27, 5, 1, 205, 84, 27, 5, 1, 242, + 201, 27, 5, 1, 212, 23, 27, 5, 1, 232, 249, 27, 5, 1, 232, 14, 27, 5, 1, + 230, 102, 27, 5, 1, 226, 114, 27, 5, 1, 223, 217, 27, 5, 1, 206, 169, 27, + 5, 1, 222, 168, 27, 5, 1, 221, 53, 27, 5, 1, 218, 210, 27, 5, 1, 42, 215, + 63, 27, 5, 1, 215, 63, 27, 5, 1, 212, 151, 27, 5, 1, 209, 200, 27, 5, 1, + 221, 78, 27, 5, 1, 248, 58, 27, 5, 1, 220, 93, 27, 5, 1, 222, 170, 27, 5, + 1, 232, 250, 2, 245, 159, 27, 5, 1, 209, 201, 2, 245, 159, 27, 5, 1, 222, + 169, 2, 211, 106, 27, 5, 1, 209, 201, 2, 211, 106, 27, 5, 1, 222, 171, 2, + 211, 106, 27, 6, 232, 42, 93, 27, 250, 9, 93, 27, 212, 24, 93, 27, 209, + 201, 2, 238, 130, 93, 27, 209, 201, 2, 253, 9, 23, 238, 130, 93, 27, 209, + 201, 2, 245, 167, 23, 238, 130, 93, 27, 221, 79, 93, 27, 221, 54, 93, 27, + 232, 42, 93, 27, 1, 252, 19, 231, 27, 27, 5, 1, 252, 19, 231, 27, 27, 1, + 214, 5, 27, 5, 1, 214, 5, 27, 1, 245, 134, 27, 5, 1, 245, 134, 27, 1, + 231, 27, 27, 5, 1, 231, 27, 27, 1, 217, 154, 27, 5, 1, 217, 154, 81, 6, + 1, 215, 206, 81, 5, 1, 215, 206, 81, 6, 1, 242, 13, 81, 5, 1, 242, 13, + 81, 6, 1, 231, 150, 81, 5, 1, 231, 150, 81, 6, 1, 238, 122, 81, 5, 1, + 238, 122, 81, 6, 1, 240, 210, 81, 5, 1, 240, 210, 81, 6, 1, 215, 173, 81, + 5, 1, 215, 173, 81, 6, 1, 245, 242, 81, 5, 1, 245, 242, 27, 232, 15, 93, + 27, 218, 211, 93, 27, 229, 64, 215, 64, 93, 27, 1, 205, 227, 27, 6, 212, + 24, 93, 27, 229, 64, 242, 245, 93, 27, 218, 224, 229, 64, 242, 245, 93, + 27, 6, 1, 215, 158, 27, 5, 1, 215, 158, 27, 6, 229, 64, 215, 64, 93, 27, + 6, 1, 217, 151, 27, 5, 1, 217, 151, 27, 218, 211, 2, 213, 225, 93, 27, 6, + 218, 224, 229, 64, 215, 64, 93, 27, 6, 244, 21, 229, 64, 215, 64, 93, 27, + 6, 218, 224, 244, 21, 229, 64, 215, 64, 93, 34, 6, 1, 233, 130, 2, 239, + 236, 34, 6, 1, 232, 253, 34, 6, 1, 245, 68, 34, 6, 1, 240, 32, 34, 6, 1, + 209, 246, 233, 129, 34, 6, 1, 243, 193, 34, 6, 1, 249, 44, 74, 34, 6, 1, + 206, 11, 34, 6, 1, 232, 182, 34, 6, 1, 229, 175, 34, 6, 1, 224, 173, 34, + 6, 1, 210, 231, 34, 6, 1, 231, 74, 34, 6, 1, 237, 225, 2, 239, 236, 34, + 6, 1, 215, 144, 71, 34, 6, 1, 243, 189, 34, 6, 1, 62, 34, 6, 1, 250, 61, + 34, 6, 1, 209, 39, 34, 6, 1, 240, 85, 34, 6, 1, 246, 9, 34, 6, 1, 233, + 129, 34, 6, 1, 205, 72, 34, 6, 1, 205, 93, 34, 6, 1, 74, 34, 6, 1, 215, + 144, 74, 34, 6, 1, 172, 34, 6, 1, 243, 68, 34, 6, 1, 243, 50, 34, 6, 1, + 243, 41, 34, 6, 1, 76, 34, 6, 1, 221, 174, 34, 6, 1, 242, 235, 34, 6, 1, + 242, 225, 34, 6, 1, 212, 131, 34, 6, 1, 71, 34, 6, 1, 243, 97, 34, 6, 1, + 155, 34, 6, 1, 210, 237, 34, 6, 1, 248, 82, 34, 6, 1, 216, 2, 34, 6, 1, + 215, 217, 34, 6, 1, 239, 94, 53, 34, 6, 1, 206, 30, 34, 6, 1, 214, 187, + 53, 34, 6, 1, 75, 34, 6, 1, 205, 213, 34, 6, 1, 190, 34, 5, 1, 62, 34, 5, + 1, 250, 61, 34, 5, 1, 209, 39, 34, 5, 1, 240, 85, 34, 5, 1, 246, 9, 34, + 5, 1, 233, 129, 34, 5, 1, 205, 72, 34, 5, 1, 205, 93, 34, 5, 1, 74, 34, + 5, 1, 215, 144, 74, 34, 5, 1, 172, 34, 5, 1, 243, 68, 34, 5, 1, 243, 50, + 34, 5, 1, 243, 41, 34, 5, 1, 76, 34, 5, 1, 221, 174, 34, 5, 1, 242, 235, + 34, 5, 1, 242, 225, 34, 5, 1, 212, 131, 34, 5, 1, 71, 34, 5, 1, 243, 97, + 34, 5, 1, 155, 34, 5, 1, 210, 237, 34, 5, 1, 248, 82, 34, 5, 1, 216, 2, + 34, 5, 1, 215, 217, 34, 5, 1, 239, 94, 53, 34, 5, 1, 206, 30, 34, 5, 1, + 214, 187, 53, 34, 5, 1, 75, 34, 5, 1, 205, 213, 34, 5, 1, 190, 34, 5, 1, + 233, 130, 2, 239, 236, 34, 5, 1, 232, 253, 34, 5, 1, 245, 68, 34, 5, 1, + 240, 32, 34, 5, 1, 209, 246, 233, 129, 34, 5, 1, 243, 193, 34, 5, 1, 249, + 44, 74, 34, 5, 1, 206, 11, 34, 5, 1, 232, 182, 34, 5, 1, 229, 175, 34, 5, + 1, 224, 173, 34, 5, 1, 210, 231, 34, 5, 1, 231, 74, 34, 5, 1, 237, 225, + 2, 239, 236, 34, 5, 1, 215, 144, 71, 34, 5, 1, 243, 189, 34, 6, 1, 222, + 170, 34, 5, 1, 222, 170, 34, 6, 1, 206, 65, 34, 5, 1, 206, 65, 34, 6, 1, + 232, 247, 75, 34, 5, 1, 232, 247, 75, 34, 6, 1, 229, 180, 205, 183, 34, + 5, 1, 229, 180, 205, 183, 34, 6, 1, 232, 247, 229, 180, 205, 183, 34, 5, + 1, 232, 247, 229, 180, 205, 183, 34, 6, 1, 249, 231, 205, 183, 34, 5, 1, + 249, 231, 205, 183, 34, 6, 1, 232, 247, 249, 231, 205, 183, 34, 5, 1, + 232, 247, 249, 231, 205, 183, 34, 6, 1, 230, 252, 34, 5, 1, 230, 252, 34, + 6, 1, 220, 93, 34, 5, 1, 220, 93, 34, 6, 1, 241, 205, 34, 5, 1, 241, 205, + 34, 6, 1, 232, 205, 34, 5, 1, 232, 205, 34, 6, 1, 232, 206, 2, 50, 239, + 237, 253, 21, 34, 5, 1, 232, 206, 2, 50, 239, 237, 253, 21, 34, 6, 1, + 209, 249, 34, 5, 1, 209, 249, 34, 6, 1, 218, 95, 222, 170, 34, 5, 1, 218, + 95, 222, 170, 34, 6, 1, 222, 171, 2, 211, 154, 34, 5, 1, 222, 171, 2, + 211, 154, 34, 6, 1, 222, 103, 34, 5, 1, 222, 103, 34, 6, 1, 231, 27, 34, + 5, 1, 231, 27, 34, 211, 241, 53, 36, 34, 211, 154, 36, 34, 222, 25, 36, + 34, 246, 76, 220, 213, 36, 34, 220, 87, 220, 213, 36, 34, 220, 197, 36, + 34, 238, 30, 211, 241, 53, 36, 34, 226, 213, 53, 34, 6, 1, 215, 144, 237, + 225, 2, 212, 191, 34, 5, 1, 215, 144, 237, 225, 2, 212, 191, 34, 6, 1, + 216, 48, 53, 34, 5, 1, 216, 48, 53, 34, 6, 1, 242, 236, 2, 211, 207, 34, + 5, 1, 242, 236, 2, 211, 207, 34, 6, 1, 240, 86, 2, 209, 199, 34, 5, 1, + 240, 86, 2, 209, 199, 34, 6, 1, 240, 86, 2, 91, 34, 5, 1, 240, 86, 2, 91, + 34, 6, 1, 240, 86, 2, 226, 247, 109, 34, 5, 1, 240, 86, 2, 226, 247, 109, + 34, 6, 1, 205, 73, 2, 245, 211, 34, 5, 1, 205, 73, 2, 245, 211, 34, 6, 1, + 205, 94, 2, 245, 211, 34, 5, 1, 205, 94, 2, 245, 211, 34, 6, 1, 232, 66, + 2, 245, 211, 34, 5, 1, 232, 66, 2, 245, 211, 34, 6, 1, 232, 66, 2, 79, + 91, 34, 5, 1, 232, 66, 2, 79, 91, 34, 6, 1, 232, 66, 2, 91, 34, 5, 1, + 232, 66, 2, 91, 34, 6, 1, 250, 112, 172, 34, 5, 1, 250, 112, 172, 34, 6, + 1, 243, 42, 2, 245, 211, 34, 5, 1, 243, 42, 2, 245, 211, 34, 6, 28, 243, + 42, 240, 85, 34, 5, 28, 243, 42, 240, 85, 34, 6, 1, 221, 175, 2, 226, + 247, 109, 34, 5, 1, 221, 175, 2, 226, 247, 109, 34, 6, 1, 253, 28, 155, + 34, 5, 1, 253, 28, 155, 34, 6, 1, 242, 226, 2, 245, 211, 34, 5, 1, 242, + 226, 2, 245, 211, 34, 6, 1, 212, 132, 2, 245, 211, 34, 5, 1, 212, 132, 2, + 245, 211, 34, 6, 1, 213, 243, 71, 34, 5, 1, 213, 243, 71, 34, 6, 1, 213, + 243, 106, 2, 91, 34, 5, 1, 213, 243, 106, 2, 91, 34, 6, 1, 239, 144, 2, + 245, 211, 34, 5, 1, 239, 144, 2, 245, 211, 34, 6, 28, 212, 132, 210, 237, + 34, 5, 28, 212, 132, 210, 237, 34, 6, 1, 248, 83, 2, 245, 211, 34, 5, 1, + 248, 83, 2, 245, 211, 34, 6, 1, 248, 83, 2, 79, 91, 34, 5, 1, 248, 83, 2, + 79, 91, 34, 6, 1, 215, 184, 34, 5, 1, 215, 184, 34, 6, 1, 253, 28, 248, + 82, 34, 5, 1, 253, 28, 248, 82, 34, 6, 1, 253, 28, 248, 83, 2, 245, 211, + 34, 5, 1, 253, 28, 248, 83, 2, 245, 211, 34, 1, 222, 17, 34, 6, 1, 205, + 73, 2, 249, 122, 34, 5, 1, 205, 73, 2, 249, 122, 34, 6, 1, 232, 66, 2, + 109, 34, 5, 1, 232, 66, 2, 109, 34, 6, 1, 243, 69, 2, 212, 191, 34, 5, 1, + 243, 69, 2, 212, 191, 34, 6, 1, 243, 42, 2, 109, 34, 5, 1, 243, 42, 2, + 109, 34, 6, 1, 243, 42, 2, 212, 191, 34, 5, 1, 243, 42, 2, 212, 191, 34, + 6, 1, 231, 161, 248, 82, 34, 5, 1, 231, 161, 248, 82, 34, 6, 1, 243, 51, + 2, 212, 191, 34, 5, 1, 243, 51, 2, 212, 191, 34, 5, 1, 222, 17, 34, 6, 1, + 32, 2, 249, 122, 34, 5, 1, 32, 2, 249, 122, 34, 6, 1, 32, 2, 245, 166, + 34, 5, 1, 32, 2, 245, 166, 34, 6, 28, 32, 233, 129, 34, 5, 28, 32, 233, + 129, 34, 6, 1, 233, 130, 2, 249, 122, 34, 5, 1, 233, 130, 2, 249, 122, + 34, 6, 1, 217, 100, 34, 5, 1, 217, 100, 34, 6, 1, 217, 101, 2, 245, 166, + 34, 5, 1, 217, 101, 2, 245, 166, 34, 6, 1, 205, 73, 2, 245, 166, 34, 5, + 1, 205, 73, 2, 245, 166, 34, 6, 1, 205, 94, 2, 245, 166, 34, 5, 1, 205, + 94, 2, 245, 166, 34, 6, 1, 253, 28, 243, 193, 34, 5, 1, 253, 28, 243, + 193, 34, 6, 1, 237, 225, 2, 228, 13, 34, 5, 1, 237, 225, 2, 228, 13, 34, + 6, 1, 237, 225, 2, 245, 166, 34, 5, 1, 237, 225, 2, 245, 166, 34, 6, 1, + 148, 2, 245, 166, 34, 5, 1, 148, 2, 245, 166, 34, 6, 1, 250, 123, 76, 34, + 5, 1, 250, 123, 76, 34, 6, 1, 250, 123, 148, 2, 245, 166, 34, 5, 1, 250, + 123, 148, 2, 245, 166, 34, 6, 1, 174, 2, 245, 166, 34, 5, 1, 174, 2, 245, + 166, 34, 6, 1, 106, 2, 228, 13, 34, 5, 1, 106, 2, 228, 13, 34, 6, 1, 106, + 2, 245, 166, 34, 5, 1, 106, 2, 245, 166, 34, 6, 1, 106, 2, 50, 153, 34, + 5, 1, 106, 2, 50, 153, 34, 6, 1, 248, 83, 2, 245, 166, 34, 5, 1, 248, 83, + 2, 245, 166, 34, 6, 1, 240, 86, 2, 245, 211, 34, 5, 1, 240, 86, 2, 245, + 211, 34, 6, 1, 206, 31, 2, 245, 166, 34, 5, 1, 206, 31, 2, 245, 166, 34, + 6, 1, 240, 86, 2, 213, 225, 23, 109, 34, 5, 1, 240, 86, 2, 213, 225, 23, + 109, 34, 6, 1, 239, 144, 2, 109, 34, 5, 1, 239, 144, 2, 109, 34, 6, 1, + 239, 144, 2, 91, 34, 5, 1, 239, 144, 2, 91, 34, 6, 1, 231, 37, 246, 9, + 34, 5, 1, 231, 37, 246, 9, 34, 6, 1, 231, 37, 245, 68, 34, 5, 1, 231, 37, + 245, 68, 34, 6, 1, 231, 37, 205, 23, 34, 5, 1, 231, 37, 205, 23, 34, 6, + 1, 231, 37, 243, 185, 34, 5, 1, 231, 37, 243, 185, 34, 6, 1, 231, 37, + 229, 175, 34, 5, 1, 231, 37, 229, 175, 34, 6, 1, 231, 37, 224, 173, 34, + 5, 1, 231, 37, 224, 173, 34, 6, 1, 231, 37, 214, 249, 34, 5, 1, 231, 37, + 214, 249, 34, 6, 1, 231, 37, 211, 148, 34, 5, 1, 231, 37, 211, 148, 34, + 6, 1, 218, 224, 205, 93, 34, 5, 1, 218, 224, 205, 93, 34, 6, 1, 243, 69, + 2, 109, 34, 5, 1, 243, 69, 2, 109, 34, 6, 1, 229, 248, 34, 5, 1, 229, + 248, 34, 6, 1, 218, 212, 34, 5, 1, 218, 212, 34, 6, 1, 206, 98, 34, 5, 1, + 206, 98, 34, 6, 1, 220, 19, 34, 5, 1, 220, 19, 34, 6, 1, 207, 51, 34, 5, + 1, 207, 51, 34, 6, 1, 252, 168, 172, 34, 5, 1, 252, 168, 172, 34, 6, 1, + 243, 69, 2, 226, 247, 109, 34, 5, 1, 243, 69, 2, 226, 247, 109, 34, 6, 1, + 243, 42, 2, 226, 247, 109, 34, 5, 1, 243, 42, 2, 226, 247, 109, 34, 6, 1, + 221, 175, 2, 245, 211, 34, 5, 1, 221, 175, 2, 245, 211, 34, 6, 1, 215, + 185, 2, 245, 211, 34, 5, 1, 215, 185, 2, 245, 211, 34, 6, 1, 243, 42, 2, + 47, 109, 34, 5, 1, 243, 42, 2, 47, 109, 34, 6, 1, 243, 178, 34, 5, 1, + 243, 178, 34, 6, 1, 246, 58, 34, 5, 1, 246, 58, 34, 6, 1, 243, 69, 2, + 245, 211, 34, 5, 1, 243, 69, 2, 245, 211, 164, 6, 1, 251, 156, 164, 6, 1, + 250, 22, 164, 6, 1, 240, 49, 164, 6, 1, 246, 145, 164, 6, 1, 243, 108, + 164, 6, 1, 205, 116, 164, 6, 1, 243, 92, 164, 6, 1, 242, 203, 164, 6, 1, + 124, 164, 6, 1, 205, 72, 164, 6, 1, 233, 38, 164, 6, 1, 229, 178, 164, 6, + 1, 206, 173, 164, 6, 1, 249, 1, 164, 6, 1, 231, 203, 164, 6, 1, 238, 149, + 164, 6, 1, 232, 200, 164, 6, 1, 240, 96, 164, 6, 1, 248, 75, 164, 6, 1, + 227, 83, 164, 6, 1, 206, 11, 164, 6, 1, 224, 29, 164, 6, 1, 216, 2, 164, + 6, 1, 208, 173, 164, 6, 1, 248, 110, 164, 6, 1, 221, 157, 164, 6, 1, 232, + 165, 164, 6, 1, 219, 113, 164, 6, 1, 217, 64, 164, 6, 1, 208, 218, 164, + 6, 1, 211, 151, 164, 6, 1, 219, 16, 164, 6, 1, 247, 174, 164, 6, 1, 205, + 252, 164, 6, 1, 220, 244, 164, 6, 1, 231, 214, 164, 6, 1, 222, 194, 164, + 6, 1, 242, 15, 164, 65, 1, 47, 160, 218, 148, 164, 252, 53, 164, 243, 45, + 83, 164, 242, 168, 83, 164, 247, 155, 164, 219, 196, 83, 164, 253, 29, + 83, 164, 5, 1, 251, 156, 164, 5, 1, 250, 22, 164, 5, 1, 240, 49, 164, 5, + 1, 246, 145, 164, 5, 1, 243, 108, 164, 5, 1, 205, 116, 164, 5, 1, 243, + 92, 164, 5, 1, 242, 203, 164, 5, 1, 124, 164, 5, 1, 205, 72, 164, 5, 1, + 233, 38, 164, 5, 1, 229, 178, 164, 5, 1, 206, 173, 164, 5, 1, 249, 1, + 164, 5, 1, 231, 203, 164, 5, 1, 238, 149, 164, 5, 1, 232, 200, 164, 5, 1, + 240, 96, 164, 5, 1, 248, 75, 164, 5, 1, 227, 83, 164, 5, 1, 206, 11, 164, + 5, 1, 224, 29, 164, 5, 1, 216, 2, 164, 5, 1, 208, 173, 164, 5, 1, 248, + 110, 164, 5, 1, 221, 157, 164, 5, 1, 232, 165, 164, 5, 1, 219, 113, 164, + 5, 1, 217, 64, 164, 5, 1, 208, 218, 164, 5, 1, 211, 151, 164, 5, 1, 219, + 16, 164, 5, 1, 247, 174, 164, 5, 1, 205, 252, 164, 5, 1, 220, 244, 164, + 5, 1, 231, 214, 164, 5, 1, 222, 194, 164, 5, 1, 242, 15, 164, 5, 28, 243, + 109, 205, 252, 164, 241, 82, 213, 251, 164, 237, 239, 218, 166, 164, 242, + 199, 53, 230, 45, 164, 242, 199, 53, 164, 243, 254, 53, 103, 253, 22, + 242, 194, 103, 253, 22, 217, 65, 103, 253, 22, 215, 240, 103, 253, 22, + 205, 104, 220, 2, 103, 253, 22, 205, 104, 240, 234, 103, 253, 22, 211, + 165, 103, 253, 22, 218, 221, 103, 253, 22, 205, 102, 103, 253, 22, 221, + 201, 103, 253, 22, 206, 23, 103, 253, 22, 212, 63, 103, 253, 22, 240, + 147, 103, 253, 22, 240, 148, 226, 78, 103, 253, 22, 240, 145, 103, 253, + 22, 220, 3, 221, 230, 103, 253, 22, 212, 104, 240, 163, 103, 253, 22, + 221, 180, 103, 253, 22, 251, 193, 239, 136, 103, 253, 22, 226, 88, 103, + 253, 22, 227, 244, 103, 253, 22, 227, 73, 103, 253, 22, 227, 74, 231, + 215, 103, 253, 22, 246, 85, 103, 253, 22, 220, 14, 103, 253, 22, 212, + 104, 219, 253, 103, 253, 22, 206, 33, 250, 23, 205, 233, 103, 253, 22, + 222, 177, 103, 253, 22, 233, 88, 103, 253, 22, 245, 243, 103, 253, 22, + 205, 29, 103, 141, 227, 174, 247, 233, 103, 220, 205, 215, 187, 103, 220, + 205, 239, 85, 217, 65, 103, 220, 205, 239, 85, 221, 194, 103, 220, 205, + 239, 85, 220, 7, 103, 220, 205, 238, 244, 103, 220, 205, 210, 234, 103, + 220, 205, 217, 65, 103, 220, 205, 221, 194, 103, 220, 205, 220, 7, 103, + 220, 205, 238, 142, 103, 220, 205, 238, 143, 239, 87, 33, 209, 43, 103, + 220, 205, 219, 200, 103, 220, 205, 246, 131, 222, 123, 227, 204, 103, + 220, 205, 227, 62, 103, 220, 72, 227, 201, 103, 220, 205, 219, 93, 103, + 220, 72, 221, 203, 103, 220, 205, 215, 172, 245, 23, 103, 220, 205, 215, + 45, 245, 23, 103, 220, 72, 214, 188, 221, 196, 103, 141, 209, 203, 245, + 23, 103, 141, 229, 92, 245, 23, 103, 220, 72, 223, 174, 239, 135, 103, + 220, 205, 220, 8, 220, 2, 103, 1, 252, 172, 103, 1, 250, 10, 103, 1, 240, + 47, 103, 1, 246, 111, 103, 1, 239, 71, 103, 1, 209, 43, 103, 1, 205, 96, + 103, 1, 239, 29, 103, 1, 212, 80, 103, 1, 205, 236, 103, 1, 42, 232, 45, + 103, 1, 232, 45, 103, 1, 230, 98, 103, 1, 42, 227, 90, 103, 1, 227, 90, + 103, 1, 42, 223, 173, 103, 1, 223, 173, 103, 1, 217, 157, 103, 1, 251, + 154, 103, 1, 42, 221, 174, 103, 1, 221, 174, 103, 1, 42, 210, 238, 103, + 1, 210, 238, 103, 1, 219, 223, 103, 1, 218, 242, 103, 1, 215, 171, 103, + 1, 212, 147, 103, 28, 206, 9, 50, 209, 43, 103, 28, 206, 9, 209, 44, 205, + 236, 103, 28, 206, 9, 50, 205, 236, 103, 220, 72, 240, 147, 103, 220, 72, + 240, 145, 8, 43, 53, 8, 3, 217, 150, 8, 241, 146, 227, 187, 8, 3, 217, + 187, 8, 3, 217, 153, 8, 43, 141, 52, 252, 33, 247, 36, 218, 103, 252, 33, + 241, 118, 218, 103, 8, 219, 58, 252, 33, 221, 132, 226, 215, 53, 252, 33, + 221, 132, 212, 99, 211, 243, 53, 252, 225, 53, 8, 247, 155, 8, 246, 72, + 216, 39, 8, 220, 207, 209, 24, 53, 8, 3, 226, 194, 8, 3, 217, 167, 252, + 175, 207, 75, 8, 3, 252, 175, 251, 214, 8, 3, 219, 91, 252, 174, 8, 3, + 219, 99, 252, 154, 252, 103, 8, 3, 212, 184, 8, 5, 127, 212, 194, 8, 5, + 127, 28, 126, 2, 230, 107, 2, 206, 47, 8, 5, 127, 205, 108, 8, 5, 242, + 39, 8, 5, 246, 106, 8, 5, 231, 252, 8, 216, 52, 8, 1, 83, 8, 211, 36, 67, + 220, 72, 83, 8, 219, 196, 83, 8, 1, 232, 0, 206, 47, 8, 1, 239, 111, 8, + 1, 126, 2, 228, 9, 52, 8, 1, 126, 2, 239, 112, 52, 8, 1, 207, 60, 2, 239, + 112, 52, 8, 1, 126, 2, 239, 112, 55, 8, 1, 87, 2, 239, 112, 52, 8, 1, + 252, 172, 8, 1, 250, 38, 8, 1, 212, 116, 227, 197, 8, 1, 212, 115, 8, 1, + 212, 37, 8, 1, 232, 179, 8, 1, 239, 132, 8, 1, 231, 163, 8, 1, 246, 117, + 8, 1, 212, 49, 8, 1, 219, 16, 8, 1, 205, 108, 8, 1, 217, 70, 8, 1, 215, + 210, 8, 1, 217, 191, 8, 1, 246, 140, 8, 1, 212, 194, 8, 1, 205, 111, 8, + 1, 252, 200, 8, 1, 240, 94, 8, 1, 231, 213, 2, 118, 177, 52, 8, 1, 231, + 213, 2, 129, 177, 55, 8, 1, 242, 42, 87, 2, 233, 2, 209, 148, 8, 1, 242, + 42, 87, 2, 118, 177, 52, 8, 1, 242, 42, 87, 2, 129, 177, 52, 8, 212, 153, + 8, 1, 242, 15, 8, 1, 220, 12, 8, 1, 232, 45, 8, 1, 230, 106, 8, 1, 227, + 104, 8, 1, 224, 54, 8, 1, 239, 50, 8, 1, 207, 59, 8, 1, 126, 227, 228, 8, + 1, 206, 47, 8, 242, 37, 8, 246, 104, 8, 231, 250, 8, 242, 39, 8, 246, + 106, 8, 231, 252, 8, 215, 249, 8, 213, 162, 8, 228, 7, 52, 8, 239, 112, + 52, 8, 239, 112, 55, 8, 213, 183, 252, 172, 8, 233, 2, 246, 106, 8, 141, + 224, 55, 240, 65, 8, 204, 251, 8, 22, 3, 5, 209, 149, 52, 8, 22, 3, 233, + 2, 5, 209, 149, 52, 8, 22, 3, 67, 55, 8, 218, 224, 246, 106, 8, 242, 40, + 2, 118, 245, 21, 8, 207, 61, 239, 112, 55, 252, 33, 18, 205, 85, 252, 33, + 18, 102, 252, 33, 18, 105, 252, 33, 18, 142, 252, 33, 18, 139, 252, 33, + 18, 168, 252, 33, 18, 184, 252, 33, 18, 195, 252, 33, 18, 193, 252, 33, + 18, 200, 8, 221, 131, 53, 8, 246, 2, 216, 39, 8, 211, 241, 216, 39, 8, + 241, 204, 220, 203, 214, 26, 8, 1, 245, 22, 250, 38, 8, 1, 245, 22, 220, + 12, 8, 1, 213, 139, 252, 172, 8, 1, 126, 207, 76, 8, 1, 126, 2, 207, 61, + 239, 112, 52, 8, 1, 126, 2, 207, 61, 239, 112, 55, 8, 1, 127, 239, 111, + 8, 1, 127, 239, 112, 252, 172, 8, 1, 127, 239, 112, 207, 59, 8, 1, 106, + 2, 239, 112, 52, 8, 1, 127, 239, 112, 206, 47, 8, 1, 210, 200, 8, 1, 210, + 198, 8, 1, 250, 48, 8, 1, 212, 116, 2, 218, 148, 8, 1, 212, 116, 2, 129, + 177, 84, 244, 6, 8, 1, 221, 157, 8, 1, 212, 113, 8, 1, 250, 36, 8, 1, + 140, 2, 239, 112, 52, 8, 1, 140, 2, 118, 177, 79, 52, 8, 1, 223, 131, 8, + 1, 243, 201, 8, 1, 140, 2, 129, 177, 52, 8, 1, 212, 135, 8, 1, 212, 133, + 8, 1, 246, 49, 8, 1, 246, 118, 2, 218, 148, 8, 1, 246, 118, 2, 67, 55, 8, + 1, 246, 118, 2, 67, 250, 26, 23, 5, 212, 194, 8, 1, 246, 124, 8, 1, 246, + 51, 8, 1, 243, 229, 8, 1, 246, 118, 2, 129, 177, 84, 244, 6, 8, 1, 246, + 118, 2, 241, 125, 177, 52, 8, 1, 218, 81, 8, 1, 219, 17, 2, 5, 209, 148, + 8, 1, 219, 17, 2, 218, 148, 8, 1, 219, 17, 2, 67, 55, 8, 1, 219, 17, 2, + 5, 209, 149, 55, 8, 1, 219, 17, 2, 67, 250, 26, 23, 67, 52, 8, 1, 219, + 17, 2, 118, 177, 52, 8, 1, 232, 176, 8, 1, 219, 17, 2, 241, 125, 177, 52, + 8, 1, 217, 71, 2, 67, 250, 26, 23, 67, 52, 8, 1, 217, 71, 2, 129, 177, + 55, 8, 1, 217, 71, 2, 129, 177, 250, 26, 23, 129, 177, 52, 8, 1, 217, + 192, 2, 118, 177, 55, 8, 1, 217, 192, 2, 129, 177, 52, 8, 1, 212, 195, 2, + 129, 177, 52, 8, 1, 252, 201, 2, 129, 177, 52, 8, 1, 245, 22, 242, 15, 8, + 1, 242, 16, 2, 67, 226, 122, 55, 8, 1, 242, 16, 2, 67, 55, 8, 1, 209, 32, + 8, 1, 242, 16, 2, 129, 177, 55, 8, 1, 221, 155, 8, 1, 220, 13, 2, 67, 52, + 8, 1, 220, 13, 2, 129, 177, 52, 8, 1, 231, 212, 8, 1, 213, 109, 232, 45, + 8, 1, 232, 46, 2, 218, 148, 8, 1, 232, 46, 2, 67, 52, 8, 1, 225, 79, 8, + 1, 232, 46, 2, 129, 177, 55, 8, 1, 240, 231, 8, 1, 240, 232, 2, 218, 148, + 8, 1, 225, 0, 8, 1, 240, 232, 2, 118, 177, 55, 8, 1, 239, 200, 8, 1, 240, + 232, 2, 129, 177, 52, 8, 1, 230, 107, 2, 5, 209, 148, 8, 1, 230, 107, 2, + 67, 52, 8, 1, 230, 107, 2, 129, 177, 52, 8, 1, 230, 107, 2, 129, 177, 55, + 8, 1, 224, 55, 2, 67, 55, 8, 1, 224, 55, 240, 65, 8, 1, 218, 127, 8, 1, + 224, 55, 2, 218, 148, 8, 1, 224, 55, 2, 129, 177, 52, 8, 1, 239, 51, 245, + 47, 8, 1, 212, 136, 2, 67, 52, 8, 1, 239, 51, 2, 87, 52, 8, 1, 239, 51, + 240, 16, 8, 1, 239, 51, 240, 17, 2, 239, 112, 52, 8, 1, 212, 116, 227, + 198, 240, 16, 8, 1, 207, 60, 2, 218, 148, 8, 1, 231, 101, 222, 206, 8, 1, + 222, 206, 8, 1, 71, 8, 1, 205, 213, 8, 1, 231, 101, 205, 213, 8, 1, 207, + 60, 2, 118, 177, 52, 8, 1, 209, 39, 8, 1, 242, 42, 206, 47, 8, 1, 87, 2, + 212, 191, 8, 1, 87, 2, 5, 209, 148, 8, 1, 207, 60, 2, 67, 52, 8, 1, 75, + 8, 1, 87, 2, 129, 177, 55, 8, 1, 87, 250, 121, 8, 1, 87, 250, 122, 2, + 239, 112, 52, 8, 241, 82, 213, 251, 8, 1, 252, 248, 8, 5, 127, 28, 217, + 192, 2, 230, 107, 2, 126, 227, 228, 8, 5, 127, 28, 220, 13, 2, 230, 107, + 2, 126, 227, 228, 8, 5, 127, 80, 78, 17, 8, 5, 127, 230, 107, 252, 172, + 8, 5, 127, 232, 179, 8, 5, 127, 129, 245, 21, 8, 5, 127, 217, 70, 8, 243, + 34, 73, 251, 158, 8, 214, 22, 73, 218, 48, 243, 69, 238, 240, 8, 5, 127, + 218, 93, 205, 85, 8, 5, 127, 209, 202, 219, 36, 205, 85, 8, 5, 127, 245, + 22, 239, 69, 73, 231, 163, 8, 5, 127, 80, 61, 17, 8, 5, 114, 217, 70, 8, + 5, 127, 228, 8, 8, 5, 207, 59, 8, 5, 206, 47, 8, 5, 127, 206, 47, 8, 5, + 127, 224, 54, 8, 220, 239, 73, 217, 177, 8, 243, 43, 248, 129, 114, 213, + 251, 8, 243, 43, 248, 129, 127, 213, 251, 8, 218, 93, 127, 213, 252, 2, + 241, 233, 248, 128, 8, 5, 114, 227, 104, 8, 1, 246, 118, 2, 233, 2, 209, + 148, 8, 1, 219, 17, 2, 233, 2, 209, 148, 242, 159, 252, 33, 18, 205, 85, + 242, 159, 252, 33, 18, 102, 242, 159, 252, 33, 18, 105, 242, 159, 252, + 33, 18, 142, 242, 159, 252, 33, 18, 139, 242, 159, 252, 33, 18, 168, 242, + 159, 252, 33, 18, 184, 242, 159, 252, 33, 18, 195, 242, 159, 252, 33, 18, + 193, 242, 159, 252, 33, 18, 200, 8, 1, 215, 211, 2, 67, 55, 8, 1, 246, + 141, 2, 67, 55, 8, 1, 240, 95, 2, 67, 55, 8, 3, 215, 44, 252, 125, 8, 3, + 215, 44, 220, 172, 227, 83, 8, 1, 239, 51, 2, 233, 2, 209, 148, 213, 30, + 243, 34, 73, 221, 228, 213, 30, 213, 135, 241, 82, 213, 251, 213, 30, + 213, 185, 241, 82, 213, 251, 213, 30, 213, 135, 247, 162, 213, 30, 213, + 185, 247, 162, 213, 30, 194, 247, 162, 213, 30, 247, 163, 214, 246, 230, + 46, 213, 30, 247, 163, 214, 246, 218, 167, 213, 30, 213, 135, 247, 163, + 214, 246, 230, 46, 213, 30, 213, 185, 247, 163, 214, 246, 218, 167, 213, + 30, 247, 111, 213, 30, 239, 92, 222, 224, 213, 30, 239, 92, 227, 60, 213, + 30, 239, 92, 251, 211, 213, 30, 253, 29, 83, 213, 30, 1, 252, 177, 213, + 30, 1, 213, 139, 252, 177, 213, 30, 1, 250, 7, 213, 30, 1, 240, 221, 213, + 30, 1, 240, 222, 240, 199, 213, 30, 1, 246, 114, 213, 30, 1, 245, 22, + 246, 115, 218, 143, 213, 30, 1, 239, 71, 213, 30, 1, 207, 59, 213, 30, 1, + 205, 108, 213, 30, 1, 239, 27, 213, 30, 1, 212, 76, 213, 30, 1, 212, 77, + 240, 199, 213, 30, 1, 205, 200, 213, 30, 1, 205, 201, 239, 71, 213, 30, + 1, 232, 17, 213, 30, 1, 230, 105, 213, 30, 1, 226, 211, 213, 30, 1, 223, + 173, 213, 30, 1, 216, 45, 213, 30, 1, 42, 216, 45, 213, 30, 1, 75, 213, + 30, 1, 221, 174, 213, 30, 1, 218, 224, 221, 174, 213, 30, 1, 217, 189, + 213, 30, 1, 220, 6, 213, 30, 1, 218, 143, 213, 30, 1, 215, 171, 213, 30, + 1, 212, 145, 213, 30, 1, 221, 116, 249, 250, 213, 30, 1, 221, 116, 240, + 92, 213, 30, 1, 221, 116, 245, 187, 213, 30, 220, 83, 52, 213, 30, 220, + 83, 55, 213, 30, 220, 83, 244, 20, 213, 30, 205, 13, 52, 213, 30, 205, + 13, 55, 213, 30, 205, 13, 244, 20, 213, 30, 219, 54, 52, 213, 30, 219, + 54, 55, 213, 30, 244, 21, 205, 20, 238, 121, 213, 30, 244, 21, 205, 20, + 252, 104, 213, 30, 239, 74, 52, 213, 30, 239, 74, 55, 213, 30, 239, 73, + 244, 20, 213, 30, 242, 219, 52, 213, 30, 242, 219, 55, 213, 30, 218, 16, + 213, 30, 242, 9, 245, 23, 213, 30, 219, 174, 213, 30, 218, 43, 213, 30, + 118, 79, 177, 52, 213, 30, 118, 79, 177, 55, 213, 30, 129, 177, 52, 213, + 30, 129, 177, 55, 213, 30, 222, 222, 229, 206, 52, 213, 30, 222, 222, + 229, 206, 55, 213, 30, 226, 64, 213, 30, 250, 120, 213, 30, 1, 214, 184, + 205, 79, 213, 30, 1, 214, 184, 231, 156, 213, 30, 1, 214, 184, 242, 28, + 8, 1, 250, 39, 2, 129, 177, 238, 71, 55, 8, 1, 250, 39, 2, 67, 250, 26, + 23, 129, 177, 52, 8, 1, 250, 39, 2, 129, 177, 220, 201, 167, 55, 8, 1, + 250, 39, 2, 129, 177, 220, 201, 167, 250, 26, 23, 118, 177, 52, 8, 1, + 250, 39, 2, 118, 177, 250, 26, 23, 67, 52, 8, 1, 250, 39, 2, 233, 2, 5, + 209, 149, 55, 8, 1, 250, 39, 2, 5, 209, 148, 8, 1, 140, 2, 118, 177, 52, + 8, 1, 140, 2, 129, 177, 220, 201, 167, 55, 8, 1, 246, 118, 2, 118, 177, + 208, 228, 250, 26, 23, 5, 212, 194, 8, 1, 246, 118, 2, 233, 2, 5, 209, + 149, 55, 8, 1, 219, 17, 2, 91, 8, 1, 217, 71, 2, 241, 125, 177, 52, 8, 1, + 252, 201, 2, 118, 177, 52, 8, 1, 252, 201, 2, 129, 177, 220, 201, 173, + 52, 8, 1, 252, 201, 2, 118, 177, 208, 228, 52, 8, 1, 242, 16, 2, 118, + 177, 55, 8, 1, 242, 16, 2, 129, 177, 220, 201, 167, 55, 8, 1, 231, 213, + 2, 67, 52, 8, 1, 231, 213, 2, 129, 177, 52, 8, 1, 231, 213, 2, 129, 177, + 220, 201, 167, 55, 8, 1, 80, 2, 67, 52, 8, 1, 80, 2, 67, 55, 8, 1, 224, + 55, 2, 118, 177, 55, 8, 1, 224, 55, 2, 5, 212, 194, 8, 1, 224, 55, 2, 5, + 209, 148, 8, 1, 230, 107, 2, 134, 8, 1, 219, 17, 2, 118, 177, 208, 228, + 52, 8, 1, 219, 17, 2, 239, 112, 52, 8, 1, 217, 71, 2, 118, 177, 208, 228, + 52, 8, 1, 140, 2, 5, 8, 1, 212, 195, 55, 8, 1, 140, 2, 5, 8, 1, 212, 195, + 23, 118, 245, 21, 8, 1, 217, 71, 2, 5, 8, 1, 212, 195, 23, 118, 245, 21, + 8, 1, 219, 17, 2, 5, 8, 1, 212, 195, 23, 118, 245, 21, 8, 1, 140, 2, 5, + 8, 1, 212, 195, 52, 8, 1, 126, 2, 242, 159, 252, 33, 18, 118, 52, 8, 1, + 126, 2, 242, 159, 252, 33, 18, 129, 52, 8, 1, 242, 42, 87, 2, 242, 159, + 252, 33, 18, 118, 52, 8, 1, 242, 42, 87, 2, 242, 159, 252, 33, 18, 129, + 52, 8, 1, 242, 42, 87, 2, 242, 159, 252, 33, 18, 241, 125, 55, 8, 1, 207, + 60, 2, 242, 159, 252, 33, 18, 118, 52, 8, 1, 207, 60, 2, 242, 159, 252, + 33, 18, 129, 52, 8, 1, 87, 250, 122, 2, 242, 159, 252, 33, 18, 118, 52, + 8, 1, 87, 250, 122, 2, 242, 159, 252, 33, 18, 129, 52, 8, 1, 140, 2, 242, + 159, 252, 33, 18, 241, 125, 55, 8, 1, 217, 71, 2, 242, 159, 252, 33, 18, + 241, 125, 52, 8, 1, 217, 71, 2, 233, 2, 209, 148, 8, 1, 232, 46, 2, 118, + 177, 52, 212, 53, 1, 239, 141, 212, 53, 1, 215, 220, 212, 53, 1, 224, 53, + 212, 53, 1, 219, 109, 212, 53, 1, 250, 181, 212, 53, 1, 229, 245, 212, + 53, 1, 232, 60, 212, 53, 1, 252, 161, 212, 53, 1, 209, 68, 212, 53, 1, + 227, 103, 212, 53, 1, 242, 71, 212, 53, 1, 245, 190, 212, 53, 1, 212, 55, + 212, 53, 1, 230, 137, 212, 53, 1, 240, 240, 212, 53, 1, 240, 22, 212, 53, + 1, 217, 69, 212, 53, 1, 246, 70, 212, 53, 1, 205, 99, 212, 53, 1, 212, + 146, 212, 53, 1, 206, 109, 212, 53, 1, 221, 187, 212, 53, 1, 232, 186, + 212, 53, 1, 248, 85, 212, 53, 1, 210, 207, 212, 53, 1, 239, 19, 212, 53, + 1, 231, 166, 212, 53, 1, 212, 54, 212, 53, 1, 205, 115, 212, 53, 1, 215, + 209, 212, 53, 1, 217, 195, 212, 53, 1, 246, 143, 212, 53, 1, 124, 212, + 53, 1, 205, 19, 212, 53, 1, 252, 197, 212, 53, 1, 240, 93, 212, 53, 1, + 220, 16, 212, 53, 1, 207, 94, 212, 53, 253, 31, 212, 53, 253, 129, 212, + 53, 237, 184, 212, 53, 243, 103, 212, 53, 210, 11, 212, 53, 222, 151, + 212, 53, 243, 111, 212, 53, 242, 151, 212, 53, 222, 221, 212, 53, 222, + 229, 212, 53, 213, 162, 212, 53, 1, 225, 232, 224, 131, 18, 205, 85, 224, + 131, 18, 102, 224, 131, 18, 105, 224, 131, 18, 142, 224, 131, 18, 139, + 224, 131, 18, 168, 224, 131, 18, 184, 224, 131, 18, 195, 224, 131, 18, + 193, 224, 131, 18, 200, 224, 131, 1, 62, 224, 131, 1, 243, 104, 224, 131, + 1, 74, 224, 131, 1, 75, 224, 131, 1, 71, 224, 131, 1, 222, 152, 224, 131, + 1, 76, 224, 131, 1, 246, 132, 224, 131, 1, 226, 33, 224, 131, 1, 250, + 183, 224, 131, 1, 179, 224, 131, 1, 212, 219, 224, 131, 1, 232, 200, 224, + 131, 1, 248, 110, 224, 131, 1, 246, 145, 224, 131, 1, 219, 113, 224, 131, + 1, 218, 89, 224, 131, 1, 217, 199, 224, 131, 1, 240, 187, 224, 131, 1, + 242, 73, 224, 131, 1, 172, 224, 131, 1, 230, 141, 224, 131, 1, 225, 237, + 206, 246, 224, 131, 1, 185, 224, 131, 1, 223, 144, 224, 131, 1, 199, 224, + 131, 1, 155, 224, 131, 1, 207, 96, 224, 131, 1, 190, 224, 131, 1, 223, + 145, 206, 246, 224, 131, 1, 232, 115, 232, 200, 224, 131, 1, 232, 115, + 248, 110, 224, 131, 1, 232, 115, 219, 113, 224, 131, 36, 215, 144, 127, + 211, 118, 224, 131, 36, 215, 144, 114, 211, 118, 224, 131, 36, 215, 144, + 218, 142, 211, 118, 224, 131, 36, 152, 245, 210, 211, 118, 224, 131, 36, + 152, 127, 211, 118, 224, 131, 36, 152, 114, 211, 118, 224, 131, 36, 152, + 218, 142, 211, 118, 224, 131, 36, 225, 197, 83, 224, 131, 36, 50, 67, 52, + 224, 131, 127, 135, 252, 53, 224, 131, 114, 135, 252, 53, 224, 131, 16, + 222, 153, 245, 223, 224, 131, 16, 240, 186, 224, 131, 247, 155, 224, 131, + 242, 168, 83, 224, 131, 230, 112, 217, 160, 1, 252, 179, 217, 160, 1, + 249, 209, 217, 160, 1, 240, 220, 217, 160, 1, 246, 116, 217, 160, 1, 232, + 211, 217, 160, 1, 250, 181, 217, 160, 1, 205, 88, 217, 160, 1, 232, 220, + 217, 160, 1, 211, 156, 217, 160, 1, 205, 182, 217, 160, 1, 232, 61, 217, + 160, 1, 230, 134, 217, 160, 1, 226, 211, 217, 160, 1, 223, 173, 217, 160, + 1, 215, 42, 217, 160, 1, 233, 68, 217, 160, 1, 241, 250, 217, 160, 1, + 210, 241, 217, 160, 1, 219, 193, 217, 160, 1, 218, 143, 217, 160, 1, 215, + 237, 217, 160, 1, 212, 214, 217, 160, 141, 233, 68, 217, 160, 141, 233, + 67, 217, 160, 141, 222, 217, 217, 160, 141, 246, 130, 217, 160, 65, 1, + 242, 249, 205, 182, 217, 160, 141, 242, 249, 205, 182, 217, 160, 22, 3, + 152, 75, 217, 160, 22, 3, 75, 217, 160, 22, 3, 222, 80, 253, 164, 217, + 160, 22, 3, 152, 253, 164, 217, 160, 22, 3, 253, 164, 217, 160, 22, 3, + 222, 80, 62, 217, 160, 22, 3, 152, 62, 217, 160, 22, 3, 62, 217, 160, 65, + 1, 215, 144, 62, 217, 160, 22, 3, 215, 144, 62, 217, 160, 22, 3, 152, 71, + 217, 160, 22, 3, 71, 217, 160, 65, 1, 74, 217, 160, 22, 3, 152, 74, 217, + 160, 22, 3, 74, 217, 160, 22, 3, 76, 217, 160, 22, 3, 213, 162, 217, 160, + 141, 225, 94, 217, 160, 220, 72, 225, 94, 217, 160, 220, 72, 252, 222, + 217, 160, 220, 72, 252, 113, 217, 160, 220, 72, 250, 101, 217, 160, 220, + 72, 251, 194, 217, 160, 220, 72, 215, 159, 217, 160, 253, 29, 83, 217, + 160, 220, 72, 227, 93, 219, 229, 217, 160, 220, 72, 205, 27, 217, 160, + 220, 72, 219, 229, 217, 160, 220, 72, 205, 114, 217, 160, 220, 72, 210, + 140, 217, 160, 220, 72, 252, 4, 217, 160, 220, 72, 214, 188, 227, 176, + 217, 160, 220, 72, 252, 99, 227, 217, 1, 239, 118, 227, 217, 1, 253, 115, + 227, 217, 1, 252, 220, 227, 217, 1, 253, 5, 227, 217, 1, 252, 213, 227, + 217, 1, 209, 168, 227, 217, 1, 251, 152, 227, 217, 1, 232, 220, 227, 217, + 1, 251, 191, 227, 217, 1, 252, 184, 227, 217, 1, 252, 189, 227, 217, 1, + 252, 181, 227, 217, 1, 252, 136, 227, 217, 1, 252, 122, 227, 217, 1, 251, + 231, 227, 217, 1, 233, 68, 227, 217, 1, 252, 68, 227, 217, 1, 251, 201, + 227, 217, 1, 252, 41, 227, 217, 1, 252, 37, 227, 217, 1, 251, 225, 227, + 217, 1, 251, 199, 227, 217, 1, 243, 214, 227, 217, 1, 232, 53, 227, 217, + 1, 252, 200, 227, 217, 252, 226, 83, 227, 217, 208, 171, 83, 227, 217, + 240, 159, 83, 227, 217, 220, 71, 8, 1, 250, 39, 2, 5, 209, 149, 55, 8, 1, + 250, 39, 2, 239, 112, 52, 8, 1, 171, 2, 118, 177, 52, 8, 1, 212, 195, 2, + 118, 177, 52, 8, 1, 242, 16, 2, 67, 250, 26, 23, 129, 177, 52, 8, 1, 220, + 13, 2, 67, 55, 8, 1, 230, 107, 2, 50, 134, 8, 1, 80, 2, 129, 177, 52, 8, + 1, 87, 2, 118, 177, 250, 26, 23, 239, 112, 52, 8, 1, 87, 2, 118, 177, + 250, 26, 23, 67, 52, 8, 1, 219, 17, 2, 229, 111, 8, 1, 207, 60, 2, 67, + 206, 254, 8, 1, 218, 113, 206, 47, 8, 1, 114, 252, 172, 8, 1, 246, 118, + 2, 129, 177, 55, 8, 1, 217, 192, 2, 129, 177, 55, 8, 1, 240, 232, 2, 233, + 2, 91, 8, 1, 213, 243, 207, 59, 8, 1, 205, 109, 2, 233, 2, 209, 149, 52, + 8, 247, 26, 242, 39, 8, 247, 26, 246, 106, 8, 247, 26, 231, 252, 8, 247, + 26, 242, 37, 8, 247, 26, 246, 104, 8, 247, 26, 231, 250, 8, 135, 119, 67, + 52, 8, 135, 118, 177, 52, 8, 135, 229, 112, 52, 8, 135, 119, 67, 55, 8, + 135, 118, 177, 55, 8, 135, 229, 112, 55, 8, 222, 142, 242, 37, 8, 222, + 142, 246, 104, 8, 222, 142, 231, 250, 8, 5, 127, 207, 59, 8, 242, 40, 2, + 218, 148, 8, 242, 40, 2, 67, 52, 8, 231, 253, 2, 67, 55, 8, 47, 251, 244, + 52, 8, 48, 251, 244, 52, 8, 47, 251, 244, 55, 8, 48, 251, 244, 55, 8, 50, + 48, 251, 244, 52, 8, 50, 48, 251, 244, 84, 2, 245, 23, 8, 48, 251, 244, + 84, 2, 245, 23, 8, 246, 107, 2, 245, 23, 8, 141, 215, 73, 224, 55, 240, + 65, 89, 3, 233, 2, 248, 217, 89, 3, 248, 217, 89, 3, 252, 73, 89, 3, 208, + 183, 89, 1, 215, 144, 62, 89, 1, 62, 89, 1, 253, 164, 89, 1, 74, 89, 1, + 233, 102, 89, 1, 71, 89, 1, 209, 162, 89, 1, 115, 137, 89, 1, 115, 149, + 89, 1, 248, 220, 75, 89, 1, 215, 144, 75, 89, 1, 75, 89, 1, 252, 205, 89, + 1, 248, 220, 76, 89, 1, 215, 144, 76, 89, 1, 76, 89, 1, 251, 184, 89, 1, + 172, 89, 1, 231, 167, 89, 1, 240, 244, 89, 1, 240, 99, 89, 1, 225, 77, + 89, 1, 249, 1, 89, 1, 248, 110, 89, 1, 232, 200, 89, 1, 232, 170, 89, 1, + 223, 144, 89, 1, 210, 208, 89, 1, 210, 196, 89, 1, 246, 54, 89, 1, 246, + 38, 89, 1, 224, 103, 89, 1, 212, 219, 89, 1, 212, 56, 89, 1, 246, 145, + 89, 1, 245, 192, 89, 1, 199, 89, 1, 224, 85, 89, 1, 179, 89, 1, 221, 93, + 89, 1, 250, 183, 89, 1, 250, 0, 89, 1, 185, 89, 1, 190, 89, 1, 219, 113, + 89, 1, 218, 89, 89, 1, 230, 141, 89, 1, 229, 172, 89, 1, 229, 163, 89, 1, + 209, 70, 89, 1, 216, 2, 89, 1, 214, 96, 89, 1, 217, 199, 89, 1, 155, 89, + 22, 3, 222, 206, 89, 22, 3, 222, 150, 89, 3, 223, 184, 89, 3, 251, 167, + 89, 22, 3, 253, 164, 89, 22, 3, 74, 89, 22, 3, 233, 102, 89, 22, 3, 71, + 89, 22, 3, 209, 162, 89, 22, 3, 115, 137, 89, 22, 3, 115, 218, 90, 89, + 22, 3, 248, 220, 75, 89, 22, 3, 215, 144, 75, 89, 22, 3, 75, 89, 22, 3, + 252, 205, 89, 22, 3, 248, 220, 76, 89, 22, 3, 215, 144, 76, 89, 22, 3, + 76, 89, 22, 3, 251, 184, 89, 3, 208, 188, 89, 22, 3, 220, 120, 75, 89, + 22, 3, 251, 163, 89, 222, 173, 89, 213, 233, 3, 210, 5, 89, 213, 233, 3, + 252, 75, 89, 239, 237, 253, 21, 89, 253, 9, 253, 21, 89, 22, 3, 248, 220, + 152, 75, 89, 22, 3, 210, 3, 89, 22, 3, 209, 161, 89, 1, 220, 19, 89, 1, + 231, 148, 89, 1, 240, 74, 89, 1, 205, 116, 89, 1, 246, 43, 89, 1, 218, + 212, 89, 1, 242, 73, 89, 1, 205, 168, 89, 1, 115, 218, 90, 89, 1, 115, + 229, 173, 89, 22, 3, 115, 149, 89, 22, 3, 115, 229, 173, 89, 246, 100, + 89, 50, 246, 100, 89, 18, 205, 85, 89, 18, 102, 89, 18, 105, 89, 18, 142, + 89, 18, 139, 89, 18, 168, 89, 18, 184, 89, 18, 195, 89, 18, 193, 89, 18, + 200, 89, 253, 29, 53, 89, 3, 127, 214, 152, 245, 23, 89, 1, 248, 220, 62, + 89, 1, 222, 206, 89, 1, 222, 150, 89, 1, 251, 163, 89, 1, 210, 3, 89, 1, + 209, 161, 89, 1, 227, 181, 246, 54, 89, 1, 205, 81, 89, 1, 77, 190, 89, + 1, 240, 135, 89, 1, 232, 150, 89, 1, 240, 25, 213, 251, 89, 1, 246, 44, + 89, 1, 250, 97, 165, 252, 102, 165, 3, 248, 217, 165, 3, 252, 73, 165, 3, + 208, 183, 165, 1, 62, 165, 1, 253, 164, 165, 1, 74, 165, 1, 233, 102, + 165, 1, 71, 165, 1, 209, 162, 165, 1, 115, 137, 165, 1, 115, 149, 165, 1, + 75, 165, 1, 252, 205, 165, 1, 76, 165, 1, 251, 184, 165, 1, 172, 165, 1, + 231, 167, 165, 1, 240, 244, 165, 1, 240, 99, 165, 1, 225, 77, 165, 1, + 249, 1, 165, 1, 248, 110, 165, 1, 232, 200, 165, 1, 232, 170, 165, 1, + 223, 144, 165, 1, 210, 208, 165, 1, 210, 196, 165, 1, 246, 54, 165, 1, + 246, 38, 165, 1, 224, 103, 165, 1, 212, 219, 165, 1, 212, 56, 165, 1, + 246, 145, 165, 1, 245, 192, 165, 1, 199, 165, 1, 179, 165, 1, 221, 93, + 165, 1, 250, 183, 165, 1, 250, 0, 165, 1, 185, 165, 1, 190, 165, 1, 219, + 113, 165, 1, 230, 141, 165, 1, 216, 2, 165, 1, 214, 96, 165, 1, 217, 199, + 165, 1, 155, 165, 3, 223, 184, 165, 3, 251, 167, 165, 22, 3, 253, 164, + 165, 22, 3, 74, 165, 22, 3, 233, 102, 165, 22, 3, 71, 165, 22, 3, 209, + 162, 165, 22, 3, 115, 137, 165, 22, 3, 115, 218, 90, 165, 22, 3, 75, 165, + 22, 3, 252, 205, 165, 22, 3, 76, 165, 22, 3, 251, 184, 165, 3, 208, 188, + 165, 1, 231, 158, 212, 219, 165, 251, 185, 230, 20, 83, 165, 1, 218, 89, + 165, 1, 218, 212, 165, 1, 205, 168, 165, 1, 115, 218, 90, 165, 1, 115, + 229, 173, 165, 22, 3, 115, 149, 165, 22, 3, 115, 229, 173, 165, 18, 205, + 85, 165, 18, 102, 165, 18, 105, 165, 18, 142, 165, 18, 139, 165, 18, 168, + 165, 18, 184, 165, 18, 195, 165, 18, 193, 165, 18, 200, 165, 1, 219, 114, + 2, 226, 247, 245, 162, 165, 1, 219, 114, 2, 229, 92, 245, 162, 165, 218, + 27, 83, 165, 218, 27, 53, 165, 247, 25, 223, 176, 102, 165, 247, 25, 223, + 176, 105, 165, 247, 25, 223, 176, 142, 165, 247, 25, 223, 176, 139, 165, + 247, 25, 223, 176, 119, 230, 11, 212, 47, 212, 42, 245, 221, 165, 247, + 25, 245, 222, 215, 4, 165, 232, 221, 165, 240, 211, 83, 239, 182, 3, 253, + 4, 249, 224, 239, 182, 3, 249, 224, 239, 182, 3, 208, 183, 239, 182, 1, + 62, 239, 182, 1, 253, 164, 239, 182, 1, 74, 239, 182, 1, 233, 102, 239, + 182, 1, 71, 239, 182, 1, 209, 162, 239, 182, 1, 243, 104, 239, 182, 1, + 252, 205, 239, 182, 1, 222, 152, 239, 182, 1, 251, 184, 239, 182, 1, 172, + 239, 182, 1, 231, 167, 239, 182, 1, 240, 244, 239, 182, 1, 240, 99, 239, + 182, 1, 225, 77, 239, 182, 1, 249, 1, 239, 182, 1, 248, 110, 239, 182, 1, + 232, 200, 239, 182, 1, 232, 170, 239, 182, 1, 223, 144, 239, 182, 1, 210, + 208, 239, 182, 1, 210, 196, 239, 182, 1, 246, 54, 239, 182, 1, 246, 38, + 239, 182, 1, 224, 103, 239, 182, 1, 212, 219, 239, 182, 1, 212, 56, 239, + 182, 1, 246, 145, 239, 182, 1, 245, 192, 239, 182, 1, 199, 239, 182, 1, + 179, 239, 182, 1, 221, 93, 239, 182, 1, 250, 183, 239, 182, 1, 250, 0, + 239, 182, 1, 185, 239, 182, 1, 190, 239, 182, 1, 219, 113, 239, 182, 1, + 230, 141, 239, 182, 1, 229, 172, 239, 182, 1, 209, 70, 239, 182, 1, 216, + 2, 239, 182, 1, 217, 199, 239, 182, 1, 155, 239, 182, 3, 223, 184, 239, + 182, 22, 3, 253, 164, 239, 182, 22, 3, 74, 239, 182, 22, 3, 233, 102, + 239, 182, 22, 3, 71, 239, 182, 22, 3, 209, 162, 239, 182, 22, 3, 243, + 104, 239, 182, 22, 3, 252, 205, 239, 182, 22, 3, 222, 152, 239, 182, 22, + 3, 251, 184, 239, 182, 3, 208, 188, 239, 182, 3, 210, 7, 239, 182, 1, + 231, 148, 239, 182, 1, 240, 74, 239, 182, 1, 205, 116, 239, 182, 1, 218, + 89, 239, 182, 1, 242, 73, 239, 182, 18, 205, 85, 239, 182, 18, 102, 239, + 182, 18, 105, 239, 182, 18, 142, 239, 182, 18, 139, 239, 182, 18, 168, + 239, 182, 18, 184, 239, 182, 18, 195, 239, 182, 18, 193, 239, 182, 18, + 200, 239, 182, 211, 164, 239, 182, 253, 3, 239, 182, 232, 241, 239, 182, + 209, 190, 239, 182, 243, 76, 222, 157, 239, 182, 3, 206, 84, 198, 3, 248, + 217, 198, 3, 252, 73, 198, 3, 208, 183, 198, 1, 62, 198, 1, 253, 164, + 198, 1, 74, 198, 1, 233, 102, 198, 1, 71, 198, 1, 209, 162, 198, 1, 115, + 137, 198, 1, 115, 149, 198, 22, 248, 220, 75, 198, 1, 75, 198, 1, 252, + 205, 198, 22, 248, 220, 76, 198, 1, 76, 198, 1, 251, 184, 198, 1, 172, + 198, 1, 231, 167, 198, 1, 240, 244, 198, 1, 240, 99, 198, 1, 225, 77, + 198, 1, 249, 1, 198, 1, 248, 110, 198, 1, 232, 200, 198, 1, 232, 170, + 198, 1, 223, 144, 198, 1, 210, 208, 198, 1, 210, 196, 198, 1, 246, 54, + 198, 1, 246, 38, 198, 1, 224, 103, 198, 1, 212, 219, 198, 1, 212, 56, + 198, 1, 246, 145, 198, 1, 245, 192, 198, 1, 199, 198, 1, 179, 198, 1, + 221, 93, 198, 1, 250, 183, 198, 1, 250, 0, 198, 1, 185, 198, 1, 190, 198, + 1, 219, 113, 198, 1, 230, 141, 198, 1, 229, 172, 198, 1, 209, 70, 198, 1, + 216, 2, 198, 1, 214, 96, 198, 1, 217, 199, 198, 1, 155, 198, 3, 223, 184, + 198, 3, 251, 167, 198, 22, 3, 253, 164, 198, 22, 3, 74, 198, 22, 3, 233, + 102, 198, 22, 3, 71, 198, 22, 3, 209, 162, 198, 22, 3, 115, 137, 198, 22, + 3, 115, 218, 90, 198, 22, 3, 248, 220, 75, 198, 22, 3, 75, 198, 22, 3, + 252, 205, 198, 22, 3, 248, 220, 76, 198, 22, 3, 76, 198, 22, 3, 251, 184, + 198, 3, 208, 188, 198, 222, 173, 198, 1, 115, 218, 90, 198, 1, 115, 229, + 173, 198, 22, 3, 115, 149, 198, 22, 3, 115, 229, 173, 198, 18, 205, 85, + 198, 18, 102, 198, 18, 105, 198, 18, 142, 198, 18, 139, 198, 18, 168, + 198, 18, 184, 198, 18, 195, 198, 18, 193, 198, 18, 200, 198, 253, 29, 53, + 198, 218, 27, 53, 178, 3, 248, 217, 178, 3, 252, 73, 178, 3, 208, 183, + 178, 1, 62, 178, 1, 253, 164, 178, 1, 74, 178, 1, 233, 102, 178, 1, 71, + 178, 1, 209, 162, 178, 1, 115, 137, 178, 1, 115, 149, 178, 1, 75, 178, 1, + 252, 205, 178, 1, 76, 178, 1, 251, 184, 178, 1, 172, 178, 1, 231, 167, + 178, 1, 240, 244, 178, 1, 240, 99, 178, 1, 225, 77, 178, 1, 249, 1, 178, + 1, 248, 110, 178, 1, 232, 200, 178, 1, 232, 170, 178, 1, 223, 144, 178, + 1, 210, 208, 178, 1, 210, 196, 178, 1, 246, 54, 178, 1, 246, 38, 178, 1, + 224, 103, 178, 1, 212, 219, 178, 1, 212, 56, 178, 1, 246, 145, 178, 1, + 245, 192, 178, 1, 199, 178, 1, 179, 178, 1, 221, 93, 178, 1, 250, 183, + 178, 1, 250, 0, 178, 1, 185, 178, 1, 190, 178, 1, 219, 113, 178, 1, 230, + 141, 178, 1, 229, 172, 178, 1, 209, 70, 178, 1, 216, 2, 178, 1, 214, 96, + 178, 1, 217, 199, 178, 1, 155, 178, 3, 223, 184, 178, 3, 251, 167, 178, + 22, 3, 253, 164, 178, 22, 3, 74, 178, 22, 3, 233, 102, 178, 22, 3, 71, + 178, 22, 3, 209, 162, 178, 22, 3, 115, 137, 178, 22, 3, 115, 218, 90, + 178, 22, 3, 75, 178, 22, 3, 252, 205, 178, 22, 3, 76, 178, 22, 3, 251, + 184, 178, 3, 208, 188, 178, 252, 206, 230, 20, 83, 178, 251, 185, 230, + 20, 83, 178, 1, 218, 89, 178, 1, 218, 212, 178, 1, 205, 168, 178, 1, 115, + 218, 90, 178, 1, 115, 229, 173, 178, 22, 3, 115, 149, 178, 22, 3, 115, + 229, 173, 178, 18, 205, 85, 178, 18, 102, 178, 18, 105, 178, 18, 142, + 178, 18, 139, 178, 18, 168, 178, 18, 184, 178, 18, 195, 178, 18, 193, + 178, 18, 200, 178, 232, 221, 178, 1, 207, 96, 178, 241, 116, 119, 219, + 204, 178, 241, 116, 119, 239, 121, 178, 241, 116, 129, 219, 202, 178, + 241, 116, 119, 215, 2, 178, 241, 116, 119, 243, 83, 178, 241, 116, 129, + 215, 1, 40, 3, 252, 73, 40, 3, 208, 183, 40, 1, 62, 40, 1, 253, 164, 40, + 1, 74, 40, 1, 233, 102, 40, 1, 71, 40, 1, 209, 162, 40, 1, 75, 40, 1, + 243, 104, 40, 1, 252, 205, 40, 1, 76, 40, 1, 222, 152, 40, 1, 251, 184, + 40, 1, 172, 40, 1, 225, 77, 40, 1, 249, 1, 40, 1, 232, 200, 40, 1, 223, + 144, 40, 1, 210, 208, 40, 1, 224, 103, 40, 1, 212, 219, 40, 1, 199, 40, + 1, 224, 85, 40, 1, 179, 40, 1, 185, 40, 1, 190, 40, 1, 219, 113, 40, 1, + 218, 89, 40, 1, 230, 141, 40, 1, 229, 172, 40, 1, 229, 163, 40, 1, 209, + 70, 40, 1, 216, 2, 40, 1, 214, 96, 40, 1, 217, 199, 40, 1, 155, 40, 22, + 3, 253, 164, 40, 22, 3, 74, 40, 22, 3, 233, 102, 40, 22, 3, 71, 40, 22, + 3, 209, 162, 40, 22, 3, 75, 40, 22, 3, 243, 104, 40, 22, 3, 252, 205, 40, + 22, 3, 76, 40, 22, 3, 222, 152, 40, 22, 3, 251, 184, 40, 3, 208, 188, 40, + 222, 173, 40, 251, 185, 230, 20, 83, 40, 18, 205, 85, 40, 18, 102, 40, + 18, 105, 40, 18, 142, 40, 18, 139, 40, 18, 168, 40, 18, 184, 40, 18, 195, + 40, 18, 193, 40, 18, 200, 40, 43, 212, 98, 40, 43, 119, 238, 29, 40, 43, + 119, 211, 242, 40, 246, 67, 53, 40, 226, 153, 53, 40, 206, 50, 53, 40, + 246, 6, 53, 40, 247, 68, 53, 40, 251, 232, 84, 53, 40, 218, 27, 53, 40, + 43, 53, 163, 3, 36, 248, 218, 52, 163, 3, 248, 217, 163, 3, 252, 73, 163, + 3, 208, 183, 163, 1, 62, 163, 1, 253, 164, 163, 1, 74, 163, 1, 233, 102, + 163, 1, 71, 163, 1, 209, 162, 163, 1, 115, 137, 163, 1, 115, 149, 163, 1, + 75, 163, 1, 243, 104, 163, 1, 252, 205, 163, 1, 76, 163, 1, 222, 152, + 163, 1, 251, 184, 163, 1, 172, 163, 1, 231, 167, 163, 1, 240, 244, 163, + 1, 240, 99, 163, 1, 225, 77, 163, 1, 249, 1, 163, 1, 248, 110, 163, 1, + 232, 200, 163, 1, 232, 170, 163, 1, 223, 144, 163, 1, 210, 208, 163, 1, + 210, 196, 163, 1, 246, 54, 163, 1, 246, 38, 163, 1, 224, 103, 163, 1, + 212, 219, 163, 1, 212, 56, 163, 1, 246, 145, 163, 1, 245, 192, 163, 1, + 199, 163, 1, 179, 163, 1, 221, 93, 163, 1, 250, 183, 163, 1, 250, 0, 163, + 1, 185, 163, 1, 190, 163, 1, 219, 113, 163, 1, 218, 89, 163, 1, 230, 141, + 163, 1, 229, 172, 163, 1, 229, 163, 163, 1, 209, 70, 163, 1, 216, 2, 163, + 1, 214, 96, 163, 1, 217, 199, 163, 1, 155, 163, 3, 251, 167, 163, 22, 3, + 253, 164, 163, 22, 3, 74, 163, 22, 3, 233, 102, 163, 22, 3, 71, 163, 22, + 3, 209, 162, 163, 22, 3, 115, 137, 163, 22, 3, 115, 218, 90, 163, 22, 3, + 75, 163, 22, 3, 243, 104, 163, 22, 3, 252, 205, 163, 22, 3, 76, 163, 22, + 3, 222, 152, 163, 22, 3, 251, 184, 163, 3, 208, 188, 163, 230, 20, 83, + 163, 252, 206, 230, 20, 83, 163, 1, 210, 243, 163, 1, 243, 196, 163, 1, + 115, 218, 90, 163, 1, 115, 229, 173, 163, 22, 3, 115, 149, 163, 22, 3, + 115, 229, 173, 163, 18, 205, 85, 163, 18, 102, 163, 18, 105, 163, 18, + 142, 163, 18, 139, 163, 18, 168, 163, 18, 184, 163, 18, 195, 163, 18, + 193, 163, 18, 200, 163, 241, 116, 18, 205, 86, 33, 222, 210, 220, 160, + 73, 139, 163, 241, 116, 18, 119, 33, 222, 210, 220, 160, 73, 139, 163, + 241, 116, 18, 118, 33, 222, 210, 220, 160, 73, 139, 163, 241, 116, 18, + 129, 33, 222, 210, 220, 160, 73, 139, 163, 241, 116, 18, 119, 33, 242, + 179, 220, 160, 73, 139, 163, 241, 116, 18, 118, 33, 242, 179, 220, 160, + 73, 139, 163, 241, 116, 18, 129, 33, 242, 179, 220, 160, 73, 139, 163, 3, + 210, 134, 183, 3, 248, 217, 183, 3, 252, 73, 183, 3, 208, 183, 183, 1, + 62, 183, 1, 253, 164, 183, 1, 74, 183, 1, 233, 102, 183, 1, 71, 183, 1, + 209, 162, 183, 1, 115, 137, 183, 1, 115, 149, 183, 1, 75, 183, 1, 243, + 104, 183, 1, 252, 205, 183, 1, 76, 183, 1, 222, 152, 183, 1, 251, 184, + 183, 1, 172, 183, 1, 231, 167, 183, 1, 240, 244, 183, 1, 240, 99, 183, 1, + 225, 77, 183, 1, 249, 1, 183, 1, 248, 110, 183, 1, 232, 200, 183, 1, 232, + 170, 183, 1, 223, 144, 183, 1, 210, 208, 183, 1, 210, 196, 183, 1, 246, + 54, 183, 1, 246, 38, 183, 1, 224, 103, 183, 1, 212, 219, 183, 1, 212, 56, + 183, 1, 246, 145, 183, 1, 245, 192, 183, 1, 199, 183, 1, 179, 183, 1, + 221, 93, 183, 1, 250, 183, 183, 1, 250, 0, 183, 1, 185, 183, 1, 190, 183, + 1, 219, 113, 183, 1, 218, 89, 183, 1, 230, 141, 183, 1, 229, 172, 183, 1, + 209, 70, 183, 1, 216, 2, 183, 1, 214, 96, 183, 1, 217, 199, 183, 1, 155, + 183, 3, 223, 184, 183, 3, 251, 167, 183, 22, 3, 253, 164, 183, 22, 3, 74, + 183, 22, 3, 233, 102, 183, 22, 3, 71, 183, 22, 3, 209, 162, 183, 22, 3, + 115, 137, 183, 22, 3, 115, 218, 90, 183, 22, 3, 75, 183, 22, 3, 243, 104, + 183, 22, 3, 252, 205, 183, 22, 3, 76, 183, 22, 3, 222, 152, 183, 22, 3, + 251, 184, 183, 3, 208, 188, 183, 230, 20, 83, 183, 252, 206, 230, 20, 83, + 183, 1, 242, 73, 183, 1, 115, 218, 90, 183, 1, 115, 229, 173, 183, 22, 3, + 115, 149, 183, 22, 3, 115, 229, 173, 183, 18, 205, 85, 183, 18, 102, 183, + 18, 105, 183, 18, 142, 183, 18, 139, 183, 18, 168, 183, 18, 184, 183, 18, + 195, 183, 18, 193, 183, 18, 200, 183, 3, 232, 156, 183, 3, 209, 204, 156, + 3, 248, 217, 156, 3, 252, 73, 156, 3, 208, 183, 156, 1, 62, 156, 1, 253, + 164, 156, 1, 74, 156, 1, 233, 102, 156, 1, 71, 156, 1, 209, 162, 156, 1, + 115, 137, 156, 1, 115, 149, 156, 1, 75, 156, 1, 243, 104, 156, 1, 252, + 205, 156, 1, 76, 156, 1, 222, 152, 156, 1, 251, 184, 156, 1, 172, 156, 1, + 231, 167, 156, 1, 240, 244, 156, 1, 240, 99, 156, 1, 225, 77, 156, 1, + 249, 1, 156, 1, 248, 110, 156, 1, 232, 200, 156, 1, 232, 170, 156, 1, + 223, 144, 156, 1, 210, 208, 156, 1, 210, 196, 156, 1, 246, 54, 156, 1, + 246, 38, 156, 1, 224, 103, 156, 1, 212, 219, 156, 1, 212, 56, 156, 1, + 246, 145, 156, 1, 245, 192, 156, 1, 199, 156, 1, 224, 85, 156, 1, 179, + 156, 1, 221, 93, 156, 1, 250, 183, 156, 1, 250, 0, 156, 1, 185, 156, 1, + 190, 156, 1, 219, 113, 156, 1, 218, 89, 156, 1, 230, 141, 156, 1, 229, + 172, 156, 1, 229, 163, 156, 1, 209, 70, 156, 1, 216, 2, 156, 1, 214, 96, + 156, 1, 217, 199, 156, 1, 155, 156, 1, 210, 177, 156, 3, 251, 167, 156, + 22, 3, 253, 164, 156, 22, 3, 74, 156, 22, 3, 233, 102, 156, 22, 3, 71, + 156, 22, 3, 209, 162, 156, 22, 3, 115, 137, 156, 22, 3, 115, 218, 90, + 156, 22, 3, 75, 156, 22, 3, 243, 104, 156, 22, 3, 252, 205, 156, 22, 3, + 76, 156, 22, 3, 222, 152, 156, 22, 3, 251, 184, 156, 3, 208, 188, 156, 1, + 67, 218, 248, 156, 251, 185, 230, 20, 83, 156, 1, 115, 218, 90, 156, 1, + 115, 229, 173, 156, 22, 3, 115, 149, 156, 22, 3, 115, 229, 173, 156, 18, + 205, 85, 156, 18, 102, 156, 18, 105, 156, 18, 142, 156, 18, 139, 156, 18, + 168, 156, 18, 184, 156, 18, 195, 156, 18, 193, 156, 18, 200, 156, 43, + 212, 98, 156, 43, 119, 238, 29, 156, 43, 119, 211, 242, 156, 241, 116, + 119, 219, 204, 156, 241, 116, 119, 239, 121, 156, 241, 116, 129, 219, + 202, 156, 246, 72, 83, 156, 1, 248, 47, 224, 104, 156, 1, 248, 47, 226, + 33, 156, 1, 248, 47, 218, 90, 156, 1, 248, 47, 149, 156, 1, 248, 47, 229, + 173, 156, 1, 248, 47, 232, 76, 132, 3, 252, 72, 132, 3, 208, 182, 132, 1, + 251, 157, 132, 1, 253, 118, 132, 1, 252, 228, 132, 1, 252, 243, 132, 1, + 232, 210, 132, 1, 233, 101, 132, 1, 209, 153, 132, 1, 209, 156, 132, 1, + 232, 236, 132, 1, 232, 237, 132, 1, 233, 87, 132, 1, 233, 89, 132, 1, + 242, 152, 132, 1, 243, 99, 132, 1, 252, 191, 132, 1, 222, 70, 132, 1, + 222, 145, 132, 1, 251, 170, 132, 1, 252, 147, 231, 229, 132, 1, 227, 246, + 231, 229, 132, 1, 252, 147, 240, 190, 132, 1, 227, 246, 240, 190, 132, 1, + 232, 22, 225, 229, 132, 1, 217, 143, 240, 190, 132, 1, 252, 147, 248, + 174, 132, 1, 227, 246, 248, 174, 132, 1, 252, 147, 232, 185, 132, 1, 227, + 246, 232, 185, 132, 1, 212, 212, 225, 229, 132, 1, 212, 212, 217, 142, + 225, 230, 132, 1, 217, 143, 232, 185, 132, 1, 252, 147, 210, 204, 132, 1, + 227, 246, 210, 204, 132, 1, 252, 147, 246, 45, 132, 1, 227, 246, 246, 45, + 132, 1, 226, 61, 225, 184, 132, 1, 217, 143, 246, 45, 132, 1, 252, 147, + 212, 139, 132, 1, 227, 246, 212, 139, 132, 1, 252, 147, 246, 65, 132, 1, + 227, 246, 246, 65, 132, 1, 246, 96, 225, 184, 132, 1, 217, 143, 246, 65, + 132, 1, 252, 147, 221, 182, 132, 1, 227, 246, 221, 182, 132, 1, 252, 147, + 250, 99, 132, 1, 227, 246, 250, 99, 132, 1, 227, 161, 132, 1, 252, 131, + 250, 99, 132, 1, 206, 57, 132, 1, 219, 57, 132, 1, 246, 96, 230, 67, 132, + 1, 209, 41, 132, 1, 212, 212, 217, 115, 132, 1, 226, 61, 217, 115, 132, + 1, 246, 96, 217, 115, 132, 1, 239, 75, 132, 1, 226, 61, 230, 67, 132, 1, + 242, 30, 132, 3, 252, 180, 132, 22, 3, 252, 238, 132, 22, 3, 231, 192, + 252, 245, 132, 22, 3, 245, 135, 252, 245, 132, 22, 3, 231, 192, 232, 233, + 132, 22, 3, 245, 135, 232, 233, 132, 22, 3, 231, 192, 222, 50, 132, 22, + 3, 245, 135, 222, 50, 132, 22, 3, 240, 233, 132, 22, 3, 231, 38, 132, 22, + 3, 245, 135, 231, 38, 132, 22, 3, 231, 40, 245, 240, 132, 22, 3, 231, 39, + 239, 142, 252, 238, 132, 22, 3, 231, 39, 239, 142, 245, 135, 252, 238, + 132, 22, 3, 231, 39, 239, 142, 240, 189, 132, 22, 3, 240, 189, 132, 229, + 183, 18, 205, 85, 132, 229, 183, 18, 102, 132, 229, 183, 18, 105, 132, + 229, 183, 18, 142, 132, 229, 183, 18, 139, 132, 229, 183, 18, 168, 132, + 229, 183, 18, 184, 132, 229, 183, 18, 195, 132, 229, 183, 18, 193, 132, + 229, 183, 18, 200, 132, 22, 3, 245, 135, 240, 233, 132, 22, 3, 245, 135, + 240, 189, 132, 220, 72, 230, 221, 189, 157, 231, 54, 232, 41, 189, 157, + 231, 139, 231, 162, 189, 157, 231, 139, 231, 131, 189, 157, 231, 139, + 231, 126, 189, 157, 231, 139, 231, 135, 189, 157, 231, 139, 219, 78, 189, + 157, 225, 3, 224, 246, 189, 157, 248, 33, 248, 100, 189, 157, 248, 33, + 248, 43, 189, 157, 248, 33, 248, 99, 189, 157, 214, 194, 214, 193, 189, + 157, 248, 33, 248, 29, 189, 157, 205, 248, 205, 255, 189, 157, 245, 52, + 248, 107, 189, 157, 211, 130, 221, 193, 189, 157, 211, 254, 212, 46, 189, + 157, 211, 254, 225, 206, 189, 157, 211, 254, 221, 56, 189, 157, 224, 68, + 225, 101, 189, 157, 245, 52, 245, 241, 189, 157, 211, 130, 212, 167, 189, + 157, 211, 254, 211, 225, 189, 157, 211, 254, 212, 52, 189, 157, 211, 254, + 211, 249, 189, 157, 224, 68, 223, 217, 189, 157, 249, 185, 250, 154, 189, + 157, 220, 212, 220, 240, 189, 157, 221, 67, 221, 58, 189, 157, 241, 163, + 242, 73, 189, 157, 221, 67, 221, 86, 189, 157, 241, 163, 242, 47, 189, + 157, 221, 67, 217, 155, 189, 157, 226, 182, 185, 189, 157, 205, 248, 206, + 85, 189, 157, 218, 125, 218, 49, 189, 157, 218, 50, 189, 157, 229, 145, + 229, 198, 189, 157, 229, 81, 189, 157, 206, 251, 207, 91, 189, 157, 214, + 194, 217, 170, 189, 157, 214, 194, 218, 23, 189, 157, 214, 194, 213, 202, + 189, 157, 238, 150, 238, 245, 189, 157, 229, 145, 248, 13, 189, 157, 148, + 252, 114, 189, 157, 238, 150, 224, 63, 189, 157, 222, 28, 189, 157, 217, + 137, 62, 189, 157, 227, 240, 239, 109, 189, 157, 217, 137, 253, 164, 189, + 157, 217, 137, 252, 136, 189, 157, 217, 137, 74, 189, 157, 217, 137, 233, + 102, 189, 157, 217, 137, 210, 3, 189, 157, 217, 137, 210, 1, 189, 157, + 217, 137, 71, 189, 157, 217, 137, 209, 162, 189, 157, 221, 69, 189, 247, + 25, 16, 250, 155, 189, 157, 217, 137, 75, 189, 157, 217, 137, 252, 248, + 189, 157, 217, 137, 76, 189, 157, 217, 137, 252, 206, 227, 234, 189, 157, + 217, 137, 252, 206, 227, 235, 189, 157, 230, 110, 189, 157, 227, 231, + 189, 157, 227, 232, 189, 157, 227, 240, 243, 75, 189, 157, 227, 240, 211, + 253, 189, 157, 227, 240, 211, 54, 189, 157, 227, 240, 248, 87, 189, 157, + 212, 44, 189, 157, 224, 202, 189, 157, 206, 79, 189, 157, 241, 153, 189, + 18, 205, 85, 189, 18, 102, 189, 18, 105, 189, 18, 142, 189, 18, 139, 189, + 18, 168, 189, 18, 184, 189, 18, 195, 189, 18, 193, 189, 18, 200, 189, + 157, 252, 110, 189, 157, 231, 136, 230, 90, 1, 231, 53, 230, 90, 1, 231, + 139, 213, 151, 230, 90, 1, 231, 139, 212, 176, 230, 90, 1, 225, 2, 230, + 90, 1, 247, 174, 230, 90, 1, 214, 194, 212, 176, 230, 90, 1, 223, 110, + 230, 90, 1, 245, 51, 230, 90, 1, 124, 230, 90, 1, 211, 254, 213, 151, + 230, 90, 1, 211, 254, 212, 176, 230, 90, 1, 224, 67, 230, 90, 1, 249, + 184, 230, 90, 1, 220, 211, 230, 90, 1, 221, 67, 213, 151, 230, 90, 1, + 241, 163, 212, 176, 230, 90, 1, 221, 67, 212, 176, 230, 90, 1, 241, 163, + 213, 151, 230, 90, 1, 226, 181, 230, 90, 1, 205, 247, 230, 90, 1, 229, + 145, 229, 198, 230, 90, 1, 229, 145, 229, 109, 230, 90, 1, 206, 250, 230, + 90, 1, 214, 194, 213, 151, 230, 90, 1, 238, 150, 213, 151, 230, 90, 1, + 76, 230, 90, 1, 238, 150, 212, 176, 230, 90, 243, 54, 230, 90, 22, 3, 62, + 230, 90, 22, 3, 227, 240, 232, 27, 230, 90, 22, 3, 253, 164, 230, 90, 22, + 3, 252, 136, 230, 90, 22, 3, 74, 230, 90, 22, 3, 233, 102, 230, 90, 22, + 3, 206, 123, 230, 90, 22, 3, 205, 169, 230, 90, 22, 3, 71, 230, 90, 22, + 3, 209, 162, 230, 90, 22, 3, 227, 240, 231, 36, 230, 90, 216, 47, 3, 229, + 144, 230, 90, 216, 47, 3, 223, 110, 230, 90, 22, 3, 75, 230, 90, 22, 3, + 243, 90, 230, 90, 22, 3, 76, 230, 90, 22, 3, 251, 159, 230, 90, 22, 3, + 252, 205, 230, 90, 231, 54, 230, 141, 230, 90, 135, 227, 240, 243, 75, + 230, 90, 135, 227, 240, 211, 253, 230, 90, 135, 227, 240, 211, 211, 230, + 90, 135, 227, 240, 248, 182, 230, 90, 248, 223, 83, 230, 90, 224, 211, + 230, 90, 18, 205, 85, 230, 90, 18, 102, 230, 90, 18, 105, 230, 90, 18, + 142, 230, 90, 18, 139, 230, 90, 18, 168, 230, 90, 18, 184, 230, 90, 18, + 195, 230, 90, 18, 193, 230, 90, 18, 200, 230, 90, 238, 150, 224, 67, 230, + 90, 238, 150, 226, 181, 230, 90, 1, 231, 140, 240, 19, 230, 90, 1, 231, + 140, 223, 110, 72, 4, 222, 173, 72, 141, 239, 215, 206, 3, 227, 16, 210, + 249, 62, 72, 141, 239, 215, 206, 3, 227, 16, 254, 254, 218, 129, 250, 63, + 185, 72, 141, 239, 215, 206, 3, 227, 16, 254, 254, 239, 215, 210, 229, + 185, 72, 141, 78, 206, 3, 227, 16, 227, 121, 185, 72, 141, 247, 188, 206, + 3, 227, 16, 216, 9, 185, 72, 141, 248, 200, 206, 3, 227, 16, 221, 57, + 215, 252, 185, 72, 141, 206, 3, 227, 16, 210, 229, 215, 252, 185, 72, + 141, 217, 113, 215, 251, 72, 141, 249, 104, 206, 3, 227, 15, 72, 141, + 249, 204, 215, 154, 206, 3, 227, 15, 72, 141, 233, 6, 210, 228, 72, 141, + 245, 234, 210, 229, 249, 103, 72, 141, 215, 251, 72, 141, 223, 115, 215, + 251, 72, 141, 210, 229, 215, 251, 72, 141, 223, 115, 210, 229, 215, 251, + 72, 141, 218, 151, 248, 71, 214, 110, 215, 251, 72, 141, 218, 216, 239, + 246, 215, 251, 72, 141, 248, 200, 255, 2, 218, 54, 227, 120, 152, 248, + 226, 72, 141, 239, 215, 210, 228, 72, 229, 132, 3, 248, 108, 218, 53, 72, + 229, 132, 3, 229, 246, 218, 53, 72, 251, 205, 3, 216, 5, 240, 173, 255, + 3, 218, 53, 72, 251, 205, 3, 255, 0, 179, 72, 251, 205, 3, 217, 87, 210, + 223, 72, 3, 219, 53, 245, 65, 240, 172, 72, 3, 219, 53, 245, 65, 240, 21, + 72, 3, 219, 53, 245, 65, 239, 216, 72, 3, 219, 53, 225, 225, 240, 172, + 72, 3, 219, 53, 225, 225, 240, 21, 72, 3, 219, 53, 245, 65, 219, 53, 225, + 224, 72, 18, 205, 85, 72, 18, 102, 72, 18, 105, 72, 18, 142, 72, 18, 139, + 72, 18, 168, 72, 18, 184, 72, 18, 195, 72, 18, 193, 72, 18, 200, 72, 18, + 160, 102, 72, 18, 160, 105, 72, 18, 160, 142, 72, 18, 160, 139, 72, 18, + 160, 168, 72, 18, 160, 184, 72, 18, 160, 195, 72, 18, 160, 193, 72, 18, + 160, 200, 72, 18, 160, 205, 85, 72, 141, 249, 106, 218, 53, 72, 141, 225, + 68, 249, 36, 223, 126, 205, 21, 72, 141, 248, 200, 255, 2, 218, 54, 249, + 37, 226, 225, 248, 226, 72, 141, 225, 68, 249, 36, 216, 6, 218, 53, 72, + 141, 248, 83, 227, 15, 72, 141, 210, 244, 254, 255, 72, 141, 239, 198, + 218, 54, 239, 158, 72, 141, 239, 198, 218, 54, 239, 164, 72, 141, 252, + 115, 231, 157, 239, 158, 72, 141, 252, 115, 231, 157, 239, 164, 72, 3, + 206, 71, 210, 227, 72, 3, 227, 200, 210, 227, 72, 1, 172, 72, 1, 231, + 167, 72, 1, 240, 244, 72, 1, 240, 99, 72, 1, 225, 77, 72, 1, 249, 1, 72, + 1, 248, 110, 72, 1, 232, 200, 72, 1, 223, 144, 72, 1, 210, 208, 72, 1, + 210, 196, 72, 1, 246, 54, 72, 1, 246, 38, 72, 1, 224, 103, 72, 1, 212, + 219, 72, 1, 212, 56, 72, 1, 246, 145, 72, 1, 245, 192, 72, 1, 199, 72, 1, + 179, 72, 1, 221, 93, 72, 1, 250, 183, 72, 1, 250, 0, 72, 1, 185, 72, 1, + 210, 243, 72, 1, 210, 233, 72, 1, 243, 196, 72, 1, 243, 190, 72, 1, 207, + 96, 72, 1, 205, 81, 72, 1, 205, 116, 72, 1, 255, 5, 72, 1, 190, 72, 1, + 219, 113, 72, 1, 230, 141, 72, 1, 216, 2, 72, 1, 214, 96, 72, 1, 217, + 199, 72, 1, 155, 72, 1, 62, 72, 1, 230, 250, 72, 1, 241, 200, 219, 113, + 72, 1, 231, 72, 72, 1, 218, 89, 72, 22, 3, 253, 164, 72, 22, 3, 74, 72, + 22, 3, 233, 102, 72, 22, 3, 71, 72, 22, 3, 209, 162, 72, 22, 3, 115, 137, + 72, 22, 3, 115, 218, 90, 72, 22, 3, 115, 149, 72, 22, 3, 115, 229, 173, + 72, 22, 3, 75, 72, 22, 3, 243, 104, 72, 22, 3, 76, 72, 22, 3, 222, 152, + 72, 3, 218, 135, 213, 204, 225, 78, 218, 124, 72, 3, 218, 129, 250, 62, + 72, 22, 3, 218, 224, 74, 72, 22, 3, 218, 224, 233, 102, 72, 3, 223, 126, + 205, 22, 225, 233, 246, 145, 72, 3, 214, 207, 230, 60, 72, 141, 239, 123, + 72, 141, 222, 16, 72, 3, 230, 63, 218, 53, 72, 3, 206, 76, 218, 53, 72, + 3, 230, 64, 210, 244, 248, 226, 72, 3, 227, 123, 248, 226, 72, 3, 239, + 219, 248, 227, 218, 214, 72, 3, 239, 219, 227, 113, 218, 214, 72, 3, 233, + 2, 227, 123, 248, 226, 72, 213, 191, 3, 230, 64, 210, 244, 248, 226, 72, + 213, 191, 3, 227, 123, 248, 226, 72, 213, 191, 3, 233, 2, 227, 123, 248, + 226, 72, 213, 191, 1, 172, 72, 213, 191, 1, 231, 167, 72, 213, 191, 1, + 240, 244, 72, 213, 191, 1, 240, 99, 72, 213, 191, 1, 225, 77, 72, 213, + 191, 1, 249, 1, 72, 213, 191, 1, 248, 110, 72, 213, 191, 1, 232, 200, 72, + 213, 191, 1, 223, 144, 72, 213, 191, 1, 210, 208, 72, 213, 191, 1, 210, + 196, 72, 213, 191, 1, 246, 54, 72, 213, 191, 1, 246, 38, 72, 213, 191, 1, + 224, 103, 72, 213, 191, 1, 212, 219, 72, 213, 191, 1, 212, 56, 72, 213, + 191, 1, 246, 145, 72, 213, 191, 1, 245, 192, 72, 213, 191, 1, 199, 72, + 213, 191, 1, 179, 72, 213, 191, 1, 221, 93, 72, 213, 191, 1, 250, 183, + 72, 213, 191, 1, 250, 0, 72, 213, 191, 1, 185, 72, 213, 191, 1, 210, 243, + 72, 213, 191, 1, 210, 233, 72, 213, 191, 1, 243, 196, 72, 213, 191, 1, + 243, 190, 72, 213, 191, 1, 207, 96, 72, 213, 191, 1, 205, 81, 72, 213, + 191, 1, 205, 116, 72, 213, 191, 1, 255, 5, 72, 213, 191, 1, 190, 72, 213, + 191, 1, 219, 113, 72, 213, 191, 1, 230, 141, 72, 213, 191, 1, 216, 2, 72, + 213, 191, 1, 214, 96, 72, 213, 191, 1, 217, 199, 72, 213, 191, 1, 155, + 72, 213, 191, 1, 62, 72, 213, 191, 1, 230, 250, 72, 213, 191, 1, 241, + 200, 207, 96, 72, 213, 191, 1, 241, 200, 190, 72, 213, 191, 1, 241, 200, + 219, 113, 72, 230, 237, 218, 51, 231, 167, 72, 230, 237, 218, 51, 231, + 168, 249, 37, 226, 225, 248, 226, 72, 248, 214, 3, 77, 250, 55, 72, 248, + 214, 3, 147, 250, 55, 72, 248, 214, 3, 248, 215, 212, 129, 72, 248, 214, + 3, 217, 112, 255, 4, 72, 16, 243, 250, 249, 101, 72, 16, 219, 52, 218, + 136, 72, 16, 222, 39, 240, 171, 72, 16, 219, 52, 218, 137, 218, 216, 239, + 245, 72, 16, 221, 57, 179, 72, 16, 224, 51, 249, 101, 72, 16, 224, 51, + 249, 102, 223, 115, 255, 1, 72, 16, 224, 51, 249, 102, 239, 217, 255, 1, + 72, 16, 224, 51, 249, 102, 249, 37, 255, 1, 72, 3, 219, 53, 225, 225, + 219, 53, 245, 64, 72, 3, 219, 53, 225, 225, 239, 216, 72, 141, 249, 105, + 215, 154, 240, 62, 227, 16, 218, 215, 72, 141, 226, 183, 206, 3, 240, 62, + 227, 16, 218, 215, 72, 141, 223, 115, 210, 228, 72, 141, 78, 249, 128, + 218, 126, 206, 3, 227, 16, 227, 121, 185, 72, 141, 247, 188, 249, 128, + 218, 126, 206, 3, 227, 16, 216, 9, 185, 218, 166, 213, 114, 53, 230, 45, + 213, 114, 53, 218, 166, 213, 114, 3, 2, 245, 21, 230, 45, 213, 114, 3, 2, + 245, 21, 72, 141, 230, 55, 227, 124, 218, 53, 72, 141, 211, 76, 227, 124, + 218, 53, 66, 1, 172, 66, 1, 231, 167, 66, 1, 240, 244, 66, 1, 240, 99, + 66, 1, 225, 77, 66, 1, 249, 1, 66, 1, 248, 110, 66, 1, 232, 200, 66, 1, + 232, 170, 66, 1, 223, 144, 66, 1, 224, 69, 66, 1, 210, 208, 66, 1, 210, + 196, 66, 1, 246, 54, 66, 1, 246, 38, 66, 1, 224, 103, 66, 1, 212, 219, + 66, 1, 212, 56, 66, 1, 246, 145, 66, 1, 245, 192, 66, 1, 199, 66, 1, 179, + 66, 1, 221, 93, 66, 1, 250, 183, 66, 1, 250, 0, 66, 1, 185, 66, 1, 190, + 66, 1, 219, 113, 66, 1, 230, 141, 66, 1, 207, 96, 66, 1, 217, 199, 66, 1, + 155, 66, 1, 229, 172, 66, 1, 62, 66, 1, 215, 238, 62, 66, 1, 74, 66, 1, + 233, 102, 66, 1, 71, 66, 1, 209, 162, 66, 1, 75, 66, 1, 226, 169, 75, 66, + 1, 76, 66, 1, 251, 184, 66, 22, 3, 212, 178, 253, 164, 66, 22, 3, 253, + 164, 66, 22, 3, 74, 66, 22, 3, 233, 102, 66, 22, 3, 71, 66, 22, 3, 209, + 162, 66, 22, 3, 75, 66, 22, 3, 252, 205, 66, 22, 3, 226, 169, 233, 102, + 66, 22, 3, 226, 169, 76, 66, 22, 3, 174, 52, 66, 3, 252, 73, 66, 3, 67, + 55, 66, 3, 208, 183, 66, 3, 208, 188, 66, 3, 251, 229, 66, 107, 3, 169, + 190, 66, 107, 3, 169, 219, 113, 66, 107, 3, 169, 207, 96, 66, 107, 3, + 169, 155, 66, 1, 239, 232, 217, 199, 66, 18, 205, 85, 66, 18, 102, 66, + 18, 105, 66, 18, 142, 66, 18, 139, 66, 18, 168, 66, 18, 184, 66, 18, 195, + 66, 18, 193, 66, 18, 200, 66, 3, 229, 180, 217, 76, 66, 3, 217, 76, 66, + 16, 229, 141, 66, 16, 247, 149, 66, 16, 252, 224, 66, 16, 240, 154, 66, + 1, 216, 2, 66, 1, 214, 96, 66, 1, 115, 137, 66, 1, 115, 218, 90, 66, 1, + 115, 149, 66, 1, 115, 229, 173, 66, 22, 3, 115, 137, 66, 22, 3, 115, 218, + 90, 66, 22, 3, 115, 149, 66, 22, 3, 115, 229, 173, 66, 1, 226, 169, 225, + 77, 66, 1, 226, 169, 232, 170, 66, 1, 226, 169, 250, 97, 66, 1, 226, 169, + 250, 92, 66, 107, 3, 226, 169, 169, 199, 66, 107, 3, 226, 169, 169, 185, + 66, 107, 3, 226, 169, 169, 230, 141, 66, 1, 216, 8, 232, 4, 216, 2, 66, + 22, 3, 216, 8, 232, 4, 242, 192, 66, 135, 141, 216, 8, 232, 4, 239, 82, + 66, 135, 141, 216, 8, 232, 4, 231, 225, 221, 66, 66, 1, 207, 34, 220, 39, + 232, 4, 212, 56, 66, 1, 207, 34, 220, 39, 232, 4, 220, 45, 66, 22, 3, + 207, 34, 220, 39, 232, 4, 242, 192, 66, 22, 3, 207, 34, 220, 39, 232, 4, + 210, 3, 66, 3, 207, 34, 220, 39, 232, 4, 211, 117, 66, 3, 207, 34, 220, + 39, 232, 4, 211, 116, 66, 3, 207, 34, 220, 39, 232, 4, 211, 115, 66, 3, + 207, 34, 220, 39, 232, 4, 211, 114, 66, 3, 207, 34, 220, 39, 232, 4, 211, + 113, 66, 1, 243, 115, 220, 39, 232, 4, 224, 103, 66, 1, 243, 115, 220, + 39, 232, 4, 205, 176, 66, 1, 243, 115, 220, 39, 232, 4, 240, 64, 66, 22, + 3, 240, 166, 232, 4, 74, 66, 22, 3, 231, 230, 222, 206, 66, 22, 3, 231, + 230, 71, 66, 22, 3, 231, 230, 243, 104, 66, 1, 215, 238, 172, 66, 1, 215, + 238, 231, 167, 66, 1, 215, 238, 240, 244, 66, 1, 215, 238, 249, 1, 66, 1, + 215, 238, 205, 116, 66, 1, 215, 238, 223, 144, 66, 1, 215, 238, 246, 145, + 66, 1, 215, 238, 199, 66, 1, 215, 238, 221, 93, 66, 1, 215, 238, 242, 73, + 66, 1, 215, 238, 250, 183, 66, 1, 215, 238, 212, 56, 66, 1, 215, 238, + 155, 66, 107, 3, 215, 238, 169, 207, 96, 66, 22, 3, 215, 238, 253, 164, + 66, 22, 3, 215, 238, 75, 66, 22, 3, 215, 238, 174, 52, 66, 22, 3, 215, + 238, 42, 206, 123, 66, 3, 215, 238, 211, 116, 66, 3, 215, 238, 211, 115, + 66, 3, 215, 238, 211, 113, 66, 3, 215, 238, 211, 112, 66, 3, 215, 238, + 247, 82, 211, 116, 66, 3, 215, 238, 247, 82, 211, 115, 66, 3, 215, 238, + 247, 82, 243, 44, 211, 118, 66, 1, 218, 37, 222, 23, 242, 73, 66, 3, 218, + 37, 222, 23, 211, 113, 66, 215, 238, 18, 205, 85, 66, 215, 238, 18, 102, + 66, 215, 238, 18, 105, 66, 215, 238, 18, 142, 66, 215, 238, 18, 139, 66, + 215, 238, 18, 168, 66, 215, 238, 18, 184, 66, 215, 238, 18, 195, 66, 215, + 238, 18, 193, 66, 215, 238, 18, 200, 66, 3, 231, 160, 211, 117, 66, 3, + 231, 160, 211, 115, 66, 22, 3, 252, 193, 62, 66, 22, 3, 252, 193, 252, + 205, 66, 16, 215, 238, 102, 66, 16, 215, 238, 242, 167, 108, 6, 1, 252, + 122, 108, 6, 1, 250, 140, 108, 6, 1, 240, 214, 108, 6, 1, 245, 31, 108, + 6, 1, 243, 41, 108, 6, 1, 208, 197, 108, 6, 1, 205, 88, 108, 6, 1, 212, + 174, 108, 6, 1, 233, 68, 108, 6, 1, 232, 27, 108, 6, 1, 230, 82, 108, 6, + 1, 227, 221, 108, 6, 1, 225, 200, 108, 6, 1, 222, 165, 108, 6, 1, 221, + 231, 108, 6, 1, 205, 77, 108, 6, 1, 219, 95, 108, 6, 1, 217, 151, 108, 6, + 1, 212, 162, 108, 6, 1, 209, 234, 108, 6, 1, 221, 85, 108, 6, 1, 231, + 155, 108, 6, 1, 240, 90, 108, 6, 1, 220, 4, 108, 6, 1, 215, 171, 108, 6, + 1, 248, 45, 108, 6, 1, 248, 226, 108, 6, 1, 232, 154, 108, 6, 1, 247, + 240, 108, 6, 1, 248, 95, 108, 6, 1, 206, 179, 108, 6, 1, 232, 167, 108, + 6, 1, 239, 138, 108, 6, 1, 239, 71, 108, 6, 1, 239, 6, 108, 6, 1, 207, + 51, 108, 6, 1, 239, 95, 108, 6, 1, 238, 146, 108, 6, 1, 205, 249, 108, 6, + 1, 252, 237, 108, 1, 252, 122, 108, 1, 250, 140, 108, 1, 240, 214, 108, + 1, 245, 31, 108, 1, 243, 41, 108, 1, 208, 197, 108, 1, 205, 88, 108, 1, + 212, 174, 108, 1, 233, 68, 108, 1, 232, 27, 108, 1, 230, 82, 108, 1, 227, + 221, 108, 1, 225, 200, 108, 1, 222, 165, 108, 1, 221, 231, 108, 1, 205, + 77, 108, 1, 219, 95, 108, 1, 217, 151, 108, 1, 212, 162, 108, 1, 209, + 234, 108, 1, 221, 85, 108, 1, 231, 155, 108, 1, 240, 90, 108, 1, 220, 4, + 108, 1, 215, 171, 108, 1, 248, 45, 108, 1, 248, 226, 108, 1, 232, 154, + 108, 1, 247, 240, 108, 1, 248, 95, 108, 1, 206, 179, 108, 1, 232, 167, + 108, 1, 239, 138, 108, 1, 239, 71, 108, 1, 239, 6, 108, 1, 207, 51, 108, + 1, 239, 95, 108, 1, 238, 146, 108, 1, 241, 250, 108, 1, 205, 249, 108, 1, + 243, 56, 108, 1, 201, 240, 214, 108, 1, 252, 200, 108, 221, 229, 216, 39, + 65, 1, 108, 225, 200, 108, 1, 252, 237, 108, 1, 239, 94, 53, 108, 1, 230, + 132, 53, 25, 113, 231, 84, 25, 113, 214, 88, 25, 113, 224, 223, 25, 113, + 211, 193, 25, 113, 214, 77, 25, 113, 218, 198, 25, 113, 226, 240, 25, + 113, 221, 39, 25, 113, 214, 85, 25, 113, 215, 33, 25, 113, 214, 82, 25, + 113, 233, 125, 25, 113, 247, 246, 25, 113, 214, 92, 25, 113, 248, 54, 25, + 113, 231, 143, 25, 113, 212, 15, 25, 113, 221, 76, 25, 113, 239, 3, 25, + 113, 224, 219, 25, 113, 214, 86, 25, 113, 224, 213, 25, 113, 224, 217, + 25, 113, 211, 190, 25, 113, 218, 186, 25, 113, 214, 84, 25, 113, 218, + 196, 25, 113, 232, 10, 25, 113, 226, 233, 25, 113, 232, 13, 25, 113, 221, + 34, 25, 113, 221, 32, 25, 113, 221, 20, 25, 113, 221, 28, 25, 113, 221, + 26, 25, 113, 221, 23, 25, 113, 221, 25, 25, 113, 221, 22, 25, 113, 221, + 27, 25, 113, 221, 37, 25, 113, 221, 38, 25, 113, 221, 21, 25, 113, 221, + 31, 25, 113, 232, 11, 25, 113, 232, 9, 25, 113, 215, 26, 25, 113, 215, + 24, 25, 113, 215, 16, 25, 113, 215, 19, 25, 113, 215, 25, 25, 113, 215, + 21, 25, 113, 215, 20, 25, 113, 215, 18, 25, 113, 215, 29, 25, 113, 215, + 31, 25, 113, 215, 32, 25, 113, 215, 27, 25, 113, 215, 17, 25, 113, 215, + 22, 25, 113, 215, 30, 25, 113, 248, 36, 25, 113, 248, 34, 25, 113, 248, + 121, 25, 113, 248, 119, 25, 113, 221, 247, 25, 113, 233, 120, 25, 113, + 233, 111, 25, 113, 233, 119, 25, 113, 233, 116, 25, 113, 233, 114, 25, + 113, 233, 118, 25, 113, 214, 89, 25, 113, 233, 123, 25, 113, 233, 124, + 25, 113, 233, 112, 25, 113, 233, 117, 25, 113, 206, 29, 25, 113, 247, + 245, 25, 113, 248, 37, 25, 113, 248, 35, 25, 113, 248, 122, 25, 113, 248, + 120, 25, 113, 248, 52, 25, 113, 248, 53, 25, 113, 248, 38, 25, 113, 248, + 123, 25, 113, 221, 74, 25, 113, 232, 12, 25, 113, 214, 90, 25, 113, 206, + 35, 25, 113, 231, 75, 25, 113, 224, 215, 25, 113, 224, 221, 25, 113, 224, + 220, 25, 113, 211, 187, 25, 113, 241, 232, 25, 162, 241, 232, 25, 162, + 62, 25, 162, 252, 248, 25, 162, 190, 25, 162, 206, 98, 25, 162, 243, 6, + 25, 162, 75, 25, 162, 206, 39, 25, 162, 206, 52, 25, 162, 76, 25, 162, + 207, 96, 25, 162, 207, 92, 25, 162, 222, 206, 25, 162, 205, 247, 25, 162, + 71, 25, 162, 207, 38, 25, 162, 207, 51, 25, 162, 207, 20, 25, 162, 205, + 213, 25, 162, 242, 192, 25, 162, 206, 11, 25, 162, 74, 25, 162, 254, 252, + 25, 162, 254, 251, 25, 162, 206, 112, 25, 162, 206, 110, 25, 162, 243, 4, + 25, 162, 243, 3, 25, 162, 243, 5, 25, 162, 206, 38, 25, 162, 206, 37, 25, + 162, 223, 58, 25, 162, 223, 59, 25, 162, 223, 52, 25, 162, 223, 57, 25, + 162, 223, 55, 25, 162, 205, 241, 25, 162, 205, 240, 25, 162, 205, 239, + 25, 162, 205, 242, 25, 162, 205, 243, 25, 162, 210, 76, 25, 162, 210, 75, + 25, 162, 210, 73, 25, 162, 210, 69, 25, 162, 210, 70, 25, 162, 205, 212, + 25, 162, 205, 209, 25, 162, 205, 210, 25, 162, 205, 204, 25, 162, 205, + 205, 25, 162, 205, 206, 25, 162, 205, 208, 25, 162, 242, 186, 25, 162, + 242, 188, 25, 162, 206, 10, 25, 162, 237, 224, 25, 162, 237, 216, 25, + 162, 237, 219, 25, 162, 237, 217, 25, 162, 237, 221, 25, 162, 237, 223, + 25, 162, 252, 30, 25, 162, 252, 27, 25, 162, 252, 25, 25, 162, 252, 26, + 25, 162, 214, 93, 25, 162, 254, 253, 25, 162, 206, 111, 25, 162, 206, 36, + 25, 162, 223, 54, 25, 162, 223, 53, 25, 100, 231, 84, 25, 100, 214, 88, + 25, 100, 231, 77, 25, 100, 224, 223, 25, 100, 224, 221, 25, 100, 224, + 220, 25, 100, 211, 193, 25, 100, 218, 198, 25, 100, 218, 193, 25, 100, + 218, 190, 25, 100, 218, 183, 25, 100, 218, 178, 25, 100, 218, 173, 25, + 100, 218, 184, 25, 100, 218, 196, 25, 100, 226, 240, 25, 100, 221, 39, + 25, 100, 221, 28, 25, 100, 215, 33, 25, 100, 214, 82, 25, 100, 233, 125, + 25, 100, 247, 246, 25, 100, 248, 54, 25, 100, 231, 143, 25, 100, 212, 15, + 25, 100, 221, 76, 25, 100, 239, 3, 25, 100, 231, 78, 25, 100, 231, 76, + 25, 100, 224, 219, 25, 100, 224, 213, 25, 100, 224, 215, 25, 100, 224, + 218, 25, 100, 224, 214, 25, 100, 211, 190, 25, 100, 211, 187, 25, 100, + 218, 191, 25, 100, 218, 186, 25, 100, 218, 172, 25, 100, 218, 171, 25, + 100, 214, 84, 25, 100, 218, 188, 25, 100, 218, 187, 25, 100, 218, 180, + 25, 100, 218, 182, 25, 100, 218, 195, 25, 100, 218, 175, 25, 100, 218, + 185, 25, 100, 218, 194, 25, 100, 218, 170, 25, 100, 226, 236, 25, 100, + 226, 231, 25, 100, 226, 233, 25, 100, 226, 230, 25, 100, 226, 228, 25, + 100, 226, 234, 25, 100, 226, 239, 25, 100, 226, 237, 25, 100, 232, 13, + 25, 100, 221, 30, 25, 100, 221, 31, 25, 100, 221, 36, 25, 100, 232, 11, + 25, 100, 215, 26, 25, 100, 215, 16, 25, 100, 215, 19, 25, 100, 215, 21, + 25, 100, 221, 247, 25, 100, 233, 120, 25, 100, 233, 113, 25, 100, 214, + 89, 25, 100, 233, 121, 25, 100, 206, 29, 25, 100, 206, 25, 25, 100, 206, + 26, 25, 100, 221, 74, 25, 100, 232, 12, 25, 100, 239, 1, 25, 100, 238, + 255, 25, 100, 239, 2, 25, 100, 239, 0, 25, 100, 206, 35, 25, 100, 231, + 80, 25, 100, 231, 79, 25, 100, 231, 83, 25, 100, 231, 81, 25, 100, 231, + 82, 25, 100, 214, 86, 31, 4, 155, 31, 4, 238, 42, 31, 4, 239, 11, 31, 4, + 239, 141, 31, 4, 239, 53, 31, 4, 239, 71, 31, 4, 238, 149, 31, 4, 238, + 148, 31, 4, 230, 141, 31, 4, 229, 81, 31, 4, 229, 235, 31, 4, 230, 140, + 31, 4, 230, 50, 31, 4, 230, 58, 31, 4, 229, 144, 31, 4, 229, 50, 31, 4, + 239, 20, 31, 4, 239, 14, 31, 4, 239, 16, 31, 4, 239, 19, 31, 4, 239, 17, + 31, 4, 239, 18, 31, 4, 239, 15, 31, 4, 239, 13, 31, 4, 185, 31, 4, 226, + 114, 31, 4, 226, 254, 31, 4, 228, 18, 31, 4, 227, 107, 31, 4, 227, 119, + 31, 4, 226, 181, 31, 4, 226, 50, 31, 4, 213, 21, 31, 4, 213, 15, 31, 4, + 213, 17, 31, 4, 213, 20, 31, 4, 213, 18, 31, 4, 213, 19, 31, 4, 213, 16, + 31, 4, 213, 14, 31, 4, 219, 113, 31, 4, 218, 50, 31, 4, 218, 208, 31, 4, + 219, 109, 31, 4, 219, 29, 31, 4, 219, 51, 31, 4, 218, 124, 31, 4, 218, + 18, 31, 4, 217, 199, 31, 4, 213, 203, 31, 4, 215, 80, 31, 4, 217, 196, + 31, 4, 217, 74, 31, 4, 217, 86, 31, 4, 214, 193, 31, 4, 213, 112, 31, 4, + 216, 2, 31, 4, 215, 116, 31, 4, 215, 183, 31, 4, 215, 254, 31, 4, 215, + 212, 31, 4, 215, 214, 31, 4, 215, 158, 31, 4, 215, 98, 31, 4, 220, 19, + 31, 4, 219, 214, 31, 4, 219, 237, 31, 4, 220, 18, 31, 4, 219, 254, 31, 4, + 219, 255, 31, 4, 219, 226, 31, 4, 219, 225, 31, 4, 219, 168, 31, 4, 219, + 164, 31, 4, 219, 167, 31, 4, 219, 165, 31, 4, 219, 166, 31, 4, 219, 251, + 31, 4, 219, 243, 31, 4, 219, 246, 31, 4, 219, 250, 31, 4, 219, 247, 31, + 4, 219, 248, 31, 4, 219, 245, 31, 4, 219, 242, 31, 4, 219, 238, 31, 4, + 219, 241, 31, 4, 219, 239, 31, 4, 219, 240, 31, 4, 250, 183, 31, 4, 249, + 101, 31, 4, 249, 244, 31, 4, 250, 181, 31, 4, 250, 50, 31, 4, 250, 61, + 31, 4, 249, 184, 31, 4, 249, 51, 31, 4, 209, 70, 31, 4, 207, 148, 31, 4, + 208, 214, 31, 4, 209, 69, 31, 4, 209, 34, 31, 4, 209, 39, 31, 4, 208, + 173, 31, 4, 207, 139, 31, 4, 212, 219, 31, 4, 210, 170, 31, 4, 211, 211, + 31, 4, 212, 215, 31, 4, 212, 120, 31, 4, 212, 131, 31, 4, 124, 31, 4, + 210, 130, 31, 4, 249, 1, 31, 4, 247, 40, 31, 4, 247, 251, 31, 4, 249, 0, + 31, 4, 248, 140, 31, 4, 248, 148, 31, 4, 247, 174, 31, 4, 247, 7, 31, 4, + 206, 181, 31, 4, 206, 151, 31, 4, 206, 169, 31, 4, 206, 180, 31, 4, 206, + 174, 31, 4, 206, 175, 31, 4, 206, 159, 31, 4, 206, 158, 31, 4, 206, 145, + 31, 4, 206, 141, 31, 4, 206, 144, 31, 4, 206, 142, 31, 4, 206, 143, 31, + 4, 199, 31, 4, 223, 217, 31, 4, 224, 230, 31, 4, 225, 232, 31, 4, 225, + 106, 31, 4, 225, 110, 31, 4, 224, 67, 31, 4, 223, 153, 31, 4, 223, 144, + 31, 4, 223, 103, 31, 4, 223, 125, 31, 4, 223, 143, 31, 4, 223, 133, 31, + 4, 223, 134, 31, 4, 223, 110, 31, 4, 223, 93, 31, 4, 240, 25, 62, 31, 4, + 240, 25, 71, 31, 4, 240, 25, 74, 31, 4, 240, 25, 253, 164, 31, 4, 240, + 25, 243, 104, 31, 4, 240, 25, 75, 31, 4, 240, 25, 76, 31, 4, 240, 25, + 207, 96, 31, 4, 172, 31, 4, 230, 236, 31, 4, 231, 123, 31, 4, 232, 63, + 31, 4, 231, 221, 31, 4, 231, 224, 31, 4, 231, 53, 31, 4, 231, 52, 31, 4, + 230, 195, 31, 4, 230, 188, 31, 4, 230, 194, 31, 4, 230, 189, 31, 4, 230, + 190, 31, 4, 230, 181, 31, 4, 230, 175, 31, 4, 230, 177, 31, 4, 230, 180, + 31, 4, 230, 178, 31, 4, 230, 179, 31, 4, 230, 176, 31, 4, 230, 174, 31, + 4, 230, 170, 31, 4, 230, 173, 31, 4, 230, 171, 31, 4, 230, 172, 31, 4, + 207, 96, 31, 4, 206, 216, 31, 4, 207, 20, 31, 4, 207, 95, 31, 4, 207, 45, + 31, 4, 207, 51, 31, 4, 206, 250, 31, 4, 206, 249, 31, 4, 221, 84, 62, 31, + 4, 221, 84, 71, 31, 4, 221, 84, 74, 31, 4, 221, 84, 253, 164, 31, 4, 221, + 84, 243, 104, 31, 4, 221, 84, 75, 31, 4, 221, 84, 76, 31, 4, 205, 116, + 31, 4, 205, 9, 31, 4, 205, 40, 31, 4, 205, 115, 31, 4, 205, 91, 31, 4, + 205, 93, 31, 4, 205, 19, 31, 4, 204, 252, 31, 4, 205, 81, 31, 4, 205, 58, + 31, 4, 205, 67, 31, 4, 205, 80, 31, 4, 205, 71, 31, 4, 205, 72, 31, 4, + 205, 64, 31, 4, 205, 49, 31, 4, 190, 31, 4, 205, 213, 31, 4, 206, 11, 31, + 4, 206, 109, 31, 4, 206, 49, 31, 4, 206, 52, 31, 4, 205, 247, 31, 4, 205, + 238, 31, 4, 246, 145, 31, 4, 243, 237, 31, 4, 245, 168, 31, 4, 246, 144, + 31, 4, 245, 251, 31, 4, 246, 9, 31, 4, 245, 51, 31, 4, 243, 206, 31, 4, + 246, 54, 31, 4, 246, 19, 31, 4, 246, 31, 31, 4, 246, 53, 31, 4, 246, 41, + 31, 4, 246, 42, 31, 4, 246, 24, 31, 4, 246, 10, 31, 4, 232, 200, 31, 4, + 232, 104, 31, 4, 232, 162, 31, 4, 232, 199, 31, 4, 232, 180, 31, 4, 232, + 182, 31, 4, 232, 122, 31, 4, 232, 84, 31, 4, 240, 244, 31, 4, 239, 213, + 31, 4, 240, 61, 31, 4, 240, 241, 31, 4, 240, 162, 31, 4, 240, 170, 31, 4, + 240, 19, 31, 4, 240, 18, 31, 4, 239, 174, 31, 4, 239, 170, 31, 4, 239, + 173, 31, 4, 239, 171, 31, 4, 239, 172, 31, 4, 240, 135, 31, 4, 240, 115, + 31, 4, 240, 125, 31, 4, 240, 134, 31, 4, 240, 129, 31, 4, 240, 130, 31, + 4, 240, 119, 31, 4, 240, 104, 31, 4, 212, 56, 31, 4, 211, 230, 31, 4, + 212, 19, 31, 4, 212, 55, 31, 4, 212, 39, 31, 4, 212, 41, 31, 4, 211, 253, + 31, 4, 211, 222, 31, 4, 248, 110, 31, 4, 248, 14, 31, 4, 248, 58, 31, 4, + 248, 109, 31, 4, 248, 78, 31, 4, 248, 82, 31, 4, 248, 32, 31, 4, 248, 3, + 31, 4, 221, 93, 31, 4, 221, 59, 31, 4, 221, 78, 31, 4, 221, 92, 31, 4, + 221, 80, 31, 4, 221, 81, 31, 4, 221, 66, 31, 4, 221, 55, 31, 4, 210, 243, + 31, 4, 210, 216, 31, 4, 210, 222, 31, 4, 210, 242, 31, 4, 210, 236, 31, + 4, 210, 237, 31, 4, 210, 220, 31, 4, 210, 214, 31, 4, 210, 85, 31, 4, + 210, 77, 31, 4, 210, 81, 31, 4, 210, 84, 31, 4, 210, 82, 31, 4, 210, 83, + 31, 4, 210, 79, 31, 4, 210, 78, 31, 4, 242, 73, 31, 4, 241, 88, 31, 4, + 241, 250, 31, 4, 242, 72, 31, 4, 242, 21, 31, 4, 242, 28, 31, 4, 241, + 162, 31, 4, 241, 66, 31, 4, 179, 31, 4, 220, 82, 31, 4, 221, 53, 31, 4, + 222, 51, 31, 4, 221, 164, 31, 4, 221, 174, 31, 4, 220, 211, 31, 4, 220, + 45, 31, 4, 218, 8, 31, 4, 226, 39, 31, 4, 241, 60, 31, 36, 240, 159, 23, + 22, 230, 20, 83, 31, 36, 22, 230, 20, 83, 31, 36, 240, 159, 83, 31, 217, + 77, 83, 31, 206, 231, 31, 241, 82, 213, 251, 31, 247, 155, 31, 216, 52, + 31, 247, 162, 31, 220, 136, 247, 162, 31, 219, 196, 83, 31, 221, 229, + 216, 39, 31, 18, 102, 31, 18, 105, 31, 18, 142, 31, 18, 139, 31, 18, 168, + 31, 18, 184, 31, 18, 195, 31, 18, 193, 31, 18, 200, 31, 43, 212, 98, 31, + 43, 210, 123, 31, 43, 212, 3, 31, 43, 241, 130, 31, 43, 241, 243, 31, 43, + 214, 252, 31, 43, 216, 17, 31, 43, 243, 79, 31, 43, 224, 190, 31, 43, + 238, 29, 31, 43, 212, 99, 211, 242, 31, 4, 217, 82, 226, 50, 31, 4, 226, + 46, 31, 4, 226, 47, 31, 4, 226, 48, 31, 4, 217, 82, 249, 51, 31, 4, 249, + 48, 31, 4, 249, 49, 31, 4, 249, 50, 31, 4, 217, 82, 241, 66, 31, 4, 241, + 62, 31, 4, 241, 63, 31, 4, 241, 64, 31, 4, 217, 82, 220, 45, 31, 4, 220, + 41, 31, 4, 220, 42, 31, 4, 220, 43, 31, 211, 119, 141, 205, 250, 31, 211, + 119, 141, 245, 213, 31, 211, 119, 141, 218, 153, 31, 211, 119, 141, 215, + 144, 218, 153, 31, 211, 119, 141, 245, 142, 31, 211, 119, 141, 231, 202, + 31, 211, 119, 141, 248, 40, 31, 211, 119, 141, 239, 8, 31, 211, 119, 141, + 245, 212, 31, 211, 119, 141, 230, 208, 192, 1, 62, 192, 1, 75, 192, 1, + 74, 192, 1, 76, 192, 1, 71, 192, 1, 209, 148, 192, 1, 240, 244, 192, 1, + 172, 192, 1, 240, 170, 192, 1, 240, 61, 192, 1, 240, 19, 192, 1, 239, + 213, 192, 1, 239, 176, 192, 1, 155, 192, 1, 239, 71, 192, 1, 239, 11, + 192, 1, 238, 149, 192, 1, 238, 42, 192, 1, 238, 17, 192, 1, 230, 141, + 192, 1, 230, 58, 192, 1, 229, 235, 192, 1, 229, 144, 192, 1, 229, 81, + 192, 1, 229, 51, 192, 1, 185, 192, 1, 227, 119, 192, 1, 226, 254, 192, 1, + 226, 181, 192, 1, 226, 114, 192, 1, 199, 192, 1, 238, 173, 192, 1, 225, + 219, 192, 1, 225, 110, 192, 1, 224, 230, 192, 1, 224, 67, 192, 1, 223, + 217, 192, 1, 223, 155, 192, 1, 219, 213, 192, 1, 219, 199, 192, 1, 219, + 192, 192, 1, 219, 183, 192, 1, 219, 172, 192, 1, 219, 170, 192, 1, 217, + 199, 192, 1, 182, 192, 1, 217, 86, 192, 1, 215, 80, 192, 1, 214, 193, + 192, 1, 213, 203, 192, 1, 213, 117, 192, 1, 246, 145, 192, 1, 212, 219, + 192, 1, 246, 9, 192, 1, 212, 131, 192, 1, 245, 168, 192, 1, 211, 211, + 192, 1, 245, 51, 192, 1, 243, 237, 192, 1, 243, 209, 192, 1, 245, 62, + 192, 1, 211, 147, 192, 1, 211, 146, 192, 1, 211, 135, 192, 1, 211, 134, + 192, 1, 211, 133, 192, 1, 211, 132, 192, 1, 210, 243, 192, 1, 210, 237, + 192, 1, 210, 222, 192, 1, 210, 220, 192, 1, 210, 216, 192, 1, 210, 215, + 192, 1, 207, 96, 192, 1, 207, 51, 192, 1, 207, 20, 192, 1, 206, 250, 192, + 1, 206, 216, 192, 1, 206, 203, 192, 1, 190, 192, 1, 206, 52, 192, 1, 206, + 11, 192, 1, 205, 247, 192, 1, 205, 213, 192, 1, 205, 177, 19, 20, 237, + 239, 19, 20, 75, 19, 20, 253, 128, 19, 20, 74, 19, 20, 233, 102, 19, 20, + 76, 19, 20, 222, 152, 19, 20, 206, 122, 222, 152, 19, 20, 85, 243, 104, + 19, 20, 85, 74, 19, 20, 62, 19, 20, 253, 164, 19, 20, 207, 51, 19, 20, + 180, 207, 51, 19, 20, 207, 20, 19, 20, 180, 207, 20, 19, 20, 207, 12, 19, + 20, 180, 207, 12, 19, 20, 206, 250, 19, 20, 180, 206, 250, 19, 20, 206, + 238, 19, 20, 180, 206, 238, 19, 20, 225, 194, 206, 238, 19, 20, 207, 96, + 19, 20, 180, 207, 96, 19, 20, 207, 95, 19, 20, 180, 207, 95, 19, 20, 225, + 194, 207, 95, 19, 20, 252, 205, 19, 20, 206, 122, 207, 129, 19, 20, 240, + 25, 213, 251, 19, 20, 42, 153, 19, 20, 42, 239, 236, 19, 20, 42, 249, + 154, 160, 218, 148, 19, 20, 42, 211, 102, 160, 218, 148, 19, 20, 42, 48, + 160, 218, 148, 19, 20, 42, 218, 148, 19, 20, 42, 50, 153, 19, 20, 42, 50, + 215, 144, 79, 213, 212, 19, 20, 42, 226, 247, 245, 23, 19, 20, 42, 215, + 144, 194, 91, 19, 20, 42, 220, 218, 19, 20, 42, 130, 212, 201, 19, 20, + 243, 41, 19, 20, 233, 68, 19, 20, 222, 165, 19, 20, 252, 122, 19, 20, + 221, 174, 19, 20, 222, 49, 19, 20, 221, 53, 19, 20, 221, 15, 19, 20, 220, + 211, 19, 20, 220, 187, 19, 20, 206, 122, 220, 187, 19, 20, 85, 239, 53, + 19, 20, 85, 239, 11, 19, 20, 179, 19, 20, 222, 51, 19, 20, 220, 43, 19, + 20, 180, 220, 43, 19, 20, 220, 41, 19, 20, 180, 220, 41, 19, 20, 220, 40, + 19, 20, 180, 220, 40, 19, 20, 220, 38, 19, 20, 180, 220, 38, 19, 20, 220, + 37, 19, 20, 180, 220, 37, 19, 20, 220, 45, 19, 20, 180, 220, 45, 19, 20, + 220, 44, 19, 20, 180, 220, 44, 19, 20, 206, 122, 220, 44, 19, 20, 222, + 67, 19, 20, 180, 222, 67, 19, 20, 85, 239, 155, 19, 20, 212, 131, 19, 20, + 212, 213, 19, 20, 211, 211, 19, 20, 211, 195, 19, 20, 124, 19, 20, 211, + 105, 19, 20, 206, 122, 211, 105, 19, 20, 85, 245, 251, 19, 20, 85, 245, + 168, 19, 20, 212, 219, 19, 20, 212, 215, 19, 20, 210, 128, 19, 20, 180, + 210, 128, 19, 20, 210, 112, 19, 20, 180, 210, 112, 19, 20, 210, 111, 19, + 20, 180, 210, 111, 19, 20, 105, 19, 20, 180, 105, 19, 20, 210, 104, 19, + 20, 180, 210, 104, 19, 20, 210, 130, 19, 20, 180, 210, 130, 19, 20, 210, + 129, 19, 20, 180, 210, 129, 19, 20, 225, 194, 210, 129, 19, 20, 213, 10, + 19, 20, 210, 203, 19, 20, 210, 187, 19, 20, 210, 185, 19, 20, 210, 208, + 19, 20, 231, 224, 19, 20, 232, 59, 19, 20, 231, 123, 19, 20, 231, 111, + 19, 20, 231, 53, 19, 20, 231, 33, 19, 20, 206, 122, 231, 33, 19, 20, 172, + 19, 20, 232, 63, 19, 20, 230, 190, 19, 20, 180, 230, 190, 19, 20, 230, + 188, 19, 20, 180, 230, 188, 19, 20, 230, 187, 19, 20, 180, 230, 187, 19, + 20, 230, 185, 19, 20, 180, 230, 185, 19, 20, 230, 184, 19, 20, 180, 230, + 184, 19, 20, 230, 195, 19, 20, 180, 230, 195, 19, 20, 230, 194, 19, 20, + 180, 230, 194, 19, 20, 225, 194, 230, 194, 19, 20, 232, 76, 19, 20, 230, + 196, 19, 20, 214, 162, 231, 214, 19, 20, 214, 162, 231, 112, 19, 20, 214, + 162, 231, 47, 19, 20, 214, 162, 232, 43, 19, 20, 248, 148, 19, 20, 248, + 255, 19, 20, 247, 251, 19, 20, 247, 241, 19, 20, 247, 174, 19, 20, 247, + 105, 19, 20, 206, 122, 247, 105, 19, 20, 249, 1, 19, 20, 249, 0, 19, 20, + 247, 5, 19, 20, 180, 247, 5, 19, 20, 247, 3, 19, 20, 180, 247, 3, 19, 20, + 247, 2, 19, 20, 180, 247, 2, 19, 20, 247, 1, 19, 20, 180, 247, 1, 19, 20, + 247, 0, 19, 20, 180, 247, 0, 19, 20, 247, 7, 19, 20, 180, 247, 7, 19, 20, + 247, 6, 19, 20, 180, 247, 6, 19, 20, 225, 194, 247, 6, 19, 20, 249, 34, + 19, 20, 217, 114, 212, 58, 19, 20, 227, 119, 19, 20, 228, 17, 19, 20, + 226, 254, 19, 20, 226, 224, 19, 20, 226, 181, 19, 20, 226, 150, 19, 20, + 206, 122, 226, 150, 19, 20, 185, 19, 20, 228, 18, 19, 20, 226, 48, 19, + 20, 180, 226, 48, 19, 20, 226, 46, 19, 20, 180, 226, 46, 19, 20, 226, 45, + 19, 20, 180, 226, 45, 19, 20, 226, 44, 19, 20, 180, 226, 44, 19, 20, 226, + 43, 19, 20, 180, 226, 43, 19, 20, 226, 50, 19, 20, 180, 226, 50, 19, 20, + 226, 49, 19, 20, 180, 226, 49, 19, 20, 225, 194, 226, 49, 19, 20, 229, + 28, 19, 20, 180, 229, 28, 19, 20, 227, 2, 19, 20, 251, 198, 229, 28, 19, + 20, 217, 114, 229, 28, 19, 20, 225, 110, 19, 20, 225, 231, 19, 20, 224, + 230, 19, 20, 224, 205, 19, 20, 224, 67, 19, 20, 224, 56, 19, 20, 206, + 122, 224, 56, 19, 20, 199, 19, 20, 225, 232, 19, 20, 223, 151, 19, 20, + 180, 223, 151, 19, 20, 223, 153, 19, 20, 180, 223, 153, 19, 20, 223, 152, + 19, 20, 180, 223, 152, 19, 20, 225, 194, 223, 152, 19, 20, 226, 33, 19, + 20, 85, 225, 79, 19, 20, 224, 235, 19, 20, 230, 58, 19, 20, 230, 139, 19, + 20, 229, 235, 19, 20, 229, 219, 19, 20, 229, 144, 19, 20, 229, 115, 19, + 20, 206, 122, 229, 115, 19, 20, 230, 141, 19, 20, 230, 140, 19, 20, 229, + 48, 19, 20, 180, 229, 48, 19, 20, 229, 47, 19, 20, 180, 229, 47, 19, 20, + 229, 46, 19, 20, 180, 229, 46, 19, 20, 229, 45, 19, 20, 180, 229, 45, 19, + 20, 229, 44, 19, 20, 180, 229, 44, 19, 20, 229, 50, 19, 20, 180, 229, 50, + 19, 20, 229, 49, 19, 20, 180, 229, 49, 19, 20, 149, 19, 20, 180, 149, 19, + 20, 169, 149, 19, 20, 217, 86, 19, 20, 217, 194, 19, 20, 215, 80, 19, 20, + 215, 61, 19, 20, 214, 193, 19, 20, 214, 174, 19, 20, 206, 122, 214, 174, + 19, 20, 217, 199, 19, 20, 217, 196, 19, 20, 213, 108, 19, 20, 180, 213, + 108, 19, 20, 213, 102, 19, 20, 180, 213, 102, 19, 20, 213, 101, 19, 20, + 180, 213, 101, 19, 20, 213, 97, 19, 20, 180, 213, 97, 19, 20, 213, 96, + 19, 20, 180, 213, 96, 19, 20, 213, 112, 19, 20, 180, 213, 112, 19, 20, + 213, 111, 19, 20, 180, 213, 111, 19, 20, 225, 194, 213, 111, 19, 20, 182, + 19, 20, 251, 198, 182, 19, 20, 213, 113, 19, 20, 249, 199, 182, 19, 20, + 226, 143, 214, 248, 19, 20, 225, 194, 214, 239, 19, 20, 225, 194, 217, + 255, 19, 20, 225, 194, 214, 109, 19, 20, 225, 194, 213, 206, 19, 20, 225, + 194, 214, 238, 19, 20, 225, 194, 217, 89, 19, 20, 215, 214, 19, 20, 215, + 183, 19, 20, 215, 178, 19, 20, 215, 158, 19, 20, 215, 152, 19, 20, 216, + 2, 19, 20, 215, 254, 19, 20, 215, 95, 19, 20, 180, 215, 95, 19, 20, 215, + 94, 19, 20, 180, 215, 94, 19, 20, 215, 93, 19, 20, 180, 215, 93, 19, 20, + 215, 92, 19, 20, 180, 215, 92, 19, 20, 215, 91, 19, 20, 180, 215, 91, 19, + 20, 215, 98, 19, 20, 180, 215, 98, 19, 20, 215, 97, 19, 20, 180, 215, 97, + 19, 20, 216, 4, 19, 20, 206, 52, 19, 20, 206, 107, 19, 20, 206, 11, 19, + 20, 206, 2, 19, 20, 205, 247, 19, 20, 205, 232, 19, 20, 206, 122, 205, + 232, 19, 20, 190, 19, 20, 206, 109, 19, 20, 205, 174, 19, 20, 180, 205, + 174, 19, 20, 205, 173, 19, 20, 180, 205, 173, 19, 20, 205, 172, 19, 20, + 180, 205, 172, 19, 20, 205, 171, 19, 20, 180, 205, 171, 19, 20, 205, 170, + 19, 20, 180, 205, 170, 19, 20, 205, 176, 19, 20, 180, 205, 176, 19, 20, + 205, 175, 19, 20, 180, 205, 175, 19, 20, 225, 194, 205, 175, 19, 20, 206, + 123, 19, 20, 249, 242, 206, 123, 19, 20, 180, 206, 123, 19, 20, 217, 114, + 206, 11, 19, 20, 219, 51, 19, 20, 219, 149, 219, 51, 19, 20, 180, 230, + 58, 19, 20, 219, 108, 19, 20, 218, 208, 19, 20, 218, 154, 19, 20, 218, + 124, 19, 20, 218, 107, 19, 20, 180, 229, 144, 19, 20, 219, 113, 19, 20, + 219, 109, 19, 20, 180, 230, 141, 19, 20, 218, 17, 19, 20, 180, 218, 17, + 19, 20, 137, 19, 20, 180, 137, 19, 20, 169, 137, 19, 20, 242, 28, 19, 20, + 242, 70, 19, 20, 241, 250, 19, 20, 241, 237, 19, 20, 241, 162, 19, 20, + 241, 151, 19, 20, 242, 73, 19, 20, 242, 72, 19, 20, 241, 65, 19, 20, 180, + 241, 65, 19, 20, 242, 139, 19, 20, 212, 41, 19, 20, 226, 31, 212, 41, 19, + 20, 212, 19, 19, 20, 226, 31, 212, 19, 19, 20, 212, 13, 19, 20, 226, 31, + 212, 13, 19, 20, 211, 253, 19, 20, 211, 248, 19, 20, 212, 56, 19, 20, + 212, 55, 19, 20, 211, 221, 19, 20, 180, 211, 221, 19, 20, 212, 58, 19, + 20, 210, 194, 19, 20, 210, 192, 19, 20, 210, 191, 19, 20, 210, 196, 19, + 20, 210, 197, 19, 20, 210, 98, 19, 20, 210, 97, 19, 20, 210, 96, 19, 20, + 210, 100, 19, 20, 223, 172, 239, 71, 19, 20, 223, 172, 239, 11, 19, 20, + 223, 172, 238, 247, 19, 20, 223, 172, 238, 149, 19, 20, 223, 172, 238, + 131, 19, 20, 223, 172, 155, 19, 20, 223, 172, 239, 141, 19, 20, 223, 172, + 239, 155, 19, 20, 223, 171, 239, 155, 19, 20, 238, 239, 19, 20, 220, 15, + 19, 20, 219, 237, 19, 20, 219, 232, 19, 20, 219, 226, 19, 20, 219, 221, + 19, 20, 220, 19, 19, 20, 220, 18, 19, 20, 220, 27, 19, 20, 211, 143, 19, + 20, 211, 141, 19, 20, 211, 140, 19, 20, 211, 144, 19, 20, 180, 219, 51, + 19, 20, 180, 218, 208, 19, 20, 180, 218, 124, 19, 20, 180, 219, 113, 19, + 20, 225, 75, 19, 20, 225, 25, 19, 20, 225, 21, 19, 20, 225, 2, 19, 20, + 224, 253, 19, 20, 225, 77, 19, 20, 225, 76, 19, 20, 225, 79, 19, 20, 224, + 96, 19, 20, 217, 114, 215, 214, 19, 20, 217, 114, 215, 183, 19, 20, 217, + 114, 215, 158, 19, 20, 217, 114, 216, 2, 19, 20, 206, 236, 212, 41, 19, + 20, 206, 236, 212, 19, 19, 20, 206, 236, 211, 253, 19, 20, 206, 236, 212, + 56, 19, 20, 206, 236, 212, 58, 19, 20, 229, 242, 19, 20, 229, 241, 19, + 20, 229, 240, 19, 20, 229, 239, 19, 20, 229, 248, 19, 20, 229, 247, 19, + 20, 229, 249, 19, 20, 212, 57, 212, 41, 19, 20, 212, 57, 212, 19, 19, 20, + 212, 57, 212, 13, 19, 20, 212, 57, 211, 253, 19, 20, 212, 57, 211, 248, + 19, 20, 212, 57, 212, 56, 19, 20, 212, 57, 212, 55, 19, 20, 212, 57, 212, + 58, 19, 20, 252, 192, 251, 150, 19, 20, 249, 199, 75, 19, 20, 249, 199, + 74, 19, 20, 249, 199, 76, 19, 20, 249, 199, 62, 19, 20, 249, 199, 207, + 51, 19, 20, 249, 199, 207, 20, 19, 20, 249, 199, 206, 250, 19, 20, 249, + 199, 207, 96, 19, 20, 249, 199, 225, 110, 19, 20, 249, 199, 224, 230, 19, + 20, 249, 199, 224, 67, 19, 20, 249, 199, 199, 19, 20, 249, 199, 231, 224, + 19, 20, 249, 199, 231, 123, 19, 20, 249, 199, 231, 53, 19, 20, 249, 199, + 172, 19, 20, 217, 114, 239, 71, 19, 20, 217, 114, 239, 11, 19, 20, 217, + 114, 238, 149, 19, 20, 217, 114, 155, 19, 20, 85, 240, 67, 19, 20, 85, + 240, 71, 19, 20, 85, 240, 85, 19, 20, 85, 240, 84, 19, 20, 85, 240, 73, + 19, 20, 85, 240, 99, 19, 20, 85, 218, 50, 19, 20, 85, 218, 124, 19, 20, + 85, 219, 51, 19, 20, 85, 219, 29, 19, 20, 85, 218, 208, 19, 20, 85, 219, + 113, 19, 20, 85, 206, 216, 19, 20, 85, 206, 250, 19, 20, 85, 207, 51, 19, + 20, 85, 207, 45, 19, 20, 85, 207, 20, 19, 20, 85, 207, 96, 19, 20, 85, + 238, 9, 19, 20, 85, 238, 10, 19, 20, 85, 238, 13, 19, 20, 85, 238, 12, + 19, 20, 85, 238, 11, 19, 20, 85, 238, 16, 19, 20, 85, 211, 230, 19, 20, + 85, 211, 253, 19, 20, 85, 212, 41, 19, 20, 85, 212, 39, 19, 20, 85, 212, + 19, 19, 20, 85, 212, 56, 19, 20, 85, 210, 175, 19, 20, 85, 210, 185, 19, + 20, 85, 210, 203, 19, 20, 85, 210, 202, 19, 20, 85, 210, 187, 19, 20, 85, + 210, 208, 19, 20, 85, 220, 82, 19, 20, 85, 220, 211, 19, 20, 85, 221, + 174, 19, 20, 85, 221, 164, 19, 20, 85, 221, 53, 19, 20, 85, 179, 19, 20, + 85, 222, 67, 19, 20, 85, 239, 213, 19, 20, 85, 240, 19, 19, 20, 85, 240, + 170, 19, 20, 85, 240, 162, 19, 20, 85, 240, 61, 19, 20, 85, 240, 244, 19, + 20, 85, 231, 132, 19, 20, 85, 231, 138, 19, 20, 85, 231, 152, 19, 20, 85, + 231, 151, 19, 20, 85, 231, 145, 19, 20, 85, 231, 167, 19, 20, 85, 231, + 67, 19, 20, 85, 231, 68, 19, 20, 85, 231, 71, 19, 20, 85, 231, 70, 19, + 20, 85, 231, 69, 19, 20, 85, 231, 72, 19, 20, 85, 231, 73, 19, 20, 85, + 223, 217, 19, 20, 85, 224, 67, 19, 20, 85, 225, 110, 19, 20, 85, 225, + 106, 19, 20, 85, 224, 230, 19, 20, 85, 199, 19, 20, 85, 226, 114, 19, 20, + 85, 226, 181, 19, 20, 85, 227, 119, 19, 20, 85, 227, 107, 19, 20, 85, + 226, 254, 19, 20, 85, 185, 19, 20, 85, 205, 213, 19, 20, 85, 205, 247, + 19, 20, 85, 206, 52, 19, 20, 85, 206, 49, 19, 20, 85, 206, 11, 19, 20, + 85, 190, 19, 20, 85, 232, 104, 19, 20, 217, 114, 232, 104, 19, 20, 85, + 232, 122, 19, 20, 85, 232, 182, 19, 20, 85, 232, 180, 19, 20, 85, 232, + 162, 19, 20, 217, 114, 232, 162, 19, 20, 85, 232, 200, 19, 20, 85, 232, + 135, 19, 20, 85, 232, 139, 19, 20, 85, 232, 149, 19, 20, 85, 232, 148, + 19, 20, 85, 232, 147, 19, 20, 85, 232, 150, 19, 20, 85, 229, 81, 19, 20, + 85, 229, 144, 19, 20, 85, 230, 58, 19, 20, 85, 230, 50, 19, 20, 85, 229, + 235, 19, 20, 85, 230, 141, 19, 20, 85, 245, 55, 19, 20, 85, 245, 56, 19, + 20, 85, 245, 61, 19, 20, 85, 245, 60, 19, 20, 85, 245, 57, 19, 20, 85, + 245, 62, 19, 20, 85, 229, 238, 19, 20, 85, 229, 240, 19, 20, 85, 229, + 244, 19, 20, 85, 229, 243, 19, 20, 85, 229, 242, 19, 20, 85, 229, 248, + 19, 20, 85, 211, 138, 19, 20, 85, 211, 140, 19, 20, 85, 211, 143, 19, 20, + 85, 211, 142, 19, 20, 85, 211, 141, 19, 20, 85, 211, 144, 19, 20, 85, + 211, 133, 19, 20, 85, 211, 134, 19, 20, 85, 211, 146, 19, 20, 85, 211, + 145, 19, 20, 85, 211, 135, 19, 20, 85, 211, 147, 19, 20, 85, 205, 9, 19, + 20, 85, 205, 19, 19, 20, 85, 205, 93, 19, 20, 85, 205, 91, 19, 20, 85, + 205, 40, 19, 20, 85, 205, 116, 19, 20, 85, 205, 159, 19, 20, 85, 78, 205, + 159, 19, 20, 85, 243, 183, 19, 20, 85, 243, 184, 19, 20, 85, 243, 193, + 19, 20, 85, 243, 192, 19, 20, 85, 243, 187, 19, 20, 85, 243, 196, 19, 20, + 85, 213, 203, 19, 20, 85, 214, 193, 19, 20, 85, 217, 86, 19, 20, 85, 217, + 74, 19, 20, 85, 215, 80, 19, 20, 85, 217, 199, 19, 20, 85, 215, 116, 19, + 20, 85, 215, 158, 19, 20, 85, 215, 214, 19, 20, 85, 215, 212, 19, 20, 85, + 215, 183, 19, 20, 85, 216, 2, 19, 20, 85, 216, 4, 19, 20, 85, 210, 216, + 19, 20, 85, 210, 220, 19, 20, 85, 210, 237, 19, 20, 85, 210, 236, 19, 20, + 85, 210, 222, 19, 20, 85, 210, 243, 19, 20, 85, 248, 14, 19, 20, 85, 248, + 32, 19, 20, 85, 248, 82, 19, 20, 85, 248, 78, 19, 20, 85, 248, 58, 19, + 20, 85, 248, 110, 19, 20, 85, 210, 178, 19, 20, 85, 210, 179, 19, 20, 85, + 210, 182, 19, 20, 85, 210, 181, 19, 20, 85, 210, 180, 19, 20, 85, 210, + 183, 19, 20, 248, 59, 53, 19, 20, 241, 82, 213, 251, 19, 20, 220, 11, 19, + 20, 225, 73, 19, 20, 224, 93, 19, 20, 224, 92, 19, 20, 224, 91, 19, 20, + 224, 90, 19, 20, 224, 95, 19, 20, 224, 94, 19, 20, 206, 236, 211, 219, + 19, 20, 206, 236, 211, 218, 19, 20, 206, 236, 211, 217, 19, 20, 206, 236, + 211, 216, 19, 20, 206, 236, 211, 215, 19, 20, 206, 236, 211, 222, 19, 20, + 206, 236, 211, 221, 19, 20, 206, 236, 42, 212, 58, 19, 20, 249, 199, 207, + 129, 222, 198, 214, 154, 83, 222, 198, 1, 250, 32, 222, 198, 1, 229, 68, + 222, 198, 1, 242, 25, 222, 198, 1, 217, 179, 222, 198, 1, 224, 188, 222, + 198, 1, 210, 15, 222, 198, 1, 246, 119, 222, 198, 1, 211, 170, 222, 198, + 1, 247, 165, 222, 198, 1, 248, 136, 222, 198, 1, 226, 101, 222, 198, 1, + 240, 0, 222, 198, 1, 225, 63, 222, 198, 1, 213, 244, 222, 198, 1, 218, + 44, 222, 198, 1, 252, 202, 222, 198, 1, 222, 156, 222, 198, 1, 209, 194, + 222, 198, 1, 243, 128, 222, 198, 1, 232, 252, 222, 198, 1, 243, 129, 222, + 198, 1, 222, 122, 222, 198, 1, 209, 250, 222, 198, 1, 233, 108, 222, 198, + 1, 243, 126, 222, 198, 1, 221, 154, 222, 198, 242, 24, 83, 222, 198, 218, + 224, 242, 24, 83, 181, 1, 242, 14, 242, 6, 242, 29, 242, 139, 181, 1, + 209, 148, 181, 1, 209, 179, 209, 195, 71, 181, 1, 205, 216, 181, 1, 206, + 123, 181, 1, 207, 129, 181, 1, 211, 224, 211, 223, 211, 246, 181, 1, 242, + 196, 181, 1, 252, 92, 62, 181, 1, 222, 107, 76, 181, 1, 253, 25, 62, 181, + 1, 252, 232, 181, 1, 229, 121, 76, 181, 1, 215, 137, 76, 181, 1, 76, 181, + 1, 222, 206, 181, 1, 222, 165, 181, 1, 219, 88, 219, 101, 219, 14, 137, + 181, 1, 231, 239, 181, 1, 248, 132, 181, 1, 231, 240, 232, 76, 181, 1, + 241, 55, 181, 1, 243, 28, 181, 1, 240, 165, 239, 161, 241, 55, 181, 1, + 240, 204, 181, 1, 206, 208, 206, 199, 207, 129, 181, 1, 239, 133, 239, + 155, 181, 1, 239, 137, 239, 155, 181, 1, 229, 123, 239, 155, 181, 1, 215, + 140, 239, 155, 181, 1, 225, 189, 223, 135, 225, 190, 226, 33, 181, 1, + 215, 138, 226, 33, 181, 1, 244, 18, 181, 1, 232, 231, 232, 235, 232, 222, + 74, 181, 1, 75, 181, 1, 232, 173, 232, 203, 181, 1, 240, 149, 181, 1, + 229, 124, 252, 248, 181, 1, 215, 142, 62, 181, 1, 232, 214, 243, 2, 181, + 1, 221, 111, 221, 136, 222, 67, 181, 1, 252, 165, 243, 0, 181, 1, 214, + 159, 182, 181, 1, 215, 65, 229, 120, 182, 181, 1, 215, 136, 182, 181, 1, + 249, 34, 181, 1, 205, 159, 181, 1, 211, 152, 211, 163, 210, 87, 213, 10, + 181, 1, 215, 135, 213, 10, 181, 1, 246, 240, 181, 1, 250, 13, 250, 16, + 249, 205, 251, 150, 181, 1, 215, 141, 251, 150, 181, 1, 244, 17, 181, 1, + 222, 136, 181, 1, 243, 91, 243, 93, 75, 181, 1, 227, 212, 227, 222, 229, + 28, 181, 1, 229, 122, 229, 28, 181, 1, 215, 139, 229, 28, 181, 1, 230, + 73, 230, 119, 229, 131, 149, 181, 1, 244, 19, 181, 1, 233, 41, 181, 1, + 233, 42, 181, 1, 246, 133, 246, 139, 246, 240, 181, 1, 222, 101, 242, + 195, 76, 181, 1, 243, 124, 181, 1, 232, 251, 181, 1, 247, 4, 181, 1, 248, + 240, 181, 1, 248, 147, 181, 1, 214, 31, 181, 1, 229, 119, 181, 1, 215, + 134, 181, 1, 237, 180, 181, 1, 220, 27, 181, 1, 206, 195, 181, 215, 41, + 220, 71, 181, 226, 95, 220, 71, 181, 247, 60, 220, 71, 181, 252, 1, 93, + 181, 210, 132, 93, 181, 250, 30, 93, 181, 1, 232, 76, 181, 1, 216, 4, + 181, 1, 222, 152, 181, 1, 241, 109, 248, 186, 222, 106, 181, 1, 241, 109, + 248, 186, 232, 234, 181, 1, 241, 109, 248, 186, 243, 92, 181, 1, 241, + 109, 248, 186, 253, 24, 181, 1, 241, 109, 248, 186, 252, 232, 212, 197, + 1, 62, 212, 197, 1, 74, 212, 197, 1, 71, 212, 197, 1, 172, 212, 197, 1, + 240, 244, 212, 197, 1, 225, 77, 212, 197, 1, 212, 219, 212, 197, 1, 246, + 145, 212, 197, 1, 199, 212, 197, 1, 179, 212, 197, 1, 250, 183, 212, 197, + 1, 185, 212, 197, 1, 190, 212, 197, 1, 230, 141, 212, 197, 1, 207, 96, + 212, 197, 1, 217, 199, 212, 197, 1, 155, 212, 197, 22, 3, 74, 212, 197, + 22, 3, 71, 212, 197, 3, 208, 188, 239, 99, 1, 62, 239, 99, 1, 74, 239, + 99, 1, 71, 239, 99, 1, 172, 239, 99, 1, 240, 244, 239, 99, 1, 225, 77, + 239, 99, 1, 212, 219, 239, 99, 1, 246, 145, 239, 99, 1, 199, 239, 99, 1, + 179, 239, 99, 1, 250, 183, 239, 99, 1, 185, 239, 99, 1, 190, 239, 99, 1, + 219, 113, 239, 99, 1, 230, 141, 239, 99, 1, 207, 96, 239, 99, 1, 217, + 199, 239, 99, 1, 155, 239, 99, 22, 3, 74, 239, 99, 22, 3, 71, 239, 99, 3, + 222, 8, 221, 71, 215, 41, 220, 71, 221, 71, 50, 220, 71, 249, 93, 1, 62, + 249, 93, 1, 74, 249, 93, 1, 71, 249, 93, 1, 172, 249, 93, 1, 240, 244, + 249, 93, 1, 225, 77, 249, 93, 1, 212, 219, 249, 93, 1, 246, 145, 249, 93, + 1, 199, 249, 93, 1, 179, 249, 93, 1, 250, 183, 249, 93, 1, 185, 249, 93, + 1, 190, 249, 93, 1, 219, 113, 249, 93, 1, 230, 141, 249, 93, 1, 207, 96, + 249, 93, 1, 217, 199, 249, 93, 1, 155, 249, 93, 22, 3, 74, 249, 93, 22, + 3, 71, 212, 196, 1, 62, 212, 196, 1, 74, 212, 196, 1, 71, 212, 196, 1, + 172, 212, 196, 1, 240, 244, 212, 196, 1, 225, 77, 212, 196, 1, 212, 219, + 212, 196, 1, 246, 145, 212, 196, 1, 199, 212, 196, 1, 179, 212, 196, 1, + 250, 183, 212, 196, 1, 185, 212, 196, 1, 190, 212, 196, 1, 230, 141, 212, + 196, 1, 207, 96, 212, 196, 1, 217, 199, 212, 196, 22, 3, 74, 212, 196, + 22, 3, 71, 82, 1, 172, 82, 1, 231, 167, 82, 1, 231, 53, 82, 1, 231, 138, + 82, 1, 225, 2, 82, 1, 249, 1, 82, 1, 248, 110, 82, 1, 247, 174, 82, 1, + 248, 32, 82, 1, 223, 110, 82, 1, 246, 145, 82, 1, 210, 196, 82, 1, 245, + 51, 82, 1, 210, 191, 82, 1, 224, 73, 82, 1, 212, 219, 82, 1, 212, 56, 82, + 1, 124, 82, 1, 211, 253, 82, 1, 224, 67, 82, 1, 250, 183, 82, 1, 221, 93, + 82, 1, 220, 211, 82, 1, 221, 66, 82, 1, 226, 181, 82, 1, 205, 247, 82, 1, + 218, 124, 82, 1, 229, 144, 82, 1, 208, 173, 82, 1, 216, 2, 82, 1, 214, + 56, 82, 1, 217, 199, 82, 1, 155, 82, 1, 230, 141, 82, 1, 220, 19, 82, + 233, 55, 22, 220, 5, 82, 233, 55, 22, 220, 18, 82, 233, 55, 22, 219, 237, + 82, 233, 55, 22, 219, 232, 82, 233, 55, 22, 219, 214, 82, 233, 55, 22, + 219, 184, 82, 233, 55, 22, 219, 172, 82, 233, 55, 22, 219, 171, 82, 233, + 55, 22, 218, 9, 82, 233, 55, 22, 218, 2, 82, 233, 55, 22, 229, 42, 82, + 233, 55, 22, 229, 31, 82, 233, 55, 22, 219, 255, 82, 233, 55, 22, 220, + 11, 82, 233, 55, 22, 219, 222, 210, 95, 102, 82, 233, 55, 22, 219, 222, + 210, 95, 105, 82, 233, 55, 22, 220, 1, 82, 22, 233, 40, 252, 41, 82, 22, + 233, 40, 253, 164, 82, 22, 3, 253, 164, 82, 22, 3, 74, 82, 22, 3, 233, + 102, 82, 22, 3, 206, 123, 82, 22, 3, 205, 169, 82, 22, 3, 71, 82, 22, 3, + 209, 162, 82, 22, 3, 210, 18, 82, 22, 3, 222, 206, 82, 22, 3, 190, 82, + 22, 3, 233, 129, 82, 22, 3, 75, 82, 22, 3, 252, 248, 82, 22, 3, 252, 205, + 82, 22, 3, 222, 152, 82, 22, 3, 251, 184, 82, 3, 224, 203, 82, 3, 219, + 49, 82, 3, 205, 180, 82, 3, 226, 60, 82, 3, 211, 39, 82, 3, 250, 131, 82, + 3, 218, 119, 82, 3, 211, 128, 82, 3, 232, 34, 82, 3, 252, 207, 82, 3, + 217, 152, 217, 145, 82, 3, 208, 185, 82, 3, 247, 168, 82, 3, 250, 104, + 82, 3, 231, 159, 82, 3, 250, 126, 82, 3, 248, 229, 221, 16, 230, 201, 82, + 3, 230, 27, 211, 105, 82, 3, 250, 2, 82, 3, 221, 68, 226, 111, 82, 3, + 231, 31, 82, 247, 25, 16, 218, 200, 82, 3, 251, 166, 82, 3, 251, 187, 82, + 18, 205, 85, 82, 18, 102, 82, 18, 105, 82, 18, 142, 82, 18, 139, 82, 18, + 168, 82, 18, 184, 82, 18, 195, 82, 18, 193, 82, 18, 200, 82, 16, 230, 27, + 251, 189, 214, 177, 82, 16, 230, 27, 251, 189, 226, 80, 82, 16, 230, 27, + 251, 189, 221, 15, 82, 16, 230, 27, 251, 189, 250, 33, 82, 16, 230, 27, + 251, 189, 249, 73, 82, 16, 230, 27, 251, 189, 220, 152, 82, 16, 230, 27, + 251, 189, 220, 146, 82, 16, 230, 27, 251, 189, 220, 144, 82, 16, 230, 27, + 251, 189, 220, 150, 82, 16, 230, 27, 251, 189, 220, 148, 90, 249, 217, + 90, 243, 54, 90, 247, 155, 90, 241, 82, 213, 251, 90, 247, 162, 90, 241, + 125, 245, 21, 90, 211, 127, 214, 187, 237, 239, 90, 215, 78, 4, 249, 150, + 227, 187, 90, 227, 218, 247, 155, 90, 227, 218, 241, 82, 213, 251, 90, + 224, 186, 90, 241, 108, 54, 217, 60, 102, 90, 241, 108, 54, 217, 60, 105, + 90, 241, 108, 54, 217, 60, 142, 90, 22, 216, 39, 90, 18, 205, 85, 90, 18, + 102, 90, 18, 105, 90, 18, 142, 90, 18, 139, 90, 18, 168, 90, 18, 184, 90, + 18, 195, 90, 18, 193, 90, 18, 200, 90, 1, 62, 90, 1, 75, 90, 1, 74, 90, + 1, 76, 90, 1, 71, 90, 1, 222, 206, 90, 1, 210, 3, 90, 1, 243, 104, 90, 1, + 199, 90, 1, 252, 114, 90, 1, 250, 183, 90, 1, 179, 90, 1, 220, 19, 90, 1, + 240, 244, 90, 1, 185, 90, 1, 230, 141, 90, 1, 217, 199, 90, 1, 216, 2, + 90, 1, 212, 219, 90, 1, 246, 145, 90, 1, 248, 110, 90, 1, 232, 200, 90, + 1, 190, 90, 1, 219, 113, 90, 1, 207, 96, 90, 1, 242, 73, 90, 1, 172, 90, + 1, 231, 167, 90, 1, 210, 243, 90, 1, 205, 116, 90, 1, 239, 141, 90, 1, + 205, 12, 90, 1, 229, 248, 90, 1, 205, 67, 90, 1, 248, 58, 90, 1, 211, + 127, 152, 22, 53, 90, 1, 211, 127, 75, 90, 1, 211, 127, 74, 90, 1, 211, + 127, 76, 90, 1, 211, 127, 71, 90, 1, 211, 127, 222, 206, 90, 1, 211, 127, + 210, 3, 90, 1, 211, 127, 252, 114, 90, 1, 211, 127, 250, 183, 90, 1, 211, + 127, 179, 90, 1, 211, 127, 220, 19, 90, 1, 211, 127, 240, 244, 90, 1, + 211, 127, 185, 90, 1, 211, 127, 212, 219, 90, 1, 211, 127, 246, 145, 90, + 1, 211, 127, 248, 110, 90, 1, 211, 127, 232, 200, 90, 1, 211, 127, 210, + 243, 90, 1, 211, 127, 190, 90, 1, 211, 127, 207, 96, 90, 1, 211, 127, + 172, 90, 1, 211, 127, 240, 241, 90, 1, 211, 127, 239, 141, 90, 1, 211, + 127, 232, 161, 90, 1, 211, 127, 224, 228, 90, 1, 211, 127, 243, 196, 90, + 1, 215, 78, 75, 90, 1, 215, 78, 74, 90, 1, 215, 78, 232, 211, 90, 1, 215, + 78, 210, 3, 90, 1, 215, 78, 71, 90, 1, 215, 78, 252, 114, 90, 1, 215, 78, + 172, 90, 1, 215, 78, 240, 244, 90, 1, 215, 78, 155, 90, 1, 215, 78, 179, + 90, 1, 215, 78, 216, 2, 90, 1, 215, 78, 212, 219, 90, 1, 215, 78, 246, + 145, 90, 1, 215, 78, 232, 200, 90, 1, 215, 78, 242, 73, 90, 1, 215, 78, + 240, 241, 90, 1, 215, 78, 239, 141, 90, 1, 215, 78, 210, 243, 90, 1, 215, + 78, 205, 116, 90, 1, 215, 78, 219, 109, 90, 1, 215, 78, 248, 110, 90, 1, + 215, 78, 205, 81, 90, 1, 227, 218, 74, 90, 1, 227, 218, 172, 90, 1, 227, + 218, 219, 113, 90, 1, 227, 218, 242, 73, 90, 1, 227, 218, 205, 81, 90, 1, + 252, 164, 240, 224, 252, 74, 102, 90, 1, 252, 164, 240, 224, 208, 184, + 102, 90, 1, 252, 164, 240, 224, 246, 108, 90, 1, 252, 164, 240, 224, 210, + 13, 90, 1, 252, 164, 240, 224, 233, 2, 210, 13, 90, 1, 252, 164, 240, + 224, 250, 143, 90, 1, 252, 164, 240, 224, 129, 250, 143, 90, 1, 252, 164, + 240, 224, 62, 90, 1, 252, 164, 240, 224, 74, 90, 1, 252, 164, 240, 224, + 172, 90, 1, 252, 164, 240, 224, 225, 77, 90, 1, 252, 164, 240, 224, 249, + 1, 90, 1, 252, 164, 240, 224, 210, 208, 90, 1, 252, 164, 240, 224, 210, + 196, 90, 1, 252, 164, 240, 224, 246, 54, 90, 1, 252, 164, 240, 224, 224, + 103, 90, 1, 252, 164, 240, 224, 212, 219, 90, 1, 252, 164, 240, 224, 246, + 145, 90, 1, 252, 164, 240, 224, 179, 90, 1, 252, 164, 240, 224, 221, 93, + 90, 1, 252, 164, 240, 224, 214, 96, 90, 1, 252, 164, 240, 224, 205, 81, + 90, 1, 252, 164, 240, 224, 205, 116, 90, 1, 252, 164, 240, 224, 252, 213, + 90, 1, 211, 127, 252, 164, 240, 224, 212, 219, 90, 1, 211, 127, 252, 164, + 240, 224, 205, 81, 90, 1, 227, 218, 252, 164, 240, 224, 240, 99, 90, 1, + 227, 218, 252, 164, 240, 224, 225, 77, 90, 1, 227, 218, 252, 164, 240, + 224, 249, 1, 90, 1, 227, 218, 252, 164, 240, 224, 232, 170, 90, 1, 227, + 218, 252, 164, 240, 224, 210, 208, 90, 1, 227, 218, 252, 164, 240, 224, + 246, 38, 90, 1, 227, 218, 252, 164, 240, 224, 212, 219, 90, 1, 227, 218, + 252, 164, 240, 224, 245, 192, 90, 1, 227, 218, 252, 164, 240, 224, 214, + 96, 90, 1, 227, 218, 252, 164, 240, 224, 246, 254, 90, 1, 227, 218, 252, + 164, 240, 224, 205, 81, 90, 1, 227, 218, 252, 164, 240, 224, 205, 116, + 90, 1, 252, 164, 240, 224, 160, 71, 90, 1, 252, 164, 240, 224, 160, 190, + 90, 1, 227, 218, 252, 164, 240, 224, 250, 0, 90, 1, 252, 164, 240, 224, + 246, 134, 90, 1, 227, 218, 252, 164, 240, 224, 229, 248, 19, 20, 222, 71, + 19, 20, 251, 159, 19, 20, 253, 119, 19, 20, 207, 54, 19, 20, 220, 158, + 19, 20, 221, 183, 19, 20, 220, 36, 19, 20, 212, 140, 19, 20, 231, 231, + 19, 20, 230, 192, 19, 20, 227, 162, 19, 20, 224, 26, 19, 20, 225, 185, + 19, 20, 230, 68, 19, 20, 214, 157, 19, 20, 217, 116, 19, 20, 215, 124, + 19, 20, 215, 218, 19, 20, 215, 90, 19, 20, 205, 222, 19, 20, 206, 58, 19, + 20, 219, 58, 19, 20, 223, 150, 19, 20, 222, 187, 223, 150, 19, 20, 223, + 149, 19, 20, 222, 187, 223, 149, 19, 20, 223, 148, 19, 20, 222, 187, 223, + 148, 19, 20, 223, 147, 19, 20, 222, 187, 223, 147, 19, 20, 218, 14, 19, + 20, 218, 13, 19, 20, 218, 12, 19, 20, 218, 11, 19, 20, 218, 10, 19, 20, + 218, 18, 19, 20, 222, 187, 222, 67, 19, 20, 222, 187, 213, 10, 19, 20, + 222, 187, 232, 76, 19, 20, 222, 187, 249, 34, 19, 20, 222, 187, 229, 28, + 19, 20, 222, 187, 226, 33, 19, 20, 222, 187, 182, 19, 20, 222, 187, 216, + 4, 19, 20, 243, 115, 207, 129, 19, 20, 207, 34, 207, 129, 19, 20, 42, 5, + 218, 148, 19, 20, 42, 219, 81, 245, 23, 19, 20, 219, 149, 218, 15, 19, + 20, 180, 229, 115, 19, 20, 180, 230, 140, 19, 20, 211, 220, 19, 20, 211, + 222, 19, 20, 210, 188, 19, 20, 210, 190, 19, 20, 210, 195, 19, 20, 211, + 137, 19, 20, 211, 139, 19, 20, 217, 114, 215, 95, 19, 20, 217, 114, 215, + 152, 19, 20, 217, 114, 238, 131, 19, 20, 85, 239, 169, 19, 20, 85, 245, + 225, 240, 162, 19, 20, 85, 240, 241, 19, 20, 85, 239, 174, 19, 20, 217, + 114, 232, 86, 19, 20, 85, 232, 84, 19, 20, 250, 53, 245, 225, 149, 19, + 20, 250, 53, 245, 225, 137, 19, 20, 85, 245, 220, 182, 229, 215, 208, + 154, 230, 5, 229, 215, 1, 172, 229, 215, 1, 231, 167, 229, 215, 1, 240, + 244, 229, 215, 1, 240, 99, 229, 215, 1, 225, 77, 229, 215, 1, 249, 1, + 229, 215, 1, 248, 110, 229, 215, 1, 232, 200, 229, 215, 1, 232, 170, 229, + 215, 1, 206, 77, 229, 215, 1, 212, 219, 229, 215, 1, 212, 56, 229, 215, + 1, 246, 145, 229, 215, 1, 245, 192, 229, 215, 1, 199, 229, 215, 1, 179, + 229, 215, 1, 221, 93, 229, 215, 1, 250, 183, 229, 215, 1, 250, 0, 229, + 215, 1, 185, 229, 215, 1, 190, 229, 215, 1, 219, 113, 229, 215, 1, 230, + 141, 229, 215, 1, 207, 96, 229, 215, 1, 216, 2, 229, 215, 1, 214, 96, + 229, 215, 1, 217, 199, 229, 215, 1, 155, 229, 215, 1, 239, 165, 229, 215, + 1, 211, 83, 229, 215, 22, 3, 62, 229, 215, 22, 3, 74, 229, 215, 22, 3, + 71, 229, 215, 22, 3, 243, 104, 229, 215, 22, 3, 252, 205, 229, 215, 22, + 3, 222, 152, 229, 215, 22, 3, 251, 184, 229, 215, 22, 3, 75, 229, 215, + 22, 3, 76, 229, 215, 213, 191, 1, 190, 229, 215, 213, 191, 1, 219, 113, + 229, 215, 213, 191, 1, 207, 96, 229, 215, 5, 1, 172, 229, 215, 5, 1, 225, + 77, 229, 215, 5, 1, 252, 73, 229, 215, 5, 1, 212, 219, 229, 215, 5, 1, + 199, 229, 215, 5, 1, 179, 229, 215, 5, 1, 185, 229, 215, 5, 1, 219, 113, + 229, 215, 5, 1, 230, 141, 229, 215, 3, 226, 99, 229, 215, 3, 231, 209, + 229, 215, 3, 217, 197, 229, 215, 3, 229, 115, 229, 215, 242, 168, 83, + 229, 215, 219, 196, 83, 229, 215, 18, 205, 85, 229, 215, 18, 102, 229, + 215, 18, 105, 229, 215, 18, 142, 229, 215, 18, 139, 229, 215, 18, 168, + 229, 215, 18, 184, 229, 215, 18, 195, 229, 215, 18, 193, 229, 215, 18, + 200, 41, 230, 59, 1, 172, 41, 230, 59, 1, 206, 181, 41, 230, 59, 1, 225, + 77, 41, 230, 59, 1, 210, 243, 41, 230, 59, 1, 217, 199, 41, 230, 59, 1, + 190, 41, 230, 59, 1, 212, 219, 41, 230, 59, 1, 212, 56, 41, 230, 59, 1, + 230, 141, 41, 230, 59, 1, 179, 41, 230, 59, 1, 221, 93, 41, 230, 59, 1, + 185, 41, 230, 59, 1, 242, 73, 41, 230, 59, 1, 209, 70, 41, 230, 59, 1, + 155, 41, 230, 59, 1, 220, 19, 41, 230, 59, 1, 231, 167, 41, 230, 59, 1, + 210, 233, 41, 230, 59, 1, 199, 41, 230, 59, 1, 62, 41, 230, 59, 1, 74, + 41, 230, 59, 1, 243, 104, 41, 230, 59, 1, 243, 92, 41, 230, 59, 1, 71, + 41, 230, 59, 1, 222, 152, 41, 230, 59, 1, 76, 41, 230, 59, 1, 210, 3, 41, + 230, 59, 1, 75, 41, 230, 59, 1, 251, 182, 41, 230, 59, 1, 252, 205, 41, + 230, 59, 1, 211, 116, 41, 230, 59, 1, 211, 115, 41, 230, 59, 1, 211, 114, + 41, 230, 59, 1, 211, 113, 41, 230, 59, 1, 211, 112, 186, 41, 229, 75, 1, + 127, 220, 19, 186, 41, 229, 75, 1, 114, 220, 19, 186, 41, 229, 75, 1, + 127, 172, 186, 41, 229, 75, 1, 127, 206, 181, 186, 41, 229, 75, 1, 127, + 225, 77, 186, 41, 229, 75, 1, 114, 172, 186, 41, 229, 75, 1, 114, 206, + 181, 186, 41, 229, 75, 1, 114, 225, 77, 186, 41, 229, 75, 1, 127, 210, + 243, 186, 41, 229, 75, 1, 127, 217, 199, 186, 41, 229, 75, 1, 127, 190, + 186, 41, 229, 75, 1, 114, 210, 243, 186, 41, 229, 75, 1, 114, 217, 199, + 186, 41, 229, 75, 1, 114, 190, 186, 41, 229, 75, 1, 127, 212, 219, 186, + 41, 229, 75, 1, 127, 212, 56, 186, 41, 229, 75, 1, 127, 199, 186, 41, + 229, 75, 1, 114, 212, 219, 186, 41, 229, 75, 1, 114, 212, 56, 186, 41, + 229, 75, 1, 114, 199, 186, 41, 229, 75, 1, 127, 179, 186, 41, 229, 75, 1, + 127, 221, 93, 186, 41, 229, 75, 1, 127, 185, 186, 41, 229, 75, 1, 114, + 179, 186, 41, 229, 75, 1, 114, 221, 93, 186, 41, 229, 75, 1, 114, 185, + 186, 41, 229, 75, 1, 127, 242, 73, 186, 41, 229, 75, 1, 127, 209, 70, + 186, 41, 229, 75, 1, 127, 230, 141, 186, 41, 229, 75, 1, 114, 242, 73, + 186, 41, 229, 75, 1, 114, 209, 70, 186, 41, 229, 75, 1, 114, 230, 141, + 186, 41, 229, 75, 1, 127, 155, 186, 41, 229, 75, 1, 127, 246, 145, 186, + 41, 229, 75, 1, 127, 250, 183, 186, 41, 229, 75, 1, 114, 155, 186, 41, + 229, 75, 1, 114, 246, 145, 186, 41, 229, 75, 1, 114, 250, 183, 186, 41, + 229, 75, 1, 127, 230, 197, 186, 41, 229, 75, 1, 127, 206, 148, 186, 41, + 229, 75, 1, 114, 230, 197, 186, 41, 229, 75, 1, 114, 206, 148, 186, 41, + 229, 75, 1, 127, 213, 202, 186, 41, 229, 75, 1, 114, 213, 202, 186, 41, + 229, 75, 22, 3, 22, 215, 132, 186, 41, 229, 75, 22, 3, 253, 164, 186, 41, + 229, 75, 22, 3, 233, 102, 186, 41, 229, 75, 22, 3, 71, 186, 41, 229, 75, + 22, 3, 209, 162, 186, 41, 229, 75, 22, 3, 75, 186, 41, 229, 75, 22, 3, + 252, 248, 186, 41, 229, 75, 22, 3, 76, 186, 41, 229, 75, 22, 3, 222, 230, + 186, 41, 229, 75, 22, 3, 210, 3, 186, 41, 229, 75, 22, 3, 251, 159, 186, + 41, 229, 75, 22, 3, 253, 119, 186, 41, 229, 75, 22, 3, 209, 154, 186, 41, + 229, 75, 22, 3, 222, 71, 186, 41, 229, 75, 22, 3, 222, 227, 186, 41, 229, + 75, 22, 3, 209, 255, 186, 41, 229, 75, 22, 3, 232, 211, 186, 41, 229, 75, + 1, 42, 209, 148, 186, 41, 229, 75, 1, 42, 225, 79, 186, 41, 229, 75, 1, + 42, 226, 33, 186, 41, 229, 75, 1, 42, 229, 28, 186, 41, 229, 75, 1, 42, + 232, 76, 186, 41, 229, 75, 1, 42, 246, 240, 186, 41, 229, 75, 1, 42, 251, + 150, 186, 41, 229, 75, 135, 227, 191, 186, 41, 229, 75, 135, 227, 190, + 186, 41, 229, 75, 18, 205, 85, 186, 41, 229, 75, 18, 102, 186, 41, 229, + 75, 18, 105, 186, 41, 229, 75, 18, 142, 186, 41, 229, 75, 18, 139, 186, + 41, 229, 75, 18, 168, 186, 41, 229, 75, 18, 184, 186, 41, 229, 75, 18, + 195, 186, 41, 229, 75, 18, 193, 186, 41, 229, 75, 18, 200, 186, 41, 229, + 75, 99, 18, 102, 186, 41, 229, 75, 3, 230, 125, 186, 41, 229, 75, 3, 230, + 124, 82, 16, 221, 191, 82, 16, 226, 81, 231, 49, 82, 16, 221, 16, 231, + 49, 82, 16, 250, 34, 231, 49, 82, 16, 249, 74, 231, 49, 82, 16, 220, 153, + 231, 49, 82, 16, 220, 147, 231, 49, 82, 16, 220, 145, 231, 49, 82, 16, + 220, 151, 231, 49, 82, 16, 220, 149, 231, 49, 82, 16, 246, 95, 231, 49, + 82, 16, 246, 91, 231, 49, 82, 16, 246, 90, 231, 49, 82, 16, 246, 93, 231, + 49, 82, 16, 246, 92, 231, 49, 82, 16, 246, 89, 231, 49, 82, 16, 210, 137, + 82, 16, 226, 81, 218, 118, 82, 16, 221, 16, 218, 118, 82, 16, 250, 34, + 218, 118, 82, 16, 249, 74, 218, 118, 82, 16, 220, 153, 218, 118, 82, 16, + 220, 147, 218, 118, 82, 16, 220, 145, 218, 118, 82, 16, 220, 151, 218, + 118, 82, 16, 220, 149, 218, 118, 82, 16, 246, 95, 218, 118, 82, 16, 246, + 91, 218, 118, 82, 16, 246, 90, 218, 118, 82, 16, 246, 93, 218, 118, 82, + 16, 246, 92, 218, 118, 82, 16, 246, 89, 218, 118, 249, 94, 1, 172, 249, + 94, 1, 240, 244, 249, 94, 1, 225, 77, 249, 94, 1, 225, 20, 249, 94, 1, + 179, 249, 94, 1, 250, 183, 249, 94, 1, 185, 249, 94, 1, 226, 118, 249, + 94, 1, 212, 219, 249, 94, 1, 246, 145, 249, 94, 1, 199, 249, 94, 1, 224, + 24, 249, 94, 1, 249, 1, 249, 94, 1, 232, 200, 249, 94, 1, 223, 144, 249, + 94, 1, 223, 136, 249, 94, 1, 190, 249, 94, 1, 219, 113, 249, 94, 1, 230, + 141, 249, 94, 1, 209, 70, 249, 94, 1, 217, 199, 249, 94, 1, 62, 249, 94, + 1, 155, 249, 94, 22, 3, 74, 249, 94, 22, 3, 71, 249, 94, 22, 3, 75, 249, + 94, 22, 3, 76, 249, 94, 22, 3, 252, 248, 249, 94, 222, 20, 249, 94, 243, + 34, 73, 217, 76, 41, 99, 1, 127, 172, 41, 99, 1, 127, 231, 167, 41, 99, + 1, 127, 230, 181, 41, 99, 1, 114, 172, 41, 99, 1, 114, 230, 181, 41, 99, + 1, 114, 231, 167, 41, 99, 1, 225, 77, 41, 99, 1, 127, 249, 1, 41, 99, 1, + 127, 248, 110, 41, 99, 1, 114, 249, 1, 41, 99, 1, 114, 217, 199, 41, 99, + 1, 114, 248, 110, 41, 99, 1, 223, 144, 41, 99, 1, 219, 64, 41, 99, 1, + 127, 219, 62, 41, 99, 1, 246, 145, 41, 99, 1, 114, 219, 62, 41, 99, 1, + 219, 73, 41, 99, 1, 127, 212, 219, 41, 99, 1, 127, 212, 56, 41, 99, 1, + 114, 212, 219, 41, 99, 1, 114, 212, 56, 41, 99, 1, 199, 41, 99, 1, 250, + 183, 41, 99, 1, 127, 179, 41, 99, 1, 127, 221, 93, 41, 99, 1, 127, 242, + 73, 41, 99, 1, 114, 179, 41, 99, 1, 114, 242, 73, 41, 99, 1, 114, 221, + 93, 41, 99, 1, 185, 41, 99, 1, 114, 190, 41, 99, 1, 127, 190, 41, 99, 1, + 219, 113, 41, 99, 1, 218, 46, 41, 99, 1, 230, 141, 41, 99, 1, 229, 74, + 41, 99, 1, 207, 96, 41, 99, 1, 127, 216, 2, 41, 99, 1, 127, 214, 96, 41, + 99, 1, 127, 217, 199, 41, 99, 1, 127, 155, 41, 99, 1, 229, 172, 41, 99, + 1, 62, 41, 99, 1, 114, 155, 41, 99, 1, 74, 41, 99, 1, 233, 102, 41, 99, + 1, 71, 41, 99, 1, 209, 162, 41, 99, 1, 243, 104, 41, 99, 1, 222, 152, 41, + 99, 1, 230, 125, 41, 99, 1, 239, 232, 217, 199, 41, 99, 107, 3, 169, 219, + 113, 41, 99, 107, 3, 169, 230, 141, 41, 99, 107, 3, 230, 142, 212, 172, + 230, 114, 41, 99, 3, 227, 240, 232, 24, 230, 114, 41, 99, 107, 3, 42, + 225, 77, 41, 99, 107, 3, 114, 179, 41, 99, 107, 3, 127, 219, 63, 222, + 123, 114, 179, 41, 99, 107, 3, 185, 41, 99, 107, 3, 250, 183, 41, 99, + 107, 3, 217, 199, 41, 99, 3, 217, 174, 41, 99, 22, 3, 62, 41, 99, 22, 3, + 227, 240, 217, 133, 41, 99, 22, 3, 253, 164, 41, 99, 22, 3, 212, 178, + 253, 164, 41, 99, 22, 3, 74, 41, 99, 22, 3, 233, 102, 41, 99, 22, 3, 210, + 3, 41, 99, 22, 3, 209, 161, 41, 99, 22, 3, 71, 41, 99, 22, 3, 209, 162, + 41, 99, 22, 3, 76, 41, 99, 22, 3, 222, 231, 55, 41, 99, 22, 3, 222, 71, + 41, 99, 22, 3, 75, 41, 99, 22, 3, 252, 248, 41, 99, 22, 3, 222, 152, 41, + 99, 22, 3, 252, 205, 41, 99, 22, 3, 99, 252, 205, 41, 99, 22, 3, 222, + 231, 52, 41, 99, 3, 227, 240, 232, 23, 41, 99, 3, 211, 117, 41, 99, 3, + 211, 116, 41, 99, 3, 231, 128, 211, 115, 41, 99, 3, 231, 128, 211, 114, + 41, 99, 3, 231, 128, 211, 113, 41, 99, 3, 219, 114, 239, 140, 41, 99, 3, + 227, 240, 217, 161, 41, 99, 3, 231, 127, 232, 6, 41, 99, 36, 247, 43, + 245, 23, 41, 99, 238, 123, 18, 205, 85, 41, 99, 238, 123, 18, 102, 41, + 99, 238, 123, 18, 105, 41, 99, 238, 123, 18, 142, 41, 99, 238, 123, 18, + 139, 41, 99, 238, 123, 18, 168, 41, 99, 238, 123, 18, 184, 41, 99, 238, + 123, 18, 195, 41, 99, 238, 123, 18, 193, 41, 99, 238, 123, 18, 200, 41, + 99, 99, 18, 205, 85, 41, 99, 99, 18, 102, 41, 99, 99, 18, 105, 41, 99, + 99, 18, 142, 41, 99, 99, 18, 139, 41, 99, 99, 18, 168, 41, 99, 99, 18, + 184, 41, 99, 99, 18, 195, 41, 99, 99, 18, 193, 41, 99, 99, 18, 200, 41, + 99, 3, 207, 19, 41, 99, 3, 207, 18, 41, 99, 3, 217, 120, 41, 99, 3, 231, + 198, 41, 99, 3, 238, 52, 41, 99, 3, 245, 37, 41, 99, 3, 218, 224, 218, + 97, 219, 73, 41, 99, 3, 227, 240, 206, 78, 41, 99, 3, 232, 58, 41, 99, 3, + 232, 57, 41, 99, 3, 217, 128, 41, 99, 3, 217, 127, 41, 99, 3, 239, 101, + 41, 99, 3, 248, 254, 36, 244, 13, 247, 228, 253, 21, 36, 245, 165, 36, + 233, 45, 36, 173, 45, 36, 211, 36, 245, 23, 36, 206, 194, 55, 36, 207, + 14, 229, 206, 55, 36, 222, 142, 141, 55, 36, 50, 222, 142, 141, 55, 36, + 147, 248, 130, 213, 225, 55, 36, 213, 211, 248, 130, 213, 225, 55, 36, + 221, 218, 52, 36, 50, 221, 218, 52, 36, 221, 218, 55, 36, 221, 218, 222, + 82, 117, 3, 209, 244, 218, 202, 117, 3, 209, 244, 248, 219, 117, 3, 248, + 144, 117, 3, 213, 131, 117, 3, 249, 214, 117, 1, 252, 187, 117, 1, 252, + 188, 212, 122, 117, 1, 233, 98, 117, 1, 233, 99, 212, 122, 117, 1, 209, + 247, 117, 1, 209, 248, 212, 122, 117, 1, 219, 114, 218, 254, 117, 1, 219, + 114, 218, 255, 212, 122, 117, 1, 230, 142, 230, 21, 117, 1, 230, 142, + 230, 22, 212, 122, 117, 1, 243, 73, 117, 1, 252, 203, 117, 1, 222, 183, + 117, 1, 222, 184, 212, 122, 117, 1, 172, 117, 1, 232, 66, 227, 243, 117, + 1, 240, 244, 117, 1, 240, 245, 240, 5, 117, 1, 225, 77, 117, 1, 249, 1, + 117, 1, 249, 2, 230, 128, 117, 1, 232, 200, 117, 1, 232, 201, 232, 174, + 117, 1, 223, 144, 117, 1, 212, 220, 230, 77, 117, 1, 212, 220, 226, 76, + 227, 243, 117, 1, 246, 146, 226, 76, 252, 146, 117, 1, 246, 146, 226, 76, + 227, 243, 117, 1, 225, 237, 219, 76, 117, 1, 212, 219, 117, 1, 212, 220, + 212, 144, 117, 1, 246, 145, 117, 1, 246, 146, 228, 6, 117, 1, 199, 117, + 1, 179, 117, 1, 222, 52, 232, 18, 117, 1, 250, 183, 117, 1, 250, 184, + 231, 210, 117, 1, 185, 117, 1, 190, 117, 1, 219, 113, 117, 1, 230, 141, + 117, 1, 207, 96, 117, 1, 217, 200, 217, 184, 117, 1, 217, 200, 217, 140, + 117, 1, 217, 199, 117, 1, 155, 117, 3, 218, 245, 117, 22, 3, 212, 122, + 117, 22, 3, 209, 243, 117, 22, 3, 209, 244, 217, 136, 117, 22, 3, 213, + 164, 117, 22, 3, 213, 165, 233, 90, 117, 22, 3, 219, 114, 218, 254, 117, + 22, 3, 219, 114, 218, 255, 212, 122, 117, 22, 3, 230, 142, 230, 21, 117, + 22, 3, 230, 142, 230, 22, 212, 122, 117, 22, 3, 212, 179, 117, 22, 3, + 212, 180, 218, 254, 117, 22, 3, 212, 180, 212, 122, 117, 22, 3, 212, 180, + 218, 255, 212, 122, 117, 22, 3, 221, 134, 117, 22, 3, 221, 135, 212, 122, + 117, 253, 0, 252, 255, 117, 1, 232, 46, 217, 135, 117, 1, 231, 134, 217, + 135, 117, 1, 210, 80, 217, 135, 117, 1, 243, 98, 217, 135, 117, 1, 209, + 40, 217, 135, 117, 1, 205, 107, 217, 135, 117, 1, 251, 202, 217, 135, + 117, 18, 205, 85, 117, 18, 102, 117, 18, 105, 117, 18, 142, 117, 18, 139, + 117, 18, 168, 117, 18, 184, 117, 18, 195, 117, 18, 193, 117, 18, 200, + 117, 221, 244, 117, 222, 14, 117, 207, 7, 117, 248, 197, 222, 7, 117, + 248, 197, 215, 58, 117, 248, 197, 221, 215, 117, 222, 13, 117, 30, 16, + 245, 29, 117, 30, 16, 245, 224, 117, 30, 16, 243, 223, 117, 30, 16, 246, + 98, 117, 30, 16, 246, 99, 213, 131, 117, 30, 16, 245, 112, 117, 30, 16, + 246, 138, 117, 30, 16, 245, 201, 117, 30, 16, 246, 120, 117, 30, 16, 246, + 99, 240, 164, 117, 30, 16, 36, 212, 117, 117, 30, 16, 36, 243, 32, 117, + 30, 16, 36, 231, 205, 117, 30, 16, 36, 231, 207, 117, 30, 16, 36, 232, + 178, 117, 30, 16, 36, 231, 206, 2, 232, 178, 117, 30, 16, 36, 231, 208, + 2, 232, 178, 117, 30, 16, 36, 250, 20, 117, 30, 16, 36, 240, 9, 117, 30, + 16, 218, 165, 222, 142, 243, 233, 117, 30, 16, 218, 165, 222, 142, 246, + 136, 117, 30, 16, 218, 165, 247, 192, 210, 162, 117, 30, 16, 218, 165, + 247, 192, 212, 187, 117, 30, 16, 230, 44, 222, 142, 222, 2, 117, 30, 16, + 230, 44, 222, 142, 220, 70, 117, 30, 16, 230, 44, 247, 192, 220, 236, + 117, 30, 16, 230, 44, 247, 192, 220, 222, 117, 30, 16, 230, 44, 222, 142, + 221, 5, 213, 153, 3, 221, 241, 213, 153, 3, 221, 254, 213, 153, 3, 221, + 250, 213, 153, 1, 62, 213, 153, 1, 74, 213, 153, 1, 71, 213, 153, 1, 252, + 248, 213, 153, 1, 76, 213, 153, 1, 75, 213, 153, 1, 242, 192, 213, 153, + 1, 172, 213, 153, 1, 220, 19, 213, 153, 1, 240, 244, 213, 153, 1, 225, + 77, 213, 153, 1, 249, 1, 213, 153, 1, 232, 200, 213, 153, 1, 205, 116, + 213, 153, 1, 223, 144, 213, 153, 1, 212, 219, 213, 153, 1, 246, 145, 213, + 153, 1, 199, 213, 153, 1, 179, 213, 153, 1, 242, 73, 213, 153, 1, 209, + 70, 213, 153, 1, 250, 183, 213, 153, 1, 185, 213, 153, 1, 190, 213, 153, + 1, 219, 113, 213, 153, 1, 230, 141, 213, 153, 1, 207, 96, 213, 153, 1, + 217, 199, 213, 153, 1, 206, 181, 213, 153, 1, 155, 213, 153, 107, 3, 222, + 11, 213, 153, 107, 3, 221, 243, 213, 153, 107, 3, 221, 240, 213, 153, 22, + 3, 222, 1, 213, 153, 22, 3, 221, 239, 213, 153, 22, 3, 222, 5, 213, 153, + 22, 3, 221, 249, 213, 153, 22, 3, 222, 12, 213, 153, 22, 3, 222, 3, 213, + 153, 3, 222, 15, 213, 153, 3, 208, 188, 213, 153, 107, 3, 221, 204, 185, + 213, 153, 107, 3, 221, 204, 207, 96, 213, 153, 1, 231, 167, 213, 153, 1, + 213, 90, 213, 153, 18, 205, 85, 213, 153, 18, 102, 213, 153, 18, 105, + 213, 153, 18, 142, 213, 153, 18, 139, 213, 153, 18, 168, 213, 153, 18, + 184, 213, 153, 18, 195, 213, 153, 18, 193, 213, 153, 18, 200, 213, 153, + 251, 167, 213, 153, 1, 218, 227, 213, 153, 1, 230, 2, 213, 153, 1, 250, + 0, 213, 153, 1, 42, 232, 76, 213, 153, 1, 42, 229, 28, 250, 107, 1, 62, + 250, 107, 1, 215, 50, 62, 250, 107, 1, 155, 250, 107, 1, 215, 50, 155, + 250, 107, 1, 227, 216, 155, 250, 107, 1, 250, 183, 250, 107, 1, 232, 3, + 250, 183, 250, 107, 1, 179, 250, 107, 1, 215, 50, 179, 250, 107, 1, 199, + 250, 107, 1, 227, 216, 199, 250, 107, 1, 207, 96, 250, 107, 1, 215, 50, + 207, 96, 250, 107, 1, 222, 27, 207, 96, 250, 107, 1, 240, 244, 250, 107, + 1, 215, 50, 240, 244, 250, 107, 1, 232, 200, 250, 107, 1, 246, 145, 250, + 107, 1, 219, 113, 250, 107, 1, 215, 50, 219, 113, 250, 107, 1, 185, 250, + 107, 1, 215, 50, 185, 250, 107, 1, 214, 161, 212, 219, 250, 107, 1, 224, + 46, 212, 219, 250, 107, 1, 217, 199, 250, 107, 1, 215, 50, 217, 199, 250, + 107, 1, 227, 216, 217, 199, 250, 107, 1, 190, 250, 107, 1, 215, 50, 190, + 250, 107, 1, 225, 77, 250, 107, 1, 230, 141, 250, 107, 1, 215, 50, 230, + 141, 250, 107, 1, 223, 144, 250, 107, 1, 249, 1, 250, 107, 1, 225, 151, + 250, 107, 1, 227, 153, 250, 107, 1, 74, 250, 107, 1, 71, 250, 107, 3, + 211, 121, 250, 107, 22, 3, 75, 250, 107, 22, 3, 222, 27, 75, 250, 107, + 22, 3, 243, 104, 250, 107, 22, 3, 74, 250, 107, 22, 3, 232, 3, 74, 250, + 107, 22, 3, 76, 250, 107, 22, 3, 232, 3, 76, 250, 107, 22, 3, 71, 250, + 107, 22, 3, 106, 33, 215, 50, 217, 199, 250, 107, 107, 3, 225, 79, 250, + 107, 107, 3, 239, 155, 250, 107, 221, 252, 250, 107, 221, 248, 250, 107, + 16, 249, 222, 225, 237, 227, 61, 250, 107, 16, 249, 222, 221, 8, 250, + 107, 16, 249, 222, 232, 101, 250, 107, 16, 249, 222, 221, 252, 230, 12, + 1, 172, 230, 12, 1, 231, 65, 230, 12, 1, 231, 167, 230, 12, 1, 240, 244, + 230, 12, 1, 240, 31, 230, 12, 1, 225, 77, 230, 12, 1, 249, 1, 230, 12, 1, + 248, 110, 230, 12, 1, 232, 200, 230, 12, 1, 223, 144, 230, 12, 1, 212, + 219, 230, 12, 1, 212, 56, 230, 12, 1, 246, 145, 230, 12, 1, 199, 230, 12, + 1, 179, 230, 12, 1, 220, 240, 230, 12, 1, 221, 93, 230, 12, 1, 242, 73, + 230, 12, 1, 241, 198, 230, 12, 1, 250, 183, 230, 12, 1, 249, 203, 230, + 12, 1, 185, 230, 12, 1, 226, 188, 230, 12, 1, 210, 243, 230, 12, 1, 210, + 233, 230, 12, 1, 243, 196, 230, 12, 1, 190, 230, 12, 1, 219, 113, 230, + 12, 1, 230, 141, 230, 12, 1, 155, 230, 12, 1, 238, 237, 230, 12, 1, 209, + 70, 230, 12, 1, 217, 199, 230, 12, 1, 216, 2, 230, 12, 1, 207, 96, 230, + 12, 1, 62, 230, 12, 213, 191, 1, 190, 230, 12, 213, 191, 1, 219, 113, + 230, 12, 22, 3, 253, 164, 230, 12, 22, 3, 74, 230, 12, 22, 3, 76, 230, + 12, 22, 3, 222, 152, 230, 12, 22, 3, 71, 230, 12, 22, 3, 209, 162, 230, + 12, 22, 3, 75, 230, 12, 107, 3, 232, 76, 230, 12, 107, 3, 229, 28, 230, + 12, 107, 3, 149, 230, 12, 107, 3, 226, 33, 230, 12, 107, 3, 222, 67, 230, + 12, 107, 3, 137, 230, 12, 107, 3, 213, 10, 230, 12, 107, 3, 223, 118, + 230, 12, 107, 3, 232, 23, 230, 12, 3, 219, 74, 230, 12, 3, 223, 184, 230, + 12, 220, 72, 212, 217, 230, 12, 220, 72, 223, 129, 211, 214, 212, 217, + 230, 12, 220, 72, 248, 117, 230, 12, 220, 72, 210, 225, 248, 117, 230, + 12, 220, 72, 210, 224, 230, 12, 18, 205, 85, 230, 12, 18, 102, 230, 12, + 18, 105, 230, 12, 18, 142, 230, 12, 18, 139, 230, 12, 18, 168, 230, 12, + 18, 184, 230, 12, 18, 195, 230, 12, 18, 193, 230, 12, 18, 200, 230, 12, + 1, 210, 208, 230, 12, 1, 210, 196, 230, 12, 1, 246, 54, 222, 181, 248, + 51, 18, 205, 85, 222, 181, 248, 51, 18, 102, 222, 181, 248, 51, 18, 105, + 222, 181, 248, 51, 18, 142, 222, 181, 248, 51, 18, 139, 222, 181, 248, + 51, 18, 168, 222, 181, 248, 51, 18, 184, 222, 181, 248, 51, 18, 195, 222, + 181, 248, 51, 18, 193, 222, 181, 248, 51, 18, 200, 222, 181, 248, 51, 1, + 230, 141, 222, 181, 248, 51, 1, 251, 199, 222, 181, 248, 51, 1, 252, 220, + 222, 181, 248, 51, 1, 252, 114, 222, 181, 248, 51, 1, 252, 181, 222, 181, + 248, 51, 1, 230, 140, 222, 181, 248, 51, 1, 253, 126, 222, 181, 248, 51, + 1, 253, 127, 222, 181, 248, 51, 1, 253, 125, 222, 181, 248, 51, 1, 253, + 120, 222, 181, 248, 51, 1, 229, 235, 222, 181, 248, 51, 1, 232, 234, 222, + 181, 248, 51, 1, 233, 103, 222, 181, 248, 51, 1, 232, 255, 222, 181, 248, + 51, 1, 232, 243, 222, 181, 248, 51, 1, 229, 81, 222, 181, 248, 51, 1, + 210, 10, 222, 181, 248, 51, 1, 210, 8, 222, 181, 248, 51, 1, 209, 211, + 222, 181, 248, 51, 1, 209, 154, 222, 181, 248, 51, 1, 230, 58, 222, 181, + 248, 51, 1, 242, 253, 222, 181, 248, 51, 1, 243, 107, 222, 181, 248, 51, + 1, 243, 41, 222, 181, 248, 51, 1, 242, 229, 222, 181, 248, 51, 1, 229, + 144, 222, 181, 248, 51, 1, 222, 100, 222, 181, 248, 51, 1, 222, 226, 222, + 181, 248, 51, 1, 222, 88, 222, 181, 248, 51, 1, 222, 194, 222, 181, 248, + 51, 226, 115, 210, 173, 222, 181, 248, 51, 240, 239, 210, 174, 222, 181, + 248, 51, 226, 113, 210, 174, 222, 181, 248, 51, 219, 12, 222, 181, 248, + 51, 221, 91, 222, 181, 248, 51, 252, 212, 222, 181, 248, 51, 220, 72, + 226, 109, 222, 181, 248, 51, 220, 72, 50, 226, 109, 213, 153, 220, 72, + 249, 222, 213, 124, 213, 153, 220, 72, 249, 222, 221, 253, 213, 153, 220, + 72, 249, 222, 220, 60, 213, 153, 220, 72, 249, 222, 248, 242, 213, 153, + 220, 72, 249, 222, 230, 3, 217, 132, 213, 153, 220, 72, 249, 222, 232, + 66, 217, 132, 213, 153, 220, 72, 249, 222, 246, 146, 217, 132, 213, 153, + 220, 72, 249, 222, 250, 184, 217, 132, 209, 36, 135, 232, 1, 209, 36, + 135, 215, 229, 209, 36, 135, 220, 135, 209, 36, 3, 224, 206, 209, 36, 3, + 206, 86, 226, 245, 213, 115, 209, 36, 135, 206, 86, 252, 217, 233, 55, + 213, 115, 209, 36, 135, 206, 86, 233, 55, 213, 115, 209, 36, 135, 206, + 86, 231, 245, 233, 55, 213, 115, 209, 36, 135, 248, 220, 55, 209, 36, + 135, 206, 86, 231, 245, 233, 55, 213, 116, 217, 102, 209, 36, 135, 50, + 213, 115, 209, 36, 135, 211, 36, 213, 115, 209, 36, 135, 231, 245, 252, + 75, 209, 36, 135, 67, 55, 209, 36, 135, 118, 177, 55, 209, 36, 135, 129, + 177, 55, 209, 36, 135, 218, 155, 232, 0, 233, 55, 213, 115, 209, 36, 135, + 251, 197, 233, 55, 213, 115, 209, 36, 3, 208, 184, 213, 115, 209, 36, 3, + 208, 184, 210, 5, 209, 36, 3, 218, 224, 208, 184, 210, 5, 209, 36, 3, + 208, 184, 252, 75, 209, 36, 3, 218, 224, 208, 184, 252, 75, 209, 36, 3, + 208, 184, 210, 6, 2, 212, 191, 209, 36, 3, 208, 184, 252, 76, 2, 212, + 191, 209, 36, 3, 252, 74, 252, 90, 209, 36, 3, 252, 74, 250, 156, 209, + 36, 3, 252, 74, 209, 61, 209, 36, 3, 252, 74, 209, 62, 2, 212, 191, 209, + 36, 3, 211, 157, 209, 36, 3, 239, 23, 152, 252, 73, 209, 36, 3, 152, 252, + 73, 209, 36, 3, 218, 52, 152, 252, 73, 209, 36, 3, 252, 74, 210, 12, 226, + 100, 209, 36, 3, 252, 15, 209, 36, 3, 218, 97, 252, 15, 209, 36, 135, + 248, 220, 52, 209, 36, 3, 232, 156, 209, 36, 3, 209, 204, 209, 36, 135, + 218, 149, 52, 209, 36, 135, 50, 218, 149, 52, 7, 1, 5, 6, 62, 7, 1, 5, 6, + 252, 248, 7, 5, 1, 201, 252, 248, 7, 1, 5, 6, 250, 123, 251, 150, 7, 1, + 5, 6, 249, 34, 7, 1, 5, 6, 246, 240, 7, 1, 5, 6, 242, 196, 7, 1, 5, 6, + 75, 7, 5, 1, 201, 222, 142, 75, 7, 5, 1, 201, 74, 7, 1, 5, 6, 232, 203, + 7, 1, 5, 6, 232, 76, 7, 1, 5, 6, 230, 159, 2, 91, 7, 1, 5, 6, 229, 28, 7, + 1, 5, 6, 218, 224, 226, 33, 7, 1, 5, 6, 76, 7, 1, 5, 6, 222, 142, 76, 7, + 5, 1, 215, 73, 76, 7, 5, 1, 215, 73, 222, 142, 76, 7, 5, 1, 215, 73, 148, + 2, 91, 7, 5, 1, 201, 222, 206, 7, 1, 5, 6, 222, 97, 7, 5, 1, 211, 102, + 160, 76, 7, 5, 1, 249, 154, 160, 76, 7, 1, 5, 6, 222, 67, 7, 1, 5, 6, + 218, 224, 137, 7, 1, 5, 6, 201, 137, 7, 1, 5, 6, 213, 10, 7, 1, 5, 6, 71, + 7, 5, 1, 215, 73, 71, 7, 5, 1, 215, 73, 245, 164, 71, 7, 5, 1, 215, 73, + 201, 229, 28, 7, 1, 5, 6, 209, 148, 7, 1, 5, 6, 207, 129, 7, 1, 5, 6, + 205, 159, 7, 1, 5, 6, 242, 141, 7, 1, 208, 170, 230, 83, 214, 126, 7, 1, + 252, 200, 27, 1, 5, 6, 240, 215, 27, 1, 5, 6, 230, 102, 27, 1, 5, 6, 221, + 53, 27, 1, 5, 6, 218, 210, 27, 1, 5, 6, 220, 93, 34, 1, 5, 6, 243, 68, + 65, 1, 6, 62, 65, 1, 6, 252, 248, 65, 1, 6, 251, 150, 65, 1, 6, 250, 123, + 251, 150, 65, 1, 6, 246, 240, 65, 1, 6, 75, 65, 1, 6, 218, 224, 75, 65, + 1, 6, 241, 55, 65, 1, 6, 239, 155, 65, 1, 6, 74, 65, 1, 6, 232, 203, 65, + 1, 6, 232, 76, 65, 1, 6, 149, 65, 1, 6, 229, 28, 65, 1, 6, 226, 33, 65, + 1, 6, 218, 224, 226, 33, 65, 1, 6, 76, 65, 1, 6, 222, 97, 65, 1, 6, 222, + 67, 65, 1, 6, 137, 65, 1, 6, 213, 10, 65, 1, 6, 71, 65, 1, 6, 207, 129, + 65, 1, 5, 62, 65, 1, 5, 201, 62, 65, 1, 5, 252, 144, 65, 1, 5, 201, 252, + 248, 65, 1, 5, 251, 150, 65, 1, 5, 246, 240, 65, 1, 5, 75, 65, 1, 5, 217, + 100, 65, 1, 5, 222, 142, 75, 65, 1, 5, 201, 222, 142, 75, 65, 1, 5, 241, + 55, 65, 1, 5, 201, 74, 65, 1, 5, 232, 76, 65, 1, 5, 229, 28, 65, 1, 5, + 243, 28, 65, 1, 5, 76, 65, 1, 5, 222, 142, 76, 65, 1, 5, 211, 102, 160, + 76, 65, 1, 5, 249, 154, 160, 76, 65, 1, 5, 222, 67, 65, 1, 5, 213, 10, + 65, 1, 5, 71, 65, 1, 5, 215, 73, 71, 65, 1, 5, 201, 229, 28, 65, 1, 5, + 209, 148, 65, 1, 5, 252, 200, 65, 1, 5, 250, 8, 65, 1, 5, 27, 240, 215, + 65, 1, 5, 245, 227, 65, 1, 5, 27, 221, 78, 65, 1, 5, 248, 58, 7, 213, + 183, 5, 1, 74, 7, 213, 183, 5, 1, 137, 7, 213, 183, 5, 1, 71, 7, 213, + 183, 5, 1, 209, 148, 27, 213, 183, 5, 1, 250, 8, 27, 213, 183, 5, 1, 240, + 215, 27, 213, 183, 5, 1, 218, 210, 27, 213, 183, 5, 1, 221, 78, 27, 213, + 183, 5, 1, 248, 58, 7, 5, 1, 210, 3, 7, 5, 1, 63, 2, 226, 247, 211, 180, + 7, 5, 1, 246, 241, 2, 226, 247, 211, 180, 7, 5, 1, 242, 140, 2, 226, 247, + 211, 180, 7, 5, 1, 229, 29, 2, 226, 247, 211, 180, 7, 5, 1, 226, 34, 2, + 226, 247, 211, 180, 7, 5, 1, 222, 68, 2, 226, 247, 211, 180, 7, 5, 1, + 219, 150, 2, 226, 247, 211, 180, 7, 5, 1, 219, 150, 2, 241, 211, 23, 226, + 247, 211, 180, 7, 5, 1, 218, 1, 2, 226, 247, 211, 180, 7, 5, 1, 213, 11, + 2, 226, 247, 211, 180, 7, 5, 1, 205, 160, 2, 226, 247, 211, 180, 7, 5, 1, + 201, 241, 55, 65, 1, 34, 243, 41, 7, 5, 1, 233, 23, 241, 55, 7, 5, 1, + 212, 59, 2, 213, 229, 7, 5, 6, 1, 237, 225, 2, 91, 7, 5, 1, 232, 250, 2, + 91, 7, 5, 1, 222, 68, 2, 91, 7, 5, 6, 1, 106, 2, 91, 7, 5, 1, 209, 201, + 2, 91, 7, 5, 1, 63, 2, 222, 26, 109, 7, 5, 1, 246, 241, 2, 222, 26, 109, + 7, 5, 1, 242, 140, 2, 222, 26, 109, 7, 5, 1, 241, 56, 2, 222, 26, 109, 7, + 5, 1, 232, 77, 2, 222, 26, 109, 7, 5, 1, 230, 159, 2, 222, 26, 109, 7, 5, + 1, 229, 29, 2, 222, 26, 109, 7, 5, 1, 226, 34, 2, 222, 26, 109, 7, 5, 1, + 222, 68, 2, 222, 26, 109, 7, 5, 1, 219, 150, 2, 222, 26, 109, 7, 5, 1, + 218, 1, 2, 222, 26, 109, 7, 5, 1, 242, 216, 2, 222, 26, 109, 7, 5, 1, + 209, 149, 2, 222, 26, 109, 7, 5, 1, 206, 196, 2, 222, 26, 109, 7, 5, 1, + 205, 160, 2, 222, 26, 109, 7, 5, 1, 32, 2, 218, 230, 109, 7, 5, 1, 252, + 145, 2, 218, 230, 109, 7, 5, 1, 246, 241, 2, 238, 130, 23, 212, 191, 7, + 5, 1, 174, 2, 218, 230, 109, 7, 5, 1, 222, 142, 174, 2, 218, 230, 109, 7, + 5, 1, 218, 224, 222, 142, 174, 2, 218, 230, 109, 7, 5, 1, 217, 101, 2, + 218, 230, 109, 7, 5, 1, 237, 225, 2, 218, 230, 109, 7, 5, 1, 222, 142, + 148, 2, 218, 230, 109, 7, 5, 1, 242, 216, 2, 218, 230, 109, 7, 5, 1, 106, + 2, 218, 230, 109, 7, 5, 1, 242, 142, 2, 218, 230, 109, 65, 1, 5, 201, + 252, 144, 65, 1, 5, 249, 34, 65, 1, 5, 249, 35, 2, 247, 27, 65, 1, 5, + 242, 196, 65, 1, 5, 218, 224, 222, 142, 75, 65, 1, 5, 242, 139, 65, 1, 5, + 245, 22, 232, 204, 2, 91, 65, 1, 5, 121, 241, 55, 65, 1, 5, 201, 239, + 155, 65, 1, 5, 237, 225, 2, 91, 65, 1, 5, 232, 249, 65, 1, 5, 6, 74, 65, + 1, 5, 6, 237, 225, 2, 91, 65, 1, 5, 232, 204, 2, 247, 56, 65, 1, 5, 230, + 159, 2, 218, 230, 109, 65, 1, 5, 230, 159, 2, 222, 26, 109, 65, 1, 5, 6, + 149, 65, 1, 5, 229, 29, 2, 109, 65, 1, 5, 201, 229, 29, 2, 152, 230, 34, + 65, 1, 5, 226, 34, 2, 47, 109, 65, 1, 5, 226, 34, 2, 218, 230, 109, 65, + 1, 5, 6, 226, 33, 65, 1, 5, 250, 123, 76, 65, 1, 5, 221, 78, 65, 1, 5, + 218, 1, 2, 109, 65, 1, 5, 242, 215, 65, 1, 5, 213, 11, 2, 222, 26, 109, + 65, 1, 5, 106, 134, 65, 1, 5, 209, 200, 65, 1, 5, 6, 71, 65, 1, 5, 209, + 149, 2, 109, 65, 1, 5, 201, 209, 148, 65, 1, 5, 205, 159, 65, 1, 5, 205, + 160, 2, 218, 230, 109, 65, 1, 5, 205, 160, 2, 247, 27, 65, 1, 5, 242, + 141, 65, 1, 5, 212, 23, 36, 244, 21, 239, 237, 253, 21, 36, 244, 21, 253, + 9, 253, 21, 36, 214, 205, 55, 36, 213, 122, 83, 36, 228, 12, 36, 239, + 234, 36, 228, 10, 36, 253, 7, 36, 239, 235, 36, 253, 8, 36, 7, 5, 1, 219, + 150, 55, 36, 249, 121, 36, 228, 11, 36, 50, 247, 228, 52, 36, 222, 197, + 52, 36, 205, 31, 55, 36, 232, 235, 55, 36, 209, 195, 52, 36, 209, 178, + 52, 36, 7, 5, 1, 241, 185, 222, 142, 32, 52, 36, 7, 5, 1, 252, 248, 36, + 7, 5, 1, 252, 71, 36, 7, 5, 1, 251, 168, 36, 7, 5, 1, 249, 35, 248, 141, + 36, 7, 5, 1, 233, 23, 246, 240, 36, 7, 5, 1, 242, 196, 36, 7, 5, 1, 241, + 55, 36, 7, 1, 5, 6, 241, 55, 36, 7, 5, 1, 232, 76, 36, 7, 5, 1, 149, 36, + 7, 1, 5, 6, 149, 36, 7, 1, 5, 6, 229, 28, 36, 7, 5, 1, 226, 33, 36, 7, 1, + 5, 6, 226, 33, 36, 7, 1, 5, 6, 137, 36, 7, 5, 1, 219, 150, 218, 96, 36, + 7, 5, 1, 182, 36, 7, 5, 1, 152, 182, 36, 7, 5, 1, 205, 159, 36, 7, 5, 1, + 252, 144, 36, 7, 5, 1, 251, 150, 36, 7, 5, 1, 250, 8, 36, 7, 5, 1, 217, + 100, 36, 7, 5, 1, 242, 139, 36, 7, 5, 1, 230, 159, 2, 50, 226, 247, 211, + 180, 36, 7, 5, 1, 148, 2, 147, 248, 130, 91, 36, 7, 5, 1, 222, 67, 36, 7, + 5, 1, 242, 215, 36, 7, 5, 1, 106, 2, 147, 248, 130, 91, 36, 7, 5, 1, 207, + 129, 36, 7, 5, 1, 32, 2, 245, 166, 36, 7, 5, 1, 148, 2, 245, 166, 36, 7, + 5, 1, 106, 2, 245, 166, 36, 120, 212, 202, 52, 36, 50, 233, 2, 249, 123, + 55, 36, 252, 149, 146, 211, 130, 55, 36, 47, 251, 244, 52, 36, 48, 251, + 244, 23, 130, 251, 244, 55, 7, 6, 1, 32, 2, 218, 149, 55, 7, 5, 1, 32, 2, + 218, 149, 55, 7, 6, 1, 63, 2, 67, 52, 7, 5, 1, 63, 2, 67, 52, 7, 6, 1, + 63, 2, 67, 55, 7, 5, 1, 63, 2, 67, 55, 7, 6, 1, 63, 2, 229, 206, 55, 7, + 5, 1, 63, 2, 229, 206, 55, 7, 6, 1, 249, 35, 2, 248, 142, 23, 153, 7, 5, + 1, 249, 35, 2, 248, 142, 23, 153, 7, 6, 1, 246, 241, 2, 67, 52, 7, 5, 1, + 246, 241, 2, 67, 52, 7, 6, 1, 246, 241, 2, 67, 55, 7, 5, 1, 246, 241, 2, + 67, 55, 7, 6, 1, 246, 241, 2, 229, 206, 55, 7, 5, 1, 246, 241, 2, 229, + 206, 55, 7, 6, 1, 246, 241, 2, 248, 141, 7, 5, 1, 246, 241, 2, 248, 141, + 7, 6, 1, 246, 241, 2, 247, 228, 55, 7, 5, 1, 246, 241, 2, 247, 228, 55, + 7, 6, 1, 174, 2, 228, 14, 23, 239, 236, 7, 5, 1, 174, 2, 228, 14, 23, + 239, 236, 7, 6, 1, 174, 2, 228, 14, 23, 153, 7, 5, 1, 174, 2, 228, 14, + 23, 153, 7, 6, 1, 174, 2, 247, 228, 55, 7, 5, 1, 174, 2, 247, 228, 55, 7, + 6, 1, 174, 2, 211, 181, 55, 7, 5, 1, 174, 2, 211, 181, 55, 7, 6, 1, 174, + 2, 248, 142, 23, 249, 122, 7, 5, 1, 174, 2, 248, 142, 23, 249, 122, 7, 6, + 1, 242, 140, 2, 67, 52, 7, 5, 1, 242, 140, 2, 67, 52, 7, 6, 1, 241, 56, + 2, 228, 13, 7, 5, 1, 241, 56, 2, 228, 13, 7, 6, 1, 239, 156, 2, 67, 52, + 7, 5, 1, 239, 156, 2, 67, 52, 7, 6, 1, 239, 156, 2, 67, 55, 7, 5, 1, 239, + 156, 2, 67, 55, 7, 6, 1, 239, 156, 2, 245, 166, 7, 5, 1, 239, 156, 2, + 245, 166, 7, 6, 1, 239, 156, 2, 248, 141, 7, 5, 1, 239, 156, 2, 248, 141, + 7, 6, 1, 239, 156, 2, 249, 123, 55, 7, 5, 1, 239, 156, 2, 249, 123, 55, + 7, 6, 1, 237, 225, 2, 211, 181, 55, 7, 5, 1, 237, 225, 2, 211, 181, 55, + 7, 6, 1, 237, 225, 2, 245, 167, 23, 153, 7, 5, 1, 237, 225, 2, 245, 167, + 23, 153, 7, 6, 1, 232, 77, 2, 153, 7, 5, 1, 232, 77, 2, 153, 7, 6, 1, + 232, 77, 2, 67, 55, 7, 5, 1, 232, 77, 2, 67, 55, 7, 6, 1, 232, 77, 2, + 229, 206, 55, 7, 5, 1, 232, 77, 2, 229, 206, 55, 7, 6, 1, 230, 159, 2, + 67, 55, 7, 5, 1, 230, 159, 2, 67, 55, 7, 6, 1, 230, 159, 2, 67, 250, 26, + 23, 228, 13, 7, 5, 1, 230, 159, 2, 67, 250, 26, 23, 228, 13, 7, 6, 1, + 230, 159, 2, 229, 206, 55, 7, 5, 1, 230, 159, 2, 229, 206, 55, 7, 6, 1, + 230, 159, 2, 247, 228, 55, 7, 5, 1, 230, 159, 2, 247, 228, 55, 7, 6, 1, + 229, 29, 2, 153, 7, 5, 1, 229, 29, 2, 153, 7, 6, 1, 229, 29, 2, 67, 52, + 7, 5, 1, 229, 29, 2, 67, 52, 7, 6, 1, 229, 29, 2, 67, 55, 7, 5, 1, 229, + 29, 2, 67, 55, 7, 6, 1, 226, 34, 2, 67, 52, 7, 5, 1, 226, 34, 2, 67, 52, + 7, 6, 1, 226, 34, 2, 67, 55, 7, 5, 1, 226, 34, 2, 67, 55, 7, 6, 1, 226, + 34, 2, 229, 206, 55, 7, 5, 1, 226, 34, 2, 229, 206, 55, 7, 6, 1, 226, 34, + 2, 247, 228, 55, 7, 5, 1, 226, 34, 2, 247, 228, 55, 7, 6, 1, 148, 2, 211, + 181, 23, 153, 7, 5, 1, 148, 2, 211, 181, 23, 153, 7, 6, 1, 148, 2, 211, + 181, 23, 245, 166, 7, 5, 1, 148, 2, 211, 181, 23, 245, 166, 7, 6, 1, 148, + 2, 228, 14, 23, 239, 236, 7, 5, 1, 148, 2, 228, 14, 23, 239, 236, 7, 6, + 1, 148, 2, 228, 14, 23, 153, 7, 5, 1, 148, 2, 228, 14, 23, 153, 7, 6, 1, + 222, 68, 2, 153, 7, 5, 1, 222, 68, 2, 153, 7, 6, 1, 222, 68, 2, 67, 52, + 7, 5, 1, 222, 68, 2, 67, 52, 7, 6, 1, 219, 150, 2, 67, 52, 7, 5, 1, 219, + 150, 2, 67, 52, 7, 6, 1, 219, 150, 2, 67, 55, 7, 5, 1, 219, 150, 2, 67, + 55, 7, 6, 1, 219, 150, 2, 67, 250, 26, 23, 228, 13, 7, 5, 1, 219, 150, 2, + 67, 250, 26, 23, 228, 13, 7, 6, 1, 219, 150, 2, 229, 206, 55, 7, 5, 1, + 219, 150, 2, 229, 206, 55, 7, 6, 1, 218, 1, 2, 67, 52, 7, 5, 1, 218, 1, + 2, 67, 52, 7, 6, 1, 218, 1, 2, 67, 55, 7, 5, 1, 218, 1, 2, 67, 55, 7, 6, + 1, 218, 1, 2, 253, 9, 23, 67, 52, 7, 5, 1, 218, 1, 2, 253, 9, 23, 67, 52, + 7, 6, 1, 218, 1, 2, 248, 196, 23, 67, 52, 7, 5, 1, 218, 1, 2, 248, 196, + 23, 67, 52, 7, 6, 1, 218, 1, 2, 67, 250, 26, 23, 67, 52, 7, 5, 1, 218, 1, + 2, 67, 250, 26, 23, 67, 52, 7, 6, 1, 213, 11, 2, 67, 52, 7, 5, 1, 213, + 11, 2, 67, 52, 7, 6, 1, 213, 11, 2, 67, 55, 7, 5, 1, 213, 11, 2, 67, 55, + 7, 6, 1, 213, 11, 2, 229, 206, 55, 7, 5, 1, 213, 11, 2, 229, 206, 55, 7, + 6, 1, 213, 11, 2, 247, 228, 55, 7, 5, 1, 213, 11, 2, 247, 228, 55, 7, 6, + 1, 106, 2, 245, 167, 55, 7, 5, 1, 106, 2, 245, 167, 55, 7, 6, 1, 106, 2, + 211, 181, 55, 7, 5, 1, 106, 2, 211, 181, 55, 7, 6, 1, 106, 2, 247, 228, + 55, 7, 5, 1, 106, 2, 247, 228, 55, 7, 6, 1, 106, 2, 211, 181, 23, 153, 7, + 5, 1, 106, 2, 211, 181, 23, 153, 7, 6, 1, 106, 2, 228, 14, 23, 245, 166, + 7, 5, 1, 106, 2, 228, 14, 23, 245, 166, 7, 6, 1, 209, 149, 2, 211, 180, + 7, 5, 1, 209, 149, 2, 211, 180, 7, 6, 1, 209, 149, 2, 67, 55, 7, 5, 1, + 209, 149, 2, 67, 55, 7, 6, 1, 207, 130, 2, 239, 236, 7, 5, 1, 207, 130, + 2, 239, 236, 7, 6, 1, 207, 130, 2, 153, 7, 5, 1, 207, 130, 2, 153, 7, 6, + 1, 207, 130, 2, 245, 166, 7, 5, 1, 207, 130, 2, 245, 166, 7, 6, 1, 207, + 130, 2, 67, 52, 7, 5, 1, 207, 130, 2, 67, 52, 7, 6, 1, 207, 130, 2, 67, + 55, 7, 5, 1, 207, 130, 2, 67, 55, 7, 6, 1, 206, 196, 2, 67, 52, 7, 5, 1, + 206, 196, 2, 67, 52, 7, 6, 1, 206, 196, 2, 245, 166, 7, 5, 1, 206, 196, + 2, 245, 166, 7, 6, 1, 206, 124, 2, 67, 52, 7, 5, 1, 206, 124, 2, 67, 52, + 7, 6, 1, 205, 160, 2, 247, 227, 7, 5, 1, 205, 160, 2, 247, 227, 7, 6, 1, + 205, 160, 2, 67, 55, 7, 5, 1, 205, 160, 2, 67, 55, 7, 6, 1, 205, 160, 2, + 229, 206, 55, 7, 5, 1, 205, 160, 2, 229, 206, 55, 7, 5, 1, 239, 156, 2, + 229, 206, 55, 7, 5, 1, 213, 11, 2, 245, 166, 7, 5, 1, 207, 130, 2, 218, + 149, 52, 7, 5, 1, 206, 124, 2, 218, 149, 52, 7, 5, 1, 32, 2, 48, 160, + 218, 148, 7, 5, 1, 152, 218, 1, 2, 67, 52, 7, 5, 1, 152, 218, 1, 2, 245, + 163, 91, 7, 5, 1, 152, 218, 1, 2, 127, 91, 7, 6, 1, 215, 228, 182, 7, 5, + 1, 245, 227, 7, 6, 1, 32, 2, 67, 55, 7, 5, 1, 32, 2, 67, 55, 7, 6, 1, 32, + 2, 238, 130, 52, 7, 5, 1, 32, 2, 238, 130, 52, 7, 6, 1, 32, 2, 247, 228, + 23, 153, 7, 5, 1, 32, 2, 247, 228, 23, 153, 7, 6, 1, 32, 2, 247, 228, 23, + 239, 236, 7, 5, 1, 32, 2, 247, 228, 23, 239, 236, 7, 6, 1, 32, 2, 247, + 228, 23, 238, 130, 52, 7, 5, 1, 32, 2, 247, 228, 23, 238, 130, 52, 7, 6, + 1, 32, 2, 247, 228, 23, 211, 180, 7, 5, 1, 32, 2, 247, 228, 23, 211, 180, + 7, 6, 1, 32, 2, 247, 228, 23, 67, 55, 7, 5, 1, 32, 2, 247, 228, 23, 67, + 55, 7, 6, 1, 32, 2, 249, 123, 23, 153, 7, 5, 1, 32, 2, 249, 123, 23, 153, + 7, 6, 1, 32, 2, 249, 123, 23, 239, 236, 7, 5, 1, 32, 2, 249, 123, 23, + 239, 236, 7, 6, 1, 32, 2, 249, 123, 23, 238, 130, 52, 7, 5, 1, 32, 2, + 249, 123, 23, 238, 130, 52, 7, 6, 1, 32, 2, 249, 123, 23, 211, 180, 7, 5, + 1, 32, 2, 249, 123, 23, 211, 180, 7, 6, 1, 32, 2, 249, 123, 23, 67, 55, + 7, 5, 1, 32, 2, 249, 123, 23, 67, 55, 7, 6, 1, 174, 2, 67, 55, 7, 5, 1, + 174, 2, 67, 55, 7, 6, 1, 174, 2, 238, 130, 52, 7, 5, 1, 174, 2, 238, 130, + 52, 7, 6, 1, 174, 2, 211, 180, 7, 5, 1, 174, 2, 211, 180, 7, 6, 1, 174, + 2, 247, 228, 23, 153, 7, 5, 1, 174, 2, 247, 228, 23, 153, 7, 6, 1, 174, + 2, 247, 228, 23, 239, 236, 7, 5, 1, 174, 2, 247, 228, 23, 239, 236, 7, 6, + 1, 174, 2, 247, 228, 23, 238, 130, 52, 7, 5, 1, 174, 2, 247, 228, 23, + 238, 130, 52, 7, 6, 1, 174, 2, 247, 228, 23, 211, 180, 7, 5, 1, 174, 2, + 247, 228, 23, 211, 180, 7, 6, 1, 174, 2, 247, 228, 23, 67, 55, 7, 5, 1, + 174, 2, 247, 228, 23, 67, 55, 7, 6, 1, 237, 225, 2, 238, 130, 52, 7, 5, + 1, 237, 225, 2, 238, 130, 52, 7, 6, 1, 237, 225, 2, 67, 55, 7, 5, 1, 237, + 225, 2, 67, 55, 7, 6, 1, 148, 2, 67, 55, 7, 5, 1, 148, 2, 67, 55, 7, 6, + 1, 148, 2, 238, 130, 52, 7, 5, 1, 148, 2, 238, 130, 52, 7, 6, 1, 148, 2, + 247, 228, 23, 153, 7, 5, 1, 148, 2, 247, 228, 23, 153, 7, 6, 1, 148, 2, + 247, 228, 23, 239, 236, 7, 5, 1, 148, 2, 247, 228, 23, 239, 236, 7, 6, 1, + 148, 2, 247, 228, 23, 238, 130, 52, 7, 5, 1, 148, 2, 247, 228, 23, 238, + 130, 52, 7, 6, 1, 148, 2, 247, 228, 23, 211, 180, 7, 5, 1, 148, 2, 247, + 228, 23, 211, 180, 7, 6, 1, 148, 2, 247, 228, 23, 67, 55, 7, 5, 1, 148, + 2, 247, 228, 23, 67, 55, 7, 6, 1, 148, 2, 238, 70, 23, 153, 7, 5, 1, 148, + 2, 238, 70, 23, 153, 7, 6, 1, 148, 2, 238, 70, 23, 239, 236, 7, 5, 1, + 148, 2, 238, 70, 23, 239, 236, 7, 6, 1, 148, 2, 238, 70, 23, 238, 130, + 52, 7, 5, 1, 148, 2, 238, 70, 23, 238, 130, 52, 7, 6, 1, 148, 2, 238, 70, + 23, 211, 180, 7, 5, 1, 148, 2, 238, 70, 23, 211, 180, 7, 6, 1, 148, 2, + 238, 70, 23, 67, 55, 7, 5, 1, 148, 2, 238, 70, 23, 67, 55, 7, 6, 1, 106, + 2, 67, 55, 7, 5, 1, 106, 2, 67, 55, 7, 6, 1, 106, 2, 238, 130, 52, 7, 5, + 1, 106, 2, 238, 130, 52, 7, 6, 1, 106, 2, 238, 70, 23, 153, 7, 5, 1, 106, + 2, 238, 70, 23, 153, 7, 6, 1, 106, 2, 238, 70, 23, 239, 236, 7, 5, 1, + 106, 2, 238, 70, 23, 239, 236, 7, 6, 1, 106, 2, 238, 70, 23, 238, 130, + 52, 7, 5, 1, 106, 2, 238, 70, 23, 238, 130, 52, 7, 6, 1, 106, 2, 238, 70, + 23, 211, 180, 7, 5, 1, 106, 2, 238, 70, 23, 211, 180, 7, 6, 1, 106, 2, + 238, 70, 23, 67, 55, 7, 5, 1, 106, 2, 238, 70, 23, 67, 55, 7, 6, 1, 206, + 124, 2, 239, 236, 7, 5, 1, 206, 124, 2, 239, 236, 7, 6, 1, 206, 124, 2, + 67, 55, 7, 5, 1, 206, 124, 2, 67, 55, 7, 6, 1, 206, 124, 2, 238, 130, 52, + 7, 5, 1, 206, 124, 2, 238, 130, 52, 7, 6, 1, 206, 124, 2, 211, 180, 7, 5, + 1, 206, 124, 2, 211, 180, 7, 6, 1, 226, 246, 229, 173, 7, 5, 1, 226, 246, + 229, 173, 7, 6, 1, 226, 246, 209, 148, 7, 5, 1, 226, 246, 209, 148, 7, 6, + 1, 206, 124, 2, 229, 111, 7, 5, 1, 206, 124, 2, 229, 111, 27, 5, 1, 252, + 145, 2, 220, 86, 27, 5, 1, 252, 145, 2, 246, 75, 27, 5, 1, 252, 145, 2, + 220, 87, 23, 209, 54, 27, 5, 1, 252, 145, 2, 246, 76, 23, 209, 54, 27, 5, + 1, 252, 145, 2, 220, 87, 23, 222, 72, 27, 5, 1, 252, 145, 2, 246, 76, 23, + 222, 72, 27, 5, 1, 252, 145, 2, 220, 87, 23, 221, 124, 27, 5, 1, 252, + 145, 2, 246, 76, 23, 221, 124, 27, 6, 1, 252, 145, 2, 220, 86, 27, 6, 1, + 252, 145, 2, 246, 75, 27, 6, 1, 252, 145, 2, 220, 87, 23, 209, 54, 27, 6, + 1, 252, 145, 2, 246, 76, 23, 209, 54, 27, 6, 1, 252, 145, 2, 220, 87, 23, + 222, 72, 27, 6, 1, 252, 145, 2, 246, 76, 23, 222, 72, 27, 6, 1, 252, 145, + 2, 220, 87, 23, 221, 124, 27, 6, 1, 252, 145, 2, 246, 76, 23, 221, 124, + 27, 5, 1, 242, 245, 2, 220, 86, 27, 5, 1, 242, 245, 2, 246, 75, 27, 5, 1, + 242, 245, 2, 220, 87, 23, 209, 54, 27, 5, 1, 242, 245, 2, 246, 76, 23, + 209, 54, 27, 5, 1, 242, 245, 2, 220, 87, 23, 222, 72, 27, 5, 1, 242, 245, + 2, 246, 76, 23, 222, 72, 27, 6, 1, 242, 245, 2, 220, 86, 27, 6, 1, 242, + 245, 2, 246, 75, 27, 6, 1, 242, 245, 2, 220, 87, 23, 209, 54, 27, 6, 1, + 242, 245, 2, 246, 76, 23, 209, 54, 27, 6, 1, 242, 245, 2, 220, 87, 23, + 222, 72, 27, 6, 1, 242, 245, 2, 246, 76, 23, 222, 72, 27, 5, 1, 242, 202, + 2, 220, 86, 27, 5, 1, 242, 202, 2, 246, 75, 27, 5, 1, 242, 202, 2, 220, + 87, 23, 209, 54, 27, 5, 1, 242, 202, 2, 246, 76, 23, 209, 54, 27, 5, 1, + 242, 202, 2, 220, 87, 23, 222, 72, 27, 5, 1, 242, 202, 2, 246, 76, 23, + 222, 72, 27, 5, 1, 242, 202, 2, 220, 87, 23, 221, 124, 27, 5, 1, 242, + 202, 2, 246, 76, 23, 221, 124, 27, 6, 1, 242, 202, 2, 220, 86, 27, 6, 1, + 242, 202, 2, 246, 75, 27, 6, 1, 242, 202, 2, 220, 87, 23, 209, 54, 27, 6, + 1, 242, 202, 2, 246, 76, 23, 209, 54, 27, 6, 1, 242, 202, 2, 220, 87, 23, + 222, 72, 27, 6, 1, 242, 202, 2, 246, 76, 23, 222, 72, 27, 6, 1, 242, 202, + 2, 220, 87, 23, 221, 124, 27, 6, 1, 242, 202, 2, 246, 76, 23, 221, 124, + 27, 5, 1, 232, 250, 2, 220, 86, 27, 5, 1, 232, 250, 2, 246, 75, 27, 5, 1, + 232, 250, 2, 220, 87, 23, 209, 54, 27, 5, 1, 232, 250, 2, 246, 76, 23, + 209, 54, 27, 5, 1, 232, 250, 2, 220, 87, 23, 222, 72, 27, 5, 1, 232, 250, + 2, 246, 76, 23, 222, 72, 27, 5, 1, 232, 250, 2, 220, 87, 23, 221, 124, + 27, 5, 1, 232, 250, 2, 246, 76, 23, 221, 124, 27, 6, 1, 232, 250, 2, 220, + 86, 27, 6, 1, 232, 250, 2, 246, 75, 27, 6, 1, 232, 250, 2, 220, 87, 23, + 209, 54, 27, 6, 1, 232, 250, 2, 246, 76, 23, 209, 54, 27, 6, 1, 232, 250, + 2, 220, 87, 23, 222, 72, 27, 6, 1, 232, 250, 2, 246, 76, 23, 222, 72, 27, + 6, 1, 232, 250, 2, 220, 87, 23, 221, 124, 27, 6, 1, 232, 250, 2, 246, 76, + 23, 221, 124, 27, 5, 1, 222, 169, 2, 220, 86, 27, 5, 1, 222, 169, 2, 246, + 75, 27, 5, 1, 222, 169, 2, 220, 87, 23, 209, 54, 27, 5, 1, 222, 169, 2, + 246, 76, 23, 209, 54, 27, 5, 1, 222, 169, 2, 220, 87, 23, 222, 72, 27, 5, + 1, 222, 169, 2, 246, 76, 23, 222, 72, 27, 6, 1, 222, 169, 2, 220, 86, 27, + 6, 1, 222, 169, 2, 246, 75, 27, 6, 1, 222, 169, 2, 220, 87, 23, 209, 54, + 27, 6, 1, 222, 169, 2, 246, 76, 23, 209, 54, 27, 6, 1, 222, 169, 2, 220, + 87, 23, 222, 72, 27, 6, 1, 222, 169, 2, 246, 76, 23, 222, 72, 27, 5, 1, + 209, 201, 2, 220, 86, 27, 5, 1, 209, 201, 2, 246, 75, 27, 5, 1, 209, 201, + 2, 220, 87, 23, 209, 54, 27, 5, 1, 209, 201, 2, 246, 76, 23, 209, 54, 27, + 5, 1, 209, 201, 2, 220, 87, 23, 222, 72, 27, 5, 1, 209, 201, 2, 246, 76, + 23, 222, 72, 27, 5, 1, 209, 201, 2, 220, 87, 23, 221, 124, 27, 5, 1, 209, + 201, 2, 246, 76, 23, 221, 124, 27, 6, 1, 209, 201, 2, 246, 75, 27, 6, 1, + 209, 201, 2, 246, 76, 23, 209, 54, 27, 6, 1, 209, 201, 2, 246, 76, 23, + 222, 72, 27, 6, 1, 209, 201, 2, 246, 76, 23, 221, 124, 27, 5, 1, 222, + 171, 2, 220, 86, 27, 5, 1, 222, 171, 2, 246, 75, 27, 5, 1, 222, 171, 2, + 220, 87, 23, 209, 54, 27, 5, 1, 222, 171, 2, 246, 76, 23, 209, 54, 27, 5, + 1, 222, 171, 2, 220, 87, 23, 222, 72, 27, 5, 1, 222, 171, 2, 246, 76, 23, + 222, 72, 27, 5, 1, 222, 171, 2, 220, 87, 23, 221, 124, 27, 5, 1, 222, + 171, 2, 246, 76, 23, 221, 124, 27, 6, 1, 222, 171, 2, 220, 86, 27, 6, 1, + 222, 171, 2, 246, 75, 27, 6, 1, 222, 171, 2, 220, 87, 23, 209, 54, 27, 6, + 1, 222, 171, 2, 246, 76, 23, 209, 54, 27, 6, 1, 222, 171, 2, 220, 87, 23, + 222, 72, 27, 6, 1, 222, 171, 2, 246, 76, 23, 222, 72, 27, 6, 1, 222, 171, + 2, 220, 87, 23, 221, 124, 27, 6, 1, 222, 171, 2, 246, 76, 23, 221, 124, + 27, 5, 1, 252, 145, 2, 209, 54, 27, 5, 1, 252, 145, 2, 222, 72, 27, 5, 1, + 242, 245, 2, 209, 54, 27, 5, 1, 242, 245, 2, 222, 72, 27, 5, 1, 242, 202, + 2, 209, 54, 27, 5, 1, 242, 202, 2, 222, 72, 27, 5, 1, 232, 250, 2, 209, + 54, 27, 5, 1, 232, 250, 2, 222, 72, 27, 5, 1, 222, 169, 2, 209, 54, 27, + 5, 1, 222, 169, 2, 222, 72, 27, 5, 1, 209, 201, 2, 209, 54, 27, 5, 1, + 209, 201, 2, 222, 72, 27, 5, 1, 222, 171, 2, 209, 54, 27, 5, 1, 222, 171, + 2, 222, 72, 27, 5, 1, 252, 145, 2, 220, 87, 23, 205, 221, 27, 5, 1, 252, + 145, 2, 246, 76, 23, 205, 221, 27, 5, 1, 252, 145, 2, 220, 87, 23, 209, + 55, 23, 205, 221, 27, 5, 1, 252, 145, 2, 246, 76, 23, 209, 55, 23, 205, + 221, 27, 5, 1, 252, 145, 2, 220, 87, 23, 222, 73, 23, 205, 221, 27, 5, 1, + 252, 145, 2, 246, 76, 23, 222, 73, 23, 205, 221, 27, 5, 1, 252, 145, 2, + 220, 87, 23, 221, 125, 23, 205, 221, 27, 5, 1, 252, 145, 2, 246, 76, 23, + 221, 125, 23, 205, 221, 27, 6, 1, 252, 145, 2, 220, 87, 23, 220, 100, 27, + 6, 1, 252, 145, 2, 246, 76, 23, 220, 100, 27, 6, 1, 252, 145, 2, 220, 87, + 23, 209, 55, 23, 220, 100, 27, 6, 1, 252, 145, 2, 246, 76, 23, 209, 55, + 23, 220, 100, 27, 6, 1, 252, 145, 2, 220, 87, 23, 222, 73, 23, 220, 100, + 27, 6, 1, 252, 145, 2, 246, 76, 23, 222, 73, 23, 220, 100, 27, 6, 1, 252, + 145, 2, 220, 87, 23, 221, 125, 23, 220, 100, 27, 6, 1, 252, 145, 2, 246, + 76, 23, 221, 125, 23, 220, 100, 27, 5, 1, 242, 202, 2, 220, 87, 23, 205, + 221, 27, 5, 1, 242, 202, 2, 246, 76, 23, 205, 221, 27, 5, 1, 242, 202, 2, + 220, 87, 23, 209, 55, 23, 205, 221, 27, 5, 1, 242, 202, 2, 246, 76, 23, + 209, 55, 23, 205, 221, 27, 5, 1, 242, 202, 2, 220, 87, 23, 222, 73, 23, + 205, 221, 27, 5, 1, 242, 202, 2, 246, 76, 23, 222, 73, 23, 205, 221, 27, + 5, 1, 242, 202, 2, 220, 87, 23, 221, 125, 23, 205, 221, 27, 5, 1, 242, + 202, 2, 246, 76, 23, 221, 125, 23, 205, 221, 27, 6, 1, 242, 202, 2, 220, + 87, 23, 220, 100, 27, 6, 1, 242, 202, 2, 246, 76, 23, 220, 100, 27, 6, 1, + 242, 202, 2, 220, 87, 23, 209, 55, 23, 220, 100, 27, 6, 1, 242, 202, 2, + 246, 76, 23, 209, 55, 23, 220, 100, 27, 6, 1, 242, 202, 2, 220, 87, 23, + 222, 73, 23, 220, 100, 27, 6, 1, 242, 202, 2, 246, 76, 23, 222, 73, 23, + 220, 100, 27, 6, 1, 242, 202, 2, 220, 87, 23, 221, 125, 23, 220, 100, 27, + 6, 1, 242, 202, 2, 246, 76, 23, 221, 125, 23, 220, 100, 27, 5, 1, 222, + 171, 2, 220, 87, 23, 205, 221, 27, 5, 1, 222, 171, 2, 246, 76, 23, 205, + 221, 27, 5, 1, 222, 171, 2, 220, 87, 23, 209, 55, 23, 205, 221, 27, 5, 1, + 222, 171, 2, 246, 76, 23, 209, 55, 23, 205, 221, 27, 5, 1, 222, 171, 2, + 220, 87, 23, 222, 73, 23, 205, 221, 27, 5, 1, 222, 171, 2, 246, 76, 23, + 222, 73, 23, 205, 221, 27, 5, 1, 222, 171, 2, 220, 87, 23, 221, 125, 23, + 205, 221, 27, 5, 1, 222, 171, 2, 246, 76, 23, 221, 125, 23, 205, 221, 27, + 6, 1, 222, 171, 2, 220, 87, 23, 220, 100, 27, 6, 1, 222, 171, 2, 246, 76, + 23, 220, 100, 27, 6, 1, 222, 171, 2, 220, 87, 23, 209, 55, 23, 220, 100, + 27, 6, 1, 222, 171, 2, 246, 76, 23, 209, 55, 23, 220, 100, 27, 6, 1, 222, + 171, 2, 220, 87, 23, 222, 73, 23, 220, 100, 27, 6, 1, 222, 171, 2, 246, + 76, 23, 222, 73, 23, 220, 100, 27, 6, 1, 222, 171, 2, 220, 87, 23, 221, + 125, 23, 220, 100, 27, 6, 1, 222, 171, 2, 246, 76, 23, 221, 125, 23, 220, + 100, 27, 5, 1, 252, 145, 2, 208, 152, 27, 5, 1, 252, 145, 2, 228, 13, 27, + 5, 1, 252, 145, 2, 209, 55, 23, 205, 221, 27, 5, 1, 252, 145, 2, 205, + 221, 27, 5, 1, 252, 145, 2, 222, 73, 23, 205, 221, 27, 5, 1, 252, 145, 2, + 221, 124, 27, 5, 1, 252, 145, 2, 221, 125, 23, 205, 221, 27, 6, 1, 252, + 145, 2, 208, 152, 27, 6, 1, 252, 145, 2, 228, 13, 27, 6, 1, 252, 145, 2, + 209, 54, 27, 6, 1, 252, 145, 2, 222, 72, 27, 6, 1, 252, 145, 2, 220, 100, + 27, 231, 23, 27, 220, 100, 27, 220, 86, 27, 221, 124, 27, 245, 160, 23, + 221, 124, 27, 5, 1, 242, 202, 2, 209, 55, 23, 205, 221, 27, 5, 1, 242, + 202, 2, 205, 221, 27, 5, 1, 242, 202, 2, 222, 73, 23, 205, 221, 27, 5, 1, + 242, 202, 2, 221, 124, 27, 5, 1, 242, 202, 2, 221, 125, 23, 205, 221, 27, + 6, 1, 242, 245, 2, 209, 54, 27, 6, 1, 242, 245, 2, 222, 72, 27, 6, 1, + 242, 202, 2, 209, 54, 27, 6, 1, 242, 202, 2, 222, 72, 27, 6, 1, 242, 202, + 2, 220, 100, 27, 220, 87, 23, 209, 54, 27, 220, 87, 23, 222, 72, 27, 220, + 87, 23, 221, 124, 27, 5, 1, 232, 250, 2, 208, 152, 27, 5, 1, 232, 250, 2, + 228, 13, 27, 5, 1, 232, 250, 2, 245, 160, 23, 209, 54, 27, 5, 1, 232, + 250, 2, 245, 160, 23, 222, 72, 27, 5, 1, 232, 250, 2, 221, 124, 27, 5, 1, + 232, 250, 2, 245, 160, 23, 221, 124, 27, 6, 1, 232, 250, 2, 208, 152, 27, + 6, 1, 232, 250, 2, 228, 13, 27, 6, 1, 232, 250, 2, 209, 54, 27, 6, 1, + 232, 250, 2, 222, 72, 27, 246, 76, 23, 209, 54, 27, 246, 76, 23, 222, 72, + 27, 246, 76, 23, 221, 124, 27, 5, 1, 209, 201, 2, 208, 152, 27, 5, 1, + 209, 201, 2, 228, 13, 27, 5, 1, 209, 201, 2, 245, 160, 23, 209, 54, 27, + 5, 1, 209, 201, 2, 245, 160, 23, 222, 72, 27, 5, 1, 218, 211, 2, 220, 86, + 27, 5, 1, 218, 211, 2, 246, 75, 27, 5, 1, 209, 201, 2, 221, 124, 27, 5, + 1, 209, 201, 2, 245, 160, 23, 221, 124, 27, 6, 1, 209, 201, 2, 208, 152, + 27, 6, 1, 209, 201, 2, 228, 13, 27, 6, 1, 209, 201, 2, 209, 54, 27, 6, 1, + 209, 201, 2, 222, 72, 27, 6, 1, 218, 211, 2, 246, 75, 27, 245, 160, 23, + 209, 54, 27, 245, 160, 23, 222, 72, 27, 209, 54, 27, 5, 1, 222, 171, 2, + 209, 55, 23, 205, 221, 27, 5, 1, 222, 171, 2, 205, 221, 27, 5, 1, 222, + 171, 2, 222, 73, 23, 205, 221, 27, 5, 1, 222, 171, 2, 221, 124, 27, 5, 1, + 222, 171, 2, 221, 125, 23, 205, 221, 27, 6, 1, 222, 169, 2, 209, 54, 27, + 6, 1, 222, 169, 2, 222, 72, 27, 6, 1, 222, 171, 2, 209, 54, 27, 6, 1, + 222, 171, 2, 222, 72, 27, 6, 1, 222, 171, 2, 220, 100, 27, 222, 72, 27, + 246, 75, 243, 42, 219, 211, 243, 51, 219, 211, 243, 42, 214, 153, 243, + 51, 214, 153, 211, 235, 214, 153, 241, 123, 214, 153, 215, 8, 214, 153, + 241, 241, 214, 153, 220, 72, 214, 153, 212, 12, 214, 153, 239, 130, 214, + 153, 205, 86, 207, 15, 214, 153, 205, 86, 207, 15, 224, 59, 205, 86, 207, + 15, 232, 117, 230, 37, 83, 218, 158, 83, 237, 239, 224, 60, 237, 239, + 241, 241, 246, 78, 243, 42, 246, 78, 243, 51, 246, 78, 194, 134, 50, 79, + 229, 205, 50, 114, 229, 205, 47, 215, 41, 219, 180, 83, 48, 215, 41, 219, + 180, 83, 215, 41, 229, 96, 219, 180, 83, 215, 41, 238, 249, 219, 180, 83, + 47, 50, 219, 180, 83, 48, 50, 219, 180, 83, 50, 229, 96, 219, 180, 83, + 50, 238, 249, 219, 180, 83, 246, 128, 50, 246, 128, 249, 85, 211, 48, + 249, 85, 119, 67, 230, 56, 118, 67, 230, 56, 194, 243, 54, 237, 237, 220, + 204, 229, 206, 216, 39, 221, 229, 216, 39, 230, 37, 243, 49, 218, 158, + 243, 49, 220, 184, 245, 103, 241, 134, 230, 37, 222, 79, 218, 158, 222, + 79, 225, 199, 224, 66, 214, 153, 221, 132, 226, 215, 53, 221, 132, 212, + 99, 211, 243, 53, 220, 127, 50, 220, 127, 211, 36, 220, 127, 218, 224, + 220, 127, 218, 224, 50, 220, 127, 218, 224, 211, 36, 220, 127, 248, 199, + 215, 41, 230, 41, 252, 109, 219, 180, 83, 215, 41, 218, 162, 252, 109, + 219, 180, 83, 219, 28, 83, 50, 242, 168, 83, 233, 10, 222, 81, 209, 223, + 157, 211, 203, 248, 200, 233, 27, 220, 204, 251, 207, 237, 240, 249, 85, + 241, 116, 214, 235, 47, 49, 249, 134, 2, 219, 190, 48, 49, 249, 134, 2, + 219, 190, 50, 219, 196, 83, 219, 196, 242, 168, 83, 242, 168, 219, 196, + 83, 211, 159, 3, 242, 203, 218, 224, 221, 12, 53, 60, 92, 249, 85, 60, + 86, 249, 85, 114, 251, 209, 218, 224, 216, 52, 247, 193, 209, 206, 118, + 251, 208, 252, 160, 208, 227, 247, 153, 226, 202, 53, 213, 93, 246, 78, + 233, 2, 209, 223, 241, 173, 220, 72, 83, 129, 67, 220, 71, 219, 207, 220, + 127, 241, 125, 67, 220, 71, 241, 204, 67, 220, 71, 118, 67, 220, 71, 241, + 125, 67, 83, 244, 21, 247, 59, 211, 47, 79, 241, 125, 245, 21, 227, 109, + 11, 214, 153, 206, 232, 232, 117, 241, 80, 252, 48, 233, 0, 211, 175, + 233, 0, 216, 39, 233, 0, 220, 218, 230, 37, 232, 226, 218, 158, 232, 226, + 241, 215, 213, 211, 232, 226, 220, 184, 245, 103, 232, 226, 233, 39, 213, + 41, 213, 110, 253, 11, 213, 41, 213, 110, 233, 39, 8, 241, 136, 215, 232, + 253, 11, 8, 241, 136, 215, 232, 225, 193, 18, 215, 233, 224, 62, 18, 215, + 233, 213, 139, 205, 85, 213, 139, 7, 5, 1, 74, 213, 139, 139, 213, 139, + 168, 213, 139, 184, 213, 139, 195, 213, 139, 193, 213, 139, 200, 213, + 139, 101, 53, 213, 139, 226, 201, 213, 139, 242, 242, 53, 213, 139, 47, + 221, 216, 213, 139, 48, 221, 216, 213, 139, 7, 5, 1, 226, 33, 213, 183, + 205, 85, 213, 183, 102, 213, 183, 105, 213, 183, 142, 213, 183, 139, 213, + 183, 168, 213, 183, 184, 213, 183, 195, 213, 183, 193, 213, 183, 200, + 213, 183, 101, 53, 213, 183, 226, 201, 213, 183, 242, 242, 53, 213, 183, + 47, 221, 216, 213, 183, 48, 221, 216, 7, 213, 183, 5, 1, 62, 7, 213, 183, + 5, 1, 75, 7, 213, 183, 5, 1, 76, 7, 213, 183, 5, 1, 206, 195, 7, 213, + 183, 5, 1, 217, 100, 7, 213, 183, 5, 1, 239, 155, 7, 213, 183, 5, 1, 232, + 76, 7, 213, 183, 5, 1, 149, 7, 213, 183, 5, 1, 229, 28, 7, 213, 183, 5, + 1, 226, 33, 7, 213, 183, 5, 1, 222, 67, 7, 213, 183, 5, 1, 182, 7, 213, + 183, 5, 1, 213, 10, 242, 183, 53, 247, 163, 53, 247, 45, 53, 241, 106, + 241, 110, 53, 229, 188, 53, 226, 216, 53, 225, 216, 53, 221, 109, 53, + 218, 27, 53, 206, 240, 53, 186, 215, 200, 53, 245, 30, 53, 242, 184, 53, + 231, 104, 53, 210, 163, 53, 244, 4, 53, 240, 146, 221, 143, 53, 221, 106, + 53, 239, 208, 53, 251, 174, 53, 238, 48, 53, 248, 143, 53, 229, 179, 211, + 88, 53, 214, 134, 53, 212, 96, 53, 233, 52, 218, 27, 53, 210, 146, 229, + 188, 53, 224, 49, 141, 53, 227, 219, 53, 218, 47, 53, 36, 47, 239, 90, + 52, 36, 48, 239, 90, 52, 36, 152, 79, 229, 206, 222, 82, 36, 215, 144, + 79, 229, 206, 222, 82, 36, 252, 87, 51, 52, 36, 247, 194, 51, 52, 36, 47, + 51, 52, 36, 48, 51, 52, 36, 218, 149, 222, 82, 36, 247, 194, 218, 149, + 222, 82, 36, 252, 87, 218, 149, 222, 82, 36, 129, 177, 52, 36, 241, 125, + 177, 52, 36, 243, 37, 247, 233, 36, 243, 37, 214, 107, 36, 243, 37, 245, + 156, 36, 243, 37, 247, 234, 250, 171, 36, 47, 48, 51, 52, 36, 243, 37, + 217, 93, 36, 243, 37, 231, 170, 36, 243, 37, 209, 198, 220, 201, 211, 51, + 36, 218, 225, 214, 181, 222, 82, 36, 50, 79, 213, 225, 222, 82, 36, 252, + 97, 93, 36, 211, 36, 209, 225, 36, 207, 17, 249, 116, 52, 36, 92, 51, + 222, 82, 36, 152, 50, 214, 181, 222, 82, 36, 86, 239, 90, 2, 138, 244, 6, + 36, 92, 239, 90, 2, 138, 244, 6, 36, 47, 51, 55, 36, 48, 51, 55, 36, 251, + 210, 52, 253, 17, 222, 203, 253, 1, 211, 130, 212, 42, 213, 192, 159, 6, + 249, 34, 245, 245, 248, 134, 248, 129, 229, 206, 93, 248, 201, 222, 203, + 248, 249, 209, 233, 242, 185, 247, 124, 217, 90, 245, 245, 242, 56, 121, + 5, 241, 55, 121, 6, 239, 155, 249, 200, 6, 239, 155, 159, 6, 239, 155, + 220, 235, 247, 124, 220, 235, 247, 125, 131, 118, 221, 53, 121, 6, 74, + 249, 200, 6, 74, 121, 6, 149, 121, 5, 149, 230, 159, 63, 250, 129, 93, + 159, 6, 226, 33, 223, 175, 53, 214, 165, 219, 40, 247, 93, 121, 6, 222, + 67, 159, 6, 222, 67, 159, 6, 220, 27, 121, 6, 137, 249, 200, 6, 137, 159, + 6, 137, 220, 133, 212, 185, 218, 237, 216, 33, 83, 212, 108, 53, 211, 79, + 141, 53, 209, 23, 159, 6, 205, 159, 222, 96, 53, 222, 193, 53, 233, 2, + 222, 193, 53, 249, 200, 6, 205, 159, 201, 27, 5, 1, 232, 249, 231, 211, + 53, 252, 106, 53, 121, 6, 251, 150, 249, 200, 6, 249, 34, 242, 207, 93, + 121, 5, 75, 121, 6, 75, 121, 6, 242, 139, 201, 6, 242, 139, 121, 6, 229, + 28, 121, 5, 76, 126, 93, 250, 11, 93, 240, 48, 93, 246, 112, 93, 233, 43, + 214, 163, 218, 97, 6, 220, 27, 242, 59, 53, 159, 5, 221, 53, 159, 5, 240, + 215, 159, 6, 240, 215, 159, 6, 221, 53, 159, 226, 32, 213, 157, 201, 38, + 6, 241, 55, 201, 38, 6, 149, 218, 224, 38, 6, 149, 201, 38, 6, 206, 123, + 159, 35, 6, 246, 240, 159, 35, 5, 246, 240, 159, 35, 5, 75, 159, 35, 5, + 74, 159, 35, 5, 232, 203, 220, 103, 229, 205, 201, 252, 125, 221, 132, + 53, 252, 183, 201, 5, 242, 139, 16, 33, 217, 160, 214, 163, 207, 146, + 241, 116, 119, 216, 19, 207, 146, 241, 116, 119, 224, 189, 207, 146, 241, + 116, 119, 212, 91, 207, 146, 241, 116, 119, 212, 10, 207, 146, 241, 116, + 118, 212, 7, 207, 146, 241, 116, 119, 241, 246, 207, 146, 241, 116, 118, + 241, 245, 207, 146, 241, 116, 129, 241, 245, 207, 146, 241, 116, 241, + 125, 241, 245, 207, 146, 241, 116, 119, 215, 0, 207, 146, 241, 116, 241, + 204, 214, 254, 207, 146, 241, 116, 119, 243, 83, 207, 146, 241, 116, 129, + 243, 81, 207, 146, 241, 116, 241, 204, 243, 81, 207, 146, 241, 116, 216, + 23, 243, 81, 241, 116, 223, 176, 102, 218, 109, 223, 177, 102, 218, 109, + 223, 177, 105, 218, 109, 223, 177, 142, 218, 109, 223, 177, 139, 218, + 109, 223, 177, 168, 218, 109, 223, 177, 184, 218, 109, 223, 177, 195, + 218, 109, 223, 177, 193, 218, 109, 223, 177, 200, 218, 109, 223, 177, + 212, 98, 218, 109, 223, 177, 243, 58, 218, 109, 223, 177, 210, 126, 218, + 109, 223, 177, 241, 243, 218, 109, 223, 177, 119, 238, 29, 218, 109, 223, + 177, 241, 204, 238, 29, 218, 109, 223, 177, 119, 211, 242, 5, 218, 109, + 223, 177, 102, 5, 218, 109, 223, 177, 105, 5, 218, 109, 223, 177, 142, 5, + 218, 109, 223, 177, 139, 5, 218, 109, 223, 177, 168, 5, 218, 109, 223, + 177, 184, 5, 218, 109, 223, 177, 195, 5, 218, 109, 223, 177, 193, 5, 218, + 109, 223, 177, 200, 5, 218, 109, 223, 177, 212, 98, 5, 218, 109, 223, + 177, 243, 58, 5, 218, 109, 223, 177, 210, 126, 5, 218, 109, 223, 177, + 241, 243, 5, 218, 109, 223, 177, 119, 238, 29, 5, 218, 109, 223, 177, + 241, 204, 238, 29, 5, 218, 109, 223, 177, 119, 211, 242, 218, 109, 223, + 177, 119, 211, 243, 249, 35, 246, 240, 218, 109, 223, 177, 241, 204, 211, + 242, 218, 109, 223, 177, 212, 99, 211, 242, 218, 109, 223, 177, 218, 224, + 119, 238, 29, 7, 5, 1, 218, 224, 249, 34, 218, 109, 223, 177, 215, 10, + 230, 79, 17, 218, 109, 223, 177, 241, 244, 243, 123, 17, 218, 109, 223, + 177, 241, 244, 211, 242, 218, 109, 223, 177, 119, 238, 30, 211, 242, 207, + 146, 241, 116, 205, 86, 212, 7, 92, 45, 167, 45, 86, 45, 173, 45, 47, 48, + 45, 120, 130, 45, 143, 207, 36, 45, 143, 243, 117, 45, 188, 243, 117, 45, + 188, 207, 36, 45, 92, 51, 2, 91, 86, 51, 2, 91, 92, 207, 65, 45, 86, 207, + 65, 45, 92, 118, 239, 67, 45, 167, 118, 239, 67, 45, 86, 118, 239, 67, + 45, 173, 118, 239, 67, 45, 92, 51, 2, 212, 191, 86, 51, 2, 212, 191, 92, + 51, 241, 98, 134, 167, 51, 241, 98, 134, 86, 51, 241, 98, 134, 173, 51, + 241, 98, 134, 120, 130, 51, 2, 250, 116, 92, 51, 2, 109, 86, 51, 2, 109, + 92, 51, 2, 229, 111, 86, 51, 2, 229, 111, 47, 48, 207, 65, 45, 47, 48, + 51, 2, 91, 173, 205, 31, 45, 167, 51, 2, 211, 167, 230, 36, 167, 51, 2, + 211, 167, 218, 156, 173, 51, 2, 211, 167, 230, 36, 173, 51, 2, 211, 167, + 218, 156, 86, 51, 2, 247, 92, 244, 6, 173, 51, 2, 247, 92, 230, 36, 252, + 87, 211, 102, 216, 55, 45, 247, 194, 211, 102, 216, 55, 45, 143, 207, 36, + 51, 211, 130, 152, 134, 92, 51, 211, 130, 250, 129, 131, 86, 51, 211, + 130, 134, 252, 87, 222, 142, 247, 234, 45, 247, 194, 222, 142, 247, 234, + 45, 92, 239, 90, 2, 138, 209, 196, 92, 239, 90, 2, 138, 244, 6, 167, 239, + 90, 2, 138, 218, 156, 167, 239, 90, 2, 138, 230, 36, 86, 239, 90, 2, 138, + 209, 196, 86, 239, 90, 2, 138, 244, 6, 173, 239, 90, 2, 138, 218, 156, + 173, 239, 90, 2, 138, 230, 36, 86, 51, 131, 92, 45, 167, 51, 92, 73, 173, + 45, 92, 51, 131, 86, 45, 92, 222, 30, 251, 241, 167, 222, 30, 251, 241, + 86, 222, 30, 251, 241, 173, 222, 30, 251, 241, 92, 239, 90, 131, 86, 239, + 89, 86, 239, 90, 131, 92, 239, 89, 92, 50, 51, 2, 91, 47, 48, 50, 51, 2, + 91, 86, 50, 51, 2, 91, 92, 50, 45, 167, 50, 45, 86, 50, 45, 173, 50, 45, + 47, 48, 50, 45, 120, 130, 50, 45, 143, 207, 36, 50, 45, 143, 243, 117, + 50, 45, 188, 243, 117, 50, 45, 188, 207, 36, 50, 45, 92, 211, 36, 45, 86, + 211, 36, 45, 92, 214, 103, 45, 86, 214, 103, 45, 167, 51, 2, 50, 91, 173, + 51, 2, 50, 91, 92, 246, 77, 45, 167, 246, 77, 45, 86, 246, 77, 45, 173, + 246, 77, 45, 92, 51, 211, 130, 134, 86, 51, 211, 130, 134, 92, 59, 45, + 167, 59, 45, 86, 59, 45, 173, 59, 45, 167, 59, 51, 241, 98, 134, 167, 59, + 51, 222, 166, 221, 167, 167, 59, 51, 222, 166, 221, 168, 2, 194, 134, + 167, 59, 51, 222, 166, 221, 168, 2, 79, 134, 167, 59, 50, 45, 167, 59, + 50, 51, 222, 166, 221, 167, 86, 59, 51, 241, 98, 207, 86, 143, 207, 36, + 51, 211, 130, 247, 91, 188, 243, 117, 51, 211, 130, 247, 91, 120, 130, + 59, 45, 48, 51, 2, 5, 247, 233, 173, 51, 92, 73, 167, 45, 129, 86, 251, + 241, 92, 51, 2, 79, 91, 86, 51, 2, 79, 91, 47, 48, 51, 2, 79, 91, 92, 51, + 2, 50, 79, 91, 86, 51, 2, 50, 79, 91, 47, 48, 51, 2, 50, 79, 91, 92, 222, + 140, 45, 86, 222, 140, 45, 47, 48, 222, 140, 45, 33, 252, 156, 247, 150, + 221, 209, 245, 140, 212, 32, 242, 164, 212, 32, 245, 42, 224, 43, 242, + 165, 243, 43, 216, 28, 233, 57, 225, 227, 243, 61, 222, 203, 224, 43, + 252, 123, 243, 61, 222, 203, 5, 243, 61, 222, 203, 247, 118, 251, 232, + 227, 87, 245, 42, 224, 43, 247, 120, 251, 232, 227, 87, 5, 247, 118, 251, + 232, 227, 87, 243, 34, 73, 220, 105, 226, 32, 220, 115, 226, 32, 247, 96, + 226, 32, 213, 157, 226, 202, 53, 226, 200, 53, 67, 220, 218, 245, 75, + 214, 235, 216, 29, 226, 201, 251, 210, 222, 132, 218, 149, 222, 132, 249, + 86, 222, 132, 49, 218, 103, 247, 36, 218, 103, 241, 118, 218, 103, 220, + 101, 124, 233, 45, 48, 252, 108, 252, 108, 227, 116, 252, 108, 214, 133, + 252, 108, 245, 77, 245, 42, 224, 43, 245, 81, 221, 222, 124, 224, 43, + 221, 222, 124, 229, 134, 252, 117, 229, 134, 222, 122, 233, 7, 209, 218, + 233, 21, 50, 233, 21, 211, 36, 233, 21, 247, 113, 233, 21, 213, 129, 233, + 21, 208, 163, 233, 21, 247, 194, 233, 21, 247, 194, 247, 113, 233, 21, + 252, 87, 247, 113, 233, 21, 212, 31, 250, 52, 219, 61, 220, 102, 67, 226, + 201, 242, 170, 240, 152, 220, 102, 238, 135, 211, 181, 222, 132, 218, + 224, 211, 180, 233, 2, 230, 65, 182, 215, 43, 207, 64, 206, 221, 220, + 115, 224, 43, 211, 180, 226, 202, 211, 180, 251, 203, 146, 124, 224, 43, + 251, 203, 146, 124, 252, 44, 146, 124, 252, 44, 249, 57, 224, 43, 253, + 10, 146, 124, 225, 103, 252, 44, 224, 51, 253, 10, 146, 124, 252, 149, + 146, 124, 224, 43, 252, 149, 146, 124, 252, 149, 146, 222, 123, 146, 124, + 211, 36, 211, 180, 252, 157, 146, 124, 242, 237, 124, 240, 151, 242, 237, + 124, 245, 141, 250, 5, 252, 46, 212, 42, 229, 213, 240, 151, 146, 124, + 252, 44, 146, 211, 130, 222, 123, 212, 42, 233, 84, 222, 203, 233, 84, + 73, 222, 123, 252, 44, 146, 124, 247, 163, 242, 241, 242, 242, 247, 162, + 218, 149, 233, 69, 146, 124, 218, 149, 146, 124, 247, 85, 124, 242, 206, + 242, 240, 124, 214, 27, 242, 241, 245, 228, 146, 124, 146, 211, 130, 249, + 46, 245, 246, 227, 116, 249, 45, 219, 194, 146, 124, 224, 43, 146, 124, + 237, 173, 124, 224, 43, 237, 173, 124, 213, 231, 242, 237, 124, 230, 10, + 222, 123, 146, 124, 239, 230, 222, 123, 146, 124, 230, 10, 131, 146, 124, + 239, 230, 131, 146, 124, 230, 10, 249, 57, 224, 43, 146, 124, 239, 230, + 249, 57, 224, 43, 146, 124, 226, 108, 230, 9, 226, 108, 239, 229, 250, 5, + 224, 43, 242, 237, 124, 224, 43, 230, 9, 224, 43, 239, 229, 225, 103, + 230, 10, 224, 51, 146, 124, 225, 103, 239, 230, 224, 51, 146, 124, 230, + 10, 222, 123, 242, 237, 124, 239, 230, 222, 123, 242, 237, 124, 225, 103, + 230, 10, 224, 51, 242, 237, 124, 225, 103, 239, 230, 224, 51, 242, 237, + 124, 230, 10, 222, 123, 239, 229, 239, 230, 222, 123, 230, 9, 225, 103, + 230, 10, 224, 51, 239, 229, 225, 103, 239, 230, 224, 51, 230, 9, 220, + 139, 213, 173, 220, 140, 222, 123, 146, 124, 213, 174, 222, 123, 146, + 124, 220, 140, 222, 123, 242, 237, 124, 213, 174, 222, 123, 242, 237, + 124, 245, 42, 224, 43, 220, 142, 245, 42, 224, 43, 213, 175, 213, 182, + 222, 203, 213, 138, 222, 203, 224, 43, 32, 213, 182, 222, 203, 224, 43, + 32, 213, 138, 222, 203, 213, 182, 73, 222, 123, 146, 124, 213, 138, 73, + 222, 123, 146, 124, 225, 103, 32, 213, 182, 73, 224, 51, 146, 124, 225, + 103, 32, 213, 138, 73, 224, 51, 146, 124, 213, 182, 73, 2, 224, 43, 146, + 124, 213, 138, 73, 2, 224, 43, 146, 124, 226, 91, 226, 92, 226, 93, 226, + 92, 209, 218, 49, 233, 84, 222, 203, 49, 222, 114, 222, 203, 49, 233, 84, + 73, 222, 123, 146, 124, 49, 222, 114, 73, 222, 123, 146, 124, 49, 248, + 213, 49, 247, 29, 39, 220, 218, 39, 226, 201, 39, 211, 175, 39, 245, 75, + 214, 235, 39, 67, 222, 132, 39, 218, 149, 222, 132, 39, 251, 210, 222, + 132, 39, 242, 241, 39, 246, 78, 98, 220, 218, 98, 226, 201, 98, 211, 175, + 98, 67, 222, 132, 48, 212, 201, 47, 212, 201, 130, 212, 201, 120, 212, + 201, 251, 213, 226, 176, 211, 16, 241, 141, 211, 36, 79, 250, 129, 48, + 210, 143, 50, 79, 250, 129, 50, 48, 210, 143, 245, 42, 224, 43, 220, 96, + 224, 43, 211, 16, 245, 42, 224, 43, 241, 142, 225, 105, 50, 79, 250, 129, + 50, 48, 210, 143, 220, 140, 209, 227, 219, 11, 213, 174, 209, 227, 219, + 11, 224, 48, 213, 195, 222, 203, 247, 118, 251, 232, 224, 48, 213, 194, + 224, 48, 213, 195, 73, 222, 123, 146, 124, 247, 118, 251, 232, 224, 48, + 213, 195, 222, 123, 146, 124, 222, 114, 222, 203, 233, 84, 222, 203, 226, + 97, 239, 32, 247, 129, 227, 168, 233, 18, 206, 155, 225, 207, 224, 50, + 48, 252, 109, 2, 252, 21, 48, 211, 51, 226, 32, 229, 134, 252, 117, 226, + 32, 229, 134, 222, 122, 226, 32, 233, 7, 226, 32, 209, 218, 245, 157, + 222, 132, 67, 222, 132, 214, 27, 222, 132, 245, 75, 211, 175, 249, 141, + 47, 224, 48, 242, 58, 216, 51, 220, 115, 48, 224, 48, 242, 58, 216, 51, + 220, 115, 47, 216, 51, 220, 115, 48, 216, 51, 220, 115, 218, 224, 211, + 181, 242, 241, 247, 26, 229, 134, 222, 122, 247, 26, 229, 134, 252, 117, + 50, 213, 181, 50, 213, 137, 50, 233, 7, 50, 209, 218, 220, 245, 146, 23, + 221, 222, 124, 230, 10, 2, 245, 23, 239, 230, 2, 245, 23, 208, 226, 226, + 108, 230, 9, 208, 226, 226, 108, 239, 229, 230, 10, 146, 211, 130, 222, + 123, 239, 229, 239, 230, 146, 211, 130, 222, 123, 230, 9, 146, 211, 130, + 222, 123, 230, 9, 146, 211, 130, 222, 123, 239, 229, 146, 211, 130, 222, + 123, 220, 139, 146, 211, 130, 222, 123, 213, 173, 245, 42, 224, 43, 220, + 143, 222, 123, 242, 243, 245, 42, 224, 43, 213, 176, 222, 123, 242, 243, + 224, 43, 49, 233, 84, 73, 222, 123, 146, 124, 224, 43, 49, 222, 114, 73, + 222, 123, 146, 124, 49, 233, 84, 73, 222, 123, 224, 43, 146, 124, 49, + 222, 114, 73, 222, 123, 224, 43, 146, 124, 230, 10, 249, 57, 224, 43, + 242, 237, 124, 239, 230, 249, 57, 224, 43, 242, 237, 124, 220, 140, 249, + 57, 224, 43, 242, 237, 124, 213, 174, 249, 57, 224, 43, 242, 237, 124, + 224, 43, 224, 48, 213, 195, 222, 203, 245, 42, 224, 43, 247, 120, 251, + 232, 224, 48, 213, 194, 224, 43, 224, 48, 213, 195, 73, 222, 123, 146, + 124, 245, 42, 224, 43, 247, 120, 251, 232, 224, 48, 213, 195, 222, 123, + 242, 243, 79, 243, 54, 226, 245, 194, 243, 54, 120, 48, 245, 163, 243, + 54, 130, 48, 245, 163, 243, 54, 243, 61, 73, 2, 152, 194, 91, 243, 61, + 73, 2, 79, 250, 129, 251, 200, 243, 34, 73, 194, 91, 5, 243, 61, 73, 2, + 79, 250, 129, 251, 200, 243, 34, 73, 194, 91, 243, 61, 73, 2, 67, 52, + 243, 61, 73, 2, 222, 86, 5, 243, 61, 73, 2, 222, 86, 243, 61, 73, 2, 209, + 226, 243, 61, 73, 2, 118, 194, 213, 212, 247, 118, 2, 152, 194, 91, 247, + 118, 2, 79, 250, 129, 251, 200, 243, 34, 73, 194, 91, 5, 247, 118, 2, 79, + 250, 129, 251, 200, 243, 34, 73, 194, 91, 247, 118, 2, 222, 86, 5, 247, + 118, 2, 222, 86, 205, 160, 224, 41, 250, 164, 227, 86, 245, 158, 53, 243, + 63, 45, 238, 54, 120, 251, 243, 130, 251, 243, 220, 109, 221, 112, 207, + 61, 229, 205, 47, 248, 137, 48, 248, 137, 47, 241, 178, 48, 241, 178, + 249, 154, 48, 247, 61, 249, 154, 47, 247, 61, 211, 102, 48, 247, 61, 211, + 102, 47, 247, 61, 218, 224, 224, 43, 53, 49, 229, 88, 252, 21, 217, 67, + 217, 75, 212, 108, 219, 41, 220, 178, 233, 49, 208, 202, 214, 107, 220, + 239, 73, 233, 17, 53, 201, 224, 43, 53, 207, 71, 238, 56, 211, 102, 47, + 247, 91, 211, 102, 48, 247, 91, 249, 154, 47, 247, 91, 249, 154, 48, 247, + 91, 211, 102, 160, 233, 21, 249, 154, 160, 233, 21, 241, 95, 214, 211, + 120, 251, 244, 250, 6, 118, 194, 250, 118, 222, 125, 231, 174, 242, 233, + 211, 130, 212, 42, 218, 167, 206, 196, 233, 69, 32, 219, 38, 249, 140, + 231, 172, 230, 41, 252, 109, 145, 218, 162, 252, 109, 145, 242, 233, 211, + 130, 212, 42, 230, 46, 250, 17, 218, 148, 246, 250, 252, 157, 251, 252, + 213, 40, 211, 90, 218, 32, 245, 122, 222, 115, 247, 131, 212, 164, 214, + 222, 247, 81, 247, 80, 252, 62, 241, 78, 16, 237, 222, 252, 62, 241, 78, + 16, 214, 101, 219, 211, 252, 62, 241, 78, 16, 219, 212, 242, 243, 252, + 62, 241, 78, 16, 219, 212, 245, 81, 252, 62, 241, 78, 16, 219, 212, 245, + 156, 252, 62, 241, 78, 16, 219, 212, 232, 110, 252, 62, 241, 78, 16, 219, + 212, 247, 233, 252, 62, 241, 78, 16, 247, 234, 214, 3, 252, 62, 241, 78, + 16, 247, 234, 232, 110, 252, 62, 241, 78, 16, 214, 236, 134, 252, 62, + 241, 78, 16, 250, 172, 134, 252, 62, 241, 78, 16, 219, 212, 214, 235, + 252, 62, 241, 78, 16, 219, 212, 250, 171, 252, 62, 241, 78, 16, 219, 212, + 230, 9, 252, 62, 241, 78, 16, 219, 212, 239, 229, 252, 62, 241, 78, 16, + 92, 209, 60, 252, 62, 241, 78, 16, 86, 209, 60, 252, 62, 241, 78, 16, + 219, 212, 92, 45, 252, 62, 241, 78, 16, 219, 212, 86, 45, 252, 62, 241, + 78, 16, 247, 234, 250, 171, 252, 62, 241, 78, 16, 130, 212, 202, 209, + 226, 252, 62, 241, 78, 16, 245, 228, 214, 3, 252, 62, 241, 78, 16, 219, + 212, 130, 248, 199, 252, 62, 241, 78, 16, 219, 212, 245, 227, 252, 62, + 241, 78, 16, 130, 212, 202, 232, 110, 252, 62, 241, 78, 16, 167, 209, 60, + 252, 62, 241, 78, 16, 219, 212, 167, 45, 252, 62, 241, 78, 16, 120, 212, + 202, 222, 86, 252, 62, 241, 78, 16, 245, 239, 214, 3, 252, 62, 241, 78, + 16, 219, 212, 120, 248, 199, 252, 62, 241, 78, 16, 219, 212, 245, 238, + 252, 62, 241, 78, 16, 120, 212, 202, 232, 110, 252, 62, 241, 78, 16, 173, + 209, 60, 252, 62, 241, 78, 16, 219, 212, 173, 45, 252, 62, 241, 78, 16, + 219, 179, 209, 226, 252, 62, 241, 78, 16, 245, 228, 209, 226, 252, 62, + 241, 78, 16, 245, 157, 209, 226, 252, 62, 241, 78, 16, 232, 111, 209, + 226, 252, 62, 241, 78, 16, 247, 234, 209, 226, 252, 62, 241, 78, 16, 120, + 215, 156, 232, 110, 252, 62, 241, 78, 16, 219, 179, 219, 211, 252, 62, + 241, 78, 16, 247, 234, 214, 26, 252, 62, 241, 78, 16, 219, 212, 247, 162, + 252, 62, 241, 78, 16, 120, 212, 202, 245, 166, 252, 62, 241, 78, 16, 245, + 239, 245, 166, 252, 62, 241, 78, 16, 214, 27, 245, 166, 252, 62, 241, 78, + 16, 232, 111, 245, 166, 252, 62, 241, 78, 16, 247, 234, 245, 166, 252, + 62, 241, 78, 16, 130, 215, 156, 214, 3, 252, 62, 241, 78, 16, 47, 215, + 156, 214, 3, 252, 62, 241, 78, 16, 211, 181, 245, 166, 252, 62, 241, 78, + 16, 239, 230, 245, 166, 252, 62, 241, 78, 16, 247, 156, 134, 252, 62, + 241, 78, 16, 245, 239, 211, 180, 252, 62, 241, 78, 16, 205, 30, 252, 62, + 241, 78, 16, 214, 4, 211, 180, 252, 62, 241, 78, 16, 216, 53, 209, 226, + 252, 62, 241, 78, 16, 219, 212, 224, 43, 242, 243, 252, 62, 241, 78, 16, + 219, 212, 219, 195, 252, 62, 241, 78, 16, 130, 248, 200, 211, 180, 252, + 62, 241, 78, 16, 120, 248, 200, 211, 180, 252, 62, 241, 78, 16, 232, 249, + 252, 62, 241, 78, 16, 218, 210, 252, 62, 241, 78, 16, 222, 170, 252, 62, + 241, 78, 16, 252, 145, 209, 226, 252, 62, 241, 78, 16, 242, 245, 209, + 226, 252, 62, 241, 78, 16, 232, 250, 209, 226, 252, 62, 241, 78, 16, 222, + 171, 209, 226, 252, 62, 241, 78, 16, 252, 144, 224, 43, 248, 81, 83, 48, + 252, 109, 2, 173, 205, 31, 45, 215, 127, 222, 142, 249, 140, 250, 29, 93, + 79, 229, 206, 2, 226, 247, 245, 23, 233, 27, 93, 247, 114, 209, 224, 93, + 245, 96, 209, 224, 93, 243, 45, 93, 247, 146, 93, 59, 49, 2, 248, 129, + 79, 229, 205, 243, 19, 93, 252, 139, 231, 175, 93, 239, 45, 93, 39, 194, + 250, 129, 2, 224, 40, 39, 211, 52, 244, 8, 249, 111, 247, 234, 2, 224, + 45, 45, 209, 222, 93, 226, 155, 93, 237, 235, 93, 222, 141, 239, 154, 93, + 222, 141, 230, 157, 93, 221, 199, 93, 221, 198, 93, 245, 104, 247, 24, + 16, 241, 136, 105, 214, 185, 93, 252, 62, 241, 78, 16, 219, 211, 246, 2, + 216, 40, 231, 175, 93, 220, 129, 222, 37, 225, 82, 222, 37, 220, 125, + 217, 94, 93, 247, 209, 217, 94, 93, 47, 221, 217, 209, 203, 109, 47, 221, + 217, 242, 157, 47, 221, 217, 229, 92, 109, 48, 221, 217, 209, 203, 109, + 48, 221, 217, 242, 157, 48, 221, 217, 229, 92, 109, 47, 49, 249, 134, + 209, 203, 247, 91, 47, 49, 249, 134, 242, 157, 47, 49, 249, 134, 229, 92, + 247, 91, 48, 49, 249, 134, 209, 203, 247, 91, 48, 49, 249, 134, 242, 157, + 48, 49, 249, 134, 229, 92, 247, 91, 47, 247, 26, 249, 134, 209, 203, 109, + 47, 247, 26, 249, 134, 226, 247, 221, 45, 47, 247, 26, 249, 134, 229, 92, + 109, 247, 26, 249, 134, 242, 157, 48, 247, 26, 249, 134, 209, 203, 109, + 48, 247, 26, 249, 134, 226, 247, 221, 45, 48, 247, 26, 249, 134, 229, 92, + 109, 233, 22, 242, 157, 194, 229, 206, 242, 157, 209, 203, 47, 222, 123, + 229, 92, 48, 247, 26, 249, 134, 217, 76, 209, 203, 48, 222, 123, 229, 92, + 47, 247, 26, 249, 134, 217, 76, 213, 158, 211, 101, 213, 158, 249, 153, + 211, 102, 49, 145, 249, 154, 49, 145, 249, 154, 49, 249, 134, 131, 211, + 102, 49, 145, 37, 16, 249, 153, 47, 79, 96, 229, 205, 48, 79, 96, 229, + 205, 194, 217, 110, 229, 204, 194, 217, 110, 229, 203, 194, 217, 110, + 229, 202, 194, 217, 110, 229, 201, 245, 219, 16, 147, 79, 23, 211, 102, + 218, 167, 245, 219, 16, 147, 79, 23, 249, 154, 218, 167, 245, 219, 16, + 147, 79, 2, 247, 233, 245, 219, 16, 147, 130, 23, 194, 2, 247, 233, 245, + 219, 16, 147, 120, 23, 194, 2, 247, 233, 245, 219, 16, 147, 79, 2, 211, + 51, 245, 219, 16, 147, 130, 23, 194, 2, 211, 51, 245, 219, 16, 147, 120, + 23, 194, 2, 211, 51, 245, 219, 16, 147, 79, 23, 207, 64, 245, 219, 16, + 147, 130, 23, 194, 2, 207, 64, 245, 219, 16, 147, 120, 23, 194, 2, 207, + 64, 245, 219, 16, 147, 130, 23, 238, 121, 245, 219, 16, 147, 120, 23, + 238, 121, 245, 219, 16, 147, 79, 23, 211, 102, 230, 46, 245, 219, 16, + 147, 79, 23, 249, 154, 230, 46, 49, 241, 148, 218, 229, 93, 243, 77, 93, + 79, 229, 206, 242, 157, 227, 57, 249, 122, 227, 57, 152, 131, 215, 143, + 227, 57, 215, 144, 131, 229, 125, 227, 57, 152, 131, 118, 215, 129, 227, + 57, 118, 215, 130, 131, 229, 125, 227, 57, 118, 215, 130, 232, 118, 227, + 57, 211, 33, 227, 57, 212, 72, 227, 57, 221, 138, 243, 121, 239, 222, + 241, 72, 211, 102, 221, 216, 249, 154, 221, 216, 211, 102, 247, 26, 145, + 249, 154, 247, 26, 145, 211, 102, 211, 93, 215, 204, 145, 249, 154, 211, + 93, 215, 204, 145, 59, 211, 65, 250, 17, 218, 149, 2, 247, 233, 213, 242, + 241, 186, 253, 25, 247, 23, 243, 62, 233, 7, 246, 2, 242, 161, 93, 60, + 218, 162, 50, 211, 51, 60, 230, 41, 50, 211, 51, 60, 209, 205, 50, 211, + 51, 60, 244, 7, 50, 211, 51, 60, 218, 162, 50, 211, 52, 2, 79, 134, 60, + 230, 41, 50, 211, 52, 2, 79, 134, 60, 218, 162, 211, 52, 2, 50, 79, 134, + 252, 176, 247, 195, 213, 248, 211, 176, 247, 195, 238, 57, 2, 241, 170, + 217, 149, 60, 227, 109, 230, 41, 211, 51, 60, 227, 109, 218, 162, 211, + 51, 60, 227, 109, 209, 205, 211, 51, 60, 227, 109, 244, 7, 211, 51, 50, + 79, 134, 60, 49, 33, 213, 251, 60, 247, 234, 33, 219, 42, 16, 33, 223, + 181, 16, 33, 214, 22, 73, 239, 66, 16, 33, 214, 22, 73, 212, 60, 16, 33, + 243, 34, 73, 212, 60, 16, 33, 243, 34, 73, 211, 69, 16, 33, 243, 21, 16, + 33, 253, 13, 16, 33, 250, 28, 16, 33, 250, 170, 16, 33, 194, 212, 203, + 16, 33, 229, 206, 242, 19, 16, 33, 79, 212, 203, 16, 33, 241, 136, 242, + 19, 16, 33, 248, 191, 218, 228, 16, 33, 215, 179, 222, 93, 16, 33, 215, + 179, 233, 68, 16, 33, 246, 73, 229, 196, 242, 217, 16, 33, 245, 199, 247, + 109, 102, 16, 33, 245, 199, 247, 109, 105, 16, 33, 245, 199, 247, 109, + 142, 16, 33, 245, 199, 247, 109, 139, 16, 33, 170, 253, 13, 16, 33, 213, + 36, 233, 131, 16, 33, 243, 34, 73, 211, 70, 249, 193, 16, 33, 248, 224, + 16, 33, 243, 34, 73, 227, 108, 16, 33, 213, 179, 16, 33, 242, 217, 16, + 33, 241, 236, 216, 39, 16, 33, 239, 221, 216, 39, 16, 33, 219, 43, 216, + 39, 16, 33, 209, 217, 216, 39, 16, 33, 214, 153, 16, 33, 245, 236, 249, + 196, 93, 222, 142, 249, 140, 16, 33, 225, 85, 16, 33, 245, 237, 241, 136, + 105, 16, 33, 213, 180, 241, 136, 105, 222, 215, 109, 222, 215, 248, 105, + 222, 215, 241, 139, 222, 215, 233, 2, 241, 139, 222, 215, 250, 25, 249, + 98, 222, 215, 249, 147, 211, 203, 222, 215, 249, 131, 250, 134, 237, 172, + 222, 215, 252, 127, 73, 248, 80, 222, 215, 246, 78, 222, 215, 247, 13, + 253, 17, 223, 179, 222, 215, 50, 250, 171, 39, 18, 102, 39, 18, 105, 39, + 18, 142, 39, 18, 139, 39, 18, 168, 39, 18, 184, 39, 18, 195, 39, 18, 193, + 39, 18, 200, 39, 43, 212, 98, 39, 43, 243, 58, 39, 43, 210, 126, 39, 43, + 212, 5, 39, 43, 241, 119, 39, 43, 241, 247, 39, 43, 215, 4, 39, 43, 216, + 20, 39, 43, 243, 85, 39, 43, 224, 192, 39, 43, 210, 123, 97, 18, 102, 97, + 18, 105, 97, 18, 142, 97, 18, 139, 97, 18, 168, 97, 18, 184, 97, 18, 195, + 97, 18, 193, 97, 18, 200, 97, 43, 212, 98, 97, 43, 243, 58, 97, 43, 210, + 126, 97, 43, 212, 5, 97, 43, 241, 119, 97, 43, 241, 247, 97, 43, 215, 4, + 97, 43, 216, 20, 97, 43, 243, 85, 97, 43, 224, 192, 97, 43, 210, 123, 18, + 119, 241, 82, 213, 251, 18, 118, 241, 82, 213, 251, 18, 129, 241, 82, + 213, 251, 18, 241, 125, 241, 82, 213, 251, 18, 241, 204, 241, 82, 213, + 251, 18, 215, 10, 241, 82, 213, 251, 18, 216, 23, 241, 82, 213, 251, 18, + 243, 88, 241, 82, 213, 251, 18, 224, 195, 241, 82, 213, 251, 43, 212, 99, + 241, 82, 213, 251, 43, 243, 59, 241, 82, 213, 251, 43, 210, 127, 241, 82, + 213, 251, 43, 212, 6, 241, 82, 213, 251, 43, 241, 120, 241, 82, 213, 251, + 43, 241, 248, 241, 82, 213, 251, 43, 215, 5, 241, 82, 213, 251, 43, 216, + 21, 241, 82, 213, 251, 43, 243, 86, 241, 82, 213, 251, 43, 224, 193, 241, + 82, 213, 251, 43, 210, 124, 241, 82, 213, 251, 97, 7, 5, 1, 62, 97, 7, 5, + 1, 251, 150, 97, 7, 5, 1, 249, 34, 97, 7, 5, 1, 246, 240, 97, 7, 5, 1, + 75, 97, 7, 5, 1, 242, 139, 97, 7, 5, 1, 241, 55, 97, 7, 5, 1, 239, 155, + 97, 7, 5, 1, 74, 97, 7, 5, 1, 232, 203, 97, 7, 5, 1, 232, 76, 97, 7, 5, + 1, 149, 97, 7, 5, 1, 229, 28, 97, 7, 5, 1, 226, 33, 97, 7, 5, 1, 76, 97, + 7, 5, 1, 222, 67, 97, 7, 5, 1, 220, 27, 97, 7, 5, 1, 137, 97, 7, 5, 1, + 182, 97, 7, 5, 1, 213, 10, 97, 7, 5, 1, 71, 97, 7, 5, 1, 209, 148, 97, 7, + 5, 1, 207, 129, 97, 7, 5, 1, 206, 195, 97, 7, 5, 1, 206, 123, 97, 7, 5, + 1, 205, 159, 39, 7, 6, 1, 62, 39, 7, 6, 1, 251, 150, 39, 7, 6, 1, 249, + 34, 39, 7, 6, 1, 246, 240, 39, 7, 6, 1, 75, 39, 7, 6, 1, 242, 139, 39, 7, + 6, 1, 241, 55, 39, 7, 6, 1, 239, 155, 39, 7, 6, 1, 74, 39, 7, 6, 1, 232, + 203, 39, 7, 6, 1, 232, 76, 39, 7, 6, 1, 149, 39, 7, 6, 1, 229, 28, 39, 7, + 6, 1, 226, 33, 39, 7, 6, 1, 76, 39, 7, 6, 1, 222, 67, 39, 7, 6, 1, 220, + 27, 39, 7, 6, 1, 137, 39, 7, 6, 1, 182, 39, 7, 6, 1, 213, 10, 39, 7, 6, + 1, 71, 39, 7, 6, 1, 209, 148, 39, 7, 6, 1, 207, 129, 39, 7, 6, 1, 206, + 195, 39, 7, 6, 1, 206, 123, 39, 7, 6, 1, 205, 159, 39, 7, 5, 1, 62, 39, + 7, 5, 1, 251, 150, 39, 7, 5, 1, 249, 34, 39, 7, 5, 1, 246, 240, 39, 7, 5, + 1, 75, 39, 7, 5, 1, 242, 139, 39, 7, 5, 1, 241, 55, 39, 7, 5, 1, 239, + 155, 39, 7, 5, 1, 74, 39, 7, 5, 1, 232, 203, 39, 7, 5, 1, 232, 76, 39, 7, + 5, 1, 149, 39, 7, 5, 1, 229, 28, 39, 7, 5, 1, 226, 33, 39, 7, 5, 1, 76, + 39, 7, 5, 1, 222, 67, 39, 7, 5, 1, 220, 27, 39, 7, 5, 1, 137, 39, 7, 5, + 1, 182, 39, 7, 5, 1, 213, 10, 39, 7, 5, 1, 71, 39, 7, 5, 1, 209, 148, 39, + 7, 5, 1, 207, 129, 39, 7, 5, 1, 206, 195, 39, 7, 5, 1, 206, 123, 39, 7, + 5, 1, 205, 159, 39, 18, 205, 85, 170, 39, 43, 243, 58, 170, 39, 43, 210, + 126, 170, 39, 43, 212, 5, 170, 39, 43, 241, 119, 170, 39, 43, 241, 247, + 170, 39, 43, 215, 4, 170, 39, 43, 216, 20, 170, 39, 43, 243, 85, 170, 39, + 43, 224, 192, 170, 39, 43, 210, 123, 50, 39, 18, 102, 50, 39, 18, 105, + 50, 39, 18, 142, 50, 39, 18, 139, 50, 39, 18, 168, 50, 39, 18, 184, 50, + 39, 18, 195, 50, 39, 18, 193, 50, 39, 18, 200, 50, 39, 43, 212, 98, 170, + 39, 18, 205, 85, 96, 110, 147, 238, 121, 96, 110, 77, 238, 121, 96, 110, + 147, 209, 22, 96, 110, 77, 209, 22, 96, 110, 147, 211, 36, 246, 79, 238, + 121, 96, 110, 77, 211, 36, 246, 79, 238, 121, 96, 110, 147, 211, 36, 246, + 79, 209, 22, 96, 110, 77, 211, 36, 246, 79, 209, 22, 96, 110, 147, 219, + 207, 246, 79, 238, 121, 96, 110, 77, 219, 207, 246, 79, 238, 121, 96, + 110, 147, 219, 207, 246, 79, 209, 22, 96, 110, 77, 219, 207, 246, 79, + 209, 22, 96, 110, 147, 130, 23, 218, 167, 96, 110, 130, 147, 23, 48, 239, + 54, 96, 110, 130, 77, 23, 48, 229, 223, 96, 110, 77, 130, 23, 218, 167, + 96, 110, 147, 130, 23, 230, 46, 96, 110, 130, 147, 23, 47, 239, 54, 96, + 110, 130, 77, 23, 47, 229, 223, 96, 110, 77, 130, 23, 230, 46, 96, 110, + 147, 120, 23, 218, 167, 96, 110, 120, 147, 23, 48, 239, 54, 96, 110, 120, + 77, 23, 48, 229, 223, 96, 110, 77, 120, 23, 218, 167, 96, 110, 147, 120, + 23, 230, 46, 96, 110, 120, 147, 23, 47, 239, 54, 96, 110, 120, 77, 23, + 47, 229, 223, 96, 110, 77, 120, 23, 230, 46, 96, 110, 147, 79, 23, 218, + 167, 96, 110, 79, 147, 23, 48, 239, 54, 96, 110, 120, 77, 23, 48, 130, + 229, 223, 96, 110, 130, 77, 23, 48, 120, 229, 223, 96, 110, 79, 77, 23, + 48, 229, 223, 96, 110, 130, 147, 23, 48, 120, 239, 54, 96, 110, 120, 147, + 23, 48, 130, 239, 54, 96, 110, 77, 79, 23, 218, 167, 96, 110, 147, 79, + 23, 230, 46, 96, 110, 79, 147, 23, 47, 239, 54, 96, 110, 120, 77, 23, 47, + 130, 229, 223, 96, 110, 130, 77, 23, 47, 120, 229, 223, 96, 110, 79, 77, + 23, 47, 229, 223, 96, 110, 130, 147, 23, 47, 120, 239, 54, 96, 110, 120, + 147, 23, 47, 130, 239, 54, 96, 110, 77, 79, 23, 230, 46, 96, 110, 147, + 130, 23, 238, 121, 96, 110, 47, 77, 23, 48, 130, 229, 223, 96, 110, 48, + 77, 23, 47, 130, 229, 223, 96, 110, 130, 147, 23, 194, 239, 54, 96, 110, + 130, 77, 23, 194, 229, 223, 96, 110, 48, 147, 23, 47, 130, 239, 54, 96, + 110, 47, 147, 23, 48, 130, 239, 54, 96, 110, 77, 130, 23, 238, 121, 96, + 110, 147, 120, 23, 238, 121, 96, 110, 47, 77, 23, 48, 120, 229, 223, 96, + 110, 48, 77, 23, 47, 120, 229, 223, 96, 110, 120, 147, 23, 194, 239, 54, + 96, 110, 120, 77, 23, 194, 229, 223, 96, 110, 48, 147, 23, 47, 120, 239, + 54, 96, 110, 47, 147, 23, 48, 120, 239, 54, 96, 110, 77, 120, 23, 238, + 121, 96, 110, 147, 79, 23, 238, 121, 96, 110, 47, 77, 23, 48, 79, 229, + 223, 96, 110, 48, 77, 23, 47, 79, 229, 223, 96, 110, 79, 147, 23, 194, + 239, 54, 96, 110, 120, 77, 23, 130, 194, 229, 223, 96, 110, 130, 77, 23, + 120, 194, 229, 223, 96, 110, 79, 77, 23, 194, 229, 223, 96, 110, 47, 120, + 77, 23, 48, 130, 229, 223, 96, 110, 48, 120, 77, 23, 47, 130, 229, 223, + 96, 110, 47, 130, 77, 23, 48, 120, 229, 223, 96, 110, 48, 130, 77, 23, + 47, 120, 229, 223, 96, 110, 130, 147, 23, 120, 194, 239, 54, 96, 110, + 120, 147, 23, 130, 194, 239, 54, 96, 110, 48, 147, 23, 47, 79, 239, 54, + 96, 110, 47, 147, 23, 48, 79, 239, 54, 96, 110, 77, 79, 23, 238, 121, 96, + 110, 147, 50, 246, 79, 238, 121, 96, 110, 77, 50, 246, 79, 238, 121, 96, + 110, 147, 50, 246, 79, 209, 22, 96, 110, 77, 50, 246, 79, 209, 22, 96, + 110, 50, 238, 121, 96, 110, 50, 209, 22, 96, 110, 130, 215, 41, 23, 48, + 244, 16, 96, 110, 130, 50, 23, 48, 215, 40, 96, 110, 50, 130, 23, 218, + 167, 96, 110, 130, 215, 41, 23, 47, 244, 16, 96, 110, 130, 50, 23, 47, + 215, 40, 96, 110, 50, 130, 23, 230, 46, 96, 110, 120, 215, 41, 23, 48, + 244, 16, 96, 110, 120, 50, 23, 48, 215, 40, 96, 110, 50, 120, 23, 218, + 167, 96, 110, 120, 215, 41, 23, 47, 244, 16, 96, 110, 120, 50, 23, 47, + 215, 40, 96, 110, 50, 120, 23, 230, 46, 96, 110, 79, 215, 41, 23, 48, + 244, 16, 96, 110, 79, 50, 23, 48, 215, 40, 96, 110, 50, 79, 23, 218, 167, + 96, 110, 79, 215, 41, 23, 47, 244, 16, 96, 110, 79, 50, 23, 47, 215, 40, + 96, 110, 50, 79, 23, 230, 46, 96, 110, 130, 215, 41, 23, 194, 244, 16, + 96, 110, 130, 50, 23, 194, 215, 40, 96, 110, 50, 130, 23, 238, 121, 96, + 110, 120, 215, 41, 23, 194, 244, 16, 96, 110, 120, 50, 23, 194, 215, 40, + 96, 110, 50, 120, 23, 238, 121, 96, 110, 79, 215, 41, 23, 194, 244, 16, + 96, 110, 79, 50, 23, 194, 215, 40, 96, 110, 50, 79, 23, 238, 121, 96, + 110, 147, 252, 22, 130, 23, 218, 167, 96, 110, 147, 252, 22, 130, 23, + 230, 46, 96, 110, 147, 252, 22, 120, 23, 230, 46, 96, 110, 147, 252, 22, + 120, 23, 218, 167, 96, 110, 147, 245, 163, 209, 203, 48, 211, 130, 229, + 92, 230, 46, 96, 110, 147, 245, 163, 209, 203, 47, 211, 130, 229, 92, + 218, 167, 96, 110, 147, 245, 163, 247, 59, 96, 110, 147, 230, 46, 96, + 110, 147, 209, 206, 96, 110, 147, 218, 167, 96, 110, 147, 244, 8, 96, + 110, 77, 230, 46, 96, 110, 77, 209, 206, 96, 110, 77, 218, 167, 96, 110, + 77, 244, 8, 96, 110, 147, 47, 23, 77, 218, 167, 96, 110, 147, 120, 23, + 77, 244, 8, 96, 110, 77, 47, 23, 147, 218, 167, 96, 110, 77, 120, 23, + 147, 244, 8, 209, 203, 160, 249, 193, 229, 92, 119, 243, 84, 249, 193, + 229, 92, 119, 219, 205, 249, 193, 229, 92, 129, 243, 82, 249, 193, 229, + 92, 160, 249, 193, 229, 92, 241, 204, 243, 82, 249, 193, 229, 92, 129, + 219, 203, 249, 193, 229, 92, 216, 23, 243, 82, 249, 193, 241, 82, 249, + 193, 47, 216, 23, 243, 82, 249, 193, 47, 129, 219, 203, 249, 193, 47, + 241, 204, 243, 82, 249, 193, 47, 160, 249, 193, 47, 129, 243, 82, 249, + 193, 47, 119, 219, 205, 249, 193, 47, 119, 243, 84, 249, 193, 48, 160, + 249, 193, 147, 215, 248, 227, 109, 215, 248, 246, 84, 215, 248, 209, 203, + 119, 243, 84, 249, 193, 48, 119, 243, 84, 249, 193, 219, 209, 229, 92, + 230, 46, 219, 209, 229, 92, 218, 167, 219, 209, 209, 203, 230, 46, 219, + 209, 209, 203, 47, 23, 229, 92, 47, 23, 229, 92, 218, 167, 219, 209, 209, + 203, 47, 23, 229, 92, 218, 167, 219, 209, 209, 203, 47, 23, 209, 203, 48, + 23, 229, 92, 230, 46, 219, 209, 209, 203, 47, 23, 209, 203, 48, 23, 229, + 92, 218, 167, 219, 209, 209, 203, 218, 167, 219, 209, 209, 203, 48, 23, + 229, 92, 230, 46, 219, 209, 209, 203, 48, 23, 229, 92, 47, 23, 229, 92, + 218, 167, 60, 214, 107, 59, 214, 107, 59, 49, 2, 218, 93, 247, 90, 59, + 49, 247, 119, 60, 5, 214, 107, 49, 2, 194, 241, 234, 49, 2, 79, 241, 234, + 49, 2, 222, 108, 247, 55, 241, 234, 49, 2, 209, 203, 47, 211, 130, 229, + 92, 48, 241, 234, 49, 2, 209, 203, 48, 211, 130, 229, 92, 47, 241, 234, + 49, 2, 245, 163, 247, 55, 241, 234, 60, 5, 214, 107, 59, 5, 214, 107, 60, + 219, 37, 59, 219, 37, 60, 79, 219, 37, 59, 79, 219, 37, 60, 221, 220, 59, + 221, 220, 60, 209, 205, 211, 51, 59, 209, 205, 211, 51, 60, 209, 205, 5, + 211, 51, 59, 209, 205, 5, 211, 51, 60, 218, 162, 211, 51, 59, 218, 162, + 211, 51, 60, 218, 162, 5, 211, 51, 59, 218, 162, 5, 211, 51, 60, 218, + 162, 220, 202, 59, 218, 162, 220, 202, 60, 244, 7, 211, 51, 59, 244, 7, + 211, 51, 60, 244, 7, 5, 211, 51, 59, 244, 7, 5, 211, 51, 60, 230, 41, + 211, 51, 59, 230, 41, 211, 51, 60, 230, 41, 5, 211, 51, 59, 230, 41, 5, + 211, 51, 60, 230, 41, 220, 202, 59, 230, 41, 220, 202, 60, 245, 156, 59, + 245, 156, 59, 245, 157, 247, 119, 60, 5, 245, 156, 241, 212, 229, 88, 59, + 247, 233, 244, 21, 247, 233, 247, 234, 2, 79, 241, 234, 249, 81, 60, 247, + 233, 247, 234, 2, 47, 160, 249, 202, 247, 234, 2, 48, 160, 249, 202, 247, + 234, 2, 229, 92, 160, 249, 202, 247, 234, 2, 209, 203, 160, 249, 202, + 247, 234, 2, 209, 203, 48, 219, 209, 249, 202, 247, 234, 2, 252, 157, + 249, 57, 209, 203, 47, 219, 209, 249, 202, 47, 160, 60, 247, 233, 48, + 160, 60, 247, 233, 233, 3, 249, 85, 233, 3, 59, 247, 233, 209, 203, 160, + 233, 3, 59, 247, 233, 229, 92, 160, 233, 3, 59, 247, 233, 209, 203, 47, + 219, 209, 247, 230, 252, 21, 209, 203, 48, 219, 209, 247, 230, 252, 21, + 229, 92, 48, 219, 209, 247, 230, 252, 21, 229, 92, 47, 219, 209, 247, + 230, 252, 21, 209, 203, 160, 247, 233, 229, 92, 160, 247, 233, 60, 229, + 92, 48, 211, 51, 60, 229, 92, 47, 211, 51, 60, 209, 203, 47, 211, 51, 60, + 209, 203, 48, 211, 51, 59, 249, 85, 49, 2, 47, 160, 249, 202, 49, 2, 48, + 160, 249, 202, 49, 2, 209, 203, 47, 245, 163, 160, 249, 202, 49, 2, 229, + 92, 48, 245, 163, 160, 249, 202, 59, 49, 2, 79, 249, 213, 229, 205, 59, + 209, 205, 211, 52, 2, 245, 23, 209, 205, 211, 52, 2, 47, 160, 249, 202, + 209, 205, 211, 52, 2, 48, 160, 249, 202, 230, 86, 247, 233, 59, 49, 2, + 209, 203, 47, 219, 208, 59, 49, 2, 229, 92, 47, 219, 208, 59, 49, 2, 229, + 92, 48, 219, 208, 59, 49, 2, 209, 203, 48, 219, 208, 59, 247, 234, 2, + 209, 203, 47, 219, 208, 59, 247, 234, 2, 229, 92, 47, 219, 208, 59, 247, + 234, 2, 229, 92, 48, 219, 208, 59, 247, 234, 2, 209, 203, 48, 219, 208, + 209, 203, 47, 211, 51, 209, 203, 48, 211, 51, 229, 92, 47, 211, 51, 59, + 227, 109, 214, 107, 60, 227, 109, 214, 107, 59, 227, 109, 5, 214, 107, + 60, 227, 109, 5, 214, 107, 229, 92, 48, 211, 51, 60, 213, 155, 2, 219, + 55, 247, 183, 209, 238, 214, 195, 247, 158, 60, 214, 26, 59, 214, 26, + 229, 220, 211, 226, 213, 154, 251, 228, 224, 64, 245, 210, 224, 64, 247, + 128, 222, 128, 60, 212, 107, 59, 212, 107, 250, 146, 249, 140, 250, 146, + 96, 2, 248, 80, 250, 146, 96, 2, 206, 195, 217, 162, 209, 239, 2, 219, + 84, 243, 243, 238, 63, 250, 4, 59, 215, 153, 221, 45, 60, 215, 153, 221, + 45, 215, 239, 218, 224, 218, 97, 241, 176, 239, 61, 249, 85, 60, 47, 220, + 201, 233, 53, 60, 48, 220, 201, 233, 53, 59, 47, 220, 201, 233, 53, 59, + 120, 220, 201, 233, 53, 59, 48, 220, 201, 233, 53, 59, 130, 220, 201, + 233, 53, 214, 241, 23, 247, 58, 248, 177, 53, 219, 96, 53, 249, 220, 53, + 248, 248, 252, 101, 222, 109, 247, 59, 248, 59, 218, 210, 247, 60, 73, + 229, 106, 247, 60, 73, 232, 172, 214, 27, 23, 247, 65, 242, 42, 93, 252, + 254, 215, 241, 239, 115, 23, 215, 77, 221, 173, 93, 206, 1, 206, 75, 211, + 41, 33, 239, 56, 211, 41, 33, 230, 111, 211, 41, 33, 241, 219, 211, 41, + 33, 211, 227, 211, 41, 33, 207, 9, 211, 41, 33, 207, 69, 211, 41, 33, + 226, 128, 211, 41, 33, 243, 120, 207, 27, 73, 245, 184, 59, 241, 94, 242, + 67, 59, 214, 210, 242, 67, 60, 214, 210, 242, 67, 59, 213, 155, 2, 219, + 55, 241, 215, 219, 205, 226, 144, 230, 81, 219, 205, 226, 144, 227, 78, + 242, 11, 53, 243, 120, 227, 226, 53, 232, 91, 217, 126, 209, 189, 225, + 95, 220, 215, 252, 7, 212, 149, 240, 158, 248, 222, 230, 15, 208, 186, + 229, 232, 217, 96, 217, 183, 248, 208, 252, 38, 220, 250, 59, 248, 65, + 231, 106, 59, 248, 65, 219, 197, 59, 248, 65, 218, 105, 59, 248, 65, 249, + 212, 59, 248, 65, 231, 56, 59, 248, 65, 221, 185, 60, 248, 65, 231, 106, + 60, 248, 65, 219, 197, 60, 248, 65, 218, 105, 60, 248, 65, 249, 212, 60, + 248, 65, 231, 56, 60, 248, 65, 221, 185, 60, 214, 151, 213, 167, 59, 239, + 61, 213, 167, 59, 245, 157, 213, 167, 60, 247, 181, 213, 167, 59, 214, + 151, 213, 167, 60, 239, 61, 213, 167, 60, 245, 157, 213, 167, 59, 247, + 181, 213, 167, 238, 63, 214, 112, 219, 205, 224, 37, 243, 84, 224, 37, + 250, 58, 243, 84, 224, 32, 250, 58, 215, 3, 224, 32, 226, 65, 241, 188, + 53, 226, 65, 225, 192, 53, 226, 65, 215, 228, 53, 207, 36, 213, 30, 247, + 59, 243, 117, 213, 30, 247, 59, 209, 214, 219, 33, 93, 219, 33, 16, 33, + 210, 94, 220, 232, 219, 33, 16, 33, 210, 93, 220, 232, 219, 33, 16, 33, + 210, 92, 220, 232, 219, 33, 16, 33, 210, 91, 220, 232, 219, 33, 16, 33, + 210, 90, 220, 232, 219, 33, 16, 33, 210, 89, 220, 232, 219, 33, 16, 33, + 210, 88, 220, 232, 219, 33, 16, 33, 240, 156, 227, 169, 60, 209, 214, + 219, 33, 93, 219, 34, 221, 235, 93, 221, 208, 221, 235, 93, 221, 123, + 221, 235, 53, 207, 25, 93, 245, 149, 242, 66, 245, 149, 242, 65, 245, + 149, 242, 64, 245, 149, 242, 63, 245, 149, 242, 62, 245, 149, 242, 61, + 59, 247, 234, 2, 67, 218, 167, 59, 247, 234, 2, 118, 245, 21, 60, 247, + 234, 2, 59, 67, 218, 167, 60, 247, 234, 2, 118, 59, 245, 21, 226, 160, + 33, 206, 75, 226, 160, 33, 206, 0, 245, 131, 33, 239, 231, 206, 75, 245, + 131, 33, 230, 8, 206, 0, 245, 131, 33, 230, 8, 206, 75, 245, 131, 33, + 239, 231, 206, 0, 59, 241, 196, 60, 241, 196, 239, 115, 23, 221, 49, 252, + 119, 247, 57, 213, 94, 214, 35, 73, 252, 231, 217, 111, 252, 171, 241, + 172, 240, 167, 214, 35, 73, 239, 34, 251, 192, 93, 241, 184, 222, 89, 59, + 214, 26, 129, 229, 200, 247, 106, 218, 167, 129, 229, 200, 247, 106, 230, + 46, 207, 80, 53, 127, 208, 164, 53, 244, 13, 242, 11, 53, 244, 13, 227, + 226, 53, 233, 13, 242, 11, 23, 227, 226, 53, 227, 226, 23, 242, 11, 53, + 227, 226, 2, 213, 225, 53, 227, 226, 2, 213, 225, 23, 227, 226, 23, 242, + 11, 53, 79, 227, 226, 2, 213, 225, 53, 194, 227, 226, 2, 213, 225, 53, + 227, 109, 59, 247, 233, 227, 109, 60, 247, 233, 227, 109, 5, 59, 247, + 233, 227, 185, 93, 245, 73, 93, 209, 212, 221, 207, 93, 247, 167, 241, + 77, 209, 185, 225, 89, 248, 114, 222, 21, 232, 97, 208, 224, 248, 39, 60, + 226, 145, 229, 217, 216, 13, 216, 49, 219, 187, 216, 31, 214, 190, 250, + 149, 250, 115, 98, 231, 174, 59, 243, 252, 227, 221, 59, 243, 252, 231, + 106, 60, 243, 252, 227, 221, 60, 243, 252, 231, 106, 214, 196, 206, 253, + 214, 199, 213, 155, 250, 35, 247, 183, 219, 83, 60, 214, 195, 211, 228, + 247, 184, 23, 219, 83, 201, 59, 215, 153, 221, 45, 201, 60, 215, 153, + 221, 45, 59, 245, 157, 233, 69, 214, 107, 247, 54, 230, 93, 245, 100, + 248, 204, 222, 131, 221, 49, 248, 205, 214, 226, 239, 44, 2, 59, 247, 59, + 39, 247, 54, 230, 93, 248, 106, 224, 68, 243, 13, 252, 141, 222, 160, 47, + 207, 55, 211, 77, 60, 210, 105, 47, 207, 55, 211, 77, 59, 210, 105, 47, + 207, 55, 211, 77, 60, 47, 230, 94, 227, 77, 59, 47, 230, 94, 227, 77, + 243, 248, 214, 218, 53, 77, 59, 244, 7, 211, 51, 47, 247, 192, 243, 13, + 98, 217, 162, 242, 50, 245, 163, 233, 69, 59, 247, 234, 233, 69, 60, 214, + 107, 60, 211, 17, 218, 235, 47, 243, 12, 218, 235, 47, 243, 11, 251, 204, + 16, 33, 209, 189, 77, 247, 234, 2, 213, 225, 23, 118, 177, 52, 221, 139, + 218, 164, 233, 15, 221, 139, 230, 43, 233, 15, 221, 139, 233, 2, 221, + 139, 60, 247, 60, 222, 166, 215, 180, 215, 168, 215, 120, 248, 6, 248, + 185, 238, 243, 215, 11, 240, 168, 206, 253, 238, 39, 240, 168, 2, 239, + 104, 227, 206, 16, 33, 229, 222, 226, 128, 209, 239, 222, 166, 239, 222, + 241, 126, 241, 197, 233, 69, 238, 140, 242, 2, 217, 178, 49, 241, 125, + 247, 90, 214, 244, 237, 182, 214, 247, 221, 115, 2, 250, 149, 212, 92, + 232, 189, 250, 134, 93, 239, 64, 239, 233, 93, 241, 85, 220, 73, 247, 30, + 222, 166, 60, 214, 107, 59, 241, 197, 2, 194, 226, 247, 60, 213, 226, 60, + 217, 188, 217, 98, 209, 203, 249, 197, 217, 98, 60, 217, 98, 229, 92, + 249, 197, 217, 98, 59, 217, 98, 59, 77, 248, 81, 83, 212, 108, 229, 142, + 53, 212, 165, 243, 247, 252, 194, 243, 8, 219, 81, 241, 208, 219, 81, + 239, 107, 208, 212, 239, 107, 206, 219, 239, 107, 229, 92, 48, 221, 149, + 221, 149, 209, 203, 48, 221, 149, 59, 224, 227, 60, 224, 227, 248, 81, + 83, 77, 248, 81, 83, 226, 94, 206, 195, 77, 226, 94, 206, 195, 250, 146, + 206, 195, 77, 250, 146, 206, 195, 222, 89, 27, 247, 59, 77, 27, 247, 59, + 222, 142, 248, 129, 247, 59, 77, 222, 142, 248, 129, 247, 59, 7, 247, 59, + 215, 246, 59, 7, 247, 59, 222, 89, 7, 247, 59, 227, 223, 247, 59, 214, + 27, 73, 246, 71, 241, 125, 212, 124, 251, 209, 241, 125, 250, 147, 251, + 209, 77, 241, 125, 250, 147, 251, 209, 241, 125, 247, 179, 251, 209, 60, + 241, 125, 220, 203, 214, 26, 59, 241, 125, 220, 203, 214, 26, 214, 146, + 213, 233, 222, 89, 59, 214, 26, 39, 59, 214, 26, 222, 142, 248, 129, 60, + 214, 26, 60, 248, 129, 59, 214, 26, 222, 89, 60, 214, 26, 77, 222, 89, + 60, 214, 26, 221, 4, 214, 26, 215, 246, 59, 214, 26, 77, 251, 209, 222, + 142, 248, 129, 251, 209, 243, 88, 214, 119, 251, 209, 243, 88, 220, 203, + 60, 214, 26, 243, 88, 220, 203, 221, 4, 214, 26, 215, 10, 220, 203, 60, + 214, 26, 243, 88, 220, 203, 219, 35, 60, 214, 26, 77, 243, 88, 220, 203, + 219, 35, 60, 214, 26, 210, 127, 220, 203, 60, 214, 26, 215, 5, 220, 203, + 251, 209, 212, 124, 251, 209, 222, 142, 248, 129, 212, 124, 251, 209, 77, + 212, 124, 251, 209, 215, 10, 221, 103, 60, 23, 59, 241, 175, 60, 241, + 175, 59, 241, 175, 243, 88, 221, 103, 222, 89, 60, 241, 175, 39, 222, + 142, 248, 129, 243, 88, 220, 203, 214, 26, 77, 212, 124, 221, 4, 251, + 209, 214, 197, 211, 197, 211, 44, 214, 197, 77, 248, 62, 214, 197, 214, + 148, 77, 214, 148, 250, 147, 251, 209, 243, 88, 212, 124, 220, 104, 251, + 209, 77, 243, 88, 212, 124, 220, 104, 251, 209, 247, 60, 83, 215, 246, + 59, 247, 233, 170, 98, 247, 60, 83, 229, 92, 48, 243, 245, 59, 214, 107, + 209, 203, 48, 243, 245, 59, 214, 107, 229, 92, 48, 215, 246, 59, 214, + 107, 209, 203, 48, 215, 246, 59, 214, 107, 60, 219, 196, 141, 222, 111, + 59, 219, 196, 141, 222, 111, 59, 242, 168, 141, 222, 111, 60, 245, 157, + 226, 202, 59, 206, 195, 77, 242, 168, 141, 93, 147, 79, 134, 227, 109, + 79, 134, 77, 79, 134, 77, 215, 41, 201, 247, 156, 219, 180, 141, 222, + 111, 77, 215, 41, 247, 156, 219, 180, 141, 222, 111, 77, 50, 201, 247, + 156, 219, 180, 141, 222, 111, 77, 50, 247, 156, 219, 180, 141, 222, 111, + 77, 114, 215, 41, 247, 156, 219, 180, 141, 222, 111, 77, 114, 50, 247, + 156, 219, 180, 141, 222, 111, 247, 18, 214, 10, 221, 229, 3, 222, 111, + 77, 242, 168, 141, 222, 111, 77, 239, 61, 242, 168, 141, 222, 111, 77, + 60, 239, 60, 218, 97, 77, 60, 239, 61, 249, 85, 241, 176, 239, 60, 218, + 97, 241, 176, 239, 61, 249, 85, 227, 109, 47, 221, 217, 222, 111, 227, + 109, 48, 221, 217, 222, 111, 227, 109, 241, 185, 47, 221, 217, 222, 111, + 227, 109, 241, 185, 48, 221, 217, 222, 111, 227, 109, 230, 41, 252, 109, + 249, 134, 222, 111, 227, 109, 218, 162, 252, 109, 249, 134, 222, 111, 77, + 230, 41, 252, 109, 219, 180, 141, 222, 111, 77, 218, 162, 252, 109, 219, + 180, 141, 222, 111, 77, 230, 41, 252, 109, 249, 134, 222, 111, 77, 218, + 162, 252, 109, 249, 134, 222, 111, 147, 47, 211, 93, 215, 204, 249, 134, + 222, 111, 147, 48, 211, 93, 215, 204, 249, 134, 222, 111, 227, 109, 47, + 247, 26, 249, 134, 222, 111, 227, 109, 48, 247, 26, 249, 134, 222, 111, + 245, 111, 170, 39, 18, 102, 245, 111, 170, 39, 18, 105, 245, 111, 170, + 39, 18, 142, 245, 111, 170, 39, 18, 139, 245, 111, 170, 39, 18, 168, 245, + 111, 170, 39, 18, 184, 245, 111, 170, 39, 18, 195, 245, 111, 170, 39, 18, + 193, 245, 111, 170, 39, 18, 200, 245, 111, 170, 39, 43, 212, 98, 245, + 111, 39, 38, 18, 102, 245, 111, 39, 38, 18, 105, 245, 111, 39, 38, 18, + 142, 245, 111, 39, 38, 18, 139, 245, 111, 39, 38, 18, 168, 245, 111, 39, + 38, 18, 184, 245, 111, 39, 38, 18, 195, 245, 111, 39, 38, 18, 193, 245, + 111, 39, 38, 18, 200, 245, 111, 39, 38, 43, 212, 98, 245, 111, 170, 39, + 38, 18, 102, 245, 111, 170, 39, 38, 18, 105, 245, 111, 170, 39, 38, 18, + 142, 245, 111, 170, 39, 38, 18, 139, 245, 111, 170, 39, 38, 18, 168, 245, + 111, 170, 39, 38, 18, 184, 245, 111, 170, 39, 38, 18, 195, 245, 111, 170, + 39, 38, 18, 193, 245, 111, 170, 39, 38, 18, 200, 245, 111, 170, 39, 38, + 43, 212, 98, 77, 207, 16, 86, 45, 77, 101, 53, 77, 226, 202, 53, 77, 245, + 75, 53, 77, 188, 243, 117, 45, 77, 86, 45, 77, 143, 243, 117, 45, 244, 1, + 220, 205, 86, 45, 77, 218, 94, 86, 45, 211, 50, 86, 45, 77, 211, 50, 86, + 45, 246, 77, 211, 50, 86, 45, 77, 246, 77, 211, 50, 86, 45, 60, 86, 45, + 211, 238, 211, 100, 86, 251, 243, 211, 238, 249, 152, 86, 251, 243, 60, + 86, 251, 243, 77, 60, 247, 18, 173, 23, 86, 45, 77, 60, 247, 18, 167, 23, + 86, 45, 214, 104, 60, 86, 45, 77, 247, 139, 60, 86, 45, 218, 161, 59, 86, + 45, 230, 40, 59, 86, 45, 250, 175, 215, 246, 59, 86, 45, 241, 96, 215, + 246, 59, 86, 45, 77, 229, 92, 218, 160, 59, 86, 45, 77, 209, 203, 218, + 160, 59, 86, 45, 224, 39, 229, 92, 218, 160, 59, 86, 45, 247, 26, 229, + 111, 224, 39, 209, 203, 218, 160, 59, 86, 45, 39, 77, 59, 86, 45, 207, + 22, 86, 45, 249, 201, 188, 243, 117, 45, 249, 201, 86, 45, 249, 201, 143, + 243, 117, 45, 77, 249, 201, 188, 243, 117, 45, 77, 249, 201, 86, 45, 77, + 249, 201, 143, 243, 117, 45, 212, 126, 86, 45, 77, 212, 125, 86, 45, 207, + 46, 86, 45, 77, 207, 46, 86, 45, 222, 137, 86, 45, 50, 247, 26, 229, 111, + 129, 245, 121, 252, 108, 59, 211, 52, 247, 119, 5, 59, 211, 51, 221, 118, + 222, 142, 213, 181, 222, 142, 213, 137, 47, 218, 0, 250, 164, 245, 233, + 48, 218, 0, 250, 164, 245, 233, 222, 123, 2, 67, 233, 25, 218, 225, 214, + 181, 220, 138, 213, 181, 213, 138, 220, 138, 214, 180, 79, 250, 129, 2, + 194, 91, 11, 218, 142, 245, 162, 152, 245, 74, 11, 242, 50, 245, 162, 98, + 229, 134, 252, 117, 98, 229, 134, 222, 122, 59, 245, 157, 2, 248, 127, + 245, 23, 23, 2, 245, 23, 243, 61, 73, 222, 135, 209, 196, 229, 92, 48, + 247, 92, 2, 245, 23, 209, 203, 47, 247, 92, 2, 245, 23, 47, 222, 91, 232, + 120, 48, 222, 91, 232, 120, 241, 82, 222, 91, 232, 120, 230, 86, 120, + 212, 201, 230, 86, 130, 212, 201, 47, 23, 48, 50, 210, 143, 47, 23, 48, + 212, 201, 47, 226, 97, 152, 48, 212, 201, 152, 47, 212, 201, 120, 212, + 202, 2, 247, 234, 52, 229, 89, 245, 80, 249, 46, 194, 218, 42, 59, 247, + 138, 245, 156, 59, 247, 138, 245, 157, 2, 92, 211, 207, 59, 247, 138, + 245, 157, 2, 86, 211, 207, 59, 49, 2, 92, 211, 207, 59, 49, 2, 86, 211, + 207, 11, 47, 59, 49, 145, 11, 48, 59, 49, 145, 11, 47, 252, 109, 145, 11, + 48, 252, 109, 145, 11, 47, 50, 252, 109, 145, 11, 48, 50, 252, 109, 145, + 11, 47, 59, 211, 93, 215, 204, 145, 11, 48, 59, 211, 93, 215, 204, 145, + 11, 47, 241, 185, 221, 216, 11, 48, 241, 185, 221, 216, 167, 219, 207, + 45, 173, 219, 207, 45, 252, 87, 240, 206, 247, 234, 45, 247, 194, 240, + 206, 247, 234, 45, 48, 51, 2, 39, 220, 218, 152, 92, 45, 152, 86, 45, + 152, 47, 48, 45, 152, 92, 50, 45, 152, 86, 50, 45, 152, 47, 48, 50, 45, + 152, 92, 51, 241, 98, 134, 152, 86, 51, 241, 98, 134, 152, 92, 50, 51, + 241, 98, 134, 152, 86, 50, 51, 241, 98, 134, 152, 86, 214, 103, 45, 56, + 57, 249, 195, 56, 57, 245, 20, 56, 57, 244, 148, 56, 57, 245, 19, 56, 57, + 244, 84, 56, 57, 244, 211, 56, 57, 244, 147, 56, 57, 245, 18, 56, 57, + 244, 52, 56, 57, 244, 179, 56, 57, 244, 115, 56, 57, 244, 242, 56, 57, + 244, 83, 56, 57, 244, 210, 56, 57, 244, 146, 56, 57, 245, 17, 56, 57, + 244, 36, 56, 57, 244, 163, 56, 57, 244, 99, 56, 57, 244, 226, 56, 57, + 244, 67, 56, 57, 244, 194, 56, 57, 244, 130, 56, 57, 245, 1, 56, 57, 244, + 51, 56, 57, 244, 178, 56, 57, 244, 114, 56, 57, 244, 241, 56, 57, 244, + 82, 56, 57, 244, 209, 56, 57, 244, 145, 56, 57, 245, 16, 56, 57, 244, 28, + 56, 57, 244, 155, 56, 57, 244, 91, 56, 57, 244, 218, 56, 57, 244, 59, 56, + 57, 244, 186, 56, 57, 244, 122, 56, 57, 244, 249, 56, 57, 244, 43, 56, + 57, 244, 170, 56, 57, 244, 106, 56, 57, 244, 233, 56, 57, 244, 74, 56, + 57, 244, 201, 56, 57, 244, 137, 56, 57, 245, 8, 56, 57, 244, 35, 56, 57, + 244, 162, 56, 57, 244, 98, 56, 57, 244, 225, 56, 57, 244, 66, 56, 57, + 244, 193, 56, 57, 244, 129, 56, 57, 245, 0, 56, 57, 244, 50, 56, 57, 244, + 177, 56, 57, 244, 113, 56, 57, 244, 240, 56, 57, 244, 81, 56, 57, 244, + 208, 56, 57, 244, 144, 56, 57, 245, 15, 56, 57, 244, 24, 56, 57, 244, + 151, 56, 57, 244, 87, 56, 57, 244, 214, 56, 57, 244, 55, 56, 57, 244, + 182, 56, 57, 244, 118, 56, 57, 244, 245, 56, 57, 244, 39, 56, 57, 244, + 166, 56, 57, 244, 102, 56, 57, 244, 229, 56, 57, 244, 70, 56, 57, 244, + 197, 56, 57, 244, 133, 56, 57, 245, 4, 56, 57, 244, 31, 56, 57, 244, 158, + 56, 57, 244, 94, 56, 57, 244, 221, 56, 57, 244, 62, 56, 57, 244, 189, 56, + 57, 244, 125, 56, 57, 244, 252, 56, 57, 244, 46, 56, 57, 244, 173, 56, + 57, 244, 109, 56, 57, 244, 236, 56, 57, 244, 77, 56, 57, 244, 204, 56, + 57, 244, 140, 56, 57, 245, 11, 56, 57, 244, 27, 56, 57, 244, 154, 56, 57, + 244, 90, 56, 57, 244, 217, 56, 57, 244, 58, 56, 57, 244, 185, 56, 57, + 244, 121, 56, 57, 244, 248, 56, 57, 244, 42, 56, 57, 244, 169, 56, 57, + 244, 105, 56, 57, 244, 232, 56, 57, 244, 73, 56, 57, 244, 200, 56, 57, + 244, 136, 56, 57, 245, 7, 56, 57, 244, 34, 56, 57, 244, 161, 56, 57, 244, + 97, 56, 57, 244, 224, 56, 57, 244, 65, 56, 57, 244, 192, 56, 57, 244, + 128, 56, 57, 244, 255, 56, 57, 244, 49, 56, 57, 244, 176, 56, 57, 244, + 112, 56, 57, 244, 239, 56, 57, 244, 80, 56, 57, 244, 207, 56, 57, 244, + 143, 56, 57, 245, 14, 56, 57, 244, 22, 56, 57, 244, 149, 56, 57, 244, 85, + 56, 57, 244, 212, 56, 57, 244, 53, 56, 57, 244, 180, 56, 57, 244, 116, + 56, 57, 244, 243, 56, 57, 244, 37, 56, 57, 244, 164, 56, 57, 244, 100, + 56, 57, 244, 227, 56, 57, 244, 68, 56, 57, 244, 195, 56, 57, 244, 131, + 56, 57, 245, 2, 56, 57, 244, 29, 56, 57, 244, 156, 56, 57, 244, 92, 56, + 57, 244, 219, 56, 57, 244, 60, 56, 57, 244, 187, 56, 57, 244, 123, 56, + 57, 244, 250, 56, 57, 244, 44, 56, 57, 244, 171, 56, 57, 244, 107, 56, + 57, 244, 234, 56, 57, 244, 75, 56, 57, 244, 202, 56, 57, 244, 138, 56, + 57, 245, 9, 56, 57, 244, 25, 56, 57, 244, 152, 56, 57, 244, 88, 56, 57, + 244, 215, 56, 57, 244, 56, 56, 57, 244, 183, 56, 57, 244, 119, 56, 57, + 244, 246, 56, 57, 244, 40, 56, 57, 244, 167, 56, 57, 244, 103, 56, 57, + 244, 230, 56, 57, 244, 71, 56, 57, 244, 198, 56, 57, 244, 134, 56, 57, + 245, 5, 56, 57, 244, 32, 56, 57, 244, 159, 56, 57, 244, 95, 56, 57, 244, + 222, 56, 57, 244, 63, 56, 57, 244, 190, 56, 57, 244, 126, 56, 57, 244, + 253, 56, 57, 244, 47, 56, 57, 244, 174, 56, 57, 244, 110, 56, 57, 244, + 237, 56, 57, 244, 78, 56, 57, 244, 205, 56, 57, 244, 141, 56, 57, 245, + 12, 56, 57, 244, 23, 56, 57, 244, 150, 56, 57, 244, 86, 56, 57, 244, 213, + 56, 57, 244, 54, 56, 57, 244, 181, 56, 57, 244, 117, 56, 57, 244, 244, + 56, 57, 244, 38, 56, 57, 244, 165, 56, 57, 244, 101, 56, 57, 244, 228, + 56, 57, 244, 69, 56, 57, 244, 196, 56, 57, 244, 132, 56, 57, 245, 3, 56, + 57, 244, 30, 56, 57, 244, 157, 56, 57, 244, 93, 56, 57, 244, 220, 56, 57, + 244, 61, 56, 57, 244, 188, 56, 57, 244, 124, 56, 57, 244, 251, 56, 57, + 244, 45, 56, 57, 244, 172, 56, 57, 244, 108, 56, 57, 244, 235, 56, 57, + 244, 76, 56, 57, 244, 203, 56, 57, 244, 139, 56, 57, 245, 10, 56, 57, + 244, 26, 56, 57, 244, 153, 56, 57, 244, 89, 56, 57, 244, 216, 56, 57, + 244, 57, 56, 57, 244, 184, 56, 57, 244, 120, 56, 57, 244, 247, 56, 57, + 244, 41, 56, 57, 244, 168, 56, 57, 244, 104, 56, 57, 244, 231, 56, 57, + 244, 72, 56, 57, 244, 199, 56, 57, 244, 135, 56, 57, 245, 6, 56, 57, 244, + 33, 56, 57, 244, 160, 56, 57, 244, 96, 56, 57, 244, 223, 56, 57, 244, 64, + 56, 57, 244, 191, 56, 57, 244, 127, 56, 57, 244, 254, 56, 57, 244, 48, + 56, 57, 244, 175, 56, 57, 244, 111, 56, 57, 244, 238, 56, 57, 244, 79, + 56, 57, 244, 206, 56, 57, 244, 142, 56, 57, 245, 13, 86, 210, 108, 51, 2, + 79, 91, 86, 210, 108, 51, 2, 50, 79, 91, 92, 50, 51, 2, 79, 91, 86, 50, + 51, 2, 79, 91, 47, 48, 50, 51, 2, 79, 91, 86, 210, 108, 51, 241, 98, 134, + 92, 50, 51, 241, 98, 134, 86, 50, 51, 241, 98, 134, 173, 51, 2, 194, 91, + 167, 51, 2, 194, 91, 167, 211, 36, 45, 173, 211, 36, 45, 92, 50, 246, 79, + 45, 86, 50, 246, 79, 45, 92, 211, 36, 246, 79, 45, 86, 211, 36, 246, 79, + 45, 86, 210, 108, 211, 36, 246, 79, 45, 86, 51, 2, 244, 21, 214, 9, 167, + 51, 211, 130, 134, 173, 51, 211, 130, 134, 86, 51, 2, 212, 192, 2, 79, + 91, 86, 51, 2, 212, 192, 2, 50, 79, 91, 86, 210, 108, 51, 2, 212, 191, + 86, 210, 108, 51, 2, 212, 192, 2, 79, 91, 86, 210, 108, 51, 2, 212, 192, + 2, 50, 79, 91, 92, 251, 245, 86, 251, 245, 92, 50, 251, 245, 86, 50, 251, + 245, 92, 51, 211, 130, 60, 245, 156, 86, 51, 211, 130, 60, 245, 156, 92, + 51, 241, 98, 250, 129, 211, 130, 60, 245, 156, 86, 51, 241, 98, 250, 129, + 211, 130, 60, 245, 156, 143, 207, 36, 23, 188, 243, 117, 45, 143, 243, + 117, 23, 188, 207, 36, 45, 143, 207, 36, 51, 2, 109, 143, 243, 117, 51, + 2, 109, 188, 243, 117, 51, 2, 109, 188, 207, 36, 51, 2, 109, 143, 207, + 36, 51, 23, 143, 243, 117, 45, 143, 243, 117, 51, 23, 188, 243, 117, 45, + 188, 243, 117, 51, 23, 188, 207, 36, 45, 188, 207, 36, 51, 23, 143, 207, + 36, 45, 218, 142, 245, 163, 247, 54, 242, 50, 245, 162, 242, 50, 245, + 163, 247, 54, 218, 142, 245, 162, 188, 243, 117, 51, 247, 54, 143, 243, + 117, 45, 143, 243, 117, 51, 247, 54, 188, 243, 117, 45, 242, 50, 245, + 163, 247, 54, 143, 243, 117, 45, 218, 142, 245, 163, 247, 54, 188, 243, + 117, 45, 143, 243, 117, 51, 247, 54, 143, 207, 36, 45, 143, 207, 36, 51, + 247, 54, 143, 243, 117, 45, 207, 65, 51, 220, 201, 245, 102, 218, 167, + 51, 220, 201, 86, 212, 33, 247, 17, 209, 196, 51, 220, 201, 86, 212, 33, + 247, 17, 244, 6, 51, 220, 201, 173, 212, 33, 247, 17, 230, 36, 51, 220, + 201, 173, 212, 33, 247, 17, 218, 156, 218, 159, 252, 22, 247, 194, 45, + 230, 39, 252, 22, 252, 87, 45, 211, 102, 252, 22, 252, 87, 45, 249, 154, + 252, 22, 252, 87, 45, 211, 102, 252, 22, 247, 194, 51, 2, 226, 201, 211, + 102, 252, 22, 252, 87, 51, 2, 220, 218, 229, 92, 48, 216, 54, 247, 194, + 45, 229, 92, 47, 216, 54, 252, 87, 45, 252, 87, 247, 192, 247, 234, 45, + 247, 194, 247, 192, 247, 234, 45, 86, 51, 84, 215, 144, 92, 45, 92, 51, + 84, 215, 144, 86, 45, 215, 144, 86, 51, 84, 92, 45, 86, 51, 2, 101, 55, + 92, 51, 2, 101, 55, 86, 51, 211, 233, 206, 195, 47, 48, 51, 211, 233, 5, + 247, 233, 167, 210, 108, 51, 241, 98, 5, 247, 233, 47, 138, 120, 48, 138, + 130, 239, 89, 47, 138, 130, 48, 138, 120, 239, 89, 120, 138, 48, 130, + 138, 47, 239, 89, 120, 138, 47, 130, 138, 48, 239, 89, 47, 138, 120, 48, + 138, 120, 239, 89, 120, 138, 48, 130, 138, 48, 239, 89, 47, 138, 130, 48, + 138, 130, 239, 89, 120, 138, 47, 130, 138, 47, 239, 89, 92, 239, 90, 2, + 138, 120, 211, 130, 134, 86, 239, 90, 2, 138, 120, 211, 130, 134, 167, + 239, 90, 2, 138, 48, 211, 130, 134, 173, 239, 90, 2, 138, 48, 211, 130, + 134, 92, 239, 90, 2, 138, 130, 211, 130, 134, 86, 239, 90, 2, 138, 130, + 211, 130, 134, 167, 239, 90, 2, 138, 47, 211, 130, 134, 173, 239, 90, 2, + 138, 47, 211, 130, 134, 92, 239, 90, 2, 138, 120, 241, 98, 134, 86, 239, + 90, 2, 138, 120, 241, 98, 134, 167, 239, 90, 2, 138, 48, 241, 98, 134, + 173, 239, 90, 2, 138, 48, 241, 98, 134, 92, 239, 90, 2, 138, 130, 241, + 98, 134, 86, 239, 90, 2, 138, 130, 241, 98, 134, 167, 239, 90, 2, 138, + 47, 241, 98, 134, 173, 239, 90, 2, 138, 47, 241, 98, 134, 92, 239, 90, 2, + 138, 120, 84, 92, 239, 90, 2, 138, 244, 8, 167, 239, 90, 2, 138, 47, 250, + 12, 167, 239, 90, 2, 138, 218, 167, 86, 239, 90, 2, 138, 120, 84, 86, + 239, 90, 2, 138, 244, 8, 173, 239, 90, 2, 138, 47, 250, 12, 173, 239, 90, + 2, 138, 218, 167, 92, 239, 90, 2, 138, 120, 84, 86, 239, 90, 2, 138, 209, + 206, 92, 239, 90, 2, 138, 130, 84, 86, 239, 90, 2, 138, 244, 8, 86, 239, + 90, 2, 138, 120, 84, 92, 239, 90, 2, 138, 209, 206, 86, 239, 90, 2, 138, + 130, 84, 92, 239, 90, 2, 138, 244, 8, 92, 239, 90, 2, 138, 120, 84, 152, + 246, 78, 92, 239, 90, 2, 138, 130, 250, 26, 152, 246, 78, 86, 239, 90, 2, + 138, 120, 84, 152, 246, 78, 86, 239, 90, 2, 138, 130, 250, 26, 152, 246, + 78, 167, 239, 90, 2, 138, 47, 250, 12, 173, 239, 90, 2, 138, 218, 167, + 173, 239, 90, 2, 138, 47, 250, 12, 167, 239, 90, 2, 138, 218, 167, 48, + 50, 51, 2, 218, 93, 239, 68, 242, 242, 3, 84, 86, 45, 211, 181, 222, 133, + 84, 86, 45, 92, 51, 84, 211, 181, 222, 132, 86, 51, 84, 211, 181, 222, + 132, 86, 51, 84, 252, 149, 146, 124, 230, 10, 84, 92, 45, 92, 51, 211, + 233, 230, 9, 239, 230, 84, 86, 45, 213, 182, 84, 86, 45, 92, 51, 211, + 233, 213, 181, 213, 138, 84, 92, 45, 47, 241, 214, 212, 191, 48, 241, + 214, 212, 191, 120, 241, 214, 212, 191, 130, 241, 214, 212, 191, 211, 36, + 79, 250, 129, 245, 233, 205, 160, 224, 41, 214, 116, 205, 160, 224, 41, + 210, 95, 247, 162, 47, 59, 247, 26, 145, 48, 59, 247, 26, 145, 47, 59, + 221, 216, 48, 59, 221, 216, 205, 160, 224, 41, 47, 233, 84, 145, 205, + 160, 224, 41, 48, 233, 84, 145, 205, 160, 224, 41, 47, 249, 223, 145, + 205, 160, 224, 41, 48, 249, 223, 145, 47, 49, 249, 134, 2, 209, 226, 48, + 49, 249, 134, 2, 209, 226, 47, 49, 249, 134, 2, 211, 208, 233, 69, 211, + 102, 247, 91, 48, 49, 249, 134, 2, 211, 208, 233, 69, 249, 154, 247, 91, + 47, 49, 249, 134, 2, 211, 208, 233, 69, 249, 154, 247, 91, 48, 49, 249, + 134, 2, 211, 208, 233, 69, 211, 102, 247, 91, 47, 252, 109, 249, 134, 2, + 245, 23, 48, 252, 109, 249, 134, 2, 245, 23, 47, 252, 22, 230, 10, 145, + 48, 252, 22, 239, 230, 145, 50, 47, 252, 22, 239, 230, 145, 50, 48, 252, + 22, 230, 10, 145, 47, 60, 211, 93, 215, 204, 145, 48, 60, 211, 93, 215, + 204, 145, 244, 21, 242, 8, 79, 205, 31, 229, 205, 227, 116, 252, 109, + 222, 135, 230, 46, 48, 252, 109, 209, 53, 2, 214, 107, 227, 116, 48, 252, + 109, 2, 245, 23, 252, 109, 2, 218, 1, 233, 25, 253, 9, 252, 108, 214, + 133, 252, 109, 222, 135, 230, 46, 214, 133, 252, 109, 222, 135, 209, 206, + 201, 252, 108, 218, 224, 252, 108, 252, 109, 2, 209, 226, 218, 224, 252, + 109, 2, 209, 226, 222, 222, 252, 109, 222, 135, 209, 206, 222, 222, 252, + 109, 222, 135, 244, 8, 227, 116, 252, 109, 2, 222, 142, 252, 0, 243, 31, + 233, 69, 51, 220, 201, 120, 23, 218, 167, 227, 116, 252, 109, 2, 222, + 142, 252, 0, 243, 31, 233, 69, 51, 220, 201, 120, 23, 230, 46, 227, 116, + 252, 109, 2, 222, 142, 252, 0, 243, 31, 233, 69, 51, 220, 201, 130, 23, + 218, 167, 227, 116, 252, 109, 2, 222, 142, 252, 0, 243, 31, 233, 69, 51, + 220, 201, 130, 23, 230, 46, 227, 116, 252, 109, 2, 222, 142, 252, 0, 243, + 31, 233, 69, 51, 220, 201, 48, 23, 209, 206, 227, 116, 252, 109, 2, 222, + 142, 252, 0, 243, 31, 233, 69, 51, 220, 201, 47, 23, 209, 206, 227, 116, + 252, 109, 2, 222, 142, 252, 0, 243, 31, 233, 69, 51, 220, 201, 48, 23, + 244, 8, 227, 116, 252, 109, 2, 222, 142, 252, 0, 243, 31, 233, 69, 51, + 220, 201, 47, 23, 244, 8, 218, 224, 243, 43, 216, 28, 243, 43, 216, 29, + 2, 222, 86, 243, 43, 216, 29, 2, 5, 247, 234, 52, 243, 43, 216, 29, 2, + 48, 51, 52, 243, 43, 216, 29, 2, 47, 51, 52, 247, 234, 2, 194, 134, 39, + 79, 134, 39, 221, 221, 39, 218, 225, 214, 180, 39, 221, 118, 247, 234, + 245, 80, 249, 46, 194, 250, 129, 23, 211, 102, 160, 245, 80, 249, 46, 79, + 134, 247, 234, 2, 213, 140, 206, 195, 39, 252, 85, 245, 75, 53, 120, 51, + 211, 233, 247, 233, 39, 59, 249, 85, 39, 249, 85, 39, 230, 9, 39, 239, + 229, 247, 234, 2, 5, 247, 234, 211, 130, 212, 42, 218, 167, 247, 234, 2, + 118, 194, 213, 213, 211, 130, 212, 42, 218, 167, 98, 218, 142, 245, 163, + 214, 235, 98, 242, 50, 245, 163, 214, 235, 98, 251, 209, 98, 5, 247, 233, + 98, 214, 107, 118, 232, 119, 214, 105, 211, 52, 2, 67, 52, 211, 52, 2, + 209, 226, 218, 1, 233, 69, 211, 51, 211, 52, 2, 216, 35, 251, 200, 249, + 153, 48, 211, 52, 84, 47, 211, 51, 47, 211, 52, 250, 12, 79, 134, 79, + 250, 129, 250, 12, 48, 211, 51, 249, 142, 2, 47, 160, 249, 202, 249, 142, + 2, 48, 160, 249, 202, 60, 249, 141, 29, 2, 47, 160, 249, 202, 29, 2, 48, + 160, 249, 202, 59, 238, 56, 60, 238, 56, 47, 207, 14, 242, 8, 48, 207, + 14, 242, 8, 47, 50, 207, 14, 242, 8, 48, 50, 207, 14, 242, 8, 233, 61, + 233, 45, 211, 204, 131, 233, 45, 233, 46, 225, 105, 2, 79, 134, 244, 15, + 226, 97, 49, 2, 247, 112, 222, 90, 233, 58, 251, 231, 215, 110, 220, 115, + 242, 242, 3, 23, 214, 237, 221, 221, 242, 242, 3, 23, 214, 237, 221, 222, + 2, 211, 181, 52, 237, 173, 211, 130, 23, 214, 237, 221, 221, 240, 28, + 214, 25, 212, 30, 244, 7, 211, 52, 2, 47, 160, 249, 202, 244, 7, 211, 52, + 2, 48, 160, 249, 202, 60, 245, 157, 2, 130, 45, 60, 229, 88, 59, 247, + 234, 2, 130, 45, 60, 247, 234, 2, 130, 45, 242, 228, 59, 214, 107, 242, + 228, 60, 214, 107, 242, 228, 59, 245, 156, 242, 228, 60, 245, 156, 242, + 228, 59, 247, 233, 242, 228, 60, 247, 233, 218, 41, 218, 225, 214, 181, + 222, 132, 214, 181, 2, 222, 86, 218, 225, 214, 181, 2, 194, 91, 249, 231, + 214, 180, 249, 231, 218, 225, 214, 180, 50, 220, 218, 211, 36, 220, 218, + 230, 41, 247, 18, 252, 109, 145, 218, 162, 247, 18, 252, 109, 145, 211, + 168, 226, 199, 226, 32, 39, 67, 222, 132, 226, 32, 39, 101, 222, 132, + 226, 32, 39, 29, 222, 132, 226, 32, 209, 219, 222, 133, 2, 245, 23, 226, + 32, 209, 219, 222, 133, 2, 220, 218, 226, 32, 49, 233, 8, 222, 132, 226, + 32, 49, 209, 219, 222, 132, 118, 229, 134, 23, 222, 132, 118, 229, 134, + 222, 123, 222, 132, 226, 32, 29, 222, 132, 226, 172, 118, 213, 160, 213, + 158, 2, 233, 21, 219, 207, 233, 22, 222, 132, 241, 222, 221, 211, 233, + 21, 233, 22, 2, 50, 91, 233, 22, 251, 165, 2, 214, 235, 247, 229, 241, + 79, 252, 87, 233, 19, 229, 206, 233, 20, 2, 219, 36, 221, 192, 251, 253, + 220, 195, 229, 206, 233, 20, 2, 216, 54, 221, 192, 251, 253, 220, 195, + 229, 206, 233, 20, 224, 43, 233, 63, 212, 42, 220, 195, 233, 22, 251, + 253, 32, 220, 205, 222, 132, 219, 201, 233, 22, 222, 132, 233, 22, 2, 92, + 51, 2, 109, 233, 22, 2, 29, 53, 233, 22, 2, 233, 7, 233, 22, 2, 209, 218, + 233, 22, 2, 222, 86, 233, 22, 2, 209, 226, 232, 120, 230, 86, 47, 211, + 52, 222, 132, 205, 160, 224, 41, 217, 106, 247, 145, 205, 160, 224, 41, + 217, 106, 221, 0, 205, 160, 224, 41, 217, 106, 220, 110, 101, 3, 2, 5, + 247, 234, 52, 101, 3, 2, 247, 228, 253, 22, 52, 101, 3, 2, 211, 181, 52, + 101, 3, 2, 67, 55, 101, 3, 2, 211, 181, 55, 101, 3, 2, 213, 183, 105, + 101, 3, 2, 60, 211, 51, 226, 202, 3, 2, 247, 156, 52, 226, 202, 3, 2, 67, + 55, 226, 202, 3, 2, 242, 50, 245, 21, 226, 202, 3, 2, 218, 142, 245, 21, + 101, 3, 233, 69, 47, 160, 247, 233, 101, 3, 233, 69, 48, 160, 247, 233, + 209, 38, 222, 123, 247, 60, 220, 115, 226, 94, 3, 2, 67, 52, 226, 94, 3, + 2, 209, 226, 216, 51, 220, 116, 2, 249, 154, 247, 191, 214, 213, 220, + 115, 226, 94, 3, 233, 69, 47, 160, 247, 233, 226, 94, 3, 233, 69, 48, + 160, 247, 233, 39, 226, 94, 3, 2, 247, 228, 253, 21, 226, 94, 3, 233, 69, + 50, 247, 233, 39, 245, 75, 53, 101, 3, 233, 69, 211, 51, 226, 202, 3, + 233, 69, 211, 51, 226, 94, 3, 233, 69, 211, 51, 233, 16, 220, 115, 218, + 157, 233, 16, 220, 115, 205, 160, 224, 41, 219, 10, 247, 145, 252, 134, + 222, 123, 247, 96, 233, 8, 2, 245, 23, 209, 219, 2, 226, 202, 53, 209, + 219, 2, 222, 86, 233, 8, 2, 222, 86, 233, 8, 2, 229, 134, 252, 117, 209, + 219, 2, 229, 134, 222, 122, 209, 219, 84, 233, 7, 233, 8, 84, 209, 218, + 209, 219, 84, 250, 129, 84, 233, 7, 233, 8, 84, 250, 129, 84, 209, 218, + 209, 219, 250, 12, 23, 232, 119, 2, 209, 218, 233, 8, 250, 12, 23, 232, + 119, 2, 233, 7, 247, 192, 209, 219, 2, 216, 34, 247, 192, 233, 8, 2, 216, + 34, 50, 49, 233, 7, 50, 49, 209, 218, 247, 192, 209, 219, 2, 216, 35, 23, + 214, 213, 220, 115, 229, 134, 23, 2, 67, 52, 229, 134, 222, 123, 2, 67, + 52, 50, 229, 134, 252, 117, 50, 229, 134, 222, 122, 118, 233, 9, 229, + 134, 252, 117, 118, 233, 9, 229, 134, 222, 122, 214, 221, 230, 86, 222, + 122, 214, 221, 230, 86, 252, 117, 229, 134, 222, 123, 222, 83, 229, 134, + 252, 117, 229, 134, 23, 2, 226, 247, 214, 9, 229, 134, 222, 123, 2, 226, + 247, 214, 9, 229, 134, 23, 2, 194, 246, 78, 229, 134, 222, 123, 2, 194, + 246, 78, 229, 134, 23, 2, 50, 222, 86, 229, 134, 23, 2, 209, 226, 229, + 134, 23, 2, 50, 209, 226, 5, 209, 35, 2, 209, 226, 229, 134, 222, 123, 2, + 50, 222, 86, 229, 134, 222, 123, 2, 50, 209, 226, 205, 160, 224, 41, 245, + 32, 252, 77, 205, 160, 224, 41, 219, 72, 252, 77, 242, 242, 3, 2, 67, 55, + 237, 173, 2, 67, 52, 211, 36, 194, 250, 129, 2, 50, 79, 91, 211, 36, 194, + 250, 129, 2, 211, 36, 79, 91, 211, 181, 222, 133, 2, 67, 52, 211, 181, + 222, 133, 2, 218, 142, 245, 21, 215, 48, 226, 202, 215, 47, 247, 132, 2, + 67, 52, 242, 242, 2, 251, 209, 252, 149, 146, 211, 130, 2, 247, 228, 253, + 21, 252, 44, 146, 222, 123, 146, 124, 242, 242, 3, 84, 101, 53, 101, 3, + 84, 242, 242, 53, 242, 242, 3, 84, 211, 181, 222, 132, 50, 247, 163, 242, + 243, 118, 247, 127, 242, 242, 215, 62, 129, 247, 127, 242, 242, 215, 62, + 242, 242, 3, 2, 118, 177, 84, 23, 118, 177, 55, 242, 237, 2, 241, 125, + 177, 52, 230, 10, 2, 247, 234, 233, 25, 239, 230, 2, 247, 234, 233, 25, + 230, 10, 2, 219, 196, 141, 52, 239, 230, 2, 219, 196, 141, 52, 230, 10, + 222, 123, 214, 237, 146, 124, 239, 230, 222, 123, 214, 237, 146, 124, + 230, 10, 222, 123, 214, 237, 146, 211, 130, 2, 67, 233, 25, 239, 230, + 222, 123, 214, 237, 146, 211, 130, 2, 67, 233, 25, 230, 10, 222, 123, + 214, 237, 146, 211, 130, 2, 67, 52, 239, 230, 222, 123, 214, 237, 146, + 211, 130, 2, 67, 52, 230, 10, 222, 123, 214, 237, 146, 211, 130, 2, 67, + 84, 218, 167, 239, 230, 222, 123, 214, 237, 146, 211, 130, 2, 67, 84, + 230, 46, 230, 10, 222, 123, 252, 45, 239, 230, 222, 123, 252, 45, 230, + 10, 23, 215, 39, 224, 43, 146, 124, 239, 230, 23, 215, 39, 224, 43, 146, + 124, 230, 10, 23, 224, 43, 252, 45, 239, 230, 23, 224, 43, 252, 45, 230, + 10, 84, 244, 14, 146, 84, 239, 229, 239, 230, 84, 244, 14, 146, 84, 230, + 9, 230, 10, 84, 215, 48, 222, 123, 242, 243, 239, 230, 84, 215, 48, 222, + 123, 242, 243, 230, 10, 84, 215, 48, 84, 239, 229, 239, 230, 84, 215, 48, + 84, 230, 9, 230, 10, 84, 239, 230, 84, 244, 14, 242, 243, 239, 230, 84, + 230, 10, 84, 244, 14, 242, 243, 230, 10, 84, 214, 237, 146, 84, 239, 230, + 84, 214, 237, 242, 243, 239, 230, 84, 214, 237, 146, 84, 230, 10, 84, + 214, 237, 242, 243, 214, 237, 146, 211, 130, 222, 123, 230, 9, 214, 237, + 146, 211, 130, 222, 123, 239, 229, 214, 237, 146, 211, 130, 222, 123, + 230, 10, 2, 67, 233, 25, 214, 237, 146, 211, 130, 222, 123, 239, 230, 2, + 67, 233, 25, 244, 14, 146, 211, 130, 222, 123, 230, 9, 244, 14, 146, 211, + 130, 222, 123, 239, 229, 244, 14, 214, 237, 146, 211, 130, 222, 123, 230, + 9, 244, 14, 214, 237, 146, 211, 130, 222, 123, 239, 229, 215, 48, 222, + 123, 230, 9, 215, 48, 222, 123, 239, 229, 215, 48, 84, 230, 10, 84, 242, + 242, 53, 215, 48, 84, 239, 230, 84, 242, 242, 53, 50, 225, 93, 230, 9, + 50, 225, 93, 239, 229, 50, 225, 93, 230, 10, 2, 209, 226, 239, 230, 222, + 83, 230, 9, 239, 230, 250, 12, 230, 9, 230, 10, 247, 192, 249, 46, 247, + 19, 239, 230, 247, 192, 249, 46, 247, 19, 230, 10, 247, 192, 249, 46, + 247, 20, 84, 214, 237, 242, 243, 239, 230, 247, 192, 249, 46, 247, 20, + 84, 214, 237, 242, 243, 214, 214, 212, 46, 230, 84, 212, 46, 214, 214, + 212, 47, 222, 123, 146, 124, 230, 84, 212, 47, 222, 123, 146, 124, 242, + 242, 3, 2, 249, 78, 52, 220, 140, 84, 215, 39, 242, 242, 53, 213, 174, + 84, 215, 39, 242, 242, 53, 220, 140, 84, 215, 39, 224, 43, 146, 124, 213, + 174, 84, 215, 39, 224, 43, 146, 124, 220, 140, 84, 242, 242, 53, 213, + 174, 84, 242, 242, 53, 220, 140, 84, 224, 43, 146, 124, 213, 174, 84, + 224, 43, 146, 124, 220, 140, 84, 252, 149, 146, 124, 213, 174, 84, 252, + 149, 146, 124, 220, 140, 84, 224, 43, 252, 149, 146, 124, 213, 174, 84, + 224, 43, 252, 149, 146, 124, 50, 220, 139, 50, 213, 173, 213, 182, 2, + 245, 23, 213, 138, 2, 245, 23, 213, 182, 2, 101, 3, 55, 213, 138, 2, 101, + 3, 55, 213, 182, 2, 226, 94, 3, 55, 213, 138, 2, 226, 94, 3, 55, 213, + 182, 73, 222, 123, 146, 211, 130, 2, 67, 52, 213, 138, 73, 222, 123, 146, + 211, 130, 2, 67, 52, 213, 182, 73, 84, 242, 242, 53, 213, 138, 73, 84, + 242, 242, 53, 213, 182, 73, 84, 211, 181, 222, 132, 213, 138, 73, 84, + 211, 181, 222, 132, 213, 182, 73, 84, 252, 149, 146, 124, 213, 138, 73, + 84, 252, 149, 146, 124, 213, 182, 73, 84, 224, 43, 146, 124, 213, 138, + 73, 84, 224, 43, 146, 124, 49, 47, 222, 142, 96, 222, 132, 49, 48, 222, + 142, 96, 222, 132, 247, 192, 213, 181, 247, 192, 213, 137, 247, 192, 213, + 182, 222, 123, 146, 124, 247, 192, 213, 138, 222, 123, 146, 124, 213, + 182, 84, 213, 137, 213, 138, 84, 213, 181, 213, 182, 84, 213, 181, 213, + 138, 84, 213, 137, 213, 138, 250, 12, 213, 181, 213, 138, 250, 12, 23, + 232, 119, 249, 46, 246, 79, 2, 213, 181, 243, 61, 73, 222, 135, 244, 6, + 220, 246, 2, 212, 121, 211, 101, 211, 66, 233, 7, 241, 137, 224, 57, 215, + 144, 47, 212, 201, 215, 144, 130, 212, 201, 215, 144, 120, 212, 201, 221, + 119, 2, 182, 79, 250, 129, 211, 36, 48, 210, 143, 50, 79, 250, 129, 47, + 210, 143, 79, 250, 129, 50, 47, 210, 143, 50, 79, 250, 129, 50, 47, 210, + 143, 152, 246, 79, 241, 98, 47, 227, 88, 73, 50, 209, 22, 215, 144, 130, + 212, 202, 2, 222, 86, 215, 144, 120, 212, 202, 2, 209, 226, 215, 144, + 120, 212, 202, 84, 215, 144, 130, 212, 201, 50, 130, 212, 201, 50, 120, + 212, 201, 50, 213, 225, 224, 43, 53, 218, 224, 50, 213, 225, 224, 43, 53, + 245, 42, 224, 43, 245, 82, 2, 218, 224, 225, 104, 214, 235, 79, 229, 206, + 2, 247, 234, 52, 79, 229, 206, 2, 247, 234, 55, 130, 212, 202, 2, 247, + 234, 55, 221, 222, 2, 194, 91, 221, 222, 2, 211, 181, 222, 132, 211, 36, + 79, 250, 129, 249, 225, 219, 11, 211, 36, 79, 250, 129, 2, 194, 91, 211, + 36, 247, 163, 222, 132, 211, 36, 225, 93, 230, 9, 211, 36, 225, 93, 239, + 229, 244, 14, 214, 237, 230, 10, 222, 123, 146, 124, 244, 14, 214, 237, + 239, 230, 222, 123, 146, 124, 211, 36, 214, 181, 249, 225, 219, 11, 230, + 86, 211, 36, 79, 250, 129, 222, 132, 50, 214, 181, 222, 132, 59, 79, 134, + 226, 32, 59, 79, 134, 143, 243, 117, 59, 45, 143, 207, 36, 59, 45, 188, + 243, 117, 59, 45, 188, 207, 36, 59, 45, 47, 48, 59, 45, 92, 60, 45, 167, + 60, 45, 173, 60, 45, 143, 243, 117, 60, 45, 143, 207, 36, 60, 45, 188, + 243, 117, 60, 45, 188, 207, 36, 60, 45, 47, 48, 60, 45, 120, 130, 60, 45, + 86, 51, 2, 211, 167, 244, 6, 86, 51, 2, 211, 167, 209, 196, 92, 51, 2, + 211, 167, 244, 6, 92, 51, 2, 211, 167, 209, 196, 49, 2, 211, 102, 160, + 249, 202, 49, 2, 249, 154, 160, 249, 202, 49, 2, 209, 203, 48, 245, 163, + 160, 249, 202, 49, 2, 229, 92, 47, 245, 163, 160, 249, 202, 245, 157, 2, + 47, 160, 249, 202, 245, 157, 2, 48, 160, 249, 202, 245, 157, 2, 211, 102, + 160, 249, 202, 245, 157, 2, 249, 154, 160, 249, 202, 244, 21, 214, 107, + 60, 230, 86, 214, 107, 59, 230, 86, 214, 107, 60, 208, 226, 5, 214, 107, + 59, 208, 226, 5, 214, 107, 60, 221, 140, 59, 221, 140, 59, 239, 25, 60, + 239, 25, 194, 60, 239, 25, 60, 230, 86, 247, 233, 60, 227, 109, 245, 156, + 59, 227, 109, 245, 156, 60, 227, 109, 229, 88, 59, 227, 109, 229, 88, 60, + 5, 245, 156, 60, 5, 229, 88, 59, 5, 229, 88, 60, 194, 243, 55, 59, 194, + 243, 55, 60, 79, 243, 55, 59, 79, 243, 55, 47, 51, 2, 5, 247, 233, 129, + 92, 251, 241, 47, 51, 2, 39, 220, 218, 152, 92, 214, 103, 45, 92, 210, + 108, 51, 2, 79, 91, 92, 210, 108, 51, 2, 50, 79, 91, 92, 210, 108, 51, + 241, 98, 134, 92, 210, 108, 211, 36, 246, 79, 45, 92, 51, 2, 244, 21, + 214, 9, 92, 51, 2, 212, 192, 2, 79, 91, 92, 51, 2, 212, 192, 2, 50, 79, + 91, 92, 210, 108, 51, 2, 212, 191, 92, 210, 108, 51, 2, 212, 192, 2, 79, + 91, 92, 210, 108, 51, 2, 212, 192, 2, 50, 79, 91, 92, 51, 211, 233, 206, + 195, 207, 65, 51, 220, 201, 245, 102, 230, 46, 242, 242, 3, 84, 92, 45, + 218, 225, 211, 181, 222, 133, 84, 92, 45, 92, 51, 84, 218, 225, 252, 149, + 146, 124, 86, 51, 211, 233, 239, 229, 86, 51, 211, 233, 213, 137, 92, + 219, 207, 45, 86, 219, 207, 45, 218, 225, 211, 181, 222, 133, 84, 86, 45, + 86, 51, 84, 218, 225, 252, 149, 146, 124, 211, 181, 222, 133, 84, 92, 45, + 92, 51, 84, 252, 149, 146, 124, 92, 51, 84, 218, 225, 211, 181, 222, 132, + 86, 51, 84, 218, 225, 211, 181, 222, 132, 173, 211, 50, 205, 31, 45, 215, + 144, 214, 237, 143, 45, 215, 144, 250, 173, 188, 45, 59, 227, 109, 214, + 26, 60, 5, 214, 26, 59, 5, 214, 26, 60, 218, 162, 221, 140, 59, 218, 162, + 221, 140, 77, 230, 86, 247, 233, 77, 222, 87, 2, 222, 87, 233, 25, 77, + 247, 234, 2, 247, 234, 233, 25, 77, 247, 233, 77, 39, 217, 162, 214, 237, + 143, 51, 2, 238, 129, 239, 68, 250, 173, 188, 51, 2, 238, 129, 212, 191, + 214, 237, 143, 51, 2, 194, 212, 191, 250, 173, 188, 51, 2, 194, 212, 191, + 250, 19, 51, 220, 201, 173, 212, 33, 143, 243, 116, 215, 144, 250, 19, + 51, 220, 201, 173, 212, 33, 143, 243, 116, 92, 211, 50, 45, 167, 211, 50, + 45, 86, 211, 50, 45, 173, 211, 50, 45, 47, 48, 211, 50, 45, 120, 130, + 211, 50, 45, 143, 207, 36, 211, 50, 45, 143, 243, 117, 211, 50, 45, 188, + 243, 117, 211, 50, 45, 188, 207, 36, 211, 50, 45, 92, 211, 50, 246, 77, + 45, 167, 211, 50, 246, 77, 45, 86, 211, 50, 246, 77, 45, 173, 211, 50, + 246, 77, 45, 247, 194, 211, 50, 222, 142, 247, 234, 45, 252, 87, 211, 50, + 222, 142, 247, 234, 45, 92, 211, 50, 51, 211, 130, 134, 167, 211, 50, 51, + 211, 130, 134, 86, 211, 50, 51, 211, 130, 134, 173, 211, 50, 51, 211, + 130, 134, 143, 207, 36, 211, 50, 51, 211, 130, 134, 143, 243, 117, 211, + 50, 51, 211, 130, 134, 188, 243, 117, 211, 50, 51, 211, 130, 134, 188, + 207, 36, 211, 50, 51, 211, 130, 134, 92, 211, 50, 51, 2, 50, 194, 91, + 167, 211, 50, 51, 2, 50, 194, 91, 86, 211, 50, 51, 2, 50, 194, 91, 173, + 211, 50, 51, 2, 50, 194, 91, 194, 212, 208, 231, 174, 79, 212, 208, 231, + 174, 92, 211, 50, 51, 131, 86, 211, 50, 45, 167, 211, 50, 51, 92, 73, + 173, 211, 50, 45, 86, 211, 50, 51, 131, 92, 211, 50, 45, 173, 211, 50, + 51, 92, 73, 167, 211, 50, 45, 92, 211, 50, 222, 30, 251, 241, 167, 211, + 50, 222, 30, 251, 241, 86, 211, 50, 222, 30, 251, 241, 173, 211, 50, 222, + 30, 251, 241, 92, 60, 39, 59, 45, 167, 60, 39, 59, 45, 86, 60, 39, 59, + 45, 173, 60, 39, 59, 45, 252, 87, 211, 50, 48, 210, 71, 45, 252, 87, 211, + 50, 249, 154, 210, 71, 45, 252, 87, 211, 50, 47, 210, 71, 45, 252, 87, + 211, 50, 211, 102, 210, 71, 45, 218, 229, 230, 46, 218, 229, 218, 167, + 225, 86, 230, 46, 225, 86, 218, 167, 241, 125, 247, 92, 251, 242, 247, + 231, 252, 86, 86, 60, 45, 211, 238, 211, 100, 92, 242, 238, 251, 243, + 211, 238, 218, 163, 167, 242, 238, 251, 243, 211, 238, 211, 100, 86, 242, + 238, 251, 243, 211, 238, 230, 42, 173, 242, 238, 251, 243, 60, 92, 242, + 238, 251, 243, 60, 167, 242, 238, 251, 243, 60, 86, 242, 238, 251, 243, + 60, 173, 242, 238, 251, 243, 173, 211, 50, 51, 2, 152, 211, 167, 230, 36, + 173, 211, 50, 51, 2, 152, 211, 167, 218, 156, 167, 211, 50, 51, 2, 152, + 211, 167, 230, 36, 167, 211, 50, 51, 2, 152, 211, 167, 218, 156, 92, 211, + 50, 51, 2, 152, 211, 167, 209, 196, 86, 211, 50, 51, 2, 152, 211, 167, + 209, 196, 92, 211, 50, 51, 2, 152, 211, 167, 244, 6, 86, 211, 50, 51, 2, + 152, 211, 167, 244, 6, 60, 247, 18, 173, 23, 92, 45, 60, 247, 18, 173, + 23, 86, 45, 60, 247, 18, 167, 23, 92, 45, 60, 247, 18, 167, 23, 86, 45, + 60, 247, 18, 92, 23, 167, 45, 60, 247, 18, 86, 23, 167, 45, 60, 247, 18, + 92, 23, 173, 45, 60, 247, 18, 86, 23, 173, 45, 218, 206, 51, 130, 230, + 46, 218, 206, 51, 130, 218, 167, 218, 206, 51, 120, 230, 46, 218, 206, + 51, 120, 218, 167, 218, 206, 51, 47, 209, 206, 218, 206, 51, 48, 209, + 206, 218, 206, 51, 47, 244, 8, 218, 206, 51, 48, 244, 8, 167, 59, 51, + 241, 98, 250, 129, 2, 194, 134, 120, 251, 244, 233, 69, 32, 219, 38, 249, + 140, 250, 146, 96, 2, 147, 206, 195, 39, 206, 195, 39, 24, 206, 195, 60, + 49, 248, 126, 60, 245, 157, 248, 126, 201, 60, 221, 140, 194, 60, 222, + 214, 60, 222, 214, 60, 227, 109, 209, 205, 211, 52, 248, 126, 60, 227, + 109, 244, 7, 211, 52, 248, 126, 60, 227, 109, 230, 41, 211, 52, 248, 126, + 60, 227, 109, 218, 162, 211, 52, 248, 126, 211, 102, 160, 60, 247, 233, + 249, 154, 160, 60, 247, 233, 147, 241, 125, 220, 203, 60, 247, 15, 218, + 97, 147, 241, 125, 220, 203, 60, 247, 15, 59, 241, 125, 220, 203, 247, + 15, 218, 97, 59, 241, 125, 220, 203, 247, 15, 49, 220, 178, 233, 49, 209, + 229, 53, 166, 6, 1, 251, 151, 166, 6, 1, 249, 89, 166, 6, 1, 209, 37, + 166, 6, 1, 240, 30, 166, 6, 1, 245, 46, 166, 6, 1, 206, 24, 166, 6, 1, + 205, 65, 166, 6, 1, 243, 191, 166, 6, 1, 205, 90, 166, 6, 1, 232, 207, + 166, 6, 1, 78, 232, 207, 166, 6, 1, 74, 166, 6, 1, 245, 66, 166, 6, 1, + 232, 33, 166, 6, 1, 229, 174, 166, 6, 1, 226, 37, 166, 6, 1, 225, 195, + 166, 6, 1, 222, 154, 166, 6, 1, 220, 198, 166, 6, 1, 218, 141, 166, 6, 1, + 214, 219, 166, 6, 1, 210, 131, 166, 6, 1, 209, 245, 166, 6, 1, 241, 101, + 166, 6, 1, 239, 31, 166, 6, 1, 222, 98, 166, 6, 1, 221, 174, 166, 6, 1, + 215, 119, 166, 6, 1, 210, 222, 166, 6, 1, 248, 20, 166, 6, 1, 216, 2, + 166, 6, 1, 206, 30, 166, 6, 1, 206, 32, 166, 6, 1, 206, 63, 166, 6, 1, + 214, 129, 155, 166, 6, 1, 205, 213, 166, 6, 1, 5, 205, 183, 166, 6, 1, 5, + 205, 184, 2, 212, 191, 166, 6, 1, 205, 247, 166, 6, 1, 232, 248, 5, 205, + 183, 166, 6, 1, 249, 231, 205, 183, 166, 6, 1, 232, 248, 249, 231, 205, + 183, 166, 6, 1, 241, 205, 166, 6, 1, 232, 205, 166, 6, 1, 215, 118, 166, + 6, 1, 211, 27, 62, 166, 6, 1, 230, 76, 226, 37, 166, 5, 1, 251, 151, 166, + 5, 1, 249, 89, 166, 5, 1, 209, 37, 166, 5, 1, 240, 30, 166, 5, 1, 245, + 46, 166, 5, 1, 206, 24, 166, 5, 1, 205, 65, 166, 5, 1, 243, 191, 166, 5, + 1, 205, 90, 166, 5, 1, 232, 207, 166, 5, 1, 78, 232, 207, 166, 5, 1, 74, + 166, 5, 1, 245, 66, 166, 5, 1, 232, 33, 166, 5, 1, 229, 174, 166, 5, 1, + 226, 37, 166, 5, 1, 225, 195, 166, 5, 1, 222, 154, 166, 5, 1, 220, 198, + 166, 5, 1, 218, 141, 166, 5, 1, 214, 219, 166, 5, 1, 210, 131, 166, 5, 1, + 209, 245, 166, 5, 1, 241, 101, 166, 5, 1, 239, 31, 166, 5, 1, 222, 98, + 166, 5, 1, 221, 174, 166, 5, 1, 215, 119, 166, 5, 1, 210, 222, 166, 5, 1, + 248, 20, 166, 5, 1, 216, 2, 166, 5, 1, 206, 30, 166, 5, 1, 206, 32, 166, + 5, 1, 206, 63, 166, 5, 1, 214, 129, 155, 166, 5, 1, 205, 213, 166, 5, 1, + 5, 205, 183, 166, 5, 1, 5, 205, 184, 2, 212, 191, 166, 5, 1, 205, 247, + 166, 5, 1, 232, 248, 5, 205, 183, 166, 5, 1, 249, 231, 205, 183, 166, 5, + 1, 232, 248, 249, 231, 205, 183, 166, 5, 1, 241, 205, 166, 5, 1, 232, + 205, 166, 5, 1, 215, 118, 166, 5, 1, 211, 27, 62, 166, 5, 1, 230, 76, + 226, 37, 7, 6, 1, 230, 159, 2, 50, 134, 7, 5, 1, 230, 159, 2, 50, 134, 7, + 6, 1, 230, 159, 2, 226, 247, 211, 180, 7, 6, 1, 222, 68, 2, 91, 7, 6, 1, + 219, 150, 2, 212, 191, 7, 5, 1, 32, 2, 91, 7, 5, 1, 213, 11, 2, 245, 163, + 91, 7, 6, 1, 239, 156, 2, 245, 211, 7, 5, 1, 239, 156, 2, 245, 211, 7, 6, + 1, 232, 77, 2, 245, 211, 7, 5, 1, 232, 77, 2, 245, 211, 7, 6, 1, 205, + 160, 2, 245, 211, 7, 5, 1, 205, 160, 2, 245, 211, 7, 6, 1, 252, 144, 7, + 6, 1, 229, 29, 2, 109, 7, 6, 1, 201, 62, 7, 6, 1, 201, 252, 144, 7, 5, 1, + 209, 149, 2, 48, 109, 7, 6, 1, 207, 130, 2, 109, 7, 5, 1, 207, 130, 2, + 109, 7, 5, 1, 209, 149, 2, 247, 27, 7, 6, 1, 160, 239, 155, 7, 5, 1, 160, + 239, 155, 7, 5, 1, 212, 189, 221, 78, 7, 5, 1, 174, 2, 224, 40, 7, 5, 1, + 201, 219, 150, 2, 212, 191, 7, 5, 1, 148, 2, 114, 218, 149, 233, 25, 7, + 1, 5, 6, 201, 75, 7, 213, 183, 5, 1, 232, 203, 65, 1, 6, 209, 148, 7, 6, + 1, 218, 1, 2, 213, 109, 212, 191, 7, 6, 1, 205, 160, 2, 213, 109, 212, + 191, 81, 6, 1, 252, 166, 81, 5, 1, 252, 166, 81, 6, 1, 208, 211, 81, 5, + 1, 208, 211, 81, 6, 1, 240, 215, 81, 5, 1, 240, 215, 81, 6, 1, 246, 113, + 81, 5, 1, 246, 113, 81, 6, 1, 243, 89, 81, 5, 1, 243, 89, 81, 6, 1, 214, + 167, 81, 5, 1, 214, 167, 81, 6, 1, 205, 100, 81, 5, 1, 205, 100, 81, 6, + 1, 239, 83, 81, 5, 1, 239, 83, 81, 6, 1, 212, 21, 81, 5, 1, 212, 21, 81, + 6, 1, 237, 187, 81, 5, 1, 237, 187, 81, 6, 1, 232, 19, 81, 5, 1, 232, 19, + 81, 6, 1, 230, 72, 81, 5, 1, 230, 72, 81, 6, 1, 226, 254, 81, 5, 1, 226, + 254, 81, 6, 1, 224, 230, 81, 5, 1, 224, 230, 81, 6, 1, 230, 252, 81, 5, + 1, 230, 252, 81, 6, 1, 76, 81, 5, 1, 76, 81, 6, 1, 221, 53, 81, 5, 1, + 221, 53, 81, 6, 1, 218, 124, 81, 5, 1, 218, 124, 81, 6, 1, 215, 51, 81, + 5, 1, 215, 51, 81, 6, 1, 212, 151, 81, 5, 1, 212, 151, 81, 6, 1, 210, 18, + 81, 5, 1, 210, 18, 81, 6, 1, 241, 250, 81, 5, 1, 241, 250, 81, 6, 1, 231, + 145, 81, 5, 1, 231, 145, 81, 6, 1, 220, 93, 81, 5, 1, 220, 93, 81, 6, 1, + 222, 146, 81, 5, 1, 222, 146, 81, 6, 1, 245, 161, 252, 172, 81, 5, 1, + 245, 161, 252, 172, 81, 6, 1, 44, 81, 252, 200, 81, 5, 1, 44, 81, 252, + 200, 81, 6, 1, 247, 43, 243, 89, 81, 5, 1, 247, 43, 243, 89, 81, 6, 1, + 245, 161, 232, 19, 81, 5, 1, 245, 161, 232, 19, 81, 6, 1, 245, 161, 224, + 230, 81, 5, 1, 245, 161, 224, 230, 81, 6, 1, 247, 43, 224, 230, 81, 5, 1, + 247, 43, 224, 230, 81, 6, 1, 44, 81, 222, 146, 81, 5, 1, 44, 81, 222, + 146, 81, 6, 1, 217, 154, 81, 5, 1, 217, 154, 81, 6, 1, 247, 57, 215, 206, + 81, 5, 1, 247, 57, 215, 206, 81, 6, 1, 44, 81, 215, 206, 81, 5, 1, 44, + 81, 215, 206, 81, 6, 1, 44, 81, 242, 215, 81, 5, 1, 44, 81, 242, 215, 81, + 6, 1, 252, 185, 231, 150, 81, 5, 1, 252, 185, 231, 150, 81, 6, 1, 245, + 161, 238, 122, 81, 5, 1, 245, 161, 238, 122, 81, 6, 1, 44, 81, 238, 122, + 81, 5, 1, 44, 81, 238, 122, 81, 6, 1, 44, 81, 155, 81, 5, 1, 44, 81, 155, + 81, 6, 1, 230, 158, 155, 81, 5, 1, 230, 158, 155, 81, 6, 1, 44, 81, 239, + 49, 81, 5, 1, 44, 81, 239, 49, 81, 6, 1, 44, 81, 239, 86, 81, 5, 1, 44, + 81, 239, 86, 81, 6, 1, 44, 81, 240, 210, 81, 5, 1, 44, 81, 240, 210, 81, + 6, 1, 44, 81, 245, 69, 81, 5, 1, 44, 81, 245, 69, 81, 6, 1, 44, 81, 215, + 173, 81, 5, 1, 44, 81, 215, 173, 81, 6, 1, 44, 223, 187, 215, 173, 81, 5, + 1, 44, 223, 187, 215, 173, 81, 6, 1, 44, 223, 187, 225, 25, 81, 5, 1, 44, + 223, 187, 225, 25, 81, 6, 1, 44, 223, 187, 223, 125, 81, 5, 1, 44, 223, + 187, 223, 125, 81, 6, 1, 44, 223, 187, 207, 66, 81, 5, 1, 44, 223, 187, + 207, 66, 81, 16, 232, 41, 81, 16, 226, 255, 218, 124, 81, 16, 221, 54, + 218, 124, 81, 16, 214, 17, 81, 16, 212, 152, 218, 124, 81, 16, 231, 146, + 218, 124, 81, 16, 215, 174, 215, 51, 81, 6, 1, 247, 43, 215, 206, 81, 5, + 1, 247, 43, 215, 206, 81, 6, 1, 247, 43, 240, 210, 81, 5, 1, 247, 43, + 240, 210, 81, 36, 224, 231, 52, 81, 36, 214, 123, 251, 217, 81, 36, 214, + 123, 230, 17, 81, 6, 1, 249, 178, 231, 150, 81, 5, 1, 249, 178, 231, 150, + 81, 44, 223, 187, 241, 82, 213, 251, 81, 44, 223, 187, 245, 104, 219, + 196, 83, 81, 44, 223, 187, 233, 48, 219, 196, 83, 81, 44, 223, 187, 209, + 24, 245, 79, 81, 241, 116, 119, 239, 121, 81, 241, 82, 213, 251, 81, 226, + 140, 245, 79, 108, 5, 1, 252, 122, 108, 5, 1, 250, 140, 108, 5, 1, 240, + 214, 108, 5, 1, 245, 31, 108, 5, 1, 243, 41, 108, 5, 1, 208, 197, 108, 5, + 1, 205, 88, 108, 5, 1, 212, 174, 108, 5, 1, 233, 68, 108, 5, 1, 232, 27, + 108, 5, 1, 230, 82, 108, 5, 1, 227, 221, 108, 5, 1, 225, 200, 108, 5, 1, + 222, 165, 108, 5, 1, 221, 231, 108, 5, 1, 205, 77, 108, 5, 1, 219, 95, + 108, 5, 1, 217, 151, 108, 5, 1, 212, 162, 108, 5, 1, 209, 234, 108, 5, 1, + 221, 85, 108, 5, 1, 231, 155, 108, 5, 1, 240, 90, 108, 5, 1, 220, 4, 108, + 5, 1, 215, 171, 108, 5, 1, 248, 45, 108, 5, 1, 248, 226, 108, 5, 1, 232, + 154, 108, 5, 1, 247, 240, 108, 5, 1, 248, 95, 108, 5, 1, 206, 179, 108, + 5, 1, 232, 167, 108, 5, 1, 239, 138, 108, 5, 1, 239, 71, 108, 5, 1, 239, + 6, 108, 5, 1, 207, 51, 108, 5, 1, 239, 95, 108, 5, 1, 238, 146, 108, 5, + 1, 205, 249, 108, 5, 1, 252, 237, 211, 200, 1, 190, 211, 200, 1, 206, + 105, 211, 200, 1, 206, 104, 211, 200, 1, 206, 94, 211, 200, 1, 206, 92, + 211, 200, 1, 250, 14, 253, 23, 206, 87, 211, 200, 1, 206, 87, 211, 200, + 1, 206, 102, 211, 200, 1, 206, 99, 211, 200, 1, 206, 101, 211, 200, 1, + 206, 100, 211, 200, 1, 206, 15, 211, 200, 1, 206, 96, 211, 200, 1, 206, + 85, 211, 200, 1, 210, 167, 206, 85, 211, 200, 1, 206, 82, 211, 200, 1, + 206, 90, 211, 200, 1, 250, 14, 253, 23, 206, 90, 211, 200, 1, 210, 167, + 206, 90, 211, 200, 1, 206, 89, 211, 200, 1, 206, 109, 211, 200, 1, 206, + 83, 211, 200, 1, 210, 167, 206, 83, 211, 200, 1, 206, 72, 211, 200, 1, + 210, 167, 206, 72, 211, 200, 1, 206, 11, 211, 200, 1, 206, 54, 211, 200, + 1, 252, 211, 206, 54, 211, 200, 1, 210, 167, 206, 54, 211, 200, 1, 206, + 81, 211, 200, 1, 206, 80, 211, 200, 1, 206, 77, 211, 200, 1, 210, 167, + 206, 91, 211, 200, 1, 210, 167, 206, 75, 211, 200, 1, 206, 73, 211, 200, + 1, 205, 213, 211, 200, 1, 206, 70, 211, 200, 1, 206, 69, 211, 200, 1, + 206, 93, 211, 200, 1, 210, 167, 206, 93, 211, 200, 1, 251, 155, 206, 93, + 211, 200, 1, 206, 68, 211, 200, 1, 206, 66, 211, 200, 1, 206, 67, 211, + 200, 1, 206, 65, 211, 200, 1, 206, 64, 211, 200, 1, 206, 103, 211, 200, + 1, 206, 62, 211, 200, 1, 206, 60, 211, 200, 1, 206, 59, 211, 200, 1, 206, + 58, 211, 200, 1, 206, 55, 211, 200, 1, 212, 143, 206, 55, 211, 200, 1, + 206, 53, 211, 200, 1, 206, 52, 211, 200, 1, 205, 247, 211, 200, 65, 1, + 230, 131, 83, 211, 200, 216, 40, 83, 211, 200, 107, 232, 117, 31, 4, 229, + 143, 31, 4, 226, 180, 31, 4, 218, 122, 31, 4, 214, 192, 31, 4, 215, 157, + 31, 4, 249, 183, 31, 4, 211, 129, 31, 4, 247, 173, 31, 4, 224, 65, 31, 4, + 223, 109, 31, 4, 240, 25, 222, 230, 31, 4, 205, 18, 31, 4, 245, 49, 31, + 4, 246, 23, 31, 4, 232, 121, 31, 4, 211, 252, 31, 4, 248, 31, 31, 4, 221, + 65, 31, 4, 220, 210, 31, 4, 240, 105, 31, 4, 240, 101, 31, 4, 240, 102, + 31, 4, 240, 103, 31, 4, 214, 96, 31, 4, 214, 51, 31, 4, 214, 64, 31, 4, + 214, 95, 31, 4, 214, 69, 31, 4, 214, 70, 31, 4, 214, 56, 31, 4, 248, 171, + 31, 4, 248, 150, 31, 4, 248, 152, 31, 4, 248, 170, 31, 4, 248, 168, 31, + 4, 248, 169, 31, 4, 248, 151, 31, 4, 204, 238, 31, 4, 204, 216, 31, 4, + 204, 229, 31, 4, 204, 237, 31, 4, 204, 232, 31, 4, 204, 233, 31, 4, 204, + 221, 31, 4, 248, 166, 31, 4, 248, 153, 31, 4, 248, 155, 31, 4, 248, 165, + 31, 4, 248, 163, 31, 4, 248, 164, 31, 4, 248, 154, 31, 4, 219, 162, 31, + 4, 219, 152, 31, 4, 219, 158, 31, 4, 219, 161, 31, 4, 219, 159, 31, 4, + 219, 160, 31, 4, 219, 157, 31, 4, 230, 169, 31, 4, 230, 161, 31, 4, 230, + 164, 31, 4, 230, 168, 31, 4, 230, 165, 31, 4, 230, 166, 31, 4, 230, 162, + 31, 4, 206, 139, 31, 4, 206, 126, 31, 4, 206, 134, 31, 4, 206, 138, 31, + 4, 206, 136, 31, 4, 206, 137, 31, 4, 206, 133, 31, 4, 239, 167, 31, 4, + 239, 157, 31, 4, 239, 160, 31, 4, 239, 166, 31, 4, 239, 162, 31, 4, 239, + 163, 31, 4, 239, 159, 36, 34, 1, 250, 61, 36, 34, 1, 209, 39, 36, 34, 1, + 240, 85, 36, 34, 1, 246, 9, 36, 34, 1, 205, 72, 36, 34, 1, 205, 93, 36, + 34, 1, 172, 36, 34, 1, 243, 68, 36, 34, 1, 243, 50, 36, 34, 1, 243, 41, + 36, 34, 1, 76, 36, 34, 1, 221, 174, 36, 34, 1, 242, 235, 36, 34, 1, 242, + 225, 36, 34, 1, 212, 131, 36, 34, 1, 155, 36, 34, 1, 210, 237, 36, 34, 1, + 248, 82, 36, 34, 1, 216, 2, 36, 34, 1, 215, 217, 36, 34, 1, 241, 205, 36, + 34, 1, 242, 221, 36, 34, 1, 62, 36, 34, 1, 233, 129, 36, 34, 1, 245, 67, + 36, 34, 1, 226, 158, 209, 249, 36, 34, 1, 206, 65, 36, 34, 1, 205, 213, + 36, 34, 1, 232, 247, 62, 36, 34, 1, 229, 180, 205, 183, 36, 34, 1, 249, + 231, 205, 183, 36, 34, 1, 232, 247, 249, 231, 205, 183, 48, 252, 109, + 213, 178, 227, 187, 48, 252, 109, 244, 21, 213, 178, 227, 187, 47, 213, + 178, 145, 48, 213, 178, 145, 47, 244, 21, 213, 178, 145, 48, 244, 21, + 213, 178, 145, 219, 81, 233, 12, 227, 187, 219, 81, 244, 21, 233, 12, + 227, 187, 244, 21, 211, 67, 227, 187, 47, 211, 67, 145, 48, 211, 67, 145, + 219, 81, 214, 107, 47, 219, 81, 222, 167, 145, 48, 219, 81, 222, 167, + 145, 243, 105, 247, 89, 221, 227, 241, 138, 221, 227, 218, 224, 241, 138, + 221, 227, 237, 236, 244, 21, 222, 225, 173, 252, 118, 167, 252, 118, 244, + 21, 218, 162, 252, 108, 50, 222, 222, 237, 239, 233, 2, 233, 10, 222, 19, + 249, 130, 237, 240, 2, 245, 166, 211, 181, 2, 218, 149, 52, 47, 114, 221, + 219, 145, 48, 114, 221, 219, 145, 211, 181, 2, 67, 52, 211, 181, 2, 67, + 55, 47, 79, 250, 129, 2, 219, 190, 48, 79, 250, 129, 2, 219, 190, 211, + 102, 47, 160, 145, 211, 102, 48, 160, 145, 249, 154, 47, 160, 145, 249, + 154, 48, 160, 145, 47, 215, 73, 106, 145, 48, 215, 73, 106, 145, 47, 50, + 221, 216, 48, 50, 221, 216, 118, 177, 131, 119, 67, 220, 71, 119, 67, + 131, 118, 177, 220, 71, 98, 241, 125, 67, 220, 71, 241, 204, 67, 83, 218, + 224, 219, 196, 83, 79, 211, 180, 218, 149, 220, 204, 206, 232, 216, 40, + 226, 247, 245, 23, 201, 247, 155, 219, 81, 245, 23, 219, 81, 247, 155, + 201, 216, 52, 246, 129, 2, 47, 239, 207, 246, 129, 2, 48, 239, 207, 201, + 246, 128, 211, 102, 160, 217, 77, 53, 210, 109, 246, 78, 211, 237, 246, + 78, 214, 8, 241, 82, 213, 251, 79, 215, 10, 245, 21, 207, 14, 79, 229, + 205, 248, 211, 50, 237, 239, 218, 224, 247, 155, 50, 229, 93, 219, 180, + 83, 10, 37, 218, 251, 10, 37, 247, 202, 10, 37, 217, 80, 102, 10, 37, + 217, 80, 105, 10, 37, 217, 80, 142, 10, 37, 221, 114, 10, 37, 249, 140, + 10, 37, 212, 206, 10, 37, 231, 59, 102, 10, 37, 231, 59, 105, 10, 37, + 245, 76, 10, 37, 217, 84, 10, 37, 5, 102, 10, 37, 5, 105, 10, 37, 230, + 101, 102, 10, 37, 230, 101, 105, 10, 37, 230, 101, 142, 10, 37, 230, 101, + 139, 10, 37, 214, 204, 10, 37, 211, 239, 10, 37, 214, 202, 102, 10, 37, + 214, 202, 105, 10, 37, 239, 61, 102, 10, 37, 239, 61, 105, 10, 37, 239, + 107, 10, 37, 219, 71, 10, 37, 248, 28, 10, 37, 213, 154, 10, 37, 226, + 144, 10, 37, 246, 7, 10, 37, 226, 136, 10, 37, 247, 220, 10, 37, 207, 70, + 102, 10, 37, 207, 70, 105, 10, 37, 241, 219, 10, 37, 221, 186, 102, 10, + 37, 221, 186, 105, 10, 37, 215, 46, 160, 211, 62, 210, 248, 10, 37, 247, + 75, 10, 37, 245, 40, 10, 37, 232, 195, 10, 37, 249, 177, 73, 247, 186, + 10, 37, 242, 150, 10, 37, 214, 125, 102, 10, 37, 214, 125, 105, 10, 37, + 250, 142, 10, 37, 215, 53, 10, 37, 249, 31, 215, 53, 10, 37, 225, 92, + 102, 10, 37, 225, 92, 105, 10, 37, 225, 92, 142, 10, 37, 225, 92, 139, + 10, 37, 227, 70, 10, 37, 215, 208, 10, 37, 219, 77, 10, 37, 242, 174, 10, + 37, 222, 179, 10, 37, 249, 109, 102, 10, 37, 249, 109, 105, 10, 37, 227, + 114, 10, 37, 226, 139, 10, 37, 239, 240, 102, 10, 37, 239, 240, 105, 10, + 37, 239, 240, 142, 10, 37, 211, 198, 10, 37, 247, 185, 10, 37, 207, 36, + 102, 10, 37, 207, 36, 105, 10, 37, 249, 31, 217, 74, 10, 37, 215, 46, + 238, 69, 10, 37, 238, 69, 10, 37, 249, 31, 214, 136, 10, 37, 249, 31, + 215, 203, 10, 37, 241, 148, 10, 37, 249, 31, 248, 189, 10, 37, 215, 46, + 207, 87, 10, 37, 207, 88, 102, 10, 37, 207, 88, 105, 10, 37, 247, 223, + 10, 37, 249, 31, 240, 11, 10, 37, 152, 102, 10, 37, 152, 105, 10, 37, + 249, 31, 229, 125, 10, 37, 249, 31, 240, 196, 10, 37, 226, 132, 102, 10, + 37, 226, 132, 105, 10, 37, 219, 83, 10, 37, 249, 186, 10, 37, 249, 31, + 212, 168, 230, 52, 10, 37, 249, 31, 230, 53, 10, 37, 249, 31, 207, 9, 10, + 37, 249, 31, 241, 166, 10, 37, 243, 114, 102, 10, 37, 243, 114, 105, 10, + 37, 243, 114, 142, 10, 37, 249, 31, 243, 113, 10, 37, 239, 68, 10, 37, + 249, 31, 238, 65, 10, 37, 249, 173, 10, 37, 240, 69, 10, 37, 249, 31, + 241, 213, 10, 37, 249, 31, 249, 218, 10, 37, 249, 31, 217, 165, 10, 37, + 215, 46, 207, 28, 10, 37, 215, 46, 206, 44, 10, 37, 249, 31, 241, 99, 10, + 37, 232, 202, 242, 178, 10, 37, 249, 31, 242, 178, 10, 37, 232, 202, 211, + 103, 10, 37, 249, 31, 211, 103, 10, 37, 232, 202, 243, 255, 10, 37, 249, + 31, 243, 255, 10, 37, 210, 141, 10, 37, 232, 202, 210, 141, 10, 37, 249, + 31, 210, 141, 68, 37, 102, 68, 37, 229, 205, 68, 37, 245, 23, 68, 37, + 214, 235, 68, 37, 217, 79, 68, 37, 109, 68, 37, 105, 68, 37, 229, 231, + 68, 37, 227, 221, 68, 37, 230, 31, 68, 37, 243, 18, 68, 37, 193, 68, 37, + 130, 249, 140, 68, 37, 247, 77, 68, 37, 237, 181, 68, 37, 212, 206, 68, + 37, 222, 142, 249, 140, 68, 37, 231, 58, 68, 37, 220, 161, 68, 37, 206, + 223, 68, 37, 214, 118, 68, 37, 48, 222, 142, 249, 140, 68, 37, 239, 7, + 243, 36, 68, 37, 212, 98, 68, 37, 245, 76, 68, 37, 217, 84, 68, 37, 247, + 202, 68, 37, 220, 117, 68, 37, 252, 219, 68, 37, 226, 123, 68, 37, 243, + 36, 68, 37, 243, 120, 68, 37, 217, 105, 68, 37, 240, 19, 68, 37, 240, 20, + 214, 217, 68, 37, 242, 177, 68, 37, 249, 230, 68, 37, 206, 244, 68, 37, + 248, 49, 68, 37, 218, 106, 68, 37, 233, 64, 68, 37, 214, 215, 68, 37, + 230, 100, 68, 37, 247, 87, 68, 37, 214, 111, 68, 37, 226, 128, 68, 37, + 218, 138, 68, 37, 206, 229, 68, 37, 222, 159, 68, 37, 210, 148, 68, 37, + 243, 239, 68, 37, 215, 144, 211, 239, 68, 37, 244, 21, 247, 202, 68, 37, + 152, 213, 230, 68, 37, 118, 239, 102, 68, 37, 215, 150, 68, 37, 249, 146, + 68, 37, 214, 201, 68, 37, 249, 113, 68, 37, 214, 7, 68, 37, 239, 60, 68, + 37, 239, 122, 68, 37, 245, 26, 68, 37, 239, 107, 68, 37, 249, 130, 68, + 37, 219, 71, 68, 37, 217, 92, 68, 37, 245, 106, 68, 37, 251, 160, 68, 37, + 214, 107, 68, 37, 224, 42, 68, 37, 213, 154, 68, 37, 217, 116, 68, 37, + 226, 144, 68, 37, 211, 61, 68, 37, 230, 127, 68, 37, 213, 251, 68, 37, + 246, 7, 68, 37, 207, 50, 68, 37, 245, 52, 224, 42, 68, 37, 247, 151, 68, + 37, 241, 75, 68, 37, 247, 214, 68, 37, 214, 12, 68, 37, 207, 69, 68, 37, + 241, 219, 68, 37, 247, 210, 68, 37, 242, 35, 68, 37, 50, 206, 195, 68, + 37, 160, 211, 62, 210, 248, 68, 37, 214, 228, 68, 37, 242, 45, 68, 37, + 247, 75, 68, 37, 245, 40, 68, 37, 220, 114, 68, 37, 232, 195, 68, 37, + 227, 92, 68, 37, 211, 179, 68, 37, 213, 104, 68, 37, 229, 225, 68, 37, + 209, 175, 68, 37, 241, 249, 68, 37, 249, 177, 73, 247, 186, 68, 37, 215, + 76, 68, 37, 244, 21, 212, 92, 68, 37, 207, 23, 68, 37, 214, 243, 68, 37, + 245, 94, 68, 37, 242, 150, 68, 37, 214, 139, 68, 37, 45, 68, 37, 213, + 253, 68, 37, 214, 124, 68, 37, 211, 82, 68, 37, 239, 247, 68, 37, 248, + 176, 68, 37, 214, 30, 68, 37, 250, 142, 68, 37, 218, 203, 68, 37, 215, + 53, 68, 37, 232, 188, 68, 37, 225, 91, 68, 37, 215, 208, 68, 37, 242, 23, + 68, 37, 222, 179, 68, 37, 252, 117, 68, 37, 220, 225, 68, 37, 243, 124, + 68, 37, 249, 108, 68, 37, 227, 114, 68, 37, 226, 203, 68, 37, 216, 58, + 68, 37, 251, 247, 68, 37, 226, 139, 68, 37, 211, 107, 68, 37, 222, 130, + 68, 37, 249, 180, 68, 37, 213, 249, 68, 37, 247, 161, 68, 37, 239, 239, + 68, 37, 211, 198, 68, 37, 233, 28, 68, 37, 249, 191, 68, 37, 207, 88, + 243, 36, 68, 37, 247, 185, 68, 37, 207, 35, 68, 37, 217, 74, 68, 37, 238, + 69, 68, 37, 214, 136, 68, 37, 209, 63, 68, 37, 250, 57, 68, 37, 221, 17, + 68, 37, 250, 165, 68, 37, 215, 203, 68, 37, 219, 31, 68, 37, 218, 35, 68, + 37, 241, 148, 68, 37, 249, 179, 68, 37, 248, 189, 68, 37, 249, 207, 68, + 37, 226, 141, 68, 37, 207, 87, 68, 37, 247, 223, 68, 37, 207, 5, 68, 37, + 245, 87, 68, 37, 208, 198, 68, 37, 240, 11, 68, 37, 229, 125, 68, 37, + 240, 196, 68, 37, 226, 131, 68, 37, 214, 234, 68, 37, 215, 144, 212, 190, + 249, 218, 68, 37, 219, 83, 68, 37, 249, 186, 68, 37, 206, 218, 68, 37, + 242, 67, 68, 37, 230, 52, 68, 37, 212, 168, 230, 52, 68, 37, 230, 48, 68, + 37, 214, 164, 68, 37, 230, 53, 68, 37, 207, 9, 68, 37, 241, 166, 68, 37, + 243, 113, 68, 37, 239, 68, 68, 37, 241, 114, 68, 37, 238, 65, 68, 37, + 249, 173, 68, 37, 212, 177, 68, 37, 239, 129, 68, 37, 241, 242, 68, 37, + 217, 193, 207, 5, 68, 37, 248, 178, 68, 37, 240, 69, 68, 37, 241, 213, + 68, 37, 249, 218, 68, 37, 217, 165, 68, 37, 245, 248, 68, 37, 207, 28, + 68, 37, 239, 42, 68, 37, 206, 44, 68, 37, 226, 214, 68, 37, 249, 202, 68, + 37, 243, 46, 68, 37, 241, 99, 68, 37, 211, 34, 68, 37, 243, 241, 68, 37, + 219, 65, 68, 37, 224, 44, 68, 37, 242, 178, 68, 37, 211, 103, 68, 37, + 243, 255, 68, 37, 210, 141, 68, 37, 241, 168, 128, 245, 209, 157, 47, + 211, 130, 218, 167, 128, 245, 209, 157, 84, 211, 130, 55, 128, 245, 209, + 157, 47, 211, 130, 226, 247, 23, 218, 167, 128, 245, 209, 157, 84, 211, + 130, 226, 247, 23, 55, 128, 245, 209, 157, 241, 82, 213, 126, 128, 245, + 209, 157, 213, 127, 241, 98, 52, 128, 245, 209, 157, 213, 127, 241, 98, + 55, 128, 245, 209, 157, 213, 127, 241, 98, 230, 46, 128, 245, 209, 157, + 213, 127, 241, 98, 209, 203, 230, 46, 128, 245, 209, 157, 213, 127, 241, + 98, 209, 203, 218, 167, 128, 245, 209, 157, 213, 127, 241, 98, 229, 92, + 230, 46, 128, 245, 209, 157, 222, 85, 128, 214, 153, 128, 247, 155, 128, + 241, 82, 213, 251, 245, 84, 83, 232, 189, 233, 47, 214, 29, 93, 128, 232, + 218, 83, 128, 247, 188, 83, 128, 43, 205, 85, 47, 252, 109, 145, 48, 252, + 109, 145, 47, 50, 252, 109, 145, 48, 50, 252, 109, 145, 47, 247, 92, 145, + 48, 247, 92, 145, 47, 59, 247, 92, 145, 48, 59, 247, 92, 145, 47, 60, + 230, 16, 145, 48, 60, 230, 16, 145, 220, 174, 83, 240, 138, 83, 47, 211, + 93, 215, 204, 145, 48, 211, 93, 215, 204, 145, 47, 59, 230, 16, 145, 48, + 59, 230, 16, 145, 47, 59, 211, 93, 215, 204, 145, 48, 59, 211, 93, 215, + 204, 145, 47, 59, 49, 145, 48, 59, 49, 145, 207, 65, 246, 78, 218, 224, + 50, 220, 128, 219, 180, 83, 50, 220, 128, 219, 180, 83, 114, 50, 220, + 128, 219, 180, 83, 220, 174, 141, 242, 67, 239, 100, 223, 177, 102, 239, + 100, 223, 177, 105, 239, 100, 223, 177, 142, 239, 100, 223, 177, 139, + 239, 100, 223, 177, 168, 239, 100, 223, 177, 184, 239, 100, 223, 177, + 195, 239, 100, 223, 177, 193, 239, 100, 223, 177, 200, 128, 229, 254, + 135, 83, 128, 218, 142, 135, 83, 128, 245, 217, 135, 83, 128, 243, 17, + 135, 83, 25, 215, 41, 67, 135, 83, 25, 50, 67, 135, 83, 207, 61, 246, 78, + 79, 232, 26, 218, 252, 83, 79, 232, 26, 218, 252, 2, 208, 170, 214, 165, + 83, 79, 232, 26, 218, 252, 141, 209, 203, 239, 121, 79, 232, 26, 218, + 252, 2, 208, 170, 214, 165, 141, 209, 203, 239, 121, 79, 232, 26, 218, + 252, 141, 229, 92, 239, 121, 39, 220, 174, 83, 128, 212, 110, 229, 206, + 242, 20, 216, 40, 93, 239, 100, 223, 177, 212, 98, 239, 100, 223, 177, + 210, 123, 239, 100, 223, 177, 212, 3, 79, 128, 232, 218, 83, 227, 171, + 83, 221, 211, 252, 140, 83, 128, 54, 233, 49, 128, 160, 241, 235, 214, + 153, 161, 1, 5, 62, 161, 1, 62, 161, 1, 5, 74, 161, 1, 74, 161, 1, 5, 71, + 161, 1, 71, 161, 1, 5, 75, 161, 1, 75, 161, 1, 5, 76, 161, 1, 76, 161, 1, + 172, 161, 1, 240, 244, 161, 1, 231, 123, 161, 1, 240, 61, 161, 1, 230, + 236, 161, 1, 239, 213, 161, 1, 231, 224, 161, 1, 240, 170, 161, 1, 231, + 53, 161, 1, 240, 19, 161, 1, 217, 199, 161, 1, 205, 116, 161, 1, 215, 80, + 161, 1, 205, 40, 161, 1, 213, 203, 161, 1, 205, 9, 161, 1, 217, 86, 161, + 1, 205, 93, 161, 1, 214, 193, 161, 1, 205, 19, 161, 1, 212, 219, 161, 1, + 246, 145, 161, 1, 211, 211, 161, 1, 245, 168, 161, 1, 5, 210, 170, 161, + 1, 210, 170, 161, 1, 243, 237, 161, 1, 212, 131, 161, 1, 246, 9, 161, 1, + 124, 161, 1, 245, 51, 161, 1, 199, 161, 1, 224, 230, 161, 1, 223, 217, + 161, 1, 225, 110, 161, 1, 224, 67, 161, 1, 155, 161, 1, 250, 183, 161, 1, + 179, 161, 1, 239, 11, 161, 1, 249, 244, 161, 1, 221, 53, 161, 1, 238, 42, + 161, 1, 249, 101, 161, 1, 220, 82, 161, 1, 239, 71, 161, 1, 250, 61, 161, + 1, 221, 174, 161, 1, 238, 149, 161, 1, 249, 184, 161, 1, 220, 211, 161, + 1, 185, 161, 1, 226, 254, 161, 1, 226, 114, 161, 1, 227, 119, 161, 1, + 226, 181, 161, 1, 5, 190, 161, 1, 190, 161, 1, 5, 205, 213, 161, 1, 205, + 213, 161, 1, 5, 205, 247, 161, 1, 205, 247, 161, 1, 219, 113, 161, 1, + 218, 208, 161, 1, 218, 50, 161, 1, 219, 51, 161, 1, 218, 124, 161, 1, 5, + 207, 96, 161, 1, 207, 96, 161, 1, 207, 20, 161, 1, 207, 51, 161, 1, 206, + 250, 161, 1, 226, 33, 161, 1, 207, 148, 161, 1, 5, 172, 161, 1, 5, 231, + 224, 36, 231, 248, 208, 170, 214, 165, 83, 36, 231, 248, 216, 57, 214, + 165, 83, 231, 248, 208, 170, 214, 165, 83, 231, 248, 216, 57, 214, 165, + 83, 161, 232, 218, 83, 161, 208, 170, 232, 218, 83, 161, 245, 128, 205, + 228, 231, 248, 50, 237, 239, 64, 1, 5, 62, 64, 1, 62, 64, 1, 5, 74, 64, + 1, 74, 64, 1, 5, 71, 64, 1, 71, 64, 1, 5, 75, 64, 1, 75, 64, 1, 5, 76, + 64, 1, 76, 64, 1, 172, 64, 1, 240, 244, 64, 1, 231, 123, 64, 1, 240, 61, + 64, 1, 230, 236, 64, 1, 239, 213, 64, 1, 231, 224, 64, 1, 240, 170, 64, + 1, 231, 53, 64, 1, 240, 19, 64, 1, 217, 199, 64, 1, 205, 116, 64, 1, 215, + 80, 64, 1, 205, 40, 64, 1, 213, 203, 64, 1, 205, 9, 64, 1, 217, 86, 64, + 1, 205, 93, 64, 1, 214, 193, 64, 1, 205, 19, 64, 1, 212, 219, 64, 1, 246, + 145, 64, 1, 211, 211, 64, 1, 245, 168, 64, 1, 5, 210, 170, 64, 1, 210, + 170, 64, 1, 243, 237, 64, 1, 212, 131, 64, 1, 246, 9, 64, 1, 124, 64, 1, + 245, 51, 64, 1, 199, 64, 1, 224, 230, 64, 1, 223, 217, 64, 1, 225, 110, + 64, 1, 224, 67, 64, 1, 155, 64, 1, 250, 183, 64, 1, 179, 64, 1, 239, 11, + 64, 1, 249, 244, 64, 1, 221, 53, 64, 1, 238, 42, 64, 1, 249, 101, 64, 1, + 220, 82, 64, 1, 239, 71, 64, 1, 250, 61, 64, 1, 221, 174, 64, 1, 238, + 149, 64, 1, 249, 184, 64, 1, 220, 211, 64, 1, 185, 64, 1, 226, 254, 64, + 1, 226, 114, 64, 1, 227, 119, 64, 1, 226, 181, 64, 1, 5, 190, 64, 1, 190, + 64, 1, 5, 205, 213, 64, 1, 205, 213, 64, 1, 5, 205, 247, 64, 1, 205, 247, + 64, 1, 219, 113, 64, 1, 218, 208, 64, 1, 218, 50, 64, 1, 219, 51, 64, 1, + 218, 124, 64, 1, 5, 207, 96, 64, 1, 207, 96, 64, 1, 207, 20, 64, 1, 207, + 51, 64, 1, 206, 250, 64, 1, 226, 33, 64, 1, 207, 148, 64, 1, 5, 172, 64, + 1, 5, 231, 224, 64, 1, 209, 70, 64, 1, 208, 214, 64, 1, 209, 39, 64, 1, + 208, 173, 64, 226, 247, 245, 23, 231, 248, 220, 106, 214, 165, 83, 64, + 232, 218, 83, 64, 208, 170, 232, 218, 83, 64, 245, 128, 231, 20, 249, + 163, 1, 251, 150, 249, 163, 1, 222, 67, 249, 163, 1, 229, 28, 249, 163, + 1, 242, 139, 249, 163, 1, 246, 240, 249, 163, 1, 213, 10, 249, 163, 1, + 226, 33, 249, 163, 1, 149, 249, 163, 1, 241, 55, 249, 163, 1, 232, 76, + 249, 163, 1, 239, 155, 249, 163, 1, 232, 203, 249, 163, 1, 220, 27, 249, + 163, 1, 206, 195, 249, 163, 1, 205, 82, 249, 163, 1, 248, 111, 249, 163, + 1, 216, 4, 249, 163, 1, 137, 249, 163, 1, 205, 159, 249, 163, 1, 249, 34, + 249, 163, 1, 182, 249, 163, 1, 62, 249, 163, 1, 76, 249, 163, 1, 75, 249, + 163, 1, 243, 92, 249, 163, 1, 252, 205, 249, 163, 1, 243, 90, 249, 163, + 1, 251, 184, 249, 163, 1, 222, 97, 249, 163, 1, 252, 122, 249, 163, 1, + 243, 41, 249, 163, 1, 252, 114, 249, 163, 1, 243, 28, 249, 163, 1, 242, + 235, 249, 163, 1, 74, 249, 163, 1, 71, 249, 163, 1, 232, 216, 249, 163, + 1, 209, 148, 249, 163, 1, 225, 79, 249, 163, 1, 240, 23, 249, 163, 1, + 233, 103, 25, 1, 231, 84, 25, 1, 214, 88, 25, 1, 231, 77, 25, 1, 224, + 223, 25, 1, 224, 221, 25, 1, 224, 220, 25, 1, 211, 193, 25, 1, 214, 77, + 25, 1, 218, 198, 25, 1, 218, 193, 25, 1, 218, 190, 25, 1, 218, 183, 25, + 1, 218, 178, 25, 1, 218, 173, 25, 1, 218, 184, 25, 1, 218, 196, 25, 1, + 226, 240, 25, 1, 221, 39, 25, 1, 214, 85, 25, 1, 221, 28, 25, 1, 215, 33, + 25, 1, 214, 82, 25, 1, 233, 125, 25, 1, 247, 246, 25, 1, 214, 92, 25, 1, + 248, 54, 25, 1, 231, 143, 25, 1, 212, 15, 25, 1, 221, 76, 25, 1, 239, 3, + 25, 1, 62, 25, 1, 252, 248, 25, 1, 190, 25, 1, 206, 98, 25, 1, 243, 6, + 25, 1, 75, 25, 1, 206, 39, 25, 1, 206, 52, 25, 1, 76, 25, 1, 207, 96, 25, + 1, 207, 92, 25, 1, 222, 206, 25, 1, 205, 247, 25, 1, 71, 25, 1, 207, 38, + 25, 1, 207, 51, 25, 1, 207, 20, 25, 1, 205, 213, 25, 1, 242, 192, 25, 1, + 206, 11, 25, 1, 74, 25, 241, 232, 25, 1, 214, 86, 25, 1, 224, 213, 25, 1, + 224, 215, 25, 1, 224, 218, 25, 1, 218, 191, 25, 1, 218, 172, 25, 1, 218, + 180, 25, 1, 218, 185, 25, 1, 218, 170, 25, 1, 226, 233, 25, 1, 226, 230, + 25, 1, 226, 234, 25, 1, 232, 13, 25, 1, 221, 34, 25, 1, 221, 20, 25, 1, + 221, 26, 25, 1, 221, 23, 25, 1, 221, 37, 25, 1, 221, 21, 25, 1, 232, 11, + 25, 1, 232, 9, 25, 1, 215, 26, 25, 1, 215, 24, 25, 1, 215, 16, 25, 1, + 215, 21, 25, 1, 215, 31, 25, 1, 221, 247, 25, 1, 214, 89, 25, 1, 206, 29, + 25, 1, 206, 25, 25, 1, 206, 26, 25, 1, 232, 12, 25, 1, 214, 90, 25, 1, + 206, 35, 25, 1, 205, 241, 25, 1, 205, 240, 25, 1, 205, 243, 25, 1, 205, + 204, 25, 1, 205, 205, 25, 1, 205, 208, 25, 1, 252, 30, 25, 1, 252, 24, + 128, 252, 98, 229, 194, 83, 128, 252, 98, 218, 225, 83, 128, 252, 98, + 119, 83, 128, 252, 98, 118, 83, 128, 252, 98, 129, 83, 128, 252, 98, 241, + 125, 83, 128, 252, 98, 211, 102, 83, 128, 252, 98, 226, 247, 83, 128, + 252, 98, 249, 154, 83, 128, 252, 98, 241, 215, 83, 128, 252, 98, 217, 80, + 83, 128, 252, 98, 212, 11, 83, 128, 252, 98, 241, 118, 83, 128, 252, 98, + 239, 57, 83, 128, 252, 98, 243, 121, 83, 128, 252, 98, 227, 222, 83, 249, + 163, 1, 249, 101, 249, 163, 1, 205, 40, 249, 163, 1, 232, 162, 249, 163, + 1, 239, 213, 249, 163, 1, 243, 104, 249, 163, 1, 243, 25, 249, 163, 1, + 222, 152, 249, 163, 1, 222, 156, 249, 163, 1, 232, 243, 249, 163, 1, 252, + 100, 249, 163, 1, 233, 35, 249, 163, 1, 209, 211, 249, 163, 1, 233, 85, + 249, 163, 1, 225, 57, 249, 163, 1, 252, 199, 249, 163, 1, 251, 179, 249, + 163, 1, 252, 136, 249, 163, 1, 222, 173, 249, 163, 1, 222, 158, 249, 163, + 1, 233, 32, 249, 163, 42, 1, 222, 67, 249, 163, 42, 1, 213, 10, 249, 163, + 42, 1, 232, 76, 249, 163, 42, 1, 239, 155, 249, 163, 1, 240, 100, 249, + 163, 1, 229, 249, 249, 163, 1, 204, 245, 10, 213, 225, 213, 10, 10, 213, + 225, 207, 31, 10, 213, 225, 206, 170, 10, 213, 225, 249, 47, 10, 213, + 225, 213, 113, 10, 213, 225, 237, 229, 10, 213, 225, 237, 233, 10, 213, + 225, 238, 51, 10, 213, 225, 237, 230, 10, 213, 225, 213, 13, 10, 213, + 225, 237, 232, 10, 213, 225, 237, 228, 10, 213, 225, 238, 49, 10, 213, + 225, 237, 231, 10, 213, 225, 237, 227, 10, 213, 225, 226, 33, 10, 213, + 225, 239, 155, 10, 213, 225, 182, 10, 213, 225, 222, 67, 10, 213, 225, + 214, 156, 10, 213, 225, 246, 240, 10, 213, 225, 237, 234, 10, 213, 225, + 239, 21, 10, 213, 225, 213, 22, 10, 213, 225, 213, 92, 10, 213, 225, 214, + 40, 10, 213, 225, 216, 10, 10, 213, 225, 221, 178, 10, 213, 225, 220, 29, + 10, 213, 225, 211, 131, 10, 213, 225, 213, 12, 10, 213, 225, 213, 103, + 10, 213, 225, 237, 241, 10, 213, 225, 237, 226, 10, 213, 225, 221, 95, + 10, 213, 225, 220, 27, 64, 1, 5, 230, 236, 64, 1, 5, 215, 80, 64, 1, 5, + 213, 203, 64, 1, 5, 124, 64, 1, 5, 223, 217, 64, 1, 5, 155, 64, 1, 5, + 239, 11, 64, 1, 5, 238, 42, 64, 1, 5, 239, 71, 64, 1, 5, 238, 149, 64, 1, + 5, 226, 114, 64, 1, 5, 219, 113, 64, 1, 5, 218, 208, 64, 1, 5, 218, 50, + 64, 1, 5, 219, 51, 64, 1, 5, 218, 124, 97, 25, 231, 84, 97, 25, 224, 223, + 97, 25, 211, 193, 97, 25, 218, 198, 97, 25, 226, 240, 97, 25, 221, 39, + 97, 25, 215, 33, 97, 25, 233, 125, 97, 25, 247, 246, 97, 25, 248, 54, 97, + 25, 231, 143, 97, 25, 212, 15, 97, 25, 221, 76, 97, 25, 239, 3, 97, 25, + 231, 85, 62, 97, 25, 224, 224, 62, 97, 25, 211, 194, 62, 97, 25, 218, + 199, 62, 97, 25, 226, 241, 62, 97, 25, 221, 40, 62, 97, 25, 215, 34, 62, + 97, 25, 233, 126, 62, 97, 25, 247, 247, 62, 97, 25, 248, 55, 62, 97, 25, + 231, 144, 62, 97, 25, 212, 16, 62, 97, 25, 221, 77, 62, 97, 25, 239, 4, + 62, 97, 25, 247, 247, 71, 97, 231, 24, 157, 222, 188, 97, 231, 24, 157, + 148, 238, 42, 97, 175, 102, 97, 175, 105, 97, 175, 142, 97, 175, 139, 97, + 175, 168, 97, 175, 184, 97, 175, 195, 97, 175, 193, 97, 175, 200, 97, + 175, 212, 98, 97, 175, 226, 144, 97, 175, 241, 219, 97, 175, 207, 69, 97, + 175, 206, 237, 97, 175, 227, 63, 97, 175, 243, 120, 97, 175, 213, 154, + 97, 175, 213, 254, 97, 175, 239, 78, 97, 175, 214, 189, 97, 175, 225, + 210, 97, 175, 214, 138, 97, 175, 241, 229, 97, 175, 247, 133, 97, 175, + 230, 130, 97, 175, 218, 246, 97, 175, 248, 236, 97, 175, 213, 207, 97, + 175, 213, 136, 97, 175, 243, 16, 97, 175, 218, 238, 97, 175, 252, 152, + 97, 175, 242, 1, 97, 175, 218, 236, 97, 175, 216, 58, 97, 175, 219, 50, + 39, 175, 219, 195, 39, 175, 231, 108, 39, 175, 217, 103, 39, 175, 231, + 20, 39, 43, 212, 99, 222, 166, 60, 214, 107, 39, 43, 210, 124, 222, 166, + 60, 214, 107, 39, 43, 212, 4, 222, 166, 60, 214, 107, 39, 43, 241, 131, + 222, 166, 60, 214, 107, 39, 43, 241, 244, 222, 166, 60, 214, 107, 39, 43, + 214, 253, 222, 166, 60, 214, 107, 39, 43, 216, 18, 222, 166, 60, 214, + 107, 39, 43, 243, 80, 222, 166, 60, 214, 107, 221, 207, 53, 39, 43, 210, + 124, 102, 39, 43, 210, 124, 105, 39, 43, 210, 124, 142, 39, 43, 210, 124, + 139, 39, 43, 210, 124, 168, 39, 43, 210, 124, 184, 39, 43, 210, 124, 195, + 39, 43, 210, 124, 193, 39, 43, 210, 124, 200, 39, 43, 212, 3, 39, 43, + 212, 4, 102, 39, 43, 212, 4, 105, 39, 43, 212, 4, 142, 39, 43, 212, 4, + 139, 39, 43, 212, 4, 168, 39, 25, 231, 84, 39, 25, 224, 223, 39, 25, 211, + 193, 39, 25, 218, 198, 39, 25, 226, 240, 39, 25, 221, 39, 39, 25, 215, + 33, 39, 25, 233, 125, 39, 25, 247, 246, 39, 25, 248, 54, 39, 25, 231, + 143, 39, 25, 212, 15, 39, 25, 221, 76, 39, 25, 239, 3, 39, 25, 231, 85, + 62, 39, 25, 224, 224, 62, 39, 25, 211, 194, 62, 39, 25, 218, 199, 62, 39, + 25, 226, 241, 62, 39, 25, 221, 40, 62, 39, 25, 215, 34, 62, 39, 25, 233, + 126, 62, 39, 25, 247, 247, 62, 39, 25, 248, 55, 62, 39, 25, 231, 144, 62, + 39, 25, 212, 16, 62, 39, 25, 221, 77, 62, 39, 25, 239, 4, 62, 39, 231, + 24, 157, 248, 101, 39, 231, 24, 157, 232, 100, 39, 25, 233, 126, 71, 231, + 24, 214, 29, 93, 39, 175, 102, 39, 175, 105, 39, 175, 142, 39, 175, 139, + 39, 175, 168, 39, 175, 184, 39, 175, 195, 39, 175, 193, 39, 175, 200, 39, + 175, 212, 98, 39, 175, 226, 144, 39, 175, 241, 219, 39, 175, 207, 69, 39, + 175, 206, 237, 39, 175, 227, 63, 39, 175, 243, 120, 39, 175, 213, 154, + 39, 175, 213, 254, 39, 175, 239, 78, 39, 175, 214, 189, 39, 175, 225, + 210, 39, 175, 214, 138, 39, 175, 241, 229, 39, 175, 247, 133, 39, 175, + 230, 130, 39, 175, 217, 78, 39, 175, 227, 225, 39, 175, 242, 10, 39, 175, + 213, 166, 39, 175, 242, 171, 39, 175, 220, 124, 39, 175, 251, 188, 39, + 175, 232, 219, 39, 175, 218, 236, 39, 175, 247, 95, 39, 175, 247, 86, 39, + 175, 238, 252, 39, 175, 248, 128, 39, 175, 229, 97, 39, 175, 230, 46, 39, + 175, 218, 167, 39, 175, 227, 110, 39, 175, 219, 7, 39, 175, 213, 207, 39, + 175, 213, 136, 39, 175, 243, 16, 39, 175, 218, 238, 39, 175, 252, 152, + 39, 175, 224, 209, 39, 43, 212, 4, 184, 39, 43, 212, 4, 195, 39, 43, 212, + 4, 193, 39, 43, 212, 4, 200, 39, 43, 241, 130, 39, 43, 241, 131, 102, 39, + 43, 241, 131, 105, 39, 43, 241, 131, 142, 39, 43, 241, 131, 139, 39, 43, + 241, 131, 168, 39, 43, 241, 131, 184, 39, 43, 241, 131, 195, 39, 43, 241, + 131, 193, 39, 43, 241, 131, 200, 39, 43, 241, 243, 128, 212, 110, 16, 33, + 232, 191, 128, 212, 110, 16, 33, 242, 22, 128, 212, 110, 16, 33, 227, + 193, 128, 212, 110, 16, 33, 252, 43, 128, 212, 110, 16, 33, 227, 162, + 128, 212, 110, 16, 33, 232, 98, 128, 212, 110, 16, 33, 232, 99, 128, 212, + 110, 16, 33, 251, 180, 128, 212, 110, 16, 33, 216, 38, 128, 212, 110, 16, + 33, 222, 212, 128, 212, 110, 16, 33, 224, 30, 128, 212, 110, 16, 33, 246, + 4, 49, 239, 21, 49, 242, 231, 49, 242, 180, 229, 211, 229, 234, 53, 39, + 64, 62, 39, 64, 74, 39, 64, 71, 39, 64, 75, 39, 64, 76, 39, 64, 172, 39, + 64, 231, 123, 39, 64, 230, 236, 39, 64, 231, 224, 39, 64, 231, 53, 39, + 64, 217, 199, 39, 64, 215, 80, 39, 64, 213, 203, 39, 64, 217, 86, 39, 64, + 214, 193, 39, 64, 212, 219, 39, 64, 211, 211, 39, 64, 210, 170, 39, 64, + 212, 131, 39, 64, 124, 39, 64, 199, 39, 64, 224, 230, 39, 64, 223, 217, + 39, 64, 225, 110, 39, 64, 224, 67, 39, 64, 155, 39, 64, 239, 11, 39, 64, + 238, 42, 39, 64, 239, 71, 39, 64, 238, 149, 39, 64, 185, 39, 64, 226, + 254, 39, 64, 226, 114, 39, 64, 227, 119, 39, 64, 226, 181, 39, 64, 190, + 39, 64, 205, 213, 39, 64, 205, 247, 39, 64, 219, 113, 39, 64, 218, 208, + 39, 64, 218, 50, 39, 64, 219, 51, 39, 64, 218, 124, 39, 64, 207, 96, 39, + 64, 207, 20, 39, 64, 207, 51, 39, 64, 206, 250, 49, 252, 67, 49, 251, + 233, 49, 252, 94, 49, 253, 122, 49, 233, 37, 49, 233, 5, 49, 209, 209, + 49, 242, 205, 49, 243, 101, 49, 222, 155, 49, 222, 148, 49, 232, 39, 49, + 232, 5, 49, 232, 2, 49, 240, 200, 49, 240, 209, 49, 240, 50, 49, 240, 46, + 49, 230, 160, 49, 240, 38, 49, 231, 100, 49, 231, 99, 49, 231, 98, 49, + 231, 97, 49, 239, 184, 49, 239, 183, 49, 230, 207, 49, 230, 209, 49, 231, + 217, 49, 231, 22, 49, 231, 30, 49, 217, 180, 49, 217, 144, 49, 215, 14, + 49, 216, 43, 49, 216, 42, 49, 246, 142, 49, 245, 205, 49, 245, 24, 49, + 211, 120, 49, 225, 205, 49, 224, 31, 49, 239, 126, 49, 222, 46, 49, 222, + 45, 49, 250, 180, 49, 221, 50, 49, 221, 13, 49, 221, 14, 49, 249, 215, + 49, 238, 40, 49, 238, 36, 49, 249, 60, 49, 238, 22, 49, 239, 47, 49, 221, + 105, 49, 221, 145, 49, 239, 30, 49, 221, 141, 49, 221, 159, 49, 250, 45, + 49, 220, 200, 49, 249, 159, 49, 238, 134, 49, 220, 188, 49, 238, 126, 49, + 238, 128, 49, 227, 237, 49, 227, 233, 49, 227, 242, 49, 227, 182, 49, + 227, 209, 49, 226, 220, 49, 226, 196, 49, 226, 195, 49, 227, 99, 49, 227, + 96, 49, 227, 100, 49, 206, 108, 49, 206, 106, 49, 205, 202, 49, 218, 140, + 49, 218, 144, 49, 218, 26, 49, 218, 20, 49, 219, 4, 49, 219, 1, 49, 207, + 67, 128, 212, 110, 16, 33, 238, 59, 205, 85, 128, 212, 110, 16, 33, 238, + 59, 102, 128, 212, 110, 16, 33, 238, 59, 105, 128, 212, 110, 16, 33, 238, + 59, 142, 128, 212, 110, 16, 33, 238, 59, 139, 128, 212, 110, 16, 33, 238, + 59, 168, 128, 212, 110, 16, 33, 238, 59, 184, 128, 212, 110, 16, 33, 238, + 59, 195, 128, 212, 110, 16, 33, 238, 59, 193, 128, 212, 110, 16, 33, 238, + 59, 200, 128, 212, 110, 16, 33, 238, 59, 212, 98, 128, 212, 110, 16, 33, + 238, 59, 243, 58, 128, 212, 110, 16, 33, 238, 59, 210, 126, 128, 212, + 110, 16, 33, 238, 59, 212, 5, 128, 212, 110, 16, 33, 238, 59, 241, 119, + 128, 212, 110, 16, 33, 238, 59, 241, 247, 128, 212, 110, 16, 33, 238, 59, + 215, 4, 128, 212, 110, 16, 33, 238, 59, 216, 20, 128, 212, 110, 16, 33, + 238, 59, 243, 85, 128, 212, 110, 16, 33, 238, 59, 224, 192, 128, 212, + 110, 16, 33, 238, 59, 210, 123, 128, 212, 110, 16, 33, 238, 59, 210, 117, + 128, 212, 110, 16, 33, 238, 59, 210, 113, 128, 212, 110, 16, 33, 238, 59, + 210, 114, 128, 212, 110, 16, 33, 238, 59, 210, 119, 49, 238, 50, 49, 246, + 145, 49, 251, 184, 49, 134, 49, 222, 88, 49, 221, 179, 49, 245, 53, 49, + 245, 54, 214, 106, 49, 245, 54, 247, 35, 49, 232, 216, 49, 242, 234, 225, + 211, 239, 48, 49, 242, 234, 225, 211, 213, 33, 49, 242, 234, 225, 211, + 212, 188, 49, 242, 234, 225, 211, 227, 95, 49, 247, 88, 49, 222, 52, 252, + 124, 49, 199, 49, 226, 115, 62, 49, 185, 49, 172, 49, 231, 227, 49, 227, + 158, 49, 240, 188, 49, 248, 241, 49, 231, 226, 49, 221, 96, 49, 225, 81, + 49, 226, 115, 242, 139, 49, 226, 115, 241, 55, 49, 227, 39, 49, 231, 169, + 49, 237, 234, 49, 231, 125, 49, 227, 0, 49, 240, 63, 49, 211, 213, 49, + 226, 115, 149, 49, 226, 189, 49, 245, 63, 49, 231, 66, 49, 241, 164, 49, + 224, 105, 49, 226, 115, 229, 28, 49, 226, 186, 49, 247, 175, 49, 231, 60, + 49, 226, 187, 214, 106, 49, 247, 176, 214, 106, 49, 229, 29, 214, 106, + 49, 231, 61, 214, 106, 49, 226, 187, 247, 35, 49, 247, 176, 247, 35, 49, + 229, 29, 247, 35, 49, 231, 61, 247, 35, 49, 229, 29, 131, 182, 49, 229, + 29, 131, 218, 1, 214, 106, 49, 179, 49, 231, 15, 49, 226, 118, 49, 239, + 251, 49, 219, 100, 49, 219, 101, 131, 182, 49, 219, 101, 131, 218, 1, + 214, 106, 49, 220, 95, 49, 223, 255, 49, 226, 115, 182, 49, 226, 116, 49, + 220, 47, 49, 223, 155, 49, 226, 115, 209, 148, 49, 226, 57, 49, 230, 198, + 49, 226, 58, 227, 99, 49, 220, 46, 49, 223, 154, 49, 226, 115, 207, 129, + 49, 226, 51, 49, 230, 196, 49, 226, 52, 227, 99, 49, 232, 77, 222, 192, + 49, 229, 29, 222, 192, 49, 252, 136, 49, 249, 136, 49, 248, 172, 49, 248, + 149, 49, 249, 35, 131, 231, 169, 49, 247, 174, 49, 246, 63, 49, 239, 168, + 49, 155, 49, 238, 51, 49, 233, 68, 49, 231, 73, 49, 231, 61, 248, 212, + 49, 230, 238, 49, 229, 147, 49, 229, 146, 49, 229, 135, 49, 229, 43, 49, + 227, 159, 214, 215, 49, 226, 219, 49, 226, 170, 49, 221, 94, 49, 220, + 214, 49, 220, 156, 49, 220, 154, 49, 214, 100, 49, 213, 117, 49, 207, 53, + 49, 209, 149, 131, 229, 28, 49, 32, 131, 229, 28, 128, 212, 110, 16, 33, + 246, 67, 102, 128, 212, 110, 16, 33, 246, 67, 105, 128, 212, 110, 16, 33, + 246, 67, 142, 128, 212, 110, 16, 33, 246, 67, 139, 128, 212, 110, 16, 33, + 246, 67, 168, 128, 212, 110, 16, 33, 246, 67, 184, 128, 212, 110, 16, 33, + 246, 67, 195, 128, 212, 110, 16, 33, 246, 67, 193, 128, 212, 110, 16, 33, + 246, 67, 200, 128, 212, 110, 16, 33, 246, 67, 212, 98, 128, 212, 110, 16, + 33, 246, 67, 243, 58, 128, 212, 110, 16, 33, 246, 67, 210, 126, 128, 212, + 110, 16, 33, 246, 67, 212, 5, 128, 212, 110, 16, 33, 246, 67, 241, 119, + 128, 212, 110, 16, 33, 246, 67, 241, 247, 128, 212, 110, 16, 33, 246, 67, + 215, 4, 128, 212, 110, 16, 33, 246, 67, 216, 20, 128, 212, 110, 16, 33, + 246, 67, 243, 85, 128, 212, 110, 16, 33, 246, 67, 224, 192, 128, 212, + 110, 16, 33, 246, 67, 210, 123, 128, 212, 110, 16, 33, 246, 67, 210, 117, + 128, 212, 110, 16, 33, 246, 67, 210, 113, 128, 212, 110, 16, 33, 246, 67, + 210, 114, 128, 212, 110, 16, 33, 246, 67, 210, 119, 128, 212, 110, 16, + 33, 246, 67, 210, 120, 128, 212, 110, 16, 33, 246, 67, 210, 115, 128, + 212, 110, 16, 33, 246, 67, 210, 116, 128, 212, 110, 16, 33, 246, 67, 210, + 122, 128, 212, 110, 16, 33, 246, 67, 210, 118, 128, 212, 110, 16, 33, + 246, 67, 212, 3, 128, 212, 110, 16, 33, 246, 67, 212, 2, 49, 240, 226, + 239, 24, 33, 212, 42, 247, 69, 239, 56, 239, 24, 33, 212, 42, 219, 44, + 243, 120, 239, 24, 33, 245, 138, 251, 200, 212, 42, 250, 40, 239, 24, 33, + 205, 226, 241, 156, 239, 24, 33, 207, 89, 239, 24, 33, 247, 136, 239, 24, + 33, 212, 42, 251, 254, 239, 24, 33, 238, 141, 211, 126, 239, 24, 33, 5, + 212, 175, 239, 24, 33, 211, 63, 239, 24, 33, 221, 172, 239, 24, 33, 214, + 28, 239, 24, 33, 242, 12, 239, 24, 33, 239, 232, 220, 177, 239, 24, 33, + 226, 174, 239, 24, 33, 243, 15, 239, 24, 33, 241, 157, 239, 24, 33, 206, + 230, 222, 166, 212, 42, 246, 5, 239, 24, 33, 252, 47, 239, 24, 33, 247, + 117, 239, 24, 33, 249, 208, 211, 232, 239, 24, 33, 239, 249, 239, 24, 33, + 214, 120, 252, 66, 239, 24, 33, 218, 228, 239, 24, 33, 233, 31, 239, 24, + 33, 239, 232, 212, 175, 239, 24, 33, 226, 124, 247, 90, 239, 24, 33, 239, + 232, 220, 134, 239, 24, 33, 212, 42, 253, 26, 207, 69, 239, 24, 33, 212, + 42, 247, 200, 241, 219, 239, 24, 33, 233, 44, 239, 24, 33, 243, 216, 239, + 24, 33, 218, 231, 239, 24, 33, 239, 232, 220, 161, 239, 24, 33, 220, 112, + 239, 24, 33, 246, 83, 73, 212, 42, 229, 223, 239, 24, 33, 212, 42, 242, + 48, 239, 24, 33, 222, 128, 239, 24, 33, 222, 218, 239, 24, 33, 245, 232, + 239, 24, 33, 245, 253, 239, 24, 33, 233, 59, 239, 24, 33, 249, 125, 239, + 24, 33, 247, 157, 211, 130, 227, 102, 239, 24, 33, 240, 195, 211, 126, + 239, 24, 33, 220, 56, 209, 197, 239, 24, 33, 222, 127, 239, 24, 33, 212, + 42, 207, 40, 239, 24, 33, 218, 219, 239, 24, 33, 212, 42, 248, 178, 239, + 24, 33, 212, 42, 251, 250, 211, 227, 239, 24, 33, 212, 42, 231, 218, 214, + 2, 226, 128, 239, 24, 33, 245, 200, 239, 24, 33, 212, 42, 227, 184, 227, + 238, 239, 24, 33, 253, 27, 239, 24, 33, 212, 42, 207, 84, 239, 24, 33, + 212, 42, 240, 153, 207, 9, 239, 24, 33, 212, 42, 232, 106, 230, 111, 239, + 24, 33, 245, 91, 239, 24, 33, 229, 212, 239, 24, 33, 233, 34, 210, 247, + 239, 24, 33, 5, 220, 134, 239, 24, 33, 252, 221, 247, 148, 239, 24, 33, + 250, 43, 247, 148, 9, 4, 232, 220, 9, 4, 232, 212, 9, 4, 74, 9, 4, 232, + 246, 9, 4, 233, 127, 9, 4, 233, 110, 9, 4, 233, 129, 9, 4, 233, 128, 9, + 4, 251, 199, 9, 4, 251, 161, 9, 4, 62, 9, 4, 252, 68, 9, 4, 209, 207, 9, + 4, 209, 210, 9, 4, 209, 208, 9, 4, 222, 103, 9, 4, 222, 76, 9, 4, 76, 9, + 4, 222, 143, 9, 4, 242, 172, 9, 4, 75, 9, 4, 206, 216, 9, 4, 249, 209, 9, + 4, 249, 206, 9, 4, 249, 244, 9, 4, 249, 219, 9, 4, 249, 233, 9, 4, 249, + 232, 9, 4, 249, 235, 9, 4, 249, 234, 9, 4, 250, 108, 9, 4, 250, 100, 9, + 4, 250, 183, 9, 4, 250, 130, 9, 4, 249, 71, 9, 4, 249, 75, 9, 4, 249, 72, + 9, 4, 249, 158, 9, 4, 249, 140, 9, 4, 249, 184, 9, 4, 249, 164, 9, 4, + 250, 3, 9, 4, 250, 61, 9, 4, 250, 15, 9, 4, 249, 56, 9, 4, 249, 52, 9, 4, + 249, 101, 9, 4, 249, 70, 9, 4, 249, 64, 9, 4, 249, 68, 9, 4, 249, 40, 9, + 4, 249, 38, 9, 4, 249, 45, 9, 4, 249, 43, 9, 4, 249, 41, 9, 4, 249, 42, + 9, 4, 220, 247, 9, 4, 220, 243, 9, 4, 221, 53, 9, 4, 221, 3, 9, 4, 221, + 19, 9, 4, 221, 46, 9, 4, 221, 42, 9, 4, 221, 195, 9, 4, 221, 184, 9, 4, + 179, 9, 4, 221, 236, 9, 4, 220, 66, 9, 4, 220, 68, 9, 4, 220, 67, 9, 4, + 220, 170, 9, 4, 220, 159, 9, 4, 220, 211, 9, 4, 220, 183, 9, 4, 220, 52, + 9, 4, 220, 48, 9, 4, 220, 82, 9, 4, 220, 65, 9, 4, 220, 57, 9, 4, 220, + 63, 9, 4, 220, 31, 9, 4, 220, 30, 9, 4, 220, 35, 9, 4, 220, 34, 9, 4, + 220, 32, 9, 4, 220, 33, 9, 4, 250, 82, 9, 4, 250, 81, 9, 4, 250, 88, 9, + 4, 250, 83, 9, 4, 250, 85, 9, 4, 250, 84, 9, 4, 250, 87, 9, 4, 250, 86, + 9, 4, 250, 94, 9, 4, 250, 93, 9, 4, 250, 97, 9, 4, 250, 95, 9, 4, 250, + 73, 9, 4, 250, 75, 9, 4, 250, 74, 9, 4, 250, 78, 9, 4, 250, 77, 9, 4, + 250, 80, 9, 4, 250, 79, 9, 4, 250, 89, 9, 4, 250, 92, 9, 4, 250, 90, 9, + 4, 250, 69, 9, 4, 250, 68, 9, 4, 250, 76, 9, 4, 250, 72, 9, 4, 250, 70, + 9, 4, 250, 71, 9, 4, 250, 65, 9, 4, 250, 64, 9, 4, 250, 67, 9, 4, 250, + 66, 9, 4, 225, 173, 9, 4, 225, 172, 9, 4, 225, 178, 9, 4, 225, 174, 9, 4, + 225, 175, 9, 4, 225, 177, 9, 4, 225, 176, 9, 4, 225, 181, 9, 4, 225, 180, + 9, 4, 225, 183, 9, 4, 225, 182, 9, 4, 225, 169, 9, 4, 225, 168, 9, 4, + 225, 171, 9, 4, 225, 170, 9, 4, 225, 162, 9, 4, 225, 161, 9, 4, 225, 166, + 9, 4, 225, 165, 9, 4, 225, 163, 9, 4, 225, 164, 9, 4, 225, 156, 9, 4, + 225, 155, 9, 4, 225, 160, 9, 4, 225, 159, 9, 4, 225, 157, 9, 4, 225, 158, + 9, 4, 238, 193, 9, 4, 238, 192, 9, 4, 238, 198, 9, 4, 238, 194, 9, 4, + 238, 195, 9, 4, 238, 197, 9, 4, 238, 196, 9, 4, 238, 201, 9, 4, 238, 200, + 9, 4, 238, 203, 9, 4, 238, 202, 9, 4, 238, 184, 9, 4, 238, 186, 9, 4, + 238, 185, 9, 4, 238, 189, 9, 4, 238, 188, 9, 4, 238, 191, 9, 4, 238, 190, + 9, 4, 238, 180, 9, 4, 238, 179, 9, 4, 238, 187, 9, 4, 238, 183, 9, 4, + 238, 181, 9, 4, 238, 182, 9, 4, 238, 174, 9, 4, 238, 178, 9, 4, 238, 177, + 9, 4, 238, 175, 9, 4, 238, 176, 9, 4, 226, 192, 9, 4, 226, 191, 9, 4, + 226, 254, 9, 4, 226, 198, 9, 4, 226, 226, 9, 4, 226, 244, 9, 4, 226, 242, + 9, 4, 227, 170, 9, 4, 227, 165, 9, 4, 185, 9, 4, 227, 205, 9, 4, 226, 83, + 9, 4, 226, 82, 9, 4, 226, 86, 9, 4, 226, 84, 9, 4, 226, 137, 9, 4, 226, + 120, 9, 4, 226, 181, 9, 4, 226, 142, 9, 4, 227, 50, 9, 4, 227, 119, 9, 4, + 226, 63, 9, 4, 226, 59, 9, 4, 226, 114, 9, 4, 226, 79, 9, 4, 226, 72, 9, + 4, 226, 77, 9, 4, 226, 36, 9, 4, 226, 35, 9, 4, 226, 41, 9, 4, 226, 38, + 9, 4, 241, 206, 9, 4, 241, 201, 9, 4, 241, 250, 9, 4, 241, 221, 9, 4, + 242, 41, 9, 4, 242, 32, 9, 4, 242, 73, 9, 4, 242, 44, 9, 4, 241, 117, 9, + 4, 241, 162, 9, 4, 241, 143, 9, 4, 241, 71, 9, 4, 241, 70, 9, 4, 241, 88, + 9, 4, 241, 76, 9, 4, 241, 74, 9, 4, 241, 75, 9, 4, 241, 58, 9, 4, 241, + 57, 9, 4, 241, 61, 9, 4, 241, 59, 9, 4, 208, 180, 9, 4, 208, 175, 9, 4, + 208, 214, 9, 4, 208, 189, 9, 4, 208, 203, 9, 4, 208, 200, 9, 4, 208, 206, + 9, 4, 208, 205, 9, 4, 209, 47, 9, 4, 209, 42, 9, 4, 209, 70, 9, 4, 209, + 59, 9, 4, 208, 157, 9, 4, 208, 153, 9, 4, 208, 173, 9, 4, 208, 159, 9, 4, + 208, 217, 9, 4, 209, 28, 9, 4, 207, 142, 9, 4, 207, 140, 9, 4, 207, 148, + 9, 4, 207, 145, 9, 4, 207, 143, 9, 4, 207, 144, 9, 4, 207, 133, 9, 4, + 207, 132, 9, 4, 207, 137, 9, 4, 207, 136, 9, 4, 207, 134, 9, 4, 207, 135, + 9, 4, 245, 85, 9, 4, 245, 72, 9, 4, 245, 168, 9, 4, 245, 110, 9, 4, 245, + 143, 9, 4, 245, 148, 9, 4, 245, 147, 9, 4, 246, 74, 9, 4, 246, 68, 9, 4, + 246, 145, 9, 4, 246, 94, 9, 4, 243, 221, 9, 4, 243, 222, 9, 4, 245, 23, + 9, 4, 244, 5, 9, 4, 245, 51, 9, 4, 245, 25, 9, 4, 245, 198, 9, 4, 246, 9, + 9, 4, 245, 218, 9, 4, 243, 212, 9, 4, 243, 210, 9, 4, 243, 237, 9, 4, + 243, 220, 9, 4, 243, 215, 9, 4, 243, 218, 9, 4, 211, 156, 9, 4, 211, 149, + 9, 4, 211, 211, 9, 4, 211, 166, 9, 4, 211, 201, 9, 4, 211, 203, 9, 4, + 211, 202, 9, 4, 212, 156, 9, 4, 212, 142, 9, 4, 212, 219, 9, 4, 212, 166, + 9, 4, 210, 153, 9, 4, 210, 152, 9, 4, 210, 155, 9, 4, 210, 154, 9, 4, + 211, 91, 9, 4, 211, 85, 9, 4, 124, 9, 4, 211, 101, 9, 4, 212, 62, 9, 4, + 212, 131, 9, 4, 212, 87, 9, 4, 210, 138, 9, 4, 210, 133, 9, 4, 210, 170, + 9, 4, 210, 151, 9, 4, 210, 139, 9, 4, 210, 149, 9, 4, 246, 26, 9, 4, 246, + 25, 9, 4, 246, 31, 9, 4, 246, 27, 9, 4, 246, 28, 9, 4, 246, 30, 9, 4, + 246, 29, 9, 4, 246, 47, 9, 4, 246, 46, 9, 4, 246, 54, 9, 4, 246, 48, 9, + 4, 246, 16, 9, 4, 246, 18, 9, 4, 246, 17, 9, 4, 246, 21, 9, 4, 246, 20, + 9, 4, 246, 24, 9, 4, 246, 22, 9, 4, 246, 39, 9, 4, 246, 42, 9, 4, 246, + 40, 9, 4, 246, 12, 9, 4, 246, 11, 9, 4, 246, 19, 9, 4, 246, 15, 9, 4, + 246, 13, 9, 4, 246, 14, 9, 4, 225, 129, 9, 4, 225, 128, 9, 4, 225, 136, + 9, 4, 225, 131, 9, 4, 225, 132, 9, 4, 225, 133, 9, 4, 225, 145, 9, 4, + 225, 144, 9, 4, 225, 151, 9, 4, 225, 146, 9, 4, 225, 121, 9, 4, 225, 120, + 9, 4, 225, 127, 9, 4, 225, 122, 9, 4, 225, 137, 9, 4, 225, 143, 9, 4, + 225, 141, 9, 4, 225, 113, 9, 4, 225, 112, 9, 4, 225, 118, 9, 4, 225, 116, + 9, 4, 225, 114, 9, 4, 225, 115, 9, 4, 238, 159, 9, 4, 238, 158, 9, 4, + 238, 165, 9, 4, 238, 160, 9, 4, 238, 162, 9, 4, 238, 161, 9, 4, 238, 164, + 9, 4, 238, 163, 9, 4, 238, 171, 9, 4, 238, 169, 9, 4, 238, 173, 9, 4, + 238, 172, 9, 4, 238, 152, 9, 4, 238, 153, 9, 4, 238, 156, 9, 4, 238, 155, + 9, 4, 238, 157, 9, 4, 238, 166, 9, 4, 238, 168, 9, 4, 238, 167, 9, 4, + 238, 151, 9, 4, 224, 184, 9, 4, 224, 182, 9, 4, 224, 230, 9, 4, 224, 187, + 9, 4, 224, 212, 9, 4, 224, 226, 9, 4, 224, 225, 9, 4, 225, 187, 9, 4, + 199, 9, 4, 225, 202, 9, 4, 223, 165, 9, 4, 223, 167, 9, 4, 223, 166, 9, + 4, 224, 42, 9, 4, 224, 27, 9, 4, 224, 67, 9, 4, 224, 52, 9, 4, 225, 83, + 9, 4, 225, 110, 9, 4, 225, 96, 9, 4, 223, 160, 9, 4, 223, 156, 9, 4, 223, + 217, 9, 4, 223, 164, 9, 4, 223, 162, 9, 4, 223, 163, 9, 4, 238, 224, 9, + 4, 238, 223, 9, 4, 238, 229, 9, 4, 238, 225, 9, 4, 238, 226, 9, 4, 238, + 228, 9, 4, 238, 227, 9, 4, 238, 235, 9, 4, 238, 233, 9, 4, 238, 237, 9, + 4, 238, 236, 9, 4, 238, 216, 9, 4, 238, 218, 9, 4, 238, 217, 9, 4, 238, + 220, 9, 4, 238, 222, 9, 4, 238, 221, 9, 4, 238, 230, 9, 4, 238, 232, 9, + 4, 238, 231, 9, 4, 238, 212, 9, 4, 238, 211, 9, 4, 238, 219, 9, 4, 238, + 215, 9, 4, 238, 213, 9, 4, 238, 214, 9, 4, 238, 206, 9, 4, 238, 205, 9, + 4, 238, 210, 9, 4, 238, 209, 9, 4, 238, 207, 9, 4, 238, 208, 9, 4, 229, + 184, 9, 4, 229, 177, 9, 4, 229, 235, 9, 4, 229, 193, 9, 4, 229, 227, 9, + 4, 229, 226, 9, 4, 229, 230, 9, 4, 229, 228, 9, 4, 230, 80, 9, 4, 230, + 69, 9, 4, 230, 141, 9, 4, 230, 89, 9, 4, 229, 60, 9, 4, 229, 59, 9, 4, + 229, 62, 9, 4, 229, 61, 9, 4, 229, 103, 9, 4, 229, 90, 9, 4, 229, 144, 9, + 4, 229, 108, 9, 4, 229, 252, 9, 4, 230, 58, 9, 4, 230, 13, 9, 4, 229, 54, + 9, 4, 229, 52, 9, 4, 229, 81, 9, 4, 229, 58, 9, 4, 229, 56, 9, 4, 229, + 57, 9, 4, 229, 33, 9, 4, 229, 32, 9, 4, 229, 42, 9, 4, 229, 36, 9, 4, + 229, 34, 9, 4, 229, 35, 9, 4, 240, 34, 9, 4, 240, 33, 9, 4, 240, 61, 9, + 4, 240, 45, 9, 4, 240, 53, 9, 4, 240, 52, 9, 4, 240, 55, 9, 4, 240, 54, + 9, 4, 240, 197, 9, 4, 240, 192, 9, 4, 240, 244, 9, 4, 240, 207, 9, 4, + 239, 189, 9, 4, 239, 188, 9, 4, 239, 191, 9, 4, 239, 190, 9, 4, 239, 254, + 9, 4, 239, 252, 9, 4, 240, 19, 9, 4, 240, 6, 9, 4, 240, 139, 9, 4, 240, + 137, 9, 4, 240, 170, 9, 4, 240, 150, 9, 4, 239, 178, 9, 4, 239, 177, 9, + 4, 239, 213, 9, 4, 239, 187, 9, 4, 239, 179, 9, 4, 239, 186, 9, 4, 231, + 89, 9, 4, 231, 86, 9, 4, 231, 123, 9, 4, 231, 103, 9, 4, 231, 113, 9, 4, + 231, 116, 9, 4, 231, 114, 9, 4, 231, 249, 9, 4, 231, 232, 9, 4, 172, 9, + 4, 232, 20, 9, 4, 230, 214, 9, 4, 230, 219, 9, 4, 230, 216, 9, 4, 231, + 21, 9, 4, 231, 16, 9, 4, 231, 53, 9, 4, 231, 28, 9, 4, 231, 193, 9, 4, + 231, 176, 9, 4, 231, 224, 9, 4, 231, 197, 9, 4, 230, 203, 9, 4, 230, 199, + 9, 4, 230, 236, 9, 4, 230, 213, 9, 4, 230, 206, 9, 4, 230, 210, 9, 4, + 240, 121, 9, 4, 240, 120, 9, 4, 240, 125, 9, 4, 240, 122, 9, 4, 240, 124, + 9, 4, 240, 123, 9, 4, 240, 132, 9, 4, 240, 131, 9, 4, 240, 135, 9, 4, + 240, 133, 9, 4, 240, 112, 9, 4, 240, 111, 9, 4, 240, 114, 9, 4, 240, 113, + 9, 4, 240, 117, 9, 4, 240, 116, 9, 4, 240, 119, 9, 4, 240, 118, 9, 4, + 240, 127, 9, 4, 240, 126, 9, 4, 240, 130, 9, 4, 240, 128, 9, 4, 240, 107, + 9, 4, 240, 106, 9, 4, 240, 115, 9, 4, 240, 110, 9, 4, 240, 108, 9, 4, + 240, 109, 9, 4, 227, 17, 9, 4, 227, 18, 9, 4, 227, 36, 9, 4, 227, 35, 9, + 4, 227, 38, 9, 4, 227, 37, 9, 4, 227, 8, 9, 4, 227, 10, 9, 4, 227, 9, 9, + 4, 227, 13, 9, 4, 227, 12, 9, 4, 227, 15, 9, 4, 227, 14, 9, 4, 227, 19, + 9, 4, 227, 21, 9, 4, 227, 20, 9, 4, 227, 4, 9, 4, 227, 3, 9, 4, 227, 11, + 9, 4, 227, 7, 9, 4, 227, 5, 9, 4, 227, 6, 9, 4, 237, 251, 9, 4, 237, 250, + 9, 4, 238, 1, 9, 4, 237, 252, 9, 4, 237, 254, 9, 4, 237, 253, 9, 4, 238, + 0, 9, 4, 237, 255, 9, 4, 238, 6, 9, 4, 238, 5, 9, 4, 238, 8, 9, 4, 238, + 7, 9, 4, 237, 243, 9, 4, 237, 242, 9, 4, 237, 245, 9, 4, 237, 244, 9, 4, + 237, 247, 9, 4, 237, 246, 9, 4, 237, 249, 9, 4, 237, 248, 9, 4, 238, 2, + 9, 4, 238, 4, 9, 4, 238, 3, 9, 4, 225, 22, 9, 4, 225, 24, 9, 4, 225, 23, + 9, 4, 225, 67, 9, 4, 225, 65, 9, 4, 225, 77, 9, 4, 225, 70, 9, 4, 224, + 240, 9, 4, 224, 239, 9, 4, 224, 241, 9, 4, 224, 250, 9, 4, 224, 247, 9, + 4, 225, 2, 9, 4, 224, 252, 9, 4, 225, 58, 9, 4, 225, 64, 9, 4, 225, 60, + 9, 4, 238, 242, 9, 4, 238, 253, 9, 4, 239, 6, 9, 4, 239, 86, 9, 4, 239, + 76, 9, 4, 155, 9, 4, 239, 97, 9, 4, 238, 24, 9, 4, 238, 23, 9, 4, 238, + 26, 9, 4, 238, 25, 9, 4, 238, 62, 9, 4, 238, 53, 9, 4, 238, 149, 9, 4, + 238, 124, 9, 4, 239, 26, 9, 4, 239, 71, 9, 4, 239, 38, 9, 4, 207, 72, 9, + 4, 207, 57, 9, 4, 207, 96, 9, 4, 207, 81, 9, 4, 206, 205, 9, 4, 206, 207, + 9, 4, 206, 206, 9, 4, 206, 224, 9, 4, 206, 250, 9, 4, 206, 233, 9, 4, + 207, 32, 9, 4, 207, 51, 9, 4, 207, 37, 9, 4, 205, 26, 9, 4, 205, 25, 9, + 4, 205, 40, 9, 4, 205, 28, 9, 4, 205, 33, 9, 4, 205, 35, 9, 4, 205, 34, + 9, 4, 205, 101, 9, 4, 205, 98, 9, 4, 205, 116, 9, 4, 205, 105, 9, 4, 205, + 2, 9, 4, 205, 4, 9, 4, 205, 3, 9, 4, 205, 15, 9, 4, 205, 14, 9, 4, 205, + 19, 9, 4, 205, 16, 9, 4, 205, 83, 9, 4, 205, 93, 9, 4, 205, 87, 9, 4, + 204, 254, 9, 4, 204, 253, 9, 4, 205, 9, 9, 4, 205, 1, 9, 4, 204, 255, 9, + 4, 205, 0, 9, 4, 204, 240, 9, 4, 204, 239, 9, 4, 204, 245, 9, 4, 204, + 243, 9, 4, 204, 241, 9, 4, 204, 242, 9, 4, 247, 225, 9, 4, 247, 219, 9, + 4, 247, 251, 9, 4, 247, 235, 9, 4, 247, 248, 9, 4, 247, 242, 9, 4, 247, + 250, 9, 4, 247, 249, 9, 4, 248, 183, 9, 4, 248, 175, 9, 4, 249, 1, 9, 4, + 248, 213, 9, 4, 247, 31, 9, 4, 247, 33, 9, 4, 247, 32, 9, 4, 247, 84, 9, + 4, 247, 74, 9, 4, 247, 174, 9, 4, 247, 100, 9, 4, 248, 113, 9, 4, 248, + 148, 9, 4, 248, 118, 9, 4, 247, 10, 9, 4, 247, 8, 9, 4, 247, 40, 9, 4, + 247, 29, 9, 4, 247, 16, 9, 4, 247, 28, 9, 4, 246, 243, 9, 4, 246, 242, 9, + 4, 246, 255, 9, 4, 246, 249, 9, 4, 246, 244, 9, 4, 246, 246, 9, 4, 204, + 223, 9, 4, 204, 222, 9, 4, 204, 229, 9, 4, 204, 224, 9, 4, 204, 226, 9, + 4, 204, 225, 9, 4, 204, 228, 9, 4, 204, 227, 9, 4, 204, 235, 9, 4, 204, + 234, 9, 4, 204, 238, 9, 4, 204, 236, 9, 4, 204, 219, 9, 4, 204, 221, 9, + 4, 204, 220, 9, 4, 204, 230, 9, 4, 204, 233, 9, 4, 204, 231, 9, 4, 204, + 212, 9, 4, 204, 216, 9, 4, 204, 215, 9, 4, 204, 213, 9, 4, 204, 214, 9, + 4, 204, 206, 9, 4, 204, 205, 9, 4, 204, 211, 9, 4, 204, 209, 9, 4, 204, + 207, 9, 4, 204, 208, 9, 4, 223, 78, 9, 4, 223, 77, 9, 4, 223, 83, 9, 4, + 223, 79, 9, 4, 223, 80, 9, 4, 223, 82, 9, 4, 223, 81, 9, 4, 223, 88, 9, + 4, 223, 87, 9, 4, 223, 91, 9, 4, 223, 90, 9, 4, 223, 71, 9, 4, 223, 72, + 9, 4, 223, 75, 9, 4, 223, 76, 9, 4, 223, 84, 9, 4, 223, 86, 9, 4, 223, + 66, 9, 4, 223, 74, 9, 4, 223, 70, 9, 4, 223, 67, 9, 4, 223, 68, 9, 4, + 223, 61, 9, 4, 223, 60, 9, 4, 223, 65, 9, 4, 223, 64, 9, 4, 223, 62, 9, + 4, 223, 63, 9, 4, 215, 12, 9, 4, 184, 9, 4, 215, 80, 9, 4, 215, 15, 9, 4, + 215, 69, 9, 4, 215, 72, 9, 4, 215, 70, 9, 4, 217, 133, 9, 4, 217, 119, 9, + 4, 217, 199, 9, 4, 217, 141, 9, 4, 213, 144, 9, 4, 213, 146, 9, 4, 213, + 145, 9, 4, 214, 168, 9, 4, 214, 158, 9, 4, 214, 193, 9, 4, 214, 172, 9, + 4, 216, 15, 9, 4, 217, 86, 9, 4, 216, 41, 9, 4, 213, 121, 9, 4, 213, 118, + 9, 4, 213, 203, 9, 4, 213, 143, 9, 4, 213, 125, 9, 4, 213, 133, 9, 4, + 213, 24, 9, 4, 213, 23, 9, 4, 213, 91, 9, 4, 213, 32, 9, 4, 213, 26, 9, + 4, 213, 31, 9, 4, 214, 58, 9, 4, 214, 57, 9, 4, 214, 64, 9, 4, 214, 59, + 9, 4, 214, 61, 9, 4, 214, 63, 9, 4, 214, 62, 9, 4, 214, 73, 9, 4, 214, + 71, 9, 4, 214, 96, 9, 4, 214, 74, 9, 4, 214, 53, 9, 4, 214, 52, 9, 4, + 214, 56, 9, 4, 214, 54, 9, 4, 214, 67, 9, 4, 214, 70, 9, 4, 214, 68, 9, + 4, 214, 49, 9, 4, 214, 47, 9, 4, 214, 51, 9, 4, 214, 50, 9, 4, 214, 42, + 9, 4, 214, 41, 9, 4, 214, 46, 9, 4, 214, 45, 9, 4, 214, 43, 9, 4, 214, + 44, 9, 4, 205, 76, 9, 4, 205, 75, 9, 4, 205, 81, 9, 4, 205, 78, 9, 4, + 205, 55, 9, 4, 205, 57, 9, 4, 205, 56, 9, 4, 205, 60, 9, 4, 205, 59, 9, + 4, 205, 64, 9, 4, 205, 61, 9, 4, 205, 69, 9, 4, 205, 68, 9, 4, 205, 72, + 9, 4, 205, 70, 9, 4, 205, 51, 9, 4, 205, 50, 9, 4, 205, 58, 9, 4, 205, + 54, 9, 4, 205, 52, 9, 4, 205, 53, 9, 4, 205, 43, 9, 4, 205, 42, 9, 4, + 205, 47, 9, 4, 205, 46, 9, 4, 205, 44, 9, 4, 205, 45, 9, 4, 248, 88, 9, + 4, 248, 84, 9, 4, 248, 110, 9, 4, 248, 97, 9, 4, 248, 10, 9, 4, 248, 9, + 9, 4, 248, 12, 9, 4, 248, 11, 9, 4, 248, 25, 9, 4, 248, 24, 9, 4, 248, + 32, 9, 4, 248, 27, 9, 4, 248, 63, 9, 4, 248, 61, 9, 4, 248, 82, 9, 4, + 248, 70, 9, 4, 248, 4, 9, 4, 248, 14, 9, 4, 248, 8, 9, 4, 248, 5, 9, 4, + 248, 7, 9, 4, 247, 253, 9, 4, 247, 252, 9, 4, 248, 1, 9, 4, 248, 0, 9, 4, + 247, 254, 9, 4, 247, 255, 9, 4, 218, 85, 9, 4, 218, 89, 9, 4, 218, 68, 9, + 4, 218, 69, 9, 4, 218, 72, 9, 4, 218, 71, 9, 4, 218, 75, 9, 4, 218, 73, + 9, 4, 218, 79, 9, 4, 218, 78, 9, 4, 218, 84, 9, 4, 218, 80, 9, 4, 218, + 64, 9, 4, 218, 62, 9, 4, 218, 70, 9, 4, 218, 67, 9, 4, 218, 65, 9, 4, + 218, 66, 9, 4, 218, 57, 9, 4, 218, 56, 9, 4, 218, 61, 9, 4, 218, 60, 9, + 4, 218, 58, 9, 4, 218, 59, 9, 4, 224, 22, 9, 4, 224, 21, 9, 4, 224, 24, + 9, 4, 224, 23, 9, 4, 224, 13, 9, 4, 224, 15, 9, 4, 224, 14, 9, 4, 224, + 17, 9, 4, 224, 16, 9, 4, 224, 20, 9, 4, 224, 19, 9, 4, 224, 7, 9, 4, 224, + 6, 9, 4, 224, 12, 9, 4, 224, 10, 9, 4, 224, 8, 9, 4, 224, 9, 9, 4, 224, + 1, 9, 4, 224, 0, 9, 4, 224, 5, 9, 4, 224, 4, 9, 4, 224, 2, 9, 4, 224, 3, + 9, 4, 215, 224, 9, 4, 215, 219, 9, 4, 216, 2, 9, 4, 215, 235, 9, 4, 215, + 105, 9, 4, 215, 107, 9, 4, 215, 106, 9, 4, 215, 128, 9, 4, 215, 125, 9, + 4, 215, 158, 9, 4, 215, 148, 9, 4, 215, 193, 9, 4, 215, 186, 9, 4, 215, + 214, 9, 4, 215, 201, 9, 4, 215, 101, 9, 4, 215, 99, 9, 4, 215, 116, 9, 4, + 215, 104, 9, 4, 215, 102, 9, 4, 215, 103, 9, 4, 215, 83, 9, 4, 215, 82, + 9, 4, 215, 89, 9, 4, 215, 86, 9, 4, 215, 84, 9, 4, 215, 85, 9, 4, 219, + 65, 9, 4, 219, 59, 9, 4, 219, 113, 9, 4, 219, 71, 9, 4, 218, 29, 9, 4, + 218, 31, 9, 4, 218, 30, 9, 4, 218, 98, 9, 4, 218, 91, 9, 4, 218, 124, 9, + 4, 218, 102, 9, 4, 218, 217, 9, 4, 219, 51, 9, 4, 219, 0, 9, 4, 218, 22, + 9, 4, 218, 19, 9, 4, 218, 50, 9, 4, 218, 28, 9, 4, 218, 24, 9, 4, 218, + 25, 9, 4, 218, 4, 9, 4, 218, 3, 9, 4, 218, 9, 9, 4, 218, 7, 9, 4, 218, 5, + 9, 4, 218, 6, 9, 4, 232, 152, 9, 4, 232, 151, 9, 4, 232, 162, 9, 4, 232, + 153, 9, 4, 232, 158, 9, 4, 232, 157, 9, 4, 232, 160, 9, 4, 232, 159, 9, + 4, 232, 94, 9, 4, 232, 93, 9, 4, 232, 96, 9, 4, 232, 95, 9, 4, 232, 110, + 9, 4, 232, 108, 9, 4, 232, 122, 9, 4, 232, 112, 9, 4, 232, 87, 9, 4, 232, + 85, 9, 4, 232, 104, 9, 4, 232, 92, 9, 4, 232, 89, 9, 4, 232, 90, 9, 4, + 232, 79, 9, 4, 232, 78, 9, 4, 232, 83, 9, 4, 232, 82, 9, 4, 232, 80, 9, + 4, 232, 81, 9, 4, 219, 230, 9, 4, 219, 228, 9, 4, 219, 237, 9, 4, 219, + 231, 9, 4, 219, 234, 9, 4, 219, 233, 9, 4, 219, 236, 9, 4, 219, 235, 9, + 4, 219, 181, 9, 4, 219, 178, 9, 4, 219, 183, 9, 4, 219, 182, 9, 4, 219, + 217, 9, 4, 219, 216, 9, 4, 219, 226, 9, 4, 219, 220, 9, 4, 219, 173, 9, + 4, 219, 169, 9, 4, 219, 214, 9, 4, 219, 177, 9, 4, 219, 175, 9, 4, 219, + 176, 9, 4, 219, 153, 9, 4, 219, 151, 9, 4, 219, 163, 9, 4, 219, 156, 9, + 4, 219, 154, 9, 4, 219, 155, 9, 4, 232, 141, 9, 4, 232, 140, 9, 4, 232, + 147, 9, 4, 232, 142, 9, 4, 232, 144, 9, 4, 232, 143, 9, 4, 232, 146, 9, + 4, 232, 145, 9, 4, 232, 132, 9, 4, 232, 134, 9, 4, 232, 133, 9, 4, 232, + 137, 9, 4, 232, 136, 9, 4, 232, 139, 9, 4, 232, 138, 9, 4, 232, 128, 9, + 4, 232, 127, 9, 4, 232, 135, 9, 4, 232, 131, 9, 4, 232, 129, 9, 4, 232, + 130, 9, 4, 232, 124, 9, 4, 232, 123, 9, 4, 232, 126, 9, 4, 232, 125, 9, + 4, 224, 157, 9, 4, 224, 156, 9, 4, 224, 164, 9, 4, 224, 158, 9, 4, 224, + 160, 9, 4, 224, 159, 9, 4, 224, 163, 9, 4, 224, 161, 9, 4, 224, 146, 9, + 4, 224, 147, 9, 4, 224, 152, 9, 4, 224, 151, 9, 4, 224, 155, 9, 4, 224, + 153, 9, 4, 224, 141, 9, 4, 224, 150, 9, 4, 224, 145, 9, 4, 224, 142, 9, + 4, 224, 143, 9, 4, 224, 136, 9, 4, 224, 135, 9, 4, 224, 140, 9, 4, 224, + 139, 9, 4, 224, 137, 9, 4, 224, 138, 9, 4, 223, 113, 9, 4, 223, 112, 9, + 4, 223, 125, 9, 4, 223, 117, 9, 4, 223, 122, 9, 4, 223, 121, 9, 4, 223, + 124, 9, 4, 223, 123, 9, 4, 223, 98, 9, 4, 223, 100, 9, 4, 223, 99, 9, 4, + 223, 105, 9, 4, 223, 104, 9, 4, 223, 110, 9, 4, 223, 106, 9, 4, 223, 96, + 9, 4, 223, 94, 9, 4, 223, 103, 9, 4, 223, 97, 9, 4, 206, 161, 9, 4, 206, + 160, 9, 4, 206, 169, 9, 4, 206, 163, 9, 4, 206, 165, 9, 4, 206, 164, 9, + 4, 206, 167, 9, 4, 206, 166, 9, 4, 206, 149, 9, 4, 206, 150, 9, 4, 206, + 154, 9, 4, 206, 153, 9, 4, 206, 159, 9, 4, 206, 157, 9, 4, 206, 127, 9, + 4, 206, 125, 9, 4, 206, 140, 9, 4, 206, 130, 9, 4, 206, 128, 9, 4, 206, + 129, 9, 4, 205, 253, 9, 4, 205, 251, 9, 4, 206, 11, 9, 4, 205, 254, 9, 4, + 206, 5, 9, 4, 206, 4, 9, 4, 206, 8, 9, 4, 206, 6, 9, 4, 205, 191, 9, 4, + 205, 190, 9, 4, 205, 194, 9, 4, 205, 192, 9, 4, 205, 227, 9, 4, 205, 223, + 9, 4, 205, 247, 9, 4, 205, 231, 9, 4, 205, 182, 9, 4, 205, 178, 9, 4, + 205, 213, 9, 4, 205, 189, 9, 4, 205, 185, 9, 4, 205, 186, 9, 4, 205, 162, + 9, 4, 205, 161, 9, 4, 205, 169, 9, 4, 205, 165, 9, 4, 205, 163, 9, 4, + 205, 164, 9, 37, 219, 217, 9, 37, 229, 235, 9, 37, 231, 89, 9, 37, 223, + 117, 9, 37, 246, 249, 9, 37, 214, 64, 9, 37, 240, 118, 9, 37, 240, 150, + 9, 37, 226, 254, 9, 37, 237, 251, 9, 37, 229, 35, 9, 37, 250, 69, 9, 37, + 226, 142, 9, 37, 205, 247, 9, 37, 220, 52, 9, 37, 237, 245, 9, 37, 212, + 156, 9, 37, 240, 244, 9, 37, 205, 1, 9, 37, 246, 243, 9, 37, 246, 14, 9, + 37, 249, 68, 9, 37, 240, 114, 9, 37, 223, 106, 9, 37, 210, 170, 9, 37, + 222, 143, 9, 37, 232, 128, 9, 37, 205, 15, 9, 37, 220, 31, 9, 37, 238, + 191, 9, 37, 205, 253, 9, 37, 207, 144, 9, 37, 215, 89, 9, 37, 209, 28, 9, + 37, 205, 116, 9, 37, 232, 122, 9, 37, 223, 70, 9, 37, 232, 126, 9, 37, + 239, 254, 9, 37, 232, 146, 9, 37, 206, 250, 9, 37, 243, 237, 9, 37, 215, + 103, 9, 37, 229, 230, 9, 37, 246, 255, 9, 37, 247, 32, 9, 37, 247, 235, + 9, 37, 237, 248, 9, 37, 215, 224, 9, 37, 205, 0, 9, 37, 215, 148, 9, 37, + 248, 82, 9, 37, 204, 226, 9, 37, 225, 177, 9, 37, 231, 224, 229, 185, 1, + 250, 183, 229, 185, 1, 179, 229, 185, 1, 221, 93, 229, 185, 1, 246, 145, + 229, 185, 1, 212, 219, 229, 185, 1, 212, 56, 229, 185, 1, 240, 244, 229, + 185, 1, 172, 229, 185, 1, 231, 167, 229, 185, 1, 232, 200, 229, 185, 1, + 249, 1, 229, 185, 1, 248, 110, 229, 185, 1, 243, 196, 229, 185, 1, 210, + 243, 229, 185, 1, 210, 233, 229, 185, 1, 185, 229, 185, 1, 199, 229, 185, + 1, 230, 141, 229, 185, 1, 217, 199, 229, 185, 1, 205, 81, 229, 185, 1, + 205, 116, 229, 185, 1, 225, 77, 229, 185, 1, 155, 229, 185, 1, 206, 181, + 229, 185, 1, 239, 20, 229, 185, 1, 242, 73, 229, 185, 1, 207, 96, 229, + 185, 1, 216, 2, 229, 185, 1, 190, 229, 185, 1, 240, 99, 229, 185, 1, 62, + 229, 185, 1, 252, 248, 229, 185, 1, 75, 229, 185, 1, 242, 192, 229, 185, + 1, 74, 229, 185, 1, 76, 229, 185, 1, 71, 229, 185, 1, 210, 3, 229, 185, + 1, 209, 253, 229, 185, 1, 222, 206, 229, 185, 1, 135, 226, 40, 211, 211, + 229, 185, 1, 135, 225, 237, 220, 211, 229, 185, 1, 135, 226, 40, 246, + 254, 229, 185, 1, 135, 226, 40, 249, 184, 229, 185, 1, 135, 226, 40, 199, + 229, 185, 1, 135, 226, 40, 232, 171, 229, 185, 220, 72, 247, 155, 229, + 185, 220, 72, 241, 82, 213, 251, 46, 4, 243, 104, 46, 4, 243, 100, 46, 4, + 239, 53, 46, 4, 207, 45, 46, 4, 207, 44, 46, 4, 221, 164, 46, 4, 249, + 251, 46, 4, 250, 50, 46, 4, 227, 145, 46, 4, 231, 10, 46, 4, 227, 30, 46, + 4, 240, 183, 46, 4, 242, 21, 46, 4, 209, 34, 46, 4, 212, 120, 46, 4, 212, + 39, 46, 4, 245, 182, 46, 4, 245, 179, 46, 4, 230, 50, 46, 4, 219, 29, 46, + 4, 245, 251, 46, 4, 225, 142, 46, 4, 217, 74, 46, 4, 215, 212, 46, 4, + 205, 91, 46, 4, 205, 71, 46, 4, 248, 140, 46, 4, 232, 180, 46, 4, 224, + 171, 46, 4, 206, 49, 46, 4, 231, 221, 46, 4, 225, 50, 46, 4, 240, 162, + 46, 4, 227, 107, 46, 4, 225, 106, 46, 4, 223, 133, 46, 4, 74, 46, 4, 233, + 68, 46, 4, 239, 11, 46, 4, 238, 246, 46, 4, 207, 20, 46, 4, 207, 11, 46, + 4, 221, 53, 46, 4, 249, 249, 46, 4, 249, 244, 46, 4, 227, 138, 46, 4, + 231, 7, 46, 4, 227, 27, 46, 4, 240, 179, 46, 4, 241, 250, 46, 4, 208, + 214, 46, 4, 211, 211, 46, 4, 212, 19, 46, 4, 245, 174, 46, 4, 245, 178, + 46, 4, 229, 235, 46, 4, 218, 208, 46, 4, 245, 168, 46, 4, 225, 136, 46, + 4, 215, 80, 46, 4, 215, 183, 46, 4, 205, 40, 46, 4, 205, 67, 46, 4, 247, + 251, 46, 4, 232, 162, 46, 4, 224, 164, 46, 4, 206, 11, 46, 4, 231, 123, + 46, 4, 225, 42, 46, 4, 240, 61, 46, 4, 226, 254, 46, 4, 224, 230, 46, 4, + 223, 125, 46, 4, 62, 46, 4, 252, 122, 46, 4, 225, 72, 46, 4, 155, 46, 4, + 239, 110, 46, 4, 207, 96, 46, 4, 207, 85, 46, 4, 179, 46, 4, 250, 0, 46, + 4, 250, 183, 46, 4, 227, 153, 46, 4, 231, 15, 46, 4, 231, 13, 46, 4, 227, + 34, 46, 4, 240, 187, 46, 4, 242, 73, 46, 4, 209, 70, 46, 4, 212, 219, 46, + 4, 212, 56, 46, 4, 245, 192, 46, 4, 245, 181, 46, 4, 230, 141, 46, 4, + 219, 113, 46, 4, 246, 145, 46, 4, 225, 151, 46, 4, 217, 199, 46, 4, 216, + 2, 46, 4, 205, 116, 46, 4, 205, 81, 46, 4, 249, 1, 46, 4, 232, 200, 46, + 4, 224, 180, 46, 4, 190, 46, 4, 172, 46, 4, 232, 27, 46, 4, 225, 56, 46, + 4, 240, 244, 46, 4, 185, 46, 4, 199, 46, 4, 223, 144, 46, 4, 222, 152, + 46, 4, 222, 147, 46, 4, 238, 131, 46, 4, 206, 238, 46, 4, 206, 234, 46, + 4, 220, 187, 46, 4, 249, 247, 46, 4, 249, 172, 46, 4, 227, 133, 46, 4, + 231, 5, 46, 4, 227, 23, 46, 4, 240, 175, 46, 4, 241, 151, 46, 4, 208, + 161, 46, 4, 211, 105, 46, 4, 211, 248, 46, 4, 245, 171, 46, 4, 245, 176, + 46, 4, 229, 115, 46, 4, 218, 107, 46, 4, 245, 28, 46, 4, 225, 123, 46, 4, + 214, 174, 46, 4, 215, 152, 46, 4, 205, 17, 46, 4, 205, 62, 46, 4, 247, + 105, 46, 4, 232, 113, 46, 4, 224, 154, 46, 4, 205, 232, 46, 4, 231, 33, + 46, 4, 225, 40, 46, 4, 240, 8, 46, 4, 226, 150, 46, 4, 224, 56, 46, 4, + 223, 107, 46, 4, 71, 46, 4, 209, 234, 46, 4, 238, 42, 46, 4, 238, 31, 46, + 4, 206, 216, 46, 4, 206, 209, 46, 4, 220, 82, 46, 4, 249, 246, 46, 4, + 249, 101, 46, 4, 227, 132, 46, 4, 231, 3, 46, 4, 227, 22, 46, 4, 240, + 174, 46, 4, 241, 88, 46, 4, 207, 148, 46, 4, 210, 170, 46, 4, 211, 230, + 46, 4, 245, 169, 46, 4, 245, 175, 46, 4, 229, 81, 46, 4, 218, 50, 46, 4, + 243, 237, 46, 4, 225, 118, 46, 4, 213, 203, 46, 4, 215, 116, 46, 4, 205, + 9, 46, 4, 205, 58, 46, 4, 247, 40, 46, 4, 232, 104, 46, 4, 224, 150, 46, + 4, 205, 213, 46, 4, 230, 236, 46, 4, 225, 39, 46, 4, 239, 213, 46, 4, + 226, 114, 46, 4, 223, 217, 46, 4, 223, 103, 46, 4, 76, 46, 4, 222, 165, + 46, 4, 224, 254, 46, 4, 238, 149, 46, 4, 238, 134, 46, 4, 206, 250, 46, + 4, 206, 239, 46, 4, 220, 211, 46, 4, 249, 248, 46, 4, 249, 184, 46, 4, + 227, 134, 46, 4, 231, 6, 46, 4, 227, 25, 46, 4, 240, 177, 46, 4, 240, + 176, 46, 4, 241, 162, 46, 4, 208, 173, 46, 4, 124, 46, 4, 211, 253, 46, + 4, 245, 172, 46, 4, 245, 177, 46, 4, 229, 144, 46, 4, 218, 124, 46, 4, + 245, 51, 46, 4, 225, 127, 46, 4, 214, 193, 46, 4, 215, 158, 46, 4, 205, + 19, 46, 4, 205, 64, 46, 4, 247, 174, 46, 4, 232, 122, 46, 4, 224, 155, + 46, 4, 205, 247, 46, 4, 231, 53, 46, 4, 225, 41, 46, 4, 240, 19, 46, 4, + 226, 181, 46, 4, 224, 67, 46, 4, 223, 110, 46, 4, 75, 46, 4, 243, 41, 46, + 4, 225, 61, 46, 4, 239, 71, 46, 4, 239, 41, 46, 4, 207, 51, 46, 4, 207, + 39, 46, 4, 221, 174, 46, 4, 249, 252, 46, 4, 250, 61, 46, 4, 227, 146, + 46, 4, 231, 11, 46, 4, 231, 9, 46, 4, 227, 31, 46, 4, 240, 184, 46, 4, + 240, 182, 46, 4, 242, 28, 46, 4, 209, 39, 46, 4, 212, 131, 46, 4, 212, + 41, 46, 4, 245, 183, 46, 4, 245, 180, 46, 4, 230, 58, 46, 4, 219, 51, 46, + 4, 246, 9, 46, 4, 225, 143, 46, 4, 217, 86, 46, 4, 215, 214, 46, 4, 205, + 93, 46, 4, 205, 72, 46, 4, 248, 148, 46, 4, 232, 182, 46, 4, 224, 173, + 46, 4, 206, 52, 46, 4, 231, 224, 46, 4, 225, 51, 46, 4, 225, 47, 46, 4, + 240, 170, 46, 4, 240, 157, 46, 4, 227, 119, 46, 4, 225, 110, 46, 4, 223, + 134, 46, 4, 225, 79, 46, 4, 230, 19, 46, 247, 155, 46, 241, 82, 213, 251, + 46, 219, 196, 83, 46, 4, 225, 126, 242, 73, 46, 4, 225, 126, 172, 46, 4, + 225, 126, 214, 174, 46, 16, 242, 17, 46, 16, 231, 219, 46, 16, 211, 171, + 46, 16, 224, 205, 46, 16, 250, 135, 46, 16, 242, 72, 46, 16, 212, 215, + 46, 16, 246, 98, 46, 16, 245, 27, 46, 16, 230, 220, 46, 16, 211, 109, 46, + 16, 245, 50, 46, 16, 232, 114, 46, 18, 205, 85, 46, 18, 102, 46, 18, 105, + 46, 18, 142, 46, 18, 139, 46, 18, 168, 46, 18, 184, 46, 18, 195, 46, 18, + 193, 46, 18, 200, 46, 4, 225, 126, 185, 46, 4, 225, 126, 245, 51, 34, 6, + 1, 205, 89, 34, 5, 1, 205, 89, 34, 6, 1, 243, 191, 34, 5, 1, 243, 191, + 34, 6, 1, 218, 224, 243, 193, 34, 5, 1, 218, 224, 243, 193, 34, 6, 1, + 232, 249, 34, 5, 1, 232, 249, 34, 6, 1, 245, 67, 34, 5, 1, 245, 67, 34, + 6, 1, 226, 158, 209, 249, 34, 5, 1, 226, 158, 209, 249, 34, 6, 1, 249, + 112, 222, 170, 34, 5, 1, 249, 112, 222, 170, 34, 6, 1, 225, 88, 206, 34, + 34, 5, 1, 225, 88, 206, 34, 34, 6, 1, 206, 31, 2, 250, 177, 206, 34, 34, + 5, 1, 206, 31, 2, 250, 177, 206, 34, 34, 6, 1, 232, 247, 206, 65, 34, 5, + 1, 232, 247, 206, 65, 34, 6, 1, 218, 224, 205, 213, 34, 5, 1, 218, 224, + 205, 213, 34, 6, 1, 232, 247, 62, 34, 5, 1, 232, 247, 62, 34, 6, 1, 247, + 192, 229, 180, 205, 183, 34, 5, 1, 247, 192, 229, 180, 205, 183, 34, 6, + 1, 249, 194, 205, 183, 34, 5, 1, 249, 194, 205, 183, 34, 6, 1, 232, 247, + 247, 192, 229, 180, 205, 183, 34, 5, 1, 232, 247, 247, 192, 229, 180, + 205, 183, 34, 6, 1, 205, 249, 34, 5, 1, 205, 249, 34, 6, 1, 218, 224, + 210, 237, 34, 5, 1, 218, 224, 210, 237, 34, 6, 1, 214, 187, 246, 9, 34, + 5, 1, 214, 187, 246, 9, 34, 6, 1, 214, 187, 243, 68, 34, 5, 1, 214, 187, + 243, 68, 34, 6, 1, 214, 187, 243, 50, 34, 5, 1, 214, 187, 243, 50, 34, 6, + 1, 226, 162, 76, 34, 5, 1, 226, 162, 76, 34, 6, 1, 249, 221, 76, 34, 5, + 1, 249, 221, 76, 34, 6, 1, 50, 226, 162, 76, 34, 5, 1, 50, 226, 162, 76, + 34, 1, 226, 96, 76, 36, 34, 207, 131, 36, 34, 212, 99, 226, 213, 53, 36, + 34, 238, 30, 226, 213, 53, 36, 34, 211, 243, 226, 213, 53, 214, 233, 251, + 209, 36, 34, 1, 209, 246, 233, 129, 36, 34, 1, 74, 36, 34, 1, 206, 11, + 36, 34, 1, 71, 36, 34, 1, 239, 94, 53, 36, 34, 1, 206, 30, 36, 34, 1, + 214, 187, 53, 36, 34, 1, 222, 170, 36, 34, 231, 236, 36, 34, 221, 181, + 34, 231, 236, 34, 221, 181, 34, 6, 1, 243, 205, 34, 5, 1, 243, 205, 34, + 6, 1, 243, 182, 34, 5, 1, 243, 182, 34, 6, 1, 205, 48, 34, 5, 1, 205, 48, + 34, 6, 1, 248, 164, 34, 5, 1, 248, 164, 34, 6, 1, 243, 179, 34, 5, 1, + 243, 179, 34, 6, 1, 212, 132, 2, 226, 247, 109, 34, 5, 1, 212, 132, 2, + 226, 247, 109, 34, 6, 1, 210, 128, 34, 5, 1, 210, 128, 34, 6, 1, 210, + 212, 34, 5, 1, 210, 212, 34, 6, 1, 210, 217, 34, 5, 1, 210, 217, 34, 6, + 1, 212, 137, 34, 5, 1, 212, 137, 34, 6, 1, 238, 13, 34, 5, 1, 238, 13, + 34, 6, 1, 215, 95, 34, 5, 1, 215, 95, 34, 6, 1, 50, 76, 34, 5, 1, 50, 76, + 34, 6, 1, 247, 57, 76, 34, 5, 1, 247, 57, 76, 65, 1, 34, 239, 94, 53, 65, + 1, 34, 214, 187, 53, 36, 34, 1, 232, 247, 75, 21, 1, 62, 21, 1, 172, 21, + 1, 71, 21, 1, 230, 236, 21, 1, 243, 104, 21, 1, 219, 29, 21, 1, 212, 200, + 21, 1, 76, 21, 1, 223, 125, 21, 1, 74, 21, 1, 230, 141, 21, 1, 179, 21, + 1, 218, 154, 21, 1, 218, 201, 21, 1, 230, 49, 21, 1, 227, 106, 21, 1, + 212, 215, 21, 1, 225, 149, 21, 1, 224, 178, 21, 1, 229, 28, 21, 1, 213, + 119, 21, 1, 226, 114, 21, 1, 215, 178, 21, 1, 215, 80, 21, 1, 215, 188, + 21, 1, 216, 24, 21, 1, 230, 165, 21, 1, 231, 193, 21, 1, 223, 188, 21, 1, + 223, 217, 21, 1, 224, 149, 21, 1, 205, 229, 21, 1, 215, 116, 21, 1, 205, + 187, 21, 1, 190, 21, 1, 223, 251, 21, 1, 231, 179, 21, 1, 221, 97, 21, 1, + 224, 171, 21, 1, 223, 232, 21, 1, 220, 75, 21, 1, 206, 213, 21, 1, 221, + 164, 21, 1, 242, 21, 21, 1, 218, 50, 21, 1, 229, 81, 21, 1, 226, 254, 21, + 1, 224, 230, 21, 1, 218, 226, 21, 1, 219, 95, 21, 1, 231, 203, 21, 1, + 225, 5, 21, 1, 225, 56, 21, 1, 225, 77, 21, 1, 215, 158, 21, 1, 220, 79, + 21, 1, 241, 88, 21, 1, 241, 155, 21, 1, 207, 96, 21, 1, 199, 21, 1, 229, + 235, 21, 1, 221, 53, 21, 1, 229, 107, 21, 1, 231, 53, 21, 1, 227, 143, + 21, 1, 219, 2, 21, 1, 227, 83, 21, 1, 185, 21, 1, 211, 211, 21, 1, 231, + 123, 21, 1, 226, 181, 21, 1, 227, 151, 21, 1, 212, 80, 21, 1, 231, 15, + 21, 1, 212, 98, 21, 1, 223, 219, 21, 1, 217, 159, 21, 1, 242, 69, 21, 1, + 231, 17, 21, 1, 231, 48, 21, 36, 141, 231, 26, 21, 36, 141, 210, 161, 21, + 224, 177, 21, 241, 82, 213, 251, 21, 247, 162, 21, 247, 155, 21, 216, 52, + 21, 219, 196, 83, 65, 1, 248, 44, 135, 206, 1, 221, 5, 65, 1, 248, 44, + 135, 206, 76, 221, 5, 65, 1, 248, 44, 135, 206, 1, 215, 236, 65, 1, 248, + 44, 135, 206, 76, 215, 236, 65, 1, 248, 44, 135, 206, 1, 219, 214, 65, 1, + 248, 44, 135, 206, 76, 219, 214, 65, 1, 248, 44, 135, 206, 1, 218, 50, + 65, 1, 248, 44, 135, 206, 76, 218, 50, 65, 1, 242, 156, 244, 21, 135, + 134, 65, 1, 127, 244, 21, 135, 134, 65, 1, 226, 249, 244, 21, 135, 134, + 65, 1, 114, 244, 21, 135, 134, 65, 1, 242, 155, 244, 21, 135, 134, 65, 1, + 242, 156, 244, 21, 230, 38, 135, 134, 65, 1, 127, 244, 21, 230, 38, 135, + 134, 65, 1, 226, 249, 244, 21, 230, 38, 135, 134, 65, 1, 114, 244, 21, + 230, 38, 135, 134, 65, 1, 242, 155, 244, 21, 230, 38, 135, 134, 65, 1, + 242, 156, 230, 38, 135, 134, 65, 1, 127, 230, 38, 135, 134, 65, 1, 226, + 249, 230, 38, 135, 134, 65, 1, 114, 230, 38, 135, 134, 65, 1, 242, 155, + 230, 38, 135, 134, 65, 1, 67, 79, 134, 65, 1, 67, 214, 235, 65, 1, 67, + 194, 134, 65, 1, 229, 92, 48, 247, 92, 252, 108, 65, 1, 219, 81, 120, 45, + 65, 1, 219, 81, 130, 45, 65, 1, 219, 81, 242, 168, 83, 65, 1, 219, 81, + 233, 2, 242, 168, 83, 65, 1, 114, 233, 2, 242, 168, 83, 65, 1, 213, 233, + 23, 127, 211, 118, 65, 1, 213, 233, 23, 114, 211, 118, 7, 6, 1, 243, 94, + 252, 172, 7, 5, 1, 243, 94, 252, 172, 7, 6, 1, 243, 94, 252, 200, 7, 5, + 1, 243, 94, 252, 200, 7, 6, 1, 239, 39, 7, 5, 1, 239, 39, 7, 6, 1, 210, + 86, 7, 5, 1, 210, 86, 7, 6, 1, 211, 55, 7, 5, 1, 211, 55, 7, 6, 1, 247, + 37, 7, 5, 1, 247, 37, 7, 6, 1, 247, 38, 2, 247, 155, 7, 5, 1, 247, 38, 2, + 247, 155, 7, 1, 5, 6, 242, 139, 7, 1, 5, 6, 182, 7, 6, 1, 253, 164, 7, 5, + 1, 253, 164, 7, 6, 1, 252, 71, 7, 5, 1, 252, 71, 7, 6, 1, 251, 184, 7, 5, + 1, 251, 184, 7, 6, 1, 251, 168, 7, 5, 1, 251, 168, 7, 6, 1, 251, 169, 2, + 194, 134, 7, 5, 1, 251, 169, 2, 194, 134, 7, 6, 1, 251, 159, 7, 5, 1, + 251, 159, 7, 6, 1, 218, 224, 249, 35, 2, 245, 23, 7, 5, 1, 218, 224, 249, + 35, 2, 245, 23, 7, 6, 1, 232, 77, 2, 91, 7, 5, 1, 232, 77, 2, 91, 7, 6, + 1, 232, 77, 2, 245, 163, 91, 7, 5, 1, 232, 77, 2, 245, 163, 91, 7, 6, 1, + 232, 77, 2, 213, 225, 23, 245, 163, 91, 7, 5, 1, 232, 77, 2, 213, 225, + 23, 245, 163, 91, 7, 6, 1, 249, 111, 149, 7, 5, 1, 249, 111, 149, 7, 6, + 1, 230, 159, 2, 127, 91, 7, 5, 1, 230, 159, 2, 127, 91, 7, 6, 1, 148, 2, + 152, 213, 225, 222, 82, 7, 5, 1, 148, 2, 152, 213, 225, 222, 82, 7, 6, 1, + 148, 2, 229, 111, 7, 5, 1, 148, 2, 229, 111, 7, 6, 1, 222, 152, 7, 5, 1, + 222, 152, 7, 6, 1, 222, 68, 2, 213, 225, 211, 233, 245, 211, 7, 5, 1, + 222, 68, 2, 213, 225, 211, 233, 245, 211, 7, 6, 1, 222, 68, 2, 241, 174, + 7, 5, 1, 222, 68, 2, 241, 174, 7, 6, 1, 222, 68, 2, 214, 102, 212, 191, + 7, 5, 1, 222, 68, 2, 214, 102, 212, 191, 7, 6, 1, 220, 28, 2, 213, 225, + 211, 233, 245, 211, 7, 5, 1, 220, 28, 2, 213, 225, 211, 233, 245, 211, 7, + 6, 1, 220, 28, 2, 245, 163, 91, 7, 5, 1, 220, 28, 2, 245, 163, 91, 7, 6, + 1, 219, 150, 218, 96, 7, 5, 1, 219, 150, 218, 96, 7, 6, 1, 218, 39, 218, + 96, 7, 5, 1, 218, 39, 218, 96, 7, 6, 1, 209, 149, 2, 245, 163, 91, 7, 5, + 1, 209, 149, 2, 245, 163, 91, 7, 6, 1, 207, 137, 7, 5, 1, 207, 137, 7, 6, + 1, 208, 181, 205, 159, 7, 5, 1, 208, 181, 205, 159, 7, 6, 1, 211, 247, 2, + 91, 7, 5, 1, 211, 247, 2, 91, 7, 6, 1, 211, 247, 2, 213, 225, 211, 233, + 245, 211, 7, 5, 1, 211, 247, 2, 213, 225, 211, 233, 245, 211, 7, 6, 1, + 209, 29, 7, 5, 1, 209, 29, 7, 6, 1, 242, 203, 7, 5, 1, 242, 203, 7, 6, 1, + 232, 234, 7, 5, 1, 232, 234, 7, 6, 1, 247, 140, 7, 5, 1, 247, 140, 65, 1, + 209, 177, 7, 5, 1, 243, 228, 7, 5, 1, 229, 65, 7, 5, 1, 226, 90, 7, 5, 1, + 223, 180, 7, 5, 1, 218, 38, 7, 1, 5, 6, 218, 38, 7, 5, 1, 210, 159, 7, 5, + 1, 209, 241, 7, 6, 1, 233, 23, 246, 240, 7, 5, 1, 233, 23, 246, 240, 7, + 6, 1, 233, 23, 242, 139, 7, 5, 1, 233, 23, 242, 139, 7, 6, 1, 233, 23, + 241, 55, 7, 6, 1, 201, 233, 23, 241, 55, 7, 5, 1, 201, 233, 23, 241, 55, + 7, 6, 1, 201, 149, 7, 5, 1, 201, 149, 7, 6, 1, 233, 23, 137, 7, 5, 1, + 233, 23, 137, 7, 6, 1, 233, 23, 182, 7, 5, 1, 233, 23, 182, 7, 6, 1, 233, + 23, 213, 10, 7, 5, 1, 233, 23, 213, 10, 65, 1, 114, 247, 228, 253, 21, + 65, 1, 247, 162, 65, 1, 215, 144, 242, 242, 53, 7, 6, 1, 217, 163, 7, 5, + 1, 217, 163, 7, 6, 1, 201, 239, 155, 7, 5, 1, 230, 159, 2, 218, 230, 238, + 130, 23, 250, 24, 7, 6, 1, 226, 34, 2, 245, 211, 7, 5, 1, 226, 34, 2, + 245, 211, 7, 6, 1, 249, 35, 2, 134, 7, 5, 1, 249, 35, 2, 134, 7, 5, 1, + 249, 35, 2, 222, 26, 109, 7, 5, 1, 239, 156, 2, 222, 26, 109, 7, 6, 1, + 63, 2, 241, 174, 7, 5, 1, 63, 2, 241, 174, 7, 6, 1, 242, 140, 2, 91, 7, + 5, 1, 242, 140, 2, 91, 7, 6, 1, 208, 166, 252, 248, 7, 5, 1, 208, 166, + 252, 248, 7, 6, 1, 208, 166, 222, 206, 7, 5, 1, 208, 166, 222, 206, 7, 6, + 1, 208, 166, 210, 3, 7, 5, 1, 208, 166, 210, 3, 7, 6, 1, 241, 56, 2, 222, + 222, 91, 7, 5, 1, 241, 56, 2, 222, 222, 91, 7, 6, 1, 232, 77, 2, 222, + 222, 91, 7, 5, 1, 232, 77, 2, 222, 222, 91, 7, 6, 1, 226, 34, 2, 222, + 222, 91, 7, 5, 1, 226, 34, 2, 222, 222, 91, 7, 6, 1, 219, 150, 2, 222, + 222, 91, 7, 5, 1, 219, 150, 2, 222, 222, 91, 7, 6, 1, 218, 1, 2, 222, + 222, 91, 7, 5, 1, 218, 1, 2, 222, 222, 91, 7, 6, 1, 239, 156, 2, 109, 7, + 6, 1, 218, 224, 222, 142, 75, 7, 6, 1, 121, 241, 55, 7, 6, 1, 230, 159, + 2, 250, 24, 7, 6, 1, 201, 232, 76, 7, 6, 1, 201, 213, 10, 7, 242, 247, 1, + 215, 73, 74, 65, 1, 6, 239, 156, 2, 91, 65, 1, 5, 28, 222, 206, 7, 1, 5, + 6, 201, 229, 28, 7, 242, 247, 1, 218, 224, 242, 139, 7, 242, 247, 1, 218, + 224, 222, 67, 7, 242, 247, 1, 233, 2, 229, 28, 7, 242, 247, 1, 237, 225, + 229, 117, 7, 242, 247, 1, 252, 19, 229, 28, 213, 89, 225, 220, 1, 62, + 213, 89, 225, 220, 1, 74, 213, 89, 225, 220, 3, 243, 207, 213, 89, 225, + 220, 1, 71, 213, 89, 225, 220, 1, 75, 213, 89, 225, 220, 1, 76, 213, 89, + 225, 220, 3, 239, 88, 213, 89, 225, 220, 1, 231, 53, 213, 89, 225, 220, + 1, 231, 138, 213, 89, 225, 220, 1, 240, 19, 213, 89, 225, 220, 1, 240, + 71, 213, 89, 225, 220, 3, 252, 73, 213, 89, 225, 220, 1, 247, 174, 213, + 89, 225, 220, 1, 248, 32, 213, 89, 225, 220, 1, 232, 122, 213, 89, 225, + 220, 1, 232, 164, 213, 89, 225, 220, 1, 210, 185, 213, 89, 225, 220, 1, + 210, 191, 213, 89, 225, 220, 1, 246, 24, 213, 89, 225, 220, 1, 246, 33, + 213, 89, 225, 220, 1, 124, 213, 89, 225, 220, 1, 211, 253, 213, 89, 225, + 220, 1, 245, 51, 213, 89, 225, 220, 1, 245, 172, 213, 89, 225, 220, 1, + 224, 67, 213, 89, 225, 220, 1, 220, 211, 213, 89, 225, 220, 1, 221, 66, + 213, 89, 225, 220, 1, 249, 184, 213, 89, 225, 220, 1, 249, 248, 213, 89, + 225, 220, 1, 226, 181, 213, 89, 225, 220, 1, 218, 124, 213, 89, 225, 220, + 1, 229, 144, 213, 89, 225, 220, 1, 218, 75, 213, 89, 225, 220, 1, 214, + 193, 213, 89, 225, 220, 1, 238, 149, 213, 89, 225, 220, 22, 3, 62, 213, + 89, 225, 220, 22, 3, 74, 213, 89, 225, 220, 22, 3, 71, 213, 89, 225, 220, + 22, 3, 75, 213, 89, 225, 220, 22, 3, 222, 152, 213, 89, 225, 220, 220, + 206, 227, 191, 213, 89, 225, 220, 220, 206, 227, 190, 213, 89, 225, 220, + 220, 206, 227, 189, 213, 89, 225, 220, 220, 206, 227, 188, 143, 233, 51, + 241, 116, 119, 219, 204, 143, 233, 51, 241, 116, 119, 239, 121, 143, 233, + 51, 241, 116, 129, 219, 202, 143, 233, 51, 241, 116, 119, 215, 2, 143, + 233, 51, 241, 116, 119, 243, 83, 143, 233, 51, 241, 116, 129, 215, 1, + 143, 233, 51, 219, 205, 83, 143, 233, 51, 220, 238, 83, 143, 233, 51, + 218, 27, 83, 143, 233, 51, 219, 206, 83, 221, 89, 1, 172, 221, 89, 1, + 231, 167, 221, 89, 1, 240, 244, 221, 89, 1, 225, 77, 221, 89, 1, 249, 1, + 221, 89, 1, 248, 110, 221, 89, 1, 232, 200, 221, 89, 1, 223, 144, 221, + 89, 1, 212, 219, 221, 89, 1, 212, 56, 221, 89, 1, 246, 145, 221, 89, 1, + 199, 221, 89, 1, 179, 221, 89, 1, 221, 93, 221, 89, 1, 250, 183, 221, 89, + 1, 185, 221, 89, 1, 210, 243, 221, 89, 1, 210, 233, 221, 89, 1, 243, 196, + 221, 89, 1, 207, 96, 221, 89, 1, 205, 81, 221, 89, 1, 205, 116, 221, 89, + 1, 5, 62, 221, 89, 1, 190, 221, 89, 1, 219, 113, 221, 89, 1, 230, 141, + 221, 89, 1, 216, 2, 221, 89, 1, 217, 199, 221, 89, 1, 155, 221, 89, 1, + 62, 221, 89, 1, 74, 221, 89, 1, 71, 221, 89, 1, 75, 221, 89, 1, 76, 221, + 89, 1, 220, 19, 221, 89, 1, 206, 181, 221, 89, 1, 242, 73, 221, 89, 1, + 240, 135, 221, 89, 1, 243, 104, 221, 89, 213, 191, 1, 207, 96, 221, 89, + 213, 191, 1, 190, 221, 89, 1, 210, 208, 221, 89, 1, 210, 196, 221, 89, 1, + 246, 54, 221, 89, 1, 224, 103, 221, 89, 1, 252, 141, 190, 221, 89, 1, + 208, 169, 216, 2, 221, 89, 1, 208, 170, 155, 221, 89, 1, 251, 216, 242, + 73, 221, 89, 213, 191, 1, 219, 113, 221, 89, 213, 141, 1, 219, 113, 221, + 89, 1, 248, 217, 221, 89, 215, 41, 239, 69, 83, 221, 89, 50, 239, 69, 83, + 221, 89, 141, 215, 251, 221, 89, 141, 50, 215, 251, 217, 123, 3, 252, 73, + 217, 123, 3, 208, 183, 217, 123, 1, 62, 217, 123, 1, 253, 164, 217, 123, + 1, 74, 217, 123, 1, 233, 102, 217, 123, 1, 71, 217, 123, 1, 209, 162, + 217, 123, 1, 115, 137, 217, 123, 1, 115, 218, 90, 217, 123, 1, 115, 149, + 217, 123, 1, 115, 229, 173, 217, 123, 1, 75, 217, 123, 1, 243, 104, 217, + 123, 1, 252, 205, 217, 123, 1, 76, 217, 123, 1, 222, 152, 217, 123, 1, + 251, 184, 217, 123, 1, 172, 217, 123, 1, 231, 167, 217, 123, 1, 240, 244, + 217, 123, 1, 240, 99, 217, 123, 1, 225, 77, 217, 123, 1, 249, 1, 217, + 123, 1, 248, 110, 217, 123, 1, 232, 200, 217, 123, 1, 232, 170, 217, 123, + 1, 223, 144, 217, 123, 1, 210, 208, 217, 123, 1, 210, 196, 217, 123, 1, + 246, 54, 217, 123, 1, 246, 38, 217, 123, 1, 224, 103, 217, 123, 1, 212, + 219, 217, 123, 1, 212, 56, 217, 123, 1, 246, 145, 217, 123, 1, 245, 192, + 217, 123, 1, 199, 217, 123, 1, 179, 217, 123, 1, 221, 93, 217, 123, 1, + 250, 183, 217, 123, 1, 250, 0, 217, 123, 1, 185, 217, 123, 1, 190, 217, + 123, 1, 219, 113, 217, 123, 1, 230, 141, 217, 123, 1, 209, 70, 217, 123, + 1, 216, 2, 217, 123, 1, 214, 96, 217, 123, 1, 217, 199, 217, 123, 1, 155, + 217, 123, 1, 229, 172, 217, 123, 107, 3, 239, 139, 217, 123, 22, 3, 253, + 164, 217, 123, 22, 3, 74, 217, 123, 22, 3, 233, 102, 217, 123, 22, 3, 71, + 217, 123, 22, 3, 209, 162, 217, 123, 22, 3, 115, 137, 217, 123, 22, 3, + 115, 218, 90, 217, 123, 22, 3, 115, 149, 217, 123, 22, 3, 115, 229, 173, + 217, 123, 22, 3, 75, 217, 123, 22, 3, 243, 104, 217, 123, 22, 3, 252, + 205, 217, 123, 22, 3, 76, 217, 123, 22, 3, 222, 152, 217, 123, 22, 3, + 251, 184, 217, 123, 3, 208, 188, 217, 123, 246, 100, 217, 123, 50, 246, + 100, 217, 123, 18, 205, 85, 217, 123, 18, 102, 217, 123, 18, 105, 217, + 123, 18, 142, 217, 123, 18, 139, 217, 123, 18, 168, 217, 123, 18, 184, + 217, 123, 18, 195, 217, 123, 18, 193, 217, 123, 18, 200, 36, 89, 18, 205, + 85, 36, 89, 18, 102, 36, 89, 18, 105, 36, 89, 18, 142, 36, 89, 18, 139, + 36, 89, 18, 168, 36, 89, 18, 184, 36, 89, 18, 195, 36, 89, 18, 193, 36, + 89, 18, 200, 36, 89, 1, 62, 36, 89, 1, 71, 36, 89, 1, 172, 36, 89, 1, + 199, 36, 89, 1, 179, 36, 89, 1, 219, 113, 36, 89, 1, 208, 214, 36, 89, 3, + 251, 167, 89, 3, 214, 152, 248, 217, 89, 3, 248, 218, 208, 188, 89, 3, + 50, 248, 218, 208, 188, 89, 3, 248, 218, 105, 89, 3, 248, 218, 142, 89, + 3, 248, 218, 251, 167, 89, 3, 220, 55, 89, 240, 208, 241, 232, 89, 248, + 199, 89, 239, 63, 231, 230, 229, 236, 18, 205, 85, 231, 230, 229, 236, + 18, 102, 231, 230, 229, 236, 18, 105, 231, 230, 229, 236, 18, 142, 231, + 230, 229, 236, 18, 139, 231, 230, 229, 236, 18, 168, 231, 230, 229, 236, + 18, 184, 231, 230, 229, 236, 18, 195, 231, 230, 229, 236, 18, 193, 231, + 230, 229, 236, 18, 200, 231, 230, 229, 236, 1, 172, 231, 230, 229, 236, + 1, 231, 167, 231, 230, 229, 236, 1, 240, 244, 231, 230, 229, 236, 1, 225, + 77, 231, 230, 229, 236, 1, 217, 199, 231, 230, 229, 236, 1, 216, 2, 231, + 230, 229, 236, 1, 205, 116, 231, 230, 229, 236, 1, 223, 144, 231, 230, + 229, 236, 1, 212, 219, 231, 230, 229, 236, 1, 238, 46, 231, 230, 229, + 236, 1, 199, 231, 230, 229, 236, 1, 179, 231, 230, 229, 236, 1, 221, 93, + 231, 230, 229, 236, 1, 185, 231, 230, 229, 236, 1, 246, 145, 231, 230, + 229, 236, 1, 250, 183, 231, 230, 229, 236, 1, 219, 113, 231, 230, 229, + 236, 1, 190, 231, 230, 229, 236, 1, 230, 141, 231, 230, 229, 236, 1, 207, + 96, 231, 230, 229, 236, 1, 212, 56, 231, 230, 229, 236, 1, 155, 231, 230, + 229, 236, 1, 209, 70, 231, 230, 229, 236, 1, 249, 1, 231, 230, 229, 236, + 1, 62, 231, 230, 229, 236, 1, 222, 206, 231, 230, 229, 236, 1, 74, 231, + 230, 229, 236, 1, 222, 152, 231, 230, 229, 236, 22, 210, 3, 231, 230, + 229, 236, 22, 75, 231, 230, 229, 236, 22, 71, 231, 230, 229, 236, 22, + 243, 104, 231, 230, 229, 236, 22, 76, 231, 230, 229, 236, 135, 220, 226, + 231, 230, 229, 236, 135, 248, 233, 231, 230, 229, 236, 135, 248, 234, + 220, 226, 231, 230, 229, 236, 3, 247, 3, 231, 230, 229, 236, 3, 215, 88, + 219, 13, 1, 172, 219, 13, 1, 240, 244, 219, 13, 1, 225, 77, 219, 13, 1, + 212, 219, 219, 13, 1, 246, 145, 219, 13, 1, 199, 219, 13, 1, 179, 219, + 13, 1, 250, 183, 219, 13, 1, 185, 219, 13, 1, 249, 1, 219, 13, 1, 232, + 200, 219, 13, 1, 223, 144, 219, 13, 1, 217, 199, 219, 13, 1, 219, 113, + 219, 13, 1, 230, 141, 219, 13, 1, 190, 219, 13, 1, 207, 96, 219, 13, 1, + 155, 219, 13, 1, 227, 153, 219, 13, 1, 225, 56, 219, 13, 1, 225, 151, + 219, 13, 1, 223, 111, 219, 13, 1, 62, 219, 13, 22, 3, 74, 219, 13, 22, 3, + 71, 219, 13, 22, 3, 75, 219, 13, 22, 3, 252, 205, 219, 13, 22, 3, 76, + 219, 13, 22, 3, 251, 184, 219, 13, 22, 3, 242, 192, 219, 13, 22, 3, 243, + 130, 219, 13, 107, 3, 225, 79, 219, 13, 107, 3, 226, 33, 219, 13, 107, 3, + 137, 219, 13, 107, 3, 239, 155, 219, 13, 208, 188, 219, 13, 217, 77, 83, + 25, 113, 211, 189, 25, 113, 211, 188, 25, 113, 211, 186, 25, 113, 211, + 191, 25, 113, 218, 193, 25, 113, 218, 177, 25, 113, 218, 172, 25, 113, + 218, 174, 25, 113, 218, 190, 25, 113, 218, 183, 25, 113, 218, 176, 25, + 113, 218, 195, 25, 113, 218, 178, 25, 113, 218, 197, 25, 113, 218, 194, + 25, 113, 226, 236, 25, 113, 226, 227, 25, 113, 226, 230, 25, 113, 221, + 24, 25, 113, 221, 35, 25, 113, 221, 36, 25, 113, 214, 80, 25, 113, 233, + 115, 25, 113, 233, 122, 25, 113, 214, 91, 25, 113, 214, 78, 25, 113, 221, + 75, 25, 113, 238, 254, 25, 113, 214, 75, 176, 3, 221, 242, 176, 3, 248, + 145, 176, 3, 230, 66, 176, 3, 207, 13, 176, 1, 62, 176, 1, 237, 225, 231, + 234, 176, 1, 74, 176, 1, 233, 102, 176, 1, 71, 176, 1, 222, 52, 248, 116, + 176, 1, 225, 78, 230, 25, 176, 1, 225, 78, 230, 26, 219, 66, 176, 1, 75, + 176, 1, 252, 205, 176, 1, 76, 176, 1, 172, 176, 1, 232, 66, 217, 135, + 176, 1, 232, 66, 226, 75, 176, 1, 240, 244, 176, 1, 240, 245, 226, 75, + 176, 1, 225, 77, 176, 1, 249, 1, 176, 1, 249, 2, 226, 75, 176, 1, 232, + 200, 176, 1, 223, 145, 226, 75, 176, 1, 232, 201, 227, 243, 176, 1, 223, + 144, 176, 1, 210, 208, 176, 1, 210, 209, 227, 243, 176, 1, 246, 54, 176, + 1, 246, 55, 227, 243, 176, 1, 225, 237, 226, 75, 176, 1, 212, 219, 176, + 1, 212, 220, 226, 75, 176, 1, 246, 145, 176, 1, 246, 146, 227, 243, 176, + 1, 199, 176, 1, 179, 176, 1, 222, 52, 226, 75, 176, 1, 250, 183, 176, 1, + 250, 184, 226, 75, 176, 1, 185, 176, 1, 190, 176, 1, 219, 113, 176, 1, + 219, 114, 252, 214, 176, 1, 230, 141, 176, 1, 207, 96, 176, 1, 217, 200, + 226, 75, 176, 1, 217, 200, 227, 243, 176, 1, 217, 199, 176, 1, 155, 176, + 3, 248, 146, 212, 101, 176, 22, 3, 212, 158, 176, 22, 3, 211, 123, 176, + 22, 3, 206, 210, 176, 22, 3, 206, 211, 227, 94, 176, 22, 3, 213, 164, + 176, 22, 3, 213, 165, 227, 82, 176, 22, 3, 212, 179, 176, 22, 3, 245, + 101, 226, 74, 176, 22, 3, 221, 134, 176, 107, 3, 231, 196, 176, 107, 3, + 221, 147, 176, 107, 3, 248, 242, 176, 221, 255, 176, 47, 218, 244, 176, + 48, 218, 244, 176, 222, 41, 252, 116, 176, 222, 41, 228, 5, 176, 222, 41, + 229, 69, 176, 222, 41, 207, 7, 176, 222, 41, 222, 0, 176, 222, 41, 229, + 197, 176, 222, 41, 229, 63, 176, 222, 41, 252, 255, 176, 222, 41, 253, 0, + 252, 255, 176, 222, 41, 220, 249, 176, 201, 222, 41, 220, 249, 176, 221, + 251, 176, 18, 205, 85, 176, 18, 102, 176, 18, 105, 176, 18, 142, 176, 18, + 139, 176, 18, 168, 176, 18, 184, 176, 18, 195, 176, 18, 193, 176, 18, + 200, 176, 222, 41, 211, 158, 210, 157, 176, 222, 41, 232, 230, 66, 1, + 215, 238, 240, 99, 66, 1, 215, 238, 248, 110, 66, 1, 215, 238, 232, 170, + 66, 1, 215, 238, 224, 103, 66, 1, 215, 238, 250, 0, 66, 3, 215, 238, 217, + 121, 66, 65, 1, 215, 238, 219, 30, 66, 1, 41, 230, 113, 223, 144, 66, 1, + 41, 230, 113, 242, 73, 66, 1, 41, 230, 113, 240, 244, 66, 1, 41, 230, + 113, 240, 99, 66, 1, 41, 230, 113, 232, 200, 66, 1, 41, 230, 113, 232, + 170, 66, 1, 41, 230, 113, 246, 54, 66, 1, 41, 230, 113, 246, 38, 66, 1, + 41, 230, 113, 224, 103, 66, 41, 230, 113, 18, 205, 85, 66, 41, 230, 113, + 18, 102, 66, 41, 230, 113, 18, 105, 66, 41, 230, 113, 18, 142, 66, 41, + 230, 113, 18, 139, 66, 41, 230, 113, 18, 168, 66, 41, 230, 113, 18, 184, + 66, 41, 230, 113, 18, 195, 66, 41, 230, 113, 18, 193, 66, 41, 230, 113, + 18, 200, 66, 1, 41, 230, 113, 229, 172, 66, 1, 41, 230, 113, 246, 145, + 66, 1, 41, 230, 113, 245, 192, 66, 1, 41, 230, 113, 250, 183, 66, 1, 41, + 230, 113, 250, 0, 203, 1, 62, 203, 1, 74, 203, 1, 71, 203, 1, 75, 203, 1, + 252, 205, 203, 1, 76, 203, 1, 172, 203, 1, 231, 167, 203, 1, 240, 244, + 203, 1, 240, 99, 203, 1, 224, 242, 203, 1, 225, 77, 203, 1, 248, 110, + 203, 1, 248, 60, 203, 1, 232, 200, 203, 1, 232, 170, 203, 1, 224, 232, + 203, 1, 224, 234, 203, 1, 224, 233, 203, 1, 212, 219, 203, 1, 212, 56, + 203, 1, 246, 145, 203, 1, 245, 192, 203, 1, 223, 186, 203, 1, 199, 203, + 1, 246, 54, 203, 1, 179, 203, 1, 220, 157, 203, 1, 221, 93, 203, 1, 250, + 183, 203, 1, 250, 0, 203, 1, 226, 106, 203, 1, 185, 203, 1, 250, 97, 203, + 1, 190, 203, 1, 219, 113, 203, 1, 230, 141, 203, 1, 209, 70, 203, 1, 214, + 96, 203, 1, 217, 199, 203, 1, 155, 203, 22, 3, 253, 164, 203, 22, 3, 74, + 203, 22, 3, 233, 102, 203, 22, 3, 243, 90, 203, 22, 3, 71, 203, 22, 3, + 222, 206, 203, 22, 3, 76, 203, 22, 3, 252, 205, 203, 22, 3, 251, 184, + 203, 22, 3, 210, 3, 203, 107, 3, 190, 203, 107, 3, 219, 113, 203, 107, 3, + 230, 141, 203, 107, 3, 207, 96, 203, 1, 42, 232, 76, 203, 1, 42, 241, 55, + 203, 1, 42, 225, 79, 203, 107, 3, 42, 225, 79, 203, 1, 42, 248, 111, 203, + 1, 42, 213, 10, 203, 1, 42, 226, 33, 203, 1, 42, 222, 67, 203, 1, 42, + 206, 123, 203, 1, 42, 137, 203, 1, 42, 149, 203, 1, 42, 214, 99, 203, + 107, 3, 42, 229, 28, 203, 107, 3, 42, 239, 155, 203, 18, 205, 85, 203, + 18, 102, 203, 18, 105, 203, 18, 142, 203, 18, 139, 203, 18, 168, 203, 18, + 184, 203, 18, 195, 203, 18, 193, 203, 18, 200, 203, 220, 72, 214, 127, + 203, 220, 72, 246, 100, 203, 220, 72, 50, 246, 100, 203, 220, 72, 211, + 36, 246, 100, 66, 1, 231, 160, 240, 244, 66, 1, 231, 160, 249, 1, 66, 1, + 231, 160, 248, 110, 66, 1, 231, 160, 232, 200, 66, 1, 231, 160, 232, 170, + 66, 1, 231, 160, 223, 144, 66, 1, 231, 160, 210, 208, 66, 1, 231, 160, + 210, 196, 66, 1, 231, 160, 246, 54, 66, 1, 231, 160, 246, 38, 66, 1, 231, + 160, 245, 192, 66, 1, 231, 160, 199, 66, 1, 231, 160, 217, 199, 66, 1, + 231, 160, 155, 66, 1, 231, 160, 239, 20, 66, 1, 231, 160, 242, 73, 66, + 65, 1, 231, 160, 219, 30, 66, 1, 231, 160, 206, 181, 66, 1, 231, 160, + 205, 116, 66, 1, 231, 160, 219, 113, 66, 229, 133, 231, 160, 222, 227, + 66, 229, 133, 231, 160, 219, 227, 66, 229, 133, 231, 160, 238, 204, 66, + 16, 252, 193, 242, 167, 66, 16, 252, 193, 102, 66, 16, 252, 193, 105, 66, + 1, 252, 193, 219, 113, 66, 3, 221, 238, 232, 4, 211, 118, 66, 3, 41, 230, + 113, 211, 116, 66, 3, 41, 230, 113, 211, 113, 66, 1, 215, 96, 222, 23, + 248, 110, 66, 1, 215, 96, 222, 23, 216, 2, 41, 208, 204, 1, 114, 231, 53, + 41, 208, 204, 1, 127, 231, 53, 41, 208, 204, 1, 114, 231, 138, 41, 208, + 204, 1, 127, 231, 138, 41, 208, 204, 1, 114, 231, 147, 41, 208, 204, 1, + 127, 231, 147, 41, 208, 204, 1, 114, 240, 19, 41, 208, 204, 1, 127, 240, + 19, 41, 208, 204, 1, 114, 225, 2, 41, 208, 204, 1, 127, 225, 2, 41, 208, + 204, 1, 114, 247, 174, 41, 208, 204, 1, 127, 247, 174, 41, 208, 204, 1, + 114, 248, 32, 41, 208, 204, 1, 127, 248, 32, 41, 208, 204, 1, 114, 214, + 193, 41, 208, 204, 1, 127, 214, 193, 41, 208, 204, 1, 114, 223, 110, 41, + 208, 204, 1, 127, 223, 110, 41, 208, 204, 1, 114, 245, 51, 41, 208, 204, + 1, 127, 245, 51, 41, 208, 204, 1, 114, 124, 41, 208, 204, 1, 127, 124, + 41, 208, 204, 1, 114, 211, 253, 41, 208, 204, 1, 127, 211, 253, 41, 208, + 204, 1, 114, 224, 67, 41, 208, 204, 1, 127, 224, 67, 41, 208, 204, 1, + 114, 249, 184, 41, 208, 204, 1, 127, 249, 184, 41, 208, 204, 1, 114, 220, + 211, 41, 208, 204, 1, 127, 220, 211, 41, 208, 204, 1, 114, 221, 66, 41, + 208, 204, 1, 127, 221, 66, 41, 208, 204, 1, 114, 241, 162, 41, 208, 204, + 1, 127, 241, 162, 41, 208, 204, 1, 114, 226, 181, 41, 208, 204, 1, 127, + 226, 181, 41, 208, 204, 1, 114, 205, 247, 41, 208, 204, 1, 127, 205, 247, + 41, 208, 204, 1, 114, 218, 124, 41, 208, 204, 1, 127, 218, 124, 41, 208, + 204, 1, 114, 229, 144, 41, 208, 204, 1, 127, 229, 144, 41, 208, 204, 1, + 114, 208, 173, 41, 208, 204, 1, 127, 208, 173, 41, 208, 204, 1, 114, 238, + 149, 41, 208, 204, 1, 127, 238, 149, 41, 208, 204, 1, 114, 76, 41, 208, + 204, 1, 127, 76, 41, 208, 204, 227, 240, 232, 23, 41, 208, 204, 22, 253, + 164, 41, 208, 204, 22, 74, 41, 208, 204, 22, 210, 3, 41, 208, 204, 22, + 71, 41, 208, 204, 22, 75, 41, 208, 204, 22, 76, 41, 208, 204, 227, 240, + 231, 141, 41, 208, 204, 22, 237, 190, 41, 208, 204, 22, 210, 2, 41, 208, + 204, 22, 210, 18, 41, 208, 204, 22, 251, 182, 41, 208, 204, 22, 251, 159, + 41, 208, 204, 22, 252, 122, 41, 208, 204, 22, 252, 136, 41, 208, 204, + 135, 227, 240, 243, 75, 41, 208, 204, 135, 227, 240, 223, 185, 41, 208, + 204, 135, 227, 240, 211, 253, 41, 208, 204, 135, 227, 240, 214, 176, 41, + 208, 204, 16, 231, 36, 41, 208, 204, 16, 223, 185, 41, 208, 204, 16, 217, + 161, 41, 208, 204, 16, 238, 150, 238, 145, 41, 208, 204, 16, 231, 46, + 231, 45, 227, 101, 227, 160, 1, 75, 227, 101, 227, 160, 1, 76, 227, 101, + 227, 160, 1, 248, 110, 227, 101, 227, 160, 1, 223, 144, 227, 101, 227, + 160, 1, 210, 208, 227, 101, 227, 160, 1, 210, 196, 227, 101, 227, 160, 1, + 246, 54, 227, 101, 227, 160, 1, 246, 38, 227, 101, 227, 160, 1, 224, 103, + 227, 101, 227, 160, 1, 216, 2, 227, 101, 227, 160, 1, 214, 96, 227, 101, + 227, 160, 22, 3, 233, 102, 227, 101, 227, 160, 22, 3, 209, 162, 227, 101, + 227, 160, 22, 3, 253, 128, 227, 101, 227, 160, 22, 3, 251, 184, 227, 101, + 227, 160, 22, 3, 253, 121, 227, 101, 227, 160, 248, 74, 227, 101, 227, + 160, 252, 210, 231, 130, 227, 101, 227, 160, 252, 102, 227, 101, 227, + 160, 4, 218, 249, 83, 227, 101, 227, 160, 206, 232, 218, 249, 83, 227, + 101, 227, 160, 22, 3, 208, 183, 227, 101, 227, 160, 208, 188, 31, 4, 210, + 189, 31, 4, 210, 192, 31, 4, 210, 195, 31, 4, 210, 193, 31, 4, 210, 194, + 31, 4, 210, 191, 31, 4, 246, 32, 31, 4, 246, 34, 31, 4, 246, 37, 31, 4, + 246, 35, 31, 4, 246, 36, 31, 4, 246, 33, 31, 4, 243, 183, 31, 4, 243, + 187, 31, 4, 243, 195, 31, 4, 243, 192, 31, 4, 243, 193, 31, 4, 243, 184, + 31, 4, 248, 162, 31, 4, 248, 156, 31, 4, 248, 158, 31, 4, 248, 161, 31, + 4, 248, 159, 31, 4, 248, 160, 31, 4, 248, 157, 31, 4, 250, 97, 31, 4, + 250, 76, 31, 4, 250, 88, 31, 4, 250, 96, 31, 4, 250, 91, 31, 4, 250, 92, + 31, 4, 250, 80, 7, 5, 1, 250, 123, 252, 144, 7, 5, 1, 32, 218, 222, 7, 5, + 1, 249, 198, 75, 7, 5, 1, 250, 123, 75, 7, 5, 1, 174, 2, 241, 174, 7, 5, + 1, 230, 18, 242, 139, 7, 5, 1, 121, 241, 56, 2, 247, 56, 7, 5, 1, 230, + 159, 2, 233, 2, 230, 65, 182, 7, 5, 1, 230, 159, 2, 50, 226, 247, 211, + 180, 7, 5, 1, 230, 159, 2, 226, 247, 218, 148, 7, 5, 1, 229, 29, 2, 247, + 56, 7, 5, 1, 226, 34, 2, 247, 56, 7, 5, 1, 243, 29, 2, 247, 56, 7, 5, 1, + 249, 198, 76, 7, 5, 1, 249, 198, 148, 2, 91, 7, 5, 1, 222, 142, 148, 2, + 91, 7, 5, 1, 233, 2, 222, 206, 7, 5, 1, 201, 222, 207, 2, 91, 7, 5, 1, + 201, 222, 207, 2, 194, 91, 7, 5, 1, 201, 148, 222, 138, 7, 5, 1, 201, + 148, 222, 139, 2, 91, 7, 5, 1, 214, 0, 137, 7, 1, 5, 6, 219, 150, 2, 48, + 230, 34, 7, 5, 1, 219, 150, 206, 253, 239, 105, 7, 5, 1, 50, 137, 7, 5, + 1, 219, 150, 2, 247, 56, 7, 5, 1, 50, 219, 150, 2, 247, 56, 7, 5, 1, 121, + 137, 7, 5, 1, 121, 219, 150, 2, 218, 148, 7, 5, 1, 250, 114, 242, 215, 7, + 5, 1, 106, 2, 215, 144, 48, 230, 34, 7, 5, 1, 106, 250, 129, 2, 215, 144, + 48, 230, 34, 7, 5, 1, 209, 252, 7, 5, 1, 201, 209, 252, 7, 5, 1, 106, 2, + 47, 109, 7, 5, 1, 248, 58, 7, 5, 1, 248, 59, 2, 114, 48, 218, 148, 7, 5, + 1, 248, 59, 2, 114, 47, 216, 36, 7, 5, 1, 206, 196, 2, 114, 48, 218, 148, + 7, 5, 1, 206, 196, 2, 152, 47, 230, 34, 7, 5, 1, 206, 196, 2, 152, 47, + 230, 35, 23, 114, 48, 218, 148, 7, 5, 1, 206, 196, 2, 152, 47, 230, 35, + 2, 216, 36, 7, 5, 1, 206, 124, 2, 215, 144, 48, 230, 34, 65, 249, 123, 2, + 233, 2, 249, 122, 65, 1, 5, 239, 39, 65, 1, 5, 230, 159, 2, 233, 2, 230, + 65, 182, 65, 1, 5, 230, 159, 2, 226, 247, 211, 180, 65, 1, 5, 106, 2, 47, + 109, 7, 5, 1, 233, 2, 252, 144, 27, 1, 5, 6, 222, 170, 227, 101, 227, + 160, 1, 231, 43, 227, 101, 227, 160, 1, 217, 161, 227, 101, 227, 160, 1, + 230, 114, 227, 101, 227, 160, 1, 226, 192, 227, 101, 227, 160, 1, 179, + 227, 101, 227, 160, 1, 199, 227, 101, 227, 160, 1, 248, 50, 227, 101, + 227, 160, 1, 211, 182, 227, 101, 227, 160, 1, 231, 133, 227, 101, 227, + 160, 1, 224, 248, 227, 101, 227, 160, 1, 211, 245, 227, 101, 227, 160, 1, + 207, 90, 227, 101, 227, 160, 1, 206, 75, 227, 101, 227, 160, 1, 238, 35, + 227, 101, 227, 160, 1, 209, 234, 227, 101, 227, 160, 1, 74, 227, 101, + 227, 160, 1, 221, 87, 227, 101, 227, 160, 1, 251, 195, 227, 101, 227, + 160, 1, 240, 12, 227, 101, 227, 160, 1, 232, 168, 227, 101, 227, 160, 1, + 219, 90, 227, 101, 227, 160, 1, 250, 183, 227, 101, 227, 160, 1, 232, + 154, 227, 101, 227, 160, 1, 245, 126, 227, 101, 227, 160, 1, 240, 68, + 227, 101, 227, 160, 1, 245, 170, 227, 101, 227, 160, 1, 249, 254, 227, + 101, 227, 160, 1, 231, 44, 229, 116, 227, 101, 227, 160, 1, 230, 115, + 229, 116, 227, 101, 227, 160, 1, 226, 193, 229, 116, 227, 101, 227, 160, + 1, 222, 52, 229, 116, 227, 101, 227, 160, 1, 225, 237, 229, 116, 227, + 101, 227, 160, 1, 211, 183, 229, 116, 227, 101, 227, 160, 1, 224, 249, + 229, 116, 227, 101, 227, 160, 1, 237, 225, 229, 116, 227, 101, 227, 160, + 22, 3, 222, 164, 227, 101, 227, 160, 22, 3, 233, 66, 227, 101, 227, 160, + 22, 3, 252, 121, 227, 101, 227, 160, 22, 3, 206, 41, 227, 101, 227, 160, + 22, 3, 214, 166, 227, 101, 227, 160, 22, 3, 209, 231, 227, 101, 227, 160, + 22, 3, 248, 72, 227, 101, 227, 160, 22, 3, 223, 170, 227, 101, 227, 160, + 248, 73, 227, 101, 227, 160, 229, 66, 232, 209, 227, 101, 227, 160, 252, + 42, 232, 209, 227, 101, 227, 160, 18, 205, 85, 227, 101, 227, 160, 18, + 102, 227, 101, 227, 160, 18, 105, 227, 101, 227, 160, 18, 142, 227, 101, + 227, 160, 18, 139, 227, 101, 227, 160, 18, 168, 227, 101, 227, 160, 18, + 184, 227, 101, 227, 160, 18, 195, 227, 101, 227, 160, 18, 193, 227, 101, + 227, 160, 18, 200, 25, 162, 223, 51, 25, 162, 223, 56, 25, 162, 205, 246, + 25, 162, 205, 245, 25, 162, 205, 244, 25, 162, 210, 68, 25, 162, 210, 72, + 25, 162, 205, 211, 25, 162, 205, 207, 25, 162, 242, 191, 25, 162, 242, + 189, 25, 162, 242, 190, 25, 162, 242, 187, 25, 162, 237, 215, 25, 162, + 237, 214, 25, 162, 237, 212, 25, 162, 237, 213, 25, 162, 237, 218, 25, + 162, 237, 211, 25, 162, 237, 210, 25, 162, 237, 220, 25, 162, 252, 29, + 25, 162, 252, 28, 25, 100, 224, 216, 25, 100, 224, 222, 25, 100, 214, 77, + 25, 100, 214, 76, 25, 100, 211, 188, 25, 100, 211, 186, 25, 100, 211, + 185, 25, 100, 211, 191, 25, 100, 211, 192, 25, 100, 211, 184, 25, 100, + 218, 177, 25, 100, 218, 192, 25, 100, 214, 83, 25, 100, 218, 189, 25, + 100, 218, 179, 25, 100, 218, 181, 25, 100, 218, 168, 25, 100, 218, 169, + 25, 100, 232, 10, 25, 100, 226, 235, 25, 100, 226, 229, 25, 100, 214, 87, + 25, 100, 226, 232, 25, 100, 226, 238, 25, 100, 221, 20, 25, 100, 221, 29, + 25, 100, 221, 33, 25, 100, 214, 85, 25, 100, 221, 23, 25, 100, 221, 37, + 25, 100, 221, 38, 25, 100, 215, 25, 25, 100, 215, 28, 25, 100, 214, 81, + 25, 100, 214, 79, 25, 100, 215, 23, 25, 100, 215, 31, 25, 100, 215, 32, + 25, 100, 215, 17, 25, 100, 215, 30, 25, 100, 221, 245, 25, 100, 221, 246, + 25, 100, 206, 27, 25, 100, 206, 28, 25, 100, 247, 244, 25, 100, 247, 243, + 25, 100, 214, 92, 25, 100, 221, 73, 25, 100, 221, 72, 10, 15, 235, 93, + 10, 15, 235, 92, 10, 15, 235, 91, 10, 15, 235, 90, 10, 15, 235, 89, 10, + 15, 235, 88, 10, 15, 235, 87, 10, 15, 235, 86, 10, 15, 235, 85, 10, 15, + 235, 84, 10, 15, 235, 83, 10, 15, 235, 82, 10, 15, 235, 81, 10, 15, 235, + 80, 10, 15, 235, 79, 10, 15, 235, 78, 10, 15, 235, 77, 10, 15, 235, 76, + 10, 15, 235, 75, 10, 15, 235, 74, 10, 15, 235, 73, 10, 15, 235, 72, 10, + 15, 235, 71, 10, 15, 235, 70, 10, 15, 235, 69, 10, 15, 235, 68, 10, 15, + 235, 67, 10, 15, 235, 66, 10, 15, 235, 65, 10, 15, 235, 64, 10, 15, 235, + 63, 10, 15, 235, 62, 10, 15, 235, 61, 10, 15, 235, 60, 10, 15, 235, 59, + 10, 15, 235, 58, 10, 15, 235, 57, 10, 15, 235, 56, 10, 15, 235, 55, 10, + 15, 235, 54, 10, 15, 235, 53, 10, 15, 235, 52, 10, 15, 235, 51, 10, 15, + 235, 50, 10, 15, 235, 49, 10, 15, 235, 48, 10, 15, 235, 47, 10, 15, 235, + 46, 10, 15, 235, 45, 10, 15, 235, 44, 10, 15, 235, 43, 10, 15, 235, 42, + 10, 15, 235, 41, 10, 15, 235, 40, 10, 15, 235, 39, 10, 15, 235, 38, 10, + 15, 235, 37, 10, 15, 235, 36, 10, 15, 235, 35, 10, 15, 235, 34, 10, 15, + 235, 33, 10, 15, 235, 32, 10, 15, 235, 31, 10, 15, 235, 30, 10, 15, 235, + 29, 10, 15, 235, 28, 10, 15, 235, 27, 10, 15, 235, 26, 10, 15, 235, 25, + 10, 15, 235, 24, 10, 15, 235, 23, 10, 15, 235, 22, 10, 15, 235, 21, 10, + 15, 235, 20, 10, 15, 235, 19, 10, 15, 235, 18, 10, 15, 235, 17, 10, 15, + 235, 16, 10, 15, 235, 15, 10, 15, 235, 14, 10, 15, 235, 13, 10, 15, 235, + 12, 10, 15, 235, 11, 10, 15, 235, 10, 10, 15, 235, 9, 10, 15, 235, 8, 10, + 15, 235, 7, 10, 15, 235, 6, 10, 15, 235, 5, 10, 15, 235, 4, 10, 15, 235, + 3, 10, 15, 235, 2, 10, 15, 235, 1, 10, 15, 235, 0, 10, 15, 234, 255, 10, + 15, 234, 254, 10, 15, 234, 253, 10, 15, 234, 252, 10, 15, 234, 251, 10, + 15, 234, 250, 10, 15, 234, 249, 10, 15, 234, 248, 10, 15, 234, 247, 10, + 15, 234, 246, 10, 15, 234, 245, 10, 15, 234, 244, 10, 15, 234, 243, 10, + 15, 234, 242, 10, 15, 234, 241, 10, 15, 234, 240, 10, 15, 234, 239, 10, + 15, 234, 238, 10, 15, 234, 237, 10, 15, 234, 236, 10, 15, 234, 235, 10, + 15, 234, 234, 10, 15, 234, 233, 10, 15, 234, 232, 10, 15, 234, 231, 10, + 15, 234, 230, 10, 15, 234, 229, 10, 15, 234, 228, 10, 15, 234, 227, 10, + 15, 234, 226, 10, 15, 234, 225, 10, 15, 234, 224, 10, 15, 234, 223, 10, + 15, 234, 222, 10, 15, 234, 221, 10, 15, 234, 220, 10, 15, 234, 219, 10, + 15, 234, 218, 10, 15, 234, 217, 10, 15, 234, 216, 10, 15, 234, 215, 10, + 15, 234, 214, 10, 15, 234, 213, 10, 15, 234, 212, 10, 15, 234, 211, 10, + 15, 234, 210, 10, 15, 234, 209, 10, 15, 234, 208, 10, 15, 234, 207, 10, + 15, 234, 206, 10, 15, 234, 205, 10, 15, 234, 204, 10, 15, 234, 203, 10, + 15, 234, 202, 10, 15, 234, 201, 10, 15, 234, 200, 10, 15, 234, 199, 10, + 15, 234, 198, 10, 15, 234, 197, 10, 15, 234, 196, 10, 15, 234, 195, 10, + 15, 234, 194, 10, 15, 234, 193, 10, 15, 234, 192, 10, 15, 234, 191, 10, + 15, 234, 190, 10, 15, 234, 189, 10, 15, 234, 188, 10, 15, 234, 187, 10, + 15, 234, 186, 10, 15, 234, 185, 10, 15, 234, 184, 10, 15, 234, 183, 10, + 15, 234, 182, 10, 15, 234, 181, 10, 15, 234, 180, 10, 15, 234, 179, 10, + 15, 234, 178, 10, 15, 234, 177, 10, 15, 234, 176, 10, 15, 234, 175, 10, + 15, 234, 174, 10, 15, 234, 173, 10, 15, 234, 172, 10, 15, 234, 171, 10, + 15, 234, 170, 10, 15, 234, 169, 10, 15, 234, 168, 10, 15, 234, 167, 10, + 15, 234, 166, 10, 15, 234, 165, 10, 15, 234, 164, 10, 15, 234, 163, 10, + 15, 234, 162, 10, 15, 234, 161, 10, 15, 234, 160, 10, 15, 234, 159, 10, + 15, 234, 158, 10, 15, 234, 157, 10, 15, 234, 156, 10, 15, 234, 155, 10, + 15, 234, 154, 10, 15, 234, 153, 10, 15, 234, 152, 10, 15, 234, 151, 10, + 15, 234, 150, 10, 15, 234, 149, 10, 15, 234, 148, 10, 15, 234, 147, 10, + 15, 234, 146, 10, 15, 234, 145, 10, 15, 234, 144, 10, 15, 234, 143, 10, + 15, 234, 142, 10, 15, 234, 141, 10, 15, 234, 140, 10, 15, 234, 139, 10, + 15, 234, 138, 10, 15, 234, 137, 10, 15, 234, 136, 10, 15, 234, 135, 10, + 15, 234, 134, 10, 15, 234, 133, 10, 15, 234, 132, 10, 15, 234, 131, 10, + 15, 234, 130, 10, 15, 234, 129, 10, 15, 234, 128, 10, 15, 234, 127, 10, + 15, 234, 126, 10, 15, 234, 125, 10, 15, 234, 124, 10, 15, 234, 123, 10, + 15, 234, 122, 10, 15, 234, 121, 10, 15, 234, 120, 10, 15, 234, 119, 10, + 15, 234, 118, 10, 15, 234, 117, 10, 15, 234, 116, 10, 15, 234, 115, 10, + 15, 234, 114, 10, 15, 234, 113, 10, 15, 234, 112, 10, 15, 234, 111, 10, + 15, 234, 110, 10, 15, 234, 109, 10, 15, 234, 108, 10, 15, 234, 107, 10, + 15, 234, 106, 10, 15, 234, 105, 10, 15, 234, 104, 10, 15, 234, 103, 10, + 15, 234, 102, 10, 15, 234, 101, 10, 15, 234, 100, 10, 15, 234, 99, 10, + 15, 234, 98, 10, 15, 234, 97, 10, 15, 234, 96, 10, 15, 234, 95, 10, 15, + 234, 94, 10, 15, 234, 93, 10, 15, 234, 92, 10, 15, 234, 91, 10, 15, 234, + 90, 10, 15, 234, 89, 10, 15, 234, 88, 10, 15, 234, 87, 10, 15, 234, 86, + 10, 15, 234, 85, 10, 15, 234, 84, 10, 15, 234, 83, 10, 15, 234, 82, 10, + 15, 234, 81, 10, 15, 234, 80, 10, 15, 234, 79, 10, 15, 234, 78, 10, 15, + 234, 77, 10, 15, 234, 76, 10, 15, 234, 75, 10, 15, 234, 74, 10, 15, 234, + 73, 10, 15, 234, 72, 10, 15, 234, 71, 10, 15, 234, 70, 10, 15, 234, 69, + 10, 15, 234, 68, 10, 15, 234, 67, 10, 15, 234, 66, 10, 15, 234, 65, 10, + 15, 234, 64, 10, 15, 234, 63, 10, 15, 234, 62, 10, 15, 234, 61, 10, 15, + 234, 60, 10, 15, 234, 59, 10, 15, 234, 58, 10, 15, 234, 57, 10, 15, 234, + 56, 10, 15, 234, 55, 10, 15, 234, 54, 10, 15, 234, 53, 10, 15, 234, 52, + 10, 15, 234, 51, 10, 15, 234, 50, 10, 15, 234, 49, 10, 15, 234, 48, 10, + 15, 234, 47, 10, 15, 234, 46, 10, 15, 234, 45, 10, 15, 234, 44, 10, 15, + 234, 43, 10, 15, 234, 42, 10, 15, 234, 41, 10, 15, 234, 40, 10, 15, 234, + 39, 10, 15, 234, 38, 10, 15, 234, 37, 10, 15, 234, 36, 10, 15, 234, 35, + 10, 15, 234, 34, 10, 15, 234, 33, 10, 15, 234, 32, 10, 15, 234, 31, 10, + 15, 234, 30, 10, 15, 234, 29, 10, 15, 234, 28, 10, 15, 234, 27, 10, 15, + 234, 26, 10, 15, 234, 25, 10, 15, 234, 24, 10, 15, 234, 23, 10, 15, 234, + 22, 10, 15, 234, 21, 10, 15, 234, 20, 10, 15, 234, 19, 10, 15, 234, 18, + 10, 15, 234, 17, 10, 15, 234, 16, 10, 15, 234, 15, 10, 15, 234, 14, 10, + 15, 234, 13, 10, 15, 234, 12, 10, 15, 234, 11, 10, 15, 234, 10, 10, 15, + 234, 9, 10, 15, 234, 8, 10, 15, 234, 7, 10, 15, 234, 6, 10, 15, 234, 5, + 10, 15, 234, 4, 10, 15, 234, 3, 10, 15, 234, 2, 10, 15, 234, 1, 10, 15, + 234, 0, 10, 15, 233, 255, 10, 15, 233, 254, 10, 15, 233, 253, 10, 15, + 233, 252, 10, 15, 233, 251, 10, 15, 233, 250, 10, 15, 233, 249, 10, 15, + 233, 248, 10, 15, 233, 247, 10, 15, 233, 246, 10, 15, 233, 245, 10, 15, + 233, 244, 10, 15, 233, 243, 10, 15, 233, 242, 10, 15, 233, 241, 10, 15, + 233, 240, 10, 15, 233, 239, 10, 15, 233, 238, 10, 15, 233, 237, 10, 15, + 233, 236, 10, 15, 233, 235, 10, 15, 233, 234, 10, 15, 233, 233, 10, 15, + 233, 232, 10, 15, 233, 231, 10, 15, 233, 230, 10, 15, 233, 229, 10, 15, + 233, 228, 10, 15, 233, 227, 10, 15, 233, 226, 10, 15, 233, 225, 10, 15, + 233, 224, 10, 15, 233, 223, 10, 15, 233, 222, 10, 15, 233, 221, 10, 15, + 233, 220, 10, 15, 233, 219, 10, 15, 233, 218, 10, 15, 233, 217, 10, 15, + 233, 216, 10, 15, 233, 215, 10, 15, 233, 214, 10, 15, 233, 213, 10, 15, + 233, 212, 10, 15, 233, 211, 10, 15, 233, 210, 10, 15, 233, 209, 10, 15, + 233, 208, 10, 15, 233, 207, 10, 15, 233, 206, 10, 15, 233, 205, 10, 15, + 233, 204, 10, 15, 233, 203, 10, 15, 233, 202, 10, 15, 233, 201, 10, 15, + 233, 200, 10, 15, 233, 199, 10, 15, 233, 198, 10, 15, 233, 197, 10, 15, + 233, 196, 10, 15, 233, 195, 10, 15, 233, 194, 10, 15, 233, 193, 10, 15, + 233, 192, 10, 15, 233, 191, 10, 15, 233, 190, 10, 15, 233, 189, 10, 15, + 233, 188, 10, 15, 233, 187, 10, 15, 233, 186, 10, 15, 233, 185, 10, 15, + 233, 184, 10, 15, 233, 183, 10, 15, 233, 182, 10, 15, 233, 181, 10, 15, + 233, 180, 10, 15, 233, 179, 10, 15, 233, 178, 10, 15, 233, 177, 10, 15, + 233, 176, 10, 15, 233, 175, 10, 15, 233, 174, 10, 15, 233, 173, 10, 15, + 233, 172, 10, 15, 233, 171, 10, 15, 233, 170, 10, 15, 233, 169, 10, 15, + 233, 168, 10, 15, 233, 167, 10, 15, 233, 166, 10, 15, 233, 165, 10, 15, + 233, 164, 10, 15, 233, 163, 10, 15, 233, 162, 10, 15, 233, 161, 10, 15, + 233, 160, 10, 15, 233, 159, 10, 15, 233, 158, 10, 15, 233, 157, 10, 15, + 233, 156, 10, 15, 233, 155, 10, 15, 233, 154, 10, 15, 233, 153, 10, 15, + 233, 152, 10, 15, 233, 151, 10, 15, 233, 150, 10, 15, 233, 149, 10, 15, + 233, 148, 10, 15, 233, 147, 10, 15, 233, 146, 10, 15, 233, 145, 10, 15, + 233, 144, 10, 15, 233, 143, 10, 15, 233, 142, 10, 15, 233, 141, 10, 15, + 233, 140, 10, 15, 233, 139, 10, 15, 233, 138, 10, 15, 233, 137, 10, 15, + 233, 136, 10, 15, 233, 135, 10, 15, 233, 134, 7, 5, 28, 241, 254, 7, 5, + 28, 241, 250, 7, 5, 28, 241, 199, 7, 5, 28, 241, 253, 7, 5, 28, 241, 252, + 7, 5, 28, 152, 218, 1, 213, 10, 7, 5, 28, 214, 40, 164, 5, 28, 227, 84, + 224, 29, 164, 5, 28, 227, 84, 243, 108, 164, 5, 28, 227, 84, 233, 38, + 164, 5, 28, 208, 219, 224, 29, 164, 5, 28, 227, 84, 206, 173, 103, 1, + 205, 237, 2, 238, 244, 103, 220, 205, 232, 103, 209, 51, 103, 28, 206, 9, + 205, 237, 205, 237, 221, 194, 103, 1, 252, 139, 251, 154, 103, 1, 207, + 17, 252, 172, 103, 1, 207, 17, 246, 111, 103, 1, 207, 17, 239, 71, 103, + 1, 207, 17, 232, 45, 103, 1, 207, 17, 230, 98, 103, 1, 207, 17, 42, 227, + 90, 103, 1, 207, 17, 218, 242, 103, 1, 207, 17, 212, 147, 103, 1, 252, + 139, 101, 53, 103, 1, 215, 172, 2, 215, 172, 245, 23, 103, 1, 215, 172, + 2, 215, 45, 245, 23, 103, 1, 215, 172, 2, 246, 131, 23, 215, 172, 245, + 23, 103, 1, 215, 172, 2, 246, 131, 23, 215, 45, 245, 23, 103, 1, 126, 2, + 221, 194, 103, 1, 126, 2, 220, 7, 103, 1, 126, 2, 227, 204, 103, 1, 250, + 11, 2, 246, 130, 103, 1, 240, 48, 2, 246, 130, 103, 1, 246, 112, 2, 246, + 130, 103, 1, 239, 72, 2, 227, 204, 103, 1, 209, 44, 2, 246, 130, 103, 1, + 205, 97, 2, 246, 130, 103, 1, 212, 81, 2, 246, 130, 103, 1, 205, 237, 2, + 246, 130, 103, 1, 42, 232, 46, 2, 246, 130, 103, 1, 232, 46, 2, 246, 130, + 103, 1, 230, 99, 2, 246, 130, 103, 1, 227, 91, 2, 246, 130, 103, 1, 223, + 174, 2, 246, 130, 103, 1, 217, 158, 2, 246, 130, 103, 1, 42, 221, 175, 2, + 246, 130, 103, 1, 221, 175, 2, 246, 130, 103, 1, 210, 239, 2, 246, 130, + 103, 1, 219, 224, 2, 246, 130, 103, 1, 218, 243, 2, 246, 130, 103, 1, + 215, 172, 2, 246, 130, 103, 1, 212, 148, 2, 246, 130, 103, 1, 209, 44, 2, + 238, 142, 103, 1, 250, 11, 2, 219, 93, 103, 1, 232, 46, 2, 219, 93, 103, + 1, 221, 175, 2, 219, 93, 103, 28, 126, 230, 98, 8, 1, 126, 207, 77, 61, + 17, 8, 1, 126, 207, 77, 42, 17, 8, 1, 250, 49, 61, 17, 8, 1, 250, 49, 42, + 17, 8, 1, 250, 49, 78, 17, 8, 1, 250, 49, 169, 17, 8, 1, 221, 158, 61, + 17, 8, 1, 221, 158, 42, 17, 8, 1, 221, 158, 78, 17, 8, 1, 221, 158, 169, + 17, 8, 1, 250, 37, 61, 17, 8, 1, 250, 37, 42, 17, 8, 1, 250, 37, 78, 17, + 8, 1, 250, 37, 169, 17, 8, 1, 210, 199, 61, 17, 8, 1, 210, 199, 42, 17, + 8, 1, 210, 199, 78, 17, 8, 1, 210, 199, 169, 17, 8, 1, 212, 114, 61, 17, + 8, 1, 212, 114, 42, 17, 8, 1, 212, 114, 78, 17, 8, 1, 212, 114, 169, 17, + 8, 1, 210, 201, 61, 17, 8, 1, 210, 201, 42, 17, 8, 1, 210, 201, 78, 17, + 8, 1, 210, 201, 169, 17, 8, 1, 209, 33, 61, 17, 8, 1, 209, 33, 42, 17, 8, + 1, 209, 33, 78, 17, 8, 1, 209, 33, 169, 17, 8, 1, 221, 156, 61, 17, 8, 1, + 221, 156, 42, 17, 8, 1, 221, 156, 78, 17, 8, 1, 221, 156, 169, 17, 8, 1, + 243, 202, 61, 17, 8, 1, 243, 202, 42, 17, 8, 1, 243, 202, 78, 17, 8, 1, + 243, 202, 169, 17, 8, 1, 223, 132, 61, 17, 8, 1, 223, 132, 42, 17, 8, 1, + 223, 132, 78, 17, 8, 1, 223, 132, 169, 17, 8, 1, 212, 136, 61, 17, 8, 1, + 212, 136, 42, 17, 8, 1, 212, 136, 78, 17, 8, 1, 212, 136, 169, 17, 8, 1, + 212, 134, 61, 17, 8, 1, 212, 134, 42, 17, 8, 1, 212, 134, 78, 17, 8, 1, + 212, 134, 169, 17, 8, 1, 246, 52, 61, 17, 8, 1, 246, 52, 42, 17, 8, 1, + 246, 125, 61, 17, 8, 1, 246, 125, 42, 17, 8, 1, 243, 230, 61, 17, 8, 1, + 243, 230, 42, 17, 8, 1, 246, 50, 61, 17, 8, 1, 246, 50, 42, 17, 8, 1, + 232, 177, 61, 17, 8, 1, 232, 177, 42, 17, 8, 1, 218, 82, 61, 17, 8, 1, + 218, 82, 42, 17, 8, 1, 231, 213, 61, 17, 8, 1, 231, 213, 42, 17, 8, 1, + 231, 213, 78, 17, 8, 1, 231, 213, 169, 17, 8, 1, 240, 232, 61, 17, 8, 1, + 240, 232, 42, 17, 8, 1, 240, 232, 78, 17, 8, 1, 240, 232, 169, 17, 8, 1, + 239, 201, 61, 17, 8, 1, 239, 201, 42, 17, 8, 1, 239, 201, 78, 17, 8, 1, + 239, 201, 169, 17, 8, 1, 225, 1, 61, 17, 8, 1, 225, 1, 42, 17, 8, 1, 225, + 1, 78, 17, 8, 1, 225, 1, 169, 17, 8, 1, 224, 55, 240, 66, 61, 17, 8, 1, + 224, 55, 240, 66, 42, 17, 8, 1, 218, 128, 61, 17, 8, 1, 218, 128, 42, 17, + 8, 1, 218, 128, 78, 17, 8, 1, 218, 128, 169, 17, 8, 1, 239, 51, 2, 87, + 84, 61, 17, 8, 1, 239, 51, 2, 87, 84, 42, 17, 8, 1, 239, 51, 240, 17, 61, + 17, 8, 1, 239, 51, 240, 17, 42, 17, 8, 1, 239, 51, 240, 17, 78, 17, 8, 1, + 239, 51, 240, 17, 169, 17, 8, 1, 239, 51, 245, 48, 61, 17, 8, 1, 239, 51, + 245, 48, 42, 17, 8, 1, 239, 51, 245, 48, 78, 17, 8, 1, 239, 51, 245, 48, + 169, 17, 8, 1, 87, 250, 122, 61, 17, 8, 1, 87, 250, 122, 42, 17, 8, 1, + 87, 250, 122, 2, 239, 112, 84, 61, 17, 8, 1, 87, 250, 122, 2, 239, 112, + 84, 42, 17, 8, 16, 67, 52, 8, 16, 67, 55, 8, 16, 118, 177, 52, 8, 16, + 118, 177, 55, 8, 16, 129, 177, 52, 8, 16, 129, 177, 55, 8, 16, 129, 177, + 220, 201, 173, 52, 8, 16, 129, 177, 220, 201, 173, 55, 8, 16, 241, 125, + 177, 52, 8, 16, 241, 125, 177, 55, 8, 16, 50, 79, 250, 129, 55, 8, 16, + 118, 177, 208, 228, 52, 8, 16, 118, 177, 208, 228, 55, 8, 16, 218, 148, + 8, 16, 5, 212, 195, 52, 8, 16, 5, 212, 195, 55, 8, 1, 225, 80, 61, 17, 8, + 1, 225, 80, 42, 17, 8, 1, 225, 80, 78, 17, 8, 1, 225, 80, 169, 17, 8, 1, + 106, 61, 17, 8, 1, 106, 42, 17, 8, 1, 222, 207, 61, 17, 8, 1, 222, 207, + 42, 17, 8, 1, 205, 214, 61, 17, 8, 1, 205, 214, 42, 17, 8, 1, 106, 2, + 239, 112, 84, 61, 17, 8, 1, 209, 40, 61, 17, 8, 1, 209, 40, 42, 17, 8, 1, + 231, 101, 222, 207, 61, 17, 8, 1, 231, 101, 222, 207, 42, 17, 8, 1, 231, + 101, 205, 214, 61, 17, 8, 1, 231, 101, 205, 214, 42, 17, 8, 1, 174, 61, + 17, 8, 1, 174, 42, 17, 8, 1, 174, 78, 17, 8, 1, 174, 169, 17, 8, 1, 209, + 251, 231, 228, 231, 101, 126, 227, 229, 78, 17, 8, 1, 209, 251, 231, 228, + 231, 101, 126, 227, 229, 169, 17, 8, 28, 87, 2, 239, 112, 84, 2, 126, 61, + 17, 8, 28, 87, 2, 239, 112, 84, 2, 126, 42, 17, 8, 28, 87, 2, 239, 112, + 84, 2, 252, 249, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, 252, 249, 42, 17, + 8, 28, 87, 2, 239, 112, 84, 2, 207, 60, 61, 17, 8, 28, 87, 2, 239, 112, + 84, 2, 207, 60, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, 106, 61, 17, 8, + 28, 87, 2, 239, 112, 84, 2, 106, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, + 222, 207, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, 222, 207, 42, 17, 8, 28, + 87, 2, 239, 112, 84, 2, 205, 214, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, + 205, 214, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, 174, 61, 17, 8, 28, 87, + 2, 239, 112, 84, 2, 174, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, 174, 78, + 17, 8, 28, 209, 251, 231, 101, 87, 2, 239, 112, 84, 2, 126, 227, 229, 61, + 17, 8, 28, 209, 251, 231, 101, 87, 2, 239, 112, 84, 2, 126, 227, 229, 42, + 17, 8, 28, 209, 251, 231, 101, 87, 2, 239, 112, 84, 2, 126, 227, 229, 78, + 17, 8, 1, 242, 42, 87, 61, 17, 8, 1, 242, 42, 87, 42, 17, 8, 1, 242, 42, + 87, 78, 17, 8, 1, 242, 42, 87, 169, 17, 8, 28, 87, 2, 239, 112, 84, 2, + 171, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, 140, 61, 17, 8, 28, 87, 2, + 239, 112, 84, 2, 80, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, 126, 227, + 229, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, 87, 61, 17, 8, 28, 250, 39, + 2, 171, 61, 17, 8, 28, 250, 39, 2, 140, 61, 17, 8, 28, 250, 39, 2, 231, + 164, 61, 17, 8, 28, 250, 39, 2, 80, 61, 17, 8, 28, 250, 39, 2, 126, 227, + 229, 61, 17, 8, 28, 250, 39, 2, 87, 61, 17, 8, 28, 212, 116, 2, 171, 61, + 17, 8, 28, 212, 116, 2, 140, 61, 17, 8, 28, 212, 116, 2, 231, 164, 61, + 17, 8, 28, 212, 116, 2, 80, 61, 17, 8, 28, 212, 116, 2, 126, 227, 229, + 61, 17, 8, 28, 212, 116, 2, 87, 61, 17, 8, 28, 212, 38, 2, 171, 61, 17, + 8, 28, 212, 38, 2, 80, 61, 17, 8, 28, 212, 38, 2, 126, 227, 229, 61, 17, + 8, 28, 212, 38, 2, 87, 61, 17, 8, 28, 171, 2, 140, 61, 17, 8, 28, 171, 2, + 80, 61, 17, 8, 28, 140, 2, 171, 61, 17, 8, 28, 140, 2, 80, 61, 17, 8, 28, + 231, 164, 2, 171, 61, 17, 8, 28, 231, 164, 2, 140, 61, 17, 8, 28, 231, + 164, 2, 80, 61, 17, 8, 28, 217, 71, 2, 171, 61, 17, 8, 28, 217, 71, 2, + 140, 61, 17, 8, 28, 217, 71, 2, 231, 164, 61, 17, 8, 28, 217, 71, 2, 80, + 61, 17, 8, 28, 217, 192, 2, 140, 61, 17, 8, 28, 217, 192, 2, 80, 61, 17, + 8, 28, 246, 141, 2, 171, 61, 17, 8, 28, 246, 141, 2, 140, 61, 17, 8, 28, + 246, 141, 2, 231, 164, 61, 17, 8, 28, 246, 141, 2, 80, 61, 17, 8, 28, + 212, 195, 2, 140, 61, 17, 8, 28, 212, 195, 2, 80, 61, 17, 8, 28, 205, + 112, 2, 80, 61, 17, 8, 28, 252, 201, 2, 171, 61, 17, 8, 28, 252, 201, 2, + 80, 61, 17, 8, 28, 240, 95, 2, 171, 61, 17, 8, 28, 240, 95, 2, 80, 61, + 17, 8, 28, 242, 16, 2, 171, 61, 17, 8, 28, 242, 16, 2, 140, 61, 17, 8, + 28, 242, 16, 2, 231, 164, 61, 17, 8, 28, 242, 16, 2, 80, 61, 17, 8, 28, + 242, 16, 2, 126, 227, 229, 61, 17, 8, 28, 242, 16, 2, 87, 61, 17, 8, 28, + 220, 13, 2, 140, 61, 17, 8, 28, 220, 13, 2, 80, 61, 17, 8, 28, 220, 13, + 2, 126, 227, 229, 61, 17, 8, 28, 220, 13, 2, 87, 61, 17, 8, 28, 232, 46, + 2, 126, 61, 17, 8, 28, 232, 46, 2, 171, 61, 17, 8, 28, 232, 46, 2, 140, + 61, 17, 8, 28, 232, 46, 2, 231, 164, 61, 17, 8, 28, 232, 46, 2, 230, 107, + 61, 17, 8, 28, 232, 46, 2, 80, 61, 17, 8, 28, 232, 46, 2, 126, 227, 229, + 61, 17, 8, 28, 232, 46, 2, 87, 61, 17, 8, 28, 230, 107, 2, 171, 61, 17, + 8, 28, 230, 107, 2, 140, 61, 17, 8, 28, 230, 107, 2, 231, 164, 61, 17, 8, + 28, 230, 107, 2, 80, 61, 17, 8, 28, 230, 107, 2, 126, 227, 229, 61, 17, + 8, 28, 230, 107, 2, 87, 61, 17, 8, 28, 80, 2, 171, 61, 17, 8, 28, 80, 2, + 140, 61, 17, 8, 28, 80, 2, 231, 164, 61, 17, 8, 28, 80, 2, 80, 61, 17, 8, + 28, 80, 2, 126, 227, 229, 61, 17, 8, 28, 80, 2, 87, 61, 17, 8, 28, 224, + 55, 2, 171, 61, 17, 8, 28, 224, 55, 2, 140, 61, 17, 8, 28, 224, 55, 2, + 231, 164, 61, 17, 8, 28, 224, 55, 2, 80, 61, 17, 8, 28, 224, 55, 2, 126, + 227, 229, 61, 17, 8, 28, 224, 55, 2, 87, 61, 17, 8, 28, 239, 51, 2, 171, + 61, 17, 8, 28, 239, 51, 2, 80, 61, 17, 8, 28, 239, 51, 2, 126, 227, 229, + 61, 17, 8, 28, 239, 51, 2, 87, 61, 17, 8, 28, 87, 2, 171, 61, 17, 8, 28, + 87, 2, 140, 61, 17, 8, 28, 87, 2, 231, 164, 61, 17, 8, 28, 87, 2, 80, 61, + 17, 8, 28, 87, 2, 126, 227, 229, 61, 17, 8, 28, 87, 2, 87, 61, 17, 8, 28, + 212, 50, 2, 213, 139, 126, 61, 17, 8, 28, 219, 17, 2, 213, 139, 126, 61, + 17, 8, 28, 126, 227, 229, 2, 213, 139, 126, 61, 17, 8, 28, 215, 250, 2, + 246, 105, 61, 17, 8, 28, 215, 250, 2, 231, 251, 61, 17, 8, 28, 215, 250, + 2, 242, 40, 61, 17, 8, 28, 215, 250, 2, 246, 107, 61, 17, 8, 28, 215, + 250, 2, 231, 253, 61, 17, 8, 28, 215, 250, 2, 213, 139, 126, 61, 17, 8, + 28, 87, 2, 239, 112, 84, 2, 219, 17, 42, 17, 8, 28, 87, 2, 239, 112, 84, + 2, 205, 109, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, 80, 42, 17, 8, 28, + 87, 2, 239, 112, 84, 2, 224, 55, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, + 126, 227, 229, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, 87, 42, 17, 8, 28, + 250, 39, 2, 219, 17, 42, 17, 8, 28, 250, 39, 2, 205, 109, 42, 17, 8, 28, + 250, 39, 2, 80, 42, 17, 8, 28, 250, 39, 2, 224, 55, 42, 17, 8, 28, 250, + 39, 2, 126, 227, 229, 42, 17, 8, 28, 250, 39, 2, 87, 42, 17, 8, 28, 212, + 116, 2, 219, 17, 42, 17, 8, 28, 212, 116, 2, 205, 109, 42, 17, 8, 28, + 212, 116, 2, 80, 42, 17, 8, 28, 212, 116, 2, 224, 55, 42, 17, 8, 28, 212, + 116, 2, 126, 227, 229, 42, 17, 8, 28, 212, 116, 2, 87, 42, 17, 8, 28, + 212, 38, 2, 219, 17, 42, 17, 8, 28, 212, 38, 2, 205, 109, 42, 17, 8, 28, + 212, 38, 2, 80, 42, 17, 8, 28, 212, 38, 2, 224, 55, 42, 17, 8, 28, 212, + 38, 2, 126, 227, 229, 42, 17, 8, 28, 212, 38, 2, 87, 42, 17, 8, 28, 242, + 16, 2, 126, 227, 229, 42, 17, 8, 28, 242, 16, 2, 87, 42, 17, 8, 28, 220, + 13, 2, 126, 227, 229, 42, 17, 8, 28, 220, 13, 2, 87, 42, 17, 8, 28, 232, + 46, 2, 126, 42, 17, 8, 28, 232, 46, 2, 230, 107, 42, 17, 8, 28, 232, 46, + 2, 80, 42, 17, 8, 28, 232, 46, 2, 126, 227, 229, 42, 17, 8, 28, 232, 46, + 2, 87, 42, 17, 8, 28, 230, 107, 2, 80, 42, 17, 8, 28, 230, 107, 2, 126, + 227, 229, 42, 17, 8, 28, 230, 107, 2, 87, 42, 17, 8, 28, 80, 2, 126, 42, + 17, 8, 28, 80, 2, 80, 42, 17, 8, 28, 224, 55, 2, 219, 17, 42, 17, 8, 28, + 224, 55, 2, 205, 109, 42, 17, 8, 28, 224, 55, 2, 80, 42, 17, 8, 28, 224, + 55, 2, 224, 55, 42, 17, 8, 28, 224, 55, 2, 126, 227, 229, 42, 17, 8, 28, + 224, 55, 2, 87, 42, 17, 8, 28, 126, 227, 229, 2, 213, 139, 126, 42, 17, + 8, 28, 87, 2, 219, 17, 42, 17, 8, 28, 87, 2, 205, 109, 42, 17, 8, 28, 87, + 2, 80, 42, 17, 8, 28, 87, 2, 224, 55, 42, 17, 8, 28, 87, 2, 126, 227, + 229, 42, 17, 8, 28, 87, 2, 87, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, + 171, 78, 17, 8, 28, 87, 2, 239, 112, 84, 2, 140, 78, 17, 8, 28, 87, 2, + 239, 112, 84, 2, 231, 164, 78, 17, 8, 28, 87, 2, 239, 112, 84, 2, 80, 78, + 17, 8, 28, 87, 2, 239, 112, 84, 2, 239, 51, 78, 17, 8, 28, 250, 39, 2, + 171, 78, 17, 8, 28, 250, 39, 2, 140, 78, 17, 8, 28, 250, 39, 2, 231, 164, + 78, 17, 8, 28, 250, 39, 2, 80, 78, 17, 8, 28, 250, 39, 2, 239, 51, 78, + 17, 8, 28, 212, 116, 2, 171, 78, 17, 8, 28, 212, 116, 2, 140, 78, 17, 8, + 28, 212, 116, 2, 231, 164, 78, 17, 8, 28, 212, 116, 2, 80, 78, 17, 8, 28, + 212, 116, 2, 239, 51, 78, 17, 8, 28, 212, 38, 2, 80, 78, 17, 8, 28, 171, + 2, 140, 78, 17, 8, 28, 171, 2, 80, 78, 17, 8, 28, 140, 2, 171, 78, 17, 8, + 28, 140, 2, 80, 78, 17, 8, 28, 231, 164, 2, 171, 78, 17, 8, 28, 231, 164, + 2, 80, 78, 17, 8, 28, 217, 71, 2, 171, 78, 17, 8, 28, 217, 71, 2, 140, + 78, 17, 8, 28, 217, 71, 2, 231, 164, 78, 17, 8, 28, 217, 71, 2, 80, 78, + 17, 8, 28, 217, 192, 2, 140, 78, 17, 8, 28, 217, 192, 2, 231, 164, 78, + 17, 8, 28, 217, 192, 2, 80, 78, 17, 8, 28, 246, 141, 2, 171, 78, 17, 8, + 28, 246, 141, 2, 140, 78, 17, 8, 28, 246, 141, 2, 231, 164, 78, 17, 8, + 28, 246, 141, 2, 80, 78, 17, 8, 28, 212, 195, 2, 140, 78, 17, 8, 28, 205, + 112, 2, 80, 78, 17, 8, 28, 252, 201, 2, 171, 78, 17, 8, 28, 252, 201, 2, + 80, 78, 17, 8, 28, 240, 95, 2, 171, 78, 17, 8, 28, 240, 95, 2, 80, 78, + 17, 8, 28, 242, 16, 2, 171, 78, 17, 8, 28, 242, 16, 2, 140, 78, 17, 8, + 28, 242, 16, 2, 231, 164, 78, 17, 8, 28, 242, 16, 2, 80, 78, 17, 8, 28, + 220, 13, 2, 140, 78, 17, 8, 28, 220, 13, 2, 80, 78, 17, 8, 28, 232, 46, + 2, 171, 78, 17, 8, 28, 232, 46, 2, 140, 78, 17, 8, 28, 232, 46, 2, 231, + 164, 78, 17, 8, 28, 232, 46, 2, 230, 107, 78, 17, 8, 28, 232, 46, 2, 80, + 78, 17, 8, 28, 230, 107, 2, 171, 78, 17, 8, 28, 230, 107, 2, 140, 78, 17, + 8, 28, 230, 107, 2, 231, 164, 78, 17, 8, 28, 230, 107, 2, 80, 78, 17, 8, + 28, 230, 107, 2, 239, 51, 78, 17, 8, 28, 80, 2, 171, 78, 17, 8, 28, 80, + 2, 140, 78, 17, 8, 28, 80, 2, 231, 164, 78, 17, 8, 28, 80, 2, 80, 78, 17, + 8, 28, 224, 55, 2, 171, 78, 17, 8, 28, 224, 55, 2, 140, 78, 17, 8, 28, + 224, 55, 2, 231, 164, 78, 17, 8, 28, 224, 55, 2, 80, 78, 17, 8, 28, 224, + 55, 2, 239, 51, 78, 17, 8, 28, 239, 51, 2, 171, 78, 17, 8, 28, 239, 51, + 2, 80, 78, 17, 8, 28, 239, 51, 2, 213, 139, 126, 78, 17, 8, 28, 87, 2, + 171, 78, 17, 8, 28, 87, 2, 140, 78, 17, 8, 28, 87, 2, 231, 164, 78, 17, + 8, 28, 87, 2, 80, 78, 17, 8, 28, 87, 2, 239, 51, 78, 17, 8, 28, 87, 2, + 239, 112, 84, 2, 80, 169, 17, 8, 28, 87, 2, 239, 112, 84, 2, 239, 51, + 169, 17, 8, 28, 250, 39, 2, 80, 169, 17, 8, 28, 250, 39, 2, 239, 51, 169, + 17, 8, 28, 212, 116, 2, 80, 169, 17, 8, 28, 212, 116, 2, 239, 51, 169, + 17, 8, 28, 212, 38, 2, 80, 169, 17, 8, 28, 212, 38, 2, 239, 51, 169, 17, + 8, 28, 217, 71, 2, 80, 169, 17, 8, 28, 217, 71, 2, 239, 51, 169, 17, 8, + 28, 215, 211, 2, 80, 169, 17, 8, 28, 215, 211, 2, 239, 51, 169, 17, 8, + 28, 232, 46, 2, 230, 107, 169, 17, 8, 28, 232, 46, 2, 80, 169, 17, 8, 28, + 230, 107, 2, 80, 169, 17, 8, 28, 224, 55, 2, 80, 169, 17, 8, 28, 224, 55, + 2, 239, 51, 169, 17, 8, 28, 87, 2, 80, 169, 17, 8, 28, 87, 2, 239, 51, + 169, 17, 8, 28, 215, 250, 2, 242, 40, 169, 17, 8, 28, 215, 250, 2, 246, + 107, 169, 17, 8, 28, 215, 250, 2, 231, 253, 169, 17, 8, 28, 212, 195, 2, + 126, 227, 229, 61, 17, 8, 28, 212, 195, 2, 87, 61, 17, 8, 28, 252, 201, + 2, 126, 227, 229, 61, 17, 8, 28, 252, 201, 2, 87, 61, 17, 8, 28, 240, 95, + 2, 126, 227, 229, 61, 17, 8, 28, 240, 95, 2, 87, 61, 17, 8, 28, 217, 71, + 2, 126, 227, 229, 61, 17, 8, 28, 217, 71, 2, 87, 61, 17, 8, 28, 215, 211, + 2, 126, 227, 229, 61, 17, 8, 28, 215, 211, 2, 87, 61, 17, 8, 28, 140, 2, + 126, 227, 229, 61, 17, 8, 28, 140, 2, 87, 61, 17, 8, 28, 171, 2, 126, + 227, 229, 61, 17, 8, 28, 171, 2, 87, 61, 17, 8, 28, 231, 164, 2, 126, + 227, 229, 61, 17, 8, 28, 231, 164, 2, 87, 61, 17, 8, 28, 217, 192, 2, + 126, 227, 229, 61, 17, 8, 28, 217, 192, 2, 87, 61, 17, 8, 28, 246, 141, + 2, 126, 227, 229, 61, 17, 8, 28, 246, 141, 2, 87, 61, 17, 8, 28, 215, + 211, 2, 171, 61, 17, 8, 28, 215, 211, 2, 140, 61, 17, 8, 28, 215, 211, 2, + 231, 164, 61, 17, 8, 28, 215, 211, 2, 80, 61, 17, 8, 28, 215, 211, 2, + 219, 17, 61, 17, 8, 28, 217, 71, 2, 219, 17, 61, 17, 8, 28, 217, 192, 2, + 219, 17, 61, 17, 8, 28, 246, 141, 2, 219, 17, 61, 17, 8, 28, 212, 195, 2, + 126, 227, 229, 42, 17, 8, 28, 212, 195, 2, 87, 42, 17, 8, 28, 252, 201, + 2, 126, 227, 229, 42, 17, 8, 28, 252, 201, 2, 87, 42, 17, 8, 28, 240, 95, + 2, 126, 227, 229, 42, 17, 8, 28, 240, 95, 2, 87, 42, 17, 8, 28, 217, 71, + 2, 126, 227, 229, 42, 17, 8, 28, 217, 71, 2, 87, 42, 17, 8, 28, 215, 211, + 2, 126, 227, 229, 42, 17, 8, 28, 215, 211, 2, 87, 42, 17, 8, 28, 140, 2, + 126, 227, 229, 42, 17, 8, 28, 140, 2, 87, 42, 17, 8, 28, 171, 2, 126, + 227, 229, 42, 17, 8, 28, 171, 2, 87, 42, 17, 8, 28, 231, 164, 2, 126, + 227, 229, 42, 17, 8, 28, 231, 164, 2, 87, 42, 17, 8, 28, 217, 192, 2, + 126, 227, 229, 42, 17, 8, 28, 217, 192, 2, 87, 42, 17, 8, 28, 246, 141, + 2, 126, 227, 229, 42, 17, 8, 28, 246, 141, 2, 87, 42, 17, 8, 28, 215, + 211, 2, 171, 42, 17, 8, 28, 215, 211, 2, 140, 42, 17, 8, 28, 215, 211, 2, + 231, 164, 42, 17, 8, 28, 215, 211, 2, 80, 42, 17, 8, 28, 215, 211, 2, + 219, 17, 42, 17, 8, 28, 217, 71, 2, 219, 17, 42, 17, 8, 28, 217, 192, 2, + 219, 17, 42, 17, 8, 28, 246, 141, 2, 219, 17, 42, 17, 8, 28, 215, 211, 2, + 171, 78, 17, 8, 28, 215, 211, 2, 140, 78, 17, 8, 28, 215, 211, 2, 231, + 164, 78, 17, 8, 28, 215, 211, 2, 80, 78, 17, 8, 28, 217, 71, 2, 239, 51, + 78, 17, 8, 28, 215, 211, 2, 239, 51, 78, 17, 8, 28, 212, 195, 2, 80, 78, + 17, 8, 28, 217, 71, 2, 171, 169, 17, 8, 28, 217, 71, 2, 140, 169, 17, 8, + 28, 217, 71, 2, 231, 164, 169, 17, 8, 28, 215, 211, 2, 171, 169, 17, 8, + 28, 215, 211, 2, 140, 169, 17, 8, 28, 215, 211, 2, 231, 164, 169, 17, 8, + 28, 212, 195, 2, 80, 169, 17, 8, 28, 205, 112, 2, 80, 169, 17, 8, 28, + 126, 2, 242, 38, 42, 17, 8, 28, 126, 2, 242, 38, 61, 17, 222, 110, 47, + 221, 216, 222, 110, 48, 221, 216, 8, 28, 212, 116, 2, 171, 2, 80, 78, 17, + 8, 28, 212, 116, 2, 140, 2, 171, 42, 17, 8, 28, 212, 116, 2, 140, 2, 171, + 78, 17, 8, 28, 212, 116, 2, 140, 2, 80, 78, 17, 8, 28, 212, 116, 2, 231, + 164, 2, 80, 78, 17, 8, 28, 212, 116, 2, 80, 2, 171, 78, 17, 8, 28, 212, + 116, 2, 80, 2, 140, 78, 17, 8, 28, 212, 116, 2, 80, 2, 231, 164, 78, 17, + 8, 28, 171, 2, 80, 2, 140, 42, 17, 8, 28, 171, 2, 80, 2, 140, 78, 17, 8, + 28, 140, 2, 80, 2, 87, 42, 17, 8, 28, 140, 2, 80, 2, 126, 227, 229, 42, + 17, 8, 28, 217, 71, 2, 140, 2, 171, 78, 17, 8, 28, 217, 71, 2, 171, 2, + 140, 78, 17, 8, 28, 217, 71, 2, 171, 2, 126, 227, 229, 42, 17, 8, 28, + 217, 71, 2, 80, 2, 140, 42, 17, 8, 28, 217, 71, 2, 80, 2, 140, 78, 17, 8, + 28, 217, 71, 2, 80, 2, 171, 78, 17, 8, 28, 217, 71, 2, 80, 2, 80, 42, 17, + 8, 28, 217, 71, 2, 80, 2, 80, 78, 17, 8, 28, 217, 192, 2, 140, 2, 140, + 42, 17, 8, 28, 217, 192, 2, 140, 2, 140, 78, 17, 8, 28, 217, 192, 2, 80, + 2, 80, 42, 17, 8, 28, 215, 211, 2, 140, 2, 80, 42, 17, 8, 28, 215, 211, + 2, 140, 2, 80, 78, 17, 8, 28, 215, 211, 2, 171, 2, 87, 42, 17, 8, 28, + 215, 211, 2, 80, 2, 231, 164, 42, 17, 8, 28, 215, 211, 2, 80, 2, 231, + 164, 78, 17, 8, 28, 215, 211, 2, 80, 2, 80, 42, 17, 8, 28, 215, 211, 2, + 80, 2, 80, 78, 17, 8, 28, 246, 141, 2, 140, 2, 126, 227, 229, 42, 17, 8, + 28, 246, 141, 2, 231, 164, 2, 80, 42, 17, 8, 28, 246, 141, 2, 231, 164, + 2, 80, 78, 17, 8, 28, 212, 195, 2, 80, 2, 140, 42, 17, 8, 28, 212, 195, + 2, 80, 2, 140, 78, 17, 8, 28, 212, 195, 2, 80, 2, 80, 78, 17, 8, 28, 212, + 195, 2, 80, 2, 87, 42, 17, 8, 28, 252, 201, 2, 171, 2, 80, 42, 17, 8, 28, + 252, 201, 2, 80, 2, 80, 42, 17, 8, 28, 252, 201, 2, 80, 2, 80, 78, 17, 8, + 28, 252, 201, 2, 80, 2, 126, 227, 229, 42, 17, 8, 28, 240, 95, 2, 80, 2, + 80, 42, 17, 8, 28, 240, 95, 2, 80, 2, 87, 42, 17, 8, 28, 240, 95, 2, 80, + 2, 126, 227, 229, 42, 17, 8, 28, 242, 16, 2, 231, 164, 2, 80, 42, 17, 8, + 28, 242, 16, 2, 231, 164, 2, 80, 78, 17, 8, 28, 220, 13, 2, 80, 2, 140, + 42, 17, 8, 28, 220, 13, 2, 80, 2, 80, 42, 17, 8, 28, 230, 107, 2, 140, 2, + 80, 42, 17, 8, 28, 230, 107, 2, 140, 2, 87, 42, 17, 8, 28, 230, 107, 2, + 140, 2, 126, 227, 229, 42, 17, 8, 28, 230, 107, 2, 171, 2, 171, 78, 17, + 8, 28, 230, 107, 2, 171, 2, 171, 42, 17, 8, 28, 230, 107, 2, 231, 164, 2, + 80, 42, 17, 8, 28, 230, 107, 2, 231, 164, 2, 80, 78, 17, 8, 28, 230, 107, + 2, 80, 2, 140, 42, 17, 8, 28, 230, 107, 2, 80, 2, 140, 78, 17, 8, 28, 80, + 2, 140, 2, 171, 78, 17, 8, 28, 80, 2, 140, 2, 80, 78, 17, 8, 28, 80, 2, + 140, 2, 87, 42, 17, 8, 28, 80, 2, 171, 2, 140, 78, 17, 8, 28, 80, 2, 171, + 2, 80, 78, 17, 8, 28, 80, 2, 231, 164, 2, 171, 78, 17, 8, 28, 80, 2, 231, + 164, 2, 80, 78, 17, 8, 28, 80, 2, 171, 2, 231, 164, 78, 17, 8, 28, 239, + 51, 2, 80, 2, 171, 78, 17, 8, 28, 239, 51, 2, 80, 2, 80, 78, 17, 8, 28, + 224, 55, 2, 140, 2, 80, 78, 17, 8, 28, 224, 55, 2, 140, 2, 126, 227, 229, + 42, 17, 8, 28, 224, 55, 2, 171, 2, 80, 42, 17, 8, 28, 224, 55, 2, 171, 2, + 80, 78, 17, 8, 28, 224, 55, 2, 171, 2, 126, 227, 229, 42, 17, 8, 28, 224, + 55, 2, 80, 2, 87, 42, 17, 8, 28, 224, 55, 2, 80, 2, 126, 227, 229, 42, + 17, 8, 28, 87, 2, 80, 2, 80, 42, 17, 8, 28, 87, 2, 80, 2, 80, 78, 17, 8, + 28, 250, 39, 2, 231, 164, 2, 87, 42, 17, 8, 28, 212, 116, 2, 171, 2, 87, + 42, 17, 8, 28, 212, 116, 2, 171, 2, 126, 227, 229, 42, 17, 8, 28, 212, + 116, 2, 231, 164, 2, 87, 42, 17, 8, 28, 212, 116, 2, 231, 164, 2, 126, + 227, 229, 42, 17, 8, 28, 212, 116, 2, 80, 2, 87, 42, 17, 8, 28, 212, 116, + 2, 80, 2, 126, 227, 229, 42, 17, 8, 28, 171, 2, 80, 2, 87, 42, 17, 8, 28, + 171, 2, 140, 2, 126, 227, 229, 42, 17, 8, 28, 171, 2, 80, 2, 126, 227, + 229, 42, 17, 8, 28, 217, 71, 2, 231, 164, 2, 126, 227, 229, 42, 17, 8, + 28, 217, 192, 2, 140, 2, 87, 42, 17, 8, 28, 215, 211, 2, 140, 2, 87, 42, + 17, 8, 28, 246, 141, 2, 140, 2, 87, 42, 17, 8, 28, 230, 107, 2, 171, 2, + 87, 42, 17, 8, 28, 230, 107, 2, 80, 2, 87, 42, 17, 8, 28, 87, 2, 140, 2, + 87, 42, 17, 8, 28, 87, 2, 171, 2, 87, 42, 17, 8, 28, 87, 2, 80, 2, 87, + 42, 17, 8, 28, 80, 2, 80, 2, 87, 42, 17, 8, 28, 220, 13, 2, 80, 2, 87, + 42, 17, 8, 28, 224, 55, 2, 140, 2, 87, 42, 17, 8, 28, 220, 13, 2, 80, 2, + 140, 78, 17, 8, 28, 230, 107, 2, 140, 2, 80, 78, 17, 8, 28, 252, 201, 2, + 80, 2, 87, 42, 17, 8, 28, 232, 46, 2, 80, 2, 87, 42, 17, 8, 28, 224, 55, + 2, 171, 2, 140, 78, 17, 8, 28, 80, 2, 231, 164, 2, 87, 42, 17, 8, 28, + 230, 107, 2, 171, 2, 80, 78, 17, 8, 28, 232, 46, 2, 80, 2, 80, 42, 17, 8, + 28, 230, 107, 2, 171, 2, 80, 42, 17, 8, 28, 224, 55, 2, 171, 2, 140, 42, + 17, 8, 28, 171, 2, 140, 2, 87, 42, 17, 8, 28, 140, 2, 171, 2, 87, 42, 17, + 8, 28, 80, 2, 171, 2, 87, 42, 17, 8, 28, 242, 16, 2, 80, 2, 87, 42, 17, + 8, 28, 250, 39, 2, 140, 2, 87, 42, 17, 8, 28, 232, 46, 2, 80, 2, 80, 78, + 17, 8, 28, 252, 201, 2, 171, 2, 80, 78, 17, 8, 28, 217, 192, 2, 80, 2, + 80, 78, 17, 8, 28, 217, 71, 2, 231, 164, 2, 87, 42, 17, 8, 28, 224, 55, + 2, 171, 2, 87, 42, 17, 8, 28, 217, 168, 209, 172, 251, 232, 231, 25, 213, + 252, 3, 61, 17, 8, 28, 220, 9, 209, 172, 251, 232, 231, 25, 213, 252, 3, + 61, 17, 8, 28, 252, 155, 61, 17, 8, 28, 252, 186, 61, 17, 8, 28, 226, + 171, 61, 17, 8, 28, 217, 169, 61, 17, 8, 28, 219, 67, 61, 17, 8, 28, 252, + 175, 61, 17, 8, 28, 207, 79, 61, 17, 8, 28, 217, 168, 61, 17, 8, 28, 217, + 167, 252, 175, 207, 78, 8, 28, 232, 192, 218, 207, 53, 8, 28, 249, 211, + 252, 35, 252, 36, 54, 217, 58, 54, 216, 203, 54, 216, 135, 54, 216, 124, + 54, 216, 113, 54, 216, 102, 54, 216, 91, 54, 216, 80, 54, 216, 69, 54, + 217, 57, 54, 217, 46, 54, 217, 35, 54, 217, 24, 54, 217, 13, 54, 217, 2, + 54, 216, 247, 220, 131, 241, 136, 33, 79, 247, 155, 220, 131, 241, 136, + 33, 79, 128, 247, 155, 220, 131, 241, 136, 33, 79, 128, 241, 82, 213, + 251, 220, 131, 241, 136, 33, 79, 247, 162, 220, 131, 241, 136, 33, 79, + 216, 52, 220, 131, 241, 136, 33, 79, 242, 168, 83, 220, 131, 241, 136, + 33, 79, 219, 196, 83, 220, 131, 241, 136, 33, 79, 47, 59, 230, 16, 145, + 220, 131, 241, 136, 33, 79, 48, 59, 230, 16, 249, 132, 220, 131, 241, + 136, 33, 79, 194, 243, 54, 36, 28, 47, 239, 121, 36, 28, 48, 239, 121, + 36, 50, 211, 181, 47, 239, 121, 36, 50, 211, 181, 48, 239, 121, 36, 228, + 14, 47, 239, 121, 36, 228, 14, 48, 239, 121, 36, 247, 130, 228, 13, 36, + 28, 47, 160, 55, 36, 28, 48, 160, 55, 36, 211, 181, 47, 160, 55, 36, 211, + 181, 48, 160, 55, 36, 228, 14, 47, 160, 55, 36, 228, 14, 48, 160, 55, 36, + 247, 130, 228, 14, 55, 220, 131, 241, 136, 33, 79, 118, 67, 230, 56, 220, + 131, 241, 136, 33, 79, 243, 51, 246, 78, 220, 131, 241, 136, 33, 79, 243, + 42, 246, 78, 220, 131, 241, 136, 33, 79, 114, 229, 205, 220, 131, 241, + 136, 33, 79, 207, 61, 114, 229, 205, 220, 131, 241, 136, 33, 79, 47, 221, + 216, 220, 131, 241, 136, 33, 79, 48, 221, 216, 220, 131, 241, 136, 33, + 79, 47, 247, 26, 145, 220, 131, 241, 136, 33, 79, 48, 247, 26, 145, 220, + 131, 241, 136, 33, 79, 47, 211, 93, 215, 204, 145, 220, 131, 241, 136, + 33, 79, 48, 211, 93, 215, 204, 145, 220, 131, 241, 136, 33, 79, 47, 60, + 230, 16, 145, 220, 131, 241, 136, 33, 79, 48, 60, 230, 16, 145, 220, 131, + 241, 136, 33, 79, 47, 50, 252, 109, 145, 220, 131, 241, 136, 33, 79, 48, + 50, 252, 109, 145, 220, 131, 241, 136, 33, 79, 47, 252, 109, 145, 220, + 131, 241, 136, 33, 79, 48, 252, 109, 145, 220, 131, 241, 136, 33, 79, 47, + 247, 92, 145, 220, 131, 241, 136, 33, 79, 48, 247, 92, 145, 220, 131, + 241, 136, 33, 79, 47, 59, 247, 92, 145, 220, 131, 241, 136, 33, 79, 48, + 59, 247, 92, 145, 216, 32, 245, 23, 59, 216, 32, 245, 23, 220, 131, 241, + 136, 33, 79, 47, 49, 145, 220, 131, 241, 136, 33, 79, 48, 49, 145, 246, + 77, 222, 81, 248, 125, 222, 81, 207, 61, 222, 81, 50, 207, 61, 222, 81, + 246, 77, 114, 229, 205, 248, 125, 114, 229, 205, 207, 61, 114, 229, 205, + 5, 247, 155, 5, 128, 247, 155, 5, 241, 82, 213, 251, 5, 216, 52, 5, 247, + 162, 5, 219, 196, 83, 5, 242, 168, 83, 5, 243, 51, 246, 78, 5, 47, 221, + 216, 5, 48, 221, 216, 5, 47, 247, 26, 145, 5, 48, 247, 26, 145, 5, 47, + 211, 93, 215, 204, 145, 5, 48, 211, 93, 215, 204, 145, 5, 43, 53, 5, 252, + 125, 5, 251, 209, 5, 101, 53, 5, 237, 238, 5, 230, 10, 53, 5, 239, 230, + 53, 5, 242, 242, 53, 5, 218, 225, 214, 180, 5, 245, 35, 53, 5, 221, 131, + 53, 5, 247, 153, 251, 199, 8, 242, 38, 61, 17, 8, 212, 154, 2, 242, 38, + 52, 8, 246, 105, 61, 17, 8, 212, 192, 241, 115, 8, 231, 251, 61, 17, 8, + 242, 40, 61, 17, 8, 242, 40, 169, 17, 8, 246, 107, 61, 17, 8, 246, 107, + 169, 17, 8, 231, 253, 61, 17, 8, 231, 253, 169, 17, 8, 215, 250, 61, 17, + 8, 215, 250, 169, 17, 8, 213, 163, 61, 17, 8, 213, 163, 169, 17, 8, 1, + 239, 112, 61, 17, 8, 1, 126, 2, 228, 9, 84, 61, 17, 8, 1, 126, 2, 228, 9, + 84, 42, 17, 8, 1, 126, 2, 239, 112, 84, 61, 17, 8, 1, 126, 2, 239, 112, + 84, 42, 17, 8, 1, 207, 60, 2, 239, 112, 84, 61, 17, 8, 1, 207, 60, 2, + 239, 112, 84, 42, 17, 8, 1, 126, 2, 239, 112, 250, 26, 61, 17, 8, 1, 126, + 2, 239, 112, 250, 26, 42, 17, 8, 1, 87, 2, 239, 112, 84, 61, 17, 8, 1, + 87, 2, 239, 112, 84, 42, 17, 8, 1, 87, 2, 239, 112, 84, 78, 17, 8, 1, 87, + 2, 239, 112, 84, 169, 17, 8, 1, 126, 61, 17, 8, 1, 126, 42, 17, 8, 1, + 250, 39, 61, 17, 8, 1, 250, 39, 42, 17, 8, 1, 250, 39, 78, 17, 8, 1, 250, + 39, 169, 17, 8, 1, 212, 116, 227, 198, 61, 17, 8, 1, 212, 116, 227, 198, + 42, 17, 8, 1, 212, 116, 61, 17, 8, 1, 212, 116, 42, 17, 8, 1, 212, 116, + 78, 17, 8, 1, 212, 116, 169, 17, 8, 1, 212, 38, 61, 17, 8, 1, 212, 38, + 42, 17, 8, 1, 212, 38, 78, 17, 8, 1, 212, 38, 169, 17, 8, 1, 171, 61, 17, + 8, 1, 171, 42, 17, 8, 1, 171, 78, 17, 8, 1, 171, 169, 17, 8, 1, 140, 61, + 17, 8, 1, 140, 42, 17, 8, 1, 140, 78, 17, 8, 1, 140, 169, 17, 8, 1, 231, + 164, 61, 17, 8, 1, 231, 164, 42, 17, 8, 1, 231, 164, 78, 17, 8, 1, 231, + 164, 169, 17, 8, 1, 246, 118, 61, 17, 8, 1, 246, 118, 42, 17, 8, 1, 212, + 50, 61, 17, 8, 1, 212, 50, 42, 17, 8, 1, 219, 17, 61, 17, 8, 1, 219, 17, + 42, 17, 8, 1, 205, 109, 61, 17, 8, 1, 205, 109, 42, 17, 8, 1, 217, 71, + 61, 17, 8, 1, 217, 71, 42, 17, 8, 1, 217, 71, 78, 17, 8, 1, 217, 71, 169, + 17, 8, 1, 215, 211, 61, 17, 8, 1, 215, 211, 42, 17, 8, 1, 215, 211, 78, + 17, 8, 1, 215, 211, 169, 17, 8, 1, 217, 192, 61, 17, 8, 1, 217, 192, 42, + 17, 8, 1, 217, 192, 78, 17, 8, 1, 217, 192, 169, 17, 8, 1, 246, 141, 61, + 17, 8, 1, 246, 141, 42, 17, 8, 1, 246, 141, 78, 17, 8, 1, 246, 141, 169, + 17, 8, 1, 212, 195, 61, 17, 8, 1, 212, 195, 42, 17, 8, 1, 212, 195, 78, + 17, 8, 1, 212, 195, 169, 17, 8, 1, 205, 112, 61, 17, 8, 1, 205, 112, 42, + 17, 8, 1, 205, 112, 78, 17, 8, 1, 205, 112, 169, 17, 8, 1, 252, 201, 61, + 17, 8, 1, 252, 201, 42, 17, 8, 1, 252, 201, 78, 17, 8, 1, 252, 201, 169, + 17, 8, 1, 240, 95, 61, 17, 8, 1, 240, 95, 42, 17, 8, 1, 240, 95, 78, 17, + 8, 1, 240, 95, 169, 17, 8, 1, 242, 16, 61, 17, 8, 1, 242, 16, 42, 17, 8, + 1, 242, 16, 78, 17, 8, 1, 242, 16, 169, 17, 8, 1, 220, 13, 61, 17, 8, 1, + 220, 13, 42, 17, 8, 1, 220, 13, 78, 17, 8, 1, 220, 13, 169, 17, 8, 1, + 232, 46, 61, 17, 8, 1, 232, 46, 42, 17, 8, 1, 232, 46, 78, 17, 8, 1, 232, + 46, 169, 17, 8, 1, 230, 107, 61, 17, 8, 1, 230, 107, 42, 17, 8, 1, 230, + 107, 78, 17, 8, 1, 230, 107, 169, 17, 8, 1, 80, 61, 17, 8, 1, 80, 42, 17, + 8, 1, 80, 78, 17, 8, 1, 80, 169, 17, 8, 1, 224, 55, 61, 17, 8, 1, 224, + 55, 42, 17, 8, 1, 224, 55, 78, 17, 8, 1, 224, 55, 169, 17, 8, 1, 239, 51, + 61, 17, 8, 1, 239, 51, 42, 17, 8, 1, 239, 51, 78, 17, 8, 1, 239, 51, 169, + 17, 8, 1, 207, 60, 61, 17, 8, 1, 207, 60, 42, 17, 8, 1, 126, 227, 229, + 61, 17, 8, 1, 126, 227, 229, 42, 17, 8, 1, 87, 61, 17, 8, 1, 87, 42, 17, + 8, 1, 87, 78, 17, 8, 1, 87, 169, 17, 8, 28, 230, 107, 2, 126, 2, 228, 9, + 84, 61, 17, 8, 28, 230, 107, 2, 126, 2, 228, 9, 84, 42, 17, 8, 28, 230, + 107, 2, 126, 2, 239, 112, 84, 61, 17, 8, 28, 230, 107, 2, 126, 2, 239, + 112, 84, 42, 17, 8, 28, 230, 107, 2, 126, 2, 239, 112, 250, 26, 61, 17, + 8, 28, 230, 107, 2, 126, 2, 239, 112, 250, 26, 42, 17, 8, 28, 230, 107, + 2, 126, 61, 17, 8, 28, 230, 107, 2, 126, 42, 17, 205, 86, 207, 15, 224, + 66, 214, 153, 144, 242, 168, 83, 144, 219, 180, 83, 144, 43, 53, 144, + 245, 35, 53, 144, 221, 131, 53, 144, 252, 125, 144, 252, 53, 144, 47, + 221, 216, 144, 48, 221, 216, 144, 251, 209, 144, 101, 53, 144, 247, 155, + 144, 237, 238, 144, 241, 82, 213, 251, 144, 214, 180, 144, 18, 205, 85, + 144, 18, 102, 144, 18, 105, 144, 18, 142, 144, 18, 139, 144, 18, 168, + 144, 18, 184, 144, 18, 195, 144, 18, 193, 144, 18, 200, 144, 247, 162, + 144, 216, 52, 144, 230, 10, 53, 144, 242, 242, 53, 144, 239, 230, 53, + 144, 219, 196, 83, 144, 247, 153, 251, 199, 144, 7, 6, 1, 62, 144, 7, 6, + 1, 251, 150, 144, 7, 6, 1, 249, 34, 144, 7, 6, 1, 246, 240, 144, 7, 6, 1, + 75, 144, 7, 6, 1, 242, 139, 144, 7, 6, 1, 241, 55, 144, 7, 6, 1, 239, + 155, 144, 7, 6, 1, 74, 144, 7, 6, 1, 232, 203, 144, 7, 6, 1, 232, 76, + 144, 7, 6, 1, 149, 144, 7, 6, 1, 229, 28, 144, 7, 6, 1, 226, 33, 144, 7, + 6, 1, 76, 144, 7, 6, 1, 222, 67, 144, 7, 6, 1, 220, 27, 144, 7, 6, 1, + 137, 144, 7, 6, 1, 182, 144, 7, 6, 1, 213, 10, 144, 7, 6, 1, 71, 144, 7, + 6, 1, 209, 148, 144, 7, 6, 1, 207, 129, 144, 7, 6, 1, 206, 195, 144, 7, + 6, 1, 206, 123, 144, 7, 6, 1, 205, 159, 144, 47, 49, 145, 144, 218, 225, + 214, 180, 144, 48, 49, 145, 144, 247, 228, 253, 21, 144, 114, 229, 205, + 144, 239, 237, 253, 21, 144, 7, 5, 1, 62, 144, 7, 5, 1, 251, 150, 144, 7, + 5, 1, 249, 34, 144, 7, 5, 1, 246, 240, 144, 7, 5, 1, 75, 144, 7, 5, 1, + 242, 139, 144, 7, 5, 1, 241, 55, 144, 7, 5, 1, 239, 155, 144, 7, 5, 1, + 74, 144, 7, 5, 1, 232, 203, 144, 7, 5, 1, 232, 76, 144, 7, 5, 1, 149, + 144, 7, 5, 1, 229, 28, 144, 7, 5, 1, 226, 33, 144, 7, 5, 1, 76, 144, 7, + 5, 1, 222, 67, 144, 7, 5, 1, 220, 27, 144, 7, 5, 1, 137, 144, 7, 5, 1, + 182, 144, 7, 5, 1, 213, 10, 144, 7, 5, 1, 71, 144, 7, 5, 1, 209, 148, + 144, 7, 5, 1, 207, 129, 144, 7, 5, 1, 206, 195, 144, 7, 5, 1, 206, 123, + 144, 7, 5, 1, 205, 159, 144, 47, 247, 26, 145, 144, 79, 229, 205, 144, + 48, 247, 26, 145, 144, 211, 180, 144, 47, 59, 221, 216, 144, 48, 59, 221, + 216, 116, 128, 241, 82, 213, 251, 116, 47, 247, 92, 145, 116, 48, 247, + 92, 145, 116, 128, 247, 155, 116, 64, 226, 247, 245, 23, 116, 64, 1, 206, + 250, 116, 64, 1, 5, 62, 116, 64, 1, 5, 74, 116, 64, 1, 5, 71, 116, 64, 1, + 5, 75, 116, 64, 1, 5, 76, 116, 64, 1, 5, 190, 116, 64, 1, 5, 205, 213, + 116, 64, 1, 5, 205, 247, 116, 64, 1, 5, 210, 170, 116, 231, 248, 220, + 106, 214, 165, 83, 116, 64, 1, 62, 116, 64, 1, 74, 116, 64, 1, 71, 116, + 64, 1, 75, 116, 64, 1, 76, 116, 64, 1, 172, 116, 64, 1, 231, 123, 116, + 64, 1, 230, 236, 116, 64, 1, 231, 224, 116, 64, 1, 231, 53, 116, 64, 1, + 217, 199, 116, 64, 1, 215, 80, 116, 64, 1, 213, 203, 116, 64, 1, 217, 86, + 116, 64, 1, 214, 193, 116, 64, 1, 212, 219, 116, 64, 1, 211, 211, 116, + 64, 1, 210, 170, 116, 64, 1, 212, 131, 116, 64, 1, 124, 116, 64, 1, 199, + 116, 64, 1, 224, 230, 116, 64, 1, 223, 217, 116, 64, 1, 225, 110, 116, + 64, 1, 224, 67, 116, 64, 1, 155, 116, 64, 1, 239, 11, 116, 64, 1, 238, + 42, 116, 64, 1, 239, 71, 116, 64, 1, 238, 149, 116, 64, 1, 185, 116, 64, + 1, 226, 254, 116, 64, 1, 226, 114, 116, 64, 1, 227, 119, 116, 64, 1, 226, + 181, 116, 64, 1, 190, 116, 64, 1, 205, 213, 116, 64, 1, 205, 247, 116, + 64, 1, 219, 113, 116, 64, 1, 218, 208, 116, 64, 1, 218, 50, 116, 64, 1, + 219, 51, 116, 64, 1, 218, 124, 116, 64, 1, 207, 96, 116, 64, 1, 226, 33, + 116, 64, 208, 170, 214, 165, 83, 116, 64, 216, 57, 214, 165, 83, 116, 25, + 241, 232, 116, 25, 1, 231, 84, 116, 25, 1, 214, 88, 116, 25, 1, 231, 77, + 116, 25, 1, 224, 223, 116, 25, 1, 224, 221, 116, 25, 1, 224, 220, 116, + 25, 1, 211, 193, 116, 25, 1, 214, 77, 116, 25, 1, 218, 198, 116, 25, 1, + 218, 193, 116, 25, 1, 218, 190, 116, 25, 1, 218, 183, 116, 25, 1, 218, + 178, 116, 25, 1, 218, 173, 116, 25, 1, 218, 184, 116, 25, 1, 218, 196, + 116, 25, 1, 226, 240, 116, 25, 1, 221, 39, 116, 25, 1, 214, 85, 116, 25, + 1, 221, 28, 116, 25, 1, 215, 33, 116, 25, 1, 214, 82, 116, 25, 1, 233, + 125, 116, 25, 1, 247, 246, 116, 25, 1, 214, 92, 116, 25, 1, 248, 54, 116, + 25, 1, 231, 143, 116, 25, 1, 212, 15, 116, 25, 1, 221, 76, 116, 25, 1, + 239, 3, 116, 25, 1, 62, 116, 25, 1, 252, 248, 116, 25, 1, 190, 116, 25, + 1, 206, 98, 116, 25, 1, 243, 6, 116, 25, 1, 75, 116, 25, 1, 206, 39, 116, + 25, 1, 206, 52, 116, 25, 1, 76, 116, 25, 1, 207, 96, 116, 25, 1, 207, 92, + 116, 25, 1, 222, 206, 116, 25, 1, 205, 247, 116, 25, 1, 71, 116, 25, 1, + 207, 38, 116, 25, 1, 207, 51, 116, 25, 1, 207, 20, 116, 25, 1, 205, 213, + 116, 25, 1, 242, 192, 116, 25, 1, 206, 11, 116, 25, 1, 74, 144, 248, 131, + 53, 144, 220, 165, 53, 144, 224, 43, 53, 144, 228, 13, 144, 249, 111, + 134, 144, 206, 43, 53, 144, 206, 240, 53, 116, 241, 133, 147, 209, 22, + 116, 92, 45, 116, 167, 45, 116, 86, 45, 116, 173, 45, 116, 60, 214, 107, + 116, 59, 247, 233, 233, 14, 252, 98, 252, 119, 233, 14, 252, 98, 216, 39, + 233, 14, 252, 98, 212, 86, 222, 223, 218, 247, 248, 94, 218, 247, 248, + 94, 26, 63, 4, 251, 134, 62, 26, 63, 4, 251, 103, 75, 26, 63, 4, 251, + 112, 74, 26, 63, 4, 251, 80, 76, 26, 63, 4, 251, 130, 71, 26, 63, 4, 251, + 149, 246, 145, 26, 63, 4, 251, 96, 246, 9, 26, 63, 4, 251, 136, 245, 168, + 26, 63, 4, 251, 126, 245, 51, 26, 63, 4, 251, 90, 243, 237, 26, 63, 4, + 251, 84, 232, 200, 26, 63, 4, 251, 95, 232, 182, 26, 63, 4, 251, 105, + 232, 122, 26, 63, 4, 251, 76, 232, 104, 26, 63, 4, 251, 64, 172, 26, 63, + 4, 251, 97, 231, 224, 26, 63, 4, 251, 74, 231, 123, 26, 63, 4, 251, 71, + 231, 53, 26, 63, 4, 251, 60, 230, 236, 26, 63, 4, 251, 61, 185, 26, 63, + 4, 251, 127, 227, 119, 26, 63, 4, 251, 68, 226, 254, 26, 63, 4, 251, 125, + 226, 181, 26, 63, 4, 251, 117, 226, 114, 26, 63, 4, 251, 138, 199, 26, + 63, 4, 251, 116, 225, 110, 26, 63, 4, 251, 110, 224, 230, 26, 63, 4, 251, + 89, 224, 67, 26, 63, 4, 251, 86, 223, 217, 26, 63, 4, 251, 145, 179, 26, + 63, 4, 251, 69, 221, 174, 26, 63, 4, 251, 102, 221, 53, 26, 63, 4, 251, + 129, 220, 211, 26, 63, 4, 251, 91, 220, 82, 26, 63, 4, 251, 124, 220, 19, + 26, 63, 4, 251, 63, 219, 255, 26, 63, 4, 251, 119, 219, 237, 26, 63, 4, + 251, 108, 219, 226, 26, 63, 4, 251, 81, 219, 113, 26, 63, 4, 251, 113, + 219, 51, 26, 63, 4, 251, 88, 218, 208, 26, 63, 4, 251, 147, 218, 124, 26, + 63, 4, 251, 114, 218, 50, 26, 63, 4, 251, 109, 217, 199, 26, 63, 4, 251, + 132, 217, 86, 26, 63, 4, 251, 100, 215, 80, 26, 63, 4, 251, 128, 214, + 193, 26, 63, 4, 251, 83, 213, 203, 26, 63, 4, 251, 82, 212, 219, 26, 63, + 4, 251, 143, 212, 131, 26, 63, 4, 251, 104, 211, 211, 26, 63, 4, 251, + 141, 124, 26, 63, 4, 251, 72, 210, 170, 26, 63, 4, 251, 87, 207, 96, 26, + 63, 4, 251, 66, 207, 51, 26, 63, 4, 251, 101, 207, 20, 26, 63, 4, 251, + 99, 206, 250, 26, 63, 4, 251, 123, 205, 116, 26, 63, 4, 251, 67, 205, 93, + 26, 63, 4, 251, 120, 205, 19, 26, 63, 4, 251, 115, 254, 166, 26, 63, 4, + 251, 98, 254, 165, 26, 63, 4, 251, 57, 251, 184, 26, 63, 4, 251, 70, 243, + 205, 26, 63, 4, 251, 53, 243, 204, 26, 63, 4, 251, 93, 223, 153, 26, 63, + 4, 251, 111, 220, 80, 26, 63, 4, 251, 79, 220, 84, 26, 63, 4, 251, 65, + 219, 111, 26, 63, 4, 251, 107, 219, 110, 26, 63, 4, 251, 73, 218, 123, + 26, 63, 4, 251, 75, 212, 216, 26, 63, 4, 251, 55, 210, 128, 26, 63, 4, + 251, 52, 105, 26, 63, 16, 251, 122, 26, 63, 16, 251, 121, 26, 63, 16, + 251, 118, 26, 63, 16, 251, 106, 26, 63, 16, 251, 94, 26, 63, 16, 251, 92, + 26, 63, 16, 251, 85, 26, 63, 16, 251, 78, 26, 63, 16, 251, 77, 26, 63, + 16, 251, 62, 26, 63, 16, 251, 59, 26, 63, 16, 251, 58, 26, 63, 16, 251, + 56, 26, 63, 16, 251, 54, 26, 63, 122, 251, 51, 227, 221, 26, 63, 122, + 251, 50, 206, 244, 26, 63, 122, 251, 49, 245, 248, 26, 63, 122, 251, 48, + 242, 239, 26, 63, 122, 251, 47, 227, 192, 26, 63, 122, 251, 46, 214, 33, + 26, 63, 122, 251, 45, 242, 174, 26, 63, 122, 251, 44, 219, 77, 26, 63, + 122, 251, 43, 215, 213, 26, 63, 122, 251, 42, 239, 70, 26, 63, 122, 251, + 41, 214, 160, 26, 63, 122, 251, 40, 249, 182, 26, 63, 122, 251, 39, 247, + 75, 26, 63, 122, 251, 38, 249, 87, 26, 63, 122, 251, 37, 207, 28, 26, 63, + 122, 251, 36, 250, 125, 26, 63, 122, 251, 35, 222, 175, 26, 63, 122, 251, + 34, 214, 132, 26, 63, 122, 251, 33, 246, 248, 26, 63, 226, 160, 251, 32, + 232, 16, 26, 63, 226, 160, 251, 31, 232, 25, 26, 63, 122, 251, 30, 222, + 189, 26, 63, 122, 251, 29, 207, 5, 26, 63, 122, 251, 28, 26, 63, 226, + 160, 251, 27, 252, 12, 26, 63, 226, 160, 251, 26, 227, 76, 26, 63, 122, + 251, 25, 249, 110, 26, 63, 122, 251, 24, 240, 11, 26, 63, 122, 251, 23, + 26, 63, 122, 251, 22, 206, 235, 26, 63, 122, 251, 21, 26, 63, 122, 251, + 20, 26, 63, 122, 251, 19, 238, 69, 26, 63, 122, 251, 18, 26, 63, 122, + 251, 17, 26, 63, 122, 251, 16, 26, 63, 226, 160, 251, 14, 210, 142, 26, + 63, 122, 251, 13, 26, 63, 122, 251, 12, 26, 63, 122, 251, 11, 247, 186, + 26, 63, 122, 251, 10, 26, 63, 122, 251, 9, 26, 63, 122, 251, 8, 240, 201, + 26, 63, 122, 251, 7, 251, 255, 26, 63, 122, 251, 6, 26, 63, 122, 251, 5, + 26, 63, 122, 251, 4, 26, 63, 122, 251, 3, 26, 63, 122, 251, 2, 26, 63, + 122, 251, 1, 26, 63, 122, 251, 0, 26, 63, 122, 250, 255, 26, 63, 122, + 250, 254, 26, 63, 122, 250, 253, 226, 152, 26, 63, 122, 250, 252, 26, 63, + 122, 250, 251, 211, 61, 26, 63, 122, 250, 250, 26, 63, 122, 250, 249, 26, + 63, 122, 250, 248, 26, 63, 122, 250, 247, 26, 63, 122, 250, 246, 26, 63, + 122, 250, 245, 26, 63, 122, 250, 244, 26, 63, 122, 250, 243, 26, 63, 122, + 250, 242, 26, 63, 122, 250, 241, 26, 63, 122, 250, 240, 26, 63, 122, 250, + 239, 239, 43, 26, 63, 122, 250, 218, 241, 144, 26, 63, 122, 250, 215, + 250, 103, 26, 63, 122, 250, 210, 214, 139, 26, 63, 122, 250, 209, 45, 26, + 63, 122, 250, 208, 26, 63, 122, 250, 207, 213, 95, 26, 63, 122, 250, 206, + 26, 63, 122, 250, 205, 26, 63, 122, 250, 204, 207, 24, 248, 91, 26, 63, + 122, 250, 203, 248, 91, 26, 63, 122, 250, 202, 248, 92, 241, 112, 26, 63, + 122, 250, 201, 207, 26, 26, 63, 122, 250, 200, 26, 63, 122, 250, 199, 26, + 63, 226, 160, 250, 198, 245, 105, 26, 63, 122, 250, 197, 26, 63, 122, + 250, 196, 26, 63, 122, 250, 194, 26, 63, 122, 250, 193, 26, 63, 122, 250, + 192, 26, 63, 122, 250, 191, 246, 81, 26, 63, 122, 250, 190, 26, 63, 122, + 250, 189, 26, 63, 122, 250, 188, 26, 63, 122, 250, 187, 26, 63, 122, 250, + 186, 26, 63, 122, 208, 225, 251, 15, 26, 63, 122, 208, 225, 250, 238, 26, + 63, 122, 208, 225, 250, 237, 26, 63, 122, 208, 225, 250, 236, 26, 63, + 122, 208, 225, 250, 235, 26, 63, 122, 208, 225, 250, 234, 26, 63, 122, + 208, 225, 250, 233, 26, 63, 122, 208, 225, 250, 232, 26, 63, 122, 208, + 225, 250, 231, 26, 63, 122, 208, 225, 250, 230, 26, 63, 122, 208, 225, + 250, 229, 26, 63, 122, 208, 225, 250, 228, 26, 63, 122, 208, 225, 250, + 227, 26, 63, 122, 208, 225, 250, 226, 26, 63, 122, 208, 225, 250, 225, + 26, 63, 122, 208, 225, 250, 224, 26, 63, 122, 208, 225, 250, 223, 26, 63, + 122, 208, 225, 250, 222, 26, 63, 122, 208, 225, 250, 221, 26, 63, 122, + 208, 225, 250, 220, 26, 63, 122, 208, 225, 250, 219, 26, 63, 122, 208, + 225, 250, 217, 26, 63, 122, 208, 225, 250, 216, 26, 63, 122, 208, 225, + 250, 214, 26, 63, 122, 208, 225, 250, 213, 26, 63, 122, 208, 225, 250, + 212, 26, 63, 122, 208, 225, 250, 211, 26, 63, 122, 208, 225, 250, 195, + 26, 63, 122, 208, 225, 250, 185, 252, 241, 206, 232, 216, 40, 229, 205, + 252, 241, 206, 232, 216, 40, 245, 23, 252, 241, 248, 81, 83, 252, 241, + 43, 102, 252, 241, 43, 105, 252, 241, 43, 142, 252, 241, 43, 139, 252, + 241, 43, 168, 252, 241, 43, 184, 252, 241, 43, 195, 252, 241, 43, 193, + 252, 241, 43, 200, 252, 241, 43, 212, 98, 252, 241, 43, 210, 123, 252, + 241, 43, 212, 3, 252, 241, 43, 241, 130, 252, 241, 43, 241, 243, 252, + 241, 43, 214, 252, 252, 241, 43, 216, 17, 252, 241, 43, 243, 79, 252, + 241, 43, 224, 190, 252, 241, 43, 119, 238, 29, 252, 241, 43, 118, 238, + 29, 252, 241, 43, 129, 238, 29, 252, 241, 43, 241, 125, 238, 29, 252, + 241, 43, 241, 204, 238, 29, 252, 241, 43, 215, 10, 238, 29, 252, 241, 43, + 216, 23, 238, 29, 252, 241, 43, 243, 88, 238, 29, 252, 241, 43, 224, 195, + 238, 29, 252, 241, 43, 119, 211, 242, 252, 241, 43, 118, 211, 242, 252, + 241, 43, 129, 211, 242, 252, 241, 43, 241, 125, 211, 242, 252, 241, 43, + 241, 204, 211, 242, 252, 241, 43, 215, 10, 211, 242, 252, 241, 43, 216, + 23, 211, 242, 252, 241, 43, 243, 88, 211, 242, 252, 241, 43, 224, 195, + 211, 242, 252, 241, 43, 212, 99, 211, 242, 252, 241, 43, 210, 124, 211, + 242, 252, 241, 43, 212, 4, 211, 242, 252, 241, 43, 241, 131, 211, 242, + 252, 241, 43, 241, 244, 211, 242, 252, 241, 43, 214, 253, 211, 242, 252, + 241, 43, 216, 18, 211, 242, 252, 241, 43, 243, 80, 211, 242, 252, 241, + 43, 224, 191, 211, 242, 252, 241, 207, 41, 250, 117, 209, 216, 252, 241, + 207, 41, 241, 215, 213, 177, 252, 241, 207, 41, 217, 80, 213, 177, 252, + 241, 207, 41, 212, 11, 213, 177, 252, 241, 207, 41, 241, 118, 213, 177, + 252, 241, 243, 240, 227, 118, 241, 215, 213, 177, 252, 241, 229, 189, + 227, 118, 241, 215, 213, 177, 252, 241, 227, 118, 217, 80, 213, 177, 252, + 241, 227, 118, 212, 11, 213, 177, 27, 253, 12, 251, 186, 119, 219, 204, + 27, 253, 12, 251, 186, 119, 239, 121, 27, 253, 12, 251, 186, 119, 244, 3, + 27, 253, 12, 251, 186, 168, 27, 253, 12, 251, 186, 241, 243, 27, 253, 12, + 251, 186, 241, 204, 238, 29, 27, 253, 12, 251, 186, 241, 204, 211, 242, + 27, 253, 12, 251, 186, 241, 244, 211, 242, 27, 253, 12, 251, 186, 241, + 204, 212, 181, 27, 253, 12, 251, 186, 212, 99, 212, 181, 27, 253, 12, + 251, 186, 241, 244, 212, 181, 27, 253, 12, 251, 186, 119, 238, 30, 212, + 181, 27, 253, 12, 251, 186, 241, 204, 238, 30, 212, 181, 27, 253, 12, + 251, 186, 119, 211, 243, 212, 181, 27, 253, 12, 251, 186, 241, 204, 211, + 243, 212, 181, 27, 253, 12, 251, 186, 241, 204, 214, 20, 27, 253, 12, + 251, 186, 212, 99, 214, 20, 27, 253, 12, 251, 186, 241, 244, 214, 20, 27, + 253, 12, 251, 186, 119, 238, 30, 214, 20, 27, 253, 12, 251, 186, 241, + 204, 238, 30, 214, 20, 27, 253, 12, 251, 186, 119, 211, 243, 214, 20, 27, + 253, 12, 251, 186, 212, 99, 211, 243, 214, 20, 27, 253, 12, 251, 186, + 241, 244, 211, 243, 214, 20, 27, 253, 12, 251, 186, 212, 99, 226, 184, + 27, 253, 12, 239, 37, 119, 220, 228, 27, 253, 12, 212, 25, 102, 27, 253, + 12, 239, 33, 102, 27, 253, 12, 242, 248, 105, 27, 253, 12, 212, 25, 105, + 27, 253, 12, 246, 245, 118, 244, 2, 27, 253, 12, 242, 248, 118, 244, 2, + 27, 253, 12, 211, 28, 168, 27, 253, 12, 211, 28, 212, 98, 27, 253, 12, + 211, 28, 212, 99, 252, 141, 17, 27, 253, 12, 239, 33, 212, 98, 27, 253, + 12, 227, 65, 212, 98, 27, 253, 12, 212, 25, 212, 98, 27, 253, 12, 212, + 25, 212, 3, 27, 253, 12, 211, 28, 241, 243, 27, 253, 12, 211, 28, 241, + 244, 252, 141, 17, 27, 253, 12, 239, 33, 241, 243, 27, 253, 12, 212, 25, + 241, 243, 27, 253, 12, 212, 25, 119, 238, 29, 27, 253, 12, 212, 25, 129, + 238, 29, 27, 253, 12, 242, 248, 241, 204, 238, 29, 27, 253, 12, 211, 28, + 241, 204, 238, 29, 27, 253, 12, 212, 25, 241, 204, 238, 29, 27, 253, 12, + 248, 187, 241, 204, 238, 29, 27, 253, 12, 225, 186, 241, 204, 238, 29, + 27, 253, 12, 212, 25, 119, 211, 242, 27, 253, 12, 212, 25, 241, 204, 211, + 242, 27, 253, 12, 245, 230, 241, 204, 226, 184, 27, 253, 12, 213, 240, + 241, 244, 226, 184, 27, 119, 160, 53, 27, 119, 160, 3, 252, 141, 17, 27, + 118, 212, 8, 53, 27, 129, 219, 203, 53, 27, 206, 50, 53, 27, 212, 182, + 53, 27, 244, 4, 53, 27, 222, 220, 53, 27, 118, 222, 219, 53, 27, 129, + 222, 219, 53, 27, 241, 125, 222, 219, 53, 27, 241, 204, 222, 219, 53, 27, + 227, 59, 53, 27, 230, 167, 250, 117, 53, 27, 229, 182, 53, 27, 222, 94, + 53, 27, 206, 172, 53, 27, 251, 237, 53, 27, 251, 251, 53, 27, 239, 244, + 53, 27, 210, 246, 250, 117, 53, 27, 205, 86, 53, 27, 119, 219, 205, 53, + 27, 215, 35, 53, 218, 109, 216, 14, 53, 218, 109, 209, 228, 53, 218, 109, + 216, 44, 53, 218, 109, 216, 12, 53, 218, 109, 245, 120, 216, 12, 53, 218, + 109, 215, 54, 53, 218, 109, 245, 226, 53, 218, 109, 219, 188, 53, 218, + 109, 216, 30, 53, 218, 109, 243, 219, 53, 218, 109, 251, 232, 53, 218, + 109, 248, 124, 53, 27, 16, 212, 152, 218, 210, 221, 88, 245, 98, 3, 221, + 166, 221, 88, 245, 98, 3, 220, 220, 239, 68, 221, 88, 245, 98, 3, 212, + 155, 239, 68, 221, 88, 245, 98, 3, 248, 207, 221, 88, 245, 98, 3, 248, + 49, 221, 88, 245, 98, 3, 206, 244, 221, 88, 245, 98, 3, 239, 43, 221, 88, + 245, 98, 3, 240, 193, 221, 88, 245, 98, 3, 211, 209, 221, 88, 245, 98, 3, + 45, 221, 88, 245, 98, 3, 249, 146, 221, 88, 245, 98, 3, 215, 180, 221, + 88, 245, 98, 3, 247, 180, 221, 88, 245, 98, 3, 227, 220, 221, 88, 245, + 98, 3, 227, 167, 221, 88, 245, 98, 3, 217, 121, 221, 88, 245, 98, 3, 229, + 231, 221, 88, 245, 98, 3, 249, 167, 221, 88, 245, 98, 3, 248, 192, 220, + 233, 221, 88, 245, 98, 3, 245, 36, 221, 88, 245, 98, 3, 247, 159, 221, + 88, 245, 98, 3, 214, 224, 221, 88, 245, 98, 3, 247, 160, 221, 88, 245, + 98, 3, 250, 47, 221, 88, 245, 98, 3, 215, 167, 221, 88, 245, 98, 3, 238, + 69, 221, 88, 245, 98, 3, 239, 9, 221, 88, 245, 98, 3, 249, 82, 230, 34, + 221, 88, 245, 98, 3, 248, 183, 221, 88, 245, 98, 3, 219, 77, 221, 88, + 245, 98, 3, 243, 127, 221, 88, 245, 98, 3, 244, 9, 221, 88, 245, 98, 3, + 210, 156, 221, 88, 245, 98, 3, 250, 50, 221, 88, 245, 98, 3, 220, 234, + 211, 61, 221, 88, 245, 98, 3, 208, 195, 221, 88, 245, 98, 3, 221, 232, + 221, 88, 245, 98, 3, 218, 100, 221, 88, 245, 98, 3, 229, 216, 221, 88, + 245, 98, 3, 222, 77, 250, 176, 221, 88, 245, 98, 3, 241, 168, 221, 88, + 245, 98, 3, 239, 238, 221, 88, 245, 98, 3, 213, 241, 221, 88, 245, 98, 3, + 5, 251, 160, 221, 88, 245, 98, 3, 207, 61, 250, 136, 221, 88, 245, 98, 3, + 36, 222, 222, 91, 229, 40, 1, 62, 229, 40, 1, 75, 229, 40, 1, 251, 150, + 229, 40, 1, 250, 1, 229, 40, 1, 241, 55, 229, 40, 1, 246, 240, 229, 40, + 1, 74, 229, 40, 1, 207, 129, 229, 40, 1, 205, 159, 229, 40, 1, 212, 58, + 229, 40, 1, 232, 203, 229, 40, 1, 232, 76, 229, 40, 1, 220, 27, 229, 40, + 1, 149, 229, 40, 1, 229, 28, 229, 40, 1, 226, 33, 229, 40, 1, 226, 186, + 229, 40, 1, 224, 104, 229, 40, 1, 71, 229, 40, 1, 222, 67, 229, 40, 1, + 231, 73, 229, 40, 1, 137, 229, 40, 1, 182, 229, 40, 1, 213, 10, 229, 40, + 1, 210, 211, 229, 40, 1, 252, 122, 229, 40, 1, 243, 41, 229, 40, 1, 239, + 155, 229, 40, 1, 206, 195, 248, 198, 1, 62, 248, 198, 1, 222, 53, 248, + 198, 1, 246, 240, 248, 198, 1, 149, 248, 198, 1, 209, 160, 248, 198, 1, + 137, 248, 198, 1, 230, 62, 248, 198, 1, 254, 166, 248, 198, 1, 220, 27, + 248, 198, 1, 251, 150, 248, 198, 1, 229, 28, 248, 198, 1, 76, 248, 198, + 1, 246, 147, 248, 198, 1, 213, 10, 248, 198, 1, 216, 4, 248, 198, 1, 216, + 3, 248, 198, 1, 182, 248, 198, 1, 249, 33, 248, 198, 1, 71, 248, 198, 1, + 224, 104, 248, 198, 1, 206, 195, 248, 198, 1, 226, 33, 248, 198, 1, 210, + 210, 248, 198, 1, 222, 67, 248, 198, 1, 214, 99, 248, 198, 1, 74, 248, + 198, 1, 75, 248, 198, 1, 209, 157, 248, 198, 1, 232, 76, 248, 198, 1, + 232, 67, 248, 198, 1, 225, 153, 248, 198, 1, 209, 162, 248, 198, 1, 241, + 55, 248, 198, 1, 240, 246, 248, 198, 1, 214, 40, 248, 198, 1, 214, 39, + 248, 198, 1, 225, 79, 248, 198, 1, 233, 102, 248, 198, 1, 249, 32, 248, + 198, 1, 210, 211, 248, 198, 1, 209, 159, 248, 198, 1, 218, 90, 248, 198, + 1, 227, 158, 248, 198, 1, 227, 157, 248, 198, 1, 227, 156, 248, 198, 1, + 227, 155, 248, 198, 1, 230, 61, 248, 198, 1, 243, 131, 248, 198, 1, 209, + 158, 81, 242, 251, 211, 241, 83, 81, 242, 251, 18, 102, 81, 242, 251, 18, + 105, 81, 242, 251, 18, 142, 81, 242, 251, 18, 139, 81, 242, 251, 18, 168, + 81, 242, 251, 18, 184, 81, 242, 251, 18, 195, 81, 242, 251, 18, 193, 81, + 242, 251, 18, 200, 81, 242, 251, 43, 212, 98, 81, 242, 251, 43, 210, 123, + 81, 242, 251, 43, 212, 3, 81, 242, 251, 43, 241, 130, 81, 242, 251, 43, + 241, 243, 81, 242, 251, 43, 214, 252, 81, 242, 251, 43, 216, 17, 81, 242, + 251, 43, 243, 79, 81, 242, 251, 43, 224, 190, 81, 242, 251, 43, 119, 238, + 29, 81, 242, 251, 43, 118, 238, 29, 81, 242, 251, 43, 129, 238, 29, 81, + 242, 251, 43, 241, 125, 238, 29, 81, 242, 251, 43, 241, 204, 238, 29, 81, + 242, 251, 43, 215, 10, 238, 29, 81, 242, 251, 43, 216, 23, 238, 29, 81, + 242, 251, 43, 243, 88, 238, 29, 81, 242, 251, 43, 224, 195, 238, 29, 44, + 35, 1, 62, 44, 35, 1, 250, 61, 44, 35, 1, 231, 224, 44, 35, 1, 246, 9, + 44, 35, 1, 75, 44, 35, 1, 209, 39, 44, 35, 1, 205, 93, 44, 35, 1, 239, + 71, 44, 35, 1, 212, 41, 44, 35, 1, 74, 44, 35, 1, 172, 44, 35, 1, 243, + 68, 44, 35, 1, 243, 50, 44, 35, 1, 243, 41, 44, 35, 1, 242, 215, 44, 35, + 1, 76, 44, 35, 1, 221, 174, 44, 35, 1, 215, 214, 44, 35, 1, 230, 236, 44, + 35, 1, 242, 235, 44, 35, 1, 242, 225, 44, 35, 1, 212, 131, 44, 35, 1, 71, + 44, 35, 1, 243, 71, 44, 35, 1, 221, 81, 44, 35, 1, 231, 152, 44, 35, 1, + 243, 97, 44, 35, 1, 242, 227, 44, 35, 1, 248, 82, 44, 35, 1, 233, 102, + 44, 35, 1, 209, 162, 44, 35, 1, 242, 208, 44, 35, 223, 177, 102, 44, 35, + 223, 177, 168, 44, 35, 223, 177, 212, 98, 44, 35, 223, 177, 241, 243, + 239, 253, 1, 252, 208, 239, 253, 1, 250, 153, 239, 253, 1, 240, 58, 239, + 253, 1, 246, 127, 239, 253, 1, 252, 204, 239, 253, 1, 220, 10, 239, 253, + 1, 232, 215, 239, 253, 1, 239, 134, 239, 253, 1, 211, 255, 239, 253, 1, + 243, 78, 239, 253, 1, 230, 204, 239, 253, 1, 230, 118, 239, 253, 1, 227, + 213, 239, 253, 1, 225, 188, 239, 253, 1, 232, 175, 239, 253, 1, 209, 180, + 239, 253, 1, 222, 29, 239, 253, 1, 224, 190, 239, 253, 1, 219, 89, 239, + 253, 1, 217, 124, 239, 253, 1, 212, 112, 239, 253, 1, 207, 3, 239, 253, + 1, 242, 54, 239, 253, 1, 233, 106, 239, 253, 1, 238, 14, 239, 253, 1, + 222, 102, 239, 253, 1, 224, 195, 238, 29, 44, 221, 122, 1, 252, 122, 44, + 221, 122, 1, 249, 68, 44, 221, 122, 1, 240, 228, 44, 221, 122, 1, 245, + 39, 44, 221, 122, 1, 75, 44, 221, 122, 1, 205, 63, 44, 221, 122, 1, 243, + 188, 44, 221, 122, 1, 205, 100, 44, 221, 122, 1, 243, 186, 44, 221, 122, + 1, 74, 44, 221, 122, 1, 231, 42, 44, 221, 122, 1, 230, 30, 44, 221, 122, + 1, 227, 81, 44, 221, 122, 1, 225, 99, 44, 221, 122, 1, 208, 160, 44, 221, + 122, 1, 221, 163, 44, 221, 122, 1, 219, 15, 44, 221, 122, 1, 215, 61, 44, + 221, 122, 1, 212, 193, 44, 221, 122, 1, 71, 44, 221, 122, 1, 248, 66, 44, + 221, 122, 1, 215, 151, 44, 221, 122, 1, 215, 216, 44, 221, 122, 1, 205, + 215, 44, 221, 122, 1, 206, 30, 44, 221, 122, 1, 76, 44, 221, 122, 1, 222, + 152, 44, 221, 122, 1, 243, 97, 44, 221, 122, 1, 155, 44, 221, 122, 1, + 210, 221, 44, 221, 122, 1, 209, 27, 44, 221, 122, 1, 206, 34, 44, 221, + 122, 1, 206, 32, 44, 221, 122, 1, 206, 65, 44, 221, 122, 1, 233, 129, 44, + 221, 122, 1, 205, 213, 44, 221, 122, 1, 190, 44, 221, 122, 1, 237, 190, + 36, 44, 221, 122, 1, 252, 122, 36, 44, 221, 122, 1, 245, 39, 36, 44, 221, + 122, 1, 205, 100, 36, 44, 221, 122, 1, 225, 99, 36, 44, 221, 122, 1, 215, + 61, 209, 254, 1, 252, 148, 209, 254, 1, 250, 8, 209, 254, 1, 240, 216, + 209, 254, 1, 231, 167, 209, 254, 1, 245, 227, 209, 254, 1, 238, 149, 209, + 254, 1, 206, 250, 209, 254, 1, 205, 84, 209, 254, 1, 238, 61, 209, 254, + 1, 212, 80, 209, 254, 1, 205, 236, 209, 254, 1, 232, 45, 209, 254, 1, + 215, 171, 209, 254, 1, 230, 102, 209, 254, 1, 227, 90, 209, 254, 1, 245, + 188, 209, 254, 1, 223, 173, 209, 254, 1, 205, 9, 209, 254, 1, 217, 156, + 209, 254, 1, 252, 200, 209, 254, 1, 220, 82, 209, 254, 1, 217, 190, 209, + 254, 1, 219, 219, 209, 254, 1, 219, 68, 209, 254, 1, 212, 45, 209, 254, + 1, 240, 94, 209, 254, 1, 124, 209, 254, 1, 74, 209, 254, 1, 71, 209, 254, + 1, 214, 51, 209, 254, 206, 232, 245, 79, 44, 221, 116, 3, 62, 44, 221, + 116, 3, 74, 44, 221, 116, 3, 71, 44, 221, 116, 3, 172, 44, 221, 116, 3, + 230, 236, 44, 221, 116, 3, 240, 244, 44, 221, 116, 3, 239, 213, 44, 221, + 116, 3, 206, 181, 44, 221, 116, 3, 249, 1, 44, 221, 116, 3, 232, 200, 44, + 221, 116, 3, 232, 162, 44, 221, 116, 3, 212, 219, 44, 221, 116, 3, 210, + 170, 44, 221, 116, 3, 246, 145, 44, 221, 116, 3, 245, 168, 44, 221, 116, + 3, 243, 237, 44, 221, 116, 3, 212, 56, 44, 221, 116, 3, 179, 44, 221, + 116, 3, 250, 183, 44, 221, 116, 3, 242, 73, 44, 221, 116, 3, 199, 44, + 221, 116, 3, 223, 217, 44, 221, 116, 3, 185, 44, 221, 116, 3, 226, 254, + 44, 221, 116, 3, 226, 114, 44, 221, 116, 3, 190, 44, 221, 116, 3, 209, + 70, 44, 221, 116, 3, 208, 214, 44, 221, 116, 3, 219, 113, 44, 221, 116, + 3, 218, 50, 44, 221, 116, 3, 230, 141, 44, 221, 116, 3, 217, 199, 44, + 221, 116, 3, 205, 116, 44, 221, 116, 3, 216, 2, 44, 221, 116, 3, 214, 96, + 44, 221, 116, 3, 155, 44, 221, 116, 3, 251, 178, 44, 221, 116, 3, 251, + 177, 44, 221, 116, 3, 251, 176, 44, 221, 116, 3, 206, 152, 44, 221, 116, + 3, 246, 123, 44, 221, 116, 3, 246, 122, 44, 221, 116, 3, 250, 161, 44, + 221, 116, 3, 249, 53, 44, 221, 116, 206, 232, 245, 79, 44, 221, 116, 43, + 102, 44, 221, 116, 43, 105, 44, 221, 116, 43, 212, 98, 44, 221, 116, 43, + 210, 123, 44, 221, 116, 43, 238, 29, 245, 208, 6, 1, 152, 74, 245, 208, + 6, 1, 152, 75, 245, 208, 6, 1, 152, 62, 245, 208, 6, 1, 152, 252, 213, + 245, 208, 6, 1, 152, 76, 245, 208, 6, 1, 152, 222, 152, 245, 208, 6, 1, + 215, 144, 74, 245, 208, 6, 1, 215, 144, 75, 245, 208, 6, 1, 215, 144, 62, + 245, 208, 6, 1, 215, 144, 252, 213, 245, 208, 6, 1, 215, 144, 76, 245, + 208, 6, 1, 215, 144, 222, 152, 245, 208, 6, 1, 251, 159, 245, 208, 6, 1, + 222, 78, 245, 208, 6, 1, 206, 216, 245, 208, 6, 1, 206, 49, 245, 208, 6, + 1, 239, 155, 245, 208, 6, 1, 221, 164, 245, 208, 6, 1, 250, 50, 245, 208, + 6, 1, 212, 120, 245, 208, 6, 1, 245, 251, 245, 208, 6, 1, 248, 78, 245, + 208, 6, 1, 232, 180, 245, 208, 6, 1, 231, 231, 245, 208, 6, 1, 240, 191, + 245, 208, 6, 1, 243, 97, 245, 208, 6, 1, 209, 34, 245, 208, 6, 1, 242, + 196, 245, 208, 6, 1, 212, 39, 245, 208, 6, 1, 242, 225, 245, 208, 6, 1, + 205, 91, 245, 208, 6, 1, 242, 215, 245, 208, 6, 1, 205, 71, 245, 208, 6, + 1, 242, 235, 245, 208, 6, 1, 243, 68, 245, 208, 6, 1, 243, 50, 245, 208, + 6, 1, 243, 41, 245, 208, 6, 1, 243, 28, 245, 208, 6, 1, 222, 191, 245, + 208, 6, 1, 242, 175, 245, 208, 5, 1, 152, 74, 245, 208, 5, 1, 152, 75, + 245, 208, 5, 1, 152, 62, 245, 208, 5, 1, 152, 252, 213, 245, 208, 5, 1, + 152, 76, 245, 208, 5, 1, 152, 222, 152, 245, 208, 5, 1, 215, 144, 74, + 245, 208, 5, 1, 215, 144, 75, 245, 208, 5, 1, 215, 144, 62, 245, 208, 5, + 1, 215, 144, 252, 213, 245, 208, 5, 1, 215, 144, 76, 245, 208, 5, 1, 215, + 144, 222, 152, 245, 208, 5, 1, 251, 159, 245, 208, 5, 1, 222, 78, 245, + 208, 5, 1, 206, 216, 245, 208, 5, 1, 206, 49, 245, 208, 5, 1, 239, 155, + 245, 208, 5, 1, 221, 164, 245, 208, 5, 1, 250, 50, 245, 208, 5, 1, 212, + 120, 245, 208, 5, 1, 245, 251, 245, 208, 5, 1, 248, 78, 245, 208, 5, 1, + 232, 180, 245, 208, 5, 1, 231, 231, 245, 208, 5, 1, 240, 191, 245, 208, + 5, 1, 243, 97, 245, 208, 5, 1, 209, 34, 245, 208, 5, 1, 242, 196, 245, + 208, 5, 1, 212, 39, 245, 208, 5, 1, 242, 225, 245, 208, 5, 1, 205, 91, + 245, 208, 5, 1, 242, 215, 245, 208, 5, 1, 205, 71, 245, 208, 5, 1, 242, + 235, 245, 208, 5, 1, 243, 68, 245, 208, 5, 1, 243, 50, 245, 208, 5, 1, + 243, 41, 245, 208, 5, 1, 243, 28, 245, 208, 5, 1, 222, 191, 245, 208, 5, + 1, 242, 175, 215, 221, 1, 221, 161, 215, 221, 1, 211, 91, 215, 221, 1, + 231, 119, 215, 221, 1, 242, 21, 215, 221, 1, 212, 14, 215, 221, 1, 214, + 193, 215, 221, 1, 213, 130, 215, 221, 1, 248, 6, 215, 221, 1, 206, 51, + 215, 221, 1, 238, 27, 215, 221, 1, 249, 243, 215, 221, 1, 246, 8, 215, + 221, 1, 240, 230, 215, 221, 1, 208, 155, 215, 221, 1, 212, 20, 215, 221, + 1, 205, 17, 215, 221, 1, 227, 117, 215, 221, 1, 232, 102, 215, 221, 1, + 206, 248, 215, 221, 1, 239, 143, 215, 221, 1, 229, 130, 215, 221, 1, 226, + 210, 215, 221, 1, 233, 109, 215, 221, 1, 243, 96, 215, 221, 1, 251, 225, + 215, 221, 1, 252, 252, 215, 221, 1, 222, 165, 215, 221, 1, 206, 235, 215, + 221, 1, 222, 93, 215, 221, 1, 252, 213, 215, 221, 1, 218, 121, 215, 221, + 1, 223, 173, 215, 221, 1, 243, 113, 215, 221, 1, 252, 218, 215, 221, 1, + 237, 181, 215, 221, 1, 209, 206, 215, 221, 1, 222, 228, 215, 221, 1, 222, + 144, 215, 221, 1, 222, 189, 215, 221, 1, 251, 162, 215, 221, 1, 252, 14, + 215, 221, 1, 222, 122, 215, 221, 1, 252, 196, 215, 221, 1, 242, 229, 215, + 221, 1, 251, 248, 215, 221, 1, 243, 124, 215, 221, 1, 237, 189, 215, 221, + 1, 206, 16, 222, 104, 1, 252, 172, 222, 104, 1, 250, 183, 222, 104, 1, + 212, 219, 222, 104, 1, 232, 200, 222, 104, 1, 206, 181, 222, 104, 1, 231, + 167, 222, 104, 1, 245, 250, 222, 104, 1, 219, 113, 222, 104, 1, 217, 199, + 222, 104, 1, 215, 177, 222, 104, 1, 245, 192, 222, 104, 1, 248, 173, 222, + 104, 1, 240, 244, 222, 104, 1, 242, 73, 222, 104, 1, 220, 17, 222, 104, + 1, 232, 61, 222, 104, 1, 230, 136, 222, 104, 1, 226, 223, 222, 104, 1, + 223, 157, 222, 104, 1, 207, 59, 222, 104, 1, 155, 222, 104, 1, 190, 222, + 104, 1, 62, 222, 104, 1, 75, 222, 104, 1, 74, 222, 104, 1, 76, 222, 104, + 1, 71, 222, 104, 1, 253, 164, 222, 104, 1, 243, 104, 222, 104, 1, 222, + 152, 222, 104, 18, 205, 85, 222, 104, 18, 102, 222, 104, 18, 105, 222, + 104, 18, 142, 222, 104, 18, 139, 222, 104, 18, 168, 222, 104, 18, 184, + 222, 104, 18, 195, 222, 104, 18, 193, 222, 104, 18, 200, 243, 64, 1, 62, + 243, 64, 1, 250, 61, 243, 64, 1, 248, 148, 243, 64, 1, 248, 82, 243, 64, + 1, 246, 9, 243, 64, 1, 225, 143, 243, 64, 1, 245, 183, 243, 64, 1, 243, + 90, 243, 64, 1, 75, 243, 64, 1, 242, 28, 243, 64, 1, 240, 170, 243, 64, + 1, 240, 32, 243, 64, 1, 239, 71, 243, 64, 1, 74, 243, 64, 1, 232, 182, + 243, 64, 1, 231, 224, 243, 64, 1, 230, 58, 243, 64, 1, 229, 168, 243, 64, + 1, 227, 119, 243, 64, 1, 225, 110, 243, 64, 1, 199, 243, 64, 1, 224, 173, + 243, 64, 1, 76, 243, 64, 1, 221, 174, 243, 64, 1, 219, 255, 243, 64, 1, + 219, 51, 243, 64, 1, 218, 84, 243, 64, 1, 217, 86, 243, 64, 1, 215, 214, + 243, 64, 1, 212, 131, 243, 64, 1, 212, 41, 243, 64, 1, 71, 243, 64, 1, + 209, 39, 243, 64, 1, 206, 175, 243, 64, 1, 206, 123, 243, 64, 1, 205, 93, + 243, 64, 1, 205, 72, 243, 64, 1, 240, 85, 243, 64, 1, 240, 91, 243, 64, + 1, 231, 152, 248, 180, 252, 173, 1, 252, 143, 248, 180, 252, 173, 1, 250, + 10, 248, 180, 252, 173, 1, 240, 49, 248, 180, 252, 173, 1, 246, 74, 248, + 180, 252, 173, 1, 243, 112, 248, 180, 252, 173, 1, 205, 103, 248, 180, + 252, 173, 1, 242, 147, 248, 180, 252, 173, 1, 205, 66, 248, 180, 252, + 173, 1, 212, 157, 248, 180, 252, 173, 1, 248, 110, 248, 180, 252, 173, 1, + 205, 224, 248, 180, 252, 173, 1, 205, 81, 248, 180, 252, 173, 1, 232, + 242, 248, 180, 252, 173, 1, 216, 2, 248, 180, 252, 173, 1, 230, 95, 248, + 180, 252, 173, 1, 232, 254, 248, 180, 252, 173, 1, 206, 171, 248, 180, + 252, 173, 1, 243, 203, 248, 180, 252, 173, 1, 248, 204, 248, 180, 252, + 173, 1, 232, 163, 248, 180, 252, 173, 1, 232, 7, 248, 180, 252, 173, 1, + 229, 37, 248, 180, 252, 173, 1, 239, 22, 248, 180, 252, 173, 1, 220, 0, + 248, 180, 252, 173, 1, 252, 70, 248, 180, 252, 173, 1, 248, 23, 248, 180, + 252, 173, 1, 248, 58, 248, 180, 252, 173, 1, 246, 252, 248, 180, 252, + 173, 1, 227, 202, 248, 180, 252, 173, 1, 220, 4, 248, 180, 252, 173, 1, + 224, 28, 248, 180, 252, 173, 1, 243, 181, 248, 180, 252, 173, 1, 215, + 242, 248, 180, 252, 173, 1, 232, 183, 248, 180, 252, 173, 1, 222, 165, + 248, 180, 252, 173, 1, 210, 99, 248, 180, 252, 173, 1, 242, 49, 248, 180, + 252, 173, 1, 243, 194, 248, 180, 252, 173, 1, 248, 88, 248, 180, 252, + 173, 1, 221, 150, 248, 180, 252, 173, 1, 240, 75, 248, 180, 252, 173, 1, + 219, 65, 248, 180, 252, 173, 1, 216, 11, 248, 180, 252, 173, 1, 208, 216, + 248, 180, 252, 173, 1, 211, 150, 248, 180, 252, 173, 1, 215, 124, 248, + 180, 252, 173, 1, 232, 213, 248, 180, 252, 173, 1, 246, 253, 248, 180, + 252, 173, 1, 248, 173, 248, 180, 252, 173, 1, 206, 56, 248, 180, 252, + 173, 1, 220, 244, 248, 180, 252, 173, 1, 231, 87, 248, 180, 252, 173, + 247, 224, 83, 26, 32, 3, 253, 114, 26, 32, 3, 253, 113, 26, 32, 3, 253, + 112, 26, 32, 3, 253, 111, 26, 32, 3, 253, 110, 26, 32, 3, 253, 109, 26, + 32, 3, 253, 108, 26, 32, 3, 253, 107, 26, 32, 3, 253, 106, 26, 32, 3, + 253, 105, 26, 32, 3, 253, 104, 26, 32, 3, 253, 103, 26, 32, 3, 253, 102, + 26, 32, 3, 253, 101, 26, 32, 3, 253, 100, 26, 32, 3, 253, 99, 26, 32, 3, + 253, 98, 26, 32, 3, 253, 97, 26, 32, 3, 253, 96, 26, 32, 3, 253, 95, 26, + 32, 3, 253, 94, 26, 32, 3, 253, 93, 26, 32, 3, 253, 92, 26, 32, 3, 253, + 91, 26, 32, 3, 253, 90, 26, 32, 3, 253, 89, 26, 32, 3, 253, 88, 26, 32, + 3, 254, 217, 26, 32, 3, 253, 87, 26, 32, 3, 253, 86, 26, 32, 3, 253, 85, + 26, 32, 3, 253, 84, 26, 32, 3, 253, 83, 26, 32, 3, 253, 82, 26, 32, 3, + 253, 81, 26, 32, 3, 253, 80, 26, 32, 3, 253, 79, 26, 32, 3, 253, 78, 26, + 32, 3, 253, 77, 26, 32, 3, 253, 76, 26, 32, 3, 253, 75, 26, 32, 3, 253, + 74, 26, 32, 3, 253, 73, 26, 32, 3, 253, 72, 26, 32, 3, 253, 71, 26, 32, + 3, 253, 70, 26, 32, 3, 253, 69, 26, 32, 3, 253, 68, 26, 32, 3, 253, 67, + 26, 32, 3, 253, 66, 26, 32, 3, 253, 65, 26, 32, 3, 253, 64, 26, 32, 3, + 253, 63, 26, 32, 3, 253, 62, 26, 32, 3, 253, 61, 26, 32, 3, 253, 60, 26, + 32, 3, 253, 59, 26, 32, 3, 253, 58, 26, 32, 3, 253, 57, 26, 32, 3, 253, + 56, 26, 32, 3, 253, 55, 26, 32, 3, 253, 54, 26, 32, 3, 253, 53, 26, 32, + 3, 253, 52, 26, 32, 3, 253, 51, 26, 32, 3, 253, 50, 26, 32, 3, 253, 49, + 26, 32, 3, 253, 48, 26, 32, 3, 253, 47, 26, 32, 3, 253, 46, 26, 32, 3, + 253, 45, 26, 32, 3, 254, 169, 26, 32, 3, 253, 44, 26, 32, 3, 253, 43, 26, + 32, 3, 254, 168, 26, 32, 3, 253, 42, 26, 32, 3, 253, 41, 26, 32, 3, 253, + 40, 26, 32, 3, 253, 39, 26, 32, 3, 254, 167, 26, 32, 3, 253, 38, 26, 32, + 3, 253, 37, 26, 32, 3, 253, 36, 26, 32, 3, 253, 35, 26, 32, 3, 253, 34, + 26, 32, 3, 254, 164, 26, 32, 3, 254, 163, 26, 32, 3, 254, 162, 26, 32, 3, + 254, 161, 26, 32, 3, 254, 160, 26, 32, 3, 254, 159, 26, 32, 3, 254, 158, + 26, 32, 3, 254, 157, 26, 32, 3, 254, 156, 26, 32, 3, 254, 155, 26, 32, 3, + 254, 154, 26, 32, 3, 254, 153, 26, 32, 3, 254, 152, 26, 32, 3, 254, 151, + 26, 32, 3, 254, 150, 26, 32, 3, 254, 149, 26, 32, 3, 254, 148, 26, 32, 3, + 254, 147, 26, 32, 3, 254, 146, 26, 32, 3, 254, 145, 26, 32, 3, 254, 144, + 26, 32, 3, 254, 143, 26, 32, 3, 254, 142, 26, 32, 3, 254, 141, 26, 32, 3, + 254, 140, 26, 32, 3, 254, 139, 26, 32, 3, 254, 138, 26, 32, 3, 254, 137, + 26, 32, 3, 254, 136, 26, 32, 3, 254, 135, 26, 32, 3, 254, 134, 26, 32, 3, + 254, 133, 26, 32, 3, 254, 132, 26, 32, 3, 254, 131, 26, 32, 3, 254, 130, + 26, 32, 3, 254, 129, 26, 32, 3, 254, 128, 26, 32, 3, 254, 127, 26, 32, 3, + 254, 126, 26, 32, 3, 254, 125, 26, 32, 3, 254, 124, 26, 32, 3, 254, 123, + 26, 32, 3, 254, 122, 26, 32, 3, 254, 121, 26, 32, 3, 254, 120, 26, 32, 3, + 254, 119, 26, 32, 3, 254, 118, 26, 32, 3, 254, 117, 26, 32, 3, 254, 116, + 26, 32, 3, 254, 115, 26, 32, 3, 254, 114, 26, 32, 3, 254, 113, 26, 32, 3, + 254, 112, 26, 32, 3, 254, 111, 26, 32, 3, 254, 110, 26, 32, 3, 254, 109, + 26, 32, 3, 254, 108, 26, 32, 3, 254, 107, 26, 32, 3, 254, 106, 26, 32, 3, + 254, 105, 26, 32, 3, 254, 104, 26, 32, 3, 254, 103, 26, 32, 3, 254, 102, + 26, 32, 3, 254, 101, 26, 32, 3, 254, 100, 26, 32, 3, 254, 99, 26, 32, 3, + 254, 98, 26, 32, 3, 254, 97, 26, 32, 3, 254, 96, 26, 32, 3, 254, 95, 26, + 32, 3, 254, 94, 26, 32, 3, 254, 93, 26, 32, 3, 254, 92, 26, 32, 3, 254, + 91, 26, 32, 3, 254, 90, 26, 32, 3, 254, 89, 26, 32, 3, 254, 88, 26, 32, + 3, 254, 87, 26, 32, 3, 254, 86, 26, 32, 3, 254, 85, 26, 32, 3, 254, 84, + 26, 32, 3, 254, 83, 26, 32, 3, 254, 82, 26, 32, 3, 254, 81, 26, 32, 3, + 254, 80, 26, 32, 3, 254, 79, 26, 32, 3, 254, 78, 26, 32, 3, 254, 77, 26, + 32, 3, 254, 76, 26, 32, 3, 254, 75, 26, 32, 3, 254, 74, 26, 32, 3, 254, + 73, 26, 32, 3, 254, 72, 26, 32, 3, 254, 71, 26, 32, 3, 254, 70, 26, 32, + 3, 254, 69, 26, 32, 3, 254, 68, 26, 32, 3, 254, 67, 26, 32, 3, 254, 66, + 26, 32, 3, 254, 65, 26, 32, 3, 254, 64, 26, 32, 3, 254, 63, 26, 32, 3, + 254, 62, 26, 32, 3, 254, 61, 26, 32, 3, 254, 60, 26, 32, 3, 254, 59, 26, + 32, 3, 254, 58, 26, 32, 3, 254, 57, 26, 32, 3, 254, 56, 26, 32, 3, 254, + 55, 26, 32, 3, 254, 54, 26, 32, 3, 254, 53, 26, 32, 3, 254, 52, 26, 32, + 3, 254, 51, 26, 32, 3, 254, 50, 26, 32, 3, 254, 49, 26, 32, 3, 254, 48, + 26, 32, 3, 254, 47, 26, 32, 3, 254, 46, 26, 32, 3, 254, 45, 26, 32, 3, + 254, 44, 26, 32, 3, 254, 43, 26, 32, 3, 254, 42, 26, 32, 3, 254, 41, 26, + 32, 3, 254, 40, 26, 32, 3, 254, 39, 26, 32, 3, 254, 38, 26, 32, 3, 254, + 37, 26, 32, 3, 254, 36, 26, 32, 3, 254, 35, 26, 32, 3, 254, 34, 26, 32, + 3, 254, 33, 26, 32, 3, 254, 32, 26, 32, 3, 254, 31, 26, 32, 3, 254, 30, + 26, 32, 3, 254, 29, 26, 32, 3, 254, 28, 26, 32, 3, 254, 27, 26, 32, 3, + 254, 26, 26, 32, 3, 254, 25, 26, 32, 3, 254, 24, 26, 32, 3, 254, 23, 26, + 32, 3, 254, 22, 26, 32, 3, 254, 21, 26, 32, 3, 254, 20, 26, 32, 3, 254, + 19, 26, 32, 3, 254, 18, 26, 32, 3, 254, 17, 26, 32, 3, 254, 16, 26, 32, + 3, 254, 15, 26, 32, 3, 254, 14, 26, 32, 3, 254, 13, 26, 32, 3, 254, 12, + 26, 32, 3, 254, 11, 26, 32, 3, 254, 10, 26, 32, 3, 254, 9, 26, 32, 3, + 254, 8, 26, 32, 3, 254, 7, 26, 32, 3, 254, 6, 26, 32, 3, 254, 5, 26, 32, + 3, 254, 4, 26, 32, 3, 254, 3, 26, 32, 3, 254, 2, 26, 32, 3, 254, 1, 26, + 32, 3, 254, 0, 26, 32, 3, 253, 255, 26, 32, 3, 253, 254, 26, 32, 3, 253, + 253, 26, 32, 3, 253, 252, 26, 32, 3, 253, 251, 26, 32, 3, 253, 250, 26, + 32, 3, 253, 249, 26, 32, 3, 253, 248, 26, 32, 3, 253, 247, 26, 32, 3, + 253, 246, 26, 32, 3, 253, 245, 26, 32, 3, 253, 244, 26, 32, 3, 253, 243, + 26, 32, 3, 253, 242, 26, 32, 3, 253, 241, 26, 32, 3, 253, 240, 26, 32, 3, + 253, 239, 26, 32, 3, 253, 238, 26, 32, 3, 253, 237, 26, 32, 3, 253, 236, + 26, 32, 3, 253, 235, 26, 32, 3, 253, 234, 26, 32, 3, 253, 233, 26, 32, 3, + 253, 232, 26, 32, 3, 253, 231, 26, 32, 3, 253, 230, 26, 32, 3, 253, 229, + 26, 32, 3, 253, 228, 26, 32, 3, 253, 227, 26, 32, 3, 253, 226, 26, 32, 3, + 253, 225, 26, 32, 3, 253, 224, 26, 32, 3, 253, 223, 26, 32, 3, 253, 222, + 26, 32, 3, 253, 221, 26, 32, 3, 253, 220, 26, 32, 3, 253, 219, 26, 32, 3, + 253, 218, 26, 32, 3, 253, 217, 26, 32, 3, 253, 216, 26, 32, 3, 253, 215, + 26, 32, 3, 253, 214, 26, 32, 3, 253, 213, 26, 32, 3, 253, 212, 26, 32, 3, + 253, 211, 26, 32, 3, 253, 210, 26, 32, 3, 253, 209, 26, 32, 3, 253, 208, + 26, 32, 3, 253, 207, 26, 32, 3, 253, 206, 26, 32, 3, 253, 205, 26, 32, 3, + 253, 204, 26, 32, 3, 253, 203, 26, 32, 3, 253, 202, 26, 32, 3, 253, 201, + 26, 32, 3, 253, 200, 26, 32, 3, 253, 199, 26, 32, 3, 253, 198, 26, 32, 3, + 253, 197, 26, 32, 3, 253, 196, 26, 32, 3, 253, 195, 26, 32, 3, 253, 194, + 62, 26, 32, 3, 253, 193, 251, 150, 26, 32, 3, 253, 192, 246, 240, 26, 32, + 3, 253, 191, 75, 26, 32, 3, 253, 190, 242, 139, 26, 32, 3, 253, 189, 239, + 155, 26, 32, 3, 253, 188, 232, 203, 26, 32, 3, 253, 187, 232, 76, 26, 32, + 3, 253, 186, 149, 26, 32, 3, 253, 185, 230, 146, 26, 32, 3, 253, 184, + 230, 145, 26, 32, 3, 253, 183, 230, 144, 26, 32, 3, 253, 182, 230, 143, + 26, 32, 3, 253, 181, 207, 129, 26, 32, 3, 253, 180, 206, 195, 26, 32, 3, + 253, 179, 206, 123, 26, 32, 3, 253, 178, 222, 170, 26, 32, 3, 253, 177, + 253, 30, 26, 32, 3, 253, 176, 250, 98, 26, 32, 3, 253, 175, 246, 56, 26, + 32, 3, 253, 174, 242, 146, 26, 32, 3, 253, 173, 232, 182, 26, 32, 3, 253, + 172, 26, 32, 3, 253, 171, 26, 32, 3, 253, 170, 26, 32, 3, 253, 169, 26, + 32, 3, 253, 168, 26, 32, 3, 253, 167, 26, 32, 3, 253, 166, 26, 32, 3, + 253, 165, 246, 247, 4, 62, 246, 247, 4, 75, 246, 247, 4, 74, 246, 247, 4, + 76, 246, 247, 4, 71, 246, 247, 4, 232, 200, 246, 247, 4, 232, 122, 246, + 247, 4, 172, 246, 247, 4, 231, 224, 246, 247, 4, 231, 123, 246, 247, 4, + 231, 53, 246, 247, 4, 230, 236, 246, 247, 4, 230, 141, 246, 247, 4, 230, + 58, 246, 247, 4, 229, 235, 246, 247, 4, 229, 144, 246, 247, 4, 229, 81, + 246, 247, 4, 185, 246, 247, 4, 227, 119, 246, 247, 4, 226, 254, 246, 247, + 4, 226, 181, 246, 247, 4, 226, 114, 246, 247, 4, 199, 246, 247, 4, 225, + 110, 246, 247, 4, 224, 230, 246, 247, 4, 224, 67, 246, 247, 4, 223, 217, + 246, 247, 4, 179, 246, 247, 4, 221, 174, 246, 247, 4, 221, 53, 246, 247, + 4, 220, 211, 246, 247, 4, 220, 82, 246, 247, 4, 219, 113, 246, 247, 4, + 219, 51, 246, 247, 4, 218, 208, 246, 247, 4, 218, 124, 246, 247, 4, 218, + 50, 246, 247, 4, 217, 199, 246, 247, 4, 217, 86, 246, 247, 4, 215, 80, + 246, 247, 4, 214, 193, 246, 247, 4, 213, 203, 246, 247, 4, 212, 219, 246, + 247, 4, 212, 131, 246, 247, 4, 211, 211, 246, 247, 4, 124, 246, 247, 4, + 210, 170, 246, 247, 4, 207, 96, 246, 247, 4, 207, 51, 246, 247, 4, 207, + 20, 246, 247, 4, 206, 250, 246, 247, 4, 206, 181, 246, 247, 4, 206, 175, + 246, 247, 4, 205, 116, 246, 247, 4, 205, 19, 233, 70, 252, 23, 1, 252, + 170, 233, 70, 252, 23, 1, 250, 7, 233, 70, 252, 23, 1, 240, 47, 233, 70, + 252, 23, 1, 246, 110, 233, 70, 252, 23, 1, 239, 71, 233, 70, 252, 23, 1, + 207, 59, 233, 70, 252, 23, 1, 205, 96, 233, 70, 252, 23, 1, 239, 27, 233, + 70, 252, 23, 1, 212, 76, 233, 70, 252, 23, 1, 205, 235, 233, 70, 252, 23, + 1, 232, 17, 233, 70, 252, 23, 1, 230, 97, 233, 70, 252, 23, 1, 227, 90, + 233, 70, 252, 23, 1, 223, 173, 233, 70, 252, 23, 1, 217, 157, 233, 70, + 252, 23, 1, 251, 154, 233, 70, 252, 23, 1, 221, 174, 233, 70, 252, 23, 1, + 217, 189, 233, 70, 252, 23, 1, 219, 218, 233, 70, 252, 23, 1, 218, 242, + 233, 70, 252, 23, 1, 215, 171, 233, 70, 252, 23, 1, 212, 145, 233, 70, + 252, 23, 217, 77, 53, 233, 70, 252, 23, 43, 102, 233, 70, 252, 23, 43, + 105, 233, 70, 252, 23, 43, 142, 233, 70, 252, 23, 43, 212, 98, 233, 70, + 252, 23, 43, 210, 123, 233, 70, 252, 23, 43, 119, 238, 29, 233, 70, 252, + 23, 43, 119, 211, 242, 233, 70, 252, 23, 43, 212, 99, 211, 242, 222, 18, + 1, 252, 170, 222, 18, 1, 250, 7, 222, 18, 1, 240, 47, 222, 18, 1, 246, + 110, 222, 18, 1, 239, 71, 222, 18, 1, 207, 59, 222, 18, 1, 205, 96, 222, + 18, 1, 239, 27, 222, 18, 1, 212, 76, 222, 18, 1, 205, 235, 222, 18, 1, + 232, 17, 222, 18, 1, 230, 97, 222, 18, 1, 227, 90, 222, 18, 1, 42, 223, + 173, 222, 18, 1, 223, 173, 222, 18, 1, 217, 157, 222, 18, 1, 251, 154, + 222, 18, 1, 221, 174, 222, 18, 1, 217, 189, 222, 18, 1, 219, 218, 222, + 18, 1, 218, 242, 222, 18, 1, 215, 171, 222, 18, 1, 212, 145, 222, 18, + 230, 41, 241, 183, 222, 18, 218, 162, 241, 183, 222, 18, 43, 102, 222, + 18, 43, 105, 222, 18, 43, 142, 222, 18, 43, 139, 222, 18, 43, 168, 222, + 18, 43, 212, 98, 222, 18, 43, 210, 123, 225, 228, 1, 42, 252, 170, 225, + 228, 1, 252, 170, 225, 228, 1, 42, 250, 7, 225, 228, 1, 250, 7, 225, 228, + 1, 240, 47, 225, 228, 1, 246, 110, 225, 228, 1, 42, 239, 71, 225, 228, 1, + 239, 71, 225, 228, 1, 207, 59, 225, 228, 1, 205, 96, 225, 228, 1, 239, + 27, 225, 228, 1, 212, 76, 225, 228, 1, 42, 205, 235, 225, 228, 1, 205, + 235, 225, 228, 1, 42, 232, 17, 225, 228, 1, 232, 17, 225, 228, 1, 42, + 230, 97, 225, 228, 1, 230, 97, 225, 228, 1, 42, 227, 90, 225, 228, 1, + 227, 90, 225, 228, 1, 42, 223, 173, 225, 228, 1, 223, 173, 225, 228, 1, + 217, 157, 225, 228, 1, 251, 154, 225, 228, 1, 221, 174, 225, 228, 1, 217, + 189, 225, 228, 1, 219, 218, 225, 228, 1, 218, 242, 225, 228, 1, 42, 215, + 171, 225, 228, 1, 215, 171, 225, 228, 1, 212, 145, 225, 228, 43, 102, + 225, 228, 43, 105, 225, 228, 43, 142, 225, 228, 43, 139, 225, 228, 247, + 46, 43, 139, 225, 228, 43, 168, 225, 228, 43, 212, 98, 225, 228, 43, 210, + 123, 225, 228, 43, 119, 238, 29, 221, 64, 1, 252, 167, 221, 64, 1, 250, + 10, 221, 64, 1, 240, 217, 221, 64, 1, 245, 229, 221, 64, 1, 239, 71, 221, + 64, 1, 207, 66, 221, 64, 1, 205, 110, 221, 64, 1, 239, 29, 221, 64, 1, + 212, 80, 221, 64, 1, 205, 236, 221, 64, 1, 232, 45, 221, 64, 1, 230, 103, + 221, 64, 1, 227, 90, 221, 64, 1, 223, 173, 221, 64, 1, 216, 46, 221, 64, + 1, 252, 200, 221, 64, 1, 221, 174, 221, 64, 1, 217, 190, 221, 64, 1, 219, + 223, 221, 64, 1, 218, 99, 221, 64, 1, 215, 171, 221, 64, 1, 212, 151, + 221, 64, 43, 102, 221, 64, 43, 212, 98, 221, 64, 43, 210, 123, 221, 64, + 43, 119, 238, 29, 221, 64, 43, 105, 221, 64, 43, 142, 221, 64, 206, 232, + 216, 39, 229, 39, 1, 62, 229, 39, 1, 251, 150, 229, 39, 1, 241, 55, 229, + 39, 1, 246, 240, 229, 39, 1, 75, 229, 39, 1, 209, 148, 229, 39, 1, 74, + 229, 39, 1, 206, 123, 229, 39, 1, 232, 76, 229, 39, 1, 149, 229, 39, 1, + 229, 28, 229, 39, 1, 226, 33, 229, 39, 1, 76, 229, 39, 1, 137, 229, 39, + 1, 214, 99, 229, 39, 1, 213, 10, 229, 39, 1, 71, 229, 39, 1, 242, 139, + 229, 39, 1, 220, 27, 229, 39, 1, 182, 229, 39, 1, 210, 211, 229, 39, 1, + 252, 122, 229, 39, 1, 243, 41, 229, 39, 1, 229, 42, 229, 39, 1, 224, 104, + 229, 39, 1, 249, 34, 229, 39, 211, 48, 83, 227, 72, 239, 5, 1, 62, 227, + 72, 239, 5, 1, 75, 227, 72, 239, 5, 1, 74, 227, 72, 239, 5, 1, 76, 227, + 72, 239, 5, 1, 190, 227, 72, 239, 5, 1, 207, 96, 227, 72, 239, 5, 1, 250, + 183, 227, 72, 239, 5, 1, 250, 182, 227, 72, 239, 5, 1, 179, 227, 72, 239, + 5, 1, 185, 227, 72, 239, 5, 1, 199, 227, 72, 239, 5, 1, 225, 236, 227, + 72, 239, 5, 1, 225, 110, 227, 72, 239, 5, 1, 225, 109, 227, 72, 239, 5, + 1, 219, 113, 227, 72, 239, 5, 1, 219, 112, 227, 72, 239, 5, 1, 230, 141, + 227, 72, 239, 5, 1, 231, 167, 227, 72, 239, 5, 1, 239, 20, 227, 72, 239, + 5, 1, 217, 199, 227, 72, 239, 5, 1, 217, 198, 227, 72, 239, 5, 1, 217, + 86, 227, 72, 239, 5, 1, 172, 227, 72, 239, 5, 1, 220, 19, 227, 72, 239, + 5, 1, 212, 219, 227, 72, 239, 5, 1, 212, 218, 227, 72, 239, 5, 1, 212, + 131, 227, 72, 239, 5, 1, 212, 130, 227, 72, 239, 5, 1, 124, 227, 72, 239, + 5, 1, 246, 145, 227, 72, 239, 5, 16, 208, 208, 227, 72, 239, 5, 16, 208, + 207, 227, 72, 247, 21, 1, 62, 227, 72, 247, 21, 1, 75, 227, 72, 247, 21, + 1, 74, 227, 72, 247, 21, 1, 76, 227, 72, 247, 21, 1, 190, 227, 72, 247, + 21, 1, 207, 96, 227, 72, 247, 21, 1, 250, 183, 227, 72, 247, 21, 1, 179, + 227, 72, 247, 21, 1, 185, 227, 72, 247, 21, 1, 199, 227, 72, 247, 21, 1, + 225, 110, 227, 72, 247, 21, 1, 219, 113, 227, 72, 247, 21, 1, 230, 141, + 227, 72, 247, 21, 1, 231, 167, 227, 72, 247, 21, 1, 239, 20, 227, 72, + 247, 21, 1, 217, 199, 227, 72, 247, 21, 1, 252, 19, 217, 199, 227, 72, + 247, 21, 1, 217, 86, 227, 72, 247, 21, 1, 172, 227, 72, 247, 21, 1, 220, + 19, 227, 72, 247, 21, 1, 212, 219, 227, 72, 247, 21, 1, 212, 131, 227, + 72, 247, 21, 1, 124, 227, 72, 247, 21, 1, 246, 145, 227, 72, 247, 21, + 229, 133, 218, 130, 227, 72, 247, 21, 229, 133, 233, 75, 231, 154, 1, 62, + 231, 154, 22, 3, 74, 231, 154, 22, 3, 71, 231, 154, 22, 3, 115, 137, 231, + 154, 22, 3, 75, 231, 154, 22, 3, 76, 231, 154, 22, 230, 20, 83, 231, 154, + 3, 50, 218, 149, 55, 231, 154, 3, 252, 73, 231, 154, 3, 208, 183, 231, + 154, 1, 172, 231, 154, 1, 231, 167, 231, 154, 1, 240, 244, 231, 154, 1, + 240, 99, 231, 154, 1, 249, 1, 231, 154, 1, 248, 110, 231, 154, 1, 232, + 200, 231, 154, 1, 223, 144, 231, 154, 1, 210, 208, 231, 154, 1, 210, 196, + 231, 154, 1, 246, 54, 231, 154, 1, 246, 38, 231, 154, 1, 224, 103, 231, + 154, 1, 212, 219, 231, 154, 1, 212, 56, 231, 154, 1, 246, 145, 231, 154, + 1, 245, 192, 231, 154, 1, 199, 231, 154, 1, 179, 231, 154, 1, 221, 93, + 231, 154, 1, 250, 183, 231, 154, 1, 250, 0, 231, 154, 1, 185, 231, 154, + 1, 190, 231, 154, 1, 219, 113, 231, 154, 1, 230, 141, 231, 154, 1, 209, + 70, 231, 154, 1, 216, 2, 231, 154, 1, 214, 96, 231, 154, 1, 217, 199, + 231, 154, 1, 205, 116, 231, 154, 1, 155, 231, 154, 1, 231, 72, 231, 154, + 1, 210, 176, 231, 154, 3, 250, 129, 52, 231, 154, 3, 248, 179, 231, 154, + 3, 67, 55, 231, 154, 208, 188, 231, 154, 18, 102, 231, 154, 18, 105, 231, + 154, 18, 142, 231, 154, 18, 139, 231, 154, 43, 212, 98, 231, 154, 43, + 210, 123, 231, 154, 43, 119, 238, 29, 231, 154, 43, 119, 211, 242, 231, + 154, 220, 72, 245, 23, 231, 154, 220, 72, 5, 247, 233, 231, 154, 220, 72, + 247, 233, 231, 154, 220, 72, 247, 66, 134, 231, 154, 220, 72, 227, 215, + 231, 154, 220, 72, 229, 102, 231, 154, 220, 72, 246, 100, 231, 154, 220, + 72, 50, 246, 100, 231, 154, 220, 72, 229, 199, 44, 188, 252, 34, 1, 239, + 71, 44, 188, 252, 34, 1, 230, 97, 44, 188, 252, 34, 1, 239, 27, 44, 188, + 252, 34, 1, 227, 90, 44, 188, 252, 34, 1, 219, 218, 44, 188, 252, 34, 1, + 207, 59, 44, 188, 252, 34, 1, 215, 171, 44, 188, 252, 34, 1, 218, 242, + 44, 188, 252, 34, 1, 250, 7, 44, 188, 252, 34, 1, 212, 145, 44, 188, 252, + 34, 1, 217, 133, 44, 188, 252, 34, 1, 232, 17, 44, 188, 252, 34, 1, 223, + 173, 44, 188, 252, 34, 1, 231, 149, 44, 188, 252, 34, 1, 217, 189, 44, + 188, 252, 34, 1, 217, 157, 44, 188, 252, 34, 1, 242, 28, 44, 188, 252, + 34, 1, 252, 172, 44, 188, 252, 34, 1, 251, 153, 44, 188, 252, 34, 1, 245, + 189, 44, 188, 252, 34, 1, 240, 47, 44, 188, 252, 34, 1, 246, 110, 44, + 188, 252, 34, 1, 240, 87, 44, 188, 252, 34, 1, 212, 76, 44, 188, 252, 34, + 1, 205, 95, 44, 188, 252, 34, 1, 245, 186, 44, 188, 252, 34, 1, 205, 235, + 44, 188, 252, 34, 1, 212, 43, 44, 188, 252, 34, 1, 212, 22, 44, 188, 252, + 34, 43, 102, 44, 188, 252, 34, 43, 241, 243, 44, 188, 252, 34, 133, 233, + 49, 44, 143, 252, 34, 1, 239, 50, 44, 143, 252, 34, 1, 230, 106, 44, 143, + 252, 34, 1, 239, 132, 44, 143, 252, 34, 1, 227, 104, 44, 143, 252, 34, 1, + 220, 12, 44, 143, 252, 34, 1, 207, 59, 44, 143, 252, 34, 1, 242, 223, 44, + 143, 252, 34, 1, 219, 16, 44, 143, 252, 34, 1, 250, 38, 44, 143, 252, 34, + 1, 212, 115, 44, 143, 252, 34, 1, 242, 224, 44, 143, 252, 34, 1, 232, 45, + 44, 143, 252, 34, 1, 224, 54, 44, 143, 252, 34, 1, 231, 163, 44, 143, + 252, 34, 1, 217, 191, 44, 143, 252, 34, 1, 242, 222, 44, 143, 252, 34, 1, + 242, 15, 44, 143, 252, 34, 1, 252, 172, 44, 143, 252, 34, 1, 252, 200, + 44, 143, 252, 34, 1, 246, 140, 44, 143, 252, 34, 1, 240, 161, 44, 143, + 252, 34, 1, 246, 117, 44, 143, 252, 34, 1, 240, 94, 44, 143, 252, 34, 1, + 212, 194, 44, 143, 252, 34, 1, 205, 108, 44, 143, 252, 34, 1, 212, 49, + 44, 143, 252, 34, 1, 206, 47, 44, 143, 252, 34, 1, 212, 37, 44, 143, 252, + 34, 1, 205, 111, 44, 143, 252, 34, 43, 102, 44, 143, 252, 34, 43, 212, + 98, 44, 143, 252, 34, 43, 210, 123, 227, 214, 1, 252, 170, 227, 214, 1, + 250, 7, 227, 214, 1, 249, 250, 227, 214, 1, 240, 47, 227, 214, 1, 240, + 72, 227, 214, 1, 246, 110, 227, 214, 1, 239, 71, 227, 214, 1, 207, 59, + 227, 214, 3, 210, 8, 227, 214, 1, 205, 96, 227, 214, 1, 205, 74, 227, + 214, 1, 232, 184, 227, 214, 1, 232, 166, 227, 214, 1, 239, 27, 227, 214, + 1, 212, 76, 227, 214, 1, 205, 235, 227, 214, 1, 232, 17, 227, 214, 1, + 206, 178, 227, 214, 1, 231, 156, 227, 214, 1, 230, 97, 227, 214, 1, 245, + 185, 227, 214, 1, 212, 48, 227, 214, 1, 227, 90, 227, 214, 1, 223, 173, + 227, 214, 1, 217, 157, 227, 214, 1, 251, 154, 227, 214, 1, 253, 117, 227, + 214, 1, 221, 174, 227, 214, 1, 242, 28, 227, 214, 1, 217, 189, 227, 214, + 1, 219, 218, 227, 214, 1, 206, 156, 227, 214, 1, 219, 244, 227, 214, 1, + 218, 242, 227, 214, 1, 215, 171, 227, 214, 1, 214, 65, 227, 214, 1, 212, + 145, 227, 214, 253, 29, 141, 52, 227, 214, 253, 29, 141, 55, 227, 214, + 43, 102, 227, 214, 43, 168, 227, 214, 43, 212, 98, 227, 214, 43, 210, + 123, 227, 214, 43, 119, 238, 29, 227, 214, 220, 72, 214, 26, 227, 214, + 220, 72, 241, 183, 227, 214, 220, 72, 50, 67, 206, 255, 245, 23, 227, + 214, 220, 72, 67, 206, 255, 245, 23, 227, 214, 220, 72, 245, 23, 227, + 214, 220, 72, 118, 245, 21, 227, 214, 220, 72, 229, 206, 241, 232, 251, + 164, 1, 62, 251, 164, 1, 253, 164, 251, 164, 1, 252, 71, 251, 164, 1, + 253, 123, 251, 164, 1, 252, 122, 251, 164, 1, 253, 124, 251, 164, 1, 252, + 248, 251, 164, 1, 252, 244, 251, 164, 1, 75, 251, 164, 1, 243, 104, 251, + 164, 1, 76, 251, 164, 1, 222, 152, 251, 164, 1, 74, 251, 164, 1, 233, + 102, 251, 164, 1, 71, 251, 164, 1, 209, 162, 251, 164, 1, 231, 224, 251, + 164, 1, 206, 175, 251, 164, 1, 206, 137, 251, 164, 1, 206, 147, 251, 164, + 1, 240, 170, 251, 164, 1, 240, 130, 251, 164, 1, 240, 85, 251, 164, 1, + 248, 148, 251, 164, 1, 232, 182, 251, 164, 1, 212, 131, 251, 164, 1, 212, + 41, 251, 164, 1, 246, 9, 251, 164, 1, 245, 183, 251, 164, 1, 210, 203, + 251, 164, 1, 221, 174, 251, 164, 1, 242, 28, 251, 164, 1, 250, 61, 251, + 164, 1, 249, 252, 251, 164, 1, 225, 64, 251, 164, 1, 224, 236, 251, 164, + 1, 224, 237, 251, 164, 1, 225, 110, 251, 164, 1, 223, 134, 251, 164, 1, + 224, 98, 251, 164, 1, 227, 119, 251, 164, 1, 238, 199, 251, 164, 1, 205, + 166, 251, 164, 1, 206, 52, 251, 164, 1, 209, 39, 251, 164, 1, 219, 51, + 251, 164, 1, 230, 58, 251, 164, 1, 217, 86, 251, 164, 1, 205, 93, 251, + 164, 1, 215, 214, 251, 164, 1, 205, 72, 251, 164, 1, 215, 87, 251, 164, + 1, 214, 66, 251, 164, 1, 239, 71, 251, 164, 253, 29, 83, 211, 169, 118, + 177, 131, 119, 67, 220, 71, 5, 118, 177, 131, 119, 67, 220, 71, 230, 86, + 118, 177, 131, 119, 67, 220, 71, 230, 86, 119, 67, 131, 118, 177, 220, + 71, 230, 86, 118, 218, 146, 131, 119, 218, 149, 220, 71, 230, 86, 119, + 218, 149, 131, 118, 218, 146, 220, 71, 233, 29, 221, 210, 1, 252, 170, + 233, 29, 221, 210, 1, 250, 7, 233, 29, 221, 210, 1, 240, 47, 233, 29, + 221, 210, 1, 246, 110, 233, 29, 221, 210, 1, 239, 71, 233, 29, 221, 210, + 1, 207, 59, 233, 29, 221, 210, 1, 205, 96, 233, 29, 221, 210, 1, 239, 27, + 233, 29, 221, 210, 1, 212, 76, 233, 29, 221, 210, 1, 205, 235, 233, 29, + 221, 210, 1, 232, 17, 233, 29, 221, 210, 1, 230, 97, 233, 29, 221, 210, + 1, 227, 90, 233, 29, 221, 210, 1, 223, 173, 233, 29, 221, 210, 1, 217, + 157, 233, 29, 221, 210, 1, 251, 154, 233, 29, 221, 210, 1, 221, 174, 233, + 29, 221, 210, 1, 217, 189, 233, 29, 221, 210, 1, 219, 218, 233, 29, 221, + 210, 1, 218, 242, 233, 29, 221, 210, 1, 215, 171, 233, 29, 221, 210, 1, + 212, 145, 233, 29, 221, 210, 43, 102, 233, 29, 221, 210, 43, 105, 233, + 29, 221, 210, 43, 142, 233, 29, 221, 210, 43, 139, 233, 29, 221, 210, 43, + 212, 98, 233, 29, 221, 210, 43, 210, 123, 233, 29, 221, 210, 43, 119, + 238, 29, 233, 29, 221, 210, 43, 119, 211, 242, 233, 29, 222, 33, 1, 252, + 170, 233, 29, 222, 33, 1, 250, 7, 233, 29, 222, 33, 1, 240, 47, 233, 29, + 222, 33, 1, 246, 110, 233, 29, 222, 33, 1, 239, 71, 233, 29, 222, 33, 1, + 207, 58, 233, 29, 222, 33, 1, 205, 96, 233, 29, 222, 33, 1, 239, 27, 233, + 29, 222, 33, 1, 212, 76, 233, 29, 222, 33, 1, 205, 235, 233, 29, 222, 33, + 1, 232, 17, 233, 29, 222, 33, 1, 230, 97, 233, 29, 222, 33, 1, 227, 89, + 233, 29, 222, 33, 1, 223, 173, 233, 29, 222, 33, 1, 217, 157, 233, 29, + 222, 33, 1, 221, 174, 233, 29, 222, 33, 1, 217, 189, 233, 29, 222, 33, 1, + 215, 171, 233, 29, 222, 33, 1, 212, 145, 233, 29, 222, 33, 43, 102, 233, + 29, 222, 33, 43, 105, 233, 29, 222, 33, 43, 142, 233, 29, 222, 33, 43, + 139, 233, 29, 222, 33, 43, 212, 98, 233, 29, 222, 33, 43, 210, 123, 233, + 29, 222, 33, 43, 119, 238, 29, 233, 29, 222, 33, 43, 119, 211, 242, 220, + 94, 222, 33, 1, 252, 170, 220, 94, 222, 33, 1, 250, 7, 220, 94, 222, 33, + 1, 240, 47, 220, 94, 222, 33, 1, 246, 110, 220, 94, 222, 33, 1, 239, 71, + 220, 94, 222, 33, 1, 207, 58, 220, 94, 222, 33, 1, 205, 96, 220, 94, 222, + 33, 1, 239, 27, 220, 94, 222, 33, 1, 205, 235, 220, 94, 222, 33, 1, 232, + 17, 220, 94, 222, 33, 1, 230, 97, 220, 94, 222, 33, 1, 227, 89, 220, 94, + 222, 33, 1, 223, 173, 220, 94, 222, 33, 1, 217, 157, 220, 94, 222, 33, 1, + 221, 174, 220, 94, 222, 33, 1, 217, 189, 220, 94, 222, 33, 1, 215, 171, + 220, 94, 222, 33, 1, 212, 145, 220, 94, 222, 33, 217, 77, 83, 220, 94, + 222, 33, 201, 217, 77, 83, 220, 94, 222, 33, 241, 125, 177, 2, 247, 59, + 220, 94, 222, 33, 241, 125, 177, 2, 245, 23, 220, 94, 222, 33, 43, 102, + 220, 94, 222, 33, 43, 105, 220, 94, 222, 33, 43, 142, 220, 94, 222, 33, + 43, 139, 220, 94, 222, 33, 43, 212, 98, 220, 94, 222, 33, 43, 210, 123, + 220, 94, 222, 33, 43, 119, 238, 29, 44, 210, 147, 1, 222, 113, 62, 44, + 210, 147, 1, 206, 40, 62, 44, 210, 147, 1, 206, 40, 252, 248, 44, 210, + 147, 1, 222, 113, 74, 44, 210, 147, 1, 206, 40, 74, 44, 210, 147, 1, 206, + 40, 75, 44, 210, 147, 1, 222, 113, 76, 44, 210, 147, 1, 222, 113, 222, + 206, 44, 210, 147, 1, 206, 40, 222, 206, 44, 210, 147, 1, 222, 113, 253, + 115, 44, 210, 147, 1, 206, 40, 253, 115, 44, 210, 147, 1, 222, 113, 252, + 247, 44, 210, 147, 1, 206, 40, 252, 247, 44, 210, 147, 1, 222, 113, 252, + 220, 44, 210, 147, 1, 206, 40, 252, 220, 44, 210, 147, 1, 222, 113, 252, + 242, 44, 210, 147, 1, 206, 40, 252, 242, 44, 210, 147, 1, 222, 113, 253, + 5, 44, 210, 147, 1, 206, 40, 253, 5, 44, 210, 147, 1, 222, 113, 252, 246, + 44, 210, 147, 1, 222, 113, 242, 145, 44, 210, 147, 1, 206, 40, 242, 145, + 44, 210, 147, 1, 222, 113, 251, 159, 44, 210, 147, 1, 206, 40, 251, 159, + 44, 210, 147, 1, 222, 113, 252, 229, 44, 210, 147, 1, 206, 40, 252, 229, + 44, 210, 147, 1, 222, 113, 252, 240, 44, 210, 147, 1, 206, 40, 252, 240, + 44, 210, 147, 1, 222, 113, 222, 205, 44, 210, 147, 1, 206, 40, 222, 205, + 44, 210, 147, 1, 222, 113, 252, 181, 44, 210, 147, 1, 206, 40, 252, 181, + 44, 210, 147, 1, 222, 113, 252, 239, 44, 210, 147, 1, 222, 113, 243, 52, + 44, 210, 147, 1, 222, 113, 243, 50, 44, 210, 147, 1, 222, 113, 252, 122, + 44, 210, 147, 1, 222, 113, 252, 237, 44, 210, 147, 1, 206, 40, 252, 237, + 44, 210, 147, 1, 222, 113, 243, 20, 44, 210, 147, 1, 206, 40, 243, 20, + 44, 210, 147, 1, 222, 113, 243, 38, 44, 210, 147, 1, 206, 40, 243, 38, + 44, 210, 147, 1, 222, 113, 243, 7, 44, 210, 147, 1, 206, 40, 243, 7, 44, + 210, 147, 1, 206, 40, 252, 114, 44, 210, 147, 1, 222, 113, 243, 28, 44, + 210, 147, 1, 206, 40, 252, 236, 44, 210, 147, 1, 222, 113, 242, 253, 44, + 210, 147, 1, 222, 113, 222, 143, 44, 210, 147, 1, 222, 113, 237, 183, 44, + 210, 147, 1, 222, 113, 243, 110, 44, 210, 147, 1, 206, 40, 243, 110, 44, + 210, 147, 1, 222, 113, 252, 41, 44, 210, 147, 1, 206, 40, 252, 41, 44, + 210, 147, 1, 222, 113, 232, 245, 44, 210, 147, 1, 206, 40, 232, 245, 44, + 210, 147, 1, 222, 113, 222, 124, 44, 210, 147, 1, 206, 40, 222, 124, 44, + 210, 147, 1, 222, 113, 252, 37, 44, 210, 147, 1, 206, 40, 252, 37, 44, + 210, 147, 1, 222, 113, 252, 235, 44, 210, 147, 1, 222, 113, 251, 231, 44, + 210, 147, 1, 222, 113, 252, 233, 44, 210, 147, 1, 222, 113, 251, 225, 44, + 210, 147, 1, 206, 40, 251, 225, 44, 210, 147, 1, 222, 113, 242, 215, 44, + 210, 147, 1, 206, 40, 242, 215, 44, 210, 147, 1, 222, 113, 251, 199, 44, + 210, 147, 1, 206, 40, 251, 199, 44, 210, 147, 1, 222, 113, 252, 230, 44, + 210, 147, 1, 206, 40, 252, 230, 44, 210, 147, 1, 222, 113, 222, 103, 44, + 210, 147, 1, 222, 113, 250, 113, 218, 36, 18, 102, 218, 36, 18, 105, 218, + 36, 18, 142, 218, 36, 18, 139, 218, 36, 18, 168, 218, 36, 18, 184, 218, + 36, 18, 195, 218, 36, 18, 193, 218, 36, 18, 200, 218, 36, 43, 212, 98, + 218, 36, 43, 210, 123, 218, 36, 43, 212, 3, 218, 36, 43, 241, 130, 218, + 36, 43, 241, 243, 218, 36, 43, 214, 252, 218, 36, 43, 216, 17, 218, 36, + 43, 243, 79, 218, 36, 43, 224, 190, 218, 36, 43, 119, 238, 29, 218, 36, + 43, 118, 238, 29, 218, 36, 43, 129, 238, 29, 218, 36, 43, 241, 125, 238, + 29, 218, 36, 43, 241, 204, 238, 29, 218, 36, 43, 215, 10, 238, 29, 218, + 36, 43, 216, 23, 238, 29, 218, 36, 43, 243, 88, 238, 29, 218, 36, 43, + 224, 195, 238, 29, 218, 36, 241, 116, 119, 239, 121, 218, 36, 241, 116, + 119, 219, 204, 218, 36, 241, 116, 119, 212, 10, 218, 36, 241, 116, 118, + 212, 7, 136, 3, 248, 217, 136, 3, 252, 73, 136, 3, 208, 183, 136, 3, 232, + 156, 136, 3, 209, 204, 136, 1, 62, 136, 1, 253, 164, 136, 1, 74, 136, 1, + 233, 102, 136, 1, 71, 136, 1, 209, 162, 136, 1, 115, 137, 136, 1, 115, + 218, 90, 136, 1, 115, 149, 136, 1, 115, 229, 173, 136, 1, 75, 136, 1, + 252, 205, 136, 1, 76, 136, 1, 251, 184, 136, 1, 172, 136, 1, 231, 167, + 136, 1, 240, 244, 136, 1, 240, 99, 136, 1, 225, 77, 136, 1, 249, 1, 136, + 1, 248, 110, 136, 1, 232, 200, 136, 1, 232, 170, 136, 1, 223, 144, 136, + 1, 210, 208, 136, 1, 210, 196, 136, 1, 246, 54, 136, 1, 246, 38, 136, 1, + 224, 103, 136, 1, 212, 219, 136, 1, 212, 56, 136, 1, 246, 145, 136, 1, + 245, 192, 136, 1, 199, 136, 1, 179, 136, 1, 221, 93, 136, 1, 250, 183, + 136, 1, 250, 0, 136, 1, 185, 136, 1, 190, 136, 1, 219, 113, 136, 1, 230, + 141, 136, 1, 209, 70, 136, 1, 216, 2, 136, 1, 214, 96, 136, 1, 217, 199, + 136, 1, 155, 136, 1, 229, 172, 136, 1, 44, 40, 229, 163, 136, 1, 44, 40, + 218, 89, 136, 1, 44, 40, 224, 85, 136, 22, 3, 253, 164, 136, 22, 3, 249, + 253, 253, 164, 136, 22, 3, 74, 136, 22, 3, 233, 102, 136, 22, 3, 71, 136, + 22, 3, 209, 162, 136, 22, 3, 115, 137, 136, 22, 3, 115, 218, 90, 136, 22, + 3, 115, 149, 136, 22, 3, 115, 229, 173, 136, 22, 3, 75, 136, 22, 3, 252, + 205, 136, 22, 3, 76, 136, 22, 3, 251, 184, 136, 208, 188, 136, 246, 100, + 136, 50, 246, 100, 136, 220, 72, 245, 23, 136, 220, 72, 50, 245, 23, 136, + 220, 72, 229, 205, 136, 220, 72, 247, 66, 134, 136, 220, 72, 229, 102, + 136, 43, 102, 136, 43, 105, 136, 43, 142, 136, 43, 139, 136, 43, 168, + 136, 43, 184, 136, 43, 195, 136, 43, 193, 136, 43, 200, 136, 43, 212, 98, + 136, 43, 210, 123, 136, 43, 212, 3, 136, 43, 241, 130, 136, 43, 241, 243, + 136, 43, 214, 252, 136, 43, 216, 17, 136, 43, 243, 79, 136, 43, 224, 190, + 136, 43, 119, 238, 29, 136, 43, 119, 211, 242, 136, 18, 205, 85, 136, 18, + 102, 136, 18, 105, 136, 18, 142, 136, 18, 139, 136, 18, 168, 136, 18, + 184, 136, 18, 195, 136, 18, 193, 136, 18, 200, 136, 43, 232, 117, 232, + 38, 3, 248, 217, 232, 38, 3, 252, 73, 232, 38, 3, 208, 183, 232, 38, 1, + 62, 232, 38, 1, 253, 164, 232, 38, 1, 74, 232, 38, 1, 233, 102, 232, 38, + 1, 71, 232, 38, 1, 209, 162, 232, 38, 1, 75, 232, 38, 1, 252, 205, 232, + 38, 1, 76, 232, 38, 1, 251, 184, 232, 38, 1, 172, 232, 38, 1, 231, 167, + 232, 38, 1, 240, 244, 232, 38, 1, 240, 99, 232, 38, 1, 225, 77, 232, 38, + 1, 249, 1, 232, 38, 1, 248, 110, 232, 38, 1, 232, 200, 232, 38, 1, 232, + 170, 232, 38, 1, 223, 144, 232, 38, 1, 210, 208, 232, 38, 1, 210, 196, + 232, 38, 1, 246, 54, 232, 38, 1, 246, 43, 232, 38, 1, 246, 38, 232, 38, + 1, 218, 212, 232, 38, 1, 224, 103, 232, 38, 1, 212, 219, 232, 38, 1, 212, + 56, 232, 38, 1, 246, 145, 232, 38, 1, 245, 192, 232, 38, 1, 199, 232, 38, + 1, 179, 232, 38, 1, 221, 93, 232, 38, 1, 250, 183, 232, 38, 1, 250, 0, + 232, 38, 1, 185, 232, 38, 1, 190, 232, 38, 1, 219, 113, 232, 38, 1, 230, + 141, 232, 38, 1, 209, 70, 232, 38, 1, 216, 2, 232, 38, 1, 214, 96, 232, + 38, 1, 217, 199, 232, 38, 1, 155, 232, 38, 22, 3, 253, 164, 232, 38, 22, + 3, 74, 232, 38, 22, 3, 233, 102, 232, 38, 22, 3, 71, 232, 38, 22, 3, 209, + 162, 232, 38, 22, 3, 75, 232, 38, 22, 3, 252, 205, 232, 38, 22, 3, 76, + 232, 38, 22, 3, 251, 184, 232, 38, 3, 208, 188, 232, 38, 3, 223, 184, + 232, 38, 253, 29, 53, 232, 38, 243, 10, 53, 232, 38, 43, 53, 232, 38, + 217, 77, 83, 232, 38, 50, 217, 77, 83, 232, 38, 246, 100, 232, 38, 50, + 246, 100, 214, 170, 214, 178, 1, 217, 182, 214, 170, 214, 178, 1, 212, + 194, 214, 170, 214, 178, 1, 250, 158, 214, 170, 214, 178, 1, 248, 246, + 214, 170, 214, 178, 1, 246, 126, 214, 170, 214, 178, 1, 240, 229, 214, + 170, 214, 178, 1, 227, 247, 214, 170, 214, 178, 1, 225, 74, 214, 170, + 214, 178, 1, 230, 117, 214, 170, 214, 178, 1, 225, 219, 214, 170, 214, + 178, 1, 209, 66, 214, 170, 214, 178, 1, 222, 34, 214, 170, 214, 178, 1, + 206, 90, 214, 170, 214, 178, 1, 219, 92, 214, 170, 214, 178, 1, 239, 132, + 214, 170, 214, 178, 1, 232, 43, 214, 170, 214, 178, 1, 232, 194, 214, + 170, 214, 178, 1, 223, 141, 214, 170, 214, 178, 1, 252, 213, 214, 170, + 214, 178, 1, 243, 102, 214, 170, 214, 178, 1, 233, 103, 214, 170, 214, + 178, 1, 209, 253, 214, 170, 214, 178, 1, 222, 194, 214, 170, 214, 178, 1, + 243, 92, 214, 170, 214, 178, 1, 228, 4, 214, 170, 214, 178, 18, 205, 85, + 214, 170, 214, 178, 18, 102, 214, 170, 214, 178, 18, 105, 214, 170, 214, + 178, 18, 142, 214, 170, 214, 178, 18, 139, 214, 170, 214, 178, 18, 168, + 214, 170, 214, 178, 18, 184, 214, 170, 214, 178, 18, 195, 214, 170, 214, + 178, 18, 193, 214, 170, 214, 178, 18, 200, 248, 104, 3, 248, 217, 248, + 104, 3, 252, 73, 248, 104, 3, 208, 183, 248, 104, 1, 253, 164, 248, 104, + 1, 74, 248, 104, 1, 71, 248, 104, 1, 75, 248, 104, 1, 232, 63, 248, 104, + 1, 231, 166, 248, 104, 1, 240, 241, 248, 104, 1, 240, 98, 248, 104, 1, + 225, 76, 248, 104, 1, 249, 0, 248, 104, 1, 248, 109, 248, 104, 1, 232, + 199, 248, 104, 1, 232, 169, 248, 104, 1, 223, 143, 248, 104, 1, 210, 207, + 248, 104, 1, 210, 195, 248, 104, 1, 246, 53, 248, 104, 1, 246, 37, 248, + 104, 1, 224, 102, 248, 104, 1, 212, 215, 248, 104, 1, 212, 55, 248, 104, + 1, 246, 144, 248, 104, 1, 245, 191, 248, 104, 1, 225, 232, 248, 104, 1, + 222, 51, 248, 104, 1, 221, 92, 248, 104, 1, 250, 181, 248, 104, 1, 249, + 255, 248, 104, 1, 228, 18, 248, 104, 1, 205, 167, 248, 104, 1, 206, 109, + 248, 104, 1, 219, 109, 248, 104, 1, 230, 140, 248, 104, 1, 207, 95, 248, + 104, 1, 217, 196, 248, 104, 1, 239, 141, 248, 104, 22, 3, 62, 248, 104, + 22, 3, 74, 248, 104, 22, 3, 233, 102, 248, 104, 22, 3, 71, 248, 104, 22, + 3, 209, 162, 248, 104, 22, 3, 75, 248, 104, 22, 3, 252, 205, 248, 104, + 22, 3, 76, 248, 104, 22, 3, 251, 184, 248, 104, 22, 3, 222, 191, 248, + 104, 148, 83, 248, 104, 251, 185, 83, 248, 104, 208, 188, 248, 104, 228, + 16, 248, 104, 18, 205, 85, 248, 104, 18, 102, 248, 104, 18, 105, 248, + 104, 18, 142, 248, 104, 18, 139, 248, 104, 18, 168, 248, 104, 18, 184, + 248, 104, 18, 195, 248, 104, 18, 193, 248, 104, 18, 200, 248, 104, 217, + 77, 83, 248, 104, 246, 100, 248, 104, 50, 246, 100, 248, 104, 219, 196, + 83, 227, 245, 1, 62, 227, 245, 1, 74, 227, 245, 1, 71, 227, 245, 1, 75, + 227, 245, 1, 76, 227, 245, 1, 172, 227, 245, 1, 231, 167, 227, 245, 1, + 240, 244, 227, 245, 1, 240, 99, 227, 245, 1, 249, 1, 227, 245, 1, 248, + 110, 227, 245, 1, 232, 200, 227, 245, 1, 232, 170, 227, 245, 1, 223, 144, + 227, 245, 1, 210, 208, 227, 245, 1, 210, 196, 227, 245, 1, 246, 54, 227, + 245, 1, 246, 38, 227, 245, 1, 224, 103, 227, 245, 1, 212, 219, 227, 245, + 1, 212, 56, 227, 245, 1, 246, 145, 227, 245, 1, 245, 192, 227, 245, 1, + 199, 227, 245, 1, 179, 227, 245, 1, 221, 93, 227, 245, 1, 250, 183, 227, + 245, 1, 250, 0, 227, 245, 1, 185, 227, 245, 1, 219, 113, 227, 245, 1, + 230, 141, 227, 245, 1, 209, 70, 227, 245, 1, 217, 199, 227, 245, 1, 155, + 227, 245, 1, 218, 89, 227, 245, 3, 223, 184, 227, 245, 253, 29, 53, 227, + 245, 217, 77, 83, 227, 245, 28, 215, 123, 196, 3, 248, 217, 196, 3, 252, + 73, 196, 3, 208, 183, 196, 1, 62, 196, 1, 253, 164, 196, 1, 74, 196, 1, + 233, 102, 196, 1, 71, 196, 1, 209, 162, 196, 1, 115, 137, 196, 1, 115, + 218, 90, 196, 1, 115, 149, 196, 1, 115, 229, 173, 196, 1, 75, 196, 1, + 252, 205, 196, 1, 76, 196, 1, 251, 184, 196, 1, 172, 196, 1, 231, 167, + 196, 1, 240, 244, 196, 1, 240, 99, 196, 1, 225, 77, 196, 1, 249, 1, 196, + 1, 248, 110, 196, 1, 232, 200, 196, 1, 232, 170, 196, 1, 223, 144, 196, + 1, 210, 208, 196, 1, 210, 196, 196, 1, 246, 54, 196, 1, 246, 38, 196, 1, + 224, 103, 196, 1, 212, 219, 196, 1, 212, 56, 196, 1, 246, 145, 196, 1, + 245, 192, 196, 1, 199, 196, 1, 179, 196, 1, 221, 93, 196, 1, 250, 183, + 196, 1, 250, 0, 196, 1, 185, 196, 1, 190, 196, 1, 219, 113, 196, 1, 230, + 141, 196, 1, 229, 172, 196, 1, 209, 70, 196, 1, 216, 2, 196, 1, 214, 96, + 196, 1, 217, 199, 196, 1, 155, 196, 22, 3, 253, 164, 196, 22, 3, 74, 196, + 22, 3, 233, 102, 196, 22, 3, 71, 196, 22, 3, 209, 162, 196, 22, 3, 115, + 137, 196, 22, 3, 115, 218, 90, 196, 22, 3, 115, 149, 196, 22, 3, 115, + 229, 173, 196, 22, 3, 75, 196, 22, 3, 252, 205, 196, 22, 3, 76, 196, 22, + 3, 251, 184, 196, 3, 208, 188, 196, 3, 251, 167, 196, 3, 232, 156, 196, + 3, 209, 204, 196, 222, 173, 196, 246, 100, 196, 50, 246, 100, 196, 253, + 29, 53, 196, 216, 39, 196, 213, 120, 83, 196, 18, 205, 85, 196, 18, 102, + 196, 18, 105, 196, 18, 142, 196, 18, 139, 196, 18, 168, 196, 18, 184, + 196, 18, 195, 196, 18, 193, 196, 18, 200, 196, 243, 74, 132, 252, 19, 18, + 102, 132, 252, 19, 18, 105, 132, 252, 19, 18, 142, 132, 252, 19, 18, 139, + 132, 252, 19, 18, 168, 132, 252, 19, 18, 184, 132, 252, 19, 18, 195, 132, + 252, 19, 18, 193, 132, 252, 19, 18, 200, 132, 252, 19, 43, 212, 98, 132, + 252, 19, 43, 210, 123, 132, 252, 19, 43, 212, 3, 132, 252, 19, 43, 241, + 130, 132, 252, 19, 43, 241, 243, 132, 252, 19, 43, 214, 252, 132, 252, + 19, 43, 216, 17, 132, 252, 19, 43, 243, 79, 132, 252, 19, 43, 224, 190, + 132, 252, 19, 43, 119, 238, 29, 132, 252, 19, 43, 119, 211, 242, 231, + 137, 1, 62, 231, 137, 1, 253, 164, 231, 137, 1, 74, 231, 137, 1, 71, 231, + 137, 1, 75, 231, 137, 1, 252, 205, 231, 137, 1, 76, 231, 137, 1, 251, + 184, 231, 137, 1, 172, 231, 137, 1, 231, 167, 231, 137, 1, 240, 244, 231, + 137, 1, 240, 135, 231, 137, 1, 240, 99, 231, 137, 1, 225, 77, 231, 137, + 1, 249, 1, 231, 137, 1, 248, 110, 231, 137, 1, 232, 200, 231, 137, 1, + 232, 150, 231, 137, 1, 223, 144, 231, 137, 1, 210, 208, 231, 137, 1, 210, + 196, 231, 137, 1, 246, 54, 231, 137, 1, 246, 38, 231, 137, 1, 224, 103, + 231, 137, 1, 212, 219, 231, 137, 1, 212, 56, 231, 137, 1, 246, 145, 231, + 137, 1, 246, 44, 231, 137, 1, 245, 192, 231, 137, 1, 199, 231, 137, 1, + 179, 231, 137, 1, 221, 93, 231, 137, 1, 250, 183, 231, 137, 1, 250, 97, + 231, 137, 1, 250, 0, 231, 137, 1, 185, 231, 137, 1, 190, 231, 137, 1, + 219, 113, 231, 137, 1, 230, 141, 231, 137, 1, 209, 70, 231, 137, 1, 217, + 199, 231, 137, 1, 155, 231, 137, 1, 229, 172, 231, 137, 22, 3, 253, 164, + 231, 137, 22, 3, 74, 231, 137, 22, 3, 233, 102, 231, 137, 22, 3, 71, 231, + 137, 22, 3, 75, 231, 137, 22, 3, 252, 205, 231, 137, 22, 3, 76, 231, 137, + 22, 3, 251, 184, 231, 137, 3, 252, 73, 231, 137, 3, 208, 188, 231, 137, + 3, 223, 184, 231, 137, 3, 215, 249, 231, 137, 246, 100, 231, 137, 50, + 246, 100, 231, 137, 206, 232, 216, 39, 231, 137, 217, 77, 83, 231, 137, + 50, 217, 77, 83, 231, 137, 253, 29, 53, 231, 129, 1, 62, 231, 129, 1, + 253, 164, 231, 129, 1, 74, 231, 129, 1, 233, 102, 231, 129, 1, 71, 231, + 129, 1, 209, 162, 231, 129, 1, 75, 231, 129, 1, 252, 205, 231, 129, 1, + 76, 231, 129, 1, 251, 184, 231, 129, 1, 172, 231, 129, 1, 231, 167, 231, + 129, 1, 240, 244, 231, 129, 1, 240, 135, 231, 129, 1, 240, 99, 231, 129, + 1, 225, 77, 231, 129, 1, 249, 1, 231, 129, 1, 248, 110, 231, 129, 1, 232, + 200, 231, 129, 1, 232, 150, 231, 129, 1, 232, 170, 231, 129, 1, 223, 144, + 231, 129, 1, 210, 208, 231, 129, 1, 210, 196, 231, 129, 1, 246, 54, 231, + 129, 1, 246, 44, 231, 129, 1, 218, 89, 231, 129, 1, 246, 38, 231, 129, 1, + 224, 103, 231, 129, 1, 212, 219, 231, 129, 1, 212, 56, 231, 129, 1, 246, + 145, 231, 129, 1, 245, 192, 231, 129, 1, 199, 231, 129, 1, 179, 231, 129, + 1, 221, 93, 231, 129, 1, 250, 183, 231, 129, 1, 250, 97, 231, 129, 1, + 250, 0, 231, 129, 1, 185, 231, 129, 1, 190, 231, 129, 1, 219, 113, 231, + 129, 1, 230, 141, 231, 129, 1, 209, 70, 231, 129, 1, 216, 2, 231, 129, 1, + 217, 199, 231, 129, 1, 155, 231, 129, 3, 252, 73, 231, 129, 22, 3, 253, + 164, 231, 129, 22, 3, 74, 231, 129, 22, 3, 233, 102, 231, 129, 22, 3, 71, + 231, 129, 22, 3, 209, 162, 231, 129, 22, 3, 75, 231, 129, 22, 3, 252, + 205, 231, 129, 22, 3, 76, 231, 129, 22, 3, 251, 184, 231, 129, 3, 223, + 184, 231, 129, 3, 208, 188, 231, 129, 18, 205, 85, 231, 129, 18, 102, + 231, 129, 18, 105, 231, 129, 18, 142, 231, 129, 18, 139, 231, 129, 18, + 168, 231, 129, 18, 184, 231, 129, 18, 195, 231, 129, 18, 193, 231, 129, + 18, 200, 204, 204, 3, 248, 217, 204, 204, 3, 252, 73, 204, 204, 3, 208, + 183, 204, 204, 1, 62, 204, 204, 1, 253, 164, 204, 204, 1, 74, 204, 204, + 1, 233, 102, 204, 204, 1, 71, 204, 204, 1, 209, 162, 204, 204, 1, 115, + 137, 204, 204, 1, 115, 149, 204, 204, 1, 243, 104, 204, 204, 1, 252, 205, + 204, 204, 1, 222, 152, 204, 204, 1, 251, 184, 204, 204, 1, 172, 204, 204, + 1, 231, 167, 204, 204, 1, 240, 244, 204, 204, 1, 240, 99, 204, 204, 1, + 225, 77, 204, 204, 1, 249, 1, 204, 204, 1, 248, 110, 204, 204, 1, 232, + 200, 204, 204, 1, 232, 170, 204, 204, 1, 223, 144, 204, 204, 1, 210, 208, + 204, 204, 1, 210, 196, 204, 204, 1, 246, 54, 204, 204, 1, 246, 38, 204, + 204, 1, 224, 103, 204, 204, 1, 212, 219, 204, 204, 1, 212, 56, 204, 204, + 1, 246, 145, 204, 204, 1, 245, 192, 204, 204, 1, 199, 204, 204, 1, 179, + 204, 204, 1, 221, 93, 204, 204, 1, 250, 183, 204, 204, 1, 250, 0, 204, + 204, 1, 185, 204, 204, 1, 190, 204, 204, 1, 219, 113, 204, 204, 1, 230, + 141, 204, 204, 1, 229, 172, 204, 204, 1, 209, 70, 204, 204, 1, 216, 2, + 204, 204, 1, 214, 96, 204, 204, 1, 217, 199, 204, 204, 1, 155, 204, 204, + 3, 223, 184, 204, 204, 3, 251, 167, 204, 204, 22, 3, 253, 164, 204, 204, + 22, 3, 74, 204, 204, 22, 3, 233, 102, 204, 204, 22, 3, 71, 204, 204, 22, + 3, 209, 162, 204, 204, 22, 3, 115, 137, 204, 204, 22, 3, 115, 218, 90, + 204, 204, 22, 3, 243, 104, 204, 204, 22, 3, 252, 205, 204, 204, 22, 3, + 222, 152, 204, 204, 22, 3, 251, 184, 204, 204, 3, 208, 188, 204, 204, + 251, 185, 230, 20, 83, 204, 204, 3, 220, 216, 204, 204, 1, 209, 36, 252, + 73, 204, 204, 1, 209, 36, 50, 252, 73, 204, 204, 1, 115, 218, 90, 204, + 204, 1, 115, 229, 173, 204, 204, 22, 3, 115, 149, 204, 204, 22, 3, 115, + 229, 173, 36, 204, 204, 18, 205, 85, 36, 204, 204, 18, 102, 36, 204, 204, + 18, 105, 36, 204, 204, 18, 142, 36, 204, 204, 18, 139, 36, 204, 204, 18, + 168, 36, 204, 204, 18, 184, 36, 204, 204, 1, 62, 36, 204, 204, 1, 172, + 36, 204, 204, 1, 199, 36, 204, 204, 1, 208, 214, 36, 204, 204, 1, 179, + 211, 160, 252, 102, 211, 160, 1, 62, 211, 160, 1, 253, 164, 211, 160, 1, + 74, 211, 160, 1, 233, 102, 211, 160, 1, 71, 211, 160, 1, 209, 162, 211, + 160, 1, 115, 137, 211, 160, 1, 115, 218, 90, 211, 160, 1, 115, 149, 211, + 160, 1, 115, 229, 173, 211, 160, 1, 75, 211, 160, 1, 252, 205, 211, 160, + 1, 76, 211, 160, 1, 251, 184, 211, 160, 1, 172, 211, 160, 1, 231, 167, + 211, 160, 1, 240, 244, 211, 160, 1, 240, 99, 211, 160, 1, 225, 77, 211, + 160, 1, 249, 1, 211, 160, 1, 248, 110, 211, 160, 1, 232, 200, 211, 160, + 1, 232, 170, 211, 160, 1, 223, 144, 211, 160, 1, 210, 208, 211, 160, 1, + 210, 196, 211, 160, 1, 246, 54, 211, 160, 1, 246, 38, 211, 160, 1, 224, + 103, 211, 160, 1, 212, 219, 211, 160, 1, 212, 56, 211, 160, 1, 246, 145, + 211, 160, 1, 245, 192, 211, 160, 1, 199, 211, 160, 1, 179, 211, 160, 1, + 221, 93, 211, 160, 1, 250, 183, 211, 160, 1, 250, 0, 211, 160, 1, 185, + 211, 160, 1, 190, 211, 160, 1, 219, 113, 211, 160, 1, 230, 141, 211, 160, + 1, 209, 70, 211, 160, 1, 216, 2, 211, 160, 1, 214, 96, 211, 160, 1, 217, + 199, 211, 160, 1, 155, 211, 160, 22, 3, 253, 164, 211, 160, 22, 3, 74, + 211, 160, 22, 3, 233, 102, 211, 160, 22, 3, 71, 211, 160, 22, 3, 209, + 162, 211, 160, 22, 3, 115, 137, 211, 160, 22, 3, 115, 218, 90, 211, 160, + 22, 3, 115, 149, 211, 160, 22, 3, 115, 229, 173, 211, 160, 22, 3, 75, + 211, 160, 22, 3, 215, 144, 75, 211, 160, 22, 3, 252, 205, 211, 160, 22, + 3, 76, 211, 160, 22, 3, 215, 144, 76, 211, 160, 22, 3, 251, 184, 211, + 160, 3, 248, 217, 211, 160, 3, 252, 73, 211, 160, 3, 208, 183, 211, 160, + 3, 208, 188, 211, 160, 3, 223, 184, 211, 160, 3, 251, 167, 211, 160, 239, + 175, 211, 160, 253, 29, 53, 211, 160, 222, 173, 211, 160, 18, 205, 85, + 211, 160, 18, 102, 211, 160, 18, 105, 211, 160, 18, 142, 211, 160, 18, + 139, 211, 160, 18, 168, 211, 160, 18, 184, 211, 160, 18, 195, 211, 160, + 18, 193, 211, 160, 18, 200, 215, 75, 1, 62, 215, 75, 1, 253, 164, 215, + 75, 1, 74, 215, 75, 1, 233, 102, 215, 75, 1, 71, 215, 75, 1, 209, 162, + 215, 75, 1, 115, 137, 215, 75, 1, 115, 218, 90, 215, 75, 1, 115, 149, + 215, 75, 1, 115, 229, 173, 215, 75, 1, 75, 215, 75, 1, 252, 205, 215, 75, + 1, 76, 215, 75, 1, 251, 184, 215, 75, 1, 172, 215, 75, 1, 231, 167, 215, + 75, 1, 240, 244, 215, 75, 1, 240, 99, 215, 75, 1, 225, 77, 215, 75, 1, + 249, 1, 215, 75, 1, 248, 110, 215, 75, 1, 232, 200, 215, 75, 1, 232, 170, + 215, 75, 1, 223, 144, 215, 75, 1, 210, 208, 215, 75, 1, 210, 196, 215, + 75, 1, 246, 54, 215, 75, 1, 246, 38, 215, 75, 1, 224, 103, 215, 75, 1, + 212, 219, 215, 75, 1, 212, 56, 215, 75, 1, 246, 145, 215, 75, 1, 245, + 192, 215, 75, 1, 199, 215, 75, 1, 179, 215, 75, 1, 221, 93, 215, 75, 1, + 250, 183, 215, 75, 1, 250, 0, 215, 75, 1, 185, 215, 75, 1, 190, 215, 75, + 1, 219, 113, 215, 75, 1, 230, 141, 215, 75, 1, 209, 70, 215, 75, 1, 216, + 2, 215, 75, 1, 214, 96, 215, 75, 1, 217, 199, 215, 75, 1, 155, 215, 75, + 22, 3, 253, 164, 215, 75, 22, 3, 74, 215, 75, 22, 3, 233, 102, 215, 75, + 22, 3, 71, 215, 75, 22, 3, 209, 162, 215, 75, 22, 3, 115, 137, 215, 75, + 22, 3, 115, 218, 90, 215, 75, 22, 3, 75, 215, 75, 22, 3, 252, 205, 215, + 75, 22, 3, 76, 215, 75, 22, 3, 251, 184, 215, 75, 3, 248, 217, 215, 75, + 3, 252, 73, 215, 75, 3, 208, 183, 215, 75, 3, 208, 188, 215, 75, 3, 223, + 184, 215, 75, 3, 215, 74, 215, 75, 246, 100, 215, 75, 50, 246, 100, 215, + 75, 216, 40, 245, 23, 215, 75, 216, 40, 134, 215, 75, 218, 249, 227, 191, + 215, 75, 218, 249, 227, 190, 215, 75, 218, 249, 227, 189, 215, 75, 243, + 34, 73, 212, 61, 83, 226, 173, 1, 62, 226, 173, 1, 253, 164, 226, 173, 1, + 74, 226, 173, 1, 233, 102, 226, 173, 1, 71, 226, 173, 1, 209, 162, 226, + 173, 1, 115, 137, 226, 173, 1, 115, 218, 90, 226, 173, 1, 115, 149, 226, + 173, 1, 115, 229, 173, 226, 173, 1, 75, 226, 173, 1, 252, 205, 226, 173, + 1, 76, 226, 173, 1, 251, 184, 226, 173, 1, 172, 226, 173, 1, 231, 167, + 226, 173, 1, 240, 244, 226, 173, 1, 240, 99, 226, 173, 1, 225, 77, 226, + 173, 1, 249, 1, 226, 173, 1, 248, 110, 226, 173, 1, 232, 200, 226, 173, + 1, 232, 170, 226, 173, 1, 223, 144, 226, 173, 1, 210, 208, 226, 173, 1, + 210, 196, 226, 173, 1, 246, 54, 226, 173, 1, 246, 38, 226, 173, 1, 224, + 103, 226, 173, 1, 212, 219, 226, 173, 1, 212, 56, 226, 173, 1, 246, 145, + 226, 173, 1, 245, 192, 226, 173, 1, 199, 226, 173, 1, 179, 226, 173, 1, + 221, 93, 226, 173, 1, 250, 183, 226, 173, 1, 250, 0, 226, 173, 1, 185, + 226, 173, 1, 190, 226, 173, 1, 219, 113, 226, 173, 1, 230, 141, 226, 173, + 1, 209, 70, 226, 173, 1, 216, 2, 226, 173, 1, 214, 96, 226, 173, 1, 217, + 199, 226, 173, 1, 155, 226, 173, 1, 229, 172, 226, 173, 22, 3, 253, 164, + 226, 173, 22, 3, 74, 226, 173, 22, 3, 233, 102, 226, 173, 22, 3, 71, 226, + 173, 22, 3, 209, 162, 226, 173, 22, 3, 115, 137, 226, 173, 22, 3, 115, + 218, 90, 226, 173, 22, 3, 115, 149, 226, 173, 22, 3, 115, 229, 173, 226, + 173, 22, 3, 75, 226, 173, 22, 3, 252, 205, 226, 173, 22, 3, 76, 226, 173, + 22, 3, 251, 184, 226, 173, 3, 252, 73, 226, 173, 3, 208, 183, 226, 173, + 3, 208, 188, 226, 173, 3, 252, 16, 226, 173, 246, 100, 226, 173, 50, 246, + 100, 226, 173, 253, 29, 53, 226, 173, 3, 238, 18, 226, 173, 18, 205, 85, + 226, 173, 18, 102, 226, 173, 18, 105, 226, 173, 18, 142, 226, 173, 18, + 139, 226, 173, 18, 168, 226, 173, 18, 184, 226, 173, 18, 195, 226, 173, + 18, 193, 226, 173, 18, 200, 212, 183, 1, 62, 212, 183, 1, 253, 164, 212, + 183, 1, 74, 212, 183, 1, 233, 102, 212, 183, 1, 71, 212, 183, 1, 209, + 162, 212, 183, 1, 75, 212, 183, 1, 252, 205, 212, 183, 1, 76, 212, 183, + 1, 251, 184, 212, 183, 1, 172, 212, 183, 1, 231, 167, 212, 183, 1, 240, + 244, 212, 183, 1, 240, 99, 212, 183, 1, 225, 77, 212, 183, 1, 249, 1, + 212, 183, 1, 248, 110, 212, 183, 1, 232, 200, 212, 183, 1, 232, 170, 212, + 183, 1, 223, 144, 212, 183, 1, 210, 208, 212, 183, 1, 210, 196, 212, 183, + 1, 246, 54, 212, 183, 1, 246, 38, 212, 183, 1, 224, 103, 212, 183, 1, + 212, 219, 212, 183, 1, 212, 56, 212, 183, 1, 246, 145, 212, 183, 1, 245, + 192, 212, 183, 1, 199, 212, 183, 1, 179, 212, 183, 1, 221, 93, 212, 183, + 1, 250, 183, 212, 183, 1, 250, 0, 212, 183, 1, 185, 212, 183, 1, 190, + 212, 183, 1, 219, 113, 212, 183, 1, 230, 141, 212, 183, 1, 209, 70, 212, + 183, 1, 216, 2, 212, 183, 1, 217, 199, 212, 183, 1, 155, 212, 183, 1, + 218, 89, 212, 183, 3, 252, 73, 212, 183, 3, 208, 183, 212, 183, 22, 3, + 253, 164, 212, 183, 22, 3, 74, 212, 183, 22, 3, 233, 102, 212, 183, 22, + 3, 71, 212, 183, 22, 3, 209, 162, 212, 183, 22, 3, 75, 212, 183, 22, 3, + 252, 205, 212, 183, 22, 3, 76, 212, 183, 22, 3, 251, 184, 212, 183, 3, + 208, 188, 212, 183, 3, 223, 184, 212, 183, 18, 205, 85, 212, 183, 18, + 102, 212, 183, 18, 105, 212, 183, 18, 142, 212, 183, 18, 139, 212, 183, + 18, 168, 212, 183, 18, 184, 212, 183, 18, 195, 212, 183, 18, 193, 212, + 183, 18, 200, 202, 197, 6, 1, 225, 76, 202, 197, 6, 1, 62, 202, 197, 6, + 1, 207, 20, 202, 197, 6, 1, 205, 213, 202, 197, 6, 1, 190, 202, 197, 6, + 1, 205, 247, 202, 197, 6, 1, 233, 102, 202, 197, 6, 1, 209, 162, 202, + 197, 6, 1, 75, 202, 197, 6, 1, 76, 202, 197, 6, 1, 252, 114, 202, 197, 6, + 1, 240, 244, 202, 197, 6, 1, 231, 53, 202, 197, 6, 1, 243, 7, 202, 197, + 6, 1, 205, 197, 202, 197, 6, 1, 210, 10, 202, 197, 6, 1, 243, 25, 202, + 197, 6, 1, 222, 209, 202, 197, 6, 1, 210, 203, 202, 197, 6, 1, 223, 170, + 202, 197, 6, 1, 246, 145, 202, 197, 6, 1, 251, 199, 202, 197, 6, 1, 252, + 136, 202, 197, 6, 1, 249, 101, 202, 197, 6, 1, 220, 82, 202, 197, 6, 1, + 238, 241, 202, 197, 6, 1, 238, 138, 202, 197, 6, 1, 238, 67, 202, 197, 6, + 1, 239, 95, 202, 197, 6, 1, 214, 48, 202, 197, 6, 1, 215, 61, 202, 197, + 6, 1, 208, 174, 202, 197, 5, 1, 225, 76, 202, 197, 5, 1, 62, 202, 197, 5, + 1, 207, 20, 202, 197, 5, 1, 205, 213, 202, 197, 5, 1, 190, 202, 197, 5, + 1, 205, 247, 202, 197, 5, 1, 233, 102, 202, 197, 5, 1, 209, 162, 202, + 197, 5, 1, 75, 202, 197, 5, 1, 76, 202, 197, 5, 1, 252, 114, 202, 197, 5, + 1, 240, 244, 202, 197, 5, 1, 231, 53, 202, 197, 5, 1, 243, 7, 202, 197, + 5, 1, 205, 197, 202, 197, 5, 1, 210, 10, 202, 197, 5, 1, 243, 25, 202, + 197, 5, 1, 222, 209, 202, 197, 5, 1, 210, 203, 202, 197, 5, 1, 223, 170, + 202, 197, 5, 1, 246, 145, 202, 197, 5, 1, 251, 199, 202, 197, 5, 1, 252, + 136, 202, 197, 5, 1, 249, 101, 202, 197, 5, 1, 220, 82, 202, 197, 5, 1, + 238, 241, 202, 197, 5, 1, 238, 138, 202, 197, 5, 1, 238, 67, 202, 197, 5, + 1, 239, 95, 202, 197, 5, 1, 214, 48, 202, 197, 5, 1, 215, 61, 202, 197, + 5, 1, 208, 174, 202, 197, 18, 205, 85, 202, 197, 18, 102, 202, 197, 18, + 105, 202, 197, 18, 142, 202, 197, 18, 139, 202, 197, 18, 168, 202, 197, + 18, 184, 202, 197, 18, 195, 202, 197, 18, 193, 202, 197, 18, 200, 202, + 197, 43, 212, 98, 202, 197, 43, 210, 123, 202, 197, 43, 212, 3, 202, 197, + 43, 241, 130, 202, 197, 43, 241, 243, 202, 197, 43, 214, 252, 202, 197, + 43, 216, 17, 202, 197, 43, 243, 79, 202, 197, 43, 224, 190, 202, 197, + 222, 173, 221, 189, 247, 238, 239, 81, 1, 179, 221, 189, 247, 238, 239, + 81, 1, 172, 221, 189, 247, 238, 239, 81, 1, 230, 141, 221, 189, 247, 238, + 239, 81, 1, 185, 221, 189, 247, 238, 239, 81, 1, 246, 145, 221, 189, 247, + 238, 239, 81, 1, 205, 116, 221, 189, 247, 238, 239, 81, 1, 209, 70, 221, + 189, 247, 238, 239, 81, 1, 225, 77, 221, 189, 247, 238, 239, 81, 1, 155, + 221, 189, 247, 238, 239, 81, 1, 240, 244, 221, 189, 247, 238, 239, 81, 1, + 231, 167, 221, 189, 247, 238, 239, 81, 1, 217, 199, 221, 189, 247, 238, + 239, 81, 1, 250, 183, 221, 189, 247, 238, 239, 81, 1, 249, 1, 221, 189, + 247, 238, 239, 81, 1, 212, 219, 221, 189, 247, 238, 239, 81, 1, 212, 56, + 221, 189, 247, 238, 239, 81, 1, 199, 221, 189, 247, 238, 239, 81, 1, 221, + 93, 221, 189, 247, 238, 239, 81, 1, 219, 113, 221, 189, 247, 238, 239, + 81, 1, 242, 73, 221, 189, 247, 238, 239, 81, 1, 248, 110, 221, 189, 247, + 238, 239, 81, 1, 62, 221, 189, 247, 238, 239, 81, 1, 75, 221, 189, 247, + 238, 239, 81, 1, 74, 221, 189, 247, 238, 239, 81, 1, 76, 221, 189, 247, + 238, 239, 81, 1, 71, 221, 189, 247, 238, 239, 81, 1, 210, 18, 221, 189, + 247, 238, 239, 81, 1, 237, 190, 221, 189, 247, 238, 239, 81, 1, 42, 222, + 67, 221, 189, 247, 238, 239, 81, 1, 42, 232, 76, 221, 189, 247, 238, 239, + 81, 1, 42, 213, 10, 221, 189, 247, 238, 239, 81, 1, 42, 229, 28, 221, + 189, 247, 238, 239, 81, 1, 42, 226, 33, 221, 189, 247, 238, 239, 81, 1, + 42, 149, 221, 189, 247, 238, 239, 81, 1, 42, 207, 129, 221, 189, 247, + 238, 239, 81, 1, 42, 225, 79, 221, 189, 247, 238, 239, 81, 1, 42, 206, + 123, 221, 189, 247, 238, 239, 81, 218, 142, 135, 229, 125, 221, 189, 247, + 238, 239, 81, 218, 142, 211, 118, 221, 189, 247, 238, 239, 81, 217, 147, + 240, 25, 213, 251, 221, 189, 247, 238, 239, 81, 218, 142, 135, 152, 241, + 230, 221, 189, 247, 238, 239, 81, 218, 142, 135, 241, 230, 221, 189, 247, + 238, 239, 81, 217, 147, 240, 25, 213, 252, 241, 230, 221, 189, 247, 238, + 239, 81, 217, 147, 135, 229, 125, 221, 189, 247, 238, 239, 81, 217, 147, + 211, 118, 221, 189, 247, 238, 239, 81, 217, 147, 135, 152, 241, 230, 221, + 189, 247, 238, 239, 81, 217, 147, 135, 241, 230, 221, 189, 247, 238, 239, + 81, 226, 248, 211, 118, 221, 189, 247, 238, 239, 81, 240, 25, 213, 252, + 209, 52, 221, 189, 247, 238, 239, 81, 226, 248, 135, 152, 241, 230, 221, + 189, 247, 238, 239, 81, 226, 248, 135, 241, 230, 221, 189, 247, 238, 239, + 81, 229, 95, 135, 229, 125, 221, 189, 247, 238, 239, 81, 229, 95, 211, + 118, 221, 189, 247, 238, 239, 81, 240, 25, 213, 251, 221, 189, 247, 238, + 239, 81, 229, 95, 135, 152, 241, 230, 221, 189, 247, 238, 239, 81, 229, + 95, 135, 241, 230, 221, 189, 247, 238, 239, 81, 240, 25, 213, 252, 241, + 230, 14, 3, 62, 14, 3, 32, 29, 62, 14, 3, 32, 29, 250, 167, 14, 3, 32, + 29, 240, 213, 212, 89, 14, 3, 32, 29, 155, 14, 3, 32, 29, 233, 104, 14, + 3, 32, 29, 230, 121, 239, 192, 14, 3, 32, 29, 226, 69, 14, 3, 32, 29, + 217, 185, 14, 3, 254, 166, 14, 3, 253, 115, 14, 3, 253, 116, 29, 251, + 223, 14, 3, 253, 116, 29, 243, 226, 239, 192, 14, 3, 253, 116, 29, 240, + 226, 14, 3, 253, 116, 29, 240, 213, 212, 89, 14, 3, 253, 116, 29, 155, + 14, 3, 253, 116, 29, 233, 105, 239, 192, 14, 3, 253, 116, 29, 233, 78, + 14, 3, 253, 116, 29, 230, 122, 14, 3, 253, 116, 29, 215, 199, 14, 3, 253, + 116, 29, 106, 101, 106, 101, 71, 14, 3, 253, 116, 239, 192, 14, 3, 253, + 32, 14, 3, 253, 33, 29, 250, 150, 14, 3, 253, 33, 29, 240, 213, 212, 89, + 14, 3, 253, 33, 29, 227, 120, 101, 243, 41, 14, 3, 253, 33, 29, 216, 0, + 14, 3, 253, 33, 29, 212, 186, 14, 3, 253, 5, 14, 3, 252, 189, 14, 3, 252, + 190, 29, 242, 230, 14, 3, 252, 190, 29, 215, 161, 101, 240, 35, 14, 3, + 252, 181, 14, 3, 252, 182, 29, 252, 181, 14, 3, 252, 182, 29, 245, 123, + 14, 3, 252, 182, 29, 240, 35, 14, 3, 252, 182, 29, 155, 14, 3, 252, 182, + 29, 232, 50, 14, 3, 252, 182, 29, 231, 123, 14, 3, 252, 182, 29, 215, + 214, 14, 3, 252, 182, 29, 209, 170, 14, 3, 252, 178, 14, 3, 252, 170, 14, + 3, 252, 132, 14, 3, 252, 133, 29, 215, 214, 14, 3, 252, 122, 14, 3, 252, + 123, 131, 252, 122, 14, 3, 252, 123, 129, 211, 175, 14, 3, 252, 123, 101, + 225, 223, 222, 129, 252, 123, 101, 225, 222, 14, 3, 252, 123, 101, 225, + 223, 214, 106, 14, 3, 252, 93, 14, 3, 252, 63, 14, 3, 252, 31, 14, 3, + 252, 32, 29, 230, 210, 14, 3, 252, 3, 14, 3, 251, 230, 14, 3, 251, 225, + 14, 3, 251, 226, 205, 36, 212, 89, 14, 3, 251, 226, 232, 54, 212, 89, 14, + 3, 251, 226, 131, 251, 226, 210, 165, 131, 210, 165, 210, 165, 131, 210, + 165, 221, 236, 14, 3, 251, 226, 131, 251, 226, 131, 251, 225, 14, 3, 251, + 226, 131, 251, 226, 131, 251, 226, 247, 54, 251, 226, 131, 251, 226, 131, + 251, 225, 14, 3, 251, 223, 14, 3, 251, 219, 14, 3, 250, 183, 14, 3, 250, + 167, 14, 3, 250, 162, 14, 3, 250, 157, 14, 3, 250, 151, 14, 3, 250, 152, + 131, 250, 151, 14, 3, 250, 150, 14, 3, 134, 14, 3, 250, 128, 14, 3, 249, + 244, 14, 3, 249, 245, 29, 62, 14, 3, 249, 245, 29, 240, 204, 14, 3, 249, + 245, 29, 233, 105, 239, 192, 14, 3, 249, 101, 14, 3, 249, 102, 131, 249, + 102, 253, 115, 14, 3, 249, 102, 131, 249, 102, 209, 234, 14, 3, 249, 102, + 247, 54, 249, 101, 14, 3, 249, 79, 14, 3, 249, 80, 131, 249, 79, 14, 3, + 249, 68, 14, 3, 249, 67, 14, 3, 246, 145, 14, 3, 246, 136, 14, 3, 246, + 137, 231, 94, 29, 32, 101, 227, 178, 14, 3, 246, 137, 231, 94, 29, 252, + 132, 14, 3, 246, 137, 231, 94, 29, 250, 150, 14, 3, 246, 137, 231, 94, + 29, 249, 244, 14, 3, 246, 137, 231, 94, 29, 240, 244, 14, 3, 246, 137, + 231, 94, 29, 240, 245, 101, 227, 178, 14, 3, 246, 137, 231, 94, 29, 240, + 61, 14, 3, 246, 137, 231, 94, 29, 240, 43, 14, 3, 246, 137, 231, 94, 29, + 239, 202, 14, 3, 246, 137, 231, 94, 29, 155, 14, 3, 246, 137, 231, 94, + 29, 232, 243, 14, 3, 246, 137, 231, 94, 29, 232, 244, 101, 229, 81, 14, + 3, 246, 137, 231, 94, 29, 232, 35, 14, 3, 246, 137, 231, 94, 29, 230, + 141, 14, 3, 246, 137, 231, 94, 29, 229, 81, 14, 3, 246, 137, 231, 94, 29, + 229, 82, 101, 227, 177, 14, 3, 246, 137, 231, 94, 29, 229, 65, 14, 3, + 246, 137, 231, 94, 29, 225, 110, 14, 3, 246, 137, 231, 94, 29, 221, 237, + 101, 221, 236, 14, 3, 246, 137, 231, 94, 29, 215, 80, 14, 3, 246, 137, + 231, 94, 29, 212, 186, 14, 3, 246, 137, 231, 94, 29, 210, 20, 101, 240, + 43, 14, 3, 246, 137, 231, 94, 29, 209, 170, 14, 3, 246, 109, 14, 3, 246, + 88, 14, 3, 246, 87, 14, 3, 246, 86, 14, 3, 245, 168, 14, 3, 245, 150, 14, + 3, 245, 124, 14, 3, 245, 125, 29, 215, 214, 14, 3, 245, 123, 14, 3, 245, + 113, 14, 3, 245, 114, 231, 255, 106, 239, 193, 245, 94, 14, 3, 245, 94, + 14, 3, 243, 237, 14, 3, 243, 238, 131, 243, 237, 14, 3, 243, 238, 239, + 192, 14, 3, 243, 238, 215, 196, 14, 3, 243, 235, 14, 3, 243, 236, 29, + 242, 212, 14, 3, 243, 234, 14, 3, 243, 233, 14, 3, 243, 232, 14, 3, 243, + 231, 14, 3, 243, 227, 14, 3, 243, 225, 14, 3, 243, 226, 239, 192, 14, 3, + 243, 226, 239, 193, 239, 192, 14, 3, 243, 224, 14, 3, 243, 217, 14, 3, + 75, 14, 3, 174, 29, 221, 236, 14, 3, 174, 131, 174, 223, 174, 131, 223, + 173, 14, 3, 243, 131, 14, 3, 243, 132, 29, 32, 101, 239, 144, 101, 246, + 145, 14, 3, 243, 132, 29, 240, 204, 14, 3, 243, 132, 29, 226, 254, 14, 3, + 243, 132, 29, 217, 172, 14, 3, 243, 132, 29, 215, 214, 14, 3, 243, 132, + 29, 71, 14, 3, 243, 106, 14, 3, 243, 95, 14, 3, 243, 68, 14, 3, 243, 41, + 14, 3, 243, 42, 29, 240, 212, 14, 3, 243, 42, 29, 240, 213, 212, 89, 14, + 3, 243, 42, 29, 227, 119, 14, 3, 243, 42, 247, 54, 243, 41, 14, 3, 243, + 42, 222, 129, 243, 41, 14, 3, 243, 42, 214, 106, 14, 3, 242, 232, 14, 3, + 242, 230, 14, 3, 242, 212, 14, 3, 242, 143, 14, 3, 242, 144, 29, 62, 14, + 3, 242, 144, 29, 32, 101, 230, 108, 14, 3, 242, 144, 29, 32, 101, 230, + 109, 29, 230, 108, 14, 3, 242, 144, 29, 252, 122, 14, 3, 242, 144, 29, + 250, 167, 14, 3, 242, 144, 29, 243, 226, 239, 192, 14, 3, 242, 144, 29, + 243, 226, 239, 193, 239, 192, 14, 3, 242, 144, 29, 155, 14, 3, 242, 144, + 29, 239, 144, 239, 192, 14, 3, 242, 144, 29, 233, 105, 239, 192, 14, 3, + 242, 144, 29, 231, 254, 14, 3, 242, 144, 29, 231, 255, 214, 106, 14, 3, + 242, 144, 29, 230, 234, 14, 3, 242, 144, 29, 230, 141, 14, 3, 242, 144, + 29, 230, 109, 29, 230, 108, 14, 3, 242, 144, 29, 229, 235, 14, 3, 242, + 144, 29, 229, 81, 14, 3, 242, 144, 29, 210, 19, 14, 3, 242, 144, 29, 210, + 8, 14, 3, 240, 244, 14, 3, 240, 245, 239, 192, 14, 3, 240, 242, 14, 3, + 240, 243, 29, 32, 101, 246, 146, 101, 155, 14, 3, 240, 243, 29, 32, 101, + 155, 14, 3, 240, 243, 29, 32, 101, 233, 104, 14, 3, 240, 243, 29, 253, + 33, 212, 90, 101, 212, 207, 14, 3, 240, 243, 29, 252, 122, 14, 3, 240, + 243, 29, 251, 225, 14, 3, 240, 243, 29, 251, 224, 101, 240, 226, 14, 3, + 240, 243, 29, 250, 167, 14, 3, 240, 243, 29, 250, 129, 101, 219, 113, 14, + 3, 240, 243, 29, 249, 68, 14, 3, 240, 243, 29, 249, 69, 101, 219, 113, + 14, 3, 240, 243, 29, 246, 145, 14, 3, 240, 243, 29, 245, 168, 14, 3, 240, + 243, 29, 245, 125, 29, 215, 214, 14, 3, 240, 243, 29, 243, 235, 14, 3, + 240, 243, 29, 243, 68, 14, 3, 240, 243, 29, 243, 69, 101, 230, 141, 14, + 3, 240, 243, 29, 243, 41, 14, 3, 240, 243, 29, 243, 42, 29, 240, 213, + 212, 89, 14, 3, 240, 243, 29, 240, 213, 212, 89, 14, 3, 240, 243, 29, + 240, 204, 14, 3, 240, 243, 29, 240, 61, 14, 3, 240, 243, 29, 240, 59, 14, + 3, 240, 243, 29, 240, 60, 101, 62, 14, 3, 240, 243, 29, 240, 44, 101, + 213, 203, 14, 3, 240, 243, 29, 239, 144, 101, 229, 82, 101, 242, 212, 14, + 3, 240, 243, 29, 239, 124, 14, 3, 240, 243, 29, 239, 125, 101, 230, 141, + 14, 3, 240, 243, 29, 239, 12, 101, 229, 235, 14, 3, 240, 243, 29, 238, + 37, 14, 3, 240, 243, 29, 233, 105, 239, 192, 14, 3, 240, 243, 29, 232, + 229, 101, 238, 43, 101, 251, 225, 14, 3, 240, 243, 29, 232, 35, 14, 3, + 240, 243, 29, 231, 254, 14, 3, 240, 243, 29, 231, 117, 14, 3, 240, 243, + 29, 231, 118, 101, 230, 108, 14, 3, 240, 243, 29, 230, 235, 101, 252, + 122, 14, 3, 240, 243, 29, 230, 141, 14, 3, 240, 243, 29, 227, 120, 101, + 243, 41, 14, 3, 240, 243, 29, 226, 254, 14, 3, 240, 243, 29, 223, 173, + 14, 3, 240, 243, 29, 223, 174, 131, 223, 173, 14, 3, 240, 243, 29, 179, + 14, 3, 240, 243, 29, 217, 172, 14, 3, 240, 243, 29, 217, 138, 14, 3, 240, + 243, 29, 215, 214, 14, 3, 240, 243, 29, 215, 215, 101, 210, 149, 14, 3, + 240, 243, 29, 215, 181, 14, 3, 240, 243, 29, 213, 160, 14, 3, 240, 243, + 29, 212, 186, 14, 3, 240, 243, 29, 71, 14, 3, 240, 243, 29, 210, 8, 14, + 3, 240, 243, 29, 210, 9, 101, 243, 237, 14, 3, 240, 243, 131, 240, 242, + 14, 3, 240, 237, 14, 3, 240, 238, 247, 54, 240, 237, 14, 3, 240, 235, 14, + 3, 240, 236, 131, 240, 236, 240, 205, 131, 240, 204, 14, 3, 240, 226, 14, + 3, 240, 227, 240, 236, 131, 240, 236, 240, 205, 131, 240, 204, 14, 3, + 240, 225, 14, 3, 240, 223, 14, 3, 240, 214, 14, 3, 240, 212, 14, 3, 240, + 213, 212, 89, 14, 3, 240, 213, 131, 240, 212, 14, 3, 240, 213, 247, 54, + 240, 212, 14, 3, 240, 204, 14, 3, 240, 203, 14, 3, 240, 198, 14, 3, 240, + 142, 14, 3, 240, 143, 29, 230, 210, 14, 3, 240, 61, 14, 3, 240, 62, 29, + 75, 14, 3, 240, 62, 29, 71, 14, 3, 240, 62, 247, 54, 240, 61, 14, 3, 240, + 59, 14, 3, 240, 60, 131, 240, 59, 14, 3, 240, 60, 247, 54, 240, 59, 14, + 3, 240, 56, 14, 3, 240, 43, 14, 3, 240, 44, 239, 192, 14, 3, 240, 41, 14, + 3, 240, 42, 29, 32, 101, 233, 104, 14, 3, 240, 42, 29, 240, 213, 212, 89, + 14, 3, 240, 42, 29, 233, 104, 14, 3, 240, 42, 29, 229, 82, 101, 233, 104, + 14, 3, 240, 42, 29, 179, 14, 3, 240, 37, 14, 3, 240, 35, 14, 3, 240, 36, + 247, 54, 240, 35, 14, 3, 240, 36, 29, 250, 167, 14, 3, 240, 36, 29, 212, + 186, 14, 3, 240, 36, 212, 89, 14, 3, 239, 213, 14, 3, 239, 214, 247, 54, + 239, 213, 14, 3, 239, 211, 14, 3, 239, 212, 29, 232, 35, 14, 3, 239, 212, + 29, 232, 36, 29, 233, 105, 239, 192, 14, 3, 239, 212, 29, 223, 173, 14, + 3, 239, 212, 29, 217, 173, 101, 210, 164, 14, 3, 239, 212, 239, 192, 14, + 3, 239, 202, 14, 3, 239, 203, 29, 32, 101, 230, 210, 14, 3, 239, 203, 29, + 230, 210, 14, 3, 239, 203, 131, 239, 203, 229, 72, 14, 3, 239, 196, 14, + 3, 239, 194, 14, 3, 239, 195, 29, 215, 214, 14, 3, 239, 186, 14, 3, 239, + 185, 14, 3, 239, 181, 14, 3, 239, 180, 14, 3, 155, 14, 3, 239, 144, 212, + 89, 14, 3, 239, 144, 239, 192, 14, 3, 239, 124, 14, 3, 239, 11, 14, 3, + 239, 12, 29, 251, 225, 14, 3, 239, 12, 29, 251, 223, 14, 3, 239, 12, 29, + 250, 167, 14, 3, 239, 12, 29, 245, 94, 14, 3, 239, 12, 29, 240, 235, 14, + 3, 239, 12, 29, 231, 109, 14, 3, 239, 12, 29, 223, 173, 14, 3, 239, 12, + 29, 215, 214, 14, 3, 239, 12, 29, 71, 14, 3, 238, 42, 14, 3, 238, 37, 14, + 3, 238, 38, 29, 252, 122, 14, 3, 238, 38, 29, 239, 124, 14, 3, 238, 38, + 29, 231, 254, 14, 3, 238, 38, 29, 229, 186, 14, 3, 238, 38, 29, 210, 8, + 14, 3, 238, 34, 14, 3, 74, 14, 3, 237, 225, 62, 14, 3, 237, 185, 14, 3, + 233, 132, 14, 3, 233, 133, 131, 233, 133, 249, 68, 14, 3, 233, 133, 131, + 233, 133, 214, 106, 14, 3, 233, 107, 14, 3, 233, 104, 14, 3, 233, 105, + 245, 150, 14, 3, 233, 105, 218, 208, 14, 3, 233, 105, 131, 233, 105, 215, + 165, 131, 215, 165, 210, 9, 131, 210, 8, 14, 3, 233, 105, 239, 192, 14, + 3, 233, 96, 14, 3, 233, 97, 29, 240, 213, 212, 89, 14, 3, 233, 95, 14, 3, + 233, 85, 14, 3, 233, 86, 29, 212, 186, 14, 3, 233, 86, 247, 54, 233, 85, + 14, 3, 233, 86, 222, 129, 233, 85, 14, 3, 233, 86, 214, 106, 14, 3, 233, + 78, 14, 3, 233, 68, 14, 3, 232, 243, 14, 3, 232, 228, 14, 3, 172, 14, 3, + 232, 66, 29, 62, 14, 3, 232, 66, 29, 253, 5, 14, 3, 232, 66, 29, 253, 6, + 101, 230, 234, 14, 3, 232, 66, 29, 251, 223, 14, 3, 232, 66, 29, 250, + 167, 14, 3, 232, 66, 29, 250, 150, 14, 3, 232, 66, 29, 134, 14, 3, 232, + 66, 29, 249, 244, 14, 3, 232, 66, 29, 242, 230, 14, 3, 232, 66, 29, 242, + 212, 14, 3, 232, 66, 29, 240, 244, 14, 3, 232, 66, 29, 240, 226, 14, 3, + 232, 66, 29, 240, 213, 212, 89, 14, 3, 232, 66, 29, 240, 204, 14, 3, 232, + 66, 29, 240, 205, 101, 216, 1, 101, 62, 14, 3, 232, 66, 29, 240, 61, 14, + 3, 232, 66, 29, 240, 43, 14, 3, 232, 66, 29, 240, 36, 101, 217, 138, 14, + 3, 232, 66, 29, 240, 36, 247, 54, 240, 35, 14, 3, 232, 66, 29, 239, 213, + 14, 3, 232, 66, 29, 239, 185, 14, 3, 232, 66, 29, 233, 104, 14, 3, 232, + 66, 29, 233, 85, 14, 3, 232, 66, 29, 232, 35, 14, 3, 232, 66, 29, 231, + 123, 14, 3, 232, 66, 29, 231, 117, 14, 3, 232, 66, 29, 229, 235, 14, 3, + 232, 66, 29, 229, 81, 14, 3, 232, 66, 29, 227, 119, 14, 3, 232, 66, 29, + 227, 120, 101, 243, 237, 14, 3, 232, 66, 29, 227, 120, 101, 240, 61, 14, + 3, 232, 66, 29, 227, 120, 101, 212, 131, 14, 3, 232, 66, 29, 226, 254, + 14, 3, 232, 66, 29, 226, 255, 101, 223, 168, 14, 3, 232, 66, 29, 225, + 110, 14, 3, 232, 66, 29, 223, 173, 14, 3, 232, 66, 29, 221, 53, 14, 3, + 232, 66, 29, 218, 50, 14, 3, 232, 66, 29, 217, 199, 14, 3, 232, 66, 29, + 217, 138, 14, 3, 232, 66, 29, 216, 2, 14, 3, 232, 66, 29, 215, 214, 14, + 3, 232, 66, 29, 215, 181, 14, 3, 232, 66, 29, 215, 116, 14, 3, 232, 66, + 29, 215, 68, 14, 3, 232, 66, 29, 213, 169, 14, 3, 232, 66, 29, 212, 162, + 14, 3, 232, 66, 29, 71, 14, 3, 232, 66, 29, 210, 19, 14, 3, 232, 66, 29, + 210, 8, 14, 3, 232, 66, 29, 209, 237, 29, 179, 14, 3, 232, 66, 29, 209, + 170, 14, 3, 232, 66, 29, 205, 40, 14, 3, 232, 64, 14, 3, 232, 65, 247, + 54, 232, 64, 14, 3, 232, 55, 14, 3, 232, 52, 14, 3, 232, 50, 14, 3, 232, + 49, 14, 3, 232, 47, 14, 3, 232, 48, 131, 232, 47, 14, 3, 232, 35, 14, 3, + 232, 36, 29, 233, 105, 239, 192, 14, 3, 232, 31, 14, 3, 232, 32, 29, 250, + 167, 14, 3, 232, 32, 247, 54, 232, 31, 14, 3, 232, 29, 14, 3, 232, 28, + 14, 3, 231, 254, 14, 3, 231, 255, 230, 123, 29, 106, 131, 230, 123, 29, + 71, 14, 3, 231, 255, 131, 231, 255, 230, 123, 29, 106, 131, 230, 123, 29, + 71, 14, 3, 231, 194, 14, 3, 231, 123, 14, 3, 231, 124, 29, 250, 167, 14, + 3, 231, 124, 29, 71, 14, 3, 231, 124, 29, 210, 8, 14, 3, 231, 117, 14, 3, + 231, 109, 14, 3, 231, 96, 14, 3, 231, 95, 14, 3, 231, 93, 14, 3, 231, 94, + 131, 231, 93, 14, 3, 230, 236, 14, 3, 230, 237, 131, 239, 12, 29, 251, + 224, 230, 237, 131, 239, 12, 29, 251, 223, 14, 3, 230, 234, 14, 3, 230, + 232, 14, 3, 230, 233, 209, 53, 17, 14, 3, 230, 231, 14, 3, 230, 223, 14, + 3, 230, 224, 239, 192, 14, 3, 230, 222, 14, 3, 230, 210, 14, 3, 230, 211, + 222, 129, 230, 210, 14, 3, 230, 205, 14, 3, 230, 183, 14, 3, 230, 141, + 14, 3, 230, 122, 14, 3, 230, 123, 29, 62, 14, 3, 230, 123, 29, 32, 101, + 246, 146, 101, 155, 14, 3, 230, 123, 29, 32, 101, 240, 204, 14, 3, 230, + 123, 29, 32, 101, 230, 108, 14, 3, 230, 123, 29, 252, 181, 14, 3, 230, + 123, 29, 252, 122, 14, 3, 230, 123, 29, 251, 226, 205, 36, 212, 89, 14, + 3, 230, 123, 29, 250, 167, 14, 3, 230, 123, 29, 249, 244, 14, 3, 230, + 123, 29, 246, 88, 14, 3, 230, 123, 29, 243, 41, 14, 3, 230, 123, 29, 240, + 244, 14, 3, 230, 123, 29, 240, 204, 14, 3, 230, 123, 29, 239, 202, 14, 3, + 230, 123, 29, 239, 203, 101, 239, 202, 14, 3, 230, 123, 29, 155, 14, 3, + 230, 123, 29, 239, 124, 14, 3, 230, 123, 29, 239, 12, 29, 223, 173, 14, + 3, 230, 123, 29, 233, 105, 239, 192, 14, 3, 230, 123, 29, 233, 85, 14, 3, + 230, 123, 29, 233, 86, 101, 155, 14, 3, 230, 123, 29, 233, 86, 101, 229, + 81, 14, 3, 230, 123, 29, 231, 123, 14, 3, 230, 123, 29, 231, 109, 14, 3, + 230, 123, 29, 230, 234, 14, 3, 230, 123, 29, 230, 223, 14, 3, 230, 123, + 29, 230, 224, 101, 239, 12, 101, 62, 14, 3, 230, 123, 29, 230, 122, 14, + 3, 230, 123, 29, 229, 186, 14, 3, 230, 123, 29, 229, 81, 14, 3, 230, 123, + 29, 229, 67, 14, 3, 230, 123, 29, 227, 119, 14, 3, 230, 123, 29, 227, + 120, 101, 243, 41, 14, 3, 230, 123, 29, 226, 69, 14, 3, 230, 123, 29, + 225, 110, 14, 3, 230, 123, 29, 215, 215, 101, 213, 160, 14, 3, 230, 123, + 29, 215, 161, 101, 240, 36, 101, 242, 230, 14, 3, 230, 123, 29, 215, 161, + 101, 240, 36, 212, 89, 14, 3, 230, 123, 29, 215, 114, 14, 3, 230, 123, + 29, 215, 115, 101, 215, 114, 14, 3, 230, 123, 29, 213, 160, 14, 3, 230, + 123, 29, 212, 198, 14, 3, 230, 123, 29, 212, 186, 14, 3, 230, 123, 29, + 212, 132, 101, 32, 101, 213, 204, 101, 199, 14, 3, 230, 123, 29, 71, 14, + 3, 230, 123, 29, 106, 101, 62, 14, 3, 230, 123, 29, 106, 101, 106, 101, + 71, 14, 3, 230, 123, 29, 210, 20, 101, 251, 225, 14, 3, 230, 123, 29, + 210, 8, 14, 3, 230, 123, 29, 209, 170, 14, 3, 230, 123, 214, 106, 14, 3, + 230, 120, 14, 3, 230, 121, 29, 215, 214, 14, 3, 230, 121, 29, 215, 215, + 101, 213, 160, 14, 3, 230, 121, 239, 192, 14, 3, 230, 121, 239, 193, 131, + 230, 121, 239, 193, 215, 214, 14, 3, 230, 116, 14, 3, 230, 108, 14, 3, + 230, 109, 29, 230, 108, 14, 3, 230, 106, 14, 3, 230, 107, 29, 230, 210, + 14, 3, 230, 107, 29, 230, 211, 101, 218, 50, 14, 3, 229, 235, 14, 3, 229, + 218, 14, 3, 229, 208, 14, 3, 229, 186, 14, 3, 229, 81, 14, 3, 229, 82, + 29, 250, 167, 14, 3, 229, 79, 14, 3, 229, 80, 29, 252, 181, 14, 3, 229, + 80, 29, 250, 167, 14, 3, 229, 80, 29, 242, 212, 14, 3, 229, 80, 29, 242, + 213, 212, 89, 14, 3, 229, 80, 29, 240, 213, 212, 89, 14, 3, 229, 80, 29, + 239, 12, 29, 250, 167, 14, 3, 229, 80, 29, 233, 85, 14, 3, 229, 80, 29, + 232, 52, 14, 3, 229, 80, 29, 232, 50, 14, 3, 229, 80, 29, 232, 51, 101, + 251, 225, 14, 3, 229, 80, 29, 231, 123, 14, 3, 229, 80, 29, 230, 142, + 101, 251, 225, 14, 3, 229, 80, 29, 230, 122, 14, 3, 229, 80, 29, 227, + 120, 101, 243, 41, 14, 3, 229, 80, 29, 225, 110, 14, 3, 229, 80, 29, 223, + 217, 14, 3, 229, 80, 29, 215, 81, 101, 251, 225, 14, 3, 229, 80, 29, 215, + 60, 101, 249, 101, 14, 3, 229, 80, 29, 210, 164, 14, 3, 229, 80, 212, 89, + 14, 3, 229, 80, 247, 54, 229, 79, 14, 3, 229, 80, 222, 129, 229, 79, 14, + 3, 229, 80, 214, 106, 14, 3, 229, 80, 215, 196, 14, 3, 229, 78, 14, 3, + 229, 72, 14, 3, 229, 73, 131, 229, 72, 14, 3, 229, 73, 222, 129, 229, 72, + 14, 3, 229, 73, 215, 196, 14, 3, 229, 70, 14, 3, 229, 67, 14, 3, 229, 65, + 14, 3, 229, 66, 131, 229, 65, 14, 3, 229, 66, 131, 229, 66, 240, 205, + 131, 240, 204, 14, 3, 185, 14, 3, 228, 20, 29, 212, 186, 14, 3, 228, 20, + 239, 192, 14, 3, 228, 19, 14, 3, 227, 247, 14, 3, 227, 199, 14, 3, 227, + 178, 14, 3, 227, 177, 14, 3, 227, 119, 14, 3, 227, 71, 14, 3, 226, 254, + 14, 3, 226, 209, 14, 3, 226, 114, 14, 3, 226, 115, 131, 226, 114, 14, 3, + 226, 103, 14, 3, 226, 104, 239, 192, 14, 3, 226, 87, 14, 3, 226, 73, 14, + 3, 226, 69, 14, 3, 226, 70, 29, 62, 14, 3, 226, 70, 29, 230, 210, 14, 3, + 226, 70, 29, 205, 116, 14, 3, 226, 70, 131, 226, 69, 14, 3, 226, 70, 131, + 226, 70, 29, 32, 101, 199, 14, 3, 226, 70, 247, 54, 226, 69, 14, 3, 226, + 67, 14, 3, 226, 68, 29, 62, 14, 3, 226, 68, 29, 32, 101, 245, 168, 14, 3, + 226, 68, 29, 245, 168, 14, 3, 226, 68, 239, 192, 14, 3, 199, 14, 3, 225, + 235, 14, 3, 225, 222, 14, 3, 225, 223, 233, 1, 14, 3, 225, 223, 29, 215, + 117, 212, 89, 14, 3, 225, 223, 222, 129, 225, 222, 14, 3, 225, 221, 14, + 3, 225, 214, 223, 159, 14, 3, 225, 213, 14, 3, 225, 212, 14, 3, 225, 110, + 14, 3, 225, 111, 29, 62, 14, 3, 225, 111, 29, 210, 8, 14, 3, 225, 111, + 215, 196, 14, 3, 224, 230, 14, 3, 224, 231, 29, 75, 14, 3, 224, 229, 14, + 3, 224, 200, 14, 3, 224, 201, 29, 240, 213, 212, 89, 14, 3, 224, 201, 29, + 240, 205, 101, 240, 213, 212, 89, 14, 3, 224, 196, 14, 3, 224, 197, 29, + 252, 122, 14, 3, 224, 197, 29, 251, 225, 14, 3, 224, 197, 29, 251, 226, + 101, 251, 225, 14, 3, 224, 197, 29, 239, 202, 14, 3, 224, 197, 29, 227, + 120, 101, 240, 213, 212, 89, 14, 3, 224, 197, 29, 225, 110, 14, 3, 224, + 197, 29, 223, 173, 14, 3, 224, 197, 29, 215, 214, 14, 3, 224, 197, 29, + 215, 215, 101, 32, 252, 122, 14, 3, 224, 197, 29, 215, 215, 101, 251, + 225, 14, 3, 224, 197, 29, 215, 215, 101, 251, 226, 101, 251, 225, 14, 3, + 224, 197, 29, 210, 20, 101, 251, 225, 14, 3, 224, 197, 29, 209, 170, 14, + 3, 224, 185, 14, 3, 223, 217, 14, 3, 223, 189, 14, 3, 223, 173, 14, 3, + 223, 174, 230, 121, 29, 240, 204, 14, 3, 223, 174, 230, 121, 29, 227, + 178, 14, 3, 223, 174, 230, 121, 29, 217, 172, 14, 3, 223, 174, 230, 121, + 29, 217, 173, 131, 223, 174, 230, 121, 29, 217, 172, 14, 3, 223, 174, + 230, 121, 29, 209, 170, 14, 3, 223, 174, 212, 89, 14, 3, 223, 174, 131, + 223, 173, 14, 3, 223, 174, 247, 54, 223, 173, 14, 3, 223, 174, 247, 54, + 223, 174, 230, 121, 131, 230, 120, 14, 3, 223, 168, 14, 3, 223, 169, 253, + 33, 29, 251, 219, 14, 3, 223, 169, 253, 33, 29, 249, 244, 14, 3, 223, + 169, 253, 33, 29, 243, 233, 14, 3, 223, 169, 253, 33, 29, 239, 202, 14, + 3, 223, 169, 253, 33, 29, 233, 105, 239, 192, 14, 3, 223, 169, 253, 33, + 29, 232, 50, 14, 3, 223, 169, 253, 33, 29, 230, 141, 14, 3, 223, 169, + 253, 33, 29, 225, 110, 14, 3, 223, 169, 253, 33, 29, 215, 57, 14, 3, 223, + 169, 253, 33, 29, 210, 19, 14, 3, 223, 169, 231, 94, 29, 249, 244, 14, 3, + 223, 169, 231, 94, 29, 249, 245, 71, 14, 3, 179, 14, 3, 222, 42, 14, 3, + 222, 6, 14, 3, 221, 236, 14, 3, 221, 107, 14, 3, 221, 53, 14, 3, 221, 54, + 29, 62, 14, 3, 221, 54, 29, 253, 115, 14, 3, 221, 54, 29, 249, 244, 14, + 3, 221, 54, 29, 249, 101, 14, 3, 221, 54, 29, 75, 14, 3, 221, 54, 29, 74, + 14, 3, 221, 54, 29, 237, 185, 14, 3, 221, 54, 29, 71, 14, 3, 221, 54, 29, + 210, 19, 14, 3, 221, 54, 247, 54, 221, 53, 14, 3, 220, 251, 14, 3, 220, + 252, 29, 232, 31, 14, 3, 220, 252, 29, 210, 8, 14, 3, 220, 252, 29, 205, + 116, 14, 3, 220, 252, 222, 129, 220, 251, 14, 3, 219, 113, 14, 3, 219, + 107, 14, 3, 218, 208, 14, 3, 218, 50, 14, 3, 217, 199, 14, 3, 217, 186, + 223, 159, 14, 3, 217, 185, 14, 3, 217, 186, 29, 62, 14, 3, 217, 186, 29, + 243, 237, 14, 3, 217, 186, 29, 243, 235, 14, 3, 217, 186, 29, 155, 14, 3, + 217, 186, 29, 232, 35, 14, 3, 217, 186, 29, 230, 210, 14, 3, 217, 186, + 29, 229, 65, 14, 3, 217, 186, 29, 226, 254, 14, 3, 217, 186, 29, 223, + 173, 14, 3, 217, 186, 29, 217, 172, 14, 3, 217, 186, 29, 215, 181, 14, 3, + 217, 186, 29, 212, 207, 14, 3, 217, 186, 29, 210, 19, 14, 3, 217, 186, + 29, 210, 14, 14, 3, 217, 186, 29, 209, 241, 14, 3, 217, 186, 29, 209, + 194, 14, 3, 217, 186, 29, 209, 170, 14, 3, 217, 186, 131, 217, 185, 14, + 3, 217, 186, 239, 192, 14, 3, 217, 172, 14, 3, 217, 173, 230, 123, 29, + 251, 223, 14, 3, 217, 146, 14, 3, 217, 138, 14, 3, 216, 2, 14, 3, 216, 0, + 14, 3, 216, 1, 29, 62, 14, 3, 216, 1, 29, 250, 167, 14, 3, 216, 1, 29, + 240, 35, 14, 3, 216, 1, 29, 225, 110, 14, 3, 216, 1, 29, 215, 114, 14, 3, + 216, 1, 29, 210, 149, 14, 3, 216, 1, 29, 71, 14, 3, 216, 1, 29, 106, 101, + 62, 14, 3, 215, 255, 14, 3, 215, 253, 14, 3, 215, 230, 14, 3, 215, 214, + 14, 3, 215, 215, 238, 42, 14, 3, 215, 215, 131, 215, 215, 240, 236, 131, + 240, 236, 240, 205, 131, 240, 204, 14, 3, 215, 215, 131, 215, 215, 212, + 208, 131, 212, 208, 240, 205, 131, 240, 204, 14, 3, 215, 207, 14, 3, 215, + 202, 14, 3, 215, 199, 14, 3, 215, 198, 14, 3, 215, 195, 14, 3, 215, 181, + 14, 3, 215, 182, 29, 62, 14, 3, 215, 182, 29, 233, 85, 14, 3, 215, 175, + 14, 3, 215, 176, 29, 62, 14, 3, 215, 176, 29, 250, 151, 14, 3, 215, 176, + 29, 249, 79, 14, 3, 215, 176, 29, 245, 113, 14, 3, 215, 176, 29, 240, + 204, 14, 3, 215, 176, 29, 233, 104, 14, 3, 215, 176, 29, 233, 105, 239, + 192, 14, 3, 215, 176, 29, 230, 205, 14, 3, 215, 176, 29, 229, 67, 14, 3, + 215, 176, 29, 226, 103, 14, 3, 215, 176, 29, 217, 172, 14, 3, 215, 169, + 14, 3, 215, 164, 14, 3, 215, 165, 212, 89, 14, 3, 215, 165, 131, 215, + 165, 249, 69, 131, 249, 68, 14, 3, 215, 160, 14, 3, 215, 116, 14, 3, 215, + 117, 131, 233, 2, 215, 116, 14, 3, 215, 114, 14, 3, 215, 113, 14, 3, 215, + 80, 14, 3, 215, 81, 239, 192, 14, 3, 215, 68, 14, 3, 215, 66, 14, 3, 215, + 67, 131, 215, 67, 215, 114, 14, 3, 215, 59, 14, 3, 215, 57, 14, 3, 213, + 203, 14, 3, 213, 204, 131, 213, 203, 14, 3, 213, 172, 14, 3, 213, 171, + 14, 3, 213, 169, 14, 3, 213, 160, 14, 3, 213, 159, 14, 3, 213, 133, 14, + 3, 213, 132, 14, 3, 212, 219, 14, 3, 212, 220, 251, 209, 14, 3, 212, 220, + 29, 239, 11, 14, 3, 212, 220, 29, 226, 254, 14, 3, 212, 220, 239, 192, + 14, 3, 212, 207, 14, 3, 212, 208, 131, 212, 208, 224, 231, 131, 224, 231, + 245, 95, 131, 245, 94, 14, 3, 212, 208, 214, 106, 14, 3, 212, 198, 14, 3, + 150, 29, 249, 244, 14, 3, 150, 29, 239, 202, 14, 3, 150, 29, 215, 214, + 14, 3, 150, 29, 215, 116, 14, 3, 150, 29, 210, 164, 14, 3, 150, 29, 210, + 8, 14, 3, 212, 186, 14, 3, 212, 162, 14, 3, 212, 131, 14, 3, 212, 132, + 239, 192, 14, 3, 211, 211, 14, 3, 211, 212, 212, 89, 14, 3, 211, 182, 14, + 3, 211, 162, 14, 3, 211, 163, 29, 212, 186, 14, 3, 211, 163, 131, 211, + 162, 14, 3, 211, 163, 131, 211, 163, 240, 236, 131, 240, 236, 240, 205, + 131, 240, 204, 14, 3, 210, 170, 14, 3, 210, 164, 14, 3, 210, 162, 14, 3, + 210, 159, 14, 3, 210, 149, 14, 3, 210, 150, 131, 210, 150, 205, 117, 131, + 205, 116, 14, 3, 71, 14, 3, 106, 239, 202, 14, 3, 106, 106, 71, 14, 3, + 106, 131, 106, 222, 52, 131, 222, 52, 240, 205, 131, 240, 204, 14, 3, + 106, 131, 106, 213, 134, 131, 213, 133, 14, 3, 106, 131, 106, 106, 218, + 224, 131, 106, 218, 223, 14, 3, 210, 19, 14, 3, 210, 14, 14, 3, 210, 8, + 14, 3, 210, 9, 230, 205, 14, 3, 210, 9, 29, 250, 167, 14, 3, 210, 9, 29, + 226, 254, 14, 3, 210, 9, 29, 106, 101, 106, 101, 71, 14, 3, 210, 9, 29, + 106, 101, 106, 101, 106, 239, 192, 14, 3, 210, 9, 239, 192, 14, 3, 210, + 9, 215, 196, 14, 3, 210, 9, 215, 197, 29, 250, 167, 14, 3, 210, 4, 14, 3, + 209, 241, 14, 3, 209, 242, 29, 230, 122, 14, 3, 209, 242, 29, 227, 120, + 101, 246, 145, 14, 3, 209, 242, 29, 216, 0, 14, 3, 209, 242, 29, 71, 14, + 3, 209, 240, 14, 3, 209, 236, 14, 3, 209, 237, 29, 231, 254, 14, 3, 209, + 237, 29, 179, 14, 3, 209, 234, 14, 3, 209, 235, 239, 192, 14, 3, 209, + 194, 14, 3, 209, 195, 247, 54, 209, 194, 14, 3, 209, 195, 215, 196, 14, + 3, 209, 192, 14, 3, 209, 193, 29, 32, 101, 155, 14, 3, 209, 193, 29, 32, + 101, 199, 14, 3, 209, 193, 29, 252, 181, 14, 3, 209, 193, 29, 155, 14, 3, + 209, 193, 29, 223, 173, 14, 3, 209, 193, 29, 210, 19, 14, 3, 209, 193, + 29, 210, 20, 101, 251, 225, 14, 3, 209, 193, 29, 210, 20, 101, 249, 244, + 14, 3, 209, 191, 14, 3, 209, 188, 14, 3, 209, 187, 14, 3, 209, 183, 14, + 3, 209, 184, 29, 62, 14, 3, 209, 184, 29, 251, 219, 14, 3, 209, 184, 29, + 134, 14, 3, 209, 184, 29, 243, 227, 14, 3, 209, 184, 29, 240, 244, 14, 3, + 209, 184, 29, 240, 226, 14, 3, 209, 184, 29, 240, 213, 212, 89, 14, 3, + 209, 184, 29, 240, 204, 14, 3, 209, 184, 29, 239, 213, 14, 3, 209, 184, + 29, 155, 14, 3, 209, 184, 29, 233, 104, 14, 3, 209, 184, 29, 233, 85, 14, + 3, 209, 184, 29, 232, 228, 14, 3, 209, 184, 29, 231, 123, 14, 3, 209, + 184, 29, 229, 65, 14, 3, 209, 184, 29, 226, 209, 14, 3, 209, 184, 29, + 179, 14, 3, 209, 184, 29, 215, 214, 14, 3, 209, 184, 29, 215, 66, 14, 3, + 209, 184, 29, 210, 170, 14, 3, 209, 184, 29, 106, 101, 239, 202, 14, 3, + 209, 184, 29, 210, 8, 14, 3, 209, 184, 29, 209, 181, 14, 3, 209, 181, 14, + 3, 209, 182, 29, 71, 14, 3, 209, 170, 14, 3, 209, 171, 29, 62, 14, 3, + 209, 171, 29, 230, 236, 14, 3, 209, 171, 29, 230, 210, 14, 3, 209, 171, + 29, 212, 186, 14, 3, 209, 166, 14, 3, 209, 169, 14, 3, 209, 167, 14, 3, + 209, 163, 14, 3, 209, 151, 14, 3, 209, 152, 29, 231, 254, 14, 3, 209, + 150, 14, 3, 205, 116, 14, 3, 205, 117, 212, 89, 14, 3, 205, 117, 98, 29, + 230, 210, 14, 3, 205, 113, 14, 3, 205, 106, 14, 3, 205, 92, 14, 3, 205, + 40, 14, 3, 205, 41, 131, 205, 40, 14, 3, 205, 39, 14, 3, 205, 37, 14, 3, + 205, 38, 232, 54, 212, 89, 14, 3, 205, 32, 14, 3, 205, 24, 14, 3, 205, 9, + 14, 3, 205, 7, 14, 3, 205, 8, 29, 62, 14, 3, 205, 6, 14, 3, 205, 5, 14, + 3, 232, 21, 243, 65, 14, 3, 253, 116, 29, 223, 173, 14, 3, 253, 33, 29, + 62, 14, 3, 252, 133, 29, 230, 225, 14, 3, 246, 137, 231, 94, 29, 210, 20, + 101, 227, 178, 14, 3, 246, 135, 14, 3, 245, 95, 101, 215, 116, 14, 3, + 243, 236, 29, 215, 214, 14, 3, 242, 144, 29, 239, 202, 14, 3, 242, 144, + 29, 215, 214, 14, 3, 240, 243, 29, 252, 123, 101, 232, 36, 101, 62, 14, + 3, 240, 243, 29, 251, 223, 14, 3, 240, 169, 14, 3, 240, 51, 14, 3, 238, + 21, 14, 3, 232, 66, 29, 252, 93, 14, 3, 232, 66, 29, 251, 222, 14, 3, + 232, 66, 29, 240, 35, 14, 3, 232, 66, 29, 239, 202, 14, 3, 232, 66, 29, + 239, 12, 29, 251, 223, 14, 3, 232, 66, 29, 229, 65, 14, 3, 232, 66, 29, + 179, 14, 3, 232, 66, 29, 215, 109, 14, 3, 232, 66, 29, 210, 170, 14, 3, + 232, 66, 29, 209, 192, 14, 3, 230, 123, 29, 240, 61, 14, 3, 229, 80, 215, + 197, 29, 250, 167, 14, 3, 229, 80, 29, 242, 213, 101, 230, 108, 14, 3, + 229, 80, 29, 215, 116, 14, 3, 227, 70, 14, 3, 226, 68, 29, 205, 116, 14, + 3, 225, 234, 14, 3, 224, 199, 14, 3, 224, 198, 14, 3, 224, 197, 29, 250, + 151, 14, 3, 224, 197, 29, 240, 61, 14, 3, 223, 190, 218, 97, 224, 191, + 245, 244, 14, 3, 221, 108, 251, 209, 14, 3, 220, 255, 14, 3, 217, 186, + 29, 233, 105, 239, 192, 14, 3, 211, 210, 14, 3, 209, 242, 29, 227, 119, + 14, 133, 3, 118, 251, 225, 14, 133, 3, 129, 251, 225, 14, 133, 3, 241, + 125, 251, 225, 14, 133, 3, 241, 204, 251, 225, 14, 133, 3, 215, 10, 251, + 225, 14, 133, 3, 216, 23, 251, 225, 14, 133, 3, 243, 88, 251, 225, 14, + 133, 3, 224, 195, 251, 225, 14, 133, 3, 129, 245, 94, 14, 133, 3, 241, + 125, 245, 94, 14, 133, 3, 241, 204, 245, 94, 14, 133, 3, 215, 10, 245, + 94, 14, 133, 3, 216, 23, 245, 94, 14, 133, 3, 243, 88, 245, 94, 14, 133, + 3, 224, 195, 245, 94, 14, 133, 3, 241, 125, 71, 14, 133, 3, 241, 204, 71, + 14, 133, 3, 215, 10, 71, 14, 133, 3, 216, 23, 71, 14, 133, 3, 243, 88, + 71, 14, 133, 3, 224, 195, 71, 14, 133, 3, 119, 240, 144, 14, 133, 3, 118, + 240, 144, 14, 133, 3, 129, 240, 144, 14, 133, 3, 241, 125, 240, 144, 14, + 133, 3, 241, 204, 240, 144, 14, 133, 3, 215, 10, 240, 144, 14, 133, 3, + 216, 23, 240, 144, 14, 133, 3, 243, 88, 240, 144, 14, 133, 3, 224, 195, + 240, 144, 14, 133, 3, 119, 240, 141, 14, 133, 3, 118, 240, 141, 14, 133, + 3, 129, 240, 141, 14, 133, 3, 241, 125, 240, 141, 14, 133, 3, 241, 204, + 240, 141, 14, 133, 3, 118, 215, 230, 14, 133, 3, 129, 215, 230, 14, 133, + 3, 129, 215, 231, 209, 53, 17, 14, 133, 3, 241, 125, 215, 230, 14, 133, + 3, 241, 204, 215, 230, 14, 133, 3, 215, 10, 215, 230, 14, 133, 3, 216, + 23, 215, 230, 14, 133, 3, 243, 88, 215, 230, 14, 133, 3, 224, 195, 215, + 230, 14, 133, 3, 119, 215, 225, 14, 133, 3, 118, 215, 225, 14, 133, 3, + 129, 215, 225, 14, 133, 3, 129, 215, 226, 209, 53, 17, 14, 133, 3, 241, + 125, 215, 225, 14, 133, 3, 241, 204, 215, 225, 14, 133, 3, 215, 231, 29, + 240, 227, 101, 245, 94, 14, 133, 3, 215, 231, 29, 240, 227, 101, 226, + 209, 14, 133, 3, 119, 249, 65, 14, 133, 3, 118, 249, 65, 14, 133, 3, 129, + 249, 65, 14, 133, 3, 129, 249, 66, 209, 53, 17, 14, 133, 3, 241, 125, + 249, 65, 14, 133, 3, 241, 204, 249, 65, 14, 133, 3, 129, 209, 53, 241, + 136, 242, 214, 14, 133, 3, 129, 209, 53, 241, 136, 242, 211, 14, 133, 3, + 241, 125, 209, 53, 241, 136, 229, 209, 14, 133, 3, 241, 125, 209, 53, + 241, 136, 229, 207, 14, 133, 3, 241, 125, 209, 53, 241, 136, 229, 210, + 62, 14, 133, 3, 241, 125, 209, 53, 241, 136, 229, 210, 251, 150, 14, 133, + 3, 215, 10, 209, 53, 241, 136, 251, 221, 14, 133, 3, 216, 23, 209, 53, + 241, 136, 233, 77, 14, 133, 3, 216, 23, 209, 53, 241, 136, 233, 79, 62, + 14, 133, 3, 216, 23, 209, 53, 241, 136, 233, 79, 251, 150, 14, 133, 3, + 243, 88, 209, 53, 241, 136, 209, 165, 14, 133, 3, 243, 88, 209, 53, 241, + 136, 209, 164, 14, 133, 3, 224, 195, 209, 53, 241, 136, 233, 93, 14, 133, + 3, 224, 195, 209, 53, 241, 136, 233, 92, 14, 133, 3, 224, 195, 209, 53, + 241, 136, 233, 91, 14, 133, 3, 224, 195, 209, 53, 241, 136, 233, 94, 62, + 14, 133, 3, 118, 251, 226, 212, 89, 14, 133, 3, 129, 251, 226, 212, 89, + 14, 133, 3, 241, 125, 251, 226, 212, 89, 14, 133, 3, 241, 204, 251, 226, + 212, 89, 14, 133, 3, 215, 10, 251, 226, 212, 89, 14, 133, 3, 119, 250, + 138, 14, 133, 3, 118, 250, 138, 14, 133, 3, 129, 250, 138, 14, 133, 3, + 241, 125, 250, 138, 14, 133, 3, 241, 125, 250, 139, 209, 53, 17, 14, 133, + 3, 241, 204, 250, 138, 14, 133, 3, 241, 204, 250, 139, 209, 53, 17, 14, + 133, 3, 224, 207, 14, 133, 3, 224, 208, 14, 133, 3, 119, 242, 210, 14, + 133, 3, 118, 242, 210, 14, 133, 3, 119, 212, 11, 245, 94, 14, 133, 3, + 118, 212, 8, 245, 94, 14, 133, 3, 241, 204, 214, 255, 245, 94, 14, 133, + 3, 119, 212, 11, 209, 53, 241, 136, 62, 14, 133, 3, 118, 212, 8, 209, 53, + 241, 136, 62, 14, 133, 3, 119, 243, 84, 251, 225, 14, 133, 3, 119, 219, + 205, 251, 225, 14, 133, 3, 44, 251, 212, 119, 215, 0, 14, 133, 3, 44, + 251, 212, 119, 219, 204, 14, 133, 3, 119, 219, 205, 239, 186, 14, 133, 3, + 119, 160, 239, 186, 14, 133, 3, 243, 66, 119, 212, 10, 14, 133, 3, 243, + 66, 118, 212, 7, 14, 133, 3, 243, 66, 241, 130, 14, 133, 3, 243, 66, 241, + 243, 14, 133, 3, 241, 125, 106, 209, 53, 17, 14, 133, 3, 241, 204, 106, + 209, 53, 17, 14, 133, 3, 215, 10, 106, 209, 53, 17, 14, 133, 3, 216, 23, + 106, 209, 53, 17, 14, 133, 3, 243, 88, 106, 209, 53, 17, 14, 133, 3, 224, + 195, 106, 209, 53, 17, 14, 220, 72, 3, 44, 251, 212, 206, 232, 245, 79, + 14, 220, 72, 3, 79, 247, 162, 14, 220, 72, 3, 245, 163, 247, 162, 14, + 220, 72, 3, 245, 163, 211, 47, 14, 220, 72, 3, 245, 163, 219, 210, 12, + 13, 254, 250, 12, 13, 254, 249, 12, 13, 254, 248, 12, 13, 254, 247, 12, + 13, 254, 246, 12, 13, 254, 245, 12, 13, 254, 244, 12, 13, 254, 243, 12, + 13, 254, 242, 12, 13, 254, 241, 12, 13, 254, 240, 12, 13, 254, 239, 12, + 13, 254, 238, 12, 13, 254, 237, 12, 13, 254, 236, 12, 13, 254, 235, 12, + 13, 254, 234, 12, 13, 254, 233, 12, 13, 254, 232, 12, 13, 254, 231, 12, + 13, 254, 230, 12, 13, 254, 229, 12, 13, 254, 228, 12, 13, 254, 227, 12, + 13, 254, 226, 12, 13, 254, 225, 12, 13, 254, 224, 12, 13, 254, 223, 12, + 13, 254, 222, 12, 13, 254, 221, 12, 13, 254, 220, 12, 13, 254, 219, 12, + 13, 254, 218, 12, 13, 254, 216, 12, 13, 254, 215, 12, 13, 254, 214, 12, + 13, 254, 213, 12, 13, 254, 212, 12, 13, 254, 211, 12, 13, 254, 210, 12, + 13, 254, 209, 12, 13, 254, 208, 12, 13, 254, 207, 12, 13, 254, 206, 12, + 13, 254, 205, 12, 13, 254, 204, 12, 13, 254, 203, 12, 13, 254, 202, 12, + 13, 254, 201, 12, 13, 254, 200, 12, 13, 254, 199, 12, 13, 254, 198, 12, + 13, 254, 197, 12, 13, 254, 196, 12, 13, 254, 195, 12, 13, 254, 194, 12, + 13, 254, 193, 12, 13, 254, 192, 12, 13, 254, 191, 12, 13, 254, 190, 12, + 13, 254, 189, 12, 13, 254, 188, 12, 13, 254, 187, 12, 13, 254, 186, 12, + 13, 254, 185, 12, 13, 254, 184, 12, 13, 254, 183, 12, 13, 254, 182, 12, + 13, 254, 181, 12, 13, 254, 180, 12, 13, 254, 179, 12, 13, 254, 178, 12, + 13, 254, 177, 12, 13, 254, 176, 12, 13, 254, 175, 12, 13, 254, 174, 12, + 13, 254, 173, 12, 13, 254, 172, 12, 13, 254, 171, 12, 13, 254, 170, 12, + 13, 251, 148, 12, 13, 251, 146, 12, 13, 251, 144, 12, 13, 251, 142, 12, + 13, 251, 140, 12, 13, 251, 139, 12, 13, 251, 137, 12, 13, 251, 135, 12, + 13, 251, 133, 12, 13, 251, 131, 12, 13, 249, 30, 12, 13, 249, 29, 12, 13, + 249, 28, 12, 13, 249, 27, 12, 13, 249, 26, 12, 13, 249, 25, 12, 13, 249, + 24, 12, 13, 249, 23, 12, 13, 249, 22, 12, 13, 249, 21, 12, 13, 249, 20, + 12, 13, 249, 19, 12, 13, 249, 18, 12, 13, 249, 17, 12, 13, 249, 16, 12, + 13, 249, 15, 12, 13, 249, 14, 12, 13, 249, 13, 12, 13, 249, 12, 12, 13, + 249, 11, 12, 13, 249, 10, 12, 13, 249, 9, 12, 13, 249, 8, 12, 13, 249, 7, + 12, 13, 249, 6, 12, 13, 249, 5, 12, 13, 249, 4, 12, 13, 249, 3, 12, 13, + 246, 239, 12, 13, 246, 238, 12, 13, 246, 237, 12, 13, 246, 236, 12, 13, + 246, 235, 12, 13, 246, 234, 12, 13, 246, 233, 12, 13, 246, 232, 12, 13, + 246, 231, 12, 13, 246, 230, 12, 13, 246, 229, 12, 13, 246, 228, 12, 13, + 246, 227, 12, 13, 246, 226, 12, 13, 246, 225, 12, 13, 246, 224, 12, 13, + 246, 223, 12, 13, 246, 222, 12, 13, 246, 221, 12, 13, 246, 220, 12, 13, + 246, 219, 12, 13, 246, 218, 12, 13, 246, 217, 12, 13, 246, 216, 12, 13, + 246, 215, 12, 13, 246, 214, 12, 13, 246, 213, 12, 13, 246, 212, 12, 13, + 246, 211, 12, 13, 246, 210, 12, 13, 246, 209, 12, 13, 246, 208, 12, 13, + 246, 207, 12, 13, 246, 206, 12, 13, 246, 205, 12, 13, 246, 204, 12, 13, + 246, 203, 12, 13, 246, 202, 12, 13, 246, 201, 12, 13, 246, 200, 12, 13, + 246, 199, 12, 13, 246, 198, 12, 13, 246, 197, 12, 13, 246, 196, 12, 13, + 246, 195, 12, 13, 246, 194, 12, 13, 246, 193, 12, 13, 246, 192, 12, 13, + 246, 191, 12, 13, 246, 190, 12, 13, 246, 189, 12, 13, 246, 188, 12, 13, + 246, 187, 12, 13, 246, 186, 12, 13, 246, 185, 12, 13, 246, 184, 12, 13, + 246, 183, 12, 13, 246, 182, 12, 13, 246, 181, 12, 13, 246, 180, 12, 13, + 246, 179, 12, 13, 246, 178, 12, 13, 246, 177, 12, 13, 246, 176, 12, 13, + 246, 175, 12, 13, 246, 174, 12, 13, 246, 173, 12, 13, 246, 172, 12, 13, + 246, 171, 12, 13, 246, 170, 12, 13, 246, 169, 12, 13, 246, 168, 12, 13, + 246, 167, 12, 13, 246, 166, 12, 13, 246, 165, 12, 13, 246, 164, 12, 13, + 246, 163, 12, 13, 246, 162, 12, 13, 246, 161, 12, 13, 246, 160, 12, 13, + 246, 159, 12, 13, 246, 158, 12, 13, 246, 157, 12, 13, 246, 156, 12, 13, + 246, 155, 12, 13, 246, 154, 12, 13, 246, 153, 12, 13, 246, 152, 12, 13, + 246, 151, 12, 13, 246, 150, 12, 13, 246, 149, 12, 13, 246, 148, 12, 13, + 243, 176, 12, 13, 243, 175, 12, 13, 243, 174, 12, 13, 243, 173, 12, 13, + 243, 172, 12, 13, 243, 171, 12, 13, 243, 170, 12, 13, 243, 169, 12, 13, + 243, 168, 12, 13, 243, 167, 12, 13, 243, 166, 12, 13, 243, 165, 12, 13, + 243, 164, 12, 13, 243, 163, 12, 13, 243, 162, 12, 13, 243, 161, 12, 13, + 243, 160, 12, 13, 243, 159, 12, 13, 243, 158, 12, 13, 243, 157, 12, 13, + 243, 156, 12, 13, 243, 155, 12, 13, 243, 154, 12, 13, 243, 153, 12, 13, + 243, 152, 12, 13, 243, 151, 12, 13, 243, 150, 12, 13, 243, 149, 12, 13, + 243, 148, 12, 13, 243, 147, 12, 13, 243, 146, 12, 13, 243, 145, 12, 13, + 243, 144, 12, 13, 243, 143, 12, 13, 243, 142, 12, 13, 243, 141, 12, 13, + 243, 140, 12, 13, 243, 139, 12, 13, 243, 138, 12, 13, 243, 137, 12, 13, + 243, 136, 12, 13, 243, 135, 12, 13, 243, 134, 12, 13, 243, 133, 12, 13, + 242, 138, 12, 13, 242, 137, 12, 13, 242, 136, 12, 13, 242, 135, 12, 13, + 242, 134, 12, 13, 242, 133, 12, 13, 242, 132, 12, 13, 242, 131, 12, 13, + 242, 130, 12, 13, 242, 129, 12, 13, 242, 128, 12, 13, 242, 127, 12, 13, + 242, 126, 12, 13, 242, 125, 12, 13, 242, 124, 12, 13, 242, 123, 12, 13, + 242, 122, 12, 13, 242, 121, 12, 13, 242, 120, 12, 13, 242, 119, 12, 13, + 242, 118, 12, 13, 242, 117, 12, 13, 242, 116, 12, 13, 242, 115, 12, 13, + 242, 114, 12, 13, 242, 113, 12, 13, 242, 112, 12, 13, 242, 111, 12, 13, + 242, 110, 12, 13, 242, 109, 12, 13, 242, 108, 12, 13, 242, 107, 12, 13, + 242, 106, 12, 13, 242, 105, 12, 13, 242, 104, 12, 13, 242, 103, 12, 13, + 242, 102, 12, 13, 242, 101, 12, 13, 242, 100, 12, 13, 242, 99, 12, 13, + 242, 98, 12, 13, 242, 97, 12, 13, 242, 96, 12, 13, 242, 95, 12, 13, 242, + 94, 12, 13, 242, 93, 12, 13, 242, 92, 12, 13, 242, 91, 12, 13, 242, 90, + 12, 13, 242, 89, 12, 13, 242, 88, 12, 13, 242, 87, 12, 13, 242, 86, 12, + 13, 242, 85, 12, 13, 242, 84, 12, 13, 242, 83, 12, 13, 242, 82, 12, 13, + 242, 81, 12, 13, 242, 80, 12, 13, 242, 79, 12, 13, 242, 78, 12, 13, 242, + 77, 12, 13, 242, 76, 12, 13, 242, 75, 12, 13, 242, 74, 12, 13, 241, 54, + 12, 13, 241, 53, 12, 13, 241, 52, 12, 13, 241, 51, 12, 13, 241, 50, 12, + 13, 241, 49, 12, 13, 241, 48, 12, 13, 241, 47, 12, 13, 241, 46, 12, 13, + 241, 45, 12, 13, 241, 44, 12, 13, 241, 43, 12, 13, 241, 42, 12, 13, 241, + 41, 12, 13, 241, 40, 12, 13, 241, 39, 12, 13, 241, 38, 12, 13, 241, 37, + 12, 13, 241, 36, 12, 13, 241, 35, 12, 13, 241, 34, 12, 13, 241, 33, 12, + 13, 241, 32, 12, 13, 241, 31, 12, 13, 241, 30, 12, 13, 241, 29, 12, 13, + 241, 28, 12, 13, 241, 27, 12, 13, 241, 26, 12, 13, 241, 25, 12, 13, 241, + 24, 12, 13, 241, 23, 12, 13, 241, 22, 12, 13, 241, 21, 12, 13, 241, 20, + 12, 13, 241, 19, 12, 13, 241, 18, 12, 13, 241, 17, 12, 13, 241, 16, 12, + 13, 241, 15, 12, 13, 241, 14, 12, 13, 241, 13, 12, 13, 241, 12, 12, 13, + 241, 11, 12, 13, 241, 10, 12, 13, 241, 9, 12, 13, 241, 8, 12, 13, 241, 7, + 12, 13, 241, 6, 12, 13, 241, 5, 12, 13, 241, 4, 12, 13, 241, 3, 12, 13, + 241, 2, 12, 13, 241, 1, 12, 13, 241, 0, 12, 13, 240, 255, 12, 13, 240, + 254, 12, 13, 240, 253, 12, 13, 240, 252, 12, 13, 240, 251, 12, 13, 240, + 250, 12, 13, 240, 249, 12, 13, 240, 248, 12, 13, 240, 247, 12, 13, 239, + 153, 12, 13, 239, 152, 12, 13, 239, 151, 12, 13, 239, 150, 12, 13, 239, + 149, 12, 13, 239, 148, 12, 13, 239, 147, 12, 13, 239, 146, 12, 13, 239, + 145, 12, 13, 237, 209, 12, 13, 237, 208, 12, 13, 237, 207, 12, 13, 237, + 206, 12, 13, 237, 205, 12, 13, 237, 204, 12, 13, 237, 203, 12, 13, 237, + 202, 12, 13, 237, 201, 12, 13, 237, 200, 12, 13, 237, 199, 12, 13, 237, + 198, 12, 13, 237, 197, 12, 13, 237, 196, 12, 13, 237, 195, 12, 13, 237, + 194, 12, 13, 237, 193, 12, 13, 237, 192, 12, 13, 237, 191, 12, 13, 232, + 75, 12, 13, 232, 74, 12, 13, 232, 73, 12, 13, 232, 72, 12, 13, 232, 71, + 12, 13, 232, 70, 12, 13, 232, 69, 12, 13, 232, 68, 12, 13, 230, 156, 12, + 13, 230, 155, 12, 13, 230, 154, 12, 13, 230, 153, 12, 13, 230, 152, 12, + 13, 230, 151, 12, 13, 230, 150, 12, 13, 230, 149, 12, 13, 230, 148, 12, + 13, 230, 147, 12, 13, 229, 26, 12, 13, 229, 25, 12, 13, 229, 24, 12, 13, + 229, 22, 12, 13, 229, 20, 12, 13, 229, 19, 12, 13, 229, 17, 12, 13, 229, + 15, 12, 13, 229, 13, 12, 13, 229, 11, 12, 13, 229, 9, 12, 13, 229, 7, 12, + 13, 229, 5, 12, 13, 229, 4, 12, 13, 229, 2, 12, 13, 229, 0, 12, 13, 228, + 255, 12, 13, 228, 254, 12, 13, 228, 253, 12, 13, 228, 252, 12, 13, 228, + 251, 12, 13, 228, 250, 12, 13, 228, 249, 12, 13, 228, 248, 12, 13, 228, + 246, 12, 13, 228, 244, 12, 13, 228, 242, 12, 13, 228, 241, 12, 13, 228, + 239, 12, 13, 228, 238, 12, 13, 228, 236, 12, 13, 228, 235, 12, 13, 228, + 233, 12, 13, 228, 231, 12, 13, 228, 229, 12, 13, 228, 227, 12, 13, 228, + 225, 12, 13, 228, 224, 12, 13, 228, 222, 12, 13, 228, 220, 12, 13, 228, + 219, 12, 13, 228, 217, 12, 13, 228, 215, 12, 13, 228, 213, 12, 13, 228, + 211, 12, 13, 228, 210, 12, 13, 228, 208, 12, 13, 228, 206, 12, 13, 228, + 204, 12, 13, 228, 203, 12, 13, 228, 201, 12, 13, 228, 199, 12, 13, 228, + 198, 12, 13, 228, 197, 12, 13, 228, 195, 12, 13, 228, 193, 12, 13, 228, + 191, 12, 13, 228, 189, 12, 13, 228, 187, 12, 13, 228, 185, 12, 13, 228, + 183, 12, 13, 228, 182, 12, 13, 228, 180, 12, 13, 228, 178, 12, 13, 228, + 176, 12, 13, 228, 174, 12, 13, 226, 30, 12, 13, 226, 29, 12, 13, 226, 28, + 12, 13, 226, 27, 12, 13, 226, 26, 12, 13, 226, 25, 12, 13, 226, 24, 12, + 13, 226, 23, 12, 13, 226, 22, 12, 13, 226, 21, 12, 13, 226, 20, 12, 13, + 226, 19, 12, 13, 226, 18, 12, 13, 226, 17, 12, 13, 226, 16, 12, 13, 226, + 15, 12, 13, 226, 14, 12, 13, 226, 13, 12, 13, 226, 12, 12, 13, 226, 11, + 12, 13, 226, 10, 12, 13, 226, 9, 12, 13, 226, 8, 12, 13, 226, 7, 12, 13, + 226, 6, 12, 13, 226, 5, 12, 13, 226, 4, 12, 13, 226, 3, 12, 13, 226, 2, + 12, 13, 226, 1, 12, 13, 226, 0, 12, 13, 225, 255, 12, 13, 225, 254, 12, + 13, 225, 253, 12, 13, 225, 252, 12, 13, 225, 251, 12, 13, 225, 250, 12, + 13, 225, 249, 12, 13, 225, 248, 12, 13, 225, 247, 12, 13, 225, 246, 12, + 13, 225, 245, 12, 13, 225, 244, 12, 13, 225, 243, 12, 13, 225, 242, 12, + 13, 225, 241, 12, 13, 225, 240, 12, 13, 225, 239, 12, 13, 225, 238, 12, + 13, 224, 128, 12, 13, 224, 127, 12, 13, 224, 126, 12, 13, 224, 125, 12, + 13, 224, 124, 12, 13, 224, 123, 12, 13, 224, 122, 12, 13, 224, 121, 12, + 13, 224, 120, 12, 13, 224, 119, 12, 13, 224, 118, 12, 13, 224, 117, 12, + 13, 224, 116, 12, 13, 224, 115, 12, 13, 224, 114, 12, 13, 224, 113, 12, + 13, 224, 112, 12, 13, 224, 111, 12, 13, 224, 110, 12, 13, 224, 109, 12, + 13, 224, 108, 12, 13, 224, 107, 12, 13, 223, 216, 12, 13, 223, 215, 12, + 13, 223, 214, 12, 13, 223, 213, 12, 13, 223, 212, 12, 13, 223, 211, 12, + 13, 223, 210, 12, 13, 223, 209, 12, 13, 223, 208, 12, 13, 223, 207, 12, + 13, 223, 206, 12, 13, 223, 205, 12, 13, 223, 204, 12, 13, 223, 203, 12, + 13, 223, 202, 12, 13, 223, 201, 12, 13, 223, 200, 12, 13, 223, 199, 12, + 13, 223, 198, 12, 13, 223, 197, 12, 13, 223, 196, 12, 13, 223, 195, 12, + 13, 223, 194, 12, 13, 223, 193, 12, 13, 223, 192, 12, 13, 223, 191, 12, + 13, 223, 50, 12, 13, 223, 49, 12, 13, 223, 48, 12, 13, 223, 47, 12, 13, + 223, 46, 12, 13, 223, 45, 12, 13, 223, 44, 12, 13, 223, 43, 12, 13, 223, + 42, 12, 13, 223, 41, 12, 13, 223, 40, 12, 13, 223, 39, 12, 13, 223, 38, + 12, 13, 223, 37, 12, 13, 223, 36, 12, 13, 223, 35, 12, 13, 223, 34, 12, + 13, 223, 33, 12, 13, 223, 32, 12, 13, 223, 31, 12, 13, 223, 30, 12, 13, + 223, 29, 12, 13, 223, 28, 12, 13, 223, 27, 12, 13, 223, 26, 12, 13, 223, + 25, 12, 13, 223, 24, 12, 13, 223, 23, 12, 13, 223, 22, 12, 13, 223, 21, + 12, 13, 223, 20, 12, 13, 223, 19, 12, 13, 223, 18, 12, 13, 223, 17, 12, + 13, 223, 16, 12, 13, 223, 15, 12, 13, 223, 14, 12, 13, 223, 13, 12, 13, + 223, 12, 12, 13, 223, 11, 12, 13, 223, 10, 12, 13, 223, 9, 12, 13, 223, + 8, 12, 13, 223, 7, 12, 13, 223, 6, 12, 13, 223, 5, 12, 13, 223, 4, 12, + 13, 223, 3, 12, 13, 223, 2, 12, 13, 223, 1, 12, 13, 223, 0, 12, 13, 222, + 255, 12, 13, 222, 254, 12, 13, 222, 253, 12, 13, 222, 252, 12, 13, 222, + 251, 12, 13, 222, 250, 12, 13, 222, 249, 12, 13, 222, 248, 12, 13, 222, + 247, 12, 13, 222, 246, 12, 13, 222, 245, 12, 13, 222, 244, 12, 13, 222, + 243, 12, 13, 222, 242, 12, 13, 222, 241, 12, 13, 222, 240, 12, 13, 222, + 239, 12, 13, 222, 238, 12, 13, 222, 237, 12, 13, 222, 236, 12, 13, 222, + 235, 12, 13, 222, 234, 12, 13, 222, 233, 12, 13, 222, 232, 12, 13, 222, + 66, 12, 13, 222, 65, 12, 13, 222, 64, 12, 13, 222, 63, 12, 13, 222, 62, + 12, 13, 222, 61, 12, 13, 222, 60, 12, 13, 222, 59, 12, 13, 222, 58, 12, + 13, 222, 57, 12, 13, 222, 56, 12, 13, 222, 55, 12, 13, 222, 54, 12, 13, + 220, 26, 12, 13, 220, 25, 12, 13, 220, 24, 12, 13, 220, 23, 12, 13, 220, + 22, 12, 13, 220, 21, 12, 13, 220, 20, 12, 13, 219, 148, 12, 13, 219, 147, + 12, 13, 219, 146, 12, 13, 219, 145, 12, 13, 219, 144, 12, 13, 219, 143, + 12, 13, 219, 142, 12, 13, 219, 141, 12, 13, 219, 140, 12, 13, 219, 139, + 12, 13, 219, 138, 12, 13, 219, 137, 12, 13, 219, 136, 12, 13, 219, 135, + 12, 13, 219, 134, 12, 13, 219, 133, 12, 13, 219, 132, 12, 13, 219, 131, + 12, 13, 219, 130, 12, 13, 219, 129, 12, 13, 219, 128, 12, 13, 219, 127, + 12, 13, 219, 126, 12, 13, 219, 125, 12, 13, 219, 124, 12, 13, 219, 123, + 12, 13, 219, 122, 12, 13, 219, 121, 12, 13, 219, 120, 12, 13, 219, 119, + 12, 13, 219, 118, 12, 13, 219, 117, 12, 13, 219, 116, 12, 13, 219, 115, + 12, 13, 217, 254, 12, 13, 217, 253, 12, 13, 217, 252, 12, 13, 217, 251, + 12, 13, 217, 250, 12, 13, 217, 249, 12, 13, 217, 248, 12, 13, 217, 247, + 12, 13, 217, 246, 12, 13, 217, 245, 12, 13, 217, 244, 12, 13, 217, 243, + 12, 13, 217, 242, 12, 13, 217, 241, 12, 13, 217, 240, 12, 13, 217, 239, + 12, 13, 217, 238, 12, 13, 217, 237, 12, 13, 217, 236, 12, 13, 217, 235, + 12, 13, 217, 234, 12, 13, 217, 233, 12, 13, 217, 232, 12, 13, 217, 231, + 12, 13, 217, 230, 12, 13, 217, 229, 12, 13, 217, 228, 12, 13, 217, 227, + 12, 13, 217, 226, 12, 13, 217, 225, 12, 13, 217, 224, 12, 13, 217, 223, + 12, 13, 217, 222, 12, 13, 217, 221, 12, 13, 217, 220, 12, 13, 217, 219, + 12, 13, 217, 218, 12, 13, 217, 217, 12, 13, 217, 216, 12, 13, 217, 215, + 12, 13, 217, 214, 12, 13, 217, 213, 12, 13, 217, 212, 12, 13, 217, 211, + 12, 13, 217, 210, 12, 13, 217, 209, 12, 13, 217, 208, 12, 13, 217, 207, + 12, 13, 217, 206, 12, 13, 217, 205, 12, 13, 217, 204, 12, 13, 217, 203, + 12, 13, 217, 202, 12, 13, 217, 201, 12, 13, 213, 8, 12, 13, 213, 7, 12, + 13, 213, 6, 12, 13, 213, 5, 12, 13, 213, 4, 12, 13, 213, 3, 12, 13, 213, + 2, 12, 13, 213, 1, 12, 13, 213, 0, 12, 13, 212, 255, 12, 13, 212, 254, + 12, 13, 212, 253, 12, 13, 212, 252, 12, 13, 212, 251, 12, 13, 212, 250, + 12, 13, 212, 249, 12, 13, 212, 248, 12, 13, 212, 247, 12, 13, 212, 246, + 12, 13, 212, 245, 12, 13, 212, 244, 12, 13, 212, 243, 12, 13, 212, 242, + 12, 13, 212, 241, 12, 13, 212, 240, 12, 13, 212, 239, 12, 13, 212, 238, + 12, 13, 212, 237, 12, 13, 212, 236, 12, 13, 212, 235, 12, 13, 212, 234, + 12, 13, 212, 233, 12, 13, 212, 232, 12, 13, 212, 231, 12, 13, 212, 230, + 12, 13, 212, 229, 12, 13, 212, 228, 12, 13, 212, 227, 12, 13, 212, 226, + 12, 13, 212, 225, 12, 13, 212, 224, 12, 13, 212, 223, 12, 13, 212, 222, + 12, 13, 212, 221, 12, 13, 210, 67, 12, 13, 210, 66, 12, 13, 210, 65, 12, + 13, 210, 64, 12, 13, 210, 63, 12, 13, 210, 62, 12, 13, 210, 61, 12, 13, + 210, 60, 12, 13, 210, 59, 12, 13, 210, 58, 12, 13, 210, 57, 12, 13, 210, + 56, 12, 13, 210, 55, 12, 13, 210, 54, 12, 13, 210, 53, 12, 13, 210, 52, + 12, 13, 210, 51, 12, 13, 210, 50, 12, 13, 210, 49, 12, 13, 210, 48, 12, + 13, 210, 47, 12, 13, 210, 46, 12, 13, 210, 45, 12, 13, 210, 44, 12, 13, + 210, 43, 12, 13, 210, 42, 12, 13, 210, 41, 12, 13, 210, 40, 12, 13, 210, + 39, 12, 13, 210, 38, 12, 13, 210, 37, 12, 13, 210, 36, 12, 13, 210, 35, + 12, 13, 210, 34, 12, 13, 210, 33, 12, 13, 210, 32, 12, 13, 210, 31, 12, + 13, 210, 30, 12, 13, 210, 29, 12, 13, 210, 28, 12, 13, 210, 27, 12, 13, + 210, 26, 12, 13, 210, 25, 12, 13, 210, 24, 12, 13, 210, 23, 12, 13, 210, + 22, 12, 13, 210, 21, 12, 13, 209, 147, 12, 13, 209, 146, 12, 13, 209, + 145, 12, 13, 209, 144, 12, 13, 209, 143, 12, 13, 209, 142, 12, 13, 209, + 141, 12, 13, 209, 140, 12, 13, 209, 139, 12, 13, 209, 138, 12, 13, 209, + 137, 12, 13, 209, 136, 12, 13, 209, 135, 12, 13, 209, 134, 12, 13, 209, + 133, 12, 13, 209, 132, 12, 13, 209, 131, 12, 13, 209, 130, 12, 13, 209, + 129, 12, 13, 209, 128, 12, 13, 209, 127, 12, 13, 209, 126, 12, 13, 209, + 125, 12, 13, 209, 124, 12, 13, 209, 123, 12, 13, 209, 122, 12, 13, 209, + 121, 12, 13, 209, 120, 12, 13, 209, 119, 12, 13, 209, 118, 12, 13, 209, + 117, 12, 13, 209, 116, 12, 13, 209, 115, 12, 13, 209, 114, 12, 13, 209, + 113, 12, 13, 209, 112, 12, 13, 209, 111, 12, 13, 209, 110, 12, 13, 209, + 109, 12, 13, 209, 108, 12, 13, 209, 107, 12, 13, 209, 106, 12, 13, 209, + 105, 12, 13, 209, 104, 12, 13, 209, 103, 12, 13, 209, 102, 12, 13, 209, + 101, 12, 13, 209, 100, 12, 13, 209, 99, 12, 13, 209, 98, 12, 13, 209, 97, + 12, 13, 209, 96, 12, 13, 209, 95, 12, 13, 209, 94, 12, 13, 209, 93, 12, + 13, 209, 92, 12, 13, 209, 91, 12, 13, 209, 90, 12, 13, 209, 89, 12, 13, + 209, 88, 12, 13, 209, 87, 12, 13, 209, 86, 12, 13, 209, 85, 12, 13, 209, + 84, 12, 13, 209, 83, 12, 13, 209, 82, 12, 13, 209, 81, 12, 13, 209, 80, + 12, 13, 209, 79, 12, 13, 209, 78, 12, 13, 209, 77, 12, 13, 209, 76, 12, + 13, 209, 75, 12, 13, 209, 74, 12, 13, 209, 73, 12, 13, 209, 72, 12, 13, + 209, 71, 12, 13, 207, 128, 12, 13, 207, 127, 12, 13, 207, 126, 12, 13, + 207, 125, 12, 13, 207, 124, 12, 13, 207, 123, 12, 13, 207, 122, 12, 13, + 207, 121, 12, 13, 207, 120, 12, 13, 207, 119, 12, 13, 207, 118, 12, 13, + 207, 117, 12, 13, 207, 116, 12, 13, 207, 115, 12, 13, 207, 114, 12, 13, + 207, 113, 12, 13, 207, 112, 12, 13, 207, 111, 12, 13, 207, 110, 12, 13, + 207, 109, 12, 13, 207, 108, 12, 13, 207, 107, 12, 13, 207, 106, 12, 13, + 207, 105, 12, 13, 207, 104, 12, 13, 207, 103, 12, 13, 207, 102, 12, 13, + 207, 101, 12, 13, 207, 100, 12, 13, 207, 99, 12, 13, 207, 98, 12, 13, + 207, 97, 12, 13, 206, 193, 12, 13, 206, 192, 12, 13, 206, 191, 12, 13, + 206, 190, 12, 13, 206, 189, 12, 13, 206, 188, 12, 13, 206, 187, 12, 13, + 206, 186, 12, 13, 206, 185, 12, 13, 206, 184, 12, 13, 206, 183, 12, 13, + 206, 182, 12, 13, 206, 121, 12, 13, 206, 120, 12, 13, 206, 119, 12, 13, + 206, 118, 12, 13, 206, 117, 12, 13, 206, 116, 12, 13, 206, 115, 12, 13, + 206, 114, 12, 13, 206, 113, 12, 13, 205, 158, 12, 13, 205, 157, 12, 13, + 205, 156, 12, 13, 205, 155, 12, 13, 205, 154, 12, 13, 205, 153, 12, 13, + 205, 152, 12, 13, 205, 151, 12, 13, 205, 150, 12, 13, 205, 149, 12, 13, + 205, 148, 12, 13, 205, 147, 12, 13, 205, 146, 12, 13, 205, 145, 12, 13, + 205, 144, 12, 13, 205, 143, 12, 13, 205, 142, 12, 13, 205, 141, 12, 13, + 205, 140, 12, 13, 205, 139, 12, 13, 205, 138, 12, 13, 205, 137, 12, 13, + 205, 136, 12, 13, 205, 135, 12, 13, 205, 134, 12, 13, 205, 133, 12, 13, + 205, 132, 12, 13, 205, 131, 12, 13, 205, 130, 12, 13, 205, 129, 12, 13, + 205, 128, 12, 13, 205, 127, 12, 13, 205, 126, 12, 13, 205, 125, 12, 13, + 205, 124, 12, 13, 205, 123, 12, 13, 205, 122, 12, 13, 205, 121, 12, 13, + 205, 120, 12, 13, 205, 119, 12, 13, 205, 118, 12, 13, 253, 163, 12, 13, + 253, 162, 12, 13, 253, 161, 12, 13, 253, 160, 12, 13, 253, 159, 12, 13, + 253, 158, 12, 13, 253, 157, 12, 13, 253, 156, 12, 13, 253, 155, 12, 13, + 253, 154, 12, 13, 253, 153, 12, 13, 253, 152, 12, 13, 253, 151, 12, 13, + 253, 150, 12, 13, 253, 149, 12, 13, 253, 148, 12, 13, 253, 147, 12, 13, + 253, 146, 12, 13, 253, 145, 12, 13, 253, 144, 12, 13, 253, 143, 12, 13, + 253, 142, 12, 13, 253, 141, 12, 13, 253, 140, 12, 13, 253, 139, 12, 13, + 253, 138, 12, 13, 253, 137, 12, 13, 253, 136, 12, 13, 253, 135, 12, 13, + 253, 134, 12, 13, 253, 133, 12, 13, 253, 132, 12, 13, 253, 131, 12, 13, + 253, 130, 21, 1, 187, 225, 10, 227, 40, 21, 1, 187, 240, 178, 241, 154, + 21, 1, 187, 220, 189, 227, 41, 221, 1, 21, 1, 187, 220, 189, 227, 41, + 221, 2, 21, 1, 187, 225, 233, 227, 40, 21, 1, 187, 215, 112, 21, 1, 187, + 211, 155, 227, 40, 21, 1, 187, 223, 92, 227, 40, 21, 1, 187, 215, 170, + 222, 52, 224, 164, 21, 1, 187, 220, 189, 222, 52, 224, 165, 221, 1, 21, + 1, 187, 220, 189, 222, 52, 224, 165, 221, 2, 21, 1, 187, 227, 255, 21, 1, + 187, 210, 171, 228, 0, 21, 1, 187, 225, 71, 21, 1, 187, 227, 252, 21, 1, + 187, 227, 210, 21, 1, 187, 226, 56, 21, 1, 187, 216, 25, 21, 1, 187, 223, + 224, 21, 1, 187, 231, 186, 21, 1, 187, 224, 132, 21, 1, 187, 213, 119, + 21, 1, 187, 225, 9, 21, 1, 187, 230, 88, 21, 1, 187, 230, 7, 230, 203, + 21, 1, 187, 223, 234, 227, 48, 21, 1, 187, 228, 3, 21, 1, 187, 221, 202, + 21, 1, 187, 240, 80, 21, 1, 187, 222, 9, 21, 1, 187, 226, 169, 225, 44, + 21, 1, 187, 223, 73, 227, 51, 21, 1, 187, 106, 205, 188, 225, 226, 21, 1, + 187, 240, 81, 21, 1, 187, 223, 234, 223, 235, 21, 1, 187, 215, 13, 21, 1, + 187, 227, 33, 21, 1, 187, 227, 54, 21, 1, 187, 226, 146, 21, 1, 187, 232, + 44, 21, 1, 187, 222, 52, 230, 47, 21, 1, 187, 225, 152, 230, 47, 21, 1, + 187, 221, 104, 21, 1, 187, 227, 253, 21, 1, 187, 224, 204, 21, 1, 187, + 220, 65, 21, 1, 187, 210, 168, 21, 1, 187, 229, 77, 21, 1, 187, 214, 175, + 21, 1, 187, 212, 65, 21, 1, 187, 227, 250, 21, 1, 187, 231, 193, 21, 1, + 187, 225, 148, 21, 1, 187, 230, 215, 21, 1, 187, 226, 147, 21, 1, 187, + 215, 108, 21, 1, 187, 229, 126, 21, 1, 187, 241, 216, 21, 1, 187, 218, + 110, 21, 1, 187, 231, 4, 21, 1, 187, 214, 171, 21, 1, 187, 227, 206, 221, + 43, 21, 1, 187, 215, 163, 21, 1, 187, 223, 233, 21, 1, 187, 215, 146, + 223, 244, 205, 196, 21, 1, 187, 223, 114, 226, 166, 21, 1, 187, 222, 47, + 21, 1, 187, 224, 134, 21, 1, 187, 209, 213, 21, 1, 187, 225, 47, 21, 1, + 187, 227, 249, 21, 1, 187, 224, 176, 21, 1, 187, 227, 148, 21, 1, 187, + 223, 128, 21, 1, 187, 212, 69, 21, 1, 187, 214, 168, 21, 1, 187, 222, 48, + 21, 1, 187, 223, 248, 21, 1, 187, 228, 1, 21, 1, 187, 223, 125, 21, 1, + 187, 232, 8, 21, 1, 187, 223, 251, 21, 1, 187, 209, 34, 21, 1, 187, 229, + 81, 21, 1, 187, 225, 101, 21, 1, 187, 225, 201, 21, 1, 187, 227, 147, 21, + 1, 221, 83, 223, 246, 21, 1, 221, 83, 210, 171, 227, 254, 21, 1, 221, 83, + 215, 71, 21, 1, 221, 83, 216, 29, 210, 170, 21, 1, 221, 83, 229, 128, + 223, 230, 21, 1, 221, 83, 227, 154, 228, 2, 21, 1, 221, 83, 231, 115, 21, + 1, 221, 83, 206, 18, 21, 1, 221, 83, 227, 149, 21, 1, 221, 83, 232, 30, + 21, 1, 221, 83, 221, 160, 21, 1, 221, 83, 206, 95, 230, 47, 21, 1, 221, + 83, 230, 107, 223, 244, 223, 139, 21, 1, 221, 83, 223, 227, 215, 189, 21, + 1, 221, 83, 225, 119, 224, 179, 21, 1, 221, 83, 240, 78, 21, 1, 221, 83, + 220, 247, 21, 1, 221, 83, 210, 171, 223, 242, 21, 1, 221, 83, 215, 194, + 224, 174, 21, 1, 221, 83, 215, 190, 21, 1, 221, 83, 227, 41, 212, 68, 21, + 1, 221, 83, 227, 136, 227, 150, 21, 1, 221, 83, 223, 126, 223, 230, 21, + 1, 221, 83, 231, 182, 21, 1, 221, 83, 240, 79, 21, 1, 221, 83, 231, 178, + 21, 1, 221, 83, 230, 135, 21, 1, 221, 83, 221, 205, 21, 1, 221, 83, 208, + 221, 21, 1, 221, 83, 225, 11, 226, 54, 21, 1, 221, 83, 225, 46, 227, 132, + 21, 1, 221, 83, 206, 214, 21, 1, 221, 83, 217, 175, 21, 1, 221, 83, 212, + 211, 21, 1, 221, 83, 227, 53, 21, 1, 221, 83, 225, 30, 21, 1, 221, 83, + 225, 31, 230, 85, 21, 1, 221, 83, 227, 43, 21, 1, 221, 83, 213, 170, 21, + 1, 221, 83, 227, 140, 21, 1, 221, 83, 226, 151, 21, 1, 221, 83, 223, 142, + 21, 1, 221, 83, 220, 69, 21, 1, 221, 83, 227, 52, 225, 48, 21, 1, 221, + 83, 241, 255, 21, 1, 221, 83, 227, 127, 21, 1, 221, 83, 242, 21, 21, 1, + 221, 83, 231, 190, 21, 1, 221, 83, 228, 20, 224, 168, 21, 1, 221, 83, + 228, 20, 224, 144, 21, 1, 221, 83, 230, 6, 21, 1, 221, 83, 225, 54, 21, + 1, 221, 83, 223, 253, 21, 1, 221, 83, 185, 21, 1, 221, 83, 231, 102, 21, + 1, 221, 83, 224, 255, 21, 1, 158, 225, 10, 228, 0, 21, 1, 158, 223, 91, + 21, 1, 158, 205, 196, 21, 1, 158, 207, 83, 21, 1, 158, 225, 47, 21, 1, + 158, 225, 140, 21, 1, 158, 225, 17, 21, 1, 158, 240, 88, 21, 1, 158, 227, + 144, 21, 1, 158, 240, 185, 21, 1, 158, 223, 116, 226, 190, 227, 55, 21, + 1, 158, 223, 222, 227, 135, 21, 1, 158, 227, 141, 21, 1, 158, 220, 253, + 21, 1, 158, 225, 125, 21, 1, 158, 227, 152, 248, 253, 21, 1, 158, 231, + 180, 21, 1, 158, 240, 89, 21, 1, 158, 231, 187, 21, 1, 158, 205, 214, + 226, 85, 21, 1, 158, 223, 85, 21, 1, 158, 227, 129, 21, 1, 158, 223, 252, + 21, 1, 158, 227, 135, 21, 1, 158, 206, 19, 21, 1, 158, 231, 12, 21, 1, + 158, 232, 63, 21, 1, 158, 216, 24, 21, 1, 158, 225, 134, 21, 1, 158, 212, + 209, 21, 1, 158, 224, 148, 21, 1, 158, 211, 155, 205, 199, 21, 1, 158, + 213, 198, 21, 1, 158, 225, 37, 223, 139, 21, 1, 158, 208, 220, 21, 1, + 158, 225, 204, 21, 1, 158, 228, 20, 231, 189, 21, 1, 158, 223, 235, 21, + 1, 158, 225, 32, 21, 1, 158, 230, 89, 21, 1, 158, 227, 137, 21, 1, 158, + 227, 32, 21, 1, 158, 223, 229, 21, 1, 158, 212, 64, 21, 1, 158, 225, 34, + 21, 1, 158, 241, 86, 21, 1, 158, 225, 139, 21, 1, 158, 223, 254, 21, 1, + 158, 223, 250, 21, 1, 158, 249, 77, 21, 1, 158, 208, 222, 21, 1, 158, + 227, 142, 21, 1, 158, 218, 50, 21, 1, 158, 224, 178, 21, 1, 158, 230, + 106, 21, 1, 158, 211, 153, 21, 1, 158, 223, 236, 224, 255, 21, 1, 158, + 224, 170, 21, 1, 158, 231, 193, 21, 1, 158, 225, 39, 21, 1, 158, 227, + 249, 21, 1, 158, 227, 130, 21, 1, 158, 229, 81, 21, 1, 158, 230, 203, 21, + 1, 158, 224, 176, 21, 1, 158, 224, 255, 21, 1, 158, 206, 204, 21, 1, 158, + 225, 35, 21, 1, 158, 223, 239, 21, 1, 158, 223, 231, 21, 1, 158, 230, + 217, 224, 134, 21, 1, 158, 223, 237, 21, 1, 158, 225, 147, 21, 1, 158, + 228, 20, 223, 242, 21, 1, 158, 206, 109, 21, 1, 158, 225, 146, 21, 1, + 158, 215, 111, 21, 1, 158, 216, 27, 21, 1, 158, 227, 138, 21, 1, 158, + 228, 0, 21, 1, 158, 227, 148, 21, 1, 158, 231, 181, 21, 1, 158, 227, 139, + 21, 1, 158, 231, 185, 21, 1, 158, 227, 152, 221, 48, 21, 1, 158, 205, + 179, 21, 1, 158, 224, 166, 21, 1, 158, 226, 243, 21, 1, 158, 226, 112, + 21, 1, 158, 215, 166, 21, 1, 158, 231, 204, 230, 70, 21, 1, 158, 231, + 204, 242, 34, 21, 1, 158, 225, 69, 21, 1, 158, 225, 201, 21, 1, 158, 229, + 190, 21, 1, 158, 221, 9, 21, 1, 158, 221, 150, 21, 1, 158, 212, 80, 21, + 1, 123, 227, 128, 21, 1, 123, 207, 81, 21, 1, 123, 224, 164, 21, 1, 123, + 227, 40, 21, 1, 123, 224, 162, 21, 1, 123, 229, 229, 21, 1, 123, 224, + 167, 21, 1, 123, 223, 249, 21, 1, 123, 225, 53, 21, 1, 123, 223, 139, 21, + 1, 123, 206, 215, 21, 1, 123, 225, 7, 21, 1, 123, 215, 212, 21, 1, 123, + 225, 18, 21, 1, 123, 231, 188, 21, 1, 123, 212, 66, 21, 1, 123, 215, 192, + 21, 1, 123, 224, 175, 21, 1, 123, 213, 170, 21, 1, 123, 231, 193, 21, 1, + 123, 206, 97, 21, 1, 123, 230, 218, 21, 1, 123, 217, 141, 21, 1, 123, + 227, 45, 21, 1, 123, 225, 138, 21, 1, 123, 227, 224, 21, 1, 123, 227, 51, + 21, 1, 123, 216, 26, 21, 1, 123, 206, 42, 21, 1, 123, 224, 169, 21, 1, + 123, 231, 184, 227, 131, 21, 1, 123, 225, 14, 21, 1, 123, 210, 170, 21, + 1, 123, 240, 98, 21, 1, 123, 225, 4, 21, 1, 123, 242, 0, 21, 1, 123, 225, + 142, 21, 1, 123, 227, 24, 21, 1, 123, 230, 0, 21, 1, 123, 225, 124, 21, + 1, 123, 226, 165, 21, 1, 123, 227, 28, 21, 1, 123, 220, 49, 21, 1, 123, + 227, 26, 21, 1, 123, 227, 42, 21, 1, 123, 229, 65, 21, 1, 123, 223, 241, + 21, 1, 123, 227, 151, 21, 1, 123, 230, 193, 21, 1, 123, 223, 128, 21, 1, + 123, 212, 69, 21, 1, 123, 214, 168, 21, 1, 123, 205, 179, 21, 1, 123, + 231, 185, 21, 1, 123, 219, 94, 21, 1, 123, 212, 119, 21, 1, 123, 225, 15, + 21, 1, 123, 227, 47, 21, 1, 123, 223, 240, 21, 1, 123, 231, 183, 21, 1, + 123, 221, 3, 21, 1, 123, 221, 98, 21, 1, 123, 223, 102, 21, 1, 123, 230, + 6, 21, 1, 123, 225, 54, 21, 1, 123, 227, 44, 21, 1, 123, 225, 27, 21, 1, + 123, 205, 193, 21, 1, 123, 221, 236, 21, 1, 123, 205, 192, 21, 1, 123, + 225, 147, 21, 1, 123, 223, 230, 21, 1, 123, 213, 200, 21, 1, 123, 230, + 222, 21, 1, 123, 225, 43, 21, 1, 123, 225, 12, 21, 1, 123, 210, 153, 21, + 1, 123, 227, 55, 21, 1, 123, 230, 212, 21, 1, 123, 223, 238, 21, 1, 123, + 212, 67, 21, 1, 123, 227, 251, 21, 1, 123, 225, 52, 21, 1, 123, 229, 255, + 21, 1, 123, 225, 33, 21, 1, 123, 223, 243, 21, 1, 123, 224, 148, 21, 1, + 123, 240, 82, 21, 1, 123, 230, 236, 21, 1, 123, 219, 3, 222, 179, 21, 1, + 123, 212, 200, 21, 1, 123, 211, 98, 21, 1, 123, 223, 125, 21, 1, 123, + 218, 154, 21, 1, 123, 230, 49, 21, 1, 123, 227, 106, 21, 1, 123, 229, 28, + 21, 1, 123, 213, 119, 21, 1, 123, 226, 114, 21, 1, 123, 215, 178, 21, 1, + 123, 215, 188, 21, 1, 123, 230, 165, 21, 1, 123, 223, 217, 21, 1, 123, + 215, 116, 21, 1, 123, 223, 232, 21, 1, 123, 221, 164, 21, 1, 123, 224, + 230, 21, 1, 123, 215, 145, 21, 1, 123, 220, 64, 21, 1, 123, 226, 54, 21, + 1, 123, 229, 107, 21, 1, 123, 219, 3, 226, 107, 21, 1, 123, 211, 211, 21, + 1, 123, 223, 219, 21, 1, 123, 227, 152, 195, 21, 1, 123, 217, 139, 21, 1, + 123, 242, 72, 21, 1, 88, 225, 146, 21, 1, 88, 211, 104, 21, 1, 88, 227, + 141, 21, 1, 88, 230, 89, 21, 1, 88, 208, 162, 21, 1, 88, 229, 113, 21, 1, + 88, 222, 51, 21, 1, 88, 214, 179, 21, 1, 88, 219, 69, 21, 1, 88, 223, + 245, 21, 1, 88, 225, 117, 21, 1, 88, 220, 79, 21, 1, 88, 212, 176, 21, 1, + 88, 225, 20, 21, 1, 88, 231, 8, 21, 1, 88, 206, 207, 21, 1, 88, 217, 74, + 21, 1, 88, 225, 44, 21, 1, 88, 222, 48, 21, 1, 88, 211, 105, 21, 1, 88, + 230, 216, 21, 1, 88, 229, 127, 21, 1, 88, 223, 248, 21, 1, 88, 224, 252, + 21, 1, 88, 228, 1, 21, 1, 88, 225, 13, 21, 1, 88, 224, 251, 21, 1, 88, + 223, 247, 21, 1, 88, 218, 152, 21, 1, 88, 224, 166, 21, 1, 88, 221, 162, + 21, 1, 88, 217, 196, 21, 1, 88, 225, 28, 21, 1, 88, 227, 34, 21, 1, 88, + 240, 76, 21, 1, 88, 225, 16, 21, 1, 88, 224, 177, 21, 1, 88, 227, 205, + 21, 1, 88, 229, 109, 21, 1, 88, 225, 49, 21, 1, 88, 225, 130, 21, 1, 88, + 212, 199, 223, 230, 21, 1, 88, 216, 28, 21, 1, 88, 220, 74, 21, 1, 88, + 225, 150, 214, 186, 21, 1, 88, 225, 36, 223, 139, 21, 1, 88, 206, 7, 21, + 1, 88, 240, 77, 21, 1, 88, 210, 169, 21, 1, 88, 206, 22, 21, 1, 88, 220, + 211, 21, 1, 88, 210, 158, 21, 1, 88, 231, 191, 21, 1, 88, 213, 199, 21, + 1, 88, 212, 68, 21, 1, 88, 208, 223, 21, 1, 88, 207, 33, 21, 1, 88, 230, + 138, 21, 1, 88, 220, 82, 21, 1, 88, 212, 210, 21, 1, 88, 240, 97, 21, 1, + 88, 225, 59, 21, 1, 88, 215, 191, 21, 1, 88, 227, 29, 21, 1, 88, 227, + 145, 21, 1, 88, 223, 89, 21, 1, 88, 224, 130, 21, 1, 88, 240, 181, 21, 1, + 88, 210, 159, 21, 1, 88, 230, 226, 21, 1, 88, 206, 73, 21, 1, 88, 223, + 126, 247, 208, 21, 1, 88, 205, 253, 21, 1, 88, 227, 46, 21, 1, 88, 225, + 135, 21, 1, 88, 221, 44, 21, 1, 88, 205, 198, 21, 1, 88, 230, 1, 21, 1, + 88, 241, 86, 21, 1, 88, 240, 180, 21, 1, 88, 225, 6, 21, 1, 88, 231, 193, + 21, 1, 88, 228, 4, 21, 1, 88, 225, 19, 21, 1, 88, 240, 83, 21, 1, 88, + 242, 73, 21, 1, 88, 223, 220, 21, 1, 88, 221, 99, 21, 1, 88, 206, 20, 21, + 1, 88, 225, 45, 21, 1, 88, 223, 126, 250, 5, 21, 1, 88, 223, 69, 21, 1, + 88, 220, 185, 21, 1, 88, 226, 243, 21, 1, 88, 241, 84, 21, 1, 88, 225, + 226, 21, 1, 88, 226, 112, 21, 1, 88, 240, 82, 21, 1, 88, 241, 89, 74, 21, + 1, 88, 226, 55, 21, 1, 88, 220, 78, 21, 1, 88, 225, 8, 21, 1, 88, 230, + 203, 21, 1, 88, 221, 41, 21, 1, 88, 223, 233, 21, 1, 88, 206, 21, 21, 1, + 88, 225, 29, 21, 1, 88, 222, 52, 221, 137, 21, 1, 88, 241, 89, 248, 236, + 21, 1, 88, 241, 155, 21, 1, 88, 224, 171, 21, 1, 88, 62, 21, 1, 88, 211, + 98, 21, 1, 88, 76, 21, 1, 88, 74, 21, 1, 88, 230, 87, 21, 1, 88, 222, 52, + 220, 219, 21, 1, 88, 212, 215, 21, 1, 88, 212, 163, 21, 1, 88, 225, 150, + 226, 42, 238, 54, 21, 1, 88, 215, 166, 21, 1, 88, 206, 17, 21, 1, 88, + 224, 245, 21, 1, 88, 205, 203, 21, 1, 88, 205, 230, 213, 99, 21, 1, 88, + 205, 230, 247, 77, 21, 1, 88, 205, 187, 21, 1, 88, 205, 195, 21, 1, 88, + 231, 179, 21, 1, 88, 221, 97, 21, 1, 88, 224, 172, 242, 246, 21, 1, 88, + 220, 75, 21, 1, 88, 206, 213, 21, 1, 88, 242, 21, 21, 1, 88, 209, 34, 21, + 1, 88, 229, 81, 21, 1, 88, 226, 254, 21, 1, 88, 218, 226, 21, 1, 88, 219, + 95, 21, 1, 88, 224, 244, 21, 1, 88, 225, 77, 21, 1, 88, 215, 158, 21, 1, + 88, 215, 145, 21, 1, 88, 241, 89, 219, 6, 21, 1, 88, 199, 21, 1, 88, 221, + 53, 21, 1, 88, 229, 107, 21, 1, 88, 231, 53, 21, 1, 88, 227, 83, 21, 1, + 88, 185, 21, 1, 88, 227, 202, 21, 1, 88, 212, 70, 21, 1, 88, 231, 123, + 21, 1, 88, 226, 168, 21, 1, 88, 212, 98, 21, 1, 88, 242, 43, 21, 1, 88, + 240, 70, 21, 1, 221, 82, 172, 21, 1, 221, 82, 71, 21, 1, 221, 82, 230, + 236, 21, 1, 221, 82, 243, 104, 21, 1, 221, 82, 219, 29, 21, 1, 221, 82, + 212, 200, 21, 1, 221, 82, 223, 125, 21, 1, 221, 82, 230, 141, 21, 1, 221, + 82, 218, 154, 21, 1, 221, 82, 218, 201, 21, 1, 221, 82, 227, 106, 21, 1, + 221, 82, 212, 215, 21, 1, 221, 82, 225, 149, 21, 1, 221, 82, 224, 178, + 21, 1, 221, 82, 229, 28, 21, 1, 221, 82, 213, 119, 21, 1, 221, 82, 215, + 178, 21, 1, 221, 82, 215, 80, 21, 1, 221, 82, 216, 24, 21, 1, 221, 82, + 230, 165, 21, 1, 221, 82, 231, 193, 21, 1, 221, 82, 223, 188, 21, 1, 221, + 82, 223, 217, 21, 1, 221, 82, 224, 149, 21, 1, 221, 82, 205, 229, 21, 1, + 221, 82, 215, 116, 21, 1, 221, 82, 190, 21, 1, 221, 82, 223, 251, 21, 1, + 221, 82, 221, 97, 21, 1, 221, 82, 223, 232, 21, 1, 221, 82, 206, 213, 21, + 1, 221, 82, 221, 164, 21, 1, 221, 82, 218, 50, 21, 1, 221, 82, 224, 230, + 21, 1, 221, 82, 218, 226, 21, 1, 221, 82, 231, 203, 21, 1, 221, 82, 225, + 5, 21, 1, 221, 82, 225, 56, 21, 1, 221, 82, 215, 158, 21, 1, 221, 82, + 220, 79, 21, 1, 221, 82, 241, 155, 21, 1, 221, 82, 207, 96, 21, 1, 221, + 82, 229, 235, 21, 1, 221, 82, 229, 107, 21, 1, 221, 82, 231, 53, 21, 1, + 221, 82, 227, 143, 21, 1, 221, 82, 219, 2, 21, 1, 221, 82, 185, 21, 1, + 221, 82, 226, 181, 21, 1, 221, 82, 227, 151, 21, 1, 221, 82, 212, 80, 21, + 1, 221, 82, 231, 15, 21, 1, 221, 82, 217, 159, 21, 1, 221, 82, 207, 147, + 226, 117, 1, 212, 219, 226, 117, 1, 225, 25, 226, 117, 1, 205, 247, 226, + 117, 1, 226, 211, 226, 117, 1, 250, 183, 226, 117, 1, 246, 145, 226, 117, + 1, 62, 226, 117, 1, 221, 78, 226, 117, 1, 231, 162, 226, 117, 1, 239, 98, + 226, 117, 1, 246, 121, 226, 117, 1, 248, 14, 226, 117, 1, 231, 223, 226, + 117, 1, 222, 180, 226, 117, 1, 228, 1, 226, 117, 1, 224, 199, 226, 117, + 1, 179, 226, 117, 1, 222, 152, 226, 117, 1, 76, 226, 117, 1, 218, 124, + 226, 117, 1, 215, 183, 226, 117, 1, 212, 40, 226, 117, 1, 243, 130, 226, + 117, 1, 207, 96, 226, 117, 1, 75, 226, 117, 1, 231, 53, 226, 117, 1, 230, + 95, 226, 117, 1, 230, 141, 226, 117, 1, 239, 131, 226, 117, 1, 218, 208, + 226, 117, 1, 212, 111, 226, 117, 18, 205, 85, 226, 117, 18, 102, 226, + 117, 18, 105, 226, 117, 18, 142, 226, 117, 18, 139, 226, 117, 18, 168, + 226, 117, 18, 184, 226, 117, 18, 195, 226, 117, 18, 193, 226, 117, 18, + 200, 226, 117, 246, 100, 226, 117, 50, 246, 100, 250, 110, 209, 67, 1, + 243, 24, 250, 110, 209, 67, 1, 172, 250, 110, 209, 67, 1, 217, 86, 250, + 110, 209, 67, 1, 242, 73, 250, 110, 209, 67, 1, 227, 146, 250, 110, 209, + 67, 1, 206, 8, 250, 110, 209, 67, 1, 240, 229, 250, 110, 209, 67, 1, 245, + 173, 250, 110, 209, 67, 1, 231, 14, 250, 110, 209, 67, 1, 232, 122, 250, + 110, 209, 67, 1, 238, 15, 250, 110, 209, 67, 1, 207, 96, 250, 110, 209, + 67, 1, 205, 19, 250, 110, 209, 67, 1, 240, 174, 250, 110, 209, 67, 1, + 245, 51, 250, 110, 209, 67, 1, 248, 148, 250, 110, 209, 67, 1, 209, 155, + 250, 110, 209, 67, 1, 124, 250, 110, 209, 67, 1, 250, 183, 250, 110, 209, + 67, 1, 207, 148, 250, 110, 209, 67, 1, 206, 46, 250, 110, 209, 67, 1, + 179, 250, 110, 209, 67, 1, 207, 93, 250, 110, 209, 67, 1, 62, 250, 110, + 209, 67, 1, 76, 250, 110, 209, 67, 1, 222, 152, 250, 110, 209, 67, 1, 71, + 250, 110, 209, 67, 1, 243, 104, 250, 110, 209, 67, 1, 75, 250, 110, 209, + 67, 1, 74, 250, 110, 209, 67, 36, 127, 211, 118, 250, 110, 209, 67, 36, + 114, 211, 118, 250, 110, 209, 67, 36, 226, 249, 211, 118, 250, 110, 209, + 67, 36, 229, 94, 211, 118, 250, 110, 209, 67, 36, 238, 250, 211, 118, + 250, 110, 209, 67, 241, 82, 213, 251, 112, 111, 22, 231, 220, 112, 111, + 22, 231, 216, 112, 111, 22, 231, 120, 112, 111, 22, 231, 88, 112, 111, + 22, 231, 241, 112, 111, 22, 231, 238, 112, 111, 22, 230, 227, 112, 111, + 22, 230, 200, 112, 111, 22, 231, 222, 112, 111, 22, 231, 177, 112, 111, + 22, 232, 40, 112, 111, 22, 232, 37, 112, 111, 22, 231, 32, 112, 111, 22, + 231, 29, 112, 111, 22, 231, 235, 112, 111, 22, 231, 233, 112, 111, 22, + 230, 229, 112, 111, 22, 230, 228, 112, 111, 22, 231, 50, 112, 111, 22, + 231, 18, 112, 111, 22, 231, 122, 112, 111, 22, 231, 121, 112, 111, 22, + 232, 55, 112, 111, 22, 231, 237, 112, 111, 22, 230, 191, 112, 111, 22, + 230, 182, 112, 111, 22, 232, 62, 112, 111, 22, 232, 56, 112, 111, 107, + 209, 45, 112, 111, 107, 223, 223, 112, 111, 107, 230, 75, 112, 111, 107, + 239, 80, 112, 111, 107, 224, 106, 112, 111, 107, 219, 60, 112, 111, 107, + 224, 133, 112, 111, 107, 219, 249, 112, 111, 107, 206, 61, 112, 111, 107, + 238, 234, 112, 111, 107, 227, 166, 112, 111, 107, 248, 86, 112, 111, 107, + 225, 154, 112, 111, 107, 238, 170, 112, 111, 107, 220, 227, 112, 111, + 107, 223, 228, 112, 111, 107, 225, 191, 112, 111, 107, 251, 184, 112, + 111, 107, 206, 177, 112, 111, 107, 248, 181, 112, 111, 141, 247, 239, + 210, 166, 112, 111, 141, 247, 239, 214, 193, 112, 111, 141, 247, 239, + 231, 195, 112, 111, 141, 247, 239, 231, 153, 112, 111, 141, 247, 239, + 213, 197, 112, 111, 141, 247, 239, 238, 137, 112, 111, 141, 247, 239, + 212, 150, 112, 111, 3, 208, 158, 211, 250, 112, 111, 3, 208, 158, 210, + 232, 248, 139, 112, 111, 3, 247, 239, 248, 77, 112, 111, 3, 208, 158, + 212, 18, 112, 111, 3, 208, 158, 242, 18, 112, 111, 3, 206, 135, 223, 218, + 112, 111, 3, 206, 135, 218, 210, 112, 111, 3, 206, 135, 211, 87, 112, + 111, 3, 206, 135, 242, 55, 112, 111, 3, 208, 158, 217, 68, 112, 111, 3, + 227, 105, 213, 201, 112, 111, 3, 208, 158, 224, 11, 112, 111, 3, 237, + 186, 206, 80, 112, 111, 3, 206, 176, 112, 111, 3, 247, 239, 210, 219, + 218, 114, 112, 111, 18, 205, 85, 112, 111, 18, 102, 112, 111, 18, 105, + 112, 111, 18, 142, 112, 111, 18, 139, 112, 111, 18, 168, 112, 111, 18, + 184, 112, 111, 18, 195, 112, 111, 18, 193, 112, 111, 18, 200, 112, 111, + 43, 212, 93, 112, 111, 43, 238, 28, 112, 111, 43, 212, 99, 211, 240, 112, + 111, 43, 226, 212, 112, 111, 43, 238, 30, 226, 212, 112, 111, 43, 212, + 99, 249, 226, 112, 111, 43, 211, 38, 112, 111, 3, 208, 158, 229, 76, 112, + 111, 3, 206, 132, 112, 111, 3, 238, 229, 112, 111, 3, 212, 9, 238, 229, + 112, 111, 3, 204, 250, 212, 51, 112, 111, 3, 238, 154, 112, 111, 3, 224, + 25, 112, 111, 3, 206, 168, 112, 111, 3, 223, 221, 112, 111, 3, 251, 168, + 112, 111, 3, 210, 103, 248, 138, 112, 111, 3, 227, 105, 210, 235, 112, + 111, 3, 212, 151, 112, 111, 3, 229, 104, 112, 111, 3, 226, 71, 112, 111, + 3, 247, 239, 239, 127, 229, 55, 223, 226, 223, 225, 112, 111, 3, 247, + 239, 247, 39, 210, 226, 112, 111, 3, 247, 239, 210, 101, 112, 111, 3, + 247, 239, 210, 102, 248, 2, 112, 111, 3, 247, 239, 220, 77, 246, 69, 112, + 111, 3, 247, 239, 224, 18, 211, 92, 112, 111, 247, 215, 3, 210, 230, 112, + 111, 247, 215, 3, 206, 48, 112, 111, 247, 215, 3, 229, 187, 112, 111, + 247, 215, 3, 230, 74, 112, 111, 247, 215, 3, 206, 131, 112, 111, 247, + 215, 3, 231, 33, 112, 111, 247, 215, 3, 239, 77, 112, 111, 247, 215, 3, + 226, 110, 112, 111, 247, 215, 3, 211, 251, 112, 111, 247, 215, 3, 210, + 240, 112, 111, 247, 215, 3, 221, 90, 112, 111, 247, 215, 3, 231, 165, + 112, 111, 247, 215, 3, 239, 117, 112, 111, 247, 215, 3, 209, 64, 112, + 111, 247, 215, 3, 242, 52, 112, 111, 247, 215, 3, 206, 87, 112, 111, 247, + 215, 3, 210, 213, 112, 111, 247, 215, 3, 230, 186, 112, 111, 247, 215, 3, + 207, 138, 104, 1, 179, 104, 1, 250, 183, 104, 1, 9, 179, 104, 1, 220, + 240, 104, 1, 185, 104, 1, 227, 1, 104, 1, 252, 19, 185, 104, 1, 242, 73, + 104, 1, 209, 70, 104, 1, 208, 215, 104, 1, 212, 219, 104, 1, 246, 145, + 104, 1, 9, 210, 208, 104, 1, 9, 212, 219, 104, 1, 210, 208, 104, 1, 246, + 54, 104, 1, 199, 104, 1, 224, 234, 104, 1, 9, 224, 103, 104, 1, 252, 19, + 199, 104, 1, 224, 103, 104, 1, 224, 89, 104, 1, 230, 141, 104, 1, 229, + 41, 104, 1, 229, 248, 104, 1, 229, 237, 104, 1, 211, 144, 104, 1, 245, + 59, 104, 1, 211, 136, 104, 1, 245, 58, 104, 1, 172, 104, 1, 240, 244, + 104, 1, 9, 172, 104, 1, 220, 19, 104, 1, 219, 252, 104, 1, 225, 77, 104, + 1, 225, 26, 104, 1, 252, 19, 225, 77, 104, 1, 155, 104, 1, 206, 181, 104, + 1, 240, 99, 104, 1, 240, 74, 104, 1, 210, 218, 104, 1, 243, 180, 104, 1, + 223, 144, 104, 1, 223, 127, 104, 1, 210, 233, 104, 1, 243, 190, 104, 1, + 9, 210, 233, 104, 1, 9, 243, 190, 104, 1, 219, 27, 210, 233, 104, 1, 216, + 2, 104, 1, 214, 96, 104, 1, 205, 81, 104, 1, 205, 10, 104, 1, 210, 243, + 104, 1, 243, 196, 104, 1, 9, 210, 243, 104, 1, 217, 199, 104, 1, 205, + 116, 104, 1, 205, 11, 104, 1, 204, 238, 104, 1, 204, 218, 104, 1, 252, + 19, 204, 238, 104, 1, 204, 210, 104, 1, 204, 217, 104, 1, 207, 96, 104, + 1, 252, 213, 104, 1, 239, 20, 104, 1, 225, 196, 104, 3, 251, 215, 104, 3, + 219, 27, 208, 168, 104, 3, 219, 27, 251, 215, 104, 22, 3, 62, 104, 22, 3, + 253, 164, 104, 22, 3, 252, 209, 104, 22, 3, 252, 122, 104, 22, 3, 252, + 114, 104, 22, 3, 76, 104, 22, 3, 222, 152, 104, 22, 3, 206, 250, 104, 22, + 3, 207, 129, 104, 22, 3, 75, 104, 22, 3, 243, 41, 104, 22, 3, 243, 28, + 104, 22, 3, 222, 204, 104, 22, 3, 74, 104, 22, 3, 237, 190, 104, 22, 3, + 237, 189, 104, 22, 3, 237, 188, 104, 22, 3, 232, 253, 104, 22, 3, 233, + 129, 104, 22, 3, 233, 102, 104, 22, 3, 232, 216, 104, 22, 3, 233, 42, + 104, 22, 3, 71, 104, 22, 3, 210, 18, 104, 22, 3, 210, 17, 104, 22, 3, + 210, 16, 104, 22, 3, 209, 162, 104, 22, 3, 210, 0, 104, 22, 3, 209, 221, + 104, 22, 3, 206, 123, 104, 22, 3, 206, 11, 104, 22, 3, 252, 248, 104, 22, + 3, 252, 244, 104, 22, 3, 242, 229, 104, 22, 3, 218, 93, 242, 229, 104, + 22, 3, 242, 235, 104, 22, 3, 218, 93, 242, 235, 104, 22, 3, 252, 205, + 104, 22, 3, 243, 90, 104, 22, 3, 251, 184, 104, 22, 3, 222, 97, 104, 22, + 3, 226, 33, 104, 22, 3, 225, 79, 104, 135, 218, 167, 104, 135, 211, 102, + 218, 167, 104, 135, 52, 104, 135, 55, 104, 1, 211, 116, 104, 1, 211, 115, + 104, 1, 211, 114, 104, 1, 211, 113, 104, 1, 211, 112, 104, 1, 211, 111, + 104, 1, 211, 110, 104, 1, 219, 27, 211, 117, 104, 1, 219, 27, 211, 116, + 104, 1, 219, 27, 211, 114, 104, 1, 219, 27, 211, 113, 104, 1, 219, 27, + 211, 112, 104, 1, 219, 27, 211, 110, 64, 1, 252, 19, 75, 161, 1, 252, 19, + 206, 52, 95, 1, 239, 155, 95, 1, 206, 195, 95, 1, 222, 67, 95, 1, 213, + 10, 95, 1, 242, 139, 95, 1, 232, 76, 95, 1, 149, 95, 1, 251, 150, 95, 1, + 246, 240, 95, 1, 209, 148, 95, 1, 241, 55, 95, 1, 137, 95, 1, 222, 68, + 226, 33, 95, 1, 246, 241, 182, 95, 1, 242, 140, 226, 33, 95, 1, 232, 77, + 229, 28, 95, 1, 219, 150, 182, 95, 1, 212, 58, 95, 1, 214, 223, 245, 193, + 95, 1, 245, 193, 95, 1, 231, 73, 95, 1, 214, 223, 232, 203, 95, 1, 238, + 238, 95, 1, 229, 249, 95, 1, 218, 213, 95, 1, 229, 28, 95, 1, 226, 33, + 95, 1, 232, 203, 95, 1, 182, 95, 1, 229, 29, 226, 33, 95, 1, 226, 34, + 229, 28, 95, 1, 232, 204, 229, 28, 95, 1, 218, 1, 232, 203, 95, 1, 229, + 29, 2, 245, 23, 95, 1, 226, 34, 2, 245, 23, 95, 1, 232, 204, 2, 245, 23, + 95, 1, 232, 204, 2, 177, 233, 26, 23, 52, 95, 1, 218, 1, 2, 245, 23, 95, + 1, 218, 1, 2, 67, 55, 95, 1, 229, 29, 182, 95, 1, 226, 34, 182, 95, 1, + 232, 204, 182, 95, 1, 218, 1, 182, 95, 1, 229, 29, 226, 34, 182, 95, 1, + 226, 34, 229, 29, 182, 95, 1, 232, 204, 229, 29, 182, 95, 1, 218, 1, 232, + 204, 182, 95, 1, 232, 204, 218, 1, 2, 245, 23, 95, 1, 232, 204, 226, 33, + 95, 1, 232, 204, 226, 34, 182, 95, 1, 218, 1, 213, 10, 95, 1, 218, 1, + 213, 11, 137, 95, 1, 218, 1, 222, 67, 95, 1, 218, 1, 222, 68, 137, 95, 1, + 213, 11, 182, 95, 1, 213, 11, 219, 150, 182, 95, 1, 207, 129, 95, 1, 207, + 30, 95, 1, 207, 130, 137, 95, 1, 218, 1, 226, 33, 95, 1, 218, 1, 229, 28, + 95, 1, 232, 77, 219, 150, 182, 95, 1, 241, 56, 219, 150, 182, 95, 1, 218, + 1, 232, 76, 95, 1, 218, 1, 232, 77, 137, 95, 1, 62, 95, 1, 214, 223, 222, + 78, 95, 1, 222, 230, 95, 1, 76, 95, 1, 252, 69, 95, 1, 74, 95, 1, 75, 95, + 1, 233, 129, 95, 1, 215, 144, 74, 95, 1, 209, 252, 95, 1, 243, 104, 95, + 1, 214, 223, 243, 92, 95, 1, 218, 108, 74, 95, 1, 214, 223, 243, 104, 95, + 1, 152, 74, 95, 1, 206, 52, 95, 1, 71, 95, 1, 242, 192, 95, 1, 206, 146, + 95, 1, 106, 226, 33, 95, 1, 152, 71, 95, 1, 218, 108, 71, 95, 1, 209, + 253, 95, 1, 214, 223, 71, 95, 1, 222, 149, 95, 1, 222, 78, 95, 1, 222, + 97, 95, 1, 207, 96, 95, 1, 206, 250, 95, 1, 207, 20, 95, 1, 207, 43, 95, + 1, 206, 225, 95, 1, 225, 198, 71, 95, 1, 225, 198, 76, 95, 1, 225, 198, + 74, 95, 1, 225, 198, 62, 95, 1, 221, 120, 252, 122, 95, 1, 221, 120, 252, + 136, 95, 1, 214, 223, 243, 41, 95, 1, 214, 223, 252, 122, 95, 1, 214, + 223, 222, 165, 95, 1, 115, 229, 28, 95, 252, 227, 47, 194, 217, 81, 95, + 252, 227, 226, 249, 194, 217, 81, 95, 252, 227, 48, 194, 217, 81, 95, + 252, 227, 114, 79, 217, 81, 95, 252, 227, 226, 249, 79, 217, 81, 95, 252, + 227, 127, 79, 217, 81, 95, 252, 227, 251, 190, 217, 81, 95, 252, 227, + 251, 190, 230, 37, 217, 81, 95, 252, 227, 251, 190, 212, 170, 95, 252, + 227, 251, 190, 212, 191, 95, 252, 227, 251, 190, 174, 109, 95, 252, 227, + 251, 190, 237, 225, 109, 95, 252, 227, 251, 190, 212, 171, 109, 95, 252, + 227, 127, 153, 95, 252, 227, 127, 211, 197, 153, 95, 252, 227, 127, 239, + 236, 95, 252, 227, 127, 152, 239, 236, 95, 252, 227, 127, 245, 23, 95, + 252, 227, 127, 247, 233, 95, 252, 227, 127, 229, 205, 95, 252, 227, 127, + 207, 64, 95, 252, 227, 127, 209, 22, 95, 252, 227, 114, 153, 95, 252, + 227, 114, 211, 197, 153, 95, 252, 227, 114, 239, 236, 95, 252, 227, 114, + 152, 239, 236, 95, 252, 227, 114, 245, 23, 95, 252, 227, 114, 247, 233, + 95, 252, 227, 114, 229, 205, 95, 252, 227, 114, 207, 64, 95, 252, 227, + 114, 209, 22, 95, 252, 227, 114, 45, 95, 3, 148, 2, 247, 59, 95, 212, 17, + 1, 217, 59, 95, 50, 83, 95, 220, 72, 248, 42, 241, 82, 213, 251, 215, + 131, 241, 135, 1, 222, 84, 215, 131, 241, 135, 247, 115, 222, 84, 215, + 131, 241, 135, 130, 214, 7, 215, 131, 241, 135, 120, 214, 7, 58, 30, 16, + 220, 86, 58, 30, 16, 246, 80, 58, 30, 16, 221, 124, 58, 30, 16, 222, 75, + 243, 72, 58, 30, 16, 222, 75, 245, 108, 58, 30, 16, 209, 57, 243, 72, 58, + 30, 16, 209, 57, 245, 108, 58, 30, 16, 231, 244, 58, 30, 16, 213, 27, 58, + 30, 16, 221, 223, 58, 30, 16, 205, 219, 58, 30, 16, 205, 220, 245, 108, + 58, 30, 16, 230, 253, 58, 30, 16, 252, 64, 243, 72, 58, 30, 16, 242, 163, + 243, 72, 58, 30, 16, 212, 109, 58, 30, 16, 231, 199, 58, 30, 16, 252, 54, + 58, 30, 16, 252, 55, 245, 108, 58, 30, 16, 213, 34, 58, 30, 16, 212, 0, + 58, 30, 16, 222, 176, 252, 17, 58, 30, 16, 240, 3, 252, 17, 58, 30, 16, + 220, 85, 58, 30, 16, 248, 102, 58, 30, 16, 209, 46, 58, 30, 16, 232, 225, + 252, 17, 58, 30, 16, 231, 201, 252, 17, 58, 30, 16, 231, 200, 252, 17, + 58, 30, 16, 217, 118, 58, 30, 16, 221, 213, 58, 30, 16, 214, 16, 252, 57, + 58, 30, 16, 222, 74, 252, 17, 58, 30, 16, 209, 56, 252, 17, 58, 30, 16, + 252, 58, 252, 17, 58, 30, 16, 252, 52, 58, 30, 16, 231, 63, 58, 30, 16, + 218, 220, 58, 30, 16, 221, 51, 252, 17, 58, 30, 16, 211, 173, 58, 30, 16, + 252, 120, 58, 30, 16, 217, 62, 58, 30, 16, 213, 37, 252, 17, 58, 30, 16, + 213, 37, 227, 64, 214, 14, 58, 30, 16, 222, 69, 252, 17, 58, 30, 16, 212, + 35, 58, 30, 16, 230, 24, 58, 30, 16, 243, 199, 58, 30, 16, 211, 53, 58, + 30, 16, 212, 82, 58, 30, 16, 231, 0, 58, 30, 16, 252, 64, 242, 163, 225, + 97, 58, 30, 16, 241, 90, 252, 17, 58, 30, 16, 233, 81, 58, 30, 16, 211, + 24, 252, 17, 58, 30, 16, 231, 247, 211, 23, 58, 30, 16, 221, 152, 58, 30, + 16, 220, 90, 58, 30, 16, 231, 34, 58, 30, 16, 248, 26, 252, 17, 58, 30, + 16, 219, 70, 58, 30, 16, 221, 226, 252, 17, 58, 30, 16, 221, 224, 252, + 17, 58, 30, 16, 237, 179, 58, 30, 16, 225, 208, 58, 30, 16, 221, 102, 58, + 30, 16, 231, 35, 252, 151, 58, 30, 16, 211, 24, 252, 151, 58, 30, 16, + 213, 245, 58, 30, 16, 239, 223, 58, 30, 16, 232, 225, 225, 97, 58, 30, + 16, 222, 176, 225, 97, 58, 30, 16, 222, 75, 225, 97, 58, 30, 16, 221, + 101, 58, 30, 16, 231, 19, 58, 30, 16, 221, 100, 58, 30, 16, 230, 255, 58, + 30, 16, 221, 153, 225, 97, 58, 30, 16, 231, 200, 225, 98, 252, 95, 58, + 30, 16, 231, 201, 225, 98, 252, 95, 58, 30, 16, 205, 217, 58, 30, 16, + 252, 55, 225, 97, 58, 30, 16, 252, 56, 213, 35, 225, 97, 58, 30, 16, 205, + 218, 58, 30, 16, 230, 254, 58, 30, 16, 243, 67, 58, 30, 16, 248, 103, 58, + 30, 16, 226, 221, 232, 224, 58, 30, 16, 209, 57, 225, 97, 58, 30, 16, + 221, 51, 225, 97, 58, 30, 16, 220, 91, 225, 97, 58, 30, 16, 222, 172, 58, + 30, 16, 252, 82, 58, 30, 16, 229, 38, 58, 30, 16, 221, 224, 225, 97, 58, + 30, 16, 221, 226, 225, 97, 58, 30, 16, 242, 197, 221, 225, 58, 30, 16, + 230, 163, 58, 30, 16, 252, 83, 58, 30, 16, 211, 24, 225, 97, 58, 30, 16, + 243, 70, 58, 30, 16, 213, 37, 225, 97, 58, 30, 16, 213, 28, 58, 30, 16, + 248, 26, 225, 97, 58, 30, 16, 242, 250, 58, 30, 16, 217, 63, 225, 97, 58, + 30, 16, 206, 162, 231, 63, 58, 30, 16, 211, 21, 58, 30, 16, 220, 92, 58, + 30, 16, 211, 25, 58, 30, 16, 211, 22, 58, 30, 16, 220, 89, 58, 30, 16, + 211, 20, 58, 30, 16, 220, 88, 58, 30, 16, 240, 2, 58, 30, 16, 252, 9, 58, + 30, 16, 242, 197, 252, 9, 58, 30, 16, 222, 69, 225, 97, 58, 30, 16, 212, + 34, 242, 209, 58, 30, 16, 212, 34, 242, 162, 58, 30, 16, 212, 36, 252, + 59, 58, 30, 16, 212, 28, 232, 42, 252, 51, 58, 30, 16, 231, 246, 58, 30, + 16, 243, 30, 58, 30, 16, 206, 14, 231, 243, 58, 30, 16, 206, 14, 252, 95, + 58, 30, 16, 214, 15, 58, 30, 16, 231, 64, 252, 95, 58, 30, 16, 245, 109, + 252, 17, 58, 30, 16, 231, 1, 252, 17, 58, 30, 16, 231, 1, 252, 151, 58, + 30, 16, 231, 1, 225, 97, 58, 30, 16, 252, 58, 225, 97, 58, 30, 16, 252, + 60, 58, 30, 16, 245, 108, 58, 30, 16, 211, 35, 58, 30, 16, 212, 73, 58, + 30, 16, 231, 23, 58, 30, 16, 230, 29, 243, 23, 248, 16, 58, 30, 16, 230, + 29, 243, 200, 248, 17, 58, 30, 16, 230, 29, 211, 37, 248, 17, 58, 30, 16, + 230, 29, 212, 84, 248, 17, 58, 30, 16, 230, 29, 233, 76, 248, 16, 58, 30, + 16, 240, 3, 225, 98, 252, 95, 58, 30, 16, 240, 3, 221, 214, 252, 5, 58, + 30, 16, 240, 3, 221, 214, 245, 197, 58, 30, 16, 245, 132, 58, 30, 16, + 245, 133, 221, 214, 252, 6, 231, 243, 58, 30, 16, 245, 133, 221, 214, + 252, 6, 252, 95, 58, 30, 16, 245, 133, 221, 214, 245, 197, 58, 30, 16, + 211, 42, 58, 30, 16, 252, 10, 58, 30, 16, 233, 83, 58, 30, 16, 245, 154, + 58, 30, 16, 252, 215, 220, 194, 252, 11, 58, 30, 16, 252, 215, 252, 8, + 58, 30, 16, 252, 215, 252, 11, 58, 30, 16, 252, 215, 227, 58, 58, 30, 16, + 252, 215, 227, 69, 58, 30, 16, 252, 215, 240, 4, 58, 30, 16, 252, 215, + 240, 1, 58, 30, 16, 252, 215, 220, 194, 240, 4, 58, 30, 16, 227, 183, + 220, 98, 237, 177, 58, 30, 16, 227, 183, 252, 153, 220, 98, 237, 177, 58, + 30, 16, 227, 183, 245, 196, 237, 177, 58, 30, 16, 227, 183, 252, 153, + 245, 196, 237, 177, 58, 30, 16, 227, 183, 211, 30, 237, 177, 58, 30, 16, + 227, 183, 211, 43, 58, 30, 16, 227, 183, 212, 78, 237, 177, 58, 30, 16, + 227, 183, 212, 78, 230, 33, 237, 177, 58, 30, 16, 227, 183, 230, 33, 237, + 177, 58, 30, 16, 227, 183, 220, 237, 237, 177, 58, 30, 16, 232, 232, 212, + 102, 237, 178, 58, 30, 16, 252, 56, 212, 102, 237, 178, 58, 30, 16, 242, + 46, 212, 75, 58, 30, 16, 242, 46, 226, 161, 58, 30, 16, 242, 46, 245, + 137, 58, 30, 16, 227, 183, 209, 50, 237, 177, 58, 30, 16, 227, 183, 220, + 97, 237, 177, 58, 30, 16, 227, 183, 220, 237, 212, 78, 237, 177, 58, 30, + 16, 239, 255, 226, 34, 252, 59, 58, 30, 16, 239, 255, 226, 34, 245, 107, + 58, 30, 16, 243, 39, 232, 42, 241, 90, 208, 156, 58, 30, 16, 233, 82, 58, + 30, 16, 233, 80, 58, 30, 16, 241, 90, 252, 18, 245, 195, 237, 176, 58, + 30, 16, 241, 90, 245, 152, 179, 58, 30, 16, 241, 90, 245, 152, 225, 208, + 58, 30, 16, 241, 90, 225, 203, 237, 177, 58, 30, 16, 241, 90, 245, 152, + 245, 168, 58, 30, 16, 241, 90, 214, 242, 245, 151, 245, 168, 58, 30, 16, + 241, 90, 245, 152, 231, 224, 58, 30, 16, 241, 90, 245, 152, 205, 19, 58, + 30, 16, 241, 90, 245, 152, 224, 231, 231, 243, 58, 30, 16, 241, 90, 245, + 152, 224, 231, 252, 95, 58, 30, 16, 241, 90, 227, 227, 248, 18, 245, 137, + 58, 30, 16, 241, 90, 227, 227, 248, 18, 226, 161, 58, 30, 16, 241, 251, + 214, 242, 248, 18, 209, 49, 58, 30, 16, 241, 90, 214, 242, 248, 18, 213, + 38, 58, 30, 16, 241, 90, 225, 100, 58, 30, 16, 248, 19, 204, 244, 58, 30, + 16, 248, 19, 231, 62, 58, 30, 16, 248, 19, 214, 144, 58, 30, 16, 241, 90, + 237, 225, 206, 13, 212, 79, 58, 30, 16, 241, 90, 243, 40, 252, 84, 58, + 30, 16, 206, 13, 211, 31, 58, 30, 16, 245, 145, 211, 31, 58, 30, 16, 245, + 145, 212, 79, 58, 30, 16, 245, 145, 252, 61, 243, 200, 245, 43, 58, 30, + 16, 245, 145, 226, 159, 212, 83, 245, 43, 58, 30, 16, 245, 145, 245, 129, + 242, 173, 245, 43, 58, 30, 16, 245, 145, 211, 40, 222, 182, 245, 43, 58, + 30, 16, 206, 13, 252, 61, 243, 200, 245, 43, 58, 30, 16, 206, 13, 226, + 159, 212, 83, 245, 43, 58, 30, 16, 206, 13, 245, 129, 242, 173, 245, 43, + 58, 30, 16, 206, 13, 211, 40, 222, 182, 245, 43, 58, 30, 16, 240, 155, + 245, 144, 58, 30, 16, 240, 155, 206, 12, 58, 30, 16, 245, 153, 252, 61, + 226, 222, 58, 30, 16, 245, 153, 252, 61, 227, 98, 58, 30, 16, 245, 153, + 245, 108, 58, 30, 16, 245, 153, 212, 26, 58, 30, 16, 215, 49, 212, 26, + 58, 30, 16, 215, 49, 212, 27, 245, 93, 58, 30, 16, 215, 49, 212, 27, 211, + 32, 58, 30, 16, 215, 49, 212, 27, 212, 71, 58, 30, 16, 215, 49, 251, 238, + 58, 30, 16, 215, 49, 251, 239, 245, 93, 58, 30, 16, 215, 49, 251, 239, + 211, 32, 58, 30, 16, 215, 49, 251, 239, 212, 71, 58, 30, 16, 245, 130, + 240, 136, 58, 30, 16, 245, 136, 222, 97, 58, 30, 16, 214, 5, 58, 30, 16, + 252, 2, 179, 58, 30, 16, 252, 2, 208, 156, 58, 30, 16, 252, 2, 240, 244, + 58, 30, 16, 252, 2, 245, 168, 58, 30, 16, 252, 2, 231, 224, 58, 30, 16, + 252, 2, 205, 19, 58, 30, 16, 252, 2, 224, 230, 58, 30, 16, 231, 200, 225, + 98, 227, 68, 58, 30, 16, 231, 201, 225, 98, 227, 68, 58, 30, 16, 231, + 200, 225, 98, 231, 243, 58, 30, 16, 231, 201, 225, 98, 231, 243, 58, 30, + 16, 231, 64, 231, 243, 58, 30, 16, 240, 3, 225, 98, 231, 243, 30, 16, + 215, 41, 250, 124, 30, 16, 50, 250, 124, 30, 16, 42, 250, 124, 30, 16, + 218, 225, 42, 250, 124, 30, 16, 246, 77, 250, 124, 30, 16, 215, 144, 250, + 124, 30, 16, 47, 218, 252, 53, 30, 16, 48, 218, 252, 53, 30, 16, 218, + 252, 245, 21, 30, 16, 246, 118, 217, 66, 30, 16, 246, 146, 248, 210, 30, + 16, 217, 66, 30, 16, 247, 170, 30, 16, 218, 250, 241, 240, 30, 16, 218, + 250, 241, 239, 30, 16, 218, 250, 241, 238, 30, 16, 242, 4, 30, 16, 242, + 5, 55, 30, 16, 249, 124, 83, 30, 16, 248, 247, 30, 16, 249, 135, 30, 16, + 145, 30, 16, 222, 162, 214, 34, 30, 16, 210, 107, 214, 34, 30, 16, 211, + 236, 214, 34, 30, 16, 241, 124, 214, 34, 30, 16, 241, 203, 214, 34, 30, + 16, 215, 9, 214, 34, 30, 16, 215, 7, 241, 105, 30, 16, 241, 122, 241, + 105, 30, 16, 241, 56, 247, 206, 30, 16, 241, 56, 247, 207, 222, 99, 252, + 142, 30, 16, 241, 56, 247, 207, 222, 99, 250, 109, 30, 16, 249, 35, 247, + 206, 30, 16, 242, 140, 247, 206, 30, 16, 242, 140, 247, 207, 222, 99, + 252, 142, 30, 16, 242, 140, 247, 207, 222, 99, 250, 109, 30, 16, 243, + 242, 247, 205, 30, 16, 243, 242, 247, 204, 30, 16, 226, 95, 227, 118, + 218, 236, 30, 16, 50, 215, 227, 30, 16, 50, 241, 187, 30, 16, 241, 188, + 209, 206, 30, 16, 241, 188, 244, 8, 30, 16, 225, 192, 209, 206, 30, 16, + 225, 192, 244, 8, 30, 16, 215, 228, 209, 206, 30, 16, 215, 228, 244, 8, + 30, 16, 219, 205, 135, 215, 227, 30, 16, 219, 205, 135, 241, 187, 30, 16, + 247, 152, 211, 177, 30, 16, 247, 11, 211, 177, 30, 16, 222, 99, 252, 142, + 30, 16, 222, 99, 250, 109, 30, 16, 219, 186, 252, 142, 30, 16, 219, 186, + 250, 109, 30, 16, 226, 98, 218, 236, 30, 16, 207, 21, 218, 236, 30, 16, + 160, 218, 236, 30, 16, 219, 205, 218, 236, 30, 16, 243, 84, 218, 236, 30, + 16, 215, 3, 218, 236, 30, 16, 212, 1, 218, 236, 30, 16, 214, 251, 218, + 236, 30, 16, 119, 238, 30, 210, 121, 218, 236, 30, 16, 206, 196, 224, 33, + 30, 16, 101, 224, 33, 30, 16, 247, 234, 206, 196, 224, 33, 30, 16, 49, + 224, 34, 207, 23, 30, 16, 49, 224, 34, 249, 202, 30, 16, 211, 52, 224, + 34, 120, 207, 23, 30, 16, 211, 52, 224, 34, 120, 249, 202, 30, 16, 211, + 52, 224, 34, 47, 207, 23, 30, 16, 211, 52, 224, 34, 47, 249, 202, 30, 16, + 211, 52, 224, 34, 48, 207, 23, 30, 16, 211, 52, 224, 34, 48, 249, 202, + 30, 16, 211, 52, 224, 34, 130, 207, 23, 30, 16, 211, 52, 224, 34, 130, + 249, 202, 30, 16, 211, 52, 224, 34, 120, 48, 207, 23, 30, 16, 211, 52, + 224, 34, 120, 48, 249, 202, 30, 16, 226, 145, 224, 34, 207, 23, 30, 16, + 226, 145, 224, 34, 249, 202, 30, 16, 211, 49, 224, 34, 130, 207, 23, 30, + 16, 211, 49, 224, 34, 130, 249, 202, 30, 16, 221, 217, 224, 33, 30, 16, + 208, 167, 224, 33, 30, 16, 224, 34, 249, 202, 30, 16, 223, 182, 224, 33, + 30, 16, 247, 177, 224, 34, 207, 23, 30, 16, 247, 177, 224, 34, 249, 202, + 30, 16, 249, 122, 30, 16, 207, 21, 224, 37, 30, 16, 160, 224, 37, 30, 16, + 219, 205, 224, 37, 30, 16, 243, 84, 224, 37, 30, 16, 215, 3, 224, 37, 30, + 16, 212, 1, 224, 37, 30, 16, 214, 251, 224, 37, 30, 16, 119, 238, 30, + 210, 121, 224, 37, 30, 16, 36, 214, 9, 30, 16, 36, 214, 114, 214, 9, 30, + 16, 36, 211, 60, 30, 16, 36, 211, 59, 30, 16, 36, 211, 58, 30, 16, 241, + 226, 211, 60, 30, 16, 241, 226, 211, 59, 30, 16, 241, 226, 211, 58, 30, + 16, 36, 251, 181, 245, 23, 30, 16, 36, 241, 195, 30, 16, 36, 241, 194, + 30, 16, 36, 241, 193, 30, 16, 36, 241, 192, 30, 16, 36, 241, 191, 30, 16, + 250, 42, 250, 59, 30, 16, 243, 34, 250, 59, 30, 16, 250, 42, 211, 203, + 30, 16, 243, 34, 211, 203, 30, 16, 250, 42, 214, 216, 30, 16, 243, 34, + 214, 216, 30, 16, 250, 42, 221, 60, 30, 16, 243, 34, 221, 60, 30, 16, 36, + 253, 21, 30, 16, 36, 214, 37, 30, 16, 36, 212, 88, 30, 16, 36, 214, 38, + 30, 16, 36, 227, 195, 30, 16, 36, 227, 194, 30, 16, 36, 253, 20, 30, 16, + 36, 229, 99, 30, 16, 251, 249, 209, 206, 30, 16, 251, 249, 244, 8, 30, + 16, 36, 245, 38, 30, 16, 36, 218, 145, 30, 16, 36, 241, 179, 30, 16, 36, + 214, 212, 30, 16, 36, 250, 21, 30, 16, 36, 50, 211, 107, 30, 16, 36, 211, + 36, 211, 107, 30, 16, 218, 150, 30, 16, 213, 193, 30, 16, 205, 159, 30, + 16, 221, 52, 30, 16, 227, 49, 30, 16, 241, 132, 30, 16, 247, 67, 30, 16, + 245, 252, 30, 16, 239, 250, 224, 38, 214, 235, 30, 16, 239, 250, 224, 38, + 224, 68, 214, 235, 30, 16, 211, 84, 30, 16, 210, 144, 30, 16, 233, 2, + 210, 144, 30, 16, 210, 145, 214, 235, 30, 16, 210, 145, 209, 206, 30, 16, + 222, 112, 213, 224, 30, 16, 222, 112, 213, 221, 30, 16, 222, 112, 213, + 220, 30, 16, 222, 112, 213, 219, 30, 16, 222, 112, 213, 218, 30, 16, 222, + 112, 213, 217, 30, 16, 222, 112, 213, 216, 30, 16, 222, 112, 213, 215, + 30, 16, 222, 112, 213, 214, 30, 16, 222, 112, 213, 223, 30, 16, 222, 112, + 213, 222, 30, 16, 239, 79, 30, 16, 225, 108, 30, 16, 243, 34, 73, 214, 1, + 30, 16, 245, 245, 214, 235, 30, 16, 36, 130, 249, 146, 30, 16, 36, 120, + 249, 146, 30, 16, 36, 239, 91, 30, 16, 36, 214, 203, 220, 241, 30, 16, + 221, 169, 83, 30, 16, 221, 169, 120, 83, 30, 16, 160, 221, 169, 83, 30, + 16, 240, 27, 209, 206, 30, 16, 240, 27, 244, 8, 30, 16, 2, 241, 225, 30, + 16, 246, 102, 30, 16, 246, 103, 252, 156, 30, 16, 227, 164, 30, 16, 229, + 117, 30, 16, 249, 119, 30, 16, 216, 56, 207, 23, 30, 16, 216, 56, 249, + 202, 30, 16, 226, 205, 30, 16, 226, 206, 249, 202, 30, 16, 216, 50, 207, + 23, 30, 16, 216, 50, 249, 202, 30, 16, 241, 73, 207, 23, 30, 16, 241, 73, + 249, 202, 30, 16, 229, 118, 221, 129, 218, 236, 30, 16, 229, 118, 233, + 73, 218, 236, 30, 16, 249, 120, 218, 236, 30, 16, 216, 56, 218, 236, 30, + 16, 226, 206, 218, 236, 30, 16, 216, 50, 218, 236, 30, 16, 212, 100, 221, + 127, 247, 34, 220, 107, 221, 128, 30, 16, 212, 100, 221, 127, 247, 34, + 220, 107, 233, 72, 30, 16, 212, 100, 221, 127, 247, 34, 220, 107, 221, + 129, 245, 118, 30, 16, 212, 100, 233, 71, 247, 34, 220, 107, 221, 128, + 30, 16, 212, 100, 233, 71, 247, 34, 220, 107, 233, 72, 30, 16, 212, 100, + 233, 71, 247, 34, 220, 107, 233, 73, 245, 118, 30, 16, 212, 100, 233, 71, + 247, 34, 220, 107, 233, 73, 245, 117, 30, 16, 212, 100, 233, 71, 247, 34, + 220, 107, 233, 73, 245, 116, 30, 16, 247, 62, 30, 16, 239, 226, 249, 35, + 247, 206, 30, 16, 239, 226, 242, 140, 247, 206, 30, 16, 49, 251, 150, 30, + 16, 208, 187, 30, 16, 220, 208, 30, 16, 247, 197, 30, 16, 217, 108, 30, + 16, 247, 201, 30, 16, 211, 95, 30, 16, 220, 180, 30, 16, 220, 181, 241, + 181, 30, 16, 217, 109, 241, 181, 30, 16, 211, 96, 218, 233, 30, 16, 221, + 110, 213, 184, 27, 208, 172, 224, 41, 213, 88, 27, 208, 172, 224, 41, + 213, 77, 27, 208, 172, 224, 41, 213, 67, 27, 208, 172, 224, 41, 213, 60, + 27, 208, 172, 224, 41, 213, 52, 27, 208, 172, 224, 41, 213, 46, 27, 208, + 172, 224, 41, 213, 45, 27, 208, 172, 224, 41, 213, 44, 27, 208, 172, 224, + 41, 213, 43, 27, 208, 172, 224, 41, 213, 87, 27, 208, 172, 224, 41, 213, + 86, 27, 208, 172, 224, 41, 213, 85, 27, 208, 172, 224, 41, 213, 84, 27, + 208, 172, 224, 41, 213, 83, 27, 208, 172, 224, 41, 213, 82, 27, 208, 172, + 224, 41, 213, 81, 27, 208, 172, 224, 41, 213, 80, 27, 208, 172, 224, 41, + 213, 79, 27, 208, 172, 224, 41, 213, 78, 27, 208, 172, 224, 41, 213, 76, + 27, 208, 172, 224, 41, 213, 75, 27, 208, 172, 224, 41, 213, 74, 27, 208, + 172, 224, 41, 213, 73, 27, 208, 172, 224, 41, 213, 72, 27, 208, 172, 224, + 41, 213, 51, 27, 208, 172, 224, 41, 213, 50, 27, 208, 172, 224, 41, 213, + 49, 27, 208, 172, 224, 41, 213, 48, 27, 208, 172, 224, 41, 213, 47, 27, + 233, 24, 224, 41, 213, 88, 27, 233, 24, 224, 41, 213, 77, 27, 233, 24, + 224, 41, 213, 60, 27, 233, 24, 224, 41, 213, 52, 27, 233, 24, 224, 41, + 213, 45, 27, 233, 24, 224, 41, 213, 44, 27, 233, 24, 224, 41, 213, 86, + 27, 233, 24, 224, 41, 213, 85, 27, 233, 24, 224, 41, 213, 84, 27, 233, + 24, 224, 41, 213, 83, 27, 233, 24, 224, 41, 213, 80, 27, 233, 24, 224, + 41, 213, 79, 27, 233, 24, 224, 41, 213, 78, 27, 233, 24, 224, 41, 213, + 73, 27, 233, 24, 224, 41, 213, 72, 27, 233, 24, 224, 41, 213, 71, 27, + 233, 24, 224, 41, 213, 70, 27, 233, 24, 224, 41, 213, 69, 27, 233, 24, + 224, 41, 213, 68, 27, 233, 24, 224, 41, 213, 66, 27, 233, 24, 224, 41, + 213, 65, 27, 233, 24, 224, 41, 213, 64, 27, 233, 24, 224, 41, 213, 63, + 27, 233, 24, 224, 41, 213, 62, 27, 233, 24, 224, 41, 213, 61, 27, 233, + 24, 224, 41, 213, 59, 27, 233, 24, 224, 41, 213, 58, 27, 233, 24, 224, + 41, 213, 57, 27, 233, 24, 224, 41, 213, 56, 27, 233, 24, 224, 41, 213, + 55, 27, 233, 24, 224, 41, 213, 54, 27, 233, 24, 224, 41, 213, 53, 27, + 233, 24, 224, 41, 213, 51, 27, 233, 24, 224, 41, 213, 50, 27, 233, 24, + 224, 41, 213, 49, 27, 233, 24, 224, 41, 213, 48, 27, 233, 24, 224, 41, + 213, 47, 36, 27, 30, 211, 33, 36, 27, 30, 212, 72, 36, 27, 30, 221, 138, + 27, 30, 230, 28, 226, 160, 33, 243, 120, 245, 131, 33, 239, 55, 243, 120, + 245, 131, 33, 238, 33, 243, 120, 245, 131, 33, 243, 119, 239, 56, 245, + 131, 33, 243, 119, 238, 32, 245, 131, 33, 243, 120, 212, 74, 33, 248, + 128, 212, 74, 33, 241, 82, 247, 233, 212, 74, 33, 226, 197, 212, 74, 33, + 250, 119, 212, 74, 33, 231, 218, 214, 215, 212, 74, 33, 247, 110, 212, + 74, 33, 251, 227, 212, 74, 33, 222, 128, 212, 74, 33, 249, 129, 222, 93, + 212, 74, 33, 245, 247, 222, 123, 245, 86, 212, 74, 33, 245, 83, 212, 74, + 33, 205, 225, 212, 74, 33, 233, 59, 212, 74, 33, 221, 148, 212, 74, 33, + 219, 50, 212, 74, 33, 247, 121, 212, 74, 33, 238, 141, 250, 176, 212, 74, + 33, 207, 89, 212, 74, 33, 241, 157, 212, 74, 33, 252, 251, 212, 74, 33, + 219, 9, 212, 74, 33, 218, 240, 212, 74, 33, 243, 118, 212, 74, 33, 232, + 107, 212, 74, 33, 247, 116, 212, 74, 33, 243, 33, 212, 74, 33, 243, 211, + 212, 74, 33, 248, 98, 212, 74, 33, 246, 1, 212, 74, 33, 24, 218, 239, + 212, 74, 33, 222, 43, 212, 74, 33, 230, 32, 212, 74, 33, 247, 190, 212, + 74, 33, 231, 105, 212, 74, 33, 240, 194, 212, 74, 33, 213, 234, 212, 74, + 33, 220, 61, 212, 74, 33, 241, 81, 212, 74, 33, 218, 241, 212, 74, 33, + 230, 71, 222, 123, 226, 177, 212, 74, 33, 218, 237, 212, 74, 33, 240, 13, + 211, 130, 227, 102, 212, 74, 33, 243, 35, 212, 74, 33, 213, 246, 212, 74, + 33, 239, 228, 212, 74, 33, 243, 26, 212, 74, 33, 221, 190, 212, 74, 33, + 218, 139, 212, 74, 33, 241, 180, 212, 74, 33, 209, 48, 222, 123, 207, 73, + 212, 74, 33, 247, 126, 212, 74, 33, 227, 117, 212, 74, 33, 242, 198, 212, + 74, 33, 209, 215, 212, 74, 33, 245, 119, 212, 74, 33, 247, 192, 226, 123, + 212, 74, 33, 239, 205, 212, 74, 33, 240, 195, 233, 68, 212, 74, 33, 227, + 172, 212, 74, 33, 253, 16, 212, 74, 33, 243, 48, 212, 74, 33, 244, 12, + 212, 74, 33, 207, 71, 212, 74, 33, 215, 36, 212, 74, 33, 233, 33, 212, + 74, 33, 245, 215, 212, 74, 33, 246, 82, 212, 74, 33, 245, 115, 212, 74, + 33, 242, 166, 212, 74, 33, 216, 16, 212, 74, 33, 213, 250, 212, 74, 33, + 239, 93, 212, 74, 33, 247, 148, 212, 74, 33, 247, 187, 212, 74, 33, 242, + 53, 212, 74, 33, 252, 216, 212, 74, 33, 247, 147, 212, 74, 33, 222, 166, + 212, 42, 209, 25, 212, 74, 33, 245, 139, 212, 74, 33, 230, 129, 212, 74, + 33, 241, 128, 247, 79, 218, 115, 209, 217, 18, 102, 247, 79, 218, 115, + 209, 217, 18, 105, 247, 79, 218, 115, 209, 217, 18, 142, 247, 79, 218, + 115, 209, 217, 18, 139, 247, 79, 218, 115, 209, 217, 18, 168, 247, 79, + 218, 115, 209, 217, 18, 184, 247, 79, 218, 115, 209, 217, 18, 195, 247, + 79, 218, 115, 209, 217, 18, 193, 247, 79, 218, 115, 209, 217, 18, 200, + 247, 79, 218, 115, 212, 94, 18, 102, 247, 79, 218, 115, 212, 94, 18, 105, + 247, 79, 218, 115, 212, 94, 18, 142, 247, 79, 218, 115, 212, 94, 18, 139, + 247, 79, 218, 115, 212, 94, 18, 168, 247, 79, 218, 115, 212, 94, 18, 184, + 247, 79, 218, 115, 212, 94, 18, 195, 247, 79, 218, 115, 212, 94, 18, 193, + 247, 79, 218, 115, 212, 94, 18, 200, 11, 24, 6, 62, 11, 24, 6, 251, 150, + 11, 24, 6, 249, 34, 11, 24, 6, 246, 240, 11, 24, 6, 75, 11, 24, 6, 242, + 139, 11, 24, 6, 241, 55, 11, 24, 6, 239, 155, 11, 24, 6, 74, 11, 24, 6, + 232, 203, 11, 24, 6, 232, 76, 11, 24, 6, 149, 11, 24, 6, 229, 28, 11, 24, + 6, 226, 33, 11, 24, 6, 76, 11, 24, 6, 222, 67, 11, 24, 6, 220, 27, 11, + 24, 6, 137, 11, 24, 6, 182, 11, 24, 6, 213, 10, 11, 24, 6, 71, 11, 24, 6, + 209, 148, 11, 24, 6, 207, 129, 11, 24, 6, 206, 195, 11, 24, 6, 206, 123, + 11, 24, 6, 205, 159, 11, 24, 5, 62, 11, 24, 5, 251, 150, 11, 24, 5, 249, + 34, 11, 24, 5, 246, 240, 11, 24, 5, 75, 11, 24, 5, 242, 139, 11, 24, 5, + 241, 55, 11, 24, 5, 239, 155, 11, 24, 5, 74, 11, 24, 5, 232, 203, 11, 24, + 5, 232, 76, 11, 24, 5, 149, 11, 24, 5, 229, 28, 11, 24, 5, 226, 33, 11, + 24, 5, 76, 11, 24, 5, 222, 67, 11, 24, 5, 220, 27, 11, 24, 5, 137, 11, + 24, 5, 182, 11, 24, 5, 213, 10, 11, 24, 5, 71, 11, 24, 5, 209, 148, 11, + 24, 5, 207, 129, 11, 24, 5, 206, 195, 11, 24, 5, 206, 123, 11, 24, 5, + 205, 159, 11, 35, 6, 62, 11, 35, 6, 251, 150, 11, 35, 6, 249, 34, 11, 35, + 6, 246, 240, 11, 35, 6, 75, 11, 35, 6, 242, 139, 11, 35, 6, 241, 55, 11, + 35, 6, 239, 155, 11, 35, 6, 74, 11, 35, 6, 232, 203, 11, 35, 6, 232, 76, + 11, 35, 6, 149, 11, 35, 6, 229, 28, 11, 35, 6, 226, 33, 11, 35, 6, 76, + 11, 35, 6, 222, 67, 11, 35, 6, 220, 27, 11, 35, 6, 137, 11, 35, 6, 182, + 11, 35, 6, 213, 10, 11, 35, 6, 71, 11, 35, 6, 209, 148, 11, 35, 6, 207, + 129, 11, 35, 6, 206, 195, 11, 35, 6, 206, 123, 11, 35, 6, 205, 159, 11, + 35, 5, 62, 11, 35, 5, 251, 150, 11, 35, 5, 249, 34, 11, 35, 5, 246, 240, + 11, 35, 5, 75, 11, 35, 5, 242, 139, 11, 35, 5, 241, 55, 11, 35, 5, 74, + 11, 35, 5, 232, 203, 11, 35, 5, 232, 76, 11, 35, 5, 149, 11, 35, 5, 229, + 28, 11, 35, 5, 226, 33, 11, 35, 5, 76, 11, 35, 5, 222, 67, 11, 35, 5, + 220, 27, 11, 35, 5, 137, 11, 35, 5, 182, 11, 35, 5, 213, 10, 11, 35, 5, + 71, 11, 35, 5, 209, 148, 11, 35, 5, 207, 129, 11, 35, 5, 206, 195, 11, + 35, 5, 206, 123, 11, 35, 5, 205, 159, 11, 24, 35, 6, 62, 11, 24, 35, 6, + 251, 150, 11, 24, 35, 6, 249, 34, 11, 24, 35, 6, 246, 240, 11, 24, 35, 6, + 75, 11, 24, 35, 6, 242, 139, 11, 24, 35, 6, 241, 55, 11, 24, 35, 6, 239, + 155, 11, 24, 35, 6, 74, 11, 24, 35, 6, 232, 203, 11, 24, 35, 6, 232, 76, + 11, 24, 35, 6, 149, 11, 24, 35, 6, 229, 28, 11, 24, 35, 6, 226, 33, 11, + 24, 35, 6, 76, 11, 24, 35, 6, 222, 67, 11, 24, 35, 6, 220, 27, 11, 24, + 35, 6, 137, 11, 24, 35, 6, 182, 11, 24, 35, 6, 213, 10, 11, 24, 35, 6, + 71, 11, 24, 35, 6, 209, 148, 11, 24, 35, 6, 207, 129, 11, 24, 35, 6, 206, + 195, 11, 24, 35, 6, 206, 123, 11, 24, 35, 6, 205, 159, 11, 24, 35, 5, 62, + 11, 24, 35, 5, 251, 150, 11, 24, 35, 5, 249, 34, 11, 24, 35, 5, 246, 240, + 11, 24, 35, 5, 75, 11, 24, 35, 5, 242, 139, 11, 24, 35, 5, 241, 55, 11, + 24, 35, 5, 239, 155, 11, 24, 35, 5, 74, 11, 24, 35, 5, 232, 203, 11, 24, + 35, 5, 232, 76, 11, 24, 35, 5, 149, 11, 24, 35, 5, 229, 28, 11, 24, 35, + 5, 226, 33, 11, 24, 35, 5, 76, 11, 24, 35, 5, 222, 67, 11, 24, 35, 5, + 220, 27, 11, 24, 35, 5, 137, 11, 24, 35, 5, 182, 11, 24, 35, 5, 213, 10, + 11, 24, 35, 5, 71, 11, 24, 35, 5, 209, 148, 11, 24, 35, 5, 207, 129, 11, + 24, 35, 5, 206, 195, 11, 24, 35, 5, 206, 123, 11, 24, 35, 5, 205, 159, + 11, 121, 6, 62, 11, 121, 6, 249, 34, 11, 121, 6, 246, 240, 11, 121, 6, + 241, 55, 11, 121, 6, 232, 203, 11, 121, 6, 232, 76, 11, 121, 6, 226, 33, + 11, 121, 6, 76, 11, 121, 6, 222, 67, 11, 121, 6, 220, 27, 11, 121, 6, + 182, 11, 121, 6, 213, 10, 11, 121, 6, 71, 11, 121, 6, 209, 148, 11, 121, + 6, 207, 129, 11, 121, 6, 206, 195, 11, 121, 6, 206, 123, 11, 121, 6, 205, + 159, 11, 121, 5, 62, 11, 121, 5, 251, 150, 11, 121, 5, 249, 34, 11, 121, + 5, 246, 240, 11, 121, 5, 242, 139, 11, 121, 5, 239, 155, 11, 121, 5, 74, + 11, 121, 5, 232, 203, 11, 121, 5, 232, 76, 11, 121, 5, 149, 11, 121, 5, + 229, 28, 11, 121, 5, 226, 33, 11, 121, 5, 222, 67, 11, 121, 5, 220, 27, + 11, 121, 5, 137, 11, 121, 5, 182, 11, 121, 5, 213, 10, 11, 121, 5, 71, + 11, 121, 5, 209, 148, 11, 121, 5, 207, 129, 11, 121, 5, 206, 195, 11, + 121, 5, 206, 123, 11, 121, 5, 205, 159, 11, 24, 121, 6, 62, 11, 24, 121, + 6, 251, 150, 11, 24, 121, 6, 249, 34, 11, 24, 121, 6, 246, 240, 11, 24, + 121, 6, 75, 11, 24, 121, 6, 242, 139, 11, 24, 121, 6, 241, 55, 11, 24, + 121, 6, 239, 155, 11, 24, 121, 6, 74, 11, 24, 121, 6, 232, 203, 11, 24, + 121, 6, 232, 76, 11, 24, 121, 6, 149, 11, 24, 121, 6, 229, 28, 11, 24, + 121, 6, 226, 33, 11, 24, 121, 6, 76, 11, 24, 121, 6, 222, 67, 11, 24, + 121, 6, 220, 27, 11, 24, 121, 6, 137, 11, 24, 121, 6, 182, 11, 24, 121, + 6, 213, 10, 11, 24, 121, 6, 71, 11, 24, 121, 6, 209, 148, 11, 24, 121, 6, + 207, 129, 11, 24, 121, 6, 206, 195, 11, 24, 121, 6, 206, 123, 11, 24, + 121, 6, 205, 159, 11, 24, 121, 5, 62, 11, 24, 121, 5, 251, 150, 11, 24, + 121, 5, 249, 34, 11, 24, 121, 5, 246, 240, 11, 24, 121, 5, 75, 11, 24, + 121, 5, 242, 139, 11, 24, 121, 5, 241, 55, 11, 24, 121, 5, 239, 155, 11, + 24, 121, 5, 74, 11, 24, 121, 5, 232, 203, 11, 24, 121, 5, 232, 76, 11, + 24, 121, 5, 149, 11, 24, 121, 5, 229, 28, 11, 24, 121, 5, 226, 33, 11, + 24, 121, 5, 76, 11, 24, 121, 5, 222, 67, 11, 24, 121, 5, 220, 27, 11, 24, + 121, 5, 137, 11, 24, 121, 5, 182, 11, 24, 121, 5, 213, 10, 11, 24, 121, + 5, 71, 11, 24, 121, 5, 209, 148, 11, 24, 121, 5, 207, 129, 11, 24, 121, + 5, 206, 195, 11, 24, 121, 5, 206, 123, 11, 24, 121, 5, 205, 159, 11, 154, + 6, 62, 11, 154, 6, 251, 150, 11, 154, 6, 246, 240, 11, 154, 6, 75, 11, + 154, 6, 242, 139, 11, 154, 6, 241, 55, 11, 154, 6, 232, 203, 11, 154, 6, + 232, 76, 11, 154, 6, 149, 11, 154, 6, 229, 28, 11, 154, 6, 226, 33, 11, + 154, 6, 76, 11, 154, 6, 222, 67, 11, 154, 6, 220, 27, 11, 154, 6, 182, + 11, 154, 6, 213, 10, 11, 154, 6, 71, 11, 154, 6, 209, 148, 11, 154, 6, + 207, 129, 11, 154, 6, 206, 195, 11, 154, 6, 206, 123, 11, 154, 5, 62, 11, + 154, 5, 251, 150, 11, 154, 5, 249, 34, 11, 154, 5, 246, 240, 11, 154, 5, + 75, 11, 154, 5, 242, 139, 11, 154, 5, 241, 55, 11, 154, 5, 239, 155, 11, + 154, 5, 74, 11, 154, 5, 232, 203, 11, 154, 5, 232, 76, 11, 154, 5, 149, + 11, 154, 5, 229, 28, 11, 154, 5, 226, 33, 11, 154, 5, 76, 11, 154, 5, + 222, 67, 11, 154, 5, 220, 27, 11, 154, 5, 137, 11, 154, 5, 182, 11, 154, + 5, 213, 10, 11, 154, 5, 71, 11, 154, 5, 209, 148, 11, 154, 5, 207, 129, + 11, 154, 5, 206, 195, 11, 154, 5, 206, 123, 11, 154, 5, 205, 159, 11, + 159, 6, 62, 11, 159, 6, 251, 150, 11, 159, 6, 246, 240, 11, 159, 6, 75, + 11, 159, 6, 242, 139, 11, 159, 6, 241, 55, 11, 159, 6, 74, 11, 159, 6, + 232, 203, 11, 159, 6, 232, 76, 11, 159, 6, 149, 11, 159, 6, 229, 28, 11, + 159, 6, 76, 11, 159, 6, 182, 11, 159, 6, 213, 10, 11, 159, 6, 71, 11, + 159, 6, 209, 148, 11, 159, 6, 207, 129, 11, 159, 6, 206, 195, 11, 159, 6, + 206, 123, 11, 159, 5, 62, 11, 159, 5, 251, 150, 11, 159, 5, 249, 34, 11, + 159, 5, 246, 240, 11, 159, 5, 75, 11, 159, 5, 242, 139, 11, 159, 5, 241, + 55, 11, 159, 5, 239, 155, 11, 159, 5, 74, 11, 159, 5, 232, 203, 11, 159, + 5, 232, 76, 11, 159, 5, 149, 11, 159, 5, 229, 28, 11, 159, 5, 226, 33, + 11, 159, 5, 76, 11, 159, 5, 222, 67, 11, 159, 5, 220, 27, 11, 159, 5, + 137, 11, 159, 5, 182, 11, 159, 5, 213, 10, 11, 159, 5, 71, 11, 159, 5, + 209, 148, 11, 159, 5, 207, 129, 11, 159, 5, 206, 195, 11, 159, 5, 206, + 123, 11, 159, 5, 205, 159, 11, 24, 154, 6, 62, 11, 24, 154, 6, 251, 150, + 11, 24, 154, 6, 249, 34, 11, 24, 154, 6, 246, 240, 11, 24, 154, 6, 75, + 11, 24, 154, 6, 242, 139, 11, 24, 154, 6, 241, 55, 11, 24, 154, 6, 239, + 155, 11, 24, 154, 6, 74, 11, 24, 154, 6, 232, 203, 11, 24, 154, 6, 232, + 76, 11, 24, 154, 6, 149, 11, 24, 154, 6, 229, 28, 11, 24, 154, 6, 226, + 33, 11, 24, 154, 6, 76, 11, 24, 154, 6, 222, 67, 11, 24, 154, 6, 220, 27, + 11, 24, 154, 6, 137, 11, 24, 154, 6, 182, 11, 24, 154, 6, 213, 10, 11, + 24, 154, 6, 71, 11, 24, 154, 6, 209, 148, 11, 24, 154, 6, 207, 129, 11, + 24, 154, 6, 206, 195, 11, 24, 154, 6, 206, 123, 11, 24, 154, 6, 205, 159, + 11, 24, 154, 5, 62, 11, 24, 154, 5, 251, 150, 11, 24, 154, 5, 249, 34, + 11, 24, 154, 5, 246, 240, 11, 24, 154, 5, 75, 11, 24, 154, 5, 242, 139, + 11, 24, 154, 5, 241, 55, 11, 24, 154, 5, 239, 155, 11, 24, 154, 5, 74, + 11, 24, 154, 5, 232, 203, 11, 24, 154, 5, 232, 76, 11, 24, 154, 5, 149, + 11, 24, 154, 5, 229, 28, 11, 24, 154, 5, 226, 33, 11, 24, 154, 5, 76, 11, + 24, 154, 5, 222, 67, 11, 24, 154, 5, 220, 27, 11, 24, 154, 5, 137, 11, + 24, 154, 5, 182, 11, 24, 154, 5, 213, 10, 11, 24, 154, 5, 71, 11, 24, + 154, 5, 209, 148, 11, 24, 154, 5, 207, 129, 11, 24, 154, 5, 206, 195, 11, + 24, 154, 5, 206, 123, 11, 24, 154, 5, 205, 159, 11, 38, 6, 62, 11, 38, 6, + 251, 150, 11, 38, 6, 249, 34, 11, 38, 6, 246, 240, 11, 38, 6, 75, 11, 38, + 6, 242, 139, 11, 38, 6, 241, 55, 11, 38, 6, 239, 155, 11, 38, 6, 74, 11, + 38, 6, 232, 203, 11, 38, 6, 232, 76, 11, 38, 6, 149, 11, 38, 6, 229, 28, + 11, 38, 6, 226, 33, 11, 38, 6, 76, 11, 38, 6, 222, 67, 11, 38, 6, 220, + 27, 11, 38, 6, 137, 11, 38, 6, 182, 11, 38, 6, 213, 10, 11, 38, 6, 71, + 11, 38, 6, 209, 148, 11, 38, 6, 207, 129, 11, 38, 6, 206, 195, 11, 38, 6, + 206, 123, 11, 38, 6, 205, 159, 11, 38, 5, 62, 11, 38, 5, 251, 150, 11, + 38, 5, 249, 34, 11, 38, 5, 246, 240, 11, 38, 5, 75, 11, 38, 5, 242, 139, + 11, 38, 5, 241, 55, 11, 38, 5, 239, 155, 11, 38, 5, 74, 11, 38, 5, 232, + 203, 11, 38, 5, 232, 76, 11, 38, 5, 149, 11, 38, 5, 229, 28, 11, 38, 5, + 226, 33, 11, 38, 5, 76, 11, 38, 5, 222, 67, 11, 38, 5, 220, 27, 11, 38, + 5, 137, 11, 38, 5, 182, 11, 38, 5, 213, 10, 11, 38, 5, 71, 11, 38, 5, + 209, 148, 11, 38, 5, 207, 129, 11, 38, 5, 206, 195, 11, 38, 5, 206, 123, + 11, 38, 5, 205, 159, 11, 38, 24, 6, 62, 11, 38, 24, 6, 251, 150, 11, 38, + 24, 6, 249, 34, 11, 38, 24, 6, 246, 240, 11, 38, 24, 6, 75, 11, 38, 24, + 6, 242, 139, 11, 38, 24, 6, 241, 55, 11, 38, 24, 6, 239, 155, 11, 38, 24, + 6, 74, 11, 38, 24, 6, 232, 203, 11, 38, 24, 6, 232, 76, 11, 38, 24, 6, + 149, 11, 38, 24, 6, 229, 28, 11, 38, 24, 6, 226, 33, 11, 38, 24, 6, 76, + 11, 38, 24, 6, 222, 67, 11, 38, 24, 6, 220, 27, 11, 38, 24, 6, 137, 11, + 38, 24, 6, 182, 11, 38, 24, 6, 213, 10, 11, 38, 24, 6, 71, 11, 38, 24, 6, + 209, 148, 11, 38, 24, 6, 207, 129, 11, 38, 24, 6, 206, 195, 11, 38, 24, + 6, 206, 123, 11, 38, 24, 6, 205, 159, 11, 38, 24, 5, 62, 11, 38, 24, 5, + 251, 150, 11, 38, 24, 5, 249, 34, 11, 38, 24, 5, 246, 240, 11, 38, 24, 5, + 75, 11, 38, 24, 5, 242, 139, 11, 38, 24, 5, 241, 55, 11, 38, 24, 5, 239, + 155, 11, 38, 24, 5, 74, 11, 38, 24, 5, 232, 203, 11, 38, 24, 5, 232, 76, + 11, 38, 24, 5, 149, 11, 38, 24, 5, 229, 28, 11, 38, 24, 5, 226, 33, 11, + 38, 24, 5, 76, 11, 38, 24, 5, 222, 67, 11, 38, 24, 5, 220, 27, 11, 38, + 24, 5, 137, 11, 38, 24, 5, 182, 11, 38, 24, 5, 213, 10, 11, 38, 24, 5, + 71, 11, 38, 24, 5, 209, 148, 11, 38, 24, 5, 207, 129, 11, 38, 24, 5, 206, + 195, 11, 38, 24, 5, 206, 123, 11, 38, 24, 5, 205, 159, 11, 38, 35, 6, 62, + 11, 38, 35, 6, 251, 150, 11, 38, 35, 6, 249, 34, 11, 38, 35, 6, 246, 240, + 11, 38, 35, 6, 75, 11, 38, 35, 6, 242, 139, 11, 38, 35, 6, 241, 55, 11, + 38, 35, 6, 239, 155, 11, 38, 35, 6, 74, 11, 38, 35, 6, 232, 203, 11, 38, + 35, 6, 232, 76, 11, 38, 35, 6, 149, 11, 38, 35, 6, 229, 28, 11, 38, 35, + 6, 226, 33, 11, 38, 35, 6, 76, 11, 38, 35, 6, 222, 67, 11, 38, 35, 6, + 220, 27, 11, 38, 35, 6, 137, 11, 38, 35, 6, 182, 11, 38, 35, 6, 213, 10, + 11, 38, 35, 6, 71, 11, 38, 35, 6, 209, 148, 11, 38, 35, 6, 207, 129, 11, + 38, 35, 6, 206, 195, 11, 38, 35, 6, 206, 123, 11, 38, 35, 6, 205, 159, + 11, 38, 35, 5, 62, 11, 38, 35, 5, 251, 150, 11, 38, 35, 5, 249, 34, 11, + 38, 35, 5, 246, 240, 11, 38, 35, 5, 75, 11, 38, 35, 5, 242, 139, 11, 38, + 35, 5, 241, 55, 11, 38, 35, 5, 239, 155, 11, 38, 35, 5, 74, 11, 38, 35, + 5, 232, 203, 11, 38, 35, 5, 232, 76, 11, 38, 35, 5, 149, 11, 38, 35, 5, + 229, 28, 11, 38, 35, 5, 226, 33, 11, 38, 35, 5, 76, 11, 38, 35, 5, 222, + 67, 11, 38, 35, 5, 220, 27, 11, 38, 35, 5, 137, 11, 38, 35, 5, 182, 11, + 38, 35, 5, 213, 10, 11, 38, 35, 5, 71, 11, 38, 35, 5, 209, 148, 11, 38, + 35, 5, 207, 129, 11, 38, 35, 5, 206, 195, 11, 38, 35, 5, 206, 123, 11, + 38, 35, 5, 205, 159, 11, 38, 24, 35, 6, 62, 11, 38, 24, 35, 6, 251, 150, + 11, 38, 24, 35, 6, 249, 34, 11, 38, 24, 35, 6, 246, 240, 11, 38, 24, 35, + 6, 75, 11, 38, 24, 35, 6, 242, 139, 11, 38, 24, 35, 6, 241, 55, 11, 38, + 24, 35, 6, 239, 155, 11, 38, 24, 35, 6, 74, 11, 38, 24, 35, 6, 232, 203, + 11, 38, 24, 35, 6, 232, 76, 11, 38, 24, 35, 6, 149, 11, 38, 24, 35, 6, + 229, 28, 11, 38, 24, 35, 6, 226, 33, 11, 38, 24, 35, 6, 76, 11, 38, 24, + 35, 6, 222, 67, 11, 38, 24, 35, 6, 220, 27, 11, 38, 24, 35, 6, 137, 11, + 38, 24, 35, 6, 182, 11, 38, 24, 35, 6, 213, 10, 11, 38, 24, 35, 6, 71, + 11, 38, 24, 35, 6, 209, 148, 11, 38, 24, 35, 6, 207, 129, 11, 38, 24, 35, + 6, 206, 195, 11, 38, 24, 35, 6, 206, 123, 11, 38, 24, 35, 6, 205, 159, + 11, 38, 24, 35, 5, 62, 11, 38, 24, 35, 5, 251, 150, 11, 38, 24, 35, 5, + 249, 34, 11, 38, 24, 35, 5, 246, 240, 11, 38, 24, 35, 5, 75, 11, 38, 24, + 35, 5, 242, 139, 11, 38, 24, 35, 5, 241, 55, 11, 38, 24, 35, 5, 239, 155, + 11, 38, 24, 35, 5, 74, 11, 38, 24, 35, 5, 232, 203, 11, 38, 24, 35, 5, + 232, 76, 11, 38, 24, 35, 5, 149, 11, 38, 24, 35, 5, 229, 28, 11, 38, 24, + 35, 5, 226, 33, 11, 38, 24, 35, 5, 76, 11, 38, 24, 35, 5, 222, 67, 11, + 38, 24, 35, 5, 220, 27, 11, 38, 24, 35, 5, 137, 11, 38, 24, 35, 5, 182, + 11, 38, 24, 35, 5, 213, 10, 11, 38, 24, 35, 5, 71, 11, 38, 24, 35, 5, + 209, 148, 11, 38, 24, 35, 5, 207, 129, 11, 38, 24, 35, 5, 206, 195, 11, + 38, 24, 35, 5, 206, 123, 11, 38, 24, 35, 5, 205, 159, 11, 226, 156, 6, + 62, 11, 226, 156, 6, 251, 150, 11, 226, 156, 6, 249, 34, 11, 226, 156, 6, + 246, 240, 11, 226, 156, 6, 75, 11, 226, 156, 6, 242, 139, 11, 226, 156, + 6, 241, 55, 11, 226, 156, 6, 239, 155, 11, 226, 156, 6, 74, 11, 226, 156, + 6, 232, 203, 11, 226, 156, 6, 232, 76, 11, 226, 156, 6, 149, 11, 226, + 156, 6, 229, 28, 11, 226, 156, 6, 226, 33, 11, 226, 156, 6, 76, 11, 226, + 156, 6, 222, 67, 11, 226, 156, 6, 220, 27, 11, 226, 156, 6, 137, 11, 226, + 156, 6, 182, 11, 226, 156, 6, 213, 10, 11, 226, 156, 6, 71, 11, 226, 156, + 6, 209, 148, 11, 226, 156, 6, 207, 129, 11, 226, 156, 6, 206, 195, 11, + 226, 156, 6, 206, 123, 11, 226, 156, 6, 205, 159, 11, 226, 156, 5, 62, + 11, 226, 156, 5, 251, 150, 11, 226, 156, 5, 249, 34, 11, 226, 156, 5, + 246, 240, 11, 226, 156, 5, 75, 11, 226, 156, 5, 242, 139, 11, 226, 156, + 5, 241, 55, 11, 226, 156, 5, 239, 155, 11, 226, 156, 5, 74, 11, 226, 156, + 5, 232, 203, 11, 226, 156, 5, 232, 76, 11, 226, 156, 5, 149, 11, 226, + 156, 5, 229, 28, 11, 226, 156, 5, 226, 33, 11, 226, 156, 5, 76, 11, 226, + 156, 5, 222, 67, 11, 226, 156, 5, 220, 27, 11, 226, 156, 5, 137, 11, 226, + 156, 5, 182, 11, 226, 156, 5, 213, 10, 11, 226, 156, 5, 71, 11, 226, 156, + 5, 209, 148, 11, 226, 156, 5, 207, 129, 11, 226, 156, 5, 206, 195, 11, + 226, 156, 5, 206, 123, 11, 226, 156, 5, 205, 159, 11, 35, 5, 245, 22, 74, + 11, 35, 5, 245, 22, 232, 203, 11, 24, 6, 252, 144, 11, 24, 6, 250, 8, 11, + 24, 6, 240, 215, 11, 24, 6, 245, 227, 11, 24, 6, 242, 244, 11, 24, 6, + 205, 84, 11, 24, 6, 242, 201, 11, 24, 6, 212, 23, 11, 24, 6, 232, 249, + 11, 24, 6, 232, 14, 11, 24, 6, 230, 102, 11, 24, 6, 226, 114, 11, 24, 6, + 223, 217, 11, 24, 6, 206, 169, 11, 24, 6, 222, 168, 11, 24, 6, 221, 53, + 11, 24, 6, 218, 210, 11, 24, 6, 212, 24, 93, 11, 24, 6, 215, 63, 11, 24, + 6, 212, 151, 11, 24, 6, 209, 200, 11, 24, 6, 221, 78, 11, 24, 6, 248, 58, + 11, 24, 6, 220, 93, 11, 24, 6, 222, 170, 11, 24, 225, 227, 11, 24, 5, + 252, 144, 11, 24, 5, 250, 8, 11, 24, 5, 240, 215, 11, 24, 5, 245, 227, + 11, 24, 5, 242, 244, 11, 24, 5, 205, 84, 11, 24, 5, 242, 201, 11, 24, 5, + 212, 23, 11, 24, 5, 232, 249, 11, 24, 5, 232, 14, 11, 24, 5, 230, 102, + 11, 24, 5, 226, 114, 11, 24, 5, 223, 217, 11, 24, 5, 206, 169, 11, 24, 5, + 222, 168, 11, 24, 5, 221, 53, 11, 24, 5, 218, 210, 11, 24, 5, 42, 215, + 63, 11, 24, 5, 215, 63, 11, 24, 5, 212, 151, 11, 24, 5, 209, 200, 11, 24, + 5, 221, 78, 11, 24, 5, 248, 58, 11, 24, 5, 220, 93, 11, 24, 5, 222, 170, + 11, 24, 221, 209, 245, 140, 11, 24, 242, 245, 93, 11, 24, 212, 24, 93, + 11, 24, 232, 15, 93, 11, 24, 221, 79, 93, 11, 24, 218, 211, 93, 11, 24, + 221, 54, 93, 11, 35, 6, 252, 144, 11, 35, 6, 250, 8, 11, 35, 6, 240, 215, + 11, 35, 6, 245, 227, 11, 35, 6, 242, 244, 11, 35, 6, 205, 84, 11, 35, 6, + 242, 201, 11, 35, 6, 212, 23, 11, 35, 6, 232, 249, 11, 35, 6, 232, 14, + 11, 35, 6, 230, 102, 11, 35, 6, 226, 114, 11, 35, 6, 223, 217, 11, 35, 6, + 206, 169, 11, 35, 6, 222, 168, 11, 35, 6, 221, 53, 11, 35, 6, 218, 210, + 11, 35, 6, 212, 24, 93, 11, 35, 6, 215, 63, 11, 35, 6, 212, 151, 11, 35, + 6, 209, 200, 11, 35, 6, 221, 78, 11, 35, 6, 248, 58, 11, 35, 6, 220, 93, + 11, 35, 6, 222, 170, 11, 35, 225, 227, 11, 35, 5, 252, 144, 11, 35, 5, + 250, 8, 11, 35, 5, 240, 215, 11, 35, 5, 245, 227, 11, 35, 5, 242, 244, + 11, 35, 5, 205, 84, 11, 35, 5, 242, 201, 11, 35, 5, 212, 23, 11, 35, 5, + 232, 249, 11, 35, 5, 232, 14, 11, 35, 5, 230, 102, 11, 35, 5, 226, 114, + 11, 35, 5, 223, 217, 11, 35, 5, 206, 169, 11, 35, 5, 222, 168, 11, 35, 5, + 221, 53, 11, 35, 5, 218, 210, 11, 35, 5, 42, 215, 63, 11, 35, 5, 215, 63, + 11, 35, 5, 212, 151, 11, 35, 5, 209, 200, 11, 35, 5, 221, 78, 11, 35, 5, + 248, 58, 11, 35, 5, 220, 93, 11, 35, 5, 222, 170, 11, 35, 221, 209, 245, + 140, 11, 35, 242, 245, 93, 11, 35, 212, 24, 93, 11, 35, 232, 15, 93, 11, + 35, 221, 79, 93, 11, 35, 218, 211, 93, 11, 35, 221, 54, 93, 11, 24, 35, + 6, 252, 144, 11, 24, 35, 6, 250, 8, 11, 24, 35, 6, 240, 215, 11, 24, 35, + 6, 245, 227, 11, 24, 35, 6, 242, 244, 11, 24, 35, 6, 205, 84, 11, 24, 35, + 6, 242, 201, 11, 24, 35, 6, 212, 23, 11, 24, 35, 6, 232, 249, 11, 24, 35, + 6, 232, 14, 11, 24, 35, 6, 230, 102, 11, 24, 35, 6, 226, 114, 11, 24, 35, + 6, 223, 217, 11, 24, 35, 6, 206, 169, 11, 24, 35, 6, 222, 168, 11, 24, + 35, 6, 221, 53, 11, 24, 35, 6, 218, 210, 11, 24, 35, 6, 212, 24, 93, 11, + 24, 35, 6, 215, 63, 11, 24, 35, 6, 212, 151, 11, 24, 35, 6, 209, 200, 11, + 24, 35, 6, 221, 78, 11, 24, 35, 6, 248, 58, 11, 24, 35, 6, 220, 93, 11, + 24, 35, 6, 222, 170, 11, 24, 35, 225, 227, 11, 24, 35, 5, 252, 144, 11, + 24, 35, 5, 250, 8, 11, 24, 35, 5, 240, 215, 11, 24, 35, 5, 245, 227, 11, + 24, 35, 5, 242, 244, 11, 24, 35, 5, 205, 84, 11, 24, 35, 5, 242, 201, 11, + 24, 35, 5, 212, 23, 11, 24, 35, 5, 232, 249, 11, 24, 35, 5, 232, 14, 11, + 24, 35, 5, 230, 102, 11, 24, 35, 5, 226, 114, 11, 24, 35, 5, 223, 217, + 11, 24, 35, 5, 206, 169, 11, 24, 35, 5, 222, 168, 11, 24, 35, 5, 221, 53, + 11, 24, 35, 5, 218, 210, 11, 24, 35, 5, 42, 215, 63, 11, 24, 35, 5, 215, + 63, 11, 24, 35, 5, 212, 151, 11, 24, 35, 5, 209, 200, 11, 24, 35, 5, 221, + 78, 11, 24, 35, 5, 248, 58, 11, 24, 35, 5, 220, 93, 11, 24, 35, 5, 222, + 170, 11, 24, 35, 221, 209, 245, 140, 11, 24, 35, 242, 245, 93, 11, 24, + 35, 212, 24, 93, 11, 24, 35, 232, 15, 93, 11, 24, 35, 221, 79, 93, 11, + 24, 35, 218, 211, 93, 11, 24, 35, 221, 54, 93, 11, 38, 24, 6, 252, 144, + 11, 38, 24, 6, 250, 8, 11, 38, 24, 6, 240, 215, 11, 38, 24, 6, 245, 227, + 11, 38, 24, 6, 242, 244, 11, 38, 24, 6, 205, 84, 11, 38, 24, 6, 242, 201, + 11, 38, 24, 6, 212, 23, 11, 38, 24, 6, 232, 249, 11, 38, 24, 6, 232, 14, + 11, 38, 24, 6, 230, 102, 11, 38, 24, 6, 226, 114, 11, 38, 24, 6, 223, + 217, 11, 38, 24, 6, 206, 169, 11, 38, 24, 6, 222, 168, 11, 38, 24, 6, + 221, 53, 11, 38, 24, 6, 218, 210, 11, 38, 24, 6, 212, 24, 93, 11, 38, 24, + 6, 215, 63, 11, 38, 24, 6, 212, 151, 11, 38, 24, 6, 209, 200, 11, 38, 24, + 6, 221, 78, 11, 38, 24, 6, 248, 58, 11, 38, 24, 6, 220, 93, 11, 38, 24, + 6, 222, 170, 11, 38, 24, 225, 227, 11, 38, 24, 5, 252, 144, 11, 38, 24, + 5, 250, 8, 11, 38, 24, 5, 240, 215, 11, 38, 24, 5, 245, 227, 11, 38, 24, + 5, 242, 244, 11, 38, 24, 5, 205, 84, 11, 38, 24, 5, 242, 201, 11, 38, 24, + 5, 212, 23, 11, 38, 24, 5, 232, 249, 11, 38, 24, 5, 232, 14, 11, 38, 24, + 5, 230, 102, 11, 38, 24, 5, 226, 114, 11, 38, 24, 5, 223, 217, 11, 38, + 24, 5, 206, 169, 11, 38, 24, 5, 222, 168, 11, 38, 24, 5, 221, 53, 11, 38, + 24, 5, 218, 210, 11, 38, 24, 5, 42, 215, 63, 11, 38, 24, 5, 215, 63, 11, + 38, 24, 5, 212, 151, 11, 38, 24, 5, 209, 200, 11, 38, 24, 5, 221, 78, 11, + 38, 24, 5, 248, 58, 11, 38, 24, 5, 220, 93, 11, 38, 24, 5, 222, 170, 11, + 38, 24, 221, 209, 245, 140, 11, 38, 24, 242, 245, 93, 11, 38, 24, 212, + 24, 93, 11, 38, 24, 232, 15, 93, 11, 38, 24, 221, 79, 93, 11, 38, 24, + 218, 211, 93, 11, 38, 24, 221, 54, 93, 11, 38, 24, 35, 6, 252, 144, 11, + 38, 24, 35, 6, 250, 8, 11, 38, 24, 35, 6, 240, 215, 11, 38, 24, 35, 6, + 245, 227, 11, 38, 24, 35, 6, 242, 244, 11, 38, 24, 35, 6, 205, 84, 11, + 38, 24, 35, 6, 242, 201, 11, 38, 24, 35, 6, 212, 23, 11, 38, 24, 35, 6, + 232, 249, 11, 38, 24, 35, 6, 232, 14, 11, 38, 24, 35, 6, 230, 102, 11, + 38, 24, 35, 6, 226, 114, 11, 38, 24, 35, 6, 223, 217, 11, 38, 24, 35, 6, + 206, 169, 11, 38, 24, 35, 6, 222, 168, 11, 38, 24, 35, 6, 221, 53, 11, + 38, 24, 35, 6, 218, 210, 11, 38, 24, 35, 6, 212, 24, 93, 11, 38, 24, 35, + 6, 215, 63, 11, 38, 24, 35, 6, 212, 151, 11, 38, 24, 35, 6, 209, 200, 11, + 38, 24, 35, 6, 221, 78, 11, 38, 24, 35, 6, 248, 58, 11, 38, 24, 35, 6, + 220, 93, 11, 38, 24, 35, 6, 222, 170, 11, 38, 24, 35, 225, 227, 11, 38, + 24, 35, 5, 252, 144, 11, 38, 24, 35, 5, 250, 8, 11, 38, 24, 35, 5, 240, + 215, 11, 38, 24, 35, 5, 245, 227, 11, 38, 24, 35, 5, 242, 244, 11, 38, + 24, 35, 5, 205, 84, 11, 38, 24, 35, 5, 242, 201, 11, 38, 24, 35, 5, 212, + 23, 11, 38, 24, 35, 5, 232, 249, 11, 38, 24, 35, 5, 232, 14, 11, 38, 24, + 35, 5, 230, 102, 11, 38, 24, 35, 5, 226, 114, 11, 38, 24, 35, 5, 223, + 217, 11, 38, 24, 35, 5, 206, 169, 11, 38, 24, 35, 5, 222, 168, 11, 38, + 24, 35, 5, 221, 53, 11, 38, 24, 35, 5, 218, 210, 11, 38, 24, 35, 5, 42, + 215, 63, 11, 38, 24, 35, 5, 215, 63, 11, 38, 24, 35, 5, 212, 151, 11, 38, + 24, 35, 5, 209, 200, 11, 38, 24, 35, 5, 221, 78, 11, 38, 24, 35, 5, 248, + 58, 11, 38, 24, 35, 5, 220, 93, 11, 38, 24, 35, 5, 222, 170, 11, 38, 24, + 35, 221, 209, 245, 140, 11, 38, 24, 35, 242, 245, 93, 11, 38, 24, 35, + 212, 24, 93, 11, 38, 24, 35, 232, 15, 93, 11, 38, 24, 35, 221, 79, 93, + 11, 38, 24, 35, 218, 211, 93, 11, 38, 24, 35, 221, 54, 93, 11, 24, 6, + 245, 134, 11, 24, 5, 245, 134, 11, 24, 18, 205, 85, 11, 24, 18, 102, 11, + 24, 18, 105, 11, 24, 18, 142, 11, 24, 18, 139, 11, 24, 18, 168, 11, 24, + 18, 184, 11, 24, 18, 195, 11, 24, 18, 193, 11, 24, 18, 200, 11, 159, 18, + 205, 85, 11, 159, 18, 102, 11, 159, 18, 105, 11, 159, 18, 142, 11, 159, + 18, 139, 11, 159, 18, 168, 11, 159, 18, 184, 11, 159, 18, 195, 11, 159, + 18, 193, 11, 159, 18, 200, 11, 38, 18, 205, 85, 11, 38, 18, 102, 11, 38, + 18, 105, 11, 38, 18, 142, 11, 38, 18, 139, 11, 38, 18, 168, 11, 38, 18, + 184, 11, 38, 18, 195, 11, 38, 18, 193, 11, 38, 18, 200, 11, 38, 24, 18, + 205, 85, 11, 38, 24, 18, 102, 11, 38, 24, 18, 105, 11, 38, 24, 18, 142, + 11, 38, 24, 18, 139, 11, 38, 24, 18, 168, 11, 38, 24, 18, 184, 11, 38, + 24, 18, 195, 11, 38, 24, 18, 193, 11, 38, 24, 18, 200, 11, 226, 156, 18, + 205, 85, 11, 226, 156, 18, 102, 11, 226, 156, 18, 105, 11, 226, 156, 18, + 142, 11, 226, 156, 18, 139, 11, 226, 156, 18, 168, 11, 226, 156, 18, 184, + 11, 226, 156, 18, 195, 11, 226, 156, 18, 193, 11, 226, 156, 18, 200, 70, + 69, 4, 229, 27, 231, 123, 70, 69, 4, 229, 23, 172, 70, 69, 4, 229, 21, + 230, 236, 70, 69, 4, 228, 153, 231, 221, 70, 69, 4, 228, 123, 231, 224, + 70, 69, 4, 228, 142, 231, 33, 70, 69, 4, 228, 170, 231, 53, 70, 69, 4, + 228, 39, 230, 230, 70, 69, 4, 229, 18, 207, 20, 70, 69, 4, 229, 16, 207, + 96, 70, 69, 4, 229, 14, 206, 216, 70, 69, 4, 228, 92, 207, 45, 70, 69, 4, + 228, 100, 207, 51, 70, 69, 4, 228, 104, 206, 238, 70, 69, 4, 228, 173, + 206, 250, 70, 69, 4, 228, 24, 206, 212, 70, 69, 4, 228, 75, 207, 43, 70, + 69, 4, 228, 157, 206, 200, 70, 69, 4, 228, 169, 206, 202, 70, 69, 4, 228, + 79, 206, 201, 70, 69, 4, 229, 12, 226, 209, 70, 69, 4, 229, 10, 227, 221, + 70, 69, 4, 229, 8, 226, 89, 70, 69, 4, 228, 159, 227, 83, 70, 69, 4, 228, + 124, 226, 168, 70, 69, 4, 228, 64, 226, 111, 70, 69, 4, 228, 29, 226, + 105, 70, 69, 4, 229, 6, 249, 244, 70, 69, 4, 229, 3, 250, 183, 70, 69, 4, + 229, 1, 249, 101, 70, 69, 4, 228, 68, 250, 50, 70, 69, 4, 228, 121, 250, + 61, 70, 69, 4, 228, 115, 249, 172, 70, 69, 4, 228, 80, 249, 184, 70, 69, + 4, 228, 247, 74, 70, 69, 4, 228, 245, 62, 70, 69, 4, 228, 243, 71, 70, + 69, 4, 228, 55, 243, 104, 70, 69, 4, 228, 118, 75, 70, 69, 4, 228, 53, + 222, 152, 70, 69, 4, 228, 71, 76, 70, 69, 4, 228, 81, 243, 90, 70, 69, 4, + 228, 87, 233, 68, 70, 69, 4, 228, 83, 233, 68, 70, 69, 4, 228, 23, 252, + 122, 70, 69, 4, 228, 40, 243, 41, 70, 69, 4, 228, 232, 215, 80, 70, 69, + 4, 228, 230, 217, 199, 70, 69, 4, 228, 228, 213, 203, 70, 69, 4, 228, 56, + 217, 74, 70, 69, 4, 228, 102, 217, 86, 70, 69, 4, 228, 82, 214, 174, 70, + 69, 4, 228, 139, 214, 193, 70, 69, 4, 228, 22, 215, 79, 70, 69, 4, 228, + 218, 229, 235, 70, 69, 4, 228, 216, 230, 141, 70, 69, 4, 228, 214, 229, + 81, 70, 69, 4, 228, 134, 230, 50, 70, 69, 4, 228, 145, 230, 58, 70, 69, + 4, 228, 164, 229, 115, 70, 69, 4, 228, 65, 229, 144, 70, 69, 4, 228, 108, + 152, 230, 58, 70, 69, 4, 228, 240, 245, 168, 70, 69, 4, 228, 237, 246, + 145, 70, 69, 4, 228, 234, 243, 237, 70, 69, 4, 228, 129, 245, 251, 70, + 69, 4, 228, 38, 245, 28, 70, 69, 4, 228, 37, 245, 51, 70, 69, 4, 228, + 226, 211, 211, 70, 69, 4, 228, 223, 212, 219, 70, 69, 4, 228, 221, 210, + 170, 70, 69, 4, 228, 127, 212, 120, 70, 69, 4, 228, 163, 212, 131, 70, + 69, 4, 228, 114, 211, 105, 70, 69, 4, 228, 149, 124, 70, 69, 4, 228, 212, + 232, 162, 70, 69, 4, 228, 209, 232, 200, 70, 69, 4, 228, 207, 232, 104, + 70, 69, 4, 228, 61, 232, 180, 70, 69, 4, 228, 105, 232, 182, 70, 69, 4, + 228, 58, 232, 113, 70, 69, 4, 228, 155, 232, 122, 70, 69, 4, 228, 43, + 152, 232, 122, 70, 69, 4, 228, 205, 206, 11, 70, 69, 4, 228, 202, 190, + 70, 69, 4, 228, 200, 205, 213, 70, 69, 4, 228, 109, 206, 49, 70, 69, 4, + 228, 138, 206, 52, 70, 69, 4, 228, 77, 205, 232, 70, 69, 4, 228, 97, 205, + 247, 70, 69, 4, 228, 196, 241, 250, 70, 69, 4, 228, 194, 242, 73, 70, 69, + 4, 228, 192, 241, 88, 70, 69, 4, 228, 140, 242, 21, 70, 69, 4, 228, 143, + 242, 28, 70, 69, 4, 228, 85, 241, 151, 70, 69, 4, 228, 130, 241, 162, 70, + 69, 4, 228, 21, 241, 87, 70, 69, 4, 228, 117, 242, 47, 70, 69, 4, 228, + 190, 224, 199, 70, 69, 4, 228, 188, 225, 209, 70, 69, 4, 228, 186, 223, + 173, 70, 69, 4, 228, 101, 225, 101, 70, 69, 4, 228, 49, 224, 61, 70, 69, + 4, 228, 42, 239, 11, 70, 69, 4, 228, 181, 155, 70, 69, 4, 228, 32, 238, + 42, 70, 69, 4, 228, 184, 239, 53, 70, 69, 4, 228, 122, 239, 71, 70, 69, + 4, 228, 179, 238, 131, 70, 69, 4, 228, 78, 238, 149, 70, 69, 4, 228, 135, + 239, 52, 70, 69, 4, 228, 90, 238, 125, 70, 69, 4, 228, 165, 238, 246, 70, + 69, 4, 228, 88, 239, 110, 70, 69, 4, 228, 131, 238, 31, 70, 69, 4, 228, + 166, 239, 41, 70, 69, 4, 228, 25, 238, 134, 70, 69, 4, 228, 172, 238, 41, + 70, 69, 4, 228, 128, 225, 42, 70, 69, 4, 228, 177, 225, 56, 70, 69, 4, + 228, 136, 225, 39, 70, 69, 4, 228, 103, 225, 50, 70, 69, 4, 228, 72, 225, + 51, 70, 69, 4, 228, 62, 225, 40, 70, 69, 4, 228, 98, 225, 41, 70, 69, 4, + 228, 59, 225, 55, 70, 69, 4, 228, 91, 225, 38, 70, 69, 4, 228, 132, 152, + 225, 51, 70, 69, 4, 228, 112, 152, 225, 40, 70, 69, 4, 228, 35, 152, 225, + 41, 70, 69, 4, 228, 63, 240, 61, 70, 69, 4, 228, 107, 240, 244, 70, 69, + 4, 228, 50, 239, 213, 70, 69, 4, 228, 28, 240, 162, 70, 69, 4, 228, 52, + 239, 199, 70, 69, 4, 228, 51, 239, 209, 70, 69, 4, 228, 34, 225, 61, 70, + 69, 4, 228, 161, 224, 254, 70, 69, 4, 228, 41, 224, 243, 70, 69, 4, 228, + 150, 221, 53, 70, 69, 4, 228, 119, 179, 70, 69, 4, 228, 168, 220, 82, 70, + 69, 4, 228, 137, 221, 164, 70, 69, 4, 228, 167, 221, 174, 70, 69, 4, 228, + 116, 220, 187, 70, 69, 4, 228, 152, 220, 211, 70, 69, 4, 228, 73, 227, + 138, 70, 69, 4, 228, 156, 227, 153, 70, 69, 4, 228, 96, 227, 132, 70, 69, + 4, 228, 171, 227, 145, 70, 69, 4, 228, 30, 227, 145, 70, 69, 4, 228, 146, + 227, 146, 70, 69, 4, 228, 46, 227, 133, 70, 69, 4, 228, 44, 227, 134, 70, + 69, 4, 228, 31, 227, 126, 70, 69, 4, 228, 57, 152, 227, 146, 70, 69, 4, + 228, 113, 152, 227, 133, 70, 69, 4, 228, 76, 152, 227, 134, 70, 69, 4, + 228, 86, 231, 7, 70, 69, 4, 228, 126, 231, 15, 70, 69, 4, 228, 144, 231, + 3, 70, 69, 4, 228, 175, 231, 10, 70, 69, 4, 228, 110, 231, 11, 70, 69, 4, + 228, 106, 231, 5, 70, 69, 4, 228, 60, 231, 6, 70, 69, 4, 228, 94, 240, + 179, 70, 69, 4, 228, 162, 240, 187, 70, 69, 4, 228, 70, 240, 174, 70, 69, + 4, 228, 125, 240, 183, 70, 69, 4, 228, 111, 240, 184, 70, 69, 4, 228, + 147, 240, 175, 70, 69, 4, 228, 148, 240, 177, 70, 69, 4, 228, 47, 219, + 113, 70, 69, 4, 228, 95, 225, 136, 70, 69, 4, 228, 89, 225, 151, 70, 69, + 4, 228, 93, 225, 118, 70, 69, 4, 228, 27, 225, 142, 70, 69, 4, 228, 99, + 225, 143, 70, 69, 4, 228, 151, 225, 123, 70, 69, 4, 228, 154, 225, 127, + 70, 69, 4, 228, 66, 224, 180, 70, 69, 4, 228, 26, 224, 150, 70, 69, 4, + 228, 69, 224, 171, 70, 69, 4, 228, 84, 224, 154, 70, 69, 4, 228, 36, 208, + 214, 70, 69, 4, 228, 33, 209, 70, 70, 69, 4, 228, 67, 207, 148, 70, 69, + 4, 228, 45, 209, 34, 70, 69, 4, 228, 133, 209, 39, 70, 69, 4, 228, 74, + 208, 161, 70, 69, 4, 228, 141, 208, 173, 70, 69, 4, 228, 54, 223, 119, + 70, 69, 4, 228, 160, 223, 138, 70, 69, 4, 228, 48, 223, 101, 70, 69, 4, + 228, 120, 223, 130, 70, 69, 4, 228, 158, 223, 108, 70, 69, 18, 102, 70, + 69, 18, 105, 70, 69, 18, 142, 70, 69, 18, 139, 70, 69, 18, 168, 70, 69, + 18, 184, 70, 69, 18, 195, 70, 69, 18, 193, 70, 69, 18, 200, 70, 69, 36, + 43, 212, 118, 70, 69, 36, 43, 212, 93, 70, 69, 36, 43, 238, 28, 70, 69, + 36, 43, 211, 240, 70, 69, 36, 43, 212, 99, 211, 240, 70, 69, 36, 43, 238, + 30, 211, 240, 70, 69, 36, 43, 226, 212, 8, 11, 252, 172, 8, 11, 250, 38, + 8, 11, 232, 179, 8, 11, 246, 117, 8, 11, 207, 59, 8, 11, 205, 108, 8, 11, + 239, 132, 8, 11, 212, 194, 8, 11, 206, 47, 8, 11, 232, 45, 8, 11, 230, + 106, 8, 11, 227, 104, 8, 11, 224, 54, 8, 11, 217, 70, 8, 11, 252, 200, 8, + 11, 242, 15, 8, 11, 217, 191, 8, 11, 220, 12, 8, 11, 219, 16, 8, 11, 215, + 210, 8, 11, 212, 115, 8, 11, 212, 37, 8, 11, 231, 163, 8, 11, 212, 49, 8, + 11, 246, 140, 8, 11, 205, 111, 8, 11, 240, 94, 8, 11, 245, 22, 250, 38, + 8, 11, 245, 22, 224, 54, 8, 11, 245, 22, 242, 15, 8, 11, 245, 22, 220, + 12, 8, 11, 78, 250, 38, 8, 11, 78, 232, 179, 8, 11, 78, 239, 50, 8, 11, + 78, 239, 132, 8, 11, 78, 206, 47, 8, 11, 78, 232, 45, 8, 11, 78, 230, + 106, 8, 11, 78, 227, 104, 8, 11, 78, 224, 54, 8, 11, 78, 217, 70, 8, 11, + 78, 252, 200, 8, 11, 78, 242, 15, 8, 11, 78, 217, 191, 8, 11, 78, 220, + 12, 8, 11, 78, 215, 210, 8, 11, 78, 212, 115, 8, 11, 78, 212, 37, 8, 11, + 78, 231, 163, 8, 11, 78, 246, 140, 8, 11, 78, 240, 94, 8, 11, 212, 190, + 232, 179, 8, 11, 212, 190, 239, 132, 8, 11, 212, 190, 206, 47, 8, 11, + 212, 190, 230, 106, 8, 11, 212, 190, 224, 54, 8, 11, 212, 190, 217, 70, + 8, 11, 212, 190, 252, 200, 8, 11, 212, 190, 217, 191, 8, 11, 212, 190, + 220, 12, 8, 11, 212, 190, 215, 210, 8, 11, 212, 190, 231, 163, 8, 11, + 212, 190, 246, 140, 8, 11, 212, 190, 240, 94, 8, 11, 212, 190, 245, 22, + 224, 54, 8, 11, 212, 190, 245, 22, 220, 12, 8, 11, 213, 232, 250, 38, 8, + 11, 213, 232, 232, 179, 8, 11, 213, 232, 239, 50, 8, 11, 213, 232, 239, + 132, 8, 11, 213, 232, 212, 194, 8, 11, 213, 232, 206, 47, 8, 11, 213, + 232, 232, 45, 8, 11, 213, 232, 227, 104, 8, 11, 213, 232, 224, 54, 8, 11, + 213, 232, 217, 70, 8, 11, 213, 232, 252, 200, 8, 11, 213, 232, 242, 15, + 8, 11, 213, 232, 217, 191, 8, 11, 213, 232, 220, 12, 8, 11, 213, 232, + 215, 210, 8, 11, 213, 232, 212, 115, 8, 11, 213, 232, 212, 37, 8, 11, + 213, 232, 231, 163, 8, 11, 213, 232, 246, 140, 8, 11, 213, 232, 205, 111, + 8, 11, 213, 232, 240, 94, 8, 11, 213, 232, 245, 22, 250, 38, 8, 11, 213, + 232, 245, 22, 242, 15, 8, 11, 229, 110, 252, 172, 8, 11, 229, 110, 250, + 38, 8, 11, 229, 110, 232, 179, 8, 11, 229, 110, 246, 117, 8, 11, 229, + 110, 239, 50, 8, 11, 229, 110, 207, 59, 8, 11, 229, 110, 205, 108, 8, 11, + 229, 110, 239, 132, 8, 11, 229, 110, 212, 194, 8, 11, 229, 110, 206, 47, + 8, 11, 229, 110, 230, 106, 8, 11, 229, 110, 227, 104, 8, 11, 229, 110, + 224, 54, 8, 11, 229, 110, 217, 70, 8, 11, 229, 110, 252, 200, 8, 11, 229, + 110, 242, 15, 8, 11, 229, 110, 217, 191, 8, 11, 229, 110, 220, 12, 8, 11, + 229, 110, 219, 16, 8, 11, 229, 110, 215, 210, 8, 11, 229, 110, 212, 115, + 8, 11, 229, 110, 212, 37, 8, 11, 229, 110, 231, 163, 8, 11, 229, 110, + 212, 49, 8, 11, 229, 110, 246, 140, 8, 11, 229, 110, 205, 111, 8, 11, + 229, 110, 240, 94, 8, 11, 159, 250, 38, 8, 11, 159, 232, 179, 8, 11, 159, + 246, 117, 8, 11, 159, 207, 59, 8, 11, 159, 205, 108, 8, 11, 159, 239, + 132, 8, 11, 159, 212, 194, 8, 11, 159, 206, 47, 8, 11, 159, 230, 106, 8, + 11, 159, 227, 104, 8, 11, 159, 224, 54, 8, 11, 159, 217, 70, 8, 11, 159, + 252, 200, 8, 11, 159, 242, 15, 8, 11, 159, 217, 191, 8, 11, 159, 220, 12, + 8, 11, 159, 219, 16, 8, 11, 159, 215, 210, 8, 11, 159, 212, 115, 8, 11, + 159, 212, 37, 8, 11, 159, 231, 163, 8, 11, 159, 212, 49, 8, 11, 159, 246, + 140, 8, 11, 159, 205, 111, 8, 11, 159, 240, 94, 8, 11, 222, 133, 80, 2, + 140, 2, 212, 153, 8, 11, 222, 133, 140, 2, 246, 117, 227, 241, 94, 243, + 117, 207, 9, 227, 241, 94, 188, 207, 9, 227, 241, 94, 207, 36, 207, 9, + 227, 241, 94, 143, 207, 9, 227, 241, 94, 219, 32, 243, 255, 227, 241, 94, + 239, 227, 243, 255, 227, 241, 94, 59, 243, 255, 227, 241, 94, 119, 73, + 248, 93, 227, 241, 94, 118, 73, 248, 93, 227, 241, 94, 129, 73, 248, 93, + 227, 241, 94, 241, 125, 73, 248, 93, 227, 241, 94, 241, 204, 73, 248, 93, + 227, 241, 94, 215, 10, 73, 248, 93, 227, 241, 94, 216, 23, 73, 248, 93, + 227, 241, 94, 243, 88, 73, 248, 93, 227, 241, 94, 224, 195, 73, 248, 93, + 227, 241, 94, 119, 73, 250, 141, 227, 241, 94, 118, 73, 250, 141, 227, + 241, 94, 129, 73, 250, 141, 227, 241, 94, 241, 125, 73, 250, 141, 227, + 241, 94, 241, 204, 73, 250, 141, 227, 241, 94, 215, 10, 73, 250, 141, + 227, 241, 94, 216, 23, 73, 250, 141, 227, 241, 94, 243, 88, 73, 250, 141, + 227, 241, 94, 224, 195, 73, 250, 141, 227, 241, 94, 119, 73, 247, 232, + 227, 241, 94, 118, 73, 247, 232, 227, 241, 94, 129, 73, 247, 232, 227, + 241, 94, 241, 125, 73, 247, 232, 227, 241, 94, 241, 204, 73, 247, 232, + 227, 241, 94, 215, 10, 73, 247, 232, 227, 241, 94, 216, 23, 73, 247, 232, + 227, 241, 94, 243, 88, 73, 247, 232, 227, 241, 94, 224, 195, 73, 247, + 232, 227, 241, 94, 220, 221, 227, 241, 94, 222, 120, 227, 241, 94, 250, + 142, 227, 241, 94, 248, 15, 227, 241, 94, 214, 113, 227, 241, 94, 213, + 156, 227, 241, 94, 251, 171, 227, 241, 94, 207, 1, 227, 241, 94, 232, + 116, 227, 241, 94, 250, 176, 151, 94, 194, 250, 176, 151, 94, 238, 120, + 151, 94, 238, 119, 151, 94, 238, 118, 151, 94, 238, 117, 151, 94, 238, + 116, 151, 94, 238, 115, 151, 94, 238, 114, 151, 94, 238, 113, 151, 94, + 238, 112, 151, 94, 238, 111, 151, 94, 238, 110, 151, 94, 238, 109, 151, + 94, 238, 108, 151, 94, 238, 107, 151, 94, 238, 106, 151, 94, 238, 105, + 151, 94, 238, 104, 151, 94, 238, 103, 151, 94, 238, 102, 151, 94, 238, + 101, 151, 94, 238, 100, 151, 94, 238, 99, 151, 94, 238, 98, 151, 94, 238, + 97, 151, 94, 238, 96, 151, 94, 238, 95, 151, 94, 238, 94, 151, 94, 238, + 93, 151, 94, 238, 92, 151, 94, 238, 91, 151, 94, 238, 90, 151, 94, 238, + 89, 151, 94, 238, 88, 151, 94, 238, 87, 151, 94, 238, 86, 151, 94, 238, + 85, 151, 94, 238, 84, 151, 94, 238, 83, 151, 94, 238, 82, 151, 94, 238, + 81, 151, 94, 238, 80, 151, 94, 238, 79, 151, 94, 238, 78, 151, 94, 238, + 77, 151, 94, 238, 76, 151, 94, 238, 75, 151, 94, 238, 74, 151, 94, 238, + 73, 151, 94, 238, 72, 151, 94, 79, 250, 176, 151, 94, 209, 21, 151, 94, + 209, 20, 151, 94, 209, 19, 151, 94, 209, 18, 151, 94, 209, 17, 151, 94, + 209, 16, 151, 94, 209, 15, 151, 94, 209, 14, 151, 94, 209, 13, 151, 94, + 209, 12, 151, 94, 209, 11, 151, 94, 209, 10, 151, 94, 209, 9, 151, 94, + 209, 8, 151, 94, 209, 7, 151, 94, 209, 6, 151, 94, 209, 5, 151, 94, 209, + 4, 151, 94, 209, 3, 151, 94, 209, 2, 151, 94, 209, 1, 151, 94, 209, 0, + 151, 94, 208, 255, 151, 94, 208, 254, 151, 94, 208, 253, 151, 94, 208, + 252, 151, 94, 208, 251, 151, 94, 208, 250, 151, 94, 208, 249, 151, 94, + 208, 248, 151, 94, 208, 247, 151, 94, 208, 246, 151, 94, 208, 245, 151, + 94, 208, 244, 151, 94, 208, 243, 151, 94, 208, 242, 151, 94, 208, 241, + 151, 94, 208, 240, 151, 94, 208, 239, 151, 94, 208, 238, 151, 94, 208, + 237, 151, 94, 208, 236, 151, 94, 208, 235, 151, 94, 208, 234, 151, 94, + 208, 233, 151, 94, 208, 232, 151, 94, 208, 231, 151, 94, 208, 230, 151, + 94, 208, 229, 220, 230, 191, 250, 176, 220, 230, 191, 253, 15, 73, 214, + 150, 220, 230, 191, 118, 73, 214, 150, 220, 230, 191, 129, 73, 214, 150, + 220, 230, 191, 241, 125, 73, 214, 150, 220, 230, 191, 241, 204, 73, 214, + 150, 220, 230, 191, 215, 10, 73, 214, 150, 220, 230, 191, 216, 23, 73, + 214, 150, 220, 230, 191, 243, 88, 73, 214, 150, 220, 230, 191, 224, 195, + 73, 214, 150, 220, 230, 191, 212, 99, 73, 214, 150, 220, 230, 191, 232, + 198, 73, 214, 150, 220, 230, 191, 231, 57, 73, 214, 150, 220, 230, 191, + 219, 198, 73, 214, 150, 220, 230, 191, 231, 107, 73, 214, 150, 220, 230, + 191, 253, 15, 73, 239, 58, 220, 230, 191, 118, 73, 239, 58, 220, 230, + 191, 129, 73, 239, 58, 220, 230, 191, 241, 125, 73, 239, 58, 220, 230, + 191, 241, 204, 73, 239, 58, 220, 230, 191, 215, 10, 73, 239, 58, 220, + 230, 191, 216, 23, 73, 239, 58, 220, 230, 191, 243, 88, 73, 239, 58, 220, + 230, 191, 224, 195, 73, 239, 58, 220, 230, 191, 212, 99, 73, 239, 58, + 220, 230, 191, 232, 198, 73, 239, 58, 220, 230, 191, 231, 57, 73, 239, + 58, 220, 230, 191, 219, 198, 73, 239, 58, 220, 230, 191, 231, 107, 73, + 239, 58, 220, 230, 191, 219, 32, 232, 116, 220, 230, 191, 253, 15, 73, + 245, 155, 220, 230, 191, 118, 73, 245, 155, 220, 230, 191, 129, 73, 245, + 155, 220, 230, 191, 241, 125, 73, 245, 155, 220, 230, 191, 241, 204, 73, + 245, 155, 220, 230, 191, 215, 10, 73, 245, 155, 220, 230, 191, 216, 23, + 73, 245, 155, 220, 230, 191, 243, 88, 73, 245, 155, 220, 230, 191, 224, + 195, 73, 245, 155, 220, 230, 191, 212, 99, 73, 245, 155, 220, 230, 191, + 232, 198, 73, 245, 155, 220, 230, 191, 231, 57, 73, 245, 155, 220, 230, + 191, 219, 198, 73, 245, 155, 220, 230, 191, 231, 107, 73, 245, 155, 220, + 230, 191, 60, 232, 116, 220, 230, 191, 253, 15, 73, 247, 178, 220, 230, + 191, 118, 73, 247, 178, 220, 230, 191, 129, 73, 247, 178, 220, 230, 191, + 241, 125, 73, 247, 178, 220, 230, 191, 241, 204, 73, 247, 178, 220, 230, + 191, 215, 10, 73, 247, 178, 220, 230, 191, 216, 23, 73, 247, 178, 220, + 230, 191, 243, 88, 73, 247, 178, 220, 230, 191, 224, 195, 73, 247, 178, + 220, 230, 191, 212, 99, 73, 247, 178, 220, 230, 191, 232, 198, 73, 247, + 178, 220, 230, 191, 231, 57, 73, 247, 178, 220, 230, 191, 219, 198, 73, + 247, 178, 220, 230, 191, 231, 107, 73, 247, 178, 220, 230, 191, 59, 232, + 116, 220, 230, 191, 241, 149, 220, 230, 191, 211, 15, 220, 230, 191, 211, + 4, 220, 230, 191, 211, 1, 220, 230, 191, 211, 0, 220, 230, 191, 210, 255, + 220, 230, 191, 210, 254, 220, 230, 191, 210, 253, 220, 230, 191, 210, + 252, 220, 230, 191, 210, 251, 220, 230, 191, 211, 14, 220, 230, 191, 211, + 13, 220, 230, 191, 211, 12, 220, 230, 191, 211, 11, 220, 230, 191, 211, + 10, 220, 230, 191, 211, 9, 220, 230, 191, 211, 8, 220, 230, 191, 211, 7, + 220, 230, 191, 211, 6, 220, 230, 191, 211, 5, 220, 230, 191, 211, 3, 220, + 230, 191, 211, 2, 18, 205, 86, 241, 82, 213, 251, 18, 205, 86, 247, 155, + 18, 119, 247, 155, 18, 118, 247, 155, 18, 129, 247, 155, 18, 241, 125, + 247, 155, 18, 241, 204, 247, 155, 18, 215, 10, 247, 155, 18, 216, 23, + 247, 155, 18, 243, 88, 247, 155, 18, 224, 195, 247, 155, 245, 111, 39, + 38, 18, 205, 85, 245, 111, 170, 39, 38, 18, 205, 85, 97, 7, 6, 1, 62, 97, + 7, 6, 1, 251, 150, 97, 7, 6, 1, 249, 34, 97, 7, 6, 1, 246, 240, 97, 7, 6, + 1, 75, 97, 7, 6, 1, 242, 139, 97, 7, 6, 1, 241, 55, 97, 7, 6, 1, 239, + 155, 97, 7, 6, 1, 74, 97, 7, 6, 1, 232, 203, 97, 7, 6, 1, 232, 76, 97, 7, + 6, 1, 149, 97, 7, 6, 1, 229, 28, 97, 7, 6, 1, 226, 33, 97, 7, 6, 1, 76, + 97, 7, 6, 1, 222, 67, 97, 7, 6, 1, 220, 27, 97, 7, 6, 1, 137, 97, 7, 6, + 1, 182, 97, 7, 6, 1, 213, 10, 97, 7, 6, 1, 71, 97, 7, 6, 1, 209, 148, 97, + 7, 6, 1, 207, 129, 97, 7, 6, 1, 206, 195, 97, 7, 6, 1, 206, 123, 97, 7, + 6, 1, 205, 159, 211, 93, 215, 204, 249, 133, 7, 6, 1, 182, 39, 35, 7, 6, + 1, 249, 34, 39, 35, 7, 6, 1, 137, 39, 248, 149, 39, 206, 197, 98, 7, 6, + 1, 62, 98, 7, 6, 1, 251, 150, 98, 7, 6, 1, 249, 34, 98, 7, 6, 1, 246, + 240, 98, 7, 6, 1, 75, 98, 7, 6, 1, 242, 139, 98, 7, 6, 1, 241, 55, 98, 7, + 6, 1, 239, 155, 98, 7, 6, 1, 74, 98, 7, 6, 1, 232, 203, 98, 7, 6, 1, 232, + 76, 98, 7, 6, 1, 149, 98, 7, 6, 1, 229, 28, 98, 7, 6, 1, 226, 33, 98, 7, + 6, 1, 76, 98, 7, 6, 1, 222, 67, 98, 7, 6, 1, 220, 27, 98, 7, 6, 1, 137, + 98, 7, 6, 1, 182, 98, 7, 6, 1, 213, 10, 98, 7, 6, 1, 71, 98, 7, 6, 1, + 209, 148, 98, 7, 6, 1, 207, 129, 98, 7, 6, 1, 206, 195, 98, 7, 6, 1, 206, + 123, 98, 7, 6, 1, 205, 159, 98, 238, 17, 98, 226, 57, 98, 217, 88, 98, + 214, 99, 98, 220, 155, 98, 207, 52, 170, 39, 7, 6, 1, 62, 170, 39, 7, 6, + 1, 251, 150, 170, 39, 7, 6, 1, 249, 34, 170, 39, 7, 6, 1, 246, 240, 170, + 39, 7, 6, 1, 75, 170, 39, 7, 6, 1, 242, 139, 170, 39, 7, 6, 1, 241, 55, + 170, 39, 7, 6, 1, 239, 155, 170, 39, 7, 6, 1, 74, 170, 39, 7, 6, 1, 232, + 203, 170, 39, 7, 6, 1, 232, 76, 170, 39, 7, 6, 1, 149, 170, 39, 7, 6, 1, + 229, 28, 170, 39, 7, 6, 1, 226, 33, 170, 39, 7, 6, 1, 76, 170, 39, 7, 6, + 1, 222, 67, 170, 39, 7, 6, 1, 220, 27, 170, 39, 7, 6, 1, 137, 170, 39, 7, + 6, 1, 182, 170, 39, 7, 6, 1, 213, 10, 170, 39, 7, 6, 1, 71, 170, 39, 7, + 6, 1, 209, 148, 170, 39, 7, 6, 1, 207, 129, 170, 39, 7, 6, 1, 206, 195, + 170, 39, 7, 6, 1, 206, 123, 170, 39, 7, 6, 1, 205, 159, 219, 81, 227, + 125, 53, 219, 81, 227, 122, 53, 170, 98, 7, 6, 1, 62, 170, 98, 7, 6, 1, + 251, 150, 170, 98, 7, 6, 1, 249, 34, 170, 98, 7, 6, 1, 246, 240, 170, 98, + 7, 6, 1, 75, 170, 98, 7, 6, 1, 242, 139, 170, 98, 7, 6, 1, 241, 55, 170, + 98, 7, 6, 1, 239, 155, 170, 98, 7, 6, 1, 74, 170, 98, 7, 6, 1, 232, 203, + 170, 98, 7, 6, 1, 232, 76, 170, 98, 7, 6, 1, 149, 170, 98, 7, 6, 1, 229, + 28, 170, 98, 7, 6, 1, 226, 33, 170, 98, 7, 6, 1, 76, 170, 98, 7, 6, 1, + 222, 67, 170, 98, 7, 6, 1, 220, 27, 170, 98, 7, 6, 1, 137, 170, 98, 7, 6, + 1, 182, 170, 98, 7, 6, 1, 213, 10, 170, 98, 7, 6, 1, 71, 170, 98, 7, 6, + 1, 209, 148, 170, 98, 7, 6, 1, 207, 129, 170, 98, 7, 6, 1, 206, 195, 170, + 98, 7, 6, 1, 206, 123, 170, 98, 7, 6, 1, 205, 159, 247, 57, 170, 98, 7, + 6, 1, 222, 67, 170, 98, 237, 183, 170, 98, 179, 170, 98, 217, 199, 170, + 98, 253, 115, 170, 98, 207, 52, 49, 245, 70, 98, 247, 218, 98, 247, 101, + 98, 241, 107, 98, 237, 174, 98, 225, 87, 98, 225, 79, 98, 222, 185, 98, + 214, 169, 98, 120, 2, 242, 168, 83, 98, 208, 151, 219, 24, 233, 50, 16, + 1, 62, 219, 24, 233, 50, 16, 1, 251, 150, 219, 24, 233, 50, 16, 1, 249, + 34, 219, 24, 233, 50, 16, 1, 246, 240, 219, 24, 233, 50, 16, 1, 75, 219, + 24, 233, 50, 16, 1, 242, 139, 219, 24, 233, 50, 16, 1, 241, 55, 219, 24, + 233, 50, 16, 1, 239, 155, 219, 24, 233, 50, 16, 1, 74, 219, 24, 233, 50, + 16, 1, 232, 203, 219, 24, 233, 50, 16, 1, 232, 76, 219, 24, 233, 50, 16, + 1, 149, 219, 24, 233, 50, 16, 1, 229, 28, 219, 24, 233, 50, 16, 1, 226, + 33, 219, 24, 233, 50, 16, 1, 76, 219, 24, 233, 50, 16, 1, 222, 67, 219, + 24, 233, 50, 16, 1, 220, 27, 219, 24, 233, 50, 16, 1, 137, 219, 24, 233, + 50, 16, 1, 182, 219, 24, 233, 50, 16, 1, 213, 10, 219, 24, 233, 50, 16, + 1, 71, 219, 24, 233, 50, 16, 1, 209, 148, 219, 24, 233, 50, 16, 1, 207, + 129, 219, 24, 233, 50, 16, 1, 206, 195, 219, 24, 233, 50, 16, 1, 206, + 123, 219, 24, 233, 50, 16, 1, 205, 159, 49, 161, 238, 144, 98, 64, 231, + 41, 98, 64, 217, 199, 98, 10, 209, 220, 235, 119, 98, 10, 209, 220, 235, + 123, 98, 10, 209, 220, 235, 131, 98, 64, 246, 9, 98, 10, 209, 220, 235, + 138, 98, 10, 209, 220, 235, 125, 98, 10, 209, 220, 235, 97, 98, 10, 209, + 220, 235, 124, 98, 10, 209, 220, 235, 137, 98, 10, 209, 220, 235, 111, + 98, 10, 209, 220, 235, 104, 98, 10, 209, 220, 235, 113, 98, 10, 209, 220, + 235, 134, 98, 10, 209, 220, 235, 120, 98, 10, 209, 220, 235, 136, 98, 10, + 209, 220, 235, 112, 98, 10, 209, 220, 235, 135, 98, 10, 209, 220, 235, + 98, 98, 10, 209, 220, 235, 103, 98, 10, 209, 220, 235, 96, 98, 10, 209, + 220, 235, 126, 98, 10, 209, 220, 235, 128, 98, 10, 209, 220, 235, 106, + 98, 10, 209, 220, 235, 117, 98, 10, 209, 220, 235, 115, 98, 10, 209, 220, + 235, 141, 98, 10, 209, 220, 235, 140, 98, 10, 209, 220, 235, 94, 98, 10, + 209, 220, 235, 121, 98, 10, 209, 220, 235, 139, 98, 10, 209, 220, 235, + 130, 98, 10, 209, 220, 235, 116, 98, 10, 209, 220, 235, 95, 98, 10, 209, + 220, 235, 118, 98, 10, 209, 220, 235, 100, 98, 10, 209, 220, 235, 99, 98, + 10, 209, 220, 235, 129, 98, 10, 209, 220, 235, 107, 98, 10, 209, 220, + 235, 109, 98, 10, 209, 220, 235, 110, 98, 10, 209, 220, 235, 102, 98, 10, + 209, 220, 235, 133, 98, 10, 209, 220, 235, 127, 211, 93, 215, 204, 249, + 133, 10, 209, 220, 235, 108, 211, 93, 215, 204, 249, 133, 10, 209, 220, + 235, 140, 211, 93, 215, 204, 249, 133, 10, 209, 220, 235, 138, 211, 93, + 215, 204, 249, 133, 10, 209, 220, 235, 122, 211, 93, 215, 204, 249, 133, + 10, 209, 220, 235, 105, 211, 93, 215, 204, 249, 133, 10, 209, 220, 235, + 118, 211, 93, 215, 204, 249, 133, 10, 209, 220, 235, 101, 211, 93, 215, + 204, 249, 133, 10, 209, 220, 235, 132, 211, 93, 215, 204, 249, 133, 10, + 209, 220, 235, 114, 39, 175, 252, 250, 39, 175, 253, 19, 246, 251, 241, + 160, 247, 192, 209, 238, 224, 210, 2, 214, 23, 213, 149, 131, 226, 127, + 213, 148, 247, 222, 251, 200, 243, 213, 213, 147, 131, 249, 90, 219, 82, + 249, 116, 251, 200, 224, 209, 207, 70, 207, 64, 208, 165, 226, 217, 207, + 54, 243, 121, 240, 26, 242, 182, 243, 121, 240, 26, 252, 128, 243, 121, + 240, 26, 251, 218, 240, 26, 2, 227, 75, 186, 226, 145, 93, 207, 56, 247, + 66, 226, 145, 93, 241, 215, 219, 205, 226, 145, 93, 207, 56, 240, 57, + 226, 145, 93, 241, 82, 226, 145, 93, 207, 82, 240, 57, 226, 145, 93, 230, + 81, 219, 205, 226, 145, 93, 207, 82, 247, 66, 226, 145, 93, 247, 66, 226, + 144, 186, 226, 145, 2, 242, 67, 241, 215, 219, 205, 226, 145, 2, 242, 67, + 230, 81, 219, 205, 226, 145, 2, 242, 67, 241, 82, 226, 145, 2, 242, 67, + 213, 155, 2, 242, 67, 240, 24, 214, 26, 215, 149, 214, 26, 212, 29, 60, + 243, 244, 59, 213, 154, 59, 213, 155, 2, 5, 247, 183, 59, 213, 155, 250, + 35, 247, 183, 59, 213, 155, 250, 35, 247, 184, 2, 219, 83, 247, 184, 2, + 219, 83, 247, 184, 2, 214, 199, 247, 184, 2, 229, 220, 247, 184, 2, 211, + 94, 241, 161, 207, 10, 249, 188, 242, 67, 248, 64, 217, 72, 242, 176, + 211, 61, 246, 3, 211, 61, 222, 19, 211, 61, 248, 250, 238, 63, 221, 133, + 210, 160, 248, 67, 249, 190, 218, 101, 239, 10, 213, 152, 249, 190, 243, + 125, 73, 227, 230, 243, 125, 73, 218, 203, 239, 36, 241, 125, 230, 54, + 247, 182, 227, 203, 230, 53, 242, 51, 230, 53, 230, 54, 241, 167, 233, + 69, 207, 9, 226, 66, 211, 122, 251, 183, 239, 243, 227, 92, 207, 68, 212, + 169, 230, 23, 250, 137, 221, 6, 219, 32, 252, 50, 239, 227, 252, 50, 221, + 170, 221, 171, 248, 68, 213, 236, 239, 116, 214, 229, 73, 220, 242, 227, + 115, 222, 166, 249, 173, 220, 166, 230, 34, 218, 204, 247, 72, 218, 204, + 250, 149, 247, 104, 218, 203, 247, 22, 23, 218, 203, 214, 11, 249, 144, + 214, 149, 249, 127, 241, 106, 241, 102, 218, 120, 213, 105, 220, 168, + 246, 97, 222, 208, 213, 123, 241, 103, 215, 121, 241, 214, 248, 244, 2, + 213, 98, 245, 204, 214, 187, 237, 182, 247, 70, 215, 222, 237, 181, 237, + 182, 247, 70, 244, 11, 247, 103, 248, 30, 134, 248, 216, 229, 129, 247, + 14, 238, 133, 220, 170, 215, 133, 250, 18, 249, 140, 220, 171, 73, 241, + 150, 247, 102, 241, 140, 23, 231, 58, 212, 128, 206, 253, 239, 105, 217, + 176, 249, 156, 23, 247, 29, 207, 6, 240, 29, 247, 171, 240, 29, 211, 18, + 243, 249, 250, 46, 226, 103, 247, 199, 250, 46, 226, 102, 250, 179, 249, + 155, 241, 140, 23, 231, 59, 2, 220, 231, 218, 205, 206, 222, 220, 132, + 249, 216, 248, 243, 232, 197, 248, 22, 211, 61, 242, 36, 248, 21, 241, + 217, 241, 218, 214, 147, 250, 148, 221, 206, 220, 182, 247, 137, 250, + 149, 212, 173, 211, 61, 247, 57, 241, 190, 221, 7, 246, 0, 232, 189, 245, + 34, 248, 193, 213, 235, 207, 10, 248, 46, 226, 145, 208, 201, 248, 115, + 217, 104, 217, 131, 239, 248, 248, 213, 239, 61, 2, 211, 167, 222, 166, + 212, 42, 230, 46, 249, 149, 73, 241, 171, 226, 218, 227, 112, 219, 5, + 218, 205, 30, 231, 173, 2, 232, 196, 213, 208, 226, 251, 229, 254, 214, + 227, 247, 109, 231, 55, 250, 58, 251, 228, 30, 224, 32, 250, 58, 245, + 210, 30, 224, 32, 241, 231, 241, 111, 252, 253, 211, 205, 248, 194, 238, + 65, 242, 3, 207, 26, 218, 111, 247, 172, 241, 209, 220, 196, 23, 241, + 213, 226, 251, 226, 121, 248, 230, 247, 237, 239, 65, 251, 235, 222, 22, + 211, 102, 239, 86, 247, 226, 212, 92, 211, 206, 247, 213, 249, 181, 221, + 126, 251, 234, 208, 210, 240, 218, 245, 104, 238, 242, 214, 220, 228, 15, + 249, 227, 240, 219, 245, 148, 249, 143, 241, 173, 220, 230, 248, 202, 30, + 224, 37, 226, 95, 30, 224, 32, 217, 117, 239, 197, 30, 231, 172, 210, + 250, 208, 190, 30, 217, 97, 218, 33, 215, 162, 2, 217, 134, 212, 95, 219, + 102, 23, 250, 149, 214, 245, 23, 214, 245, 249, 166, 250, 111, 23, 238, + 127, 248, 69, 241, 196, 214, 198, 218, 34, 213, 128, 214, 117, 227, 112, + 211, 19, 238, 66, 219, 103, 252, 129, 241, 147, 218, 45, 241, 147, 213, + 100, 207, 41, 229, 224, 240, 10, 219, 104, 226, 134, 219, 104, 248, 204, + 214, 200, 248, 209, 226, 128, 248, 228, 250, 60, 2, 209, 238, 249, 92, + 247, 122, 238, 55, 249, 90, 247, 221, 245, 214, 238, 55, 249, 91, 247, + 211, 249, 91, 245, 206, 245, 207, 232, 227, 225, 193, 221, 212, 214, 36, + 238, 55, 249, 91, 238, 55, 2, 240, 202, 222, 201, 249, 91, 232, 189, 220, + 176, 222, 200, 242, 181, 220, 176, 222, 200, 238, 64, 250, 133, 251, 173, + 212, 103, 228, 15, 238, 60, 229, 98, 238, 60, 247, 107, 213, 247, 217, + 103, 245, 216, 213, 247, 242, 57, 232, 208, 230, 91, 232, 189, 248, 185, + 242, 181, 248, 185, 59, 221, 144, 60, 221, 144, 207, 62, 59, 241, 196, + 207, 62, 60, 241, 196, 218, 100, 60, 218, 100, 230, 133, 219, 65, 226, + 125, 222, 76, 207, 70, 249, 96, 247, 75, 211, 198, 230, 14, 219, 105, + 248, 183, 243, 255, 247, 64, 207, 29, 214, 206, 214, 204, 238, 65, 219, + 77, 240, 15, 215, 208, 226, 163, 218, 104, 248, 56, 245, 40, 221, 17, + 249, 182, 243, 60, 222, 211, 214, 128, 215, 203, 249, 95, 252, 91, 238, + 132, 230, 126, 250, 44, 241, 213, 211, 18, 241, 213, 249, 189, 210, 141, + 239, 84, 248, 57, 250, 179, 248, 57, 241, 97, 250, 179, 248, 57, 249, + 218, 221, 146, 231, 51, 220, 186, 243, 246, 248, 232, 250, 168, 248, 232, + 245, 33, 226, 126, 242, 67, 247, 76, 242, 67, 211, 199, 242, 67, 219, + 106, 242, 67, 248, 184, 242, 67, 244, 0, 242, 67, 214, 115, 207, 29, 238, + 66, 242, 67, 226, 164, 242, 67, 245, 41, 242, 67, 221, 18, 242, 67, 241, + 100, 242, 67, 239, 113, 242, 67, 206, 247, 242, 67, 250, 56, 242, 67, + 222, 4, 242, 67, 221, 18, 224, 44, 221, 186, 220, 121, 248, 41, 242, 148, + 242, 150, 243, 124, 224, 44, 226, 123, 211, 107, 59, 120, 220, 201, 250, + 174, 233, 53, 59, 130, 220, 201, 250, 174, 233, 53, 59, 47, 220, 201, + 250, 174, 233, 53, 59, 48, 220, 201, 250, 174, 233, 53, 241, 207, 239, + 108, 53, 207, 62, 239, 108, 53, 222, 186, 239, 108, 53, 211, 229, 120, + 53, 211, 229, 130, 53, 247, 212, 239, 103, 53, 222, 142, 239, 103, 53, + 247, 52, 206, 243, 239, 86, 242, 149, 225, 107, 213, 9, 232, 181, 243, + 251, 231, 110, 249, 229, 206, 243, 247, 185, 220, 58, 239, 106, 220, 167, + 227, 211, 215, 155, 251, 196, 215, 155, 238, 251, 215, 155, 206, 243, + 217, 148, 206, 243, 249, 165, 241, 145, 249, 59, 233, 69, 215, 55, 249, + 58, 233, 69, 215, 55, 249, 139, 240, 40, 227, 221, 206, 244, 242, 48, + 227, 222, 23, 206, 245, 238, 141, 239, 102, 118, 227, 84, 238, 141, 239, + 102, 118, 206, 242, 238, 141, 239, 102, 220, 193, 222, 199, 206, 245, 2, + 249, 76, 243, 122, 249, 117, 2, 209, 30, 221, 115, 2, 249, 192, 239, 129, + 227, 222, 2, 239, 210, 221, 54, 227, 207, 227, 222, 2, 210, 148, 222, + 178, 227, 221, 222, 178, 206, 244, 250, 178, 247, 123, 206, 228, 220, + 126, 232, 189, 222, 195, 232, 189, 240, 14, 240, 69, 250, 179, 252, 112, + 242, 154, 252, 162, 252, 163, 226, 154, 233, 74, 214, 240, 233, 43, 245, + 203, 221, 114, 239, 204, 246, 101, 229, 191, 225, 217, 220, 192, 242, 68, + 227, 173, 239, 128, 250, 127, 220, 195, 213, 29, 221, 10, 231, 92, 83, + 229, 98, 230, 5, 218, 148, 240, 160, 213, 253, 231, 91, 249, 148, 247, + 78, 2, 239, 60, 207, 47, 250, 54, 239, 60, 249, 111, 239, 60, 118, 239, + 58, 214, 145, 239, 60, 239, 220, 239, 60, 239, 61, 2, 45, 249, 187, 239, + 60, 239, 227, 239, 60, 206, 45, 239, 60, 220, 59, 239, 60, 239, 61, 2, + 218, 205, 218, 218, 239, 58, 239, 61, 246, 0, 245, 157, 215, 234, 2, 32, + 67, 233, 25, 243, 63, 147, 249, 88, 252, 111, 93, 249, 174, 214, 232, 93, + 247, 164, 93, 214, 122, 213, 107, 93, 243, 244, 246, 79, 93, 221, 11, 73, + 220, 187, 241, 182, 249, 241, 245, 71, 93, 214, 137, 250, 148, 211, 244, + 250, 148, 59, 241, 172, 238, 30, 220, 199, 93, 226, 167, 250, 163, 247, + 25, 242, 169, 77, 245, 35, 53, 247, 68, 248, 203, 250, 132, 2, 206, 43, + 53, 250, 132, 2, 245, 35, 53, 250, 132, 2, 242, 184, 53, 250, 132, 2, + 220, 165, 53, 226, 167, 2, 207, 4, 248, 90, 2, 167, 211, 57, 23, 206, 43, + 53, 217, 83, 221, 113, 247, 142, 249, 115, 226, 207, 241, 177, 245, 92, + 222, 126, 245, 97, 243, 208, 241, 236, 241, 158, 222, 142, 241, 236, 241, + 158, 222, 38, 2, 247, 27, 222, 38, 242, 60, 209, 206, 248, 237, 212, 127, + 248, 237, 191, 233, 53, 248, 90, 2, 167, 211, 56, 248, 90, 2, 173, 211, + 56, 250, 129, 248, 89, 247, 198, 220, 54, 218, 95, 220, 54, 221, 234, + 213, 243, 218, 40, 211, 48, 218, 40, 249, 170, 212, 205, 230, 51, 224, + 35, 224, 36, 2, 245, 255, 247, 77, 247, 192, 249, 171, 222, 142, 249, + 171, 239, 227, 249, 171, 249, 187, 249, 171, 222, 121, 249, 171, 249, + 168, 225, 211, 250, 166, 217, 91, 227, 85, 212, 108, 219, 45, 222, 36, + 242, 33, 228, 15, 217, 130, 252, 88, 220, 76, 253, 2, 229, 100, 248, 76, + 227, 97, 222, 92, 211, 64, 233, 65, 211, 64, 222, 44, 243, 177, 93, 233, + 62, 243, 8, 243, 9, 2, 173, 51, 52, 247, 192, 227, 236, 2, 229, 91, 241, + 196, 247, 192, 227, 236, 2, 219, 81, 241, 196, 222, 142, 227, 236, 2, + 219, 81, 241, 196, 222, 142, 227, 236, 2, 229, 91, 241, 196, 220, 173, + 220, 174, 238, 69, 225, 84, 226, 179, 221, 62, 226, 179, 221, 63, 2, 86, + 51, 251, 200, 230, 46, 208, 213, 226, 178, 226, 179, 221, 63, 222, 202, + 224, 68, 226, 179, 221, 61, 252, 89, 2, 250, 118, 248, 230, 248, 231, 2, + 241, 189, 208, 210, 248, 230, 212, 105, 219, 97, 208, 209, 241, 231, 220, + 108, 220, 179, 214, 6, 210, 110, 86, 251, 241, 247, 194, 86, 23, 92, 222, + 142, 247, 234, 251, 241, 247, 194, 86, 23, 92, 222, 142, 247, 234, 251, + 242, 2, 39, 119, 222, 82, 247, 194, 173, 23, 167, 222, 142, 247, 234, + 251, 241, 252, 87, 173, 23, 167, 222, 142, 247, 234, 251, 241, 114, 249, + 114, 93, 127, 249, 114, 93, 214, 142, 2, 248, 223, 91, 214, 141, 214, + 142, 2, 119, 214, 165, 207, 64, 214, 142, 2, 129, 214, 165, 207, 63, 250, + 102, 243, 63, 220, 223, 230, 41, 227, 248, 240, 29, 218, 162, 227, 248, + 240, 29, 229, 140, 2, 233, 36, 221, 150, 247, 192, 229, 140, 2, 231, 174, + 231, 174, 229, 139, 222, 142, 229, 139, 250, 28, 250, 29, 2, 248, 223, + 91, 249, 169, 229, 196, 93, 219, 98, 249, 54, 250, 177, 2, 92, 51, 52, + 243, 34, 2, 92, 51, 52, 222, 166, 2, 242, 168, 141, 2, 47, 48, 51, 52, + 214, 173, 2, 86, 51, 52, 211, 102, 2, 167, 51, 52, 224, 68, 119, 209, + 227, 243, 86, 93, 231, 171, 212, 98, 233, 30, 16, 33, 7, 6, 230, 4, 233, + 30, 16, 33, 7, 5, 230, 4, 233, 30, 16, 33, 223, 178, 233, 30, 16, 33, + 213, 42, 233, 30, 16, 33, 7, 230, 4, 241, 219, 243, 63, 211, 97, 206, + 220, 239, 114, 223, 161, 23, 249, 176, 238, 147, 220, 248, 226, 250, 212, + 106, 247, 42, 250, 149, 215, 10, 220, 203, 214, 27, 2, 226, 247, 245, 23, + 232, 189, 16, 33, 250, 41, 211, 46, 243, 47, 60, 49, 249, 54, 59, 49, + 249, 54, 230, 86, 219, 32, 247, 233, 230, 86, 249, 187, 247, 233, 230, + 86, 222, 121, 245, 156, 230, 86, 249, 187, 245, 156, 5, 222, 121, 245, + 156, 5, 249, 187, 245, 156, 209, 205, 219, 32, 211, 51, 244, 7, 219, 32, + 211, 51, 209, 205, 5, 219, 32, 211, 51, 244, 7, 5, 219, 32, 211, 51, 229, + 92, 48, 215, 246, 59, 247, 233, 209, 203, 48, 215, 246, 59, 247, 233, 39, + 247, 60, 220, 190, 247, 60, 220, 191, 2, 239, 120, 55, 247, 60, 220, 190, + 224, 39, 47, 216, 55, 2, 129, 245, 21, 224, 39, 48, 216, 55, 2, 129, 245, + 21, 16, 33, 227, 186, 248, 96, 59, 7, 247, 59, 77, 7, 247, 59, 248, 133, + 247, 59, 222, 174, 93, 244, 10, 73, 221, 172, 247, 196, 242, 68, 119, + 222, 216, 247, 196, 242, 68, 118, 222, 216, 247, 196, 242, 68, 129, 222, + 216, 247, 196, 242, 68, 241, 125, 222, 216, 247, 196, 242, 68, 241, 204, + 222, 216, 247, 196, 242, 68, 215, 10, 222, 216, 247, 196, 242, 68, 216, + 23, 222, 216, 247, 196, 242, 68, 243, 88, 222, 216, 247, 196, 242, 68, + 224, 195, 222, 216, 247, 196, 242, 68, 212, 99, 222, 216, 247, 196, 242, + 68, 243, 59, 222, 216, 247, 196, 242, 68, 210, 127, 222, 216, 247, 196, + 242, 68, 222, 161, 247, 196, 242, 68, 210, 106, 247, 196, 242, 68, 211, + 234, 247, 196, 242, 68, 241, 121, 247, 196, 242, 68, 241, 202, 247, 196, + 242, 68, 215, 6, 247, 196, 242, 68, 216, 22, 247, 196, 242, 68, 243, 87, + 247, 196, 242, 68, 224, 194, 247, 196, 242, 68, 212, 97, 247, 196, 242, + 68, 243, 57, 247, 196, 242, 68, 210, 125, 48, 214, 141, 48, 214, 142, 2, + 119, 214, 165, 207, 64, 48, 214, 142, 2, 129, 214, 165, 207, 63, 249, 83, + 249, 84, 2, 214, 165, 207, 63, 218, 147, 250, 28, 249, 171, 248, 221, + 227, 208, 247, 195, 60, 214, 241, 23, 247, 58, 224, 68, 220, 254, 238, + 140, 227, 222, 233, 69, 249, 61, 213, 168, 229, 253, 214, 230, 222, 123, + 214, 108, 246, 84, 213, 150, 214, 130, 214, 131, 207, 48, 232, 105, 47, + 239, 108, 212, 108, 219, 45, 212, 108, 219, 46, 2, 222, 37, 48, 239, 108, + 212, 108, 219, 45, 59, 211, 89, 212, 107, 60, 211, 89, 212, 107, 212, + 108, 222, 166, 211, 102, 73, 226, 175, 247, 216, 226, 179, 221, 62, 250, + 177, 73, 243, 8, 214, 32, 243, 8, 243, 9, 2, 229, 220, 241, 165, 243, 8, + 221, 151, 131, 214, 32, 243, 8, 229, 195, 221, 233, 60, 220, 54, 229, 92, + 47, 221, 149, 229, 92, 47, 250, 144, 221, 150, 229, 92, 47, 241, 127, + 221, 150, 229, 92, 47, 222, 31, 229, 92, 47, 247, 71, 47, 206, 219, 239, + 107, 201, 222, 186, 239, 108, 53, 219, 81, 239, 108, 2, 241, 224, 214, + 121, 218, 224, 219, 81, 239, 108, 2, 241, 224, 214, 121, 218, 224, 211, + 229, 120, 53, 218, 224, 211, 229, 130, 53, 218, 224, 208, 212, 239, 107, + 218, 224, 239, 108, 2, 226, 247, 241, 228, 242, 158, 219, 81, 239, 108, + 2, 221, 211, 250, 6, 226, 247, 23, 218, 149, 241, 223, 59, 130, 220, 201, + 47, 239, 108, 233, 53, 215, 73, 59, 47, 220, 201, 233, 53, 215, 73, 59, + 48, 220, 201, 233, 53, 215, 73, 60, 47, 220, 201, 233, 53, 215, 73, 60, + 48, 220, 201, 233, 53, 60, 47, 220, 201, 250, 174, 233, 53, 60, 48, 220, + 201, 250, 174, 233, 53, 215, 73, 59, 120, 220, 201, 233, 53, 215, 73, 59, + 130, 220, 201, 233, 53, 215, 73, 60, 120, 220, 201, 233, 53, 215, 73, 60, + 130, 220, 201, 233, 53, 60, 120, 220, 201, 250, 174, 233, 53, 60, 130, + 220, 201, 250, 174, 233, 53, 245, 202, 247, 142, 231, 173, 23, 226, 125, + 129, 225, 90, 247, 141, 220, 122, 220, 209, 248, 239, 60, 239, 94, 215, + 204, 241, 177, 245, 92, 59, 239, 94, 215, 204, 241, 177, 245, 92, 214, + 187, 215, 204, 241, 177, 245, 92, 212, 165, 248, 188, 207, 0, 231, 172, + 119, 249, 55, 226, 125, 118, 249, 55, 226, 125, 129, 249, 55, 226, 125, + 211, 81, 44, 221, 113, 247, 142, 239, 94, 245, 92, 217, 93, 220, 123, + 237, 175, 242, 33, 237, 175, 222, 126, 245, 98, 237, 175, 245, 45, 2, + 212, 60, 245, 45, 2, 212, 61, 23, 221, 47, 245, 45, 2, 221, 47, 241, 113, + 2, 221, 47, 241, 113, 2, 211, 178, 241, 113, 2, 252, 123, 206, 195, 60, + 241, 158, 241, 158, 222, 142, 241, 158, 191, 233, 54, 245, 78, 191, 241, + 236, 249, 140, 241, 236, 248, 252, 243, 43, 224, 37, 243, 43, 224, 38, + 222, 37, 243, 43, 224, 38, 222, 42, 224, 37, 224, 38, 222, 37, 224, 38, + 222, 42, 243, 43, 245, 44, 243, 43, 222, 37, 243, 43, 222, 35, 245, 44, + 222, 37, 222, 35, 207, 74, 214, 128, 224, 38, 222, 42, 214, 128, 248, + 238, 222, 42, 245, 202, 207, 8, 226, 204, 227, 163, 222, 84, 247, 194, + 48, 23, 47, 216, 55, 251, 241, 248, 223, 206, 195, 233, 60, 241, 152, + 214, 250, 93, 245, 254, 241, 152, 214, 250, 93, 247, 143, 44, 231, 174, + 218, 112, 225, 84, 222, 38, 2, 39, 212, 60, 213, 255, 248, 89, 246, 129, + 231, 58, 229, 192, 214, 140, 239, 69, 233, 69, 215, 55, 129, 219, 56, 52, + 129, 219, 56, 55, 129, 219, 56, 230, 46, 129, 219, 56, 218, 167, 47, 214, + 137, 249, 100, 48, 214, 137, 249, 100, 118, 214, 137, 249, 99, 129, 214, + 137, 249, 99, 47, 211, 244, 249, 100, 48, 211, 244, 249, 100, 47, 252, + 111, 249, 100, 48, 252, 111, 249, 100, 226, 149, 249, 100, 229, 221, 226, + 149, 249, 100, 229, 221, 226, 148, 250, 146, 96, 2, 250, 145, 250, 146, + 121, 206, 195, 250, 146, 96, 2, 121, 206, 195, 250, 146, 24, 121, 206, + 195, 250, 146, 96, 2, 24, 121, 206, 195, 147, 248, 81, 83, 250, 146, 96, + 2, 24, 248, 80, 206, 227, 227, 205, 226, 130, 241, 83, 211, 124, 211, 86, + 214, 18, 73, 229, 233, 215, 56, 73, 232, 190, 226, 119, 239, 224, 242, + 67, 239, 224, 242, 68, 2, 214, 210, 242, 148, 242, 68, 2, 212, 123, 73, + 232, 107, 214, 210, 242, 68, 2, 222, 142, 226, 123, 214, 210, 242, 68, 2, + 222, 142, 226, 124, 23, 214, 210, 242, 148, 214, 210, 242, 68, 2, 222, + 142, 226, 124, 23, 247, 166, 213, 106, 214, 210, 242, 68, 2, 222, 142, + 226, 124, 23, 211, 196, 242, 148, 214, 210, 242, 68, 2, 239, 119, 214, + 210, 242, 68, 2, 238, 68, 207, 2, 242, 67, 214, 210, 242, 68, 2, 214, + 210, 242, 148, 242, 68, 217, 122, 245, 235, 241, 150, 219, 8, 242, 67, + 214, 210, 242, 68, 2, 239, 59, 242, 148, 214, 210, 242, 68, 2, 213, 150, + 214, 209, 242, 67, 225, 88, 242, 67, 242, 160, 242, 67, 209, 232, 242, + 67, 242, 68, 2, 247, 166, 213, 106, 221, 142, 242, 67, 247, 134, 242, 67, + 247, 135, 242, 67, 231, 90, 242, 67, 242, 68, 211, 231, 32, 231, 91, 231, + 90, 242, 68, 2, 214, 210, 242, 148, 231, 90, 242, 68, 2, 247, 192, 242, + 148, 242, 68, 2, 213, 209, 211, 107, 242, 68, 2, 213, 209, 211, 108, 23, + 207, 2, 242, 150, 242, 68, 2, 213, 209, 211, 108, 23, 211, 196, 242, 148, + 245, 99, 242, 67, 206, 226, 242, 67, 252, 107, 242, 67, 220, 164, 242, + 67, 247, 44, 242, 67, 221, 117, 242, 67, 242, 68, 2, 229, 114, 73, 211, + 29, 245, 99, 249, 57, 219, 8, 242, 67, 241, 94, 242, 68, 2, 222, 142, + 226, 123, 252, 105, 242, 67, 242, 26, 242, 67, 207, 49, 242, 67, 214, + 231, 242, 67, 211, 161, 242, 67, 239, 225, 242, 67, 229, 101, 247, 44, + 242, 67, 242, 68, 2, 222, 142, 226, 123, 238, 20, 242, 67, 242, 68, 2, + 222, 142, 226, 124, 23, 247, 166, 213, 106, 242, 68, 217, 95, 233, 69, + 242, 27, 251, 206, 242, 67, 241, 169, 242, 67, 214, 232, 242, 67, 245, + 71, 242, 67, 242, 68, 206, 253, 226, 123, 242, 68, 2, 227, 111, 227, 175, + 239, 224, 248, 184, 242, 68, 2, 214, 210, 242, 148, 248, 184, 242, 68, 2, + 212, 123, 73, 232, 107, 214, 210, 248, 184, 242, 68, 2, 222, 142, 226, + 123, 214, 210, 248, 184, 242, 68, 2, 239, 59, 242, 148, 248, 184, 242, + 68, 2, 206, 217, 214, 211, 231, 90, 248, 184, 242, 68, 2, 247, 192, 242, + 148, 220, 164, 248, 184, 242, 67, 247, 44, 248, 184, 242, 67, 207, 49, + 248, 184, 242, 67, 214, 225, 241, 94, 242, 67, 214, 225, 214, 210, 242, + 67, 242, 68, 2, 224, 68, 240, 7, 240, 140, 242, 68, 2, 222, 186, 240, + 140, 221, 115, 249, 145, 245, 249, 217, 73, 226, 163, 239, 62, 226, 163, + 214, 143, 226, 163, 239, 96, 221, 115, 219, 80, 119, 239, 107, 221, 115, + 219, 80, 249, 157, 239, 103, 233, 69, 248, 135, 221, 115, 241, 93, 221, + 115, 2, 220, 164, 242, 67, 221, 115, 2, 241, 159, 239, 102, 143, 207, 36, + 220, 201, 230, 53, 188, 207, 36, 220, 201, 230, 53, 143, 243, 117, 220, + 201, 230, 53, 188, 243, 117, 220, 201, 230, 53, 201, 143, 207, 36, 220, + 201, 230, 53, 201, 188, 207, 36, 220, 201, 230, 53, 201, 143, 243, 117, + 220, 201, 230, 53, 201, 188, 243, 117, 220, 201, 230, 53, 143, 207, 36, + 220, 201, 208, 196, 230, 53, 188, 207, 36, 220, 201, 208, 196, 230, 53, + 143, 243, 117, 220, 201, 208, 196, 230, 53, 188, 243, 117, 220, 201, 208, + 196, 230, 53, 77, 143, 207, 36, 220, 201, 208, 196, 230, 53, 77, 188, + 207, 36, 220, 201, 208, 196, 230, 53, 77, 143, 243, 117, 220, 201, 208, + 196, 230, 53, 77, 188, 243, 117, 220, 201, 208, 196, 230, 53, 143, 207, + 36, 220, 201, 249, 97, 188, 207, 36, 220, 201, 249, 97, 143, 243, 117, + 220, 201, 249, 97, 188, 243, 117, 220, 201, 249, 97, 77, 143, 207, 36, + 220, 201, 249, 97, 77, 188, 207, 36, 220, 201, 249, 97, 77, 143, 243, + 117, 220, 201, 249, 97, 77, 188, 243, 117, 220, 201, 249, 97, 238, 139, + 219, 189, 49, 222, 111, 238, 139, 219, 189, 49, 222, 112, 233, 69, 60, + 214, 107, 214, 182, 219, 189, 49, 222, 111, 214, 182, 219, 189, 49, 222, + 112, 233, 69, 60, 214, 107, 92, 218, 116, 167, 218, 116, 86, 218, 116, + 173, 218, 116, 121, 28, 242, 204, 222, 111, 77, 121, 28, 242, 204, 222, + 111, 28, 222, 142, 242, 204, 222, 111, 77, 28, 222, 142, 242, 204, 222, + 111, 77, 252, 126, 222, 111, 213, 109, 252, 126, 222, 111, 38, 77, 50, + 201, 247, 156, 219, 180, 141, 222, 111, 38, 77, 50, 247, 156, 219, 180, + 141, 222, 111, 38, 77, 114, 50, 247, 156, 219, 180, 141, 222, 111, 77, + 233, 11, 222, 111, 38, 233, 11, 222, 111, 77, 38, 233, 11, 222, 111, 208, + 226, 77, 214, 180, 208, 226, 77, 218, 225, 214, 180, 248, 79, 249, 181, + 218, 225, 248, 79, 249, 181, 218, 116, 239, 46, 214, 13, 229, 137, 219, + 86, 248, 204, 238, 248, 211, 74, 238, 248, 211, 75, 2, 249, 86, 224, 44, + 211, 74, 227, 56, 147, 219, 87, 214, 19, 211, 72, 211, 73, 248, 204, 249, + 62, 222, 163, 249, 62, 211, 26, 249, 63, 213, 251, 226, 208, 252, 130, + 241, 220, 243, 27, 220, 193, 248, 204, 222, 163, 220, 193, 248, 204, 212, + 141, 222, 163, 212, 141, 251, 172, 222, 163, 251, 172, 219, 39, 209, 31, + 245, 231, 211, 17, 251, 236, 229, 105, 211, 80, 226, 157, 226, 129, 219, + 85, 213, 122, 219, 85, 226, 129, 248, 251, 252, 234, 211, 71, 215, 167, + 218, 92, 214, 135, 194, 211, 78, 229, 223, 79, 211, 78, 229, 223, 247, + 123, 53, 220, 193, 248, 190, 218, 218, 229, 223, 211, 48, 241, 197, 222, + 166, 220, 175, 245, 26, 224, 68, 243, 14, 53, 214, 208, 93, 224, 68, 214, + 208, 93, 220, 53, 229, 181, 233, 69, 232, 217, 220, 239, 93, 245, 52, + 224, 43, 229, 181, 93, 220, 169, 207, 70, 93, 224, 58, 207, 70, 93, 249, + 240, 224, 68, 249, 239, 249, 238, 226, 129, 249, 238, 221, 166, 224, 68, + 221, 165, 248, 48, 247, 53, 227, 80, 93, 206, 241, 93, 218, 234, 250, + 179, 93, 211, 125, 207, 70, 247, 189, 215, 126, 250, 105, 250, 103, 221, + 197, 247, 108, 247, 12, 250, 160, 247, 217, 47, 229, 71, 211, 52, 2, 218, + 93, 247, 90, 220, 111, 53, 39, 233, 43, 214, 163, 249, 138, 93, 240, 39, + 93, 247, 83, 23, 230, 96, 214, 232, 253, 18, 215, 147, 250, 159, 250, 27, + 250, 28, 250, 51, 239, 115, 23, 206, 220, 215, 180, 222, 190, 243, 241, + 226, 133, 219, 86, 211, 82, 226, 135, 249, 180, 209, 205, 226, 218, 252, + 194, 209, 205, 252, 194, 209, 205, 5, 252, 194, 5, 252, 194, 224, 47, + 252, 194, 252, 195, 245, 215, 252, 195, 251, 246, 217, 129, 222, 163, + 241, 220, 243, 27, 245, 146, 229, 137, 221, 200, 215, 167, 125, 16, 33, + 219, 185, 125, 16, 33, 252, 196, 125, 16, 33, 241, 219, 125, 16, 33, 243, + 120, 125, 16, 33, 207, 69, 125, 16, 33, 252, 39, 125, 16, 33, 252, 40, + 219, 26, 125, 16, 33, 252, 40, 219, 25, 125, 16, 33, 252, 40, 208, 179, + 125, 16, 33, 252, 40, 208, 178, 125, 16, 33, 208, 193, 125, 16, 33, 208, + 192, 125, 16, 33, 208, 191, 125, 16, 33, 213, 161, 125, 16, 33, 221, 70, + 213, 161, 125, 16, 33, 60, 213, 161, 125, 16, 33, 227, 79, 213, 189, 125, + 16, 33, 227, 79, 213, 188, 125, 16, 33, 227, 79, 213, 187, 125, 16, 33, + 247, 236, 125, 16, 33, 217, 165, 125, 16, 33, 224, 183, 125, 16, 33, 208, + 177, 125, 16, 33, 208, 176, 125, 16, 33, 218, 117, 217, 165, 125, 16, 33, + 218, 117, 217, 164, 125, 16, 33, 240, 11, 125, 16, 33, 215, 52, 125, 16, + 33, 232, 240, 222, 117, 125, 16, 33, 232, 240, 222, 116, 125, 16, 33, + 247, 63, 73, 232, 239, 125, 16, 33, 219, 22, 73, 232, 239, 125, 16, 33, + 247, 99, 222, 117, 125, 16, 33, 232, 238, 222, 117, 125, 16, 33, 213, + 190, 73, 247, 98, 125, 16, 33, 247, 63, 73, 247, 98, 125, 16, 33, 247, + 63, 73, 247, 97, 125, 16, 33, 247, 99, 252, 81, 125, 16, 33, 217, 166, + 73, 247, 99, 252, 81, 125, 16, 33, 213, 190, 73, 217, 166, 73, 247, 98, + 125, 16, 33, 209, 26, 125, 16, 33, 211, 174, 222, 117, 125, 16, 33, 230, + 57, 222, 117, 125, 16, 33, 252, 80, 222, 117, 125, 16, 33, 213, 190, 73, + 252, 79, 125, 16, 33, 217, 166, 73, 252, 79, 125, 16, 33, 213, 190, 73, + 217, 166, 73, 252, 79, 125, 16, 33, 208, 194, 73, 252, 79, 125, 16, 33, + 219, 22, 73, 252, 79, 125, 16, 33, 219, 22, 73, 252, 78, 125, 16, 33, + 219, 21, 125, 16, 33, 219, 20, 125, 16, 33, 219, 19, 125, 16, 33, 219, + 18, 125, 16, 33, 252, 159, 125, 16, 33, 252, 158, 125, 16, 33, 227, 196, + 125, 16, 33, 217, 171, 125, 16, 33, 251, 240, 125, 16, 33, 219, 48, 125, + 16, 33, 219, 47, 125, 16, 33, 251, 175, 125, 16, 33, 249, 210, 222, 117, + 125, 16, 33, 212, 160, 125, 16, 33, 212, 159, 125, 16, 33, 219, 191, 229, + 214, 125, 16, 33, 249, 162, 125, 16, 33, 249, 161, 125, 16, 33, 249, 160, + 125, 16, 33, 252, 138, 125, 16, 33, 222, 189, 125, 16, 33, 214, 124, 125, + 16, 33, 211, 172, 125, 16, 33, 239, 194, 125, 16, 33, 207, 57, 125, 16, + 33, 220, 163, 125, 16, 33, 248, 235, 125, 16, 33, 210, 136, 125, 16, 33, + 248, 206, 226, 138, 125, 16, 33, 217, 107, 73, 232, 109, 125, 16, 33, + 248, 248, 125, 16, 33, 211, 45, 125, 16, 33, 214, 24, 211, 45, 125, 16, + 33, 229, 136, 125, 16, 33, 214, 191, 125, 16, 33, 209, 186, 125, 16, 33, + 238, 66, 243, 223, 125, 16, 33, 251, 220, 125, 16, 33, 220, 171, 251, + 220, 125, 16, 33, 249, 118, 125, 16, 33, 220, 162, 249, 118, 125, 16, 33, + 252, 135, 125, 16, 33, 213, 239, 213, 142, 213, 238, 125, 16, 33, 213, + 239, 213, 142, 213, 237, 125, 16, 33, 213, 186, 125, 16, 33, 220, 137, + 125, 16, 33, 245, 88, 125, 16, 33, 245, 90, 125, 16, 33, 245, 89, 125, + 16, 33, 220, 62, 125, 16, 33, 220, 51, 125, 16, 33, 247, 51, 125, 16, 33, + 247, 50, 125, 16, 33, 247, 49, 125, 16, 33, 247, 48, 125, 16, 33, 247, + 47, 125, 16, 33, 252, 171, 125, 16, 33, 250, 106, 73, 227, 180, 125, 16, + 33, 250, 106, 73, 209, 58, 125, 16, 33, 218, 232, 125, 16, 33, 238, 58, + 125, 16, 33, 224, 209, 125, 16, 33, 246, 66, 125, 16, 33, 226, 152, 125, + 16, 33, 160, 243, 253, 125, 16, 33, 160, 222, 95, 60, 230, 41, 232, 223, + 48, 211, 51, 60, 209, 205, 232, 223, 48, 211, 51, 60, 218, 162, 232, 223, + 48, 211, 51, 60, 244, 7, 232, 223, 48, 211, 51, 60, 214, 225, 5, 247, + 233, 227, 109, 24, 59, 247, 233, 24, 59, 247, 233, 77, 59, 247, 233, 208, + 226, 77, 59, 247, 233, 242, 153, 77, 59, 247, 233, 59, 247, 234, 247, + 119, 60, 5, 247, 233, 218, 95, 212, 161, 60, 211, 169, 214, 107, 60, 214, + 225, 5, 214, 107, 147, 59, 214, 107, 227, 109, 59, 214, 107, 24, 59, 214, + 107, 77, 59, 214, 107, 208, 226, 77, 59, 214, 107, 242, 153, 77, 59, 214, + 107, 59, 49, 247, 119, 60, 208, 226, 5, 214, 107, 59, 49, 247, 119, 60, + 227, 109, 214, 107, 49, 212, 161, 60, 211, 169, 245, 156, 60, 208, 226, + 5, 245, 156, 60, 227, 109, 5, 245, 156, 59, 245, 157, 247, 119, 60, 208, + 226, 5, 245, 156, 59, 245, 157, 247, 119, 60, 227, 109, 245, 156, 245, + 157, 212, 161, 60, 211, 169, 229, 88, 60, 208, 226, 5, 229, 88, 60, 227, + 109, 5, 229, 88, 59, 229, 89, 247, 119, 60, 5, 229, 88, 212, 12, 27, 247, + 59, 147, 27, 247, 59, 227, 109, 27, 247, 59, 24, 27, 247, 59, 208, 226, + 24, 27, 247, 59, 208, 226, 77, 27, 247, 59, 242, 153, 77, 27, 247, 59, + 212, 12, 217, 162, 147, 217, 162, 227, 109, 217, 162, 24, 217, 162, 77, + 217, 162, 208, 226, 77, 217, 162, 242, 153, 77, 217, 162, 147, 241, 204, + 214, 119, 251, 209, 227, 109, 241, 204, 214, 119, 251, 209, 24, 241, 204, + 214, 119, 251, 209, 77, 241, 204, 214, 119, 251, 209, 208, 226, 77, 241, + 204, 214, 119, 251, 209, 242, 153, 77, 241, 204, 214, 119, 251, 209, 147, + 215, 10, 214, 119, 251, 209, 227, 109, 215, 10, 214, 119, 251, 209, 24, + 215, 10, 214, 119, 251, 209, 77, 215, 10, 214, 119, 251, 209, 208, 226, + 77, 215, 10, 214, 119, 251, 209, 242, 153, 77, 215, 10, 214, 119, 251, + 209, 147, 243, 88, 214, 119, 251, 209, 227, 109, 243, 88, 214, 119, 251, + 209, 24, 243, 88, 214, 119, 251, 209, 77, 243, 88, 214, 119, 251, 209, + 208, 226, 77, 243, 88, 214, 119, 251, 209, 147, 129, 220, 203, 60, 214, + 26, 227, 109, 129, 220, 203, 60, 214, 26, 129, 220, 203, 60, 214, 26, + 227, 109, 129, 220, 203, 221, 4, 214, 26, 147, 241, 125, 220, 203, 60, + 214, 26, 227, 109, 241, 125, 220, 203, 60, 214, 26, 241, 125, 220, 203, + 60, 214, 26, 227, 109, 241, 125, 220, 203, 221, 4, 214, 26, 218, 225, + 147, 241, 125, 220, 203, 221, 4, 214, 26, 147, 241, 204, 220, 203, 60, + 214, 26, 77, 241, 204, 220, 203, 60, 214, 26, 227, 109, 215, 10, 220, + 203, 60, 214, 26, 77, 215, 10, 220, 203, 60, 214, 26, 215, 10, 220, 203, + 221, 4, 214, 26, 227, 109, 243, 88, 220, 203, 60, 214, 26, 77, 243, 88, + 220, 203, 60, 214, 26, 208, 226, 77, 243, 88, 220, 203, 60, 214, 26, 77, + 243, 88, 220, 203, 221, 4, 214, 26, 147, 210, 127, 220, 203, 60, 214, 26, + 77, 210, 127, 220, 203, 60, 214, 26, 77, 210, 127, 220, 203, 221, 4, 214, + 26, 92, 51, 2, 5, 211, 52, 251, 243, 167, 51, 2, 5, 211, 52, 251, 243, + 86, 51, 2, 5, 211, 52, 251, 243, 173, 51, 2, 5, 211, 52, 251, 243, 92, + 51, 2, 227, 109, 211, 52, 251, 243, 167, 51, 2, 227, 109, 211, 52, 251, + 243, 86, 51, 2, 227, 109, 211, 52, 251, 243, 173, 51, 2, 227, 109, 211, + 52, 251, 243, 92, 51, 2, 230, 86, 211, 52, 251, 243, 167, 51, 2, 230, 86, + 211, 52, 251, 243, 86, 51, 2, 230, 86, 211, 52, 251, 243, 173, 51, 2, + 230, 86, 211, 52, 251, 243, 92, 51, 2, 5, 242, 238, 251, 243, 167, 51, 2, + 5, 242, 238, 251, 243, 86, 51, 2, 5, 242, 238, 251, 243, 173, 51, 2, 5, + 242, 238, 251, 243, 92, 51, 2, 242, 238, 251, 243, 167, 51, 2, 242, 238, + 251, 243, 86, 51, 2, 242, 238, 251, 243, 173, 51, 2, 242, 238, 251, 243, + 77, 92, 51, 2, 242, 238, 251, 243, 77, 167, 51, 2, 242, 238, 251, 243, + 77, 86, 51, 2, 242, 238, 251, 243, 77, 173, 51, 2, 242, 238, 251, 243, + 77, 92, 51, 2, 230, 86, 242, 238, 251, 243, 77, 167, 51, 2, 230, 86, 242, + 238, 251, 243, 77, 86, 51, 2, 230, 86, 242, 238, 251, 243, 77, 173, 51, + 2, 230, 86, 242, 238, 251, 243, 92, 211, 50, 51, 2, 225, 199, 215, 244, + 167, 211, 50, 51, 2, 225, 199, 215, 244, 86, 211, 50, 51, 2, 225, 199, + 215, 244, 173, 211, 50, 51, 2, 225, 199, 215, 244, 92, 211, 50, 51, 2, + 227, 109, 215, 244, 167, 211, 50, 51, 2, 227, 109, 215, 244, 86, 211, 50, + 51, 2, 227, 109, 215, 244, 173, 211, 50, 51, 2, 227, 109, 215, 244, 92, + 211, 50, 51, 2, 24, 215, 244, 167, 211, 50, 51, 2, 24, 215, 244, 86, 211, + 50, 51, 2, 24, 215, 244, 173, 211, 50, 51, 2, 24, 215, 244, 92, 211, 50, + 51, 2, 77, 215, 244, 167, 211, 50, 51, 2, 77, 215, 244, 86, 211, 50, 51, + 2, 77, 215, 244, 173, 211, 50, 51, 2, 77, 215, 244, 92, 211, 50, 51, 2, + 208, 226, 77, 215, 244, 167, 211, 50, 51, 2, 208, 226, 77, 215, 244, 86, + 211, 50, 51, 2, 208, 226, 77, 215, 244, 173, 211, 50, 51, 2, 208, 226, + 77, 215, 244, 92, 241, 227, 45, 167, 241, 227, 45, 86, 241, 227, 45, 173, + 241, 227, 45, 92, 98, 45, 167, 98, 45, 86, 98, 45, 173, 98, 45, 92, 247, + 144, 45, 167, 247, 144, 45, 86, 247, 144, 45, 173, 247, 144, 45, 92, 77, + 247, 144, 45, 167, 77, 247, 144, 45, 86, 77, 247, 144, 45, 173, 77, 247, + 144, 45, 92, 77, 45, 167, 77, 45, 86, 77, 45, 173, 77, 45, 92, 38, 45, + 167, 38, 45, 86, 38, 45, 173, 38, 45, 143, 207, 36, 38, 45, 143, 243, + 117, 38, 45, 188, 243, 117, 38, 45, 188, 207, 36, 38, 45, 47, 48, 38, 45, + 120, 130, 38, 45, 207, 16, 92, 147, 138, 45, 207, 16, 167, 147, 138, 45, + 207, 16, 86, 147, 138, 45, 207, 16, 173, 147, 138, 45, 207, 16, 143, 207, + 36, 147, 138, 45, 207, 16, 143, 243, 117, 147, 138, 45, 207, 16, 188, + 243, 117, 147, 138, 45, 207, 16, 188, 207, 36, 147, 138, 45, 207, 16, 92, + 138, 45, 207, 16, 167, 138, 45, 207, 16, 86, 138, 45, 207, 16, 173, 138, + 45, 207, 16, 143, 207, 36, 138, 45, 207, 16, 143, 243, 117, 138, 45, 207, + 16, 188, 243, 117, 138, 45, 207, 16, 188, 207, 36, 138, 45, 207, 16, 92, + 227, 109, 138, 45, 207, 16, 167, 227, 109, 138, 45, 207, 16, 86, 227, + 109, 138, 45, 207, 16, 173, 227, 109, 138, 45, 207, 16, 143, 207, 36, + 227, 109, 138, 45, 207, 16, 143, 243, 117, 227, 109, 138, 45, 207, 16, + 188, 243, 117, 227, 109, 138, 45, 207, 16, 188, 207, 36, 227, 109, 138, + 45, 207, 16, 92, 77, 138, 45, 207, 16, 167, 77, 138, 45, 207, 16, 86, 77, + 138, 45, 207, 16, 173, 77, 138, 45, 207, 16, 143, 207, 36, 77, 138, 45, + 207, 16, 143, 243, 117, 77, 138, 45, 207, 16, 188, 243, 117, 77, 138, 45, + 207, 16, 188, 207, 36, 77, 138, 45, 207, 16, 92, 208, 226, 77, 138, 45, + 207, 16, 167, 208, 226, 77, 138, 45, 207, 16, 86, 208, 226, 77, 138, 45, + 207, 16, 173, 208, 226, 77, 138, 45, 207, 16, 143, 207, 36, 208, 226, 77, + 138, 45, 207, 16, 143, 243, 117, 208, 226, 77, 138, 45, 207, 16, 188, + 243, 117, 208, 226, 77, 138, 45, 207, 16, 188, 207, 36, 208, 226, 77, + 138, 45, 92, 211, 52, 251, 243, 167, 211, 52, 251, 243, 86, 211, 52, 251, + 243, 173, 211, 52, 251, 243, 92, 59, 51, 206, 255, 211, 52, 251, 243, + 167, 59, 51, 206, 255, 211, 52, 251, 243, 86, 59, 51, 206, 255, 211, 52, + 251, 243, 173, 59, 51, 206, 255, 211, 52, 251, 243, 92, 51, 2, 224, 39, + 212, 191, 167, 51, 2, 224, 39, 212, 191, 86, 51, 2, 224, 39, 212, 191, + 173, 51, 2, 224, 39, 212, 191, 77, 51, 215, 245, 207, 15, 102, 77, 51, + 215, 245, 207, 15, 118, 212, 7, 77, 51, 215, 245, 207, 15, 119, 239, 121, + 77, 51, 215, 245, 207, 15, 119, 212, 10, 92, 249, 151, 59, 45, 86, 249, + 154, 215, 247, 59, 45, 92, 211, 102, 215, 247, 59, 45, 86, 211, 102, 215, + 247, 59, 45, 92, 230, 40, 59, 45, 86, 218, 161, 59, 45, 92, 218, 161, 59, + 45, 86, 230, 40, 59, 45, 92, 250, 175, 215, 246, 59, 45, 86, 250, 175, + 215, 246, 59, 45, 92, 241, 96, 215, 246, 59, 45, 86, 241, 96, 215, 246, + 59, 45, 59, 51, 215, 245, 207, 15, 102, 59, 51, 215, 245, 207, 15, 118, + 212, 7, 10, 15, 237, 171, 10, 15, 237, 170, 10, 15, 237, 169, 10, 15, + 237, 168, 10, 15, 237, 167, 10, 15, 237, 166, 10, 15, 237, 165, 10, 15, + 237, 164, 10, 15, 237, 163, 10, 15, 237, 162, 10, 15, 237, 161, 10, 15, + 237, 160, 10, 15, 237, 159, 10, 15, 237, 158, 10, 15, 237, 157, 10, 15, + 237, 156, 10, 15, 237, 155, 10, 15, 237, 154, 10, 15, 237, 153, 10, 15, + 237, 152, 10, 15, 237, 151, 10, 15, 237, 150, 10, 15, 237, 149, 10, 15, + 237, 148, 10, 15, 237, 147, 10, 15, 237, 146, 10, 15, 237, 145, 10, 15, + 237, 144, 10, 15, 237, 143, 10, 15, 237, 142, 10, 15, 237, 141, 10, 15, + 237, 140, 10, 15, 237, 139, 10, 15, 237, 138, 10, 15, 237, 137, 10, 15, + 237, 136, 10, 15, 237, 135, 10, 15, 237, 134, 10, 15, 237, 133, 10, 15, + 237, 132, 10, 15, 237, 131, 10, 15, 237, 130, 10, 15, 237, 129, 10, 15, + 237, 128, 10, 15, 237, 127, 10, 15, 237, 126, 10, 15, 237, 125, 10, 15, + 237, 124, 10, 15, 237, 123, 10, 15, 237, 122, 10, 15, 237, 121, 10, 15, + 237, 120, 10, 15, 237, 119, 10, 15, 237, 118, 10, 15, 237, 117, 10, 15, + 237, 116, 10, 15, 237, 115, 10, 15, 237, 114, 10, 15, 237, 113, 10, 15, + 237, 112, 10, 15, 237, 111, 10, 15, 237, 110, 10, 15, 237, 109, 10, 15, + 237, 108, 10, 15, 237, 107, 10, 15, 237, 106, 10, 15, 237, 105, 10, 15, + 237, 104, 10, 15, 237, 103, 10, 15, 237, 102, 10, 15, 237, 101, 10, 15, + 237, 100, 10, 15, 237, 99, 10, 15, 237, 98, 10, 15, 237, 97, 10, 15, 237, + 96, 10, 15, 237, 95, 10, 15, 237, 94, 10, 15, 237, 93, 10, 15, 237, 92, + 10, 15, 237, 91, 10, 15, 237, 90, 10, 15, 237, 89, 10, 15, 237, 88, 10, + 15, 237, 87, 10, 15, 237, 86, 10, 15, 237, 85, 10, 15, 237, 84, 10, 15, + 237, 83, 10, 15, 237, 82, 10, 15, 237, 81, 10, 15, 237, 80, 10, 15, 237, + 79, 10, 15, 237, 78, 10, 15, 237, 77, 10, 15, 237, 76, 10, 15, 237, 75, + 10, 15, 237, 74, 10, 15, 237, 73, 10, 15, 237, 72, 10, 15, 237, 71, 10, + 15, 237, 70, 10, 15, 237, 69, 10, 15, 237, 68, 10, 15, 237, 67, 10, 15, + 237, 66, 10, 15, 237, 65, 10, 15, 237, 64, 10, 15, 237, 63, 10, 15, 237, + 62, 10, 15, 237, 61, 10, 15, 237, 60, 10, 15, 237, 59, 10, 15, 237, 58, + 10, 15, 237, 57, 10, 15, 237, 56, 10, 15, 237, 55, 10, 15, 237, 54, 10, + 15, 237, 53, 10, 15, 237, 52, 10, 15, 237, 51, 10, 15, 237, 50, 10, 15, + 237, 49, 10, 15, 237, 48, 10, 15, 237, 47, 10, 15, 237, 46, 10, 15, 237, + 45, 10, 15, 237, 44, 10, 15, 237, 43, 10, 15, 237, 42, 10, 15, 237, 41, + 10, 15, 237, 40, 10, 15, 237, 39, 10, 15, 237, 38, 10, 15, 237, 37, 10, + 15, 237, 36, 10, 15, 237, 35, 10, 15, 237, 34, 10, 15, 237, 33, 10, 15, + 237, 32, 10, 15, 237, 31, 10, 15, 237, 30, 10, 15, 237, 29, 10, 15, 237, + 28, 10, 15, 237, 27, 10, 15, 237, 26, 10, 15, 237, 25, 10, 15, 237, 24, + 10, 15, 237, 23, 10, 15, 237, 22, 10, 15, 237, 21, 10, 15, 237, 20, 10, + 15, 237, 19, 10, 15, 237, 18, 10, 15, 237, 17, 10, 15, 237, 16, 10, 15, + 237, 15, 10, 15, 237, 14, 10, 15, 237, 13, 10, 15, 237, 12, 10, 15, 237, + 11, 10, 15, 237, 10, 10, 15, 237, 9, 10, 15, 237, 8, 10, 15, 237, 7, 10, + 15, 237, 6, 10, 15, 237, 5, 10, 15, 237, 4, 10, 15, 237, 3, 10, 15, 237, + 2, 10, 15, 237, 1, 10, 15, 237, 0, 10, 15, 236, 255, 10, 15, 236, 254, + 10, 15, 236, 253, 10, 15, 236, 252, 10, 15, 236, 251, 10, 15, 236, 250, + 10, 15, 236, 249, 10, 15, 236, 248, 10, 15, 236, 247, 10, 15, 236, 246, + 10, 15, 236, 245, 10, 15, 236, 244, 10, 15, 236, 243, 10, 15, 236, 242, + 10, 15, 236, 241, 10, 15, 236, 240, 10, 15, 236, 239, 10, 15, 236, 238, + 10, 15, 236, 237, 10, 15, 236, 236, 10, 15, 236, 235, 10, 15, 236, 234, + 10, 15, 236, 233, 10, 15, 236, 232, 10, 15, 236, 231, 10, 15, 236, 230, + 10, 15, 236, 229, 10, 15, 236, 228, 10, 15, 236, 227, 10, 15, 236, 226, + 10, 15, 236, 225, 10, 15, 236, 224, 10, 15, 236, 223, 10, 15, 236, 222, + 10, 15, 236, 221, 10, 15, 236, 220, 10, 15, 236, 219, 10, 15, 236, 218, + 10, 15, 236, 217, 10, 15, 236, 216, 10, 15, 236, 215, 10, 15, 236, 214, + 10, 15, 236, 213, 10, 15, 236, 212, 10, 15, 236, 211, 10, 15, 236, 210, + 10, 15, 236, 209, 10, 15, 236, 208, 10, 15, 236, 207, 10, 15, 236, 206, + 10, 15, 236, 205, 10, 15, 236, 204, 10, 15, 236, 203, 10, 15, 236, 202, + 10, 15, 236, 201, 10, 15, 236, 200, 10, 15, 236, 199, 10, 15, 236, 198, + 10, 15, 236, 197, 10, 15, 236, 196, 10, 15, 236, 195, 10, 15, 236, 194, + 10, 15, 236, 193, 10, 15, 236, 192, 10, 15, 236, 191, 10, 15, 236, 190, + 10, 15, 236, 189, 10, 15, 236, 188, 10, 15, 236, 187, 10, 15, 236, 186, + 10, 15, 236, 185, 10, 15, 236, 184, 10, 15, 236, 183, 10, 15, 236, 182, + 10, 15, 236, 181, 10, 15, 236, 180, 10, 15, 236, 179, 10, 15, 236, 178, + 10, 15, 236, 177, 10, 15, 236, 176, 10, 15, 236, 175, 10, 15, 236, 174, + 10, 15, 236, 173, 10, 15, 236, 172, 10, 15, 236, 171, 10, 15, 236, 170, + 10, 15, 236, 169, 10, 15, 236, 168, 10, 15, 236, 167, 10, 15, 236, 166, + 10, 15, 236, 165, 10, 15, 236, 164, 10, 15, 236, 163, 10, 15, 236, 162, + 10, 15, 236, 161, 10, 15, 236, 160, 10, 15, 236, 159, 10, 15, 236, 158, + 10, 15, 236, 157, 10, 15, 236, 156, 10, 15, 236, 155, 10, 15, 236, 154, + 10, 15, 236, 153, 10, 15, 236, 152, 10, 15, 236, 151, 10, 15, 236, 150, + 10, 15, 236, 149, 10, 15, 236, 148, 10, 15, 236, 147, 10, 15, 236, 146, + 10, 15, 236, 145, 10, 15, 236, 144, 10, 15, 236, 143, 10, 15, 236, 142, + 10, 15, 236, 141, 10, 15, 236, 140, 10, 15, 236, 139, 10, 15, 236, 138, + 10, 15, 236, 137, 10, 15, 236, 136, 10, 15, 236, 135, 10, 15, 236, 134, + 10, 15, 236, 133, 10, 15, 236, 132, 10, 15, 236, 131, 10, 15, 236, 130, + 10, 15, 236, 129, 10, 15, 236, 128, 10, 15, 236, 127, 10, 15, 236, 126, + 10, 15, 236, 125, 10, 15, 236, 124, 10, 15, 236, 123, 10, 15, 236, 122, + 10, 15, 236, 121, 10, 15, 236, 120, 10, 15, 236, 119, 10, 15, 236, 118, + 10, 15, 236, 117, 10, 15, 236, 116, 10, 15, 236, 115, 10, 15, 236, 114, + 10, 15, 236, 113, 10, 15, 236, 112, 10, 15, 236, 111, 10, 15, 236, 110, + 10, 15, 236, 109, 10, 15, 236, 108, 10, 15, 236, 107, 10, 15, 236, 106, + 10, 15, 236, 105, 10, 15, 236, 104, 10, 15, 236, 103, 10, 15, 236, 102, + 10, 15, 236, 101, 10, 15, 236, 100, 10, 15, 236, 99, 10, 15, 236, 98, 10, + 15, 236, 97, 10, 15, 236, 96, 10, 15, 236, 95, 10, 15, 236, 94, 10, 15, + 236, 93, 10, 15, 236, 92, 10, 15, 236, 91, 10, 15, 236, 90, 10, 15, 236, + 89, 10, 15, 236, 88, 10, 15, 236, 87, 10, 15, 236, 86, 10, 15, 236, 85, + 10, 15, 236, 84, 10, 15, 236, 83, 10, 15, 236, 82, 10, 15, 236, 81, 10, + 15, 236, 80, 10, 15, 236, 79, 10, 15, 236, 78, 10, 15, 236, 77, 10, 15, + 236, 76, 10, 15, 236, 75, 10, 15, 236, 74, 10, 15, 236, 73, 10, 15, 236, + 72, 10, 15, 236, 71, 10, 15, 236, 70, 10, 15, 236, 69, 10, 15, 236, 68, + 10, 15, 236, 67, 10, 15, 236, 66, 10, 15, 236, 65, 10, 15, 236, 64, 10, + 15, 236, 63, 10, 15, 236, 62, 10, 15, 236, 61, 10, 15, 236, 60, 10, 15, + 236, 59, 10, 15, 236, 58, 10, 15, 236, 57, 10, 15, 236, 56, 10, 15, 236, + 55, 10, 15, 236, 54, 10, 15, 236, 53, 10, 15, 236, 52, 10, 15, 236, 51, + 10, 15, 236, 50, 10, 15, 236, 49, 10, 15, 236, 48, 10, 15, 236, 47, 10, + 15, 236, 46, 10, 15, 236, 45, 10, 15, 236, 44, 10, 15, 236, 43, 10, 15, + 236, 42, 10, 15, 236, 41, 10, 15, 236, 40, 10, 15, 236, 39, 10, 15, 236, + 38, 10, 15, 236, 37, 10, 15, 236, 36, 10, 15, 236, 35, 10, 15, 236, 34, + 10, 15, 236, 33, 10, 15, 236, 32, 10, 15, 236, 31, 10, 15, 236, 30, 10, + 15, 236, 29, 10, 15, 236, 28, 10, 15, 236, 27, 10, 15, 236, 26, 10, 15, + 236, 25, 10, 15, 236, 24, 10, 15, 236, 23, 10, 15, 236, 22, 10, 15, 236, + 21, 10, 15, 236, 20, 10, 15, 236, 19, 10, 15, 236, 18, 10, 15, 236, 17, + 10, 15, 236, 16, 10, 15, 236, 15, 10, 15, 236, 14, 10, 15, 236, 13, 10, + 15, 236, 12, 10, 15, 236, 11, 10, 15, 236, 10, 10, 15, 236, 9, 10, 15, + 236, 8, 10, 15, 236, 7, 10, 15, 236, 6, 10, 15, 236, 5, 10, 15, 236, 4, + 10, 15, 236, 3, 10, 15, 236, 2, 10, 15, 236, 1, 10, 15, 236, 0, 10, 15, + 235, 255, 10, 15, 235, 254, 10, 15, 235, 253, 10, 15, 235, 252, 10, 15, + 235, 251, 10, 15, 235, 250, 10, 15, 235, 249, 10, 15, 235, 248, 10, 15, + 235, 247, 10, 15, 235, 246, 10, 15, 235, 245, 10, 15, 235, 244, 10, 15, + 235, 243, 10, 15, 235, 242, 10, 15, 235, 241, 10, 15, 235, 240, 10, 15, + 235, 239, 10, 15, 235, 238, 10, 15, 235, 237, 10, 15, 235, 236, 10, 15, + 235, 235, 10, 15, 235, 234, 10, 15, 235, 233, 10, 15, 235, 232, 10, 15, + 235, 231, 10, 15, 235, 230, 10, 15, 235, 229, 10, 15, 235, 228, 10, 15, + 235, 227, 10, 15, 235, 226, 10, 15, 235, 225, 10, 15, 235, 224, 10, 15, + 235, 223, 10, 15, 235, 222, 10, 15, 235, 221, 10, 15, 235, 220, 10, 15, + 235, 219, 10, 15, 235, 218, 10, 15, 235, 217, 10, 15, 235, 216, 10, 15, + 235, 215, 10, 15, 235, 214, 10, 15, 235, 213, 10, 15, 235, 212, 10, 15, + 235, 211, 10, 15, 235, 210, 10, 15, 235, 209, 10, 15, 235, 208, 10, 15, + 235, 207, 10, 15, 235, 206, 10, 15, 235, 205, 10, 15, 235, 204, 10, 15, + 235, 203, 10, 15, 235, 202, 10, 15, 235, 201, 10, 15, 235, 200, 10, 15, + 235, 199, 10, 15, 235, 198, 10, 15, 235, 197, 10, 15, 235, 196, 10, 15, + 235, 195, 10, 15, 235, 194, 10, 15, 235, 193, 10, 15, 235, 192, 10, 15, + 235, 191, 10, 15, 235, 190, 10, 15, 235, 189, 10, 15, 235, 188, 10, 15, + 235, 187, 10, 15, 235, 186, 10, 15, 235, 185, 10, 15, 235, 184, 10, 15, + 235, 183, 10, 15, 235, 182, 10, 15, 235, 181, 10, 15, 235, 180, 10, 15, + 235, 179, 10, 15, 235, 178, 10, 15, 235, 177, 10, 15, 235, 176, 10, 15, + 235, 175, 10, 15, 235, 174, 10, 15, 235, 173, 10, 15, 235, 172, 10, 15, + 235, 171, 10, 15, 235, 170, 10, 15, 235, 169, 10, 15, 235, 168, 10, 15, + 235, 167, 10, 15, 235, 166, 10, 15, 235, 165, 10, 15, 235, 164, 10, 15, + 235, 163, 10, 15, 235, 162, 10, 15, 235, 161, 10, 15, 235, 160, 10, 15, + 235, 159, 10, 15, 235, 158, 10, 15, 235, 157, 10, 15, 235, 156, 10, 15, + 235, 155, 10, 15, 235, 154, 10, 15, 235, 153, 10, 15, 235, 152, 10, 15, + 235, 151, 10, 15, 235, 150, 10, 15, 235, 149, 10, 15, 235, 148, 10, 15, + 235, 147, 10, 15, 235, 146, 10, 15, 235, 145, 10, 15, 235, 144, 10, 15, + 235, 143, 10, 15, 235, 142, 230, 92, 212, 198, 150, 214, 153, 150, 242, + 168, 83, 150, 219, 180, 83, 150, 43, 53, 150, 245, 35, 53, 150, 221, 131, + 53, 150, 252, 125, 150, 252, 53, 150, 47, 221, 216, 150, 48, 221, 216, + 150, 251, 209, 150, 101, 53, 150, 247, 155, 150, 237, 238, 150, 241, 82, + 213, 251, 150, 214, 180, 150, 18, 205, 85, 150, 18, 102, 150, 18, 105, + 150, 18, 142, 150, 18, 139, 150, 18, 168, 150, 18, 184, 150, 18, 195, + 150, 18, 193, 150, 18, 200, 150, 247, 162, 150, 216, 52, 150, 230, 10, + 53, 150, 242, 242, 53, 150, 239, 230, 53, 150, 219, 196, 83, 150, 247, + 153, 251, 199, 150, 7, 6, 1, 62, 150, 7, 6, 1, 251, 150, 150, 7, 6, 1, + 249, 34, 150, 7, 6, 1, 246, 240, 150, 7, 6, 1, 75, 150, 7, 6, 1, 242, + 139, 150, 7, 6, 1, 241, 55, 150, 7, 6, 1, 239, 155, 150, 7, 6, 1, 74, + 150, 7, 6, 1, 232, 203, 150, 7, 6, 1, 232, 76, 150, 7, 6, 1, 149, 150, 7, + 6, 1, 229, 28, 150, 7, 6, 1, 226, 33, 150, 7, 6, 1, 76, 150, 7, 6, 1, + 222, 67, 150, 7, 6, 1, 220, 27, 150, 7, 6, 1, 137, 150, 7, 6, 1, 182, + 150, 7, 6, 1, 213, 10, 150, 7, 6, 1, 71, 150, 7, 6, 1, 209, 148, 150, 7, + 6, 1, 207, 129, 150, 7, 6, 1, 206, 195, 150, 7, 6, 1, 206, 123, 150, 7, + 6, 1, 205, 159, 150, 47, 49, 145, 150, 218, 225, 214, 180, 150, 48, 49, + 145, 150, 247, 228, 253, 21, 150, 114, 229, 205, 150, 239, 237, 253, 21, + 150, 7, 5, 1, 62, 150, 7, 5, 1, 251, 150, 150, 7, 5, 1, 249, 34, 150, 7, + 5, 1, 246, 240, 150, 7, 5, 1, 75, 150, 7, 5, 1, 242, 139, 150, 7, 5, 1, + 241, 55, 150, 7, 5, 1, 239, 155, 150, 7, 5, 1, 74, 150, 7, 5, 1, 232, + 203, 150, 7, 5, 1, 232, 76, 150, 7, 5, 1, 149, 150, 7, 5, 1, 229, 28, + 150, 7, 5, 1, 226, 33, 150, 7, 5, 1, 76, 150, 7, 5, 1, 222, 67, 150, 7, + 5, 1, 220, 27, 150, 7, 5, 1, 137, 150, 7, 5, 1, 182, 150, 7, 5, 1, 213, + 10, 150, 7, 5, 1, 71, 150, 7, 5, 1, 209, 148, 150, 7, 5, 1, 207, 129, + 150, 7, 5, 1, 206, 195, 150, 7, 5, 1, 206, 123, 150, 7, 5, 1, 205, 159, + 150, 47, 247, 26, 145, 150, 79, 229, 205, 150, 48, 247, 26, 145, 150, + 211, 180, 248, 225, 212, 198, 54, 216, 236, 54, 216, 225, 54, 216, 214, + 54, 216, 202, 54, 216, 191, 54, 216, 180, 54, 216, 169, 54, 216, 158, 54, + 216, 147, 54, 216, 139, 54, 216, 138, 54, 216, 137, 54, 216, 136, 54, + 216, 134, 54, 216, 133, 54, 216, 132, 54, 216, 131, 54, 216, 130, 54, + 216, 129, 54, 216, 128, 54, 216, 127, 54, 216, 126, 54, 216, 125, 54, + 216, 123, 54, 216, 122, 54, 216, 121, 54, 216, 120, 54, 216, 119, 54, + 216, 118, 54, 216, 117, 54, 216, 116, 54, 216, 115, 54, 216, 114, 54, + 216, 112, 54, 216, 111, 54, 216, 110, 54, 216, 109, 54, 216, 108, 54, + 216, 107, 54, 216, 106, 54, 216, 105, 54, 216, 104, 54, 216, 103, 54, + 216, 101, 54, 216, 100, 54, 216, 99, 54, 216, 98, 54, 216, 97, 54, 216, + 96, 54, 216, 95, 54, 216, 94, 54, 216, 93, 54, 216, 92, 54, 216, 90, 54, + 216, 89, 54, 216, 88, 54, 216, 87, 54, 216, 86, 54, 216, 85, 54, 216, 84, + 54, 216, 83, 54, 216, 82, 54, 216, 81, 54, 216, 79, 54, 216, 78, 54, 216, + 77, 54, 216, 76, 54, 216, 75, 54, 216, 74, 54, 216, 73, 54, 216, 72, 54, + 216, 71, 54, 216, 70, 54, 216, 68, 54, 216, 67, 54, 216, 66, 54, 216, 65, + 54, 216, 64, 54, 216, 63, 54, 216, 62, 54, 216, 61, 54, 216, 60, 54, 216, + 59, 54, 217, 56, 54, 217, 55, 54, 217, 54, 54, 217, 53, 54, 217, 52, 54, + 217, 51, 54, 217, 50, 54, 217, 49, 54, 217, 48, 54, 217, 47, 54, 217, 45, + 54, 217, 44, 54, 217, 43, 54, 217, 42, 54, 217, 41, 54, 217, 40, 54, 217, + 39, 54, 217, 38, 54, 217, 37, 54, 217, 36, 54, 217, 34, 54, 217, 33, 54, + 217, 32, 54, 217, 31, 54, 217, 30, 54, 217, 29, 54, 217, 28, 54, 217, 27, + 54, 217, 26, 54, 217, 25, 54, 217, 23, 54, 217, 22, 54, 217, 21, 54, 217, + 20, 54, 217, 19, 54, 217, 18, 54, 217, 17, 54, 217, 16, 54, 217, 15, 54, + 217, 14, 54, 217, 12, 54, 217, 11, 54, 217, 10, 54, 217, 9, 54, 217, 8, + 54, 217, 7, 54, 217, 6, 54, 217, 5, 54, 217, 4, 54, 217, 3, 54, 217, 1, + 54, 217, 0, 54, 216, 255, 54, 216, 254, 54, 216, 253, 54, 216, 252, 54, + 216, 251, 54, 216, 250, 54, 216, 249, 54, 216, 248, 54, 216, 246, 54, + 216, 245, 54, 216, 244, 54, 216, 243, 54, 216, 242, 54, 216, 241, 54, + 216, 240, 54, 216, 239, 54, 216, 238, 54, 216, 237, 54, 216, 235, 54, + 216, 234, 54, 216, 233, 54, 216, 232, 54, 216, 231, 54, 216, 230, 54, + 216, 229, 54, 216, 228, 54, 216, 227, 54, 216, 226, 54, 216, 224, 54, + 216, 223, 54, 216, 222, 54, 216, 221, 54, 216, 220, 54, 216, 219, 54, + 216, 218, 54, 216, 217, 54, 216, 216, 54, 216, 215, 54, 216, 213, 54, + 216, 212, 54, 216, 211, 54, 216, 210, 54, 216, 209, 54, 216, 208, 54, + 216, 207, 54, 216, 206, 54, 216, 205, 54, 216, 204, 54, 216, 201, 54, + 216, 200, 54, 216, 199, 54, 216, 198, 54, 216, 197, 54, 216, 196, 54, + 216, 195, 54, 216, 194, 54, 216, 193, 54, 216, 192, 54, 216, 190, 54, + 216, 189, 54, 216, 188, 54, 216, 187, 54, 216, 186, 54, 216, 185, 54, + 216, 184, 54, 216, 183, 54, 216, 182, 54, 216, 181, 54, 216, 179, 54, + 216, 178, 54, 216, 177, 54, 216, 176, 54, 216, 175, 54, 216, 174, 54, + 216, 173, 54, 216, 172, 54, 216, 171, 54, 216, 170, 54, 216, 168, 54, + 216, 167, 54, 216, 166, 54, 216, 165, 54, 216, 164, 54, 216, 163, 54, + 216, 162, 54, 216, 161, 54, 216, 160, 54, 216, 159, 54, 216, 157, 54, + 216, 156, 54, 216, 155, 54, 216, 154, 54, 216, 153, 54, 216, 152, 54, + 216, 151, 54, 216, 150, 54, 216, 149, 54, 216, 148, 54, 216, 146, 54, + 216, 145, 54, 216, 144, 54, 216, 143, 54, 216, 142, 54, 216, 141, 54, + 216, 140, 223, 181, 223, 183, 214, 22, 73, 239, 66, 214, 183, 214, 22, + 73, 212, 60, 213, 205, 243, 34, 73, 212, 60, 242, 193, 243, 34, 73, 211, + 69, 242, 254, 243, 21, 243, 22, 253, 13, 253, 14, 252, 169, 250, 31, 250, + 170, 249, 107, 157, 212, 203, 194, 212, 203, 238, 47, 212, 207, 229, 206, + 242, 19, 186, 229, 205, 243, 34, 73, 229, 205, 229, 250, 224, 129, 243, + 1, 229, 206, 212, 203, 79, 212, 203, 207, 150, 241, 136, 242, 19, 241, + 254, 248, 191, 218, 228, 247, 73, 215, 179, 222, 93, 229, 138, 102, 214, + 193, 215, 179, 233, 68, 229, 138, 205, 85, 215, 80, 246, 73, 229, 196, + 242, 217, 245, 61, 245, 199, 247, 109, 102, 246, 62, 245, 199, 247, 109, + 105, 246, 61, 245, 199, 247, 109, 142, 246, 60, 245, 199, 247, 109, 139, + 246, 59, 170, 253, 13, 225, 215, 213, 36, 233, 131, 213, 39, 243, 34, 73, + 211, 70, 249, 193, 242, 200, 248, 224, 248, 226, 243, 34, 73, 227, 108, + 242, 255, 213, 179, 213, 196, 242, 217, 242, 218, 233, 43, 216, 40, 139, + 241, 236, 216, 39, 241, 92, 233, 43, 216, 40, 142, 239, 221, 216, 39, + 239, 218, 233, 43, 216, 40, 105, 219, 43, 216, 39, 218, 55, 233, 43, 216, + 40, 102, 209, 217, 216, 39, 209, 177, 214, 156, 245, 236, 245, 238, 222, + 40, 248, 94, 222, 42, 127, 222, 213, 220, 130, 238, 124, 249, 126, 221, + 121, 239, 35, 249, 137, 224, 68, 249, 126, 239, 35, 225, 179, 233, 53, + 233, 56, 225, 82, 229, 205, 225, 102, 214, 22, 73, 217, 61, 252, 13, 214, + 96, 243, 34, 73, 217, 61, 252, 13, 242, 220, 157, 212, 204, 216, 28, 194, + 212, 204, 216, 28, 238, 44, 157, 212, 204, 2, 232, 88, 194, 212, 204, 2, + 232, 88, 238, 45, 229, 206, 212, 204, 216, 28, 79, 212, 204, 216, 28, + 207, 149, 221, 209, 229, 206, 241, 129, 221, 209, 229, 206, 244, 8, 220, + 229, 221, 209, 229, 206, 250, 169, 221, 209, 229, 206, 209, 206, 220, + 224, 218, 225, 229, 206, 242, 19, 218, 225, 233, 53, 218, 208, 215, 41, + 215, 179, 105, 215, 38, 214, 98, 215, 41, 215, 179, 142, 215, 37, 214, + 97, 245, 199, 247, 109, 213, 227, 246, 57, 220, 118, 209, 176, 102, 220, + 118, 209, 174, 220, 81, 220, 118, 209, 176, 105, 220, 118, 209, 173, 220, + 80, 216, 29, 211, 68, 214, 21, 213, 210, 248, 225, 248, 94, 248, 167, + 227, 67, 207, 89, 226, 51, 214, 22, 73, 239, 206, 252, 13, 214, 22, 73, + 220, 99, 252, 13, 214, 155, 243, 34, 73, 239, 206, 252, 13, 243, 34, 73, + 220, 99, 252, 13, 242, 252, 214, 22, 73, 213, 227, 214, 169, 215, 41, + 239, 241, 157, 233, 4, 216, 7, 215, 41, 157, 233, 4, 217, 99, 247, 109, + 216, 37, 233, 4, 247, 41, 213, 228, 212, 86, 214, 40, 222, 134, 213, 25, + 247, 154, 222, 105, 220, 119, 227, 66, 220, 214, 252, 49, 220, 113, 247, + 154, 252, 65, 225, 167, 215, 89, 7, 6, 1, 240, 99, 7, 5, 1, 240, 99, 248, + 112, 252, 150, 213, 30, 213, 185, 247, 163, 214, 246, 230, 46, 183, 1, + 229, 163, 230, 90, 1, 241, 163, 241, 154, 230, 90, 1, 241, 163, 242, 31, + 230, 90, 1, 218, 124, 230, 90, 1, 229, 144, 72, 141, 249, 204, 215, 154, + 240, 62, 227, 16, 218, 215, 241, 69, 241, 68, 241, 67, 226, 53, 204, 246, + 204, 247, 204, 249, 229, 85, 218, 132, 229, 87, 218, 134, 221, 177, 229, + 84, 218, 131, 224, 99, 226, 185, 206, 252, 229, 86, 218, 133, 241, 91, + 221, 176, 207, 42, 243, 53, 241, 79, 226, 253, 222, 166, 209, 178, 93, + 226, 253, 246, 79, 93, 9, 4, 232, 218, 83, 220, 131, 241, 136, 33, 79, + 48, 59, 230, 16, 145, 208, 150, 208, 39, 207, 227, 207, 216, 207, 205, + 207, 194, 207, 183, 207, 172, 207, 161, 208, 149, 208, 138, 208, 127, + 208, 116, 208, 105, 208, 94, 208, 83, 249, 39, 222, 119, 83, 249, 175, + 204, 248, 14, 3, 223, 190, 212, 89, 14, 3, 223, 190, 131, 223, 190, 249, + 69, 131, 249, 68, 58, 30, 16, 241, 90, 214, 242, 248, 18, 209, 49, 208, + 72, 208, 61, 208, 50, 208, 38, 208, 27, 208, 16, 208, 5, 207, 250, 207, + 239, 207, 231, 207, 230, 207, 229, 207, 228, 207, 226, 207, 225, 207, + 224, 207, 223, 207, 222, 207, 221, 207, 220, 207, 219, 207, 218, 207, + 217, 207, 215, 207, 214, 207, 213, 207, 212, 207, 211, 207, 210, 207, + 209, 207, 208, 207, 207, 207, 206, 207, 204, 207, 203, 207, 202, 207, + 201, 207, 200, 207, 199, 207, 198, 207, 197, 207, 196, 207, 195, 207, + 193, 207, 192, 207, 191, 207, 190, 207, 189, 207, 188, 207, 187, 207, + 186, 207, 185, 207, 184, 207, 182, 207, 181, 207, 180, 207, 179, 207, + 178, 207, 177, 207, 176, 207, 175, 207, 174, 207, 173, 207, 171, 207, + 170, 207, 169, 207, 168, 207, 167, 207, 166, 207, 165, 207, 164, 207, + 163, 207, 162, 207, 160, 207, 159, 207, 158, 207, 157, 207, 156, 207, + 155, 207, 154, 207, 153, 207, 152, 207, 151, 208, 148, 208, 147, 208, + 146, 208, 145, 208, 144, 208, 143, 208, 142, 208, 141, 208, 140, 208, + 139, 208, 137, 208, 136, 208, 135, 208, 134, 208, 133, 208, 132, 208, + 131, 208, 130, 208, 129, 208, 128, 208, 126, 208, 125, 208, 124, 208, + 123, 208, 122, 208, 121, 208, 120, 208, 119, 208, 118, 208, 117, 208, + 115, 208, 114, 208, 113, 208, 112, 208, 111, 208, 110, 208, 109, 208, + 108, 208, 107, 208, 106, 208, 104, 208, 103, 208, 102, 208, 101, 208, + 100, 208, 99, 208, 98, 208, 97, 208, 96, 208, 95, 208, 93, 208, 92, 208, + 91, 208, 90, 208, 89, 208, 88, 208, 87, 208, 86, 208, 85, 208, 84, 208, + 82, 208, 81, 208, 80, 208, 79, 208, 78, 208, 77, 208, 76, 208, 75, 208, + 74, 208, 73, 208, 71, 208, 70, 208, 69, 208, 68, 208, 67, 208, 66, 208, + 65, 208, 64, 208, 63, 208, 62, 208, 60, 208, 59, 208, 58, 208, 57, 208, + 56, 208, 55, 208, 54, 208, 53, 208, 52, 208, 51, 208, 49, 208, 48, 208, + 47, 208, 46, 208, 45, 208, 44, 208, 43, 208, 42, 208, 41, 208, 40, 208, + 37, 208, 36, 208, 35, 208, 34, 208, 33, 208, 32, 208, 31, 208, 30, 208, + 29, 208, 28, 208, 26, 208, 25, 208, 24, 208, 23, 208, 22, 208, 21, 208, + 20, 208, 19, 208, 18, 208, 17, 208, 15, 208, 14, 208, 13, 208, 12, 208, + 11, 208, 10, 208, 9, 208, 8, 208, 7, 208, 6, 208, 4, 208, 3, 208, 2, 208, + 1, 208, 0, 207, 255, 207, 254, 207, 253, 207, 252, 207, 251, 207, 249, + 207, 248, 207, 247, 207, 246, 207, 245, 207, 244, 207, 243, 207, 242, + 207, 241, 207, 240, 207, 238, 207, 237, 207, 236, 207, 235, 207, 234, + 207, 233, 207, 232, 7, 6, 1, 32, 2, 228, 14, 23, 239, 236, 7, 5, 1, 32, + 2, 228, 14, 23, 239, 236, 7, 6, 1, 174, 2, 79, 229, 206, 55, 7, 5, 1, + 174, 2, 79, 229, 206, 55, 7, 6, 1, 174, 2, 79, 229, 206, 250, 26, 23, + 239, 236, 7, 5, 1, 174, 2, 79, 229, 206, 250, 26, 23, 239, 236, 7, 6, 1, + 174, 2, 79, 229, 206, 250, 26, 23, 153, 7, 5, 1, 174, 2, 79, 229, 206, + 250, 26, 23, 153, 7, 6, 1, 174, 2, 247, 228, 23, 228, 13, 7, 5, 1, 174, + 2, 247, 228, 23, 228, 13, 7, 6, 1, 174, 2, 247, 228, 23, 248, 195, 7, 5, + 1, 174, 2, 247, 228, 23, 248, 195, 7, 6, 1, 237, 225, 2, 228, 14, 23, + 239, 236, 7, 5, 1, 237, 225, 2, 228, 14, 23, 239, 236, 7, 5, 1, 237, 225, + 2, 67, 84, 23, 153, 7, 5, 1, 225, 80, 2, 211, 181, 52, 7, 6, 1, 148, 2, + 79, 229, 206, 55, 7, 5, 1, 148, 2, 79, 229, 206, 55, 7, 6, 1, 148, 2, 79, + 229, 206, 250, 26, 23, 239, 236, 7, 5, 1, 148, 2, 79, 229, 206, 250, 26, + 23, 239, 236, 7, 6, 1, 148, 2, 79, 229, 206, 250, 26, 23, 153, 7, 5, 1, + 148, 2, 79, 229, 206, 250, 26, 23, 153, 7, 6, 1, 218, 1, 2, 79, 229, 206, + 55, 7, 5, 1, 218, 1, 2, 79, 229, 206, 55, 7, 6, 1, 106, 2, 228, 14, 23, + 239, 236, 7, 5, 1, 106, 2, 228, 14, 23, 239, 236, 7, 6, 1, 32, 2, 222, + 197, 23, 153, 7, 5, 1, 32, 2, 222, 197, 23, 153, 7, 6, 1, 32, 2, 222, + 197, 23, 211, 180, 7, 5, 1, 32, 2, 222, 197, 23, 211, 180, 7, 6, 1, 174, + 2, 222, 197, 23, 153, 7, 5, 1, 174, 2, 222, 197, 23, 153, 7, 6, 1, 174, + 2, 222, 197, 23, 211, 180, 7, 5, 1, 174, 2, 222, 197, 23, 211, 180, 7, 6, + 1, 174, 2, 67, 84, 23, 153, 7, 5, 1, 174, 2, 67, 84, 23, 153, 7, 6, 1, + 174, 2, 67, 84, 23, 211, 180, 7, 5, 1, 174, 2, 67, 84, 23, 211, 180, 7, + 5, 1, 237, 225, 2, 67, 84, 23, 239, 236, 7, 5, 1, 237, 225, 2, 67, 84, + 23, 211, 180, 7, 6, 1, 237, 225, 2, 222, 197, 23, 153, 7, 5, 1, 237, 225, + 2, 222, 197, 23, 67, 84, 23, 153, 7, 6, 1, 237, 225, 2, 222, 197, 23, + 211, 180, 7, 5, 1, 237, 225, 2, 222, 197, 23, 67, 84, 23, 211, 180, 7, 6, + 1, 232, 204, 2, 211, 180, 7, 5, 1, 232, 204, 2, 67, 84, 23, 211, 180, 7, + 6, 1, 230, 159, 2, 211, 180, 7, 5, 1, 230, 159, 2, 211, 180, 7, 6, 1, + 229, 29, 2, 211, 180, 7, 5, 1, 229, 29, 2, 211, 180, 7, 6, 1, 219, 150, + 2, 211, 180, 7, 5, 1, 219, 150, 2, 211, 180, 7, 6, 1, 106, 2, 222, 197, + 23, 153, 7, 5, 1, 106, 2, 222, 197, 23, 153, 7, 6, 1, 106, 2, 222, 197, + 23, 211, 180, 7, 5, 1, 106, 2, 222, 197, 23, 211, 180, 7, 6, 1, 106, 2, + 228, 14, 23, 153, 7, 5, 1, 106, 2, 228, 14, 23, 153, 7, 6, 1, 106, 2, + 228, 14, 23, 211, 180, 7, 5, 1, 106, 2, 228, 14, 23, 211, 180, 7, 5, 1, + 252, 249, 2, 239, 236, 7, 5, 1, 222, 142, 148, 2, 239, 236, 7, 5, 1, 222, + 142, 148, 2, 153, 7, 5, 1, 201, 209, 149, 2, 239, 236, 7, 5, 1, 201, 209, + 149, 2, 153, 7, 5, 1, 217, 101, 2, 239, 236, 7, 5, 1, 217, 101, 2, 153, + 7, 5, 1, 238, 129, 217, 101, 2, 239, 236, 7, 5, 1, 238, 129, 217, 101, 2, + 153, 8, 216, 37, 87, 2, 239, 112, 84, 2, 252, 172, 8, 216, 37, 87, 2, + 239, 112, 84, 2, 207, 59, 8, 216, 37, 87, 2, 239, 112, 84, 2, 126, 227, + 228, 8, 216, 37, 87, 2, 239, 112, 84, 2, 222, 206, 8, 216, 37, 87, 2, + 239, 112, 84, 2, 71, 8, 216, 37, 87, 2, 239, 112, 84, 2, 205, 213, 8, + 216, 37, 87, 2, 239, 112, 84, 2, 75, 8, 216, 37, 87, 2, 239, 112, 84, 2, + 252, 248, 8, 216, 37, 224, 55, 2, 231, 212, 165, 1, 231, 142, 40, 107, + 232, 76, 40, 107, 225, 79, 40, 107, 249, 34, 40, 107, 223, 146, 40, 107, + 210, 211, 40, 107, 224, 104, 40, 107, 213, 10, 40, 107, 226, 33, 40, 107, + 222, 67, 40, 107, 229, 28, 40, 107, 206, 123, 40, 107, 137, 40, 107, 149, + 40, 107, 209, 148, 40, 107, 229, 164, 40, 107, 229, 173, 40, 107, 218, + 90, 40, 107, 224, 86, 40, 107, 232, 203, 40, 107, 216, 4, 40, 107, 214, + 99, 40, 107, 182, 40, 107, 239, 155, 40, 107, 230, 251, 40, 4, 232, 63, + 40, 4, 231, 123, 40, 4, 231, 111, 40, 4, 230, 236, 40, 4, 230, 202, 40, + 4, 231, 224, 40, 4, 231, 221, 40, 4, 232, 41, 40, 4, 231, 53, 40, 4, 231, + 33, 40, 4, 231, 242, 40, 4, 225, 76, 40, 4, 225, 25, 40, 4, 225, 21, 40, + 4, 224, 246, 40, 4, 224, 238, 40, 4, 225, 64, 40, 4, 225, 62, 40, 4, 225, + 73, 40, 4, 225, 2, 40, 4, 224, 253, 40, 4, 225, 66, 40, 4, 249, 0, 40, 4, + 247, 251, 40, 4, 247, 241, 40, 4, 247, 40, 40, 4, 247, 9, 40, 4, 248, + 148, 40, 4, 248, 140, 40, 4, 248, 245, 40, 4, 247, 174, 40, 4, 247, 105, + 40, 4, 248, 181, 40, 4, 223, 143, 40, 4, 223, 125, 40, 4, 223, 120, 40, + 4, 223, 103, 40, 4, 223, 95, 40, 4, 223, 134, 40, 4, 223, 133, 40, 4, + 223, 140, 40, 4, 223, 110, 40, 4, 223, 107, 40, 4, 223, 137, 40, 4, 210, + 207, 40, 4, 210, 187, 40, 4, 210, 186, 40, 4, 210, 175, 40, 4, 210, 172, + 40, 4, 210, 203, 40, 4, 210, 202, 40, 4, 210, 206, 40, 4, 210, 185, 40, + 4, 210, 184, 40, 4, 210, 205, 40, 4, 224, 102, 40, 4, 224, 88, 40, 4, + 224, 87, 40, 4, 224, 71, 40, 4, 224, 70, 40, 4, 224, 98, 40, 4, 224, 97, + 40, 4, 224, 101, 40, 4, 224, 73, 40, 4, 224, 72, 40, 4, 224, 100, 40, 4, + 212, 215, 40, 4, 211, 211, 40, 4, 211, 195, 40, 4, 210, 170, 40, 4, 210, + 135, 40, 4, 212, 131, 40, 4, 212, 120, 40, 4, 212, 193, 40, 4, 124, 40, + 4, 211, 105, 40, 4, 212, 151, 40, 4, 225, 232, 40, 4, 224, 230, 40, 4, + 224, 205, 40, 4, 223, 217, 40, 4, 223, 158, 40, 4, 225, 110, 40, 4, 225, + 106, 40, 4, 225, 218, 40, 4, 224, 67, 40, 4, 224, 56, 40, 4, 225, 191, + 40, 4, 222, 51, 40, 4, 221, 53, 40, 4, 221, 15, 40, 4, 220, 82, 40, 4, + 220, 50, 40, 4, 221, 174, 40, 4, 221, 164, 40, 4, 222, 32, 40, 4, 220, + 211, 40, 4, 220, 187, 40, 4, 221, 188, 40, 4, 228, 18, 40, 4, 226, 254, + 40, 4, 226, 224, 40, 4, 226, 114, 40, 4, 226, 62, 40, 4, 227, 119, 40, 4, + 227, 107, 40, 4, 227, 239, 40, 4, 226, 181, 40, 4, 226, 150, 40, 4, 227, + 166, 40, 4, 206, 109, 40, 4, 206, 11, 40, 4, 206, 2, 40, 4, 205, 213, 40, + 4, 205, 181, 40, 4, 206, 52, 40, 4, 206, 49, 40, 4, 206, 88, 40, 4, 205, + 247, 40, 4, 205, 232, 40, 4, 206, 61, 40, 4, 219, 109, 40, 4, 218, 208, + 40, 4, 218, 154, 40, 4, 218, 50, 40, 4, 218, 21, 40, 4, 219, 51, 40, 4, + 219, 29, 40, 4, 219, 90, 40, 4, 218, 124, 40, 4, 218, 107, 40, 4, 219, + 60, 40, 4, 230, 140, 40, 4, 229, 235, 40, 4, 229, 219, 40, 4, 229, 81, + 40, 4, 229, 53, 40, 4, 230, 58, 40, 4, 230, 50, 40, 4, 230, 114, 40, 4, + 229, 144, 40, 4, 229, 115, 40, 4, 230, 75, 40, 4, 209, 69, 40, 4, 208, + 214, 40, 4, 208, 199, 40, 4, 207, 148, 40, 4, 207, 141, 40, 4, 209, 39, + 40, 4, 209, 34, 40, 4, 209, 65, 40, 4, 208, 173, 40, 4, 208, 161, 40, 4, + 209, 45, 40, 4, 229, 162, 40, 4, 229, 157, 40, 4, 229, 156, 40, 4, 229, + 153, 40, 4, 229, 152, 40, 4, 229, 159, 40, 4, 229, 158, 40, 4, 229, 161, + 40, 4, 229, 155, 40, 4, 229, 154, 40, 4, 229, 160, 40, 4, 229, 171, 40, + 4, 229, 166, 40, 4, 229, 165, 40, 4, 229, 149, 40, 4, 229, 148, 40, 4, + 229, 168, 40, 4, 229, 167, 40, 4, 229, 170, 40, 4, 229, 151, 40, 4, 229, + 150, 40, 4, 229, 169, 40, 4, 218, 88, 40, 4, 218, 77, 40, 4, 218, 76, 40, + 4, 218, 70, 40, 4, 218, 63, 40, 4, 218, 84, 40, 4, 218, 83, 40, 4, 218, + 87, 40, 4, 218, 75, 40, 4, 218, 74, 40, 4, 218, 86, 40, 4, 224, 84, 40, + 4, 224, 79, 40, 4, 224, 78, 40, 4, 224, 75, 40, 4, 224, 74, 40, 4, 224, + 81, 40, 4, 224, 80, 40, 4, 224, 83, 40, 4, 224, 77, 40, 4, 224, 76, 40, + 4, 224, 82, 40, 4, 232, 199, 40, 4, 232, 162, 40, 4, 232, 155, 40, 4, + 232, 104, 40, 4, 232, 86, 40, 4, 232, 182, 40, 4, 232, 180, 40, 4, 232, + 193, 40, 4, 232, 122, 40, 4, 232, 113, 40, 4, 232, 187, 40, 4, 215, 254, + 40, 4, 215, 183, 40, 4, 215, 178, 40, 4, 215, 116, 40, 4, 215, 100, 40, + 4, 215, 214, 40, 4, 215, 212, 40, 4, 215, 243, 40, 4, 215, 158, 40, 4, + 215, 152, 40, 4, 215, 223, 40, 4, 214, 95, 40, 4, 214, 64, 40, 4, 214, + 60, 40, 4, 214, 51, 40, 4, 214, 48, 40, 4, 214, 70, 40, 4, 214, 69, 40, + 4, 214, 94, 40, 4, 214, 56, 40, 4, 214, 55, 40, 4, 214, 72, 40, 4, 217, + 196, 40, 4, 215, 80, 40, 4, 215, 61, 40, 4, 213, 203, 40, 4, 213, 119, + 40, 4, 217, 86, 40, 4, 217, 74, 40, 4, 217, 181, 40, 4, 214, 193, 40, 4, + 214, 174, 40, 4, 217, 125, 40, 4, 239, 141, 40, 4, 239, 11, 40, 4, 238, + 247, 40, 4, 238, 42, 40, 4, 238, 19, 40, 4, 239, 71, 40, 4, 239, 53, 40, + 4, 239, 131, 40, 4, 238, 149, 40, 4, 238, 131, 40, 4, 239, 80, 40, 4, + 230, 250, 40, 4, 230, 249, 40, 4, 230, 244, 40, 4, 230, 243, 40, 4, 230, + 240, 40, 4, 230, 239, 40, 4, 230, 246, 40, 4, 230, 245, 40, 4, 230, 248, + 40, 4, 230, 242, 40, 4, 230, 241, 40, 4, 230, 247, 40, 4, 215, 122, 132, + 107, 3, 206, 74, 132, 107, 3, 219, 79, 132, 107, 3, 218, 253, 108, 1, + 210, 74, 82, 107, 3, 247, 169, 172, 82, 107, 3, 247, 169, 231, 167, 82, + 107, 3, 247, 169, 231, 53, 82, 107, 3, 247, 169, 231, 138, 82, 107, 3, + 247, 169, 225, 2, 82, 107, 3, 247, 169, 249, 1, 82, 107, 3, 247, 169, + 248, 110, 82, 107, 3, 247, 169, 247, 174, 82, 107, 3, 247, 169, 248, 32, + 82, 107, 3, 247, 169, 223, 110, 82, 107, 3, 247, 169, 246, 145, 82, 107, + 3, 247, 169, 210, 196, 82, 107, 3, 247, 169, 245, 51, 82, 107, 3, 247, + 169, 210, 191, 82, 107, 3, 247, 169, 199, 82, 107, 3, 247, 169, 212, 219, + 82, 107, 3, 247, 169, 212, 56, 82, 107, 3, 247, 169, 124, 82, 107, 3, + 247, 169, 211, 253, 82, 107, 3, 247, 169, 224, 67, 82, 107, 3, 247, 169, + 250, 183, 82, 107, 3, 247, 169, 221, 93, 82, 107, 3, 247, 169, 220, 211, + 82, 107, 3, 247, 169, 221, 66, 82, 107, 3, 247, 169, 226, 181, 82, 107, + 3, 247, 169, 205, 247, 82, 107, 3, 247, 169, 218, 124, 82, 107, 3, 247, + 169, 229, 144, 82, 107, 3, 247, 169, 208, 173, 82, 107, 3, 247, 169, 216, + 2, 82, 107, 3, 247, 169, 214, 96, 82, 107, 3, 247, 169, 217, 199, 82, + 107, 3, 247, 169, 155, 82, 107, 3, 247, 169, 230, 141, 82, 22, 3, 247, + 169, 220, 19, 82, 233, 55, 22, 3, 247, 169, 219, 214, 82, 233, 55, 22, 3, + 247, 169, 218, 9, 82, 233, 55, 22, 3, 247, 169, 218, 2, 82, 233, 55, 22, + 3, 247, 169, 219, 255, 82, 22, 3, 222, 173, 82, 22, 3, 253, 125, 161, 1, + 249, 237, 225, 77, 161, 1, 249, 237, 225, 25, 161, 1, 249, 237, 224, 246, + 161, 1, 249, 237, 225, 64, 161, 1, 249, 237, 225, 2, 64, 1, 249, 237, + 225, 77, 64, 1, 249, 237, 225, 25, 64, 1, 249, 237, 224, 246, 64, 1, 249, + 237, 225, 64, 64, 1, 249, 237, 225, 2, 64, 1, 252, 198, 248, 148, 64, 1, + 252, 198, 210, 170, 64, 1, 252, 198, 124, 64, 1, 252, 198, 222, 67, 65, + 1, 242, 156, 242, 155, 247, 113, 135, 134, 65, 1, 242, 155, 242, 156, + 247, 113, 135, 134, }; static unsigned char phrasebook_offset1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 104, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 129, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 87, 148, 149, 150, 151, 152, 87, 87, 87, 87, 87, 87, 153, 87, - 154, 155, 156, 87, 157, 87, 158, 87, 87, 87, 159, 87, 87, 87, 160, 161, - 162, 163, 87, 87, 87, 87, 87, 87, 87, 87, 87, 164, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 165, 166, 167, 168, - 169, 170, 171, 87, 172, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 182, - 183, 184, 185, 186, 87, 87, 87, 87, 87, 87, 87, 87, 87, 187, 188, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 189, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 190, 191, 192, 193, 194, 87, 195, - 87, 196, 197, 198, 199, 200, 201, 202, 203, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 204, 205, 87, 87, 206, 207, 208, 209, 210, 87, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 220, 221, - 222, 223, 224, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 225, 87, 226, 227, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 228, 229, 230, 231, 232, 233, 234, 235, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 66, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 52, 87, 52, 88, + 89, 90, 91, 92, 93, 94, 52, 95, 52, 96, 52, 52, 52, 52, 52, 97, 98, 99, + 100, 101, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 102, 103, 104, 105, + 106, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 107, 108, + 109, 110, 52, 52, 52, 111, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 112, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 113, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 114, 115, 116, 117, + 118, 119, 120, 121, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 122, 52, 52, 52, 52, 52, 123, 52, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 133, 134, 135, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 136, 137, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 138, 139, 140, 141, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, }; static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 9, 11, 14, 17, 19, 21, 24, 27, 29, 31, 33, 35, 39, 41, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 69, 72, - 75, 78, 82, 86, 91, 96, 101, 105, 110, 115, 120, 124, 129, 134, 138, 142, - 147, 151, 156, 161, 165, 170, 175, 179, 184, 189, 194, 199, 204, 207, + 75, 78, 82, 86, 91, 96, 101, 105, 110, 115, 120, 124, 129, 134, 138, 143, + 148, 152, 157, 162, 166, 170, 175, 179, 184, 189, 194, 199, 204, 207, 211, 214, 218, 221, 225, 229, 234, 239, 244, 248, 253, 258, 263, 267, - 272, 277, 281, 285, 290, 294, 299, 304, 308, 313, 318, 322, 327, 332, + 272, 277, 281, 286, 291, 295, 300, 305, 309, 313, 318, 322, 327, 332, 337, 342, 347, 351, 354, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 363, 368, - 371, 374, 377, 380, 383, 386, 388, 391, 397, 405, 408, 412, 415, 417, - 420, 423, 426, 429, 433, 436, 439, 443, 445, 448, 454, 462, 469, 476, - 483, 488, 495, 501, 508, 514, 521, 529, 534, 542, 549, 555, 562, 569, - 577, 584, 592, 600, 605, 612, 619, 625, 632, 638, 645, 648, 654, 661, - 667, 674, 681, 688, 693, 700, 707, 713, 720, 726, 733, 741, 746, 754, - 761, 767, 774, 781, 789, 796, 804, 812, 817, 824, 831, 837, 844, 850, - 857, 860, 866, 873, 879, 886, 893, 900, 905, 913, 920, 927, 934, 941, - 948, 955, 962, 969, 977, 985, 993, 1001, 1009, 1017, 1025, 1033, 1040, - 1047, 1054, 1061, 1068, 1075, 1082, 1089, 1096, 1103, 1110, 1117, 1125, - 1133, 1141, 1149, 1157, 1165, 1173, 1181, 1189, 1197, 1204, 1211, 1218, - 1225, 1233, 1241, 1249, 1257, 1265, 1273, 1281, 1287, 1292, 1297, 1305, - 1313, 1321, 1329, 1334, 1341, 1348, 1356, 1364, 1372, 1380, 1390, 1400, - 1407, 1414, 1421, 1428, 1436, 1444, 1452, 1460, 1471, 1476, 1481, 1488, - 1495, 1502, 1509, 1516, 1523, 1528, 1533, 1540, 1547, 1555, 1563, 1571, - 1579, 1586, 1593, 1601, 1609, 1617, 1625, 1633, 1641, 1649, 1657, 1665, - 1673, 1680, 1687, 1693, 1699, 1706, 1713, 1720, 1727, 1735, 1743, 1750, - 1757, 1764, 1771, 1779, 1787, 1795, 1803, 1811, 1818, 1825, 1833, 1841, - 1849, 1857, 1863, 1869, 1875, 1882, 1889, 1894, 1899, 1904, 1911, 1918, - 1925, 1932, 1940, 1948, 1955, 1961, 1966, 1971, 1978, 1985, 1992, 1997, - 2002, 2007, 2014, 2021, 2028, 2035, 2042, 2048, 2056, 2066, 2074, 2081, - 2088, 2093, 2098, 2105, 2112, 2116, 2121, 2126, 2131, 2139, 2148, 2155, - 2162, 2171, 2178, 2185, 2190, 2197, 2204, 2211, 2218, 2225, 2230, 2237, - 2244, 2252, 2257, 2262, 2267, 2277, 2281, 2287, 2293, 2299, 2305, 2313, - 2326, 2334, 2339, 2349, 2354, 2359, 2369, 2374, 2381, 2388, 2396, 2404, - 2411, 2418, 2425, 2432, 2442, 2452, 2461, 2470, 2480, 2490, 2500, 2510, - 2516, 2526, 2536, 2546, 2556, 2564, 2572, 2579, 2586, 2594, 2602, 2610, - 2618, 2625, 2632, 2642, 2652, 2660, 2668, 2676, 2681, 2691, 2696, 2703, - 2710, 2715, 2720, 2728, 2736, 2746, 2756, 2763, 2770, 2779, 2788, 2796, - 2804, 2813, 2822, 2830, 2838, 2847, 2856, 2865, 2874, 2884, 2894, 2902, - 2910, 2919, 2928, 2937, 2946, 2956, 2966, 2974, 2982, 2991, 3000, 3009, - 3018, 3027, 3036, 3041, 3046, 3054, 3062, 3072, 3080, 3085, 3090, 3097, - 3104, 3111, 3118, 3125, 3132, 3142, 3152, 3162, 3172, 3179, 3186, 3196, - 3206, 3214, 3222, 3230, 3238, 3246, 3253, 3260, 3267, 3273, 3280, 3287, - 3294, 3303, 3313, 3323, 3330, 3337, 3343, 3348, 3355, 3361, 3367, 3374, - 3381, 3392, 3402, 3409, 3416, 3423, 3430, 3436, 3441, 3448, 3454, 3459, - 3467, 3475, 3482, 3488, 3493, 3500, 3505, 3512, 3521, 3530, 3539, 3546, - 3552, 3558, 3563, 3570, 3577, 3584, 3591, 3598, 3603, 3608, 3617, 3625, - 3634, 3639, 3645, 3656, 3663, 3671, 3680, 3686, 3692, 3698, 3705, 3710, - 3716, 3727, 3736, 3745, 3753, 3761, 3771, 3776, 3783, 3790, 3795, 3807, - 3816, 3824, 3831, 3840, 3845, 3850, 3857, 3864, 3871, 3878, 3884, 3893, - 3901, 3906, 3914, 3920, 3928, 3936, 3942, 3948, 3954, 3961, 3969, 3975, - 3983, 3990, 3995, 4002, 4010, 4020, 4027, 4034, 4044, 4051, 4058, 4068, - 4075, 4082, 4089, 4095, 4101, 4111, 4124, 4129, 4136, 4141, 4145, 4151, - 4160, 4167, 4172, 4177, 4181, 4186, 4192, 4196, 4202, 4208, 4214, 4220, - 4228, 4233, 4238, 4243, 4248, 4254, 4256, 4261, 4265, 4271, 4277, 4283, - 4288, 4295, 4302, 4308, 4315, 4323, 4331, 4336, 4341, 4345, 4350, 4352, - 4354, 4357, 4359, 4361, 4366, 4371, 4377, 4382, 4386, 4391, 4396, 4405, - 4411, 4416, 4422, 4427, 4433, 4441, 4449, 4453, 4457, 4462, 4468, 4474, - 4480, 4486, 4491, 4499, 4508, 4517, 4521, 4527, 4534, 4541, 4548, 4555, - 4559, 4564, 4569, 4574, 4579, 4584, 4586, 4589, 4592, 4595, 4598, 4601, - 4605, 4609, 4615, 4618, 4623, 4629, 4635, 4638, 4643, 4649, 4653, 4659, - 4665, 4671, 4677, 4682, 4687, 4692, 4695, 4701, 4706, 4711, 4715, 4720, - 4726, 4732, 4735, 4739, 4743, 4747, 4750, 4753, 4758, 4762, 4769, 4773, - 4779, 4783, 4789, 4793, 4797, 4801, 4806, 4811, 4818, 4824, 4831, 4837, - 4843, 4849, 4852, 4856, 4860, 4863, 4867, 4872, 4877, 4881, 4885, 4891, - 4895, 4899, 4904, 4910, 4915, 4921, 4925, 4932, 4937, 4942, 4947, 4952, - 4958, 4961, 4965, 4970, 4975, 4984, 4990, 4995, 4999, 5004, 5008, 5013, - 5017, 5021, 5026, 5029, 5035, 5040, 5045, 5050, 5055, 5060, 5065, 5071, - 5077, 5083, 5088, 5093, 5099, 5105, 5111, 5116, 5121, 5128, 5135, 5139, - 5145, 5152, 0, 0, 5159, 5162, 5171, 5180, 5191, 0, 0, 0, 0, 0, 5195, - 5198, 5203, 5211, 5216, 5224, 5232, 0, 5240, 0, 5248, 5256, 5264, 5275, - 5280, 5285, 5290, 5295, 5300, 5305, 5310, 5315, 5320, 5325, 5330, 5335, - 5340, 5345, 5350, 5355, 0, 5360, 5365, 5370, 5375, 5380, 5385, 5390, - 5395, 5403, 5411, 5419, 5427, 5435, 5443, 5454, 5459, 5464, 5469, 5474, - 5479, 5484, 5489, 5494, 5499, 5504, 5509, 5514, 5519, 5524, 5529, 5534, - 5539, 5545, 5550, 5555, 5560, 5565, 5570, 5575, 5580, 5588, 5596, 5604, - 5612, 5620, 5625, 5629, 5633, 5640, 5650, 5660, 5664, 5668, 5672, 5678, - 5685, 5689, 5694, 5698, 5703, 5707, 5712, 5716, 5721, 5726, 5731, 5736, - 5741, 5746, 5751, 5756, 5761, 5766, 5771, 5776, 5781, 5786, 5791, 5795, - 5799, 5805, 5809, 5814, 5820, 5828, 5833, 5838, 5845, 5850, 5855, 5862, - 5871, 5880, 5891, 5899, 5904, 5909, 5914, 5921, 5926, 5932, 5937, 5942, - 5947, 5952, 5957, 5962, 5970, 5976, 5981, 5985, 5990, 5995, 6000, 6005, - 6010, 6015, 6020, 6024, 6030, 6034, 6039, 6044, 6049, 6053, 6058, 6063, - 6068, 6073, 6077, 6082, 6086, 6091, 6096, 6101, 6106, 6112, 6117, 6123, - 6127, 6132, 6136, 6140, 6145, 6150, 6155, 6160, 6165, 6170, 6175, 6179, - 6185, 6189, 6194, 6199, 6204, 6208, 6213, 6218, 6223, 6228, 6232, 6237, - 6241, 6246, 6251, 6256, 6261, 6267, 6272, 6278, 6282, 6287, 6291, 6299, - 6304, 6309, 6314, 6321, 6326, 6332, 6337, 6342, 6347, 6352, 6357, 6362, - 6370, 6376, 6381, 6386, 6391, 6396, 6401, 6407, 6413, 6420, 6427, 6436, - 6445, 6452, 6459, 6468, 6477, 6482, 6487, 6492, 6497, 6502, 6507, 6512, - 6517, 6528, 6539, 6544, 6549, 6556, 6563, 6571, 6579, 6584, 6589, 6594, - 6599, 6603, 6607, 6611, 6617, 6623, 6627, 6634, 6639, 6649, 6659, 6665, - 6671, 6679, 6687, 6695, 6703, 6710, 6717, 6726, 6735, 6743, 6751, 6759, - 6767, 6775, 6783, 6791, 6799, 6806, 6813, 6819, 6825, 6833, 6841, 6848, - 6855, 6864, 6873, 6879, 6885, 6893, 6901, 6909, 6917, 6923, 6929, 6937, - 6945, 6953, 6961, 6968, 6975, 6983, 6991, 6999, 7007, 7012, 7017, 7024, - 7031, 7041, 7051, 7055, 7063, 7071, 7078, 7085, 7093, 7101, 7108, 7115, - 7123, 7131, 7138, 7145, 7153, 7161, 7166, 7173, 7180, 7187, 7194, 7200, - 7206, 7214, 7222, 7227, 7232, 7240, 7248, 7256, 7264, 7272, 7280, 7287, - 7294, 7302, 7310, 7318, 7326, 7333, 7340, 7346, 7352, 7361, 7370, 7377, - 7384, 7391, 7398, 7405, 7412, 7419, 7426, 7434, 7442, 7450, 7458, 7466, - 7474, 7484, 7494, 7501, 7508, 7515, 7522, 7529, 7536, 7543, 7550, 7557, - 7564, 7571, 7578, 7585, 7592, 7599, 7606, 7613, 7620, 7627, 7634, 7641, - 7648, 7655, 7662, 7667, 7672, 7677, 7682, 7687, 7692, 7697, 7702, 7707, - 7712, 7718, 7724, 7733, 7742, 7751, 7760, 7768, 7776, 7784, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7792, 7797, 7802, 7807, 7812, 7817, 7822, 7827, 7832, - 7836, 7841, 7846, 7851, 7856, 7861, 7866, 7871, 7876, 7881, 7886, 7891, - 7896, 7901, 7906, 7911, 7916, 7921, 7926, 7930, 7935, 7940, 7945, 7950, - 7955, 7960, 7965, 7970, 7975, 0, 0, 7980, 7987, 7990, 7994, 7998, 8001, - 8005, 0, 8009, 8014, 8019, 8024, 8029, 8034, 8039, 8044, 8049, 8053, - 8058, 8063, 8068, 8073, 8078, 8083, 8088, 8093, 8098, 8103, 8108, 8113, - 8118, 8123, 8128, 8133, 8138, 8143, 8147, 8152, 8157, 8162, 8167, 8172, - 8177, 8182, 8187, 8192, 8197, 0, 8204, 8209, 0, 0, 0, 0, 8212, 0, 8216, - 8221, 8226, 8231, 8238, 8245, 8250, 8255, 8260, 8265, 8270, 8275, 8280, - 8287, 8292, 8299, 8306, 8311, 8318, 8323, 8328, 8333, 8340, 8345, 8350, - 8357, 8366, 8371, 8376, 8381, 8386, 8392, 8397, 8404, 8411, 8418, 8423, - 8428, 8433, 8438, 8443, 8448, 8458, 8463, 8471, 8476, 8481, 8486, 8491, - 8498, 8505, 8512, 8518, 8524, 8531, 0, 0, 0, 0, 0, 0, 0, 0, 8538, 8542, - 8546, 8550, 8554, 8558, 8562, 8566, 8570, 8574, 8578, 8583, 8587, 8591, - 8596, 8600, 8605, 8609, 8613, 8617, 8622, 8626, 8631, 8635, 8639, 8643, - 8647, 0, 0, 0, 0, 0, 8651, 8658, 8666, 8673, 8678, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8683, 8686, 8690, 8695, 8699, 0, 8703, 8709, 8715, 8718, - 8725, 8734, 8737, 8740, 8745, 8751, 8755, 8763, 8769, 8775, 8783, 8787, - 8792, 8803, 8808, 8812, 8816, 8820, 8823, 0, 8826, 8833, 8837, 8843, - 8847, 8854, 8860, 8867, 8873, 8879, 8883, 8887, 8893, 8897, 8901, 8905, - 8909, 8913, 8917, 8921, 8925, 8929, 8933, 8937, 8941, 8945, 8949, 8953, - 8957, 8961, 8969, 8977, 8987, 8996, 9005, 9008, 9012, 9016, 9020, 9024, - 9028, 9032, 9036, 9040, 9045, 9049, 9052, 9055, 9058, 9061, 9064, 9067, - 9070, 9073, 9077, 9080, 9083, 9088, 9093, 9099, 9102, 9109, 9118, 9123, - 9128, 9135, 9140, 9145, 9149, 9153, 9157, 9161, 9165, 9169, 9173, 9177, - 9181, 9185, 9190, 9195, 9202, 9208, 9214, 9220, 9225, 9233, 9241, 9246, - 9252, 9258, 9264, 9270, 9274, 9278, 9282, 9289, 9299, 9303, 9307, 9311, - 9317, 9325, 9329, 9333, 9340, 9344, 9348, 9352, 9359, 9366, 9378, 9382, - 9386, 9390, 9400, 9409, 9413, 9421, 9428, 9435, 9444, 9455, 9463, 9467, - 9476, 9487, 9495, 9508, 9516, 9524, 9532, 9540, 9546, 9555, 9562, 9566, - 9574, 9578, 9585, 9593, 9597, 9603, 9610, 9617, 9621, 9629, 9633, 9640, - 9644, 9652, 9656, 9664, 9672, 9679, 9687, 9695, 9702, 9708, 9712, 9719, - 9727, 9733, 9740, 9747, 9753, 9762, 9770, 9777, 9783, 9787, 9790, 9794, - 9800, 9808, 9812, 9818, 9824, 9831, 9838, 9841, 9848, 9853, 9861, 9866, - 9870, 9883, 9896, 9902, 9909, 9914, 9920, 9925, 9931, 9941, 9948, 9957, - 9967, 9973, 9978, 9983, 9987, 9991, 9996, 10001, 10007, 10015, 10023, - 10034, 10039, 10048, 10057, 10064, 10070, 10076, 10082, 10088, 10094, - 10100, 10106, 10112, 10118, 10125, 10132, 10139, 10145, 10153, 10162, - 10168, 10175, 10182, 10187, 10192, 10196, 10203, 10210, 10219, 10228, - 10231, 10236, 10241, 0, 10246, 10250, 10254, 10260, 10264, 10268, 10274, - 10278, 10286, 10290, 10294, 10298, 10302, 10306, 10312, 10316, 10322, - 10326, 10330, 10334, 10338, 10342, 10347, 10350, 10354, 10360, 10364, - 10368, 10372, 10376, 10380, 10386, 10392, 10398, 10402, 10406, 10411, - 10415, 10419, 10424, 10428, 10432, 10439, 10446, 10450, 10454, 10459, - 10463, 10467, 10470, 10475, 10478, 10481, 10486, 10491, 10495, 10499, - 10505, 10511, 10514, 0, 0, 10517, 10523, 10529, 10535, 10545, 10557, - 10569, 10586, 10598, 10609, 10617, 10624, 10635, 10650, 10661, 10667, - 10676, 10684, 10696, 10706, 10714, 10726, 10733, 10741, 10753, 10759, - 10765, 10773, 10781, 10789, 10795, 10805, 10812, 10822, 10832, 10845, - 10859, 10873, 10883, 10894, 10905, 10918, 10931, 10945, 10957, 10969, - 10982, 10995, 11007, 11020, 11029, 11037, 11042, 11047, 11052, 11057, - 11062, 11067, 11072, 11077, 11082, 11087, 11092, 11097, 11102, 11107, - 11112, 11117, 11122, 11127, 11132, 11137, 11142, 11147, 11152, 11157, - 11162, 11167, 11172, 11177, 11182, 11187, 11192, 11197, 11201, 11206, - 11211, 11216, 11221, 11226, 11230, 11234, 11238, 11242, 11246, 11250, - 11254, 11258, 11262, 11266, 11270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11275, 11280, 11284, 11288, 11292, 11296, 11300, 11304, 11308, 11312, - 11316, 11320, 11325, 11329, 11333, 11337, 11342, 11346, 11351, 11356, - 11361, 11365, 11370, 11375, 11380, 11385, 11389, 11394, 11398, 11403, - 11408, 11412, 11417, 11424, 11428, 11433, 11437, 11441, 11446, 11450, - 11457, 11464, 11471, 11477, 11485, 11493, 11502, 11510, 11517, 11524, - 11532, 11538, 11544, 11550, 11556, 11563, 11568, 11572, 11577, 0, 0, 0, - 0, 0, 11581, 11586, 11591, 11596, 11601, 11606, 11611, 11616, 11621, - 11626, 11631, 11636, 11641, 11646, 11651, 11656, 11661, 11666, 11671, - 11676, 11681, 11686, 11691, 11696, 11701, 11706, 11711, 11719, 11726, - 11732, 11737, 11745, 11752, 11758, 11765, 11771, 11776, 11783, 11790, - 11796, 11801, 11806, 11812, 11817, 11822, 11828, 0, 0, 11833, 11839, - 11845, 11851, 11857, 11863, 11869, 11874, 11882, 11888, 11894, 11900, - 11906, 11912, 11920, 0, 11926, 11931, 11936, 11941, 11946, 11951, 11956, - 11961, 11966, 11971, 11976, 11981, 11986, 11991, 11996, 12001, 12006, - 12011, 12016, 12021, 12026, 12031, 12036, 12041, 12046, 12051, 12056, - 12061, 0, 0, 12066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 364, 369, + 372, 375, 378, 381, 384, 387, 389, 392, 398, 406, 409, 413, 416, 418, + 421, 424, 427, 430, 434, 437, 440, 444, 446, 449, 455, 463, 470, 477, + 484, 489, 496, 502, 509, 516, 523, 531, 536, 544, 551, 557, 564, 571, + 579, 586, 594, 602, 607, 615, 622, 628, 635, 642, 649, 652, 658, 665, + 671, 678, 685, 692, 697, 703, 710, 716, 723, 730, 737, 745, 750, 758, + 765, 771, 778, 785, 793, 800, 808, 816, 821, 829, 836, 842, 849, 856, + 863, 866, 872, 879, 885, 892, 899, 906, 911, 919, 926, 933, 940, 947, + 954, 961, 968, 975, 983, 991, 999, 1007, 1015, 1023, 1031, 1039, 1046, + 1053, 1060, 1067, 1074, 1081, 1088, 1095, 1102, 1109, 1116, 1123, 1131, + 1139, 1147, 1155, 1163, 1171, 1179, 1187, 1195, 1203, 1210, 1217, 1225, + 1233, 1241, 1249, 1257, 1265, 1273, 1281, 1289, 1295, 1300, 1305, 1313, + 1321, 1329, 1337, 1342, 1349, 1356, 1364, 1372, 1380, 1388, 1398, 1408, + 1415, 1422, 1429, 1436, 1444, 1452, 1460, 1468, 1479, 1484, 1489, 1496, + 1503, 1510, 1517, 1524, 1531, 1536, 1541, 1548, 1555, 1563, 1571, 1579, + 1587, 1594, 1601, 1609, 1617, 1625, 1633, 1641, 1649, 1657, 1665, 1673, + 1681, 1688, 1695, 1702, 1709, 1716, 1723, 1730, 1737, 1745, 1753, 1760, + 1767, 1774, 1781, 1789, 1797, 1805, 1813, 1821, 1828, 1835, 1843, 1851, + 1859, 1867, 1872, 1878, 1884, 1891, 1898, 1903, 1908, 1914, 1921, 1928, + 1935, 1942, 1950, 1958, 1964, 1970, 1975, 1981, 1988, 1995, 2002, 2007, + 2012, 2017, 2024, 2031, 2038, 2045, 2052, 2058, 2066, 2076, 2085, 2092, + 2099, 2104, 2109, 2116, 2123, 2127, 2132, 2137, 2142, 2150, 2159, 2166, + 2173, 2182, 2189, 2196, 2201, 2208, 2215, 2222, 2229, 2236, 2241, 2248, + 2255, 2263, 2268, 2273, 2278, 2288, 2292, 2298, 2304, 2310, 2316, 2324, + 2337, 2345, 2350, 2360, 2365, 2370, 2380, 2385, 2392, 2399, 2407, 2415, + 2422, 2429, 2436, 2443, 2453, 2463, 2472, 2481, 2491, 2501, 2511, 2521, + 2526, 2536, 2546, 2556, 2566, 2574, 2582, 2589, 2596, 2604, 2612, 2620, + 2628, 2635, 2642, 2652, 2662, 2670, 2678, 2686, 2691, 2701, 2706, 2713, + 2720, 2725, 2730, 2738, 2746, 2756, 2766, 2773, 2780, 2789, 2798, 2806, + 2814, 2823, 2832, 2840, 2848, 2857, 2866, 2875, 2884, 2894, 2904, 2912, + 2920, 2929, 2938, 2947, 2956, 2966, 2976, 2984, 2992, 3001, 3010, 3019, + 3028, 3037, 3046, 3051, 3056, 3064, 3072, 3082, 3090, 3095, 3100, 3107, + 3114, 3121, 3128, 3135, 3142, 3152, 3162, 3172, 3182, 3189, 3196, 3206, + 3216, 3224, 3232, 3240, 3248, 3256, 3263, 3270, 3277, 3283, 3290, 3297, + 3304, 3313, 3323, 3333, 3340, 3347, 3353, 3358, 3364, 3370, 3376, 3383, + 3390, 3401, 3411, 3418, 3425, 3432, 3439, 3444, 3449, 3455, 3461, 3467, + 3475, 3483, 3490, 3496, 3501, 3508, 3514, 3522, 3532, 3542, 3551, 3558, + 3564, 3570, 3575, 3582, 3588, 3595, 3602, 3609, 3614, 3619, 3629, 3637, + 3646, 3651, 3657, 3667, 3674, 3682, 3691, 3697, 3703, 3709, 3716, 3721, + 3726, 3736, 3744, 3753, 3761, 3769, 3779, 3784, 3791, 3798, 3803, 3815, + 3824, 3832, 3838, 3847, 3852, 3857, 3864, 3870, 3876, 3882, 3888, 3897, + 3905, 3910, 3918, 3924, 3932, 3940, 3946, 3952, 3958, 3966, 3974, 3980, + 3988, 3994, 3999, 4006, 4014, 4024, 4031, 4038, 4048, 4055, 4062, 4072, + 4079, 4086, 4093, 4099, 4105, 4114, 4126, 4131, 4138, 4143, 4147, 4152, + 4160, 4167, 4172, 4177, 4181, 4186, 4191, 4195, 4201, 4207, 4213, 4219, + 4227, 4232, 4237, 4242, 4247, 4253, 4255, 4260, 4264, 4270, 4276, 4282, + 4287, 4294, 4301, 4307, 4314, 4322, 4330, 4335, 4340, 4344, 4349, 4351, + 4353, 4356, 4358, 4361, 4366, 4371, 4377, 4382, 4386, 4390, 4395, 4404, + 4410, 4415, 4421, 4426, 4432, 4440, 4448, 4452, 4456, 4461, 4467, 4473, + 4479, 4485, 4490, 4498, 4507, 4516, 4521, 4527, 4534, 4541, 4548, 4555, + 4559, 4565, 4570, 4575, 4580, 4585, 4588, 4591, 4594, 4597, 4600, 4603, + 4607, 4611, 4617, 4620, 4625, 4631, 4637, 4640, 4645, 4650, 4654, 4660, + 4666, 4672, 4678, 4683, 4688, 4693, 4696, 4702, 4707, 4712, 4716, 4721, + 4727, 4733, 4736, 4740, 4744, 4748, 4751, 4754, 4759, 4763, 4770, 4774, + 4780, 4784, 4790, 4794, 4798, 4802, 4807, 4812, 4819, 4825, 4832, 4838, + 4844, 4850, 4853, 4857, 4861, 4865, 4869, 4874, 4879, 4883, 4887, 4893, + 4897, 4901, 4906, 4912, 4917, 4923, 4927, 4934, 4939, 4943, 4948, 4953, + 4959, 4962, 4966, 4971, 4976, 4985, 4991, 4996, 5000, 5005, 5009, 5014, + 5018, 5022, 5027, 5031, 5037, 5042, 5047, 5052, 5057, 5062, 5067, 5073, + 5079, 5085, 5091, 5096, 5102, 5108, 5114, 5119, 5124, 5131, 5138, 5142, + 5148, 5155, 0, 0, 5162, 5165, 5174, 5183, 5194, 5198, 0, 0, 0, 0, 5203, + 5206, 5211, 5219, 5224, 5232, 5240, 0, 5248, 0, 5256, 5264, 5272, 5283, + 5288, 5293, 5298, 5303, 5308, 5313, 5318, 5323, 5328, 5333, 5338, 5343, + 5348, 5353, 5358, 5363, 0, 5368, 5373, 5378, 5383, 5388, 5393, 5398, + 5403, 5411, 5419, 5427, 5435, 5443, 5451, 5462, 5467, 5472, 5477, 5482, + 5487, 5492, 5497, 5502, 5507, 5512, 5517, 5522, 5527, 5532, 5537, 5542, + 5547, 5553, 5558, 5563, 5568, 5573, 5578, 5583, 5588, 5596, 5604, 5612, + 5620, 5628, 5633, 5637, 5641, 5648, 5658, 5668, 5672, 5676, 5680, 5686, + 5693, 5697, 5702, 5706, 5711, 5715, 5720, 5724, 5729, 5734, 5739, 5744, + 5749, 5754, 5759, 5764, 5769, 5774, 5779, 5784, 5789, 5794, 5799, 5803, + 5807, 5813, 5817, 5822, 5828, 5836, 5841, 5846, 5853, 5858, 5863, 5870, + 5879, 5888, 5899, 5907, 5912, 5917, 5922, 5929, 5934, 5940, 5945, 5950, + 5955, 5960, 5965, 5970, 5978, 5984, 5989, 5993, 5998, 6003, 6008, 6013, + 6018, 6023, 6028, 6032, 6038, 6042, 6047, 6052, 6057, 6061, 6066, 6071, + 6076, 6081, 6085, 6090, 6094, 6099, 6104, 6109, 6114, 6120, 6125, 6131, + 6135, 6140, 6144, 6148, 6153, 6158, 6163, 6168, 6173, 6178, 6183, 6187, + 6193, 6197, 6202, 6207, 6212, 6216, 6221, 6226, 6231, 6236, 6240, 6245, + 6249, 6254, 6259, 6264, 6269, 6275, 6280, 6286, 6290, 6295, 6299, 6307, + 6312, 6317, 6322, 6329, 6334, 6340, 6345, 6350, 6355, 6360, 6365, 6370, + 6378, 6384, 6389, 6394, 6399, 6404, 6409, 6415, 6421, 6428, 6435, 6444, + 6453, 6460, 6467, 6476, 6485, 6490, 6495, 6500, 6505, 6510, 6515, 6520, + 6525, 6536, 6547, 6552, 6557, 6564, 6571, 6579, 6587, 6592, 6597, 6602, + 6607, 6611, 6615, 6619, 6625, 6631, 6635, 6642, 6647, 6657, 6667, 6673, + 6679, 6687, 6695, 6703, 6711, 6718, 6725, 6734, 6743, 6751, 6759, 6767, + 6775, 6783, 6791, 6799, 6807, 6814, 6821, 6827, 6833, 6841, 6849, 6856, + 6863, 6872, 6881, 6887, 6893, 6901, 6909, 6917, 6925, 6931, 6937, 6945, + 6953, 6961, 6969, 6976, 6983, 6991, 6999, 7007, 7015, 7020, 7025, 7032, + 7039, 7049, 7059, 7063, 7071, 7079, 7086, 7093, 7101, 7109, 7116, 7123, + 7131, 7139, 7146, 7153, 7161, 7169, 7174, 7181, 7188, 7195, 7202, 7208, + 7214, 7222, 7230, 7235, 7240, 7248, 7256, 7264, 7272, 7280, 7288, 7295, + 7302, 7310, 7318, 7326, 7334, 7341, 7348, 7354, 7360, 7369, 7378, 7385, + 7392, 7399, 7406, 7413, 7420, 7427, 7434, 7442, 7450, 7458, 7466, 7474, + 7482, 7492, 7502, 7509, 7516, 7523, 7530, 7537, 7544, 7551, 7558, 7565, + 7572, 7579, 7586, 7593, 7600, 7607, 7614, 7621, 7628, 7635, 7642, 7649, + 7656, 7663, 7670, 7675, 7680, 7685, 7690, 7695, 7700, 7705, 7710, 7715, + 7720, 7726, 7732, 7741, 7750, 7759, 7768, 7776, 7784, 7792, 7800, 7808, + 7816, 7821, 7826, 7831, 7836, 7844, 0, 7852, 7857, 7862, 7867, 7872, + 7877, 7882, 7887, 7892, 7896, 7901, 7906, 7911, 7916, 7921, 7926, 7931, + 7936, 7941, 7946, 7951, 7956, 7961, 7966, 7971, 7976, 7981, 7986, 7991, + 7996, 8001, 8006, 8011, 8016, 8021, 8026, 8031, 8036, 0, 0, 8041, 8048, + 8051, 8055, 8059, 8062, 8066, 0, 8070, 8075, 8080, 8085, 8090, 8095, + 8100, 8105, 8110, 8114, 8119, 8124, 8129, 8134, 8139, 8144, 8149, 8154, + 8159, 8164, 8169, 8174, 8179, 8184, 8189, 8194, 8199, 8204, 8209, 8214, + 8219, 8224, 8229, 8234, 8239, 8244, 8249, 8254, 8259, 0, 8266, 8271, 0, + 0, 8274, 8280, 8286, 0, 8290, 8295, 8300, 8305, 8312, 8319, 8324, 8329, + 8334, 8339, 8344, 8349, 8354, 8361, 8366, 8373, 8380, 8385, 8392, 8397, + 8402, 8407, 8414, 8419, 8424, 8431, 8440, 8445, 8450, 8455, 8460, 8466, + 8471, 8478, 8485, 8492, 8497, 8502, 8507, 8512, 8517, 8522, 8532, 8537, + 8546, 8551, 8556, 8561, 8566, 8573, 8580, 8587, 8593, 8599, 8606, 0, 0, + 0, 0, 0, 0, 0, 0, 8613, 8617, 8621, 8625, 8629, 8633, 8637, 8641, 8645, + 8649, 8653, 8658, 8662, 8666, 8671, 8675, 8680, 8684, 8688, 8692, 8697, + 8701, 8706, 8710, 8714, 8718, 8722, 0, 0, 0, 0, 0, 8726, 8733, 8741, + 8748, 8753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8758, 8761, 8765, 8770, + 8774, 8778, 8782, 8788, 8794, 8797, 8804, 8813, 8816, 8819, 8824, 8830, + 8834, 8842, 8848, 8854, 8862, 8866, 8871, 8882, 8887, 8891, 8895, 8899, + 8902, 0, 8905, 8912, 8916, 8922, 8926, 8933, 8940, 8948, 8955, 8962, + 8966, 8970, 8976, 8980, 8984, 8988, 8992, 8996, 9000, 9004, 9008, 9012, + 9016, 9020, 9024, 9028, 9032, 9036, 9040, 9044, 9052, 9060, 9070, 9079, + 9088, 9091, 9095, 9099, 9103, 9107, 9111, 9115, 9119, 9123, 9128, 9132, + 9135, 9138, 9141, 9144, 9147, 9150, 9153, 9156, 9160, 9164, 9168, 9173, + 9178, 9184, 9187, 9194, 9203, 9208, 9213, 9220, 9226, 9231, 9235, 9239, + 9243, 9247, 9251, 9255, 9259, 9263, 9267, 9271, 9276, 9281, 9288, 9294, + 9300, 9306, 9311, 9320, 9329, 9334, 9341, 9348, 9355, 9362, 9366, 9370, + 9374, 9381, 9391, 9395, 9399, 9403, 9410, 9418, 9422, 9426, 9433, 9437, + 9441, 9445, 9452, 9459, 9471, 9475, 9479, 9483, 9493, 9502, 9506, 9514, + 9521, 9528, 9537, 9548, 9556, 9560, 9569, 9580, 9588, 9601, 9609, 9617, + 9625, 9633, 9639, 9648, 9655, 9659, 9667, 9671, 9678, 9686, 9690, 9696, + 9703, 9710, 9714, 9722, 9726, 9733, 9737, 9745, 9749, 9757, 9765, 9772, + 9780, 9788, 9795, 9801, 9805, 9812, 9820, 9826, 9833, 9840, 9846, 9856, + 9864, 9871, 9877, 9881, 9884, 9888, 9894, 9902, 9906, 9912, 9918, 9925, + 9932, 9935, 9942, 9947, 9956, 9961, 9965, 9978, 9991, 9997, 10004, 10009, + 10015, 10020, 10026, 10036, 10043, 10052, 10062, 10068, 10073, 10078, + 10082, 10086, 10091, 10096, 10102, 10110, 10118, 10129, 10134, 10143, + 10152, 10159, 10165, 10171, 10177, 10183, 10189, 10195, 10201, 10207, + 10213, 10220, 10227, 10234, 10240, 10248, 10257, 10264, 10272, 10280, + 10286, 10292, 10297, 10305, 10313, 10323, 10333, 10337, 10343, 10349, 0, + 10355, 10360, 10365, 10372, 10377, 10382, 10389, 10394, 10403, 10408, + 10413, 10418, 10423, 10428, 10435, 10440, 10447, 10452, 10457, 10462, + 10467, 10472, 10478, 10482, 10487, 10494, 10499, 10504, 10509, 10514, + 10519, 10526, 10533, 10540, 10545, 10550, 10556, 10561, 10566, 10572, + 10577, 10582, 10590, 10598, 10603, 10608, 10614, 10619, 10624, 10628, + 10634, 10638, 10642, 10648, 10654, 10659, 10664, 10671, 10678, 10682, 0, + 0, 10686, 10693, 10700, 10707, 10717, 10729, 10740, 10756, 10768, 10779, + 10787, 10794, 10804, 10819, 10830, 10836, 10845, 10853, 10864, 10874, + 10882, 10893, 10900, 10908, 10919, 10925, 10931, 10939, 10947, 10955, + 10961, 10971, 10979, 10989, 10999, 11012, 11026, 11040, 11050, 11061, + 11072, 11085, 11098, 11112, 11124, 11136, 11149, 11162, 11174, 11187, + 11196, 11204, 11209, 11214, 11219, 11224, 11229, 11234, 11239, 11244, + 11249, 11254, 11259, 11264, 11269, 11274, 11279, 11284, 11289, 11294, + 11299, 11304, 11309, 11314, 11319, 11324, 11329, 11334, 11339, 11344, + 11349, 11354, 11359, 11364, 11368, 11373, 11378, 11383, 11388, 11393, + 11397, 11401, 11405, 11409, 11413, 11417, 11421, 11425, 11429, 11433, + 11437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11442, 11447, 11451, + 11455, 11459, 11463, 11467, 11471, 11475, 11479, 11483, 11487, 11492, + 11496, 11500, 11504, 11509, 11513, 11518, 11523, 11528, 11532, 11537, + 11542, 11547, 11552, 11557, 11562, 11567, 11572, 11577, 11581, 11586, + 11593, 11597, 11602, 11606, 11610, 11615, 11619, 11626, 11633, 11640, + 11647, 11655, 11663, 11672, 11680, 11687, 11694, 11702, 11708, 11714, + 11720, 11726, 11733, 11738, 11742, 11747, 0, 0, 0, 0, 0, 11751, 11756, + 11761, 11766, 11771, 11776, 11781, 11786, 11791, 11796, 11801, 11806, + 11811, 11816, 11821, 11826, 11831, 11836, 11841, 11846, 11851, 11856, + 11861, 11866, 11871, 11876, 11881, 11889, 11896, 11902, 11907, 11915, + 11922, 11928, 11935, 11941, 11946, 11953, 11960, 11966, 11971, 11976, + 11982, 11987, 11992, 11998, 0, 0, 12003, 12009, 12015, 12021, 12027, + 12033, 12039, 12044, 12052, 12058, 12064, 12070, 12076, 12082, 12090, 0, + 12096, 12101, 12106, 12111, 12116, 12121, 12126, 12131, 12136, 12141, + 12146, 12151, 12156, 12161, 12166, 12171, 12176, 12181, 12186, 12191, + 12196, 12201, 12206, 12211, 12216, 12221, 12226, 12231, 0, 0, 12236, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12240, 12249, 12257, + 12264, 12272, 12284, 12291, 12298, 12305, 12317, 12328, 12335, 12343, + 12349, 12354, 12362, 12370, 12378, 12384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12394, 12399, 12404, 12409, + 12414, 12419, 12424, 12429, 12434, 12439, 12444, 12449, 12454, 12459, + 12464, 12469, 12474, 12480, 12486, 12492, 12497, 12502, 12507, 12512, + 12518, 12527, 12535, 12541, 12549, 12555, 12559, 12563, 12567, 12572, + 12575, 12579, 12582, 12586, 12589, 12593, 12597, 12601, 12606, 12611, + 12614, 12618, 12623, 12628, 12631, 12635, 12638, 12642, 12646, 12650, + 12654, 12658, 12662, 12666, 12670, 12674, 12678, 12682, 12686, 12690, + 12694, 12698, 12702, 12706, 12710, 12713, 12717, 12720, 12724, 12728, + 12732, 12735, 12738, 12742, 12746, 12750, 12754, 12758, 12762, 12766, + 12770, 12774, 12777, 12782, 12787, 12791, 12795, 12800, 12804, 12809, + 12813, 12818, 12823, 12829, 12835, 12841, 12845, 12850, 12856, 12862, + 12866, 12871, 12875, 12881, 12886, 12889, 12895, 12901, 12906, 12911, + 12918, 12923, 12928, 12932, 12936, 12940, 12944, 12948, 12952, 12956, + 12960, 12965, 12970, 12975, 12981, 12984, 12988, 12992, 12995, 12998, + 13001, 13004, 13007, 13010, 13013, 13016, 13019, 13023, 13030, 13035, + 13039, 13043, 13047, 13051, 13055, 13061, 13065, 13069, 13073, 13077, + 13083, 13087, 13091, 13094, 13098, 13102, 0, 13106, 13109, 13113, 13116, + 13120, 13123, 13127, 13131, 0, 0, 13135, 13138, 0, 0, 13142, 13145, + 13149, 13152, 13156, 13160, 13164, 13168, 13172, 13176, 13180, 13184, + 13188, 13192, 13196, 13200, 13204, 13208, 13212, 13216, 13220, 13224, 0, + 13227, 13230, 13234, 13238, 13242, 13245, 13248, 0, 13252, 0, 0, 0, + 13256, 13260, 13264, 13268, 0, 0, 13271, 13275, 13279, 13284, 13288, + 13293, 13297, 13302, 13307, 0, 0, 13313, 13317, 0, 0, 13322, 13326, + 13331, 13335, 0, 0, 0, 0, 0, 0, 0, 0, 13341, 0, 0, 0, 0, 13347, 13351, 0, + 13355, 13359, 13364, 13369, 13374, 0, 0, 13380, 13384, 13387, 13390, + 13393, 13396, 13399, 13402, 13405, 13408, 13411, 13420, 13429, 13433, + 13437, 13443, 13449, 13455, 13461, 13475, 13482, 13485, 0, 0, 0, 0, 0, + 13489, 13496, 13501, 0, 13506, 13510, 13515, 13519, 13524, 13528, 0, 0, + 0, 0, 13533, 13538, 0, 0, 13543, 13548, 13553, 13557, 13562, 13567, + 13572, 13577, 13582, 13587, 13592, 13597, 13602, 13607, 13612, 13617, + 13622, 13627, 13632, 13637, 13642, 13647, 0, 13651, 13655, 13660, 13665, + 13670, 13674, 13678, 0, 13683, 13688, 0, 13693, 13698, 0, 13703, 13708, + 0, 0, 13712, 0, 13717, 13723, 13728, 13734, 13739, 0, 0, 0, 0, 13745, + 13751, 0, 0, 13757, 13763, 13769, 0, 0, 0, 13774, 0, 0, 0, 0, 0, 0, 0, + 13779, 13784, 13789, 13794, 0, 13799, 0, 0, 0, 0, 0, 0, 0, 13804, 13809, + 13813, 13817, 13821, 13825, 13829, 13833, 13837, 13841, 13845, 13849, + 13853, 13857, 13861, 13867, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13872, + 13876, 13880, 0, 13884, 13887, 13891, 13894, 13898, 13901, 13905, 13909, + 13913, 0, 13918, 13921, 13925, 0, 13930, 13933, 13937, 13940, 13944, + 13948, 13952, 13956, 13960, 13964, 13968, 13972, 13976, 13980, 13984, + 13988, 13992, 13996, 14000, 14004, 14008, 14012, 0, 14015, 14018, 14022, + 14026, 14030, 14033, 14036, 0, 14040, 14044, 0, 14048, 14052, 14056, + 14060, 14064, 0, 0, 14067, 14071, 14075, 14080, 14084, 14089, 14093, + 14098, 14103, 14109, 0, 14115, 14119, 14124, 0, 14130, 14134, 14139, 0, + 0, 14143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14146, 14151, + 14156, 14161, 0, 0, 14167, 14171, 14174, 14177, 14180, 14183, 14186, + 14189, 14192, 14195, 14198, 14202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14206, 14210, 14214, 0, 14218, 14221, 14225, 14228, 14232, 14235, + 14239, 14243, 0, 0, 14247, 14250, 0, 0, 14254, 14257, 14261, 14264, + 14268, 14272, 14276, 14280, 14284, 14288, 14292, 14296, 14300, 14304, + 14308, 14312, 14316, 14320, 14324, 14328, 14332, 14336, 0, 14339, 14342, + 14346, 14350, 14354, 14357, 14360, 0, 14364, 14368, 0, 14372, 14376, + 14380, 14384, 14388, 0, 0, 14391, 14395, 14399, 14404, 14408, 14413, + 14417, 14422, 14427, 0, 0, 14433, 14437, 0, 0, 14442, 14446, 14451, 0, 0, + 0, 0, 0, 0, 0, 0, 14455, 14461, 0, 0, 0, 0, 14467, 14471, 0, 14475, + 14479, 14484, 14489, 14494, 0, 0, 14500, 14504, 14507, 14510, 14513, + 14516, 14519, 14522, 14525, 14528, 14531, 14534, 14538, 14544, 14550, + 14556, 14562, 14568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14574, 14578, 0, + 14582, 14585, 14589, 14592, 14596, 14599, 0, 0, 0, 14603, 14606, 14610, + 0, 14614, 14617, 14621, 14625, 0, 0, 0, 14628, 14632, 0, 14636, 0, 14640, + 14644, 0, 0, 0, 14648, 14652, 0, 0, 0, 14656, 14659, 14663, 0, 0, 0, + 14666, 14669, 14672, 14676, 14680, 14684, 14688, 14692, 14696, 14700, + 14704, 14708, 0, 0, 0, 0, 14711, 14716, 14720, 14725, 14729, 0, 0, 0, + 14734, 14738, 14743, 0, 14748, 14752, 14757, 14762, 0, 0, 14766, 0, 0, 0, + 0, 0, 0, 14769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14775, 14779, + 14782, 14785, 14788, 14791, 14794, 14797, 14800, 14803, 14806, 14810, + 14815, 14820, 14824, 14828, 14832, 14836, 14840, 14845, 14849, 0, 0, 0, + 0, 0, 14852, 14858, 14862, 14866, 0, 14870, 14873, 14877, 14880, 14884, + 14887, 14891, 14895, 0, 14899, 14902, 14906, 0, 14910, 14913, 14917, + 14921, 14924, 14928, 14932, 14936, 14940, 14944, 14948, 14952, 14956, + 14960, 14964, 14968, 14972, 14976, 14980, 14984, 14988, 14992, 14996, 0, + 14999, 15002, 15006, 15010, 15014, 15017, 15020, 15024, 15028, 15032, + 15036, 15040, 15044, 15048, 15052, 15056, 0, 0, 0, 15059, 15063, 15068, + 15072, 15077, 15081, 15086, 15091, 0, 15097, 15101, 15106, 0, 15111, + 15115, 15120, 15125, 0, 0, 0, 0, 0, 0, 0, 15129, 15133, 0, 15139, 15143, + 0, 0, 0, 0, 0, 0, 15147, 15152, 15157, 15162, 0, 0, 15168, 15172, 15175, + 15178, 15181, 15184, 15187, 15190, 15193, 15196, 0, 0, 0, 0, 0, 0, 0, 0, + 15199, 15212, 15224, 15236, 15248, 15260, 15272, 15284, 0, 15288, 15292, + 15296, 0, 15300, 15303, 15307, 15310, 15314, 15317, 15321, 15325, 0, + 15329, 15332, 15336, 0, 15340, 15343, 15347, 15351, 15354, 15358, 15362, + 15366, 15370, 15374, 15378, 15382, 15386, 15390, 15394, 15398, 15402, + 15406, 15410, 15414, 15418, 15422, 15426, 0, 15429, 15432, 15436, 15440, + 15444, 15447, 15450, 15454, 15458, 15462, 0, 15466, 15470, 15474, 15478, + 15482, 0, 0, 15485, 15489, 15493, 15498, 15502, 15507, 15511, 15516, + 15521, 0, 15527, 15531, 15536, 0, 15541, 15545, 15550, 15555, 0, 0, 0, 0, + 0, 0, 0, 15559, 15563, 0, 0, 0, 0, 0, 0, 0, 15569, 0, 15573, 15578, + 15583, 15588, 0, 0, 15594, 15598, 15601, 15604, 15607, 15610, 15613, + 15616, 15619, 15622, 0, 15625, 15629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15633, 15637, 15641, 0, 15645, 15648, 15652, 15655, 15659, 15662, + 15666, 15670, 0, 15674, 15677, 15681, 0, 15685, 15688, 15692, 15696, + 15699, 15703, 15707, 15711, 15715, 15719, 15723, 15727, 15731, 15735, + 15739, 15743, 15747, 15751, 15755, 15759, 15763, 15767, 15771, 15774, + 15778, 15781, 15785, 15789, 15793, 15796, 15799, 15803, 15807, 15811, + 15815, 15819, 15823, 15827, 15831, 15835, 15838, 0, 0, 15842, 15846, + 15851, 15855, 15860, 15864, 15869, 15874, 0, 15880, 15884, 15889, 0, + 15894, 15898, 15903, 15908, 15912, 0, 0, 0, 0, 0, 0, 0, 0, 15917, 0, 0, + 0, 0, 0, 0, 0, 0, 15923, 15928, 15933, 15938, 0, 0, 15944, 15948, 15951, + 15954, 15957, 15960, 15963, 15966, 15969, 15972, 15975, 15979, 15984, + 15989, 15995, 16001, 0, 0, 0, 16007, 16011, 16017, 16023, 16029, 16034, + 16040, 0, 0, 16046, 16050, 0, 16054, 16058, 16062, 16066, 16070, 16074, + 16078, 16082, 16086, 16090, 16094, 16098, 16102, 16106, 16110, 16114, + 16118, 16122, 0, 0, 0, 16126, 16132, 16138, 16144, 16150, 16156, 16162, + 16168, 16174, 16180, 16186, 16192, 16200, 16206, 16212, 16218, 16224, + 16230, 16236, 16242, 16248, 16254, 16260, 16266, 0, 16272, 16278, 16284, + 16290, 16296, 16302, 16306, 16312, 16316, 0, 16320, 0, 0, 16326, 16330, + 16336, 16342, 16348, 16352, 16358, 0, 0, 0, 16362, 0, 0, 0, 0, 16366, + 16371, 16378, 16385, 16392, 16399, 0, 16406, 0, 16413, 16418, 16423, + 16430, 16437, 16446, 16457, 16466, 0, 0, 0, 0, 0, 0, 16471, 16477, 16482, + 16487, 16492, 16497, 16502, 16507, 16512, 16517, 0, 0, 16522, 16529, + 16536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16541, 16547, 16553, 16559, + 16565, 16571, 16577, 16583, 16589, 16595, 16601, 16607, 16613, 16619, + 16625, 16631, 16637, 16643, 16649, 16655, 16661, 16667, 16673, 16679, + 16685, 16691, 16697, 16703, 16709, 16715, 16721, 16727, 16733, 16738, + 16744, 16750, 16754, 16760, 16764, 16770, 16776, 16782, 16788, 16794, + 16800, 16805, 16811, 16815, 16820, 16826, 16832, 16838, 16843, 16849, + 16855, 16861, 16866, 16872, 0, 0, 0, 0, 16876, 16882, 16887, 16893, + 16898, 16906, 16914, 16918, 16922, 16926, 16932, 16938, 16944, 16950, + 16954, 16958, 16962, 16966, 16970, 16973, 16976, 16979, 16982, 16985, + 16988, 16991, 16994, 16997, 17001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17005, 17010, 0, 17017, 0, 0, 17024, 17029, 0, 17034, 0, 0, 17041, 0, 0, + 0, 0, 0, 0, 17046, 17051, 17055, 17062, 0, 17069, 17074, 17079, 17084, + 17091, 17098, 17105, 0, 17112, 17117, 17122, 0, 17129, 0, 17136, 0, 0, + 17141, 17148, 0, 17155, 17159, 17166, 17170, 17175, 17183, 17189, 17195, + 17200, 17206, 17212, 17218, 17223, 0, 17229, 17237, 17244, 0, 0, 17251, + 17256, 17262, 17267, 17273, 0, 17279, 0, 17285, 17292, 17299, 17306, + 17313, 17318, 0, 0, 17322, 17327, 17331, 17335, 17339, 17343, 17347, + 17351, 17355, 17359, 0, 0, 17363, 17369, 17375, 17382, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17389, 17393, 17404, 17419, 17434, 17444, 17455, 17468, 17479, + 17485, 17493, 17503, 17509, 17517, 17521, 17527, 17533, 17541, 17551, + 17559, 17572, 17578, 17586, 17594, 17606, 17613, 17621, 17629, 17637, + 17645, 17653, 17661, 17671, 17675, 17678, 17681, 17684, 17687, 17690, + 17693, 17696, 17699, 17702, 17706, 17710, 17714, 17718, 17722, 17726, + 17730, 17734, 17738, 17743, 17749, 17759, 17773, 17783, 17789, 17795, + 17803, 17811, 17819, 17827, 17833, 17839, 17842, 17846, 17850, 17854, + 17858, 17862, 17866, 0, 17870, 17874, 17878, 17882, 17886, 17890, 17894, + 17898, 17902, 17906, 17910, 17913, 17916, 17920, 17924, 17928, 17931, + 17935, 17939, 17943, 17947, 17951, 17955, 17959, 17963, 17966, 17970, + 17974, 17978, 17982, 17986, 17989, 17992, 17996, 18002, 18006, 0, 0, 0, + 0, 18010, 18015, 18019, 18024, 18028, 18033, 18038, 18044, 18049, 18055, + 18059, 18064, 18068, 18073, 18083, 18089, 18095, 18102, 18112, 18118, + 18122, 18126, 18132, 18138, 18146, 18152, 18160, 18168, 18176, 18186, + 18194, 18204, 18209, 18215, 18221, 18227, 18233, 18239, 18245, 0, 18251, + 18257, 18263, 18269, 18275, 18281, 18287, 18293, 18299, 18305, 18311, + 18316, 18321, 18327, 18333, 18339, 18344, 18350, 18356, 18362, 18368, + 18374, 18380, 18386, 18392, 18397, 18403, 18409, 18415, 18421, 18427, + 18432, 18437, 18443, 18451, 18458, 0, 18466, 18473, 18486, 18493, 18500, + 18508, 18516, 18522, 18528, 18534, 18544, 18549, 18555, 18565, 18575, 0, + 18585, 18595, 18603, 18615, 18627, 18633, 18647, 18662, 18667, 18672, + 18680, 18688, 18696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18704, 18707, + 18711, 18715, 18719, 18723, 18727, 18731, 18735, 18739, 18743, 18747, + 18751, 18755, 18759, 18763, 18767, 18771, 18775, 18779, 18783, 18786, + 18789, 18793, 18797, 18801, 18804, 18807, 18811, 18815, 18819, 18823, + 18826, 18830, 18833, 18838, 18841, 18845, 18848, 18852, 18855, 18860, + 18863, 18867, 18874, 18879, 18883, 18888, 18892, 18897, 18901, 18906, + 18913, 18919, 18924, 18928, 18932, 18936, 18940, 18944, 18949, 18955, + 18961, 18966, 18972, 18976, 18979, 18982, 18985, 18988, 18991, 18994, + 18997, 19000, 19003, 19009, 19013, 19017, 19021, 19025, 19029, 19033, + 19037, 19041, 19046, 19050, 19055, 19060, 19066, 19071, 19077, 19083, + 19089, 19095, 19101, 19108, 19115, 19123, 19131, 19140, 19149, 19160, + 19170, 19180, 19191, 19202, 19212, 19222, 19232, 19242, 19252, 19262, + 19272, 19282, 19290, 19297, 19303, 19310, 19315, 19321, 19327, 19333, + 19339, 19345, 19351, 19356, 19362, 19368, 19374, 19380, 19385, 19393, + 19400, 19406, 19413, 19421, 19427, 19433, 19439, 19445, 19453, 19461, + 19471, 19479, 19487, 19493, 19498, 19503, 19508, 19513, 19518, 19523, + 19528, 19533, 19538, 19544, 19550, 19556, 19563, 19568, 19574, 19579, + 19584, 19589, 19594, 19599, 19604, 19609, 19614, 19619, 19624, 19629, + 19634, 19639, 19644, 19649, 19654, 19659, 19664, 19669, 19674, 19679, + 19684, 19689, 19694, 19699, 19704, 19709, 19714, 19719, 19724, 19729, + 19734, 19739, 19744, 19749, 19754, 19759, 0, 19764, 0, 0, 0, 0, 0, 19769, + 0, 0, 19774, 19778, 19782, 19786, 19790, 19794, 19798, 19802, 19806, + 19810, 19814, 19818, 19822, 19826, 19830, 19834, 19838, 19842, 19846, + 19850, 19854, 19858, 19862, 19866, 19870, 19874, 19878, 19882, 19886, + 19890, 19894, 19898, 19902, 19906, 19910, 19914, 19918, 19922, 19926, + 19930, 19934, 19938, 19943, 19947, 19952, 19957, 19961, 19966, 19971, + 19975, 19979, 19983, 19987, 19991, 19995, 19999, 20003, 20007, 20011, + 20015, 20019, 20023, 20027, 20031, 20035, 20039, 20043, 20047, 20051, + 20055, 20059, 20063, 20067, 20071, 20075, 20079, 20083, 20087, 20091, + 20095, 20099, 20103, 20107, 20111, 20115, 20119, 20123, 20127, 20131, + 20135, 20139, 20143, 20147, 20151, 20155, 20159, 20163, 20167, 20171, + 20175, 20179, 20183, 20187, 20191, 20195, 20199, 20203, 20207, 20211, + 20215, 20219, 20223, 20227, 20231, 20235, 20239, 20243, 20247, 20251, + 20255, 20259, 20263, 20267, 20271, 20275, 20279, 20283, 20287, 20291, + 20295, 20299, 20303, 20307, 20311, 20315, 20319, 20323, 20327, 20331, + 20335, 20339, 20343, 20347, 20351, 20355, 20359, 20362, 20366, 20369, + 20373, 20377, 20380, 20384, 20388, 20391, 20395, 20399, 20403, 20407, + 20410, 20414, 20418, 20422, 20426, 20430, 20434, 20437, 20441, 20445, + 20449, 20453, 20457, 20461, 20465, 20469, 20473, 20477, 20481, 20485, + 20489, 20493, 20497, 20501, 20505, 20509, 20513, 20517, 20521, 20525, + 20529, 20533, 20537, 20541, 20545, 20549, 20553, 20557, 20561, 20565, + 20569, 20573, 20577, 20581, 20585, 20589, 20593, 20597, 20601, 20605, + 20609, 20613, 20617, 20621, 20625, 20629, 20633, 20637, 20641, 20645, + 20649, 20653, 20657, 20661, 20665, 20669, 20673, 20677, 20681, 20685, + 20689, 20693, 20697, 20701, 20705, 20709, 20713, 20717, 20721, 20725, + 20729, 20733, 20737, 20741, 20745, 20749, 20753, 20757, 20761, 20765, + 20769, 20773, 20777, 20781, 20785, 20789, 20793, 20797, 20801, 20805, + 20809, 20813, 20817, 20821, 20825, 20829, 20833, 20837, 20841, 20845, + 20849, 20853, 20857, 20861, 20865, 20869, 20873, 20877, 20881, 20885, + 20889, 20893, 20897, 20901, 20905, 20909, 20913, 20917, 20921, 20925, + 20929, 20933, 20937, 20941, 20945, 20949, 20953, 20957, 20961, 20965, + 20969, 20973, 20977, 20981, 20985, 20989, 20992, 20996, 21000, 21004, + 21008, 21012, 21016, 21020, 21024, 21028, 21032, 21036, 21040, 21044, + 21048, 21052, 21056, 21060, 21064, 21068, 21072, 21076, 21080, 21084, + 21087, 21091, 21095, 21099, 21103, 21107, 21111, 21115, 21119, 21123, + 21127, 21131, 21135, 21139, 21143, 21147, 21151, 21155, 21159, 21163, + 21167, 21171, 21175, 21179, 21183, 21187, 21191, 21195, 21199, 21203, + 21207, 21211, 21215, 21219, 21223, 21227, 21231, 21235, 21239, 21243, + 21247, 21251, 21255, 21259, 21263, 21267, 21271, 21275, 0, 21279, 21283, + 21287, 21291, 0, 0, 21295, 21299, 21303, 21307, 21311, 21315, 21319, 0, + 21323, 0, 21327, 21331, 21335, 21339, 0, 0, 21343, 21347, 21351, 21355, + 21359, 21363, 21367, 21371, 21375, 21379, 21383, 21387, 21391, 21395, + 21399, 21403, 21407, 21411, 21415, 21419, 21423, 21427, 21431, 21434, + 21438, 21442, 21446, 21450, 21454, 21458, 21462, 21466, 21470, 21474, + 21478, 21482, 21486, 21490, 21494, 21498, 21502, 0, 21506, 21510, 21514, + 21518, 0, 0, 21522, 21525, 21529, 21533, 21537, 21541, 21545, 21549, + 21553, 21557, 21561, 21565, 21569, 21573, 21577, 21581, 21585, 21590, + 21595, 21600, 21606, 21612, 21617, 21622, 21628, 21631, 21635, 21639, + 21643, 21647, 21651, 21655, 21659, 0, 21663, 21667, 21671, 21675, 0, 0, + 21679, 21683, 21687, 21691, 21695, 21699, 21703, 0, 21707, 0, 21711, + 21715, 21719, 21723, 0, 0, 21727, 21731, 21735, 21739, 21743, 21747, + 21751, 21755, 21759, 21764, 21769, 21774, 21780, 21786, 21791, 0, 21796, + 21800, 21804, 21808, 21812, 21816, 21820, 21824, 21828, 21832, 21836, + 21840, 21844, 21848, 21852, 21856, 21860, 21863, 21867, 21871, 21875, + 21879, 21883, 21887, 21891, 21895, 21899, 21903, 21907, 21911, 21915, + 21919, 21923, 21927, 21931, 21935, 21939, 21943, 21947, 21951, 21955, + 21959, 21963, 21967, 21971, 21975, 21979, 21983, 21987, 21991, 21995, + 21999, 22003, 22007, 22011, 22015, 22019, 0, 22023, 22027, 22031, 22035, + 0, 0, 22039, 22043, 22047, 22051, 22055, 22059, 22063, 22067, 22071, + 22075, 22079, 22083, 22087, 22091, 22095, 22099, 22103, 22107, 22111, + 22115, 22119, 22123, 22127, 22131, 22135, 22139, 22143, 22147, 22151, + 22155, 22159, 22163, 22167, 22171, 22175, 22179, 22183, 22187, 22191, + 22195, 22199, 22203, 22207, 22211, 22215, 22219, 22223, 22227, 22231, + 22235, 22239, 22243, 22247, 22251, 22255, 22259, 22263, 22266, 22270, + 22274, 22278, 22282, 22286, 22290, 22294, 22298, 22302, 0, 0, 22306, + 22315, 22321, 22326, 22330, 22333, 22338, 22341, 22344, 22347, 22352, + 22356, 22361, 22364, 22367, 22370, 22373, 22376, 22379, 22382, 22385, + 22388, 22392, 22396, 22400, 22404, 22408, 22412, 22416, 22420, 22424, + 22428, 0, 0, 0, 22434, 22440, 22444, 22448, 22452, 22458, 22462, 22466, + 22470, 22476, 22480, 22484, 22488, 22494, 22498, 22502, 22506, 22512, + 22518, 22524, 22532, 22538, 22544, 22550, 22556, 22562, 0, 0, 0, 0, 0, 0, + 22568, 22571, 22574, 22577, 22580, 22583, 22587, 22591, 22594, 22598, + 22602, 22606, 22610, 22614, 22617, 22621, 22625, 22629, 22633, 22637, + 22641, 22645, 22649, 22653, 22657, 22661, 22664, 22668, 22672, 22676, + 22680, 22683, 22687, 22691, 22695, 22699, 22703, 22707, 22711, 22715, + 22719, 22723, 22727, 22731, 22735, 22739, 22742, 22746, 22750, 22754, + 22758, 22762, 22766, 22770, 22774, 22778, 22782, 22786, 22790, 22794, + 22798, 22802, 22806, 22810, 22814, 22818, 22822, 22826, 22830, 22834, + 22838, 22842, 22846, 22850, 22854, 22858, 22862, 22866, 22870, 22874, + 22877, 22881, 22885, 22889, 22893, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 22897, 22901, 22904, 22908, 22911, 22915, 22918, 22922, 22928, 22933, + 22937, 22940, 22944, 22948, 22953, 22957, 22962, 22966, 22971, 22975, + 22980, 22984, 22989, 22995, 22999, 23004, 23008, 23013, 23019, 23023, + 23029, 23035, 23039, 23044, 23052, 23060, 23067, 23072, 23077, 23086, + 23093, 23100, 23105, 23111, 23115, 23119, 23123, 23127, 23131, 23135, + 23139, 23143, 23147, 23151, 23157, 23162, 23167, 23170, 23174, 23178, + 23183, 23187, 23192, 23196, 23201, 23205, 23210, 23214, 23219, 23223, + 23228, 23232, 23237, 23243, 23247, 23252, 23257, 23261, 23265, 23269, + 23273, 23276, 23280, 23286, 23291, 23296, 23300, 23304, 23308, 23313, + 23317, 23322, 23326, 23331, 23334, 23338, 23342, 23347, 23351, 23356, + 23360, 23365, 23371, 23375, 23379, 23383, 23387, 23391, 23395, 23399, + 23403, 23407, 23411, 23415, 23421, 23424, 23428, 23432, 23437, 23441, + 23446, 23450, 23455, 23459, 23464, 23468, 23473, 23477, 23482, 23486, + 23491, 23497, 23501, 23505, 23511, 23517, 23523, 23529, 23533, 23537, + 23541, 23545, 23549, 23553, 23559, 23563, 23567, 23571, 23576, 23580, + 23585, 23589, 23594, 23598, 23603, 23607, 23612, 23616, 23621, 23625, + 23630, 23636, 23640, 23646, 23650, 23654, 23658, 23662, 23666, 23670, + 23676, 23679, 23683, 23687, 23692, 23696, 23701, 23705, 23710, 23714, + 23719, 23723, 23728, 23732, 23737, 23741, 23746, 23752, 23756, 23761, + 23765, 23771, 23777, 23781, 23785, 23789, 23793, 23797, 23801, 23807, + 23810, 23814, 23818, 23823, 23827, 23832, 23836, 23841, 23847, 23851, + 23856, 23860, 23864, 23868, 23872, 23876, 23880, 23884, 23890, 23894, + 23898, 23902, 23907, 23911, 23916, 23920, 23925, 23929, 23934, 23938, + 23943, 23947, 23952, 23956, 23961, 23964, 23968, 23972, 23976, 23980, + 23984, 23988, 23992, 23996, 24002, 24006, 24010, 24014, 24019, 24023, + 24028, 24032, 24037, 24041, 24046, 24050, 24055, 24059, 24064, 24068, + 24073, 24079, 24082, 24087, 24091, 24096, 24102, 24108, 24114, 24120, + 24126, 24132, 24138, 24142, 24146, 24150, 24154, 24158, 24162, 24166, + 24170, 24175, 24179, 24184, 24188, 24193, 24197, 24202, 24206, 24211, + 24215, 24220, 24224, 24229, 24233, 24237, 24241, 24245, 24249, 24253, + 24257, 24263, 24266, 24270, 24274, 24279, 24283, 24288, 24292, 24297, + 24301, 24306, 24310, 24315, 24319, 24324, 24328, 24333, 24339, 24343, + 24349, 24354, 24360, 24364, 24370, 24375, 24379, 24383, 24387, 24391, + 24395, 24400, 24404, 24408, 24413, 24417, 24422, 24425, 24429, 24433, + 24437, 24441, 24445, 24449, 24453, 24457, 24461, 24465, 24469, 24474, + 24478, 24482, 24488, 24492, 24498, 24502, 24508, 24512, 24516, 24520, + 24524, 24528, 24533, 24537, 24541, 24545, 24549, 24553, 24557, 24561, + 24565, 24569, 24573, 24579, 24585, 24591, 24597, 24603, 24608, 24614, + 24620, 24626, 24630, 24634, 24638, 24642, 24646, 24650, 24654, 24658, + 24662, 24666, 24670, 24674, 24678, 24683, 24688, 24693, 24698, 24702, + 24706, 24710, 24714, 24718, 24722, 24726, 24730, 24734, 24740, 24746, + 24752, 24758, 24764, 24770, 24776, 24782, 24788, 24792, 24796, 24800, + 24804, 24808, 24812, 24816, 24822, 24828, 24834, 24840, 24846, 24852, + 24858, 24864, 24870, 24875, 24880, 24885, 24890, 24896, 24902, 24908, + 24914, 24920, 24926, 24932, 24937, 24943, 24949, 24955, 24960, 24966, + 24972, 24978, 24983, 24988, 24993, 24998, 25003, 25008, 25013, 25018, + 25023, 25028, 25033, 25038, 25043, 25048, 25053, 25058, 25063, 25068, + 25073, 25078, 25083, 25088, 25093, 25098, 25103, 25108, 25113, 25118, + 25123, 25128, 25133, 25138, 25143, 25148, 25153, 25158, 25163, 25168, + 25173, 25178, 25183, 25188, 25192, 25197, 25202, 25207, 25212, 25217, + 25222, 25227, 25232, 25237, 25242, 25247, 25252, 25257, 25262, 25267, + 25272, 25277, 25282, 25287, 25292, 25297, 25302, 25307, 25312, 25317, + 25321, 25326, 25331, 25336, 25341, 25346, 25350, 25355, 25360, 25365, + 25370, 25375, 25379, 25384, 25390, 25395, 25400, 25405, 25410, 25416, + 25421, 25426, 25431, 25436, 25441, 25446, 25451, 25456, 25461, 25466, + 25471, 25476, 25481, 25486, 25491, 25496, 25501, 25506, 25511, 25516, + 25521, 25526, 25531, 25536, 25541, 25546, 25551, 25556, 25561, 25566, + 25571, 25576, 25581, 25586, 25591, 25596, 25601, 25606, 25611, 25616, + 25621, 25626, 25631, 25636, 25642, 25647, 25652, 25657, 25662, 25667, + 25672, 25677, 25682, 25687, 25692, 25697, 25702, 25707, 25712, 25717, + 25722, 25727, 25732, 25737, 25742, 25747, 25752, 25757, 25762, 25767, + 25772, 25777, 25782, 25787, 25792, 25797, 25802, 25807, 25812, 25817, + 25822, 25827, 25832, 25838, 25842, 25846, 25850, 25854, 25858, 25862, + 25866, 25870, 25876, 25882, 25888, 25894, 25900, 25906, 25912, 25919, + 25925, 25930, 25935, 25940, 25945, 25950, 25955, 25960, 25965, 25970, + 25975, 25980, 25985, 25990, 25995, 26000, 26005, 26010, 26015, 26020, + 26025, 26030, 26035, 26040, 26045, 26050, 26055, 26060, 26065, 0, 0, 0, + 26072, 26082, 26086, 26093, 26097, 26101, 26105, 26113, 26117, 26122, + 26127, 26132, 26136, 26141, 26146, 26149, 26153, 26157, 26166, 26170, + 26174, 26180, 26184, 26188, 26196, 26200, 26208, 26214, 26220, 26226, + 26232, 26242, 26248, 26252, 26261, 26264, 26270, 26274, 26280, 26285, + 26291, 26299, 26305, 26310, 26317, 26322, 26326, 26330, 26340, 26346, + 26350, 26360, 26366, 26370, 26374, 26381, 26389, 26395, 26401, 26410, + 26414, 26418, 26422, 26430, 26437, 26441, 26445, 26449, 26453, 26457, + 26461, 26465, 26469, 26473, 26477, 26481, 26486, 26491, 26496, 26500, + 26504, 26508, 26512, 26516, 26520, 26528, 26536, 26544, 26552, 0, 0, 0, + 0, 0, 0, 0, 26560, 26564, 26568, 26572, 26576, 26581, 26586, 26591, + 26596, 26600, 26604, 26609, 26613, 0, 26617, 26622, 26627, 26632, 26636, + 26641, 26646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26651, 26655, 26659, + 26663, 26667, 26672, 26677, 26682, 26687, 26691, 26695, 26700, 26704, + 26708, 26713, 26718, 26723, 26728, 26732, 26737, 26742, 26747, 26753, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 26758, 26762, 26766, 26770, 26774, 26779, 26784, + 26789, 26794, 26798, 26802, 26807, 26811, 26815, 26820, 26825, 26830, + 26835, 26839, 26844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26849, 26853, + 26857, 26861, 26865, 26870, 26875, 26880, 26885, 26889, 26893, 26898, + 26902, 0, 26906, 26911, 26916, 0, 26921, 26926, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 26931, 26934, 26938, 26942, 26946, 26950, 26954, 26958, + 26962, 26966, 26970, 26974, 26978, 26982, 26986, 26990, 26994, 26998, + 27001, 27005, 27009, 27013, 27017, 27021, 27025, 27029, 27033, 27037, + 27041, 27045, 27049, 27053, 27057, 27060, 27064, 27068, 27074, 27080, + 27086, 27092, 27098, 27104, 27110, 27116, 27122, 27128, 27134, 27140, + 27146, 27152, 27161, 27170, 27176, 27182, 27188, 27193, 27197, 27202, + 27207, 27212, 27216, 27221, 27226, 27231, 27235, 27240, 27244, 27249, + 27254, 27259, 27264, 27268, 27272, 27276, 27280, 27284, 27288, 27292, + 27296, 27300, 27304, 27310, 27314, 27318, 27322, 27326, 27330, 27338, + 27344, 27348, 27354, 27358, 27364, 27368, 0, 0, 27372, 27376, 27379, + 27382, 27385, 27388, 27391, 27394, 27397, 27400, 0, 0, 0, 0, 0, 0, 27403, + 27411, 27419, 27427, 27435, 27443, 27451, 27459, 27467, 27475, 0, 0, 0, + 0, 0, 0, 27483, 27486, 27489, 27492, 27497, 27500, 27505, 27512, 27520, + 27525, 27532, 27535, 27542, 27549, 27556, 0, 27560, 27564, 27567, 27570, + 27573, 27576, 27579, 27582, 27585, 27588, 0, 0, 0, 0, 0, 0, 27591, 27594, + 27597, 27600, 27603, 27606, 27610, 27614, 27618, 27621, 27625, 27629, + 27632, 27636, 27640, 27643, 27647, 27651, 27655, 27659, 27663, 27667, + 27671, 27674, 27678, 27682, 27686, 27689, 27693, 27697, 27701, 27705, + 27709, 27713, 27717, 27721, 27728, 27733, 27738, 27743, 27748, 27754, + 27760, 27766, 27772, 27777, 27783, 27789, 27794, 27800, 27806, 27812, + 27818, 27824, 27829, 27835, 27840, 27846, 27852, 27858, 27864, 27870, + 27875, 27880, 27886, 27892, 27897, 27903, 27908, 27914, 27919, 27924, + 27930, 27936, 27942, 27948, 27954, 27960, 27966, 27972, 27978, 27984, + 27990, 27996, 28001, 28006, 28012, 28018, 0, 0, 0, 0, 0, 0, 0, 0, 28024, + 28033, 28042, 28050, 28058, 28068, 28076, 28085, 28092, 28099, 28106, + 28114, 28122, 28130, 28138, 28146, 28154, 28162, 28170, 28177, 28185, + 28193, 28201, 28209, 28217, 28227, 28237, 28247, 28257, 28267, 28277, + 28287, 28297, 28307, 28317, 28327, 28337, 28347, 28357, 28365, 28373, + 28383, 28391, 0, 0, 0, 0, 0, 28401, 28405, 28409, 28413, 28417, 28421, + 28425, 28429, 28433, 28437, 28441, 28445, 28449, 28453, 28457, 28461, + 28465, 28469, 28473, 28477, 28481, 28485, 28489, 28493, 28499, 28503, + 28509, 28513, 28519, 28523, 28529, 28533, 28537, 28541, 28545, 28549, + 28553, 28559, 28565, 28571, 28577, 28583, 28589, 28594, 28600, 28606, + 28612, 28618, 28625, 28631, 28636, 28641, 28645, 28649, 28653, 28657, + 28661, 28665, 28669, 28675, 28681, 28687, 28692, 28699, 28704, 28709, + 28715, 28720, 28727, 28734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28740, 28746, + 28750, 28755, 28760, 28765, 28770, 28775, 28780, 28785, 28790, 28795, + 28800, 28805, 28810, 28815, 28819, 28823, 28828, 28833, 28838, 28842, + 28846, 28851, 28856, 28861, 28866, 28871, 28876, 28880, 28885, 0, 28890, + 28895, 28900, 28905, 28911, 28917, 28923, 28929, 28934, 28939, 28945, + 28952, 0, 0, 0, 0, 28959, 28964, 28970, 28976, 28982, 28987, 28992, + 28997, 29003, 29009, 29014, 29019, 0, 0, 0, 0, 29024, 0, 0, 0, 29029, + 29034, 29039, 29044, 29048, 29052, 29056, 29060, 29064, 29068, 29072, + 29076, 29080, 29085, 29091, 29097, 29103, 29109, 29114, 29120, 29126, + 29132, 29137, 29143, 29148, 29154, 29160, 29165, 29171, 29177, 29183, + 29188, 29193, 29198, 29204, 29210, 29215, 29221, 29226, 29232, 29237, + 29243, 0, 0, 29249, 29255, 29261, 29267, 29273, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 29279, 29287, 29295, 29302, 29310, 29318, 29325, 29333, 29341, + 29349, 29357, 29364, 29372, 29380, 29387, 29395, 29403, 29410, 29418, + 29426, 29433, 29440, 29448, 29455, 29462, 29470, 29477, 29485, 29493, + 29501, 29509, 29517, 29525, 29532, 29540, 29548, 29555, 29563, 29571, + 29579, 29587, 29595, 29603, 29611, 0, 0, 0, 0, 29619, 29628, 29636, + 29644, 29651, 29659, 29666, 29674, 29681, 29689, 29697, 29705, 29713, + 29721, 29729, 29737, 29745, 29753, 29761, 29769, 29777, 29785, 29793, + 29801, 29809, 29816, 0, 0, 0, 0, 0, 0, 29823, 29830, 29836, 29842, 29848, + 29854, 29860, 29866, 29872, 29878, 29884, 0, 0, 0, 29891, 29898, 29905, + 29909, 29915, 29921, 29927, 29933, 29939, 29945, 29951, 29957, 29963, + 29969, 29975, 29981, 29987, 29993, 29999, 30003, 30009, 30015, 30021, + 30027, 30033, 30039, 30045, 30051, 30057, 30063, 30069, 30075, 30081, + 30087, 30093, 30097, 30102, 30107, 30112, 30116, 30121, 30125, 30130, + 30135, 30140, 30144, 30149, 30154, 30159, 30164, 30169, 30173, 30178, + 30183, 30188, 30193, 30197, 30201, 30206, 30211, 30216, 30221, 0, 0, + 30227, 30231, 30238, 30243, 30249, 30255, 30260, 30266, 30272, 30277, + 30283, 30289, 30295, 30301, 30307, 30312, 30317, 30323, 30328, 30334, + 30339, 30345, 30351, 30357, 30363, 30367, 30372, 30377, 30383, 30389, + 30394, 30400, 30406, 30410, 30415, 30420, 30425, 30430, 30435, 30440, + 30445, 30451, 30457, 30463, 30468, 30473, 30477, 30482, 30486, 30491, + 30495, 30500, 30505, 30510, 30515, 30522, 30529, 30536, 30546, 30555, + 30562, 30568, 30579, 30584, 30590, 0, 30596, 30601, 30606, 30614, 30620, + 30628, 30633, 30639, 30645, 30651, 30656, 30662, 30667, 30674, 30680, + 30685, 30691, 30697, 30703, 30710, 30717, 30724, 30729, 30734, 30741, + 30748, 30755, 30762, 30769, 0, 0, 30776, 30783, 30790, 30796, 30802, + 30808, 30814, 30820, 30826, 30832, 30838, 0, 0, 0, 0, 0, 0, 30844, 30850, + 30855, 30860, 30865, 30870, 30875, 30880, 30885, 30890, 0, 0, 0, 0, 0, 0, + 30895, 30900, 30905, 30910, 30915, 30920, 30925, 30934, 30941, 30946, + 30951, 30956, 30961, 30966, 0, 0, 30971, 30978, 30981, 30984, 30987, + 30992, 30996, 31002, 31007, 31013, 31020, 31028, 31032, 31037, 31041, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31046, 31052, 31058, + 31062, 31066, 31070, 31074, 31080, 31084, 31090, 31094, 31100, 31106, + 31114, 31120, 31128, 31132, 31136, 31140, 31146, 31149, 31155, 31159, + 31165, 31169, 31173, 31179, 31183, 31189, 31193, 31199, 31207, 31215, + 31223, 31229, 31233, 31239, 31243, 31249, 31252, 31255, 31261, 31265, + 31271, 31274, 31277, 31281, 31285, 31289, 31295, 31301, 31305, 31308, + 31312, 31317, 31322, 31329, 31334, 31341, 31348, 31357, 31364, 31373, + 31378, 31385, 31392, 31401, 31406, 31413, 31418, 31424, 31430, 31436, + 31442, 31448, 31454, 0, 0, 0, 0, 31460, 31464, 31467, 31470, 31473, + 31476, 31479, 31482, 31485, 31488, 31491, 31494, 31497, 31500, 31505, + 31510, 31515, 31518, 31523, 31528, 31533, 31538, 31545, 31550, 31555, + 31560, 31565, 31572, 31578, 31584, 31590, 31596, 31602, 31611, 31620, + 31626, 31632, 31641, 31650, 31659, 31668, 31677, 31686, 31695, 31704, 0, + 0, 0, 31713, 31718, 31723, 31728, 31732, 31736, 31740, 31745, 31749, + 31753, 31758, 31762, 31767, 31772, 31777, 31782, 31787, 31792, 31797, + 31802, 31807, 31811, 31815, 31820, 31825, 31830, 31834, 31838, 31843, + 31848, 31853, 31858, 31863, 31867, 31873, 31879, 31885, 31891, 31897, + 31903, 31909, 31915, 31921, 31926, 31931, 31938, 31946, 31951, 31956, + 31961, 31965, 31969, 31973, 31977, 31981, 31985, 31989, 31993, 31997, + 32001, 32006, 32011, 32016, 32022, 32028, 32032, 32038, 32042, 32048, + 32054, 32059, 32066, 32070, 32076, 32080, 32086, 32091, 32098, 32105, + 32110, 32117, 32122, 32127, 32132, 32139, 32143, 32149, 32156, 32163, + 32168, 32175, 32182, 32186, 32192, 32197, 32202, 32209, 32214, 32219, + 32224, 32229, 32233, 32237, 32242, 32247, 32254, 32260, 32265, 32272, + 32277, 32284, 32289, 32299, 32305, 32311, 32315, 0, 0, 0, 0, 0, 0, 0, 0, + 32319, 32328, 32335, 32342, 32349, 32353, 32358, 32363, 32368, 32373, + 32378, 32383, 32388, 32393, 32398, 32403, 32408, 32413, 32417, 32421, + 32426, 32431, 32436, 32441, 32446, 32451, 32455, 32460, 32465, 32470, + 32475, 32479, 32484, 32489, 32493, 32498, 32503, 32508, 32513, 32518, + 32522, 32528, 32535, 32541, 32546, 32551, 32557, 32562, 32568, 32573, + 32579, 32585, 32590, 32596, 32602, 32607, 32613, 32619, 32625, 32630, 0, + 0, 0, 32635, 32641, 32651, 32657, 32665, 32671, 32676, 32680, 32684, + 32688, 32692, 32696, 32700, 32704, 32708, 0, 0, 0, 32712, 32717, 32722, + 32727, 32734, 32740, 32746, 32752, 32758, 32764, 32770, 32776, 32782, + 32788, 32795, 32802, 32809, 32816, 32823, 32830, 32837, 32844, 32851, + 32858, 32865, 32872, 32879, 32886, 32893, 32900, 32907, 32914, 32921, + 32928, 32935, 32942, 32949, 32956, 32963, 32970, 32977, 32984, 32991, + 32998, 33006, 33014, 33022, 33028, 33034, 33040, 33048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12070, 0, 12079, 12086, 12094, 12106, 12113, 12120, 12127, 12138, 12149, - 12156, 12164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12170, 12175, 12180, 12185, 12190, - 12195, 12200, 12205, 12210, 12215, 12220, 12225, 12230, 12234, 12238, - 12242, 12247, 12253, 12259, 12265, 12270, 12275, 12280, 12285, 12291, - 12300, 12308, 0, 12314, 12320, 12324, 12328, 12332, 12337, 12340, 12344, - 12347, 12351, 12354, 12358, 12362, 12366, 12371, 12376, 12379, 12383, - 12388, 12393, 12396, 12400, 12403, 12407, 12411, 12415, 12419, 12423, - 12427, 12431, 12435, 12439, 12443, 12447, 12451, 12455, 12459, 12463, - 12467, 12471, 12475, 12478, 12482, 12485, 12489, 12493, 12497, 12500, - 12503, 12506, 12510, 12514, 12518, 12522, 12526, 12530, 12534, 12537, - 12540, 12545, 12550, 12554, 12558, 12563, 12567, 12572, 12576, 12581, - 12586, 12592, 12598, 12604, 12608, 12613, 12619, 12625, 12629, 12634, - 12638, 12644, 12649, 12652, 12658, 12664, 12669, 12674, 12681, 12686, - 12691, 12695, 12699, 12703, 12707, 12711, 12715, 12719, 12723, 12728, - 12733, 12738, 12744, 12747, 12751, 12755, 12758, 12761, 12764, 12767, - 12770, 12773, 12776, 12779, 12782, 12786, 12793, 12798, 12802, 12806, - 12810, 12814, 0, 12818, 12822, 12826, 12830, 12834, 12840, 12844, 0, - 12848, 12852, 12856, 0, 12860, 12863, 12867, 12870, 12874, 12877, 12881, - 12885, 0, 0, 12889, 12892, 0, 0, 12896, 12899, 12903, 12906, 12910, - 12914, 12918, 12922, 12926, 12930, 12934, 12938, 12942, 12946, 12950, - 12954, 12958, 12962, 12966, 12970, 12974, 12978, 0, 12981, 12984, 12988, - 12992, 12996, 12999, 13002, 0, 13005, 0, 0, 0, 13009, 13013, 13017, - 13020, 0, 0, 13023, 13027, 13031, 13036, 13040, 13045, 13049, 13054, - 13059, 0, 0, 13065, 13069, 0, 0, 13074, 13078, 13083, 13087, 0, 0, 0, 0, - 0, 0, 0, 0, 13093, 0, 0, 0, 0, 13099, 13103, 0, 13107, 13111, 13116, - 13121, 13126, 0, 0, 13132, 13136, 13139, 13142, 13145, 13148, 13151, - 13154, 13157, 13160, 13163, 13172, 13181, 13185, 13189, 13195, 13201, - 13207, 13213, 13227, 13234, 13237, 0, 0, 0, 0, 0, 13241, 13247, 13251, 0, - 13255, 13258, 13262, 13265, 13269, 13272, 0, 0, 0, 0, 13276, 13280, 0, 0, - 13284, 13288, 13292, 13295, 13299, 13303, 13307, 13311, 13315, 13319, - 13323, 13327, 13331, 13335, 13339, 13343, 13347, 13351, 13355, 13359, - 13363, 13367, 0, 13370, 13373, 13377, 13381, 13385, 13388, 13391, 0, - 13394, 13398, 0, 13402, 13406, 0, 13410, 13413, 0, 0, 13416, 0, 13420, - 13425, 13429, 13434, 13438, 0, 0, 0, 0, 13443, 13448, 0, 0, 13453, 13458, - 13463, 0, 0, 0, 13467, 0, 0, 0, 0, 0, 0, 0, 13471, 13475, 13479, 13483, - 0, 13487, 0, 0, 0, 0, 0, 0, 0, 13491, 13495, 13498, 13501, 13504, 13507, - 13510, 13513, 13516, 13519, 13522, 13525, 13528, 13531, 13534, 13539, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13543, 13547, 13551, 0, 13555, 13558, - 13562, 13565, 13569, 13572, 13576, 13580, 13584, 0, 13589, 13592, 13596, - 0, 13601, 13604, 13608, 13611, 13615, 13619, 13623, 13627, 13631, 13635, - 13639, 13643, 13647, 13651, 13655, 13659, 13663, 13667, 13671, 13675, - 13679, 13683, 0, 13686, 13689, 13693, 13697, 13701, 13704, 13707, 0, - 13710, 13714, 0, 13718, 13722, 13726, 13730, 13733, 0, 0, 13736, 13740, - 13744, 13749, 13753, 13758, 13762, 13767, 13772, 13778, 0, 13784, 13788, - 13793, 0, 13799, 13803, 13808, 0, 0, 13812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13815, 13820, 13825, 13830, 0, 0, 13836, 13840, 13843, - 13846, 13849, 13852, 13855, 13858, 13861, 13864, 13867, 13871, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13875, 13879, 13883, 0, 13887, 13890, - 13894, 13897, 13901, 13904, 13908, 13912, 0, 0, 13916, 13919, 0, 0, - 13923, 13926, 13930, 13933, 13937, 13941, 13945, 13949, 13953, 13957, - 13961, 13965, 13969, 13973, 13977, 13981, 13985, 13989, 13993, 13997, - 14001, 14005, 0, 14008, 14011, 14015, 14019, 14023, 14026, 14029, 0, - 14032, 14036, 0, 14040, 14044, 14048, 14052, 14055, 0, 0, 14058, 14062, - 14066, 14071, 14075, 14080, 14084, 14089, 14094, 0, 0, 14100, 14104, 0, - 0, 14109, 14113, 14118, 0, 0, 0, 0, 0, 0, 0, 0, 14122, 14128, 0, 0, 0, 0, - 14134, 14138, 0, 14142, 14146, 14151, 14156, 14161, 0, 0, 14167, 14171, - 14174, 14177, 14180, 14183, 14186, 14189, 14192, 14195, 14198, 14201, - 14205, 14211, 14217, 14223, 14229, 14235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14241, 14245, 0, 14249, 14252, 14256, 14259, 14263, 14266, 0, 0, 0, - 14270, 14273, 14277, 0, 14281, 14284, 14288, 14292, 0, 0, 0, 14295, - 14299, 0, 14303, 0, 14307, 14311, 0, 0, 0, 14315, 14319, 0, 0, 0, 14323, - 14326, 14330, 0, 0, 0, 14333, 14336, 14339, 14342, 14346, 14350, 14354, - 14358, 14362, 14366, 14370, 14373, 0, 0, 0, 0, 14376, 14381, 14385, - 14390, 14394, 0, 0, 0, 14399, 14403, 14408, 0, 14413, 14417, 14422, - 14427, 0, 0, 14431, 0, 0, 0, 0, 0, 0, 14434, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14440, 14444, 14447, 14450, 14453, 14456, 14459, 14462, - 14465, 14468, 14471, 14475, 14480, 14485, 14489, 14493, 14497, 14501, - 14505, 14510, 14514, 0, 0, 0, 0, 0, 0, 14517, 14521, 14525, 0, 14529, - 14532, 14536, 14539, 14543, 14546, 14550, 14554, 0, 14558, 14561, 14565, - 0, 14569, 14572, 14576, 14580, 14583, 14587, 14591, 14595, 14599, 14603, - 14607, 14611, 14615, 14619, 14623, 14627, 14631, 14635, 14639, 14643, - 14647, 14651, 14655, 0, 14658, 14661, 14665, 14669, 14673, 14676, 14679, - 14682, 14686, 14690, 0, 14694, 14698, 14702, 14706, 14709, 0, 0, 0, - 14712, 14716, 14721, 14725, 14730, 14734, 14739, 14744, 0, 14750, 14754, - 14759, 0, 14764, 14768, 14773, 14778, 0, 0, 0, 0, 0, 0, 0, 14782, 14786, - 0, 14792, 14796, 0, 0, 0, 0, 0, 0, 14800, 14805, 14810, 14815, 0, 0, - 14821, 14825, 14828, 14831, 14834, 14837, 14840, 14843, 14846, 14849, 0, - 0, 0, 0, 0, 0, 0, 0, 14852, 14865, 14877, 14889, 14901, 14913, 14925, - 14937, 0, 0, 14941, 14945, 0, 14949, 14952, 14956, 14959, 14963, 14966, - 14970, 14974, 0, 14978, 14981, 14985, 0, 14989, 14992, 14996, 15000, - 15003, 15007, 15011, 15015, 15019, 15023, 15027, 15031, 15035, 15039, - 15043, 15047, 15051, 15055, 15059, 15063, 15067, 15071, 15075, 0, 15078, - 15081, 15085, 15089, 15093, 15096, 15099, 15102, 15106, 15110, 0, 15114, - 15118, 15122, 15126, 15129, 0, 0, 15132, 15136, 15140, 15145, 15149, - 15154, 15158, 15163, 15168, 0, 15174, 15178, 15183, 0, 15188, 15192, - 15197, 15202, 0, 0, 0, 0, 0, 0, 0, 15206, 15210, 0, 0, 0, 0, 0, 0, 0, - 15216, 0, 15220, 15225, 15230, 15235, 0, 0, 15241, 15245, 15248, 15251, - 15254, 15257, 15260, 15263, 15266, 15269, 0, 15272, 15276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15280, 15284, 0, 15288, 15291, 15295, - 15298, 15302, 15305, 15309, 15313, 0, 15317, 15320, 15324, 0, 15328, - 15331, 15335, 15339, 15342, 15346, 15350, 15354, 15358, 15362, 15366, - 15370, 15374, 15378, 15382, 15386, 15390, 15394, 15398, 15402, 15406, - 15410, 15414, 15417, 15421, 15424, 15428, 15432, 15436, 15439, 15442, - 15445, 15449, 15453, 15457, 15461, 15465, 15469, 15473, 15476, 15479, 0, - 0, 15483, 15487, 15492, 15496, 15501, 15505, 15510, 15515, 0, 15521, - 15525, 15530, 0, 15535, 15539, 15544, 15549, 15553, 0, 0, 0, 0, 0, 0, 0, - 0, 15558, 0, 0, 0, 0, 0, 0, 0, 0, 15564, 15569, 15574, 15579, 0, 0, - 15585, 15589, 15592, 15595, 15598, 15601, 15604, 15607, 15610, 15613, - 15616, 15620, 15625, 15630, 15636, 15642, 0, 0, 0, 15648, 15652, 15658, - 15664, 15670, 15675, 15681, 0, 0, 15687, 15691, 0, 15695, 15699, 15703, - 15707, 15711, 15715, 15719, 15723, 15727, 15731, 15735, 15739, 15743, - 15747, 15751, 15755, 15759, 15763, 0, 0, 0, 15767, 15773, 15779, 15785, - 15791, 15797, 15803, 15809, 15815, 15821, 15827, 15833, 15841, 15847, - 15853, 15859, 15865, 15871, 15877, 15883, 15889, 15895, 15901, 15907, 0, - 15913, 15919, 15925, 15931, 15937, 15943, 15947, 15953, 15957, 0, 15961, - 0, 0, 15967, 15971, 15977, 15983, 15989, 15993, 15999, 0, 0, 0, 16003, 0, - 0, 0, 0, 16007, 16012, 16019, 16026, 16033, 16040, 0, 16047, 0, 16054, - 16059, 16064, 16071, 16078, 16087, 16098, 16107, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16112, 16119, 16126, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16131, 16137, 16143, 16149, 16155, 16161, 16167, 16173, - 16179, 16185, 16191, 16197, 16203, 16209, 16215, 16221, 16227, 16233, - 16239, 16245, 16251, 16257, 16263, 16269, 16275, 16281, 16287, 16293, - 16299, 16305, 16311, 16317, 16323, 16328, 16334, 16340, 16344, 16350, - 16354, 16360, 16366, 16372, 16378, 16384, 16390, 16395, 16401, 16405, - 16410, 16416, 16422, 16428, 16433, 16439, 16445, 16451, 16456, 16462, 0, - 0, 0, 0, 16466, 16472, 16477, 16483, 16488, 16496, 16504, 16508, 16512, - 16516, 16522, 16528, 16534, 16540, 16544, 16548, 16552, 16556, 16560, - 16563, 16566, 16569, 16572, 16575, 16578, 16581, 16584, 16587, 16591, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33057, 33065, 33073, 33081, 33089, 33099, + 33109, 33119, 0, 0, 0, 0, 0, 0, 0, 0, 33129, 33134, 33139, 33144, 33149, + 33158, 33169, 33178, 33189, 33195, 33208, 33214, 33221, 33228, 33233, + 33239, 33245, 33256, 33265, 33272, 33279, 33288, 33295, 33304, 33314, + 33324, 33331, 33338, 33345, 33355, 33360, 33368, 33374, 33382, 33391, + 33396, 33403, 33409, 33414, 0, 33419, 33425, 0, 0, 0, 0, 0, 0, 33432, + 33437, 33443, 33449, 33457, 33463, 33469, 33475, 33480, 33487, 33492, + 33498, 33504, 33512, 33518, 33526, 33531, 33538, 33544, 33552, 33560, + 33566, 33572, 33579, 33586, 33592, 33599, 33605, 33611, 33616, 33622, + 33630, 33638, 33644, 33650, 33656, 33662, 33670, 33674, 33680, 33686, + 33692, 33698, 33704, 33710, 33714, 33719, 33724, 33731, 33736, 33740, + 33746, 33751, 33756, 33760, 33765, 33770, 33774, 33779, 33784, 33791, + 33795, 33800, 33805, 33809, 33814, 33818, 33823, 33827, 33832, 33837, + 33843, 33848, 33853, 33857, 33862, 33868, 33875, 33880, 33885, 33890, + 33895, 33900, 33904, 33910, 33917, 33924, 33929, 33934, 33938, 33944, + 33950, 33955, 33960, 33965, 33971, 33976, 33982, 33987, 33993, 33999, + 34005, 34012, 34019, 34026, 34033, 34040, 34047, 34052, 34061, 34071, + 34081, 34091, 34101, 34111, 34121, 34134, 34144, 34154, 34164, 34170, + 34175, 34182, 34190, 34198, 34205, 34212, 34219, 34226, 34234, 34243, + 34252, 34261, 34270, 34279, 34288, 34297, 34306, 34315, 34324, 34333, + 34342, 34351, 34360, 34368, 34377, 34388, 34396, 34406, 34418, 34427, + 34436, 34446, 34455, 34463, 34472, 34478, 34483, 34491, 34496, 34504, + 34509, 34518, 34524, 34530, 34537, 34542, 34547, 34555, 34563, 34572, + 34581, 34586, 34593, 34603, 34611, 34620, 34626, 34632, 34637, 34644, + 34649, 34658, 34663, 34668, 34673, 34680, 34686, 34691, 34700, 34708, + 34713, 34718, 34725, 34732, 34736, 34740, 34743, 34746, 34749, 34752, + 34755, 34758, 34765, 34768, 34771, 34776, 34780, 34784, 34788, 34792, + 34796, 34806, 34812, 34818, 34824, 34832, 34840, 34846, 34852, 34859, + 34865, 34870, 34876, 34883, 34889, 34896, 34902, 34910, 34915, 34921, + 34927, 34933, 34939, 34945, 34951, 34957, 34969, 34979, 34985, 34991, + 35001, 35007, 35015, 35023, 35031, 0, 0, 0, 0, 0, 0, 35036, 35043, 35050, + 35055, 35064, 35072, 35080, 35087, 35094, 35101, 35108, 35116, 35124, + 35134, 35144, 35152, 35160, 35168, 35176, 35185, 35194, 35202, 35210, + 35219, 35228, 35238, 35248, 35257, 35266, 35274, 35282, 35290, 35298, + 35308, 35318, 35326, 35334, 35342, 35350, 35358, 35366, 35374, 35382, + 35390, 35398, 35406, 35414, 35423, 35432, 35441, 35450, 35460, 35470, + 35477, 35484, 35492, 35500, 35509, 35518, 35526, 35534, 35546, 35558, + 35567, 35576, 35585, 35594, 35601, 35608, 35616, 35624, 35632, 35640, + 35648, 35656, 35664, 35672, 35681, 35690, 35699, 35708, 35717, 35726, + 35736, 35746, 35756, 35766, 35775, 35784, 35791, 35798, 35806, 35814, + 35822, 35830, 35838, 35846, 35858, 35870, 35879, 35888, 35896, 35904, + 35912, 35920, 35931, 35942, 35953, 35964, 35976, 35988, 35996, 36004, + 36012, 36020, 36029, 36038, 36047, 36056, 36064, 36072, 36080, 36088, + 36096, 36104, 36113, 36122, 36132, 36142, 36150, 36158, 36166, 36174, + 36182, 36190, 36197, 36204, 36212, 36220, 36228, 36236, 36244, 36252, + 36260, 36268, 36276, 36284, 36292, 36300, 36308, 36316, 36324, 36332, + 36341, 36350, 36359, 36367, 36376, 36385, 36394, 36403, 36413, 36422, + 36428, 36433, 36440, 36447, 36455, 36463, 36472, 36481, 36491, 36501, + 36512, 36523, 36533, 36543, 36553, 36563, 36572, 36581, 36591, 36601, + 36612, 36623, 36633, 36643, 36653, 36663, 36670, 36677, 36685, 36693, + 36700, 36707, 36716, 36725, 36735, 36745, 36756, 36767, 36777, 36787, + 36797, 36807, 36816, 36825, 36833, 36841, 36848, 36855, 36863, 36871, + 36880, 36889, 36899, 36909, 36920, 36931, 36941, 36951, 36961, 36971, + 36980, 36989, 36999, 37009, 37020, 37031, 37041, 37051, 37061, 37071, + 37078, 37085, 37093, 37101, 37110, 37119, 37129, 37139, 37150, 37161, + 37171, 37181, 37191, 37201, 37209, 37217, 37225, 37233, 37242, 37251, + 37259, 37267, 37274, 37281, 37288, 37295, 37303, 37311, 37319, 37327, + 37338, 37349, 37360, 37371, 37382, 37393, 37401, 37409, 37420, 37431, + 37442, 37453, 37464, 37475, 37483, 37491, 37502, 37513, 37524, 0, 0, + 37535, 37543, 37551, 37562, 37573, 37584, 0, 0, 37595, 37603, 37611, + 37622, 37633, 37644, 37655, 37666, 37677, 37685, 37693, 37704, 37715, + 37726, 37737, 37748, 37759, 37767, 37775, 37786, 37797, 37808, 37819, + 37830, 37841, 37849, 37857, 37868, 37879, 37890, 37901, 37912, 37923, + 37931, 37939, 37950, 37961, 37972, 0, 0, 37983, 37991, 37999, 38010, + 38021, 38032, 0, 0, 38043, 38051, 38059, 38070, 38081, 38092, 38103, + 38114, 0, 38125, 0, 38133, 0, 38144, 0, 38155, 38166, 38174, 38182, + 38193, 38204, 38215, 38226, 38237, 38248, 38256, 38264, 38275, 38286, + 38297, 38308, 38319, 38330, 38338, 38346, 38354, 38362, 38370, 38378, + 38386, 38394, 38402, 38410, 38418, 38426, 38434, 0, 0, 38442, 38453, + 38464, 38478, 38492, 38506, 38520, 38534, 38548, 38559, 38570, 38584, + 38598, 38612, 38626, 38640, 38654, 38665, 38676, 38690, 38704, 38718, + 38732, 38746, 38760, 38771, 38782, 38796, 38810, 38824, 38838, 38852, + 38866, 38877, 38888, 38902, 38916, 38930, 38944, 38958, 38972, 38983, + 38994, 39008, 39022, 39036, 39050, 39064, 39078, 39086, 39094, 39105, + 39113, 0, 39124, 39132, 39143, 39151, 39159, 39167, 39175, 39183, 39186, + 39189, 39192, 39195, 39201, 39212, 39220, 0, 39231, 39239, 39250, 39258, + 39266, 39274, 39282, 39290, 39296, 39302, 39308, 39316, 39324, 39335, 0, + 0, 39346, 39354, 39365, 39373, 39381, 39389, 0, 39397, 39403, 39409, + 39415, 39423, 39431, 39442, 39453, 39461, 39469, 39477, 39488, 39496, + 39504, 39512, 39520, 39528, 39534, 39540, 0, 0, 39543, 39554, 39562, 0, + 39573, 39581, 39592, 39600, 39608, 39616, 39624, 39632, 39635, 0, 39638, + 39642, 39646, 39650, 39654, 39658, 39662, 39666, 39670, 39674, 39678, + 39682, 39688, 39694, 39700, 39703, 39706, 39708, 39712, 39716, 39720, + 39724, 39726, 39730, 39734, 39740, 39746, 39753, 39760, 39765, 39770, + 39776, 39782, 39784, 39787, 39789, 39793, 39797, 39801, 39804, 39808, + 39812, 39816, 39820, 39824, 39830, 39834, 39838, 39844, 39849, 39856, + 39858, 39861, 39865, 39869, 39874, 39880, 39882, 39891, 39900, 39903, + 39907, 39909, 39911, 39913, 39916, 39922, 39924, 39928, 39932, 39939, + 39946, 39950, 39955, 39960, 39965, 39970, 39974, 39978, 39981, 39985, + 39989, 39996, 40001, 40005, 40009, 40014, 40018, 40022, 40027, 40032, + 40036, 40040, 40044, 40046, 40051, 40056, 40060, 40064, 40068, 40072, 0, + 40076, 40080, 40084, 40090, 40096, 40102, 40108, 40115, 40122, 40127, + 40132, 40136, 0, 0, 40142, 40145, 40148, 40151, 40154, 40157, 40160, + 40164, 40168, 40173, 40178, 40183, 40190, 40194, 40197, 40200, 40203, + 40206, 40209, 40212, 40215, 40218, 40221, 40225, 40229, 40234, 40239, 0, + 40244, 40250, 40256, 40262, 40269, 40276, 40283, 40290, 40296, 40303, + 40310, 40317, 40323, 0, 0, 0, 40330, 40333, 40336, 40339, 40344, 40347, + 40350, 40353, 40356, 40359, 40362, 40366, 40369, 40372, 40375, 40378, + 40381, 40386, 40389, 40392, 40395, 40398, 40401, 40406, 40409, 40412, + 40417, 40422, 40426, 40429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 40432, 40437, 40442, 40449, 40457, 40462, 40467, 40471, 40475, + 40480, 40487, 40494, 40498, 40503, 40508, 40513, 40518, 40525, 40530, + 40535, 40540, 40549, 40556, 40563, 40567, 40572, 40578, 40583, 40590, + 40598, 40606, 40610, 40614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40618, 40622, 40630, 40634, 40638, 40643, 40647, 40651, 40655, 40657, + 40661, 40665, 40669, 40674, 40678, 40682, 40690, 40693, 40697, 40700, + 40703, 40709, 40713, 40716, 40722, 40726, 40730, 40734, 40737, 40741, + 40744, 40748, 40750, 40753, 40756, 40760, 40762, 40766, 40769, 40772, + 40777, 40782, 40788, 40791, 40794, 40798, 40803, 40806, 40809, 40812, + 40816, 40820, 40824, 40827, 40829, 40832, 40835, 40838, 40842, 40847, + 40850, 40854, 40858, 40862, 40866, 40871, 40876, 40880, 40885, 40890, + 40895, 40900, 40904, 40908, 40913, 40917, 40920, 40923, 40925, 40929, + 40935, 40942, 40949, 40956, 40963, 40970, 40977, 40984, 40991, 40999, + 41006, 41014, 41021, 41028, 41036, 41044, 41049, 41054, 41059, 41064, + 41069, 41074, 41079, 41084, 41089, 41094, 41100, 41106, 41112, 41118, + 41125, 41133, 41140, 41146, 41152, 41158, 41164, 41170, 41176, 41182, + 41188, 41194, 41201, 41208, 41215, 41222, 41230, 41239, 41247, 41258, + 41266, 41274, 41283, 41290, 41299, 41308, 41316, 41325, 0, 0, 0, 0, 0, 0, + 41333, 41335, 41337, 41339, 41341, 41344, 41347, 41351, 41355, 41359, + 41363, 41367, 41371, 41375, 41379, 41384, 41389, 41394, 41399, 41404, + 41409, 41414, 41419, 41424, 41429, 41435, 41439, 41443, 41448, 41453, + 41458, 41463, 41467, 41474, 41481, 41488, 41495, 41502, 41509, 41516, + 41523, 41531, 41543, 41550, 41557, 41564, 41571, 41578, 41585, 41592, + 41599, 41606, 41613, 41618, 41624, 41629, 41634, 41639, 41644, 41649, + 41656, 41663, 41668, 41674, 41679, 41682, 41685, 41688, 41691, 41695, + 41699, 41704, 41709, 41714, 41719, 41723, 41727, 41731, 41735, 41740, + 41745, 41749, 41753, 41757, 41761, 41766, 41771, 41774, 41777, 41780, + 41783, 41789, 41796, 41806, 41816, 41820, 41828, 41835, 41843, 41851, + 41855, 41861, 41867, 41871, 41876, 41881, 41887, 41893, 41899, 41906, + 41910, 41914, 41919, 41922, 41924, 41928, 41932, 41940, 41944, 41946, + 41948, 41952, 41960, 41965, 41971, 41981, 41988, 41993, 41997, 42001, + 42005, 42008, 42011, 42014, 42018, 42022, 42026, 42030, 42034, 42037, + 42041, 42045, 42048, 42050, 42053, 42055, 42059, 42063, 42065, 42071, + 42074, 42079, 42083, 42087, 42089, 42091, 42093, 42096, 42100, 42104, + 42108, 42112, 42116, 42122, 42128, 42130, 42132, 42134, 42136, 42139, + 42141, 42145, 42147, 42151, 42155, 42160, 42164, 42168, 42172, 42176, + 42180, 42186, 42190, 42200, 42210, 42214, 42220, 42227, 42231, 42235, + 42238, 42243, 42247, 42253, 42257, 42270, 42279, 42283, 42287, 42293, + 42297, 42300, 42302, 42305, 42309, 42313, 42320, 42324, 42328, 42332, + 42335, 42340, 42345, 42351, 42357, 42362, 42367, 42375, 42383, 42387, + 42391, 42393, 42398, 42402, 42406, 42414, 42422, 42429, 42436, 42445, + 42454, 42460, 42466, 42474, 42482, 42484, 42486, 42492, 42498, 42505, + 42512, 42518, 42524, 42528, 42532, 42539, 42546, 42553, 42560, 42570, + 42580, 42588, 42596, 42598, 42602, 42606, 42611, 42616, 42624, 42632, + 42635, 42638, 42641, 42644, 42647, 42652, 42656, 42661, 42666, 42669, + 42672, 42675, 42678, 42681, 42685, 42688, 42691, 42694, 42697, 42699, + 42701, 42703, 42705, 42713, 42721, 42727, 42731, 42737, 42747, 42753, + 42759, 42765, 42773, 42782, 42794, 42798, 42802, 42804, 42810, 42812, + 42814, 42816, 42818, 42824, 42827, 42833, 42839, 42843, 42847, 42851, + 42854, 42858, 42862, 42864, 42873, 42882, 42887, 42892, 42898, 42904, + 42910, 42913, 42916, 42919, 42922, 42924, 42929, 42934, 42939, 42945, + 42951, 42960, 42969, 42976, 42983, 42990, 42997, 43007, 43017, 43027, + 43037, 43047, 43057, 43066, 43075, 43084, 43093, 43101, 43113, 43124, + 43140, 43143, 43148, 43154, 43160, 43167, 43181, 43196, 43202, 43208, + 43215, 43221, 43229, 43235, 43248, 43262, 43267, 43273, 43281, 43284, + 43287, 43289, 43292, 43295, 43297, 43299, 43303, 43306, 43309, 43312, + 43315, 43320, 43325, 43330, 43335, 43340, 43343, 43345, 43347, 43349, + 43353, 43357, 43361, 43367, 43371, 43373, 43375, 43380, 43385, 43390, + 43395, 43400, 43405, 43407, 43409, 43418, 43422, 43430, 43439, 43441, + 43446, 43451, 43459, 43463, 43465, 43469, 43471, 43475, 43479, 43483, + 43485, 43487, 43489, 43496, 43505, 43514, 43523, 43532, 43541, 43550, + 43559, 43568, 43576, 43584, 43593, 43602, 43611, 43620, 43628, 43636, + 43645, 43654, 43663, 43673, 43682, 43692, 43701, 43711, 43719, 43728, + 43738, 43747, 43757, 43766, 43776, 43784, 43793, 43802, 43811, 43820, + 43829, 43838, 43848, 43857, 43866, 43875, 43885, 43894, 43903, 43912, + 43921, 43931, 43941, 43950, 43959, 43967, 43976, 43983, 43992, 44001, + 44012, 44021, 44031, 44041, 44048, 44055, 44062, 44071, 44080, 44089, + 44098, 44105, 44110, 44118, 44124, 44127, 44135, 44138, 44143, 44148, + 44151, 44154, 44162, 44165, 44170, 44173, 44180, 44185, 44193, 44196, + 44199, 44202, 44207, 44212, 44215, 44218, 44226, 44229, 44236, 44243, + 44247, 44251, 44256, 44261, 44267, 44272, 44278, 44284, 44289, 44295, + 44303, 44309, 44317, 44325, 44331, 44339, 44347, 44356, 44364, 44370, + 44378, 44387, 44395, 44399, 44404, 44418, 44432, 44436, 44440, 44444, + 44448, 44458, 44462, 44467, 44472, 44477, 44482, 44487, 44492, 44502, + 44512, 44520, 44530, 44540, 44548, 44558, 44568, 44576, 44586, 44596, + 44604, 44612, 44622, 44632, 44635, 44638, 44641, 44646, 44650, 44656, + 44663, 44670, 44678, 44685, 44689, 44693, 44697, 44701, 44703, 44707, + 44711, 44716, 44721, 44728, 44735, 44738, 44745, 44747, 44749, 44753, + 44757, 44762, 44768, 44774, 44780, 44786, 44795, 44804, 44813, 44817, + 44819, 44823, 44830, 44837, 44844, 44851, 44858, 44861, 44866, 0, 0, 0, + 0, 0, 44872, 44876, 44883, 44890, 44897, 44904, 44908, 44912, 44916, + 44920, 44925, 44931, 44936, 44942, 44948, 44954, 44960, 44968, 44975, + 44982, 44989, 44996, 45001, 45007, 45016, 45020, 45027, 45031, 45035, + 45041, 45047, 45053, 45059, 45063, 45067, 45070, 45074, 45078, 45085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16595, 16600, 0, 16607, 0, 0, 16614, - 16619, 0, 16624, 0, 0, 16631, 0, 0, 0, 0, 0, 0, 16636, 16641, 16645, - 16652, 0, 16659, 16664, 16669, 16674, 16681, 16688, 16695, 0, 16702, - 16707, 16712, 0, 16719, 0, 16726, 0, 0, 16731, 16738, 0, 16745, 16749, - 16756, 16760, 16765, 16773, 16779, 16785, 16790, 16796, 16802, 16808, - 16813, 0, 16819, 16827, 16834, 0, 0, 16841, 16846, 16852, 16857, 16863, - 0, 16869, 0, 16875, 16882, 16889, 16896, 16903, 16908, 0, 0, 16912, - 16917, 16921, 16925, 16929, 16933, 16937, 16941, 16945, 16949, 0, 0, - 16953, 16959, 16965, 16972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16979, 16983, 16994, - 17009, 17024, 17034, 17045, 17058, 17069, 17075, 17083, 17093, 17099, - 17107, 17111, 17117, 17123, 17131, 17141, 17149, 17162, 17168, 17176, - 17184, 17196, 17203, 17211, 17219, 17227, 17235, 17243, 17251, 17261, - 17265, 17268, 17271, 17274, 17277, 17280, 17283, 17286, 17289, 17292, - 17296, 17300, 17304, 17308, 17312, 17316, 17320, 17324, 17328, 17333, - 17339, 17349, 17363, 17373, 17379, 17385, 17393, 17401, 17409, 17417, - 17423, 17429, 17432, 17436, 17440, 17444, 17448, 17452, 17456, 0, 17460, - 17464, 17468, 17472, 17476, 17480, 17484, 17488, 17492, 17496, 17500, - 17503, 17506, 17510, 17514, 17518, 17521, 17525, 17529, 17533, 17537, - 17541, 17545, 17549, 17553, 17556, 17559, 17563, 17567, 17571, 17574, - 17577, 17580, 17584, 17589, 17593, 0, 0, 0, 0, 17597, 17602, 17606, - 17611, 17615, 17620, 17625, 17631, 17636, 17642, 17646, 17651, 17655, - 17660, 17670, 17676, 17682, 17689, 17699, 17705, 17709, 17713, 17719, - 17725, 17733, 17739, 17747, 17755, 17763, 17773, 17781, 17791, 17796, - 17802, 17808, 17814, 17820, 17826, 17832, 0, 17838, 17844, 17850, 17856, - 17862, 17868, 17874, 17880, 17886, 17892, 17898, 17903, 17908, 17914, - 17920, 17926, 17931, 17937, 17943, 17949, 17955, 17961, 17967, 17973, - 17979, 17984, 17989, 17995, 18001, 18007, 18012, 18017, 18022, 18028, - 18036, 18043, 0, 18050, 18057, 18070, 18077, 18084, 18092, 18100, 18106, - 18112, 18118, 18128, 18133, 18139, 18149, 18159, 0, 18169, 18179, 18187, - 18199, 18211, 18217, 18231, 18246, 18251, 18256, 18264, 18272, 18280, 0, + 45092, 45095, 45099, 45103, 45109, 45115, 45121, 45129, 45136, 45140, + 45148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 45153, 45156, 45159, 45162, 45165, 45168, 45171, 45174, 45177, 45180, + 45184, 45188, 45192, 45196, 45200, 45204, 45208, 45212, 45216, 45220, + 45224, 45227, 45230, 45233, 45236, 45239, 45242, 45245, 45248, 45251, + 45255, 45259, 45263, 45267, 45271, 45275, 45279, 45283, 45287, 45291, + 45295, 45301, 45307, 45313, 45320, 45327, 45334, 45341, 45348, 45355, + 45362, 45369, 45376, 45383, 45390, 45397, 45404, 45411, 45418, 45425, + 45432, 45437, 45443, 45449, 45455, 45460, 45466, 45472, 45478, 45483, + 45489, 45495, 45500, 45506, 45512, 45517, 45523, 45529, 45534, 45539, + 45545, 45550, 45556, 45562, 45568, 45574, 45580, 45585, 45591, 45597, + 45603, 45608, 45614, 45620, 45626, 45631, 45637, 45643, 45648, 45654, + 45660, 45665, 45671, 45677, 45682, 45687, 45693, 45698, 45704, 45710, + 45716, 45722, 45728, 45733, 45739, 45745, 45751, 45756, 45762, 45768, + 45774, 45779, 45785, 45791, 45796, 45802, 45808, 45813, 45819, 45825, + 45830, 45835, 45841, 45846, 45852, 45858, 45864, 45870, 45876, 45880, + 45885, 45890, 45895, 45900, 45905, 45910, 45915, 45920, 45925, 45930, + 45934, 45938, 45942, 45946, 45950, 45954, 45958, 45962, 45966, 45971, + 45976, 45981, 45986, 45991, 45996, 46005, 46014, 46023, 46032, 46041, + 46050, 46059, 46068, 46075, 46083, 46091, 46098, 46105, 46113, 46121, + 46128, 46135, 46143, 46151, 46158, 46165, 46173, 46181, 46188, 46195, + 46203, 46212, 46221, 46229, 46238, 46247, 46254, 46261, 46269, 46278, + 46287, 46295, 46304, 46313, 46320, 46327, 46336, 46345, 46353, 46361, + 46370, 46379, 46386, 46393, 46402, 46411, 46419, 46427, 46436, 46445, + 46452, 46459, 46468, 46477, 46485, 46494, 46503, 46511, 46521, 46531, + 46541, 46551, 46560, 46569, 46578, 46587, 46594, 46602, 46610, 46618, + 46626, 46631, 46636, 46645, 46653, 46660, 46669, 46677, 46684, 46693, + 46701, 46708, 46717, 46725, 46732, 46741, 46749, 46756, 46765, 46773, + 46780, 46789, 46797, 46804, 46813, 46821, 46828, 46837, 46845, 46852, + 46861, 46870, 46879, 46888, 46902, 46916, 46923, 46928, 46933, 46938, + 46943, 46948, 46953, 46958, 46963, 46971, 46979, 46987, 46995, 47000, + 47007, 47014, 47021, 47026, 47034, 47041, 47049, 47053, 47060, 47066, + 47073, 47077, 47083, 47089, 47095, 47099, 47102, 47106, 47110, 47117, + 47123, 47129, 47135, 47141, 47155, 47165, 47179, 47193, 47199, 47209, + 47223, 47226, 47229, 47236, 47244, 47249, 47254, 47262, 47274, 47286, + 47294, 47298, 47302, 47305, 47308, 47312, 47316, 47319, 47322, 47327, + 47332, 47338, 47344, 47349, 47354, 47360, 47366, 47371, 47376, 47381, + 47386, 47392, 47398, 47403, 47408, 47414, 47420, 47425, 47430, 47433, + 47436, 47445, 47447, 47449, 47452, 47456, 47462, 47464, 47467, 47474, + 47481, 47489, 47497, 47507, 47521, 47526, 47531, 47535, 47540, 47548, + 47556, 47565, 47574, 47583, 47592, 47597, 47602, 47608, 47614, 47620, + 47626, 47629, 47635, 47641, 47651, 47661, 47669, 47677, 47686, 47695, + 47699, 47707, 47715, 47723, 47731, 47740, 47749, 47758, 47767, 47772, + 47777, 47782, 47787, 47792, 47798, 47804, 47809, 47815, 47817, 47819, + 47821, 47823, 47826, 47829, 47831, 47833, 47835, 47839, 47843, 47845, + 47847, 47850, 47853, 47857, 47863, 47869, 47871, 47878, 47882, 47887, + 47892, 47894, 47904, 47910, 47916, 47922, 47928, 47934, 47940, 47945, + 47948, 47951, 47954, 47956, 47958, 47962, 47966, 47971, 47976, 47981, + 47984, 47988, 47993, 47996, 48000, 48005, 48010, 48015, 48020, 48025, + 48030, 48035, 48040, 48045, 48050, 48055, 48060, 48066, 48072, 48078, + 48080, 48083, 48085, 48088, 48090, 48092, 48094, 48096, 48098, 48100, + 48102, 48104, 48106, 48108, 48110, 48112, 48114, 48116, 48118, 48120, + 48122, 48127, 48132, 48137, 48142, 48147, 48152, 48157, 48162, 48167, + 48172, 48177, 48182, 48187, 48192, 48197, 48202, 48207, 48212, 48217, + 48222, 48226, 48230, 48234, 48240, 48246, 48251, 48256, 48261, 48267, + 48273, 48278, 48286, 48294, 48302, 48310, 48318, 48326, 48334, 48342, + 48348, 48353, 48358, 48363, 48366, 48370, 48374, 48378, 48382, 48386, + 48390, 48397, 48404, 48412, 48420, 48425, 48430, 48437, 48444, 48451, + 48458, 48461, 48464, 48469, 48471, 48475, 48480, 48482, 48484, 48486, + 48488, 48493, 48496, 48498, 48503, 48510, 48517, 48520, 48524, 48529, + 48534, 48542, 48548, 48554, 48566, 48573, 48580, 48585, 48590, 48596, + 48599, 48602, 48607, 48609, 48613, 48615, 48617, 48619, 48621, 48623, + 48625, 48630, 48632, 48634, 48636, 48638, 48642, 48644, 48647, 48652, + 48657, 48662, 48667, 48673, 48679, 48681, 48684, 48691, 48697, 48703, + 48710, 48714, 48718, 48720, 48722, 48726, 48732, 48737, 48739, 48743, + 48752, 48760, 48768, 48774, 48780, 48785, 48791, 48796, 48799, 48813, + 48816, 48821, 48826, 48832, 48842, 48844, 48850, 48856, 48860, 48867, + 48871, 48873, 48875, 48879, 48885, 48890, 48896, 48898, 48904, 48906, + 48912, 48914, 48916, 48921, 48923, 48927, 48932, 48934, 48939, 48944, + 48948, 48955, 48965, 48970, 48976, 48979, 48985, 48988, 48993, 48998, + 49002, 49004, 49006, 49010, 49014, 49018, 49022, 49027, 49029, 49034, + 49037, 49040, 49043, 49047, 49051, 49056, 49060, 49065, 49070, 49074, + 49080, 49087, 49090, 49096, 49101, 49105, 49110, 49116, 49122, 49129, + 49135, 49142, 49149, 49151, 49158, 49162, 49169, 49175, 49180, 49186, + 49190, 49195, 49198, 49204, 49210, 49217, 49225, 49232, 49241, 49251, + 49258, 49264, 49268, 49276, 49281, 49290, 49293, 49296, 49305, 49316, + 49323, 49325, 49331, 49336, 49338, 49341, 49345, 49353, 49362, 49365, + 49370, 49375, 49383, 49391, 49399, 49407, 49413, 49419, 49425, 49433, + 49438, 49441, 49445, 49448, 49459, 49469, 49479, 49488, 49499, 49509, + 49518, 49524, 49532, 49536, 49544, 49548, 49556, 49563, 49570, 49579, + 49588, 49598, 49608, 49618, 49628, 49637, 49646, 49656, 49666, 49675, + 49684, 49690, 49696, 49702, 49708, 49714, 49720, 49726, 49732, 49738, + 49745, 49751, 49757, 49763, 49769, 49775, 49781, 49787, 49793, 49799, + 49806, 49813, 49820, 49827, 49834, 49841, 49848, 49855, 49862, 49869, + 49877, 49882, 49885, 49889, 49893, 49898, 49901, 49906, 49912, 49917, + 49921, 49926, 49932, 49939, 49942, 49949, 49956, 49960, 49968, 49976, + 49981, 49987, 49992, 49997, 50004, 50011, 50019, 50027, 50036, 50040, + 50049, 50054, 50058, 50064, 50068, 50074, 50081, 50086, 50093, 50097, + 50102, 50106, 50111, 50115, 50120, 50125, 50134, 50136, 50140, 50144, + 50151, 50158, 50164, 50172, 50178, 50184, 50189, 50192, 50197, 50202, + 50207, 50215, 50219, 50226, 50234, 50242, 50247, 50252, 50258, 50263, + 50268, 50274, 50279, 50282, 50286, 50290, 50297, 50306, 50311, 50320, + 50329, 50335, 50341, 50346, 50351, 50356, 50361, 50367, 50373, 50381, + 50389, 50395, 50401, 50405, 50409, 50416, 50423, 50429, 50432, 50435, + 50439, 50443, 50447, 50452, 50458, 50464, 50471, 50478, 50483, 50487, + 50491, 50495, 50499, 50503, 50507, 50511, 50515, 50519, 50523, 50527, + 50531, 50535, 50539, 50543, 50547, 50551, 50555, 50559, 50563, 50567, + 50571, 50575, 50579, 50583, 50587, 50591, 50595, 50599, 50603, 50607, + 50611, 50615, 50619, 50623, 50627, 50631, 50635, 50639, 50643, 50647, + 50651, 50655, 50659, 50663, 50667, 50671, 50675, 50679, 50683, 50687, + 50691, 50695, 50699, 50703, 50707, 50711, 50715, 50719, 50723, 50727, + 50731, 50735, 50739, 50743, 50747, 50751, 50755, 50759, 50763, 50767, + 50771, 50775, 50779, 50783, 50787, 50791, 50795, 50799, 50803, 50807, + 50811, 50815, 50819, 50823, 50827, 50831, 50835, 50839, 50843, 50847, + 50851, 50855, 50859, 50863, 50867, 50871, 50875, 50879, 50883, 50887, + 50891, 50895, 50899, 50903, 50907, 50911, 50915, 50919, 50923, 50927, + 50931, 50935, 50939, 50943, 50947, 50951, 50955, 50959, 50963, 50967, + 50971, 50975, 50979, 50983, 50987, 50991, 50995, 50999, 51003, 51007, + 51011, 51015, 51019, 51023, 51027, 51031, 51035, 51039, 51043, 51047, + 51051, 51055, 51059, 51063, 51067, 51071, 51075, 51079, 51083, 51087, + 51091, 51095, 51099, 51103, 51107, 51111, 51115, 51119, 51123, 51127, + 51131, 51135, 51139, 51143, 51147, 51151, 51155, 51159, 51163, 51167, + 51171, 51175, 51179, 51183, 51187, 51191, 51195, 51199, 51203, 51207, + 51211, 51215, 51219, 51223, 51227, 51231, 51235, 51239, 51243, 51247, + 51251, 51255, 51259, 51263, 51267, 51271, 51275, 51279, 51283, 51287, + 51291, 51295, 51299, 51303, 51307, 51311, 51315, 51319, 51323, 51327, + 51331, 51335, 51339, 51343, 51347, 51351, 51355, 51359, 51363, 51367, + 51371, 51375, 51379, 51383, 51387, 51391, 51395, 51399, 51403, 51407, + 51411, 51415, 51419, 51423, 51427, 51431, 51435, 51439, 51443, 51447, + 51451, 51455, 51459, 51463, 51467, 51471, 51475, 51479, 51483, 51487, + 51491, 51495, 51499, 51503, 51507, 51514, 51522, 51528, 51534, 51541, + 51548, 51554, 51560, 51565, 51570, 51574, 51578, 51583, 51588, 51594, + 51600, 51608, 51615, 51620, 51625, 51633, 51642, 51649, 51659, 51670, + 51673, 51676, 51680, 51684, 51691, 51698, 51709, 51720, 51728, 51736, + 51742, 51748, 51754, 51760, 51769, 51778, 51787, 51796, 51806, 51816, + 51826, 51836, 51846, 51856, 51866, 51876, 51885, 51895, 51905, 51915, + 51925, 51932, 51939, 51946, 51953, 51963, 51973, 51981, 51989, 51996, + 52003, 52010, 52017, 52024, 52029, 52034, 52040, 52048, 52057, 52065, + 52073, 52081, 52089, 52097, 52105, 52113, 52121, 52130, 52139, 52148, + 52157, 52166, 52175, 52184, 52193, 52202, 52211, 52220, 52229, 52238, + 52247, 52256, 52265, 52279, 52294, 52308, 52323, 52337, 52351, 52365, + 52379, 52389, 52400, 52410, 52421, 52436, 52451, 52459, 52465, 52472, + 52479, 52486, 52493, 52498, 52504, 52509, 52514, 52520, 52525, 52530, + 52535, 52540, 52545, 52552, 52558, 52566, 52571, 52576, 52580, 52584, + 52592, 52600, 52608, 52616, 52623, 52630, 52643, 52656, 52669, 52682, + 52690, 52698, 52704, 52710, 52717, 52724, 52731, 52738, 52742, 52747, + 52755, 52763, 52771, 52778, 52782, 52790, 52798, 52801, 52805, 52810, + 52817, 52825, 52833, 52853, 52873, 52893, 52913, 52933, 52953, 52973, + 52993, 52999, 53006, 53015, 53023, 53031, 53036, 53039, 53042, 53047, + 53050, 53069, 53076, 53082, 53088, 53092, 53095, 53098, 53101, 53113, + 53126, 53133, 53140, 53143, 53147, 53150, 53155, 53160, 53165, 53171, + 53180, 53187, 53194, 53202, 53209, 53216, 53219, 53225, 53231, 53234, + 53237, 53242, 53247, 53253, 53259, 53263, 53268, 53275, 53279, 53285, + 53289, 53293, 53301, 53313, 53322, 53326, 53328, 53337, 53346, 53352, + 53355, 53361, 53367, 53372, 53377, 53382, 53387, 53392, 53397, 53399, + 53405, 53410, 53417, 53421, 53427, 53430, 53434, 53441, 53448, 53450, + 53452, 53458, 53464, 53470, 53479, 53488, 53495, 53502, 53508, 53515, + 53520, 53525, 53530, 53536, 53542, 53547, 53554, 53558, 53562, 53575, + 53588, 53600, 53609, 53615, 53622, 53627, 53632, 53637, 53642, 53647, + 53649, 53656, 53664, 53672, 53680, 53687, 53695, 53701, 53706, 53712, + 53718, 53724, 53731, 53737, 53745, 53753, 53761, 53769, 53777, 53783, + 53789, 53798, 53802, 53811, 53820, 53829, 53837, 53841, 53847, 53854, + 53861, 53865, 53871, 53879, 53885, 53890, 53896, 53901, 53906, 53913, + 53920, 53925, 53930, 53938, 53946, 53956, 53966, 53973, 53980, 53984, + 53988, 54000, 54006, 54013, 54018, 54023, 54030, 54037, 54043, 54049, + 54059, 54067, 54076, 54083, 54091, 54098, 54104, 54111, 54117, 54125, + 54133, 54141, 54149, 54155, 54160, 54169, 54179, 54186, 54195, 54201, + 54206, 54211, 54221, 54228, 54234, 54240, 54248, 54253, 54260, 54267, + 54278, 54285, 54292, 54299, 54306, 54313, 54321, 54329, 54342, 54355, + 54367, 54379, 54393, 54407, 54413, 54419, 54428, 54437, 54444, 54451, + 54460, 54469, 54478, 54487, 54495, 54503, 54513, 54523, 54537, 54551, + 54560, 54569, 54582, 54595, 54604, 54613, 54624, 54635, 54641, 54647, + 54656, 54665, 54670, 54675, 54683, 54689, 54695, 54703, 54711, 54724, + 54737, 54741, 54745, 54753, 54761, 54768, 54776, 54784, 54793, 54802, + 54808, 54814, 54821, 54828, 54835, 54842, 54851, 54860, 54863, 54866, + 54871, 54876, 54882, 54888, 54895, 54902, 54913, 54924, 54931, 54938, + 54946, 54954, 54962, 54970, 54978, 54986, 54993, 55000, 55004, 55008, + 55016, 55024, 55029, 55034, 55039, 55044, 55050, 55064, 55071, 55078, + 55082, 55084, 55086, 55091, 55096, 55101, 55105, 55113, 55120, 55127, + 55135, 55147, 55155, 55163, 55174, 55178, 55182, 55188, 55196, 55209, + 55216, 55223, 55230, 55235, 55242, 55251, 55259, 55265, 55271, 55277, + 55287, 55297, 55305, 55314, 55319, 55322, 55327, 55332, 55337, 55342, + 55347, 55351, 55354, 55357, 55360, 55365, 55370, 55375, 55380, 55384, + 55388, 55395, 55402, 55409, 55416, 55423, 55430, 55440, 55450, 55457, + 55464, 55472, 55480, 55484, 55489, 55494, 55500, 55506, 55509, 55512, + 55515, 55518, 55522, 55527, 55532, 55537, 55542, 55547, 55551, 55555, + 55559, 55563, 55567, 55571, 55575, 55581, 55585, 55591, 55596, 55603, + 55611, 55618, 55626, 55633, 55641, 55650, 55657, 55667, 55678, 55684, + 55693, 55699, 55708, 55717, 55723, 55729, 55733, 55737, 55746, 55755, + 55762, 55769, 55778, 55787, 55793, 55799, 55805, 55810, 55814, 55818, + 55823, 55828, 55833, 55841, 55849, 55852, 55856, 55865, 55874, 55882, + 55890, 55901, 55914, 55918, 55922, 55926, 55930, 55935, 55940, 55946, + 55952, 55958, 55964, 55970, 55976, 55982, 55988, 55997, 56006, 56013, + 56020, 56027, 0, 0, 56034, 56043, 56052, 56061, 56070, 56078, 56086, + 56094, 56102, 56107, 56112, 56121, 56131, 56140, 56150, 56157, 56164, + 56171, 56178, 56183, 56188, 56193, 56198, 56206, 56215, 56223, 56232, + 56236, 56240, 56244, 56248, 56258, 0, 0, 56261, 56270, 56279, 56288, + 56297, 56303, 56309, 56315, 56321, 56331, 56341, 56351, 56361, 56371, + 56381, 56391, 56401, 56408, 56415, 56422, 56429, 56436, 56443, 56450, + 56457, 56463, 56469, 56475, 56481, 56487, 56493, 56499, 56505, 56515, 0, + 0, 0, 56525, 56532, 56535, 56539, 56543, 56548, 56552, 56556, 56559, + 56568, 56577, 56586, 0, 56595, 56601, 56607, 56615, 56625, 56632, 56641, + 56646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56649, 56654, 56659, 56664, 56669, 56674, 56679, 56684, 56689, 56694, + 56699, 56705, 56709, 56714, 56719, 56724, 56729, 56734, 56739, 56744, + 56749, 56754, 56759, 56764, 56769, 56774, 56779, 56784, 56789, 56794, + 56799, 56804, 56809, 56814, 56819, 56825, 56830, 56836, 56845, 56850, + 56858, 56865, 56874, 56879, 56884, 56889, 56895, 0, 56902, 56907, 56912, + 56917, 56922, 56927, 56932, 56937, 56942, 56947, 56952, 56958, 56962, + 56967, 56972, 56977, 56982, 56987, 56992, 56997, 57002, 57007, 57012, + 57017, 57022, 57027, 57032, 57037, 57042, 57047, 57052, 57057, 57062, + 57067, 57072, 57078, 57083, 57089, 57098, 57103, 57111, 57118, 57127, + 57132, 57137, 57142, 57148, 0, 57155, 57163, 57171, 57181, 57188, 57196, + 57202, 57211, 57219, 57227, 57235, 57243, 57251, 57259, 57264, 57271, + 57276, 57282, 57290, 57297, 57304, 57312, 57318, 57324, 57331, 57338, + 57347, 57357, 57363, 57370, 57375, 57385, 57395, 57400, 57405, 57410, + 57415, 57420, 57425, 57430, 57435, 57440, 57445, 57450, 57455, 57460, + 57465, 57470, 57475, 57480, 57485, 57490, 57495, 57500, 57505, 57510, + 57515, 57520, 57525, 57530, 57535, 57540, 57545, 57549, 57553, 57558, + 57563, 57568, 57573, 57578, 57583, 57588, 57593, 57598, 57603, 57608, + 57613, 57618, 57623, 57628, 57633, 57638, 57643, 57650, 57657, 57664, + 57671, 57678, 57685, 57692, 57699, 57706, 57713, 57720, 57727, 57734, + 57741, 57746, 57751, 57758, 57765, 57772, 57779, 57786, 57793, 57800, + 57807, 57814, 57821, 57828, 57835, 57841, 57847, 57853, 57859, 57866, + 57873, 57880, 57887, 57894, 57901, 57908, 57915, 57922, 57929, 57937, + 57945, 57953, 57961, 57969, 57977, 57985, 57993, 57997, 58003, 58009, + 58013, 58019, 58025, 58031, 58038, 58045, 58052, 58059, 58064, 58070, + 58076, 58083, 0, 0, 0, 0, 0, 58090, 58098, 58107, 58116, 58124, 58130, + 58135, 58140, 58145, 58150, 58155, 58160, 58165, 58170, 58175, 58180, + 58185, 58190, 58195, 58200, 58205, 58210, 58215, 58220, 58225, 58230, + 58235, 58240, 58245, 58250, 58255, 58260, 58265, 58270, 58275, 58280, + 58285, 58290, 58295, 58300, 58305, 58310, 58315, 58320, 58325, 0, 58330, + 0, 0, 0, 0, 0, 58335, 0, 0, 58340, 58344, 58349, 58354, 58359, 58364, + 58373, 58378, 58383, 58388, 58393, 58398, 58403, 58408, 58413, 58420, + 58425, 58430, 58439, 58446, 58451, 58456, 58461, 58468, 58473, 58480, + 58485, 58490, 58497, 58504, 58509, 58514, 58519, 58526, 58533, 58538, + 58543, 58548, 58553, 58558, 58565, 58572, 58577, 58582, 58587, 58592, + 58597, 58602, 58607, 58612, 58617, 58622, 58627, 58634, 58639, 58644, 0, + 0, 0, 0, 0, 0, 0, 58649, 58656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 58661, 58666, 58670, 58674, 58678, 58682, 58686, 58690, 58694, 58698, + 58702, 58706, 58712, 58716, 58720, 58724, 58728, 58732, 58736, 58740, + 58744, 58748, 58752, 58756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58760, 58764, + 58768, 58772, 58776, 58780, 58784, 0, 58788, 58792, 58796, 58800, 58804, + 58808, 58812, 0, 58816, 58820, 58824, 58828, 58832, 58836, 58840, 0, + 58844, 58848, 58852, 58856, 58860, 58864, 58868, 0, 58872, 58876, 58880, + 58884, 58888, 58892, 58896, 0, 58900, 58904, 58908, 58912, 58916, 58920, + 58924, 0, 58928, 58932, 58936, 58940, 58944, 58948, 58952, 0, 58956, + 58960, 58964, 58968, 58972, 58976, 58980, 0, 58984, 58989, 58994, 58999, + 59004, 59009, 59014, 59018, 59023, 59028, 59033, 59037, 59042, 59047, + 59052, 59057, 59061, 59066, 59071, 59076, 59081, 59086, 59091, 59095, + 59100, 59105, 59112, 59117, 59122, 59128, 59135, 59142, 59151, 59158, + 59167, 59171, 59175, 59181, 59187, 59193, 59201, 59207, 59211, 59215, + 59219, 59225, 59231, 59235, 59237, 59241, 59247, 59249, 59253, 59256, + 59259, 59265, 59270, 59274, 59278, 59283, 59289, 59294, 59299, 59304, + 59309, 59316, 59323, 59328, 59333, 59338, 59343, 59348, 59353, 59357, + 59361, 59368, 59375, 59381, 59385, 59390, 59393, 59397, 59405, 59408, + 59412, 59416, 59419, 59425, 59431, 59434, 59440, 59444, 59448, 59454, + 59459, 59464, 59466, 59469, 59473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 59479, 59483, 59487, 59492, 59497, 59502, 59506, 59510, 59514, 59519, + 59524, 59528, 59532, 59536, 59540, 59545, 59550, 59555, 59560, 59564, + 59568, 59573, 59578, 59583, 59588, 59592, 0, 59596, 59600, 59604, 59608, + 59612, 59616, 59620, 59625, 59630, 59634, 59639, 59644, 59653, 59657, + 59661, 59665, 59672, 59676, 59681, 59686, 59690, 59694, 59700, 59705, + 59710, 59715, 59720, 59724, 59728, 59732, 59736, 59740, 59745, 59750, + 59754, 59758, 59763, 59768, 59773, 59777, 59781, 59786, 59791, 59797, + 59803, 59807, 59813, 59819, 59823, 59829, 59835, 59840, 59845, 59849, + 59855, 59859, 59863, 59869, 59875, 59880, 59885, 59889, 59893, 59901, + 59907, 59913, 59919, 59924, 59929, 59934, 59940, 59944, 59950, 59954, + 59958, 59964, 59970, 59976, 59982, 59988, 59994, 60000, 60006, 60012, + 60018, 60024, 60030, 60034, 60040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 60046, 60049, 60053, 60057, 60061, 60065, 60068, 60071, 60075, 60079, + 60083, 60087, 60090, 60095, 60099, 60103, 60107, 60113, 60117, 60121, + 60125, 60129, 60136, 60142, 60146, 60150, 60154, 60158, 60162, 60166, + 60170, 60174, 60178, 60182, 60186, 60192, 60196, 60200, 60204, 60208, + 60212, 60216, 60220, 60224, 60228, 60232, 60236, 60240, 60244, 60248, + 60252, 60256, 60262, 60268, 60273, 60278, 60282, 60286, 60290, 60294, + 60298, 60302, 60306, 60310, 60314, 60318, 60322, 60326, 60330, 60334, + 60338, 60342, 60346, 60350, 60354, 60358, 60362, 60366, 60370, 60374, + 60380, 60384, 60388, 60392, 60396, 60400, 60404, 60408, 60412, 60417, + 60424, 60428, 60432, 60436, 60440, 60444, 60448, 60452, 60456, 60460, + 60464, 60468, 60472, 60479, 60483, 60489, 60493, 60497, 60501, 60505, + 60509, 60512, 60516, 60520, 60524, 60528, 60532, 60536, 60540, 60544, + 60548, 60552, 60556, 60560, 60564, 60568, 60572, 60576, 60580, 60584, + 60588, 60592, 60596, 60600, 60604, 60608, 60612, 60616, 60620, 60624, + 60628, 60632, 60636, 60640, 60646, 60650, 60654, 60658, 60662, 60666, + 60670, 60674, 60678, 60682, 60686, 60690, 60694, 60698, 60702, 60706, + 60710, 60714, 60718, 60722, 60726, 60730, 60734, 60738, 60742, 60746, + 60750, 60754, 60762, 60766, 60770, 60774, 60778, 60782, 60788, 60792, + 60796, 60800, 60804, 60808, 60812, 60816, 60820, 60824, 60828, 60832, + 60836, 60840, 60846, 60850, 60854, 60858, 60862, 60866, 60870, 60874, + 60878, 60882, 60886, 60890, 60894, 60898, 60902, 60906, 60910, 60914, + 60918, 60922, 60926, 60930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60934, 60943, 60951, 60963, 60974, + 60982, 60991, 61000, 61010, 61022, 61034, 61046, 0, 0, 0, 0, 61052, + 61055, 61058, 61063, 61066, 61073, 61077, 61081, 61085, 61089, 61093, + 61098, 61103, 61107, 61111, 61116, 61121, 61126, 61131, 61134, 61137, + 61143, 61149, 61154, 61159, 61166, 61173, 61177, 61181, 61185, 61193, + 61199, 61206, 61211, 61216, 61221, 61226, 61231, 61236, 61241, 61246, + 61251, 61256, 61261, 61266, 61271, 61276, 61282, 61287, 61291, 61297, + 61308, 61318, 61333, 61343, 61347, 61357, 61363, 61369, 61375, 61380, + 61383, 61388, 61392, 0, 61398, 61402, 61405, 61409, 61412, 61416, 61419, + 61423, 61426, 61430, 61433, 61436, 61440, 61444, 61448, 61452, 61456, + 61460, 61464, 61468, 61472, 61476, 61480, 61484, 61488, 61492, 61496, + 61500, 61504, 61508, 61512, 61516, 61520, 61524, 61528, 61533, 61537, + 61541, 61545, 61549, 61552, 61556, 61559, 61563, 61567, 61571, 61575, + 61578, 61582, 61585, 61589, 61593, 61597, 61601, 61605, 61609, 61613, + 61617, 61621, 61625, 61629, 61633, 61636, 61640, 61644, 61648, 61652, + 61656, 61659, 61664, 61668, 61673, 61677, 61681, 61685, 61689, 61693, + 61697, 61702, 61706, 61710, 61714, 61718, 61722, 61726, 61730, 0, 0, + 61735, 61743, 61751, 61758, 61765, 61769, 61775, 61780, 61785, 61789, + 61792, 61796, 61799, 61803, 61806, 61810, 61813, 61817, 61820, 61823, + 61827, 61831, 61835, 61839, 61843, 61847, 61851, 61855, 61859, 61863, + 61867, 61871, 61875, 61879, 61883, 61887, 61891, 61895, 61899, 61903, + 61907, 61911, 61915, 61920, 61924, 61928, 61932, 61936, 61939, 61943, + 61946, 61950, 61954, 61958, 61962, 61965, 61969, 61972, 61976, 61980, + 61984, 61988, 61992, 61996, 62000, 62004, 62008, 62012, 62016, 62020, + 62023, 62027, 62031, 62035, 62039, 62043, 62046, 62051, 62055, 62060, + 62064, 62068, 62072, 62076, 62080, 62084, 62089, 62093, 62097, 62101, + 62105, 62109, 62113, 62117, 62122, 62126, 62130, 62134, 62138, 62143, + 62150, 62154, 62160, 0, 0, 0, 0, 0, 62165, 62170, 62175, 62180, 62185, + 62190, 62195, 62200, 62204, 62209, 62214, 62219, 62224, 62229, 62234, + 62239, 62244, 62249, 62253, 62258, 62263, 62267, 62271, 62275, 62279, + 62284, 62289, 62294, 62299, 62304, 62309, 62314, 62319, 62324, 62329, + 62333, 62337, 62342, 62347, 62352, 62357, 0, 0, 0, 62362, 62366, 62370, + 62374, 62378, 62382, 62386, 62390, 62394, 62398, 62402, 62406, 62410, + 62414, 62418, 62422, 62426, 62430, 62434, 62438, 62442, 62446, 62450, + 62454, 62458, 62462, 62466, 62470, 62474, 62478, 62482, 62485, 62489, + 62492, 62496, 62500, 62503, 62507, 62511, 62514, 62518, 62522, 62526, + 62530, 62533, 62537, 62541, 62545, 62549, 62553, 62557, 62560, 62563, + 62567, 62571, 62575, 62579, 62583, 62587, 62591, 62595, 62599, 62603, + 62607, 62611, 62615, 62619, 62623, 62627, 62631, 62635, 62639, 62643, + 62647, 62651, 62655, 62659, 62663, 62667, 62671, 62675, 62679, 62683, + 62687, 62691, 62695, 62699, 62703, 62707, 62711, 62715, 62719, 62723, + 62727, 0, 62731, 62737, 62743, 62748, 62753, 62758, 62764, 62770, 62776, + 62782, 62788, 62794, 62800, 62806, 62812, 62818, 62824, 62829, 62834, + 62839, 62844, 62849, 62854, 62859, 62864, 62869, 62874, 62879, 62884, + 62889, 62894, 62899, 62904, 62909, 62914, 62919, 62924, 62930, 62936, + 62942, 62948, 62953, 62958, 0, 0, 0, 0, 0, 62963, 62968, 62973, 62978, + 62983, 62988, 62993, 62998, 63003, 63008, 63013, 63018, 63023, 63028, + 63033, 63038, 63043, 63048, 63052, 63057, 63062, 63067, 63072, 63077, + 63082, 63087, 63092, 63097, 63102, 63107, 63112, 63117, 63122, 63127, + 63132, 63137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63142, 63147, 63152, + 63157, 63161, 63166, 63170, 63175, 63180, 63185, 63190, 63195, 63200, + 63205, 63210, 63215, 63220, 63224, 63228, 63232, 63236, 63240, 63244, + 63248, 63252, 63256, 63260, 63264, 63268, 63272, 63276, 63281, 63286, + 63291, 63296, 63301, 63306, 63311, 63316, 63321, 63326, 63331, 63336, + 63341, 63346, 63351, 63357, 0, 63364, 63367, 63370, 63373, 63376, 63379, + 63382, 63385, 63388, 63391, 63395, 63399, 63403, 63407, 63411, 63415, + 63419, 63423, 63427, 63431, 63435, 63439, 63443, 63447, 63451, 63455, + 63459, 63463, 63467, 63471, 63475, 63479, 63483, 63487, 63491, 63495, + 63499, 63503, 63507, 63511, 63515, 63524, 63533, 63542, 63551, 63560, + 63569, 63578, 63587, 63590, 63595, 63600, 63605, 63610, 63615, 63620, + 63625, 63630, 63635, 63639, 63644, 63649, 63654, 63659, 63664, 63668, + 63672, 63676, 63680, 63684, 63688, 63692, 63696, 63700, 63704, 63708, + 63712, 63716, 63720, 63725, 63730, 63735, 63740, 63745, 63750, 63755, + 63760, 63765, 63770, 63775, 63780, 63785, 63790, 63796, 63802, 63807, + 63812, 63815, 63818, 63821, 63824, 63827, 63830, 63833, 63836, 63839, + 63843, 63847, 63851, 63855, 63859, 63863, 63867, 63871, 63875, 63879, + 63883, 63887, 63891, 63895, 63899, 63903, 63907, 63911, 63915, 63919, + 63923, 63927, 63931, 63935, 63939, 63943, 63947, 63951, 63955, 63959, + 63963, 63967, 63971, 63975, 63979, 63983, 63987, 63991, 63995, 63999, + 64004, 64009, 64014, 64019, 64023, 64028, 64033, 64038, 64043, 64048, + 64053, 64058, 64063, 64068, 64072, 64079, 64086, 64093, 64100, 64107, + 64114, 64121, 64128, 64135, 64142, 64149, 64156, 64159, 64162, 64165, + 64170, 64173, 64176, 64179, 64182, 64185, 64188, 64192, 64196, 64200, + 64204, 64208, 64212, 64216, 64220, 64224, 64228, 64232, 64236, 64240, + 64243, 64246, 64250, 64254, 64258, 64262, 64265, 64269, 64273, 64277, + 64281, 64284, 64288, 64292, 64296, 64300, 64303, 64307, 64311, 64315, + 64319, 64323, 64327, 64331, 64335, 64339, 64343, 0, 64347, 64350, 64353, + 64356, 64359, 64362, 64365, 64368, 64371, 64374, 64377, 64380, 64383, + 64386, 64389, 64392, 64395, 64398, 64401, 64404, 64407, 64410, 64413, + 64416, 64419, 64422, 64425, 64428, 64431, 64434, 64437, 64440, 64443, + 64446, 64449, 64452, 64455, 64458, 64461, 64464, 64467, 64470, 64473, + 64476, 64479, 64482, 64485, 64488, 64491, 64494, 64497, 64500, 64503, + 64506, 64509, 64512, 64515, 64518, 64521, 64524, 64527, 64530, 64533, + 64536, 64539, 64542, 64545, 64548, 64551, 64554, 64557, 64560, 64563, + 64566, 64569, 64572, 64575, 64578, 64581, 64584, 64587, 64590, 64593, + 64596, 64599, 64602, 64605, 64608, 64611, 64620, 64628, 64636, 64644, + 64652, 64660, 64668, 64676, 64684, 64692, 64701, 64710, 64719, 64728, + 64737, 64746, 64755, 64764, 64773, 64782, 64791, 64800, 64809, 64818, + 64827, 64830, 64833, 64836, 64838, 64841, 64844, 64847, 64852, 64857, + 64860, 64867, 64874, 64881, 64888, 64891, 64896, 64898, 64902, 64904, + 64906, 64909, 64912, 64915, 64918, 64921, 64924, 64927, 64932, 64937, + 64940, 64943, 64946, 64949, 64952, 64955, 64958, 64962, 64965, 64968, + 64971, 64974, 64977, 64982, 64985, 64988, 64991, 64996, 65001, 65006, + 65011, 65016, 65021, 65026, 65031, 65036, 65044, 65046, 65049, 65052, + 65055, 65058, 65063, 65071, 65074, 65077, 65081, 65084, 65087, 65090, + 65095, 65098, 65101, 65106, 65109, 65112, 65117, 65120, 65123, 65128, + 65133, 65138, 65141, 65144, 65147, 65150, 65156, 65159, 65162, 65165, + 65167, 65170, 65173, 65176, 65181, 65184, 65187, 65190, 65193, 65196, + 65201, 65204, 65207, 65210, 65213, 65216, 65219, 65222, 65225, 65228, + 65234, 65239, 65247, 65255, 65263, 65271, 65279, 65287, 65295, 65303, + 65311, 65320, 65329, 65338, 65347, 65356, 65365, 65374, 65383, 65392, + 65401, 65410, 65419, 65428, 65437, 65446, 65455, 65464, 65473, 65482, + 65491, 65500, 65509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18288, 18291, 18295, 18299, 18303, - 18307, 18311, 18315, 18319, 18323, 18327, 18331, 18335, 18339, 18343, - 18347, 18351, 18355, 18359, 18363, 18367, 18370, 18373, 18377, 18381, - 18385, 18388, 18391, 18394, 18398, 18402, 18405, 18408, 18412, 18415, - 18420, 18423, 18427, 18430, 18434, 18437, 18442, 18445, 18449, 18456, - 18461, 18465, 18470, 18474, 18479, 18483, 18488, 18495, 18501, 18506, - 18510, 18514, 18518, 18522, 18526, 18531, 18536, 18542, 18547, 18552, - 18556, 18559, 18562, 18565, 18568, 18571, 18574, 18577, 18580, 18583, - 18589, 18593, 18597, 18601, 18605, 18609, 18613, 18617, 18621, 18626, - 18630, 18635, 18640, 18646, 18651, 18657, 18663, 18669, 18675, 18681, - 18688, 18695, 18703, 18711, 18720, 18729, 18740, 18750, 18760, 18771, - 18782, 18792, 18802, 18812, 18822, 18832, 18842, 18852, 18862, 18870, - 18877, 18883, 18890, 18895, 18901, 18907, 18913, 18919, 18925, 18931, - 18936, 18942, 18948, 18954, 18960, 18965, 18973, 18980, 18986, 18993, - 19001, 19007, 19013, 19019, 19025, 19033, 19041, 19051, 19059, 19067, - 19073, 19078, 19083, 19088, 19093, 19098, 19103, 19108, 19113, 19118, - 19124, 19130, 19136, 19143, 19148, 19154, 19159, 19164, 19169, 19174, - 19179, 19184, 19189, 19194, 19199, 19204, 19209, 19214, 19219, 19224, - 19229, 19234, 19239, 19244, 19249, 19254, 19259, 19264, 19269, 19274, - 19279, 19284, 19289, 19294, 19299, 19304, 19309, 19314, 19319, 19324, - 19329, 19334, 19339, 0, 19344, 0, 0, 0, 0, 0, 19349, 0, 0, 19354, 19358, - 19362, 19366, 19370, 19374, 19378, 19382, 19386, 19390, 19394, 19398, - 19402, 19406, 19410, 19414, 19418, 19422, 19426, 19430, 19434, 19438, - 19442, 19446, 19450, 19454, 19458, 19462, 19466, 19470, 19474, 19478, - 19482, 19486, 19490, 19494, 19498, 19502, 19506, 19510, 19514, 19518, - 19524, 19528, 19533, 19538, 19542, 19547, 19552, 19556, 19560, 19564, - 19568, 19572, 19576, 19580, 19584, 19588, 19592, 19596, 19600, 19604, - 19608, 19612, 19616, 19620, 19624, 19628, 19632, 19636, 19640, 19644, - 19648, 19652, 19656, 19660, 19664, 19668, 19672, 19676, 19680, 19684, - 19688, 19692, 19696, 19700, 19704, 19708, 19712, 19716, 19720, 19724, - 19728, 19732, 19736, 19740, 19744, 19748, 19752, 19756, 19760, 19764, - 19768, 19772, 19776, 19780, 19784, 19788, 19792, 19796, 19800, 19804, - 19808, 19812, 19816, 19820, 19824, 19828, 19832, 19836, 19840, 19844, - 19848, 19852, 19856, 19860, 19864, 19868, 19872, 19876, 19880, 19884, - 19888, 19892, 19896, 19900, 19904, 19908, 19912, 19916, 19920, 19924, - 19928, 19932, 19936, 19940, 19943, 19947, 19950, 19954, 19958, 19961, - 19965, 19969, 19972, 19976, 19980, 19984, 19988, 19991, 19995, 19999, - 20003, 20007, 20011, 20015, 20018, 20022, 20026, 20030, 20034, 20038, - 20042, 20046, 20050, 20054, 20058, 20062, 20066, 20070, 20074, 20078, - 20082, 20086, 20090, 20094, 20098, 20102, 20106, 20110, 20114, 20118, - 20122, 20126, 20130, 20134, 20138, 20142, 20146, 20150, 20154, 20158, - 20162, 20166, 20170, 20174, 20178, 20182, 20186, 20190, 20194, 20198, - 20202, 20206, 20210, 20214, 20218, 20222, 20226, 20230, 20234, 20238, - 20242, 20246, 20250, 20254, 20258, 20262, 20266, 20270, 20274, 20278, - 20282, 20286, 20290, 20294, 20298, 20302, 20306, 20310, 20314, 20318, - 20322, 20326, 20330, 20334, 20338, 20342, 20346, 20350, 20354, 20358, - 20362, 20366, 20370, 20374, 20378, 20382, 20386, 20390, 20394, 20398, - 20402, 20406, 20410, 20414, 20418, 20422, 20426, 20430, 20434, 20438, - 20442, 20446, 20450, 20454, 20458, 20462, 20466, 20470, 20474, 20478, - 20482, 20486, 20490, 20494, 20498, 20502, 20506, 20510, 20514, 20518, - 20522, 20526, 20530, 20534, 20538, 20542, 20546, 20550, 20554, 20558, - 20562, 20566, 20570, 20573, 20577, 20581, 20585, 20589, 20593, 20597, - 20601, 20605, 20609, 20613, 20617, 20621, 20625, 20629, 20633, 20637, - 20641, 20645, 20649, 20653, 20657, 20661, 20665, 20668, 20672, 20676, - 20680, 20684, 20688, 20692, 20696, 20700, 20704, 20708, 20712, 20716, - 20720, 20724, 20728, 20731, 20735, 20739, 20743, 20747, 20751, 20755, - 20759, 20762, 20766, 20770, 20774, 20778, 20782, 20786, 20790, 20794, - 20798, 20802, 20806, 20810, 20814, 20818, 20822, 20826, 20830, 20834, - 20838, 20842, 20846, 20850, 20854, 0, 20858, 20862, 20866, 20870, 0, 0, - 20874, 20878, 20882, 20886, 20890, 20894, 20898, 0, 20902, 0, 20906, - 20910, 20914, 20918, 0, 0, 20922, 20926, 20930, 20934, 20938, 20942, - 20946, 20950, 20954, 20958, 20962, 20966, 20970, 20974, 20978, 20982, - 20986, 20990, 20994, 20998, 21002, 21006, 21010, 21013, 21017, 21021, - 21025, 21029, 21033, 21037, 21041, 21045, 21049, 21053, 21057, 21061, - 21065, 21069, 21073, 21077, 21081, 0, 21085, 21089, 21093, 21097, 0, 0, - 21101, 21104, 21108, 21112, 21116, 21120, 21124, 21128, 21132, 21136, - 21140, 21144, 21148, 21152, 21156, 21160, 21164, 21169, 21174, 21179, - 21185, 21191, 21196, 21201, 21207, 21210, 21214, 21218, 21222, 21226, - 21230, 21234, 21238, 0, 21242, 21246, 21250, 21254, 0, 0, 21258, 21262, - 21266, 21270, 21274, 21278, 21282, 0, 21286, 0, 21290, 21294, 21298, - 21302, 0, 0, 21306, 21310, 21314, 21318, 21322, 21326, 21330, 21334, - 21338, 21343, 21348, 21353, 21359, 21365, 21370, 0, 21375, 21379, 21383, - 21387, 21391, 21395, 21399, 21403, 21407, 21411, 21415, 21419, 21423, - 21427, 21431, 21435, 21439, 21442, 21446, 21450, 21454, 21458, 21462, - 21466, 21470, 21474, 21478, 21482, 21486, 21490, 21494, 21498, 21502, - 21506, 21510, 21514, 21518, 21522, 21526, 21530, 21534, 21538, 21542, - 21546, 21550, 21554, 21558, 21562, 21566, 21570, 21574, 21578, 21582, - 21586, 21590, 21594, 21598, 0, 21602, 21606, 21610, 21614, 0, 0, 21618, - 21622, 21626, 21630, 21634, 21638, 21642, 21646, 21650, 21654, 21658, - 21662, 21666, 21670, 21674, 21678, 21682, 21686, 21690, 21694, 21698, - 21702, 21706, 21710, 21714, 21718, 21722, 21726, 21730, 21734, 21738, - 21742, 21746, 21750, 21754, 21758, 21762, 21766, 21770, 21774, 21778, - 21782, 21786, 21790, 21794, 21798, 21802, 21806, 21810, 21814, 21818, - 21822, 21826, 21830, 21834, 21838, 21842, 21845, 21849, 21853, 21857, - 21861, 21865, 21869, 21873, 21877, 21881, 0, 0, 21885, 21894, 21900, - 21905, 21909, 21912, 21917, 21920, 21923, 21926, 21931, 21935, 21940, - 21943, 21946, 21949, 21952, 21955, 21958, 21961, 21964, 21967, 21971, - 21975, 21979, 21983, 21987, 21991, 21995, 21999, 22003, 22007, 0, 0, 0, - 22013, 22019, 22023, 22027, 22031, 22037, 22041, 22045, 22049, 22055, - 22059, 22063, 22067, 22073, 22077, 22081, 22085, 22091, 22097, 22103, - 22111, 22117, 22123, 22129, 22135, 22141, 0, 0, 0, 0, 0, 0, 22147, 22150, - 22153, 22156, 22159, 22162, 22166, 22170, 22173, 22177, 22181, 22185, - 22189, 22193, 22196, 22200, 22204, 22208, 22212, 22216, 22220, 22224, - 22228, 22232, 22236, 22240, 22243, 22247, 22251, 22255, 22259, 22262, - 22266, 22270, 22274, 22278, 22282, 22286, 22290, 22294, 22298, 22302, - 22306, 22310, 22314, 22317, 22321, 22325, 22329, 22333, 22337, 22341, - 22345, 22349, 22353, 22357, 22361, 22365, 22369, 22373, 22377, 22381, - 22385, 22389, 22393, 22397, 22401, 22405, 22409, 22413, 22417, 22421, - 22425, 22429, 22433, 22437, 22441, 22445, 22449, 22453, 22456, 22460, - 22464, 22468, 22472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22476, 22480, - 22483, 22487, 22490, 22494, 22497, 22501, 22507, 22512, 22516, 22519, - 22523, 22527, 22532, 22536, 22541, 22545, 22550, 22554, 22559, 22563, - 22568, 22574, 22578, 22583, 22587, 22592, 22598, 22602, 22608, 22614, - 22618, 22623, 22631, 22639, 22646, 22651, 22656, 22665, 22672, 22679, - 22684, 22690, 22694, 22698, 22702, 22706, 22710, 22714, 22718, 22722, - 22726, 22730, 22736, 22741, 22746, 22749, 22753, 22757, 22762, 22766, - 22771, 22775, 22780, 22784, 22789, 22793, 22798, 22802, 22807, 22811, - 22816, 22822, 22826, 22831, 22836, 22840, 22844, 22848, 22852, 22855, - 22859, 22865, 22870, 22875, 22879, 22883, 22887, 22892, 22896, 22901, - 22905, 22910, 22913, 22917, 22921, 22926, 22930, 22935, 22939, 22944, - 22950, 22954, 22958, 22962, 22966, 22970, 22974, 22978, 22982, 22986, - 22990, 22994, 23000, 23003, 23007, 23011, 23016, 23020, 23025, 23029, - 23034, 23038, 23043, 23047, 23052, 23056, 23061, 23065, 23070, 23076, - 23080, 23084, 23090, 23096, 23102, 23108, 23112, 23116, 23120, 23124, - 23128, 23132, 23138, 23142, 23146, 23150, 23155, 23159, 23164, 23168, - 23173, 23177, 23182, 23186, 23191, 23195, 23200, 23204, 23209, 23215, - 23219, 23225, 23229, 23233, 23237, 23241, 23245, 23249, 23255, 23258, - 23262, 23266, 23271, 23275, 23280, 23284, 23289, 23293, 23298, 23302, - 23307, 23311, 23316, 23320, 23325, 23331, 23334, 23338, 23342, 23347, - 23352, 23356, 23360, 23364, 23368, 23372, 23376, 23382, 23385, 23389, - 23393, 23398, 23402, 23407, 23411, 23416, 23422, 23426, 23431, 23435, - 23439, 23443, 23447, 23451, 23455, 23459, 23465, 23469, 23473, 23477, - 23482, 23486, 23491, 23495, 23500, 23504, 23509, 23513, 23518, 23522, - 23527, 23531, 23536, 23539, 23543, 23547, 23551, 23555, 23559, 23563, - 23567, 23571, 23577, 23580, 23584, 23588, 23593, 23597, 23602, 23606, - 23611, 23615, 23620, 23624, 23629, 23633, 23638, 23642, 23647, 23653, - 23657, 23663, 23667, 23673, 23679, 23685, 23691, 23697, 23703, 23709, - 23715, 23719, 23723, 23727, 23731, 23735, 23739, 23743, 23747, 23752, - 23756, 23761, 23765, 23770, 23774, 23779, 23783, 23788, 23792, 23797, - 23801, 23806, 23810, 23814, 23818, 23822, 23826, 23830, 23834, 23840, - 23843, 23847, 23851, 23856, 23860, 23865, 23869, 23874, 23878, 23883, - 23887, 23892, 23896, 23901, 23905, 23910, 23916, 23920, 23926, 23931, - 23937, 23941, 23947, 23952, 23956, 23960, 23964, 23968, 23972, 23977, - 23980, 23984, 23989, 23993, 23998, 24001, 24005, 24009, 24013, 24017, - 24021, 24025, 24029, 24033, 24037, 24041, 24045, 24050, 24054, 24058, - 24064, 24068, 24074, 24078, 24084, 24088, 24092, 24096, 24100, 24104, - 24109, 24113, 24117, 24121, 24125, 24129, 24133, 24137, 24141, 24145, - 24149, 24155, 24161, 24167, 24173, 24179, 24184, 24190, 24196, 24202, - 24206, 24210, 24214, 24218, 24222, 24226, 24230, 24234, 24238, 24242, - 24246, 24250, 24254, 24259, 24264, 24269, 24273, 24277, 24281, 24285, - 24289, 24293, 24297, 24301, 24305, 24309, 24315, 24321, 24327, 24333, - 24339, 24345, 24351, 24357, 24363, 24367, 24371, 24375, 24379, 24383, - 24387, 24391, 24397, 24403, 24409, 24415, 24421, 24427, 24433, 24439, - 24445, 24450, 24455, 24460, 24465, 24471, 24477, 24483, 24489, 24495, - 24501, 24507, 24512, 24518, 24524, 24530, 24535, 24541, 24547, 24553, - 24558, 24563, 24568, 24573, 24578, 24583, 24588, 24593, 24598, 24603, - 24608, 24613, 24617, 24622, 24627, 24632, 24637, 24642, 24647, 24652, - 24657, 24662, 24667, 24672, 24677, 24682, 24687, 24692, 24697, 24702, - 24707, 24712, 24717, 24722, 24727, 24732, 24737, 24742, 24747, 24752, - 24757, 24762, 24766, 24771, 24776, 24781, 24786, 24791, 24796, 24801, - 24806, 24811, 24816, 24821, 24826, 24831, 24836, 24841, 24846, 24851, - 24856, 24861, 24866, 24871, 24876, 24881, 24886, 24891, 24895, 24900, - 24905, 24910, 24915, 24920, 24924, 24929, 24934, 24939, 24944, 24949, - 24953, 24958, 24964, 24969, 24974, 24979, 24984, 24990, 24995, 25000, - 25005, 25010, 25015, 25020, 25025, 25030, 25035, 25040, 25045, 25050, - 25055, 25060, 25065, 25070, 25075, 25080, 25085, 25090, 25095, 25100, - 25105, 25110, 25115, 25120, 25125, 25130, 25135, 25140, 25145, 25150, - 25155, 25160, 25165, 25170, 25175, 25180, 25185, 25190, 25195, 25200, - 25205, 25210, 25216, 25221, 25226, 25231, 25236, 25241, 25246, 25251, - 25256, 25261, 25266, 25271, 25275, 25280, 25285, 25290, 25295, 25300, - 25305, 25310, 25315, 25320, 25325, 25330, 25335, 25340, 25345, 25350, - 25355, 25360, 25365, 25370, 25375, 25380, 25385, 25390, 25395, 25400, - 25405, 25411, 25415, 25419, 25423, 25427, 25431, 25435, 25439, 25443, - 25449, 25455, 25461, 25467, 25473, 25479, 25485, 25492, 25498, 25503, - 25508, 25513, 25518, 25523, 25528, 25533, 25538, 25543, 25548, 25553, - 25558, 25563, 25568, 25573, 25578, 25583, 25588, 25593, 25598, 25603, - 25608, 25613, 25618, 25623, 25628, 25633, 25638, 0, 0, 0, 25645, 25655, - 25659, 25666, 25670, 25674, 25678, 25686, 25690, 25695, 25700, 25705, - 25709, 25714, 25719, 25722, 25726, 25730, 25739, 25743, 25747, 25753, - 25757, 25761, 25769, 25773, 25781, 25787, 25793, 25799, 25805, 25815, - 25821, 25825, 25834, 25837, 25843, 25847, 25853, 25858, 25864, 25872, - 25878, 25884, 25892, 25898, 25902, 25906, 25916, 25922, 25926, 25936, - 25942, 25946, 25950, 25957, 25964, 25969, 25974, 25983, 25987, 25991, - 25995, 26003, 26010, 26014, 26018, 26022, 26026, 26030, 26034, 26038, - 26042, 26046, 26050, 26054, 26059, 26064, 26069, 26073, 26077, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26081, 26085, 26089, 26093, 26097, - 26102, 26107, 26112, 26117, 26121, 26125, 26130, 26134, 0, 26138, 26143, - 26148, 26152, 26156, 26161, 26166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26171, 26175, 26179, 26183, 26187, 26192, 26197, 26202, 26207, 26211, - 26215, 26220, 26224, 26228, 26232, 26237, 26242, 26246, 26250, 26255, - 26260, 26265, 26271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26276, 26280, 26284, - 26288, 26292, 26297, 26302, 26307, 26312, 26316, 26320, 26325, 26329, - 26333, 26337, 26342, 26347, 26351, 26355, 26360, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 26365, 26369, 26373, 26377, 26381, 26386, 26391, 26396, - 26401, 26405, 26409, 26414, 26418, 0, 26422, 26427, 26432, 0, 26436, - 26441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26446, 26449, 26453, 26457, - 26461, 26465, 26469, 26473, 26477, 26481, 26485, 26489, 26493, 26497, - 26501, 26505, 26509, 26513, 26516, 26520, 26524, 26528, 26532, 26536, - 26540, 26544, 26548, 26552, 26556, 26560, 26564, 26568, 26571, 26574, - 26578, 26582, 26588, 26594, 26600, 26606, 26612, 26618, 26624, 26630, - 26636, 26642, 26648, 26654, 26660, 26666, 26675, 26684, 26690, 26696, - 26702, 26707, 26711, 26716, 26721, 26726, 26730, 26735, 26740, 26745, - 26749, 26754, 26758, 26763, 26768, 26773, 26778, 26782, 26786, 26790, - 26794, 26798, 26802, 26806, 26810, 26814, 26818, 26824, 26828, 26832, - 26836, 26840, 26844, 26852, 26858, 26862, 26868, 26872, 26878, 26882, 0, - 0, 26886, 26890, 26893, 26896, 26899, 26902, 26905, 26908, 26911, 26914, - 0, 0, 0, 0, 0, 0, 26917, 26925, 26933, 26941, 26949, 26957, 26965, 26973, - 26981, 26989, 0, 0, 0, 0, 0, 0, 26997, 27000, 27003, 27006, 27011, 27014, - 27019, 27026, 27034, 27039, 27046, 27049, 27056, 27063, 27070, 0, 27074, - 27078, 27081, 27084, 27087, 27090, 27093, 27096, 27099, 27102, 0, 0, 0, - 0, 0, 0, 27105, 27108, 27111, 27114, 27117, 27120, 27124, 27128, 27132, - 27135, 27139, 27143, 27146, 27150, 27154, 27157, 27161, 27164, 27168, - 27172, 27176, 27180, 27184, 27187, 27190, 27194, 27198, 27201, 27205, - 27209, 27213, 27217, 27221, 27225, 27229, 27233, 27240, 27245, 27250, - 27255, 27260, 27266, 27272, 27278, 27284, 27289, 27295, 27301, 27306, - 27312, 27318, 27324, 27330, 27336, 27341, 27347, 27352, 27358, 27364, - 27370, 27376, 27382, 27387, 27392, 27398, 27404, 27409, 27415, 27420, - 27426, 27431, 27436, 27442, 27448, 27454, 27460, 27466, 27472, 27478, - 27484, 27490, 27496, 27502, 27508, 27513, 27518, 27523, 27529, 0, 0, 0, - 0, 0, 0, 0, 0, 27535, 27544, 27553, 27561, 27569, 27579, 27587, 27596, - 27603, 27610, 27617, 27625, 27633, 27641, 27649, 27657, 27665, 27673, - 27681, 27688, 27696, 27704, 27712, 27720, 27728, 27738, 27748, 27758, - 27768, 27778, 27788, 27798, 27808, 27818, 27828, 27838, 27848, 27858, - 27868, 27876, 27884, 27894, 27902, 0, 0, 0, 0, 0, 27912, 27916, 27920, - 27924, 27928, 27932, 27936, 27940, 27944, 27948, 27952, 27956, 27960, - 27964, 27968, 27972, 27976, 27980, 27984, 27988, 27992, 27996, 28000, - 28004, 28010, 28014, 28020, 28024, 28030, 28034, 28040, 28044, 28048, - 28052, 28056, 28060, 28064, 28070, 28076, 28082, 28088, 28093, 28099, - 28105, 28111, 28117, 28123, 28129, 28136, 28142, 28147, 28152, 28156, - 28160, 28164, 28168, 28172, 28176, 28180, 28186, 28192, 28198, 28203, - 28210, 28215, 28220, 28226, 28231, 28238, 28245, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28252, 28258, 28262, 28267, 28272, 28277, 28282, 28287, 28292, - 28297, 28302, 28307, 28312, 28317, 28322, 28327, 28331, 28335, 28340, - 28345, 28350, 28354, 28358, 28362, 28367, 28372, 28377, 28382, 28386, 0, - 0, 0, 28390, 28395, 28400, 28405, 28411, 28417, 28423, 28429, 28434, - 28439, 28445, 28451, 0, 0, 0, 0, 28458, 28463, 28469, 28475, 28481, - 28486, 28491, 28496, 28501, 28507, 28512, 28517, 0, 0, 0, 0, 28522, 0, 0, - 0, 28527, 28532, 28537, 28542, 28546, 28550, 28554, 28558, 28562, 28566, - 28570, 28574, 28578, 28583, 28589, 28595, 28601, 28606, 28611, 28617, - 28623, 28629, 28634, 28640, 28645, 28651, 28657, 28662, 28668, 28674, - 28680, 28685, 28690, 28695, 28701, 28707, 28712, 28718, 28723, 28729, - 28734, 28740, 0, 0, 28746, 28752, 28758, 28764, 28770, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 28776, 28783, 28790, 28796, 28803, 28810, 28816, 28823, - 28830, 28837, 28843, 28849, 28856, 28862, 28868, 28875, 28882, 28888, - 28895, 28902, 28908, 28914, 28921, 28927, 28933, 28940, 28946, 28953, - 28960, 28967, 28974, 28981, 28988, 28994, 29001, 29008, 29014, 29021, - 29028, 29035, 29042, 29049, 29056, 29063, 0, 0, 0, 0, 29070, 29078, - 29085, 29092, 29098, 29105, 29111, 29118, 29124, 29131, 29138, 29145, - 29152, 29159, 29166, 29173, 29180, 29187, 29194, 29201, 29208, 29214, - 29221, 29228, 29235, 29241, 0, 0, 0, 0, 0, 0, 29247, 29253, 29258, 29263, - 29268, 29273, 29278, 29283, 29288, 29293, 29298, 0, 0, 0, 29304, 29310, - 29316, 29320, 29326, 29332, 29338, 29344, 29350, 29356, 29362, 29368, - 29374, 29380, 29386, 29392, 29398, 29404, 29410, 29414, 29420, 29426, - 29432, 29438, 29444, 29450, 29456, 29462, 29468, 29474, 29480, 29486, - 29492, 29498, 29504, 29508, 29513, 29518, 29523, 29527, 29532, 29536, - 29541, 29546, 29551, 29555, 29560, 29565, 29570, 29575, 29580, 29584, - 29588, 29593, 29598, 29602, 29606, 29610, 29615, 29620, 29625, 29630, 0, - 0, 29636, 29640, 29647, 29652, 29658, 29664, 29669, 29675, 29681, 29686, - 29692, 29698, 29704, 29709, 29715, 29720, 29725, 29731, 29736, 29742, - 29747, 29753, 29759, 29765, 29771, 29775, 29780, 29785, 29791, 29797, - 29802, 29808, 29814, 29818, 29823, 29828, 29832, 29837, 29842, 29847, - 29852, 29858, 29864, 29869, 29874, 29879, 29883, 29888, 29892, 29897, - 29901, 29906, 29911, 29916, 29921, 29927, 29933, 29940, 29950, 29959, - 29966, 29972, 29982, 29987, 29993, 0, 29998, 30003, 30008, 30016, 30022, - 30030, 30035, 30041, 30047, 30053, 30058, 30064, 30069, 30076, 30082, - 30087, 30093, 30099, 30105, 30112, 30119, 30126, 30131, 30136, 30143, - 30150, 30157, 30164, 30171, 0, 0, 30178, 30185, 30192, 30198, 30204, - 30210, 30216, 30222, 30228, 30234, 30240, 0, 0, 0, 0, 0, 0, 30246, 30252, - 30257, 30262, 30267, 30272, 30277, 30282, 30287, 30292, 0, 0, 0, 0, 0, 0, - 30297, 30302, 30307, 30312, 30317, 30322, 30327, 30336, 30343, 30348, - 30353, 30358, 30363, 30368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30373, 30379, - 30385, 30389, 30393, 30397, 30401, 30407, 30411, 30417, 30421, 30427, - 30433, 30441, 30447, 30455, 30459, 30463, 30467, 30473, 30476, 30482, - 30486, 30492, 30496, 30500, 30506, 30510, 30516, 30520, 30526, 30534, - 30542, 30550, 30556, 30560, 30566, 30570, 30576, 30579, 30582, 30588, - 30592, 30598, 30601, 30604, 30607, 30611, 30615, 30621, 30627, 30630, - 30633, 30637, 30642, 30647, 30654, 30659, 30666, 30673, 30682, 30689, - 30698, 30703, 30710, 30717, 30726, 30731, 30738, 30743, 30749, 30755, - 30761, 30767, 30773, 30779, 0, 0, 0, 0, 30785, 30789, 30792, 30795, - 30798, 30801, 30804, 30807, 30810, 30813, 30816, 30819, 30822, 30825, - 30830, 30835, 30840, 30843, 30848, 30853, 30858, 30863, 30870, 30875, - 30880, 30885, 30890, 30897, 30903, 30909, 30915, 30921, 30927, 30936, - 30945, 30951, 30957, 30965, 30973, 30982, 30991, 30999, 31007, 31016, - 31025, 0, 0, 0, 31033, 31037, 31041, 31045, 31048, 31051, 31054, 31058, - 31061, 31064, 31068, 31071, 31075, 31079, 31083, 31087, 31091, 31095, - 31099, 31103, 31107, 31110, 31113, 31117, 31121, 31125, 31128, 31131, - 31134, 31138, 31142, 31145, 31149, 31152, 31157, 31162, 31167, 31172, - 31177, 31182, 31187, 31192, 31197, 31201, 31205, 31211, 31218, 31222, - 31226, 31230, 31233, 31236, 31239, 31242, 31245, 31248, 31251, 31254, - 31257, 31260, 31264, 31268, 31272, 31277, 31281, 31285, 31291, 31295, - 31301, 31307, 31312, 31319, 31323, 31329, 31333, 31339, 31344, 31351, - 31358, 31363, 31370, 31375, 31380, 31384, 31390, 31394, 31400, 31407, - 31414, 31418, 31424, 31430, 31434, 31440, 31445, 31450, 31457, 31462, - 31467, 31472, 31477, 31481, 31485, 31490, 31495, 31502, 31508, 31513, - 31520, 31525, 31532, 31537, 31546, 31552, 31558, 31562, 0, 0, 0, 0, 0, 0, - 0, 0, 31566, 31575, 31582, 31589, 31596, 31599, 31603, 31607, 31611, - 31615, 31619, 31623, 31627, 31631, 31635, 31639, 31643, 31647, 31650, - 31653, 31657, 31661, 31665, 31669, 31673, 31677, 31680, 31684, 31688, - 31692, 31696, 31699, 31702, 31706, 31709, 31713, 31717, 31720, 31724, - 31728, 31731, 31736, 31741, 31746, 31750, 31754, 31759, 31763, 31768, - 31772, 31777, 31781, 31785, 31790, 31795, 31799, 31804, 31809, 31814, - 31818, 0, 0, 0, 31822, 31827, 31836, 31841, 31848, 31853, 31857, 31860, - 31863, 31866, 31869, 31872, 31875, 31878, 31881, 0, 0, 0, 31884, 31888, - 31892, 31896, 31903, 31909, 31915, 31921, 31927, 31933, 31939, 31945, - 31951, 31957, 31964, 31971, 31978, 31985, 31992, 31999, 32006, 32013, - 32020, 32027, 32034, 32041, 32048, 32055, 32062, 32069, 32076, 32083, - 32090, 32097, 32104, 32111, 32118, 32125, 32132, 32139, 32146, 32153, - 32160, 32167, 32175, 32183, 32191, 32197, 32203, 32209, 32217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32226, 32233, 32240, 32247, 32254, - 32263, 32272, 32281, 0, 0, 0, 0, 0, 0, 0, 0, 32290, 32295, 32300, 32305, - 32310, 32319, 32330, 32339, 32350, 32356, 32369, 32375, 32382, 32389, - 32394, 32400, 32406, 32417, 32426, 32433, 32440, 32449, 32456, 32465, - 32475, 32485, 32492, 32499, 32506, 32516, 32521, 32529, 32535, 32543, - 32552, 32557, 32564, 32570, 32575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32580, - 32585, 32591, 32598, 32606, 32612, 32618, 32624, 32629, 32636, 32642, - 32648, 32654, 32662, 32667, 32675, 32680, 32686, 32692, 32699, 32707, - 32714, 32720, 32727, 32734, 32740, 32747, 32754, 32760, 32765, 32771, - 32779, 32787, 32793, 32799, 32805, 32811, 32819, 32823, 32829, 32835, - 32841, 32847, 32853, 32859, 32863, 32868, 32873, 32880, 32885, 32889, - 32895, 32900, 32905, 32909, 32914, 32919, 32923, 32927, 32932, 32939, - 32943, 32948, 32953, 32957, 32962, 32966, 32971, 32975, 32981, 32986, - 32993, 32998, 33003, 33007, 33012, 33017, 33024, 33029, 33035, 33040, - 33044, 33049, 33053, 33058, 33065, 33072, 33077, 33082, 33086, 33092, - 33098, 33103, 33108, 33113, 33119, 33124, 33130, 33135, 33141, 33147, - 33153, 33160, 33167, 33174, 33181, 33188, 33195, 33200, 33208, 33217, - 33226, 33235, 33244, 33253, 33262, 33274, 33283, 33292, 33301, 33308, - 33313, 33320, 33328, 33336, 33343, 33350, 33357, 33364, 33372, 33381, - 33390, 33399, 33408, 33417, 33426, 33435, 33444, 33453, 33462, 33471, - 33480, 33489, 33498, 33506, 33515, 33526, 33534, 33543, 33554, 33563, - 33572, 33581, 33590, 33598, 33607, 33614, 33619, 33627, 33632, 33639, - 33644, 33653, 33659, 33666, 33673, 33678, 33683, 33691, 33699, 33708, - 33717, 33722, 33729, 33740, 33748, 33757, 33763, 33769, 33774, 33781, - 33786, 33795, 33800, 33805, 33810, 33817, 33824, 33829, 33838, 33846, - 33851, 33856, 33863, 33870, 33874, 33878, 33881, 33884, 33887, 33890, - 33893, 33896, 33903, 33906, 33909, 33914, 33918, 33922, 33926, 33930, - 33934, 33943, 33949, 33955, 33961, 33969, 33977, 33983, 33989, 33996, - 34002, 34007, 34013, 34019, 34025, 34032, 34038, 34046, 34052, 34059, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34065, 34072, - 34079, 34084, 34093, 34101, 34109, 34116, 34123, 34130, 34137, 34145, - 34153, 34163, 34173, 34181, 34189, 34197, 34205, 34214, 34223, 34231, - 34239, 34248, 34257, 34267, 34277, 34286, 34295, 34303, 34311, 34319, - 34327, 34337, 34347, 34355, 34363, 34371, 34379, 34387, 34395, 34403, - 34411, 34419, 34427, 34435, 34443, 34452, 34461, 34470, 34479, 34489, - 34499, 34506, 34513, 34521, 34529, 34538, 34547, 34555, 34563, 34575, - 34587, 34596, 34605, 34614, 34623, 34630, 34637, 34645, 34653, 34661, - 34669, 34677, 34685, 34693, 34701, 34710, 34719, 34728, 34737, 34746, - 34755, 34765, 34775, 34785, 34795, 34804, 34813, 34820, 34827, 34835, - 34843, 34851, 34859, 34867, 34875, 34887, 34899, 34908, 34917, 34925, - 34933, 34941, 34949, 34960, 34971, 34982, 34993, 35005, 35017, 35025, - 35033, 35041, 35049, 35058, 35067, 35076, 35085, 35093, 35101, 35109, - 35117, 35125, 35133, 35142, 35151, 35161, 35171, 35178, 35185, 35193, - 35201, 35209, 35217, 35224, 35231, 35239, 35247, 35255, 35263, 35271, - 35279, 35287, 35295, 35303, 35311, 35319, 35327, 35335, 35343, 35351, - 35359, 35368, 35377, 35386, 35394, 35403, 35412, 35421, 35430, 35440, - 35449, 35456, 35461, 35468, 35475, 35483, 35491, 35500, 35509, 35519, - 35529, 35540, 35551, 35560, 35569, 35579, 35589, 35598, 35607, 35617, - 35627, 35638, 35649, 35658, 35667, 35677, 35687, 35694, 35701, 35709, - 35717, 35723, 35729, 35738, 35747, 35757, 35767, 35778, 35789, 35798, - 35807, 35817, 35827, 35836, 35845, 35853, 35861, 35868, 35875, 35883, - 35891, 35900, 35909, 35919, 35929, 35940, 35951, 35960, 35969, 35979, - 35989, 35998, 36007, 36017, 36027, 36038, 36049, 36058, 36067, 36077, - 36087, 36094, 36101, 36109, 36117, 36126, 36135, 36145, 36155, 36166, - 36177, 36186, 36195, 36205, 36215, 36223, 36231, 36239, 36247, 36256, - 36265, 36272, 36279, 36286, 36293, 36300, 36307, 36315, 36323, 36331, - 36339, 36350, 36361, 36372, 36383, 36394, 36405, 36413, 36421, 36432, - 36443, 36454, 36465, 36476, 36487, 36495, 36503, 36514, 36525, 36536, 0, - 0, 36547, 36555, 36563, 36574, 36585, 36596, 0, 0, 36607, 36615, 36623, - 36634, 36645, 36656, 36667, 36678, 36689, 36697, 36705, 36716, 36727, - 36738, 36749, 36760, 36771, 36779, 36787, 36798, 36809, 36820, 36831, - 36842, 36853, 36861, 36869, 36880, 36891, 36902, 36913, 36924, 36935, - 36943, 36951, 36962, 36973, 36984, 0, 0, 36995, 37003, 37011, 37022, - 37033, 37044, 0, 0, 37055, 37063, 37071, 37082, 37093, 37104, 37115, - 37126, 0, 37137, 0, 37145, 0, 37156, 0, 37167, 37178, 37186, 37194, - 37205, 37216, 37227, 37238, 37249, 37260, 37268, 37276, 37287, 37298, - 37309, 37320, 37331, 37342, 37350, 37358, 37366, 37374, 37382, 37390, - 37398, 37406, 37414, 37422, 37430, 37438, 37446, 0, 0, 37454, 37465, - 37476, 37490, 37504, 37518, 37532, 37546, 37560, 37571, 37582, 37596, - 37610, 37624, 37638, 37652, 37666, 37677, 37688, 37702, 37716, 37730, - 37744, 37758, 37772, 37783, 37794, 37808, 37822, 37836, 37850, 37864, - 37878, 37889, 37900, 37914, 37928, 37942, 37956, 37970, 37984, 37995, - 38006, 38020, 38034, 38048, 38062, 38076, 38090, 38098, 38106, 38117, - 38125, 0, 38136, 38144, 38155, 38163, 38171, 38179, 38187, 38195, 38198, - 38201, 38204, 38207, 38213, 38224, 38232, 0, 38243, 38251, 38262, 38270, - 38278, 38286, 38294, 38302, 38308, 38314, 38320, 38328, 38336, 38347, 0, - 0, 38358, 38366, 38377, 38385, 38393, 38401, 0, 38409, 38415, 38421, - 38427, 38435, 38443, 38454, 38465, 38473, 38481, 38489, 38500, 38508, - 38516, 38524, 38532, 38540, 38546, 38552, 0, 0, 38555, 38566, 38574, 0, - 38585, 38593, 38604, 38612, 38620, 38628, 38636, 38644, 38647, 0, 38650, - 38654, 38658, 38662, 38666, 38670, 38674, 38678, 38682, 38686, 38690, - 38694, 38700, 38706, 38712, 38715, 38718, 38720, 38724, 38728, 38732, - 38736, 38738, 38742, 38746, 38752, 38758, 38765, 38772, 38777, 38782, - 38788, 38794, 38796, 38799, 38801, 38805, 38809, 38813, 38816, 38820, - 38824, 38828, 38832, 38836, 38842, 38846, 38850, 38856, 38861, 38868, - 38870, 38873, 38877, 38881, 38886, 38892, 38894, 38903, 38912, 38915, - 38919, 38921, 38923, 38925, 38928, 38934, 38936, 38940, 38944, 38951, - 38958, 38962, 38967, 38972, 38977, 38982, 38986, 38990, 38993, 38997, - 39001, 39008, 39013, 39017, 39021, 39026, 39030, 39034, 39039, 39044, - 39048, 39052, 39056, 39058, 39063, 39068, 39072, 39076, 39080, 39084, 0, - 39088, 39092, 39096, 39102, 39108, 39114, 39120, 39127, 39134, 39139, - 39144, 39148, 0, 0, 39154, 39157, 39160, 39163, 39166, 39169, 39172, - 39176, 39180, 39185, 39190, 39195, 39202, 39206, 39209, 39212, 39215, - 39218, 39221, 39224, 39227, 39230, 39233, 39237, 39241, 39246, 39251, 0, - 39256, 39262, 39268, 39274, 39281, 39288, 39295, 39302, 39308, 39314, - 39321, 39328, 39335, 0, 0, 0, 39342, 39345, 39348, 39351, 39356, 39359, - 39362, 39365, 39368, 39371, 39374, 39378, 39381, 39384, 39387, 39390, - 39393, 39398, 39401, 39404, 39407, 39410, 39413, 39418, 39421, 39424, - 39429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 39434, 39439, 39444, 39451, 39459, 39464, 39469, 39473, 39477, 39482, - 39489, 39496, 39500, 39505, 39510, 39515, 39520, 39527, 39532, 39537, - 39542, 39551, 39558, 39565, 39569, 39574, 39580, 39585, 39592, 39601, - 39610, 39614, 39618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39622, - 39626, 39634, 39638, 39642, 39647, 39651, 39655, 39659, 39661, 39665, - 39669, 39673, 39678, 39682, 39686, 39694, 39697, 39701, 39704, 39707, - 39713, 39717, 39720, 39726, 39730, 39734, 39738, 39741, 39745, 39748, - 39752, 39754, 39757, 39760, 39764, 39766, 39770, 39773, 39776, 39781, - 39786, 39793, 39796, 39799, 39803, 39808, 39811, 39814, 39817, 39821, - 39826, 39829, 39832, 39834, 39837, 39840, 39843, 39847, 39852, 39855, - 39859, 39863, 39867, 39871, 39876, 39882, 39887, 39892, 39898, 39903, - 39908, 39912, 39916, 39921, 39925, 39929, 39932, 39934, 39939, 39945, - 39952, 39959, 39966, 39973, 39980, 39987, 39994, 40001, 40009, 40016, - 40024, 40031, 40038, 40046, 40054, 40059, 40064, 40069, 40074, 40079, - 40084, 40089, 40094, 40099, 40104, 40110, 40116, 40122, 40128, 40135, - 40143, 40150, 40156, 40162, 40168, 40174, 40180, 40186, 40192, 40198, - 40204, 40211, 40218, 40225, 40232, 40240, 40249, 40257, 40268, 40276, - 40284, 40293, 40300, 40309, 40318, 40326, 40335, 0, 0, 0, 0, 0, 0, 40343, - 40345, 40348, 40350, 40353, 40356, 40359, 40364, 40369, 40374, 40379, - 40383, 40387, 40391, 40395, 40400, 40406, 40411, 40417, 40422, 40427, - 40432, 40438, 40443, 40449, 40455, 40459, 40463, 40468, 40473, 40478, - 40483, 40488, 40496, 40504, 40512, 40520, 40527, 40535, 40542, 40549, - 40558, 40570, 40576, 40582, 40590, 40598, 40607, 40616, 40624, 40632, - 40641, 40650, 40655, 40663, 40668, 40673, 40679, 40684, 40690, 40697, - 40704, 40709, 40715, 40720, 40723, 40727, 40730, 40734, 40738, 40742, - 40748, 40754, 40760, 40766, 40770, 40774, 40778, 40782, 40788, 40794, - 40798, 40803, 40807, 40812, 40817, 40822, 40825, 40829, 40832, 40836, - 40843, 40851, 40862, 40873, 40878, 40887, 40894, 40903, 40912, 40916, - 40922, 40930, 40934, 40939, 40944, 40950, 40956, 40962, 40969, 40973, - 40977, 40982, 40985, 40987, 40991, 40995, 41003, 41007, 41009, 41011, - 41015, 41023, 41028, 41034, 41044, 41051, 41056, 41060, 41064, 41068, - 41071, 41074, 41077, 41081, 41085, 41089, 41093, 41097, 41100, 41104, - 41108, 41111, 41113, 41116, 41118, 41122, 41126, 41128, 41134, 41137, - 41142, 41146, 41150, 41152, 41154, 41156, 41159, 41163, 41167, 41171, - 41175, 41179, 41185, 41191, 41193, 41195, 41197, 41199, 41202, 41204, - 41208, 41210, 41214, 41217, 41223, 41227, 41231, 41234, 41237, 41241, - 41247, 41251, 41261, 41271, 41275, 41281, 41287, 41290, 41294, 41297, - 41302, 41306, 41312, 41316, 41328, 41336, 41340, 41344, 41350, 41354, - 41357, 41359, 41362, 41366, 41370, 41377, 41381, 41385, 41389, 41392, - 41397, 41402, 41407, 41412, 41417, 41422, 41430, 41438, 41442, 41446, - 41448, 41453, 41457, 41461, 41469, 41477, 41483, 41489, 41498, 41507, - 41512, 41517, 41525, 41533, 41535, 41537, 41542, 41547, 41553, 41559, - 41565, 41571, 41575, 41579, 41586, 41593, 41599, 41605, 41615, 41625, - 41633, 41641, 41643, 41647, 41651, 41656, 41661, 41668, 41675, 41678, - 41681, 41684, 41687, 41690, 41695, 41699, 41704, 41709, 41712, 41715, - 41718, 41721, 41724, 41728, 41731, 41734, 41737, 41740, 41742, 41744, - 41746, 41748, 41756, 41764, 41770, 41774, 41780, 41790, 41796, 41802, - 41808, 41816, 41824, 41835, 41839, 41843, 41845, 41851, 41853, 41855, - 41857, 41859, 41865, 41868, 41874, 41880, 41884, 41888, 41892, 41895, - 41899, 41903, 41905, 41914, 41923, 41928, 41933, 41939, 41945, 41951, - 41954, 41957, 41960, 41963, 41965, 41970, 41975, 41980, 41986, 41992, - 42000, 42008, 42014, 42020, 42026, 42032, 42041, 42050, 42059, 42068, - 42077, 42086, 42095, 42104, 42113, 42122, 42130, 42142, 42152, 42167, - 42170, 42175, 42181, 42187, 42194, 42208, 42223, 42229, 42235, 42242, - 42248, 42256, 42262, 42275, 42289, 42294, 42300, 42307, 42310, 42313, - 42315, 42318, 42321, 42323, 42325, 42329, 42332, 42335, 42338, 42341, - 42346, 42351, 42356, 42361, 42366, 42369, 42371, 42373, 42375, 42379, - 42383, 42387, 42393, 42398, 42400, 42402, 42407, 42412, 42417, 42422, - 42427, 42432, 42434, 42436, 42445, 42449, 42457, 42466, 42468, 42473, - 42478, 42486, 42490, 42492, 42496, 42498, 42502, 42506, 42510, 42512, - 42514, 42516, 42523, 42532, 42541, 42550, 42559, 42568, 42577, 42586, - 42595, 42603, 42611, 42620, 42629, 42638, 42647, 42655, 42663, 42672, - 42681, 42690, 42700, 42709, 42719, 42728, 42738, 42747, 42757, 42767, - 42776, 42786, 42795, 42805, 42814, 42824, 42833, 42842, 42851, 42860, - 42869, 42879, 42888, 42897, 42906, 42916, 42925, 42934, 42943, 42952, - 42962, 42972, 42981, 42990, 42998, 43006, 43013, 43021, 43030, 43041, - 43050, 43059, 43068, 43075, 43082, 43089, 43098, 43107, 43116, 43125, - 43132, 43137, 43146, 43151, 43154, 43162, 43165, 43170, 43175, 43178, - 43181, 43189, 43192, 43197, 43200, 43207, 43212, 43220, 43223, 43226, - 43229, 43234, 43239, 43242, 43245, 43253, 43256, 43263, 43270, 43274, - 43278, 43283, 43288, 43294, 43299, 43305, 43311, 43316, 43322, 43330, - 43336, 43344, 43352, 43358, 43366, 43374, 43383, 43391, 43397, 43405, - 43414, 43422, 43426, 43431, 43444, 43457, 43461, 43465, 43469, 43473, - 43483, 43487, 43492, 43497, 43502, 43507, 43512, 43517, 43527, 43537, - 43545, 43555, 43565, 43573, 43583, 43593, 43601, 43611, 43621, 43629, - 43637, 43647, 43657, 43660, 43663, 43666, 43671, 43675, 43681, 43688, - 43695, 43703, 43710, 43714, 43718, 43722, 43726, 43728, 43732, 43736, - 43741, 43746, 43753, 43760, 43763, 43770, 43772, 43774, 43778, 43782, - 43787, 43793, 43799, 43805, 43811, 43820, 43829, 43838, 43842, 43844, - 43848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43855, 43859, 43866, 43873, - 43880, 43887, 43891, 43895, 43899, 43903, 43908, 43914, 43919, 43925, - 43931, 43937, 43943, 43951, 43958, 43965, 43972, 43979, 43984, 43990, - 43999, 44003, 44010, 44014, 44018, 44024, 44030, 44036, 44042, 44046, - 44050, 44053, 44056, 44060, 44067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44074, 44077, 44081, 44085, 44091, - 44097, 44103, 44111, 44118, 44122, 44130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44135, 44138, 44141, 44144, 44147, - 44150, 44153, 44156, 44159, 44162, 44166, 44170, 44174, 44178, 44182, - 44186, 44190, 44194, 44198, 44202, 44206, 44209, 44212, 44215, 44218, - 44221, 44224, 44227, 44230, 44233, 44237, 44241, 44245, 44249, 44253, - 44257, 44261, 44265, 44269, 44273, 44277, 44283, 44289, 44295, 44302, - 44309, 44316, 44323, 44330, 44337, 44344, 44351, 44358, 44365, 44372, - 44379, 44386, 44393, 44400, 44407, 44414, 44419, 44425, 44431, 44437, - 44442, 44448, 44454, 44460, 44465, 44471, 44477, 44482, 44487, 44493, - 44498, 44504, 44510, 44515, 44521, 44527, 44532, 44538, 44544, 44550, - 44556, 44562, 44567, 44573, 44579, 44585, 44590, 44596, 44602, 44608, - 44613, 44619, 44625, 44630, 44635, 44641, 44646, 44652, 44658, 44663, - 44669, 44675, 44680, 44686, 44692, 44698, 44704, 44710, 44715, 44721, - 44727, 44733, 44738, 44744, 44750, 44756, 44761, 44767, 44773, 44778, - 44783, 44789, 44794, 44800, 44806, 44811, 44817, 44823, 44828, 44834, - 44840, 44846, 44852, 44858, 44862, 44867, 44872, 44877, 44882, 44887, - 44892, 44897, 44902, 44907, 44912, 44916, 44920, 44924, 44928, 44932, - 44936, 44940, 44944, 44948, 44953, 44958, 44963, 44968, 44973, 44978, - 44987, 44996, 45005, 45014, 45023, 45032, 45041, 45050, 45057, 45065, - 45073, 45080, 45087, 45095, 45103, 45110, 45117, 45125, 45133, 45140, - 45147, 45155, 45163, 45170, 45177, 45185, 45194, 45203, 45211, 45220, - 45229, 45236, 45243, 45251, 45260, 45269, 45277, 45286, 45295, 45302, - 45309, 45318, 45327, 45335, 45343, 45352, 45361, 45368, 45375, 45384, - 45393, 45401, 45409, 45418, 45427, 45434, 45441, 45450, 45459, 45467, - 45476, 45485, 45493, 45503, 45513, 45523, 45533, 45542, 45551, 45560, - 45569, 45576, 45584, 45592, 45600, 45608, 45613, 45618, 45627, 45635, - 45642, 45651, 45659, 45666, 45675, 45683, 45690, 45699, 45707, 45714, - 45723, 45731, 45738, 45747, 45755, 45762, 45771, 45779, 45786, 45795, - 45803, 45810, 45819, 45827, 45834, 45843, 45852, 45861, 45870, 45884, - 45898, 45905, 45910, 45915, 45920, 45925, 45930, 45935, 45940, 45945, - 45953, 45961, 45969, 45977, 45982, 45989, 45996, 46003, 46008, 46016, - 46023, 46031, 46035, 46042, 46048, 46055, 46059, 46065, 46071, 46077, - 46081, 46084, 46088, 46092, 46099, 46105, 46111, 46117, 46123, 46137, - 46147, 46161, 46175, 46181, 46191, 46205, 46208, 46211, 46218, 46226, - 46231, 46236, 46244, 46256, 46268, 46276, 46280, 46284, 46287, 46290, - 46294, 46298, 46301, 46304, 46309, 46314, 46320, 46326, 46331, 46336, - 46342, 46348, 46353, 46358, 46363, 46368, 46374, 46380, 46385, 46390, - 46396, 46402, 46407, 46412, 46415, 46418, 46427, 46429, 46431, 46434, - 46438, 46444, 46446, 46449, 46456, 46463, 46471, 46479, 46489, 46503, - 46508, 46513, 46517, 46522, 46530, 46538, 46547, 46556, 46565, 46574, - 46579, 46584, 46590, 46596, 46602, 46608, 46611, 46617, 46623, 46633, - 46643, 46651, 46659, 46668, 46677, 46681, 46689, 46697, 46705, 46713, - 46722, 46731, 46740, 46749, 46754, 46759, 46764, 46769, 46774, 46780, - 46786, 46791, 46797, 46799, 46801, 46803, 46805, 46808, 46811, 46813, - 46815, 46817, 46821, 46825, 46827, 46829, 46832, 46835, 46839, 46845, - 46851, 46853, 46860, 46864, 46869, 46874, 46876, 46886, 46892, 46898, - 46904, 46910, 46916, 46922, 46927, 46930, 46933, 46936, 46938, 46940, - 46944, 46948, 46953, 46958, 46963, 46966, 46970, 46975, 46978, 46982, - 46987, 46992, 46997, 47002, 47007, 47012, 47017, 47022, 47027, 47032, - 47037, 47042, 47048, 47054, 47060, 47062, 47065, 47067, 47070, 47072, - 47074, 47076, 47078, 47080, 47082, 47084, 47086, 47088, 47090, 47092, - 47094, 47096, 47098, 47100, 47102, 47104, 47109, 47114, 47119, 47124, - 47129, 47134, 47139, 47144, 47149, 47154, 47159, 47164, 47169, 47174, - 47179, 47184, 47189, 47194, 47199, 47204, 47208, 47212, 47216, 47222, - 47228, 47233, 47238, 47243, 47248, 47253, 47258, 47266, 47274, 47282, - 47290, 47298, 47306, 47314, 47322, 47328, 47333, 47338, 47343, 47346, - 47350, 47354, 47358, 47362, 47366, 47370, 47377, 47384, 47392, 47400, - 47405, 47410, 47417, 47424, 47431, 47438, 47441, 47444, 47449, 47451, - 47455, 47460, 47462, 47464, 47466, 47468, 47473, 47476, 47478, 47483, - 47490, 47497, 47500, 47504, 47509, 47514, 47522, 47528, 47534, 47546, - 47553, 47560, 47565, 47570, 47576, 47579, 47582, 47587, 47589, 47593, - 47595, 47597, 47599, 47601, 47603, 47605, 47610, 47612, 47614, 47616, - 47618, 47622, 47624, 47627, 47632, 47637, 47642, 47647, 47653, 47659, - 47661, 47664, 47671, 47678, 47685, 47692, 47696, 47700, 47702, 47704, - 47708, 47714, 47719, 47721, 47725, 47734, 47742, 47750, 47756, 47762, - 47767, 47773, 47778, 47781, 47795, 47798, 47803, 47808, 47814, 47824, - 47826, 47832, 47838, 47842, 47849, 47853, 47855, 47857, 47861, 47867, - 47872, 47878, 47880, 47886, 47888, 47894, 47896, 47898, 47903, 47905, - 47909, 47914, 47916, 47921, 47926, 47930, 47937, 0, 47947, 47953, 47956, - 47962, 47965, 47970, 47975, 47979, 47981, 47983, 47987, 47991, 47995, - 47999, 48004, 48006, 48011, 48014, 48017, 48020, 48024, 48028, 48033, - 48037, 48042, 48047, 48051, 48056, 48062, 48065, 48071, 48076, 48080, - 48085, 48091, 48097, 48104, 48110, 48117, 48124, 48126, 48133, 48137, - 48143, 48149, 48154, 48160, 48164, 48169, 48172, 48177, 48183, 48190, - 48198, 48205, 48214, 48224, 48231, 48237, 48241, 48248, 48253, 48262, - 48265, 48268, 48277, 48287, 48294, 48296, 48302, 48307, 48309, 48312, - 48316, 48324, 48333, 48336, 48341, 48346, 48354, 48362, 48370, 48378, - 48384, 48390, 48396, 48404, 48409, 48412, 48416, 48419, 48431, 48441, - 48452, 48461, 48472, 48482, 48491, 48497, 48505, 48509, 48517, 48521, - 48529, 48536, 48543, 48552, 48561, 48571, 48581, 48591, 48601, 48610, - 48619, 48629, 48639, 48648, 48657, 48663, 48669, 48675, 48681, 48687, - 48693, 48699, 48705, 48711, 48718, 48724, 48730, 48736, 48742, 48748, - 48754, 48760, 48766, 48772, 48779, 48786, 48793, 48800, 48807, 48814, - 48821, 48828, 48835, 48842, 48850, 48855, 48858, 48862, 48866, 48872, - 48875, 48881, 48887, 48892, 48896, 48901, 48907, 48914, 48917, 48924, - 48931, 48935, 48944, 48953, 48958, 48964, 48969, 48974, 48981, 48988, - 48996, 49004, 49013, 49017, 49026, 49031, 49035, 49042, 49046, 49053, - 49061, 49066, 49074, 49078, 49083, 49087, 49092, 49096, 49101, 49106, - 49115, 49117, 49120, 49123, 49130, 49137, 49142, 49150, 49156, 49162, - 49167, 49170, 49175, 49180, 49185, 49193, 49197, 49204, 49212, 49220, - 49225, 49230, 49236, 49241, 49246, 49252, 49257, 49260, 49264, 49268, - 49275, 49284, 49289, 49298, 49307, 49313, 49319, 49324, 49329, 49334, - 49339, 49345, 49351, 49359, 49367, 49373, 49379, 49384, 49389, 49396, - 49403, 49409, 49412, 49415, 49419, 49423, 49427, 49432, 49438, 49444, - 49451, 49458, 49463, 49467, 49471, 49475, 49479, 49483, 49487, 49491, - 49495, 49499, 49503, 49507, 49511, 49515, 49519, 49523, 49527, 49531, - 49535, 49539, 49543, 49547, 49551, 49555, 49559, 49563, 49567, 49571, - 49575, 49579, 49583, 49587, 49591, 49595, 49599, 49603, 49607, 49611, - 49615, 49619, 49623, 49627, 49631, 49635, 49639, 49643, 49647, 49651, - 49655, 49659, 49663, 49667, 49671, 49675, 49679, 49683, 49687, 49691, - 49695, 49699, 49703, 49707, 49711, 49715, 49719, 49723, 49727, 49731, - 49735, 49739, 49743, 49747, 49751, 49755, 49759, 49763, 49767, 49771, - 49775, 49779, 49783, 49787, 49791, 49795, 49799, 49803, 49807, 49811, - 49815, 49819, 49823, 49827, 49831, 49835, 49839, 49843, 49847, 49851, - 49855, 49859, 49863, 49867, 49871, 49875, 49879, 49883, 49887, 49891, - 49895, 49899, 49903, 49907, 49911, 49915, 49919, 49923, 49927, 49931, - 49935, 49939, 49943, 49947, 49951, 49955, 49959, 49963, 49967, 49971, - 49975, 49979, 49983, 49987, 49991, 49995, 49999, 50003, 50007, 50011, - 50015, 50019, 50023, 50027, 50031, 50035, 50039, 50043, 50047, 50051, - 50055, 50059, 50063, 50067, 50071, 50075, 50079, 50083, 50087, 50091, - 50095, 50099, 50103, 50107, 50111, 50115, 50119, 50123, 50127, 50131, - 50135, 50139, 50143, 50147, 50151, 50155, 50159, 50163, 50167, 50171, - 50175, 50179, 50183, 50187, 50191, 50195, 50199, 50203, 50207, 50211, - 50215, 50219, 50223, 50227, 50231, 50235, 50239, 50243, 50247, 50251, - 50255, 50259, 50263, 50267, 50271, 50275, 50279, 50283, 50287, 50291, - 50295, 50299, 50303, 50307, 50311, 50315, 50319, 50323, 50327, 50331, - 50335, 50339, 50343, 50347, 50351, 50355, 50359, 50363, 50367, 50371, - 50375, 50379, 50383, 50387, 50391, 50395, 50399, 50403, 50407, 50411, - 50415, 50419, 50423, 50427, 50431, 50435, 50439, 50443, 50447, 50451, - 50455, 50459, 50463, 50467, 50471, 50475, 50479, 50483, 50487, 50494, - 50502, 50508, 50514, 50521, 50528, 50534, 50540, 50546, 50552, 50557, - 50562, 50567, 50572, 50578, 50584, 50592, 50599, 50605, 50611, 50619, - 50628, 50635, 50645, 50656, 50659, 50662, 50666, 50670, 50677, 50684, - 50695, 50706, 50716, 50726, 50733, 50740, 50747, 50754, 50765, 50776, - 50787, 50798, 50808, 50818, 50830, 50842, 50853, 50864, 50876, 50888, - 50897, 50907, 50917, 50928, 50939, 50946, 50953, 50960, 50967, 50977, - 50987, 50995, 51003, 51010, 51017, 51024, 51031, 51038, 51043, 51048, - 51054, 51062, 51072, 51082, 51092, 51102, 51112, 51122, 51132, 51142, - 51152, 51162, 51172, 51183, 51194, 51204, 51214, 51225, 51236, 51246, - 51256, 51267, 51278, 51288, 51298, 51309, 51320, 51336, 51355, 51371, - 51390, 51406, 51422, 51438, 51454, 51465, 51477, 51488, 51500, 51519, - 51538, 51546, 51552, 51559, 51566, 51573, 51580, 51585, 51591, 51596, - 51601, 51607, 51612, 51617, 51622, 51627, 51632, 51639, 51644, 51651, - 51656, 51661, 51665, 51669, 51676, 51683, 51690, 51697, 51704, 51711, - 51724, 51737, 51750, 51763, 51771, 51779, 51785, 51791, 51798, 51805, - 51812, 51819, 51823, 51828, 51836, 51844, 51852, 51859, 51863, 51871, - 51879, 51883, 51887, 51892, 51899, 51907, 51915, 51934, 51953, 51972, - 51991, 52010, 52029, 52048, 52067, 52073, 52080, 52089, 52097, 52105, - 52110, 52113, 52116, 52121, 52124, 52143, 52150, 52156, 52162, 52166, - 52169, 52172, 52175, 52187, 52200, 52207, 52214, 52217, 52221, 52224, - 52229, 52234, 52239, 52245, 52254, 52261, 52268, 52276, 52283, 52290, - 52293, 52299, 52305, 52308, 52311, 52316, 52321, 52327, 52333, 52337, - 52342, 52349, 52353, 52359, 52363, 52367, 52375, 52387, 52396, 52400, - 52402, 52411, 52420, 52426, 52429, 52435, 52441, 52446, 52451, 52456, - 52461, 52466, 52471, 52473, 52479, 52484, 52491, 52495, 52501, 52504, - 52508, 52515, 52522, 52524, 52526, 52532, 52538, 52544, 52553, 52562, - 52569, 52576, 52582, 52588, 52593, 52598, 52603, 52609, 52615, 52620, - 52627, 52631, 52635, 52648, 52661, 52673, 52682, 52688, 52695, 52700, - 52705, 52710, 52715, 52720, 52722, 52729, 52736, 52743, 52750, 52757, - 52765, 52771, 52776, 52782, 52788, 52794, 52801, 52807, 52815, 52823, - 52831, 52839, 52846, 52852, 52858, 52867, 52871, 52880, 52889, 52898, - 52906, 52910, 52916, 52923, 52930, 52934, 52940, 52947, 52952, 52957, - 52963, 52968, 52973, 52980, 52987, 52992, 52997, 53005, 53013, 53023, - 53033, 53040, 53047, 53051, 53055, 53067, 53073, 53079, 53084, 53089, - 53096, 53103, 53109, 53115, 53124, 53132, 53140, 53147, 53154, 53161, - 53167, 53174, 53180, 53187, 53194, 53201, 53208, 53214, 53219, 53228, - 53238, 53245, 53254, 53260, 53265, 53270, 53280, 53286, 53292, 53298, - 53306, 53311, 53318, 53325, 53336, 53343, 53350, 53357, 53364, 53371, - 53378, 53385, 53397, 53409, 53420, 53431, 53444, 53457, 53462, 53467, - 53476, 53485, 53492, 53499, 53508, 53517, 53525, 53533, 53541, 53549, - 53559, 53569, 53583, 53597, 53605, 53613, 53625, 53637, 53645, 53653, - 53663, 53673, 53678, 53683, 53692, 53701, 53706, 53711, 53719, 53725, - 53731, 53739, 53747, 53760, 53773, 53777, 53781, 53788, 53795, 53802, - 53810, 53818, 53827, 53836, 53842, 53848, 53855, 53862, 53869, 53876, - 53885, 53894, 53897, 53900, 53905, 53910, 53916, 53922, 53929, 53936, - 53946, 53956, 53963, 53970, 53978, 53986, 53994, 54002, 54010, 54018, - 54024, 54030, 54034, 54038, 54045, 54052, 54057, 54062, 54067, 54072, - 54078, 54092, 54099, 54106, 54110, 54112, 54114, 54119, 54124, 54129, - 54134, 54142, 54149, 54156, 54164, 54176, 54184, 54192, 54203, 54207, - 54211, 54217, 54225, 54238, 54245, 54252, 54259, 54264, 54271, 54280, - 54288, 54294, 54300, 54306, 54315, 54324, 54332, 54341, 54346, 54349, - 54354, 54360, 54366, 54372, 54378, 54382, 54385, 54389, 54393, 54399, - 54405, 54411, 54417, 54421, 54425, 54432, 54439, 54446, 54453, 54460, - 54467, 54477, 54487, 54494, 54501, 54509, 54517, 54521, 54526, 54531, - 54537, 54543, 54546, 54549, 54552, 54555, 54559, 54564, 54569, 54574, - 54579, 54584, 54588, 54592, 54596, 54600, 54604, 54608, 54612, 54618, - 54622, 54628, 54633, 54640, 54648, 54655, 54663, 54670, 54678, 54687, - 54694, 54704, 54715, 54721, 54730, 54736, 54745, 54754, 54760, 54766, - 54770, 54774, 54783, 54792, 54799, 54806, 54815, 0, 0, 0, 54824, 54829, - 54833, 54837, 54842, 54847, 54852, 54860, 54868, 54871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54875, 54880, 54885, - 54890, 54895, 54900, 54905, 54910, 54915, 54920, 54925, 54931, 54935, - 54940, 54945, 54950, 54955, 54960, 54965, 54970, 54975, 54980, 54985, - 54990, 54995, 55000, 55005, 55010, 55015, 55020, 55025, 55030, 55035, - 55040, 55045, 55051, 55056, 55062, 55071, 55076, 55084, 55091, 55100, - 55105, 55110, 55115, 55121, 0, 55128, 55133, 55138, 55143, 55148, 55153, - 55158, 55163, 55168, 55173, 55178, 55184, 55188, 55193, 55198, 55203, - 55208, 55213, 55218, 55223, 55228, 55233, 55238, 55243, 55248, 55253, - 55258, 55263, 55268, 55273, 55278, 55283, 55288, 55293, 55298, 55304, - 55309, 55315, 55324, 55329, 55337, 55344, 55353, 55358, 55363, 55368, - 55374, 0, 55381, 55389, 55397, 55406, 55413, 55421, 55427, 55436, 55444, - 55452, 55460, 55468, 55476, 55484, 55489, 55496, 55502, 55509, 55517, - 55524, 55531, 55539, 55545, 55551, 55558, 55565, 55575, 55585, 55592, - 55599, 55604, 55614, 55624, 55629, 55634, 55639, 55644, 55649, 55654, - 55659, 55664, 55669, 55674, 55679, 55684, 55689, 55694, 55699, 55704, - 55709, 55714, 55719, 55724, 55729, 55734, 55739, 55744, 55749, 55754, - 55759, 55764, 55769, 55774, 55778, 55782, 55787, 55792, 55797, 55802, - 55807, 55812, 55817, 55822, 55827, 55832, 55837, 55842, 55847, 55852, - 55857, 55862, 55867, 55872, 55879, 55886, 55893, 55900, 55907, 55914, - 55921, 55928, 55935, 55942, 55949, 55956, 55963, 55970, 55975, 55980, - 55987, 55994, 56001, 56008, 56015, 56022, 56029, 56036, 56043, 56050, - 56057, 56064, 56070, 56076, 56082, 56088, 56095, 56102, 56109, 56116, - 56123, 56130, 56137, 56144, 56151, 56158, 56166, 56174, 56182, 56190, - 56198, 56206, 56214, 56222, 56226, 56232, 56238, 56242, 56248, 56254, - 56260, 56267, 56274, 56281, 56288, 56293, 56299, 56305, 56312, 0, 0, 0, - 0, 0, 56319, 56327, 56336, 56345, 56353, 56359, 56364, 56369, 56374, - 56379, 56384, 56389, 56394, 56399, 56404, 56409, 56414, 56419, 56424, - 56429, 56434, 56439, 56444, 56449, 56454, 56459, 56464, 56469, 56474, - 56479, 56484, 56489, 56494, 56499, 56504, 56509, 56514, 56519, 56524, - 56529, 56534, 56539, 56544, 56549, 56554, 0, 56559, 0, 0, 0, 0, 0, 56564, - 0, 0, 56569, 56573, 56578, 56583, 56588, 56593, 56602, 56607, 56612, - 56617, 56622, 56627, 56632, 56637, 56642, 56649, 56654, 56659, 56668, - 56675, 56680, 56685, 56690, 56697, 56702, 56709, 56714, 56719, 56726, - 56733, 56738, 56743, 56748, 56755, 56762, 56767, 56772, 56777, 56782, - 56787, 56794, 56801, 56806, 56811, 56816, 56821, 56826, 56831, 56836, - 56841, 56846, 56851, 56856, 56863, 56868, 56873, 0, 0, 0, 0, 0, 0, 0, - 56878, 56885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56890, 56895, - 56899, 56903, 56907, 56911, 56915, 56919, 56923, 56927, 56931, 56935, - 56941, 56945, 56949, 56953, 56957, 56961, 56965, 56969, 56973, 56977, - 56981, 56985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56989, 56993, 56997, 57001, - 57005, 57009, 57013, 0, 57017, 57021, 57025, 57029, 57033, 57037, 57041, - 0, 57045, 57049, 57053, 57057, 57061, 57065, 57069, 0, 57073, 57077, - 57081, 57085, 57089, 57093, 57097, 0, 57101, 57105, 57109, 57113, 57117, - 57121, 57125, 0, 57129, 57133, 57137, 57141, 57145, 57149, 57153, 0, - 57157, 57161, 57165, 57169, 57173, 57177, 57181, 0, 57185, 57189, 57193, - 57197, 57201, 57205, 57209, 0, 57213, 57218, 57223, 57228, 57233, 57238, - 57243, 57247, 57252, 57257, 57262, 57266, 57271, 57276, 57281, 57286, - 57290, 57295, 57300, 57305, 57310, 57315, 57320, 57324, 57329, 57334, - 57341, 57346, 57351, 57357, 57364, 57371, 57380, 57387, 57396, 57400, - 57404, 57410, 57416, 57422, 57430, 57436, 57440, 57444, 57448, 57454, - 57460, 57464, 57466, 57470, 57476, 57478, 57482, 57486, 57490, 57496, - 57501, 57505, 57509, 57514, 57520, 57525, 57530, 57535, 57540, 57547, - 57554, 57559, 57564, 57569, 57574, 57579, 57584, 57588, 57592, 57599, - 57606, 57612, 57616, 57621, 57623, 57627, 57635, 57639, 57643, 57647, - 57651, 57657, 57663, 57667, 57673, 57677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57681, 57685, 57689, 57694, 57699, 57704, - 57708, 57712, 57716, 57721, 57726, 57730, 57734, 57738, 57742, 57747, - 57752, 57757, 57762, 57766, 57770, 57775, 57780, 57785, 57790, 57794, 0, - 57798, 57802, 57806, 57810, 57814, 57818, 57822, 57827, 57832, 57836, - 57841, 57846, 57855, 57859, 57863, 57867, 57874, 57878, 57883, 57888, - 57892, 57896, 57902, 57907, 57912, 57917, 57922, 57926, 57930, 57934, - 57938, 57942, 57947, 57952, 57956, 57960, 57965, 57970, 57975, 57979, - 57983, 57988, 57993, 57999, 58005, 58009, 58015, 58021, 58025, 58031, - 58037, 58042, 58047, 58051, 58057, 58061, 58065, 58071, 58077, 58082, - 58087, 58091, 58095, 58103, 58109, 58115, 58121, 58126, 58131, 58136, - 58142, 58146, 58152, 58156, 58160, 58166, 58172, 58178, 58184, 58190, - 58196, 58202, 58208, 58214, 58220, 58226, 58232, 58236, 58242, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 58248, 58251, 58255, 58259, 58263, 58267, - 58270, 58273, 58277, 58281, 58285, 58289, 58292, 58297, 58301, 58305, - 58309, 58314, 58318, 58322, 58326, 58330, 58336, 58342, 58346, 58350, - 58354, 58358, 58362, 58366, 58370, 58374, 58378, 58382, 58386, 58392, - 58396, 58400, 58404, 58408, 58412, 58416, 58420, 58424, 58428, 58432, - 58436, 58440, 58444, 58448, 58452, 58456, 58462, 58468, 58473, 58478, - 58482, 58486, 58490, 58494, 58498, 58502, 58506, 58510, 58514, 58518, - 58522, 58526, 58530, 58534, 58538, 58542, 58546, 58550, 58554, 58558, - 58562, 58566, 58570, 58574, 58580, 58584, 58588, 58592, 58596, 58600, - 58604, 58608, 58612, 58617, 58624, 58628, 58632, 58636, 58640, 58644, - 58648, 58652, 58656, 58660, 58664, 58668, 58672, 58679, 58683, 58689, - 58693, 58697, 58701, 58705, 58709, 58712, 58716, 58720, 58724, 58728, - 58732, 58736, 58740, 58744, 58748, 58752, 58756, 58760, 58764, 58768, - 58772, 58776, 58780, 58784, 58788, 58792, 58796, 58800, 58804, 58808, - 58812, 58816, 58820, 58824, 58828, 58832, 58836, 58840, 58846, 58850, - 58854, 58858, 58862, 58866, 58870, 58874, 58878, 58882, 58886, 58890, - 58894, 58898, 58902, 58906, 58910, 58914, 58918, 58922, 58926, 58930, - 58934, 58938, 58942, 58946, 58950, 58954, 58962, 58966, 58970, 58974, - 58978, 58982, 58988, 58992, 58996, 59000, 59004, 59008, 59012, 59016, - 59020, 59024, 59028, 59032, 59036, 59040, 59046, 59050, 59054, 59058, - 59062, 59066, 59070, 59074, 59078, 59082, 59086, 59090, 59094, 59098, - 59102, 59106, 59110, 59114, 59118, 59122, 59126, 59130, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59134, 59143, - 59151, 59163, 59174, 59182, 59191, 59200, 59210, 59222, 59234, 59246, 0, - 0, 0, 0, 59252, 59255, 59258, 59263, 59266, 59273, 59277, 59281, 59285, - 59289, 59293, 59298, 59303, 59307, 59311, 59316, 59321, 59326, 59331, - 59334, 59337, 59343, 59349, 59354, 59359, 59366, 59373, 59377, 59381, - 59385, 59393, 59399, 59406, 59411, 59416, 59421, 59426, 59431, 59436, - 59441, 59446, 59451, 59456, 59461, 59466, 59471, 59476, 59482, 59487, - 59491, 59497, 59508, 59518, 59533, 59543, 59547, 59557, 59563, 59569, - 59575, 59580, 59583, 59588, 59592, 0, 59598, 59602, 59605, 59609, 59612, - 59616, 59619, 59623, 59626, 59630, 59633, 59636, 59640, 59644, 59648, - 59652, 59656, 59660, 59664, 59668, 59672, 59675, 59679, 59683, 59687, - 59691, 59695, 59699, 59703, 59707, 59711, 59715, 59719, 59723, 59727, - 59732, 59736, 59740, 59744, 59748, 59751, 59755, 59758, 59762, 59766, - 59770, 59774, 59777, 59781, 59784, 59788, 59792, 59796, 59800, 59804, - 59808, 59812, 59816, 59820, 59824, 59828, 59832, 59835, 59839, 59843, - 59847, 59851, 59855, 59858, 59863, 59867, 59872, 59876, 59879, 59883, - 59887, 59891, 59895, 59900, 59904, 59908, 59912, 59916, 59920, 59924, - 59928, 0, 0, 59933, 59941, 59949, 59956, 59963, 59967, 59973, 59978, - 59983, 59987, 59990, 59994, 59997, 60001, 60004, 60008, 60011, 60015, - 60018, 60021, 60025, 60029, 60033, 60037, 60041, 60045, 60049, 60053, - 60057, 60060, 60064, 60068, 60072, 60076, 60080, 60084, 60088, 60092, - 60096, 60100, 60104, 60108, 60112, 60117, 60121, 60125, 60129, 60133, - 60136, 60140, 60143, 60147, 60151, 60155, 60159, 60162, 60166, 60169, - 60173, 60177, 60181, 60185, 60189, 60193, 60197, 60201, 60205, 60209, - 60213, 60217, 60220, 60224, 60228, 60232, 60236, 60240, 60243, 60248, - 60252, 60257, 60261, 60264, 60268, 60272, 60276, 60280, 60285, 60289, - 60293, 60297, 60301, 60305, 60309, 60313, 60318, 60322, 60326, 60330, - 60334, 60339, 60346, 60350, 60356, 0, 0, 0, 0, 0, 60361, 60366, 60371, - 60375, 60380, 60385, 60390, 60395, 60399, 60404, 60409, 60414, 60419, - 60424, 60429, 60434, 60439, 60444, 60448, 60453, 60458, 60463, 60467, - 60471, 60475, 60480, 60485, 60490, 60495, 60500, 60505, 60510, 60515, - 60520, 60525, 60529, 60533, 60538, 60543, 60548, 60553, 0, 0, 0, 60558, - 60562, 60566, 60570, 60574, 60578, 60582, 60586, 60590, 60594, 60598, - 60602, 60606, 60610, 60614, 60618, 60622, 60626, 60630, 60634, 60638, - 60642, 60646, 60650, 60654, 60658, 60662, 60666, 60670, 60674, 60678, - 60681, 60685, 60688, 60692, 60696, 60699, 60703, 60707, 60710, 60714, - 60718, 60722, 60726, 60729, 60733, 60737, 60741, 60745, 60749, 60753, - 60756, 60759, 60763, 60767, 60771, 60775, 60779, 60783, 60787, 60791, - 60795, 60799, 60803, 60807, 60811, 60815, 60819, 60823, 60827, 60831, - 60835, 60839, 60843, 60847, 60851, 60855, 60859, 60863, 60867, 60871, - 60875, 60879, 60883, 60887, 60891, 60895, 60899, 60903, 60907, 60911, - 60915, 60919, 60923, 0, 60927, 60933, 60939, 60944, 60949, 60954, 60960, - 60966, 60972, 60978, 60984, 60990, 60996, 61002, 61008, 61014, 61020, - 61025, 61030, 61035, 61040, 61045, 61050, 61055, 61060, 61065, 61070, - 61075, 61080, 61085, 61090, 61095, 61100, 61105, 61110, 61115, 61120, - 61126, 61132, 61138, 61144, 61149, 61154, 0, 0, 0, 0, 0, 61159, 61164, - 61169, 61174, 61179, 61184, 61189, 61194, 61199, 61204, 61209, 61214, - 61219, 61224, 61229, 61234, 61239, 61244, 61249, 61254, 61259, 61264, - 61269, 61274, 61279, 61284, 61289, 61294, 61299, 61304, 61309, 61314, - 61319, 61324, 61329, 61334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61339, - 61344, 61349, 61354, 61358, 61363, 61367, 61372, 61377, 61382, 61387, - 61392, 61396, 61401, 61406, 61411, 61416, 61420, 61424, 61428, 61432, - 61436, 61440, 61444, 61448, 61452, 61456, 61460, 61464, 61468, 61472, - 61477, 61482, 61487, 61492, 61497, 61502, 61507, 61512, 61517, 61522, - 61527, 61532, 61537, 61542, 61547, 61553, 0, 61560, 61563, 61566, 61569, - 61572, 61575, 61578, 61581, 61584, 61587, 61591, 61595, 61599, 61603, - 61607, 61611, 61615, 61619, 61623, 61627, 61631, 61635, 61639, 61643, - 61647, 61651, 61655, 61659, 61663, 61667, 61671, 61675, 61679, 61683, - 61687, 61691, 61695, 61699, 61703, 61707, 61711, 61720, 61729, 61738, - 61747, 61756, 61765, 61774, 61783, 61786, 61791, 61796, 61801, 61806, - 61811, 61816, 61821, 61826, 61831, 61835, 61840, 61845, 61850, 61855, - 61860, 61864, 61868, 61872, 61876, 61880, 61884, 61888, 61892, 61896, - 61900, 61904, 61908, 61912, 61916, 61921, 61926, 61931, 61936, 61941, - 61946, 61951, 61956, 61961, 61966, 61971, 61976, 61981, 61986, 61992, - 61998, 62003, 62008, 62011, 62014, 62017, 62020, 62023, 62026, 62029, - 62032, 62035, 62039, 62043, 62047, 62051, 62055, 62059, 62063, 62067, - 62071, 62075, 62079, 62083, 62087, 62091, 62095, 62099, 62103, 62107, - 62111, 62115, 62119, 62123, 62127, 62131, 62135, 62139, 62143, 62147, - 62151, 62155, 62159, 62163, 62167, 62171, 62175, 62179, 62183, 62187, - 62191, 62195, 62200, 62205, 62210, 62215, 62219, 62224, 62229, 62234, - 62239, 62244, 62249, 62254, 62259, 62264, 62268, 62275, 62282, 62289, - 62296, 62303, 62310, 62317, 62324, 62331, 62338, 62345, 62352, 62355, - 62358, 62361, 62366, 62369, 62372, 62375, 62378, 62381, 62384, 62388, - 62392, 62396, 62400, 62403, 62407, 62411, 62415, 62419, 62423, 62427, - 62431, 62435, 62438, 62441, 62445, 62449, 62453, 62457, 62460, 62464, - 62468, 62472, 62476, 62479, 62483, 62487, 62491, 62495, 62498, 62502, - 62506, 62509, 62513, 62517, 62521, 62525, 62529, 62533, 62537, 0, 62541, - 62544, 62547, 62550, 62553, 62556, 62559, 62562, 62565, 62568, 62571, - 62574, 62577, 62580, 62583, 62586, 62589, 62592, 62595, 62598, 62601, - 62604, 62607, 62610, 62613, 62616, 62619, 62622, 62625, 62628, 62631, - 62634, 62637, 62640, 62643, 62646, 62649, 62652, 62655, 62658, 62661, - 62664, 62667, 62670, 62673, 62676, 62679, 62682, 62685, 62688, 62691, - 62694, 62697, 62700, 62703, 62706, 62709, 62712, 62715, 62718, 62721, - 62724, 62727, 62730, 62733, 62736, 62739, 62742, 62745, 62748, 62751, - 62754, 62757, 62760, 62763, 62766, 62769, 62772, 62775, 62778, 62781, - 62784, 62787, 62790, 62793, 62796, 62799, 62802, 62805, 62814, 62822, - 62830, 62838, 62846, 62854, 62862, 62870, 62878, 62886, 62895, 62904, - 62913, 62922, 62931, 62940, 62949, 62958, 62967, 62976, 62985, 62994, - 63003, 63012, 63021, 63024, 63027, 63030, 63032, 63035, 63038, 63041, - 63046, 63051, 63054, 63061, 63068, 63075, 63082, 63085, 63090, 63092, - 63096, 63098, 63100, 63103, 63106, 63109, 63112, 63115, 63118, 63121, - 63126, 63131, 63134, 63137, 63140, 63143, 63146, 63149, 63152, 63156, - 63159, 63162, 63165, 63168, 63171, 63175, 63178, 63181, 63184, 63189, - 63194, 63199, 63204, 63209, 63214, 63219, 63224, 63230, 63238, 63240, - 63243, 63246, 63249, 63252, 63258, 63266, 63269, 63272, 63277, 63280, - 63283, 63286, 63291, 63294, 63297, 63302, 63305, 63308, 63313, 63316, - 63319, 63324, 63329, 63334, 63337, 63340, 63343, 63346, 63352, 63355, - 63358, 63361, 63363, 63366, 63369, 63372, 63377, 63380, 63383, 63386, - 63389, 63392, 63397, 63400, 63403, 63406, 63409, 63412, 63415, 63418, - 63421, 63424, 63429, 63433, 63441, 63449, 63457, 63465, 63473, 63481, - 63489, 63497, 63505, 63514, 63523, 63532, 63541, 63550, 63559, 63568, - 63577, 63586, 63595, 63604, 63613, 63622, 63631, 63640, 63649, 63658, - 63667, 63676, 63685, 63694, 63703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63706, 63715, 63724, 63735, 63742, 63747, 63752, 63759, 63766, - 63772, 63777, 63782, 63787, 63792, 63799, 63804, 63809, 63814, 63825, - 63830, 63835, 63842, 63847, 63854, 63859, 63864, 63871, 63878, 63885, - 63894, 63903, 63908, 63913, 63918, 63925, 63930, 63940, 63947, 63952, - 63957, 63962, 63967, 63972, 63977, 63986, 63993, 64000, 64005, 64012, - 64017, 64024, 64033, 64044, 64049, 64058, 64063, 64070, 64079, 64088, - 64093, 64098, 64105, 64111, 64118, 64125, 64129, 64133, 64136, 64140, - 64144, 64148, 64152, 64156, 64160, 64164, 64167, 64171, 64175, 64179, - 64183, 64187, 64191, 64194, 64198, 64202, 64205, 64209, 64213, 64217, - 64221, 64225, 64229, 64233, 64237, 64241, 64245, 64249, 64253, 64257, - 64261, 64265, 64269, 64273, 64277, 64281, 64285, 64289, 64293, 64297, - 64301, 64305, 64309, 64313, 64317, 64321, 64325, 64329, 64333, 64337, - 64341, 64345, 64349, 64353, 64357, 64361, 64365, 64369, 64373, 64377, - 64381, 64384, 64388, 64392, 64396, 64400, 64404, 64408, 64412, 64416, - 64420, 64424, 64428, 64432, 64436, 64440, 64444, 64448, 64452, 64456, - 64460, 64464, 64468, 64472, 64476, 64480, 64484, 64488, 64492, 64496, - 64500, 64504, 64508, 64512, 64516, 64520, 64524, 64528, 64532, 64536, - 64540, 64544, 64548, 64552, 64556, 64560, 64564, 64568, 64572, 64576, - 64580, 64584, 64588, 64592, 64596, 64600, 64604, 64608, 64612, 64616, - 64620, 64624, 64628, 64632, 64636, 64640, 64644, 64648, 64652, 64656, - 64660, 64664, 64668, 64672, 64676, 64680, 64684, 64688, 64692, 64696, - 64700, 64704, 64708, 64712, 64716, 64720, 64724, 64728, 64732, 64736, - 64740, 64744, 64748, 64752, 64756, 64760, 64764, 64768, 64772, 64776, - 64780, 64784, 64788, 64792, 64796, 64800, 64804, 64808, 64812, 64816, - 64820, 64824, 64828, 64832, 64836, 64840, 64844, 64848, 64852, 64855, - 64859, 64863, 64867, 64871, 64875, 64879, 64883, 64887, 64891, 64895, - 64899, 64903, 64907, 64911, 64915, 64919, 64923, 64927, 64931, 64935, - 64939, 64943, 64947, 64951, 64955, 64959, 64963, 64967, 64971, 64975, - 64979, 64983, 64987, 64991, 64995, 64999, 65003, 65007, 65011, 65015, - 65019, 65023, 65027, 65031, 65035, 65039, 65043, 65047, 65051, 65055, - 65059, 65063, 65067, 65071, 65075, 65079, 65083, 65087, 65091, 65095, - 65099, 65103, 65107, 65111, 65115, 65119, 65123, 65127, 65131, 65135, - 65139, 65143, 65147, 65151, 65155, 65159, 65163, 65167, 65171, 65175, - 65179, 65183, 65187, 65191, 65195, 65199, 65203, 65207, 65211, 65215, - 65219, 65223, 65227, 65231, 65235, 65239, 65243, 65247, 65251, 65255, - 65259, 65263, 65267, 65271, 65275, 65279, 65283, 65287, 65291, 65295, - 65299, 65303, 65307, 65311, 65315, 65318, 65322, 65326, 65330, 65334, - 65338, 65342, 65346, 65350, 65354, 65358, 65362, 65366, 65370, 65374, - 65378, 65382, 65386, 65390, 65394, 65398, 65402, 65406, 65410, 65414, - 65418, 65422, 65426, 65430, 65434, 65438, 65442, 65446, 65450, 65454, - 65458, 65462, 65466, 65470, 65474, 65478, 65482, 65486, 65490, 65494, - 65498, 65502, 65506, 65510, 65514, 65518, 65522, 65526, 65530, 65534, - 65538, 65542, 65546, 65550, 65554, 65558, 65562, 65566, 65570, 65574, - 65578, 65582, 65586, 65590, 65594, 65598, 65602, 65606, 65610, 65614, - 65618, 65622, 65626, 65630, 65634, 65638, 65642, 65646, 65650, 65654, - 65658, 65662, 65666, 65670, 65674, 65677, 65681, 65685, 65689, 65693, - 65697, 65701, 65705, 65709, 65713, 65717, 65721, 65725, 65729, 65733, - 65737, 65741, 65745, 65749, 65753, 65757, 65761, 65765, 65769, 65773, - 65777, 65781, 65785, 65789, 65793, 65797, 65801, 65805, 65809, 65813, - 65817, 65821, 65825, 65829, 65833, 65837, 65841, 65845, 65849, 65853, - 65857, 65861, 65865, 65869, 65873, 65877, 65881, 65885, 65889, 65893, - 65897, 65901, 65905, 65909, 65913, 65917, 65921, 65925, 65929, 65933, - 65937, 65941, 65945, 65949, 65953, 65957, 65961, 65965, 65969, 65973, - 65977, 65981, 65985, 65989, 65993, 65997, 66001, 66005, 66009, 66013, - 66017, 66021, 66025, 66029, 66033, 66037, 66041, 66045, 66049, 66053, - 66057, 66061, 66065, 66069, 66073, 66077, 66081, 66085, 66089, 66093, - 66097, 66101, 66105, 66109, 66113, 66117, 66121, 66125, 66129, 66133, - 66137, 66141, 66145, 66149, 66153, 66157, 66161, 66165, 66169, 66172, - 66176, 66180, 66184, 66188, 66192, 66196, 66200, 66204, 66208, 66212, - 66216, 66220, 66224, 66228, 66232, 66236, 66240, 66244, 66248, 66252, - 66256, 66260, 66264, 66268, 66272, 66276, 66280, 66284, 66288, 66292, - 66296, 66300, 66304, 66308, 66312, 66316, 66320, 66324, 66328, 66332, - 66336, 66340, 66344, 66348, 66352, 66356, 66360, 66364, 66368, 66372, - 66376, 66380, 66384, 66388, 66392, 66396, 66400, 66404, 66408, 66412, - 66416, 66420, 66424, 66428, 66432, 66436, 66440, 66444, 66448, 66452, - 66456, 66460, 66464, 66468, 66472, 66476, 66480, 66484, 66488, 66492, - 66496, 66500, 66504, 66508, 66512, 66516, 66520, 66524, 66528, 66532, - 66536, 66540, 66544, 66548, 66552, 66556, 66560, 66564, 66568, 66572, - 66576, 66580, 66584, 66588, 66592, 66596, 66600, 66604, 66608, 66612, - 66616, 66620, 66624, 66627, 66631, 66635, 66639, 66643, 66647, 66651, - 66655, 66659, 66663, 66667, 66671, 66675, 66679, 66683, 66687, 66691, - 66695, 66699, 66703, 66707, 66711, 66715, 66719, 66723, 66727, 66731, - 66735, 66739, 66743, 66747, 66751, 66755, 66759, 66763, 66767, 66771, - 66775, 66779, 66783, 66787, 66791, 66795, 66799, 66803, 66807, 66811, - 66815, 66819, 66823, 66827, 66831, 66835, 66839, 66843, 66847, 66851, - 66855, 66859, 66863, 66867, 66871, 66875, 66879, 66883, 66887, 66891, - 66895, 66899, 66903, 66907, 66911, 66915, 66919, 66923, 66927, 66931, - 66935, 66939, 66943, 66947, 66951, 66955, 66959, 66963, 66967, 66971, - 66975, 66979, 66983, 66987, 66991, 66995, 66999, 67003, 67007, 67011, - 67015, 67019, 67023, 67027, 67031, 67035, 67039, 67043, 67047, 67051, - 67055, 67059, 67063, 67067, 67071, 67075, 67079, 67083, 67087, 67091, - 67095, 67099, 67103, 67107, 67111, 67115, 67119, 67123, 67127, 67131, - 67135, 67139, 67143, 67147, 67151, 67155, 67159, 67163, 67167, 67171, - 67175, 67179, 67183, 67187, 67191, 67195, 67199, 67203, 67207, 67211, - 67215, 67219, 67223, 67227, 67230, 67234, 67238, 67242, 67246, 67250, - 67254, 67258, 67261, 67265, 67269, 67273, 67277, 67281, 67285, 67289, - 67293, 67297, 67301, 67305, 67309, 67313, 67317, 67321, 67325, 67329, - 67333, 67337, 67341, 67345, 67349, 67353, 67357, 67361, 67365, 67369, - 67373, 67377, 67381, 67385, 67389, 67393, 67397, 67401, 67405, 67409, - 67413, 67417, 67421, 67425, 67429, 67433, 67437, 67441, 67445, 67449, - 67453, 67457, 67461, 67465, 67469, 67473, 67477, 67481, 67485, 67489, - 67493, 67497, 67501, 67505, 67509, 67513, 67517, 67521, 67525, 67529, - 67533, 67537, 67541, 67545, 67549, 67553, 67557, 67561, 67565, 67569, - 67573, 67577, 67581, 67585, 67589, 67593, 67597, 67601, 67605, 67609, - 67613, 67617, 67621, 67625, 67629, 67633, 67637, 67641, 67645, 67649, - 67653, 67657, 67661, 67665, 67669, 67673, 67677, 67681, 67685, 67689, - 67693, 67697, 67701, 67705, 67709, 67713, 67717, 67721, 67725, 67729, - 67733, 67737, 67741, 67745, 67749, 67753, 67757, 67761, 67765, 67769, - 67773, 67777, 67781, 67785, 67789, 67793, 67797, 67801, 67805, 67809, - 67813, 67817, 67821, 67825, 67829, 67833, 67837, 67841, 67845, 67849, - 67853, 67857, 67861, 67865, 67869, 67873, 67877, 67881, 67885, 67889, - 67893, 67897, 67901, 67905, 67909, 67913, 67917, 67921, 67925, 67929, - 67933, 67937, 67941, 67945, 67949, 67953, 67957, 67961, 67965, 67969, - 67973, 67977, 67981, 67985, 67988, 67992, 67996, 68000, 68004, 68008, - 68012, 68016, 68020, 68024, 68028, 68032, 68036, 68040, 68044, 68048, - 68052, 68056, 68060, 68064, 68068, 68072, 68076, 68080, 68084, 68088, - 68092, 68096, 68100, 68104, 68108, 68112, 68116, 68120, 68124, 68128, - 68132, 68136, 68140, 68144, 68148, 68152, 68156, 68160, 68164, 68168, - 68172, 68176, 68180, 68184, 68188, 68192, 68196, 68200, 68204, 68208, - 68212, 68216, 68220, 68224, 68228, 68232, 68236, 68240, 68244, 68248, - 68252, 68256, 68260, 68264, 68268, 68272, 68276, 68280, 68284, 68288, - 68292, 68296, 68300, 68304, 68308, 68312, 68316, 68320, 68324, 68328, - 68332, 68336, 68340, 68344, 68348, 68352, 68356, 68360, 68364, 68368, - 68372, 68376, 68380, 68384, 68388, 68392, 68396, 68400, 68404, 68408, - 68412, 68416, 68420, 68424, 68428, 68432, 68436, 68440, 68444, 68448, - 68452, 68456, 68460, 68464, 68468, 68472, 68476, 68480, 68484, 68488, - 68492, 68496, 68500, 68504, 68508, 68512, 68516, 68520, 68524, 68528, - 68532, 68536, 68540, 68544, 68548, 68552, 68556, 68560, 68564, 68568, - 68572, 68576, 68580, 68584, 68588, 68592, 68596, 68600, 68604, 68608, - 68612, 68616, 68620, 68624, 68628, 68632, 68636, 68640, 68644, 68648, - 68652, 68656, 68660, 68664, 68668, 68672, 68676, 68680, 68684, 68688, - 68692, 68696, 68700, 68704, 68708, 68712, 68716, 68720, 68724, 68728, - 68732, 68736, 68740, 68744, 68748, 68752, 68756, 68760, 68764, 68768, 0, - 0, 0, 68772, 68776, 68780, 68784, 68788, 68792, 68796, 68800, 68804, - 68808, 68812, 68816, 68820, 68824, 68828, 68832, 68836, 68840, 68844, - 68848, 68852, 68856, 68860, 68864, 68868, 68872, 68876, 68880, 68884, - 68888, 68892, 68896, 68900, 68904, 68908, 68912, 68916, 68920, 68924, - 68928, 68932, 68936, 68940, 68944, 68948, 68952, 68956, 68960, 68964, - 68968, 68972, 68976, 68980, 68984, 68988, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68992, 68997, 69001, 69006, 69011, 69016, 69021, 69026, 69030, 69035, - 69040, 69045, 69050, 69055, 69060, 69065, 69069, 69073, 69078, 69082, - 69087, 69092, 69097, 69101, 69106, 69111, 69116, 69121, 69126, 69130, - 69135, 69139, 69144, 69148, 69153, 69157, 69161, 69165, 69170, 69175, - 69180, 69188, 69196, 69204, 69212, 69219, 69227, 69233, 69241, 69245, - 69249, 69253, 69257, 69261, 69265, 69269, 69273, 69277, 69281, 69285, - 69289, 69293, 69297, 69301, 69305, 69309, 69313, 69317, 69321, 69325, - 69329, 69333, 69337, 69341, 69345, 69349, 69353, 69357, 69361, 69365, - 69369, 69373, 69377, 69381, 69385, 69388, 69392, 69396, 69400, 69404, - 69408, 69412, 69416, 69420, 69424, 69428, 69432, 69436, 69440, 69444, - 69448, 69452, 69456, 69460, 69464, 69468, 69472, 69476, 69480, 69484, - 69488, 69492, 69496, 69500, 69504, 69508, 69512, 69516, 69520, 69524, - 69528, 69532, 69535, 69539, 69543, 69546, 69550, 69554, 69558, 69561, - 69565, 69569, 69573, 69577, 69581, 69585, 69589, 69593, 69597, 69601, - 69605, 69609, 69613, 69617, 69620, 69624, 69628, 69631, 69635, 69639, - 69643, 69647, 69651, 69655, 69658, 69661, 69665, 69669, 69673, 69676, - 69679, 69683, 69687, 69691, 69695, 69699, 69703, 69707, 69711, 69715, - 69719, 69723, 69727, 69731, 69735, 69739, 69743, 69747, 69751, 69755, - 69759, 69763, 69767, 69771, 69775, 69779, 69783, 69787, 69791, 69795, - 69799, 69803, 69807, 69811, 69815, 69819, 69823, 69827, 69830, 69834, - 69838, 69842, 69846, 69850, 69854, 69858, 69862, 69866, 69870, 69874, - 69878, 69882, 69886, 69890, 69894, 69898, 69902, 69906, 69910, 69914, - 69918, 69922, 69926, 69930, 69934, 69938, 69942, 69946, 69950, 69954, - 69958, 69962, 69966, 69970, 69974, 69977, 69981, 69985, 69989, 69993, - 69997, 70001, 70005, 70009, 70013, 70017, 70021, 70025, 70029, 70033, - 70037, 70041, 70044, 70048, 70052, 70056, 70060, 70064, 70068, 70072, - 70076, 70080, 70084, 70088, 70092, 70096, 70100, 70104, 70108, 70112, - 70116, 70120, 70124, 70128, 70131, 70135, 70139, 70143, 70147, 70151, - 70155, 70159, 70163, 70167, 70171, 70175, 70179, 70183, 70187, 70191, - 70195, 70199, 70203, 70207, 70211, 70215, 70219, 70223, 70227, 70231, - 70235, 70239, 70243, 70247, 70251, 70255, 70259, 70263, 70267, 70271, - 70275, 70279, 70283, 70287, 70291, 70295, 70299, 70303, 70306, 70311, - 70315, 70321, 70326, 70332, 70336, 70340, 70344, 70348, 70352, 70356, - 70360, 70364, 70368, 70372, 70376, 70380, 70384, 70388, 70391, 70394, - 70397, 70400, 70403, 70406, 70409, 70412, 70415, 70420, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70426, 70431, 70436, 70441, - 70446, 70453, 70460, 70465, 70470, 70475, 70480, 70487, 70494, 70501, - 70508, 70515, 70522, 70532, 70542, 70549, 70556, 70563, 70570, 70576, - 70582, 70591, 70600, 70607, 70614, 70625, 70636, 70641, 70646, 70653, - 70660, 70667, 70674, 70681, 70688, 70695, 70702, 70708, 70714, 70720, - 70726, 70733, 70740, 70745, 70749, 70756, 70763, 70770, 70774, 70781, - 70785, 70790, 70794, 70800, 70805, 70811, 70816, 70820, 70824, 70827, - 70830, 70835, 70840, 70845, 70850, 70855, 70860, 70865, 70870, 70875, - 70880, 70889, 70898, 70903, 70908, 70913, 70918, 70923, 70928, 70933, - 70938, 70943, 70948, 70953, 0, 0, 0, 0, 0, 0, 0, 70958, 70964, 70967, - 70970, 70973, 70977, 70981, 70985, 70989, 70992, 70996, 70999, 71003, - 71006, 71010, 71014, 71018, 71022, 71026, 71030, 71034, 71037, 71041, - 71045, 71049, 71053, 71057, 71061, 71065, 71069, 71073, 71077, 71081, - 71085, 71089, 71093, 71096, 71100, 71104, 71108, 71112, 71116, 71120, - 71124, 71128, 71132, 71136, 71140, 71144, 71148, 71152, 71156, 71160, - 71164, 71168, 71172, 71176, 71180, 71184, 71188, 71192, 71195, 71199, - 71203, 71207, 71211, 71215, 71219, 71223, 71226, 71230, 71234, 71238, - 71242, 71246, 71250, 71254, 71258, 71262, 71266, 71270, 71274, 71279, - 71284, 71287, 71292, 71295, 71298, 71301, 0, 0, 0, 0, 0, 0, 0, 0, 71305, - 71314, 71323, 71332, 71341, 71350, 71359, 71368, 71377, 71385, 71392, - 71400, 71407, 71415, 71425, 71434, 71444, 71453, 71463, 71471, 71478, - 71486, 71493, 71501, 71506, 71511, 71516, 71525, 71531, 71537, 71544, - 71553, 71561, 71569, 71577, 71584, 71591, 71598, 71605, 71610, 71615, - 71620, 71625, 71630, 71635, 71640, 71645, 71653, 71661, 71667, 71673, - 71678, 71683, 71688, 71693, 71698, 71703, 71708, 71713, 71721, 71729, - 71734, 71739, 71749, 71759, 71766, 71773, 71782, 71791, 71803, 71815, - 71821, 71827, 71835, 71843, 71853, 71863, 71870, 71877, 71882, 71887, - 71899, 71911, 71919, 71927, 71937, 71947, 71959, 71971, 71980, 71989, - 71996, 72003, 72010, 72017, 72026, 72035, 72040, 72045, 72052, 72059, - 72066, 72073, 72085, 72097, 72102, 72107, 72112, 72117, 72122, 72127, - 72132, 72137, 72141, 72146, 72151, 72156, 72161, 72166, 72172, 72177, - 72182, 72189, 72196, 72203, 72210, 72217, 72226, 72235, 72241, 72247, - 72253, 72259, 72266, 72273, 72280, 72287, 72294, 72298, 72305, 72310, - 72315, 72322, 0, 72335, 72343, 72351, 72358, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 72365, 72374, 72383, 72392, 72401, 72410, 72419, 72428, 72437, - 72446, 72455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 72462, 72469, 72475, 72482, 72490, 72498, - 72505, 72513, 72520, 72526, 72532, 72539, 72545, 72551, 72557, 72564, - 72571, 72578, 72585, 72592, 72599, 72606, 72613, 72620, 72627, 72634, - 72641, 72648, 72655, 72661, 72668, 72675, 72682, 72689, 72696, 72703, - 72710, 72717, 72724, 72731, 72738, 72745, 72752, 72759, 72766, 72773, - 72780, 72787, 72795, 72803, 72811, 72819, 0, 0, 0, 0, 72827, 72836, - 72845, 72854, 72863, 72872, 72881, 72888, 72895, 72902, 0, 0, 0, 0, 0, 0, - 72909, 72913, 72918, 72923, 72928, 72933, 72938, 72943, 72948, 72953, - 72958, 72963, 72967, 72971, 72976, 72981, 72985, 72990, 72995, 73000, - 73005, 73010, 73015, 73020, 73024, 73028, 73033, 73038, 73042, 73046, - 73050, 73054, 73058, 73062, 73066, 73071, 73076, 73081, 73086, 73091, - 73098, 73104, 73109, 73114, 73119, 73124, 73130, 73137, 73143, 73150, - 73156, 73162, 73167, 73174, 73180, 73185, 0, 0, 0, 0, 0, 0, 0, 0, 73191, - 73195, 73199, 73202, 73206, 73209, 73213, 73216, 73220, 73224, 73229, - 73233, 73238, 73241, 73245, 73249, 73252, 73256, 73260, 73263, 73267, - 73271, 73275, 73279, 73283, 73287, 73291, 73295, 73299, 73303, 73307, - 73311, 73315, 73319, 73323, 73327, 73331, 73335, 73338, 73341, 73345, - 73349, 73353, 73356, 73359, 73362, 73366, 73370, 73374, 73378, 73381, - 73384, 73388, 73393, 73398, 73402, 73407, 73411, 73416, 73421, 73427, - 73432, 73438, 73442, 73447, 73452, 73456, 73461, 73466, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 73470, 73473, 73477, 73481, 73484, 73487, 73490, 73493, 73496, - 73499, 73502, 73505, 0, 0, 0, 0, 0, 0, 73508, 73513, 73517, 73521, 73525, - 73529, 73533, 73537, 73541, 73545, 73549, 73553, 73557, 73561, 73565, - 73569, 73573, 73578, 73583, 73589, 73595, 73602, 73607, 73612, 73618, - 73622, 73627, 73630, 0, 0, 0, 0, 73633, 73640, 73646, 73652, 73658, - 73664, 73670, 73676, 73682, 73688, 73694, 73700, 73707, 73714, 73721, - 73727, 73734, 73741, 73748, 73755, 73762, 73768, 73774, 73781, 73787, - 73794, 73801, 73807, 73813, 73820, 73827, 73834, 73840, 73847, 73854, - 73860, 73867, 73873, 73880, 73887, 73893, 73899, 73906, 73912, 73919, - 73926, 73935, 73942, 73949, 73953, 73958, 73963, 73968, 73973, 73977, - 73981, 73986, 73990, 73995, 74000, 74005, 74009, 74013, 74018, 74022, - 74027, 74031, 74036, 74041, 74046, 74051, 74055, 74060, 74065, 74070, - 74076, 74081, 74087, 74093, 74099, 74105, 74111, 74116, 74122, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74126, 74131, 74135, 74139, 74143, 74147, 74151, - 74155, 74159, 74163, 74167, 74171, 74175, 74179, 74183, 74187, 74191, - 74195, 74199, 74203, 74207, 74211, 74215, 74219, 74223, 74227, 74231, - 74235, 74239, 74243, 0, 0, 0, 74247, 74251, 74255, 74259, 74263, 74266, - 74272, 74275, 74279, 74282, 74288, 74294, 74302, 74305, 74309, 74312, - 74315, 74321, 74327, 74331, 74337, 74341, 74345, 74351, 74355, 74361, - 74367, 74371, 74375, 74381, 74385, 74391, 74397, 74401, 74407, 74411, - 74417, 74420, 74423, 74429, 74433, 74439, 74442, 74445, 74448, 74454, - 74458, 74462, 74468, 74474, 74477, 74480, 74486, 74491, 74496, 74501, - 74508, 74513, 74520, 74525, 74532, 74537, 74542, 74547, 74552, 74555, - 74559, 74563, 74568, 74573, 74578, 74583, 74588, 74593, 74598, 74603, - 74610, 74615, 0, 74622, 74625, 74629, 74632, 74635, 74638, 74641, 74644, - 74647, 74650, 74653, 0, 0, 0, 0, 74656, 74663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 74668, 74671, 74674, 74677, 74680, 74684, 74687, 74690, 74694, 74698, - 74702, 74706, 74710, 74714, 74718, 74722, 74726, 74730, 74734, 74738, - 74742, 74746, 74750, 74754, 74758, 74761, 74765, 74768, 74772, 74776, - 74780, 74784, 74788, 74791, 74795, 74798, 74801, 74805, 74809, 74813, - 74816, 74819, 74824, 74828, 74833, 74838, 74842, 74847, 74851, 74856, - 74861, 74866, 74870, 74874, 74879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74884, - 74889, 74894, 74899, 74905, 74910, 74915, 74920, 74925, 74930, 74934, - 74938, 74943, 74948, 0, 0, 74954, 74958, 74961, 74964, 74967, 74970, - 74973, 74976, 74979, 74982, 0, 0, 74985, 74990, 74995, 75001, 75008, - 75014, 75020, 75026, 75032, 75038, 75044, 75050, 75056, 75062, 75068, - 75074, 75079, 75084, 75089, 75095, 75101, 75108, 75114, 75120, 75125, - 75132, 75139, 75146, 75152, 75157, 75162, 75167, 0, 0, 0, 0, 75175, - 75181, 75187, 75193, 75199, 75205, 75211, 75217, 75223, 75229, 75235, - 75241, 75247, 75253, 75259, 75265, 75271, 75277, 75283, 75289, 75295, - 75300, 75305, 75311, 75317, 75323, 75329, 75335, 75341, 75347, 75353, - 75359, 75365, 75371, 75377, 75383, 75389, 75395, 75401, 75407, 75413, - 75419, 75425, 75431, 75437, 75443, 75449, 75454, 75459, 75465, 75470, - 75474, 75479, 75483, 75487, 75491, 75497, 75502, 75507, 75512, 75517, - 75522, 75527, 75532, 75539, 75546, 75553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75560, 75565, 75570, 75575, - 75582, 75589, 75593, 75597, 75602, 75607, 75612, 75617, 75622, 75627, - 75632, 75637, 75642, 75648, 75654, 75660, 75666, 75672, 75676, 75682, - 75686, 75692, 75699, 75705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75709, 75713, - 75717, 75721, 75725, 75729, 0, 0, 75733, 75737, 75741, 75745, 75749, - 75753, 0, 0, 75757, 75761, 75765, 75769, 75773, 75777, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 75781, 75785, 75789, 75793, 75797, 75801, 75805, 0, 75809, - 75813, 75817, 75821, 75825, 75829, 75833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 65512, 65521, 65530, 65541, 65548, 65553, 65558, 65565, 65572, 65578, + 65583, 65588, 65593, 65598, 65605, 65610, 65615, 65620, 65631, 65636, + 65641, 65648, 65653, 65660, 65665, 65670, 65677, 65684, 65691, 65700, + 65709, 65714, 65719, 65724, 65731, 65736, 65746, 65753, 65758, 65763, + 65768, 65773, 65778, 65783, 65792, 65799, 65806, 65811, 65818, 65823, + 65830, 65839, 65850, 65855, 65864, 65869, 65876, 65885, 65894, 65899, + 65904, 65911, 65917, 65924, 65931, 65935, 65939, 65942, 65946, 65950, + 65954, 65958, 65962, 65966, 65970, 65973, 65977, 65981, 65985, 65989, + 65993, 65997, 66000, 66004, 66008, 66011, 66015, 66019, 66023, 66027, + 66031, 66035, 66039, 66043, 66047, 66051, 66055, 66059, 66063, 66067, + 66071, 66075, 66079, 66083, 66087, 66091, 66095, 66099, 66103, 66107, + 66111, 66115, 66119, 66123, 66127, 66131, 66135, 66139, 66143, 66147, + 66151, 66155, 66159, 66163, 66167, 66171, 66175, 66179, 66183, 66187, + 66190, 66194, 66198, 66202, 66206, 66210, 66214, 66218, 66222, 66226, + 66230, 66234, 66238, 66242, 66246, 66250, 66254, 66258, 66262, 66266, + 66270, 66274, 66278, 66282, 66286, 66290, 66294, 66298, 66302, 66306, + 66310, 66314, 66318, 66322, 66326, 66330, 66334, 66338, 66342, 66346, + 66350, 66354, 66358, 66362, 66366, 66370, 66374, 66378, 66382, 66386, + 66390, 66394, 66398, 66402, 66406, 66410, 66414, 66418, 66422, 66426, + 66430, 66434, 66438, 66442, 66446, 66450, 66454, 66458, 66462, 66466, + 66470, 66474, 66478, 66482, 66486, 66490, 66494, 66498, 66502, 66506, + 66510, 66514, 66518, 66522, 66526, 66530, 66534, 66538, 66542, 66546, + 66550, 66554, 66558, 66562, 66566, 66570, 66574, 66578, 66582, 66586, + 66590, 66594, 66598, 66602, 66606, 66610, 66614, 66618, 66622, 66626, + 66630, 66634, 66638, 66642, 66646, 66650, 66654, 66658, 66661, 66665, + 66669, 66673, 66677, 66681, 66685, 66689, 66693, 66697, 66701, 66705, + 66709, 66713, 66717, 66721, 66725, 66729, 66733, 66737, 66741, 66745, + 66749, 66753, 66757, 66761, 66765, 66769, 66773, 66777, 66781, 66785, + 66789, 66793, 66797, 66801, 66805, 66809, 66813, 66817, 66821, 66825, + 66829, 66833, 66837, 66841, 66845, 66849, 66853, 66857, 66861, 66865, + 66869, 66873, 66877, 66881, 66885, 66889, 66893, 66897, 66901, 66905, + 66909, 66913, 66917, 66921, 66925, 66929, 66933, 66937, 66941, 66945, + 66949, 66953, 66957, 66961, 66965, 66969, 66973, 66977, 66981, 66985, + 66989, 66993, 66997, 67001, 67005, 67009, 67013, 67017, 67021, 67025, + 67029, 67033, 67037, 67041, 67045, 67049, 67053, 67057, 67061, 67065, + 67069, 67073, 67077, 67081, 67085, 67089, 67093, 67097, 67101, 67105, + 67109, 67113, 67117, 67121, 67124, 67128, 67132, 67136, 67140, 67144, + 67148, 67152, 67156, 67160, 67164, 67168, 67172, 67176, 67180, 67184, + 67188, 67192, 67196, 67200, 67204, 67208, 67212, 67216, 67220, 67224, + 67228, 67232, 67236, 67240, 67244, 67248, 67252, 67256, 67260, 67264, + 67268, 67272, 67276, 67280, 67284, 67288, 67292, 67296, 67300, 67304, + 67308, 67312, 67316, 67320, 67324, 67328, 67332, 67336, 67340, 67344, + 67348, 67352, 67356, 67360, 67364, 67368, 67372, 67376, 67380, 67384, + 67388, 67392, 67396, 67400, 67404, 67408, 67412, 67416, 67420, 67424, + 67428, 67432, 67436, 67440, 67444, 67448, 67452, 67456, 67460, 67464, + 67468, 67472, 67476, 67480, 67483, 67487, 67491, 67495, 67499, 67503, + 67507, 67511, 67515, 67519, 67523, 67527, 67531, 67535, 67539, 67543, + 67547, 67551, 67555, 67559, 67563, 67567, 67571, 67575, 67579, 67583, + 67587, 67591, 67595, 67599, 67603, 67607, 67611, 67615, 67619, 67623, + 67627, 67631, 67635, 67639, 67643, 67647, 67651, 67655, 67659, 67663, + 67667, 67671, 67675, 67679, 67683, 67687, 67691, 67695, 67699, 67703, + 67707, 67711, 67715, 67719, 67723, 67727, 67731, 67735, 67739, 67743, + 67747, 67751, 67755, 67759, 67763, 67767, 67771, 67775, 67779, 67783, + 67787, 67791, 67795, 67799, 67803, 67807, 67811, 67815, 67819, 67823, + 67827, 67831, 67835, 67839, 67843, 67847, 67851, 67855, 67859, 67863, + 67867, 67871, 67875, 67879, 67883, 67887, 67891, 67895, 67899, 67903, + 67907, 67911, 67915, 67919, 67923, 67927, 67931, 67935, 67939, 67943, + 67947, 67951, 67955, 67959, 67963, 67967, 67971, 67975, 67978, 67982, + 67986, 67990, 67994, 67998, 68002, 68006, 68010, 68014, 68018, 68022, + 68026, 68030, 68034, 68038, 68042, 68046, 68050, 68054, 68058, 68062, + 68066, 68070, 68074, 68078, 68082, 68086, 68090, 68094, 68098, 68102, + 68106, 68110, 68114, 68118, 68122, 68126, 68130, 68134, 68138, 68142, + 68146, 68150, 68154, 68158, 68162, 68166, 68170, 68174, 68178, 68182, + 68186, 68190, 68194, 68198, 68202, 68206, 68210, 68214, 68218, 68222, + 68226, 68230, 68234, 68238, 68242, 68246, 68250, 68254, 68258, 68262, + 68266, 68270, 68274, 68278, 68282, 68286, 68290, 68294, 68298, 68302, + 68306, 68310, 68314, 68318, 68322, 68326, 68330, 68334, 68338, 68342, + 68346, 68350, 68354, 68358, 68362, 68366, 68370, 68374, 68378, 68382, + 68386, 68390, 68394, 68398, 68402, 68406, 68410, 68414, 68418, 68422, + 68426, 68430, 68433, 68437, 68441, 68445, 68449, 68453, 68457, 68461, + 68465, 68469, 68473, 68477, 68481, 68485, 68489, 68493, 68497, 68501, + 68505, 68509, 68513, 68517, 68521, 68525, 68529, 68533, 68537, 68541, + 68545, 68549, 68553, 68557, 68561, 68565, 68569, 68573, 68577, 68581, + 68585, 68589, 68593, 68597, 68601, 68605, 68609, 68613, 68617, 68621, + 68625, 68629, 68633, 68637, 68641, 68645, 68649, 68653, 68657, 68661, + 68665, 68669, 68673, 68677, 68681, 68685, 68689, 68693, 68697, 68701, + 68705, 68709, 68713, 68717, 68721, 68725, 68729, 68733, 68737, 68741, + 68745, 68749, 68753, 68757, 68761, 68765, 68769, 68773, 68777, 68781, + 68785, 68789, 68793, 68797, 68801, 68805, 68809, 68813, 68817, 68821, + 68825, 68829, 68833, 68837, 68841, 68845, 68849, 68853, 68857, 68861, + 68865, 68869, 68873, 68877, 68881, 68885, 68889, 68893, 68897, 68901, + 68905, 68909, 68913, 68917, 68921, 68925, 68929, 68933, 68937, 68941, + 68945, 68949, 68953, 68957, 68961, 68965, 68969, 68973, 68977, 68981, + 68985, 68989, 68993, 68997, 69001, 69005, 69009, 69013, 69017, 69021, + 69025, 69029, 69033, 69036, 69040, 69044, 69048, 69052, 69056, 69060, + 69064, 69068, 69072, 69076, 69080, 69084, 69088, 69092, 69096, 69100, + 69104, 69108, 69112, 69116, 69120, 69124, 69128, 69132, 69136, 69140, + 69144, 69148, 69152, 69156, 69160, 69164, 69168, 69172, 69176, 69180, + 69184, 69188, 69192, 69196, 69200, 69204, 69208, 69212, 69216, 69220, + 69224, 69228, 69232, 69236, 69240, 69244, 69248, 69252, 69256, 69260, + 69264, 69268, 69272, 69276, 69280, 69284, 69288, 69292, 69296, 69300, + 69304, 69308, 69312, 69316, 69320, 69324, 69328, 69332, 69336, 69340, + 69344, 69348, 69352, 69356, 69360, 69364, 69368, 69372, 69376, 69380, + 69384, 69388, 69392, 69396, 69400, 69404, 69408, 69412, 69416, 69420, + 69424, 69428, 69432, 69436, 69440, 69444, 69448, 69452, 69456, 69460, + 69464, 69468, 69472, 69476, 69480, 69484, 69488, 69492, 69496, 69500, + 69504, 69508, 69512, 69516, 69520, 69524, 69528, 69532, 69536, 69540, + 69544, 69548, 69552, 69556, 69560, 69564, 69568, 69572, 69576, 69580, + 69584, 69588, 69592, 69596, 69600, 69604, 69608, 69612, 69616, 69620, + 69624, 69628, 69632, 69636, 69640, 69644, 69648, 69652, 69656, 69660, + 69664, 69668, 69672, 69676, 69680, 69684, 69688, 69692, 69696, 69700, + 69704, 69708, 69712, 69716, 69720, 69724, 69728, 69732, 69736, 69740, + 69744, 69748, 69752, 69756, 69760, 69764, 69768, 69772, 69776, 69780, + 69784, 69788, 69792, 69796, 69800, 69804, 69808, 69812, 69816, 69820, + 69824, 69828, 69832, 69836, 69840, 69844, 69848, 69852, 69856, 69860, + 69864, 69868, 69872, 69876, 69880, 69884, 69888, 69892, 69896, 69900, + 69904, 69908, 69912, 69916, 69920, 69924, 69928, 69932, 69936, 69940, + 69944, 69948, 69952, 69956, 69960, 69964, 69968, 69972, 69976, 69980, + 69984, 69988, 69992, 69996, 70000, 70004, 70008, 70012, 70016, 70020, + 70024, 70028, 70032, 70036, 70040, 70044, 70048, 70052, 70056, 70060, + 70064, 70068, 70072, 70076, 70080, 70084, 70088, 70092, 70096, 70100, + 70104, 70108, 70112, 70116, 70120, 70124, 70128, 70132, 70136, 70140, + 70144, 70148, 70152, 70156, 70160, 70164, 70168, 70172, 70176, 70180, + 70184, 70188, 70192, 70196, 70200, 70204, 70208, 70212, 70216, 70220, + 70224, 70228, 70232, 70236, 70240, 70244, 70248, 70252, 70256, 70260, + 70264, 70268, 70272, 70276, 70280, 70284, 70288, 70292, 70296, 70300, + 70304, 70308, 70312, 70316, 70320, 70324, 70328, 70332, 70336, 70340, + 70344, 70348, 70352, 70356, 70360, 70364, 70368, 70372, 70376, 70380, + 70384, 70388, 70392, 70396, 70400, 70404, 70408, 70412, 70416, 70420, + 70424, 70428, 70432, 70436, 70440, 70444, 70448, 70452, 70456, 70460, + 70464, 70468, 70472, 70476, 70480, 70484, 70488, 70492, 70496, 70500, + 70504, 70508, 70512, 70516, 70520, 70524, 70528, 70532, 70536, 70540, + 70544, 70548, 70552, 70556, 70560, 70564, 70568, 70572, 70576, 0, 0, 0, + 70580, 70584, 70588, 70592, 70596, 70600, 70604, 70608, 70612, 70616, + 70620, 70624, 70628, 70632, 70636, 70640, 70644, 70648, 70652, 70656, + 70660, 70664, 70668, 70672, 70676, 70680, 70684, 70688, 70692, 70696, + 70700, 70704, 70708, 70712, 70716, 70720, 70724, 70728, 70732, 70736, + 70740, 70744, 70748, 70752, 70756, 70760, 70764, 70768, 70772, 70776, + 70780, 70784, 70788, 70792, 70796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70800, + 70805, 70809, 70814, 70819, 70824, 70829, 70834, 70838, 70843, 70848, + 70853, 70858, 70863, 70868, 70873, 70877, 70881, 70886, 70891, 70896, + 70901, 70906, 70910, 70915, 70920, 70925, 70930, 70935, 70939, 70944, + 70948, 70953, 70957, 70962, 70966, 70970, 70974, 70979, 70984, 70989, + 70997, 71005, 71013, 71021, 71028, 71036, 71042, 71050, 71054, 71058, + 71062, 71066, 71070, 71074, 71078, 71082, 71086, 71090, 71094, 71098, + 71102, 71106, 71110, 71114, 71118, 71122, 71126, 71130, 71134, 71138, + 71142, 71146, 71150, 71154, 71158, 71162, 71166, 71170, 71174, 71178, + 71182, 71186, 71190, 71194, 71197, 71201, 71205, 71209, 71213, 71217, + 71221, 71225, 71229, 71233, 71237, 71241, 71245, 71249, 71253, 71257, + 71261, 71265, 71269, 71273, 71277, 71281, 71285, 71289, 71293, 71297, + 71301, 71305, 71309, 71313, 71317, 71321, 71325, 71329, 71333, 71337, + 71341, 71344, 71348, 71352, 71355, 71359, 71363, 71367, 71370, 71374, + 71378, 71382, 71386, 71390, 71394, 71398, 71402, 71406, 71410, 71414, + 71418, 71422, 71426, 71430, 71434, 71438, 71442, 71446, 71450, 71454, + 71458, 71462, 71466, 71469, 71472, 71476, 71480, 71484, 71487, 71490, + 71494, 71498, 71502, 71506, 71510, 71514, 71518, 71522, 71526, 71530, + 71534, 71538, 71542, 71546, 71550, 71554, 71558, 71562, 71566, 71570, + 71574, 71578, 71582, 71586, 71590, 71594, 71598, 71602, 71606, 71610, + 71614, 71618, 71622, 71626, 71630, 71634, 71638, 71641, 71645, 71649, + 71653, 71657, 71661, 71665, 71669, 71673, 71677, 71681, 71685, 71689, + 71693, 71697, 71701, 71705, 71709, 71713, 71717, 71721, 71725, 71729, + 71733, 71737, 71741, 71745, 71749, 71753, 71757, 71761, 71765, 71769, + 71773, 71777, 71781, 71785, 71788, 71792, 71796, 71800, 71804, 71808, + 71812, 71816, 71820, 71824, 71828, 71832, 71836, 71840, 71844, 71848, + 71852, 71855, 71859, 71863, 71867, 71871, 71875, 71879, 71883, 71887, + 71891, 71895, 71899, 71903, 71907, 71911, 71915, 71919, 71923, 71927, + 71931, 71935, 71939, 71942, 71946, 71950, 71954, 71958, 71962, 71966, + 71970, 71974, 71978, 71982, 71986, 71990, 71994, 71998, 72002, 72006, + 72010, 72014, 72018, 72022, 72026, 72030, 72034, 72038, 72042, 72046, + 72050, 72054, 72058, 72062, 72066, 72070, 72074, 72078, 72082, 72086, + 72090, 72094, 72098, 72102, 72106, 72110, 72114, 72117, 72122, 72126, + 72132, 72137, 72143, 72147, 72151, 72155, 72159, 72163, 72167, 72171, + 72175, 72179, 72183, 72187, 72191, 72195, 72199, 72202, 72205, 72208, + 72211, 72214, 72217, 72220, 72223, 72226, 72231, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72237, 72242, 72247, 72252, 72257, + 72264, 72271, 72276, 72281, 72286, 72291, 72298, 72305, 72312, 72319, + 72326, 72333, 72343, 72353, 72360, 72367, 72374, 72381, 72387, 72393, + 72402, 72411, 72418, 72425, 72436, 72447, 72452, 72457, 72464, 72471, + 72478, 72485, 72492, 72499, 72506, 72513, 72519, 72525, 72531, 72537, + 72544, 72551, 72556, 72560, 72567, 72574, 72581, 72585, 72592, 72596, + 72601, 72605, 72611, 72616, 72622, 72627, 72631, 72635, 72638, 72641, + 72646, 72651, 72656, 72661, 72666, 72671, 72676, 72681, 72686, 72691, + 72700, 72709, 72714, 72719, 72724, 72729, 72734, 72739, 72744, 72749, + 72754, 72759, 72764, 72769, 72774, 72779, 72785, 72791, 72797, 0, 72803, + 72809, 72812, 72815, 72818, 72822, 72826, 72830, 72834, 72837, 72841, + 72844, 72848, 72851, 72855, 72859, 72863, 72867, 72871, 72875, 72879, + 72883, 72887, 72891, 72895, 72899, 72903, 72907, 72911, 72915, 72919, + 72923, 72927, 72931, 72935, 72939, 72942, 72946, 72950, 72954, 72958, + 72962, 72966, 72970, 72974, 72978, 72982, 72986, 72990, 72994, 72998, + 73002, 73006, 73010, 73014, 73018, 73022, 73026, 73030, 73034, 73038, + 73041, 73045, 73049, 73053, 73057, 73061, 73065, 73069, 73072, 73076, + 73080, 73084, 73088, 73092, 73096, 73100, 73104, 73108, 73112, 73116, + 73120, 73125, 73130, 73133, 73138, 73141, 73144, 73147, 0, 0, 0, 0, 0, 0, + 0, 0, 73151, 73160, 73169, 73178, 73187, 73196, 73205, 73214, 73223, + 73231, 73238, 73246, 73253, 73261, 73271, 73280, 73290, 73299, 73309, + 73317, 73324, 73332, 73339, 73347, 73352, 73357, 73362, 73371, 73377, + 73383, 73390, 73399, 73407, 73415, 73423, 73430, 73437, 73444, 73451, + 73456, 73461, 73466, 73471, 73476, 73481, 73486, 73491, 73499, 73507, + 73513, 73518, 73523, 73528, 73533, 73538, 73543, 73548, 73553, 73558, + 73566, 73574, 73579, 73584, 73594, 73604, 73611, 73618, 73627, 73636, + 73648, 73660, 73666, 73672, 73680, 73688, 73698, 73708, 73715, 73722, + 73727, 73732, 73744, 73756, 73764, 73772, 73782, 73792, 73804, 73816, + 73825, 73834, 73841, 73848, 73855, 73862, 73871, 73880, 73885, 73890, + 73897, 73904, 73911, 73918, 73930, 73942, 73947, 73952, 73957, 73962, + 73967, 73972, 73977, 73982, 73986, 73991, 73996, 74001, 74006, 74011, + 74017, 74022, 74027, 74034, 74041, 74048, 74055, 74062, 74070, 74078, + 74083, 74088, 74094, 74100, 74106, 74112, 74119, 74126, 74133, 74137, + 74144, 74149, 74154, 74160, 0, 74173, 74181, 74189, 74196, 74203, 74212, + 74221, 74228, 74235, 74242, 74249, 74256, 74263, 74270, 74277, 74284, + 74291, 74300, 74309, 74318, 74327, 74336, 74345, 74354, 74363, 74372, + 74381, 74388, 74396, 74402, 0, 0, 74410, 74416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74422, 74429, 74436, 74442, 74449, + 74457, 74465, 74473, 74481, 74489, 74495, 74501, 74508, 74514, 74520, + 74526, 74533, 74540, 74547, 74554, 74561, 74568, 74575, 74582, 74589, + 74596, 74603, 74610, 74617, 74624, 74630, 74637, 74644, 74651, 74658, + 74665, 74672, 74679, 74686, 74693, 74700, 74707, 74714, 74721, 74728, + 74735, 74742, 74749, 74756, 74764, 74772, 74780, 74788, 0, 0, 0, 0, + 74796, 74804, 74812, 74820, 74828, 74836, 74844, 74850, 74856, 74862, 0, + 0, 0, 0, 0, 0, 74868, 74872, 74877, 74882, 74887, 74892, 74897, 74902, + 74907, 74912, 74917, 74922, 74926, 74930, 74935, 74940, 74944, 74949, + 74954, 74959, 74964, 74969, 74974, 74979, 74983, 74988, 74993, 74998, + 75003, 75007, 75011, 75015, 75019, 75023, 75027, 75032, 75037, 75042, + 75047, 75052, 75059, 75065, 75070, 75075, 75080, 75085, 75091, 75098, + 75104, 75111, 75118, 75125, 75130, 75137, 75143, 75148, 0, 0, 0, 0, 0, 0, + 0, 0, 75154, 75159, 75164, 75168, 75173, 75177, 75182, 75186, 75191, + 75196, 75202, 75207, 75213, 75217, 75222, 75227, 75231, 75236, 75241, + 75245, 75250, 75255, 75260, 75265, 75270, 75275, 75280, 75285, 75290, + 75295, 75300, 75305, 75310, 75315, 75320, 75325, 75330, 75335, 75339, + 75343, 75348, 75353, 75358, 75362, 75366, 75371, 75376, 75381, 75386, + 75391, 75396, 75400, 75405, 75411, 75417, 75422, 75428, 75433, 75439, + 75445, 75452, 75458, 75465, 75470, 75476, 75482, 75487, 75493, 75499, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 75504, 75508, 75513, 75518, 75522, 75526, 75530, + 75534, 75538, 75542, 75546, 75550, 0, 0, 0, 0, 0, 0, 75554, 75559, 75563, + 75567, 75571, 75575, 75579, 75583, 75587, 75591, 75595, 75599, 75603, + 75607, 75611, 75615, 75620, 75625, 75630, 75636, 75642, 75649, 75654, + 75659, 75665, 75669, 75674, 75677, 0, 0, 0, 0, 75680, 75687, 75693, + 75699, 75705, 75711, 75717, 75723, 75729, 75735, 75741, 75747, 75754, + 75761, 75768, 75775, 75782, 75789, 75796, 75803, 75810, 75816, 75822, + 75829, 75835, 75842, 75849, 75856, 75862, 75869, 75876, 75883, 75889, + 75896, 75903, 75909, 75916, 75922, 75929, 75936, 75942, 75948, 75955, + 75961, 75968, 75975, 75984, 75991, 75998, 76002, 76007, 76012, 76017, + 76022, 76026, 76030, 76035, 76039, 76044, 76049, 76054, 76059, 76064, + 76069, 76073, 76078, 76082, 76087, 76092, 76097, 76102, 76106, 76111, + 76116, 76121, 76127, 76132, 76138, 76144, 76150, 76156, 76162, 76167, + 76173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76177, 76182, 76186, 76190, + 76194, 76198, 76202, 76206, 76210, 76214, 76218, 76222, 76226, 76230, + 76234, 76238, 76242, 76246, 76250, 76254, 76258, 76262, 76266, 76270, + 76274, 76278, 76282, 76286, 76290, 76294, 0, 0, 0, 76298, 76302, 76306, + 76310, 76314, 76317, 76323, 76326, 76330, 76333, 76339, 76345, 76353, + 76356, 76360, 76363, 76366, 76372, 76378, 76382, 76388, 76392, 76396, + 76402, 76406, 76412, 76418, 76422, 76426, 76432, 76436, 76442, 76448, + 76452, 76458, 76462, 76468, 76471, 76474, 76480, 76484, 76490, 76493, + 76496, 76500, 76506, 76510, 76514, 76520, 76526, 76530, 76533, 76539, + 76544, 76549, 76554, 76561, 76566, 76573, 76578, 76585, 76590, 76595, + 76600, 76605, 76608, 76612, 76616, 76621, 76626, 76631, 76636, 76641, + 76646, 76651, 76656, 76663, 76668, 0, 76674, 76677, 76681, 76684, 76687, + 76690, 76693, 76696, 76699, 76702, 76705, 0, 0, 0, 0, 76708, 76715, + 76720, 76726, 76732, 76738, 76744, 76750, 76756, 76763, 76770, 76777, + 76784, 76791, 76798, 76805, 76812, 76819, 76826, 76833, 76839, 76845, + 76851, 76857, 76863, 76869, 76875, 76881, 76887, 76894, 76901, 76908, + 76915, 0, 76922, 76925, 76928, 76931, 76934, 76938, 76941, 76944, 76948, + 76952, 76956, 76960, 76964, 76968, 76972, 76976, 76980, 76984, 76988, + 76992, 76996, 77000, 77004, 77008, 77012, 77015, 77019, 77022, 77026, + 77030, 77034, 77038, 77042, 77045, 77049, 77052, 77056, 77060, 77064, + 77068, 77072, 77075, 77080, 77084, 77089, 77094, 77098, 77103, 77107, + 77112, 77117, 77122, 77126, 77131, 77136, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 77141, 77146, 77151, 77156, 77162, 77167, 77172, 77177, 77182, 77187, + 77191, 77195, 77200, 77206, 0, 0, 77212, 77216, 77219, 77222, 77225, + 77228, 77231, 77234, 77237, 77240, 0, 0, 77243, 77248, 77253, 77259, + 77266, 77272, 77278, 77284, 77290, 77296, 77302, 77308, 77314, 77320, + 77326, 77332, 77337, 77343, 77348, 77354, 77360, 77367, 77373, 77379, + 77385, 77392, 77399, 77406, 77412, 77417, 77422, 77428, 77436, 77443, + 77450, 77458, 77466, 77473, 77480, 77487, 77494, 77501, 77508, 77515, + 77522, 77529, 77536, 77543, 77550, 77557, 77564, 77571, 77578, 77585, + 77592, 77599, 77606, 77612, 77618, 77625, 77632, 77639, 77646, 77653, + 77660, 77667, 77674, 77681, 77688, 77695, 77702, 77709, 77716, 77723, + 77730, 77737, 77744, 77751, 77758, 77765, 77772, 77779, 77786, 77792, + 77798, 77805, 77811, 77816, 77822, 77827, 77832, 77837, 77844, 77850, + 77856, 77862, 77868, 77874, 77880, 77886, 77894, 77902, 77910, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77918, + 77924, 77930, 77936, 77944, 77952, 77958, 77964, 77971, 77978, 77985, + 77992, 77999, 78006, 78013, 78020, 78027, 78035, 78043, 78051, 78059, + 78067, 78073, 78081, 78087, 78095, 78104, 78112, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 78118, 78122, 78126, 78130, 78134, 78138, 0, 0, 78142, 78146, + 78150, 78154, 78158, 78162, 0, 0, 78166, 78170, 78174, 78178, 78182, + 78186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78190, 78194, 78198, 78202, 78206, + 78210, 78214, 0, 78218, 78222, 78226, 78230, 78234, 78238, 78242, 0, + 78246, 78253, 78259, 78265, 78271, 78278, 78285, 78294, 78305, 78316, + 78326, 78334, 78342, 78350, 78356, 78364, 78372, 78379, 78387, 78396, + 78403, 78412, 78418, 78428, 78437, 78442, 78450, 78459, 78464, 78473, + 78480, 78490, 78502, 78507, 78513, 78520, 78525, 78535, 78545, 78555, + 78565, 78580, 78593, 78604, 78612, 78617, 78628, 78638, 0, 0, 0, 0, + 78645, 78652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78658, + 78665, 78672, 78679, 78686, 78692, 78698, 78705, 78712, 78719, 78726, + 78733, 78740, 78747, 78754, 78761, 78767, 78774, 78781, 78788, 78795, + 78802, 78809, 78816, 78823, 78830, 78837, 78844, 78853, 78862, 78871, + 78880, 78889, 78898, 78907, 78916, 78924, 78932, 78940, 78948, 78956, + 78964, 78972, 78980, 78986, 78994, 0, 0, 79002, 79009, 79015, 79021, + 79027, 79033, 79039, 79045, 79051, 79057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75837, 75842, 75847, 75852, - 75857, 75861, 75865, 75870, 75875, 75880, 75885, 75890, 75895, 75900, - 75905, 75910, 75914, 75919, 75924, 75929, 75934, 75939, 75944, 75949, - 75954, 75959, 75964, 75969, 75976, 75983, 75990, 75997, 76004, 76011, - 76018, 76025, 76031, 76037, 76043, 76049, 76055, 76061, 76067, 76073, - 76077, 76083, 0, 0, 76089, 76094, 76098, 76102, 76106, 76110, 76114, - 76118, 76122, 76126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76130, 76134, 76138, 76142, 76146, - 76150, 76154, 76158, 76162, 76166, 76170, 76174, 76178, 76182, 76186, - 76190, 76194, 76198, 76202, 76206, 76210, 76214, 76218, 0, 0, 0, 0, - 76222, 76226, 76230, 76234, 76238, 76242, 76246, 76250, 76254, 76258, - 76262, 76266, 76270, 76274, 76278, 76282, 76286, 76290, 76294, 76298, - 76302, 76306, 76310, 76314, 76318, 76322, 76326, 76330, 76334, 76338, - 76342, 76346, 76350, 76354, 76358, 76362, 76366, 76370, 76374, 76378, - 76382, 76386, 76390, 76394, 76398, 76402, 76406, 76410, 76414, 0, 0, 0, - 0, 76418, 76422, 76426, 76430, 76434, 76438, 76442, 76446, 76450, 76454, - 76458, 76462, 76466, 76470, 76474, 76478, 76482, 76486, 76490, 76494, - 76498, 76502, 76506, 76510, 76514, 76518, 76522, 76526, 76530, 76534, - 76538, 76542, 76546, 76550, 76554, 76558, 76562, 76566, 76570, 76574, - 76578, 76582, 76586, 76590, 76594, 76598, 76602, 76606, 76610, 76614, - 76618, 76622, 76626, 76630, 76634, 76638, 76642, 76646, 76650, 76654, - 76658, 76662, 76666, 76670, 76674, 76678, 76682, 76686, 76690, 76694, - 76698, 76702, 76706, 76710, 76714, 76718, 76722, 76726, 76730, 76734, - 76738, 76742, 76746, 76750, 76754, 76758, 76762, 76766, 76770, 76774, - 76778, 76782, 76786, 76790, 76794, 76798, 76802, 76806, 76810, 76814, - 76818, 76822, 76826, 76830, 76834, 76838, 76842, 76846, 76850, 76854, - 76858, 76862, 76866, 76870, 76874, 76878, 76882, 76886, 76890, 76894, - 76898, 76902, 76906, 76910, 76914, 76918, 76922, 76926, 76930, 76934, - 76938, 76942, 76946, 76950, 76954, 76958, 76962, 76966, 76970, 76974, - 76978, 76982, 76986, 76990, 76994, 76998, 77002, 77006, 77010, 77014, - 77018, 77022, 77026, 77030, 77034, 77038, 77042, 77046, 77050, 77054, - 77058, 77062, 77066, 77070, 77074, 77078, 77082, 77086, 77090, 77094, - 77098, 77102, 77106, 77110, 77114, 77118, 77122, 77126, 77130, 77134, - 77138, 77142, 77146, 77150, 77154, 77158, 77162, 77166, 77170, 77174, - 77178, 77182, 77186, 77190, 77194, 77198, 77202, 77206, 77210, 77214, - 77218, 77222, 77226, 77230, 77234, 77238, 77242, 77246, 77250, 77254, - 77258, 77262, 77266, 77270, 77274, 77278, 77282, 77286, 77290, 77294, - 77298, 77302, 77306, 77310, 77314, 77318, 77322, 77326, 77330, 77334, - 77338, 77342, 77346, 77350, 77354, 77358, 77362, 77366, 77370, 77374, - 77378, 77382, 77386, 77390, 77394, 77398, 77402, 77406, 77410, 77414, - 77418, 77422, 77426, 77430, 77434, 77438, 77442, 77446, 77450, 77454, - 77458, 77462, 77466, 77470, 77474, 77478, 77482, 77486, 77490, 77494, - 77498, 77502, 77506, 77510, 77514, 77518, 77522, 77526, 77530, 77534, - 77538, 77542, 77546, 77550, 77554, 77558, 77562, 77566, 77570, 77574, - 77578, 77582, 77586, 77590, 77594, 77598, 77602, 77606, 77610, 77614, - 77618, 77622, 77626, 77630, 77634, 77638, 77642, 77646, 77650, 77654, - 77658, 77662, 77666, 77670, 77674, 77678, 77682, 77686, 77690, 77694, - 77698, 77702, 77706, 77710, 77714, 77718, 77722, 77726, 77730, 77734, - 77738, 77742, 77746, 77750, 77754, 77758, 77762, 77766, 77770, 77774, - 77778, 77782, 77786, 77790, 77794, 77798, 77802, 77806, 77810, 77814, - 77818, 77822, 77826, 77830, 77834, 77838, 77842, 77846, 77850, 77854, - 77858, 77862, 77866, 77870, 77874, 77878, 0, 0, 77882, 77886, 77890, - 77894, 77898, 77902, 77906, 77910, 77914, 77918, 77922, 77926, 77930, - 77934, 77938, 77942, 77946, 77950, 77954, 77958, 77962, 77966, 77970, - 77974, 77978, 77982, 77986, 77990, 77994, 77998, 78002, 78006, 78010, - 78014, 78018, 78022, 78026, 78030, 78034, 78038, 78042, 78046, 78050, - 78054, 78058, 78062, 78066, 78070, 78074, 78078, 78082, 78086, 78090, - 78094, 78098, 78102, 78106, 78110, 78114, 78118, 78122, 78126, 78130, - 78134, 78138, 78142, 78146, 78150, 78154, 78158, 78162, 78166, 78170, - 78174, 78178, 78182, 78186, 78190, 78194, 78198, 78202, 78206, 78210, - 78214, 78218, 78222, 78226, 78230, 78234, 78238, 78242, 78246, 78250, - 78254, 78258, 78262, 78266, 78270, 78274, 78278, 78282, 78286, 78290, - 78294, 78298, 78302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78306, - 78311, 78316, 78321, 78326, 78331, 78339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 78344, 78351, 78358, 78365, 78372, 0, 0, 0, 0, 0, 78379, 78386, - 78393, 78403, 78409, 78415, 78421, 78427, 78433, 78439, 78446, 78452, - 78458, 78464, 78473, 78482, 78494, 78506, 78512, 78518, 78524, 78531, - 78538, 78545, 78552, 78559, 0, 78566, 78573, 78580, 78588, 78595, 0, - 78602, 0, 78609, 78616, 0, 78623, 78631, 0, 78638, 78645, 78652, 78659, - 78666, 78673, 78680, 78687, 78694, 78701, 78706, 78713, 78720, 78726, - 78732, 78738, 78744, 78750, 78756, 78762, 78768, 78774, 78780, 78786, - 78792, 78798, 78804, 78810, 78816, 78822, 78828, 78834, 78840, 78846, - 78852, 78858, 78864, 78870, 78876, 78882, 78888, 78894, 78900, 78906, - 78912, 78918, 78924, 78930, 78936, 78942, 78948, 78954, 78960, 78966, - 78972, 78978, 78984, 78990, 78996, 79002, 79008, 79014, 79020, 79026, - 79032, 79038, 79044, 79050, 79056, 79062, 79068, 79074, 79080, 79086, - 79092, 79098, 79104, 79110, 79116, 79122, 79128, 79134, 79140, 79146, - 79152, 79158, 79164, 79170, 79176, 79184, 79192, 79198, 79204, 79210, - 79216, 79225, 79234, 79242, 79250, 79258, 79266, 79274, 79282, 79290, - 79298, 79305, 79312, 79322, 79332, 79336, 79340, 79345, 79350, 79355, - 79360, 79369, 79378, 79384, 79390, 79397, 79404, 79411, 79415, 79421, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79427, 79433, 79439, - 79445, 79451, 79456, 79461, 79467, 79473, 79479, 79485, 79493, 79499, - 79505, 79513, 79521, 79529, 79537, 79542, 79547, 79552, 79557, 79570, - 79583, 79593, 79603, 79614, 79625, 79636, 79647, 79657, 79667, 79678, - 79689, 79700, 79711, 79721, 79731, 79741, 79757, 79773, 79789, 79796, - 79803, 79810, 79817, 79827, 79837, 79847, 79859, 79869, 79877, 79885, - 79894, 79902, 79912, 79920, 79928, 79936, 79945, 79953, 79963, 79971, - 79979, 79987, 79997, 80005, 80012, 80019, 80026, 80033, 80041, 80049, - 80057, 80065, 80073, 80082, 80090, 80098, 80106, 80114, 80122, 80131, - 80139, 80147, 80155, 80163, 80171, 80179, 80187, 80195, 80203, 80211, - 80220, 80228, 80238, 80246, 80254, 80262, 80272, 80280, 80288, 80296, - 80304, 80313, 80322, 80330, 80340, 80348, 80356, 80364, 80373, 80381, - 80391, 80399, 80406, 80413, 80421, 80428, 80437, 80444, 80452, 80460, - 80469, 80477, 80487, 80495, 80503, 80511, 80521, 80529, 80536, 80543, - 80551, 80558, 80567, 80574, 80584, 80594, 80605, 80614, 80623, 80632, - 80641, 80650, 80660, 80671, 80682, 80692, 80703, 80715, 80725, 80734, - 80743, 80751, 80760, 80770, 80778, 80787, 80796, 80804, 80813, 80823, - 80831, 80840, 80849, 80857, 80866, 80876, 80884, 80894, 80902, 80912, - 80920, 80928, 80937, 80945, 80955, 80963, 80971, 80981, 80989, 80996, - 81003, 81012, 81021, 81029, 81038, 81048, 81056, 81067, 81075, 81083, - 81090, 81098, 81107, 81114, 81124, 81134, 81145, 81155, 81166, 81174, - 81182, 81191, 81199, 81208, 81216, 81224, 81233, 81241, 81250, 81258, - 81265, 81272, 81279, 81286, 81294, 81302, 81310, 81318, 81327, 81335, - 81343, 81352, 81360, 81368, 81376, 81385, 81393, 81401, 81409, 81417, - 81425, 81433, 81441, 81449, 81457, 81466, 81474, 81482, 81490, 81498, - 81506, 81515, 81524, 81532, 81540, 81548, 81557, 81565, 81574, 81581, - 81588, 81596, 81603, 81611, 81619, 81628, 81636, 81645, 81653, 81661, - 81671, 81678, 81685, 81693, 81700, 81708, 81718, 81729, 81737, 81746, - 81754, 81763, 81771, 81780, 81788, 81797, 81805, 81814, 81823, 81831, - 81839, 81847, 81856, 81863, 81871, 81880, 81889, 81898, 81908, 81916, - 81926, 81934, 81944, 81952, 81962, 81970, 81980, 81988, 81997, 82004, - 82013, 82020, 82030, 82038, 82048, 82056, 82066, 82074, 82082, 82090, - 82099, 82107, 82116, 82125, 82134, 82143, 82153, 82161, 82171, 82179, - 82189, 82197, 82207, 82215, 82225, 82233, 82242, 82249, 82258, 82265, - 82275, 82283, 82293, 82301, 82311, 82319, 82327, 82335, 82344, 82352, - 82361, 82370, 82379, 82388, 82396, 82404, 82413, 82421, 82430, 82439, - 82447, 82455, 82463, 82472, 82480, 82488, 82497, 82505, 82513, 82521, - 82529, 82534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82539, - 82549, 82559, 82569, 82579, 82590, 82600, 82610, 82621, 82630, 82639, - 82648, 82659, 82669, 82679, 82691, 82701, 82711, 82721, 82731, 82741, - 82751, 82761, 82771, 82781, 82791, 82801, 82812, 82823, 82833, 82843, - 82855, 82866, 82877, 82887, 82897, 82907, 82917, 82927, 82937, 82947, - 82959, 82969, 82979, 82991, 83002, 83013, 83023, 83033, 83043, 83053, - 83065, 83075, 83085, 83096, 83107, 83117, 83127, 83136, 83145, 83154, - 83163, 83172, 83182, 0, 0, 83192, 83202, 83212, 83222, 83232, 83244, - 83254, 83264, 83276, 83286, 83298, 83307, 83316, 83327, 83337, 83349, - 83360, 83373, 83383, 83395, 83404, 83415, 83426, 83439, 83449, 83459, - 83469, 83479, 83489, 83498, 83507, 83516, 83525, 83535, 83545, 83555, - 83565, 83575, 83585, 83595, 83605, 83615, 83625, 83635, 83645, 83654, - 83663, 83672, 83682, 83692, 83702, 83712, 83722, 83733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83743, 83758, 83773, 83779, 83785, 83791, - 83797, 83803, 83809, 83815, 83821, 83829, 83833, 83836, 0, 0, 83844, - 83847, 83850, 83853, 83856, 83859, 83862, 83865, 83868, 83871, 83874, - 83877, 83880, 83883, 83886, 83889, 83892, 83900, 83909, 83920, 83928, - 83936, 83945, 83954, 83965, 83977, 0, 0, 0, 0, 0, 0, 83986, 83991, 83996, - 84003, 84010, 84016, 84022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84027, 84037, - 84047, 84057, 84066, 84077, 84086, 84095, 84105, 84115, 84127, 84139, - 84150, 84161, 84172, 84183, 84193, 84203, 84213, 84223, 84234, 84245, - 84249, 84254, 84263, 84272, 84276, 84280, 84284, 84289, 84294, 84299, - 84304, 84307, 84311, 0, 84316, 84319, 84322, 84326, 84330, 84335, 84339, - 84343, 84348, 84353, 84360, 84367, 84370, 84373, 84376, 84379, 84382, - 84386, 84390, 0, 84394, 84399, 84403, 84407, 0, 0, 0, 0, 84412, 84417, - 84424, 84429, 84434, 0, 84439, 84444, 84449, 84454, 84459, 84464, 84469, - 84474, 84479, 84484, 84489, 84494, 84503, 84512, 84520, 84528, 84537, - 84546, 84555, 84564, 84572, 84580, 84588, 84596, 84601, 84606, 84612, - 84618, 84624, 84630, 84638, 84646, 84652, 84658, 84664, 84670, 84676, - 84682, 84688, 84694, 84699, 84704, 84709, 84714, 84719, 84724, 84729, - 84734, 84740, 84746, 84752, 84758, 84764, 84770, 84776, 84782, 84788, - 84794, 84800, 84806, 84812, 84818, 84824, 84830, 84836, 84842, 84848, - 84854, 84860, 84866, 84872, 84878, 84884, 84890, 84896, 84902, 84908, - 84914, 84920, 84926, 84932, 84938, 84944, 84950, 84956, 84962, 84968, - 84974, 84980, 84986, 84992, 84998, 85004, 85010, 85016, 85022, 85028, - 85034, 85040, 85046, 85052, 85058, 85064, 85070, 85076, 85082, 85088, - 85094, 85099, 85104, 85109, 85114, 85120, 85126, 85132, 85138, 85144, - 85150, 85156, 85162, 85168, 85174, 85181, 85188, 85193, 85198, 85203, - 85208, 85220, 85232, 85243, 85254, 85266, 85278, 85286, 0, 0, 85294, 0, - 85302, 85306, 85310, 85313, 85317, 85321, 85324, 85327, 85331, 85335, - 85338, 85341, 85344, 85347, 85352, 85355, 85359, 85362, 85365, 85368, - 85371, 85374, 85377, 85380, 85383, 85386, 85389, 85392, 85396, 85400, - 85404, 85408, 85413, 85418, 85424, 85430, 85436, 85441, 85447, 85453, - 85459, 85464, 85470, 85476, 85481, 85486, 85492, 85497, 85503, 85509, - 85514, 85520, 85526, 85531, 85537, 85543, 85549, 85555, 85561, 85565, - 85570, 85574, 85579, 85583, 85588, 85593, 85599, 85605, 85611, 85616, - 85622, 85628, 85634, 85639, 85645, 85651, 85656, 85661, 85667, 85672, - 85678, 85684, 85689, 85695, 85701, 85706, 85712, 85718, 85724, 85730, - 85736, 85741, 85745, 85750, 85752, 85757, 85762, 85768, 85773, 85778, - 85782, 85788, 85793, 85798, 85803, 85808, 85813, 85818, 85823, 85829, - 85835, 85841, 85849, 85853, 85857, 85861, 85865, 85869, 85873, 85878, - 85883, 85888, 85893, 85897, 85902, 85907, 85912, 85917, 85922, 85927, - 85932, 85937, 85941, 85945, 85950, 85955, 85960, 85965, 85969, 85974, - 85979, 85984, 85989, 85993, 85998, 86003, 86008, 86013, 86017, 86022, - 86027, 86031, 86036, 86041, 86046, 86051, 86056, 86061, 86068, 86075, - 86079, 86084, 86089, 86094, 86099, 86104, 86109, 86114, 86119, 86124, - 86129, 86134, 86139, 86144, 86149, 86154, 86159, 86164, 86169, 86174, - 86179, 86184, 86189, 86194, 86199, 86204, 86209, 86214, 86219, 86224, 0, - 0, 0, 86229, 86233, 86238, 86242, 86247, 86252, 0, 0, 86256, 86261, - 86266, 86270, 86275, 86280, 0, 0, 86285, 86290, 86294, 86299, 86304, - 86309, 0, 0, 86314, 86319, 86324, 0, 0, 0, 86328, 86332, 86336, 86340, - 86343, 86347, 86351, 0, 86355, 86361, 86364, 86368, 86371, 86375, 86379, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86383, 86389, 86395, 86401, 86407, 0, 0, - 86411, 86417, 86423, 86429, 86435, 86441, 86448, 86455, 86462, 86469, - 86476, 86483, 0, 86490, 86497, 86504, 86510, 86517, 86524, 86531, 86538, - 86544, 86551, 86558, 86565, 86572, 86578, 86585, 86592, 86599, 86606, - 86612, 86619, 86626, 86633, 86640, 86647, 86654, 86661, 0, 86668, 86674, - 86681, 86688, 86695, 86702, 86708, 86715, 86722, 86729, 86736, 86743, - 86750, 86757, 86763, 86770, 86777, 86784, 86791, 0, 86798, 86805, 0, - 86812, 86819, 86826, 86833, 86840, 86847, 86854, 86861, 86868, 86875, - 86882, 86889, 86896, 86903, 86910, 0, 0, 86916, 86921, 86926, 86931, - 86936, 86941, 86946, 86951, 86956, 86961, 86966, 86971, 86976, 86981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 86986, 86993, 87000, 87007, 87014, 87021, - 87028, 87035, 87042, 87049, 87056, 87063, 87070, 87077, 87084, 87091, - 87098, 87105, 87112, 87119, 87127, 87135, 87142, 87149, 87154, 87162, - 87170, 87177, 87184, 87189, 87196, 87201, 87206, 87213, 87218, 87223, - 87228, 87236, 87241, 87246, 87253, 87258, 87263, 87270, 87277, 87282, - 87287, 87292, 87297, 87302, 87307, 87312, 87317, 87322, 87329, 87334, - 87341, 87346, 87351, 87356, 87361, 87366, 87371, 87376, 87381, 87386, - 87391, 87396, 87403, 87410, 87417, 87424, 87430, 87435, 87442, 87447, - 87452, 87461, 87468, 87477, 87484, 87489, 87494, 87502, 87507, 87512, - 87517, 87522, 87527, 87534, 87539, 87544, 87549, 87554, 87559, 87566, - 87573, 87580, 87587, 87594, 87601, 87608, 87615, 87622, 87629, 87636, - 87643, 87650, 87657, 87664, 87671, 87678, 87685, 87692, 87699, 87706, - 87713, 87720, 87727, 87734, 87741, 87748, 87755, 0, 0, 0, 0, 0, 87762, - 87770, 87778, 0, 0, 0, 0, 87783, 87787, 87791, 87795, 87799, 87803, - 87807, 87811, 87815, 87819, 87824, 87829, 87834, 87839, 87844, 87849, - 87854, 87859, 87864, 87870, 87876, 87882, 87889, 87896, 87903, 87910, - 87917, 87924, 87930, 87936, 87942, 87949, 87956, 87963, 87970, 87977, - 87984, 87991, 87998, 88005, 88012, 88019, 88026, 88033, 88040, 0, 0, 0, - 88047, 88055, 88063, 88071, 88079, 88087, 88097, 88107, 88115, 88123, - 88131, 88139, 88147, 88153, 88160, 88169, 88178, 88187, 88196, 88205, - 88214, 88224, 88235, 88245, 88256, 88265, 88274, 88283, 88293, 88304, - 88314, 88325, 88336, 88345, 88353, 88359, 88365, 88371, 88377, 88385, - 88393, 88399, 88406, 88416, 88423, 88430, 88437, 88444, 88451, 88461, - 88468, 88475, 88483, 88491, 88500, 88509, 88518, 88527, 88536, 88544, - 88553, 88562, 88571, 88575, 88582, 88587, 88592, 88596, 88600, 88604, - 88608, 88613, 88618, 88624, 88630, 88634, 88640, 88644, 88648, 88652, - 88656, 88660, 88664, 88670, 0, 0, 0, 0, 0, 88674, 88679, 88684, 88689, - 88694, 88701, 88706, 88711, 88716, 88721, 88726, 88731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88736, - 88743, 88752, 88761, 88768, 88775, 88782, 88789, 88796, 88803, 88809, - 88816, 88823, 88830, 88837, 88844, 88851, 88858, 88865, 88874, 88881, - 88888, 88895, 88902, 88909, 88916, 88923, 88930, 88939, 88946, 88953, - 88960, 88967, 88974, 88981, 88990, 88997, 89004, 89011, 89018, 89027, - 89034, 89041, 89048, 89056, 89065, 0, 0, 89074, 89078, 89082, 89087, - 89092, 89097, 89102, 89106, 89111, 89116, 89121, 89126, 89131, 89136, - 89140, 89144, 89149, 89154, 89159, 89163, 89168, 89173, 89177, 89182, - 89187, 89192, 89197, 89202, 89207, 0, 0, 0, 89212, 89216, 89221, 89226, - 89230, 89235, 89239, 89244, 89249, 89254, 89259, 89263, 89267, 89272, - 89277, 89282, 89287, 89292, 89297, 89301, 89306, 89311, 89316, 89321, - 89326, 89331, 89335, 89339, 89344, 89349, 89354, 89359, 89364, 89369, - 89374, 89379, 89384, 89389, 89394, 89399, 89404, 89409, 89414, 89419, - 89424, 89429, 89434, 89439, 89444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89449, 89453, 89458, 89463, 89468, 89472, - 89477, 89482, 89487, 89492, 89496, 89500, 89505, 89510, 89515, 89520, - 89524, 89529, 89534, 89539, 89544, 89549, 89554, 89558, 89563, 89568, - 89573, 89578, 89583, 89588, 89593, 0, 89598, 89603, 89608, 89614, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89620, 89625, 89630, 89635, 89640, 89645, - 89650, 89655, 89660, 89665, 89670, 89675, 89680, 89685, 89690, 89695, - 89700, 89705, 89710, 89715, 89720, 89725, 89730, 89735, 89740, 89745, - 89750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 89757, 89762, 89767, 89772, 89777, 89782, 89787, - 89792, 89797, 89802, 89807, 89812, 89817, 89822, 89827, 89832, 89837, - 89842, 89847, 89852, 89857, 89862, 89867, 89872, 89877, 89882, 89887, - 89891, 89895, 89899, 0, 89904, 89910, 89915, 89920, 89925, 89930, 89936, - 89942, 89948, 89954, 89960, 89966, 89972, 89978, 89984, 89990, 89996, - 90002, 90008, 90013, 90019, 90025, 90030, 90036, 90041, 90047, 90053, - 90058, 90064, 90070, 90075, 90081, 90087, 90092, 90098, 90104, 90110, 0, - 0, 0, 0, 90115, 90121, 90127, 90133, 90139, 90145, 90151, 90157, 90163, - 90170, 90175, 90180, 90186, 90192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 79063, 79067, 79071, 79075, 79079, 79083, 79087, 79091, + 79095, 79099, 79103, 79107, 79111, 79115, 79119, 79123, 79127, 79131, + 79135, 79139, 79143, 79147, 79151, 0, 0, 0, 0, 79155, 79159, 79163, + 79167, 79171, 79175, 79179, 79183, 79187, 79191, 79195, 79199, 79203, + 79207, 79211, 79215, 79219, 79223, 79227, 79231, 79235, 79239, 79243, + 79247, 79251, 79255, 79259, 79263, 79267, 79271, 79275, 79279, 79283, + 79287, 79291, 79295, 79299, 79303, 79307, 79311, 79315, 79319, 79323, + 79327, 79331, 79335, 79339, 79343, 79347, 0, 0, 0, 0, 79351, 79355, + 79359, 79363, 79367, 79371, 79375, 79379, 79383, 79387, 79391, 79395, + 79399, 79403, 79407, 79411, 79415, 79419, 79423, 79427, 79431, 79435, + 79439, 79443, 79447, 79451, 79455, 79459, 79463, 79467, 79471, 79475, + 79479, 79483, 79487, 79491, 79495, 79499, 79503, 79507, 79511, 79515, + 79519, 79523, 79527, 79531, 79535, 79539, 79543, 79547, 79551, 79555, + 79559, 79563, 79567, 79571, 79575, 79579, 79583, 79587, 79591, 79595, + 79599, 79603, 79607, 79611, 79615, 79619, 79623, 79627, 79631, 79635, + 79639, 79643, 79647, 79651, 79655, 79659, 79663, 79667, 79671, 79675, + 79679, 79683, 79687, 79691, 79695, 79699, 79703, 79707, 79711, 79715, + 79719, 79723, 79727, 79731, 79735, 79739, 79743, 79747, 79751, 79755, + 79759, 79763, 79767, 79771, 79775, 79779, 79783, 79787, 79791, 79795, + 79799, 79803, 79807, 79811, 79815, 79819, 79823, 79827, 79831, 79835, + 79839, 79843, 79847, 79851, 79855, 79859, 79863, 79867, 79871, 79875, + 79879, 79883, 79887, 79891, 79895, 79899, 79903, 79907, 79911, 79915, + 79919, 79923, 79927, 79931, 79935, 79939, 79943, 79947, 79951, 79955, + 79959, 79963, 79967, 79971, 79975, 79979, 79983, 79987, 79991, 79995, + 79999, 80003, 80007, 80011, 80015, 80019, 80023, 80027, 80031, 80035, + 80039, 80043, 80047, 80051, 80055, 80059, 80063, 80067, 80071, 80075, + 80079, 80083, 80087, 80091, 80095, 80099, 80103, 80107, 80111, 80115, + 80119, 80123, 80127, 80131, 80135, 80139, 80143, 80147, 80151, 80155, + 80159, 80163, 80167, 80171, 80175, 80179, 80183, 80187, 80191, 80195, + 80199, 80203, 80207, 80211, 80215, 80219, 80223, 80227, 80231, 80235, + 80239, 80243, 80247, 80251, 80255, 80259, 80263, 80267, 80271, 80275, + 80279, 80283, 80287, 80291, 80295, 80299, 80303, 80307, 80311, 80315, + 80319, 80323, 80327, 80331, 80335, 80339, 80343, 80347, 80351, 80355, + 80359, 80363, 80367, 80371, 80375, 80379, 80383, 80387, 80391, 80395, + 80399, 80403, 80407, 80411, 80415, 80419, 80423, 80427, 80431, 80435, + 80439, 80443, 80447, 80451, 80455, 80459, 80463, 80467, 80471, 80475, + 80479, 80483, 80487, 80491, 80495, 80499, 80503, 80507, 80511, 80515, + 80519, 80523, 80527, 80531, 80535, 80539, 80543, 80547, 80551, 80555, + 80559, 80563, 80567, 80571, 80575, 80579, 80583, 80587, 80591, 80595, + 80599, 80603, 80607, 80611, 80615, 80619, 80623, 80627, 80631, 80635, + 80639, 80643, 80647, 80651, 80655, 80659, 80663, 80667, 80671, 80675, + 80679, 80683, 80687, 80691, 80695, 80699, 80703, 80707, 80711, 80715, + 80719, 80723, 80727, 80731, 80735, 80739, 80743, 80747, 80751, 80755, + 80759, 80763, 80767, 80771, 80775, 80779, 80783, 80787, 80791, 80795, + 80799, 80803, 80807, 80811, 0, 0, 80815, 80819, 80823, 80827, 80831, + 80835, 80839, 80843, 80847, 80851, 80855, 80859, 80863, 80867, 80871, + 80875, 80879, 80883, 80887, 80891, 80895, 80899, 80903, 80907, 80911, + 80915, 80919, 80923, 80927, 80931, 80935, 80939, 80943, 80947, 80951, + 80955, 80959, 80963, 80967, 80971, 80975, 80979, 80983, 80987, 80991, + 80995, 80999, 81003, 81007, 81011, 81015, 81019, 81023, 81027, 81031, + 81035, 81039, 81043, 81047, 81051, 81055, 81059, 81063, 81067, 81071, + 81075, 81079, 81083, 81087, 81091, 81095, 81099, 81103, 81107, 81111, + 81115, 81119, 81123, 81127, 81131, 81135, 81139, 81143, 81147, 81151, + 81155, 81159, 81163, 81167, 81171, 81175, 81179, 81183, 81187, 81191, + 81195, 81199, 81203, 81207, 81211, 81215, 81219, 81223, 81227, 81231, + 81235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81239, 81244, 81249, + 81254, 81259, 81264, 81272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81277, + 81284, 81291, 81298, 81305, 0, 0, 0, 0, 0, 81312, 81319, 81326, 81336, + 81342, 81348, 81354, 81360, 81366, 81372, 81379, 81385, 81391, 81397, + 81406, 81415, 81427, 81439, 81445, 81451, 81457, 81464, 81471, 81478, + 81485, 81492, 0, 81499, 81506, 81513, 81521, 81528, 0, 81535, 0, 81542, + 81549, 0, 81556, 81564, 0, 81571, 81578, 81585, 81592, 81599, 81606, + 81613, 81620, 81627, 81634, 81639, 81646, 81653, 81659, 81665, 81671, + 81677, 81683, 81689, 81695, 81701, 81707, 81713, 81719, 81725, 81731, + 81737, 81743, 81749, 81755, 81761, 81767, 81773, 81779, 81785, 81791, + 81797, 81803, 81809, 81815, 81821, 81827, 81833, 81839, 81845, 81851, + 81857, 81863, 81869, 81875, 81881, 81887, 81893, 81899, 81905, 81911, + 81917, 81923, 81929, 81935, 81941, 81947, 81953, 81959, 81965, 81971, + 81977, 81983, 81989, 81995, 82001, 82007, 82013, 82019, 82025, 82031, + 82037, 82043, 82049, 82055, 82061, 82067, 82073, 82079, 82085, 82091, + 82097, 82103, 82109, 82117, 82125, 82131, 82137, 82143, 82149, 82158, + 82167, 82175, 82183, 82191, 82199, 82207, 82215, 82223, 82231, 82238, + 82245, 82256, 82267, 82271, 82275, 82280, 82285, 82290, 82295, 82303, + 82311, 82317, 82323, 82330, 82337, 82344, 82348, 82354, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82360, 82366, 82372, 82378, 82384, + 82389, 82394, 82400, 82406, 82412, 82418, 82427, 82433, 82439, 82447, + 82455, 82463, 82471, 82476, 82481, 82486, 82491, 82504, 82517, 82528, + 82539, 82551, 82563, 82575, 82587, 82598, 82609, 82621, 82633, 82645, + 82657, 82668, 82679, 82690, 82707, 82724, 82741, 82748, 82755, 82762, + 82769, 82780, 82791, 82802, 82815, 82826, 82834, 82842, 82851, 82859, + 82869, 82877, 82885, 82893, 82902, 82910, 82920, 82928, 82936, 82944, + 82954, 82962, 82969, 82976, 82983, 82990, 82998, 83006, 83014, 83022, + 83030, 83039, 83047, 83055, 83063, 83071, 83079, 83088, 83096, 83104, + 83112, 83120, 83128, 83136, 83144, 83152, 83160, 83168, 83177, 83185, + 83195, 83203, 83211, 83219, 83229, 83237, 83245, 83253, 83261, 83270, + 83279, 83287, 83297, 83305, 83313, 83321, 83330, 83338, 83348, 83356, + 83363, 83370, 83378, 83385, 83394, 83401, 83409, 83417, 83426, 83434, + 83444, 83452, 83460, 83468, 83478, 83486, 83493, 83500, 83508, 83515, + 83524, 83531, 83541, 83551, 83562, 83571, 83580, 83589, 83598, 83607, + 83617, 83629, 83641, 83652, 83664, 83677, 83688, 83697, 83706, 83714, + 83723, 83733, 83741, 83750, 83759, 83767, 83776, 83786, 83794, 83803, + 83812, 83820, 83829, 83839, 83847, 83857, 83865, 83875, 83883, 83891, + 83900, 83908, 83918, 83926, 83934, 83944, 83952, 83959, 83966, 83975, + 83984, 83992, 84001, 84011, 84019, 84030, 84038, 84046, 84053, 84061, + 84070, 84077, 84088, 84099, 84111, 84122, 84134, 84142, 84150, 84159, + 84167, 84176, 84184, 84192, 84201, 84209, 84218, 84226, 84233, 84240, + 84247, 84254, 84262, 84270, 84278, 84286, 84295, 84303, 84311, 84320, + 84328, 84336, 84344, 84353, 84361, 84369, 84377, 84385, 84393, 84401, + 84409, 84417, 84425, 84434, 84442, 84450, 84458, 84466, 84474, 84483, + 84492, 84500, 84508, 84516, 84525, 84533, 84542, 84549, 84556, 84564, + 84571, 84579, 84587, 84596, 84604, 84613, 84621, 84629, 84639, 84646, + 84653, 84661, 84668, 84676, 84687, 84699, 84707, 84716, 84724, 84733, + 84741, 84750, 84758, 84767, 84775, 84784, 84793, 84801, 84809, 84817, + 84826, 84833, 84841, 84850, 84859, 84868, 84878, 84886, 84896, 84904, + 84914, 84922, 84932, 84940, 84950, 84958, 84967, 84974, 84983, 84990, + 85000, 85008, 85018, 85026, 85036, 85044, 85052, 85060, 85069, 85077, + 85086, 85095, 85104, 85113, 85123, 85131, 85141, 85149, 85159, 85167, + 85177, 85185, 85195, 85203, 85212, 85219, 85228, 85235, 85245, 85253, + 85263, 85271, 85281, 85289, 85297, 85305, 85314, 85322, 85331, 85340, + 85349, 85358, 85366, 85374, 85383, 85391, 85400, 85409, 85417, 85425, + 85433, 85442, 85450, 85458, 85467, 85475, 85483, 85491, 85499, 85504, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85509, 85519, 85529, 85539, + 85549, 85560, 85570, 85580, 85591, 85600, 85609, 85618, 85629, 85639, + 85649, 85661, 85671, 85681, 85691, 85701, 85711, 85721, 85731, 85741, + 85751, 85761, 85771, 85782, 85793, 85803, 85813, 85825, 85836, 85847, + 85857, 85867, 85877, 85887, 85897, 85907, 85917, 85929, 85939, 85949, + 85961, 85972, 85983, 85993, 86003, 86013, 86023, 86035, 86045, 86055, + 86066, 86077, 86087, 86097, 86106, 86115, 86124, 86133, 86142, 86152, 0, + 0, 86162, 86172, 86182, 86192, 86202, 86214, 86224, 86234, 86246, 86256, + 86268, 86277, 86286, 86297, 86307, 86319, 86330, 86343, 86353, 86365, + 86374, 86385, 86396, 86409, 86419, 86429, 86439, 86449, 86459, 86468, + 86477, 86486, 86495, 86505, 86515, 86525, 86535, 86545, 86555, 86565, + 86575, 86585, 86595, 86605, 86615, 86624, 86633, 86642, 86652, 86662, + 86672, 86682, 86692, 86703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 90198, 90203, 90208, 90213, 90219, 90224, 90230, 90236, - 90242, 90248, 90255, 90261, 90268, 90273, 90278, 90283, 90288, 90293, - 90298, 90303, 90308, 90313, 90318, 90323, 90328, 90333, 90338, 90343, - 90348, 90353, 90358, 90363, 90368, 90373, 90378, 90383, 90388, 90393, - 90398, 90403, 90408, 90413, 90418, 90423, 90429, 90434, 90440, 90446, - 90452, 90458, 90465, 90471, 90478, 90483, 90488, 90493, 90498, 90503, - 90508, 90513, 90518, 90523, 90528, 90533, 90538, 90543, 90548, 90553, - 90558, 90563, 90568, 90573, 90578, 90583, 90588, 90593, 90598, 90603, - 90608, 90613, 90618, 90623, 90628, 90633, 90638, 90643, 90648, 90653, - 90658, 90663, 90668, 90673, 90678, 90683, 90688, 90693, 90698, 90703, - 90708, 90713, 90718, 90723, 90728, 90733, 90738, 90743, 90748, 90753, - 90758, 90763, 90768, 90773, 90778, 90783, 90788, 90793, 90798, 90803, - 90808, 90813, 90818, 90823, 90828, 90833, 90838, 90843, 90848, 90853, - 90858, 90863, 90868, 90873, 90878, 90883, 90888, 90893, 90897, 90901, - 90906, 90911, 90916, 90921, 90926, 90931, 90936, 90941, 90946, 90951, - 90956, 90960, 90964, 90968, 90972, 90976, 90980, 90984, 90989, 90994, 0, - 0, 90999, 91004, 91008, 91012, 91016, 91020, 91024, 91028, 91032, 91036, + 0, 86713, 86728, 86743, 86749, 86755, 86761, 86767, 86773, 86779, 86785, + 86791, 86799, 86803, 86806, 0, 0, 86814, 86817, 86820, 86823, 86826, + 86829, 86832, 86835, 86838, 86841, 86844, 86847, 86850, 86853, 86856, + 86859, 86862, 86870, 86879, 86890, 86898, 86906, 86915, 86924, 86935, + 86947, 0, 0, 0, 0, 0, 0, 86956, 86961, 86966, 86973, 86980, 86986, 86992, + 86997, 87002, 87007, 87013, 87019, 87025, 87031, 0, 0, 87037, 87047, + 87057, 87067, 87076, 87087, 87096, 87105, 87115, 87125, 87137, 87149, + 87160, 87171, 87182, 87193, 87203, 87213, 87223, 87233, 87244, 87255, + 87259, 87264, 87273, 87282, 87286, 87290, 87294, 87299, 87304, 87309, + 87314, 87317, 87321, 0, 87326, 87329, 87332, 87336, 87340, 87345, 87349, + 87353, 87358, 87363, 87370, 87377, 87380, 87383, 87386, 87389, 87392, + 87396, 87400, 0, 87404, 87409, 87413, 87417, 0, 0, 0, 0, 87422, 87427, + 87434, 87439, 87444, 0, 87449, 87454, 87459, 87464, 87469, 87474, 87479, + 87484, 87489, 87494, 87499, 87505, 87514, 87523, 87532, 87541, 87551, + 87561, 87571, 87581, 87590, 87599, 87608, 87617, 87622, 87627, 87633, + 87639, 87645, 87651, 87659, 87667, 87673, 87679, 87685, 87691, 87697, + 87703, 87709, 87715, 87720, 87725, 87730, 87735, 87740, 87745, 87750, + 87755, 87761, 87767, 87773, 87779, 87785, 87791, 87797, 87803, 87809, + 87815, 87821, 87827, 87833, 87839, 87845, 87851, 87857, 87863, 87869, + 87875, 87881, 87887, 87893, 87899, 87905, 87911, 87917, 87923, 87929, + 87935, 87941, 87947, 87953, 87959, 87965, 87971, 87977, 87983, 87989, + 87995, 88001, 88007, 88013, 88019, 88025, 88031, 88037, 88043, 88049, + 88055, 88061, 88067, 88073, 88079, 88085, 88091, 88097, 88103, 88109, + 88115, 88120, 88125, 88130, 88135, 88141, 88147, 88153, 88159, 88165, + 88171, 88177, 88183, 88189, 88195, 88202, 88209, 88214, 88219, 88224, + 88229, 88241, 88253, 88265, 88277, 88290, 88303, 88311, 0, 0, 88319, 0, + 88327, 88331, 88335, 88338, 88342, 88346, 88349, 88352, 88356, 88360, + 88363, 88366, 88369, 88372, 88377, 88380, 88384, 88387, 88390, 88393, + 88396, 88399, 88402, 88405, 88408, 88411, 88414, 88417, 88421, 88425, + 88429, 88433, 88438, 88443, 88449, 88455, 88461, 88466, 88472, 88478, + 88484, 88489, 88495, 88501, 88506, 88512, 88518, 88523, 88529, 88535, + 88540, 88545, 88551, 88556, 88562, 88568, 88574, 88580, 88586, 88590, + 88595, 88599, 88604, 88608, 88613, 88618, 88624, 88630, 88636, 88641, + 88647, 88653, 88659, 88664, 88670, 88676, 88681, 88687, 88693, 88698, + 88704, 88710, 88715, 88720, 88726, 88731, 88737, 88743, 88749, 88755, + 88761, 88766, 88770, 88775, 88778, 88783, 88788, 88794, 88799, 88804, + 88808, 88814, 88819, 88824, 88829, 88834, 88839, 88844, 88849, 88855, + 88861, 88867, 88875, 88879, 88883, 88887, 88891, 88895, 88899, 88904, + 88909, 88914, 88919, 88924, 88929, 88934, 88939, 88944, 88949, 88954, + 88959, 88964, 88968, 88972, 88977, 88982, 88987, 88992, 88996, 89001, + 89006, 89011, 89016, 89020, 89025, 89030, 89035, 89040, 89044, 89049, + 89054, 89059, 89064, 89069, 89074, 89079, 89084, 89089, 89096, 89103, + 89107, 89112, 89117, 89122, 89127, 89132, 89137, 89142, 89147, 89152, + 89157, 89162, 89167, 89172, 89177, 89182, 89187, 89192, 89197, 89202, + 89207, 89212, 89217, 89222, 89227, 89232, 89237, 89242, 89247, 89252, 0, + 0, 0, 89257, 89261, 89266, 89270, 89275, 89280, 0, 0, 89284, 89289, + 89294, 89298, 89303, 89308, 0, 0, 89313, 89318, 89322, 89327, 89332, + 89337, 0, 0, 89342, 89347, 89352, 0, 0, 0, 89356, 89360, 89364, 89368, + 89371, 89375, 89379, 0, 89383, 89389, 89392, 89395, 89398, 89401, 89405, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89409, 89415, 89421, 89427, 89433, 0, 0, + 89437, 89443, 89449, 89455, 89461, 89467, 89474, 89481, 89488, 89495, + 89502, 89509, 0, 89516, 89523, 89530, 89536, 89543, 89550, 89557, 89564, + 89570, 89577, 89584, 89591, 89598, 89604, 89611, 89618, 89625, 89632, + 89638, 89645, 89652, 89659, 89666, 89673, 89680, 89687, 0, 89694, 89701, + 89708, 89715, 89722, 89729, 89736, 89743, 89750, 89757, 89764, 89771, + 89778, 89785, 89791, 89798, 89805, 89812, 89819, 0, 89826, 89833, 0, + 89840, 89847, 89854, 89861, 89868, 89875, 89882, 89889, 89896, 89903, + 89910, 89917, 89924, 89931, 89938, 0, 0, 89944, 89949, 89954, 89959, + 89964, 89969, 89974, 89979, 89984, 89989, 89994, 89999, 90004, 90009, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90014, 90021, 90028, 90035, 90042, 90049, + 90056, 90063, 90070, 90077, 90084, 90091, 90098, 90105, 90112, 90119, + 90126, 90133, 90140, 90147, 90155, 90163, 90170, 90177, 90182, 90190, + 90198, 90205, 90212, 90217, 90224, 90229, 90234, 90241, 90246, 90251, + 90256, 90264, 90269, 90274, 90281, 90286, 90291, 90298, 90305, 90310, + 90315, 90320, 90325, 90330, 90335, 90340, 90345, 90350, 90357, 90362, + 90369, 90374, 90379, 90384, 90389, 90394, 90399, 90404, 90409, 90414, + 90419, 90424, 90431, 90438, 90445, 90452, 90458, 90463, 90470, 90475, + 90480, 90489, 90496, 90505, 90512, 90517, 90522, 90530, 90535, 90540, + 90545, 90550, 90555, 90562, 90567, 90572, 90577, 90582, 90587, 90594, + 90601, 90608, 90615, 90622, 90629, 90636, 90643, 90650, 90657, 90664, + 90671, 90678, 90685, 90692, 90699, 90706, 90713, 90720, 90727, 90734, + 90741, 90748, 90755, 90762, 90769, 90776, 90783, 0, 0, 0, 0, 0, 90790, + 90798, 90806, 0, 0, 0, 0, 90811, 90815, 90819, 90823, 90827, 90831, + 90835, 90839, 90843, 90847, 90852, 90857, 90862, 90867, 90872, 90877, + 90882, 90887, 90892, 90898, 90904, 90910, 90917, 90924, 90931, 90938, + 90945, 90952, 90958, 90964, 90970, 90977, 90984, 90991, 90998, 91005, + 91012, 91019, 91026, 91033, 91040, 91047, 91054, 91061, 91068, 0, 0, 0, + 91075, 91083, 91091, 91099, 91107, 91115, 91125, 91135, 91143, 91151, + 91159, 91167, 91175, 91181, 91188, 91197, 91206, 91215, 91224, 91233, + 91242, 91252, 91263, 91273, 91284, 91293, 91302, 91311, 91321, 91332, + 91342, 91353, 91364, 91373, 91381, 91387, 91393, 91399, 91405, 91413, + 91421, 91427, 91434, 91444, 91451, 91458, 91465, 91472, 91479, 91489, + 91496, 91503, 91511, 91519, 91528, 91537, 91546, 91555, 91564, 91572, + 91581, 91590, 91599, 91603, 91610, 91615, 91620, 91624, 91628, 91632, + 91636, 91641, 91646, 91652, 91658, 91662, 91668, 91672, 91676, 91680, + 91684, 91688, 91692, 91698, 91702, 91707, 0, 0, 0, 91711, 91716, 91721, + 91726, 91731, 91738, 91743, 91748, 91753, 91758, 91763, 91768, 0, 0, 0, + 0, 91773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91779, 91786, 91795, 91804, 91811, 91818, 91825, 91832, 91839, + 91846, 91852, 91859, 91866, 91873, 91880, 91887, 91894, 91901, 91908, + 91917, 91924, 91931, 91938, 91945, 91952, 91959, 91966, 91973, 91982, + 91989, 91996, 92003, 92010, 92017, 92024, 92033, 92040, 92047, 92054, + 92061, 92070, 92077, 92084, 92091, 92099, 92108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91040, 91044, 91048, 91052, - 91056, 91060, 0, 0, 91065, 0, 91070, 91074, 91079, 91084, 91089, 91094, - 91099, 91104, 91109, 91114, 91119, 91123, 91128, 91133, 91138, 91143, - 91147, 91152, 91157, 91162, 91167, 91171, 91176, 91181, 91186, 91191, - 91195, 91200, 91205, 91210, 91215, 91219, 91224, 91229, 91234, 91239, - 91244, 91249, 91254, 91258, 91263, 91268, 91273, 91278, 0, 91283, 91288, - 0, 0, 0, 91293, 0, 0, 91298, 91303, 91310, 91317, 91324, 91331, 91338, - 91345, 91352, 91359, 91366, 91373, 91380, 91387, 91394, 91401, 91408, - 91415, 91422, 91429, 91436, 91443, 91450, 0, 91457, 91464, 91470, 91476, - 91482, 91489, 91496, 91504, 91512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91521, 91526, - 91531, 91536, 91541, 91546, 91551, 91556, 91561, 91566, 91571, 91576, - 91581, 91586, 91591, 91596, 91601, 91606, 91611, 91616, 91621, 91626, - 91631, 91635, 91640, 91645, 91651, 91655, 0, 0, 0, 91659, 91665, 91669, - 91674, 91679, 91684, 91688, 91693, 91697, 91702, 91707, 91711, 91715, - 91720, 91724, 91728, 91733, 91738, 91742, 91747, 91752, 91757, 91762, - 91767, 91772, 91777, 91782, 0, 0, 0, 0, 0, 91787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 91792, 91798, 91804, 91810, 91816, 91822, 91829, - 91836, 91843, 91849, 91855, 91861, 91868, 91875, 91882, 91888, 91895, - 91902, 91909, 91916, 91922, 91929, 91936, 91942, 91949, 91956, 91963, - 91970, 91977, 91983, 91990, 91997, 92004, 92010, 92016, 92022, 92028, - 92034, 92041, 92048, 92054, 92060, 92066, 92073, 92079, 92086, 92093, - 92100, 92106, 92114, 92121, 92127, 92134, 92141, 92148, 92154, 0, 0, 0, - 0, 0, 0, 92161, 92169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 92177, 92181, 92186, 92191, 0, 92197, 92202, 0, 0, 0, 0, 0, 92207, 92213, - 92220, 92225, 92230, 92234, 92239, 92244, 0, 92249, 92254, 92259, 0, - 92264, 92269, 92274, 92279, 92284, 92289, 92294, 92299, 92304, 92309, - 92314, 92318, 92322, 92327, 92332, 92337, 92341, 92345, 92349, 92354, - 92359, 92364, 92369, 92373, 92378, 92382, 92387, 0, 0, 0, 0, 92392, - 92398, 92403, 0, 0, 0, 0, 92408, 92412, 92416, 92420, 92424, 92428, - 92433, 92438, 92444, 0, 0, 0, 0, 0, 0, 0, 0, 92450, 92456, 92463, 92469, - 92476, 92482, 92488, 92494, 92501, 0, 0, 0, 0, 0, 0, 0, 92507, 92515, - 92523, 92531, 92539, 92547, 92555, 92563, 92571, 92579, 92587, 92595, - 92603, 92611, 92619, 92627, 92635, 92643, 92651, 92659, 92667, 92675, - 92683, 92691, 92699, 92707, 92715, 92723, 92731, 92739, 92746, 92754, - 92762, 92766, 92771, 92776, 92781, 92786, 92791, 92796, 92801, 92805, - 92810, 92814, 92819, 92823, 92828, 92832, 92837, 92842, 92847, 92852, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 92117, 92121, 92125, 92130, 92135, 92140, 92145, 92149, 92154, + 92159, 92164, 92169, 92174, 92179, 92183, 92188, 92193, 92198, 92203, + 92207, 92212, 92217, 92221, 92225, 92230, 92235, 92240, 92245, 92250, 0, + 0, 0, 92255, 92259, 92264, 92269, 92273, 92278, 92282, 92287, 92292, + 92297, 92302, 92307, 92311, 92316, 92321, 92326, 92331, 92335, 92340, + 92344, 92349, 92354, 92359, 92364, 92369, 92374, 92378, 92382, 92387, + 92392, 92397, 92402, 92407, 92412, 92417, 92422, 92427, 92432, 92437, + 92442, 92447, 92452, 92457, 92462, 92467, 92472, 92477, 92482, 92487, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92492, 92498, 92503, 92508, + 92513, 92518, 92523, 92528, 92533, 92538, 92543, 92549, 92555, 92561, + 92567, 92573, 92579, 92585, 92591, 92597, 92604, 92611, 92618, 92626, + 92634, 92642, 92650, 92658, 0, 0, 0, 0, 92666, 92670, 92675, 92680, + 92685, 92689, 92694, 92699, 92704, 92709, 92713, 92717, 92722, 92727, + 92732, 92737, 92741, 92746, 92751, 92756, 92761, 92766, 92771, 92775, + 92780, 92785, 92790, 92795, 92800, 92805, 92810, 92815, 92820, 92825, + 92830, 92836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92842, 92847, 92852, 92857, 92862, 92867, 92872, 92877, 92882, 92887, 92892, 92897, 92902, 92907, 92912, 92917, 92922, 92927, 92932, 92937, 92942, 92947, 92952, - 92957, 92962, 92967, 92972, 92977, 92982, 92987, 92992, 92997, 93002, - 93007, 93012, 93017, 93022, 0, 0, 0, 93027, 93032, 93041, 93049, 93058, - 93067, 93078, 93089, 93096, 93103, 93110, 93117, 93124, 93131, 93138, - 93145, 93152, 93159, 93166, 93173, 93180, 93187, 93194, 93201, 93208, - 93215, 93222, 93229, 93236, 0, 0, 93243, 93249, 93255, 93261, 93267, - 93274, 93281, 93289, 93297, 93304, 93311, 93318, 93325, 93332, 93339, - 93346, 93353, 93360, 93367, 93374, 93381, 93388, 93395, 93402, 93409, - 93416, 93423, 0, 0, 0, 0, 0, 93430, 93436, 93442, 93448, 93454, 93461, - 93468, 93476, 93484, 93490, 93496, 93503, 93509, 93515, 93521, 93527, - 93534, 93541, 93548, 93555, 93562, 93569, 93576, 93583, 93590, 93597, - 93604, 93611, 93618, 93625, 93632, 93639, 93646, 93653, 93660, 93667, - 93674, 93681, 93688, 93695, 93702, 93709, 93716, 93723, 93730, 93737, - 93744, 93751, 93758, 93765, 93772, 93779, 93786, 93793, 93800, 93807, - 93814, 93821, 93828, 93835, 93842, 93849, 93856, 93863, 93870, 93877, - 93884, 93891, 93898, 93905, 93912, 93919, 93926, 93933, 93940, 93947, - 93954, 93961, 93968, 93975, 93982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 92957, 92962, 92967, 92972, 0, 0, 0, 0, 0, 92979, 92985, 92991, 92997, + 93003, 93008, 93014, 93020, 93026, 93032, 93037, 93043, 93049, 93055, + 93061, 93067, 93073, 93079, 93085, 93091, 93096, 93102, 93108, 93114, + 93120, 93126, 93131, 93137, 93143, 93148, 93154, 93160, 93166, 93172, + 93178, 93184, 93190, 93195, 93201, 93208, 93215, 93222, 93229, 0, 0, 0, + 0, 0, 93236, 93241, 93246, 93251, 93256, 93261, 93266, 93271, 93276, + 93281, 93286, 93291, 93296, 93301, 93306, 93311, 93316, 93321, 93326, + 93331, 93336, 93341, 93346, 93351, 93356, 93361, 93366, 93370, 93374, + 93378, 0, 93383, 93389, 93394, 93399, 93404, 93409, 93415, 93421, 93427, + 93433, 93439, 93445, 93451, 93457, 93463, 93469, 93475, 93481, 93487, + 93492, 93498, 93504, 93509, 93515, 93520, 93526, 93532, 93537, 93543, + 93549, 93555, 93561, 93567, 93573, 93579, 93585, 93591, 0, 0, 0, 0, + 93596, 93602, 93608, 93614, 93620, 93626, 93632, 93638, 93644, 93651, + 93656, 93661, 93667, 93673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 93679, 93685, 93691, 93697, 93704, 93710, 93717, 93724, 93731, + 93738, 93746, 93753, 93761, 93767, 93773, 93779, 93785, 93791, 93797, + 93803, 93809, 93815, 93821, 93827, 93833, 93839, 93845, 93851, 93857, + 93863, 93869, 93875, 93881, 93887, 93893, 93899, 93905, 93911, 93917, + 93923, 93929, 93935, 93941, 93947, 93954, 93960, 93967, 93974, 93981, + 93988, 93996, 94003, 94011, 94017, 94023, 94029, 94035, 94041, 94047, + 94053, 94059, 94065, 94071, 94077, 94083, 94089, 94095, 94101, 94107, + 94113, 94119, 94125, 94131, 94137, 94143, 94149, 94155, 94161, 94167, + 94173, 94179, 94184, 94189, 94194, 94199, 94204, 94209, 94214, 94219, + 94224, 94229, 94234, 94239, 94244, 94249, 94254, 94259, 94264, 94269, + 94274, 94279, 94284, 94289, 94294, 94299, 94304, 94309, 94314, 94319, + 94324, 94329, 94334, 94339, 94344, 94349, 94354, 94359, 94364, 94369, + 94374, 94379, 94384, 94389, 94394, 94399, 94404, 94409, 94414, 94419, + 94424, 94429, 94434, 94439, 94444, 94449, 94454, 94459, 94464, 94469, + 94474, 94479, 94484, 94489, 94494, 94499, 94504, 94509, 94514, 94519, + 94523, 94527, 94531, 94535, 94539, 94543, 94547, 94552, 94557, 0, 0, + 94562, 94567, 94571, 94575, 94579, 94583, 94587, 94591, 94595, 94599, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94603, 94607, 94612, 94617, 94622, + 94627, 94632, 94637, 94642, 94646, 94651, 94656, 94661, 94666, 94670, + 94675, 94680, 94685, 94690, 94695, 94700, 94704, 94709, 94713, 94718, + 94723, 94728, 94733, 94738, 94743, 94748, 94753, 94757, 94762, 94767, + 94772, 94777, 94782, 94787, 94792, 0, 0, 0, 0, 0, 0, 0, 0, 94797, 94804, + 94811, 94818, 94825, 94832, 94839, 94846, 94853, 94860, 94867, 94874, + 94881, 94888, 94895, 94902, 94909, 94916, 94923, 94930, 94937, 94944, + 94951, 94958, 94965, 94972, 94979, 94986, 94993, 95000, 95007, 95014, + 95021, 95028, 95035, 95042, 95049, 95056, 95063, 95070, 95077, 95084, + 95091, 95098, 95105, 95112, 95119, 95126, 95133, 95140, 95147, 95154, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95168, 95173, 95178, 95183, 95188, + 95193, 95198, 95203, 95208, 95213, 95218, 95223, 95228, 95233, 95238, + 95243, 95248, 95253, 95258, 95263, 95268, 95273, 95278, 95283, 95288, + 95293, 95298, 95303, 95308, 95313, 95318, 95323, 95328, 95333, 95338, + 95343, 95348, 95353, 95358, 95363, 95368, 95373, 95378, 95383, 95388, + 95393, 95398, 95403, 95408, 95413, 95418, 95423, 95428, 95433, 95438, + 95443, 95448, 95453, 95458, 95463, 95468, 95473, 95478, 95483, 95488, + 95493, 95498, 95503, 95508, 95513, 95518, 95523, 95528, 95533, 95538, + 95543, 95548, 95553, 95558, 95563, 95568, 95573, 95578, 95583, 95588, + 95593, 95598, 95603, 95608, 95613, 95618, 95623, 95628, 95633, 95638, + 95643, 95648, 95653, 95658, 95663, 95668, 95673, 95678, 95683, 95688, + 95693, 95698, 95703, 95708, 95713, 95718, 95723, 95728, 95733, 95738, + 95743, 95748, 95753, 95758, 95763, 95768, 95773, 95778, 95783, 95788, + 95793, 95798, 95803, 95808, 95813, 95818, 95823, 95828, 95833, 95838, + 95843, 95848, 95853, 95858, 95863, 95868, 95873, 95878, 95883, 95888, + 95893, 95898, 95903, 95908, 95913, 95918, 95923, 95928, 95933, 95938, + 95943, 95948, 95953, 95958, 95963, 95968, 95973, 95978, 95983, 95988, + 95993, 95998, 96003, 96008, 96013, 96018, 96023, 96028, 96033, 96038, + 96043, 96048, 96053, 96058, 96063, 96068, 96073, 96078, 96083, 96088, + 96093, 96098, 96103, 96108, 96113, 96118, 96123, 96128, 96133, 96138, + 96143, 96148, 96153, 96158, 96163, 96168, 96173, 96178, 96183, 96188, + 96193, 96198, 96203, 96208, 96213, 96218, 96223, 96228, 96233, 96238, + 96243, 96248, 96253, 96258, 96263, 96268, 96273, 96278, 96283, 96288, + 96293, 96298, 96303, 96308, 96313, 96318, 96323, 96328, 96333, 96338, + 96343, 96348, 96353, 96358, 96363, 96368, 96373, 96378, 96383, 96388, + 96393, 96398, 96403, 96408, 96413, 96418, 96423, 96428, 96433, 96438, + 96443, 96448, 96453, 96458, 96463, 96468, 96473, 96478, 96483, 96488, + 96493, 96498, 96503, 96508, 96513, 96518, 96523, 96528, 96533, 96538, + 96543, 96548, 96553, 96558, 96563, 96568, 96573, 96578, 96583, 96588, + 96593, 96598, 96603, 96608, 96613, 96618, 96623, 96628, 96633, 96638, + 96643, 96648, 96653, 96658, 96663, 96668, 96673, 96678, 96683, 96688, + 96693, 96698, 96703, 96708, 96713, 96718, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96723, 96729, 96736, 96743, 96749, 96756, 96763, 96770, 96777, 96783, + 96790, 96797, 96804, 96811, 96818, 96825, 96832, 96839, 96846, 96853, + 96860, 96867, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96874, 96879, 96884, 96889, + 96894, 96899, 96904, 96909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96914, 96918, 96922, + 96926, 96930, 96934, 0, 0, 96939, 0, 96944, 96948, 96953, 96958, 96963, + 96968, 96973, 96978, 96983, 96988, 96993, 96997, 97002, 97007, 97012, + 97017, 97021, 97026, 97031, 97036, 97041, 97045, 97050, 97055, 97060, + 97065, 97070, 97075, 97080, 97085, 97090, 97095, 97100, 97105, 97110, + 97115, 97120, 97125, 97130, 97134, 97139, 97144, 97149, 97154, 0, 97159, + 97164, 0, 0, 0, 97169, 0, 0, 97174, 97179, 97186, 97193, 97200, 97207, + 97214, 97221, 97228, 97235, 97242, 97249, 97256, 97263, 97270, 97277, + 97284, 97291, 97298, 97305, 97312, 97319, 97326, 0, 97333, 97340, 97346, + 97352, 97358, 97365, 97372, 97380, 97388, 97397, 97402, 97407, 97412, + 97417, 97422, 97427, 97432, 97437, 97442, 97447, 97452, 97457, 97462, + 97468, 97473, 97478, 97483, 97488, 97493, 97498, 97503, 97508, 97513, + 97519, 97525, 97529, 97533, 97537, 97541, 97545, 97550, 97555, 97561, + 97566, 97572, 97577, 97582, 97587, 97593, 97598, 97603, 97608, 97613, + 97618, 97624, 97629, 97635, 97640, 97646, 97651, 97657, 97662, 97668, + 97673, 97678, 97683, 97688, 97693, 97698, 97703, 97709, 97714, 0, 0, 0, + 0, 0, 0, 0, 0, 97719, 97723, 97727, 97731, 97735, 97741, 97745, 97750, + 97755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97761, 97766, 97771, 97776, 97781, 97786, + 97791, 97796, 97801, 97806, 97811, 97816, 97821, 97826, 97831, 97836, + 97841, 97846, 97851, 97856, 97861, 97866, 97871, 97875, 97880, 97885, + 97891, 97895, 0, 0, 0, 97899, 97905, 97909, 97914, 97919, 97924, 97928, + 97933, 97937, 97942, 97947, 97951, 97956, 97961, 97965, 97969, 97974, + 97979, 97983, 97988, 97993, 97997, 98002, 98007, 98012, 98017, 98022, 0, + 0, 0, 0, 0, 98027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98032, + 98038, 98044, 98050, 98056, 98062, 98069, 98076, 98083, 98089, 98095, + 98101, 98108, 98115, 98122, 98129, 98136, 98143, 98150, 98157, 98164, + 98171, 98178, 98184, 98191, 98198, 98205, 98212, 98219, 98225, 98232, + 98239, 98246, 98252, 98258, 98264, 98270, 98276, 98283, 98290, 98296, + 98302, 98308, 98315, 98322, 98329, 98336, 98343, 98350, 98359, 98366, + 98372, 98379, 98386, 98393, 98399, 0, 0, 0, 0, 0, 0, 98406, 98414, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98422, 98426, 98431, 98436, 0, + 98442, 98447, 0, 0, 0, 0, 0, 98452, 98458, 98465, 98470, 98475, 98479, + 98484, 98489, 0, 98494, 98499, 98504, 0, 98509, 98514, 98519, 98524, + 98529, 98534, 98539, 98544, 98549, 98554, 98559, 98563, 98567, 98572, + 98577, 98582, 98586, 98590, 98595, 98600, 98605, 98610, 98615, 98620, + 98625, 98629, 98634, 0, 0, 0, 0, 98639, 98645, 98650, 0, 0, 0, 0, 98655, + 98659, 98663, 98667, 98671, 98675, 98680, 98685, 98691, 0, 0, 0, 0, 0, 0, + 0, 0, 98697, 98703, 98710, 98716, 98723, 98729, 98735, 98741, 98748, 0, + 0, 0, 0, 0, 0, 0, 98754, 98761, 98768, 98775, 98782, 98789, 98796, 98803, + 98810, 98817, 98824, 98831, 98838, 98845, 98852, 98859, 98866, 98873, + 98880, 98887, 98894, 98901, 98908, 98915, 98922, 98929, 98936, 98943, + 98950, 98957, 98963, 98970, 98977, 98984, 98991, 98998, 99005, 99012, + 99019, 99026, 99033, 99040, 99047, 99054, 99061, 99068, 99075, 99082, + 99089, 99096, 99103, 99110, 99117, 99124, 99131, 99138, 99145, 99152, + 99159, 99166, 99173, 99180, 99186, 99193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99200, + 99205, 99210, 99215, 99220, 99225, 99230, 99235, 99240, 99245, 99250, + 99255, 99260, 99265, 99270, 99275, 99280, 99285, 99290, 99295, 99300, + 99305, 99310, 99315, 99320, 99325, 99330, 99335, 99340, 99345, 99350, + 99355, 99360, 99365, 99370, 99375, 99380, 99385, 99391, 0, 0, 0, 0, + 99397, 99401, 99405, 99410, 99415, 99421, 99427, 99433, 99443, 99452, + 99458, 99465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99473, 99477, 99482, 99487, + 99492, 99497, 99502, 99507, 99512, 99516, 99521, 99525, 99530, 99534, + 99539, 99543, 99548, 99553, 99558, 99563, 99568, 99573, 99578, 99583, + 99588, 99593, 99598, 99603, 99608, 99613, 99618, 99623, 99628, 99633, + 99638, 99643, 99648, 99653, 99658, 99663, 99668, 99673, 99678, 99683, + 99688, 99693, 99698, 99703, 99708, 99713, 99718, 99723, 99728, 99733, 0, + 0, 0, 99738, 99743, 99752, 99760, 99769, 99778, 99789, 99800, 99807, + 99814, 99821, 99828, 99835, 99842, 99849, 99856, 99863, 99870, 99877, + 99884, 99891, 99898, 99905, 99912, 99919, 99926, 99933, 99940, 99947, 0, + 0, 99954, 99960, 99966, 99972, 99978, 99985, 99992, 100000, 100008, + 100015, 100022, 100029, 100036, 100043, 100050, 100057, 100064, 100071, + 100078, 100085, 100092, 100099, 100106, 100113, 100120, 100127, 100134, + 0, 0, 0, 0, 0, 100141, 100147, 100153, 100159, 100165, 100172, 100179, + 100187, 100195, 100202, 100209, 100216, 100223, 100230, 100237, 100244, + 100251, 100258, 100265, 100272, 100279, 100286, 100293, 100300, 100307, + 100314, 0, 0, 0, 0, 0, 0, 0, 100321, 100328, 100336, 100346, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 100356, 100362, 100368, 100374, 100380, 100387, + 100394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100402, 100409, 100416, 100424, 100431, + 100438, 100445, 100452, 100460, 100468, 100476, 100484, 100492, 100500, + 100508, 100516, 100524, 100532, 100540, 100548, 100556, 100564, 100572, + 100580, 100588, 100596, 100604, 100612, 100620, 100628, 100636, 100644, + 100652, 100660, 100668, 100676, 100684, 100692, 100700, 100708, 100716, + 100724, 100732, 100740, 100748, 100756, 100764, 100772, 100780, 100788, + 100796, 100804, 100812, 100820, 100828, 100836, 100844, 100852, 100860, + 100868, 100876, 100884, 100892, 100900, 100908, 100916, 100924, 100932, + 100940, 100948, 100956, 100964, 100972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 100980, 100984, 100988, 100992, 100996, 101000, 101004, + 101008, 101012, 101016, 101021, 101026, 101031, 101036, 101041, 101046, + 101051, 101056, 101061, 101067, 101073, 101079, 101086, 101093, 101100, + 101107, 101114, 101121, 101128, 101135, 101142, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 101149, 101153, 101157, 101161, 101165, 101169, 101172, 101176, + 101179, 101183, 101186, 101190, 101194, 101199, 101203, 101208, 101211, + 101215, 101218, 101222, 101225, 101229, 101233, 101237, 101241, 101245, + 101249, 101253, 101257, 101261, 101265, 101269, 101273, 101277, 101281, + 101285, 101289, 101293, 101297, 101300, 101303, 101307, 101311, 101315, + 101318, 101321, 101325, 101329, 101333, 101337, 101341, 101345, 101348, + 101352, 101358, 101364, 101370, 101375, 101382, 101386, 101391, 101395, + 101400, 101405, 101411, 101416, 101422, 101426, 101431, 101435, 101440, + 101443, 101446, 101450, 101455, 101461, 101466, 101472, 0, 0, 0, 0, + 101477, 101480, 101483, 101486, 101489, 101492, 101495, 101498, 101501, + 101504, 101508, 101512, 101516, 101520, 101524, 101528, 101532, 101536, + 101540, 101545, 101550, 101554, 101557, 101560, 101563, 101566, 101569, + 101572, 101575, 101578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 101581, 101585, 101590, 101595, 101600, 101604, 101609, 101613, 101618, + 101622, 101627, 101631, 101636, 101640, 101645, 101649, 101654, 101659, + 101664, 101669, 101674, 101679, 101684, 101689, 101694, 101699, 101704, + 101709, 101714, 101719, 101724, 101729, 101734, 101739, 101744, 101749, + 101753, 101757, 101762, 101767, 101772, 101776, 101780, 101785, 101790, + 101795, 101800, 101805, 101810, 101814, 101820, 101825, 101831, 101836, + 101842, 101847, 101853, 101858, 101864, 101869, 101874, 101879, 101884, + 101888, 101893, 101899, 101903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 101908, 101915, 101922, 101929, 101936, 101943, 101950, 101957, 101964, + 101971, 101978, 101985, 101992, 101999, 102006, 102013, 102020, 102027, + 102034, 102041, 102048, 102055, 102062, 102069, 102076, 0, 0, 0, 0, 0, 0, + 0, 102083, 102090, 102096, 102102, 102108, 102114, 102120, 102126, + 102132, 102138, 0, 0, 0, 0, 0, 0, 102144, 102149, 102154, 102159, 102164, + 102168, 102172, 102176, 102181, 102186, 102191, 102196, 102201, 102206, + 102211, 102216, 102221, 102226, 102231, 102236, 102241, 102246, 102251, + 102256, 102261, 102266, 102271, 102276, 102281, 102286, 102291, 102296, + 102301, 102306, 102311, 102316, 102321, 102326, 102331, 102336, 102341, + 102346, 102352, 102357, 102363, 102368, 102374, 102379, 102385, 102391, + 102395, 102400, 102404, 0, 102408, 102413, 102417, 102421, 102425, + 102429, 102433, 102437, 102441, 102445, 102449, 102454, 102458, 102463, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102468, 102472, 102476, 102480, + 102484, 102488, 102492, 102497, 102502, 102507, 102512, 102517, 102522, + 102527, 102532, 102537, 102542, 102547, 102552, 102557, 102562, 102567, + 102572, 102577, 102581, 102585, 102590, 102595, 102600, 102604, 102609, + 102614, 102619, 102624, 102628, 102633, 102638, 102643, 102648, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 102653, 102657, 102661, 102665, 102668, 102672, 102675, + 102679, 102682, 102686, 102690, 102695, 102699, 102704, 102707, 102711, + 102714, 102718, 102721, 102725, 102729, 102733, 102737, 102741, 102745, + 102749, 102753, 102757, 102761, 102765, 102769, 102773, 102777, 102781, + 102785, 102789, 102793, 102796, 102799, 102803, 102807, 102811, 102814, + 102817, 102821, 102825, 102829, 102833, 102837, 102841, 102845, 102848, + 102853, 102857, 102862, 102866, 102871, 102876, 102882, 102887, 102893, + 102897, 102902, 102906, 102911, 102915, 102919, 102923, 102927, 102930, + 102933, 102937, 102941, 0, 0, 0, 0, 102944, 0, 0, 102948, 102952, 102955, + 102958, 102961, 102964, 102967, 102970, 102973, 102976, 102979, 0, 0, 0, + 0, 0, 0, 102982, 102987, 102992, 102997, 103002, 103007, 103012, 103017, + 103022, 103027, 103033, 103039, 103045, 103051, 103057, 103063, 103069, + 103075, 103081, 103088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103095, 103099, + 103104, 103108, 103112, 103116, 103121, 103125, 103130, 103134, 103139, + 103144, 103149, 103154, 103159, 103164, 103169, 103174, 0, 103179, + 103184, 103189, 103194, 103199, 103204, 103209, 103214, 103219, 103224, + 103229, 103234, 103238, 103242, 103247, 103252, 103257, 103262, 103266, + 103270, 103275, 103280, 103285, 103290, 103294, 103299, 103305, 103310, + 103316, 103321, 103326, 103332, 103337, 103343, 103348, 103353, 103358, + 103363, 103367, 103372, 103378, 103383, 103389, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103394, 103398, 103403, 103407, 103412, + 103416, 103421, 103425, 103430, 103434, 103439, 103443, 103448, 103453, + 103458, 103463, 103468, 103473, 103478, 103483, 103488, 103493, 103498, + 103503, 103508, 103513, 103518, 103523, 103528, 103533, 103538, 103543, + 103548, 103553, 103557, 103561, 103566, 103571, 103576, 103581, 103585, + 103589, 103594, 103599, 103604, 103609, 103614, 103618, 103623, 103629, + 103634, 103640, 103645, 103651, 103656, 103662, 103667, 103673, 103678, + 0, 0, 0, 0, 0, 103683, 103688, 103692, 103696, 103700, 103704, 103708, + 103712, 103716, 103720, 0, 0, 0, 0, 0, 0, 0, 103724, 103729, 103734, 0, + 103739, 103743, 103748, 103752, 103757, 103761, 103766, 103771, 0, 0, + 103776, 103781, 0, 0, 103786, 103791, 103796, 103800, 103805, 103810, + 103815, 103820, 103825, 103830, 103835, 103840, 103845, 103850, 103855, + 103860, 103865, 103870, 103875, 103880, 103885, 103890, 0, 103894, + 103898, 103903, 103908, 103913, 103917, 103921, 0, 103926, 103931, 0, + 103936, 103941, 103946, 103951, 103956, 0, 0, 103960, 103965, 103970, + 103976, 103981, 103987, 103992, 103998, 104004, 0, 0, 104011, 104017, 0, + 0, 104023, 104029, 104035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104040, 0, 0, 0, 0, + 0, 104047, 104052, 104059, 104067, 104073, 104079, 104085, 0, 0, 104092, + 104098, 104103, 104108, 104113, 104118, 104123, 0, 0, 0, 104128, 104133, + 104138, 104143, 104149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104154, 104158, 104162, 104167, 104171, + 104176, 104180, 104185, 104190, 104196, 104201, 104207, 104211, 104216, + 104220, 104225, 104229, 104234, 104239, 104244, 104249, 104254, 104259, + 104264, 104269, 104274, 104279, 104284, 104289, 104294, 104299, 104304, + 104309, 104314, 104319, 104323, 104327, 104332, 104337, 104342, 104346, + 104350, 104355, 104360, 104365, 104370, 104375, 104380, 104384, 104390, + 104395, 104401, 104406, 104412, 104418, 104425, 104431, 104438, 104443, + 104450, 104456, 104461, 104468, 104474, 104479, 104484, 104489, 104494, + 104499, 104504, 104508, 104513, 0, 0, 0, 0, 0, 0, 0, 0, 104517, 104522, + 104526, 104530, 104534, 104538, 104542, 104546, 104550, 104554, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104558, 104562, + 104567, 104571, 104576, 104580, 104585, 104590, 104596, 104601, 104607, + 104611, 104616, 104620, 104625, 104629, 104634, 104639, 104644, 104649, + 104654, 104659, 104664, 104669, 104674, 104679, 104684, 104689, 104694, + 104699, 104704, 104709, 104714, 104719, 104723, 104727, 104732, 104737, + 104742, 104746, 104750, 104755, 104760, 104765, 104770, 104775, 104780, + 104784, 104790, 104795, 104801, 104806, 104812, 104818, 0, 0, 104825, + 104830, 104836, 104841, 104847, 104852, 104857, 104862, 104867, 104872, + 104877, 104881, 104886, 104892, 104897, 104903, 104909, 104915, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 104923, 104927, 104932, 104936, 104941, 104945, 104950, 104955, + 104961, 104966, 104972, 104976, 104981, 104985, 104990, 104994, 104999, + 105004, 105009, 105014, 105019, 105024, 105029, 105034, 105039, 105044, + 105049, 105054, 105059, 105064, 105069, 105074, 105079, 105084, 105088, + 105092, 105097, 105102, 105107, 105111, 105115, 105120, 105125, 105130, + 105135, 105140, 105145, 105149, 105154, 105160, 105165, 105171, 105176, + 105182, 105188, 105195, 105201, 105208, 105213, 105219, 105224, 105230, + 105235, 105240, 105245, 105250, 105254, 105259, 105264, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 105269, 105274, 105278, 105282, 105286, 105290, 105294, + 105298, 105302, 105306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105310, + 105314, 105319, 105323, 105328, 105332, 105337, 105341, 105346, 105350, + 105355, 105359, 105364, 105369, 105374, 105379, 105384, 105389, 105394, + 105399, 105404, 105409, 105414, 105419, 105424, 105429, 105434, 105439, + 105444, 105449, 105453, 105457, 105462, 105467, 105472, 105476, 105480, + 105485, 105490, 105495, 105500, 105505, 105509, 105514, 105519, 105524, + 105530, 105535, 105541, 105546, 105552, 105557, 105563, 105568, 105574, + 105579, 0, 0, 0, 0, 0, 0, 0, 0, 105584, 105589, 105593, 105597, 105601, + 105605, 105609, 105613, 105617, 105621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105625, 105631, 105636, 105642, 105648, + 105653, 105659, 105665, 105671, 105676, 105681, 105687, 105693, 105699, + 105705, 105711, 105717, 105723, 105729, 105735, 105741, 105747, 105753, + 105759, 105765, 105771, 105777, 105783, 105789, 105795, 105801, 105807, + 105813, 105819, 105824, 105830, 105836, 105841, 105847, 105853, 105859, + 105864, 105869, 105875, 105881, 105887, 105893, 105899, 105905, 105911, + 105917, 105923, 105929, 105935, 105941, 105947, 105953, 105959, 105965, + 105971, 105977, 105983, 105989, 105995, 106001, 106006, 106010, 106014, + 106018, 106022, 106026, 106030, 106034, 106038, 106042, 106047, 106052, + 106057, 106062, 106067, 106072, 106077, 106082, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 106087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 106091, 106099, 106107, 106116, 106124, 106133, 106142, + 106151, 106160, 106168, 106177, 106186, 106195, 106204, 106213, 106222, + 106231, 106239, 106248, 106257, 106266, 106275, 106283, 106291, 106299, + 106307, 106315, 106324, 106333, 106343, 106353, 106363, 106373, 106383, + 106392, 106402, 106412, 106422, 106433, 106443, 106455, 106467, 106478, + 106492, 106503, 106513, 106525, 106536, 106546, 106558, 106570, 106581, + 106592, 106602, 106612, 106624, 106635, 0, 0, 0, 0, 0, 0, 0, 106647, + 106650, 106655, 106661, 106669, 106674, 106680, 106688, 106694, 106700, + 106704, 106708, 106715, 106724, 106731, 106740, 106746, 106755, 106762, + 106769, 106776, 106786, 106792, 106796, 106803, 106812, 106822, 106829, + 106836, 106840, 106844, 106851, 106861, 106865, 106872, 106879, 106886, + 106892, 106899, 106906, 106913, 106920, 106924, 106928, 106932, 106939, + 106943, 106950, 106957, 106971, 106980, 106984, 106988, 106992, 106999, + 107003, 107007, 107011, 107019, 107027, 107046, 107056, 107076, 107080, + 107084, 107088, 107092, 107096, 107100, 107104, 107111, 107115, 107118, + 107122, 107126, 107132, 107139, 107148, 107152, 107161, 107170, 107178, + 107182, 107189, 107193, 107197, 107201, 107205, 107216, 107225, 107234, + 107243, 107252, 107264, 107273, 107282, 107291, 107299, 107308, 107320, + 107329, 107338, 107347, 107359, 107368, 107377, 107389, 107398, 107407, + 107419, 107428, 107432, 107436, 107440, 107444, 107448, 107452, 107456, + 107463, 107467, 107471, 107482, 107486, 107490, 107497, 107503, 107509, + 107513, 107520, 107524, 107528, 107532, 107536, 107540, 107544, 107550, + 107558, 107562, 107566, 107569, 107575, 107585, 107589, 107601, 107608, + 107615, 107622, 107629, 107635, 107639, 107643, 107647, 107651, 107658, + 107667, 107674, 107682, 107690, 107696, 107700, 107704, 107708, 107712, + 107718, 107727, 107739, 107746, 107753, 107762, 107773, 107779, 107788, + 107797, 107804, 107813, 107820, 107827, 107837, 107844, 107851, 107858, + 107865, 107869, 107875, 107879, 107890, 107898, 107907, 107919, 107926, + 107933, 107943, 107950, 107960, 107967, 107977, 107984, 107991, 108001, + 108008, 108015, 108025, 108032, 108044, 108053, 108060, 108067, 108074, + 108083, 108093, 108106, 108113, 108123, 108133, 108140, 108149, 108162, + 108169, 108176, 108183, 108193, 108203, 108210, 108220, 108227, 108234, + 108244, 108250, 108257, 108264, 108271, 108281, 108288, 108295, 108302, + 108308, 108315, 108325, 108332, 108336, 108344, 108348, 108360, 108364, + 108378, 108382, 108386, 108390, 108394, 108400, 108407, 108415, 108419, + 108423, 108427, 108431, 108438, 108442, 108448, 108454, 108462, 108466, + 108473, 108481, 108485, 108489, 108495, 108499, 108508, 108517, 108524, + 108534, 108540, 108544, 108548, 108556, 108563, 108570, 108576, 108580, + 108588, 108592, 108599, 108611, 108618, 108628, 108634, 108638, 108647, + 108654, 108663, 108667, 108671, 108678, 108682, 108686, 108690, 108694, + 108697, 108703, 108709, 108713, 108717, 108724, 108731, 108738, 108745, + 108752, 108759, 108766, 108773, 108779, 108783, 108787, 108794, 108801, + 108808, 108815, 108822, 108826, 108829, 108834, 108838, 108842, 108851, + 108860, 108864, 108868, 108874, 108880, 108897, 108903, 108907, 108916, + 108920, 108924, 108931, 108939, 108947, 108953, 108957, 108961, 108965, + 108969, 108972, 108978, 108985, 108995, 109002, 109009, 109016, 109022, + 109029, 109036, 109043, 109050, 109057, 109066, 109073, 109085, 109092, + 109099, 109109, 109120, 109127, 109134, 109141, 109148, 109155, 109162, + 109169, 109176, 109183, 109190, 109200, 109210, 109220, 109227, 109237, + 109244, 109251, 109258, 109265, 109272, 109279, 109286, 109293, 109300, + 109307, 109314, 109321, 109328, 109334, 109341, 109348, 109357, 109364, + 109371, 109375, 109383, 109387, 109391, 109395, 109399, 109403, 109410, + 109414, 109423, 109427, 109434, 109442, 109446, 109450, 109454, 109467, + 109483, 109487, 109491, 109498, 109504, 109511, 109515, 109519, 109523, + 109527, 109531, 109538, 109542, 109560, 109564, 109568, 109575, 109579, + 109583, 109589, 109593, 109597, 109605, 109609, 109613, 109617, 109621, + 109627, 109638, 109647, 109656, 109663, 109670, 109681, 109688, 109695, + 109702, 109709, 109716, 109723, 109730, 109740, 109746, 109753, 109763, + 109772, 109779, 109788, 109798, 109805, 109812, 109819, 109826, 109838, + 109845, 109852, 109859, 109866, 109873, 109883, 109890, 109897, 109907, + 109920, 109932, 109939, 109949, 109956, 109963, 109970, 109984, 109990, + 109998, 110008, 110018, 110025, 110032, 110038, 110042, 110049, 110059, + 110065, 110078, 110082, 110086, 110093, 110097, 110104, 110114, 110118, + 110122, 110126, 110130, 110134, 110141, 110145, 110152, 110159, 110166, + 110175, 110184, 110194, 110201, 110208, 110215, 110225, 110232, 110242, + 110249, 110259, 110266, 110273, 110283, 110293, 110300, 110306, 110314, + 110322, 110328, 110334, 110338, 110342, 110349, 110357, 110363, 110367, + 110371, 110375, 110382, 110394, 110397, 110404, 110410, 110414, 110418, + 110422, 110426, 110430, 110434, 110438, 110442, 110446, 110450, 110457, + 110461, 110467, 110471, 110475, 110479, 110485, 110492, 110499, 110506, + 110517, 110525, 110529, 110535, 110544, 110551, 110557, 110560, 110564, + 110568, 110574, 110583, 110591, 110595, 110601, 110605, 110609, 110613, + 110619, 110626, 110632, 110636, 110642, 110646, 110650, 110659, 110671, + 110675, 110682, 110689, 110699, 110706, 110718, 110725, 110732, 110739, + 110750, 110760, 110773, 110783, 110790, 110794, 110798, 110802, 110806, + 110815, 110824, 110833, 110850, 110859, 110865, 110872, 110880, 110893, + 110897, 110906, 110915, 110924, 110933, 110944, 110953, 110962, 110971, + 110980, 110989, 110998, 111008, 111011, 111015, 111019, 111023, 111027, + 111031, 111037, 111044, 111051, 111058, 111064, 111070, 111077, 111083, + 111090, 111098, 111102, 111109, 111116, 111123, 111131, 111135, 111139, + 111143, 111147, 111151, 111157, 111161, 111167, 111174, 111181, 111187, + 111194, 111201, 111208, 111215, 111222, 111229, 111236, 111243, 111250, + 111257, 111264, 111271, 111278, 111285, 111291, 111295, 111304, 111308, + 111312, 111316, 111320, 111326, 111333, 111340, 111347, 111354, 111361, + 111367, 111375, 111379, 111383, 111387, 111391, 111397, 111414, 111431, + 111435, 111439, 111443, 111447, 111451, 111455, 111461, 111468, 111472, + 111478, 111485, 111492, 111499, 111506, 111513, 111522, 111529, 111536, + 111543, 111550, 111554, 111558, 111564, 111576, 111580, 111584, 111593, + 111597, 111601, 111605, 111611, 111615, 111619, 111628, 111632, 111636, + 111640, 111647, 111651, 111655, 111659, 111663, 111667, 111671, 111675, + 111679, 111685, 111692, 111699, 111705, 111709, 111726, 111732, 111736, + 111742, 111748, 111754, 111760, 111766, 111772, 111776, 111780, 111784, + 111790, 111794, 111800, 111804, 111808, 111815, 111822, 111839, 111843, + 111847, 111851, 111855, 111859, 111871, 111874, 111879, 111884, 111899, + 111909, 111921, 111925, 111929, 111933, 111939, 111946, 111953, 111963, + 111975, 111981, 111987, 111996, 112000, 112004, 112011, 112021, 112028, + 112034, 112038, 112042, 112049, 112055, 112059, 112065, 112069, 112077, + 112083, 112087, 112095, 112103, 112110, 112116, 112123, 112130, 112140, + 112150, 112154, 112158, 112162, 112166, 112172, 112179, 112185, 112192, + 112199, 112206, 112215, 112222, 112229, 112235, 112242, 112249, 112256, + 112263, 112270, 112277, 112283, 112290, 112297, 112304, 112313, 112320, + 112327, 112331, 112337, 112341, 112347, 112354, 112361, 112368, 112372, + 112376, 112380, 112384, 112388, 112395, 112399, 112403, 112409, 112417, + 112421, 112425, 112429, 112433, 112440, 112444, 112448, 112456, 112460, + 112464, 112468, 112472, 112478, 112482, 112486, 112492, 112499, 112505, + 112512, 112524, 112528, 112535, 112542, 112549, 112556, 112568, 112575, + 112579, 112583, 112587, 112594, 112601, 112608, 112615, 112625, 112632, + 112638, 112645, 112652, 112659, 112666, 112675, 112685, 112692, 112696, + 112703, 112707, 112711, 112715, 112722, 112729, 112739, 112745, 112749, + 112758, 112762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112769, 112775, 112781, 112788, + 112795, 112802, 112809, 112816, 112823, 112829, 112836, 112843, 112850, + 112857, 112864, 112871, 112877, 112883, 112889, 112895, 112901, 112907, + 112913, 112919, 112925, 112932, 112939, 112946, 112953, 112960, 112967, + 112973, 112979, 112985, 112992, 112999, 113005, 113011, 113020, 113027, + 113034, 113041, 113048, 113055, 113062, 113068, 113074, 113080, 113089, + 113096, 113103, 113114, 113125, 113131, 113137, 113143, 113152, 113159, + 113166, 113176, 113186, 113197, 113208, 113220, 113233, 113244, 113255, + 113267, 113280, 113291, 113302, 113313, 113324, 113335, 113347, 113355, + 113363, 113372, 113381, 113390, 113396, 113402, 113408, 113415, 113425, + 113432, 113442, 113447, 113452, 113458, 113464, 113472, 113480, 113489, + 113500, 113511, 113519, 113527, 113536, 113545, 113553, 113560, 113568, + 113576, 113583, 113590, 113599, 113608, 113617, 113626, 113635, 0, + 113644, 113655, 113662, 113670, 113678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 113686, 113690, 113694, 113698, 113702, 113706, + 113710, 113714, 113718, 113722, 113726, 113730, 113734, 113738, 113742, + 113746, 113750, 113754, 113758, 113762, 113766, 113770, 113774, 113778, + 113782, 113786, 113790, 113794, 113798, 113802, 113806, 113810, 113814, + 113818, 113822, 113826, 113830, 113834, 113838, 113842, 113846, 113850, + 113854, 113858, 113862, 113866, 113870, 113874, 113878, 113882, 113886, + 113890, 113894, 113898, 113902, 113906, 113910, 113914, 113918, 113922, + 113926, 113930, 113934, 113938, 113942, 113946, 113950, 113954, 113958, + 113962, 113966, 113970, 113974, 113978, 113982, 113986, 113990, 113994, + 113998, 114002, 114006, 114010, 114014, 114018, 114022, 114026, 114030, + 114034, 114038, 114042, 114046, 114050, 114054, 114058, 114062, 114066, + 114070, 114074, 114078, 114082, 114086, 114090, 114094, 114098, 114102, + 114106, 114110, 114114, 114118, 114122, 114126, 114130, 114134, 114138, + 114142, 114146, 114150, 114154, 114158, 114162, 114166, 114170, 114174, + 114178, 114182, 114186, 114190, 114194, 114198, 114202, 114206, 114210, + 114214, 114218, 114222, 114226, 114230, 114234, 114238, 114242, 114246, + 114250, 114254, 114258, 114262, 114266, 114270, 114274, 114278, 114282, + 114286, 114290, 114294, 114298, 114302, 114306, 114310, 114314, 114318, + 114322, 114326, 114330, 114334, 114338, 114342, 114346, 114350, 114354, + 114358, 114362, 114366, 114370, 114374, 114378, 114382, 114386, 114390, + 114394, 114398, 114402, 114406, 114410, 114414, 114418, 114422, 114426, + 114430, 114434, 114438, 114442, 114446, 114450, 114454, 114458, 114462, + 114466, 114470, 114474, 114478, 114482, 114486, 114490, 114494, 114498, + 114502, 114506, 114510, 114514, 114518, 114522, 114526, 114530, 114534, + 114538, 114542, 114546, 114550, 114554, 114558, 114562, 114566, 114570, + 114574, 114578, 114582, 114586, 114590, 114594, 114598, 114602, 114606, + 114610, 114614, 114618, 114622, 114626, 114630, 114634, 114638, 114642, + 114646, 114650, 114654, 114658, 114662, 114666, 114670, 114674, 114678, + 114682, 114686, 114690, 114694, 114698, 114702, 114706, 114710, 114714, + 114718, 114722, 114726, 114730, 114734, 114738, 114742, 114746, 114750, + 114754, 114758, 114762, 114766, 114770, 114774, 114778, 114782, 114786, + 114790, 114794, 114798, 114802, 114806, 114810, 114814, 114818, 114822, + 114826, 114830, 114834, 114838, 114842, 114846, 114850, 114854, 114858, + 114862, 114866, 114870, 114874, 114878, 114882, 114886, 114890, 114894, + 114898, 114902, 114906, 114910, 114914, 114918, 114922, 114926, 114930, + 114934, 114938, 114942, 114946, 114950, 114954, 114958, 114962, 114966, + 114970, 114974, 114978, 114982, 114986, 114990, 114994, 114998, 115002, + 115006, 115010, 115014, 115018, 115022, 115026, 115030, 115034, 115038, + 115042, 115046, 115050, 115054, 115058, 115062, 115066, 115070, 115074, + 115078, 115082, 115086, 115090, 115094, 115098, 115102, 115106, 115110, + 115114, 115118, 115122, 115126, 115130, 115134, 115138, 115142, 115146, + 115150, 115154, 115158, 115162, 115166, 115170, 115174, 115178, 115182, + 115186, 115190, 115194, 115198, 115202, 115206, 115210, 115214, 115218, + 115222, 115226, 115230, 115234, 115238, 115242, 115246, 115250, 115254, + 115258, 115262, 115266, 115270, 115274, 115278, 115282, 115286, 115290, + 115294, 115298, 115302, 115306, 115310, 115314, 115318, 115322, 115326, + 115330, 115334, 115338, 115342, 115346, 115350, 115354, 115358, 115362, + 115366, 115370, 115374, 115378, 115382, 115386, 115390, 115394, 115398, + 115402, 115406, 115410, 115414, 115418, 115422, 115426, 115430, 115434, + 115438, 115442, 115446, 115450, 115454, 115458, 115462, 115466, 115470, + 115474, 115478, 115482, 115486, 115490, 115494, 115498, 115502, 115506, + 115510, 115514, 115518, 115522, 115526, 115530, 115534, 115538, 115542, + 115546, 115550, 115554, 115558, 115562, 115566, 115570, 115574, 115578, + 115582, 115586, 115590, 115594, 115598, 115602, 115606, 115610, 115614, + 115618, 115622, 115626, 115630, 115634, 115638, 115642, 115646, 115650, + 115654, 115658, 115662, 115666, 115670, 115674, 115678, 115682, 115686, + 115690, 115694, 115698, 115702, 115706, 115710, 115714, 115718, 115722, + 115726, 115730, 115734, 115738, 115742, 115746, 115750, 115754, 115758, + 115762, 115766, 115770, 115774, 115778, 115782, 115786, 115790, 115794, + 115798, 115802, 115806, 115810, 115814, 115818, 115822, 115826, 115830, + 115834, 115838, 115842, 115846, 115850, 115854, 115858, 115862, 115866, + 115870, 115874, 115878, 115882, 115886, 115890, 115894, 115898, 115902, + 115906, 115910, 115914, 115918, 115922, 115926, 115930, 115934, 115938, + 115942, 115946, 115950, 115954, 115958, 115962, 115966, 115970, 115974, + 115978, 115982, 115986, 115990, 115994, 115998, 116002, 116006, 116010, + 116014, 116018, 116022, 116026, 116030, 116034, 116038, 116042, 116046, + 116050, 116054, 116058, 116062, 116066, 116070, 116074, 116078, 116082, + 116086, 116090, 116094, 116098, 116102, 116106, 116110, 116114, 116118, + 116122, 116126, 116130, 116134, 116138, 116142, 116146, 116150, 116154, + 116158, 116162, 116166, 116170, 116174, 116178, 116182, 116186, 116190, + 116194, 116198, 116202, 116206, 116210, 116214, 116218, 116222, 116226, + 116230, 116234, 116238, 116242, 116246, 116250, 116254, 116258, 116262, + 116266, 116270, 116274, 116278, 116282, 116286, 116290, 116294, 116298, + 116302, 116306, 116310, 116314, 116318, 116322, 116326, 116330, 116334, + 116338, 116342, 116346, 116350, 116354, 116358, 116362, 116366, 116370, + 116374, 116378, 116382, 116386, 116390, 116394, 116398, 116402, 116406, + 116410, 116414, 116418, 116422, 116426, 116430, 116434, 116438, 116442, + 116446, 116450, 116454, 116458, 116462, 116466, 116470, 116474, 116478, + 116482, 116486, 116490, 116494, 116498, 116502, 116506, 116510, 116514, + 116518, 116522, 116526, 116530, 116534, 116538, 116542, 116546, 116550, + 116554, 116558, 116562, 116566, 116570, 116574, 116578, 116582, 116586, + 116590, 116594, 116598, 116602, 116606, 116610, 116614, 116618, 116622, + 116626, 116630, 116634, 116638, 116642, 116646, 116650, 116654, 116658, + 116662, 116666, 116670, 116674, 116678, 116682, 116686, 116690, 116694, + 116698, 116702, 116706, 116710, 116714, 116718, 116722, 116726, 116730, + 116734, 116738, 116742, 116746, 116750, 116754, 116758, 116762, 116766, + 116770, 116774, 116778, 116782, 116786, 116790, 116794, 116798, 116802, + 116806, 116810, 116814, 116818, 116822, 116826, 116830, 116834, 116838, + 116842, 116846, 116850, 116854, 116858, 116862, 116866, 116870, 116874, + 116878, 116882, 116886, 116890, 116894, 116898, 116902, 116906, 116910, + 116914, 116918, 116922, 116926, 116930, 116934, 116938, 116942, 116946, + 116950, 116954, 116958, 116962, 116966, 116970, 116974, 116978, 116982, + 116986, 116990, 116994, 116998, 117002, 117006, 117010, 117014, 117018, + 117022, 117026, 117030, 117034, 117038, 117042, 117046, 117050, 117054, + 117058, 117062, 117066, 117070, 117074, 117078, 117082, 117086, 117090, + 117094, 117098, 117102, 117106, 117110, 117114, 117118, 117122, 117126, + 117130, 117134, 117138, 117142, 117146, 117150, 117154, 117158, 117162, + 117166, 117170, 117174, 117178, 117182, 117186, 117190, 117194, 117198, + 117202, 117206, 117210, 117214, 117218, 117222, 117226, 117230, 117234, + 117238, 117242, 117246, 117250, 117254, 117258, 117262, 117266, 117270, + 117274, 117278, 117282, 117286, 117290, 117294, 117298, 117302, 117306, + 117310, 117314, 117318, 117322, 117326, 117330, 117334, 117338, 117342, + 117346, 117350, 117354, 117358, 117362, 117366, 117370, 117374, 117378, + 117382, 117386, 117390, 117394, 117398, 117402, 117406, 117410, 117414, + 117418, 117422, 117426, 117430, 117434, 117438, 117442, 117446, 117450, + 117454, 117458, 117462, 117466, 117470, 117474, 117478, 117482, 117486, + 117490, 117494, 117498, 117502, 117506, 117510, 117514, 117518, 117522, + 117526, 117530, 117534, 117538, 117542, 117546, 117550, 117554, 117558, + 117562, 117566, 117570, 117574, 117578, 117582, 117586, 117590, 117594, + 117598, 117602, 117606, 117610, 117614, 117618, 117622, 117626, 117630, + 117634, 117638, 117642, 117646, 117650, 117654, 117658, 117662, 117666, + 117670, 117674, 117678, 117682, 117686, 117690, 117694, 117698, 117702, + 117706, 117710, 117714, 117718, 117722, 117726, 117730, 117734, 117738, + 117742, 117746, 117750, 117754, 117758, 117762, 117766, 117770, 117774, + 117778, 117782, 117786, 117790, 117794, 117798, 117802, 117806, 117810, + 117814, 117818, 117822, 117826, 117830, 117834, 117838, 117842, 117846, + 117850, 117854, 117858, 117862, 117866, 117870, 117874, 117878, 117882, + 117886, 117890, 117894, 117898, 117902, 117906, 117910, 117914, 117918, + 117922, 117926, 117930, 117934, 117938, 117942, 117946, 117950, 117954, + 117958, 117962, 117966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 117970, 117977, 117984, 117993, 118002, 118009, 118014, 118021, + 118028, 118037, 118048, 118059, 118064, 118071, 118076, 118081, 118086, + 118091, 118096, 118101, 118106, 118111, 118116, 118121, 118126, 118133, + 118140, 118145, 118150, 118155, 118160, 118167, 118174, 118182, 118187, + 118194, 118199, 118204, 118209, 118214, 118219, 118226, 118233, 118238, + 118243, 118248, 118253, 118258, 118263, 118268, 118273, 118278, 118283, + 118288, 118293, 118298, 118303, 118308, 118313, 118318, 118323, 118328, + 118335, 118340, 118345, 118354, 118361, 118366, 118371, 118376, 118381, + 118386, 118391, 118396, 118401, 118406, 118411, 118416, 118421, 118426, + 118431, 118436, 118441, 118446, 118451, 118456, 118461, 118466, 118472, + 118480, 118486, 118494, 118502, 118510, 118516, 118522, 118528, 118534, + 118540, 118548, 118558, 118566, 118574, 118580, 118586, 118594, 118602, + 118608, 118616, 118624, 118632, 118638, 118644, 118650, 118656, 118662, + 118668, 118676, 118684, 118690, 118696, 118702, 118708, 118714, 118722, + 118728, 118734, 118740, 118746, 118752, 118758, 118766, 118772, 118778, + 118784, 118790, 118798, 118806, 118812, 118818, 118824, 118829, 118835, + 118841, 118848, 118853, 118858, 118863, 118868, 118873, 118878, 118883, + 118888, 118893, 118902, 118909, 118914, 118919, 118924, 118931, 118936, + 118941, 118946, 118953, 118958, 118963, 118968, 118973, 118978, 118983, + 118988, 118993, 118998, 119003, 119008, 119015, 119020, 119027, 119032, + 119037, 119044, 119049, 119054, 119059, 119064, 119069, 119074, 119079, + 119084, 119089, 119094, 119099, 119104, 119109, 119114, 119119, 119124, + 119129, 119134, 119139, 119146, 119151, 119156, 119161, 119166, 119171, + 119176, 119181, 119186, 119191, 119196, 119201, 119206, 119211, 119218, + 119223, 119228, 119235, 119240, 119245, 119250, 119255, 119260, 119265, + 119270, 119275, 119280, 119285, 119292, 119297, 119302, 119307, 119312, + 119317, 119324, 119331, 119336, 119341, 119346, 119351, 119356, 119361, + 119366, 119371, 119376, 119381, 119386, 119391, 119396, 119401, 119406, + 119411, 119416, 119421, 119426, 119431, 119436, 119441, 119446, 119451, + 119456, 119461, 119466, 119471, 119476, 119481, 119486, 119491, 119496, + 119501, 119506, 119511, 119518, 119523, 119528, 119533, 119538, 119543, + 119548, 119553, 119558, 119563, 119568, 119573, 119578, 119583, 119588, + 119593, 119598, 119603, 119608, 119613, 119618, 119623, 119628, 119633, + 119638, 119643, 119648, 119653, 119658, 119663, 119668, 119673, 119678, + 119683, 119688, 119693, 119698, 119703, 119708, 119713, 119718, 119723, + 119728, 119733, 119738, 119743, 119748, 119753, 119758, 119763, 119768, + 119773, 119778, 119783, 119788, 119793, 119798, 119803, 119808, 119815, + 119820, 119825, 119830, 119835, 119840, 119845, 119850, 119855, 119860, + 119865, 119870, 119875, 119880, 119885, 119890, 119895, 119900, 119905, + 119910, 119915, 119920, 119927, 119932, 119937, 119943, 119948, 119953, + 119958, 119963, 119968, 119973, 119978, 119983, 119988, 119993, 119998, + 120003, 120008, 120013, 120018, 120023, 120028, 120033, 120038, 120043, + 120048, 120053, 120058, 120063, 120068, 120073, 120078, 120083, 120088, + 120093, 120098, 120103, 120108, 120113, 120118, 120123, 120128, 120133, + 120138, 120143, 120148, 120153, 120158, 120165, 120170, 120175, 120182, + 120189, 120194, 120199, 120204, 120209, 120214, 120219, 120224, 120229, + 120234, 120239, 120244, 120249, 120254, 120259, 120264, 120269, 120274, + 120279, 120284, 120289, 120294, 120299, 120304, 120309, 120314, 120321, + 120326, 120331, 120336, 120341, 120346, 120351, 120356, 120361, 120366, + 120371, 120376, 120381, 120386, 120391, 120396, 120401, 120406, 120411, + 120418, 120423, 120428, 120433, 120438, 120443, 120448, 120453, 120459, + 120464, 120469, 120474, 120479, 120484, 120489, 120494, 120499, 120506, + 120513, 120518, 120523, 120527, 120532, 120536, 120540, 120545, 120552, + 120557, 120562, 120571, 120576, 120581, 120586, 120591, 120598, 120605, + 120610, 120615, 120620, 120625, 120632, 120637, 120642, 120647, 120652, + 120657, 120662, 120667, 120672, 120677, 120682, 120687, 120692, 120699, + 120703, 120708, 120713, 120718, 120723, 120727, 120732, 120737, 120742, + 120747, 120752, 120757, 120762, 120767, 120772, 120778, 120784, 120790, + 120796, 120802, 120808, 120814, 120820, 120826, 120832, 120838, 120844, + 120850, 120856, 120862, 120868, 120874, 120880, 120886, 120892, 120898, + 120904, 120910, 120916, 120921, 120927, 120933, 120939, 120945, 120951, + 120957, 120963, 120969, 120975, 120981, 120987, 120993, 120999, 121005, + 121011, 121017, 121023, 121029, 121035, 121041, 121046, 121052, 121058, + 121064, 121070, 121076, 0, 0, 0, 0, 0, 0, 0, 121082, 121087, 121092, + 121097, 121102, 121107, 121112, 121116, 121121, 121126, 121131, 121136, + 121141, 121146, 121151, 121156, 121161, 121165, 121170, 121174, 121179, + 121184, 121189, 121194, 121199, 121203, 121208, 121213, 121218, 121223, + 121228, 0, 121233, 121238, 121242, 121246, 121250, 121254, 121258, + 121262, 121266, 121270, 0, 0, 0, 0, 121274, 121278, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121283, 121290, + 121296, 121303, 121310, 121317, 121324, 121331, 121338, 121345, 121352, + 121359, 121366, 121373, 121380, 121387, 121394, 121401, 121407, 121414, + 121421, 121428, 121434, 121441, 121447, 121453, 121460, 121466, 121473, + 121479, 0, 0, 121485, 121493, 121501, 121510, 121519, 121528, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 121536, 121541, 121546, 121551, 121556, 121561, 121566, + 121571, 121576, 121581, 121586, 121591, 121596, 121601, 121606, 121611, + 121616, 121621, 121626, 121631, 121636, 121641, 121646, 121651, 121656, + 121661, 121666, 121671, 121676, 121681, 121686, 121691, 121696, 121701, + 121706, 121711, 121716, 121721, 121726, 121731, 121736, 121741, 121746, + 121751, 121756, 121761, 121766, 121771, 121776, 121783, 121790, 121797, + 121804, 121811, 121818, 121825, 121832, 121841, 121848, 121855, 121862, + 121869, 121876, 121883, 121890, 121897, 121904, 121911, 121918, 121923, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121932, 121937, 121941, 121945, 121949, + 121953, 121957, 121961, 121965, 121969, 0, 121973, 121978, 121983, + 121990, 121995, 122002, 122009, 0, 122014, 122021, 122026, 122031, + 122038, 122045, 122050, 122055, 122060, 122065, 122070, 122077, 122084, + 122089, 122094, 122099, 122112, 122121, 122128, 122137, 122146, 0, 0, 0, + 0, 0, 122155, 122162, 122169, 122176, 122183, 122190, 122197, 122204, + 122211, 122218, 122225, 122232, 122239, 122246, 122253, 122260, 122267, + 122274, 122281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122288, + 122291, 122295, 122299, 122303, 122306, 122310, 122315, 122319, 122323, + 122327, 122331, 122335, 122340, 122345, 122349, 122353, 122356, 122360, + 122365, 122370, 122374, 122378, 122382, 122386, 122390, 122394, 122398, + 122402, 122406, 122410, 122413, 122417, 122421, 122425, 122429, 122433, + 122437, 122443, 122446, 122450, 122454, 122458, 122462, 122466, 122470, + 122474, 122478, 122482, 122487, 122492, 122498, 122502, 122506, 122510, + 122514, 122518, 122522, 122527, 122531, 122535, 122539, 122543, 122547, + 122553, 122557, 122561, 122565, 122569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 122573, 122577, 122581, 122587, 122593, 122597, 122602, 122607, 122612, + 122617, 122621, 122626, 122631, 122636, 122640, 122645, 122650, 122655, + 122659, 122664, 122669, 122674, 122679, 122684, 122689, 122694, 122699, + 122703, 122708, 122713, 122718, 122723, 122728, 122733, 122738, 122743, + 122748, 122753, 122758, 122765, 122770, 122777, 122782, 122787, 122792, + 122797, 122802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122807, + 122811, 122817, 122820, 122823, 122827, 122831, 122835, 122839, 122843, + 122847, 122851, 122857, 122863, 122869, 122875, 122881, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122887, 122892, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122898, 122902, 122906, 122910, + 122914, 122918, 122922, 122925, 122929, 122933, 122937, 122941, 122944, + 122950, 122955, 122961, 122967, 122972, 122976, 122982, 122986, 122990, + 122996, 123000, 123004, 123008, 123012, 123016, 123020, 123023, 123029, + 123035, 123041, 123047, 123054, 123061, 123068, 123078, 123085, 123092, + 123097, 123102, 123107, 123112, 123119, 123126, 123133, 123140, 123149, + 123155, 123162, 123168, 123175, 123181, 123188, 123193, 123200, 123204, + 123208, 123213, 123219, 123225, 123232, 123239, 123245, 123252, 123255, + 123261, 123265, 123268, 123272, 123275, 123278, 123282, 123287, 123291, + 123295, 123301, 123306, 123312, 123316, 123320, 123323, 123327, 123331, + 123336, 123340, 123345, 123349, 123354, 123358, 123362, 123366, 123370, + 123374, 123378, 123382, 123386, 123391, 123396, 123401, 123406, 123412, + 123418, 123424, 123430, 123436, 0, 0, 0, 0, 0, 123441, 123448, 123456, + 123463, 123470, 123478, 123485, 123492, 123501, 123508, 123515, 123522, + 123530, 0, 0, 0, 123538, 123543, 123550, 123556, 123563, 123569, 123575, + 123581, 123587, 0, 0, 0, 0, 0, 0, 0, 123593, 123598, 123605, 123611, + 123618, 123624, 123630, 123636, 123642, 123648, 0, 0, 123653, 123659, + 123665, 123668, 123677, 123684, 123692, 123699, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123706, 123711, 123716, 123721, + 123728, 123735, 123742, 123749, 123754, 123759, 123764, 123769, 123776, + 123781, 123788, 123795, 123800, 123805, 123810, 123817, 123822, 123827, + 123834, 123841, 123846, 123851, 123856, 123863, 123870, 123877, 123882, + 123887, 123894, 123901, 123908, 123915, 123920, 123925, 123930, 123937, + 123942, 123947, 123952, 123959, 123968, 123975, 123980, 123985, 123990, + 123995, 124000, 124005, 124014, 124021, 124026, 124033, 124040, 124045, + 124050, 124055, 124062, 124067, 124074, 124081, 124086, 124091, 124096, + 124103, 124110, 124115, 124120, 124127, 124134, 124141, 124146, 124151, + 124156, 124161, 124168, 124177, 124186, 124191, 124198, 124207, 124212, + 124217, 124222, 124227, 124234, 124241, 124248, 124255, 124260, 124265, + 124270, 124277, 124284, 124291, 124296, 124301, 124308, 124313, 124320, + 124325, 124332, 124337, 124344, 124351, 124356, 124361, 124366, 124371, + 124376, 124381, 124386, 124391, 124396, 124403, 124410, 124417, 124424, + 124431, 124440, 124445, 124450, 124457, 124464, 124469, 124476, 124483, + 124490, 124497, 124504, 124511, 124516, 124521, 124526, 124531, 124536, + 124545, 124554, 124563, 124572, 124581, 124590, 124599, 124608, 124613, + 124624, 124635, 124644, 124649, 124654, 124659, 124664, 124673, 124680, + 124687, 124694, 124701, 124708, 124715, 124724, 124733, 124744, 124753, + 124764, 124773, 124780, 124789, 124800, 124809, 124818, 124827, 124836, + 124843, 124850, 124857, 124866, 124875, 124886, 124895, 124904, 124915, + 124920, 124925, 124936, 124944, 124953, 124962, 124971, 124982, 124991, + 125000, 125011, 125022, 125033, 125044, 125055, 125066, 125073, 125080, + 125087, 125094, 125105, 125114, 125121, 125128, 125135, 125146, 125157, + 125168, 125179, 125190, 125201, 125212, 125223, 125230, 125237, 125246, + 125255, 125262, 125269, 125276, 125285, 125294, 125303, 125310, 125319, + 125328, 125337, 125344, 125351, 125356, 125362, 125369, 125376, 125383, + 125390, 125397, 125404, 125413, 125422, 125431, 125440, 125447, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 125456, 125462, 125467, 125472, 125479, 125485, + 125491, 125497, 125503, 125509, 125515, 125521, 125525, 125529, 125535, + 125541, 125547, 125551, 125556, 125561, 125565, 125569, 125572, 125578, + 125584, 125590, 125596, 125602, 125608, 125614, 125620, 125626, 125636, + 125646, 125652, 125658, 125668, 125678, 125684, 0, 0, 125690, 125698, + 125703, 125708, 125714, 125720, 125726, 125732, 125738, 125744, 125751, + 125758, 125764, 125770, 125776, 125782, 125788, 125794, 125800, 125806, + 125811, 125817, 125823, 125829, 125835, 125841, 125850, 125856, 125861, + 125869, 125876, 125883, 125892, 125901, 125910, 125919, 125928, 125937, + 125946, 125955, 125965, 125975, 125983, 125991, 126000, 126009, 126015, + 126021, 126027, 126033, 126041, 126049, 126053, 126059, 126064, 126070, + 126076, 126082, 126088, 126094, 126103, 126108, 126115, 126120, 126125, + 126130, 126136, 126142, 126148, 126155, 126160, 126165, 126170, 126175, + 126180, 126186, 126192, 126198, 126204, 126210, 126216, 126222, 126228, + 126233, 126238, 126243, 126248, 126253, 126258, 126263, 126268, 126274, + 126280, 126285, 126290, 126295, 126300, 126305, 126311, 126318, 126322, + 126326, 126330, 126334, 126338, 126342, 126346, 126350, 126358, 126368, + 126372, 126376, 126382, 126388, 126394, 126400, 126406, 126412, 126418, + 126424, 126430, 126436, 126442, 126448, 126454, 126460, 126464, 126468, + 126475, 126481, 126487, 126493, 126498, 126505, 126510, 126516, 126522, + 126528, 126534, 126539, 126543, 126549, 126553, 126557, 126561, 126567, + 126573, 126577, 126583, 126589, 126595, 126601, 126607, 126615, 126623, + 126629, 126635, 126641, 126647, 126659, 126671, 126685, 126697, 126709, + 126723, 126737, 126751, 126755, 126763, 126771, 126776, 126780, 126784, + 126788, 126792, 126796, 126800, 126804, 126810, 126816, 126822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 126828, 126835, 126842, 126849, 126856, 126863, + 126870, 126877, 126884, 126891, 126898, 126905, 126912, 126919, 126926, + 126933, 126940, 126947, 126954, 126961, 126968, 126975, 126982, 126989, + 126996, 127003, 127010, 127017, 127024, 127031, 127038, 127045, 127052, + 127059, 127066, 127073, 127080, 127087, 127094, 127101, 127108, 127115, + 127122, 127129, 127136, 127143, 127150, 127157, 127164, 127171, 127178, + 127185, 127192, 127199, 127206, 127213, 127220, 127227, 127234, 127241, + 127248, 127255, 127262, 127269, 127276, 127283, 127290, 127295, 127300, + 127305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93989, 93993, - 93997, 94001, 94005, 94009, 94013, 94017, 94021, 94025, 94030, 94035, - 94040, 94045, 94050, 94055, 94060, 94065, 94070, 94076, 94082, 94088, - 94095, 94102, 94109, 94116, 94123, 94130, 94137, 94144, 94151, 0, 94158, - 94162, 94166, 94170, 94174, 94178, 94181, 94185, 94188, 94192, 94195, - 94199, 94203, 94208, 94212, 94217, 94220, 94224, 94227, 94231, 94234, - 94238, 94242, 94246, 94250, 94254, 94258, 94262, 94266, 94270, 94274, - 94278, 94282, 94286, 94290, 94294, 94298, 94302, 94306, 94309, 94312, - 94316, 94320, 94324, 94327, 94330, 94333, 94337, 94341, 94345, 94349, - 94352, 94355, 94359, 94365, 94371, 94377, 94382, 94389, 94393, 94398, - 94402, 94407, 94412, 94418, 94423, 94429, 94433, 94438, 94442, 94447, - 94450, 94453, 94457, 94462, 94468, 94473, 94479, 0, 0, 0, 0, 94484, - 94487, 94490, 94493, 94496, 94499, 94502, 94505, 94508, 94511, 94515, - 94519, 94523, 94527, 94531, 94535, 94539, 94543, 94547, 94552, 94557, - 94561, 94564, 94567, 94570, 94573, 94576, 94579, 94582, 94585, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94588, 94593, 94598, 94603, 94607, - 94612, 94616, 94621, 94625, 94630, 94634, 94639, 94643, 94648, 94652, - 94657, 94662, 94667, 94672, 94677, 94682, 94687, 94692, 94697, 94702, - 94707, 94712, 94717, 94722, 94727, 94732, 94737, 94742, 94747, 94752, - 94756, 94760, 94765, 94770, 94775, 94779, 94783, 94787, 94792, 94797, - 94802, 94807, 94811, 94815, 94821, 94826, 94832, 94837, 94843, 94848, - 94854, 94859, 94865, 94870, 94875, 94880, 94885, 94889, 94894, 94900, - 94904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94909, 94916, 94923, - 94930, 94937, 94944, 94951, 94958, 94965, 94972, 94979, 94986, 94993, - 95000, 95007, 95014, 95021, 95028, 95035, 95042, 95049, 95056, 95063, - 95070, 95077, 0, 0, 0, 0, 0, 0, 0, 95084, 95091, 95097, 95103, 95109, - 95115, 95121, 95127, 95133, 95139, 0, 0, 0, 0, 0, 0, 95145, 95150, 95155, - 95160, 95165, 95169, 95173, 95177, 95182, 95187, 95192, 95197, 95202, - 95207, 95212, 95217, 95222, 95227, 95232, 95237, 95242, 95247, 95252, - 95257, 95262, 95267, 95272, 95277, 95282, 95287, 95292, 95297, 95302, - 95307, 95312, 95317, 95322, 95327, 95332, 95337, 95342, 95347, 95353, - 95358, 95364, 95369, 95375, 95380, 95386, 95392, 95396, 95401, 95405, 0, - 95409, 95414, 95418, 95422, 95426, 95430, 95434, 95438, 95442, 95446, - 95450, 95455, 95459, 95464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95469, - 95473, 95477, 95481, 95484, 95488, 95491, 95495, 95498, 95502, 95506, - 95511, 95515, 95520, 95523, 95527, 95530, 95534, 95537, 95541, 95545, - 95549, 95553, 95557, 95561, 95565, 95569, 95573, 95577, 95581, 95585, - 95589, 95593, 95597, 95601, 95605, 95609, 95612, 95615, 95619, 95623, - 95627, 95630, 95633, 95636, 95640, 95644, 95648, 95652, 95656, 95659, - 95662, 95667, 95671, 95676, 95680, 95685, 95690, 95696, 95701, 95707, - 95711, 95716, 95720, 95725, 95729, 95733, 95737, 95741, 95744, 95747, - 95751, 95755, 0, 0, 0, 0, 0, 0, 0, 95758, 95762, 95765, 95768, 95771, - 95774, 95777, 95780, 95783, 95786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 95789, 95793, 95798, 95802, 95807, 95811, 95816, 95820, 95825, 95829, - 95834, 95838, 95843, 95848, 95853, 95858, 95863, 95868, 95873, 95878, - 95883, 95888, 95893, 95898, 95903, 95908, 95913, 95918, 95923, 95928, - 95932, 95936, 95941, 95946, 95951, 95955, 95959, 95963, 95968, 95973, - 95978, 95982, 95986, 95991, 95996, 96001, 96007, 96012, 96018, 96023, - 96029, 96034, 96040, 96045, 96051, 96056, 0, 0, 0, 0, 0, 0, 0, 0, 96061, - 96066, 96070, 96074, 96078, 96082, 96086, 96090, 96094, 96098, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127309, + 127314, 127321, 127328, 127335, 127342, 127347, 127352, 127359, 127364, + 127369, 127376, 127381, 127386, 127391, 127398, 127407, 127412, 127417, + 127422, 127427, 127432, 127437, 127444, 127449, 127454, 127459, 127464, + 127469, 127474, 127479, 127484, 127489, 127494, 127499, 127504, 127510, + 127515, 127520, 127525, 127530, 127535, 127540, 127545, 127550, 127555, + 127564, 127569, 127578, 127583, 127588, 127593, 127598, 127603, 127608, + 127613, 127622, 127627, 127632, 127637, 127642, 127647, 127654, 127659, + 127666, 127671, 127676, 127681, 127686, 127691, 127696, 127701, 127706, + 127711, 127716, 127721, 127726, 127731, 127736, 127741, 127746, 127751, + 127756, 127761, 127770, 127775, 127780, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 127785, 127793, 127801, 127809, 127817, 127825, 127833, 127841, 127849, + 127857, 127865, 127873, 127881, 127889, 127897, 127905, 127913, 127921, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96102, 96105, 96110, 96116, 96124, 96129, 96135, 96143, 96149, - 96155, 96159, 96163, 96170, 96179, 96186, 96195, 96201, 96210, 96217, - 96224, 96231, 96241, 96247, 96251, 96258, 96267, 96277, 96284, 96291, - 96295, 96299, 96306, 96316, 96320, 96327, 96334, 96341, 96347, 96354, - 96361, 96368, 96375, 96379, 96383, 96387, 96394, 96398, 96405, 96412, - 96426, 96435, 96439, 96443, 96447, 96454, 96458, 96462, 96466, 96474, - 96482, 96501, 96511, 96531, 96535, 96539, 96543, 96547, 96551, 96555, - 96559, 96566, 96570, 96573, 96577, 96581, 96587, 96594, 96603, 96607, - 96616, 96625, 96633, 96637, 96644, 96648, 96652, 96656, 96660, 96671, - 96680, 96689, 96698, 96707, 96719, 96728, 96737, 96746, 96754, 96763, - 96775, 96784, 96793, 96802, 96814, 96823, 96832, 96844, 96853, 96862, - 96874, 96883, 96887, 96891, 96895, 96899, 96903, 96907, 96911, 96918, - 96922, 96926, 96937, 96941, 96945, 96952, 96958, 96964, 96968, 96975, - 96979, 96983, 96987, 96991, 96995, 96999, 97005, 97013, 97017, 97021, - 97024, 97030, 97040, 97044, 97056, 97063, 97070, 97077, 97084, 97090, - 97094, 97098, 97102, 97106, 97113, 97122, 97129, 97137, 97145, 97151, - 97155, 97159, 97163, 97167, 97173, 97182, 97194, 97201, 97208, 97217, - 97228, 97234, 97243, 97252, 97259, 97268, 97275, 97282, 97292, 97299, - 97306, 97313, 97320, 97324, 97330, 97334, 97345, 97353, 97362, 97374, - 97381, 97388, 97398, 97405, 97414, 97421, 97430, 97437, 97444, 97454, - 97461, 97468, 97478, 97485, 97497, 97506, 97513, 97520, 97527, 97536, - 97546, 97559, 97566, 97576, 97586, 97593, 97602, 97615, 97622, 97629, - 97636, 97646, 97656, 97663, 97673, 97680, 97687, 97697, 97703, 97710, - 97717, 97724, 97734, 97741, 97748, 97755, 97761, 97768, 97778, 97785, - 97789, 97797, 97801, 97813, 97817, 97831, 97835, 97839, 97843, 97847, - 97853, 97860, 97868, 97872, 97876, 97880, 97884, 97891, 97895, 97901, - 97907, 97915, 97919, 97926, 97934, 97938, 97942, 97948, 97952, 97961, - 97970, 97977, 97987, 97993, 97997, 98001, 98009, 98016, 98023, 98029, - 98033, 98041, 98045, 98052, 98064, 98071, 98081, 98087, 98091, 98100, - 98107, 98116, 98120, 98124, 98131, 98135, 98139, 98143, 98147, 98150, - 98156, 98162, 98166, 98170, 98177, 98184, 98191, 98198, 98205, 98212, - 98219, 98226, 98232, 98236, 98240, 98247, 98254, 98261, 98268, 98275, - 98279, 98282, 98287, 98291, 98295, 98304, 98313, 98317, 98321, 98327, - 98333, 98350, 98356, 98360, 98369, 98373, 98377, 98384, 98392, 98400, - 98406, 98410, 98414, 98418, 98422, 98425, 98431, 98438, 98448, 98455, - 98462, 98469, 98475, 98482, 98489, 98496, 98503, 98510, 98519, 98526, - 98538, 98545, 98552, 98562, 98573, 98580, 98587, 98594, 98601, 98608, - 98615, 98622, 98629, 98636, 98643, 98653, 98663, 98673, 98680, 98690, - 98697, 98704, 98711, 98718, 98724, 98731, 98738, 98745, 98752, 98759, - 98766, 98773, 98780, 98786, 98793, 98800, 98809, 98816, 98823, 98827, - 98835, 98839, 98843, 98847, 98851, 98855, 98862, 98866, 98875, 98879, - 98886, 98894, 98898, 98902, 98906, 98919, 98935, 98939, 98943, 98950, - 98956, 98963, 98967, 98971, 98975, 98979, 98983, 98990, 98994, 99012, - 99016, 99020, 99027, 99031, 99035, 99041, 99045, 99049, 99057, 99061, - 99065, 99069, 99073, 99079, 99090, 99099, 99108, 99115, 99122, 99133, - 99140, 99147, 99154, 99161, 99168, 99175, 99182, 99192, 99198, 99205, - 99215, 99224, 99231, 99240, 99250, 99257, 99264, 99271, 99278, 99290, - 99297, 99304, 99311, 99318, 99325, 99335, 99342, 99349, 99359, 99372, - 99384, 99391, 99401, 99408, 99415, 99422, 99436, 99442, 99450, 99460, - 99470, 99477, 99484, 99490, 99494, 99501, 99511, 99517, 99530, 99534, - 99538, 99545, 99549, 99556, 99566, 99570, 99574, 99578, 99582, 99586, - 99593, 99597, 99604, 99611, 99618, 99627, 99636, 99646, 99653, 99660, - 99667, 99677, 99684, 99694, 99701, 99711, 99718, 99725, 99735, 99745, - 99752, 99758, 99766, 99774, 99780, 99786, 99790, 99794, 99801, 99809, - 99815, 99819, 99823, 99827, 99834, 99846, 99849, 99856, 99862, 99866, - 99870, 99874, 99878, 99882, 99886, 99890, 99894, 99898, 99902, 99909, - 99913, 99919, 99923, 99927, 99931, 99937, 99944, 99951, 99958, 99969, - 99977, 99981, 99987, 99996, 100003, 100009, 100012, 100016, 100020, - 100026, 100035, 100043, 100047, 100053, 100057, 100061, 100065, 100071, - 100078, 100084, 100088, 100094, 100098, 100102, 100111, 100123, 100127, - 100134, 100141, 100151, 100158, 100170, 100177, 100184, 100191, 100202, - 100212, 100225, 100235, 100242, 100246, 100250, 100254, 100258, 100267, - 100276, 100285, 100302, 100311, 100317, 100324, 100332, 100345, 100349, - 100358, 100367, 100376, 100385, 100396, 100405, 100414, 100423, 100432, - 100441, 100450, 100460, 100463, 100467, 100471, 100475, 100479, 100483, - 100489, 100496, 100503, 100510, 100516, 100522, 100529, 100535, 100542, - 100550, 100554, 100561, 100568, 100575, 100583, 100586, 100590, 100594, - 100598, 100601, 100607, 100611, 100617, 100624, 100631, 100637, 100644, - 100651, 100658, 100665, 100672, 100679, 100686, 100693, 100700, 100707, - 100714, 100721, 100728, 100735, 100741, 100745, 100754, 100758, 100762, - 100766, 100770, 100776, 100783, 100790, 100797, 100804, 100811, 100817, - 100825, 100829, 100833, 100837, 100841, 100847, 100864, 100881, 100885, - 100889, 100893, 100897, 100901, 100905, 100911, 100918, 100922, 100928, - 100935, 100942, 100949, 100956, 100963, 100972, 100979, 100986, 100993, - 101000, 101004, 101008, 101014, 101026, 101030, 101034, 101043, 101047, - 101051, 101055, 101061, 101065, 101069, 101078, 101082, 101086, 101090, - 101097, 101101, 101105, 101109, 101113, 101117, 101121, 101125, 101129, - 101135, 101142, 101149, 101155, 101159, 101176, 101182, 101186, 101192, - 101198, 101204, 101210, 101216, 101222, 101226, 101230, 101234, 101240, - 101244, 101250, 101254, 101258, 101265, 101272, 101289, 101293, 101297, - 101301, 101305, 101309, 101321, 101324, 101329, 101334, 101349, 101359, - 101371, 101375, 101379, 101383, 101389, 101396, 101403, 101413, 101425, - 101431, 101437, 101446, 101450, 101454, 101461, 101471, 101478, 101484, - 101488, 101492, 101499, 101505, 101509, 101515, 101519, 101527, 101533, - 101537, 101545, 101553, 101560, 101566, 101573, 101580, 101590, 101600, - 101604, 101608, 101612, 101616, 101622, 101629, 101635, 101642, 101649, - 101656, 101665, 101672, 101679, 101685, 101692, 101699, 101706, 101713, - 101720, 101727, 101733, 101740, 101747, 101754, 101763, 101770, 101777, - 101781, 101787, 101791, 101797, 101804, 101811, 101818, 101822, 101826, - 101830, 101834, 101838, 101845, 101849, 101853, 101859, 101867, 101871, - 101875, 101879, 101883, 101890, 101894, 101898, 101906, 101910, 101914, - 101918, 101922, 101928, 101932, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 101936, 101942, 101948, 101955, 101962, 101969, 101976, 101983, - 101990, 101996, 102003, 102010, 102017, 102024, 102031, 102038, 102044, - 102050, 102056, 102062, 102068, 102074, 102080, 102086, 102092, 102099, - 102106, 102113, 102120, 102127, 102134, 102140, 102146, 102152, 102159, - 102166, 102172, 102178, 102187, 102194, 102201, 102208, 102215, 102222, - 102229, 102235, 102241, 102247, 102256, 102263, 102270, 102281, 102292, - 102298, 102304, 102310, 102319, 102326, 102333, 102343, 102353, 102364, - 102375, 102387, 102400, 102411, 102422, 102434, 102447, 102458, 102469, - 102480, 102491, 102502, 102514, 102522, 102530, 102539, 102548, 102557, - 102563, 102569, 102575, 102582, 102592, 102599, 102609, 102614, 102619, - 102625, 102631, 102639, 102647, 102656, 102667, 102678, 102686, 102694, - 102703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102712, 102723, 102730, - 102738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102746, 102750, 102754, - 102758, 102762, 102766, 102770, 102774, 102778, 102782, 102786, 102790, - 102794, 102798, 102802, 102806, 102810, 102814, 102818, 102822, 102826, - 102830, 102834, 102838, 102842, 102846, 102850, 102854, 102858, 102862, - 102866, 102870, 102874, 102878, 102882, 102886, 102890, 102894, 102898, - 102902, 102906, 102910, 102914, 102918, 102922, 102926, 102930, 102934, - 102938, 102942, 102946, 102950, 102954, 102958, 102962, 102966, 102970, - 102974, 102978, 102982, 102986, 102990, 102994, 102998, 103002, 103006, - 103010, 103014, 103018, 103022, 103026, 103030, 103034, 103038, 103042, - 103046, 103050, 103054, 103058, 103062, 103066, 103070, 103074, 103078, - 103082, 103086, 103090, 103094, 103098, 103102, 103106, 103110, 103114, - 103118, 103122, 103126, 103130, 103134, 103138, 103142, 103146, 103150, - 103154, 103158, 103162, 103166, 103170, 103174, 103178, 103182, 103186, - 103190, 103194, 103198, 103202, 103206, 103210, 103214, 103218, 103222, - 103226, 103230, 103234, 103238, 103242, 103246, 103250, 103254, 103258, - 103262, 103266, 103270, 103274, 103278, 103282, 103286, 103290, 103294, - 103298, 103302, 103306, 103310, 103314, 103318, 103322, 103326, 103330, - 103334, 103338, 103342, 103346, 103350, 103354, 103358, 103362, 103366, - 103370, 103374, 103378, 103382, 103386, 103390, 103394, 103398, 103402, - 103406, 103410, 103414, 103418, 103422, 103426, 103430, 103434, 103438, - 103442, 103446, 103450, 103454, 103458, 103462, 103466, 103470, 103474, - 103478, 103482, 103486, 103490, 103494, 103498, 103502, 103506, 103510, - 103514, 103518, 103522, 103526, 103530, 103534, 103538, 103542, 103546, - 103550, 103554, 103558, 103562, 103566, 103570, 103574, 103578, 103582, - 103586, 103590, 103594, 103598, 103602, 103606, 103610, 103614, 103618, - 103622, 103626, 103630, 103634, 103638, 103642, 103646, 103650, 103654, - 103658, 103662, 103666, 103670, 103674, 103678, 103682, 103686, 103690, - 103694, 103698, 103702, 103706, 103710, 103714, 103718, 103722, 103726, - 103730, 103734, 103738, 103742, 103746, 103750, 103754, 103758, 103762, - 103766, 103770, 103774, 103778, 103782, 103786, 103790, 103794, 103798, - 103802, 103806, 103810, 103814, 103818, 103822, 103826, 103830, 103834, - 103838, 103842, 103846, 103850, 103854, 103858, 103862, 103866, 103870, - 103874, 103878, 103882, 103886, 103890, 103894, 103898, 103902, 103906, - 103910, 103914, 103918, 103922, 103926, 103930, 103934, 103938, 103942, - 103946, 103950, 103954, 103958, 103962, 103966, 103970, 103974, 103978, - 103982, 103986, 103990, 103994, 103998, 104002, 104006, 104010, 104014, - 104018, 104022, 104026, 104030, 104034, 104038, 104042, 104046, 104050, - 104054, 104058, 104062, 104066, 104070, 104074, 104078, 104082, 104086, - 104090, 104094, 104098, 104102, 104106, 104110, 104114, 104118, 104122, - 104126, 104130, 104134, 104138, 104142, 104146, 104150, 104154, 104158, - 104162, 104166, 104170, 104174, 104178, 104182, 104186, 104190, 104194, - 104198, 104202, 104206, 104210, 104214, 104218, 104222, 104226, 104230, - 104234, 104238, 104242, 104246, 104250, 104254, 104258, 104262, 104266, - 104270, 104274, 104278, 104282, 104286, 104290, 104294, 104298, 104302, - 104306, 104310, 104314, 104318, 104322, 104326, 104330, 104334, 104338, - 104342, 104346, 104350, 104354, 104358, 104362, 104366, 104370, 104374, - 104378, 104382, 104386, 104390, 104394, 104398, 104402, 104406, 104410, - 104414, 104418, 104422, 104426, 104430, 104434, 104438, 104442, 104446, - 104450, 104454, 104458, 104462, 104466, 104470, 104474, 104478, 104482, - 104486, 104490, 104494, 104498, 104502, 104506, 104510, 104514, 104518, - 104522, 104526, 104530, 104534, 104538, 104542, 104546, 104550, 104554, - 104558, 104562, 104566, 104570, 104574, 104578, 104582, 104586, 104590, - 104594, 104598, 104602, 104606, 104610, 104614, 104618, 104622, 104626, - 104630, 104634, 104638, 104642, 104646, 104650, 104654, 104658, 104662, - 104666, 104670, 104674, 104678, 104682, 104686, 104690, 104694, 104698, - 104702, 104706, 104710, 104714, 104718, 104722, 104726, 104730, 104734, - 104738, 104742, 104746, 104750, 104754, 104758, 104762, 104766, 104770, - 104774, 104778, 104782, 104786, 104790, 104794, 104798, 104802, 104806, - 104810, 104814, 104818, 104822, 104826, 104830, 104834, 104838, 104842, - 104846, 104850, 104854, 104858, 104862, 104866, 104870, 104874, 104878, - 104882, 104886, 104890, 104894, 104898, 104902, 104906, 104910, 104914, - 104918, 104922, 104926, 104930, 104934, 104938, 104942, 104946, 104950, - 104954, 104958, 104962, 104966, 104970, 104974, 104978, 104982, 104986, - 104990, 104994, 104998, 105002, 105006, 105010, 105014, 105018, 105022, - 105026, 105030, 105034, 105038, 105042, 105046, 105050, 105054, 105058, - 105062, 105066, 105070, 105074, 105078, 105082, 105086, 105090, 105094, - 105098, 105102, 105106, 105110, 105114, 105118, 105122, 105126, 105130, - 105134, 105138, 105142, 105146, 105150, 105154, 105158, 105162, 105166, - 105170, 105174, 105178, 105182, 105186, 105190, 105194, 105198, 105202, - 105206, 105210, 105214, 105218, 105222, 105226, 105230, 105234, 105238, - 105242, 105246, 105250, 105254, 105258, 105262, 105266, 105270, 105274, - 105278, 105282, 105286, 105290, 105294, 105298, 105302, 105306, 105310, - 105314, 105318, 105322, 105326, 105330, 105334, 105338, 105342, 105346, - 105350, 105354, 105358, 105362, 105366, 105370, 105374, 105378, 105382, - 105386, 105390, 105394, 105398, 105402, 105406, 105410, 105414, 105418, - 105422, 105426, 105430, 105434, 105438, 105442, 105446, 105450, 105454, - 105458, 105462, 105466, 105470, 105474, 105478, 105482, 105486, 105490, - 105494, 105498, 105502, 105506, 105510, 105514, 105518, 105522, 105526, - 105530, 105534, 105538, 105542, 105546, 105550, 105554, 105558, 105562, - 105566, 105570, 105574, 105578, 105582, 105586, 105590, 105594, 105598, - 105602, 105606, 105610, 105614, 105618, 105622, 105626, 105630, 105634, - 105638, 105642, 105646, 105650, 105654, 105658, 105662, 105666, 105670, - 105674, 105678, 105682, 105686, 105690, 105694, 105698, 105702, 105706, - 105710, 105714, 105718, 105722, 105726, 105730, 105734, 105738, 105742, - 105746, 105750, 105754, 105758, 105762, 105766, 105770, 105774, 105778, - 105782, 105786, 105790, 105794, 105798, 105802, 105806, 105810, 105814, - 105818, 105822, 105826, 105830, 105834, 105838, 105842, 105846, 105850, - 105854, 105858, 105862, 105866, 105870, 105874, 105878, 105882, 105886, - 105890, 105894, 105898, 105902, 105906, 105910, 105914, 105918, 105922, - 105926, 105930, 105934, 105938, 105942, 105946, 105950, 105954, 105958, - 105962, 105966, 105970, 105974, 105978, 105982, 105986, 105990, 105994, - 105998, 106002, 106006, 106010, 106014, 106018, 106022, 106026, 106030, - 106034, 106038, 106042, 106046, 106050, 106054, 106058, 106062, 106066, - 106070, 106074, 106078, 106082, 106086, 106090, 106094, 106098, 106102, - 106106, 106110, 106114, 106118, 106122, 106126, 106130, 106134, 106138, - 106142, 106146, 106150, 106154, 106158, 106162, 106166, 106170, 106174, - 106178, 106182, 106186, 106190, 106194, 106198, 106202, 106206, 106210, - 106214, 106218, 106222, 106226, 106230, 106234, 106238, 106242, 106246, - 106250, 106254, 106258, 106262, 106266, 106270, 106274, 106278, 106282, - 106286, 106290, 106294, 106298, 106302, 106306, 106310, 106314, 106318, - 106322, 106326, 106330, 106334, 106338, 106342, 106346, 106350, 106354, - 106358, 106362, 106366, 106370, 106374, 106378, 106382, 106386, 106390, - 106394, 106398, 106402, 106406, 106410, 106414, 106418, 106422, 106426, - 106430, 106434, 106438, 106442, 106446, 106450, 106454, 106458, 106462, - 106466, 106470, 106474, 106478, 106482, 106486, 106490, 106494, 106498, - 106502, 106506, 106510, 106514, 106518, 106522, 106526, 106530, 106534, - 106538, 106542, 106546, 106550, 106554, 106558, 106562, 106566, 106570, - 106574, 106578, 106582, 106586, 106590, 106594, 106598, 106602, 106606, - 106610, 106614, 106618, 106622, 106626, 106630, 106634, 106638, 106642, - 106646, 106650, 106654, 106658, 106662, 106666, 106670, 106674, 106678, - 106682, 106686, 106690, 106694, 106698, 106702, 106706, 106710, 106714, - 106718, 106722, 106726, 106730, 106734, 106738, 106742, 106746, 106750, - 106754, 106758, 106762, 106766, 106770, 106774, 106778, 106782, 106786, - 106790, 106794, 106798, 106802, 106806, 106810, 106814, 106818, 106822, - 106826, 106830, 106834, 106838, 106842, 106846, 106850, 106854, 106858, - 106862, 106866, 106870, 106874, 106878, 106882, 106886, 106890, 106894, - 106898, 106902, 106906, 106910, 106914, 106918, 106922, 106926, 106930, - 106934, 106938, 106942, 106946, 106950, 106954, 106958, 106962, 106966, - 106970, 106974, 106978, 106982, 106986, 106990, 106994, 106998, 107002, - 107006, 107010, 107014, 107018, 107022, 107026, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 107030, 107037, 107044, 107053, 107062, 107069, 107074, 107081, - 107088, 107097, 107108, 107119, 107124, 107131, 107136, 107141, 107146, - 107151, 107156, 107161, 107166, 107171, 107176, 107181, 107186, 107193, - 107200, 107205, 107210, 107215, 107220, 107227, 107234, 107242, 107247, - 107254, 107259, 107264, 107269, 107274, 107279, 107286, 107293, 107298, - 107303, 107308, 107313, 107318, 107323, 107328, 107333, 107338, 107343, - 107348, 107353, 107358, 107363, 107368, 107373, 107378, 107383, 107388, - 107395, 107400, 107405, 107414, 107421, 107426, 107431, 107436, 107441, - 107446, 107451, 107456, 107461, 107466, 107471, 107476, 107481, 107486, - 107491, 107496, 107501, 107506, 107511, 107516, 107521, 107526, 107532, - 107540, 107546, 107554, 107562, 107570, 107576, 107582, 107588, 107594, - 107600, 107608, 107618, 107626, 107634, 107640, 107646, 107654, 107662, - 107668, 107676, 107684, 107692, 107698, 107704, 107710, 107716, 107722, - 107728, 107736, 107744, 107750, 107756, 107762, 107768, 107774, 107782, - 107788, 107794, 107800, 107806, 107812, 107818, 107826, 107832, 107838, - 107844, 107850, 107858, 107866, 107872, 107878, 107884, 107889, 107895, - 107901, 107908, 107913, 107918, 107923, 107928, 107933, 107938, 107943, - 107948, 107953, 107962, 107969, 107974, 107979, 107984, 107991, 107996, - 108001, 108006, 108013, 108018, 108023, 108028, 108033, 108038, 108043, - 108048, 108053, 108058, 108063, 108068, 108075, 108080, 108087, 108092, - 108097, 108104, 108109, 108114, 108119, 108124, 108129, 108134, 108139, - 108144, 108149, 108154, 108159, 108164, 108169, 108174, 108179, 108184, - 108189, 108194, 108199, 108206, 108211, 108216, 108221, 108226, 108231, - 108236, 108241, 108246, 108251, 108256, 108261, 108266, 108271, 108278, - 108283, 108288, 108295, 108300, 108305, 108310, 108315, 108320, 108325, - 108330, 108335, 108340, 108345, 108352, 108357, 108362, 108367, 108372, - 108377, 108384, 108391, 108396, 108401, 108406, 108411, 108416, 108421, - 108426, 108431, 108436, 108441, 108446, 108451, 108456, 108461, 108466, - 108471, 108476, 108481, 108486, 108491, 108496, 108501, 108506, 108511, - 108516, 108521, 108526, 108531, 108536, 108541, 108546, 108551, 108556, - 108561, 108566, 108571, 108578, 108583, 108588, 108593, 108598, 108603, - 108608, 108613, 108618, 108623, 108628, 108633, 108638, 108643, 108648, - 108653, 108658, 108663, 108668, 108673, 108678, 108683, 108688, 108693, - 108698, 108703, 108708, 108713, 108718, 108723, 108728, 108733, 108738, - 108743, 108748, 108753, 108758, 108763, 108768, 108773, 108778, 108783, - 108788, 108793, 108798, 108803, 108808, 108813, 108818, 108823, 108828, - 108833, 108838, 108843, 108848, 108853, 108858, 108863, 108868, 108875, - 108880, 108885, 108890, 108895, 108900, 108905, 108909, 108914, 108919, - 108924, 108929, 108934, 108939, 108944, 108949, 108954, 108959, 108964, - 108969, 108974, 108979, 108986, 108991, 108996, 109002, 109007, 109012, - 109017, 109022, 109027, 109032, 109037, 109042, 109047, 109052, 109057, - 109062, 109067, 109072, 109077, 109082, 109087, 109092, 109097, 109102, - 109107, 109112, 109117, 109122, 109127, 109132, 109137, 109142, 109147, - 109152, 109157, 109162, 109167, 109172, 109177, 109182, 109187, 109192, - 109197, 109202, 109207, 109212, 109217, 109224, 109229, 109234, 109241, - 109248, 109253, 109258, 109263, 109268, 109273, 109278, 109283, 109288, - 109293, 109298, 109303, 109308, 109313, 109318, 109323, 109328, 109333, - 109338, 109343, 109348, 109353, 109358, 109363, 109368, 109373, 109380, - 109385, 109390, 109395, 109400, 109405, 109410, 109415, 109420, 109425, - 109430, 109435, 109440, 109445, 109450, 109455, 109460, 109465, 109470, - 109477, 109482, 109487, 109492, 109497, 109502, 109507, 109512, 109518, - 109523, 109528, 109533, 109538, 109543, 109548, 109553, 109558, 109565, - 109572, 109577, 109582, 109586, 109591, 109595, 109599, 109604, 109611, - 109616, 109621, 109630, 109635, 109640, 109645, 109650, 109657, 109664, - 109669, 109674, 109679, 109684, 109691, 109696, 109701, 109706, 109711, - 109716, 109721, 109726, 109731, 109736, 109741, 109746, 109751, 109758, - 109762, 109767, 109772, 109777, 109782, 109786, 109791, 109796, 109801, - 109806, 109811, 109816, 109821, 109826, 109831, 109837, 109843, 109849, - 109855, 109861, 109867, 109873, 109879, 109885, 109891, 109897, 109903, - 109908, 109914, 109920, 109926, 109932, 109938, 109944, 109950, 109956, - 109962, 109968, 109974, 109979, 109985, 109991, 109997, 110003, 110009, - 110015, 110021, 110027, 110033, 110039, 110045, 110051, 110057, 110063, - 110069, 110075, 110081, 110087, 110093, 110099, 110104, 110110, 110116, - 110122, 110128, 110134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127929, + 127933, 127938, 127943, 127948, 127952, 127957, 127962, 127967, 127971, + 127976, 127981, 127985, 127990, 127995, 127999, 128004, 128009, 128013, + 128017, 128022, 128026, 128031, 128036, 128041, 128046, 128051, 128055, + 128060, 128065, 128070, 128074, 128079, 128084, 128089, 128093, 128098, + 128103, 128107, 128112, 128117, 128121, 128126, 128131, 128135, 128139, + 128144, 128148, 128153, 128158, 128163, 128168, 128173, 128177, 128182, + 128187, 128192, 128196, 128201, 128206, 128211, 128215, 128220, 128225, + 128229, 128234, 128239, 128243, 128248, 128253, 128257, 128261, 128266, + 128270, 128275, 128280, 128285, 128290, 128295, 128299, 128304, 128309, + 128314, 128318, 128323, 0, 128328, 128332, 128337, 128342, 128346, + 128351, 128356, 128360, 128365, 128370, 128374, 128378, 128383, 128387, + 128392, 128397, 128402, 128407, 128412, 128417, 128423, 128429, 128435, + 128440, 128446, 128452, 128458, 128463, 128469, 128475, 128480, 128486, + 128492, 128497, 128503, 128509, 128514, 128519, 128525, 128530, 128536, + 128542, 128548, 128554, 128560, 128565, 128571, 128577, 128583, 128588, + 128594, 128600, 128606, 128611, 128617, 128623, 128628, 128634, 128640, + 128645, 128651, 128657, 128662, 128667, 128673, 128678, 128684, 128690, + 128696, 128702, 128708, 0, 128712, 128717, 0, 0, 128722, 0, 0, 128727, + 128732, 0, 0, 128737, 128742, 128746, 128751, 0, 128756, 128760, 128765, + 128769, 128774, 128779, 128784, 128789, 128794, 128798, 128803, 128808, + 0, 128813, 0, 128818, 128823, 128827, 128832, 128837, 128841, 128846, 0, + 128851, 128856, 128861, 128865, 128869, 128874, 128878, 128883, 128888, + 128893, 128898, 128903, 128908, 128914, 128920, 128926, 128931, 128937, + 128943, 128949, 128954, 128960, 128966, 128971, 128977, 128983, 128988, + 128994, 129000, 129005, 129010, 129016, 129021, 129027, 129033, 129039, + 129045, 129051, 129056, 129062, 129068, 129074, 129079, 129085, 129091, + 129097, 129102, 129108, 129114, 129119, 129125, 129131, 129136, 129142, + 129148, 129153, 129158, 129164, 129169, 129175, 129181, 129187, 129193, + 129199, 129203, 0, 129208, 129213, 129217, 129222, 0, 0, 129227, 129232, + 129237, 129241, 129246, 129251, 129255, 129260, 0, 129265, 129269, + 129274, 129278, 129283, 129288, 129293, 0, 129298, 129302, 129307, + 129312, 129317, 129321, 129326, 129331, 129336, 129340, 129345, 129350, + 129354, 129359, 129364, 129368, 129373, 129378, 129382, 129386, 129391, + 129395, 129400, 129405, 129410, 129415, 129420, 129424, 0, 129429, + 129434, 129438, 129443, 0, 129448, 129452, 129457, 129462, 129466, 0, + 129471, 0, 0, 0, 129475, 129479, 129484, 129488, 129493, 129498, 129503, + 0, 129508, 129512, 129517, 129522, 129527, 129531, 129536, 129541, + 129546, 129550, 129555, 129560, 129564, 129569, 129574, 129578, 129583, + 129588, 129592, 129596, 129601, 129605, 129610, 129615, 129620, 129625, + 129630, 129635, 129641, 129647, 129653, 129658, 129664, 129670, 129676, + 129681, 129687, 129693, 129698, 129704, 129710, 129715, 129721, 129727, + 129732, 129737, 129743, 129748, 129754, 129760, 129766, 129772, 129778, + 129783, 129789, 129795, 129801, 129806, 129812, 129818, 129824, 129829, + 129835, 129841, 129846, 129852, 129858, 129863, 129869, 129875, 129880, + 129885, 129891, 129896, 129902, 129908, 129914, 129920, 129926, 129930, + 129935, 129940, 129945, 129949, 129954, 129959, 129964, 129968, 129973, + 129978, 129982, 129987, 129992, 129996, 130001, 130006, 130010, 130014, + 130019, 130023, 130028, 130033, 130038, 130043, 130048, 130052, 130057, + 130062, 130067, 130071, 130076, 130081, 130086, 130090, 130095, 130100, + 130104, 130109, 130114, 130118, 130123, 130128, 130132, 130136, 130141, + 130145, 130150, 130155, 130160, 130165, 130170, 130175, 130181, 130187, + 130193, 130198, 130204, 130210, 130216, 130221, 130227, 130233, 130238, + 130244, 130250, 130255, 130261, 130267, 130272, 130277, 130283, 130288, + 130294, 130300, 130306, 130312, 130318, 130323, 130329, 130335, 130341, + 130346, 130352, 130358, 130364, 130369, 130375, 130381, 130386, 130392, + 130398, 130403, 130409, 130415, 130420, 130425, 130431, 130436, 130442, + 130448, 130454, 130460, 130466, 130471, 130477, 130483, 130489, 130494, + 130500, 130506, 130512, 130517, 130523, 130529, 130534, 130540, 130546, + 130551, 130557, 130563, 130568, 130573, 130579, 130584, 130590, 130596, + 130602, 130608, 130614, 130619, 130625, 130631, 130637, 130642, 130648, + 130654, 130660, 130665, 130671, 130677, 130682, 130688, 130694, 130699, + 130705, 130711, 130716, 130721, 130727, 130732, 130738, 130744, 130750, + 130756, 130762, 130768, 130775, 130782, 130789, 130795, 130802, 130809, + 130816, 130822, 130829, 130836, 130842, 130849, 130856, 130862, 130869, + 130876, 130882, 130888, 130895, 130901, 130908, 130915, 130922, 130929, + 130936, 130942, 130949, 130956, 130963, 130969, 130976, 130983, 130990, + 130996, 131003, 131010, 131016, 131023, 131030, 131036, 131043, 131050, + 131056, 131062, 131069, 131075, 131082, 131089, 131096, 131103, 131110, + 131115, 131121, 131127, 131133, 131138, 131144, 131150, 131156, 131161, + 131167, 131173, 131178, 131184, 131190, 131195, 131201, 131207, 131212, + 131217, 131223, 131228, 131234, 131240, 131246, 131252, 131258, 131263, + 131269, 131275, 131281, 131286, 131292, 131298, 131304, 131309, 131315, + 131321, 131326, 131332, 131338, 131343, 131349, 131355, 131360, 131365, + 131371, 131376, 131382, 131388, 131394, 131400, 131406, 131412, 0, 0, + 131419, 131424, 131429, 131434, 131439, 131444, 131449, 131454, 131459, + 131464, 131469, 131474, 131479, 131484, 131489, 131494, 131499, 131504, + 131510, 131515, 131520, 131525, 131530, 131535, 131540, 131545, 131549, + 131554, 131559, 131564, 131569, 131574, 131579, 131584, 131589, 131594, + 131599, 131604, 131609, 131614, 131619, 131624, 131629, 131634, 131640, + 131645, 131650, 131655, 131660, 131665, 131670, 131675, 131681, 131686, + 131691, 131696, 131701, 131706, 131711, 131716, 131721, 131726, 131731, + 131736, 131741, 131746, 131751, 131756, 131761, 131766, 131771, 131776, + 131781, 131786, 131791, 131796, 131802, 131807, 131812, 131817, 131822, + 131827, 131832, 131837, 131841, 131846, 131851, 131856, 131861, 131866, + 131871, 131876, 131881, 131886, 131891, 131896, 131901, 131906, 131911, + 131916, 131921, 131926, 131932, 131937, 131942, 131947, 131952, 131957, + 131962, 131967, 131973, 131978, 131983, 131988, 131993, 131998, 132003, + 132009, 132015, 132021, 132027, 132033, 132039, 132045, 132051, 132057, + 132063, 132069, 132075, 132081, 132087, 132093, 132099, 132105, 132112, + 132118, 132124, 132130, 132136, 132142, 132148, 132154, 132159, 132165, + 132171, 132177, 132183, 132189, 132195, 132201, 132207, 132213, 132219, + 132225, 132231, 132237, 132243, 132249, 132255, 132261, 132268, 132274, + 132280, 132286, 132292, 132298, 132304, 132310, 132317, 132323, 132329, + 132335, 132341, 132347, 132353, 132359, 132365, 132371, 132377, 132383, + 132389, 132395, 132401, 132407, 132413, 132419, 132425, 132431, 132437, + 132443, 132449, 132455, 132462, 132468, 132474, 132480, 132486, 132492, + 132498, 132504, 132509, 132515, 132521, 132527, 132533, 132539, 132545, + 132551, 132557, 132563, 132569, 132575, 132581, 132587, 132593, 132599, + 132605, 132611, 132618, 132624, 132630, 132636, 132642, 132648, 132654, + 132660, 132667, 132673, 132679, 132685, 132691, 132697, 132703, 132710, + 132717, 132724, 132731, 132738, 132745, 132752, 132759, 132766, 132773, + 132780, 132787, 132794, 132801, 132808, 132815, 132822, 132830, 132837, + 132844, 132851, 132858, 132865, 132872, 132879, 132885, 132892, 132899, + 132906, 132913, 132920, 132927, 132934, 132941, 132948, 132955, 132962, + 132969, 132976, 132983, 132990, 132997, 133004, 133012, 133019, 133026, + 133033, 133040, 133047, 133054, 133061, 133069, 133076, 133083, 133090, + 133097, 133104, 133111, 133116, 0, 0, 133121, 133126, 133130, 133134, + 133138, 133142, 133146, 133150, 133154, 133158, 133162, 133167, 133171, + 133175, 133179, 133183, 133187, 133191, 133195, 133199, 133203, 133208, + 133212, 133216, 133220, 133224, 133228, 133232, 133236, 133240, 133244, + 133250, 133255, 133260, 133265, 133270, 133275, 133280, 133285, 133290, + 133295, 133301, 133306, 133311, 133316, 133321, 133326, 133331, 133336, + 133341, 133346, 133353, 133359, 133366, 133373, 133380, 133387, 133394, + 133401, 133408, 133415, 133422, 133429, 133436, 133443, 133450, 133457, + 133464, 133471, 133478, 133485, 133492, 133499, 133506, 133513, 133520, + 133527, 133534, 133541, 133548, 133555, 133562, 133569, 133576, 133583, + 133589, 133595, 133601, 133608, 133614, 133621, 133627, 133634, 133641, + 133648, 133655, 133662, 133669, 133676, 133683, 133690, 133697, 133704, + 133711, 133718, 133725, 133732, 133739, 133746, 133753, 133760, 133767, + 133775, 133782, 133789, 133796, 133803, 133810, 133817, 133824, 133831, + 133838, 133845, 133852, 133859, 133865, 133872, 133879, 133886, 133893, + 133900, 133907, 133914, 133922, 133929, 133935, 133942, 133949, 133956, + 133963, 133970, 133977, 133984, 133991, 133998, 134005, 134012, 134019, + 134026, 134033, 134040, 134047, 134054, 134061, 134068, 134075, 134081, + 134088, 134095, 134102, 134109, 134116, 134123, 134130, 134137, 134144, + 134151, 134158, 134165, 134172, 134179, 134186, 134193, 134200, 134207, + 134214, 134221, 134228, 134235, 134243, 134251, 134259, 134266, 134273, + 134280, 134287, 134294, 134301, 134308, 134315, 134322, 134329, 134335, + 134342, 134349, 134356, 134363, 134370, 134377, 134384, 134391, 134398, + 134405, 134412, 134419, 134426, 134433, 134441, 134449, 134457, 134464, + 134471, 134478, 134485, 134492, 134499, 134506, 134513, 134520, 134527, + 134534, 134541, 134548, 134555, 134562, 134569, 134576, 134583, 134590, + 134597, 134604, 134611, 134618, 134625, 134632, 134639, 134646, 134653, + 134660, 134667, 134674, 134681, 134688, 134695, 134702, 134709, 134716, + 0, 0, 134723, 134727, 134731, 134735, 134739, 134743, 134747, 134751, + 134755, 134759, 134765, 134771, 134777, 134783, 134791, 134799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134805, 134809, 134813, 134817, + 0, 134821, 134825, 134829, 134833, 134837, 134841, 134845, 134849, + 134853, 134857, 134861, 134865, 134869, 134873, 134877, 134881, 134885, + 134889, 134893, 134897, 134901, 134905, 134909, 134913, 134919, 134925, + 134931, 0, 134937, 134942, 0, 134947, 0, 0, 134952, 0, 134957, 134962, + 134967, 134972, 134977, 134982, 134987, 134992, 134997, 135002, 0, + 135007, 135012, 135017, 135022, 0, 135027, 0, 135032, 0, 0, 0, 0, 0, 0, + 135037, 0, 0, 0, 0, 135043, 0, 135049, 0, 135055, 0, 135061, 135067, + 135073, 0, 135079, 135085, 0, 135091, 0, 0, 135097, 0, 135103, 0, 135109, + 0, 135115, 0, 135123, 0, 135131, 135137, 0, 135143, 0, 0, 135149, 135155, + 135161, 135167, 0, 135173, 135179, 135185, 135191, 135197, 135203, + 135209, 0, 135215, 135221, 135227, 135233, 0, 135239, 135245, 135251, + 135257, 0, 135265, 0, 135273, 135279, 135285, 135291, 135297, 135303, + 135309, 135315, 135321, 135327, 0, 135333, 135339, 135345, 135351, + 135357, 135363, 135369, 135375, 135381, 135387, 135393, 135399, 135405, + 135411, 135417, 135423, 135429, 0, 0, 0, 0, 0, 135435, 135440, 135445, 0, + 135450, 135455, 135460, 135465, 135470, 0, 135475, 135480, 135485, + 135490, 135495, 135500, 135505, 135510, 135515, 135520, 135525, 135530, + 135535, 135540, 135545, 135550, 135555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 110140, 110143, 110147, 110151, 110155, 110158, - 110162, 110167, 110171, 110175, 110179, 110183, 110187, 110192, 110197, - 110201, 110205, 110208, 110212, 110217, 110222, 110226, 110230, 110234, - 110238, 110242, 110246, 110250, 110254, 110258, 110262, 110265, 110269, - 110273, 110277, 110281, 110285, 110289, 110295, 110298, 110302, 110306, - 110310, 110314, 110318, 110322, 110326, 110330, 110334, 110339, 110344, - 110350, 110354, 110358, 110362, 110366, 110370, 110374, 110379, 110382, - 110386, 110390, 110394, 110398, 110404, 110408, 110412, 110416, 110420, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110424, 110428, 110432, 110438, 110444, - 110448, 110453, 110458, 110463, 110468, 110472, 110477, 110482, 110487, - 110491, 110496, 110501, 110506, 110510, 110515, 110520, 110525, 110530, - 110535, 110540, 110545, 110550, 110554, 110559, 110564, 110569, 110574, - 110579, 110584, 110589, 110594, 110599, 110604, 110609, 110616, 110621, - 110628, 110633, 110638, 110643, 110648, 110653, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 110658, 110662, 110668, 110671, 110674, 110678, - 110682, 110686, 110690, 110694, 110698, 110702, 110708, 110714, 110720, - 110726, 110732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135560, 135570, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135578, 135585, 135591, 135598, + 135604, 135611, 135618, 135624, 135631, 135638, 135645, 135653, 135661, + 135669, 135677, 135685, 135693, 135700, 135707, 135714, 135722, 135730, + 135738, 135746, 135754, 135762, 135769, 135776, 135783, 135791, 135799, + 135807, 135815, 135823, 135831, 135836, 135841, 135846, 135851, 135856, + 135861, 135866, 135871, 135876, 0, 0, 0, 0, 135881, 135886, 135890, + 135894, 135898, 135902, 135906, 135910, 135914, 135918, 135922, 135926, + 135930, 135934, 135938, 135942, 135946, 135950, 135954, 135958, 135962, + 135966, 135970, 135974, 135978, 135982, 135986, 135990, 135994, 135998, + 136002, 136006, 136010, 136014, 136018, 136022, 136026, 136030, 136034, + 136038, 136042, 136046, 136050, 136054, 136058, 136062, 136066, 136070, + 136074, 136078, 136082, 136087, 136091, 136095, 136099, 136103, 136107, + 136111, 136115, 136119, 136123, 136127, 136131, 136135, 136139, 136143, + 136147, 136151, 136155, 136159, 136163, 136167, 136171, 136175, 136179, + 136183, 136187, 136191, 136195, 136199, 136203, 136207, 136211, 136215, + 136219, 136223, 136227, 136231, 136235, 136239, 136243, 136247, 136251, + 136255, 136259, 136263, 136267, 136271, 136275, 136279, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 136283, 136288, 136296, 136303, 136310, 136318, 136326, + 136334, 136342, 136350, 136358, 136366, 136374, 136382, 136390, 0, 0, + 136398, 136406, 136413, 136420, 136428, 136436, 136444, 136452, 136460, + 136468, 136476, 136484, 136492, 136500, 136508, 0, 136515, 136523, + 136530, 136537, 136545, 136553, 136561, 136569, 136577, 136585, 136593, + 136601, 136609, 136617, 136625, 0, 136631, 136639, 136646, 136653, + 136661, 136669, 136677, 136685, 136693, 136701, 136709, 136717, 136725, + 136733, 136741, 136747, 136752, 136757, 136762, 136767, 136772, 136777, + 136782, 136787, 136792, 136797, 136802, 136807, 136812, 136817, 136822, + 136827, 136832, 136837, 136842, 136847, 136852, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 136857, 136864, 136869, 136873, 136877, 136881, 136886, 136891, + 136896, 136901, 136906, 136911, 136918, 0, 0, 0, 136926, 136931, 136937, + 136943, 136949, 136954, 136960, 136966, 136972, 136977, 136983, 136989, + 136994, 137000, 137006, 137011, 137017, 137023, 137028, 137033, 137039, + 137044, 137050, 137056, 137062, 137068, 137074, 137084, 137091, 137097, + 137100, 0, 137103, 137108, 137114, 137120, 137126, 137131, 137137, + 137143, 137149, 137154, 137160, 137166, 137171, 137177, 137183, 137188, + 137194, 137200, 137205, 137210, 137216, 137221, 137227, 137233, 137239, + 137245, 137251, 137254, 137257, 137260, 137263, 137266, 137269, 137275, + 137282, 137289, 137296, 137302, 137309, 137316, 137323, 137329, 137336, + 137343, 137349, 137356, 137363, 137369, 137376, 137383, 137389, 137395, + 137402, 137408, 137415, 137422, 137429, 137436, 137443, 137448, 0, 0, 0, + 0, 137453, 137459, 137466, 137473, 137480, 137486, 137493, 137500, + 137507, 137513, 137520, 137527, 137533, 137540, 137547, 137553, 137560, + 137567, 137573, 137579, 137586, 137592, 137599, 137606, 137613, 137620, + 137627, 137636, 137640, 137643, 137647, 137651, 137655, 137658, 137661, + 137664, 137667, 137670, 137673, 137676, 137679, 137682, 137688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 110738, 110743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 137691, 137698, 137706, 137714, 137722, 137729, 137737, 137745, 137753, + 137760, 137768, 137776, 137783, 137791, 137799, 137806, 137814, 137822, + 137829, 137836, 137844, 137851, 137859, 137867, 137875, 137883, 137891, + 137895, 137899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137903, 137909, + 137915, 137921, 137925, 137931, 137937, 137943, 137949, 137955, 137961, + 137967, 137973, 137979, 137985, 137991, 137997, 138003, 138009, 138015, + 138021, 138027, 138033, 138039, 138045, 138051, 138057, 138063, 138069, + 138075, 138081, 138087, 138093, 138099, 138105, 138111, 138117, 138123, + 138129, 138135, 138141, 138147, 138153, 0, 0, 0, 0, 0, 138159, 138170, + 138181, 138192, 138203, 138214, 138225, 138236, 138247, 0, 0, 0, 0, 0, 0, + 0, 138258, 138262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110749, 110754, 110759, - 110764, 110771, 110778, 110785, 110792, 110797, 110802, 110807, 110812, - 110819, 110824, 110831, 110838, 110843, 110848, 110853, 110860, 110865, - 110870, 110877, 110884, 110889, 110894, 110899, 110906, 110913, 110920, - 110925, 110930, 110937, 110944, 110951, 110958, 110963, 110968, 110973, - 110980, 110985, 110990, 110995, 111002, 111011, 111018, 111023, 111028, - 111033, 111038, 111043, 111048, 111057, 111064, 111069, 111076, 111083, - 111088, 111093, 111098, 111105, 111110, 111117, 111124, 111129, 111134, - 111139, 111146, 111153, 111158, 111163, 111170, 111177, 111184, 111189, - 111194, 111199, 111204, 111211, 111220, 111229, 111234, 111241, 111250, - 111255, 111260, 111265, 111270, 111277, 111284, 111291, 111298, 111303, - 111308, 111313, 111320, 111327, 111334, 111339, 111344, 111351, 111356, - 111363, 111368, 111375, 111380, 111387, 111394, 111399, 111404, 111409, - 111414, 111419, 111424, 111429, 111434, 111439, 111446, 111453, 111460, - 111467, 111474, 111483, 111488, 111493, 111500, 111507, 111512, 111519, - 111526, 111533, 111540, 111547, 111554, 111559, 111564, 111569, 111574, - 111579, 111588, 111597, 111606, 111615, 111624, 111633, 111642, 111651, - 111656, 111667, 111678, 111687, 111692, 111697, 111702, 111707, 111716, - 111723, 111730, 111737, 111744, 111751, 111758, 111767, 111776, 111787, - 111796, 111807, 111816, 111823, 111832, 111843, 111852, 111861, 111870, - 111879, 111886, 111893, 111900, 111909, 111918, 111929, 111938, 111947, - 111958, 111963, 111968, 111979, 111987, 111996, 112005, 112014, 112025, - 112034, 112043, 112054, 112065, 112076, 112087, 112098, 112109, 112116, - 112123, 112130, 112137, 112148, 112157, 112164, 112171, 112178, 112189, - 112200, 112211, 112222, 112233, 112244, 112255, 112266, 112273, 112280, - 112289, 112298, 112305, 112312, 112319, 112328, 112337, 112346, 112353, - 112362, 112371, 112380, 112387, 112394, 112399, 112405, 112412, 112419, - 112426, 112433, 112440, 112447, 112456, 112465, 112474, 112483, 112490, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112499, 112505, 112510, 112515, 112522, - 112528, 112534, 112540, 112546, 112552, 112558, 112564, 112568, 112572, - 112578, 112584, 112590, 112594, 112599, 112604, 112608, 112612, 112615, - 112621, 112627, 112633, 112639, 112645, 112651, 112657, 112663, 112669, - 112679, 112689, 112695, 112701, 112711, 112721, 112727, 0, 0, 112733, - 112741, 112746, 112751, 112757, 112763, 112769, 112775, 112781, 112787, - 112794, 112801, 112807, 112813, 112819, 112825, 112831, 112837, 112843, - 112849, 112854, 112860, 112866, 112872, 112878, 112884, 112893, 112899, - 112904, 112912, 112919, 112926, 112935, 112944, 112953, 112962, 112971, - 112980, 112989, 112998, 113008, 113018, 113026, 113034, 113043, 113052, - 113058, 113064, 113070, 113076, 113084, 113092, 113096, 113102, 113107, - 113113, 113119, 113125, 113131, 113137, 113146, 113151, 113158, 113163, - 113168, 113173, 113179, 113185, 113191, 113198, 113203, 113208, 113213, - 113218, 113223, 113229, 113235, 113241, 113247, 113253, 113259, 113265, - 113271, 113276, 113281, 113286, 113291, 113296, 113301, 113306, 113311, - 113317, 113323, 113328, 113333, 113338, 113343, 113348, 113354, 113361, - 113365, 113369, 113373, 113377, 113381, 113385, 113389, 113393, 113401, - 113411, 113415, 113419, 113425, 113431, 113437, 113443, 113449, 113455, - 113461, 113467, 113473, 113479, 113485, 113491, 113497, 113503, 113507, - 113511, 113518, 113524, 113530, 113536, 113541, 113548, 113553, 113559, - 113565, 113571, 113577, 113582, 113586, 113592, 113596, 113600, 113604, - 113610, 113616, 113620, 113626, 113632, 113638, 113644, 113650, 113658, - 113666, 113672, 113678, 113684, 113690, 113702, 113714, 113728, 113740, - 113752, 113766, 113780, 113794, 113798, 113806, 113814, 113819, 113823, - 113827, 113831, 113835, 113839, 113843, 113847, 113853, 113859, 113865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113871, 113877, 113883, 113889, 113895, - 113901, 113907, 113913, 113919, 113925, 113931, 113937, 113943, 113949, - 113955, 113961, 113967, 113973, 113979, 113985, 113991, 113997, 114003, - 114009, 114015, 114021, 114027, 114033, 114039, 114045, 114051, 114057, - 114063, 114069, 114075, 114081, 114087, 114093, 114099, 114105, 114111, - 114117, 114123, 114129, 114135, 114141, 114147, 114153, 114159, 114165, - 114171, 114177, 114183, 114189, 114195, 114201, 114207, 114213, 114219, - 114225, 114231, 114237, 114243, 114249, 114255, 114261, 114267, 114272, - 114277, 114282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114286, 114291, 114298, - 114305, 114312, 114319, 114324, 114328, 114334, 114338, 114342, 114348, - 114352, 114356, 114360, 114366, 114373, 114377, 114381, 114385, 114389, - 114393, 114397, 114403, 114407, 114411, 114415, 114419, 114423, 114427, - 114431, 114435, 114439, 114443, 114447, 114451, 114456, 114460, 114464, - 114468, 114472, 114476, 114480, 114484, 114488, 114492, 114499, 114503, - 114511, 114515, 114519, 114523, 114527, 114531, 114535, 114539, 114546, - 114550, 114554, 114558, 114562, 114566, 114572, 114576, 114582, 114586, - 114590, 114594, 114598, 114602, 114606, 114610, 114614, 114618, 114622, - 114626, 114630, 114634, 114638, 114642, 114646, 114650, 114654, 114658, - 114666, 114670, 114674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114678, 114686, - 114694, 114702, 114710, 114718, 114726, 114734, 114742, 114750, 114758, - 114766, 114774, 114782, 114790, 114798, 114806, 114814, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 114822, 114826, 114831, 114836, 114841, 114845, - 114850, 114855, 114860, 114864, 114869, 114874, 114878, 114882, 114887, - 114891, 114896, 114901, 114905, 114910, 114915, 114919, 114924, 114929, - 114934, 114939, 114944, 114948, 114953, 114958, 114963, 114967, 114972, - 114977, 114982, 114986, 114991, 114996, 115000, 115004, 115009, 115013, - 115018, 115023, 115027, 115032, 115037, 115041, 115046, 115051, 115056, - 115061, 115066, 115070, 115075, 115080, 115085, 115089, 115094, 115099, - 115104, 115108, 115113, 115118, 115122, 115126, 115131, 115135, 115140, - 115145, 115149, 115154, 115159, 115163, 115168, 115173, 115178, 115183, - 115188, 115192, 115197, 115202, 115207, 115211, 115216, 0, 115221, - 115225, 115230, 115235, 115239, 115243, 115248, 115252, 115257, 115262, - 115266, 115271, 115276, 115280, 115285, 115290, 115295, 115300, 115305, - 115310, 115316, 115322, 115328, 115333, 115339, 115345, 115351, 115356, - 115362, 115368, 115373, 115378, 115384, 115389, 115395, 115401, 115406, - 115412, 115418, 115423, 115429, 115435, 115441, 115447, 115453, 115458, - 115464, 115470, 115476, 115481, 115487, 115493, 115499, 115504, 115510, - 115516, 115521, 115526, 115532, 115537, 115543, 115549, 115554, 115560, - 115566, 115571, 115577, 115583, 115589, 115595, 115601, 0, 115605, - 115610, 0, 0, 115615, 0, 0, 115620, 115625, 0, 0, 115630, 115635, 115639, - 115644, 0, 115649, 115654, 115659, 115663, 115668, 115673, 115678, - 115683, 115688, 115692, 115697, 115702, 0, 115707, 0, 115712, 115717, - 115721, 115726, 115731, 115735, 115739, 0, 115744, 115749, 115754, - 115758, 115763, 115768, 115772, 115777, 115782, 115787, 115792, 115797, - 115802, 115808, 115814, 115820, 115825, 115831, 115837, 115843, 115848, - 115854, 115860, 115865, 115870, 115876, 115881, 115887, 115893, 115898, - 115904, 115910, 115915, 115921, 115927, 115933, 115939, 115945, 115950, - 115956, 115962, 115968, 115973, 115979, 115985, 115991, 115996, 116002, - 116008, 116013, 116018, 116024, 116029, 116035, 116041, 116046, 116052, - 116058, 116063, 116069, 116075, 116081, 116087, 116093, 116097, 0, - 116102, 116107, 116111, 116116, 0, 0, 116121, 116126, 116131, 116135, - 116139, 116144, 116148, 116153, 0, 116158, 116163, 116168, 116172, - 116177, 116182, 116187, 0, 116192, 116196, 116201, 116206, 116211, - 116215, 116220, 116225, 116230, 116234, 116239, 116244, 116248, 116252, - 116257, 116261, 116266, 116271, 116275, 116280, 116285, 116289, 116294, - 116299, 116304, 116309, 116314, 116318, 0, 116323, 116328, 116332, - 116337, 0, 116342, 116346, 116351, 116356, 116360, 0, 116364, 0, 0, 0, - 116368, 116373, 116378, 116382, 116387, 116392, 116397, 0, 116402, - 116406, 116411, 116416, 116421, 116425, 116430, 116435, 116440, 116444, - 116449, 116454, 116458, 116462, 116467, 116471, 116476, 116481, 116485, - 116490, 116495, 116499, 116504, 116509, 116514, 116519, 116524, 116529, - 116535, 116541, 116547, 116552, 116558, 116564, 116570, 116575, 116581, - 116587, 116592, 116597, 116603, 116608, 116614, 116620, 116625, 116631, - 116637, 116642, 116648, 116654, 116660, 116666, 116672, 116677, 116683, - 116689, 116695, 116700, 116706, 116712, 116718, 116723, 116729, 116735, - 116740, 116745, 116751, 116756, 116762, 116768, 116773, 116779, 116785, - 116790, 116796, 116802, 116808, 116814, 116820, 116824, 116829, 116834, - 116839, 116843, 116848, 116853, 116858, 116862, 116867, 116872, 116876, - 116880, 116885, 116889, 116894, 116899, 116903, 116908, 116913, 116917, - 116922, 116927, 116932, 116937, 116942, 116946, 116951, 116956, 116961, - 116965, 116970, 116975, 116980, 116984, 116989, 116994, 116998, 117002, - 117007, 117011, 117016, 117021, 117025, 117030, 117035, 117039, 117044, - 117049, 117054, 117059, 117064, 117069, 117075, 117081, 117087, 117092, - 117098, 117104, 117110, 117115, 117121, 117127, 117132, 117137, 117143, - 117148, 117154, 117160, 117165, 117171, 117177, 117182, 117188, 117194, - 117200, 117206, 117212, 117217, 117223, 117229, 117235, 117240, 117246, - 117252, 117258, 117263, 117269, 117275, 117280, 117285, 117291, 117296, - 117302, 117308, 117313, 117319, 117325, 117330, 117336, 117342, 117348, - 117354, 117360, 117365, 117371, 117377, 117383, 117388, 117394, 117400, - 117406, 117411, 117417, 117423, 117428, 117433, 117439, 117444, 117450, - 117456, 117461, 117467, 117473, 117478, 117484, 117490, 117496, 117502, - 117508, 117513, 117519, 117525, 117531, 117536, 117542, 117548, 117554, - 117559, 117565, 117571, 117576, 117581, 117587, 117592, 117598, 117604, - 117609, 117615, 117621, 117626, 117632, 117638, 117644, 117650, 117656, - 117662, 117669, 117676, 117683, 117689, 117696, 117703, 117710, 117716, - 117723, 117730, 117736, 117742, 117749, 117755, 117762, 117769, 117775, - 117782, 117789, 117795, 117802, 117809, 117816, 117823, 117830, 117836, - 117843, 117850, 117857, 117863, 117870, 117877, 117884, 117890, 117897, - 117904, 117910, 117916, 117923, 117929, 117936, 117943, 117949, 117956, - 117963, 117969, 117976, 117983, 117990, 117997, 118004, 118009, 118015, - 118021, 118027, 118032, 118038, 118044, 118050, 118055, 118061, 118067, - 118072, 118077, 118083, 118088, 118094, 118100, 118105, 118111, 118117, - 118122, 118128, 118134, 118140, 118146, 118152, 118157, 118163, 118169, - 118175, 118180, 118186, 118192, 118198, 118203, 118209, 118215, 118220, - 118225, 118231, 118236, 118242, 118248, 118253, 118259, 118265, 118270, - 118276, 118282, 118288, 118294, 118300, 118306, 0, 0, 118313, 118318, - 118323, 118328, 118333, 118338, 118343, 118348, 118353, 118358, 118363, - 118368, 118373, 118378, 118383, 118388, 118393, 118398, 118404, 118409, - 118414, 118419, 118424, 118429, 118434, 118439, 118443, 118448, 118453, - 118458, 118463, 118468, 118473, 118478, 118483, 118488, 118493, 118498, - 118503, 118508, 118513, 118518, 118523, 118528, 118534, 118539, 118544, - 118549, 118554, 118559, 118564, 118569, 118575, 118580, 118585, 118590, - 118595, 118600, 118605, 118610, 118615, 118620, 118625, 118630, 118635, - 118640, 118645, 118650, 118655, 118660, 118665, 118670, 118675, 118680, - 118685, 118690, 118696, 118701, 118706, 118711, 118716, 118721, 118726, - 118731, 118735, 118740, 118745, 118750, 118755, 118760, 118765, 118770, - 118775, 118780, 118785, 118790, 118795, 118800, 118805, 118810, 118815, - 118820, 118826, 118831, 118836, 118841, 118846, 118851, 118856, 118861, - 118867, 118872, 118877, 118882, 118887, 118892, 118897, 118903, 118909, - 118915, 118921, 118927, 118933, 118939, 118945, 118951, 118957, 118963, - 118969, 118975, 118981, 118987, 118993, 118999, 119006, 119012, 119018, - 119024, 119030, 119036, 119042, 119048, 119053, 119059, 119065, 119071, - 119077, 119083, 119089, 119095, 119101, 119107, 119113, 119119, 119125, - 119131, 119137, 119143, 119149, 119155, 119162, 119168, 119174, 119180, - 119186, 119192, 119198, 119204, 119211, 119217, 119223, 119229, 119235, - 119241, 119247, 119253, 119259, 119265, 119271, 119277, 119283, 119289, - 119295, 119301, 119307, 119313, 119319, 119325, 119331, 119337, 119343, - 119349, 119356, 119362, 119368, 119374, 119380, 119386, 119392, 119398, - 119403, 119409, 119415, 119421, 119427, 119433, 119439, 119445, 119451, - 119457, 119463, 119469, 119475, 119481, 119487, 119493, 119499, 119505, - 119512, 119518, 119524, 119530, 119536, 119542, 119548, 119554, 119561, - 119567, 119573, 119579, 119585, 119591, 119597, 119604, 119611, 119618, - 119625, 119632, 119639, 119646, 119653, 119660, 119667, 119674, 119681, - 119688, 119695, 119702, 119709, 119716, 119724, 119731, 119738, 119745, - 119752, 119759, 119766, 119773, 119779, 119786, 119793, 119800, 119807, - 119814, 119821, 119828, 119835, 119842, 119849, 119856, 119863, 119870, - 119877, 119884, 119891, 119898, 119906, 119913, 119920, 119927, 119934, - 119941, 119948, 119955, 119963, 119970, 119977, 119984, 119991, 119998, - 120005, 120010, 0, 0, 120015, 120020, 120024, 120028, 120032, 120036, - 120040, 120044, 120048, 120052, 120056, 120061, 120065, 120069, 120073, - 120077, 120081, 120085, 120089, 120093, 120097, 120102, 120106, 120110, - 120114, 120118, 120122, 120126, 120130, 120134, 120138, 120144, 120149, - 120154, 120159, 120164, 120169, 120174, 120179, 120184, 120189, 120195, - 120200, 120205, 120210, 120215, 120220, 120225, 120230, 120235, 120240, - 120244, 120248, 120252, 0, 120256, 120260, 120264, 120268, 120272, - 120276, 120280, 120284, 120288, 120292, 120296, 120300, 120304, 120308, - 120312, 120316, 120320, 120324, 120328, 120332, 120336, 120340, 120344, - 120348, 120354, 120360, 120366, 0, 120372, 120377, 0, 120382, 0, 0, - 120387, 0, 120392, 120397, 120402, 120407, 120412, 120417, 120422, - 120427, 120432, 120437, 0, 120442, 120447, 120452, 120457, 0, 120462, 0, - 120467, 0, 0, 0, 0, 0, 0, 120472, 0, 0, 0, 0, 120478, 0, 120484, 0, - 120490, 0, 120496, 120502, 120508, 0, 120514, 120520, 0, 120526, 0, 0, - 120532, 0, 120538, 0, 120544, 0, 120550, 0, 120558, 0, 120566, 120572, 0, - 120578, 0, 0, 120584, 120590, 120596, 120602, 0, 120608, 120614, 120620, - 120626, 120632, 120638, 120644, 0, 120650, 120656, 120662, 120668, 0, - 120674, 120680, 120686, 120692, 0, 120700, 0, 120708, 120714, 120720, - 120726, 120732, 120738, 120744, 120750, 120756, 120762, 0, 120768, - 120774, 120780, 120786, 120792, 120798, 120804, 120810, 120816, 120822, - 120828, 120834, 120840, 120846, 120852, 120858, 120864, 0, 0, 0, 0, 0, - 120870, 120875, 120880, 0, 120885, 120890, 120895, 120900, 120905, 0, - 120910, 120915, 120920, 120925, 120930, 120935, 120940, 120945, 120950, - 120955, 120960, 120965, 120970, 120975, 120980, 120985, 120990, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138266, 138268, 138270, 138274, + 138279, 138284, 138286, 138292, 138297, 138299, 138305, 138309, 138311, + 138315, 138321, 138327, 138333, 138338, 138342, 138349, 138356, 138363, + 138368, 138375, 138382, 138389, 138393, 138399, 138408, 138417, 138424, + 138429, 138433, 138437, 138439, 138442, 138445, 138452, 138459, 138469, + 138474, 138479, 138484, 138489, 138491, 0, 0, 0, 138497, 138499, 138501, + 138505, 138509, 138513, 138515, 138519, 138521, 138525, 138527, 138529, + 138531, 138533, 138538, 138543, 138545, 138551, 138555, 138559, 138567, + 138569, 138571, 138573, 138575, 138577, 138579, 138581, 138583, 138585, + 138587, 138591, 138595, 138597, 138599, 138601, 138603, 138605, 138610, + 138616, 138620, 138624, 138628, 138632, 138637, 138641, 138643, 138645, + 138649, 138655, 138657, 138659, 138661, 138665, 138674, 138680, 138684, + 138688, 138690, 138692, 138695, 138697, 138699, 138701, 138705, 138707, + 138711, 138716, 138718, 138723, 138729, 138736, 138740, 138744, 138748, + 138752, 138758, 138762, 0, 0, 138770, 138772, 138776, 138780, 138782, + 138786, 138790, 138792, 138796, 138798, 138802, 138806, 138810, 138814, + 138818, 138822, 138826, 138830, 138836, 138840, 138844, 138855, 138860, + 138864, 138868, 138874, 138878, 138882, 138886, 138893, 138900, 138904, + 138908, 138912, 138916, 138920, 138927, 138929, 138933, 138935, 138937, + 138941, 138945, 138949, 138951, 138955, 138959, 138963, 138967, 138971, + 138973, 138977, 138979, 138985, 138988, 138993, 138995, 138997, 139000, + 139002, 139004, 139007, 139014, 139021, 139028, 139033, 139037, 139039, + 139041, 139043, 139047, 139049, 139053, 139057, 139061, 139063, 139067, + 139069, 139073, 0, 0, 0, 0, 0, 139077, 139083, 139085, 139090, 139094, + 139098, 139100, 139106, 139110, 139112, 139116, 139120, 139122, 139126, + 139131, 139135, 139141, 139147, 139149, 139151, 139157, 139159, 139163, + 139167, 139169, 139173, 139175, 139179, 139183, 139187, 139190, 139193, + 139198, 139203, 139205, 139208, 0, 0, 0, 0, 0, 0, 0, 0, 139210, 139212, + 139214, 139216, 139220, 139222, 139224, 139226, 139228, 139230, 139232, + 139234, 139236, 139238, 139240, 139242, 139244, 139246, 139248, 139250, + 139252, 139254, 139256, 139258, 139260, 139262, 139264, 139268, 139270, + 139272, 139274, 139278, 139280, 139284, 139286, 139288, 139292, 139296, + 139302, 139304, 139306, 139308, 139310, 139314, 139318, 139320, 139324, + 139328, 139332, 139336, 139340, 139344, 139348, 139352, 139356, 139360, + 139364, 139368, 139372, 139376, 139380, 139384, 139388, 139392, 139394, + 139396, 139398, 139400, 139402, 139404, 139406, 139414, 139422, 139430, + 139438, 139443, 139448, 139453, 139457, 139461, 139466, 139471, 139473, + 139477, 139479, 139481, 139483, 139485, 139487, 139489, 139491, 139495, + 139497, 139499, 139501, 139505, 139509, 139513, 139517, 139521, 139523, + 139529, 139535, 139537, 139539, 139541, 139543, 139545, 139554, 139561, + 139568, 139572, 139579, 139584, 139591, 139600, 139605, 139609, 139613, + 139615, 139619, 139621, 139625, 139629, 139631, 139635, 139639, 139643, + 139645, 139647, 139653, 139655, 139657, 139659, 139663, 139667, 139669, + 139673, 139675, 139677, 139680, 139684, 139686, 139690, 139692, 139694, + 139699, 139701, 139705, 139709, 139712, 139716, 139720, 139724, 139728, + 139732, 139736, 139740, 139745, 139749, 139753, 139762, 139767, 139770, + 139772, 139775, 139778, 139783, 139785, 139788, 139793, 139797, 139800, + 139804, 139808, 139811, 139816, 139820, 139824, 139828, 139832, 139838, + 139844, 139850, 139856, 139861, 139871, 139873, 139877, 139879, 139881, + 139885, 139889, 139891, 139895, 139901, 139906, 139912, 139914, 139918, + 139921, 139927, 139933, 139937, 139939, 139941, 139945, 139947, 139951, + 139955, 139959, 139961, 139963, 139970, 139974, 139978, 139982, 139986, + 139990, 139992, 139996, 139998, 140000, 140004, 140006, 140010, 140014, + 140020, 140024, 140028, 140032, 140034, 140037, 140041, 140047, 140056, + 140065, 140074, 140083, 140085, 140089, 140091, 140095, 140106, 140110, + 140116, 140122, 140127, 140129, 140134, 140138, 140140, 140142, 140144, + 140148, 0, 140152, 140157, 140168, 140184, 140195, 140206, 140210, + 140214, 140220, 140222, 140230, 140238, 140240, 140244, 140250, 140256, + 140263, 140270, 140272, 140274, 140278, 140280, 140286, 140288, 140291, + 140295, 140301, 140307, 140318, 140324, 140330, 140338, 140342, 140350, + 140358, 140364, 140370, 140377, 140379, 140383, 140385, 140387, 140392, + 140394, 140396, 140398, 140400, 140404, 140415, 140421, 140425, 140429, + 140433, 140439, 140445, 140451, 140457, 140462, 140467, 140473, 140479, + 140486, 140493, 140501, 140509, 140514, 140522, 140526, 140535, 140544, + 140550, 140554, 140558, 140562, 140565, 0, 0, 0, 0, 0, 140570, 140577, + 140584, 140591, 140599, 140607, 140615, 140623, 140631, 140639, 140647, + 140655, 140663, 140669, 140675, 140681, 140687, 140693, 140699, 140705, + 140711, 140717, 140723, 140729, 140735, 140738, 140747, 140756, 140758, + 140765, 140769, 140771, 140773, 140777, 140783, 140787, 140789, 140799, + 140805, 140809, 140811, 140815, 0, 140817, 140824, 140831, 140838, + 140843, 140848, 140857, 140863, 140868, 140872, 140877, 140881, 140888, + 140892, 140895, 140900, 140907, 140914, 140919, 140924, 140929, 140935, + 140944, 140955, 140961, 140967, 140973, 140984, 141000, 141009, 141017, + 141025, 141033, 141041, 141049, 141057, 141065, 141073, 141081, 141089, + 141097, 0, 141105, 141109, 141114, 141119, 141121, 141125, 141134, + 141143, 141151, 141155, 141159, 141164, 141169, 141174, 141176, 141181, + 141185, 141187, 141191, 141195, 141201, 141206, 141214, 141219, 141224, + 141229, 141236, 141239, 141241, 141245, 141250, 141255, 141259, 141263, + 141269, 141275, 141277, 141281, 141285, 141289, 141293, 141297, 141299, + 141301, 141303, 141305, 141311, 141317, 141321, 141323, 141325, 141327, + 141336, 141340, 141347, 141354, 141356, 141359, 141363, 141369, 141373, + 141377, 141379, 141387, 141391, 141395, 141400, 141405, 141410, 141415, + 141420, 141425, 141430, 141435, 141440, 141445, 141449, 141455, 141459, + 141465, 141470, 141477, 141483, 141491, 141495, 141502, 141506, 141510, + 141514, 141519, 141524, 141526, 141530, 141539, 141547, 141556, 141570, + 141584, 141598, 141605, 141612, 141616, 141625, 141633, 141637, 141646, + 141653, 141657, 141661, 141665, 141669, 141676, 141680, 141684, 141688, + 141692, 141699, 141708, 141717, 141724, 141736, 141748, 141752, 141756, + 141760, 141764, 141768, 141772, 141780, 141788, 141797, 141801, 141805, + 141809, 141813, 141817, 141821, 141827, 141834, 141838, 141850, 141858, + 141862, 141866, 141870, 141874, 141880, 141887, 141898, 141908, 141919, + 141930, 141939, 141950, 141956, 141962, 141968, 141974, 0, 0, 141980, + 141989, 141996, 142002, 142006, 142010, 142014, 142023, 142035, 142039, + 142046, 142053, 142060, 142067, 142074, 142081, 142089, 142097, 142105, + 142113, 142122, 142131, 142140, 142149, 142159, 142169, 142179, 142189, + 142196, 142203, 142210, 142217, 142225, 142233, 142241, 142249, 142256, + 142268, 142275, 142287, 142290, 142293, 142296, 142299, 142305, 142312, + 142319, 142327, 142332, 142338, 142349, 142359, 142370, 142375, 142380, + 142386, 142391, 142398, 142402, 142408, 142410, 142412, 142416, 142420, + 142424, 142433, 142435, 142437, 142440, 142442, 142444, 142448, 142450, + 142454, 142456, 142460, 142462, 142464, 142468, 142472, 142478, 142480, + 142484, 142486, 142490, 142494, 142498, 142502, 142504, 142506, 142510, + 142514, 142518, 142522, 142524, 142526, 142528, 142533, 142538, 142541, + 142549, 142557, 142559, 142564, 142567, 142572, 142583, 142590, 142595, + 142600, 142602, 142606, 142608, 142612, 142614, 142618, 142622, 142625, + 142628, 142630, 142633, 142635, 142639, 142641, 142643, 142645, 142649, + 142651, 142655, 142658, 142665, 142668, 142673, 142676, 142679, 142684, + 142688, 142692, 142696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 142698, 142703, 142705, 142709, 142711, 142715, 142719, 142725, 142729, + 142734, 142737, 142741, 142745, 0, 0, 0, 142749, 142751, 142757, 142761, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142765, 142770, 142775, 142780, + 142785, 142790, 142795, 142802, 142809, 142816, 142823, 142828, 142833, + 142838, 142843, 142850, 142856, 142863, 142870, 142877, 142882, 142887, + 142892, 142897, 142902, 142909, 142916, 142921, 142926, 142933, 142940, + 142948, 142956, 142963, 142970, 142978, 142986, 142994, 143001, 143011, + 143022, 143027, 143034, 143041, 143048, 143056, 143064, 143075, 143083, + 143091, 143099, 143104, 143109, 143114, 143119, 143124, 143129, 143134, + 143139, 143144, 143149, 143154, 143159, 143166, 143171, 143176, 143183, + 143188, 143193, 143198, 143203, 143208, 143213, 143218, 143223, 143228, + 143233, 143238, 143243, 143250, 143258, 143263, 143268, 143275, 143280, + 143285, 143290, 143297, 143302, 143309, 143314, 143321, 143326, 143335, + 143344, 143349, 143354, 143359, 143364, 143369, 143374, 143379, 143384, + 143389, 143394, 143399, 143404, 143409, 143417, 143425, 143430, 143435, + 143440, 143445, 143450, 143456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 143462, 143470, 143478, 143486, 143494, 143500, 143506, 143510, 143514, + 143520, 143526, 143535, 143539, 143544, 143550, 143554, 143559, 143563, + 143567, 143573, 143579, 143589, 143598, 143601, 143606, 143612, 143618, + 143629, 143639, 143643, 143648, 143654, 143660, 143669, 143674, 143678, + 143683, 143687, 143693, 143699, 143705, 143709, 143712, 143716, 143719, + 143722, 143727, 143732, 143739, 143747, 143754, 143761, 143770, 143779, + 143786, 143794, 143801, 143808, 143817, 143826, 143833, 143841, 143848, + 143855, 143864, 143871, 143879, 143885, 143894, 143902, 143911, 143918, + 143928, 143939, 143947, 143955, 143964, 143972, 143980, 143989, 143997, + 144007, 144016, 144024, 144032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 144041, 144049, 144057, 144065, 144073, 144082, 144091, + 144100, 144109, 144118, 144127, 144136, 0, 0, 0, 0, 144145, 144153, + 144161, 144169, 144177, 144184, 144191, 144198, 144205, 144213, 144221, + 144229, 144237, 144247, 144257, 144267, 144277, 144286, 144295, 144304, + 144313, 144322, 144331, 144340, 144349, 144357, 144365, 144373, 144381, + 144389, 144397, 144405, 144413, 144423, 144433, 144443, 144453, 144457, + 144461, 144465, 144469, 144472, 144475, 144478, 144481, 144485, 144489, + 144493, 144497, 144502, 144507, 144512, 144517, 144520, 144523, 144526, + 0, 0, 0, 0, 0, 0, 0, 0, 144529, 144532, 144535, 144538, 144541, 144546, + 144551, 144556, 144561, 144565, 0, 0, 0, 0, 0, 0, 144569, 144575, 144581, + 144587, 144593, 144601, 144609, 144617, 144625, 144630, 144635, 144640, + 144645, 144652, 144659, 144666, 144673, 144680, 144687, 144694, 144701, + 144710, 144719, 144728, 144737, 144743, 144749, 144755, 144761, 144769, + 144777, 144785, 144793, 144801, 144809, 144817, 144825, 144835, 144845, + 144855, 0, 0, 0, 0, 0, 0, 0, 0, 144865, 144870, 144875, 144880, 144885, + 144894, 144903, 144912, 144921, 144928, 144935, 144942, 144949, 144956, + 144965, 144974, 144983, 144988, 144995, 145002, 145009, 145014, 145019, + 145024, 145029, 145036, 145043, 145050, 145057, 145064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 120995, 121005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121013, - 121020, 121027, 121034, 121041, 121048, 121055, 121061, 121068, 121075, - 121082, 121090, 121098, 121106, 121114, 121122, 121130, 121137, 121144, - 121151, 121159, 121167, 121175, 121183, 121191, 121199, 121206, 121213, - 121220, 121228, 121236, 121244, 121252, 121260, 121268, 121273, 121278, - 121283, 121288, 121293, 121298, 121303, 121308, 121313, 0, 0, 0, 0, - 121318, 121323, 121327, 121331, 121335, 121339, 121343, 121347, 121351, - 121355, 121359, 121363, 121367, 121371, 121375, 121379, 121383, 121387, - 121391, 121395, 121399, 121403, 121407, 121411, 121415, 121419, 121423, - 121427, 121431, 121435, 121439, 121443, 121447, 121451, 121455, 121459, - 121463, 121467, 121471, 121475, 121479, 121483, 121487, 121491, 121495, - 121499, 121503, 121507, 121511, 121515, 121519, 121524, 121528, 121532, - 121536, 121540, 121544, 121548, 121552, 121556, 121560, 121564, 121568, - 121572, 121576, 121580, 121584, 121588, 121592, 121596, 121600, 121604, - 121608, 121612, 121616, 121620, 121624, 121628, 121632, 121636, 121640, - 121644, 121648, 121652, 121656, 121660, 121664, 121668, 121672, 121676, - 121680, 121684, 121688, 121692, 121696, 121700, 121704, 121708, 121712, - 121716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121720, 121726, 121735, - 121743, 121751, 121760, 121769, 121778, 121787, 121796, 121805, 121814, - 121823, 121832, 121841, 0, 0, 121850, 121859, 121867, 121875, 121884, - 121893, 121902, 121911, 121920, 121929, 121938, 121947, 121956, 121965, - 0, 0, 121974, 121983, 121991, 121999, 122008, 122017, 122026, 122035, - 122044, 122053, 122062, 122071, 122080, 122089, 122098, 0, 122105, - 122114, 122122, 122130, 122139, 122148, 122157, 122166, 122175, 122184, - 122193, 122202, 122211, 122220, 122229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122236, - 122243, 122248, 122252, 122256, 122260, 122265, 122270, 122275, 122280, - 122285, 0, 0, 0, 0, 0, 122290, 122295, 122301, 122307, 122313, 122318, - 122324, 122330, 122336, 122341, 122347, 122353, 122358, 122363, 122369, - 122374, 122380, 122386, 122391, 122397, 122403, 122408, 122414, 122420, - 122426, 122432, 122438, 122449, 122456, 122462, 122465, 0, 122468, - 122473, 122479, 122485, 122491, 122496, 122502, 122508, 122514, 122519, - 122525, 122531, 122536, 122541, 122547, 122552, 122558, 122564, 122569, - 122575, 122581, 122586, 122592, 122598, 122604, 122610, 122616, 122619, - 122622, 122625, 122628, 122631, 122634, 122640, 122647, 122654, 122661, - 122667, 122674, 122681, 122688, 122694, 122701, 122708, 122714, 122720, - 122727, 122733, 122740, 122747, 122753, 122760, 122767, 122773, 122780, - 122787, 122794, 122801, 122808, 122813, 0, 0, 0, 0, 122818, 122824, - 122831, 122838, 122845, 122851, 122858, 122865, 122872, 122878, 122885, - 122892, 122898, 122904, 122911, 122917, 122924, 122931, 122937, 122944, - 122951, 122957, 122964, 122971, 122978, 122985, 122992, 123001, 123005, - 123008, 123011, 123015, 123019, 123022, 123025, 123028, 123031, 123034, - 123037, 123040, 123043, 123046, 123052, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123055, 123062, 123070, - 123078, 123086, 123093, 123101, 123109, 123117, 123124, 123132, 123140, - 123147, 123154, 123162, 123169, 123177, 123185, 123192, 123200, 123208, - 123215, 123223, 123231, 123239, 123247, 123255, 123259, 123263, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123266, 123272, 123278, 123284, 123288, - 123294, 123300, 123306, 123312, 123318, 123324, 123330, 123336, 123342, - 123348, 123354, 123360, 123366, 123372, 123378, 123384, 123390, 123396, - 123402, 123408, 123414, 123420, 123426, 123432, 123438, 123444, 123450, - 123456, 123462, 123468, 123474, 123480, 123486, 123492, 123498, 123504, - 123510, 123516, 0, 0, 0, 0, 0, 123522, 123533, 123544, 123555, 123566, - 123577, 123588, 123599, 123610, 0, 0, 0, 0, 0, 0, 0, 123621, 123625, 0, + 0, 0, 0, 0, 145073, 145077, 145081, 145085, 145089, 145093, 145097, + 145101, 145105, 145109, 145113, 145117, 145121, 145125, 145129, 145133, + 145137, 145141, 145145, 145149, 145153, 145157, 145161, 145165, 145169, + 145173, 145177, 145181, 145185, 145189, 145193, 145197, 145201, 145205, + 145209, 145213, 145217, 145221, 145225, 145229, 145233, 145237, 145241, + 145245, 145249, 145253, 145257, 145261, 145265, 145269, 145273, 145277, + 145281, 145285, 145289, 145293, 145297, 145301, 145305, 145309, 145313, + 145317, 145321, 145325, 145329, 145333, 145337, 145341, 145345, 145349, + 145353, 145357, 145361, 145365, 145369, 145373, 145377, 145381, 145385, + 145389, 145393, 145397, 145401, 145405, 145409, 145413, 145417, 145421, + 145425, 145429, 145433, 145437, 145441, 145445, 145449, 145453, 145457, + 145461, 145465, 145469, 145473, 145477, 145481, 145485, 145489, 145493, + 145497, 145501, 145505, 145509, 145513, 145517, 145521, 145525, 145529, + 145533, 145537, 145541, 145545, 145549, 145553, 145557, 145561, 145565, + 145569, 145573, 145577, 145581, 145585, 145589, 145593, 145597, 145601, + 145605, 145609, 145613, 145617, 145621, 145625, 145629, 145633, 145637, + 145641, 145645, 145649, 145653, 145657, 145661, 145665, 145669, 145673, + 145677, 145681, 145685, 145689, 145693, 145697, 145701, 145705, 145709, + 145713, 145717, 145721, 145725, 145729, 145733, 145737, 145741, 145745, + 145749, 145753, 145757, 145761, 145765, 145769, 145773, 145777, 145781, + 145785, 145789, 145793, 145797, 145801, 145805, 145809, 145813, 145817, + 145821, 145825, 145829, 145833, 145837, 145841, 145845, 145849, 145853, + 145857, 145861, 145865, 145869, 145873, 145877, 145881, 145885, 145889, + 145893, 145897, 145901, 145905, 145909, 145913, 145917, 145921, 145925, + 145929, 145933, 145937, 145941, 145945, 145949, 145953, 145957, 145961, + 145965, 145969, 145973, 145977, 145981, 145985, 145989, 145993, 145997, + 146001, 146005, 146009, 146013, 146017, 146021, 146025, 146029, 146033, + 146037, 146041, 146045, 146049, 146053, 146057, 146061, 146065, 146069, + 146073, 146077, 146081, 146085, 146089, 146093, 146097, 146101, 146105, + 146109, 146113, 146117, 146121, 146125, 146129, 146133, 146137, 146141, + 146145, 146149, 146153, 146157, 146161, 146165, 146169, 146173, 146177, + 146181, 146185, 146189, 146193, 146197, 146201, 146205, 146209, 146213, + 146217, 146221, 146225, 146229, 146233, 146237, 146241, 146245, 146249, + 146253, 146257, 146261, 146265, 146269, 146273, 146277, 146281, 146285, + 146289, 146293, 146297, 146301, 146305, 146309, 146313, 146317, 146321, + 146325, 146329, 146333, 146337, 146341, 146345, 146349, 146353, 146357, + 146361, 146365, 146369, 146373, 146377, 146381, 146385, 146389, 146393, + 146397, 146401, 146405, 146409, 146413, 146417, 146421, 146425, 146429, + 146433, 146437, 146441, 146445, 146449, 146453, 146457, 146461, 146465, + 146469, 146473, 146477, 146481, 146485, 146489, 146493, 146497, 146501, + 146505, 146509, 146513, 146517, 146521, 146525, 146529, 146533, 146537, + 146541, 146545, 146549, 146553, 146557, 146561, 146565, 146569, 146573, + 146577, 146581, 146585, 146589, 146593, 146597, 146601, 146605, 146609, + 146613, 146617, 146621, 146625, 146629, 146633, 146637, 146641, 146645, + 146649, 146653, 146657, 146661, 146665, 146669, 146673, 146677, 146681, + 146685, 146689, 146693, 146697, 146701, 146705, 146709, 146713, 146717, + 146721, 146725, 146729, 146733, 146737, 146741, 146745, 146749, 146753, + 146757, 146761, 146765, 146769, 146773, 146777, 146781, 146785, 146789, + 146793, 146797, 146801, 146805, 146809, 146813, 146817, 146821, 146825, + 146829, 146833, 146837, 146841, 146845, 146849, 146853, 146857, 146861, + 146865, 146869, 146873, 146877, 146881, 146885, 146889, 146893, 146897, + 146901, 146905, 146909, 146913, 146917, 146921, 146925, 146929, 146933, + 146937, 146941, 146945, 146949, 146953, 146957, 146961, 146965, 146969, + 146973, 146977, 146981, 146985, 146989, 146993, 146997, 147001, 147005, + 147009, 147013, 147017, 147021, 147025, 147029, 147033, 147037, 147041, + 147045, 147049, 147053, 147057, 147061, 147065, 147069, 147073, 147077, + 147081, 147085, 147089, 147093, 147097, 147101, 147105, 147109, 147113, + 147117, 147121, 147125, 147129, 147133, 147137, 147141, 147145, 147149, + 147153, 147157, 147161, 147165, 147169, 147173, 147177, 147181, 147185, + 147189, 147193, 147197, 147201, 147205, 147209, 147213, 147217, 147221, + 147225, 147229, 147233, 147237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123629, - 123631, 123633, 123637, 123642, 123647, 123649, 123655, 123660, 123662, - 123668, 123672, 123674, 123678, 123684, 123690, 123696, 123701, 123705, - 123712, 123719, 123726, 123731, 123738, 123745, 123752, 123756, 123762, - 123771, 123780, 123787, 123792, 123796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 123800, 123802, 123804, 123808, 123812, 123816, 0, 123818, - 123820, 123824, 123826, 123828, 123830, 123832, 123837, 123842, 123844, - 123850, 123854, 123858, 123866, 123868, 123870, 123872, 123874, 123876, - 123878, 123880, 123882, 123884, 123886, 123890, 123894, 123896, 123898, - 123900, 123902, 123904, 123909, 123915, 123919, 123923, 123927, 123931, - 123936, 123940, 123942, 123944, 123948, 123954, 123956, 123958, 123960, - 123964, 123973, 123979, 123983, 123987, 123989, 123991, 123994, 123996, - 123998, 124000, 124004, 124006, 124010, 124015, 124017, 124022, 124028, - 124035, 124039, 124043, 124047, 124051, 124057, 0, 0, 0, 124061, 124063, - 124067, 124071, 124073, 124077, 124081, 124083, 124087, 124089, 124093, - 124097, 124101, 124105, 124109, 124113, 124117, 124121, 124127, 124131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124135, 124139, 124143, 124147, - 124154, 124156, 124160, 124162, 124164, 124168, 124172, 124176, 124178, - 124182, 124186, 124190, 124194, 124198, 124200, 124204, 124206, 124212, - 124215, 124220, 124222, 124224, 124227, 124229, 124231, 124234, 124241, - 124248, 124255, 124260, 124264, 124266, 124268, 0, 124270, 124272, - 124276, 124280, 124284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 124286, 124290, 124295, 124299, 124305, 124311, 124313, - 124315, 124321, 124323, 124327, 124331, 124333, 124337, 124339, 124343, - 124347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124351, 124353, - 124355, 124357, 124361, 124363, 124365, 124367, 124369, 124371, 124373, - 124375, 124377, 124379, 124381, 124383, 124385, 124387, 124389, 124391, - 124393, 124395, 124397, 124399, 124401, 124403, 124405, 124409, 124411, - 124413, 124415, 124419, 124421, 124425, 124427, 124429, 124433, 124437, - 124443, 124445, 124447, 124449, 124451, 124455, 124459, 124461, 124465, - 124469, 124473, 124477, 124481, 124485, 124489, 124493, 124497, 124501, - 124505, 124509, 124513, 124517, 124521, 124525, 124529, 0, 124533, 0, - 124535, 124537, 124539, 124541, 124543, 124551, 124559, 124567, 124575, - 124580, 124585, 124590, 124594, 124598, 124603, 124607, 124609, 124613, - 124615, 124617, 124619, 124621, 124623, 124625, 124627, 124631, 124633, - 124635, 124637, 124641, 124645, 124649, 124653, 124657, 124659, 124665, - 124671, 124673, 124675, 124677, 124679, 124681, 124690, 124697, 124704, - 124708, 124715, 124720, 124727, 124736, 124741, 124745, 124749, 124751, - 124755, 124757, 124761, 124765, 124767, 124771, 124775, 124779, 124781, - 124783, 124789, 124791, 124793, 124795, 124799, 124803, 124805, 124809, - 124811, 124813, 124816, 124820, 124822, 124826, 124828, 124830, 124835, - 124837, 124841, 124845, 124848, 124852, 124856, 124860, 124864, 124868, - 124872, 124876, 124881, 124885, 124889, 124898, 124903, 124906, 124908, - 124911, 124914, 124919, 124921, 124924, 124929, 124933, 124936, 124940, - 124944, 124947, 124952, 124956, 124960, 124964, 124968, 124974, 124980, - 124986, 124992, 124997, 125008, 125010, 125014, 125016, 125018, 125022, - 125026, 125028, 125032, 125037, 125042, 125048, 125050, 125054, 125058, - 125065, 125072, 125076, 125078, 125080, 125084, 125086, 125090, 125094, - 125098, 125100, 125102, 125109, 125113, 125116, 125120, 125124, 125128, - 125130, 125134, 125136, 125138, 125142, 125144, 125148, 125152, 125158, - 125162, 125166, 125170, 125172, 125175, 125179, 125186, 125195, 125204, - 125212, 125220, 125222, 125226, 125228, 125232, 125243, 125247, 125253, - 125259, 125264, 0, 125266, 125270, 125272, 125274, 0, 0, 0, 125276, - 125281, 125291, 125306, 125318, 125330, 125334, 125338, 125344, 125346, - 125354, 125362, 125364, 125368, 125374, 125380, 125387, 125394, 125396, - 125398, 125401, 125403, 125409, 125411, 125414, 125418, 125424, 125430, - 125441, 125447, 125454, 125462, 125466, 125474, 125482, 125488, 125494, - 125501, 125503, 125507, 125509, 125511, 125516, 125518, 125520, 125522, - 125524, 125528, 125539, 125545, 125549, 125553, 125557, 125563, 125569, - 125575, 125581, 125586, 125591, 125597, 125603, 125610, 0, 0, 125617, - 125622, 125630, 125634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125643, - 125650, 125657, 125664, 125672, 125680, 125688, 125696, 125704, 125712, - 125720, 125728, 125736, 125742, 125748, 125754, 125760, 125766, 125772, - 125778, 125784, 125790, 125796, 125802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125808, 125812, 125816, - 125821, 125826, 125828, 125832, 125841, 125849, 125857, 125870, 125883, - 125896, 125903, 125910, 125914, 125923, 125931, 125935, 125944, 125951, - 125955, 125959, 125963, 125967, 125974, 125978, 125982, 125986, 125990, - 125997, 126006, 126015, 126022, 126034, 126046, 126050, 126054, 126058, - 126062, 126066, 126070, 126078, 126086, 126094, 126098, 126102, 126106, - 126110, 126114, 126118, 126124, 126130, 126134, 126145, 126153, 126157, - 126161, 126165, 126169, 126175, 126182, 126193, 126203, 126213, 126224, - 126233, 126244, 126250, 126256, 0, 0, 0, 0, 126262, 126271, 126278, - 126284, 126288, 126292, 126296, 126305, 126317, 126321, 126328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126335, - 126337, 126339, 126343, 126347, 126351, 126360, 126362, 126364, 126367, - 126369, 126371, 126375, 126377, 126381, 126383, 126387, 126389, 126391, - 126395, 126399, 126405, 126407, 126411, 126413, 126417, 126421, 126425, - 126429, 126431, 126433, 126437, 126441, 126445, 126449, 126451, 126453, - 126455, 126460, 126465, 126468, 126476, 126484, 126486, 126491, 126494, - 126499, 126510, 126517, 126522, 126527, 126529, 126533, 126535, 126539, - 126541, 126545, 126549, 126552, 126555, 126557, 126560, 126562, 126566, - 126568, 126570, 126572, 126576, 126578, 126582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 126585, 126590, 126595, 126600, 126605, 126610, 126615, 126622, - 126629, 126636, 126643, 126648, 126653, 126658, 126663, 126670, 126676, - 126683, 126690, 126697, 126702, 126707, 126712, 126717, 126722, 126729, - 126736, 126741, 126746, 126753, 126760, 126768, 126776, 126783, 126790, - 126798, 126806, 126814, 126821, 126831, 126842, 126847, 126854, 126861, - 126868, 126876, 126884, 126895, 126903, 126911, 126919, 126924, 126929, - 126934, 126939, 126944, 126949, 126954, 126959, 126964, 126969, 126974, - 126979, 126986, 126991, 126996, 127003, 127008, 127013, 127018, 127023, - 127028, 127033, 127038, 127043, 127048, 127053, 127058, 127063, 127070, - 127078, 127083, 127088, 127095, 127100, 127105, 127110, 127117, 127122, - 127129, 127134, 127141, 127146, 127155, 127164, 127169, 127174, 127179, - 127184, 127189, 127194, 127199, 127204, 127209, 127214, 127219, 127224, - 127229, 127237, 127245, 127250, 127255, 127260, 127265, 127270, 127276, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127282, 127286, 127290, 127294, - 127298, 127302, 127306, 127310, 127314, 127318, 127322, 127326, 127330, - 127334, 127338, 127342, 127346, 127350, 127354, 127358, 127362, 127366, - 127370, 127374, 127378, 127382, 127386, 127390, 127394, 127398, 127402, - 127406, 127410, 127414, 127418, 127422, 127426, 127430, 127434, 127438, - 127442, 127446, 127450, 127454, 127458, 127462, 127466, 127470, 127474, - 127478, 127482, 127486, 127490, 127494, 127498, 127502, 127506, 127510, - 127514, 127518, 127522, 127526, 127530, 127534, 127538, 127542, 127546, - 127550, 127554, 127558, 127562, 127566, 127570, 127574, 127578, 127582, - 127586, 127590, 127594, 127598, 127602, 127606, 127610, 127614, 127618, - 127622, 127626, 127630, 127634, 127638, 127642, 127646, 127650, 127654, - 127658, 127662, 127666, 127670, 127674, 127678, 127682, 127686, 127690, - 127694, 127698, 127702, 127706, 127710, 127714, 127718, 127722, 127726, - 127730, 127734, 127738, 127742, 127746, 127750, 127754, 127758, 127762, - 127766, 127770, 127774, 127778, 127782, 127786, 127790, 127794, 127798, - 127802, 127806, 127810, 127814, 127818, 127822, 127826, 127830, 127834, - 127838, 127842, 127846, 127850, 127854, 127858, 127862, 127866, 127870, - 127874, 127878, 127882, 127886, 127890, 127894, 127898, 127902, 127906, - 127910, 127914, 127918, 127922, 127926, 127930, 127934, 127938, 127942, - 127946, 127950, 127954, 127958, 127962, 127966, 127970, 127974, 127978, - 127982, 127986, 127990, 127994, 127998, 128002, 128006, 128010, 128014, - 128018, 128022, 128026, 128030, 128034, 128038, 128042, 128046, 128050, - 128054, 128058, 128062, 128066, 128070, 128074, 128078, 128082, 128086, - 128090, 128094, 128098, 128102, 128106, 128110, 128114, 128118, 128122, - 128126, 128130, 128134, 128138, 128142, 128146, 128150, 128154, 128158, - 128162, 128166, 128170, 128174, 128178, 128182, 128186, 128190, 128194, - 128198, 128202, 128206, 128210, 128214, 128218, 128222, 128226, 128230, - 128234, 128238, 128242, 128246, 128250, 128254, 128258, 128262, 128266, - 128270, 128274, 128278, 128282, 128286, 128290, 128294, 128298, 128302, - 128306, 128310, 128314, 128318, 128322, 128326, 128330, 128334, 128338, - 128342, 128346, 128350, 128354, 128358, 128362, 128366, 128370, 128374, - 128378, 128382, 128386, 128390, 128394, 128398, 128402, 128406, 128410, - 128414, 128418, 128422, 128426, 128430, 128434, 128438, 128442, 128446, - 128450, 128454, 128458, 128462, 128466, 128470, 128474, 128478, 128482, - 128486, 128490, 128494, 128498, 128502, 128506, 128510, 128514, 128518, - 128522, 128526, 128530, 128534, 128538, 128542, 128546, 128550, 128554, - 128558, 128562, 128566, 128570, 128574, 128578, 128582, 128586, 128590, - 128594, 128598, 128602, 128606, 128610, 128614, 128618, 128622, 128626, - 128630, 128634, 128638, 128642, 128646, 128650, 128654, 128658, 128662, - 128666, 128670, 128674, 128678, 128682, 128686, 128690, 128694, 128698, - 128702, 128706, 128710, 128714, 128718, 128722, 128726, 128730, 128734, - 128738, 128742, 128746, 128750, 128754, 128758, 128762, 128766, 128770, - 128774, 128778, 128782, 128786, 128790, 128794, 128798, 128802, 128806, - 128810, 128814, 128818, 128822, 128826, 128830, 128834, 128838, 128842, - 128846, 128850, 128854, 128858, 128862, 128866, 128870, 128874, 128878, - 128882, 128886, 128890, 128894, 128898, 128902, 128906, 128910, 128914, - 128918, 128922, 128926, 128930, 128934, 128938, 128942, 128946, 128950, - 128954, 128958, 128962, 128966, 128970, 128974, 128978, 128982, 128986, - 128990, 128994, 128998, 129002, 129006, 129010, 129014, 129018, 129022, - 129026, 129030, 129034, 129038, 129042, 129046, 129050, 129054, 129058, - 129062, 129066, 129070, 129074, 129078, 129082, 129086, 129090, 129094, - 129098, 129102, 129106, 129110, 129114, 129118, 129122, 129126, 129130, - 129134, 129138, 129142, 129146, 129150, 129154, 129158, 129162, 129166, - 129170, 129174, 129178, 129182, 129186, 129190, 129194, 129198, 129202, - 129206, 129210, 129214, 129218, 129222, 129226, 129230, 129234, 129238, - 129242, 129246, 129250, 129254, 129258, 129262, 129266, 129270, 129274, - 129278, 129282, 129286, 129290, 129294, 129298, 129302, 129306, 129310, - 129314, 129318, 129322, 129326, 129330, 129334, 129338, 129342, 129346, - 129350, 129354, 129358, 129362, 129366, 129370, 129374, 129378, 129382, - 129386, 129390, 129394, 129398, 129402, 129406, 129410, 129414, 129418, - 129422, 129426, 129430, 129434, 129438, 129442, 129446, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 147245, 147248, 147252, 147256, 147259, 147263, 147267, + 147270, 147273, 147277, 147281, 147284, 147287, 147290, 147293, 147298, + 147301, 147305, 147308, 147311, 147314, 147317, 147320, 147323, 147326, + 147329, 147332, 147335, 147338, 147342, 147346, 147350, 147354, 147359, + 147364, 147370, 147376, 147382, 147387, 147393, 147399, 147405, 147410, + 147416, 147422, 147427, 147433, 147439, 147444, 147450, 147456, 147461, + 147466, 147472, 147477, 147483, 147489, 147495, 147501, 147507, 147511, + 147516, 147520, 147525, 147529, 147534, 147539, 147545, 147551, 147557, + 147562, 147568, 147574, 147580, 147585, 147591, 147597, 147602, 147608, + 147614, 147619, 147625, 147631, 147636, 147641, 147647, 147652, 147658, + 147664, 147670, 147676, 147682, 147687, 147691, 147696, 147699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129454, 129457, 129461, 129465, 129468, 129472, 129476, - 129479, 129482, 129486, 129490, 129493, 129496, 129499, 129502, 129507, - 129510, 129514, 129517, 129520, 129523, 129526, 129529, 129532, 129535, - 129538, 129541, 129544, 129547, 129551, 129555, 129559, 129563, 129568, - 129573, 129579, 129585, 129591, 129596, 129602, 129608, 129614, 129619, - 129625, 129631, 129636, 129641, 129647, 129652, 129658, 129664, 129669, - 129675, 129681, 129686, 129692, 129698, 129704, 129710, 129716, 129720, - 129725, 129729, 129734, 129738, 129743, 129748, 129754, 129760, 129766, - 129771, 129777, 129783, 129789, 129794, 129800, 129806, 129811, 129816, - 129822, 129827, 129833, 129839, 129844, 129850, 129856, 129861, 129867, - 129873, 129879, 129885, 129891, 129896, 129900, 129905, 129907, 129911, - 129914, 129917, 129920, 129923, 129926, 129929, 129932, 129935, 129938, - 129941, 129944, 129947, 129950, 129953, 129956, 129959, 129962, 129965, - 129968, 129971, 129974, 129977, 129980, 129983, 129986, 129989, 129992, - 129995, 129998, 130001, 130004, 130007, 130010, 130013, 130016, 130019, - 130022, 130025, 130028, 130031, 130034, 130037, 130040, 130043, 130046, - 130049, 130052, 130055, 130058, 130061, 130064, 130067, 130070, 130073, - 130076, 130079, 130082, 130085, 130088, 130091, 130094, 130097, 130100, - 130103, 130106, 130109, 130112, 130115, 130118, 130121, 130124, 130127, - 130130, 130133, 130136, 130139, 130142, 130145, 130148, 130151, 130154, - 130157, 130160, 130163, 130166, 130169, 130172, 130175, 130178, 130181, - 130184, 130187, 130190, 130193, 130196, 130199, 130202, 130205, 130208, - 130211, 130214, 130217, 130220, 130223, 130226, 130229, 130232, 130235, - 130238, 130241, 130244, 130247, 130250, 130253, 130256, 130259, 130262, - 130265, 130268, 130271, 130274, 130277, 130280, 130283, 130286, 130289, - 130292, 130295, 130298, 130301, 130304, 130307, 130310, 130313, 130316, - 130319, 130322, 130325, 130328, 130331, 130334, 130337, 130340, 130343, - 130346, 130349, 130352, 130355, 130358, 130361, 130364, 130367, 130370, - 130373, 130376, 130379, 130382, 130385, 130388, 130391, 130394, 130397, - 130400, 130403, 130406, 130409, 130412, 130415, 130418, 130421, 130424, - 130427, 130430, 130433, 130436, 130439, 130442, 130445, 130448, 130451, - 130454, 130457, 130460, 130463, 130466, 130469, 130472, 130475, 130478, - 130481, 130484, 130487, 130490, 130493, 130496, 130499, 130502, 130505, - 130508, 130511, 130514, 130517, 130520, 130523, 130526, 130529, 130532, - 130535, 130538, 130541, 130544, 130547, 130550, 130553, 130556, 130559, - 130562, 130565, 130568, 130571, 130574, 130577, 130580, 130583, 130586, - 130589, 130592, 130595, 130598, 130601, 130604, 130607, 130610, 130613, - 130616, 130619, 130622, 130625, 130628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 130631, 130633, 130635, 130640, 130642, 130647, 130649, - 130654, 130656, 130661, 130663, 130665, 130667, 130669, 130671, 130673, - 130675, 130677, 130679, 130682, 130685, 130687, 130689, 130693, 130696, - 130701, 130703, 130705, 130707, 130711, 130714, 130716, 130720, 130722, - 130726, 130728, 130732, 130735, 130737, 130741, 130745, 130747, 130753, - 130755, 130760, 130762, 130767, 130769, 130774, 130776, 130781, 130783, - 130786, 130788, 130792, 130794, 130801, 130803, 130805, 130807, 130812, - 130814, 130816, 130818, 130820, 130822, 130827, 130831, 130833, 130838, - 130842, 130844, 130849, 130853, 130855, 130860, 130864, 130866, 130868, - 130870, 130872, 130876, 130878, 130883, 130885, 130891, 130893, 130899, - 130901, 130903, 130905, 130909, 130911, 130918, 130920, 130927, 130929, - 130934, 130939, 130941, 130947, 130953, 130955, 130961, 130966, 130968, - 130974, 130980, 130982, 130988, 130994, 130996, 131002, 131006, 131008, - 131013, 131015, 131017, 131022, 131024, 131026, 131032, 131034, 131039, - 131043, 131045, 131050, 131054, 131056, 131062, 131064, 131068, 131070, - 131074, 131076, 131083, 131090, 131092, 131099, 131106, 131108, 131113, - 131115, 131122, 131124, 131129, 131131, 131137, 131139, 131143, 131145, - 131151, 131153, 131157, 131159, 131165, 131167, 131169, 131171, 131176, - 131181, 131183, 131185, 131194, 131198, 131205, 131212, 131217, 131222, - 131234, 131236, 131238, 131240, 131242, 131244, 131246, 131248, 131250, - 131252, 131254, 131256, 131258, 131260, 131262, 131264, 131266, 131268, - 131270, 131272, 131274, 131276, 131282, 131289, 131294, 131299, 131310, - 131312, 131314, 131316, 131318, 131320, 131322, 131324, 131326, 131328, - 131330, 131332, 131334, 131336, 131338, 131340, 131342, 131347, 131349, - 131351, 131357, 131369, 131380, 131382, 131384, 131386, 131388, 131390, - 131392, 131394, 131396, 131398, 131400, 131402, 131404, 131406, 131408, - 131410, 131412, 131414, 131416, 131418, 131420, 131422, 131424, 131426, - 131428, 131430, 131432, 131434, 131436, 131438, 131440, 131442, 131444, - 131446, 131448, 131450, 131452, 131454, 131456, 131458, 131460, 131462, - 131464, 131466, 131468, 131470, 131472, 131474, 131476, 131478, 131480, - 131482, 131484, 131486, 131488, 131490, 131492, 131494, 131496, 131498, - 131500, 131502, 131504, 131506, 131508, 131510, 131512, 131514, 131516, - 131518, 131520, 131522, 131524, 131526, 131528, 131530, 131532, 131534, - 131536, 131538, 131540, 131542, 131544, 131546, 131548, 131550, 131552, - 131554, 131556, 131558, 131560, 131562, 131564, 131566, 131568, 131570, - 131572, 131574, 131576, 131578, 131580, 131582, 131584, 131586, 131588, - 131590, 131592, 131594, 131596, 131598, 131600, 131602, 131604, 131606, - 131608, 131610, 131612, 131614, 131616, 131618, 131620, 131622, 131624, - 131626, 131628, 131630, 131632, 131634, 131636, 131638, 131640, 131642, - 131644, 131646, 131648, 131650, 131652, 131654, 131656, 131658, 131660, - 131662, 131664, 131666, 131668, 131670, 131672, 131674, 131676, 131678, - 131680, 131682, 131684, 131686, 131688, 131690, 131692, 131694, 131696, - 131698, 131700, 131702, 131704, 131706, 131708, 131710, 131712, 131714, - 131716, 131718, 131720, 131722, 131724, 131726, 131728, 131730, 131732, - 131734, 131736, 131738, 131740, 131742, 131744, 131746, 131748, 131750, - 131752, 131754, 131756, 131758, 131760, 131762, 131764, 131766, 131768, - 131770, 131772, 131774, 131776, 131778, 131780, 131782, 131784, 131786, - 131788, 131790, 131792, 131794, 131796, 131798, 131800, 131802, 131804, - 131806, 131808, 131810, 131812, 131814, 131816, 131818, 131820, 131822, - 131824, 131826, 131828, 131830, 131832, 131834, 131836, 131838, 131840, - 131842, 131844, 131846, 131848, 131850, 131852, 131854, 131856, 131858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 147703, 147706, 147709, 147712, 147715, 147718, 147721, + 147724, 147727, 147730, 147733, 147736, 147739, 147742, 147745, 147748, + 147751, 147754, 147757, 147760, 147763, 147766, 147769, 147772, 147775, + 147778, 147781, 147784, 147787, 147790, 147793, 147796, 147799, 147802, + 147805, 147808, 147811, 147814, 147817, 147820, 147823, 147826, 147829, + 147832, 147835, 147838, 147841, 147844, 147847, 147850, 147853, 147856, + 147859, 147862, 147865, 147868, 147871, 147874, 147877, 147880, 147883, + 147886, 147889, 147892, 147895, 147898, 147901, 147904, 147907, 147910, + 147913, 147916, 147919, 147922, 147925, 147928, 147931, 147934, 147937, + 147940, 147943, 147946, 147949, 147952, 147955, 147958, 147961, 147964, + 147967, 147970, 147973, 147976, 147979, 147982, 147985, 147988, 147991, + 147994, 147997, 148000, 148003, 148006, 148009, 148012, 148015, 148018, + 148021, 148024, 148027, 148030, 148033, 148036, 148039, 148042, 148045, + 148048, 148051, 148054, 148057, 148060, 148063, 148066, 148069, 148072, + 148075, 148078, 148081, 148084, 148087, 148090, 148093, 148096, 148099, + 148102, 148105, 148108, 148111, 148114, 148117, 148120, 148123, 148126, + 148129, 148132, 148135, 148138, 148141, 148144, 148147, 148150, 148153, + 148156, 148159, 148162, 148165, 148168, 148171, 148174, 148177, 148180, + 148183, 148186, 148189, 148192, 148195, 148198, 148201, 148204, 148207, + 148210, 148213, 148216, 148219, 148222, 148225, 148228, 148231, 148234, + 148237, 148240, 148243, 148246, 148249, 148252, 148255, 148258, 148261, + 148264, 148267, 148270, 148273, 148276, 148279, 148282, 148285, 148288, + 148291, 148294, 148297, 148300, 148303, 148306, 148309, 148312, 148315, + 148318, 148321, 148324, 148327, 148330, 148333, 148336, 148339, 148342, + 148345, 148348, 148351, 148354, 148357, 148360, 148363, 148366, 148369, + 148372, 148375, 148378, 148381, 148384, 148387, 148390, 148393, 148396, + 148399, 148402, 148405, 148408, 148411, 148414, 148417, 148420, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148423, 148425, 148427, 148432, + 148434, 148439, 148441, 148446, 148448, 148453, 148455, 148457, 148459, + 148461, 148463, 148465, 148467, 148469, 148471, 148474, 148477, 148479, + 148481, 148485, 148488, 148493, 148495, 148497, 148499, 148503, 148506, + 148508, 148512, 148514, 148518, 148520, 148524, 148527, 148529, 148533, + 148537, 148539, 148545, 148547, 148552, 148554, 148559, 148561, 148566, + 148568, 148573, 148575, 148578, 148580, 148584, 148586, 148593, 148595, + 148597, 148599, 148604, 148606, 148608, 148610, 148612, 148614, 148619, + 148623, 148625, 148630, 148634, 148636, 148641, 148645, 148647, 148652, + 148656, 148658, 148660, 148662, 148664, 148668, 148670, 148675, 148677, + 148683, 148685, 148691, 148693, 148695, 148697, 148701, 148703, 148710, + 148712, 148719, 148721, 148726, 148731, 148733, 148739, 148745, 148747, + 148753, 148758, 148760, 148766, 148772, 148774, 148780, 148786, 148788, + 148794, 148798, 148800, 148805, 148807, 148809, 148814, 148816, 148818, + 148824, 148826, 148831, 148835, 148837, 148842, 148846, 148848, 148854, + 148856, 148860, 148862, 148866, 148868, 148875, 148882, 148884, 148891, + 148898, 148900, 148905, 148907, 148914, 148916, 148921, 148923, 148929, + 148931, 148935, 148937, 148943, 148945, 148949, 148951, 148957, 148959, + 148961, 148963, 148968, 148973, 148975, 148977, 148987, 148991, 148998, + 149005, 149010, 149015, 149027, 149029, 149031, 149033, 149035, 149037, + 149039, 149041, 149043, 149045, 149047, 149049, 149051, 149053, 149055, + 149057, 149059, 149061, 149063, 149065, 149067, 149069, 149075, 149082, + 149087, 149092, 149103, 149105, 149107, 149109, 149111, 149113, 149115, + 149117, 149119, 149121, 149123, 149125, 149127, 149129, 149131, 149133, + 149135, 149140, 149142, 149144, 149150, 149162, 149173, 149175, 149177, + 149179, 149181, 149183, 149185, 149187, 149189, 149191, 149193, 149195, + 149197, 149199, 149201, 149203, 149205, 149207, 149209, 149211, 149213, + 149215, 149217, 149219, 149221, 149223, 149225, 149227, 149229, 149231, + 149233, 149235, 149237, 149239, 149241, 149243, 149245, 149247, 149249, + 149251, 149253, 149255, 149257, 149259, 149261, 149263, 149265, 149267, + 149269, 149271, 149273, 149275, 149277, 149279, 149281, 149283, 149285, + 149287, 149289, 149291, 149293, 149295, 149297, 149299, 149301, 149303, + 149305, 149307, 149309, 149311, 149313, 149315, 149317, 149319, 149321, + 149323, 149325, 149327, 149329, 149331, 149333, 149335, 149337, 149339, + 149341, 149343, 149345, 149347, 149349, 149351, 149353, 149355, 149357, + 149359, 149361, 149363, 149365, 149367, 149369, 149371, 149373, 149375, + 149377, 149379, 149381, 149383, 149385, 149387, 149389, 149391, 149393, + 149395, 149397, 149399, 149401, 149403, 149405, 149407, 149409, 149411, + 149413, 149415, 149417, 149419, 149421, 149423, 149425, 149427, 149429, + 149431, 149433, 149435, 149437, 149439, 149441, 149443, 149445, 149447, + 149449, 149451, 149453, 149455, 149457, 149459, 149461, 149463, 149465, + 149467, 149469, 149471, 149473, 149475, 149477, 149479, 149481, 149483, + 149485, 149487, 149489, 149491, 149493, 149495, 149497, 149499, 149501, + 149503, 149505, 149507, 149509, 149511, 149513, 149515, 149517, 149519, + 149521, 149523, 149525, 149527, 149529, 149531, 149533, 149535, 149537, + 149539, 149541, 149543, 149545, 149547, 149549, 149551, 149553, 149555, + 149557, 149559, 149561, 149563, 149565, 149567, 149569, 149571, 149573, + 149575, 149577, 149579, 149581, 149583, 149585, 149587, 149589, 149591, + 149593, 149595, 149597, 149599, 149601, 149603, 149605, 149607, 149609, + 149611, 149613, 149615, 149617, 149619, 149621, 149623, 149625, 149627, + 149629, 149631, 149633, 149635, 149637, 149639, 149641, 149643, 149645, + 149647, 149649, 149651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 131860, 131870, 131880, 131889, 131898, 131911, - 131924, 131936, 131948, 131958, 131968, 131978, 131988, 131999, 132010, - 132020, 132029, 132038, 132047, 132060, 132073, 132085, 132097, 132107, - 132117, 132127, 132137, 132146, 132155, 132164, 132173, 132182, 132191, - 132200, 132209, 132218, 132227, 132236, 132245, 132256, 132266, 132276, - 132289, 132299, 132312, 132319, 132329, 132336, 132343, 132350, 132357, - 132364, 132371, 132380, 132389, 132398, 132407, 132416, 132425, 132434, - 132443, 132451, 132459, 132466, 132476, 132485, 132493, 132500, 132510, - 132519, 132529, 132539, 132550, 132560, 132569, 132579, 132588, 132598, - 132606, 132610, 132614, 132618, 132622, 132626, 132630, 132634, 132638, - 132642, 132646, 132649, 132653, 132656, 132659, 132663, 132667, 132671, - 132675, 132679, 132683, 132687, 132691, 132695, 132699, 132703, 132707, - 132711, 132715, 132719, 132723, 132727, 132731, 132735, 132739, 132743, - 132747, 132751, 132755, 132759, 132763, 132767, 132771, 132775, 132779, - 132783, 132787, 132791, 132795, 132799, 132803, 132807, 132811, 132815, - 132819, 132823, 132827, 132831, 132835, 132839, 132843, 132847, 132851, - 132855, 132859, 132863, 132867, 132871, 132875, 132879, 132883, 132887, - 132891, 132895, 132899, 132903, 132907, 132911, 132915, 132919, 132923, - 132927, 132931, 132935, 132939, 132943, 132947, 132951, 132955, 132959, - 132963, 132967, 132971, 132975, 132979, 132983, 132987, 132991, 132995, - 132999, 133002, 133006, 133010, 133014, 133018, 133022, 133026, 133030, - 133034, 133038, 133042, 133046, 133050, 133054, 133058, 133062, 133066, - 133070, 133074, 133078, 133082, 133086, 133090, 133094, 133098, 133102, - 133106, 133110, 133114, 133118, 133122, 133126, 133130, 133134, 133138, - 133142, 133146, 133150, 133154, 133158, 133162, 133166, 133170, 133174, - 133178, 133182, 133186, 133190, 133194, 133198, 133202, 133206, 133210, - 133214, 133218, 133222, 133226, 133230, 133234, 133238, 133242, 133246, - 133250, 133254, 133258, 133262, 133266, 133270, 133274, 133278, 133282, - 133286, 133290, 133294, 133298, 133302, 133306, 133310, 133314, 133318, - 133322, 133326, 133330, 133334, 133338, 133342, 133346, 133350, 133354, - 133358, 133362, 133366, 133370, 133374, 133378, 133382, 133386, 133390, - 133394, 133398, 133402, 133406, 133410, 133414, 133418, 133422, 133426, - 133430, 133434, 133438, 133442, 133446, 133450, 133454, 133458, 133462, - 133466, 133470, 133474, 133478, 133482, 133486, 133490, 133494, 133498, - 133502, 133506, 133510, 133514, 133518, 133522, 133526, 133530, 133534, - 133538, 133542, 133546, 133550, 133554, 133558, 133562, 133566, 133570, - 133574, 133578, 133582, 133586, 133590, 133594, 133598, 133602, 133606, - 133610, 133614, 133618, 133622, 133626, 133630, 133634, 133638, 133642, - 133646, 133650, 133654, 133658, 133662, 133666, 133670, 133674, 133678, - 133682, 133686, 133690, 133694, 133698, 133702, 133706, 133710, 133714, - 133718, 133722, 133726, 133730, 133734, 133738, 133742, 133746, 133750, - 133754, 133758, 133762, 133766, 133771, 133776, 133781, 133785, 133791, - 133798, 133805, 133812, 133819, 133826, 133833, 133840, 133847, 133854, - 133861, 133868, 133875, 133882, 133888, 133895, 133902, 133908, 133915, - 133922, 133929, 133936, 133943, 133950, 133957, 133964, 133971, 133978, - 133985, 133992, 133999, 134005, 134011, 134018, 134025, 134034, 134043, - 134052, 134061, 134066, 134071, 134077, 134083, 134089, 134095, 134101, - 134107, 134113, 134119, 134125, 134131, 134137, 134143, 134148, 134154, - 134164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149653, 149663, 149673, + 149682, 149691, 149704, 149717, 149729, 149741, 149751, 149761, 149771, + 149781, 149792, 149803, 149813, 149822, 149831, 149840, 149853, 149866, + 149878, 149890, 149900, 149910, 149920, 149930, 149939, 149948, 149958, + 149968, 149977, 149986, 149996, 150006, 150015, 150024, 150034, 150044, + 150055, 150066, 150076, 150089, 150100, 150114, 150122, 150133, 150141, + 150149, 150157, 150165, 150173, 150181, 150190, 150199, 150209, 150219, + 150228, 150237, 150247, 150257, 150265, 150274, 150282, 150291, 150299, + 150307, 150314, 150324, 150333, 150344, 150355, 150367, 150378, 150388, + 150399, 150409, 150420, 150428, 150432, 150436, 150440, 150444, 150448, + 150452, 150456, 150460, 150464, 150468, 150472, 150476, 150479, 150482, + 150486, 150490, 150494, 150498, 150502, 150506, 150510, 150514, 150517, + 150521, 150525, 150529, 150533, 150537, 150541, 150545, 150549, 150553, + 150557, 150561, 150565, 150569, 150573, 150577, 150581, 150585, 150589, + 150593, 150597, 150601, 150605, 150609, 150613, 150617, 150621, 150625, + 150629, 150633, 150637, 150641, 150645, 150649, 150653, 150657, 150661, + 150665, 150669, 150673, 150677, 150681, 150685, 150689, 150693, 150697, + 150701, 150705, 150709, 150713, 150717, 150721, 150725, 150729, 150733, + 150737, 150741, 150745, 150749, 150753, 150757, 150761, 150765, 150769, + 150773, 150777, 150781, 150785, 150789, 150793, 150797, 150801, 150805, + 150809, 150813, 150817, 150821, 150824, 150828, 150832, 150836, 150840, + 150844, 150848, 150852, 150856, 150860, 150864, 150868, 150872, 150876, + 150880, 150884, 150888, 150892, 150896, 150900, 150904, 150908, 150912, + 150916, 150920, 150924, 150928, 150932, 150936, 150940, 150944, 150948, + 150952, 150956, 150960, 150964, 150968, 150972, 150976, 150980, 150984, + 150988, 150992, 150996, 151000, 151004, 151008, 151012, 151016, 151020, + 151024, 151028, 151032, 151036, 151040, 151044, 151048, 151052, 151056, + 151060, 151064, 151068, 151072, 151076, 151080, 151084, 151088, 151092, + 151096, 151100, 151104, 151108, 151112, 151116, 151120, 151124, 151128, + 151132, 151136, 151140, 151144, 151148, 151152, 151156, 151160, 151164, + 151168, 151172, 151176, 151180, 151184, 151188, 151192, 151196, 151200, + 151204, 151208, 151212, 151216, 151220, 151224, 151228, 151232, 151236, + 151240, 151244, 151248, 151252, 151256, 151260, 151264, 151268, 151272, + 151276, 151280, 151284, 151288, 151292, 151296, 151300, 151304, 151308, + 151312, 151316, 151320, 151324, 151328, 151332, 151336, 151340, 151344, + 151348, 151352, 151356, 151360, 151364, 151368, 151372, 151376, 151380, + 151384, 151388, 151392, 151396, 151400, 151404, 151408, 151412, 151416, + 151420, 151424, 151428, 151432, 151436, 151440, 151444, 151448, 151452, + 151456, 151460, 151464, 151468, 151472, 151476, 151480, 151484, 151488, + 151492, 151496, 151500, 151504, 151508, 151512, 151516, 151520, 151524, + 151528, 151532, 151536, 151540, 151544, 151548, 151552, 151556, 151560, + 151564, 151568, 151572, 151576, 151580, 151584, 151588, 151593, 151598, + 151603, 151607, 151613, 151620, 151627, 151634, 151641, 151648, 151655, + 151662, 151669, 151676, 151683, 151690, 151697, 151704, 151710, 151717, + 151724, 151730, 151737, 151744, 151751, 151758, 151765, 151772, 151779, + 151786, 151793, 151800, 151807, 151814, 151821, 151828, 151834, 151841, + 151848, 151857, 151866, 151875, 151884, 151889, 151894, 151900, 151906, + 151912, 151918, 151924, 151930, 151936, 151942, 151948, 151954, 151960, + 151966, 151971, 151977, 151987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; /* name->code dictionary */ static unsigned int code_hash[] = { - 74224, 4851, 0, 78156, 78499, 128685, 7929, 0, 194682, 127766, 78500, - 66480, 0, 42833, 74529, 12064, 0, 596, 983821, 69850, 13192, 8651, 0, 0, - 120218, 12995, 64865, 1373, 0, 0, 5816, 119067, 64810, 4231, 6825, 42897, - 4233, 4234, 4232, 917836, 74415, 120210, 6384, 917840, 78108, 8851, 0, - 128553, 0, 41601, 8874, 983783, 7748, 0, 0, 0, 127939, 41603, 9784, 0, - 9188, 41600, 0, 120618, 128343, 1457, 3535, 0, 0, 0, 0, 65240, 11951, 0, - 3404, 0, 0, 0, 1759, 0, 41076, 68383, 120572, 119205, 66577, 94014, - 127764, 65859, 0, 7404, 0, 0, 0, 0, 65908, 9834, 3055, 9852, 983860, - 65288, 0, 11398, 0, 92417, 119255, 0, 0, 603, 74398, 43548, 0, 0, 917824, - 3350, 120817, 64318, 917828, 127089, 3390, 74483, 43265, 120599, 917830, - 78573, 0, 1919, 3400, 120651, 127944, 11647, 917540, 66446, 64141, 8562, + 74224, 4851, 125138, 78156, 78499, 72391, 7929, 66910, 194682, 127766, + 78500, 66480, 64038, 42833, 74529, 12064, 72385, 596, 983821, 69850, + 13192, 8651, 120217, 126542, 120218, 12995, 64865, 1373, 0, 113752, 5816, + 119067, 64810, 4231, 6825, 42897, 4233, 4234, 4232, 917836, 74415, + 120210, 6384, 70351, 78108, 8851, 67698, 128553, 0, 41601, 8874, 72392, + 7748, 0, 0, 127026, 127939, 41603, 9784, 0, 9188, 41600, 0, 120618, + 128343, 1457, 3535, 128635, 6381, 0, 0, 65240, 11951, 0, 3404, 0, 70487, + 72411, 1759, 0, 41076, 68383, 69972, 119205, 66577, 94014, 127764, 65859, + 0, 7404, 0, 0, 69970, 128387, 65908, 9834, 3055, 9852, 983860, 65288, 0, + 11398, 0, 92417, 93016, 128380, 0, 603, 74398, 43548, 0, 71865, 917824, + 3350, 120817, 64318, 917828, 78121, 3390, 74483, 43265, 120599, 917830, + 78573, 0, 1919, 3400, 120651, 119949, 11647, 917540, 66446, 64141, 8562, 2121, 64138, 4043, 8712, 64134, 64133, 11297, 983688, 983152, 11966, - 64128, 128587, 0, 0, 64132, 10867, 64130, 64129, 983844, 43374, 9779, - 2764, 66002, 10167, 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 93981, 65282, - 2843, 5355, 127928, 983965, 0, 5194, 11657, 43984, 128292, 0, 983620, 0, - 0, 127027, 10717, 64570, 5630, 5396, 64143, 10682, 0, 10602, 800, 42499, - 66186, 0, 0, 64930, 11631, 64146, 64145, 64144, 762, 13172, 118859, - 194661, 64468, 10906, 1353, 6960, 0, 0, 5828, 8724, 917806, 8933, 1601, - 42244, 858, 7080, 64109, 64108, 8090, 0, 74401, 917811, 587, 0, 128131, - 0, 0, 0, 78214, 2750, 74218, 556, 64158, 64157, 983949, 12213, 194678, - 2760, 0, 0, 0, 194794, 64156, 64155, 42496, 0, 64151, 64150, 12679, - 10053, 10421, 11093, 64153, 64152, 0, 0, 4839, 0, 0, 1874, 119016, 0, - 6577, 64125, 64124, 64123, 0, 127531, 92534, 7007, 7590, 65443, 9036, - 92550, 64122, 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, - 64119, 43981, 42128, 127842, 1177, 65601, 12322, 64106, 69640, 127306, - 64102, 7859, 1945, 64099, 0, 10453, 64104, 7188, 7997, 0, 7389, 983161, - 8705, 64097, 64096, 9571, 528, 128671, 44017, 11429, 71347, 0, 983077, - 917990, 73841, 0, 0, 9056, 64313, 6188, 120019, 6155, 64068, 1823, 64066, - 64065, 64072, 64071, 63, 7233, 92212, 0, 41904, 6639, 64064, 983775, - 128344, 0, 1176, 118959, 127930, 8162, 128667, 983831, 0, 120519, 66376, - 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222, - 69902, 7768, 0, 4199, 64708, 983421, 0, 0, 8708, 9560, 64077, 64076, - 8996, 4992, 4471, 42622, 64079, 64078, 92179, 0, 126570, 0, 64615, 41915, - 0, 12075, 70062, 0, 5174, 983217, 0, 127557, 3123, 0, 12685, 127904, - 8408, 64704, 0, 0, 9223, 0, 41616, 67999, 73797, 0, 1116, 128204, 43049, - 7136, 43050, 8548, 120485, 0, 119061, 917999, 0, 13115, 43675, 64091, - 9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 0, - 0, 11434, 64083, 64082, 11329, 7737, 64087, 64086, 64085, 64084, 194817, - 9927, 41335, 4118, 1797, 0, 41334, 0, 46, 43448, 127881, 298, 0, 128114, - 0, 42627, 0, 32, 6187, 119052, 11495, 11459, 3665, 983600, 42871, 0, - 19923, 74335, 0, 127192, 66239, 42264, 64403, 4412, 7240, 92495, 0, - 983466, 65758, 12750, 4181, 8544, 0, 120199, 917897, 120198, 69809, 6181, - 65014, 0, 0, 983196, 3639, 119588, 0, 0, 118904, 10073, 120206, 128862, - 127186, 68409, 42844, 7498, 1098, 92565, 120205, 0, 983118, 10207, 8789, - 983225, 0, 0, 983472, 9234, 0, 6182, 983474, 65058, 0, 983478, 983475, 0, - 5471, 9461, 5573, 118936, 5473, 44, 0, 66244, 94072, 0, 66238, 12844, 0, - 1622, 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 0, 64405, 41337, 0, - 41631, 8947, 68390, 127844, 41694, 0, 0, 7908, 0, 10408, 6579, 0, 64618, - 0, 120147, 2138, 6583, 7761, 127010, 120504, 194828, 0, 5058, 41010, - 9992, 128299, 5057, 0, 0, 74538, 5054, 118951, 194971, 78606, 0, 1437, - 41617, 658, 3497, 128509, 7486, 5061, 5060, 4235, 127878, 0, 128529, - 12113, 4236, 4727, 0, 0, 7693, 10749, 0, 7488, 5773, 978, 128134, 0, - 41619, 10239, 68611, 0, 66209, 0, 128700, 9748, 983956, 127524, 0, 0, 0, - 0, 195083, 0, 983843, 0, 0, 0, 0, 0, 9341, 119596, 2379, 11325, 0, 64668, - 67854, 8125, 120545, 6743, 119175, 917940, 2369, 0, 983972, 983973, - 119235, 74092, 73936, 7008, 43660, 0, 0, 0, 2367, 127827, 983857, 264, - 2375, 8060, 6194, 119858, 1844, 119084, 0, 6019, 0, 0, 6961, 0, 118839, - 0, 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 92333, 725, - 65042, 118797, 120800, 983040, 12892, 0, 0, 0, 0, 0, 0, 127261, 120707, - 983128, 0, 5074, 5073, 128790, 8983, 118981, 74493, 983561, 5072, 93977, - 6198, 11614, 0, 196, 0, 0, 0, 4929, 120342, 0, 0, 0, 0, 42847, 0, 0, 0, - 4934, 0, 41323, 9758, 0, 92289, 127917, 42584, 0, 4329, 41321, 4979, - 3048, 7752, 41320, 983042, 74418, 12819, 0, 5071, 0, 3642, 0, 5070, - 10042, 118835, 3987, 5068, 0, 8909, 78650, 78649, 69917, 10636, 73981, - 11806, 43167, 4531, 1245, 9105, 66463, 4921, 120219, 4926, 65544, 73884, - 194619, 0, 0, 64709, 0, 194620, 78880, 4922, 325, 992, 119568, 4925, 0, - 0, 9526, 4920, 0, 948, 0, 120208, 4930, 0, 92175, 120275, 4933, 120211, - 0, 118985, 4928, 0, 0, 74770, 120194, 126548, 722, 194934, 19908, 12637, - 127485, 119855, 8753, 1509, 0, 5468, 9511, 127474, 127477, 1672, 6205, - 10864, 74586, 127480, 70103, 127466, 78555, 127468, 73863, 126577, - 126503, 41607, 120115, 1679, 120116, 120180, 120113, 127462, 7005, 41609, - 9580, 0, 401, 69949, 43779, 6968, 5761, 342, 8553, 0, 8143, 127115, - 11983, 92249, 624, 74508, 4057, 43788, 5078, 74258, 12478, 0, 5076, 0, - 194609, 0, 8295, 685, 9025, 1524, 12618, 0, 5539, 0, 92523, 120102, 7138, - 120552, 0, 194611, 78752, 0, 12520, 8058, 9732, 0, 5080, 64775, 5036, - 5035, 120590, 42604, 983656, 0, 8074, 275, 13291, 1907, 78838, 4432, - 127271, 5033, 127273, 127272, 4836, 3888, 73792, 10729, 64546, 127262, - 43704, 127264, 127251, 67588, 119000, 127252, 127255, 8858, 6409, 127256, - 120252, 128100, 0, 0, 66321, 0, 12814, 127248, 3432, 10218, 0, 6094, - 7641, 42445, 0, 92487, 42406, 1676, 74320, 194607, 983177, 5030, 0, 0, 0, - 73869, 9622, 0, 69944, 6787, 0, 0, 0, 983583, 10544, 12919, 0, 92218, 0, - 0, 69906, 120789, 0, 947, 119835, 194586, 194585, 10969, 119935, 7613, - 92562, 119936, 4795, 119930, 7018, 7376, 120181, 120192, 120268, 0, - 43567, 74056, 917910, 11833, 119919, 7216, 65232, 7217, 251, 7218, 7895, - 4395, 43538, 119926, 119929, 119928, 7213, 119922, 7214, 7215, 983836, - 74141, 8880, 7685, 66459, 120173, 65540, 119618, 625, 8187, 42861, 1113, - 7236, 7915, 3630, 120176, 8179, 74264, 67886, 9316, 10980, 2489, 65624, - 8150, 1359, 67652, 127329, 127330, 73756, 5042, 5041, 42769, 12084, - 127324, 127321, 92279, 127319, 127320, 127317, 127318, 127315, 12283, - 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 0, 3239, - 127311, 0, 0, 8431, 0, 42164, 0, 11778, 12620, 6826, 73773, 119073, 5040, - 0, 0, 983443, 78420, 0, 5039, 0, 78418, 0, 5038, 0, 0, 13184, 74293, 0, - 64648, 0, 9359, 78416, 0, 128770, 65157, 6662, 0, 0, 3863, 73909, 4835, - 55266, 43432, 127822, 4309, 7127, 194569, 0, 194568, 1301, 0, 42589, 569, - 0, 73813, 711, 4389, 7133, 0, 73880, 11610, 11368, 0, 194570, 41331, - 1006, 74240, 0, 1550, 8201, 73737, 7627, 5499, 5031, 77908, 42738, 65784, - 77907, 65267, 3758, 0, 65781, 64734, 70073, 2440, 65780, 77913, 8449, 0, - 5008, 983572, 2118, 0, 12121, 8255, 5512, 73875, 2128, 2130, 2131, 2126, - 2133, 1119, 127068, 2114, 2116, 2455, 0, 2122, 2123, 2124, 2125, 127486, - 8714, 983820, 2113, 0, 2115, 128177, 127907, 43713, 5052, 66220, 5821, - 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, 388, 41115, 735, - 6637, 5907, 65088, 0, 12726, 74594, 9117, 983181, 12003, 5513, 6666, - 5053, 74230, 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, 0, 92237, - 74807, 0, 5048, 5047, 0, 0, 0, 92313, 0, 74497, 92395, 8089, 6929, 639, - 983563, 68179, 64442, 0, 92348, 4599, 41402, 6674, 43397, 43294, 1476, - 648, 0, 65819, 3233, 0, 41782, 6951, 94017, 983976, 3530, 9750, 128317, - 0, 6656, 42618, 0, 5046, 8512, 65856, 74261, 8967, 0, 5045, 42026, 1916, - 7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, 74004, 9669, - 12341, 12703, 8402, 0, 119070, 917600, 41750, 3586, 64508, 43148, 0, 0, - 119606, 67983, 13296, 517, 0, 128534, 194946, 41528, 123, 65454, 0, 0, - 74478, 10531, 7784, 41526, 10829, 73991, 8057, 1126, 73895, 0, 194591, 0, - 3925, 4251, 8069, 10517, 120439, 489, 0, 4250, 120441, 120452, 43151, - 983178, 194851, 66200, 0, 0, 0, 78423, 0, 0, 8711, 6183, 0, 0, 0, 120448, - 7623, 118925, 118889, 9235, 12760, 74176, 69662, 66445, 43540, 10062, - 3743, 11514, 11078, 0, 12136, 0, 126597, 120435, 0, 7726, 0, 19922, 267, - 3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, 10652, - 41612, 41077, 3402, 9050, 3398, 0, 983348, 0, 3391, 41075, 2476, 0, - 128017, 0, 10625, 0, 12767, 13017, 78743, 64261, 64934, 127537, 13014, - 13013, 0, 6673, 0, 0, 0, 12438, 0, 983342, 0, 983880, 126638, 9053, - 13015, 74523, 0, 704, 66215, 6195, 983828, 6660, 78758, 917760, 917793, - 42212, 12629, 11435, 0, 55256, 65538, 0, 127940, 983341, 74547, 126585, - 65448, 78100, 12948, 119001, 195002, 119238, 195004, 78099, 127085, 0, - 128320, 4287, 8276, 4902, 1131, 0, 78458, 66728, 1816, 0, 42533, 168, - 42845, 4898, 64298, 983141, 0, 4901, 1821, 0, 578, 3653, 0, 791, 9162, - 6977, 0, 78889, 74561, 0, 73731, 8354, 43590, 119303, 983449, 7557, - 119339, 119301, 8234, 7241, 0, 120671, 119167, 194996, 12811, 65925, - 3946, 78078, 10998, 78080, 673, 194867, 64397, 128276, 74599, 78449, - 8890, 194977, 194976, 2448, 78085, 10267, 8424, 2452, 78083, 128824, - 8729, 78456, 0, 7845, 917917, 71302, 4408, 4122, 6772, 11039, 8723, - 194990, 71310, 119302, 731, 119304, 92286, 2438, 64855, 119300, 119299, - 1175, 0, 42135, 373, 119172, 2119, 11457, 11521, 7723, 0, 0, 0, 41952, 0, - 5273, 2127, 5269, 6337, 5202, 2404, 5267, 42823, 11291, 19915, 5277, - 12963, 127864, 6189, 4125, 1314, 12133, 120340, 118873, 1271, 983640, 0, - 66024, 41482, 3864, 74539, 0, 3879, 0, 12978, 4166, 4574, 0, 7567, 7459, - 983160, 41390, 5384, 41882, 67647, 92548, 5759, 983912, 0, 41388, 64446, - 41392, 64288, 41387, 0, 8706, 5552, 983187, 700, 0, 5553, 0, 7088, 5356, - 7499, 68007, 66596, 74066, 0, 10263, 5554, 0, 12344, 10311, 78113, 6665, - 92626, 0, 7618, 8517, 11455, 78440, 64632, 64447, 5555, 78088, 78093, - 78091, 0, 42803, 65033, 9143, 6668, 195067, 67995, 195069, 656, 195071, - 65037, 4577, 64624, 0, 0, 0, 983649, 4269, 73885, 917775, 42846, 69644, - 950, 0, 92273, 66580, 118895, 66683, 10554, 917778, 119121, 0, 5098, - 917770, 0, 119099, 5097, 4935, 9848, 10381, 0, 128870, 983701, 3651, 0, - 120730, 127556, 5102, 5101, 10269, 12983, 8138, 4517, 1932, 5100, 1439, - 12093, 1247, 10034, 195064, 5099, 78373, 1441, 42087, 3063, 650, 0, 7838, - 0, 195041, 195040, 119142, 9031, 120790, 128582, 9078, 8545, 66356, - 128799, 0, 9154, 9118, 126543, 0, 2676, 2277, 0, 73812, 6190, 8599, - 195053, 69918, 10795, 9857, 7014, 9856, 195033, 92620, 12129, 0, 8481, 0, - 6202, 195035, 10920, 128237, 5203, 195039, 195038, 5108, 5107, 65818, - 66019, 9762, 0, 5541, 74772, 0, 12613, 5284, 6657, 207, 128806, 4275, - 74819, 854, 68147, 74381, 0, 78786, 5103, 127861, 64348, 41368, 43974, - 488, 69811, 0, 71339, 10157, 0, 43034, 11438, 64674, 0, 92694, 68431, - 41771, 5106, 6669, 8504, 65154, 69813, 41367, 5105, 127509, 69720, 6476, - 5104, 983749, 304, 3176, 119010, 0, 932, 120633, 6567, 238, 69656, - 195011, 194595, 19905, 120577, 195015, 78870, 41044, 67640, 194902, - 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, 8803, 309, - 6622, 8151, 10858, 78706, 67636, 0, 12568, 0, 12553, 10814, 43275, 6950, - 9712, 68680, 43970, 983198, 65165, 92725, 0, 66466, 0, 0, 0, 66725, 6191, - 11351, 10437, 11316, 67634, 43763, 0, 41754, 67635, 9370, 2720, 194975, - 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, - 94095, 917547, 92682, 67679, 195020, 0, 7781, 41383, 64568, 0, 120738, - 12077, 0, 64586, 917620, 42396, 55255, 3475, 128035, 2479, 0, 3632, - 120728, 10698, 8376, 3648, 194960, 74844, 67639, 3636, 67894, 3650, 8837, - 65229, 1843, 42283, 43250, 41562, 9100, 74548, 917630, 3640, 127190, - 42321, 7284, 194974, 194973, 194950, 194949, 194952, 194951, 126649, - 194953, 42080, 2529, 0, 0, 0, 42083, 120678, 68398, 194957, 67619, 66367, - 194958, 9634, 92380, 9988, 0, 41068, 0, 4295, 65264, 68006, 0, 92545, 0, - 785, 8236, 128647, 9027, 68160, 67623, 64383, 120265, 925, 127156, 0, - 41985, 41071, 9586, 0, 41984, 9217, 0, 0, 0, 9186, 2067, 4016, 983803, 0, - 381, 12936, 0, 42077, 0, 69880, 5184, 42078, 194947, 10810, 128531, 4585, - 19943, 5860, 67633, 0, 0, 812, 3615, 0, 5178, 44000, 120548, 78807, 5188, - 74287, 67629, 3605, 10692, 1166, 64429, 42639, 924, 0, 67631, 42616, - 120670, 2442, 10703, 78789, 67632, 917924, 12771, 12736, 12753, 66708, - 73933, 67626, 42401, 0, 69872, 127373, 42288, 12751, 0, 8542, 13145, - 194963, 2468, 66706, 41294, 3626, 3883, 64388, 42479, 0, 41117, 0, 92580, - 0, 0, 67624, 0, 1290, 0, 65585, 2715, 806, 65208, 41884, 917883, 1318, - 64731, 126578, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 983781, - 12752, 5833, 1432, 0, 41883, 73912, 9799, 0, 41886, 2480, 0, 2062, - 127293, 6494, 5537, 78656, 0, 194587, 0, 1211, 0, 0, 0, 118832, 12318, 0, - 0, 68005, 10622, 983779, 0, 78654, 6566, 78659, 0, 73780, 119196, 64864, - 0, 78660, 0, 8284, 13081, 0, 3589, 42051, 4035, 6492, 92236, 4265, 6642, - 3977, 74186, 41778, 836, 119216, 2488, 0, 4582, 0, 0, 41777, 12926, - 983377, 7528, 10550, 0, 92706, 0, 10961, 0, 1374, 64878, 119014, 0, - 42389, 41374, 2286, 0, 78492, 41377, 127909, 0, 400, 12597, 120586, 0, 0, - 6661, 983145, 64827, 0, 73817, 390, 0, 71301, 983862, 3473, 7718, 0, 0, - 0, 55285, 0, 0, 0, 11969, 983390, 127841, 6365, 1887, 6763, 983370, 8080, - 7006, 0, 983371, 6757, 64351, 1544, 0, 6766, 64677, 120716, 983372, 6146, - 0, 771, 983373, 0, 12812, 13168, 42272, 12200, 917927, 7904, 0, 953, - 12917, 119560, 12300, 0, 11491, 9724, 10341, 983773, 9524, 7490, 11389, - 7489, 3379, 0, 7487, 0, 471, 7484, 7482, 6753, 7480, 5764, 7478, 7477, - 6501, 7475, 6918, 7473, 7472, 2474, 7470, 7468, 10232, 10615, 10213, - 127288, 92357, 10049, 11834, 3544, 0, 6017, 65311, 127481, 120216, 13306, - 10533, 7870, 73949, 7625, 0, 120544, 0, 0, 92660, 0, 0, 0, 19961, 2472, - 42665, 92341, 0, 2139, 4256, 120776, 74380, 0, 42675, 42658, 12845, 0, 0, - 65138, 119355, 67862, 0, 65671, 7083, 120008, 8066, 7678, 74865, 0, 0, 0, - 0, 7186, 0, 120555, 0, 445, 120566, 128308, 0, 0, 8330, 0, 0, 42797, - 983150, 120215, 0, 3902, 0, 1770, 0, 128866, 1560, 120209, 194972, 4584, - 73843, 0, 11712, 10866, 118928, 1118, 71334, 0, 0, 1081, 7436, 68420, - 7252, 0, 5996, 69921, 4903, 0, 41386, 5162, 119189, 1330, 0, 7139, 0, - 12047, 41384, 0, 0, 1848, 4334, 6324, 41975, 64777, 10674, 12308, 12186, - 0, 0, 983741, 12715, 68002, 983479, 126630, 2018, 66672, 41979, 66685, - 119157, 68000, 92464, 0, 126984, 68001, 9334, 92705, 92315, 70101, 7975, - 0, 77957, 0, 66621, 4884, 66597, 69732, 0, 0, 6313, 65513, 69857, 0, 0, - 0, 2345, 43697, 463, 0, 0, 119607, 3117, 5460, 0, 0, 983387, 0, 42279, - 194577, 0, 78415, 0, 195008, 983384, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, - 0, 0, 2482, 1471, 0, 0, 42247, 12378, 73925, 69664, 0, 12374, 0, 0, 0, - 983694, 2460, 0, 11944, 12376, 127868, 64679, 0, 12380, 10557, 64473, - 5870, 0, 2024, 127180, 0, 0, 539, 0, 127765, 94052, 3853, 65180, 127923, - 120796, 120245, 92324, 0, 8659, 0, 12474, 92579, 9503, 194969, 2478, 0, - 4162, 0, 4260, 12953, 69633, 120089, 12470, 0, 74189, 2742, 12476, 11798, - 10946, 127310, 5000, 0, 983579, 0, 69672, 8213, 74017, 7771, 6161, 68018, - 6709, 0, 78885, 983708, 127971, 120582, 78547, 0, 10301, 10333, 10397, 0, - 0, 73791, 0, 0, 0, 0, 119123, 4014, 12842, 73952, 12015, 127290, 8275, - 3893, 983264, 0, 12210, 7221, 42147, 0, 74550, 74465, 64747, 118841, 0, - 12516, 4444, 0, 92271, 74537, 10892, 8231, 0, 6473, 41968, 78388, 41973, - 3591, 41969, 0, 2453, 128549, 92666, 64705, 0, 0, 10349, 10413, 43591, - 41962, 3202, 74353, 0, 8316, 0, 0, 94060, 687, 0, 0, 0, 1840, 0, 68671, - 119809, 4883, 285, 4723, 70099, 92692, 4459, 74577, 42921, 41720, 11089, - 240, 19906, 0, 42323, 0, 9743, 120232, 13134, 126535, 0, 0, 0, 0, 42634, - 983343, 43437, 3081, 11463, 120154, 0, 0, 10445, 0, 0, 66717, 2614, 9125, - 119023, 1729, 0, 120236, 65221, 63883, 43334, 64852, 0, 65194, 66201, 0, - 66578, 5001, 41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, 5150, - 73889, 74182, 127915, 643, 3086, 0, 42448, 42299, 58, 0, 917952, 120083, - 63873, 8491, 0, 0, 983623, 4530, 42409, 7126, 194575, 2721, 120074, - 119096, 19929, 0, 194574, 0, 4242, 4264, 120077, 120530, 66179, 42412, - 65941, 13114, 64522, 10740, 3094, 0, 9754, 119102, 4437, 73948, 127074, - 983238, 55280, 42174, 194925, 42430, 0, 0, 42355, 66026, 4306, 41380, - 68432, 92586, 0, 66667, 127309, 0, 126521, 42200, 42566, 0, 0, 5088, - 6948, 0, 8524, 0, 0, 12385, 0, 0, 69646, 1386, 64580, 11480, 6116, 65039, - 65038, 12392, 65036, 8064, 0, 12101, 5822, 119004, 2080, 710, 77999, - 11663, 1666, 42091, 119657, 12383, 43671, 42092, 68418, 4289, 0, 63896, - 12061, 42096, 43621, 3362, 12377, 983832, 983834, 68449, 7461, 73901, - 1244, 331, 73786, 12683, 10662, 0, 8112, 0, 65852, 0, 12379, 194877, - 120818, 41964, 42208, 63843, 2084, 41965, 0, 65866, 4327, 0, 63840, - 78549, 41220, 13032, 0, 584, 12933, 43177, 12373, 69855, 13000, 1351, - 2935, 8698, 12665, 0, 1930, 0, 78229, 12427, 66514, 69859, 13031, 0, - 63901, 0, 3657, 128572, 65202, 6000, 119206, 12426, 127181, 0, 41740, - 12428, 41283, 41916, 119210, 0, 0, 12429, 6727, 0, 7562, 0, 5170, 0, - 41755, 676, 0, 66704, 66664, 9978, 66491, 3536, 0, 9752, 92397, 6162, 0, - 69228, 10113, 41829, 65886, 5159, 12422, 41832, 439, 43077, 0, 42207, - 74549, 11796, 40970, 41830, 0, 917799, 8308, 917797, 917796, 0, 67864, - 917801, 917800, 12336, 4135, 69805, 341, 2727, 4129, 3539, 0, 63861, 0, - 7913, 0, 63859, 4131, 63868, 0, 63867, 4133, 11371, 210, 4600, 0, 74560, - 4137, 8082, 78506, 119062, 78504, 6704, 4591, 128029, 0, 0, 9680, 0, - 120623, 561, 12159, 195, 78508, 41501, 0, 42031, 5719, 7172, 42687, 8368, - 0, 41499, 0, 0, 42242, 41498, 917794, 42025, 78565, 65805, 42463, 0, - 2924, 0, 120510, 0, 0, 119213, 73941, 0, 42330, 917784, 3969, 0, 0, 7169, - 1992, 9652, 73977, 7246, 42086, 126615, 2219, 0, 0, 128801, 194837, 0, - 327, 0, 9042, 917777, 917776, 65148, 12433, 917781, 127276, 917779, - 12431, 8668, 12434, 983835, 917782, 5999, 0, 7712, 12432, 128243, 43653, - 1726, 1015, 0, 8212, 0, 128014, 42423, 119066, 0, 128108, 66709, 0, 8811, - 927, 0, 0, 12436, 983245, 42021, 0, 0, 1299, 12240, 42350, 65143, 0, - 195016, 0, 78197, 11348, 0, 78037, 9194, 983184, 0, 19914, 12179, 983812, - 2296, 194923, 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, - 64651, 0, 41503, 127478, 11265, 0, 120756, 194922, 0, 5664, 3972, 0, 0, - 0, 128508, 12416, 917764, 119608, 10816, 917769, 917768, 12418, 74111, - 3882, 8532, 917771, 1573, 128648, 119847, 4596, 66339, 12417, 66001, - 65343, 126491, 12414, 8287, 68219, 195017, 68108, 1143, 119169, 119846, - 12415, 6626, 42763, 0, 118884, 9021, 120783, 0, 11724, 0, 0, 127104, - 126619, 0, 0, 8027, 10997, 9171, 12741, 11400, 71305, 194799, 0, 128239, - 0, 128881, 119604, 127523, 120190, 194773, 67608, 128214, 42368, 0, 7715, - 3881, 41487, 12118, 42514, 68651, 0, 983895, 3009, 41476, 41489, 69825, - 3007, 1448, 3018, 194809, 3889, 8521, 5083, 5082, 119859, 120184, 8519, - 983241, 3014, 5081, 65853, 120715, 0, 68014, 69951, 5079, 64802, 42210, - 4597, 65532, 11828, 120185, 12371, 0, 8407, 0, 10805, 8518, 10779, - 120188, 71303, 983933, 12367, 42170, 0, 92557, 629, 1924, 0, 12037, - 74366, 5987, 8462, 8005, 12365, 63933, 69735, 120815, 12369, 10649, - 67981, 5077, 120174, 10880, 63927, 5075, 917881, 0, 65075, 0, 11007, - 983705, 66659, 92607, 0, 66684, 0, 3434, 4954, 1904, 0, 5266, 126980, - 5272, 10499, 4507, 9578, 63923, 120177, 7979, 0, 9831, 0, 194926, 461, - 9803, 0, 4504, 1505, 0, 6325, 5276, 43021, 120488, 0, 55236, 0, 66461, - 5177, 41324, 12055, 8722, 0, 41327, 0, 66695, 4114, 409, 4383, 8900, - 8948, 41325, 0, 721, 10182, 9108, 71311, 0, 119185, 42229, 194912, 0, - 5998, 0, 42353, 74825, 0, 12587, 94104, 78571, 0, 71328, 194562, 41576, - 42215, 78570, 119207, 0, 8578, 5995, 7573, 41575, 74789, 74752, 63944, - 63949, 64767, 2670, 4167, 194796, 11723, 0, 74120, 0, 65076, 938, 43414, - 73854, 11737, 9721, 0, 0, 0, 11742, 2419, 0, 11493, 12334, 194913, 4153, - 12302, 10793, 5250, 12407, 11978, 4404, 9189, 12401, 42007, 5775, 6759, - 65806, 43997, 0, 42002, 12404, 983553, 0, 4940, 12410, 7683, 1167, 73729, - 4983, 120507, 861, 0, 0, 0, 0, 43757, 43370, 0, 0, 11956, 0, 0, 0, 9616, - 6631, 0, 12816, 43759, 42218, 12710, 68674, 12721, 4101, 66185, 0, 5992, - 7616, 195044, 0, 12577, 0, 983884, 853, 42693, 195014, 0, 983647, 5016, - 43535, 63893, 42835, 9491, 917913, 0, 917914, 0, 12712, 7105, 127807, - 65060, 120797, 9900, 7750, 0, 194919, 0, 127830, 0, 64778, 12585, 10565, - 128151, 12177, 0, 0, 0, 77824, 0, 4900, 127874, 12878, 92630, 8984, 4119, - 74768, 8971, 78593, 43113, 9702, 78594, 11025, 9245, 13048, 4927, 4138, - 74185, 92481, 92710, 12397, 77827, 0, 13054, 12394, 0, 0, 0, 13053, 0, - 3948, 10781, 1546, 0, 5010, 1680, 10507, 78590, 78583, 0, 0, 0, 194915, - 7267, 0, 74833, 128181, 5993, 2819, 0, 12706, 77840, 1893, 7266, 63915, - 7264, 7265, 0, 1363, 0, 63997, 63910, 63996, 3077, 0, 0, 1512, 69929, - 12589, 41479, 128313, 0, 43339, 73776, 9836, 120727, 0, 41481, 43335, - 7832, 42343, 3090, 43337, 817, 1664, 1850, 128841, 3079, 11340, 42408, - 42447, 127140, 120020, 42307, 12386, 42304, 917555, 0, 12389, 0, 92366, - 41996, 11526, 63985, 5864, 1147, 63992, 42887, 1987, 92718, 5480, 7858, - 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, 41686, 63905, 119601, - 194688, 983190, 0, 12649, 0, 0, 8247, 507, 91, 2042, 120775, 43643, - 194689, 66028, 10036, 41844, 119813, 774, 119829, 0, 119815, 5994, 12539, - 0, 78375, 120597, 119833, 983105, 119600, 0, 0, 7719, 6026, 2486, 128312, - 119808, 162, 0, 65219, 41073, 9687, 41681, 6304, 119812, 66196, 194881, - 5262, 0, 55233, 12681, 42379, 0, 7534, 12219, 0, 127528, 42810, 10492, 0, - 983661, 0, 43119, 0, 120753, 12403, 2500, 195013, 0, 4899, 12729, 0, 0, - 74113, 2343, 4103, 19946, 74112, 77851, 13112, 0, 195012, 12859, 70087, - 120148, 66369, 5861, 127758, 11999, 12400, 0, 983839, 12645, 5146, 11320, - 68410, 6748, 65040, 0, 64184, 12974, 64183, 67613, 120645, 5147, 0, 0, - 74524, 0, 1928, 0, 67649, 5991, 3445, 67609, 4976, 64176, 0, 67610, 8241, - 0, 77868, 4206, 0, 0, 0, 128298, 0, 10138, 0, 0, 8897, 120234, 0, 8357, - 4124, 77862, 65836, 120641, 127926, 77859, 0, 0, 1123, 963, 41553, 10120, - 12405, 120150, 92664, 398, 13278, 9723, 6366, 120311, 7945, 0, 4402, - 9970, 12402, 983136, 42392, 1305, 12408, 0, 44007, 0, 0, 41464, 12411, - 12969, 120824, 41465, 983565, 8528, 1575, 0, 63955, 165, 3024, 41467, - 119163, 0, 9093, 0, 9147, 128787, 63958, 0, 9148, 9692, 4096, 53, 8296, - 6750, 195018, 0, 9594, 0, 0, 43527, 0, 727, 194703, 195023, 5805, 0, - 6726, 0, 42176, 12370, 11655, 119095, 10591, 2280, 0, 12372, 120642, - 120307, 0, 92343, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, - 194701, 10803, 4132, 120306, 68474, 92473, 0, 983313, 74837, 120155, - 1499, 0, 8055, 42740, 63965, 0, 63962, 74042, 8924, 43123, 5988, 3660, - 63969, 11781, 42718, 8788, 1357, 64851, 65743, 0, 8774, 0, 127086, 9941, - 120172, 0, 1933, 69655, 9564, 0, 92435, 73866, 0, 0, 2487, 67614, 3121, - 1804, 3311, 67615, 70081, 78302, 12220, 67616, 120598, 127475, 0, 68200, - 6675, 128144, 0, 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, 510, - 64663, 0, 0, 4561, 2101, 1398, 0, 92554, 74034, 41569, 92684, 11406, - 8167, 12127, 0, 840, 0, 126518, 7101, 6967, 0, 194898, 9796, 0, 333, - 69891, 0, 8144, 2117, 0, 983595, 12406, 0, 19931, 119089, 6678, 7769, 0, - 12621, 0, 127366, 10227, 4764, 43101, 9981, 0, 40986, 4127, 66487, 0, - 42202, 12754, 195022, 0, 0, 94097, 67594, 2048, 12944, 4050, 67595, - 917967, 43102, 10581, 12985, 4533, 195021, 74003, 6490, 0, 12038, 0, 0, - 120704, 65461, 9798, 69704, 0, 1948, 69841, 0, 952, 128235, 0, 0, 120802, - 6449, 9494, 120313, 0, 43098, 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, - 119973, 0, 12817, 67597, 6676, 3930, 42615, 0, 0, 67598, 0, 0, 0, 65591, - 41581, 65916, 1453, 0, 0, 0, 8500, 42222, 120142, 73743, 120400, 4317, - 11543, 67676, 64676, 0, 0, 67606, 119083, 0, 42217, 13102, 0, 66003, - 6672, 0, 0, 0, 983747, 63841, 9613, 9001, 4526, 11274, 67601, 64520, - 64210, 6664, 78704, 42056, 10228, 64957, 11281, 0, 3807, 1469, 66640, - 65381, 42197, 4988, 42372, 0, 9598, 904, 352, 42225, 1451, 8061, 8453, - 4134, 0, 74847, 66576, 127916, 0, 10520, 8575, 9960, 1201, 127289, 12846, - 127291, 127292, 11919, 64962, 127287, 43739, 127281, 8511, 9460, 823, - 11587, 12305, 0, 64695, 127305, 12387, 1253, 13183, 65766, 500, 42783, - 65765, 64208, 64369, 65760, 65761, 119585, 11606, 64784, 11702, 66498, - 9821, 64304, 0, 5152, 11048, 7533, 68366, 64410, 92305, 0, 4323, 120062, - 92669, 71332, 127052, 42587, 42214, 41394, 0, 4763, 4112, 118935, 0, - 5260, 43143, 94038, 326, 120131, 68423, 0, 10771, 2876, 74074, 92530, - 194924, 41398, 7382, 9802, 127077, 127076, 453, 41396, 120524, 42720, - 12140, 9572, 0, 7003, 194883, 42334, 7704, 126490, 194885, 43144, 4123, - 8494, 43146, 9977, 0, 0, 65759, 10765, 64061, 4465, 9808, 64056, 65582, - 4126, 0, 9521, 9589, 64755, 0, 64020, 126604, 10464, 0, 0, 194869, 64514, - 11528, 64024, 128072, 679, 64013, 0, 5850, 758, 7536, 0, 92234, 41441, - 10693, 64006, 983567, 64005, 4058, 119019, 126487, 64660, 0, 119050, 0, - 983069, 1139, 43298, 64027, 64029, 8970, 0, 9934, 983094, 10774, 128020, - 42201, 12421, 128216, 0, 1852, 3057, 64046, 73744, 64034, 64039, 0, 0, 0, - 194899, 92322, 7645, 12854, 74338, 3496, 0, 0, 0, 9102, 627, 127795, - 6158, 8327, 74553, 66632, 12419, 13309, 11570, 127811, 19960, 11696, 0, - 1018, 118970, 194909, 194897, 1682, 194896, 194911, 42756, 6765, 194906, - 0, 0, 73814, 11412, 6768, 10728, 194830, 71316, 118863, 43311, 64966, - 11577, 0, 43040, 1833, 11576, 0, 74779, 0, 185, 65085, 74533, 64754, - 194848, 7535, 8085, 42525, 120387, 9749, 41701, 6131, 1949, 4117, 7847, - 120489, 194711, 64483, 65693, 0, 0, 0, 69695, 42240, 0, 126651, 42864, - 126498, 64667, 41868, 1184, 0, 815, 11484, 127535, 67840, 983651, 0, - 66197, 0, 10986, 64683, 983785, 0, 3455, 0, 0, 9879, 0, 0, 4158, 128050, + 64128, 66286, 93042, 128830, 64132, 10867, 64130, 64129, 983844, 43374, + 9779, 2764, 66002, 10167, 9471, 0, 66021, 74509, 0, 5457, 5440, 8857, + 93981, 65282, 2843, 5355, 127928, 983965, 69971, 5194, 11657, 43984, + 128292, 113724, 128872, 0, 0, 72393, 10717, 64570, 5630, 5396, 64143, + 10682, 0, 10602, 800, 42499, 66186, 0, 0, 64930, 11631, 64146, 64145, + 64144, 762, 13172, 118859, 194661, 64468, 10906, 1353, 6960, 0, 128779, + 5828, 8724, 917806, 8933, 1601, 42244, 858, 7080, 64109, 64108, 8090, + 70455, 72388, 74606, 587, 0, 128131, 0, 0, 0, 78214, 2750, 74218, 556, + 64158, 64157, 78707, 12213, 194678, 2760, 0, 0, 78708, 194794, 64156, + 64155, 42496, 0, 64151, 64150, 12679, 10053, 10421, 11093, 64153, 64152, + 125016, 0, 4839, 68527, 0, 1874, 119016, 120091, 6577, 64125, 64124, + 64123, 0, 127531, 92534, 7007, 7590, 65443, 9036, 78847, 64122, 66389, + 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, 43981, 42128, + 127842, 1177, 65601, 12322, 64106, 69640, 92895, 64102, 7859, 1945, + 64099, 0, 10453, 64104, 7188, 7997, 0, 7389, 983161, 8705, 64097, 64096, + 9571, 528, 128671, 44017, 11429, 71347, 0, 983077, 917990, 73841, 0, 0, + 9056, 64313, 6188, 120019, 6155, 64068, 1823, 64066, 64065, 64072, 64071, + 63, 7233, 92212, 72414, 41904, 6639, 64064, 983775, 128344, 0, 1176, + 118959, 127930, 8162, 127019, 983831, 92747, 120519, 66376, 66242, 11415, + 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222, 69902, 7768, + 72403, 4199, 64708, 65064, 70117, 0, 8708, 9560, 64077, 64076, 8996, + 4992, 4471, 42622, 64079, 64078, 92179, 71878, 126570, 129120, 64615, + 41915, 0, 12075, 42041, 194825, 5174, 983217, 0, 127557, 3123, 0, 12685, + 119216, 8408, 64704, 0, 0, 9223, 0, 41616, 67999, 73797, 0, 1116, 128204, + 43049, 7136, 43050, 8548, 120485, 0, 119061, 917999, 0, 13115, 43675, + 64091, 9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, + 6199, 67249, 66398, 11434, 64083, 64082, 11329, 7737, 64087, 64086, + 64085, 64084, 194703, 9927, 41335, 4118, 1797, 0, 41334, 0, 46, 43448, + 127881, 298, 0, 128114, 0, 42627, 125011, 32, 6187, 119052, 11495, 11459, + 3665, 983600, 42871, 0, 19923, 74335, 0, 127192, 66239, 42264, 64403, + 4412, 7240, 92495, 917900, 983466, 65758, 12750, 4181, 8544, 119849, + 120199, 917897, 120198, 69809, 6181, 65014, 983420, 0, 983196, 3639, + 119588, 118851, 0, 118904, 10073, 120206, 128862, 127186, 68409, 42844, + 7498, 1098, 92565, 120205, 0, 128915, 10207, 8789, 93070, 0, 92973, + 128325, 9234, 0, 6182, 983473, 65058, 0, 983478, 194973, 0, 5471, 9461, + 5573, 118936, 5473, 44, 0, 66244, 94072, 0, 66238, 12844, 66894, 1622, + 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 983495, 43855, 41337, 0, + 41631, 8947, 68390, 69683, 41694, 0, 72396, 7908, 0, 10408, 6579, 0, + 64618, 0, 120147, 2138, 6583, 7761, 70005, 120504, 194828, 0, 5058, + 41010, 9992, 128299, 5057, 917941, 0, 74538, 5054, 118951, 194971, 78606, + 0, 1437, 41617, 658, 3497, 128509, 7486, 5061, 5060, 4235, 127878, 0, + 128529, 12113, 4236, 4727, 128487, 0, 7693, 10749, 120332, 7488, 5773, + 978, 128134, 0, 41619, 10239, 68611, 71864, 66209, 983423, 74135, 9748, + 983956, 127524, 0, 0, 0, 0, 195083, 0, 983843, 983300, 0, 0, 0, 92776, + 9341, 78821, 2379, 11325, 983951, 64668, 67854, 8125, 120545, 6743, + 119175, 917940, 2369, 0, 983972, 127966, 119235, 71868, 73936, 7008, + 43660, 0, 0, 43841, 2367, 127827, 983857, 264, 2375, 8060, 6194, 119858, + 1844, 119084, 129049, 6019, 0, 0, 6961, 0, 70435, 67171, 8800, 0, 42862, + 4463, 65581, 6192, 127900, 42771, 0, 92333, 725, 65042, 93014, 120800, + 983040, 12892, 0, 67149, 0, 0, 0, 0, 127261, 12224, 983128, 129061, 5074, + 5073, 128790, 8983, 118981, 74493, 71231, 5072, 74547, 6198, 11614, 0, + 196, 0, 0, 0, 4929, 120342, 0, 0, 127987, 0, 42847, 119856, 0, 67754, + 4934, 0, 41323, 9758, 0, 92289, 70181, 42584, 0, 4329, 41321, 4979, 3048, + 7752, 41320, 983042, 64667, 12819, 983870, 5071, 127915, 3642, 67334, + 5070, 10042, 113813, 3987, 5068, 0, 8909, 78650, 78649, 69917, 10636, + 73981, 11806, 43167, 4531, 1245, 9105, 66463, 4921, 120219, 4926, 65544, + 73884, 194619, 0, 0, 64709, 0, 194620, 78880, 4922, 325, 992, 119568, + 4925, 127218, 0, 9526, 4920, 128617, 948, 0, 120208, 4930, 983225, 92175, + 120275, 4933, 113779, 0, 118985, 4928, 0, 0, 74770, 120194, 126548, 722, + 194934, 19908, 12637, 127485, 119855, 8753, 1509, 0, 5468, 9511, 43493, + 127477, 1672, 6205, 10864, 74586, 127480, 70103, 92694, 78555, 127468, + 73863, 126577, 68336, 41607, 120115, 1679, 120116, 120180, 92761, 127462, + 7005, 41609, 9580, 70431, 401, 69949, 43779, 6968, 5761, 342, 8553, 0, + 8143, 127115, 11983, 92249, 624, 74508, 4057, 43788, 5078, 74258, 12478, + 0, 5076, 0, 194609, 0, 8295, 685, 9025, 1524, 12618, 0, 5539, 129182, + 92523, 120101, 7138, 120552, 43504, 194611, 66914, 65794, 12520, 8058, + 9732, 92480, 5080, 64775, 5036, 5035, 120590, 42604, 983656, 0, 8074, + 275, 13291, 1907, 78838, 4432, 127271, 5033, 127273, 120818, 4836, 3888, + 73792, 10729, 64546, 127262, 43704, 127264, 92957, 67588, 119000, 124983, + 70360, 8858, 6409, 7663, 120252, 128100, 119007, 0, 66321, 94052, 12814, + 127248, 3432, 10218, 0, 6094, 7641, 42445, 128792, 92487, 42406, 1676, + 67362, 74862, 67365, 5030, 67364, 118810, 195008, 73869, 9622, 113763, + 69944, 6787, 67361, 0, 0, 68319, 10544, 12919, 73812, 72397, 0, 0, 69906, + 120789, 983041, 947, 67695, 67367, 194585, 10969, 67228, 7613, 92562, + 119936, 4795, 119930, 7018, 7376, 120181, 120192, 120268, 0, 43567, + 74056, 917910, 11833, 119919, 7216, 65232, 7217, 251, 7218, 7895, 4395, + 43538, 119926, 119929, 119928, 7213, 68476, 7214, 7215, 5879, 74141, + 8880, 7685, 66459, 120173, 65540, 67359, 625, 8187, 42861, 1113, 7236, + 7915, 3630, 120176, 8179, 70163, 67886, 9316, 10980, 2489, 65624, 8150, + 1359, 67652, 70464, 127330, 73756, 5042, 5041, 42769, 12084, 127324, + 127321, 74410, 127319, 127320, 127317, 127318, 127315, 12283, 1616, 3795, + 67732, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 67724, 3239, 66893, + 0, 0, 8431, 0, 42164, 71229, 11778, 12620, 6826, 73773, 70169, 5040, 0, + 0, 67094, 78420, 0, 5039, 983678, 78418, 0, 5038, 0, 0, 13184, 74293, 0, + 64648, 0, 9359, 78416, 917623, 128770, 65157, 6662, 0, 70182, 3863, + 73909, 4835, 55266, 43432, 127822, 4309, 7127, 194569, 0, 194568, 1301, + 0, 42589, 569, 128804, 73813, 711, 4389, 7133, 120643, 73880, 11610, + 11368, 0, 194570, 41331, 1006, 74240, 67224, 1550, 8201, 70453, 7627, + 5499, 5031, 77908, 42738, 65784, 77907, 65267, 3758, 0, 65781, 64734, + 67222, 2440, 65780, 70787, 8449, 0, 5008, 983572, 2118, 126508, 12121, + 8255, 5512, 73875, 2128, 2130, 2131, 2126, 2133, 1119, 127067, 2114, + 2116, 2455, 113798, 2122, 2123, 2124, 2125, 127486, 8714, 983820, 2113, + 917985, 2115, 128177, 127907, 43713, 5052, 66220, 5821, 6186, 65778, + 65775, 5051, 65773, 1429, 42647, 5050, 302, 388, 41115, 735, 6637, 5907, + 65088, 0, 12726, 74594, 9117, 983181, 12003, 5513, 6666, 5053, 74230, + 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, 71251, 92237, 74807, 0, + 5048, 5047, 0, 0, 74201, 92313, 0, 74497, 92395, 8089, 6929, 639, 983563, + 68179, 64442, 70180, 92348, 4599, 41402, 6674, 43397, 43294, 1476, 648, + 0, 65819, 3233, 0, 41782, 6951, 94017, 983976, 3530, 9750, 128317, + 128122, 6656, 42618, 70175, 5046, 8512, 65856, 74261, 8967, 0, 5045, + 42026, 1916, 7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, + 74004, 9669, 12341, 12703, 8402, 0, 119070, 70174, 41750, 3586, 64508, + 43148, 0, 127971, 119606, 67983, 13296, 517, 0, 128534, 194946, 41528, + 123, 65454, 0, 194856, 74478, 10531, 7784, 41526, 10829, 73991, 8057, + 1126, 73895, 194857, 194591, 0, 3925, 4251, 8069, 10517, 71112, 489, + 71110, 4250, 120441, 120452, 43151, 983178, 92738, 66200, 0, 0, 125026, + 74298, 128879, 983474, 8711, 6183, 0, 983952, 72402, 120448, 7623, + 118925, 118889, 9235, 12760, 74176, 69662, 66445, 43540, 10062, 3743, + 11514, 11078, 0, 12136, 0, 126597, 120435, 194850, 7726, 195095, 19922, + 267, 3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, + 10652, 41612, 41077, 3402, 9050, 3398, 917796, 983348, 0, 3391, 41075, + 2476, 0, 128017, 0, 10625, 129106, 12767, 13017, 78743, 64261, 64934, + 70152, 13014, 13013, 0, 6673, 0, 0, 0, 12438, 0, 983342, 0, 983880, + 126638, 9053, 13015, 74523, 0, 704, 66215, 6195, 983828, 6660, 78758, + 917760, 74861, 42212, 12629, 11435, 0, 55256, 65538, 67343, 127940, + 129086, 43876, 126585, 65448, 78100, 12948, 119001, 195002, 119238, + 195004, 78099, 127085, 0, 128320, 4287, 8276, 4902, 1131, 983606, 78458, + 66728, 1816, 0, 42533, 168, 42845, 4898, 64298, 195012, 78105, 4901, + 1821, 0, 578, 3653, 128946, 791, 9162, 6977, 74196, 78889, 70160, 0, + 73731, 8354, 43590, 119303, 983449, 7557, 119108, 67378, 8234, 7241, + 983448, 113735, 119167, 194996, 12811, 65925, 3946, 78078, 10998, 78080, + 673, 194867, 64397, 128276, 74599, 78449, 8890, 194977, 194976, 2448, + 78085, 10267, 8424, 2452, 78083, 67217, 8729, 78456, 0, 7845, 126564, + 71302, 4408, 4122, 6772, 11039, 8723, 65896, 71310, 119302, 731, 119304, + 71904, 2438, 64855, 119300, 119299, 1175, 0, 42135, 373, 119172, 2119, + 11457, 11521, 7723, 128639, 0, 0, 41952, 93023, 5273, 2127, 5269, 6337, + 5202, 2404, 5267, 42823, 11291, 19915, 5277, 12963, 70320, 6189, 4125, + 1314, 12133, 120340, 118873, 1271, 983640, 0, 66024, 41482, 3864, 9204, + 0, 3879, 0, 12978, 4166, 4574, 0, 7567, 7459, 78128, 41390, 5384, 41882, + 67647, 70154, 5759, 983912, 0, 41388, 64446, 41392, 64288, 41387, 67201, + 8706, 5552, 983187, 700, 0, 5553, 0, 7088, 5356, 7499, 68007, 66596, + 74066, 67251, 10263, 5554, 0, 12344, 10311, 78113, 6665, 11115, 0, 7618, + 8517, 11455, 78440, 64632, 64447, 5555, 78088, 78093, 78091, 0, 42803, + 65033, 9143, 6668, 67288, 67995, 195069, 656, 195071, 65037, 4577, 64624, + 0, 0, 71912, 983649, 4269, 73885, 917775, 42846, 69644, 950, 0, 92273, + 66580, 118895, 66683, 10554, 119008, 119121, 6832, 5098, 917768, 194668, + 70403, 5097, 4935, 9848, 10381, 0, 67296, 92896, 3651, 0, 67294, 70848, + 5102, 5101, 10269, 12983, 8138, 4517, 1932, 5100, 1439, 12093, 1247, + 10034, 195064, 5099, 78373, 1441, 42087, 3063, 650, 119953, 7838, 0, + 128655, 195040, 119142, 9031, 70829, 78427, 9078, 8545, 66356, 128799, + 194923, 9154, 9118, 126543, 0, 2676, 2277, 128422, 68237, 6190, 8599, + 125118, 69918, 10795, 9857, 7014, 9856, 195033, 71903, 12129, 0, 8481, 0, + 6202, 67711, 10920, 113726, 5203, 195039, 195038, 5108, 5107, 65818, + 66019, 9762, 11205, 5541, 74772, 0, 12613, 5284, 6657, 207, 128806, 4275, + 74819, 854, 68147, 74381, 66816, 78786, 5103, 127861, 64348, 41368, + 43974, 488, 69811, 0, 71339, 10157, 194737, 43034, 11438, 64674, 0, + 70158, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, 5105, 127509, + 69720, 6476, 5104, 983749, 304, 3176, 78871, 70149, 932, 113683, 6567, + 238, 69656, 78432, 194595, 19905, 43850, 195015, 78870, 41044, 67640, + 67302, 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 93039, 8803, + 309, 6622, 8151, 10858, 78706, 67636, 70171, 12568, 0, 12553, 10814, + 43275, 6950, 9712, 68680, 43970, 126535, 65165, 92725, 0, 66466, 124986, + 0, 0, 66725, 6191, 11351, 10437, 11316, 67634, 43763, 0, 41754, 67635, + 9370, 2720, 194600, 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 983047, + 93067, 10834, 983127, 0, 65732, 94095, 917547, 92682, 67679, 129150, + 67309, 7781, 41383, 64568, 67311, 120738, 12077, 74433, 64586, 917620, + 42396, 55255, 3475, 67260, 2479, 67306, 3632, 120728, 10698, 8376, 3648, + 67263, 74844, 67639, 3636, 67894, 3650, 8837, 65229, 1843, 42283, 43250, + 41562, 9100, 74548, 917630, 3640, 127190, 42321, 7284, 92880, 118987, + 194950, 194949, 74115, 194951, 126649, 194953, 42080, 2529, 0, 983784, 0, + 42083, 120678, 68398, 194957, 67619, 66367, 194958, 9634, 92380, 9988, 0, + 41068, 0, 4295, 65264, 68006, 0, 92545, 0, 785, 8236, 128647, 9027, + 68160, 67623, 64383, 120265, 925, 127156, 0, 41985, 41071, 9586, 194908, + 41984, 9217, 128372, 92510, 92218, 9186, 2067, 4016, 983803, 0, 381, + 12936, 0, 42077, 92985, 69880, 5184, 42078, 194607, 10810, 128531, 4585, + 19943, 5860, 67633, 0, 983279, 812, 3615, 72401, 5178, 44000, 120548, + 78807, 5188, 74287, 67629, 3605, 10692, 1166, 64429, 42639, 924, 0, + 67631, 42616, 120670, 2442, 10703, 67317, 67632, 67316, 12771, 12736, + 12753, 66708, 73933, 67626, 42401, 0, 69872, 127373, 42288, 12751, + 983064, 8542, 13145, 194963, 2468, 66706, 41294, 3626, 3883, 64388, + 42479, 71220, 41117, 0, 92580, 0, 0, 67624, 0, 1290, 0, 65585, 2715, 806, + 65208, 41884, 917883, 1318, 64731, 126578, 0, 0, 66325, 3465, 2405, 9240, + 983858, 12756, 65259, 0, 983781, 12752, 5833, 1432, 66396, 41883, 73912, + 9799, 0, 41886, 2480, 0, 2062, 67326, 6494, 5537, 78656, 0, 194587, + 124969, 1211, 0, 0, 67269, 118832, 12318, 129024, 113796, 68005, 10622, + 983779, 0, 78654, 6566, 71195, 0, 73780, 119196, 64864, 0, 78660, 0, + 8284, 13081, 119206, 3589, 42051, 4035, 6492, 92236, 4265, 6642, 3977, + 74186, 41778, 836, 92947, 2488, 129176, 4582, 0, 0, 41777, 12926, 983377, + 7528, 10550, 113761, 92706, 0, 10961, 93977, 1374, 64878, 119014, 67720, + 42389, 41374, 2286, 917604, 78492, 41377, 127909, 0, 400, 12597, 120586, + 0, 0, 6661, 983145, 64827, 0, 73817, 390, 0, 71301, 983862, 3473, 7718, + 113755, 127011, 0, 55285, 73784, 66394, 0, 11969, 120461, 127841, 6365, + 1887, 6763, 92551, 8080, 7006, 0, 118902, 6757, 64351, 1544, 67156, 6766, + 64677, 120716, 67088, 6146, 74031, 771, 120682, 0, 12812, 13168, 42272, + 12200, 66423, 7904, 0, 953, 12917, 119560, 12300, 67089, 11491, 9724, + 10341, 983773, 9524, 7490, 11389, 7489, 3379, 0, 7487, 194624, 471, 7484, + 7482, 6753, 7480, 5764, 7478, 7477, 6501, 7475, 6918, 7473, 7472, 2474, + 7470, 7468, 10232, 10615, 10213, 127288, 92357, 10049, 11834, 3544, 0, + 6017, 65311, 127481, 120216, 13306, 10533, 7870, 73949, 7625, 194882, + 120544, 0, 127950, 92660, 0, 77889, 0, 19961, 2472, 42665, 92341, 0, + 2139, 4256, 120776, 74380, 43836, 42675, 42658, 12845, 70345, 70508, + 65138, 119355, 67862, 0, 65671, 7083, 120008, 8066, 7678, 74865, 125134, + 120321, 0, 983394, 7186, 0, 120555, 0, 445, 120566, 66849, 983477, 0, + 8330, 0, 0, 42797, 113736, 120215, 93036, 3902, 0, 1770, 67091, 125067, + 1560, 120209, 194972, 4584, 73843, 0, 11712, 10866, 67092, 1118, 71334, + 0, 0, 1081, 7436, 11147, 7252, 70093, 5996, 69921, 4903, 68142, 41386, + 5162, 119189, 1330, 128613, 7139, 0, 12047, 41384, 0, 0, 1848, 4334, + 6324, 41975, 64777, 10674, 12308, 12186, 0, 0, 983741, 12715, 68002, + 983479, 126630, 2018, 66672, 41979, 66685, 119157, 68000, 78490, 0, + 126984, 68001, 9334, 92705, 70800, 70101, 7975, 0, 77957, 0, 43494, 4884, + 66597, 69732, 0, 0, 6313, 65513, 69857, 0, 0, 0, 2345, 43697, 463, 0, 0, + 68178, 3117, 5460, 0, 128717, 983387, 0, 42279, 194577, 0, 78415, 983228, + 68524, 983384, 13248, 125027, 0, 128471, 128415, 983153, 0, 5663, 127942, + 128472, 0, 0, 2482, 1471, 194583, 113747, 42247, 12378, 73925, 69664, 0, + 12374, 0, 195023, 0, 118828, 2460, 71882, 11944, 12376, 127868, 64679, + 92893, 12380, 10557, 64473, 5870, 11122, 2024, 127180, 0, 71879, 539, 0, + 127765, 70120, 3853, 65180, 127923, 120796, 120245, 92324, 0, 8659, 0, + 12474, 67241, 9503, 194969, 2478, 120248, 4162, 0, 4260, 12953, 69633, + 120089, 12470, 92640, 74189, 2742, 12476, 11798, 10946, 127310, 5000, + 113687, 983579, 128777, 69672, 8213, 43824, 7771, 6161, 68018, 6709, + 194967, 78885, 119243, 68235, 120582, 78547, 113709, 10301, 10333, 10397, + 124934, 0, 73791, 0, 0, 0, 0, 119123, 4014, 12842, 73952, 12015, 127290, + 8275, 3893, 983264, 0, 12210, 7221, 42147, 74868, 74550, 71215, 64747, + 118841, 0, 12516, 4444, 0, 92271, 74537, 10892, 8231, 0, 6473, 41968, + 78388, 41973, 3591, 41969, 0, 2453, 128549, 92666, 64705, 71068, 0, + 10349, 10413, 43591, 41962, 3202, 74353, 129175, 8316, 129174, 0, 94060, + 687, 125089, 129074, 0, 1840, 0, 68671, 11121, 4883, 285, 4723, 11175, + 92692, 4459, 74577, 42921, 41720, 11089, 240, 19906, 0, 42323, 74640, + 9743, 120232, 13134, 93065, 128956, 65931, 92579, 128329, 42634, 983343, + 43437, 3081, 11463, 120154, 0, 195013, 10445, 0, 92969, 66717, 2614, + 9125, 119023, 1729, 0, 72420, 65221, 63883, 43334, 64852, 124929, 65194, + 66201, 0, 66578, 5001, 41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, + 5150, 73889, 73764, 4039, 643, 3086, 92961, 42448, 42299, 58, 0, 917952, + 120083, 63873, 8491, 0, 0, 983623, 4530, 42409, 7126, 194575, 2721, + 120073, 119096, 19929, 0, 194574, 92975, 4242, 4264, 120077, 120530, + 66179, 42412, 65941, 13114, 64522, 10740, 3094, 983199, 9754, 119102, + 4437, 73948, 127074, 983238, 55280, 42174, 194925, 42430, 0, 983450, + 42355, 66026, 4306, 41380, 68432, 92586, 68314, 66667, 119351, 0, 126521, + 42200, 42566, 70000, 128928, 5088, 6948, 0, 8524, 125040, 0, 12385, 0, 0, + 69646, 1386, 64580, 11480, 6116, 65039, 65038, 12392, 65036, 8064, 0, + 12101, 5822, 119004, 2080, 710, 77999, 11663, 1666, 42091, 119657, 12383, + 43671, 42092, 68418, 4289, 127897, 63896, 12061, 42096, 43621, 3362, + 12377, 119934, 983834, 68449, 7461, 73901, 1244, 331, 73786, 12683, + 10662, 0, 8112, 0, 65852, 74629, 12379, 194877, 92930, 41964, 42208, + 63843, 2084, 41965, 125099, 65866, 4327, 0, 63840, 66413, 41220, 13032, + 92980, 584, 12933, 43177, 12373, 69855, 13000, 1351, 2935, 8698, 12665, + 0, 1930, 0, 78229, 12427, 66514, 69859, 13031, 0, 63901, 0, 3657, 119611, + 65202, 6000, 113786, 12426, 127181, 119935, 41740, 12428, 41283, 41916, + 119210, 128318, 0, 12429, 6727, 0, 7562, 983248, 5170, 983915, 41755, + 676, 0, 66704, 66664, 9978, 66491, 3536, 0, 9752, 92397, 6162, 92928, + 69228, 10113, 41829, 65886, 5159, 12422, 41832, 439, 3072, 983464, 42207, + 74549, 11796, 40970, 41830, 125021, 70151, 8308, 917797, 70807, 119258, + 67864, 113696, 917800, 12336, 4135, 67231, 341, 2727, 4129, 3539, 0, + 63861, 0, 7913, 0, 63859, 4131, 63868, 129085, 63867, 4133, 11371, 210, + 4600, 0, 74560, 4137, 8082, 78506, 119062, 78504, 6704, 4591, 128029, + 125018, 120753, 9680, 12937, 120623, 561, 12159, 195, 68321, 41501, + 983371, 42031, 5719, 7172, 42687, 8368, 128306, 41499, 93068, 71047, + 42242, 41498, 917794, 42025, 78565, 65805, 42463, 67182, 2924, 67183, + 120510, 0, 0, 92766, 73941, 67186, 42330, 67187, 3969, 128484, 0, 7169, + 1992, 9652, 73977, 7246, 42086, 126615, 2219, 127177, 0, 128801, 67180, + 0, 327, 128300, 9042, 917777, 917776, 65148, 12433, 917781, 120222, + 917779, 12431, 8668, 12434, 67194, 917782, 5999, 0, 7712, 12432, 128243, + 43653, 1726, 1015, 0, 8212, 0, 113754, 42423, 119066, 194613, 72398, + 66709, 0, 8811, 927, 128461, 0, 12436, 120087, 42021, 0, 67644, 1299, + 12240, 42350, 65143, 0, 195016, 127972, 78197, 11348, 0, 78037, 9194, + 983184, 0, 19914, 12179, 128740, 2296, 128932, 63836, 63832, 917773, + 10967, 63816, 2594, 3444, 63817, 11178, 0, 41503, 127478, 11265, 68295, + 120756, 194922, 67285, 5664, 3972, 0, 128583, 0, 67284, 12416, 917764, + 119608, 10816, 917769, 11210, 12418, 74111, 3882, 8532, 917771, 1573, + 128018, 119847, 4596, 66339, 12417, 66001, 65343, 126491, 12414, 8287, + 68219, 195017, 68108, 1143, 119169, 119846, 12415, 6626, 42763, 0, + 118884, 9021, 120783, 119931, 11724, 0, 0, 127104, 126619, 0, 0, 8027, + 10997, 9171, 12741, 11400, 71305, 194799, 66833, 128239, 0, 92557, + 119604, 127523, 120190, 1324, 67608, 128214, 42368, 0, 7715, 3881, 41487, + 12118, 42514, 68651, 0, 128594, 3009, 41476, 41489, 69825, 3007, 1448, + 3018, 194809, 3889, 8521, 5083, 5082, 119859, 78255, 8519, 983241, 3014, + 5081, 65853, 120715, 0, 68014, 69951, 5079, 64802, 42210, 4597, 65532, + 11828, 120185, 12371, 11105, 8407, 67163, 10805, 8518, 10779, 120188, + 71303, 983933, 12367, 42170, 0, 67290, 629, 1924, 128435, 12037, 67158, + 5987, 8462, 8005, 12365, 63933, 69735, 120815, 12369, 10649, 67981, 5077, + 120174, 10880, 63927, 5075, 917881, 127300, 65075, 0, 11007, 70851, + 66659, 92607, 917933, 66684, 128063, 3434, 4954, 1904, 92679, 5266, + 126980, 5272, 10499, 4507, 9578, 63923, 120177, 7979, 0, 9831, 0, 194926, + 461, 9803, 42282, 4504, 1505, 0, 6325, 5276, 43021, 120488, 0, 55236, + 92659, 66461, 5177, 41324, 12055, 8722, 120805, 41327, 983732, 66695, + 4114, 409, 4383, 8900, 8948, 41325, 0, 721, 10182, 9108, 71311, 0, + 119185, 42229, 194912, 0, 5998, 0, 42353, 74825, 0, 12587, 94104, 78571, + 0, 71328, 128955, 41576, 42215, 78570, 74037, 0, 8578, 5995, 7573, 41575, + 74789, 74752, 63944, 63949, 64767, 2670, 4167, 194796, 11723, 0, 74120, + 0, 65076, 938, 43414, 73854, 11737, 9721, 0, 67179, 67168, 11742, 2419, + 67177, 11493, 12334, 194913, 4153, 12302, 10793, 5250, 12407, 11978, + 4404, 9189, 12401, 42007, 5775, 6759, 65806, 43997, 0, 42002, 12404, + 70388, 129093, 4940, 12410, 7683, 1167, 73729, 4983, 120507, 861, 67699, + 0, 68297, 0, 43757, 43370, 0, 0, 11956, 124967, 0, 70815, 9616, 6631, + 92338, 12816, 43759, 42218, 12710, 68674, 12721, 4101, 66185, 0, 5992, + 7616, 195044, 0, 12577, 93017, 983884, 853, 42693, 194647, 119027, + 983647, 5016, 43535, 63893, 42835, 9491, 917913, 0, 917914, 0, 12712, + 7105, 127807, 65060, 66875, 9900, 7750, 917946, 127896, 74619, 127830, + 983587, 64778, 12585, 10565, 128151, 12177, 119843, 983258, 0, 77824, 0, + 4900, 127874, 12878, 92630, 8984, 4119, 74768, 8971, 78593, 43113, 9702, + 66852, 11025, 9245, 13048, 4927, 4138, 74185, 92481, 92710, 12397, 77827, + 119040, 13054, 12394, 0, 0, 194954, 13053, 118974, 3948, 10781, 1546, 0, + 5010, 1680, 10507, 78590, 78583, 92431, 0, 0, 194915, 7267, 0, 74833, + 128181, 5993, 2819, 128788, 12706, 71063, 1893, 7266, 63915, 7264, 7265, + 0, 1363, 0, 42923, 63910, 63996, 3077, 120018, 0, 1512, 69929, 12589, + 41479, 128313, 71048, 43339, 73776, 9836, 120727, 0, 41481, 43335, 7832, + 42343, 3090, 43337, 817, 1664, 1850, 128841, 3079, 11340, 42408, 42447, + 127140, 120020, 42307, 12386, 42304, 917555, 0, 12389, 128398, 92366, + 41996, 11526, 63985, 5864, 1147, 43849, 42887, 1987, 92718, 5480, 7858, + 11653, 4116, 12391, 66193, 129197, 4939, 12384, 0, 0, 41686, 63905, + 119601, 194688, 67398, 128820, 12649, 129056, 0, 8247, 507, 91, 2042, + 120775, 43643, 194689, 66028, 10036, 41844, 119813, 774, 119829, 77840, + 119815, 5994, 12539, 0, 78375, 120597, 119833, 983105, 78377, 0, 917628, + 7719, 6026, 2486, 128312, 119808, 162, 0, 65219, 41073, 9687, 41681, + 6304, 119812, 66196, 194881, 5262, 0, 55233, 12681, 42379, 0, 7534, + 12219, 2226, 70499, 42810, 10492, 127015, 983661, 126704, 43119, 0, + 78537, 12403, 2500, 70145, 0, 4899, 12729, 983397, 0, 74113, 2343, 4103, + 19946, 74112, 77851, 13112, 129046, 74834, 12859, 70087, 120148, 66369, + 5861, 127758, 11999, 12400, 43641, 983839, 12645, 5146, 11320, 68410, + 6748, 65040, 983491, 64184, 12974, 64183, 67613, 120645, 5147, 125019, 0, + 74524, 128356, 1928, 0, 67649, 5991, 3445, 67609, 4976, 64176, 0, 67610, + 8241, 0, 77868, 4206, 0, 78662, 0, 128298, 67277, 10138, 67238, 128785, + 8897, 120234, 1422, 8357, 4124, 77862, 65836, 120641, 127926, 77859, 0, + 194696, 1123, 963, 41553, 10120, 12405, 120150, 92664, 398, 13278, 9723, + 6366, 120311, 7945, 983163, 4402, 9970, 12402, 93062, 42392, 1305, 12408, + 92384, 44007, 128563, 127216, 41464, 12411, 12969, 67268, 41465, 983565, + 8528, 1575, 0, 63955, 165, 3024, 41467, 119163, 70119, 9093, 0, 6833, + 92574, 63958, 0, 9148, 9692, 4096, 53, 8296, 6750, 66855, 0, 9594, + 120308, 129186, 43527, 194622, 727, 74192, 93060, 5805, 0, 6726, 0, + 42176, 12370, 11655, 119095, 10591, 2280, 0, 12372, 120642, 120307, + 71209, 92343, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, + 194701, 10803, 4132, 120306, 68474, 92473, 0, 120712, 74837, 120155, + 1499, 0, 8055, 42740, 63965, 120305, 63962, 74042, 8924, 43123, 5988, + 3660, 63969, 11781, 42718, 8788, 1357, 64851, 65743, 92894, 8774, 70337, + 127086, 9941, 120172, 92748, 1933, 69655, 9564, 0, 92435, 73866, 0, + 983583, 2487, 67614, 3121, 1804, 3311, 67615, 70081, 78302, 12220, 67616, + 92769, 127475, 0, 68200, 6675, 128144, 0, 67592, 120685, 0, 64771, 1198, + 9132, 0, 64619, 510, 64663, 0, 0, 4561, 2101, 1398, 917972, 92554, 74034, + 41569, 92684, 11406, 8167, 12127, 0, 840, 983281, 69992, 7101, 6967, 0, + 194898, 9796, 0, 333, 69891, 0, 8144, 2117, 0, 983595, 12406, 0, 19931, + 66388, 6678, 7769, 0, 12621, 0, 127366, 10227, 4764, 43101, 9981, 0, + 40986, 4127, 66487, 983576, 42202, 12754, 195022, 0, 0, 94097, 67594, + 2048, 12944, 4050, 67595, 917967, 43102, 10581, 11184, 4533, 195021, + 74003, 6490, 0, 12038, 0, 0, 68225, 65461, 9798, 69704, 0, 1948, 69841, + 0, 952, 128235, 125107, 0, 120802, 6449, 9494, 120313, 0, 43098, 4843, + 8142, 64160, 4098, 64170, 983339, 0, 3436, 119973, 0, 12817, 67597, 6676, + 3930, 42615, 0, 69991, 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0, + 127859, 8500, 42222, 120142, 73743, 120400, 4317, 11543, 67676, 64676, 0, + 127833, 67606, 119083, 127892, 42217, 13102, 0, 66003, 6672, 0, 0, 66880, + 983747, 63841, 9613, 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, + 42056, 10228, 64957, 11281, 0, 3807, 1469, 66640, 65381, 42197, 4988, + 42372, 0, 9598, 904, 352, 42225, 1451, 8061, 8453, 4134, 127052, 67223, + 66576, 127916, 127831, 10520, 8575, 9960, 1201, 127289, 12846, 127291, + 127292, 11919, 64962, 127287, 43739, 127281, 8511, 9460, 823, 11587, + 12305, 0, 64695, 127305, 12387, 1253, 13183, 65766, 500, 42783, 65765, + 64208, 64369, 65760, 65761, 70334, 11606, 64784, 11702, 66498, 9821, + 64304, 0, 5152, 11048, 7533, 68366, 64410, 92305, 0, 4323, 120062, 92669, + 71332, 120158, 42587, 42214, 41394, 11188, 4763, 4112, 118935, 0, 5260, + 43143, 94038, 326, 120131, 68423, 194904, 10771, 2876, 74074, 92530, + 128460, 41398, 7382, 9802, 127077, 127076, 453, 41396, 120524, 13159, + 12140, 9572, 0, 7003, 194883, 42334, 7704, 125069, 125020, 43144, 4123, + 8494, 43146, 9977, 0, 126473, 65759, 10765, 64061, 4465, 9808, 64056, + 65582, 4126, 0, 9521, 9589, 64755, 0, 64020, 126604, 10464, 0, 92968, + 194869, 64514, 11528, 64024, 128072, 679, 64013, 983555, 5850, 758, 7536, + 128663, 92234, 41441, 10693, 64006, 983567, 64005, 4058, 119019, 126487, + 64660, 128176, 119050, 0, 983069, 1139, 43298, 64027, 64029, 8970, 0, + 9934, 128685, 10774, 67104, 42201, 12421, 128216, 0, 1852, 3057, 64046, + 73744, 64034, 64039, 129127, 0, 0, 194899, 92322, 7645, 12854, 74338, + 3496, 0, 0, 113710, 9102, 627, 127795, 6158, 8327, 74553, 66632, 12419, + 13309, 11570, 127811, 19960, 11696, 0, 1018, 118970, 129075, 194897, + 1682, 43863, 194911, 42756, 6765, 194906, 67717, 74358, 73814, 11412, + 6768, 10728, 119982, 71316, 71099, 43311, 64966, 11577, 0, 43040, 1833, + 11576, 0, 74779, 0, 185, 65085, 74533, 64754, 119334, 7535, 8085, 42525, + 120387, 9749, 41701, 6131, 1949, 4117, 7847, 120489, 124992, 64483, + 65693, 983711, 0, 0, 69695, 42240, 128587, 126651, 42864, 126498, 43168, + 41868, 1184, 0, 815, 11484, 127535, 67840, 983651, 0, 66197, 983472, + 10986, 64683, 983785, 128454, 3455, 0, 0, 9879, 0, 0, 4158, 128050, 68166, 0, 0, 0, 0, 69645, 332, 118808, 0, 5142, 2407, 69643, 42199, 0, - 92404, 74373, 0, 55217, 0, 63870, 43163, 0, 0, 92390, 42867, 1834, 0, - 92461, 69817, 10940, 65249, 119040, 8662, 0, 0, 2652, 120527, 7164, + 92404, 74373, 0, 55217, 92436, 63870, 43163, 0, 0, 12985, 42867, 1834, 0, + 92461, 69817, 10940, 65249, 70385, 8662, 120324, 0, 2652, 120527, 7164, 10784, 195093, 67674, 0, 92233, 92482, 194749, 74562, 917505, 1828, - 74474, 120327, 78620, 8531, 12499, 6280, 12324, 118854, 65238, 68374, - 4832, 65573, 0, 6279, 12508, 12904, 12502, 9161, 0, 1620, 64436, 3601, - 195094, 128073, 983562, 609, 11555, 983099, 12496, 127839, 74181, 4343, - 12505, 0, 127863, 0, 11377, 239, 0, 637, 0, 0, 42671, 0, 0, 0, 43565, - 71306, 126493, 12696, 128256, 0, 94062, 12929, 0, 712, 0, 4197, 983206, - 42818, 126632, 0, 120490, 0, 119137, 1506, 43562, 0, 92491, 0, 12651, 0, - 64628, 74517, 12058, 74084, 917838, 7494, 0, 4924, 65592, 118844, 0, - 127088, 355, 9719, 127087, 13066, 64796, 0, 0, 12033, 42178, 0, 69760, - 42571, 92635, 0, 0, 0, 0, 0, 127176, 3178, 0, 0, 92704, 0, 9080, 127000, - 120352, 0, 68209, 0, 11082, 0, 5699, 195100, 66000, 9488, 65166, 119112, - 0, 0, 0, 0, 71313, 0, 5265, 69235, 0, 11487, 67858, 12464, 0, 43045, 0, - 0, 43345, 0, 10770, 118994, 6807, 465, 9829, 0, 74348, 0, 43346, 8116, - 795, 0, 0, 12462, 10930, 10831, 0, 118952, 64362, 74334, 983602, 120811, - 0, 12468, 8607, 1008, 0, 10092, 195078, 917842, 67855, 55257, 73771, - 1766, 11282, 11996, 1820, 4547, 0, 0, 0, 0, 13223, 128665, 64595, 127294, - 0, 92311, 4345, 12616, 0, 0, 0, 74467, 0, 0, 0, 5382, 0, 0, 0, 119060, - 64953, 5406, 19920, 69897, 66510, 3590, 194864, 1130, 0, 0, 42016, 11823, - 43023, 0, 118896, 7742, 0, 13280, 71323, 9326, 73826, 5310, 74812, 78584, - 92229, 8959, 43589, 6747, 66723, 0, 8568, 0, 120496, 73816, 120803, - 983848, 42670, 0, 11621, 12460, 0, 120631, 0, 43063, 74519, 127182, 0, - 73917, 7843, 69783, 11689, 5410, 5783, 10468, 8403, 5400, 11594, 128247, - 0, 118990, 10491, 69842, 64412, 0, 0, 5587, 42865, 64404, 8268, 4923, - 65086, 8981, 12382, 42133, 120755, 9706, 69738, 0, 66610, 10461, 12103, - 0, 8642, 0, 42766, 983866, 2210, 9983, 0, 94009, 0, 0, 0, 7398, 41515, 0, - 11802, 8041, 1461, 910, 119133, 0, 6749, 3658, 93964, 120525, 0, 7617, - 194841, 12888, 127983, 67668, 13143, 0, 9193, 11097, 5703, 0, 41517, - 41504, 41519, 10016, 64305, 0, 65864, 623, 781, 670, 10660, 5769, 613, - 7543, 120279, 477, 41083, 92521, 0, 592, 1578, 12459, 43449, 0, 0, 8225, - 0, 654, 11345, 653, 652, 0, 647, 0, 633, 120744, 0, 126472, 12480, 43243, - 0, 39, 12487, 0, 120529, 74199, 12482, 0, 12489, 0, 3195, 5550, 983554, - 7897, 0, 1203, 74396, 1813, 64544, 41311, 12090, 0, 2877, 0, 0, 1675, - 69840, 0, 0, 0, 10070, 10595, 0, 119077, 194777, 983611, 0, 0, 0, 43244, - 0, 0, 983916, 119561, 983078, 0, 194921, 128160, 9939, 0, 983151, 77860, - 0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0, 74038, 119558, 6273, 66679, - 364, 9595, 194908, 0, 0, 707, 0, 0, 9282, 66489, 224, 0, 68670, 9332, - 4966, 68677, 0, 68644, 0, 3841, 68634, 0, 10732, 68640, 850, 4972, 0, - 12890, 2909, 68619, 44008, 68627, 983718, 11544, 10203, 9608, 0, 0, - 11962, 194694, 12507, 1196, 128687, 128311, 777, 120187, 4375, 65271, - 67678, 0, 12198, 0, 64824, 119343, 983236, 9454, 63778, 8658, 42528, - 78000, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 74520, 2701, - 0, 127002, 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 983814, 63745, - 1748, 63770, 0, 0, 0, 65542, 63766, 55244, 3061, 0, 63764, 63787, 9067, - 6096, 0, 7694, 0, 7257, 63768, 3485, 12987, 0, 127522, 120628, 63807, - 1591, 0, 6386, 63783, 0, 0, 92535, 0, 0, 0, 74575, 0, 65719, 13083, - 64574, 65012, 0, 1640, 12495, 66691, 7624, 3138, 10996, 92247, 1922, 0, - 12498, 10987, 69936, 69939, 3894, 65543, 0, 194842, 983588, 493, 0, - 43197, 1717, 4228, 479, 10303, 74020, 0, 917935, 10335, 3520, 917932, - 12490, 64315, 0, 127039, 12493, 6233, 42681, 1002, 12491, 0, 64911, - 92615, 2096, 65120, 0, 78219, 983081, 8378, 11632, 127041, 66213, 63864, - 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, - 92672, 66240, 78041, 66233, 8928, 983552, 7909, 66234, 11605, 63759, - 983654, 66208, 73999, 63799, 63803, 244, 11542, 12898, 12494, 73761, - 12492, 12669, 0, 0, 74153, 0, 128278, 120680, 4882, 13040, 0, 8612, 4885, - 74053, 0, 13042, 4880, 64662, 2429, 1360, 248, 0, 63797, 92394, 42358, 0, + 74474, 120327, 78620, 8531, 12499, 6280, 12324, 72434, 65238, 68374, + 4832, 65573, 43851, 6279, 12508, 12904, 12502, 9161, 0, 1620, 64436, + 3601, 124944, 128073, 67246, 609, 11555, 92409, 12496, 67250, 74181, + 4343, 12505, 0, 127863, 0, 11377, 239, 129190, 637, 0, 128678, 42671, 0, + 93032, 0, 43565, 71306, 126493, 12696, 128256, 917600, 94062, 12929, 0, + 712, 0, 4197, 983206, 42818, 126632, 0, 120490, 70333, 119137, 1506, + 43562, 0, 92491, 0, 12651, 0, 64628, 74517, 12058, 74084, 917838, 7494, + 0, 4924, 65592, 118844, 194823, 127088, 355, 9719, 127087, 13066, 64796, + 0, 0, 12033, 42178, 0, 69760, 42571, 92635, 11430, 0, 0, 0, 124951, + 68324, 3178, 917835, 128633, 92704, 0, 9080, 127000, 67697, 195101, + 68209, 72418, 11082, 0, 5699, 195100, 66000, 9488, 65166, 119112, 70477, + 11170, 68662, 128120, 71313, 0, 5265, 69235, 0, 11487, 67858, 12464, 0, + 43045, 0, 0, 43345, 0, 10770, 118994, 6807, 465, 9829, 69997, 74348, 0, + 43346, 8116, 795, 120352, 72412, 12462, 10930, 10831, 0, 118952, 64362, + 74334, 93056, 120811, 0, 12468, 8607, 1008, 0, 10092, 125122, 917842, + 67855, 55257, 73771, 1766, 11282, 11996, 1820, 4547, 0, 11202, 983222, + 983872, 13223, 128665, 64595, 127294, 0, 68489, 4345, 12616, 917784, + 128947, 983155, 74467, 0, 0, 0, 5382, 0, 0, 67233, 119060, 64953, 5406, + 19920, 69897, 66510, 3590, 194864, 1130, 917766, 194692, 42016, 11823, + 43023, 125129, 118896, 7742, 0, 13280, 71323, 9326, 73826, 5310, 43509, + 78584, 92229, 8959, 43589, 6747, 66723, 64757, 8568, 194684, 120496, + 73816, 120803, 983848, 42670, 0, 11621, 12460, 1326, 120631, 983334, + 43063, 43239, 127182, 194840, 73917, 7843, 69783, 11689, 5410, 5783, + 10468, 8403, 5400, 11594, 120405, 68333, 118990, 10491, 69842, 64412, 0, + 0, 5587, 42865, 64404, 8268, 4923, 65086, 8981, 12382, 42133, 120755, + 9706, 69738, 0, 66610, 10461, 12103, 0, 8642, 194707, 42766, 128247, + 2210, 9983, 0, 94009, 0, 0, 0, 7398, 41515, 0, 11802, 8041, 1461, 910, + 119133, 0, 6749, 3658, 93964, 120525, 0, 7617, 194841, 12888, 127983, + 67668, 13143, 0, 9193, 11097, 5703, 983475, 41517, 41504, 41519, 10016, + 64305, 0, 65864, 623, 781, 670, 10660, 5769, 613, 7543, 120279, 477, + 41083, 92521, 0, 592, 1578, 12459, 43449, 0, 0, 8225, 0, 654, 11345, 653, + 652, 0, 647, 0, 633, 120744, 0, 126472, 12480, 43243, 0, 39, 12487, 0, + 120529, 74199, 12482, 0, 12489, 119607, 3195, 5550, 129121, 7897, 127089, + 1203, 74396, 1813, 64544, 41311, 12090, 983634, 2877, 128394, 70496, + 1675, 69840, 0, 0, 119078, 10070, 10595, 0, 119077, 194777, 983611, + 67170, 120790, 118787, 43244, 0, 0, 983916, 119561, 983078, 194914, + 194921, 128160, 9939, 0, 983151, 77860, 128948, 0, 270, 0, 10714, 118983, + 72437, 0, 0, 119338, 65372, 73803, 74038, 68251, 6273, 66679, 364, 9595, + 127137, 0, 0, 707, 0, 128409, 9282, 11163, 224, 128588, 68670, 9332, + 4966, 68677, 0, 68644, 983131, 3841, 67357, 67341, 10732, 68640, 850, + 4972, 0, 12890, 2909, 68619, 44008, 68627, 120699, 11544, 10203, 9608, 0, + 917943, 11962, 194694, 12507, 1196, 67684, 67100, 777, 120187, 4375, + 65271, 67678, 0, 12198, 917887, 64824, 119343, 127243, 9454, 63778, 8658, + 42528, 70073, 2705, 128680, 41520, 195098, 128447, 11986, 7765, 42502, + 8280, 74520, 2701, 0, 120240, 5767, 0, 0, 9809, 8353, 63747, 66701, + 63772, 983814, 63745, 1748, 63770, 0, 129137, 0, 65542, 63766, 55244, + 3061, 78609, 63764, 63787, 9067, 6096, 0, 7694, 0, 7257, 63768, 3485, + 12987, 127781, 127522, 120628, 63807, 1591, 0, 6386, 63783, 0, 125041, + 92535, 0, 0, 68249, 74575, 0, 65719, 13083, 64574, 65012, 983958, 1640, + 12495, 66691, 7624, 3138, 10996, 11171, 1922, 0, 12498, 10987, 69936, + 69939, 3894, 65543, 129183, 194842, 983588, 493, 0, 43197, 1717, 4228, + 479, 10303, 74020, 0, 917935, 10335, 3520, 917932, 12490, 64315, 92170, + 127039, 12493, 6233, 42681, 1002, 12491, 113695, 64911, 92615, 2096, + 65120, 0, 78219, 128912, 8378, 11632, 127041, 66213, 63864, 66221, 66226, + 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, 92672, 66240, + 78041, 66233, 8928, 983552, 7909, 66234, 11605, 63759, 983654, 66208, + 67339, 13002, 63803, 244, 11542, 12898, 12494, 73761, 12492, 12669, 0, 0, + 74153, 120310, 128278, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, + 13042, 4880, 64662, 2429, 1360, 248, 129066, 63797, 92394, 42358, 0, 7292, 0, 63756, 42786, 66693, 0, 1870, 78040, 470, 78038, 78035, 78036, - 70028, 78034, 4579, 128090, 0, 12511, 74453, 12514, 0, 74579, 7239, 7001, - 8623, 94011, 128052, 128048, 7378, 12512, 11615, 6104, 0, 0, 659, 6098, - 0, 12234, 127307, 127067, 8311, 12510, 41803, 13039, 127072, 12513, - 10202, 12471, 0, 8747, 983920, 0, 0, 2323, 0, 2319, 77917, 12477, 77916, - 2311, 0, 4415, 237, 6281, 127280, 0, 0, 2309, 1312, 8173, 128871, 12469, - 0, 78505, 64335, 10609, 0, 128111, 9397, 11524, 9395, 9396, 9393, 9394, - 9391, 9392, 9389, 6209, 9387, 9388, 4932, 9386, 9383, 9384, 6740, 0, - 65451, 8185, 0, 917832, 43024, 43336, 67659, 2313, 128167, 7948, 9236, - 92571, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 11998, 12082, 10924, 3147, - 0, 120684, 12524, 119081, 2310, 11818, 9381, 9382, 9379, 9380, 9377, - 9378, 9375, 9376, 1683, 9374, 983778, 9372, 12444, 0, 0, 13016, 8210, - 983958, 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, 983837, 4155, 0, - 0, 42030, 5007, 12522, 43088, 0, 4951, 127805, 127240, 0, 9922, 43309, - 983841, 12525, 983471, 12016, 65770, 9548, 67665, 403, 78230, 12503, 0, - 0, 11030, 0, 92567, 65691, 63998, 1819, 10496, 0, 0, 119920, 0, 194668, - 0, 12506, 0, 12231, 0, 12500, 44023, 12509, 64393, 78830, 3389, 10589, - 6608, 41047, 120321, 78395, 78394, 74069, 77995, 78391, 3608, 8281, - 120320, 1107, 0, 9076, 8862, 69743, 41052, 13084, 64766, 43217, 7803, - 13222, 74165, 74782, 126514, 8546, 11553, 63995, 13177, 9043, 6303, - 983947, 498, 64471, 120324, 128567, 12529, 8042, 0, 2344, 12528, 8031, - 2414, 0, 69719, 3231, 0, 6422, 66512, 69653, 12530, 2537, 78405, 41429, - 12658, 13036, 65772, 0, 78738, 41433, 4719, 469, 0, 4363, 3313, 41428, - 78407, 2023, 1772, 78224, 78225, 65706, 10051, 64812, 78220, 0, 9920, - 12215, 0, 4931, 1951, 12497, 119363, 9607, 0, 9663, 983228, 119634, 6503, - 41110, 0, 1491, 0, 0, 127304, 41061, 0, 194838, 127187, 65026, 41993, - 41509, 11045, 65028, 78602, 66476, 41108, 9738, 41995, 1075, 1958, 12535, - 41992, 41506, 0, 41687, 0, 120717, 127776, 9940, 127299, 7692, 983833, - 8008, 41131, 330, 8566, 65083, 41133, 9816, 126517, 12532, 78550, 78546, - 3508, 127058, 43235, 0, 127298, 64139, 78231, 6411, 12910, 78554, 66644, - 13028, 6737, 12537, 0, 0, 64136, 12536, 2350, 13029, 78233, 0, 983103, - 13030, 6702, 4527, 0, 12538, 128810, 983645, 65599, 65717, 9966, 0, 4948, - 12484, 4032, 128149, 12623, 0, 6207, 0, 6117, 65930, 8412, 0, 7438, 1296, - 2325, 41511, 126625, 10149, 74118, 0, 127286, 12481, 0, 12488, 66713, 0, - 41556, 64414, 118802, 2354, 42619, 73766, 0, 6295, 901, 41510, 7953, 0, - 65032, 41513, 983166, 11927, 66584, 78559, 78560, 78557, 78558, 0, 78556, - 848, 9868, 0, 6424, 78568, 119338, 69922, 74031, 78563, 78564, 2352, - 78572, 893, 64576, 11289, 1407, 67973, 0, 13026, 6762, 78579, 78580, - 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 983823, 0, 9325, 6818, - 6283, 11738, 0, 983934, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, - 983825, 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 42737, - 9956, 0, 0, 74552, 10014, 0, 41260, 119340, 13020, 10024, 194764, 74583, - 74340, 69681, 0, 43001, 8029, 0, 0, 983780, 3335, 0, 0, 9776, 120526, - 194748, 5215, 42644, 3333, 1632, 194751, 64849, 3342, 78582, 5363, 12957, - 78581, 4156, 0, 0, 6421, 78591, 1611, 78589, 13018, 74257, 78588, 74542, + 70028, 78034, 4579, 69232, 0, 12511, 74453, 12514, 0, 74579, 7239, 7001, + 8623, 94011, 125137, 128048, 7378, 12512, 11615, 6104, 0, 0, 659, 6098, + 0, 12234, 127307, 67358, 8311, 12510, 7669, 13039, 127072, 12513, 10202, + 12471, 0, 8747, 125049, 70193, 128354, 2323, 0, 2319, 77917, 12477, + 77916, 2311, 7666, 4415, 237, 6281, 127280, 0, 0, 2309, 1312, 8173, + 128871, 12469, 0, 78505, 64335, 10609, 0, 128111, 9397, 11524, 9395, + 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, 9388, 4932, 9386, 9383, + 9384, 6740, 0, 65451, 8185, 128931, 917832, 43024, 43336, 67659, 2313, + 128167, 7948, 9236, 77942, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 11998, + 12082, 10924, 3147, 0, 66406, 12524, 119081, 2310, 11818, 9381, 9382, + 9379, 9380, 9377, 9378, 9375, 9376, 1683, 9374, 983778, 9372, 12444, 0, + 0, 13016, 8210, 129178, 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, + 917922, 4155, 0, 120704, 42030, 5007, 12522, 43088, 0, 4951, 113826, + 127240, 0, 9922, 43309, 11211, 12525, 983471, 12016, 65770, 9548, 67665, + 403, 78230, 12503, 0, 0, 11030, 0, 92567, 65691, 63998, 1819, 10496, 0, + 0, 119920, 0, 129143, 0, 12506, 983838, 11146, 127751, 12500, 44023, + 12509, 64393, 78830, 3389, 10589, 6608, 11208, 120236, 78395, 78394, + 74069, 77995, 78391, 3608, 8281, 113732, 1107, 113745, 9076, 8862, 69743, + 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782, 43499, 8546, + 11553, 63995, 13177, 9043, 6303, 113664, 498, 64471, 77987, 92974, 12529, + 8042, 0, 2344, 12528, 8031, 2414, 74506, 69719, 3231, 0, 6422, 66512, + 69653, 12530, 2537, 78405, 41429, 12658, 13036, 65772, 0, 78738, 41433, + 4719, 469, 0, 4363, 3313, 41428, 78407, 2023, 1772, 78224, 78225, 65706, + 10051, 64812, 78220, 0, 9920, 12215, 127876, 4931, 1951, 12497, 119363, + 9607, 70368, 9663, 66838, 119634, 6503, 41110, 983465, 1491, 66847, + 129169, 127304, 41061, 70454, 194838, 127187, 65026, 41993, 41509, 11045, + 65028, 71181, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, 41506, + 0, 41687, 0, 120717, 127776, 9940, 127299, 7692, 983833, 8008, 41131, + 330, 8566, 65083, 6839, 9816, 126517, 12532, 78550, 78546, 3508, 127058, + 43235, 120351, 127298, 64139, 78231, 6411, 12910, 67710, 66644, 13028, + 6737, 12537, 0, 43506, 64136, 12536, 2350, 13029, 78233, 127763, 983103, + 13030, 6702, 4527, 71250, 12538, 128810, 983645, 65599, 65717, 9966, + 128499, 4948, 12484, 4032, 128149, 12623, 0, 6207, 0, 6117, 65930, 8412, + 127183, 7438, 1296, 2325, 41511, 126625, 10149, 74118, 0, 120233, 12481, + 0, 12488, 66713, 0, 41556, 64414, 118802, 2354, 42619, 73766, 0, 6295, + 901, 41510, 7953, 0, 65032, 41513, 983166, 11927, 66584, 78559, 78560, + 78557, 78558, 0, 67603, 848, 9868, 67220, 6424, 78568, 67226, 69922, + 70190, 78563, 78564, 2352, 67219, 893, 64576, 11289, 1407, 67973, 0, + 13026, 6762, 78579, 70192, 13023, 8903, 9777, 66715, 1871, 8099, 127984, + 0, 1343, 983823, 120784, 9325, 6818, 6283, 11738, 0, 72436, 113713, + 11741, 0, 93038, 9216, 8263, 11279, 194752, 983453, 194754, 13021, 64494, + 3136, 194758, 194757, 194760, 13022, 42737, 9956, 0, 127787, 74552, + 10014, 0, 41260, 119340, 13020, 10024, 194764, 74583, 74340, 69681, 0, + 43001, 8029, 0, 0, 983780, 3335, 119341, 9209, 9776, 120526, 194748, + 5215, 42644, 3333, 1632, 194751, 64849, 3342, 78582, 5363, 12957, 78581, + 4156, 0, 127329, 6421, 78039, 1611, 78589, 13018, 74257, 78588, 74542, 3337, 4537, 67895, 11736, 0, 68608, 6482, 4214, 73790, 11945, 0, 13046, - 8838, 425, 4025, 10709, 78595, 2108, 2392, 13047, 0, 0, 6819, 13049, - 6499, 92243, 12424, 68614, 73944, 13050, 9924, 194745, 6507, 127919, + 8838, 425, 4025, 10709, 78595, 2108, 2392, 13047, 92745, 0, 6819, 13049, + 6499, 92243, 12424, 68614, 65827, 13050, 9924, 194745, 6507, 127919, 94073, 128069, 3277, 8929, 4947, 41055, 0, 194722, 194721, 194724, 13045, 64626, 66034, 7751, 194727, 8371, 194729, 3997, 12806, 8768, 13044, 0, - 12420, 4024, 194730, 41054, 1078, 9757, 69736, 41057, 0, 0, 0, 0, 983791, - 92210, 92411, 0, 41496, 0, 9165, 1572, 11911, 0, 118842, 2346, 13270, - 8958, 0, 9646, 3773, 43183, 6401, 5831, 0, 0, 13043, 8056, 92494, 65681, - 208, 127382, 41514, 0, 0, 0, 10699, 6408, 92227, 7825, 5661, 0, 120630, - 3603, 41109, 2398, 3548, 126596, 0, 119933, 0, 3115, 9918, 0, 8294, - 42912, 0, 0, 194726, 4876, 65804, 0, 0, 43468, 983274, 41558, 41471, - 73950, 8158, 9944, 41472, 120298, 13051, 78689, 3143, 194674, 6701, - 41559, 1896, 66256, 13052, 194680, 5665, 0, 119071, 7025, 63974, 0, - 74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382, 1564, 73924, 1121, - 78319, 63959, 0, 9942, 13231, 0, 64752, 4732, 194666, 11596, 119931, - 65187, 1626, 63983, 10110, 64772, 42024, 6420, 42028, 0, 10509, 2795, - 4910, 194728, 69231, 64753, 6275, 93957, 118830, 63978, 11044, 3229, - 6423, 42774, 0, 0, 0, 12823, 2331, 917810, 7085, 6137, 0, 7524, 0, - 917809, 8346, 0, 8338, 128315, 65043, 0, 822, 127984, 9903, 64721, 42722, - 69877, 194659, 78655, 78661, 194660, 78662, 41265, 5311, 1795, 965, - 118791, 10587, 78055, 11278, 78632, 194640, 0, 12946, 194641, 119341, - 120349, 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 983960, 748, - 41067, 2330, 535, 3148, 12375, 78799, 194629, 10556, 2475, 12388, 4889, - 8968, 67863, 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, - 194637, 917804, 581, 4893, 983616, 6571, 65545, 4888, 4157, 78048, 78049, - 78046, 78047, 0, 10119, 6415, 42893, 0, 69702, 0, 0, 11375, 64746, 2332, - 78063, 412, 78061, 64932, 42880, 43587, 0, 0, 0, 0, 65197, 78066, 12203, - 78064, 78065, 8913, 65854, 4875, 65811, 120381, 120389, 118888, 9344, - 8826, 120386, 120395, 13104, 74781, 11997, 120393, 78075, 0, 3134, 0, - 65696, 92331, 0, 66217, 0, 8334, 119344, 0, 3449, 0, 0, 78414, 78413, - 118950, 74011, 0, 0, 0, 0, 1908, 120167, 4328, 10734, 127014, 0, 127914, - 7804, 78272, 10811, 6250, 11339, 4914, 11367, 0, 78054, 4917, 74516, - 74208, 64285, 4912, 5464, 127836, 118893, 2361, 7971, 78072, 78073, - 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, 40977, 10960, 40962, - 8305, 12573, 983608, 40980, 983964, 13202, 0, 12582, 78282, 983048, - 69856, 42438, 55221, 6288, 78280, 127946, 5653, 42400, 10891, 7698, 5658, - 74045, 70039, 0, 0, 4913, 0, 983959, 71333, 42326, 128194, 12728, 92685, - 42478, 2327, 0, 12563, 42287, 12705, 0, 0, 12588, 8821, 6153, 2867, - 194708, 66312, 698, 128007, 194606, 10356, 70017, 194713, 651, 12641, 0, - 0, 0, 0, 41552, 65115, 78465, 78467, 78463, 78464, 128851, 78461, 194697, - 74356, 64945, 4716, 43277, 0, 78474, 12340, 120568, 0, 194700, 55264, - 41211, 120676, 8703, 5462, 917629, 983495, 10101, 0, 70049, 8479, 4151, - 41933, 0, 0, 66254, 120821, 0, 0, 128654, 0, 119194, 74050, 92701, 0, 0, - 0, 0, 0, 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0, 0, 2699, 0, 73845, - 2985, 92568, 126475, 917845, 12192, 119314, 0, 119312, 9827, 119310, - 119311, 119308, 119309, 119306, 11481, 41210, 119305, 0, 35, 78481, - 78482, 66694, 68479, 78477, 78478, 43596, 6090, 64257, 7812, 10534, 0, - 78485, 73848, 67975, 4272, 0, 40967, 40964, 917825, 12704, 78487, 43306, - 0, 64497, 12138, 7930, 0, 2292, 68216, 0, 917826, 5244, 4189, 94108, - 67596, 127504, 4188, 1879, 0, 968, 0, 43743, 0, 8873, 2279, 0, 917827, - 65555, 12574, 0, 0, 0, 74490, 127099, 43657, 0, 0, 0, 42682, 12578, - 12720, 0, 41227, 0, 12346, 127101, 64848, 0, 0, 7251, 0, 0, 118850, - 119141, 128546, 66015, 0, 959, 8885, 12564, 66457, 78808, 9469, 9632, - 92323, 74761, 64323, 127335, 0, 0, 0, 310, 0, 41281, 10976, 0, 71325, 0, - 74266, 10054, 6497, 8574, 0, 9012, 19958, 74420, 65089, 13215, 12730, - 65163, 74044, 374, 43195, 816, 120161, 0, 0, 41934, 7465, 0, 128168, - 983268, 4715, 6101, 94106, 41936, 0, 4879, 0, 65446, 0, 307, 127147, - 9585, 5374, 983267, 128059, 0, 0, 126618, 120390, 0, 65567, 120614, 1929, - 0, 12142, 0, 12236, 41419, 194618, 120610, 12982, 194623, 5378, 78791, - 128679, 41421, 0, 4462, 0, 126599, 128092, 821, 0, 2498, 5800, 120157, - 983115, 1760, 2421, 4469, 2324, 828, 3611, 78400, 757, 1185, 0, 78770, - 43597, 10628, 74808, 194572, 7999, 43971, 0, 0, 10634, 10942, 7713, 2348, - 0, 64374, 4380, 194608, 119044, 9982, 64324, 41240, 862, 65626, 78462, - 1810, 3673, 5137, 194617, 0, 7277, 65622, 0, 7566, 64688, 194593, 194592, - 78092, 74357, 194597, 4748, 92228, 194598, 194601, 42260, 5871, 119075, - 0, 74576, 44019, 0, 128189, 3967, 194604, 13137, 8775, 127945, 0, 2963, - 0, 8410, 4454, 723, 127882, 966, 4449, 92330, 92238, 0, 7819, 2320, - 194589, 339, 4968, 194590, 120399, 8075, 55276, 0, 8047, 0, 78827, 12634, - 41542, 78780, 7466, 6705, 12174, 42610, 0, 74452, 983763, 1584, 66645, - 6045, 6729, 120640, 65218, 11559, 0, 78062, 7537, 0, 11370, 0, 10330, 0, - 10394, 0, 74194, 0, 127929, 9780, 0, 13092, 194576, 77950, 194578, 7074, - 92648, 194579, 194582, 11414, 128868, 2531, 13034, 0, 0, 4211, 1259, - 7517, 0, 0, 194561, 40996, 13037, 7092, 641, 5219, 94034, 194566, 11064, - 41129, 0, 42850, 13035, 9075, 92387, 5466, 128153, 0, 64098, 65793, 4535, - 194573, 4271, 78417, 128357, 6769, 41410, 983452, 64262, 6767, 41407, 0, - 0, 6755, 118864, 9046, 127934, 126608, 0, 0, 0, 0, 67675, 0, 0, 0, 64338, - 2563, 13033, 247, 118915, 0, 12338, 4651, 69895, 11270, 0, 0, 11933, 0, - 0, 41903, 43447, 11001, 0, 42255, 0, 92661, 69821, 41905, 0, 0, 10775, - 9793, 5009, 0, 42269, 64587, 983063, 42535, 69812, 64529, 41408, 42853, - 3877, 120795, 42674, 8147, 43566, 119021, 983776, 10236, 65918, 43782, 0, - 0, 64506, 69652, 118921, 4747, 128058, 69844, 43200, 5832, 0, 0, 5141, - 42600, 0, 43203, 0, 983799, 43286, 0, 128211, 43778, 0, 41305, 78776, - 43781, 11303, 65547, 0, 7031, 859, 0, 0, 0, 6059, 126985, 55235, 0, 8535, - 0, 65196, 194787, 66032, 11488, 120481, 120786, 42233, 64140, 9946, - 63885, 194792, 11822, 0, 43189, 983898, 0, 1788, 1579, 120482, 71298, 0, - 0, 0, 9028, 119571, 69234, 94055, 0, 1285, 64882, 41242, 70086, 0, 12640, - 0, 7401, 0, 12625, 68198, 0, 70082, 3940, 41597, 43754, 3396, 12642, - 8665, 0, 0, 12630, 1653, 917815, 10153, 0, 6166, 120516, 118989, 0, 8815, - 66673, 65046, 9285, 913, 42259, 119317, 119318, 2142, 68454, 42485, - 94012, 7878, 8211, 42293, 64377, 0, 92643, 0, 194673, 12032, 0, 9725, 0, + 12420, 4024, 194730, 41054, 1078, 9757, 69736, 41057, 68307, 0, 0, 0, + 983791, 92210, 92411, 0, 41496, 0, 9165, 1572, 11911, 124990, 118842, + 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, 5831, 0, 0, 13043, 8056, + 92494, 65681, 208, 127382, 41514, 0, 0, 0, 10699, 6408, 92227, 7825, + 5661, 0, 120630, 3603, 41109, 2398, 3548, 126596, 128434, 119933, 0, + 3115, 9918, 127823, 8294, 42912, 0, 0, 194726, 4876, 65804, 0, 0, 43468, + 983274, 41558, 41471, 73950, 8158, 9944, 41472, 120298, 13051, 78689, + 3143, 194674, 6701, 41559, 1896, 66256, 13052, 194680, 5665, 78594, + 119071, 7025, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310, 5662, + 42382, 1564, 73924, 1121, 78319, 63959, 0, 9942, 13231, 983578, 64752, + 4732, 194666, 11596, 78142, 65187, 1626, 63983, 10110, 64772, 42024, + 6420, 42028, 92294, 10509, 2795, 4910, 129193, 69231, 64753, 6275, 93957, + 118830, 63978, 11044, 3229, 6423, 42774, 0, 0, 68526, 12823, 2331, + 127788, 7085, 6137, 0, 7524, 0, 917809, 8346, 128438, 8338, 128315, + 65043, 983237, 822, 70412, 9903, 64721, 42722, 69877, 194659, 78655, + 66882, 194660, 78484, 41265, 5311, 1795, 965, 118791, 10587, 73931, + 11278, 78632, 194640, 0, 12946, 194641, 71921, 120349, 6294, 3144, + 194648, 127967, 65019, 194649, 73990, 65111, 983960, 748, 41067, 2330, + 535, 3148, 12375, 78799, 194629, 10556, 2475, 12388, 4889, 8968, 67863, + 3593, 74076, 0, 2342, 0, 126541, 65206, 4894, 194635, 4890, 194637, + 129147, 581, 4893, 42929, 6571, 65545, 4888, 4157, 78048, 78049, 64651, + 78047, 0, 10119, 6415, 42893, 0, 69702, 983937, 0, 11375, 64746, 2332, + 78063, 412, 78061, 42928, 42880, 43587, 0, 0, 0, 70461, 65197, 78066, + 12203, 78064, 78065, 8913, 65854, 4875, 65811, 120381, 120389, 71854, + 9344, 8826, 92916, 120395, 13104, 74781, 11997, 120393, 78075, 0, 3134, + 0, 65696, 72432, 0, 66217, 0, 8334, 92755, 0, 3449, 0, 0, 78414, 78413, + 118950, 66405, 70430, 0, 0, 0, 1908, 120167, 4328, 10734, 127014, 0, + 127914, 7804, 78272, 10811, 6250, 11339, 4914, 11367, 125001, 78054, + 4917, 74516, 74208, 64285, 4912, 5464, 127836, 118893, 2361, 7971, 78072, + 78073, 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, 40977, 10960, + 40962, 8305, 12573, 983608, 40980, 983964, 13202, 127816, 12582, 78282, + 983048, 69856, 42438, 55221, 6288, 78280, 127946, 5653, 42400, 10891, + 7698, 5658, 70401, 70039, 0, 70460, 4913, 71060, 128562, 71333, 42326, + 128194, 12728, 92685, 42478, 2327, 0, 12563, 42287, 12705, 0, 120824, + 12588, 8821, 6153, 2867, 194708, 66312, 698, 127059, 194606, 10356, + 70017, 194713, 651, 12641, 0, 125098, 120710, 129064, 41552, 65115, + 78465, 78467, 78463, 78464, 128851, 78461, 92960, 66927, 64945, 4716, + 43277, 0, 78474, 12340, 120568, 0, 194700, 55264, 41211, 120676, 8703, + 5462, 120793, 128944, 10101, 0, 70049, 8479, 4151, 41933, 0, 0, 66254, + 120821, 68497, 0, 128654, 113799, 119194, 74050, 42651, 0, 0, 0, 129151, + 0, 12278, 127167, 128405, 0, 2700, 12576, 7842, 12899, 0, 0, 2699, 0, + 73845, 2985, 92568, 68648, 917845, 12192, 119314, 0, 66489, 9827, 119310, + 8609, 119308, 67426, 119306, 11481, 41210, 119305, 0, 35, 70838, 67431, + 66694, 68479, 78477, 67428, 43596, 6090, 64257, 7812, 10534, 0, 78485, + 73848, 67975, 4272, 78321, 40967, 40964, 917825, 12704, 78487, 43306, 0, + 64497, 12138, 7930, 0, 2292, 68216, 194871, 917826, 5244, 4189, 94108, + 67596, 127504, 4188, 1879, 70463, 968, 0, 43743, 0, 8873, 2279, 0, + 917827, 65555, 12574, 0, 92749, 92753, 74490, 127099, 11838, 983920, 0, + 0, 42682, 12578, 12720, 0, 41227, 0, 12346, 127101, 64848, 69950, 917950, + 7251, 0, 120382, 118850, 119141, 128546, 66015, 67332, 959, 8885, 12564, + 66457, 78808, 9469, 9632, 92323, 74761, 64323, 127335, 0, 0, 11132, 310, + 0, 41281, 10976, 0, 71325, 128364, 74266, 10054, 6497, 8574, 0, 9012, + 19958, 74420, 65089, 13215, 12730, 65163, 74044, 374, 43195, 816, 120161, + 0, 0, 41934, 7465, 74615, 92752, 983268, 4715, 6101, 71089, 41936, 0, + 4879, 0, 65446, 0, 307, 127147, 9585, 5374, 983267, 128059, 0, 129189, + 126618, 120390, 129146, 65567, 120614, 1929, 0, 12142, 0, 12236, 41419, + 194618, 120610, 12982, 128228, 5378, 78791, 128679, 41421, 195075, 4462, + 0, 126599, 128092, 821, 0, 2498, 5800, 120157, 67758, 1760, 2421, 4469, + 2324, 828, 3611, 78400, 757, 1185, 0, 78770, 43597, 10628, 74808, 194572, + 7999, 43971, 11217, 0, 10634, 10942, 7713, 2348, 0, 64374, 4380, 194608, + 119044, 9982, 64324, 41240, 862, 65626, 78462, 1810, 3673, 5137, 194617, + 0, 7277, 65622, 65069, 7566, 64688, 67143, 194592, 78092, 70422, 128385, + 4748, 92228, 129185, 194601, 42260, 5871, 119075, 0, 74576, 44019, 0, + 128189, 3967, 71098, 13137, 8775, 127945, 0, 2963, 0, 8410, 4454, 723, + 127882, 966, 4449, 92330, 92238, 128428, 7819, 2320, 194589, 339, 4968, + 194590, 120399, 8075, 55276, 0, 8047, 0, 78827, 12634, 41542, 78780, + 7466, 6705, 12174, 42610, 0, 74452, 983763, 1584, 66645, 6045, 6729, + 120640, 65218, 11559, 0, 78062, 7537, 124991, 11370, 0, 10330, 0, 10394, + 0, 74194, 0, 127929, 9780, 0, 11117, 194576, 77950, 194578, 7074, 92648, + 194579, 194582, 11414, 124960, 2531, 13034, 0, 0, 4211, 1259, 7517, + 70866, 70198, 194561, 40996, 13037, 7092, 641, 5219, 94034, 194566, + 11064, 41129, 0, 42850, 13035, 9075, 92387, 5466, 128153, 0, 64098, + 65793, 4535, 194573, 4271, 78417, 128357, 6769, 41410, 194675, 64262, + 6767, 41407, 66273, 917816, 6755, 118864, 9046, 127934, 126608, 70830, 0, + 0, 0, 67675, 983694, 0, 0, 64338, 2563, 13033, 247, 118915, 0, 12338, + 4651, 67355, 11270, 0, 74630, 11933, 0, 0, 41903, 43447, 11001, 73827, + 42255, 113760, 92661, 69821, 41905, 67350, 0, 10775, 9793, 5009, 128774, + 42269, 64587, 983063, 42535, 69812, 64529, 41408, 42853, 3877, 120795, + 42674, 8147, 43566, 119021, 67342, 10236, 65918, 43782, 0, 127556, 64506, + 69652, 118921, 4747, 128058, 69844, 43200, 5832, 71253, 0, 5141, 42600, + 71866, 43203, 127208, 120129, 43286, 0, 128211, 43778, 7657, 41305, + 78776, 43781, 11303, 65547, 128609, 7031, 859, 128488, 0, 0, 6059, + 126985, 55235, 194817, 8535, 128638, 65196, 125084, 66032, 11488, 120481, + 120786, 42233, 64140, 9946, 7667, 194792, 11822, 0, 11135, 983898, 0, + 1788, 1579, 120482, 71298, 0, 983459, 0, 9028, 119571, 69234, 71061, + 194738, 1285, 64882, 41242, 70086, 129041, 12640, 0, 7401, 0, 12625, + 68198, 0, 70082, 3940, 41597, 43754, 3396, 12642, 8665, 983610, 983609, + 12630, 1653, 917815, 10153, 0, 6166, 70825, 118989, 0, 8815, 66673, + 65046, 9285, 913, 42259, 11180, 119318, 2142, 68454, 42485, 94012, 7878, + 8211, 42293, 64377, 120478, 92643, 0, 194673, 12032, 0, 9725, 983489, 78431, 5263, 12818, 78430, 41939, 10022, 65387, 78419, 42777, 10139, 980, - 43698, 65386, 2208, 0, 43701, 43198, 7184, 120673, 194797, 917819, 10085, - 119992, 0, 119993, 6634, 92373, 0, 119323, 8072, 119321, 43700, 0, 8872, - 7783, 917992, 12398, 8237, 0, 0, 12395, 0, 126977, 120565, 9914, 2217, - 917854, 73975, 6367, 6351, 66688, 0, 78107, 0, 64735, 41243, 92199, 7808, - 1829, 0, 41937, 4358, 43272, 6353, 0, 0, 120422, 0, 1710, 0, 0, 65607, 0, - 49, 6627, 0, 6258, 10683, 78672, 9741, 78329, 5649, 78441, 43443, 64418, - 1643, 65213, 8405, 3470, 128225, 13213, 42452, 78331, 120664, 78445, 0, - 1072, 78457, 78452, 78454, 6576, 41988, 41132, 65675, 1080, 120002, 9886, - 55225, 1101, 68404, 12309, 55227, 0, 12632, 1086, 1869, 78685, 7680, 0, - 65458, 120714, 12639, 3380, 8123, 1091, 12638, 7977, 4501, 41099, 0, - 66309, 0, 0, 1494, 983146, 126613, 0, 11693, 126513, 10494, 92655, 65872, - 12363, 11386, 0, 0, 0, 0, 64582, 0, 73794, 0, 8022, 0, 120462, 74106, - 12413, 94069, 917994, 917993, 917995, 5570, 1881, 7210, 0, 1012, 43752, - 0, 120709, 7208, 66442, 5569, 983242, 42339, 0, 6063, 0, 78383, 119594, - 6053, 65602, 0, 92201, 64727, 9160, 194827, 0, 0, 92180, 10503, 118810, - 6055, 3870, 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 92204, - 983116, 0, 120119, 78333, 120117, 120118, 120099, 120100, 65087, 5571, - 3674, 9740, 9121, 5568, 120107, 120108, 42085, 10107, 42159, 42870, - 120101, 589, 7050, 983800, 43281, 10233, 41263, 66251, 65729, 66253, - 126497, 74099, 42645, 0, 194815, 8583, 0, 5847, 6928, 128074, 0, 0, 0, 0, - 66592, 12204, 917962, 19966, 77856, 42561, 120626, 983251, 0, 8120, - 120701, 0, 0, 128012, 41063, 0, 10664, 0, 8369, 0, 4551, 194964, 3369, 0, - 0, 9673, 66334, 65580, 10478, 118960, 12517, 557, 9457, 12034, 983671, - 6355, 12519, 41004, 0, 195025, 74094, 0, 0, 77970, 983560, 0, 128175, - 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 92281, 10441, 73836, 0, - 43990, 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 120474, 9645, 10430, - 917959, 5853, 13063, 10363, 0, 12956, 128169, 120729, 11314, 917582, - 12060, 0, 78392, 12826, 6329, 0, 10514, 65517, 74395, 2707, 8309, 0, - 127054, 78398, 43570, 2697, 43420, 78396, 127057, 2695, 42171, 0, 0, 0, - 67617, 118971, 0, 2693, 12125, 12766, 0, 1164, 128817, 0, 41918, 983168, - 127542, 8687, 66009, 12178, 7053, 128001, 7469, 0, 5248, 12218, 120538, - 6427, 42884, 41123, 0, 0, 42873, 41126, 9991, 41128, 74371, 127031, 0, - 9873, 0, 42877, 7994, 64762, 2053, 42843, 6591, 9340, 0, 1589, 0, 296, - 74438, 78852, 0, 67841, 74370, 0, 8922, 128068, 74600, 12700, 74836, 0, - 12579, 0, 12575, 6416, 5656, 2891, 13262, 65590, 5299, 0, 11473, 5449, - 1252, 0, 78404, 41431, 74369, 65373, 5295, 917569, 74114, 1223, 1642, - 174, 78399, 883, 4161, 12691, 42603, 41413, 3212, 41459, 3211, 74810, - 41425, 127029, 78412, 74450, 9728, 3846, 8070, 6150, 6636, 4370, 0, 0, - 74178, 74587, 74117, 0, 0, 0, 4986, 12189, 0, 67648, 120499, 94001, 4257, - 12104, 77942, 6220, 9004, 65561, 0, 77949, 0, 68135, 917576, 77946, 0, - 69679, 69684, 9890, 78561, 12971, 78453, 92556, 73898, 11979, 70051, - 118900, 917894, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, 65304, - 4679, 10230, 64300, 64867, 3427, 4240, 0, 0, 0, 0, 42916, 0, 0, 0, 7282, - 78728, 65733, 4445, 127138, 128082, 3494, 74606, 6555, 0, 77976, 0, 0, - 78566, 0, 983189, 65898, 983244, 65312, 5447, 0, 12895, 65593, 4010, 0, - 41106, 0, 64448, 0, 41105, 0, 65820, 6232, 0, 128280, 0, 43608, 119091, - 0, 6538, 4335, 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, - 12155, 983674, 42878, 11500, 0, 0, 74578, 0, 65832, 0, 0, 0, 77975, - 119230, 4586, 0, 350, 10951, 0, 509, 0, 0, 92307, 0, 0, 5133, 0, 0, 9500, - 0, 4957, 64741, 2422, 2212, 983080, 0, 0, 2496, 11516, 944, 118851, 3890, - 12168, 1438, 0, 983117, 0, 41947, 1220, 120828, 128555, 0, 0, 1571, - 42630, 41949, 42805, 8270, 943, 564, 0, 312, 41980, 983944, 0, 78120, - 8877, 269, 4429, 6272, 9617, 1460, 6954, 78657, 41120, 65121, 10862, - 6060, 41119, 41416, 74355, 4173, 0, 0, 0, 1906, 917986, 11532, 74073, - 127338, 0, 1985, 6296, 9582, 917895, 64287, 0, 78115, 11428, 1730, 2457, - 917808, 19918, 10469, 0, 0, 7703, 8840, 8035, 0, 0, 92230, 0, 6129, 0, - 128528, 128268, 0, 7874, 8681, 119092, 0, 13136, 0, 0, 70102, 63886, - 118881, 9605, 71308, 13220, 128776, 120274, 5514, 0, 9228, 0, 0, 0, 5240, - 9811, 10012, 3096, 0, 0, 983351, 66676, 65873, 0, 0, 0, 9501, 0, 1272, - 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 0, 917812, 0, - 118899, 12193, 0, 0, 0, 0, 983353, 19935, 0, 92162, 69676, 0, 0, 0, 5275, - 0, 0, 8637, 0, 0, 3789, 63880, 11471, 43554, 65862, 11474, 66332, 66603, - 128138, 2426, 12042, 92194, 983911, 9537, 3961, 12115, 77953, 2605, 4500, - 64561, 55224, 4981, 0, 0, 63876, 11667, 42686, 77973, 42362, 64686, 4499, - 41649, 7589, 0, 0, 3237, 0, 68215, 917904, 8541, 78298, 70034, 41866, 0, - 0, 0, 0, 69924, 43555, 2823, 9559, 10060, 41940, 8299, 41945, 7132, - 41941, 3308, 7190, 64880, 8614, 65220, 41493, 0, 41699, 10762, 43780, - 12999, 0, 0, 8106, 4128, 0, 6274, 4494, 0, 4012, 10395, 983591, 43633, - 65447, 126511, 0, 11004, 695, 739, 696, 7611, 0, 42755, 74802, 9227, - 7506, 7510, 69937, 691, 738, 7511, 7512, 7515, 3868, 688, 41847, 690, - 2548, 737, 974, 8003, 7406, 917911, 0, 128688, 3985, 917912, 65860, - 63921, 7051, 69777, 4682, 917805, 12809, 6406, 4685, 92505, 10879, 10347, - 4680, 6341, 0, 3851, 8132, 74325, 0, 917907, 0, 41958, 119176, 917908, 0, - 0, 42657, 92468, 7643, 42373, 11714, 67587, 43568, 983175, 11717, 7650, - 10594, 64951, 7647, 7649, 128155, 7646, 0, 78082, 9651, 0, 3891, 0, 0, - 2337, 1735, 74324, 67860, 2363, 983135, 0, 43561, 0, 0, 74146, 1860, - 7495, 7580, 5812, 7497, 7584, 119140, 127853, 0, 120347, 7727, 0, 8498, - 69818, 8949, 3065, 42719, 7135, 1569, 92375, 12534, 12124, 7690, 0, - 12533, 983879, 6418, 4543, 78086, 6969, 0, 74800, 0, 67974, 11980, - 128650, 983801, 63894, 120760, 12282, 66192, 0, 74592, 8850, 74275, 9238, - 10617, 917545, 0, 92625, 0, 12791, 0, 0, 127843, 4447, 73732, 12793, - 12900, 92377, 10950, 0, 78087, 12790, 41400, 119128, 66607, 12792, 42232, - 194938, 1744, 12789, 10366, 12317, 41310, 983869, 41399, 0, 0, 55258, 0, - 12690, 0, 0, 43672, 127840, 41652, 2974, 9010, 11315, 0, 278, 0, 41405, - 119254, 0, 10077, 63853, 74557, 42586, 0, 0, 6002, 0, 43553, 0, 67903, 0, - 12787, 41308, 7934, 65306, 0, 0, 0, 8646, 983186, 77829, 71360, 0, 6413, - 6550, 0, 1940, 0, 43637, 220, 65193, 43551, 10678, 10044, 128322, 0, 0, - 68659, 6403, 5707, 10393, 127532, 0, 66614, 0, 0, 0, 10297, 0, 3742, 0, - 3959, 0, 0, 0, 2467, 0, 6003, 63844, 6663, 8040, 0, 43758, 4182, 78171, - 4676, 120501, 0, 0, 2510, 0, 10208, 78168, 92361, 11540, 43546, 6692, 0, - 41060, 0, 4668, 9083, 0, 0, 78144, 1559, 63831, 9677, 120260, 0, 65256, - 0, 74070, 0, 0, 365, 12056, 43027, 120423, 41716, 128236, 0, 120472, - 5516, 2845, 7717, 8036, 41717, 73827, 544, 12045, 6278, 0, 5515, 0, 0, - 983051, 65339, 43221, 2211, 0, 5517, 0, 0, 74841, 67884, 0, 67890, 67885, - 67880, 67881, 67882, 67883, 0, 0, 67879, 127188, 1902, 67887, 9638, - 12976, 126546, 12483, 12368, 41769, 42726, 41765, 7361, 6667, 67874, - 7556, 67878, 74351, 11264, 989, 42677, 67889, 0, 1311, 917966, 4326, - 11000, 63824, 13068, 10932, 128880, 6917, 78155, 0, 949, 78162, 0, 6148, - 8605, 42253, 78177, 0, 0, 42715, 0, 0, 0, 63871, 0, 41796, 1269, 6530, 0, - 65057, 0, 5144, 12221, 42716, 0, 4431, 4331, 983729, 128675, 41834, 5279, - 0, 10336, 8312, 0, 42701, 128825, 0, 78165, 66036, 0, 0, 6428, 42270, 0, - 983596, 43059, 42666, 5256, 1067, 255, 12131, 983722, 9493, 983968, - 41014, 11793, 194920, 0, 74394, 43460, 10653, 42723, 983854, 119632, 0, - 6560, 7016, 74274, 983615, 43556, 3929, 67977, 6614, 2768, 92504, 9746, - 5135, 11811, 12796, 11953, 0, 69761, 5139, 346, 74303, 6305, 12795, 4675, - 5168, 78552, 127753, 74315, 74361, 8253, 8817, 1136, 0, 43563, 92232, 0, - 194750, 7392, 8230, 9365, 0, 0, 983607, 0, 0, 4041, 0, 2357, 43240, - 12786, 229, 119885, 119884, 44004, 7142, 119881, 12350, 65554, 119882, - 119877, 119876, 12785, 63863, 43795, 7770, 10712, 64853, 12686, 118916, - 42375, 0, 127238, 66352, 10470, 0, 11059, 10791, 917944, 450, 119328, 0, - 10432, 12097, 5450, 64691, 1233, 0, 44009, 78284, 66338, 0, 0, 1839, - 118799, 983219, 10927, 1701, 983664, 2388, 41749, 41761, 5453, 8361, - 119865, 41758, 5444, 41763, 64889, 7143, 92493, 78677, 0, 92429, 78174, - 66432, 8801, 3053, 4340, 983044, 0, 65812, 917831, 0, 41824, 67985, - 120203, 194800, 194803, 42700, 194805, 127980, 194807, 78676, 92356, - 194808, 0, 0, 4493, 4336, 0, 2314, 43602, 78826, 119325, 194811, 42439, - 64638, 42327, 43528, 4489, 71331, 0, 194793, 1912, 42385, 10306, 10370, - 0, 0, 8867, 10250, 10258, 2712, 1635, 78821, 1410, 92671, 983250, 118878, - 0, 0, 9919, 120528, 559, 128157, 41825, 127975, 78188, 4892, 74016, - 194781, 6542, 41957, 128865, 5777, 0, 759, 65749, 2079, 65248, 12788, - 64487, 64552, 0, 10223, 42062, 0, 0, 126573, 3668, 65754, 43560, 12226, - 67991, 65149, 2340, 41959, 194786, 194785, 194788, 43618, 65747, 10937, - 2962, 0, 2321, 3587, 65745, 92436, 8921, 9952, 0, 0, 42714, 9951, 43409, + 43698, 65386, 2208, 983454, 43701, 43198, 7184, 92542, 128423, 128875, + 10085, 113812, 0, 67394, 6634, 92373, 125085, 119323, 8072, 119321, + 43700, 0, 8872, 7783, 917991, 12398, 8237, 0, 0, 12395, 0, 126977, + 120565, 9914, 2217, 194586, 73975, 6367, 6351, 66688, 92740, 78107, 0, + 64735, 41243, 92199, 7808, 1829, 0, 41937, 4358, 43272, 6353, 0, 0, + 120422, 93045, 1710, 120140, 0, 65607, 67234, 49, 6627, 0, 6258, 10683, + 78672, 9741, 78329, 5649, 78441, 43443, 64418, 1643, 65213, 8405, 3470, + 67244, 13213, 42452, 78331, 120664, 78445, 125124, 1072, 78457, 78452, + 78454, 6576, 41988, 41132, 65675, 1080, 70824, 9886, 55225, 1101, 68404, + 12309, 55227, 71082, 12632, 1086, 1869, 78685, 7680, 0, 65458, 120714, + 12639, 3380, 8123, 1091, 12638, 7977, 4501, 41099, 0, 66309, 120141, + 92758, 1494, 113716, 126613, 0, 11693, 71255, 10494, 92655, 65872, 12363, + 11386, 113727, 0, 0, 0, 64582, 0, 73794, 67395, 8022, 0, 120462, 74106, + 12413, 66883, 917994, 93035, 917995, 5570, 1881, 7210, 120425, 1012, + 43752, 0, 120709, 7208, 66442, 5569, 983242, 42339, 92997, 6063, 67888, + 69981, 119594, 6053, 65602, 0, 92201, 64727, 9160, 128397, 0, 92905, + 92180, 10503, 70387, 6055, 3870, 4279, 8490, 120114, 4319, 64786, 8602, + 120110, 11326, 92204, 983116, 0, 120119, 78333, 120117, 120118, 120099, + 92385, 65087, 5571, 3674, 9740, 9121, 5568, 120107, 120108, 42085, 10107, + 42159, 42870, 113700, 589, 7050, 983800, 43281, 10233, 41263, 66251, + 65729, 66253, 126497, 74099, 42645, 0, 128424, 8583, 0, 5847, 6928, + 128074, 0, 0, 0, 0, 66592, 12204, 917962, 19966, 77856, 42561, 120626, + 129170, 66854, 8120, 120701, 0, 0, 128012, 41063, 0, 10664, 0, 8369, 0, + 4551, 194964, 3369, 983739, 129026, 9673, 66334, 65580, 10478, 118960, + 12517, 557, 9457, 12034, 68496, 6355, 12519, 41004, 0, 195025, 74094, 0, + 0, 77970, 92171, 127219, 128175, 12111, 3927, 0, 12515, 1474, 67893, + 5492, 6923, 92281, 10441, 73836, 0, 43990, 5493, 0, 74319, 0, 66635, + 12019, 0, 1618, 0, 120474, 9645, 10430, 126636, 5853, 13063, 10363, 0, + 12956, 113666, 120729, 11314, 917582, 12060, 0, 78392, 12826, 6329, 0, + 10514, 65517, 74395, 2707, 8309, 0, 127054, 78398, 43570, 2697, 43420, + 78396, 127057, 2695, 42171, 70809, 68334, 0, 67617, 118971, 0, 2693, + 12125, 12766, 0, 1164, 113729, 0, 41918, 77849, 67150, 8687, 66009, + 12178, 7053, 128001, 7469, 0, 5248, 12218, 69988, 6427, 42884, 41123, + 11176, 0, 42873, 41126, 9991, 41128, 74371, 127031, 0, 9873, 0, 42877, + 7994, 64762, 2053, 42843, 6591, 9340, 0, 1589, 128691, 296, 67712, 78852, + 0, 67841, 74370, 128504, 8922, 128068, 43829, 12700, 74836, 0, 12579, 0, + 12575, 6416, 5656, 2891, 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, + 78404, 41431, 74369, 65373, 5295, 917569, 68320, 1223, 1642, 174, 78399, + 883, 4161, 12691, 42603, 41413, 3212, 41459, 3211, 74810, 41425, 74598, + 78412, 74450, 9728, 3846, 8070, 6150, 6636, 4370, 0, 0, 74178, 74587, + 74117, 195094, 0, 0, 4986, 12189, 127512, 67648, 120499, 94001, 4257, + 12104, 71176, 6220, 9004, 65561, 983881, 77949, 0, 68135, 917576, 77946, + 0, 69679, 69684, 9890, 78561, 12971, 78453, 92556, 73898, 11979, 70051, + 71897, 119552, 0, 9635, 12600, 8871, 67366, 68491, 0, 6469, 74227, + 118900, 65304, 4679, 10230, 64300, 64867, 3427, 4240, 67376, 67375, + 67374, 67373, 42916, 129155, 128279, 67377, 7282, 78728, 65733, 4445, + 67372, 67371, 3494, 67369, 6555, 129148, 77976, 0, 0, 78566, 0, 983189, + 65898, 983244, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 74357, + 64448, 93994, 41105, 74114, 65820, 6232, 68233, 128280, 0, 43608, 119091, + 124962, 6538, 4335, 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, + 12155, 983674, 42878, 11500, 67405, 0, 74578, 0, 65832, 128667, 0, 70789, + 67333, 119230, 4586, 0, 350, 10951, 0, 509, 67336, 0, 92307, 0, 0, 5133, + 67382, 0, 9500, 0, 4957, 64741, 2422, 2212, 983080, 67381, 67380, 2496, + 11516, 944, 78891, 3890, 12168, 1438, 0, 68335, 70003, 41947, 1220, + 120828, 128555, 70854, 74058, 1571, 42630, 41949, 42805, 8270, 943, 564, + 0, 312, 41980, 983944, 0, 70797, 8877, 269, 4429, 6272, 9617, 1460, 6954, + 78657, 41120, 65121, 10862, 6060, 41119, 41416, 74355, 4173, 0, 0, 0, + 1906, 917898, 11532, 74073, 127338, 0, 1985, 6296, 9582, 917895, 64287, + 128406, 78115, 11428, 1730, 2457, 917808, 19918, 10469, 0, 983079, 7703, + 8840, 8035, 0, 0, 92230, 0, 6129, 128437, 78586, 128268, 0, 7874, 8681, + 119092, 11206, 13136, 0, 0, 70102, 63886, 70450, 9605, 71308, 13220, + 67348, 67354, 5514, 0, 9228, 67349, 67356, 67346, 5240, 9811, 10012, + 3096, 0, 0, 74526, 66676, 65873, 0, 0, 0, 9501, 917959, 1272, 64536, + 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 120270, 917812, 0, + 118899, 12193, 0, 0, 0, 0, 983353, 19935, 120733, 92162, 69676, 0, + 917811, 93057, 5275, 194596, 128632, 8637, 129082, 0, 3789, 63880, 11471, + 43554, 65862, 11474, 66332, 66603, 128138, 2426, 12042, 92194, 983911, + 9537, 3961, 12115, 77953, 2605, 4500, 64561, 55224, 4981, 74644, 0, + 41646, 11667, 42686, 77973, 42362, 64686, 4499, 41649, 7589, 128776, 0, + 3237, 0, 66895, 68296, 8541, 78298, 70034, 41866, 0, 0, 94056, 11174, + 69924, 43555, 2823, 9559, 10060, 41940, 8299, 41945, 7132, 41941, 3308, + 7190, 64880, 8614, 65220, 41493, 0, 41699, 10762, 43780, 12999, 0, + 128494, 8106, 4128, 0, 6274, 4494, 0, 4012, 10395, 983591, 43633, 65447, + 126511, 0, 11004, 695, 739, 696, 7611, 0, 42755, 74802, 9227, 7506, 7510, + 69937, 691, 738, 7511, 7512, 7515, 3868, 688, 41847, 690, 2548, 737, 974, + 8003, 7406, 127353, 0, 128688, 3985, 66425, 65860, 41851, 7051, 69777, + 4682, 71873, 12809, 6406, 4685, 92505, 10879, 10347, 4680, 6341, 0, 3851, + 8132, 74325, 0, 917907, 127948, 41958, 119176, 917908, 194855, 0, 42657, + 71075, 7643, 42373, 11714, 67587, 43568, 983175, 11717, 7650, 10594, + 64951, 7647, 7649, 128155, 7646, 0, 78082, 9651, 126475, 3891, 127205, 0, + 2337, 1735, 74324, 11134, 2363, 125061, 92443, 43561, 67706, 128032, + 74146, 1860, 7495, 7580, 5812, 7497, 7584, 119140, 127853, 78753, 120347, + 7727, 0, 8498, 69818, 8949, 3065, 42719, 7135, 1569, 92375, 12534, 12124, + 7690, 0, 12533, 983879, 6418, 4543, 78086, 6969, 0, 74800, 71051, 67974, + 11980, 128650, 983801, 63894, 120760, 12282, 66192, 0, 74592, 8850, + 74275, 9238, 10617, 917545, 917909, 92625, 917801, 12791, 0, 94069, + 127843, 4447, 71065, 12793, 12900, 92377, 10950, 983447, 74639, 12790, + 41400, 119128, 66607, 12792, 42232, 194938, 1744, 12789, 10366, 12317, + 41310, 120730, 41399, 0, 0, 55258, 0, 12690, 0, 0, 43672, 127840, 41652, + 2974, 9010, 11315, 0, 278, 0, 41405, 43871, 0, 10077, 63853, 74557, + 42586, 0, 0, 6002, 67335, 43553, 11189, 67338, 67337, 12787, 41308, 7934, + 65306, 0, 128421, 0, 8646, 983186, 77829, 71360, 0, 6413, 6550, 113759, + 1940, 0, 43637, 220, 65193, 43551, 10678, 10044, 128322, 128121, 983816, + 68290, 6403, 5707, 10393, 127532, 0, 66614, 0, 0, 0, 10297, 0, 3742, + 67331, 3959, 0, 120466, 0, 2467, 69739, 6003, 63844, 6663, 8040, 0, + 43758, 4182, 78171, 4676, 120501, 9210, 0, 2510, 0, 10208, 78168, 92361, + 11540, 43546, 6692, 6837, 41060, 0, 4668, 9083, 0, 0, 78144, 1559, 63831, + 9677, 67340, 67347, 65256, 67345, 67344, 0, 0, 365, 12056, 43027, 120423, + 41716, 128236, 67352, 67351, 5516, 2845, 7717, 8036, 41717, 67353, 544, + 12045, 6278, 74632, 5515, 0, 0, 983051, 65339, 43221, 2211, 0, 5517, + 70116, 74225, 74841, 67884, 128414, 67890, 67885, 67880, 67881, 67882, + 67883, 0, 118883, 67879, 127188, 1902, 67887, 9638, 12976, 126546, 12483, + 12368, 41769, 42726, 41765, 7361, 6667, 67874, 7556, 67878, 74351, 11264, + 989, 42677, 67889, 93040, 1311, 128949, 4326, 11000, 63824, 13068, 10932, + 128880, 6917, 78155, 983615, 949, 77882, 0, 6148, 8605, 42253, 78177, + 66906, 0, 42715, 0, 0, 0, 63871, 0, 41796, 1269, 6530, 0, 65057, 70493, + 5144, 12221, 42716, 68299, 4431, 4331, 983729, 128675, 41834, 5279, 0, + 10336, 8312, 0, 42701, 92959, 0, 78165, 66036, 70166, 124935, 6428, + 42270, 0, 983596, 43059, 42666, 5256, 1067, 255, 12131, 128742, 9493, + 983968, 41014, 11793, 194920, 0, 74394, 43460, 10653, 42723, 983854, + 119632, 70427, 6560, 7016, 74274, 69986, 43556, 3929, 67977, 6614, 2768, + 92504, 9746, 5135, 11811, 12796, 11953, 0, 69761, 5139, 346, 74303, 6305, + 12795, 4675, 5168, 78552, 43845, 74315, 74361, 8253, 8817, 1136, 0, + 43563, 92232, 128914, 66410, 7392, 8230, 9365, 71194, 0, 983607, 66915, + 128402, 4041, 0, 2357, 43240, 12786, 229, 43834, 119884, 44004, 7142, + 119881, 12350, 65554, 119882, 119877, 119876, 12785, 63863, 43795, 7770, + 10712, 64853, 12686, 43831, 42375, 0, 127238, 66352, 10470, 0, 11059, + 10791, 917944, 450, 119328, 0, 10432, 12097, 5450, 64691, 1233, 0, 44009, + 78284, 66338, 66395, 0, 1839, 118799, 983219, 10927, 1701, 983664, 2388, + 41749, 41761, 5453, 8361, 119865, 895, 5444, 41763, 64889, 7143, 92493, + 78677, 983137, 92429, 69983, 66432, 8801, 3053, 4340, 983044, 0, 65812, + 120675, 70001, 41824, 67985, 120203, 92600, 127053, 42700, 194805, + 127980, 194807, 78676, 92356, 194808, 127844, 0, 4493, 4336, 129171, + 2314, 43602, 78826, 119325, 194811, 42439, 64638, 42327, 43528, 4489, + 71331, 128006, 194793, 1912, 42385, 10306, 10370, 0, 0, 8867, 10250, + 10258, 2712, 1635, 71064, 1410, 78763, 983250, 118878, 0, 128715, 9919, + 120528, 559, 128157, 41825, 127975, 74641, 4892, 74016, 194781, 6542, + 41957, 128865, 5777, 0, 759, 65749, 2079, 65248, 12788, 64487, 64552, + 93063, 10223, 42062, 0, 0, 74246, 3668, 65754, 43560, 12226, 67991, + 65149, 2340, 41959, 194786, 194785, 194788, 43618, 65747, 10937, 2962, 0, + 2321, 3587, 65745, 67236, 8921, 9952, 128941, 0, 42714, 9951, 43409, 194770, 2949, 66012, 194775, 194774, 2958, 68359, 41820, 2300, 2395, - 128563, 9976, 120043, 120050, 120058, 68220, 128143, 42809, 42807, 0, - 120046, 10198, 4150, 64371, 8318, 41790, 67976, 41898, 2360, 41794, - 917942, 71314, 127818, 0, 0, 2418, 983098, 2411, 11336, 799, 63823, + 120061, 9976, 120043, 120050, 71896, 68220, 128143, 42809, 42807, 70798, + 66290, 10198, 4150, 64371, 8318, 41790, 67976, 41898, 2360, 41794, + 917942, 70796, 92163, 93033, 0, 2418, 983098, 2411, 11336, 799, 63823, 10276, 10308, 10372, 917541, 41772, 42813, 2317, 10260, 118980, 55284, - 92203, 0, 10384, 983220, 0, 0, 7753, 2351, 6655, 64489, 69931, 0, 77872, - 4443, 42779, 230, 0, 0, 43549, 4855, 42150, 65739, 5441, 41896, 10288, - 10320, 0, 855, 7046, 6109, 65045, 63839, 78198, 2049, 10098, 0, 74145, - 127943, 10264, 10280, 9184, 10376, 7013, 4467, 0, 0, 0, 41887, 0, 4862, - 9735, 6537, 120591, 74286, 3914, 92178, 93976, 9065, 12961, 0, 0, 92253, - 0, 289, 0, 4694, 11420, 4690, 0, 120514, 917978, 4693, 73893, 42724, 0, - 4688, 120454, 0, 0, 67994, 8238, 3110, 120162, 983908, 120163, 6528, - 127553, 43035, 69898, 218, 0, 1520, 0, 4786, 0, 43225, 4602, 0, 78167, - 10088, 6548, 0, 120156, 43978, 8988, 8888, 0, 0, 0, 0, 10666, 0, 73902, - 69740, 0, 0, 9975, 128039, 119902, 4689, 8932, 0, 65560, 119209, 74441, - 78810, 0, 0, 67987, 0, 0, 0, 67989, 0, 10065, 8207, 0, 92613, 128011, 0, - 662, 0, 9244, 194863, 0, 119261, 983428, 0, 0, 0, 41929, 0, 0, 66674, - 41926, 120408, 120443, 10513, 64637, 194862, 68013, 52, 13118, 6475, 0, - 120341, 12095, 10225, 4812, 92578, 0, 67992, 74085, 0, 3978, 0, 917945, - 127823, 11582, 120761, 12281, 0, 6544, 13241, 93961, 69782, 128557, + 78686, 0, 10384, 983220, 0, 129111, 7753, 2351, 6655, 64489, 69931, + 70199, 77872, 4443, 42779, 230, 0, 128969, 43549, 4855, 42150, 65739, + 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 78198, 2049, + 10098, 0, 74145, 127943, 10264, 10280, 9184, 10376, 7013, 4467, 78684, 0, + 0, 41887, 0, 4862, 9735, 6537, 120591, 74286, 3914, 92178, 93976, 9065, + 12961, 0, 0, 92253, 0, 289, 128714, 4694, 11420, 4690, 0, 120514, 917978, + 4693, 73893, 42724, 69977, 4688, 120454, 0, 0, 67994, 8238, 3110, 120162, + 3565, 120163, 6528, 127553, 43035, 69898, 218, 983850, 1520, 0, 4786, + 983168, 43225, 4602, 917982, 78167, 10088, 6548, 0, 120156, 43978, 8988, + 8888, 92724, 74812, 69709, 0, 10666, 0, 73902, 69740, 127793, 0, 9975, + 113704, 119902, 4689, 8932, 0, 65560, 119209, 74441, 78810, 0, 0, 67987, + 0, 128828, 0, 67989, 119029, 10065, 8207, 71900, 92613, 128011, 0, 662, + 0, 9244, 194863, 0, 119261, 983428, 0, 0, 0, 41929, 0, 71084, 66674, + 41926, 69994, 120443, 10513, 64637, 194862, 68013, 52, 13118, 6475, 0, + 120341, 12095, 10225, 4812, 92578, 128486, 67992, 74085, 0, 3978, 128425, + 917945, 74015, 11582, 92768, 12281, 0, 6544, 13241, 93961, 69782, 128557, 194860, 11765, 65258, 10369, 0, 1585, 7192, 10249, 422, 1500, 2036, 986, 194859, 64394, 5781, 5599, 64294, 2494, 120450, 4861, 74021, 64334, - 78203, 127808, 0, 92266, 65102, 8961, 65842, 10243, 10245, 74191, 120410, + 78203, 127808, 0, 92266, 65102, 8961, 65842, 10243, 10245, 71907, 120410, 0, 120453, 64821, 9478, 2508, 92683, 0, 202, 128246, 74131, 1242, 65514, - 0, 63940, 128706, 64533, 120129, 0, 67842, 11990, 92430, 63939, 43375, - 65440, 2504, 0, 78671, 64829, 983910, 6943, 917934, 5859, 0, 2858, - 983361, 74294, 983914, 69239, 0, 119027, 12992, 2753, 1936, 70078, 92574, - 2751, 12662, 2763, 8953, 64701, 10731, 12922, 7052, 917839, 0, 0, 0, - 63920, 74128, 2856, 119910, 47, 69908, 126986, 65858, 0, 0, 0, 7899, 0, + 128913, 63940, 127118, 64533, 71883, 120446, 67842, 11990, 92405, 63939, + 43375, 65440, 2504, 0, 78671, 64829, 93020, 6943, 917934, 5859, 0, 2858, + 983361, 74294, 983914, 69239, 0, 67871, 12992, 2753, 1936, 70078, 67701, + 2751, 12662, 2763, 8953, 64701, 10731, 12922, 7052, 917839, 66424, 63992, + 0, 63920, 74128, 2856, 119910, 47, 69908, 71053, 65858, 0, 0, 0, 7899, 0, 8417, 43798, 7072, 0, 0, 4033, 128164, 43992, 0, 0, 212, 64600, 1903, - 12320, 0, 0, 194563, 0, 8915, 2759, 945, 6689, 0, 0, 0, 0, 1291, 74828, - 0, 0, 9531, 13155, 8505, 68379, 12062, 0, 0, 65487, 92189, 41837, 120611, - 120432, 0, 0, 0, 120433, 0, 63935, 73962, 120806, 64787, 43524, 0, 64426, - 0, 194948, 0, 0, 65664, 6693, 9843, 0, 8674, 119887, 128812, 92715, 0, - 12624, 0, 1673, 4811, 92383, 5986, 9338, 3046, 74480, 5985, 917928, - 119598, 9820, 0, 12187, 0, 0, 5984, 0, 43308, 4393, 67650, 0, 0, 0, 0, - 74826, 64733, 0, 0, 3491, 0, 0, 128219, 3514, 65485, 0, 7492, 0, 74605, - 92483, 7514, 983367, 0, 194731, 7502, 7587, 68353, 0, 0, 63925, 0, 7610, - 219, 0, 0, 692, 43588, 74433, 41635, 43241, 9688, 7147, 9535, 0, 93991, - 0, 64530, 0, 64610, 11804, 0, 7149, 7453, 0, 8013, 0, 92301, 0, 8895, - 5253, 70025, 5458, 0, 2866, 0, 127860, 65111, 68433, 6700, 120484, 0, - 120583, 0, 8962, 77960, 9641, 43694, 7059, 983677, 0, 9604, 78700, 7441, - 63826, 67970, 118941, 64392, 194735, 983687, 2844, 983941, 41974, 0, - 12139, 67971, 0, 0, 3358, 65295, 0, 3104, 194734, 0, 194765, 983233, - 5308, 0, 290, 0, 0, 2862, 2792, 195088, 983070, 0, 3268, 66591, 0, 6552, - 42367, 7035, 120558, 0, 0, 1814, 0, 10240, 92338, 74305, 0, 74528, 65903, - 0, 42646, 7606, 2591, 2837, 4341, 77956, 64482, 127337, 8163, 65270, 0, - 77932, 0, 9112, 74431, 863, 9490, 119898, 128349, 43323, 120513, 119897, - 9071, 127333, 0, 3654, 7789, 9637, 0, 2535, 65504, 7653, 40993, 119899, - 66587, 195098, 0, 92401, 983894, 11006, 12927, 7807, 8073, 0, 10629, 0, - 74088, 3056, 10823, 128797, 127327, 8762, 10508, 69689, 73770, 43969, - 43193, 10737, 3463, 983065, 0, 66633, 8695, 4815, 11322, 5811, 12345, - 7049, 119911, 5195, 195081, 0, 66639, 0, 0, 0, 128041, 0, 92385, 1262, 0, - 6561, 19939, 0, 0, 128535, 119906, 0, 0, 983097, 0, 983667, 119907, - 64612, 11991, 0, 0, 0, 1502, 917568, 0, 9107, 127316, 5702, 3655, 67661, - 8430, 0, 74132, 120758, 0, 74057, 9603, 0, 5254, 120742, 7724, 74388, - 68375, 10796, 5129, 0, 0, 590, 7579, 5614, 5893, 92280, 11720, 92496, - 11721, 0, 4798, 0, 119316, 66038, 4793, 67851, 11726, 127541, 74204, - 68610, 0, 68626, 894, 300, 917813, 12306, 66235, 8004, 0, 0, 2562, - 126555, 0, 42503, 0, 11652, 0, 0, 119241, 64699, 126569, 5096, 5095, - 2863, 3424, 92244, 10454, 42530, 5094, 119638, 0, 13156, 0, 10832, 5093, - 0, 69852, 0, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104, 78599, + 12320, 0, 125002, 194563, 0, 8915, 2759, 945, 6689, 93064, 0, 0, 118798, + 1291, 74828, 0, 0, 9531, 13155, 8505, 68379, 12062, 128198, 0, 65487, + 92189, 41837, 120611, 8246, 0, 93066, 0, 120433, 0, 63935, 73962, 120806, + 64787, 43524, 0, 64426, 0, 194948, 0, 0, 65664, 6693, 9843, 0, 8674, + 119887, 128812, 92715, 70788, 1320, 0, 1673, 4811, 92383, 5986, 9338, + 3046, 74480, 5985, 917928, 119598, 9820, 119892, 12187, 983841, 71041, + 5984, 0, 43308, 4393, 67650, 983227, 0, 125112, 0, 74826, 64733, 0, + 127898, 3491, 67146, 983710, 128219, 3514, 65485, 72428, 7492, 0, 74605, + 92483, 7514, 983367, 0, 194731, 7502, 7587, 68353, 63921, 0, 63925, 0, + 7610, 219, 0, 78722, 692, 43588, 68485, 41635, 43241, 9688, 7147, 9535, + 0, 93991, 0, 64530, 0, 64610, 11804, 0, 7149, 7453, 0, 8013, 0, 92301, 0, + 8895, 5253, 70025, 5458, 0, 2866, 129045, 127860, 11098, 68433, 6700, + 120484, 0, 120583, 0, 8962, 77960, 9641, 43694, 7059, 983677, 63997, + 9604, 78700, 7441, 63826, 67970, 118941, 64392, 92626, 983687, 2844, + 74610, 41974, 67397, 12139, 67971, 0, 0, 3358, 65295, 0, 3104, 194734, 0, + 194765, 983233, 5308, 0, 290, 0, 0, 2862, 2792, 195088, 92963, 0, 3268, + 66591, 0, 6552, 42367, 7035, 120558, 0, 0, 1814, 128572, 10240, 66285, + 74305, 128382, 74528, 65903, 0, 42646, 7606, 2591, 2837, 4341, 43513, + 64482, 127337, 8163, 65270, 0, 77932, 0, 9112, 74431, 863, 9490, 119898, + 128349, 43323, 120513, 119897, 9071, 127333, 0, 3654, 7789, 9637, 0, + 2535, 65504, 7653, 40993, 119899, 66587, 124987, 0, 92401, 983894, 11006, + 12927, 7807, 8073, 0, 10629, 127869, 74088, 3056, 10823, 128797, 113762, + 8762, 10508, 69689, 73770, 43969, 43193, 10737, 3463, 983065, 0, 66633, + 8695, 4815, 11322, 5811, 12345, 7049, 118811, 5195, 195081, 0, 66639, + 92939, 0, 0, 128041, 67903, 67739, 1262, 120165, 6561, 19939, 0, 0, + 128535, 119906, 0, 0, 983097, 0, 983667, 119907, 64612, 11991, 0, 0, + 92943, 1502, 917568, 127988, 9107, 127316, 5702, 3655, 67661, 8430, 0, + 71223, 120758, 0, 74057, 9603, 128079, 5254, 120742, 7724, 74388, 68375, + 10796, 5129, 0, 70816, 590, 7579, 5614, 5893, 92280, 11720, 92496, 11721, + 70804, 4798, 0, 119316, 66038, 4793, 67851, 11726, 127541, 74204, 68610, + 0, 68626, 894, 300, 917813, 12306, 66235, 8004, 0, 195056, 2562, 70156, + 0, 42503, 128864, 11652, 0, 0, 119241, 64699, 126569, 5096, 5095, 2863, + 3424, 92244, 10454, 42530, 5094, 70873, 0, 13156, 129057, 10832, 5093, 0, + 69852, 72430, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104, 78599, 78601, 1215, 42712, 5744, 12272, 9832, 11777, 71299, 127371, 42881, 0, - 8980, 118988, 67861, 8844, 7209, 0, 0, 4278, 0, 0, 194789, 0, 9074, 4348, - 0, 65558, 65946, 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, 71345, 586, - 74414, 64359, 1267, 128269, 65468, 0, 65731, 0, 127179, 3621, 120473, - 66666, 64211, 0, 6562, 12928, 0, 1228, 65490, 11383, 0, 0, 0, 1714, - 74406, 127831, 0, 983921, 0, 66225, 0, 0, 42660, 11436, 2070, 64, 120694, - 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 42710, 0, 42011, 41999, - 92164, 12206, 5839, 1702, 1240, 74065, 6286, 0, 983969, 65833, 77848, 0, - 1765, 0, 0, 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 194704, 10479, - 64959, 2852, 0, 0, 0, 0, 128586, 917951, 6963, 0, 12667, 64540, 74786, - 10147, 12935, 127568, 126483, 0, 0, 0, 78757, 0, 0, 0, 0, 9994, 12467, - 2864, 64719, 1148, 10435, 11462, 41675, 7084, 2765, 0, 43382, 0, 120719, - 128188, 92516, 66662, 0, 78133, 9364, 194685, 74416, 0, 0, 77988, 263, - 10449, 41288, 0, 41839, 78387, 983742, 77986, 0, 6931, 69722, 64355, - 7177, 70105, 0, 0, 0, 4262, 10285, 10722, 42020, 126575, 6806, 6992, - 42019, 0, 41290, 983716, 750, 0, 71304, 10163, 63913, 71300, 7032, 5954, - 64931, 4314, 0, 198, 68453, 730, 120094, 63907, 77993, 78891, 13165, - 7107, 74171, 42804, 678, 8240, 78015, 128784, 41378, 11008, 6938, 70026, - 92637, 2097, 66246, 120560, 0, 0, 0, 3892, 68632, 69642, 6712, 66045, - 41470, 64805, 0, 0, 128215, 64801, 0, 497, 12100, 5953, 92667, 7796, - 69669, 43254, 73831, 0, 10293, 5952, 1281, 43747, 0, 0, 10677, 604, - 41097, 9182, 1859, 0, 92603, 3425, 127488, 0, 2836, 0, 0, 9707, 0, 43202, - 0, 0, 65199, 1738, 917818, 128158, 2832, 92702, 9670, 12937, 0, 66374, - 917956, 0, 2822, 68122, 4436, 92519, 983723, 73752, 0, 64872, 92340, - 1331, 0, 0, 0, 12708, 0, 5090, 5089, 127977, 0, 119109, 0, 128681, 319, - 118847, 43479, 9477, 0, 0, 5087, 92325, 7640, 96, 5086, 0, 92379, 0, - 5085, 64286, 92665, 0, 41422, 0, 119901, 42356, 3772, 0, 0, 5011, 0, 0, - 126587, 0, 127165, 127241, 6677, 7601, 0, 591, 64419, 118953, 92262, 0, - 118923, 70084, 0, 10939, 6106, 6933, 41271, 6760, 71343, 4534, 41270, - 128876, 0, 65574, 0, 9224, 69853, 3671, 8976, 126474, 0, 41275, 6372, - 128084, 55261, 7963, 6371, 0, 568, 0, 41273, 983730, 0, 6728, 0, 9715, 0, - 8258, 11753, 74820, 0, 9602, 118919, 42, 0, 43688, 0, 0, 7458, 0, 0, - 65385, 119900, 0, 11958, 0, 917822, 0, 6254, 42721, 66336, 8045, 11550, - 0, 0, 983597, 42858, 11789, 65868, 5557, 10133, 9737, 13109, 0, 9467, - 5558, 8878, 128136, 195036, 7451, 6706, 10146, 0, 9086, 64566, 0, 64584, - 7437, 7454, 12594, 128690, 68362, 4546, 7731, 0, 70048, 74243, 0, 3805, - 0, 194565, 44001, 41008, 0, 6307, 19949, 983790, 7544, 983045, 43469, 0, - 0, 10152, 64422, 65091, 119113, 7602, 64729, 0, 43521, 0, 42302, 43711, - 43523, 41447, 5559, 0, 8704, 2397, 5556, 0, 0, 0, 9011, 9630, 92633, 0, - 93998, 5506, 0, 1911, 66652, 0, 9961, 8845, 66698, 0, 10792, 8889, 0, - 2098, 0, 64751, 0, 66622, 0, 0, 74364, 0, 0, 983805, 74365, 7552, 0, 0, - 65384, 7223, 4559, 0, 1956, 43138, 7024, 65728, 64501, 1210, 195077, - 65175, 10184, 43140, 43654, 0, 0, 0, 38, 8533, 66669, 119124, 983293, + 8980, 118988, 67861, 8844, 7209, 0, 0, 4278, 128809, 0, 127947, 70821, + 9074, 4348, 0, 65558, 65946, 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, + 71345, 586, 74414, 64359, 1267, 128269, 65468, 0, 65731, 0, 72405, 3621, + 92932, 66666, 64211, 0, 6562, 12928, 983891, 1228, 65490, 11383, 0, 0, + 70343, 1714, 74406, 120751, 0, 983921, 0, 66225, 128608, 70867, 42660, + 11436, 2070, 64, 120694, 0, 10291, 10323, 2826, 113809, 917629, 0, 42008, + 9708, 42710, 0, 42011, 41999, 92164, 12206, 5839, 1702, 1240, 74065, + 6286, 9689, 983969, 65833, 77848, 0, 1765, 0, 0, 65588, 0, 0, 0, 8401, + 983924, 42014, 0, 7030, 194704, 10479, 64959, 2852, 0, 0, 0, 70819, + 128586, 917951, 6963, 0, 12667, 64540, 74786, 10147, 12935, 127568, + 126483, 127782, 0, 0, 78757, 0, 113815, 128968, 0, 9994, 12467, 2864, + 64719, 1148, 10435, 11462, 41675, 7084, 2765, 78466, 43382, 0, 120719, + 128188, 92516, 66662, 0, 78133, 9364, 194685, 74416, 127797, 0, 77988, + 263, 10449, 41288, 0, 41839, 78387, 983742, 77986, 129140, 6931, 69722, + 64355, 7177, 70105, 0, 0, 0, 4262, 10285, 10722, 42020, 126575, 6806, + 6992, 42019, 0, 41290, 983716, 750, 0, 71304, 10163, 63913, 71300, 7032, + 5954, 64931, 4314, 128600, 198, 68453, 730, 120094, 63907, 77993, 70818, + 13165, 7107, 74171, 42804, 678, 8240, 78015, 128784, 41378, 11008, 6938, + 70026, 92637, 2097, 66246, 120560, 70823, 194990, 983604, 3892, 68632, + 69642, 6712, 66045, 41470, 64805, 0, 983213, 128215, 64801, 0, 497, + 12100, 5953, 92667, 7796, 69669, 43254, 73831, 0, 10293, 5952, 1281, + 43747, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 92603, 3425, 127488, 0, + 2836, 0, 0, 9707, 113718, 43202, 0, 0, 65199, 1738, 128311, 67707, 2832, + 92702, 9670, 11101, 0, 66374, 917956, 0, 2822, 68122, 4436, 92519, + 983081, 73752, 0, 64872, 92340, 1331, 0, 0, 0, 12708, 917954, 5090, 5089, + 127977, 983561, 119109, 0, 70826, 319, 118847, 43479, 9477, 0, 0, 5087, + 92325, 7640, 96, 5086, 0, 92379, 0, 5085, 64286, 92665, 113717, 41422, + 119617, 119901, 42356, 3772, 119042, 0, 5011, 0, 0, 126587, 0, 127165, + 127241, 6677, 7601, 0, 591, 64419, 118953, 92262, 0, 70799, 70084, 0, + 10939, 6106, 6933, 41271, 6760, 71343, 4534, 41270, 128876, 67138, 65574, + 194947, 9224, 67140, 3671, 8976, 67139, 0, 41275, 6372, 128084, 55261, + 7963, 6371, 0, 568, 92368, 41273, 983730, 74531, 6728, 0, 9715, 0, 8258, + 11753, 74820, 0, 9602, 118919, 42, 11191, 43688, 68243, 0, 7458, 0, 0, + 65385, 67135, 67134, 11958, 11165, 917822, 125087, 6254, 42721, 66336, + 8045, 11550, 0, 67132, 67131, 42858, 11789, 65868, 5557, 10133, 9737, + 13109, 0, 9467, 5558, 8878, 43844, 195036, 7451, 6706, 10146, 0, 9086, + 64566, 0, 64584, 7437, 7454, 12594, 73749, 68362, 4546, 7731, 0, 70048, + 74243, 125092, 3805, 0, 67128, 44001, 41008, 128052, 6307, 19949, 67129, + 7544, 983045, 43469, 0, 0, 10152, 64422, 65091, 67124, 7602, 64729, 0, + 43521, 0, 42302, 43711, 43523, 41447, 5559, 68483, 8704, 2397, 5556, 0, + 0, 0, 9011, 9630, 11166, 0, 93998, 5506, 92498, 1911, 66652, 67686, 9961, + 8845, 66698, 68325, 10792, 8889, 0, 2098, 0, 64751, 128360, 66622, + 983122, 0, 74364, 113708, 129152, 983805, 42909, 7552, 128622, 0, 65384, + 7223, 4559, 93015, 1956, 43138, 7024, 65728, 43490, 1210, 195077, 65175, + 10184, 43140, 43654, 0, 0, 125045, 38, 8533, 66669, 119124, 983293, 983792, 0, 4357, 0, 119837, 917863, 74233, 9967, 78884, 42860, 119838, - 10941, 65721, 6962, 0, 0, 119324, 0, 11014, 127972, 8942, 12000, 69224, - 92267, 128536, 11974, 92213, 42772, 127518, 11650, 5013, 92663, 126583, - 66210, 118914, 6613, 92476, 0, 43819, 983770, 0, 64714, 0, 0, 12162, - 12120, 43476, 983766, 11024, 74811, 66228, 10563, 0, 127196, 43522, 2462, - 0, 1837, 0, 63972, 6957, 0, 120559, 4952, 65718, 65827, 5504, 65720, - 65714, 65715, 65716, 0, 127005, 127119, 3109, 63975, 74028, 0, 8107, - 119234, 1127, 455, 0, 63968, 127924, 3483, 119593, 1989, 0, 69678, 9104, - 3503, 65375, 92509, 6694, 42633, 1864, 0, 74306, 41446, 2540, 7736, 0, - 74064, 0, 10521, 0, 42173, 9705, 74124, 8604, 6955, 10916, 43684, 6149, - 3887, 19956, 1411, 2824, 0, 10106, 127862, 1403, 128839, 1347, 9631, - 74444, 0, 0, 0, 0, 8640, 0, 258, 1654, 0, 0, 0, 43314, 0, 0, 4042, 11478, - 2873, 63977, 11522, 41668, 8549, 10861, 0, 63976, 0, 68623, 0, 74585, - 41391, 0, 917903, 376, 6987, 9221, 0, 0, 8823, 128697, 12943, 65185, - 41869, 12619, 0, 10154, 983043, 74439, 2039, 0, 7446, 1684, 63979, 10974, - 458, 120620, 0, 69791, 127161, 11916, 65016, 0, 69671, 42115, 983133, - 12288, 78057, 0, 1493, 42111, 7553, 4097, 128199, 13080, 0, 65808, 6610, - 6030, 8059, 7508, 13131, 0, 983431, 0, 8794, 41278, 41629, 12154, 128192, - 41277, 64658, 0, 64380, 6625, 74354, 19904, 0, 0, 0, 65371, 7078, 0, 833, - 0, 6369, 0, 10979, 41953, 0, 41434, 6062, 0, 0, 19916, 6913, 933, 1341, - 9842, 6720, 65744, 0, 983592, 128295, 0, 7405, 10105, 65810, 0, 41632, - 7493, 55290, 0, 41622, 0, 0, 119556, 74584, 7632, 9716, 19954, 9805, - 5990, 900, 0, 63957, 0, 0, 3612, 0, 64376, 93987, 5389, 92597, 0, 65938, - 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956, 4403, - 19962, 65559, 3299, 0, 917566, 119127, 9002, 0, 74372, 74236, 8478, 7598, - 546, 42469, 65569, 1918, 9542, 472, 7716, 10319, 10383, 6996, 0, 63952, - 8425, 3602, 8328, 11764, 118894, 0, 69796, 41183, 12907, 10271, 10287, - 684, 43525, 0, 2854, 119586, 4592, 65755, 0, 92256, 11963, 43620, 0, - 78249, 0, 128551, 128809, 9881, 43115, 65757, 3415, 119131, 0, 8648, 0, - 6741, 43047, 0, 13180, 128517, 418, 917972, 64495, 10295, 10327, 10391, - 41752, 74339, 8641, 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849, - 41751, 69776, 8941, 983556, 4554, 0, 9023, 11685, 0, 9928, 78617, 0, - 11437, 43741, 92163, 120700, 63967, 983483, 41206, 120724, 9049, 41185, - 43166, 0, 11680, 92619, 11686, 78544, 65224, 4565, 4655, 119553, 0, - 92183, 64523, 10343, 10407, 0, 66671, 11466, 0, 128003, 42890, 74013, - 12050, 68201, 2860, 0, 0, 0, 42792, 5743, 10424, 12065, 42872, 0, 92342, - 0, 8875, 0, 0, 917991, 7531, 12847, 2413, 0, 78635, 962, 0, 12855, 41196, - 42564, 0, 1582, 983715, 5508, 0, 0, 0, 10801, 69876, 92354, 0, 7173, 496, - 10439, 4313, 64607, 69638, 7860, 0, 906, 42793, 2842, 6405, 64722, 13132, - 798, 64694, 12801, 8406, 1153, 92173, 64788, 0, 8054, 9174, 128652, - 917976, 9964, 74409, 41611, 4642, 66574, 11556, 917982, 0, 78857, 42089, - 78855, 9008, 0, 126592, 195096, 42079, 917981, 77924, 42513, 77927, - 42842, 73985, 65285, 118974, 127003, 983702, 0, 0, 0, 11335, 64069, - 42093, 3920, 0, 0, 0, 0, 4580, 41967, 983732, 64384, 92167, 93984, 3021, - 42004, 0, 0, 42317, 41998, 0, 6946, 0, 0, 0, 128193, 65204, 0, 68113, - 42690, 9880, 42010, 74824, 64589, 10111, 64875, 127880, 68399, 43998, - 11360, 0, 0, 0, 118826, 42149, 0, 0, 0, 64941, 77919, 120421, 128077, 0, - 55247, 4110, 66005, 6959, 10929, 119110, 0, 66703, 77921, 8617, 41982, - 6025, 69242, 983176, 0, 0, 0, 9597, 42099, 43172, 983376, 10117, 983169, - 92297, 41636, 0, 0, 120681, 8301, 0, 0, 187, 0, 65669, 128339, 4963, 0, - 127517, 0, 8964, 65676, 7775, 0, 41948, 0, 0, 0, 41942, 65449, 3160, - 10081, 13226, 42121, 42475, 42663, 128210, 41766, 119114, 65882, 78849, - 41760, 1189, 905, 480, 10985, 41733, 67859, 9629, 6742, 1745, 43625, - 73835, 7888, 0, 3980, 0, 42656, 41507, 8806, 7023, 0, 74279, 9447, 78651, - 7867, 69218, 6236, 983134, 0, 10505, 0, 12851, 118948, 348, 5474, 128843, - 3103, 0, 41753, 128540, 0, 0, 78844, 78845, 41739, 78843, 42515, 10931, - 41756, 43347, 42560, 5391, 41746, 119147, 92591, 41259, 5561, 69930, - 2691, 0, 65553, 7933, 5562, 69800, 128265, 41262, 128146, 64421, 74846, - 41251, 0, 0, 3979, 0, 0, 74813, 983739, 0, 0, 0, 92524, 41266, 0, 66566, - 128836, 10585, 65741, 41737, 9574, 2666, 0, 41738, 831, 419, 13126, - 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 128106, 69932, 916, 769, - 41742, 11968, 74805, 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, - 126537, 4497, 3754, 127056, 120424, 9039, 0, 41776, 0, 8716, 1595, 41615, - 0, 0, 74260, 0, 42854, 43219, 128709, 983460, 12185, 128879, 70072, - 68355, 68357, 0, 42856, 8634, 0, 983397, 4209, 120702, 0, 65879, 41538, - 65612, 127543, 669, 5679, 0, 69786, 92540, 0, 983464, 5678, 11821, 0, - 6711, 460, 0, 0, 983461, 0, 120747, 0, 0, 78050, 119022, 0, 983462, 0, - 7782, 9044, 4974, 11760, 78494, 7577, 65711, 41912, 1216, 0, 128079, - 5792, 0, 0, 78501, 0, 2933, 12244, 0, 5683, 983392, 0, 78119, 1549, 0, 0, - 120398, 5682, 6206, 8670, 10256, 5680, 69935, 10001, 128512, 69768, 1449, - 10241, 78290, 128228, 0, 10552, 64342, 41922, 128548, 8584, 68030, 5567, + 10941, 65721, 6962, 0, 0, 113808, 0, 11014, 120126, 8942, 12000, 69224, + 92267, 128536, 11974, 67363, 42772, 42650, 11650, 5013, 92663, 126583, + 66210, 118914, 6613, 92476, 0, 11193, 983770, 0, 64714, 0, 70802, 12162, + 12120, 43476, 983766, 11024, 74811, 66228, 10563, 92954, 127196, 43522, + 2462, 92955, 1837, 125086, 63972, 6957, 0, 113820, 4952, 65718, 64405, + 5504, 65720, 65714, 65715, 65716, 0, 127005, 127119, 3109, 63975, 74028, + 127213, 8107, 67154, 1127, 455, 0, 63968, 127835, 3483, 119593, 1989, 0, + 69678, 9104, 3503, 65375, 68300, 6694, 42633, 1864, 0, 74306, 41446, + 2540, 7736, 917916, 74064, 128601, 10521, 70786, 42173, 9705, 74124, + 8604, 6955, 10916, 43684, 6149, 3887, 19956, 1411, 2824, 0, 10106, + 127862, 1403, 125053, 1347, 9631, 74444, 983753, 0, 92951, 0, 8640, 0, + 258, 1654, 0, 0, 0, 43314, 0, 0, 4042, 11478, 2873, 63977, 11522, 41668, + 8549, 10861, 128430, 63976, 70377, 68623, 67082, 67081, 41391, 67084, + 917903, 376, 6987, 9221, 0, 0, 8823, 128697, 12943, 65185, 41869, 12619, + 0, 10154, 983043, 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, 120620, + 0, 69791, 127161, 11916, 65016, 0, 69671, 42115, 983133, 12288, 78057, + 67080, 1493, 42111, 7553, 4097, 128199, 13080, 0, 65808, 6610, 6030, + 8059, 7508, 13131, 67074, 67073, 0, 8794, 41278, 41629, 12154, 128192, + 41277, 64658, 0, 64380, 6625, 42911, 19904, 0, 0, 71193, 65371, 7078, 0, + 833, 0, 6369, 0, 10979, 41953, 0, 41434, 6062, 0, 0, 19916, 6913, 933, + 1341, 9842, 6720, 65744, 71200, 983592, 128295, 0, 7405, 10105, 65810, 0, + 41632, 7493, 55290, 92890, 41622, 0, 0, 119556, 74584, 7632, 9716, 19954, + 9805, 5990, 900, 0, 63957, 119638, 0, 3612, 0, 64376, 93987, 5389, 92597, + 0, 65938, 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956, + 4403, 19962, 65559, 3299, 0, 917566, 119127, 9002, 0, 74372, 74236, 8478, + 7598, 546, 42469, 65569, 1918, 9542, 472, 7716, 10319, 10383, 6996, + 43077, 63952, 8425, 3602, 8328, 11764, 118894, 983750, 65065, 41183, + 12907, 10271, 10287, 684, 43525, 0, 2854, 119586, 4592, 65755, 983276, + 67120, 11963, 43620, 67117, 78249, 67123, 67122, 67121, 9881, 43115, + 65757, 3415, 69677, 67116, 8648, 128377, 6741, 43047, 917970, 13180, + 78077, 418, 120653, 64495, 10295, 10327, 10391, 41752, 66846, 8641, + 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849, 41751, 69776, 8941, + 983556, 4554, 66892, 9023, 11685, 0, 9928, 67109, 66865, 11437, 43741, + 67113, 67112, 63967, 983483, 41206, 12624, 9049, 41185, 43166, 0, 8159, + 92619, 11686, 78544, 65224, 4565, 4655, 119553, 129090, 92183, 64523, + 10343, 10407, 92764, 66671, 11466, 0, 128003, 42890, 74013, 12050, 68201, + 2860, 0, 0, 70828, 42792, 5743, 10424, 12065, 42872, 0, 92342, 67103, + 8875, 0, 67102, 67105, 7531, 12847, 2413, 118917, 67404, 962, 0, 12855, + 41196, 42564, 0, 1582, 983715, 5508, 0, 0, 0, 10801, 69876, 92354, + 119207, 7173, 496, 10439, 4313, 64607, 69638, 7860, 0, 906, 42793, 2842, + 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 92173, 64788, 127007, + 8054, 9174, 67087, 67086, 9964, 67096, 41611, 4642, 66574, 11556, 42512, + 0, 78857, 42089, 74613, 9008, 0, 126592, 195096, 42079, 917981, 77924, + 42513, 77927, 42842, 73985, 65285, 68338, 127003, 983702, 0, 194761, + 983590, 11335, 64069, 42093, 3920, 0, 0, 11110, 0, 4580, 41967, 129043, + 64384, 92167, 93984, 3021, 42004, 0, 983372, 42317, 41998, 0, 6946, + 194755, 92967, 0, 128193, 65204, 0, 68113, 42690, 9880, 42010, 74824, + 64589, 10111, 64875, 127880, 68399, 43998, 11360, 0, 74182, 128648, + 92633, 42149, 0, 68508, 917993, 64941, 77919, 120421, 128077, 0, 55247, + 4110, 66005, 6959, 10929, 42907, 0, 66703, 77921, 8617, 41982, 6025, + 69242, 983176, 194854, 125139, 0, 9597, 42099, 43172, 983376, 10117, + 983169, 92297, 41636, 194889, 73738, 120681, 8301, 0, 0, 187, 128237, + 65669, 128339, 4963, 0, 127517, 0, 8964, 65676, 7775, 0, 41948, 125003, + 0, 0, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 42663, 128210, + 41766, 119114, 65882, 78849, 41760, 1189, 905, 480, 10985, 41733, 67859, + 9629, 6742, 1745, 43625, 73835, 7888, 0, 3980, 70373, 42656, 41507, 8806, + 7023, 0, 74279, 9447, 78651, 7867, 69218, 6236, 983134, 0, 10505, 129135, + 12851, 118948, 348, 5474, 128843, 3103, 0, 41753, 71109, 128604, 0, + 78844, 78845, 41739, 78843, 42515, 10931, 41756, 43347, 42560, 5391, + 41746, 119147, 92591, 41259, 5561, 69930, 2691, 92941, 65553, 7933, 5562, + 69800, 128265, 41262, 128146, 64421, 74846, 41251, 0, 0, 3979, 71248, 0, + 68331, 917912, 0, 0, 0, 74633, 41266, 0, 66566, 128836, 10585, 65741, + 41737, 9574, 2666, 0, 41738, 831, 419, 13126, 10716, 0, 42822, 0, 6434, + 74857, 6939, 7766, 6432, 128106, 69932, 916, 769, 41742, 11968, 74805, + 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, 126537, 4497, 3754, 127056, + 120424, 9039, 0, 41776, 0, 8716, 1595, 41615, 0, 0, 74260, 74860, 42854, + 43219, 128709, 129083, 12185, 113810, 70072, 68355, 68357, 68421, 42856, + 8634, 0, 119988, 4209, 120702, 78046, 65879, 41538, 65612, 127543, 669, + 5679, 0, 69786, 92540, 0, 70445, 5678, 11821, 0, 6711, 460, 0, 0, 983461, + 70114, 120747, 0, 128412, 78050, 119022, 0, 983462, 983174, 7782, 9044, + 4974, 11760, 78494, 7577, 65711, 41912, 1216, 0, 127017, 5792, 0, 128319, + 78501, 0, 2933, 12244, 0, 5683, 917896, 0, 78119, 1549, 0, 0, 120398, + 5682, 6206, 8670, 10256, 5680, 69935, 10001, 67237, 69768, 1449, 10241, + 78290, 119587, 194891, 10552, 64342, 41922, 70330, 8584, 68030, 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 983256, 128026, 0, 65708, 65709, 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, 5942, 8468, - 120561, 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, - 78702, 78703, 78690, 457, 78502, 65701, 1934, 43006, 119903, 8802, 78710, - 65130, 11747, 78709, 6087, 78705, 78716, 41757, 78711, 8043, 8950, 65694, - 64485, 43534, 10457, 0, 11961, 78725, 78722, 78723, 78720, 78721, 0, - 65515, 9499, 10035, 13069, 71309, 0, 9889, 68184, 42806, 0, 7256, 0, 0, - 1667, 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, 8101, - 3610, 983199, 41748, 4995, 955, 65907, 119208, 5350, 64339, 78306, 64549, - 10875, 128662, 5477, 65692, 0, 128532, 120397, 12896, 10456, 917954, 0, - 3874, 0, 0, 983619, 120331, 0, 0, 65603, 0, 65687, 0, 41038, 74009, - 119570, 42239, 8536, 78740, 78324, 78726, 74432, 724, 0, 1455, 78749, - 7183, 64583, 78747, 68443, 4175, 78741, 43614, 69801, 939, 0, 43520, - 68613, 74569, 917958, 0, 78763, 78764, 78760, 10788, 6088, 78759, 78755, - 190, 0, 12593, 0, 8188, 64408, 0, 4417, 983213, 92261, 6370, 0, 7827, - 68441, 6965, 0, 0, 13201, 128205, 69896, 0, 74382, 73781, 7918, 73988, 0, - 0, 917884, 1728, 0, 43764, 178, 12972, 92679, 0, 917887, 92563, 983381, - 0, 78327, 120405, 65690, 0, 0, 119054, 0, 9252, 917889, 4652, 68371, 0, - 0, 0, 13065, 9923, 10806, 0, 11763, 70016, 120688, 6723, 78187, 0, 6993, - 0, 0, 8333, 0, 0, 11390, 0, 74464, 0, 92320, 74080, 983315, 69911, 11910, + 120561, 10361, 10425, 65697, 65698, 65699, 0, 66598, 110592, 64664, + 10647, 78702, 78703, 78690, 457, 78502, 65701, 1934, 43006, 119903, 8802, + 78710, 65130, 11747, 78709, 6087, 78705, 78716, 41757, 78711, 8043, 8950, + 65694, 64485, 43534, 10457, 0, 11961, 78725, 66850, 78723, 78720, 78721, + 0, 65515, 9499, 10035, 13069, 71309, 0, 9889, 68184, 42806, 0, 7256, 0, + 983179, 1667, 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, + 8101, 3610, 68420, 41748, 4995, 955, 65907, 119208, 5350, 64339, 78306, + 64549, 10875, 125052, 5477, 65692, 0, 128532, 120397, 12896, 10456, + 68298, 0, 3874, 0, 0, 983619, 120331, 0, 113665, 65603, 0, 65687, 0, + 41038, 74009, 9207, 42239, 8536, 78740, 78324, 78726, 74432, 724, 0, + 1455, 78749, 7183, 64583, 78747, 68443, 4175, 78741, 43614, 69801, 939, + 0, 43520, 68613, 74569, 917958, 0, 70168, 78764, 78760, 10788, 6088, + 78759, 78755, 190, 0, 12593, 0, 8188, 64408, 0, 4417, 128615, 92261, + 6370, 125128, 7827, 68441, 6965, 128581, 128868, 13201, 128205, 69896, + 78868, 74382, 11841, 7918, 73988, 0, 113668, 917884, 1728, 0, 43764, 178, + 12972, 74620, 113671, 71103, 11168, 983381, 113672, 78327, 119904, 65690, + 0, 71107, 119054, 0, 9252, 917889, 4652, 68371, 0, 917891, 74070, 13065, + 9923, 10806, 0, 11763, 70016, 120688, 6723, 78187, 0, 6993, 71044, 0, + 8333, 0, 0, 11390, 0, 74464, 0, 92320, 74080, 983315, 69911, 11910, 92559, 8278, 8963, 4034, 128560, 0, 65344, 120517, 41747, 0, 0, 8677, 0, - 12707, 9350, 66037, 128180, 8836, 12315, 12747, 8300, 983750, 0, 7491, + 12707, 9350, 66037, 128180, 8836, 12315, 12747, 8300, 194562, 0, 7491, 8856, 71361, 0, 43150, 127768, 120404, 65389, 120402, 120403, 10813, - 2592, 12853, 43269, 7263, 120244, 6536, 120238, 120239, 65516, 12321, - 120391, 120388, 55287, 10007, 120246, 9588, 120248, 1596, 120383, 41994, - 65801, 128808, 0, 66572, 0, 0, 10613, 6697, 12805, 41928, 40981, 78403, - 78409, 5006, 64328, 0, 9931, 0, 8825, 74555, 65940, 43259, 0, 6107, 0, - 119177, 0, 78401, 128641, 11783, 335, 120227, 64689, 438, 4510, 5765, - 8721, 120233, 119227, 6092, 12840, 43112, 8876, 120231, 8096, 10284, - 128515, 0, 0, 10380, 8733, 983072, 128240, 41602, 0, 92308, 74831, - 917901, 0, 73747, 65399, 0, 64591, 42405, 0, 120820, 843, 11541, 0, - 917898, 2065, 41935, 74496, 41902, 0, 0, 215, 41258, 77875, 43159, 1953, - 9579, 41938, 1256, 3910, 9407, 6242, 0, 983100, 41257, 41900, 8675, - 10700, 8805, 1742, 0, 9333, 8202, 127750, 0, 983197, 0, 0, 73882, 499, - 983049, 43467, 0, 43818, 0, 1712, 5932, 77845, 41762, 983104, 0, 11967, - 1775, 0, 0, 0, 0, 128009, 9458, 0, 6470, 9180, 120380, 43176, 0, 0, - 42782, 0, 0, 0, 128309, 74777, 120669, 9414, 120382, 73782, 73969, 565, - 42484, 5794, 201, 2662, 42292, 0, 8254, 0, 10975, 0, 120625, 74763, 1022, - 4108, 3880, 74247, 0, 0, 92263, 917980, 7507, 0, 43149, 0, 65031, 7961, - 1636, 0, 65029, 65024, 0, 12473, 6534, 0, 99, 98, 97, 120571, 67584, - 4049, 74163, 127065, 7090, 0, 7892, 917969, 10777, 917803, 65310, 65562, - 66599, 66722, 0, 8039, 3363, 66594, 43434, 0, 0, 12596, 66595, 42258, - 42570, 5593, 119148, 120711, 92425, 10100, 6061, 64854, 119, 118, 117, - 116, 12998, 122, 121, 120, 111, 110, 109, 108, 115, 114, 113, 112, 103, - 102, 101, 100, 107, 106, 105, 104, 6436, 73974, 534, 41212, 77931, 1536, + 2592, 12853, 43269, 7263, 120244, 6536, 120238, 71891, 65516, 12321, + 120391, 120388, 55287, 10007, 120246, 9588, 68494, 1596, 120383, 41994, + 65801, 128808, 6838, 3561, 0, 0, 10613, 6697, 12805, 41928, 40981, 10804, + 78409, 5006, 64328, 0, 9931, 0, 8825, 74555, 65940, 43259, 126586, 6107, + 0, 119177, 77941, 78401, 128641, 11783, 335, 120227, 64689, 438, 4510, + 5765, 8721, 119570, 119227, 6092, 12840, 43112, 8876, 120231, 8096, + 10284, 128515, 0, 0, 10380, 8733, 10316, 70121, 41602, 0, 92308, 74831, + 917901, 0, 68482, 65399, 0, 64591, 42405, 0, 120820, 843, 11541, 128326, + 70321, 2065, 41935, 74496, 41902, 0, 983304, 215, 41258, 77875, 43159, + 1953, 9579, 41938, 1256, 3910, 9407, 6242, 0, 983100, 41257, 41900, 8675, + 10700, 8805, 1742, 113722, 9333, 8202, 72399, 0, 983197, 127252, 0, + 73882, 499, 983049, 43467, 0, 43818, 0, 1712, 5932, 77845, 41762, 983104, + 0, 11967, 1775, 125006, 0, 11118, 0, 128009, 9458, 0, 6470, 9180, 120380, + 43176, 0, 0, 42782, 0, 124999, 983135, 128309, 73849, 120669, 9414, + 74647, 73782, 73969, 565, 42484, 5794, 201, 2662, 42292, 0, 8254, 0, + 10975, 43518, 120625, 74763, 1022, 4108, 3880, 74247, 0, 0, 92263, + 917980, 7507, 983118, 43149, 71059, 65031, 7961, 1636, 0, 65029, 65024, + 119099, 12473, 6534, 120633, 99, 98, 97, 68226, 67584, 4049, 74163, + 127065, 7090, 0, 7892, 917969, 10777, 917803, 65310, 65562, 66599, 66722, + 194955, 8039, 3363, 66594, 43434, 0, 71191, 12596, 66595, 42258, 42570, + 5593, 119148, 120711, 92425, 10100, 6061, 64854, 119, 118, 117, 116, + 12998, 122, 121, 120, 111, 110, 109, 108, 115, 114, 113, 112, 103, 102, + 101, 100, 107, 106, 105, 104, 6436, 73974, 534, 41212, 67713, 1536, 64093, 73970, 77930, 127157, 0, 6020, 12716, 127112, 12744, 475, 120394, - 13266, 127813, 127111, 0, 73926, 0, 10645, 1212, 6543, 983307, 8134, - 128028, 2913, 73870, 127113, 1866, 983229, 195095, 0, 8923, 1645, 12059, - 66585, 71297, 3196, 0, 0, 5935, 1250, 127066, 8174, 9787, 6733, 9859, - 7916, 9861, 9860, 5258, 1882, 1892, 6731, 10882, 405, 11454, 73911, 0, - 128781, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, 12157, 0, 0, 0, - 41172, 7855, 0, 0, 10480, 0, 0, 77936, 8264, 12610, 983308, 645, 126616, - 7609, 40973, 69943, 73833, 69948, 5824, 984, 77918, 10688, 5851, 0, 7729, - 73982, 120518, 0, 195086, 43369, 0, 128140, 68415, 983093, 4538, 120406, - 43141, 0, 983210, 74214, 73886, 0, 0, 118902, 43005, 78448, 9552, 0, 0, - 983159, 12997, 0, 0, 0, 0, 2381, 12883, 10994, 10529, 41906, 0, 0, 0, - 12425, 10661, 10856, 9614, 2428, 41478, 8582, 10064, 73930, 0, 0, 0, - 64896, 119162, 1952, 92181, 8455, 10082, 11575, 983490, 119566, 0, 12808, - 12183, 6145, 118955, 64929, 92433, 0, 983193, 43186, 42509, 0, 3922, - 9187, 983614, 0, 10191, 119057, 11752, 3353, 9358, 0, 71366, 66680, - 120090, 8248, 7931, 8558, 9795, 68380, 983297, 0, 120082, 120081, 120084, - 41027, 120086, 0, 120088, 7366, 7019, 120073, 0, 11751, 120078, 78294, - 64657, 8657, 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, - 43154, 41029, 0, 11332, 65380, 7728, 94077, 11294, 0, 66665, 7851, 0, - 8375, 8699, 0, 42524, 0, 9085, 94041, 7504, 9327, 6160, 128095, 983864, - 0, 8088, 0, 74012, 92500, 0, 4439, 6926, 983047, 12924, 128227, 42369, + 13266, 127813, 127111, 78842, 73926, 66291, 10645, 1212, 6543, 983307, + 8134, 128028, 2913, 73870, 127113, 1866, 983229, 71892, 0, 8923, 1645, + 12059, 66585, 71297, 3196, 72404, 194827, 5935, 1250, 127066, 8174, 9787, + 6733, 9859, 7916, 9861, 9860, 5258, 1882, 1892, 6731, 10882, 405, 11454, + 73911, 113787, 92529, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, + 12157, 0, 0, 0, 41172, 7855, 0, 0, 10480, 43258, 917819, 77936, 8264, + 12610, 983308, 645, 126616, 7609, 40973, 69943, 73833, 69948, 5824, 984, + 77918, 10688, 5851, 0, 7729, 73982, 120518, 0, 195086, 43369, 0, 128140, + 68415, 92644, 4538, 93978, 43141, 0, 983210, 74214, 73886, 67709, 917599, + 71918, 43005, 78448, 9552, 0, 70129, 129173, 12997, 0, 0, 0, 0, 2381, + 12883, 10994, 10529, 41906, 0, 74618, 0, 12425, 10661, 10856, 9614, 2428, + 41478, 8582, 10064, 73930, 0, 70437, 0, 64896, 119162, 1952, 92181, 8455, + 10082, 11575, 129062, 119566, 128093, 12808, 12183, 6145, 118955, 64929, + 92433, 71916, 983193, 43186, 42509, 0, 3922, 9187, 126513, 0, 10191, + 119057, 11752, 3353, 9358, 983460, 71366, 66680, 120090, 8248, 7931, + 8558, 9795, 68380, 983297, 0, 120082, 120081, 120084, 41027, 120086, 0, + 120088, 7366, 7019, 70378, 0, 11751, 120078, 78294, 64657, 8657, 120048, + 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 113711, 43154, 41029, 0, + 11332, 65380, 7728, 94077, 11294, 0, 66665, 7851, 0, 8375, 8699, 127949, + 42524, 68419, 9085, 94041, 7504, 9327, 6160, 128095, 983864, 194929, + 8088, 128937, 74012, 66562, 0, 4439, 6926, 72423, 12924, 128227, 42369, 4350, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 983283, 0, 0, - 65825, 9577, 68199, 0, 64670, 983121, 78056, 6793, 11295, 0, 78053, - 73872, 0, 0, 10902, 0, 0, 78070, 78068, 10472, 2995, 0, 0, 64682, 2371, - 78069, 120808, 259, 1009, 92171, 2402, 2333, 6440, 194741, 0, 65125, - 41244, 0, 13271, 9103, 2278, 0, 0, 0, 0, 10219, 0, 0, 0, 0, 43178, - 127070, 41261, 119362, 43640, 8613, 0, 94049, 6736, 195092, 41492, 12005, - 69927, 0, 1890, 120056, 0, 0, 0, 7293, 7991, 0, 10578, 0, 78076, 194738, - 78077, 69928, 0, 78800, 92653, 64445, 42668, 6635, 0, 6164, 65170, 0, 0, - 7676, 11664, 0, 983658, 69707, 0, 118812, 0, 0, 128045, 9175, 11925, - 78045, 9088, 0, 64545, 1396, 0, 7546, 3847, 127177, 127835, 4985, 13288, - 672, 8098, 43196, 194746, 983096, 128126, 42655, 74043, 65072, 1577, - 11772, 13041, 5928, 4525, 10658, 65911, 1266, 10180, 0, 128584, 12622, 0, - 0, 0, 194714, 127139, 13310, 773, 19933, 1539, 0, 126983, 42731, 67972, - 0, 0, 0, 3051, 5862, 7823, 92478, 0, 120411, 3250, 43991, 69687, 66649, - 9510, 66237, 983302, 0, 41066, 64673, 917963, 917964, 0, 3505, 8707, - 917968, 6725, 128013, 917971, 92314, 3471, 917970, 5479, 882, 6686, - 119584, 11613, 120772, 42754, 0, 983306, 92696, 0, 0, 0, 128523, 3225, - 917996, 4433, 41156, 43973, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, - 64879, 917949, 917950, 127848, 13227, 0, 10021, 5160, 1387, 0, 917953, - 41418, 0, 65914, 6721, 217, 917955, 917960, 917961, 10443, 10789, 41158, - 119257, 4274, 983300, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 69232, - 0, 41252, 66682, 0, 119637, 41249, 1366, 64635, 65047, 12466, 0, 0, 4397, - 128037, 128336, 41296, 9545, 41291, 128049, 0, 41485, 3511, 41282, 5923, - 10400, 0, 128818, 760, 0, 12088, 5786, 0, 42256, 119869, 119860, 417, - 41474, 119562, 41565, 0, 5934, 119867, 66583, 119231, 64877, 2284, 64481, - 78614, 66013, 41956, 43455, 126995, 0, 0, 0, 42273, 5819, 0, 917556, 0, + 65825, 9577, 68199, 983391, 64670, 983121, 78056, 6793, 11295, 70409, + 78053, 73872, 78055, 119993, 10902, 0, 0, 78070, 11200, 10472, 2995, 0, + 120138, 64682, 2371, 78069, 120808, 259, 1009, 70405, 2402, 2333, 6440, + 194741, 113757, 65125, 41244, 70407, 13271, 9103, 2278, 0, 194728, 0, 0, + 10219, 0, 194740, 0, 67718, 43178, 127070, 41261, 119362, 43640, 8613, 0, + 94049, 6736, 195092, 41492, 12005, 69927, 127068, 1890, 120056, 0, + 128450, 0, 7293, 7991, 74052, 10578, 917998, 78076, 128620, 67368, 69928, + 71850, 78800, 92653, 64445, 42668, 6635, 128308, 6164, 65170, 0, 0, 7676, + 11664, 0, 93025, 69707, 93022, 118812, 0, 71096, 128045, 9175, 11925, + 78045, 9088, 119145, 64545, 1396, 0, 7546, 3847, 71088, 93037, 4985, + 13288, 672, 8098, 43196, 194746, 120723, 128126, 42655, 74043, 65072, + 1577, 11772, 13041, 5928, 4525, 10658, 65911, 1266, 10180, 0, 128371, + 12622, 0, 124948, 0, 128858, 127139, 13310, 773, 19933, 1539, 0, 126983, + 42731, 67972, 0, 71066, 983200, 3051, 5862, 7823, 92478, 92746, 120411, + 3250, 43991, 69687, 66649, 9510, 66237, 983302, 0, 41066, 64673, 917963, + 917964, 128636, 3505, 8707, 917968, 6725, 128013, 917971, 92314, 3471, + 66391, 5479, 882, 6686, 119584, 11613, 120772, 42754, 74608, 983306, + 92696, 0, 0, 0, 128523, 3225, 917996, 4433, 41156, 43973, 43173, 1443, + 4381, 0, 0, 10926, 11756, 11757, 64879, 917949, 195053, 127848, 13227, + 120320, 10021, 5160, 1387, 0, 917953, 41418, 128933, 65914, 6721, 217, + 917955, 917960, 917961, 10443, 10789, 41158, 119257, 4274, 11143, 41483, + 0, 41250, 128904, 42179, 128375, 5931, 11744, 11215, 74446, 41252, 66682, + 0, 119637, 41249, 1366, 64635, 65047, 12466, 983456, 0, 4397, 128037, + 128336, 41296, 9545, 41291, 128049, 0, 41485, 3511, 41282, 5923, 10400, + 0, 128818, 760, 0, 12088, 5786, 68252, 42256, 119869, 67145, 417, 41474, + 119562, 41565, 0, 5934, 74572, 66583, 119231, 64877, 2284, 64481, 78614, + 66013, 41956, 43455, 67240, 194656, 0, 0, 42273, 5819, 0, 917556, 0, 126643, 0, 65910, 127747, 10246, 120816, 65785, 1237, 10274, 4552, - 119576, 0, 0, 1375, 66705, 43573, 65260, 42063, 0, 42811, 10312, 69845, - 120794, 7840, 0, 43630, 10252, 0, 128104, 43185, 0, 4396, 0, 119880, - 10769, 9676, 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, 0, 6072, 43025, - 10299, 0, 0, 120608, 66326, 983447, 127794, 0, 43811, 9330, 120596, 7222, - 10283, 10315, 10379, 4996, 983782, 13281, 66517, 7865, 10087, 78343, 0, - 78347, 0, 0, 7565, 66363, 12952, 64806, 43180, 77928, 7414, 77929, 43982, - 74288, 622, 74023, 885, 43405, 1602, 0, 0, 852, 0, 12160, 0, 10212, - 65435, 0, 12071, 9609, 12156, 917983, 917984, 43586, 11035, 10411, - 917988, 10255, 6710, 10279, 4194, 10375, 73900, 0, 4315, 12644, 127516, - 77937, 43639, 43343, 78777, 917998, 11501, 41177, 128689, 0, 917792, 0, - 92413, 8715, 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, 127103, - 73966, 0, 0, 5921, 0, 2597, 0, 5922, 118903, 77943, 4186, 92531, 119967, + 119576, 983863, 0, 1375, 66705, 43573, 65260, 3329, 0, 42811, 10312, + 69845, 120794, 7840, 0, 43630, 10252, 119242, 128104, 43185, 0, 4396, + 195051, 119880, 10769, 9676, 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, + 120472, 6072, 43025, 10299, 128436, 0, 120608, 66326, 67412, 92952, 0, + 43811, 9330, 120596, 7222, 10283, 10315, 10379, 4996, 127902, 13281, + 66517, 7865, 10087, 78343, 0, 43324, 0, 0, 7565, 66363, 12952, 64806, + 43180, 77928, 7414, 77929, 43982, 74288, 622, 74023, 885, 43405, 1602, 0, + 983731, 852, 0, 12160, 120212, 10212, 65435, 129092, 12071, 9609, 12156, + 917983, 917984, 43586, 11035, 10411, 917988, 10255, 6710, 10279, 4194, + 10375, 43853, 128599, 4315, 12644, 127516, 77937, 43639, 43343, 67408, + 128945, 11501, 41177, 128689, 128866, 43431, 127097, 92413, 8715, 0, + 41179, 983356, 43313, 120230, 41176, 0, 994, 0, 8452, 120505, 73966, + 66890, 70812, 5921, 0, 2597, 0, 5922, 118903, 66873, 4186, 92531, 119967, 127105, 6718, 0, 4406, 74601, 8480, 9192, 9747, 126530, 4413, 92196, 42268, 3198, 5924, 5920, 92469, 6921, 78081, 74007, 42869, 8418, 11681, 43169, 10176, 0, 742, 0, 2893, 10772, 65276, 5937, 1914, 2553, 11682, - 6756, 128590, 128646, 8363, 0, 2993, 7772, 3916, 4301, 120494, 1141, - 42407, 8159, 718, 7572, 973, 0, 120718, 3235, 2415, 43164, 0, 8018, - 42333, 74756, 10675, 6937, 42486, 43381, 65390, 10067, 0, 1202, 0, 0, - 65863, 0, 0, 94013, 78182, 64542, 3260, 73829, 65388, 9945, 8419, 78042, - 6738, 0, 43681, 69728, 2059, 0, 0, 55237, 1431, 0, 66565, 10821, 0, - 12804, 128076, 8229, 1235, 3307, 11472, 78089, 78184, 4544, 0, 0, 0, - 1740, 78097, 8758, 985, 12872, 64511, 78094, 12068, 78102, 0, 10141, 0, - 63761, 8785, 4476, 78109, 63763, 12655, 8907, 78105, 78106, 78103, 78104, - 0, 119572, 10665, 64616, 41572, 0, 127160, 0, 41573, 0, 3931, 120295, - 74143, 0, 0, 0, 78460, 11982, 0, 0, 0, 128016, 64484, 0, 41167, 0, 41735, - 94019, 717, 10754, 0, 0, 127979, 0, 63767, 0, 1780, 6936, 0, 92254, 819, - 10611, 9694, 126978, 0, 0, 0, 0, 8343, 8342, 8345, 8344, 6578, 7009, - 7523, 6922, 8348, 8347, 7525, 3346, 8339, 128165, 128338, 575, 268, - 78111, 8563, 5754, 120343, 41541, 65565, 8336, 5936, 7290, 78117, 8337, - 8341, 308, 11388, 7522, 120721, 78123, 65466, 11090, 6953, 0, 120346, 0, - 78132, 5926, 78128, 78130, 78126, 78127, 78124, 78125, 9038, 7887, 43456, - 7830, 11651, 13093, 64002, 0, 65742, 12874, 119597, 11590, 0, 74048, - 128350, 8595, 0, 917947, 43703, 13097, 0, 64643, 13283, 12697, 0, 12381, - 3488, 5933, 10033, 73738, 66241, 65570, 0, 12297, 119153, 1955, 0, 5349, - 42538, 0, 0, 7411, 9462, 917554, 0, 0, 0, 42736, 0, 5756, 983221, 7638, - 41642, 42764, 0, 43109, 7637, 5752, 74037, 0, 73832, 128827, 120635, - 128231, 78334, 0, 7636, 65171, 9124, 0, 78892, 120798, 291, 0, 0, 2027, - 66230, 10080, 78136, 10403, 0, 4640, 64713, 10224, 120429, 42512, 120431, - 120430, 0, 128351, 127489, 127148, 0, 92499, 0, 119094, 74213, 7824, 0, - 0, 41274, 5778, 6302, 0, 0, 12680, 119130, 1417, 77889, 194914, 9452, 0, - 74393, 11552, 0, 127855, 128217, 65391, 0, 10172, 65453, 63789, 41264, - 78658, 6426, 4641, 9179, 64819, 55278, 41255, 42036, 41469, 41269, - 120412, 41267, 4646, 120425, 865, 42034, 78274, 78273, 4645, 42033, - 78270, 127982, 983172, 64728, 0, 78673, 78674, 1659, 919, 42784, 1671, - 195089, 6069, 9219, 128558, 1661, 13120, 63784, 69819, 10140, 9713, + 6756, 125104, 128646, 8363, 0, 2993, 7772, 3916, 4301, 120494, 1141, + 42407, 7417, 718, 7572, 973, 119599, 120718, 3235, 2415, 43164, 0, 8018, + 42333, 74756, 10675, 6937, 42486, 43381, 65390, 10067, 0, 1202, 0, + 983910, 65863, 0, 68484, 94013, 78182, 64542, 3260, 73829, 65388, 9945, + 8419, 78042, 6738, 0, 43681, 69728, 2059, 92422, 0, 55237, 1431, 983226, + 66565, 10821, 0, 12804, 128076, 8229, 1235, 3307, 11472, 78089, 78184, + 4544, 71228, 0, 917975, 1740, 78097, 8758, 985, 12872, 64511, 78094, + 12068, 78102, 71226, 10141, 0, 63761, 8785, 4476, 78109, 63763, 12655, + 8907, 9147, 78106, 78103, 78104, 0, 119572, 10665, 64616, 41572, 127979, + 127160, 0, 41573, 0, 3931, 120295, 74143, 0, 0, 983743, 78460, 11982, 0, + 0, 128381, 92712, 64484, 0, 41167, 0, 41735, 94019, 717, 10754, 0, 0, + 72413, 92935, 63767, 0, 1780, 6936, 0, 92254, 819, 10611, 9694, 126978, + 0, 0, 0, 129069, 8343, 8342, 8345, 8344, 6578, 7009, 7523, 6922, 8348, + 8347, 7525, 3346, 8339, 128165, 128208, 575, 268, 78111, 8563, 5754, + 120343, 41541, 65565, 8336, 5936, 7290, 78117, 8337, 8341, 308, 11388, + 7522, 120721, 78123, 65466, 11090, 6953, 0, 120346, 128939, 78132, 5926, + 68250, 78130, 78126, 78127, 78124, 78125, 9038, 7887, 43456, 7830, 11651, + 13093, 64002, 983559, 65742, 12874, 119597, 11590, 0, 74048, 67379, 8595, + 9835, 917947, 43703, 13097, 0, 64643, 13283, 12697, 0, 12381, 3488, 5933, + 10033, 71101, 66241, 65570, 0, 12297, 71212, 1955, 127970, 5349, 42538, + 0, 0, 7411, 9462, 917554, 0, 128465, 0, 42736, 0, 5756, 128324, 7638, + 41642, 42764, 0, 43109, 7637, 5752, 11213, 0, 73832, 128827, 120635, + 128231, 78334, 0, 7636, 65171, 9124, 0, 78892, 120798, 291, 0, 983221, + 2027, 66230, 10080, 78136, 10403, 70869, 4640, 64713, 10224, 120429, + 11183, 120431, 120430, 0, 128351, 127489, 127138, 0, 92499, 0, 119094, + 74213, 7824, 0, 0, 41274, 5778, 6302, 0, 0, 12680, 119130, 1417, 67242, + 93041, 9452, 0, 74393, 11552, 0, 127855, 128217, 65391, 128614, 10172, + 65453, 63789, 41264, 78658, 6426, 4641, 9179, 64819, 55278, 41255, 42036, + 41469, 41269, 120412, 41267, 4646, 67759, 865, 42034, 78274, 78273, 4645, + 42033, 78270, 127982, 983172, 64728, 0, 78673, 78674, 1659, 919, 42784, + 1671, 195089, 6069, 9219, 128558, 1661, 13120, 63784, 69819, 10140, 9713, 119143, 0, 0, 94050, 2306, 10485, 118943, 6068, 10612, 195099, 119567, - 195101, 92561, 41462, 120470, 195079, 5422, 128234, 983629, 0, 0, 10229, - 10635, 826, 128081, 195082, 195085, 195084, 195087, 6483, 92211, 1808, - 7848, 0, 8100, 78227, 78669, 78670, 13301, 78667, 9667, 78665, 78872, 0, - 11003, 9904, 0, 0, 120690, 9144, 10921, 0, 78680, 9840, 65131, 78678, - 77841, 10313, 0, 0, 64320, 10265, 78686, 10962, 78684, 43008, 8945, - 78683, 0, 41, 195072, 1792, 120515, 195073, 8655, 195075, 92544, 77951, - 12066, 0, 385, 4152, 2585, 127804, 119068, 3126, 0, 74136, 10957, 983703, - 43258, 119116, 127873, 13157, 0, 917544, 3570, 0, 7443, 0, 44006, 6997, - 68004, 126631, 7879, 8739, 11075, 0, 65216, 0, 69795, 2593, 8463, 7810, - 917862, 7839, 119913, 78806, 119912, 9691, 4411, 78802, 0, 0, 43442, - 69851, 65254, 10066, 983889, 0, 0, 0, 13061, 8016, 78687, 19932, 64831, - 0, 119923, 12390, 119171, 1634, 68115, 0, 11056, 983574, 119925, 0, - 41165, 11328, 12450, 0, 41166, 0, 12456, 119914, 171, 5941, 12452, - 194709, 12458, 12531, 78779, 43013, 63800, 74162, 127569, 120483, 9969, - 120767, 12454, 63806, 42132, 12063, 78425, 78424, 3230, 0, 0, 0, 5209, - 297, 5810, 8522, 8415, 119937, 78429, 78428, 7077, 2497, 128651, 960, - 74156, 6981, 92374, 12938, 4292, 0, 74815, 10512, 0, 74814, 78875, - 127505, 78876, 2503, 73778, 1762, 69794, 2495, 78873, 5844, 68031, - 118838, 0, 12654, 4663, 1899, 78877, 2507, 64121, 8726, 65594, 0, 0, 0, - 8892, 0, 92339, 0, 983073, 5782, 420, 0, 0, 43796, 10797, 63794, 0, 0, - 64814, 63796, 77965, 0, 66581, 119204, 41608, 0, 0, 63792, 4659, 120788, - 0, 43676, 0, 69673, 0, 0, 0, 329, 77968, 92707, 917548, 7399, 0, 41188, - 13244, 120466, 42167, 7435, 78193, 5380, 119086, 69225, 1155, 11365, - 43126, 77972, 0, 65684, 0, 5601, 65192, 42765, 63752, 0, 7987, 128543, - 1172, 69799, 6786, 43601, 120476, 74126, 5603, 0, 4473, 0, 194823, 0, - 65347, 65346, 65345, 0, 127384, 5347, 69802, 983632, 73868, 118944, - 10588, 0, 0, 63755, 0, 5343, 78422, 120661, 4555, 5341, 0, 70071, 128670, - 5351, 78675, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, - 917888, 127510, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653, - 65366, 42172, 41086, 65363, 65362, 65361, 11912, 43410, 11323, 65357, - 11800, 65355, 5345, 65353, 65352, 65351, 761, 65349, 19959, 69718, 63856, - 126635, 2423, 77958, 64647, 77959, 11957, 4699, 0, 0, 0, 0, 64605, 0, 0, - 0, 4916, 0, 380, 10958, 66563, 77955, 69773, 9773, 13167, 12918, 41096, - 73980, 69245, 78254, 917893, 10684, 0, 917896, 0, 7946, 12541, 8182, - 67586, 69780, 0, 0, 0, 0, 9005, 1225, 6630, 0, 0, 0, 68011, 8847, 0, - 65876, 5535, 8329, 74590, 983208, 92609, 0, 0, 3127, 2595, 65713, 42013, - 983858, 5607, 41089, 0, 0, 74256, 2665, 11304, 43751, 74200, 4970, 8764, - 120459, 8934, 92726, 41566, 4492, 0, 65011, 41090, 0, 0, 1188, 7254, - 1100, 0, 128301, 41081, 2912, 11749, 69792, 0, 68019, 3572, 10023, 4959, - 13079, 0, 983276, 9729, 0, 0, 0, 43361, 0, 0, 11803, 7996, 9907, 41450, - 13304, 128290, 127260, 41451, 0, 11095, 8273, 127533, 3451, 983309, 972, - 41453, 983442, 0, 73883, 68022, 73945, 983735, 2288, 19955, 9538, 0, - 69807, 0, 0, 0, 0, 11396, 983440, 11019, 0, 0, 0, 68020, 41078, 71365, - 261, 5927, 7791, 0, 7362, 0, 10696, 0, 6073, 9838, 118920, 0, 6075, - 93995, 282, 126510, 6437, 74078, 128000, 9801, 0, 74177, 0, 0, 3474, - 118787, 0, 120655, 6081, 0, 78874, 74076, 78879, 0, 0, 0, 0, 0, 8751, - 11499, 120273, 7816, 12636, 4665, 12628, 4670, 92608, 120272, 68017, - 9642, 10912, 958, 0, 11387, 78878, 4666, 0, 4915, 0, 4669, 0, 68099, - 13287, 4664, 10836, 120550, 0, 69775, 0, 43595, 7450, 0, 917875, 8664, - 9697, 3606, 917873, 0, 0, 64815, 1063, 120250, 120251, 9772, 7255, 8886, - 1389, 127932, 120257, 120258, 120259, 12941, 42661, 92381, 120255, - 120256, 12301, 120266, 69820, 41102, 64428, 120262, 120263, 120264, 1017, - 66600, 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 120613, 128704, 0, - 73855, 11307, 66707, 917871, 127751, 11745, 7919, 0, 1641, 0, 0, 8966, 0, - 0, 5908, 0, 0, 6744, 128355, 1699, 69861, 74843, 917933, 0, 6306, 10169, - 71324, 119251, 10068, 3766, 2389, 120456, 120455, 6611, 257, 43170, - 13153, 0, 42386, 0, 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, - 10541, 5622, 120436, 8477, 3760, 1718, 9442, 66433, 3776, 0, 41435, 4352, - 983610, 2435, 120809, 5621, 120385, 4201, 3778, 4203, 4202, 4205, 4204, - 120447, 3768, 68142, 765, 41440, 3764, 8473, 6373, 8469, 120438, 12947, - 4564, 0, 0, 74271, 73753, 8374, 983156, 0, 6829, 5225, 128807, 127385, 0, - 0, 119615, 0, 74793, 5626, 73807, 11771, 74075, 127236, 128019, 42614, - 5353, 5625, 74179, 0, 0, 1010, 64572, 41780, 42623, 64277, 69942, 6952, - 983272, 120752, 78762, 2590, 5629, 65552, 7551, 10325, 5632, 10471, - 120038, 120027, 120028, 120025, 5628, 120031, 970, 120029, 4772, 2400, - 5627, 120017, 120018, 120023, 64275, 120021, 8786, 0, 203, 0, 0, 0, 0, - 78350, 0, 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, - 126464, 73891, 0, 0, 5694, 7689, 69798, 9323, 4325, 3047, 10317, 175, 0, - 0, 69764, 0, 0, 1243, 42154, 5431, 6652, 0, 69770, 43651, 0, 68118, - 128024, 1129, 126574, 0, 65900, 1986, 7846, 78804, 8661, 917772, 65255, - 0, 3845, 4490, 118969, 6649, 74400, 1456, 7530, 11977, 7249, 8366, 0, - 7756, 12342, 128568, 51, 41516, 0, 8570, 9568, 71318, 456, 7026, 8145, - 1168, 9251, 9082, 119964, 64055, 42781, 3866, 12323, 41512, 73805, 68121, - 0, 41494, 92316, 4660, 0, 10405, 0, 78803, 0, 0, 42040, 73918, 119627, - 7944, 41454, 12605, 0, 42205, 41455, 236, 64051, 78867, 8214, 0, 0, 0, - 41457, 983970, 119589, 1969, 2384, 8097, 917864, 7413, 68012, 78029, - 8766, 0, 78079, 5854, 127974, 10583, 0, 119989, 0, 10416, 917869, 3872, - 917868, 0, 8429, 0, 118806, 2838, 128802, 0, 917866, 0, 0, 0, 983967, - 94005, 11096, 120813, 10553, 1662, 8483, 120396, 43605, 5892, 43418, 0, - 73742, 66, 65, 68, 67, 70, 69, 72, 71, 74, 73, 76, 75, 78, 77, 80, 79, - 82, 81, 84, 83, 86, 85, 88, 87, 90, 89, 119862, 10357, 7385, 8170, 1704, - 8556, 0, 9659, 0, 0, 0, 9556, 0, 4503, 11353, 9647, 0, 78185, 0, 0, - 92713, 78886, 0, 0, 74229, 66593, 6438, 917979, 9109, 78882, 1289, 64599, - 0, 68009, 0, 65507, 2447, 0, 0, 128042, 126545, 983137, 0, 6334, 0, 0, - 19937, 0, 92368, 0, 5675, 254, 0, 0, 69686, 42425, 8918, 64003, 5716, - 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 92645, 74796, 64400, - 64693, 0, 77861, 65429, 9515, 4435, 0, 42522, 0, 68008, 11785, 7412, - 64671, 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7103, 128293, 7102, - 74588, 120748, 3140, 128854, 7960, 43271, 0, 12518, 10909, 127508, 1428, - 12472, 0, 69864, 7699, 12393, 0, 0, 0, 74518, 8223, 0, 4261, 0, 0, 0, 0, - 0, 128302, 0, 128046, 43419, 0, 64554, 10574, 3878, 0, 42352, 1752, - 73785, 0, 42506, 128541, 10199, 0, 0, 68021, 65919, 0, 6695, 720, 324, 0, - 0, 43406, 983736, 1464, 40985, 0, 7974, 0, 43474, 0, 64488, 0, 0, 64041, - 74787, 0, 78865, 92258, 65597, 0, 78863, 0, 1302, 0, 78861, 119134, 0, 0, - 5204, 74774, 43404, 11835, 0, 3995, 68360, 65608, 3714, 92190, 0, 0, - 10999, 11750, 0, 43251, 68660, 43301, 0, 120557, 8130, 8672, 10845, - 11964, 0, 983185, 0, 0, 68455, 42863, 73839, 0, 0, 0, 0, 126629, 0, 468, - 612, 0, 64401, 66448, 68376, 0, 1674, 0, 5823, 983163, 12280, 0, 540, - 74564, 119017, 0, 8432, 0, 11073, 0, 64316, 0, 0, 820, 41741, 0, 120667, - 0, 64684, 126992, 3359, 7800, 69934, 65177, 6226, 353, 12396, 0, 119612, - 64742, 128682, 120282, 0, 983450, 12412, 19941, 0, 120277, 78847, 1884, - 9481, 42418, 70059, 41157, 0, 1195, 64898, 7924, 0, 41151, 2010, 0, - 41328, 42344, 0, 12409, 0, 4360, 127009, 9739, 128550, 69933, 73921, 0, - 42521, 8539, 983725, 0, 118986, 0, 4788, 0, 68023, 65734, 983455, 43790, - 0, 13075, 74429, 94063, 64569, 43532, 10837, 2492, 127197, 118901, 68637, - 41136, 43785, 11813, 9649, 41154, 119617, 5128, 4038, 41143, 65604, - 64859, 41592, 6771, 1648, 5435, 917837, 6734, 41343, 119848, 65439, - 12709, 6986, 92364, 68015, 0, 41349, 70021, 12581, 10374, 5175, 0, 73806, - 10254, 0, 10278, 10262, 69858, 41346, 0, 607, 0, 119852, 128846, 12923, - 10314, 10282, 65477, 10378, 120297, 40976, 8265, 0, 119834, 40975, 5840, - 42838, 0, 40978, 983897, 119840, 0, 983071, 0, 66444, 10538, 0, 2550, - 119836, 6779, 0, 0, 3525, 6824, 118886, 0, 0, 5619, 65822, 126567, - 194882, 7455, 0, 5616, 11486, 9656, 0, 0, 10727, 5615, 0, 120551, 42380, - 64895, 43693, 66451, 808, 5455, 11347, 0, 1026, 5620, 194887, 0, 11350, - 5617, 0, 9225, 64639, 127073, 9145, 128060, 1338, 120581, 983158, 12739, - 4603, 3084, 983155, 92484, 9858, 6037, 0, 3974, 78213, 10290, 983704, - 3083, 10322, 0, 0, 0, 41036, 0, 0, 43321, 65606, 0, 41032, 42388, 0, - 64700, 10011, 1445, 40961, 0, 119105, 0, 40960, 0, 194891, 0, 40963, - 64952, 10402, 0, 0, 92304, 10603, 0, 0, 983113, 0, 6714, 10083, 127069, - 194895, 78367, 127377, 0, 93963, 9073, 42585, 64302, 10704, 65030, 4787, - 0, 74829, 0, 65423, 0, 128118, 9570, 55260, 9525, 2689, 917626, 65426, 0, - 917624, 43740, 0, 40966, 917622, 13286, 3998, 42598, 42596, 503, 74237, - 8735, 2690, 66488, 42836, 127150, 41954, 917617, 1652, 772, 6688, 8310, - 65428, 3487, 43416, 3585, 10194, 43320, 119159, 128183, 194874, 6468, - 41976, 9720, 917606, 11767, 41970, 194596, 5836, 12358, 0, 4355, 9048, + 67705, 92561, 41462, 120470, 195079, 5422, 128234, 983629, 128611, + 126516, 10229, 10635, 826, 128081, 195082, 195085, 195084, 195087, 6483, + 92211, 1808, 7848, 113788, 8100, 78227, 71198, 78670, 13301, 78667, 9667, + 78665, 67704, 0, 11003, 9904, 0, 983919, 120690, 9144, 10921, 92992, + 78680, 9840, 65131, 78678, 71092, 10313, 0, 0, 64320, 10265, 67252, + 10962, 66904, 43008, 8945, 78683, 0, 41, 195072, 1792, 120515, 195073, + 8655, 68254, 92544, 77951, 12066, 67258, 385, 4152, 2585, 127804, 119068, + 3126, 0, 73983, 10957, 127037, 11160, 119116, 127873, 13157, 0, 917544, + 3570, 129187, 7443, 118804, 44006, 6997, 68004, 126631, 7879, 8739, + 11075, 0, 65216, 70196, 69795, 2593, 8463, 7810, 128543, 7839, 119913, + 78806, 119912, 9691, 4411, 78802, 129032, 124970, 43442, 69851, 65254, + 10066, 983889, 72419, 0, 0, 13061, 8016, 78687, 19932, 64831, 0, 113684, + 12390, 119171, 1634, 68115, 983962, 11056, 983574, 119925, 983099, 41165, + 11328, 12450, 983811, 41166, 0, 12456, 119914, 171, 5941, 12452, 194709, + 12458, 12531, 78779, 43013, 63800, 74162, 127569, 120483, 9969, 120767, + 12454, 63806, 42132, 12063, 78425, 78424, 3230, 0, 0, 125029, 5209, 297, + 5810, 8522, 8415, 119937, 78429, 78428, 7077, 2497, 128651, 960, 74156, + 6981, 92374, 12938, 4292, 78893, 74815, 10512, 0, 74814, 78875, 127505, + 78876, 2503, 73778, 1762, 69794, 2495, 78873, 5844, 68031, 118838, + 194658, 12654, 4663, 1899, 78877, 2507, 64121, 8726, 65594, 0, 0, 0, + 8892, 78872, 92339, 71232, 983073, 5782, 420, 129034, 917871, 43796, + 10797, 63794, 0, 0, 64814, 63796, 43861, 0, 66581, 119204, 41608, 128479, + 0, 63792, 4659, 120788, 77971, 43676, 92956, 69673, 0, 11129, 92929, 329, + 77968, 92707, 917548, 7399, 0, 41188, 13244, 67692, 42167, 7435, 78193, + 5380, 119086, 69225, 1155, 11365, 43126, 77972, 0, 65684, 0, 5601, 65192, + 42765, 63752, 0, 7987, 93055, 1172, 69799, 6786, 43601, 120476, 74126, + 5603, 0, 4473, 0, 72426, 124947, 65347, 65346, 65345, 128548, 119213, + 5347, 69802, 983632, 73868, 70852, 10588, 0, 0, 63755, 0, 5343, 78422, + 120661, 4555, 5341, 0, 70071, 128670, 5351, 78675, 43104, 65244, 917892, + 64541, 42519, 68134, 128916, 126986, 74765, 917888, 127510, 6638, 0, + 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, 42172, 41086, 65363, + 65362, 65361, 11912, 43410, 11323, 65357, 11800, 65355, 5345, 11103, + 65352, 65351, 761, 65349, 19959, 69718, 63856, 126635, 2423, 74518, + 64647, 77959, 11957, 4699, 126573, 0, 0, 0, 64605, 0, 0, 0, 4916, 0, 380, + 10958, 66563, 77955, 69773, 9773, 13167, 12918, 41096, 73980, 69245, + 78254, 917893, 10684, 0, 125063, 92906, 7946, 12541, 8182, 67586, 69780, + 0, 0, 0, 0, 9005, 1225, 6630, 0, 0, 118854, 68011, 8847, 92371, 65876, + 5535, 8329, 74590, 125036, 92609, 0, 66874, 3127, 2595, 65713, 42013, + 129188, 5607, 41089, 128626, 0, 74256, 2665, 11304, 43751, 74200, 4970, + 8764, 120459, 8934, 92726, 41566, 4492, 67271, 65011, 41090, 0, 92909, + 1188, 7254, 1100, 0, 67270, 41081, 2912, 11749, 67282, 67281, 67280, + 3572, 10023, 4959, 13079, 0, 67275, 9729, 125110, 0, 67278, 43361, + 983733, 67276, 11803, 7996, 9907, 41450, 13304, 128290, 127260, 41451, 0, + 11095, 8273, 74322, 3451, 983309, 972, 41453, 68164, 119327, 73883, + 68022, 73945, 983735, 2288, 19955, 9538, 92953, 69807, 0, 129095, 0, + 128897, 11396, 983440, 11019, 0, 128416, 0, 68020, 41078, 71365, 261, + 5927, 7791, 983087, 7362, 0, 10696, 70124, 6073, 9838, 118920, 0, 6075, + 93995, 282, 126510, 6437, 74078, 128000, 9801, 66399, 74177, 0, 0, 3474, + 67287, 0, 67286, 6081, 127217, 78874, 67289, 67283, 0, 70002, 128908, 0, + 93013, 8751, 11499, 67297, 7816, 12636, 4665, 12628, 4670, 67298, 120272, + 68017, 9642, 10912, 958, 67293, 11387, 67291, 4666, 70792, 4915, 67715, + 4669, 0, 68099, 13287, 4664, 10836, 120550, 0, 69775, 0, 43595, 7450, 0, + 917875, 8664, 9697, 3606, 917873, 983978, 0, 64815, 1063, 120250, 67312, + 9772, 7255, 8886, 1389, 127932, 120257, 120258, 120259, 12941, 42661, + 92381, 120255, 120256, 12301, 120266, 69820, 41102, 64428, 120262, + 120263, 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 70340, 0, 8608, + 42789, 120613, 128704, 0, 73855, 11307, 66707, 67301, 67300, 11745, 7919, + 67304, 1641, 0, 0, 8966, 0, 127212, 5908, 71870, 67853, 6744, 67310, + 1699, 67308, 67307, 67314, 67313, 6306, 10169, 71324, 119251, 10068, + 3766, 2389, 67305, 120455, 6611, 257, 43170, 13153, 0, 42386, 0, 9436, + 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, 10541, 5622, 120436, + 8477, 3760, 1718, 9442, 66433, 3776, 917837, 41435, 4352, 67324, 2435, + 71211, 5621, 120385, 4201, 3778, 4203, 4202, 4205, 4204, 120447, 3768, + 41774, 765, 41440, 3764, 8473, 6373, 8469, 120438, 12947, 4564, 0, 74623, + 74271, 73753, 8374, 127201, 0, 6829, 5225, 66901, 127385, 0, 0, 119615, + 67319, 67318, 5626, 43507, 11771, 67322, 67321, 67320, 42614, 5353, 5625, + 74179, 67315, 0, 1010, 64572, 41780, 42623, 64277, 69942, 6952, 67329, + 67328, 67327, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 120038, + 120027, 120028, 120025, 5628, 120031, 970, 120029, 4772, 2400, 5627, + 120017, 67330, 120023, 64275, 120021, 8786, 113693, 203, 74365, 0, 0, + 69985, 78350, 113703, 64378, 42054, 983150, 0, 554, 119649, 11358, 71172, + 12182, 42048, 11065, 126464, 73891, 0, 0, 5694, 7689, 69798, 9323, 4325, + 3047, 10317, 175, 0, 93029, 69764, 0, 0, 1243, 42154, 5431, 6652, 917561, + 67753, 43651, 129129, 68118, 128024, 1129, 126574, 0, 65900, 1986, 7846, + 78804, 8661, 917772, 65255, 0, 3845, 4490, 118969, 6649, 74136, 1456, + 7530, 11977, 7249, 8366, 0, 7756, 12342, 128568, 51, 41516, 0, 8570, + 9568, 71318, 456, 7026, 8145, 1168, 9251, 9082, 119964, 64055, 42781, + 3866, 12323, 41512, 73805, 68121, 0, 41494, 92316, 4660, 67114, 10405, + 127195, 78803, 0, 0, 42040, 73918, 119627, 7944, 41454, 12605, 0, 42205, + 41455, 236, 64051, 78867, 8214, 0, 113784, 120037, 41457, 983970, 119589, + 1969, 2384, 8097, 917864, 7413, 68012, 78029, 8766, 43864, 78079, 5854, + 125000, 10583, 0, 119989, 0, 10416, 917869, 3872, 917868, 0, 8429, 0, + 118806, 2838, 6429, 0, 917866, 0, 128478, 0, 983967, 94005, 11096, + 120813, 10553, 1662, 8483, 120396, 43605, 5892, 43418, 0, 73742, 66, 65, + 68, 67, 70, 69, 72, 71, 74, 73, 76, 75, 78, 77, 80, 79, 82, 81, 84, 83, + 86, 85, 88, 87, 90, 89, 119862, 10357, 7385, 8170, 1704, 8556, 0, 9659, + 0, 0, 0, 9556, 0, 4503, 11353, 9647, 125015, 78185, 128959, 0, 92713, + 78886, 0, 0, 74229, 66593, 6438, 917979, 9109, 78882, 1289, 64599, 0, + 68009, 128302, 65507, 2447, 119911, 0, 128042, 126545, 66589, 0, 6334, 0, + 0, 19937, 917793, 1322, 92359, 5675, 254, 0, 0, 69686, 42425, 8918, + 64003, 5716, 42312, 0, 0, 6972, 42826, 74409, 42464, 120567, 66899, + 67155, 74796, 64400, 64693, 0, 67687, 65429, 9515, 4435, 0, 42522, 0, + 68008, 11785, 7412, 43867, 41978, 1412, 4594, 1391, 10536, 8067, 9901, + 7103, 128293, 7102, 74588, 120748, 3140, 127276, 7960, 43271, 0, 12518, + 10909, 127508, 1428, 12472, 67254, 67253, 7699, 12393, 67257, 0, 67256, + 67255, 8223, 0, 4261, 0, 0, 74308, 0, 113712, 67153, 0, 128046, 43419, 0, + 64554, 10574, 3878, 67691, 42352, 1752, 73785, 0, 42506, 128541, 10199, + 917865, 125142, 68021, 65919, 0, 6695, 720, 324, 0, 129035, 43406, + 983736, 1464, 40985, 0, 7974, 0, 43474, 0, 64488, 128977, 0, 64041, + 74787, 0, 78865, 92258, 65597, 0, 78863, 0, 1302, 66288, 78861, 119134, + 0, 67152, 5204, 74774, 43404, 11835, 0, 3995, 68360, 65608, 3714, 92190, + 120026, 67262, 10999, 11750, 67259, 43251, 67264, 43301, 0, 120557, 8130, + 8672, 10845, 11964, 0, 128014, 0, 0, 68455, 42863, 73839, 0, 0, 67700, 0, + 113701, 43645, 468, 612, 0, 64401, 66448, 68376, 0, 1674, 0, 5823, + 129126, 12280, 70367, 540, 74564, 119017, 66422, 8432, 0, 11073, 0, + 64316, 0, 0, 820, 41741, 0, 120667, 124981, 64684, 126992, 3359, 7800, + 69934, 65177, 6226, 353, 12396, 0, 119612, 64742, 128682, 78879, 0, + 127938, 12412, 19941, 0, 120277, 70352, 1884, 9481, 42418, 70059, 41157, + 0, 1195, 64898, 7924, 0, 41151, 2010, 128883, 41328, 42344, 0, 12409, 0, + 4360, 127009, 9739, 128550, 69933, 73921, 917631, 42521, 8539, 128606, 0, + 118986, 127148, 4788, 0, 68023, 65734, 983455, 43790, 120274, 13075, + 74429, 94063, 64569, 43532, 10837, 2492, 127197, 118901, 68637, 41136, + 43785, 11813, 9649, 41154, 113731, 5128, 4038, 41143, 65604, 64859, + 41592, 6771, 1648, 5435, 67295, 6734, 41343, 119848, 65439, 12709, 6986, + 92364, 68015, 120533, 41349, 70021, 12581, 10374, 5175, 0, 73806, 10254, + 113681, 10278, 10262, 69858, 41346, 0, 607, 0, 119852, 128846, 12923, + 10314, 10282, 65477, 10378, 120297, 40976, 8265, 129149, 78639, 40975, + 5840, 42838, 0, 40978, 983897, 92945, 128020, 119809, 0, 66444, 10538, + 120810, 2550, 119836, 6779, 129130, 0, 3525, 6824, 118886, 983582, 0, + 5619, 65822, 113751, 113738, 7455, 917966, 5616, 11486, 9656, 0, 0, + 10727, 5615, 129071, 120551, 42380, 64895, 43693, 66451, 808, 5455, + 11347, 0, 1026, 5620, 194887, 0, 11350, 5617, 0, 9225, 64639, 127073, + 9145, 128060, 1338, 120581, 983158, 12739, 4603, 3084, 70408, 92484, + 9858, 6037, 0, 3974, 78213, 10290, 983704, 3083, 10322, 129048, 129030, + 0, 41036, 66897, 0, 43321, 65606, 127071, 41032, 42388, 0, 64700, 10011, + 1445, 40961, 0, 119105, 0, 40960, 0, 67727, 125106, 2223, 64952, 10402, + 0, 127179, 92304, 10603, 0, 0, 983113, 0, 6714, 10083, 127069, 194895, + 78367, 69976, 0, 93963, 9073, 42585, 64302, 10704, 65030, 4787, 0, 74829, + 0, 65423, 0, 128118, 9570, 55260, 9525, 2689, 917626, 65426, 194872, + 917624, 43740, 983177, 40966, 917622, 13286, 3998, 42598, 42596, 503, + 74237, 8735, 2690, 66488, 42836, 127150, 41954, 917617, 1652, 772, 6688, + 8310, 65428, 3487, 43416, 3585, 10194, 43320, 119159, 73955, 92315, 6468, + 41976, 9720, 917606, 11179, 41970, 66255, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, 13038, 43699, 0, 41488, 128087, 8527, 194917, 12362, - 12435, 12360, 41053, 3266, 0, 12356, 8616, 41466, 0, 92588, 11450, 0, - 3638, 12354, 0, 3216, 0, 2358, 92606, 8633, 0, 983745, 119182, 69244, 0, - 0, 11759, 194903, 6368, 74823, 0, 41423, 8078, 10504, 127558, 41698, - 42237, 0, 7002, 983678, 41430, 42267, 41051, 41484, 0, 0, 41050, 41473, - 10466, 13099, 0, 0, 0, 6435, 0, 11362, 0, 0, 65382, 0, 41420, 0, 3625, - 78157, 41409, 0, 69639, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, - 41424, 917598, 120546, 0, 128212, 0, 41417, 1261, 0, 0, 12102, 119662, - 41401, 0, 127538, 0, 78251, 0, 42290, 3275, 92472, 42329, 74759, 0, 0, 0, - 92388, 69649, 10989, 74234, 983140, 10598, 7410, 2669, 903, 0, 2920, 0, - 127232, 74603, 64504, 19928, 0, 0, 3917, 0, 11732, 0, 983180, 41448, - 41461, 128823, 0, 127912, 0, 8819, 12663, 0, 41184, 74014, 232, 74835, - 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 68425, 0, 1064, 42467, - 128044, 10115, 19924, 92711, 0, 7862, 64551, 13224, 8516, 41862, 66650, - 7561, 78618, 69793, 1878, 0, 983269, 2911, 0, 41178, 5427, 64823, 0, 0, - 3787, 41174, 0, 41458, 0, 41463, 42413, 11292, 2406, 775, 0, 65584, - 69923, 6074, 9618, 128668, 983952, 43440, 0, 194901, 41436, 3656, 0, - 120600, 41456, 0, 1599, 11333, 0, 6703, 8513, 0, 1613, 0, 68456, 12598, - 983191, 120734, 78745, 74500, 41460, 10145, 10542, 9937, 78746, 70029, - 9905, 0, 65730, 0, 120374, 8427, 120375, 55246, 120376, 0, 11497, 64687, - 74008, 42592, 3871, 0, 128305, 9111, 5741, 0, 194846, 120366, 119111, - 120745, 0, 120368, 0, 11648, 0, 194873, 120364, 41587, 120365, 0, 74322, - 42113, 0, 127155, 12172, 0, 74530, 65298, 65723, 194840, 73871, 65724, - 7928, 120354, 983095, 41595, 73730, 0, 42118, 73830, 66042, 10355, - 983110, 7875, 0, 41598, 3993, 0, 1545, 40971, 536, 128521, 43029, 0, 0, - 65173, 65286, 0, 0, 0, 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 917817, - 0, 78194, 64326, 40969, 10526, 78753, 8323, 40968, 1339, 11731, 78756, 0, - 65460, 12242, 128513, 8020, 10843, 11554, 0, 0, 8266, 41006, 65722, 0, - 10710, 0, 118942, 67667, 64567, 119155, 195091, 0, 119636, 67857, 120687, - 0, 983066, 11755, 66305, 0, 0, 10917, 93979, 0, 11272, 2040, 41247, - 41326, 195060, 1741, 42370, 1227, 0, 0, 11413, 0, 0, 5283, 1586, 4978, 0, - 1984, 11830, 0, 92293, 40984, 128306, 9373, 0, 12916, 6284, 0, 41663, 0, - 0, 0, 9237, 9385, 41648, 0, 194580, 2299, 41666, 1830, 73783, 2056, - 41287, 92610, 0, 0, 42219, 128257, 0, 41987, 41676, 983059, 120823, - 983144, 41670, 0, 92590, 2796, 55291, 11683, 9902, 74521, 67988, 11451, - 983111, 128822, 42631, 2359, 0, 67844, 74164, 41238, 548, 11405, 13133, - 64368, 983239, 128795, 0, 397, 43622, 42139, 9547, 9590, 128238, 1614, - 43661, 64356, 66307, 6651, 1358, 0, 428, 9620, 1466, 78112, 10982, - 118831, 1333, 7104, 407, 6425, 128834, 74253, 0, 0, 0, 5804, 11976, 8554, - 92721, 0, 0, 9057, 42294, 41218, 0, 0, 78137, 1883, 10952, 8048, 78142, - 41225, 92621, 42915, 983676, 128684, 0, 4407, 0, 65809, 119074, 194821, - 8448, 7141, 74183, 0, 12675, 12659, 0, 42363, 120624, 194824, 55273, - 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, 120500, 119158, - 7140, 10977, 127378, 4164, 9081, 0, 120569, 42049, 42042, 8709, 128283, - 126477, 120637, 42419, 64799, 42047, 0, 0, 8470, 11807, 65897, 577, 0, - 983760, 74300, 0, 127308, 74840, 0, 0, 128791, 92224, 8736, 1414, 42643, - 9683, 43486, 74344, 0, 2536, 0, 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 69945, - 66315, 2106, 120222, 11273, 0, 43004, 7541, 0, 0, 961, 64307, 66324, - 64906, 128591, 3106, 65917, 41284, 1696, 0, 891, 12105, 0, 42624, 12802, - 3264, 8824, 13268, 43003, 10936, 0, 0, 0, 194826, 92688, 0, 2322, 120371, - 983584, 11449, 128187, 42868, 41285, 3547, 0, 0, 128793, 983398, 43216, - 6089, 78682, 0, 120578, 4170, 1029, 127761, 127036, 119224, 42374, 0, - 744, 0, 0, 0, 65823, 127826, 0, 3551, 0, 0, 4623, 55268, 0, 4598, 983162, - 65136, 127136, 0, 0, 10851, 0, 6179, 92602, 6180, 0, 11952, 120778, - 78648, 11972, 78646, 78647, 78644, 78645, 177, 78643, 6176, 120580, 0, 0, + 12435, 12360, 41053, 3266, 0, 12356, 8616, 41466, 42924, 92588, 11450, 0, + 3638, 12354, 67299, 3216, 0, 2358, 92606, 8633, 71201, 983745, 119182, + 69244, 128418, 70375, 11759, 194903, 6368, 74823, 67303, 41423, 8078, + 10504, 127558, 41698, 42237, 983452, 7002, 125135, 41430, 42267, 41051, + 41484, 0, 128056, 41050, 41473, 10466, 13099, 983327, 70371, 983777, + 6435, 0, 11362, 128973, 0, 65382, 92770, 41420, 983655, 3625, 78157, + 41409, 0, 69639, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, 41424, + 917598, 120546, 0, 128212, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, 0, + 127538, 0, 78251, 124943, 42290, 3275, 92472, 42329, 74759, 125141, 0, + 128257, 92388, 69649, 10989, 74234, 113781, 10598, 7410, 2669, 903, 0, + 2920, 0, 127232, 74603, 64504, 19928, 0, 128411, 3917, 0, 11732, 0, + 983180, 41448, 41461, 128823, 0, 113721, 113758, 8819, 12663, 0, 41184, + 74014, 232, 74835, 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 68425, + 71886, 1064, 42467, 128044, 10115, 19924, 92711, 0, 7862, 64551, 13224, + 8516, 41862, 66650, 7561, 78618, 69793, 1878, 0, 983269, 2911, 128218, + 41178, 5427, 64823, 0, 0, 3787, 41174, 0, 41458, 67147, 41463, 42413, + 11292, 2406, 775, 0, 65584, 69923, 6074, 9618, 128668, 983727, 43440, + 74539, 194901, 41436, 3656, 917805, 120600, 41456, 67694, 1599, 11333, + 194896, 6703, 8513, 0, 1613, 0, 68456, 12598, 983191, 120734, 78745, + 74500, 41460, 10145, 10542, 9937, 78746, 67144, 9905, 0, 65730, 0, + 120374, 8427, 120375, 55246, 120376, 194940, 11497, 64687, 74008, 42592, + 3871, 983584, 128305, 9111, 5741, 0, 194846, 120366, 119111, 11150, 0, + 120368, 983570, 11648, 0, 194873, 120364, 41587, 70391, 127061, 71108, + 42113, 0, 127155, 12172, 92988, 74530, 65298, 65723, 68289, 73871, 65724, + 7928, 120354, 983095, 41595, 73730, 64671, 42118, 73830, 66042, 10355, + 983110, 7875, 0, 41598, 3993, 194909, 1545, 40971, 536, 128521, 43029, 0, + 0, 65173, 65286, 0, 70331, 917799, 0, 94065, 0, 41375, 5402, 128748, 0, + 1687, 120503, 917817, 0, 78194, 64326, 40969, 10526, 73747, 8323, 40968, + 1339, 11731, 78756, 127108, 65460, 12242, 128513, 8020, 10843, 11554, 0, + 0, 8266, 41006, 65722, 0, 10710, 74045, 118942, 67667, 64567, 119155, + 92900, 0, 71889, 67857, 120687, 0, 92958, 11755, 66305, 68332, 0, 10917, + 93979, 0, 11272, 2040, 41247, 41326, 195060, 1741, 42370, 1227, 0, + 128958, 11413, 127250, 0, 5283, 1586, 4978, 0, 1984, 11830, 43819, 92293, + 40984, 42904, 9373, 0, 12916, 6284, 194888, 41663, 983093, 0, 68313, + 9237, 9385, 41648, 0, 128953, 2299, 41666, 1830, 73783, 2056, 41287, + 92610, 0, 71917, 42219, 70118, 0, 41987, 41676, 983059, 120823, 983144, + 41670, 0, 92590, 2796, 55291, 11683, 9902, 74521, 67988, 11451, 983111, + 78855, 42631, 2359, 71890, 67844, 74164, 41238, 548, 11405, 13133, 64368, + 127270, 128795, 66272, 397, 43622, 42139, 9547, 9590, 128238, 1614, + 43661, 64356, 66307, 6651, 1358, 127962, 428, 9620, 1466, 78112, 10982, + 113785, 1333, 7104, 407, 6425, 128834, 74253, 0, 0, 0, 5804, 11976, 8554, + 92721, 0, 70167, 9057, 42294, 41218, 125097, 0, 78137, 1883, 10952, 8048, + 70443, 41225, 92621, 42915, 128616, 128512, 0, 4407, 74648, 65809, 11837, + 194821, 8448, 7141, 74183, 120334, 12675, 12659, 74634, 42363, 120624, + 194824, 55273, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, + 10296, 119158, 7140, 10977, 127378, 4164, 9081, 0, 120569, 42049, 42042, + 8709, 128283, 126477, 120637, 42419, 64799, 42047, 0, 194820, 8470, + 11807, 65897, 577, 0, 983760, 74300, 0, 127308, 74840, 126474, 0, 128791, + 92224, 8736, 1414, 42643, 9683, 43486, 74344, 0, 2536, 0, 66330, 0, 0, 0, + 0, 0, 0, 194830, 66317, 69945, 66315, 2106, 92762, 11273, 125068, 43004, + 7541, 0, 0, 961, 64307, 66324, 64906, 128591, 3106, 65917, 41284, 1696, + 0, 891, 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, + 194826, 92688, 3566, 2322, 120371, 70831, 11449, 128187, 42868, 41285, + 3547, 0, 0, 113746, 983398, 43216, 6089, 78682, 68490, 120578, 4170, + 1029, 127761, 127036, 119224, 42374, 0, 744, 92883, 113739, 0, 65823, + 127826, 11182, 3551, 92938, 0, 4623, 55268, 128738, 4598, 983162, 65136, + 127136, 0, 128169, 10851, 0, 6179, 92602, 6180, 0, 11952, 120778, 78648, + 11972, 78646, 78647, 78644, 78645, 177, 78643, 6176, 120580, 983696, 0, 6177, 9020, 78652, 78653, 6178, 120249, 120242, 128027, 67673, 2214, - 8754, 0, 120237, 2137, 43081, 0, 0, 9136, 120240, 4401, 41280, 0, 8974, - 2308, 0, 74149, 0, 2318, 983183, 66361, 8198, 0, 64360, 12601, 42536, - 65266, 120827, 74307, 92462, 6970, 5404, 43332, 3667, 7936, 12925, - 126989, 6385, 0, 0, 118949, 10874, 65505, 128083, 0, 42053, 2075, 42057, - 11083, 42052, 0, 0, 67651, 0, 9665, 92300, 983666, 13181, 0, 0, 0, 70088, - 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, 94096, 983946, - 41148, 8683, 7594, 127519, 0, 119090, 10869, 43458, 41146, 92407, 11441, - 0, 3512, 119633, 983709, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, - 69742, 41544, 65146, 0, 0, 0, 0, 19942, 0, 118908, 7988, 10436, 74273, - 3271, 73804, 64711, 0, 94064, 0, 0, 3804, 13070, 11557, 42044, 0, 1095, - 0, 3599, 127774, 0, 128861, 8514, 0, 0, 0, 74346, 66697, 0, 11684, 0, - 92486, 917603, 0, 42043, 43232, 66677, 0, 42046, 78241, 4036, 126481, 0, - 128213, 194861, 0, 11954, 93978, 1450, 12986, 1340, 0, 65441, 92722, 0, - 0, 127772, 0, 917542, 0, 0, 6539, 0, 0, 0, 194856, 0, 120492, 41190, - 3973, 119365, 4575, 41193, 7982, 429, 0, 127194, 0, 194854, 65792, 0, - 118968, 6417, 118918, 78178, 0, 194850, 0, 0, 4919, 10590, 128556, 7755, - 0, 0, 64548, 120506, 1621, 10214, 65126, 0, 127004, 0, 12188, 983668, - 1617, 8050, 0, 5015, 0, 119174, 42590, 194871, 1756, 78181, 0, 65768, - 6352, 41892, 0, 7555, 13103, 5408, 2817, 1214, 69919, 92335, 983125, 0, - 0, 0, 127195, 7957, 8689, 64723, 1056, 42896, 74147, 194813, 0, 55286, - 7073, 65850, 12327, 983948, 119028, 0, 0, 0, 2341, 8450, 8484, 8474, - 983260, 0, 70079, 8461, 128102, 12153, 12799, 0, 43709, 43708, 9451, - 7571, 13073, 0, 0, 681, 983252, 703, 0, 3272, 8781, 12894, 70077, 11709, - 92288, 74446, 0, 92532, 0, 11338, 120768, 3276, 0, 0, 65928, 0, 0, 65021, - 64795, 74574, 0, 10047, 78814, 3262, 78811, 42711, 0, 0, 68478, 163, 576, - 9895, 1655, 78817, 74591, 78815, 78816, 983122, 0, 0, 0, 10039, 0, - 983945, 5623, 5717, 5776, 0, 0, 0, 41591, 11036, 65252, 92382, 0, 0, 0, - 67848, 0, 0, 0, 8887, 127521, 7295, 11031, 0, 43157, 0, 8946, 10348, - 10412, 8755, 0, 0, 5718, 13221, 0, 0, 78135, 0, 983711, 8810, 74499, 686, - 0, 71362, 4619, 118954, 6654, 73769, 74426, 0, 12040, 65689, 10128, - 65118, 0, 119151, 74205, 92651, 0, 2401, 68144, 8792, 983648, 0, 65455, - 0, 92246, 0, 119129, 0, 12886, 127920, 66624, 0, 43557, 10300, 10161, - 10396, 74135, 983453, 118945, 78118, 73851, 3010, 6441, 78122, 1458, - 41475, 128672, 93975, 0, 11479, 0, 120356, 6350, 12864, 69674, 78114, - 1061, 64780, 2001, 43111, 55230, 128686, 4052, 0, 7626, 0, 0, 1045, 0, - 5631, 41113, 0, 0, 43707, 74127, 0, 0, 8486, 0, 73758, 2335, 4362, - 983195, 126561, 69221, 1025, 0, 42625, 917627, 78084, 41443, 0, 128206, - 0, 1774, 1523, 0, 0, 41445, 78236, 0, 8567, 41442, 3988, 0, 78237, - 118910, 0, 65274, 8564, 78199, 78238, 127515, 0, 0, 43446, 0, 66513, - 6256, 0, 579, 55218, 10206, 983075, 6375, 2673, 0, 11814, 0, 4488, 0, - 127336, 68451, 10444, 118846, 127334, 11799, 74407, 68466, 4487, 127849, - 42832, 1032, 120267, 43450, 78257, 7203, 0, 614, 78191, 127325, 120615, - 0, 78262, 128669, 127323, 0, 43121, 0, 0, 92513, 1050, 7549, 0, 0, 9314, - 0, 0, 120616, 0, 10057, 0, 127313, 0, 66504, 983171, 0, 2307, 0, 64333, - 127312, 128547, 73873, 0, 94035, 0, 127973, 128708, 0, 10360, 6746, 0, - 92245, 440, 0, 13085, 9233, 74216, 0, 0, 9957, 128285, 66447, 8046, - 64963, 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, 93965, 10487, - 69878, 12527, 0, 7970, 0, 128660, 0, 65769, 5243, 9849, 5239, 65771, - 983235, 0, 5237, 69714, 0, 10103, 5247, 4769, 0, 118977, 12873, 2283, - 983237, 0, 3008, 4896, 0, 12087, 0, 55231, 41103, 0, 64565, 4773, 0, - 92717, 70074, 4770, 0, 917567, 8731, 65378, 127362, 120619, 9122, 128033, - 126600, 4774, 3019, 9997, 12834, 0, 9456, 10215, 120547, 0, 0, 0, 0, - 74776, 4281, 4768, 0, 41535, 4099, 9017, 0, 0, 78095, 0, 78096, 0, 0, 0, - 78098, 0, 42814, 880, 0, 0, 128021, 2134, 0, 10116, 9877, 92329, 0, 0, - 7095, 0, 74116, 6778, 0, 78090, 8243, 2427, 128141, 7093, 0, 11585, - 195003, 9962, 0, 12223, 0, 0, 1434, 120254, 5637, 11573, 0, 0, 0, 19951, - 0, 78121, 0, 0, 55283, 0, 0, 74437, 1156, 8740, 92415, 3782, 64331, 0, - 41370, 1014, 8261, 0, 0, 10835, 0, 65536, 0, 120463, 0, 7702, 118824, 0, - 43010, 65779, 65783, 1150, 10547, 5700, 0, 120603, 65383, 2339, 42594, - 5697, 118788, 0, 128576, 0, 42257, 5696, 92677, 120465, 3862, 9643, 0, 0, - 7634, 65167, 9845, 0, 0, 5701, 9722, 41490, 983153, 1426, 68217, 0, - 68447, 42204, 55270, 8571, 194991, 78067, 0, 78818, 92719, 43182, 12184, - 0, 42022, 0, 10281, 0, 5650, 43194, 64712, 10744, 0, 990, 5647, 0, 7387, - 78734, 41114, 11477, 5646, 12879, 11018, 983930, 3945, 92589, 0, 0, 0, 0, - 78212, 127746, 1020, 73763, 0, 78731, 5648, 64748, 194910, 78733, 10205, - 3545, 983585, 6984, 0, 74051, 983655, 43242, 120458, 2667, 0, 0, 0, 9911, - 0, 65020, 10097, 119166, 127145, 983662, 118836, 983748, 78427, 1140, - 78426, 0, 10159, 0, 0, 8128, 0, 0, 917965, 1815, 19910, 890, 0, 3267, + 8754, 128652, 120237, 2137, 43081, 194663, 120239, 9136, 66889, 4401, + 41280, 70801, 8974, 2308, 194750, 74149, 128327, 2318, 983183, 66361, + 8198, 0, 64360, 12601, 42536, 65266, 120827, 67279, 92462, 6970, 5404, + 43332, 3667, 7936, 12925, 126989, 6385, 128482, 128403, 118949, 10874, + 65505, 120002, 0, 42053, 2075, 42057, 11083, 42052, 0, 67266, 67651, 0, + 9665, 92300, 983666, 13181, 0, 0, 0, 70088, 74148, 0, 70419, 120225, + 120229, 120224, 74172, 41145, 66404, 94096, 74422, 41148, 8683, 7594, + 113686, 0, 119090, 10869, 43458, 41146, 92407, 11441, 0, 3512, 119633, + 92965, 8103, 0, 0, 65184, 11780, 41563, 42796, 129055, 69742, 41544, + 65146, 71314, 0, 0, 129177, 19942, 0, 118908, 7988, 10436, 74273, 3271, + 73804, 64711, 0, 94064, 983071, 0, 3804, 13070, 11557, 42044, 0, 1095, 0, + 3599, 127774, 0, 128861, 8514, 0, 0, 0, 74346, 66697, 0, 11684, 0, 92486, + 917603, 0, 42043, 43232, 66677, 0, 42046, 74157, 4036, 126481, 0, 128213, + 194861, 0, 11954, 70348, 1450, 12986, 1340, 0, 65441, 92722, 0, 0, + 125117, 0, 917542, 0, 0, 6539, 92948, 126607, 124961, 125060, 0, 120492, + 41190, 3973, 119365, 4575, 41193, 7982, 429, 0, 119129, 0, 194848, 65792, + 128408, 118968, 6417, 118918, 78178, 0, 128970, 0, 0, 4919, 10590, + 128556, 7755, 0, 92942, 64548, 120506, 1621, 10214, 65126, 68253, 127004, + 983616, 12188, 983668, 1617, 8050, 0, 5015, 0, 119174, 42590, 70354, + 1756, 78181, 0, 65768, 6352, 41892, 0, 7555, 13103, 5408, 2817, 1214, + 69919, 92335, 983125, 0, 68224, 125055, 41764, 7957, 8689, 64723, 1056, + 42896, 74147, 3559, 983918, 55286, 7073, 65850, 12327, 70853, 119028, 0, + 0, 128442, 2341, 8450, 8484, 8474, 194884, 68322, 70079, 8461, 67721, + 12153, 12799, 0, 43709, 43708, 9451, 7571, 13073, 43847, 0, 681, 983252, + 703, 0, 3272, 8781, 12894, 70077, 11709, 92288, 70514, 0, 92532, 0, + 11338, 120768, 3276, 0, 0, 65928, 0, 0, 65021, 64795, 74574, 0, 10047, + 78814, 3262, 78811, 42711, 0, 0, 68478, 163, 576, 9895, 1655, 70131, + 74591, 78815, 78816, 66888, 0, 0, 70513, 10039, 0, 983945, 5623, 5717, + 5776, 43488, 0, 66885, 41591, 11036, 65252, 92382, 0, 0, 0, 67848, + 128128, 0, 0, 8887, 127521, 7295, 11031, 0, 43157, 0, 8946, 10348, 10412, + 8755, 0, 0, 5718, 13221, 0, 0, 78135, 70515, 917616, 8810, 74499, 686, 0, + 71362, 4619, 118954, 6654, 73769, 74426, 0, 12040, 65689, 10128, 65118, + 0, 119151, 74205, 92651, 128902, 2401, 68144, 8792, 983648, 0, 65455, 0, + 74328, 0, 74561, 983718, 12886, 127920, 66624, 128350, 43557, 10300, + 10161, 10396, 71210, 78602, 118945, 9984, 73851, 3010, 6441, 70349, 1458, + 41475, 72429, 93975, 127910, 11479, 0, 120356, 6350, 12864, 69674, 78114, + 1061, 64780, 2001, 43111, 55230, 124946, 4052, 113673, 7626, 0, 0, 1045, + 0, 5631, 41113, 127544, 0, 43707, 74127, 0, 0, 8486, 0, 73758, 2335, + 4362, 983195, 126561, 69221, 1025, 127277, 42625, 70325, 78084, 41443, 0, + 128206, 0, 1774, 1523, 0, 0, 41445, 78236, 11207, 8567, 41442, 3988, + 74843, 78237, 118910, 0, 65274, 8564, 78199, 78238, 127515, 0, 0, 43446, + 0, 66513, 6256, 917807, 579, 55218, 10206, 78878, 6375, 2673, 0, 11814, + 0, 4488, 128716, 120554, 68451, 10444, 118846, 127334, 11799, 74407, + 68466, 4487, 127849, 42832, 1032, 120267, 43450, 78257, 7203, 124998, + 614, 70361, 127215, 120615, 119622, 78262, 128669, 127323, 0, 43121, + 127211, 128366, 92513, 1050, 7549, 0, 0, 9314, 70365, 92898, 120616, 0, + 10057, 70434, 127313, 128577, 66504, 983171, 0, 2307, 128456, 64333, + 127312, 128547, 73873, 0, 94035, 0, 127973, 128708, 70446, 10360, 6746, + 120473, 92245, 440, 0, 13085, 9233, 74216, 0, 127785, 9957, 128285, + 66447, 8046, 64963, 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, + 93965, 10487, 69878, 12527, 0, 7970, 125073, 128660, 0, 65769, 5243, + 9849, 5239, 65771, 983235, 0, 5237, 69714, 0, 10103, 5247, 4769, 983139, + 118977, 12873, 2283, 92931, 0, 3008, 4896, 128102, 12087, 0, 55231, + 41103, 92256, 64565, 4773, 0, 78549, 70074, 4770, 66891, 917567, 8731, + 65378, 66911, 120619, 9122, 128033, 126600, 4774, 3019, 9997, 12834, 0, + 9456, 10215, 120547, 0, 78556, 0, 0, 74776, 4281, 4768, 120572, 41535, + 4099, 9017, 69993, 0, 78095, 2225, 78096, 118946, 0, 0, 78098, 0, 42814, + 880, 0, 113764, 66870, 2134, 0, 10116, 9877, 92329, 0, 0, 7095, 8379, + 74116, 6778, 0, 78090, 8243, 2427, 128141, 7093, 0, 11585, 195003, 9962, + 0, 12223, 128485, 92430, 1434, 120254, 5637, 11573, 0, 0, 0, 19951, + 113730, 74419, 0, 0, 55283, 0, 70363, 74437, 1156, 8740, 92415, 3782, + 64331, 0, 41370, 1014, 8261, 128595, 0, 10835, 0, 65536, 0, 120463, + 125051, 7702, 118824, 128976, 43010, 65779, 65783, 1150, 10547, 5700, 0, + 120603, 65383, 2339, 42594, 5697, 118788, 120479, 128576, 0, 42257, 5696, + 92677, 120465, 3862, 9643, 0, 70183, 7634, 65167, 9845, 0, 0, 5701, 9722, + 41490, 128719, 1426, 68217, 983614, 68447, 42204, 55270, 8571, 67403, + 78067, 43859, 78818, 92719, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, + 43194, 64712, 10744, 0, 990, 5647, 0, 7387, 78734, 41114, 11477, 5646, + 12879, 11018, 128362, 3945, 92589, 0, 194989, 194718, 0, 78212, 127746, + 1020, 73763, 983835, 78731, 5648, 64748, 194910, 78733, 10205, 3545, + 983585, 6984, 0, 74051, 128901, 43242, 120458, 2667, 0, 125037, 0, 9911, + 0, 65020, 10097, 119166, 127145, 983662, 118836, 983748, 78208, 1140, + 78426, 0, 10159, 0, 0, 8128, 0, 68326, 917965, 1815, 19910, 890, 0, 3267, 92291, 0, 10123, 0, 4410, 1041, 10576, 6354, 92581, 580, 74232, 0, 128347, 0, 0, 0, 19938, 65906, 127819, 0, 0, 3298, 5375, 10142, 0, 8215, - 0, 6134, 41246, 64402, 0, 69899, 0, 0, 0, 41382, 0, 128653, 5173, 65348, - 527, 0, 0, 92612, 128250, 78797, 11915, 0, 0, 10072, 0, 42695, 2329, - 42250, 0, 128864, 69667, 12245, 1568, 94033, 0, 0, 128120, 0, 74328, - 92708, 74769, 0, 119087, 9069, 6144, 0, 0, 73822, 0, 128010, 64917, - 41521, 118934, 494, 13250, 0, 65098, 6364, 956, 0, 12830, 10462, 73740, - 73734, 0, 0, 0, 66449, 13263, 74281, 69217, 13171, 127796, 0, 0, 92294, - 0, 1044, 41276, 0, 0, 0, 42068, 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, - 11829, 68197, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 983454, 7098, 0, - 0, 1057, 566, 42696, 0, 3016, 42274, 43464, 66490, 12921, 66571, 78472, - 92510, 3006, 4620, 127237, 983578, 0, 0, 64659, 0, 127749, 55253, 6357, - 6362, 8626, 71337, 2216, 9090, 65377, 41596, 0, 42920, 1698, 0, 64477, 0, - 43813, 1053, 0, 78269, 0, 126586, 1052, 1051, 459, 1060, 74349, 66479, 0, - 0, 0, 0, 42490, 689, 6508, 4163, 42298, 8639, 66641, 4246, 0, 0, 12130, - 0, 42337, 64596, 64375, 66481, 127850, 0, 0, 6359, 0, 43471, 983768, 0, - 0, 127274, 0, 6358, 6361, 1926, 6356, 92627, 7898, 8110, 10935, 0, 10069, - 5830, 0, 43685, 0, 0, 0, 0, 8693, 78611, 119565, 983808, 120413, 0, - 127257, 65894, 0, 0, 0, 983923, 0, 0, 119187, 2135, 78868, 0, 0, 78869, - 42313, 5579, 92412, 0, 983082, 94002, 0, 5578, 41774, 128115, 42023, - 6234, 5669, 92275, 0, 0, 0, 127506, 68202, 5583, 0, 0, 42426, 5580, - 42276, 2923, 892, 2220, 42465, 41330, 194987, 5795, 65512, 119006, 65702, - 0, 120801, 65251, 0, 65710, 0, 0, 67672, 0, 5370, 0, 2931, 1638, 10966, - 10188, 65878, 118848, 0, 69694, 69879, 128830, 8172, 42017, 0, 10844, 0, - 128195, 92424, 6374, 0, 0, 286, 78023, 1062, 0, 119999, 0, 7395, 0, 1070, - 64900, 7153, 6095, 41865, 0, 3015, 128023, 126465, 5211, 983083, 6400, 0, - 194983, 70054, 8189, 11276, 0, 0, 372, 128829, 0, 118874, 42102, 41585, - 128202, 0, 42101, 276, 78402, 0, 33, 74226, 127303, 9007, 118796, 41588, - 66033, 427, 10763, 118819, 0, 127884, 0, 1031, 6257, 0, 42104, 0, 983980, - 2328, 92409, 1071, 42899, 0, 74848, 0, 983580, 0, 1047, 0, 0, 64790, 0, - 69723, 10651, 0, 0, 0, 0, 92206, 119181, 5711, 41633, 12098, 65571, 9166, - 0, 5710, 0, 6790, 65168, 13216, 0, 69716, 69726, 0, 64611, 41623, 195001, - 5715, 69654, 0, 0, 5712, 2761, 41620, 68124, 3074, 5722, 0, 8643, 73768, - 0, 118906, 2757, 11067, 9718, 74498, 8910, 10689, 6479, 0, 0, 0, 78607, - 9196, 69670, 0, 0, 0, 0, 118911, 0, 0, 0, 0, 0, 120010, 0, 8701, 68130, - 119616, 120522, 0, 42477, 194994, 12123, 4495, 43569, 0, 0, 0, 64946, - 10992, 0, 120009, 0, 0, 9318, 93986, 13249, 65679, 73808, 0, 65457, - 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 194997, 120005, 0, 983966, - 5084, 0, 0, 118861, 0, 733, 917876, 78014, 78436, 78435, 41677, 0, 9218, - 1731, 0, 983746, 0, 67990, 0, 0, 0, 120001, 127018, 92492, 5155, 120000, - 5358, 983744, 0, 917767, 64424, 983231, 3840, 64314, 41432, 0, 78315, - 68430, 67980, 43253, 65943, 0, 3371, 10988, 0, 8771, 1479, 0, 0, 1109, - 11580, 0, 64601, 12205, 0, 0, 64507, 8868, 399, 67978, 74842, 983284, - 983721, 12149, 13088, 551, 0, 10156, 12119, 92572, 0, 2544, 65074, - 119211, 0, 0, 78011, 351, 119149, 0, 0, 55229, 0, 74268, 0, 0, 0, 42377, - 0, 0, 0, 983924, 0, 9013, 4054, 0, 983570, 983628, 0, 73960, 5585, 65881, - 2549, 74469, 0, 0, 5584, 8358, 0, 64215, 92219, 10919, 0, 7980, 126601, - 983784, 2218, 41800, 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0, - 43452, 78609, 0, 42573, 67856, 0, 78129, 0, 0, 74392, 8135, 6450, 10055, - 77996, 0, 0, 119225, 5657, 0, 9626, 0, 77994, 10179, 5654, 12939, 92573, - 120799, 0, 0, 5652, 10945, 0, 66486, 0, 3661, 7863, 0, 0, 0, 74509, - 983852, 5659, 0, 78692, 66729, 5655, 983626, 42168, 0, 1055, 917628, - 127792, 66310, 74030, 0, 12146, 73955, 73956, 11618, 0, 126990, 0, 10272, - 10304, 10368, 42518, 594, 10244, 10248, 7407, 983887, 64870, 0, 3467, - 983891, 0, 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, 69222, 65927, 0, - 70036, 69696, 69769, 64656, 983726, 0, 94020, 70056, 5666, 65227, 5318, - 63994, 0, 9091, 10798, 0, 128166, 10186, 0, 7732, 983724, 64556, 0, 0, - 5668, 74445, 0, 128663, 5670, 126610, 127297, 11820, 2992, 7826, 5667, - 19952, 120807, 0, 12749, 74551, 0, 0, 66496, 4361, 119260, 1306, 9286, - 1497, 128286, 94004, 0, 0, 3571, 13247, 0, 7973, 66353, 68435, 78278, - 67896, 43192, 0, 78265, 553, 120653, 0, 128554, 5829, 0, 4587, 78285, - 65912, 0, 12746, 0, 0, 119924, 5633, 119927, 94101, 94102, 94099, 64905, - 94105, 9512, 94103, 12742, 6443, 983806, 0, 9135, 0, 41564, 0, 55219, - 128832, 983851, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, - 127270, 0, 118880, 2425, 65182, 128769, 43636, 5221, 78410, 328, 0, - 983809, 69815, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, 43223, 43760, - 5635, 3373, 2986, 78292, 74223, 3437, 78291, 6203, 4247, 0, 11920, 8274, - 0, 0, 1657, 41561, 78299, 78295, 5639, 2954, 5660, 5640, 78303, 983685, - 78300, 42227, 0, 0, 41637, 67872, 0, 78310, 41625, 43362, 78309, 120713, - 11705, 5642, 0, 5486, 0, 4356, 11710, 0, 12051, 69938, 0, 5641, 8259, 0, - 1058, 0, 67630, 0, 0, 1144, 78750, 0, 42228, 0, 73890, 118972, 0, 2800, - 0, 5645, 64964, 8652, 2547, 66484, 43634, 0, 5608, 65890, 43808, 0, - 67621, 119934, 9000, 0, 0, 92673, 1865, 0, 5613, 69950, 0, 0, 5610, 0, 0, - 65826, 2069, 0, 10787, 43999, 2997, 0, 5609, 78316, 65319, 78313, 12316, - 65376, 2412, 0, 8186, 9807, 74269, 92547, 13130, 65874, 0, 5807, 0, - 10030, 5306, 12364, 128064, 0, 11704, 0, 92583, 10211, 0, 0, 0, 0, 11706, - 9710, 0, 0, 0, 413, 65623, 7118, 0, 9133, 74262, 0, 1042, 0, 64779, - 12171, 119240, 6185, 64776, 4984, 0, 708, 11391, 0, 12241, 92720, 983899, - 1308, 0, 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, 2364, 92443, - 74470, 66618, 65680, 120779, 10027, 0, 128154, 12337, 120722, 127368, - 983167, 2980, 755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, - 92276, 44011, 8730, 983067, 127854, 78312, 7274, 119250, 0, 7275, 78304, - 935, 0, 65840, 377, 42325, 11649, 127363, 65253, 64301, 128835, 78308, - 42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 0, 194998, 0, 10673, - 119217, 7248, 0, 128346, 1781, 5496, 3627, 62, 1649, 0, 964, 0, 127876, - 78226, 128775, 127512, 0, 0, 0, 0, 43689, 127911, 13142, 78812, 42415, - 66575, 4542, 69909, 43547, 0, 0, 7677, 2991, 4946, 42454, 11565, 7949, 0, - 983918, 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 92724, 6478, - 9898, 43673, 65237, 6241, 7106, 4877, 983795, 6238, 0, 10548, 127049, - 4409, 0, 0, 64798, 0, 5346, 0, 94047, 6237, 4874, 0, 9176, 0, 126553, - 65231, 65884, 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 0, - 0, 5685, 0, 2461, 11052, 7091, 5342, 8317, 0, 68163, 5340, 0, 127820, - 43635, 73928, 127529, 0, 0, 0, 128510, 65482, 0, 9142, 0, 126470, 0, - 10938, 0, 118790, 1182, 2542, 4826, 0, 0, 128176, 529, 8580, 0, 0, 10586, - 10790, 10839, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, 0, 0, 983938, - 11376, 74379, 10721, 67664, 3438, 42097, 127267, 11084, 3194, 41870, 266, - 78305, 120183, 41873, 120575, 11324, 120531, 0, 8420, 64918, 128844, - 41871, 41338, 3734, 7734, 43683, 8750, 66605, 66011, 92514, 40965, - 127937, 0, 5161, 10572, 0, 0, 0, 64349, 7287, 42162, 127552, 0, 126605, - 11948, 69220, 12359, 43429, 41369, 1697, 12191, 0, 68633, 7286, 0, 68635, - 10031, 0, 9870, 68645, 8620, 65824, 0, 11938, 0, 7285, 0, 119577, 42678, - 0, 43677, 41583, 0, 65799, 92623, 0, 0, 983936, 78169, 66199, 0, 3609, - 68624, 0, 832, 120693, 120770, 78473, 66007, 78471, 65703, 0, 0, 42732, - 5180, 92699, 41395, 41530, 11691, 64773, 92214, 74002, 0, 0, 128645, - 6348, 243, 13200, 983813, 6024, 92309, 9979, 10037, 41529, 10648, 8538, - 43687, 0, 0, 4285, 66195, 0, 4230, 0, 7367, 43256, 92353, 7563, 42376, 0, - 68442, 120512, 0, 0, 214, 0, 0, 78466, 65893, 12208, 9973, 0, 66311, - 65589, 128277, 2603, 0, 0, 0, 70047, 0, 6022, 0, 2884, 0, 11620, 0, 43, - 0, 66453, 1016, 41107, 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 0, - 2074, 0, 78283, 0, 12453, 128128, 983826, 74241, 126568, 6791, 12457, - 78268, 0, 0, 0, 78279, 0, 0, 92358, 66637, 7995, 8759, 43421, 78277, - 12449, 128552, 0, 0, 8752, 3197, 4720, 10165, 0, 119249, 0, 11595, 64893, - 0, 43435, 0, 0, 4993, 0, 6168, 10934, 1946, 741, 0, 5494, 4639, 983147, - 1990, 66589, 4498, 78664, 119183, 0, 0, 69734, 2960, 73779, 0, 8969, - 128117, 43424, 127059, 0, 2950, 119579, 6210, 65753, 370, 0, 0, 0, 4953, - 983682, 0, 0, 0, 69230, 0, 0, 65688, 983246, 5063, 3517, 2964, 43663, - 917762, 6344, 74791, 10566, 10144, 66333, 8252, 729, 66016, 78253, 0, - 71317, 64923, 128040, 43669, 9032, 78263, 78264, 0, 41215, 0, 65883, 0, - 917774, 120602, 3761, 0, 0, 70068, 0, 12912, 119012, 3850, 128191, 0, 0, - 0, 0, 908, 0, 8611, 0, 0, 127555, 43691, 41197, 0, 8978, 120540, 119135, - 41586, 10527, 0, 917848, 3848, 78739, 194937, 127536, 65241, 5336, - 983259, 128786, 663, 0, 10780, 0, 0, 78767, 983257, 127163, 68193, 347, - 0, 0, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 78769, 12143, - 69657, 78512, 0, 43441, 41804, 78523, 0, 78525, 0, 128859, 41584, 10681, - 0, 983695, 73938, 0, 128022, 4800, 66661, 0, 66306, 64715, 78534, 9518, - 6609, 10434, 0, 11319, 1097, 0, 917850, 41730, 983214, 0, 73847, 78761, - 65172, 41728, 41721, 0, 0, 0, 41203, 917612, 13110, 41726, 983855, 0, - 1000, 69651, 0, 41140, 1209, 73978, 0, 73750, 1073, 6321, 77878, 41138, - 0, 68213, 0, 12167, 1115, 41605, 9794, 127062, 67671, 55248, 12237, - 78787, 66314, 6587, 9290, 78782, 78783, 9231, 78781, 2959, 7926, 0, 0, 0, - 64398, 0, 119970, 12311, 983727, 78796, 78798, 78794, 78795, 68434, - 78793, 66670, 0, 0, 12290, 120169, 0, 119873, 42142, 9968, 8205, 0, 5131, - 0, 9627, 78536, 78542, 78535, 983212, 1944, 1248, 10148, 127755, 119990, - 119991, 12701, 78376, 11308, 119995, 0, 119997, 119998, 65305, 65100, - 4031, 42794, 120003, 7075, 8154, 119985, 120007, 41817, 73934, 42275, - 120011, 120012, 78526, 120014, 120015, 6041, 0, 41899, 0, 8002, 0, 4364, - 0, 0, 64332, 0, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 78455, 7279, - 12041, 1418, 10885, 12673, 0, 0, 9660, 983280, 13012, 4571, 0, 0, 120164, - 12078, 2970, 0, 10933, 0, 77870, 0, 127015, 0, 41599, 0, 128831, 0, - 12950, 92160, 3486, 0, 78311, 4239, 0, 127799, 66511, 0, 2637, 64629, - 8460, 127053, 8476, 983975, 0, 0, 0, 65673, 1019, 78495, 4148, 0, 12289, - 0, 4316, 0, 13119, 8488, 5412, 66243, 9935, 0, 73864, 983203, 41734, - 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 7120, 41736, 92546, - 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, 127284, 0, 73963, - 41855, 41867, 65564, 11277, 65892, 11536, 10620, 92272, 7115, 66030, - 73932, 5498, 73942, 41536, 0, 68204, 92587, 3459, 8997, 0, 0, 0, 0, - 92512, 0, 66377, 69781, 0, 983699, 78511, 3161, 295, 120207, 0, 92223, - 127856, 78742, 9016, 43454, 63903, 63902, 43641, 0, 3971, 0, 70063, 2952, - 78765, 11038, 10901, 63900, 63899, 63898, 94043, 667, 12332, 63887, 6086, - 41722, 0, 5172, 0, 983278, 4159, 0, 0, 9815, 63884, 19934, 63882, 41198, - 8555, 63878, 63877, 42460, 6050, 42708, 63881, 63872, 0, 42421, 0, 41723, - 63875, 63874, 11460, 7432, 1913, 41913, 63852, 126636, 0, 42348, 73892, - 6752, 446, 41911, 127906, 63851, 63850, 41910, 0, 63846, 2972, 12932, - 7262, 0, 63849, 63848, 63847, 128070, 6570, 8302, 7259, 63842, 4178, - 10746, 7250, 13214, 10041, 8105, 63892, 0, 118983, 1105, 4180, 0, 12094, - 9497, 0, 63891, 63890, 63889, 63888, 5538, 9987, 0, 118932, 1678, 13274, - 552, 120654, 44010, 10785, 0, 119170, 4557, 74459, 9159, 10171, 13125, - 63860, 5540, 63858, 63865, 281, 13242, 63862, 74154, 0, 5536, 65568, - 63857, 1388, 74169, 0, 1077, 983577, 65099, 11531, 5834, 0, 0, 0, 0, - 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, 119122, 8686, 0, 5334, 65081, - 43249, 74778, 127968, 11077, 0, 6509, 0, 5327, 0, 19907, 63869, 3478, - 7583, 7679, 2903, 0, 3001, 1158, 8745, 43746, 73748, 63866, 78626, 1915, - 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 69238, 64438, 12070, - 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, 63834, 0, 78240, - 12225, 63838, 63837, 983853, 983804, 63833, 6042, 66360, 8083, 0, 0, - 63821, 63820, 63819, 63818, 983904, 5227, 9047, 63822, 127162, 6091, 0, - 10691, 560, 5643, 8226, 119578, 63812, 63811, 63810, 63809, 2289, 63815, - 63814, 63813, 6047, 1597, 120143, 780, 206, 77925, 4936, 65147, 8168, - 63930, 2076, 1093, 9882, 63934, 2082, 63932, 128150, 63929, 3546, 1605, - 77934, 9806, 43472, 77933, 8400, 11343, 2086, 0, 63926, 2984, 5968, 9287, - 0, 4618, 42209, 43431, 13169, 5290, 2089, 1695, 10743, 1088, 63825, 7268, - 1084, 1085, 63829, 1083, 10131, 7283, 0, 63970, 128358, 1092, 4754, 7273, - 5252, 44016, 43627, 127921, 0, 7408, 11809, 917618, 0, 0, 2965, 7258, - 8808, 0, 1089, 4187, 63937, 42119, 42120, 0, 940, 5787, 10099, 63938, 0, - 74494, 12463, 2994, 0, 118827, 0, 9664, 77939, 77940, 67892, 77938, - 74343, 0, 0, 660, 10127, 666, 9022, 5532, 43667, 5533, 77941, 78507, - 6118, 222, 979, 3884, 0, 74151, 92652, 6502, 0, 127118, 128695, 63951, - 12465, 0, 0, 128782, 63946, 1707, 63924, 12461, 63950, 63897, 63948, - 63947, 63945, 6038, 63943, 63942, 64685, 63895, 65838, 2276, 7776, 94076, - 0, 127773, 120444, 69730, 801, 43165, 1690, 63919, 63918, 63917, 13277, - 43659, 12951, 120638, 9906, 2054, 2334, 78515, 63916, 5483, 63914, 69737, - 63911, 5484, 63909, 63908, 2539, 0, 43980, 5485, 0, 42697, 9061, 5534, - 10672, 4502, 0, 253, 0, 68208, 0, 9203, 74231, 0, 11530, 92542, 68668, 0, - 118907, 0, 10474, 43426, 13257, 42354, 128099, 983698, 70044, 195065, 0, - 8413, 983816, 0, 5693, 7272, 0, 13209, 64470, 65831, 74350, 195063, 0, 0, - 0, 126639, 120097, 0, 94078, 128133, 127767, 66608, 3111, 41863, 8804, - 42913, 92187, 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, 55226, - 128353, 63982, 7393, 12807, 43413, 63906, 1598, 63904, 0, 0, 41729, 4423, - 1307, 0, 10515, 41589, 128698, 0, 6218, 0, 1430, 0, 0, 120606, 78754, - 5413, 7619, 3255, 3493, 74032, 11549, 10735, 41743, 73937, 6801, 983633, - 4518, 10990, 65073, 5167, 4481, 3771, 120158, 2710, 0, 69243, 41724, 0, - 43073, 41690, 12479, 983635, 0, 0, 983818, 70046, 1628, 127149, 983487, - 983731, 65262, 6333, 10783, 42315, 0, 63855, 94056, 0, 0, 5339, 74323, 0, - 13004, 0, 4457, 0, 0, 194818, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, + 0, 6134, 41246, 64402, 983147, 69899, 0, 0, 0, 41382, 0, 128653, 5173, + 65348, 527, 0, 113782, 92612, 128250, 78797, 11915, 0, 0, 10072, 0, + 42695, 2329, 42250, 0, 11187, 69667, 12245, 1568, 94033, 0, 0, 113705, 0, + 11201, 92708, 74769, 126470, 67680, 9069, 6144, 0, 0, 73822, 0, 128010, + 64917, 41521, 118934, 494, 13250, 92250, 65098, 6364, 956, 113792, 12830, + 10462, 73740, 73734, 0, 0, 0, 66449, 13263, 74281, 69217, 13171, 127796, + 0, 0, 63885, 128528, 1044, 41276, 128363, 0, 0, 42068, 11795, 124985, 0, + 0, 0, 42450, 3907, 0, 64526, 11829, 68197, 12295, 0, 11475, 70329, 3020, + 11537, 0, 66441, 120761, 7098, 125071, 0, 1057, 566, 42696, 0, 3016, + 42274, 43464, 66490, 12921, 66571, 78472, 71207, 3006, 4620, 127237, + 983328, 0, 0, 64659, 0, 127749, 55253, 6357, 6362, 8626, 71337, 2216, + 9090, 65377, 41596, 0, 42920, 1698, 0, 64477, 0, 43813, 1053, 0, 78269, + 0, 92977, 1052, 1051, 459, 1060, 74349, 66479, 67689, 66871, 0, 70327, + 42490, 689, 6508, 4163, 42298, 8639, 66641, 4246, 0, 43514, 12130, + 983620, 42337, 64596, 64375, 66481, 127850, 0, 0, 6359, 0, 43471, 983768, + 0, 120379, 127274, 0, 6358, 6361, 1926, 6356, 92627, 7898, 8110, 10935, + 0, 10069, 5830, 127773, 43685, 74307, 0, 42910, 0, 8693, 78611, 119565, + 128621, 120413, 92192, 127257, 65894, 983566, 0, 64296, 983923, 0, 0, + 119187, 2135, 11836, 0, 0, 78869, 42313, 5579, 92412, 70384, 129113, + 43854, 71913, 5578, 11840, 128115, 42023, 6234, 5669, 92275, 0, 128439, + 0, 127506, 68202, 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 2220, 42465, + 41330, 194987, 5795, 65512, 119006, 65702, 0, 120801, 65251, 68228, + 65710, 128399, 128429, 67672, 0, 5370, 70465, 2931, 1638, 10966, 10188, + 65878, 118848, 0, 69694, 69879, 74585, 8172, 42017, 92756, 10844, 0, + 128195, 92424, 6374, 119998, 128690, 286, 78023, 1062, 0, 119999, 0, + 7395, 127783, 1070, 64900, 7153, 6095, 41865, 0, 3015, 128023, 126465, + 5211, 983083, 6400, 0, 194983, 70054, 8189, 11276, 0, 0, 372, 128829, 0, + 113783, 42102, 41585, 128202, 0, 42101, 276, 78402, 67427, 33, 67425, + 67424, 9007, 67430, 41588, 66033, 427, 10763, 118819, 70872, 127884, + 983943, 1031, 6257, 0, 42104, 0, 983980, 2328, 66837, 1071, 42899, + 125088, 74848, 0, 113793, 194981, 1047, 0, 194943, 42908, 128480, 69723, + 10651, 70356, 0, 125113, 72433, 66829, 70817, 5711, 41633, 12098, 65571, + 9166, 0, 5710, 128551, 6790, 65168, 13216, 0, 69716, 69726, 0, 64611, + 41623, 195001, 5715, 69654, 71915, 0, 5712, 2761, 41620, 68124, 3074, + 5722, 0, 8643, 68525, 0, 118906, 2757, 11067, 9718, 66419, 8910, 10689, + 6479, 0, 0, 71173, 78607, 9196, 69670, 125070, 0, 128338, 0, 118911, 0, + 113682, 129194, 0, 0, 120010, 73795, 8701, 68130, 119616, 120522, 0, + 42477, 194994, 12123, 4495, 43569, 0, 0, 0, 64946, 10992, 0, 120009, + 70336, 113688, 9318, 93986, 13249, 42902, 73808, 0, 65457, 42249, 7639, + 43995, 67845, 42641, 5454, 0, 0, 70366, 120005, 119585, 983966, 5084, 0, + 0, 118861, 0, 733, 74646, 78014, 78436, 78435, 11204, 0, 9218, 1731, 0, + 92937, 71070, 67990, 0, 0, 0, 70323, 127018, 92492, 5155, 120000, 5358, + 983744, 0, 917767, 64424, 71236, 3840, 64314, 41432, 0, 78315, 68430, + 67980, 43253, 65943, 0, 3371, 10988, 127960, 8771, 1479, 0, 0, 1109, + 11580, 43657, 64601, 12205, 92782, 0, 64507, 8868, 399, 67978, 74842, + 983284, 983721, 12149, 13088, 551, 0, 10156, 12119, 92572, 118916, 2544, + 65074, 119211, 983296, 0, 78011, 351, 78013, 0, 128713, 55229, 0, 74268, + 78008, 128094, 0, 42377, 0, 0, 0, 113767, 74320, 9013, 4054, 0, 194580, + 113740, 0, 73960, 5585, 65881, 2549, 74469, 74457, 11104, 5584, 8358, + 128975, 64215, 66864, 10919, 71208, 7980, 126601, 113698, 2218, 41800, + 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0, 43452, 67245, 92993, + 42573, 66879, 0, 78129, 69767, 78752, 74392, 8135, 6450, 10055, 77996, 0, + 0, 119225, 5657, 0, 9626, 0, 77994, 10179, 5654, 12939, 92573, 120799, + 71860, 0, 5652, 10945, 917927, 66486, 0, 3661, 7863, 0, 0, 0, 70332, + 127194, 5659, 0, 78692, 66729, 5655, 983626, 42168, 194581, 1055, 71171, + 71888, 66310, 74030, 70516, 12146, 70362, 73956, 11618, 0, 42720, 92949, + 10272, 10304, 10368, 42518, 594, 10244, 10248, 7407, 983887, 64870, + 74191, 3467, 71073, 7881, 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, + 69222, 65927, 0, 70036, 69696, 69769, 64656, 983726, 0, 94020, 70056, + 5666, 65227, 5318, 63994, 119596, 9091, 10798, 78664, 78508, 10186, 0, + 7732, 983724, 64556, 0, 983979, 5668, 74445, 0, 74645, 5670, 113795, + 127297, 11820, 2992, 7826, 5667, 19952, 120807, 113766, 12749, 74551, + 67757, 0, 66496, 4361, 119260, 1306, 9286, 1497, 128286, 94004, 70359, 0, + 3571, 13247, 5874, 7973, 66353, 68435, 78278, 67896, 43192, 74621, 78265, + 553, 113768, 127012, 93053, 5829, 0, 4587, 78285, 65912, 194919, 12746, + 0, 70338, 119924, 5633, 119927, 74259, 94102, 94099, 64905, 94105, 9512, + 94103, 12742, 6443, 983806, 0, 9135, 128863, 41564, 0, 55219, 128832, + 983851, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 124936, + 128390, 118880, 2425, 65182, 128769, 43636, 5221, 78410, 328, 0, 983809, + 69815, 5636, 119917, 5329, 0, 5638, 119918, 7940, 64938, 43223, 43760, + 5635, 3373, 2986, 78292, 74223, 3437, 78291, 6203, 4247, 71169, 11920, + 8274, 68240, 983658, 1657, 41561, 78299, 78295, 5639, 2954, 5660, 5640, + 78303, 983685, 71179, 42227, 68301, 0, 41637, 67872, 194813, 78310, + 41625, 43362, 78309, 120713, 11705, 5642, 0, 5486, 0, 4356, 11710, 0, + 12051, 69938, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, 78750, + 127293, 42228, 983714, 73890, 118972, 127352, 2800, 0, 5645, 64964, 8652, + 2547, 66484, 43634, 0, 5608, 65890, 43808, 0, 67621, 64932, 9000, 71204, + 67235, 92673, 1865, 128706, 5613, 66401, 0, 0, 5610, 0, 71199, 65826, + 2069, 0, 10787, 43999, 2997, 0, 5609, 78316, 65319, 78313, 12316, 5875, + 2412, 0, 8186, 9807, 74269, 66294, 13130, 65874, 0, 5807, 113678, 10030, + 5306, 12364, 118863, 92970, 11704, 0, 92583, 10211, 0, 120579, 0, 983202, + 11706, 9710, 125022, 0, 120655, 413, 65623, 7118, 983949, 9133, 74262, 0, + 1042, 0, 64779, 12171, 119240, 6185, 64776, 4984, 0, 708, 11391, 0, + 12241, 92720, 983899, 1308, 194992, 2534, 810, 0, 0, 128016, 71849, + 71869, 1917, 3000, 125140, 120184, 120739, 2364, 66387, 74470, 66618, + 65680, 66411, 10027, 71841, 128154, 12337, 74283, 127368, 983167, 2980, + 755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, 92276, 44011, + 8730, 194997, 127854, 78312, 7274, 119250, 0, 7275, 78304, 935, 0, 65840, + 377, 42325, 11649, 127363, 65253, 64301, 128835, 78308, 42341, 65284, + 2417, 0, 12884, 19912, 7907, 10768, 78300, 194998, 0, 10673, 119217, + 7248, 0, 43515, 1781, 5496, 3627, 62, 1649, 67876, 964, 0, 66403, 78226, + 66393, 92897, 70355, 66409, 0, 127534, 43689, 127911, 13142, 78812, + 42415, 66575, 4542, 69909, 43547, 0, 0, 7677, 2991, 4946, 42454, 11565, + 7949, 0, 69759, 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 70810, + 6478, 9898, 43673, 65237, 6241, 7106, 4877, 129108, 6238, 0, 10548, + 127049, 4409, 0, 0, 64798, 70805, 5346, 128240, 94047, 6237, 4874, 66851, + 9176, 92882, 126553, 65231, 65884, 12678, 78748, 118912, 11378, 44018, + 42785, 2408, 3251, 11203, 983159, 5685, 0, 2461, 11052, 7091, 5342, 8317, + 0, 68163, 5340, 120559, 127820, 43635, 73928, 127529, 71069, 128395, 0, + 128510, 65482, 983580, 9142, 0, 68506, 0, 10938, 0, 118790, 1182, 2542, + 4826, 0, 0, 72438, 529, 8580, 0, 0, 10586, 10790, 10839, 66023, 41593, + 41207, 0, 983825, 41594, 225, 42828, 0, 0, 983938, 11376, 74379, 10721, + 67664, 3438, 42097, 127267, 11084, 3194, 41870, 266, 78305, 120183, + 41873, 120575, 11324, 120531, 0, 8420, 64918, 128839, 41871, 41338, 3734, + 7734, 43683, 8750, 66605, 66011, 92514, 40965, 127937, 0, 5161, 10572, 0, + 42906, 0, 64349, 7287, 42162, 120406, 983643, 126605, 11167, 69220, + 12359, 43429, 41369, 1697, 12191, 0, 68633, 7286, 0, 68635, 10031, + 125058, 9870, 67726, 8620, 65824, 0, 11938, 0, 7285, 983557, 119577, + 42678, 66842, 43677, 41583, 0, 65799, 92623, 0, 129168, 983936, 78169, + 66199, 0, 3609, 68624, 0, 832, 120693, 120770, 78473, 66007, 78471, + 65703, 71256, 128517, 42732, 5180, 92699, 41395, 41530, 11691, 64773, + 92214, 74002, 0, 0, 128645, 6348, 243, 13200, 983813, 6024, 92309, 9979, + 10037, 41529, 10648, 8538, 43687, 0, 0, 4285, 66195, 0, 4230, 92886, + 7367, 43256, 92353, 7563, 42376, 0, 68442, 120512, 0, 0, 214, 128578, 0, + 74856, 65893, 12208, 9973, 128386, 66311, 65589, 128277, 2603, 0, 70155, + 0, 70047, 0, 6022, 0, 2884, 0, 11620, 0, 43, 195020, 12682, 1016, 41107, + 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 70855, 2074, 113742, 78283, + 0, 12453, 70847, 983826, 74241, 126568, 6791, 12457, 78268, 0, 66278, 0, + 78279, 0, 0, 92358, 66637, 7995, 8759, 43421, 78277, 12449, 128552, + 71224, 43868, 8752, 3197, 4720, 10165, 0, 119249, 113715, 11595, 64893, + 118905, 43435, 124964, 125030, 4993, 0, 6168, 10934, 1946, 741, 0, 5494, + 4639, 127559, 1990, 11107, 4498, 74169, 67736, 0, 127272, 69734, 2960, + 73779, 0, 8969, 128117, 43424, 73959, 0, 2950, 119579, 6210, 65753, 370, + 0, 0, 0, 4953, 983682, 983701, 0, 0, 69230, 0, 0, 65688, 983246, 5063, + 3517, 2964, 43663, 917762, 6344, 74791, 10566, 10144, 66333, 8252, 729, + 66016, 78253, 0, 71317, 64923, 120571, 43669, 9032, 78263, 78264, 0, + 41215, 0, 65883, 0, 917774, 120602, 3761, 0, 0, 70068, 120408, 12912, + 119012, 3850, 128191, 0, 128389, 0, 0, 908, 0, 8611, 0, 0, 74642, 43691, + 41197, 0, 8978, 120540, 119135, 41586, 10527, 71079, 917848, 3848, 78739, + 113800, 127536, 65241, 5336, 983259, 128786, 663, 0, 10780, 0, 0, 78767, + 983257, 127163, 68193, 347, 0, 983086, 78775, 64675, 41582, 78774, 78744, + 65579, 12980, 78769, 12143, 69657, 78512, 128493, 11153, 41804, 78523, 0, + 78525, 0, 128859, 41584, 10681, 0, 983695, 73938, 73781, 128022, 4800, + 66661, 0, 66306, 64715, 66384, 9518, 6609, 10434, 70845, 11319, 1097, + 128964, 917850, 41730, 129181, 0, 73847, 78761, 65172, 41728, 41721, + 917911, 194769, 983795, 41203, 917612, 13110, 41726, 983855, 67077, 1000, + 69651, 0, 41140, 1209, 73978, 125059, 73750, 1073, 6321, 77878, 41138, 0, + 68213, 78000, 12167, 1115, 41605, 9794, 127062, 67671, 55248, 12237, + 78787, 66314, 6587, 9290, 78782, 78783, 9231, 78781, 2959, 7926, 0, + 983948, 128833, 64398, 0, 119970, 12311, 119181, 78796, 78798, 78794, + 78795, 68434, 78793, 66670, 113797, 0, 12290, 120169, 0, 119873, 42142, + 9968, 8205, 0, 5131, 113694, 9627, 43646, 78542, 78535, 983212, 1944, + 1248, 10148, 127755, 119990, 119991, 12701, 78376, 11308, 119995, 0, + 113702, 66836, 65305, 65100, 4031, 42794, 120003, 7075, 8154, 119985, + 120007, 41817, 73934, 42275, 120011, 120012, 78526, 120014, 120015, 6041, + 0, 41899, 983286, 8002, 128367, 4364, 73732, 0, 64332, 0, 7813, 9064, + 119986, 10124, 7526, 8601, 7281, 68246, 7279, 12041, 1418, 10885, 12673, + 0, 129123, 9660, 983280, 13012, 4571, 917588, 0, 120164, 12078, 2970, + 129122, 10933, 0, 77870, 0, 77841, 0, 41599, 70159, 128831, 0, 12950, + 92160, 3486, 983973, 78311, 4239, 0, 127799, 66511, 92739, 2637, 64629, + 8460, 66834, 8476, 983975, 0, 68312, 78489, 65673, 1019, 78495, 4148, 0, + 12289, 0, 4316, 0, 13119, 8488, 5412, 66243, 9935, 92777, 73864, 983203, + 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 7120, 41736, + 92546, 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, 127284, + 66853, 73963, 41855, 41867, 65564, 11277, 65892, 11536, 10620, 92272, + 7115, 66030, 73932, 5498, 63876, 41536, 0, 68204, 92587, 3459, 8997, 0, + 92714, 0, 129027, 92512, 0, 66377, 69781, 0, 124972, 78511, 3161, 295, + 71257, 0, 92223, 127856, 78742, 9016, 43454, 63903, 63902, 43501, 0, + 3971, 983959, 70063, 2952, 78765, 11038, 10901, 63900, 63899, 63898, + 94043, 667, 12332, 63887, 6086, 41722, 0, 5172, 0, 983278, 4159, 983562, + 0, 9815, 63884, 19934, 63882, 41198, 8555, 63878, 63877, 42460, 6050, + 42708, 63881, 63872, 0, 42421, 0, 41723, 63875, 63874, 11460, 7432, 1913, + 41913, 63852, 66869, 128971, 42348, 73892, 6752, 446, 41911, 127906, + 63851, 63850, 41910, 128637, 63846, 2972, 12932, 7262, 69968, 63849, + 63848, 63847, 113749, 6570, 8302, 7259, 63842, 4178, 10746, 7250, 13214, + 10041, 8105, 63892, 127780, 69969, 1105, 4180, 127786, 12094, 9497, 0, + 63891, 63890, 63889, 63888, 5538, 9987, 0, 118932, 1678, 13274, 552, + 120654, 44010, 10785, 0, 11192, 4557, 74459, 9159, 10171, 13125, 63860, + 5540, 63858, 63865, 281, 13242, 63862, 74154, 0, 5536, 65568, 63857, + 1388, 71902, 0, 1077, 195000, 65099, 11531, 5834, 0, 0, 0, 0, 42773, + 127899, 0, 0, 119220, 0, 3663, 127027, 1112, 70335, 8686, 126611, 5334, + 65081, 43249, 74778, 127968, 11077, 125017, 6509, 0, 5327, 127965, 19907, + 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 43746, 73748, 63866, + 78626, 1915, 4846, 67755, 66371, 118984, 42105, 2990, 120128, 805, 69238, + 64438, 12070, 8760, 1117, 113750, 12212, 120123, 65174, 42357, 63835, + 63834, 0, 78240, 12225, 63838, 63837, 983853, 70173, 63833, 6042, 66360, + 8083, 128166, 0, 63821, 63820, 63819, 63818, 983904, 5227, 9047, 63822, + 127162, 6091, 0, 10691, 560, 5643, 8226, 119578, 63812, 63811, 63810, + 63809, 2289, 63815, 63814, 63813, 6047, 1597, 120143, 780, 206, 70126, + 4936, 65147, 8168, 63930, 2076, 1093, 9882, 63934, 2082, 63932, 128150, + 63929, 3546, 1605, 77934, 9806, 43472, 77933, 8400, 11343, 2086, 0, + 63926, 2984, 5968, 9287, 0, 4618, 42209, 11137, 13169, 5290, 2089, 1695, + 10743, 1088, 63825, 7268, 1084, 1085, 63829, 1083, 10131, 7283, 0, 63970, + 128358, 1092, 4754, 7273, 5252, 44016, 43627, 127921, 128920, 7408, + 11809, 917618, 127917, 0, 2965, 7258, 8808, 66572, 1089, 4187, 63937, + 42119, 42120, 11106, 940, 5787, 10099, 63938, 0, 74494, 12463, 2994, 0, + 118827, 68522, 9664, 70834, 77940, 67892, 77938, 74343, 67370, 0, 660, + 10127, 666, 9022, 5532, 43667, 5533, 12580, 78507, 6118, 222, 979, 3884, + 983392, 74151, 92652, 6502, 0, 11085, 128695, 63951, 12465, 917862, 0, + 128782, 63946, 1707, 63924, 12461, 63950, 63897, 63948, 63947, 63945, + 6038, 63943, 63942, 64685, 63895, 65838, 2276, 7776, 94076, 0, 92464, + 120444, 69730, 801, 43165, 1690, 63919, 63918, 63917, 13277, 43659, + 12951, 120638, 9906, 2054, 2334, 78515, 63916, 5483, 63914, 69737, 63911, + 5484, 63909, 63908, 2539, 120102, 43980, 5485, 0, 42697, 9061, 5534, + 10672, 4502, 124932, 253, 0, 68208, 120439, 9203, 74231, 0, 11530, 68634, + 68668, 0, 11127, 0, 10474, 43426, 13257, 42354, 128099, 983698, 70044, + 195065, 0, 8413, 66841, 0, 5693, 7272, 0, 13209, 64470, 65831, 74350, + 195063, 0, 0, 0, 126639, 120097, 0, 94078, 66840, 127767, 66608, 3111, + 41863, 8804, 42913, 78347, 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, + 55226, 128353, 63982, 7393, 12807, 43413, 63906, 1598, 63904, 71187, + 70393, 41729, 4423, 1307, 113692, 10515, 41589, 128698, 128918, 6218, + 113675, 1430, 0, 127778, 120606, 78754, 5413, 7619, 3255, 3493, 74032, + 11549, 10735, 41743, 73937, 6801, 983633, 4518, 10990, 65073, 5167, 4481, + 3771, 67093, 2710, 0, 66277, 41724, 67716, 43073, 41690, 12479, 983635, + 8380, 0, 71852, 70046, 1628, 127149, 128817, 129067, 65262, 6333, 10783, + 11172, 0, 63855, 70840, 113679, 0, 5339, 74323, 0, 13004, 66843, 4457, 0, + 127756, 194818, 127116, 5684, 8678, 10914, 43632, 5689, 65807, 70814, 68464, 12633, 12870, 69705, 65183, 5688, 11926, 6033, 6310, 5686, 0, - 74251, 0, 120647, 0, 50, 10558, 9871, 42612, 43655, 0, 0, 0, 66468, 0, - 13259, 4448, 0, 983845, 0, 70043, 67853, 0, 10640, 11539, 1151, 0, - 917607, 127544, 127079, 195050, 127852, 0, 0, 0, 12501, 64604, 0, 11527, - 118870, 8812, 0, 11538, 8673, 12650, 11020, 0, 66467, 2105, 8087, 78163, - 69632, 9894, 0, 0, 0, 4636, 55262, 78513, 4515, 2382, 0, 127055, 0, - 120495, 0, 128284, 12277, 194627, 11995, 92553, 0, 12158, 0, 8741, 10197, - 0, 92426, 0, 6531, 0, 127846, 473, 43415, 0, 983650, 1873, 1087, 0, 0, 0, - 78527, 66439, 43218, 983123, 194716, 7237, 12504, 74282, 0, 983571, 0, - 9489, 0, 0, 4384, 74220, 63845, 2058, 128863, 13295, 43191, 128030, 0, - 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 0, 4421, 10592, - 0, 495, 119007, 41712, 7983, 0, 93997, 0, 6347, 120165, 7654, 41710, - 4196, 0, 437, 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, 64306, 0, 0, - 4999, 194642, 0, 126582, 4711, 120769, 0, 2739, 0, 8044, 74834, 194643, - 41789, 128142, 10809, 0, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, - 13058, 120449, 12875, 0, 92186, 13229, 0, 10575, 43399, 0, 0, 41791, - 1104, 0, 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, 6569, 0, 0, 0, 69849, - 6783, 0, 12993, 8049, 41548, 44021, 6458, 983807, 128882, 4761, 63828, - 4766, 64623, 1273, 43407, 0, 118876, 195045, 6912, 1313, 6322, 10483, - 983603, 41545, 0, 92449, 0, 0, 0, 0, 78624, 3484, 74337, 0, 0, 8503, - 5122, 41527, 0, 66320, 983811, 0, 0, 0, 41537, 69683, 8303, 8282, 11817, - 73857, 10003, 73859, 65904, 7363, 1686, 0, 78406, 11467, 3664, 65921, - 64299, 194664, 0, 0, 4324, 126, 42246, 119152, 0, 74378, 65926, 7744, - 194636, 74277, 74302, 78052, 43817, 6966, 43822, 8136, 0, 65600, 1633, 0, - 0, 4762, 1103, 0, 0, 4765, 983492, 13078, 0, 4760, 63827, 2050, 10871, - 43199, 1102, 0, 42236, 128867, 194667, 11546, 74794, 337, 0, 42591, 8627, - 12279, 1111, 0, 92161, 4707, 68206, 10143, 7883, 127081, 7880, 4522, - 8645, 5704, 13010, 0, 8304, 917561, 0, 119575, 2293, 0, 66654, 0, 92676, - 0, 13008, 0, 4385, 0, 13011, 0, 92569, 119161, 13009, 160, 2677, 0, 0, - 41793, 65763, 74221, 120141, 41792, 42770, 94054, 65762, 118829, 43821, - 5709, 0, 94053, 43816, 0, 0, 1079, 3867, 5708, 0, 0, 43797, 5706, 64768, - 5705, 8791, 4005, 0, 10237, 10991, 128816, 43459, 9173, 917581, 917580, - 13170, 12540, 917577, 42605, 120765, 126617, 68647, 917572, 10058, 0, - 74867, 194654, 127078, 3339, 11448, 1106, 917591, 917590, 917593, 3340, - 917587, 917586, 917589, 917588, 120541, 10605, 1309, 63966, 120743, 1754, - 92226, 13246, 864, 0, 118926, 8972, 0, 7849, 120092, 92533, 13240, - 195068, 5192, 4338, 67982, 10948, 917601, 13199, 92575, 1236, 13208, - 13261, 13189, 13188, 93993, 0, 7440, 0, 120153, 9553, 1590, 63777, 63776, - 13178, 63782, 63781, 63780, 63779, 1583, 0, 13260, 4550, 0, 64205, 0, 0, - 41522, 983915, 92168, 983772, 917858, 11354, 94071, 0, 42795, 0, 119195, - 11394, 194646, 13236, 13272, 13194, 1334, 69926, 4479, 1178, 65586, - 120663, 66681, 119193, 4601, 0, 0, 983765, 0, 0, 194658, 0, 6809, 63786, - 6031, 0, 63791, 63790, 1145, 63788, 7910, 63785, 43153, 754, 10192, - 13105, 8183, 120741, 2037, 0, 0, 10747, 125, 0, 64890, 0, 983131, 0, - 41719, 63758, 3523, 1074, 13258, 9536, 74077, 0, 4427, 74242, 63757, - 43145, 12217, 63754, 41532, 1349, 63750, 63749, 0, 0, 0, 63753, 63802, - 41084, 120622, 68133, 41930, 63805, 63804, 43632, 63801, 41082, 8140, - 63798, 6260, 0, 0, 94074, 63793, 11988, 3898, 128241, 10201, 12238, - 63795, 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, - 983329, 42203, 7950, 10804, 63771, 42787, 4386, 12224, 6973, 2793, 12475, - 0, 0, 63769, 9530, 983119, 12232, 13135, 8596, 5681, 63762, 4595, 63760, - 792, 0, 64803, 0, 8742, 0, 11053, 128796, 63744, 128107, 0, 7588, 63748, - 1693, 63746, 43204, 5055, 68426, 917853, 1090, 120679, 128356, 11665, - 74133, 4558, 65685, 9523, 0, 0, 78681, 11513, 0, 6157, 63775, 63774, - 63773, 13191, 12170, 3500, 3139, 0, 3170, 12485, 0, 10872, 78271, 13006, - 64433, 0, 0, 941, 0, 0, 0, 65541, 11063, 0, 8228, 0, 42065, 0, 0, 94039, - 0, 92455, 7386, 0, 64444, 0, 119863, 43603, 94075, 65397, 288, 0, 0, 0, - 10025, 69915, 2918, 0, 65300, 119871, 9883, 64726, 2790, 65395, 3793, 0, - 127829, 65393, 0, 74138, 0, 0, 0, 74139, 92712, 65394, 11548, 5270, 0, - 65396, 0, 65813, 13256, 1282, 120771, 0, 0, 10888, 983604, 65242, 0, - 3330, 0, 0, 983974, 0, 0, 74259, 3304, 42753, 0, 0, 0, 1627, 0, 0, 0, - 5371, 13116, 0, 1826, 118794, 0, 43094, 70023, 43650, 94037, 0, 9035, 0, - 0, 128005, 0, 92207, 68125, 0, 164, 0, 94067, 94000, 6958, 0, 43116, 0, - 70019, 13245, 0, 0, 127376, 0, 70031, 127756, 12666, 13175, 13207, - 120414, 66014, 120428, 7447, 5929, 0, 65509, 0, 7449, 11306, 0, 73920, - 3180, 0, 63808, 9054, 971, 13062, 0, 0, 65195, 10164, 92252, 74428, 0, - 78146, 92611, 0, 0, 0, 10045, 12882, 13275, 128161, 11057, 0, 13276, 0, - 41525, 78150, 7271, 11444, 0, 0, 0, 12229, 41523, 0, 43411, 73751, 0, - 64813, 0, 0, 10476, 3858, 0, 3932, 64958, 0, 0, 73989, 68192, 0, 69847, - 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, 4796, 12292, 126595, 65479, 0, - 41781, 10486, 41480, 43002, 9899, 0, 0, 404, 12821, 3741, 0, 5788, 8092, - 68212, 41222, 1831, 66020, 3982, 0, 4388, 0, 746, 120784, 0, 0, 12018, - 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, 119357, 0, 74430, 0, 11700, - 4374, 0, 128179, 1364, 0, 8038, 0, 917597, 12868, 69814, 0, 6735, 73979, - 13174, 73968, 13225, 0, 69808, 65835, 0, 2365, 7841, 0, 42855, 118856, - 42866, 0, 0, 0, 66438, 41785, 12617, 64172, 13173, 4372, 119354, 0, - 983568, 0, 0, 92402, 128062, 12965, 384, 64512, 10404, 10340, 119352, - 1556, 5274, 13210, 120125, 10017, 9733, 41787, 983243, 126994, 41373, - 78039, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, 0, 120703, - 119883, 12861, 4398, 8543, 65618, 128018, 1096, 0, 0, 42688, 12441, - 12355, 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 126646, - 119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 119874, - 94107, 13195, 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, - 128123, 41533, 66337, 0, 92184, 0, 4965, 43445, 917536, 73849, 0, 43638, - 78537, 128287, 6261, 119342, 43147, 66570, 1957, 10420, 982, 2756, 13292, - 13206, 128828, 0, 2925, 73809, 13056, 127559, 13212, 43238, 0, 13190, - 13187, 92541, 13198, 118793, 0, 5242, 119179, 64476, 1694, 8216, 71369, - 6770, 43331, 0, 65620, 983728, 43544, 126466, 0, 41444, 65621, 69955, - 9197, 5246, 119106, 13185, 9709, 120323, 120322, 12314, 65616, 5238, - 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 128537, 3936, 119331, - 11699, 41347, 127249, 13235, 8842, 41248, 0, 4379, 13239, 12692, 7969, - 127266, 7219, 127250, 128251, 120509, 0, 66224, 734, 2979, 120303, 65619, - 9872, 957, 64921, 1846, 66631, 41477, 119256, 120310, 74511, 41770, 1670, - 6442, 120317, 42446, 5379, 120318, 41163, 74832, 120315, 120314, 11506, - 0, 42841, 13267, 0, 0, 41775, 0, 7130, 41773, 0, 10663, 0, 0, 0, 6151, - 12110, 42673, 65572, 65293, 65250, 13265, 13264, 64518, 0, 6100, 0, - 92647, 5808, 65922, 0, 12967, 66041, 5612, 4583, 0, 0, 68097, 64575, - 126637, 11965, 0, 68358, 0, 69789, 0, 92260, 68102, 9698, 7814, 74476, - 119651, 128514, 0, 41921, 118858, 9756, 6985, 119258, 78490, 74219, 0, 0, - 118997, 8012, 5674, 12353, 0, 12361, 5677, 5588, 0, 41925, 128124, 41920, - 5673, 120534, 5676, 41923, 12694, 118978, 5672, 1294, 0, 78059, 0, 42511, - 1727, 120725, 42436, 0, 0, 0, 74222, 8718, 3550, 736, 10268, 4505, 10316, - 74090, 5826, 55232, 5813, 0, 120712, 5841, 5837, 55234, 0, 3105, 12829, - 5838, 5796, 0, 119592, 5793, 0, 5866, 5797, 41011, 5865, 120091, 7956, - 598, 0, 64649, 5806, 42398, 0, 9037, 5671, 120041, 983255, 0, 0, 128855, - 0, 847, 128242, 9529, 0, 66657, 6980, 78483, 120035, 78484, 983491, 0, - 120033, 78486, 0, 0, 120039, 42683, 0, 983055, 7114, 0, 0, 43190, 65463, - 1554, 0, 42611, 42563, 0, 5651, 2929, 6792, 43201, 0, 19963, 5698, 0, 0, - 0, 0, 5644, 10292, 65546, 69727, 68141, 8372, 0, 65116, 0, 120022, 10175, - 10388, 42799, 94100, 41013, 10568, 0, 983618, 2869, 0, 41015, 194692, - 2785, 4366, 0, 10954, 41802, 0, 42608, 78469, 9884, 4759, 0, 0, 10266, - 41359, 1170, 43365, 69810, 73908, 1609, 902, 0, 63936, 128875, 11661, - 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, 2213, 0, 0, 807, - 43079, 0, 78475, 976, 5511, 64553, 0, 42155, 0, 41356, 74110, 118801, - 126614, 0, 8676, 983291, 0, 5582, 451, 63941, 5798, 9349, 42018, 127858, - 0, 0, 43609, 5906, 120553, 1440, 0, 128853, 120016, 74283, 11005, 0, - 66656, 66044, 0, 194698, 0, 0, 43393, 10094, 0, 11529, 10857, 120643, - 66436, 6546, 93, 8102, 0, 68405, 0, 0, 8171, 0, 119097, 127064, 917543, - 383, 7154, 41656, 92634, 94040, 0, 5187, 71296, 127277, 11286, 68620, - 64217, 0, 5232, 0, 41009, 0, 41005, 0, 0, 983827, 8292, 195074, 4980, - 8860, 73947, 10028, 65291, 7076, 13182, 194705, 0, 0, 10631, 66031, 7972, - 0, 78785, 0, 7900, 0, 11309, 3806, 4198, 42725, 0, 67656, 9995, 0, 92552, - 0, 12931, 0, 42684, 74285, 2088, 64213, 64366, 65156, 8814, 42238, 74771, - 0, 0, 12836, 0, 0, 74342, 8593, 0, 0, 68445, 13255, 0, 0, 7464, 0, 65865, - 0, 194650, 127144, 0, 9342, 120464, 0, 64516, 0, 78792, 10129, 41007, - 74375, 0, 40995, 12209, 41012, 119136, 0, 0, 69724, 40992, 92264, 127153, - 68653, 43558, 5522, 0, 61, 0, 74105, 3633, 983900, 65162, 41234, 12089, - 78281, 9771, 983905, 13251, 128701, 0, 6262, 2784, 42743, 0, 8126, 66483, - 0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, 7108, 194779, 10890, - 74481, 65834, 8324, 119103, 64417, 74817, 127465, 64737, 0, 983659, 8930, - 66678, 74249, 1193, 10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0, 0, - 77904, 92640, 77905, 9034, 6039, 0, 10075, 0, 41018, 65683, 10338, 66469, - 0, 0, 0, 42815, 0, 41966, 0, 127471, 0, 11792, 43064, 41025, 911, 7539, - 0, 0, 120339, 65159, 64390, 0, 0, 5520, 11662, 0, 65330, 42812, 0, 0, - 12326, 983856, 0, 42808, 128337, 9348, 64901, 983861, 0, 0, 0, 0, 0, - 917584, 43702, 983576, 5857, 65342, 92727, 119120, 120079, 8644, 0, 0, 0, - 74296, 41909, 0, 120332, 2791, 69663, 1891, 69824, 0, 41907, 66647, - 118939, 8761, 12942, 5748, 0, 10773, 0, 0, 8796, 78149, 6412, 2061, 8520, - 13146, 127185, 63931, 0, 65902, 2882, 0, 0, 12843, 4520, 120345, 92459, - 0, 983660, 0, 73860, 0, 0, 64345, 0, 9201, 128314, 194940, 0, 0, 43679, - 917585, 65117, 92270, 0, 10427, 0, 3844, 120675, 9755, 1110, 6612, 12222, - 0, 128789, 0, 0, 783, 194935, 0, 0, 983064, 194720, 65056, 3620, 41180, - 68378, 4556, 0, 0, 194933, 74250, 0, 67657, 10510, 4382, 66482, 0, 0, - 127527, 9177, 8902, 93958, 9839, 0, 12891, 983755, 983636, 63999, 2016, - 41917, 9788, 63928, 0, 1862, 65800, 9155, 66623, 9786, 65082, 41919, - 8579, 41914, 7981, 0, 66017, 4508, 64883, 92456, 92522, 127814, 0, 64592, - 74276, 120080, 6784, 78788, 68181, 0, 0, 0, 127534, 12147, 9024, 66378, - 66472, 983929, 64289, 65289, 78151, 66658, 194929, 64509, 78152, 0, - 126505, 11051, 983296, 0, 11355, 65885, 0, 128310, 41214, 0, 12299, 0, - 7500, 4506, 7773, 0, 0, 9963, 68649, 126609, 4040, 120570, 6167, 0, - 63922, 6594, 983740, 0, 0, 3624, 43036, 0, 6387, 63990, 19947, 63988, - 41955, 0, 63993, 10440, 9611, 65605, 6803, 0, 7738, 63986, 11446, 63984, - 92641, 3435, 78164, 43814, 43810, 7029, 64258, 41292, 118898, 12748, - 42742, 9517, 11518, 0, 78790, 0, 67993, 63956, 42458, 63954, 63953, - 63960, 9591, 4516, 10217, 68370, 11469, 69697, 42306, 2723, 118947, 0, 0, - 0, 0, 0, 11397, 2880, 0, 0, 2872, 0, 0, 3498, 4378, 917539, 4270, 0, - 65551, 68205, 6633, 43387, 0, 5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0, - 0, 126479, 415, 63964, 63963, 42345, 92310, 5183, 1877, 42498, 0, 2927, - 0, 63961, 4472, 0, 0, 78159, 69699, 917936, 42340, 4756, 128078, 7081, - 10730, 7691, 10331, 63830, 119625, 42922, 42103, 8628, 9813, 0, 42453, - 1604, 9565, 10539, 69701, 65764, 41415, 65767, 0, 8457, 42301, 11372, - 64873, 11992, 0, 0, 63980, 11801, 3622, 983124, 64336, 12017, 10463, - 63981, 4967, 64189, 1966, 43628, 0, 983292, 0, 0, 63971, 4347, 4416, - 42098, 11009, 10694, 63973, 402, 0, 13147, 128692, 42100, 64646, 13228, - 0, 41875, 3515, 74252, 11805, 0, 11302, 6259, 43395, 0, 0, 194670, 0, - 92351, 0, 74425, 11299, 1561, 0, 92359, 64942, 983559, 194733, 983686, - 194732, 0, 74301, 0, 11280, 0, 69784, 74060, 0, 0, 119664, 5145, 12486, - 65018, 66516, 5409, 127379, 194669, 7402, 5399, 9685, 74089, 7952, 5401, - 0, 66616, 68421, 983919, 0, 5405, 127875, 64866, 0, 119583, 128345, - 78784, 74248, 11330, 194723, 64690, 3254, 0, 0, 128207, 42390, 43678, - 194725, 983909, 65077, 0, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 0, - 3377, 0, 0, 0, 0, 78228, 0, 983762, 42691, 917886, 127198, 74767, 0, - 127075, 1379, 246, 0, 983761, 3788, 983106, 11041, 92549, 66304, 0, 0, - 8917, 42403, 301, 0, 0, 0, 0, 0, 983697, 10656, 0, 65214, 119242, 42567, - 92217, 13163, 983204, 120831, 74597, 3182, 0, 0, 0, 65034, 65889, 42169, - 4755, 74244, 194621, 11443, 0, 66319, 74598, 608, 600, 0, 1219, 3934, - 64206, 11483, 74510, 0, 74485, 42442, 65470, 983907, 64202, 13160, 7759, - 42482, 485, 128006, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, - 42431, 6916, 1208, 0, 119631, 11002, 42470, 0, 118946, 0, 0, 74041, 0, - 70045, 43539, 5411, 42196, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, - 9337, 12052, 10643, 55271, 983179, 12166, 2546, 194683, 213, 118852, - 65611, 0, 0, 194756, 74310, 6554, 0, 11914, 5452, 0, 0, 0, 0, 0, 194681, - 92560, 2713, 0, 9650, 43330, 0, 194675, 1406, 0, 0, 92659, 0, 68223, - 4143, 194677, 0, 65748, 4141, 9682, 65287, 1508, 127013, 8779, 10569, - 8725, 13299, 66638, 65750, 42263, 4145, 6380, 65751, 66613, 43994, 65738, - 55250, 9185, 9550, 0, 43403, 0, 0, 0, 65736, 41951, 64816, 65756, 983205, - 12955, 10596, 2888, 194645, 0, 0, 9657, 9019, 194766, 0, 2878, 5390, 0, - 194961, 0, 68679, 43552, 7501, 6328, 0, 10429, 10365, 0, 0, 41946, 7503, - 5235, 803, 68381, 0, 0, 8986, 126542, 10632, 11934, 11452, 1332, 0, 0, - 126647, 0, 118887, 1791, 5191, 9288, 64822, 2892, 0, 43394, 555, 0, 0, - 66646, 0, 119002, 13151, 74512, 7289, 74055, 64161, 8854, 64162, 5858, - 41927, 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 128813, 13158, - 92166, 7211, 0, 9371, 73973, 917553, 6828, 1625, 92302, 0, 1342, 68440, - 64171, 126704, 10903, 983494, 0, 0, 0, 0, 4482, 41606, 0, 128569, 983112, - 0, 64381, 0, 0, 195090, 42245, 126467, 41972, 0, 444, 0, 9127, 66687, - 66619, 126489, 78025, 0, 11349, 40991, 917570, 0, 119599, 120830, 0, - 1197, 128282, 1149, 194970, 0, 0, 40990, 43765, 0, 3492, 0, 127942, 0, 0, - 0, 12838, 983978, 19948, 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, - 41309, 0, 0, 8152, 0, 41550, 12227, 983613, 0, 12828, 127511, 0, 0, - 120708, 0, 0, 10386, 119574, 0, 0, 92680, 983789, 68154, 0, 1743, 0, 0, - 92239, 65186, 917571, 0, 9606, 0, 0, 64439, 0, 0, 92686, 0, 0, 194967, 0, - 0, 3395, 9362, 10878, 0, 0, 78362, 64830, 0, 126557, 41091, 3426, 1344, - 8870, 0, 0, 4735, 127017, 6119, 12822, 42699, 0, 983824, 74818, 1423, 0, - 42637, 41080, 0, 12039, 10559, 0, 118892, 0, 9472, 0, 11929, 0, 7170, - 9596, 6130, 128826, 43629, 11579, 78713, 0, 194740, 128691, 92185, 66699, - 64440, 1004, 92584, 194737, 43234, 66008, 12627, 0, 68414, 0, 43619, - 43303, 11300, 43304, 9686, 5890, 11776, 7558, 127158, 65627, 0, 10718, - 13154, 3461, 9139, 0, 0, 0, 0, 65365, 73877, 65628, 78019, 120319, 0, - 41708, 12860, 2641, 12069, 10838, 5403, 10352, 70085, 10061, 43237, 0, - 5140, 209, 128847, 41704, 41056, 43078, 128125, 118809, 0, 10899, 65469, - 92362, 0, 0, 2410, 993, 0, 120589, 120689, 78693, 0, 0, 7232, 0, 119253, - 0, 7110, 74462, 2066, 10489, 42166, 43463, 10659, 3600, 0, 4224, 1336, - 41518, 0, 0, 0, 0, 41139, 64820, 92538, 12966, 41134, 0, 0, 0, 0, 272, - 4263, 8793, 0, 0, 41502, 0, 983, 12549, 0, 0, 1190, 4109, 1335, 841, - 5888, 41358, 64863, 9544, 43481, 0, 194806, 70027, 2099, 5120, 2409, - 7799, 0, 74424, 0, 0, 4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0, - 0, 64914, 917787, 65101, 0, 11694, 92475, 11690, 5835, 127164, 66625, - 10842, 41354, 42123, 43097, 11688, 66634, 1094, 194, 64692, 0, 8180, 0, - 0, 9972, 73865, 4519, 6114, 10898, 43072, 0, 0, 93960, 983322, 126581, - 10695, 0, 7540, 0, 881, 7857, 6067, 65164, 0, 0, 0, 13311, 68403, 41857, - 64321, 8359, 0, 12689, 0, 194594, 0, 983312, 983881, 68183, 0, 983314, - 1287, 5436, 0, 983317, 74142, 92328, 74152, 119078, 6051, 10497, 69668, - 8985, 12109, 983323, 0, 127242, 0, 0, 3652, 10537, 0, 1276, 120440, 6549, - 279, 73745, 0, 0, 0, 1489, 0, 0, 0, 3899, 1007, 42124, 983557, 42122, - 92337, 92367, 0, 11985, 1345, 78600, 0, 0, 8956, 43083, 94057, 42138, - 78610, 0, 12151, 78608, 78604, 78605, 6285, 78603, 78612, 78613, 65942, - 492, 8685, 0, 983759, 0, 78622, 43712, 2582, 11470, 64538, 7444, 78615, + 74251, 0, 120647, 128930, 50, 10558, 9871, 42612, 43655, 0, 983818, + 74284, 66468, 66905, 13259, 4448, 917804, 983845, 113734, 70043, 1321, 0, + 10640, 11539, 1151, 0, 917607, 124958, 127079, 71106, 127852, 0, 0, + 983075, 12501, 64604, 128657, 11527, 118870, 8812, 0, 11538, 8673, 12650, + 11020, 0, 66467, 2105, 8087, 78163, 69632, 9894, 0, 128943, 69995, 4636, + 55262, 78513, 4515, 2382, 0, 127055, 0, 120495, 0, 128284, 12277, 194627, + 11995, 92553, 0, 12158, 70170, 8741, 10197, 0, 92426, 0, 6531, 0, 127846, + 473, 43415, 92936, 983650, 1873, 1087, 124966, 0, 74280, 78527, 66439, + 43218, 983123, 194716, 7237, 12504, 71113, 0, 983571, 983886, 9489, 0, + 70843, 4384, 74220, 63845, 2058, 69741, 13295, 43191, 128030, 195054, + 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 70846, 4421, + 10592, 0, 495, 66400, 41712, 7983, 70833, 93997, 983330, 6347, 78715, + 7654, 41710, 4196, 0, 437, 41709, 73772, 70832, 0, 9465, 13290, 119180, + 4997, 64306, 0, 0, 4999, 194642, 67401, 126582, 4711, 120769, 0, 2739, 0, + 8044, 74313, 194643, 41789, 128142, 10809, 66279, 0, 0, 1779, 6600, 6601, + 41543, 5325, 642, 64187, 13058, 120449, 12875, 983804, 92186, 13229, + 71845, 10575, 43399, 0, 0, 41791, 1104, 0, 983725, 10655, 0, 0, 0, 0, + 1082, 195049, 8428, 6569, 0, 0, 78534, 69849, 6783, 0, 12993, 8049, + 41548, 44021, 6458, 983807, 128882, 4761, 63828, 4766, 64623, 1273, + 43407, 120677, 118876, 195045, 6912, 1313, 6322, 10483, 128627, 41545, 0, + 92449, 0, 11216, 0, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527, + 71910, 66320, 70161, 92972, 0, 0, 41537, 66453, 8303, 8282, 11817, 73857, + 10003, 73859, 65904, 7363, 1686, 0, 70115, 11467, 3664, 65921, 64299, + 124939, 128462, 0, 4324, 126, 42246, 119152, 69984, 67725, 65926, 7744, + 194636, 74277, 66283, 78052, 43817, 6966, 43822, 8136, 0, 65600, 1633, 0, + 126614, 4762, 1103, 70827, 70157, 4765, 983492, 13078, 0, 4760, 63827, + 2050, 10871, 43199, 1102, 0, 42236, 128867, 194667, 11546, 74794, 337, 0, + 42591, 8627, 12279, 1111, 0, 92161, 4707, 68206, 10143, 7883, 127081, + 7880, 4522, 8645, 5704, 13010, 69796, 8304, 92982, 0, 119575, 2293, + 70195, 66654, 129077, 92676, 0, 13008, 127121, 4385, 128736, 13011, 0, + 92569, 119161, 13009, 160, 2677, 0, 0, 41793, 65763, 74221, 70790, 41792, + 42770, 94054, 65762, 118829, 43821, 5709, 128296, 71076, 43816, 0, + 983896, 1079, 3867, 5708, 0, 0, 43797, 5706, 64768, 5705, 8791, 4005, 0, + 10237, 10991, 128816, 43459, 9173, 917581, 917580, 13170, 12540, 917577, + 42605, 120765, 126617, 68647, 917572, 10058, 0, 74867, 67730, 127078, + 3339, 11448, 1106, 917591, 917590, 917593, 3340, 74017, 917586, 917589, + 129141, 120541, 10605, 1309, 63966, 120743, 1754, 92226, 13246, 864, 0, + 118926, 8972, 128410, 7849, 120092, 92533, 13240, 195068, 5192, 4338, + 67982, 10948, 66825, 13199, 92575, 1236, 13208, 13261, 13189, 13188, + 93993, 71847, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, + 63781, 63780, 63779, 1583, 119923, 13260, 4550, 120598, 64205, 983245, + 71071, 41522, 41523, 68523, 983772, 118923, 11354, 94071, 0, 42795, 0, + 119195, 11394, 194646, 13236, 13272, 13194, 1334, 69926, 4479, 1178, + 65586, 68311, 66681, 119193, 4601, 0, 0, 983765, 66828, 0, 127839, 0, + 6809, 63786, 6031, 67402, 63791, 63790, 1145, 63788, 7910, 63785, 43153, + 754, 10192, 13105, 8183, 120741, 2037, 0, 64710, 10747, 125, 0, 64890, 0, + 127376, 0, 41719, 63758, 3523, 1074, 13258, 9536, 71056, 0, 4427, 74242, + 63757, 43145, 12217, 63754, 41532, 1349, 63750, 63749, 129025, 0, 0, + 63753, 63802, 41084, 120622, 68133, 41930, 63805, 63804, 11140, 63801, + 41082, 8140, 63798, 6260, 0, 128391, 94074, 63793, 11988, 3898, 92246, + 10201, 12238, 63795, 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, + 12523, 12945, 983329, 42203, 7950, 3124, 63771, 42787, 4386, 11148, 6973, + 2793, 12475, 129180, 128501, 63769, 9530, 983119, 12232, 13135, 8596, + 5681, 63762, 4595, 63760, 792, 113674, 64803, 0, 8742, 195029, 11053, + 128796, 63744, 128107, 128942, 7588, 63748, 1693, 63746, 43204, 5055, + 68426, 42063, 1090, 120679, 125008, 11665, 74133, 4558, 65685, 9523, + 983451, 0, 71216, 11513, 0, 6157, 63775, 63774, 63773, 13191, 12170, + 3500, 3139, 120538, 3170, 12485, 0, 10872, 78271, 13006, 64433, 120074, + 0, 941, 0, 129079, 917853, 65541, 11063, 0, 8228, 0, 42065, 128368, 0, + 94039, 0, 92455, 7386, 0, 64444, 0, 119863, 43603, 94075, 65397, 288, 0, + 0, 0, 10025, 69915, 2918, 66820, 65300, 119871, 9883, 64726, 2790, 65395, + 3793, 0, 127829, 65393, 120592, 74138, 0, 92751, 77958, 74139, 78777, + 65394, 11548, 5270, 983236, 65396, 0, 65813, 13256, 1282, 120771, 0, 0, + 10888, 127490, 65242, 0, 3330, 0, 0, 68340, 0, 0, 71202, 3304, 42753, + 93046, 0, 74643, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 118794, 0, 43094, + 70023, 43650, 94037, 68317, 9035, 11141, 0, 128005, 0, 92207, 68125, + 128467, 164, 68309, 94067, 94000, 6958, 0, 43116, 67719, 70019, 13245, 0, + 0, 66818, 0, 70031, 11099, 12666, 13175, 13207, 120414, 66014, 120428, + 7447, 5929, 0, 65509, 129192, 7449, 11306, 0, 73920, 3180, 125102, 63808, + 9054, 971, 13062, 71090, 0, 65195, 10164, 92252, 74428, 0, 78146, 92611, + 0, 70204, 0, 10045, 12882, 13275, 2303, 11057, 0, 13276, 125133, 41525, + 78150, 7271, 11444, 126479, 129158, 128112, 12229, 11680, 0, 43411, + 73751, 0, 64813, 0, 0, 10476, 3858, 64175, 3932, 64958, 120432, 0, 73989, + 68192, 0, 69847, 369, 0, 41784, 0, 64163, 77997, 0, 92645, 65474, 4796, + 12292, 126595, 65479, 128631, 41781, 10486, 41480, 43002, 9899, 92608, 0, + 404, 12821, 3741, 0, 5788, 8092, 68212, 41222, 1831, 66020, 3982, 0, + 4388, 0, 746, 118826, 74783, 0, 12018, 65294, 127545, 0, 0, 0, 4422, + 4708, 3799, 74292, 119357, 0, 74430, 0, 11700, 4374, 0, 128179, 1364, 0, + 8038, 0, 917597, 12868, 69814, 70425, 6735, 73979, 13174, 73968, 13225, + 194902, 69808, 65835, 0, 2365, 7841, 0, 42855, 118856, 42866, 0, 0, + 127986, 66438, 41785, 12617, 64172, 13173, 4372, 119354, 0, 983568, 0, + 127821, 67685, 128062, 12965, 384, 64512, 10404, 10340, 119352, 1556, + 5274, 13210, 120125, 10017, 9733, 41787, 983243, 126994, 41373, 68486, + 12303, 128476, 13232, 13233, 349, 4863, 41371, 11656, 0, 120703, 119883, + 12861, 4398, 8543, 65618, 92737, 1096, 43852, 0, 42688, 12441, 12355, + 119348, 119347, 4318, 10452, 92902, 8032, 13243, 13237, 12719, 126646, + 119101, 0, 64884, 119872, 119345, 8597, 71100, 0, 9864, 0, 120785, + 119874, 94107, 13195, 41452, 64961, 7722, 0, 10459, 119878, 124949, + 119879, 66590, 128123, 41533, 66337, 0, 92184, 0, 4965, 43445, 917536, + 67856, 0, 43638, 78536, 128287, 6261, 119342, 43147, 66570, 1957, 10420, + 982, 2756, 13292, 13206, 125064, 0, 2925, 73809, 13056, 92914, 13212, + 43238, 983142, 13190, 13187, 92541, 13198, 118793, 0, 5242, 119179, + 64476, 1694, 8216, 71369, 6770, 43331, 0, 65620, 983728, 43544, 126466, + 0, 41444, 65621, 69955, 9197, 5246, 119106, 13185, 9709, 120323, 120322, + 12314, 65616, 5238, 43825, 71085, 119337, 5236, 40979, 983140, 71874, + 8286, 128537, 3936, 119331, 11699, 41347, 127249, 13235, 8842, 41248, 0, + 4379, 13239, 12692, 7969, 127266, 7219, 71875, 128251, 120509, 92907, + 66224, 734, 2979, 120303, 65619, 9872, 957, 64921, 1846, 66631, 41477, + 119256, 71192, 74511, 41770, 1670, 6442, 120317, 42446, 5379, 120318, + 41163, 74832, 11136, 71876, 11506, 0, 42841, 13267, 0, 0, 41775, 0, 7130, + 41773, 0, 10663, 70130, 0, 983974, 6151, 12110, 42673, 65572, 65293, + 65250, 13265, 13264, 64518, 0, 6100, 127964, 92647, 5808, 65922, 0, + 12967, 66041, 5612, 4583, 70004, 43386, 68097, 64575, 126637, 11965, 0, + 68358, 0, 69789, 42653, 92260, 68102, 9698, 7814, 71045, 119651, 128514, + 0, 41921, 118858, 9756, 6985, 66418, 66621, 74219, 66412, 128822, 118997, + 8012, 5674, 12353, 66421, 12361, 5677, 5588, 125005, 41925, 128124, + 41920, 5673, 120534, 5676, 41923, 12694, 118978, 5672, 1294, 0, 78059, 0, + 42511, 1727, 120725, 42436, 124928, 0, 0, 74222, 8718, 3550, 736, 10268, + 4505, 5873, 74090, 5826, 55232, 5813, 0, 92889, 5841, 5837, 55234, 0, + 3105, 12829, 5838, 5796, 0, 119592, 5793, 0, 5866, 5797, 41011, 5865, + 93009, 7956, 598, 0, 64649, 5806, 42398, 0, 9037, 5671, 120041, 983255, + 0, 0, 128855, 0, 847, 128242, 9529, 128019, 66657, 6980, 78483, 43510, + 78122, 92219, 0, 67411, 78486, 0, 0, 120039, 42683, 71848, 983055, 7114, + 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 6792, 43201, 0, + 19963, 5698, 194768, 983941, 92933, 71887, 5644, 10292, 65546, 69727, + 68141, 8372, 0, 65116, 0, 120022, 10175, 10388, 42799, 94100, 41013, + 10568, 0, 983618, 2869, 917843, 41015, 74473, 2785, 4366, 0, 10954, + 41802, 0, 42608, 78469, 9884, 4759, 73768, 120296, 10266, 41359, 1170, + 43365, 69810, 73908, 1609, 902, 92773, 63936, 127239, 11661, 8122, 5818, + 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, 2213, 0, 0, 807, 43079, 0, + 78475, 976, 5511, 64553, 0, 42155, 983317, 41356, 74110, 118801, 71043, + 120080, 8676, 983291, 94002, 5582, 451, 63941, 5798, 9349, 42018, 127858, + 0, 78681, 43609, 5906, 120553, 1440, 0, 128853, 120016, 70342, 11005, + 983697, 66656, 66044, 0, 128592, 128793, 0, 43393, 10094, 70164, 11529, + 10857, 92944, 66436, 6546, 93, 8102, 67323, 68405, 0, 194714, 8171, + 118888, 119097, 127064, 917543, 383, 7154, 41656, 43495, 94040, 67162, + 5187, 71296, 71086, 11286, 68620, 64217, 0, 5232, 0, 41009, 127377, + 41005, 0, 0, 983827, 8292, 125108, 4980, 8860, 71054, 10028, 65291, 7076, + 13182, 194705, 128224, 127974, 10631, 66031, 7972, 0, 78785, 0, 7900, + 128590, 11309, 3806, 4198, 42725, 0, 67656, 9995, 0, 92552, 0, 12931, + 983690, 42684, 74285, 2088, 64213, 64366, 65156, 8814, 42238, 74771, 0, + 917831, 12836, 0, 0, 74342, 8593, 0, 0, 68445, 13255, 0, 0, 7464, 0, + 65865, 0, 194650, 127144, 0, 9342, 120464, 70376, 64516, 0, 78792, 10129, + 41007, 74375, 0, 40995, 12209, 41012, 119136, 0, 0, 69724, 40992, 92264, + 127153, 68653, 43558, 5522, 0, 61, 194780, 74105, 3633, 983900, 65162, + 41234, 12089, 78281, 9771, 983905, 13251, 128701, 0, 6262, 2784, 42743, + 71078, 8126, 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, + 7108, 194779, 10890, 74481, 65834, 8324, 118944, 64417, 74817, 127465, + 64737, 74853, 983659, 8930, 66678, 67216, 1193, 10056, 1800, 13253, + 13252, 7829, 0, 0, 7743, 0, 124996, 77904, 77913, 77905, 9034, 6039, + 129139, 10075, 0, 41018, 65683, 10338, 66469, 0, 0, 0, 42815, 92984, + 41966, 0, 127471, 0, 11792, 43064, 41025, 911, 7539, 0, 40963, 120339, + 65159, 64390, 0, 983160, 5520, 11662, 128468, 65330, 42812, 0, 0, 12326, + 71081, 194638, 42808, 128337, 9348, 64901, 983861, 0, 128328, 66839, 0, + 0, 917584, 43702, 983148, 5857, 65342, 92727, 119120, 120079, 8644, 0, 0, + 11186, 74296, 41909, 0, 66900, 2791, 69663, 1891, 69824, 66397, 41907, + 66647, 118939, 8761, 12942, 5748, 0, 10773, 70868, 983295, 8796, 78149, + 6412, 2061, 8520, 13146, 127185, 63931, 0, 65902, 2882, 0, 0, 12843, + 4520, 120345, 92459, 0, 983660, 0, 73860, 0, 0, 64345, 0, 9201, 128314, + 70871, 0, 0, 43679, 917585, 65117, 92270, 0, 10427, 0, 3844, 6842, 9755, + 1110, 6612, 12222, 93030, 128789, 0, 983096, 783, 194935, 0, 127221, + 92549, 194720, 65056, 3620, 41180, 68378, 4556, 0, 68480, 194933, 74250, + 0, 67657, 10510, 4382, 66482, 0, 0, 127527, 9177, 8902, 93958, 9839, + 120700, 12891, 983755, 983636, 63999, 2016, 41917, 9788, 63928, 67696, + 1862, 65800, 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, + 66017, 4508, 64883, 92456, 92522, 127814, 0, 64592, 74276, 67688, 6784, + 78788, 68181, 0, 71218, 113821, 66366, 12147, 9024, 66378, 66472, 983929, + 64289, 65289, 78151, 66658, 71935, 64509, 78152, 113697, 126505, 11051, + 194928, 0, 11355, 65885, 128773, 127941, 41214, 0, 12299, 0, 7500, 4506, + 7773, 0, 0, 9963, 68649, 126609, 4040, 120570, 6167, 74519, 63922, 6594, + 983740, 0, 0, 3624, 43036, 0, 6387, 63990, 19947, 63988, 41955, 126990, + 63993, 10440, 9611, 65605, 6803, 0, 7738, 63986, 11446, 63984, 92641, + 3435, 78164, 43814, 43810, 7029, 64258, 41292, 118898, 12748, 42742, + 9517, 11518, 128168, 78790, 0, 67993, 63956, 42458, 63954, 63953, 63960, + 9591, 4516, 10217, 68370, 11469, 69697, 42306, 2723, 118947, 0, 0, 0, 0, + 0, 11397, 2880, 70806, 0, 2872, 0, 128506, 3498, 4378, 917539, 4270, 0, + 65551, 68205, 6633, 43387, 0, 5230, 194991, 0, 0, 0, 0, 8161, 393, 12013, + 0, 983198, 119103, 415, 63964, 63963, 42345, 92310, 5183, 1877, 42498, 0, + 2927, 71058, 63961, 4472, 0, 0, 78159, 69699, 917936, 42340, 4756, + 128078, 7081, 10730, 7691, 10331, 63830, 119625, 42922, 42103, 8628, + 9813, 0, 42453, 1604, 9565, 10539, 69701, 65764, 41415, 65767, 129196, + 8457, 42301, 11372, 64873, 11992, 0, 0, 63980, 11801, 3622, 983124, + 64336, 12017, 10463, 63981, 4967, 64189, 1966, 43628, 983908, 983292, + 194766, 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, 402, 92213, + 13147, 128692, 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, + 11302, 6259, 43395, 0, 0, 194670, 0, 92351, 74813, 74425, 11299, 1561, + 118881, 92318, 64942, 93021, 194733, 70411, 194732, 0, 74301, 127893, + 11280, 128489, 69784, 74060, 0, 0, 119664, 5145, 12486, 65018, 66516, + 5409, 127379, 194669, 7402, 5399, 9685, 74089, 7952, 5401, 0, 66616, + 66832, 92966, 129105, 5405, 127875, 64866, 127864, 119583, 119122, 78784, + 74248, 11330, 194723, 64690, 3254, 0, 0, 128207, 42390, 43678, 194725, + 983909, 65077, 129059, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 0, + 3377, 0, 0, 74354, 0, 78228, 983722, 983762, 42691, 127886, 127198, + 74767, 0, 127075, 1379, 246, 0, 983761, 3788, 983106, 11041, 67202, + 66304, 0, 0, 8917, 42403, 301, 0, 128500, 127046, 0, 0, 113822, 10656, + 125042, 65214, 92987, 42567, 92217, 13163, 983204, 120831, 74597, 3182, + 0, 0, 0, 65034, 65889, 42169, 4755, 74244, 194621, 11443, 983603, 66319, + 6841, 608, 600, 0, 1219, 3934, 64206, 11483, 74510, 119117, 74485, 42442, + 65470, 983907, 64202, 13160, 7759, 42482, 485, 69982, 70505, 9828, 0, + 43505, 42280, 0, 9351, 7778, 64379, 7496, 42431, 6916, 1208, 0, 119631, + 11002, 42470, 0, 68315, 0, 0, 74041, 0, 70045, 43539, 5411, 42196, 0, 0, + 0, 9150, 66831, 42393, 13086, 1310, 66848, 9337, 12052, 10643, 55271, + 128951, 12166, 2546, 194683, 213, 118852, 65611, 0, 194822, 194756, + 74310, 6554, 0, 11914, 5452, 0, 0, 92772, 0, 0, 194681, 92560, 2713, + 129029, 9650, 43330, 0, 128505, 1406, 125007, 42925, 74638, 194593, + 68223, 4143, 128136, 0, 65748, 4141, 9682, 65287, 1508, 127013, 8779, + 10569, 8725, 13299, 66638, 65750, 42263, 4145, 6380, 65751, 66613, 43994, + 65738, 55250, 9185, 9550, 0, 43403, 0, 0, 194783, 65736, 41951, 64816, + 65756, 983205, 12955, 10596, 2888, 194645, 0, 0, 9657, 9019, 125077, 0, + 2878, 5390, 0, 194961, 67325, 68679, 43552, 7501, 6328, 194960, 10429, + 10365, 0, 0, 41946, 7503, 5235, 803, 68381, 0, 0, 8986, 43838, 10632, + 11934, 11452, 1332, 0, 194970, 126647, 0, 118887, 1791, 5191, 9288, + 64822, 2892, 127242, 43394, 555, 0, 0, 66646, 128980, 119002, 13151, + 74512, 7289, 74055, 64161, 8854, 64162, 5858, 41927, 10582, 120457, 1784, + 1361, 195047, 0, 7905, 0, 64868, 128813, 13158, 92166, 7211, 71884, 9371, + 73973, 128441, 6828, 1625, 7664, 0, 1342, 68440, 64171, 92642, 10903, + 983494, 0, 92527, 0, 70438, 4482, 41606, 0, 128569, 983112, 0, 64381, 0, + 194974, 195090, 42245, 126467, 41972, 0, 444, 0, 9127, 66687, 66619, + 126489, 78025, 0, 11349, 40991, 917570, 0, 70177, 120830, 0, 1197, + 128282, 1149, 68316, 0, 0, 40990, 43765, 0, 3492, 917906, 118784, 0, 0, + 0, 12838, 67208, 19948, 41677, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, + 41309, 128161, 0, 8152, 0, 41550, 12227, 983613, 0, 12828, 127511, 0, + 983971, 120708, 0, 0, 10386, 119574, 129159, 0, 92680, 983789, 68154, 0, + 1743, 0, 0, 92239, 65186, 917571, 0, 9606, 0, 0, 64439, 0, 0, 92686, + 983875, 0, 43866, 128881, 0, 3395, 9362, 10878, 128376, 0, 78362, 64830, + 0, 125046, 41091, 3426, 1344, 8870, 0, 71344, 4735, 11111, 6119, 12822, + 42699, 0, 983824, 74818, 1423, 128923, 42637, 41080, 0, 12039, 10559, + 128634, 118892, 0, 9472, 67734, 11929, 128905, 7170, 9596, 6130, 128826, + 43629, 11579, 78713, 0, 92501, 125081, 92185, 66699, 64440, 1004, 92584, + 194736, 43234, 66008, 12627, 0, 68414, 74614, 43619, 43303, 11300, 43304, + 9686, 5890, 11776, 7558, 127158, 65627, 0, 10718, 13154, 3461, 9139, 0, + 983094, 0, 0, 65365, 73877, 65628, 78019, 120319, 0, 41708, 12860, 2641, + 12069, 10838, 5403, 10352, 70085, 10061, 43237, 125057, 5140, 209, + 128847, 41704, 41056, 43078, 128125, 118809, 67232, 10899, 65469, 70125, + 0, 0, 2410, 993, 0, 120589, 120689, 78693, 0, 0, 7232, 0, 119253, 124963, + 7110, 74462, 2066, 10489, 42166, 43463, 10659, 3600, 78118, 4224, 1336, + 41518, 983932, 0, 0, 0, 41139, 64820, 92538, 12966, 41134, 0, 0, 119153, + 0, 272, 4263, 8793, 983856, 0, 41502, 128133, 983, 12549, 124940, 0, + 1190, 4109, 1335, 841, 5888, 41358, 64863, 9544, 43481, 0, 194806, 70027, + 2099, 5120, 2409, 7799, 0, 74424, 0, 0, 4731, 92279, 66629, 0, 0, 1255, + 4149, 9247, 0, 9913, 0, 0, 64914, 917787, 65101, 113714, 11694, 92475, + 11690, 5835, 127164, 66625, 10842, 41354, 42123, 43097, 11688, 66634, + 1094, 194, 64692, 0, 8180, 0, 0, 9972, 73865, 4519, 6114, 10898, 43072, + 92465, 0, 93960, 983322, 126581, 10695, 0, 7540, 0, 881, 7857, 6067, + 65164, 0, 0, 129134, 13311, 68403, 41857, 64321, 8359, 983311, 12689, + 983310, 194594, 0, 983312, 71859, 68183, 0, 983314, 1287, 5436, 0, 71097, + 74142, 92328, 74152, 70205, 6051, 10497, 69668, 8985, 12109, 983323, 0, + 93043, 0, 0, 3652, 10537, 120282, 1276, 120440, 6549, 279, 73745, 0, + 128664, 0, 1489, 0, 0, 0, 3899, 1007, 42124, 43828, 42122, 92337, 92367, + 0, 11985, 1345, 78600, 119832, 917601, 8956, 43083, 94057, 42138, 78610, + 129131, 6430, 78608, 78604, 78605, 6285, 78603, 78612, 78613, 65942, 492, + 8685, 128481, 983759, 0, 78622, 43712, 2582, 11470, 64538, 7444, 78615, 78616, 2297, 0, 73837, 119823, 2527, 119824, 197, 2799, 92594, 41944, - 120276, 9933, 0, 66515, 767, 5524, 7028, 0, 0, 119827, 119817, 119828, + 120276, 9933, 74011, 66515, 767, 5524, 7028, 0, 0, 119827, 119817, 92950, 78633, 10896, 0, 1799, 120497, 6971, 74336, 128342, 0, 65340, 118979, - 41551, 2434, 94018, 0, 120579, 0, 4631, 0, 0, 6407, 0, 6338, 43214, 0, - 7570, 0, 3192, 0, 8414, 0, 93983, 0, 0, 0, 9164, 66612, 93959, 3171, - 6623, 4961, 68396, 886, 55216, 8654, 78832, 9993, 74390, 64603, 70066, - 69241, 9599, 78629, 43084, 78627, 78628, 78625, 2399, 69693, 8994, 10944, - 41208, 983713, 41168, 8178, 0, 3367, 92334, 42510, 78641, 78636, 6804, - 78634, 1947, 0, 0, 92681, 42759, 11068, 1705, 9331, 0, 74798, 9181, - 65359, 0, 8017, 119831, 65096, 66720, 0, 43475, 0, 4909, 12126, 128673, - 120696, 4904, 983333, 69650, 1365, 9253, 42757, 43436, 7462, 0, 0, 0, 0, - 119587, 64415, 0, 0, 5398, 0, 127386, 93953, 0, 0, 119015, 0, 0, 9476, 0, - 983777, 12763, 126603, 3629, 0, 13005, 0, 3628, 0, 0, 92502, 3469, 42107, - 42116, 917578, 64809, 2928, 4905, 9853, 851, 9040, 0, 64665, 43086, 9114, - 0, 42583, 9315, 4822, 4906, 3852, 2847, 119821, 3236, 11317, 1251, 7777, - 41852, 11410, 10964, 0, 43222, 12646, 120269, 10259, 9865, 65821, 0, - 6018, 92290, 0, 12276, 0, 68372, 0, 92259, 119244, 0, 983230, 10467, 0, - 2443, 10918, 78217, 119825, 1001, 9241, 1927, 0, 0, 73987, 127885, 0, 0, - 118828, 120271, 65678, 12867, 0, 8260, 77945, 7519, 11505, 12274, 8904, - 518, 65857, 0, 128674, 13204, 4387, 857, 0, 65369, 0, 92336, 43125, - 120592, 0, 0, 0, 0, 5136, 1968, 983041, 126627, 1337, 64967, 1629, 0, - 796, 66506, 0, 74123, 12877, 120649, 42314, 43388, 0, 74403, 6120, 478, - 65151, 68128, 128147, 43082, 6016, 0, 42284, 128507, 4276, 1206, 3619, - 41638, 69691, 3843, 12011, 8853, 3361, 0, 490, 10715, 7578, 68384, 0, - 65350, 10530, 12348, 8653, 74314, 42435, 6154, 9551, 65354, 78522, 784, - 42397, 334, 0, 42416, 65356, 65273, 77987, 69666, 4442, 10364, 0, 778, - 41626, 42455, 7989, 74063, 3227, 69907, 127275, 73983, 2915, 11502, - 41022, 41702, 10309, 127035, 78320, 0, 6975, 0, 5415, 12176, 0, 74193, - 3462, 65215, 42629, 78691, 73784, 0, 0, 9759, 0, 70057, 127254, 8114, - 78698, 78697, 78696, 78695, 8710, 42495, 118956, 0, 4051, 10460, 43364, - 118917, 1356, 12161, 42713, 128857, 127268, 1619, 9703, 43152, 42489, - 42112, 127978, 1875, 10808, 42109, 120284, 41860, 64862, 13305, 64907, - 5289, 13144, 128658, 0, 5575, 9675, 0, 5940, 226, 2649, 6336, 983277, - 119830, 43236, 3382, 42449, 6498, 1658, 11936, 78232, 0, 11269, 10151, - 73759, 43100, 69888, 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 74753, - 65178, 4684, 78701, 119653, 0, 126551, 0, 6048, 74460, 42110, 73965, - 10870, 8557, 11054, 68664, 119049, 9681, 4475, 0, 41142, 2100, 0, 120731, - 6035, 0, 7651, 10296, 64443, 0, 983295, 917987, 0, 118966, 74144, 40997, - 0, 10392, 10328, 40998, 43462, 74488, 0, 9800, 8979, 0, 13307, 41000, 0, - 119239, 6487, 3386, 0, 10344, 0, 65299, 5394, 43246, 78243, 10220, 66505, - 41200, 128583, 4425, 0, 0, 0, 43074, 73799, 983200, 78147, 0, 12173, - 78545, 0, 127011, 65338, 0, 0, 119582, 4474, 0, 43093, 128644, 1587, 0, - 127372, 64475, 128098, 1369, 983672, 9959, 7927, 0, 4560, 0, 0, 92277, - 983621, 64948, 4430, 74347, 42601, 4514, 66434, 93955, 8194, 65462, - 10626, 10965, 0, 8893, 983301, 12542, 0, 65341, 0, 65829, 7925, 119822, - 10475, 0, 0, 1352, 11069, 7707, 127560, 126486, 65279, 127102, 68207, - 127100, 7099, 6040, 127097, 10071, 0, 9336, 43750, 0, 8899, 7798, 64474, - 64259, 69873, 65188, 7820, 43018, 127082, 0, 7746, 1492, 78551, 10884, - 77982, 0, 5127, 11285, 42501, 5495, 4273, 43095, 41426, 10849, 5730, - 2999, 6342, 68636, 74304, 371, 64373, 6023, 169, 5497, 11708, 0, 0, 6323, - 194684, 8224, 0, 8938, 6043, 12738, 0, 983076, 5321, 0, 194798, 0, 2589, - 74332, 1689, 7802, 4683, 74318, 42704, 120296, 11905, 0, 0, 128516, - 128163, 74513, 6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 71312, - 5731, 1381, 2387, 0, 0, 8289, 64525, 65817, 2881, 43142, 0, 9601, 2879, - 9668, 9766, 0, 5729, 917833, 74410, 6036, 64881, 4026, 9361, 127091, - 2887, 0, 3526, 6298, 0, 77897, 120095, 78519, 0, 8572, 6021, 77896, - 128288, 77895, 43155, 0, 119849, 3146, 10959, 9483, 0, 77893, 10981, 166, - 917841, 8635, 983606, 10623, 408, 119058, 127507, 13298, 0, 7426, 41641, - 12717, 0, 7607, 10639, 43396, 0, 0, 41643, 74134, 983054, 8713, 41640, - 10221, 41645, 66712, 6645, 646, 66726, 66711, 42129, 93994, 77901, 3472, - 8697, 0, 0, 983815, 0, 0, 0, 5809, 1950, 119356, 92432, 74572, 0, 42136, - 0, 0, 0, 0, 3247, 119854, 65017, 983953, 68428, 66668, 0, 0, 10983, 0, 0, - 0, 41567, 0, 0, 0, 194624, 119853, 0, 0, 8285, 0, 4509, 0, 66471, 12216, - 0, 40988, 92592, 74809, 41727, 0, 42848, 2396, 917766, 0, 74018, 917538, - 64940, 7027, 3886, 0, 42457, 119008, 0, 996, 68123, 94058, 4249, 0, - 917594, 11707, 8222, 0, 7939, 92454, 92460, 127801, 917592, 128359, 8534, - 127154, 40983, 0, 983240, 0, 7201, 12561, 0, 42371, 12558, 1540, 917549, - 10052, 40982, 0, 0, 1488, 0, 0, 0, 917559, 0, 0, 1563, 128034, 9619, - 983940, 0, 0, 127872, 71363, 5803, 7797, 6070, 10006, 0, 2922, 6082, 0, - 65009, 983942, 12567, 128703, 0, 41412, 0, 0, 3607, 9200, 10046, 9612, - 42153, 8218, 9485, 0, 2032, 78354, 0, 0, 0, 0, 0, 43085, 6057, 508, - 93968, 128015, 67968, 0, 92405, 0, 0, 638, 6083, 119072, 0, 0, 2305, - 78348, 68096, 0, 6056, 6659, 67969, 0, 6085, 0, 0, 3915, 41634, 0, 41639, - 63912, 11941, 0, 4028, 1787, 42180, 43096, 43753, 3249, 1768, 93982, - 12328, 501, 93985, 10601, 0, 583, 0, 41977, 0, 66004, 119350, 6505, - 74010, 0, 13064, 55267, 120810, 6500, 5526, 65049, 0, 73764, 0, 92376, - 12745, 9678, 0, 120587, 9869, 128815, 1771, 0, 8936, 0, 0, 4208, 78341, - 78567, 78342, 0, 983456, 74101, 0, 11762, 0, 92422, 77997, 68010, 66475, - 0, 5027, 78172, 128878, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, + 41551, 2434, 94018, 126642, 65353, 0, 4631, 118996, 0, 6407, 113737, + 6338, 43214, 0, 7570, 0, 3192, 0, 8414, 983390, 93983, 0, 0, 0, 9164, + 66612, 93959, 3171, 6623, 4961, 68396, 886, 55216, 8654, 78832, 9993, + 74390, 64603, 70066, 69241, 9599, 78629, 43084, 78627, 78628, 78625, + 2399, 69693, 8994, 10944, 41208, 983713, 41168, 8178, 74859, 3367, 92334, + 42510, 78641, 78636, 6804, 70475, 1947, 917579, 0, 92681, 42759, 11068, + 1705, 9331, 0, 74798, 9181, 65359, 125065, 8017, 119831, 65096, 66720, + 71906, 43475, 0, 4909, 12126, 128673, 120696, 4904, 983333, 43503, 1365, + 9253, 42757, 43436, 7462, 127772, 0, 0, 0, 66845, 64415, 120500, 128869, + 5398, 125035, 127386, 93953, 127362, 983782, 119015, 0, 128083, 9476, 0, + 120695, 12763, 126603, 3629, 126626, 13005, 11181, 3628, 0, 0, 92502, + 3469, 42107, 42116, 917578, 64809, 2928, 4905, 9853, 851, 9040, 0, 64665, + 43086, 9114, 43870, 42583, 9315, 4822, 4906, 3852, 2847, 119821, 3236, + 11317, 1251, 7777, 41852, 11410, 10964, 0, 43222, 12646, 120269, 10259, + 9865, 65821, 0, 6018, 68293, 917917, 12276, 119110, 68372, 0, 92259, + 71893, 0, 119828, 10467, 0, 2443, 10918, 78217, 77947, 1001, 9241, 1927, + 0, 124942, 73987, 127885, 71895, 93012, 7992, 77943, 65678, 12867, + 128787, 8260, 77945, 7519, 11505, 12274, 8904, 518, 65857, 128361, + 128674, 13204, 4387, 857, 983866, 65369, 0, 92336, 43125, 11842, 0, + 71072, 0, 0, 5136, 1968, 128906, 126627, 1337, 64967, 1629, 0, 796, + 66506, 0, 74123, 12877, 120649, 42314, 43388, 43826, 74403, 6120, 478, + 65151, 68128, 128147, 43082, 6016, 0, 42284, 71894, 4276, 1206, 3619, + 41638, 69691, 3843, 12011, 8853, 3361, 0, 490, 10715, 7578, 68384, 92754, + 65350, 10530, 12348, 8653, 68245, 42435, 6154, 9551, 65354, 78522, 784, + 42397, 334, 194676, 42416, 65356, 65273, 67243, 69666, 4442, 10364, 0, + 778, 41626, 42455, 7989, 74063, 3227, 69907, 125116, 11102, 2915, 11502, + 41022, 41702, 10309, 127035, 78320, 120273, 6975, 0, 5415, 12176, 0, + 74193, 3462, 65215, 42629, 78691, 71175, 0, 127256, 9759, 127255, 70057, + 127254, 8114, 78698, 78697, 78696, 78695, 8710, 42495, 118956, 70189, + 4051, 10460, 43364, 71206, 1356, 12161, 42713, 128857, 127268, 1619, + 9703, 43152, 42489, 42112, 66896, 1875, 10808, 42109, 120284, 41860, + 64862, 13305, 64907, 5289, 13144, 128658, 983224, 5575, 9675, 195018, + 5940, 226, 2649, 6336, 983277, 92979, 43236, 3382, 42449, 6498, 1658, + 11936, 78232, 113814, 11269, 10151, 73759, 43100, 69888, 65508, 0, 0, 0, + 8935, 78234, 0, 983757, 0, 616, 74753, 65178, 4684, 78701, 119653, 74631, + 126551, 0, 6048, 74460, 42110, 73965, 10870, 8557, 11054, 68664, 119049, + 9681, 4475, 67429, 41142, 2100, 125024, 120731, 6035, 73796, 7651, 6846, + 64443, 983957, 983294, 917987, 0, 118966, 74144, 40997, 68488, 10392, + 10328, 40998, 43462, 74488, 71182, 9800, 8979, 0, 13307, 41000, 0, + 119239, 6487, 3386, 129094, 10344, 0, 65299, 5394, 43246, 78243, 10220, + 66505, 41200, 128582, 4425, 0, 0, 0, 43074, 73799, 129076, 78147, 0, + 12173, 78545, 0, 66824, 65338, 983676, 0, 119582, 4474, 128936, 43093, + 128644, 1587, 0, 127372, 64475, 128098, 1369, 983672, 9959, 7927, 0, + 4560, 0, 0, 92277, 983621, 64948, 4430, 74347, 42601, 4514, 66434, 93955, + 8194, 65462, 10626, 10965, 0, 8893, 983301, 12542, 0, 65341, 67703, + 65829, 7925, 119822, 10475, 113825, 0, 1352, 11069, 7707, 127560, 126486, + 65279, 127102, 68207, 127100, 7099, 6040, 67681, 10071, 78554, 9336, + 43750, 128507, 8899, 7798, 64474, 64259, 69873, 65188, 7820, 43018, + 127082, 128898, 7746, 1492, 78551, 10884, 77982, 66866, 5127, 11285, + 42501, 5495, 4273, 43095, 41426, 10849, 5730, 2999, 6342, 68636, 74304, + 371, 64373, 6023, 169, 5497, 11708, 0, 128603, 6323, 129065, 8224, + 128417, 8938, 6043, 12738, 120671, 983076, 5321, 68645, 194798, 120251, + 2589, 74332, 1689, 7802, 4683, 74318, 42704, 92940, 11905, 0, 0, 128516, + 128163, 74513, 6049, 0, 4027, 834, 118962, 1803, 983822, 1503, 0, 0, + 71312, 5731, 1381, 2387, 126610, 70808, 8289, 64525, 65817, 2881, 43142, + 0, 9601, 2879, 9668, 9766, 0, 5729, 129110, 71230, 6036, 64881, 4026, + 9361, 127091, 2887, 70389, 3526, 6298, 119851, 77897, 120095, 78519, + 118964, 8572, 6021, 77896, 128288, 71174, 43155, 0, 71197, 3146, 10959, + 9483, 0, 77893, 10981, 166, 917841, 8635, 917840, 10623, 408, 119058, + 127507, 13298, 0, 7426, 41641, 12717, 0, 7607, 10639, 43396, 0, 119089, + 41643, 74134, 983054, 8713, 41640, 10221, 41645, 66293, 6645, 646, 66726, + 66711, 42129, 68255, 77901, 3472, 8697, 0, 0, 983815, 0, 194599, 0, 5809, + 1950, 119356, 92432, 68339, 0, 42136, 0, 0, 0, 0, 3247, 92402, 65017, + 128794, 68428, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, 0, 0, 78446, + 119853, 127922, 0, 8285, 0, 4509, 917802, 66471, 12216, 0, 40988, 92592, + 74809, 41727, 0, 42848, 2396, 129078, 0, 74018, 917538, 64940, 7027, + 3886, 0, 42457, 92888, 119834, 996, 68123, 94058, 4249, 92410, 69650, + 11707, 8222, 73825, 7939, 71213, 92460, 127801, 917592, 128359, 8534, + 69853, 40983, 0, 983240, 0, 7201, 12561, 0, 42371, 12558, 1540, 917549, + 10052, 40982, 0, 0, 1488, 71177, 0, 194831, 917559, 128401, 0, 1563, + 128034, 9619, 983940, 0, 983082, 127872, 71363, 3560, 7797, 6070, 10006, + 128922, 2922, 6082, 70147, 65009, 983942, 12567, 66712, 0, 41412, 0, 0, + 3607, 9200, 10046, 9612, 42153, 8218, 9485, 0, 2032, 78354, 917904, + 119131, 0, 0, 0, 43085, 6057, 508, 93968, 92989, 67968, 0, 92198, 0, 0, + 638, 6083, 119072, 124950, 0, 2305, 78348, 68096, 0, 6056, 6659, 67969, + 983288, 6085, 0, 0, 3915, 41634, 0, 41639, 63912, 11941, 983783, 4028, + 1787, 42180, 43096, 43753, 3249, 1768, 93982, 12328, 501, 93985, 10601, + 0, 583, 0, 41977, 0, 66004, 66416, 6505, 74010, 0, 13064, 55267, 119113, + 6500, 5526, 65049, 0, 12990, 0, 92376, 12745, 9678, 983143, 120587, 9869, + 128815, 1771, 128965, 8936, 92964, 0, 4208, 78341, 78567, 78342, 67742, + 983208, 74101, 128605, 11762, 0, 70096, 6835, 68010, 66475, 120260, 5027, + 78172, 128878, 119830, 5069, 73736, 5028, 9897, 92774, 73739, 5026, 983253, 68639, 6331, 10079, 8931, 0, 1415, 8866, 41901, 74790, 78138, - 119361, 983564, 43106, 5029, 65309, 1580, 3598, 68424, 41070, 77903, 0, - 3440, 78215, 1562, 128656, 127175, 119358, 1716, 983679, 10600, 917867, - 620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, 0, 5025, - 69892, 983209, 0, 118885, 0, 65557, 0, 74541, 983587, 11599, 128209, - 11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, - 65275, 8906, 127096, 5755, 2636, 983227, 10815, 11619, 2301, 41540, 7815, - 11616, 6979, 12080, 7721, 11604, 7869, 1592, 0, 42152, 78498, 41048, - 917763, 829, 0, 92406, 19950, 0, 126482, 6616, 0, 118875, 10953, 391, 0, - 69785, 482, 42296, 11588, 0, 43606, 0, 68397, 66370, 74506, 42335, - 983188, 0, 0, 7538, 5315, 120644, 42491, 0, 42061, 128088, 4576, 0, - 68417, 43809, 4277, 0, 4039, 64472, 42338, 368, 42058, 3960, 11043, - 11337, 78209, 917820, 63989, 3958, 12132, 1849, 0, 9921, 42451, 4253, - 41147, 42064, 11959, 42404, 41160, 0, 3618, 78338, 0, 43300, 5156, 92629, - 0, 929, 6827, 42035, 42437, 1555, 0, 8691, 66435, 2215, 41662, 94010, 0, - 0, 0, 93952, 4578, 64513, 41664, 983734, 42578, 128794, 41661, 78715, - 43267, 9356, 0, 0, 0, 1286, 10166, 0, 0, 64707, 983127, 42476, 7730, - 983859, 128522, 42483, 0, 0, 42324, 42291, 10020, 43359, 0, 6641, 525, - 41627, 917923, 8763, 128304, 41628, 533, 11931, 65225, 8321, 42504, - 42581, 0, 6915, 42310, 4377, 8559, 0, 74360, 0, 13193, 64350, 11666, - 8679, 41924, 1576, 7735, 92398, 0, 73840, 983092, 11374, 78043, 10889, - 43461, 7757, 42462, 120226, 10029, 66493, 2718, 4168, 73842, 13308, - 120112, 0, 1179, 4440, 0, 77948, 363, 11015, 77947, 77944, 64296, 127090, - 66692, 120826, 0, 66492, 6593, 64625, 41963, 92177, 119329, 0, 10013, - 64434, 92520, 127095, 9492, 11782, 64382, 12833, 77830, 0, 1297, 41630, - 630, 127094, 0, 120774, 92465, 1043, 43652, 66223, 10090, 0, 128664, 313, - 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 55222, 9405, 11268, - 42919, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 127239, 41718, 10707, - 1603, 0, 119003, 0, 631, 77952, 69703, 13161, 65272, 0, 10546, 74210, - 78101, 11600, 77961, 2797, 73821, 42427, 306, 714, 3058, 42381, 77962, - 127080, 12351, 42395, 0, 11607, 0, 42282, 77971, 77967, 9157, 73765, - 66364, 42433, 77964, 7603, 12803, 180, 42141, 0, 120612, 66494, 12674, - 8244, 362, 92439, 0, 8037, 43777, 11535, 0, 74845, 5185, 7165, 5521, - 10334, 2093, 71329, 10302, 128112, 10104, 1027, 5181, 0, 0, 10523, 1446, - 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, 5581, 42898, 3405, - 0, 194644, 5523, 0, 42620, 92447, 983819, 9549, 0, 10549, 55282, 9661, - 43682, 0, 77910, 120026, 78708, 0, 77911, 0, 41991, 983893, 0, 7630, - 9846, 7684, 10350, 0, 1174, 77981, 42733, 77978, 77980, 66485, 77977, - 42277, 77974, 42456, 65667, 127037, 12330, 128272, 0, 42417, 42383, - 66630, 41344, 6293, 0, 66252, 77984, 74443, 0, 10209, 8313, 4195, 74435, - 1316, 66690, 120032, 6332, 64894, 0, 65871, 78060, 1736, 983684, 3901, - 12228, 120151, 65200, 3383, 10446, 78841, 693, 9130, 314, 64149, 42420, - 11949, 983669, 120152, 11026, 128788, 5332, 6940, 64154, 12635, 127007, - 42706, 1751, 273, 8165, 13166, 120763, 78840, 71368, 12824, 0, 4528, - 5320, 6301, 43662, 6133, 9339, 9463, 42346, 10922, 64560, 3757, 0, 0, 0, - 65869, 73760, 2569, 0, 2326, 65740, 2565, 42459, 7596, 7921, 983868, - 74095, 127981, 41848, 2567, 66006, 0, 4044, 92646, 0, 12233, 983871, - 1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 127866, 42295, 0, 0, 71322, - 92518, 9835, 66499, 0, 5417, 12275, 10895, 0, 274, 0, 1858, 0, 0, 55251, - 10118, 3133, 128008, 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, - 0, 92695, 42182, 7581, 19940, 43668, 41667, 128057, 0, 1923, 65583, - 65802, 93970, 64597, 43444, 119184, 92197, 0, 6464, 7036, 2996, 1937, - 983751, 0, 41835, 4047, 41842, 0, 64107, 0, 0, 11017, 120601, 0, 293, - 77966, 92169, 64791, 41827, 42466, 43422, 10579, 8560, 71350, 65413, - 77963, 4803, 12964, 1739, 1941, 3900, 0, 1713, 77969, 0, 73957, 11407, - 42441, 41971, 6297, 120098, 64105, 128080, 42481, 11716, 66473, 7179, - 42289, 0, 64103, 969, 0, 9352, 0, 6165, 64100, 0, 6632, 73861, 42402, - 74327, 7806, 0, 8914, 0, 0, 3183, 1435, 64876, 2969, 6046, 64441, 6208, - 67849, 5746, 73749, 0, 64416, 42422, 0, 983046, 7082, 73775, 338, 5059, - 194719, 0, 42328, 10767, 0, 8115, 0, 74758, 0, 8227, 2073, 1218, 917790, - 0, 65848, 0, 0, 69863, 0, 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 983586, - 42309, 10257, 65191, 10273, 0, 10305, 42461, 0, 42349, 8832, 78051, - 64127, 10644, 42662, 78828, 42278, 74451, 126988, 69874, 7794, 0, 42429, - 6377, 42316, 119026, 3669, 3968, 42468, 71319, 69658, 0, 65402, 119581, - 0, 0, 64933, 0, 41960, 6699, 0, 0, 128354, 6823, 42391, 1588, 65400, - 8409, 78223, 19967, 65398, 787, 71315, 917939, 127744, 6115, 2078, 41654, - 42480, 0, 92650, 41655, 65401, 43975, 0, 0, 0, 644, 65500, 41657, 10778, - 3659, 9533, 184, 1553, 13107, 65484, 69648, 10502, 74457, 0, 0, 41554, 0, - 8220, 917943, 41557, 0, 0, 11070, 119221, 5157, 4020, 73858, 41555, 9514, - 64818, 65103, 64641, 64303, 78131, 7520, 0, 74377, 11029, 66651, 983068, - 0, 118930, 64527, 0, 7877, 73803, 983798, 127348, 120096, 74602, 9955, + 119361, 983564, 43106, 5029, 65309, 1580, 3598, 68424, 41070, 77903, + 7658, 3440, 78215, 1562, 128656, 127175, 119358, 1716, 983679, 10600, + 917867, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, 68137, + 5025, 69892, 983209, 0, 118885, 127956, 65557, 0, 74541, 128924, 11599, + 128209, 11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, + 74195, 11569, 65275, 8906, 127096, 5755, 2636, 71203, 10815, 11619, 2301, + 41540, 7815, 11616, 6979, 12080, 7721, 11604, 7869, 1592, 0, 42152, + 78498, 41048, 917763, 829, 0, 92406, 19950, 66886, 126482, 6616, 0, + 118875, 10953, 391, 0, 69785, 482, 42296, 11588, 0, 43606, 71185, 68397, + 66370, 74282, 42335, 983188, 72421, 983799, 7538, 5315, 120644, 42491, + 92901, 42061, 128002, 4576, 0, 68417, 43809, 4277, 0, 3563, 64472, 42338, + 368, 42058, 3960, 11043, 11337, 78209, 917820, 63989, 3958, 12132, 1849, + 0, 9921, 42451, 4253, 41147, 42064, 11959, 42404, 41160, 0, 3618, 78338, + 194924, 43300, 5156, 92629, 70350, 929, 6827, 42035, 42437, 1555, 0, + 8691, 66435, 2215, 41662, 94010, 0, 0, 128824, 93952, 4578, 64513, 41664, + 983734, 42578, 71049, 41661, 78351, 43267, 9356, 0, 0, 0, 1286, 10166, + 983117, 0, 64707, 128925, 42476, 7730, 11156, 128522, 42483, 0, 128404, + 42324, 42291, 10020, 43359, 0, 6641, 525, 41627, 917923, 8763, 128304, + 41628, 533, 11931, 65225, 8321, 42504, 42581, 0, 6915, 42310, 4377, 8559, + 128321, 74360, 125100, 13193, 64350, 11666, 8679, 41924, 1576, 7735, + 92398, 0, 73840, 983092, 11374, 78043, 10889, 43461, 7757, 42462, 120226, + 10029, 66493, 2718, 4168, 73842, 13308, 120112, 0, 1179, 4440, 0, 77948, + 363, 11015, 66817, 77944, 43857, 127090, 66692, 120826, 0, 66492, 6593, + 64625, 41963, 92177, 119329, 0, 10013, 64434, 92520, 127095, 9492, 11782, + 64382, 12833, 77830, 0, 1297, 41630, 630, 127094, 0, 120774, 70165, 1043, + 43652, 66223, 10090, 0, 124945, 313, 129033, 41881, 0, 42311, 7445, + 119244, 5750, 10759, 9419, 55222, 9405, 11268, 42919, 9398, 8526, 9399, + 9422, 0, 66495, 69990, 0, 92990, 41718, 10707, 1603, 983703, 119003, 0, + 631, 77952, 69703, 13161, 65272, 71067, 10546, 74210, 78101, 11600, + 77961, 2797, 73821, 42427, 306, 714, 3058, 42381, 77962, 127080, 12351, + 42395, 0, 11607, 127528, 11198, 66821, 77967, 9157, 73765, 66364, 42433, + 77964, 7603, 12803, 180, 42141, 0, 120612, 66494, 12674, 8244, 362, + 92439, 125096, 8037, 43777, 11535, 0, 74845, 5185, 7165, 5521, 10334, + 2093, 71329, 10302, 125131, 10104, 1027, 5181, 983146, 0, 10523, 1446, + 42320, 6845, 991, 5189, 42472, 41647, 120105, 1722, 5581, 42898, 3405, 0, + 194644, 5523, 0, 42620, 92447, 124988, 9549, 0, 10549, 55282, 9661, + 43682, 0, 77910, 78068, 68247, 0, 71184, 983070, 41991, 983893, 0, 7630, + 9846, 7684, 10350, 128453, 1174, 77981, 42733, 77978, 77980, 66485, + 77977, 42277, 77974, 42456, 65667, 74438, 12330, 128272, 0, 42417, 42383, + 66630, 41344, 6293, 0, 66252, 77984, 74443, 127894, 10209, 8313, 4195, + 74435, 1316, 66690, 120032, 6332, 64894, 983156, 65871, 78060, 1736, + 983684, 3901, 12228, 120151, 65200, 3383, 10446, 78241, 693, 9130, 314, + 64149, 42420, 11949, 983669, 120152, 11026, 120516, 5332, 6940, 64154, + 12635, 124980, 42706, 1751, 273, 8165, 13166, 120763, 78840, 71368, + 12824, 0, 4528, 5320, 6301, 43662, 6133, 9339, 9463, 42346, 10922, 64560, + 3757, 0, 0, 74302, 65869, 73760, 2569, 0, 2326, 65740, 2565, 42459, 7596, + 7921, 983868, 73862, 127981, 41848, 2567, 66006, 92622, 4044, 92646, 0, + 12233, 983871, 1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 127866, + 42295, 0, 125114, 71322, 92518, 2222, 66499, 0, 5417, 12275, 10895, 0, + 274, 0, 1858, 0, 0, 55251, 10118, 3133, 128008, 71857, 0, 9610, 8068, + 8197, 0, 699, 0, 41665, 5868, 128710, 92695, 42182, 7581, 19940, 43668, + 41667, 128057, 0, 1923, 65583, 65802, 93970, 64597, 43444, 119184, 71855, + 0, 6464, 7036, 2996, 1937, 983751, 68481, 41835, 4047, 41842, 0, 64107, + 77965, 983746, 11017, 120601, 0, 293, 77966, 92169, 64791, 41827, 42466, + 43422, 10579, 8560, 71350, 65413, 77963, 4803, 12964, 1739, 1941, 3900, + 128967, 1713, 77969, 0, 73957, 11407, 42441, 41971, 6297, 120098, 64105, + 128080, 42481, 11716, 66473, 7179, 42289, 125095, 64103, 969, 0, 9352, + 983149, 6165, 64100, 0, 6632, 73861, 42402, 74327, 7806, 0, 8914, 66908, + 124954, 3183, 1435, 64876, 2969, 6046, 64441, 6208, 67849, 5746, 66408, + 0, 64416, 42422, 0, 983046, 7082, 73775, 338, 5059, 194719, 129145, + 42328, 10767, 0, 8115, 0, 74758, 0, 8227, 2073, 1218, 917790, 983230, + 65848, 92884, 0, 69863, 0, 126987, 4486, 128082, 0, 0, 10925, 0, 119868, + 0, 124952, 42309, 10257, 65191, 10273, 7668, 10305, 42461, 0, 42349, + 8832, 78051, 64127, 10644, 42662, 78828, 42278, 74451, 126988, 69874, + 7794, 119867, 42429, 6377, 42316, 119026, 3669, 3968, 42468, 71319, + 69658, 0, 65402, 119581, 0, 128747, 64933, 194815, 41960, 6699, 42903, + 128755, 125013, 6823, 42391, 1588, 43502, 8409, 78223, 19967, 65398, 787, + 71315, 917939, 127744, 6115, 2078, 41654, 42480, 0, 92650, 41655, 65401, + 43975, 72427, 0, 113816, 644, 65500, 41657, 10778, 3659, 9533, 184, 1553, + 13107, 65484, 69648, 10502, 66296, 0, 0, 41554, 0, 8220, 129031, 41557, + 0, 128938, 11070, 119221, 5157, 4020, 73858, 41555, 9514, 64818, 65103, + 64641, 64303, 78131, 7520, 73888, 74377, 11029, 66651, 983068, 128492, + 118930, 64527, 0, 7877, 12723, 983798, 127348, 120096, 74602, 9955, 119557, 4055, 42817, 0, 65212, 11715, 12190, 12319, 78630, 0, 78631, - 9502, 65427, 0, 65424, 12607, 0, 9734, 65425, 0, 0, 127357, 78835, 92410, - 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, 10477, 0, - 8636, 983927, 8315, 65444, 983793, 0, 74595, 6152, 0, 0, 6629, 127108, - 120171, 0, 74589, 43993, 0, 69790, 64435, 0, 43690, 11046, 11490, 42730, - 4485, 127107, 0, 64926, 0, 0, 0, 5869, 12437, 42728, 0, 7040, 3588, 0, - 12825, 0, 0, 12725, 0, 127106, 78642, 223, 0, 69675, 120166, 42444, 0, - 64499, 65245, 0, 1171, 0, 69717, 0, 1805, 8772, 43820, 0, 9930, 65247, - 78619, 120111, 2338, 0, 118853, 0, 42676, 0, 64800, 65236, 67644, 68126, - 1213, 0, 64075, 797, 64074, 8734, 4212, 127369, 64387, 4115, 0, 5005, - 64070, 64073, 10679, 0, 77954, 9402, 64276, 426, 0, 0, 8251, 10136, - 65436, 0, 2120, 43302, 1224, 0, 65576, 74192, 10701, 1764, 3101, 127815, - 12858, 120159, 0, 11373, 6378, 127859, 120103, 8663, 9312, 41644, 4539, - 2129, 0, 9222, 983738, 0, 4259, 9092, 74567, 41961, 0, 12724, 66357, - 42331, 64935, 0, 0, 1293, 7947, 2132, 983767, 74593, 120308, 2454, 42717, - 3613, 128837, 0, 0, 65888, 8816, 10978, 10840, 0, 10668, 0, 43087, 12595, - 120304, 983114, 8822, 0, 1157, 64903, 8638, 0, 0, 0, 0, 69848, 8235, - 120316, 4405, 10086, 120247, 0, 69216, 0, 65430, 71321, 6079, 6817, - 10764, 127910, 64291, 128051, 998, 120312, 11062, 1317, 64327, 1558, 0, - 1991, 7882, 42254, 0, 41700, 530, 0, 10428, 119335, 12002, 119336, 5742, - 43076, 4692, 64630, 41823, 4007, 5004, 119334, 7896, 751, 6595, 6596, - 120325, 66373, 0, 0, 64908, 92691, 6311, 0, 12004, 119192, 12049, 43108, - 120326, 0, 41705, 92188, 6598, 0, 6599, 120334, 0, 42148, 118825, 66027, - 0, 6597, 9412, 8340, 11824, 64745, 2281, 69904, 0, 1988, 5407, 67865, - 2430, 41678, 0, 120243, 2336, 983903, 0, 78871, 120442, 983769, 1921, - 10947, 19927, 0, 65406, 0, 19913, 4284, 13217, 0, 43789, 12841, 9229, - 10956, 42285, 41674, 19964, 41679, 65084, 3521, 0, 5774, 8325, 0, 65403, - 983089, 1854, 10794, 0, 67660, 69846, 0, 78359, 5280, 0, 4344, 12905, - 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, 12934, - 41682, 65432, 41693, 0, 6071, 65434, 127467, 4804, 4053, 0, 127469, - 194653, 41696, 467, 69823, 127463, 69797, 194652, 127473, 8421, 127472, - 69682, 43705, 502, 0, 65431, 119056, 69954, 12043, 1303, 316, 7364, 2029, - 2136, 119246, 11533, 64365, 43480, 92639, 4860, 126648, 127877, 42488, 0, - 9583, 128849, 5546, 8019, 73856, 0, 0, 0, 5544, 2355, 12150, 65725, 5543, - 77989, 63751, 12137, 5548, 77985, 0, 65727, 68388, 65726, 6077, 128352, - 65452, 0, 11301, 78013, 78008, 78010, 9874, 78007, 0, 1319, 3050, 65410, - 0, 0, 78016, 78017, 42830, 43996, 66716, 128137, 4691, 92242, 9345, 621, - 92709, 128222, 0, 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, - 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, - 92363, 9996, 8508, 0, 7012, 8195, 127834, 9566, 0, 3722, 0, 41707, 8493, - 545, 9575, 41379, 10050, 12718, 69854, 8859, 6820, 74345, 65110, 120740, - 0, 0, 9119, 2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 78021, - 78022, 410, 78020, 1802, 78018, 74107, 0, 41659, 41671, 1827, 0, 64396, - 10126, 12116, 41673, 120370, 11422, 78141, 120373, 3860, 120367, 68412, - 41345, 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, 2104, - 64858, 361, 120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 917919, - 4569, 74130, 0, 43487, 194630, 611, 74129, 64871, 118891, 65629, 0, - 194858, 0, 0, 127545, 120543, 0, 0, 6291, 0, 78639, 41669, 7094, 917921, - 0, 983581, 74054, 127754, 195029, 0, 839, 983319, 7695, 8769, 65246, - 4829, 194663, 4859, 64467, 0, 983963, 118998, 7206, 0, 6647, 43986, 0, - 69766, 0, 64764, 4210, 983863, 127936, 804, 0, 0, 12298, 0, 66653, 0, - 64924, 10091, 73931, 9468, 74245, 0, 0, 74246, 92503, 12839, 64669, - 92202, 0, 1279, 1425, 6224, 119229, 11049, 0, 92697, 43239, 8482, 92440, - 0, 5032, 69677, 11940, 67888, 664, 120437, 5034, 0, 0, 127525, 42702, - 73888, 983149, 13294, 67873, 64869, 6032, 0, 9115, 7430, 120377, 0, - 120819, 68387, 120168, 73913, 120170, 41161, 5518, 4174, 10993, 41162, - 120160, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, 118867, - 128800, 524, 0, 74029, 788, 74027, 0, 194638, 0, 1663, 10419, 74025, - 42636, 0, 69725, 0, 120656, 0, 67876, 0, 0, 0, 67897, 74039, 0, 0, 11395, - 0, 119107, 43612, 64344, 0, 0, 10855, 5445, 9355, 0, 65198, 7391, 8989, - 221, 65686, 0, 0, 8010, 7191, 4962, 69772, 8855, 0, 0, 64469, 120426, - 10555, 0, 43333, 92299, 0, 120427, 10451, 0, 67653, 7245, 12443, 74405, - 9947, 120149, 78317, 3873, 8367, 0, 120146, 43433, 43649, 11987, 0, 0, - 11010, 12723, 74059, 74062, 6217, 5896, 0, 7682, 74049, 1462, 10235, 0, - 0, 0, 0, 0, 0, 42595, 0, 74402, 118860, 0, 120419, 92497, 74052, 0, - 92378, 120549, 119082, 64295, 120418, 0, 64765, 73923, 120417, 120662, - 69920, 194702, 6216, 0, 10755, 9455, 0, 8124, 127042, 9470, 6944, 127540, - 0, 69680, 2828, 0, 531, 42638, 0, 0, 0, 43428, 8204, 3614, 2827, 9696, 0, - 0, 8728, 4354, 10904, 78562, 19936, 7833, 120691, 0, 42599, 42597, 42709, - 120409, 127044, 0, 8537, 0, 0, 9354, 983164, 128833, 41199, 10121, 2028, - 0, 983194, 69715, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, 12580, - 92205, 120777, 120502, 41155, 0, 74071, 0, 983457, 12713, 0, 0, 0, 78772, - 0, 1734, 0, 0, 127040, 64594, 2456, 231, 0, 74167, 542, 0, 118786, 0, - 983979, 1230, 0, 0, 3597, 4446, 10584, 74235, 92215, 4037, 127938, 8352, - 0, 5687, 0, 64515, 0, 194801, 55265, 67846, 78434, 9704, 0, 0, 70080, - 71338, 0, 8660, 126495, 0, 0, 78773, 74482, 4483, 1709, 69721, 9909, - 6080, 0, 120358, 1746, 1315, 8667, 0, 0, 13140, 65899, 10604, 0, 4480, - 11266, 128152, 1226, 6930, 67979, 983690, 6360, 10897, 41230, 605, 0, - 74785, 69875, 0, 0, 41500, 0, 311, 11453, 6221, 10608, 64943, 74280, - 10877, 118868, 64885, 74272, 0, 0, 128559, 120736, 74312, 345, 0, 74456, - 64606, 9917, 0, 92231, 5037, 0, 1776, 8422, 0, 118814, 41508, 41201, 323, - 43328, 0, 42698, 1295, 194853, 4625, 0, 4630, 13117, 0, 128772, 65123, + 9502, 65427, 125048, 65424, 12607, 0, 9734, 65425, 0, 983808, 127357, + 78835, 78836, 10112, 10827, 0, 9866, 74527, 66675, 118867, 8625, 64346, + 11290, 10477, 67738, 8636, 983927, 8315, 65444, 983793, 195011, 74595, + 6152, 0, 73947, 6629, 125056, 120171, 0, 74589, 43993, 128346, 69790, + 64435, 64955, 43690, 11046, 11490, 42730, 4485, 127107, 0, 64926, 0, 0, + 43830, 5869, 12437, 42728, 0, 7040, 3588, 0, 12825, 0, 0, 12725, 74092, + 127106, 78634, 223, 78635, 69675, 120166, 42444, 128449, 64499, 65245, + 129104, 1171, 128802, 69717, 120113, 1805, 8772, 43820, 0, 9930, 65247, + 78619, 120111, 2338, 0, 118853, 0, 42676, 0, 64800, 13092, 11185, 68126, + 1213, 128419, 64075, 797, 64074, 8734, 4212, 127369, 64387, 4115, 0, + 5005, 64070, 64073, 10679, 0, 77954, 9402, 64276, 426, 0, 0, 8251, 10136, + 65436, 0, 2120, 43302, 1224, 0, 65576, 70795, 10701, 1764, 3101, 127815, + 12858, 120159, 0, 11373, 6378, 71093, 120103, 8663, 9312, 41644, 4539, + 2129, 70785, 9222, 983738, 118907, 4259, 9092, 74567, 41961, 0, 12724, + 66357, 42331, 64935, 0, 0, 1293, 7947, 2132, 983767, 71858, 72440, 2454, + 42717, 3613, 128837, 0, 0, 65888, 8816, 10978, 10840, 0, 10668, 113723, + 43087, 12595, 120304, 983114, 8822, 0, 1157, 64903, 8638, 127265, 917886, + 0, 0, 69848, 8235, 120316, 4405, 10086, 120247, 11128, 69216, 0, 65430, + 71321, 6079, 6817, 10764, 120314, 64291, 120315, 998, 120312, 11062, + 1317, 64327, 1558, 983934, 1991, 7882, 42254, 128954, 41700, 530, 0, + 10428, 119335, 12002, 119336, 5742, 43076, 4692, 64630, 41823, 4007, + 5004, 74033, 7896, 751, 6595, 6596, 120325, 66373, 983247, 0, 64908, + 92691, 6311, 93019, 12004, 119192, 12049, 43108, 120326, 71083, 41705, + 92188, 6598, 0, 6599, 66822, 93031, 42148, 118825, 66027, 0, 6597, 9412, + 8340, 11824, 64745, 2281, 69904, 128495, 1988, 5407, 67865, 2430, 41678, + 93059, 120243, 2336, 983903, 0, 67169, 120442, 127092, 1921, 10947, + 19927, 70390, 65406, 0, 19913, 4284, 13217, 0, 43789, 12841, 9229, 10956, + 42285, 41674, 19964, 41679, 65084, 3521, 124957, 5774, 8325, 69864, + 65403, 983089, 1854, 10794, 93054, 67660, 69846, 0, 78359, 5280, 0, 4344, + 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, + 12934, 41682, 65432, 41693, 0, 6071, 65434, 127467, 4804, 4053, 0, + 127469, 194653, 41696, 467, 69823, 127463, 69797, 194652, 127473, 8421, + 127472, 69682, 43705, 502, 0, 65431, 119056, 69954, 12043, 1303, 316, + 7364, 2029, 2136, 119246, 11533, 64365, 43480, 92639, 4860, 126648, + 127877, 42488, 70339, 9583, 128849, 5546, 8019, 73856, 0, 0, 0, 5544, + 2355, 12150, 65725, 5543, 77989, 63751, 12137, 5548, 77985, 0, 65727, + 68388, 65726, 6077, 128352, 65452, 0, 11301, 11214, 65952, 78010, 9874, + 78007, 983115, 1319, 3050, 65410, 67399, 0, 78016, 78017, 42830, 43996, + 66716, 128137, 4691, 92242, 9345, 621, 92709, 128222, 0, 65411, 0, 41182, + 73881, 65408, 73899, 78024, 9474, 10545, 119118, 10887, 3786, 65409, + 8894, 43179, 71042, 7923, 3716, 92363, 9996, 8508, 127794, 7012, 8195, + 127834, 9566, 0, 3722, 0, 41707, 8493, 545, 9575, 41379, 10050, 12718, + 69854, 8859, 6820, 74345, 65110, 120740, 128978, 0, 9119, 2787, 7920, + 118823, 4021, 2012, 7985, 0, 119663, 917792, 0, 78021, 78022, 410, 78020, + 1802, 78018, 74107, 0, 41659, 41671, 1827, 0, 64396, 10126, 12116, 41673, + 120370, 11422, 71846, 120373, 3860, 120367, 68412, 41345, 120362, 120363, + 11748, 42158, 7941, 11076, 8749, 120361, 2104, 64858, 361, 120357, 845, + 0, 41560, 11970, 4562, 917920, 2926, 68495, 4569, 74130, 128659, 43487, + 194630, 611, 74129, 64871, 118891, 65629, 0, 194858, 74854, 0, 70466, + 67392, 66385, 0, 6291, 0, 68487, 41669, 7094, 917921, 0, 983581, 74054, + 127754, 128917, 0, 839, 983319, 7695, 8769, 65246, 4829, 67756, 4859, + 64467, 0, 983963, 118998, 7206, 119636, 6647, 43986, 983796, 69766, + 194664, 64764, 4210, 983254, 127936, 804, 194651, 0, 12298, 70344, 66653, + 0, 64924, 10091, 67200, 9468, 67206, 67205, 67204, 67203, 92503, 12839, + 64669, 92202, 71851, 1279, 1425, 6224, 119229, 11049, 127123, 92697, + 42649, 8482, 92440, 0, 5032, 67209, 11940, 67207, 664, 120437, 5034, 0, + 70200, 127525, 42702, 70194, 93061, 13294, 67873, 64869, 6032, 67218, + 9115, 7430, 120377, 70191, 120819, 68387, 120168, 73913, 120170, 41161, + 5518, 4174, 10993, 41162, 120160, 64528, 1169, 434, 41437, 1905, 6034, + 41164, 64744, 9528, 67741, 128800, 524, 0, 74029, 788, 74027, 0, 71881, + 0, 1663, 10419, 42901, 42636, 67211, 67210, 0, 120656, 67215, 67214, + 67213, 67212, 0, 67897, 74039, 0, 0, 11395, 0, 119107, 43612, 64344, 0, + 0, 10855, 5445, 9355, 67221, 65198, 7391, 8989, 221, 65686, 0, 0, 8010, + 7191, 4962, 69772, 8855, 74612, 70820, 64469, 120426, 10555, 67227, + 43333, 67225, 128483, 120427, 10451, 67229, 67653, 7245, 12443, 74405, + 9947, 120149, 78317, 3873, 8367, 77842, 120146, 43433, 43649, 11987, 0, + 0, 11010, 11164, 74059, 74062, 6217, 5896, 43846, 7682, 74049, 1462, + 10235, 0, 0, 0, 43441, 127924, 127777, 42595, 0, 74402, 118860, 78661, + 120419, 92497, 66287, 120420, 92378, 120549, 119082, 64295, 120418, 0, + 64765, 73923, 120417, 120662, 69920, 194702, 6216, 67230, 10755, 9455, + 11155, 8124, 127042, 9470, 6944, 127540, 0, 69680, 2828, 0, 531, 42638, + 0, 0, 0, 43428, 8204, 3614, 2827, 9696, 120365, 0, 8728, 4354, 10904, + 78562, 19936, 7833, 120691, 0, 42599, 42597, 42709, 120409, 125012, 0, + 8537, 127306, 0, 9354, 983164, 127959, 41199, 10121, 2028, 0, 120253, + 69715, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, 11948, 92205, + 120777, 120502, 41155, 68306, 74071, 0, 983457, 12713, 127519, 70402, 0, + 78772, 113770, 1734, 0, 78141, 127040, 64594, 2456, 231, 68227, 74167, + 542, 0, 118786, 983859, 194797, 1230, 983953, 126555, 3597, 4446, 10584, + 74235, 92215, 4037, 67737, 8352, 0, 5687, 0, 64515, 0, 194801, 55265, + 67846, 78434, 9704, 0, 0, 70080, 71338, 0, 8660, 126478, 0, 0, 78773, + 74482, 4483, 1709, 69721, 9909, 6080, 194851, 120358, 1746, 1315, 8667, + 983101, 0, 13140, 65899, 10604, 0, 4480, 11266, 128152, 1226, 6930, + 67979, 195019, 6360, 10897, 41230, 605, 68302, 74785, 69875, 0, 917986, + 41500, 0, 311, 11453, 6221, 10608, 64943, 67682, 10877, 118868, 64885, + 74272, 0, 194672, 128559, 120736, 74312, 345, 124933, 74456, 64606, 9917, + 0, 74855, 5037, 0, 1776, 8422, 128935, 118814, 41508, 41201, 323, 43328, + 0, 42698, 1295, 194853, 4625, 77855, 4630, 13117, 0, 128772, 65123, 11293, 2668, 11288, 0, 42640, 65666, 2519, 92369, 65420, 92479, 0, 4252, - 5049, 42659, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, - 0, 66702, 0, 12670, 1013, 0, 64919, 705, 0, 65422, 127803, 1183, 126519, - 7017, 42852, 0, 8157, 9736, 64503, 65418, 0, 983878, 74035, 0, 11913, - 73874, 6696, 0, 8920, 119298, 0, 7962, 12211, 9837, 2051, 66227, 0, 4184, - 0, 0, 10177, 73777, 1857, 194657, 4626, 8464, 8472, 0, 4629, 8499, 78321, - 78322, 4624, 7818, 119173, 0, 0, 7805, 0, 94007, 6935, 92292, 78325, - 78326, 78323, 43327, 43989, 119046, 8492, 8250, 8459, 0, 8497, 8496, 0, - 0, 78336, 78339, 9543, 78335, 78332, 77832, 65849, 77831, 983961, 0, - 12451, 0, 8684, 0, 6102, 0, 5298, 0, 5294, 0, 0, 983459, 195062, 9949, - 119826, 43617, 119215, 0, 12073, 0, 0, 77863, 13108, 120617, 11439, - 41468, 983757, 0, 5292, 55272, 983883, 1939, 5302, 3970, 917879, 12455, - 1793, 0, 0, 0, 6643, 92477, 65263, 0, 78330, 41293, 78328, 65923, 0, - 13219, 9569, 0, 74383, 0, 74197, 0, 5500, 8813, 0, 0, 74566, 5322, 0, - 78340, 43631, 5324, 66443, 3784, 41614, 65269, 6230, 78349, 78345, 43324, - 3360, 78344, 11523, 0, 92488, 9926, 7197, 0, 68429, 42894, 41821, 1249, + 5049, 42659, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 128496, 649, + 65421, 0, 66702, 0, 12670, 1013, 0, 64919, 705, 0, 65422, 127803, 1183, + 126519, 7017, 42852, 0, 8157, 9736, 64503, 65418, 0, 983878, 74035, 0, + 11913, 73874, 6696, 128775, 8920, 119298, 128426, 7962, 12211, 9837, + 2051, 66227, 0, 4184, 119825, 128598, 10177, 73777, 1857, 194657, 4626, + 8464, 8472, 0, 4629, 8499, 74627, 78322, 4624, 7818, 119173, 128108, 0, + 7805, 128754, 94007, 6935, 92292, 78325, 78326, 78323, 43327, 43989, + 119046, 8492, 8250, 8459, 0, 8497, 8496, 0, 74582, 78336, 78339, 9543, + 67860, 78332, 77832, 65849, 77831, 983961, 0, 12451, 0, 8684, 128301, + 6102, 0, 5298, 0, 5294, 0, 0, 128746, 195062, 9949, 119826, 43617, + 119215, 0, 12073, 0, 0, 77863, 13108, 120617, 11439, 41468, 119076, 0, + 5292, 55272, 983883, 1939, 5302, 3970, 917879, 12455, 1793, 124982, 0, 0, + 6643, 92477, 65263, 0, 78330, 41293, 78328, 65923, 0, 13219, 9569, 0, + 74383, 0, 74197, 129089, 5500, 8813, 0, 128612, 74566, 5322, 0, 78340, + 43631, 5324, 66443, 3784, 41614, 65269, 6230, 78349, 78345, 13282, 3360, + 78344, 11523, 0, 92488, 9926, 7197, 128248, 68429, 42894, 41821, 1249, 78360, 78361, 78356, 78358, 78353, 64899, 64763, 41149, 41807, 43162, - 41815, 41150, 0, 10571, 10096, 0, 0, 78074, 6947, 41152, 887, 9249, 6565, - 78510, 41990, 78509, 41811, 74466, 93966, 6670, 77882, 0, 0, 43092, - 43325, 0, 10168, 0, 9781, 128655, 9190, 0, 9666, 8269, 65944, 74005, - 13019, 11670, 69860, 315, 12813, 983458, 78432, 78256, 78351, 78352, 0, - 983657, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 92220, 67847, 0, 92355, 0, - 78365, 8787, 120379, 194616, 41618, 194615, 78261, 194614, 0, 64652, 0, - 194612, 0, 78366, 42088, 0, 195061, 7176, 43756, 10137, 6121, 10995, - 78259, 74534, 8119, 64874, 917816, 127199, 194939, 0, 74525, 0, 0, 12930, - 1394, 74514, 0, 74515, 0, 118804, 2998, 9527, 120659, 65190, 12977, - 42090, 119165, 0, 119100, 41236, 92235, 42005, 42003, 41237, 5848, 0, 0, - 3670, 128657, 194600, 0, 0, 7890, 0, 11298, 43315, 0, 6229, 1593, 0, 0, - 619, 4635, 65080, 0, 128002, 4120, 65337, 65336, 0, 11808, 119214, 74115, + 41815, 41150, 128911, 10571, 10096, 67161, 67160, 67159, 6947, 41152, + 887, 9249, 6565, 78510, 41990, 78509, 41811, 67157, 93966, 6670, 67175, + 67174, 0, 43092, 43325, 67178, 10168, 67176, 9781, 68248, 9190, 128497, + 9666, 8269, 65944, 74005, 13019, 11670, 69860, 315, 12813, 983458, 72409, + 78256, 72408, 78352, 0, 983657, 0, 0, 1378, 9509, 0, 92996, 72407, 3066, + 92220, 67847, 72406, 92355, 0, 78365, 8787, 67189, 194616, 41618, 194615, + 78261, 127384, 0, 64652, 0, 194612, 0, 78366, 42088, 71040, 195061, 7176, + 43756, 10137, 6121, 10995, 78259, 71050, 8119, 64874, 71052, 78174, + 194939, 128630, 74525, 0, 0, 12930, 1394, 74514, 128413, 74515, 0, 67184, + 2998, 9527, 67181, 65190, 12977, 42090, 67185, 0, 119100, 41236, 92235, + 42005, 42003, 41237, 5848, 67193, 67192, 3670, 67190, 67197, 67196, + 67195, 7890, 128070, 11298, 43315, 983313, 6229, 1593, 0, 125120, 619, + 4635, 65080, 127779, 12194, 4120, 65337, 65336, 0, 11808, 67199, 67198, 9366, 42790, 42006, 119115, 65327, 65326, 65325, 10757, 1507, 42216, 65321, 65320, 65335, 65334, 65333, 65332, 65331, 42059, 65329, 42689, 92427, 9128, 94045, 42073, 6785, 64590, 983830, 4371, 7196, 65318, 2035, - 65316, 4106, 65314, 65313, 42074, 127847, 41228, 0, 65609, 41241, 7903, - 41239, 43533, 78459, 7189, 0, 0, 0, 12357, 42802, 78450, 8487, 9131, 0, - 4615, 12695, 127752, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, - 69762, 66455, 64738, 3219, 68654, 983787, 0, 1037, 0, 2025, 128263, - 13098, 78442, 10637, 4568, 549, 1570, 0, 2835, 0, 10624, 43623, 11072, - 127191, 0, 0, 12606, 78433, 2825, 0, 10825, 8079, 2821, 41046, 92327, - 7365, 983753, 120593, 13071, 0, 452, 41049, 42840, 6346, 2831, 5461, - 74596, 11465, 5212, 0, 64703, 119191, 42308, 7181, 0, 41332, 0, 12333, 0, - 1668, 0, 0, 0, 1187, 983385, 42628, 78575, 0, 128777, 0, 3240, 128518, - 12194, 0, 11591, 41065, 5323, 8166, 0, 0, 0, 74535, 1623, 65297, 128856, - 571, 0, 4918, 0, 5288, 127295, 8916, 65048, 1909, 8864, 0, 0, 10736, - 92508, 11571, 7615, 127300, 92296, 4237, 92576, 1035, 65815, 0, 7881, - 701, 65936, 3489, 0, 0, 120751, 11403, 0, 0, 127146, 3796, 6800, 0, 3994, - 11421, 0, 195076, 0, 983922, 0, 0, 64857, 128105, 2855, 127828, 66308, - 41621, 68214, 127283, 127817, 10654, 0, 119226, 12164, 3246, 7906, 43972, - 65847, 7182, 0, 13024, 194822, 74270, 128289, 0, 0, 0, 1496, 747, 0, 942, - 2378, 43136, 127905, 8466, 983575, 9320, 8001, 1232, 8139, 11617, 0, 0, - 11409, 68373, 6382, 0, 64634, 128279, 0, 11612, 0, 67600, 2374, 94066, - 8475, 11609, 66313, 0, 0, 5286, 119297, 0, 0, 64925, 120283, 194584, - 118982, 194583, 7705, 11942, 11305, 194581, 3309, 0, 0, 0, 0, 6802, 0, - 41653, 1280, 1241, 7168, 12096, 0, 66615, 42565, 41651, 0, 0, 0, 41650, - 66507, 66470, 0, 12914, 41491, 66010, 119552, 6078, 9954, 0, 1475, - 119247, 9938, 6084, 917546, 41064, 41062, 0, 0, 3256, 10189, 42076, - 43252, 78823, 917906, 8727, 0, 65875, 0, 0, 127762, 10562, 74215, 43065, - 0, 0, 3248, 74297, 3261, 9015, 71351, 0, 3635, 64337, 983281, 0, 0, 7195, - 0, 2007, 64431, 0, 0, 0, 0, 635, 0, 0, 65613, 77909, 92420, 73997, 0, 0, - 119218, 7984, 8600, 74434, 127770, 4176, 70050, 2034, 92551, 120805, - 65891, 127038, 0, 318, 2038, 128860, 78596, 0, 3649, 13149, 42145, 42798, - 3634, 120291, 118927, 67677, 120124, 7866, 0, 11402, 42146, 94032, 74238, - 42664, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, 68386, 128185, - 1159, 0, 69729, 0, 0, 7178, 194632, 0, 41680, 0, 128203, 11534, 1514, - 11668, 67891, 9313, 7015, 0, 67877, 194567, 12989, 66474, 9368, 12848, - 1624, 43270, 0, 74278, 10818, 126644, 9953, 0, 78421, 1194, 3242, 9761, - 9555, 8598, 120299, 6169, 12871, 1551, 2798, 65176, 4958, 42752, 119025, - 0, 67875, 120301, 3495, 66648, 194768, 0, 68364, 983224, 4891, 0, 10641, - 0, 73746, 0, 68352, 0, 73787, 194829, 194633, 7199, 64955, 0, 0, 0, 0, 0, - 42685, 42679, 193, 0, 0, 0, 42667, 0, 5271, 92318, 92517, 118882, 1362, - 13297, 0, 128094, 0, 983331, 73789, 0, 6658, 4426, 0, 92628, 983842, - 92319, 7276, 42163, 5220, 0, 0, 983330, 2416, 3310, 42703, 0, 379, 0, - 43755, 0, 0, 3223, 65492, 1284, 194771, 4549, 0, 0, 983154, 127763, - 10807, 9558, 194613, 0, 8515, 8688, 12866, 65308, 3294, 983332, 8529, - 128101, 43385, 7564, 0, 43329, 0, 92458, 73757, 66456, 42359, 0, 2031, 0, - 7202, 0, 12676, 42729, 92198, 3215, 0, 7710, 1610, 73801, 0, 0, 65682, 0, - 120537, 65924, 9974, 228, 66354, 1501, 0, 64395, 5179, 7200, 6225, 0, - 65794, 1725, 65533, 8196, 7476, 74399, 0, 0, 7152, 8502, 5762, 1967, - 7483, 0, 0, 8104, 0, 7474, 77979, 0, 126507, 10414, 13001, 8141, 0, - 42537, 1557, 43594, 128642, 6330, 6805, 8631, 2545, 70052, 127166, 0, - 74190, 0, 0, 983786, 42762, 0, 42914, 1650, 262, 1637, 0, 7901, 3238, - 128173, 41861, 0, 128585, 65158, 10860, 94059, 43658, 7527, 0, 43319, - 6419, 0, 45, 0, 64588, 93989, 0, 119810, 7194, 5291, 0, 43666, 13129, 0, - 9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912, 2620, 0, 0, 0, 983875, - 179, 65896, 0, 64756, 2853, 78443, 118813, 983890, 118996, 119009, 2850, - 8084, 983085, 73850, 2801, 92284, 42069, 119839, 74754, 119841, 42072, - 119843, 119842, 10398, 983056, 0, 8377, 127116, 8245, 68401, 3158, 92396, - 3983, 43656, 923, 119857, 119856, 292, 13002, 119845, 119844, 3221, 1763, - 92463, 4612, 119851, 119850, 7253, 127110, 68391, 0, 10782, 3637, 12996, - 43542, 0, 64578, 983675, 3228, 69636, 8783, 0, 119614, 2731, 0, 0, 78585, - 4102, 7696, 73878, 0, 0, 78586, 43316, 4177, 11283, 9089, 0, 73996, - 983173, 64500, 43674, 0, 64947, 1856, 0, 0, 6379, 0, 0, 0, 3208, 12975, - 74775, 127380, 983931, 92389, 74072, 55269, 0, 0, 983683, 2033, 78577, - 78576, 195026, 55254, 7740, 0, 0, 0, 73964, 0, 93988, 67612, 65674, - 128244, 94110, 41689, 0, 74006, 64909, 6646, 11790, 74019, 0, 128066, - 128031, 8561, 4573, 0, 5326, 0, 120605, 7230, 8257, 0, 8778, 41688, 0, - 65776, 2071, 8314, 6459, 0, 7628, 65092, 73903, 66721, 11342, 128561, 0, - 0, 128226, 127001, 0, 11810, 13164, 10723, 967, 983951, 126469, 11946, 0, - 3257, 0, 12307, 1845, 983157, 43526, 0, 0, 1886, 42342, 10089, 870, 7648, - 3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879, 43692, 4563, 0, 0, - 7591, 65887, 867, 9520, 872, 126607, 868, 873, 7642, 0, 869, 874, 7644, - 120674, 875, 790, 128303, 0, 0, 0, 66182, 983258, 5429, 195055, 66180, - 126480, 66181, 68452, 983289, 983248, 42067, 0, 5433, 10657, 7911, - 194622, 1547, 66176, 42012, 120576, 5425, 4977, 9999, 5317, 5423, 4611, - 0, 67637, 0, 9679, 74122, 0, 0, 0, 66194, 4418, 66184, 4628, 4245, - 119648, 0, 0, 1851, 0, 127189, 11908, 0, 9360, 118897, 983202, 42776, - 66187, 12837, 8829, 7711, 92714, 0, 92321, 43318, 0, 8809, 69881, 0, - 983142, 120604, 983052, 983882, 0, 983270, 0, 0, 7427, 9958, 4588, 43680, - 0, 74484, 194968, 2433, 0, 119622, 3352, 74363, 983885, 0, 793, 74404, 0, - 305, 567, 67662, 842, 128519, 8208, 0, 41695, 1647, 118877, 0, 7837, - 917625, 818, 5337, 194628, 917621, 41376, 119978, 126576, 120594, 74086, - 917615, 917614, 917613, 10973, 66359, 1372, 127172, 917608, 4969, 1254, - 917605, 917604, 93967, 917602, 65228, 78221, 126612, 0, 2840, 0, 119982, - 983939, 0, 3245, 9068, 68194, 64725, 0, 0, 12991, 0, 2651, 68016, 983265, - 917611, 127026, 128883, 0, 0, 43648, 120812, 0, 43322, 92662, 0, 0, - 64372, 92698, 3226, 655, 752, 7457, 7456, 7452, 3285, 128779, 127821, - 119988, 65610, 2391, 0, 92248, 671, 250, 7434, 618, 668, 610, 42800, - 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 0, 128266, - 64749, 67850, 2107, 0, 0, 4605, 128174, 983192, 43372, 65945, 128838, 0, - 119590, 0, 0, 0, 987, 6927, 11572, 42261, 11464, 3365, 9971, 0, 0, - 128297, 0, 0, 0, 0, 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0, - 4627, 983892, 5208, 0, 128842, 10332, 5218, 7976, 9156, 0, 3244, 5529, - 69647, 73894, 128852, 5432, 64965, 5527, 74033, 10516, 7790, 5528, 0, - 42140, 120281, 0, 0, 43545, 9887, 0, 4000, 7429, 7428, 665, 7424, 3206, - 120278, 7884, 0, 128566, 917989, 128666, 211, 2509, 128858, 120573, - 68672, 3220, 42235, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, - 127258, 5852, 0, 0, 127259, 1708, 0, 983165, 2623, 11943, 0, 69226, 0, - 4698, 66509, 1066, 119921, 4701, 983876, 120285, 74225, 94111, 8267, 0, - 127265, 0, 7516, 0, 2625, 983977, 8034, 74309, 0, 3631, 10955, 7850, - 120293, 8416, 0, 0, 0, 43384, 12660, 0, 0, 0, 74850, 41069, 0, 128156, - 12099, 4310, 10032, 6252, 713, 7990, 0, 3990, 0, 983262, 66368, 5017, - 64956, 7071, 0, 119144, 1030, 118800, 983120, 9513, 41059, 9357, 0, 1773, - 0, 120350, 0, 6339, 7745, 9844, 0, 64650, 94, 1880, 74766, 983838, 8908, - 0, 128707, 65913, 78470, 10752, 13003, 0, 126572, 41307, 8732, 120338, 0, - 1757, 6964, 4696, 0, 120335, 64785, 7394, 3641, 5419, 128055, 0, 127883, - 0, 120344, 43988, 0, 8610, 43062, 7592, 856, 74299, 936, 13289, 69894, - 43171, 1459, 0, 65243, 78638, 19953, 0, 1504, 70064, 0, 12913, 74206, - 7529, 0, 128699, 983957, 120782, 4113, 0, 2372, 336, 0, 7509, 12152, 0, - 682, 66458, 41505, 0, 64743, 10593, 1703, 0, 983955, 8033, 69953, 0, - 9810, 127269, 0, 12970, 0, 42351, 10109, 917623, 0, 194693, 0, 92690, 0, - 0, 74291, 1965, 7069, 43312, 0, 73887, 0, 2087, 64370, 6314, 41714, 8501, - 0, 0, 74239, 41317, 92614, 2091, 74545, 2090, 0, 9353, 7117, 2077, 77886, - 0, 10498, 2083, 77888, 0, 0, 119236, 634, 0, 0, 0, 69779, 4165, 8746, 0, - 9654, 12856, 6924, 0, 7066, 983719, 0, 128135, 41037, 42692, 7786, 12959, - 41039, 127483, 0, 680, 2302, 128200, 1181, 7056, 3174, 126516, 0, 92668, - 65665, 127375, 126506, 6920, 0, 92295, 0, 118965, 0, 64644, 126981, - 74119, 0, 41028, 0, 6231, 2613, 65302, 40989, 0, 194696, 0, 42760, 0, - 983566, 0, 40987, 4667, 0, 983932, 8828, 0, 0, 1246, 4746, 0, 0, 11021, - 4749, 92675, 0, 921, 4744, 0, 12702, 242, 0, 1566, 8217, 0, 64653, 78386, - 128121, 74036, 74505, 43274, 5313, 951, 0, 0, 983867, 7604, 983290, 4009, - 127816, 983710, 120562, 0, 983720, 64860, 119138, 119069, 0, 127370, - 4048, 983598, 0, 70024, 1646, 77890, 64534, 73995, 120705, 0, 119890, + 65316, 4106, 65314, 65313, 42074, 127847, 41228, 128960, 65609, 41241, + 7903, 41239, 43533, 78459, 7189, 0, 0, 128753, 12357, 42802, 78450, 8487, + 9131, 66292, 4615, 12695, 127752, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, + 12169, 6590, 69762, 66455, 64738, 3219, 68654, 983787, 128281, 1037, + 128677, 2025, 128263, 13098, 78442, 10637, 4568, 549, 1570, 43839, 2835, + 0, 10624, 43623, 11072, 127191, 0, 0, 12606, 78433, 2825, 0, 10825, 8079, + 2821, 41046, 92327, 7365, 92634, 120593, 13071, 129052, 452, 41049, + 42840, 6346, 2831, 5461, 74596, 11465, 5212, 0, 64703, 119191, 42308, + 7181, 0, 41332, 0, 12333, 41047, 1668, 0, 0, 0, 1187, 983385, 42628, + 78575, 0, 71863, 0, 3240, 128518, 12151, 0, 11591, 41065, 5323, 8166, 0, + 0, 0, 66827, 1623, 65297, 128856, 571, 0, 4918, 0, 5288, 127295, 1541, + 65048, 1909, 8864, 0, 66402, 10736, 92508, 11571, 7615, 70476, 92296, + 4237, 92576, 1035, 65815, 119301, 3567, 701, 65936, 3489, 0, 70462, + 70172, 11403, 0, 0, 127146, 3796, 6800, 70472, 3994, 11421, 74611, + 195076, 195078, 983922, 0, 0, 64857, 128105, 2855, 74418, 66308, 41621, + 68214, 127283, 127817, 10654, 127818, 119226, 12164, 3246, 7906, 43972, + 65847, 7182, 0, 13024, 66276, 74270, 128289, 125090, 0, 0, 1496, 747, 0, + 942, 2378, 43136, 127905, 8466, 983575, 9320, 8001, 1232, 8139, 11617, + 74637, 0, 11409, 68373, 6382, 126500, 64634, 92362, 70202, 11612, 93008, + 67600, 2374, 94066, 8475, 11609, 66313, 983769, 0, 5286, 119297, 0, + 983251, 64925, 120283, 127204, 118982, 71905, 7705, 11942, 11305, 127203, + 3309, 128619, 9206, 119165, 113824, 6802, 70353, 41653, 1280, 1241, 7168, + 12096, 0, 66615, 42565, 41651, 0, 917627, 0, 41650, 66507, 66470, 74472, + 12914, 41491, 66010, 94106, 6078, 9954, 78822, 1475, 119247, 9938, 6084, + 917546, 41064, 41062, 0, 0, 3256, 10189, 42076, 43252, 78823, 71861, + 8727, 0, 65875, 0, 0, 127762, 10562, 74215, 43065, 0, 0, 3248, 74297, + 3261, 9015, 71351, 0, 3635, 64337, 92759, 125054, 0, 7195, 0, 2007, + 64431, 0, 0, 92197, 0, 635, 0, 0, 65613, 77909, 92420, 73997, 0, 0, + 119218, 7984, 8600, 74434, 127770, 4176, 70050, 2034, 78423, 11154, + 65891, 127038, 0, 318, 2038, 128860, 78596, 194602, 3649, 13149, 42145, + 42798, 3634, 120291, 71885, 67677, 120124, 7866, 0, 11402, 42146, 94032, + 74238, 42664, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, 68386, + 128185, 1159, 71183, 69729, 0, 120797, 7178, 194632, 983836, 41680, 0, + 128203, 11534, 1514, 11668, 67891, 9313, 7015, 128490, 67877, 194567, + 12989, 66474, 9368, 12848, 1624, 43270, 0, 74278, 10818, 126644, 9953, 0, + 78421, 1194, 3242, 9761, 9555, 8598, 120299, 6169, 12871, 1551, 2798, + 65176, 4958, 42752, 119025, 0, 67875, 120301, 3495, 66648, 125079, + 113780, 68364, 120779, 4891, 0, 10641, 0, 73746, 983837, 68352, 0, 73787, + 194829, 194633, 7199, 11131, 0, 0, 0, 983852, 0, 42685, 42679, 193, + 78789, 0, 0, 42667, 0, 5271, 68323, 92517, 118882, 1362, 13297, 0, 71880, + 0, 983331, 73789, 0, 6658, 4426, 0, 66830, 983842, 92319, 7276, 42163, + 5220, 0, 0, 125080, 2416, 3310, 42703, 127828, 379, 0, 43755, 70504, + 43647, 3223, 65492, 1284, 194771, 4549, 0, 0, 983154, 70784, 10807, 9558, + 93027, 0, 8515, 8688, 12866, 65308, 3294, 983332, 8529, 128101, 43385, + 7564, 0, 43329, 0, 92458, 73757, 66456, 42359, 0, 2031, 983890, 7202, + 128618, 12676, 42729, 74777, 3215, 0, 7710, 1610, 73801, 0, 0, 65682, 0, + 120537, 65924, 9974, 228, 66354, 1501, 0, 64395, 5179, 7200, 6225, + 118927, 42999, 1725, 65533, 8196, 7476, 74399, 0, 66868, 7152, 8502, + 5762, 1967, 7483, 125083, 0, 8104, 70128, 7474, 77979, 127200, 126507, + 10414, 13001, 8141, 0, 42537, 1557, 43594, 128642, 6330, 6805, 8631, + 2545, 70052, 127166, 0, 74190, 0, 70410, 983786, 42762, 0, 42914, 1650, + 262, 1637, 128502, 7901, 3238, 128173, 41861, 0, 120211, 65158, 10860, + 94059, 43658, 7527, 0, 43319, 6419, 0, 45, 0, 64588, 93989, 127753, + 119810, 7194, 5291, 0, 43666, 13129, 128684, 9084, 0, 8737, 983165, + 12881, 0, 12906, 9639, 7912, 2620, 983882, 3564, 0, 69978, 179, 43644, + 126503, 64756, 2853, 78443, 118813, 129042, 70347, 119009, 2850, 8084, + 983085, 73850, 2801, 92284, 42069, 119839, 74754, 119841, 42072, 92736, + 119842, 10398, 983056, 0, 8377, 119312, 8245, 68401, 3158, 92396, 3983, + 43656, 923, 119857, 92470, 292, 11119, 119845, 119844, 3221, 1763, 92463, + 4612, 67729, 119850, 7253, 70456, 68391, 0, 10782, 3637, 12996, 43542, + 113676, 64578, 983675, 3228, 69636, 8783, 0, 119614, 2731, 0, 0, 78585, + 4102, 7696, 73878, 0, 129128, 70813, 43316, 4177, 11283, 9089, 0, 73996, + 983173, 64500, 43674, 0, 64947, 1856, 0, 0, 6379, 0, 11142, 127176, 3208, + 12975, 74775, 127380, 983931, 92389, 74072, 55269, 0, 0, 983683, 2033, + 78577, 78576, 195026, 55254, 7740, 0, 70448, 127895, 73964, 68505, 93988, + 67612, 65674, 128244, 94110, 41689, 0, 74006, 64909, 6646, 11790, 74019, + 0, 128066, 128031, 8561, 4573, 0, 5326, 92571, 120605, 7230, 8257, + 194937, 8778, 41688, 0, 65776, 2071, 8314, 6459, 43511, 7628, 65092, + 73903, 66721, 11342, 128561, 0, 983432, 128226, 127001, 0, 11810, 13164, + 10723, 967, 983717, 126469, 11946, 983602, 3257, 127209, 12307, 1845, + 983157, 43526, 0, 0, 1886, 42342, 10089, 870, 7648, 3499, 7662, 7652, + 876, 871, 877, 7665, 878, 42015, 879, 43692, 4563, 0, 0, 7591, 65887, + 867, 9520, 872, 7656, 868, 873, 7642, 7659, 869, 874, 7644, 120674, 875, + 790, 128303, 118938, 0, 983641, 66182, 194623, 5429, 195055, 66180, + 126480, 66181, 68452, 983289, 917929, 42067, 0, 5433, 10657, 7911, + 125119, 1547, 66176, 42012, 120576, 5425, 4977, 9999, 5317, 5423, 4611, + 125094, 67637, 127286, 9679, 74122, 92978, 0, 0, 66194, 4418, 66184, + 4628, 4245, 119648, 0, 0, 1851, 124995, 127189, 11908, 0, 9360, 118897, + 194880, 42776, 66187, 12837, 8829, 7711, 11112, 0, 92321, 43318, 92302, + 8809, 69881, 0, 126518, 120604, 983052, 983275, 983431, 983270, 0, + 120577, 7427, 9958, 4588, 43680, 0, 74484, 194968, 2433, 128602, 69973, + 3352, 74363, 983885, 0, 793, 74404, 11197, 305, 567, 67662, 842, 69979, + 8208, 68308, 41695, 1647, 118877, 70841, 7837, 917625, 818, 5337, 194628, + 917621, 41376, 119978, 126576, 120594, 74086, 917615, 70179, 917613, + 10973, 66359, 1372, 127172, 917608, 4969, 1254, 917605, 194654, 93967, + 917602, 65228, 78221, 126612, 67723, 2840, 0, 78829, 983939, 66887, 3245, + 9068, 68194, 64725, 0, 128051, 12991, 124971, 2651, 68016, 983265, + 917611, 125038, 70835, 0, 70844, 43648, 120812, 917833, 43322, 92662, 0, + 0, 64372, 92698, 3226, 655, 752, 7457, 7456, 7452, 3285, 128475, 11152, + 92903, 65610, 2391, 92908, 92248, 671, 250, 7434, 618, 668, 610, 42800, + 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 128340, + 128266, 64749, 67850, 2107, 128345, 74249, 4605, 128174, 983192, 43372, + 65945, 128838, 11113, 119590, 0, 0, 70495, 987, 6927, 11572, 42261, + 11464, 3365, 9971, 0, 0, 128297, 0, 78762, 0, 0, 11334, 43326, 12609, + 11519, 11503, 5530, 5210, 0, 4627, 127784, 5208, 0, 128842, 10332, 2424, + 7976, 9156, 0, 3244, 5529, 69647, 73894, 128852, 5432, 64965, 5527, + 42315, 10516, 7790, 5528, 983699, 42140, 120281, 0, 0, 43545, 9887, + 129044, 4000, 7429, 7428, 665, 7424, 3206, 120278, 7884, 0, 128566, + 917989, 128666, 211, 2509, 92904, 70822, 68672, 3220, 42235, 78480, + 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 127258, 5852, 0, 78482, + 127259, 1708, 0, 78481, 2623, 11943, 128700, 69226, 69974, 4698, 66509, + 1066, 119921, 4701, 983876, 120285, 70447, 94111, 8267, 0, 1421, 66426, + 7516, 127552, 2625, 983977, 8034, 74309, 0, 3631, 10955, 7850, 120293, + 8416, 0, 0, 0, 43384, 12660, 128693, 0, 0, 74850, 41069, 70185, 128156, + 12099, 4310, 10032, 6252, 713, 7990, 983487, 3990, 125050, 983262, 66368, + 5017, 64956, 7071, 0, 70457, 1030, 118800, 92563, 9513, 41059, 9357, 0, + 1773, 77939, 120350, 0, 6339, 7745, 9844, 127220, 64650, 94, 1880, 74766, + 113719, 8908, 0, 128707, 65913, 78470, 10752, 13003, 0, 126572, 41307, + 8732, 120338, 0, 1757, 6964, 4696, 0, 120335, 64785, 7394, 3641, 5419, + 128055, 0, 127883, 0, 120344, 43988, 70423, 8610, 43062, 7592, 856, + 74299, 936, 13289, 69894, 43171, 1459, 0, 65243, 78638, 19953, 0, 1504, + 70064, 0, 12913, 74206, 7529, 128745, 128699, 70203, 120782, 4113, 0, + 2372, 336, 0, 7509, 12152, 194885, 682, 7655, 41505, 0, 64743, 10593, + 1703, 92467, 77911, 8033, 69953, 0, 9810, 127269, 120013, 12970, 0, + 42351, 10109, 74535, 0, 194693, 0, 92690, 0, 65068, 74291, 1965, 7069, + 43312, 0, 73887, 11130, 2087, 64370, 6314, 41714, 8501, 11145, 0, 74239, + 41317, 92614, 2091, 74545, 2090, 69912, 9353, 7117, 2077, 77886, 11161, + 10498, 2083, 77888, 71196, 0, 119236, 634, 0, 92290, 0, 69779, 4165, + 8746, 195048, 9654, 12856, 6924, 7660, 7066, 983719, 70415, 128135, + 41037, 42692, 7786, 12959, 41039, 127483, 124965, 680, 2302, 128200, + 1181, 7056, 3174, 67248, 0, 92668, 65665, 127375, 113776, 6920, 0, 92295, + 0, 118965, 68318, 64644, 126981, 74119, 68238, 41028, 74025, 6231, 2613, + 65302, 40989, 68239, 68230, 68234, 42760, 0, 124989, 0, 40987, 4667, 0, + 71843, 8828, 0, 70506, 1246, 4746, 0, 128508, 11021, 4749, 92675, 917882, + 921, 4744, 0, 12702, 242, 0, 1566, 8217, 127210, 64653, 78386, 74617, + 74036, 74505, 43274, 5313, 951, 74568, 92983, 983867, 7604, 983290, 4009, + 70426, 71844, 120562, 0, 983720, 64860, 119138, 119069, 0, 127370, 4048, + 983598, 0, 70024, 1646, 77890, 64534, 73995, 120705, 129047, 119890, 2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894, 2975, 74442, 9822, 983935, 55220, 10084, 73943, 118840, 0, 917562, 194610, 3399, 9851, - 983717, 11909, 9059, 0, 7687, 0, 6789, 0, 0, 0, 71367, 0, 0, 1777, 9151, - 1137, 69767, 749, 42366, 0, 5385, 128574, 128218, 0, 0, 5989, 0, 0, - 128091, 0, 41685, 69223, 0, 9769, 41684, 983216, 519, 0, 11740, 5766, 0, - 0, 2600, 8848, 120138, 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, - 69688, 69771, 74479, 0, 6558, 0, 0, 69765, 120750, 252, 0, 41302, 0, 0, - 0, 69763, 0, 11729, 8719, 9060, 0, 120139, 10761, 0, 0, 0, 118792, 11734, - 983223, 11730, 0, 9593, 5757, 2403, 64808, 55275, 0, 11728, 43572, 0, 0, - 7764, 983714, 11094, 120825, 0, 983226, 4282, 8298, 0, 0, 0, 0, 0, 64449, - 0, 126650, 63854, 8456, 0, 74783, 65670, 0, 78250, 0, 7774, 10607, 9792, - 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, 3458, 4365, 70053, 983712, 3647, - 0, 2602, 128341, 0, 194707, 41135, 0, 0, 0, 64631, 172, 4971, 41219, - 41137, 1889, 7238, 6545, 126476, 92193, 7597, 10528, 0, 0, 3732, 73910, - 194588, 5344, 0, 43366, 43363, 9062, 119252, 0, 0, 0, 64479, 9232, 92596, - 0, 0, 194712, 10900, 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, - 119635, 6099, 41534, 0, 127354, 127345, 299, 917957, 8525, 127347, 3524, - 917565, 8831, 127349, 92564, 3075, 67867, 127352, 0, 66362, 0, 64353, 0, - 0, 5845, 0, 0, 0, 2581, 8200, 65114, 68460, 0, 43283, 5551, 0, 120735, - 983201, 6340, 118855, 0, 78134, 8680, 7204, 70065, 2588, 2914, 7011, - 55281, 0, 2471, 194631, 2883, 2749, 119563, 73774, 10913, 0, 0, 8666, - 675, 42493, 0, 43571, 0, 6219, 0, 9980, 41232, 10928, 0, 41153, 41229, - 118967, 0, 3738, 94016, 0, 12711, 3181, 66212, 74289, 68472, 42857, 8262, - 983379, 0, 983222, 0, 42347, 12092, 9615, 7234, 74047, 983088, 0, 43744, - 0, 0, 73846, 2934, 12722, 120762, 922, 43983, 74507, 983126, 74461, 3218, + 917609, 11909, 9059, 0, 7687, 0, 6789, 128392, 0, 71842, 70178, 0, 0, + 1777, 9151, 1137, 66867, 749, 42366, 70444, 5385, 70791, 72435, 70127, + 128972, 5989, 0, 74636, 128091, 0, 41685, 69223, 0, 9769, 41684, 983216, + 519, 0, 11740, 5766, 0, 0, 2600, 8848, 70416, 41297, 0, 3666, 70420, + 41300, 74468, 65160, 0, 69688, 69771, 74479, 0, 6558, 0, 128064, 69765, + 92775, 252, 0, 41302, 119350, 127002, 118839, 69763, 0, 11729, 8719, + 9060, 129091, 120139, 10761, 0, 0, 0, 118792, 11734, 93011, 11730, + 113741, 9593, 5757, 2403, 64808, 55275, 0, 11728, 43572, 0, 0, 7764, + 129132, 11094, 120825, 0, 43489, 4282, 8298, 0, 0, 70328, 0, 70324, + 64449, 0, 126650, 63854, 8456, 65587, 70442, 65670, 0, 78250, 0, 7774, + 10607, 9792, 0, 70326, 0, 0, 120764, 70322, 10019, 74762, 0, 3458, 4365, + 70053, 983712, 3647, 120207, 2602, 128341, 0, 125043, 41135, 0, 0, + 128455, 64631, 172, 4971, 41219, 41137, 1889, 7238, 6545, 126476, 77926, + 7597, 10528, 0, 0, 3732, 73910, 194588, 5344, 0, 43366, 43363, 9062, + 119252, 0, 92528, 0, 64479, 9232, 92596, 0, 113707, 194712, 10900, 41531, + 1263, 3720, 12048, 74075, 64292, 41524, 7227, 119635, 6099, 41534, 0, + 127354, 127345, 299, 917957, 8525, 127347, 3524, 917565, 8831, 127349, + 92564, 3075, 67867, 94053, 0, 66362, 0, 64353, 70440, 0, 5845, 0, 0, 0, + 2581, 8200, 65114, 68460, 983693, 43283, 5551, 0, 120735, 983201, 6340, + 118855, 128934, 78134, 8680, 7204, 70065, 2588, 2914, 7011, 55281, 0, + 2471, 194631, 2883, 2749, 119563, 73774, 10913, 0, 0, 8666, 675, 42493, + 0, 43571, 0, 6219, 128584, 9980, 41232, 10928, 0, 41153, 41229, 118967, + 0, 3738, 94016, 0, 12711, 3181, 66212, 74289, 68472, 42857, 8262, 983379, + 0, 74476, 0, 42347, 12092, 9615, 7234, 74047, 983088, 983819, 43744, 0, + 0, 73846, 2934, 12722, 120762, 922, 43983, 74507, 983126, 74461, 3218, 120471, 74290, 120469, 64562, 120475, 8569, 11404, 11932, 73728, 3214, - 120461, 120468, 12128, 3207, 65486, 78729, 1901, 78727, 127326, 120460, + 11212, 120468, 12128, 3207, 65486, 78729, 1901, 78727, 127326, 120460, 7425, 3205, 68003, 78737, 78736, 78735, 43383, 69940, 65459, 2606, 78730, - 73897, 0, 11496, 1173, 0, 41272, 119661, 0, 0, 983321, 120737, 0, 983971, - 983320, 378, 2610, 0, 65079, 983325, 65695, 126559, 37, 7068, 0, 120480, - 120479, 3209, 120477, 0, 10638, 9768, 69952, 119909, 983399, 0, 0, 0, 0, - 65510, 0, 0, 5233, 983335, 64792, 983334, 0, 126633, 0, 7060, 9847, - 120144, 1685, 595, 0, 73971, 1292, 8940, 7380, 11088, 0, 10004, 126997, - 0, 6541, 0, 0, 0, 3243, 9014, 5606, 0, 538, 64620, 5602, 8467, 74391, - 6547, 128132, 8203, 78488, 983090, 8458, 65211, 8495, 119904, 0, 917552, - 779, 78314, 64367, 2465, 69901, 8193, 55279, 9730, 9280, 0, 7065, 74155, - 4346, 0, 73798, 504, 0, 92414, 8982, 0, 0, 0, 782, 0, 10883, 0, 194852, - 732, 3737, 127253, 1548, 68650, 92507, 1832, 5604, 5735, 41141, 119020, - 4376, 0, 11787, 3745, 0, 0, 42888, 65712, 983304, 3869, 11937, 5725, - 127539, 1783, 68648, 5728, 0, 0, 0, 11918, 66567, 5724, 0, 5727, 78521, - 0, 0, 764, 0, 128116, 43531, 0, 9033, 0, 42532, 6223, 11042, 120749, - 11423, 0, 119861, 71344, 43465, 0, 128267, 6559, 64557, 71348, 92649, - 120648, 43019, 43477, 10238, 74491, 0, 43377, 92282, 71346, 1478, 9783, - 11825, 2607, 64740, 0, 7739, 74543, 0, 0, 0, 6132, 0, 63765, 0, 70058, - 41144, 0, 92438, 43537, 6761, 10093, 4369, 917791, 0, 983148, 8820, 3947, - 0, 0, 11515, 526, 128103, 41295, 194603, 917785, 194932, 0, 7688, 917786, - 7686, 8288, 11815, 0, 0, 983382, 1543, 3713, 41221, 12423, 42281, 917788, - 74024, 12293, 0, 64357, 11794, 42082, 0, 1737, 8987, 42081, 0, 7205, 0, - 9335, 12850, 119870, 6553, 7055, 0, 8277, 0, 0, 5475, 74795, 6780, 0, 0, - 12990, 1160, 42084, 119650, 41217, 119660, 10018, 360, 0, 0, 68176, 5863, - 3137, 0, 4147, 983170, 41216, 7844, 2616, 119190, 68461, 65234, 983294, + 73897, 0, 11496, 1173, 0, 41272, 119661, 0, 0, 983321, 120737, 126557, + 194773, 983320, 378, 2610, 983326, 65079, 983325, 65695, 126559, 37, + 7068, 0, 120480, 68236, 3209, 120477, 0, 10638, 9768, 69952, 119909, + 983399, 92225, 0, 983338, 0, 43840, 0, 0, 5233, 983335, 64792, 71233, 0, + 126633, 128919, 7060, 9847, 120144, 1685, 595, 0, 70428, 1292, 8940, + 7380, 11088, 0, 10004, 126997, 0, 6541, 43837, 0, 0, 3243, 9014, 5606, 0, + 538, 64620, 5602, 8467, 74391, 6547, 128132, 8203, 66420, 68241, 8458, + 65211, 8495, 92311, 0, 917552, 779, 78314, 64367, 2465, 69901, 8193, + 55279, 9730, 9280, 0, 7065, 74155, 4346, 0, 73798, 504, 125115, 92414, + 8982, 0, 128711, 119170, 782, 129028, 10883, 128446, 194852, 732, 3737, + 127253, 1548, 68650, 92507, 1832, 5604, 5735, 41141, 119020, 4376, + 983370, 11787, 3745, 0, 119885, 42888, 65712, 127913, 3869, 11937, 5725, + 127539, 1783, 7416, 5728, 0, 128457, 119554, 11918, 66567, 5724, 0, 5727, + 78521, 0, 0, 764, 0, 128116, 43531, 113670, 9033, 0, 42532, 6223, 11042, + 120749, 11423, 74852, 119861, 68303, 43465, 0, 128267, 6559, 64557, + 71348, 92649, 120648, 43019, 43477, 10238, 74491, 0, 43377, 92282, 71346, + 1478, 9783, 11825, 2607, 64740, 113689, 7739, 74543, 917765, 67393, 0, + 6132, 0, 63765, 128396, 70058, 41144, 71899, 92438, 43537, 6761, 10093, + 4369, 917791, 0, 194776, 8820, 3947, 0, 0, 11515, 526, 128103, 41295, + 194603, 917785, 194932, 113691, 7688, 917786, 7686, 8288, 11815, 0, 0, + 983382, 1543, 3713, 41221, 12423, 42281, 917788, 74024, 12293, 0, 64357, + 11794, 42082, 0, 1737, 8987, 42081, 0, 7205, 0, 9335, 12850, 119870, + 6553, 7055, 0, 8277, 0, 67751, 5475, 74795, 6780, 65067, 0, 1327, 1160, + 42084, 119650, 41217, 119660, 10018, 360, 129070, 983865, 68176, 5863, + 3137, 0, 4147, 983170, 41216, 7844, 2616, 70197, 68461, 65234, 68341, 13076, 3135, 983287, 78143, 119139, 3142, 92451, 94068, 10819, 119580, - 10183, 0, 2608, 1470, 73967, 94008, 6227, 0, 127173, 69741, 983582, 6163, - 983558, 0, 127314, 0, 0, 8603, 0, 119866, 3306, 10876, 43392, 119573, - 127931, 5751, 0, 6222, 0, 0, 12086, 7403, 1600, 64309, 64939, 0, 64783, - 92658, 11310, 0, 8882, 0, 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, - 6974, 0, 0, 983211, 5002, 0, 41286, 69946, 127019, 0, 43585, 0, 6551, - 983962, 128229, 0, 41289, 0, 194602, 0, 8977, 602, 120814, 0, 128778, - 128661, 0, 983375, 41279, 0, 0, 0, 11081, 43615, 0, 0, 0, 983612, 12727, - 0, 0, 78397, 9475, 7112, 65105, 0, 9633, 10886, 43592, 7831, 983829, - 194571, 0, 73915, 8076, 43048, 8290, 8291, 43051, 92570, 0, 2596, 43584, - 0, 13113, 0, 127757, 2393, 7058, 9087, 74067, 68673, 41574, 78337, 0, - 74058, 6376, 0, 0, 0, 0, 9854, 127748, 64696, 0, 128220, 0, 6994, 0, - 1720, 0, 0, 0, 6529, 7063, 983182, 3751, 9120, 983485, 0, 1798, 709, 0, - 1354, 1876, 13152, 6557, 12430, 8137, 94098, 92642, 0, 0, 245, 128097, - 11456, 41233, 7070, 0, 94046, 6136, 917609, 65677, 8682, 41235, 92595, - 42045, 9804, 118963, 432, 3595, 194945, 65437, 0, 74455, 42399, 0, 0, - 128274, 0, 119658, 0, 0, 0, 77894, 8797, 0, 9052, 64888, 7167, 2356, 95, - 74784, 10580, 0, 42286, 0, 64640, 0, 94109, 0, 74137, 70035, 10063, - 12652, 12199, 92480, 0, 2566, 11971, 983737, 0, 1065, 0, 0, 43400, 2576, - 66696, 93999, 0, 43604, 0, 0, 74082, 514, 74502, 70032, 2921, 43215, - 64493, 5772, 12968, 70055, 194944, 74580, 43398, 2580, 983810, 41341, - 41223, 6564, 1463, 41342, 0, 5293, 70020, 0, 3733, 11346, 0, 12054, 0, - 74098, 42827, 0, 13091, 0, 0, 0, 917915, 0, 127025, 0, 74821, 0, 983733, - 119042, 0, 127865, 13090, 66643, 0, 1270, 1132, 42360, 0, 74096, 66655, - 42569, 127824, 0, 64761, 0, 41021, 8510, 42432, 0, 0, 194782, 0, 64496, - 74109, 70030, 9915, 0, 983218, 7061, 41336, 3854, 69700, 13141, 68413, - 43401, 42319, 13082, 0, 7067, 68221, 0, 127383, 127171, 0, 0, 127797, - 9029, 43543, 119315, 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 43664, - 92399, 66627, 0, 4484, 8509, 118976, 11066, 65233, 0, 41224, 41017, 0, - 3747, 10522, 0, 0, 1691, 41226, 0, 12107, 7100, 10905, 65010, 194986, - 697, 66018, 9284, 4244, 0, 0, 92644, 13121, 120036, 0, 12010, 128573, - 128221, 0, 0, 0, 127193, 65816, 68111, 0, 127933, 65668, 92257, 6618, - 118784, 66365, 0, 42234, 12648, 78110, 7123, 70038, 5785, 9198, 9764, - 41316, 65877, 7383, 13230, 41299, 0, 0, 68365, 128258, 0, 0, 0, 13122, 0, - 191, 70060, 8585, 8000, 64411, 120652, 42889, 64850, 41072, 41578, 0, - 41577, 0, 10002, 0, 6533, 73802, 41570, 0, 683, 396, 41580, 68146, 0, - 12901, 43058, 0, 343, 7129, 42680, 41360, 78154, 0, 4743, 0, 0, 74040, - 74108, 8743, 1724, 1433, 119322, 0, 3739, 6263, 71349, 0, 3964, 6592, 0, - 128693, 66040, 0, 42568, 69806, 128113, 1778, 3956, 0, 42070, 6563, - 43075, 9018, 94006, 983396, 12067, 41312, 0, 5547, 74531, 127969, 0, - 8175, 0, 284, 8108, 934, 0, 74001, 173, 66460, 7174, 92703, 118822, 1750, - 0, 4394, 68368, 1807, 983888, 92298, 0, 5889, 0, 7180, 0, 119145, 0, - 917558, 42471, 6982, 1721, 44022, 7891, 42243, 42160, 2583, 4512, 119360, - 65230, 128109, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 92416, 3975, 0, - 74087, 0, 12672, 3798, 2703, 983599, 0, 2109, 9774, 1275, 0, 0, 41095, - 3962, 0, 2932, 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, - 41851, 128230, 41846, 0, 55238, 7633, 41849, 68385, 4320, 3224, 0, - 128032, 0, 42531, 119108, 1510, 0, 8256, 0, 11393, 0, 8879, 128075, - 92474, 8770, 0, 0, 78377, 1910, 8671, 78374, 4283, 0, 127117, 68361, - 78318, 2654, 7893, 195007, 0, 0, 0, 65106, 42761, 12857, 4581, 8411, - 78372, 78371, 78370, 78369, 78368, 0, 0, 0, 1733, 4392, 2568, 10786, - 69661, 0, 8184, 41486, 0, 7396, 7116, 0, 69788, 0, 7185, 7965, 0, 0, - 92347, 983087, 41350, 9129, 0, 0, 2294, 0, 92489, 0, 10481, 0, 70022, - 7171, 0, 340, 92498, 93972, 0, 0, 92200, 0, 0, 6764, 127487, 0, 0, 0, 0, - 65203, 11392, 119098, 119359, 0, 3210, 0, 0, 118795, 0, 0, 127970, - 917619, 0, 0, 10043, 0, 1186, 41571, 6999, 617, 9464, 126642, 3675, 5207, - 65062, 5213, 194769, 2617, 41348, 41568, 128803, 3253, 120535, 0, 8630, - 128544, 0, 5596, 5545, 7288, 2586, 64887, 0, 5217, 71336, 0, 0, 0, 64293, - 68098, 2635, 0, 0, 983846, 0, 983641, 7835, 70040, 0, 194988, 92285, - 64558, 127122, 0, 127121, 0, 127913, 0, 5784, 983102, 0, 0, 70033, 4011, - 917616, 68101, 0, 7864, 4254, 65095, 983496, 5600, 3903, 127083, 10447, - 5598, 1207, 120521, 66689, 3501, 42582, 43600, 194780, 0, 1124, 5597, - 194778, 194772, 9321, 983484, 983481, 983482, 0, 1719, 68356, 68354, - 9671, 1125, 4399, 127479, 917610, 983488, 7631, 5488, 7128, 120532, 0, - 5491, 0, 8937, 43044, 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043, - 6300, 0, 7122, 0, 4390, 454, 41397, 0, 9875, 7593, 194791, 92274, 118913, - 7207, 0, 65901, 2394, 2575, 0, 3746, 11016, 65752, 120037, 0, 43423, - 128683, 11989, 0, 0, 0, 0, 0, 8249, 128172, 0, 78531, 6640, 74806, 2598, - 513, 0, 6586, 8656, 0, 120710, 65008, 0, 194784, 194989, 194795, 983473, - 92515, 68475, 93973, 0, 0, 78637, 12647, 0, 128043, 69893, 1036, 983477, - 92419, 1723, 128056, 74217, 0, 41579, 2444, 0, 10705, 73876, 983469, - 74486, 983467, 740, 119222, 194978, 194984, 0, 4238, 11071, 9459, 68437, - 78140, 78139, 194985, 8121, 10438, 74487, 42574, 13285, 55263, 11907, - 195000, 5690, 92255, 93992, 0, 43181, 13095, 0, 127857, 64498, 0, 9506, - 6978, 194993, 77992, 0, 0, 194992, 0, 127845, 1122, 317, 0, 0, 0, 0, - 1920, 0, 10173, 827, 0, 0, 78378, 120126, 5223, 1304, 0, 119564, 5226, - 12602, 94044, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, - 69229, 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, 233, - 127490, 983441, 42816, 94036, 65140, 74797, 0, 8830, 6568, 42300, 10524, - 41175, 983448, 983445, 983446, 5296, 983444, 42492, 43402, 92466, 3302, - 0, 0, 6516, 6515, 6514, 6513, 6512, 0, 7856, 8690, 0, 0, 12122, 119602, - 43976, 0, 1785, 69925, 68622, 65153, 194810, 5138, 0, 0, 118869, 0, 4540, - 41181, 0, 6200, 0, 5134, 0, 322, 4643, 5132, 0, 6389, 128533, 5143, 0, - 8790, 128694, 0, 194802, 0, 8869, 69916, 0, 42060, 71326, 9648, 194804, - 127012, 10270, 10286, 10318, 10382, 43529, 66477, 0, 0, 74170, 0, 3234, - 0, 0, 74376, 43139, 118815, 127084, 120627, 8767, 0, 74489, 9695, 120746, - 5201, 0, 6215, 12714, 6214, 13101, 0, 194999, 65268, 0, 0, 0, 11027, 0, - 10059, 10511, 42075, 9767, 789, 1749, 78890, 127071, 983670, 320, 0, - 8647, 0, 3049, 0, 6471, 42071, 43156, 9925, 127356, 127355, 66478, 4960, + 10183, 74635, 2608, 1470, 73967, 94008, 6227, 0, 127173, 65236, 917878, + 6163, 983558, 113728, 127314, 0, 0, 8603, 0, 119866, 3306, 10876, 43392, + 119573, 127931, 5751, 0, 6222, 0, 127466, 12086, 7403, 1600, 64309, + 64939, 0, 64783, 92658, 11310, 0, 8882, 0, 0, 2570, 7021, 0, 0, 43110, 0, + 1234, 6540, 6974, 92750, 0, 983211, 5002, 0, 41286, 69946, 74465, 71074, + 43585, 113720, 6551, 983373, 128229, 983272, 41289, 125130, 71080, + 127958, 8977, 602, 120814, 0, 128778, 128661, 194890, 983375, 41279, 0, + 0, 917795, 11081, 43615, 0, 0, 0, 983612, 12727, 0, 0, 78397, 9475, 7112, + 65105, 0, 9633, 10886, 43592, 7831, 983829, 194571, 0, 73915, 8076, + 43048, 8290, 8291, 43051, 92570, 0, 2596, 43584, 0, 13113, 0, 127757, + 2393, 7058, 9087, 74067, 68673, 41574, 78337, 70498, 42900, 6376, 0, 0, + 0, 0, 9854, 127748, 64696, 73879, 128220, 120752, 6994, 0, 1720, 0, 0, 0, + 6529, 7063, 983182, 3751, 9120, 983485, 0, 1798, 709, 0, 1354, 1876, + 13152, 6557, 12430, 8137, 94098, 67752, 70850, 0, 245, 128097, 11456, + 41233, 7070, 0, 94046, 6136, 68304, 65677, 8682, 41235, 92595, 42045, + 9804, 118963, 432, 3595, 127901, 65437, 0, 74455, 42399, 983136, 0, + 128274, 0, 119658, 128184, 0, 0, 77894, 8797, 0, 9052, 64888, 7167, 2356, + 95, 74784, 10580, 0, 42286, 92231, 64640, 69999, 94109, 128625, 74137, + 70035, 10063, 12652, 12199, 74622, 43492, 2566, 11971, 983737, 0, 1065, + 0, 0, 43400, 2576, 66696, 66819, 128624, 43604, 127891, 0, 3201, 514, + 74502, 70032, 2921, 43215, 64493, 5772, 12968, 70055, 194944, 74580, + 43398, 2580, 983810, 41341, 41223, 6564, 1463, 41342, 0, 5293, 70020, + 983185, 3733, 11346, 0, 12054, 0, 74098, 42827, 195074, 13091, 0, 0, 0, + 917915, 127961, 127025, 0, 74821, 71104, 66295, 92765, 0, 127865, 13090, + 66643, 0, 1270, 1132, 42360, 0, 74096, 66655, 42569, 127824, 66898, + 64761, 0, 41021, 8510, 42432, 0, 119317, 194782, 0, 64496, 74109, 70030, + 9915, 0, 983218, 7061, 41336, 3854, 69700, 13141, 68413, 43401, 42319, + 13082, 124976, 7067, 68221, 0, 127383, 127171, 0, 120745, 74209, 9029, + 43543, 70836, 2353, 6308, 129154, 74792, 2611, 119186, 66881, 0, 65063, + 43664, 92399, 66627, 125093, 4484, 8509, 118976, 11066, 65233, 0, 41224, + 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 127214, 12107, 7100, 10905, + 65010, 127275, 697, 66018, 9284, 4244, 0, 93058, 77861, 13121, 120036, 0, + 12010, 128573, 128221, 125014, 0, 0, 127193, 65816, 68111, 0, 127933, + 65668, 92257, 6618, 3562, 66365, 0, 42234, 12648, 78110, 7123, 70038, + 5785, 9198, 9764, 41316, 65877, 7383, 13230, 41299, 0, 0, 68365, 128258, + 0, 0, 0, 13122, 0, 191, 70060, 8585, 8000, 64411, 120652, 42889, 64850, + 41072, 41578, 0, 41577, 0, 10002, 195028, 6533, 73802, 41570, 917919, + 683, 396, 41580, 68146, 983067, 12901, 43058, 0, 343, 7129, 42680, 41360, + 78154, 0, 4743, 69987, 0, 74040, 74108, 8743, 1724, 1433, 119322, 0, + 3739, 6263, 71349, 0, 3964, 6592, 0, 68288, 66040, 0, 42568, 69806, + 128113, 1778, 3956, 128443, 42070, 6563, 43075, 9018, 94006, 983396, + 12067, 41312, 92763, 5547, 8916, 127969, 128950, 8175, 0, 284, 8108, 934, + 128039, 74001, 173, 66460, 7174, 92703, 118822, 1750, 128686, 4394, + 68368, 1807, 983888, 92298, 0, 5889, 0, 7180, 0, 67127, 0, 67126, 42471, + 6982, 1721, 44022, 7891, 42243, 42160, 2583, 4512, 119360, 65230, 128109, + 0, 0, 3855, 194986, 11767, 0, 0, 74295, 0, 0, 92416, 3975, 67125, 74087, + 0, 12672, 3798, 2703, 983599, 0, 2109, 9774, 1275, 0, 0, 41095, 3962, + 68242, 2932, 41101, 3954, 6457, 4513, 74536, 0, 73994, 73992, 1468, + 120033, 983057, 41803, 128230, 41846, 127244, 55238, 7633, 41849, 68385, + 4320, 3224, 0, 92741, 66281, 42531, 74593, 1510, 128384, 8256, 0, 11393, + 0, 8879, 128075, 92474, 8770, 72416, 0, 72415, 1910, 8671, 78374, 4283, + 0, 127117, 68361, 78318, 2654, 7893, 195007, 128241, 0, 72394, 65106, + 42761, 12857, 4581, 8411, 78372, 78371, 78370, 78369, 78368, 74475, + 983442, 0, 1733, 4392, 2568, 10786, 69661, 0, 8184, 41486, 0, 7396, 7116, + 0, 69788, 0, 7185, 7965, 119144, 0, 92347, 195066, 41350, 9129, 0, 0, + 2294, 64501, 92489, 0, 10481, 0, 70022, 7171, 0, 340, 71105, 93972, + 67360, 0, 92200, 128249, 124979, 6764, 127487, 128393, 0, 92509, 128962, + 65203, 11392, 119098, 119359, 119073, 3210, 0, 0, 118795, 127976, 94101, + 127484, 917619, 119149, 0, 10043, 0, 1186, 41571, 6999, 617, 9464, + 125123, 3675, 5207, 65062, 5213, 74616, 2617, 41348, 41568, 128803, 3253, + 120535, 0, 8630, 128544, 0, 5596, 5545, 7288, 2586, 64887, 983644, 5217, + 71336, 128687, 917614, 0, 64293, 68098, 2635, 92760, 0, 983846, 0, 92742, + 7835, 70040, 120707, 194988, 92285, 64558, 127122, 0, 67083, 67085, + 70099, 0, 5784, 983102, 195050, 983812, 70033, 4011, 194565, 68101, + 124978, 7864, 4254, 65095, 983496, 5600, 3903, 127083, 10447, 5598, 1207, + 120521, 66689, 3501, 42582, 43600, 129054, 127103, 1124, 5597, 194778, + 194772, 9321, 983484, 113706, 983482, 67400, 1719, 68356, 68354, 9671, + 1125, 4399, 127479, 66274, 983488, 7631, 5488, 7128, 120532, 0, 5491, + 118797, 8937, 43044, 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043, + 6300, 194837, 7122, 983090, 4390, 454, 41397, 0, 9875, 7593, 194791, + 92274, 118913, 7207, 0, 65901, 2394, 2575, 0, 3746, 11016, 65752, 92757, + 0, 43423, 128683, 11989, 0, 0, 0, 78296, 0, 8249, 128172, 11109, 78531, + 6640, 74806, 2598, 513, 0, 6586, 8656, 0, 69792, 65008, 194597, 71111, + 78383, 194795, 127474, 92515, 68475, 93973, 194584, 63799, 78637, 12647, + 0, 128043, 69893, 1036, 194982, 92419, 1723, 68215, 74217, 0, 41579, + 2444, 120722, 10705, 73876, 983469, 74486, 983467, 740, 119222, 194978, + 194984, 0, 4238, 11071, 9459, 68437, 78140, 78139, 194985, 8121, 10438, + 74487, 42574, 13285, 55263, 11907, 129107, 5690, 92255, 93992, 0, 43181, + 13095, 77925, 127857, 64498, 0, 9506, 6978, 70176, 77992, 0, 113743, + 78379, 0, 127845, 1122, 317, 0, 71055, 0, 0, 1920, 0, 10173, 827, 0, 0, + 78378, 119600, 5223, 1304, 0, 119564, 5226, 12602, 94044, 5880, 9329, + 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, 69229, 9674, 5695, + 41711, 64627, 19909, 71077, 74604, 5691, 287, 866, 233, 68138, 983441, + 42816, 94036, 65140, 74797, 128158, 8830, 6568, 42300, 10524, 41175, + 125033, 983445, 983446, 5296, 983444, 42492, 43402, 92466, 3302, 0, + 74858, 6516, 6515, 6514, 6513, 6512, 0, 7856, 8690, 983686, 70870, 12122, + 119602, 43976, 0, 1785, 69925, 68622, 65153, 194810, 5138, 0, 71922, + 118869, 0, 4540, 41181, 0, 6200, 0, 5134, 69980, 322, 4643, 5132, 0, + 6389, 128533, 5143, 0, 8790, 128694, 120121, 194802, 71168, 8869, 69916, + 93069, 42060, 71326, 9648, 194804, 71170, 10270, 10286, 10318, 10382, + 43529, 66477, 194800, 0, 74170, 0, 3234, 43835, 0, 74376, 43139, 118815, + 127084, 120627, 8767, 68231, 74489, 9695, 72439, 5201, 0, 6215, 12714, + 6214, 13101, 0, 194999, 65268, 7661, 0, 128444, 11027, 128596, 10059, + 10511, 42075, 9767, 789, 1749, 78890, 67115, 983670, 320, 0, 8647, + 983705, 3049, 0, 6471, 42071, 43156, 9925, 127356, 127355, 66478, 4960, 5549, 127359, 127346, 8485, 4671, 5418, 127350, 3351, 127006, 127351, 10610, 5414, 3064, 6212, 4286, 5421, 127344, 9554, 0, 94048, 127109, 6653, 128811, 0, 64510, 6213, 12885, 0, 119045, 64720, 0, 120759, 73741, - 12603, 7131, 11430, 4566, 7518, 9317, 3801, 10342, 10406, 0, 119259, - 42576, 0, 5200, 126611, 917948, 0, 9183, 127361, 74458, 73825, 395, 5482, - 5198, 4349, 10390, 74202, 5196, 43224, 6113, 42009, 5205, 0, 43307, 0, - 118973, 0, 12134, 0, 0, 118843, 9126, 435, 983624, 12014, 10377, 8093, - 9079, 3203, 192, 65109, 3385, 0, 64430, 5383, 10294, 10326, 128178, 5738, - 983215, 3336, 78355, 5361, 3623, 41159, 0, 68112, 7872, 8581, 0, 1260, - 3149, 5359, 120134, 0, 7914, 5357, 92170, 128659, 2624, 5364, 0, 11431, - 120030, 9101, 11058, 78288, 0, 78293, 42271, 78289, 42917, 120793, 0, - 65566, 6717, 10619, 43360, 78385, 78384, 11832, 78382, 78381, 78380, - 78379, 9319, 7097, 119055, 77906, 3232, 73824, 74581, 120632, 0, 0, - 41889, 92453, 0, 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, 120588, - 5012, 77912, 41362, 69862, 78296, 11921, 0, 11769, 0, 68609, 41364, 0, - 74228, 41352, 41361, 0, 41366, 0, 3356, 11611, 917, 68422, 119915, 7134, - 8199, 78389, 119917, 677, 119916, 0, 119932, 127169, 0, 0, 0, 3349, - 74125, 7022, 8927, 4739, 0, 5802, 0, 8615, 0, 0, 491, 128819, 10190, - 120698, 65837, 128820, 8426, 11092, 9891, 0, 42497, 7113, 7586, 42305, - 10852, 0, 0, 4606, 68448, 9095, 7741, 12684, 41885, 1046, 7124, 0, 0, - 5815, 5171, 65539, 68612, 6932, 74267, 42394, 41878, 74849, 120621, 0, - 5169, 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, 4136, 4871, - 78287, 0, 9833, 0, 0, 1128, 65920, 0, 9711, 7057, 9408, 9409, 9410, 9411, - 3662, 9413, 3378, 9415, 9416, 9417, 9418, 6320, 9420, 9421, 5897, 9423, - 5165, 5126, 41385, 0, 41389, 917938, 8955, 3374, 9400, 9401, 7119, 9403, - 9404, 3507, 9406, 7629, 983617, 19925, 42669, 68463, 183, 43985, 2631, 0, - 10627, 41130, 78260, 3996, 0, 78771, 0, 119313, 119307, 78768, 6580, - 4332, 64825, 66329, 10726, 66686, 41125, 5899, 41365, 917918, 12085, 0, - 574, 917922, 77825, 73828, 5448, 41058, 5446, 69709, 41322, 42211, 5442, - 4190, 77834, 77835, 5451, 77833, 3616, 77828, 77837, 77838, 7708, 77836, - 10859, 65867, 10345, 10409, 4191, 0, 77844, 73800, 42181, 77843, 77839, - 2060, 0, 7111, 11788, 65587, 68129, 10415, 74102, 0, 205, 0, 10351, - 119076, 0, 9862, 6588, 43257, 64697, 73998, 41355, 5505, 119154, 5503, - 8021, 0, 7125, 9819, 41357, 8011, 42885, 5507, 12044, 92636, 0, 10026, - 5472, 7109, 1191, 13106, 5470, 10329, 5476, 8991, 66322, 69778, 78267, - 42874, 8550, 42876, 5592, 2919, 0, 2675, 5595, 78411, 43762, 4367, 0, 0, - 5478, 5904, 5594, 0, 74150, 7291, 5590, 43761, 13067, 118909, 120372, - 983108, 9731, 69731, 64633, 77857, 77854, 77855, 77852, 77853, 77850, - 10750, 43714, 77858, 7137, 0, 128296, 12887, 10551, 194564, 77866, 77867, - 77864, 77865, 9929, 5199, 9936, 1120, 42387, 0, 1444, 9486, 7554, 65839, - 55252, 73972, 1442, 0, 5894, 70069, 0, 41171, 92511, 74313, 0, 13162, 0, - 3334, 195010, 118803, 77881, 66022, 0, 0, 1651, 128771, 8861, 0, 0, 1142, - 0, 8271, 0, 983058, 126645, 12903, 0, 4002, 43626, 10442, 10676, 3344, 0, - 0, 12920, 194560, 0, 0, 66642, 1277, 0, 7871, 0, 194686, 78853, 0, 78854, - 120360, 0, 11784, 0, 78012, 4700, 66366, 78858, 120359, 11012, 0, 78856, - 92400, 77879, 4973, 8784, 77877, 74804, 77874, 77869, 77871, 42440, 0, - 43118, 0, 42364, 6774, 6773, 917560, 120369, 10346, 10410, 78859, 9243, - 2464, 74263, 6108, 3372, 0, 6247, 43117, 74526, 7121, 74166, 0, 120355, - 92537, 0, 0, 195034, 0, 0, 0, 70083, 3354, 195037, 4192, 9289, 118999, - 41191, 3876, 0, 70067, 120660, 43696, 43380, 0, 983091, 0, 0, 11603, - 983954, 0, 6589, 128588, 194679, 0, 0, 983700, 0, 0, 42572, 128264, - 10630, 74827, 1963, 11622, 127098, 11654, 0, 7550, 10686, 5903, 0, 78009, - 41329, 9662, 917937, 64698, 3366, 10399, 0, 5542, 11013, 127927, 128300, - 0, 78621, 194672, 6925, 0, 0, 917929, 0, 11568, 983673, 43367, 64579, - 917930, 7852, 0, 0, 6754, 6312, 0, 64672, 65296, 0, 118957, 0, 416, - 12296, 68457, 73834, 68177, 11050, 10984, 92208, 0, 0, 92182, 0, 983605, - 9532, 66355, 0, 983234, 917925, 64343, 195032, 128281, 195031, 0, 195030, - 195057, 11445, 0, 2112, 195056, 128814, 10185, 1021, 128130, 9507, 10210, - 74544, 8023, 1200, 12243, 78001, 5282, 78003, 9624, 11545, 0, 120493, - 3343, 4424, 11047, 1885, 43268, 3896, 78444, 66497, 2947, 392, 7894, - 4391, 68139, 983062, 13059, 74816, 77998, 3381, 7942, 0, 69219, 0, 64757, - 0, 3913, 0, 0, 78235, 7044, 1265, 0, 6309, 7045, 7175, 7047, 78239, - 11791, 0, 0, 8221, 78307, 41864, 0, 0, 0, 0, 167, 983906, 78301, 983653, - 74211, 41897, 68477, 0, 917583, 983634, 94065, 2493, 0, 118811, 0, 0, - 64354, 0, 8777, 0, 406, 8884, 2385, 0, 92450, 0, 917573, 43030, 42027, - 12114, 0, 917579, 64936, 194695, 0, 120629, 10561, 0, 8365, 120539, - 983774, 65841, 120787, 11601, 0, 74121, 0, 917575, 7834, 74159, 0, - 917574, 10298, 6624, 4908, 917596, 1639, 0, 0, 74157, 6327, 6724, 0, - 128086, 92566, 69910, 4817, 78446, 194759, 92536, 7043, 9600, 11022, 0, - 0, 0, 0, 0, 0, 7548, 64794, 42050, 12291, 55289, 194761, 12343, 657, - 195054, 42705, 4461, 1134, 1838, 78438, 2057, 0, 4468, 0, 0, 0, 4456, - 5206, 10720, 0, 42523, 127520, 0, 0, 917595, 65550, 260, 4816, 67658, - 10687, 0, 4821, 4466, 0, 195043, 4818, 195048, 41403, 119977, 0, 0, - 41406, 43273, 74160, 119983, 73939, 92638, 119984, 119979, 41404, 1165, - 119980, 4451, 13087, 0, 11284, 119987, 70097, 65155, 43014, 5439, 9363, - 70070, 3375, 128869, 5900, 93990, 7889, 2722, 42262, 0, 0, 128774, 0, - 2282, 0, 127810, 11401, 983822, 0, 68459, 0, 0, 0, 0, 65438, 0, 7280, - 127887, 0, 127381, 4868, 8297, 119966, 118798, 0, 0, 43161, 0, 92360, 0, - 5182, 0, 120542, 0, 0, 4226, 119243, 12135, 5732, 4464, 0, 71330, 977, - 4458, 0, 0, 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 92240, 0, - 786, 0, 43174, 64340, 0, 194767, 120723, 43026, 7612, 10132, 64413, - 65025, 0, 0, 0, 93956, 0, 68444, 0, 92437, 0, 119160, 10204, 92656, 0, - 127809, 983644, 1399, 983652, 65217, 0, 8852, 128571, 241, 128780, 4907, - 0, 983639, 7932, 9727, 128873, 74255, 8748, 0, 0, 983643, 0, 42780, 0, 0, - 0, 4217, 0, 8650, 0, 0, 0, 69900, 118872, 43099, 3965, 119119, 6719, 0, - 13300, 78439, 93971, 43057, 66588, 118991, 0, 0, 73815, 4420, 0, 6410, - 7760, 0, 0, 0, 0, 0, 7294, 0, 0, 0, 9066, 0, 11993, 43188, 2626, 7762, 0, - 0, 0, 92601, 42825, 41854, 5304, 0, 78516, 6919, 8619, 119655, 10038, - 66454, 9592, 42851, 126993, 1542, 92303, 0, 0, 0, 0, 74311, 78497, 0, - 10181, 0, 43624, 0, 7779, 0, 10195, 9479, 6029, 0, 92268, 9689, 0, 65577, - 8993, 66358, 0, 42378, 3368, 606, 127030, 7697, 69237, 69787, 2030, 0, - 6027, 8370, 4322, 0, 65207, 0, 983339, 983338, 983337, 983336, 2735, - 42831, 77935, 127120, 74866, 8881, 119047, 0, 0, 73946, 0, 0, 0, 68140, - 983928, 9576, 128872, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063, - 7709, 41112, 983132, 66560, 42041, 4572, 12876, 66561, 983758, 6758, - 983926, 1615, 5855, 809, 0, 92283, 128316, 128004, 5799, 983328, 70100, - 983326, 7260, 983324, 43031, 64425, 65128, 78819, 64386, 65257, 0, 68616, - 120607, 9347, 128067, 6532, 0, 0, 0, 127060, 65828, 0, 283, 68665, 78813, - 532, 78663, 0, 983796, 120609, 0, 3370, 0, 11361, 5443, 78778, 8153, - 73767, 0, 10741, 0, 2298, 0, 983917, 65495, 64706, 983318, 43344, 983316, - 7144, 9466, 78866, 9824, 983311, 983310, 0, 0, 915, 43425, 0, 0, 0, 0, - 127178, 43264, 70096, 0, 0, 43038, 78864, 6730, 78862, 68161, 64550, - 5186, 7360, 127837, 0, 12108, 0, 65124, 43127, 66043, 0, 6326, 43107, - 77826, 0, 42562, 0, 128821, 0, 128520, 11485, 6103, 127123, 983305, - 11718, 983303, 12889, 92657, 127137, 0, 0, 0, 55245, 0, 1630, 128232, - 65483, 0, 12565, 0, 65476, 120013, 0, 119554, 9283, 7700, 917537, 9690, - 65499, 0, 64593, 512, 3376, 68210, 0, 128677, 77892, 632, 12940, 77891, - 42529, 78587, 0, 5957, 110593, 8926, 983299, 983298, 128273, 10745, - 10174, 7379, 64581, 5386, 120686, 11713, 10633, 69708, 5056, 0, 0, 0, - 120773, 0, 9812, 0, 4460, 0, 0, 71307, 128038, 0, 0, 127174, 64278, - 92370, 43466, 0, 0, 64389, 2953, 73879, 1801, 12835, 119029, 0, 73823, 0, - 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 983286, 983285, - 128570, 12106, 983282, 74207, 1755, 10482, 12863, 77898, 1163, 2951, - 9522, 74079, 78266, 66604, 0, 3384, 69227, 10702, 830, 77902, 77899, - 77900, 8451, 0, 0, 0, 69739, 0, 0, 0, 0, 2908, 0, 43386, 64902, 4243, 0, - 12239, 0, 0, 4441, 0, 983279, 73940, 64352, 127513, 983275, 411, 983273, - 9199, 983271, 4056, 118992, 41890, 0, 2730, 41604, 983937, 5428, 194743, - 3364, 42265, 64437, 127935, 118816, 194742, 9684, 216, 0, 1401, 128053, - 44012, 0, 0, 92585, 9158, 77842, 69905, 5768, 0, 0, 0, 484, 194739, 0, 0, - 65895, 0, 0, 3338, 73935, 572, 7041, 2736, 67605, 983263, 93962, 2794, - 8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, 5456, 5509, - 77846, 194747, 9534, 0, 0, 0, 3430, 0, 0, 78717, 0, 981, 0, 4330, 73929, - 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547, - 128259, 674, 63991, 983249, 2946, 5354, 5251, 5328, 5307, 3759, 11411, - 8364, 5123, 119628, 5281, 5469, 5121, 119245, 118993, 0, 5130, 0, 0, - 77990, 0, 120726, 1221, 2733, 11746, 77991, 5216, 0, 0, 0, 0, 3468, 7033, - 9230, 5939, 195052, 0, 0, 120677, 68400, 7278, 10321, 10289, 64613, - 10385, 41706, 0, 0, 983413, 0, 11739, 983426, 41981, 0, 5938, 0, 43766, - 12448, 7576, 10401, 10337, 73852, 0, 13057, 0, 126976, 0, 10009, 0, - 41703, 983638, 12165, 0, 0, 9885, 0, 8077, 0, 127908, 0, 0, 0, 92457, 0, - 4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 128340, 0, 0, 0, 10970, - 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 92345, 11468, 64636, 7575, 0, - 2724, 0, 0, 12313, 110592, 515, 119947, 42791, 63987, 78286, 119943, - 119940, 119941, 119938, 9775, 4046, 4589, 4521, 68629, 9141, 0, 78850, - 2741, 64399, 6197, 1370, 0, 0, 0, 0, 0, 0, 6184, 8606, 3303, 41372, - 11786, 9473, 66203, 66177, 92446, 11593, 43007, 4478, 66178, 0, 0, 2744, - 0, 4477, 118964, 814, 42066, 66183, 66204, 43786, 119961, 66198, 41880, - 66188, 11623, 78148, 11955, 66190, 66191, 41111, 66189, 73788, 7788, - 4847, 0, 127759, 0, 0, 0, 1581, 6535, 78161, 12954, 430, 78160, 55259, - 78158, 128036, 5278, 4945, 42883, 4950, 983438, 68625, 983436, 7269, 0, - 5964, 12908, 983555, 0, 74764, 74477, 119146, 194936, 4949, 983429, 443, - 983427, 4944, 5467, 119603, 983254, 65137, 6044, 65392, 0, 4213, 0, - 41303, 0, 194931, 119962, 41306, 73984, 2698, 127159, 0, 12072, 3193, 0, - 41304, 824, 128676, 12091, 78893, 78894, 119816, 4673, 64804, 4678, - 119820, 119819, 65059, 0, 6739, 0, 5481, 3490, 1199, 119811, 8356, 69947, - 119832, 4677, 12688, 3102, 0, 4672, 78173, 78175, 5531, 68367, 42575, - 78170, 78166, 4674, 4548, 44005, 119949, 68658, 119946, 8025, 68630, - 127024, 1855, 983412, 68669, 983410, 92445, 127554, 0, 127339, 119652, - 2745, 11797, 983418, 128159, 9202, 4654, 983414, 983416, 68638, 73993, - 10525, 4649, 65209, 983417, 0, 4648, 43080, 983406, 983407, 983404, 6246, - 64950, 7828, 4650, 6777, 6776, 6775, 4653, 7822, 78005, 92384, 43187, - 8669, 983415, 6821, 65093, 0, 78881, 2716, 0, 983060, 983419, 0, 68369, - 120054, 11060, 8547, 2711, 42165, 78027, 78026, 7992, 0, 0, 4662, 78033, - 78032, 9149, 9146, 599, 2081, 78031, 78030, 194962, 4656, 10130, 68450, - 7811, 40994, 194965, 6414, 5967, 4658, 3725, 5713, 5814, 4661, 42434, - 983411, 0, 0, 64904, 9026, 10833, 74864, 7547, 4867, 0, 10008, 10222, - 3054, 194956, 9744, 78860, 7605, 4622, 119656, 983395, 94070, 983393, - 983394, 983391, 9045, 78888, 4225, 19926, 78887, 12880, 65307, 4617, - 78883, 983386, 41732, 4616, 10518, 10423, 10359, 983380, 5958, 0, 983433, - 4215, 9789, 917941, 4321, 4621, 983389, 41313, 522, 5368, 0, 65803, 0, - 5366, 12201, 5372, 0, 983409, 0, 7720, 7390, 2696, 983400, 0, 4638, - 983405, 1790, 78242, 5965, 64363, 66569, 68646, 127833, 5376, 1835, 5335, - 194966, 128089, 4633, 0, 68119, 1180, 4632, 128093, 5387, 5333, 0, 0, - 42094, 5331, 4634, 11928, 983594, 5338, 4637, 128170, 5971, 42414, 0, - 1268, 65097, 42361, 0, 0, 73853, 1427, 0, 0, 5970, 3431, 0, 10358, 10422, - 4758, 983374, 1608, 2738, 0, 10455, 4753, 74026, 11344, 4222, 6240, 5231, - 74384, 983378, 68377, 6248, 983362, 983363, 983360, 42318, 92582, 5229, - 4757, 0, 0, 2728, 4752, 64563, 65235, 5234, 0, 128145, 0, 10713, 7166, 0, - 2622, 7460, 127302, 0, 0, 8954, 74760, 65189, 2632, 42617, 10108, 1011, - 5574, 1853, 2709, 65139, 5577, 0, 0, 118871, 68641, 8965, 7635, 42177, - 5316, 0, 5314, 6451, 5572, 66464, 5312, 0, 5525, 5330, 5319, 983420, - 983872, 194907, 44003, 0, 983480, 983423, 120498, 127851, 195009, 983865, - 74022, 983422, 64609, 68643, 120634, 983489, 5721, 983401, 5519, 8632, - 66465, 11267, 73961, 92278, 5720, 983352, 1692, 4219, 4610, 8696, 4305, - 0, 4609, 43478, 4614, 541, 983355, 5287, 5309, 5285, 68389, 5961, 4647, - 56, 4216, 10577, 41381, 601, 4613, 983349, 983346, 77849, 4608, 64260, - 41124, 5190, 67628, 0, 68145, 7086, 0, 67998, 67620, 0, 2734, 11074, 0, - 67627, 43593, 0, 67625, 5960, 0, 8992, 42593, 128260, 1782, 67622, 68114, + 12603, 7131, 11108, 4566, 7518, 9317, 3801, 10342, 10406, 124938, 119259, + 42576, 0, 5200, 92946, 129142, 983895, 9183, 127361, 74458, 66282, 395, + 5482, 5198, 4349, 10390, 74202, 5196, 43224, 6113, 42009, 5205, 128383, + 43307, 128369, 118973, 70467, 12134, 0, 0, 118843, 9126, 435, 983624, + 12014, 10377, 8093, 9079, 3203, 192, 65109, 3385, 125075, 64430, 5383, + 10294, 10326, 127309, 5738, 983215, 3336, 78355, 5361, 3623, 41159, 0, + 68112, 7872, 8581, 0, 1260, 3149, 5359, 120134, 0, 7914, 5357, 71190, + 74339, 2624, 5364, 0, 11431, 120030, 9101, 11058, 78288, 67107, 78293, + 42271, 78289, 42917, 67111, 129179, 65566, 6717, 10619, 43360, 78385, + 78384, 11832, 78382, 78381, 78380, 69861, 9319, 7097, 119055, 77906, + 3232, 73824, 74581, 78087, 0, 71205, 41889, 92453, 0, 1161, 41895, 74103, + 9701, 8622, 125025, 0, 73819, 120588, 5012, 77912, 41362, 69862, 68507, + 11921, 0, 11769, 128477, 68609, 41364, 0, 74228, 41352, 41361, 0, 41366, + 0, 3356, 11611, 917, 68422, 119915, 7134, 8199, 78389, 119618, 677, + 119916, 917876, 119932, 127169, 0, 0, 125136, 3349, 74125, 7022, 8927, + 4739, 92599, 5802, 194874, 8615, 0, 0, 491, 74401, 10190, 120698, 65837, + 119900, 8426, 11092, 9891, 0, 42497, 7113, 7586, 42305, 10852, 0, 42648, + 4606, 68448, 9095, 7741, 12684, 41885, 1046, 7124, 128610, 0, 5815, 5171, + 65539, 68612, 6932, 74267, 42394, 41878, 74849, 120621, 72424, 5169, + 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, 4136, 4871, 78287, + 120663, 9833, 0, 983341, 1128, 65920, 0, 9711, 7057, 9408, 9409, 9410, + 9411, 3662, 9413, 3378, 9415, 9416, 9417, 9418, 6320, 9420, 9421, 5897, + 9423, 5165, 5126, 41385, 0, 41389, 127963, 8955, 3374, 9400, 9401, 7119, + 9403, 9404, 3507, 9406, 7629, 983617, 19925, 42669, 68463, 183, 43985, + 2631, 70811, 10627, 41130, 78260, 3996, 0, 78771, 0, 119313, 119307, + 78768, 6580, 4332, 64825, 66329, 10726, 66686, 41125, 5899, 41365, + 127206, 12085, 66902, 574, 126705, 77825, 73828, 5448, 41058, 5446, + 65932, 41322, 42211, 5442, 4190, 77834, 77835, 5451, 77833, 3616, 77828, + 77837, 77838, 7708, 77836, 10859, 65867, 10345, 10409, 4191, 120378, + 77844, 73800, 42181, 77843, 77839, 2060, 0, 7111, 11788, 65376, 68129, + 10415, 74102, 0, 205, 0, 10351, 67151, 0, 9862, 6588, 43257, 64697, + 73998, 41355, 5505, 119154, 5503, 8021, 128035, 7125, 9819, 41357, 8011, + 42885, 5507, 12044, 92636, 0, 10026, 5472, 7109, 1191, 13106, 5470, + 10329, 5476, 8991, 66322, 69778, 11133, 42874, 8550, 42876, 5592, 2919, + 0, 2675, 5595, 78411, 43762, 4367, 127912, 0, 5478, 5904, 5594, 0, 74150, + 7291, 5590, 43761, 13067, 118909, 120372, 983108, 9731, 69731, 64633, + 77857, 77854, 71217, 77852, 71227, 77850, 10750, 43714, 77858, 7137, 0, + 66909, 12887, 10551, 194564, 77866, 77867, 77864, 77865, 9929, 5199, + 9936, 1120, 42387, 0, 1444, 9486, 7554, 65839, 55252, 73972, 1442, + 129080, 5894, 70069, 128672, 41171, 92511, 70358, 1323, 13162, 0, 3334, + 195010, 118803, 77881, 66022, 0, 69770, 1651, 128771, 8861, 0, 0, 1142, + 983869, 8271, 0, 983058, 126645, 12903, 0, 4002, 43626, 10442, 10676, + 3344, 128910, 194787, 12920, 194560, 70497, 194687, 66642, 1277, 66876, + 7871, 67106, 194686, 78853, 129068, 78854, 120360, 983490, 11784, 0, + 78012, 4700, 43856, 78858, 120359, 11012, 0, 78856, 92400, 77879, 4973, + 8784, 77877, 74804, 77874, 77869, 77871, 42440, 71225, 43118, 0, 42364, + 6774, 6773, 917560, 120369, 10346, 10410, 78859, 9243, 2464, 74263, 6108, + 3372, 0, 6247, 43117, 70364, 7121, 74166, 124973, 120355, 92537, 195035, + 0, 195034, 70357, 119922, 0, 67119, 3354, 195037, 4192, 9289, 118999, + 41191, 3876, 0, 70067, 120660, 43696, 43380, 0, 983091, 0, 983758, 11603, + 983954, 0, 6589, 128564, 194679, 128961, 0, 983700, 0, 129087, 42572, + 128264, 10630, 74827, 1963, 11622, 127098, 11654, 0, 7550, 10686, 5903, + 67098, 78009, 41329, 9662, 917937, 64698, 3366, 10399, 917938, 5542, + 11013, 127927, 71062, 194677, 78621, 67090, 6925, 0, 0, 92892, 71856, + 11568, 983673, 43367, 64579, 917930, 7852, 11138, 0, 6754, 6312, 77956, + 64672, 65296, 0, 118957, 0, 416, 12296, 68457, 73834, 68177, 11050, + 10984, 92208, 0, 0, 92182, 0, 983605, 9532, 66355, 0, 983234, 917925, + 64343, 195032, 92744, 195031, 0, 195030, 195057, 11445, 68294, 2112, + 128741, 128814, 10185, 1021, 128130, 9507, 10210, 74544, 8023, 1200, + 12243, 78001, 5282, 78003, 9624, 11545, 0, 120493, 3343, 4424, 11047, + 1885, 43268, 3896, 78444, 66497, 2947, 392, 7894, 4391, 68139, 983062, + 13059, 74816, 77998, 3381, 7942, 0, 69219, 0, 3558, 0, 3913, 70429, 0, + 78235, 7044, 1265, 0, 6309, 7045, 7175, 7047, 78239, 11791, 0, 917587, + 8221, 78307, 41864, 0, 0, 67075, 71219, 167, 983906, 78301, 983653, + 74211, 41897, 67072, 0, 917583, 917594, 67076, 2493, 0, 113778, 0, 92331, + 64354, 0, 8777, 0, 406, 8884, 2385, 78210, 92450, 0, 917573, 43030, + 42027, 12114, 0, 128597, 64936, 194695, 0, 120629, 10561, 128940, 8365, + 120539, 983774, 65841, 120787, 11601, 0, 74121, 128896, 917575, 7834, + 74159, 0, 917574, 10298, 6624, 4908, 917596, 1639, 0, 0, 70803, 6327, + 6724, 124953, 128086, 92566, 69910, 4817, 11087, 194759, 92536, 7043, + 9600, 11022, 0, 0, 0, 0, 0, 73954, 7548, 64794, 42050, 12291, 55289, + 128781, 12343, 657, 67110, 42705, 4461, 1134, 1838, 78438, 2057, 0, 4468, + 92891, 194945, 0, 4456, 5206, 10720, 0, 42523, 127520, 0, 93044, 917595, + 65550, 260, 4816, 67658, 10687, 0, 4821, 4466, 0, 195043, 4818, 129058, + 41403, 119977, 72422, 128458, 41406, 43273, 74160, 69805, 73939, 92638, + 119984, 119979, 41404, 1165, 119980, 4451, 13087, 0, 11284, 119987, + 70097, 65155, 43014, 5439, 9363, 70070, 3375, 128448, 5900, 93990, 7889, + 2722, 42262, 0, 0, 67078, 128451, 2282, 0, 127810, 11401, 67079, 0, + 68459, 125028, 983141, 0, 70150, 65438, 0, 7280, 127887, 0, 70146, 4868, + 8297, 119966, 70148, 0, 128744, 43161, 70144, 92360, 0, 5182, 0, 120542, + 0, 0, 4226, 70186, 12135, 5732, 4464, 0, 71330, 977, 4458, 43827, 92971, + 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 92240, 0, 786, 126995, + 43174, 64340, 0, 194767, 73971, 43026, 7612, 10132, 64413, 65025, 0, 0, + 0, 93956, 0, 68444, 0, 92437, 0, 119160, 10204, 92656, 0, 127809, 128431, + 1399, 983652, 65217, 983637, 8852, 128571, 241, 128780, 4907, 128427, + 983639, 7932, 9727, 128463, 74255, 8748, 0, 0, 983631, 0, 42780, 0, + 113677, 0, 4217, 93034, 8650, 0, 120673, 0, 69900, 118872, 43099, 3965, + 119119, 6719, 128007, 13300, 78439, 93971, 43057, 66588, 118991, 66289, + 0, 73815, 4420, 983120, 6410, 7760, 0, 70468, 128752, 120684, 0, 7294, 0, + 43869, 125032, 9066, 0, 11993, 43188, 2626, 7762, 0, 118831, 92899, + 92601, 42825, 41854, 5304, 0, 78516, 6919, 8619, 119655, 10038, 66454, + 9592, 42851, 126993, 1542, 92303, 128819, 0, 127327, 983597, 74311, + 78497, 0, 10181, 124937, 43624, 129060, 7779, 917551, 10195, 9479, 6029, + 128374, 92268, 2224, 0, 65577, 8993, 66358, 0, 42378, 3368, 606, 127030, + 7697, 69237, 69787, 2030, 70106, 6027, 8370, 4322, 0, 65207, 0, 70386, + 127903, 983337, 983336, 2735, 42831, 77935, 70439, 74866, 8881, 119047, + 0, 70433, 73946, 0, 0, 0, 68140, 983928, 9576, 92783, 3347, 4160, 5154, + 55288, 3794, 66564, 8530, 127063, 7709, 41112, 983132, 66560, 8381, 4572, + 12876, 66561, 128921, 6758, 983926, 1615, 5855, 809, 0, 92283, 128316, + 128004, 5799, 128929, 70100, 128607, 7260, 983324, 43031, 64425, 65128, + 78819, 64386, 65257, 0, 68616, 120607, 9347, 128067, 6532, 0, 917918, 0, + 127060, 65828, 120006, 283, 68665, 78813, 532, 78663, 78817, 128021, + 120609, 0, 3370, 0, 11361, 5443, 78778, 8153, 73767, 0, 10741, 0, 2298, + 0, 125039, 65495, 64706, 983318, 43344, 983316, 7144, 9466, 78866, 9824, + 67142, 128963, 67133, 67130, 915, 43425, 67292, 43865, 68232, 0, 127178, + 43264, 67136, 67137, 0, 43038, 78864, 6730, 78862, 68161, 64550, 5186, + 7360, 127837, 70451, 12108, 0, 65124, 43127, 66043, 0, 6326, 43107, + 77826, 0, 42562, 0, 128821, 128178, 128520, 11485, 6103, 92468, 983305, + 11718, 983303, 12889, 92657, 125034, 0, 0, 127476, 55245, 128927, 1630, + 128232, 65483, 120634, 12565, 0, 65476, 70369, 983072, 119214, 9283, + 7700, 917537, 9690, 65499, 0, 64593, 512, 3376, 68210, 0, 128253, 77892, + 632, 12940, 77891, 42529, 78587, 194604, 5957, 110593, 8926, 983299, + 983298, 128273, 10745, 10174, 7379, 64581, 5386, 120686, 11713, 10633, + 69708, 5056, 0, 0, 0, 120773, 94055, 9812, 0, 4460, 0, 124956, 71307, + 128038, 0, 0, 127174, 64278, 92370, 43466, 0, 0, 64389, 2953, 70122, + 1801, 12835, 74847, 0, 73823, 128681, 66375, 2085, 702, 42579, 77884, + 77885, 13074, 77883, 66299, 983285, 128570, 12106, 983282, 74207, 1755, + 10482, 12863, 77898, 1163, 2951, 9522, 74079, 78266, 66604, 0, 3384, + 69227, 10702, 830, 77902, 77899, 77900, 8451, 0, 0, 0, 66458, 128957, + 128870, 0, 0, 2908, 0, 11177, 64902, 4243, 92454, 12239, 917872, 124959, + 4441, 0, 113765, 73940, 64352, 127513, 125031, 411, 983273, 9199, 983271, + 4056, 118992, 41890, 194698, 2730, 41604, 128355, 5428, 194743, 3364, + 42265, 64437, 127935, 118816, 194742, 9684, 216, 71367, 1401, 128053, + 44012, 92628, 0, 92585, 9158, 66878, 11126, 5768, 0, 0, 0, 484, 194739, + 0, 0, 65895, 125076, 0, 3338, 73935, 572, 7041, 2736, 67605, 983263, + 93962, 2794, 8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, + 5456, 5509, 77846, 194747, 9534, 129109, 129040, 0, 3430, 0, 42905, + 78717, 128903, 981, 129184, 4330, 73929, 120536, 1824, 10908, 126506, + 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547, 128259, 674, 63991, + 983249, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 8364, 5123, 119628, + 5281, 5469, 5121, 119245, 118993, 0, 5130, 0, 0, 77990, 0, 120726, 1221, + 2733, 11746, 77991, 5216, 0, 0, 0, 92187, 3468, 7033, 9230, 5939, 195052, + 0, 5803, 71867, 68400, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, + 983413, 0, 11739, 92524, 41981, 92743, 5938, 0, 43766, 12448, 7576, + 10401, 10337, 73852, 124994, 13057, 0, 126976, 0, 10009, 0, 41703, + 983638, 12165, 129191, 0, 9885, 0, 8077, 92620, 127908, 0, 983439, 0, + 92457, 129138, 4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 125078, 0, + 983426, 128574, 10970, 11733, 0, 120792, 126490, 19944, 74356, 9009, + 8551, 92345, 11468, 64636, 7575, 0, 2724, 128899, 0, 12313, 11151, 515, + 119947, 42791, 63987, 78286, 119943, 119940, 119941, 119938, 9775, 4046, + 4589, 4521, 68629, 9141, 0, 78850, 2741, 64399, 6197, 1370, 0, 0, 0, 0, + 0, 983560, 6184, 8606, 3303, 41372, 11786, 9473, 66203, 66177, 92446, + 11593, 43007, 4478, 66178, 0, 0, 2744, 0, 4477, 78267, 814, 42066, 66183, + 66204, 43786, 119961, 66198, 41880, 66188, 11623, 78148, 11955, 66190, + 66191, 41111, 66189, 73788, 7788, 4847, 0, 127759, 0, 128433, 2221, 1581, + 6535, 78161, 12954, 430, 78160, 55259, 73944, 128036, 5278, 4945, 42883, + 4950, 983438, 68625, 983436, 7269, 0, 5964, 12908, 124997, 0, 74764, + 43512, 119146, 194936, 4949, 983429, 443, 983427, 4944, 5467, 119603, + 70865, 65137, 6044, 65392, 0, 4213, 0, 41303, 0, 194931, 119962, 41306, + 73984, 2698, 127159, 0, 12072, 3193, 0, 41304, 824, 128676, 12091, 67118, + 78894, 119816, 4673, 64804, 4678, 119820, 119819, 65059, 43860, 6739, + 66844, 5481, 3490, 1199, 119811, 8356, 69947, 67702, 4677, 12688, 3102, + 0, 4672, 78173, 78175, 5531, 68367, 42575, 78170, 78166, 4674, 4548, + 44005, 71087, 68658, 119946, 8025, 68630, 127024, 1855, 983412, 68669, + 983410, 92445, 127554, 983417, 127339, 119652, 2745, 11797, 983418, + 128159, 9202, 4654, 6840, 983414, 68638, 73993, 10525, 4649, 65209, + 983416, 0, 4648, 43080, 983406, 983407, 983404, 6246, 64950, 7828, 4650, + 6777, 6776, 6775, 4653, 7822, 78005, 74624, 43187, 8669, 120659, 6821, + 65093, 0, 78881, 2716, 0, 983060, 70503, 194952, 68369, 120054, 11060, + 8547, 2711, 42165, 78027, 78026, 6836, 983421, 0, 4662, 78033, 78032, + 9149, 9146, 599, 2081, 78031, 78030, 194962, 4656, 10130, 68450, 7811, + 40994, 194965, 6414, 5967, 4658, 3725, 5713, 5814, 4661, 42434, 983411, + 128737, 11190, 64904, 9026, 10833, 74864, 7547, 4867, 11100, 10008, + 10222, 3054, 194956, 9744, 78860, 7605, 4622, 119656, 983395, 94070, + 983393, 69905, 67188, 9045, 78888, 4225, 19926, 78887, 12880, 65307, + 4617, 78883, 983386, 41732, 4616, 10518, 10423, 10359, 983380, 5958, 0, + 983433, 4215, 9789, 119619, 4321, 4621, 983389, 41313, 522, 5368, 11139, + 65803, 0, 5366, 12201, 5372, 0, 983409, 194975, 7720, 7390, 2696, 983400, + 0, 4638, 983405, 1790, 78242, 5965, 64363, 66569, 68646, 68477, 5376, + 1835, 5335, 194966, 128089, 4633, 0, 68119, 1180, 4632, 67191, 5387, + 5333, 0, 125132, 42094, 5331, 4634, 11928, 983594, 5338, 4637, 128170, + 5971, 42414, 43500, 1268, 65097, 42361, 0, 0, 73853, 1427, 128440, 0, + 5970, 3431, 0, 10358, 10422, 4758, 983374, 1608, 2738, 125066, 10455, + 4753, 74026, 11344, 4222, 6240, 5231, 74384, 983378, 68377, 6248, 983362, + 128432, 983360, 42318, 92582, 5229, 4757, 0, 0, 2728, 4752, 64563, 65235, + 5234, 0, 128145, 128926, 10713, 7166, 0, 2622, 7460, 127302, 67101, + 126495, 8954, 74760, 65189, 2632, 42617, 10108, 1011, 5574, 1853, 2709, + 65139, 5577, 128966, 0, 118871, 68641, 8965, 7635, 42177, 5316, 0, 5314, + 6451, 5572, 66464, 5312, 0, 5525, 5330, 5319, 68292, 127311, 65066, + 44003, 120650, 983480, 43843, 120498, 127851, 195009, 74851, 74022, + 983422, 64609, 68643, 67410, 128593, 5721, 983401, 5519, 8632, 66465, + 11267, 73961, 92278, 5720, 983352, 1692, 4219, 4610, 8696, 4305, 0, 4609, + 43478, 4614, 541, 983355, 5287, 5309, 5285, 68389, 5961, 4647, 56, 4216, + 10577, 41381, 601, 4613, 983349, 983346, 9208, 4608, 64260, 41124, 5190, + 67628, 66826, 68145, 7086, 0, 67998, 67620, 93047, 2734, 11074, 0, 67627, + 43593, 0, 67625, 5960, 67722, 8992, 42593, 128260, 1782, 67622, 68114, 119939, 0, 68180, 5501, 119952, 42508, 7442, 43665, 359, 41253, 68392, - 6239, 119956, 41256, 0, 68134, 0, 74209, 917550, 9346, 69660, 41254, + 6239, 119956, 41256, 74132, 67740, 0, 71178, 917550, 9346, 69660, 41254, 128047, 43291, 3767, 5737, 0, 4865, 0, 5740, 917997, 5736, 4368, 64724, - 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 983840, 4869, 120563, 0, - 4223, 128201, 6650, 126509, 0, 983463, 127890, 4870, 120445, 68661, 6716, - 78176, 68667, 68382, 68676, 127925, 10122, 4864, 66568, 4144, 7937, 0, - 6245, 68652, 2732, 42734, 745, 0, 195097, 92195, 4777, 7821, 0, 68631, - 42775, 0, 194954, 0, 3097, 0, 5966, 983486, 4778, 0, 10863, 0, 4781, 0, - 64407, 0, 128323, 8577, 128562, 68196, 43285, 10216, 4782, 0, 0, 120757, - 68618, 12325, 43056, 8717, 0, 0, 4776, 73818, 11492, 8700, 0, 13176, - 68363, 10426, 0, 917599, 10362, 194706, 1715, 4849, 8242, 9561, 73922, - 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, 4853, 118995, - 4854, 127918, 5164, 983870, 1350, 5124, 64420, 1993, 5362, 8471, 2708, - 92471, 12445, 3785, 234, 3199, 0, 41268, 4848, 2530, 917909, 2068, 1964, - 0, 73762, 10458, 0, 8576, 78543, 0, 2704, 4794, 0, 68211, 8322, 4797, - 5753, 0, 2694, 4792, 0, 2439, 65104, 69804, 983424, 303, 983101, 92622, - 983425, 2437, 0, 4221, 4844, 92216, 0, 0, 0, 70042, 0, 43292, 0, 2441, - 10739, 65090, 0, 119327, 126541, 2451, 2714, 119326, 0, 43379, 4937, - 43376, 753, 5849, 10597, 43089, 11722, 9248, 92555, 42879, 11725, 0, 0, - 2726, 3107, 73958, 4941, 64937, 119233, 9140, 1408, 5261, 4607, 0, 181, - 983430, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, - 983601, 0, 4964, 5264, 64178, 64177, 12979, 41411, 64182, 64181, 64180, - 64179, 9482, 4873, 41231, 1822, 42526, 128581, 12758, 3865, 0, 0, 10500, - 0, 119024, 78028, 92408, 9830, 43642, 389, 10893, 7521, 127879, 4872, - 5463, 0, 3125, 9567, 0, 4878, 5459, 4604, 917931, 9557, 5465, 68617, 0, - 11494, 126492, 9563, 10865, 74570, 43279, 64186, 983439, 78714, 64191, - 64190, 8898, 64188, 0, 41030, 78836, 0, 917835, 78820, 917834, 0, 78805, + 7193, 67097, 128844, 5739, 41024, 4866, 0, 73904, 983840, 4869, 120563, + 0, 4223, 128201, 6650, 126509, 0, 983463, 127890, 4870, 120445, 68661, + 6716, 78176, 68667, 68382, 68676, 127925, 10122, 4864, 66568, 4144, 7937, + 0, 6245, 68652, 2732, 42734, 745, 0, 195097, 92195, 4777, 7821, 129136, + 68631, 42775, 0, 128445, 0, 3097, 0, 5966, 983486, 4778, 0, 10863, 0, + 4781, 92986, 64407, 128503, 128323, 8577, 71221, 68196, 43285, 10216, + 4782, 0, 0, 120757, 68618, 12325, 43056, 8717, 0, 0, 4776, 73818, 11492, + 8700, 983955, 13176, 68363, 10426, 67247, 71091, 10362, 194706, 1715, + 4849, 8242, 9561, 73922, 43278, 42635, 0, 127207, 5963, 917926, 983481, + 0, 4850, 73900, 1607, 466, 4853, 118995, 4854, 127918, 5164, 73807, 1350, + 5124, 64420, 1993, 5362, 8471, 2708, 92471, 12445, 3785, 234, 3199, + 128768, 41268, 4848, 2530, 194711, 2068, 1964, 0, 73762, 10458, 983415, + 8576, 78543, 0, 2704, 4794, 0, 68211, 8322, 4797, 5753, 0, 2694, 4792, 0, + 2439, 65104, 69804, 983424, 303, 74625, 68229, 983425, 2437, 78659, 4221, + 4844, 92216, 0, 0, 0, 70042, 74095, 43292, 0, 2441, 10739, 65090, 0, + 70436, 118929, 2451, 2714, 119326, 0, 43379, 4937, 43376, 753, 5849, + 10597, 43089, 11722, 9248, 92555, 42879, 11725, 0, 0, 2726, 3107, 73958, + 4941, 64937, 119233, 9140, 1408, 5261, 4607, 0, 181, 983430, 4942, 9539, + 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 983601, 6844, 4964, 5264, + 64178, 64177, 12979, 41411, 64182, 64181, 64180, 64179, 9482, 4873, + 41231, 1822, 42526, 127989, 12758, 3865, 0, 128473, 10500, 0, 119024, + 78028, 92408, 9830, 43642, 389, 10893, 7521, 127879, 4872, 5463, 128119, + 3125, 9567, 0, 4878, 5459, 4604, 917931, 9557, 5465, 68617, 0, 11494, + 126492, 9563, 10865, 74570, 43279, 64186, 68521, 78714, 64191, 64190, + 8898, 64188, 129153, 41030, 74226, 0, 74600, 78820, 917834, 0, 78805, 41031, 78801, 11960, 6745, 3082, 983437, 78539, 73919, 10573, 41744, - 7079, 5856, 127043, 5163, 78809, 128162, 1817, 66724, 78538, 0, 10564, - 7763, 13077, 41813, 4400, 41745, 64207, 10275, 8925, 10371, 10307, 41814, - 4248, 0, 0, 4541, 6299, 64204, 64203, 64201, 64200, 64199, 64198, 126471, - 42156, 78688, 0, 64193, 64192, 65223, 9943, 64197, 64196, 64195, 64194, - 13282, 64175, 64174, 64173, 78189, 846, 78186, 9965, 0, 0, 0, 0, 2543, - 12163, 3108, 9745, 64167, 64166, 64165, 64164, 2110, 92176, 64169, 64168, - 64949, 10972, 10251, 10247, 42768, 715, 2295, 43299, 9453, 5348, 10943, - 120378, 0, 11352, 550, 9910, 126705, 0, 66579, 11551, 0, 195080, 9504, - 7187, 0, 10373, 0, 120791, 10261, 10253, 6404, 10277, 78183, 11984, 1552, - 65222, 6998, 78180, 0, 3128, 4789, 5067, 5066, 118849, 4784, 0, 8827, - 1146, 5065, 69890, 78192, 68136, 78190, 43412, 5064, 2431, 0, 9450, 1809, - 0, 78200, 78201, 5062, 1264, 64817, 13254, 11697, 126598, 9785, 64716, 0, - 3933, 74559, 4740, 7954, 0, 0, 42609, 0, 74175, 0, 127016, 0, 983873, - 42130, 0, 5151, 917829, 917823, 0, 93980, 0, 7620, 3800, 65122, 0, 0, - 8355, 7854, 0, 954, 64927, 4185, 41045, 127141, 41438, 41439, 68666, - 10711, 4593, 127745, 120584, 983408, 64774, 8053, 10532, 66727, 0, 0, 0, - 64759, 6381, 5166, 9888, 127800, 5148, 42834, 0, 78205, 78206, 43787, - 78204, 64131, 3119, 917814, 0, 3060, 64135, 9986, 0, 77876, 636, 11698, - 0, 983451, 9916, 11701, 7836, 42741, 64137, 8320, 78640, 8863, 92431, - 119960, 1477, 43289, 0, 74358, 8618, 983402, 9908, 983981, 0, 0, 3937, - 12312, 0, 983403, 0, 64781, 912, 6349, 4536, 93954, 74532, 126594, 6244, - 92209, 71341, 3935, 120665, 983476, 0, 11950, 5392, 42248, 65129, 68656, - 5397, 0, 12046, 12599, 0, 128261, 5395, 0, 5393, 354, 68615, 119948, - 78503, 0, 0, 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, 0, 128874, - 0, 0, 43297, 983079, 4311, 4644, 8818, 0, 128186, 0, 7145, 3918, 66452, - 3797, 1644, 92346, 9658, 4140, 11385, 65947, 6455, 9030, 813, 119945, - 68131, 4146, 119957, 5360, 2466, 0, 67669, 119942, 6249, 42117, 92287, - 128224, 0, 0, 74046, 43745, 4911, 988, 917807, 0, 983468, 43061, 7054, - 64147, 0, 64920, 68195, 6698, 118933, 92506, 0, 120006, 11981, 12202, 0, - 11032, 67654, 6093, 11608, 975, 68662, 65843, 170, 0, 0, 4169, 0, 41859, - 6058, 120401, 13203, 120657, 0, 0, 68657, 9818, 10178, 10324, 42106, - 5898, 74540, 4738, 41856, 7062, 917865, 4737, 11779, 4742, 120564, 92391, - 73736, 983364, 9825, 6448, 6715, 127008, 4831, 0, 92525, 0, 5300, 4741, - 42108, 983354, 64159, 4736, 64148, 0, 849, 92191, 78491, 43288, 0, 66620, - 917916, 127331, 65549, 9496, 64598, 118866, 983366, 7876, 68132, 917872, - 3928, 917870, 43378, 10706, 7198, 0, 4842, 12053, 128129, 0, 4841, 0, - 4171, 12008, 6251, 3923, 1490, 0, 119591, 126512, 40972, 5245, 0, 10114, - 42001, 41888, 4845, 8332, 40974, 64347, 4840, 9077, 78346, 1747, 917849, - 4825, 69240, 917852, 68655, 0, 983388, 0, 0, 68628, 983347, 9850, 118937, - 367, 1472, 917859, 6687, 1274, 0, 5905, 12339, 8919, 73953, 10907, 65261, - 11023, 119559, 4830, 9134, 78666, 64126, 43011, 0, 126626, 64101, 0, 0, - 4824, 10614, 119659, 0, 1888, 1960, 7861, 917856, 78524, 41836, 43012, - 6052, 6064, 54, 43009, 12214, 0, 6211, 0, 358, 41997, 41833, 11442, - 10758, 65774, 0, 120384, 64115, 92221, 70018, 0, 0, 119053, 0, 12765, - 64118, 126998, 12962, 0, 126580, 4017, 12827, 5241, 120392, 0, 41118, - 3924, 0, 11366, 917843, 0, 0, 917846, 41116, 917844, 917564, 0, 11363, - 12057, 11917, 1567, 74000, 4721, 126641, 66202, 8957, 4139, 0, 0, 0, 0, - 0, 12740, 128702, 4722, 6816, 127793, 12759, 4725, 983383, 4726, 0, - 194892, 983622, 128321, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, - 0, 128294, 64212, 41020, 1382, 64209, 64216, 44002, 64214, 1656, 41831, - 0, 0, 41843, 8720, 3908, 1452, 13111, 0, 64067, 127328, 8552, 64113, - 41845, 3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 119085, 0, - 0, 7935, 2420, 0, 1114, 92599, 67585, 70104, 120053, 92350, 120051, 3938, - 120057, 65417, 64717, 120060, 120061, 65415, 120059, 6292, 65303, 7955, - 6452, 4713, 128196, 66249, 917885, 917890, 917891, 65152, 719, 120044, + 7079, 5856, 127043, 5163, 78809, 128162, 1817, 66724, 78538, 119010, + 10564, 7763, 13077, 41813, 4400, 41745, 64207, 10275, 8925, 10371, 10307, + 41814, 4248, 0, 0, 4541, 6299, 64204, 64203, 64201, 64200, 64199, 64198, + 126471, 42156, 78688, 0, 64193, 64192, 65223, 9943, 64197, 64196, 64195, + 64194, 12231, 42652, 64174, 64173, 78189, 846, 78186, 9965, 74495, 0, + 917924, 0, 2543, 12163, 3108, 9745, 64167, 64166, 64165, 64164, 2110, + 92176, 64169, 64168, 64949, 10972, 10251, 10247, 42768, 715, 2295, 43299, + 9453, 5348, 10943, 66390, 0, 11352, 550, 9910, 125127, 0, 66579, 11551, + 128464, 195080, 9504, 7187, 0, 10373, 0, 120791, 10261, 10253, 6404, + 10277, 78183, 11984, 1552, 65222, 6998, 78180, 0, 3128, 4789, 5067, 5066, + 118849, 4784, 0, 8827, 1146, 5065, 69890, 78192, 68136, 78190, 43412, + 5064, 2431, 0, 9450, 1809, 0, 78200, 78201, 5062, 1264, 64817, 13254, + 11697, 126598, 9785, 64716, 0, 3933, 74559, 4740, 7954, 0, 125023, 42609, + 128388, 74175, 66912, 127016, 0, 983873, 42130, 983223, 5151, 917829, + 917823, 0, 93980, 0, 7620, 3800, 65122, 0, 127792, 8355, 7854, 0, 954, + 64927, 4185, 41045, 127141, 41438, 41439, 68666, 10711, 4593, 127745, + 120584, 983408, 64774, 8053, 10532, 66727, 0, 0, 78642, 64759, 1325, + 5166, 9888, 127800, 5148, 42834, 0, 78205, 78206, 43787, 78204, 64131, + 3119, 917814, 0, 3060, 64135, 9986, 0, 77876, 636, 11698, 0, 917810, + 9916, 11701, 7836, 42741, 64137, 8320, 78640, 8863, 70201, 119960, 1477, + 43289, 68492, 67164, 8618, 983402, 9908, 983981, 0, 0, 3937, 12312, 0, + 983403, 0, 64781, 912, 6349, 4536, 93954, 74532, 126594, 6244, 92209, + 71341, 3935, 120665, 983476, 0, 11950, 5392, 42248, 65129, 68656, 5397, + 128310, 12046, 12599, 67407, 128261, 5395, 0, 5393, 354, 68615, 77853, + 74366, 0, 0, 42039, 113817, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, 66407, + 128874, 0, 0, 43297, 70188, 4311, 4644, 8818, 78158, 128186, 0, 7145, + 3918, 66452, 3797, 1644, 92346, 9658, 4140, 11385, 65947, 6455, 9030, + 813, 119945, 68131, 4146, 119957, 5360, 2466, 0, 67669, 119942, 6249, + 42117, 92287, 92206, 0, 119255, 74046, 43745, 4911, 988, 71180, 0, + 983468, 43061, 7054, 64147, 0, 64920, 68195, 6698, 118933, 92506, 0, + 70849, 11981, 12202, 0, 11032, 67654, 6093, 11608, 975, 66415, 65843, + 170, 0, 67239, 4169, 0, 41859, 6058, 120401, 13203, 120657, 70507, + 125091, 68657, 9818, 10178, 10324, 42106, 5898, 74540, 4738, 41856, 7062, + 127120, 4737, 11779, 4742, 120564, 92391, 68342, 983364, 9825, 6448, + 6715, 127008, 4831, 983363, 92525, 67731, 5300, 4741, 42108, 983354, + 64159, 4736, 64148, 0, 849, 92191, 78491, 43288, 0, 66620, 127533, + 127331, 65549, 9496, 64598, 118866, 983366, 7876, 68132, 66280, 3928, + 917870, 43378, 10706, 7198, 0, 4842, 12053, 128129, 127303, 4841, 0, + 4171, 12008, 6251, 3923, 1490, 0, 119591, 126512, 40972, 5245, 70794, + 10114, 42001, 41888, 4845, 8332, 40974, 64347, 4840, 9077, 78346, 1747, + 917849, 4825, 69240, 917852, 68655, 0, 983388, 0, 0, 68628, 983347, 9850, + 118937, 367, 1472, 917859, 6687, 1274, 0, 5905, 12339, 8919, 73953, + 10907, 65261, 11023, 119559, 4830, 9134, 78666, 64126, 43011, 0, 78669, + 64101, 0, 0, 4824, 10614, 119659, 0, 1888, 1960, 7861, 917856, 78524, + 41836, 43012, 6052, 6064, 54, 43009, 12214, 0, 6211, 120386, 358, 41997, + 41833, 11442, 10758, 65774, 113823, 120384, 64115, 92221, 70018, 0, + 983708, 119053, 0, 12765, 64118, 126998, 12962, 0, 126580, 4017, 12827, + 5241, 120392, 0, 41118, 3924, 0, 11366, 129084, 0, 0, 917846, 41116, + 917844, 917564, 129081, 11363, 12057, 11917, 1567, 74000, 4721, 126641, + 66202, 8957, 4139, 70512, 0, 983074, 0, 0, 12740, 128702, 4722, 6816, + 124974, 12759, 4725, 67099, 4726, 0, 194892, 983622, 70029, 917905, + 92912, 12755, 12762, 4015, 67690, 8052, 476, 0, 0, 128294, 64212, 41020, + 1382, 64209, 64216, 44002, 64214, 1656, 41831, 0, 125121, 41843, 8720, + 3908, 1452, 13111, 983419, 64067, 127328, 8552, 64113, 41845, 3849, + 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 119085, 0, 917610, + 7935, 2420, 0, 1114, 78120, 67585, 70104, 70432, 92168, 120051, 3938, + 120057, 65417, 64717, 120060, 71920, 65415, 66884, 6292, 65303, 7955, + 6452, 4713, 128196, 66249, 917885, 917890, 129073, 65152, 719, 120044, 78623, 120042, 6713, 4532, 65412, 69822, 10868, 4717, 2349, 5902, 66450, - 4712, 917902, 917899, 917900, 65416, 8155, 4718, 3942, 4714, 9625, 0, - 6383, 194744, 12006, 128565, 0, 0, 0, 0, 65414, 6454, 1229, 126606, - 66437, 66025, 78699, 0, 42500, 120508, 4809, 9623, 917874, 78694, 917880, - 917877, 917878, 65405, 68159, 12893, 917882, 5365, 4545, 8901, 92421, - 119555, 4813, 128262, 0, 5925, 4808, 64330, 0, 65475, 118940, 195028, - 4814, 0, 4810, 0, 0, 64928, 10543, 0, 3522, 71335, 414, 65404, 0, 195027, - 6456, 73820, 0, 6691, 42193, 92225, 128171, 0, 74495, 0, 0, 0, 118820, - 9751, 65407, 128085, 11770, 3919, 0, 0, 65061, 0, 0, 0, 12235, 0, 0, - 127233, 64092, 983470, 64080, 0, 64090, 0, 69913, 10162, 10310, 0, 8454, - 127888, 42038, 387, 41363, 12737, 0, 4780, 43368, 0, 64310, 64621, 6732, - 78116, 0, 983139, 0, 983074, 8896, 0, 375, 6976, 66582, 119005, 983874, - 0, 983434, 119202, 119203, 12526, 43120, 2315, 0, 1938, 119197, 0, 4529, - 119200, 119201, 119198, 119199, 69692, 983432, 69698, 13150, 64492, 0, 0, - 2291, 12902, 0, 42891, 66327, 74298, 917857, 10799, 69690, 2587, 66372, - 0, 4193, 92250, 4241, 983057, 7998, 0, 0, 0, 126640, 2316, 118821, 0, 0, - 0, 64297, 74799, 92442, 74140, 0, 5373, 0, 983886, 3762, 10015, 120672, - 119232, 0, 41590, 0, 70098, 3780, 7485, 5779, 0, 42037, 0, 3906, 12349, - 0, 8326, 0, 65498, 3763, 6983, 5618, 0, 3779, 0, 43613, 0, 0, 0, 0, 0, 0, - 280, 74558, 127332, 68138, 13072, 1894, 0, 0, 65478, 43310, 7231, 0, - 11773, 0, 0, 0, 0, 2551, 0, 6453, 10200, 6235, 983752, 119237, 0, 128805, - 4470, 11826, 917557, 7780, 5369, 118958, 5249, 0, 5367, 8756, 127143, 0, - 5377, 120585, 68143, 1688, 78245, 983356, 69685, 983756, 0, 0, 44020, - 6808, 41319, 1300, 10650, 41692, 64505, 2290, 0, 119624, 1465, 10850, - 3943, 0, 41205, 41315, 118961, 0, 0, 5352, 0, 0, 8839, 41314, 7384, 7785, - 41204, 127322, 41209, 69637, 92241, 43607, 0, 0, 5420, 3897, 10134, 0, - 74417, 4018, 7150, 68127, 0, 0, 0, 0, 127526, 2561, 68621, 3542, 7148, - 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, 78751, 7146, 0, 65150, - 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 983435, 69641, 10753, - 10830, 0, 615, 64490, 7574, 92617, 77922, 0, 12909, 43016, 64559, 127028, - 0, 0, 67996, 2020, 0, 4022, 128783, 0, 77923, 126593, 41691, 0, 0, 74329, - 0, 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, 7000, 3904, - 0, 128198, 0, 118931, 119630, 13123, 10846, 3450, 127360, 7397, 118807, - 0, 42778, 10000, 41088, 449, 0, 3777, 68458, 0, 9636, 0, 10738, 69634, - 9367, 593, 41085, 3999, 65226, 41713, 12764, 0, 64409, 3596, 0, 0, 9763, - 120280, 92192, 12347, 124, 12981, 41127, 2092, 92687, 0, 0, 0, 10820, - 43987, 0, 0, 1769, 41715, 2463, 78489, 0, 12770, 126500, 1538, 0, 43124, - 0, 195058, 7795, 120300, 0, 4828, 1258, 127802, 2006, 0, 0, 9498, 127032, - 127033, 120289, 120288, 3939, 120290, 8846, 8943, 120287, 120286, 2650, - 4491, 1961, 42602, 11525, 120292, 1959, 120294, 55228, 11774, 41016, 0, - 68675, 128054, 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, 41019, 0, - 0, 65292, 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, 78208, 118879, - 55223, 0, 128071, 41826, 8865, 6402, 0, 13279, 7917, 74755, 0, 7733, 0, - 4998, 983896, 92332, 41950, 0, 4268, 0, 0, 70061, 4013, 0, 10881, 0, 0, - 0, 74788, 2014, 0, 0, 9765, 0, 0, 0, 195059, 78357, 65281, 127825, 10949, - 0, 0, 0, 2015, 0, 0, 0, 66318, 43233, 0, 42517, 0, 0, 0, 12698, 8094, - 10135, 65909, 6474, 794, 0, 12656, 128122, 119353, 128270, 1665, 0, 4833, - 983053, 119351, 127367, 0, 189, 12611, 0, 0, 2859, 4838, 0, 4834, 65078, - 0, 0, 4837, 127061, 770, 0, 811, 0, 41042, 917551, 41318, 64427, 0, - 128208, 78848, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, 7747, 0, 0, - 0, 0, 0, 43686, 78846, 41877, 0, 2871, 64614, 128785, 999, 0, 6345, + 4712, 917902, 917899, 65400, 65416, 8155, 4718, 3942, 4714, 9625, 0, + 6383, 194744, 12006, 128565, 194789, 0, 113756, 0, 65414, 6454, 1229, + 126606, 66437, 66025, 78699, 0, 42500, 120508, 4809, 9623, 917874, 78694, + 917880, 917877, 917858, 65405, 68159, 12893, 78617, 5365, 4545, 8901, + 92421, 119555, 4813, 128262, 0, 5925, 4808, 64330, 128400, 65475, 118940, + 68244, 4814, 0, 4810, 0, 0, 64928, 10543, 71249, 3522, 71335, 414, 65404, + 0, 195027, 6456, 73820, 0, 6691, 42193, 66284, 128171, 0, 68337, 0, + 43858, 43832, 118820, 9751, 65407, 128085, 11770, 3919, 120724, 0, 65061, + 0, 917894, 0, 12235, 0, 92701, 127233, 64092, 983470, 64080, 0, 64090, + 983586, 69913, 10162, 10310, 0, 8454, 127888, 42038, 387, 41363, 12737, + 0, 4780, 43368, 0, 64310, 64621, 6732, 78116, 0, 194959, 195024, 92193, + 8896, 0, 375, 6976, 66582, 119005, 983874, 127325, 983434, 119202, + 119203, 12526, 43120, 2315, 0, 1938, 119197, 128452, 4529, 119200, + 119201, 119198, 119199, 69692, 129124, 69698, 13150, 64492, 128974, 0, + 2291, 12902, 0, 42891, 66327, 70502, 917857, 10799, 69690, 2587, 66372, + 128628, 4193, 66823, 4241, 129195, 7998, 119840, 0, 983554, 126640, 2316, + 118821, 0, 0, 0, 64297, 74799, 92442, 74140, 128148, 5373, 128798, 70370, + 3762, 10015, 120672, 119232, 125109, 41590, 0, 70098, 3780, 7485, 5779, + 0, 42037, 0, 3906, 12349, 74793, 8326, 0, 65498, 3763, 6983, 5618, 0, + 3779, 983194, 43613, 70132, 0, 0, 78335, 983892, 0, 280, 74558, 127332, + 67396, 13072, 1894, 0, 67735, 65478, 43310, 7231, 0, 11773, 0, 0, 11144, + 917778, 2551, 0, 6453, 10200, 6235, 983752, 119237, 71877, 128805, 4470, + 11826, 917557, 7780, 5369, 118958, 5249, 983066, 5367, 8756, 127143, + 119183, 5377, 120585, 68143, 1688, 78245, 5218, 69685, 983756, 0, 113794, + 44020, 6808, 41319, 1300, 10650, 41692, 64505, 2290, 71057, 119624, 1465, + 10850, 3943, 0, 41205, 41315, 118961, 119333, 67148, 5352, 113753, 0, + 8839, 41314, 7384, 7785, 41204, 127322, 41209, 69637, 92241, 43607, + 71254, 0, 5420, 3897, 10134, 0, 74417, 4018, 7150, 68127, 0, 0, 0, 0, + 127526, 2561, 68621, 3542, 7148, 12076, 7951, 68152, 118857, 5303, 6276, + 1706, 120750, 78751, 7146, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, + 860, 0, 10506, 983435, 69641, 10753, 10830, 119339, 615, 64490, 7574, + 74082, 77922, 0, 12909, 43016, 64559, 127028, 0, 127029, 67996, 2020, + 983350, 4022, 128783, 0, 77923, 126593, 41691, 0, 917818, 74329, 0, + 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, 7000, 3904, + 983628, 73737, 125105, 118931, 119630, 13123, 10846, 3450, 127360, 7397, + 118807, 0, 42778, 10000, 41088, 449, 0, 3777, 68458, 113725, 9636, 0, + 10738, 69634, 9367, 593, 41085, 3999, 65226, 41713, 12764, 983723, 64409, + 3596, 0, 128090, 9763, 120280, 74609, 12347, 124, 12981, 41127, 2092, + 92687, 0, 127555, 0, 10820, 43987, 0, 128907, 1769, 41715, 2463, 71214, + 983947, 12770, 71222, 1538, 92617, 43124, 194614, 195058, 7795, 120300, + 129053, 4828, 1258, 127802, 2006, 0, 0, 9498, 127032, 127033, 120289, + 120288, 3939, 120290, 8846, 8943, 120287, 120286, 2650, 4491, 1961, + 42602, 11525, 120292, 1959, 120294, 55228, 11774, 41016, 983260, 68675, + 128054, 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, 41019, 127944, + 0, 65292, 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, 70864, 118879, + 55223, 0, 128071, 41826, 8865, 6402, 113827, 13279, 7917, 74755, 917948, + 7733, 0, 4998, 68493, 92332, 41950, 0, 4268, 0, 0, 70061, 4013, 128718, + 10881, 0, 0, 0, 74788, 2014, 2432, 71901, 9765, 0, 0, 917854, 195059, + 78357, 65281, 127825, 10949, 0, 0, 119315, 2015, 0, 0, 71840, 66318, + 43233, 917992, 42517, 0, 0, 0, 12698, 8094, 10135, 65909, 6474, 794, + 43497, 12656, 66335, 119353, 128270, 1665, 71853, 4833, 983053, 71188, + 127367, 0, 189, 12611, 0, 0, 2859, 4838, 0, 4834, 65078, 0, 92991, 4837, + 67413, 770, 92671, 811, 70062, 41042, 92915, 41318, 64427, 73999, 67693, + 78848, 3895, 0, 74341, 3976, 128466, 42859, 10193, 3116, 7747, 78488, 0, + 43496, 0, 0, 43686, 78846, 41877, 0, 2871, 64614, 127010, 999, 0, 6345, 41876, 2663, 2017, 0, 0, 11040, 10150, 0, 64308, 1522, 597, 4775, 12555, 12571, 12550, 12583, 12560, 2019, 12556, 12584, 3092, 0, 12562, 4783, - 12566, 12569, 12554, 0, 10812, 78851, 0, 0, 3078, 1402, 0, 128275, 0, 0, - 119248, 394, 3088, 0, 92172, 0, 3991, 64391, 0, 128524, 424, 66328, 1999, - 69659, 73914, 0, 0, 0, 0, 42231, 8246, 0, 0, 0, 41840, 983609, 2377, - 1298, 64011, 12572, 11318, 12557, 12559, 12570, 7479, 1003, 2373, 9446, - 7481, 9448, 48, 0, 9480, 481, 0, 9438, 9439, 9440, 9441, 8465, 9443, - 9444, 9445, 9430, 9431, 9432, 9433, 9434, 9435, 3984, 9437, 0, 0, 9424, - 9425, 9426, 9427, 9428, 9429, 64758, 2362, 9655, 0, 2004, 9096, 9782, - 128848, 9172, 128545, 19965, 0, 5955, 67666, 1108, 0, 74773, 0, 0, 64782, - 3926, 92448, 65210, 8798, 0, 92165, 1392, 0, 0, 127364, 10606, 8065, - 118805, 10353, 10417, 0, 0, 64524, 92418, 4019, 0, 983288, 43280, 8219, - 68402, 1812, 119963, 983692, 0, 126488, 42410, 74448, 119132, 6054, - 10697, 3169, 42297, 42322, 10642, 3909, 9950, 0, 128139, 983261, 68678, - 0, 0, 1049, 0, 65707, 2304, 41806, 92326, 42336, 3921, 0, 11775, 64760, + 12566, 12569, 12554, 0, 10812, 78851, 0, 917563, 3078, 1402, 0, 128275, + 0, 125072, 119248, 394, 3088, 0, 92172, 0, 3991, 64391, 129072, 128524, + 424, 66328, 1999, 69659, 73914, 0, 0, 66903, 0, 42231, 2209, 125103, 0, + 0, 41840, 66913, 2377, 1298, 64011, 12572, 11318, 12557, 12559, 12570, + 7479, 1003, 2373, 9446, 7481, 9448, 48, 0, 9480, 481, 0, 9438, 9439, + 9440, 9441, 8465, 9443, 9444, 9445, 9430, 9431, 9432, 9433, 9434, 9435, + 3984, 9437, 0, 92934, 9424, 9425, 9426, 9427, 9428, 9429, 64758, 2362, + 9655, 983709, 2004, 9096, 9782, 70842, 9172, 128545, 19965, 0, 5955, + 67666, 1108, 0, 74773, 0, 128909, 64782, 3926, 92448, 65210, 8798, 0, + 92165, 1392, 0, 983214, 127364, 10606, 8065, 118805, 10353, 10417, 0, + 128739, 64524, 92418, 4019, 0, 125082, 43280, 8219, 68402, 1812, 119963, + 983692, 129144, 126488, 42410, 74448, 119132, 6054, 10697, 3169, 42297, + 42322, 10642, 3909, 9950, 128848, 128139, 983261, 68678, 92917, 983790, + 1049, 43517, 65707, 2304, 41806, 92326, 42336, 3921, 0, 11775, 64760, 11766, 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, 36, 0, - 5153, 41805, 0, 73735, 763, 41808, 64910, 983130, 2009, 0, 0, 127142, - 9640, 119951, 0, 120695, 8621, 120523, 12852, 3031, 983050, 64361, 0, - 182, 194718, 92716, 92598, 119950, 42613, 9058, 366, 0, 9892, 5969, - 11754, 10848, 4570, 65301, 44013, 4255, 127889, 10102, 41189, 4003, - 41026, 68109, 13293, 41192, 69635, 0, 42251, 0, 42534, 65179, 11287, - 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 65861, 74083, 92600, 9932, 0, - 92423, 119955, 0, 9817, 0, 120140, 0, 12117, 66586, 4183, 10540, 66250, - 9063, 127045, 0, 119954, 0, 12897, 3792, 2011, 0, 6065, 43160, 0, 194715, - 8692, 41186, 41816, 41023, 41818, 41187, 11659, 7922, 12614, 2005, 8523, - 78002, 0, 7513, 1863, 4710, 0, 5956, 7621, 78006, 92624, 4705, 716, - 78004, 0, 4704, 120040, 120270, 42241, 161, 43977, 74546, 66214, 4706, 0, - 69914, 42672, 4709, 10680, 119065, 43293, 119944, 0, 119164, 120328, - 92467, 10187, 1700, 119223, 0, 0, 128119, 4004, 0, 10968, 43296, 983642, - 8506, 0, 0, 126996, 1005, 937, 78216, 4734, 2870, 0, 78218, 983109, 7463, - 4729, 0, 235, 1384, 4728, 0, 120420, 92490, 74449, 8109, 43105, 983174, - 4730, 447, 13186, 1513, 4733, 120415, 0, 0, 42527, 12911, 43427, 1383, - 8565, 2469, 120024, 6690, 6156, 68117, 43439, 7993, 4288, 120416, 2674, - 13238, 11922, 0, 120330, 3510, 13234, 0, 120407, 5605, 42095, 11364, 0, - 1380, 65617, 120253, 120261, 13196, 13197, 120309, 120682, 9495, 119346, - 0, 5959, 67984, 73976, 120305, 43371, 6941, 119349, 13205, 13211, 5801, + 5153, 41805, 0, 73735, 763, 41808, 64910, 983130, 2009, 0, 127985, 74245, + 9640, 119951, 0, 69895, 8621, 120523, 12852, 3031, 983050, 64361, 129088, + 182, 66414, 92716, 92598, 119950, 42613, 9058, 366, 0, 9892, 5969, 11754, + 10848, 4570, 65301, 44013, 4255, 127889, 10102, 41189, 4003, 41026, + 68109, 13293, 41192, 69635, 124977, 42251, 0, 42534, 65179, 11287, 6128, + 113811, 11034, 10923, 64423, 0, 65506, 0, 65861, 74083, 66872, 9932, + 43516, 92423, 119955, 119948, 9817, 0, 71234, 0, 12117, 66586, 4183, + 10540, 66250, 9063, 127045, 0, 119954, 113685, 12897, 3792, 2011, 0, + 6065, 43160, 128379, 194715, 8692, 41186, 41816, 41023, 41818, 41187, + 11659, 7922, 12614, 2005, 8523, 78002, 120035, 7513, 1863, 4710, 0, 5956, + 7621, 78006, 92624, 4705, 716, 78004, 0, 4704, 120040, 93024, 42241, 161, + 43977, 74546, 66214, 4706, 74077, 69914, 42672, 4709, 10680, 119065, + 43293, 119944, 983190, 119164, 120328, 92350, 10187, 1700, 119223, 0, 0, + 127202, 4004, 0, 10968, 43296, 983642, 8506, 113744, 194812, 126996, + 1005, 937, 78216, 4734, 2870, 0, 78218, 983109, 7463, 4729, 0, 235, 1384, + 4728, 0, 70494, 92490, 74449, 8109, 43105, 128623, 4730, 447, 13186, + 1513, 4733, 120415, 92548, 0, 42527, 12911, 43427, 1383, 8565, 2469, + 120024, 6690, 6156, 68117, 43439, 7993, 4288, 120416, 2674, 13238, 11922, + 0, 120330, 3510, 13234, 983832, 120407, 5605, 42095, 11364, 92286, 1380, + 65617, 11162, 120261, 13196, 13197, 120309, 67708, 9495, 119346, 127154, + 5959, 67984, 73976, 66275, 43371, 6941, 119349, 13205, 13211, 5801, 12769, 65905, 41697, 1283, 120302, 4779, 0, 3719, 4006, 983569, 19957, - 128773, 2021, 119332, 120699, 119150, 43028, 65493, 41838, 3875, 5962, - 64341, 92616, 9814, 43457, 5827, 3314, 7787, 78234, 65494, 68153, 0, 0, - 120636, 64531, 120692, 194626, 0, 0, 66316, 65467, 5771, 41298, 983794, - 9742, 521, 0, 10800, 92222, 8404, 194625, 483, 7096, 7089, 66323, 928, 0, - 0, 119018, 10599, 11586, 3989, 10971, 43748, 65782, 9841, 8843, 12145, - 92470, 10074, 78548, 0, 3769, 0, 0, 0, 983107, 9573, 0, 65290, 8849, 0, - 65855, 65112, 1796, 120505, 0, 69665, 8164, 41301, 3502, 0, 7388, 10621, - 73838, 78553, 5825, 13007, 68165, 0, 120457, 12661, 7608, 10354, 10418, - 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, 1390, 0, 0, 421, - 43536, 5846, 120120, 4130, 127775, 7595, 42588, 7600, 120121, 66035, - 983913, 0, 65851, 42607, 128190, 92403, 3168, 0, 42134, 11831, 2370, - 2846, 92605, 0, 0, 120132, 0, 1836, 0, 0, 92558, 3740, 69843, 6290, - 65374, 120451, 2390, 3944, 66628, 120434, 0, 6135, 3118, 74265, 119093, - 120446, 0, 0, 8127, 8975, 64739, 7943, 983743, 0, 10618, 2584, 0, 0, 0, - 9998, 128564, 0, 0, 0, 0, 6204, 0, 0, 8279, 8776, 64954, 4975, 70075, - 120130, 4267, 1631, 42206, 77983, 0, 195046, 65700, 66562, 0, 64645, 0, - 0, 126588, 12586, 0, 9242, 127922, 0, 4523, 5842, 10495, 3122, 983797, - 7793, 78275, 9328, 119104, 78393, 12604, 0, 6615, 2285, 92344, 3986, - 44025, 0, 8912, 64555, 7409, 0, 983358, 9541, 78276, 0, 11275, 8540, - 11498, 0, 983357, 41040, 2459, 0, 13060, 41041, 74413, 983138, 0, 0, - 68427, 10450, 12551, 41043, 7020, 120353, 3765, 983350, 0, 1606, 120348, - 120351, 3093, 68436, 0, 983061, 119613, 0, 0, 4312, 74091, 120337, - 120336, 11923, 4023, 120333, 5763, 94015, 4827, 10894, 12810, 64406, - 118785, 4455, 74321, 433, 119620, 66660, 2499, 0, 0, 118837, 11973, - 13089, 4293, 120329, 42224, 42758, 12196, 42837, 42226, 119319, 0, - 119126, 5817, 127806, 55277, 3120, 9797, 0, 0, 0, 10389, 126485, 0, 4895, - 65358, 0, 4359, 585, 2383, 3509, 70037, 486, 4290, 5758, 127546, 0, 0, - 7004, 0, 65880, 127886, 119048, 2380, 11380, 0, 93996, 2376, 0, 119320, - 0, 5197, 127046, 127047, 127048, 2366, 127050, 127051, 120554, 120045, 0, - 0, 0, 983084, 0, 0, 0, 74188, 71342, 983086, 983573, 120047, 128575, 0, - 0, 120049, 0, 1847, 0, 10339, 983365, 42384, 0, 4227, 74158, 0, 92501, - 43032, 0, 42365, 0, 12671, 11384, 0, 983465, 0, 64797, 983345, 5820, - 983344, 120052, 120065, 0, 120064, 120650, 42137, 9893, 2754, 12664, - 120063, 0, 7377, 127867, 41799, 65530, 1711, 12984, 43039, 3114, 6255, - 983340, 118938, 0, 10853, 926, 983369, 74184, 983368, 120055, 0, 43175, - 0, 43037, 41798, 41035, 11583, 127769, 41801, 119088, 119605, 520, 4200, - 12699, 8331, 0, 3091, 41034, 127353, 983681, 8360, 0, 78044, 321, 4229, - 64543, 917946, 65563, 0, 917974, 2861, 43793, 10095, 0, 9195, 92386, - 1861, 0, 73733, 0, 0, 43041, 0, 43794, 128530, 3859, 12181, 41660, 8209, - 0, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, 0, 743, 4414, - 120766, 0, 42632, 917973, 65161, 73896, 128589, 0, 1405, 119063, 43220, - 43341, 0, 19919, 0, 64532, 65367, 43710, 0, 0, 3513, 0, 118883, 43342, - 119064, 65529, 65364, 128197, 0, 6485, 1397, 0, 41986, 92678, 0, 0, - 74097, 0, 7471, 12079, 67997, 12682, 43287, 92317, 0, 983143, 983707, 0, - 0, 1099, 10490, 0, 10501, 65181, 74463, 0, 464, 41624, 65283, 67663, - 78222, 1346, 0, 917631, 64573, 64897, 423, 1818, 65144, 0, 8272, 127812, - 19911, 4218, 3087, 64960, 127234, 43564, 0, 0, 9584, 10465, 983902, - 74359, 12626, 9106, 0, 42642, 120230, 64750, 9390, 0, 41797, 0, 0, 265, - 41795, 64666, 126508, 43530, 2752, 0, 0, 983493, 59, 0, 983593, 0, 92371, - 77873, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, 42252, 42213, 8009, - 3305, 43033, 511, 92700, 66255, 13127, 120067, 0, 74397, 120235, 917977, - 65915, 1400, 41812, 10685, 194870, 2103, 10387, 4453, 43276, 917783, - 13159, 0, 6481, 41213, 0, 0, 0, 0, 41983, 74198, 6617, 9116, 119654, 0, - 462, 68110, 10493, 0, 8129, 0, 0, 74471, 6644, 11658, 0, 128245, 3452, - 11906, 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, - 11426, 77887, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, - 0, 41841, 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 120109, - 2851, 43017, 983589, 0, 4373, 78058, 0, 9587, 1789, 6671, 128840, 3100, - 0, 65360, 0, 92365, 917789, 64922, 0, 8190, 12083, 0, 0, 6506, 64312, - 74374, 2368, 0, 4419, 983847, 119125, 3439, 1825, 1192, 120106, 8891, - 3080, 120228, 2347, 5430, 0, 8990, 2848, 0, 128223, 92528, 249, 0, 0, 0, - 120658, 0, 0, 8883, 917802, 728, 68178, 995, 0, 0, 64826, 0, 917798, - 128348, 0, 19945, 8091, 558, 0, 12273, 194814, 983850, 12112, 69912, 0, - 0, 74419, 12335, 120104, 917795, 3443, 3129, 0, 2102, 65445, 78258, - 64891, 0, 7725, 65108, 78255, 0, 8624, 69246, 12446, 43295, 0, 41894, 0, - 6277, 41672, 41893, 10010, 128678, 3540, 128649, 835, 71340, 69816, - 119868, 74408, 0, 73959, 5426, 4258, 0, 0, 5424, 128127, 8283, 0, 5434, - 983590, 0, 19917, 11408, 0, 11947, 0, 1404, 3095, 11432, 128307, 3464, - 6486, 4819, 128233, 0, 570, 8095, 3672, 119864, 1498, 67866, 0, 128539, - 431, 0, 0, 128182, 128096, 68167, 983663, 13096, 128643, 0, 43408, 9516, - 128538, 5268, 42230, 42220, 0, 4450, 120511, 11547, 43417, 128542, 356, - 3477, 227, 10488, 68203, 382, 11418, 0, 195066, 0, 0, 0, 0, 6484, 2541, - 66039, 0, 78718, 92723, 3549, 0, 9110, 119665, 2743, 0, 43290, 194812, - 9097, 0, 43015, 8782, 0, 776, 2524, 42707, 8573, 0, 126494, 0, 0, 42694, - 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 92543, 0, 120733, - 12849, 3953, 1897, 0, 65094, 11994, 4339, 74556, 92654, 67843, 0, 0, 0, - 68473, 74104, 5228, 128804, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, 0, - 1162, 917847, 2671, 0, 0, 92632, 92631, 118865, 4553, 73811, 0, 195005, - 0, 0, 19921, 74331, 11424, 195006, 4567, 41891, 0, 983788, 55249, 4820, - 65239, 194662, 0, 194665, 43042, 119212, 1377, 12869, 4897, 42821, 9250, - 0, 4438, 64385, 0, 1753, 11331, 6147, 194941, 43282, 8833, 0, 0, 6504, - 78408, 126979, 10719, 0, 1898, 1413, 42443, 0, 802, 12141, 0, 194671, - 6648, 10671, 2528, 0, 64789, 9169, 838, 120087, 120697, 844, 5014, 0, - 256, 0, 9990, 0, 42739, 917851, 7542, 65464, 9726, 0, 6489, 10048, 74326, - 78719, 66573, 0, 78724, 78712, 11761, 194655, 0, 41094, 0, 0, 194893, 0, - 92689, 6196, 6945, 93969, 194890, 128184, 120491, 11816, 194943, 5733, - 2930, 0, 0, 41098, 0, 41093, 0, 66626, 588, 9760, 0, 194717, 1238, 200, - 983207, 1660, 73916, 0, 118905, 74362, 0, 92485, 194651, 0, 983706, 3394, - 194894, 120668, 0, 0, 127358, 66219, 127183, 43284, 194656, 7817, 1841, - 11055, 120533, 194979, 194982, 1669, 10776, 194981, 7701, 194980, 0, - 194995, 1732, 4030, 0, 3963, 66611, 127530, 41768, 6491, 0, 65324, 914, - 65323, 8071, 3538, 0, 2287, 65328, 92441, 74367, 7614, 0, 11819, 0, - 12009, 12399, 0, 67852, 65537, 0, 10841, 43430, 5301, 0, 92618, 5734, - 8960, 0, 92527, 65317, 77880, 0, 0, 0, 12304, 0, 0, 65315, 92670, 128511, - 0, 0, 0, 119621, 92529, 74536, 12447, 64486, 127374, 126562, 983129, 0, - 0, 983802, 42767, 10915, 0, 12007, 43695, 120520, 11975, 194878, 0, - 92604, 2555, 8629, 128640, 43168, 41872, 43706, 4496, 194879, 128148, - 120241, 0, 0, 0, 0, 64730, 70041, 66714, 68222, 0, 70076, 65596, 92306, - 11416, 4280, 67655, 8765, 12784, 7792, 1393, 126473, 67871, 74386, 0, - 8233, 12820, 0, 6683, 194876, 3442, 12144, 2841, 12543, 0, 1473, 42820, - 64329, 127832, 0, 68642, 6488, 357, 1048, 41100, 0, 41104, 94003, 3406, - 1054, 71320, 1040, 65450, 0, 4434, 1069, 0, 118862, 65737, 917765, - 128705, 0, 983693, 9693, 41943, 126564, 41931, 41759, 12757, 4353, 0, - 1059, 9790, 8995, 119974, 983696, 65937, 0, 41764, 10646, 0, 118833, - 92372, 0, 74830, 78569, 12743, 983689, 6480, 917761, 41779, 42580, 66601, - 12207, 119619, 6335, 66602, 11312, 64807, 0, 0, 41767, 119629, 983764, - 43020, 128271, 3955, 74254, 0, 983754, 917861, 0, 77926, 9770, 9246, - 12230, 0, 0, 0, 10448, 41783, 41786, 127093, 12797, 2755, 64571, 78578, - 194927, 4857, 0, 4428, 12794, 73755, 128061, 78574, 0, 74284, 0, 5747, - 78825, 0, 7978, 41092, 74571, 0, 11924, 43812, 42144, 65015, 0, 563, 0, - 983691, 12798, 11271, 57, 0, 0, 917860, 119043, 0, 94051, 43137, 694, 0, - 9876, 0, 119168, 0, 78822, 64537, 0, 277, 74385, 7229, 12761, 0, 0, - 13025, 64811, 8757, 78824, 126478, 1574, 7381, 0, 2525, 4852, 5749, - 68465, 13027, 42824, 120574, 1039, 7151, 10155, 5745, 188, 41858, 11592, - 0, 74015, 9055, 41853, 4858, 917780, 0, 436, 4771, 0, 2786, 0, 4856, - 8051, 0, 119609, 71327, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, - 983359, 73906, 128680, 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, - 194918, 68393, 0, 3504, 119178, 0, 10822, 5149, 66029, 10226, 65142, - 128025, 3594, 42424, 194959, 40, 12657, 983665, 0, 386, 0, 8834, 0, - 12815, 43574, 0, 73907, 0, 74196, 7220, 74504, 0, 74316, 0, 65322, 4304, - 74503, 8160, 78707, 194753, 0, 0, 128526, 1348, 92349, 78597, 126539, - 13303, 0, 92392, 194755, 7599, 1278, 43616, 13269, 0, 0, 74387, 78179, - 78598, 74492, 6097, 7568, 8780, 4982, 127464, 74501, 194763, 78592, - 194762, 2672, 3735, 127470, 13138, 42266, 9484, 10724, 41202, 71364, 0, - 43742, 0, 9487, 119959, 119117, 3842, 128768, 78668, 12442, 6193, 9791, - 127976, 0, 42516, 7228, 7559, 74803, 78468, 7873, 11399, 119219, 194691, - 194855, 194690, 194857, 3604, 120683, 119188, 128877, 78540, 78541, - 42507, 1962, 43305, 78476, 42505, 11660, 0, 2072, 92312, 6995, 74173, - 5437, 74174, 10669, 8702, 7964, 92352, 0, 199, 194843, 4105, 194845, - 194699, 194847, 194710, 119875, 13148, 7560, 78479, 9226, 78480, 195070, - 6472, 65814, 73954, 0, 4724, 0, 0, 9191, 0, 64432, 983817, 983247, - 195024, 10196, 7886, 0, 6585, 0, 6680, 195042, 0, 195051, 6679, 74412, - 92251, 194866, 74421, 11382, 983631, 983637, 127891, 127484, 194833, + 71186, 2021, 119332, 43877, 119150, 43028, 65493, 41838, 3875, 5962, + 64341, 92616, 9814, 43457, 5827, 3314, 7787, 71189, 65494, 68153, 126991, + 194697, 120636, 64531, 120692, 194626, 0, 0, 66316, 65467, 5771, 41298, + 983794, 9742, 521, 0, 10800, 92222, 8404, 194625, 483, 7096, 7089, 66323, + 928, 0, 0, 119018, 10599, 11586, 3989, 10971, 43748, 65782, 9841, 8843, + 12145, 67261, 10074, 78548, 93999, 3769, 0, 0, 128703, 983107, 9573, 0, + 65290, 8849, 119254, 65855, 65112, 1796, 71046, 0, 69665, 8164, 41301, + 3502, 0, 7388, 10621, 73838, 78553, 5825, 13007, 68165, 92203, 120456, + 12661, 7608, 10354, 10418, 42411, 2022, 0, 1409, 12195, 4001, 3112, + 10824, 120639, 1390, 70184, 0, 421, 43536, 5846, 120120, 4130, 127775, + 7595, 42588, 7600, 74400, 66035, 195091, 0, 65851, 42607, 128190, 92403, + 3168, 67733, 42134, 11831, 2370, 2846, 92605, 128183, 0, 120132, 0, 1836, + 0, 0, 92558, 3740, 69843, 6290, 65374, 120451, 2390, 3944, 66628, 120434, + 0, 6135, 3118, 74265, 119093, 113690, 77975, 0, 8127, 8975, 64739, 7943, + 124968, 119234, 10618, 2584, 0, 0, 128225, 9998, 120573, 0, 0, 127750, + 43508, 6204, 127044, 0, 8279, 8776, 64954, 4975, 70075, 120130, 4267, + 1631, 42206, 77983, 128015, 195046, 65700, 66386, 0, 64645, 0, 92887, + 126588, 12586, 0, 9242, 120100, 0, 4523, 5842, 10495, 3122, 983797, 7793, + 78275, 9328, 119104, 78393, 12604, 92885, 6615, 2285, 92344, 3986, 44025, + 0, 8912, 64555, 7409, 92247, 983358, 9541, 78276, 113669, 11275, 8540, + 11498, 0, 983357, 41040, 2459, 128629, 13060, 41041, 74413, 983138, 0, + 77931, 68427, 10450, 12551, 41043, 7020, 120353, 3765, 92881, 0, 1606, + 120348, 92299, 3093, 68436, 128040, 983061, 119613, 0, 0, 4312, 74091, + 120337, 120336, 11923, 4023, 120333, 5763, 94015, 4827, 10894, 12810, + 64406, 118785, 4455, 74321, 433, 119620, 66660, 2499, 67167, 67166, + 118837, 11973, 13089, 4293, 120329, 42224, 42758, 12196, 42837, 42226, + 119319, 0, 119126, 5817, 127806, 55277, 3120, 9797, 0, 0, 11086, 10389, + 126485, 0, 4895, 65358, 124941, 4359, 585, 2383, 3509, 70037, 486, 4290, + 5758, 127546, 0, 0, 7004, 113667, 65880, 126514, 119048, 2380, 11380, 0, + 93996, 2376, 78841, 119320, 0, 5197, 70839, 127047, 127048, 2366, 127050, + 127051, 70837, 120045, 0, 128554, 0, 983084, 0, 0, 0, 74188, 71342, + 78455, 983573, 120047, 128575, 120046, 127542, 120049, 0, 1847, 0, 10339, + 983365, 42384, 0, 4227, 74158, 0, 74498, 43032, 125010, 42365, 0, 12671, + 11384, 120059, 74264, 120058, 64797, 983345, 5820, 983344, 120052, + 120065, 128825, 120064, 120053, 42137, 9893, 2754, 12664, 120063, 128900, + 7377, 127867, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 983340, + 68660, 0, 10853, 926, 983369, 74184, 983368, 120055, 194993, 43175, 0, + 43037, 41798, 41035, 11583, 127769, 41801, 119088, 119605, 520, 4200, + 12699, 8331, 0, 3091, 41034, 66298, 983681, 8360, 983443, 78044, 321, + 4229, 64543, 128470, 65563, 0, 917974, 2861, 43793, 10095, 194735, 9195, + 92386, 1861, 0, 73733, 0, 0, 43041, 0, 43794, 128530, 3859, 12181, 41660, + 8209, 70793, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, 113699, + 743, 4414, 120766, 0, 42632, 917973, 65161, 73896, 128589, 0, 1405, + 119063, 43220, 43341, 0, 19919, 0, 64532, 65367, 43710, 11199, 194907, + 3513, 128854, 70341, 43342, 119064, 65529, 65364, 128197, 0, 6485, 1397, + 0, 41986, 92678, 0, 194784, 74097, 0, 7471, 12079, 67997, 6843, 43287, + 92317, 0, 67406, 983707, 0, 71914, 1099, 10490, 0, 10501, 65181, 74463, + 128952, 464, 41624, 65283, 67663, 78222, 1346, 0, 65679, 64573, 64897, + 423, 1818, 65144, 113748, 8272, 127812, 19911, 4218, 3087, 64960, 127234, + 43564, 0, 0, 9584, 10465, 983902, 74359, 12626, 9106, 0, 42642, 71235, + 64750, 9390, 0, 41797, 0, 0, 265, 41795, 64666, 74628, 43530, 2752, + 127365, 128459, 983493, 59, 983671, 983593, 11149, 78074, 77873, 41810, + 0, 7010, 0, 41809, 41495, 119364, 5877, 42252, 42213, 8009, 3305, 43033, + 511, 92700, 43848, 13127, 120067, 983946, 74397, 120235, 917977, 65915, + 1400, 41812, 10685, 194870, 2103, 10387, 4453, 43276, 917783, 11169, 0, + 6481, 41213, 0, 0, 129133, 129050, 41983, 74198, 6617, 9116, 119654, + 92995, 462, 68110, 10493, 917976, 8129, 92994, 128365, 74471, 6644, + 11658, 0, 128245, 3452, 11906, 9581, 1385, 3098, 0, 119013, 43340, 11123, + 41033, 6493, 42626, 0, 129051, 11426, 77887, 1681, 118789, 1204, 3755, + 64661, 7235, 10170, 3966, 8911, 0, 41841, 43338, 0, 0, 5726, 64915, + 42175, 983913, 0, 41497, 65044, 120109, 2851, 43017, 983589, 0, 4373, + 78058, 0, 9587, 1789, 6671, 128840, 3100, 0, 65360, 0, 92365, 917789, + 64922, 0, 8190, 12083, 0, 983930, 6506, 64312, 74374, 2368, 0, 4419, + 983847, 119125, 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, + 0, 8990, 2848, 92981, 128223, 73942, 249, 0, 0, 0, 120658, 119324, + 128712, 8883, 119860, 728, 11173, 995, 0, 0, 64826, 124931, 917798, + 128348, 0, 19945, 8091, 558, 0, 12273, 194814, 67714, 12112, 67272, + 67265, 67273, 67274, 12335, 120104, 68019, 3443, 3129, 67267, 2102, + 65445, 78258, 64891, 0, 7725, 65108, 11120, 9205, 8624, 69246, 12446, + 43295, 128519, 41894, 0, 6277, 41672, 41893, 10010, 127381, 3540, 128649, + 835, 71340, 69816, 119854, 74408, 0, 67108, 5426, 4258, 983231, 0, 5424, + 128127, 8283, 127978, 5434, 125004, 0, 19917, 11408, 0, 11947, 128330, + 1404, 3095, 11432, 128307, 3464, 6486, 4819, 128233, 0, 570, 8095, 3672, + 119864, 1498, 67866, 0, 128539, 431, 125062, 0, 128182, 128096, 68167, + 983663, 13096, 128643, 0, 43408, 9516, 128538, 5268, 42230, 42220, 0, + 4450, 120511, 11547, 43417, 128542, 356, 3477, 227, 10488, 68203, 382, + 11418, 0, 5878, 0, 0, 0, 0, 6484, 2541, 66039, 113777, 78718, 92723, + 3549, 195067, 9110, 119665, 2743, 0, 43290, 128585, 9097, 0, 43015, 8782, + 0, 776, 2524, 42707, 8573, 0, 126494, 0, 71102, 42694, 64944, 8952, 3856, + 118818, 125111, 5872, 6495, 129125, 0, 0, 92543, 67173, 67172, 12849, + 3953, 1897, 93071, 65094, 11994, 4339, 74556, 92654, 67843, 0, 0, 119087, + 68473, 74104, 5228, 119835, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, + 917553, 1162, 917847, 2671, 128567, 0, 92632, 92631, 118865, 4553, 73811, + 0, 195005, 118928, 0, 19921, 74331, 11424, 195006, 4567, 41891, 0, + 983788, 55249, 4820, 65239, 194662, 0, 194665, 43042, 119212, 1377, + 12869, 4897, 42821, 9250, 917558, 4438, 64385, 0, 1753, 11331, 6147, + 194941, 43282, 8833, 69998, 0, 6504, 78408, 126979, 10719, 128469, 1898, + 1413, 42443, 0, 802, 12141, 0, 194671, 6648, 10671, 2528, 0, 64789, 9169, + 838, 70372, 120697, 844, 5014, 66297, 256, 0, 9990, 0, 42739, 917851, + 7542, 65464, 9726, 0, 6489, 10048, 74326, 78719, 66573, 0, 78724, 78712, + 11761, 194655, 118874, 41094, 0, 129172, 194893, 78403, 92689, 6196, + 6945, 93969, 127990, 67095, 120491, 11816, 126567, 5733, 2930, 78406, 0, + 41098, 92771, 41093, 0, 66626, 588, 9760, 129112, 194717, 1238, 200, + 983207, 1660, 73916, 0, 67141, 74362, 0, 92485, 124930, 0, 983706, 3394, + 194894, 120668, 0, 69996, 127358, 66219, 72425, 43284, 127236, 7817, + 1841, 11055, 66835, 194979, 74607, 1669, 10776, 74534, 7701, 194980, 0, + 194995, 1732, 4030, 0, 3963, 66611, 127530, 41768, 6491, 127518, 65324, + 914, 65323, 8071, 3538, 0, 2287, 65328, 92441, 74367, 7614, 0, 11819, + 71908, 12009, 12399, 0, 67852, 65537, 0, 10841, 43430, 5301, 0, 92618, + 5734, 8960, 0, 70123, 65317, 77880, 0, 5876, 70374, 12304, 0, 0, 65315, + 92670, 128511, 71862, 0, 0, 119621, 11114, 71909, 12447, 64486, 127374, + 126562, 983129, 0, 0, 983802, 42767, 10915, 0, 12007, 43695, 120520, + 11975, 194878, 0, 92604, 2555, 8629, 128640, 41133, 41872, 43706, 4496, + 194879, 128065, 120241, 0, 0, 0, 983553, 64730, 70041, 66714, 68222, 0, + 70076, 65596, 92306, 11416, 4280, 67655, 8765, 12784, 7792, 1393, 78191, + 11157, 74386, 0, 8233, 12820, 0, 6683, 194876, 3442, 12144, 2841, 12543, + 0, 1473, 42820, 64329, 127832, 0, 68642, 6488, 357, 1048, 41100, 72417, + 41104, 94003, 3406, 1054, 71320, 1040, 65450, 983383, 4434, 1069, 0, + 118862, 65737, 194634, 128705, 0, 124955, 9693, 41943, 68305, 41931, + 41759, 12757, 4353, 983351, 1059, 9790, 8995, 119974, 917770, 65937, + 78572, 41758, 10646, 0, 118833, 92372, 70424, 74830, 78569, 12743, + 983689, 6480, 917761, 41779, 42580, 66601, 12207, 77895, 6335, 66602, + 11312, 64807, 92962, 69989, 41767, 119629, 983764, 43020, 128271, 3955, + 74254, 120632, 983754, 917861, 70187, 69975, 9770, 9246, 12230, 125047, + 0, 78580, 10448, 41783, 41786, 127093, 12797, 2755, 64571, 78578, 194927, + 4857, 983577, 4428, 12794, 73755, 128061, 78574, 0, 11116, 43842, 5747, + 78825, 70471, 7978, 41092, 74571, 0, 11924, 43812, 42144, 65015, 0, 563, + 0, 983691, 12798, 11271, 57, 92717, 983239, 917860, 119043, 0, 94051, + 43137, 694, 0, 9876, 0, 119168, 0, 70392, 64537, 0, 277, 74385, 7229, + 12761, 0, 74466, 13025, 64811, 8757, 78824, 78188, 1574, 7381, 0, 2525, + 4852, 5749, 68465, 13027, 42824, 120574, 1039, 7151, 10155, 5745, 188, + 41858, 11592, 129156, 69725, 9055, 41853, 4858, 917780, 0, 436, 4771, 0, + 2786, 93028, 4856, 8051, 92500, 119609, 71327, 9644, 0, 125009, 128873, + 194916, 120732, 66710, 118834, 983359, 73906, 67409, 127114, 0, 10234, + 5843, 11939, 70346, 42157, 0, 3157, 194918, 68393, 0, 3504, 119178, 0, + 10822, 5149, 66029, 10226, 65142, 128025, 3594, 42424, 124993, 40, 12657, + 983665, 0, 386, 0, 8834, 0, 12815, 43574, 128407, 73907, 0, 70113, 7220, + 11839, 124984, 74316, 0, 65322, 4304, 74503, 8160, 74314, 194753, 0, 0, + 128526, 1348, 92349, 78597, 126539, 13303, 70406, 92392, 128474, 7599, + 1278, 43616, 13269, 127805, 127110, 74387, 78179, 78598, 74492, 6097, + 7568, 8780, 4982, 127464, 74501, 194763, 78592, 194762, 2672, 3735, + 127470, 13138, 42266, 9484, 10724, 41202, 71364, 128370, 43742, 128373, + 9487, 119959, 92913, 3842, 71911, 78668, 12442, 6193, 9791, 119344, 0, + 42516, 7228, 7559, 74803, 78468, 7873, 11399, 119219, 194691, 70006, + 194690, 127537, 3604, 120683, 119188, 128877, 78540, 78541, 42507, 1962, + 43305, 78476, 42505, 11660, 0, 2072, 92312, 6995, 74173, 5437, 74174, + 10669, 8702, 7964, 92352, 983776, 199, 194843, 4105, 194845, 194699, + 194847, 194710, 119875, 13148, 7560, 78479, 9226, 78478, 195070, 6472, + 65814, 71919, 0, 4724, 128491, 195041, 9191, 0, 64432, 983817, 113680, + 119190, 10196, 7886, 0, 6585, 0, 6680, 195042, 0, 71872, 6679, 74412, + 92251, 194866, 74421, 11382, 128254, 43862, 78591, 113733, 194833, 194832, 6681, 127482, 12693, 194836, 42727, 78196, 128252, 78195, 65442, - 119610, 69733, 9989, 43248, 66248, 194816, 0, 11321, 128845, 194820, - 194819, 5297, 7042, 13284, 6112, 7968, 194825, 73927, 92444, 194736, - 65746, 127476, 69889, 74389, 128696, 4342, 42839, 194831, 1677, 0, 0, + 119610, 69733, 9989, 43248, 66248, 194816, 0, 11321, 128845, 120809, + 194819, 5297, 7042, 13284, 6112, 7968, 93010, 73927, 92444, 127336, + 65746, 118796, 69889, 74389, 128696, 4342, 42839, 128979, 1677, 0, 0, 126590, 917855, 11091, 11011, 2719, 0, 0, 119595, 10160, 0, 0, 7585, - 65169, 2052, 4308, 92174, 43000, 7505, 543, 64916, 64736, 0, 0, 64655, 0, - 118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 127170, 0, 983625, 0, - 0, 12994, 92728, 10828, 983943, 6228, 4307, 3482, 128527, 0, 0, 0, 506, - 74573, 41194, 65735, 2055, 43255, 41195, 0, 8169, 983680, 8841, 0, 516, - 93974, 2063, 119051, 34, 128850, 120186, 11504, 1612, 74333, 120182, - 11827, 74308, 12001, 120178, 10242, 64564, 120179, 67986, 6584, 7749, - 11037, 0, 1758, 127092, 10667, 10560, 120197, 92593, 1935, 11517, 120193, - 120196, 120195, 1931, 120189, 74839, 120191, 1217, 64702, 12643, 825, - 127838, 194905, 12294, 92428, 78834, 9138, 78831, 78833, 12631, 78829, - 11080, 74554, 64000, 5591, 1239, 0, 11313, 0, 3403, 0, 0, 64364, 92269, - 0, 74582, 8998, 12988, 0, 9152, 983849, 0, 126484, 67589, 41850, 64290, - 3433, 92393, 12615, 1594, 42192, 6914, 67603, 0, 119569, 74565, 41353, - 67602, 67611, 4337, 0, 127296, 918, 65035, 41351, 7681, 194900, 42577, - 41393, 12668, 194904, 2477, 127285, 0, 127301, 0, 67604, 194880, 127235, - 573, 127282, 194884, 11417, 194886, 119814, 194888, 67599, 0, 194889, - 67607, 11482, 0, 3981, 3357, 0, 42223, 4207, 1288, 78842, 78839, 68419, - 78837, 11589, 42195, 194872, 194599, 127263, 64602, 67618, 92539, 0, - 42788, 68416, 64480, 194875, 8423, 3348, 448, 68476, 9717, 0, 0, 997, 0, - 0, 92577, 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, 127760, - 73796, 0, 119228, 12035, 0, 2818, 0, 74411, 73793, 0, 4172, 0, 0, 8373, - 10873, 12197, 0, 0, 92265, 69706, 0, 78210, 0, 128110, 194865, 126982, - 74563, 64828, 11419, 194868, 766, 1257, 0, 118845, 11381, 3265, 66617, - 3274, 127365, 126523, 94042, 983950, 74522, 41989, 0, 0, 128798, 3263, 0, - 65672, 0, 3270, 64539, 11489, 0, 0, 0, 0, 9505, 65518, 194776, 756, - 194605, 0, 0, 0, 7261, 0, 186, 0, 119156, 5770, 13179, 65830, 12612, - 12949, 64856, 12800, 983901, 74203, 64718, 11507, 0, 92434, 118929, 0, - 11578, 0, 119296, 0, 0, 0, 0, 74568, 9254, 0, 1794, 120217, 64521, 5624, - 120220, 120221, 119958, 120223, 3617, 66636, 64886, 94061, 120212, - 120213, 120214, 1872, 66508, 120467, 41079, 10748, 5502, 119330, 4452, 0, - 983771, 92526, 4511, 0, 983877, 64678, 11425, 0, 43245, 1231, 194783, - 69903, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, 9546, 0, 0, 120478, - 120200, 65205, 120202, 64063, 9878, 74780, 119626, 78202, 64058, 8799, - 42131, 0, 64062, 1028, 64060, 64059, 837, 10567, 0, 43103, 0, 120754, - 11427, 2902, 64043, 64042, 43749, 10756, 64047, 42606, 64045, 64044, - 43979, 10076, 64040, 43060, 194942, 1034, 3392, 127771, 43091, 64033, - 64032, 42735, 64038, 64037, 64036, 64035, 4291, 194928, 64015, 64014, - 64681, 194930, 0, 78145, 0, 43090, 0, 3476, 8973, 64012, 42473, 64010, - 64008, 64007, 2003, 7706, 64517, 78153, 2538, 64009, 204, 0, 4802, 4111, - 8239, 9098, 4805, 64001, 64057, 7885, 7247, 64054, 983266, 0, 4767, 9343, - 64049, 64048, 120034, 1133, 64053, 64052, 43453, 64050, 41340, 118975, - 194835, 10005, 12329, 41333, 0, 8489, 1942, 0, 194834, 42520, 128249, 0, - 0, 10760, 64023, 64022, 64021, 6582, 43670, 0, 64025, 9167, 42151, 78244, - 983232, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582, 78252, 78248, - 77914, 78246, 78247, 0, 77915, 78766, 6788, 13094, 77920, 7532, 41414, - 78520, 3179, 78518, 64769, 78514, 78517, 11461, 74454, 10751, 9051, - 120720, 6708, 10535, 983627, 68218, 55274, 2008, 64031, 64030, 294, - 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, 41788, 194844, - 0, 4351, 6343, 43247, 119888, 0, 119886, 119891, 119892, 119889, 11433, - 119895, 119896, 0, 7801, 65578, 194839, 12915, 43968, 3297, 9699, 194955, - 1135, 0, 0, 128525, 1995, 6722, 983925, 0, 2552, 41546, 60, 68394, 8649, - 41549, 78496, 983327, 0, 6682, 0, 78679, 64710, 41547, 983630, 2013, - 128291, 78530, 78532, 78528, 78529, 12832, 78493, 8081, 8362, 3537, - 119908, 9137, 7155, 8999, 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, - 2002, 2000, 120175, 537, 0, 4179, 65119, 1998, 0, 1842, 0, 92674, 9628, - 68446, 12081, 9826, 64502, 1767, 0, 0, 0, 120201, 983646, 0, 0, 3059, - 44024, 120204, 119953, 92693, 0, 0, 92452, 4100, 920, 1811, 1355, 0, 0, - 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 128792, 10742, 0, 42918, 1994, - 9281, 3296, 12865, 1997, 1895, + 65169, 2052, 4308, 92174, 43000, 7505, 543, 64916, 64736, 118835, 0, + 64655, 0, 118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 127170, 0, + 983625, 92550, 0, 12994, 92728, 10828, 74378, 6228, 4307, 3482, 128527, + 0, 72389, 0, 506, 74573, 41194, 65735, 2055, 43255, 41195, 0, 8169, + 983680, 8841, 0, 516, 93974, 2063, 119051, 34, 128850, 120186, 11504, + 1612, 74333, 120182, 11827, 67165, 12001, 120178, 10242, 64564, 120179, + 67986, 6584, 7749, 11037, 128743, 1758, 119074, 10667, 10560, 120197, + 92593, 1935, 11517, 120193, 120196, 120195, 1931, 120189, 74839, 120191, + 1217, 64702, 12643, 825, 127838, 194905, 12294, 92428, 78834, 9138, + 78831, 78833, 12631, 71871, 11080, 74554, 64000, 5591, 1239, 127199, + 11313, 194803, 3403, 0, 120271, 64364, 92269, 127904, 72431, 8998, 12988, + 119983, 9152, 983849, 0, 126484, 67589, 41850, 64290, 3433, 92393, 12615, + 1594, 42192, 6914, 66392, 0, 119569, 74565, 41353, 67602, 67611, 4337, 0, + 127296, 918, 65035, 41351, 7681, 194900, 42577, 41393, 12668, 72395, + 2477, 127285, 0, 127301, 0, 67604, 67683, 127235, 573, 127282, 120543, + 11417, 194886, 119814, 119309, 67599, 0, 72410, 67607, 11482, 0, 3981, + 3357, 0, 42223, 4207, 1288, 78503, 78839, 67728, 78837, 11589, 42195, + 74477, 119997, 127263, 64602, 67618, 92539, 0, 42788, 68416, 64480, + 194875, 8423, 3348, 448, 66907, 9717, 119311, 0, 997, 0, 0, 92577, 0, + 11440, 11379, 42000, 13139, 42221, 65013, 126999, 127760, 72390, 0, + 119228, 12035, 0, 2818, 0, 74411, 73793, 0, 4172, 71252, 119992, 8373, + 10873, 12197, 125074, 195014, 92265, 69706, 128540, 6834, 127251, 128110, + 194865, 126982, 74563, 64828, 11419, 194868, 766, 1257, 194598, 118845, + 11381, 3265, 66617, 3274, 126629, 126523, 94042, 983950, 74522, 41989, 0, + 0, 113769, 3263, 0, 65672, 69243, 3270, 64539, 11489, 0, 0, 0, 0, 9505, + 65518, 128498, 756, 194605, 0, 0, 0, 7261, 92547, 186, 0, 119156, 5770, + 13179, 65830, 12612, 12949, 64856, 12800, 983901, 74203, 64718, 11507, 0, + 92434, 74626, 0, 11578, 0, 119296, 0, 0, 125101, 0, 70083, 9254, 66877, + 1794, 68310, 64521, 5624, 120220, 120221, 119958, 120223, 3617, 66636, + 64886, 94061, 68659, 120213, 120214, 1872, 66508, 120467, 41079, 10748, + 5502, 119330, 4452, 128088, 983771, 92526, 4511, 0, 983877, 64678, 11425, + 0, 43245, 1231, 92390, 69903, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, + 9546, 0, 0, 70421, 120200, 65205, 120202, 64063, 9878, 74780, 119626, + 78202, 64058, 8799, 42131, 128662, 64062, 1028, 64060, 64059, 837, 10567, + 72384, 43103, 0, 120754, 11427, 2902, 64043, 64042, 43749, 10756, 64047, + 42606, 64045, 64044, 43979, 10076, 64040, 43060, 194942, 1034, 3392, + 127771, 43091, 64033, 64032, 42735, 43498, 64037, 64036, 64035, 4291, + 129157, 64015, 64014, 64681, 194930, 127142, 78145, 71898, 43090, 0, + 3476, 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, 64517, 78153, + 2538, 64009, 204, 0, 4802, 4111, 8239, 9098, 4805, 64001, 64057, 7885, + 7247, 64054, 983266, 0, 4767, 9343, 64049, 64048, 120034, 1133, 64053, + 64052, 43453, 64050, 41340, 118975, 194835, 10005, 12329, 41333, 0, 8489, + 1942, 0, 194834, 42520, 65510, 125044, 68291, 10760, 64023, 64022, 64021, + 6582, 43670, 127798, 64025, 9167, 42151, 78244, 983232, 2026, 64019, + 64018, 64017, 64016, 12768, 0, 7582, 78252, 78248, 77914, 78246, 78247, + 0, 77915, 78766, 6788, 13094, 77920, 7532, 41414, 78520, 3179, 78518, + 64769, 78514, 78517, 11461, 74454, 10751, 9051, 120720, 6708, 10535, + 983627, 68218, 55274, 2008, 64031, 64030, 294, 41874, 0, 64790, 65929, 0, + 129063, 0, 0, 64028, 8146, 64026, 41788, 194844, 0, 4351, 6343, 43247, + 119888, 70153, 119886, 119891, 72387, 119889, 11433, 119895, 119896, 0, + 7801, 65578, 194839, 12915, 43968, 3297, 9699, 127957, 1135, 0, 128807, + 128525, 1995, 6722, 983925, 0, 2552, 41546, 60, 68394, 8649, 41549, + 78496, 72386, 0, 6682, 983917, 78679, 43833, 41547, 983630, 2013, 128291, + 78530, 78532, 78528, 78529, 12832, 78493, 8081, 8362, 3537, 119908, 9137, + 7155, 8999, 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, + 120175, 537, 92976, 4179, 65119, 1998, 120746, 1842, 0, 92674, 9628, + 68446, 12081, 9826, 64502, 1767, 0, 0, 120001, 120201, 983646, 124975, + 127991, 3059, 44024, 120204, 43491, 92693, 0, 0, 92452, 4100, 920, 1811, + 1355, 43189, 0, 3592, 10078, 0, 78162, 119558, 8592, 65870, 66417, 74504, + 10742, 72400, 42918, 1994, 9281, 3296, 12865, 1997, 1895, }; #define code_magic 47 -- cgit v1.2.1 From d40fb3635a8fd49d979fcd5ca65a183f776d2af3 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Mon, 7 Jul 2014 19:08:47 -0400 Subject: Fix compilation failure (followup to #21803) --- Modules/cmathmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 91b369a2f5..8d37f6bd0c 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -313,7 +313,7 @@ c_atanh(Py_complex z) /* Reduce to case where z.real >= 0., using atanh(z) = -atanh(-z). */ if (z.real < 0.) { - return c_neg(c_atanh(c_neg(z))); + return _Py_c_neg(c_atanh(_Py_c_neg(z))); } ay = fabs(z.imag); @@ -842,7 +842,7 @@ cmath_log(PyObject *self, PyObject *args) x = c_log(x); if (PyTuple_GET_SIZE(args) == 2) { y = c_log(y); - x = c_quot(x, y); + x = _Py_c_quot(x, y); } PyFPE_END_PROTECT(x) if (errno != 0) @@ -943,7 +943,7 @@ cmath_polar(PyObject *self, PyObject *args) return NULL; PyFPE_START_PROTECT("polar function", return 0) phi = c_atan2(z); /* should not cause any exception */ - r = c_abs(z); /* sets errno to ERANGE on overflow; otherwise 0 */ + r = _Py_c_abs(z); /* sets errno to ERANGE on overflow; otherwise 0 */ PyFPE_END_PROTECT(r) if (errno != 0) return math_error(); -- cgit v1.2.1 From b96ae43441776f4059e7a216566487980a8d069d Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 11 Jul 2014 17:04:41 +0200 Subject: Issue #21932: os.read() now uses a :c:func:`Py_ssize_t` type instead of :c:type:`int` for the size to support reading more than 2 GB at once. On Windows, the size is truncted to INT_MAX. As any call to os.read(), the OS may read less bytes than the number of requested bytes. --- Modules/posixmodule.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 899618f266..b7acbc330c 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -7989,11 +7989,18 @@ Read a file descriptor."); static PyObject * posix_read(PyObject *self, PyObject *args) { - int fd, size; + int fd; + Py_ssize_t size; Py_ssize_t n; PyObject *buffer; - if (!PyArg_ParseTuple(args, "ii:read", &fd, &size)) + if (!PyArg_ParseTuple(args, "in:read", &fd, &size)) return NULL; + if (!_PyVerify_fd(fd)) + return posix_error(); +#ifdef MS_WINDOWS + if (size > INT_MAX) + size = INT_MAX; +#endif if (size < 0) { errno = EINVAL; return posix_error(); @@ -8001,12 +8008,12 @@ posix_read(PyObject *self, PyObject *args) buffer = PyBytes_FromStringAndSize((char *)NULL, size); if (buffer == NULL) return NULL; - if (!_PyVerify_fd(fd)) { - Py_DECREF(buffer); - return posix_error(); - } Py_BEGIN_ALLOW_THREADS +#ifdef MS_WINDOWS + n = read(fd, PyBytes_AS_STRING(buffer), (int)size); +#else n = read(fd, PyBytes_AS_STRING(buffer), size); +#endif Py_END_ALLOW_THREADS if (n < 0) { Py_DECREF(buffer); -- cgit v1.2.1 From c71951280e6bfcef072f7cd044046ca0ffa2ecfd Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 21 Jul 2014 12:30:22 +0200 Subject: Issue #22018: Add _testcapi.raise_signal() - Use _testcapi.raise_signal() in test_signal - close also os.pipe() file descriptors in some test_signal tests where they were not closed properly - Remove faulthandler._sigill() and faulthandler._sigbus(): reuse _testcapi.raise_signal() in test_faulthandler --- Modules/_testcapimodule.c | 21 +++++++++++++++++++++ Modules/faulthandler.c | 26 -------------------------- 2 files changed, 21 insertions(+), 26 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 05a27d61f6..ebbf88f71a 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -11,6 +11,7 @@ #include #include "structmember.h" #include "datetime.h" +#include #ifdef WITH_THREAD #include "pythread.h" @@ -3063,6 +3064,24 @@ exit: } #endif /* WITH_THREAD */ +static PyObject* +test_raise_signal(PyObject* self, PyObject *args) +{ + int signum, err; + + if (PyArg_ParseTuple(args, "i:raise_signal", &signum) < 0) + return NULL; + + err = raise(signum); + if (err) + return PyErr_SetFromErrno(PyExc_OSError); + + if (PyErr_CheckSignals() < 0) + return NULL; + + Py_RETURN_NONE; +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3198,6 +3217,8 @@ static PyMethodDef TestMethods[] = { {"docstring_with_signature_with_defaults", (PyCFunction)test_with_docstring, METH_NOARGS, docstring_with_signature_with_defaults}, + {"raise_signal", + (PyCFunction)test_raise_signal, METH_VARARGS}, #ifdef WITH_THREAD {"call_in_temporary_c_thread", call_in_temporary_c_thread, METH_O, PyDoc_STR("set_error_class(error_class) -> None")}, diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 6a145dc5f0..97963efcdf 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -874,24 +874,6 @@ faulthandler_sigabrt(PyObject *self, PyObject *args) Py_RETURN_NONE; } -#ifdef SIGBUS -static PyObject * -faulthandler_sigbus(PyObject *self, PyObject *args) -{ - raise(SIGBUS); - Py_RETURN_NONE; -} -#endif - -#ifdef SIGILL -static PyObject * -faulthandler_sigill(PyObject *self, PyObject *args) -{ - raise(SIGILL); - Py_RETURN_NONE; -} -#endif - static PyObject * faulthandler_fatal_error_py(PyObject *self, PyObject *args) { @@ -1012,14 +994,6 @@ static PyMethodDef module_methods[] = { PyDoc_STR("_sigabrt(): raise a SIGABRT signal")}, {"_sigfpe", (PyCFunction)faulthandler_sigfpe, METH_NOARGS, PyDoc_STR("_sigfpe(): raise a SIGFPE signal")}, -#ifdef SIGBUS - {"_sigbus", (PyCFunction)faulthandler_sigbus, METH_NOARGS, - PyDoc_STR("_sigbus(): raise a SIGBUS signal")}, -#endif -#ifdef SIGILL - {"_sigill", (PyCFunction)faulthandler_sigill, METH_NOARGS, - PyDoc_STR("_sigill(): raise a SIGILL signal")}, -#endif {"_fatal_error", faulthandler_fatal_error_py, METH_VARARGS, PyDoc_STR("_fatal_error(message): call Py_FatalError(message)")}, #if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION) -- cgit v1.2.1 From 4dadc953363de0904b610ad73a3ccc0b79af8a6c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 21 Jul 2014 16:28:54 +0200 Subject: Issue #22018: signal.set_wakeup_fd() now raises an OSError instead of a ValueError on fstat() failure. --- Modules/signalmodule.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index cf4ba6123a..c4f0121644 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -437,12 +437,20 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) return NULL; } #endif - if (fd != -1 && (!_PyVerify_fd(fd) || fstat(fd, &buf) != 0)) { - PyErr_SetString(PyExc_ValueError, "invalid fd"); - return NULL; + + if (fd != -1) { + if (!_PyVerify_fd(fd)) { + PyErr_SetString(PyExc_ValueError, "invalid fd"); + return NULL; + } + + if (fstat(fd, &buf) != 0) + return PyErr_SetFromErrno(PyExc_OSError); } + old_fd = wakeup_fd; wakeup_fd = fd; + return PyLong_FromLong(old_fd); } -- cgit v1.2.1 From e7c2ed768ba96a0d7859fdad3b032a9d14bfabd7 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 23 Jul 2014 22:33:50 +0300 Subject: Issue #4350: Removed a number of out-of-dated and non-working for a long time Tkinter methods. --- Modules/tkappinit.c | 19 ------------------- 1 file changed, 19 deletions(-) (limited to 'Modules') diff --git a/Modules/tkappinit.c b/Modules/tkappinit.c index 2ed85949cb..7616d9d319 100644 --- a/Modules/tkappinit.c +++ b/Modules/tkappinit.c @@ -26,9 +26,6 @@ static int tk_load_failed; int Tcl_AppInit(Tcl_Interp *interp) { -#ifdef WITH_MOREBUTTONS - Tk_Window main_window; -#endif const char *_tkinter_skip_tk_init; #ifdef TKINTER_PROTECT_LOADTK const char *_tkinter_tk_failed; @@ -113,29 +110,13 @@ Tcl_AppInit(Tcl_Interp *interp) return TCL_ERROR; } -#ifdef WITH_MOREBUTTONS - main_window = Tk_MainWindow(interp); -#else Tk_MainWindow(interp); -#endif #ifdef TK_AQUA TkMacOSXInitAppleEvents(interp); TkMacOSXInitMenus(interp); #endif -#ifdef WITH_MOREBUTTONS - { - extern Tcl_CmdProc studButtonCmd; - extern Tcl_CmdProc triButtonCmd; - - Tcl_CreateCommand(interp, "studbutton", studButtonCmd, - (ClientData) main_window, NULL); - Tcl_CreateCommand(interp, "tributton", triButtonCmd, - (ClientData) main_window, NULL); - } -#endif - #ifdef WITH_PIL /* 0.2b5 and later -- not yet released as of May 14 */ { extern void TkImaging_Init(Tcl_Interp *); -- cgit v1.2.1 From 527c3ebabb6faa2f93b7453cfaf5f6fe3212239b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Jul 2014 22:56:55 +0200 Subject: Issue #22042: Avoid dangerous C cast in socket.setblocking() Avoid cast from (int*) to (u_long*), even if sizeof(int) == sizeof(u_long). --- Modules/socketmodule.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 780447c041..f510f0e214 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -548,6 +548,9 @@ set_gaierror(int error) static int internal_setblocking(PySocketSockObject *s, int block) { +#ifdef MS_WINDOWS + u_long arg; +#endif #if !defined(MS_WINDOWS) \ && !((defined(HAVE_SYS_IOCTL_H) && defined(FIONBIO))) int delay_flag, new_delay_flag; @@ -574,8 +577,8 @@ internal_setblocking(PySocketSockObject *s, int block) fcntl(s->sock_fd, F_SETFL, new_delay_flag); #endif #else /* MS_WINDOWS */ - block = !block; - ioctlsocket(s->sock_fd, FIONBIO, (u_long*)&block); + arg = !block; + ioctlsocket(s->sock_fd, FIONBIO, &arg); #endif /* MS_WINDOWS */ Py_END_ALLOW_THREADS -- cgit v1.2.1 From 7445f5f4dfaa16f5a574d37fefd6ea850abc3fd3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 24 Jul 2014 21:58:53 +0200 Subject: tets --- Modules/signalmodule.c | 155 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 136 insertions(+), 19 deletions(-) (limited to 'Modules') diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index c4f0121644..a315f23a03 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -4,6 +4,9 @@ /* XXX Signals should be recorded per thread, now we have thread state. */ #include "Python.h" +#ifdef MS_WINDOWS +#include "socketmodule.h" /* needed for SOCKET_T */ +#endif #ifndef MS_WINDOWS #include "posixmodule.h" #endif @@ -87,7 +90,18 @@ static volatile struct { PyObject *func; } Handlers[NSIG]; +#ifdef MS_WINDOWS +#define INVALID_SOCKET ((SOCKET_T)-1) + +static volatile struct { + SOCKET_T fd; + int send_err_set; + int send_errno; + int send_win_error; +} wakeup = {INVALID_SOCKET, 0, 0}; +#else static volatile sig_atomic_t wakeup_fd = -1; +#endif /* Speed up sigcheck() when none tripped */ static volatile sig_atomic_t is_tripped = 0; @@ -171,6 +185,33 @@ checksignals_witharg(void * unused) return PyErr_CheckSignals(); } +#ifdef MS_WINDOWS +static int +report_wakeup_error(void* Py_UNUSED(data)) +{ + PyObject *res; + + if (wakeup.send_win_error) { + /* PyErr_SetExcFromWindowsErr() invokes FormatMessage() which + recognizes the error codes used by both GetLastError() and + WSAGetLastError */ + res = PyErr_SetExcFromWindowsErr(PyExc_OSError, wakeup.send_win_error); + } + else { + errno = wakeup.send_errno; + res = PyErr_SetFromErrno(PyExc_OSError); + } + + assert(res == NULL); + wakeup.send_err_set = 0; + + PySys_WriteStderr("Exception ignored when trying to send to the " + "signal wakeup fd:\n"); + PyErr_WriteUnraisable(NULL); + + return 0; +} +#else static int report_wakeup_error(void *data) { @@ -183,26 +224,51 @@ report_wakeup_error(void *data) errno = save_errno; return 0; } +#endif static void trip_signal(int sig_num) { unsigned char byte; - int rc = 0; + Py_ssize_t rc; Handlers[sig_num].tripped = 1; + +#ifdef MS_WINDOWS + if (wakeup.fd != INVALID_SOCKET) { + byte = (unsigned char)sig_num; + do { + rc = send(wakeup.fd, &byte, 1, 0); + } while (rc < 0 && errno == EINTR); + + /* we only have a storage for one error in the wakeup structure */ + if (rc < 0 && !wakeup.send_err_set) { + wakeup.send_err_set = 1; + wakeup.send_errno = errno; + wakeup.send_win_error = GetLastError(); + Py_AddPendingCall(report_wakeup_error, NULL); + } + } +#else if (wakeup_fd != -1) { byte = (unsigned char)sig_num; - while ((rc = write(wakeup_fd, &byte, 1)) == -1 && errno == EINTR); - if (rc == -1) - Py_AddPendingCall(report_wakeup_error, (void *) (Py_intptr_t) errno); + do { + rc = write(wakeup_fd, &byte, 1); + } while (rc < 0 && errno == EINTR); + + if (rc < 0) { + Py_AddPendingCall(report_wakeup_error, + (void *)(Py_intptr_t)errno); + } + } +#endif + + if (!is_tripped) { + /* Set is_tripped after setting .tripped, as it gets + cleared in PyErr_CheckSignals() before .tripped. */ + is_tripped = 1; + Py_AddPendingCall(checksignals_witharg, NULL); } - if (is_tripped) - return; - /* Set is_tripped after setting .tripped, as it gets - cleared in PyErr_CheckSignals() before .tripped. */ - is_tripped = 1; - Py_AddPendingCall(checksignals_witharg, NULL); } static void @@ -426,10 +492,28 @@ signal_siginterrupt(PyObject *self, PyObject *args) static PyObject * signal_set_wakeup_fd(PyObject *self, PyObject *args) { - struct stat buf; +#ifdef MS_WINDOWS + PyObject *fdobj; + SOCKET_T fd, old_fd; + int res; + int res_size = sizeof res; + PyObject *mod; + struct stat st; + + if (!PyArg_ParseTuple(args, "O:set_wakeup_fd", &fdobj)) + return NULL; + + fd = PyLong_AsSocket_t(fdobj); + if (fd == (SOCKET_T)(-1) && PyErr_Occurred()) + return NULL; +#else int fd, old_fd; + struct stat st; + if (!PyArg_ParseTuple(args, "i:set_wakeup_fd", &fd)) return NULL; +#endif + #ifdef WITH_THREAD if (PyThread_get_thread_ident() != main_thread) { PyErr_SetString(PyExc_ValueError, @@ -438,28 +522,54 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) } #endif - if (fd != -1) { - if (!_PyVerify_fd(fd)) { - PyErr_SetString(PyExc_ValueError, "invalid fd"); +#ifdef MS_WINDOWS + if (fd != INVALID_SOCKET) { + /* Import the _socket module to call WSAStartup() */ + mod = PyImport_ImportModuleNoBlock("_socket"); + if (mod == NULL) + return NULL; + Py_DECREF(mod); + + /* test the socket */ + if (getsockopt(fd, SOL_SOCKET, SO_ERROR, + (char *)&res, &res_size) != 0) { + int err = WSAGetLastError(); + if (err == WSAENOTSOCK) + PyErr_SetString(PyExc_ValueError, "fd is not a socket"); + else + PyErr_SetExcFromWindowsErr(PyExc_OSError, err); return NULL; } + } - if (fstat(fd, &buf) != 0) - return PyErr_SetFromErrno(PyExc_OSError); + old_fd = wakeup.fd; + wakeup.fd = fd; + + if (old_fd != INVALID_SOCKET) + return PyLong_FromSocket_t(old_fd); + else + return PyLong_FromLong(-1); +#else + if (fd != -1) { + if (fstat(fd, &st) != 0) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } } old_fd = wakeup_fd; wakeup_fd = fd; return PyLong_FromLong(old_fd); +#endif } PyDoc_STRVAR(set_wakeup_fd_doc, "set_wakeup_fd(fd) -> fd\n\ \n\ -Sets the fd to be written to (with '\\0') when a signal\n\ +Sets the fd to be written to (with the signal number) when a signal\n\ comes in. A library can use this to wakeup select or poll.\n\ -The previous fd is returned.\n\ +The previous fd or -1 is returned.\n\ \n\ The fd must be non-blocking."); @@ -467,10 +577,17 @@ The fd must be non-blocking."); int PySignal_SetWakeupFd(int fd) { - int old_fd = wakeup_fd; + int old_fd; if (fd < 0) fd = -1; + +#ifdef MS_WINDOWS + old_fd = Py_SAFE_DOWNCAST(wakeup.fd, SOCKET_T, int); + wakeup.fd = fd; +#else + old_fd = wakeup_fd; wakeup_fd = fd; +#endif return old_fd; } -- cgit v1.2.1 From 0252639d1ff5c582156f80b1f6038b45535e04b1 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 24 Jul 2014 22:51:05 +0200 Subject: Backout 42ced0d023cd: oops, i didn't want to push this changeset :-/ --- Modules/signalmodule.c | 155 ++++++------------------------------------------- 1 file changed, 19 insertions(+), 136 deletions(-) (limited to 'Modules') diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index a315f23a03..c4f0121644 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -4,9 +4,6 @@ /* XXX Signals should be recorded per thread, now we have thread state. */ #include "Python.h" -#ifdef MS_WINDOWS -#include "socketmodule.h" /* needed for SOCKET_T */ -#endif #ifndef MS_WINDOWS #include "posixmodule.h" #endif @@ -90,18 +87,7 @@ static volatile struct { PyObject *func; } Handlers[NSIG]; -#ifdef MS_WINDOWS -#define INVALID_SOCKET ((SOCKET_T)-1) - -static volatile struct { - SOCKET_T fd; - int send_err_set; - int send_errno; - int send_win_error; -} wakeup = {INVALID_SOCKET, 0, 0}; -#else static volatile sig_atomic_t wakeup_fd = -1; -#endif /* Speed up sigcheck() when none tripped */ static volatile sig_atomic_t is_tripped = 0; @@ -185,33 +171,6 @@ checksignals_witharg(void * unused) return PyErr_CheckSignals(); } -#ifdef MS_WINDOWS -static int -report_wakeup_error(void* Py_UNUSED(data)) -{ - PyObject *res; - - if (wakeup.send_win_error) { - /* PyErr_SetExcFromWindowsErr() invokes FormatMessage() which - recognizes the error codes used by both GetLastError() and - WSAGetLastError */ - res = PyErr_SetExcFromWindowsErr(PyExc_OSError, wakeup.send_win_error); - } - else { - errno = wakeup.send_errno; - res = PyErr_SetFromErrno(PyExc_OSError); - } - - assert(res == NULL); - wakeup.send_err_set = 0; - - PySys_WriteStderr("Exception ignored when trying to send to the " - "signal wakeup fd:\n"); - PyErr_WriteUnraisable(NULL); - - return 0; -} -#else static int report_wakeup_error(void *data) { @@ -224,51 +183,26 @@ report_wakeup_error(void *data) errno = save_errno; return 0; } -#endif static void trip_signal(int sig_num) { unsigned char byte; - Py_ssize_t rc; + int rc = 0; Handlers[sig_num].tripped = 1; - -#ifdef MS_WINDOWS - if (wakeup.fd != INVALID_SOCKET) { - byte = (unsigned char)sig_num; - do { - rc = send(wakeup.fd, &byte, 1, 0); - } while (rc < 0 && errno == EINTR); - - /* we only have a storage for one error in the wakeup structure */ - if (rc < 0 && !wakeup.send_err_set) { - wakeup.send_err_set = 1; - wakeup.send_errno = errno; - wakeup.send_win_error = GetLastError(); - Py_AddPendingCall(report_wakeup_error, NULL); - } - } -#else if (wakeup_fd != -1) { byte = (unsigned char)sig_num; - do { - rc = write(wakeup_fd, &byte, 1); - } while (rc < 0 && errno == EINTR); - - if (rc < 0) { - Py_AddPendingCall(report_wakeup_error, - (void *)(Py_intptr_t)errno); - } - } -#endif - - if (!is_tripped) { - /* Set is_tripped after setting .tripped, as it gets - cleared in PyErr_CheckSignals() before .tripped. */ - is_tripped = 1; - Py_AddPendingCall(checksignals_witharg, NULL); + while ((rc = write(wakeup_fd, &byte, 1)) == -1 && errno == EINTR); + if (rc == -1) + Py_AddPendingCall(report_wakeup_error, (void *) (Py_intptr_t) errno); } + if (is_tripped) + return; + /* Set is_tripped after setting .tripped, as it gets + cleared in PyErr_CheckSignals() before .tripped. */ + is_tripped = 1; + Py_AddPendingCall(checksignals_witharg, NULL); } static void @@ -492,28 +426,10 @@ signal_siginterrupt(PyObject *self, PyObject *args) static PyObject * signal_set_wakeup_fd(PyObject *self, PyObject *args) { -#ifdef MS_WINDOWS - PyObject *fdobj; - SOCKET_T fd, old_fd; - int res; - int res_size = sizeof res; - PyObject *mod; - struct stat st; - - if (!PyArg_ParseTuple(args, "O:set_wakeup_fd", &fdobj)) - return NULL; - - fd = PyLong_AsSocket_t(fdobj); - if (fd == (SOCKET_T)(-1) && PyErr_Occurred()) - return NULL; -#else + struct stat buf; int fd, old_fd; - struct stat st; - if (!PyArg_ParseTuple(args, "i:set_wakeup_fd", &fd)) return NULL; -#endif - #ifdef WITH_THREAD if (PyThread_get_thread_ident() != main_thread) { PyErr_SetString(PyExc_ValueError, @@ -522,54 +438,28 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) } #endif -#ifdef MS_WINDOWS - if (fd != INVALID_SOCKET) { - /* Import the _socket module to call WSAStartup() */ - mod = PyImport_ImportModuleNoBlock("_socket"); - if (mod == NULL) - return NULL; - Py_DECREF(mod); - - /* test the socket */ - if (getsockopt(fd, SOL_SOCKET, SO_ERROR, - (char *)&res, &res_size) != 0) { - int err = WSAGetLastError(); - if (err == WSAENOTSOCK) - PyErr_SetString(PyExc_ValueError, "fd is not a socket"); - else - PyErr_SetExcFromWindowsErr(PyExc_OSError, err); - return NULL; - } - } - - old_fd = wakeup.fd; - wakeup.fd = fd; - - if (old_fd != INVALID_SOCKET) - return PyLong_FromSocket_t(old_fd); - else - return PyLong_FromLong(-1); -#else if (fd != -1) { - if (fstat(fd, &st) != 0) { - PyErr_SetFromErrno(PyExc_OSError); + if (!_PyVerify_fd(fd)) { + PyErr_SetString(PyExc_ValueError, "invalid fd"); return NULL; } + + if (fstat(fd, &buf) != 0) + return PyErr_SetFromErrno(PyExc_OSError); } old_fd = wakeup_fd; wakeup_fd = fd; return PyLong_FromLong(old_fd); -#endif } PyDoc_STRVAR(set_wakeup_fd_doc, "set_wakeup_fd(fd) -> fd\n\ \n\ -Sets the fd to be written to (with the signal number) when a signal\n\ +Sets the fd to be written to (with '\\0') when a signal\n\ comes in. A library can use this to wakeup select or poll.\n\ -The previous fd or -1 is returned.\n\ +The previous fd is returned.\n\ \n\ The fd must be non-blocking."); @@ -577,17 +467,10 @@ The fd must be non-blocking."); int PySignal_SetWakeupFd(int fd) { - int old_fd; + int old_fd = wakeup_fd; if (fd < 0) fd = -1; - -#ifdef MS_WINDOWS - old_fd = Py_SAFE_DOWNCAST(wakeup.fd, SOCKET_T, int); - wakeup.fd = fd; -#else - old_fd = wakeup_fd; wakeup_fd = fd; -#endif return old_fd; } -- cgit v1.2.1 From 411d273e5dd17e0f6c0f4336316e4b8c01a6ed4a Mon Sep 17 00:00:00 2001 From: Nick Coghlan Date: Fri, 25 Jul 2014 21:52:14 +1000 Subject: Issue #18093: Factor out the programs that embed the runtime --- Modules/README | 2 + Modules/_freeze_importlib.c | 144 -------------------------------------------- Modules/_testembed.c | 140 ------------------------------------------ Modules/python.c | 77 ----------------------- 4 files changed, 2 insertions(+), 361 deletions(-) create mode 100644 Modules/README delete mode 100644 Modules/_freeze_importlib.c delete mode 100644 Modules/_testembed.c delete mode 100644 Modules/python.c (limited to 'Modules') diff --git a/Modules/README b/Modules/README new file mode 100644 index 0000000000..9b79f53889 --- /dev/null +++ b/Modules/README @@ -0,0 +1,2 @@ +Source files for standard library extension modules, +and former extension modules that are now builtin modules. diff --git a/Modules/_freeze_importlib.c b/Modules/_freeze_importlib.c deleted file mode 100644 index 57b1ac0662..0000000000 --- a/Modules/_freeze_importlib.c +++ /dev/null @@ -1,144 +0,0 @@ -/* This is built as a stand-alone executable by the Makefile, and helps turn - Lib/importlib/_bootstrap.py into a frozen module in Python/importlib.h -*/ - -#include -#include - -#include -#include -#include -#ifndef MS_WINDOWS -#include -#endif - - -/* To avoid a circular dependency on frozen.o, we create our own structure - of frozen modules instead, left deliberately blank so as to avoid - unintentional import of a stale version of _frozen_importlib. */ - -const static struct _frozen _PyImport_FrozenModules[] = { - {0, 0, 0} /* sentinel */ -}; - -#ifndef MS_WINDOWS -/* On Windows, this links with the regular pythonXY.dll, so this variable comes - from frozen.obj. In the Makefile, frozen.o is not linked into this executable, - so we define the variable here. */ -const struct _frozen *PyImport_FrozenModules; -#endif - -const char header[] = "/* Auto-generated by Modules/_freeze_importlib.c */"; - -int -main(int argc, char *argv[]) -{ - char *inpath, *outpath; - FILE *infile = NULL, *outfile = NULL; - struct stat st; - size_t text_size, data_size, n; - char *text = NULL; - unsigned char *data; - PyObject *code = NULL, *marshalled = NULL; - - PyImport_FrozenModules = _PyImport_FrozenModules; - - if (argc != 3) { - fprintf(stderr, "need to specify input and output paths\n"); - return 2; - } - inpath = argv[1]; - outpath = argv[2]; - infile = fopen(inpath, "rb"); - if (infile == NULL) { - fprintf(stderr, "cannot open '%s' for reading\n", inpath); - goto error; - } - if (fstat(fileno(infile), &st)) { - fprintf(stderr, "cannot fstat '%s'\n", inpath); - goto error; - } - text_size = st.st_size; - text = (char *) malloc(text_size + 1); - if (text == NULL) { - fprintf(stderr, "could not allocate %ld bytes\n", (long) text_size); - goto error; - } - n = fread(text, 1, text_size, infile); - fclose(infile); - infile = NULL; - if (n < text_size) { - fprintf(stderr, "read too short: got %ld instead of %ld bytes\n", - (long) n, (long) text_size); - goto error; - } - text[text_size] = '\0'; - - Py_NoUserSiteDirectory++; - Py_NoSiteFlag++; - Py_IgnoreEnvironmentFlag++; - - Py_SetProgramName(L"./_freeze_importlib"); - /* Don't install importlib, since it could execute outdated bytecode. */ - _Py_InitializeEx_Private(1, 0); - - code = Py_CompileStringExFlags(text, "", - Py_file_input, NULL, 0); - if (code == NULL) - goto error; - free(text); - text = NULL; - - marshalled = PyMarshal_WriteObjectToString(code, Py_MARSHAL_VERSION); - Py_CLEAR(code); - if (marshalled == NULL) - goto error; - - assert(PyBytes_CheckExact(marshalled)); - data = (unsigned char *) PyBytes_AS_STRING(marshalled); - data_size = PyBytes_GET_SIZE(marshalled); - - /* Open the file in text mode. The hg checkout should be using the eol extension, - which in turn should cause the EOL style match the C library's text mode */ - outfile = fopen(outpath, "w"); - if (outfile == NULL) { - fprintf(stderr, "cannot open '%s' for writing\n", outpath); - goto error; - } - fprintf(outfile, "%s\n", header); - fprintf(outfile, "const unsigned char _Py_M__importlib[] = {\n"); - for (n = 0; n < data_size; n += 16) { - size_t i, end = Py_MIN(n + 16, data_size); - fprintf(outfile, " "); - for (i = n; i < end; i++) { - fprintf(outfile, "%d,", (unsigned int) data[i]); - } - fprintf(outfile, "\n"); - } - fprintf(outfile, "};\n"); - - Py_CLEAR(marshalled); - - Py_Finalize(); - if (outfile) { - if (ferror(outfile)) { - fprintf(stderr, "error when writing to '%s'\n", outpath); - goto error; - } - fclose(outfile); - } - return 0; - -error: - PyErr_Print(); - Py_Finalize(); - if (infile) - fclose(infile); - if (outfile) - fclose(outfile); - if (text) - free(text); - if (marshalled) - Py_DECREF(marshalled); - return 1; -} diff --git a/Modules/_testembed.c b/Modules/_testembed.c deleted file mode 100644 index 39ff0977c8..0000000000 --- a/Modules/_testembed.c +++ /dev/null @@ -1,140 +0,0 @@ -#include -#include - -/********************************************************* - * Embedded interpreter tests that need a custom exe - * - * Executed via 'EmbeddingTests' in Lib/test/test_capi.py - *********************************************************/ - -static void _testembed_Py_Initialize(void) -{ - /* HACK: the "./" at front avoids a search along the PATH in - Modules/getpath.c */ - Py_SetProgramName(L"./_testembed"); - Py_Initialize(); -} - - -/***************************************************** - * Test repeated initalisation and subinterpreters - *****************************************************/ - -static void print_subinterp(void) -{ - /* Just output some debug stuff */ - PyThreadState *ts = PyThreadState_Get(); - printf("interp %p, thread state %p: ", ts->interp, ts); - fflush(stdout); - PyRun_SimpleString( - "import sys;" - "print('id(modules) =', id(sys.modules));" - "sys.stdout.flush()" - ); -} - -static void test_repeated_init_and_subinterpreters(void) -{ - PyThreadState *mainstate, *substate; -#ifdef WITH_THREAD - PyGILState_STATE gilstate; -#endif - int i, j; - - for (i=0; i<3; i++) { - printf("--- Pass %d ---\n", i); - _testembed_Py_Initialize(); - mainstate = PyThreadState_Get(); - -#ifdef WITH_THREAD - PyEval_InitThreads(); - PyEval_ReleaseThread(mainstate); - - gilstate = PyGILState_Ensure(); -#endif - print_subinterp(); - PyThreadState_Swap(NULL); - - for (j=0; j<3; j++) { - substate = Py_NewInterpreter(); - print_subinterp(); - Py_EndInterpreter(substate); - } - - PyThreadState_Swap(mainstate); - print_subinterp(); -#ifdef WITH_THREAD - PyGILState_Release(gilstate); -#endif - - PyEval_RestoreThread(mainstate); - Py_Finalize(); - } -} - -/***************************************************** - * Test forcing a particular IO encoding - *****************************************************/ - -static void check_stdio_details(const char *encoding, const char * errors) -{ - /* Output info for the test case to check */ - if (encoding) { - printf("Expected encoding: %s\n", encoding); - } else { - printf("Expected encoding: default\n"); - } - if (errors) { - printf("Expected errors: %s\n", errors); - } else { - printf("Expected errors: default\n"); - } - fflush(stdout); - /* Force the given IO encoding */ - Py_SetStandardStreamEncoding(encoding, errors); - _testembed_Py_Initialize(); - PyRun_SimpleString( - "import sys;" - "print('stdin: {0.encoding}:{0.errors}'.format(sys.stdin));" - "print('stdout: {0.encoding}:{0.errors}'.format(sys.stdout));" - "print('stderr: {0.encoding}:{0.errors}'.format(sys.stderr));" - "sys.stdout.flush()" - ); - Py_Finalize(); -} - -static void test_forced_io_encoding(void) -{ - /* Check various combinations */ - printf("--- Use defaults ---\n"); - check_stdio_details(NULL, NULL); - printf("--- Set errors only ---\n"); - check_stdio_details(NULL, "ignore"); - printf("--- Set encoding only ---\n"); - check_stdio_details("latin-1", NULL); - printf("--- Set encoding and errors ---\n"); - check_stdio_details("latin-1", "replace"); - - /* Check calling after initialization fails */ - Py_Initialize(); - - if (Py_SetStandardStreamEncoding(NULL, NULL) == 0) { - printf("Unexpected success calling Py_SetStandardStreamEncoding"); - } - Py_Finalize(); -} - -/* Different embedding tests */ -int main(int argc, char *argv[]) -{ - - /* TODO: Check the argument string to allow for more test cases */ - if (argc > 1) { - /* For now: assume "forced_io_encoding */ - test_forced_io_encoding(); - } else { - /* Run the original embedding test case by default */ - test_repeated_init_and_subinterpreters(); - } - return 0; -} diff --git a/Modules/python.c b/Modules/python.c deleted file mode 100644 index 9811c01d49..0000000000 --- a/Modules/python.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Minimal main program -- everything is loaded from the library */ - -#include "Python.h" -#include - -#ifdef __FreeBSD__ -#include -#endif - -#ifdef MS_WINDOWS -int -wmain(int argc, wchar_t **argv) -{ - return Py_Main(argc, argv); -} -#else - -int -main(int argc, char **argv) -{ - wchar_t **argv_copy; - /* We need a second copy, as Python might modify the first one. */ - wchar_t **argv_copy2; - int i, res; - char *oldloc; -#ifdef __FreeBSD__ - fp_except_t m; -#endif - - argv_copy = (wchar_t **)PyMem_RawMalloc(sizeof(wchar_t*) * (argc+1)); - argv_copy2 = (wchar_t **)PyMem_RawMalloc(sizeof(wchar_t*) * (argc+1)); - if (!argv_copy || !argv_copy2) { - fprintf(stderr, "out of memory\n"); - return 1; - } - - /* 754 requires that FP exceptions run in "no stop" mode by default, - * and until C vendors implement C99's ways to control FP exceptions, - * Python requires non-stop mode. Alas, some platforms enable FP - * exceptions by default. Here we disable them. - */ -#ifdef __FreeBSD__ - m = fpgetmask(); - fpsetmask(m & ~FP_X_OFL); -#endif - - oldloc = _PyMem_RawStrdup(setlocale(LC_ALL, NULL)); - if (!oldloc) { - fprintf(stderr, "out of memory\n"); - return 1; - } - - setlocale(LC_ALL, ""); - for (i = 0; i < argc; i++) { - argv_copy[i] = _Py_char2wchar(argv[i], NULL); - if (!argv_copy[i]) { - PyMem_RawFree(oldloc); - fprintf(stderr, "Fatal Python error: " - "unable to decode the command line argument #%i\n", - i + 1); - return 1; - } - argv_copy2[i] = argv_copy[i]; - } - argv_copy2[argc] = argv_copy[argc] = NULL; - - setlocale(LC_ALL, oldloc); - PyMem_RawFree(oldloc); - res = Py_Main(argc, argv_copy); - for (i = 0; i < argc; i++) { - PyMem_RawFree(argv_copy2[i]); - } - PyMem_RawFree(argv_copy); - PyMem_RawFree(argv_copy2); - return res; -} -#endif -- cgit v1.2.1 From 05a3c69a3ad46c53d764e2252fad360020e0d398 Mon Sep 17 00:00:00 2001 From: "Martin v. L?wis" Date: Sun, 27 Jul 2014 14:20:23 +0200 Subject: Issue #20173: Convert sha1, sha256, sha512 and md5 to ArgumentClinic. Patch by Vajrasky Kok. --- Modules/md5module.c | 176 ++++++++++++++++++++++++++------ Modules/sha1module.c | 176 ++++++++++++++++++++++++++------ Modules/sha256module.c | 234 +++++++++++++++++++++++++++++++++--------- Modules/sha512module.c | 268 ++++++++++++++++++++++++++++++++++++++++--------- 4 files changed, 696 insertions(+), 158 deletions(-) (limited to 'Modules') diff --git a/Modules/md5module.c b/Modules/md5module.c index 5cb3d36c9b..65f5c35a62 100644 --- a/Modules/md5module.c +++ b/Modules/md5module.c @@ -19,6 +19,11 @@ #include "Python.h" #include "hashlib.h" +/*[clinic input] +module _md5 +class MD5Type "MD5object *" "&PyType_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=6e5261719957a912]*/ /* Some useful types */ @@ -332,10 +337,33 @@ MD5_dealloc(PyObject *ptr) /* External methods for a hash object */ -PyDoc_STRVAR(MD5_copy__doc__, "Return a copy of the hash object."); +/*[clinic input] +MD5Type.copy + +Return a copy of the hash object. +[clinic start generated code]*/ + +PyDoc_STRVAR(MD5Type_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define MD5TYPE_COPY_METHODDEF \ + {"copy", (PyCFunction)MD5Type_copy, METH_NOARGS, MD5Type_copy__doc__}, + +static PyObject * +MD5Type_copy_impl(MD5object *self); + +static PyObject * +MD5Type_copy(MD5object *self, PyObject *Py_UNUSED(ignored)) +{ + return MD5Type_copy_impl(self); +} static PyObject * -MD5_copy(MD5object *self, PyObject *unused) +MD5Type_copy_impl(MD5object *self) +/*[clinic end generated code: output=3b3a88920b3dc7f4 input=2c09e6d2493f3079]*/ { MD5object *newobj; @@ -351,11 +379,33 @@ MD5_copy(MD5object *self, PyObject *unused) return (PyObject *)newobj; } -PyDoc_STRVAR(MD5_digest__doc__, +/*[clinic input] +MD5Type.digest + +Return the digest value as a string of binary data. +[clinic start generated code]*/ + +PyDoc_STRVAR(MD5Type_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" "Return the digest value as a string of binary data."); +#define MD5TYPE_DIGEST_METHODDEF \ + {"digest", (PyCFunction)MD5Type_digest, METH_NOARGS, MD5Type_digest__doc__}, + static PyObject * -MD5_digest(MD5object *self, PyObject *unused) +MD5Type_digest_impl(MD5object *self); + +static PyObject * +MD5Type_digest(MD5object *self, PyObject *Py_UNUSED(ignored)) +{ + return MD5Type_digest_impl(self); +} + +static PyObject * +MD5Type_digest_impl(MD5object *self) +/*[clinic end generated code: output=7a796b28fa89485f input=7b96e65389412a34]*/ { unsigned char digest[MD5_DIGESTSIZE]; struct md5_state temp; @@ -365,11 +415,33 @@ MD5_digest(MD5object *self, PyObject *unused) return PyBytes_FromStringAndSize((const char *)digest, MD5_DIGESTSIZE); } -PyDoc_STRVAR(MD5_hexdigest__doc__, +/*[clinic input] +MD5Type.hexdigest + +Return the digest value as a string of hexadecimal digits. +[clinic start generated code]*/ + +PyDoc_STRVAR(MD5Type_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" "Return the digest value as a string of hexadecimal digits."); +#define MD5TYPE_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)MD5Type_hexdigest, METH_NOARGS, MD5Type_hexdigest__doc__}, + +static PyObject * +MD5Type_hexdigest_impl(MD5object *self); + static PyObject * -MD5_hexdigest(MD5object *self, PyObject *unused) +MD5Type_hexdigest(MD5object *self, PyObject *Py_UNUSED(ignored)) +{ + return MD5Type_hexdigest_impl(self); +} + +static PyObject * +MD5Type_hexdigest_impl(MD5object *self) +/*[clinic end generated code: output=daa73609f94f92e1 input=b60b19de644798dd]*/ { unsigned char digest[MD5_DIGESTSIZE]; struct md5_state temp; @@ -401,18 +473,30 @@ MD5_hexdigest(MD5object *self, PyObject *unused) return retval; } -PyDoc_STRVAR(MD5_update__doc__, -"Update this hash object's state with the provided string."); +/*[clinic input] +MD5Type.update + + obj: object + / + +Update this hash object's state with the provided string. +[clinic start generated code]*/ + +PyDoc_STRVAR(MD5Type_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define MD5TYPE_UPDATE_METHODDEF \ + {"update", (PyCFunction)MD5Type_update, METH_O, MD5Type_update__doc__}, static PyObject * -MD5_update(MD5object *self, PyObject *args) +MD5Type_update(MD5object *self, PyObject *obj) +/*[clinic end generated code: output=9d09b6c6cdc6cac3 input=6e1efcd9ecf17032]*/ { - PyObject *obj; Py_buffer buf; - if (!PyArg_ParseTuple(args, "O:update", &obj)) - return NULL; - GET_BUFFER_VIEW_OR_ERROUT(obj, &buf); md5_process(&self->hash_state, buf.buf, buf.len); @@ -423,10 +507,10 @@ MD5_update(MD5object *self, PyObject *args) } static PyMethodDef MD5_methods[] = { - {"copy", (PyCFunction)MD5_copy, METH_NOARGS, MD5_copy__doc__}, - {"digest", (PyCFunction)MD5_digest, METH_NOARGS, MD5_digest__doc__}, - {"hexdigest", (PyCFunction)MD5_hexdigest, METH_NOARGS, MD5_hexdigest__doc__}, - {"update", (PyCFunction)MD5_update, METH_VARARGS, MD5_update__doc__}, + MD5TYPE_COPY_METHODDEF + MD5TYPE_DIGEST_METHODDEF + MD5TYPE_HEXDIGEST_METHODDEF + MD5TYPE_UPDATE_METHODDEF {NULL, NULL} /* sentinel */ }; @@ -502,27 +586,55 @@ static PyTypeObject MD5type = { /* The single module-level function: new() */ -PyDoc_STRVAR(MD5_new__doc__, +/*[clinic input] +_md5.md5 + + string: object(c_default="NULL") = b'' + +Return a new MD5 hash object; optionally initialized with a string. +[clinic start generated code]*/ + +PyDoc_STRVAR(_md5_md5__doc__, +"md5($module, /, string=b\'\')\n" +"--\n" +"\n" "Return a new MD5 hash object; optionally initialized with a string."); +#define _MD5_MD5_METHODDEF \ + {"md5", (PyCFunction)_md5_md5, METH_VARARGS|METH_KEYWORDS, _md5_md5__doc__}, + +static PyObject * +_md5_md5_impl(PyModuleDef *module, PyObject *string); + static PyObject * -MD5_new(PyObject *self, PyObject *args, PyObject *kwdict) +_md5_md5(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:md5", _keywords, + &string)) + goto exit; + return_value = _md5_md5_impl(module, string); + +exit: + return return_value; +} + +static PyObject * +_md5_md5_impl(PyModuleDef *module, PyObject *string) +/*[clinic end generated code: output=1039e912d919880e input=d12ef8f72d684f7b]*/ { - static char *kwlist[] = {"string", NULL}; MD5object *new; - PyObject *data_obj = NULL; Py_buffer buf; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|O:new", kwlist, - &data_obj)) { - return NULL; - } - - if (data_obj) - GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf); + if (string) + GET_BUFFER_VIEW_OR_ERROUT(string, &buf); if ((new = newMD5object()) == NULL) { - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } @@ -531,11 +643,11 @@ MD5_new(PyObject *self, PyObject *args, PyObject *kwdict) if (PyErr_Occurred()) { Py_DECREF(new); - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } - if (data_obj) { + if (string) { md5_process(&new->hash_state, buf.buf, buf.len); PyBuffer_Release(&buf); } @@ -547,7 +659,7 @@ MD5_new(PyObject *self, PyObject *args, PyObject *kwdict) /* List of functions exported by this module */ static struct PyMethodDef MD5_functions[] = { - {"md5", (PyCFunction)MD5_new, METH_VARARGS|METH_KEYWORDS, MD5_new__doc__}, + _MD5_MD5_METHODDEF {NULL, NULL} /* Sentinel */ }; diff --git a/Modules/sha1module.c b/Modules/sha1module.c index b44fe189d2..8961de48d8 100644 --- a/Modules/sha1module.c +++ b/Modules/sha1module.c @@ -19,6 +19,11 @@ #include "Python.h" #include "hashlib.h" +/*[clinic input] +module _sha1 +class SHA1Type "SHA1object *" "&PyType_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=3dc9a20d1becb759]*/ /* Some useful types */ @@ -309,10 +314,33 @@ SHA1_dealloc(PyObject *ptr) /* External methods for a hash object */ -PyDoc_STRVAR(SHA1_copy__doc__, "Return a copy of the hash object."); +/*[clinic input] +SHA1Type.copy + +Return a copy of the hash object. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA1Type_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define SHA1TYPE_COPY_METHODDEF \ + {"copy", (PyCFunction)SHA1Type_copy, METH_NOARGS, SHA1Type_copy__doc__}, + +static PyObject * +SHA1Type_copy_impl(SHA1object *self); + +static PyObject * +SHA1Type_copy(SHA1object *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA1Type_copy_impl(self); +} static PyObject * -SHA1_copy(SHA1object *self, PyObject *unused) +SHA1Type_copy_impl(SHA1object *self) +/*[clinic end generated code: output=1a320e75a7444098 input=b7eae10df6f89b36]*/ { SHA1object *newobj; @@ -323,11 +351,33 @@ SHA1_copy(SHA1object *self, PyObject *unused) return (PyObject *)newobj; } -PyDoc_STRVAR(SHA1_digest__doc__, +/*[clinic input] +SHA1Type.digest + +Return the digest value as a string of binary data. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA1Type_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" "Return the digest value as a string of binary data."); +#define SHA1TYPE_DIGEST_METHODDEF \ + {"digest", (PyCFunction)SHA1Type_digest, METH_NOARGS, SHA1Type_digest__doc__}, + static PyObject * -SHA1_digest(SHA1object *self, PyObject *unused) +SHA1Type_digest_impl(SHA1object *self); + +static PyObject * +SHA1Type_digest(SHA1object *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA1Type_digest_impl(self); +} + +static PyObject * +SHA1Type_digest_impl(SHA1object *self) +/*[clinic end generated code: output=c4920f75228bfbfd input=205d47e1927fd009]*/ { unsigned char digest[SHA1_DIGESTSIZE]; struct sha1_state temp; @@ -337,11 +387,33 @@ SHA1_digest(SHA1object *self, PyObject *unused) return PyBytes_FromStringAndSize((const char *)digest, SHA1_DIGESTSIZE); } -PyDoc_STRVAR(SHA1_hexdigest__doc__, +/*[clinic input] +SHA1Type.hexdigest + +Return the digest value as a string of hexadecimal digits. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA1Type_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" "Return the digest value as a string of hexadecimal digits."); +#define SHA1TYPE_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)SHA1Type_hexdigest, METH_NOARGS, SHA1Type_hexdigest__doc__}, + +static PyObject * +SHA1Type_hexdigest_impl(SHA1object *self); + static PyObject * -SHA1_hexdigest(SHA1object *self, PyObject *unused) +SHA1Type_hexdigest(SHA1object *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA1Type_hexdigest_impl(self); +} + +static PyObject * +SHA1Type_hexdigest_impl(SHA1object *self) +/*[clinic end generated code: output=6e345aac201887b2 input=97691055c0c74ab0]*/ { unsigned char digest[SHA1_DIGESTSIZE]; struct sha1_state temp; @@ -373,18 +445,30 @@ SHA1_hexdigest(SHA1object *self, PyObject *unused) return retval; } -PyDoc_STRVAR(SHA1_update__doc__, -"Update this hash object's state with the provided string."); +/*[clinic input] +SHA1Type.update + + obj: object + / + +Update this hash object's state with the provided string. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA1Type_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define SHA1TYPE_UPDATE_METHODDEF \ + {"update", (PyCFunction)SHA1Type_update, METH_O, SHA1Type_update__doc__}, static PyObject * -SHA1_update(SHA1object *self, PyObject *args) +SHA1Type_update(SHA1object *self, PyObject *obj) +/*[clinic end generated code: output=ab20a86a25e7d255 input=aad8e07812edbba3]*/ { - PyObject *obj; Py_buffer buf; - if (!PyArg_ParseTuple(args, "O:update", &obj)) - return NULL; - GET_BUFFER_VIEW_OR_ERROUT(obj, &buf); sha1_process(&self->hash_state, buf.buf, buf.len); @@ -395,10 +479,10 @@ SHA1_update(SHA1object *self, PyObject *args) } static PyMethodDef SHA1_methods[] = { - {"copy", (PyCFunction)SHA1_copy, METH_NOARGS, SHA1_copy__doc__}, - {"digest", (PyCFunction)SHA1_digest, METH_NOARGS, SHA1_digest__doc__}, - {"hexdigest", (PyCFunction)SHA1_hexdigest, METH_NOARGS, SHA1_hexdigest__doc__}, - {"update", (PyCFunction)SHA1_update, METH_VARARGS, SHA1_update__doc__}, + SHA1TYPE_COPY_METHODDEF + SHA1TYPE_DIGEST_METHODDEF + SHA1TYPE_HEXDIGEST_METHODDEF + SHA1TYPE_UPDATE_METHODDEF {NULL, NULL} /* sentinel */ }; @@ -474,27 +558,55 @@ static PyTypeObject SHA1type = { /* The single module-level function: new() */ -PyDoc_STRVAR(SHA1_new__doc__, +/*[clinic input] +_sha1.sha1 + + string: object(c_default="NULL") = b'' + +Return a new SHA1 hash object; optionally initialized with a string. +[clinic start generated code]*/ + +PyDoc_STRVAR(_sha1_sha1__doc__, +"sha1($module, /, string=b\'\')\n" +"--\n" +"\n" "Return a new SHA1 hash object; optionally initialized with a string."); +#define _SHA1_SHA1_METHODDEF \ + {"sha1", (PyCFunction)_sha1_sha1, METH_VARARGS|METH_KEYWORDS, _sha1_sha1__doc__}, + +static PyObject * +_sha1_sha1_impl(PyModuleDef *module, PyObject *string); + static PyObject * -SHA1_new(PyObject *self, PyObject *args, PyObject *kwdict) +_sha1_sha1(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:sha1", _keywords, + &string)) + goto exit; + return_value = _sha1_sha1_impl(module, string); + +exit: + return return_value; +} + +static PyObject * +_sha1_sha1_impl(PyModuleDef *module, PyObject *string) +/*[clinic end generated code: output=c9068552f07b8954 input=27ea54281d995ec2]*/ { - static char *kwlist[] = {"string", NULL}; SHA1object *new; - PyObject *data_obj = NULL; Py_buffer buf; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|O:new", kwlist, - &data_obj)) { - return NULL; - } - - if (data_obj) - GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf); + if (string) + GET_BUFFER_VIEW_OR_ERROUT(string, &buf); if ((new = newSHA1object()) == NULL) { - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } @@ -503,11 +615,11 @@ SHA1_new(PyObject *self, PyObject *args, PyObject *kwdict) if (PyErr_Occurred()) { Py_DECREF(new); - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } - if (data_obj) { + if (string) { sha1_process(&new->hash_state, buf.buf, buf.len); PyBuffer_Release(&buf); } @@ -519,7 +631,7 @@ SHA1_new(PyObject *self, PyObject *args, PyObject *kwdict) /* List of functions exported by this module */ static struct PyMethodDef SHA1_functions[] = { - {"sha1",(PyCFunction)SHA1_new, METH_VARARGS|METH_KEYWORDS,SHA1_new__doc__}, + _SHA1_SHA1_METHODDEF {NULL, NULL} /* Sentinel */ }; diff --git a/Modules/sha256module.c b/Modules/sha256module.c index b05bfc172f..7b1488696f 100644 --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -20,6 +20,11 @@ #include "structmember.h" #include "hashlib.h" +/*[clinic input] +module _sha256 +class SHA256Type "SHAobject *" "&PyType_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=71a39174d4f0a744]*/ /* Some useful types */ @@ -393,10 +398,33 @@ SHA_dealloc(PyObject *ptr) /* External methods for a hash object */ -PyDoc_STRVAR(SHA256_copy__doc__, "Return a copy of the hash object."); +/*[clinic input] +SHA256Type.copy + +Return a copy of the hash object. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA256Type_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define SHA256TYPE_COPY_METHODDEF \ + {"copy", (PyCFunction)SHA256Type_copy, METH_NOARGS, SHA256Type_copy__doc__}, + +static PyObject * +SHA256Type_copy_impl(SHAobject *self); static PyObject * -SHA256_copy(SHAobject *self, PyObject *unused) +SHA256Type_copy(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA256Type_copy_impl(self); +} + +static PyObject * +SHA256Type_copy_impl(SHAobject *self) +/*[clinic end generated code: output=f716c39d3f81c27c input=f58840a618d4f2a7]*/ { SHAobject *newobj; @@ -412,11 +440,33 @@ SHA256_copy(SHAobject *self, PyObject *unused) return (PyObject *)newobj; } -PyDoc_STRVAR(SHA256_digest__doc__, +/*[clinic input] +SHA256Type.digest + +Return the digest value as a string of binary data. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA256Type_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" "Return the digest value as a string of binary data."); +#define SHA256TYPE_DIGEST_METHODDEF \ + {"digest", (PyCFunction)SHA256Type_digest, METH_NOARGS, SHA256Type_digest__doc__}, + +static PyObject * +SHA256Type_digest_impl(SHAobject *self); + +static PyObject * +SHA256Type_digest(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA256Type_digest_impl(self); +} + static PyObject * -SHA256_digest(SHAobject *self, PyObject *unused) +SHA256Type_digest_impl(SHAobject *self) +/*[clinic end generated code: output=72d34723d7bb694c input=1fb752e58954157d]*/ { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; @@ -426,11 +476,33 @@ SHA256_digest(SHAobject *self, PyObject *unused) return PyBytes_FromStringAndSize((const char *)digest, self->digestsize); } -PyDoc_STRVAR(SHA256_hexdigest__doc__, +/*[clinic input] +SHA256Type.hexdigest + +Return the digest value as a string of hexadecimal digits. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA256Type_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" "Return the digest value as a string of hexadecimal digits."); +#define SHA256TYPE_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)SHA256Type_hexdigest, METH_NOARGS, SHA256Type_hexdigest__doc__}, + +static PyObject * +SHA256Type_hexdigest_impl(SHAobject *self); + static PyObject * -SHA256_hexdigest(SHAobject *self, PyObject *unused) +SHA256Type_hexdigest(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA256Type_hexdigest_impl(self); +} + +static PyObject * +SHA256Type_hexdigest_impl(SHAobject *self) +/*[clinic end generated code: output=3687aa6183c7d27f input=0cc4c714693010d1]*/ { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; @@ -462,18 +534,30 @@ SHA256_hexdigest(SHAobject *self, PyObject *unused) return retval; } -PyDoc_STRVAR(SHA256_update__doc__, -"Update this hash object's state with the provided string."); +/*[clinic input] +SHA256Type.update + + obj: object + / + +Update this hash object's state with the provided string. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA256Type_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define SHA256TYPE_UPDATE_METHODDEF \ + {"update", (PyCFunction)SHA256Type_update, METH_O, SHA256Type_update__doc__}, static PyObject * -SHA256_update(SHAobject *self, PyObject *args) +SHA256Type_update(SHAobject *self, PyObject *obj) +/*[clinic end generated code: output=b47f53d7cbeabee4 input=b2d449d5b30f0f5a]*/ { - PyObject *obj; Py_buffer buf; - if (!PyArg_ParseTuple(args, "O:update", &obj)) - return NULL; - GET_BUFFER_VIEW_OR_ERROUT(obj, &buf); sha_update(self, buf.buf, buf.len); @@ -484,10 +568,10 @@ SHA256_update(SHAobject *self, PyObject *args) } static PyMethodDef SHA_methods[] = { - {"copy", (PyCFunction)SHA256_copy, METH_NOARGS, SHA256_copy__doc__}, - {"digest", (PyCFunction)SHA256_digest, METH_NOARGS, SHA256_digest__doc__}, - {"hexdigest", (PyCFunction)SHA256_hexdigest, METH_NOARGS, SHA256_hexdigest__doc__}, - {"update", (PyCFunction)SHA256_update, METH_VARARGS, SHA256_update__doc__}, + SHA256TYPE_COPY_METHODDEF + SHA256TYPE_DIGEST_METHODDEF + SHA256TYPE_HEXDIGEST_METHODDEF + SHA256TYPE_UPDATE_METHODDEF {NULL, NULL} /* sentinel */ }; @@ -594,27 +678,55 @@ static PyTypeObject SHA256type = { /* The single module-level function: new() */ -PyDoc_STRVAR(SHA256_new__doc__, +/*[clinic input] +_sha256.sha256 + + string: object(c_default="NULL") = b'' + +Return a new SHA-256 hash object; optionally initialized with a string. +[clinic start generated code]*/ + +PyDoc_STRVAR(_sha256_sha256__doc__, +"sha256($module, /, string=b\'\')\n" +"--\n" +"\n" "Return a new SHA-256 hash object; optionally initialized with a string."); +#define _SHA256_SHA256_METHODDEF \ + {"sha256", (PyCFunction)_sha256_sha256, METH_VARARGS|METH_KEYWORDS, _sha256_sha256__doc__}, + static PyObject * -SHA256_new(PyObject *self, PyObject *args, PyObject *kwdict) +_sha256_sha256_impl(PyModuleDef *module, PyObject *string); + +static PyObject * +_sha256_sha256(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:sha256", _keywords, + &string)) + goto exit; + return_value = _sha256_sha256_impl(module, string); + +exit: + return return_value; +} + +static PyObject * +_sha256_sha256_impl(PyModuleDef *module, PyObject *string) +/*[clinic end generated code: output=4b1263d1e2fcdb98 input=09cce3fb855056b2]*/ { - static char *kwlist[] = {"string", NULL}; SHAobject *new; - PyObject *data_obj = NULL; Py_buffer buf; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|O:new", kwlist, - &data_obj)) { - return NULL; - } - - if (data_obj) - GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf); + if (string) + GET_BUFFER_VIEW_OR_ERROUT(string, &buf); if ((new = newSHA256object()) == NULL) { - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } @@ -623,11 +735,11 @@ SHA256_new(PyObject *self, PyObject *args, PyObject *kwdict) if (PyErr_Occurred()) { Py_DECREF(new); - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } - if (data_obj) { + if (string) { sha_update(new, buf.buf, buf.len); PyBuffer_Release(&buf); } @@ -635,27 +747,55 @@ SHA256_new(PyObject *self, PyObject *args, PyObject *kwdict) return (PyObject *)new; } -PyDoc_STRVAR(SHA224_new__doc__, +/*[clinic input] +_sha256.sha224 + + string: object(c_default="NULL") = b'' + +Return a new SHA-224 hash object; optionally initialized with a string. +[clinic start generated code]*/ + +PyDoc_STRVAR(_sha256_sha224__doc__, +"sha224($module, /, string=b\'\')\n" +"--\n" +"\n" "Return a new SHA-224 hash object; optionally initialized with a string."); +#define _SHA256_SHA224_METHODDEF \ + {"sha224", (PyCFunction)_sha256_sha224, METH_VARARGS|METH_KEYWORDS, _sha256_sha224__doc__}, + +static PyObject * +_sha256_sha224_impl(PyModuleDef *module, PyObject *string); + static PyObject * -SHA224_new(PyObject *self, PyObject *args, PyObject *kwdict) +_sha256_sha224(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:sha224", _keywords, + &string)) + goto exit; + return_value = _sha256_sha224_impl(module, string); + +exit: + return return_value; +} + +static PyObject * +_sha256_sha224_impl(PyModuleDef *module, PyObject *string) +/*[clinic end generated code: output=4dde0eb1cdaebc06 input=27a04ba24c353a73]*/ { - static char *kwlist[] = {"string", NULL}; SHAobject *new; - PyObject *data_obj = NULL; Py_buffer buf; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|O:new", kwlist, - &data_obj)) { - return NULL; - } - - if (data_obj) - GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf); + if (string) + GET_BUFFER_VIEW_OR_ERROUT(string, &buf); if ((new = newSHA224object()) == NULL) { - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } @@ -664,11 +804,11 @@ SHA224_new(PyObject *self, PyObject *args, PyObject *kwdict) if (PyErr_Occurred()) { Py_DECREF(new); - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } - if (data_obj) { + if (string) { sha_update(new, buf.buf, buf.len); PyBuffer_Release(&buf); } @@ -680,8 +820,8 @@ SHA224_new(PyObject *self, PyObject *args, PyObject *kwdict) /* List of functions exported by this module */ static struct PyMethodDef SHA_functions[] = { - {"sha256", (PyCFunction)SHA256_new, METH_VARARGS|METH_KEYWORDS, SHA256_new__doc__}, - {"sha224", (PyCFunction)SHA224_new, METH_VARARGS|METH_KEYWORDS, SHA224_new__doc__}, + _SHA256_SHA256_METHODDEF + _SHA256_SHA224_METHODDEF {NULL, NULL} /* Sentinel */ }; diff --git a/Modules/sha512module.c b/Modules/sha512module.c index 47c57e5c42..843f95d5c6 100644 --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -20,6 +20,12 @@ #include "structmember.h" #include "hashlib.h" +/*[clinic input] +module _sha512 +class SHA512Type "SHAobject *" "&PyType_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=81a3ccde92bcfe8d]*/ + #ifdef PY_LONG_LONG /* If no PY_LONG_LONG, don't compile anything! */ /* Some useful types */ @@ -459,10 +465,33 @@ SHA512_dealloc(PyObject *ptr) /* External methods for a hash object */ -PyDoc_STRVAR(SHA512_copy__doc__, "Return a copy of the hash object."); +/*[clinic input] +SHA512Type.copy + +Return a copy of the hash object. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA512Type_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define SHA512TYPE_COPY_METHODDEF \ + {"copy", (PyCFunction)SHA512Type_copy, METH_NOARGS, SHA512Type_copy__doc__}, static PyObject * -SHA512_copy(SHAobject *self, PyObject *unused) +SHA512Type_copy_impl(SHAobject *self); + +static PyObject * +SHA512Type_copy(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA512Type_copy_impl(self); +} + +static PyObject * +SHA512Type_copy_impl(SHAobject *self) +/*[clinic end generated code: output=14f8e6ce9c61ece0 input=9f5f31e6c457776a]*/ { SHAobject *newobj; @@ -478,11 +507,33 @@ SHA512_copy(SHAobject *self, PyObject *unused) return (PyObject *)newobj; } -PyDoc_STRVAR(SHA512_digest__doc__, +/*[clinic input] +SHA512Type.digest + +Return the digest value as a string of binary data. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA512Type_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" "Return the digest value as a string of binary data."); +#define SHA512TYPE_DIGEST_METHODDEF \ + {"digest", (PyCFunction)SHA512Type_digest, METH_NOARGS, SHA512Type_digest__doc__}, + +static PyObject * +SHA512Type_digest_impl(SHAobject *self); + +static PyObject * +SHA512Type_digest(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA512Type_digest_impl(self); +} + static PyObject * -SHA512_digest(SHAobject *self, PyObject *unused) +SHA512Type_digest_impl(SHAobject *self) +/*[clinic end generated code: output=be8de024b232977e input=60c2cede9e023018]*/ { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; @@ -492,11 +543,33 @@ SHA512_digest(SHAobject *self, PyObject *unused) return PyBytes_FromStringAndSize((const char *)digest, self->digestsize); } -PyDoc_STRVAR(SHA512_hexdigest__doc__, +/*[clinic input] +SHA512Type.hexdigest + +Return the digest value as a string of hexadecimal digits. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA512Type_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" "Return the digest value as a string of hexadecimal digits."); +#define SHA512TYPE_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)SHA512Type_hexdigest, METH_NOARGS, SHA512Type_hexdigest__doc__}, + static PyObject * -SHA512_hexdigest(SHAobject *self, PyObject *unused) +SHA512Type_hexdigest_impl(SHAobject *self); + +static PyObject * +SHA512Type_hexdigest(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA512Type_hexdigest_impl(self); +} + +static PyObject * +SHA512Type_hexdigest_impl(SHAobject *self) +/*[clinic end generated code: output=28a4ab2f9a1781b8 input=498b877b25cbe0a2]*/ { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; @@ -528,18 +601,30 @@ SHA512_hexdigest(SHAobject *self, PyObject *unused) return retval; } -PyDoc_STRVAR(SHA512_update__doc__, -"Update this hash object's state with the provided string."); +/*[clinic input] +SHA512Type.update + + obj: object + / + +Update this hash object's state with the provided string. +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA512Type_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define SHA512TYPE_UPDATE_METHODDEF \ + {"update", (PyCFunction)SHA512Type_update, METH_O, SHA512Type_update__doc__}, static PyObject * -SHA512_update(SHAobject *self, PyObject *args) +SHA512Type_update(SHAobject *self, PyObject *obj) +/*[clinic end generated code: output=6be574cdc3a9c52d input=ded2b46656566283]*/ { - PyObject *obj; Py_buffer buf; - if (!PyArg_ParseTuple(args, "O:update", &obj)) - return NULL; - GET_BUFFER_VIEW_OR_ERROUT(obj, &buf); sha512_update(self, buf.buf, buf.len); @@ -548,12 +633,32 @@ SHA512_update(SHAobject *self, PyObject *args) Py_INCREF(Py_None); return Py_None; } +/*[clinic input] +dump buffer +[clinic start generated code]*/ + +#ifndef SHA512TYPE_COPY_METHODDEF + #define SHA512TYPE_COPY_METHODDEF +#endif /* !defined(SHA512TYPE_COPY_METHODDEF) */ + +#ifndef SHA512TYPE_DIGEST_METHODDEF + #define SHA512TYPE_DIGEST_METHODDEF +#endif /* !defined(SHA512TYPE_DIGEST_METHODDEF) */ + +#ifndef SHA512TYPE_HEXDIGEST_METHODDEF + #define SHA512TYPE_HEXDIGEST_METHODDEF +#endif /* !defined(SHA512TYPE_HEXDIGEST_METHODDEF) */ + +#ifndef SHA512TYPE_UPDATE_METHODDEF + #define SHA512TYPE_UPDATE_METHODDEF +#endif /* !defined(SHA512TYPE_UPDATE_METHODDEF) */ +/*[clinic end generated code: output=de713947d31130e9 input=524ce2e021e4eba6]*/ static PyMethodDef SHA_methods[] = { - {"copy", (PyCFunction)SHA512_copy, METH_NOARGS, SHA512_copy__doc__}, - {"digest", (PyCFunction)SHA512_digest, METH_NOARGS, SHA512_digest__doc__}, - {"hexdigest", (PyCFunction)SHA512_hexdigest, METH_NOARGS, SHA512_hexdigest__doc__}, - {"update", (PyCFunction)SHA512_update, METH_VARARGS, SHA512_update__doc__}, + SHA512TYPE_COPY_METHODDEF + SHA512TYPE_DIGEST_METHODDEF + SHA512TYPE_HEXDIGEST_METHODDEF + SHA512TYPE_UPDATE_METHODDEF {NULL, NULL} /* sentinel */ }; @@ -660,27 +765,55 @@ static PyTypeObject SHA512type = { /* The single module-level function: new() */ -PyDoc_STRVAR(SHA512_new__doc__, +/*[clinic input] +_sha512.sha512 + + string: object(c_default="NULL") = b'' + +Return a new SHA-512 hash object; optionally initialized with a string. +[clinic start generated code]*/ + +PyDoc_STRVAR(_sha512_sha512__doc__, +"sha512($module, /, string=b\'\')\n" +"--\n" +"\n" "Return a new SHA-512 hash object; optionally initialized with a string."); +#define _SHA512_SHA512_METHODDEF \ + {"sha512", (PyCFunction)_sha512_sha512, METH_VARARGS|METH_KEYWORDS, _sha512_sha512__doc__}, + static PyObject * -SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict) +_sha512_sha512_impl(PyModuleDef *module, PyObject *string); + +static PyObject * +_sha512_sha512(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:sha512", _keywords, + &string)) + goto exit; + return_value = _sha512_sha512_impl(module, string); + +exit: + return return_value; +} + +static PyObject * +_sha512_sha512_impl(PyModuleDef *module, PyObject *string) +/*[clinic end generated code: output=9e39b11115f36878 input=e69bad9ae9b6a308]*/ { - static char *kwlist[] = {"string", NULL}; SHAobject *new; - PyObject *data_obj = NULL; Py_buffer buf; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|O:new", kwlist, - &data_obj)) { - return NULL; - } - - if (data_obj) - GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf); + if (string) + GET_BUFFER_VIEW_OR_ERROUT(string, &buf); if ((new = newSHA512object()) == NULL) { - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } @@ -689,11 +822,11 @@ SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict) if (PyErr_Occurred()) { Py_DECREF(new); - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } - if (data_obj) { + if (string) { sha512_update(new, buf.buf, buf.len); PyBuffer_Release(&buf); } @@ -701,27 +834,55 @@ SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict) return (PyObject *)new; } -PyDoc_STRVAR(SHA384_new__doc__, +/*[clinic input] +_sha512.sha384 + + string: object(c_default="NULL") = b'' + +Return a new SHA-384 hash object; optionally initialized with a string. +[clinic start generated code]*/ + +PyDoc_STRVAR(_sha512_sha384__doc__, +"sha384($module, /, string=b\'\')\n" +"--\n" +"\n" "Return a new SHA-384 hash object; optionally initialized with a string."); +#define _SHA512_SHA384_METHODDEF \ + {"sha384", (PyCFunction)_sha512_sha384, METH_VARARGS|METH_KEYWORDS, _sha512_sha384__doc__}, + +static PyObject * +_sha512_sha384_impl(PyModuleDef *module, PyObject *string); + +static PyObject * +_sha512_sha384(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:sha384", _keywords, + &string)) + goto exit; + return_value = _sha512_sha384_impl(module, string); + +exit: + return return_value; +} + static PyObject * -SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict) +_sha512_sha384_impl(PyModuleDef *module, PyObject *string) +/*[clinic end generated code: output=397c6fba3525b93a input=c9327788d4ea4545]*/ { - static char *kwlist[] = {"string", NULL}; SHAobject *new; - PyObject *data_obj = NULL; Py_buffer buf; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|O:new", kwlist, - &data_obj)) { - return NULL; - } - - if (data_obj) - GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf); + if (string) + GET_BUFFER_VIEW_OR_ERROUT(string, &buf); if ((new = newSHA384object()) == NULL) { - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } @@ -730,11 +891,11 @@ SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict) if (PyErr_Occurred()) { Py_DECREF(new); - if (data_obj) + if (string) PyBuffer_Release(&buf); return NULL; } - if (data_obj) { + if (string) { sha512_update(new, buf.buf, buf.len); PyBuffer_Release(&buf); } @@ -743,11 +904,24 @@ SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict) } +/*[clinic input] +dump buffer +[clinic start generated code]*/ + +#ifndef _SHA512_SHA512_METHODDEF + #define _SHA512_SHA512_METHODDEF +#endif /* !defined(_SHA512_SHA512_METHODDEF) */ + +#ifndef _SHA512_SHA384_METHODDEF + #define _SHA512_SHA384_METHODDEF +#endif /* !defined(_SHA512_SHA384_METHODDEF) */ +/*[clinic end generated code: output=69d84aa9445b01d8 input=524ce2e021e4eba6]*/ + /* List of functions exported by this module */ static struct PyMethodDef SHA_functions[] = { - {"sha512", (PyCFunction)SHA512_new, METH_VARARGS|METH_KEYWORDS, SHA512_new__doc__}, - {"sha384", (PyCFunction)SHA384_new, METH_VARARGS|METH_KEYWORDS, SHA384_new__doc__}, + _SHA512_SHA512_METHODDEF + _SHA512_SHA384_METHODDEF {NULL, NULL} /* Sentinel */ }; -- cgit v1.2.1 From b5fc572bc2762349b1393823cb361bea9bd9e457 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sun, 27 Jul 2014 23:22:34 +0300 Subject: Issue #22076: Minor grammar fix. Patch by Martin Matusiak. --- Modules/_csv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_csv.c b/Modules/_csv.c index c8767d1ea5..6eaaea2bca 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -248,7 +248,7 @@ _set_char(const char *name, Py_UCS4 *target, PyObject *src, Py_UCS4 dflt) len = PyUnicode_GetLength(src); if (len > 1) { PyErr_Format(PyExc_TypeError, - "\"%s\" must be an 1-character string", + "\"%s\" must be a 1-character string", name); return -1; } @@ -432,7 +432,7 @@ dialect_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) goto err; if (self->delimiter == 0) { PyErr_SetString(PyExc_TypeError, - "\"delimiter\" must be an 1-character string"); + "\"delimiter\" must be a 1-character string"); goto err; } if (quotechar == Py_None && quoting == NULL) -- cgit v1.2.1 From c3f54dd5d927667235986b636624f5690e067a27 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 29 Jul 2014 22:32:47 +0200 Subject: Issue #22054: Add os.get_blocking() and os.set_blocking() functions to get and set the blocking mode of a file descriptor (False if the O_NONBLOCK flag is set, True otherwise). These functions are not available on Windows. --- Modules/posixmodule.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index b7acbc330c..0bee3c986d 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -11146,6 +11146,56 @@ posix_set_handle_inheritable(PyObject *self, PyObject *args) #endif /* MS_WINDOWS */ +#ifndef MS_WINDOWS +PyDoc_STRVAR(get_blocking__doc__, + "get_blocking(fd) -> bool\n" \ + "\n" \ + "Get the blocking mode of the file descriptor:\n" \ + "False if the O_NONBLOCK flag is set, True if the flag is cleared."); + +static PyObject* +posix_get_blocking(PyObject *self, PyObject *args) +{ + int fd; + int blocking; + + if (!PyArg_ParseTuple(args, "i:get_blocking", &fd)) + return NULL; + + if (!_PyVerify_fd(fd)) + return posix_error(); + + blocking = _Py_get_blocking(fd); + if (blocking < 0) + return NULL; + return PyBool_FromLong(blocking); +} + +PyDoc_STRVAR(set_blocking__doc__, + "set_blocking(fd, blocking)\n" \ + "\n" \ + "Set the blocking mode of the specified file descriptor.\n" \ + "Set the O_NONBLOCK flag if blocking is False,\n" \ + "clear the O_NONBLOCK flag otherwise."); + +static PyObject* +posix_set_blocking(PyObject *self, PyObject *args) +{ + int fd, blocking; + + if (!PyArg_ParseTuple(args, "ii:set_blocking", &fd, &blocking)) + return NULL; + + if (!_PyVerify_fd(fd)) + return posix_error(); + + if (_Py_set_blocking(fd, blocking) < 0) + return NULL; + Py_RETURN_NONE; +} +#endif /* !MS_WINDOWS */ + + /*[clinic input] dump buffer [clinic start generated code]*/ @@ -11605,6 +11655,10 @@ static PyMethodDef posix_methods[] = { METH_VARARGS, get_handle_inheritable__doc__}, {"set_handle_inheritable", posix_set_handle_inheritable, METH_VARARGS, set_handle_inheritable__doc__}, +#endif +#ifndef MS_WINDOWS + {"get_blocking", posix_get_blocking, METH_VARARGS, get_blocking__doc__}, + {"set_blocking", posix_set_blocking, METH_VARARGS, set_blocking__doc__}, #endif {NULL, NULL} /* Sentinel */ }; -- cgit v1.2.1 From 32d21478d8430e9e1ea24c72f04967f8bc0783ff Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 29 Jul 2014 23:31:34 +0200 Subject: Issue #22018: On Windows, signal.set_wakeup_fd() now also supports sockets. A side effect is that Python depends to the WinSock library. --- Modules/signalmodule.c | 183 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 165 insertions(+), 18 deletions(-) (limited to 'Modules') diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index c4f0121644..61b3330d3f 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -7,6 +7,9 @@ #ifndef MS_WINDOWS #include "posixmodule.h" #endif +#ifdef MS_WINDOWS +#include "socketmodule.h" /* needed for SOCKET_T */ +#endif #ifdef MS_WINDOWS #include @@ -87,7 +90,20 @@ static volatile struct { PyObject *func; } Handlers[NSIG]; +#ifdef MS_WINDOWS +#define INVALID_FD ((SOCKET_T)-1) + +static volatile struct { + SOCKET_T fd; + int use_send; + int send_err_set; + int send_errno; + int send_win_error; +} wakeup = {INVALID_FD, 0, 0}; +#else +#define INVALID_FD (-1) static volatile sig_atomic_t wakeup_fd = -1; +#endif /* Speed up sigcheck() when none tripped */ static volatile sig_atomic_t is_tripped = 0; @@ -172,7 +188,7 @@ checksignals_witharg(void * unused) } static int -report_wakeup_error(void *data) +report_wakeup_write_error(void *data) { int save_errno = errno; errno = (int) (Py_intptr_t) data; @@ -184,25 +200,86 @@ report_wakeup_error(void *data) return 0; } +#ifdef MS_WINDOWS +static int +report_wakeup_send_error(void* Py_UNUSED(data)) +{ + PyObject *res; + + if (wakeup.send_win_error) { + /* PyErr_SetExcFromWindowsErr() invokes FormatMessage() which + recognizes the error codes used by both GetLastError() and + WSAGetLastError */ + res = PyErr_SetExcFromWindowsErr(PyExc_OSError, wakeup.send_win_error); + } + else { + errno = wakeup.send_errno; + res = PyErr_SetFromErrno(PyExc_OSError); + } + + assert(res == NULL); + wakeup.send_err_set = 0; + + PySys_WriteStderr("Exception ignored when trying to send to the " + "signal wakeup fd:\n"); + PyErr_WriteUnraisable(NULL); + + return 0; +} +#endif /* MS_WINDOWS */ + static void trip_signal(int sig_num) { unsigned char byte; - int rc = 0; + int fd; + Py_ssize_t rc; Handlers[sig_num].tripped = 1; - if (wakeup_fd != -1) { + +#ifdef MS_WINDOWS + fd = Py_SAFE_DOWNCAST(wakeup.fd, SOCKET_T, int); +#else + fd = wakeup_fd; +#endif + + if (fd != INVALID_FD) { byte = (unsigned char)sig_num; - while ((rc = write(wakeup_fd, &byte, 1)) == -1 && errno == EINTR); - if (rc == -1) - Py_AddPendingCall(report_wakeup_error, (void *) (Py_intptr_t) errno); +#ifdef MS_WINDOWS + if (wakeup.use_send) { + do { + rc = send(fd, &byte, 1, 0); + } while (rc < 0 && errno == EINTR); + + /* we only have a storage for one error in the wakeup structure */ + if (rc < 0 && !wakeup.send_err_set) { + wakeup.send_err_set = 1; + wakeup.send_errno = errno; + wakeup.send_win_error = GetLastError(); + Py_AddPendingCall(report_wakeup_send_error, NULL); + } + } + else +#endif + { + byte = (unsigned char)sig_num; + do { + rc = write(fd, &byte, 1); + } while (rc < 0 && errno == EINTR); + + if (rc < 0) { + Py_AddPendingCall(report_wakeup_write_error, + (void *)(Py_intptr_t)errno); + } + } + } + + if (!is_tripped) { + /* Set is_tripped after setting .tripped, as it gets + cleared in PyErr_CheckSignals() before .tripped. */ + is_tripped = 1; + Py_AddPendingCall(checksignals_witharg, NULL); } - if (is_tripped) - return; - /* Set is_tripped after setting .tripped, as it gets - cleared in PyErr_CheckSignals() before .tripped. */ - is_tripped = 1; - Py_AddPendingCall(checksignals_witharg, NULL); } static void @@ -426,10 +503,29 @@ signal_siginterrupt(PyObject *self, PyObject *args) static PyObject * signal_set_wakeup_fd(PyObject *self, PyObject *args) { - struct stat buf; +#ifdef MS_WINDOWS + PyObject *fdobj; + SOCKET_T fd, old_fd; + int res; + int res_size = sizeof res; + PyObject *mod; + struct stat st; + int is_socket; + + if (!PyArg_ParseTuple(args, "O:set_wakeup_fd", &fdobj)) + return NULL; + + fd = PyLong_AsSocket_t(fdobj); + if (fd == (SOCKET_T)(-1) && PyErr_Occurred()) + return NULL; +#else int fd, old_fd; + struct stat st; + if (!PyArg_ParseTuple(args, "i:set_wakeup_fd", &fd)) return NULL; +#endif + #ifdef WITH_THREAD if (PyThread_get_thread_ident() != main_thread) { PyErr_SetString(PyExc_ValueError, @@ -438,28 +534,72 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) } #endif +#ifdef MS_WINDOWS + is_socket = 0; + if (fd != INVALID_FD) { + /* Import the _socket module to call WSAStartup() */ + mod = PyImport_ImportModuleNoBlock("_socket"); + if (mod == NULL) + return NULL; + Py_DECREF(mod); + + /* test the socket */ + if (getsockopt(fd, SOL_SOCKET, SO_ERROR, + (char *)&res, &res_size) != 0) { + int err = WSAGetLastError(); + if (err != WSAENOTSOCK) { + PyErr_SetExcFromWindowsErr(PyExc_OSError, err); + return NULL; + } + + if (!_PyVerify_fd(fd)) { + PyErr_SetString(PyExc_ValueError, "invalid fd"); + return NULL; + } + + if (fstat(fd, &st) != 0) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } + } + else + is_socket = 1; + } + + old_fd = wakeup.fd; + wakeup.fd = fd; + wakeup.use_send = is_socket; + + if (old_fd != INVALID_FD) + return PyLong_FromSocket_t(old_fd); + else + return PyLong_FromLong(-1); +#else if (fd != -1) { if (!_PyVerify_fd(fd)) { PyErr_SetString(PyExc_ValueError, "invalid fd"); return NULL; } - if (fstat(fd, &buf) != 0) - return PyErr_SetFromErrno(PyExc_OSError); + if (fstat(fd, &st) != 0) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } } old_fd = wakeup_fd; wakeup_fd = fd; return PyLong_FromLong(old_fd); +#endif } PyDoc_STRVAR(set_wakeup_fd_doc, "set_wakeup_fd(fd) -> fd\n\ \n\ -Sets the fd to be written to (with '\\0') when a signal\n\ +Sets the fd to be written to (with the signal number) when a signal\n\ comes in. A library can use this to wakeup select or poll.\n\ -The previous fd is returned.\n\ +The previous fd or -1 is returned.\n\ \n\ The fd must be non-blocking."); @@ -467,10 +607,17 @@ The fd must be non-blocking."); int PySignal_SetWakeupFd(int fd) { - int old_fd = wakeup_fd; + int old_fd; if (fd < 0) fd = -1; + +#ifdef MS_WINDOWS + old_fd = Py_SAFE_DOWNCAST(wakeup.fd, SOCKET_T, int); + wakeup.fd = fd; +#else + old_fd = wakeup_fd; wakeup_fd = fd; +#endif return old_fd; } -- cgit v1.2.1 From babec53dc28831060a20bff1d83d002403fcb859 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Tue, 29 Jul 2014 19:41:11 -0400 Subject: Issue #22003: When initialized from a bytes object, io.BytesIO() now defers making a copy until it is mutated, improving performance and memory use on some use cases. Patch by David Wilson. --- Modules/_io/bytesio.c | 202 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 151 insertions(+), 51 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index 54840bb88a..d8de916185 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -11,6 +11,10 @@ typedef struct { PyObject *dict; PyObject *weakreflist; Py_ssize_t exports; + /** If `initvalue' != NULL, `buf' is a read-only pointer into the PyBytes + * referenced by `initvalue'. It must be copied prior to mutation, and + * released during finalization */ + PyObject *initvalue; } bytesio; typedef struct { @@ -19,11 +23,11 @@ typedef struct { } bytesiobuf; -#define CHECK_CLOSED(self) \ +#define CHECK_CLOSED(self, ret) \ if ((self)->buf == NULL) { \ PyErr_SetString(PyExc_ValueError, \ "I/O operation on closed file."); \ - return NULL; \ + return ret; \ } #define CHECK_EXPORTS(self) \ @@ -33,6 +37,45 @@ typedef struct { return NULL; \ } +/* Ensure we have a buffer suitable for writing, in the case that an initvalue + * object was provided, and we're currently borrowing its buffer. `size' + * indicates the new buffer size allocated as part of unsharing, to avoid a + * redundant reallocation caused by any subsequent mutation. `truncate' + * indicates whether truncation should occur if `size` < self->string_size. + * + * Do nothing if the buffer wasn't shared. Returns 0 on success, or sets an + * exception and returns -1 on failure. Existing state is preserved on failure. + */ +static int +unshare(bytesio *self, size_t preferred_size, int truncate) +{ + if (self->initvalue) { + Py_ssize_t copy_size; + char *new_buf; + + if((! truncate) && preferred_size < self->string_size) { + preferred_size = self->string_size; + } + + new_buf = (char *)PyMem_Malloc(preferred_size); + if (new_buf == NULL) { + PyErr_NoMemory(); + return -1; + } + + copy_size = self->string_size; + if (copy_size > preferred_size) { + copy_size = preferred_size; + } + + memcpy(new_buf, self->buf, copy_size); + Py_CLEAR(self->initvalue); + self->buf = new_buf; + self->buf_size = preferred_size; + self->string_size = (Py_ssize_t) copy_size; + } + return 0; +} /* Internal routine to get a line from the buffer of a BytesIO object. Returns the length between the current position to the @@ -125,11 +168,18 @@ resize_buffer(bytesio *self, size_t size) static Py_ssize_t write_bytes(bytesio *self, const char *bytes, Py_ssize_t len) { + size_t desired; + assert(self->buf != NULL); assert(self->pos >= 0); assert(len >= 0); - if ((size_t)self->pos + len > self->buf_size) { + desired = (size_t)self->pos + len; + if (unshare(self, desired, 0) < 0) { + return -1; + } + + if (desired > self->buf_size) { if (resize_buffer(self, (size_t)self->pos + len) < 0) return -1; } @@ -160,6 +210,74 @@ write_bytes(bytesio *self, const char *bytes, Py_ssize_t len) return len; } +/* Release or free any existing buffer, and place the BytesIO in the closed + * state. */ +static void +reset(bytesio *self) +{ + if (self->initvalue) { + Py_CLEAR(self->initvalue); + } else if (self->buf) { + PyMem_Free(self->buf); + } + self->buf = NULL; + self->string_size = 0; + self->pos = 0; +} + +/* Reinitialize with a new heap-allocated buffer of size `size`. Returns 0 on + * success, or sets an exception and returns -1 on failure. Existing state is + * preserved on failure. */ +static int +reinit_private(bytesio *self, Py_ssize_t size) +{ + char *tmp = (char *)PyMem_Malloc(size); + if (tmp == NULL) { + PyErr_NoMemory(); + return -1; + } + reset(self); + self->buf = tmp; + self->buf_size = size; + return 0; +} + +/* Internal version of BytesIO.__init__; resets the object to its initial + * (closed) state before repopulating it, optionally by sharing a PyBytes + * buffer provided by `initvalue'. Returns 0 on success, or sets an exception + * and returns -1 on failure. */ +static int +reinit(bytesio *self, PyObject *initvalue) +{ + CHECK_CLOSED(self, -1); + + if (initvalue == NULL || initvalue == Py_None) { + if (reinit_private(self, 0) < 0) { + return -1; + } + } else if (PyBytes_CheckExact(initvalue)) { + reset(self); + Py_INCREF(initvalue); + self->initvalue = initvalue; + self->buf = PyBytes_AS_STRING(initvalue); + self->buf_size = PyBytes_GET_SIZE(initvalue); + self->string_size = PyBytes_GET_SIZE(initvalue); + } else { + Py_buffer buf; + if (PyObject_GetBuffer(initvalue, &buf, PyBUF_CONTIG_RO) < 0) { + return -1; + } + if (reinit_private(self, buf.len) < 0) { + PyBuffer_Release(&buf); + return -1; + } + memcpy(self->buf, buf.buf, buf.len); + self->string_size = buf.len; + PyBuffer_Release(&buf); + } + return 0; +} + static PyObject * bytesio_get_closed(bytesio *self) { @@ -184,7 +302,7 @@ PyDoc_STRVAR(seekable_doc, static PyObject * return_not_closed(bytesio *self) { - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); Py_RETURN_TRUE; } @@ -194,7 +312,7 @@ PyDoc_STRVAR(flush_doc, static PyObject * bytesio_flush(bytesio *self) { - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); Py_RETURN_NONE; } @@ -210,7 +328,7 @@ bytesio_getbuffer(bytesio *self) bytesiobuf *buf; PyObject *view; - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); buf = (bytesiobuf *) type->tp_alloc(type, 0); if (buf == NULL) @@ -230,7 +348,7 @@ PyDoc_STRVAR(getval_doc, static PyObject * bytesio_getvalue(bytesio *self) { - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); return PyBytes_FromStringAndSize(self->buf, self->string_size); } @@ -243,7 +361,7 @@ PyDoc_STRVAR(isatty_doc, static PyObject * bytesio_isatty(bytesio *self) { - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); Py_RETURN_FALSE; } @@ -253,7 +371,7 @@ PyDoc_STRVAR(tell_doc, static PyObject * bytesio_tell(bytesio *self) { - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); return PyLong_FromSsize_t(self->pos); } @@ -270,7 +388,7 @@ bytesio_read(bytesio *self, PyObject *args) char *output; PyObject *arg = Py_None; - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); if (!PyArg_ParseTuple(args, "|O:read", &arg)) return NULL; @@ -339,7 +457,7 @@ bytesio_readline(bytesio *self, PyObject *args) char *output; PyObject *arg = Py_None; - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); if (!PyArg_ParseTuple(args, "|O:readline", &arg)) return NULL; @@ -385,7 +503,7 @@ bytesio_readlines(bytesio *self, PyObject *args) char *output; PyObject *arg = Py_None; - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); if (!PyArg_ParseTuple(args, "|O:readlines", &arg)) return NULL; @@ -442,7 +560,7 @@ bytesio_readinto(bytesio *self, PyObject *buffer) void *raw_buffer; Py_ssize_t len, n; - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); if (PyObject_AsWriteBuffer(buffer, &raw_buffer, &len) == -1) return NULL; @@ -475,7 +593,7 @@ bytesio_truncate(bytesio *self, PyObject *args) Py_ssize_t size; PyObject *arg = Py_None; - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); CHECK_EXPORTS(self); if (!PyArg_ParseTuple(args, "|O:truncate", &arg)) @@ -502,6 +620,10 @@ bytesio_truncate(bytesio *self, PyObject *args) return NULL; } + if (unshare(self, size, 1) < 0) { + return NULL; + } + if (size < self->string_size) { self->string_size = size; if (resize_buffer(self, size) < 0) @@ -517,7 +639,7 @@ bytesio_iternext(bytesio *self) char *next; Py_ssize_t n; - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); n = get_line(self, &next); @@ -542,7 +664,7 @@ bytesio_seek(bytesio *self, PyObject *args) Py_ssize_t pos; int mode = 0; - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); if (!PyArg_ParseTuple(args, "n|i:seek", &pos, &mode)) return NULL; @@ -597,7 +719,7 @@ bytesio_write(bytesio *self, PyObject *obj) Py_buffer buf; PyObject *result = NULL; - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); CHECK_EXPORTS(self); if (PyObject_GetBuffer(obj, &buf, PyBUF_CONTIG_RO) < 0) @@ -625,7 +747,7 @@ bytesio_writelines(bytesio *self, PyObject *v) PyObject *it, *item; PyObject *ret; - CHECK_CLOSED(self); + CHECK_CLOSED(self, NULL); it = PyObject_GetIter(v); if (it == NULL) @@ -655,10 +777,7 @@ PyDoc_STRVAR(close_doc, static PyObject * bytesio_close(bytesio *self) { - if (self->buf != NULL) { - PyMem_Free(self->buf); - self->buf = NULL; - } + reset(self); Py_RETURN_NONE; } @@ -706,11 +825,11 @@ bytesio_getstate(bytesio *self) static PyObject * bytesio_setstate(bytesio *self, PyObject *state) { - PyObject *result; PyObject *position_obj; PyObject *dict; Py_ssize_t pos; + CHECK_EXPORTS(self); assert(state != NULL); /* We allow the state tuple to be longer than 3, because we may need @@ -722,18 +841,13 @@ bytesio_setstate(bytesio *self, PyObject *state) Py_TYPE(self)->tp_name, Py_TYPE(state)->tp_name); return NULL; } - CHECK_EXPORTS(self); - /* Reset the object to its default state. This is only needed to handle - the case of repeated calls to __setstate__. */ - self->string_size = 0; - self->pos = 0; - /* Set the value of the internal buffer. If state[0] does not support the - buffer protocol, bytesio_write will raise the appropriate TypeError. */ - result = bytesio_write(self, PyTuple_GET_ITEM(state, 0)); - if (result == NULL) + /* Reset the object to its default state and set the value of the internal + * buffer. If state[0] does not support the buffer protocol, reinit() will + * raise the appropriate TypeError. */ + if (reinit(self, PyTuple_GET_ITEM(state, 0)) < 0) { return NULL; - Py_DECREF(result); + } /* Set carefully the position value. Alternatively, we could use the seek method instead of modifying self->pos directly to better protect the @@ -788,10 +902,9 @@ bytesio_dealloc(bytesio *self) "deallocated BytesIO object has exported buffers"); PyErr_Print(); } - if (self->buf != NULL) { - PyMem_Free(self->buf); - self->buf = NULL; - } + + reset(self); + Py_CLEAR(self->dict); if (self->weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *) self); @@ -830,20 +943,7 @@ bytesio_init(bytesio *self, PyObject *args, PyObject *kwds) &initvalue)) return -1; - /* In case, __init__ is called multiple times. */ - self->string_size = 0; - self->pos = 0; - - if (initvalue && initvalue != Py_None) { - PyObject *res; - res = bytesio_write(self, initvalue); - if (res == NULL) - return -1; - Py_DECREF(res); - self->pos = 0; - } - - return 0; + return reinit(self, initvalue); } static PyObject * -- cgit v1.2.1 From 6d7db39d5e1b55fbcb77413ef01a03435fe53b91 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 30 Jul 2014 19:19:21 +0300 Subject: Issue #22085: Dropped support of Tk 8.3 in Tkinter. --- Modules/_tkinter.c | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index d2fda621ca..f71ede85db 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -9,8 +9,8 @@ Copyright (C) 1994 Steen Lumholt. /* TCL/TK VERSION INFO: - Only Tcl/Tk 8.3.1 and later are supported. Older versions are not - supported. Use Python 2.6 or older if you cannot upgrade your + Only Tcl/Tk 8.4 and later are supported. Older versions are not + supported. Use Python 3.4 or older if you cannot upgrade your Tcl/Tk libraries. */ @@ -36,13 +36,6 @@ Copyright (C) 1994 Steen Lumholt. #define CHECK_SIZE(size, elemsize) \ ((size_t)(size) <= Py_MAX((size_t)INT_MAX, UINT_MAX / (size_t)(elemsize))) -/* Starting with Tcl 8.4, many APIs offer const-correctness. Unfortunately, - making _tkinter correct for this API means to break earlier - versions. USE_COMPAT_CONST allows to make _tkinter work with both 8.4 and - earlier versions. Once Tcl releases before 8.4 don't need to be supported - anymore, this should go. */ -#define USE_COMPAT_CONST - /* If Tcl is compiled for threads, we must also define TCL_THREAD. We define it always; if Tcl is not threaded, the thread functions in Tcl are empty. */ @@ -58,15 +51,8 @@ Copyright (C) 1994 Steen Lumholt. #include "tkinter.h" -/* For Tcl 8.2 and 8.3, CONST* is not defined (except on Cygwin). */ -#ifndef CONST84_RETURN -#define CONST84_RETURN -#undef CONST -#define CONST -#endif - -#if TK_VERSION_HEX < 0x08030102 -#error "Tk older than 8.3.1 not supported" +#if TK_VERSION_HEX < 0x08040002 +#error "Tk older than 8.4 not supported" #endif #if !(defined(MS_WINDOWS) || defined(__CYGWIN__)) @@ -376,10 +362,10 @@ unicodeFromTclObj(Tcl_Obj *value) static PyObject * -Split(char *list) +Split(const char *list) { int argc; - char **argv; + const char **argv; PyObject *v; if (list == NULL) { @@ -481,7 +467,7 @@ SplitObj(PyObject *arg) } else if (PyUnicode_Check(arg)) { int argc; - char **argv; + const char **argv; char *list = PyUnicode_AsUTF8(arg); if (list == NULL || @@ -496,7 +482,7 @@ SplitObj(PyObject *arg) } else if (PyBytes_Check(arg)) { int argc; - char **argv; + const char **argv; char *list = PyBytes_AsString(arg); if (Tcl_SplitList((Tcl_Interp *)NULL, list, &argc, &argv) != TCL_OK) { @@ -563,8 +549,9 @@ static void EnableEventHook(void); /* Forward */ static void DisableEventHook(void); /* Forward */ static TkappObject * -Tkapp_New(char *screenName, char *className, - int interactive, int wantobjects, int wantTk, int sync, char *use) +Tkapp_New(const char *screenName, const char *className, + int interactive, int wantobjects, int wantTk, int sync, + const char *use) { TkappObject *v; char *argv0; @@ -1857,7 +1844,7 @@ Tkapp_SplitList(PyObject *self, PyObject *args) { char *list; int argc; - char **argv; + const char **argv; PyObject *arg, *v; int i; @@ -1984,7 +1971,7 @@ PythonCmd_Error(Tcl_Interp *interp) * function or method. */ static int -PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) +PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[]) { PythonCmd_ClientData *data = (PythonCmd_ClientData *)clientData; PyObject *func, *arg, *res; -- cgit v1.2.1 From 5a9c0e87fedd736a5a02f3e1f2213c5e0461969f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 31 Jul 2014 13:07:17 +0200 Subject: timemodule.c: Replace PyExc_IOError with PyExc_OSError --- Modules/timemodule.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index d0917a4073..d896091b01 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -169,7 +169,7 @@ time_clock_gettime(PyObject *self, PyObject *args) ret = clock_gettime((clockid_t)clk_id, &tp); if (ret != 0) { - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_OSError); return NULL; } return PyFloat_FromDouble(tp.tv_sec + tp.tv_nsec * 1e-9); @@ -200,7 +200,7 @@ time_clock_settime(PyObject *self, PyObject *args) ret = clock_settime((clockid_t)clk_id, &tp); if (ret != 0) { - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_OSError); return NULL; } Py_RETURN_NONE; @@ -223,7 +223,7 @@ time_clock_getres(PyObject *self, PyObject *args) ret = clock_getres((clockid_t)clk_id, &tp); if (ret != 0) { - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_OSError); return NULL; } @@ -1591,7 +1591,7 @@ floatsleep(double secs) else #endif { - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_OSError); return -1; } } @@ -1625,7 +1625,7 @@ floatsleep(double secs) if (rc == WAIT_OBJECT_0) { Py_BLOCK_THREADS errno = EINTR; - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_OSError); return -1; } } -- cgit v1.2.1 From db4ad80ec7958ad28530e990b75c8aff03e2bd38 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 1 Aug 2014 12:28:48 +0200 Subject: Issue #18395: Rename ``_Py_char2wchar()`` to :c:func:`Py_DecodeLocale`, rename ``_Py_wchar2char()`` to :c:func:`Py_EncodeLocale`, and document these functions. --- Modules/getpath.c | 16 ++++++++-------- Modules/main.c | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/getpath.c b/Modules/getpath.c index f26b8e9b2b..de803f8fcb 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -336,7 +336,7 @@ search_for_prefix(wchar_t *argv0_path, wchar_t *home, wchar_t *_prefix, joinpath(prefix, L"Modules/Setup"); if (isfile(prefix)) { /* Check VPATH to see if argv0_path is in the build directory. */ - vpath = _Py_char2wchar(VPATH, NULL); + vpath = Py_DecodeLocale(VPATH, NULL); if (vpath != NULL) { wcsncpy(prefix, argv0_path, MAXPATHLEN); prefix[MAXPATHLEN] = L'\0'; @@ -491,10 +491,10 @@ calculate_path(void) wchar_t *_pythonpath, *_prefix, *_exec_prefix; wchar_t *lib_python; - _pythonpath = _Py_char2wchar(PYTHONPATH, NULL); - _prefix = _Py_char2wchar(PREFIX, NULL); - _exec_prefix = _Py_char2wchar(EXEC_PREFIX, NULL); - lib_python = _Py_char2wchar("lib/python" VERSION, NULL); + _pythonpath = Py_DecodeLocale(PYTHONPATH, NULL); + _prefix = Py_DecodeLocale(PREFIX, NULL); + _exec_prefix = Py_DecodeLocale(EXEC_PREFIX, NULL); + lib_python = Py_DecodeLocale("lib/python" VERSION, NULL); if (!_pythonpath || !_prefix || !_exec_prefix || !lib_python) { Py_FatalError( @@ -503,7 +503,7 @@ calculate_path(void) } if (_path) { - path_buffer = _Py_char2wchar(_path, NULL); + path_buffer = Py_DecodeLocale(_path, NULL); path = path_buffer; } @@ -584,7 +584,7 @@ calculate_path(void) ** be running the interpreter in the build directory, so we use the ** build-directory-specific logic to find Lib and such. */ - wchar_t* wbuf = _Py_char2wchar(modPath, NULL); + wchar_t* wbuf = Py_DecodeLocale(modPath, NULL); if (wbuf == NULL) { Py_FatalError("Cannot decode framework location"); } @@ -709,7 +709,7 @@ calculate_path(void) if (_rtpypath && _rtpypath[0] != '\0') { size_t rtpypath_len; - rtpypath = _Py_char2wchar(_rtpypath, &rtpypath_len); + rtpypath = Py_DecodeLocale(_rtpypath, &rtpypath_len); if (rtpypath != NULL) bufsz += rtpypath_len + 1; } diff --git a/Modules/main.c b/Modules/main.c index 1c25326d0c..8a9f5a25ee 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -647,7 +647,7 @@ Py_Main(int argc, wchar_t **argv) /* Used by Mac/Tools/pythonw.c to forward * the argv0 of the stub executable */ - wchar_t* wbuf = _Py_char2wchar(pyvenv_launcher, NULL); + wchar_t* wbuf = Py_DecodeLocale(pyvenv_launcher, NULL); if (wbuf == NULL) { Py_FatalError("Cannot decode __PYVENV_LAUNCHER__"); @@ -730,7 +730,7 @@ Py_Main(int argc, wchar_t **argv) char *cfilename_buffer; const char *cfilename; int err = errno; - cfilename_buffer = _Py_wchar2char(filename, NULL); + cfilename_buffer = Py_EncodeLocale(filename, NULL); if (cfilename_buffer != NULL) cfilename = cfilename_buffer; else -- cgit v1.2.1 From f2fd5681c57c2de9d08a74881440fe35eb0c4f9e Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Tue, 5 Aug 2014 14:04:04 +1000 Subject: Issue #20170: Convert posixmodule to use Argument Clinic. --- Modules/posixmodule.c | 11565 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 8467 insertions(+), 3098 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 0bee3c986d..26cd3ce7d2 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -184,9 +184,10 @@ corresponding Unix manual entries for more information on calls."); /*[clinic input] +# one of the few times we lie about this name! module os [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=8cff096d1133288f]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=94a0f0f978acae17]*/ #ifndef _MSC_VER @@ -683,7 +684,6 @@ dir_fd_converter(PyObject *o, void *p) } - /* * A PyArg_ParseTuple "converter" function * that handles filesystem paths in the manner @@ -779,8 +779,8 @@ typedef struct { PyObject *cleanup; } path_t; -#define PATH_T_INITIALIZE(function_name, nullable, allow_fd) \ - {function_name, NULL, nullable, allow_fd, NULL, NULL, 0, 0, NULL, NULL} +#define PATH_T_INITIALIZE(function_name, argument_name, nullable, allow_fd) \ + {function_name, argument_name, nullable, allow_fd, NULL, NULL, -1, 0, NULL, NULL} static void path_cleanup(path_t *path) { @@ -1004,21 +1004,35 @@ dir_fd_and_follow_symlinks_invalid(char *function_name, int dir_fd, return 0; } -/* A helper used by a number of POSIX-only functions */ -#ifndef MS_WINDOWS +#ifdef MS_WINDOWS + typedef PY_LONG_LONG Py_off_t; +#else + typedef off_t Py_off_t; +#endif + static int -_parse_off_t(PyObject* arg, void* addr) +Py_off_t_converter(PyObject *arg, void *addr) { -#if !defined(HAVE_LARGEFILE_SUPPORT) - *((off_t*)addr) = PyLong_AsLong(arg); +#ifdef HAVE_LARGEFILE_SUPPORT + *((Py_off_t *)addr) = PyLong_AsLongLong(arg); #else - *((off_t*)addr) = PyLong_AsLongLong(arg); + *((Py_off_t *)addr) = PyLong_AsLong(arg); #endif if (PyErr_Occurred()) return 0; return 1; } + +static PyObject * +PyLong_FromPy_off_t(Py_off_t offset) +{ +#ifdef HAVE_LARGEFILE_SUPPORT + return PyLong_FromLongLong(offset); +#else + return PyLong_FromLong(offset); #endif +} + #if defined _MSC_VER && _MSC_VER >= 1400 /* Microsoft CRT in VS2005 and higher will verify that a filehandle is @@ -1298,45 +1312,31 @@ path_error2(path_t *path, path_t *path2) /* POSIX generic methods */ -static PyObject * -posix_fildes(PyObject *fdobj, int (*func)(int)) +static int +fildes_converter(PyObject *o, void *p) { int fd; - int res; - fd = PyObject_AsFileDescriptor(fdobj); + int *pointer = (int *)p; + fd = PyObject_AsFileDescriptor(o); if (fd < 0) - return NULL; - if (!_PyVerify_fd(fd)) - return posix_error(); - Py_BEGIN_ALLOW_THREADS - res = (*func)(fd); - Py_END_ALLOW_THREADS - if (res < 0) - return posix_error(); - Py_INCREF(Py_None); - return Py_None; + return 0; + if (!_PyVerify_fd(fd)) { + posix_error(); + return 0; + } + *pointer = fd; + return 1; } static PyObject * -posix_1str(const char *func_name, PyObject *args, char *format, - int (*func)(const char*)) +posix_fildes_fd(int fd, int (*func)(int)) { - path_t path; int res; - memset(&path, 0, sizeof(path)); - path.function_name = func_name; - if (!PyArg_ParseTuple(args, format, - path_converter, &path)) - return NULL; Py_BEGIN_ALLOW_THREADS - res = (*func)(path.narrow); + res = (*func)(fd); Py_END_ALLOW_THREADS - if (res < 0) { - path_error(&path); - path_cleanup(&path); - return NULL; - } - path_cleanup(&path); + if (res < 0) + return posix_error(); Py_INCREF(Py_None); return Py_None; } @@ -2113,10 +2113,12 @@ static int _stat_float_times = 1; PyDoc_STRVAR(stat_float_times__doc__, "stat_float_times([newval]) -> oldval\n\n\ Determine whether os.[lf]stat represents time stamps as float objects.\n\ -If newval is True, future calls to stat() return floats, if it is False,\n\ -future calls return ints. \n\ -If newval is omitted, return the current setting.\n"); +\n\ +If value is True, future calls to stat() return floats; if it is False,\n\ +future calls return ints.\n\ +If value is omitted, return the current setting.\n"); +/* AC 3.5: the public default value should be None, not ready for that yet */ static PyObject* stat_float_times(PyObject* self, PyObject *args) { @@ -2346,11 +2348,176 @@ posix_do_stat(char *function_name, path_t *path, return _pystat_fromstructstat(&st); } +/*[python input] + +for s in """ + +FACCESSAT +FCHMODAT +FCHOWNAT +FSTATAT +LINKAT +MKDIRAT +MKFIFOAT +MKNODAT +OPENAT +READLINKAT +SYMLINKAT +UNLINKAT + +""".strip().split(): + s = s.strip() + print(""" +#ifdef HAVE_{s} + #define {s}_DIR_FD_CONVERTER dir_fd_converter +#else + #define {s}_DIR_FD_CONVERTER dir_fd_unavailable +#endif +""".rstrip().format(s=s)) + +for s in """ + +FCHDIR +FCHMOD +FCHOWN +FDOPENDIR +FEXECVE +FPATHCONF +FSTATVFS +FTRUNCATE + +""".strip().split(): + s = s.strip() + print(""" +#ifdef HAVE_{s} + #define PATH_HAVE_{s} 1 +#else + #define PATH_HAVE_{s} 0 +#endif + +""".rstrip().format(s=s)) +[python start generated code]*/ + +#ifdef HAVE_FACCESSAT + #define FACCESSAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define FACCESSAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_FCHMODAT + #define FCHMODAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define FCHMODAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_FCHOWNAT + #define FCHOWNAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define FCHOWNAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + #ifdef HAVE_FSTATAT - #define OS_STAT_DIR_FD_CONVERTER dir_fd_converter + #define FSTATAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define FSTATAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_LINKAT + #define LINKAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define LINKAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_MKDIRAT + #define MKDIRAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define MKDIRAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_MKFIFOAT + #define MKFIFOAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define MKFIFOAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_MKNODAT + #define MKNODAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define MKNODAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_OPENAT + #define OPENAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define OPENAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_READLINKAT + #define READLINKAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define READLINKAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_SYMLINKAT + #define SYMLINKAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define SYMLINKAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_UNLINKAT + #define UNLINKAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define UNLINKAT_DIR_FD_CONVERTER dir_fd_unavailable +#endif + +#ifdef HAVE_FCHDIR + #define PATH_HAVE_FCHDIR 1 +#else + #define PATH_HAVE_FCHDIR 0 +#endif + +#ifdef HAVE_FCHMOD + #define PATH_HAVE_FCHMOD 1 +#else + #define PATH_HAVE_FCHMOD 0 +#endif + +#ifdef HAVE_FCHOWN + #define PATH_HAVE_FCHOWN 1 +#else + #define PATH_HAVE_FCHOWN 0 +#endif + +#ifdef HAVE_FDOPENDIR + #define PATH_HAVE_FDOPENDIR 1 +#else + #define PATH_HAVE_FDOPENDIR 0 +#endif + +#ifdef HAVE_FEXECVE + #define PATH_HAVE_FEXECVE 1 +#else + #define PATH_HAVE_FEXECVE 0 +#endif + +#ifdef HAVE_FPATHCONF + #define PATH_HAVE_FPATHCONF 1 +#else + #define PATH_HAVE_FPATHCONF 0 +#endif + +#ifdef HAVE_FSTATVFS + #define PATH_HAVE_FSTATVFS 1 +#else + #define PATH_HAVE_FSTATVFS 0 +#endif + +#ifdef HAVE_FTRUNCATE + #define PATH_HAVE_FTRUNCATE 1 #else - #define OS_STAT_DIR_FD_CONVERTER dir_fd_unavailable + #define PATH_HAVE_FTRUNCATE 0 #endif +/*[python end generated code: output=4bd4f6f7d41267f1 input=80b4c890b6774ea5]*/ /*[python input] @@ -2366,22 +2533,25 @@ class path_t_converter(CConverter): def converter_init(self, *, allow_fd=False, nullable=False): # right now path_t doesn't support default values. # to support a default value, you'll need to override initialize(). - if self.default is not unspecified: + if self.default not in (unspecified, None): fail("Can't specify a default to the path_t converter!") - if self.c_default is not None: - fail("Can't specify a c_default to the path_t converter!") + if self.c_default not in (None, 'Py_None'): + raise RuntimeError("Can't specify a c_default to the path_t converter!") self.nullable = nullable self.allow_fd = allow_fd def pre_render(self): def strify(value): + if isinstance(value, str): + return value return str(int(bool(value))) # add self.py_name here when merging with posixmodule conversion - self.c_default = 'PATH_T_INITIALIZE("{}", {}, {})'.format( + self.c_default = 'PATH_T_INITIALIZE("{}", "{}", {}, {})'.format( self.function.name, + self.name, strify(self.nullable), strify(self.allow_fd), ) @@ -2392,15 +2562,78 @@ class path_t_converter(CConverter): class dir_fd_converter(CConverter): type = 'int' - converter = 'OS_STAT_DIR_FD_CONVERTER' - def converter_init(self): + def converter_init(self, requires=None): if self.default in (unspecified, None): self.c_default = 'DEFAULT_DIR_FD' + if isinstance(requires, str): + self.converter = requires.upper() + '_DIR_FD_CONVERTER' + else: + self.converter = 'dir_fd_converter' + +class fildes_converter(CConverter): + type = 'int' + converter = 'fildes_converter' + +class uid_t_converter(CConverter): + type = "uid_t" + converter = '_Py_Uid_Converter' + +class gid_t_converter(CConverter): + type = "gid_t" + converter = '_Py_Gid_Converter' + +class FSConverter_converter(CConverter): + type = 'PyObject *' + converter = 'PyUnicode_FSConverter' + def converter_init(self): + if self.default is not unspecified: + fail("FSConverter_converter does not support default values") + self.c_default = 'NULL' + + def cleanup(self): + return "Py_XDECREF(" + self.name + ");\n" + +class pid_t_converter(CConverter): + type = 'pid_t' + format_unit = '" _Py_PARSE_PID "' + +class idtype_t_converter(int_converter): + type = 'idtype_t' + +class id_t_converter(CConverter): + type = 'id_t' + format_unit = '" _Py_PARSE_PID "' + +class Py_intptr_t_converter(CConverter): + type = 'Py_intptr_t' + format_unit = '" _Py_PARSE_INTPTR "' +class Py_off_t_converter(CConverter): + type = 'Py_off_t' + converter = 'Py_off_t_converter' + +class Py_off_t_return_converter(long_return_converter): + type = 'Py_off_t' + conversion_fn = 'PyLong_FromPy_off_t' + +class path_confname_converter(CConverter): + type="int" + converter="conv_path_confname" + +class confstr_confname_converter(path_confname_converter): + converter='conv_confstr_confname' + +class sysconf_confname_converter(path_confname_converter): + converter="conv_sysconf_confname" + +class sched_param_converter(CConverter): + type = 'struct sched_param' + converter = 'convert_sched_param' + impl_by_reference = True; [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=5c9f456f53244fc3]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=147ba8f52a05aca4]*/ /*[clinic input] @@ -2411,7 +2644,7 @@ os.stat * - dir_fd : dir_fd = None + dir_fd : dir_fd(requires='fstatat') = None If not None, it should be a file descriptor open to a directory, and path should be a relative string; path will then be relative to that directory. @@ -2467,13 +2700,13 @@ os_stat(PyModuleDef *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("stat", 0, 1); + path_t path = PATH_T_INITIALIZE("stat", "path", 0, 1); int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&p:stat", _keywords, - path_converter, &path, OS_STAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) goto exit; return_value = os_stat_impl(module, &path, dir_fd, follow_symlinks); @@ -2486,49 +2719,74 @@ exit: static PyObject * os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=f1dcaa5e24db9882 input=5ae155bd475fd20a]*/ +/*[clinic end generated code: output=0e9f9508fa0c0607 input=099d356c306fa24a]*/ { return posix_do_stat("stat", path, dir_fd, follow_symlinks); } -PyDoc_STRVAR(posix_lstat__doc__, -"lstat(path, *, dir_fd=None) -> stat result\n\n\ -Like stat(), but do not follow symbolic links.\n\ -Equivalent to stat(path, follow_symlinks=False)."); + +/*[clinic input] +os.lstat + + path : path_t + + * + + dir_fd : dir_fd(requires='fstatat') = None + +Perform a stat system call on the given path, without following symbolic links. + +Like stat(), but do not follow symbolic links. +Equivalent to stat(path, follow_symlinks=False). +[clinic start generated code]*/ + +PyDoc_STRVAR(os_lstat__doc__, +"lstat($module, /, path, *, dir_fd=None)\n" +"--\n" +"\n" +"Perform a stat system call on the given path, without following symbolic links.\n" +"\n" +"Like stat(), but do not follow symbolic links.\n" +"Equivalent to stat(path, follow_symlinks=False)."); + +#define OS_LSTAT_METHODDEF \ + {"lstat", (PyCFunction)os_lstat, METH_VARARGS|METH_KEYWORDS, os_lstat__doc__}, + +static PyObject * +os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd); static PyObject * -posix_lstat(PyObject *self, PyObject *args, PyObject *kwargs) +os_lstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - static char *keywords[] = {"path", "dir_fd", NULL}; - path_t path; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("lstat", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - int follow_symlinks = 0; - PyObject *return_value; - memset(&path, 0, sizeof(path)); - path.function_name = "lstat"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:lstat", keywords, - path_converter, &path, -#ifdef HAVE_FSTATAT - dir_fd_converter, &dir_fd -#else - dir_fd_unavailable, &dir_fd -#endif - )) - return NULL; - return_value = posix_do_stat("lstat", &path, dir_fd, follow_symlinks); + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|$O&:lstat", _keywords, + path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_lstat_impl(module, &path, dir_fd); + +exit: + /* Cleanup for path */ path_cleanup(&path); + return return_value; } +static PyObject * +os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=85702247224a2b1c input=0b7474765927b925]*/ +{ + int follow_symlinks = 0; + return posix_do_stat("lstat", path, dir_fd, follow_symlinks); +} + -#ifdef HAVE_FACCESSAT - #define OS_ACCESS_DIR_FD_CONVERTER dir_fd_converter -#else - #define OS_ACCESS_DIR_FD_CONVERTER dir_fd_unavailable -#endif /*[clinic input] -os.access +os.access -> bool path: path_t(allow_fd=True) Path to be tested; can be string, bytes, or open-file-descriptor int. @@ -2539,7 +2797,7 @@ os.access * - dir_fd : dir_fd = None + dir_fd : dir_fd(requires='faccessat') = None If not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. @@ -2601,7 +2859,7 @@ PyDoc_STRVAR(os_access__doc__, #define OS_ACCESS_METHODDEF \ {"access", (PyCFunction)os_access, METH_VARARGS|METH_KEYWORDS, os_access__doc__}, -static PyObject * +static int os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks); static PyObject * @@ -2609,17 +2867,21 @@ os_access(PyModuleDef *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("access", 0, 1); + path_t path = PATH_T_INITIALIZE("access", "path", 0, 1); int mode; int dir_fd = DEFAULT_DIR_FD; int effective_ids = 0; int follow_symlinks = 1; + int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&pp:access", _keywords, - path_converter, &path, &mode, OS_STAT_DIR_FD_CONVERTER, &dir_fd, &effective_ids, &follow_symlinks)) + path_converter, &path, &mode, FACCESSAT_DIR_FD_CONVERTER, &dir_fd, &effective_ids, &follow_symlinks)) goto exit; - return_value = os_access_impl(module, &path, mode, dir_fd, effective_ids, follow_symlinks); + _return_value = os_access_impl(module, &path, mode, dir_fd, effective_ids, follow_symlinks); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); exit: /* Cleanup for path */ @@ -2628,11 +2890,11 @@ exit: return return_value; } -static PyObject * +static int os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks) -/*[clinic end generated code: output=a6ed4f151be9df0f input=2e2e7594371f5b7e]*/ +/*[clinic end generated code: output=dfd404666906f012 input=b75a756797af45ec]*/ { - PyObject *return_value = NULL; + int return_value; #ifdef MS_WINDOWS DWORD attr; @@ -2642,11 +2904,11 @@ os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effe #ifndef HAVE_FACCESSAT if (follow_symlinks_specified("access", follow_symlinks)) - goto exit; + return -1; if (effective_ids) { argument_unavailable_error("access", "effective_ids"); - goto exit; + return -1; } #endif @@ -2666,11 +2928,10 @@ os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effe * * or it's a directory. * (Directories cannot be read-only on Windows.) */ - return_value = PyBool_FromLong( - (attr != INVALID_FILE_ATTRIBUTES) && + return_value = (attr != INVALID_FILE_ATTRIBUTES) && (!(mode & 2) || !(attr & FILE_ATTRIBUTE_READONLY) || - (attr & FILE_ATTRIBUTE_DIRECTORY))); + (attr & FILE_ATTRIBUTE_DIRECTORY)); #else Py_BEGIN_ALLOW_THREADS @@ -2689,12 +2950,9 @@ os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effe #endif result = access(path->narrow, mode); Py_END_ALLOW_THREADS - return_value = PyBool_FromLong(!result); + return_value = !result; #endif -#ifndef HAVE_FACCESSAT -exit: -#endif return return_value; } @@ -2713,7 +2971,6 @@ exit: #ifdef HAVE_TTYNAME - /*[clinic input] os.ttyname -> DecodeFSDefault @@ -2771,17 +3028,36 @@ os_ttyname_impl(PyModuleDef *module, int fd) posix_error(); return ret; } -#else -#define OS_TTYNAME_METHODDEF #endif #ifdef HAVE_CTERMID -PyDoc_STRVAR(posix_ctermid__doc__, -"ctermid() -> string\n\n\ -Return the name of the controlling terminal for this process."); +/*[clinic input] +os.ctermid + +Return the name of the controlling terminal for this process. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_ctermid__doc__, +"ctermid($module, /)\n" +"--\n" +"\n" +"Return the name of the controlling terminal for this process."); + +#define OS_CTERMID_METHODDEF \ + {"ctermid", (PyCFunction)os_ctermid, METH_NOARGS, os_ctermid__doc__}, + +static PyObject * +os_ctermid_impl(PyModuleDef *module); + +static PyObject * +os_ctermid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_ctermid_impl(module); +} static PyObject * -posix_ctermid(PyObject *self, PyObject *noargs) +os_ctermid_impl(PyModuleDef *module) +/*[clinic end generated code: output=277bf7964ec2d782 input=3b87fdd52556382d]*/ { char *ret; char buffer[L_ctermid]; @@ -2795,106 +3071,234 @@ posix_ctermid(PyObject *self, PyObject *noargs) return posix_error(); return PyUnicode_DecodeFSDefault(buffer); } -#endif +#endif /* HAVE_CTERMID */ -PyDoc_STRVAR(posix_chdir__doc__, -"chdir(path)\n\n\ -Change the current working directory to the specified path.\n\ -\n\ -path may always be specified as a string.\n\ -On some platforms, path may also be specified as an open file descriptor.\n\ - If this functionality is unavailable, using it raises an exception."); + +/*[clinic input] +os.chdir + + path: path_t(allow_fd='PATH_HAVE_FCHDIR') + +Change the current working directory to the specified path. + +path may always be specified as a string. +On some platforms, path may also be specified as an open file descriptor. + If this functionality is unavailable, using it raises an exception. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_chdir__doc__, +"chdir($module, /, path)\n" +"--\n" +"\n" +"Change the current working directory to the specified path.\n" +"\n" +"path may always be specified as a string.\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception."); + +#define OS_CHDIR_METHODDEF \ + {"chdir", (PyCFunction)os_chdir, METH_VARARGS|METH_KEYWORDS, os_chdir__doc__}, + +static PyObject * +os_chdir_impl(PyModuleDef *module, path_t *path); static PyObject * -posix_chdir(PyObject *self, PyObject *args, PyObject *kwargs) +os_chdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; - int result; PyObject *return_value = NULL; - static char *keywords[] = {"path", NULL}; + static char *_keywords[] = {"path", NULL}; + path_t path = PATH_T_INITIALIZE("chdir", "path", 0, PATH_HAVE_FCHDIR); - memset(&path, 0, sizeof(path)); - path.function_name = "chdir"; -#ifdef HAVE_FCHDIR - path.allow_fd = 1; -#endif - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:chdir", keywords, - path_converter, &path - )) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:chdir", _keywords, + path_converter, &path)) + goto exit; + return_value = os_chdir_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_chdir_impl(PyModuleDef *module, path_t *path) +/*[clinic end generated code: output=cc07592dd23ca9e0 input=1a4a15b4d12cb15d]*/ +{ + int result; Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - if (path.wide) - result = win32_wchdir(path.wide); + if (path->wide) + result = win32_wchdir(path->wide); else - result = win32_chdir(path.narrow); + result = win32_chdir(path->narrow); result = !result; /* on unix, success = 0, on windows, success = !0 */ #else #ifdef HAVE_FCHDIR - if (path.fd != -1) - result = fchdir(path.fd); + if (path->fd != -1) + result = fchdir(path->fd); else #endif - result = chdir(path.narrow); + result = chdir(path->narrow); #endif Py_END_ALLOW_THREADS if (result) { - return_value = path_error(&path); - goto exit; + return path_error(path); } - return_value = Py_None; - Py_INCREF(Py_None); + Py_RETURN_NONE; +} + + +#ifdef HAVE_FCHDIR +/*[clinic input] +os.fchdir + + fd: fildes + +Change to the directory of the given file descriptor. + +fd must be opened on a directory, not a file. +Equivalent to os.chdir(fd). + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_fchdir__doc__, +"fchdir($module, /, fd)\n" +"--\n" +"\n" +"Change to the directory of the given file descriptor.\n" +"\n" +"fd must be opened on a directory, not a file.\n" +"Equivalent to os.chdir(fd)."); + +#define OS_FCHDIR_METHODDEF \ + {"fchdir", (PyCFunction)os_fchdir, METH_VARARGS|METH_KEYWORDS, os_fchdir__doc__}, + +static PyObject * +os_fchdir_impl(PyModuleDef *module, int fd); + +static PyObject * +os_fchdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; + int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:fchdir", _keywords, + fildes_converter, &fd)) + goto exit; + return_value = os_fchdir_impl(module, fd); exit: - path_cleanup(&path); return return_value; } -#ifdef HAVE_FCHDIR -PyDoc_STRVAR(posix_fchdir__doc__, -"fchdir(fd)\n\n\ -Change to the directory of the given file descriptor. fd must be\n\ -opened on a directory, not a file. Equivalent to os.chdir(fd)."); - static PyObject * -posix_fchdir(PyObject *self, PyObject *fdobj) +os_fchdir_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=9f6dbc89b2778834 input=18e816479a2fa985]*/ { - return posix_fildes(fdobj, fchdir); + return posix_fildes_fd(fd, fchdir); } #endif /* HAVE_FCHDIR */ -PyDoc_STRVAR(posix_chmod__doc__, -"chmod(path, mode, *, dir_fd=None, follow_symlinks=True)\n\n\ -Change the access permissions of a file.\n\ -\n\ -path may always be specified as a string.\n\ -On some platforms, path may also be specified as an open file descriptor.\n\ - If this functionality is unavailable, using it raises an exception.\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -If follow_symlinks is False, and the last element of the path is a symbolic\n\ - link, chmod will modify the symbolic link itself instead of the file the\n\ - link points to.\n\ -It is an error to use dir_fd or follow_symlinks when specifying path as\n\ - an open file descriptor.\n\ -dir_fd and follow_symlinks may not be implemented on your platform.\n\ - If they are unavailable, using them will raise a NotImplementedError."); +/*[clinic input] +os.chmod + + path: path_t(allow_fd='PATH_HAVE_FCHMOD') + Path to be modified. May always be specified as a str or bytes. + On some platforms, path may also be specified as an open file descriptor. + If this functionality is unavailable, using it raises an exception. + + mode: int + Operating-system mode bitfield. + + * + + dir_fd : dir_fd(requires='fchmodat') = None + If not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that + directory. + + follow_symlinks: bool = True + If False, and the last element of the path is a symbolic link, + chmod will modify the symbolic link itself instead of the file + the link points to. + +Change the access permissions of a file. + +It is an error to use dir_fd or follow_symlinks when specifying path as + an open file descriptor. +dir_fd and follow_symlinks may not be implemented on your platform. + If they are unavailable, using them will raise a NotImplementedError. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_chmod__doc__, +"chmod($module, /, path, mode, *, dir_fd=None, follow_symlinks=True)\n" +"--\n" +"\n" +"Change the access permissions of a file.\n" +"\n" +" path\n" +" Path to be modified. May always be specified as a str or bytes.\n" +" On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception.\n" +" mode\n" +" Operating-system mode bitfield.\n" +" dir_fd\n" +" If not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that\n" +" directory.\n" +" follow_symlinks\n" +" If False, and the last element of the path is a symbolic link,\n" +" chmod will modify the symbolic link itself instead of the file\n" +" the link points to.\n" +"\n" +"It is an error to use dir_fd or follow_symlinks when specifying path as\n" +" an open file descriptor.\n" +"dir_fd and follow_symlinks may not be implemented on your platform.\n" +" If they are unavailable, using them will raise a NotImplementedError."); + +#define OS_CHMOD_METHODDEF \ + {"chmod", (PyCFunction)os_chmod, METH_VARARGS|METH_KEYWORDS, os_chmod__doc__}, + +static PyObject * +os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int follow_symlinks); static PyObject * -posix_chmod(PyObject *self, PyObject *args, PyObject *kwargs) +os_chmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("chmod", "path", 0, PATH_HAVE_FCHMOD); int mode; int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&i|$O&p:chmod", _keywords, + path_converter, &path, &mode, FCHMODAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + goto exit; + return_value = os_chmod_impl(module, &path, mode, dir_fd, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=1e9db031aea46422 input=7f1618e5e15cc196]*/ +{ int result; - PyObject *return_value = NULL; - static char *keywords[] = {"path", "mode", "dir_fd", - "follow_symlinks", NULL}; #ifdef MS_WINDOWS DWORD attr; @@ -2904,33 +3308,17 @@ posix_chmod(PyObject *self, PyObject *args, PyObject *kwargs) int fchmodat_nofollow_unsupported = 0; #endif - memset(&path, 0, sizeof(path)); - path.function_name = "chmod"; -#ifdef HAVE_FCHMOD - path.allow_fd = 1; -#endif - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&p:chmod", keywords, - path_converter, &path, - &mode, -#ifdef HAVE_FCHMODAT - dir_fd_converter, &dir_fd, -#else - dir_fd_unavailable, &dir_fd, -#endif - &follow_symlinks)) - return NULL; - #if !(defined(HAVE_FCHMODAT) || defined(HAVE_LCHMOD)) if (follow_symlinks_specified("chmod", follow_symlinks)) - goto exit; + return NULL; #endif #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (path.wide) - attr = GetFileAttributesW(path.wide); + if (path->wide) + attr = GetFileAttributesW(path->wide); else - attr = GetFileAttributesA(path.narrow); + attr = GetFileAttributesA(path->narrow); if (attr == INVALID_FILE_ATTRIBUTES) result = 0; else { @@ -2938,27 +3326,26 @@ posix_chmod(PyObject *self, PyObject *args, PyObject *kwargs) attr &= ~FILE_ATTRIBUTE_READONLY; else attr |= FILE_ATTRIBUTE_READONLY; - if (path.wide) - result = SetFileAttributesW(path.wide, attr); + if (path->wide) + result = SetFileAttributesW(path->wide, attr); else - result = SetFileAttributesA(path.narrow, attr); + result = SetFileAttributesA(path->narrow, attr); } Py_END_ALLOW_THREADS if (!result) { - return_value = path_error(&path); - goto exit; + return path_error(path); } #else /* MS_WINDOWS */ Py_BEGIN_ALLOW_THREADS #ifdef HAVE_FCHMOD - if (path.fd != -1) - result = fchmod(path.fd, mode); + if (path->fd != -1) + result = fchmod(path->fd, mode); else #endif #ifdef HAVE_LCHMOD if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD)) - result = lchmod(path.narrow, mode); + result = lchmod(path->narrow, mode); else #endif #ifdef HAVE_FCHMODAT @@ -2973,7 +3360,7 @@ posix_chmod(PyObject *self, PyObject *args, PyObject *kwargs) * support dir_fd and follow_symlinks=False. (Hopefully.) * Until then, we need to be careful what exception we raise. */ - result = fchmodat(dir_fd, path.narrow, mode, + result = fchmodat(dir_fd, path->narrow, mode, follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW); /* * But wait! We can't throw the exception without allowing threads, @@ -2986,7 +3373,7 @@ posix_chmod(PyObject *self, PyObject *args, PyObject *kwargs) } else #endif - result = chmod(path.narrow, mode); + result = chmod(path->narrow, mode); Py_END_ALLOW_THREADS if (result) { @@ -3000,31 +3387,63 @@ posix_chmod(PyObject *self, PyObject *args, PyObject *kwargs) } else #endif - return_value = path_error(&path); - goto exit; + return path_error(path); } #endif - Py_INCREF(Py_None); - return_value = Py_None; -exit: - path_cleanup(&path); - return return_value; + Py_RETURN_NONE; } #ifdef HAVE_FCHMOD -PyDoc_STRVAR(posix_fchmod__doc__, -"fchmod(fd, mode)\n\n\ -Change the access permissions of the file given by file\n\ -descriptor fd. Equivalent to os.chmod(fd, mode)."); +/*[clinic input] +os.fchmod + + fd: int + mode: int + +Change the access permissions of the file given by file descriptor fd. + +Equivalent to os.chmod(fd, mode). +[clinic start generated code]*/ + +PyDoc_STRVAR(os_fchmod__doc__, +"fchmod($module, /, fd, mode)\n" +"--\n" +"\n" +"Change the access permissions of the file given by file descriptor fd.\n" +"\n" +"Equivalent to os.chmod(fd, mode)."); + +#define OS_FCHMOD_METHODDEF \ + {"fchmod", (PyCFunction)os_fchmod, METH_VARARGS|METH_KEYWORDS, os_fchmod__doc__}, static PyObject * -posix_fchmod(PyObject *self, PyObject *args) +os_fchmod_impl(PyModuleDef *module, int fd, int mode); + +static PyObject * +os_fchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - int fd, mode, res; - if (!PyArg_ParseTuple(args, "ii:fchmod", &fd, &mode)) - return NULL; + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", "mode", NULL}; + int fd; + int mode; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "ii:fchmod", _keywords, + &fd, &mode)) + goto exit; + return_value = os_fchmod_impl(module, fd, mode); + +exit: + return return_value; +} + +static PyObject * +os_fchmod_impl(PyModuleDef *module, int fd, int mode) +/*[clinic end generated code: output=3c19fbfd724a8e0f input=8ab11975ca01ee5b]*/ +{ + int res; Py_BEGIN_ALLOW_THREADS res = fchmod(fd, mode); Py_END_ALLOW_THREADS @@ -3034,238 +3453,529 @@ posix_fchmod(PyObject *self, PyObject *args) } #endif /* HAVE_FCHMOD */ + #ifdef HAVE_LCHMOD PyDoc_STRVAR(posix_lchmod__doc__, -"lchmod(path, mode)\n\n\ -Change the access permissions of a file. If path is a symlink, this\n\ -affects the link itself rather than the target.\n\ -Equivalent to chmod(path, mode, follow_symlinks=False)."); +/*[clinic input] +os.lchmod + + path: path_t + mode: int + +Change the access permissions of a file, without following symbolic links. + +If path is a symlink, this affects the link itself rather than the target. +Equivalent to chmod(path, mode, follow_symlinks=False)." +[clinic start generated code]*/ + +PyDoc_STRVAR(os_lchmod__doc__, +"lchmod($module, /, path, mode)\n" +"--\n" +"\n" +"Change the access permissions of a file, without following symbolic links.\n" +"\n" +"If path is a symlink, this affects the link itself rather than the target.\n" +"Equivalent to chmod(path, mode, follow_symlinks=False).\""); + +#define OS_LCHMOD_METHODDEF \ + {"lchmod", (PyCFunction)os_lchmod, METH_VARARGS|METH_KEYWORDS, os_lchmod__doc__}, + +static PyObject * +os_lchmod_impl(PyModuleDef *module, path_t *path, int mode); static PyObject * -posix_lchmod(PyObject *self, PyObject *args) +os_lchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "mode", NULL}; + path_t path = PATH_T_INITIALIZE("lchmod", "path", 0, 0); + int mode; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&i:lchmod", _keywords, + path_converter, &path, &mode)) + goto exit; + return_value = os_lchmod_impl(module, &path, mode); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_lchmod_impl(PyModuleDef *module, path_t *path, int mode) +/*[clinic end generated code: output=2849977d65f8c68c input=90c5663c7465d24f]*/ { - path_t path; - int i; int res; - memset(&path, 0, sizeof(path)); - path.function_name = "lchmod"; - if (!PyArg_ParseTuple(args, "O&i:lchmod", - path_converter, &path, &i)) - return NULL; Py_BEGIN_ALLOW_THREADS res = lchmod(path.narrow, i); Py_END_ALLOW_THREADS if (res < 0) { - path_error(&path); - path_cleanup(&path); + path_error(path); return NULL; } - path_cleanup(&path); Py_RETURN_NONE; } #endif /* HAVE_LCHMOD */ #ifdef HAVE_CHFLAGS -PyDoc_STRVAR(posix_chflags__doc__, -"chflags(path, flags, *, follow_symlinks=True)\n\n\ -Set file flags.\n\ -\n\ -If follow_symlinks is False, and the last element of the path is a symbolic\n\ - link, chflags will change flags on the symbolic link itself instead of the\n\ - file the link points to.\n\ -follow_symlinks may not be implemented on your platform. If it is\n\ -unavailable, using it will raise a NotImplementedError."); +/*[clinic input] +os.chflags + + path: path_t + flags: unsigned_long(bitwise=True) + follow_symlinks: bool=True + +Set file flags. + +If follow_symlinks is False, and the last element of the path is a symbolic + link, chflags will change flags on the symbolic link itself instead of the + file the link points to. +follow_symlinks may not be implemented on your platform. If it is +unavailable, using it will raise a NotImplementedError. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_chflags__doc__, +"chflags($module, /, path, flags, follow_symlinks=True)\n" +"--\n" +"\n" +"Set file flags.\n" +"\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, chflags will change flags on the symbolic link itself instead of the\n" +" file the link points to.\n" +"follow_symlinks may not be implemented on your platform. If it is\n" +"unavailable, using it will raise a NotImplementedError."); + +#define OS_CHFLAGS_METHODDEF \ + {"chflags", (PyCFunction)os_chflags, METH_VARARGS|METH_KEYWORDS, os_chflags__doc__}, + +static PyObject * +os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, int follow_symlinks); static PyObject * -posix_chflags(PyObject *self, PyObject *args, PyObject *kwargs) +os_chflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "flags", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("chflags", "path", 0, 0); unsigned long flags; int follow_symlinks = 1; - int result; - PyObject *return_value = NULL; - static char *keywords[] = {"path", "flags", "follow_symlinks", NULL}; - memset(&path, 0, sizeof(path)); - path.function_name = "chflags"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&k|$i:chflags", keywords, - path_converter, &path, - &flags, &follow_symlinks)) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&k|p:chflags", _keywords, + path_converter, &path, &flags, &follow_symlinks)) + goto exit; + return_value = os_chflags_impl(module, &path, flags, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, int follow_symlinks) +/*[clinic end generated code: output=2767927bf071e3cf input=0327e29feb876236]*/ +{ + int result; #ifndef HAVE_LCHFLAGS if (follow_symlinks_specified("chflags", follow_symlinks)) - goto exit; + return NULL; #endif Py_BEGIN_ALLOW_THREADS #ifdef HAVE_LCHFLAGS if (!follow_symlinks) - result = lchflags(path.narrow, flags); + result = lchflags(path->narrow, flags); else #endif - result = chflags(path.narrow, flags); + result = chflags(path->narrow, flags); Py_END_ALLOW_THREADS - if (result) { - return_value = path_error(&path); - goto exit; - } - - return_value = Py_None; - Py_INCREF(Py_None); + if (result) + return path_error(path); -exit: - path_cleanup(&path); - return return_value; + Py_RETURN_NONE; } #endif /* HAVE_CHFLAGS */ + #ifdef HAVE_LCHFLAGS -PyDoc_STRVAR(posix_lchflags__doc__, -"lchflags(path, flags)\n\n\ -Set file flags.\n\ -This function will not follow symbolic links.\n\ -Equivalent to chflags(path, flags, follow_symlinks=False)."); +/*[clinic input] +os.lchflags + + path: path_t + flags: unsigned_long(bitwise=True) + +Set file flags. + +This function will not follow symbolic links. +Equivalent to chflags(path, flags, follow_symlinks=False). +[clinic start generated code]*/ + +PyDoc_STRVAR(os_lchflags__doc__, +"lchflags($module, /, path, flags)\n" +"--\n" +"\n" +"Set file flags.\n" +"\n" +"This function will not follow symbolic links.\n" +"Equivalent to chflags(path, flags, follow_symlinks=False)."); + +#define OS_LCHFLAGS_METHODDEF \ + {"lchflags", (PyCFunction)os_lchflags, METH_VARARGS|METH_KEYWORDS, os_lchflags__doc__}, + +static PyObject * +os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags); static PyObject * -posix_lchflags(PyObject *self, PyObject *args) +os_lchflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "flags", NULL}; + path_t path = PATH_T_INITIALIZE("lchflags", "path", 0, 0); unsigned long flags; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&k:lchflags", _keywords, + path_converter, &path, &flags)) + goto exit; + return_value = os_lchflags_impl(module, &path, flags); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags) +/*[clinic end generated code: output=bb93b6b8a5e45aa7 input=f9f82ea8b585ca9d]*/ +{ int res; - memset(&path, 0, sizeof(path)); - path.function_name = "lchflags"; - if (!PyArg_ParseTuple(args, "O&k:lchflags", - path_converter, &path, &flags)) - return NULL; Py_BEGIN_ALLOW_THREADS res = lchflags(path.narrow, flags); Py_END_ALLOW_THREADS if (res < 0) { - path_error(&path); - path_cleanup(&path); - return NULL; + return path_error(path); } - path_cleanup(&path); Py_RETURN_NONE; } #endif /* HAVE_LCHFLAGS */ + #ifdef HAVE_CHROOT -PyDoc_STRVAR(posix_chroot__doc__, -"chroot(path)\n\n\ -Change root directory to path."); +/*[clinic input] +os.chroot + path: path_t -static PyObject * -posix_chroot(PyObject *self, PyObject *args) -{ - return posix_1str("chroot", args, "O&:chroot", chroot); +Change root directory to path. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_chroot__doc__, +"chroot($module, /, path)\n" +"--\n" +"\n" +"Change root directory to path."); + +#define OS_CHROOT_METHODDEF \ + {"chroot", (PyCFunction)os_chroot, METH_VARARGS|METH_KEYWORDS, os_chroot__doc__}, + +static PyObject * +os_chroot_impl(PyModuleDef *module, path_t *path); + +static PyObject * +os_chroot(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + path_t path = PATH_T_INITIALIZE("chroot", "path", 0, 0); + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:chroot", _keywords, + path_converter, &path)) + goto exit; + return_value = os_chroot_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; } -#endif + +static PyObject * +os_chroot_impl(PyModuleDef *module, path_t *path) +/*[clinic end generated code: output=15b1256cbe4f24a1 input=14822965652c3dc3]*/ +{ + int res; + Py_BEGIN_ALLOW_THREADS + res = chroot(path->narrow); + Py_END_ALLOW_THREADS + if (res < 0) + return path_error(path); + Py_RETURN_NONE; +} +#endif /* HAVE_CHROOT */ + #ifdef HAVE_FSYNC -PyDoc_STRVAR(posix_fsync__doc__, -"fsync(fildes)\n\n\ -force write of file with filedescriptor to disk."); +/*[clinic input] +os.fsync + + fd: fildes + +Force write of fd to disk. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_fsync__doc__, +"fsync($module, /, fd)\n" +"--\n" +"\n" +"Force write of fd to disk."); + +#define OS_FSYNC_METHODDEF \ + {"fsync", (PyCFunction)os_fsync, METH_VARARGS|METH_KEYWORDS, os_fsync__doc__}, + +static PyObject * +os_fsync_impl(PyModuleDef *module, int fd); + +static PyObject * +os_fsync(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; + int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:fsync", _keywords, + fildes_converter, &fd)) + goto exit; + return_value = os_fsync_impl(module, fd); + +exit: + return return_value; +} static PyObject * -posix_fsync(PyObject *self, PyObject *fdobj) +os_fsync_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=59f32d3a0b360133 input=21c3645c056967f2]*/ { - return posix_fildes(fdobj, fsync); + return posix_fildes_fd(fd, fsync); } #endif /* HAVE_FSYNC */ + #ifdef HAVE_SYNC -PyDoc_STRVAR(posix_sync__doc__, -"sync()\n\n\ -Force write of everything to disk."); +/*[clinic input] +os.sync + +Force write of everything to disk. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sync__doc__, +"sync($module, /)\n" +"--\n" +"\n" +"Force write of everything to disk."); + +#define OS_SYNC_METHODDEF \ + {"sync", (PyCFunction)os_sync, METH_NOARGS, os_sync__doc__}, + +static PyObject * +os_sync_impl(PyModuleDef *module); + +static PyObject * +os_sync(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_sync_impl(module); +} static PyObject * -posix_sync(PyObject *self, PyObject *noargs) +os_sync_impl(PyModuleDef *module) +/*[clinic end generated code: output=526c495683d0bb38 input=84749fe5e9b404ff]*/ { Py_BEGIN_ALLOW_THREADS sync(); Py_END_ALLOW_THREADS Py_RETURN_NONE; } -#endif +#endif /* HAVE_SYNC */ -#ifdef HAVE_FDATASYNC +#ifdef HAVE_FDATASYNC #ifdef __hpux extern int fdatasync(int); /* On HP-UX, in libc but not in unistd.h */ #endif -PyDoc_STRVAR(posix_fdatasync__doc__, -"fdatasync(fildes)\n\n\ -force write of file with filedescriptor to disk.\n\ - does not force update of metadata."); +/*[clinic input] +os.fdatasync + + fd: fildes + +Force write of fd to disk without forcing update of metadata. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_fdatasync__doc__, +"fdatasync($module, /, fd)\n" +"--\n" +"\n" +"Force write of fd to disk without forcing update of metadata."); + +#define OS_FDATASYNC_METHODDEF \ + {"fdatasync", (PyCFunction)os_fdatasync, METH_VARARGS|METH_KEYWORDS, os_fdatasync__doc__}, static PyObject * -posix_fdatasync(PyObject *self, PyObject *fdobj) +os_fdatasync_impl(PyModuleDef *module, int fd); + +static PyObject * +os_fdatasync(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; + int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:fdatasync", _keywords, + fildes_converter, &fd)) + goto exit; + return_value = os_fdatasync_impl(module, fd); + +exit: + return return_value; +} + +static PyObject * +os_fdatasync_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=2335fdfd37c92180 input=bc74791ee54dd291]*/ { - return posix_fildes(fdobj, fdatasync); + return posix_fildes_fd(fd, fdatasync); } #endif /* HAVE_FDATASYNC */ #ifdef HAVE_CHOWN -PyDoc_STRVAR(posix_chown__doc__, -"chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)\n\n\ -Change the owner and group id of path to the numeric uid and gid.\n\ -\n\ -path may always be specified as a string.\n\ -On some platforms, path may also be specified as an open file descriptor.\n\ - If this functionality is unavailable, using it raises an exception.\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -If follow_symlinks is False, and the last element of the path is a symbolic\n\ - link, chown will modify the symbolic link itself instead of the file the\n\ - link points to.\n\ -It is an error to use dir_fd or follow_symlinks when specifying path as\n\ - an open file descriptor.\n\ -dir_fd and follow_symlinks may not be implemented on your platform.\n\ - If they are unavailable, using them will raise a NotImplementedError."); +/*[clinic input] +os.chown + + path : path_t(allow_fd='PATH_HAVE_FCHOWN') + Path to be examined; can be string, bytes, or open-file-descriptor int. + + uid: uid_t + + gid: gid_t + + * + + dir_fd : dir_fd(requires='fchownat') = None + If not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that + directory. + + follow_symlinks: bool = True + If False, and the last element of the path is a symbolic link, + stat will examine the symbolic link itself instead of the file + the link points to. + +Change the owner and group id of path to the numeric uid and gid.\ + +path may always be specified as a string. +On some platforms, path may also be specified as an open file descriptor. + If this functionality is unavailable, using it raises an exception. +If dir_fd is not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that directory. +If follow_symlinks is False, and the last element of the path is a symbolic + link, chown will modify the symbolic link itself instead of the file the + link points to. +It is an error to use dir_fd or follow_symlinks when specifying path as + an open file descriptor. +dir_fd and follow_symlinks may not be implemented on your platform. + If they are unavailable, using them will raise a NotImplementedError. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_chown__doc__, +"chown($module, /, path, uid, gid, *, dir_fd=None, follow_symlinks=True)\n" +"--\n" +"\n" +"Change the owner and group id of path to the numeric uid and gid.\\\n" +"\n" +" path\n" +" Path to be examined; can be string, bytes, or open-file-descriptor int.\n" +" dir_fd\n" +" If not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that\n" +" directory.\n" +" follow_symlinks\n" +" If False, and the last element of the path is a symbolic link,\n" +" stat will examine the symbolic link itself instead of the file\n" +" the link points to.\n" +"\n" +"path may always be specified as a string.\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception.\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, chown will modify the symbolic link itself instead of the file the\n" +" link points to.\n" +"It is an error to use dir_fd or follow_symlinks when specifying path as\n" +" an open file descriptor.\n" +"dir_fd and follow_symlinks may not be implemented on your platform.\n" +" If they are unavailable, using them will raise a NotImplementedError."); + +#define OS_CHOWN_METHODDEF \ + {"chown", (PyCFunction)os_chown, METH_VARARGS|METH_KEYWORDS, os_chown__doc__}, static PyObject * -posix_chown(PyObject *self, PyObject *args, PyObject *kwargs) +os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks); + +static PyObject * +os_chown(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("chown", "path", 0, PATH_HAVE_FCHOWN); uid_t uid; gid_t gid; int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - int result; - PyObject *return_value = NULL; - static char *keywords[] = {"path", "uid", "gid", "dir_fd", - "follow_symlinks", NULL}; - memset(&path, 0, sizeof(path)); - path.function_name = "chown"; -#ifdef HAVE_FCHOWN - path.allow_fd = 1; -#endif - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&|$O&p:chown", keywords, - path_converter, &path, - _Py_Uid_Converter, &uid, - _Py_Gid_Converter, &gid, -#ifdef HAVE_FCHOWNAT - dir_fd_converter, &dir_fd, -#else - dir_fd_unavailable, &dir_fd, -#endif - &follow_symlinks)) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&O&|$O&p:chown", _keywords, + path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid, FCHOWNAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + goto exit; + return_value = os_chown_impl(module, &path, uid, gid, dir_fd, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=22f011e3b4f9ff49 input=a61cc35574814d5d]*/ +{ + int result; #if !(defined(HAVE_LCHOWN) || defined(HAVE_FCHOWNAT)) if (follow_symlinks_specified("chown", follow_symlinks)) - goto exit; + return NULL; #endif - if (dir_fd_and_fd_invalid("chown", dir_fd, path.fd) || - fd_and_follow_symlinks_invalid("chown", path.fd, follow_symlinks)) - goto exit; + if (dir_fd_and_fd_invalid("chown", dir_fd, path->fd) || + fd_and_follow_symlinks_invalid("chown", path->fd, follow_symlinks)) + return NULL; #ifdef __APPLE__ /* @@ -3276,61 +3986,90 @@ posix_chown(PyObject *self, PyObject *args, PyObject *kwargs) */ if ((!follow_symlinks) && (lchown == NULL)) { follow_symlinks_specified("chown", follow_symlinks); - goto exit; + return NULL; } #endif Py_BEGIN_ALLOW_THREADS #ifdef HAVE_FCHOWN - if (path.fd != -1) - result = fchown(path.fd, uid, gid); + if (path->fd != -1) + result = fchown(path->fd, uid, gid); else #endif #ifdef HAVE_LCHOWN if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD)) - result = lchown(path.narrow, uid, gid); + result = lchown(path->narrow, uid, gid); else #endif #ifdef HAVE_FCHOWNAT if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks)) - result = fchownat(dir_fd, path.narrow, uid, gid, + result = fchownat(dir_fd, path->narrow, uid, gid, follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW); else #endif - result = chown(path.narrow, uid, gid); + result = chown(path->narrow, uid, gid); Py_END_ALLOW_THREADS - if (result) { - return_value = path_error(&path); - goto exit; - } - - return_value = Py_None; - Py_INCREF(Py_None); + if (result) + return path_error(path); -exit: - path_cleanup(&path); - return return_value; + Py_RETURN_NONE; } #endif /* HAVE_CHOWN */ + #ifdef HAVE_FCHOWN -PyDoc_STRVAR(posix_fchown__doc__, -"fchown(fd, uid, gid)\n\n\ -Change the owner and group id of the file given by file descriptor\n\ -fd to the numeric uid and gid. Equivalent to os.chown(fd, uid, gid)."); +/*[clinic input] +os.fchown + + fd: int + uid: uid_t + gid: gid_t + +Change the owner and group id of the file specified by file descriptor. + +Equivalent to os.chown(fd, uid, gid). + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_fchown__doc__, +"fchown($module, /, fd, uid, gid)\n" +"--\n" +"\n" +"Change the owner and group id of the file specified by file descriptor.\n" +"\n" +"Equivalent to os.chown(fd, uid, gid)."); + +#define OS_FCHOWN_METHODDEF \ + {"fchown", (PyCFunction)os_fchown, METH_VARARGS|METH_KEYWORDS, os_fchown__doc__}, + +static PyObject * +os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid); static PyObject * -posix_fchown(PyObject *self, PyObject *args) +os_fchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) { + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", "uid", "gid", NULL}; int fd; uid_t uid; gid_t gid; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "iO&O&:fchown", _keywords, + &fd, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) + goto exit; + return_value = os_fchown_impl(module, fd, uid, gid); + +exit: + return return_value; +} + +static PyObject * +os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid) +/*[clinic end generated code: output=687781cb7d8974d6 input=3af544ba1b13a0d7]*/ +{ int res; - if (!PyArg_ParseTuple(args, "iO&O&:fchown", &fd, - _Py_Uid_Converter, &uid, - _Py_Gid_Converter, &gid)) - return NULL; Py_BEGIN_ALLOW_THREADS res = fchown(fd, uid, gid); Py_END_ALLOW_THREADS @@ -3340,38 +4079,70 @@ posix_fchown(PyObject *self, PyObject *args) } #endif /* HAVE_FCHOWN */ + #ifdef HAVE_LCHOWN -PyDoc_STRVAR(posix_lchown__doc__, -"lchown(path, uid, gid)\n\n\ -Change the owner and group id of path to the numeric uid and gid.\n\ -This function will not follow symbolic links.\n\ -Equivalent to os.chown(path, uid, gid, follow_symlinks=False)."); +/*[clinic input] +os.lchown + + path : path_t + uid: uid_t + gid: gid_t + +Change the owner and group id of path to the numeric uid and gid. + +This function will not follow symbolic links. +Equivalent to os.chown(path, uid, gid, follow_symlinks=False). +[clinic start generated code]*/ + +PyDoc_STRVAR(os_lchown__doc__, +"lchown($module, /, path, uid, gid)\n" +"--\n" +"\n" +"Change the owner and group id of path to the numeric uid and gid.\n" +"\n" +"This function will not follow symbolic links.\n" +"Equivalent to os.chown(path, uid, gid, follow_symlinks=False)."); + +#define OS_LCHOWN_METHODDEF \ + {"lchown", (PyCFunction)os_lchown, METH_VARARGS|METH_KEYWORDS, os_lchown__doc__}, static PyObject * -posix_lchown(PyObject *self, PyObject *args) +os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid); + +static PyObject * +os_lchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "uid", "gid", NULL}; + path_t path = PATH_T_INITIALIZE("lchown", "path", 0, 0); uid_t uid; gid_t gid; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&O&:lchown", _keywords, + path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) + goto exit; + return_value = os_lchown_impl(module, &path, uid, gid); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid) +/*[clinic end generated code: output=bf25fdb0d25130e2 input=b1c6014d563a7161]*/ +{ int res; - memset(&path, 0, sizeof(path)); - path.function_name = "lchown"; - if (!PyArg_ParseTuple(args, "O&O&O&:lchown", - path_converter, &path, - _Py_Uid_Converter, &uid, - _Py_Gid_Converter, &gid)) - return NULL; Py_BEGIN_ALLOW_THREADS - res = lchown(path.narrow, uid, gid); + res = lchown(path->narrow, uid, gid); Py_END_ALLOW_THREADS if (res < 0) { - path_error(&path); - path_cleanup(&path); - return NULL; + return path_error(path); } - path_cleanup(&path); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } #endif /* HAVE_LCHOWN */ @@ -3428,148 +4199,209 @@ posix_getcwd(int use_bytes) return PyUnicode_DecodeFSDefault(buf); } -PyDoc_STRVAR(posix_getcwd__doc__, -"getcwd() -> path\n\n\ -Return a unicode string representing the current working directory."); -static PyObject * -posix_getcwd_unicode(PyObject *self) -{ - return posix_getcwd(0); -} +/*[clinic input] +os.getcwd -PyDoc_STRVAR(posix_getcwdb__doc__, -"getcwdb() -> path\n\n\ -Return a bytes string representing the current working directory."); +Return a unicode string representing the current working directory. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getcwd__doc__, +"getcwd($module, /)\n" +"--\n" +"\n" +"Return a unicode string representing the current working directory."); + +#define OS_GETCWD_METHODDEF \ + {"getcwd", (PyCFunction)os_getcwd, METH_NOARGS, os_getcwd__doc__}, + +static PyObject * +os_getcwd_impl(PyModuleDef *module); static PyObject * -posix_getcwd_bytes(PyObject *self) +os_getcwd(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) { - return posix_getcwd(1); + return os_getcwd_impl(module); } +static PyObject * +os_getcwd_impl(PyModuleDef *module) +/*[clinic end generated code: output=d70b281db5c78ff7 input=f069211bb70e3d39]*/ +{ + return posix_getcwd(0); +} + + +/*[clinic input] +os.getcwdb + +Return a bytes string representing the current working directory. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getcwdb__doc__, +"getcwdb($module, /)\n" +"--\n" +"\n" +"Return a bytes string representing the current working directory."); + +#define OS_GETCWDB_METHODDEF \ + {"getcwdb", (PyCFunction)os_getcwdb, METH_NOARGS, os_getcwdb__doc__}, + +static PyObject * +os_getcwdb_impl(PyModuleDef *module); + +static PyObject * +os_getcwdb(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getcwdb_impl(module); +} + +static PyObject * +os_getcwdb_impl(PyModuleDef *module) +/*[clinic end generated code: output=75da47f2d75f9166 input=f6f6a378dad3d9cb]*/ +{ + return posix_getcwd(1); +} + + #if ((!defined(HAVE_LINK)) && defined(MS_WINDOWS)) #define HAVE_LINK 1 #endif #ifdef HAVE_LINK -PyDoc_STRVAR(posix_link__doc__, -"link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)\n\n\ -Create a hard link to a file.\n\ -\n\ -If either src_dir_fd or dst_dir_fd is not None, it should be a file\n\ - descriptor open to a directory, and the respective path string (src or dst)\n\ - should be relative; the path will then be relative to that directory.\n\ -If follow_symlinks is False, and the last element of src is a symbolic\n\ - link, link will create a link to the symbolic link itself instead of the\n\ - file the link points to.\n\ -src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your\n\ - platform. If they are unavailable, using them will raise a\n\ - NotImplementedError."); +/*[clinic input] + +os.link + + src : path_t + dst : path_t + * + src_dir_fd : dir_fd = None + dst_dir_fd : dir_fd = None + follow_symlinks: bool = True + +Create a hard link to a file. + +If either src_dir_fd or dst_dir_fd is not None, it should be a file + descriptor open to a directory, and the respective path string (src or dst) + should be relative; the path will then be relative to that directory. +If follow_symlinks is False, and the last element of src is a symbolic + link, link will create a link to the symbolic link itself instead of the + file the link points to. +src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your + platform. If they are unavailable, using them will raise a + NotImplementedError. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_link__doc__, +"link($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None,\n" +" follow_symlinks=True)\n" +"--\n" +"\n" +"Create a hard link to a file.\n" +"\n" +"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" +" descriptor open to a directory, and the respective path string (src or dst)\n" +" should be relative; the path will then be relative to that directory.\n" +"If follow_symlinks is False, and the last element of src is a symbolic\n" +" link, link will create a link to the symbolic link itself instead of the\n" +" file the link points to.\n" +"src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your\n" +" platform. If they are unavailable, using them will raise a\n" +" NotImplementedError."); + +#define OS_LINK_METHODDEF \ + {"link", (PyCFunction)os_link, METH_VARARGS|METH_KEYWORDS, os_link__doc__}, static PyObject * -posix_link(PyObject *self, PyObject *args, PyObject *kwargs) +os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks); + +static PyObject * +os_link(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t src, dst; + PyObject *return_value = NULL; + static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL}; + path_t src = PATH_T_INITIALIZE("link", "src", 0, 0); + path_t dst = PATH_T_INITIALIZE("link", "dst", 0, 0); int src_dir_fd = DEFAULT_DIR_FD; int dst_dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - PyObject *return_value = NULL; - static char *keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", - "follow_symlinks", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|$O&O&p:link", _keywords, + path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd, &follow_symlinks)) + goto exit; + return_value = os_link_impl(module, &src, &dst, src_dir_fd, dst_dir_fd, follow_symlinks); + +exit: + /* Cleanup for src */ + path_cleanup(&src); + /* Cleanup for dst */ + path_cleanup(&dst); + + return return_value; +} + +static PyObject * +os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks) +/*[clinic end generated code: output=53477662fe02e183 input=b0095ebbcbaa7e04]*/ +{ #ifdef MS_WINDOWS BOOL result; #else int result; #endif - memset(&src, 0, sizeof(src)); - memset(&dst, 0, sizeof(dst)); - src.function_name = "link"; - dst.function_name = "link"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|O&O&p:link", keywords, - path_converter, &src, - path_converter, &dst, - dir_fd_converter, &src_dir_fd, - dir_fd_converter, &dst_dir_fd, - &follow_symlinks)) - return NULL; - #ifndef HAVE_LINKAT if ((src_dir_fd != DEFAULT_DIR_FD) || (dst_dir_fd != DEFAULT_DIR_FD)) { argument_unavailable_error("link", "src_dir_fd and dst_dir_fd"); - goto exit; + return NULL; } #endif - if ((src.narrow && dst.wide) || (src.wide && dst.narrow)) { + if ((src->narrow && dst->wide) || (src->wide && dst->narrow)) { PyErr_SetString(PyExc_NotImplementedError, "link: src and dst must be the same type"); - goto exit; + return NULL; } #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (src.wide) - result = CreateHardLinkW(dst.wide, src.wide, NULL); + if (src->wide) + result = CreateHardLinkW(dst->wide, src->wide, NULL); else - result = CreateHardLinkA(dst.narrow, src.narrow, NULL); + result = CreateHardLinkA(dst->narrow, src->narrow, NULL); Py_END_ALLOW_THREADS - if (!result) { - return_value = path_error2(&src, &dst); - goto exit; - } + if (!result) + return path_error2(src, dst); #else Py_BEGIN_ALLOW_THREADS #ifdef HAVE_LINKAT if ((src_dir_fd != DEFAULT_DIR_FD) || (dst_dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks)) - result = linkat(src_dir_fd, src.narrow, - dst_dir_fd, dst.narrow, + result = linkat(src_dir_fd, src->narrow, + dst_dir_fd, dst->narrow, follow_symlinks ? AT_SYMLINK_FOLLOW : 0); else #endif - result = link(src.narrow, dst.narrow); + result = link(src->narrow, dst->narrow); Py_END_ALLOW_THREADS - if (result) { - return_value = path_error2(&src, &dst); - goto exit; - } + if (result) + return path_error2(src, dst); #endif - return_value = Py_None; - Py_INCREF(Py_None); - -exit: - path_cleanup(&src); - path_cleanup(&dst); - return return_value; + Py_RETURN_NONE; } #endif - -PyDoc_STRVAR(posix_listdir__doc__, -"listdir(path='.') -> list_of_filenames\n\n\ -Return a list containing the names of the files in the directory.\n\ -The list is in arbitrary order. It does not include the special\n\ -entries '.' and '..' even if they are present in the directory.\n\ -\n\ -path can be specified as either str or bytes. If path is bytes,\n\ - the filenames returned will also be bytes; in all other circumstances\n\ - the filenames returned will be str.\n\ -On some platforms, path may also be specified as an open file descriptor;\n\ - the file descriptor must refer to a directory.\n\ - If this functionality is unavailable, using it raises NotImplementedError."); - #if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR) static PyObject * _listdir_windows_no_opendir(path_t *path, PyObject *list) { - static char *keywords[] = {"path", NULL}; PyObject *v; HANDLE hFindFile = INVALID_HANDLE_VALUE; BOOL result; @@ -3828,38 +4660,85 @@ exit: } /* end of _posix_listdir */ #endif /* which OS */ + +/*[clinic input] +os.listdir + + path : path_t(nullable=True, allow_fd='PATH_HAVE_FDOPENDIR') = None + +Return a list containing the names of the files in the directory. + +path can be specified as either str or bytes. If path is bytes, + the filenames returned will also be bytes; in all other circumstances + the filenames returned will be str. +If path is None, uses the path='.'. +On some platforms, path may also be specified as an open file descriptor;\ + the file descriptor must refer to a directory. + If this functionality is unavailable, using it raises NotImplementedError. + +The list is in arbitrary order. It does not include the special +entries '.' and '..' even if they are present in the directory. + + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_listdir__doc__, +"listdir($module, /, path=None)\n" +"--\n" +"\n" +"Return a list containing the names of the files in the directory.\n" +"\n" +"path can be specified as either str or bytes. If path is bytes,\n" +" the filenames returned will also be bytes; in all other circumstances\n" +" the filenames returned will be str.\n" +"If path is None, uses the path=\'.\'.\n" +"On some platforms, path may also be specified as an open file descriptor;\\\n" +" the file descriptor must refer to a directory.\n" +" If this functionality is unavailable, using it raises NotImplementedError.\n" +"\n" +"The list is in arbitrary order. It does not include the special\n" +"entries \'.\' and \'..\' even if they are present in the directory."); + +#define OS_LISTDIR_METHODDEF \ + {"listdir", (PyCFunction)os_listdir, METH_VARARGS|METH_KEYWORDS, os_listdir__doc__}, + +static PyObject * +os_listdir_impl(PyModuleDef *module, path_t *path); + static PyObject * -posix_listdir(PyObject *self, PyObject *args, PyObject *kwargs) +os_listdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; - PyObject *list = NULL; - static char *keywords[] = {"path", NULL}; - PyObject *return_value; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + path_t path = PATH_T_INITIALIZE("listdir", "path", 1, PATH_HAVE_FDOPENDIR); - memset(&path, 0, sizeof(path)); - path.function_name = "listdir"; - path.nullable = 1; -#ifdef HAVE_FDOPENDIR - path.allow_fd = 1; - path.fd = -1; -#endif + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O&:listdir", _keywords, + path_converter, &path)) + goto exit; + return_value = os_listdir_impl(module, &path); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&:listdir", keywords, - path_converter, &path)) { - return NULL; - } +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} +static PyObject * +os_listdir_impl(PyModuleDef *module, path_t *path) +/*[clinic end generated code: output=e159bd9be6909018 input=09e300416e3cd729]*/ +{ #if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR) - return_value = _listdir_windows_no_opendir(&path, list); + return _listdir_windows_no_opendir(path, NULL); #else - return_value = _posix_listdir(&path, list); + return _posix_listdir(path, NULL); #endif - path_cleanup(&path); - return return_value; } #ifdef MS_WINDOWS /* A helper function for abspath on win32 */ +/* AC 3.5: probably just convert to using path converter */ static PyObject * posix__getfullpathname(PyObject *self, PyObject *args) { @@ -3915,25 +4794,59 @@ posix__getfullpathname(PyObject *self, PyObject *args) Py_FileSystemDefaultEncoding, NULL); } return PyBytes_FromString(outbuf); -} /* end of posix__getfullpathname */ +} + + +/*[clinic input] +os._getfinalpathname + + path: unicode + / + +A helper function for samepath on windows. +[clinic start generated code]*/ + +PyDoc_STRVAR(os__getfinalpathname__doc__, +"_getfinalpathname($module, path, /)\n" +"--\n" +"\n" +"A helper function for samepath on windows."); + +#define OS__GETFINALPATHNAME_METHODDEF \ + {"_getfinalpathname", (PyCFunction)os__getfinalpathname, METH_VARARGS, os__getfinalpathname__doc__}, + +static PyObject * +os__getfinalpathname_impl(PyModuleDef *module, PyObject *path); + +static PyObject * +os__getfinalpathname(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *path; + if (!PyArg_ParseTuple(args, + "U:_getfinalpathname", + &path)) + goto exit; + return_value = os__getfinalpathname_impl(module, path); +exit: + return return_value; +} -/* A helper function for samepath on windows */ static PyObject * -posix__getfinalpathname(PyObject *self, PyObject *args) +os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) +/*[clinic end generated code: output=4563c6eacf1b0881 input=71d5e89334891bf4]*/ { HANDLE hFile; int buf_size; wchar_t *target_path; int result_length; - PyObject *po, *result; - wchar_t *path; + PyObject *result; + wchar_t *path_wchar; - if (!PyArg_ParseTuple(args, "U|:_getfinalpathname", &po)) - return NULL; - path = PyUnicode_AsUnicode(po); - if (path == NULL) + path_wchar = PyUnicode_AsUnicode(path); + if (path_wchar == NULL) return NULL; if(!check_GetFinalPathNameByHandle()) { @@ -3944,7 +4857,7 @@ posix__getfinalpathname(PyObject *self, PyObject *args) } hFile = CreateFileW( - path, + path_wchar, 0, /* desired access */ 0, /* share mode */ NULL, /* security attributes */ @@ -3954,14 +4867,14 @@ posix__getfinalpathname(PyObject *self, PyObject *args) NULL); if(hFile == INVALID_HANDLE_VALUE) - return win32_error_object("CreateFileW", po); + return win32_error_object("CreateFileW", path); /* We have a good handle to the target, use it to determine the target path name. */ buf_size = Py_GetFinalPathNameByHandleW(hFile, 0, 0, VOLUME_NAME_NT); if(!buf_size) - return win32_error_object("GetFinalPathNameByHandle", po); + return win32_error_object("GetFinalPathNameByHandle", path); target_path = (wchar_t *)PyMem_Malloc((buf_size+1)*sizeof(wchar_t)); if(!target_path) @@ -3970,21 +4883,21 @@ posix__getfinalpathname(PyObject *self, PyObject *args) result_length = Py_GetFinalPathNameByHandleW(hFile, target_path, buf_size, VOLUME_NAME_DOS); if(!result_length) - return win32_error_object("GetFinalPathNamyByHandle", po); + return win32_error_object("GetFinalPathNamyByHandle", path); if(!CloseHandle(hFile)) - return win32_error_object("CloseHandle", po); + return win32_error_object("CloseHandle", path); target_path[result_length] = 0; result = PyUnicode_FromWideChar(target_path, result_length); PyMem_Free(target_path); return result; - -} /* end of posix__getfinalpathname */ +} PyDoc_STRVAR(posix__isdir__doc__, "Return true if the pathname refers to an existing directory."); +/* AC 3.5: convert using path converter */ static PyObject * posix__isdir(PyObject *self, PyObject *args) { @@ -4021,22 +4934,55 @@ check: Py_RETURN_FALSE; } -PyDoc_STRVAR(posix__getvolumepathname__doc__, -"Return volume mount point of the specified path."); -/* A helper function for ismount on windows */ +/*[clinic input] +os._getvolumepathname + + path: unicode + +A helper function for ismount on Win32. +[clinic start generated code]*/ + +PyDoc_STRVAR(os__getvolumepathname__doc__, +"_getvolumepathname($module, /, path)\n" +"--\n" +"\n" +"A helper function for ismount on Win32."); + +#define OS__GETVOLUMEPATHNAME_METHODDEF \ + {"_getvolumepathname", (PyCFunction)os__getvolumepathname, METH_VARARGS|METH_KEYWORDS, os__getvolumepathname__doc__}, + +static PyObject * +os__getvolumepathname_impl(PyModuleDef *module, PyObject *path); + static PyObject * -posix__getvolumepathname(PyObject *self, PyObject *args) +os__getvolumepathname(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - PyObject *po, *result; - wchar_t *path, *mountpath=NULL; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + PyObject *path; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "U:_getvolumepathname", _keywords, + &path)) + goto exit; + return_value = os__getvolumepathname_impl(module, path); + +exit: + return return_value; +} + +static PyObject * +os__getvolumepathname_impl(PyModuleDef *module, PyObject *path) +/*[clinic end generated code: output=ac0833b6d6da7657 input=7eacadc40acbda6b]*/ +{ + PyObject *result; + wchar_t *path_wchar, *mountpath=NULL; size_t buflen; BOOL ret; - if (!PyArg_ParseTuple(args, "U|:_getvolumepathname", &po)) - return NULL; - path = PyUnicode_AsUnicodeAndSize(po, &buflen); - if (path == NULL) + path_wchar = PyUnicode_AsUnicodeAndSize(path, &buflen); + if (path_wchar == NULL) return NULL; buflen += 1; @@ -4053,12 +4999,12 @@ posix__getvolumepathname(PyObject *self, PyObject *args) return PyErr_NoMemory(); Py_BEGIN_ALLOW_THREADS - ret = GetVolumePathNameW(path, mountpath, + ret = GetVolumePathNameW(path_wchar, mountpath, Py_SAFE_DOWNCAST(buflen, size_t, DWORD)); Py_END_ALLOW_THREADS if (!ret) { - result = win32_error_object("_getvolumepathname", po); + result = win32_error_object("_getvolumepathname", path); goto exit; } result = PyUnicode_FromWideChar(mountpath, wcslen(mountpath)); @@ -4067,78 +5013,107 @@ exit: PyMem_Free(mountpath); return result; } -/* end of posix__getvolumepathname */ #endif /* MS_WINDOWS */ -PyDoc_STRVAR(posix_mkdir__doc__, -"mkdir(path, mode=0o777, *, dir_fd=None)\n\n\ -Create a directory.\n\ -\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -dir_fd may not be implemented on your platform.\n\ - If it is unavailable, using it will raise a NotImplementedError.\n\ -\n\ -The mode argument is ignored on Windows."); + +/*[clinic input] +os.mkdir + + path : path_t + + mode: int = 0o777 + + * + + dir_fd : dir_fd(requires='mkdirat') = None + +# "mkdir(path, mode=0o777, *, dir_fd=None)\n\n\ + +Create a directory. + +If dir_fd is not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that directory. +dir_fd may not be implemented on your platform. + If it is unavailable, using it will raise a NotImplementedError. + +The mode argument is ignored on Windows. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_mkdir__doc__, +"mkdir($module, /, path, mode=511, *, dir_fd=None)\n" +"--\n" +"\n" +"Create a directory.\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError.\n" +"\n" +"The mode argument is ignored on Windows."); + +#define OS_MKDIR_METHODDEF \ + {"mkdir", (PyCFunction)os_mkdir, METH_VARARGS|METH_KEYWORDS, os_mkdir__doc__}, + +static PyObject * +os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); static PyObject * -posix_mkdir(PyObject *self, PyObject *args, PyObject *kwargs) +os_mkdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; - int mode = 0777; - int dir_fd = DEFAULT_DIR_FD; - static char *keywords[] = {"path", "mode", "dir_fd", NULL}; PyObject *return_value = NULL; - int result; + static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("mkdir", "path", 0, 0); + int mode = 511; + int dir_fd = DEFAULT_DIR_FD; - memset(&path, 0, sizeof(path)); - path.function_name = "mkdir"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i$O&:mkdir", keywords, - path_converter, &path, &mode, -#ifdef HAVE_MKDIRAT - dir_fd_converter, &dir_fd -#else - dir_fd_unavailable, &dir_fd -#endif - )) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|i$O&:mkdir", _keywords, + path_converter, &path, &mode, MKDIRAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_mkdir_impl(module, &path, mode, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) +/*[clinic end generated code: output=55c6ef2bc1b207e6 input=e965f68377e9b1ce]*/ +{ + int result; #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (path.wide) - result = CreateDirectoryW(path.wide, NULL); + if (path->wide) + result = CreateDirectoryW(path->wide, NULL); else - result = CreateDirectoryA(path.narrow, NULL); + result = CreateDirectoryA(path->narrow, NULL); Py_END_ALLOW_THREADS - if (!result) { - return_value = path_error(&path); - goto exit; - } + if (!result) + return path_error(path); #else Py_BEGIN_ALLOW_THREADS #if HAVE_MKDIRAT if (dir_fd != DEFAULT_DIR_FD) - result = mkdirat(dir_fd, path.narrow, mode); + result = mkdirat(dir_fd, path->narrow, mode); else #endif #if ( defined(__WATCOMC__) || defined(PYCC_VACPP) ) && !defined(__QNX__) - result = mkdir(path.narrow); + result = mkdir(path->narrow); #else - result = mkdir(path.narrow, mode); + result = mkdir(path->narrow, mode); #endif Py_END_ALLOW_THREADS - if (result < 0) { - return_value = path_error(&path); - goto exit; - } + if (result < 0) + return path_error(path); #endif - return_value = Py_None; - Py_INCREF(Py_None); -exit: - path_cleanup(&path); - return return_value; + Py_RETURN_NONE; } @@ -4149,27 +5124,58 @@ exit: #ifdef HAVE_NICE -PyDoc_STRVAR(posix_nice__doc__, -"nice(inc) -> new_priority\n\n\ -Decrease the priority of process by inc and return the new priority."); +/*[clinic input] +os.nice -static PyObject * -posix_nice(PyObject *self, PyObject *args) -{ - int increment, value; + increment: int + / - if (!PyArg_ParseTuple(args, "i:nice", &increment)) - return NULL; +Add increment to the priority of process and return the new priority. +[clinic start generated code]*/ - /* There are two flavours of 'nice': one that returns the new - priority (as required by almost all standards out there) and the - Linux/FreeBSD/BSDI one, which returns '0' on success and advices - the use of getpriority() to get the new priority. +PyDoc_STRVAR(os_nice__doc__, +"nice($module, increment, /)\n" +"--\n" +"\n" +"Add increment to the priority of process and return the new priority."); - If we are of the nice family that returns the new priority, we - need to clear errno before the call, and check if errno is filled - before calling posix_error() on a returnvalue of -1, because the - -1 may be the actual new priority! */ +#define OS_NICE_METHODDEF \ + {"nice", (PyCFunction)os_nice, METH_VARARGS, os_nice__doc__}, + +static PyObject * +os_nice_impl(PyModuleDef *module, int increment); + +static PyObject * +os_nice(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int increment; + + if (!PyArg_ParseTuple(args, + "i:nice", + &increment)) + goto exit; + return_value = os_nice_impl(module, increment); + +exit: + return return_value; +} + +static PyObject * +os_nice_impl(PyModuleDef *module, int increment) +/*[clinic end generated code: output=c360dc2a3bd8e3d0 input=864be2d402a21da2]*/ +{ + int value; + + /* There are two flavours of 'nice': one that returns the new + priority (as required by almost all standards out there) and the + Linux/FreeBSD/BSDI one, which returns '0' on success and advices + the use of getpriority() to get the new priority. + + If we are of the nice family that returns the new priority, we + need to clear errno before the call, and check if errno is filled + before calling posix_error() on a returnvalue of -1, because the + -1 may be the actual new priority! */ errno = 0; value = nice(increment); @@ -4186,17 +5192,51 @@ posix_nice(PyObject *self, PyObject *args) #ifdef HAVE_GETPRIORITY -PyDoc_STRVAR(posix_getpriority__doc__, -"getpriority(which, who) -> current_priority\n\n\ -Get program scheduling priority."); +/*[clinic input] +os.getpriority + + which: int + who: int + +Return program scheduling priority. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getpriority__doc__, +"getpriority($module, /, which, who)\n" +"--\n" +"\n" +"Return program scheduling priority."); + +#define OS_GETPRIORITY_METHODDEF \ + {"getpriority", (PyCFunction)os_getpriority, METH_VARARGS|METH_KEYWORDS, os_getpriority__doc__}, + +static PyObject * +os_getpriority_impl(PyModuleDef *module, int which, int who); static PyObject * -posix_getpriority(PyObject *self, PyObject *args) +os_getpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - int which, who, retval; + PyObject *return_value = NULL; + static char *_keywords[] = {"which", "who", NULL}; + int which; + int who; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "ii:getpriority", _keywords, + &which, &who)) + goto exit; + return_value = os_getpriority_impl(module, which, who); + +exit: + return return_value; +} + +static PyObject * +os_getpriority_impl(PyModuleDef *module, int which, int who) +/*[clinic end generated code: output=81639cf765f05dae input=9be615d40e2544ef]*/ +{ + int retval; - if (!PyArg_ParseTuple(args, "ii", &which, &who)) - return NULL; errno = 0; retval = getpriority(which, who); if (errno != 0) @@ -4207,18 +5247,54 @@ posix_getpriority(PyObject *self, PyObject *args) #ifdef HAVE_SETPRIORITY -PyDoc_STRVAR(posix_setpriority__doc__, -"setpriority(which, who, prio) -> None\n\n\ -Set program scheduling priority."); +/*[clinic input] +os.setpriority + + which: int + who: int + priority: int + +Set program scheduling priority. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setpriority__doc__, +"setpriority($module, /, which, who, priority)\n" +"--\n" +"\n" +"Set program scheduling priority."); + +#define OS_SETPRIORITY_METHODDEF \ + {"setpriority", (PyCFunction)os_setpriority, METH_VARARGS|METH_KEYWORDS, os_setpriority__doc__}, static PyObject * -posix_setpriority(PyObject *self, PyObject *args) +os_setpriority_impl(PyModuleDef *module, int which, int who, int priority); + +static PyObject * +os_setpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - int which, who, prio, retval; + PyObject *return_value = NULL; + static char *_keywords[] = {"which", "who", "priority", NULL}; + int which; + int who; + int priority; - if (!PyArg_ParseTuple(args, "iii", &which, &who, &prio)) - return NULL; - retval = setpriority(which, who, prio); + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "iii:setpriority", _keywords, + &which, &who, &priority)) + goto exit; + return_value = os_setpriority_impl(module, which, who, priority); + +exit: + return return_value; +} + +static PyObject * +os_setpriority_impl(PyModuleDef *module, int which, int who, int priority) +/*[clinic end generated code: output=ddad62651fb2120c input=710ccbf65b9dc513]*/ +{ + int retval; + + retval = setpriority(which, who, priority); if (retval == -1) return posix_error(); Py_RETURN_NONE; @@ -4227,17 +5303,10 @@ posix_setpriority(PyObject *self, PyObject *args) static PyObject * -internal_rename(PyObject *args, PyObject *kwargs, int is_replace) +internal_rename(path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int is_replace) { char *function_name = is_replace ? "replace" : "rename"; - path_t src; - path_t dst; - int src_dir_fd = DEFAULT_DIR_FD; - int dst_dir_fd = DEFAULT_DIR_FD; int dir_fd_specified; - PyObject *return_value = NULL; - char format[24]; - static char *keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; #ifdef MS_WINDOWS BOOL result; @@ -4246,229 +5315,438 @@ internal_rename(PyObject *args, PyObject *kwargs, int is_replace) int result; #endif - memset(&src, 0, sizeof(src)); - memset(&dst, 0, sizeof(dst)); - src.function_name = function_name; - dst.function_name = function_name; - strcpy(format, "O&O&|$O&O&:"); - strcat(format, function_name); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, format, keywords, - path_converter, &src, - path_converter, &dst, - dir_fd_converter, &src_dir_fd, - dir_fd_converter, &dst_dir_fd)) - return NULL; - dir_fd_specified = (src_dir_fd != DEFAULT_DIR_FD) || (dst_dir_fd != DEFAULT_DIR_FD); #ifndef HAVE_RENAMEAT if (dir_fd_specified) { argument_unavailable_error(function_name, "src_dir_fd and dst_dir_fd"); - goto exit; + return NULL; } #endif - if ((src.narrow && dst.wide) || (src.wide && dst.narrow)) { + if ((src->narrow && dst->wide) || (src->wide && dst->narrow)) { PyErr_Format(PyExc_ValueError, "%s: src and dst must be the same type", function_name); - goto exit; + return NULL; } #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (src.wide) - result = MoveFileExW(src.wide, dst.wide, flags); + if (src->wide) + result = MoveFileExW(src->wide, dst->wide, flags); else - result = MoveFileExA(src.narrow, dst.narrow, flags); + result = MoveFileExA(src->narrow, dst->narrow, flags); Py_END_ALLOW_THREADS - if (!result) { - return_value = path_error2(&src, &dst); - goto exit; - } + if (!result) + return path_error2(src, dst); #else Py_BEGIN_ALLOW_THREADS #ifdef HAVE_RENAMEAT if (dir_fd_specified) - result = renameat(src_dir_fd, src.narrow, dst_dir_fd, dst.narrow); + result = renameat(src_dir_fd, src->narrow, dst_dir_fd, dst->narrow); else #endif - result = rename(src.narrow, dst.narrow); + result = rename(src->narrow, dst->narrow); Py_END_ALLOW_THREADS - if (result) { - return_value = path_error2(&src, &dst); - goto exit; - } + if (result) + return path_error2(src, dst); #endif + Py_RETURN_NONE; +} + + +/*[clinic input] +os.rename + + src : path_t + dst : path_t + * + src_dir_fd : dir_fd = None + dst_dir_fd : dir_fd = None + +Rename a file or directory. + +If either src_dir_fd or dst_dir_fd is not None, it should be a file + descriptor open to a directory, and the respective path string (src or dst) + should be relative; the path will then be relative to that directory. +src_dir_fd and dst_dir_fd, may not be implemented on your platform. + If they are unavailable, using them will raise a NotImplementedError. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_rename__doc__, +"rename($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n" +"--\n" +"\n" +"Rename a file or directory.\n" +"\n" +"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" +" descriptor open to a directory, and the respective path string (src or dst)\n" +" should be relative; the path will then be relative to that directory.\n" +"src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n" +" If they are unavailable, using them will raise a NotImplementedError."); + +#define OS_RENAME_METHODDEF \ + {"rename", (PyCFunction)os_rename, METH_VARARGS|METH_KEYWORDS, os_rename__doc__}, + +static PyObject * +os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); + +static PyObject * +os_rename(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; + path_t src = PATH_T_INITIALIZE("rename", "src", 0, 0); + path_t dst = PATH_T_INITIALIZE("rename", "dst", 0, 0); + int src_dir_fd = DEFAULT_DIR_FD; + int dst_dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|$O&O&:rename", _keywords, + path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) + goto exit; + return_value = os_rename_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); - Py_INCREF(Py_None); - return_value = Py_None; exit: + /* Cleanup for src */ path_cleanup(&src); + /* Cleanup for dst */ path_cleanup(&dst); + return return_value; } -PyDoc_STRVAR(posix_rename__doc__, -"rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n\n\ -Rename a file or directory.\n\ -\n\ -If either src_dir_fd or dst_dir_fd is not None, it should be a file\n\ - descriptor open to a directory, and the respective path string (src or dst)\n\ - should be relative; the path will then be relative to that directory.\n\ -src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n\ - If they are unavailable, using them will raise a NotImplementedError."); - static PyObject * -posix_rename(PyObject *self, PyObject *args, PyObject *kwargs) +os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) +/*[clinic end generated code: output=c936bdc81f460a1e input=faa61c847912c850]*/ { - return internal_rename(args, kwargs, 0); + return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 0); } -PyDoc_STRVAR(posix_replace__doc__, -"replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n\n\ -Rename a file or directory, overwriting the destination.\n\ -\n\ -If either src_dir_fd or dst_dir_fd is not None, it should be a file\n\ - descriptor open to a directory, and the respective path string (src or dst)\n\ - should be relative; the path will then be relative to that directory.\n\ -src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n\ - If they are unavailable, using them will raise a NotImplementedError."); + +/*[clinic input] +os.replace = os.rename + +Rename a file or directory, overwriting the destination. + +If either src_dir_fd or dst_dir_fd is not None, it should be a file + descriptor open to a directory, and the respective path string (src or dst) + should be relative; the path will then be relative to that directory. +src_dir_fd and dst_dir_fd, may not be implemented on your platform. + If they are unavailable, using them will raise a NotImplementedError." +[clinic start generated code]*/ + +PyDoc_STRVAR(os_replace__doc__, +"replace($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n" +"--\n" +"\n" +"Rename a file or directory, overwriting the destination.\n" +"\n" +"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" +" descriptor open to a directory, and the respective path string (src or dst)\n" +" should be relative; the path will then be relative to that directory.\n" +"src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n" +" If they are unavailable, using them will raise a NotImplementedError.\""); + +#define OS_REPLACE_METHODDEF \ + {"replace", (PyCFunction)os_replace, METH_VARARGS|METH_KEYWORDS, os_replace__doc__}, static PyObject * -posix_replace(PyObject *self, PyObject *args, PyObject *kwargs) +os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); + +static PyObject * +os_replace(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - return internal_rename(args, kwargs, 1); + PyObject *return_value = NULL; + static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; + path_t src = PATH_T_INITIALIZE("replace", "src", 0, 0); + path_t dst = PATH_T_INITIALIZE("replace", "dst", 0, 0); + int src_dir_fd = DEFAULT_DIR_FD; + int dst_dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|$O&O&:replace", _keywords, + path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) + goto exit; + return_value = os_replace_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); + +exit: + /* Cleanup for src */ + path_cleanup(&src); + /* Cleanup for dst */ + path_cleanup(&dst); + + return return_value; } -PyDoc_STRVAR(posix_rmdir__doc__, -"rmdir(path, *, dir_fd=None)\n\n\ -Remove a directory.\n\ -\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -dir_fd may not be implemented on your platform.\n\ - If it is unavailable, using it will raise a NotImplementedError."); +static PyObject * +os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) +/*[clinic end generated code: output=224e4710d290d171 input=25515dfb107c8421]*/ +{ + return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 1); +} + + +/*[clinic input] +os.rmdir + + path: path_t + * + dir_fd: dir_fd(requires='unlinkat') = None + +Remove a directory. + +If dir_fd is not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that directory. +dir_fd may not be implemented on your platform. + If it is unavailable, using it will raise a NotImplementedError. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_rmdir__doc__, +"rmdir($module, /, path, *, dir_fd=None)\n" +"--\n" +"\n" +"Remove a directory.\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_RMDIR_METHODDEF \ + {"rmdir", (PyCFunction)os_rmdir, METH_VARARGS|METH_KEYWORDS, os_rmdir__doc__}, + +static PyObject * +os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd); static PyObject * -posix_rmdir(PyObject *self, PyObject *args, PyObject *kwargs) +os_rmdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; - int dir_fd = DEFAULT_DIR_FD; - static char *keywords[] = {"path", "dir_fd", NULL}; - int result; PyObject *return_value = NULL; + static char *_keywords[] = {"path", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("rmdir", "path", 0, 0); + int dir_fd = DEFAULT_DIR_FD; - memset(&path, 0, sizeof(path)); - path.function_name = "rmdir"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:rmdir", keywords, - path_converter, &path, -#ifdef HAVE_UNLINKAT - dir_fd_converter, &dir_fd -#else - dir_fd_unavailable, &dir_fd -#endif - )) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|$O&:rmdir", _keywords, + path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_rmdir_impl(module, &path, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=70b9fdbe3bee0591 input=38c8b375ca34a7e2]*/ +{ + int result; Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - if (path.wide) - result = RemoveDirectoryW(path.wide); + if (path->wide) + result = RemoveDirectoryW(path->wide); else - result = RemoveDirectoryA(path.narrow); + result = RemoveDirectoryA(path->narrow); result = !result; /* Windows, success=1, UNIX, success=0 */ #else #ifdef HAVE_UNLINKAT if (dir_fd != DEFAULT_DIR_FD) - result = unlinkat(dir_fd, path.narrow, AT_REMOVEDIR); + result = unlinkat(dir_fd, path->narrow, AT_REMOVEDIR); else #endif - result = rmdir(path.narrow); + result = rmdir(path->narrow); #endif Py_END_ALLOW_THREADS - if (result) { - return_value = path_error(&path); - goto exit; - } - - return_value = Py_None; - Py_INCREF(Py_None); + if (result) + return path_error(path); -exit: - path_cleanup(&path); - return return_value; + Py_RETURN_NONE; } #ifdef HAVE_SYSTEM -PyDoc_STRVAR(posix_system__doc__, -"system(command) -> exit_status\n\n\ -Execute the command (a string) in a subshell."); +#ifdef MS_WINDOWS +/*[clinic input] +os.system -> long + + command: Py_UNICODE + +Execute the command in a subshell. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_system__doc__, +"system($module, /, command)\n" +"--\n" +"\n" +"Execute the command in a subshell."); + +#define OS_SYSTEM_METHODDEF \ + {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, + +static long +os_system_impl(PyModuleDef *module, Py_UNICODE *command); static PyObject * -posix_system(PyObject *self, PyObject *args) +os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - long sts; -#ifdef MS_WINDOWS - wchar_t *command; - if (!PyArg_ParseTuple(args, "u:system", &command)) - return NULL; + PyObject *return_value = NULL; + static char *_keywords[] = {"command", NULL}; + Py_UNICODE *command; + long _return_value; - Py_BEGIN_ALLOW_THREADS - sts = _wsystem(command); - Py_END_ALLOW_THREADS -#else - PyObject *command_obj; - char *command; - if (!PyArg_ParseTuple(args, "O&:system", - PyUnicode_FSConverter, &command_obj)) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "u:system", _keywords, + &command)) + goto exit; + _return_value = os_system_impl(module, command); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + return return_value; +} - command = PyBytes_AsString(command_obj); +static long +os_system_impl(PyModuleDef *module, Py_UNICODE *command) +/*[clinic end generated code: output=29fe699c0b2e9d38 input=303f5ce97df606b0]*/ +{ + long result; Py_BEGIN_ALLOW_THREADS - sts = system(command); + result = _wsystem(command); Py_END_ALLOW_THREADS - Py_DECREF(command_obj); -#endif - return PyLong_FromLong(sts); + return result; } -#endif +#else /* MS_WINDOWS */ +/*[clinic input] +os.system -> long + command: FSConverter -PyDoc_STRVAR(posix_umask__doc__, -"umask(new_mask) -> old_mask\n\n\ -Set the current numeric umask and return the previous umask."); +Execute the command in a subshell. +[clinic start generated code]*/ -static PyObject * -posix_umask(PyObject *self, PyObject *args) -{ - int i; - if (!PyArg_ParseTuple(args, "i:umask", &i)) - return NULL; - i = (int)umask(i); - if (i < 0) - return posix_error(); - return PyLong_FromLong((long)i); -} +PyDoc_STRVAR(os_system__doc__, +"system($module, /, command)\n" +"--\n" +"\n" +"Execute the command in a subshell."); -#ifdef MS_WINDOWS +#define OS_SYSTEM_METHODDEF \ + {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, -/* override the default DeleteFileW behavior so that directory -symlinks can be removed with this function, the same as with -Unix symlinks */ -BOOL WINAPI Py_DeleteFileW(LPCWSTR lpFileName) +static long +os_system_impl(PyModuleDef *module, PyObject *command); + +static PyObject * +os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - WIN32_FILE_ATTRIBUTE_DATA info; - WIN32_FIND_DATAW find_data; - HANDLE find_data_handle; - int is_directory = 0; - int is_link = 0; + PyObject *return_value = NULL; + static char *_keywords[] = {"command", NULL}; + PyObject *command = NULL; + long _return_value; - if (GetFileAttributesExW(lpFileName, GetFileExInfoStandard, &info)) { + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:system", _keywords, + PyUnicode_FSConverter, &command)) + goto exit; + _return_value = os_system_impl(module, command); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + /* Cleanup for command */ + Py_XDECREF(command); + + return return_value; +} + +static long +os_system_impl(PyModuleDef *module, PyObject *command) +/*[clinic end generated code: output=5be9f3c40ead3bad input=86a58554ba6094af]*/ +{ + long result; + char *bytes = PyBytes_AsString(command); + Py_BEGIN_ALLOW_THREADS + result = system(bytes); + Py_END_ALLOW_THREADS + return result; +} +#endif +#endif /* HAVE_SYSTEM */ + + +/*[clinic input] +os.umask + + mask: int + / + +Set the current numeric umask and return the previous umask. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_umask__doc__, +"umask($module, mask, /)\n" +"--\n" +"\n" +"Set the current numeric umask and return the previous umask."); + +#define OS_UMASK_METHODDEF \ + {"umask", (PyCFunction)os_umask, METH_VARARGS, os_umask__doc__}, + +static PyObject * +os_umask_impl(PyModuleDef *module, int mask); + +static PyObject * +os_umask(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int mask; + + if (!PyArg_ParseTuple(args, + "i:umask", + &mask)) + goto exit; + return_value = os_umask_impl(module, mask); + +exit: + return return_value; +} + +static PyObject * +os_umask_impl(PyModuleDef *module, int mask) +/*[clinic end generated code: output=90048b39d2d4a961 input=ab6bfd9b24d8a7e8]*/ +{ + int i = (int)umask(mask); + if (i < 0) + return posix_error(); + return PyLong_FromLong((long)i); +} + +#ifdef MS_WINDOWS + +/* override the default DeleteFileW behavior so that directory +symlinks can be removed with this function, the same as with +Unix symlinks */ +BOOL WINAPI Py_DeleteFileW(LPCWSTR lpFileName) +{ + WIN32_FILE_ATTRIBUTE_DATA info; + WIN32_FIND_DATAW find_data; + HANDLE find_data_handle; + int is_directory = 0; + int is_link = 0; + + if (GetFileAttributesExW(lpFileName, GetFileExInfoStandard, &info)) { is_directory = info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; /* Get WIN32_FIND_DATA structure for the path to determine if @@ -4494,81 +5772,147 @@ BOOL WINAPI Py_DeleteFileW(LPCWSTR lpFileName) } #endif /* MS_WINDOWS */ -PyDoc_STRVAR(posix_unlink__doc__, -"unlink(path, *, dir_fd=None)\n\n\ -Remove a file (same as remove()).\n\ -\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -dir_fd may not be implemented on your platform.\n\ - If it is unavailable, using it will raise a NotImplementedError."); -PyDoc_STRVAR(posix_remove__doc__, -"remove(path, *, dir_fd=None)\n\n\ -Remove a file (same as unlink()).\n\ -\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -dir_fd may not be implemented on your platform.\n\ - If it is unavailable, using it will raise a NotImplementedError."); +/*[clinic input] +os.unlink + + path: path_t + * + dir_fd: dir_fd(requires='unlinkat')=None + +Remove a file (same as remove()). + +If dir_fd is not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that directory. +dir_fd may not be implemented on your platform. + If it is unavailable, using it will raise a NotImplementedError. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_unlink__doc__, +"unlink($module, /, path, *, dir_fd=None)\n" +"--\n" +"\n" +"Remove a file (same as remove()).\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_UNLINK_METHODDEF \ + {"unlink", (PyCFunction)os_unlink, METH_VARARGS|METH_KEYWORDS, os_unlink__doc__}, static PyObject * -posix_unlink(PyObject *self, PyObject *args, PyObject *kwargs) +os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd); + +static PyObject * +os_unlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; - int dir_fd = DEFAULT_DIR_FD; - static char *keywords[] = {"path", "dir_fd", NULL}; - int result; PyObject *return_value = NULL; + static char *_keywords[] = {"path", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("unlink", "path", 0, 0); + int dir_fd = DEFAULT_DIR_FD; - memset(&path, 0, sizeof(path)); - path.function_name = "unlink"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:unlink", keywords, - path_converter, &path, -#ifdef HAVE_UNLINKAT - dir_fd_converter, &dir_fd -#else - dir_fd_unavailable, &dir_fd -#endif - )) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|$O&:unlink", _keywords, + path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_unlink_impl(module, &path, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=59a6e66d67ff2e75 input=d7bcde2b1b2a2552]*/ +{ + int result; Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - if (path.wide) - result = Py_DeleteFileW(path.wide); + if (path->wide) + result = Py_DeleteFileW(path->wide); else - result = DeleteFileA(path.narrow); + result = DeleteFileA(path->narrow); result = !result; /* Windows, success=1, UNIX, success=0 */ #else #ifdef HAVE_UNLINKAT if (dir_fd != DEFAULT_DIR_FD) - result = unlinkat(dir_fd, path.narrow, 0); + result = unlinkat(dir_fd, path->narrow, 0); else #endif /* HAVE_UNLINKAT */ - result = unlink(path.narrow); + result = unlink(path->narrow); #endif Py_END_ALLOW_THREADS - if (result) { - return_value = path_error(&path); - goto exit; - } + if (result) + return path_error(path); - return_value = Py_None; - Py_INCREF(Py_None); + Py_RETURN_NONE; +} + + +/*[clinic input] +os.remove = os.unlink + +Remove a file (same as unlink()). + +If dir_fd is not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that directory. +dir_fd may not be implemented on your platform. + If it is unavailable, using it will raise a NotImplementedError. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_remove__doc__, +"remove($module, /, path, *, dir_fd=None)\n" +"--\n" +"\n" +"Remove a file (same as unlink()).\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_REMOVE_METHODDEF \ + {"remove", (PyCFunction)os_remove, METH_VARARGS|METH_KEYWORDS, os_remove__doc__}, + +static PyObject * +os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd); + +static PyObject * +os_remove(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("remove", "path", 0, 0); + int dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|$O&:remove", _keywords, + path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_remove_impl(module, &path, dir_fd); exit: + /* Cleanup for path */ path_cleanup(&path); + return return_value; } +static PyObject * +os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=cb170cf1e195b8ed input=e05c5ab55cd30983]*/ +{ + return os_unlink_impl(module, path, dir_fd); +} -PyDoc_STRVAR(posix_uname__doc__, -"uname() -> uname_result\n\n\ -Return an object identifying the current operating system.\n\ -The object behaves like a named tuple with the following fields:\n\ - (sysname, nodename, release, version, machine)"); static PyStructSequence_Field uname_result_fields[] = { {"sysname", "operating system name"}, @@ -4598,8 +5942,40 @@ static PyTypeObject UnameResultType; #ifdef HAVE_UNAME +/*[clinic input] +os.uname + +Return an object identifying the current operating system. + +The object behaves like a named tuple with the following fields: + (sysname, nodename, release, version, machine) + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_uname__doc__, +"uname($module, /)\n" +"--\n" +"\n" +"Return an object identifying the current operating system.\n" +"\n" +"The object behaves like a named tuple with the following fields:\n" +" (sysname, nodename, release, version, machine)"); + +#define OS_UNAME_METHODDEF \ + {"uname", (PyCFunction)os_uname, METH_NOARGS, os_uname__doc__}, + +static PyObject * +os_uname_impl(PyModuleDef *module); + +static PyObject * +os_uname(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_uname_impl(module); +} + static PyObject * -posix_uname(PyObject *self, PyObject *noargs) +os_uname_impl(PyModuleDef *module) +/*[clinic end generated code: output=459a86521ff5041c input=e68bd246db3043ed]*/ { struct utsname u; int res; @@ -4638,31 +6014,6 @@ posix_uname(PyObject *self, PyObject *noargs) #endif /* HAVE_UNAME */ -PyDoc_STRVAR(posix_utime__doc__, -"utime(path, times=None, *, ns=None, dir_fd=None, follow_symlinks=True)\n\ -Set the access and modified time of path.\n\ -\n\ -path may always be specified as a string.\n\ -On some platforms, path may also be specified as an open file descriptor.\n\ - If this functionality is unavailable, using it raises an exception.\n\ -\n\ -If times is not None, it must be a tuple (atime, mtime);\n\ - atime and mtime should be expressed as float seconds since the epoch.\n\ -If ns is not None, it must be a tuple (atime_ns, mtime_ns);\n\ - atime_ns and mtime_ns should be expressed as integer nanoseconds\n\ - since the epoch.\n\ -If both times and ns are None, utime uses the current time.\n\ -Specifying tuples for both times and ns is an error.\n\ -\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -If follow_symlinks is False, and the last element of the path is a symbolic\n\ - link, utime will modify the symbolic link itself instead of the file the\n\ - link points to.\n\ -It is an error to use dir_fd or follow_symlinks when specifying path\n\ - as an open file descriptor.\n\ -dir_fd and follow_symlinks may not be available on your platform.\n\ - If they are unavailable, using them will raise a NotImplementedError."); typedef struct { int now; @@ -4748,6 +6099,9 @@ utime_dir_fd(utime_t *utime, int dir_fd, char *path, int follow_symlinks) #endif } + #define FUTIMENSAT_DIR_FD_CONVERTER dir_fd_converter +#else + #define FUTIMENSAT_DIR_FD_CONVERTER dir_fd_unavailable #endif #define UTIME_HAVE_FD (defined(HAVE_FUTIMES) || defined(HAVE_FUTIMENS)) @@ -4766,6 +6120,9 @@ utime_fd(utime_t *utime, int fd) #endif } + #define PATH_UTIME_HAVE_FD 1 +#else + #define PATH_UTIME_HAVE_FD 0 #endif @@ -4831,19 +6188,108 @@ exit: return result; } + +/*[clinic input] +os.utime + + path: path_t(allow_fd='PATH_UTIME_HAVE_FD') + times: object = NULL + * + ns: object = NULL + dir_fd: dir_fd(requires='futimensat') = None + follow_symlinks: bool=True + +# "utime(path, times=None, *, ns=None, dir_fd=None, follow_symlinks=True)\n\ + +Set the access and modified time of path. + +path may always be specified as a string. +On some platforms, path may also be specified as an open file descriptor. + If this functionality is unavailable, using it raises an exception. + +If times is not None, it must be a tuple (atime, mtime); + atime and mtime should be expressed as float seconds since the epoch. +If ns is not None, it must be a tuple (atime_ns, mtime_ns); + atime_ns and mtime_ns should be expressed as integer nanoseconds + since the epoch. +If both times and ns are None, utime uses the current time. +Specifying tuples for both times and ns is an error. + +If dir_fd is not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that directory. +If follow_symlinks is False, and the last element of the path is a symbolic + link, utime will modify the symbolic link itself instead of the file the + link points to. +It is an error to use dir_fd or follow_symlinks when specifying path + as an open file descriptor. +dir_fd and follow_symlinks may not be available on your platform. + If they are unavailable, using them will raise a NotImplementedError. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_utime__doc__, +"utime($module, /, path, times=None, *, ns=None, dir_fd=None,\n" +" follow_symlinks=True)\n" +"--\n" +"\n" +"Set the access and modified time of path.\n" +"\n" +"path may always be specified as a string.\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception.\n" +"\n" +"If times is not None, it must be a tuple (atime, mtime);\n" +" atime and mtime should be expressed as float seconds since the epoch.\n" +"If ns is not None, it must be a tuple (atime_ns, mtime_ns);\n" +" atime_ns and mtime_ns should be expressed as integer nanoseconds\n" +" since the epoch.\n" +"If both times and ns are None, utime uses the current time.\n" +"Specifying tuples for both times and ns is an error.\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, utime will modify the symbolic link itself instead of the file the\n" +" link points to.\n" +"It is an error to use dir_fd or follow_symlinks when specifying path\n" +" as an open file descriptor.\n" +"dir_fd and follow_symlinks may not be available on your platform.\n" +" If they are unavailable, using them will raise a NotImplementedError."); + +#define OS_UTIME_METHODDEF \ + {"utime", (PyCFunction)os_utime, METH_VARARGS|METH_KEYWORDS, os_utime__doc__}, + +static PyObject * +os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks); + static PyObject * -posix_utime(PyObject *self, PyObject *args, PyObject *kwargs) +os_utime(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "times", "ns", "dir_fd", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("utime", "path", 0, PATH_UTIME_HAVE_FD); PyObject *times = NULL; PyObject *ns = NULL; int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - char *keywords[] = {"path", "times", "ns", "dir_fd", - "follow_symlinks", NULL}; - utime_t utime; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|O$OO&p:utime", _keywords, + path_converter, &path, ×, &ns, FUTIMENSAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + goto exit; + return_value = os_utime_impl(module, &path, times, ns, dir_fd, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + return return_value; +} + +static PyObject * +os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=891489c35cc68c5d input=1f18c17d5941aa82]*/ +{ #ifdef MS_WINDOWS HANDLE hFile; FILETIME atime, mtime; @@ -4852,25 +6298,9 @@ posix_utime(PyObject *self, PyObject *args, PyObject *kwargs) #endif PyObject *return_value = NULL; + utime_t utime; - memset(&path, 0, sizeof(path)); - path.function_name = "utime"; memset(&utime, 0, sizeof(utime_t)); -#if UTIME_HAVE_FD - path.allow_fd = 1; -#endif - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|O$OO&p:utime", keywords, - path_converter, &path, - ×, &ns, -#if UTIME_HAVE_DIR_FD - dir_fd_converter, &dir_fd, -#else - dir_fd_unavailable, &dir_fd, -#endif - &follow_symlinks - )) - return NULL; if (times && (times != Py_None) && ns) { PyErr_SetString(PyExc_ValueError, @@ -4924,9 +6354,9 @@ posix_utime(PyObject *self, PyObject *args, PyObject *kwargs) goto exit; #endif - if (path_and_dir_fd_invalid("utime", &path, dir_fd) || - dir_fd_and_fd_invalid("utime", dir_fd, path.fd) || - fd_and_follow_symlinks_invalid("utime", path.fd, follow_symlinks)) + if (path_and_dir_fd_invalid("utime", path, dir_fd) || + dir_fd_and_fd_invalid("utime", dir_fd, path->fd) || + fd_and_follow_symlinks_invalid("utime", path->fd, follow_symlinks)) goto exit; #if !defined(HAVE_UTIMENSAT) @@ -4940,17 +6370,17 @@ posix_utime(PyObject *self, PyObject *args, PyObject *kwargs) #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (path.wide) - hFile = CreateFileW(path.wide, FILE_WRITE_ATTRIBUTES, 0, + if (path->wide) + hFile = CreateFileW(path->wide, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); else - hFile = CreateFileA(path.narrow, FILE_WRITE_ATTRIBUTES, 0, + hFile = CreateFileA(path->narrow, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); Py_END_ALLOW_THREADS if (hFile == INVALID_HANDLE_VALUE) { - path_error(&path); + path_error(path); goto exit; } @@ -4975,23 +6405,23 @@ posix_utime(PyObject *self, PyObject *args, PyObject *kwargs) #if UTIME_HAVE_NOFOLLOW_SYMLINKS if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD)) - result = utime_nofollow_symlinks(&utime, path.narrow); + result = utime_nofollow_symlinks(&utime, path->narrow); else #endif #if UTIME_HAVE_DIR_FD if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks)) - result = utime_dir_fd(&utime, dir_fd, path.narrow, follow_symlinks); + result = utime_dir_fd(&utime, dir_fd, path->narrow, follow_symlinks); else #endif #if UTIME_HAVE_FD - if (path.fd != -1) - result = utime_fd(&utime, path.fd); + if (path->fd != -1) + result = utime_fd(&utime, path->fd); else #endif - result = utime_default(&utime, path.narrow); + result = utime_default(&utime, path->narrow); Py_END_ALLOW_THREADS @@ -5007,7 +6437,6 @@ posix_utime(PyObject *self, PyObject *args, PyObject *kwargs) return_value = Py_None; exit: - path_cleanup(&path); #ifdef MS_WINDOWS if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); @@ -5017,17 +6446,49 @@ exit: /* Process operations */ -PyDoc_STRVAR(posix__exit__doc__, -"_exit(status)\n\n\ -Exit to the system with specified status, without normal exit processing."); + +/*[clinic input] +os._exit + + status: int + +Exit to the system with specified status, without normal exit processing. +[clinic start generated code]*/ + +PyDoc_STRVAR(os__exit__doc__, +"_exit($module, /, status)\n" +"--\n" +"\n" +"Exit to the system with specified status, without normal exit processing."); + +#define OS__EXIT_METHODDEF \ + {"_exit", (PyCFunction)os__exit, METH_VARARGS|METH_KEYWORDS, os__exit__doc__}, + +static PyObject * +os__exit_impl(PyModuleDef *module, int status); static PyObject * -posix__exit(PyObject *self, PyObject *args) +os__exit(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - int sts; - if (!PyArg_ParseTuple(args, "i:_exit", &sts)) - return NULL; - _exit(sts); + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:_exit", _keywords, + &status)) + goto exit; + return_value = os__exit_impl(module, status); + +exit: + return return_value; +} + +static PyObject * +os__exit_impl(PyModuleDef *module, int status) +/*[clinic end generated code: output=4f9858c4cc2dcb89 input=5e6d57556b0c4a62]*/ +{ + _exit(status); return NULL; /* Make gcc -Wall happy */ } @@ -5165,96 +6626,160 @@ fail: } #endif + #ifdef HAVE_EXECV -PyDoc_STRVAR(posix_execv__doc__, -"execv(path, args)\n\n\ -Execute an executable path with arguments, replacing current process.\n\ -\n\ - path: path of executable file\n\ - args: tuple or list of strings"); +/*[clinic input] +os.execv + + path: FSConverter + Path of executable file. + argv: object + Tuple or list of strings. + / + +Execute an executable path with arguments, replacing current process. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_execv__doc__, +"execv($module, path, argv, /)\n" +"--\n" +"\n" +"Execute an executable path with arguments, replacing current process.\n" +"\n" +" path\n" +" Path of executable file.\n" +" argv\n" +" Tuple or list of strings."); + +#define OS_EXECV_METHODDEF \ + {"execv", (PyCFunction)os_execv, METH_VARARGS, os_execv__doc__}, static PyObject * -posix_execv(PyObject *self, PyObject *args) +os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv); + +static PyObject * +os_execv(PyModuleDef *module, PyObject *args) { - PyObject *opath; - char *path; + PyObject *return_value = NULL; + PyObject *path = NULL; PyObject *argv; - char **argvlist; - Py_ssize_t argc; - /* execv has two arguments: (path, argv), where - argv is a list or tuple of strings. */ + if (!PyArg_ParseTuple(args, + "O&O:execv", + PyUnicode_FSConverter, &path, &argv)) + goto exit; + return_value = os_execv_impl(module, path, argv); - if (!PyArg_ParseTuple(args, "O&O:execv", - PyUnicode_FSConverter, - &opath, &argv)) - return NULL; - path = PyBytes_AsString(opath); - if (!PyList_Check(argv) && !PyTuple_Check(argv)) { - PyErr_SetString(PyExc_TypeError, +exit: + /* Cleanup for path */ + Py_XDECREF(path); + + return return_value; +} + +static PyObject * +os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv) +/*[clinic end generated code: output=b0f5f2caa6097edc input=96041559925e5229]*/ +{ + char *path_char; + char **argvlist; + Py_ssize_t argc; + + /* execv has two arguments: (path, argv), where + argv is a list or tuple of strings. */ + + path_char = PyBytes_AsString(path); + if (!PyList_Check(argv) && !PyTuple_Check(argv)) { + PyErr_SetString(PyExc_TypeError, "execv() arg 2 must be a tuple or list"); - Py_DECREF(opath); return NULL; } argc = PySequence_Size(argv); if (argc < 1) { PyErr_SetString(PyExc_ValueError, "execv() arg 2 must not be empty"); - Py_DECREF(opath); return NULL; } argvlist = parse_arglist(argv, &argc); if (argvlist == NULL) { - Py_DECREF(opath); return NULL; } - execv(path, argvlist); + execv(path_char, argvlist); /* If we get here it's definitely an error */ free_string_array(argvlist, argc); - Py_DECREF(opath); return posix_error(); } -PyDoc_STRVAR(posix_execve__doc__, -"execve(path, args, env)\n\n\ -Execute a path with arguments and environment, replacing current process.\n\ -\n\ - path: path of executable file\n\ - args: tuple or list of arguments\n\ - env: dictionary of strings mapping to strings\n\ -\n\ -On some platforms, you may specify an open file descriptor for path;\n\ - execve will execute the program the file descriptor is open to.\n\ - If this functionality is unavailable, using it raises NotImplementedError."); + +/*[clinic input] +os.execve + + path: path_t(allow_fd='PATH_HAVE_FEXECVE') + Path of executable file. + argv: object + Tuple or list of strings. + env: object + Dictionary of strings mapping to strings. + +Execute an executable path with arguments, replacing current process. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_execve__doc__, +"execve($module, /, path, argv, env)\n" +"--\n" +"\n" +"Execute an executable path with arguments, replacing current process.\n" +"\n" +" path\n" +" Path of executable file.\n" +" argv\n" +" Tuple or list of strings.\n" +" env\n" +" Dictionary of strings mapping to strings."); + +#define OS_EXECVE_METHODDEF \ + {"execve", (PyCFunction)os_execve, METH_VARARGS|METH_KEYWORDS, os_execve__doc__}, + +static PyObject * +os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, PyObject *env); static PyObject * -posix_execve(PyObject *self, PyObject *args, PyObject *kwargs) +os_execve(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "argv", "env", NULL}; + path_t path = PATH_T_INITIALIZE("execve", "path", 0, PATH_HAVE_FEXECVE); + PyObject *argv; + PyObject *env; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&OO:execve", _keywords, + path_converter, &path, &argv, &env)) + goto exit; + return_value = os_execve_impl(module, &path, argv, env); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, PyObject *env) +/*[clinic end generated code: output=fb283760f5d15ab7 input=626804fa092606d9]*/ { - path_t path; - PyObject *argv, *env; char **argvlist = NULL; char **envlist; Py_ssize_t argc, envc; - static char *keywords[] = {"path", "argv", "environment", NULL}; /* execve has three arguments: (path, argv, env), where argv is a list or tuple of strings and env is a dictionary like posix.environ. */ - memset(&path, 0, sizeof(path)); - path.function_name = "execve"; -#ifdef HAVE_FEXECVE - path.allow_fd = 1; -#endif - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&OO:execve", keywords, - path_converter, &path, - &argv, &env - )) - return NULL; - if (!PyList_Check(argv) && !PyTuple_Check(argv)) { PyErr_SetString(PyExc_TypeError, "execve: argv must be a tuple or list"); @@ -5277,15 +6802,15 @@ posix_execve(PyObject *self, PyObject *args, PyObject *kwargs) goto fail; #ifdef HAVE_FEXECVE - if (path.fd > -1) - fexecve(path.fd, argvlist, envlist); + if (path->fd > -1) + fexecve(path->fd, argvlist, envlist); else #endif - execve(path.narrow, argvlist, envlist); + execve(path->narrow, argvlist, envlist); /* If we get here it's definitely an error */ - path_error(&path); + path_error(path); while (--envc >= 0) PyMem_DEL(envlist[envc]); @@ -5293,29 +6818,73 @@ posix_execve(PyObject *self, PyObject *args, PyObject *kwargs) fail: if (argvlist) free_string_array(argvlist, argc); - path_cleanup(&path); return NULL; } #endif /* HAVE_EXECV */ #ifdef HAVE_SPAWNV -PyDoc_STRVAR(posix_spawnv__doc__, -"spawnv(mode, path, args)\n\n\ -Execute the program 'path' in a new process.\n\ -\n\ - mode: mode of process creation\n\ - path: path of executable file\n\ - args: tuple or list of strings"); +/*[clinic input] +os.spawnv + + mode: int + Mode of process creation. + path: FSConverter + Path of executable file. + argv: object + Tuple or list of strings. + / + +Execute the program specified by path in a new process. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_spawnv__doc__, +"spawnv($module, mode, path, argv, /)\n" +"--\n" +"\n" +"Execute the program specified by path in a new process.\n" +"\n" +" mode\n" +" Mode of process creation.\n" +" path\n" +" Path of executable file.\n" +" argv\n" +" Tuple or list of strings."); + +#define OS_SPAWNV_METHODDEF \ + {"spawnv", (PyCFunction)os_spawnv, METH_VARARGS, os_spawnv__doc__}, + +static PyObject * +os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv); static PyObject * -posix_spawnv(PyObject *self, PyObject *args) +os_spawnv(PyModuleDef *module, PyObject *args) { - PyObject *opath; - char *path; + PyObject *return_value = NULL; + int mode; + PyObject *path = NULL; PyObject *argv; + + if (!PyArg_ParseTuple(args, + "iO&O:spawnv", + &mode, PyUnicode_FSConverter, &path, &argv)) + goto exit; + return_value = os_spawnv_impl(module, mode, path, argv); + +exit: + /* Cleanup for path */ + Py_XDECREF(path); + + return return_value; +} + +static PyObject * +os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv) +/*[clinic end generated code: output=dfee6be062e780e3 input=042c91dfc1e6debc]*/ +{ + char *path_char; char **argvlist; - int mode, i; + int i; Py_ssize_t argc; Py_intptr_t spawnval; PyObject *(*getitem)(PyObject *, Py_ssize_t); @@ -5323,11 +6892,7 @@ posix_spawnv(PyObject *self, PyObject *args) /* spawnv has three arguments: (mode, path, argv), where argv is a list or tuple of strings. */ - if (!PyArg_ParseTuple(args, "iO&O:spawnv", &mode, - PyUnicode_FSConverter, - &opath, &argv)) - return NULL; - path = PyBytes_AsString(opath); + path_char = PyBytes_AsString(path); if (PyList_Check(argv)) { argc = PyList_Size(argv); getitem = PyList_GetItem; @@ -5339,13 +6904,11 @@ posix_spawnv(PyObject *self, PyObject *args) else { PyErr_SetString(PyExc_TypeError, "spawnv() arg 2 must be a tuple or list"); - Py_DECREF(opath); return NULL; } argvlist = PyMem_NEW(char *, argc+1); if (argvlist == NULL) { - Py_DECREF(opath); return PyErr_NoMemory(); } for (i = 0; i < argc; i++) { @@ -5355,7 +6918,6 @@ posix_spawnv(PyObject *self, PyObject *args) PyErr_SetString( PyExc_TypeError, "spawnv() arg 2 must contain only strings"); - Py_DECREF(opath); return NULL; } } @@ -5365,11 +6927,10 @@ posix_spawnv(PyObject *self, PyObject *args) mode = _P_OVERLAY; Py_BEGIN_ALLOW_THREADS - spawnval = _spawnv(mode, path, argvlist); + spawnval = _spawnv(mode, path_char, argvlist); Py_END_ALLOW_THREADS free_string_array(argvlist, argc); - Py_DECREF(opath); if (spawnval == -1) return posix_error(); @@ -5378,25 +6939,73 @@ posix_spawnv(PyObject *self, PyObject *args) } -PyDoc_STRVAR(posix_spawnve__doc__, -"spawnve(mode, path, args, env)\n\n\ -Execute the program 'path' in a new process.\n\ -\n\ - mode: mode of process creation\n\ - path: path of executable file\n\ - args: tuple or list of arguments\n\ - env: dictionary of strings mapping to strings"); +/*[clinic input] +os.spawnve + + mode: int + Mode of process creation. + path: FSConverter + Path of executable file. + argv: object + Tuple or list of strings. + env: object + Dictionary of strings mapping to strings. + / + +Execute the program specified by path in a new process. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_spawnve__doc__, +"spawnve($module, mode, path, argv, env, /)\n" +"--\n" +"\n" +"Execute the program specified by path in a new process.\n" +"\n" +" mode\n" +" Mode of process creation.\n" +" path\n" +" Path of executable file.\n" +" argv\n" +" Tuple or list of strings.\n" +" env\n" +" Dictionary of strings mapping to strings."); + +#define OS_SPAWNVE_METHODDEF \ + {"spawnve", (PyCFunction)os_spawnve, METH_VARARGS, os_spawnve__doc__}, + +static PyObject * +os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv, PyObject *env); + +static PyObject * +os_spawnve(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int mode; + PyObject *path = NULL; + PyObject *argv; + PyObject *env; + + if (!PyArg_ParseTuple(args, + "iO&OO:spawnve", + &mode, PyUnicode_FSConverter, &path, &argv, &env)) + goto exit; + return_value = os_spawnve_impl(module, mode, path, argv, env); + +exit: + /* Cleanup for path */ + Py_XDECREF(path); + + return return_value; +} static PyObject * -posix_spawnve(PyObject *self, PyObject *args) +os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv, PyObject *env) +/*[clinic end generated code: output=6f7df38473f63c7c input=02362fd937963f8f]*/ { - PyObject *opath; - char *path; - PyObject *argv, *env; + char *path_char; char **argvlist; char **envlist; PyObject *res = NULL; - int mode; Py_ssize_t argc, i, envc; Py_intptr_t spawnval; PyObject *(*getitem)(PyObject *, Py_ssize_t); @@ -5406,11 +7015,7 @@ posix_spawnve(PyObject *self, PyObject *args) argv is a list or tuple of strings and env is a dictionary like posix.environ. */ - if (!PyArg_ParseTuple(args, "iO&OO:spawnve", &mode, - PyUnicode_FSConverter, - &opath, &argv, &env)) - return NULL; - path = PyBytes_AsString(opath); + path_char = PyBytes_AsString(path); if (PyList_Check(argv)) { argc = PyList_Size(argv); getitem = PyList_GetItem; @@ -5454,7 +7059,7 @@ posix_spawnve(PyObject *self, PyObject *args) mode = _P_OVERLAY; Py_BEGIN_ALLOW_THREADS - spawnval = _spawnve(mode, path, argvlist, envlist); + spawnval = _spawnve(mode, path_char, argvlist, envlist); Py_END_ALLOW_THREADS if (spawnval == -1) @@ -5468,7 +7073,6 @@ posix_spawnve(PyObject *self, PyObject *args) fail_1: free_string_array(argvlist, lastarg); fail_0: - Py_DECREF(opath); return res; } @@ -5476,14 +7080,37 @@ posix_spawnve(PyObject *self, PyObject *args) #ifdef HAVE_FORK1 -PyDoc_STRVAR(posix_fork1__doc__, -"fork1() -> pid\n\n\ -Fork a child process with a single multiplexed (i.e., not bound) thread.\n\ -\n\ -Return 0 to child process and PID of child to parent process."); +/*[clinic input] +os.fork1 + +Fork a child process with a single multiplexed (i.e., not bound) thread. + +Return 0 to child process and PID of child to parent process. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_fork1__doc__, +"fork1($module, /)\n" +"--\n" +"\n" +"Fork a child process with a single multiplexed (i.e., not bound) thread.\n" +"\n" +"Return 0 to child process and PID of child to parent process."); + +#define OS_FORK1_METHODDEF \ + {"fork1", (PyCFunction)os_fork1, METH_NOARGS, os_fork1__doc__}, + +static PyObject * +os_fork1_impl(PyModuleDef *module); + +static PyObject * +os_fork1(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_fork1_impl(module); +} static PyObject * -posix_fork1(PyObject *self, PyObject *noargs) +os_fork1_impl(PyModuleDef *module) +/*[clinic end generated code: output=fa04088d6bc02efa input=12db02167893926e]*/ { pid_t pid; int result = 0; @@ -5506,17 +7133,41 @@ posix_fork1(PyObject *self, PyObject *noargs) } return PyLong_FromPid(pid); } -#endif +#endif /* HAVE_FORK1 */ #ifdef HAVE_FORK -PyDoc_STRVAR(posix_fork__doc__, -"fork() -> pid\n\n\ -Fork a child process.\n\ -Return 0 to child process and PID of child to parent process."); +/*[clinic input] +os.fork + +Fork a child process. + +Return 0 to child process and PID of child to parent process. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_fork__doc__, +"fork($module, /)\n" +"--\n" +"\n" +"Fork a child process.\n" +"\n" +"Return 0 to child process and PID of child to parent process."); + +#define OS_FORK_METHODDEF \ + {"fork", (PyCFunction)os_fork, METH_NOARGS, os_fork__doc__}, + +static PyObject * +os_fork_impl(PyModuleDef *module); + +static PyObject * +os_fork(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_fork_impl(module); +} static PyObject * -posix_fork(PyObject *self, PyObject *noargs) +os_fork_impl(PyModuleDef *module) +/*[clinic end generated code: output=b3c8e6bdc11eedc6 input=13c956413110eeaa]*/ { pid_t pid; int result = 0; @@ -5539,92 +7190,221 @@ posix_fork(PyObject *self, PyObject *noargs) } return PyLong_FromPid(pid); } -#endif +#endif /* HAVE_FORK */ -#ifdef HAVE_SCHED_H +#ifdef HAVE_SCHED_H #ifdef HAVE_SCHED_GET_PRIORITY_MAX +/*[clinic input] +os.sched_get_priority_max + + policy: int + +Get the maximum scheduling priority for policy. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sched_get_priority_max__doc__, +"sched_get_priority_max($module, /, policy)\n" +"--\n" +"\n" +"Get the maximum scheduling priority for policy."); -PyDoc_STRVAR(posix_sched_get_priority_max__doc__, -"sched_get_priority_max(policy)\n\n\ -Get the maximum scheduling priority for *policy*."); +#define OS_SCHED_GET_PRIORITY_MAX_METHODDEF \ + {"sched_get_priority_max", (PyCFunction)os_sched_get_priority_max, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_max__doc__}, static PyObject * -posix_sched_get_priority_max(PyObject *self, PyObject *args) +os_sched_get_priority_max_impl(PyModuleDef *module, int policy); + +static PyObject * +os_sched_get_priority_max(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - int policy, max; + PyObject *return_value = NULL; + static char *_keywords[] = {"policy", NULL}; + int policy; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:sched_get_priority_max", _keywords, + &policy)) + goto exit; + return_value = os_sched_get_priority_max_impl(module, policy); + +exit: + return return_value; +} + +static PyObject * +os_sched_get_priority_max_impl(PyModuleDef *module, int policy) +/*[clinic end generated code: output=a580a52f25238c1f input=2097b7998eca6874]*/ +{ + int max; - if (!PyArg_ParseTuple(args, "i:sched_get_priority_max", &policy)) - return NULL; max = sched_get_priority_max(policy); if (max < 0) return posix_error(); return PyLong_FromLong(max); } -PyDoc_STRVAR(posix_sched_get_priority_min__doc__, -"sched_get_priority_min(policy)\n\n\ -Get the minimum scheduling priority for *policy*."); + +/*[clinic input] +os.sched_get_priority_min + + policy: int + +Get the minimum scheduling priority for policy. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sched_get_priority_min__doc__, +"sched_get_priority_min($module, /, policy)\n" +"--\n" +"\n" +"Get the minimum scheduling priority for policy."); + +#define OS_SCHED_GET_PRIORITY_MIN_METHODDEF \ + {"sched_get_priority_min", (PyCFunction)os_sched_get_priority_min, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_min__doc__}, static PyObject * -posix_sched_get_priority_min(PyObject *self, PyObject *args) +os_sched_get_priority_min_impl(PyModuleDef *module, int policy); + +static PyObject * +os_sched_get_priority_min(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - int policy, min; + PyObject *return_value = NULL; + static char *_keywords[] = {"policy", NULL}; + int policy; - if (!PyArg_ParseTuple(args, "i:sched_get_priority_min", &policy)) - return NULL; - min = sched_get_priority_min(policy); + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:sched_get_priority_min", _keywords, + &policy)) + goto exit; + return_value = os_sched_get_priority_min_impl(module, policy); + +exit: + return return_value; +} + +static PyObject * +os_sched_get_priority_min_impl(PyModuleDef *module, int policy) +/*[clinic end generated code: output=bad8ba10e7d0e977 input=21bc8fa0d70983bf]*/ +{ + int min = sched_get_priority_min(policy); if (min < 0) return posix_error(); return PyLong_FromLong(min); } - #endif /* HAVE_SCHED_GET_PRIORITY_MAX */ + #ifdef HAVE_SCHED_SETSCHEDULER +/*[clinic input] +os.sched_getscheduler + pid: pid_t + / + +Get the scheduling policy for the process identifiedy by pid. + +Passing 0 for pid returns the scheduling policy for the calling process. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sched_getscheduler__doc__, +"sched_getscheduler($module, pid, /)\n" +"--\n" +"\n" +"Get the scheduling policy for the process identifiedy by pid.\n" +"\n" +"Passing 0 for pid returns the scheduling policy for the calling process."); + +#define OS_SCHED_GETSCHEDULER_METHODDEF \ + {"sched_getscheduler", (PyCFunction)os_sched_getscheduler, METH_VARARGS, os_sched_getscheduler__doc__}, -PyDoc_STRVAR(posix_sched_getscheduler__doc__, -"sched_getscheduler(pid)\n\n\ -Get the scheduling policy for the process with a PID of *pid*.\n\ -Passing a PID of 0 returns the scheduling policy for the calling process."); +static PyObject * +os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid); static PyObject * -posix_sched_getscheduler(PyObject *self, PyObject *args) +os_sched_getscheduler(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID ":sched_getscheduler", + &pid)) + goto exit; + return_value = os_sched_getscheduler_impl(module, pid); + +exit: + return return_value; +} + +static PyObject * +os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid) +/*[clinic end generated code: output=e0d6244207b1d828 input=5f14cfd1f189e1a0]*/ +{ int policy; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":sched_getscheduler", &pid)) - return NULL; policy = sched_getscheduler(pid); if (policy < 0) return posix_error(); return PyLong_FromLong(policy); } +#endif /* HAVE_SCHED_SETSCHEDULER */ -#endif #if defined(HAVE_SCHED_SETSCHEDULER) || defined(HAVE_SCHED_SETPARAM) +/*[clinic input] +class os.sched_param "PyObject *" "&SchedParamType" + +@classmethod +os.sched_param.__new__ + + sched_priority: object + A scheduling parameter. + +Current has only one field: sched_priority"); +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sched_param__doc__, +"sched_param(sched_priority)\n" +"--\n" +"\n" +"Current has only one field: sched_priority\");\n" +"\n" +" sched_priority\n" +" A scheduling parameter."); + +static PyObject * +os_sched_param_impl(PyTypeObject *type, PyObject *sched_priority); static PyObject * -sched_param_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) +os_sched_param(PyTypeObject *type, PyObject *args, PyObject *kwargs) { - PyObject *res, *priority; - static char *kwlist[] = {"sched_priority", NULL}; + PyObject *return_value = NULL; + static char *_keywords[] = {"sched_priority", NULL}; + PyObject *sched_priority; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O:sched_param", _keywords, + &sched_priority)) + goto exit; + return_value = os_sched_param_impl(type, sched_priority); + +exit: + return return_value; +} + +static PyObject * +os_sched_param_impl(PyTypeObject *type, PyObject *sched_priority) +/*[clinic end generated code: output=d3791e345f7fe573 input=73a4c22f7071fc62]*/ +{ + PyObject *res; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:sched_param", kwlist, &priority)) - return NULL; res = PyStructSequence_New(type); if (!res) return NULL; - Py_INCREF(priority); - PyStructSequence_SET_ITEM(res, 0, priority); + Py_INCREF(sched_priority); + PyStructSequence_SET_ITEM(res, 0, sched_priority); return res; } -PyDoc_STRVAR(sched_param__doc__, -"sched_param(sched_priority): A scheduling parameter.\n\n\ -Current has only one field: sched_priority"); static PyStructSequence_Field sched_param_fields[] = { {"sched_priority", "the scheduling priority"}, @@ -5633,7 +7413,7 @@ static PyStructSequence_Field sched_param_fields[] = { static PyStructSequence_Desc sched_param_desc = { "sched_param", /* name */ - sched_param__doc__, /* doc */ + os_sched_param__doc__, /* doc */ sched_param_fields, 1 }; @@ -5657,118 +7437,280 @@ convert_sched_param(PyObject *param, struct sched_param *res) res->sched_priority = Py_SAFE_DOWNCAST(priority, long, int); return 1; } +#endif /* defined(HAVE_SCHED_SETSCHEDULER) || defined(HAVE_SCHED_SETPARAM) */ -#endif #ifdef HAVE_SCHED_SETSCHEDULER +/*[clinic input] +os.sched_setscheduler -PyDoc_STRVAR(posix_sched_setscheduler__doc__, -"sched_setscheduler(pid, policy, param)\n\n\ -Set the scheduling policy, *policy*, for *pid*.\n\ -If *pid* is 0, the calling process is changed.\n\ -*param* is an instance of sched_param."); + pid: pid_t + policy: int + param: sched_param + / + +Set the scheduling policy for the process identified by pid. + +If pid is 0, the calling process is changed. +param is an instance of sched_param. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sched_setscheduler__doc__, +"sched_setscheduler($module, pid, policy, param, /)\n" +"--\n" +"\n" +"Set the scheduling policy for the process identified by pid.\n" +"\n" +"If pid is 0, the calling process is changed.\n" +"param is an instance of sched_param."); + +#define OS_SCHED_SETSCHEDULER_METHODDEF \ + {"sched_setscheduler", (PyCFunction)os_sched_setscheduler, METH_VARARGS, os_sched_setscheduler__doc__}, static PyObject * -posix_sched_setscheduler(PyObject *self, PyObject *args) +os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, struct sched_param *param); + +static PyObject * +os_sched_setscheduler(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; int policy; struct sched_param param; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID "iO&:sched_setscheduler", - &pid, &policy, &convert_sched_param, ¶m)) - return NULL; + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "iO&:sched_setscheduler", + &pid, &policy, convert_sched_param, ¶m)) + goto exit; + return_value = os_sched_setscheduler_impl(module, pid, policy, ¶m); + +exit: + return return_value; +} +static PyObject * +os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, struct sched_param *param) +/*[clinic end generated code: output=36abdb73f81c224f input=c581f9469a5327dd]*/ +{ /* ** sched_setscheduler() returns 0 in Linux, but the previous ** scheduling policy under Solaris/Illumos, and others. ** On error, -1 is returned in all Operating Systems. */ - if (sched_setscheduler(pid, policy, ¶m) == -1) + if (sched_setscheduler(pid, policy, param) == -1) return posix_error(); Py_RETURN_NONE; } +#endif /* HAVE_SCHED_SETSCHEDULER*/ -#endif #ifdef HAVE_SCHED_SETPARAM +/*[clinic input] +os.sched_getparam + pid: pid_t + / + +Returns scheduling parameters for the process identified by pid. -PyDoc_STRVAR(posix_sched_getparam__doc__, -"sched_getparam(pid) -> sched_param\n\n\ -Returns scheduling parameters for the process with *pid* as an instance of the\n\ -sched_param class. A PID of 0 means the calling process."); +If pid is 0, returns parameters for the calling process. +Return value is an instance of sched_param. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sched_getparam__doc__, +"sched_getparam($module, pid, /)\n" +"--\n" +"\n" +"Returns scheduling parameters for the process identified by pid.\n" +"\n" +"If pid is 0, returns parameters for the calling process.\n" +"Return value is an instance of sched_param."); + +#define OS_SCHED_GETPARAM_METHODDEF \ + {"sched_getparam", (PyCFunction)os_sched_getparam, METH_VARARGS, os_sched_getparam__doc__}, + +static PyObject * +os_sched_getparam_impl(PyModuleDef *module, pid_t pid); static PyObject * -posix_sched_getparam(PyObject *self, PyObject *args) +os_sched_getparam(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID ":sched_getparam", + &pid)) + goto exit; + return_value = os_sched_getparam_impl(module, pid); + +exit: + return return_value; +} + +static PyObject * +os_sched_getparam_impl(PyModuleDef *module, pid_t pid) +/*[clinic end generated code: output=b33acc8db004a8c9 input=18a1ef9c2efae296]*/ +{ struct sched_param param; - PyObject *res, *priority; + PyObject *result; + PyObject *priority; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":sched_getparam", &pid)) - return NULL; if (sched_getparam(pid, ¶m)) return posix_error(); - res = PyStructSequence_New(&SchedParamType); - if (!res) + result = PyStructSequence_New(&SchedParamType); + if (!result) return NULL; priority = PyLong_FromLong(param.sched_priority); if (!priority) { - Py_DECREF(res); + Py_DECREF(result); return NULL; } - PyStructSequence_SET_ITEM(res, 0, priority); - return res; + PyStructSequence_SET_ITEM(result, 0, priority); + return result; } -PyDoc_STRVAR(posix_sched_setparam__doc__, -"sched_setparam(pid, param)\n\n\ -Set scheduling parameters for a process with PID *pid*.\n\ -A PID of 0 means the calling process."); + +/*[clinic input] +os.sched_setparam + pid: pid_t + param: sched_param + / + +Set scheduling parameters for the process identified by pid. + +If pid is 0, sets parameters for the calling process. +param should be an instance of sched_param. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sched_setparam__doc__, +"sched_setparam($module, pid, param, /)\n" +"--\n" +"\n" +"Set scheduling parameters for the process identified by pid.\n" +"\n" +"If pid is 0, sets parameters for the calling process.\n" +"param should be an instance of sched_param."); + +#define OS_SCHED_SETPARAM_METHODDEF \ + {"sched_setparam", (PyCFunction)os_sched_setparam, METH_VARARGS, os_sched_setparam__doc__}, + +static PyObject * +os_sched_setparam_impl(PyModuleDef *module, pid_t pid, struct sched_param *param); static PyObject * -posix_sched_setparam(PyObject *self, PyObject *args) +os_sched_setparam(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; struct sched_param param; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID "O&:sched_setparam", - &pid, &convert_sched_param, ¶m)) - return NULL; - if (sched_setparam(pid, ¶m)) + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "O&:sched_setparam", + &pid, convert_sched_param, ¶m)) + goto exit; + return_value = os_sched_setparam_impl(module, pid, ¶m); + +exit: + return return_value; +} + +static PyObject * +os_sched_setparam_impl(PyModuleDef *module, pid_t pid, struct sched_param *param) +/*[clinic end generated code: output=488bdf5bcbe0d4e8 input=6b8d6dfcecdc21bd]*/ +{ + if (sched_setparam(pid, param)) return posix_error(); Py_RETURN_NONE; } +#endif /* HAVE_SCHED_SETPARAM */ -#endif #ifdef HAVE_SCHED_RR_GET_INTERVAL +/*[clinic input] +os.sched_rr_get_interval -> double + pid: pid_t + / + +Return the round-robin quantum for the process identified by pid, in seconds. + +Value returned is a float. +[clinic start generated code]*/ -PyDoc_STRVAR(posix_sched_rr_get_interval__doc__, -"sched_rr_get_interval(pid) -> float\n\n\ -Return the round-robin quantum for the process with PID *pid* in seconds."); +PyDoc_STRVAR(os_sched_rr_get_interval__doc__, +"sched_rr_get_interval($module, pid, /)\n" +"--\n" +"\n" +"Return the round-robin quantum for the process identified by pid, in seconds.\n" +"\n" +"Value returned is a float."); + +#define OS_SCHED_RR_GET_INTERVAL_METHODDEF \ + {"sched_rr_get_interval", (PyCFunction)os_sched_rr_get_interval, METH_VARARGS, os_sched_rr_get_interval__doc__}, + +static double +os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid); static PyObject * -posix_sched_rr_get_interval(PyObject *self, PyObject *args) +os_sched_rr_get_interval(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; - struct timespec interval; + double _return_value; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":sched_rr_get_interval", &pid)) - return NULL; - if (sched_rr_get_interval(pid, &interval)) - return posix_error(); - return PyFloat_FromDouble((double)interval.tv_sec + 1e-9*interval.tv_nsec); + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID ":sched_rr_get_interval", + &pid)) + goto exit; + _return_value = os_sched_rr_get_interval_impl(module, pid); + if ((_return_value == -1.0) && PyErr_Occurred()) + goto exit; + return_value = PyFloat_FromDouble(_return_value); + +exit: + return return_value; } -#endif +static double +os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid) +/*[clinic end generated code: output=5b3b8d1f27fb2c0a input=2a973da15cca6fae]*/ +{ + struct timespec interval; + if (sched_rr_get_interval(pid, &interval)) { + posix_error(); + return -1.0; + } + return (double)interval.tv_sec + 1e-9*interval.tv_nsec; +} +#endif /* HAVE_SCHED_RR_GET_INTERVAL */ + + +/*[clinic input] +os.sched_yield + +Voluntarily relinquish the CPU. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sched_yield__doc__, +"sched_yield($module, /)\n" +"--\n" +"\n" +"Voluntarily relinquish the CPU."); + +#define OS_SCHED_YIELD_METHODDEF \ + {"sched_yield", (PyCFunction)os_sched_yield, METH_NOARGS, os_sched_yield__doc__}, + +static PyObject * +os_sched_yield_impl(PyModuleDef *module); -PyDoc_STRVAR(posix_sched_yield__doc__, -"sched_yield()\n\n\ -Voluntarily relinquish the CPU."); +static PyObject * +os_sched_yield(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_sched_yield_impl(module); +} static PyObject * -posix_sched_yield(PyObject *self, PyObject *noargs) +os_sched_yield_impl(PyModuleDef *module) +/*[clinic end generated code: output=9d2e5f29f1370324 input=e54d6f98189391d4]*/ { if (sched_yield()) return posix_error(); @@ -5776,39 +7718,72 @@ posix_sched_yield(PyObject *self, PyObject *noargs) } #ifdef HAVE_SCHED_SETAFFINITY - /* The minimum number of CPUs allocated in a cpu_set_t */ static const int NCPUS_START = sizeof(unsigned long) * CHAR_BIT; -PyDoc_STRVAR(posix_sched_setaffinity__doc__, -"sched_setaffinity(pid, cpu_set)\n\n\ -Set the affinity of the process with PID *pid* to *cpu_set*."); +/*[clinic input] +os.sched_setaffinity + pid: pid_t + mask : object + / + +Set the CPU affinity of the process identified by pid to mask. + +mask should be an iterable of integers identifying CPUs. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sched_setaffinity__doc__, +"sched_setaffinity($module, pid, mask, /)\n" +"--\n" +"\n" +"Set the CPU affinity of the process identified by pid to mask.\n" +"\n" +"mask should be an iterable of integers identifying CPUs."); + +#define OS_SCHED_SETAFFINITY_METHODDEF \ + {"sched_setaffinity", (PyCFunction)os_sched_setaffinity, METH_VARARGS, os_sched_setaffinity__doc__}, + +static PyObject * +os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask); static PyObject * -posix_sched_setaffinity(PyObject *self, PyObject *args) +os_sched_setaffinity(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; + PyObject *mask; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "O:sched_setaffinity", + &pid, &mask)) + goto exit; + return_value = os_sched_setaffinity_impl(module, pid, mask); + +exit: + return return_value; +} + +static PyObject * +os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask) +/*[clinic end generated code: output=5199929738130196 input=a0791a597c7085ba]*/ +{ int ncpus; size_t setsize; - cpu_set_t *mask = NULL; - PyObject *iterable, *iterator = NULL, *item; + cpu_set_t *cpu_set = NULL; + PyObject *iterator = NULL, *item; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID "O:sched_setaffinity", - &pid, &iterable)) - return NULL; - - iterator = PyObject_GetIter(iterable); + iterator = PyObject_GetIter(mask); if (iterator == NULL) return NULL; ncpus = NCPUS_START; setsize = CPU_ALLOC_SIZE(ncpus); - mask = CPU_ALLOC(ncpus); - if (mask == NULL) { + cpu_set = CPU_ALLOC(ncpus); + if (cpu_set == NULL) { PyErr_NoMemory(); goto error; } - CPU_ZERO_S(setsize, mask); + CPU_ZERO_S(setsize, cpu_set); while ((item = PyIter_Next(iterator))) { long cpu; @@ -5849,48 +7824,80 @@ posix_sched_setaffinity(PyObject *self, PyObject *args) } newsetsize = CPU_ALLOC_SIZE(newncpus); CPU_ZERO_S(newsetsize, newmask); - memcpy(newmask, mask, setsize); - CPU_FREE(mask); + memcpy(newmask, cpu_set, setsize); + CPU_FREE(cpu_set); setsize = newsetsize; - mask = newmask; + cpu_set = newmask; ncpus = newncpus; } - CPU_SET_S(cpu, setsize, mask); + CPU_SET_S(cpu, setsize, cpu_set); } Py_CLEAR(iterator); - if (sched_setaffinity(pid, setsize, mask)) { + if (sched_setaffinity(pid, setsize, cpu_set)) { posix_error(); goto error; } - CPU_FREE(mask); + CPU_FREE(cpu_set); Py_RETURN_NONE; error: - if (mask) - CPU_FREE(mask); + if (cpu_set) + CPU_FREE(cpu_set); Py_XDECREF(iterator); return NULL; } -PyDoc_STRVAR(posix_sched_getaffinity__doc__, -"sched_getaffinity(pid, ncpus) -> cpu_set\n\n\ -Return the affinity of the process with PID *pid*.\n\ -The returned cpu_set will be of size *ncpus*."); + +/*[clinic input] +os.sched_getaffinity + pid: pid_t + / + +Return the affinity of the process identified by pid. + +The affinity is returned as a set of CPU identifiers. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sched_getaffinity__doc__, +"sched_getaffinity($module, pid, /)\n" +"--\n" +"\n" +"Return the affinity of the process identified by pid.\n" +"\n" +"The affinity is returned as a set of CPU identifiers."); + +#define OS_SCHED_GETAFFINITY_METHODDEF \ + {"sched_getaffinity", (PyCFunction)os_sched_getaffinity, METH_VARARGS, os_sched_getaffinity__doc__}, static PyObject * -posix_sched_getaffinity(PyObject *self, PyObject *args) +os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid); + +static PyObject * +os_sched_getaffinity(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID ":sched_getaffinity", + &pid)) + goto exit; + return_value = os_sched_getaffinity_impl(module, pid); + +exit: + return return_value; +} + +static PyObject * +os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid) +/*[clinic end generated code: output=7b273b0fca9830f0 input=eaf161936874b8a1]*/ +{ int cpu, ncpus, count; size_t setsize; cpu_set_t *mask = NULL; PyObject *res = NULL; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":sched_getaffinity", - &pid)) - return NULL; - ncpus = NCPUS_START; while (1) { setsize = CPU_ALLOC_SIZE(ncpus); @@ -5940,6 +7947,47 @@ error: #endif /* HAVE_SCHED_H */ +#ifndef OS_SCHED_GET_PRIORITY_MAX_METHODDEF +#define OS_SCHED_GET_PRIORITY_MAX_METHODDEF +#endif /* OS_SCHED_GET_PRIORITY_MAX_METHODDEF */ + +#ifndef OS_SCHED_GET_PRIORITY_MIN_METHODDEF +#define OS_SCHED_GET_PRIORITY_MIN_METHODDEF +#endif /* OS_SCHED_GET_PRIORITY_MIN_METHODDEF */ + +#ifndef OS_SCHED_GETSCHEDULER_METHODDEF +#define OS_SCHED_GETSCHEDULER_METHODDEF +#endif /* OS_SCHED_GETSCHEDULER_METHODDEF */ + +#ifndef OS_SCHED_SETSCHEDULER_METHODDEF +#define OS_SCHED_SETSCHEDULER_METHODDEF +#endif /* OS_SCHED_SETSCHEDULER_METHODDEF */ + +#ifndef OS_SCHED_GETPARAM_METHODDEF +#define OS_SCHED_GETPARAM_METHODDEF +#endif /* OS_SCHED_GETPARAM_METHODDEF */ + +#ifndef OS_SCHED_SETPARAM_METHODDEF +#define OS_SCHED_SETPARAM_METHODDEF +#endif /* OS_SCHED_SETPARAM_METHODDEF */ + +#ifndef OS_SCHED_RR_GET_INTERVAL_METHODDEF +#define OS_SCHED_RR_GET_INTERVAL_METHODDEF +#endif /* OS_SCHED_RR_GET_INTERVAL_METHODDEF */ + +#ifndef OS_SCHED_YIELD_METHODDEF +#define OS_SCHED_YIELD_METHODDEF +#endif /* OS_SCHED_YIELD_METHODDEF */ + +#ifndef OS_SCHED_SETAFFINITY_METHODDEF +#define OS_SCHED_SETAFFINITY_METHODDEF +#endif /* OS_SCHED_SETAFFINITY_METHODDEF */ + +#ifndef OS_SCHED_GETAFFINITY_METHODDEF +#define OS_SCHED_GETAFFINITY_METHODDEF +#endif /* OS_SCHED_GETAFFINITY_METHODDEF */ + + /* AIX uses /dev/ptc but is otherwise the same as /dev/ptmx */ /* IRIX has both /dev/ptc and /dev/ptmx, use ptmx */ #if defined(HAVE_DEV_PTC) && !defined(HAVE_DEV_PTMX) @@ -5966,13 +8014,41 @@ error: #endif #endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) || defined(HAVE_DEV_PTMX */ + #if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX) -PyDoc_STRVAR(posix_openpty__doc__, -"openpty() -> (master_fd, slave_fd)\n\n\ -Open a pseudo-terminal, returning open fd's for both master and slave end.\n"); +/*[clinic input] +os.openpty + +Open a pseudo-terminal. + +Return a tuple of (master_fd, slave_fd) containing open file descriptors +for both the master and slave ends. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_openpty__doc__, +"openpty($module, /)\n" +"--\n" +"\n" +"Open a pseudo-terminal.\n" +"\n" +"Return a tuple of (master_fd, slave_fd) containing open file descriptors\n" +"for both the master and slave ends."); + +#define OS_OPENPTY_METHODDEF \ + {"openpty", (PyCFunction)os_openpty, METH_NOARGS, os_openpty__doc__}, static PyObject * -posix_openpty(PyObject *self, PyObject *noargs) +os_openpty_impl(PyModuleDef *module); + +static PyObject * +os_openpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_openpty_impl(module); +} + +static PyObject * +os_openpty_impl(PyModuleDef *module) +/*[clinic end generated code: output=b12d3c1735468464 input=f3d99fd99e762907]*/ { int master_fd = -1, slave_fd = -1; #ifndef HAVE_OPENPTY @@ -6061,15 +8137,45 @@ error: } #endif /* defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX) */ + #ifdef HAVE_FORKPTY -PyDoc_STRVAR(posix_forkpty__doc__, -"forkpty() -> (pid, master_fd)\n\n\ -Fork a new process with a new pseudo-terminal as controlling tty.\n\n\ -Like fork(), return 0 as pid to child process, and PID of child to parent.\n\ -To both, return fd of newly opened pseudo-terminal.\n"); +/*[clinic input] +os.forkpty + +Fork a new process with a new pseudo-terminal as controlling tty. + +Returns a tuple of (pid, master_fd). +Like fork(), return pid of 0 to the child process, +and pid of child to the parent process. +To both, return fd of newly opened pseudo-terminal. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_forkpty__doc__, +"forkpty($module, /)\n" +"--\n" +"\n" +"Fork a new process with a new pseudo-terminal as controlling tty.\n" +"\n" +"Returns a tuple of (pid, master_fd).\n" +"Like fork(), return pid of 0 to the child process,\n" +"and pid of child to the parent process.\n" +"To both, return fd of newly opened pseudo-terminal."); + +#define OS_FORKPTY_METHODDEF \ + {"forkpty", (PyCFunction)os_forkpty, METH_NOARGS, os_forkpty__doc__}, static PyObject * -posix_forkpty(PyObject *self, PyObject *noargs) +os_forkpty_impl(PyModuleDef *module); + +static PyObject * +os_forkpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_forkpty_impl(module); +} + +static PyObject * +os_forkpty_impl(PyModuleDef *module) +/*[clinic end generated code: output=d4f82958d2ed5cad input=f1f7f4bae3966010]*/ { int master_fd = -1, result = 0; pid_t pid; @@ -6093,64 +8199,150 @@ posix_forkpty(PyObject *self, PyObject *noargs) } return Py_BuildValue("(Ni)", PyLong_FromPid(pid), master_fd); } -#endif +#endif /* HAVE_FORKPTY */ #ifdef HAVE_GETEGID -PyDoc_STRVAR(posix_getegid__doc__, -"getegid() -> egid\n\n\ -Return the current process's effective group id."); +/*[clinic input] +os.getegid + +Return the current process's effective group id. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getegid__doc__, +"getegid($module, /)\n" +"--\n" +"\n" +"Return the current process\'s effective group id."); + +#define OS_GETEGID_METHODDEF \ + {"getegid", (PyCFunction)os_getegid, METH_NOARGS, os_getegid__doc__}, + +static PyObject * +os_getegid_impl(PyModuleDef *module); + +static PyObject * +os_getegid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getegid_impl(module); +} static PyObject * -posix_getegid(PyObject *self, PyObject *noargs) +os_getegid_impl(PyModuleDef *module) +/*[clinic end generated code: output=fd12c346fa41cccb input=1596f79ad1107d5d]*/ { return _PyLong_FromGid(getegid()); } -#endif +#endif /* HAVE_GETEGID */ #ifdef HAVE_GETEUID -PyDoc_STRVAR(posix_geteuid__doc__, -"geteuid() -> euid\n\n\ -Return the current process's effective user id."); +/*[clinic input] +os.geteuid -static PyObject * -posix_geteuid(PyObject *self, PyObject *noargs) -{ - return _PyLong_FromUid(geteuid()); -} -#endif +Return the current process's effective user id. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_geteuid__doc__, +"geteuid($module, /)\n" +"--\n" +"\n" +"Return the current process\'s effective user id."); +#define OS_GETEUID_METHODDEF \ + {"geteuid", (PyCFunction)os_geteuid, METH_NOARGS, os_geteuid__doc__}, -#ifdef HAVE_GETGID -PyDoc_STRVAR(posix_getgid__doc__, -"getgid() -> gid\n\n\ -Return the current process's group id."); +static PyObject * +os_geteuid_impl(PyModuleDef *module); static PyObject * -posix_getgid(PyObject *self, PyObject *noargs) +os_geteuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) { - return _PyLong_FromGid(getgid()); + return os_geteuid_impl(module); } -#endif - - -PyDoc_STRVAR(posix_getpid__doc__, -"getpid() -> pid\n\n\ -Return the current process id"); static PyObject * -posix_getpid(PyObject *self, PyObject *noargs) +os_geteuid_impl(PyModuleDef *module) +/*[clinic end generated code: output=03d98e07f4bc03d4 input=4644c662d3bd9f19]*/ { - return PyLong_FromPid(getpid()); + return _PyLong_FromUid(geteuid()); } +#endif /* HAVE_GETEUID */ -#ifdef HAVE_GETGROUPLIST -PyDoc_STRVAR(posix_getgrouplist__doc__, -"getgrouplist(user, group) -> list of groups to which a user belongs\n\n\ -Returns a list of groups to which a user belongs.\n\n\ - user: username to lookup\n\ - group: base group id of the user"); + +#ifdef HAVE_GETGID +/*[clinic input] +os.getgid + +Return the current process's group id. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getgid__doc__, +"getgid($module, /)\n" +"--\n" +"\n" +"Return the current process\'s group id."); + +#define OS_GETGID_METHODDEF \ + {"getgid", (PyCFunction)os_getgid, METH_NOARGS, os_getgid__doc__}, + +static PyObject * +os_getgid_impl(PyModuleDef *module); + +static PyObject * +os_getgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getgid_impl(module); +} + +static PyObject * +os_getgid_impl(PyModuleDef *module) +/*[clinic end generated code: output=07b0356121b8098d input=58796344cd87c0f6]*/ +{ + return _PyLong_FromGid(getgid()); +} +#endif /* HAVE_GETGID */ + + +/*[clinic input] +os.getpid + +Return the current process id. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getpid__doc__, +"getpid($module, /)\n" +"--\n" +"\n" +"Return the current process id."); + +#define OS_GETPID_METHODDEF \ + {"getpid", (PyCFunction)os_getpid, METH_NOARGS, os_getpid__doc__}, + +static PyObject * +os_getpid_impl(PyModuleDef *module); + +static PyObject * +os_getpid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getpid_impl(module); +} + +static PyObject * +os_getpid_impl(PyModuleDef *module) +/*[clinic end generated code: output=d63a01a3cebc573d input=5a9a00f0ab68aa00]*/ +{ + return PyLong_FromPid(getpid()); +} + +#ifdef HAVE_GETGROUPLIST + +/* AC 3.5: funny apple logic below */ +PyDoc_STRVAR(posix_getgrouplist__doc__, +"getgrouplist(user, group) -> list of groups to which a user belongs\n\n\ +Returns a list of groups to which a user belongs.\n\n\ + user: username to lookup\n\ + group: base group id of the user"); static PyObject * posix_getgrouplist(PyObject *self, PyObject *args) @@ -6218,15 +8410,37 @@ posix_getgrouplist(PyObject *self, PyObject *args) return list; } -#endif +#endif /* HAVE_GETGROUPLIST */ + #ifdef HAVE_GETGROUPS -PyDoc_STRVAR(posix_getgroups__doc__, -"getgroups() -> list of group IDs\n\n\ -Return list of supplemental group IDs for the process."); +/*[clinic input] +os.getgroups + +Return list of supplemental group IDs for the process. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getgroups__doc__, +"getgroups($module, /)\n" +"--\n" +"\n" +"Return list of supplemental group IDs for the process."); + +#define OS_GETGROUPS_METHODDEF \ + {"getgroups", (PyCFunction)os_getgroups, METH_NOARGS, os_getgroups__doc__}, + +static PyObject * +os_getgroups_impl(PyModuleDef *module); + +static PyObject * +os_getgroups(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getgroups_impl(module); +} static PyObject * -posix_getgroups(PyObject *self, PyObject *noargs) +os_getgroups_impl(PyModuleDef *module) +/*[clinic end generated code: output=d9a3559b2e6f4ab8 input=d3f109412e6a155c]*/ { PyObject *result = NULL; @@ -6325,7 +8539,7 @@ posix_getgroups(PyObject *self, PyObject *noargs) return result; } -#endif +#endif /* HAVE_GETGROUPS */ #ifdef HAVE_INITGROUPS PyDoc_STRVAR(posix_initgroups__doc__, @@ -6334,6 +8548,7 @@ Call the system initgroups() to initialize the group access list with all of\n\ the groups of which the specified username is a member, plus the specified\n\ group id."); +/* AC 3.5: funny apple logic */ static PyObject * posix_initgroups(PyObject *self, PyObject *args) { @@ -6366,20 +8581,52 @@ posix_initgroups(PyObject *self, PyObject *args) Py_INCREF(Py_None); return Py_None; } -#endif +#endif /* HAVE_INITGROUPS */ + #ifdef HAVE_GETPGID -PyDoc_STRVAR(posix_getpgid__doc__, -"getpgid(pid) -> pgid\n\n\ -Call the system call getpgid()."); +/*[clinic input] +os.getpgid + + pid: pid_t + +Call the system call getpgid(), and return the result. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getpgid__doc__, +"getpgid($module, /, pid)\n" +"--\n" +"\n" +"Call the system call getpgid(), and return the result."); + +#define OS_GETPGID_METHODDEF \ + {"getpgid", (PyCFunction)os_getpgid, METH_VARARGS|METH_KEYWORDS, os_getpgid__doc__}, static PyObject * -posix_getpgid(PyObject *self, PyObject *args) +os_getpgid_impl(PyModuleDef *module, pid_t pid); + +static PyObject * +os_getpgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - pid_t pid, pgid; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":getpgid", &pid)) - return NULL; - pgid = getpgid(pid); + PyObject *return_value = NULL; + static char *_keywords[] = {"pid", NULL}; + pid_t pid; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "" _Py_PARSE_PID ":getpgid", _keywords, + &pid)) + goto exit; + return_value = os_getpgid_impl(module, pid); + +exit: + return return_value; +} + +static PyObject * +os_getpgid_impl(PyModuleDef *module, pid_t pid) +/*[clinic end generated code: output=3db4ed686179160d input=39d710ae3baaf1c7]*/ +{ + pid_t pgid = getpgid(pid); if (pgid < 0) return posix_error(); return PyLong_FromPid(pgid); @@ -6388,12 +8635,33 @@ posix_getpgid(PyObject *self, PyObject *args) #ifdef HAVE_GETPGRP -PyDoc_STRVAR(posix_getpgrp__doc__, -"getpgrp() -> pgrp\n\n\ -Return the current process group id."); +/*[clinic input] +os.getpgrp + +Return the current process group id. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getpgrp__doc__, +"getpgrp($module, /)\n" +"--\n" +"\n" +"Return the current process group id."); + +#define OS_GETPGRP_METHODDEF \ + {"getpgrp", (PyCFunction)os_getpgrp, METH_NOARGS, os_getpgrp__doc__}, + +static PyObject * +os_getpgrp_impl(PyModuleDef *module); + +static PyObject * +os_getpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getpgrp_impl(module); +} static PyObject * -posix_getpgrp(PyObject *self, PyObject *noargs) +os_getpgrp_impl(PyModuleDef *module) +/*[clinic end generated code: output=3b0d3663ea054277 input=6846fb2bb9a3705e]*/ { #ifdef GETPGRP_HAVE_ARG return PyLong_FromPid(getpgrp(0)); @@ -6405,12 +8673,33 @@ posix_getpgrp(PyObject *self, PyObject *noargs) #ifdef HAVE_SETPGRP -PyDoc_STRVAR(posix_setpgrp__doc__, -"setpgrp()\n\n\ -Make this process the process group leader."); +/*[clinic input] +os.setpgrp + +Make the current process the leader of its process group. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setpgrp__doc__, +"setpgrp($module, /)\n" +"--\n" +"\n" +"Make the current process the leader of its process group."); + +#define OS_SETPGRP_METHODDEF \ + {"setpgrp", (PyCFunction)os_setpgrp, METH_NOARGS, os_setpgrp__doc__}, + +static PyObject * +os_setpgrp_impl(PyModuleDef *module); + +static PyObject * +os_setpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_setpgrp_impl(module); +} static PyObject * -posix_setpgrp(PyObject *self, PyObject *noargs) +os_setpgrp_impl(PyModuleDef *module) +/*[clinic end generated code: output=8fbb0ee29ef6fb2d input=1f0619fcb5731e7e]*/ { #ifdef SETPGRP_HAVE_ARG if (setpgrp(0, 0) < 0) @@ -6421,7 +8710,6 @@ posix_setpgrp(PyObject *self, PyObject *noargs) Py_INCREF(Py_None); return Py_None; } - #endif /* HAVE_SETPGRP */ #ifdef HAVE_GETPPID @@ -6468,14 +8756,40 @@ win32_getppid() } #endif /*MS_WINDOWS*/ -PyDoc_STRVAR(posix_getppid__doc__, -"getppid() -> ppid\n\n\ -Return the parent's process id. If the parent process has already exited,\n\ -Windows machines will still return its id; others systems will return the id\n\ -of the 'init' process (1)."); + +/*[clinic input] +os.getppid + +Return the parent's process id. + +If the parent process has already exited, Windows machines will still +return its id; others systems will return the id of the 'init' process (1). +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getppid__doc__, +"getppid($module, /)\n" +"--\n" +"\n" +"Return the parent\'s process id.\n" +"\n" +"If the parent process has already exited, Windows machines will still\n" +"return its id; others systems will return the id of the \'init\' process (1)."); + +#define OS_GETPPID_METHODDEF \ + {"getppid", (PyCFunction)os_getppid, METH_NOARGS, os_getppid__doc__}, static PyObject * -posix_getppid(PyObject *self, PyObject *noargs) +os_getppid_impl(PyModuleDef *module); + +static PyObject * +os_getppid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getppid_impl(module); +} + +static PyObject * +os_getppid_impl(PyModuleDef *module) +/*[clinic end generated code: output=9ff3b387781edf3a input=e637cb87539c030e]*/ { #ifdef MS_WINDOWS return win32_getppid(); @@ -6487,12 +8801,33 @@ posix_getppid(PyObject *self, PyObject *noargs) #ifdef HAVE_GETLOGIN -PyDoc_STRVAR(posix_getlogin__doc__, -"getlogin() -> string\n\n\ -Return the actual login name."); +/*[clinic input] +os.getlogin + +Return the actual login name. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getlogin__doc__, +"getlogin($module, /)\n" +"--\n" +"\n" +"Return the actual login name."); + +#define OS_GETLOGIN_METHODDEF \ + {"getlogin", (PyCFunction)os_getlogin, METH_NOARGS, os_getlogin__doc__}, + +static PyObject * +os_getlogin_impl(PyModuleDef *module); + +static PyObject * +os_getlogin(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getlogin_impl(module); +} static PyObject * -posix_getlogin(PyObject *self, PyObject *noargs) +os_getlogin_impl(PyModuleDef *module) +/*[clinic end generated code: output=ab6211dab104cbb2 input=2a21ab1e917163df]*/ { PyObject *result = NULL; #ifdef MS_WINDOWS @@ -6525,77 +8860,101 @@ posix_getlogin(PyObject *self, PyObject *noargs) } #endif /* HAVE_GETLOGIN */ + #ifdef HAVE_GETUID -PyDoc_STRVAR(posix_getuid__doc__, -"getuid() -> uid\n\n\ -Return the current process's user id."); +/*[clinic input] +os.getuid + +Return the current process's user id. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getuid__doc__, +"getuid($module, /)\n" +"--\n" +"\n" +"Return the current process\'s user id."); + +#define OS_GETUID_METHODDEF \ + {"getuid", (PyCFunction)os_getuid, METH_NOARGS, os_getuid__doc__}, + +static PyObject * +os_getuid_impl(PyModuleDef *module); + +static PyObject * +os_getuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getuid_impl(module); +} static PyObject * -posix_getuid(PyObject *self, PyObject *noargs) +os_getuid_impl(PyModuleDef *module) +/*[clinic end generated code: output=77e0dcf2e37d1e89 input=b53c8b35f110a516]*/ { return _PyLong_FromUid(getuid()); } -#endif +#endif /* HAVE_GETUID */ + +#ifdef MS_WINDOWS +#define HAVE_KILL +#endif /* MS_WINDOWS */ #ifdef HAVE_KILL -PyDoc_STRVAR(posix_kill__doc__, -"kill(pid, sig)\n\n\ -Kill a process with a signal."); +/*[clinic input] +os.kill + + pid: pid_t + signal: Py_ssize_t + / + +Kill a process with a signal. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_kill__doc__, +"kill($module, pid, signal, /)\n" +"--\n" +"\n" +"Kill a process with a signal."); + +#define OS_KILL_METHODDEF \ + {"kill", (PyCFunction)os_kill, METH_VARARGS, os_kill__doc__}, + +static PyObject * +os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal); static PyObject * -posix_kill(PyObject *self, PyObject *args) +os_kill(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; - int sig; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:kill", &pid, &sig)) - return NULL; - if (kill(pid, sig) == -1) - return posix_error(); - Py_INCREF(Py_None); - return Py_None; -} -#endif + Py_ssize_t signal; -#ifdef HAVE_KILLPG -PyDoc_STRVAR(posix_killpg__doc__, -"killpg(pgid, sig)\n\n\ -Kill a process group with a signal."); + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "n:kill", + &pid, &signal)) + goto exit; + return_value = os_kill_impl(module, pid, signal); + +exit: + return return_value; +} static PyObject * -posix_killpg(PyObject *self, PyObject *args) +os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal) +/*[clinic end generated code: output=2f5c77920ed575e6 input=61a36b86ca275ab9]*/ +#ifndef MS_WINDOWS { - int sig; - pid_t pgid; - /* XXX some man pages make the `pgid` parameter an int, others - a pid_t. Since getpgrp() returns a pid_t, we assume killpg should - take the same type. Moreover, pid_t is always at least as wide as - int (else compilation of this module fails), which is safe. */ - if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:killpg", &pgid, &sig)) - return NULL; - if (killpg(pgid, sig) == -1) + if (kill(pid, (int)signal) == -1) return posix_error(); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } -#endif - -#ifdef MS_WINDOWS -PyDoc_STRVAR(win32_kill__doc__, -"kill(pid, sig)\n\n\ -Kill a process with a signal."); - -static PyObject * -win32_kill(PyObject *self, PyObject *args) +#else /* !MS_WINDOWS */ { PyObject *result; - pid_t pid; - DWORD sig, err; + DWORD sig = (DWORD)signal; + DWORD err; HANDLE handle; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID "k:kill", &pid, &sig)) - return NULL; - /* Console processes which share a common console can be sent CTRL+C or CTRL+BREAK events, provided they handle said events. */ if (sig == CTRL_C_EVENT || sig == CTRL_BREAK_EVENT) { @@ -6626,103 +8985,308 @@ win32_kill(PyObject *self, PyObject *args) CloseHandle(handle); return result; } -#endif /* MS_WINDOWS */ +#endif /* !MS_WINDOWS */ +#endif /* HAVE_KILL */ -#ifdef HAVE_PLOCK -#ifdef HAVE_SYS_LOCK_H -#include -#endif +#ifdef HAVE_KILLPG +/*[clinic input] +os.killpg -PyDoc_STRVAR(posix_plock__doc__, -"plock(op)\n\n\ -Lock program segments into memory."); + pgid: pid_t + signal: int + / -static PyObject * -posix_plock(PyObject *self, PyObject *args) -{ - int op; - if (!PyArg_ParseTuple(args, "i:plock", &op)) - return NULL; - if (plock(op) == -1) - return posix_error(); - Py_INCREF(Py_None); - return Py_None; -} -#endif +Kill a process group with a signal. +[clinic start generated code]*/ -#ifdef HAVE_SETUID -PyDoc_STRVAR(posix_setuid__doc__, -"setuid(uid)\n\n\ -Set the current process's user id."); +PyDoc_STRVAR(os_killpg__doc__, +"killpg($module, pgid, signal, /)\n" +"--\n" +"\n" +"Kill a process group with a signal."); + +#define OS_KILLPG_METHODDEF \ + {"killpg", (PyCFunction)os_killpg, METH_VARARGS, os_killpg__doc__}, + +static PyObject * +os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal); static PyObject * -posix_setuid(PyObject *self, PyObject *args) +os_killpg(PyModuleDef *module, PyObject *args) { - uid_t uid; - if (!PyArg_ParseTuple(args, "O&:setuid", _Py_Uid_Converter, &uid)) - return NULL; - if (setuid(uid) < 0) - return posix_error(); - Py_INCREF(Py_None); - return Py_None; -} -#endif /* HAVE_SETUID */ + PyObject *return_value = NULL; + pid_t pgid; + int signal; + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "i:killpg", + &pgid, &signal)) + goto exit; + return_value = os_killpg_impl(module, pgid, signal); -#ifdef HAVE_SETEUID -PyDoc_STRVAR(posix_seteuid__doc__, -"seteuid(uid)\n\n\ -Set the current process's effective user id."); +exit: + return return_value; +} static PyObject * -posix_seteuid (PyObject *self, PyObject *args) +os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal) +/*[clinic end generated code: output=0e05215d1c007e01 input=38b5449eb8faec19]*/ { - uid_t euid; - if (!PyArg_ParseTuple(args, "O&:seteuid", _Py_Uid_Converter, &euid)) - return NULL; - if (seteuid(euid) < 0) { - return posix_error(); - } else { - Py_INCREF(Py_None); - return Py_None; - } + /* XXX some man pages make the `pgid` parameter an int, others + a pid_t. Since getpgrp() returns a pid_t, we assume killpg should + take the same type. Moreover, pid_t is always at least as wide as + int (else compilation of this module fails), which is safe. */ + if (killpg(pgid, signal) == -1) + return posix_error(); + Py_RETURN_NONE; +} +#endif /* HAVE_KILLPG */ + + +#ifdef HAVE_PLOCK +#ifdef HAVE_SYS_LOCK_H +#include +#endif + +/*[clinic input] +os.plock + op: int + / + +Lock program segments into memory."); +[clinic start generated code]*/ + +PyDoc_STRVAR(os_plock__doc__, +"plock($module, op, /)\n" +"--\n" +"\n" +"Lock program segments into memory.\");"); + +#define OS_PLOCK_METHODDEF \ + {"plock", (PyCFunction)os_plock, METH_VARARGS, os_plock__doc__}, + +static PyObject * +os_plock_impl(PyModuleDef *module, int op); + +static PyObject * +os_plock(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int op; + + if (!PyArg_ParseTuple(args, + "i:plock", + &op)) + goto exit; + return_value = os_plock_impl(module, op); + +exit: + return return_value; +} + +static PyObject * +os_plock_impl(PyModuleDef *module, int op) +/*[clinic end generated code: output=2744fe4b6e5f4dbc input=e6e5e348e1525f60]*/ +{ + if (plock(op) == -1) + return posix_error(); + Py_RETURN_NONE; +} +#endif /* HAVE_PLOCK */ + + +#ifdef HAVE_SETUID +/*[clinic input] +os.setuid + + uid: uid_t + / + +Set the current process's user id. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setuid__doc__, +"setuid($module, uid, /)\n" +"--\n" +"\n" +"Set the current process\'s user id."); + +#define OS_SETUID_METHODDEF \ + {"setuid", (PyCFunction)os_setuid, METH_VARARGS, os_setuid__doc__}, + +static PyObject * +os_setuid_impl(PyModuleDef *module, uid_t uid); + +static PyObject * +os_setuid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + uid_t uid; + + if (!PyArg_ParseTuple(args, + "O&:setuid", + _Py_Uid_Converter, &uid)) + goto exit; + return_value = os_setuid_impl(module, uid); + +exit: + return return_value; +} + +static PyObject * +os_setuid_impl(PyModuleDef *module, uid_t uid) +/*[clinic end generated code: output=aea344bc22ccf400 input=c921a3285aa22256]*/ +{ + if (setuid(uid) < 0) + return posix_error(); + Py_RETURN_NONE; +} +#endif /* HAVE_SETUID */ + + +#ifdef HAVE_SETEUID +/*[clinic input] +os.seteuid + + euid: uid_t + / + +Set the current process's effective user id. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_seteuid__doc__, +"seteuid($module, euid, /)\n" +"--\n" +"\n" +"Set the current process\'s effective user id."); + +#define OS_SETEUID_METHODDEF \ + {"seteuid", (PyCFunction)os_seteuid, METH_VARARGS, os_seteuid__doc__}, + +static PyObject * +os_seteuid_impl(PyModuleDef *module, uid_t euid); + +static PyObject * +os_seteuid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + uid_t euid; + + if (!PyArg_ParseTuple(args, + "O&:seteuid", + _Py_Uid_Converter, &euid)) + goto exit; + return_value = os_seteuid_impl(module, euid); + +exit: + return return_value; +} + +static PyObject * +os_seteuid_impl(PyModuleDef *module, uid_t euid) +/*[clinic end generated code: output=6e824cce4f3b8a5d input=ba93d927e4781aa9]*/ +{ + if (seteuid(euid) < 0) + return posix_error(); + Py_RETURN_NONE; } #endif /* HAVE_SETEUID */ + #ifdef HAVE_SETEGID -PyDoc_STRVAR(posix_setegid__doc__, -"setegid(gid)\n\n\ -Set the current process's effective group id."); +/*[clinic input] +os.setegid + + egid: gid_t + / + +Set the current process's effective group id. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setegid__doc__, +"setegid($module, egid, /)\n" +"--\n" +"\n" +"Set the current process\'s effective group id."); + +#define OS_SETEGID_METHODDEF \ + {"setegid", (PyCFunction)os_setegid, METH_VARARGS, os_setegid__doc__}, + +static PyObject * +os_setegid_impl(PyModuleDef *module, gid_t egid); static PyObject * -posix_setegid (PyObject *self, PyObject *args) +os_setegid(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; gid_t egid; - if (!PyArg_ParseTuple(args, "O&:setegid", _Py_Gid_Converter, &egid)) - return NULL; - if (setegid(egid) < 0) { + + if (!PyArg_ParseTuple(args, + "O&:setegid", + _Py_Gid_Converter, &egid)) + goto exit; + return_value = os_setegid_impl(module, egid); + +exit: + return return_value; +} + +static PyObject * +os_setegid_impl(PyModuleDef *module, gid_t egid) +/*[clinic end generated code: output=80a32263a4d56a9c input=4080526d0ccd6ce3]*/ +{ + if (setegid(egid) < 0) return posix_error(); - } else { - Py_INCREF(Py_None); - return Py_None; - } + Py_RETURN_NONE; } #endif /* HAVE_SETEGID */ + #ifdef HAVE_SETREUID -PyDoc_STRVAR(posix_setreuid__doc__, -"setreuid(ruid, euid)\n\n\ -Set the current process's real and effective user ids."); +/*[clinic input] +os.setreuid + + ruid: uid_t + euid: uid_t + / + +Set the current process's real and effective user ids. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setreuid__doc__, +"setreuid($module, ruid, euid, /)\n" +"--\n" +"\n" +"Set the current process\'s real and effective user ids."); + +#define OS_SETREUID_METHODDEF \ + {"setreuid", (PyCFunction)os_setreuid, METH_VARARGS, os_setreuid__doc__}, + +static PyObject * +os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid); static PyObject * -posix_setreuid (PyObject *self, PyObject *args) +os_setreuid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + uid_t ruid; + uid_t euid; + + if (!PyArg_ParseTuple(args, + "O&O&:setreuid", + _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid)) + goto exit; + return_value = os_setreuid_impl(module, ruid, euid); + +exit: + return return_value; +} + +static PyObject * +os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid) +/*[clinic end generated code: output=d7f226f943dad739 input=0ca8978de663880c]*/ { - uid_t ruid, euid; - if (!PyArg_ParseTuple(args, "O&O&:setreuid", - _Py_Uid_Converter, &ruid, - _Py_Uid_Converter, &euid)) - return NULL; if (setreuid(ruid, euid) < 0) { return posix_error(); } else { @@ -6732,53 +9296,128 @@ posix_setreuid (PyObject *self, PyObject *args) } #endif /* HAVE_SETREUID */ + #ifdef HAVE_SETREGID -PyDoc_STRVAR(posix_setregid__doc__, -"setregid(rgid, egid)\n\n\ -Set the current process's real and effective group ids."); +/*[clinic input] +os.setregid + + rgid: gid_t + egid: gid_t + / + +Set the current process's real and effective group ids. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setregid__doc__, +"setregid($module, rgid, egid, /)\n" +"--\n" +"\n" +"Set the current process\'s real and effective group ids."); + +#define OS_SETREGID_METHODDEF \ + {"setregid", (PyCFunction)os_setregid, METH_VARARGS, os_setregid__doc__}, + +static PyObject * +os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid); static PyObject * -posix_setregid (PyObject *self, PyObject *args) +os_setregid(PyModuleDef *module, PyObject *args) { - gid_t rgid, egid; - if (!PyArg_ParseTuple(args, "O&O&:setregid", - _Py_Gid_Converter, &rgid, - _Py_Gid_Converter, &egid)) - return NULL; - if (setregid(rgid, egid) < 0) { + PyObject *return_value = NULL; + gid_t rgid; + gid_t egid; + + if (!PyArg_ParseTuple(args, + "O&O&:setregid", + _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid)) + goto exit; + return_value = os_setregid_impl(module, rgid, egid); + +exit: + return return_value; +} + +static PyObject * +os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid) +/*[clinic end generated code: output=a82d9ab70f8e6562 input=c59499f72846db78]*/ +{ + if (setregid(rgid, egid) < 0) return posix_error(); - } else { - Py_INCREF(Py_None); - return Py_None; - } + Py_RETURN_NONE; } #endif /* HAVE_SETREGID */ + #ifdef HAVE_SETGID -PyDoc_STRVAR(posix_setgid__doc__, -"setgid(gid)\n\n\ -Set the current process's group id."); +/*[clinic input] +os.setgid + gid: gid_t + / + +Set the current process's group id. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setgid__doc__, +"setgid($module, gid, /)\n" +"--\n" +"\n" +"Set the current process\'s group id."); + +#define OS_SETGID_METHODDEF \ + {"setgid", (PyCFunction)os_setgid, METH_VARARGS, os_setgid__doc__}, static PyObject * -posix_setgid(PyObject *self, PyObject *args) +os_setgid_impl(PyModuleDef *module, gid_t gid); + +static PyObject * +os_setgid(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; gid_t gid; - if (!PyArg_ParseTuple(args, "O&:setgid", _Py_Gid_Converter, &gid)) - return NULL; + + if (!PyArg_ParseTuple(args, + "O&:setgid", + _Py_Gid_Converter, &gid)) + goto exit; + return_value = os_setgid_impl(module, gid); + +exit: + return return_value; +} + +static PyObject * +os_setgid_impl(PyModuleDef *module, gid_t gid) +/*[clinic end generated code: output=08287886db435f23 input=27d30c4059045dc6]*/ +{ if (setgid(gid) < 0) return posix_error(); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } #endif /* HAVE_SETGID */ + #ifdef HAVE_SETGROUPS -PyDoc_STRVAR(posix_setgroups__doc__, -"setgroups(list)\n\n\ -Set the groups of the current process to list."); +/*[clinic input] +os.setgroups + + groups: object + / + +Set the groups of the current process to list. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setgroups__doc__, +"setgroups($module, groups, /)\n" +"--\n" +"\n" +"Set the groups of the current process to list."); + +#define OS_SETGROUPS_METHODDEF \ + {"setgroups", (PyCFunction)os_setgroups, METH_O, os_setgroups__doc__}, static PyObject * -posix_setgroups(PyObject *self, PyObject *groups) +os_setgroups(PyModuleDef *module, PyObject *groups) +/*[clinic end generated code: output=0b8de65d5b3cda94 input=fa742ca3daf85a7e]*/ { int i, len; gid_t grouplist[MAX_GROUPS]; @@ -6879,24 +9518,60 @@ wait_helper(pid_t pid, int status, struct rusage *ru) } #endif /* HAVE_WAIT3 || HAVE_WAIT4 */ + #ifdef HAVE_WAIT3 -PyDoc_STRVAR(posix_wait3__doc__, -"wait3(options) -> (pid, status, rusage)\n\n\ -Wait for completion of a child process."); +/*[clinic input] +os.wait3 + + options: int +Wait for completion of a child process. + +Returns a tuple of information about the child process: + (pid, status, rusage) +[clinic start generated code]*/ + +PyDoc_STRVAR(os_wait3__doc__, +"wait3($module, /, options)\n" +"--\n" +"\n" +"Wait for completion of a child process.\n" +"\n" +"Returns a tuple of information about the child process:\n" +" (pid, status, rusage)"); + +#define OS_WAIT3_METHODDEF \ + {"wait3", (PyCFunction)os_wait3, METH_VARARGS|METH_KEYWORDS, os_wait3__doc__}, + +static PyObject * +os_wait3_impl(PyModuleDef *module, int options); static PyObject * -posix_wait3(PyObject *self, PyObject *args) +os_wait3(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - pid_t pid; + PyObject *return_value = NULL; + static char *_keywords[] = {"options", NULL}; int options; - struct rusage ru; - WAIT_TYPE status; - WAIT_STATUS_INT(status) = 0; - if (!PyArg_ParseTuple(args, "i:wait3", &options)) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:wait3", _keywords, + &options)) + goto exit; + return_value = os_wait3_impl(module, options); - Py_BEGIN_ALLOW_THREADS +exit: + return return_value; +} + +static PyObject * +os_wait3_impl(PyModuleDef *module, int options) +/*[clinic end generated code: output=1f2a63b6a93cbb57 input=8ac4c56956b61710]*/ +{ + pid_t pid; + struct rusage ru; + WAIT_TYPE status; + WAIT_STATUS_INT(status) = 0; + + Py_BEGIN_ALLOW_THREADS pid = wait3(&status, options, &ru); Py_END_ALLOW_THREADS @@ -6904,23 +9579,62 @@ posix_wait3(PyObject *self, PyObject *args) } #endif /* HAVE_WAIT3 */ + #ifdef HAVE_WAIT4 -PyDoc_STRVAR(posix_wait4__doc__, -"wait4(pid, options) -> (pid, status, rusage)\n\n\ -Wait for completion of a given child process."); +/*[clinic input] + +os.wait4 + + pid: pid_t + options: int + +Wait for completion of a specific child process. + +Returns a tuple of information about the child process: + (pid, status, rusage) +[clinic start generated code]*/ + +PyDoc_STRVAR(os_wait4__doc__, +"wait4($module, /, pid, options)\n" +"--\n" +"\n" +"Wait for completion of a specific child process.\n" +"\n" +"Returns a tuple of information about the child process:\n" +" (pid, status, rusage)"); + +#define OS_WAIT4_METHODDEF \ + {"wait4", (PyCFunction)os_wait4, METH_VARARGS|METH_KEYWORDS, os_wait4__doc__}, static PyObject * -posix_wait4(PyObject *self, PyObject *args) +os_wait4_impl(PyModuleDef *module, pid_t pid, int options); + +static PyObject * +os_wait4(PyModuleDef *module, PyObject *args, PyObject *kwargs) { + PyObject *return_value = NULL; + static char *_keywords[] = {"pid", "options", NULL}; pid_t pid; int options; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "" _Py_PARSE_PID "i:wait4", _keywords, + &pid, &options)) + goto exit; + return_value = os_wait4_impl(module, pid, options); + +exit: + return return_value; +} + +static PyObject * +os_wait4_impl(PyModuleDef *module, pid_t pid, int options) +/*[clinic end generated code: output=20dfb05289d37dc6 input=d11deed0750600ba]*/ +{ struct rusage ru; WAIT_TYPE status; WAIT_STATUS_INT(status) = 0; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:wait4", &pid, &options)) - return NULL; - Py_BEGIN_ALLOW_THREADS pid = wait4(pid, &status, options, &ru); Py_END_ALLOW_THREADS @@ -6929,28 +9643,76 @@ posix_wait4(PyObject *self, PyObject *args) } #endif /* HAVE_WAIT4 */ + #if defined(HAVE_WAITID) && !defined(__APPLE__) -PyDoc_STRVAR(posix_waitid__doc__, -"waitid(idtype, id, options) -> waitid_result\n\n\ -Wait for the completion of one or more child processes.\n\n\ -idtype can be P_PID, P_PGID or P_ALL.\n\ -id specifies the pid to wait on.\n\ -options is constructed from the ORing of one or more of WEXITED, WSTOPPED\n\ -or WCONTINUED and additionally may be ORed with WNOHANG or WNOWAIT.\n\ -Returns either waitid_result or None if WNOHANG is specified and there are\n\ -no children in a waitable state."); +/*[clinic input] +os.waitid + + idtype: idtype_t + Must be one of be P_PID, P_PGID or P_ALL. + id: id_t + The id to wait on. + options: int + Constructed from the ORing of one or more of WEXITED, WSTOPPED + or WCONTINUED and additionally may be ORed with WNOHANG or WNOWAIT. + / + +Returns the result of waiting for a process or processes. + +Returns either waitid_result or None if WNOHANG is specified and there are +no children in a waitable state. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_waitid__doc__, +"waitid($module, idtype, id, options, /)\n" +"--\n" +"\n" +"Returns the result of waiting for a process or processes.\n" +"\n" +" idtype\n" +" Must be one of be P_PID, P_PGID or P_ALL.\n" +" id\n" +" The id to wait on.\n" +" options\n" +" Constructed from the ORing of one or more of WEXITED, WSTOPPED\n" +" or WCONTINUED and additionally may be ORed with WNOHANG or WNOWAIT.\n" +"\n" +"Returns either waitid_result or None if WNOHANG is specified and there are\n" +"no children in a waitable state."); + +#define OS_WAITID_METHODDEF \ + {"waitid", (PyCFunction)os_waitid, METH_VARARGS, os_waitid__doc__}, + +static PyObject * +os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options); static PyObject * -posix_waitid(PyObject *self, PyObject *args) +os_waitid(PyModuleDef *module, PyObject *args) { - PyObject *result; + PyObject *return_value = NULL; idtype_t idtype; id_t id; - int options, res; + int options; + + if (!PyArg_ParseTuple(args, + "i" _Py_PARSE_PID "i:waitid", + &idtype, &id, &options)) + goto exit; + return_value = os_waitid_impl(module, idtype, id, options); + +exit: + return return_value; +} + +static PyObject * +os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options) +/*[clinic end generated code: output=fb44bf97f01021b2 input=d8e7f76e052b7920]*/ +{ + PyObject *result; + int res; siginfo_t si; si.si_pid = 0; - if (!PyArg_ParseTuple(args, "i" _Py_PARSE_PID "i:waitid", &idtype, &id, &options)) - return NULL; + Py_BEGIN_ALLOW_THREADS res = waitid(idtype, id, &si, options); Py_END_ALLOW_THREADS @@ -6976,23 +9738,65 @@ posix_waitid(PyObject *self, PyObject *args) return result; } -#endif +#endif /* defined(HAVE_WAITID) && !defined(__APPLE__) */ + + +#if defined(HAVE_WAITPID) +/*[clinic input] +os.waitpid + pid: pid_t + options: int + / + +Wait for completion of a given child process. + +Returns a tuple of information regarding the child process: + (pid, status) + +The options argument is ignored on Windows. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_waitpid__doc__, +"waitpid($module, pid, options, /)\n" +"--\n" +"\n" +"Wait for completion of a given child process.\n" +"\n" +"Returns a tuple of information regarding the child process:\n" +" (pid, status)\n" +"\n" +"The options argument is ignored on Windows."); -#ifdef HAVE_WAITPID -PyDoc_STRVAR(posix_waitpid__doc__, -"waitpid(pid, options) -> (pid, status)\n\n\ -Wait for completion of a given child process."); +#define OS_WAITPID_METHODDEF \ + {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, static PyObject * -posix_waitpid(PyObject *self, PyObject *args) +os_waitpid_impl(PyModuleDef *module, pid_t pid, int options); + +static PyObject * +os_waitpid(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; int options; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "i:waitpid", + &pid, &options)) + goto exit; + return_value = os_waitpid_impl(module, pid, options); + +exit: + return return_value; +} + +static PyObject * +os_waitpid_impl(PyModuleDef *module, pid_t pid, int options) +/*[clinic end generated code: output=095a6b00af70b7ac input=0bf1666b8758fda3]*/ +{ WAIT_TYPE status; WAIT_STATUS_INT(status) = 0; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:waitpid", &pid, &options)) - return NULL; Py_BEGIN_ALLOW_THREADS pid = waitpid(pid, &status, options); Py_END_ALLOW_THREADS @@ -7001,22 +9805,62 @@ posix_waitpid(PyObject *self, PyObject *args) return Py_BuildValue("Ni", PyLong_FromPid(pid), WAIT_STATUS_INT(status)); } - #elif defined(HAVE_CWAIT) - /* MS C has a variant of waitpid() that's usable for most purposes. */ -PyDoc_STRVAR(posix_waitpid__doc__, -"waitpid(pid, options) -> (pid, status << 8)\n\n" -"Wait for completion of a given process. options is ignored on Windows."); +/*[clinic input] +os.waitpid + pid: Py_intptr_t + options: int + / + +Wait for completion of a given process. + +Returns a tuple of information regarding the process: + (pid, status << 8) + +The options argument is ignored on Windows. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_waitpid__doc__, +"waitpid($module, pid, options, /)\n" +"--\n" +"\n" +"Wait for completion of a given process.\n" +"\n" +"Returns a tuple of information regarding the process:\n" +" (pid, status << 8)\n" +"\n" +"The options argument is ignored on Windows."); + +#define OS_WAITPID_METHODDEF \ + {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, static PyObject * -posix_waitpid(PyObject *self, PyObject *args) +os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options); + +static PyObject * +os_waitpid(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; Py_intptr_t pid; - int status, options; + int options; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_INTPTR "i:waitpid", + &pid, &options)) + goto exit; + return_value = os_waitpid_impl(module, pid, options); + +exit: + return return_value; +} + +static PyObject * +os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options) +/*[clinic end generated code: output=c20b95b15ad44a3a input=444c8f51cca5b862]*/ +{ + int status; - if (!PyArg_ParseTuple(args, _Py_PARSE_INTPTR "i:waitpid", &pid, &options)) - return NULL; Py_BEGIN_ALLOW_THREADS pid = _cwait(&status, pid, options); Py_END_ALLOW_THREADS @@ -7026,15 +9870,43 @@ posix_waitpid(PyObject *self, PyObject *args) /* shift the status left a byte so this is more like the POSIX waitpid */ return Py_BuildValue(_Py_PARSE_INTPTR "i", pid, status << 8); } -#endif /* HAVE_WAITPID || HAVE_CWAIT */ +#endif + #ifdef HAVE_WAIT -PyDoc_STRVAR(posix_wait__doc__, -"wait() -> (pid, status)\n\n\ -Wait for completion of a child process."); +/*[clinic input] +os.wait + +Wait for completion of a child process. + +Returns a tuple of information about the child process: + (pid, status) +[clinic start generated code]*/ + +PyDoc_STRVAR(os_wait__doc__, +"wait($module, /)\n" +"--\n" +"\n" +"Wait for completion of a child process.\n" +"\n" +"Returns a tuple of information about the child process:\n" +" (pid, status)"); + +#define OS_WAIT_METHODDEF \ + {"wait", (PyCFunction)os_wait, METH_NOARGS, os_wait__doc__}, + +static PyObject * +os_wait_impl(PyModuleDef *module); + +static PyObject * +os_wait(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_wait_impl(module); +} static PyObject * -posix_wait(PyObject *self, PyObject *noargs) +os_wait_impl(PyModuleDef *module) +/*[clinic end generated code: output=2a83a9d164e7e6a8 input=03b0182d4a4700ce]*/ { pid_t pid; WAIT_TYPE status; @@ -7048,7 +9920,7 @@ posix_wait(PyObject *self, PyObject *noargs) return Py_BuildValue("Ni", PyLong_FromPid(pid), WAIT_STATUS_INT(status)); } -#endif +#endif /* HAVE_WAIT */ #if defined(HAVE_READLINK) || defined(MS_WINDOWS) @@ -7064,6 +9936,7 @@ dir_fd may not be implemented on your platform.\n\ #ifdef HAVE_READLINK +/* AC 3.5: merge win32 and not together */ static PyObject * posix_readlink(PyObject *self, PyObject *args, PyObject *kwargs) { @@ -7078,12 +9951,7 @@ posix_readlink(PyObject *self, PyObject *args, PyObject *kwargs) path.function_name = "readlink"; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:readlink", keywords, path_converter, &path, -#ifdef HAVE_READLINKAT - dir_fd_converter, &dir_fd -#else - dir_fd_unavailable, &dir_fd -#endif - )) + READLINKAT_DIR_FD_CONVERTER, &dir_fd)) return NULL; Py_BEGIN_ALLOW_THREADS @@ -7109,23 +9977,86 @@ exit: return return_value; } - #endif /* HAVE_READLINK */ +#if !defined(HAVE_READLINK) && defined(MS_WINDOWS) + +static PyObject * +win_readlink(PyObject *self, PyObject *args, PyObject *kwargs) +{ + wchar_t *path; + DWORD n_bytes_returned; + DWORD io_result; + PyObject *po, *result; + int dir_fd; + HANDLE reparse_point_handle; + + char target_buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; + REPARSE_DATA_BUFFER *rdb = (REPARSE_DATA_BUFFER *)target_buffer; + wchar_t *print_name; + + static char *keywords[] = {"path", "dir_fd", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "U|$O&:readlink", keywords, + &po, + dir_fd_unavailable, &dir_fd + )) + return NULL; + + path = PyUnicode_AsUnicode(po); + if (path == NULL) + return NULL; + + /* First get a handle to the reparse point */ + Py_BEGIN_ALLOW_THREADS + reparse_point_handle = CreateFileW( + path, + 0, + 0, + 0, + OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT|FILE_FLAG_BACKUP_SEMANTICS, + 0); + Py_END_ALLOW_THREADS + + if (reparse_point_handle==INVALID_HANDLE_VALUE) + return win32_error_object("readlink", po); + + Py_BEGIN_ALLOW_THREADS + /* New call DeviceIoControl to read the reparse point */ + io_result = DeviceIoControl( + reparse_point_handle, + FSCTL_GET_REPARSE_POINT, + 0, 0, /* in buffer */ + target_buffer, sizeof(target_buffer), + &n_bytes_returned, + 0 /* we're not using OVERLAPPED_IO */ + ); + CloseHandle(reparse_point_handle); + Py_END_ALLOW_THREADS + + if (io_result==0) + return win32_error_object("readlink", po); + + if (rdb->ReparseTag != IO_REPARSE_TAG_SYMLINK) + { + PyErr_SetString(PyExc_ValueError, + "not a symbolic link"); + return NULL; + } + print_name = rdb->SymbolicLinkReparseBuffer.PathBuffer + + rdb->SymbolicLinkReparseBuffer.PrintNameOffset; + + result = PyUnicode_FromWideChar(print_name, + rdb->SymbolicLinkReparseBuffer.PrintNameLength/2); + return result; +} + +#endif /* !defined(HAVE_READLINK) && defined(MS_WINDOWS) */ + + #ifdef HAVE_SYMLINK -PyDoc_STRVAR(posix_symlink__doc__, -"symlink(src, dst, target_is_directory=False, *, dir_fd=None)\n\n\ -Create a symbolic link pointing to src named dst.\n\n\ -target_is_directory is required on Windows if the target is to be\n\ - interpreted as a directory. (On Windows, symlink requires\n\ - Windows 6.0 or greater, and raises a NotImplementedError otherwise.)\n\ - target_is_directory is ignored on non-Windows platforms.\n\ -\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -dir_fd may not be implemented on your platform.\n\ - If it is unavailable, using it will raise a NotImplementedError."); #if defined(MS_WINDOWS) @@ -7271,189 +10202,148 @@ _check_dirA(char *src, char *dest) && src_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ); } - #endif -static PyObject * -posix_symlink(PyObject *self, PyObject *args, PyObject *kwargs) -{ - path_t src; - path_t dst; - int dir_fd = DEFAULT_DIR_FD; - int target_is_directory = 0; - static char *keywords[] = {"src", "dst", "target_is_directory", - "dir_fd", NULL}; - PyObject *return_value; -#ifdef MS_WINDOWS - DWORD result; -#else - int result; -#endif - memset(&src, 0, sizeof(src)); - src.function_name = "symlink"; - src.argument_name = "src"; - memset(&dst, 0, sizeof(dst)); - dst.function_name = "symlink"; - dst.argument_name = "dst"; +/*[clinic input] +os.symlink + src: path_t + dst: path_t + target_is_directory: bool = False + * + dir_fd: dir_fd(requires='symlinkat')=None -#ifdef MS_WINDOWS - if (!check_CreateSymbolicLink()) { - PyErr_SetString(PyExc_NotImplementedError, - "CreateSymbolicLink functions not found"); - return NULL; - } - if (!win32_can_symlink) { - PyErr_SetString(PyExc_OSError, "symbolic link privilege not held"); - return NULL; - } -#endif +# "symlink(src, dst, target_is_directory=False, *, dir_fd=None)\n\n\ - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|i$O&:symlink", - keywords, - path_converter, &src, - path_converter, &dst, - &target_is_directory, -#ifdef HAVE_SYMLINKAT - dir_fd_converter, &dir_fd +Create a symbolic link pointing to src named dst. + +target_is_directory is required on Windows if the target is to be + interpreted as a directory. (On Windows, symlink requires + Windows 6.0 or greater, and raises a NotImplementedError otherwise.) + target_is_directory is ignored on non-Windows platforms. + +If dir_fd is not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that directory. +dir_fd may not be implemented on your platform. + If it is unavailable, using it will raise a NotImplementedError. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_symlink__doc__, +"symlink($module, /, src, dst, target_is_directory=False, *, dir_fd=None)\n" +"--\n" +"\n" +"Create a symbolic link pointing to src named dst.\n" +"\n" +"target_is_directory is required on Windows if the target is to be\n" +" interpreted as a directory. (On Windows, symlink requires\n" +" Windows 6.0 or greater, and raises a NotImplementedError otherwise.)\n" +" target_is_directory is ignored on non-Windows platforms.\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_SYMLINK_METHODDEF \ + {"symlink", (PyCFunction)os_symlink, METH_VARARGS|METH_KEYWORDS, os_symlink__doc__}, + +static PyObject * +os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd); + +static PyObject * +os_symlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"src", "dst", "target_is_directory", "dir_fd", NULL}; + path_t src = PATH_T_INITIALIZE("symlink", "src", 0, 0); + path_t dst = PATH_T_INITIALIZE("symlink", "dst", 0, 0); + int target_is_directory = 0; + int dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|p$O&:symlink", _keywords, + path_converter, &src, path_converter, &dst, &target_is_directory, SYMLINKAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_symlink_impl(module, &src, &dst, target_is_directory, dir_fd); + +exit: + /* Cleanup for src */ + path_cleanup(&src); + /* Cleanup for dst */ + path_cleanup(&dst); + + return return_value; +} + +static PyObject * +os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd) +/*[clinic end generated code: output=1a31e6d88aafe9b6 input=e820ec4472547bc3]*/ +{ +#ifdef MS_WINDOWS + DWORD result; #else - dir_fd_unavailable, &dir_fd + int result; #endif - )) + +#ifdef MS_WINDOWS + if (!check_CreateSymbolicLink()) { + PyErr_SetString(PyExc_NotImplementedError, + "CreateSymbolicLink functions not found"); return NULL; + } + if (!win32_can_symlink) { + PyErr_SetString(PyExc_OSError, "symbolic link privilege not held"); + return NULL; + } +#endif - if ((src.narrow && dst.wide) || (src.wide && dst.narrow)) { + if ((src->narrow && dst->wide) || (src->wide && dst->narrow)) { PyErr_SetString(PyExc_ValueError, "symlink: src and dst must be the same type"); - return_value = NULL; - goto exit; + return NULL; } #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (dst.wide) { + if (dst->wide) { /* if src is a directory, ensure target_is_directory==1 */ - target_is_directory |= _check_dirW(src.wide, dst.wide); - result = Py_CreateSymbolicLinkW(dst.wide, src.wide, + target_is_directory |= _check_dirW(src->wide, dst->wide); + result = Py_CreateSymbolicLinkW(dst->wide, src->wide, target_is_directory); } else { /* if src is a directory, ensure target_is_directory==1 */ - target_is_directory |= _check_dirA(src.narrow, dst.narrow); - result = Py_CreateSymbolicLinkA(dst.narrow, src.narrow, + target_is_directory |= _check_dirA(src->narrow, dst->narrow); + result = Py_CreateSymbolicLinkA(dst->narrow, src->narrow, target_is_directory); } Py_END_ALLOW_THREADS - if (!result) { - return_value = path_error2(&src, &dst); - goto exit; - } + if (!result) + return path_error2(src, dst); #else Py_BEGIN_ALLOW_THREADS #if HAVE_SYMLINKAT if (dir_fd != DEFAULT_DIR_FD) - result = symlinkat(src.narrow, dir_fd, dst.narrow); + result = symlinkat(src->narrow, dir_fd, dst->narrow); else #endif - result = symlink(src.narrow, dst.narrow); + result = symlink(src->narrow, dst->narrow); Py_END_ALLOW_THREADS - if (result) { - return_value = path_error2(&src, &dst); - goto exit; - } + if (result) + return path_error2(src, dst); #endif - return_value = Py_None; - Py_INCREF(Py_None); - goto exit; /* silence "unused label" warning */ -exit: - path_cleanup(&src); - path_cleanup(&dst); - return return_value; + Py_RETURN_NONE; } - #endif /* HAVE_SYMLINK */ -#if !defined(HAVE_READLINK) && defined(MS_WINDOWS) - -static PyObject * -win_readlink(PyObject *self, PyObject *args, PyObject *kwargs) -{ - wchar_t *path; - DWORD n_bytes_returned; - DWORD io_result; - PyObject *po, *result; - int dir_fd; - HANDLE reparse_point_handle; - - char target_buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; - REPARSE_DATA_BUFFER *rdb = (REPARSE_DATA_BUFFER *)target_buffer; - wchar_t *print_name; - - static char *keywords[] = {"path", "dir_fd", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "U|$O&:readlink", keywords, - &po, - dir_fd_unavailable, &dir_fd - )) - return NULL; - - path = PyUnicode_AsUnicode(po); - if (path == NULL) - return NULL; - - /* First get a handle to the reparse point */ - Py_BEGIN_ALLOW_THREADS - reparse_point_handle = CreateFileW( - path, - 0, - 0, - 0, - OPEN_EXISTING, - FILE_FLAG_OPEN_REPARSE_POINT|FILE_FLAG_BACKUP_SEMANTICS, - 0); - Py_END_ALLOW_THREADS - - if (reparse_point_handle==INVALID_HANDLE_VALUE) - return win32_error_object("readlink", po); - - Py_BEGIN_ALLOW_THREADS - /* New call DeviceIoControl to read the reparse point */ - io_result = DeviceIoControl( - reparse_point_handle, - FSCTL_GET_REPARSE_POINT, - 0, 0, /* in buffer */ - target_buffer, sizeof(target_buffer), - &n_bytes_returned, - 0 /* we're not using OVERLAPPED_IO */ - ); - CloseHandle(reparse_point_handle); - Py_END_ALLOW_THREADS - - if (io_result==0) - return win32_error_object("readlink", po); - - if (rdb->ReparseTag != IO_REPARSE_TAG_SYMLINK) - { - PyErr_SetString(PyExc_ValueError, - "not a symbolic link"); - return NULL; - } - print_name = rdb->SymbolicLinkReparseBuffer.PathBuffer + - rdb->SymbolicLinkReparseBuffer.PrintNameOffset; - - result = PyUnicode_FromWideChar(print_name, - rdb->SymbolicLinkReparseBuffer.PrintNameLength/2); - return result; -} - -#endif /* !defined(HAVE_READLINK) && defined(MS_WINDOWS) */ static PyStructSequence_Field times_result_fields[] = { @@ -7519,15 +10409,48 @@ build_times_result(double user, double system, return value; } -PyDoc_STRVAR(posix_times__doc__, -"times() -> times_result\n\n\ -Return an object containing floating point numbers indicating process\n\ -times. The object behaves like a named tuple with these fields:\n\ - (utime, stime, cutime, cstime, elapsed_time)"); -#if defined(MS_WINDOWS) +#ifndef MS_WINDOWS +#define NEED_TICKS_PER_SECOND +static long ticks_per_second = -1; +#endif /* MS_WINDOWS */ + +/*[clinic input] +os.times + +Return a collection containing process timing information. + +The object returned behaves like a named tuple with these fields: + (utime, stime, cutime, cstime, elapsed_time) +All fields are floating point numbers. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_times__doc__, +"times($module, /)\n" +"--\n" +"\n" +"Return a collection containing process timing information.\n" +"\n" +"The object returned behaves like a named tuple with these fields:\n" +" (utime, stime, cutime, cstime, elapsed_time)\n" +"All fields are floating point numbers."); + +#define OS_TIMES_METHODDEF \ + {"times", (PyCFunction)os_times, METH_NOARGS, os_times__doc__}, + +static PyObject * +os_times_impl(PyModuleDef *module); + +static PyObject * +os_times(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_times_impl(module); +} + static PyObject * -posix_times(PyObject *self, PyObject *noargs) +os_times_impl(PyModuleDef *module) +/*[clinic end generated code: output=b86896d031a9b768 input=2bf9df3d6ab2e48b]*/ +#ifdef MS_WINDOWS { FILETIME create, exit, kernel, user; HANDLE hProc; @@ -7547,12 +10470,10 @@ posix_times(PyObject *self, PyObject *noargs) (double)0, (double)0); } -#else /* Not Windows */ -#define NEED_TICKS_PER_SECOND -static long ticks_per_second = -1; -static PyObject * -posix_times(PyObject *self, PyObject *noargs) +#else /* MS_WINDOWS */ { + + struct tms t; clock_t c; errno = 0; @@ -7566,23 +10487,53 @@ posix_times(PyObject *self, PyObject *noargs) (double)t.tms_cstime / ticks_per_second, (double)c / ticks_per_second); } -#endif - +#endif /* MS_WINDOWS */ #endif /* HAVE_TIMES */ #ifdef HAVE_GETSID -PyDoc_STRVAR(posix_getsid__doc__, -"getsid(pid) -> sid\n\n\ -Call the system call getsid()."); +/*[clinic input] +os.getsid + + pid: pid_t + / + +Call the system call getsid(pid) and return the result. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getsid__doc__, +"getsid($module, pid, /)\n" +"--\n" +"\n" +"Call the system call getsid(pid) and return the result."); + +#define OS_GETSID_METHODDEF \ + {"getsid", (PyCFunction)os_getsid, METH_VARARGS, os_getsid__doc__}, + +static PyObject * +os_getsid_impl(PyModuleDef *module, pid_t pid); static PyObject * -posix_getsid(PyObject *self, PyObject *args) +os_getsid(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID ":getsid", + &pid)) + goto exit; + return_value = os_getsid_impl(module, pid); + +exit: + return return_value; +} + +static PyObject * +os_getsid_impl(PyModuleDef *module, pid_t pid) +/*[clinic end generated code: output=ea8390f395f4e0e1 input=eeb2b923a30ce04e]*/ +{ int sid; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":getsid", &pid)) - return NULL; sid = getsid(pid); if (sid < 0) return posix_error(); @@ -7592,76 +10543,189 @@ posix_getsid(PyObject *self, PyObject *args) #ifdef HAVE_SETSID -PyDoc_STRVAR(posix_setsid__doc__, -"setsid()\n\n\ -Call the system call setsid()."); +/*[clinic input] +os.setsid + +Call the system call setsid(). +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setsid__doc__, +"setsid($module, /)\n" +"--\n" +"\n" +"Call the system call setsid()."); + +#define OS_SETSID_METHODDEF \ + {"setsid", (PyCFunction)os_setsid, METH_NOARGS, os_setsid__doc__}, + +static PyObject * +os_setsid_impl(PyModuleDef *module); + +static PyObject * +os_setsid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_setsid_impl(module); +} static PyObject * -posix_setsid(PyObject *self, PyObject *noargs) +os_setsid_impl(PyModuleDef *module) +/*[clinic end generated code: output=2a9a1435d8d764d5 input=5fff45858e2f0776]*/ { if (setsid() < 0) return posix_error(); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } #endif /* HAVE_SETSID */ + #ifdef HAVE_SETPGID -PyDoc_STRVAR(posix_setpgid__doc__, -"setpgid(pid, pgrp)\n\n\ -Call the system call setpgid()."); +/*[clinic input] +os.setpgid + + pid: pid_t + pgrp: pid_t + / + +Call the system call setpgid(pid, pgrp). +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setpgid__doc__, +"setpgid($module, pid, pgrp, /)\n" +"--\n" +"\n" +"Call the system call setpgid(pid, pgrp)."); + +#define OS_SETPGID_METHODDEF \ + {"setpgid", (PyCFunction)os_setpgid, METH_VARARGS, os_setpgid__doc__}, + +static PyObject * +os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp); static PyObject * -posix_setpgid(PyObject *self, PyObject *args) +os_setpgid(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; pid_t pid; - int pgrp; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:setpgid", &pid, &pgrp)) - return NULL; + pid_t pgrp; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "" _Py_PARSE_PID ":setpgid", + &pid, &pgrp)) + goto exit; + return_value = os_setpgid_impl(module, pid, pgrp); + +exit: + return return_value; +} + +static PyObject * +os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp) +/*[clinic end generated code: output=7ad79b725f890e1f input=fceb395eca572e1a]*/ +{ if (setpgid(pid, pgrp) < 0) return posix_error(); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } #endif /* HAVE_SETPGID */ #ifdef HAVE_TCGETPGRP -PyDoc_STRVAR(posix_tcgetpgrp__doc__, -"tcgetpgrp(fd) -> pgid\n\n\ -Return the process group associated with the terminal given by a fd."); +/*[clinic input] +os.tcgetpgrp -static PyObject * -posix_tcgetpgrp(PyObject *self, PyObject *args) -{ - int fd; - pid_t pgid; - if (!PyArg_ParseTuple(args, "i:tcgetpgrp", &fd)) - return NULL; - pgid = tcgetpgrp(fd); - if (pgid < 0) - return posix_error(); - return PyLong_FromPid(pgid); -} -#endif /* HAVE_TCGETPGRP */ + fd: int + / +Return the process group associated with the terminal specified by fd. +[clinic start generated code]*/ -#ifdef HAVE_TCSETPGRP -PyDoc_STRVAR(posix_tcsetpgrp__doc__, -"tcsetpgrp(fd, pgid)\n\n\ -Set the process group associated with the terminal given by a fd."); +PyDoc_STRVAR(os_tcgetpgrp__doc__, +"tcgetpgrp($module, fd, /)\n" +"--\n" +"\n" +"Return the process group associated with the terminal specified by fd."); + +#define OS_TCGETPGRP_METHODDEF \ + {"tcgetpgrp", (PyCFunction)os_tcgetpgrp, METH_VARARGS, os_tcgetpgrp__doc__}, + +static PyObject * +os_tcgetpgrp_impl(PyModuleDef *module, int fd); static PyObject * -posix_tcsetpgrp(PyObject *self, PyObject *args) +os_tcgetpgrp(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; + int fd; + + if (!PyArg_ParseTuple(args, + "i:tcgetpgrp", + &fd)) + goto exit; + return_value = os_tcgetpgrp_impl(module, fd); + +exit: + return return_value; +} + +static PyObject * +os_tcgetpgrp_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=abcf52ed4c8d22cb input=7f6c18eac10ada86]*/ +{ + pid_t pgid = tcgetpgrp(fd); + if (pgid < 0) + return posix_error(); + return PyLong_FromPid(pgid); +} +#endif /* HAVE_TCGETPGRP */ + + +#ifdef HAVE_TCSETPGRP +/*[clinic input] +os.tcsetpgrp + + fd: int + pgid: pid_t + / + +Set the process group associated with the terminal specified by fd. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_tcsetpgrp__doc__, +"tcsetpgrp($module, fd, pgid, /)\n" +"--\n" +"\n" +"Set the process group associated with the terminal specified by fd."); + +#define OS_TCSETPGRP_METHODDEF \ + {"tcsetpgrp", (PyCFunction)os_tcsetpgrp, METH_VARARGS, os_tcsetpgrp__doc__}, + +static PyObject * +os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid); + +static PyObject * +os_tcsetpgrp(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; int fd; pid_t pgid; - if (!PyArg_ParseTuple(args, "i" _Py_PARSE_PID ":tcsetpgrp", &fd, &pgid)) - return NULL; + + if (!PyArg_ParseTuple(args, + "i" _Py_PARSE_PID ":tcsetpgrp", + &fd, &pgid)) + goto exit; + return_value = os_tcsetpgrp_impl(module, fd, pgid); + +exit: + return return_value; +} + +static PyObject * +os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid) +/*[clinic end generated code: output=76f9bb8fd00f20f5 input=5bdc997c6a619020]*/ +{ if (tcsetpgrp(fd, pgid) < 0) return posix_error(); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } #endif /* HAVE_TCSETPGRP */ @@ -7671,44 +10735,81 @@ posix_tcsetpgrp(PyObject *self, PyObject *args) extern int _Py_open_cloexec_works; #endif -PyDoc_STRVAR(posix_open__doc__, -"open(path, flags, mode=0o777, *, dir_fd=None)\n\n\ -Open a file for low level IO. Returns a file handle (integer).\n\ -\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -dir_fd may not be implemented on your platform.\n\ - If it is unavailable, using it will raise a NotImplementedError."); + +/*[clinic input] +os.open -> int + path: path_t + flags: int + mode: int = 0o777 + * + dir_fd: dir_fd(requires='openat') = None + +# "open(path, flags, mode=0o777, *, dir_fd=None)\n\n\ + +Open a file for low level IO. Returns a file descriptor (integer). + +If dir_fd is not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that directory. +dir_fd may not be implemented on your platform. + If it is unavailable, using it will raise a NotImplementedError. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_open__doc__, +"open($module, /, path, flags, mode=511, *, dir_fd=None)\n" +"--\n" +"\n" +"Open a file for low level IO. Returns a file descriptor (integer).\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_OPEN_METHODDEF \ + {"open", (PyCFunction)os_open, METH_VARARGS|METH_KEYWORDS, os_open__doc__}, + +static int +os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd); static PyObject * -posix_open(PyObject *self, PyObject *args, PyObject *kwargs) +os_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "flags", "mode", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("open", "path", 0, 0); int flags; - int mode = 0777; + int mode = 511; int dir_fd = DEFAULT_DIR_FD; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&i|i$O&:open", _keywords, + path_converter, &path, &flags, &mode, OPENAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + _return_value = os_open_impl(module, &path, flags, mode, dir_fd); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static int +os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd) +/*[clinic end generated code: output=05b68fc4ed5e29c9 input=ad8623b29acd2934]*/ +{ int fd; - PyObject *return_value = NULL; - static char *keywords[] = {"path", "flags", "mode", "dir_fd", NULL}; + #ifdef O_CLOEXEC int *atomic_flag_works = &_Py_open_cloexec_works; #elif !defined(MS_WINDOWS) int *atomic_flag_works = NULL; #endif - memset(&path, 0, sizeof(path)); - path.function_name = "open"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|i$O&:open", keywords, - path_converter, &path, - &flags, &mode, -#ifdef HAVE_OPENAT - dir_fd_converter, &dir_fd -#else - dir_fd_unavailable, &dir_fd -#endif - )) - return NULL; - #ifdef MS_WINDOWS flags |= O_NOINHERIT; #elif defined(O_CLOEXEC) @@ -7717,51 +10818,76 @@ posix_open(PyObject *self, PyObject *args, PyObject *kwargs) Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - if (path.wide) - fd = _wopen(path.wide, flags, mode); + if (path->wide) + fd = _wopen(path->wide, flags, mode); else #endif #ifdef HAVE_OPENAT if (dir_fd != DEFAULT_DIR_FD) - fd = openat(dir_fd, path.narrow, flags, mode); + fd = openat(dir_fd, path->narrow, flags, mode); else #endif - fd = open(path.narrow, flags, mode); + fd = open(path->narrow, flags, mode); Py_END_ALLOW_THREADS if (fd == -1) { - PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path.object); - goto exit; + PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object); + return -1; } #ifndef MS_WINDOWS if (_Py_set_inheritable(fd, 0, atomic_flag_works) < 0) { close(fd); - goto exit; + return -1; } #endif - return_value = PyLong_FromLong((long)fd); + return fd; +} + + +/*[clinic input] +os.close + + fd: int + +Close a file descriptor. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_close__doc__, +"close($module, /, fd)\n" +"--\n" +"\n" +"Close a file descriptor."); + +#define OS_CLOSE_METHODDEF \ + {"close", (PyCFunction)os_close, METH_VARARGS|METH_KEYWORDS, os_close__doc__}, + +static PyObject * +os_close_impl(PyModuleDef *module, int fd); + +static PyObject * +os_close(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; + int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:close", _keywords, + &fd)) + goto exit; + return_value = os_close_impl(module, fd); exit: - path_cleanup(&path); return return_value; } -PyDoc_STRVAR(posix_close__doc__, -"close(fd)\n\n\ -Close a file descriptor (for low level IO)."); - -/* -The underscore at end of function name avoids a name clash with the libc -function posix_close. -*/ static PyObject * -posix_close_(PyObject *self, PyObject *args) +os_close_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=927004e29ad55808 input=2bc42451ca5c3223]*/ { - int fd, res; - if (!PyArg_ParseTuple(args, "i:close", &fd)) - return NULL; + int res; if (!_PyVerify_fd(fd)) return posix_error(); Py_BEGIN_ALLOW_THREADS @@ -7769,23 +10895,56 @@ posix_close_(PyObject *self, PyObject *args) Py_END_ALLOW_THREADS if (res < 0) return posix_error(); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } -PyDoc_STRVAR(posix_closerange__doc__, -"closerange(fd_low, fd_high)\n\n\ -Closes all file descriptors in [fd_low, fd_high), ignoring errors."); +/*[clinic input] +os.closerange + + fd_low: int + fd_high: int + / + +Closes all file descriptors in [fd_low, fd_high), ignoring errors. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_closerange__doc__, +"closerange($module, fd_low, fd_high, /)\n" +"--\n" +"\n" +"Closes all file descriptors in [fd_low, fd_high), ignoring errors."); + +#define OS_CLOSERANGE_METHODDEF \ + {"closerange", (PyCFunction)os_closerange, METH_VARARGS, os_closerange__doc__}, + +static PyObject * +os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high); static PyObject * -posix_closerange(PyObject *self, PyObject *args) +os_closerange(PyModuleDef *module, PyObject *args) { - int fd_from, fd_to, i; - if (!PyArg_ParseTuple(args, "ii:closerange", &fd_from, &fd_to)) - return NULL; + PyObject *return_value = NULL; + int fd_low; + int fd_high; + + if (!PyArg_ParseTuple(args, + "ii:closerange", + &fd_low, &fd_high)) + goto exit; + return_value = os_closerange_impl(module, fd_low, fd_high); + +exit: + return return_value; +} + +static PyObject * +os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high) +/*[clinic end generated code: output=0a929ece386811c3 input=5855a3d053ebd4ec]*/ +{ + int i; Py_BEGIN_ALLOW_THREADS - for (i = fd_from; i < fd_to; i++) + for (i = fd_low; i < fd_high; i++) if (_PyVerify_fd(i)) close(i); Py_END_ALLOW_THREADS @@ -7793,36 +10952,99 @@ posix_closerange(PyObject *self, PyObject *args) } -PyDoc_STRVAR(posix_dup__doc__, -"dup(fd) -> fd2\n\n\ -Return a duplicate of a file descriptor."); +/*[clinic input] +os.dup -> int + + fd: int + / + +Return a duplicate of a file descriptor. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_dup__doc__, +"dup($module, fd, /)\n" +"--\n" +"\n" +"Return a duplicate of a file descriptor."); + +#define OS_DUP_METHODDEF \ + {"dup", (PyCFunction)os_dup, METH_VARARGS, os_dup__doc__}, + +static int +os_dup_impl(PyModuleDef *module, int fd); static PyObject * -posix_dup(PyObject *self, PyObject *args) +os_dup(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; int fd; + int _return_value; - if (!PyArg_ParseTuple(args, "i:dup", &fd)) - return NULL; + if (!PyArg_ParseTuple(args, + "i:dup", + &fd)) + goto exit; + _return_value = os_dup_impl(module, fd); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); - fd = _Py_dup(fd); - if (fd == -1) - return NULL; +exit: + return return_value; +} - return PyLong_FromLong((long)fd); +static int +os_dup_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=75943e057b25e1bd input=6f10f7ea97f7852a]*/ +{ + return _Py_dup(fd); } -PyDoc_STRVAR(posix_dup2__doc__, -"dup2(old_fd, new_fd)\n\n\ -Duplicate file descriptor."); +/*[clinic input] +os.dup2 + fd: int + fd2: int + inheritable: bool=True + +Duplicate file descriptor. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_dup2__doc__, +"dup2($module, /, fd, fd2, inheritable=True)\n" +"--\n" +"\n" +"Duplicate file descriptor."); + +#define OS_DUP2_METHODDEF \ + {"dup2", (PyCFunction)os_dup2, METH_VARARGS|METH_KEYWORDS, os_dup2__doc__}, + +static PyObject * +os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable); static PyObject * -posix_dup2(PyObject *self, PyObject *args, PyObject *kwargs) +os_dup2(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - static char *keywords[] = {"fd", "fd2", "inheritable", NULL}; - int fd, fd2; + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", "fd2", "inheritable", NULL}; + int fd; + int fd2; int inheritable = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "ii|p:dup2", _keywords, + &fd, &fd2, &inheritable)) + goto exit; + return_value = os_dup2_impl(module, fd, fd2, inheritable); + +exit: + return return_value; +} + +static PyObject * +os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable) +/*[clinic end generated code: output=531e482dd11a99a0 input=76e96f511be0352f]*/ +{ int res; #if defined(HAVE_DUP3) && \ !(defined(HAVE_FCNTL_H) && defined(F_DUP2FD_CLOEXEC)) @@ -7830,10 +11052,6 @@ posix_dup2(PyObject *self, PyObject *args, PyObject *kwargs) int dup3_works = -1; #endif - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii|i:dup2", keywords, - &fd, &fd2, &inheritable)) - return NULL; - if (!_PyVerify_fd_dup2(fd, fd2)) return posix_error(); @@ -7894,30 +11112,71 @@ posix_dup2(PyObject *self, PyObject *args, PyObject *kwargs) #endif - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } + #ifdef HAVE_LOCKF -PyDoc_STRVAR(posix_lockf__doc__, -"lockf(fd, cmd, len)\n\n\ -Apply, test or remove a POSIX lock on an open file descriptor.\n\n\ -fd is an open file descriptor.\n\ -cmd specifies the command to use - one of F_LOCK, F_TLOCK, F_ULOCK or\n\ -F_TEST.\n\ -len specifies the section of the file to lock."); +/*[clinic input] +os.lockf + + fd: int + An open file descriptor. + command: int + One of F_LOCK, F_TLOCK, F_ULOCK or F_TEST. + length: Py_off_t + The number of bytes to lock, starting at the current position. + / + +Apply, test or remove a POSIX lock on an open file descriptor. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_lockf__doc__, +"lockf($module, fd, command, length, /)\n" +"--\n" +"\n" +"Apply, test or remove a POSIX lock on an open file descriptor.\n" +"\n" +" fd\n" +" An open file descriptor.\n" +" command\n" +" One of F_LOCK, F_TLOCK, F_ULOCK or F_TEST.\n" +" length\n" +" The number of bytes to lock, starting at the current position."); + +#define OS_LOCKF_METHODDEF \ + {"lockf", (PyCFunction)os_lockf, METH_VARARGS, os_lockf__doc__}, + +static PyObject * +os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length); static PyObject * -posix_lockf(PyObject *self, PyObject *args) +os_lockf(PyModuleDef *module, PyObject *args) { - int fd, cmd, res; - off_t len; - if (!PyArg_ParseTuple(args, "iiO&:lockf", - &fd, &cmd, _parse_off_t, &len)) - return NULL; + PyObject *return_value = NULL; + int fd; + int command; + Py_off_t length; + + if (!PyArg_ParseTuple(args, + "iiO&:lockf", + &fd, &command, Py_off_t_converter, &length)) + goto exit; + return_value = os_lockf_impl(module, fd, command, length); + +exit: + return return_value; +} + +static PyObject * +os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length) +/*[clinic end generated code: output=1b28346ac7335c0f input=65da41d2106e9b79]*/ +{ + int res; Py_BEGIN_ALLOW_THREADS - res = lockf(fd, cmd, len); + res = lockf(fd, command, length); Py_END_ALLOW_THREADS if (res < 0) @@ -7925,102 +11184,175 @@ posix_lockf(PyObject *self, PyObject *args) Py_RETURN_NONE; } -#endif +#endif /* HAVE_LOCKF */ -PyDoc_STRVAR(posix_lseek__doc__, -"lseek(fd, pos, how) -> newpos\n\n\ -Set the current position of a file descriptor.\n\ -Return the new cursor position in bytes, starting from the beginning."); +/*[clinic input] +os.lseek -> Py_off_t -static PyObject * -posix_lseek(PyObject *self, PyObject *args) -{ - int fd, how; -#ifdef MS_WINDOWS - PY_LONG_LONG pos, res; -#else - off_t pos, res; -#endif - PyObject *posobj; - if (!PyArg_ParseTuple(args, "iOi:lseek", &fd, &posobj, &how)) - return NULL; -#ifdef SEEK_SET - /* Turn 0, 1, 2 into SEEK_{SET,CUR,END} */ - switch (how) { - case 0: how = SEEK_SET; break; - case 1: how = SEEK_CUR; break; - case 2: how = SEEK_END; break; - } -#endif /* SEEK_END */ + fd: int + position: Py_off_t + how: int + / -#if !defined(HAVE_LARGEFILE_SUPPORT) - pos = PyLong_AsLong(posobj); -#else - pos = PyLong_AsLongLong(posobj); -#endif - if (PyErr_Occurred()) - return NULL; +Set the position of a file descriptor. Return the new position. - if (!_PyVerify_fd(fd)) - return posix_error(); +Return the new cursor position in number of bytes +relative to the beginning of the file. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_lseek__doc__, +"lseek($module, fd, position, how, /)\n" +"--\n" +"\n" +"Set the position of a file descriptor. Return the new position.\n" +"\n" +"Return the new cursor position in number of bytes\n" +"relative to the beginning of the file."); + +#define OS_LSEEK_METHODDEF \ + {"lseek", (PyCFunction)os_lseek, METH_VARARGS, os_lseek__doc__}, + +static Py_off_t +os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how); + +static PyObject * +os_lseek(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + Py_off_t position; + int how; + Py_off_t _return_value; + + if (!PyArg_ParseTuple(args, + "iO&i:lseek", + &fd, Py_off_t_converter, &position, &how)) + goto exit; + _return_value = os_lseek_impl(module, fd, position, how); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromPy_off_t(_return_value); + +exit: + return return_value; +} + +static Py_off_t +os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how) +/*[clinic end generated code: output=88cfc146f55667af input=902654ad3f96a6d3]*/ +{ + Py_off_t result; + + if (!_PyVerify_fd(fd)) { + posix_error(); + return -1; + } +#ifdef SEEK_SET + /* Turn 0, 1, 2 into SEEK_{SET,CUR,END} */ + switch (how) { + case 0: how = SEEK_SET; break; + case 1: how = SEEK_CUR; break; + case 2: how = SEEK_END; break; + } +#endif /* SEEK_END */ + + if (PyErr_Occurred()) + return -1; + + if (!_PyVerify_fd(fd)) { + posix_error(); + return -1; + } Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - res = _lseeki64(fd, pos, how); + result = _lseeki64(fd, position, how); #else - res = lseek(fd, pos, how); + result = lseek(fd, position, how); #endif Py_END_ALLOW_THREADS - if (res < 0) - return posix_error(); + if (result < 0) + posix_error(); -#if !defined(HAVE_LARGEFILE_SUPPORT) - return PyLong_FromLong(res); -#else - return PyLong_FromLongLong(res); -#endif + return result; } -PyDoc_STRVAR(posix_read__doc__, -"read(fd, buffersize) -> bytes\n\n\ -Read a file descriptor."); +/*[clinic input] +os.read + fd: int + length: Py_ssize_t + / + +Read from a file descriptor. Returns a bytes object. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_read__doc__, +"read($module, fd, length, /)\n" +"--\n" +"\n" +"Read from a file descriptor. Returns a bytes object."); + +#define OS_READ_METHODDEF \ + {"read", (PyCFunction)os_read, METH_VARARGS, os_read__doc__}, + +static PyObject * +os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length); static PyObject * -posix_read(PyObject *self, PyObject *args) +os_read(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; int fd; - Py_ssize_t size; + Py_ssize_t length; + + if (!PyArg_ParseTuple(args, + "in:read", + &fd, &length)) + goto exit; + return_value = os_read_impl(module, fd, length); + +exit: + return return_value; +} + +static PyObject * +os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length) +/*[clinic end generated code: output=1f3bc27260a24968 input=1df2eaa27c0bf1d3]*/ +{ Py_ssize_t n; PyObject *buffer; - if (!PyArg_ParseTuple(args, "in:read", &fd, &size)) - return NULL; + + if (length < 0) { + errno = EINVAL; + return posix_error(); + } if (!_PyVerify_fd(fd)) return posix_error(); + #ifdef MS_WINDOWS - if (size > INT_MAX) - size = INT_MAX; + #define READ_CAST (int) + if (length > INT_MAX) + length = INT_MAX; +#else + #define READ_CAST #endif - if (size < 0) { - errno = EINVAL; - return posix_error(); - } - buffer = PyBytes_FromStringAndSize((char *)NULL, size); + + buffer = PyBytes_FromStringAndSize((char *)NULL, length); if (buffer == NULL) return NULL; Py_BEGIN_ALLOW_THREADS -#ifdef MS_WINDOWS - n = read(fd, PyBytes_AS_STRING(buffer), (int)size); -#else - n = read(fd, PyBytes_AS_STRING(buffer), size); -#endif + n = read(fd, PyBytes_AS_STRING(buffer), READ_CAST length); Py_END_ALLOW_THREADS + if (n < 0) { Py_DECREF(buffer); return posix_error(); } - if (n != size) + + if (n != length) _PyBytes_Resize(&buffer, n); + return buffer; } @@ -8082,70 +11414,163 @@ iov_cleanup(struct iovec *iov, Py_buffer *buf, int cnt) } #endif + #ifdef HAVE_READV -PyDoc_STRVAR(posix_readv__doc__, -"readv(fd, buffers) -> bytesread\n\n\ -Read from a file descriptor fd into a number of mutable, bytes-like\n\ -objects (\"buffers\"). readv will transfer data into each buffer\n\ -until it is full and then move on to the next buffer in the sequence\n\ -to hold the rest of the data.\n\n\ -readv returns the total number of bytes read (which may be less than\n\ -the total capacity of all the buffers."); +/*[clinic input] +os.readv -> Py_ssize_t + + fd: int + buffers: object + / + +Read from a file descriptor fd into an iterable of buffers. + +The buffers should be mutable buffers accepting bytes. +readv will transfer data into each buffer until it is full +and then move on to the next buffer in the sequence to hold +the rest of the data. + +readv returns the total number of bytes read, +which may be less than the total capacity of all the buffers. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_readv__doc__, +"readv($module, fd, buffers, /)\n" +"--\n" +"\n" +"Read from a file descriptor fd into an iterable of buffers.\n" +"\n" +"The buffers should be mutable buffers accepting bytes.\n" +"readv will transfer data into each buffer until it is full\n" +"and then move on to the next buffer in the sequence to hold\n" +"the rest of the data.\n" +"\n" +"readv returns the total number of bytes read,\n" +"which may be less than the total capacity of all the buffers."); + +#define OS_READV_METHODDEF \ + {"readv", (PyCFunction)os_readv, METH_VARARGS, os_readv__doc__}, + +static Py_ssize_t +os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers); static PyObject * -posix_readv(PyObject *self, PyObject *args) +os_readv(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + PyObject *buffers; + Py_ssize_t _return_value; + + if (!PyArg_ParseTuple(args, + "iO:readv", + &fd, &buffers)) + goto exit; + _return_value = os_readv_impl(module, fd, buffers); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + return return_value; +} + +static Py_ssize_t +os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers) +/*[clinic end generated code: output=72748b1c32a6e2a1 input=e679eb5dbfa0357d]*/ { - int fd, cnt; + int cnt; Py_ssize_t n; - PyObject *seq; struct iovec *iov; Py_buffer *buf; - if (!PyArg_ParseTuple(args, "iO:readv", &fd, &seq)) - return NULL; - if (!PySequence_Check(seq)) { + if (!PySequence_Check(buffers)) { PyErr_SetString(PyExc_TypeError, "readv() arg 2 must be a sequence"); - return NULL; + return -1; } - cnt = PySequence_Size(seq); - if (iov_setup(&iov, &buf, seq, cnt, PyBUF_WRITABLE) < 0) - return NULL; + cnt = PySequence_Size(buffers); + + if (iov_setup(&iov, &buf, buffers, cnt, PyBUF_WRITABLE) < 0) + return -1; Py_BEGIN_ALLOW_THREADS n = readv(fd, iov, cnt); Py_END_ALLOW_THREADS iov_cleanup(iov, buf, cnt); - if (n < 0) - return posix_error(); + if (n < 0) { + posix_error(); + return -1; + } - return PyLong_FromSsize_t(n); + return n; } -#endif +#endif /* HAVE_READV */ + #ifdef HAVE_PREAD -PyDoc_STRVAR(posix_pread__doc__, -"pread(fd, buffersize, offset) -> string\n\n\ -Read from a file descriptor, fd, at a position of offset. It will read up\n\ -to buffersize number of bytes. The file offset remains unchanged."); +/*[clinic input] +# TODO length should be size_t! but Python doesn't support parsing size_t yet. +os.pread + + fd: int + length: int + offset: Py_off_t + / + +Read a number of bytes from a file descriptor starting at a particular offset. + +Read length bytes from file descriptor fd, starting at offset bytes from +the beginning of the file. The file offset remains unchanged. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_pread__doc__, +"pread($module, fd, length, offset, /)\n" +"--\n" +"\n" +"Read a number of bytes from a file descriptor starting at a particular offset.\n" +"\n" +"Read length bytes from file descriptor fd, starting at offset bytes from\n" +"the beginning of the file. The file offset remains unchanged."); + +#define OS_PREAD_METHODDEF \ + {"pread", (PyCFunction)os_pread, METH_VARARGS, os_pread__doc__}, + +static PyObject * +os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset); static PyObject * -posix_pread(PyObject *self, PyObject *args) +os_pread(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int length; + Py_off_t offset; + + if (!PyArg_ParseTuple(args, + "iiO&:pread", + &fd, &length, Py_off_t_converter, &offset)) + goto exit; + return_value = os_pread_impl(module, fd, length, offset); + +exit: + return return_value; +} + +static PyObject * +os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset) +/*[clinic end generated code: output=7b62bf6c06e20ae8 input=084948dcbaa35d4c]*/ { - int fd, size; - off_t offset; Py_ssize_t n; PyObject *buffer; - if (!PyArg_ParseTuple(args, "iiO&:pread", &fd, &size, _parse_off_t, &offset)) - return NULL; - if (size < 0) { + if (length < 0) { errno = EINVAL; return posix_error(); } - buffer = PyBytes_FromStringAndSize((char *)NULL, size); + buffer = PyBytes_FromStringAndSize((char *)NULL, length); if (buffer == NULL) return NULL; if (!_PyVerify_fd(fd)) { @@ -8153,49 +11578,92 @@ posix_pread(PyObject *self, PyObject *args) return posix_error(); } Py_BEGIN_ALLOW_THREADS - n = pread(fd, PyBytes_AS_STRING(buffer), size, offset); + n = pread(fd, PyBytes_AS_STRING(buffer), length, offset); Py_END_ALLOW_THREADS if (n < 0) { Py_DECREF(buffer); return posix_error(); } - if (n != size) + if (n != length) _PyBytes_Resize(&buffer, n); return buffer; } -#endif +#endif /* HAVE_PREAD */ + + +/*[clinic input] +os.write -> Py_ssize_t + + fd: int + data: Py_buffer + / + +Write a bytes object to a file descriptor. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_write__doc__, +"write($module, fd, data, /)\n" +"--\n" +"\n" +"Write a bytes object to a file descriptor."); -PyDoc_STRVAR(posix_write__doc__, -"write(fd, data) -> byteswritten\n\n\ -Write bytes to a file descriptor."); +#define OS_WRITE_METHODDEF \ + {"write", (PyCFunction)os_write, METH_VARARGS, os_write__doc__}, + +static Py_ssize_t +os_write_impl(PyModuleDef *module, int fd, Py_buffer *data); static PyObject * -posix_write(PyObject *self, PyObject *args) +os_write(PyModuleDef *module, PyObject *args) { - Py_buffer pbuf; + PyObject *return_value = NULL; int fd; - Py_ssize_t size, len; + Py_buffer data = {NULL, NULL}; + Py_ssize_t _return_value; + + if (!PyArg_ParseTuple(args, + "iy*:write", + &fd, &data)) + goto exit; + _return_value = os_write_impl(module, fd, &data); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +static Py_ssize_t +os_write_impl(PyModuleDef *module, int fd, Py_buffer *data) +/*[clinic end generated code: output=aeb96acfdd4d5112 input=3207e28963234f3c]*/ +{ + Py_ssize_t size; + Py_ssize_t len = data->len; - if (!PyArg_ParseTuple(args, "iy*:write", &fd, &pbuf)) - return NULL; if (!_PyVerify_fd(fd)) { - PyBuffer_Release(&pbuf); - return posix_error(); + posix_error(); + return -1; } - len = pbuf.len; + Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS if (len > INT_MAX) len = INT_MAX; - size = write(fd, pbuf.buf, (int)len); + size = write(fd, data->buf, (int)len); #else - size = write(fd, pbuf.buf, len); + size = write(fd, data->buf, len); #endif Py_END_ALLOW_THREADS - PyBuffer_Release(&pbuf); - if (size < 0) - return posix_error(); - return PyLong_FromSsize_t(size); + if (size < 0) { + posix_error(); + return -1; + } + return size; } #ifdef HAVE_SENDFILE @@ -8205,6 +11673,7 @@ sendfile(out, in, offset, nbytes, headers=None, trailers=None, flags=0)\n\ -> byteswritten\n\ Copy nbytes bytes from file descriptor in to file descriptor out."); +/* AC 3.5: don't bother converting, has optional group*/ static PyObject * posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict) { @@ -8230,10 +11699,10 @@ posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict) #ifdef __APPLE__ if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iiO&O&|OOi:sendfile", - keywords, &out, &in, _parse_off_t, &offset, _parse_off_t, &sbytes, + keywords, &out, &in, Py_off_t_converter, &offset, Py_off_t_converter, &sbytes, #else if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iiO&n|OOi:sendfile", - keywords, &out, &in, _parse_off_t, &offset, &len, + keywords, &out, &in, Py_off_t_converter, &offset, &len, #endif &headers, &trailers, &flags)) return NULL; @@ -8326,7 +11795,7 @@ done: return Py_BuildValue("n", ret); } #endif - if (!_parse_off_t(offobj, &offset)) + if (!Py_off_t_converter(offobj, &offset)) return NULL; Py_BEGIN_ALLOW_THREADS ret = sendfile(out, in, &offset, count); @@ -8336,21 +11805,59 @@ done: return Py_BuildValue("n", ret); #endif } -#endif +#endif /* HAVE_SENDFILE */ + + +/*[clinic input] +os.fstat + + fd : int -PyDoc_STRVAR(posix_fstat__doc__, -"fstat(fd) -> stat result\n\n\ -Like stat(), but for an open file descriptor.\n\ -Equivalent to stat(fd=fd)."); +Perform a stat system call on the given file descriptor. + +Like stat(), but for an open file descriptor. +Equivalent to os.stat(fd). +[clinic start generated code]*/ + +PyDoc_STRVAR(os_fstat__doc__, +"fstat($module, /, fd)\n" +"--\n" +"\n" +"Perform a stat system call on the given file descriptor.\n" +"\n" +"Like stat(), but for an open file descriptor.\n" +"Equivalent to os.stat(fd)."); + +#define OS_FSTAT_METHODDEF \ + {"fstat", (PyCFunction)os_fstat, METH_VARARGS|METH_KEYWORDS, os_fstat__doc__}, + +static PyObject * +os_fstat_impl(PyModuleDef *module, int fd); static PyObject * -posix_fstat(PyObject *self, PyObject *args) +os_fstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) { + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:fstat", _keywords, + &fd)) + goto exit; + return_value = os_fstat_impl(module, fd); + +exit: + return return_value; +} + +static PyObject * +os_fstat_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=dae4a9678c7bd881 input=27e0e0ebbe5600c9]*/ +{ STRUCT_STAT st; int res; - if (!PyArg_ParseTuple(args, "i:fstat", &fd)) - return NULL; + Py_BEGIN_ALLOW_THREADS res = FSTAT(fd, &st); Py_END_ALLOW_THREADS @@ -8365,30 +11872,98 @@ posix_fstat(PyObject *self, PyObject *args) return _pystat_fromstructstat(&st); } -PyDoc_STRVAR(posix_isatty__doc__, -"isatty(fd) -> bool\n\n\ -Return True if the file descriptor 'fd' is an open file descriptor\n\ -connected to the slave end of a terminal."); + +/*[clinic input] +os.isatty -> bool + fd: int + / + +Return True if the fd is connected to a terminal. + +Return True if the file descriptor is an open file descriptor +connected to the slave end of a terminal. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_isatty__doc__, +"isatty($module, fd, /)\n" +"--\n" +"\n" +"Return True if the fd is connected to a terminal.\n" +"\n" +"Return True if the file descriptor is an open file descriptor\n" +"connected to the slave end of a terminal."); + +#define OS_ISATTY_METHODDEF \ + {"isatty", (PyCFunction)os_isatty, METH_VARARGS, os_isatty__doc__}, + +static int +os_isatty_impl(PyModuleDef *module, int fd); static PyObject * -posix_isatty(PyObject *self, PyObject *args) +os_isatty(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; int fd; - if (!PyArg_ParseTuple(args, "i:isatty", &fd)) - return NULL; - if (!_PyVerify_fd(fd)) - return PyBool_FromLong(0); - return PyBool_FromLong(isatty(fd)); -} + int _return_value; -#ifdef HAVE_PIPE -PyDoc_STRVAR(posix_pipe__doc__, -"pipe() -> (read_end, write_end)\n\n\ -Create a pipe."); + if (!PyArg_ParseTuple(args, + "i:isatty", + &fd)) + goto exit; + _return_value = os_isatty_impl(module, fd); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); -static PyObject * -posix_pipe(PyObject *self, PyObject *noargs) -{ +exit: + return return_value; +} + +static int +os_isatty_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=4bfadbfe22715097 input=08ce94aa1eaf7b5e]*/ +{ + if (!_PyVerify_fd(fd)) + return 0; + return isatty(fd); +} + + +#ifdef HAVE_PIPE +/*[clinic input] +os.pipe + +Create a pipe. + +Returns a tuple of two file descriptors: + (read_fd, write_fd) +[clinic start generated code]*/ + +PyDoc_STRVAR(os_pipe__doc__, +"pipe($module, /)\n" +"--\n" +"\n" +"Create a pipe.\n" +"\n" +"Returns a tuple of two file descriptors:\n" +" (read_fd, write_fd)"); + +#define OS_PIPE_METHODDEF \ + {"pipe", (PyCFunction)os_pipe, METH_NOARGS, os_pipe__doc__}, + +static PyObject * +os_pipe_impl(PyModuleDef *module); + +static PyObject * +os_pipe(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_pipe_impl(module); +} + +static PyObject * +os_pipe_impl(PyModuleDef *module) +/*[clinic end generated code: output=0da2479f2266e774 input=02535e8c8fa6c4d4]*/ +{ int fds[2]; #ifdef MS_WINDOWS HANDLE read, write; @@ -8455,25 +12030,64 @@ posix_pipe(PyObject *self, PyObject *noargs) } #endif /* HAVE_PIPE */ + #ifdef HAVE_PIPE2 -PyDoc_STRVAR(posix_pipe2__doc__, -"pipe2(flags) -> (read_end, write_end)\n\n\ -Create a pipe with flags set atomically.\n\ -flags can be constructed by ORing together one or more of these values:\n\ -O_NONBLOCK, O_CLOEXEC.\n\ -"); +/*[clinic input] +os.pipe2 + + flags: int + / + +Create a pipe with flags set atomically. + +Returns a tuple of two file descriptors: + (read_fd, write_fd) + +flags can be constructed by ORing together one or more of these values: +O_NONBLOCK, O_CLOEXEC. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_pipe2__doc__, +"pipe2($module, flags, /)\n" +"--\n" +"\n" +"Create a pipe with flags set atomically.\n" +"\n" +"Returns a tuple of two file descriptors:\n" +" (read_fd, write_fd)\n" +"\n" +"flags can be constructed by ORing together one or more of these values:\n" +"O_NONBLOCK, O_CLOEXEC."); + +#define OS_PIPE2_METHODDEF \ + {"pipe2", (PyCFunction)os_pipe2, METH_VARARGS, os_pipe2__doc__}, static PyObject * -posix_pipe2(PyObject *self, PyObject *arg) +os_pipe2_impl(PyModuleDef *module, int flags); + +static PyObject * +os_pipe2(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; int flags; + + if (!PyArg_ParseTuple(args, + "i:pipe2", + &flags)) + goto exit; + return_value = os_pipe2_impl(module, flags); + +exit: + return return_value; +} + +static PyObject * +os_pipe2_impl(PyModuleDef *module, int flags) +/*[clinic end generated code: output=9e27c799ce19220b input=f261b6e7e63c6817]*/ +{ int fds[2]; int res; - flags = _PyLong_AsInt(arg); - if (flags == -1 && PyErr_Occurred()) - return NULL; - res = pipe2(fds, flags); if (res != 0) return posix_error(); @@ -8481,487 +12095,984 @@ posix_pipe2(PyObject *self, PyObject *arg) } #endif /* HAVE_PIPE2 */ + #ifdef HAVE_WRITEV -PyDoc_STRVAR(posix_writev__doc__, -"writev(fd, buffers) -> byteswritten\n\n\ -Write the contents of *buffers* to file descriptor *fd*. *buffers*\n\ -must be a sequence of bytes-like objects.\n\n\ -writev writes the contents of each object to the file descriptor\n\ -and returns the total number of bytes written."); +/*[clinic input] +os.writev -> Py_ssize_t + fd: int + buffers: object + / + +Iterate over buffers, and write the contents of each to a file descriptor. + +Returns the total number of bytes written. +buffers must be a sequence of bytes-like objects. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_writev__doc__, +"writev($module, fd, buffers, /)\n" +"--\n" +"\n" +"Iterate over buffers, and write the contents of each to a file descriptor.\n" +"\n" +"Returns the total number of bytes written.\n" +"buffers must be a sequence of bytes-like objects."); + +#define OS_WRITEV_METHODDEF \ + {"writev", (PyCFunction)os_writev, METH_VARARGS, os_writev__doc__}, + +static Py_ssize_t +os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers); static PyObject * -posix_writev(PyObject *self, PyObject *args) +os_writev(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + PyObject *buffers; + Py_ssize_t _return_value; + + if (!PyArg_ParseTuple(args, + "iO:writev", + &fd, &buffers)) + goto exit; + _return_value = os_writev_impl(module, fd, buffers); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + return return_value; +} + +static Py_ssize_t +os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers) +/*[clinic end generated code: output=591c662dccbe4951 input=5b8d17fe4189d2fe]*/ { - int fd, cnt; - Py_ssize_t res; - PyObject *seq; + int cnt; + Py_ssize_t result; struct iovec *iov; Py_buffer *buf; - if (!PyArg_ParseTuple(args, "iO:writev", &fd, &seq)) - return NULL; - if (!PySequence_Check(seq)) { + + if (!PySequence_Check(buffers)) { PyErr_SetString(PyExc_TypeError, "writev() arg 2 must be a sequence"); - return NULL; + return -1; } - cnt = PySequence_Size(seq); + cnt = PySequence_Size(buffers); - if (iov_setup(&iov, &buf, seq, cnt, PyBUF_SIMPLE) < 0) { - return NULL; + if (iov_setup(&iov, &buf, buffers, cnt, PyBUF_SIMPLE) < 0) { + return -1; } Py_BEGIN_ALLOW_THREADS - res = writev(fd, iov, cnt); + result = writev(fd, iov, cnt); Py_END_ALLOW_THREADS iov_cleanup(iov, buf, cnt); - if (res < 0) - return posix_error(); + if (result < 0) + posix_error(); - return PyLong_FromSsize_t(res); + return result; } -#endif +#endif /* HAVE_WRITEV */ + #ifdef HAVE_PWRITE -PyDoc_STRVAR(posix_pwrite__doc__, -"pwrite(fd, string, offset) -> byteswritten\n\n\ -Write string to a file descriptor, fd, from offset, leaving the file\n\ -offset unchanged."); +/*[clinic input] +os.pwrite -> Py_ssize_t + + fd: int + buffer: Py_buffer + offset: Py_off_t + / + +Write bytes to a file descriptor starting at a particular offset. + +Write buffer to fd, starting at offset bytes from the beginning of +the file. Returns the number of bytes writte. Does not change the +current file offset. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_pwrite__doc__, +"pwrite($module, fd, buffer, offset, /)\n" +"--\n" +"\n" +"Write bytes to a file descriptor starting at a particular offset.\n" +"\n" +"Write buffer to fd, starting at offset bytes from the beginning of\n" +"the file. Returns the number of bytes writte. Does not change the\n" +"current file offset."); + +#define OS_PWRITE_METHODDEF \ + {"pwrite", (PyCFunction)os_pwrite, METH_VARARGS, os_pwrite__doc__}, + +static Py_ssize_t +os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, Py_off_t offset); static PyObject * -posix_pwrite(PyObject *self, PyObject *args) +os_pwrite(PyModuleDef *module, PyObject *args) { - Py_buffer pbuf; + PyObject *return_value = NULL; int fd; - off_t offset; - Py_ssize_t size; + Py_buffer buffer = {NULL, NULL}; + Py_off_t offset; + Py_ssize_t _return_value; - if (!PyArg_ParseTuple(args, "iy*O&:pwrite", &fd, &pbuf, _parse_off_t, &offset)) - return NULL; + if (!PyArg_ParseTuple(args, + "iy*O&:pwrite", + &fd, &buffer, Py_off_t_converter, &offset)) + goto exit; + _return_value = os_pwrite_impl(module, fd, &buffer, offset); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +static Py_ssize_t +os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, Py_off_t offset) +/*[clinic end generated code: output=ec9cc5b2238e96a7 input=19903f1b3dd26377]*/ +{ + Py_ssize_t size; if (!_PyVerify_fd(fd)) { - PyBuffer_Release(&pbuf); - return posix_error(); + posix_error(); + return -1; } + Py_BEGIN_ALLOW_THREADS - size = pwrite(fd, pbuf.buf, (size_t)pbuf.len, offset); + size = pwrite(fd, buffer->buf, (size_t)buffer->len, offset); Py_END_ALLOW_THREADS - PyBuffer_Release(&pbuf); + if (size < 0) - return posix_error(); - return PyLong_FromSsize_t(size); + posix_error(); + return size; } -#endif +#endif /* HAVE_PWRITE */ + #ifdef HAVE_MKFIFO -PyDoc_STRVAR(posix_mkfifo__doc__, -"mkfifo(path, mode=0o666, *, dir_fd=None)\n\n\ -Create a FIFO (a POSIX named pipe).\n\ -\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -dir_fd may not be implemented on your platform.\n\ - If it is unavailable, using it will raise a NotImplementedError."); +/*[clinic input] +os.mkfifo + + path: path_t + mode: int=0o666 + * + dir_fd: dir_fd(requires='mkfifoat')=None + +Create a "fifo" (a POSIX named pipe). + +If dir_fd is not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that directory. +dir_fd may not be implemented on your platform. + If it is unavailable, using it will raise a NotImplementedError. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_mkfifo__doc__, +"mkfifo($module, /, path, mode=438, *, dir_fd=None)\n" +"--\n" +"\n" +"Create a \"fifo\" (a POSIX named pipe).\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_MKFIFO_METHODDEF \ + {"mkfifo", (PyCFunction)os_mkfifo, METH_VARARGS|METH_KEYWORDS, os_mkfifo__doc__}, + +static PyObject * +os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); static PyObject * -posix_mkfifo(PyObject *self, PyObject *args, PyObject *kwargs) +os_mkfifo(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; - int mode = 0666; - int dir_fd = DEFAULT_DIR_FD; - int result; PyObject *return_value = NULL; - static char *keywords[] = {"path", "mode", "dir_fd", NULL}; + static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("mkfifo", "path", 0, 0); + int mode = 438; + int dir_fd = DEFAULT_DIR_FD; - memset(&path, 0, sizeof(path)); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i$O&:mkfifo", keywords, - path_converter, &path, - &mode, -#ifdef HAVE_MKFIFOAT - dir_fd_converter, &dir_fd -#else - dir_fd_unavailable, &dir_fd -#endif - )) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|i$O&:mkfifo", _keywords, + path_converter, &path, &mode, MKFIFOAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_mkfifo_impl(module, &path, mode, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) +/*[clinic end generated code: output=b3321927546893d0 input=73032e98a36e0e19]*/ +{ + int result; Py_BEGIN_ALLOW_THREADS #ifdef HAVE_MKFIFOAT if (dir_fd != DEFAULT_DIR_FD) - result = mkfifoat(dir_fd, path.narrow, mode); + result = mkfifoat(dir_fd, path->narrow, mode); else #endif - result = mkfifo(path.narrow, mode); + result = mkfifo(path->narrow, mode); Py_END_ALLOW_THREADS - if (result < 0) { - return_value = posix_error(); - goto exit; - } - - return_value = Py_None; - Py_INCREF(Py_None); + if (result < 0) + return posix_error(); -exit: - path_cleanup(&path); - return return_value; + Py_RETURN_NONE; } -#endif +#endif /* HAVE_MKFIFO */ + #if defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV) -PyDoc_STRVAR(posix_mknod__doc__, -"mknod(filename, mode=0o600, device=0, *, dir_fd=None)\n\n\ -Create a filesystem node (file, device special file or named pipe)\n\ -named filename. mode specifies both the permissions to use and the\n\ -type of node to be created, being combined (bitwise OR) with one of\n\ -S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. For S_IFCHR and S_IFBLK,\n\ -device defines the newly created device special file (probably using\n\ -os.makedev()), otherwise it is ignored.\n\ -\n\ -If dir_fd is not None, it should be a file descriptor open to a directory,\n\ - and path should be relative; path will then be relative to that directory.\n\ -dir_fd may not be implemented on your platform.\n\ - If it is unavailable, using it will raise a NotImplementedError."); +/*[clinic input] +os.mknod + + path: path_t + mode: int=0o600 + device: int=0 + * + dir_fd: dir_fd(requires='mknodat')=None + +Create a node in the file system. + +Create a node in the file system (file, device special file or named pipe) +at path. mode specifies both the permissions to use and the +type of node to be created, being combined (bitwise OR) with one of +S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. If S_IFCHR or S_IFBLK is set on mode, +device defines the newly created device special file (probably using +os.makedev()). Otherwise device is ignored. + +If dir_fd is not None, it should be a file descriptor open to a directory, + and path should be relative; path will then be relative to that directory. +dir_fd may not be implemented on your platform. + If it is unavailable, using it will raise a NotImplementedError. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_mknod__doc__, +"mknod($module, /, path, mode=384, device=0, *, dir_fd=None)\n" +"--\n" +"\n" +"Create a node in the file system.\n" +"\n" +"Create a node in the file system (file, device special file or named pipe)\n" +"at path. mode specifies both the permissions to use and the\n" +"type of node to be created, being combined (bitwise OR) with one of\n" +"S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. If S_IFCHR or S_IFBLK is set on mode,\n" +"device defines the newly created device special file (probably using\n" +"os.makedev()). Otherwise device is ignored.\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); +#define OS_MKNOD_METHODDEF \ + {"mknod", (PyCFunction)os_mknod, METH_VARARGS|METH_KEYWORDS, os_mknod__doc__}, static PyObject * -posix_mknod(PyObject *self, PyObject *args, PyObject *kwargs) +os_mknod_impl(PyModuleDef *module, path_t *path, int mode, int device, int dir_fd); + +static PyObject * +os_mknod(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; - int mode = 0666; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "mode", "device", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("mknod", "path", 0, 0); + int mode = 384; int device = 0; int dir_fd = DEFAULT_DIR_FD; - int result; - PyObject *return_value = NULL; - static char *keywords[] = {"path", "mode", "device", "dir_fd", NULL}; - memset(&path, 0, sizeof(path)); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|ii$O&:mknod", keywords, - path_converter, &path, - &mode, &device, -#ifdef HAVE_MKNODAT - dir_fd_converter, &dir_fd -#else - dir_fd_unavailable, &dir_fd -#endif - )) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|ii$O&:mknod", _keywords, + path_converter, &path, &mode, &device, MKNODAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_mknod_impl(module, &path, mode, device, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_mknod_impl(PyModuleDef *module, path_t *path, int mode, int device, int dir_fd) +/*[clinic end generated code: output=c688739c15ca7bbb input=30e02126aba9732e]*/ +{ + int result; Py_BEGIN_ALLOW_THREADS #ifdef HAVE_MKNODAT if (dir_fd != DEFAULT_DIR_FD) - result = mknodat(dir_fd, path.narrow, mode, device); + result = mknodat(dir_fd, path->narrow, mode, device); else #endif - result = mknod(path.narrow, mode, device); + result = mknod(path->narrow, mode, device); Py_END_ALLOW_THREADS - if (result < 0) { - return_value = posix_error(); - goto exit; - } - - return_value = Py_None; - Py_INCREF(Py_None); + if (result < 0) + return posix_error(); -exit: - path_cleanup(&path); - return return_value; + Py_RETURN_NONE; } -#endif +#endif /* defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV) */ + #ifdef HAVE_DEVICE_MACROS -PyDoc_STRVAR(posix_major__doc__, -"major(device) -> major number\n\ -Extracts a device major number from a raw device number."); +/*[clinic input] +os.major -> unsigned_int -static PyObject * -posix_major(PyObject *self, PyObject *args) -{ - int device; - if (!PyArg_ParseTuple(args, "i:major", &device)) - return NULL; - return PyLong_FromLong((long)major(device)); -} + device: int + / -PyDoc_STRVAR(posix_minor__doc__, -"minor(device) -> minor number\n\ -Extracts a device minor number from a raw device number."); +Extracts a device major number from a raw device number. +[clinic start generated code]*/ -static PyObject * -posix_minor(PyObject *self, PyObject *args) -{ +PyDoc_STRVAR(os_major__doc__, +"major($module, device, /)\n" +"--\n" +"\n" +"Extracts a device major number from a raw device number."); + +#define OS_MAJOR_METHODDEF \ + {"major", (PyCFunction)os_major, METH_VARARGS, os_major__doc__}, + +static unsigned int +os_major_impl(PyModuleDef *module, int device); + +static PyObject * +os_major(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; int device; - if (!PyArg_ParseTuple(args, "i:minor", &device)) - return NULL; - return PyLong_FromLong((long)minor(device)); + unsigned int _return_value; + + if (!PyArg_ParseTuple(args, + "i:major", + &device)) + goto exit; + _return_value = os_major_impl(module, device); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); + +exit: + return return_value; } -PyDoc_STRVAR(posix_makedev__doc__, -"makedev(major, minor) -> device number\n\ -Composes a raw device number from the major and minor device numbers."); +static unsigned int +os_major_impl(PyModuleDef *module, int device) +/*[clinic end generated code: output=f60d3cc3d5d20325 input=ea48820b7e10d310]*/ +{ + return major(device); +} + + +/*[clinic input] +os.minor -> unsigned_int + + device: int + / + +Extracts a device minor number from a raw device number. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_minor__doc__, +"minor($module, device, /)\n" +"--\n" +"\n" +"Extracts a device minor number from a raw device number."); + +#define OS_MINOR_METHODDEF \ + {"minor", (PyCFunction)os_minor, METH_VARARGS, os_minor__doc__}, + +static unsigned int +os_minor_impl(PyModuleDef *module, int device); static PyObject * -posix_makedev(PyObject *self, PyObject *args) +os_minor(PyModuleDef *module, PyObject *args) { - int major, minor; - if (!PyArg_ParseTuple(args, "ii:makedev", &major, &minor)) - return NULL; - return PyLong_FromLong((long)makedev(major, minor)); + PyObject *return_value = NULL; + int device; + unsigned int _return_value; + + if (!PyArg_ParseTuple(args, + "i:minor", + &device)) + goto exit; + _return_value = os_minor_impl(module, device); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); + +exit: + return return_value; +} + +static unsigned int +os_minor_impl(PyModuleDef *module, int device) +/*[clinic end generated code: output=71eca1d5149c2a07 input=089733ebbf9754e8]*/ +{ + return minor(device); +} + + +/*[clinic input] +os.makedev -> unsigned_int + + major: int + minor: int + / + +Composes a raw device number from the major and minor device numbers. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_makedev__doc__, +"makedev($module, major, minor, /)\n" +"--\n" +"\n" +"Composes a raw device number from the major and minor device numbers."); + +#define OS_MAKEDEV_METHODDEF \ + {"makedev", (PyCFunction)os_makedev, METH_VARARGS, os_makedev__doc__}, + +static unsigned int +os_makedev_impl(PyModuleDef *module, int major, int minor); + +static PyObject * +os_makedev(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int major; + int minor; + unsigned int _return_value; + + if (!PyArg_ParseTuple(args, + "ii:makedev", + &major, &minor)) + goto exit; + _return_value = os_makedev_impl(module, major, minor); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); + +exit: + return return_value; +} + +static unsigned int +os_makedev_impl(PyModuleDef *module, int major, int minor) +/*[clinic end generated code: output=e04dc5723a98cd3b input=f55bf7cffb028a08]*/ +{ + return makedev(major, minor); } -#endif /* device macros */ +#endif /* HAVE_DEVICE_MACROS */ #ifdef HAVE_FTRUNCATE -PyDoc_STRVAR(posix_ftruncate__doc__, -"ftruncate(fd, length)\n\n\ -Truncate a file to a specified length."); +/*[clinic input] +os.ftruncate + + fd: int + length: Py_off_t + / + +Truncate a file, specified by file descriptor, to a specific length. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_ftruncate__doc__, +"ftruncate($module, fd, length, /)\n" +"--\n" +"\n" +"Truncate a file, specified by file descriptor, to a specific length."); + +#define OS_FTRUNCATE_METHODDEF \ + {"ftruncate", (PyCFunction)os_ftruncate, METH_VARARGS, os_ftruncate__doc__}, static PyObject * -posix_ftruncate(PyObject *self, PyObject *args) +os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length); + +static PyObject * +os_ftruncate(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; int fd; - off_t length; - int res; + Py_off_t length; - if (!PyArg_ParseTuple(args, "iO&:ftruncate", &fd, _parse_off_t, &length)) - return NULL; + if (!PyArg_ParseTuple(args, + "iO&:ftruncate", + &fd, Py_off_t_converter, &length)) + goto exit; + return_value = os_ftruncate_impl(module, fd, length); + +exit: + return return_value; +} + +static PyObject * +os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length) +/*[clinic end generated code: output=62326766cb9b76bf input=63b43641e52818f2]*/ +{ + int result; Py_BEGIN_ALLOW_THREADS - res = ftruncate(fd, length); + result = ftruncate(fd, length); Py_END_ALLOW_THREADS - if (res < 0) + if (result < 0) return posix_error(); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } -#endif +#endif /* HAVE_FTRUNCATE */ + #ifdef HAVE_TRUNCATE -PyDoc_STRVAR(posix_truncate__doc__, -"truncate(path, length)\n\n\ -Truncate the file given by path to length bytes.\n\ -On some platforms, path may also be specified as an open file descriptor.\n\ - If this functionality is unavailable, using it raises an exception."); +/*[clinic input] +os.truncate + path: path_t(allow_fd='PATH_HAVE_FTRUNCATE') + length: Py_off_t + +Truncate a file, specified by path, to a specific length. + +On some platforms, path may also be specified as an open file descriptor. + If this functionality is unavailable, using it raises an exception. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_truncate__doc__, +"truncate($module, /, path, length)\n" +"--\n" +"\n" +"Truncate a file, specified by path, to a specific length.\n" +"\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception."); + +#define OS_TRUNCATE_METHODDEF \ + {"truncate", (PyCFunction)os_truncate, METH_VARARGS|METH_KEYWORDS, os_truncate__doc__}, + +static PyObject * +os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length); static PyObject * -posix_truncate(PyObject *self, PyObject *args, PyObject *kwargs) +os_truncate(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; - off_t length; - int res; - PyObject *result = NULL; - static char *keywords[] = {"path", "length", NULL}; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "length", NULL}; + path_t path = PATH_T_INITIALIZE("truncate", "path", 0, PATH_HAVE_FTRUNCATE); + Py_off_t length; - memset(&path, 0, sizeof(path)); - path.function_name = "truncate"; -#ifdef HAVE_FTRUNCATE - path.allow_fd = 1; -#endif - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&:truncate", keywords, - path_converter, &path, - _parse_off_t, &length)) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&:truncate", _keywords, + path_converter, &path, Py_off_t_converter, &length)) + goto exit; + return_value = os_truncate_impl(module, &path, length); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length) +/*[clinic end generated code: output=6bd76262d2e027c6 input=77229cf0b50a9b77]*/ +{ + int result; Py_BEGIN_ALLOW_THREADS #ifdef HAVE_FTRUNCATE - if (path.fd != -1) - res = ftruncate(path.fd, length); + if (path->fd != -1) + result = ftruncate(path->fd, length); else #endif - res = truncate(path.narrow, length); + result = truncate(path->narrow, length); Py_END_ALLOW_THREADS - if (res < 0) - result = path_error(&path); - else { - Py_INCREF(Py_None); - result = Py_None; - } - path_cleanup(&path); - return result; + if (result < 0) + return path_error(path); + + Py_RETURN_NONE; } -#endif +#endif /* HAVE_TRUNCATE */ + #ifdef HAVE_POSIX_FALLOCATE -PyDoc_STRVAR(posix_posix_fallocate__doc__, -"posix_fallocate(fd, offset, len)\n\n\ -Ensures that enough disk space is allocated for the file specified by fd\n\ -starting from offset and continuing for len bytes."); +/*[clinic input] +os.posix_fallocate + + fd: int + offset: Py_off_t + length: Py_off_t + / + +Ensure a file has allocated at least a particular number of bytes on disk. + +Ensure that the file specified by fd encompasses a range of bytes +starting at offset bytes from the beginning and continuing for length bytes. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_posix_fallocate__doc__, +"posix_fallocate($module, fd, offset, length, /)\n" +"--\n" +"\n" +"Ensure a file has allocated at least a particular number of bytes on disk.\n" +"\n" +"Ensure that the file specified by fd encompasses a range of bytes\n" +"starting at offset bytes from the beginning and continuing for length bytes."); + +#define OS_POSIX_FALLOCATE_METHODDEF \ + {"posix_fallocate", (PyCFunction)os_posix_fallocate, METH_VARARGS, os_posix_fallocate__doc__}, + +static PyObject * +os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length); static PyObject * -posix_posix_fallocate(PyObject *self, PyObject *args) +os_posix_fallocate(PyModuleDef *module, PyObject *args) { - off_t len, offset; - int res, fd; + PyObject *return_value = NULL; + int fd; + Py_off_t offset; + Py_off_t length; - if (!PyArg_ParseTuple(args, "iO&O&:posix_fallocate", - &fd, _parse_off_t, &offset, _parse_off_t, &len)) - return NULL; + if (!PyArg_ParseTuple(args, + "iO&O&:posix_fallocate", + &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length)) + goto exit; + return_value = os_posix_fallocate_impl(module, fd, offset, length); + +exit: + return return_value; +} + +static PyObject * +os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length) +/*[clinic end generated code: output=0cd702d2065c79db input=d7a2ef0ab2ca52fb]*/ +{ + int result; Py_BEGIN_ALLOW_THREADS - res = posix_fallocate(fd, offset, len); + result = posix_fallocate(fd, offset, length); Py_END_ALLOW_THREADS - if (res != 0) { - errno = res; + if (result != 0) { + errno = result; return posix_error(); } Py_RETURN_NONE; } -#endif +#endif /* HAVE_POSIX_FALLOCATE */ + #ifdef HAVE_POSIX_FADVISE -PyDoc_STRVAR(posix_posix_fadvise__doc__, -"posix_fadvise(fd, offset, len, advice)\n\n\ -Announces an intention to access data in a specific pattern thus allowing\n\ -the kernel to make optimizations.\n\ -The advice applies to the region of the file specified by fd starting at\n\ -offset and continuing for len bytes.\n\ -advice is one of POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL,\n\ -POSIX_FADV_RANDOM, POSIX_FADV_NOREUSE, POSIX_FADV_WILLNEED or\n\ -POSIX_FADV_DONTNEED."); +/*[clinic input] +os.posix_fadvise + + fd: int + offset: Py_off_t + length: Py_off_t + advice: int + / + +Announce an intention to access data in a specific pattern. + +Announce an intention to access data in a specific pattern, thus allowing +the kernel to make optimizations. +The advice applies to the region of the file specified by fd starting at +offset and continuing for length bytes. +advice is one of POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL, +POSIX_FADV_RANDOM, POSIX_FADV_NOREUSE, POSIX_FADV_WILLNEED, or +POSIX_FADV_DONTNEED. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_posix_fadvise__doc__, +"posix_fadvise($module, fd, offset, length, advice, /)\n" +"--\n" +"\n" +"Announce an intention to access data in a specific pattern.\n" +"\n" +"Announce an intention to access data in a specific pattern, thus allowing\n" +"the kernel to make optimizations.\n" +"The advice applies to the region of the file specified by fd starting at\n" +"offset and continuing for length bytes.\n" +"advice is one of POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL,\n" +"POSIX_FADV_RANDOM, POSIX_FADV_NOREUSE, POSIX_FADV_WILLNEED, or\n" +"POSIX_FADV_DONTNEED."); + +#define OS_POSIX_FADVISE_METHODDEF \ + {"posix_fadvise", (PyCFunction)os_posix_fadvise, METH_VARARGS, os_posix_fadvise__doc__}, + +static PyObject * +os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length, int advice); static PyObject * -posix_posix_fadvise(PyObject *self, PyObject *args) +os_posix_fadvise(PyModuleDef *module, PyObject *args) { - off_t len, offset; - int res, fd, advice; + PyObject *return_value = NULL; + int fd; + Py_off_t offset; + Py_off_t length; + int advice; - if (!PyArg_ParseTuple(args, "iO&O&i:posix_fadvise", - &fd, _parse_off_t, &offset, _parse_off_t, &len, &advice)) - return NULL; + if (!PyArg_ParseTuple(args, + "iO&O&i:posix_fadvise", + &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length, &advice)) + goto exit; + return_value = os_posix_fadvise_impl(module, fd, offset, length, advice); + +exit: + return return_value; +} + +static PyObject * +os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length, int advice) +/*[clinic end generated code: output=dad93f32c04dd4f7 input=0fbe554edc2f04b5]*/ +{ + int result; Py_BEGIN_ALLOW_THREADS - res = posix_fadvise(fd, offset, len, advice); + result = posix_fadvise(fd, offset, length, advice); Py_END_ALLOW_THREADS - if (res != 0) { - errno = res; + if (result != 0) { + errno = result; return posix_error(); } Py_RETURN_NONE; } -#endif +#endif /* HAVE_POSIX_FADVISE */ #ifdef HAVE_PUTENV -PyDoc_STRVAR(posix_putenv__doc__, -"putenv(key, value)\n\n\ -Change or add an environment variable."); /* Save putenv() parameters as values here, so we can collect them when they * get re-set with another call for the same key. */ static PyObject *posix_putenv_garbage; -static PyObject * -posix_putenv(PyObject *self, PyObject *args) +static void +posix_putenv_garbage_setitem(PyObject *name, PyObject *value) { - PyObject *newstr = NULL; + /* Install the first arg and newstr in posix_putenv_garbage; + * this will cause previous value to be collected. This has to + * happen after the real putenv() call because the old value + * was still accessible until then. */ + if (PyDict_SetItem(posix_putenv_garbage, name, value)) + /* really not much we can do; just leak */ + PyErr_Clear(); + else + Py_DECREF(value); +} + + #ifdef MS_WINDOWS - PyObject *os1, *os2; - wchar_t *newenv; +/*[clinic input] +os.putenv + + name: unicode + value: unicode + / + +Change or add an environment variable. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_putenv__doc__, +"putenv($module, name, value, /)\n" +"--\n" +"\n" +"Change or add an environment variable."); + +#define OS_PUTENV_METHODDEF \ + {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, + +static PyObject * +os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); + +static PyObject * +os_putenv(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *name; + PyObject *value; if (!PyArg_ParseTuple(args, - "UU:putenv", - &os1, &os2)) - return NULL; + "UU:putenv", + &name, &value)) + goto exit; + return_value = os_putenv_impl(module, name, value); + +exit: + return return_value; +} + +static PyObject * +os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) +/*[clinic end generated code: output=5ce9ef9b15606e7e input=ba586581c2e6105f]*/ +{ + wchar_t *env; - newstr = PyUnicode_FromFormat("%U=%U", os1, os2); - if (newstr == NULL) { + PyObject *unicode = PyUnicode_FromFormat("%U=%U", name, value); + if (unicode == NULL) { PyErr_NoMemory(); - goto error; + return NULL; } - if (_MAX_ENV < PyUnicode_GET_LENGTH(newstr)) { + if (_MAX_ENV < PyUnicode_GET_LENGTH(unicode)) { PyErr_Format(PyExc_ValueError, "the environment variable is longer than %u characters", _MAX_ENV); goto error; } - newenv = PyUnicode_AsUnicode(newstr); - if (newenv == NULL) + env = PyUnicode_AsUnicode(unicode); + if (env == NULL) goto error; - if (_wputenv(newenv)) { + if (_wputenv(env)) { posix_error(); goto error; } -#else - PyObject *os1, *os2; - char *s1, *s2; - char *newenv; - if (!PyArg_ParseTuple(args, - "O&O&:putenv", - PyUnicode_FSConverter, &os1, - PyUnicode_FSConverter, &os2)) - return NULL; - s1 = PyBytes_AsString(os1); - s2 = PyBytes_AsString(os2); - - newstr = PyBytes_FromFormat("%s=%s", s1, s2); - if (newstr == NULL) { - PyErr_NoMemory(); - goto error; - } + posix_putenv_garbage_setitem(name, unicode); + Py_RETURN_NONE; - newenv = PyBytes_AS_STRING(newstr); - if (putenv(newenv)) { - posix_error(); - goto error; - } -#endif +error: + Py_DECREF(unicode); + return NULL; +} +#else /* MS_WINDOWS */ +/*[clinic input] +os.putenv - /* Install the first arg and newstr in posix_putenv_garbage; - * this will cause previous value to be collected. This has to - * happen after the real putenv() call because the old value - * was still accessible until then. */ - if (PyDict_SetItem(posix_putenv_garbage, os1, newstr)) { - /* really not much we can do; just leak */ - PyErr_Clear(); + name: FSConverter + value: FSConverter + / + +Change or add an environment variable. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_putenv__doc__, +"putenv($module, name, value, /)\n" +"--\n" +"\n" +"Change or add an environment variable."); + +#define OS_PUTENV_METHODDEF \ + {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, + +static PyObject * +os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); + +static PyObject * +os_putenv(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *name = NULL; + PyObject *value = NULL; + + if (!PyArg_ParseTuple(args, + "O&O&:putenv", + PyUnicode_FSConverter, &name, PyUnicode_FSConverter, &value)) + goto exit; + return_value = os_putenv_impl(module, name, value); + +exit: + /* Cleanup for name */ + Py_XDECREF(name); + /* Cleanup for value */ + Py_XDECREF(value); + + return return_value; +} + +static PyObject * +os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) +/*[clinic end generated code: output=85ab223393dc7afd input=a97bc6152f688d31]*/ +{ + PyObject *bytes = NULL; + char *env; + char *name_string = PyBytes_AsString(name); + char *value_string = PyBytes_AsString(value); + + bytes = PyBytes_FromFormat("%s=%s", name_string, value_string); + if (bytes == NULL) { + PyErr_NoMemory(); + return NULL; } - else { - Py_DECREF(newstr); + + env = PyBytes_AS_STRING(bytes); + if (putenv(env)) { + Py_DECREF(bytes); + return posix_error(); } -#ifndef MS_WINDOWS - Py_DECREF(os1); - Py_DECREF(os2); -#endif + posix_putenv_garbage_setitem(name, bytes); Py_RETURN_NONE; - -error: -#ifndef MS_WINDOWS - Py_DECREF(os1); - Py_DECREF(os2); -#endif - Py_XDECREF(newstr); - return NULL; } -#endif /* putenv */ +#endif /* MS_WINDOWS */ +#endif /* HAVE_PUTENV */ + #ifdef HAVE_UNSETENV -PyDoc_STRVAR(posix_unsetenv__doc__, -"unsetenv(key)\n\n\ -Delete an environment variable."); +/*[clinic input] +os.unsetenv + name: FSConverter + / + +Delete an environment variable. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_unsetenv__doc__, +"unsetenv($module, name, /)\n" +"--\n" +"\n" +"Delete an environment variable."); + +#define OS_UNSETENV_METHODDEF \ + {"unsetenv", (PyCFunction)os_unsetenv, METH_VARARGS, os_unsetenv__doc__}, + +static PyObject * +os_unsetenv_impl(PyModuleDef *module, PyObject *name); static PyObject * -posix_unsetenv(PyObject *self, PyObject *args) +os_unsetenv(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *name = NULL; + + if (!PyArg_ParseTuple(args, + "O&:unsetenv", + PyUnicode_FSConverter, &name)) + goto exit; + return_value = os_unsetenv_impl(module, name); + +exit: + /* Cleanup for name */ + Py_XDECREF(name); + + return return_value; +} + +static PyObject * +os_unsetenv_impl(PyModuleDef *module, PyObject *name) +/*[clinic end generated code: output=91318c995f9a0767 input=2bb5288a599c7107]*/ { - PyObject *name; #ifndef HAVE_BROKEN_UNSETENV int err; #endif - if (!PyArg_ParseTuple(args, "O&:unsetenv", - - PyUnicode_FSConverter, &name)) - return NULL; - #ifdef HAVE_BROKEN_UNSETENV unsetenv(PyBytes_AS_STRING(name)); #else err = unsetenv(PyBytes_AS_STRING(name)); - if (err) { - Py_DECREF(name); + if (err) return posix_error(); - } #endif /* Remove the key from posix_putenv_garbage; @@ -8973,23 +13084,53 @@ posix_unsetenv(PyObject *self, PyObject *args) /* really not much we can do; just leak */ PyErr_Clear(); } - Py_DECREF(name); Py_RETURN_NONE; } -#endif /* unsetenv */ +#endif /* HAVE_UNSETENV */ + + +/*[clinic input] +os.strerror + + code: int + / + +Translate an error code to a message string. +[clinic start generated code]*/ -PyDoc_STRVAR(posix_strerror__doc__, -"strerror(code) -> string\n\n\ -Translate an error code to a message string."); +PyDoc_STRVAR(os_strerror__doc__, +"strerror($module, code, /)\n" +"--\n" +"\n" +"Translate an error code to a message string."); + +#define OS_STRERROR_METHODDEF \ + {"strerror", (PyCFunction)os_strerror, METH_VARARGS, os_strerror__doc__}, + +static PyObject * +os_strerror_impl(PyModuleDef *module, int code); static PyObject * -posix_strerror(PyObject *self, PyObject *args) +os_strerror(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; int code; - char *message; - if (!PyArg_ParseTuple(args, "i:strerror", &code)) - return NULL; - message = strerror(code); + + if (!PyArg_ParseTuple(args, + "i:strerror", + &code)) + goto exit; + return_value = os_strerror_impl(module, code); + +exit: + return return_value; +} + +static PyObject * +os_strerror_impl(PyModuleDef *module, int code) +/*[clinic end generated code: output=8665c70bb2ca4720 input=75a8673d97915a91]*/ +{ + char *message = strerror(code); if (message == NULL) { PyErr_SetString(PyExc_ValueError, "strerror() argument out of range"); @@ -9000,167 +13141,479 @@ posix_strerror(PyObject *self, PyObject *args) #ifdef HAVE_SYS_WAIT_H - #ifdef WCOREDUMP -PyDoc_STRVAR(posix_WCOREDUMP__doc__, -"WCOREDUMP(status) -> bool\n\n\ -Return True if the process returning 'status' was dumped to a core file."); +/*[clinic input] +os.WCOREDUMP -> bool + + status: int + / + +Return True if the process returning status was dumped to a core file. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_WCOREDUMP__doc__, +"WCOREDUMP($module, status, /)\n" +"--\n" +"\n" +"Return True if the process returning status was dumped to a core file."); + +#define OS_WCOREDUMP_METHODDEF \ + {"WCOREDUMP", (PyCFunction)os_WCOREDUMP, METH_VARARGS, os_WCOREDUMP__doc__}, + +static int +os_WCOREDUMP_impl(PyModuleDef *module, int status); static PyObject * -posix_WCOREDUMP(PyObject *self, PyObject *args) +os_WCOREDUMP(PyModuleDef *module, PyObject *args) { - WAIT_TYPE status; - WAIT_STATUS_INT(status) = 0; + PyObject *return_value = NULL; + int status; + int _return_value; - if (!PyArg_ParseTuple(args, "i:WCOREDUMP", &WAIT_STATUS_INT(status))) - return NULL; + if (!PyArg_ParseTuple(args, + "i:WCOREDUMP", + &status)) + goto exit; + _return_value = os_WCOREDUMP_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} - return PyBool_FromLong(WCOREDUMP(status)); +static int +os_WCOREDUMP_impl(PyModuleDef *module, int status) +/*[clinic end generated code: output=e04d55c09c299828 input=8b05e7ab38528d04]*/ +{ + WAIT_TYPE wait_status; + WAIT_STATUS_INT(wait_status) = status; + return WCOREDUMP(wait_status); } #endif /* WCOREDUMP */ + #ifdef WIFCONTINUED -PyDoc_STRVAR(posix_WIFCONTINUED__doc__, -"WIFCONTINUED(status) -> bool\n\n\ -Return True if the process returning 'status' was continued from a\n\ -job control stop."); +/*[clinic input] +os.WIFCONTINUED -> bool + + status: int + +Return True if a particular process was continued from a job control stop. + +Return True if the process returning status was continued from a +job control stop. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_WIFCONTINUED__doc__, +"WIFCONTINUED($module, /, status)\n" +"--\n" +"\n" +"Return True if a particular process was continued from a job control stop.\n" +"\n" +"Return True if the process returning status was continued from a\n" +"job control stop."); + +#define OS_WIFCONTINUED_METHODDEF \ + {"WIFCONTINUED", (PyCFunction)os_WIFCONTINUED, METH_VARARGS|METH_KEYWORDS, os_WIFCONTINUED__doc__}, + +static int +os_WIFCONTINUED_impl(PyModuleDef *module, int status); static PyObject * -posix_WIFCONTINUED(PyObject *self, PyObject *args) +os_WIFCONTINUED(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - WAIT_TYPE status; - WAIT_STATUS_INT(status) = 0; + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; - if (!PyArg_ParseTuple(args, "i:WCONTINUED", &WAIT_STATUS_INT(status))) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WIFCONTINUED", _keywords, + &status)) + goto exit; + _return_value = os_WIFCONTINUED_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} - return PyBool_FromLong(WIFCONTINUED(status)); +static int +os_WIFCONTINUED_impl(PyModuleDef *module, int status) +/*[clinic end generated code: output=9c4e6105a4520ab5 input=e777e7d38eb25bd9]*/ +{ + WAIT_TYPE wait_status; + WAIT_STATUS_INT(wait_status) = status; + return WIFCONTINUED(wait_status); } #endif /* WIFCONTINUED */ + #ifdef WIFSTOPPED -PyDoc_STRVAR(posix_WIFSTOPPED__doc__, -"WIFSTOPPED(status) -> bool\n\n\ -Return True if the process returning 'status' was stopped."); +/*[clinic input] +os.WIFSTOPPED -> bool + + status: int + +Return True if the process returning status was stopped. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_WIFSTOPPED__doc__, +"WIFSTOPPED($module, /, status)\n" +"--\n" +"\n" +"Return True if the process returning status was stopped."); + +#define OS_WIFSTOPPED_METHODDEF \ + {"WIFSTOPPED", (PyCFunction)os_WIFSTOPPED, METH_VARARGS|METH_KEYWORDS, os_WIFSTOPPED__doc__}, + +static int +os_WIFSTOPPED_impl(PyModuleDef *module, int status); static PyObject * -posix_WIFSTOPPED(PyObject *self, PyObject *args) +os_WIFSTOPPED(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - WAIT_TYPE status; - WAIT_STATUS_INT(status) = 0; + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; - if (!PyArg_ParseTuple(args, "i:WIFSTOPPED", &WAIT_STATUS_INT(status))) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WIFSTOPPED", _keywords, + &status)) + goto exit; + _return_value = os_WIFSTOPPED_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} - return PyBool_FromLong(WIFSTOPPED(status)); +static int +os_WIFSTOPPED_impl(PyModuleDef *module, int status) +/*[clinic end generated code: output=e0de2da8ec9593ff input=043cb7f1289ef904]*/ +{ + WAIT_TYPE wait_status; + WAIT_STATUS_INT(wait_status) = status; + return WIFSTOPPED(wait_status); } #endif /* WIFSTOPPED */ + #ifdef WIFSIGNALED -PyDoc_STRVAR(posix_WIFSIGNALED__doc__, -"WIFSIGNALED(status) -> bool\n\n\ -Return True if the process returning 'status' was terminated by a signal."); +/*[clinic input] +os.WIFSIGNALED -> bool -static PyObject * -posix_WIFSIGNALED(PyObject *self, PyObject *args) -{ - WAIT_TYPE status; - WAIT_STATUS_INT(status) = 0; + status: int - if (!PyArg_ParseTuple(args, "i:WIFSIGNALED", &WAIT_STATUS_INT(status))) - return NULL; +Return True if the process returning status was terminated by a signal. +[clinic start generated code]*/ - return PyBool_FromLong(WIFSIGNALED(status)); -} -#endif /* WIFSIGNALED */ +PyDoc_STRVAR(os_WIFSIGNALED__doc__, +"WIFSIGNALED($module, /, status)\n" +"--\n" +"\n" +"Return True if the process returning status was terminated by a signal."); -#ifdef WIFEXITED -PyDoc_STRVAR(posix_WIFEXITED__doc__, -"WIFEXITED(status) -> bool\n\n\ -Return true if the process returning 'status' exited using the exit()\n\ -system call."); +#define OS_WIFSIGNALED_METHODDEF \ + {"WIFSIGNALED", (PyCFunction)os_WIFSIGNALED, METH_VARARGS|METH_KEYWORDS, os_WIFSIGNALED__doc__}, + +static int +os_WIFSIGNALED_impl(PyModuleDef *module, int status); static PyObject * -posix_WIFEXITED(PyObject *self, PyObject *args) +os_WIFSIGNALED(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - WAIT_TYPE status; - WAIT_STATUS_INT(status) = 0; + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; - if (!PyArg_ParseTuple(args, "i:WIFEXITED", &WAIT_STATUS_INT(status))) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WIFSIGNALED", _keywords, + &status)) + goto exit; + _return_value = os_WIFSIGNALED_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); - return PyBool_FromLong(WIFEXITED(status)); +exit: + return return_value; } -#endif /* WIFEXITED */ - -#ifdef WEXITSTATUS -PyDoc_STRVAR(posix_WEXITSTATUS__doc__, -"WEXITSTATUS(status) -> integer\n\n\ -Return the process return code from 'status'."); -static PyObject * -posix_WEXITSTATUS(PyObject *self, PyObject *args) +static int +os_WIFSIGNALED_impl(PyModuleDef *module, int status) +/*[clinic end generated code: output=f14d106558f406be input=d55ba7cc9ce5dc43]*/ { - WAIT_TYPE status; - WAIT_STATUS_INT(status) = 0; + WAIT_TYPE wait_status; + WAIT_STATUS_INT(wait_status) = status; + return WIFSIGNALED(wait_status); +} +#endif /* WIFSIGNALED */ - if (!PyArg_ParseTuple(args, "i:WEXITSTATUS", &WAIT_STATUS_INT(status))) - return NULL; - return Py_BuildValue("i", WEXITSTATUS(status)); -} -#endif /* WEXITSTATUS */ +#ifdef WIFEXITED +/*[clinic input] +os.WIFEXITED -> bool -#ifdef WTERMSIG -PyDoc_STRVAR(posix_WTERMSIG__doc__, -"WTERMSIG(status) -> integer\n\n\ -Return the signal that terminated the process that provided the 'status'\n\ -value."); + status: int -static PyObject * -posix_WTERMSIG(PyObject *self, PyObject *args) -{ - WAIT_TYPE status; - WAIT_STATUS_INT(status) = 0; +Return True if the process returning status exited via the exit() system call. +[clinic start generated code]*/ - if (!PyArg_ParseTuple(args, "i:WTERMSIG", &WAIT_STATUS_INT(status))) - return NULL; +PyDoc_STRVAR(os_WIFEXITED__doc__, +"WIFEXITED($module, /, status)\n" +"--\n" +"\n" +"Return True if the process returning status exited via the exit() system call."); - return Py_BuildValue("i", WTERMSIG(status)); -} -#endif /* WTERMSIG */ +#define OS_WIFEXITED_METHODDEF \ + {"WIFEXITED", (PyCFunction)os_WIFEXITED, METH_VARARGS|METH_KEYWORDS, os_WIFEXITED__doc__}, -#ifdef WSTOPSIG -PyDoc_STRVAR(posix_WSTOPSIG__doc__, -"WSTOPSIG(status) -> integer\n\n\ -Return the signal that stopped the process that provided\n\ -the 'status' value."); +static int +os_WIFEXITED_impl(PyModuleDef *module, int status); static PyObject * -posix_WSTOPSIG(PyObject *self, PyObject *args) +os_WIFEXITED(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - WAIT_TYPE status; - WAIT_STATUS_INT(status) = 0; + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; - if (!PyArg_ParseTuple(args, "i:WSTOPSIG", &WAIT_STATUS_INT(status))) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WIFEXITED", _keywords, + &status)) + goto exit; + _return_value = os_WIFEXITED_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); - return Py_BuildValue("i", WSTOPSIG(status)); +exit: + return return_value; } -#endif /* WSTOPSIG */ -#endif /* HAVE_SYS_WAIT_H */ +static int +os_WIFEXITED_impl(PyModuleDef *module, int status) +/*[clinic end generated code: output=2f76087d53721255 input=d63775a6791586c0]*/ +{ + WAIT_TYPE wait_status; + WAIT_STATUS_INT(wait_status) = status; + return WIFEXITED(wait_status); +} +#endif /* WIFEXITED */ -#if defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H) -#ifdef _SCO_DS -/* SCO OpenServer 5.0 and later requires _SVID3 before it reveals the - needed definitions in sys/statvfs.h */ -#define _SVID3 -#endif -#include +#ifdef WEXITSTATUS +/*[clinic input] +os.WEXITSTATUS -> int -static PyObject* + status: int + +Return the process return code from status. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_WEXITSTATUS__doc__, +"WEXITSTATUS($module, /, status)\n" +"--\n" +"\n" +"Return the process return code from status."); + +#define OS_WEXITSTATUS_METHODDEF \ + {"WEXITSTATUS", (PyCFunction)os_WEXITSTATUS, METH_VARARGS|METH_KEYWORDS, os_WEXITSTATUS__doc__}, + +static int +os_WEXITSTATUS_impl(PyModuleDef *module, int status); + +static PyObject * +os_WEXITSTATUS(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WEXITSTATUS", _keywords, + &status)) + goto exit; + _return_value = os_WEXITSTATUS_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +static int +os_WEXITSTATUS_impl(PyModuleDef *module, int status) +/*[clinic end generated code: output=13b6c270e2a326b1 input=e1fb4944e377585b]*/ +{ + WAIT_TYPE wait_status; + WAIT_STATUS_INT(wait_status) = status; + return WEXITSTATUS(wait_status); +} +#endif /* WEXITSTATUS */ + + +#ifdef WTERMSIG +/*[clinic input] +os.WTERMSIG -> int + + status: int + +Return the signal that terminated the process that provided the status value. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_WTERMSIG__doc__, +"WTERMSIG($module, /, status)\n" +"--\n" +"\n" +"Return the signal that terminated the process that provided the status value."); + +#define OS_WTERMSIG_METHODDEF \ + {"WTERMSIG", (PyCFunction)os_WTERMSIG, METH_VARARGS|METH_KEYWORDS, os_WTERMSIG__doc__}, + +static int +os_WTERMSIG_impl(PyModuleDef *module, int status); + +static PyObject * +os_WTERMSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WTERMSIG", _keywords, + &status)) + goto exit; + _return_value = os_WTERMSIG_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +static int +os_WTERMSIG_impl(PyModuleDef *module, int status) +/*[clinic end generated code: output=bf1fd4b002d0a9ed input=727fd7f84ec3f243]*/ +{ + WAIT_TYPE wait_status; + WAIT_STATUS_INT(wait_status) = status; + return WTERMSIG(wait_status); +} +#endif /* WTERMSIG */ + + +#ifdef WSTOPSIG +/*[clinic input] +os.WSTOPSIG -> int + + status: int + +Return the signal that stopped the process that provided the status value. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_WSTOPSIG__doc__, +"WSTOPSIG($module, /, status)\n" +"--\n" +"\n" +"Return the signal that stopped the process that provided the status value."); + +#define OS_WSTOPSIG_METHODDEF \ + {"WSTOPSIG", (PyCFunction)os_WSTOPSIG, METH_VARARGS|METH_KEYWORDS, os_WSTOPSIG__doc__}, + +static int +os_WSTOPSIG_impl(PyModuleDef *module, int status); + +static PyObject * +os_WSTOPSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WSTOPSIG", _keywords, + &status)) + goto exit; + _return_value = os_WSTOPSIG_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +static int +os_WSTOPSIG_impl(PyModuleDef *module, int status) +/*[clinic end generated code: output=92e1647d29ee0549 input=46ebf1d1b293c5c1]*/ +{ + WAIT_TYPE wait_status; + WAIT_STATUS_INT(wait_status) = status; + return WSTOPSIG(wait_status); +} +#endif /* WSTOPSIG */ +#endif /* HAVE_SYS_WAIT_H */ + + +#ifndef OS_WCOREDUMP_METHODDEF +#define OS_WCOREDUMP_METHODDEF +#endif /* OS_WCOREDUMP_METHODDEF */ + +#ifndef OS_WIFCONTINUED_METHODDEF +#define OS_WIFCONTINUED_METHODDEF +#endif /* OS_WIFCONTINUED_METHODDEF */ + +#ifndef OS_WIFSTOPPED_METHODDEF +#define OS_WIFSTOPPED_METHODDEF +#endif /* OS_WIFSTOPPED_METHODDEF */ + +#ifndef OS_WIFSIGNALED_METHODDEF +#define OS_WIFSIGNALED_METHODDEF +#endif /* OS_WIFSIGNALED_METHODDEF */ + +#ifndef OS_WIFEXITED_METHODDEF +#define OS_WIFEXITED_METHODDEF +#endif /* OS_WIFEXITED_METHODDEF */ + +#ifndef OS_WEXITSTATUS_METHODDEF +#define OS_WEXITSTATUS_METHODDEF +#endif /* OS_WEXITSTATUS_METHODDEF */ + +#ifndef OS_WTERMSIG_METHODDEF +#define OS_WTERMSIG_METHODDEF +#endif /* OS_WTERMSIG_METHODDEF */ + +#ifndef OS_WSTOPSIG_METHODDEF +#define OS_WSTOPSIG_METHODDEF +#endif /* OS_WSTOPSIG_METHODDEF */ + + +#if defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H) +#ifdef _SCO_DS +/* SCO OpenServer 5.0 and later requires _SVID3 before it reveals the + needed definitions in sys/statvfs.h */ +#define _SVID3 +#endif +#include + +static PyObject* _pystatvfs_fromstructstatvfs(struct statvfs st) { PyObject *v = PyStructSequence_New(&StatVFSResultType); if (v == NULL) @@ -9203,104 +13656,192 @@ _pystatvfs_fromstructstatvfs(struct statvfs st) { return v; } -PyDoc_STRVAR(posix_fstatvfs__doc__, -"fstatvfs(fd) -> statvfs result\n\n\ -Perform an fstatvfs system call on the given fd.\n\ -Equivalent to statvfs(fd)."); + +/*[clinic input] +os.fstatvfs + fd: int + / + +Perform an fstatvfs system call on the given fd. + +Equivalent to statvfs(fd). +[clinic start generated code]*/ + +PyDoc_STRVAR(os_fstatvfs__doc__, +"fstatvfs($module, fd, /)\n" +"--\n" +"\n" +"Perform an fstatvfs system call on the given fd.\n" +"\n" +"Equivalent to statvfs(fd)."); + +#define OS_FSTATVFS_METHODDEF \ + {"fstatvfs", (PyCFunction)os_fstatvfs, METH_VARARGS, os_fstatvfs__doc__}, + +static PyObject * +os_fstatvfs_impl(PyModuleDef *module, int fd); + +static PyObject * +os_fstatvfs(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + + if (!PyArg_ParseTuple(args, + "i:fstatvfs", + &fd)) + goto exit; + return_value = os_fstatvfs_impl(module, fd); + +exit: + return return_value; +} static PyObject * -posix_fstatvfs(PyObject *self, PyObject *args) +os_fstatvfs_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=0e32bf07f946ec0d input=d8122243ac50975e]*/ { - int fd, res; + int result; struct statvfs st; - if (!PyArg_ParseTuple(args, "i:fstatvfs", &fd)) - return NULL; Py_BEGIN_ALLOW_THREADS - res = fstatvfs(fd, &st); + result = fstatvfs(fd, &st); Py_END_ALLOW_THREADS - if (res != 0) + if (result != 0) return posix_error(); return _pystatvfs_fromstructstatvfs(st); } -#endif /* HAVE_FSTATVFS && HAVE_SYS_STATVFS_H */ +#endif /* defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H) */ #if defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H) #include +/*[clinic input] +os.statvfs -PyDoc_STRVAR(posix_statvfs__doc__, -"statvfs(path)\n\n\ -Perform a statvfs system call on the given path.\n\ -\n\ -path may always be specified as a string.\n\ -On some platforms, path may also be specified as an open file descriptor.\n\ - If this functionality is unavailable, using it raises an exception."); + path: path_t(allow_fd='PATH_HAVE_FSTATVFS') + +Perform a statvfs system call on the given path. + +path may always be specified as a string. +On some platforms, path may also be specified as an open file descriptor. + If this functionality is unavailable, using it raises an exception. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_statvfs__doc__, +"statvfs($module, /, path)\n" +"--\n" +"\n" +"Perform a statvfs system call on the given path.\n" +"\n" +"path may always be specified as a string.\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception."); + +#define OS_STATVFS_METHODDEF \ + {"statvfs", (PyCFunction)os_statvfs, METH_VARARGS|METH_KEYWORDS, os_statvfs__doc__}, + +static PyObject * +os_statvfs_impl(PyModuleDef *module, path_t *path); static PyObject * -posix_statvfs(PyObject *self, PyObject *args, PyObject *kwargs) +os_statvfs(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - static char *keywords[] = {"path", NULL}; - path_t path; - int result; PyObject *return_value = NULL; - struct statvfs st; + static char *_keywords[] = {"path", NULL}; + path_t path = PATH_T_INITIALIZE("statvfs", "path", 0, PATH_HAVE_FSTATVFS); - memset(&path, 0, sizeof(path)); - path.function_name = "statvfs"; -#ifdef HAVE_FSTATVFS - path.allow_fd = 1; -#endif - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:statvfs", keywords, - path_converter, &path - )) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:statvfs", _keywords, + path_converter, &path)) + goto exit; + return_value = os_statvfs_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static PyObject * +os_statvfs_impl(PyModuleDef *module, path_t *path) +/*[clinic end generated code: output=00ff54983360b446 input=3f5c35791c669bd9]*/ +{ + int result; + struct statvfs st; Py_BEGIN_ALLOW_THREADS #ifdef HAVE_FSTATVFS - if (path.fd != -1) { + if (path->fd != -1) { #ifdef __APPLE__ /* handle weak-linking on Mac OS X 10.3 */ if (fstatvfs == NULL) { - fd_specified("statvfs", path.fd); - goto exit; + fd_specified("statvfs", path->fd); + return NULL; } #endif - result = fstatvfs(path.fd, &st); + result = fstatvfs(path->fd, &st); } else #endif - result = statvfs(path.narrow, &st); + result = statvfs(path->narrow, &st); Py_END_ALLOW_THREADS if (result) { - return_value = path_error(&path); - goto exit; + return path_error(path); } - return_value = _pystatvfs_fromstructstatvfs(st); + return _pystatvfs_fromstructstatvfs(st); +} +#endif /* defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H) */ + + +#ifdef MS_WINDOWS +/*[clinic input] +os._getdiskusage + + path: Py_UNICODE + +Return disk usage statistics about the given path as a (total, free) tuple. +[clinic start generated code]*/ + +PyDoc_STRVAR(os__getdiskusage__doc__, +"_getdiskusage($module, /, path)\n" +"--\n" +"\n" +"Return disk usage statistics about the given path as a (total, free) tuple."); + +#define OS__GETDISKUSAGE_METHODDEF \ + {"_getdiskusage", (PyCFunction)os__getdiskusage, METH_VARARGS|METH_KEYWORDS, os__getdiskusage__doc__}, + +static PyObject * +os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path); + +static PyObject * +os__getdiskusage(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + Py_UNICODE *path; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "u:_getdiskusage", _keywords, + &path)) + goto exit; + return_value = os__getdiskusage_impl(module, path); exit: - path_cleanup(&path); return return_value; } -#endif /* HAVE_STATVFS */ - -#ifdef MS_WINDOWS -PyDoc_STRVAR(win32__getdiskusage__doc__, -"_getdiskusage(path) -> (total, free)\n\n\ -Return disk usage statistics about the given path as (total, free) tuple."); static PyObject * -win32__getdiskusage(PyObject *self, PyObject *args) +os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path) +/*[clinic end generated code: output=054c972179b13708 input=6458133aed893c78]*/ { BOOL retval; ULARGE_INTEGER _, total, free; - const wchar_t *path; - - if (! PyArg_ParseTuple(args, "u", &path)) - return NULL; Py_BEGIN_ALLOW_THREADS retval = GetDiskFreeSpaceExW(path, &_, &total, &free); @@ -9310,7 +13851,7 @@ win32__getdiskusage(PyObject *self, PyObject *args) return Py_BuildValue("(LL)", total.QuadPart, free.QuadPart); } -#endif +#endif /* MS_WINDOWS */ /* This is used for fpathconf(), pathconf(), confstr() and sysconf(). @@ -9467,81 +14008,149 @@ conv_path_confname(PyObject *arg, int *valuep) } #endif + #ifdef HAVE_FPATHCONF -PyDoc_STRVAR(posix_fpathconf__doc__, -"fpathconf(fd, name) -> integer\n\n\ -Return the configuration limit name for the file descriptor fd.\n\ -If there is no limit, return -1."); +/*[clinic input] +os.fpathconf -> long -static PyObject * -posix_fpathconf(PyObject *self, PyObject *args) -{ - PyObject *result = NULL; - int name, fd; + fd: int + name: path_confname + / - if (PyArg_ParseTuple(args, "iO&:fpathconf", &fd, - conv_path_confname, &name)) { - long limit; +Return the configuration limit name for the file descriptor fd. - errno = 0; - limit = fpathconf(fd, name); - if (limit == -1 && errno != 0) - posix_error(); - else - result = PyLong_FromLong(limit); - } - return result; -} -#endif +If there is no limit, return -1. +[clinic start generated code]*/ +PyDoc_STRVAR(os_fpathconf__doc__, +"fpathconf($module, fd, name, /)\n" +"--\n" +"\n" +"Return the configuration limit name for the file descriptor fd.\n" +"\n" +"If there is no limit, return -1."); -#ifdef HAVE_PATHCONF -PyDoc_STRVAR(posix_pathconf__doc__, -"pathconf(path, name) -> integer\n\n\ -Return the configuration limit name for the file or directory path.\n\ -If there is no limit, return -1.\n\ -On some platforms, path may also be specified as an open file descriptor.\n\ - If this functionality is unavailable, using it raises an exception."); +#define OS_FPATHCONF_METHODDEF \ + {"fpathconf", (PyCFunction)os_fpathconf, METH_VARARGS, os_fpathconf__doc__}, + +static long +os_fpathconf_impl(PyModuleDef *module, int fd, int name); static PyObject * -posix_pathconf(PyObject *self, PyObject *args, PyObject *kwargs) +os_fpathconf(PyModuleDef *module, PyObject *args) { - path_t path; - PyObject *result = NULL; + PyObject *return_value = NULL; + int fd; int name; - static char *keywords[] = {"path", "name", NULL}; + long _return_value; - memset(&path, 0, sizeof(path)); - path.function_name = "pathconf"; -#ifdef HAVE_FPATHCONF - path.allow_fd = 1; -#endif - if (PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&:pathconf", keywords, - path_converter, &path, - conv_path_confname, &name)) { + if (!PyArg_ParseTuple(args, + "iO&:fpathconf", + &fd, conv_path_confname, &name)) + goto exit; + _return_value = os_fpathconf_impl(module, fd, name); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + return return_value; +} + +static long +os_fpathconf_impl(PyModuleDef *module, int fd, int name) +/*[clinic end generated code: output=3bf04b40e0523a8c input=5942a024d3777810]*/ +{ long limit; errno = 0; -#ifdef HAVE_FPATHCONF - if (path.fd != -1) - limit = fpathconf(path.fd, name); - else -#endif - limit = pathconf(path.narrow, name); - if (limit == -1 && errno != 0) { - if (errno == EINVAL) - /* could be a path or name problem */ - posix_error(); - else - result = path_error(&path); - } - else - result = PyLong_FromLong(limit); - } - path_cleanup(&path); - return result; + limit = fpathconf(fd, name); + if (limit == -1 && errno != 0) + posix_error(); + + return limit; } +#endif /* HAVE_FPATHCONF */ + + +#ifdef HAVE_PATHCONF +/*[clinic input] +os.pathconf -> long + path: path_t(allow_fd='PATH_HAVE_FPATHCONF') + name: path_confname + +Return the configuration limit name for the file or directory path. + +If there is no limit, return -1. +On some platforms, path may also be specified as an open file descriptor. + If this functionality is unavailable, using it raises an exception. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_pathconf__doc__, +"pathconf($module, /, path, name)\n" +"--\n" +"\n" +"Return the configuration limit name for the file or directory path.\n" +"\n" +"If there is no limit, return -1.\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception."); + +#define OS_PATHCONF_METHODDEF \ + {"pathconf", (PyCFunction)os_pathconf, METH_VARARGS|METH_KEYWORDS, os_pathconf__doc__}, + +static long +os_pathconf_impl(PyModuleDef *module, path_t *path, int name); + +static PyObject * +os_pathconf(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "name", NULL}; + path_t path = PATH_T_INITIALIZE("pathconf", "path", 0, PATH_HAVE_FPATHCONF); + int name; + long _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&:pathconf", _keywords, + path_converter, &path, conv_path_confname, &name)) + goto exit; + _return_value = os_pathconf_impl(module, &path, name); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +static long +os_pathconf_impl(PyModuleDef *module, path_t *path, int name) +/*[clinic end generated code: output=1a53e125b6cf63e4 input=bc3e2a985af27e5e]*/ +{ + long limit; + + errno = 0; +#ifdef HAVE_FPATHCONF + if (path->fd != -1) + limit = fpathconf(path->fd, name); + else #endif + limit = pathconf(path->narrow, name); + if (limit == -1 && errno != 0) { + if (errno == EINVAL) + /* could be a path or name problem */ + posix_error(); + else + path_error(path); + } + + return limit; +} +#endif /* HAVE_PATHCONF */ #ifdef HAVE_CONFSTR static struct constdef posix_constants_confstr[] = { @@ -9705,21 +14314,52 @@ conv_confstr_confname(PyObject *arg, int *valuep) / sizeof(struct constdef)); } -PyDoc_STRVAR(posix_confstr__doc__, -"confstr(name) -> string\n\n\ -Return a string-valued system configuration variable."); + +/*[clinic input] +os.confstr + + name: confstr_confname + / + +Return a string-valued system configuration variable. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_confstr__doc__, +"confstr($module, name, /)\n" +"--\n" +"\n" +"Return a string-valued system configuration variable."); + +#define OS_CONFSTR_METHODDEF \ + {"confstr", (PyCFunction)os_confstr, METH_VARARGS, os_confstr__doc__}, + +static PyObject * +os_confstr_impl(PyModuleDef *module, int name); static PyObject * -posix_confstr(PyObject *self, PyObject *args) +os_confstr(PyModuleDef *module, PyObject *args) { - PyObject *result = NULL; + PyObject *return_value = NULL; int name; + + if (!PyArg_ParseTuple(args, + "O&:confstr", + conv_confstr_confname, &name)) + goto exit; + return_value = os_confstr_impl(module, name); + +exit: + return return_value; +} + +static PyObject * +os_confstr_impl(PyModuleDef *module, int name) +/*[clinic end generated code: output=3f5e8aba9f8e3174 input=18fb4d0567242e65]*/ +{ + PyObject *result = NULL; char buffer[255]; size_t len; - if (!PyArg_ParseTuple(args, "O&:confstr", conv_confstr_confname, &name)) - return NULL; - errno = 0; len = confstr(name, buffer, sizeof(buffer)); if (len == 0) { @@ -9744,7 +14384,7 @@ posix_confstr(PyObject *self, PyObject *args) result = PyUnicode_DecodeFSDefaultAndSize(buffer, len-1); return result; } -#endif +#endif /* HAVE_CONFSTR */ #ifdef HAVE_SYSCONF @@ -10251,29 +14891,60 @@ conv_sysconf_confname(PyObject *arg, int *valuep) / sizeof(struct constdef)); } -PyDoc_STRVAR(posix_sysconf__doc__, -"sysconf(name) -> integer\n\n\ -Return an integer-valued system configuration variable."); + +/*[clinic input] +os.sysconf -> long + name: sysconf_confname + / + +Return an integer-valued system configuration variable. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_sysconf__doc__, +"sysconf($module, name, /)\n" +"--\n" +"\n" +"Return an integer-valued system configuration variable."); + +#define OS_SYSCONF_METHODDEF \ + {"sysconf", (PyCFunction)os_sysconf, METH_VARARGS, os_sysconf__doc__}, + +static long +os_sysconf_impl(PyModuleDef *module, int name); static PyObject * -posix_sysconf(PyObject *self, PyObject *args) +os_sysconf(PyModuleDef *module, PyObject *args) { - PyObject *result = NULL; + PyObject *return_value = NULL; int name; + long _return_value; - if (PyArg_ParseTuple(args, "O&:sysconf", conv_sysconf_confname, &name)) { - long value; + if (!PyArg_ParseTuple(args, + "O&:sysconf", + conv_sysconf_confname, &name)) + goto exit; + _return_value = os_sysconf_impl(module, name); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); - errno = 0; - value = sysconf(name); - if (value == -1 && errno != 0) - posix_error(); - else - result = PyLong_FromLong(value); - } - return result; +exit: + return return_value; } -#endif + +static long +os_sysconf_impl(PyModuleDef *module, int name) +/*[clinic end generated code: output=7b06dfdc472431e4 input=279e3430a33f29e4]*/ +{ + long value; + + errno = 0; + value = sysconf(name); + if (value == -1 && errno != 0) + posix_error(); + return value; +} +#endif /* HAVE_SYSCONF */ /* This code is used to ensure that the tables of configuration value names @@ -10350,13 +15021,39 @@ setup_confname_tables(PyObject *module) } -PyDoc_STRVAR(posix_abort__doc__, -"abort() -> does not return!\n\n\ -Abort the interpreter immediately. This 'dumps core' or otherwise fails\n\ -in the hardest way possible on the hosting operating system."); +/*[clinic input] +os.abort + +Abort the interpreter immediately. + +This function 'dumps core' or otherwise fails in the hardest way possible +on the hosting operating system. This function never returns. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_abort__doc__, +"abort($module, /)\n" +"--\n" +"\n" +"Abort the interpreter immediately.\n" +"\n" +"This function \'dumps core\' or otherwise fails in the hardest way possible\n" +"on the hosting operating system. This function never returns."); + +#define OS_ABORT_METHODDEF \ + {"abort", (PyCFunction)os_abort, METH_NOARGS, os_abort__doc__}, + +static PyObject * +os_abort_impl(PyModuleDef *module); + +static PyObject * +os_abort(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_abort_impl(module); +} static PyObject * -posix_abort(PyObject *self, PyObject *noargs) +os_abort_impl(PyModuleDef *module) +/*[clinic end generated code: output=cded2cc8c5453d3a input=cf2c7d98bc504047]*/ { abort(); /*NOTREACHED*/ @@ -10365,9 +15062,11 @@ posix_abort(PyObject *self, PyObject *noargs) } #ifdef MS_WINDOWS +/* AC 3.5: change to path_t? but that might change exceptions */ PyDoc_STRVAR(win32_startfile__doc__, -"startfile(filepath [, operation]) - Start a file with its associated\n\ -application.\n\ +"startfile(filepath [, operation])\n\ +\n\ +Start a file with its associated application.\n\ \n\ When \"operation\" is not specified or \"open\", this acts like\n\ double-clicking the file in Explorer, or giving the file name as an\n\ @@ -10457,17 +15156,45 @@ normal: Py_INCREF(Py_None); return Py_None; } -#endif +#endif /* MS_WINDOWS */ + #ifdef HAVE_GETLOADAVG -PyDoc_STRVAR(posix_getloadavg__doc__, -"getloadavg() -> (float, float, float)\n\n\ -Return the number of processes in the system run queue averaged over\n\ -the last 1, 5, and 15 minutes or raises OSError if the load average\n\ -was unobtainable"); +/*[clinic input] +os.getloadavg + +Return average recent system load information. + +Return the number of processes in the system run queue averaged over +the last 1, 5, and 15 minutes as a tuple of three floats. +Raises OSError if the load average was unobtainable. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getloadavg__doc__, +"getloadavg($module, /)\n" +"--\n" +"\n" +"Return average recent system load information.\n" +"\n" +"Return the number of processes in the system run queue averaged over\n" +"the last 1, 5, and 15 minutes as a tuple of three floats.\n" +"Raises OSError if the load average was unobtainable."); + +#define OS_GETLOADAVG_METHODDEF \ + {"getloadavg", (PyCFunction)os_getloadavg, METH_NOARGS, os_getloadavg__doc__}, + +static PyObject * +os_getloadavg_impl(PyModuleDef *module); + +static PyObject * +os_getloadavg(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getloadavg_impl(module); +} static PyObject * -posix_getloadavg(PyObject *self, PyObject *noargs) +os_getloadavg_impl(PyModuleDef *module) +/*[clinic end generated code: output=67593a92457d55af input=3d6d826b76d8a34e]*/ { double loadavg[3]; if (getloadavg(loadavg, 3)!=3) { @@ -10476,72 +15203,193 @@ posix_getloadavg(PyObject *self, PyObject *noargs) } else return Py_BuildValue("ddd", loadavg[0], loadavg[1], loadavg[2]); } -#endif +#endif /* HAVE_GETLOADAVG */ + + +/*[clinic input] +os.device_encoding + fd: int -PyDoc_STRVAR(device_encoding__doc__, -"device_encoding(fd) -> str\n\n\ -Return a string describing the encoding of the device\n\ -if the output is a terminal; else return None."); +Return a string describing the encoding of a terminal's file descriptor. + +The file descriptor must be attached to a terminal. +If the device is not a terminal, return None. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_device_encoding__doc__, +"device_encoding($module, /, fd)\n" +"--\n" +"\n" +"Return a string describing the encoding of a terminal\'s file descriptor.\n" +"\n" +"The file descriptor must be attached to a terminal.\n" +"If the device is not a terminal, return None."); + +#define OS_DEVICE_ENCODING_METHODDEF \ + {"device_encoding", (PyCFunction)os_device_encoding, METH_VARARGS|METH_KEYWORDS, os_device_encoding__doc__}, + +static PyObject * +os_device_encoding_impl(PyModuleDef *module, int fd); static PyObject * -device_encoding(PyObject *self, PyObject *args) +os_device_encoding(PyModuleDef *module, PyObject *args, PyObject *kwargs) { + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; int fd; - if (!PyArg_ParseTuple(args, "i:device_encoding", &fd)) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:device_encoding", _keywords, + &fd)) + goto exit; + return_value = os_device_encoding_impl(module, fd); + +exit: + return return_value; +} +static PyObject * +os_device_encoding_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=e9f8274d42f5cce3 input=9e1d4a42b66df312]*/ +{ return _Py_device_encoding(fd); } + #ifdef HAVE_SETRESUID -PyDoc_STRVAR(posix_setresuid__doc__, -"setresuid(ruid, euid, suid)\n\n\ -Set the current process's real, effective, and saved user ids."); +/*[clinic input] +os.setresuid -static PyObject* -posix_setresuid (PyObject *self, PyObject *args) + ruid: uid_t + euid: uid_t + suid: uid_t + / + +Set the current process's real, effective, and saved user ids. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setresuid__doc__, +"setresuid($module, ruid, euid, suid, /)\n" +"--\n" +"\n" +"Set the current process\'s real, effective, and saved user ids."); + +#define OS_SETRESUID_METHODDEF \ + {"setresuid", (PyCFunction)os_setresuid, METH_VARARGS, os_setresuid__doc__}, + +static PyObject * +os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid); + +static PyObject * +os_setresuid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + uid_t ruid; + uid_t euid; + uid_t suid; + + if (!PyArg_ParseTuple(args, + "O&O&O&:setresuid", + _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid, _Py_Uid_Converter, &suid)) + goto exit; + return_value = os_setresuid_impl(module, ruid, euid, suid); + +exit: + return return_value; +} + +static PyObject * +os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid) +/*[clinic end generated code: output=2e3457cfe7cd1f94 input=9e33cb79a82792f3]*/ { - /* We assume uid_t is no larger than a long. */ - uid_t ruid, euid, suid; - if (!PyArg_ParseTuple(args, "O&O&O&:setresuid", - _Py_Uid_Converter, &ruid, - _Py_Uid_Converter, &euid, - _Py_Uid_Converter, &suid)) - return NULL; if (setresuid(ruid, euid, suid) < 0) return posix_error(); Py_RETURN_NONE; } -#endif +#endif /* HAVE_SETRESUID */ + #ifdef HAVE_SETRESGID -PyDoc_STRVAR(posix_setresgid__doc__, -"setresgid(rgid, egid, sgid)\n\n\ -Set the current process's real, effective, and saved group ids."); +/*[clinic input] +os.setresgid -static PyObject* -posix_setresgid (PyObject *self, PyObject *args) + rgid: gid_t + egid: gid_t + sgid: gid_t + / + +Set the current process's real, effective, and saved group ids. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setresgid__doc__, +"setresgid($module, rgid, egid, sgid, /)\n" +"--\n" +"\n" +"Set the current process\'s real, effective, and saved group ids."); + +#define OS_SETRESGID_METHODDEF \ + {"setresgid", (PyCFunction)os_setresgid, METH_VARARGS, os_setresgid__doc__}, + +static PyObject * +os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid); + +static PyObject * +os_setresgid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + gid_t rgid; + gid_t egid; + gid_t sgid; + + if (!PyArg_ParseTuple(args, + "O&O&O&:setresgid", + _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid, _Py_Gid_Converter, &sgid)) + goto exit; + return_value = os_setresgid_impl(module, rgid, egid, sgid); + +exit: + return return_value; +} + +static PyObject * +os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid) +/*[clinic end generated code: output=8a7ee6c1f2482362 input=33e9e0785ef426b1]*/ { - gid_t rgid, egid, sgid; - if (!PyArg_ParseTuple(args, "O&O&O&:setresgid", - _Py_Gid_Converter, &rgid, - _Py_Gid_Converter, &egid, - _Py_Gid_Converter, &sgid)) - return NULL; if (setresgid(rgid, egid, sgid) < 0) return posix_error(); Py_RETURN_NONE; } -#endif +#endif /* HAVE_SETRESGID */ + #ifdef HAVE_GETRESUID -PyDoc_STRVAR(posix_getresuid__doc__, -"getresuid() -> (ruid, euid, suid)\n\n\ -Get tuple of the current process's real, effective, and saved user ids."); +/*[clinic input] +os.getresuid -static PyObject* -posix_getresuid (PyObject *self, PyObject *noargs) +Return a tuple of the current process's real, effective, and saved user ids. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getresuid__doc__, +"getresuid($module, /)\n" +"--\n" +"\n" +"Return a tuple of the current process\'s real, effective, and saved user ids."); + +#define OS_GETRESUID_METHODDEF \ + {"getresuid", (PyCFunction)os_getresuid, METH_NOARGS, os_getresuid__doc__}, + +static PyObject * +os_getresuid_impl(PyModuleDef *module); + +static PyObject * +os_getresuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getresuid_impl(module); +} + +static PyObject * +os_getresuid_impl(PyModuleDef *module) +/*[clinic end generated code: output=d0786686a6ef1320 input=41ccfa8e1f6517ad]*/ { uid_t ruid, euid, suid; if (getresuid(&ruid, &euid, &suid) < 0) @@ -10550,90 +15398,146 @@ posix_getresuid (PyObject *self, PyObject *noargs) _PyLong_FromUid(euid), _PyLong_FromUid(suid)); } -#endif +#endif /* HAVE_GETRESUID */ + #ifdef HAVE_GETRESGID -PyDoc_STRVAR(posix_getresgid__doc__, -"getresgid() -> (rgid, egid, sgid)\n\n\ -Get tuple of the current process's real, effective, and saved group ids."); +/*[clinic input] +os.getresgid -static PyObject* -posix_getresgid (PyObject *self, PyObject *noargs) +Return a tuple of the current process's real, effective, and saved group ids. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getresgid__doc__, +"getresgid($module, /)\n" +"--\n" +"\n" +"Return a tuple of the current process\'s real, effective, and saved group ids."); + +#define OS_GETRESGID_METHODDEF \ + {"getresgid", (PyCFunction)os_getresgid, METH_NOARGS, os_getresgid__doc__}, + +static PyObject * +os_getresgid_impl(PyModuleDef *module); + +static PyObject * +os_getresgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getresgid_impl(module); +} + +static PyObject * +os_getresgid_impl(PyModuleDef *module) +/*[clinic end generated code: output=05249ac795fa759f input=517e68db9ca32df6]*/ { - uid_t rgid, egid, sgid; + gid_t rgid, egid, sgid; if (getresgid(&rgid, &egid, &sgid) < 0) return posix_error(); return Py_BuildValue("(NNN)", _PyLong_FromGid(rgid), _PyLong_FromGid(egid), _PyLong_FromGid(sgid)); } -#endif +#endif /* HAVE_GETRESGID */ + #ifdef USE_XATTRS +/*[clinic input] +os.getxattr -PyDoc_STRVAR(posix_getxattr__doc__, -"getxattr(path, attribute, *, follow_symlinks=True) -> value\n\n\ -Return the value of extended attribute attribute on path.\n\ -\n\ -path may be either a string or an open file descriptor.\n\ -If follow_symlinks is False, and the last element of the path is a symbolic\n\ - link, getxattr will examine the symbolic link itself instead of the file\n\ - the link points to."); + path: path_t(allow_fd=True) + attribute: path_t + * + follow_symlinks: bool = True + +Return the value of extended attribute attribute on path. + +path may be either a string or an open file descriptor. +If follow_symlinks is False, and the last element of the path is a symbolic + link, getxattr will examine the symbolic link itself instead of the file + the link points to. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_getxattr__doc__, +"getxattr($module, /, path, attribute, *, follow_symlinks=True)\n" +"--\n" +"\n" +"Return the value of extended attribute attribute on path.\n" +"\n" +"path may be either a string or an open file descriptor.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, getxattr will examine the symbolic link itself instead of the file\n" +" the link points to."); + +#define OS_GETXATTR_METHODDEF \ + {"getxattr", (PyCFunction)os_getxattr, METH_VARARGS|METH_KEYWORDS, os_getxattr__doc__}, static PyObject * -posix_getxattr(PyObject *self, PyObject *args, PyObject *kwargs) +os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks); + +static PyObject * +os_getxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; - path_t attribute; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("getxattr", "path", 0, 1); + path_t attribute = PATH_T_INITIALIZE("getxattr", "attribute", 0, 0); int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|$p:getxattr", _keywords, + path_converter, &path, path_converter, &attribute, &follow_symlinks)) + goto exit; + return_value = os_getxattr_impl(module, &path, &attribute, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + /* Cleanup for attribute */ + path_cleanup(&attribute); + + return return_value; +} + +static PyObject * +os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks) +/*[clinic end generated code: output=bbc9454fe2b9ea86 input=8c8ea3bab78d89c2]*/ +{ + Py_ssize_t i; PyObject *buffer = NULL; - int i; - static char *keywords[] = {"path", "attribute", "follow_symlinks", NULL}; - memset(&path, 0, sizeof(path)); - memset(&attribute, 0, sizeof(attribute)); - path.function_name = "getxattr"; - attribute.function_name = "getxattr"; - path.allow_fd = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$p:getxattr", keywords, - path_converter, &path, - path_converter, &attribute, - &follow_symlinks)) + if (fd_and_follow_symlinks_invalid("getxattr", path->fd, follow_symlinks)) return NULL; - if (fd_and_follow_symlinks_invalid("getxattr", path.fd, follow_symlinks)) - goto exit; - for (i = 0; ; i++) { void *ptr; ssize_t result; static Py_ssize_t buffer_sizes[] = {128, XATTR_SIZE_MAX, 0}; Py_ssize_t buffer_size = buffer_sizes[i]; if (!buffer_size) { - path_error(&path); - goto exit; + path_error(path); + return NULL; } buffer = PyBytes_FromStringAndSize(NULL, buffer_size); if (!buffer) - goto exit; + return NULL; ptr = PyBytes_AS_STRING(buffer); Py_BEGIN_ALLOW_THREADS; - if (path.fd >= 0) - result = fgetxattr(path.fd, attribute.narrow, ptr, buffer_size); + if (path->fd >= 0) + result = fgetxattr(path->fd, attribute->narrow, ptr, buffer_size); else if (follow_symlinks) - result = getxattr(path.narrow, attribute.narrow, ptr, buffer_size); + result = getxattr(path->narrow, attribute->narrow, ptr, buffer_size); else - result = lgetxattr(path.narrow, attribute.narrow, ptr, buffer_size); + result = lgetxattr(path->narrow, attribute->narrow, ptr, buffer_size); Py_END_ALLOW_THREADS; if (result < 0) { Py_DECREF(buffer); - buffer = NULL; if (errno == ERANGE) continue; - path_error(&path); - goto exit; + path_error(path); + return NULL; } if (result != buffer_size) { @@ -10643,168 +15547,259 @@ posix_getxattr(PyObject *self, PyObject *args, PyObject *kwargs) break; } -exit: - path_cleanup(&path); - path_cleanup(&attribute); return buffer; } -PyDoc_STRVAR(posix_setxattr__doc__, -"setxattr(path, attribute, value, flags=0, *, follow_symlinks=True)\n\n\ -Set extended attribute attribute on path to value.\n\ -path may be either a string or an open file descriptor.\n\ -If follow_symlinks is False, and the last element of the path is a symbolic\n\ - link, setxattr will modify the symbolic link itself instead of the file\n\ - the link points to."); + +/*[clinic input] +os.setxattr + + path: path_t(allow_fd=True) + attribute: path_t + value: Py_buffer + flags: int = 0 + * + follow_symlinks: bool = True + +Set extended attribute attribute on path to value. + +path may be either a string or an open file descriptor. +If follow_symlinks is False, and the last element of the path is a symbolic + link, setxattr will modify the symbolic link itself instead of the file + the link points to. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_setxattr__doc__, +"setxattr($module, /, path, attribute, value, flags=0, *,\n" +" follow_symlinks=True)\n" +"--\n" +"\n" +"Set extended attribute attribute on path to value.\n" +"\n" +"path may be either a string or an open file descriptor.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, setxattr will modify the symbolic link itself instead of the file\n" +" the link points to."); + +#define OS_SETXATTR_METHODDEF \ + {"setxattr", (PyCFunction)os_setxattr, METH_VARARGS|METH_KEYWORDS, os_setxattr__doc__}, + +static PyObject * +os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks); static PyObject * -posix_setxattr(PyObject *self, PyObject *args, PyObject *kwargs) +os_setxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - path_t path; - path_t attribute; - Py_buffer value; + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "attribute", "value", "flags", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("setxattr", "path", 0, 1); + path_t attribute = PATH_T_INITIALIZE("setxattr", "attribute", 0, 0); + Py_buffer value = {NULL, NULL}; int flags = 0; int follow_symlinks = 1; - int result; - PyObject *return_value = NULL; - static char *keywords[] = {"path", "attribute", "value", - "flags", "follow_symlinks", NULL}; - - memset(&path, 0, sizeof(path)); - path.function_name = "setxattr"; - path.allow_fd = 1; - memset(&attribute, 0, sizeof(attribute)); - memset(&value, 0, sizeof(value)); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&y*|i$p:setxattr", - keywords, - path_converter, &path, - path_converter, &attribute, - &value, &flags, - &follow_symlinks)) - return NULL; - if (fd_and_follow_symlinks_invalid("setxattr", path.fd, follow_symlinks)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&y*|i$p:setxattr", _keywords, + path_converter, &path, path_converter, &attribute, &value, &flags, &follow_symlinks)) goto exit; + return_value = os_setxattr_impl(module, &path, &attribute, &value, flags, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + /* Cleanup for attribute */ + path_cleanup(&attribute); + /* Cleanup for value */ + if (value.obj) + PyBuffer_Release(&value); + + return return_value; +} + +static PyObject * +os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks) +/*[clinic end generated code: output=2ff845d8e024b218 input=f0d26833992015c2]*/ +{ + ssize_t result; + + if (fd_and_follow_symlinks_invalid("setxattr", path->fd, follow_symlinks)) + return NULL; Py_BEGIN_ALLOW_THREADS; - if (path.fd > -1) - result = fsetxattr(path.fd, attribute.narrow, - value.buf, value.len, flags); + if (path->fd > -1) + result = fsetxattr(path->fd, attribute->narrow, + value->buf, value->len, flags); else if (follow_symlinks) - result = setxattr(path.narrow, attribute.narrow, - value.buf, value.len, flags); + result = setxattr(path->narrow, attribute->narrow, + value->buf, value->len, flags); else - result = lsetxattr(path.narrow, attribute.narrow, - value.buf, value.len, flags); + result = lsetxattr(path->narrow, attribute->narrow, + value->buf, value->len, flags); Py_END_ALLOW_THREADS; if (result) { - return_value = path_error(&path); - goto exit; + path_error(path); + return NULL; } - return_value = Py_None; - Py_INCREF(return_value); + Py_RETURN_NONE; +} + + +/*[clinic input] +os.removexattr + + path: path_t(allow_fd=True) + attribute: path_t + * + follow_symlinks: bool = True + +Remove extended attribute attribute on path. + +path may be either a string or an open file descriptor. +If follow_symlinks is False, and the last element of the path is a symbolic + link, removexattr will modify the symbolic link itself instead of the file + the link points to. + +[clinic start generated code]*/ + +PyDoc_STRVAR(os_removexattr__doc__, +"removexattr($module, /, path, attribute, *, follow_symlinks=True)\n" +"--\n" +"\n" +"Remove extended attribute attribute on path.\n" +"\n" +"path may be either a string or an open file descriptor.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, removexattr will modify the symbolic link itself instead of the file\n" +" the link points to."); + +#define OS_REMOVEXATTR_METHODDEF \ + {"removexattr", (PyCFunction)os_removexattr, METH_VARARGS|METH_KEYWORDS, os_removexattr__doc__}, + +static PyObject * +os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks); + +static PyObject * +os_removexattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("removexattr", "path", 0, 1); + path_t attribute = PATH_T_INITIALIZE("removexattr", "attribute", 0, 0); + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|$p:removexattr", _keywords, + path_converter, &path, path_converter, &attribute, &follow_symlinks)) + goto exit; + return_value = os_removexattr_impl(module, &path, &attribute, follow_symlinks); exit: + /* Cleanup for path */ path_cleanup(&path); + /* Cleanup for attribute */ path_cleanup(&attribute); - PyBuffer_Release(&value); return return_value; } -PyDoc_STRVAR(posix_removexattr__doc__, -"removexattr(path, attribute, *, follow_symlinks=True)\n\n\ -Remove extended attribute attribute on path.\n\ -path may be either a string or an open file descriptor.\n\ -If follow_symlinks is False, and the last element of the path is a symbolic\n\ - link, removexattr will modify the symbolic link itself instead of the file\n\ - the link points to."); - static PyObject * -posix_removexattr(PyObject *self, PyObject *args, PyObject *kwargs) +os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks) +/*[clinic end generated code: output=8dfc715bf607c4cf input=cdb54834161e3329]*/ { - path_t path; - path_t attribute; - int follow_symlinks = 1; - int result; - PyObject *return_value = NULL; - static char *keywords[] = {"path", "attribute", "follow_symlinks", NULL}; + ssize_t result; - memset(&path, 0, sizeof(path)); - path.function_name = "removexattr"; - memset(&attribute, 0, sizeof(attribute)); - attribute.function_name = "removexattr"; - path.allow_fd = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$p:removexattr", - keywords, - path_converter, &path, - path_converter, &attribute, - &follow_symlinks)) + if (fd_and_follow_symlinks_invalid("removexattr", path->fd, follow_symlinks)) return NULL; - if (fd_and_follow_symlinks_invalid("removexattr", path.fd, follow_symlinks)) - goto exit; - Py_BEGIN_ALLOW_THREADS; - if (path.fd > -1) - result = fremovexattr(path.fd, attribute.narrow); + if (path->fd > -1) + result = fremovexattr(path->fd, attribute->narrow); else if (follow_symlinks) - result = removexattr(path.narrow, attribute.narrow); + result = removexattr(path->narrow, attribute->narrow); else - result = lremovexattr(path.narrow, attribute.narrow); + result = lremovexattr(path->narrow, attribute->narrow); Py_END_ALLOW_THREADS; if (result) { - return_value = path_error(&path); - goto exit; + return path_error(path); } - return_value = Py_None; - Py_INCREF(return_value); + Py_RETURN_NONE; +} + + +/*[clinic input] +os.listxattr + + path: path_t(allow_fd=True, nullable=True) = None + * + follow_symlinks: bool = True + +Return a list of extended attributes on path. + +path may be either None, a string, or an open file descriptor. +if path is None, listxattr will examine the current directory. +If follow_symlinks is False, and the last element of the path is a symbolic + link, listxattr will examine the symbolic link itself instead of the file + the link points to. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_listxattr__doc__, +"listxattr($module, /, path=None, *, follow_symlinks=True)\n" +"--\n" +"\n" +"Return a list of extended attributes on path.\n" +"\n" +"path may be either None, a string, or an open file descriptor.\n" +"if path is None, listxattr will examine the current directory.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, listxattr will examine the symbolic link itself instead of the file\n" +" the link points to."); + +#define OS_LISTXATTR_METHODDEF \ + {"listxattr", (PyCFunction)os_listxattr, METH_VARARGS|METH_KEYWORDS, os_listxattr__doc__}, + +static PyObject * +os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks); + +static PyObject * +os_listxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("listxattr", "path", 1, 1); + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O&$p:listxattr", _keywords, + path_converter, &path, &follow_symlinks)) + goto exit; + return_value = os_listxattr_impl(module, &path, follow_symlinks); exit: + /* Cleanup for path */ path_cleanup(&path); - path_cleanup(&attribute); return return_value; } -PyDoc_STRVAR(posix_listxattr__doc__, -"listxattr(path='.', *, follow_symlinks=True)\n\n\ -Return a list of extended attributes on path.\n\ -\n\ -path may be either None, a string, or an open file descriptor.\n\ -if path is None, listxattr will examine the current directory.\n\ -If follow_symlinks is False, and the last element of the path is a symbolic\n\ - link, listxattr will examine the symbolic link itself instead of the file\n\ - the link points to."); - static PyObject * -posix_listxattr(PyObject *self, PyObject *args, PyObject *kwargs) +os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks) +/*[clinic end generated code: output=3104cafda1a3d887 input=08cca53ac0b07c13]*/ { - path_t path; - int follow_symlinks = 1; Py_ssize_t i; PyObject *result = NULL; + const char *name; char *buffer = NULL; - char *name; - static char *keywords[] = {"path", "follow_symlinks", NULL}; - memset(&path, 0, sizeof(path)); - path.function_name = "listxattr"; - path.allow_fd = 1; - path.fd = -1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&$p:listxattr", keywords, - path_converter, &path, - &follow_symlinks)) - return NULL; - - if (fd_and_follow_symlinks_invalid("listxattr", path.fd, follow_symlinks)) + if (fd_and_follow_symlinks_invalid("listxattr", path->fd, follow_symlinks)) goto exit; - name = path.narrow ? path.narrow : "."; + name = path->narrow ? path->narrow : "."; + for (i = 0; ; i++) { char *start, *trace, *end; ssize_t length; @@ -10812,7 +15807,7 @@ posix_listxattr(PyObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t buffer_size = buffer_sizes[i]; if (!buffer_size) { /* ERANGE */ - path_error(&path); + path_error(path); break; } buffer = PyMem_MALLOC(buffer_size); @@ -10822,8 +15817,8 @@ posix_listxattr(PyObject *self, PyObject *args, PyObject *kwargs) } Py_BEGIN_ALLOW_THREADS; - if (path.fd > -1) - length = flistxattr(path.fd, buffer, buffer_size); + if (path->fd > -1) + length = flistxattr(path->fd, buffer, buffer_size); else if (follow_symlinks) length = listxattr(name, buffer, buffer_size); else @@ -10836,7 +15831,7 @@ posix_listxattr(PyObject *self, PyObject *args, PyObject *kwargs) buffer = NULL; continue; } - path_error(&path); + path_error(path); break; } @@ -10869,43 +15864,71 @@ posix_listxattr(PyObject *self, PyObject *args, PyObject *kwargs) break; } exit: - path_cleanup(&path); if (buffer) PyMem_FREE(buffer); return result; } - #endif /* USE_XATTRS */ -PyDoc_STRVAR(posix_urandom__doc__, -"urandom(n) -> str\n\n\ -Return n random bytes suitable for cryptographic use."); +/*[clinic input] +os.urandom + + size: Py_ssize_t + / + +Return a bytes object containing random bytes suitable for cryptographic use. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_urandom__doc__, +"urandom($module, size, /)\n" +"--\n" +"\n" +"Return a bytes object containing random bytes suitable for cryptographic use."); + +#define OS_URANDOM_METHODDEF \ + {"urandom", (PyCFunction)os_urandom, METH_VARARGS, os_urandom__doc__}, + +static PyObject * +os_urandom_impl(PyModuleDef *module, Py_ssize_t size); static PyObject * -posix_urandom(PyObject *self, PyObject *args) +os_urandom(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; Py_ssize_t size; - PyObject *result; - int ret; - /* Read arguments */ - if (!PyArg_ParseTuple(args, "n:urandom", &size)) - return NULL; + if (!PyArg_ParseTuple(args, + "n:urandom", + &size)) + goto exit; + return_value = os_urandom_impl(module, size); + +exit: + return return_value; +} + +static PyObject * +os_urandom_impl(PyModuleDef *module, Py_ssize_t size) +/*[clinic end generated code: output=5dbff582cab94cb9 input=4067cdb1b6776c29]*/ +{ + PyObject *bytes; + int result; + if (size < 0) return PyErr_Format(PyExc_ValueError, "negative argument not allowed"); - result = PyBytes_FromStringAndSize(NULL, size); - if (result == NULL) + bytes = PyBytes_FromStringAndSize(NULL, size); + if (bytes == NULL) return NULL; - ret = _PyOS_URandom(PyBytes_AS_STRING(result), - PyBytes_GET_SIZE(result)); - if (ret == -1) { - Py_DECREF(result); + result = _PyOS_URandom(PyBytes_AS_STRING(bytes), + PyBytes_GET_SIZE(bytes)); + if (result == -1) { + Py_DECREF(bytes); return NULL; } - return result; + return bytes; } /* Terminal size querying */ @@ -10929,6 +15952,7 @@ static PyStructSequence_Desc TerminalSize_desc = { }; #if defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL) +/* AC 3.5: fd should accept None */ PyDoc_STRVAR(termsize__doc__, "Return the size of the terminal window as (columns, lines).\n" \ "\n" \ @@ -11014,13 +16038,34 @@ get_terminal_size(PyObject *self, PyObject *args) } #endif /* defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL) */ -PyDoc_STRVAR(posix_cpu_count__doc__, -"cpu_count() -> integer\n\n\ -Return the number of CPUs in the system, or None if this value cannot be\n\ -established."); + +/*[clinic input] +os.cpu_count + +Return the number of CPUs in the system; return None if indeterminable. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_cpu_count__doc__, +"cpu_count($module, /)\n" +"--\n" +"\n" +"Return the number of CPUs in the system; return None if indeterminable."); + +#define OS_CPU_COUNT_METHODDEF \ + {"cpu_count", (PyCFunction)os_cpu_count, METH_NOARGS, os_cpu_count__doc__}, + +static PyObject * +os_cpu_count_impl(PyModuleDef *module); + +static PyObject * +os_cpu_count(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_cpu_count_impl(module); +} static PyObject * -posix_cpu_count(PyObject *self) +os_cpu_count_impl(PyModuleDef *module) +/*[clinic end generated code: output=92e2a4a729eb7740 input=d55e2f8f3823a628]*/ { int ncpu = 0; #ifdef MS_WINDOWS @@ -11049,102 +16094,218 @@ posix_cpu_count(PyObject *self) Py_RETURN_NONE; } -PyDoc_STRVAR(get_inheritable__doc__, - "get_inheritable(fd) -> bool\n" \ - "\n" \ - "Get the close-on-exe flag of the specified file descriptor."); -static PyObject* -posix_get_inheritable(PyObject *self, PyObject *args) -{ - int fd; - int inheritable; +/*[clinic input] +os.get_inheritable -> bool - if (!PyArg_ParseTuple(args, "i:get_inheritable", &fd)) - return NULL; + fd: int + / - if (!_PyVerify_fd(fd)) - return posix_error(); +Get the close-on-exe flag of the specified file descriptor. +[clinic start generated code]*/ - inheritable = _Py_get_inheritable(fd); - if (inheritable < 0) - return NULL; - return PyBool_FromLong(inheritable); -} +PyDoc_STRVAR(os_get_inheritable__doc__, +"get_inheritable($module, fd, /)\n" +"--\n" +"\n" +"Get the close-on-exe flag of the specified file descriptor."); -PyDoc_STRVAR(set_inheritable__doc__, - "set_inheritable(fd, inheritable)\n" \ - "\n" \ - "Set the inheritable flag of the specified file descriptor."); +#define OS_GET_INHERITABLE_METHODDEF \ + {"get_inheritable", (PyCFunction)os_get_inheritable, METH_VARARGS, os_get_inheritable__doc__}, -static PyObject* -posix_set_inheritable(PyObject *self, PyObject *args) +static int +os_get_inheritable_impl(PyModuleDef *module, int fd); + +static PyObject * +os_get_inheritable(PyModuleDef *module, PyObject *args) { - int fd, inheritable; + PyObject *return_value = NULL; + int fd; + int _return_value; - if (!PyArg_ParseTuple(args, "ii:set_inheritable", &fd, &inheritable)) - return NULL; + if (!PyArg_ParseTuple(args, + "i:get_inheritable", + &fd)) + goto exit; + _return_value = os_get_inheritable_impl(module, fd); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); - if (!_PyVerify_fd(fd)) - return posix_error(); +exit: + return return_value; +} - if (_Py_set_inheritable(fd, inheritable, NULL) < 0) - return NULL; - Py_RETURN_NONE; +static int +os_get_inheritable_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=261d1dd2b0dbdc35 input=89ac008dc9ab6b95]*/ +{ + if (!_PyVerify_fd(fd)){ + posix_error(); + return -1; + } + + return _Py_get_inheritable(fd); } -#ifdef MS_WINDOWS -PyDoc_STRVAR(get_handle_inheritable__doc__, - "get_handle_inheritable(fd) -> bool\n" \ - "\n" \ - "Get the close-on-exe flag of the specified file descriptor."); +/*[clinic input] +os.set_inheritable + fd: int + inheritable: int + / -static PyObject* -posix_get_handle_inheritable(PyObject *self, PyObject *args) +Set the inheritable flag of the specified file descriptor. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_set_inheritable__doc__, +"set_inheritable($module, fd, inheritable, /)\n" +"--\n" +"\n" +"Set the inheritable flag of the specified file descriptor."); + +#define OS_SET_INHERITABLE_METHODDEF \ + {"set_inheritable", (PyCFunction)os_set_inheritable, METH_VARARGS, os_set_inheritable__doc__}, + +static PyObject * +os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable); + +static PyObject * +os_set_inheritable(PyModuleDef *module, PyObject *args) { - Py_intptr_t handle; - DWORD flags; + PyObject *return_value = NULL; + int fd; + int inheritable; + + if (!PyArg_ParseTuple(args, + "ii:set_inheritable", + &fd, &inheritable)) + goto exit; + return_value = os_set_inheritable_impl(module, fd, inheritable); - if (!PyArg_ParseTuple(args, _Py_PARSE_INTPTR ":get_handle_inheritable", &handle)) +exit: + return return_value; +} + +static PyObject * +os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable) +/*[clinic end generated code: output=64dfe5e15c906539 input=9ceaead87a1e2402]*/ +{ + if (!_PyVerify_fd(fd)) + return posix_error(); + + if (_Py_set_inheritable(fd, inheritable, NULL) < 0) return NULL; + Py_RETURN_NONE; +} + + +#ifdef MS_WINDOWS +/*[clinic input] +os.get_handle_inheritable -> bool + handle: Py_intptr_t + / + +Get the close-on-exe flag of the specified file descriptor. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_get_handle_inheritable__doc__, +"get_handle_inheritable($module, handle, /)\n" +"--\n" +"\n" +"Get the close-on-exe flag of the specified file descriptor."); + +#define OS_GET_HANDLE_INHERITABLE_METHODDEF \ + {"get_handle_inheritable", (PyCFunction)os_get_handle_inheritable, METH_VARARGS, os_get_handle_inheritable__doc__}, + +static int +os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle); + +static PyObject * +os_get_handle_inheritable(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_intptr_t handle; + int _return_value; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_INTPTR ":get_handle_inheritable", + &handle)) + goto exit; + _return_value = os_get_handle_inheritable_impl(module, handle); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} + +static int +os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle) +/*[clinic end generated code: output=d5bf9d86900bf457 input=5f7759443aae3dc5]*/ +{ + DWORD flags; if (!GetHandleInformation((HANDLE)handle, &flags)) { PyErr_SetFromWindowsErr(0); - return NULL; + return -1; } - return PyBool_FromLong(flags & HANDLE_FLAG_INHERIT); + return flags & HANDLE_FLAG_INHERIT; } -PyDoc_STRVAR(set_handle_inheritable__doc__, - "set_handle_inheritable(fd, inheritable)\n" \ - "\n" \ - "Set the inheritable flag of the specified handle."); -static PyObject* -posix_set_handle_inheritable(PyObject *self, PyObject *args) +/*[clinic input] +os.set_handle_inheritable + handle: Py_intptr_t + inheritable: bool + / + +Set the inheritable flag of the specified handle. +[clinic start generated code]*/ + +PyDoc_STRVAR(os_set_handle_inheritable__doc__, +"set_handle_inheritable($module, handle, inheritable, /)\n" +"--\n" +"\n" +"Set the inheritable flag of the specified handle."); + +#define OS_SET_HANDLE_INHERITABLE_METHODDEF \ + {"set_handle_inheritable", (PyCFunction)os_set_handle_inheritable, METH_VARARGS, os_set_handle_inheritable__doc__}, + +static PyObject * +os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, int inheritable); + +static PyObject * +os_set_handle_inheritable(PyModuleDef *module, PyObject *args) { - int inheritable = 1; + PyObject *return_value = NULL; Py_intptr_t handle; - DWORD flags; + int inheritable; - if (!PyArg_ParseTuple(args, _Py_PARSE_INTPTR "i:set_handle_inheritable", - &handle, &inheritable)) - return NULL; + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_INTPTR "p:set_handle_inheritable", + &handle, &inheritable)) + goto exit; + return_value = os_set_handle_inheritable_impl(module, handle, inheritable); - if (inheritable) - flags = HANDLE_FLAG_INHERIT; - else - flags = 0; +exit: + return return_value; +} + +static PyObject * +os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, int inheritable) +/*[clinic end generated code: output=ee5fcc6d9f0d4f8b input=e64b2b2730469def]*/ +{ + DWORD flags = inheritable ? HANDLE_FLAG_INHERIT : 0; if (!SetHandleInformation((HANDLE)handle, HANDLE_FLAG_INHERIT, flags)) { PyErr_SetFromWindowsErr(0); return NULL; } Py_RETURN_NONE; } -#endif /* MS_WINDOWS */ - +#endif /* MS_WINDOWS */ #ifndef MS_WINDOWS PyDoc_STRVAR(get_blocking__doc__, @@ -11203,7 +16364,479 @@ dump buffer #ifndef OS_TTYNAME_METHODDEF #define OS_TTYNAME_METHODDEF #endif /* !defined(OS_TTYNAME_METHODDEF) */ -/*[clinic end generated code: output=5d071bbc8f49ea12 input=524ce2e021e4eba6]*/ + +#ifndef OS_CTERMID_METHODDEF + #define OS_CTERMID_METHODDEF +#endif /* !defined(OS_CTERMID_METHODDEF) */ + +#ifndef OS_FCHDIR_METHODDEF + #define OS_FCHDIR_METHODDEF +#endif /* !defined(OS_FCHDIR_METHODDEF) */ + +#ifndef OS_FCHMOD_METHODDEF + #define OS_FCHMOD_METHODDEF +#endif /* !defined(OS_FCHMOD_METHODDEF) */ + +#ifndef OS_LCHMOD_METHODDEF + #define OS_LCHMOD_METHODDEF +#endif /* !defined(OS_LCHMOD_METHODDEF) */ + +#ifndef OS_CHFLAGS_METHODDEF + #define OS_CHFLAGS_METHODDEF +#endif /* !defined(OS_CHFLAGS_METHODDEF) */ + +#ifndef OS_LCHFLAGS_METHODDEF + #define OS_LCHFLAGS_METHODDEF +#endif /* !defined(OS_LCHFLAGS_METHODDEF) */ + +#ifndef OS_CHROOT_METHODDEF + #define OS_CHROOT_METHODDEF +#endif /* !defined(OS_CHROOT_METHODDEF) */ + +#ifndef OS_FSYNC_METHODDEF + #define OS_FSYNC_METHODDEF +#endif /* !defined(OS_FSYNC_METHODDEF) */ + +#ifndef OS_SYNC_METHODDEF + #define OS_SYNC_METHODDEF +#endif /* !defined(OS_SYNC_METHODDEF) */ + +#ifndef OS_FDATASYNC_METHODDEF + #define OS_FDATASYNC_METHODDEF +#endif /* !defined(OS_FDATASYNC_METHODDEF) */ + +#ifndef OS_CHOWN_METHODDEF + #define OS_CHOWN_METHODDEF +#endif /* !defined(OS_CHOWN_METHODDEF) */ + +#ifndef OS_FCHOWN_METHODDEF + #define OS_FCHOWN_METHODDEF +#endif /* !defined(OS_FCHOWN_METHODDEF) */ + +#ifndef OS_LCHOWN_METHODDEF + #define OS_LCHOWN_METHODDEF +#endif /* !defined(OS_LCHOWN_METHODDEF) */ + +#ifndef OS_LINK_METHODDEF + #define OS_LINK_METHODDEF +#endif /* !defined(OS_LINK_METHODDEF) */ + +#ifndef OS__GETFINALPATHNAME_METHODDEF + #define OS__GETFINALPATHNAME_METHODDEF +#endif /* !defined(OS__GETFINALPATHNAME_METHODDEF) */ + +#ifndef OS__GETVOLUMEPATHNAME_METHODDEF + #define OS__GETVOLUMEPATHNAME_METHODDEF +#endif /* !defined(OS__GETVOLUMEPATHNAME_METHODDEF) */ + +#ifndef OS_NICE_METHODDEF + #define OS_NICE_METHODDEF +#endif /* !defined(OS_NICE_METHODDEF) */ + +#ifndef OS_GETPRIORITY_METHODDEF + #define OS_GETPRIORITY_METHODDEF +#endif /* !defined(OS_GETPRIORITY_METHODDEF) */ + +#ifndef OS_SETPRIORITY_METHODDEF + #define OS_SETPRIORITY_METHODDEF +#endif /* !defined(OS_SETPRIORITY_METHODDEF) */ + +#ifndef OS_SYSTEM_METHODDEF + #define OS_SYSTEM_METHODDEF +#endif /* !defined(OS_SYSTEM_METHODDEF) */ + +#ifndef OS_SYSTEM_METHODDEF + #define OS_SYSTEM_METHODDEF +#endif /* !defined(OS_SYSTEM_METHODDEF) */ + +#ifndef OS_UNAME_METHODDEF + #define OS_UNAME_METHODDEF +#endif /* !defined(OS_UNAME_METHODDEF) */ + +#ifndef OS_EXECV_METHODDEF + #define OS_EXECV_METHODDEF +#endif /* !defined(OS_EXECV_METHODDEF) */ + +#ifndef OS_EXECVE_METHODDEF + #define OS_EXECVE_METHODDEF +#endif /* !defined(OS_EXECVE_METHODDEF) */ + +#ifndef OS_SPAWNV_METHODDEF + #define OS_SPAWNV_METHODDEF +#endif /* !defined(OS_SPAWNV_METHODDEF) */ + +#ifndef OS_SPAWNVE_METHODDEF + #define OS_SPAWNVE_METHODDEF +#endif /* !defined(OS_SPAWNVE_METHODDEF) */ + +#ifndef OS_FORK1_METHODDEF + #define OS_FORK1_METHODDEF +#endif /* !defined(OS_FORK1_METHODDEF) */ + +#ifndef OS_FORK_METHODDEF + #define OS_FORK_METHODDEF +#endif /* !defined(OS_FORK_METHODDEF) */ + +#ifndef OS_SCHED_GET_PRIORITY_MAX_METHODDEF + #define OS_SCHED_GET_PRIORITY_MAX_METHODDEF +#endif /* !defined(OS_SCHED_GET_PRIORITY_MAX_METHODDEF) */ + +#ifndef OS_SCHED_GET_PRIORITY_MIN_METHODDEF + #define OS_SCHED_GET_PRIORITY_MIN_METHODDEF +#endif /* !defined(OS_SCHED_GET_PRIORITY_MIN_METHODDEF) */ + +#ifndef OS_SCHED_GETSCHEDULER_METHODDEF + #define OS_SCHED_GETSCHEDULER_METHODDEF +#endif /* !defined(OS_SCHED_GETSCHEDULER_METHODDEF) */ + +#ifndef OS_SCHED_SETSCHEDULER_METHODDEF + #define OS_SCHED_SETSCHEDULER_METHODDEF +#endif /* !defined(OS_SCHED_SETSCHEDULER_METHODDEF) */ + +#ifndef OS_SCHED_GETPARAM_METHODDEF + #define OS_SCHED_GETPARAM_METHODDEF +#endif /* !defined(OS_SCHED_GETPARAM_METHODDEF) */ + +#ifndef OS_SCHED_SETPARAM_METHODDEF + #define OS_SCHED_SETPARAM_METHODDEF +#endif /* !defined(OS_SCHED_SETPARAM_METHODDEF) */ + +#ifndef OS_SCHED_RR_GET_INTERVAL_METHODDEF + #define OS_SCHED_RR_GET_INTERVAL_METHODDEF +#endif /* !defined(OS_SCHED_RR_GET_INTERVAL_METHODDEF) */ + +#ifndef OS_SCHED_YIELD_METHODDEF + #define OS_SCHED_YIELD_METHODDEF +#endif /* !defined(OS_SCHED_YIELD_METHODDEF) */ + +#ifndef OS_SCHED_SETAFFINITY_METHODDEF + #define OS_SCHED_SETAFFINITY_METHODDEF +#endif /* !defined(OS_SCHED_SETAFFINITY_METHODDEF) */ + +#ifndef OS_SCHED_GETAFFINITY_METHODDEF + #define OS_SCHED_GETAFFINITY_METHODDEF +#endif /* !defined(OS_SCHED_GETAFFINITY_METHODDEF) */ + +#ifndef OS_OPENPTY_METHODDEF + #define OS_OPENPTY_METHODDEF +#endif /* !defined(OS_OPENPTY_METHODDEF) */ + +#ifndef OS_FORKPTY_METHODDEF + #define OS_FORKPTY_METHODDEF +#endif /* !defined(OS_FORKPTY_METHODDEF) */ + +#ifndef OS_GETEGID_METHODDEF + #define OS_GETEGID_METHODDEF +#endif /* !defined(OS_GETEGID_METHODDEF) */ + +#ifndef OS_GETEUID_METHODDEF + #define OS_GETEUID_METHODDEF +#endif /* !defined(OS_GETEUID_METHODDEF) */ + +#ifndef OS_GETGID_METHODDEF + #define OS_GETGID_METHODDEF +#endif /* !defined(OS_GETGID_METHODDEF) */ + +#ifndef OS_GETGROUPS_METHODDEF + #define OS_GETGROUPS_METHODDEF +#endif /* !defined(OS_GETGROUPS_METHODDEF) */ + +#ifndef OS_GETPGID_METHODDEF + #define OS_GETPGID_METHODDEF +#endif /* !defined(OS_GETPGID_METHODDEF) */ + +#ifndef OS_GETPGRP_METHODDEF + #define OS_GETPGRP_METHODDEF +#endif /* !defined(OS_GETPGRP_METHODDEF) */ + +#ifndef OS_SETPGRP_METHODDEF + #define OS_SETPGRP_METHODDEF +#endif /* !defined(OS_SETPGRP_METHODDEF) */ + +#ifndef OS_GETPPID_METHODDEF + #define OS_GETPPID_METHODDEF +#endif /* !defined(OS_GETPPID_METHODDEF) */ + +#ifndef OS_GETLOGIN_METHODDEF + #define OS_GETLOGIN_METHODDEF +#endif /* !defined(OS_GETLOGIN_METHODDEF) */ + +#ifndef OS_GETUID_METHODDEF + #define OS_GETUID_METHODDEF +#endif /* !defined(OS_GETUID_METHODDEF) */ + +#ifndef OS_KILL_METHODDEF + #define OS_KILL_METHODDEF +#endif /* !defined(OS_KILL_METHODDEF) */ + +#ifndef OS_KILLPG_METHODDEF + #define OS_KILLPG_METHODDEF +#endif /* !defined(OS_KILLPG_METHODDEF) */ + +#ifndef OS_PLOCK_METHODDEF + #define OS_PLOCK_METHODDEF +#endif /* !defined(OS_PLOCK_METHODDEF) */ + +#ifndef OS_SETUID_METHODDEF + #define OS_SETUID_METHODDEF +#endif /* !defined(OS_SETUID_METHODDEF) */ + +#ifndef OS_SETEUID_METHODDEF + #define OS_SETEUID_METHODDEF +#endif /* !defined(OS_SETEUID_METHODDEF) */ + +#ifndef OS_SETEGID_METHODDEF + #define OS_SETEGID_METHODDEF +#endif /* !defined(OS_SETEGID_METHODDEF) */ + +#ifndef OS_SETREUID_METHODDEF + #define OS_SETREUID_METHODDEF +#endif /* !defined(OS_SETREUID_METHODDEF) */ + +#ifndef OS_SETREGID_METHODDEF + #define OS_SETREGID_METHODDEF +#endif /* !defined(OS_SETREGID_METHODDEF) */ + +#ifndef OS_SETGID_METHODDEF + #define OS_SETGID_METHODDEF +#endif /* !defined(OS_SETGID_METHODDEF) */ + +#ifndef OS_SETGROUPS_METHODDEF + #define OS_SETGROUPS_METHODDEF +#endif /* !defined(OS_SETGROUPS_METHODDEF) */ + +#ifndef OS_WAIT3_METHODDEF + #define OS_WAIT3_METHODDEF +#endif /* !defined(OS_WAIT3_METHODDEF) */ + +#ifndef OS_WAIT4_METHODDEF + #define OS_WAIT4_METHODDEF +#endif /* !defined(OS_WAIT4_METHODDEF) */ + +#ifndef OS_WAITID_METHODDEF + #define OS_WAITID_METHODDEF +#endif /* !defined(OS_WAITID_METHODDEF) */ + +#ifndef OS_WAITPID_METHODDEF + #define OS_WAITPID_METHODDEF +#endif /* !defined(OS_WAITPID_METHODDEF) */ + +#ifndef OS_WAITPID_METHODDEF + #define OS_WAITPID_METHODDEF +#endif /* !defined(OS_WAITPID_METHODDEF) */ + +#ifndef OS_WAIT_METHODDEF + #define OS_WAIT_METHODDEF +#endif /* !defined(OS_WAIT_METHODDEF) */ + +#ifndef OS_SYMLINK_METHODDEF + #define OS_SYMLINK_METHODDEF +#endif /* !defined(OS_SYMLINK_METHODDEF) */ + +#ifndef OS_TIMES_METHODDEF + #define OS_TIMES_METHODDEF +#endif /* !defined(OS_TIMES_METHODDEF) */ + +#ifndef OS_GETSID_METHODDEF + #define OS_GETSID_METHODDEF +#endif /* !defined(OS_GETSID_METHODDEF) */ + +#ifndef OS_SETSID_METHODDEF + #define OS_SETSID_METHODDEF +#endif /* !defined(OS_SETSID_METHODDEF) */ + +#ifndef OS_SETPGID_METHODDEF + #define OS_SETPGID_METHODDEF +#endif /* !defined(OS_SETPGID_METHODDEF) */ + +#ifndef OS_TCGETPGRP_METHODDEF + #define OS_TCGETPGRP_METHODDEF +#endif /* !defined(OS_TCGETPGRP_METHODDEF) */ + +#ifndef OS_TCSETPGRP_METHODDEF + #define OS_TCSETPGRP_METHODDEF +#endif /* !defined(OS_TCSETPGRP_METHODDEF) */ + +#ifndef OS_LOCKF_METHODDEF + #define OS_LOCKF_METHODDEF +#endif /* !defined(OS_LOCKF_METHODDEF) */ + +#ifndef OS_READV_METHODDEF + #define OS_READV_METHODDEF +#endif /* !defined(OS_READV_METHODDEF) */ + +#ifndef OS_PREAD_METHODDEF + #define OS_PREAD_METHODDEF +#endif /* !defined(OS_PREAD_METHODDEF) */ + +#ifndef OS_PIPE_METHODDEF + #define OS_PIPE_METHODDEF +#endif /* !defined(OS_PIPE_METHODDEF) */ + +#ifndef OS_PIPE2_METHODDEF + #define OS_PIPE2_METHODDEF +#endif /* !defined(OS_PIPE2_METHODDEF) */ + +#ifndef OS_WRITEV_METHODDEF + #define OS_WRITEV_METHODDEF +#endif /* !defined(OS_WRITEV_METHODDEF) */ + +#ifndef OS_PWRITE_METHODDEF + #define OS_PWRITE_METHODDEF +#endif /* !defined(OS_PWRITE_METHODDEF) */ + +#ifndef OS_MKFIFO_METHODDEF + #define OS_MKFIFO_METHODDEF +#endif /* !defined(OS_MKFIFO_METHODDEF) */ + +#ifndef OS_MKNOD_METHODDEF + #define OS_MKNOD_METHODDEF +#endif /* !defined(OS_MKNOD_METHODDEF) */ + +#ifndef OS_MAJOR_METHODDEF + #define OS_MAJOR_METHODDEF +#endif /* !defined(OS_MAJOR_METHODDEF) */ + +#ifndef OS_MINOR_METHODDEF + #define OS_MINOR_METHODDEF +#endif /* !defined(OS_MINOR_METHODDEF) */ + +#ifndef OS_MAKEDEV_METHODDEF + #define OS_MAKEDEV_METHODDEF +#endif /* !defined(OS_MAKEDEV_METHODDEF) */ + +#ifndef OS_FTRUNCATE_METHODDEF + #define OS_FTRUNCATE_METHODDEF +#endif /* !defined(OS_FTRUNCATE_METHODDEF) */ + +#ifndef OS_TRUNCATE_METHODDEF + #define OS_TRUNCATE_METHODDEF +#endif /* !defined(OS_TRUNCATE_METHODDEF) */ + +#ifndef OS_POSIX_FALLOCATE_METHODDEF + #define OS_POSIX_FALLOCATE_METHODDEF +#endif /* !defined(OS_POSIX_FALLOCATE_METHODDEF) */ + +#ifndef OS_POSIX_FADVISE_METHODDEF + #define OS_POSIX_FADVISE_METHODDEF +#endif /* !defined(OS_POSIX_FADVISE_METHODDEF) */ + +#ifndef OS_PUTENV_METHODDEF + #define OS_PUTENV_METHODDEF +#endif /* !defined(OS_PUTENV_METHODDEF) */ + +#ifndef OS_PUTENV_METHODDEF + #define OS_PUTENV_METHODDEF +#endif /* !defined(OS_PUTENV_METHODDEF) */ + +#ifndef OS_UNSETENV_METHODDEF + #define OS_UNSETENV_METHODDEF +#endif /* !defined(OS_UNSETENV_METHODDEF) */ + +#ifndef OS_WCOREDUMP_METHODDEF + #define OS_WCOREDUMP_METHODDEF +#endif /* !defined(OS_WCOREDUMP_METHODDEF) */ + +#ifndef OS_WIFCONTINUED_METHODDEF + #define OS_WIFCONTINUED_METHODDEF +#endif /* !defined(OS_WIFCONTINUED_METHODDEF) */ + +#ifndef OS_WIFSTOPPED_METHODDEF + #define OS_WIFSTOPPED_METHODDEF +#endif /* !defined(OS_WIFSTOPPED_METHODDEF) */ + +#ifndef OS_WIFSIGNALED_METHODDEF + #define OS_WIFSIGNALED_METHODDEF +#endif /* !defined(OS_WIFSIGNALED_METHODDEF) */ + +#ifndef OS_WIFEXITED_METHODDEF + #define OS_WIFEXITED_METHODDEF +#endif /* !defined(OS_WIFEXITED_METHODDEF) */ + +#ifndef OS_WEXITSTATUS_METHODDEF + #define OS_WEXITSTATUS_METHODDEF +#endif /* !defined(OS_WEXITSTATUS_METHODDEF) */ + +#ifndef OS_WTERMSIG_METHODDEF + #define OS_WTERMSIG_METHODDEF +#endif /* !defined(OS_WTERMSIG_METHODDEF) */ + +#ifndef OS_WSTOPSIG_METHODDEF + #define OS_WSTOPSIG_METHODDEF +#endif /* !defined(OS_WSTOPSIG_METHODDEF) */ + +#ifndef OS_FSTATVFS_METHODDEF + #define OS_FSTATVFS_METHODDEF +#endif /* !defined(OS_FSTATVFS_METHODDEF) */ + +#ifndef OS_STATVFS_METHODDEF + #define OS_STATVFS_METHODDEF +#endif /* !defined(OS_STATVFS_METHODDEF) */ + +#ifndef OS__GETDISKUSAGE_METHODDEF + #define OS__GETDISKUSAGE_METHODDEF +#endif /* !defined(OS__GETDISKUSAGE_METHODDEF) */ + +#ifndef OS_FPATHCONF_METHODDEF + #define OS_FPATHCONF_METHODDEF +#endif /* !defined(OS_FPATHCONF_METHODDEF) */ + +#ifndef OS_PATHCONF_METHODDEF + #define OS_PATHCONF_METHODDEF +#endif /* !defined(OS_PATHCONF_METHODDEF) */ + +#ifndef OS_CONFSTR_METHODDEF + #define OS_CONFSTR_METHODDEF +#endif /* !defined(OS_CONFSTR_METHODDEF) */ + +#ifndef OS_SYSCONF_METHODDEF + #define OS_SYSCONF_METHODDEF +#endif /* !defined(OS_SYSCONF_METHODDEF) */ + +#ifndef OS_GETLOADAVG_METHODDEF + #define OS_GETLOADAVG_METHODDEF +#endif /* !defined(OS_GETLOADAVG_METHODDEF) */ + +#ifndef OS_SETRESUID_METHODDEF + #define OS_SETRESUID_METHODDEF +#endif /* !defined(OS_SETRESUID_METHODDEF) */ + +#ifndef OS_SETRESGID_METHODDEF + #define OS_SETRESGID_METHODDEF +#endif /* !defined(OS_SETRESGID_METHODDEF) */ + +#ifndef OS_GETRESUID_METHODDEF + #define OS_GETRESUID_METHODDEF +#endif /* !defined(OS_GETRESUID_METHODDEF) */ + +#ifndef OS_GETRESGID_METHODDEF + #define OS_GETRESGID_METHODDEF +#endif /* !defined(OS_GETRESGID_METHODDEF) */ + +#ifndef OS_GETXATTR_METHODDEF + #define OS_GETXATTR_METHODDEF +#endif /* !defined(OS_GETXATTR_METHODDEF) */ + +#ifndef OS_SETXATTR_METHODDEF + #define OS_SETXATTR_METHODDEF +#endif /* !defined(OS_SETXATTR_METHODDEF) */ + +#ifndef OS_REMOVEXATTR_METHODDEF + #define OS_REMOVEXATTR_METHODDEF +#endif /* !defined(OS_REMOVEXATTR_METHODDEF) */ + +#ifndef OS_LISTXATTR_METHODDEF + #define OS_LISTXATTR_METHODDEF +#endif /* !defined(OS_LISTXATTR_METHODDEF) */ + +#ifndef OS_GET_HANDLE_INHERITABLE_METHODDEF + #define OS_GET_HANDLE_INHERITABLE_METHODDEF +#endif /* !defined(OS_GET_HANDLE_INHERITABLE_METHODDEF) */ + +#ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF + #define OS_SET_HANDLE_INHERITABLE_METHODDEF +#endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ +/*[clinic end generated code: output=52a6140b0b052ce6 input=524ce2e021e4eba6]*/ static PyMethodDef posix_methods[] = { @@ -11211,71 +16844,26 @@ static PyMethodDef posix_methods[] = { OS_STAT_METHODDEF OS_ACCESS_METHODDEF OS_TTYNAME_METHODDEF - - {"chdir", (PyCFunction)posix_chdir, - METH_VARARGS | METH_KEYWORDS, - posix_chdir__doc__}, -#ifdef HAVE_CHFLAGS - {"chflags", (PyCFunction)posix_chflags, - METH_VARARGS | METH_KEYWORDS, - posix_chflags__doc__}, -#endif /* HAVE_CHFLAGS */ - {"chmod", (PyCFunction)posix_chmod, - METH_VARARGS | METH_KEYWORDS, - posix_chmod__doc__}, -#ifdef HAVE_FCHMOD - {"fchmod", posix_fchmod, METH_VARARGS, posix_fchmod__doc__}, -#endif /* HAVE_FCHMOD */ -#ifdef HAVE_CHOWN - {"chown", (PyCFunction)posix_chown, - METH_VARARGS | METH_KEYWORDS, - posix_chown__doc__}, -#endif /* HAVE_CHOWN */ -#ifdef HAVE_LCHMOD - {"lchmod", posix_lchmod, METH_VARARGS, posix_lchmod__doc__}, -#endif /* HAVE_LCHMOD */ -#ifdef HAVE_FCHOWN - {"fchown", posix_fchown, METH_VARARGS, posix_fchown__doc__}, -#endif /* HAVE_FCHOWN */ -#ifdef HAVE_LCHFLAGS - {"lchflags", posix_lchflags, METH_VARARGS, posix_lchflags__doc__}, -#endif /* HAVE_LCHFLAGS */ -#ifdef HAVE_LCHOWN - {"lchown", posix_lchown, METH_VARARGS, posix_lchown__doc__}, -#endif /* HAVE_LCHOWN */ -#ifdef HAVE_CHROOT - {"chroot", posix_chroot, METH_VARARGS, posix_chroot__doc__}, -#endif -#ifdef HAVE_CTERMID - {"ctermid", posix_ctermid, METH_NOARGS, posix_ctermid__doc__}, -#endif - {"getcwd", (PyCFunction)posix_getcwd_unicode, - METH_NOARGS, posix_getcwd__doc__}, - {"getcwdb", (PyCFunction)posix_getcwd_bytes, - METH_NOARGS, posix_getcwdb__doc__}, -#if defined(HAVE_LINK) || defined(MS_WINDOWS) - {"link", (PyCFunction)posix_link, - METH_VARARGS | METH_KEYWORDS, - posix_link__doc__}, -#endif /* HAVE_LINK */ - {"listdir", (PyCFunction)posix_listdir, - METH_VARARGS | METH_KEYWORDS, - posix_listdir__doc__}, - {"lstat", (PyCFunction)posix_lstat, - METH_VARARGS | METH_KEYWORDS, - posix_lstat__doc__}, - {"mkdir", (PyCFunction)posix_mkdir, - METH_VARARGS | METH_KEYWORDS, - posix_mkdir__doc__}, -#ifdef HAVE_NICE - {"nice", posix_nice, METH_VARARGS, posix_nice__doc__}, -#endif /* HAVE_NICE */ -#ifdef HAVE_GETPRIORITY - {"getpriority", posix_getpriority, METH_VARARGS, posix_getpriority__doc__}, -#endif /* HAVE_GETPRIORITY */ -#ifdef HAVE_SETPRIORITY - {"setpriority", posix_setpriority, METH_VARARGS, posix_setpriority__doc__}, -#endif /* HAVE_SETPRIORITY */ + OS_CHDIR_METHODDEF + OS_CHFLAGS_METHODDEF + OS_CHMOD_METHODDEF + OS_FCHMOD_METHODDEF + OS_LCHMOD_METHODDEF + OS_CHOWN_METHODDEF + OS_FCHOWN_METHODDEF + OS_LCHOWN_METHODDEF + OS_LCHFLAGS_METHODDEF + OS_CHROOT_METHODDEF + OS_CTERMID_METHODDEF + OS_GETCWD_METHODDEF + OS_GETCWDB_METHODDEF + OS_LINK_METHODDEF + OS_LISTDIR_METHODDEF + OS_LSTAT_METHODDEF + OS_MKDIR_METHODDEF + OS_NICE_METHODDEF + OS_GETPRIORITY_METHODDEF + OS_SETPRIORITY_METHODDEF #ifdef HAVE_READLINK {"readlink", (PyCFunction)posix_readlink, METH_VARARGS | METH_KEYWORDS, @@ -11286,376 +16874,157 @@ static PyMethodDef posix_methods[] = { METH_VARARGS | METH_KEYWORDS, readlink__doc__}, #endif /* !defined(HAVE_READLINK) && defined(MS_WINDOWS) */ - {"rename", (PyCFunction)posix_rename, - METH_VARARGS | METH_KEYWORDS, - posix_rename__doc__}, - {"replace", (PyCFunction)posix_replace, - METH_VARARGS | METH_KEYWORDS, - posix_replace__doc__}, - {"rmdir", (PyCFunction)posix_rmdir, - METH_VARARGS | METH_KEYWORDS, - posix_rmdir__doc__}, + OS_RENAME_METHODDEF + OS_REPLACE_METHODDEF + OS_RMDIR_METHODDEF {"stat_float_times", stat_float_times, METH_VARARGS, stat_float_times__doc__}, -#if defined(HAVE_SYMLINK) - {"symlink", (PyCFunction)posix_symlink, - METH_VARARGS | METH_KEYWORDS, - posix_symlink__doc__}, -#endif /* HAVE_SYMLINK */ -#ifdef HAVE_SYSTEM - {"system", posix_system, METH_VARARGS, posix_system__doc__}, -#endif - {"umask", posix_umask, METH_VARARGS, posix_umask__doc__}, -#ifdef HAVE_UNAME - {"uname", posix_uname, METH_NOARGS, posix_uname__doc__}, -#endif /* HAVE_UNAME */ - {"unlink", (PyCFunction)posix_unlink, - METH_VARARGS | METH_KEYWORDS, - posix_unlink__doc__}, - {"remove", (PyCFunction)posix_unlink, - METH_VARARGS | METH_KEYWORDS, - posix_remove__doc__}, - {"utime", (PyCFunction)posix_utime, - METH_VARARGS | METH_KEYWORDS, posix_utime__doc__}, -#ifdef HAVE_TIMES - {"times", posix_times, METH_NOARGS, posix_times__doc__}, -#endif /* HAVE_TIMES */ - {"_exit", posix__exit, METH_VARARGS, posix__exit__doc__}, -#ifdef HAVE_EXECV - {"execv", posix_execv, METH_VARARGS, posix_execv__doc__}, - {"execve", (PyCFunction)posix_execve, - METH_VARARGS | METH_KEYWORDS, - posix_execve__doc__}, -#endif /* HAVE_EXECV */ -#ifdef HAVE_SPAWNV - {"spawnv", posix_spawnv, METH_VARARGS, posix_spawnv__doc__}, - {"spawnve", posix_spawnve, METH_VARARGS, posix_spawnve__doc__}, -#endif /* HAVE_SPAWNV */ -#ifdef HAVE_FORK1 - {"fork1", posix_fork1, METH_NOARGS, posix_fork1__doc__}, -#endif /* HAVE_FORK1 */ -#ifdef HAVE_FORK - {"fork", posix_fork, METH_NOARGS, posix_fork__doc__}, -#endif /* HAVE_FORK */ -#ifdef HAVE_SCHED_H -#ifdef HAVE_SCHED_GET_PRIORITY_MAX - {"sched_get_priority_max", posix_sched_get_priority_max, METH_VARARGS, posix_sched_get_priority_max__doc__}, - {"sched_get_priority_min", posix_sched_get_priority_min, METH_VARARGS, posix_sched_get_priority_min__doc__}, -#endif -#ifdef HAVE_SCHED_SETPARAM - {"sched_getparam", posix_sched_getparam, METH_VARARGS, posix_sched_getparam__doc__}, -#endif -#ifdef HAVE_SCHED_SETSCHEDULER - {"sched_getscheduler", posix_sched_getscheduler, METH_VARARGS, posix_sched_getscheduler__doc__}, -#endif -#ifdef HAVE_SCHED_RR_GET_INTERVAL - {"sched_rr_get_interval", posix_sched_rr_get_interval, METH_VARARGS, posix_sched_rr_get_interval__doc__}, -#endif -#ifdef HAVE_SCHED_SETPARAM - {"sched_setparam", posix_sched_setparam, METH_VARARGS, posix_sched_setparam__doc__}, -#endif -#ifdef HAVE_SCHED_SETSCHEDULER - {"sched_setscheduler", posix_sched_setscheduler, METH_VARARGS, posix_sched_setscheduler__doc__}, -#endif - {"sched_yield", posix_sched_yield, METH_NOARGS, posix_sched_yield__doc__}, -#ifdef HAVE_SCHED_SETAFFINITY - {"sched_setaffinity", posix_sched_setaffinity, METH_VARARGS, posix_sched_setaffinity__doc__}, - {"sched_getaffinity", posix_sched_getaffinity, METH_VARARGS, posix_sched_getaffinity__doc__}, -#endif -#endif /* HAVE_SCHED_H */ -#if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX) - {"openpty", posix_openpty, METH_NOARGS, posix_openpty__doc__}, -#endif /* HAVE_OPENPTY || HAVE__GETPTY || HAVE_DEV_PTMX */ -#ifdef HAVE_FORKPTY - {"forkpty", posix_forkpty, METH_NOARGS, posix_forkpty__doc__}, -#endif /* HAVE_FORKPTY */ -#ifdef HAVE_GETEGID - {"getegid", posix_getegid, METH_NOARGS, posix_getegid__doc__}, -#endif /* HAVE_GETEGID */ -#ifdef HAVE_GETEUID - {"geteuid", posix_geteuid, METH_NOARGS, posix_geteuid__doc__}, -#endif /* HAVE_GETEUID */ -#ifdef HAVE_GETGID - {"getgid", posix_getgid, METH_NOARGS, posix_getgid__doc__}, -#endif /* HAVE_GETGID */ + OS_SYMLINK_METHODDEF + OS_SYSTEM_METHODDEF + OS_UMASK_METHODDEF + OS_UNAME_METHODDEF + OS_UNLINK_METHODDEF + OS_REMOVE_METHODDEF + OS_UTIME_METHODDEF + OS_TIMES_METHODDEF + OS__EXIT_METHODDEF + OS_EXECV_METHODDEF + OS_EXECVE_METHODDEF + OS_SPAWNV_METHODDEF + OS_SPAWNVE_METHODDEF + OS_FORK1_METHODDEF + OS_FORK_METHODDEF + OS_SCHED_GET_PRIORITY_MAX_METHODDEF + OS_SCHED_GET_PRIORITY_MIN_METHODDEF + OS_SCHED_GETPARAM_METHODDEF + OS_SCHED_GETSCHEDULER_METHODDEF + OS_SCHED_RR_GET_INTERVAL_METHODDEF + OS_SCHED_SETPARAM_METHODDEF + OS_SCHED_SETSCHEDULER_METHODDEF + OS_SCHED_YIELD_METHODDEF + OS_SCHED_SETAFFINITY_METHODDEF + OS_SCHED_GETAFFINITY_METHODDEF + OS_OPENPTY_METHODDEF + OS_FORKPTY_METHODDEF + OS_GETEGID_METHODDEF + OS_GETEUID_METHODDEF + OS_GETGID_METHODDEF #ifdef HAVE_GETGROUPLIST {"getgrouplist", posix_getgrouplist, METH_VARARGS, posix_getgrouplist__doc__}, #endif -#ifdef HAVE_GETGROUPS - {"getgroups", posix_getgroups, METH_NOARGS, posix_getgroups__doc__}, -#endif - {"getpid", posix_getpid, METH_NOARGS, posix_getpid__doc__}, -#ifdef HAVE_GETPGRP - {"getpgrp", posix_getpgrp, METH_NOARGS, posix_getpgrp__doc__}, -#endif /* HAVE_GETPGRP */ -#ifdef HAVE_GETPPID - {"getppid", posix_getppid, METH_NOARGS, posix_getppid__doc__}, -#endif /* HAVE_GETPPID */ -#ifdef HAVE_GETUID - {"getuid", posix_getuid, METH_NOARGS, posix_getuid__doc__}, -#endif /* HAVE_GETUID */ -#ifdef HAVE_GETLOGIN - {"getlogin", posix_getlogin, METH_NOARGS, posix_getlogin__doc__}, -#endif -#ifdef HAVE_KILL - {"kill", posix_kill, METH_VARARGS, posix_kill__doc__}, -#endif /* HAVE_KILL */ -#ifdef HAVE_KILLPG - {"killpg", posix_killpg, METH_VARARGS, posix_killpg__doc__}, -#endif /* HAVE_KILLPG */ -#ifdef HAVE_PLOCK - {"plock", posix_plock, METH_VARARGS, posix_plock__doc__}, -#endif /* HAVE_PLOCK */ + OS_GETGROUPS_METHODDEF + OS_GETPID_METHODDEF + OS_GETPGRP_METHODDEF + OS_GETPPID_METHODDEF + OS_GETUID_METHODDEF + OS_GETLOGIN_METHODDEF + OS_KILL_METHODDEF + OS_KILLPG_METHODDEF + OS_PLOCK_METHODDEF #ifdef MS_WINDOWS {"startfile", win32_startfile, METH_VARARGS, win32_startfile__doc__}, - {"kill", win32_kill, METH_VARARGS, win32_kill__doc__}, #endif -#ifdef HAVE_SETUID - {"setuid", posix_setuid, METH_VARARGS, posix_setuid__doc__}, -#endif /* HAVE_SETUID */ -#ifdef HAVE_SETEUID - {"seteuid", posix_seteuid, METH_VARARGS, posix_seteuid__doc__}, -#endif /* HAVE_SETEUID */ -#ifdef HAVE_SETEGID - {"setegid", posix_setegid, METH_VARARGS, posix_setegid__doc__}, -#endif /* HAVE_SETEGID */ -#ifdef HAVE_SETREUID - {"setreuid", posix_setreuid, METH_VARARGS, posix_setreuid__doc__}, -#endif /* HAVE_SETREUID */ -#ifdef HAVE_SETREGID - {"setregid", posix_setregid, METH_VARARGS, posix_setregid__doc__}, -#endif /* HAVE_SETREGID */ -#ifdef HAVE_SETGID - {"setgid", posix_setgid, METH_VARARGS, posix_setgid__doc__}, -#endif /* HAVE_SETGID */ -#ifdef HAVE_SETGROUPS - {"setgroups", posix_setgroups, METH_O, posix_setgroups__doc__}, -#endif /* HAVE_SETGROUPS */ + OS_SETUID_METHODDEF + OS_SETEUID_METHODDEF + OS_SETREUID_METHODDEF + OS_SETGID_METHODDEF + OS_SETEGID_METHODDEF + OS_SETREGID_METHODDEF + OS_SETGROUPS_METHODDEF #ifdef HAVE_INITGROUPS {"initgroups", posix_initgroups, METH_VARARGS, posix_initgroups__doc__}, #endif /* HAVE_INITGROUPS */ -#ifdef HAVE_GETPGID - {"getpgid", posix_getpgid, METH_VARARGS, posix_getpgid__doc__}, -#endif /* HAVE_GETPGID */ -#ifdef HAVE_SETPGRP - {"setpgrp", posix_setpgrp, METH_NOARGS, posix_setpgrp__doc__}, -#endif /* HAVE_SETPGRP */ -#ifdef HAVE_WAIT - {"wait", posix_wait, METH_NOARGS, posix_wait__doc__}, -#endif /* HAVE_WAIT */ -#ifdef HAVE_WAIT3 - {"wait3", posix_wait3, METH_VARARGS, posix_wait3__doc__}, -#endif /* HAVE_WAIT3 */ -#ifdef HAVE_WAIT4 - {"wait4", posix_wait4, METH_VARARGS, posix_wait4__doc__}, -#endif /* HAVE_WAIT4 */ -#if defined(HAVE_WAITID) && !defined(__APPLE__) - {"waitid", posix_waitid, METH_VARARGS, posix_waitid__doc__}, -#endif -#if defined(HAVE_WAITPID) || defined(HAVE_CWAIT) - {"waitpid", posix_waitpid, METH_VARARGS, posix_waitpid__doc__}, -#endif /* HAVE_WAITPID */ -#ifdef HAVE_GETSID - {"getsid", posix_getsid, METH_VARARGS, posix_getsid__doc__}, -#endif /* HAVE_GETSID */ -#ifdef HAVE_SETSID - {"setsid", posix_setsid, METH_NOARGS, posix_setsid__doc__}, -#endif /* HAVE_SETSID */ -#ifdef HAVE_SETPGID - {"setpgid", posix_setpgid, METH_VARARGS, posix_setpgid__doc__}, -#endif /* HAVE_SETPGID */ -#ifdef HAVE_TCGETPGRP - {"tcgetpgrp", posix_tcgetpgrp, METH_VARARGS, posix_tcgetpgrp__doc__}, -#endif /* HAVE_TCGETPGRP */ -#ifdef HAVE_TCSETPGRP - {"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__}, -#endif /* HAVE_TCSETPGRP */ - {"open", (PyCFunction)posix_open,\ - METH_VARARGS | METH_KEYWORDS, - posix_open__doc__}, - {"close", posix_close_, METH_VARARGS, posix_close__doc__}, - {"closerange", posix_closerange, METH_VARARGS, posix_closerange__doc__}, - {"device_encoding", device_encoding, METH_VARARGS, device_encoding__doc__}, - {"dup", posix_dup, METH_VARARGS, posix_dup__doc__}, - {"dup2", (PyCFunction)posix_dup2, - METH_VARARGS | METH_KEYWORDS, posix_dup2__doc__}, -#ifdef HAVE_LOCKF - {"lockf", posix_lockf, METH_VARARGS, posix_lockf__doc__}, -#endif - {"lseek", posix_lseek, METH_VARARGS, posix_lseek__doc__}, - {"read", posix_read, METH_VARARGS, posix_read__doc__}, -#ifdef HAVE_READV - {"readv", posix_readv, METH_VARARGS, posix_readv__doc__}, -#endif -#ifdef HAVE_PREAD - {"pread", posix_pread, METH_VARARGS, posix_pread__doc__}, -#endif - {"write", posix_write, METH_VARARGS, posix_write__doc__}, -#ifdef HAVE_WRITEV - {"writev", posix_writev, METH_VARARGS, posix_writev__doc__}, -#endif -#ifdef HAVE_PWRITE - {"pwrite", posix_pwrite, METH_VARARGS, posix_pwrite__doc__}, -#endif + OS_GETPGID_METHODDEF + OS_SETPGRP_METHODDEF + OS_WAIT_METHODDEF + OS_WAIT3_METHODDEF + OS_WAIT4_METHODDEF + OS_WAITID_METHODDEF + OS_WAITPID_METHODDEF + OS_GETSID_METHODDEF + OS_SETSID_METHODDEF + OS_SETPGID_METHODDEF + OS_TCGETPGRP_METHODDEF + OS_TCSETPGRP_METHODDEF + OS_OPEN_METHODDEF + OS_CLOSE_METHODDEF + OS_CLOSERANGE_METHODDEF + OS_DEVICE_ENCODING_METHODDEF + OS_DUP_METHODDEF + OS_DUP2_METHODDEF + OS_LOCKF_METHODDEF + OS_LSEEK_METHODDEF + OS_READ_METHODDEF + OS_READV_METHODDEF + OS_PREAD_METHODDEF + OS_WRITE_METHODDEF + OS_WRITEV_METHODDEF + OS_PWRITE_METHODDEF #ifdef HAVE_SENDFILE {"sendfile", (PyCFunction)posix_sendfile, METH_VARARGS | METH_KEYWORDS, posix_sendfile__doc__}, #endif - {"fstat", posix_fstat, METH_VARARGS, posix_fstat__doc__}, - {"isatty", posix_isatty, METH_VARARGS, posix_isatty__doc__}, -#ifdef HAVE_PIPE - {"pipe", posix_pipe, METH_NOARGS, posix_pipe__doc__}, -#endif -#ifdef HAVE_PIPE2 - {"pipe2", posix_pipe2, METH_O, posix_pipe2__doc__}, -#endif -#ifdef HAVE_MKFIFO - {"mkfifo", (PyCFunction)posix_mkfifo, - METH_VARARGS | METH_KEYWORDS, - posix_mkfifo__doc__}, -#endif -#if defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV) - {"mknod", (PyCFunction)posix_mknod, - METH_VARARGS | METH_KEYWORDS, - posix_mknod__doc__}, -#endif -#ifdef HAVE_DEVICE_MACROS - {"major", posix_major, METH_VARARGS, posix_major__doc__}, - {"minor", posix_minor, METH_VARARGS, posix_minor__doc__}, - {"makedev", posix_makedev, METH_VARARGS, posix_makedev__doc__}, -#endif -#ifdef HAVE_FTRUNCATE - {"ftruncate", posix_ftruncate, METH_VARARGS, posix_ftruncate__doc__}, -#endif -#ifdef HAVE_TRUNCATE - {"truncate", (PyCFunction)posix_truncate, - METH_VARARGS | METH_KEYWORDS, - posix_truncate__doc__}, -#endif -#ifdef HAVE_POSIX_FALLOCATE - {"posix_fallocate", posix_posix_fallocate, METH_VARARGS, posix_posix_fallocate__doc__}, -#endif -#ifdef HAVE_POSIX_FADVISE - {"posix_fadvise", posix_posix_fadvise, METH_VARARGS, posix_posix_fadvise__doc__}, -#endif -#ifdef HAVE_PUTENV - {"putenv", posix_putenv, METH_VARARGS, posix_putenv__doc__}, -#endif -#ifdef HAVE_UNSETENV - {"unsetenv", posix_unsetenv, METH_VARARGS, posix_unsetenv__doc__}, -#endif - {"strerror", posix_strerror, METH_VARARGS, posix_strerror__doc__}, -#ifdef HAVE_FCHDIR - {"fchdir", posix_fchdir, METH_O, posix_fchdir__doc__}, -#endif -#ifdef HAVE_FSYNC - {"fsync", posix_fsync, METH_O, posix_fsync__doc__}, -#endif -#ifdef HAVE_SYNC - {"sync", posix_sync, METH_NOARGS, posix_sync__doc__}, -#endif -#ifdef HAVE_FDATASYNC - {"fdatasync", posix_fdatasync, METH_O, posix_fdatasync__doc__}, -#endif -#ifdef HAVE_SYS_WAIT_H -#ifdef WCOREDUMP - {"WCOREDUMP", posix_WCOREDUMP, METH_VARARGS, posix_WCOREDUMP__doc__}, -#endif /* WCOREDUMP */ -#ifdef WIFCONTINUED - {"WIFCONTINUED",posix_WIFCONTINUED, METH_VARARGS, posix_WIFCONTINUED__doc__}, -#endif /* WIFCONTINUED */ -#ifdef WIFSTOPPED - {"WIFSTOPPED", posix_WIFSTOPPED, METH_VARARGS, posix_WIFSTOPPED__doc__}, -#endif /* WIFSTOPPED */ -#ifdef WIFSIGNALED - {"WIFSIGNALED", posix_WIFSIGNALED, METH_VARARGS, posix_WIFSIGNALED__doc__}, -#endif /* WIFSIGNALED */ -#ifdef WIFEXITED - {"WIFEXITED", posix_WIFEXITED, METH_VARARGS, posix_WIFEXITED__doc__}, -#endif /* WIFEXITED */ -#ifdef WEXITSTATUS - {"WEXITSTATUS", posix_WEXITSTATUS, METH_VARARGS, posix_WEXITSTATUS__doc__}, -#endif /* WEXITSTATUS */ -#ifdef WTERMSIG - {"WTERMSIG", posix_WTERMSIG, METH_VARARGS, posix_WTERMSIG__doc__}, -#endif /* WTERMSIG */ -#ifdef WSTOPSIG - {"WSTOPSIG", posix_WSTOPSIG, METH_VARARGS, posix_WSTOPSIG__doc__}, -#endif /* WSTOPSIG */ -#endif /* HAVE_SYS_WAIT_H */ -#if defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H) - {"fstatvfs", posix_fstatvfs, METH_VARARGS, posix_fstatvfs__doc__}, -#endif -#if defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H) - {"statvfs", (PyCFunction)posix_statvfs, - METH_VARARGS | METH_KEYWORDS, - posix_statvfs__doc__}, -#endif -#ifdef HAVE_CONFSTR - {"confstr", posix_confstr, METH_VARARGS, posix_confstr__doc__}, -#endif -#ifdef HAVE_SYSCONF - {"sysconf", posix_sysconf, METH_VARARGS, posix_sysconf__doc__}, -#endif -#ifdef HAVE_FPATHCONF - {"fpathconf", posix_fpathconf, METH_VARARGS, posix_fpathconf__doc__}, -#endif -#ifdef HAVE_PATHCONF - {"pathconf", (PyCFunction)posix_pathconf, - METH_VARARGS | METH_KEYWORDS, - posix_pathconf__doc__}, -#endif - {"abort", posix_abort, METH_NOARGS, posix_abort__doc__}, + OS_FSTAT_METHODDEF + OS_ISATTY_METHODDEF + OS_PIPE_METHODDEF + OS_PIPE2_METHODDEF + OS_MKFIFO_METHODDEF + OS_MKNOD_METHODDEF + OS_MAJOR_METHODDEF + OS_MINOR_METHODDEF + OS_MAKEDEV_METHODDEF + OS_FTRUNCATE_METHODDEF + OS_TRUNCATE_METHODDEF + OS_POSIX_FALLOCATE_METHODDEF + OS_POSIX_FADVISE_METHODDEF + OS_PUTENV_METHODDEF + OS_UNSETENV_METHODDEF + OS_STRERROR_METHODDEF + OS_FCHDIR_METHODDEF + OS_FSYNC_METHODDEF + OS_SYNC_METHODDEF + OS_FDATASYNC_METHODDEF + OS_WCOREDUMP_METHODDEF + OS_WIFCONTINUED_METHODDEF + OS_WIFSTOPPED_METHODDEF + OS_WIFSIGNALED_METHODDEF + OS_WIFEXITED_METHODDEF + OS_WEXITSTATUS_METHODDEF + OS_WTERMSIG_METHODDEF + OS_WSTOPSIG_METHODDEF + OS_FSTATVFS_METHODDEF + OS_STATVFS_METHODDEF + OS_CONFSTR_METHODDEF + OS_SYSCONF_METHODDEF + OS_FPATHCONF_METHODDEF + OS_PATHCONF_METHODDEF + OS_ABORT_METHODDEF #ifdef MS_WINDOWS {"_getfullpathname", posix__getfullpathname, METH_VARARGS, NULL}, - {"_getfinalpathname", posix__getfinalpathname, METH_VARARGS, NULL}, {"_isdir", posix__isdir, METH_VARARGS, posix__isdir__doc__}, - {"_getdiskusage", win32__getdiskusage, METH_VARARGS, win32__getdiskusage__doc__}, - {"_getvolumepathname", posix__getvolumepathname, METH_VARARGS, posix__getvolumepathname__doc__}, -#endif -#ifdef HAVE_GETLOADAVG - {"getloadavg", posix_getloadavg, METH_NOARGS, posix_getloadavg__doc__}, -#endif - {"urandom", posix_urandom, METH_VARARGS, posix_urandom__doc__}, -#ifdef HAVE_SETRESUID - {"setresuid", posix_setresuid, METH_VARARGS, posix_setresuid__doc__}, -#endif -#ifdef HAVE_SETRESGID - {"setresgid", posix_setresgid, METH_VARARGS, posix_setresgid__doc__}, -#endif -#ifdef HAVE_GETRESUID - {"getresuid", posix_getresuid, METH_NOARGS, posix_getresuid__doc__}, -#endif -#ifdef HAVE_GETRESGID - {"getresgid", posix_getresgid, METH_NOARGS, posix_getresgid__doc__}, #endif + OS__GETDISKUSAGE_METHODDEF + OS__GETFINALPATHNAME_METHODDEF + OS__GETVOLUMEPATHNAME_METHODDEF + OS_GETLOADAVG_METHODDEF + OS_URANDOM_METHODDEF + OS_SETRESUID_METHODDEF + OS_SETRESGID_METHODDEF + OS_GETRESUID_METHODDEF + OS_GETRESGID_METHODDEF + + OS_GETXATTR_METHODDEF + OS_SETXATTR_METHODDEF + OS_REMOVEXATTR_METHODDEF + OS_LISTXATTR_METHODDEF -#ifdef USE_XATTRS - {"setxattr", (PyCFunction)posix_setxattr, - METH_VARARGS | METH_KEYWORDS, - posix_setxattr__doc__}, - {"getxattr", (PyCFunction)posix_getxattr, - METH_VARARGS | METH_KEYWORDS, - posix_getxattr__doc__}, - {"removexattr", (PyCFunction)posix_removexattr, - METH_VARARGS | METH_KEYWORDS, - posix_removexattr__doc__}, - {"listxattr", (PyCFunction)posix_listxattr, - METH_VARARGS | METH_KEYWORDS, - posix_listxattr__doc__}, -#endif #if defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL) {"get_terminal_size", get_terminal_size, METH_VARARGS, termsize__doc__}, #endif - {"cpu_count", (PyCFunction)posix_cpu_count, - METH_NOARGS, posix_cpu_count__doc__}, - {"get_inheritable", posix_get_inheritable, METH_VARARGS, get_inheritable__doc__}, - {"set_inheritable", posix_set_inheritable, METH_VARARGS, set_inheritable__doc__}, -#ifdef MS_WINDOWS - {"get_handle_inheritable", posix_get_handle_inheritable, - METH_VARARGS, get_handle_inheritable__doc__}, - {"set_handle_inheritable", posix_set_handle_inheritable, - METH_VARARGS, set_handle_inheritable__doc__}, -#endif + OS_CPU_COUNT_METHODDEF + OS_GET_INHERITABLE_METHODDEF + OS_SET_INHERITABLE_METHODDEF + OS_GET_HANDLE_INHERITABLE_METHODDEF + OS_SET_HANDLE_INHERITABLE_METHODDEF #ifndef MS_WINDOWS {"get_blocking", posix_get_blocking, METH_VARARGS, get_blocking__doc__}, {"set_blocking", posix_set_blocking, METH_VARARGS, set_blocking__doc__}, @@ -12324,7 +17693,7 @@ INITFUNC(void) sched_param_desc.name = MODNAME ".sched_param"; if (PyStructSequence_InitType2(&SchedParamType, &sched_param_desc) < 0) return NULL; - SchedParamType.tp_new = sched_param_new; + SchedParamType.tp_new = os_sched_param; #endif /* initialize TerminalSize_info */ -- cgit v1.2.1 From ead787fdfb61c04f59a75f344da171caee2eb74d Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Tue, 5 Aug 2014 16:00:03 +1000 Subject: Fix for AMD FreeBSD 9 buildbot (hopefully), broken by my last checkin. --- Modules/posixmodule.c | 1 - 1 file changed, 1 deletion(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 26cd3ce7d2..25bfa5ded6 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -3455,7 +3455,6 @@ os_fchmod_impl(PyModuleDef *module, int fd, int mode) #ifdef HAVE_LCHMOD -PyDoc_STRVAR(posix_lchmod__doc__, /*[clinic input] os.lchmod -- cgit v1.2.1 From 25c40a0b2f1ab484572fa4f857b81f2aacb22207 Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Tue, 5 Aug 2014 16:06:16 +1000 Subject: More fixes for the unhappy AMD FreeBSD 9 buildbot. Fingers crossed. --- Modules/posixmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 25bfa5ded6..d953b5ca65 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -3509,7 +3509,7 @@ os_lchmod_impl(PyModuleDef *module, path_t *path, int mode) { int res; Py_BEGIN_ALLOW_THREADS - res = lchmod(path.narrow, i); + res = lchmod(path->narrow, mode); Py_END_ALLOW_THREADS if (res < 0) { path_error(path); @@ -3661,7 +3661,7 @@ os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags) { int res; Py_BEGIN_ALLOW_THREADS - res = lchflags(path.narrow, flags); + res = lchflags(path->narrow, flags); Py_END_ALLOW_THREADS if (res < 0) { return path_error(path); -- cgit v1.2.1 From 2b079ea094f148ba5a29548d970ee9f13dff8ff0 Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Tue, 5 Aug 2014 19:55:21 +1000 Subject: Issue #22120: For functions using an unsigned integer return converter, Argument Clinic now generates a cast to that type for the comparison to -1 in the generated code. (This supresses a compilation warning.) --- Modules/clinic/binascii.c.h | 4 ++-- Modules/posixmodule.c | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h index 5247180a41..6147be9179 100644 --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -320,7 +320,7 @@ binascii_crc32(PyModuleDef *module, PyObject *args) &data, &crc)) goto exit; _return_value = binascii_crc32_impl(module, &data, crc); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) goto exit; return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); @@ -475,4 +475,4 @@ exit: return return_value; } -/*[clinic end generated code: output=68e2bcc6956b6213 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=53cd6b379c745220 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index d953b5ca65..533d7b4bb4 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12465,7 +12465,7 @@ os_major(PyModuleDef *module, PyObject *args) &device)) goto exit; _return_value = os_major_impl(module, device); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) goto exit; return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); @@ -12475,7 +12475,7 @@ exit: static unsigned int os_major_impl(PyModuleDef *module, int device) -/*[clinic end generated code: output=f60d3cc3d5d20325 input=ea48820b7e10d310]*/ +/*[clinic end generated code: output=52e6743300dcf4ad input=ea48820b7e10d310]*/ { return major(device); } @@ -12514,7 +12514,7 @@ os_minor(PyModuleDef *module, PyObject *args) &device)) goto exit; _return_value = os_minor_impl(module, device); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) goto exit; return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); @@ -12524,7 +12524,7 @@ exit: static unsigned int os_minor_impl(PyModuleDef *module, int device) -/*[clinic end generated code: output=71eca1d5149c2a07 input=089733ebbf9754e8]*/ +/*[clinic end generated code: output=aebe4bd7f455b755 input=089733ebbf9754e8]*/ { return minor(device); } @@ -12565,7 +12565,7 @@ os_makedev(PyModuleDef *module, PyObject *args) &major, &minor)) goto exit; _return_value = os_makedev_impl(module, major, minor); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) goto exit; return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); @@ -12575,7 +12575,7 @@ exit: static unsigned int os_makedev_impl(PyModuleDef *module, int major, int minor) -/*[clinic end generated code: output=e04dc5723a98cd3b input=f55bf7cffb028a08]*/ +/*[clinic end generated code: output=5cb79d9c9eac58b0 input=f55bf7cffb028a08]*/ { return makedev(major, minor); } -- cgit v1.2.1 From 4523bd155adf575a697bce831b761db408d007dc Mon Sep 17 00:00:00 2001 From: "Martin v. L?wis" Date: Tue, 5 Aug 2014 16:10:38 +0200 Subject: Issue #22127: Bypass IDNA for pure-ASCII host names (in particular for numeric IPs). --- Modules/socketmodule.c | 85 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 75 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index bb37dd60e1..f87ebe0b25 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1213,6 +1213,71 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) } } +/* Helper for getsockaddrarg: bypass IDNA for ASCII-only host names + (in particular, numeric IP addresses). */ +struct maybe_idna { + PyObject *obj; + char *buf; +}; + +static void +idna_cleanup(struct maybe_idna *data) +{ + Py_CLEAR(data->obj); +} + +static int +idna_converter(PyObject *obj, struct maybe_idna *data) +{ + size_t len; + PyObject *obj2, *obj3; + if (obj == NULL) { + idna_cleanup(data); + return 1; + } + data->obj = NULL; + len = -1; + if (PyBytes_Check(obj)) { + data->buf = PyBytes_AsString(obj); + len = PyBytes_Size(obj); + } + else if (PyByteArray_Check(obj)) { + data->buf = PyByteArray_AsString(obj); + len = PyByteArray_Size(obj); + } + else if (PyUnicode_Check(obj) && PyUnicode_READY(obj) == 0 && PyUnicode_IS_COMPACT_ASCII(obj)) { + data->buf = PyUnicode_DATA(obj); + len = PyUnicode_GET_LENGTH(obj); + } + else { + obj2 = PyUnicode_FromObject(obj); + if (!obj2) { + PyErr_Format(PyExc_TypeError, "string or unicode text buffer expected, not %s", + obj->ob_type->tp_name); + return 0; + } + obj3 = PyUnicode_AsEncodedString(obj2, "idna", NULL); + Py_DECREF(obj2); + if (!obj3) { + PyErr_SetString(PyExc_TypeError, "encoding of hostname failed"); + return 0; + } + if (!PyBytes_Check(obj3)) { + Py_DECREF(obj2); + PyErr_SetString(PyExc_TypeError, "encoding of hostname failed to return bytes"); + return 0; + } + data->obj = obj3; + data->buf = PyBytes_AS_STRING(obj3); + len = PyBytes_GET_SIZE(obj3); + } + if (strlen(data->buf) != len) { + Py_CLEAR(data->obj); + PyErr_SetString(PyExc_TypeError, "host name must not contain NUL character"); + return 0; + } + return Py_CLEANUP_SUPPORTED; +} /* Parse a socket address argument according to the socket object's address family. Return 1 if the address was in the proper format, @@ -1307,7 +1372,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, case AF_INET: { struct sockaddr_in* addr; - char *host; + struct maybe_idna host = {NULL, NULL}; int port, result; if (!PyTuple_Check(args)) { PyErr_Format( @@ -1317,13 +1382,13 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, Py_TYPE(args)->tp_name); return 0; } - if (!PyArg_ParseTuple(args, "eti:getsockaddrarg", - "idna", &host, &port)) + if (!PyArg_ParseTuple(args, "O&i:getsockaddrarg", + idna_converter, &host, &port)) return 0; addr=(struct sockaddr_in*)addr_ret; - result = setipaddr(host, (struct sockaddr *)addr, + result = setipaddr(host.buf, (struct sockaddr *)addr, sizeof(*addr), AF_INET); - PyMem_Free(host); + idna_cleanup(&host); if (result < 0) return 0; if (port < 0 || port > 0xffff) { @@ -1342,7 +1407,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, case AF_INET6: { struct sockaddr_in6* addr; - char *host; + struct maybe_idna host = {NULL, NULL}; int port, result; unsigned int flowinfo, scope_id; flowinfo = scope_id = 0; @@ -1354,15 +1419,15 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, Py_TYPE(args)->tp_name); return 0; } - if (!PyArg_ParseTuple(args, "eti|II", - "idna", &host, &port, &flowinfo, + if (!PyArg_ParseTuple(args, "O&i|II", + idna_converter, &host, &port, &flowinfo, &scope_id)) { return 0; } addr = (struct sockaddr_in6*)addr_ret; - result = setipaddr(host, (struct sockaddr *)addr, + result = setipaddr(host.buf, (struct sockaddr *)addr, sizeof(*addr), AF_INET6); - PyMem_Free(host); + idna_cleanup(&host); if (result < 0) return 0; if (port < 0 || port > 0xffff) { -- cgit v1.2.1 From 2cc0d1b4f25e492c61726c4cfb6efe0fc3e5c08e Mon Sep 17 00:00:00 2001 From: "Martin v. L?wis" Date: Tue, 5 Aug 2014 16:13:50 +0200 Subject: Issue #22127: fix typo. --- Modules/socketmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index f87ebe0b25..829fd388d1 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1263,7 +1263,7 @@ idna_converter(PyObject *obj, struct maybe_idna *data) return 0; } if (!PyBytes_Check(obj3)) { - Py_DECREF(obj2); + Py_DECREF(obj3); PyErr_SetString(PyExc_TypeError, "encoding of hostname failed to return bytes"); return 0; } -- cgit v1.2.1 From da7eef48f7f091ed00492b050ddea5f94ec29690 Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Tue, 5 Aug 2014 11:54:34 -0500 Subject: Closes #22136: Fix MSVC compiler warnings introduced by #22085 --- Modules/_tkinter.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index f71ede85db..b5f23bc9d1 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -228,13 +228,13 @@ typedef struct { int dispatching; /* We cannot include tclInt.h, as this is internal. So we cache interesting types here. */ - Tcl_ObjType *BooleanType; - Tcl_ObjType *ByteArrayType; - Tcl_ObjType *DoubleType; - Tcl_ObjType *IntType; - Tcl_ObjType *ListType; - Tcl_ObjType *ProcBodyType; - Tcl_ObjType *StringType; + const Tcl_ObjType *BooleanType; + const Tcl_ObjType *ByteArrayType; + const Tcl_ObjType *DoubleType; + const Tcl_ObjType *IntType; + const Tcl_ObjType *ListType; + const Tcl_ObjType *ProcBodyType; + const Tcl_ObjType *StringType; } TkappObject; #define Tkapp_Interp(v) (((TkappObject *) (v))->interp) -- cgit v1.2.1 From f6843defec386221310ff7cd64c1c457b9c1a6f4 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Wed, 6 Aug 2014 19:31:40 -0400 Subject: Issue #22116: C functions and methods (of the 'builtin_function_or_method' type) can now be weakref'ed. Patch by Wei Wu. --- Modules/_testcapimodule.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index ebbf88f71a..9f20abb208 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2653,6 +2653,21 @@ with_tp_del(PyObject *self, PyObject *args) return obj; } +static PyMethodDef ml; + +static PyObject * +create_cfunction(PyObject *self, PyObject *args) +{ + return PyCFunction_NewEx(&ml, self, NULL); +} + +static PyMethodDef ml = { + "create_cfunction", + create_cfunction, + METH_NOARGS, + NULL +}; + static PyObject * _test_incref(PyObject *ob) { @@ -3186,6 +3201,7 @@ static PyMethodDef TestMethods[] = { {"pytime_object_to_timeval", test_pytime_object_to_timeval, METH_VARARGS}, {"pytime_object_to_timespec", test_pytime_object_to_timespec, METH_VARARGS}, {"with_tp_del", with_tp_del, METH_VARARGS}, + {"create_cfunction", create_cfunction, METH_NOARGS}, {"test_pymem_alloc0", (PyCFunction)test_pymem_alloc0, METH_NOARGS}, {"test_pymem_setrawallocators", -- cgit v1.2.1 From a6ad9ce216d87e879777535690610ef5e262c79b Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 14 Aug 2014 22:26:38 +0300 Subject: Issue #15381: Optimized line reading in io.BytesIO. --- Modules/_io/bytesio.c | 56 +++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 29 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index d8de916185..d07da08421 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -81,31 +81,28 @@ unshare(bytesio *self, size_t preferred_size, int truncate) object. Returns the length between the current position to the next newline character. */ static Py_ssize_t -get_line(bytesio *self, char **output) +scan_eol(bytesio *self, Py_ssize_t len) { - char *n; - const char *str_end; - Py_ssize_t len; + const char *start, *n; + Py_ssize_t maxlen; assert(self->buf != NULL); /* Move to the end of the line, up to the end of the string, s. */ - str_end = self->buf + self->string_size; - for (n = self->buf + self->pos; - n < str_end && *n != '\n'; - n++); - - /* Skip the newline character */ - if (n < str_end) - n++; - - /* Get the length from the current position to the end of the line. */ - len = n - (self->buf + self->pos); - *output = self->buf + self->pos; - + start = self->buf + self->pos; + maxlen = self->string_size - self->pos; + if (len < 0 || len > maxlen) + len = maxlen; + + if (len) { + n = memchr(start, '\n', len); + if (n) + /* Get the length from the current position to the end of + the line. */ + len = n - start + 1; + } assert(len >= 0); assert(self->pos < PY_SSIZE_T_MAX - len); - self->pos += len; return len; } @@ -477,14 +474,10 @@ bytesio_readline(bytesio *self, PyObject *args) return NULL; } - n = get_line(self, &output); - - if (size >= 0 && size < n) { - size = n - size; - n -= size; - self->pos -= size; - } + n = scan_eol(self, size); + output = self->buf + self->pos; + self->pos += n; return PyBytes_FromStringAndSize(output, n); } @@ -528,7 +521,9 @@ bytesio_readlines(bytesio *self, PyObject *args) if (!result) return NULL; - while ((n = get_line(self, &output)) != 0) { + output = self->buf + self->pos; + while ((n = scan_eol(self, -1)) != 0) { + self->pos += n; line = PyBytes_FromStringAndSize(output, n); if (!line) goto on_error; @@ -540,6 +535,7 @@ bytesio_readlines(bytesio *self, PyObject *args) size += n; if (maxsize > 0 && size >= maxsize) break; + output += n; } return result; @@ -636,16 +632,18 @@ bytesio_truncate(bytesio *self, PyObject *args) static PyObject * bytesio_iternext(bytesio *self) { - char *next; + const char *next; Py_ssize_t n; CHECK_CLOSED(self, NULL); - n = get_line(self, &next); + n = scan_eol(self, -1); - if (!next || n == 0) + if (n == 0) return NULL; + next = self->buf + self->pos; + self->pos += n; return PyBytes_FromStringAndSize(next, n); } -- cgit v1.2.1 From 5b0efc37029d1ed25416801b1f78e306aa01670e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 16 Aug 2014 01:03:39 +0200 Subject: Issue #22156: Fix some "comparison between signed and unsigned integers" compiler warnings in the Modules/ subdirectory. --- Modules/_bz2module.c | 4 ++-- Modules/_csv.c | 2 +- Modules/_ctypes/callproc.c | 2 +- Modules/_elementtree.c | 2 +- Modules/_io/bytesio.c | 6 ++++-- Modules/_io/textio.c | 2 +- Modules/_sre.c | 2 +- Modules/_struct.c | 5 +++-- Modules/_testcapimodule.c | 2 +- Modules/_tkinter.c | 4 ++-- Modules/_tracemalloc.c | 10 +++++----- Modules/arraymodule.c | 2 +- Modules/posixmodule.c | 2 +- 13 files changed, 24 insertions(+), 21 deletions(-) (limited to 'Modules') diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index e652f4dfcd..4f2afda097 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -188,7 +188,7 @@ compress(BZ2Compressor *c, char *data, size_t len, int action) if (action == BZ_FINISH && bzerror == BZ_STREAM_END) break; } - if (data_size != PyBytes_GET_SIZE(result)) + if (data_size != (size_t)PyBytes_GET_SIZE(result)) if (_PyBytes_Resize(&result, data_size) < 0) goto error; return result; @@ -457,7 +457,7 @@ decompress(BZ2Decompressor *d, char *data, size_t len) d->bzs.avail_out = (unsigned int)Py_MIN(buffer_left, UINT_MAX); } } - if (data_size != PyBytes_GET_SIZE(result)) + if (data_size != (size_t)PyBytes_GET_SIZE(result)) if (_PyBytes_Resize(&result, data_size) < 0) goto error; return result; diff --git a/Modules/_csv.c b/Modules/_csv.c index 6eaaea2bca..ade35e5bf7 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -290,7 +290,7 @@ dialect_check_quoting(int quoting) StyleDesc *qs; for (qs = quote_styles; qs->name; qs++) { - if (qs->style == quoting) + if ((int)qs->style == quoting) return 0; } PyErr_Format(PyExc_TypeError, "bad \"quoting\" value"); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 74119a3b4d..d365e381a2 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -1606,7 +1606,7 @@ resize(PyObject *self, PyObject *args) "Memory cannot be resized because this object doesn't own it"); return NULL; } - if (size <= sizeof(obj->b_value)) { + if ((size_t)size <= sizeof(obj->b_value)) { /* internal default buffer is large enough */ obj->b_size = size; goto done; diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index b3b6976708..9b3e9ed313 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -3741,7 +3741,7 @@ PyInit__elementtree(void) if (expat_capi) { /* check that it's usable */ if (strcmp(expat_capi->magic, PyExpat_CAPI_MAGIC) != 0 || - expat_capi->size < sizeof(struct PyExpat_CAPI) || + (size_t)expat_capi->size < sizeof(struct PyExpat_CAPI) || expat_capi->MAJOR_VERSION != XML_MAJOR_VERSION || expat_capi->MINOR_VERSION != XML_MINOR_VERSION || expat_capi->MICRO_VERSION != XML_MICRO_VERSION) { diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index d07da08421..56ad788d3f 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -53,10 +53,12 @@ unshare(bytesio *self, size_t preferred_size, int truncate) Py_ssize_t copy_size; char *new_buf; - if((! truncate) && preferred_size < self->string_size) { + if((! truncate) && preferred_size < (size_t)self->string_size) { preferred_size = self->string_size; } + /* PyMem_Malloc() returns NULL if preferred_size is bigger + than PY_SSIZE_T_MAX */ new_buf = (char *)PyMem_Malloc(preferred_size); if (new_buf == NULL) { PyErr_NoMemory(); @@ -64,7 +66,7 @@ unshare(bytesio *self, size_t preferred_size, int truncate) } copy_size = self->string_size; - if (copy_size > preferred_size) { + if ((size_t)copy_size > preferred_size) { copy_size = preferred_size; } diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index aed5b2d606..b4c3c406d3 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -1730,7 +1730,7 @@ _PyIO_find_line_ending( else { /* Non-universal mode. */ Py_ssize_t readnl_len = PyUnicode_GET_LENGTH(readnl); - char *nl = PyUnicode_DATA(readnl); + Py_UCS1 *nl = PyUnicode_1BYTE_DATA(readnl); /* Assume that readnl is an ASCII character. */ assert(PyUnicode_KIND(readnl) == PyUnicode_1BYTE_KIND); if (readnl_len == 1) { diff --git a/Modules/_sre.c b/Modules/_sre.c index 300d883cf6..13479ba5d7 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -1236,7 +1236,7 @@ pattern_repr(PatternObject *obj) }; PyObject *result = NULL; PyObject *flag_items; - int i; + size_t i; int flags = obj->flags; /* Omit re.UNICODE for valid string patterns. */ diff --git a/Modules/_struct.c b/Modules/_struct.c index 4941fc8c82..06f0d3a77e 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -1263,7 +1263,8 @@ prepare_s(PyStructObject *self) const char *s; const char *fmt; char c; - Py_ssize_t size, len, ncodes, num, itemsize; + Py_ssize_t size, len, num, itemsize; + size_t ncodes; fmt = PyBytes_AS_STRING(self->s_format); @@ -1319,7 +1320,7 @@ prepare_s(PyStructObject *self) } /* check for overflow */ - if ((ncodes + 1) > (PY_SSIZE_T_MAX / sizeof(formatcode))) { + if ((ncodes + 1) > ((size_t)PY_SSIZE_T_MAX / sizeof(formatcode))) { PyErr_NoMemory(); return -1; } diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 9f20abb208..643cbde317 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -1719,7 +1719,7 @@ test_long_numbits(PyObject *self) {-0xffffL, 16, -1}, {0xfffffffL, 28, 1}, {-0xfffffffL, 28, -1}}; - int i; + size_t i; for (i = 0; i < Py_ARRAY_LENGTH(testcases); ++i) { size_t nbits; diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index b5f23bc9d1..07175944ec 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -1414,7 +1414,7 @@ varname_converter(PyObject *in, void *_out) return 0; } s = PyBytes_AsString(in); - if (strlen(s) != PyBytes_Size(in)) { + if (strlen(s) != (size_t)PyBytes_Size(in)) { PyErr_SetString(PyExc_ValueError, "null byte in bytes object"); return 0; } @@ -1431,7 +1431,7 @@ varname_converter(PyObject *in, void *_out) PyErr_SetString(PyExc_OverflowError, "string is too long"); return 0; } - if (strlen(s) != size) { + if (strlen(s) != (size_t)size) { PyErr_SetString(PyExc_ValueError, "null character in string"); return 0; } diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 257ae1b57a..e0024e924c 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -79,7 +79,7 @@ typedef struct { (sizeof(traceback_t) + sizeof(frame_t) * (NFRAME - 1)) #define MAX_NFRAME \ - ((INT_MAX - sizeof(traceback_t)) / sizeof(frame_t) + 1) + (((size_t)INT_MAX - sizeof(traceback_t)) / sizeof(frame_t) + 1) static PyObject *unknown_filename = NULL; static traceback_t tracemalloc_empty_traceback; @@ -874,7 +874,7 @@ tracemalloc_start(int max_nframe) return 0; } - assert(1 <= max_nframe && max_nframe <= MAX_NFRAME); + assert(1 <= max_nframe && (size_t)max_nframe <= MAX_NFRAME); tracemalloc_config.max_nframe = max_nframe; /* allocate a buffer to store a new traceback */ @@ -1226,7 +1226,7 @@ py_tracemalloc_start(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "|n:start", &nframe)) return NULL; - if (nframe < 1 || nframe > MAX_NFRAME) { + if (nframe < 1 || (size_t)nframe > MAX_NFRAME) { PyErr_Format(PyExc_ValueError, "the number of frames must be in range [1; %i]", (int)MAX_NFRAME); @@ -1388,7 +1388,7 @@ parse_sys_xoptions(PyObject *value) if (nframe == -1 && PyErr_Occurred()) return -1; - if (nframe < 1 || nframe > MAX_NFRAME) + if (nframe < 1 || (size_t)nframe > MAX_NFRAME) return -1; return Py_SAFE_DOWNCAST(nframe, long, int); @@ -1412,7 +1412,7 @@ _PyTraceMalloc_Init(void) value = strtol(p, &endptr, 10); if (*endptr != '\0' || value < 1 - || value > MAX_NFRAME + || (size_t)value > MAX_NFRAME || errno == ERANGE) { Py_FatalError("PYTHONTRACEMALLOC: invalid number of frames"); diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 4a1c158514..d0c94f7b23 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2000,7 +2000,7 @@ array_reconstructor(PyObject *self, PyObject *args) */ for (descr = descriptors; descr->typecode != '\0'; descr++) { if (descr->is_integer_type && - descr->itemsize == mf_descr.size && + (size_t)descr->itemsize == mf_descr.size && descr->is_signed == mf_descr.is_signed) typecode = descr->typecode; } diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 533d7b4bb4..af5c2a691f 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -902,7 +902,7 @@ path_converter(PyObject *o, void *p) { #endif narrow = PyBytes_AS_STRING(bytes); - if (length != strlen(narrow)) { + if ((size_t)length != strlen(narrow)) { FORMAT_EXCEPTION(PyExc_ValueError, "embedded NUL character in %s"); Py_DECREF(bytes); return 0; -- cgit v1.2.1 From 77f461293a22cefb1869b41750673c78e248f105 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 16 Aug 2014 15:44:02 +0200 Subject: Issue #22156: simplify _tracemalloc.c, use an int for the MAX_NFRAME constant --- Modules/_tracemalloc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index e0024e924c..c47ed28dfc 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -79,7 +79,7 @@ typedef struct { (sizeof(traceback_t) + sizeof(frame_t) * (NFRAME - 1)) #define MAX_NFRAME \ - (((size_t)INT_MAX - sizeof(traceback_t)) / sizeof(frame_t) + 1) + ((INT_MAX - (int)sizeof(traceback_t)) / (int)sizeof(frame_t) + 1) static PyObject *unknown_filename = NULL; static traceback_t tracemalloc_empty_traceback; @@ -874,7 +874,7 @@ tracemalloc_start(int max_nframe) return 0; } - assert(1 <= max_nframe && (size_t)max_nframe <= MAX_NFRAME); + assert(1 <= max_nframe && max_nframe <= MAX_NFRAME); tracemalloc_config.max_nframe = max_nframe; /* allocate a buffer to store a new traceback */ @@ -1226,10 +1226,10 @@ py_tracemalloc_start(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "|n:start", &nframe)) return NULL; - if (nframe < 1 || (size_t)nframe > MAX_NFRAME) { + if (nframe < 1 || nframe > MAX_NFRAME) { PyErr_Format(PyExc_ValueError, "the number of frames must be in range [1; %i]", - (int)MAX_NFRAME); + MAX_NFRAME); return NULL; } nframe_int = Py_SAFE_DOWNCAST(nframe, Py_ssize_t, int); @@ -1388,7 +1388,7 @@ parse_sys_xoptions(PyObject *value) if (nframe == -1 && PyErr_Occurred()) return -1; - if (nframe < 1 || (size_t)nframe > MAX_NFRAME) + if (nframe < 1 || nframe > MAX_NFRAME) return -1; return Py_SAFE_DOWNCAST(nframe, long, int); @@ -1412,7 +1412,7 @@ _PyTraceMalloc_Init(void) value = strtol(p, &endptr, 10); if (*endptr != '\0' || value < 1 - || (size_t)value > MAX_NFRAME + || value > MAX_NFRAME || errno == ERANGE) { Py_FatalError("PYTHONTRACEMALLOC: invalid number of frames"); -- cgit v1.2.1 From bc4249e67a637939bfc7ee3c6e86f8e6f55e6e3a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 17 Aug 2014 19:33:28 +0200 Subject: Issue #22218: Fix "comparison between signed and unsigned integers" warnings in socketmodule.c. --- Modules/socketmodule.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 829fd388d1..abadd8a7c3 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1277,7 +1277,7 @@ idna_converter(PyObject *obj, struct maybe_idna *data) return 0; } return Py_CLEANUP_SUPPORTED; -} +} /* Parse a socket address argument according to the socket object's address family. Return 1 if the address was in the proper format, @@ -1308,12 +1308,13 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, Py_INCREF(args); if (!PyArg_Parse(args, "y#", &path, &len)) goto unix_out; + assert(len >= 0); addr = (struct sockaddr_un*)addr_ret; #ifdef linux if (len > 0 && path[0] == 0) { /* Linux abstract namespace extension */ - if (len > sizeof addr->sun_path) { + if ((size_t)len > sizeof addr->sun_path) { PyErr_SetString(PyExc_OSError, "AF_UNIX path too long"); goto unix_out; @@ -1323,7 +1324,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, #endif /* linux */ { /* regular NULL-terminated string */ - if (len >= sizeof addr->sun_path) { + if ((size_t)len >= sizeof addr->sun_path) { PyErr_SetString(PyExc_OSError, "AF_UNIX path too long"); goto unix_out; @@ -1675,7 +1676,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, if (len == 0) { ifr.ifr_ifindex = 0; - } else if (len < sizeof(ifr.ifr_name)) { + } else if ((size_t)len < sizeof(ifr.ifr_name)) { strncpy(ifr.ifr_name, PyBytes_AS_STRING(interfaceName), sizeof(ifr.ifr_name)); ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0'; if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) { @@ -4290,7 +4291,7 @@ Return the IP address (a string of the form '255.255.255.255') for a host."); /* Convenience function common to gethostbyname_ex and gethostbyaddr */ static PyObject * -gethost_common(struct hostent *h, struct sockaddr *addr, int alen, int af) +gethost_common(struct hostent *h, struct sockaddr *addr, size_t alen, int af) { char **pch; PyObject *rtn_tuple = (PyObject *)NULL; -- cgit v1.2.1 From bc33573f1dd3d27e2a04be0f5efde23123c210dd Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 17 Aug 2014 21:05:55 +0200 Subject: Issue #22218: Fix "comparison between signed and unsigned integers" warnings in Modules/_pickle.c. --- Modules/_pickle.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 7faf96dd93..665a324623 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -420,22 +420,22 @@ static int Pdata_grow(Pdata *self) { PyObject **data = self->data; - Py_ssize_t allocated = self->allocated; - Py_ssize_t new_allocated; + size_t allocated = (size_t)self->allocated; + size_t new_allocated; new_allocated = (allocated >> 3) + 6; /* check for integer overflow */ - if (new_allocated > PY_SSIZE_T_MAX - allocated) + if (new_allocated > (size_t)PY_SSIZE_T_MAX - allocated) goto nomemory; new_allocated += allocated; - if (new_allocated > (PY_SSIZE_T_MAX / sizeof(PyObject *))) + if (new_allocated > ((size_t)PY_SSIZE_T_MAX / sizeof(PyObject *))) goto nomemory; data = PyMem_REALLOC(data, new_allocated * sizeof(PyObject *)); if (data == NULL) goto nomemory; self->data = data; - self->allocated = new_allocated; + self->allocated = (Py_ssize_t)new_allocated; return 0; nomemory: @@ -850,7 +850,7 @@ _Pickler_ClearBuffer(PicklerObject *self) static void _write_size64(char *out, size_t value) { - int i; + size_t i; assert(sizeof(size_t) <= 8); @@ -2118,12 +2118,13 @@ write_utf8(PicklerObject *self, char *data, Py_ssize_t size) char header[9]; Py_ssize_t len; + assert(size >= 0); if (size <= 0xff && self->proto >= 4) { header[0] = SHORT_BINUNICODE; header[1] = (unsigned char)(size & 0xff); len = 2; } - else if (size <= 0xffffffffUL) { + else if ((size_t)size <= 0xffffffffUL) { header[0] = BINUNICODE; header[1] = (unsigned char)(size & 0xff); header[2] = (unsigned char)((size >> 8) & 0xff); @@ -4505,10 +4506,10 @@ static Py_ssize_t calc_binsize(char *bytes, int nbytes) { unsigned char *s = (unsigned char *)bytes; - int i; + Py_ssize_t i; size_t x = 0; - for (i = 0; i < nbytes && i < sizeof(size_t); i++) { + for (i = 0; i < nbytes && (size_t)i < sizeof(size_t); i++) { x |= (size_t) s[i] << (8 * i); } @@ -4527,7 +4528,7 @@ static long calc_binint(char *bytes, int nbytes) { unsigned char *s = (unsigned char *)bytes; - int i; + Py_ssize_t i; long x = 0; for (i = 0; i < nbytes; i++) { -- cgit v1.2.1 From e9c188a521e0494911db1aa06ccfcb60b7b56369 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 17 Aug 2014 21:09:30 +0200 Subject: Issue #22218: Fix "comparison between signed and unsigned integers" warning in Modules/_sqlite/cursor.c. --- Modules/_sqlite/cursor.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index db96b02519..7fe00e32d2 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -46,7 +46,7 @@ static pysqlite_StatementKind detect_statement_type(const char* statement) dst = buf; *dst = 0; - while (Py_ISALPHA(*src) && dst - buf < sizeof(buf) - 2) { + while (Py_ISALPHA(*src) && (dst - buf) < ((Py_ssize_t)sizeof(buf) - 2)) { *dst++ = Py_TOLOWER(*src++); } -- cgit v1.2.1 From 49cf5adb8ba8869abec313b0151d61668b99eecc Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 17 Aug 2014 21:14:46 +0200 Subject: _pickle: Optimize raw_unicode_escape(), use directly a bytes object, don't use a temporary bytearray object. --- Modules/_pickle.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 665a324623..1c15190f82 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -2050,7 +2050,7 @@ save_bytes(PicklerObject *self, PyObject *obj) static PyObject * raw_unicode_escape(PyObject *obj) { - PyObject *repr, *result; + PyObject *repr; char *p; Py_ssize_t i, size, expandsize; void *data; @@ -2069,13 +2069,14 @@ raw_unicode_escape(PyObject *obj) if (size > PY_SSIZE_T_MAX / expandsize) return PyErr_NoMemory(); - repr = PyByteArray_FromStringAndSize(NULL, expandsize * size); + repr = PyBytes_FromStringAndSize(NULL, expandsize * size); if (repr == NULL) return NULL; if (size == 0) - goto done; + return repr; + assert(Py_REFCNT(repr) == 1); - p = PyByteArray_AS_STRING(repr); + p = PyBytes_AS_STRING(repr); for (i=0; i < size; i++) { Py_UCS4 ch = PyUnicode_READ(kind, data, i); /* Map 32-bit characters to '\Uxxxxxxxx' */ @@ -2104,12 +2105,10 @@ raw_unicode_escape(PyObject *obj) else *p++ = (char) ch; } - size = p - PyByteArray_AS_STRING(repr); - -done: - result = PyBytes_FromStringAndSize(PyByteArray_AS_STRING(repr), size); - Py_DECREF(repr); - return result; + size = p - PyBytes_AS_STRING(repr); + if (_PyBytes_Resize(&repr, size) < 0) + return NULL; + return repr; } static int -- cgit v1.2.1 From 647937eac3764650aeab80b3c6ee05a893c35441 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 17 Aug 2014 22:20:00 +0200 Subject: Issue #22207: Fix "comparison between signed and unsigned integers" warning in test checking for integer overflow on Py_ssize_t type: cast explicitly to size_t. --- Modules/_codecsmodule.c | 2 +- Modules/_lzmamodule.c | 4 ++-- Modules/_pickle.c | 5 +++-- Modules/fcntlmodule.c | 2 +- Modules/mathmodule.c | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index 1b21300c8d..ac25998d7b 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -699,7 +699,7 @@ unicode_internal_encode(PyObject *self, u = PyUnicode_AsUnicodeAndSize(obj, &len); if (u == NULL) return NULL; - if (len > PY_SSIZE_T_MAX / sizeof(Py_UNICODE)) + if ((size_t)len > (size_t)PY_SSIZE_T_MAX / sizeof(Py_UNICODE)) return PyErr_NoMemory(); size = len * sizeof(Py_UNICODE); return codec_tuple(PyBytes_FromStringAndSize((const char*)u, size), diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index c43676ab75..dfb95fade1 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -533,7 +533,7 @@ compress(Compressor *c, uint8_t *data, size_t len, lzma_action action) c->lzs.avail_out = PyBytes_GET_SIZE(result) - data_size; } } - if (data_size != PyBytes_GET_SIZE(result)) + if (data_size != (size_t)PyBytes_GET_SIZE(result)) if (_PyBytes_Resize(&result, data_size) == -1) goto error; return result; @@ -931,7 +931,7 @@ decompress(Decompressor *d, uint8_t *data, size_t len) d->lzs.avail_out = PyBytes_GET_SIZE(result) - data_size; } } - if (data_size != PyBytes_GET_SIZE(result)) + if (data_size != (size_t)PyBytes_GET_SIZE(result)) if (_PyBytes_Resize(&result, data_size) == -1) goto error; return result; diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 1c15190f82..ba9ba99071 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -2052,7 +2052,8 @@ raw_unicode_escape(PyObject *obj) { PyObject *repr; char *p; - Py_ssize_t i, size, expandsize; + Py_ssize_t i, size; + size_t expandsize; void *data; unsigned int kind; @@ -2067,7 +2068,7 @@ raw_unicode_escape(PyObject *obj) else expandsize = 6; - if (size > PY_SSIZE_T_MAX / expandsize) + if ((size_t)size > (size_t)PY_SSIZE_T_MAX / expandsize) return PyErr_NoMemory(); repr = PyBytes_FromStringAndSize(NULL, expandsize * size); if (repr == NULL) diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c index cf0ac19976..56e40212d1 100644 --- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -42,7 +42,7 @@ fcntl_fcntl(PyObject *self, PyObject *args) if (PyArg_ParseTuple(args, "O&is#:fcntl", conv_descriptor, &fd, &code, &str, &len)) { - if (len > sizeof buf) { + if ((size_t)len > sizeof buf) { PyErr_SetString(PyExc_ValueError, "fcntl string arg too long"); return NULL; diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 7f525ea66f..bce3799ced 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -1010,7 +1010,7 @@ _fsum_realloc(double **p_ptr, Py_ssize_t n, Py_ssize_t m = *m_ptr; m += m; /* double */ - if (n < m && m < (PY_SSIZE_T_MAX / sizeof(double))) { + if (n < m && (size_t)m < ((size_t)PY_SSIZE_T_MAX / sizeof(double))) { double *p = *p_ptr; if (p == ps) { v = PyMem_Malloc(sizeof(double) * m); -- cgit v1.2.1 From 9f6fc301a69d54a2ec7b516cab30043ddcfccc38 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 22 Aug 2014 11:45:03 -0400 Subject: Issue #20152: Convert _multibytecodecs to Argument Clinic. --- Modules/cjkcodecs/clinic/multibytecodec.c.h | 301 +++++++++++++++++++++++++ Modules/cjkcodecs/multibytecodec.c | 333 ++++++++++++++++------------ 2 files changed, 492 insertions(+), 142 deletions(-) create mode 100644 Modules/cjkcodecs/clinic/multibytecodec.c.h (limited to 'Modules') diff --git a/Modules/cjkcodecs/clinic/multibytecodec.c.h b/Modules/cjkcodecs/clinic/multibytecodec.c.h new file mode 100644 index 0000000000..2f9cb63927 --- /dev/null +++ b/Modules/cjkcodecs/clinic/multibytecodec.c.h @@ -0,0 +1,301 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_multibytecodec_MultibyteCodec_encode__doc__, +"encode($self, /, input, errors=None)\n" +"--\n" +"\n" +"Return an encoded string version of `input\'.\n" +"\n" +"\'errors\' may be given to set a different error handling scheme. Default is\n" +"\'strict\' meaning that encoding errors raise a UnicodeEncodeError. Other possible\n" +"values are \'ignore\', \'replace\' and \'xmlcharrefreplace\' as well as any other name\n" +"registered with codecs.register_error that can handle UnicodeEncodeErrors."); + +#define _MULTIBYTECODEC_MULTIBYTECODEC_ENCODE_METHODDEF \ + {"encode", (PyCFunction)_multibytecodec_MultibyteCodec_encode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteCodec_encode__doc__}, + +static PyObject * +_multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, PyObject *input, const char *errors); + +static PyObject * +_multibytecodec_MultibyteCodec_encode(MultibyteCodecObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"input", "errors", NULL}; + PyObject *input; + const char *errors = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|z:encode", _keywords, + &input, &errors)) + goto exit; + return_value = _multibytecodec_MultibyteCodec_encode_impl(self, input, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_multibytecodec_MultibyteCodec_decode__doc__, +"decode($self, /, input, errors=None)\n" +"--\n" +"\n" +"Decodes \'input\'.\n" +"\n" +"\'errors\' may be given to set a different error handling scheme. Default is\n" +"\'strict\' meaning that encoding errors raise a UnicodeDecodeError. Other possible\n" +"values are \'ignore\' and \'replace\' as well as any other name registered with\n" +"codecs.register_error that is able to handle UnicodeDecodeErrors.\""); + +#define _MULTIBYTECODEC_MULTIBYTECODEC_DECODE_METHODDEF \ + {"decode", (PyCFunction)_multibytecodec_MultibyteCodec_decode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteCodec_decode__doc__}, + +static PyObject * +_multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self, Py_buffer *input, const char *errors); + +static PyObject * +_multibytecodec_MultibyteCodec_decode(MultibyteCodecObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"input", "errors", NULL}; + Py_buffer input = {NULL, NULL}; + const char *errors = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "y*|z:decode", _keywords, + &input, &errors)) + goto exit; + return_value = _multibytecodec_MultibyteCodec_decode_impl(self, &input, errors); + +exit: + /* Cleanup for input */ + if (input.obj) + PyBuffer_Release(&input); + + return return_value; +} + +PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalEncoder_encode__doc__, +"encode($self, /, input, final=0)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTEINCREMENTALENCODER_ENCODE_METHODDEF \ + {"encode", (PyCFunction)_multibytecodec_MultibyteIncrementalEncoder_encode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteIncrementalEncoder_encode__doc__}, + +static PyObject * +_multibytecodec_MultibyteIncrementalEncoder_encode_impl(MultibyteIncrementalEncoderObject *self, PyObject *input, int final); + +static PyObject * +_multibytecodec_MultibyteIncrementalEncoder_encode(MultibyteIncrementalEncoderObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"input", "final", NULL}; + PyObject *input; + int final = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|i:encode", _keywords, + &input, &final)) + goto exit; + return_value = _multibytecodec_MultibyteIncrementalEncoder_encode_impl(self, input, final); + +exit: + return return_value; +} + +PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalEncoder_reset__doc__, +"reset($self, /)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTEINCREMENTALENCODER_RESET_METHODDEF \ + {"reset", (PyCFunction)_multibytecodec_MultibyteIncrementalEncoder_reset, METH_NOARGS, _multibytecodec_MultibyteIncrementalEncoder_reset__doc__}, + +static PyObject * +_multibytecodec_MultibyteIncrementalEncoder_reset_impl(MultibyteIncrementalEncoderObject *self); + +static PyObject * +_multibytecodec_MultibyteIncrementalEncoder_reset(MultibyteIncrementalEncoderObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _multibytecodec_MultibyteIncrementalEncoder_reset_impl(self); +} + +PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalDecoder_decode__doc__, +"decode($self, /, input, final=0)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTEINCREMENTALDECODER_DECODE_METHODDEF \ + {"decode", (PyCFunction)_multibytecodec_MultibyteIncrementalDecoder_decode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteIncrementalDecoder_decode__doc__}, + +static PyObject * +_multibytecodec_MultibyteIncrementalDecoder_decode_impl(MultibyteIncrementalDecoderObject *self, Py_buffer *input, int final); + +static PyObject * +_multibytecodec_MultibyteIncrementalDecoder_decode(MultibyteIncrementalDecoderObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"input", "final", NULL}; + Py_buffer input = {NULL, NULL}; + int final = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "y*|i:decode", _keywords, + &input, &final)) + goto exit; + return_value = _multibytecodec_MultibyteIncrementalDecoder_decode_impl(self, &input, final); + +exit: + /* Cleanup for input */ + if (input.obj) + PyBuffer_Release(&input); + + return return_value; +} + +PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalDecoder_reset__doc__, +"reset($self, /)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTEINCREMENTALDECODER_RESET_METHODDEF \ + {"reset", (PyCFunction)_multibytecodec_MultibyteIncrementalDecoder_reset, METH_NOARGS, _multibytecodec_MultibyteIncrementalDecoder_reset__doc__}, + +static PyObject * +_multibytecodec_MultibyteIncrementalDecoder_reset_impl(MultibyteIncrementalDecoderObject *self); + +static PyObject * +_multibytecodec_MultibyteIncrementalDecoder_reset(MultibyteIncrementalDecoderObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _multibytecodec_MultibyteIncrementalDecoder_reset_impl(self); +} + +PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_read__doc__, +"read($self, sizeobj=None, /)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTESTREAMREADER_READ_METHODDEF \ + {"read", (PyCFunction)_multibytecodec_MultibyteStreamReader_read, METH_VARARGS, _multibytecodec_MultibyteStreamReader_read__doc__}, + +static PyObject * +_multibytecodec_MultibyteStreamReader_read_impl(MultibyteStreamReaderObject *self, PyObject *sizeobj); + +static PyObject * +_multibytecodec_MultibyteStreamReader_read(MultibyteStreamReaderObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *sizeobj = Py_None; + + if (!PyArg_UnpackTuple(args, "read", + 0, 1, + &sizeobj)) + goto exit; + return_value = _multibytecodec_MultibyteStreamReader_read_impl(self, sizeobj); + +exit: + return return_value; +} + +PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_readline__doc__, +"readline($self, sizeobj=None, /)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTESTREAMREADER_READLINE_METHODDEF \ + {"readline", (PyCFunction)_multibytecodec_MultibyteStreamReader_readline, METH_VARARGS, _multibytecodec_MultibyteStreamReader_readline__doc__}, + +static PyObject * +_multibytecodec_MultibyteStreamReader_readline_impl(MultibyteStreamReaderObject *self, PyObject *sizeobj); + +static PyObject * +_multibytecodec_MultibyteStreamReader_readline(MultibyteStreamReaderObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *sizeobj = Py_None; + + if (!PyArg_UnpackTuple(args, "readline", + 0, 1, + &sizeobj)) + goto exit; + return_value = _multibytecodec_MultibyteStreamReader_readline_impl(self, sizeobj); + +exit: + return return_value; +} + +PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_readlines__doc__, +"readlines($self, sizehintobj=None, /)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTESTREAMREADER_READLINES_METHODDEF \ + {"readlines", (PyCFunction)_multibytecodec_MultibyteStreamReader_readlines, METH_VARARGS, _multibytecodec_MultibyteStreamReader_readlines__doc__}, + +static PyObject * +_multibytecodec_MultibyteStreamReader_readlines_impl(MultibyteStreamReaderObject *self, PyObject *sizehintobj); + +static PyObject * +_multibytecodec_MultibyteStreamReader_readlines(MultibyteStreamReaderObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *sizehintobj = Py_None; + + if (!PyArg_UnpackTuple(args, "readlines", + 0, 1, + &sizehintobj)) + goto exit; + return_value = _multibytecodec_MultibyteStreamReader_readlines_impl(self, sizehintobj); + +exit: + return return_value; +} + +PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_reset__doc__, +"reset($self, /)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTESTREAMREADER_RESET_METHODDEF \ + {"reset", (PyCFunction)_multibytecodec_MultibyteStreamReader_reset, METH_NOARGS, _multibytecodec_MultibyteStreamReader_reset__doc__}, + +static PyObject * +_multibytecodec_MultibyteStreamReader_reset_impl(MultibyteStreamReaderObject *self); + +static PyObject * +_multibytecodec_MultibyteStreamReader_reset(MultibyteStreamReaderObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _multibytecodec_MultibyteStreamReader_reset_impl(self); +} + +PyDoc_STRVAR(_multibytecodec_MultibyteStreamWriter_write__doc__, +"write($self, strobj, /)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTESTREAMWRITER_WRITE_METHODDEF \ + {"write", (PyCFunction)_multibytecodec_MultibyteStreamWriter_write, METH_O, _multibytecodec_MultibyteStreamWriter_write__doc__}, + +PyDoc_STRVAR(_multibytecodec_MultibyteStreamWriter_writelines__doc__, +"writelines($self, lines, /)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTESTREAMWRITER_WRITELINES_METHODDEF \ + {"writelines", (PyCFunction)_multibytecodec_MultibyteStreamWriter_writelines, METH_O, _multibytecodec_MultibyteStreamWriter_writelines__doc__}, + +PyDoc_STRVAR(_multibytecodec_MultibyteStreamWriter_reset__doc__, +"reset($self, /)\n" +"--"); + +#define _MULTIBYTECODEC_MULTIBYTESTREAMWRITER_RESET_METHODDEF \ + {"reset", (PyCFunction)_multibytecodec_MultibyteStreamWriter_reset, METH_NOARGS, _multibytecodec_MultibyteStreamWriter_reset__doc__}, + +static PyObject * +_multibytecodec_MultibyteStreamWriter_reset_impl(MultibyteStreamWriterObject *self); + +static PyObject * +_multibytecodec_MultibyteStreamWriter_reset(MultibyteStreamWriterObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _multibytecodec_MultibyteStreamWriter_reset_impl(self); +} + +PyDoc_STRVAR(_multibytecodec___create_codec__doc__, +"__create_codec($module, arg, /)\n" +"--"); + +#define _MULTIBYTECODEC___CREATE_CODEC_METHODDEF \ + {"__create_codec", (PyCFunction)_multibytecodec___create_codec, METH_O, _multibytecodec___create_codec__doc__}, +/*[clinic end generated code: output=dff1459dec464796 input=a9049054013a1b77]*/ diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 087ae9b1af..74ecafd3d6 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -8,6 +8,18 @@ #include "Python.h" #include "structmember.h" #include "multibytecodec.h" +#include "clinic/multibytecodec.c.h" + +/*[clinic input] +output preset file +module _multibytecodec +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=e0cf1b7f3c472d17]*/ + +/*[clinic input] +class _multibytecodec.MultibyteCodec "MultibyteCodecObject *" "&MultibyteCodec_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=d5b1fc1fec8eb003]*/ typedef struct { PyObject *inobj; @@ -22,27 +34,7 @@ typedef struct { _PyUnicodeWriter writer; } MultibyteDecodeBuffer; -PyDoc_STRVAR(MultibyteCodec_Encode__doc__, -"I.encode(unicode[, errors]) -> (string, length consumed)\n\ -\n\ -Return an encoded string version of `unicode'. errors may be given to\n\ -set a different error handling scheme. Default is 'strict' meaning that\n\ -encoding errors raise a UnicodeEncodeError. Other possible values are\n\ -'ignore', 'replace' and 'xmlcharrefreplace' as well as any other name\n\ -registered with codecs.register_error that can handle UnicodeEncodeErrors."); - -PyDoc_STRVAR(MultibyteCodec_Decode__doc__, -"I.decode(string[, errors]) -> (unicodeobject, length consumed)\n\ -\n\ -Decodes `string' using I, an MultibyteCodec instance. errors may be given\n\ -to set a different error handling scheme. Default is 'strict' meaning\n\ -that encoding errors raise a UnicodeDecodeError. Other possible values\n\ -are 'ignore' and 'replace' as well as any other name registered with\n\ -codecs.register_error that is able to handle UnicodeDecodeErrors."); - -static char *codeckwarglist[] = {"input", "errors", NULL}; static char *incnewkwarglist[] = {"errors", NULL}; -static char *incrementalkwarglist[] = {"input", "final", NULL}; static char *streamkwarglist[] = {"stream", "errors", NULL}; static PyObject *multibytecodec_encode(MultibyteCodec *, @@ -550,26 +542,35 @@ errorexit: return NULL; } +/*[clinic input] +_multibytecodec.MultibyteCodec.encode + + input: object + errors: str(nullable=True) = NULL + +Return an encoded string version of `input'. + +'errors' may be given to set a different error handling scheme. Default is +'strict' meaning that encoding errors raise a UnicodeEncodeError. Other possible +values are 'ignore', 'replace' and 'xmlcharrefreplace' as well as any other name +registered with codecs.register_error that can handle UnicodeEncodeErrors. +[clinic start generated code]*/ + static PyObject * -MultibyteCodec_Encode(MultibyteCodecObject *self, - PyObject *args, PyObject *kwargs) +_multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, PyObject *input, const char *errors) +/*[clinic end generated code: output=a36bfa08783a0d0b input=252e7ee695867b2d]*/ { MultibyteCodec_State state; - PyObject *errorcb, *r, *arg, *ucvt; - const char *errors = NULL; + PyObject *errorcb, *r, *ucvt; Py_ssize_t datalen; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|z:encode", - codeckwarglist, &arg, &errors)) - return NULL; - - if (PyUnicode_Check(arg)) + if (PyUnicode_Check(input)) ucvt = NULL; else { - arg = ucvt = PyObject_Str(arg); - if (arg == NULL) + input = ucvt = PyObject_Str(input); + if (input == NULL) return NULL; - else if (!PyUnicode_Check(arg)) { + else if (!PyUnicode_Check(input)) { PyErr_SetString(PyExc_TypeError, "couldn't convert the object to unicode."); Py_DECREF(ucvt); @@ -577,11 +578,11 @@ MultibyteCodec_Encode(MultibyteCodecObject *self, } } - if (PyUnicode_READY(arg) < 0) { + if (PyUnicode_READY(input) < 0) { Py_XDECREF(ucvt); return NULL; } - datalen = PyUnicode_GET_LENGTH(arg); + datalen = PyUnicode_GET_LENGTH(input); errorcb = internal_error_callback(errors); if (errorcb == NULL) { @@ -593,7 +594,7 @@ MultibyteCodec_Encode(MultibyteCodecObject *self, self->codec->encinit(&state, self->codec->config) != 0) goto errorexit; r = multibytecodec_encode(self->codec, &state, - arg, NULL, errorcb, + input, NULL, errorcb, MBENC_FLUSH | MBENC_RESET); if (r == NULL) goto errorexit; @@ -608,31 +609,39 @@ errorexit: return NULL; } +/*[clinic input] +_multibytecodec.MultibyteCodec.decode + + input: Py_buffer + errors: str(nullable=True) = NULL + +Decodes 'input'. + +'errors' may be given to set a different error handling scheme. Default is +'strict' meaning that encoding errors raise a UnicodeDecodeError. Other possible +values are 'ignore' and 'replace' as well as any other name registered with +codecs.register_error that is able to handle UnicodeDecodeErrors." +[clinic start generated code]*/ + static PyObject * -MultibyteCodec_Decode(MultibyteCodecObject *self, - PyObject *args, PyObject *kwargs) +_multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self, Py_buffer *input, const char *errors) +/*[clinic end generated code: output=4c8ee8b2931b014e input=37e1d9236e3ce8f3]*/ { MultibyteCodec_State state; MultibyteDecodeBuffer buf; PyObject *errorcb, *res; - Py_buffer pdata; - const char *data, *errors = NULL; + const char *data; Py_ssize_t datalen; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|z:decode", - codeckwarglist, &pdata, &errors)) - return NULL; - data = pdata.buf; - datalen = pdata.len; + data = input->buf; + datalen = input->len; errorcb = internal_error_callback(errors); if (errorcb == NULL) { - PyBuffer_Release(&pdata); return NULL; } if (datalen == 0) { - PyBuffer_Release(&pdata); ERROR_DECREF(errorcb); return make_tuple(PyUnicode_New(0, 0), 0); } @@ -665,13 +674,11 @@ MultibyteCodec_Decode(MultibyteCodecObject *self, if (res == NULL) goto errorexit; - PyBuffer_Release(&pdata); Py_XDECREF(buf.excobj); ERROR_DECREF(errorcb); return make_tuple(res, datalen); errorexit: - PyBuffer_Release(&pdata); ERROR_DECREF(errorcb); Py_XDECREF(buf.excobj); _PyUnicodeWriter_Dealloc(&buf.writer); @@ -680,13 +687,9 @@ errorexit: } static struct PyMethodDef multibytecodec_methods[] = { - {"encode", (PyCFunction)MultibyteCodec_Encode, - METH_VARARGS | METH_KEYWORDS, - MultibyteCodec_Encode__doc__}, - {"decode", (PyCFunction)MultibyteCodec_Decode, - METH_VARARGS | METH_KEYWORDS, - MultibyteCodec_Decode__doc__}, - {NULL, NULL}, + _MULTIBYTECODEC_MULTIBYTECODEC_ENCODE_METHODDEF + _MULTIBYTECODEC_MULTIBYTECODEC_DECODE_METHODDEF + {NULL, NULL}, }; static void @@ -870,26 +873,32 @@ decoder_feed_buffer(MultibyteStatefulDecoderContext *ctx, } -/** - * MultibyteIncrementalEncoder object - */ +/*[clinic input] + class _multibytecodec.MultibyteIncrementalEncoder "MultibyteIncrementalEncoderObject *" "&MultibyteIncrementalEncoder_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=3be82909cd08924d]*/ -static PyObject * -mbiencoder_encode(MultibyteIncrementalEncoderObject *self, - PyObject *args, PyObject *kwargs) -{ - PyObject *data; - int final = 0; +/*[clinic input] +_multibytecodec.MultibyteIncrementalEncoder.encode - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|i:encode", - incrementalkwarglist, &data, &final)) - return NULL; + input: object + final: int = 0 +[clinic start generated code]*/ - return encoder_encode_stateful(STATEFUL_ECTX(self), data, final); +static PyObject * +_multibytecodec_MultibyteIncrementalEncoder_encode_impl(MultibyteIncrementalEncoderObject *self, PyObject *input, int final) +/*[clinic end generated code: output=3cd8780c8a719bbf input=456b76d73e464661]*/ +{ + return encoder_encode_stateful(STATEFUL_ECTX(self), input, final); } +/*[clinic input] +_multibytecodec.MultibyteIncrementalEncoder.reset +[clinic start generated code]*/ + static PyObject * -mbiencoder_reset(MultibyteIncrementalEncoderObject *self) +_multibytecodec_MultibyteIncrementalEncoder_reset_impl(MultibyteIncrementalEncoderObject *self) +/*[clinic end generated code: output=b4125d8f537a253f input=930f06760707b6ea]*/ { /* Longest output: 4 bytes (b'\x0F\x1F(B') with ISO 2022 */ unsigned char buffer[4], *outbuf; @@ -906,11 +915,9 @@ mbiencoder_reset(MultibyteIncrementalEncoderObject *self) } static struct PyMethodDef mbiencoder_methods[] = { - {"encode", (PyCFunction)mbiencoder_encode, - METH_VARARGS | METH_KEYWORDS, NULL}, - {"reset", (PyCFunction)mbiencoder_reset, - METH_NOARGS, NULL}, - {NULL, NULL}, + _MULTIBYTECODEC_MULTIBYTEINCREMENTALENCODER_ENCODE_METHODDEF + _MULTIBYTECODEC_MULTIBYTEINCREMENTALENCODER_RESET_METHODDEF + {NULL, NULL}, }; static PyObject * @@ -1021,26 +1028,29 @@ static PyTypeObject MultibyteIncrementalEncoder_Type = { }; -/** - * MultibyteIncrementalDecoder object - */ +/*[clinic input] + class _multibytecodec.MultibyteIncrementalDecoder "MultibyteIncrementalDecoderObject *" "&MultibyteIncrementalDecoder_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=f6003faaf2cea692]*/ + +/*[clinic input] +_multibytecodec.MultibyteIncrementalDecoder.decode + + input: Py_buffer + final: int = 0 +[clinic start generated code]*/ static PyObject * -mbidecoder_decode(MultibyteIncrementalDecoderObject *self, - PyObject *args, PyObject *kwargs) +_multibytecodec_MultibyteIncrementalDecoder_decode_impl(MultibyteIncrementalDecoderObject *self, Py_buffer *input, int final) +/*[clinic end generated code: output=a0f3f92aa7303cf7 input=eb18c2f6e83589e1]*/ { MultibyteDecodeBuffer buf; char *data, *wdata = NULL; - Py_buffer pdata; Py_ssize_t wsize, size, origpending; - int final = 0; PyObject *res; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|i:decode", - incrementalkwarglist, &pdata, &final)) - return NULL; - data = pdata.buf; - size = pdata.len; + data = input->buf; + size = input->len; _PyUnicodeWriter_Init(&buf.writer); buf.excobj = NULL; @@ -1091,14 +1101,12 @@ mbidecoder_decode(MultibyteIncrementalDecoderObject *self, if (res == NULL) goto errorexit; - PyBuffer_Release(&pdata); if (wdata != data) PyMem_Del(wdata); Py_XDECREF(buf.excobj); return res; errorexit: - PyBuffer_Release(&pdata); if (wdata != NULL && wdata != data) PyMem_Del(wdata); Py_XDECREF(buf.excobj); @@ -1106,8 +1114,13 @@ errorexit: return NULL; } +/*[clinic input] +_multibytecodec.MultibyteIncrementalDecoder.reset +[clinic start generated code]*/ + static PyObject * -mbidecoder_reset(MultibyteIncrementalDecoderObject *self) +_multibytecodec_MultibyteIncrementalDecoder_reset_impl(MultibyteIncrementalDecoderObject *self) +/*[clinic end generated code: output=da423b1782c23ed1 input=3b63b3be85b2fb45]*/ { if (self->codec->decreset != NULL && self->codec->decreset(&self->state, self->codec->config) != 0) @@ -1118,11 +1131,9 @@ mbidecoder_reset(MultibyteIncrementalDecoderObject *self) } static struct PyMethodDef mbidecoder_methods[] = { - {"decode", (PyCFunction)mbidecoder_decode, - METH_VARARGS | METH_KEYWORDS, NULL}, - {"reset", (PyCFunction)mbidecoder_reset, - METH_NOARGS, NULL}, - {NULL, NULL}, + _MULTIBYTECODEC_MULTIBYTEINCREMENTALDECODER_DECODE_METHODDEF + _MULTIBYTECODEC_MULTIBYTEINCREMENTALDECODER_RESET_METHODDEF + {NULL, NULL}, }; static PyObject * @@ -1233,9 +1244,10 @@ static PyTypeObject MultibyteIncrementalDecoder_Type = { }; -/** - * MultibyteStreamReader object - */ +/*[clinic input] + class _multibytecodec.MultibyteStreamReader "MultibyteStreamReaderObject *" "MultibyteStreamReader_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=d323634b74976f09]*/ static PyObject * mbstreamreader_iread(MultibyteStreamReaderObject *self, @@ -1342,16 +1354,20 @@ errorexit: return NULL; } +/*[clinic input] + _multibytecodec.MultibyteStreamReader.read + + sizeobj: object = None + / +[clinic start generated code]*/ + static PyObject * -mbstreamreader_read(MultibyteStreamReaderObject *self, PyObject *args) +_multibytecodec_MultibyteStreamReader_read_impl(MultibyteStreamReaderObject *self, PyObject *sizeobj) +/*[clinic end generated code: output=f298ea6e1bd2083c input=015b0d3ff2fca485]*/ { - PyObject *sizeobj = NULL; Py_ssize_t size; - if (!PyArg_UnpackTuple(args, "read", 0, 1, &sizeobj)) - return NULL; - - if (sizeobj == Py_None || sizeobj == NULL) + if (sizeobj == Py_None) size = -1; else if (PyLong_Check(sizeobj)) size = PyLong_AsSsize_t(sizeobj); @@ -1366,16 +1382,20 @@ mbstreamreader_read(MultibyteStreamReaderObject *self, PyObject *args) return mbstreamreader_iread(self, "read", size); } +/*[clinic input] + _multibytecodec.MultibyteStreamReader.readline + + sizeobj: object = None + / +[clinic start generated code]*/ + static PyObject * -mbstreamreader_readline(MultibyteStreamReaderObject *self, PyObject *args) +_multibytecodec_MultibyteStreamReader_readline_impl(MultibyteStreamReaderObject *self, PyObject *sizeobj) +/*[clinic end generated code: output=e5ac302a6d0999de input=41ccc64f9bb0cec3]*/ { - PyObject *sizeobj = NULL; Py_ssize_t size; - if (!PyArg_UnpackTuple(args, "readline", 0, 1, &sizeobj)) - return NULL; - - if (sizeobj == Py_None || sizeobj == NULL) + if (sizeobj == Py_None) size = -1; else if (PyLong_Check(sizeobj)) size = PyLong_AsSsize_t(sizeobj); @@ -1390,16 +1410,21 @@ mbstreamreader_readline(MultibyteStreamReaderObject *self, PyObject *args) return mbstreamreader_iread(self, "readline", size); } +/*[clinic input] + _multibytecodec.MultibyteStreamReader.readlines + + sizehintobj: object = None + / +[clinic start generated code]*/ + static PyObject * -mbstreamreader_readlines(MultibyteStreamReaderObject *self, PyObject *args) +_multibytecodec_MultibyteStreamReader_readlines_impl(MultibyteStreamReaderObject *self, PyObject *sizehintobj) +/*[clinic end generated code: output=68f024178b77cb0f input=54932f5d4d88e880]*/ { - PyObject *sizehintobj = NULL, *r, *sr; + PyObject *r, *sr; Py_ssize_t sizehint; - if (!PyArg_UnpackTuple(args, "readlines", 0, 1, &sizehintobj)) - return NULL; - - if (sizehintobj == Py_None || sizehintobj == NULL) + if (sizehintobj == Py_None) sizehint = -1; else if (PyLong_Check(sizehintobj)) sizehint = PyLong_AsSsize_t(sizehintobj); @@ -1420,8 +1445,13 @@ mbstreamreader_readlines(MultibyteStreamReaderObject *self, PyObject *args) return sr; } +/*[clinic input] + _multibytecodec.MultibyteStreamReader.reset +[clinic start generated code]*/ + static PyObject * -mbstreamreader_reset(MultibyteStreamReaderObject *self) +_multibytecodec_MultibyteStreamReader_reset_impl(MultibyteStreamReaderObject *self) +/*[clinic end generated code: output=138490370a680abc input=5d4140db84b5e1e2]*/ { if (self->codec->decreset != NULL && self->codec->decreset(&self->state, self->codec->config) != 0) @@ -1432,14 +1462,10 @@ mbstreamreader_reset(MultibyteStreamReaderObject *self) } static struct PyMethodDef mbstreamreader_methods[] = { - {"read", (PyCFunction)mbstreamreader_read, - METH_VARARGS, NULL}, - {"readline", (PyCFunction)mbstreamreader_readline, - METH_VARARGS, NULL}, - {"readlines", (PyCFunction)mbstreamreader_readlines, - METH_VARARGS, NULL}, - {"reset", (PyCFunction)mbstreamreader_reset, - METH_NOARGS, NULL}, + _MULTIBYTECODEC_MULTIBYTESTREAMREADER_READ_METHODDEF + _MULTIBYTECODEC_MULTIBYTESTREAMREADER_READLINE_METHODDEF + _MULTIBYTECODEC_MULTIBYTESTREAMREADER_READLINES_METHODDEF + _MULTIBYTECODEC_MULTIBYTESTREAMREADER_RESET_METHODDEF {NULL, NULL}, }; @@ -1562,9 +1588,10 @@ static PyTypeObject MultibyteStreamReader_Type = { }; -/** - * MultibyteStreamWriter object - */ +/*[clinic input] + class _multibytecodec.MultibyteStreamWriter "MultibyteStreamWriterObject *" "&MultibyteStreamWriter_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=cde22780a215d6ac]*/ static int mbstreamwriter_iwrite(MultibyteStreamWriterObject *self, @@ -1585,8 +1612,16 @@ mbstreamwriter_iwrite(MultibyteStreamWriterObject *self, return 0; } +/*[clinic input] + _multibytecodec.MultibyteStreamWriter.write + + strobj: object + / +[clinic start generated code]*/ + static PyObject * -mbstreamwriter_write(MultibyteStreamWriterObject *self, PyObject *strobj) +_multibytecodec_MultibyteStreamWriter_write(MultibyteStreamWriterObject *self, PyObject *strobj) +/*[clinic end generated code: output=44e9eb0db0374cb1 input=551dc4c018c10a2b]*/ { if (mbstreamwriter_iwrite(self, strobj)) return NULL; @@ -1594,8 +1629,16 @@ mbstreamwriter_write(MultibyteStreamWriterObject *self, PyObject *strobj) Py_RETURN_NONE; } +/*[clinic input] + _multibytecodec.MultibyteStreamWriter.writelines + + lines: object + / +[clinic start generated code]*/ + static PyObject * -mbstreamwriter_writelines(MultibyteStreamWriterObject *self, PyObject *lines) +_multibytecodec_MultibyteStreamWriter_writelines(MultibyteStreamWriterObject *self, PyObject *lines) +/*[clinic end generated code: output=4facbb0638dde172 input=57797fe7008d4e96]*/ { PyObject *strobj; int i, r; @@ -1621,8 +1664,13 @@ mbstreamwriter_writelines(MultibyteStreamWriterObject *self, PyObject *lines) Py_RETURN_NONE; } +/*[clinic input] + _multibytecodec.MultibyteStreamWriter.reset +[clinic start generated code]*/ + static PyObject * -mbstreamwriter_reset(MultibyteStreamWriterObject *self) +_multibytecodec_MultibyteStreamWriter_reset_impl(MultibyteStreamWriterObject *self) +/*[clinic end generated code: output=8f54a4d9b03db5ff input=b56dbcbaf35cc10c]*/ { PyObject *pwrt; @@ -1721,13 +1769,10 @@ mbstreamwriter_dealloc(MultibyteStreamWriterObject *self) } static struct PyMethodDef mbstreamwriter_methods[] = { - {"write", (PyCFunction)mbstreamwriter_write, - METH_O, NULL}, - {"writelines", (PyCFunction)mbstreamwriter_writelines, - METH_O, NULL}, - {"reset", (PyCFunction)mbstreamwriter_reset, - METH_NOARGS, NULL}, - {NULL, NULL}, + _MULTIBYTECODEC_MULTIBYTESTREAMWRITER_WRITE_METHODDEF + _MULTIBYTECODEC_MULTIBYTESTREAMWRITER_WRITELINES_METHODDEF + _MULTIBYTECODEC_MULTIBYTESTREAMWRITER_RESET_METHODDEF + {NULL, NULL}, }; static PyMemberDef mbstreamwriter_members[] = { @@ -1781,12 +1826,16 @@ static PyTypeObject MultibyteStreamWriter_Type = { }; -/** - * Exposed factory function - */ +/*[clinic input] +_multibytecodec.__create_codec + + arg: object + / +[clinic start generated code]*/ static PyObject * -__create_codec(PyObject *ignore, PyObject *arg) +_multibytecodec___create_codec(PyModuleDef *module, PyObject *arg) +/*[clinic end generated code: output=fbe74f6510640163 input=6840b2a6b183fcfa]*/ { MultibyteCodecObject *self; MultibyteCodec *codec; @@ -1809,7 +1858,7 @@ __create_codec(PyObject *ignore, PyObject *arg) } static struct PyMethodDef __methods[] = { - {"__create_codec", (PyCFunction)__create_codec, METH_O}, + _MULTIBYTECODEC___CREATE_CODEC_METHODDEF {NULL, NULL}, }; -- cgit v1.2.1 From 211e13e9c38aed950ae2e1b18f04a0e176be670b Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 22 Aug 2014 11:52:46 -0400 Subject: Issue #20152: Convert the grp module to Argument Clinic. --- Modules/clinic/grpmodule.c.h | 87 ++++++++++++++++++++++++++++++++++++++++++++ Modules/grpmodule.c | 79 +++++++++++++++++++++++++++------------- 2 files changed, 140 insertions(+), 26 deletions(-) create mode 100644 Modules/clinic/grpmodule.c.h (limited to 'Modules') diff --git a/Modules/clinic/grpmodule.c.h b/Modules/clinic/grpmodule.c.h new file mode 100644 index 0000000000..681830954b --- /dev/null +++ b/Modules/clinic/grpmodule.c.h @@ -0,0 +1,87 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(grp_getgrgid__doc__, +"getgrgid($module, /, id)\n" +"--\n" +"\n" +"Return the group database entry for the given numeric group ID.\n" +"\n" +"If id is not valid, raise KeyError."); + +#define GRP_GETGRGID_METHODDEF \ + {"getgrgid", (PyCFunction)grp_getgrgid, METH_VARARGS|METH_KEYWORDS, grp_getgrgid__doc__}, + +static PyObject * +grp_getgrgid_impl(PyModuleDef *module, PyObject *id); + +static PyObject * +grp_getgrgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"id", NULL}; + PyObject *id; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O:getgrgid", _keywords, + &id)) + goto exit; + return_value = grp_getgrgid_impl(module, id); + +exit: + return return_value; +} + +PyDoc_STRVAR(grp_getgrnam__doc__, +"getgrnam($module, /, name)\n" +"--\n" +"\n" +"Return the group database entry for the given group name.\n" +"\n" +"If name is not valid, raise KeyError."); + +#define GRP_GETGRNAM_METHODDEF \ + {"getgrnam", (PyCFunction)grp_getgrnam, METH_VARARGS|METH_KEYWORDS, grp_getgrnam__doc__}, + +static PyObject * +grp_getgrnam_impl(PyModuleDef *module, PyObject *name); + +static PyObject * +grp_getgrnam(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"name", NULL}; + PyObject *name; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "U:getgrnam", _keywords, + &name)) + goto exit; + return_value = grp_getgrnam_impl(module, name); + +exit: + return return_value; +} + +PyDoc_STRVAR(grp_getgrall__doc__, +"getgrall($module, /)\n" +"--\n" +"\n" +"Return a list of all available group entries, in arbitrary order.\n" +"\n" +"An entry whose name starts with \'+\' or \'-\' represents an instruction\n" +"to use YP/NIS and may not be accessible via getgrnam or getgrgid."); + +#define GRP_GETGRALL_METHODDEF \ + {"getgrall", (PyCFunction)grp_getgrall, METH_NOARGS, grp_getgrall__doc__}, + +static PyObject * +grp_getgrall_impl(PyModuleDef *module); + +static PyObject * +grp_getgrall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return grp_getgrall_impl(module); +} +/*[clinic end generated code: output=4709a6ba40bb8df9 input=a9049054013a1b77]*/ diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c index c8a93723ea..73289d576e 100644 --- a/Modules/grpmodule.c +++ b/Modules/grpmodule.c @@ -6,6 +6,13 @@ #include +#include "clinic/grpmodule.c.h" +/*[clinic input] +output preset file +module grp +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=68180a9a9efb8506]*/ + static PyStructSequence_Field struct_group_type_fields[] = { {"gr_name", "group name"}, {"gr_passwd", "password"}, @@ -76,14 +83,25 @@ mkgrent(struct group *p) return v; } +/*[clinic input] +grp.getgrgid + + id: object + +Return the group database entry for the given numeric group ID. + +If id is not valid, raise KeyError. +[clinic start generated code]*/ + static PyObject * -grp_getgrgid(PyObject *self, PyObject *pyo_id) +grp_getgrgid_impl(PyModuleDef *module, PyObject *id) +/*[clinic end generated code: output=8a11f5fdeb8c78a0 input=15fa0e2ccf5cda25]*/ { PyObject *py_int_id; gid_t gid; struct group *p; - py_int_id = PyNumber_Long(pyo_id); + py_int_id = PyNumber_Long(id); if (!py_int_id) return NULL; if (!_Py_Gid_Converter(py_int_id, &gid)) { @@ -103,22 +121,31 @@ grp_getgrgid(PyObject *self, PyObject *pyo_id) return mkgrent(p); } +/*[clinic input] +grp.getgrnam + + name: unicode + +Return the group database entry for the given group name. + +If name is not valid, raise KeyError. +[clinic start generated code]*/ + static PyObject * -grp_getgrnam(PyObject *self, PyObject *args) +grp_getgrnam_impl(PyModuleDef *module, PyObject *name) +/*[clinic end generated code: output=cd47511f4854da8e input=08ded29affa3c863]*/ { - char *name; + char *name_chars; struct group *p; - PyObject *arg, *bytes, *retval = NULL; + PyObject *bytes, *retval = NULL; - if (!PyArg_ParseTuple(args, "U:getgrnam", &arg)) - return NULL; - if ((bytes = PyUnicode_EncodeFSDefault(arg)) == NULL) + if ((bytes = PyUnicode_EncodeFSDefault(name)) == NULL) return NULL; - if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1) + if (PyBytes_AsStringAndSize(bytes, &name_chars, NULL) == -1) goto out; - if ((p = getgrnam(name)) == NULL) { - PyErr_Format(PyExc_KeyError, "getgrnam(): name not found: %s", name); + if ((p = getgrnam(name_chars)) == NULL) { + PyErr_Format(PyExc_KeyError, "getgrnam(): name not found: %s", name_chars); goto out; } retval = mkgrent(p); @@ -127,8 +154,18 @@ out: return retval; } +/*[clinic input] +grp.getgrall + +Return a list of all available group entries, in arbitrary order. + +An entry whose name starts with '+' or '-' represents an instruction +to use YP/NIS and may not be accessible via getgrnam or getgrgid. +[clinic start generated code]*/ + static PyObject * -grp_getgrall(PyObject *self, PyObject *ignore) +grp_getgrall_impl(PyModuleDef *module) +/*[clinic end generated code: output=add9037a20c202de input=d7df76c825c367df]*/ { PyObject *d; struct group *p; @@ -151,20 +188,10 @@ grp_getgrall(PyObject *self, PyObject *ignore) } static PyMethodDef grp_methods[] = { - {"getgrgid", grp_getgrgid, METH_O, - "getgrgid(id) -> tuple\n\ -Return the group database entry for the given numeric group ID. If\n\ -id is not valid, raise KeyError."}, - {"getgrnam", grp_getgrnam, METH_VARARGS, - "getgrnam(name) -> tuple\n\ -Return the group database entry for the given group name. If\n\ -name is not valid, raise KeyError."}, - {"getgrall", grp_getgrall, METH_NOARGS, - "getgrall() -> list of tuples\n\ -Return a list of all available group entries, in arbitrary order.\n\ -An entry whose name starts with '+' or '-' represents an instruction\n\ -to use YP/NIS and may not be accessible via getgrnam or getgrgid."}, - {NULL, NULL} /* sentinel */ + GRP_GETGRGID_METHODDEF + GRP_GETGRNAM_METHODDEF + GRP_GETGRALL_METHODDEF + {NULL, NULL} }; PyDoc_STRVAR(grp__doc__, -- cgit v1.2.1 From 33c1ad4d8632838aa78271a91e274a7107dd5df9 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 22 Aug 2014 13:59:24 -0400 Subject: Issue #20152: Port the spwd module to Argument Clinic. --- Modules/clinic/spwdmodule.c.h | 70 +++++++++++++++++++++++++++++++++++++++++++ Modules/spwdmodule.c | 47 ++++++++++++++++++----------- 2 files changed, 100 insertions(+), 17 deletions(-) create mode 100644 Modules/clinic/spwdmodule.c.h (limited to 'Modules') diff --git a/Modules/clinic/spwdmodule.c.h b/Modules/clinic/spwdmodule.c.h new file mode 100644 index 0000000000..b091fc9ba7 --- /dev/null +++ b/Modules/clinic/spwdmodule.c.h @@ -0,0 +1,70 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +#if defined(HAVE_GETSPNAM) + +PyDoc_STRVAR(spwd_getspnam__doc__, +"getspnam($module, arg, /)\n" +"--\n" +"\n" +"Return the shadow password database entry for the given user name.\n" +"\n" +"See `help(spwd)` for more on shadow password database entries."); + +#define SPWD_GETSPNAM_METHODDEF \ + {"getspnam", (PyCFunction)spwd_getspnam, METH_VARARGS, spwd_getspnam__doc__}, + +static PyObject * +spwd_getspnam_impl(PyModuleDef *module, PyObject *arg); + +static PyObject * +spwd_getspnam(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *arg; + + if (!PyArg_ParseTuple(args, + "U:getspnam", + &arg)) + goto exit; + return_value = spwd_getspnam_impl(module, arg); + +exit: + return return_value; +} + +#endif /* defined(HAVE_GETSPNAM) */ + +#ifndef SPWD_GETSPNAM_METHODDEF + #define SPWD_GETSPNAM_METHODDEF +#endif /* !defined(SPWD_GETSPNAM_METHODDEF) */ + +#if defined(HAVE_GETSPENT) + +PyDoc_STRVAR(spwd_getspall__doc__, +"getspall($module, /)\n" +"--\n" +"\n" +"Return a list of all available shadow password database entries, in arbitrary order.\n" +"\n" +"See `help(spwd)` for more on shadow password database entries."); + +#define SPWD_GETSPALL_METHODDEF \ + {"getspall", (PyCFunction)spwd_getspall, METH_NOARGS, spwd_getspall__doc__}, + +static PyObject * +spwd_getspall_impl(PyModuleDef *module); + +static PyObject * +spwd_getspall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return spwd_getspall_impl(module); +} + +#endif /* defined(HAVE_GETSPENT) */ + +#ifndef SPWD_GETSPALL_METHODDEF + #define SPWD_GETSPALL_METHODDEF +#endif /* !defined(SPWD_GETSPALL_METHODDEF) */ +/*[clinic end generated code: output=41fec4a15b0cd2a0 input=a9049054013a1b77]*/ diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c index 68ea1b5ea4..6ef4a7d265 100644 --- a/Modules/spwdmodule.c +++ b/Modules/spwdmodule.c @@ -10,6 +10,11 @@ #include #endif +/*[clinic input] +output preset file +module spwd +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b3464a3667278fae]*/ PyDoc_STRVAR(spwd__doc__, "This module provides access to the Unix shadow password database.\n\ @@ -107,20 +112,25 @@ static PyObject *mkspent(struct spwd *p) #ifdef HAVE_GETSPNAM -PyDoc_STRVAR(spwd_getspnam__doc__, -"getspnam(name) -> (sp_namp, sp_pwdp, sp_lstchg, sp_min, sp_max,\n\ - sp_warn, sp_inact, sp_expire, sp_flag)\n\ -Return the shadow password database entry for the given user name.\n\ -See spwd.__doc__ for more on shadow password database entries."); +/*[clinic input] +spwd.getspnam -static PyObject* spwd_getspnam(PyObject *self, PyObject *args) + arg: unicode + / + +Return the shadow password database entry for the given user name. + +See `help(spwd)` for more on shadow password database entries. +[clinic start generated code]*/ + +static PyObject * +spwd_getspnam_impl(PyModuleDef *module, PyObject *arg) +/*[clinic end generated code: output=9f6bbe51a4eb3b21 input=dd89429e6167a00f]*/ { char *name; struct spwd *p; - PyObject *arg, *bytes, *retval = NULL; + PyObject *bytes, *retval = NULL; - if (!PyArg_ParseTuple(args, "U:getspnam", &arg)) - return NULL; if ((bytes = PyUnicode_EncodeFSDefault(arg)) == NULL) return NULL; if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1) @@ -139,14 +149,17 @@ out: #ifdef HAVE_GETSPENT -PyDoc_STRVAR(spwd_getspall__doc__, -"getspall() -> list_of_entries\n\ -Return a list of all available shadow password database entries, \ -in arbitrary order.\n\ -See spwd.__doc__ for more on shadow password database entries."); +/*[clinic input] +spwd.getspall + +Return a list of all available shadow password database entries, in arbitrary order. + +See `help(spwd)` for more on shadow password database entries. +[clinic start generated code]*/ static PyObject * -spwd_getspall(PyObject *self, PyObject *args) +spwd_getspall_impl(PyModuleDef *module) +/*[clinic end generated code: output=b12d8ec7bdb29612 input=b2c84b7857d622bd]*/ { PyObject *d; struct spwd *p; @@ -171,10 +184,10 @@ spwd_getspall(PyObject *self, PyObject *args) static PyMethodDef spwd_methods[] = { #ifdef HAVE_GETSPNAM - {"getspnam", spwd_getspnam, METH_VARARGS, spwd_getspnam__doc__}, + SPWD_GETSPNAM_METHODDEF #endif #ifdef HAVE_GETSPENT - {"getspall", spwd_getspall, METH_NOARGS, spwd_getspall__doc__}, + SPWD_GETSPALL_METHODDEF #endif {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From 5c0d0ea72ecb96673065cb8f9accea98c705ded6 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 22 Aug 2014 14:01:56 -0400 Subject: Fix a missing #include. --- Modules/spwdmodule.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Modules') diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c index 6ef4a7d265..013cb1156e 100644 --- a/Modules/spwdmodule.c +++ b/Modules/spwdmodule.c @@ -10,6 +10,8 @@ #include #endif +#include "clinic/spwdmodule.c.h" + /*[clinic input] output preset file module spwd -- cgit v1.2.1 From d059f8b51815fa39a3115264499a333e8cba0bbd Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 22 Aug 2014 14:03:51 -0400 Subject: Issue #20152: Port the pwd module to Argument Clinic. --- Modules/pwdmodule.c | 72 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 26 deletions(-) (limited to 'Modules') diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c index ebb8712018..b02753f932 100644 --- a/Modules/pwdmodule.c +++ b/Modules/pwdmodule.c @@ -6,6 +6,13 @@ #include +#include "clinic/pwdmodule.c.h" +/*[clinic input] +output preset file +module pwd +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=bbcf68b1f549f917]*/ + static PyStructSequence_Field struct_pwd_type_fields[] = { {"pw_name", "user name"}, {"pw_passwd", "password"}, @@ -87,18 +94,25 @@ mkpwent(struct passwd *p) return v; } -PyDoc_STRVAR(pwd_getpwuid__doc__, -"getpwuid(uid) -> (pw_name,pw_passwd,pw_uid,\n\ - pw_gid,pw_gecos,pw_dir,pw_shell)\n\ -Return the password database entry for the given numeric user ID.\n\ -See help(pwd) for more on password database entries."); +/*[clinic input] +pwd.getpwuid + + uidobj: object + / + +Return the password database entry for the given numeric user ID. + +See `help(pwd)` for more on password database entries. +[clinic start generated code]*/ static PyObject * -pwd_getpwuid(PyObject *self, PyObject *args) +pwd_getpwuid(PyModuleDef *module, PyObject *uidobj) +/*[clinic end generated code: output=cba29ae4c2bcb8e1 input=ae64d507a1c6d3e8]*/ { uid_t uid; struct passwd *p; - if (!PyArg_ParseTuple(args, "O&:getpwuid", _Py_Uid_Converter, &uid)) { + + if (!_Py_Uid_Converter(uidobj, &uid)) { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Format(PyExc_KeyError, "getpwuid(): uid not found"); @@ -116,21 +130,25 @@ pwd_getpwuid(PyObject *self, PyObject *args) return mkpwent(p); } -PyDoc_STRVAR(pwd_getpwnam__doc__, -"getpwnam(name) -> (pw_name,pw_passwd,pw_uid,\n\ - pw_gid,pw_gecos,pw_dir,pw_shell)\n\ -Return the password database entry for the given user name.\n\ -See help(pwd) for more on password database entries."); +/*[clinic input] +pwd.getpwnam + + arg: unicode + / + +Return the password database entry for the given user name. + +See `help(pwd)` for more on password database entries. +[clinic start generated code]*/ static PyObject * -pwd_getpwnam(PyObject *self, PyObject *args) +pwd_getpwnam_impl(PyModuleDef *module, PyObject *arg) +/*[clinic end generated code: output=66848d42d386fca3 input=d5f7e700919b02d3]*/ { char *name; struct passwd *p; - PyObject *arg, *bytes, *retval = NULL; + PyObject *bytes, *retval = NULL; - if (!PyArg_ParseTuple(args, "U:getpwnam", &arg)) - return NULL; if ((bytes = PyUnicode_EncodeFSDefault(arg)) == NULL) return NULL; if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1) @@ -147,14 +165,17 @@ out: } #ifdef HAVE_GETPWENT -PyDoc_STRVAR(pwd_getpwall__doc__, -"getpwall() -> list_of_entries\n\ -Return a list of all available password database entries, \ -in arbitrary order.\n\ -See help(pwd) for more on password database entries."); +/*[clinic input] +pwd.getpwall + +Return a list of all available password database entries, in arbitrary order. + +See help(pwd) for more on password database entries. +[clinic start generated code]*/ static PyObject * -pwd_getpwall(PyObject *self) +pwd_getpwall_impl(PyModuleDef *module) +/*[clinic end generated code: output=ab30e37bf26d431d input=d7ecebfd90219b85]*/ { PyObject *d; struct passwd *p; @@ -177,11 +198,10 @@ pwd_getpwall(PyObject *self) #endif static PyMethodDef pwd_methods[] = { - {"getpwuid", pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__}, - {"getpwnam", pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__}, + PWD_GETPWUID_METHODDEF + PWD_GETPWNAM_METHODDEF #ifdef HAVE_GETPWENT - {"getpwall", (PyCFunction)pwd_getpwall, - METH_NOARGS, pwd_getpwall__doc__}, + PWD_GETPWALL_METHODDEF #endif {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From af41abb4af2f8c754fb7eff821e5f79219ad8f91 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 22 Aug 2014 14:08:46 -0400 Subject: Add a missing Argument Clinic file --- Modules/clinic/pwdmodule.c.h | 73 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Modules/clinic/pwdmodule.c.h (limited to 'Modules') diff --git a/Modules/clinic/pwdmodule.c.h b/Modules/clinic/pwdmodule.c.h new file mode 100644 index 0000000000..6a40042c5e --- /dev/null +++ b/Modules/clinic/pwdmodule.c.h @@ -0,0 +1,73 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(pwd_getpwuid__doc__, +"getpwuid($module, uidobj, /)\n" +"--\n" +"\n" +"Return the password database entry for the given numeric user ID.\n" +"\n" +"See `help(pwd)` for more on password database entries."); + +#define PWD_GETPWUID_METHODDEF \ + {"getpwuid", (PyCFunction)pwd_getpwuid, METH_O, pwd_getpwuid__doc__}, + +PyDoc_STRVAR(pwd_getpwnam__doc__, +"getpwnam($module, arg, /)\n" +"--\n" +"\n" +"Return the password database entry for the given user name.\n" +"\n" +"See `help(pwd)` for more on password database entries."); + +#define PWD_GETPWNAM_METHODDEF \ + {"getpwnam", (PyCFunction)pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__}, + +static PyObject * +pwd_getpwnam_impl(PyModuleDef *module, PyObject *arg); + +static PyObject * +pwd_getpwnam(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *arg; + + if (!PyArg_ParseTuple(args, + "U:getpwnam", + &arg)) + goto exit; + return_value = pwd_getpwnam_impl(module, arg); + +exit: + return return_value; +} + +#if defined(HAVE_GETPWENT) + +PyDoc_STRVAR(pwd_getpwall__doc__, +"getpwall($module, /)\n" +"--\n" +"\n" +"Return a list of all available password database entries, in arbitrary order.\n" +"\n" +"See help(pwd) for more on password database entries."); + +#define PWD_GETPWALL_METHODDEF \ + {"getpwall", (PyCFunction)pwd_getpwall, METH_NOARGS, pwd_getpwall__doc__}, + +static PyObject * +pwd_getpwall_impl(PyModuleDef *module); + +static PyObject * +pwd_getpwall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return pwd_getpwall_impl(module); +} + +#endif /* defined(HAVE_GETPWENT) */ + +#ifndef PWD_GETPWALL_METHODDEF + #define PWD_GETPWALL_METHODDEF +#endif /* !defined(PWD_GETPWALL_METHODDEF) */ +/*[clinic end generated code: output=2e23f920020a750a input=a9049054013a1b77]*/ -- cgit v1.2.1 From 18c74b9ac00fe10bd5a2996e89651955c778892d Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 22 Aug 2014 14:23:20 -0400 Subject: Issue #20152: Port pyexpat to Argument Clinic. Could not emit an external file as pyexpat has a conditionally built method which Clinic won't hide otherwise. --- Modules/pyexpat.c | 625 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 471 insertions(+), 154 deletions(-) (limited to 'Modules') diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 97f2b56771..9c21bed017 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -6,6 +6,13 @@ #include "pyexpat.h" +/* Do not emit Clinic output to a file as that wreaks havoc with conditionally + included methods. */ +/*[clinic input] +module pyexpat +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b168d503a4490c15]*/ + #define XML_COMBINED_VERSION (10000*XML_MAJOR_VERSION+100*XML_MINOR_VERSION+XML_MICRO_VERSION) #define FIX_TRACE @@ -777,6 +784,11 @@ VOID_HANDLER(StartDoctypeDecl, VOID_HANDLER(EndDoctypeDecl, (void *userData), ("()")) /* ---------------------------------------------------------------- */ +/*[clinic input] +class pyexpat.xmlparser "xmlparseobject *" "&Xmlparsetype" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=2393162385232e1c]*/ + static PyObject * get_parse_result(xmlparseobject *self, int rv) @@ -793,25 +805,60 @@ get_parse_result(xmlparseobject *self, int rv) return PyLong_FromLong(rv); } -PyDoc_STRVAR(xmlparse_Parse__doc__, -"Parse(data[, isfinal])\n\ -Parse XML data. `isfinal' should be true at end of input."); - #define MAX_CHUNK_SIZE (1 << 20) +/*[clinic input] +pyexpat.xmlparser.Parse + + data: object + isFinal: int = 0 + / + +Parse XML data. + +`isfinal' should be true at end of input. +[clinic start generated code]*/ + +PyDoc_STRVAR(pyexpat_xmlparser_Parse__doc__, +"Parse($self, data, isFinal=0, /)\n" +"--\n" +"\n" +"Parse XML data.\n" +"\n" +"`isfinal\' should be true at end of input."); + +#define PYEXPAT_XMLPARSER_PARSE_METHODDEF \ + {"Parse", (PyCFunction)pyexpat_xmlparser_Parse, METH_VARARGS, pyexpat_xmlparser_Parse__doc__}, + +static PyObject * +pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, int isFinal); + static PyObject * -xmlparse_Parse(xmlparseobject *self, PyObject *args) +pyexpat_xmlparser_Parse(xmlparseobject *self, PyObject *args) { + PyObject *return_value = NULL; PyObject *data; int isFinal = 0; + + if (!PyArg_ParseTuple(args, + "O|i:Parse", + &data, &isFinal)) + goto exit; + return_value = pyexpat_xmlparser_Parse_impl(self, data, isFinal); + +exit: + return return_value; +} + +static PyObject * +pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, int isFinal) +/*[clinic end generated code: output=65b1652b01f20856 input=e37b81b8948ca7e0]*/ +{ const char *s; Py_ssize_t slen; Py_buffer view; int rc; - if (!PyArg_ParseTuple(args, "O|i:Parse", &data, &isFinal)) - return NULL; - if (PyUnicode_Check(data)) { view.buf = NULL; s = PyUnicode_AsUTF8AndSize(data, &slen); @@ -886,18 +933,33 @@ error: return -1; } -PyDoc_STRVAR(xmlparse_ParseFile__doc__, -"ParseFile(file)\n\ -Parse XML data from file-like object."); +/*[clinic input] +pyexpat.xmlparser.ParseFile + + file: object + / + +Parse XML data from file-like object. +[clinic start generated code]*/ + +PyDoc_STRVAR(pyexpat_xmlparser_ParseFile__doc__, +"ParseFile($self, file, /)\n" +"--\n" +"\n" +"Parse XML data from file-like object."); + +#define PYEXPAT_XMLPARSER_PARSEFILE_METHODDEF \ + {"ParseFile", (PyCFunction)pyexpat_xmlparser_ParseFile, METH_O, pyexpat_xmlparser_ParseFile__doc__}, static PyObject * -xmlparse_ParseFile(xmlparseobject *self, PyObject *f) +pyexpat_xmlparser_ParseFile(xmlparseobject *self, PyObject *file) +/*[clinic end generated code: output=2e13803c3d8c22b2 input=fbb5a12b6038d735]*/ { int rv = 1; PyObject *readmethod = NULL; _Py_IDENTIFIER(read); - readmethod = _PyObject_GetAttrId(f, &PyId_read); + readmethod = _PyObject_GetAttrId(file, &PyId_read); if (readmethod == NULL) { PyErr_SetString(PyExc_TypeError, "argument must have 'read' attribute"); @@ -929,42 +991,117 @@ xmlparse_ParseFile(xmlparseobject *self, PyObject *f) return get_parse_result(self, rv); } -PyDoc_STRVAR(xmlparse_SetBase__doc__, -"SetBase(base_url)\n\ -Set the base URL for the parser."); +/*[clinic input] +pyexpat.xmlparser.SetBase + + base: str + / + +Set the base URL for the parser. +[clinic start generated code]*/ + +PyDoc_STRVAR(pyexpat_xmlparser_SetBase__doc__, +"SetBase($self, base, /)\n" +"--\n" +"\n" +"Set the base URL for the parser."); + +#define PYEXPAT_XMLPARSER_SETBASE_METHODDEF \ + {"SetBase", (PyCFunction)pyexpat_xmlparser_SetBase, METH_VARARGS, pyexpat_xmlparser_SetBase__doc__}, + +static PyObject * +pyexpat_xmlparser_SetBase_impl(xmlparseobject *self, const char *base); static PyObject * -xmlparse_SetBase(xmlparseobject *self, PyObject *args) +pyexpat_xmlparser_SetBase(xmlparseobject *self, PyObject *args) { - char *base; + PyObject *return_value = NULL; + const char *base; - if (!PyArg_ParseTuple(args, "s:SetBase", &base)) - return NULL; + if (!PyArg_ParseTuple(args, + "s:SetBase", + &base)) + goto exit; + return_value = pyexpat_xmlparser_SetBase_impl(self, base); + +exit: + return return_value; +} + +static PyObject * +pyexpat_xmlparser_SetBase_impl(xmlparseobject *self, const char *base) +/*[clinic end generated code: output=5bdb49f6689a5f93 input=c684e5de895ee1a8]*/ +{ if (!XML_SetBase(self->itself, base)) { return PyErr_NoMemory(); } - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } -PyDoc_STRVAR(xmlparse_GetBase__doc__, -"GetBase() -> url\n\ -Return base URL string for the parser."); +/*[clinic input] +pyexpat.xmlparser.GetBase + +Return base URL string for the parser. +[clinic start generated code]*/ + +PyDoc_STRVAR(pyexpat_xmlparser_GetBase__doc__, +"GetBase($self, /)\n" +"--\n" +"\n" +"Return base URL string for the parser."); + +#define PYEXPAT_XMLPARSER_GETBASE_METHODDEF \ + {"GetBase", (PyCFunction)pyexpat_xmlparser_GetBase, METH_NOARGS, pyexpat_xmlparser_GetBase__doc__}, + +static PyObject * +pyexpat_xmlparser_GetBase_impl(xmlparseobject *self); + +static PyObject * +pyexpat_xmlparser_GetBase(xmlparseobject *self, PyObject *Py_UNUSED(ignored)) +{ + return pyexpat_xmlparser_GetBase_impl(self); +} static PyObject * -xmlparse_GetBase(xmlparseobject *self, PyObject *unused) +pyexpat_xmlparser_GetBase_impl(xmlparseobject *self) +/*[clinic end generated code: output=ef6046ee28f2b8ee input=918d71c38009620e]*/ { return Py_BuildValue("z", XML_GetBase(self->itself)); } -PyDoc_STRVAR(xmlparse_GetInputContext__doc__, -"GetInputContext() -> string\n\ -Return the untranslated text of the input that caused the current event.\n\ -If the event was generated by a large amount of text (such as a start tag\n\ -for an element with many attributes), not all of the text may be available."); +/*[clinic input] +pyexpat.xmlparser.GetInputContext + +Return the untranslated text of the input that caused the current event. + +If the event was generated by a large amount of text (such as a start tag +for an element with many attributes), not all of the text may be available. +[clinic start generated code]*/ + +PyDoc_STRVAR(pyexpat_xmlparser_GetInputContext__doc__, +"GetInputContext($self, /)\n" +"--\n" +"\n" +"Return the untranslated text of the input that caused the current event.\n" +"\n" +"If the event was generated by a large amount of text (such as a start tag\n" +"for an element with many attributes), not all of the text may be available."); + +#define PYEXPAT_XMLPARSER_GETINPUTCONTEXT_METHODDEF \ + {"GetInputContext", (PyCFunction)pyexpat_xmlparser_GetInputContext, METH_NOARGS, pyexpat_xmlparser_GetInputContext__doc__}, static PyObject * -xmlparse_GetInputContext(xmlparseobject *self, PyObject *unused) +pyexpat_xmlparser_GetInputContext_impl(xmlparseobject *self); + +static PyObject * +pyexpat_xmlparser_GetInputContext(xmlparseobject *self, PyObject *Py_UNUSED(ignored)) +{ + return pyexpat_xmlparser_GetInputContext_impl(self); +} + +static PyObject * +pyexpat_xmlparser_GetInputContext_impl(xmlparseobject *self) +/*[clinic end generated code: output=62ff03390f074cd2 input=034df8712db68379]*/ { if (self->in_callback) { int offset, size; @@ -981,24 +1118,52 @@ xmlparse_GetInputContext(xmlparseobject *self, PyObject *unused) Py_RETURN_NONE; } -PyDoc_STRVAR(xmlparse_ExternalEntityParserCreate__doc__, -"ExternalEntityParserCreate(context[, encoding])\n\ -Create a parser for parsing an external entity based on the\n\ -information passed to the ExternalEntityRefHandler."); +/*[clinic input] +pyexpat.xmlparser.ExternalEntityParserCreate + + context: str(nullable=True) + encoding: str = NULL + / + +Create a parser for parsing an external entity based on the information passed to the ExternalEntityRefHandler. +[clinic start generated code]*/ + +PyDoc_STRVAR(pyexpat_xmlparser_ExternalEntityParserCreate__doc__, +"ExternalEntityParserCreate($self, context, encoding=None, /)\n" +"--\n" +"\n" +"Create a parser for parsing an external entity based on the information passed to the ExternalEntityRefHandler."); + +#define PYEXPAT_XMLPARSER_EXTERNALENTITYPARSERCREATE_METHODDEF \ + {"ExternalEntityParserCreate", (PyCFunction)pyexpat_xmlparser_ExternalEntityParserCreate, METH_VARARGS, pyexpat_xmlparser_ExternalEntityParserCreate__doc__}, + +static PyObject * +pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self, const char *context, const char *encoding); + +static PyObject * +pyexpat_xmlparser_ExternalEntityParserCreate(xmlparseobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + const char *context; + const char *encoding = NULL; + + if (!PyArg_ParseTuple(args, + "z|s:ExternalEntityParserCreate", + &context, &encoding)) + goto exit; + return_value = pyexpat_xmlparser_ExternalEntityParserCreate_impl(self, context, encoding); + +exit: + return return_value; +} static PyObject * -xmlparse_ExternalEntityParserCreate(xmlparseobject *self, PyObject *args) +pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self, const char *context, const char *encoding) +/*[clinic end generated code: output=4948c35f3dd01133 input=283206575d960272]*/ { - char *context; - char *encoding = NULL; xmlparseobject *new_parser; int i; - if (!PyArg_ParseTuple(args, "z|s:ExternalEntityParserCreate", - &context, &encoding)) { - return NULL; - } - new_parser = PyObject_GC_New(xmlparseobject, &Xmlparsetype); if (new_parser == NULL) return NULL; @@ -1054,41 +1219,114 @@ xmlparse_ExternalEntityParserCreate(xmlparseobject *self, PyObject *args) return (PyObject *)new_parser; } -PyDoc_STRVAR(xmlparse_SetParamEntityParsing__doc__, -"SetParamEntityParsing(flag) -> success\n\ -Controls parsing of parameter entities (including the external DTD\n\ -subset). Possible flag values are XML_PARAM_ENTITY_PARSING_NEVER,\n\ -XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE and\n\ -XML_PARAM_ENTITY_PARSING_ALWAYS. Returns true if setting the flag\n\ -was successful."); +/*[clinic input] +pyexpat.xmlparser.SetParamEntityParsing -static PyObject* -xmlparse_SetParamEntityParsing(xmlparseobject *p, PyObject* args) + flag: int + / + +Controls parsing of parameter entities (including the external DTD subset). + +Possible flag values are XML_PARAM_ENTITY_PARSING_NEVER, +XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE and +XML_PARAM_ENTITY_PARSING_ALWAYS. Returns true if setting the flag +was successful. +[clinic start generated code]*/ + +PyDoc_STRVAR(pyexpat_xmlparser_SetParamEntityParsing__doc__, +"SetParamEntityParsing($self, flag, /)\n" +"--\n" +"\n" +"Controls parsing of parameter entities (including the external DTD subset).\n" +"\n" +"Possible flag values are XML_PARAM_ENTITY_PARSING_NEVER,\n" +"XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE and\n" +"XML_PARAM_ENTITY_PARSING_ALWAYS. Returns true if setting the flag\n" +"was successful."); + +#define PYEXPAT_XMLPARSER_SETPARAMENTITYPARSING_METHODDEF \ + {"SetParamEntityParsing", (PyCFunction)pyexpat_xmlparser_SetParamEntityParsing, METH_VARARGS, pyexpat_xmlparser_SetParamEntityParsing__doc__}, + +static PyObject * +pyexpat_xmlparser_SetParamEntityParsing_impl(xmlparseobject *self, int flag); + +static PyObject * +pyexpat_xmlparser_SetParamEntityParsing(xmlparseobject *self, PyObject *args) { + PyObject *return_value = NULL; int flag; - if (!PyArg_ParseTuple(args, "i", &flag)) - return NULL; - flag = XML_SetParamEntityParsing(p->itself, flag); + + if (!PyArg_ParseTuple(args, + "i:SetParamEntityParsing", + &flag)) + goto exit; + return_value = pyexpat_xmlparser_SetParamEntityParsing_impl(self, flag); + +exit: + return return_value; +} + +static PyObject * +pyexpat_xmlparser_SetParamEntityParsing_impl(xmlparseobject *self, int flag) +/*[clinic end generated code: output=0f820882bc7768cc input=8aea19b4b15e9af1]*/ +{ + flag = XML_SetParamEntityParsing(self->itself, flag); return PyLong_FromLong(flag); } #if XML_COMBINED_VERSION >= 19505 -PyDoc_STRVAR(xmlparse_UseForeignDTD__doc__, -"UseForeignDTD([flag])\n\ -Allows the application to provide an artificial external subset if one is\n\ -not specified as part of the document instance. This readily allows the\n\ -use of a 'default' document type controlled by the application, while still\n\ -getting the advantage of providing document type information to the parser.\n\ -'flag' defaults to True if not provided."); +/*[clinic input] +pyexpat.xmlparser.UseForeignDTD + + flag: bool = True + / + +Allows the application to provide an artificial external subset if one is not specified as part of the document instance. + +This readily allows the use of a 'default' document type controlled by the +application, while still getting the advantage of providing document type +information to the parser. 'flag' defaults to True if not provided. +[clinic start generated code]*/ + +PyDoc_STRVAR(pyexpat_xmlparser_UseForeignDTD__doc__, +"UseForeignDTD($self, flag=True, /)\n" +"--\n" +"\n" +"Allows the application to provide an artificial external subset if one is not specified as part of the document instance.\n" +"\n" +"This readily allows the use of a \'default\' document type controlled by the\n" +"application, while still getting the advantage of providing document type\n" +"information to the parser. \'flag\' defaults to True if not provided."); + +#define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF \ + {"UseForeignDTD", (PyCFunction)pyexpat_xmlparser_UseForeignDTD, METH_VARARGS, pyexpat_xmlparser_UseForeignDTD__doc__}, + +static PyObject * +pyexpat_xmlparser_UseForeignDTD_impl(xmlparseobject *self, int flag); static PyObject * -xmlparse_UseForeignDTD(xmlparseobject *self, PyObject *args) +pyexpat_xmlparser_UseForeignDTD(xmlparseobject *self, PyObject *args) { + PyObject *return_value = NULL; int flag = 1; + + if (!PyArg_ParseTuple(args, + "|p:UseForeignDTD", + &flag)) + goto exit; + return_value = pyexpat_xmlparser_UseForeignDTD_impl(self, flag); + +exit: + return return_value; +} + +static PyObject * +pyexpat_xmlparser_UseForeignDTD_impl(xmlparseobject *self, int flag) +/*[clinic end generated code: output=22e924ae6cad67d6 input=78144c519d116a6e]*/ +{ enum XML_Error rc; - if (!PyArg_ParseTuple(args, "|p:UseForeignDTD", &flag)) - return NULL; + rc = XML_UseForeignDTD(self->itself, flag ? XML_TRUE : XML_FALSE); if (rc != XML_ERROR_NONE) { return set_error(self, rc); @@ -1098,29 +1336,86 @@ xmlparse_UseForeignDTD(xmlparseobject *self, PyObject *args) } #endif -static PyObject *xmlparse_dir(PyObject *self, PyObject* noargs); +/*[clinic input] +pyexpat.xmlparser.__dir__ +[clinic start generated code]*/ + +PyDoc_STRVAR(pyexpat_xmlparser___dir____doc__, +"__dir__($self, /)\n" +"--"); + +#define PYEXPAT_XMLPARSER___DIR___METHODDEF \ + {"__dir__", (PyCFunction)pyexpat_xmlparser___dir__, METH_NOARGS, pyexpat_xmlparser___dir____doc__}, + +static PyObject * +pyexpat_xmlparser___dir___impl(xmlparseobject *self); + +static PyObject * +pyexpat_xmlparser___dir__(xmlparseobject *self, PyObject *Py_UNUSED(ignored)) +{ + return pyexpat_xmlparser___dir___impl(self); +} + +static PyObject * +pyexpat_xmlparser___dir___impl(xmlparseobject *self) +/*[clinic end generated code: output=1ed6efe83bc304cc input=76aa455f2a661384]*/ +{ +#define APPEND(list, str) \ + do { \ + PyObject *o = PyUnicode_FromString(str); \ + if (o != NULL) \ + PyList_Append(list, o); \ + Py_XDECREF(o); \ + } while (0) + + int i; + PyObject *rc = PyList_New(0); + if (!rc) + return NULL; + for (i = 0; handler_info[i].name != NULL; i++) { + PyObject *o = get_handler_name(&handler_info[i]); + if (o != NULL) + PyList_Append(rc, o); + Py_XDECREF(o); + } + APPEND(rc, "ErrorCode"); + APPEND(rc, "ErrorLineNumber"); + APPEND(rc, "ErrorColumnNumber"); + APPEND(rc, "ErrorByteIndex"); + APPEND(rc, "CurrentLineNumber"); + APPEND(rc, "CurrentColumnNumber"); + APPEND(rc, "CurrentByteIndex"); + APPEND(rc, "buffer_size"); + APPEND(rc, "buffer_text"); + APPEND(rc, "buffer_used"); + APPEND(rc, "namespace_prefixes"); + APPEND(rc, "ordered_attributes"); + APPEND(rc, "specified_attributes"); + APPEND(rc, "intern"); + +#undef APPEND + + if (PyErr_Occurred()) { + Py_DECREF(rc); + rc = NULL; + } + + return rc; +} static struct PyMethodDef xmlparse_methods[] = { - {"Parse", (PyCFunction)xmlparse_Parse, - METH_VARARGS, xmlparse_Parse__doc__}, - {"ParseFile", (PyCFunction)xmlparse_ParseFile, - METH_O, xmlparse_ParseFile__doc__}, - {"SetBase", (PyCFunction)xmlparse_SetBase, - METH_VARARGS, xmlparse_SetBase__doc__}, - {"GetBase", (PyCFunction)xmlparse_GetBase, - METH_NOARGS, xmlparse_GetBase__doc__}, - {"ExternalEntityParserCreate", (PyCFunction)xmlparse_ExternalEntityParserCreate, - METH_VARARGS, xmlparse_ExternalEntityParserCreate__doc__}, - {"SetParamEntityParsing", (PyCFunction)xmlparse_SetParamEntityParsing, - METH_VARARGS, xmlparse_SetParamEntityParsing__doc__}, - {"GetInputContext", (PyCFunction)xmlparse_GetInputContext, - METH_NOARGS, xmlparse_GetInputContext__doc__}, + PYEXPAT_XMLPARSER_PARSE_METHODDEF + PYEXPAT_XMLPARSER_PARSEFILE_METHODDEF + PYEXPAT_XMLPARSER_SETBASE_METHODDEF + PYEXPAT_XMLPARSER_GETBASE_METHODDEF + PYEXPAT_XMLPARSER_GETINPUTCONTEXT_METHODDEF + PYEXPAT_XMLPARSER_EXTERNALENTITYPARSERCREATE_METHODDEF + PYEXPAT_XMLPARSER_SETPARAMENTITYPARSING_METHODDEF #if XML_COMBINED_VERSION >= 19505 - {"UseForeignDTD", (PyCFunction)xmlparse_UseForeignDTD, - METH_VARARGS, xmlparse_UseForeignDTD__doc__}, + PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif - {"__dir__", xmlparse_dir, METH_NOARGS}, - {NULL, NULL} /* sentinel */ + PYEXPAT_XMLPARSER___DIR___METHODDEF + {NULL, NULL} /* sentinel */ }; /* ---------- */ @@ -1361,52 +1656,6 @@ xmlparse_getattro(xmlparseobject *self, PyObject *nameobj) return PyObject_GenericGetAttr((PyObject*)self, nameobj); } -static PyObject * -xmlparse_dir(PyObject *self, PyObject* noargs) -{ -#define APPEND(list, str) \ - do { \ - PyObject *o = PyUnicode_FromString(str); \ - if (o != NULL) \ - PyList_Append(list, o); \ - Py_XDECREF(o); \ - } while (0) - - int i; - PyObject *rc = PyList_New(0); - if (!rc) - return NULL; - for (i = 0; handler_info[i].name != NULL; i++) { - PyObject *o = get_handler_name(&handler_info[i]); - if (o != NULL) - PyList_Append(rc, o); - Py_XDECREF(o); - } - APPEND(rc, "ErrorCode"); - APPEND(rc, "ErrorLineNumber"); - APPEND(rc, "ErrorColumnNumber"); - APPEND(rc, "ErrorByteIndex"); - APPEND(rc, "CurrentLineNumber"); - APPEND(rc, "CurrentColumnNumber"); - APPEND(rc, "CurrentByteIndex"); - APPEND(rc, "buffer_size"); - APPEND(rc, "buffer_text"); - APPEND(rc, "buffer_used"); - APPEND(rc, "namespace_prefixes"); - APPEND(rc, "ordered_attributes"); - APPEND(rc, "specified_attributes"); - APPEND(rc, "intern"); - -#undef APPEND - - if (PyErr_Occurred()) { - Py_DECREF(rc); - rc = NULL; - } - - return rc; -} - static int sethandler(xmlparseobject *self, PyObject *name, PyObject* v) { @@ -1612,24 +1861,55 @@ static PyTypeObject Xmlparsetype = { /* End of code for xmlparser objects */ /* -------------------------------------------------------- */ +/*[clinic input] +pyexpat.ParserCreate + + encoding: str(nullable=True) = NULL + namespace_separator: str(nullable=True) = NULL + intern: object = NULL + +Return a new XML parser object. +[clinic start generated code]*/ + PyDoc_STRVAR(pyexpat_ParserCreate__doc__, -"ParserCreate([encoding[, namespace_separator]]) -> parser\n\ -Return a new XML parser object."); +"ParserCreate($module, /, encoding=None, namespace_separator=None,\n" +" intern=None)\n" +"--\n" +"\n" +"Return a new XML parser object."); + +#define PYEXPAT_PARSERCREATE_METHODDEF \ + {"ParserCreate", (PyCFunction)pyexpat_ParserCreate, METH_VARARGS|METH_KEYWORDS, pyexpat_ParserCreate__doc__}, static PyObject * -pyexpat_ParserCreate(PyObject *notused, PyObject *args, PyObject *kw) +pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, const char *namespace_separator, PyObject *intern); + +static PyObject * +pyexpat_ParserCreate(PyModuleDef *module, PyObject *args, PyObject *kwargs) { - char *encoding = NULL; - char *namespace_separator = NULL; + PyObject *return_value = NULL; + static char *_keywords[] = {"encoding", "namespace_separator", "intern", NULL}; + const char *encoding = NULL; + const char *namespace_separator = NULL; PyObject *intern = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|zzO:ParserCreate", _keywords, + &encoding, &namespace_separator, &intern)) + goto exit; + return_value = pyexpat_ParserCreate_impl(module, encoding, namespace_separator, intern); + +exit: + return return_value; +} + +static PyObject * +pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, const char *namespace_separator, PyObject *intern) +/*[clinic end generated code: output=4fc027dd33b7a2ac input=71b9f471aa6f8f86]*/ +{ PyObject *result; int intern_decref = 0; - static char *kwlist[] = {"encoding", "namespace_separator", - "intern", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, kw, "|zzO:ParserCreate", kwlist, - &encoding, &namespace_separator, &intern)) - return NULL; if (namespace_separator != NULL && strlen(namespace_separator) > 1) { PyErr_SetString(PyExc_ValueError, @@ -1652,36 +1932,64 @@ pyexpat_ParserCreate(PyObject *notused, PyObject *args, PyObject *kw) return NULL; } - result = newxmlparseobject(encoding, namespace_separator, intern); + result = newxmlparseobject((char *)encoding, (char *)namespace_separator, + intern); if (intern_decref) { Py_DECREF(intern); } return result; } +/*[clinic input] +pyexpat.ErrorString + + code: long + / + +Returns string error for given number. +[clinic start generated code]*/ + PyDoc_STRVAR(pyexpat_ErrorString__doc__, -"ErrorString(errno) -> string\n\ -Returns string error for given number."); +"ErrorString($module, code, /)\n" +"--\n" +"\n" +"Returns string error for given number."); + +#define PYEXPAT_ERRORSTRING_METHODDEF \ + {"ErrorString", (PyCFunction)pyexpat_ErrorString, METH_VARARGS, pyexpat_ErrorString__doc__}, static PyObject * -pyexpat_ErrorString(PyObject *self, PyObject *args) +pyexpat_ErrorString_impl(PyModuleDef *module, long code); + +static PyObject * +pyexpat_ErrorString(PyModuleDef *module, PyObject *args) { - long code = 0; + PyObject *return_value = NULL; + long code; - if (!PyArg_ParseTuple(args, "l:ErrorString", &code)) - return NULL; + if (!PyArg_ParseTuple(args, + "l:ErrorString", + &code)) + goto exit; + return_value = pyexpat_ErrorString_impl(module, code); + +exit: + return return_value; +} + +static PyObject * +pyexpat_ErrorString_impl(PyModuleDef *module, long code) +/*[clinic end generated code: output=c70f3cd82bfaf067 input=cc67de010d9e62b3]*/ +{ return Py_BuildValue("z", XML_ErrorString((int)code)); } /* List of methods defined in the module */ static struct PyMethodDef pyexpat_methods[] = { - {"ParserCreate", (PyCFunction)pyexpat_ParserCreate, - METH_VARARGS|METH_KEYWORDS, pyexpat_ParserCreate__doc__}, - {"ErrorString", (PyCFunction)pyexpat_ErrorString, - METH_VARARGS, pyexpat_ErrorString__doc__}, - - {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */ + PYEXPAT_PARSERCREATE_METHODDEF + PYEXPAT_ERRORSTRING_METHODDEF + {NULL, NULL} /* sentinel */ }; /* Module docstring */ @@ -2057,3 +2365,12 @@ static struct HandlerInfo handler_info[] = { {NULL, NULL, NULL} /* sentinel */ }; + +/*[clinic input] +dump buffer +[clinic start generated code]*/ + +#ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF + #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF +#endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ +/*[clinic end generated code: output=a7880cb78bbd58ce input=524ce2e021e4eba6]*/ -- cgit v1.2.1 From 32543d77de5a5298e07f746ded18d9ee66361a14 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 27 Aug 2014 12:59:44 +0200 Subject: Issue #22042: signal.set_wakeup_fd(fd) now raises an exception if the file descriptor is in blocking mode. --- Modules/signalmodule.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 61b3330d3f..38c5d21cba 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -561,9 +561,15 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) PyErr_SetFromErrno(PyExc_OSError); return NULL; } + + /* on Windows, a file cannot be set to non-blocking mode */ } - else + else { is_socket = 1; + + /* Windows does not provide a function to test if a socket + is in non-blocking mode */ + } } old_fd = wakeup.fd; @@ -576,6 +582,8 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) return PyLong_FromLong(-1); #else if (fd != -1) { + int blocking; + if (!_PyVerify_fd(fd)) { PyErr_SetString(PyExc_ValueError, "invalid fd"); return NULL; @@ -585,6 +593,16 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) PyErr_SetFromErrno(PyExc_OSError); return NULL; } + + blocking = _Py_get_blocking(fd); + if (blocking < 0) + return NULL; + if (blocking) { + PyErr_Format(PyExc_ValueError, + "the fd %i must be in non-blocking mode", + fd); + return NULL; + } } old_fd = wakeup_fd; -- cgit v1.2.1 From 6aaa574410a548108d521372d30a2427394a7793 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 29 Aug 2014 15:41:08 +0200 Subject: Issue #22287: On UNIX, _PyTime_gettimeofday() now uses clock_gettime(CLOCK_REALTIME) if available. As a side effect, Python now depends on the librt library on Solaris and on Linux (only with glibc older than 2.17). --- Modules/timemodule.c | 22 ---------------------- 1 file changed, 22 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index d896091b01..2b2b4bdc64 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1535,28 +1535,6 @@ static PyObject* floattime(_Py_clock_info_t *info) { _PyTime_timeval t; -#ifdef HAVE_CLOCK_GETTIME - struct timespec tp; - int ret; - - /* _PyTime_gettimeofday() does not use clock_gettime() - because it would require to link Python to the rt (real-time) - library, at least on Linux */ - ret = clock_gettime(CLOCK_REALTIME, &tp); - if (ret == 0) { - if (info) { - struct timespec res; - info->implementation = "clock_gettime(CLOCK_REALTIME)"; - info->monotonic = 0; - info->adjustable = 1; - if (clock_getres(CLOCK_REALTIME, &res) == 0) - info->resolution = res.tv_sec + res.tv_nsec * 1e-9; - else - info->resolution = 1e-9; - } - return PyFloat_FromDouble(tp.tv_sec + tp.tv_nsec * 1e-9); - } -#endif _PyTime_gettimeofday_info(&t, info); return PyFloat_FromDouble((double)t.tv_sec + t.tv_usec * 1e-6); } -- cgit v1.2.1 From affccb4da7a3eea42bb7941044961aa2acb8a0f9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 29 Aug 2014 16:31:59 +0200 Subject: Issue #22043: _PyTime_Init() now checks if the system clock works. Other changes: * The whole _PyTime API is private (not defined if Py_LIMITED_API is set) * _PyTime_gettimeofday_info() also returns -1 on error * Simplify PyTime_gettimeofday(): only use clock_gettime(CLOCK_REALTIME) or gettimeofday() on UNIX. Don't fallback to ftime() or time() anymore. --- Modules/timemodule.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 2b2b4bdc64..1a13fd0ed7 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1535,7 +1535,10 @@ static PyObject* floattime(_Py_clock_info_t *info) { _PyTime_timeval t; - _PyTime_gettimeofday_info(&t, info); + if (_PyTime_gettimeofday_info(&t, info) < 0) { + assert(info != NULL); + return NULL; + } return PyFloat_FromDouble((double)t.tv_sec + t.tv_usec * 1e-6); } -- cgit v1.2.1 From d88cb69eab67aa5d391456f8c6a58e1aef64c7db Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 29 Aug 2014 16:51:33 +0200 Subject: Issue #22043: Simplify time.perf_counter() on Windows QueryPerformanceFrequency() cannot fail on Windows XP and later according to its documentation: raise an exception on error and drop the fallback to the system clock. --- Modules/timemodule.c | 46 ++++++++++++++++------------------------------ 1 file changed, 16 insertions(+), 30 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 1a13fd0ed7..abf4b8b622 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -96,8 +96,8 @@ floatclock(_Py_clock_info_t *info) #define WIN32_PERF_COUNTER /* Win32 has better clock replacement; we have our own version, due to Mark Hammond and Tim Peters */ -static int -win_perf_counter(_Py_clock_info_t *info, PyObject **result) +static PyObject* +win_perf_counter(_Py_clock_info_t *info) { static LONGLONG cpu_frequency = 0; static LONGLONG ctrStart; @@ -109,10 +109,8 @@ win_perf_counter(_Py_clock_info_t *info, PyObject **result) QueryPerformanceCounter(&now); ctrStart = now.QuadPart; if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) { - /* Unlikely to happen - this works on all intel - machines at least! Revert to clock() */ - *result = NULL; - return -1; + PyErr_SetFromWindowsErr(0); + return NULL; } cpu_frequency = freq.QuadPart; } @@ -124,8 +122,7 @@ win_perf_counter(_Py_clock_info_t *info, PyObject **result) info->monotonic = 1; info->adjustable = 0; } - *result = PyFloat_FromDouble(diff / (double)cpu_frequency); - return 0; + return PyFloat_FromDouble(diff / (double)cpu_frequency); } #endif @@ -135,11 +132,10 @@ static PyObject* pyclock(_Py_clock_info_t *info) { #ifdef WIN32_PERF_COUNTER - PyObject *res; - if (win_perf_counter(info, &res) == 0) - return res; -#endif + return win_perf_counter(info); +#else return floatclock(info); +#endif } static PyObject * @@ -1036,35 +1032,25 @@ Monotonic clock, cannot go backward."); static PyObject* perf_counter(_Py_clock_info_t *info) { -#if defined(WIN32_PERF_COUNTER) || defined(PYMONOTONIC) - PyObject *res; -#endif -#if defined(WIN32_PERF_COUNTER) - static int use_perf_counter = 1; -#endif -#ifdef PYMONOTONIC - static int use_monotonic = 1; -#endif - #ifdef WIN32_PERF_COUNTER - if (use_perf_counter) { - if (win_perf_counter(info, &res) == 0) - return res; - use_perf_counter = 0; - } -#endif + return win_perf_counter(info); +#else #ifdef PYMONOTONIC + static int use_monotonic = 1; + if (use_monotonic) { - res = pymonotonic(info); + PyObject *res = pymonotonic(info); if (res != NULL) return res; use_monotonic = 0; PyErr_Clear(); } +#else + return floattime(info); #endif - return floattime(info); +#endif } static PyObject * -- cgit v1.2.1 From 2a9e08b30add0e744e44e2471ff9747c1afc8d65 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 29 Aug 2014 17:00:17 +0200 Subject: Issue #22043: Oops, fix perf_counter() on UNIX if no monotonic clock is available (unlikely) --- Modules/timemodule.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index abf4b8b622..c90d8f9294 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1046,9 +1046,8 @@ perf_counter(_Py_clock_info_t *info) use_monotonic = 0; PyErr_Clear(); } -#else - return floattime(info); #endif + return floattime(info); #endif } -- cgit v1.2.1 From f3579a8d0eed6151a1e2f34f6cad0677bfe45246 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 2 Sep 2014 23:18:25 +0200 Subject: Issue #22043: time.monotonic() is now always available threading.Lock.acquire(), threading.RLock.acquire() and socket operations now use a monotonic clock, instead of the system clock, when a timeout is used. --- Modules/_threadmodule.c | 4 +- Modules/gcmodule.c | 6 +-- Modules/socketmodule.c | 4 +- Modules/timemodule.c | 141 +++--------------------------------------------- 4 files changed, 13 insertions(+), 142 deletions(-) (limited to 'Modules') diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index b68c177f03..8f59e036b9 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -57,7 +57,7 @@ acquire_timed(PyThread_type_lock lock, PY_TIMEOUT_T microseconds) if (microseconds > 0) { - _PyTime_gettimeofday(&endtime); + _PyTime_monotonic(&endtime); endtime.tv_sec += microseconds / (1000 * 1000); endtime.tv_usec += microseconds % (1000 * 1000); } @@ -83,7 +83,7 @@ acquire_timed(PyThread_type_lock lock, PY_TIMEOUT_T microseconds) /* If we're using a timeout, recompute the timeout after processing * signals, since those can take time. */ if (microseconds > 0) { - _PyTime_gettimeofday(&curtime); + _PyTime_monotonic(&curtime); microseconds = ((endtime.tv_sec - curtime.tv_sec) * 1000000 + (endtime.tv_usec - curtime.tv_usec)); diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 5e8e17b0a5..142687bb7f 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -25,7 +25,7 @@ #include "Python.h" #include "frameobject.h" /* for PyFrame_ClearFreeList */ -#include "pytime.h" /* for _PyTime_gettimeofday, _PyTime_INTERVAL */ +#include "pytime.h" /* for _PyTime_monotonic, _PyTime_INTERVAL */ /* Get an object's GC head */ #define AS_GC(o) ((PyGC_Head *)(o)-1) @@ -919,7 +919,7 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, for (i = 0; i < NUM_GENERATIONS; i++) PySys_FormatStderr(" %zd", gc_list_size(GEN_HEAD(i))); - _PyTime_gettimeofday(&t1); + _PyTime_monotonic(&t1); PySys_WriteStderr("\n"); } @@ -1025,7 +1025,7 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, } if (debug & DEBUG_STATS) { _PyTime_timeval t2; - _PyTime_gettimeofday(&t2); + _PyTime_monotonic(&t2); if (m == 0 && n == 0) PySys_WriteStderr("gc: done"); diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index abadd8a7c3..db69d6e468 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -680,7 +680,7 @@ internal_select(PySocketSockObject *s, int writing) double interval = s->sock_timeout; \ int has_timeout = s->sock_timeout > 0.0; \ if (has_timeout) { \ - _PyTime_gettimeofday(&now); \ + _PyTime_monotonic(&now); \ deadline = now; \ _PyTime_ADD_SECONDS(deadline, s->sock_timeout); \ } \ @@ -691,7 +691,7 @@ internal_select(PySocketSockObject *s, int writing) if (!has_timeout || \ (!CHECK_ERRNO(EWOULDBLOCK) && !CHECK_ERRNO(EAGAIN))) \ break; \ - _PyTime_gettimeofday(&now); \ + _PyTime_monotonic(&now); \ interval = _PyTime_INTERVAL(now, deadline); \ } \ } \ diff --git a/Modules/timemodule.c b/Modules/timemodule.c index c90d8f9294..16f4f6d95d 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -37,10 +37,6 @@ #endif /* MS_WINDOWS */ #endif /* !__WATCOMC__ || __QNX__ */ -#if defined(__APPLE__) -#include -#endif - /* Forward declarations */ static int floatsleep(double); static PyObject* floattime(_Py_clock_info_t *info); @@ -899,122 +895,15 @@ the local timezone used by methods such as localtime, but this behaviour\n\ should not be relied on."); #endif /* HAVE_WORKING_TZSET */ -#if defined(MS_WINDOWS) || defined(__APPLE__) \ - || (defined(HAVE_CLOCK_GETTIME) \ - && (defined(CLOCK_HIGHRES) || defined(CLOCK_MONOTONIC))) -#define PYMONOTONIC -#endif - -#ifdef PYMONOTONIC -static PyObject* +static PyObject * pymonotonic(_Py_clock_info_t *info) { -#if defined(MS_WINDOWS) - static ULONGLONG (*GetTickCount64) (void) = NULL; - static ULONGLONG (CALLBACK *Py_GetTickCount64)(void); - static int has_getickcount64 = -1; - double result; - - if (has_getickcount64 == -1) { - /* GetTickCount64() was added to Windows Vista */ - if (winver.dwMajorVersion >= 6) { - HINSTANCE hKernel32; - hKernel32 = GetModuleHandleW(L"KERNEL32"); - *(FARPROC*)&Py_GetTickCount64 = GetProcAddress(hKernel32, - "GetTickCount64"); - has_getickcount64 = (Py_GetTickCount64 != NULL); - } - else - has_getickcount64 = 0; - } - - if (has_getickcount64) { - ULONGLONG ticks; - ticks = Py_GetTickCount64(); - result = (double)ticks * 1e-3; - } - else { - static DWORD last_ticks = 0; - static DWORD n_overflow = 0; - DWORD ticks; - - ticks = GetTickCount(); - if (ticks < last_ticks) - n_overflow++; - last_ticks = ticks; - - result = ldexp(n_overflow, 32); - result += ticks; - result *= 1e-3; - } - - if (info) { - DWORD timeAdjustment, timeIncrement; - BOOL isTimeAdjustmentDisabled, ok; - if (has_getickcount64) - info->implementation = "GetTickCount64()"; - else - info->implementation = "GetTickCount()"; - info->monotonic = 1; - ok = GetSystemTimeAdjustment(&timeAdjustment, &timeIncrement, - &isTimeAdjustmentDisabled); - if (!ok) { - PyErr_SetFromWindowsErr(0); - return NULL; - } - info->resolution = timeIncrement * 1e-7; - info->adjustable = 0; - } - return PyFloat_FromDouble(result); - -#elif defined(__APPLE__) - static mach_timebase_info_data_t timebase; - uint64_t time; - double secs; - - if (timebase.denom == 0) { - /* According to the Technical Q&A QA1398, mach_timebase_info() cannot - fail: https://developer.apple.com/library/mac/#qa/qa1398/ */ - (void)mach_timebase_info(&timebase); - } - - time = mach_absolute_time(); - secs = (double)time * timebase.numer / timebase.denom * 1e-9; - if (info) { - info->implementation = "mach_absolute_time()"; - info->resolution = (double)timebase.numer / timebase.denom * 1e-9; - info->monotonic = 1; - info->adjustable = 0; - } - return PyFloat_FromDouble(secs); - -#elif defined(HAVE_CLOCK_GETTIME) && (defined(CLOCK_HIGHRES) || defined(CLOCK_MONOTONIC)) - struct timespec tp; -#ifdef CLOCK_HIGHRES - const clockid_t clk_id = CLOCK_HIGHRES; - const char *function = "clock_gettime(CLOCK_HIGHRES)"; -#else - const clockid_t clk_id = CLOCK_MONOTONIC; - const char *function = "clock_gettime(CLOCK_MONOTONIC)"; -#endif - - if (clock_gettime(clk_id, &tp) != 0) { - PyErr_SetFromErrno(PyExc_OSError); + _PyTime_timeval tv; + if (_PyTime_monotonic_info(&tv, info) < 0) { + assert(info != NULL); return NULL; } - - if (info) { - struct timespec res; - info->monotonic = 1; - info->implementation = function; - info->adjustable = 0; - if (clock_getres(clk_id, &res) == 0) - info->resolution = res.tv_sec + res.tv_nsec * 1e-9; - else - info->resolution = 1e-9; - } - return PyFloat_FromDouble(tp.tv_sec + tp.tv_nsec * 1e-9); -#endif + return PyFloat_FromDouble((double)tv.tv_sec + tv.tv_usec * 1e-6); } static PyObject * @@ -1027,7 +916,6 @@ PyDoc_STRVAR(monotonic_doc, "monotonic() -> float\n\ \n\ Monotonic clock, cannot go backward."); -#endif /* PYMONOTONIC */ static PyObject* perf_counter(_Py_clock_info_t *info) @@ -1035,20 +923,7 @@ perf_counter(_Py_clock_info_t *info) #ifdef WIN32_PERF_COUNTER return win_perf_counter(info); #else - -#ifdef PYMONOTONIC - static int use_monotonic = 1; - - if (use_monotonic) { - PyObject *res = pymonotonic(info); - if (res != NULL) - return res; - use_monotonic = 0; - PyErr_Clear(); - } -#endif - return floattime(info); - + return pymonotonic(info); #endif } @@ -1216,10 +1091,8 @@ time_get_clock_info(PyObject *self, PyObject *args) else if (strcmp(name, "clock") == 0) obj = pyclock(&info); #endif -#ifdef PYMONOTONIC else if (strcmp(name, "monotonic") == 0) obj = pymonotonic(&info); -#endif else if (strcmp(name, "perf_counter") == 0) obj = perf_counter(&info); else if (strcmp(name, "process_time") == 0) @@ -1411,9 +1284,7 @@ static PyMethodDef time_methods[] = { #ifdef HAVE_WORKING_TZSET {"tzset", time_tzset, METH_NOARGS, tzset_doc}, #endif -#ifdef PYMONOTONIC {"monotonic", time_monotonic, METH_NOARGS, monotonic_doc}, -#endif {"process_time", time_process_time, METH_NOARGS, process_time_doc}, {"perf_counter", time_perf_counter, METH_NOARGS, perf_counter_doc}, {"get_clock_info", time_get_clock_info, METH_VARARGS, get_clock_info_doc}, -- cgit v1.2.1 From 65debf425fafc8b2ab711e903d484bf0e189fd40 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 4 Sep 2014 17:29:52 +0200 Subject: Issue #21951: Fix AsObj() of the _tkinter module: raise MemoryError on memory allocation failure --- Modules/_tkinter.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 07175944ec..4df45ad600 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -913,8 +913,10 @@ AsObj(PyObject *value) return NULL; } argv = (Tcl_Obj **) ckalloc(((size_t)size) * sizeof(Tcl_Obj *)); - if(!argv) - return 0; + if(!argv) { + PyErr_NoMemory(); + return NULL; + } for (i = 0; i < size; i++) argv[i] = AsObj(PySequence_Fast_GET_ITEM(value,i)); result = Tcl_NewListObj(size, argv); -- cgit v1.2.1 From 04e292e789ced3557b5b21d3d6ee1fe9c3678ba4 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Thu, 4 Sep 2014 21:00:10 +0200 Subject: Issue #20421: Add a .version() method to SSL sockets exposing the actual protocol version in use. --- Modules/_ssl.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index d42c3cee1b..5b85cc7272 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1402,6 +1402,18 @@ static PyObject *PySSL_cipher (PySSLSocket *self) { return NULL; } +static PyObject *PySSL_version(PySSLSocket *self) +{ + const char *version; + + if (self->ssl == NULL) + Py_RETURN_NONE; + version = SSL_get_version(self->ssl); + if (!strcmp(version, "unknown")) + Py_RETURN_NONE; + return PyUnicode_FromString(version); +} + #ifdef OPENSSL_NPN_NEGOTIATED static PyObject *PySSL_selected_npn_protocol(PySSLSocket *self) { const unsigned char *out; @@ -1939,6 +1951,7 @@ static PyMethodDef PySSLMethods[] = { {"peer_certificate", (PyCFunction)PySSL_peercert, METH_VARARGS, PySSL_peercert_doc}, {"cipher", (PyCFunction)PySSL_cipher, METH_NOARGS}, + {"version", (PyCFunction)PySSL_version, METH_NOARGS}, #ifdef OPENSSL_NPN_NEGOTIATED {"selected_npn_protocol", (PyCFunction)PySSL_selected_npn_protocol, METH_NOARGS}, #endif -- cgit v1.2.1 From c91fbf8de0803a2841fefd1029d9b9a1136b8dbf Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 5 Sep 2014 10:10:23 +0300 Subject: Silenced some warnings about comparison between signed and unsigned integer expressions. --- Modules/_pickle.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index ba9ba99071..24524a6ca5 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1456,7 +1456,7 @@ memo_get(PicklerObject *self, PyObject *key) pdata[1] = (unsigned char)(*value & 0xff); len = 2; } - else if (*value <= 0xffffffffL) { + else if ((size_t)*value <= 0xffffffffUL) { pdata[0] = LONG_BINGET; pdata[1] = (unsigned char)(*value & 0xff); pdata[2] = (unsigned char)((*value >> 8) & 0xff); @@ -1513,7 +1513,7 @@ memo_put(PicklerObject *self, PyObject *obj) pdata[1] = (unsigned char)idx; len = 2; } - else if (idx <= 0xffffffffL) { + else if ((size_t)idx <= 0xffffffffUL) { pdata[0] = LONG_BINPUT; pdata[1] = (unsigned char)(idx & 0xff); pdata[2] = (unsigned char)((idx >> 8) & 0xff); @@ -2013,7 +2013,7 @@ save_bytes(PicklerObject *self, PyObject *obj) header[1] = (unsigned char)size; len = 2; } - else if (size <= 0xffffffffL) { + else if ((size_t)size <= 0xffffffffUL) { header[0] = BINBYTES; header[1] = (unsigned char)(size & 0xff); header[2] = (unsigned char)((size >> 8) & 0xff); -- cgit v1.2.1 From b6c677f13497ce8dabc8aad7fb272b09dfeccb56 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 6 Sep 2014 20:07:17 +0300 Subject: Issue #22215: Now ValueError is raised instead of TypeError when str or bytes argument contains not permitted null character or byte. --- Modules/_io/fileio.c | 2 +- Modules/_tkinter.c | 4 ++-- Modules/posixmodule.c | 2 +- Modules/socketmodule.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 280523bc2b..84d2ff35b0 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -256,7 +256,7 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) int rv = _PyUnicode_HasNULChars(nameobj); if (rv) { if (rv != -1) - PyErr_SetString(PyExc_TypeError, "embedded NUL character"); + PyErr_SetString(PyExc_ValueError, "embedded null character"); return -1; } widename = PyUnicode_AsUnicode(nameobj); diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 4df45ad600..d54ebb47a3 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -1417,7 +1417,7 @@ varname_converter(PyObject *in, void *_out) } s = PyBytes_AsString(in); if (strlen(s) != (size_t)PyBytes_Size(in)) { - PyErr_SetString(PyExc_ValueError, "null byte in bytes object"); + PyErr_SetString(PyExc_ValueError, "embedded null byte"); return 0; } *out = s; @@ -1434,7 +1434,7 @@ varname_converter(PyObject *in, void *_out) return 0; } if (strlen(s) != (size_t)size) { - PyErr_SetString(PyExc_ValueError, "null character in string"); + PyErr_SetString(PyExc_ValueError, "embedded null character"); return 0; } *out = s; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index af5c2a691f..473fefaa34 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -903,7 +903,7 @@ path_converter(PyObject *o, void *p) { narrow = PyBytes_AS_STRING(bytes); if ((size_t)length != strlen(narrow)) { - FORMAT_EXCEPTION(PyExc_ValueError, "embedded NUL character in %s"); + FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s"); Py_DECREF(bytes); return 0; } diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index db69d6e468..7738c30c41 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1273,7 +1273,7 @@ idna_converter(PyObject *obj, struct maybe_idna *data) } if (strlen(data->buf) != len) { Py_CLEAR(data->obj); - PyErr_SetString(PyExc_TypeError, "host name must not contain NUL character"); + PyErr_SetString(PyExc_TypeError, "host name must not contain null character"); return 0; } return Py_CLEANUP_SUPPORTED; -- cgit v1.2.1 From 2464e8b0690ecee10631406787f5195196201619 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Wed, 10 Sep 2014 17:58:15 +0200 Subject: Issue #19232: Speed up decimal import. Additionally, since _decimal is self-contained, this change facilitates maintenance and the Python version can be easily imported for experimentation. --- Modules/_decimal/tests/deccheck.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_decimal/tests/deccheck.py b/Modules/_decimal/tests/deccheck.py index c4c5a4461d..89433c083d 100644 --- a/Modules/_decimal/tests/deccheck.py +++ b/Modules/_decimal/tests/deccheck.py @@ -36,6 +36,7 @@ from test.support import import_fresh_module from randdec import randfloat, all_unary, all_binary, all_ternary from randdec import unary_optarg, binary_optarg, ternary_optarg from formathelper import rand_format, rand_locale +from _pydecimal import _dec_from_triple C = import_fresh_module('decimal', fresh=['_decimal']) P = import_fresh_module('decimal', blocked=['_decimal']) @@ -370,7 +371,7 @@ class SkipHandler: return abs(a - b) def standard_ulp(self, dec, prec): - return P._dec_from_triple(0, '1', dec._exp+len(dec._int)-prec) + return _dec_from_triple(0, '1', dec._exp+len(dec._int)-prec) def rounding_direction(self, x, mode): """Determine the effective direction of the rounding when @@ -401,10 +402,10 @@ class SkipHandler: # Convert infinities to the largest representable number + 1. x = exact if exact.is_infinite(): - x = P._dec_from_triple(exact._sign, '10', context.p.Emax) + x = _dec_from_triple(exact._sign, '10', context.p.Emax) y = rounded if rounded.is_infinite(): - y = P._dec_from_triple(rounded._sign, '10', context.p.Emax) + y = _dec_from_triple(rounded._sign, '10', context.p.Emax) # err = (rounded - exact) / ulp(rounded) self.maxctx.prec = p * 2 -- cgit v1.2.1 From dcaeb518e8984885347e164e26fc3c10a1e98eb9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 11 Sep 2014 17:50:21 +0200 Subject: Closes #22336: attemptckalloc() with PyMem_Malloc() in _tkinter The PyMem_Malloc(size) function has a well defined behaviour: if size is 0, a pointer different than NULL is returned. PyMem_Malloc() allocations are tracked by tracemalloc, attemptckalloc() allocations are not tracked. --- Modules/_tkinter.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 02fcb818a3..d5396f6f0d 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -605,7 +605,7 @@ Tkapp_New(const char *screenName, const char *className, Tcl_SetVar(v->interp, "tcl_interactive", "0", TCL_GLOBAL_ONLY); /* This is used to get the application class for Tk 4.1 and up */ - argv0 = (char*)attemptckalloc(strlen(className) + 1); + argv0 = (char*)PyMem_Malloc(strlen(className) + 1); if (!argv0) { PyErr_NoMemory(); Py_DECREF(v); @@ -616,7 +616,7 @@ Tkapp_New(const char *screenName, const char *className, if (Py_ISUPPER(Py_CHARMASK(argv0[0]))) argv0[0] = Py_TOLOWER(Py_CHARMASK(argv0[0])); Tcl_SetVar(v->interp, "argv0", argv0, TCL_GLOBAL_ONLY); - ckfree(argv0); + PyMem_Free(argv0); if (! wantTk) { Tcl_SetVar(v->interp, @@ -639,7 +639,7 @@ Tkapp_New(const char *screenName, const char *className, if (use) len += strlen(use) + sizeof "-use "; - args = (char*)attemptckalloc(len); + args = (char*)PyMem_Malloc(len); if (!args) { PyErr_NoMemory(); Py_DECREF(v); @@ -657,7 +657,7 @@ Tkapp_New(const char *screenName, const char *className, } Tcl_SetVar(v->interp, "argv", args, TCL_GLOBAL_ONLY); - ckfree(args); + PyMem_Free(args); } if (Tcl_AppInit(v->interp) != TCL_OK) { @@ -914,15 +914,15 @@ AsObj(PyObject *value) "list is too long"); return NULL; } - argv = (Tcl_Obj **) attemptckalloc(((size_t)size) * sizeof(Tcl_Obj *)); - if(!argv) { + argv = (Tcl_Obj **) PyMem_Malloc(((size_t)size) * sizeof(Tcl_Obj *)); + if (!argv) { PyErr_NoMemory(); return NULL; } for (i = 0; i < size; i++) argv[i] = AsObj(PySequence_Fast_GET_ITEM(value,i)); result = Tcl_NewListObj(size, argv); - ckfree(FREECAST argv); + PyMem_Free(argv); return result; } else if (PyUnicode_Check(value)) { @@ -948,7 +948,7 @@ AsObj(PyObject *value) if (kind == sizeof(Tcl_UniChar)) return Tcl_NewUnicodeObj(inbuf, size); allocsize = ((size_t)size) * sizeof(Tcl_UniChar); - outbuf = (Tcl_UniChar*)attemptckalloc(allocsize); + outbuf = (Tcl_UniChar*)PyMem_Malloc(allocsize); /* Else overflow occurred, and we take the next exit */ if (!outbuf) { PyErr_NoMemory(); @@ -965,14 +965,14 @@ AsObj(PyObject *value) "character U+%x is above the range " "(U+0000-U+FFFF) allowed by Tcl", ch); - ckfree(FREECAST outbuf); + PyMem_Free(outbuf); return NULL; } #endif outbuf[i] = ch; } result = Tcl_NewUnicodeObj(outbuf, size); - ckfree(FREECAST outbuf); + PyMem_Free(outbuf); return result; } else if(PyTclObject_Check(value)) { @@ -1084,7 +1084,7 @@ Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc) for (i = 0; i < objc; i++) Tcl_DecrRefCount(objv[i]); if (objv != objStore) - ckfree(FREECAST objv); + PyMem_Free(objv); } /* Convert Python objects to Tcl objects. This must happen in the @@ -1115,7 +1115,7 @@ Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) "list is too long"); return NULL; } - objv = (Tcl_Obj **)attemptckalloc(((size_t)objc) * sizeof(Tcl_Obj *)); + objv = (Tcl_Obj **)PyMem_Malloc(((size_t)objc) * sizeof(Tcl_Obj *)); if (objv == NULL) { PyErr_NoMemory(); objc = 0; -- cgit v1.2.1 From e0fd5ffb6165d8a050b32a86a07bdba82c945b10 Mon Sep 17 00:00:00 2001 From: Charles-Fran?ois Natali Date: Thu, 18 Sep 2014 23:18:46 +0100 Subject: Issue #22378: socket module: add SO_MARK. --- Modules/socketmodule.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 7738c30c41..cb29821a50 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -6248,6 +6248,9 @@ PyInit__socket(void) #ifdef SO_PRIORITY PyModule_AddIntMacro(m, SO_PRIORITY); #endif +#ifdef SO_MARK + PyModule_AddIntMacro(m, SO_MARK); +#endif /* Maximum number of connections for "listen" */ #ifdef SOMAXCONN -- cgit v1.2.1 From df9c20c2443c91c18a665b56b43f3f0b330cee66 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Fri, 26 Sep 2014 23:31:59 +0200 Subject: Issue #5309: distutils' build and build_ext commands now accept a ``-j`` option to enable parallel building of extension modules. --- Modules/Setup.dist | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/Setup.dist b/Modules/Setup.dist index 01fb85ffc3..ee84df466e 100644 --- a/Modules/Setup.dist +++ b/Modules/Setup.dist @@ -118,6 +118,7 @@ _collections _collectionsmodule.c # Container types itertools itertoolsmodule.c # Functions creating iterators for efficient looping atexit atexitmodule.c # Register functions to be run at interpreter-shutdown _stat _stat.c # stat.h interface +time timemodule.c # time module # access to ISO C locale support _locale _localemodule.c # -lintl -- cgit v1.2.1 From 8cbd503f52fac32926312dd3476a4580dfbe6daa Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 28 Sep 2014 11:27:24 +0300 Subject: Removed redundant casts to `char *`. Corresponding functions now accept `const char *` (issue #1772673). --- Modules/_cursesmodule.c | 2 +- Modules/_decimal/_decimal.c | 4 ++-- Modules/cjkcodecs/cjkcodecs.h | 2 +- Modules/cjkcodecs/multibytecodec.c | 4 ++-- Modules/pyexpat.c | 9 ++++----- 5 files changed, 10 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 5ffce2f954..6b778687e7 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -2675,7 +2675,7 @@ PyCurses_KeyName(PyObject *self, PyObject *args) } knp = keyname(ch); - return PyBytes_FromString((knp == NULL) ? "" : (char *)knp); + return PyBytes_FromString((knp == NULL) ? "" : knp); } #endif diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index f00088736e..169914c2f7 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -5640,7 +5640,7 @@ PyInit__decimal(void) goto error; /* GCOV_NOT_REACHED */ } - ASSIGN_PTR(cm->ex, PyErr_NewException((char *)cm->fqname, base, NULL)); + ASSIGN_PTR(cm->ex, PyErr_NewException(cm->fqname, base, NULL)); Py_DECREF(base); /* add to module */ @@ -5672,7 +5672,7 @@ PyInit__decimal(void) goto error; /* GCOV_NOT_REACHED */ } - ASSIGN_PTR(cm->ex, PyErr_NewException((char *)cm->fqname, base, NULL)); + ASSIGN_PTR(cm->ex, PyErr_NewException(cm->fqname, base, NULL)); Py_DECREF(base); Py_INCREF(cm->ex); diff --git a/Modules/cjkcodecs/cjkcodecs.h b/Modules/cjkcodecs/cjkcodecs.h index 25bab41cf3..4cd20885ac 100644 --- a/Modules/cjkcodecs/cjkcodecs.h +++ b/Modules/cjkcodecs/cjkcodecs.h @@ -362,7 +362,7 @@ importmap(const char *modname, const char *symbol, if (mod == NULL) return -1; - o = PyObject_GetAttrString(mod, (char*)symbol); + o = PyObject_GetAttrString(mod, symbol); if (o == NULL) goto errorexit; else if (!PyCapsule_IsValid(o, PyMultibyteCodec_CAPSULE_NAME)) { diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 74ecafd3d6..31bb35fede 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -1269,10 +1269,10 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self, if (sizehint < 0) cres = PyObject_CallMethod(self->stream, - (char *)method, NULL); + method, NULL); else cres = PyObject_CallMethod(self->stream, - (char *)method, "i", sizehint); + method, "i", sizehint); if (cres == NULL) goto errorexit; diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 9c21bed017..88984e705c 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1478,7 +1478,7 @@ PyUnknownEncodingHandler(void *encodingHandlerData, static PyObject * -newxmlparseobject(char *encoding, char *namespace_separator, PyObject *intern) +newxmlparseobject(const char *encoding, const char *namespace_separator, PyObject *intern) { int i; xmlparseobject *self; @@ -1932,8 +1932,7 @@ pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, const char return NULL; } - result = newxmlparseobject((char *)encoding, (char *)namespace_separator, - intern); + result = newxmlparseobject(encoding, namespace_separator, intern); if (intern_decref) { Py_DECREF(intern); } @@ -2074,7 +2073,7 @@ MODULE_INITFUNC(void) PyModule_AddObject(m, "XMLParserType", (PyObject *) &Xmlparsetype); PyModule_AddStringConstant(m, "EXPAT_VERSION", - (char *) XML_ExpatVersion()); + XML_ExpatVersion()); { XML_Expat_Version info = XML_ExpatVersionInfo(); PyModule_AddObject(m, "version_info", @@ -2154,7 +2153,7 @@ MODULE_INITFUNC(void) #define MYCONST(name) \ if (PyModule_AddStringConstant(errors_module, #name, \ - (char *)XML_ErrorString(name)) < 0) \ + XML_ErrorString(name)) < 0) \ return NULL; \ tmpnum = PyLong_FromLong(name); \ if (tmpnum == NULL) return NULL; \ -- cgit v1.2.1 From 829b3cdf07e06cd0bd079a3080c8a85019433c1b Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 29 Sep 2014 22:49:23 +0300 Subject: Issue #22437: Number of capturing groups in regular expression is no longer limited by 100. --- Modules/_sre.c | 51 +++++++++++++++++++++++++++++++++++++-------------- Modules/sre.h | 7 +++---- 2 files changed, 40 insertions(+), 18 deletions(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 13479ba5d7..5c3d105890 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -357,6 +357,11 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string, memset(state, 0, sizeof(SRE_STATE)); + state->mark = PyMem_New(void *, pattern->groups * 2); + if (!state->mark) { + PyErr_NoMemory(); + goto err; + } state->lastmark = -1; state->lastindex = -1; @@ -409,6 +414,8 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string, return string; err: + PyMem_Del(state->mark); + state->mark = NULL; if (state->buffer.buf) PyBuffer_Release(&state->buffer); return NULL; @@ -421,6 +428,8 @@ state_fini(SRE_STATE* state) PyBuffer_Release(&state->buffer); Py_XDECREF(state->string); data_stack_dealloc(state); + PyMem_Del(state->mark); + state->mark = NULL; } /* calculate offset from start of string */ @@ -560,6 +569,7 @@ pattern_match(PatternObject *self, PyObject *args, PyObject *kwargs) PyObject *pattern = NULL; SRE_STATE state; Py_ssize_t status; + PyObject *match; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:match", _keywords, @@ -579,12 +589,14 @@ pattern_match(PatternObject *self, PyObject *args, PyObject *kwargs) status = sre_match(&state, PatternObject_GetCode(self), 0); TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr)); - if (PyErr_Occurred()) + if (PyErr_Occurred()) { + state_fini(&state); return NULL; + } + match = pattern_new_match(self, &state, status); state_fini(&state); - - return (PyObject *)pattern_new_match(self, &state, status); + return match; } static PyObject* @@ -592,6 +604,7 @@ pattern_fullmatch(PatternObject* self, PyObject* args, PyObject* kw) { SRE_STATE state; Py_ssize_t status; + PyObject *match; PyObject *string = NULL, *string2 = NULL; Py_ssize_t start = 0; @@ -616,12 +629,14 @@ pattern_fullmatch(PatternObject* self, PyObject* args, PyObject* kw) status = sre_match(&state, PatternObject_GetCode(self), 1); TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr)); - if (PyErr_Occurred()) + if (PyErr_Occurred()) { + state_fini(&state); return NULL; + } + match = pattern_new_match(self, &state, status); state_fini(&state); - - return pattern_new_match(self, &state, status); + return match; } static PyObject* @@ -629,6 +644,7 @@ pattern_search(PatternObject* self, PyObject* args, PyObject* kw) { SRE_STATE state; Py_ssize_t status; + PyObject *match; PyObject *string = NULL, *string2 = NULL; Py_ssize_t start = 0; @@ -652,12 +668,14 @@ pattern_search(PatternObject* self, PyObject* args, PyObject* kw) TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr)); - state_fini(&state); - - if (PyErr_Occurred()) + if (PyErr_Occurred()) { + state_fini(&state); return NULL; + } - return pattern_new_match(self, &state, status); + match = pattern_new_match(self, &state, status); + state_fini(&state); + return match; } static PyObject* @@ -1417,7 +1435,7 @@ _compile(PyObject* self_, PyObject* args) PyObject* groupindex = NULL; PyObject* indexgroup = NULL; - if (!PyArg_ParseTuple(args, "OiO!|nOO", &pattern, &flags, + if (!PyArg_ParseTuple(args, "OiO!nOO", &pattern, &flags, &PyList_Type, &code, &groups, &groupindex, &indexgroup)) return NULL; @@ -1933,10 +1951,9 @@ _validate_inner(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups) static int _validate_outer(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups) { - if (groups < 0 || groups > 100 || code >= end || end[-1] != SRE_OP_SUCCESS) + if (groups < 0 || (size_t)groups > SRE_MAXGROUPS || + code >= end || end[-1] != SRE_OP_SUCCESS) FAIL; - if (groups == 0) /* fix for simplejson */ - groups = 100; /* 100 groups should always be safe */ return _validate_inner(code, end-1, groups); } @@ -2747,6 +2764,12 @@ PyMODINIT_FUNC PyInit__sre(void) Py_DECREF(x); } + x = PyLong_FromUnsignedLong(SRE_MAXGROUPS); + if (x) { + PyDict_SetItemString(d, "MAXGROUPS", x); + Py_DECREF(x); + } + x = PyUnicode_FromString(copyright); if (x) { PyDict_SetItemString(d, "copyright", x); diff --git a/Modules/sre.h b/Modules/sre.h index 42fe28d554..35d198fead 100644 --- a/Modules/sre.h +++ b/Modules/sre.h @@ -18,8 +18,10 @@ #define SRE_CODE Py_UCS4 #if SIZEOF_SIZE_T > 4 # define SRE_MAXREPEAT (~(SRE_CODE)0) +# define SRE_MAXGROUPS ((~(SRE_CODE)0) / 2) #else # define SRE_MAXREPEAT ((SRE_CODE)PY_SSIZE_T_MAX) +# define SRE_MAXGROUPS ((SRE_CODE)PY_SSIZE_T_MAX / SIZEOF_SIZE_T / 2) #endif typedef struct { @@ -52,9 +54,6 @@ typedef struct { typedef unsigned int (*SRE_TOLOWER_HOOK)(unsigned int ch); -/* FIXME: shouldn't be a constant, really... */ -#define SRE_MARK_SIZE 200 - typedef struct SRE_REPEAT_T { Py_ssize_t count; SRE_CODE* pattern; /* points to REPEAT operator arguments */ @@ -76,7 +75,7 @@ typedef struct { /* registers */ Py_ssize_t lastindex; Py_ssize_t lastmark; - void* mark[SRE_MARK_SIZE]; + void** mark; /* dynamically allocated stuff */ char* data_stack; size_t data_stack_size; -- cgit v1.2.1 From 8d799851fb876c167930eed7d0b23fada08a08d8 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 30 Sep 2014 13:40:12 +0200 Subject: faulthandler: suppress crash reporter directly in test functions written to crash. --- Modules/faulthandler.c | 47 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 97963efcdf..ee00719262 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -5,7 +5,13 @@ #include #include #if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK) -#include +# include +#endif +#ifdef MS_WINDOWS +# include +#endif +#ifdef HAVE_SYS_RESOURCE_H +# include #endif /* Allocate at maximum 100 MB of the stack to raise the stack overflow */ @@ -804,6 +810,34 @@ faulthandler_unregister_py(PyObject *self, PyObject *args) #endif /* FAULTHANDLER_USER */ +static void +faulthandler_suppress_crash_report(void) +{ +#ifdef MS_WINDOWS + UINT mode; + + /* Configure Windows to not display the Windows Error Reporting dialog */ + mode = SetErrorMode(SEM_NOGPFAULTERRORBOX); + SetErrorMode(mode | SEM_NOGPFAULTERRORBOX); +#endif + +#ifdef HAVE_SYS_RESOURCE_H + struct rlimit rl; + + /* Disable creation of core dump */ + if (getrlimit(RLIMIT_CORE, &rl) != 0) { + rl.rlim_cur = 0; + setrlimit(RLIMIT_CORE, &rl); + } +#endif + +#ifdef _MSC_VER + /* Visual Studio: configure abort() to not display an error message nor + open a popup asking to report the fault. */ + _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT); +#endif +} + static PyObject * faulthandler_read_null(PyObject *self, PyObject *args) { @@ -813,6 +847,7 @@ faulthandler_read_null(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "|i:_read_null", &release_gil)) return NULL; + faulthandler_suppress_crash_report(); x = NULL; if (release_gil) { Py_BEGIN_ALLOW_THREADS @@ -827,6 +862,7 @@ faulthandler_read_null(PyObject *self, PyObject *args) static PyObject * faulthandler_sigsegv(PyObject *self, PyObject *args) { + faulthandler_suppress_crash_report(); #if defined(MS_WINDOWS) /* For SIGSEGV, faulthandler_fatal_error() restores the previous signal handler and then gives back the execution flow to the program (without @@ -853,6 +889,7 @@ faulthandler_sigfpe(PyObject *self, PyObject *args) /* Do an integer division by zero: raise a SIGFPE on Intel CPU, but not on PowerPC. Use volatile to disable compile-time optimizations. */ volatile int x = 1, y = 0, z; + faulthandler_suppress_crash_report(); z = x / y; /* If the division by zero didn't raise a SIGFPE (e.g. on PowerPC), raise it manually. */ @@ -865,11 +902,7 @@ faulthandler_sigfpe(PyObject *self, PyObject *args) static PyObject * faulthandler_sigabrt(PyObject *self, PyObject *args) { -#ifdef _MSC_VER - /* Visual Studio: configure abort() to not display an error message nor - open a popup asking to report the fault. */ - _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT); -#endif + faulthandler_suppress_crash_report(); abort(); Py_RETURN_NONE; } @@ -880,6 +913,7 @@ faulthandler_fatal_error_py(PyObject *self, PyObject *args) char *message; if (!PyArg_ParseTuple(args, "y:fatal_error", &message)) return NULL; + faulthandler_suppress_crash_report(); Py_FatalError(message); Py_RETURN_NONE; } @@ -905,6 +939,7 @@ faulthandler_stack_overflow(PyObject *self) size_t depth, size; char *sp = (char *)&depth, *stop; + faulthandler_suppress_crash_report(); depth = 0; stop = stack_overflow(sp - STACK_OVERFLOW_MAX_SIZE, sp + STACK_OVERFLOW_MAX_SIZE, -- cgit v1.2.1 From 61d5d0b23f4fbcd7648478914717d681abe592e6 Mon Sep 17 00:00:00 2001 From: R David Murray Date: Sun, 5 Oct 2014 11:47:01 -0400 Subject: #16518: Bring error messages in harmony with docs ("bytes-like object") Some time ago we changed the docs to consistently use the term 'bytes-like object' in all the contexts where bytes, bytearray, memoryview, etc are used. This patch (by Ezio Melotti) completes that work by changing the error messages that previously reported that certain types did "not support the buffer interface" to instead say that a bytes-like object is required. (The glossary entry for bytes-like object references the discussion of the buffer protocol in the docs.) --- Modules/_operator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_operator.c b/Modules/_operator.c index 9c5c0d206a..8f524a6449 100644 --- a/Modules/_operator.c +++ b/Modules/_operator.c @@ -241,7 +241,7 @@ PyDoc_STRVAR(compare_digest__doc__, "Return 'a == b'. This function uses an approach designed to prevent\n" "timing analysis, making it appropriate for cryptography.\n" "a and b must both be of the same type: either str (ASCII only),\n" -"or any type that supports the buffer protocol (e.g. bytes).\n" +"or any bytes-like object.\n" "\n" "Note: If a and b are of different lengths, or if an error occurs,\n" "a timing attack could theoretically reveal information about the\n" -- cgit v1.2.1 From 91bf59c20bde26db5a7778de1bab82d3feef02e3 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sun, 5 Oct 2014 20:41:53 +0200 Subject: Issue #21965: Add support for in-memory SSL to the ssl module. Patch by Geert Jansen. --- Modules/_ssl.c | 532 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 456 insertions(+), 76 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 5b85cc7272..bf0eeffa2d 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -64,6 +64,7 @@ static PySocketModule_APIObject PySocketModule; #include "openssl/ssl.h" #include "openssl/err.h" #include "openssl/rand.h" +#include "openssl/bio.h" /* SSL error object */ static PyObject *PySSLErrorObject; @@ -226,10 +227,19 @@ typedef struct { char shutdown_seen_zero; char handshake_done; enum py_ssl_server_or_client socket_type; + PyObject *owner; /* Python level "owner" passed to servername callback */ + PyObject *server_hostname; } PySSLSocket; +typedef struct { + PyObject_HEAD + BIO *bio; + int eof_written; +} PySSLMemoryBIO; + static PyTypeObject PySSLContext_Type; static PyTypeObject PySSLSocket_Type; +static PyTypeObject PySSLMemoryBIO_Type; static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args); static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args); @@ -240,6 +250,7 @@ static PyObject *PySSL_cipher(PySSLSocket *self); #define PySSLContext_Check(v) (Py_TYPE(v) == &PySSLContext_Type) #define PySSLSocket_Check(v) (Py_TYPE(v) == &PySSLSocket_Type) +#define PySSLMemoryBIO_Check(v) (Py_TYPE(v) == &PySSLMemoryBIO_Type) typedef enum { SOCKET_IS_NONBLOCKING, @@ -254,6 +265,9 @@ typedef enum { #define ERRSTR1(x,y,z) (x ":" y ": " z) #define ERRSTR(x) ERRSTR1("_ssl.c", Py_STRINGIFY(__LINE__), x) +/* Get the socket from a PySSLSocket, if it has one */ +#define GET_SOCKET(obj) ((obj)->Socket ? \ + (PySocketSockObject *) PyWeakref_GetObject((obj)->Socket) : NULL) /* * SSL errors. @@ -417,13 +431,12 @@ PySSL_SetError(PySSLSocket *obj, int ret, char *filename, int lineno) case SSL_ERROR_SYSCALL: { if (e == 0) { - PySocketSockObject *s - = (PySocketSockObject *) PyWeakref_GetObject(obj->Socket); + PySocketSockObject *s = GET_SOCKET(obj); if (ret == 0 || (((PyObject *)s) == Py_None)) { p = PY_SSL_ERROR_EOF; type = PySSLEOFErrorObject; errstr = "EOF occurred in violation of protocol"; - } else if (ret == -1) { + } else if (s && ret == -1) { /* underlying BIO reported an I/O error */ Py_INCREF(s); ERR_clear_error(); @@ -477,10 +490,12 @@ _setSSLError (char *errstr, int errcode, char *filename, int lineno) { static PySSLSocket * newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, enum py_ssl_server_or_client socket_type, - char *server_hostname) + char *server_hostname, + PySSLMemoryBIO *inbio, PySSLMemoryBIO *outbio) { PySSLSocket *self; SSL_CTX *ctx = sslctx->ctx; + PyObject *hostname; long mode; self = PyObject_New(PySSLSocket, &PySSLSocket_Type); @@ -493,6 +508,18 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, self->ctx = sslctx; self->shutdown_seen_zero = 0; self->handshake_done = 0; + self->owner = NULL; + if (server_hostname != NULL) { + hostname = PyUnicode_Decode(server_hostname, strlen(server_hostname), + "idna", "strict"); + if (hostname == NULL) { + Py_DECREF(self); + return NULL; + } + self->server_hostname = hostname; + } else + self->server_hostname = NULL; + Py_INCREF(sslctx); /* Make sure the SSL error state is initialized */ @@ -502,8 +529,17 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, PySSL_BEGIN_ALLOW_THREADS self->ssl = SSL_new(ctx); PySSL_END_ALLOW_THREADS - SSL_set_app_data(self->ssl,self); - SSL_set_fd(self->ssl, Py_SAFE_DOWNCAST(sock->sock_fd, SOCKET_T, int)); + SSL_set_app_data(self->ssl, self); + if (sock) { + SSL_set_fd(self->ssl, Py_SAFE_DOWNCAST(sock->sock_fd, SOCKET_T, int)); + } else { + /* BIOs are reference counted and SSL_set_bio borrows our reference. + * To prevent a double free in memory_bio_dealloc() we need to take an + * extra reference here. */ + CRYPTO_add(&inbio->bio->references, 1, CRYPTO_LOCK_BIO); + CRYPTO_add(&outbio->bio->references, 1, CRYPTO_LOCK_BIO); + SSL_set_bio(self->ssl, inbio->bio, outbio->bio); + } mode = SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER; #ifdef SSL_MODE_AUTO_RETRY mode |= SSL_MODE_AUTO_RETRY; @@ -518,7 +554,7 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, /* If the socket is in non-blocking mode or timeout mode, set the BIO * to non-blocking mode (blocking is the default) */ - if (sock->sock_timeout >= 0.0) { + if (sock && sock->sock_timeout >= 0.0) { BIO_set_nbio(SSL_get_rbio(self->ssl), 1); BIO_set_nbio(SSL_get_wbio(self->ssl), 1); } @@ -531,10 +567,13 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, PySSL_END_ALLOW_THREADS self->socket_type = socket_type; - self->Socket = PyWeakref_NewRef((PyObject *) sock, NULL); - if (self->Socket == NULL) { - Py_DECREF(self); - return NULL; + if (sock != NULL) { + self->Socket = PyWeakref_NewRef((PyObject *) sock, NULL); + if (self->Socket == NULL) { + Py_DECREF(self); + Py_XDECREF(self->server_hostname); + return NULL; + } } return self; } @@ -546,20 +585,21 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self) int ret; int err; int sockstate, nonblocking; - PySocketSockObject *sock - = (PySocketSockObject *) PyWeakref_GetObject(self->Socket); + PySocketSockObject *sock = GET_SOCKET(self); - if (((PyObject*)sock) == Py_None) { - _setSSLError("Underlying socket connection gone", - PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); - return NULL; - } - Py_INCREF(sock); + if (sock) { + if (((PyObject*)sock) == Py_None) { + _setSSLError("Underlying socket connection gone", + PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); + return NULL; + } + Py_INCREF(sock); - /* just in case the blocking state of the socket has been changed */ - nonblocking = (sock->sock_timeout >= 0.0); - BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); - BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); + /* just in case the blocking state of the socket has been changed */ + nonblocking = (sock->sock_timeout >= 0.0); + BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); + BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); + } /* Actually negotiate SSL connection */ /* XXX If SSL_do_handshake() returns 0, it's also a failure. */ @@ -593,7 +633,7 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self) break; } } while (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE); - Py_DECREF(sock); + Py_XDECREF(sock); if (ret < 1) return PySSL_SetError(self, ret, __FILE__, __LINE__); @@ -608,7 +648,7 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self) return Py_None; error: - Py_DECREF(sock); + Py_XDECREF(sock); return NULL; } @@ -1483,6 +1523,54 @@ on the SSLContext to change the certificate information associated with the\n\ SSLSocket before the cryptographic exchange handshake messages\n"); +static PyObject * +PySSL_get_server_side(PySSLSocket *self, void *c) +{ + return PyBool_FromLong(self->socket_type == PY_SSL_SERVER); +} + +PyDoc_STRVAR(PySSL_get_server_side_doc, +"Whether this is a server-side socket."); + +static PyObject * +PySSL_get_server_hostname(PySSLSocket *self, void *c) +{ + if (self->server_hostname == NULL) + Py_RETURN_NONE; + Py_INCREF(self->server_hostname); + return self->server_hostname; +} + +PyDoc_STRVAR(PySSL_get_server_hostname_doc, +"The currently set server hostname (for SNI)."); + +static PyObject * +PySSL_get_owner(PySSLSocket *self, void *c) +{ + PyObject *owner; + + if (self->owner == NULL) + Py_RETURN_NONE; + + owner = PyWeakref_GetObject(self->owner); + Py_INCREF(owner); + return owner; +} + +static int +PySSL_set_owner(PySSLSocket *self, PyObject *value, void *c) +{ + Py_XDECREF(self->owner); + self->owner = PyWeakref_NewRef(value, NULL); + if (self->owner == NULL) + return -1; + return 0; +} + +PyDoc_STRVAR(PySSL_get_owner_doc, +"The Python-level owner of this object.\ +Passed as \"self\" in servername callback."); + static void PySSL_dealloc(PySSLSocket *self) { @@ -1492,6 +1580,8 @@ static void PySSL_dealloc(PySSLSocket *self) SSL_free(self->ssl); Py_XDECREF(self->Socket); Py_XDECREF(self->ctx); + Py_XDECREF(self->server_hostname); + Py_XDECREF(self->owner); PyObject_Del(self); } @@ -1508,10 +1598,10 @@ check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) int rc; /* Nothing to do unless we're in timeout mode (not non-blocking) */ - if (s->sock_timeout < 0.0) - return SOCKET_IS_BLOCKING; - else if (s->sock_timeout == 0.0) + if ((s == NULL) || (s->sock_timeout == 0.0)) return SOCKET_IS_NONBLOCKING; + else if (s->sock_timeout < 0.0) + return SOCKET_IS_BLOCKING; /* Guard against closed socket */ if (s->sock_fd < 0) @@ -1572,18 +1662,19 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) int sockstate; int err; int nonblocking; - PySocketSockObject *sock - = (PySocketSockObject *) PyWeakref_GetObject(self->Socket); + PySocketSockObject *sock = GET_SOCKET(self); - if (((PyObject*)sock) == Py_None) { - _setSSLError("Underlying socket connection gone", - PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); - return NULL; + if (sock != NULL) { + if (((PyObject*)sock) == Py_None) { + _setSSLError("Underlying socket connection gone", + PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); + return NULL; + } + Py_INCREF(sock); } - Py_INCREF(sock); if (!PyArg_ParseTuple(args, "y*:write", &buf)) { - Py_DECREF(sock); + Py_XDECREF(sock); return NULL; } @@ -1593,10 +1684,12 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) goto error; } - /* just in case the blocking state of the socket has been changed */ - nonblocking = (sock->sock_timeout >= 0.0); - BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); - BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); + if (sock != NULL) { + /* just in case the blocking state of the socket has been changed */ + nonblocking = (sock->sock_timeout >= 0.0); + BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); + BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); + } sockstate = check_socket_and_wait_for_timeout(sock, 1); if (sockstate == SOCKET_HAS_TIMED_OUT) { @@ -1640,7 +1733,7 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) } } while (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE); - Py_DECREF(sock); + Py_XDECREF(sock); PyBuffer_Release(&buf); if (len > 0) return PyLong_FromLong(len); @@ -1648,7 +1741,7 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) return PySSL_SetError(self, len, __FILE__, __LINE__); error: - Py_DECREF(sock); + Py_XDECREF(sock); PyBuffer_Release(&buf); return NULL; } @@ -1688,15 +1781,16 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) int sockstate; int err; int nonblocking; - PySocketSockObject *sock - = (PySocketSockObject *) PyWeakref_GetObject(self->Socket); + PySocketSockObject *sock = GET_SOCKET(self); - if (((PyObject*)sock) == Py_None) { - _setSSLError("Underlying socket connection gone", - PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); - return NULL; + if (sock != NULL) { + if (((PyObject*)sock) == Py_None) { + _setSSLError("Underlying socket connection gone", + PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); + return NULL; + } + Py_INCREF(sock); } - Py_INCREF(sock); buf.obj = NULL; buf.buf = NULL; @@ -1722,10 +1816,12 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) } } - /* just in case the blocking state of the socket has been changed */ - nonblocking = (sock->sock_timeout >= 0.0); - BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); - BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); + if (sock != NULL) { + /* just in case the blocking state of the socket has been changed */ + nonblocking = (sock->sock_timeout >= 0.0); + BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); + BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); + } /* first check if there are bytes ready to be read */ PySSL_BEGIN_ALLOW_THREADS @@ -1781,7 +1877,7 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) } done: - Py_DECREF(sock); + Py_XDECREF(sock); if (!buf_passed) { _PyBytes_Resize(&dest, count); return dest; @@ -1792,7 +1888,7 @@ done: } error: - Py_DECREF(sock); + Py_XDECREF(sock); if (!buf_passed) Py_XDECREF(dest); else @@ -1809,21 +1905,22 @@ static PyObject *PySSL_SSLshutdown(PySSLSocket *self) { int err, ssl_err, sockstate, nonblocking; int zeros = 0; - PySocketSockObject *sock - = (PySocketSockObject *) PyWeakref_GetObject(self->Socket); + PySocketSockObject *sock = GET_SOCKET(self); - /* Guard against closed socket */ - if ((((PyObject*)sock) == Py_None) || (sock->sock_fd < 0)) { - _setSSLError("Underlying socket connection gone", - PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); - return NULL; - } - Py_INCREF(sock); + if (sock != NULL) { + /* Guard against closed socket */ + if ((((PyObject*)sock) == Py_None) || (sock->sock_fd < 0)) { + _setSSLError("Underlying socket connection gone", + PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); + return NULL; + } + Py_INCREF(sock); - /* Just in case the blocking state of the socket has been changed */ - nonblocking = (sock->sock_timeout >= 0.0); - BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); - BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); + /* Just in case the blocking state of the socket has been changed */ + nonblocking = (sock->sock_timeout >= 0.0); + BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); + BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); + } while (1) { PySSL_BEGIN_ALLOW_THREADS @@ -1881,15 +1978,17 @@ static PyObject *PySSL_SSLshutdown(PySSLSocket *self) } if (err < 0) { - Py_DECREF(sock); + Py_XDECREF(sock); return PySSL_SetError(self, err, __FILE__, __LINE__); } - else + if (sock) /* It's already INCREF'ed */ return (PyObject *) sock; + else + Py_RETURN_NONE; error: - Py_DECREF(sock); + Py_XDECREF(sock); return NULL; } @@ -1937,6 +2036,12 @@ If the TLS handshake is not yet complete, None is returned"); static PyGetSetDef ssl_getsetlist[] = { {"context", (getter) PySSL_get_context, (setter) PySSL_set_context, PySSL_set_context_doc}, + {"server_side", (getter) PySSL_get_server_side, NULL, + PySSL_get_server_side_doc}, + {"server_hostname", (getter) PySSL_get_server_hostname, NULL, + PySSL_get_server_hostname_doc}, + {"owner", (getter) PySSL_get_owner, (setter) PySSL_set_owner, + PySSL_get_owner_doc}, {NULL}, /* sentinel */ }; @@ -2825,13 +2930,48 @@ context_wrap_socket(PySSLContext *self, PyObject *args, PyObject *kwds) #endif } - res = (PyObject *) newPySSLSocket(self, sock, server_side, - hostname); + res = (PyObject *) newPySSLSocket(self, sock, server_side, hostname, + NULL, NULL); if (hostname != NULL) PyMem_Free(hostname); return res; } +static PyObject * +context_wrap_bio(PySSLContext *self, PyObject *args, PyObject *kwds) +{ + char *kwlist[] = {"incoming", "outgoing", "server_side", + "server_hostname", NULL}; + int server_side; + char *hostname = NULL; + PyObject *hostname_obj = Py_None, *res; + PySSLMemoryBIO *incoming, *outgoing; + + /* server_hostname is either None (or absent), or to be encoded + using the idna encoding. */ + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!O!i|O:_wrap_bio", kwlist, + &PySSLMemoryBIO_Type, &incoming, + &PySSLMemoryBIO_Type, &outgoing, + &server_side, &hostname_obj)) + return NULL; + if (hostname_obj != Py_None) { +#if HAVE_SNI + if (!PyArg_Parse(hostname_obj, "et", "idna", &hostname)) + return NULL; +#else + PyErr_SetString(PyExc_ValueError, "server_hostname is not supported " + "by your OpenSSL library"); + return NULL; +#endif + } + + res = (PyObject *) newPySSLSocket(self, NULL, server_side, hostname, + incoming, outgoing); + + PyMem_Free(hostname); + return res; +} + static PyObject * session_stats(PySSLContext *self, PyObject *unused) { @@ -2938,11 +3078,25 @@ _servername_callback(SSL *s, int *al, void *args) ssl = SSL_get_app_data(s); assert(PySSLSocket_Check(ssl)); - ssl_socket = PyWeakref_GetObject(ssl->Socket); + + /* The servername callback expects a argument that represents the current + * SSL connection and that has a .context attribute that can be changed to + * identify the requested hostname. Since the official API is the Python + * level API we want to pass the callback a Python level object rather than + * a _ssl.SSLSocket instance. If there's an "owner" (typically an + * SSLObject) that will be passed. Otherwise if there's a socket then that + * will be passed. If both do not exist only then the C-level object is + * passed. */ + if (ssl->owner) + ssl_socket = PyWeakref_GetObject(ssl->owner); + else if (ssl->Socket) + ssl_socket = PyWeakref_GetObject(ssl->Socket); + else + ssl_socket = (PyObject *) ssl; + Py_INCREF(ssl_socket); - if (ssl_socket == Py_None) { + if (ssl_socket == Py_None) goto error; - } if (servername == NULL) { result = PyObject_CallFunctionObjArgs(ssl_ctx->set_hostname, ssl_socket, @@ -3171,6 +3325,8 @@ static PyGetSetDef context_getsetlist[] = { static struct PyMethodDef context_methods[] = { {"_wrap_socket", (PyCFunction) context_wrap_socket, METH_VARARGS | METH_KEYWORDS, NULL}, + {"_wrap_bio", (PyCFunction) context_wrap_bio, + METH_VARARGS | METH_KEYWORDS, NULL}, {"set_ciphers", (PyCFunction) set_ciphers, METH_VARARGS, NULL}, {"_set_npn_protocols", (PyCFunction) _set_npn_protocols, @@ -3240,6 +3396,225 @@ static PyTypeObject PySSLContext_Type = { }; +/* + * MemoryBIO objects + */ + +static PyObject * +memory_bio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + char *kwlist[] = {NULL}; + BIO *bio; + PySSLMemoryBIO *self; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, ":MemoryBIO", kwlist)) + return NULL; + + bio = BIO_new(BIO_s_mem()); + if (bio == NULL) { + PyErr_SetString(PySSLErrorObject, + "failed to allocate BIO"); + return NULL; + } + /* Since our BIO is non-blocking an empty read() does not indicate EOF, + * just that no data is currently available. The SSL routines should retry + * the read, which we can achieve by calling BIO_set_retry_read(). */ + BIO_set_retry_read(bio); + BIO_set_mem_eof_return(bio, -1); + + assert(type != NULL && type->tp_alloc != NULL); + self = (PySSLMemoryBIO *) type->tp_alloc(type, 0); + if (self == NULL) { + BIO_free(bio); + return NULL; + } + self->bio = bio; + self->eof_written = 0; + + return (PyObject *) self; +} + +static void +memory_bio_dealloc(PySSLMemoryBIO *self) +{ + BIO_free(self->bio); + Py_TYPE(self)->tp_free(self); +} + +static PyObject * +memory_bio_get_pending(PySSLMemoryBIO *self, void *c) +{ + return PyLong_FromLong(BIO_ctrl_pending(self->bio)); +} + +PyDoc_STRVAR(PySSL_memory_bio_pending_doc, +"The number of bytes pending in the memory BIO."); + +static PyObject * +memory_bio_get_eof(PySSLMemoryBIO *self, void *c) +{ + return PyBool_FromLong((BIO_ctrl_pending(self->bio) == 0) + && self->eof_written); +} + +PyDoc_STRVAR(PySSL_memory_bio_eof_doc, +"Whether the memory BIO is at EOF."); + +static PyObject * +memory_bio_read(PySSLMemoryBIO *self, PyObject *args) +{ + int len = -1, avail, nbytes; + PyObject *result; + + if (!PyArg_ParseTuple(args, "|i:read", &len)) + return NULL; + + avail = BIO_ctrl_pending(self->bio); + if ((len < 0) || (len > avail)) + len = avail; + + result = PyBytes_FromStringAndSize(NULL, len); + if ((result == NULL) || (len == 0)) + return result; + + nbytes = BIO_read(self->bio, PyBytes_AS_STRING(result), len); + /* There should never be any short reads but check anyway. */ + if ((nbytes < len) && (_PyBytes_Resize(&result, len) < 0)) { + Py_DECREF(result); + return NULL; + } + + return result; +} + +PyDoc_STRVAR(PySSL_memory_bio_read_doc, +"read([len]) -> bytes\n\ +\n\ +Read up to len bytes from the memory BIO.\n\ +\n\ +If len is not specified, read the entire buffer.\n\ +If the return value is an empty bytes instance, this means either\n\ +EOF or that no data is available. Use the \"eof\" property to\n\ +distinguish between the two."); + +static PyObject * +memory_bio_write(PySSLMemoryBIO *self, PyObject *args) +{ + Py_buffer buf; + int nbytes; + + if (!PyArg_ParseTuple(args, "y*:write", &buf)) + return NULL; + + if (buf.len > INT_MAX) { + PyErr_Format(PyExc_OverflowError, + "string longer than %d bytes", INT_MAX); + goto error; + } + + if (self->eof_written) { + PyErr_SetString(PySSLErrorObject, + "cannot write() after write_eof()"); + goto error; + } + + nbytes = BIO_write(self->bio, buf.buf, buf.len); + if (nbytes < 0) { + _setSSLError(NULL, 0, __FILE__, __LINE__); + goto error; + } + + PyBuffer_Release(&buf); + return PyLong_FromLong(nbytes); + +error: + PyBuffer_Release(&buf); + return NULL; +} + +PyDoc_STRVAR(PySSL_memory_bio_write_doc, +"write(b) -> len\n\ +\n\ +Writes the bytes b into the memory BIO. Returns the number\n\ +of bytes written."); + +static PyObject * +memory_bio_write_eof(PySSLMemoryBIO *self, PyObject *args) +{ + self->eof_written = 1; + /* After an EOF is written, a zero return from read() should be a real EOF + * i.e. it should not be retried. Clear the SHOULD_RETRY flag. */ + BIO_clear_retry_flags(self->bio); + BIO_set_mem_eof_return(self->bio, 0); + + Py_RETURN_NONE; +} + +PyDoc_STRVAR(PySSL_memory_bio_write_eof_doc, +"write_eof()\n\ +\n\ +Write an EOF marker to the memory BIO.\n\ +When all data has been read, the \"eof\" property will be True."); + +static PyGetSetDef memory_bio_getsetlist[] = { + {"pending", (getter) memory_bio_get_pending, NULL, + PySSL_memory_bio_pending_doc}, + {"eof", (getter) memory_bio_get_eof, NULL, + PySSL_memory_bio_eof_doc}, + {NULL}, /* sentinel */ +}; + +static struct PyMethodDef memory_bio_methods[] = { + {"read", (PyCFunction) memory_bio_read, + METH_VARARGS, PySSL_memory_bio_read_doc}, + {"write", (PyCFunction) memory_bio_write, + METH_VARARGS, PySSL_memory_bio_write_doc}, + {"write_eof", (PyCFunction) memory_bio_write_eof, + METH_NOARGS, PySSL_memory_bio_write_eof_doc}, + {NULL, NULL} /* sentinel */ +}; + +static PyTypeObject PySSLMemoryBIO_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "_ssl.MemoryBIO", /*tp_name*/ + sizeof(PySSLMemoryBIO), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)memory_bio_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + memory_bio_methods, /*tp_methods*/ + 0, /*tp_members*/ + memory_bio_getsetlist, /*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*/ + memory_bio_new, /*tp_new*/ +}; + #ifdef HAVE_OPENSSL_RAND @@ -3927,6 +4302,8 @@ PyInit__ssl(void) return NULL; if (PyType_Ready(&PySSLSocket_Type) < 0) return NULL; + if (PyType_Ready(&PySSLMemoryBIO_Type) < 0) + return NULL; m = PyModule_Create(&_sslmodule); if (m == NULL) @@ -3990,6 +4367,9 @@ PyInit__ssl(void) if (PyDict_SetItemString(d, "_SSLSocket", (PyObject *)&PySSLSocket_Type) != 0) return NULL; + if (PyDict_SetItemString(d, "MemoryBIO", + (PyObject *)&PySSLMemoryBIO_Type) != 0) + return NULL; PyModule_AddIntConstant(m, "SSL_ERROR_ZERO_RETURN", PY_SSL_ERROR_ZERO_RETURN); PyModule_AddIntConstant(m, "SSL_ERROR_WANT_READ", -- cgit v1.2.1 From bb2d50b591a669474bb97d4a6a8c29965ed02389 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 10 Oct 2014 00:09:47 +0200 Subject: Closes #22579: Fix posixmodule.c to support any C compiler on Windows --- Modules/posixmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index c8d13d11a3..2489ccb1e4 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -17479,7 +17479,7 @@ all_ins(PyObject *m) } -#if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__)) && !defined(__QNX__) +#ifdef MS_WINDOWS #define INITFUNC PyInit_nt #define MODNAME "nt" -- cgit v1.2.1 From 789de4416e3980ffff7ae52039afebe083abfe46 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 10 Oct 2014 11:10:46 +0300 Subject: Issue #22584: Got rid of character tables in _sre.c and use standard macros Py_TOLOWER, Py_ISSPACE, etc. --- Modules/_sre.c | 40 ++++++---------------------------------- 1 file changed, 6 insertions(+), 34 deletions(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 5c3d105890..0dc5212e45 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -97,48 +97,20 @@ static char copyright[] = /* -------------------------------------------------------------------- */ /* search engine state */ -/* default character predicates (run sre_chars.py to regenerate tables) */ - -#define SRE_DIGIT_MASK 1 -#define SRE_SPACE_MASK 2 -#define SRE_LINEBREAK_MASK 4 -#define SRE_ALNUM_MASK 8 -#define SRE_WORD_MASK 16 - -/* FIXME: this assumes ASCII. create tables in init_sre() instead */ - -static char sre_char_info[128] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 2, -2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, -25, 25, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, -24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, -0, 0, 16, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, -24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0 }; - -static char sre_char_lower[128] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, -44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, -108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, -122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, -106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, -120, 121, 122, 123, 124, 125, 126, 127 }; - #define SRE_IS_DIGIT(ch)\ - ((ch) < 128 ? (sre_char_info[(ch)] & SRE_DIGIT_MASK) : 0) + ((ch) < 128 && Py_ISDIGIT(ch)) #define SRE_IS_SPACE(ch)\ - ((ch) < 128 ? (sre_char_info[(ch)] & SRE_SPACE_MASK) : 0) + ((ch) < 128 && Py_ISSPACE(ch)) #define SRE_IS_LINEBREAK(ch)\ - ((ch) < 128 ? (sre_char_info[(ch)] & SRE_LINEBREAK_MASK) : 0) + ((ch) == '\n') #define SRE_IS_ALNUM(ch)\ - ((ch) < 128 ? (sre_char_info[(ch)] & SRE_ALNUM_MASK) : 0) + ((ch) < 128 && Py_ISALNUM(ch)) #define SRE_IS_WORD(ch)\ - ((ch) < 128 ? (sre_char_info[(ch)] & SRE_WORD_MASK) : 0) + ((ch) < 128 && (Py_ISALNUM(ch) || (ch) == '_')) static unsigned int sre_lower(unsigned int ch) { - return ((ch) < 128 ? (unsigned int)sre_char_lower[ch] : ch); + return ((ch) < 128 ? Py_TOLOWER(ch) : ch); } /* locale-specific character predicates */ -- cgit v1.2.1 From 8cd3afe8c89cd041296ecab02a0391363f24a631 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 10 Oct 2014 16:26:45 -0400 Subject: Issue #20152: Port the array module to Argument Clinic. --- Modules/arraymodule.c | 634 +++++++++++++++++++++++------------------ Modules/clinic/arraymodule.c.h | 505 ++++++++++++++++++++++++++++++++ 2 files changed, 866 insertions(+), 273 deletions(-) create mode 100644 Modules/clinic/arraymodule.c.h (limited to 'Modules') diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index d0c94f7b23..a7bd6d858f 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -15,6 +15,12 @@ #endif /* HAVE_SYS_TYPES_H */ #endif /* !STDC_HEADERS */ +/*[clinic input] +output preset file +module array +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=0909c1a148c69931]*/ + struct arrayobject; /* Forward */ /* All possible arraydescr values are defined in the vector "descriptors" @@ -42,6 +48,20 @@ typedef struct arrayobject { static PyTypeObject Arraytype; +typedef struct { + PyObject_HEAD + Py_ssize_t index; + arrayobject *ao; + PyObject* (*getitem)(struct arrayobject *, Py_ssize_t); +} arrayiterobject; + +static PyTypeObject PyArrayIter_Type; + +#define PyArrayIter_Check(op) PyObject_TypeCheck(op, &PyArrayIter_Type) + +/* Must come after arrayobject and arrayiterobject definitions. */ +#include "clinic/arraymodule.c.h" + #define array_Check(op) PyObject_TypeCheck(op, &Arraytype) #define array_CheckExact(op) (Py_TYPE(op) == &Arraytype) @@ -471,6 +491,10 @@ static struct arraydescr descriptors[] = { /**************************************************************************** Implementations of array object methods. ****************************************************************************/ +/*[clinic input] +class array.array "arrayobject *" "&Arraytype" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=ad43d37e942a8854]*/ static PyObject * newarrayobject(PyTypeObject *type, Py_ssize_t size, struct arraydescr *descr) @@ -684,16 +708,35 @@ array_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh) return (PyObject *)np; } + +/*[clinic input] +array.array.__copy__ + +Return a copy of the array. +[clinic start generated code]*/ + static PyObject * -array_copy(arrayobject *a, PyObject *unused) +array_array___copy___impl(arrayobject *self) +/*[clinic end generated code: output=dec7c3f925d9619e input=ad1ee5b086965f09]*/ { - return array_slice(a, 0, Py_SIZE(a)); + return array_slice(self, 0, Py_SIZE(self)); } -PyDoc_STRVAR(copy_doc, -"copy(array)\n\ -\n\ - Return a copy of the array."); +/*[clinic input] +array.array.__deepcopy__ + + unused: object + / + +Return a copy of the array. +[clinic start generated code]*/ + +static PyObject * +array_array___deepcopy__(arrayobject *self, PyObject *unused) +/*[clinic end generated code: output=1ec748d8e14a9faa input=2405ecb4933748c4]*/ +{ + return array_array___copy___impl(self); +} static PyObject * array_concat(arrayobject *a, PyObject *bb) @@ -961,8 +1004,18 @@ ins(arrayobject *self, Py_ssize_t where, PyObject *v) return Py_None; } +/*[clinic input] +array.array.count + + v: object + / + +Return number of occurrences of v in the array. +[clinic start generated code]*/ + static PyObject * -array_count(arrayobject *self, PyObject *v) +array_array_count(arrayobject *self, PyObject *v) +/*[clinic end generated code: output=3dd3624bf7135a3a input=d9bce9d65e39d1f5]*/ { Py_ssize_t count = 0; Py_ssize_t i; @@ -984,13 +1037,19 @@ array_count(arrayobject *self, PyObject *v) return PyLong_FromSsize_t(count); } -PyDoc_STRVAR(count_doc, -"count(x)\n\ -\n\ -Return number of occurrences of x in the array."); + +/*[clinic input] +array.array.index + + v: object + / + +Return index of first occurrence of v in the array. +[clinic start generated code]*/ static PyObject * -array_index(arrayobject *self, PyObject *v) +array_array_index(arrayobject *self, PyObject *v) +/*[clinic end generated code: output=d48498d325602167 input=cf619898c6649d08]*/ { Py_ssize_t i; @@ -1013,11 +1072,6 @@ array_index(arrayobject *self, PyObject *v) return NULL; } -PyDoc_STRVAR(index_doc, -"index(x)\n\ -\n\ -Return index of first occurrence of x in the array."); - static int array_contains(arrayobject *self, PyObject *v) { @@ -1034,8 +1088,18 @@ array_contains(arrayobject *self, PyObject *v) return cmp; } +/*[clinic input] +array.array.remove + + v: object + / + +Remove the first occurrence of v in the array. +[clinic start generated code]*/ + static PyObject * -array_remove(arrayobject *self, PyObject *v) +array_array_remove(arrayobject *self, PyObject *v) +/*[clinic end generated code: output=bef06be9fdf9dceb input=0b1e5aed25590027]*/ { int i; @@ -1062,18 +1126,23 @@ array_remove(arrayobject *self, PyObject *v) return NULL; } -PyDoc_STRVAR(remove_doc, -"remove(x)\n\ -\n\ -Remove the first occurrence of x in the array."); +/*[clinic input] +array.array.pop + + i: Py_ssize_t = -1 + / + +Return the i-th element and delete it from the array. + +i defaults to -1. +[clinic start generated code]*/ static PyObject * -array_pop(arrayobject *self, PyObject *args) +array_array_pop_impl(arrayobject *self, Py_ssize_t i) +/*[clinic end generated code: output=bc1f0c54fe5308e4 input=8e5feb4c1a11cd44]*/ { - Py_ssize_t i = -1; PyObject *v; - if (!PyArg_ParseTuple(args, "|n:pop", &i)) - return NULL; + if (Py_SIZE(self) == 0) { /* Special-case most common failure cause */ PyErr_SetString(PyExc_IndexError, "pop from empty array"); @@ -1095,13 +1164,18 @@ array_pop(arrayobject *self, PyObject *args) return v; } -PyDoc_STRVAR(pop_doc, -"pop([i])\n\ -\n\ -Return the i-th element and delete it from the array. i defaults to -1."); +/*[clinic input] +array.array.extend + + bb: object + / + +Append items to the end of the array. +[clinic start generated code]*/ static PyObject * -array_extend(arrayobject *self, PyObject *bb) +array_array_extend(arrayobject *self, PyObject *bb) +/*[clinic end generated code: output=bbddbc8e8bef871d input=43be86aba5c31e44]*/ { if (array_do_extend(self, bb) == -1) return NULL; @@ -1109,29 +1183,35 @@ array_extend(arrayobject *self, PyObject *bb) return Py_None; } -PyDoc_STRVAR(extend_doc, -"extend(array or iterable)\n\ -\n\ - Append items to the end of the array."); +/*[clinic input] +array.array.insert + + i: Py_ssize_t + v: object + / + +Insert a new item v into the array before position i. +[clinic start generated code]*/ static PyObject * -array_insert(arrayobject *self, PyObject *args) +array_array_insert_impl(arrayobject *self, Py_ssize_t i, PyObject *v) +/*[clinic end generated code: output=5a3648e278348564 input=5577d1b4383e9313]*/ { - Py_ssize_t i; - PyObject *v; - if (!PyArg_ParseTuple(args, "nO:insert", &i, &v)) - return NULL; return ins(self, i, v); } -PyDoc_STRVAR(insert_doc, -"insert(i,x)\n\ -\n\ -Insert a new item x into the array before position i."); +/*[clinic input] +array.array.buffer_info + +Return a tuple (address, length) giving the current memory address and the length in items of the buffer used to hold array's contents. +The length should be multiplied by the itemsize attribute to calculate +the buffer length in bytes. +[clinic start generated code]*/ static PyObject * -array_buffer_info(arrayobject *self, PyObject *unused) +array_array_buffer_info_impl(arrayobject *self) +/*[clinic end generated code: output=9b2a4ec3ae7e98e7 input=a58bae5c6e1ac6a6]*/ { PyObject *retval = NULL, *v; @@ -1156,29 +1236,34 @@ array_buffer_info(arrayobject *self, PyObject *unused) return retval; } -PyDoc_STRVAR(buffer_info_doc, -"buffer_info() -> (address, length)\n\ -\n\ -Return a tuple (address, length) giving the current memory address and\n\ -the length in items of the buffer used to hold array's contents\n\ -The length should be multiplied by the itemsize attribute to calculate\n\ -the buffer length in bytes."); +/*[clinic input] +array.array.append + + v: object + / +Append new value v to the end of the array. +[clinic start generated code]*/ static PyObject * -array_append(arrayobject *self, PyObject *v) +array_array_append(arrayobject *self, PyObject *v) +/*[clinic end generated code: output=745a0669bf8db0e2 input=0b98d9d78e78f0fa]*/ { return ins(self, Py_SIZE(self), v); } -PyDoc_STRVAR(append_doc, -"append(x)\n\ -\n\ -Append new value x to the end of the array."); +/*[clinic input] +array.array.byteswap +Byteswap all items of the array. + +If the items in the array are not 1, 2, 4, or 8 bytes in size, RuntimeError is +raised. +[clinic start generated code]*/ static PyObject * -array_byteswap(arrayobject *self, PyObject *unused) +array_array_byteswap_impl(arrayobject *self) +/*[clinic end generated code: output=5f8236cbdf0d90b5 input=6a85591b950a0186]*/ { char *p; Py_ssize_t i; @@ -1228,14 +1313,15 @@ array_byteswap(arrayobject *self, PyObject *unused) return Py_None; } -PyDoc_STRVAR(byteswap_doc, -"byteswap()\n\ -\n\ -Byteswap all items of the array. If the items in the array are not 1, 2,\n\ -4, or 8 bytes in size, RuntimeError is raised."); +/*[clinic input] +array.array.reverse + +Reverse the order of the items in the array. +[clinic start generated code]*/ static PyObject * -array_reverse(arrayobject *self, PyObject *unused) +array_array_reverse_impl(arrayobject *self) +/*[clinic end generated code: output=c04868b36f6f4089 input=cd904f01b27d966a]*/ { Py_ssize_t itemsize = self->ob_descr->itemsize; char *p, *q; @@ -1261,27 +1347,26 @@ array_reverse(arrayobject *self, PyObject *unused) return Py_None; } -PyDoc_STRVAR(reverse_doc, -"reverse()\n\ -\n\ -Reverse the order of the items in the array."); +/*[clinic input] +array.array.fromfile + f: object + n: Py_ssize_t + / -/* Forward */ -static PyObject *array_frombytes(arrayobject *self, PyObject *args); +Read n objects from the file object f and append them to the end of the array. +[clinic start generated code]*/ static PyObject * -array_fromfile(arrayobject *self, PyObject *args) +array_array_fromfile_impl(arrayobject *self, PyObject *f, Py_ssize_t n) +/*[clinic end generated code: output=ec9f600e10f53510 input=e188afe8e58adf40]*/ { - PyObject *f, *b, *res; + PyObject *args, *b, *res; Py_ssize_t itemsize = self->ob_descr->itemsize; - Py_ssize_t n, nbytes; + Py_ssize_t nbytes; _Py_IDENTIFIER(read); int not_enough_bytes; - if (!PyArg_ParseTuple(args, "On:fromfile", &f, &n)) - return NULL; - if (n < 0) { PyErr_SetString(PyExc_ValueError, "negative count"); return NULL; @@ -1310,7 +1395,7 @@ array_fromfile(arrayobject *self, PyObject *args) if (args == NULL) return NULL; - res = array_frombytes(self, args); + res = array_array_frombytes(self, args); Py_DECREF(args); if (res == NULL) return NULL; @@ -1325,15 +1410,18 @@ array_fromfile(arrayobject *self, PyObject *args) return res; } -PyDoc_STRVAR(fromfile_doc, -"fromfile(f, n)\n\ -\n\ -Read n objects from the file object f and append them to the end of the\n\ -array."); +/*[clinic input] +array.array.tofile + f: object + / + +Write all items (as machine values) to the file object f. +[clinic start generated code]*/ static PyObject * -array_tofile(arrayobject *self, PyObject *f) +array_array_tofile(arrayobject *self, PyObject *f) +/*[clinic end generated code: output=3a2cfa8128df0777 input=b0669a484aab0831]*/ { Py_ssize_t nbytes = Py_SIZE(self) * self->ob_descr->itemsize; /* Write 64K blocks at a time */ @@ -1368,14 +1456,18 @@ array_tofile(arrayobject *self, PyObject *f) return Py_None; } -PyDoc_STRVAR(tofile_doc, -"tofile(f)\n\ -\n\ -Write all items (as machine values) to the file object f."); +/*[clinic input] +array.array.fromlist + list: object + / + +Append items to array from list. +[clinic start generated code]*/ static PyObject * -array_fromlist(arrayobject *self, PyObject *list) +array_array_fromlist(arrayobject *self, PyObject *list) +/*[clinic end generated code: output=26411c2d228a3e3f input=be2605a96c49680f]*/ { Py_ssize_t n; @@ -1402,13 +1494,15 @@ array_fromlist(arrayobject *self, PyObject *list) return Py_None; } -PyDoc_STRVAR(fromlist_doc, -"fromlist(list)\n\ -\n\ -Append items to array from list."); +/*[clinic input] +array.array.tolist + +Convert array to an ordinary list with the same items. +[clinic start generated code]*/ static PyObject * -array_tolist(arrayobject *self, PyObject *unused) +array_array_tolist_impl(arrayobject *self) +/*[clinic end generated code: output=00b60cc9eab8ef89 input=a8d7784a94f86b53]*/ { PyObject *list = PyList_New(Py_SIZE(self)); Py_ssize_t i; @@ -1429,11 +1523,6 @@ error: return NULL; } -PyDoc_STRVAR(tolist_doc, -"tolist() -> list\n\ -\n\ -Convert array to an ordinary list with the same items."); - static PyObject * frombytes(arrayobject *self, Py_buffer *buffer) { @@ -1471,47 +1560,52 @@ frombytes(arrayobject *self, Py_buffer *buffer) return Py_None; } +/*[clinic input] +array.array.fromstring + + buffer: Py_buffer(types='str bytes bytearray buffer') + / + +Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method). + +This method is deprecated. Use frombytes instead. +[clinic start generated code]*/ + static PyObject * -array_fromstring(arrayobject *self, PyObject *args) +array_array_fromstring_impl(arrayobject *self, Py_buffer *buffer) +/*[clinic end generated code: output=31c4baa779df84ce input=1302d94c97696b84]*/ { - Py_buffer buffer; if (PyErr_WarnEx(PyExc_DeprecationWarning, "fromstring() is deprecated. Use frombytes() instead.", 2) != 0) return NULL; - if (!PyArg_ParseTuple(args, "s*:fromstring", &buffer)) - return NULL; - else - return frombytes(self, &buffer); + return frombytes(self, buffer); } -PyDoc_STRVAR(fromstring_doc, -"fromstring(string)\n\ -\n\ -Appends items from the string, interpreting it as an array of machine\n\ -values, as if it had been read from a file using the fromfile() method).\n\ -\n\ -This method is deprecated. Use frombytes instead."); +/*[clinic input] +array.array.frombytes + buffer: Py_buffer + / + +Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method). +[clinic start generated code]*/ static PyObject * -array_frombytes(arrayobject *self, PyObject *args) +array_array_frombytes_impl(arrayobject *self, Py_buffer *buffer) +/*[clinic end generated code: output=d9842c8f7510a516 input=2bbf2b53ebfcc988]*/ { - Py_buffer buffer; - if (!PyArg_ParseTuple(args, "y*:frombytes", &buffer)) - return NULL; - else - return frombytes(self, &buffer); + return frombytes(self, buffer); } -PyDoc_STRVAR(frombytes_doc, -"frombytes(bytestring)\n\ -\n\ -Appends items from the string, interpreting it as an array of machine\n\ -values, as if it had been read from a file using the fromfile() method)."); +/*[clinic input] +array.array.tobytes +Convert the array to an array of machine values and return the bytes representation. +[clinic start generated code]*/ static PyObject * -array_tobytes(arrayobject *self, PyObject *unused) +array_array_tobytes_impl(arrayobject *self) +/*[clinic end generated code: output=87318e4edcdc2bb6 input=90ee495f96de34f5]*/ { if (Py_SIZE(self) <= PY_SSIZE_T_MAX / self->ob_descr->itemsize) { return PyBytes_FromStringAndSize(self->ob_item, @@ -1521,40 +1615,43 @@ array_tobytes(arrayobject *self, PyObject *unused) } } -PyDoc_STRVAR(tobytes_doc, -"tobytes() -> bytes\n\ -\n\ -Convert the array to an array of machine values and return the bytes\n\ -representation."); +/*[clinic input] +array.array.tostring + +Convert the array to an array of machine values and return the bytes representation. +This method is deprecated. Use tobytes instead. +[clinic start generated code]*/ static PyObject * -array_tostring(arrayobject *self, PyObject *unused) +array_array_tostring_impl(arrayobject *self) +/*[clinic end generated code: output=7d6bd92745a2c8f3 input=b6c0ddee7b30457e]*/ { if (PyErr_WarnEx(PyExc_DeprecationWarning, "tostring() is deprecated. Use tobytes() instead.", 2) != 0) return NULL; - return array_tobytes(self, unused); + return array_array_tobytes_impl(self); } -PyDoc_STRVAR(tostring_doc, -"tostring() -> bytes\n\ -\n\ -Convert the array to an array of machine values and return the bytes\n\ -representation.\n\ -\n\ -This method is deprecated. Use tobytes instead."); +/*[clinic input] +array.array.fromunicode + + ustr: Py_UNICODE(length=True) + / +Extends this array with data from the unicode string ustr. + +The array must be a unicode type array; otherwise a ValueError is raised. +Use array.frombytes(ustr.encode(...)) to append Unicode data to an array of +some other type. +[clinic start generated code]*/ static PyObject * -array_fromunicode(arrayobject *self, PyObject *args) +array_array_fromunicode_impl(arrayobject *self, Py_UNICODE *ustr, Py_ssize_clean_t ustr_length) +/*[clinic end generated code: output=3b3f4f133bac725e input=56bcedb5ef70139f]*/ { - Py_UNICODE *ustr; - Py_ssize_t n; char typecode; - if (!PyArg_ParseTuple(args, "u#:fromunicode", &ustr, &n)) - return NULL; typecode = self->ob_descr->typecode; if (typecode != 'u') { PyErr_SetString(PyExc_ValueError, @@ -1562,29 +1659,30 @@ array_fromunicode(arrayobject *self, PyObject *args) "unicode type arrays"); return NULL; } - if (n > 0) { + if (ustr_length > 0) { Py_ssize_t old_size = Py_SIZE(self); - if (array_resize(self, old_size + n) == -1) + if (array_resize(self, old_size + ustr_length) == -1) return NULL; memcpy(self->ob_item + old_size * sizeof(Py_UNICODE), - ustr, n * sizeof(Py_UNICODE)); + ustr, ustr_length * sizeof(Py_UNICODE)); } - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } -PyDoc_STRVAR(fromunicode_doc, -"fromunicode(ustr)\n\ -\n\ -Extends this array with data from the unicode string ustr.\n\ -The array must be a unicode type array; otherwise a ValueError\n\ -is raised. Use array.frombytes(ustr.encode(...)) to\n\ -append Unicode data to an array of some other type."); +/*[clinic input] +array.array.tounicode +Extends this array with data from the unicode string ustr. + +Convert the array to a unicode string. The array must be a unicode type array; +otherwise a ValueError is raised. Use array.tobytes().decode() to obtain a +unicode string from an array of some other type. +[clinic start generated code]*/ static PyObject * -array_tounicode(arrayobject *self, PyObject *unused) +array_array_tounicode_impl(arrayobject *self) +/*[clinic end generated code: output=08e442378336e1ef input=127242eebe70b66d]*/ { char typecode; typecode = self->ob_descr->typecode; @@ -1596,28 +1694,21 @@ array_tounicode(arrayobject *self, PyObject *unused) return PyUnicode_FromUnicode((Py_UNICODE *) self->ob_item, Py_SIZE(self)); } -PyDoc_STRVAR(tounicode_doc, -"tounicode() -> unicode\n\ -\n\ -Convert the array to a unicode string. The array must be\n\ -a unicode type array; otherwise a ValueError is raised. Use\n\ -array.tobytes().decode() to obtain a unicode string from\n\ -an array of some other type."); +/*[clinic input] +array.array.__sizeof__ +Size of the array in memory, in bytes. +[clinic start generated code]*/ static PyObject * -array_sizeof(arrayobject *self, PyObject *unused) +array_array___sizeof___impl(arrayobject *self) +/*[clinic end generated code: output=d8e1c61ebbe3eaed input=805586565bf2b3c6]*/ { Py_ssize_t res; res = sizeof(arrayobject) + self->allocated * self->ob_descr->itemsize; return PyLong_FromSsize_t(res); } -PyDoc_STRVAR(sizeof_doc, -"__sizeof__() -> int\n\ -\n\ -Size of the array in memory, in bytes."); - /*********************** Pickling support ************************/ @@ -1835,20 +1926,26 @@ make_array(PyTypeObject *arraytype, char typecode, PyObject *items) * This functions is a special constructor used when unpickling an array. It * provides a portable way to rebuild an array from its memory representation. */ +/*[clinic input] +array._array_reconstructor + + arraytype: object(type="PyTypeObject *") + typecode: int(types='str') + mformat_code: int(type="enum machine_format_code") + items: object + / + +Internal. Used for pickling support. +[clinic start generated code]*/ + static PyObject * -array_reconstructor(PyObject *self, PyObject *args) +array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, int typecode, int mformat_code, PyObject *items) +/*[clinic end generated code: output=a0a4ab61c2fbc17a input=450d59a5373c4eea]*/ { - PyTypeObject *arraytype; - PyObject *items; PyObject *converted_items; PyObject *result; - int typecode; - enum machine_format_code mformat_code; struct arraydescr *descr; - - if (!PyArg_ParseTuple(args, "OCiO:array._array_reconstructor", - &arraytype, &typecode, &mformat_code, &items)) - return NULL; + enum machine_format_code mformat_code_enum = mformat_code; if (!PyType_Check(arraytype)) { PyErr_Format(PyExc_TypeError, @@ -1871,8 +1968,8 @@ array_reconstructor(PyObject *self, PyObject *args) "second argument must be a valid type code"); return NULL; } - if (mformat_code < MACHINE_FORMAT_CODE_MIN || - mformat_code > MACHINE_FORMAT_CODE_MAX) { + if (mformat_code_enum < MACHINE_FORMAT_CODE_MIN || + mformat_code_enum > MACHINE_FORMAT_CODE_MAX) { PyErr_SetString(PyExc_ValueError, "third argument must be a valid machine format code."); return NULL; @@ -1885,8 +1982,8 @@ array_reconstructor(PyObject *self, PyObject *args) } /* Fast path: No decoding has to be done. */ - if (mformat_code == typecode_to_mformat_code((char)typecode) || - mformat_code == UNKNOWN_FORMAT) { + if (mformat_code_enum == typecode_to_mformat_code((char)typecode) || + mformat_code_enum == UNKNOWN_FORMAT) { return make_array(arraytype, (char)typecode, items); } @@ -1895,16 +1992,16 @@ array_reconstructor(PyObject *self, PyObject *args) * object is architecturally different from the one that pickled the * array. */ - if (Py_SIZE(items) % mformat_descriptors[mformat_code].size != 0) { + if (Py_SIZE(items) % mformat_descriptors[mformat_code_enum].size != 0) { PyErr_SetString(PyExc_ValueError, "string length not a multiple of item size"); return NULL; } - switch (mformat_code) { + switch (mformat_code_enum) { case IEEE_754_FLOAT_LE: case IEEE_754_FLOAT_BE: { int i; - int le = (mformat_code == IEEE_754_FLOAT_LE) ? 1 : 0; + int le = (mformat_code_enum == IEEE_754_FLOAT_LE) ? 1 : 0; Py_ssize_t itemcount = Py_SIZE(items) / 4; const unsigned char *memstr = (unsigned char *)PyBytes_AS_STRING(items); @@ -1926,7 +2023,7 @@ array_reconstructor(PyObject *self, PyObject *args) case IEEE_754_DOUBLE_LE: case IEEE_754_DOUBLE_BE: { int i; - int le = (mformat_code == IEEE_754_DOUBLE_LE) ? 1 : 0; + int le = (mformat_code_enum == IEEE_754_DOUBLE_LE) ? 1 : 0; Py_ssize_t itemcount = Py_SIZE(items) / 8; const unsigned char *memstr = (unsigned char *)PyBytes_AS_STRING(items); @@ -1947,7 +2044,7 @@ array_reconstructor(PyObject *self, PyObject *args) } case UTF16_LE: case UTF16_BE: { - int byteorder = (mformat_code == UTF16_LE) ? -1 : 1; + int byteorder = (mformat_code_enum == UTF16_LE) ? -1 : 1; converted_items = PyUnicode_DecodeUTF16( PyBytes_AS_STRING(items), Py_SIZE(items), "strict", &byteorder); @@ -1957,7 +2054,7 @@ array_reconstructor(PyObject *self, PyObject *args) } case UTF32_LE: case UTF32_BE: { - int byteorder = (mformat_code == UTF32_LE) ? -1 : 1; + int byteorder = (mformat_code_enum == UTF32_LE) ? -1 : 1; converted_items = PyUnicode_DecodeUTF32( PyBytes_AS_STRING(items), Py_SIZE(items), "strict", &byteorder); @@ -1982,7 +2079,7 @@ array_reconstructor(PyObject *self, PyObject *args) case SIGNED_INT64_BE: { int i; const struct mformatdescr mf_descr = - mformat_descriptors[mformat_code]; + mformat_descriptors[mformat_code_enum]; Py_ssize_t itemcount = Py_SIZE(items) / mf_descr.size; const unsigned char *memstr = (unsigned char *)PyBytes_AS_STRING(items); @@ -2038,13 +2135,23 @@ array_reconstructor(PyObject *self, PyObject *args) return result; } +/*[clinic input] +array.array.__reduce_ex__ + + value: object + / + +Return state information for pickling. +[clinic start generated code]*/ + static PyObject * -array_reduce_ex(arrayobject *array, PyObject *value) +array_array___reduce_ex__(arrayobject *self, PyObject *value) +/*[clinic end generated code: output=051e0a6175d0eddb input=c36c3f85de7df6cd]*/ { PyObject *dict; PyObject *result; PyObject *array_str; - int typecode = array->ob_descr->typecode; + int typecode = self->ob_descr->typecode; int mformat_code; static PyObject *array_reconstructor = NULL; long protocol; @@ -2072,7 +2179,7 @@ array_reduce_ex(arrayobject *array, PyObject *value) if (protocol == -1 && PyErr_Occurred()) return NULL; - dict = _PyObject_GetAttrId((PyObject *)array, &PyId___dict__); + dict = _PyObject_GetAttrId((PyObject *)self, &PyId___dict__); if (dict == NULL) { if (!PyErr_ExceptionMatches(PyExc_AttributeError)) return NULL; @@ -2095,32 +2202,30 @@ array_reduce_ex(arrayobject *array, PyObject *value) * coercing unicode objects to bytes in array_reconstructor. */ PyObject *list; - list = array_tolist(array, NULL); + list = array_array_tolist_impl(self); if (list == NULL) { Py_DECREF(dict); return NULL; } result = Py_BuildValue( - "O(CO)O", Py_TYPE(array), typecode, list, dict); + "O(CO)O", Py_TYPE(self), typecode, list, dict); Py_DECREF(list); Py_DECREF(dict); return result; } - array_str = array_tobytes(array, NULL); + array_str = array_array_tobytes_impl(self); if (array_str == NULL) { Py_DECREF(dict); return NULL; } result = Py_BuildValue( - "O(OCiN)O", array_reconstructor, Py_TYPE(array), typecode, + "O(OCiN)O", array_reconstructor, Py_TYPE(self), typecode, mformat_code, array_str, dict); Py_DECREF(dict); return result; } -PyDoc_STRVAR(reduce_doc, "Return state information for pickling."); - static PyObject * array_get_typecode(arrayobject *a, void *closure) { @@ -2143,55 +2248,31 @@ static PyGetSetDef array_getsets [] = { }; static PyMethodDef array_methods[] = { - {"append", (PyCFunction)array_append, METH_O, - append_doc}, - {"buffer_info", (PyCFunction)array_buffer_info, METH_NOARGS, - buffer_info_doc}, - {"byteswap", (PyCFunction)array_byteswap, METH_NOARGS, - byteswap_doc}, - {"__copy__", (PyCFunction)array_copy, METH_NOARGS, - copy_doc}, - {"count", (PyCFunction)array_count, METH_O, - count_doc}, - {"__deepcopy__", (PyCFunction)array_copy, METH_O, - copy_doc}, - {"extend", (PyCFunction)array_extend, METH_O, - extend_doc}, - {"fromfile", (PyCFunction)array_fromfile, METH_VARARGS, - fromfile_doc}, - {"fromlist", (PyCFunction)array_fromlist, METH_O, - fromlist_doc}, - {"fromstring", (PyCFunction)array_fromstring, METH_VARARGS, - fromstring_doc}, - {"frombytes", (PyCFunction)array_frombytes, METH_VARARGS, - frombytes_doc}, - {"fromunicode", (PyCFunction)array_fromunicode, METH_VARARGS, - fromunicode_doc}, - {"index", (PyCFunction)array_index, METH_O, - index_doc}, - {"insert", (PyCFunction)array_insert, METH_VARARGS, - insert_doc}, - {"pop", (PyCFunction)array_pop, METH_VARARGS, - pop_doc}, - {"__reduce_ex__", (PyCFunction)array_reduce_ex, METH_O, - reduce_doc}, - {"remove", (PyCFunction)array_remove, METH_O, - remove_doc}, - {"reverse", (PyCFunction)array_reverse, METH_NOARGS, - reverse_doc}, - {"tofile", (PyCFunction)array_tofile, METH_O, - tofile_doc}, - {"tolist", (PyCFunction)array_tolist, METH_NOARGS, - tolist_doc}, - {"tostring", (PyCFunction)array_tostring, METH_NOARGS, - tostring_doc}, - {"tobytes", (PyCFunction)array_tobytes, METH_NOARGS, - tobytes_doc}, - {"tounicode", (PyCFunction)array_tounicode, METH_NOARGS, - tounicode_doc}, - {"__sizeof__", (PyCFunction)array_sizeof, METH_NOARGS, - sizeof_doc}, - {NULL, NULL} /* sentinel */ + ARRAY_ARRAY_APPEND_METHODDEF + ARRAY_ARRAY_BUFFER_INFO_METHODDEF + ARRAY_ARRAY_BYTESWAP_METHODDEF + ARRAY_ARRAY___COPY___METHODDEF + ARRAY_ARRAY_COUNT_METHODDEF + ARRAY_ARRAY___DEEPCOPY___METHODDEF + ARRAY_ARRAY_EXTEND_METHODDEF + ARRAY_ARRAY_FROMFILE_METHODDEF + ARRAY_ARRAY_FROMLIST_METHODDEF + ARRAY_ARRAY_FROMSTRING_METHODDEF + ARRAY_ARRAY_FROMBYTES_METHODDEF + ARRAY_ARRAY_FROMUNICODE_METHODDEF + ARRAY_ARRAY_INDEX_METHODDEF + ARRAY_ARRAY_INSERT_METHODDEF + ARRAY_ARRAY_POP_METHODDEF + ARRAY_ARRAY___REDUCE_EX___METHODDEF + ARRAY_ARRAY_REMOVE_METHODDEF + ARRAY_ARRAY_REVERSE_METHODDEF + ARRAY_ARRAY_TOFILE_METHODDEF + ARRAY_ARRAY_TOLIST_METHODDEF + ARRAY_ARRAY_TOSTRING_METHODDEF + ARRAY_ARRAY_TOBYTES_METHODDEF + ARRAY_ARRAY_TOUNICODE_METHODDEF + ARRAY_ARRAY___SIZEOF___METHODDEF + {NULL, NULL} /* sentinel */ }; static PyObject * @@ -2207,9 +2288,9 @@ array_repr(arrayobject *a) return PyUnicode_FromFormat("array('%c')", (int)typecode); } if (typecode == 'u') { - v = array_tounicode(a, NULL); + v = array_array_tounicode_impl(a); } else { - v = array_tolist(a, NULL); + v = array_array_tolist_impl(a); } if (v == NULL) return NULL; @@ -2592,8 +2673,8 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds) Py_DECREF(a); return NULL; } - v = array_frombytes((arrayobject *)a, - t_initial); + v = array_array_frombytes((arrayobject *)a, + t_initial); Py_DECREF(t_initial); if (v == NULL) { Py_DECREF(a); @@ -2766,16 +2847,10 @@ static PyTypeObject Arraytype = { /*********************** Array Iterator **************************/ -typedef struct { - PyObject_HEAD - Py_ssize_t index; - arrayobject *ao; - PyObject * (*getitem)(struct arrayobject *, Py_ssize_t); -} arrayiterobject; - -static PyTypeObject PyArrayIter_Type; - -#define PyArrayIter_Check(op) PyObject_TypeCheck(op, &PyArrayIter_Type) +/*[clinic input] +class array.arrayiterator "arrayiterobject *" "&PyArrayIter_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=5aefd2d74d8c8e30]*/ static PyObject * array_iter(arrayobject *ao) @@ -2823,33 +2898,47 @@ arrayiter_traverse(arrayiterobject *it, visitproc visit, void *arg) return 0; } +/*[clinic input] +array.arrayiterator.__reduce__ + +Return state information for pickling. +[clinic start generated code]*/ + static PyObject * -arrayiter_reduce(arrayiterobject *it) +array_arrayiterator___reduce___impl(arrayiterobject *self) +/*[clinic end generated code: output=7898a52e8e66e016 input=a062ea1e9951417a]*/ { return Py_BuildValue("N(O)n", _PyObject_GetBuiltin("iter"), - it->ao, it->index); + self->ao, self->index); } +/*[clinic input] +array.arrayiterator.__setstate__ + + state: object + / + +Set state information for unpickling. +[clinic start generated code]*/ + static PyObject * -arrayiter_setstate(arrayiterobject *it, PyObject *state) +array_arrayiterator___setstate__(arrayiterobject *self, PyObject *state) +/*[clinic end generated code: output=397da9904e443cbe input=f47d5ceda19e787b]*/ { Py_ssize_t index = PyLong_AsSsize_t(state); if (index == -1 && PyErr_Occurred()) return NULL; if (index < 0) index = 0; - else if (index > Py_SIZE(it->ao)) - index = Py_SIZE(it->ao); /* iterator exhausted */ - it->index = index; + else if (index > Py_SIZE(self->ao)) + index = Py_SIZE(self->ao); /* iterator exhausted */ + self->index = index; Py_RETURN_NONE; } -PyDoc_STRVAR(setstate_doc, "Set state information for unpickling."); static PyMethodDef arrayiter_methods[] = { - {"__reduce__", (PyCFunction)arrayiter_reduce, METH_NOARGS, - reduce_doc}, - {"__setstate__", (PyCFunction)arrayiter_setstate, METH_O, - setstate_doc}, + ARRAY_ARRAYITERATOR___REDUCE___METHODDEF + ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF {NULL, NULL} /* sentinel */ }; @@ -2890,8 +2979,7 @@ static PyTypeObject PyArrayIter_Type = { /* No functions in array module. */ static PyMethodDef a_methods[] = { - {"_array_reconstructor", array_reconstructor, METH_VARARGS, - PyDoc_STR("Internal. Used for pickling support.")}, + ARRAY__ARRAY_RECONSTRUCTOR_METHODDEF {NULL, NULL, 0, NULL} /* Sentinel */ }; diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h new file mode 100644 index 0000000000..51b9a5499f --- /dev/null +++ b/Modules/clinic/arraymodule.c.h @@ -0,0 +1,505 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(array_array___copy____doc__, +"__copy__($self, /)\n" +"--\n" +"\n" +"Return a copy of the array."); + +#define ARRAY_ARRAY___COPY___METHODDEF \ + {"__copy__", (PyCFunction)array_array___copy__, METH_NOARGS, array_array___copy____doc__}, + +static PyObject * +array_array___copy___impl(arrayobject *self); + +static PyObject * +array_array___copy__(arrayobject *self, PyObject *Py_UNUSED(ignored)) +{ + return array_array___copy___impl(self); +} + +PyDoc_STRVAR(array_array___deepcopy____doc__, +"__deepcopy__($self, unused, /)\n" +"--\n" +"\n" +"Return a copy of the array."); + +#define ARRAY_ARRAY___DEEPCOPY___METHODDEF \ + {"__deepcopy__", (PyCFunction)array_array___deepcopy__, METH_O, array_array___deepcopy____doc__}, + +PyDoc_STRVAR(array_array_count__doc__, +"count($self, v, /)\n" +"--\n" +"\n" +"Return number of occurrences of v in the array."); + +#define ARRAY_ARRAY_COUNT_METHODDEF \ + {"count", (PyCFunction)array_array_count, METH_O, array_array_count__doc__}, + +PyDoc_STRVAR(array_array_index__doc__, +"index($self, v, /)\n" +"--\n" +"\n" +"Return index of first occurrence of v in the array."); + +#define ARRAY_ARRAY_INDEX_METHODDEF \ + {"index", (PyCFunction)array_array_index, METH_O, array_array_index__doc__}, + +PyDoc_STRVAR(array_array_remove__doc__, +"remove($self, v, /)\n" +"--\n" +"\n" +"Remove the first occurrence of v in the array."); + +#define ARRAY_ARRAY_REMOVE_METHODDEF \ + {"remove", (PyCFunction)array_array_remove, METH_O, array_array_remove__doc__}, + +PyDoc_STRVAR(array_array_pop__doc__, +"pop($self, i=-1, /)\n" +"--\n" +"\n" +"Return the i-th element and delete it from the array.\n" +"\n" +"i defaults to -1."); + +#define ARRAY_ARRAY_POP_METHODDEF \ + {"pop", (PyCFunction)array_array_pop, METH_VARARGS, array_array_pop__doc__}, + +static PyObject * +array_array_pop_impl(arrayobject *self, Py_ssize_t i); + +static PyObject * +array_array_pop(arrayobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t i = -1; + + if (!PyArg_ParseTuple(args, + "|n:pop", + &i)) + goto exit; + return_value = array_array_pop_impl(self, i); + +exit: + return return_value; +} + +PyDoc_STRVAR(array_array_extend__doc__, +"extend($self, bb, /)\n" +"--\n" +"\n" +"Append items to the end of the array."); + +#define ARRAY_ARRAY_EXTEND_METHODDEF \ + {"extend", (PyCFunction)array_array_extend, METH_O, array_array_extend__doc__}, + +PyDoc_STRVAR(array_array_insert__doc__, +"insert($self, i, v, /)\n" +"--\n" +"\n" +"Insert a new item v into the array before position i."); + +#define ARRAY_ARRAY_INSERT_METHODDEF \ + {"insert", (PyCFunction)array_array_insert, METH_VARARGS, array_array_insert__doc__}, + +static PyObject * +array_array_insert_impl(arrayobject *self, Py_ssize_t i, PyObject *v); + +static PyObject * +array_array_insert(arrayobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t i; + PyObject *v; + + if (!PyArg_ParseTuple(args, + "nO:insert", + &i, &v)) + goto exit; + return_value = array_array_insert_impl(self, i, v); + +exit: + return return_value; +} + +PyDoc_STRVAR(array_array_buffer_info__doc__, +"buffer_info($self, /)\n" +"--\n" +"\n" +"Return a tuple (address, length) giving the current memory address and the length in items of the buffer used to hold array\'s contents.\n" +"\n" +"The length should be multiplied by the itemsize attribute to calculate\n" +"the buffer length in bytes."); + +#define ARRAY_ARRAY_BUFFER_INFO_METHODDEF \ + {"buffer_info", (PyCFunction)array_array_buffer_info, METH_NOARGS, array_array_buffer_info__doc__}, + +static PyObject * +array_array_buffer_info_impl(arrayobject *self); + +static PyObject * +array_array_buffer_info(arrayobject *self, PyObject *Py_UNUSED(ignored)) +{ + return array_array_buffer_info_impl(self); +} + +PyDoc_STRVAR(array_array_append__doc__, +"append($self, v, /)\n" +"--\n" +"\n" +"Append new value v to the end of the array."); + +#define ARRAY_ARRAY_APPEND_METHODDEF \ + {"append", (PyCFunction)array_array_append, METH_O, array_array_append__doc__}, + +PyDoc_STRVAR(array_array_byteswap__doc__, +"byteswap($self, /)\n" +"--\n" +"\n" +"Byteswap all items of the array.\n" +"\n" +"If the items in the array are not 1, 2, 4, or 8 bytes in size, RuntimeError is\n" +"raised."); + +#define ARRAY_ARRAY_BYTESWAP_METHODDEF \ + {"byteswap", (PyCFunction)array_array_byteswap, METH_NOARGS, array_array_byteswap__doc__}, + +static PyObject * +array_array_byteswap_impl(arrayobject *self); + +static PyObject * +array_array_byteswap(arrayobject *self, PyObject *Py_UNUSED(ignored)) +{ + return array_array_byteswap_impl(self); +} + +PyDoc_STRVAR(array_array_reverse__doc__, +"reverse($self, /)\n" +"--\n" +"\n" +"Reverse the order of the items in the array."); + +#define ARRAY_ARRAY_REVERSE_METHODDEF \ + {"reverse", (PyCFunction)array_array_reverse, METH_NOARGS, array_array_reverse__doc__}, + +static PyObject * +array_array_reverse_impl(arrayobject *self); + +static PyObject * +array_array_reverse(arrayobject *self, PyObject *Py_UNUSED(ignored)) +{ + return array_array_reverse_impl(self); +} + +PyDoc_STRVAR(array_array_fromfile__doc__, +"fromfile($self, f, n, /)\n" +"--\n" +"\n" +"Read n objects from the file object f and append them to the end of the array."); + +#define ARRAY_ARRAY_FROMFILE_METHODDEF \ + {"fromfile", (PyCFunction)array_array_fromfile, METH_VARARGS, array_array_fromfile__doc__}, + +static PyObject * +array_array_fromfile_impl(arrayobject *self, PyObject *f, Py_ssize_t n); + +static PyObject * +array_array_fromfile(arrayobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *f; + Py_ssize_t n; + + if (!PyArg_ParseTuple(args, + "On:fromfile", + &f, &n)) + goto exit; + return_value = array_array_fromfile_impl(self, f, n); + +exit: + return return_value; +} + +PyDoc_STRVAR(array_array_tofile__doc__, +"tofile($self, f, /)\n" +"--\n" +"\n" +"Write all items (as machine values) to the file object f."); + +#define ARRAY_ARRAY_TOFILE_METHODDEF \ + {"tofile", (PyCFunction)array_array_tofile, METH_O, array_array_tofile__doc__}, + +PyDoc_STRVAR(array_array_fromlist__doc__, +"fromlist($self, list, /)\n" +"--\n" +"\n" +"Append items to array from list."); + +#define ARRAY_ARRAY_FROMLIST_METHODDEF \ + {"fromlist", (PyCFunction)array_array_fromlist, METH_O, array_array_fromlist__doc__}, + +PyDoc_STRVAR(array_array_tolist__doc__, +"tolist($self, /)\n" +"--\n" +"\n" +"Convert array to an ordinary list with the same items."); + +#define ARRAY_ARRAY_TOLIST_METHODDEF \ + {"tolist", (PyCFunction)array_array_tolist, METH_NOARGS, array_array_tolist__doc__}, + +static PyObject * +array_array_tolist_impl(arrayobject *self); + +static PyObject * +array_array_tolist(arrayobject *self, PyObject *Py_UNUSED(ignored)) +{ + return array_array_tolist_impl(self); +} + +PyDoc_STRVAR(array_array_fromstring__doc__, +"fromstring($self, buffer, /)\n" +"--\n" +"\n" +"Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method).\n" +"\n" +"This method is deprecated. Use frombytes instead."); + +#define ARRAY_ARRAY_FROMSTRING_METHODDEF \ + {"fromstring", (PyCFunction)array_array_fromstring, METH_VARARGS, array_array_fromstring__doc__}, + +static PyObject * +array_array_fromstring_impl(arrayobject *self, Py_buffer *buffer); + +static PyObject * +array_array_fromstring(arrayobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer buffer = {NULL, NULL}; + + if (!PyArg_ParseTuple(args, + "s*:fromstring", + &buffer)) + goto exit; + return_value = array_array_fromstring_impl(self, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +PyDoc_STRVAR(array_array_frombytes__doc__, +"frombytes($self, buffer, /)\n" +"--\n" +"\n" +"Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method)."); + +#define ARRAY_ARRAY_FROMBYTES_METHODDEF \ + {"frombytes", (PyCFunction)array_array_frombytes, METH_VARARGS, array_array_frombytes__doc__}, + +static PyObject * +array_array_frombytes_impl(arrayobject *self, Py_buffer *buffer); + +static PyObject * +array_array_frombytes(arrayobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer buffer = {NULL, NULL}; + + if (!PyArg_ParseTuple(args, + "y*:frombytes", + &buffer)) + goto exit; + return_value = array_array_frombytes_impl(self, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +PyDoc_STRVAR(array_array_tobytes__doc__, +"tobytes($self, /)\n" +"--\n" +"\n" +"Convert the array to an array of machine values and return the bytes representation."); + +#define ARRAY_ARRAY_TOBYTES_METHODDEF \ + {"tobytes", (PyCFunction)array_array_tobytes, METH_NOARGS, array_array_tobytes__doc__}, + +static PyObject * +array_array_tobytes_impl(arrayobject *self); + +static PyObject * +array_array_tobytes(arrayobject *self, PyObject *Py_UNUSED(ignored)) +{ + return array_array_tobytes_impl(self); +} + +PyDoc_STRVAR(array_array_tostring__doc__, +"tostring($self, /)\n" +"--\n" +"\n" +"Convert the array to an array of machine values and return the bytes representation.\n" +"\n" +"This method is deprecated. Use tobytes instead."); + +#define ARRAY_ARRAY_TOSTRING_METHODDEF \ + {"tostring", (PyCFunction)array_array_tostring, METH_NOARGS, array_array_tostring__doc__}, + +static PyObject * +array_array_tostring_impl(arrayobject *self); + +static PyObject * +array_array_tostring(arrayobject *self, PyObject *Py_UNUSED(ignored)) +{ + return array_array_tostring_impl(self); +} + +PyDoc_STRVAR(array_array_fromunicode__doc__, +"fromunicode($self, ustr, /)\n" +"--\n" +"\n" +"Extends this array with data from the unicode string ustr.\n" +"\n" +"The array must be a unicode type array; otherwise a ValueError is raised.\n" +"Use array.frombytes(ustr.encode(...)) to append Unicode data to an array of\n" +"some other type."); + +#define ARRAY_ARRAY_FROMUNICODE_METHODDEF \ + {"fromunicode", (PyCFunction)array_array_fromunicode, METH_VARARGS, array_array_fromunicode__doc__}, + +static PyObject * +array_array_fromunicode_impl(arrayobject *self, Py_UNICODE *ustr, Py_ssize_clean_t ustr_length); + +static PyObject * +array_array_fromunicode(arrayobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_UNICODE *ustr; + Py_ssize_clean_t ustr_length; + + if (!PyArg_ParseTuple(args, + "u#:fromunicode", + &ustr, &ustr_length)) + goto exit; + return_value = array_array_fromunicode_impl(self, ustr, ustr_length); + +exit: + return return_value; +} + +PyDoc_STRVAR(array_array_tounicode__doc__, +"tounicode($self, /)\n" +"--\n" +"\n" +"Extends this array with data from the unicode string ustr.\n" +"\n" +"Convert the array to a unicode string. The array must be a unicode type array;\n" +"otherwise a ValueError is raised. Use array.tobytes().decode() to obtain a\n" +"unicode string from an array of some other type."); + +#define ARRAY_ARRAY_TOUNICODE_METHODDEF \ + {"tounicode", (PyCFunction)array_array_tounicode, METH_NOARGS, array_array_tounicode__doc__}, + +static PyObject * +array_array_tounicode_impl(arrayobject *self); + +static PyObject * +array_array_tounicode(arrayobject *self, PyObject *Py_UNUSED(ignored)) +{ + return array_array_tounicode_impl(self); +} + +PyDoc_STRVAR(array_array___sizeof____doc__, +"__sizeof__($self, /)\n" +"--\n" +"\n" +"Size of the array in memory, in bytes."); + +#define ARRAY_ARRAY___SIZEOF___METHODDEF \ + {"__sizeof__", (PyCFunction)array_array___sizeof__, METH_NOARGS, array_array___sizeof____doc__}, + +static PyObject * +array_array___sizeof___impl(arrayobject *self); + +static PyObject * +array_array___sizeof__(arrayobject *self, PyObject *Py_UNUSED(ignored)) +{ + return array_array___sizeof___impl(self); +} + +PyDoc_STRVAR(array__array_reconstructor__doc__, +"_array_reconstructor($module, arraytype, typecode, mformat_code, items,\n" +" /)\n" +"--\n" +"\n" +"Internal. Used for pickling support."); + +#define ARRAY__ARRAY_RECONSTRUCTOR_METHODDEF \ + {"_array_reconstructor", (PyCFunction)array__array_reconstructor, METH_VARARGS, array__array_reconstructor__doc__}, + +static PyObject * +array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, int typecode, int mformat_code, PyObject *items); + +static PyObject * +array__array_reconstructor(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyTypeObject *arraytype; + int typecode; + int mformat_code; + PyObject *items; + + if (!PyArg_ParseTuple(args, + "OCiO:_array_reconstructor", + &arraytype, &typecode, &mformat_code, &items)) + goto exit; + return_value = array__array_reconstructor_impl(module, arraytype, typecode, mformat_code, items); + +exit: + return return_value; +} + +PyDoc_STRVAR(array_array___reduce_ex____doc__, +"__reduce_ex__($self, value, /)\n" +"--\n" +"\n" +"Return state information for pickling."); + +#define ARRAY_ARRAY___REDUCE_EX___METHODDEF \ + {"__reduce_ex__", (PyCFunction)array_array___reduce_ex__, METH_O, array_array___reduce_ex____doc__}, + +PyDoc_STRVAR(array_arrayiterator___reduce____doc__, +"__reduce__($self, /)\n" +"--\n" +"\n" +"Return state information for pickling."); + +#define ARRAY_ARRAYITERATOR___REDUCE___METHODDEF \ + {"__reduce__", (PyCFunction)array_arrayiterator___reduce__, METH_NOARGS, array_arrayiterator___reduce____doc__}, + +static PyObject * +array_arrayiterator___reduce___impl(arrayiterobject *self); + +static PyObject * +array_arrayiterator___reduce__(arrayiterobject *self, PyObject *Py_UNUSED(ignored)) +{ + return array_arrayiterator___reduce___impl(self); +} + +PyDoc_STRVAR(array_arrayiterator___setstate____doc__, +"__setstate__($self, state, /)\n" +"--\n" +"\n" +"Set state information for unpickling."); + +#define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ + {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, +/*[clinic end generated code: output=dff8eae01f0ab208 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 826b9a9b44c797aa39eb87fb306a212c93deed22 Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Mon, 13 Oct 2014 10:39:41 +0100 Subject: Issue #22615: Argument Clinic now supports the "type" argument for the int converter. This permits using the int converter with enums and typedefs. --- Modules/arraymodule.c | 111 +++++++++++++++++++++-------------------- Modules/clinic/arraymodule.c.h | 6 +-- 2 files changed, 60 insertions(+), 57 deletions(-) (limited to 'Modules') diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index f15571da21..b7ef702111 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -59,7 +59,50 @@ static PyTypeObject PyArrayIter_Type; #define PyArrayIter_Check(op) PyObject_TypeCheck(op, &PyArrayIter_Type) -/* Must come after arrayobject and arrayiterobject definitions. */ +enum machine_format_code { + UNKNOWN_FORMAT = -1, + /* UNKNOWN_FORMAT is used to indicate that the machine format for an + * array type code cannot be interpreted. When this occurs, a list of + * Python objects is used to represent the content of the array + * instead of using the memory content of the array directly. In that + * case, the array_reconstructor mechanism is bypassed completely, and + * the standard array constructor is used instead. + * + * This is will most likely occur when the machine doesn't use IEEE + * floating-point numbers. + */ + + UNSIGNED_INT8 = 0, + SIGNED_INT8 = 1, + UNSIGNED_INT16_LE = 2, + UNSIGNED_INT16_BE = 3, + SIGNED_INT16_LE = 4, + SIGNED_INT16_BE = 5, + UNSIGNED_INT32_LE = 6, + UNSIGNED_INT32_BE = 7, + SIGNED_INT32_LE = 8, + SIGNED_INT32_BE = 9, + UNSIGNED_INT64_LE = 10, + UNSIGNED_INT64_BE = 11, + SIGNED_INT64_LE = 12, + SIGNED_INT64_BE = 13, + IEEE_754_FLOAT_LE = 14, + IEEE_754_FLOAT_BE = 15, + IEEE_754_DOUBLE_LE = 16, + IEEE_754_DOUBLE_BE = 17, + UTF16_LE = 18, + UTF16_BE = 19, + UTF32_LE = 20, + UTF32_BE = 21 +}; +#define MACHINE_FORMAT_CODE_MIN 0 +#define MACHINE_FORMAT_CODE_MAX 21 + + +/* + * Must come after arrayobject, arrayiterobject, + * and enum machine_code_type definitions. + */ #include "clinic/arraymodule.c.h" #define array_Check(op) PyObject_TypeCheck(op, &Arraytype) @@ -1712,45 +1755,6 @@ array_array___sizeof___impl(arrayobject *self) /*********************** Pickling support ************************/ -enum machine_format_code { - UNKNOWN_FORMAT = -1, - /* UNKNOWN_FORMAT is used to indicate that the machine format for an - * array type code cannot be interpreted. When this occurs, a list of - * Python objects is used to represent the content of the array - * instead of using the memory content of the array directly. In that - * case, the array_reconstructor mechanism is bypassed completely, and - * the standard array constructor is used instead. - * - * This is will most likely occur when the machine doesn't use IEEE - * floating-point numbers. - */ - - UNSIGNED_INT8 = 0, - SIGNED_INT8 = 1, - UNSIGNED_INT16_LE = 2, - UNSIGNED_INT16_BE = 3, - SIGNED_INT16_LE = 4, - SIGNED_INT16_BE = 5, - UNSIGNED_INT32_LE = 6, - UNSIGNED_INT32_BE = 7, - SIGNED_INT32_LE = 8, - SIGNED_INT32_BE = 9, - UNSIGNED_INT64_LE = 10, - UNSIGNED_INT64_BE = 11, - SIGNED_INT64_LE = 12, - SIGNED_INT64_BE = 13, - IEEE_754_FLOAT_LE = 14, - IEEE_754_FLOAT_BE = 15, - IEEE_754_DOUBLE_LE = 16, - IEEE_754_DOUBLE_BE = 17, - UTF16_LE = 18, - UTF16_BE = 19, - UTF32_LE = 20, - UTF32_BE = 21 -}; -#define MACHINE_FORMAT_CODE_MIN 0 -#define MACHINE_FORMAT_CODE_MAX 21 - static const struct mformatdescr { size_t size; int is_signed; @@ -1939,13 +1943,12 @@ Internal. Used for pickling support. [clinic start generated code]*/ static PyObject * -array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, int typecode, int mformat_code, PyObject *items) -/*[clinic end generated code: output=a0a4ab61c2fbc17a input=450d59a5373c4eea]*/ +array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items) +/*[clinic end generated code: output=c51081ec91caf7e9 input=f72492708c0a1d50]*/ { PyObject *converted_items; PyObject *result; struct arraydescr *descr; - enum machine_format_code mformat_code_enum = mformat_code; if (!PyType_Check(arraytype)) { PyErr_Format(PyExc_TypeError, @@ -1968,8 +1971,8 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, in "second argument must be a valid type code"); return NULL; } - if (mformat_code_enum < MACHINE_FORMAT_CODE_MIN || - mformat_code_enum > MACHINE_FORMAT_CODE_MAX) { + if (mformat_code < MACHINE_FORMAT_CODE_MIN || + mformat_code > MACHINE_FORMAT_CODE_MAX) { PyErr_SetString(PyExc_ValueError, "third argument must be a valid machine format code."); return NULL; @@ -1982,8 +1985,8 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, in } /* Fast path: No decoding has to be done. */ - if (mformat_code_enum == typecode_to_mformat_code((char)typecode) || - mformat_code_enum == UNKNOWN_FORMAT) { + if (mformat_code == typecode_to_mformat_code((char)typecode) || + mformat_code == UNKNOWN_FORMAT) { return make_array(arraytype, (char)typecode, items); } @@ -1992,16 +1995,16 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, in * object is architecturally different from the one that pickled the * array. */ - if (Py_SIZE(items) % mformat_descriptors[mformat_code_enum].size != 0) { + if (Py_SIZE(items) % mformat_descriptors[mformat_code].size != 0) { PyErr_SetString(PyExc_ValueError, "string length not a multiple of item size"); return NULL; } - switch (mformat_code_enum) { + switch (mformat_code) { case IEEE_754_FLOAT_LE: case IEEE_754_FLOAT_BE: { int i; - int le = (mformat_code_enum == IEEE_754_FLOAT_LE) ? 1 : 0; + int le = (mformat_code == IEEE_754_FLOAT_LE) ? 1 : 0; Py_ssize_t itemcount = Py_SIZE(items) / 4; const unsigned char *memstr = (unsigned char *)PyBytes_AS_STRING(items); @@ -2023,7 +2026,7 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, in case IEEE_754_DOUBLE_LE: case IEEE_754_DOUBLE_BE: { int i; - int le = (mformat_code_enum == IEEE_754_DOUBLE_LE) ? 1 : 0; + int le = (mformat_code == IEEE_754_DOUBLE_LE) ? 1 : 0; Py_ssize_t itemcount = Py_SIZE(items) / 8; const unsigned char *memstr = (unsigned char *)PyBytes_AS_STRING(items); @@ -2044,7 +2047,7 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, in } case UTF16_LE: case UTF16_BE: { - int byteorder = (mformat_code_enum == UTF16_LE) ? -1 : 1; + int byteorder = (mformat_code == UTF16_LE) ? -1 : 1; converted_items = PyUnicode_DecodeUTF16( PyBytes_AS_STRING(items), Py_SIZE(items), "strict", &byteorder); @@ -2054,7 +2057,7 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, in } case UTF32_LE: case UTF32_BE: { - int byteorder = (mformat_code_enum == UTF32_LE) ? -1 : 1; + int byteorder = (mformat_code == UTF32_LE) ? -1 : 1; converted_items = PyUnicode_DecodeUTF32( PyBytes_AS_STRING(items), Py_SIZE(items), "strict", &byteorder); @@ -2079,7 +2082,7 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, in case SIGNED_INT64_BE: { int i; const struct mformatdescr mf_descr = - mformat_descriptors[mformat_code_enum]; + mformat_descriptors[mformat_code]; Py_ssize_t itemcount = Py_SIZE(items) / mf_descr.size; const unsigned char *memstr = (unsigned char *)PyBytes_AS_STRING(items); diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h index 51b9a5499f..57d769026d 100644 --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -446,7 +446,7 @@ PyDoc_STRVAR(array__array_reconstructor__doc__, {"_array_reconstructor", (PyCFunction)array__array_reconstructor, METH_VARARGS, array__array_reconstructor__doc__}, static PyObject * -array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, int typecode, int mformat_code, PyObject *items); +array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items); static PyObject * array__array_reconstructor(PyModuleDef *module, PyObject *args) @@ -454,7 +454,7 @@ array__array_reconstructor(PyModuleDef *module, PyObject *args) PyObject *return_value = NULL; PyTypeObject *arraytype; int typecode; - int mformat_code; + enum machine_format_code mformat_code; PyObject *items; if (!PyArg_ParseTuple(args, @@ -502,4 +502,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__, #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, -/*[clinic end generated code: output=dff8eae01f0ab208 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e1deb61c6a3bc8c8 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 35efde99959b84929ee669575ba69a14d1e37bfe Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Tue, 14 Oct 2014 17:37:02 -0400 Subject: Issue #20152: Convert the cmath module to Argument Clinic. --- Modules/clinic/cmathmodule.c.h | 851 +++++++++++++++++++++++++++++++++++++++++ Modules/cmathmodule.c | 489 ++++++++++++----------- 2 files changed, 1118 insertions(+), 222 deletions(-) create mode 100644 Modules/clinic/cmathmodule.c.h (limited to 'Modules') diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h new file mode 100644 index 0000000000..7d6e04b578 --- /dev/null +++ b/Modules/clinic/cmathmodule.c.h @@ -0,0 +1,851 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(cmath_acos__doc__, +"acos($module, z, /)\n" +"--\n" +"\n" +"Return the arc cosine of z."); + +#define CMATH_ACOS_METHODDEF \ + {"acos", (PyCFunction)cmath_acos, METH_VARARGS, cmath_acos__doc__}, + +static Py_complex +cmath_acos_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_acos(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:acos", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_acos_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_acosh__doc__, +"acosh($module, z, /)\n" +"--\n" +"\n" +"Return the hyperbolic arccosine of z."); + +#define CMATH_ACOSH_METHODDEF \ + {"acosh", (PyCFunction)cmath_acosh, METH_VARARGS, cmath_acosh__doc__}, + +static Py_complex +cmath_acosh_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_acosh(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:acosh", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_acosh_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_asin__doc__, +"asin($module, z, /)\n" +"--\n" +"\n" +"Return the arc sine of z."); + +#define CMATH_ASIN_METHODDEF \ + {"asin", (PyCFunction)cmath_asin, METH_VARARGS, cmath_asin__doc__}, + +static Py_complex +cmath_asin_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_asin(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:asin", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_asin_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_asinh__doc__, +"asinh($module, z, /)\n" +"--\n" +"\n" +"Return the hyperbolic arc sine of z."); + +#define CMATH_ASINH_METHODDEF \ + {"asinh", (PyCFunction)cmath_asinh, METH_VARARGS, cmath_asinh__doc__}, + +static Py_complex +cmath_asinh_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_asinh(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:asinh", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_asinh_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_atan__doc__, +"atan($module, z, /)\n" +"--\n" +"\n" +"Return the arc tangent of z."); + +#define CMATH_ATAN_METHODDEF \ + {"atan", (PyCFunction)cmath_atan, METH_VARARGS, cmath_atan__doc__}, + +static Py_complex +cmath_atan_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_atan(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:atan", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_atan_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_atanh__doc__, +"atanh($module, z, /)\n" +"--\n" +"\n" +"Return the hyperbolic arc tangent of z."); + +#define CMATH_ATANH_METHODDEF \ + {"atanh", (PyCFunction)cmath_atanh, METH_VARARGS, cmath_atanh__doc__}, + +static Py_complex +cmath_atanh_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_atanh(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:atanh", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_atanh_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_cos__doc__, +"cos($module, z, /)\n" +"--\n" +"\n" +"Return the cosine of z."); + +#define CMATH_COS_METHODDEF \ + {"cos", (PyCFunction)cmath_cos, METH_VARARGS, cmath_cos__doc__}, + +static Py_complex +cmath_cos_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_cos(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:cos", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_cos_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_cosh__doc__, +"cosh($module, z, /)\n" +"--\n" +"\n" +"Return the hyperbolic cosine of z."); + +#define CMATH_COSH_METHODDEF \ + {"cosh", (PyCFunction)cmath_cosh, METH_VARARGS, cmath_cosh__doc__}, + +static Py_complex +cmath_cosh_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_cosh(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:cosh", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_cosh_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_exp__doc__, +"exp($module, z, /)\n" +"--\n" +"\n" +"Return the exponential value e**z."); + +#define CMATH_EXP_METHODDEF \ + {"exp", (PyCFunction)cmath_exp, METH_VARARGS, cmath_exp__doc__}, + +static Py_complex +cmath_exp_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_exp(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:exp", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_exp_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_log10__doc__, +"log10($module, z, /)\n" +"--\n" +"\n" +"Return the base-10 logarithm of z."); + +#define CMATH_LOG10_METHODDEF \ + {"log10", (PyCFunction)cmath_log10, METH_VARARGS, cmath_log10__doc__}, + +static Py_complex +cmath_log10_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_log10(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:log10", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_log10_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_sin__doc__, +"sin($module, z, /)\n" +"--\n" +"\n" +"Return the sine of z."); + +#define CMATH_SIN_METHODDEF \ + {"sin", (PyCFunction)cmath_sin, METH_VARARGS, cmath_sin__doc__}, + +static Py_complex +cmath_sin_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_sin(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:sin", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_sin_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_sinh__doc__, +"sinh($module, z, /)\n" +"--\n" +"\n" +"Return the hyperbolic sine of z."); + +#define CMATH_SINH_METHODDEF \ + {"sinh", (PyCFunction)cmath_sinh, METH_VARARGS, cmath_sinh__doc__}, + +static Py_complex +cmath_sinh_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_sinh(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:sinh", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_sinh_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_sqrt__doc__, +"sqrt($module, z, /)\n" +"--\n" +"\n" +"Return the square root of z."); + +#define CMATH_SQRT_METHODDEF \ + {"sqrt", (PyCFunction)cmath_sqrt, METH_VARARGS, cmath_sqrt__doc__}, + +static Py_complex +cmath_sqrt_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_sqrt(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:sqrt", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_sqrt_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_tan__doc__, +"tan($module, z, /)\n" +"--\n" +"\n" +"Return the tangent of z."); + +#define CMATH_TAN_METHODDEF \ + {"tan", (PyCFunction)cmath_tan, METH_VARARGS, cmath_tan__doc__}, + +static Py_complex +cmath_tan_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_tan(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:tan", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_tan_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_tanh__doc__, +"tanh($module, z, /)\n" +"--\n" +"\n" +"Return the hyperbolic tangent of z."); + +#define CMATH_TANH_METHODDEF \ + {"tanh", (PyCFunction)cmath_tanh, METH_VARARGS, cmath_tanh__doc__}, + +static Py_complex +cmath_tanh_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_tanh(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + Py_complex _return_value; + + if (!PyArg_ParseTuple(args, + "D:tanh", + &z)) + goto exit; + /* modifications for z */ + errno = 0; PyFPE_START_PROTECT("complex function", goto exit); + _return_value = cmath_tanh_impl(module, z); + PyFPE_END_PROTECT(_return_value); + if (errno == EDOM) { + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; + } + else if (errno == ERANGE) { + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; + } + else { + return_value = PyComplex_FromCComplex(_return_value); + } + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_log__doc__, +"log($module, x, y_obj=None, /)\n" +"--\n" +"\n" +"The logarithm of z to the given base.\n" +"\n" +"If the base not specified, returns the natural logarithm (base e) of z."); + +#define CMATH_LOG_METHODDEF \ + {"log", (PyCFunction)cmath_log, METH_VARARGS, cmath_log__doc__}, + +static PyObject * +cmath_log_impl(PyModuleDef *module, Py_complex x, PyObject *y_obj); + +static PyObject * +cmath_log(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex x; + PyObject *y_obj = NULL; + + if (!PyArg_ParseTuple(args, + "D|O:log", + &x, &y_obj)) + goto exit; + return_value = cmath_log_impl(module, x, y_obj); + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_phase__doc__, +"phase($module, z, /)\n" +"--\n" +"\n" +"Return argument, also known as the phase angle, of a complex."); + +#define CMATH_PHASE_METHODDEF \ + {"phase", (PyCFunction)cmath_phase, METH_VARARGS, cmath_phase__doc__}, + +static PyObject * +cmath_phase_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_phase(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + + if (!PyArg_ParseTuple(args, + "D:phase", + &z)) + goto exit; + return_value = cmath_phase_impl(module, z); + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_polar__doc__, +"polar($module, z, /)\n" +"--\n" +"\n" +"Convert a complex from rectangular coordinates to polar coordinates.\n" +"\n" +"r is the distance from 0 and phi the phase angle."); + +#define CMATH_POLAR_METHODDEF \ + {"polar", (PyCFunction)cmath_polar, METH_VARARGS, cmath_polar__doc__}, + +static PyObject * +cmath_polar_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_polar(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + + if (!PyArg_ParseTuple(args, + "D:polar", + &z)) + goto exit; + return_value = cmath_polar_impl(module, z); + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_rect__doc__, +"rect($module, r, phi, /)\n" +"--\n" +"\n" +"Convert from polar coordinates to rectangular coordinates."); + +#define CMATH_RECT_METHODDEF \ + {"rect", (PyCFunction)cmath_rect, METH_VARARGS, cmath_rect__doc__}, + +static PyObject * +cmath_rect_impl(PyModuleDef *module, double r, double phi); + +static PyObject * +cmath_rect(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + double r; + double phi; + + if (!PyArg_ParseTuple(args, + "dd:rect", + &r, &phi)) + goto exit; + return_value = cmath_rect_impl(module, r, phi); + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_isfinite__doc__, +"isfinite($module, z, /)\n" +"--\n" +"\n" +"Return True if both the real and imaginary parts of z are finite, else False."); + +#define CMATH_ISFINITE_METHODDEF \ + {"isfinite", (PyCFunction)cmath_isfinite, METH_VARARGS, cmath_isfinite__doc__}, + +static PyObject * +cmath_isfinite_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_isfinite(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + + if (!PyArg_ParseTuple(args, + "D:isfinite", + &z)) + goto exit; + return_value = cmath_isfinite_impl(module, z); + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_isnan__doc__, +"isnan($module, z, /)\n" +"--\n" +"\n" +"Checks if the real or imaginary part of z not a number (NaN)."); + +#define CMATH_ISNAN_METHODDEF \ + {"isnan", (PyCFunction)cmath_isnan, METH_VARARGS, cmath_isnan__doc__}, + +static PyObject * +cmath_isnan_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_isnan(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + + if (!PyArg_ParseTuple(args, + "D:isnan", + &z)) + goto exit; + return_value = cmath_isnan_impl(module, z); + +exit: + return return_value; +} + +PyDoc_STRVAR(cmath_isinf__doc__, +"isinf($module, z, /)\n" +"--\n" +"\n" +"Checks if the real or imaginary part of z is infinite."); + +#define CMATH_ISINF_METHODDEF \ + {"isinf", (PyCFunction)cmath_isinf, METH_VARARGS, cmath_isinf__doc__}, + +static PyObject * +cmath_isinf_impl(PyModuleDef *module, Py_complex z); + +static PyObject * +cmath_isinf(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_complex z; + + if (!PyArg_ParseTuple(args, + "D:isinf", + &z)) + goto exit; + return_value = cmath_isinf_impl(module, z); + +exit: + return return_value; +} +/*[clinic end generated code: output=4407f898ae07c83d input=a9049054013a1b77]*/ diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 8d37f6bd0c..6d9b2ed327 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -8,6 +8,41 @@ float.h. We assume that FLT_RADIX is either 2 or 16. */ #include +#include "clinic/cmathmodule.c.h" +/*[clinic input] +output preset file +module cmath +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=ef7e0fdd8a143c03]*/ + +/*[python input] +class Py_complex_protected_converter(Py_complex_converter): + def modify(self): + return 'errno = 0; PyFPE_START_PROTECT("complex function", goto exit);' + + +class Py_complex_protected_return_converter(CReturnConverter): + type = "Py_complex" + + def render(self, function, data): + self.declare(data) + data.return_conversion.append(""" +PyFPE_END_PROTECT(_return_value); +if (errno == EDOM) {{ + PyErr_SetString(PyExc_ValueError, "math domain error"); + goto exit; +}} +else if (errno == ERANGE) {{ + PyErr_SetString(PyExc_OverflowError, "math range error"); + goto exit; +}} +else {{ + return_value = PyComplex_FromCComplex(_return_value); +}} +""".strip()) +[python start generated code]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=231019039a6fbb9a]*/ + #if (FLT_RADIX != 2 && FLT_RADIX != 16) #error "Modules/cmathmodule.c expects FLT_RADIX to be 2 or 16" #endif @@ -48,12 +83,12 @@ #define CM_SCALE_DOWN (-(CM_SCALE_UP+1)/2) /* forward declarations */ -static Py_complex c_asinh(Py_complex); -static Py_complex c_atanh(Py_complex); -static Py_complex c_cosh(Py_complex); -static Py_complex c_sinh(Py_complex); -static Py_complex c_sqrt(Py_complex); -static Py_complex c_tanh(Py_complex); +static Py_complex cmath_asinh_impl(PyModuleDef *, Py_complex); +static Py_complex cmath_atanh_impl(PyModuleDef *, Py_complex); +static Py_complex cmath_cosh_impl(PyModuleDef *, Py_complex); +static Py_complex cmath_sinh_impl(PyModuleDef *, Py_complex); +static Py_complex cmath_sqrt_impl(PyModuleDef *, Py_complex); +static Py_complex cmath_tanh_impl(PyModuleDef *, Py_complex); static PyObject * math_error(void); /* Code to deal with special values (infinities, NaNs, etc.). */ @@ -123,8 +158,18 @@ special_type(double d) static Py_complex acos_special_values[7][7]; +/*[clinic input] +cmath.acos -> Py_complex_protected + + z: Py_complex_protected + / + +Return the arc cosine of z. +[clinic start generated code]*/ + static Py_complex -c_acos(Py_complex z) +cmath_acos_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=7c1dd21ff818db6b input=bd6cbd78ae851927]*/ { Py_complex s1, s2, r; @@ -145,10 +190,10 @@ c_acos(Py_complex z) } else { s1.real = 1.-z.real; s1.imag = -z.imag; - s1 = c_sqrt(s1); + s1 = cmath_sqrt_impl(module, s1); s2.real = 1.+z.real; s2.imag = z.imag; - s2 = c_sqrt(s2); + s2 = cmath_sqrt_impl(module, s2); r.real = 2.*atan2(s1.real, s2.real); r.imag = m_asinh(s2.real*s1.imag - s2.imag*s1.real); } @@ -156,16 +201,18 @@ c_acos(Py_complex z) return r; } -PyDoc_STRVAR(c_acos_doc, -"acos(x)\n" -"\n" -"Return the arc cosine of x."); - static Py_complex acosh_special_values[7][7]; +/*[clinic input] +cmath.acosh = cmath.acos + +Return the hyperbolic arccosine of z. +[clinic start generated code]*/ + static Py_complex -c_acosh(Py_complex z) +cmath_acosh_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=c23c776429def981 input=bc016412080bb3e9]*/ { Py_complex s1, s2, r; @@ -178,10 +225,10 @@ c_acosh(Py_complex z) } else { s1.real = z.real - 1.; s1.imag = z.imag; - s1 = c_sqrt(s1); + s1 = cmath_sqrt_impl(module, s1); s2.real = z.real + 1.; s2.imag = z.imag; - s2 = c_sqrt(s2); + s2 = cmath_sqrt_impl(module, s2); r.real = m_asinh(s1.real*s2.real + s1.imag*s2.imag); r.imag = 2.*atan2(s1.imag, s2.real); } @@ -189,35 +236,38 @@ c_acosh(Py_complex z) return r; } -PyDoc_STRVAR(c_acosh_doc, -"acosh(x)\n" -"\n" -"Return the hyperbolic arccosine of x."); +/*[clinic input] +cmath.asin = cmath.acos +Return the arc sine of z. +[clinic start generated code]*/ static Py_complex -c_asin(Py_complex z) +cmath_asin_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=42d2346d46690826 input=be0bf0cfdd5239c5]*/ { /* asin(z) = -i asinh(iz) */ Py_complex s, r; s.real = -z.imag; s.imag = z.real; - s = c_asinh(s); + s = cmath_asinh_impl(module, s); r.real = s.imag; r.imag = -s.real; return r; } -PyDoc_STRVAR(c_asin_doc, -"asin(x)\n" -"\n" -"Return the arc sine of x."); - static Py_complex asinh_special_values[7][7]; +/*[clinic input] +cmath.asinh = cmath.acos + +Return the hyperbolic arc sine of z. +[clinic start generated code]*/ + static Py_complex -c_asinh(Py_complex z) +cmath_asinh_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=0c6664823c7b1b35 input=5a21fa0242928c9b]*/ { Py_complex s1, s2, r; @@ -235,10 +285,10 @@ c_asinh(Py_complex z) } else { s1.real = 1.+z.imag; s1.imag = -z.real; - s1 = c_sqrt(s1); + s1 = cmath_sqrt_impl(module, s1); s2.real = 1.-z.imag; s2.imag = z.real; - s2 = c_sqrt(s2); + s2 = cmath_sqrt_impl(module, s2); r.real = m_asinh(s1.real*s2.imag-s2.real*s1.imag); r.imag = atan2(z.imag, s1.real*s2.real-s1.imag*s2.imag); } @@ -246,20 +296,22 @@ c_asinh(Py_complex z) return r; } -PyDoc_STRVAR(c_asinh_doc, -"asinh(x)\n" -"\n" -"Return the hyperbolic arc sine of x."); +/*[clinic input] +cmath.atan = cmath.acos + +Return the arc tangent of z. +[clinic start generated code]*/ static Py_complex -c_atan(Py_complex z) +cmath_atan_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=b7d44f02c6a5c3b5 input=3b21ff7d5eac632a]*/ { /* atan(z) = -i atanh(iz) */ Py_complex s, r; s.real = -z.imag; s.imag = z.real; - s = c_atanh(s); + s = cmath_atanh_impl(module, s); r.real = s.imag; r.imag = -s.real; return r; @@ -295,16 +347,18 @@ c_atan2(Py_complex z) return atan2(z.imag, z.real); } -PyDoc_STRVAR(c_atan_doc, -"atan(x)\n" -"\n" -"Return the arc tangent of x."); - static Py_complex atanh_special_values[7][7]; +/*[clinic input] +cmath.atanh = cmath.acos + +Return the hyperbolic arc tangent of z. +[clinic start generated code]*/ + static Py_complex -c_atanh(Py_complex z) +cmath_atanh_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=279e0b9fefc8da7c input=df19cdc9f9d431c9]*/ { Py_complex r; double ay, h; @@ -313,7 +367,7 @@ c_atanh(Py_complex z) /* Reduce to case where z.real >= 0., using atanh(z) = -atanh(-z). */ if (z.real < 0.) { - return _Py_c_neg(c_atanh(_Py_c_neg(z))); + return _Py_c_neg(cmath_atanh_impl(module, _Py_c_neg(z))); } ay = fabs(z.imag); @@ -350,34 +404,38 @@ c_atanh(Py_complex z) return r; } -PyDoc_STRVAR(c_atanh_doc, -"atanh(x)\n" -"\n" -"Return the hyperbolic arc tangent of x."); +/*[clinic input] +cmath.cos = cmath.acos + +Return the cosine of z. +[clinic start generated code]*/ static Py_complex -c_cos(Py_complex z) +cmath_cos_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=9d1cdc1b5e761667 input=6022e39b77127ac7]*/ { /* cos(z) = cosh(iz) */ Py_complex r; r.real = -z.imag; r.imag = z.real; - r = c_cosh(r); + r = cmath_cosh_impl(module, r); return r; } -PyDoc_STRVAR(c_cos_doc, -"cos(x)\n" -"\n" -"Return the cosine of x."); - /* cosh(infinity + i*y) needs to be dealt with specially */ static Py_complex cosh_special_values[7][7]; +/*[clinic input] +cmath.cosh = cmath.acos + +Return the hyperbolic cosine of z. +[clinic start generated code]*/ + static Py_complex -c_cosh(Py_complex z) +cmath_cosh_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=f3b5d3282b3024d3 input=d6b66339e9cc332b]*/ { Py_complex r; double x_minus_one; @@ -426,18 +484,20 @@ c_cosh(Py_complex z) return r; } -PyDoc_STRVAR(c_cosh_doc, -"cosh(x)\n" -"\n" -"Return the hyperbolic cosine of x."); - /* exp(infinity + i*y) and exp(-infinity + i*y) need special treatment for finite y */ static Py_complex exp_special_values[7][7]; +/*[clinic input] +cmath.exp = cmath.acos + +Return the exponential value e**z. +[clinic start generated code]*/ + static Py_complex -c_exp(Py_complex z) +cmath_exp_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=6f8825eb2bcad9ba input=8b9e6cf8a92174c3]*/ { Py_complex r; double l; @@ -486,12 +546,6 @@ c_exp(Py_complex z) return r; } -PyDoc_STRVAR(c_exp_doc, -"exp(x)\n" -"\n" -"Return the exponential value e**x."); - - static Py_complex log_special_values[7][7]; static Py_complex @@ -564,8 +618,15 @@ c_log(Py_complex z) } +/*[clinic input] +cmath.log10 = cmath.acos + +Return the base-10 logarithm of z. +[clinic start generated code]*/ + static Py_complex -c_log10(Py_complex z) +cmath_log10_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=c7c426ca0e782341 input=cff5644f73c1519c]*/ { Py_complex r; int errno_save; @@ -578,36 +639,40 @@ c_log10(Py_complex z) return r; } -PyDoc_STRVAR(c_log10_doc, -"log10(x)\n" -"\n" -"Return the base-10 logarithm of x."); +/*[clinic input] +cmath.sin = cmath.acos + +Return the sine of z. +[clinic start generated code]*/ static Py_complex -c_sin(Py_complex z) +cmath_sin_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=e7f5e2b253825ac7 input=2d3519842a8b4b85]*/ { /* sin(z) = -i sin(iz) */ Py_complex s, r; s.real = -z.imag; s.imag = z.real; - s = c_sinh(s); + s = cmath_sinh_impl(module, s); r.real = s.imag; r.imag = -s.real; return r; } -PyDoc_STRVAR(c_sin_doc, -"sin(x)\n" -"\n" -"Return the sine of x."); - /* sinh(infinity + i*y) needs to be dealt with specially */ static Py_complex sinh_special_values[7][7]; +/*[clinic input] +cmath.sinh = cmath.acos + +Return the hyperbolic sine of z. +[clinic start generated code]*/ + static Py_complex -c_sinh(Py_complex z) +cmath_sinh_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=d71fff8298043a95 input=d2d3fc8c1ddfd2dd]*/ { Py_complex r; double x_minus_one; @@ -655,16 +720,18 @@ c_sinh(Py_complex z) return r; } -PyDoc_STRVAR(c_sinh_doc, -"sinh(x)\n" -"\n" -"Return the hyperbolic sine of x."); - static Py_complex sqrt_special_values[7][7]; +/*[clinic input] +cmath.sqrt = cmath.acos + +Return the square root of z. +[clinic start generated code]*/ + static Py_complex -c_sqrt(Py_complex z) +cmath_sqrt_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=b6bda283d0c5a7b4 input=7088b166fc9a58c7]*/ { /* Method: use symmetries to reduce to the case when x = z.real and y @@ -730,36 +797,40 @@ c_sqrt(Py_complex z) return r; } -PyDoc_STRVAR(c_sqrt_doc, -"sqrt(x)\n" -"\n" -"Return the square root of x."); +/*[clinic input] +cmath.tan = cmath.acos + +Return the tangent of z. +[clinic start generated code]*/ static Py_complex -c_tan(Py_complex z) +cmath_tan_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=df374bacf36d99b4 input=fc167e528767888e]*/ { /* tan(z) = -i tanh(iz) */ Py_complex s, r; s.real = -z.imag; s.imag = z.real; - s = c_tanh(s); + s = cmath_tanh_impl(module, s); r.real = s.imag; r.imag = -s.real; return r; } -PyDoc_STRVAR(c_tan_doc, -"tan(x)\n" -"\n" -"Return the tangent of x."); - /* tanh(infinity + i*y) needs to be dealt with specially */ static Py_complex tanh_special_values[7][7]; +/*[clinic input] +cmath.tanh = cmath.acos + +Return the hyperbolic tangent of z. +[clinic start generated code]*/ + static Py_complex -c_tanh(Py_complex z) +cmath_tanh_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=f578773d27a18e96 input=22f67f9dc6d29685]*/ { /* Formula: @@ -822,25 +893,33 @@ c_tanh(Py_complex z) return r; } -PyDoc_STRVAR(c_tanh_doc, -"tanh(x)\n" -"\n" -"Return the hyperbolic tangent of x."); +/*[clinic input] +cmath.log + + x: Py_complex + y_obj: object = NULL + / + +The logarithm of z to the given base. + +If the base not specified, returns the natural logarithm (base e) of z. +[clinic start generated code]*/ static PyObject * -cmath_log(PyObject *self, PyObject *args) +cmath_log_impl(PyModuleDef *module, Py_complex x, PyObject *y_obj) +/*[clinic end generated code: output=35e2a1e5229b5a46 input=ee0e823a7c6e68ea]*/ { - Py_complex x; Py_complex y; - if (!PyArg_ParseTuple(args, "D|D", &x, &y)) - return NULL; - errno = 0; PyFPE_START_PROTECT("complex function", return 0) x = c_log(x); - if (PyTuple_GET_SIZE(args) == 2) { + if (y_obj != NULL) { + y = PyComplex_AsCComplex(y_obj); + if (PyErr_Occurred()) { + return NULL; + } y = c_log(y); x = _Py_c_quot(x, y); } @@ -850,10 +929,6 @@ cmath_log(PyObject *self, PyObject *args) return PyComplex_FromCComplex(x); } -PyDoc_STRVAR(cmath_log_doc, -"log(x[, base]) -> the logarithm of x to the given base.\n\ -If the base not specified, returns the natural logarithm (base e) of x."); - /* And now the glue to make them available from Python: */ @@ -869,57 +944,22 @@ math_error(void) return NULL; } -static PyObject * -math_1(PyObject *args, Py_complex (*func)(Py_complex)) -{ - Py_complex x,r ; - if (!PyArg_ParseTuple(args, "D", &x)) - return NULL; - errno = 0; - PyFPE_START_PROTECT("complex function", return 0); - r = (*func)(x); - PyFPE_END_PROTECT(r); - if (errno == EDOM) { - PyErr_SetString(PyExc_ValueError, "math domain error"); - return NULL; - } - else if (errno == ERANGE) { - PyErr_SetString(PyExc_OverflowError, "math range error"); - return NULL; - } - else { - return PyComplex_FromCComplex(r); - } -} -#define FUNC1(stubname, func) \ - static PyObject * stubname(PyObject *self, PyObject *args) { \ - return math_1(args, func); \ - } +/*[clinic input] +cmath.phase + + z: Py_complex + / -FUNC1(cmath_acos, c_acos) -FUNC1(cmath_acosh, c_acosh) -FUNC1(cmath_asin, c_asin) -FUNC1(cmath_asinh, c_asinh) -FUNC1(cmath_atan, c_atan) -FUNC1(cmath_atanh, c_atanh) -FUNC1(cmath_cos, c_cos) -FUNC1(cmath_cosh, c_cosh) -FUNC1(cmath_exp, c_exp) -FUNC1(cmath_log10, c_log10) -FUNC1(cmath_sin, c_sin) -FUNC1(cmath_sinh, c_sinh) -FUNC1(cmath_sqrt, c_sqrt) -FUNC1(cmath_tan, c_tan) -FUNC1(cmath_tanh, c_tanh) +Return argument, also known as the phase angle, of a complex. +[clinic start generated code]*/ static PyObject * -cmath_phase(PyObject *self, PyObject *args) +cmath_phase_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=e09eaf373cb624c3 input=5cf75228ba94b69d]*/ { - Py_complex z; double phi; - if (!PyArg_ParseTuple(args, "D:phase", &z)) - return NULL; + errno = 0; PyFPE_START_PROTECT("arg function", return 0) phi = c_atan2(z); @@ -930,17 +970,23 @@ cmath_phase(PyObject *self, PyObject *args) return PyFloat_FromDouble(phi); } -PyDoc_STRVAR(cmath_phase_doc, -"phase(z) -> float\n\n\ -Return argument, also known as the phase angle, of a complex."); +/*[clinic input] +cmath.polar + + z: Py_complex + / + +Convert a complex from rectangular coordinates to polar coordinates. + +r is the distance from 0 and phi the phase angle. +[clinic start generated code]*/ static PyObject * -cmath_polar(PyObject *self, PyObject *args) +cmath_polar_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=07d41b16c877875a input=26c353574fd1a861]*/ { - Py_complex z; double r, phi; - if (!PyArg_ParseTuple(args, "D:polar", &z)) - return NULL; + PyFPE_START_PROTECT("polar function", return 0) phi = c_atan2(z); /* should not cause any exception */ r = _Py_c_abs(z); /* sets errno to ERANGE on overflow; otherwise 0 */ @@ -951,11 +997,6 @@ cmath_polar(PyObject *self, PyObject *args) return Py_BuildValue("dd", r, phi); } -PyDoc_STRVAR(cmath_polar_doc, -"polar(z) -> r: float, phi: float\n\n\ -Convert a complex from rectangular coordinates to polar coordinates. r is\n\ -the distance from 0 and phi the phase angle."); - /* rect() isn't covered by the C99 standard, but it's not too hard to figure out 'spirit of C99' rules for special value handing: @@ -969,13 +1010,21 @@ the distance from 0 and phi the phase angle."); static Py_complex rect_special_values[7][7]; +/*[clinic input] +cmath.rect + + r: double + phi: double + / + +Convert from polar coordinates to rectangular coordinates. +[clinic start generated code]*/ + static PyObject * -cmath_rect(PyObject *self, PyObject *args) +cmath_rect_impl(PyModuleDef *module, double r, double phi) +/*[clinic end generated code: output=d97a8749bd63e9d5 input=24c5646d147efd69]*/ { Py_complex z; - double r, phi; - if (!PyArg_ParseTuple(args, "dd:rect", &r, &phi)) - return NULL; errno = 0; PyFPE_START_PROTECT("rect function", return 0) @@ -1026,79 +1075,75 @@ cmath_rect(PyObject *self, PyObject *args) return PyComplex_FromCComplex(z); } -PyDoc_STRVAR(cmath_rect_doc, -"rect(r, phi) -> z: complex\n\n\ -Convert from polar coordinates to rectangular coordinates."); +/*[clinic input] +cmath.isfinite = cmath.polar + +Return True if both the real and imaginary parts of z are finite, else False. +[clinic start generated code]*/ static PyObject * -cmath_isfinite(PyObject *self, PyObject *args) +cmath_isfinite_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=8f6682fa93de45d6 input=848e7ee701895815]*/ { - Py_complex z; - if (!PyArg_ParseTuple(args, "D:isfinite", &z)) - return NULL; return PyBool_FromLong(Py_IS_FINITE(z.real) && Py_IS_FINITE(z.imag)); } -PyDoc_STRVAR(cmath_isfinite_doc, -"isfinite(z) -> bool\n\ -Return True if both the real and imaginary parts of z are finite, else False."); +/*[clinic input] +cmath.isnan = cmath.polar + +Checks if the real or imaginary part of z not a number (NaN). +[clinic start generated code]*/ static PyObject * -cmath_isnan(PyObject *self, PyObject *args) +cmath_isnan_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=b85fe8c2047718ee input=71799f5d284c9baf]*/ { - Py_complex z; - if (!PyArg_ParseTuple(args, "D:isnan", &z)) - return NULL; return PyBool_FromLong(Py_IS_NAN(z.real) || Py_IS_NAN(z.imag)); } -PyDoc_STRVAR(cmath_isnan_doc, -"isnan(z) -> bool\n\ -Checks if the real or imaginary part of z not a number (NaN)"); +/*[clinic input] +cmath.isinf = cmath.polar + +Checks if the real or imaginary part of z is infinite. +[clinic start generated code]*/ static PyObject * -cmath_isinf(PyObject *self, PyObject *args) +cmath_isinf_impl(PyModuleDef *module, Py_complex z) +/*[clinic end generated code: output=8ca9c6109e468bf4 input=363df155c7181329]*/ { - Py_complex z; - if (!PyArg_ParseTuple(args, "D:isinf", &z)) - return NULL; return PyBool_FromLong(Py_IS_INFINITY(z.real) || Py_IS_INFINITY(z.imag)); } -PyDoc_STRVAR(cmath_isinf_doc, -"isinf(z) -> bool\n\ -Checks if the real or imaginary part of z is infinite."); - PyDoc_STRVAR(module_doc, "This module is always available. It provides access to mathematical\n" "functions for complex numbers."); static PyMethodDef cmath_methods[] = { - {"acos", cmath_acos, METH_VARARGS, c_acos_doc}, - {"acosh", cmath_acosh, METH_VARARGS, c_acosh_doc}, - {"asin", cmath_asin, METH_VARARGS, c_asin_doc}, - {"asinh", cmath_asinh, METH_VARARGS, c_asinh_doc}, - {"atan", cmath_atan, METH_VARARGS, c_atan_doc}, - {"atanh", cmath_atanh, METH_VARARGS, c_atanh_doc}, - {"cos", cmath_cos, METH_VARARGS, c_cos_doc}, - {"cosh", cmath_cosh, METH_VARARGS, c_cosh_doc}, - {"exp", cmath_exp, METH_VARARGS, c_exp_doc}, - {"isfinite", cmath_isfinite, METH_VARARGS, cmath_isfinite_doc}, - {"isinf", cmath_isinf, METH_VARARGS, cmath_isinf_doc}, - {"isnan", cmath_isnan, METH_VARARGS, cmath_isnan_doc}, - {"log", cmath_log, METH_VARARGS, cmath_log_doc}, - {"log10", cmath_log10, METH_VARARGS, c_log10_doc}, - {"phase", cmath_phase, METH_VARARGS, cmath_phase_doc}, - {"polar", cmath_polar, METH_VARARGS, cmath_polar_doc}, - {"rect", cmath_rect, METH_VARARGS, cmath_rect_doc}, - {"sin", cmath_sin, METH_VARARGS, c_sin_doc}, - {"sinh", cmath_sinh, METH_VARARGS, c_sinh_doc}, - {"sqrt", cmath_sqrt, METH_VARARGS, c_sqrt_doc}, - {"tan", cmath_tan, METH_VARARGS, c_tan_doc}, - {"tanh", cmath_tanh, METH_VARARGS, c_tanh_doc}, - {NULL, NULL} /* sentinel */ + CMATH_ACOS_METHODDEF + CMATH_ACOSH_METHODDEF + CMATH_ASIN_METHODDEF + CMATH_ASINH_METHODDEF + CMATH_ATAN_METHODDEF + CMATH_ATANH_METHODDEF + CMATH_COS_METHODDEF + CMATH_COSH_METHODDEF + CMATH_EXP_METHODDEF + CMATH_ISFINITE_METHODDEF + CMATH_ISINF_METHODDEF + CMATH_ISNAN_METHODDEF + CMATH_LOG_METHODDEF + CMATH_LOG10_METHODDEF + CMATH_PHASE_METHODDEF + CMATH_POLAR_METHODDEF + CMATH_RECT_METHODDEF + CMATH_SIN_METHODDEF + CMATH_SINH_METHODDEF + CMATH_SQRT_METHODDEF + CMATH_TAN_METHODDEF + CMATH_TANH_METHODDEF + {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From 6b9433d629dbe56f8d96896813fb158297b008e7 Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Sat, 18 Oct 2014 13:32:43 +1300 Subject: Issue #17401: document closefd in io.FileIO docs and add to repr closefd was documented in the open docs but not the matching FileIO class documented. Further, closefd, part of the core state for the object was not shown. In review it was noted that the open docs are a little confusing about the interaction between closefd and paths, so tweaked them at the same time. --- Modules/_io/fileio.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 2e0fbf9535..5c1316e9f4 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -1054,12 +1054,14 @@ fileio_repr(fileio *self) PyErr_Clear(); else return NULL; - res = PyUnicode_FromFormat("<_io.FileIO fd=%d mode='%s'>", - self->fd, mode_string(self)); + res = PyUnicode_FromFormat( + "<_io.FileIO fd=%d mode='%s' closefd='%d'>", + self->fd, mode_string(self), self->closefd); } else { - res = PyUnicode_FromFormat("<_io.FileIO name=%R mode='%s'>", - nameobj, mode_string(self)); + res = PyUnicode_FromFormat( + "<_io.FileIO name=%R mode='%s' closefd='%d'>", + nameobj, mode_string(self), self->closefd); Py_DECREF(nameobj); } return res; -- cgit v1.2.1 From 08fe9f9fd03cdb6896e4d05cdc4175c129de63f0 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 22 Oct 2014 12:33:23 +0200 Subject: Issue #22592: Drop support of the Borland C compiler to build Python The distutils module still supports it to build extensions. --- Modules/posixmodule.c | 14 +------------- Modules/timemodule.c | 11 ++--------- 2 files changed, 3 insertions(+), 22 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 38ba74b1ea..0f0f1c3efe 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -6,7 +6,7 @@ functions are either unimplemented or implemented differently. The source assumes that for Windows NT, the macro 'MS_WINDOWS' is defined independent of the compiler used. Different compilers define their own feature - test macro, e.g. '__BORLANDC__' or '_MSC_VER'. */ + test macro, e.g. '_MSC_VER'. */ @@ -143,13 +143,6 @@ corresponding Unix manual entries for more information on calls."); #define HAVE_SYSTEM 1 #include #else -#ifdef __BORLANDC__ /* Borland compiler */ -#define HAVE_EXECV 1 -#define HAVE_OPENDIR 1 -#define HAVE_PIPE 1 -#define HAVE_SYSTEM 1 -#define HAVE_WAIT 1 -#else #ifdef _MSC_VER /* Microsoft compiler */ #define HAVE_GETPPID 1 #define HAVE_GETLOGIN 1 @@ -179,7 +172,6 @@ corresponding Unix manual entries for more information on calls."); #define HAVE_WAIT 1 #define HAVE_TTYNAME 1 #endif /* _MSC_VER */ -#endif /* __BORLANDC__ */ #endif /* ! __WATCOMC__ || __QNX__ */ @@ -214,11 +206,7 @@ extern int rmdir(char *); extern int chdir(const char *); extern int rmdir(const char *); #endif -#ifdef __BORLANDC__ -extern int chmod(const char *, int); -#else extern int chmod(const char *, mode_t); -#endif /*#ifdef HAVE_FCHMOD extern int fchmod(int, mode_t); #endif*/ diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 16f4f6d95d..1f07bcc90f 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -27,13 +27,6 @@ #define WIN32_LEAN_AND_MEAN #include #include "pythread.h" - -#if defined(__BORLANDC__) -/* These overrides not needed for Win32 */ -#define timezone _timezone -#define tzname _tzname -#define daylight _daylight -#endif /* __BORLANDC__ */ #endif /* MS_WINDOWS */ #endif /* !__WATCOMC__ || __QNX__ */ @@ -88,7 +81,7 @@ floatclock(_Py_clock_info_t *info) } #endif /* HAVE_CLOCK */ -#if defined(MS_WINDOWS) && !defined(__BORLANDC__) +#ifdef MS_WINDOWS #define WIN32_PERF_COUNTER /* Win32 has better clock replacement; we have our own version, due to Mark Hammond and Tim Peters */ @@ -120,7 +113,7 @@ win_perf_counter(_Py_clock_info_t *info) } return PyFloat_FromDouble(diff / (double)cpu_frequency); } -#endif +#endif /* MS_WINDOWS */ #if defined(WIN32_PERF_COUNTER) || defined(HAVE_CLOCK) #define PYCLOCK -- cgit v1.2.1 From 207c940287c4ef822f16bdffa8f6bd14d782c8e1 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Thu, 23 Oct 2014 22:47:50 +0200 Subject: Issue #22676: Make the pickling of global objects which don't have a __module__ attribute less slow. --- Modules/_pickle.c | 108 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 72 insertions(+), 36 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 24524a6ca5..a13eff32c3 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1535,18 +1535,18 @@ memo_put(PicklerObject *self, PyObject *obj) } static PyObject * -getattribute(PyObject *obj, PyObject *name, int allow_qualname) { - PyObject *dotted_path; - Py_ssize_t i; +get_dotted_path(PyObject *obj, PyObject *name, int allow_qualname) { _Py_static_string(PyId_dot, "."); _Py_static_string(PyId_locals, ""); + PyObject *dotted_path; + Py_ssize_t i, n; dotted_path = PyUnicode_Split(name, _PyUnicode_FromId(&PyId_dot), -1); - if (dotted_path == NULL) { + if (dotted_path == NULL) return NULL; - } - assert(Py_SIZE(dotted_path) >= 1); - if (!allow_qualname && Py_SIZE(dotted_path) > 1) { + n = PyList_GET_SIZE(dotted_path); + assert(n >= 1); + if (!allow_qualname && n > 1) { PyErr_Format(PyExc_AttributeError, "Can't get qualified attribute %R on %R;" "use protocols >= 4 to enable support", @@ -1554,10 +1554,8 @@ getattribute(PyObject *obj, PyObject *name, int allow_qualname) { Py_DECREF(dotted_path); return NULL; } - Py_INCREF(obj); - for (i = 0; i < Py_SIZE(dotted_path); i++) { + for (i = 0; i < n; i++) { PyObject *subpath = PyList_GET_ITEM(dotted_path, i); - PyObject *tmp; PyObject *result = PyUnicode_RichCompare( subpath, _PyUnicode_FromId(&PyId_locals), Py_EQ); int is_equal = (result == Py_True); @@ -1567,37 +1565,69 @@ getattribute(PyObject *obj, PyObject *name, int allow_qualname) { PyErr_Format(PyExc_AttributeError, "Can't get local attribute %R on %R", name, obj); Py_DECREF(dotted_path); - Py_DECREF(obj); return NULL; } - tmp = PyObject_GetAttr(obj, subpath); + } + return dotted_path; +} + +static PyObject * +get_deep_attribute(PyObject *obj, PyObject *names) +{ + Py_ssize_t i, n; + + assert(PyList_CheckExact(names)); + Py_INCREF(obj); + n = PyList_GET_SIZE(names); + for (i = 0; i < n; i++) { + PyObject *name = PyList_GET_ITEM(names, i); + PyObject *tmp; + tmp = PyObject_GetAttr(obj, name); Py_DECREF(obj); - if (tmp == NULL) { - if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Clear(); - PyErr_Format(PyExc_AttributeError, - "Can't get attribute %R on %R", name, obj); - } - Py_DECREF(dotted_path); + if (tmp == NULL) return NULL; - } obj = tmp; } - Py_DECREF(dotted_path); return obj; } +static void +reformat_attribute_error(PyObject *obj, PyObject *name) +{ + if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + PyErr_Format(PyExc_AttributeError, + "Can't get attribute %R on %R", name, obj); + } +} + + +static PyObject * +getattribute(PyObject *obj, PyObject *name, int allow_qualname) +{ + PyObject *dotted_path, *attr; + + dotted_path = get_dotted_path(obj, name, allow_qualname); + if (dotted_path == NULL) + return NULL; + attr = get_deep_attribute(obj, dotted_path); + Py_DECREF(dotted_path); + if (attr == NULL) + reformat_attribute_error(obj, name); + return attr; +} + static PyObject * whichmodule(PyObject *global, PyObject *global_name, int allow_qualname) { PyObject *module_name; PyObject *modules_dict; PyObject *module; - PyObject *obj; - Py_ssize_t i, j; + Py_ssize_t i; _Py_IDENTIFIER(__module__); _Py_IDENTIFIER(modules); _Py_IDENTIFIER(__main__); + PyObject *dotted_path; module_name = _PyObject_GetAttrId(global, &PyId___module__); @@ -1616,43 +1646,49 @@ whichmodule(PyObject *global, PyObject *global_name, int allow_qualname) } assert(module_name == NULL); + /* Fallback on walking sys.modules */ modules_dict = _PySys_GetObjectId(&PyId_modules); if (modules_dict == NULL) { PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules"); return NULL; } + dotted_path = get_dotted_path(module, global_name, allow_qualname); + if (dotted_path == NULL) + return NULL; + i = 0; - while ((j = PyDict_Next(modules_dict, &i, &module_name, &module))) { - PyObject *result = PyUnicode_RichCompare( - module_name, _PyUnicode_FromId(&PyId___main__), Py_EQ); - int is_equal = (result == Py_True); - assert(PyBool_Check(result)); - Py_DECREF(result); - if (is_equal) + while (PyDict_Next(modules_dict, &i, &module_name, &module)) { + PyObject *candidate; + if (PyUnicode_Check(module_name) && + !PyUnicode_CompareWithASCIIString(module_name, "__main__")) continue; if (module == Py_None) continue; - obj = getattribute(module, global_name, allow_qualname); - if (obj == NULL) { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) + candidate = get_deep_attribute(module, dotted_path); + if (candidate == NULL) { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) { + Py_DECREF(dotted_path); return NULL; + } PyErr_Clear(); continue; } - if (obj == global) { - Py_DECREF(obj); + if (candidate == global) { Py_INCREF(module_name); + Py_DECREF(dotted_path); + Py_DECREF(candidate); return module_name; } - Py_DECREF(obj); + Py_DECREF(candidate); } /* If no module is found, use __main__. */ module_name = _PyUnicode_FromId(&PyId___main__); Py_INCREF(module_name); + Py_DECREF(dotted_path); return module_name; } -- cgit v1.2.1 From 476b2c58f65dacacd1146a92e1cce8717cd96070 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 31 Oct 2014 12:36:56 +0200 Subject: Issue #17381: Fixed handling of case-insensitive ranges in regular expressions. Added new opcode RANGE_IGNORE. --- Modules/_sre.c | 28 +++++++++++++++++++++++++--- Modules/sre.h | 2 +- Modules/sre_constants.h | 3 ++- Modules/sre_lib.h | 28 ++++++++++++++++++++++------ 4 files changed, 50 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 0dc5212e45..63778f4e6b 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -113,6 +113,11 @@ static unsigned int sre_lower(unsigned int ch) return ((ch) < 128 ? Py_TOLOWER(ch) : ch); } +static unsigned int sre_upper(unsigned int ch) +{ + return ((ch) < 128 ? Py_TOUPPER(ch) : ch); +} + /* locale-specific character predicates */ /* !(c & ~N) == (c < N+1) for any unsigned c, this avoids * warnings when c's type supports only numbers < N+1 */ @@ -124,6 +129,11 @@ static unsigned int sre_lower_locale(unsigned int ch) return ((ch) < 256 ? (unsigned int)tolower((ch)) : ch); } +static unsigned int sre_upper_locale(unsigned int ch) +{ + return ((ch) < 256 ? (unsigned int)toupper((ch)) : ch); +} + /* unicode-specific character predicates */ #define SRE_UNI_IS_DIGIT(ch) Py_UNICODE_ISDECIMAL(ch) @@ -137,6 +147,11 @@ static unsigned int sre_lower_unicode(unsigned int ch) return (unsigned int) Py_UNICODE_TOLOWER(ch); } +static unsigned int sre_upper_unicode(unsigned int ch) +{ + return (unsigned int) Py_UNICODE_TOUPPER(ch); +} + LOCAL(int) sre_category(SRE_CODE category, unsigned int ch) { @@ -377,12 +392,18 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string, state->pos = start; state->endpos = end; - if (pattern->flags & SRE_FLAG_LOCALE) + if (pattern->flags & SRE_FLAG_LOCALE) { state->lower = sre_lower_locale; - else if (pattern->flags & SRE_FLAG_UNICODE) + state->upper = sre_upper_locale; + } + else if (pattern->flags & SRE_FLAG_UNICODE) { state->lower = sre_lower_unicode; - else + state->upper = sre_upper_unicode; + } + else { state->lower = sre_lower; + state->upper = sre_upper; + } return string; err: @@ -1567,6 +1588,7 @@ _validate_charset(SRE_CODE *code, SRE_CODE *end) break; case SRE_OP_RANGE: + case SRE_OP_RANGE_IGNORE: GET_ARG; GET_ARG; break; diff --git a/Modules/sre.h b/Modules/sre.h index 35d198fead..b632165a1f 100644 --- a/Modules/sre.h +++ b/Modules/sre.h @@ -84,7 +84,7 @@ typedef struct { /* current repeat context */ SRE_REPEAT *repeat; /* hooks */ - SRE_TOLOWER_HOOK lower; + SRE_TOLOWER_HOOK lower, upper; } SRE_STATE; typedef struct { diff --git a/Modules/sre_constants.h b/Modules/sre_constants.h index 5940d5a50f..6632442efe 100644 --- a/Modules/sre_constants.h +++ b/Modules/sre_constants.h @@ -11,7 +11,7 @@ * See the _sre.c file for information on usage and redistribution. */ -#define SRE_MAGIC 20031017 +#define SRE_MAGIC 20140917 #define SRE_OP_FAILURE 0 #define SRE_OP_SUCCESS 1 #define SRE_OP_ANY 2 @@ -44,6 +44,7 @@ #define SRE_OP_REPEAT_ONE 29 #define SRE_OP_SUBPATTERN 30 #define SRE_OP_MIN_REPEAT_ONE 31 +#define SRE_OP_RANGE_IGNORE 32 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 #define SRE_AT_BEGINNING_STRING 2 diff --git a/Modules/sre_lib.h b/Modules/sre_lib.h index 5c6c5a559e..463a908b00 100644 --- a/Modules/sre_lib.h +++ b/Modules/sre_lib.h @@ -101,7 +101,7 @@ SRE(at)(SRE_STATE* state, SRE_CHAR* ptr, SRE_CODE at) } LOCAL(int) -SRE(charset)(SRE_CODE* set, SRE_CODE ch) +SRE(charset)(SRE_STATE* state, SRE_CODE* set, SRE_CODE ch) { /* check if character is a member of the given set */ @@ -142,6 +142,20 @@ SRE(charset)(SRE_CODE* set, SRE_CODE ch) set += 2; break; + case SRE_OP_RANGE_IGNORE: + /* */ + { + SRE_CODE uch; + /* ch is already lower cased */ + if (set[0] <= ch && ch <= set[1]) + return ok; + uch = state->upper(ch); + if (set[0] <= uch && uch <= set[1]) + return ok; + set += 2; + break; + } + case SRE_OP_NEGATE: ok = !ok; break; @@ -193,7 +207,7 @@ SRE(count)(SRE_STATE* state, SRE_CODE* pattern, Py_ssize_t maxcount) case SRE_OP_IN: /* repeated set */ TRACE(("|%p|%p|COUNT IN\n", pattern, ptr)); - while (ptr < end && SRE(charset)(pattern + 2, *ptr)) + while (ptr < end && SRE(charset)(state, pattern + 2, *ptr)) ptr++; break; @@ -628,7 +642,8 @@ entrance: /* match set member (or non_member) */ /* */ TRACE(("|%p|%p|IN\n", ctx->pattern, ctx->ptr)); - if (ctx->ptr >= end || !SRE(charset)(ctx->pattern + 1, *ctx->ptr)) + if (ctx->ptr >= end || + !SRE(charset)(state, ctx->pattern + 1, *ctx->ptr)) RETURN_FAILURE; ctx->pattern += ctx->pattern[0]; ctx->ptr++; @@ -657,7 +672,7 @@ entrance: case SRE_OP_IN_IGNORE: TRACE(("|%p|%p|IN_IGNORE\n", ctx->pattern, ctx->ptr)); if (ctx->ptr >= end - || !SRE(charset)(ctx->pattern+1, + || !SRE(charset)(state, ctx->pattern+1, (SRE_CODE)state->lower(*ctx->ptr))) RETURN_FAILURE; ctx->pattern += ctx->pattern[0]; @@ -688,7 +703,8 @@ entrance: continue; if (ctx->pattern[1] == SRE_OP_IN && (ctx->ptr >= end || - !SRE(charset)(ctx->pattern + 3, (SRE_CODE) *ctx->ptr))) + !SRE(charset)(state, ctx->pattern + 3, + (SRE_CODE) *ctx->ptr))) continue; state->ptr = ctx->ptr; DO_JUMP(JUMP_BRANCH, jump_branch, ctx->pattern+1); @@ -1310,7 +1326,7 @@ SRE(search)(SRE_STATE* state, SRE_CODE* pattern) /* pattern starts with a character from a known set */ end = (SRE_CHAR *)state->end; for (;;) { - while (ptr < end && !SRE(charset)(charset, *ptr)) + while (ptr < end && !SRE(charset)(state, charset, *ptr)) ptr++; if (ptr >= end) return 0; -- cgit v1.2.1 From 9c45fbe788f086db9d73c7a8d4aafcb7fc1ef85e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 5 Nov 2014 15:11:34 +0100 Subject: Issue #20597: Remove unused definition of PATH_MAX on Windows, MAXPATHLEN is now preferred. Patch written by Jeffrey Armstrong. --- Modules/main.c | 1 - 1 file changed, 1 deletion(-) (limited to 'Modules') diff --git a/Modules/main.c b/Modules/main.c index 8a9f5a25ee..c4883c95ed 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -9,7 +9,6 @@ #include #ifdef HAVE_FCNTL_H #include -#define PATH_MAX MAXPATHLEN #endif #endif -- cgit v1.2.1 From 9f866a69aeef62e7b402763b2cb77d64c998a8fd Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Sun, 9 Nov 2014 20:22:01 -0500 Subject: Issue 20152, 22821: Port the fcntl module to Argument Clinic. Along the way, fix an argumrnt to fcntl.fcntl to be an int instead of a long. Thanks to Serhiy Storchaka for reviewing my Clinic patch and for writing the patch to fix the long/int issue. --- Modules/clinic/fcntlmodule.c.h | 188 ++++++++++++++++++ Modules/fcntlmodule.c | 438 +++++++++++++++++++++-------------------- 2 files changed, 416 insertions(+), 210 deletions(-) create mode 100644 Modules/clinic/fcntlmodule.c.h (limited to 'Modules') diff --git a/Modules/clinic/fcntlmodule.c.h b/Modules/clinic/fcntlmodule.c.h new file mode 100644 index 0000000000..377e55d8c5 --- /dev/null +++ b/Modules/clinic/fcntlmodule.c.h @@ -0,0 +1,188 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(fcntl_fcntl__doc__, +"fcntl($module, fd, code, arg=None, /)\n" +"--\n" +"\n" +"Perform the operation `code` on file descriptor fd.\n" +"\n" +"The values used for `code` are operating system dependent, and are available\n" +"as constants in the fcntl module, using the same names as used in\n" +"the relevant C header files. The argument arg is optional, and\n" +"defaults to 0; it may be an int or a string. If arg is given as a string,\n" +"the return value of fcntl is a string of that length, containing the\n" +"resulting value put in the arg buffer by the operating system. The length\n" +"of the arg string is not allowed to exceed 1024 bytes. If the arg given\n" +"is an integer or if none is specified, the result value is an integer\n" +"corresponding to the return value of the fcntl call in the C code."); + +#define FCNTL_FCNTL_METHODDEF \ + {"fcntl", (PyCFunction)fcntl_fcntl, METH_VARARGS, fcntl_fcntl__doc__}, + +static PyObject * +fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg); + +static PyObject * +fcntl_fcntl(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int code; + PyObject *arg = NULL; + + if (!PyArg_ParseTuple(args, + "O&i|O:fcntl", + conv_descriptor, &fd, &code, &arg)) + goto exit; + return_value = fcntl_fcntl_impl(module, fd, code, arg); + +exit: + return return_value; +} + +PyDoc_STRVAR(fcntl_ioctl__doc__, +"ioctl($module, fd, op, arg=None, mutate_flag=True, /)\n" +"--\n" +"\n" +"Perform the operation op on file descriptor fd.\n" +"\n" +"The values used for op are operating system dependent, and are available as\n" +"constants in the fcntl or termios library modules, using the same names as\n" +"used in the relevant C header files.\n" +"\n" +"The argument `arg` is optional, and defaults to 0; it may be an int or a\n" +"buffer containing character data (most likely a string or an array).\n" +"\n" +"If the argument is a mutable buffer (such as an array) and if the\n" +"mutate_flag argument (which is only allowed in this case) is true then the\n" +"buffer is (in effect) passed to the operating system and changes made by\n" +"the OS will be reflected in the contents of the buffer after the call has\n" +"returned. The return value is the integer returned by the ioctl system\n" +"call.\n" +"\n" +"If the argument is a mutable buffer and the mutable_flag argument is not\n" +"passed or is false, the behavior is as if a string had been passed. This\n" +"behavior will change in future releases of Python.\n" +"\n" +"If the argument is an immutable buffer (most likely a string) then a copy\n" +"of the buffer is passed to the operating system and the return value is a\n" +"string of the same length containing whatever the operating system put in\n" +"the buffer. The length of the arg buffer in this case is not allowed to\n" +"exceed 1024 bytes.\n" +"\n" +"If the arg given is an integer or if none is specified, the result value is\n" +"an integer corresponding to the return value of the ioctl call in the C\n" +"code."); + +#define FCNTL_IOCTL_METHODDEF \ + {"ioctl", (PyCFunction)fcntl_ioctl, METH_VARARGS, fcntl_ioctl__doc__}, + +static PyObject * +fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg); + +static PyObject * +fcntl_ioctl(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + unsigned int code; + PyObject *ob_arg = NULL; + int mutate_arg = 1; + + if (!PyArg_ParseTuple(args, + "O&I|Op:ioctl", + conv_descriptor, &fd, &code, &ob_arg, &mutate_arg)) + goto exit; + return_value = fcntl_ioctl_impl(module, fd, code, ob_arg, mutate_arg); + +exit: + return return_value; +} + +PyDoc_STRVAR(fcntl_flock__doc__, +"flock($module, fd, code, /)\n" +"--\n" +"\n" +"Perform the lock operation op on file descriptor fd.\n" +"\n" +"See the Unix manual page for flock(2) for details (On some systems, this\n" +"function is emulated using fcntl())."); + +#define FCNTL_FLOCK_METHODDEF \ + {"flock", (PyCFunction)fcntl_flock, METH_VARARGS, fcntl_flock__doc__}, + +static PyObject * +fcntl_flock_impl(PyModuleDef *module, int fd, int code); + +static PyObject * +fcntl_flock(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int code; + + if (!PyArg_ParseTuple(args, + "O&i:flock", + conv_descriptor, &fd, &code)) + goto exit; + return_value = fcntl_flock_impl(module, fd, code); + +exit: + return return_value; +} + +PyDoc_STRVAR(fcntl_lockf__doc__, +"lockf($module, fd, code, lenobj=None, startobj=None, whence=0, /)\n" +"--\n" +"\n" +"A wrapper around the fcntl() locking calls.\n" +"\n" +"fd is the file descriptor of the file to lock or unlock, and operation is one\n" +"of the following values:\n" +"\n" +" LOCK_UN - unlock\n" +" LOCK_SH - acquire a shared lock\n" +" LOCK_EX - acquire an exclusive lock\n" +"\n" +"When operation is LOCK_SH or LOCK_EX, it can also be bitwise ORed with\n" +"LOCK_NB to avoid blocking on lock acquisition. If LOCK_NB is used and the\n" +"lock cannot be acquired, an IOError will be raised and the exception will\n" +"have an errno attribute set to EACCES or EAGAIN (depending on the operating\n" +"system -- for portability, check for either value).\n" +"\n" +"length is the number of bytes to lock, with the default meaning to lock to\n" +"EOF. start is the byte offset, relative to whence, to that the lock\n" +"starts. whence is as with fileobj.seek(), specifically:\n" +"\n" +" 0 - relative to the start of the file (SEEK_SET)\n" +" 1 - relative to the current buffer position (SEEK_CUR)\n" +" 2 - relative to the end of the file (SEEK_END)"); + +#define FCNTL_LOCKF_METHODDEF \ + {"lockf", (PyCFunction)fcntl_lockf, METH_VARARGS, fcntl_lockf__doc__}, + +static PyObject * +fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence); + +static PyObject * +fcntl_lockf(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int code; + PyObject *lenobj = NULL; + PyObject *startobj = NULL; + int whence = 0; + + if (!PyArg_ParseTuple(args, + "O&i|OOi:lockf", + conv_descriptor, &fd, &code, &lenobj, &startobj, &whence)) + goto exit; + return_value = fcntl_lockf_impl(module, fd, code, lenobj, startobj, whence); + +exit: + return return_value; +} +/*[clinic end generated code: output=84bdde73a92f7c61 input=a9049054013a1b77]*/ diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c index 56e40212d1..87662dd66e 100644 --- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -15,6 +15,12 @@ #include #endif +/*[clinic input] +output preset file +module fcntl +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=c7356fdb126a904a]*/ + static int conv_descriptor(PyObject *object, int *target) { @@ -26,48 +32,72 @@ conv_descriptor(PyObject *object, int *target) return 1; } +/* Must come after conv_descriptor definition. */ +#include "clinic/fcntlmodule.c.h" + +/*[clinic input] +fcntl.fcntl + + fd: object(type='int', converter='conv_descriptor') + code: int + arg: object = NULL + / -/* fcntl(fd, op, [arg]) */ +Perform the operation `code` on file descriptor fd. + +The values used for `code` are operating system dependent, and are available +as constants in the fcntl module, using the same names as used in +the relevant C header files. The argument arg is optional, and +defaults to 0; it may be an int or a string. If arg is given as a string, +the return value of fcntl is a string of that length, containing the +resulting value put in the arg buffer by the operating system. The length +of the arg string is not allowed to exceed 1024 bytes. If the arg given +is an integer or if none is specified, the result value is an integer +corresponding to the return value of the fcntl call in the C code. +[clinic start generated code]*/ static PyObject * -fcntl_fcntl(PyObject *self, PyObject *args) +fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg) +/*[clinic end generated code: output=afc5bfa74a03ef0d input=4850c13a41e86930]*/ { - int fd; - int code; - long arg; + int int_arg = 0; int ret; char *str; Py_ssize_t len; char buf[1024]; - if (PyArg_ParseTuple(args, "O&is#:fcntl", - conv_descriptor, &fd, &code, &str, &len)) { - if ((size_t)len > sizeof buf) { - PyErr_SetString(PyExc_ValueError, - "fcntl string arg too long"); - return NULL; + if (arg != NULL) { + int parse_result; + + if (PyArg_Parse(arg, "s#", &str, &len)) { + if ((size_t)len > sizeof buf) { + PyErr_SetString(PyExc_ValueError, + "fcntl string arg too long"); + return NULL; + } + memcpy(buf, str, len); + Py_BEGIN_ALLOW_THREADS + ret = fcntl(fd, code, buf); + Py_END_ALLOW_THREADS + if (ret < 0) { + PyErr_SetFromErrno(PyExc_IOError); + return NULL; + } + return PyBytes_FromStringAndSize(buf, len); } - memcpy(buf, str, len); - Py_BEGIN_ALLOW_THREADS - ret = fcntl(fd, code, buf); - Py_END_ALLOW_THREADS - if (ret < 0) { - PyErr_SetFromErrno(PyExc_IOError); - return NULL; + + PyErr_Clear(); + parse_result = PyArg_Parse(arg, + "l;fcntl requires a file or file descriptor," + " an integer and optionally a third integer or a string", + &int_arg); + if (!parse_result) { + return NULL; } - return PyBytes_FromStringAndSize(buf, len); } - PyErr_Clear(); - arg = 0; - if (!PyArg_ParseTuple(args, - "O&i|l;fcntl requires a file or file descriptor," - " an integer and optionally a third integer or a string", - conv_descriptor, &fd, &code, &arg)) { - return NULL; - } Py_BEGIN_ALLOW_THREADS - ret = fcntl(fd, code, arg); + ret = fcntl(fd, code, int_arg); Py_END_ALLOW_THREADS if (ret < 0) { PyErr_SetFromErrno(PyExc_IOError); @@ -76,29 +106,53 @@ fcntl_fcntl(PyObject *self, PyObject *args) return PyLong_FromLong((long)ret); } -PyDoc_STRVAR(fcntl_doc, -"fcntl(fd, op, [arg])\n\ -\n\ -Perform the operation op on file descriptor fd. The values used\n\ -for op are operating system dependent, and are available\n\ -as constants in the fcntl module, using the same names as used in\n\ -the relevant C header files. The argument arg is optional, and\n\ -defaults to 0; it may be an int or a string. If arg is given as a string,\n\ -the return value of fcntl is a string of that length, containing the\n\ -resulting value put in the arg buffer by the operating system. The length\n\ -of the arg string is not allowed to exceed 1024 bytes. If the arg given\n\ -is an integer or if none is specified, the result value is an integer\n\ -corresponding to the return value of the fcntl call in the C code."); +/*[clinic input] +fcntl.ioctl + + fd: object(type='int', converter='conv_descriptor') + op as code: unsigned_int(bitwise=True) + arg as ob_arg: object = NULL + mutate_flag as mutate_arg: bool = True + / -/* ioctl(fd, op, [arg]) */ +Perform the operation op on file descriptor fd. + +The values used for op are operating system dependent, and are available as +constants in the fcntl or termios library modules, using the same names as +used in the relevant C header files. + +The argument `arg` is optional, and defaults to 0; it may be an int or a +buffer containing character data (most likely a string or an array). + +If the argument is a mutable buffer (such as an array) and if the +mutate_flag argument (which is only allowed in this case) is true then the +buffer is (in effect) passed to the operating system and changes made by +the OS will be reflected in the contents of the buffer after the call has +returned. The return value is the integer returned by the ioctl system +call. + +If the argument is a mutable buffer and the mutable_flag argument is not +passed or is false, the behavior is as if a string had been passed. This +behavior will change in future releases of Python. + +If the argument is an immutable buffer (most likely a string) then a copy +of the buffer is passed to the operating system and the return value is a +string of the same length containing whatever the operating system put in +the buffer. The length of the arg buffer in this case is not allowed to +exceed 1024 bytes. + +If the arg given is an integer or if none is specified, the result value is +an integer corresponding to the return value of the ioctl call in the C +code. +[clinic start generated code]*/ static PyObject * -fcntl_ioctl(PyObject *self, PyObject *args) +fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg) +/*[clinic end generated code: output=ad47738c118622bf input=a55a6ee8e494c449]*/ { #define IOCTL_BUFSZ 1024 - int fd; - /* In PyArg_ParseTuple below, we use the unsigned non-checked 'I' + /* We use the unsigned non-checked 'I' format for the 'code' parameter because Python turns 0x8000000 into either a large positive number (PyLong or PyInt on 64-bit platforms) or a negative number on others (32-bit PyInt) @@ -111,101 +165,98 @@ fcntl_ioctl(PyObject *self, PyObject *args) in their unsigned long ioctl codes this will break and need special casing based on the platform being built on. */ - unsigned int code; - int arg; + int arg = 0; int ret; Py_buffer pstr; char *str; Py_ssize_t len; - int mutate_arg = 1; char buf[IOCTL_BUFSZ+1]; /* argument plus NUL byte */ - if (PyArg_ParseTuple(args, "O&Iw*|i:ioctl", - conv_descriptor, &fd, &code, - &pstr, &mutate_arg)) { - char *arg; - str = pstr.buf; - len = pstr.len; - - if (mutate_arg) { - if (len <= IOCTL_BUFSZ) { - memcpy(buf, str, len); - buf[len] = '\0'; - arg = buf; + if (ob_arg != NULL) { + if (PyArg_Parse(ob_arg, "w*:ioctl", &pstr)) { + char *arg; + str = pstr.buf; + len = pstr.len; + + if (mutate_arg) { + if (len <= IOCTL_BUFSZ) { + memcpy(buf, str, len); + buf[len] = '\0'; + arg = buf; + } + else { + arg = str; + } + } + else { + if (len > IOCTL_BUFSZ) { + PyBuffer_Release(&pstr); + PyErr_SetString(PyExc_ValueError, + "ioctl string arg too long"); + return NULL; + } + else { + memcpy(buf, str, len); + buf[len] = '\0'; + arg = buf; + } + } + if (buf == arg) { + Py_BEGIN_ALLOW_THREADS /* think array.resize() */ + ret = ioctl(fd, code, arg); + Py_END_ALLOW_THREADS + } + else { + ret = ioctl(fd, code, arg); + } + if (mutate_arg && (len <= IOCTL_BUFSZ)) { + memcpy(str, buf, len); + } + PyBuffer_Release(&pstr); /* No further access to str below this point */ + if (ret < 0) { + PyErr_SetFromErrno(PyExc_IOError); + return NULL; + } + if (mutate_arg) { + return PyLong_FromLong(ret); } else { - arg = str; + return PyBytes_FromStringAndSize(buf, len); } } - else { + + PyErr_Clear(); + if (PyArg_Parse(ob_arg, "s*:ioctl", &pstr)) { + str = pstr.buf; + len = pstr.len; if (len > IOCTL_BUFSZ) { PyBuffer_Release(&pstr); PyErr_SetString(PyExc_ValueError, - "ioctl string arg too long"); + "ioctl string arg too long"); return NULL; } - else { - memcpy(buf, str, len); - buf[len] = '\0'; - arg = buf; - } - } - if (buf == arg) { - Py_BEGIN_ALLOW_THREADS /* think array.resize() */ - ret = ioctl(fd, code, arg); + memcpy(buf, str, len); + buf[len] = '\0'; + Py_BEGIN_ALLOW_THREADS + ret = ioctl(fd, code, buf); Py_END_ALLOW_THREADS - } - else { - ret = ioctl(fd, code, arg); - } - if (mutate_arg && (len <= IOCTL_BUFSZ)) { - memcpy(str, buf, len); - } - PyBuffer_Release(&pstr); /* No further access to str below this point */ - if (ret < 0) { - PyErr_SetFromErrno(PyExc_IOError); - return NULL; - } - if (mutate_arg) { - return PyLong_FromLong(ret); - } - else { + if (ret < 0) { + PyBuffer_Release(&pstr); + PyErr_SetFromErrno(PyExc_IOError); + return NULL; + } + PyBuffer_Release(&pstr); return PyBytes_FromStringAndSize(buf, len); } - } - PyErr_Clear(); - if (PyArg_ParseTuple(args, "O&Is*:ioctl", - conv_descriptor, &fd, &code, &pstr)) { - str = pstr.buf; - len = pstr.len; - if (len > IOCTL_BUFSZ) { - PyBuffer_Release(&pstr); - PyErr_SetString(PyExc_ValueError, - "ioctl string arg too long"); - return NULL; + PyErr_Clear(); + if (!PyArg_Parse(ob_arg, + "i;ioctl requires a file or file descriptor," + " an integer and optionally an integer or buffer argument", + &arg)) { + return NULL; } - memcpy(buf, str, len); - buf[len] = '\0'; - Py_BEGIN_ALLOW_THREADS - ret = ioctl(fd, code, buf); - Py_END_ALLOW_THREADS - if (ret < 0) { - PyBuffer_Release(&pstr); - PyErr_SetFromErrno(PyExc_IOError); - return NULL; - } - PyBuffer_Release(&pstr); - return PyBytes_FromStringAndSize(buf, len); - } - - PyErr_Clear(); - arg = 0; - if (!PyArg_ParseTuple(args, - "O&I|i;ioctl requires a file or file descriptor," - " an integer and optionally an integer or buffer argument", - conv_descriptor, &fd, &code, &arg)) { - return NULL; + // Fall-through to outside the 'if' statement. } Py_BEGIN_ALLOW_THREADS ret = ioctl(fd, code, arg); @@ -218,52 +269,25 @@ fcntl_ioctl(PyObject *self, PyObject *args) #undef IOCTL_BUFSZ } -PyDoc_STRVAR(ioctl_doc, -"ioctl(fd, op[, arg[, mutate_flag]])\n\ -\n\ -Perform the operation op on file descriptor fd. The values used for op\n\ -are operating system dependent, and are available as constants in the\n\ -fcntl or termios library modules, using the same names as used in the\n\ -relevant C header files.\n\ -\n\ -The argument arg is optional, and defaults to 0; it may be an int or a\n\ -buffer containing character data (most likely a string or an array). \n\ -\n\ -If the argument is a mutable buffer (such as an array) and if the\n\ -mutate_flag argument (which is only allowed in this case) is true then the\n\ -buffer is (in effect) passed to the operating system and changes made by\n\ -the OS will be reflected in the contents of the buffer after the call has\n\ -returned. The return value is the integer returned by the ioctl system\n\ -call.\n\ -\n\ -If the argument is a mutable buffer and the mutable_flag argument is not\n\ -passed or is false, the behavior is as if a string had been passed. This\n\ -behavior will change in future releases of Python.\n\ -\n\ -If the argument is an immutable buffer (most likely a string) then a copy\n\ -of the buffer is passed to the operating system and the return value is a\n\ -string of the same length containing whatever the operating system put in\n\ -the buffer. The length of the arg buffer in this case is not allowed to\n\ -exceed 1024 bytes.\n\ -\n\ -If the arg given is an integer or if none is specified, the result value is\n\ -an integer corresponding to the return value of the ioctl call in the C\n\ -code."); - - -/* flock(fd, operation) */ +/*[clinic input] +fcntl.flock + + fd: object(type='int', converter='conv_descriptor') + code: int + / + +Perform the lock operation op on file descriptor fd. + +See the Unix manual page for flock(2) for details (On some systems, this +function is emulated using fcntl()). +[clinic start generated code]*/ static PyObject * -fcntl_flock(PyObject *self, PyObject *args) +fcntl_flock_impl(PyModuleDef *module, int fd, int code) +/*[clinic end generated code: output=c9035133a7dbfc96 input=b762aa9448d05e43]*/ { - int fd; - int code; int ret; - if (!PyArg_ParseTuple(args, "O&i:flock", - conv_descriptor, &fd, &code)) - return NULL; - #ifdef HAVE_FLOCK Py_BEGIN_ALLOW_THREADS ret = flock(fd, code); @@ -299,29 +323,49 @@ fcntl_flock(PyObject *self, PyObject *args) PyErr_SetFromErrno(PyExc_IOError); return NULL; } - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } -PyDoc_STRVAR(flock_doc, -"flock(fd, operation)\n\ -\n\ -Perform the lock operation op on file descriptor fd. See the Unix \n\ -manual page for flock(2) for details. (On some systems, this function is\n\ -emulated using fcntl().)"); +/*[clinic input] +fcntl.lockf + + fd: object(type='int', converter='conv_descriptor') + code: int + lenobj: object = NULL + startobj: object = NULL + whence: int = 0 + / + +A wrapper around the fcntl() locking calls. + +fd is the file descriptor of the file to lock or unlock, and operation is one +of the following values: + + LOCK_UN - unlock + LOCK_SH - acquire a shared lock + LOCK_EX - acquire an exclusive lock + +When operation is LOCK_SH or LOCK_EX, it can also be bitwise ORed with +LOCK_NB to avoid blocking on lock acquisition. If LOCK_NB is used and the +lock cannot be acquired, an IOError will be raised and the exception will +have an errno attribute set to EACCES or EAGAIN (depending on the operating +system -- for portability, check for either value). + +length is the number of bytes to lock, with the default meaning to lock to +EOF. start is the byte offset, relative to whence, to that the lock +starts. whence is as with fileobj.seek(), specifically: + + 0 - relative to the start of the file (SEEK_SET) + 1 - relative to the current buffer position (SEEK_CUR) + 2 - relative to the end of the file (SEEK_END) +[clinic start generated code]*/ -/* lockf(fd, operation) */ static PyObject * -fcntl_lockf(PyObject *self, PyObject *args) +fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence) +/*[clinic end generated code: output=5536df2892bf3ce9 input=44856fa06db36184]*/ { - int fd, code, ret, whence = 0; - PyObject *lenobj = NULL, *startobj = NULL; - - if (!PyArg_ParseTuple(args, "O&i|OOi:lockf", - conv_descriptor, &fd, &code, - &lenobj, &startobj, &whence)) - return NULL; + int ret; #ifndef LOCK_SH #define LOCK_SH 1 /* shared lock */ @@ -374,43 +418,17 @@ fcntl_lockf(PyObject *self, PyObject *args) PyErr_SetFromErrno(PyExc_IOError); return NULL; } - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } -PyDoc_STRVAR(lockf_doc, -"lockf (fd, operation, length=0, start=0, whence=0)\n\ -\n\ -This is essentially a wrapper around the fcntl() locking calls. fd is the\n\ -file descriptor of the file to lock or unlock, and operation is one of the\n\ -following values:\n\ -\n\ - LOCK_UN - unlock\n\ - LOCK_SH - acquire a shared lock\n\ - LOCK_EX - acquire an exclusive lock\n\ -\n\ -When operation is LOCK_SH or LOCK_EX, it can also be bitwise ORed with\n\ -LOCK_NB to avoid blocking on lock acquisition. If LOCK_NB is used and the\n\ -lock cannot be acquired, an IOError will be raised and the exception will\n\ -have an errno attribute set to EACCES or EAGAIN (depending on the operating\n\ -system -- for portability, check for either value).\n\ -\n\ -length is the number of bytes to lock, with the default meaning to lock to\n\ -EOF. start is the byte offset, relative to whence, to that the lock\n\ -starts. whence is as with fileobj.seek(), specifically:\n\ -\n\ - 0 - relative to the start of the file (SEEK_SET)\n\ - 1 - relative to the current buffer position (SEEK_CUR)\n\ - 2 - relative to the end of the file (SEEK_END)"); - /* List of functions */ static PyMethodDef fcntl_methods[] = { - {"fcntl", fcntl_fcntl, METH_VARARGS, fcntl_doc}, - {"ioctl", fcntl_ioctl, METH_VARARGS, ioctl_doc}, - {"flock", fcntl_flock, METH_VARARGS, flock_doc}, - {"lockf", fcntl_lockf, METH_VARARGS, lockf_doc}, - {NULL, NULL} /* sentinel */ + FCNTL_FCNTL_METHODDEF + FCNTL_IOCTL_METHODDEF + FCNTL_FLOCK_METHODDEF + FCNTL_LOCKF_METHODDEF + {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From 86a58dabec40bfb4c112b918cabd7eb21e52183c Mon Sep 17 00:00:00 2001 From: Nick Coghlan Date: Thu, 20 Nov 2014 21:39:37 +1000 Subject: Issue #22869: Split pythonrun into two modules - interpreter startup and shutdown code moved to a new pylifecycle.c module - Py_OptimizeFlag moved into the new module with the other global flags --- Modules/atexitmodule.c | 2 +- Modules/signalmodule.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/atexitmodule.c b/Modules/atexitmodule.c index 98870141dd..79e9962fc2 100644 --- a/Modules/atexitmodule.c +++ b/Modules/atexitmodule.c @@ -60,7 +60,7 @@ atexit_cleanup(atexitmodule_state *modstate) modstate->ncallbacks = 0; } -/* Installed into pythonrun.c's atexit mechanism */ +/* Installed into pylifecycle.c's atexit mechanism */ static void atexit_callfuncs(void) diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 38c5d21cba..eabe2f0970 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -304,7 +304,7 @@ signal_handler(int sig_num) if (sig_num != SIGCHLD) #endif /* If the handler was not set up with sigaction, reinstall it. See - * Python/pythonrun.c for the implementation of PyOS_setsig which + * Python/pylifecycle.c for the implementation of PyOS_setsig which * makes this true. See also issue8354. */ PyOS_setsig(sig_num, signal_handler); #endif -- cgit v1.2.1 From e96539895c32834c304bda68e17702b7d69801dc Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 26 Nov 2014 13:58:16 -0600 Subject: add readline.append_history_file (closes #22940) patch by "bru" --- Modules/readline.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'Modules') diff --git a/Modules/readline.c b/Modules/readline.c index f349d3b109..b5a0eba50b 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -237,6 +237,41 @@ Save a readline history file.\n\ The default filename is ~/.history."); +/* Exported function to save part of a readline history file */ + +static PyObject * +append_history_file(PyObject *self, PyObject *args) +{ + int nelements; + PyObject *filename_obj = Py_None, *filename_bytes; + char *filename; + int err; + if (!PyArg_ParseTuple(args, "i|O:append_history_file", &nelements, &filename_obj)) + return NULL; + if (filename_obj != Py_None) { + if (!PyUnicode_FSConverter(filename_obj, &filename_bytes)) + return NULL; + filename = PyBytes_AsString(filename_bytes); + } else { + filename_bytes = NULL; + filename = NULL; + } + errno = err = append_history(nelements, filename); + if (!err && _history_length >= 0) + history_truncate_file(filename, _history_length); + Py_XDECREF(filename_bytes); + errno = err; + if (errno) + return PyErr_SetFromErrno(PyExc_IOError); + Py_RETURN_NONE; +} + +PyDoc_STRVAR(doc_append_history_file, +"append_history_file(nelements[, filename]) -> None\n\ +Append the last nelements of the history list to file.\n\ +The default filename is ~/.history."); + + /* Set history length */ static PyObject* @@ -747,6 +782,8 @@ static struct PyMethodDef readline_methods[] = METH_VARARGS, doc_read_history_file}, {"write_history_file", write_history_file, METH_VARARGS, doc_write_history_file}, + {"append_history_file", append_history_file, + METH_VARARGS, doc_append_history_file}, {"get_history_item", get_history_item, METH_VARARGS, doc_get_history_item}, {"get_current_history_length", (PyCFunction)get_current_history_length, -- cgit v1.2.1 From e884ac9e6968cd7c6eb804b2a979f7d0f9293dd7 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 26 Nov 2014 14:35:12 -0600 Subject: only support append_history if readline has it --- Modules/readline.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Modules') diff --git a/Modules/readline.c b/Modules/readline.c index b5a0eba50b..7e0282c578 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -237,6 +237,7 @@ Save a readline history file.\n\ The default filename is ~/.history."); +#ifdef HAVE_RL_APPEND_HISTORY /* Exported function to save part of a readline history file */ static PyObject * @@ -270,6 +271,7 @@ PyDoc_STRVAR(doc_append_history_file, "append_history_file(nelements[, filename]) -> None\n\ Append the last nelements of the history list to file.\n\ The default filename is ~/.history."); +#endif /* Set history length */ @@ -782,7 +784,9 @@ static struct PyMethodDef readline_methods[] = METH_VARARGS, doc_read_history_file}, {"write_history_file", write_history_file, METH_VARARGS, doc_write_history_file}, +#ifdef HAVE_RL_APPEND_HISTORY {"append_history_file", append_history_file, +#endif METH_VARARGS, doc_append_history_file}, {"get_history_item", get_history_item, METH_VARARGS, doc_get_history_item}, -- cgit v1.2.1 From 975a28dc133438b24ac0df58be637c65839ce3cc Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Wed, 26 Nov 2014 13:02:33 -0800 Subject: Issue 22940: fixes to editline support --- Modules/readline.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/readline.c b/Modules/readline.c index 7e0282c578..26dfffbfaa 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -786,8 +786,8 @@ static struct PyMethodDef readline_methods[] = METH_VARARGS, doc_write_history_file}, #ifdef HAVE_RL_APPEND_HISTORY {"append_history_file", append_history_file, -#endif METH_VARARGS, doc_append_history_file}, +#endif {"get_history_item", get_history_item, METH_VARARGS, doc_get_history_item}, {"get_current_history_length", (PyCFunction)get_current_history_length, -- cgit v1.2.1 From e7faceda502a72b3b24914a7869786e00cb1351f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 28 Nov 2014 13:28:25 +0100 Subject: Issue #21356: Make ssl.RAND_egd() optional to support LibreSSL. The availability of the function is checked during the compilation. Patch written by Bernard Spil. --- Modules/_ssl.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index de9a5b4e09..29e7469b62 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3713,6 +3713,7 @@ Returns 1 if the OpenSSL PRNG has been seeded with enough data and 0 if not.\n\ It is necessary to seed the PRNG with RAND_add() on some platforms before\n\ using the ssl() function."); +#ifdef HAVE_RAND_EGD static PyObject * PySSL_RAND_egd(PyObject *self, PyObject *args) { @@ -3740,6 +3741,7 @@ PyDoc_STRVAR(PySSL_RAND_egd_doc, Queries the entropy gather daemon (EGD) on the socket named by 'path'.\n\ Returns number of bytes read. Raises SSLError if connection to EGD\n\ fails or if it does not provide enough data to seed PRNG."); +#endif /* HAVE_RAND_EGD */ #endif /* HAVE_OPENSSL_RAND */ @@ -4135,8 +4137,10 @@ static PyMethodDef PySSL_methods[] = { PySSL_RAND_bytes_doc}, {"RAND_pseudo_bytes", PySSL_RAND_pseudo_bytes, METH_VARARGS, PySSL_RAND_pseudo_bytes_doc}, +#ifdef HAVE_RAND_EGD {"RAND_egd", PySSL_RAND_egd, METH_VARARGS, PySSL_RAND_egd_doc}, +#endif {"RAND_status", (PyCFunction)PySSL_RAND_status, METH_NOARGS, PySSL_RAND_status_doc}, #endif -- cgit v1.2.1 From e46e1aeb145d9c607491706251d1e7dd73e0a836 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Tue, 2 Dec 2014 00:20:03 +0100 Subject: Fix uninitialized variable after #22676. --- Modules/_pickle.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index a13eff32c3..ecf0c6ca95 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1547,10 +1547,16 @@ get_dotted_path(PyObject *obj, PyObject *name, int allow_qualname) { n = PyList_GET_SIZE(dotted_path); assert(n >= 1); if (!allow_qualname && n > 1) { - PyErr_Format(PyExc_AttributeError, - "Can't get qualified attribute %R on %R;" - "use protocols >= 4 to enable support", - name, obj); + if (obj == NULL) + PyErr_Format(PyExc_AttributeError, + "Can't pickle qualified object %R; " + "use protocols >= 4 to enable support", + name); + else + PyErr_Format(PyExc_AttributeError, + "Can't pickle qualified attribute %R on %R; " + "use protocols >= 4 to enable support", + name, obj); Py_DECREF(dotted_path); return NULL; } @@ -1562,8 +1568,12 @@ get_dotted_path(PyObject *obj, PyObject *name, int allow_qualname) { assert(PyBool_Check(result)); Py_DECREF(result); if (is_equal) { - PyErr_Format(PyExc_AttributeError, - "Can't get local attribute %R on %R", name, obj); + if (obj == NULL) + PyErr_Format(PyExc_AttributeError, + "Can't pickle local object %R", name); + else + PyErr_Format(PyExc_AttributeError, + "Can't pickle local attribute %R on %R", name, obj); Py_DECREF(dotted_path); return NULL; } @@ -1653,7 +1663,7 @@ whichmodule(PyObject *global, PyObject *global_name, int allow_qualname) return NULL; } - dotted_path = get_dotted_path(module, global_name, allow_qualname); + dotted_path = get_dotted_path(NULL, global_name, allow_qualname); if (dotted_path == NULL) return NULL; -- cgit v1.2.1 From 43abb9b2590a83b4804d2213c27827ab9654f4e8 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 2 Dec 2014 23:39:56 +0200 Subject: Issue #17401: Output the closefd attribute as boolean. --- Modules/_io/fileio.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 5c1316e9f4..80af83a7a4 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -1055,13 +1055,13 @@ fileio_repr(fileio *self) else return NULL; res = PyUnicode_FromFormat( - "<_io.FileIO fd=%d mode='%s' closefd='%d'>", - self->fd, mode_string(self), self->closefd); + "<_io.FileIO fd=%d mode='%s' closefd=%s>", + self->fd, mode_string(self), self->closefd ? "True" : "False"); } else { res = PyUnicode_FromFormat( - "<_io.FileIO name=%R mode='%s' closefd='%d'>", - nameobj, mode_string(self), self->closefd); + "<_io.FileIO name=%R mode='%s' closefd=%s>", + nameobj, mode_string(self), self->closefd ? "True" : "False"); Py_DECREF(nameobj); } return res; -- cgit v1.2.1 From f493b0c80767c84a305b47e345a2bb0dacafaa19 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 5 Dec 2014 22:51:51 +0100 Subject: Issue #9647: os.confstr() ensures that the second call to confstr() returns the same length. --- Modules/posixmodule.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index eb0a68d947..bd7cd8ad48 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -14369,10 +14369,12 @@ os_confstr_impl(PyModuleDef *module, int name) } if (len >= sizeof(buffer)) { + size_t len2; char *buf = PyMem_Malloc(len); if (buf == NULL) return PyErr_NoMemory(); - confstr(name, buf, len); + len2 = confstr(name, buf, len); + assert(len == len2); result = PyUnicode_DecodeFSDefaultAndSize(buf, len-1); PyMem_Free(buf); } -- cgit v1.2.1 From abd788eff0d3cda18a5b03bc92e556b2786150a3 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 22 Nov 2014 12:54:57 -0800 Subject: Issue #22919: Windows build updated to support VC 14.0 (Visual Studio 2015), which will be used for the official 3.5 release. --- Modules/posixmodule.c | 22 ++++++++++++++++++++-- Modules/socketmodule.c | 11 ++++++++++- Modules/timemodule.c | 13 ------------- 3 files changed, 30 insertions(+), 16 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index bd7cd8ad48..d8e2441331 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1046,15 +1046,33 @@ PyLong_FromPy_off_t(Py_off_t offset) /* The actual size of the structure is determined at runtime. * Only the first items must be present. */ + +#if _MSC_VER >= 1900 + +typedef struct { + CRITICAL_SECTION lock; + intptr_t osfhnd; + __int64 startpos; + char osfile; +} my_ioinfo; + +#define IOINFO_L2E 6 +#define IOINFO_ARRAYS 128 + +#else + typedef struct { intptr_t osfhnd; char osfile; } my_ioinfo; -extern __declspec(dllimport) char * __pioinfo[]; #define IOINFO_L2E 5 -#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E) #define IOINFO_ARRAYS 64 + +#endif + +extern __declspec(dllimport) char * __pioinfo[]; +#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E) #define _NHANDLE_ (IOINFO_ARRAYS * IOINFO_ARRAY_ELTS) #define FOPEN 0x01 #define _NO_CONSOLE_FILENO (intptr_t)-2 diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 68bfeb4f19..94cf7738e4 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -284,6 +284,11 @@ if_indextoname(index) -- return the corresponding interface name\n\ # include # endif +#if defined(_MSC_VER) && _MSC_VER >= 1800 +/* Provides the IsWindows7SP1OrGreater() function */ +#include +#endif + #endif #include @@ -5845,11 +5850,15 @@ PyInit__socket(void) #ifdef MS_WINDOWS if (support_wsa_no_inherit == -1) { +#if defined(_MSC_VER) && _MSC_VER >= 1800 + support_wsa_no_inherit = IsWindows7SP1OrGreater(); +#else DWORD version = GetVersion(); DWORD major = (DWORD)LOBYTE(LOWORD(version)); DWORD minor = (DWORD)HIBYTE(LOWORD(version)); /* need Windows 7 SP1, 2008 R2 SP1 or later */ - support_wsa_no_inherit = (major >= 6 && minor >= 1); + support_wsa_no_inherit = major > 6 || (major == 6 && minor >= 1); +#endif } #endif diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 1f07bcc90f..7f5f3149af 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -34,10 +34,6 @@ static int floatsleep(double); static PyObject* floattime(_Py_clock_info_t *info); -#ifdef MS_WINDOWS -static OSVERSIONINFOEX winver; -#endif - static PyObject * time_time(PyObject *self, PyObject *unused) { @@ -1359,15 +1355,6 @@ PyInit_time(void) if (PyStructSequence_InitType2(&StructTimeType, &struct_time_type_desc) < 0) return NULL; - -#ifdef MS_WINDOWS - winver.dwOSVersionInfoSize = sizeof(winver); - if (!GetVersionEx((OSVERSIONINFO*)&winver)) { - Py_DECREF(m); - PyErr_SetFromWindowsErr(0); - return NULL; - } -#endif } Py_INCREF(&StructTimeType); #ifdef HAVE_STRUCT_TM_TM_ZONE -- cgit v1.2.1 From 16eae13e2b94ab10d3d6b8885f3ebee9e237cef1 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 16 Dec 2014 19:43:46 +0200 Subject: Issue #22783: Pickling now uses the NEWOBJ opcode instead of the NEWOBJ_EX opcode if possible. --- Modules/_pickle.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 6416233fc6..7a234f1dff 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -3506,20 +3506,19 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj) } PyErr_Clear(); } - else if (self->proto >= 4) { - _Py_IDENTIFIER(__newobj_ex__); - use_newobj_ex = PyUnicode_Check(name) && - PyUnicode_Compare( - name, _PyUnicode_FromId(&PyId___newobj_ex__)) == 0; - Py_DECREF(name); - } - else { - _Py_IDENTIFIER(__newobj__); - use_newobj = PyUnicode_Check(name) && - PyUnicode_Compare( - name, _PyUnicode_FromId(&PyId___newobj__)) == 0; - Py_DECREF(name); + else if (PyUnicode_Check(name)) { + if (self->proto >= 4) { + _Py_IDENTIFIER(__newobj_ex__); + use_newobj_ex = PyUnicode_Compare( + name, _PyUnicode_FromId(&PyId___newobj_ex__)) == 0; + } + if (!use_newobj_ex) { + _Py_IDENTIFIER(__newobj__); + use_newobj = PyUnicode_Compare( + name, _PyUnicode_FromId(&PyId___newobj__)) == 0; + } } + Py_XDECREF(name); } if (use_newobj_ex) { -- cgit v1.2.1 From 1022c84b782c39ca54c6158ca1d0ee6ca990f2ea Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 17 Dec 2014 06:31:44 -0800 Subject: Issue #22733: MSVC ffi_prep_args doesn't handle 64-bit arguments properly --- Modules/_ctypes/libffi_msvc/ffi.c | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/libffi_msvc/ffi.c b/Modules/_ctypes/libffi_msvc/ffi.c index 76cb03efcd..b7586c70eb 100644 --- a/Modules/_ctypes/libffi_msvc/ffi.c +++ b/Modules/_ctypes/libffi_msvc/ffi.c @@ -65,37 +65,56 @@ void ffi_prep_args(char *stack, extended_cif *ecif) argp = (char *) ALIGN(argp, sizeof(void *)); z = (*p_arg)->size; - if (z < sizeof(int)) + if (z < sizeof(intptr_t)) { - z = sizeof(int); + z = sizeof(intptr_t); switch ((*p_arg)->type) { case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); + *(intptr_t *) argp = (intptr_t)*(SINT8 *)(* p_argv); break; case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); + *(uintptr_t *) argp = (uintptr_t)*(UINT8 *)(* p_argv); break; case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); + *(intptr_t *) argp = (intptr_t)*(SINT16 *)(* p_argv); break; case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); + *(uintptr_t *) argp = (uintptr_t)*(UINT16 *)(* p_argv); break; case FFI_TYPE_SINT32: - *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); + *(intptr_t *) argp = (intptr_t)*(SINT32 *)(* p_argv); break; case FFI_TYPE_UINT32: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + *(uintptr_t *) argp = (uintptr_t)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_FLOAT: + *(uintptr_t *) argp = 0; + *(float *) argp = *(float *)(* p_argv); + break; + + // 64-bit value cases should never be used for x86 and AMD64 builds + case FFI_TYPE_SINT64: + *(intptr_t *) argp = (intptr_t)*(SINT64 *)(* p_argv); + break; + + case FFI_TYPE_UINT64: + *(uintptr_t *) argp = (uintptr_t)*(UINT64 *)(* p_argv); break; case FFI_TYPE_STRUCT: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + *(uintptr_t *) argp = (uintptr_t)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_DOUBLE: + *(uintptr_t *) argp = 0; + *(double *) argp = *(double *)(* p_argv); break; default: -- cgit v1.2.1 From 59f91ec20b58af8d124ad62668cc47871ea48895 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 3 Jan 2015 23:17:23 +0100 Subject: Issue #23143: Remove compatibility with OpenSSLs older than 0.9.8. (the last 0.9.7 release was in 2007) --- Modules/_ssl.c | 53 ----------------------------------------------------- 1 file changed, 53 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 36e77395fc..1c04998ebc 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -162,13 +162,6 @@ static unsigned int _ssl_locks_count = 0; #define X509_NAME_MAXLEN 256 -/* RAND_* APIs got added to OpenSSL in 0.9.5 */ -#if OPENSSL_VERSION_NUMBER >= 0x0090500fL -# define HAVE_OPENSSL_RAND 1 -#else -# undef HAVE_OPENSSL_RAND -#endif - /* SSL_CTX_clear_options() and SSL_clear_options() were first added in * OpenSSL 0.9.8m but do not appear in some 0.9.9-dev versions such the * 0.9.9 from "May 2008" that NetBSD 5.0 uses. */ @@ -182,28 +175,6 @@ static unsigned int _ssl_locks_count = 0; * older SSL, but let's be safe */ #define PySSL_CB_MAXLEN 128 -/* SSL_get_finished got added to OpenSSL in 0.9.5 */ -#if OPENSSL_VERSION_NUMBER >= 0x0090500fL -# define HAVE_OPENSSL_FINISHED 1 -#else -# define HAVE_OPENSSL_FINISHED 0 -#endif - -/* ECDH support got added to OpenSSL in 0.9.8 */ -#if OPENSSL_VERSION_NUMBER < 0x0090800fL && !defined(OPENSSL_NO_ECDH) -# define OPENSSL_NO_ECDH -#endif - -/* compression support got added to OpenSSL in 0.9.8 */ -#if OPENSSL_VERSION_NUMBER < 0x0090800fL && !defined(OPENSSL_NO_COMP) -# define OPENSSL_NO_COMP -#endif - -/* X509_VERIFY_PARAM got added to OpenSSL in 0.9.8 */ -#if OPENSSL_VERSION_NUMBER >= 0x0090800fL -# define HAVE_OPENSSL_VERIFY_PARAM -#endif - typedef struct { PyObject_HEAD @@ -817,12 +788,7 @@ _get_peer_alt_names (X509 *certificate) { char buf[2048]; char *vptr; int len; - /* Issue #2973: ASN1_item_d2i() API changed in OpenSSL 0.9.6m */ -#if OPENSSL_VERSION_NUMBER >= 0x009060dfL const unsigned char *p; -#else - unsigned char *p; -#endif if (certificate == NULL) return peer_alt_names; @@ -1998,7 +1964,6 @@ PyDoc_STRVAR(PySSL_SSLshutdown_doc, Does the SSL shutdown handshake with the remote end, and returns\n\ the underlying socket object."); -#if HAVE_OPENSSL_FINISHED static PyObject * PySSL_tls_unique_cb(PySSLSocket *self) { @@ -2031,8 +1996,6 @@ Returns the 'tls-unique' channel binding data, as defined by RFC 5929.\n\ \n\ If the TLS handshake is not yet complete, None is returned"); -#endif /* HAVE_OPENSSL_FINISHED */ - static PyGetSetDef ssl_getsetlist[] = { {"context", (getter) PySSL_get_context, (setter) PySSL_set_context, PySSL_set_context_doc}, @@ -2063,10 +2026,8 @@ static PyMethodDef PySSLMethods[] = { {"compression", (PyCFunction)PySSL_compression, METH_NOARGS}, {"shutdown", (PyCFunction)PySSL_SSLshutdown, METH_NOARGS, PySSL_SSLshutdown_doc}, -#if HAVE_OPENSSL_FINISHED {"tls_unique_cb", (PyCFunction)PySSL_tls_unique_cb, METH_NOARGS, PySSL_tls_unique_cb_doc}, -#endif {NULL, NULL} }; @@ -2380,7 +2341,6 @@ set_verify_mode(PySSLContext *self, PyObject *arg, void *c) return 0; } -#ifdef HAVE_OPENSSL_VERIFY_PARAM static PyObject * get_verify_flags(PySSLContext *self, void *c) { @@ -2418,7 +2378,6 @@ set_verify_flags(PySSLContext *self, PyObject *arg, void *c) } return 0; } -#endif static PyObject * get_options(PySSLContext *self, void *c) @@ -3303,10 +3262,8 @@ static PyGetSetDef context_getsetlist[] = { (setter) set_check_hostname, NULL}, {"options", (getter) get_options, (setter) set_options, NULL}, -#ifdef HAVE_OPENSSL_VERIFY_PARAM {"verify_flags", (getter) get_verify_flags, (setter) set_verify_flags, NULL}, -#endif {"verify_mode", (getter) get_verify_mode, (setter) set_verify_mode, NULL}, {NULL}, /* sentinel */ @@ -3606,8 +3563,6 @@ static PyTypeObject PySSLMemoryBIO_Type = { }; -#ifdef HAVE_OPENSSL_RAND - /* helper routines for seeding the SSL PRNG */ static PyObject * PySSL_RAND_add(PyObject *self, PyObject *args) @@ -3745,8 +3700,6 @@ Returns number of bytes read. Raises SSLError if connection to EGD\n\ fails or if it does not provide enough data to seed PRNG."); #endif /* HAVE_RAND_EGD */ -#endif /* HAVE_OPENSSL_RAND */ - PyDoc_STRVAR(PySSL_get_default_verify_paths_doc, "get_default_verify_paths() -> tuple\n\ @@ -4132,7 +4085,6 @@ PySSL_enum_crls(PyObject *self, PyObject *args, PyObject *kwds) static PyMethodDef PySSL_methods[] = { {"_test_decode_cert", PySSL_test_decode_certificate, METH_VARARGS}, -#ifdef HAVE_OPENSSL_RAND {"RAND_add", PySSL_RAND_add, METH_VARARGS, PySSL_RAND_add_doc}, {"RAND_bytes", PySSL_RAND_bytes, METH_VARARGS, @@ -4145,7 +4097,6 @@ static PyMethodDef PySSL_methods[] = { #endif {"RAND_status", (PyCFunction)PySSL_RAND_status, METH_NOARGS, PySSL_RAND_status_doc}, -#endif {"get_default_verify_paths", (PyCFunction)PySSL_get_default_verify_paths, METH_NOARGS, PySSL_get_default_verify_paths_doc}, #ifdef _MSC_VER @@ -4500,11 +4451,7 @@ PyInit__ssl(void) Py_INCREF(r); PyModule_AddObject(m, "HAS_SNI", r); -#if HAVE_OPENSSL_FINISHED r = Py_True; -#else - r = Py_False; -#endif Py_INCREF(r); PyModule_AddObject(m, "HAS_TLS_UNIQUE", r); -- cgit v1.2.1 From 75a34b1bdde8bdda841f8da4d940e13a8addb631 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 3 Jan 2015 23:21:21 +0100 Subject: Issue #23143: Remove compatibility with OpenSSLs older than 0.9.8. (now the hashlib module) --- Modules/_hashopenssl.c | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index 6a2a9afd22..1566b18991 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -31,10 +31,6 @@ #define HASH_OBJ_CONSTRUCTOR 0 #endif -/* Minimum OpenSSL version needed to support sha224 and higher. */ -#if defined(OPENSSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x00908000) -#define _OPENSSL_SUPPORTS_SHA2 -#endif typedef struct { PyObject_HEAD @@ -56,12 +52,10 @@ static PyTypeObject EVPtype; DEFINE_CONSTS_FOR_NEW(md5) DEFINE_CONSTS_FOR_NEW(sha1) -#ifdef _OPENSSL_SUPPORTS_SHA2 DEFINE_CONSTS_FOR_NEW(sha224) DEFINE_CONSTS_FOR_NEW(sha256) DEFINE_CONSTS_FOR_NEW(sha384) DEFINE_CONSTS_FOR_NEW(sha512) -#endif static EVPobject * @@ -798,12 +792,10 @@ generate_hash_name_list(void) GEN_CONSTRUCTOR(md5) GEN_CONSTRUCTOR(sha1) -#ifdef _OPENSSL_SUPPORTS_SHA2 GEN_CONSTRUCTOR(sha224) GEN_CONSTRUCTOR(sha256) GEN_CONSTRUCTOR(sha384) GEN_CONSTRUCTOR(sha512) -#endif /* List of functions exported by this module */ @@ -815,12 +807,10 @@ static struct PyMethodDef EVP_functions[] = { #endif CONSTRUCTOR_METH_DEF(md5), CONSTRUCTOR_METH_DEF(sha1), -#ifdef _OPENSSL_SUPPORTS_SHA2 CONSTRUCTOR_METH_DEF(sha224), CONSTRUCTOR_METH_DEF(sha256), CONSTRUCTOR_METH_DEF(sha384), CONSTRUCTOR_METH_DEF(sha512), -#endif {NULL, NULL} /* Sentinel */ }; @@ -877,11 +867,9 @@ PyInit__hashlib(void) /* these constants are used by the convenience constructors */ INIT_CONSTRUCTOR_CONSTANTS(md5); INIT_CONSTRUCTOR_CONSTANTS(sha1); -#ifdef _OPENSSL_SUPPORTS_SHA2 INIT_CONSTRUCTOR_CONSTANTS(sha224); INIT_CONSTRUCTOR_CONSTANTS(sha256); INIT_CONSTRUCTOR_CONSTANTS(sha384); INIT_CONSTRUCTOR_CONSTANTS(sha512); -#endif return m; } -- cgit v1.2.1 From 74edad8cfa677608529c23f90bd8b9a5a91c7574 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 7 Jan 2015 11:14:26 -0600 Subject: expose the client's cipher suites from the handshake (closes #23186) --- Modules/_ssl.c | 72 +++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 51 insertions(+), 21 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 1c04998ebc..55f04ed38a 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1360,54 +1360,83 @@ If the optional argument is True, returns a DER-encoded copy of the\n\ peer certificate, or None if no certificate was provided. This will\n\ return the certificate even if it wasn't validated."); -static PyObject *PySSL_cipher (PySSLSocket *self) { - - PyObject *retval, *v; - const SSL_CIPHER *current; - char *cipher_name; - char *cipher_protocol; - - if (self->ssl == NULL) - Py_RETURN_NONE; - current = SSL_get_current_cipher(self->ssl); - if (current == NULL) - Py_RETURN_NONE; - - retval = PyTuple_New(3); +static PyObject * +cipher_to_tuple(const SSL_CIPHER *cipher) +{ + const char *cipher_name, *cipher_protocol; + PyObject *v, *retval = PyTuple_New(3); if (retval == NULL) return NULL; - cipher_name = (char *) SSL_CIPHER_get_name(current); + cipher_name = SSL_CIPHER_get_name(cipher); if (cipher_name == NULL) { Py_INCREF(Py_None); PyTuple_SET_ITEM(retval, 0, Py_None); } else { v = PyUnicode_FromString(cipher_name); if (v == NULL) - goto fail0; + goto fail; PyTuple_SET_ITEM(retval, 0, v); } - cipher_protocol = (char *) SSL_CIPHER_get_version(current); + + cipher_protocol = SSL_CIPHER_get_version(cipher); if (cipher_protocol == NULL) { Py_INCREF(Py_None); PyTuple_SET_ITEM(retval, 1, Py_None); } else { v = PyUnicode_FromString(cipher_protocol); if (v == NULL) - goto fail0; + goto fail; PyTuple_SET_ITEM(retval, 1, v); } - v = PyLong_FromLong(SSL_CIPHER_get_bits(current, NULL)); + + v = PyLong_FromLong(SSL_CIPHER_get_bits(cipher, NULL)); if (v == NULL) - goto fail0; + goto fail; PyTuple_SET_ITEM(retval, 2, v); + return retval; - fail0: + fail: Py_DECREF(retval); return NULL; } +static PyObject *PySSL_shared_ciphers(PySSLSocket *self) +{ + STACK_OF(SSL_CIPHER) *ciphers; + int i; + PyObject *res; + + if (!self->ssl->session || !self->ssl->session->ciphers) + Py_RETURN_NONE; + ciphers = self->ssl->session->ciphers; + res = PyList_New(sk_SSL_CIPHER_num(ciphers)); + if (!res) + return NULL; + for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) { + PyObject *tup = cipher_to_tuple(sk_SSL_CIPHER_value(ciphers, i)); + if (!tup) { + Py_DECREF(res); + return NULL; + } + PyList_SET_ITEM(res, i, tup); + } + return res; +} + +static PyObject *PySSL_cipher (PySSLSocket *self) +{ + const SSL_CIPHER *current; + + if (self->ssl == NULL) + Py_RETURN_NONE; + current = SSL_get_current_cipher(self->ssl); + if (current == NULL) + Py_RETURN_NONE; + return cipher_to_tuple(current); +} + static PyObject *PySSL_version(PySSLSocket *self) { const char *version; @@ -2019,6 +2048,7 @@ static PyMethodDef PySSLMethods[] = { {"peer_certificate", (PyCFunction)PySSL_peercert, METH_VARARGS, PySSL_peercert_doc}, {"cipher", (PyCFunction)PySSL_cipher, METH_NOARGS}, + {"shared_ciphers", (PyCFunction)PySSL_shared_ciphers, METH_NOARGS}, {"version", (PyCFunction)PySSL_version, METH_NOARGS}, #ifdef OPENSSL_NPN_NEGOTIATED {"selected_npn_protocol", (PyCFunction)PySSL_selected_npn_protocol, METH_NOARGS}, -- cgit v1.2.1 From d2d560198be023ae17485fab2a4eac222ebd96ed Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 7 Jan 2015 11:32:00 -0600 Subject: use SSL_get_session --- Modules/_ssl.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 55f04ed38a..596966323e 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1404,13 +1404,14 @@ cipher_to_tuple(const SSL_CIPHER *cipher) static PyObject *PySSL_shared_ciphers(PySSLSocket *self) { + SSL_SESSION *sess = SSL_get_session(self->ssl); STACK_OF(SSL_CIPHER) *ciphers; int i; PyObject *res; - if (!self->ssl->session || !self->ssl->session->ciphers) + if (!sess || !sess->ciphers) Py_RETURN_NONE; - ciphers = self->ssl->session->ciphers; + ciphers = sess->ciphers; res = PyList_New(sk_SSL_CIPHER_num(ciphers)); if (!res) return NULL; -- cgit v1.2.1 From e1916300ddd92c2a065d717fcbd07f8573516297 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 11 Jan 2015 11:55:29 +0000 Subject: Issue #23185: add math.inf and math.nan constants. --- Modules/mathmodule.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index bce3799ced..0c991cd229 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -223,6 +223,35 @@ lanczos_sum(double x) return num/den; } +/* Constant for +infinity, generated in the same way as float('inf'). */ + +static double +m_inf(void) +{ +#ifndef PY_NO_SHORT_FLOAT_REPR + return _Py_dg_infinity(0); +#else + return Py_HUGE_VAL; +#endif +} + +/* Constant nan value, generated in the same way as float('nan'). */ +/* We don't currently assume that Py_NAN is defined everywhere. */ + +#if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN) + +static double +m_nan(void) +{ +#ifndef PY_NO_SHORT_FLOAT_REPR + return _Py_dg_stdnan(0); +#else + return Py_NAN; +#endif +} + +#endif + static double m_tgamma(double x) { @@ -2009,7 +2038,11 @@ PyInit_math(void) PyModule_AddObject(m, "pi", PyFloat_FromDouble(Py_MATH_PI)); PyModule_AddObject(m, "e", PyFloat_FromDouble(Py_MATH_E)); + PyModule_AddObject(m, "inf", PyFloat_FromDouble(m_inf())); +#if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN) + PyModule_AddObject(m, "nan", PyFloat_FromDouble(m_nan())); +#endif - finally: + finally: return m; } -- cgit v1.2.1 From a55494d950c0f4f9f2ad31e7cb5173e3bdba48b3 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sun, 11 Jan 2015 16:41:01 +0100 Subject: Issue #23206: Make ``json.dumps(..., ensure_ascii=False)`` as fast as the default case of ``ensure_ascii=True``. Patch by Naoki Inada. --- Modules/_json.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 130 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_json.c b/Modules/_json.c index 1580ee6b65..94309905e3 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -47,7 +47,7 @@ typedef struct _PyEncoderObject { PyObject *item_separator; PyObject *sort_keys; PyObject *skipkeys; - int fast_encode; + PyCFunction fast_encode; int allow_nan; } PyEncoderObject; @@ -218,6 +218,97 @@ ascii_escape_unicode(PyObject *pystr) return rval; } +static PyObject * +escape_unicode(PyObject *pystr) +{ + /* Take a PyUnicode pystr and return a new escaped PyUnicode */ + Py_ssize_t i; + Py_ssize_t input_chars; + Py_ssize_t output_size; + Py_ssize_t chars; + PyObject *rval; + void *input; + int kind; + Py_UCS4 maxchar; + + if (PyUnicode_READY(pystr) == -1) + return NULL; + + maxchar = PyUnicode_MAX_CHAR_VALUE(pystr); + input_chars = PyUnicode_GET_LENGTH(pystr); + input = PyUnicode_DATA(pystr); + kind = PyUnicode_KIND(pystr); + + /* Compute the output size */ + for (i = 0, output_size = 2; i < input_chars; i++) { + Py_UCS4 c = PyUnicode_READ(kind, input, i); + switch (c) { + case '\\': case '"': case '\b': case '\f': + case '\n': case '\r': case '\t': + output_size += 2; + break; + default: + if (c <= 0x1f) + output_size += 6; + else + output_size++; + } + } + + rval = PyUnicode_New(output_size, maxchar); + if (rval == NULL) + return NULL; + + kind = PyUnicode_KIND(rval); + +#define ENCODE_OUTPUT do { \ + chars = 0; \ + output[chars++] = '"'; \ + for (i = 0; i < input_chars; i++) { \ + Py_UCS4 c = PyUnicode_READ(kind, input, i); \ + switch (c) { \ + case '\\': output[chars++] = '\\'; output[chars++] = c; break; \ + case '"': output[chars++] = '\\'; output[chars++] = c; break; \ + case '\b': output[chars++] = '\\'; output[chars++] = 'b'; break; \ + case '\f': output[chars++] = '\\'; output[chars++] = 'f'; break; \ + case '\n': output[chars++] = '\\'; output[chars++] = 'n'; break; \ + case '\r': output[chars++] = '\\'; output[chars++] = 'r'; break; \ + case '\t': output[chars++] = '\\'; output[chars++] = 't'; break; \ + default: \ + if (c <= 0x1f) { \ + output[chars++] = '\\'; \ + output[chars++] = 'u'; \ + output[chars++] = '0'; \ + output[chars++] = '0'; \ + output[chars++] = Py_hexdigits[(c >> 4) & 0xf]; \ + output[chars++] = Py_hexdigits[(c ) & 0xf]; \ + } else { \ + output[chars++] = c; \ + } \ + } \ + } \ + output[chars++] = '"'; \ + } while (0) + + if (kind == PyUnicode_1BYTE_KIND) { + Py_UCS1 *output = PyUnicode_1BYTE_DATA(rval); + ENCODE_OUTPUT; + } else if (kind == PyUnicode_2BYTE_KIND) { + Py_UCS2 *output = PyUnicode_2BYTE_DATA(rval); + ENCODE_OUTPUT; + } else { + Py_UCS4 *output = PyUnicode_4BYTE_DATA(rval); + assert(kind == PyUnicode_4BYTE_KIND); + ENCODE_OUTPUT; + } +#undef ENCODE_OUTPUT + +#ifdef Py_DEBUG + assert(_PyUnicode_CheckConsistency(rval, 1)); +#endif + return rval; +} + static void raise_errmsg(char *msg, PyObject *s, Py_ssize_t end) { @@ -530,6 +621,31 @@ py_encode_basestring_ascii(PyObject* self UNUSED, PyObject *pystr) return rval; } + +PyDoc_STRVAR(pydoc_encode_basestring, + "encode_basestring(string) -> string\n" + "\n" + "Return a JSON representation of a Python string" +); + +static PyObject * +py_encode_basestring(PyObject* self UNUSED, PyObject *pystr) +{ + PyObject *rval; + /* Return a JSON representation of a Python string */ + /* METH_O */ + if (PyUnicode_Check(pystr)) { + rval = escape_unicode(pystr); + } + else { + PyErr_Format(PyExc_TypeError, + "first argument must be a string, not %.80s", + Py_TYPE(pystr)->tp_name); + return NULL; + } + return rval; +} + static void scanner_dealloc(PyObject *self) { @@ -1223,7 +1339,14 @@ encoder_init(PyObject *self, PyObject *args, PyObject *kwds) s->item_separator = item_separator; s->sort_keys = sort_keys; s->skipkeys = skipkeys; - s->fast_encode = (PyCFunction_Check(s->encoder) && PyCFunction_GetFunction(s->encoder) == (PyCFunction)py_encode_basestring_ascii); + s->fast_encode = NULL; + if (PyCFunction_Check(s->encoder)) { + PyCFunction f = PyCFunction_GetFunction(s->encoder); + if (f == (PyCFunction)py_encode_basestring_ascii || + f == (PyCFunction)py_encode_basestring) { + s->fast_encode = f; + } + } s->allow_nan = PyObject_IsTrue(allow_nan); Py_INCREF(s->markers); @@ -1372,7 +1495,7 @@ encoder_encode_string(PyEncoderObject *s, PyObject *obj) { /* Return the JSON representation of a string */ if (s->fast_encode) - return py_encode_basestring_ascii(NULL, obj); + return s->fast_encode(NULL, obj); else return PyObject_CallFunctionObjArgs(s->encoder, obj, NULL); } @@ -1840,6 +1963,10 @@ static PyMethodDef speedups_methods[] = { (PyCFunction)py_encode_basestring_ascii, METH_O, pydoc_encode_basestring_ascii}, + {"encode_basestring", + (PyCFunction)py_encode_basestring, + METH_O, + pydoc_encode_basestring}, {"scanstring", (PyCFunction)py_scanstring, METH_VARARGS, -- cgit v1.2.1 From 56c0604df45c9b24fa047742234e5296bfd7dafc Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 17 Jan 2015 16:22:18 +0100 Subject: Issue #15955: Add an option to limit output size when decompressing LZMA data. Patch by Nikolaus Rath and Martin Panter. --- Modules/_lzmamodule.c | 218 +++++++++++++++++++++++++++++++++-------- Modules/clinic/_lzmamodule.c.h | 37 ++++--- 2 files changed, 202 insertions(+), 53 deletions(-) (limited to 'Modules') diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index dfb95fade1..fb152336e2 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -66,6 +66,9 @@ typedef struct { int check; char eof; PyObject *unused_data; + char needs_input; + uint8_t *input_buffer; + size_t input_buffer_size; #ifdef WITH_THREAD PyThread_type_lock lock; #endif @@ -142,10 +145,15 @@ PyLzma_Free(void *opaque, void *ptr) #endif static int -grow_buffer(PyObject **buf) +grow_buffer(PyObject **buf, Py_ssize_t max_length) { - size_t size = PyBytes_GET_SIZE(*buf); - return _PyBytes_Resize(buf, size + (size >> 3) + 6); + Py_ssize_t size = PyBytes_GET_SIZE(*buf); + Py_ssize_t newsize = size + (size >> 3) + 6; + + if (max_length > 0 && newsize > max_length) + newsize = max_length; + + return _PyBytes_Resize(buf, newsize); } @@ -504,7 +512,7 @@ class lzma_filter_converter(CConverter): static PyObject * compress(Compressor *c, uint8_t *data, size_t len, lzma_action action) { - size_t data_size = 0; + Py_ssize_t data_size = 0; PyObject *result; result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); @@ -527,13 +535,13 @@ compress(Compressor *c, uint8_t *data, size_t len, lzma_action action) (action == LZMA_FINISH && lzret == LZMA_STREAM_END)) { break; } else if (c->lzs.avail_out == 0) { - if (grow_buffer(&result) == -1) + if (grow_buffer(&result, -1) == -1) goto error; c->lzs.next_out = (uint8_t *)PyBytes_AS_STRING(result) + data_size; c->lzs.avail_out = PyBytes_GET_SIZE(result) - data_size; } } - if (data_size != (size_t)PyBytes_GET_SIZE(result)) + if (data_size != PyBytes_GET_SIZE(result)) if (_PyBytes_Resize(&result, data_size) == -1) goto error; return result; @@ -888,25 +896,33 @@ static PyTypeObject Compressor_type = { /* LZMADecompressor class. */ -static PyObject * -decompress(Decompressor *d, uint8_t *data, size_t len) +/* Decompress data of length d->lzs.avail_in in d->lzs.next_in. The output + buffer is allocated dynamically and returned. At most max_length bytes are + returned, so some of the input may not be consumed. d->lzs.next_in and + d->lzs.avail_in are updated to reflect the consumed input. */ +static PyObject* +decompress_buf(Decompressor *d, Py_ssize_t max_length) { - size_t data_size = 0; + Py_ssize_t data_size = 0; PyObject *result; - - result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); + lzma_stream *lzs = &d->lzs; + + if (max_length < 0 || max_length >= INITIAL_BUFFER_SIZE) + result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); + else + result = PyBytes_FromStringAndSize(NULL, max_length); if (result == NULL) return NULL; - d->lzs.next_in = data; - d->lzs.avail_in = len; - d->lzs.next_out = (uint8_t *)PyBytes_AS_STRING(result); - d->lzs.avail_out = PyBytes_GET_SIZE(result); + + lzs->next_out = (uint8_t *)PyBytes_AS_STRING(result); + lzs->avail_out = PyBytes_GET_SIZE(result); + for (;;) { lzma_ret lzret; Py_BEGIN_ALLOW_THREADS - lzret = lzma_code(&d->lzs, LZMA_RUN); - data_size = (char *)d->lzs.next_out - PyBytes_AS_STRING(result); + lzret = lzma_code(lzs, LZMA_RUN); + data_size = (char *)lzs->next_out - PyBytes_AS_STRING(result); Py_END_ALLOW_THREADS if (catch_lzma_error(lzret)) goto error; @@ -914,26 +930,131 @@ decompress(Decompressor *d, uint8_t *data, size_t len) d->check = lzma_get_check(&d->lzs); if (lzret == LZMA_STREAM_END) { d->eof = 1; - if (d->lzs.avail_in > 0) { - Py_CLEAR(d->unused_data); - d->unused_data = PyBytes_FromStringAndSize( - (char *)d->lzs.next_in, d->lzs.avail_in); - if (d->unused_data == NULL) - goto error; - } break; - } else if (d->lzs.avail_in == 0) { + } else if (lzs->avail_in == 0) { break; - } else if (d->lzs.avail_out == 0) { - if (grow_buffer(&result) == -1) + } else if (lzs->avail_out == 0) { + if (data_size == max_length) + break; + if (grow_buffer(&result, max_length) == -1) goto error; - d->lzs.next_out = (uint8_t *)PyBytes_AS_STRING(result) + data_size; - d->lzs.avail_out = PyBytes_GET_SIZE(result) - data_size; + lzs->next_out = (uint8_t *)PyBytes_AS_STRING(result) + data_size; + lzs->avail_out = PyBytes_GET_SIZE(result) - data_size; } } - if (data_size != (size_t)PyBytes_GET_SIZE(result)) + if (data_size != PyBytes_GET_SIZE(result)) if (_PyBytes_Resize(&result, data_size) == -1) goto error; + + return result; + +error: + Py_XDECREF(result); + return NULL; +} + +static PyObject * +decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length) +{ + char input_buffer_in_use; + PyObject *result; + lzma_stream *lzs = &d->lzs; + + /* Prepend unconsumed input if necessary */ + if (lzs->next_in != NULL) { + size_t avail_now, avail_total; + + /* Number of bytes we can append to input buffer */ + avail_now = (d->input_buffer + d->input_buffer_size) + - (lzs->next_in + lzs->avail_in); + + /* Number of bytes we can append if we move existing + contents to beginning of buffer (overwriting + consumed input) */ + avail_total = d->input_buffer_size - lzs->avail_in; + + if (avail_total < len) { + size_t offset = lzs->next_in - d->input_buffer; + uint8_t *tmp; + size_t new_size = d->input_buffer_size + len - avail_now; + + /* Assign to temporary variable first, so we don't + lose address of allocated buffer if realloc fails */ + tmp = PyMem_Realloc(d->input_buffer, new_size); + if (tmp == NULL) { + PyErr_SetNone(PyExc_MemoryError); + return NULL; + } + d->input_buffer = tmp; + d->input_buffer_size = new_size; + + lzs->next_in = d->input_buffer + offset; + } + else if (avail_now < len) { + memmove(d->input_buffer, lzs->next_in, + lzs->avail_in); + lzs->next_in = d->input_buffer; + } + memcpy((void*)(lzs->next_in + lzs->avail_in), data, len); + lzs->avail_in += len; + input_buffer_in_use = 1; + } + else { + lzs->next_in = data; + lzs->avail_in = len; + input_buffer_in_use = 0; + } + + result = decompress_buf(d, max_length); + if(result == NULL) + return NULL; + + if (d->eof) { + d->needs_input = 0; + if (lzs->avail_in > 0) { + Py_CLEAR(d->unused_data); + d->unused_data = PyBytes_FromStringAndSize( + (char *)lzs->next_in, lzs->avail_in); + if (d->unused_data == NULL) + goto error; + } + } + else if (lzs->avail_in == 0) { + lzs->next_in = NULL; + d->needs_input = 1; + } + else { + d->needs_input = 0; + + /* If we did not use the input buffer, we now have + to copy the tail from the caller's buffer into the + input buffer */ + if (!input_buffer_in_use) { + + /* Discard buffer if it's too small + (resizing it may needlessly copy the current contents) */ + if (d->input_buffer != NULL && + d->input_buffer_size < lzs->avail_in) { + PyMem_Free(d->input_buffer); + d->input_buffer = NULL; + } + + /* Allocate if necessary */ + if (d->input_buffer == NULL) { + d->input_buffer = PyMem_Malloc(lzs->avail_in); + if (d->input_buffer == NULL) { + PyErr_SetNone(PyExc_MemoryError); + goto error; + } + d->input_buffer_size = lzs->avail_in; + } + + /* Copy tail */ + memcpy(d->input_buffer, lzs->next_in, lzs->avail_in); + lzs->next_in = d->input_buffer; + } + } + return result; error: @@ -946,20 +1067,27 @@ _lzma.LZMADecompressor.decompress self: self(type="Decompressor *") data: Py_buffer - / + max_length: Py_ssize_t=-1 -Provide data to the decompressor object. +Decompress *data*, returning uncompressed data as bytes. -Returns a chunk of decompressed data if possible, or b'' otherwise. +If *max_length* is nonnegative, returns at most *max_length* bytes of +decompressed data. If this limit is reached and further output can be +produced, *self.needs_input* will be set to ``False``. In this case, the next +call to *decompress()* may provide *data* as b'' to obtain more of the output. -Attempting to decompress data after the end of stream is reached -raises an EOFError. Any data found after the end of the stream -is ignored and saved in the unused_data attribute. +If all of the input data was decompressed and returned (either because this +was less than *max_length* bytes, or because *max_length* was negative), +*self.needs_input* will be set to True. + +Attempting to decompress data after the end of stream is reached raises an +EOFError. Any data found after the end of the stream is ignored and saved in +the unused_data attribute. [clinic start generated code]*/ static PyObject * -_lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data) -/*[clinic end generated code: output=d86e78da7ff0ff21 input=50c4768b821bf0ef]*/ +_lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data, Py_ssize_t max_length) +/*[clinic end generated code: output=1532a5bb23629001 input=262e4e217f49039b]*/ { PyObject *result = NULL; @@ -967,7 +1095,7 @@ _lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data) if (self->eof) PyErr_SetString(PyExc_EOFError, "Already at end of stream"); else - result = decompress(self, data->buf, data->len); + result = decompress(self, data->buf, data->len, max_length); RELEASE_LOCK(self); return result; } @@ -1055,6 +1183,7 @@ _lzma_LZMADecompressor___init___impl(Decompressor *self, int format, PyObject *m self->alloc.alloc = PyLzma_Malloc; self->alloc.free = PyLzma_Free; self->lzs.allocator = &self->alloc; + self->lzs.next_in = NULL; #ifdef WITH_THREAD self->lock = PyThread_allocate_lock(); @@ -1065,6 +1194,9 @@ _lzma_LZMADecompressor___init___impl(Decompressor *self, int format, PyObject *m #endif self->check = LZMA_CHECK_UNKNOWN; + self->needs_input = 1; + self->input_buffer = NULL; + self->input_buffer_size = 0; self->unused_data = PyBytes_FromStringAndSize(NULL, 0); if (self->unused_data == NULL) goto error; @@ -1113,6 +1245,9 @@ error: static void Decompressor_dealloc(Decompressor *self) { + if(self->input_buffer != NULL) + PyMem_Free(self->input_buffer); + lzma_end(&self->lzs); Py_CLEAR(self->unused_data); #ifdef WITH_THREAD @@ -1134,6 +1269,9 @@ PyDoc_STRVAR(Decompressor_check_doc, PyDoc_STRVAR(Decompressor_eof_doc, "True if the end-of-stream marker has been reached."); +PyDoc_STRVAR(Decompressor_needs_input_doc, +"True if more input is needed before more decompressed data can be produced."); + PyDoc_STRVAR(Decompressor_unused_data_doc, "Data found after the end of the compressed stream."); @@ -1142,6 +1280,8 @@ static PyMemberDef Decompressor_members[] = { Decompressor_check_doc}, {"eof", T_BOOL, offsetof(Decompressor, eof), READONLY, Decompressor_eof_doc}, + {"needs_input", T_BOOL, offsetof(Decompressor, needs_input), READONLY, + Decompressor_needs_input_doc}, {"unused_data", T_OBJECT_EX, offsetof(Decompressor, unused_data), READONLY, Decompressor_unused_data_doc}, {NULL} diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h index c1ad8824af..a46a15232f 100644 --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -62,34 +62,43 @@ _lzma_LZMACompressor_flush(Compressor *self, PyObject *Py_UNUSED(ignored)) } PyDoc_STRVAR(_lzma_LZMADecompressor_decompress__doc__, -"decompress($self, data, /)\n" +"decompress($self, /, data, max_length=-1)\n" "--\n" "\n" -"Provide data to the decompressor object.\n" +"Decompresses *data*, returning uncompressed data as bytes.\n" "\n" -"Returns a chunk of decompressed data if possible, or b\'\' otherwise.\n" +"If *max_length* is nonnegative, returns at most *max_length* bytes of\n" +"decompressed data. If this limit is reached and further output can be\n" +"produced, *self.needs_input* will be set to ``False``. In this case, the next\n" +"call to *decompress()* may provide *data* as b\'\' to obtain more of the output.\n" "\n" -"Attempting to decompress data after the end of stream is reached\n" -"raises an EOFError. Any data found after the end of the stream\n" -"is ignored and saved in the unused_data attribute."); +"If all of the input data was decompressed and returned (either because this\n" +"was less than *max_length* bytes, or because *max_length* was negative),\n" +"*self.needs_input* will be set to True.\n" +"\n" +"Attempting to decompress data after the end of stream is reached raises an\n" +"EOFError. Any data found after the end of the stream is ignored and saved in\n" +"the unused_data attribute."); #define _LZMA_LZMADECOMPRESSOR_DECOMPRESS_METHODDEF \ - {"decompress", (PyCFunction)_lzma_LZMADecompressor_decompress, METH_VARARGS, _lzma_LZMADecompressor_decompress__doc__}, + {"decompress", (PyCFunction)_lzma_LZMADecompressor_decompress, METH_VARARGS|METH_KEYWORDS, _lzma_LZMADecompressor_decompress__doc__}, static PyObject * -_lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data); +_lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data, Py_ssize_t max_length); static PyObject * -_lzma_LZMADecompressor_decompress(Decompressor *self, PyObject *args) +_lzma_LZMADecompressor_decompress(Decompressor *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; + static char *_keywords[] = {"data", "max_length", NULL}; Py_buffer data = {NULL, NULL}; + Py_ssize_t max_length = -1; - if (!PyArg_ParseTuple(args, - "y*:decompress", - &data)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "y*|n:decompress", _keywords, + &data, &max_length)) goto exit; - return_value = _lzma_LZMADecompressor_decompress_impl(self, &data); + return_value = _lzma_LZMADecompressor_decompress_impl(self, &data, max_length); exit: /* Cleanup for data */ @@ -242,4 +251,4 @@ exit: return return_value; } -/*[clinic end generated code: output=808fec8216ac712b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d17fac38b09626d8 input=a9049054013a1b77]*/ -- cgit v1.2.1 From c0fe0e29e9fe92c83d842d6dd6cb4e7b887e114d Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 23 Jan 2015 16:35:37 -0500 Subject: add support for ALPN (closes #20188) --- Modules/_ssl.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 110 insertions(+), 22 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 596966323e..2e19439366 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -109,6 +109,11 @@ struct py_ssl_library_code { # define HAVE_SNI 0 #endif +/* ALPN added in OpenSSL 1.0.2 */ +#if OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(OPENSSL_NO_TLSEXT) +# define HAVE_ALPN +#endif + enum py_ssl_error { /* these mirror ssl.h */ PY_SSL_ERROR_NONE, @@ -180,9 +185,13 @@ typedef struct { PyObject_HEAD SSL_CTX *ctx; #ifdef OPENSSL_NPN_NEGOTIATED - char *npn_protocols; + unsigned char *npn_protocols; int npn_protocols_len; #endif +#ifdef HAVE_ALPN + unsigned char *alpn_protocols; + int alpn_protocols_len; +#endif #ifndef OPENSSL_NO_TLSEXT PyObject *set_hostname; #endif @@ -1460,7 +1469,20 @@ static PyObject *PySSL_selected_npn_protocol(PySSLSocket *self) { if (out == NULL) Py_RETURN_NONE; - return PyUnicode_FromStringAndSize((char *) out, outlen); + return PyUnicode_FromStringAndSize((char *)out, outlen); +} +#endif + +#ifdef HAVE_ALPN +static PyObject *PySSL_selected_alpn_protocol(PySSLSocket *self) { + const unsigned char *out; + unsigned int outlen; + + SSL_get0_alpn_selected(self->ssl, &out, &outlen); + + if (out == NULL) + Py_RETURN_NONE; + return PyUnicode_FromStringAndSize((char *)out, outlen); } #endif @@ -2053,6 +2075,9 @@ static PyMethodDef PySSLMethods[] = { {"version", (PyCFunction)PySSL_version, METH_NOARGS}, #ifdef OPENSSL_NPN_NEGOTIATED {"selected_npn_protocol", (PyCFunction)PySSL_selected_npn_protocol, METH_NOARGS}, +#endif +#ifdef HAVE_ALPN + {"selected_alpn_protocol", (PyCFunction)PySSL_selected_alpn_protocol, METH_NOARGS}, #endif {"compression", (PyCFunction)PySSL_compression, METH_NOARGS}, {"shutdown", (PyCFunction)PySSL_SSLshutdown, METH_NOARGS, @@ -2159,6 +2184,9 @@ context_new(PyTypeObject *type, PyObject *args, PyObject *kwds) #ifdef OPENSSL_NPN_NEGOTIATED self->npn_protocols = NULL; #endif +#ifdef HAVE_ALPN + self->alpn_protocols = NULL; +#endif #ifndef OPENSSL_NO_TLSEXT self->set_hostname = NULL; #endif @@ -2218,7 +2246,10 @@ context_dealloc(PySSLContext *self) context_clear(self); SSL_CTX_free(self->ctx); #ifdef OPENSSL_NPN_NEGOTIATED - PyMem_Free(self->npn_protocols); + PyMem_FREE(self->npn_protocols); +#endif +#ifdef HAVE_ALPN + PyMem_FREE(self->alpn_protocols); #endif Py_TYPE(self)->tp_free(self); } @@ -2244,6 +2275,23 @@ set_ciphers(PySSLContext *self, PyObject *args) Py_RETURN_NONE; } +static int +do_protocol_selection(unsigned char **out, unsigned char *outlen, + const unsigned char *remote_protocols, unsigned int remote_protocols_len, + unsigned char *our_protocols, unsigned int our_protocols_len) +{ + if (our_protocols == NULL) { + our_protocols = (unsigned char*)""; + our_protocols_len = 0; + } + + SSL_select_next_proto(out, outlen, + remote_protocols, remote_protocols_len, + our_protocols, our_protocols_len); + + return SSL_TLSEXT_ERR_OK; +} + #ifdef OPENSSL_NPN_NEGOTIATED /* this callback gets passed to SSL_CTX_set_next_protos_advertise_cb */ static int @@ -2254,10 +2302,10 @@ _advertiseNPN_cb(SSL *s, PySSLContext *ssl_ctx = (PySSLContext *) args; if (ssl_ctx->npn_protocols == NULL) { - *data = (unsigned char *) ""; + *data = (unsigned char *)""; *len = 0; } else { - *data = (unsigned char *) ssl_ctx->npn_protocols; + *data = ssl_ctx->npn_protocols; *len = ssl_ctx->npn_protocols_len; } @@ -2270,23 +2318,9 @@ _selectNPN_cb(SSL *s, const unsigned char *server, unsigned int server_len, void *args) { - PySSLContext *ssl_ctx = (PySSLContext *) args; - - unsigned char *client = (unsigned char *) ssl_ctx->npn_protocols; - int client_len; - - if (client == NULL) { - client = (unsigned char *) ""; - client_len = 0; - } else { - client_len = ssl_ctx->npn_protocols_len; - } - - SSL_select_next_proto(out, outlen, - server, server_len, - client, client_len); - - return SSL_TLSEXT_ERR_OK; + PySSLContext *ctx = (PySSLContext *)args; + return do_protocol_selection(out, outlen, server, server_len, + ctx->npn_protocols, ctx->npn_protocols_len); } #endif @@ -2329,6 +2363,50 @@ _set_npn_protocols(PySSLContext *self, PyObject *args) #endif } +#ifdef HAVE_ALPN +static int +_selectALPN_cb(SSL *s, + const unsigned char **out, unsigned char *outlen, + const unsigned char *client_protocols, unsigned int client_protocols_len, + void *args) +{ + PySSLContext *ctx = (PySSLContext *)args; + return do_protocol_selection((unsigned char **)out, outlen, + client_protocols, client_protocols_len, + ctx->alpn_protocols, ctx->alpn_protocols_len); +} +#endif + +static PyObject * +_set_alpn_protocols(PySSLContext *self, PyObject *args) +{ +#ifdef HAVE_ALPN + Py_buffer protos; + + if (!PyArg_ParseTuple(args, "y*:set_npn_protocols", &protos)) + return NULL; + + PyMem_FREE(self->alpn_protocols); + self->alpn_protocols = PyMem_Malloc(protos.len); + if (!self->alpn_protocols) + return PyErr_NoMemory(); + memcpy(self->alpn_protocols, protos.buf, protos.len); + self->alpn_protocols_len = protos.len; + PyBuffer_Release(&protos); + + if (SSL_CTX_set_alpn_protos(self->ctx, self->alpn_protocols, self->alpn_protocols_len)) + return PyErr_NoMemory(); + SSL_CTX_set_alpn_select_cb(self->ctx, _selectALPN_cb, self); + + PyBuffer_Release(&protos); + Py_RETURN_NONE; +#else + PyErr_SetString(PyExc_NotImplementedError, + "The ALPN extension requires OpenSSL 1.0.2 or later."); + return NULL; +#endif +} + static PyObject * get_verify_mode(PySSLContext *self, void *c) { @@ -3307,6 +3385,8 @@ static struct PyMethodDef context_methods[] = { METH_VARARGS | METH_KEYWORDS, NULL}, {"set_ciphers", (PyCFunction) set_ciphers, METH_VARARGS, NULL}, + {"_set_alpn_protocols", (PyCFunction) _set_alpn_protocols, + METH_VARARGS, NULL}, {"_set_npn_protocols", (PyCFunction) _set_npn_protocols, METH_VARARGS, NULL}, {"load_cert_chain", (PyCFunction) load_cert_chain, @@ -4502,6 +4582,14 @@ PyInit__ssl(void) Py_INCREF(r); PyModule_AddObject(m, "HAS_NPN", r); +#ifdef HAVE_ALPN + r = Py_True; +#else + r = Py_False; +#endif + Py_INCREF(r); + PyModule_AddObject(m, "HAS_ALPN", r); + /* Mappings for error codes */ err_codes_to_names = PyDict_New(); err_names_to_codes = PyDict_New(); -- cgit v1.2.1 From 8539fdbe361986e3615bd61bba3b2c3bb0c7a50d Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 23 Jan 2015 17:30:26 -0500 Subject: prefer server alpn ordering over the client's --- Modules/_ssl.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 2e19439366..f0f362c117 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -2276,18 +2276,25 @@ set_ciphers(PySSLContext *self, PyObject *args) } static int -do_protocol_selection(unsigned char **out, unsigned char *outlen, - const unsigned char *remote_protocols, unsigned int remote_protocols_len, - unsigned char *our_protocols, unsigned int our_protocols_len) +do_protocol_selection(int alpn, unsigned char **out, unsigned char *outlen, + const unsigned char *server_protocols, unsigned int server_protocols_len, + const unsigned char *client_protocols, unsigned int client_protocols_len) { - if (our_protocols == NULL) { - our_protocols = (unsigned char*)""; - our_protocols_len = 0; + int ret; + if (client_protocols == NULL) { + client_protocols = (unsigned char *)""; + client_protocols_len = 0; + } + if (server_protocols == NULL) { + server_protocols = (unsigned char *)""; + server_protocols_len = 0; } - SSL_select_next_proto(out, outlen, - remote_protocols, remote_protocols_len, - our_protocols, our_protocols_len); + ret = SSL_select_next_proto(out, outlen, + server_protocols, server_protocols_len, + client_protocols, client_protocols_len); + if (alpn && ret != OPENSSL_NPN_NEGOTIATED) + return SSL_TLSEXT_ERR_NOACK; return SSL_TLSEXT_ERR_OK; } @@ -2319,7 +2326,7 @@ _selectNPN_cb(SSL *s, void *args) { PySSLContext *ctx = (PySSLContext *)args; - return do_protocol_selection(out, outlen, server, server_len, + return do_protocol_selection(0, out, outlen, server, server_len, ctx->npn_protocols, ctx->npn_protocols_len); } #endif @@ -2371,9 +2378,9 @@ _selectALPN_cb(SSL *s, void *args) { PySSLContext *ctx = (PySSLContext *)args; - return do_protocol_selection((unsigned char **)out, outlen, - client_protocols, client_protocols_len, - ctx->alpn_protocols, ctx->alpn_protocols_len); + return do_protocol_selection(1, (unsigned char **)out, outlen, + ctx->alpn_protocols, ctx->alpn_protocols_len, + client_protocols, client_protocols_len); } #endif -- cgit v1.2.1 From 1ca81556d041f7ba63c5b55a221f244650f2ee9a Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 24 Jan 2015 08:18:24 -0800 Subject: Closes #23253: Delay-load ShellExecute --- Modules/posixmodule.c | 47 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 542e600e7f..502e933440 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -15128,6 +15128,37 @@ The filepath is relative to the current directory. If you want to use\n\ an absolute path, make sure the first character is not a slash (\"/\");\n\ the underlying Win32 ShellExecute function doesn't work if it is."); +/* Grab ShellExecute dynamically from shell32 */ +static int has_ShellExecute = -1; +static HINSTANCE (CALLBACK *Py_ShellExecuteA)(HWND, LPCSTR, LPCSTR, LPCSTR, + LPCSTR, INT); +static HINSTANCE (CALLBACK *Py_ShellExecuteW)(HWND, LPCWSTR, LPCWSTR, LPCWSTR, + LPCWSTR, INT); +static int +check_ShellExecute() +{ + HINSTANCE hShell32; + + /* only recheck */ + if (-1 == has_ShellExecute) { + Py_BEGIN_ALLOW_THREADS + hShell32 = LoadLibraryW(L"SHELL32"); + Py_END_ALLOW_THREADS + if (hShell32) { + *(FARPROC*)&Py_ShellExecuteA = GetProcAddress(hShell32, + "ShellExecuteA"); + *(FARPROC*)&Py_ShellExecuteW = GetProcAddress(hShell32, + "ShellExecuteW"); + has_ShellExecute = Py_ShellExecuteA && + Py_ShellExecuteW; + } else { + has_ShellExecute = 0; + } + } + return has_ShellExecute; +} + + static PyObject * win32_startfile(PyObject *self, PyObject *args) { @@ -15138,6 +15169,14 @@ win32_startfile(PyObject *self, PyObject *args) HINSTANCE rc; PyObject *unipath, *uoperation = NULL; + + if(!check_ShellExecute()) { + /* If the OS doesn't have ShellExecute, return a + NotImplementedError. */ + return PyErr_Format(PyExc_NotImplementedError, + "startfile not available on this platform"); + } + if (!PyArg_ParseTuple(args, "U|s:startfile", &unipath, &operation)) { PyErr_Clear(); @@ -15166,8 +15205,8 @@ win32_startfile(PyObject *self, PyObject *args) woperation = NULL; Py_BEGIN_ALLOW_THREADS - rc = ShellExecuteW((HWND)0, woperation, wpath, - NULL, NULL, SW_SHOWNORMAL); + rc = Py_ShellExecuteW((HWND)0, woperation, wpath, + NULL, NULL, SW_SHOWNORMAL); Py_END_ALLOW_THREADS Py_XDECREF(uoperation); @@ -15189,8 +15228,8 @@ normal: } filepath = PyBytes_AsString(ofilepath); Py_BEGIN_ALLOW_THREADS - rc = ShellExecute((HWND)0, operation, filepath, - NULL, NULL, SW_SHOWNORMAL); + rc = Py_ShellExecuteA((HWND)0, operation, filepath, + NULL, NULL, SW_SHOWNORMAL); Py_END_ALLOW_THREADS if (rc <= (HINSTANCE)32) { PyObject *errval = win32_error("startfile", filepath); -- cgit v1.2.1 From bbbad609cb4e73b86a9beed203994ae55bce3867 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 26 Jan 2015 13:16:30 +0200 Subject: Issue #19361: JSON decoder now raises JSONDecodeError instead of ValueError. --- Modules/_json.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_json.c b/Modules/_json.c index 94309905e3..0bf475e186 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -312,23 +312,22 @@ escape_unicode(PyObject *pystr) static void raise_errmsg(char *msg, PyObject *s, Py_ssize_t end) { - /* Use the Python function json.decoder.errmsg to raise a nice - looking ValueError exception */ - static PyObject *errmsg_fn = NULL; - PyObject *pymsg; - if (errmsg_fn == NULL) { + /* Use JSONDecodeError exception to raise a nice looking ValueError subclass */ + static PyObject *JSONDecodeError = NULL; + PyObject *exc; + if (JSONDecodeError == NULL) { PyObject *decoder = PyImport_ImportModule("json.decoder"); if (decoder == NULL) return; - errmsg_fn = PyObject_GetAttrString(decoder, "errmsg"); + JSONDecodeError = PyObject_GetAttrString(decoder, "JSONDecodeError"); Py_DECREF(decoder); - if (errmsg_fn == NULL) + if (JSONDecodeError == NULL) return; } - pymsg = PyObject_CallFunction(errmsg_fn, "(zOn)", msg, s, end); - if (pymsg) { - PyErr_SetObject(PyExc_ValueError, pymsg); - Py_DECREF(pymsg); + exc = PyObject_CallFunction(JSONDecodeError, "(zOn)", msg, s, end); + if (exc) { + PyErr_SetObject(JSONDecodeError, exc); + Py_DECREF(exc); } } -- cgit v1.2.1 From 7dd930ed6f8de7d88ac1602a532161eaed723837 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 27 Jan 2015 11:10:18 -0500 Subject: disable ALPN on LibreSSL, which has a large version number, but not ALPN support (closes #23329) --- Modules/_ssl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index f0f362c117..3faca0a2cc 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -110,7 +110,7 @@ struct py_ssl_library_code { #endif /* ALPN added in OpenSSL 1.0.2 */ -#if OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(OPENSSL_NO_TLSEXT) +#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(OPENSSL_NO_TLSEXT) # define HAVE_ALPN #endif -- cgit v1.2.1 From 543a128add443a1ef52e371fbf810bb1ac3f377f Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 28 Jan 2015 12:06:39 -0500 Subject: ifdef our way to compatibility with old openssl (closes #23335) --- Modules/_ssl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 3faca0a2cc..437d2b26c8 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -2275,6 +2275,7 @@ set_ciphers(PySSLContext *self, PyObject *args) Py_RETURN_NONE; } +#ifdef OPENSSL_NPN_NEGOTIATED static int do_protocol_selection(int alpn, unsigned char **out, unsigned char *outlen, const unsigned char *server_protocols, unsigned int server_protocols_len, @@ -2299,7 +2300,6 @@ do_protocol_selection(int alpn, unsigned char **out, unsigned char *outlen, return SSL_TLSEXT_ERR_OK; } -#ifdef OPENSSL_NPN_NEGOTIATED /* this callback gets passed to SSL_CTX_set_next_protos_advertise_cb */ static int _advertiseNPN_cb(SSL *s, -- cgit v1.2.1 From 6e0c59b25aaba7ca9884be8f8f6ab80e9bdacc01 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Sun, 1 Feb 2015 14:53:54 +0100 Subject: Issue #22445: PyBuffer_IsContiguous() now implements precise contiguity tests, compatible with NumPy's NPY_RELAXED_STRIDES_CHECKING compilation flag. Previously the function reported false negatives for corner cases. --- Modules/_testbuffer.c | 53 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/_testbuffer.c b/Modules/_testbuffer.c index 0c6ef16f17..a563a04cd7 100644 --- a/Modules/_testbuffer.c +++ b/Modules/_testbuffer.c @@ -1510,6 +1510,19 @@ ndarray_getbuf(NDArrayObject *self, Py_buffer *view, int flags) view->shape = NULL; } + /* Ascertain that the new buffer has the same contiguity as the exporter */ + if (ND_C_CONTIGUOUS(baseflags) != PyBuffer_IsContiguous(view, 'C') || + /* skip cast to 1-d */ + (view->format != NULL && view->shape != NULL && + ND_FORTRAN_CONTIGUOUS(baseflags) != PyBuffer_IsContiguous(view, 'F')) || + /* cast to 1-d */ + (view->format == NULL && view->shape == NULL && + !PyBuffer_IsContiguous(view, 'F'))) { + PyErr_SetString(PyExc_BufferError, + "ndarray: contiguity mismatch in getbuf()"); + return -1; + } + view->obj = (PyObject *)self; Py_INCREF(view->obj); self->head->exports++; @@ -2206,6 +2219,8 @@ ndarray_add_suboffsets(PyObject *self, PyObject *dummy) for (i = 0; i < base->ndim; i++) base->suboffsets[i] = -1; + nd->head->flags &= ~(ND_C|ND_FORTRAN); + Py_RETURN_NONE; } @@ -2469,13 +2484,12 @@ arraycmp(const Py_ssize_t *a1, const Py_ssize_t *a2, const Py_ssize_t *shape, { Py_ssize_t i; - if (ndim == 1 && shape && shape[0] == 1) { - /* This is for comparing strides: For example, the array - [175], shape=[1], strides=[-5] is considered contiguous. */ - return 1; - } for (i = 0; i < ndim; i++) { + if (shape && shape[i] <= 1) { + /* strides can differ if the dimension is less than 2 */ + continue; + } if (a1[i] != a2[i]) { return 0; } @@ -2555,30 +2569,35 @@ is_contiguous(PyObject *self, PyObject *args) PyObject *obj; PyObject *order; PyObject *ret = NULL; - Py_buffer view; + Py_buffer view, *base; char ord; if (!PyArg_ParseTuple(args, "OO", &obj, &order)) { return NULL; } - if (PyObject_GetBuffer(obj, &view, PyBUF_FULL_RO) < 0) { - PyErr_SetString(PyExc_TypeError, - "is_contiguous: object does not implement the buffer " - "protocol"); + ord = get_ascii_order(order); + if (ord == CHAR_MAX) { return NULL; } - ord = get_ascii_order(order); - if (ord == CHAR_MAX) { - goto release; + if (NDArray_Check(obj)) { + /* Skip the buffer protocol to check simple etc. buffers directly. */ + base = &((NDArrayObject *)obj)->head->base; + ret = PyBuffer_IsContiguous(base, ord) ? Py_True : Py_False; + } + else { + if (PyObject_GetBuffer(obj, &view, PyBUF_FULL_RO) < 0) { + PyErr_SetString(PyExc_TypeError, + "is_contiguous: object does not implement the buffer " + "protocol"); + return NULL; + } + ret = PyBuffer_IsContiguous(&view, ord) ? Py_True : Py_False; + PyBuffer_Release(&view); } - ret = PyBuffer_IsContiguous(&view, ord) ? Py_True : Py_False; Py_INCREF(ret); - -release: - PyBuffer_Release(&view); return ret; } -- cgit v1.2.1 From f9280aceb3f770ab13d84fb5d52844635b85490a Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 1 Feb 2015 22:53:41 -0800 Subject: Optimization guides suggest copying memory in an ascending direction when possible. --- Modules/_collectionsmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index b2783d2739..69d93ae6a6 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -534,13 +534,13 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n) if (m > leftindex) m = leftindex; assert (m > 0 && m <= len); - src = &rightblock->data[rightindex]; - dest = &leftblock->data[leftindex - 1]; rightindex -= m; leftindex -= m; + src = &rightblock->data[rightindex + 1]; + dest = &leftblock->data[leftindex]; n -= m; do { - *(dest--) = *(src--); + *(dest++) = *(src++); } while (--m); } if (rightindex == -1) { -- cgit v1.2.1 From 4e5ffe281ec5bdebded6f1bd61e9cd2b51545c3b Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 3 Feb 2015 11:04:19 +0200 Subject: Issue #22818: Splitting on a pattern that could match an empty string now raises a warning. Patterns that can only match empty strings are now rejected. --- Modules/_sre.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 63778f4e6b..9550d97c1b 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -863,6 +863,19 @@ pattern_split(PatternObject* self, PyObject* args, PyObject* kw) if (!string) return NULL; + assert(self->codesize != 0); + if (self->code[0] != SRE_OP_INFO || self->code[3] == 0) { + if (self->code[0] == SRE_OP_INFO && self->code[4] == 0) { + PyErr_SetString(PyExc_ValueError, + "split() requires a non-empty pattern match."); + return NULL; + } + if (PyErr_WarnEx(PyExc_FutureWarning, + "split() requires a non-empty pattern match.", + 1) < 0) + return NULL; + } + string = state_init(&state, self, string, 0, PY_SSIZE_T_MAX); if (!string) return NULL; -- cgit v1.2.1 From 0b0d24a94f1f6d0e65e5f0e2ad63398fb82f54f2 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 3 Feb 2015 11:30:10 +0200 Subject: Issue #15381: Optimized io.BytesIO to make less allocations and copyings. --- Modules/_io/bytesio.c | 338 +++++++++++++++++++++++--------------------------- 1 file changed, 152 insertions(+), 186 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index 7bbcb6eb2a..ca5156b84b 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -4,17 +4,12 @@ typedef struct { PyObject_HEAD - char *buf; + PyObject *buf; Py_ssize_t pos; Py_ssize_t string_size; - size_t buf_size; PyObject *dict; PyObject *weakreflist; Py_ssize_t exports; - /** If `initvalue' != NULL, `buf' is a read-only pointer into the PyBytes - * referenced by `initvalue'. It must be copied prior to mutation, and - * released during finalization */ - PyObject *initvalue; } bytesio; typedef struct { @@ -22,12 +17,18 @@ typedef struct { bytesio *source; } bytesiobuf; +/* The bytesio object can be in three states: + * Py_REFCNT(buf) == 1, exports == 0. + * Py_REFCNT(buf) > 1. exports == 0, string_size == PyBytes_GET_SIZE(buf), + first modification or export causes the internal buffer copying. + * exports > 0. Py_REFCNT(buf) == 1, any modifications are forbidden. +*/ -#define CHECK_CLOSED(self, ret) \ +#define CHECK_CLOSED(self) \ if ((self)->buf == NULL) { \ PyErr_SetString(PyExc_ValueError, \ "I/O operation on closed file."); \ - return ret; \ + return NULL; \ } #define CHECK_EXPORTS(self) \ @@ -37,47 +38,8 @@ typedef struct { return NULL; \ } -/* Ensure we have a buffer suitable for writing, in the case that an initvalue - * object was provided, and we're currently borrowing its buffer. `size' - * indicates the new buffer size allocated as part of unsharing, to avoid a - * redundant reallocation caused by any subsequent mutation. `truncate' - * indicates whether truncation should occur if `size` < self->string_size. - * - * Do nothing if the buffer wasn't shared. Returns 0 on success, or sets an - * exception and returns -1 on failure. Existing state is preserved on failure. - */ -static int -unshare(bytesio *self, size_t preferred_size, int truncate) -{ - if (self->initvalue) { - Py_ssize_t copy_size; - char *new_buf; - - if((! truncate) && preferred_size < (size_t)self->string_size) { - preferred_size = self->string_size; - } - - /* PyMem_Malloc() returns NULL if preferred_size is bigger - than PY_SSIZE_T_MAX */ - new_buf = (char *)PyMem_Malloc(preferred_size); - if (new_buf == NULL) { - PyErr_NoMemory(); - return -1; - } +#define SHARED_BUF(self) (Py_REFCNT((self)->buf) > 1) - copy_size = self->string_size; - if ((size_t)copy_size > preferred_size) { - copy_size = preferred_size; - } - - memcpy(new_buf, self->buf, copy_size); - Py_CLEAR(self->initvalue); - self->buf = new_buf; - self->buf_size = preferred_size; - self->string_size = (Py_ssize_t) copy_size; - } - return 0; -} /* Internal routine to get a line from the buffer of a BytesIO object. Returns the length between the current position to the @@ -91,7 +53,7 @@ scan_eol(bytesio *self, Py_ssize_t len) assert(self->buf != NULL); /* Move to the end of the line, up to the end of the string, s. */ - start = self->buf + self->pos; + start = PyBytes_AS_STRING(self->buf) + self->pos; maxlen = self->string_size - self->pos; if (len < 0 || len > maxlen) len = maxlen; @@ -109,6 +71,27 @@ scan_eol(bytesio *self, Py_ssize_t len) return len; } +/* Internal routine for detaching the shared buffer of BytesIO objects. + The caller should ensure that the 'size' argument is non-negative and + not lesser than self->string_size. Returns 0 on success, -1 otherwise. */ +static int +unshare_buffer(bytesio *self, size_t size) +{ + PyObject *new_buf, *old_buf; + assert(SHARED_BUF(self)); + assert(self->exports == 0); + assert(size >= (size_t)self->string_size); + new_buf = PyBytes_FromStringAndSize(NULL, size); + if (new_buf == NULL) + return -1; + memcpy(PyBytes_AS_STRING(new_buf), PyBytes_AS_STRING(self->buf), + self->string_size); + old_buf = self->buf; + self->buf = new_buf; + Py_DECREF(old_buf); + return 0; +} + /* Internal routine for changing the size of the buffer of BytesIO objects. The caller should ensure that the 'size' argument is non-negative. Returns 0 on success, -1 otherwise. */ @@ -117,8 +100,7 @@ resize_buffer(bytesio *self, size_t size) { /* Here, unsigned types are used to avoid dealing with signed integer overflow, which is undefined in C. */ - size_t alloc = self->buf_size; - char *new_buf = NULL; + size_t alloc = PyBytes_GET_SIZE(self->buf); assert(self->buf != NULL); @@ -146,13 +128,15 @@ resize_buffer(bytesio *self, size_t size) if (alloc > ((size_t)-1) / sizeof(char)) goto overflow; - new_buf = (char *)PyMem_Realloc(self->buf, alloc * sizeof(char)); - if (new_buf == NULL) { - PyErr_NoMemory(); - return -1; + + if (SHARED_BUF(self)) { + if (unshare_buffer(self, alloc) < 0) + return -1; + } + else { + if (_PyBytes_Resize(&self->buf, alloc) < 0) + return -1; } - self->buf_size = alloc; - self->buf = new_buf; return 0; @@ -167,21 +151,18 @@ resize_buffer(bytesio *self, size_t size) static Py_ssize_t write_bytes(bytesio *self, const char *bytes, Py_ssize_t len) { - size_t desired; - assert(self->buf != NULL); assert(self->pos >= 0); assert(len >= 0); - desired = (size_t)self->pos + len; - if (unshare(self, desired, 0) < 0) { - return -1; - } - - if (desired > self->buf_size) { + if ((size_t)self->pos + len > (size_t)PyBytes_GET_SIZE(self->buf)) { if (resize_buffer(self, (size_t)self->pos + len) < 0) return -1; } + else if (SHARED_BUF(self)) { + if (unshare_buffer(self, self->string_size) < 0) + return -1; + } if (self->pos > self->string_size) { /* In case of overseek, pad with null bytes the buffer region between @@ -192,13 +173,13 @@ write_bytes(bytesio *self, const char *bytes, Py_ssize_t len) | | <--to pad-->|<---to write---> | 0 buf position */ - memset(self->buf + self->string_size, '\0', + memset(PyBytes_AS_STRING(self->buf) + self->string_size, '\0', (self->pos - self->string_size) * sizeof(char)); } /* Copy the data to the internal buffer, overwriting some of the existing data if self->pos < self->string_size. */ - memcpy(self->buf + self->pos, bytes, len); + memcpy(PyBytes_AS_STRING(self->buf) + self->pos, bytes, len); self->pos += len; /* Set the new length of the internal string if it has changed. */ @@ -209,74 +190,6 @@ write_bytes(bytesio *self, const char *bytes, Py_ssize_t len) return len; } -/* Release or free any existing buffer, and place the BytesIO in the closed - * state. */ -static void -reset(bytesio *self) -{ - if (self->initvalue) { - Py_CLEAR(self->initvalue); - } else if (self->buf) { - PyMem_Free(self->buf); - } - self->buf = NULL; - self->string_size = 0; - self->pos = 0; -} - -/* Reinitialize with a new heap-allocated buffer of size `size`. Returns 0 on - * success, or sets an exception and returns -1 on failure. Existing state is - * preserved on failure. */ -static int -reinit_private(bytesio *self, Py_ssize_t size) -{ - char *tmp = (char *)PyMem_Malloc(size); - if (tmp == NULL) { - PyErr_NoMemory(); - return -1; - } - reset(self); - self->buf = tmp; - self->buf_size = size; - return 0; -} - -/* Internal version of BytesIO.__init__; resets the object to its initial - * (closed) state before repopulating it, optionally by sharing a PyBytes - * buffer provided by `initvalue'. Returns 0 on success, or sets an exception - * and returns -1 on failure. */ -static int -reinit(bytesio *self, PyObject *initvalue) -{ - CHECK_CLOSED(self, -1); - - if (initvalue == NULL || initvalue == Py_None) { - if (reinit_private(self, 0) < 0) { - return -1; - } - } else if (PyBytes_CheckExact(initvalue)) { - reset(self); - Py_INCREF(initvalue); - self->initvalue = initvalue; - self->buf = PyBytes_AS_STRING(initvalue); - self->buf_size = PyBytes_GET_SIZE(initvalue); - self->string_size = PyBytes_GET_SIZE(initvalue); - } else { - Py_buffer buf; - if (PyObject_GetBuffer(initvalue, &buf, PyBUF_CONTIG_RO) < 0) { - return -1; - } - if (reinit_private(self, buf.len) < 0) { - PyBuffer_Release(&buf); - return -1; - } - memcpy(self->buf, buf.buf, buf.len); - self->string_size = buf.len; - PyBuffer_Release(&buf); - } - return 0; -} - static PyObject * bytesio_get_closed(bytesio *self) { @@ -301,7 +214,7 @@ PyDoc_STRVAR(seekable_doc, static PyObject * return_not_closed(bytesio *self) { - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); Py_RETURN_TRUE; } @@ -311,7 +224,7 @@ PyDoc_STRVAR(flush_doc, static PyObject * bytesio_flush(bytesio *self) { - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); Py_RETURN_NONE; } @@ -327,7 +240,7 @@ bytesio_getbuffer(bytesio *self) bytesiobuf *buf; PyObject *view; - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); buf = (bytesiobuf *) type->tp_alloc(type, 0); if (buf == NULL) @@ -347,8 +260,23 @@ PyDoc_STRVAR(getval_doc, static PyObject * bytesio_getvalue(bytesio *self) { - CHECK_CLOSED(self, NULL); - return PyBytes_FromStringAndSize(self->buf, self->string_size); + CHECK_CLOSED(self); + if (self->string_size <= 1 || self->exports > 0) + return PyBytes_FromStringAndSize(PyBytes_AS_STRING(self->buf), + self->string_size); + + if (self->string_size != PyBytes_GET_SIZE(self->buf)) { + if (SHARED_BUF(self)) { + if (unshare_buffer(self, self->string_size) < 0) + return NULL; + } + else { + if (_PyBytes_Resize(&self->buf, self->string_size) < 0) + return NULL; + } + } + Py_INCREF(self->buf); + return self->buf; } PyDoc_STRVAR(isatty_doc, @@ -360,7 +288,7 @@ PyDoc_STRVAR(isatty_doc, static PyObject * bytesio_isatty(bytesio *self) { - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); Py_RETURN_FALSE; } @@ -370,10 +298,29 @@ PyDoc_STRVAR(tell_doc, static PyObject * bytesio_tell(bytesio *self) { - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); return PyLong_FromSsize_t(self->pos); } +static PyObject * +read_bytes(bytesio *self, Py_ssize_t size) +{ + char *output; + + assert(self->buf != NULL); + if (size > 1 && + self->pos == 0 && size == PyBytes_GET_SIZE(self->buf) && + self->exports == 0) { + self->pos += size; + Py_INCREF(self->buf); + return self->buf; + } + + output = PyBytes_AS_STRING(self->buf) + self->pos; + self->pos += size; + return PyBytes_FromStringAndSize(output, size); +} + PyDoc_STRVAR(read_doc, "read([size]) -> read at most size bytes, returned as a string.\n" "\n" @@ -384,10 +331,9 @@ static PyObject * bytesio_read(bytesio *self, PyObject *args) { Py_ssize_t size, n; - char *output; PyObject *arg = Py_None; - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); if (!PyArg_ParseTuple(args, "|O:read", &arg)) return NULL; @@ -415,11 +361,7 @@ bytesio_read(bytesio *self, PyObject *args) size = 0; } - assert(self->buf != NULL); - output = self->buf + self->pos; - self->pos += size; - - return PyBytes_FromStringAndSize(output, size); + return read_bytes(self, size); } @@ -453,10 +395,9 @@ static PyObject * bytesio_readline(bytesio *self, PyObject *args) { Py_ssize_t size, n; - char *output; PyObject *arg = Py_None; - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); if (!PyArg_ParseTuple(args, "|O:readline", &arg)) return NULL; @@ -478,9 +419,7 @@ bytesio_readline(bytesio *self, PyObject *args) n = scan_eol(self, size); - output = self->buf + self->pos; - self->pos += n; - return PyBytes_FromStringAndSize(output, n); + return read_bytes(self, n); } PyDoc_STRVAR(readlines_doc, @@ -498,7 +437,7 @@ bytesio_readlines(bytesio *self, PyObject *args) char *output; PyObject *arg = Py_None; - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); if (!PyArg_ParseTuple(args, "|O:readlines", &arg)) return NULL; @@ -523,7 +462,7 @@ bytesio_readlines(bytesio *self, PyObject *args) if (!result) return NULL; - output = self->buf + self->pos; + output = PyBytes_AS_STRING(self->buf) + self->pos; while ((n = scan_eol(self, -1)) != 0) { self->pos += n; line = PyBytes_FromStringAndSize(output, n); @@ -558,7 +497,7 @@ bytesio_readinto(bytesio *self, PyObject *arg) Py_buffer buffer; Py_ssize_t len, n; - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); if (!PyArg_Parse(arg, "w*", &buffer)) return NULL; @@ -572,7 +511,7 @@ bytesio_readinto(bytesio *self, PyObject *arg) len = 0; } - memcpy(buffer.buf, self->buf + self->pos, len); + memcpy(buffer.buf, PyBytes_AS_STRING(self->buf) + self->pos, len); assert(self->pos + len < PY_SSIZE_T_MAX); assert(len >= 0); self->pos += len; @@ -593,7 +532,7 @@ bytesio_truncate(bytesio *self, PyObject *args) Py_ssize_t size; PyObject *arg = Py_None; - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); CHECK_EXPORTS(self); if (!PyArg_ParseTuple(args, "|O:truncate", &arg)) @@ -620,10 +559,6 @@ bytesio_truncate(bytesio *self, PyObject *args) return NULL; } - if (unshare(self, size, 1) < 0) { - return NULL; - } - if (size < self->string_size) { self->string_size = size; if (resize_buffer(self, size) < 0) @@ -636,19 +571,16 @@ bytesio_truncate(bytesio *self, PyObject *args) static PyObject * bytesio_iternext(bytesio *self) { - const char *next; Py_ssize_t n; - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); n = scan_eol(self, -1); if (n == 0) return NULL; - next = self->buf + self->pos; - self->pos += n; - return PyBytes_FromStringAndSize(next, n); + return read_bytes(self, n); } PyDoc_STRVAR(seek_doc, @@ -666,7 +598,7 @@ bytesio_seek(bytesio *self, PyObject *args) Py_ssize_t pos; int mode = 0; - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); if (!PyArg_ParseTuple(args, "n|i:seek", &pos, &mode)) return NULL; @@ -721,7 +653,7 @@ bytesio_write(bytesio *self, PyObject *obj) Py_buffer buf; PyObject *result = NULL; - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); CHECK_EXPORTS(self); if (PyObject_GetBuffer(obj, &buf, PyBUF_CONTIG_RO) < 0) @@ -749,7 +681,7 @@ bytesio_writelines(bytesio *self, PyObject *v) PyObject *it, *item; PyObject *ret; - CHECK_CLOSED(self, NULL); + CHECK_CLOSED(self); it = PyObject_GetIter(v); if (it == NULL) @@ -780,7 +712,7 @@ static PyObject * bytesio_close(bytesio *self) { CHECK_EXPORTS(self); - reset(self); + Py_CLEAR(self->buf); Py_RETURN_NONE; } @@ -828,11 +760,11 @@ bytesio_getstate(bytesio *self) static PyObject * bytesio_setstate(bytesio *self, PyObject *state) { + PyObject *result; PyObject *position_obj; PyObject *dict; Py_ssize_t pos; - CHECK_EXPORTS(self); assert(state != NULL); /* We allow the state tuple to be longer than 3, because we may need @@ -844,13 +776,18 @@ bytesio_setstate(bytesio *self, PyObject *state) Py_TYPE(self)->tp_name, Py_TYPE(state)->tp_name); return NULL; } + CHECK_EXPORTS(self); + /* Reset the object to its default state. This is only needed to handle + the case of repeated calls to __setstate__. */ + self->string_size = 0; + self->pos = 0; - /* Reset the object to its default state and set the value of the internal - * buffer. If state[0] does not support the buffer protocol, reinit() will - * raise the appropriate TypeError. */ - if (reinit(self, PyTuple_GET_ITEM(state, 0)) < 0) { + /* Set the value of the internal buffer. If state[0] does not support the + buffer protocol, bytesio_write will raise the appropriate TypeError. */ + result = bytesio_write(self, PyTuple_GET_ITEM(state, 0)); + if (result == NULL) return NULL; - } + Py_DECREF(result); /* Set carefully the position value. Alternatively, we could use the seek method instead of modifying self->pos directly to better protect the @@ -905,9 +842,7 @@ bytesio_dealloc(bytesio *self) "deallocated BytesIO object has exported buffers"); PyErr_Print(); } - - reset(self); - + Py_CLEAR(self->buf); Py_CLEAR(self->dict); if (self->weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *) self); @@ -927,7 +862,7 @@ bytesio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) /* tp_alloc initializes all the fields to zero. So we don't have to initialize them here. */ - self->buf = (char *)PyMem_Malloc(0); + self->buf = PyBytes_FromStringAndSize(NULL, 0); if (self->buf == NULL) { Py_DECREF(self); return PyErr_NoMemory(); @@ -946,7 +881,33 @@ bytesio_init(bytesio *self, PyObject *args, PyObject *kwds) &initvalue)) return -1; - return reinit(self, initvalue); + /* In case, __init__ is called multiple times. */ + self->string_size = 0; + self->pos = 0; + + if (self->exports > 0) { + PyErr_SetString(PyExc_BufferError, + "Existing exports of data: object cannot be re-sized"); + return -1; + } + if (initvalue && initvalue != Py_None) { + if (PyBytes_CheckExact(initvalue)) { + Py_INCREF(initvalue); + Py_XDECREF(self->buf); + self->buf = initvalue; + self->string_size = PyBytes_GET_SIZE(initvalue); + } + else { + PyObject *res; + res = bytesio_write(self, initvalue); + if (res == NULL) + return -1; + Py_DECREF(res); + self->pos = 0; + } + } + + return 0; } static PyObject * @@ -955,8 +916,8 @@ bytesio_sizeof(bytesio *self, void *unused) Py_ssize_t res; res = sizeof(bytesio); - if (self->buf) - res += self->buf_size; + if (self->buf && !SHARED_BUF(self)) + res += _PySys_GetSizeOf(self->buf); return PyLong_FromSsize_t(res); } @@ -1066,11 +1027,16 @@ bytesiobuf_getbuffer(bytesiobuf *obj, Py_buffer *view, int flags) { int ret; bytesio *b = (bytesio *) obj->source; + if (SHARED_BUF(b)) { + if (unshare_buffer(b, b->string_size) < 0) + return -1; + } if (view == NULL) { b->exports++; return 0; } - ret = PyBuffer_FillInfo(view, (PyObject*)obj, b->buf, b->string_size, + ret = PyBuffer_FillInfo(view, (PyObject*)obj, + PyBytes_AS_STRING(b->buf), b->string_size, 0, flags); if (ret >= 0) { b->exports++; -- cgit v1.2.1 From 8506dd20ea12862ef165f610554d7cae6eed0a95 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 3 Feb 2015 14:57:49 +0200 Subject: Issue #15381: Try to fix refcount bug. Empty and 1-byte buffers are always shared. --- Modules/_io/bytesio.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index ca5156b84b..1638f943d0 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -38,7 +38,8 @@ typedef struct { return NULL; \ } -#define SHARED_BUF(self) (Py_REFCNT((self)->buf) > 1) +#define SHARED_BUF(self) (Py_REFCNT((self)->buf) > 1 || \ + PyBytes_GET_SIZE((self)->buf) <= 1) /* Internal routine to get a line from the buffer of a BytesIO @@ -308,6 +309,7 @@ read_bytes(bytesio *self, Py_ssize_t size) char *output; assert(self->buf != NULL); + assert(size <= self->string_size); if (size > 1 && self->pos == 0 && size == PyBytes_GET_SIZE(self->buf) && self->exports == 0) { -- cgit v1.2.1 From 6c761064621bba17ad8d3d8b5d7ed6a0ac5d7d4e Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Tue, 3 Feb 2015 16:57:21 +0100 Subject: Issue #14203: Remove obsolete support for view==NULL in PyBuffer_FillInfo() and bytearray_getbuffer(). Both functions now raise BufferError in that case. --- Modules/_testcapimodule.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 60e973708e..3cbe00cd96 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2518,6 +2518,39 @@ test_from_contiguous(PyObject* self, PyObject *noargs) Py_RETURN_NONE; } + +static PyObject * +test_pep3118_obsolete_write_locks(PyObject* self, PyObject *noargs) +{ + PyObject *b; + char *dummy[1]; + int ret, match; + + ret = PyBuffer_FillInfo(NULL, NULL, dummy, 1, 0, PyBUF_SIMPLE); + match = PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_BufferError); + PyErr_Clear(); + if (ret != -1 || match == 0) + goto error; + + b = PyByteArray_FromStringAndSize("", 0); + if (b == NULL) { + return NULL; + } + + ret = PyObject_GetBuffer(b, NULL, PyBUF_SIMPLE); + Py_DECREF(b); + match = PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_BufferError); + PyErr_Clear(); + if (ret != -1 || match == 0) + goto error; + + Py_RETURN_NONE; + +error: + PyErr_SetString(TestError, + "test_pep3118_obsolete_write_locks: failure"); + return NULL; +} /* Test that the fatal error from not having a current thread doesn't cause an infinite loop. Run via Lib/test/test_capi.py */ @@ -3179,6 +3212,7 @@ static PyMethodDef TestMethods[] = { {"test_unicode_compare_with_ascii", (PyCFunction)test_unicode_compare_with_ascii, METH_NOARGS}, {"test_capsule", (PyCFunction)test_capsule, METH_NOARGS}, {"test_from_contiguous", (PyCFunction)test_from_contiguous, METH_NOARGS}, + {"test_pep3118_obsolete_write_locks", (PyCFunction)test_pep3118_obsolete_write_locks, METH_NOARGS}, {"getargs_tuple", getargs_tuple, METH_VARARGS}, {"getargs_keywords", (PyCFunction)getargs_keywords, METH_VARARGS|METH_KEYWORDS}, -- cgit v1.2.1 From 2cc2f792a75edb7f0eec1e9c6de6dffb6dc8de3c Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 3 Feb 2015 18:51:58 +0200 Subject: Issue #15381: Fixed a bug in BytesIO.write(). It was expected that string_size == PyBytes_GET_SIZE(buf) if the buffer is shared, but truncate() and __setstate__() can set string_size without unsharing the buffer. --- Modules/_io/bytesio.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index 1638f943d0..0a272ecc7a 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -19,7 +19,7 @@ typedef struct { /* The bytesio object can be in three states: * Py_REFCNT(buf) == 1, exports == 0. - * Py_REFCNT(buf) > 1. exports == 0, string_size == PyBytes_GET_SIZE(buf), + * Py_REFCNT(buf) > 1. exports == 0, first modification or export causes the internal buffer copying. * exports > 0. Py_REFCNT(buf) == 1, any modifications are forbidden. */ @@ -38,8 +38,7 @@ typedef struct { return NULL; \ } -#define SHARED_BUF(self) (Py_REFCNT((self)->buf) > 1 || \ - PyBytes_GET_SIZE((self)->buf) <= 1) +#define SHARED_BUF(self) (Py_REFCNT((self)->buf) > 1) /* Internal routine to get a line from the buffer of a BytesIO @@ -152,16 +151,18 @@ resize_buffer(bytesio *self, size_t size) static Py_ssize_t write_bytes(bytesio *self, const char *bytes, Py_ssize_t len) { + size_t endpos; assert(self->buf != NULL); assert(self->pos >= 0); assert(len >= 0); - if ((size_t)self->pos + len > (size_t)PyBytes_GET_SIZE(self->buf)) { - if (resize_buffer(self, (size_t)self->pos + len) < 0) + endpos = (size_t)self->pos + len; + if (endpos > (size_t)PyBytes_GET_SIZE(self->buf)) { + if (resize_buffer(self, endpos) < 0) return -1; } else if (SHARED_BUF(self)) { - if (unshare_buffer(self, self->string_size) < 0) + if (unshare_buffer(self, Py_MAX(endpos, (size_t)self->string_size)) < 0) return -1; } @@ -181,11 +182,11 @@ write_bytes(bytesio *self, const char *bytes, Py_ssize_t len) /* Copy the data to the internal buffer, overwriting some of the existing data if self->pos < self->string_size. */ memcpy(PyBytes_AS_STRING(self->buf) + self->pos, bytes, len); - self->pos += len; + self->pos = endpos; /* Set the new length of the internal string if it has changed. */ - if (self->string_size < self->pos) { - self->string_size = self->pos; + if ((size_t)self->string_size < endpos) { + self->string_size = endpos; } return len; -- cgit v1.2.1 From cd7ad1a7a0c6de5a46c47bfdd03ff3aad0dc3200 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Tue, 3 Feb 2015 21:43:23 +0100 Subject: Issue #14203: Remove obsolete support for view==NULL in bytesiobuf_getbuffer() and array_buffer_getbuf(). --- Modules/_io/bytesio.c | 21 +++++++++++---------- Modules/_testcapimodule.c | 22 ++++++++++++++++++++-- Modules/arraymodule.c | 7 +++++-- 3 files changed, 36 insertions(+), 14 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index 0a272ecc7a..fc4ea74b23 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -1028,23 +1028,24 @@ PyTypeObject PyBytesIO_Type = { static int bytesiobuf_getbuffer(bytesiobuf *obj, Py_buffer *view, int flags) { - int ret; bytesio *b = (bytesio *) obj->source; + + if (view == NULL) { + PyErr_SetString(PyExc_BufferError, + "bytesiobuf_getbuffer: view==NULL argument is obsolete"); + return -1; + } if (SHARED_BUF(b)) { if (unshare_buffer(b, b->string_size) < 0) return -1; } - if (view == NULL) { - b->exports++; - return 0; - } - ret = PyBuffer_FillInfo(view, (PyObject*)obj, + + /* cannot fail if view != NULL and readonly == 0 */ + (void)PyBuffer_FillInfo(view, (PyObject*)obj, PyBytes_AS_STRING(b->buf), b->string_size, 0, flags); - if (ret >= 0) { - b->exports++; - } - return ret; + b->exports++; + return 0; } static void diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 3cbe00cd96..a4930fbc8f 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2518,21 +2518,26 @@ test_from_contiguous(PyObject* self, PyObject *noargs) Py_RETURN_NONE; } - + +extern PyTypeObject _PyBytesIOBuffer_Type; + static PyObject * test_pep3118_obsolete_write_locks(PyObject* self, PyObject *noargs) { + PyTypeObject *type = &_PyBytesIOBuffer_Type; PyObject *b; char *dummy[1]; int ret, match; + /* PyBuffer_FillInfo() */ ret = PyBuffer_FillInfo(NULL, NULL, dummy, 1, 0, PyBUF_SIMPLE); match = PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_BufferError); PyErr_Clear(); if (ret != -1 || match == 0) goto error; - b = PyByteArray_FromStringAndSize("", 0); + /* bytesiobuf_getbuffer() */ + b = type->tp_alloc(type, 0); if (b == NULL) { return NULL; } @@ -2552,6 +2557,18 @@ error: return NULL; } +/* This tests functions that historically supported write locks. It is + wrong to call getbuffer() with view==NULL and a compliant getbufferproc + is entitled to segfault in that case. */ +static PyObject * +getbuffer_with_null_view(PyObject* self, PyObject *obj) +{ + if (PyObject_GetBuffer(obj, NULL, PyBUF_SIMPLE) < 0) + return NULL; + + Py_RETURN_NONE; +} + /* Test that the fatal error from not having a current thread doesn't cause an infinite loop. Run via Lib/test/test_capi.py */ static PyObject * @@ -3213,6 +3230,7 @@ static PyMethodDef TestMethods[] = { {"test_capsule", (PyCFunction)test_capsule, METH_NOARGS}, {"test_from_contiguous", (PyCFunction)test_from_contiguous, METH_NOARGS}, {"test_pep3118_obsolete_write_locks", (PyCFunction)test_pep3118_obsolete_write_locks, METH_NOARGS}, + {"getbuffer_with_null_view", getbuffer_with_null_view, METH_O}, {"getargs_tuple", getargs_tuple, METH_VARARGS}, {"getargs_keywords", (PyCFunction)getargs_keywords, METH_VARARGS|METH_KEYWORDS}, diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 87bdb2c813..6e755f4fcf 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2530,7 +2530,11 @@ static const void *emptybuf = ""; static int array_buffer_getbuf(arrayobject *self, Py_buffer *view, int flags) { - if (view==NULL) goto finish; + if (view == NULL) { + PyErr_SetString(PyExc_BufferError, + "array_buffer_getbuf: view==NULL argument is obsolete"); + return -1; + } view->buf = (void *)self->ob_item; view->obj = (PyObject*)self; @@ -2560,7 +2564,6 @@ array_buffer_getbuf(arrayobject *self, Py_buffer *view, int flags) #endif } - finish: self->ob_exports++; return 0; } -- cgit v1.2.1 From 7c584647e0c2fe3f84299cab3b7941d1595de32f Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Tue, 3 Feb 2015 22:27:21 +0100 Subject: Issue #14203: Temporary fix for the compile failure on Windows. --- Modules/_testcapimodule.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index a4930fbc8f..465826065f 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2519,6 +2519,7 @@ test_from_contiguous(PyObject* self, PyObject *noargs) Py_RETURN_NONE; } +#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__GNUC__) extern PyTypeObject _PyBytesIOBuffer_Type; static PyObject * @@ -2556,6 +2557,7 @@ error: "test_pep3118_obsolete_write_locks: failure"); return NULL; } +#endif /* This tests functions that historically supported write locks. It is wrong to call getbuffer() with view==NULL and a compliant getbufferproc @@ -3229,7 +3231,9 @@ static PyMethodDef TestMethods[] = { {"test_unicode_compare_with_ascii", (PyCFunction)test_unicode_compare_with_ascii, METH_NOARGS}, {"test_capsule", (PyCFunction)test_capsule, METH_NOARGS}, {"test_from_contiguous", (PyCFunction)test_from_contiguous, METH_NOARGS}, +#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__GNUC__) {"test_pep3118_obsolete_write_locks", (PyCFunction)test_pep3118_obsolete_write_locks, METH_NOARGS}, +#endif {"getbuffer_with_null_view", getbuffer_with_null_view, METH_O}, {"getargs_tuple", getargs_tuple, METH_VARARGS}, {"getargs_keywords", (PyCFunction)getargs_keywords, -- cgit v1.2.1 From 166a57a01b10a5398290e02aa4ad6142cf9dc41e Mon Sep 17 00:00:00 2001 From: Charles-Fran?ois Natali Date: Sat, 7 Feb 2015 13:27:50 +0000 Subject: Issue #23285: PEP 475 -- Retry system calls failing with EINTR. --- Modules/_io/fileio.c | 125 +++++++++------- Modules/posixmodule.c | 385 +++++++++++++++++++++++++++++++------------------ Modules/socketmodule.c | 239 ++++++++++++++++-------------- 3 files changed, 441 insertions(+), 308 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 80af83a7a4..2435513400 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -218,6 +218,7 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) #ifdef HAVE_FSTAT struct stat fdfstat; #endif + int async_err = 0; assert(PyFileIO_Check(oself)); if (self->fd >= 0) { @@ -360,15 +361,18 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) errno = 0; if (opener == Py_None) { - Py_BEGIN_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - if (widename != NULL) - self->fd = _wopen(widename, flags, 0666); - else + if (widename != NULL) + self->fd = _wopen(widename, flags, 0666); + else #endif - self->fd = open(name, flags, 0666); + self->fd = open(name, flags, 0666); - Py_END_ALLOW_THREADS + Py_END_ALLOW_THREADS + } while (self->fd < 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); } else { PyObject *fdobj; @@ -397,7 +401,8 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) fd_is_own = 1; if (self->fd < 0) { - PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, nameobj); + if (!async_err) + PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, nameobj); goto error; } @@ -550,7 +555,7 @@ fileio_readinto(fileio *self, PyObject *args) { Py_buffer pbuf; Py_ssize_t n, len; - int err; + int err, async_err = 0; if (self->fd < 0) return err_closed(); @@ -562,16 +567,19 @@ fileio_readinto(fileio *self, PyObject *args) if (_PyVerify_fd(self->fd)) { len = pbuf.len; - Py_BEGIN_ALLOW_THREADS - errno = 0; + do { + Py_BEGIN_ALLOW_THREADS + errno = 0; #ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - n = read(self->fd, pbuf.buf, (int)len); + if (len > INT_MAX) + len = INT_MAX; + n = read(self->fd, pbuf.buf, (int)len); #else - n = read(self->fd, pbuf.buf, len); + n = read(self->fd, pbuf.buf, len); #endif - Py_END_ALLOW_THREADS + Py_END_ALLOW_THREADS + } while (n < 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); } else n = -1; err = errno; @@ -580,7 +588,8 @@ fileio_readinto(fileio *self, PyObject *args) if (err == EAGAIN) Py_RETURN_NONE; errno = err; - PyErr_SetFromErrno(PyExc_IOError); + if (!async_err) + PyErr_SetFromErrno(PyExc_IOError); return NULL; } @@ -627,6 +636,7 @@ fileio_readall(fileio *self) Py_ssize_t bytes_read = 0; Py_ssize_t n; size_t bufsize; + int async_err = 0; if (self->fd < 0) return err_closed(); @@ -673,27 +683,23 @@ fileio_readall(fileio *self) return NULL; } } - Py_BEGIN_ALLOW_THREADS - errno = 0; - n = bufsize - bytes_read; + do { + Py_BEGIN_ALLOW_THREADS + errno = 0; + n = bufsize - bytes_read; #ifdef MS_WINDOWS - if (n > INT_MAX) - n = INT_MAX; - n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, (int)n); + if (n > INT_MAX) + n = INT_MAX; + n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, (int)n); #else - n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, n); + n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, n); #endif - Py_END_ALLOW_THREADS + Py_END_ALLOW_THREADS + } while (n < 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); if (n == 0) break; if (n < 0) { - if (errno == EINTR) { - if (PyErr_CheckSignals()) { - Py_DECREF(result); - return NULL; - } - continue; - } if (errno == EAGAIN) { if (bytes_read > 0) break; @@ -701,7 +707,8 @@ fileio_readall(fileio *self) Py_RETURN_NONE; } Py_DECREF(result); - PyErr_SetFromErrno(PyExc_IOError); + if (!async_err) + PyErr_SetFromErrno(PyExc_IOError); return NULL; } bytes_read += n; @@ -723,6 +730,7 @@ fileio_read(fileio *self, PyObject *args) char *ptr; Py_ssize_t n; Py_ssize_t size = -1; + int async_err = 0; PyObject *bytes; if (self->fd < 0) @@ -747,14 +755,17 @@ fileio_read(fileio *self, PyObject *args) ptr = PyBytes_AS_STRING(bytes); if (_PyVerify_fd(self->fd)) { - Py_BEGIN_ALLOW_THREADS - errno = 0; + do { + Py_BEGIN_ALLOW_THREADS + errno = 0; #ifdef MS_WINDOWS - n = read(self->fd, ptr, (int)size); + n = read(self->fd, ptr, (int)size); #else - n = read(self->fd, ptr, size); + n = read(self->fd, ptr, size); #endif - Py_END_ALLOW_THREADS + Py_END_ALLOW_THREADS + } while (n < 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); } else n = -1; @@ -764,7 +775,8 @@ fileio_read(fileio *self, PyObject *args) if (err == EAGAIN) Py_RETURN_NONE; errno = err; - PyErr_SetFromErrno(PyExc_IOError); + if (!async_err) + PyErr_SetFromErrno(PyExc_IOError); return NULL; } @@ -783,7 +795,7 @@ fileio_write(fileio *self, PyObject *args) { Py_buffer pbuf; Py_ssize_t n, len; - int err; + int err, async_err = 0; if (self->fd < 0) return err_closed(); @@ -794,24 +806,26 @@ fileio_write(fileio *self, PyObject *args) return NULL; if (_PyVerify_fd(self->fd)) { - Py_BEGIN_ALLOW_THREADS - errno = 0; - len = pbuf.len; + do { + Py_BEGIN_ALLOW_THREADS + errno = 0; + len = pbuf.len; #ifdef MS_WINDOWS - if (len > 32767 && isatty(self->fd)) { - /* Issue #11395: the Windows console returns an error (12: not - enough space error) on writing into stdout if stdout mode is - binary and the length is greater than 66,000 bytes (or less, - depending on heap usage). */ - len = 32767; - } - else if (len > INT_MAX) - len = INT_MAX; - n = write(self->fd, pbuf.buf, (int)len); + if (len > 32767 && isatty(self->fd)) { + /* Issue #11395: the Windows console returns an error (12: not + enough space error) on writing into stdout if stdout mode is + binary and the length is greater than 66,000 bytes (or less, + depending on heap usage). */ + len = 32767; + } else if (len > INT_MAX) + len = INT_MAX; + n = write(self->fd, pbuf.buf, (int)len); #else - n = write(self->fd, pbuf.buf, len); + n = write(self->fd, pbuf.buf, len); #endif - Py_END_ALLOW_THREADS + Py_END_ALLOW_THREADS + } while (n < 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); } else n = -1; err = errno; @@ -822,7 +836,8 @@ fileio_write(fileio *self, PyObject *args) if (err == EAGAIN) Py_RETURN_NONE; errno = err; - PyErr_SetFromErrno(PyExc_IOError); + if (!async_err) + PyErr_SetFromErrno(PyExc_IOError); return NULL; } diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 94df06c27d..118a380e71 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1361,13 +1361,16 @@ static PyObject * posix_fildes_fd(int fd, int (*func)(int)) { int res; - Py_BEGIN_ALLOW_THREADS - res = (*func)(fd); - Py_END_ALLOW_THREADS - if (res < 0) - return posix_error(); - Py_INCREF(Py_None); - return Py_None; + int async_err = 0; + + do { + Py_BEGIN_ALLOW_THREADS + res = (*func)(fd); + Py_END_ALLOW_THREADS + } while (res != 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (res != 0) + return (!async_err) ? posix_error() : NULL; + Py_RETURN_NONE; } @@ -3479,11 +3482,16 @@ os_fchmod_impl(PyModuleDef *module, int fd, int mode) /*[clinic end generated code: output=3c19fbfd724a8e0f input=8ab11975ca01ee5b]*/ { int res; - Py_BEGIN_ALLOW_THREADS - res = fchmod(fd, mode); - Py_END_ALLOW_THREADS - if (res < 0) - return posix_error(); + int async_err = 0; + + do { + Py_BEGIN_ALLOW_THREADS + res = fchmod(fd, mode); + Py_END_ALLOW_THREADS + } while (res != 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (res != 0) + return (!async_err) ? posix_error() : NULL; + Py_RETURN_NONE; } #endif /* HAVE_FCHMOD */ @@ -4104,11 +4112,16 @@ os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid) /*[clinic end generated code: output=687781cb7d8974d6 input=3af544ba1b13a0d7]*/ { int res; - Py_BEGIN_ALLOW_THREADS - res = fchown(fd, uid, gid); - Py_END_ALLOW_THREADS - if (res < 0) - return posix_error(); + int async_err = 0; + + do { + Py_BEGIN_ALLOW_THREADS + res = fchown(fd, uid, gid); + Py_END_ALLOW_THREADS + } while (res != 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (res != 0) + return (!async_err) ? posix_error() : NULL; + Py_RETURN_NONE; } #endif /* HAVE_FCHOWN */ @@ -9602,12 +9615,17 @@ os_wait3_impl(PyModuleDef *module, int options) { pid_t pid; struct rusage ru; + int async_err = 0; WAIT_TYPE status; WAIT_STATUS_INT(status) = 0; - Py_BEGIN_ALLOW_THREADS - pid = wait3(&status, options, &ru); - Py_END_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS + pid = wait3(&status, options, &ru); + Py_END_ALLOW_THREADS + } while (pid < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (pid < 0) + return (!async_err) ? posix_error() : NULL; return wait_helper(pid, WAIT_STATUS_INT(status), &ru); } @@ -9665,15 +9683,21 @@ static PyObject * os_wait4_impl(PyModuleDef *module, pid_t pid, int options) /*[clinic end generated code: output=20dfb05289d37dc6 input=d11deed0750600ba]*/ { + pid_t res; struct rusage ru; + int async_err = 0; WAIT_TYPE status; WAIT_STATUS_INT(status) = 0; - Py_BEGIN_ALLOW_THREADS - pid = wait4(pid, &status, options, &ru); - Py_END_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS + res = wait4(pid, &status, options, &ru); + Py_END_ALLOW_THREADS + } while (res < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (res < 0) + return (!async_err) ? posix_error() : NULL; - return wait_helper(pid, WAIT_STATUS_INT(status), &ru); + return wait_helper(res, WAIT_STATUS_INT(status), &ru); } #endif /* HAVE_WAIT4 */ @@ -9744,14 +9768,17 @@ os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options) { PyObject *result; int res; + int async_err = 0; siginfo_t si; si.si_pid = 0; - Py_BEGIN_ALLOW_THREADS - res = waitid(idtype, id, &si, options); - Py_END_ALLOW_THREADS - if (res == -1) - return posix_error(); + do { + Py_BEGIN_ALLOW_THREADS + res = waitid(idtype, id, &si, options); + Py_END_ALLOW_THREADS + } while (res < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (res < 0) + return (!async_err) ? posix_error() : NULL; if (si.si_pid == 0) Py_RETURN_NONE; @@ -9828,16 +9855,20 @@ static PyObject * os_waitpid_impl(PyModuleDef *module, pid_t pid, int options) /*[clinic end generated code: output=095a6b00af70b7ac input=0bf1666b8758fda3]*/ { + pid_t res; + int async_err = 0; WAIT_TYPE status; WAIT_STATUS_INT(status) = 0; - Py_BEGIN_ALLOW_THREADS - pid = waitpid(pid, &status, options); - Py_END_ALLOW_THREADS - if (pid == -1) - return posix_error(); + do { + Py_BEGIN_ALLOW_THREADS + res = waitpid(pid, &status, options); + Py_END_ALLOW_THREADS + } while (res < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (res < 0) + return (!async_err) ? posix_error() : NULL; - return Py_BuildValue("Ni", PyLong_FromPid(pid), WAIT_STATUS_INT(status)); + return Py_BuildValue("Ni", PyLong_FromPid(res), WAIT_STATUS_INT(status)); } #elif defined(HAVE_CWAIT) /* MS C has a variant of waitpid() that's usable for most purposes. */ @@ -9894,15 +9925,19 @@ os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options) /*[clinic end generated code: output=c20b95b15ad44a3a input=444c8f51cca5b862]*/ { int status; + Py_intptr_t res; + int async_err = 0; - Py_BEGIN_ALLOW_THREADS - pid = _cwait(&status, pid, options); - Py_END_ALLOW_THREADS - if (pid == -1) - return posix_error(); + do { + Py_BEGIN_ALLOW_THREADS + res = _cwait(&status, pid, options); + Py_END_ALLOW_THREADS + } while (res < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (res != 0) + return (!async_err) ? posix_error() : NULL; /* shift the status left a byte so this is more like the POSIX waitpid */ - return Py_BuildValue(_Py_PARSE_INTPTR "i", pid, status << 8); + return Py_BuildValue(_Py_PARSE_INTPTR "i", res, status << 8); } #endif @@ -9943,14 +9978,17 @@ os_wait_impl(PyModuleDef *module) /*[clinic end generated code: output=2a83a9d164e7e6a8 input=03b0182d4a4700ce]*/ { pid_t pid; + int async_err = 0; WAIT_TYPE status; WAIT_STATUS_INT(status) = 0; - Py_BEGIN_ALLOW_THREADS - pid = wait(&status); - Py_END_ALLOW_THREADS - if (pid == -1) - return posix_error(); + do { + Py_BEGIN_ALLOW_THREADS + pid = wait(&status); + Py_END_ALLOW_THREADS + } while (pid < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (pid < 0) + return (!async_err) ? posix_error() : NULL; return Py_BuildValue("Ni", PyLong_FromPid(pid), WAIT_STATUS_INT(status)); } @@ -10837,6 +10875,7 @@ os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd) /*[clinic end generated code: output=05b68fc4ed5e29c9 input=ad8623b29acd2934]*/ { int fd; + int async_err = 0; #ifdef O_CLOEXEC int *atomic_flag_works = &_Py_open_cloexec_works; @@ -10850,22 +10889,25 @@ os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd) flags |= O_CLOEXEC; #endif - Py_BEGIN_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - if (path->wide) - fd = _wopen(path->wide, flags, mode); - else + if (path->wide) + fd = _wopen(path->wide, flags, mode); + else #endif #ifdef HAVE_OPENAT - if (dir_fd != DEFAULT_DIR_FD) - fd = openat(dir_fd, path->narrow, flags, mode); - else + if (dir_fd != DEFAULT_DIR_FD) + fd = openat(dir_fd, path->narrow, flags, mode); + else #endif - fd = open(path->narrow, flags, mode); - Py_END_ALLOW_THREADS + fd = open(path->narrow, flags, mode); + Py_END_ALLOW_THREADS + } while (fd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (fd == -1) { - PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object); + if (!async_err) + PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object); return -1; } @@ -10924,6 +10966,10 @@ os_close_impl(PyModuleDef *module, int fd) int res; if (!_PyVerify_fd(fd)) return posix_error(); + /* We do not want to retry upon EINTR: see http://lwn.net/Articles/576478/ + * and http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html + * for more details. + */ Py_BEGIN_ALLOW_THREADS res = close(fd); Py_END_ALLOW_THREADS @@ -11089,6 +11135,10 @@ os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable) if (!_PyVerify_fd_dup2(fd, fd2)) return posix_error(); + /* dup2() can fail with EINTR if the target FD is already open, because it + * then has to be closed. See os_close_impl() for why we don't handle EINTR + * upon close(), and therefore below. + */ #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS res = dup2(fd, fd2); @@ -11355,6 +11405,7 @@ os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length) /*[clinic end generated code: output=1f3bc27260a24968 input=1df2eaa27c0bf1d3]*/ { Py_ssize_t n; + int async_err = 0; PyObject *buffer; if (length < 0) { @@ -11375,13 +11426,16 @@ os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length) buffer = PyBytes_FromStringAndSize((char *)NULL, length); if (buffer == NULL) return NULL; - Py_BEGIN_ALLOW_THREADS - n = read(fd, PyBytes_AS_STRING(buffer), READ_CAST length); - Py_END_ALLOW_THREADS + + do { + Py_BEGIN_ALLOW_THREADS + n = read(fd, PyBytes_AS_STRING(buffer), READ_CAST length); + Py_END_ALLOW_THREADS + } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (n < 0) { Py_DECREF(buffer); - return posix_error(); + return (!async_err) ? posix_error() : NULL; } if (n != length) @@ -11515,6 +11569,7 @@ os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers) { int cnt; Py_ssize_t n; + int async_err = 0; struct iovec *iov; Py_buffer *buf; @@ -11529,13 +11584,16 @@ os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers) if (iov_setup(&iov, &buf, buffers, cnt, PyBUF_WRITABLE) < 0) return -1; - Py_BEGIN_ALLOW_THREADS - n = readv(fd, iov, cnt); - Py_END_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS + n = readv(fd, iov, cnt); + Py_END_ALLOW_THREADS + } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); iov_cleanup(iov, buf, cnt); if (n < 0) { - posix_error(); + if (!async_err) + posix_error(); return -1; } @@ -11598,6 +11656,7 @@ os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset) /*[clinic end generated code: output=7b62bf6c06e20ae8 input=084948dcbaa35d4c]*/ { Py_ssize_t n; + int async_err = 0; PyObject *buffer; if (length < 0) { @@ -11611,12 +11670,16 @@ os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset) Py_DECREF(buffer); return posix_error(); } - Py_BEGIN_ALLOW_THREADS - n = pread(fd, PyBytes_AS_STRING(buffer), length, offset); - Py_END_ALLOW_THREADS + + do { + Py_BEGIN_ALLOW_THREADS + n = pread(fd, PyBytes_AS_STRING(buffer), length, offset); + Py_END_ALLOW_THREADS + } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (n < 0) { Py_DECREF(buffer); - return posix_error(); + return (!async_err) ? posix_error() : NULL; } if (n != length) _PyBytes_Resize(&buffer, n); @@ -11677,6 +11740,7 @@ os_write_impl(PyModuleDef *module, int fd, Py_buffer *data) /*[clinic end generated code: output=aeb96acfdd4d5112 input=3207e28963234f3c]*/ { Py_ssize_t size; + int async_err = 0; Py_ssize_t len = data->len; if (!_PyVerify_fd(fd)) { @@ -11684,17 +11748,21 @@ os_write_impl(PyModuleDef *module, int fd, Py_buffer *data) return -1; } - Py_BEGIN_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - size = write(fd, data->buf, (int)len); + if (len > INT_MAX) + len = INT_MAX; + size = write(fd, data->buf, (int)len); #else - size = write(fd, data->buf, len); + size = write(fd, data->buf, len); #endif - Py_END_ALLOW_THREADS + Py_END_ALLOW_THREADS + } while (size < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (size < 0) { - posix_error(); + if (!async_err) + posix_error(); return -1; } return size; @@ -11713,6 +11781,7 @@ posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict) { int in, out; Py_ssize_t ret; + int async_err = 0; off_t offset; #if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__APPLE__) @@ -11775,13 +11844,15 @@ posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict) } } - Py_BEGIN_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS #ifdef __APPLE__ - ret = sendfile(in, out, offset, &sbytes, &sf, flags); + ret = sendfile(in, out, offset, &sbytes, &sf, flags); #else - ret = sendfile(in, out, offset, len, &sf, &sbytes, flags); + ret = sendfile(in, out, offset, len, &sf, &sbytes, flags); #endif - Py_END_ALLOW_THREADS + Py_END_ALLOW_THREADS + } while (ret < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (sf.headers != NULL) iov_cleanup(sf.headers, hbuf, sf.hdr_cnt); @@ -11800,7 +11871,7 @@ posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict) return posix_error(); } } - return posix_error(); + return (!async_err) ? posix_error() : NULL; } goto done; @@ -11821,21 +11892,26 @@ done: return NULL; #ifdef linux if (offobj == Py_None) { - Py_BEGIN_ALLOW_THREADS - ret = sendfile(out, in, NULL, count); - Py_END_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS + ret = sendfile(out, in, NULL, count); + Py_END_ALLOW_THREADS + } while (ret < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (ret < 0) - return posix_error(); + return (!async_err) ? posix_error() : NULL; return Py_BuildValue("n", ret); } #endif if (!Py_off_t_converter(offobj, &offset)) return NULL; - Py_BEGIN_ALLOW_THREADS - ret = sendfile(out, in, &offset, count); - Py_END_ALLOW_THREADS + + do { + Py_BEGIN_ALLOW_THREADS + ret = sendfile(out, in, &offset, count); + Py_END_ALLOW_THREADS + } while (ret < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (ret < 0) - return posix_error(); + return (!async_err) ? posix_error() : NULL; return Py_BuildValue("n", ret); #endif } @@ -11891,15 +11967,18 @@ os_fstat_impl(PyModuleDef *module, int fd) { STRUCT_STAT st; int res; + int async_err = 0; - Py_BEGIN_ALLOW_THREADS - res = FSTAT(fd, &st); - Py_END_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS + res = FSTAT(fd, &st); + Py_END_ALLOW_THREADS + } while (res != 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (res != 0) { #ifdef MS_WINDOWS return PyErr_SetFromWindowsErr(0); #else - return posix_error(); + return (!async_err) ? posix_error() : NULL; #endif } @@ -12185,6 +12264,7 @@ os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers) { int cnt; Py_ssize_t result; + int async_err = 0; struct iovec *iov; Py_buffer *buf; @@ -12199,12 +12279,14 @@ os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers) return -1; } - Py_BEGIN_ALLOW_THREADS - result = writev(fd, iov, cnt); - Py_END_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS + result = writev(fd, iov, cnt); + Py_END_ALLOW_THREADS + } while (result < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); iov_cleanup(iov, buf, cnt); - if (result < 0) + if (result < 0 && !async_err) posix_error(); return result; @@ -12275,17 +12357,20 @@ os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, Py_off_t offset) /*[clinic end generated code: output=ec9cc5b2238e96a7 input=19903f1b3dd26377]*/ { Py_ssize_t size; + int async_err = 0; if (!_PyVerify_fd(fd)) { posix_error(); return -1; } - Py_BEGIN_ALLOW_THREADS - size = pwrite(fd, buffer->buf, (size_t)buffer->len, offset); - Py_END_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS + size = pwrite(fd, buffer->buf, (size_t)buffer->len, offset); + Py_END_ALLOW_THREADS + } while (size < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); - if (size < 0) + if (size < 0 && !async_err) posix_error(); return size; } @@ -12353,18 +12438,21 @@ os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) /*[clinic end generated code: output=b3321927546893d0 input=73032e98a36e0e19]*/ { int result; + int async_err = 0; - Py_BEGIN_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS #ifdef HAVE_MKFIFOAT - if (dir_fd != DEFAULT_DIR_FD) - result = mkfifoat(dir_fd, path->narrow, mode); - else + if (dir_fd != DEFAULT_DIR_FD) + result = mkfifoat(dir_fd, path->narrow, mode); + else #endif - result = mkfifo(path->narrow, mode); - Py_END_ALLOW_THREADS - - if (result < 0) - return posix_error(); + result = mkfifo(path->narrow, mode); + Py_END_ALLOW_THREADS + } while (result != 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); + if (result != 0) + return (!async_err) ? posix_error() : NULL; Py_RETURN_NONE; } @@ -12448,18 +12536,21 @@ os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, int dir /*[clinic end generated code: output=f71d54eaf9bb6f1a input=ee44531551a4d83b]*/ { int result; + int async_err = 0; - Py_BEGIN_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS #ifdef HAVE_MKNODAT - if (dir_fd != DEFAULT_DIR_FD) - result = mknodat(dir_fd, path->narrow, mode, device); - else + if (dir_fd != DEFAULT_DIR_FD) + result = mknodat(dir_fd, path->narrow, mode, device); + else #endif - result = mknod(path->narrow, mode, device); - Py_END_ALLOW_THREADS - - if (result < 0) - return posix_error(); + result = mknod(path->narrow, mode, device); + Py_END_ALLOW_THREADS + } while (result != 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); + if (result != 0) + return (!async_err) ? posix_error() : NULL; Py_RETURN_NONE; } @@ -12662,12 +12753,16 @@ os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length) /*[clinic end generated code: output=62326766cb9b76bf input=63b43641e52818f2]*/ { int result; + int async_err = 0; - Py_BEGIN_ALLOW_THREADS - result = ftruncate(fd, length); - Py_END_ALLOW_THREADS - if (result < 0) - return posix_error(); + do { + Py_BEGIN_ALLOW_THREADS + result = ftruncate(fd, length); + Py_END_ALLOW_THREADS + } while (result != 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); + if (result != 0) + return (!async_err) ? posix_error() : NULL; Py_RETURN_NONE; } #endif /* HAVE_FTRUNCATE */ @@ -12805,14 +12900,16 @@ os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t l /*[clinic end generated code: output=0cd702d2065c79db input=d7a2ef0ab2ca52fb]*/ { int result; + int async_err = 0; - Py_BEGIN_ALLOW_THREADS - result = posix_fallocate(fd, offset, length); - Py_END_ALLOW_THREADS - if (result != 0) { - errno = result; - return posix_error(); - } + do { + Py_BEGIN_ALLOW_THREADS + result = posix_fallocate(fd, offset, length); + Py_END_ALLOW_THREADS + } while (result != 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); + if (result != 0) + return (!async_err) ? posix_error() : NULL; Py_RETURN_NONE; } #endif /* HAVE_POSIX_FALLOCATE) && !POSIX_FADVISE_AIX_BUG */ @@ -12883,14 +12980,16 @@ os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t len /*[clinic end generated code: output=dad93f32c04dd4f7 input=0fbe554edc2f04b5]*/ { int result; + int async_err = 0; - Py_BEGIN_ALLOW_THREADS - result = posix_fadvise(fd, offset, length, advice); - Py_END_ALLOW_THREADS - if (result != 0) { - errno = result; - return posix_error(); - } + do { + Py_BEGIN_ALLOW_THREADS + result = posix_fadvise(fd, offset, length, advice); + Py_END_ALLOW_THREADS + } while (result != 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); + if (result != 0) + return (!async_err) ? posix_error() : NULL; Py_RETURN_NONE; } #endif /* HAVE_POSIX_FADVISE && !POSIX_FADVISE_AIX_BUG */ @@ -13745,13 +13844,17 @@ os_fstatvfs_impl(PyModuleDef *module, int fd) /*[clinic end generated code: output=0e32bf07f946ec0d input=d8122243ac50975e]*/ { int result; + int async_err = 0; struct statvfs st; - Py_BEGIN_ALLOW_THREADS - result = fstatvfs(fd, &st); - Py_END_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS + result = fstatvfs(fd, &st); + Py_END_ALLOW_THREADS + } while (result != 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); if (result != 0) - return posix_error(); + return (!async_err) ? posix_error() : NULL; return _pystatvfs_fromstructstatvfs(st); } diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 94cf7738e4..5913e65a8e 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2037,6 +2037,7 @@ sock_accept(PySocketSockObject *s) PyObject *addr = NULL; PyObject *res = NULL; int timeout; + int async_err = 0; #if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) /* accept4() is available on Linux 2.6.28+ and glibc 2.10 */ static int accept4_works = -1; @@ -2050,27 +2051,27 @@ sock_accept(PySocketSockObject *s) return select_error(); BEGIN_SELECT_LOOP(s) - - Py_BEGIN_ALLOW_THREADS - timeout = internal_select_ex(s, 0, interval); - if (!timeout) { + do { + Py_BEGIN_ALLOW_THREADS + timeout = internal_select_ex(s, 0, interval); + if (!timeout) { #if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) - if (accept4_works != 0) { - newfd = accept4(s->sock_fd, SAS2SA(&addrbuf), &addrlen, - SOCK_CLOEXEC); - if (newfd == INVALID_SOCKET && accept4_works == -1) { - /* On Linux older than 2.6.28, accept4() fails with ENOSYS */ - accept4_works = (errno != ENOSYS); + if (accept4_works != 0) { + newfd = accept4(s->sock_fd, SAS2SA(&addrbuf), &addrlen, + SOCK_CLOEXEC); + if (newfd == INVALID_SOCKET && accept4_works == -1) { + /* On Linux older than 2.6.28, accept4() fails with ENOSYS */ + accept4_works = (errno != ENOSYS); + } } - } - if (accept4_works == 0) - newfd = accept(s->sock_fd, SAS2SA(&addrbuf), &addrlen); + if (accept4_works == 0) + newfd = accept(s->sock_fd, SAS2SA(&addrbuf), &addrlen); #else - newfd = accept(s->sock_fd, SAS2SA(&addrbuf), &addrlen); + newfd = accept(s->sock_fd, SAS2SA(&addrbuf), &addrlen); #endif - } - Py_END_ALLOW_THREADS - + } + Py_END_ALLOW_THREADS + } while (newfd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (timeout == 1) { PyErr_SetString(socket_timeout, "timed out"); return NULL; @@ -2078,7 +2079,7 @@ sock_accept(PySocketSockObject *s) END_SELECT_LOOP(s) if (newfd == INVALID_SOCKET) - return s->errorhandler(); + return (!async_err) ? s->errorhandler() : NULL; #ifdef MS_WINDOWS if (!SetHandleInformation((HANDLE)newfd, HANDLE_FLAG_INHERIT, 0)) { @@ -2341,6 +2342,10 @@ sock_close(PySocketSockObject *s) { SOCKET_T fd; + /* We do not want to retry upon EINTR: see http://lwn.net/Articles/576478/ + * and http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html + * for more details. + */ if ((fd = s->sock_fd) != -1) { s->sock_fd = -1; Py_BEGIN_ALLOW_THREADS @@ -2513,10 +2518,8 @@ sock_connect_ex(PySocketSockObject *s, PyObject *addro) /* Signals are not errors (though they may raise exceptions). Adapted from PyErr_SetFromErrnoWithFilenameObject(). */ -#ifdef EINTR if (res == EINTR && PyErr_CheckSignals()) return NULL; -#endif return PyLong_FromLong((long) res); } @@ -2650,6 +2653,7 @@ sock_recv_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags) { Py_ssize_t outlen = -1; int timeout; + int async_err = 0; if (!IS_SELECTABLE(s)) { select_error(); @@ -2661,18 +2665,20 @@ sock_recv_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags) } BEGIN_SELECT_LOOP(s) - Py_BEGIN_ALLOW_THREADS - timeout = internal_select_ex(s, 0, interval); - if (!timeout) { + do { + Py_BEGIN_ALLOW_THREADS + timeout = internal_select_ex(s, 0, interval); + if (!timeout) { #ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - outlen = recv(s->sock_fd, cbuf, (int)len, flags); + if (len > INT_MAX) + len = INT_MAX; + outlen = recv(s->sock_fd, cbuf, (int)len, flags); #else - outlen = recv(s->sock_fd, cbuf, len, flags); + outlen = recv(s->sock_fd, cbuf, len, flags); #endif - } - Py_END_ALLOW_THREADS + } + Py_END_ALLOW_THREADS + } while (outlen < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (timeout == 1) { PyErr_SetString(socket_timeout, "timed out"); @@ -2682,7 +2688,8 @@ sock_recv_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags) if (outlen < 0) { /* Note: the call to errorhandler() ALWAYS indirectly returned NULL, so ignore its return value */ - s->errorhandler(); + if (!async_err) + s->errorhandler(); return -1; } return outlen; @@ -2819,6 +2826,7 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags, int timeout; Py_ssize_t n = -1; socklen_t addrlen; + int async_err = 0; *addr = NULL; @@ -2831,21 +2839,23 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags, } BEGIN_SELECT_LOOP(s) - Py_BEGIN_ALLOW_THREADS - memset(&addrbuf, 0, addrlen); - timeout = internal_select_ex(s, 0, interval); - if (!timeout) { + do { + Py_BEGIN_ALLOW_THREADS + memset(&addrbuf, 0, addrlen); + timeout = internal_select_ex(s, 0, interval); + if (!timeout) { #ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - n = recvfrom(s->sock_fd, cbuf, (int)len, flags, - (void *) &addrbuf, &addrlen); + if (len > INT_MAX) + len = INT_MAX; + n = recvfrom(s->sock_fd, cbuf, (int)len, flags, + (void *) &addrbuf, &addrlen); #else - n = recvfrom(s->sock_fd, cbuf, len, flags, - SAS2SA(&addrbuf), &addrlen); + n = recvfrom(s->sock_fd, cbuf, len, flags, + SAS2SA(&addrbuf), &addrlen); #endif - } - Py_END_ALLOW_THREADS + } + Py_END_ALLOW_THREADS + } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (timeout == 1) { PyErr_SetString(socket_timeout, "timed out"); @@ -2853,7 +2863,8 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags, } END_SELECT_LOOP(s) if (n < 0) { - s->errorhandler(); + if (!async_err) + s->errorhandler(); return -1; } @@ -2993,6 +3004,7 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen, { ssize_t bytes_received = -1; int timeout; + int async_err = 0; sock_addr_t addrbuf; socklen_t addrbuflen; struct msghdr msg = {0}; @@ -3028,25 +3040,29 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen, } BEGIN_SELECT_LOOP(s) - Py_BEGIN_ALLOW_THREADS; - msg.msg_name = SAS2SA(&addrbuf); - msg.msg_namelen = addrbuflen; - msg.msg_iov = iov; - msg.msg_iovlen = iovlen; - msg.msg_control = controlbuf; - msg.msg_controllen = controllen; - timeout = internal_select_ex(s, 0, interval); - if (!timeout) - bytes_received = recvmsg(s->sock_fd, &msg, flags); - Py_END_ALLOW_THREADS; - if (timeout == 1) { - PyErr_SetString(socket_timeout, "timed out"); - goto finally; - } + do { + Py_BEGIN_ALLOW_THREADS; + msg.msg_name = SAS2SA(&addrbuf); + msg.msg_namelen = addrbuflen; + msg.msg_iov = iov; + msg.msg_iovlen = iovlen; + msg.msg_control = controlbuf; + msg.msg_controllen = controllen; + timeout = internal_select_ex(s, 0, interval); + if (!timeout) + bytes_received = recvmsg(s->sock_fd, &msg, flags); + Py_END_ALLOW_THREADS; + if (timeout == 1) { + PyErr_SetString(socket_timeout, "timed out"); + goto finally; + } + } while (bytes_received < 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); END_SELECT_LOOP(s) if (bytes_received < 0) { - s->errorhandler(); + if (!async_err) + s->errorhandler(); goto finally; } @@ -3305,6 +3321,7 @@ sock_send(PySocketSockObject *s, PyObject *args) { char *buf; Py_ssize_t len, n = -1; + int async_err = 0; int flags = 0, timeout; Py_buffer pbuf; @@ -3319,18 +3336,20 @@ sock_send(PySocketSockObject *s, PyObject *args) len = pbuf.len; BEGIN_SELECT_LOOP(s) - Py_BEGIN_ALLOW_THREADS - timeout = internal_select_ex(s, 1, interval); - if (!timeout) { + do { + Py_BEGIN_ALLOW_THREADS + timeout = internal_select_ex(s, 1, interval); + if (!timeout) { #ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - n = send(s->sock_fd, buf, (int)len, flags); + if (len > INT_MAX) + len = INT_MAX; + n = send(s->sock_fd, buf, (int)len, flags); #else - n = send(s->sock_fd, buf, len, flags); + n = send(s->sock_fd, buf, len, flags); #endif - } - Py_END_ALLOW_THREADS + } + Py_END_ALLOW_THREADS + } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (timeout == 1) { PyBuffer_Release(&pbuf); PyErr_SetString(socket_timeout, "timed out"); @@ -3340,7 +3359,7 @@ sock_send(PySocketSockObject *s, PyObject *args) PyBuffer_Release(&pbuf); if (n < 0) - return s->errorhandler(); + return (!async_err) ? s->errorhandler() : NULL; return PyLong_FromSsize_t(n); } @@ -3359,7 +3378,8 @@ sock_sendall(PySocketSockObject *s, PyObject *args) { char *buf; Py_ssize_t len, n = -1; - int flags = 0, timeout, saved_errno; + int async_err = 0; + int flags = 0, timeout; Py_buffer pbuf; if (!PyArg_ParseTuple(args, "y*|i:sendall", &pbuf, &flags)) @@ -3391,29 +3411,16 @@ sock_sendall(PySocketSockObject *s, PyObject *args) PyErr_SetString(socket_timeout, "timed out"); return NULL; } - /* PyErr_CheckSignals() might change errno */ - saved_errno = errno; - /* We must run our signal handlers before looping again. - send() can return a successful partial write when it is - interrupted, so we can't restrict ourselves to EINTR. */ - if (PyErr_CheckSignals()) { - PyBuffer_Release(&pbuf); - return NULL; - } - if (n < 0) { - /* If interrupted, try again */ - if (saved_errno == EINTR) - continue; - else - break; + if (n >= 0) { + buf += n; + len -= n; } - buf += n; - len -= n; - } while (len > 0); + } while (len > 0 && (n >= 0 || errno == EINTR) && + !(async_err = PyErr_CheckSignals())); PyBuffer_Release(&pbuf); - if (n < 0) - return s->errorhandler(); + if (n < 0 || async_err) + return (!async_err) ? s->errorhandler() : NULL; Py_INCREF(Py_None); return Py_None; @@ -3439,6 +3446,7 @@ sock_sendto(PySocketSockObject *s, PyObject *args) Py_ssize_t len, arglen; sock_addr_t addrbuf; int addrlen, n = -1, flags, timeout; + int async_err = 0; flags = 0; arglen = PyTuple_Size(args); @@ -3473,20 +3481,22 @@ sock_sendto(PySocketSockObject *s, PyObject *args) } BEGIN_SELECT_LOOP(s) - Py_BEGIN_ALLOW_THREADS - timeout = internal_select_ex(s, 1, interval); - if (!timeout) { + do { + Py_BEGIN_ALLOW_THREADS + timeout = internal_select_ex(s, 1, interval); + if (!timeout) { #ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - n = sendto(s->sock_fd, buf, (int)len, flags, - SAS2SA(&addrbuf), addrlen); + if (len > INT_MAX) + len = INT_MAX; + n = sendto(s->sock_fd, buf, (int)len, flags, + SAS2SA(&addrbuf), addrlen); #else - n = sendto(s->sock_fd, buf, len, flags, - SAS2SA(&addrbuf), addrlen); + n = sendto(s->sock_fd, buf, len, flags, + SAS2SA(&addrbuf), addrlen); #endif - } - Py_END_ALLOW_THREADS + } + Py_END_ALLOW_THREADS + } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (timeout == 1) { PyBuffer_Release(&pbuf); @@ -3496,7 +3506,7 @@ sock_sendto(PySocketSockObject *s, PyObject *args) END_SELECT_LOOP(s) PyBuffer_Release(&pbuf); if (n < 0) - return s->errorhandler(); + return (!async_err) ? s->errorhandler() : NULL; return PyLong_FromSsize_t(n); } @@ -3528,6 +3538,7 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) void *controlbuf = NULL; size_t controllen, controllen_last; ssize_t bytes_sent = -1; + int async_err = 0; int addrlen, timeout, flags = 0; PyObject *data_arg, *cmsg_arg = NULL, *addr_arg = NULL, *data_fast = NULL, *cmsg_fast = NULL, *retval = NULL; @@ -3685,19 +3696,23 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) } BEGIN_SELECT_LOOP(s) - Py_BEGIN_ALLOW_THREADS; - timeout = internal_select_ex(s, 1, interval); - if (!timeout) - bytes_sent = sendmsg(s->sock_fd, &msg, flags); - Py_END_ALLOW_THREADS; - if (timeout == 1) { - PyErr_SetString(socket_timeout, "timed out"); - goto finally; - } + do { + Py_BEGIN_ALLOW_THREADS; + timeout = internal_select_ex(s, 1, interval); + if (!timeout) + bytes_sent = sendmsg(s->sock_fd, &msg, flags); + Py_END_ALLOW_THREADS; + if (timeout == 1) { + PyErr_SetString(socket_timeout, "timed out"); + goto finally; + } + } while (bytes_sent < 0 && errno == EINTR && + !(async_err = PyErr_CheckSignals())); END_SELECT_LOOP(s) if (bytes_sent < 0) { - s->errorhandler(); + if (!async_err) + s->errorhandler(); goto finally; } retval = PyLong_FromSsize_t(bytes_sent); -- cgit v1.2.1 From eaa9dd837f33f4520558ac71da33ad77cd93aabf Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 10 Feb 2015 22:37:22 -0600 Subject: Update copyright. --- Modules/_collectionsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 69d93ae6a6..d3b0287abd 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -3,7 +3,7 @@ /* collections module implementation of a deque() datatype Written and maintained by Raymond D. Hettinger - Copyright (c) 2004-2014 Python Software Foundation. + Copyright (c) 2004-2015 Python Software Foundation. All rights reserved. */ -- cgit v1.2.1 From b798edf5e9d8a16247a9f2349b918abca7551201 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 12 Feb 2015 16:34:54 +0100 Subject: Issue #23450: Fix signal.set_wakeup_fd() on Windows Detect integer overflow on the file descriptor of the socket on 64-bit Python. --- Modules/signalmodule.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index eabe2f0970..2f2b260020 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -505,7 +505,7 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) { #ifdef MS_WINDOWS PyObject *fdobj; - SOCKET_T fd, old_fd; + SOCKET_T sockfd, old_sockfd; int res; int res_size = sizeof res; PyObject *mod; @@ -515,8 +515,8 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "O:set_wakeup_fd", &fdobj)) return NULL; - fd = PyLong_AsSocket_t(fdobj); - if (fd == (SOCKET_T)(-1) && PyErr_Occurred()) + sockfd = PyLong_AsSocket_t(fdobj); + if (sockfd == (SOCKET_T)(-1) && PyErr_Occurred()) return NULL; #else int fd, old_fd; @@ -536,7 +536,7 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) #ifdef MS_WINDOWS is_socket = 0; - if (fd != INVALID_FD) { + if (sockfd != INVALID_FD) { /* Import the _socket module to call WSAStartup() */ mod = PyImport_ImportModuleNoBlock("_socket"); if (mod == NULL) @@ -544,15 +544,18 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) Py_DECREF(mod); /* test the socket */ - if (getsockopt(fd, SOL_SOCKET, SO_ERROR, + if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char *)&res, &res_size) != 0) { - int err = WSAGetLastError(); + int fd, err; + + err = WSAGetLastError(); if (err != WSAENOTSOCK) { PyErr_SetExcFromWindowsErr(PyExc_OSError, err); return NULL; } - if (!_PyVerify_fd(fd)) { + fd = (int)sockfd; + if ((SOCKET_T)fd != sockfd || !_PyVerify_fd(fd)) { PyErr_SetString(PyExc_ValueError, "invalid fd"); return NULL; } @@ -572,12 +575,12 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) } } - old_fd = wakeup.fd; - wakeup.fd = fd; + old_sockfd = wakeup.fd; + wakeup.fd = sockfd; wakeup.use_send = is_socket; - if (old_fd != INVALID_FD) - return PyLong_FromSocket_t(old_fd); + if (old_sockfd != INVALID_FD) + return PyLong_FromSocket_t(old_sockfd); else return PyLong_FromLong(-1); #else -- cgit v1.2.1 From 33f6c9ffbfa5f48d57666d6e615ffcb60c371b37 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 15 Feb 2015 14:18:32 +0200 Subject: Issue #23096: Pickle representation of floats with protocol 0 now is the same for both Python and C implementations. --- Modules/_pickle.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 7a234f1dff..51e2f83ff8 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1979,7 +1979,7 @@ save_float(PicklerObject *self, PyObject *obj) if (_Pickler_Write(self, &op, 1) < 0) goto done; - buf = PyOS_double_to_string(x, 'g', 17, 0, NULL); + buf = PyOS_double_to_string(x, 'r', 0, Py_DTSF_ADD_DOT_0, NULL); if (!buf) { PyErr_NoMemory(); goto done; -- cgit v1.2.1 From a60fd7e6a8f59fb3f0fb7feae62c8a8df9ca33e7 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 16 Feb 2015 09:40:12 +0200 Subject: Fixed few compiler warnings. --- Modules/cjkcodecs/_codecs_iso2022.c | 7 +++---- Modules/faulthandler.c | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/cjkcodecs/_codecs_iso2022.c b/Modules/cjkcodecs/_codecs_iso2022.c index 5c401aaf8e..1ce4218f30 100644 --- a/Modules/cjkcodecs/_codecs_iso2022.c +++ b/Modules/cjkcodecs/_codecs_iso2022.c @@ -292,7 +292,7 @@ iso2022processesc(const void *config, MultibyteCodec_State *state, const unsigned char **inbuf, Py_ssize_t *inleft) { unsigned char charset, designation; - Py_ssize_t i, esclen; + Py_ssize_t i, esclen = 0; for (i = 1;i < MAX_ESCSEQLEN;i++) { if (i >= *inleft) @@ -307,10 +307,9 @@ iso2022processesc(const void *config, MultibyteCodec_State *state, } } - if (i >= MAX_ESCSEQLEN) - return 1; /* unterminated escape sequence */ - switch (esclen) { + case 0: + return 1; /* unterminated escape sequence */ case 3: if (INBYTE2 == '$') { charset = INBYTE3 | CHARSET_DBCS; diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 6f7c71de1e..4643c0ede5 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -458,7 +458,7 @@ faulthandler_thread(void *unused) assert(st == PY_LOCK_FAILURE); /* get the thread holding the GIL, NULL if no thread hold the GIL */ - current = _Py_atomic_load_relaxed(&_PyThreadState_Current); + current = (PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current); write(thread.fd, thread.header, (int)thread.header_len); -- cgit v1.2.1 From d53d28906ce286782125ad3ebfc3a26faeb7c08f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 16 Feb 2015 20:52:17 +0200 Subject: Issue #23450: Fixed possible integer overflows. --- Modules/_ctypes/_ctypes.c | 2 +- Modules/_elementtree.c | 57 +++++++++++++++++++++++++++-------------------- Modules/_sqlite/row.c | 2 +- Modules/_tkinter.c | 45 ++++++++++++++++++++----------------- 4 files changed, 60 insertions(+), 46 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 14ec4ce60c..23b8e93b46 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -301,7 +301,7 @@ _ctypes_alloc_format_string_with_shape(int ndim, const Py_ssize_t *shape, char *new_prefix; char *result; char buf[32]; - int prefix_len; + Py_ssize_t prefix_len; int k; prefix_len = 32 * ndim + 3; diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 9b3e9ed313..bf4bc4a8a2 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -11,6 +11,8 @@ *-------------------------------------------------------------------- */ +#define PY_SSIZE_T_CLEAN + #include "Python.h" #include "structmember.h" @@ -185,8 +187,8 @@ typedef struct { PyObject* attrib; /* child elements */ - int length; /* actual number of items */ - int allocated; /* allocated items */ + Py_ssize_t length; /* actual number of items */ + Py_ssize_t allocated; /* allocated items */ /* this either points to _children or to a malloced buffer */ PyObject* *children; @@ -251,7 +253,7 @@ LOCAL(void) dealloc_extra(ElementObject* self) { ElementObjectExtra *myextra; - int i; + Py_ssize_t i; if (!self->extra) return; @@ -429,9 +431,9 @@ element_init(PyObject *self, PyObject *args, PyObject *kwds) } LOCAL(int) -element_resize(ElementObject* self, int extra) +element_resize(ElementObject* self, Py_ssize_t extra) { - int size; + Py_ssize_t size; PyObject* *children; /* make sure self->children can hold the given number of extra @@ -442,7 +444,7 @@ element_resize(ElementObject* self, int extra) return -1; } - size = self->extra->length + extra; + size = self->extra->length + extra; /* never overflows */ if (size > self->extra->allocated) { /* use Python 2.4's list growth strategy */ @@ -453,6 +455,8 @@ element_resize(ElementObject* self, int extra) * be safe. */ size = size ? size : 1; + if ((size_t)size > PY_SSIZE_T_MAX/sizeof(PyObject*)) + goto nomemory; if (self->extra->children != self->extra->_children) { /* Coverity CID #182 size_error: Allocating 1 bytes to pointer * "children", which needs at least 4 bytes. Although it's a @@ -613,7 +617,7 @@ element_gc_traverse(ElementObject *self, visitproc visit, void *arg) Py_VISIT(JOIN_OBJ(self->tail)); if (self->extra) { - int i; + Py_ssize_t i; Py_VISIT(self->extra->attrib); for (i = 0; i < self->extra->length; ++i) @@ -689,7 +693,7 @@ element_clearmethod(ElementObject* self, PyObject* args) static PyObject* element_copy(ElementObject* self, PyObject* args) { - int i; + Py_ssize_t i; ElementObject* element; if (!PyArg_ParseTuple(args, ":__copy__")) @@ -728,7 +732,7 @@ element_copy(ElementObject* self, PyObject* args) static PyObject* element_deepcopy(ElementObject* self, PyObject* args) { - int i; + Py_ssize_t i; ElementObject* element; PyObject* tag; PyObject* attrib; @@ -839,7 +843,7 @@ element_sizeof(PyObject* myself, PyObject* args) static PyObject * element_getstate(ElementObject *self) { - int i, noattrib; + Py_ssize_t i, noattrib; PyObject *instancedict = NULL, *children; /* Build a list of children. */ @@ -1077,7 +1081,7 @@ element_extend(ElementObject* self, PyObject* args) static PyObject* element_find(ElementObject *self, PyObject *args, PyObject *kwds) { - int i; + Py_ssize_t i; PyObject* tag; PyObject* namespaces = Py_None; static char *kwlist[] = {"path", "namespaces", 0}; @@ -1112,7 +1116,7 @@ element_find(ElementObject *self, PyObject *args, PyObject *kwds) static PyObject* element_findtext(ElementObject *self, PyObject *args, PyObject *kwds) { - int i; + Py_ssize_t i; PyObject* tag; PyObject* default_value = Py_None; PyObject* namespaces = Py_None; @@ -1153,7 +1157,7 @@ element_findtext(ElementObject *self, PyObject *args, PyObject *kwds) static PyObject* element_findall(ElementObject *self, PyObject *args, PyObject *kwds) { - int i; + Py_ssize_t i; PyObject* out; PyObject* tag; PyObject* namespaces = Py_None; @@ -1238,7 +1242,7 @@ element_get(ElementObject* self, PyObject* args, PyObject* kwds) static PyObject* element_getchildren(ElementObject* self, PyObject* args) { - int i; + Py_ssize_t i; PyObject* list; /* FIXME: report as deprecated? */ @@ -1310,11 +1314,9 @@ element_getitem(PyObject* self_, Py_ssize_t index) static PyObject* element_insert(ElementObject* self, PyObject* args) { - int i; - - int index; + Py_ssize_t index, i; PyObject* element; - if (!PyArg_ParseTuple(args, "iO!:insert", &index, + if (!PyArg_ParseTuple(args, "nO!:insert", &index, &Element_Type, &element)) return NULL; @@ -1402,7 +1404,7 @@ element_makeelement(PyObject* self, PyObject* args, PyObject* kw) static PyObject* element_remove(ElementObject* self, PyObject* args) { - int i; + Py_ssize_t i; PyObject* element; if (!PyArg_ParseTuple(args, "O!:remove", &Element_Type, &element)) @@ -1481,7 +1483,7 @@ static int element_setitem(PyObject* self_, Py_ssize_t index, PyObject* item) { ElementObject* self = (ElementObject*) self_; - int i; + Py_ssize_t i; PyObject* old; if (!self->extra || index < 0 || index >= self->extra->length) { @@ -2819,12 +2821,13 @@ makeuniversal(XMLParserObject* self, const char* string) * message string is the default for the given error_code. */ static void -expat_set_error(enum XML_Error error_code, int line, int column, char *message) +expat_set_error(enum XML_Error error_code, Py_ssize_t line, Py_ssize_t column, + const char *message) { PyObject *errmsg, *error, *position, *code; elementtreestate *st = ET_STATE_GLOBAL; - errmsg = PyUnicode_FromFormat("%s: line %d, column %d", + errmsg = PyUnicode_FromFormat("%s: line %zd, column %zd", message ? message : EXPAT(ErrorString)(error_code), line, column); if (errmsg == NULL) @@ -2848,7 +2851,7 @@ expat_set_error(enum XML_Error error_code, int line, int column, char *message) } Py_DECREF(code); - position = Py_BuildValue("(ii)", line, column); + position = Py_BuildValue("(nn)", line, column); if (!position) { Py_DECREF(error); return; @@ -3477,8 +3480,14 @@ xmlparser_parse_whole(XMLParserObject* self, PyObject* args) break; } + if (PyBytes_GET_SIZE(buffer) > INT_MAX) { + Py_DECREF(buffer); + Py_DECREF(reader); + PyErr_SetString(PyExc_OverflowError, "size does not fit in an int"); + return NULL; + } res = expat_parse( - self, PyBytes_AS_STRING(buffer), PyBytes_GET_SIZE(buffer), 0 + self, PyBytes_AS_STRING(buffer), (int)PyBytes_GET_SIZE(buffer), 0 ); Py_DECREF(buffer); diff --git a/Modules/_sqlite/row.c b/Modules/_sqlite/row.c index 64dfd06dff..ed8ad47ffc 100644 --- a/Modules/_sqlite/row.c +++ b/Modules/_sqlite/row.c @@ -159,7 +159,7 @@ Py_ssize_t pysqlite_row_length(pysqlite_Row* self, PyObject* args, PyObject* kwa PyObject* pysqlite_row_keys(pysqlite_Row* self, PyObject* args, PyObject* kwargs) { PyObject* list; - int nitems, i; + Py_ssize_t nitems, i; list = PyList_New(0); if (!list) { diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index d5396f6f0d..b23ee8a665 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -21,6 +21,7 @@ Copyright (C) 1994 Steen Lumholt. */ +#define PY_SSIZE_T_CLEAN #include "Python.h" #include @@ -34,7 +35,7 @@ Copyright (C) 1994 Steen Lumholt. #endif #define CHECK_SIZE(size, elemsize) \ - ((size_t)(size) <= Py_MAX((size_t)INT_MAX, UINT_MAX / (size_t)(elemsize))) + ((size_t)(size) <= Py_MIN((size_t)INT_MAX, UINT_MAX / (size_t)(elemsize))) /* If Tcl is compiled for threads, we must also define TCL_THREAD. We define it always; if Tcl is not threaded, the thread functions in @@ -409,7 +410,7 @@ static PyObject * SplitObj(PyObject *arg) { if (PyTuple_Check(arg)) { - int i, size; + Py_ssize_t i, size; PyObject *elem, *newelem, *result; size = PyTuple_Size(arg); @@ -425,7 +426,7 @@ SplitObj(PyObject *arg) return NULL; } if (!result) { - int k; + Py_ssize_t k; if (newelem == elem) { Py_DECREF(newelem); continue; @@ -446,7 +447,7 @@ SplitObj(PyObject *arg) /* Fall through, returning arg. */ } else if (PyList_Check(arg)) { - int i, size; + Py_ssize_t i, size; PyObject *elem, *newelem, *result; size = PyList_GET_SIZE(arg); @@ -632,12 +633,12 @@ Tkapp_New(const char *screenName, const char *className, /* some initial arguments need to be in argv */ if (sync || use) { char *args; - int len = 0; + Py_ssize_t len = 0; if (sync) len += sizeof "-sync"; if (use) - len += strlen(use) + sizeof "-use "; + len += strlen(use) + sizeof "-use "; /* never overflows */ args = (char*)PyMem_Malloc(len); if (!args) { @@ -887,9 +888,14 @@ AsObj(PyObject *value) long longVal; int overflow; - if (PyBytes_Check(value)) + if (PyBytes_Check(value)) { + if (PyBytes_GET_SIZE(value) >= INT_MAX) { + PyErr_SetString(PyExc_OverflowError, "bytes object is too long"); + return NULL; + } return Tcl_NewByteArrayObj((unsigned char *)PyBytes_AS_STRING(value), - PyBytes_GET_SIZE(value)); + (int)PyBytes_GET_SIZE(value)); + } else if (PyBool_Check(value)) return Tcl_NewBooleanObj(PyObject_IsTrue(value)); else if (PyLong_CheckExact(value) && @@ -921,7 +927,7 @@ AsObj(PyObject *value) } for (i = 0; i < size; i++) argv[i] = AsObj(PySequence_Fast_GET_ITEM(value,i)); - result = Tcl_NewListObj(size, argv); + result = Tcl_NewListObj((int)size, argv); PyMem_Free(argv); return result; } @@ -946,7 +952,7 @@ AsObj(PyObject *value) } kind = PyUnicode_KIND(value); if (kind == sizeof(Tcl_UniChar)) - return Tcl_NewUnicodeObj(inbuf, size); + return Tcl_NewUnicodeObj(inbuf, (int)size); allocsize = ((size_t)size) * sizeof(Tcl_UniChar); outbuf = (Tcl_UniChar*)PyMem_Malloc(allocsize); /* Else overflow occurred, and we take the next exit */ @@ -971,7 +977,7 @@ AsObj(PyObject *value) #endif outbuf[i] = ch; } - result = Tcl_NewUnicodeObj(outbuf, size); + result = Tcl_NewUnicodeObj(outbuf, (int)size); PyMem_Free(outbuf); return result; } @@ -1139,10 +1145,10 @@ Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) Tcl_IncrRefCount(objv[i]); } } - *pobjc = objc; + *pobjc = (int)objc; return objv; finally: - Tkapp_CallDeallocArgs(objv, objStore, objc); + Tkapp_CallDeallocArgs(objv, objStore, (int)objc); return NULL; } @@ -1495,7 +1501,6 @@ var_invoke(EventFunc func, PyObject *selfptr, PyObject *args, int flags) #ifdef WITH_THREAD TkappObject *self = (TkappObject*)selfptr; if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) { - TkappObject *self = (TkappObject*)selfptr; VarEvent *ev; PyObject *res, *exc_type, *exc_val; Tcl_Condition cond = NULL; @@ -2721,20 +2726,20 @@ static PyType_Spec Tkapp_Type_spec = { typedef struct { PyObject* tuple; - int size; /* current size */ - int maxsize; /* allocated size */ + Py_ssize_t size; /* current size */ + Py_ssize_t maxsize; /* allocated size */ } FlattenContext; static int -_bump(FlattenContext* context, int size) +_bump(FlattenContext* context, Py_ssize_t size) { /* expand tuple to hold (at least) size new items. return true if successful, false if an exception was raised */ - int maxsize = context->maxsize * 2; + Py_ssize_t maxsize = context->maxsize * 2; /* never overflows */ if (maxsize < context->size + size) - maxsize = context->size + size; + maxsize = context->size + size; /* never overflows */ context->maxsize = maxsize; @@ -2746,7 +2751,7 @@ _flatten1(FlattenContext* context, PyObject* item, int depth) { /* add tuple or list to argument tuple (recursively) */ - int i, size; + Py_ssize_t i, size; if (depth > 1000) { PyErr_SetString(PyExc_ValueError, -- cgit v1.2.1 From b0a85d474df68ed8e72a01506fa74ceca3587aef Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 17 Feb 2015 10:14:30 +0200 Subject: Issue #22883: Got rid of outdated references to PyInt and PyString in comments. --- Modules/_io/_iomodule.h | 2 +- Modules/_json.c | 8 ++++---- Modules/_sqlite/connection.h | 2 +- Modules/fcntlmodule.c | 7 ++----- Modules/itertoolsmodule.c | 2 +- 5 files changed, 9 insertions(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h index 8927864e8c..9d5205ec30 100644 --- a/Modules/_io/_iomodule.h +++ b/Modules/_io/_iomodule.h @@ -69,7 +69,7 @@ extern int _PyIO_trap_eintr(void); * Offset type for positioning. */ -/* Printing a variable of type off_t (with e.g., PyString_FromFormat) +/* Printing a variable of type off_t (with e.g., PyUnicode_FromFormat) correctly and without producing compiler warnings is surprisingly painful. We identify an integer type whose size matches off_t and then: (1) cast the off_t to that integer type and (2) use the appropriate conversion diff --git a/Modules/_json.c b/Modules/_json.c index 031471e4f8..076859f99c 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -827,7 +827,7 @@ bail: static PyObject * _parse_array_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *next_idx_ptr) { - /* Read a JSON array from PyString pystr. + /* Read a JSON array from PyUnicode pystr. idx is the index of the first character after the opening brace. *next_idx_ptr is a return-by-reference index to the first character after the closing brace. @@ -899,8 +899,8 @@ bail: } static PyObject * -_parse_constant(PyScannerObject *s, char *constant, Py_ssize_t idx, Py_ssize_t *next_idx_ptr) { - /* Read a JSON constant from PyString pystr. +_parse_constant(PyScannerObject *s, const char *constant, Py_ssize_t idx, Py_ssize_t *next_idx_ptr) { + /* Read a JSON constant. constant is the constant string that was found ("NaN", "Infinity", "-Infinity"). idx is the index of the first character of the constant @@ -932,7 +932,7 @@ _match_number_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_ the number. Returns a new PyObject representation of that number: - PyInt, PyLong, or PyFloat. + PyLong, or PyFloat. May return other types if parse_int or parse_float are set */ void *str; diff --git a/Modules/_sqlite/connection.h b/Modules/_sqlite/connection.h index 0c9734caf7..fbd9063779 100644 --- a/Modules/_sqlite/connection.h +++ b/Modules/_sqlite/connection.h @@ -52,7 +52,7 @@ typedef struct * first get called with count=0? */ double timeout_started; - /* None for autocommit, otherwise a PyString with the isolation level */ + /* None for autocommit, otherwise a PyUnicode with the isolation level */ PyObject* isolation_level; /* NULL for autocommit, otherwise a string with the BEGIN statement; will be diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c index 1f1cef90eb..780e2222c5 100644 --- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -152,11 +152,8 @@ fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, PyObject *ob_ar /*[clinic end generated code: output=ad47738c118622bf input=a55a6ee8e494c449]*/ { #define IOCTL_BUFSZ 1024 - /* We use the unsigned non-checked 'I' - format for the 'code' parameter because Python turns 0x8000000 - into either a large positive number (PyLong or PyInt on 64-bit - platforms) or a negative number on others (32-bit PyInt) - whereas the system expects it to be a 32bit bit field value + /* We use the unsigned non-checked 'I' format for the 'code' parameter + because the system expects it to be a 32bit bit field value regardless of it being passed as an int or unsigned long on various platforms. See the termios.TIOCSWINSZ constant across platforms for an example of this. diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 1f42022fd5..afff7e4aa8 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -3874,7 +3874,7 @@ typedef struct { fast_mode: when cnt an integer < PY_SSIZE_T_MAX and no step is specified. - assert(cnt != PY_SSIZE_T_MAX && long_cnt == NULL && long_step==PyInt(1)); + assert(cnt != PY_SSIZE_T_MAX && long_cnt == NULL && long_step==PyLong(1)); Advances with: cnt += 1 When count hits Y_SSIZE_T_MAX, switch to slow_mode. -- cgit v1.2.1 From c9893bda515f50f44652a3cddb8e77c7da4da2d7 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 20 Feb 2015 00:50:04 -0800 Subject: Improve struct cache locality by bring commonly accessed fields close together. --- Modules/_randommodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 4377ee0cf4..af861820a2 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -78,8 +78,8 @@ typedef struct { PyObject_HEAD - unsigned long state[N]; int index; + unsigned long state[N]; } RandomObject; static PyTypeObject Random_Type; -- cgit v1.2.1 From f960f28a931745abec82480e827b227c99c892d6 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 20 Feb 2015 12:46:11 +0200 Subject: Regenerated Argument Clinic checksums. --- Modules/_lzmamodule.c | 2 +- Modules/clinic/_lzmamodule.c.h | 4 ++-- Modules/clinic/cmathmodule.c.h | 2 +- Modules/cmathmodule.c | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index fb152336e2..bae7df6e13 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -1087,7 +1087,7 @@ the unused_data attribute. static PyObject * _lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=1532a5bb23629001 input=262e4e217f49039b]*/ +/*[clinic end generated code: output=1532a5bb23629001 input=f2bb902cc1caf203]*/ { PyObject *result = NULL; diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h index a46a15232f..636427137f 100644 --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -65,7 +65,7 @@ PyDoc_STRVAR(_lzma_LZMADecompressor_decompress__doc__, "decompress($self, /, data, max_length=-1)\n" "--\n" "\n" -"Decompresses *data*, returning uncompressed data as bytes.\n" +"Decompress *data*, returning uncompressed data as bytes.\n" "\n" "If *max_length* is nonnegative, returns at most *max_length* bytes of\n" "decompressed data. If this limit is reached and further output can be\n" @@ -251,4 +251,4 @@ exit: return return_value; } -/*[clinic end generated code: output=d17fac38b09626d8 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=dc42b73890609369 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h index 83de51893a..d0c48d334e 100644 --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -848,4 +848,4 @@ cmath_isinf(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=4407f898ae07c83d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9b6d81711e4e3c4b input=a9049054013a1b77]*/ diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 5746db1b95..67161adaf5 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -212,7 +212,7 @@ Return the inverse hyperbolic cosine of z. static Py_complex cmath_acosh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=c23c776429def981 input=bc016412080bb3e9]*/ +/*[clinic end generated code: output=c23c776429def981 input=3f61bee7d703e53c]*/ { Py_complex s1, s2, r; @@ -267,7 +267,7 @@ Return the inverse hyperbolic sine of z. static Py_complex cmath_asinh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=0c6664823c7b1b35 input=5a21fa0242928c9b]*/ +/*[clinic end generated code: output=0c6664823c7b1b35 input=5c09448fcfc89a79]*/ { Py_complex s1, s2, r; @@ -358,7 +358,7 @@ Return the inverse hyperbolic tangent of z. static Py_complex cmath_atanh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=279e0b9fefc8da7c input=df19cdc9f9d431c9]*/ +/*[clinic end generated code: output=279e0b9fefc8da7c input=2b3fdb82fb34487b]*/ { Py_complex r; double ay, h; -- cgit v1.2.1 From 4b5c8edd294f02afef7407d9fd5236789bd4bc34 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 21 Feb 2015 08:44:05 -0800 Subject: Issue #23152: Implement _Py_fstat() to support files larger than 2 GB on Windows. fstat() may fail with EOVERFLOW on files larger than 2 GB because the file size type is an signed 32-bit integer. --- Modules/_io/fileio.c | 46 +++++++-------- Modules/main.c | 5 +- Modules/mmapmodule.c | 8 +-- Modules/posixmodule.c | 149 +++++++------------------------------------------ Modules/signalmodule.c | 7 +-- 5 files changed, 53 insertions(+), 162 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 9c67394cbe..ff88e40973 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -180,9 +180,9 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) static int check_fd(int fd) { -#if defined(HAVE_FSTAT) - struct stat buf; - if (!_PyVerify_fd(fd) || (fstat(fd, &buf) < 0 && errno == EBADF)) { +#if defined(HAVE_FSTAT) || defined(MS_WINDOWS) + struct _Py_stat_struct buf; + if (!_PyVerify_fd(fd) || (_Py_fstat(fd, &buf) < 0 && errno == EBADF)) { PyObject *exc; char *msg = strerror(EBADF); exc = PyObject_CallFunction(PyExc_OSError, "(is)", @@ -222,8 +222,8 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) #elif !defined(MS_WINDOWS) int *atomic_flag_works = NULL; #endif -#ifdef HAVE_FSTAT - struct stat fdfstat; +#if defined(HAVE_FSTAT) || defined(MS_WINDOWS) + struct _Py_stat_struct fdfstat; #endif int async_err = 0; @@ -420,9 +420,11 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) } self->blksize = DEFAULT_BUFFER_SIZE; -#ifdef HAVE_FSTAT - if (fstat(self->fd, &fdfstat) < 0) +#if defined(HAVE_FSTAT) || defined(MS_WINDOWS) + if (_Py_fstat(self->fd, &fdfstat) < 0) { + PyErr_SetFromErrno(PyExc_OSError); goto error; + } #if defined(S_ISDIR) && defined(EISDIR) /* On Unix, open will succeed for directories. In Python, there should be no file objects referring to @@ -437,7 +439,7 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) if (fdfstat.st_blksize > 1) self->blksize = fdfstat.st_blksize; #endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */ -#endif /* HAVE_FSTAT */ +#endif /* HAVE_FSTAT || MS_WINDOWS */ #if defined(MS_WINDOWS) || defined(__CYGWIN__) /* don't translate newlines (\r\n <=> \n) */ @@ -603,17 +605,7 @@ fileio_readinto(fileio *self, PyObject *args) return PyLong_FromSsize_t(n); } -#ifndef HAVE_FSTAT - -static PyObject * -fileio_readall(fileio *self) -{ - _Py_IDENTIFIER(readall); - return _PyObject_CallMethodId((PyObject*)&PyRawIOBase_Type, - &PyId_readall, "O", self); -} - -#else +#if defined(HAVE_FSTAT) || defined(MS_WINDOWS) static size_t new_buffersize(fileio *self, size_t currentsize) @@ -637,7 +629,7 @@ new_buffersize(fileio *self, size_t currentsize) static PyObject * fileio_readall(fileio *self) { - struct stat st; + struct _Py_stat_struct st; Py_off_t pos, end; PyObject *result; Py_ssize_t bytes_read = 0; @@ -655,7 +647,7 @@ fileio_readall(fileio *self) #else pos = lseek(self->fd, 0L, SEEK_CUR); #endif - if (fstat(self->fd, &st) == 0) + if (_Py_fstat(self->fd, &st) == 0) end = st.st_size; else end = (Py_off_t)-1; @@ -729,7 +721,17 @@ fileio_readall(fileio *self) return result; } -#endif /* HAVE_FSTAT */ +#else + +static PyObject * +fileio_readall(fileio *self) +{ + _Py_IDENTIFIER(readall); + return _PyObject_CallMethodId((PyObject*)&PyRawIOBase_Type, + &PyId_readall, "O", self); +} + +#endif /* HAVE_FSTAT || MS_WINDOWS */ static PyObject * fileio_read(fileio *self, PyObject *args) diff --git a/Modules/main.c b/Modules/main.c index c4883c95ed..83538c42e0 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -752,9 +752,8 @@ Py_Main(int argc, wchar_t **argv) } } { - /* XXX: does this work on Win/Win64? (see posix_fstat) */ - struct stat sb; - if (fstat(fileno(fp), &sb) == 0 && + struct _Py_stat_struct sb; + if (_Py_fstat(fileno(fp), &sb) == 0 && S_ISDIR(sb.st_mode)) { fprintf(stderr, "%ls: '%ls' is a directory, cannot continue\n", argv[0], filename); fclose(fp); diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 137142420f..ac134b837d 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -459,8 +459,8 @@ mmap_size_method(mmap_object *self, #ifdef UNIX { - struct stat buf; - if (-1 == fstat(self->fd, &buf)) { + struct _Py_stat_struct buf; + if (-1 == _Py_fstat(self->fd, &buf)) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } @@ -1107,7 +1107,7 @@ static PyObject * new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) { #ifdef HAVE_FSTAT - struct stat st; + struct _Py_stat_struct st; #endif mmap_object *m_obj; PyObject *map_size_obj = NULL; @@ -1174,7 +1174,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) (void)fcntl(fd, F_FULLFSYNC); #endif #ifdef HAVE_FSTAT - if (fd != -1 && fstat(fd, &st) == 0 && S_ISREG(st.st_mode)) { + if (fd != -1 && _Py_fstat(fd, &st) == 0 && S_ISREG(st.st_mode)) { if (map_size == 0) { if (st.st_size == 0) { PyErr_SetString(PyExc_ValueError, diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index c019b1609b..cf59724955 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -350,8 +350,8 @@ static int win32_can_symlink = 0; #ifdef MS_WINDOWS # define STAT win32_stat # define LSTAT win32_lstat -# define FSTAT win32_fstat -# define STRUCT_STAT struct win32_stat +# define FSTAT _Py_fstat +# define STRUCT_STAT struct _Py_stat_struct #else # define STAT stat # define LSTAT lstat @@ -1469,73 +1469,6 @@ struct win32_stat{ unsigned long st_file_attributes; }; -static __int64 secs_between_epochs = 11644473600; /* Seconds between 1.1.1601 and 1.1.1970 */ - -static void -FILE_TIME_to_time_t_nsec(FILETIME *in_ptr, time_t *time_out, int* nsec_out) -{ - /* XXX endianness. Shouldn't matter, as all Windows implementations are little-endian */ - /* Cannot simply cast and dereference in_ptr, - since it might not be aligned properly */ - __int64 in; - memcpy(&in, in_ptr, sizeof(in)); - *nsec_out = (int)(in % 10000000) * 100; /* FILETIME is in units of 100 nsec. */ - *time_out = Py_SAFE_DOWNCAST((in / 10000000) - secs_between_epochs, __int64, time_t); -} - -static void -time_t_to_FILE_TIME(time_t time_in, int nsec_in, FILETIME *out_ptr) -{ - /* XXX endianness */ - __int64 out; - out = time_in + secs_between_epochs; - out = out * 10000000 + nsec_in / 100; - memcpy(out_ptr, &out, sizeof(out)); -} - -/* Below, we *know* that ugo+r is 0444 */ -#if _S_IREAD != 0400 -#error Unsupported C library -#endif -static int -attributes_to_mode(DWORD attr) -{ - int m = 0; - if (attr & FILE_ATTRIBUTE_DIRECTORY) - m |= _S_IFDIR | 0111; /* IFEXEC for user,group,other */ - else - m |= _S_IFREG; - if (attr & FILE_ATTRIBUTE_READONLY) - m |= 0444; - else - m |= 0666; - return m; -} - -static int -attribute_data_to_stat(BY_HANDLE_FILE_INFORMATION *info, ULONG reparse_tag, struct win32_stat *result) -{ - memset(result, 0, sizeof(*result)); - result->st_mode = attributes_to_mode(info->dwFileAttributes); - result->st_size = (((__int64)info->nFileSizeHigh)<<32) + info->nFileSizeLow; - result->st_dev = info->dwVolumeSerialNumber; - result->st_rdev = result->st_dev; - FILE_TIME_to_time_t_nsec(&info->ftCreationTime, &result->st_ctime, &result->st_ctime_nsec); - FILE_TIME_to_time_t_nsec(&info->ftLastWriteTime, &result->st_mtime, &result->st_mtime_nsec); - FILE_TIME_to_time_t_nsec(&info->ftLastAccessTime, &result->st_atime, &result->st_atime_nsec); - result->st_nlink = info->nNumberOfLinks; - result->st_ino = (((__int64)info->nFileIndexHigh)<<32) + info->nFileIndexLow; - if (reparse_tag == IO_REPARSE_TAG_SYMLINK) { - /* first clear the S_IFMT bits */ - result->st_mode ^= (result->st_mode & S_IFMT); - /* now set the bits that make this a symlink */ - result->st_mode |= S_IFLNK; - } - result->st_file_attributes = info->dwFileAttributes; - - return 0; -} - static BOOL attributes_from_dir(LPCSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *reparse_tag) { @@ -1645,11 +1578,15 @@ get_target_path(HANDLE hdl, wchar_t **target_path) return TRUE; } +/* defined in fileutils.c */ +int +attribute_data_to_stat(BY_HANDLE_FILE_INFORMATION *info, ULONG reparse_tag, struct _Py_stat_struct *result); + static int -win32_xstat_impl_w(const wchar_t *path, struct win32_stat *result, +win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, BOOL traverse); static int -win32_xstat_impl(const char *path, struct win32_stat *result, +win32_xstat_impl(const char *path, struct _Py_stat_struct *result, BOOL traverse) { int code; @@ -1745,7 +1682,7 @@ win32_xstat_impl(const char *path, struct win32_stat *result, } static int -win32_xstat_impl_w(const wchar_t *path, struct win32_stat *result, +win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, BOOL traverse) { int code; @@ -1841,7 +1778,7 @@ win32_xstat_impl_w(const wchar_t *path, struct win32_stat *result, } static int -win32_xstat(const char *path, struct win32_stat *result, BOOL traverse) +win32_xstat(const char *path, struct _Py_stat_struct *result, BOOL traverse) { /* Protocol violation: we explicitly clear errno, instead of setting it to a POSIX error. Callers should use GetLastError. */ @@ -1851,7 +1788,7 @@ win32_xstat(const char *path, struct win32_stat *result, BOOL traverse) } static int -win32_xstat_w(const wchar_t *path, struct win32_stat *result, BOOL traverse) +win32_xstat_w(const wchar_t *path, struct _Py_stat_struct *result, BOOL traverse) { /* Protocol violation: we explicitly clear errno, instead of setting it to a POSIX error. Callers should use GetLastError. */ @@ -1873,80 +1810,29 @@ win32_xstat_w(const wchar_t *path, struct win32_stat *result, BOOL traverse) The _w represent Unicode equivalents of the aforementioned ANSI functions. */ static int -win32_lstat(const char* path, struct win32_stat *result) +win32_lstat(const char* path, struct _Py_stat_struct *result) { return win32_xstat(path, result, FALSE); } static int -win32_lstat_w(const wchar_t* path, struct win32_stat *result) +win32_lstat_w(const wchar_t* path, struct _Py_stat_struct *result) { return win32_xstat_w(path, result, FALSE); } static int -win32_stat(const char* path, struct win32_stat *result) +win32_stat(const char* path, struct _Py_stat_struct *result) { return win32_xstat(path, result, TRUE); } static int -win32_stat_w(const wchar_t* path, struct win32_stat *result) +win32_stat_w(const wchar_t* path, struct _Py_stat_struct *result) { return win32_xstat_w(path, result, TRUE); } -static int -win32_fstat(int file_number, struct win32_stat *result) -{ - BY_HANDLE_FILE_INFORMATION info; - HANDLE h; - int type; - - if (!_PyVerify_fd(file_number)) - h = INVALID_HANDLE_VALUE; - else - h = (HANDLE)_get_osfhandle(file_number); - - /* Protocol violation: we explicitly clear errno, instead of - setting it to a POSIX error. Callers should use GetLastError. */ - errno = 0; - - if (h == INVALID_HANDLE_VALUE) { - /* This is really a C library error (invalid file handle). - We set the Win32 error to the closes one matching. */ - SetLastError(ERROR_INVALID_HANDLE); - return -1; - } - memset(result, 0, sizeof(*result)); - - type = GetFileType(h); - if (type == FILE_TYPE_UNKNOWN) { - DWORD error = GetLastError(); - if (error != 0) { - return -1; - } - /* else: valid but unknown file */ - } - - if (type != FILE_TYPE_DISK) { - if (type == FILE_TYPE_CHAR) - result->st_mode = _S_IFCHR; - else if (type == FILE_TYPE_PIPE) - result->st_mode = _S_IFIFO; - return 0; - } - - if (!GetFileInformationByHandle(h, &info)) { - return -1; - } - - attribute_data_to_stat(&info, 0, result); - /* specific to fstat() */ - result->st_ino = (((__int64)info.nFileIndexHigh)<<32) + info.nFileIndexLow; - return 0; -} - #endif /* MS_WINDOWS */ PyDoc_STRVAR(stat_result__doc__, @@ -6333,6 +6219,11 @@ exit: return return_value; } +#ifdef MS_WINDOWS +void +time_t_to_FILE_TIME(time_t time_in, int nsec_in, FILETIME *out_ptr); +#endif + static PyObject * os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks) /*[clinic end generated code: output=891489c35cc68c5d input=1f18c17d5941aa82]*/ diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 2f2b260020..598bc8a342 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -503,13 +503,13 @@ signal_siginterrupt(PyObject *self, PyObject *args) static PyObject * signal_set_wakeup_fd(PyObject *self, PyObject *args) { + struct _Py_stat_struct st; #ifdef MS_WINDOWS PyObject *fdobj; SOCKET_T sockfd, old_sockfd; int res; int res_size = sizeof res; PyObject *mod; - struct stat st; int is_socket; if (!PyArg_ParseTuple(args, "O:set_wakeup_fd", &fdobj)) @@ -520,7 +520,6 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) return NULL; #else int fd, old_fd; - struct stat st; if (!PyArg_ParseTuple(args, "i:set_wakeup_fd", &fd)) return NULL; @@ -560,7 +559,7 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) return NULL; } - if (fstat(fd, &st) != 0) { + if (_Py_fstat(fd, &st) != 0) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } @@ -592,7 +591,7 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) return NULL; } - if (fstat(fd, &st) != 0) { + if (_Py_fstat(fd, &st) != 0) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } -- cgit v1.2.1 From 89363ff86bc7a9bdce45baf22b2c89695efc50d0 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 21 Feb 2015 10:04:10 -0800 Subject: Issue #23152: Renames attribute_data_to_stat to _Py_attribute_data_to_stat --- Modules/posixmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index cf59724955..48738bd7ea 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1580,7 +1580,7 @@ get_target_path(HANDLE hdl, wchar_t **target_path) /* defined in fileutils.c */ int -attribute_data_to_stat(BY_HANDLE_FILE_INFORMATION *info, ULONG reparse_tag, struct _Py_stat_struct *result); +_Py_attribute_data_to_stat(BY_HANDLE_FILE_INFORMATION *info, ULONG reparse_tag, struct _Py_stat_struct *result); static int win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, @@ -1669,7 +1669,7 @@ win32_xstat_impl(const char *path, struct _Py_stat_struct *result, } else CloseHandle(hFile); } - attribute_data_to_stat(&info, reparse_tag, result); + _Py_attribute_data_to_stat(&info, reparse_tag, result); /* Set S_IEXEC if it is an .exe, .bat, ... */ dot = strrchr(path, '.'); @@ -1765,7 +1765,7 @@ win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, } else CloseHandle(hFile); } - attribute_data_to_stat(&info, reparse_tag, result); + _Py_attribute_data_to_stat(&info, reparse_tag, result); /* Set S_IEXEC if it is an .exe, .bat, ... */ dot = wcsrchr(path, '.'); -- cgit v1.2.1 From 0683c38701f8d9dcbee329c01eb099d8ce65f957 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 21 Feb 2015 15:26:02 -0800 Subject: Issue #23152: Renames time_t_to_FILE_TIME to _Py_time_t_to_FILE_TIME, removes unused struct win32_stat and return value --- Modules/posixmodule.c | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 48738bd7ea..0d3fe5790b 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1451,24 +1451,6 @@ win32_wchdir(LPCWSTR path) #define HAVE_STAT_NSEC 1 #define HAVE_STRUCT_STAT_ST_FILE_ATTRIBUTES 1 -struct win32_stat{ - unsigned long st_dev; - __int64 st_ino; - unsigned short st_mode; - int st_nlink; - int st_uid; - int st_gid; - unsigned long st_rdev; - __int64 st_size; - time_t st_atime; - int st_atime_nsec; - time_t st_mtime; - int st_mtime_nsec; - time_t st_ctime; - int st_ctime_nsec; - unsigned long st_file_attributes; -}; - static BOOL attributes_from_dir(LPCSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *reparse_tag) { @@ -1579,7 +1561,7 @@ get_target_path(HANDLE hdl, wchar_t **target_path) } /* defined in fileutils.c */ -int +void _Py_attribute_data_to_stat(BY_HANDLE_FILE_INFORMATION *info, ULONG reparse_tag, struct _Py_stat_struct *result); static int @@ -6221,7 +6203,7 @@ exit: #ifdef MS_WINDOWS void -time_t_to_FILE_TIME(time_t time_in, int nsec_in, FILETIME *out_ptr); +_Py_time_t_to_FILE_TIME(time_t time_in, int nsec_in, FILETIME *out_ptr); #endif static PyObject * @@ -6327,8 +6309,8 @@ os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, atime = mtime; } else { - time_t_to_FILE_TIME(utime.atime_s, utime.atime_ns, &atime); - time_t_to_FILE_TIME(utime.mtime_s, utime.mtime_ns, &mtime); + _Py_time_t_to_FILE_TIME(utime.atime_s, utime.atime_ns, &atime); + _Py_time_t_to_FILE_TIME(utime.mtime_s, utime.mtime_ns, &mtime); } if (!SetFileTime(hFile, NULL, &atime, &mtime)) { /* Avoid putting the file name into the error here, -- cgit v1.2.1 From ced0e7fcfd363dbf4e0a636418a82c65c6ec5944 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 22 Feb 2015 19:39:36 +0200 Subject: Issue #23152: Move declaration into a header and exclude from stable API. --- Modules/posixmodule.c | 9 --------- 1 file changed, 9 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 0d3fe5790b..945c9d01ec 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1560,10 +1560,6 @@ get_target_path(HANDLE hdl, wchar_t **target_path) return TRUE; } -/* defined in fileutils.c */ -void -_Py_attribute_data_to_stat(BY_HANDLE_FILE_INFORMATION *info, ULONG reparse_tag, struct _Py_stat_struct *result); - static int win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, BOOL traverse); @@ -6201,11 +6197,6 @@ exit: return return_value; } -#ifdef MS_WINDOWS -void -_Py_time_t_to_FILE_TIME(time_t time_in, int nsec_in, FILETIME *out_ptr); -#endif - static PyObject * os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks) /*[clinic end generated code: output=891489c35cc68c5d input=1f18c17d5941aa82]*/ -- cgit v1.2.1 From 0016d9a8d58ab6bd20bb8d9c38a61f23a15fc296 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 22 Feb 2015 21:34:54 +0200 Subject: Issue #23152: Move declarations back to posixmodule.c. Declarations of Windows-specific auxilary functions need Windows types from windows.h. Instead of including windows.h in Python.h and making it available to all Windows users, it is simpler and safer just move declarations to the single file that needs them. --- Modules/posixmodule.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 945c9d01ec..e381bf1bbb 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -372,6 +372,12 @@ static int win32_can_symlink = 0; #define DWORD_MAX 4294967295U +#ifdef MS_WINDOWS +/* defined in fileutils.c */ +PyAPI_FUNC(void) _Py_time_t_to_FILE_TIME(time_t, int, FILETIME *); +PyAPI_FUNC(void) _Py_attribute_data_to_stat(BY_HANDLE_FILE_INFORMATION *, + ULONG, struct _Py_stat_struct *); +#endif #ifdef MS_WINDOWS static int -- cgit v1.2.1 From ca049791459118ea711abd9ea9413062ea25bfcb Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 25 Feb 2015 20:48:01 -0800 Subject: Back-out wcstok deprecation suppression and updates calls to use wcstok_s. --- Modules/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/main.c b/Modules/main.c index 83538c42e0..74e512bac0 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -520,16 +520,16 @@ Py_Main(int argc, wchar_t **argv) #ifdef MS_WINDOWS if (!Py_IgnoreEnvironmentFlag && (wp = _wgetenv(L"PYTHONWARNINGS")) && *wp != L'\0') { - wchar_t *buf, *warning; + wchar_t *buf, *warning, *context = NULL; buf = (wchar_t *)PyMem_RawMalloc((wcslen(wp) + 1) * sizeof(wchar_t)); if (buf == NULL) Py_FatalError( "not enough memory to copy PYTHONWARNINGS"); wcscpy(buf, wp); - for (warning = wcstok(buf, L","); + for (warning = wcstok_s(buf, L",", &context); warning != NULL; - warning = wcstok(NULL, L",")) { + warning = wcstok_s(NULL, L",", &context)) { PySys_AddWarnOption(warning); } PyMem_RawFree(buf); -- cgit v1.2.1 From bf668191a5cbfd892d140b4b41ddbe0a03f6542f Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Thu, 26 Feb 2015 13:08:07 +0100 Subject: Issue #15955: Add an option to limit the output size in bz2.decompress(). Patch by Nikolaus Rath. --- Modules/_bz2module.c | 259 ++++++++++++++++++++++++++++++++---------- Modules/clinic/_bz2module.c.h | 37 +++--- 2 files changed, 224 insertions(+), 72 deletions(-) (limited to 'Modules') diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index 4f2afda097..f284cd611d 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -51,6 +51,14 @@ typedef struct { bz_stream bzs; char eof; /* T_BOOL expects a char */ PyObject *unused_data; + char needs_input; + char *input_buffer; + size_t input_buffer_size; + + /* bzs->avail_in is only 32 bit, so we store the true length + separately. Conversion and looping is encapsulated in + decompress_buf() */ + size_t bzs_avail_in_real; #ifdef WITH_THREAD PyThread_type_lock lock; #endif @@ -111,19 +119,23 @@ catch_bz2_error(int bzerror) } #if BUFSIZ < 8192 -#define SMALLCHUNK 8192 +#define INITIAL_BUFFER_SIZE 8192 #else -#define SMALLCHUNK BUFSIZ +#define INITIAL_BUFFER_SIZE BUFSIZ #endif static int -grow_buffer(PyObject **buf) +grow_buffer(PyObject **buf, Py_ssize_t max_length) { /* Expand the buffer by an amount proportional to the current size, giving us amortized linear-time behavior. Use a less-than-double growth factor to avoid excessive allocation. */ size_t size = PyBytes_GET_SIZE(*buf); size_t new_size = size + (size >> 3) + 6; + + if (max_length > 0 && new_size > (size_t) max_length) + new_size = (size_t) max_length; + if (new_size > size) { return _PyBytes_Resize(buf, new_size); } else { /* overflow */ @@ -142,14 +154,14 @@ compress(BZ2Compressor *c, char *data, size_t len, int action) size_t data_size = 0; PyObject *result; - result = PyBytes_FromStringAndSize(NULL, SMALLCHUNK); + result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); if (result == NULL) return NULL; c->bzs.next_in = data; c->bzs.avail_in = 0; c->bzs.next_out = PyBytes_AS_STRING(result); - c->bzs.avail_out = SMALLCHUNK; + c->bzs.avail_out = INITIAL_BUFFER_SIZE; for (;;) { char *this_out; int bzerror; @@ -168,7 +180,7 @@ compress(BZ2Compressor *c, char *data, size_t len, int action) if (c->bzs.avail_out == 0) { size_t buffer_left = PyBytes_GET_SIZE(result) - data_size; if (buffer_left == 0) { - if (grow_buffer(&result) < 0) + if (grow_buffer(&result, -1) < 0) goto error; c->bzs.next_out = PyBytes_AS_STRING(result) + data_size; buffer_left = PyBytes_GET_SIZE(result) - data_size; @@ -402,64 +414,176 @@ static PyTypeObject BZ2Compressor_Type = { /* BZ2Decompressor class. */ -static PyObject * -decompress(BZ2Decompressor *d, char *data, size_t len) +/* Decompress data of length d->bzs_avail_in_real in d->bzs.next_in. The output + buffer is allocated dynamically and returned. At most max_length bytes are + returned, so some of the input may not be consumed. d->bzs.next_in and + d->bzs_avail_in_real are updated to reflect the consumed input. */ +static PyObject* +decompress_buf(BZ2Decompressor *d, Py_ssize_t max_length) { - size_t data_size = 0; + /* data_size is strictly positive, but because we repeatedly have to + compare against max_length and PyBytes_GET_SIZE we declare it as + signed */ + Py_ssize_t data_size = 0; PyObject *result; + bz_stream *bzs = &d->bzs; - result = PyBytes_FromStringAndSize(NULL, SMALLCHUNK); + if (max_length < 0 || max_length >= INITIAL_BUFFER_SIZE) + result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); + else + result = PyBytes_FromStringAndSize(NULL, max_length); if (result == NULL) - return result; - d->bzs.next_in = data; - /* On a 64-bit system, len might not fit in avail_in (an unsigned int). - Do decompression in chunks of no more than UINT_MAX bytes each. */ - d->bzs.avail_in = (unsigned int)Py_MIN(len, UINT_MAX); - len -= d->bzs.avail_in; - d->bzs.next_out = PyBytes_AS_STRING(result); - d->bzs.avail_out = SMALLCHUNK; + return NULL; + + bzs->next_out = PyBytes_AS_STRING(result); for (;;) { - char *this_out; - int bzerror; + int bzret; + size_t avail; + + /* On a 64-bit system, buffer length might not fit in avail_out, so we + do decompression in chunks of no more than UINT_MAX bytes + each. Note that the expression for `avail` is guaranteed to be + positive, so the cast is safe. */ + avail = (size_t) (PyBytes_GET_SIZE(result) - data_size); + bzs->avail_out = (unsigned int)Py_MIN(avail, UINT_MAX); + bzs->avail_in = (unsigned int)Py_MIN(d->bzs_avail_in_real, UINT_MAX); + d->bzs_avail_in_real -= bzs->avail_in; Py_BEGIN_ALLOW_THREADS - this_out = d->bzs.next_out; - bzerror = BZ2_bzDecompress(&d->bzs); - data_size += d->bzs.next_out - this_out; + bzret = BZ2_bzDecompress(bzs); + data_size = bzs->next_out - PyBytes_AS_STRING(result); + d->bzs_avail_in_real += bzs->avail_in; Py_END_ALLOW_THREADS - if (catch_bz2_error(bzerror)) + if (catch_bz2_error(bzret)) goto error; - if (bzerror == BZ_STREAM_END) { + if (bzret == BZ_STREAM_END) { d->eof = 1; - len += d->bzs.avail_in; - if (len > 0) { /* Save leftover input to unused_data */ - Py_CLEAR(d->unused_data); - d->unused_data = PyBytes_FromStringAndSize(d->bzs.next_in, len); - if (d->unused_data == NULL) - goto error; - } break; - } - if (d->bzs.avail_in == 0) { - if (len == 0) + } else if (d->bzs_avail_in_real == 0) { + break; + } else if (bzs->avail_out == 0) { + if (data_size == max_length) break; - d->bzs.avail_in = (unsigned int)Py_MIN(len, UINT_MAX); - len -= d->bzs.avail_in; + if (data_size == PyBytes_GET_SIZE(result) && + grow_buffer(&result, max_length) == -1) + goto error; + bzs->next_out = PyBytes_AS_STRING(result) + data_size; } - if (d->bzs.avail_out == 0) { - size_t buffer_left = PyBytes_GET_SIZE(result) - data_size; - if (buffer_left == 0) { - if (grow_buffer(&result) < 0) + } + if (data_size != PyBytes_GET_SIZE(result)) + if (_PyBytes_Resize(&result, data_size) == -1) + goto error; + + return result; + +error: + Py_XDECREF(result); + return NULL; +} + + +static PyObject * +decompress(BZ2Decompressor *d, char *data, size_t len, Py_ssize_t max_length) +{ + char input_buffer_in_use; + PyObject *result; + bz_stream *bzs = &d->bzs; + + /* Prepend unconsumed input if necessary */ + if (bzs->next_in != NULL) { + size_t avail_now, avail_total; + + /* Number of bytes we can append to input buffer */ + avail_now = (d->input_buffer + d->input_buffer_size) + - (bzs->next_in + d->bzs_avail_in_real); + + /* Number of bytes we can append if we move existing + contents to beginning of buffer (overwriting + consumed input) */ + avail_total = d->input_buffer_size - d->bzs_avail_in_real; + + if (avail_total < len) { + size_t offset = bzs->next_in - d->input_buffer; + char *tmp; + size_t new_size = d->input_buffer_size + len - avail_now; + + /* Assign to temporary variable first, so we don't + lose address of allocated buffer if realloc fails */ + tmp = PyMem_Realloc(d->input_buffer, new_size); + if (tmp == NULL) { + PyErr_SetNone(PyExc_MemoryError); + return NULL; + } + d->input_buffer = tmp; + d->input_buffer_size = new_size; + + bzs->next_in = d->input_buffer + offset; + } + else if (avail_now < len) { + memmove(d->input_buffer, bzs->next_in, + d->bzs_avail_in_real); + bzs->next_in = d->input_buffer; + } + memcpy((void*)(bzs->next_in + d->bzs_avail_in_real), data, len); + d->bzs_avail_in_real += len; + input_buffer_in_use = 1; + } + else { + bzs->next_in = data; + d->bzs_avail_in_real = len; + input_buffer_in_use = 0; + } + + result = decompress_buf(d, max_length); + if(result == NULL) + return NULL; + + if (d->eof) { + d->needs_input = 0; + if (d->bzs_avail_in_real > 0) { + Py_CLEAR(d->unused_data); + d->unused_data = PyBytes_FromStringAndSize( + bzs->next_in, d->bzs_avail_in_real); + if (d->unused_data == NULL) + goto error; + } + } + else if (d->bzs_avail_in_real == 0) { + bzs->next_in = NULL; + d->needs_input = 1; + } + else { + d->needs_input = 0; + + /* If we did not use the input buffer, we now have + to copy the tail from the caller's buffer into the + input buffer */ + if (!input_buffer_in_use) { + + /* Discard buffer if it's too small + (resizing it may needlessly copy the current contents) */ + if (d->input_buffer != NULL && + d->input_buffer_size < d->bzs_avail_in_real) { + PyMem_Free(d->input_buffer); + d->input_buffer = NULL; + } + + /* Allocate if necessary */ + if (d->input_buffer == NULL) { + d->input_buffer = PyMem_Malloc(d->bzs_avail_in_real); + if (d->input_buffer == NULL) { + PyErr_SetNone(PyExc_MemoryError); goto error; - d->bzs.next_out = PyBytes_AS_STRING(result) + data_size; - buffer_left = PyBytes_GET_SIZE(result) - data_size; + } + d->input_buffer_size = d->bzs_avail_in_real; } - d->bzs.avail_out = (unsigned int)Py_MIN(buffer_left, UINT_MAX); + + /* Copy tail */ + memcpy(d->input_buffer, bzs->next_in, d->bzs_avail_in_real); + bzs->next_in = d->input_buffer; } } - if (data_size != (size_t)PyBytes_GET_SIZE(result)) - if (_PyBytes_Resize(&result, data_size) < 0) - goto error; + return result; error: @@ -470,21 +594,29 @@ error: /*[clinic input] _bz2.BZ2Decompressor.decompress + self: self(type="BZ2Decompressor *") data: Py_buffer - / + max_length: Py_ssize_t=-1 -Provide data to the decompressor object. +Decompress *data*, returning uncompressed data as bytes. -Returns a chunk of decompressed data if possible, or b'' otherwise. +If *max_length* is nonnegative, returns at most *max_length* bytes of +decompressed data. If this limit is reached and further output can be +produced, *self.needs_input* will be set to ``False``. In this case, the next +call to *decompress()* may provide *data* as b'' to obtain more of the output. -Attempting to decompress data after the end of stream is reached -raises an EOFError. Any data found after the end of the stream -is ignored and saved in the unused_data attribute. +If all of the input data was decompressed and returned (either because this +was less than *max_length* bytes, or because *max_length* was negative), +*self.needs_input* will be set to True. + +Attempting to decompress data after the end of stream is reached raises an +EOFError. Any data found after the end of the stream is ignored and saved in +the unused_data attribute. [clinic start generated code]*/ static PyObject * -_bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data) -/*[clinic end generated code: output=086e4b99e60cb3f6 input=616c2a6db5269961]*/ +_bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data, Py_ssize_t max_length) +/*[clinic end generated code: output=7eeb5794035a2ca3 input=9558b424c8b00516]*/ { PyObject *result = NULL; @@ -492,7 +624,7 @@ _bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data) if (self->eof) PyErr_SetString(PyExc_EOFError, "End of stream already reached"); else - result = decompress(self, data->buf, data->len); + result = decompress(self, data->buf, data->len, max_length); RELEASE_LOCK(self); return result; } @@ -527,10 +659,14 @@ _bz2_BZ2Decompressor___init___impl(BZ2Decompressor *self) } #endif - self->unused_data = PyBytes_FromStringAndSize("", 0); + self->needs_input = 1; + self->bzs_avail_in_real = 0; + self->input_buffer = NULL; + self->input_buffer_size = 0; + self->unused_data = PyBytes_FromStringAndSize(NULL, 0); if (self->unused_data == NULL) goto error; - + bzerror = BZ2_bzDecompressInit(&self->bzs, 0, 0); if (catch_bz2_error(bzerror)) goto error; @@ -549,6 +685,8 @@ error: static void BZ2Decompressor_dealloc(BZ2Decompressor *self) { + if(self->input_buffer != NULL) + PyMem_Free(self->input_buffer); BZ2_bzDecompressEnd(&self->bzs); Py_CLEAR(self->unused_data); #ifdef WITH_THREAD @@ -570,11 +708,16 @@ PyDoc_STRVAR(BZ2Decompressor_eof__doc__, PyDoc_STRVAR(BZ2Decompressor_unused_data__doc__, "Data found after the end of the compressed stream."); +PyDoc_STRVAR(BZ2Decompressor_needs_input_doc, +"True if more input is needed before more decompressed data can be produced."); + static PyMemberDef BZ2Decompressor_members[] = { {"eof", T_BOOL, offsetof(BZ2Decompressor, eof), READONLY, BZ2Decompressor_eof__doc__}, {"unused_data", T_OBJECT_EX, offsetof(BZ2Decompressor, unused_data), READONLY, BZ2Decompressor_unused_data__doc__}, + {"needs_input", T_BOOL, offsetof(BZ2Decompressor, needs_input), READONLY, + BZ2Decompressor_needs_input_doc}, {NULL} }; diff --git a/Modules/clinic/_bz2module.c.h b/Modules/clinic/_bz2module.c.h index 8a201a08de..5201432a4c 100644 --- a/Modules/clinic/_bz2module.c.h +++ b/Modules/clinic/_bz2module.c.h @@ -95,34 +95,43 @@ exit: } PyDoc_STRVAR(_bz2_BZ2Decompressor_decompress__doc__, -"decompress($self, data, /)\n" +"decompress($self, /, data, max_length=-1)\n" "--\n" "\n" -"Provide data to the decompressor object.\n" +"Decompress *data*, returning uncompressed data as bytes.\n" "\n" -"Returns a chunk of decompressed data if possible, or b\'\' otherwise.\n" +"If *max_length* is nonnegative, returns at most *max_length* bytes of\n" +"decompressed data. If this limit is reached and further output can be\n" +"produced, *self.needs_input* will be set to ``False``. In this case, the next\n" +"call to *decompress()* may provide *data* as b\'\' to obtain more of the output.\n" "\n" -"Attempting to decompress data after the end of stream is reached\n" -"raises an EOFError. Any data found after the end of the stream\n" -"is ignored and saved in the unused_data attribute."); +"If all of the input data was decompressed and returned (either because this\n" +"was less than *max_length* bytes, or because *max_length* was negative),\n" +"*self.needs_input* will be set to True.\n" +"\n" +"Attempting to decompress data after the end of stream is reached raises an\n" +"EOFError. Any data found after the end of the stream is ignored and saved in\n" +"the unused_data attribute."); #define _BZ2_BZ2DECOMPRESSOR_DECOMPRESS_METHODDEF \ - {"decompress", (PyCFunction)_bz2_BZ2Decompressor_decompress, METH_VARARGS, _bz2_BZ2Decompressor_decompress__doc__}, + {"decompress", (PyCFunction)_bz2_BZ2Decompressor_decompress, METH_VARARGS|METH_KEYWORDS, _bz2_BZ2Decompressor_decompress__doc__}, static PyObject * -_bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data); +_bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data, Py_ssize_t max_length); static PyObject * -_bz2_BZ2Decompressor_decompress(BZ2Decompressor *self, PyObject *args) +_bz2_BZ2Decompressor_decompress(BZ2Decompressor *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; + static char *_keywords[] = {"data", "max_length", NULL}; Py_buffer data = {NULL, NULL}; + Py_ssize_t max_length = -1; - if (!PyArg_ParseTuple(args, - "y*:decompress", - &data)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "y*|n:decompress", _keywords, + &data, &max_length)) goto exit; - return_value = _bz2_BZ2Decompressor_decompress_impl(self, &data); + return_value = _bz2_BZ2Decompressor_decompress_impl(self, &data, max_length); exit: /* Cleanup for data */ @@ -159,4 +168,4 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=21ca4405519a0931 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8e65e3953430bc3d input=a9049054013a1b77]*/ -- cgit v1.2.1 From b086e0e65bd2287acf4125461903738351a22b1c Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 26 Feb 2015 15:27:57 +0200 Subject: Silenced minor GCC warnings. --- Modules/_ctypes/_ctypes.c | 5 +++-- Modules/_testcapimodule.c | 7 +++++++ Modules/socketmodule.c | 7 +++++++ 3 files changed, 17 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 23b8e93b46..6531aecc08 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -2819,8 +2819,9 @@ _PyCData_set(CDataObject *dst, PyObject *type, SETFUNC setfunc, PyObject *value, src->b_ptr, size); - if (PyCPointerTypeObject_Check(type)) - /* XXX */; + if (PyCPointerTypeObject_Check(type)) { + /* XXX */ + } value = GetKeepedObjects(src); if (value == NULL) diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 74159a7b52..08aa9c701c 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -69,6 +69,10 @@ test_config(PyObject *self) static PyObject* test_sizeof_c_types(PyObject *self) { +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wtype-limits" +#endif #define CHECK_SIZEOF(TYPE, EXPECTED) \ if (EXPECTED != sizeof(TYPE)) { \ PyErr_Format(TestError, \ @@ -126,6 +130,9 @@ test_sizeof_c_types(PyObject *self) #undef IS_SIGNED #undef CHECK_SIGNESS #undef CHECK_SIZEOF +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif } diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 7c7cb7de6f..4eb3978bec 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1966,8 +1966,15 @@ cmsg_min_space(struct msghdr *msg, struct cmsghdr *cmsgh, size_t space) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wtautological-compare" #endif + #ifdef __GNUC__ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wtype-limits" + #endif if (msg->msg_controllen < 0) return 0; + #ifdef __GNUC__ + #pragma GCC diagnostic pop + #endif #ifdef __clang__ #pragma clang diagnostic pop #endif -- cgit v1.2.1 From 8bb9006ef8a3dc09105c3969039aa77892205f80 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 26 Feb 2015 23:21:29 -0800 Subject: Bump the blocksize up from 62 to 64 to speed up the modulo calculation. Remove the old comment suggesting that it was desireable to have blocksize+2 as a multiple of the cache line length. That would have made sense only if the block structure start point was always aligned to a cache line boundary. However, the memory allocations are 16 byte aligned, so we don't really have control over whether the struct spills across cache line boundaries. --- Modules/_collectionsmodule.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index d3b0287abd..0df35d959c 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -10,14 +10,11 @@ /* The block length may be set to any number over 1. Larger numbers * reduce the number of calls to the memory allocator, give faster * indexing and rotation, and reduce the link::data overhead ratio. - * - * Ideally, the block length will be set to two less than some - * multiple of the cache-line length (so that the full block - * including the leftlink and rightlink will fit neatly into - * cache lines). + * Making the block length a power of two speeds-up the modulo + * calculation in deque_item(). */ -#define BLOCKLEN 62 +#define BLOCKLEN 64 #define CENTER ((BLOCKLEN - 1) / 2) /* A `dequeobject` is composed of a doubly-linked list of `block` nodes. -- cgit v1.2.1 From 37015487ae962614c4948e3666a2aa72831ceaa4 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 27 Feb 2015 12:42:54 -0800 Subject: Since the index is always non-negative, use faster unsigned division and modulo. --- Modules/_collectionsmodule.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 0df35d959c..0bc0e98ed8 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -142,7 +142,7 @@ typedef struct { static PyTypeObject deque_type; -/* XXX Todo: +/* XXX Todo: If aligned memory allocations become available, make the deque object 64 byte aligned so that all of the fields can be retrieved or updated in a single cache line. @@ -780,7 +780,9 @@ deque_item(dequeobject *deque, Py_ssize_t i) b = deque->rightblock; } else { i += deque->leftindex; - n = i / BLOCKLEN; + assert(i >= 0); + n = (Py_ssize_t)((unsigned) i / BLOCKLEN); + i = (Py_ssize_t)((unsigned) i % BLOCKLEN); i %= BLOCKLEN; if (index < (Py_SIZE(deque) >> 1)) { b = deque->leftblock; @@ -1848,7 +1850,7 @@ _count_elements(PyObject *self, PyObject *args) (hash = ((PyASCIIObject *) key)->hash) == -1) { hash = PyObject_Hash(key); - if (hash == -1) + if (hash == -1) goto done; } -- cgit v1.2.1 From 978bab1281030246696df198e75558d899d93602 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 27 Feb 2015 16:59:29 -0800 Subject: Line missed in last checkin --- Modules/_collectionsmodule.c | 1 - 1 file changed, 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 0bc0e98ed8..8494a47d87 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -783,7 +783,6 @@ deque_item(dequeobject *deque, Py_ssize_t i) assert(i >= 0); n = (Py_ssize_t)((unsigned) i / BLOCKLEN); i = (Py_ssize_t)((unsigned) i % BLOCKLEN); - i %= BLOCKLEN; if (index < (Py_SIZE(deque) >> 1)) { b = deque->leftblock; while (n--) -- cgit v1.2.1 From 978eb612b585f1f376733c5f2d43d912c9cb009a Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 28 Feb 2015 07:41:30 -0800 Subject: Convert one more division to unsigned arithmetic to speed-up deque_item(). --- Modules/_collectionsmodule.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 8494a47d87..d12f0e8769 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -788,7 +788,9 @@ deque_item(dequeobject *deque, Py_ssize_t i) while (n--) b = b->rightlink; } else { - n = (deque->leftindex + Py_SIZE(deque) - 1) / BLOCKLEN - n; + n = (Py_ssize_t)( + ((unsigned)(deque->leftindex + Py_SIZE(deque) - 1)) + / BLOCKLEN - n); b = deque->rightblock; while (n--) b = b->leftlink; -- cgit v1.2.1 From 67464ce14e0489e22bd2132173a1c332878c7432 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 28 Feb 2015 17:49:47 -0800 Subject: Use unsigned division and modulo for item assignment as well. --- Modules/_collectionsmodule.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index d12f0e8769..908cfd2f3e 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -780,7 +780,6 @@ deque_item(dequeobject *deque, Py_ssize_t i) b = deque->rightblock; } else { i += deque->leftindex; - assert(i >= 0); n = (Py_ssize_t)((unsigned) i / BLOCKLEN); i = (Py_ssize_t)((unsigned) i % BLOCKLEN); if (index < (Py_SIZE(deque) >> 1)) { @@ -840,14 +839,16 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) return deque_del_item(deque, i); i += deque->leftindex; - n = i / BLOCKLEN; - i %= BLOCKLEN; + n = (Py_ssize_t)((unsigned) i / BLOCKLEN); + i = (Py_ssize_t)((unsigned) i % BLOCKLEN); if (index <= halflen) { b = deque->leftblock; while (n--) b = b->rightlink; } else { - n = (deque->leftindex + len - 1) / BLOCKLEN - n; + n = (Py_ssize_t)( + ((unsigned)(deque->leftindex + Py_SIZE(deque) - 1)) + / BLOCKLEN - n); b = deque->rightblock; while (n--) b = b->leftlink; -- cgit v1.2.1 From 21bb3c4b4497863964e50846734ee49981a073b2 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 28 Feb 2015 23:29:16 -0800 Subject: Need a (size_t) cast instead of (unsigned) to be big enough for a Py_ssize_t. --- Modules/_collectionsmodule.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 908cfd2f3e..0ca9be1df5 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1,6 +1,12 @@ #include "Python.h" #include "structmember.h" +#ifdef STDC_HEADERS +#include +#else +#include /* For size_t */ +#endif + /* collections module implementation of a deque() datatype Written and maintained by Raymond D. Hettinger Copyright (c) 2004-2015 Python Software Foundation. @@ -780,15 +786,15 @@ deque_item(dequeobject *deque, Py_ssize_t i) b = deque->rightblock; } else { i += deque->leftindex; - n = (Py_ssize_t)((unsigned) i / BLOCKLEN); - i = (Py_ssize_t)((unsigned) i % BLOCKLEN); + n = (Py_ssize_t)((size_t) i / BLOCKLEN); + i = (Py_ssize_t)((size_t) i % BLOCKLEN); if (index < (Py_SIZE(deque) >> 1)) { b = deque->leftblock; while (n--) b = b->rightlink; } else { n = (Py_ssize_t)( - ((unsigned)(deque->leftindex + Py_SIZE(deque) - 1)) + ((size_t)(deque->leftindex + Py_SIZE(deque) - 1)) / BLOCKLEN - n); b = deque->rightblock; while (n--) @@ -839,15 +845,15 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) return deque_del_item(deque, i); i += deque->leftindex; - n = (Py_ssize_t)((unsigned) i / BLOCKLEN); - i = (Py_ssize_t)((unsigned) i % BLOCKLEN); + n = (Py_ssize_t)((size_t) i / BLOCKLEN); + i = (Py_ssize_t)((size_t) i % BLOCKLEN); if (index <= halflen) { b = deque->leftblock; while (n--) b = b->rightlink; } else { n = (Py_ssize_t)( - ((unsigned)(deque->leftindex + Py_SIZE(deque) - 1)) + ((size_t)(deque->leftindex + Py_SIZE(deque) - 1)) / BLOCKLEN - n); b = deque->rightblock; while (n--) -- cgit v1.2.1 From 05e30638d979dd5d2058bb05b18893ca4052a42a Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 1 Mar 2015 00:38:00 -0800 Subject: Issue #23553: Use an unsigned cast to tighten-up the bounds checking logic. --- Modules/_collectionsmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 0ca9be1df5..69814bb34c 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -772,7 +772,7 @@ deque_item(dequeobject *deque, Py_ssize_t i) PyObject *item; Py_ssize_t n, index=i; - if (i < 0 || i >= Py_SIZE(deque)) { + if ((size_t)i >= (size_t)Py_SIZE(deque)) { PyErr_SetString(PyExc_IndexError, "deque index out of range"); return NULL; @@ -836,7 +836,7 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) block *b; Py_ssize_t n, len=Py_SIZE(deque), halflen=(len+1)>>1, index=i; - if (i < 0 || i >= len) { + if ((size_t)i >= (size_t)len) { PyErr_SetString(PyExc_IndexError, "deque index out of range"); return -1; -- cgit v1.2.1 From 19bc01c2e5808108db8940f405fc6a7f117c39cb Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sun, 1 Mar 2015 14:52:07 -0500 Subject: Closes issue #22791: Improved datetime from timestamp methods documentation. Original patch by Akira Li. --- Modules/_datetimemodule.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 701c58773b..09285d919d 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -5020,8 +5020,7 @@ static PyMethodDef datetime_methods[] = { {"utcfromtimestamp", (PyCFunction)datetime_utcfromtimestamp, METH_VARARGS | METH_CLASS, - PyDoc_STR("timestamp -> UTC datetime from a POSIX timestamp " - "(like time.time()).")}, + PyDoc_STR("Construct a naive UTC datetime from a POSIX timestamp.")}, {"strptime", (PyCFunction)datetime_strptime, METH_VARARGS | METH_CLASS, -- cgit v1.2.1 From 09f948b478144e25154abb7c0f163d200fc57a84 Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sun, 1 Mar 2015 15:08:17 -0500 Subject: Issue #7830: Flatten nested functools.partial. --- Modules/_functoolsmodule.c | 55 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 57dfba0410..3413b12dfe 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -25,7 +25,7 @@ static PyTypeObject partial_type; static PyObject * partial_new(PyTypeObject *type, PyObject *args, PyObject *kw) { - PyObject *func; + PyObject *func, *pargs, *nargs, *pkw; partialobject *pto; if (PyTuple_GET_SIZE(args) < 1) { @@ -34,7 +34,16 @@ partial_new(PyTypeObject *type, PyObject *args, PyObject *kw) return NULL; } + pargs = pkw = Py_None; func = PyTuple_GET_ITEM(args, 0); + if (Py_TYPE(func) == &partial_type && type == &partial_type) { + partialobject *part = (partialobject *)func; + if (part->dict == NULL) { + pargs = part->args; + pkw = part->kw; + func = part->fn; + } + } if (!PyCallable_Check(func)) { PyErr_SetString(PyExc_TypeError, "the first argument must be callable"); @@ -48,21 +57,53 @@ partial_new(PyTypeObject *type, PyObject *args, PyObject *kw) pto->fn = func; Py_INCREF(func); - pto->args = PyTuple_GetSlice(args, 1, PY_SSIZE_T_MAX); - if (pto->args == NULL) { + + nargs = PyTuple_GetSlice(args, 1, PY_SSIZE_T_MAX); + if (nargs == NULL) { + pto->args = NULL; pto->kw = NULL; Py_DECREF(pto); return NULL; } + if (pargs == Py_None || PyTuple_GET_SIZE(pargs) == 0) { + pto->args = nargs; + Py_INCREF(nargs); + } + else if (PyTuple_GET_SIZE(nargs) == 0) { + pto->args = pargs; + Py_INCREF(pargs); + } + else { + pto->args = PySequence_Concat(pargs, nargs); + if (pto->args == NULL) { + pto->kw = NULL; + Py_DECREF(pto); + return NULL; + } + } + Py_DECREF(nargs); + if (kw != NULL) { - pto->kw = PyDict_Copy(kw); + if (pkw == Py_None) { + pto->kw = PyDict_Copy(kw); + } + else { + pto->kw = PyDict_Copy(pkw); + if (pto->kw != NULL) { + if (PyDict_Merge(pto->kw, kw, 1) != 0) { + Py_DECREF(pto); + return NULL; + } + } + } if (pto->kw == NULL) { Py_DECREF(pto); return NULL; } - } else { - pto->kw = Py_None; - Py_INCREF(Py_None); + } + else { + pto->kw = pkw; + Py_INCREF(pkw); } pto->weakreflist = NULL; -- cgit v1.2.1 From 547de7c7bdd902a96d8b74f35e3a24c4eeabaf2f Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Mon, 2 Mar 2015 08:01:10 -0800 Subject: Issue #23451: Update pyconfig.h for Windows to require Vista headers and remove unnecessary version checks. --- Modules/_winapi.c | 8 ++++++++ Modules/socketmodule.h | 7 +++++++ 2 files changed, 15 insertions(+) (limited to 'Modules') diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 51c4d5f45c..0274874dda 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -1001,6 +1001,12 @@ PyDoc_STRVAR(GetVersion_doc, \n\ Return the version number of the current operating system."); +/* Disable deprecation warnings about GetVersionEx as the result is + being passed straight through to the caller, who is responsible for + using it correctly. */ +#pragma warning(push) +#pragma warning(disable:4996) + static PyObject * winapi_GetVersion(PyObject* self, PyObject* args) { @@ -1010,6 +1016,8 @@ winapi_GetVersion(PyObject* self, PyObject* args) return PyLong_FromUnsignedLong(GetVersion()); } +#pragma warning(pop) + static PyObject * winapi_OpenProcess(PyObject *self, PyObject *args) { diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h index b83f9af3bd..4b6a10e85a 100644 --- a/Modules/socketmodule.h +++ b/Modules/socketmodule.h @@ -14,6 +14,13 @@ #else /* MS_WINDOWS */ # include +/* Windows 'supports' CMSG_LEN, but does not follow the POSIX standard + * interface at all, so there is no point including the code that + * attempts to use it. + */ +# ifdef PySocket_BUILDING_SOCKET +# undef CMSG_LEN +# endif # include /* VC6 is shipped with old platform headers, and does not have MSTcpIP.h * Separate SDKs have all the functions we want, but older ones don't have -- cgit v1.2.1 From 2b64e612b66b304c3fef14352a71a03bcec06b55 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 2 Mar 2015 21:45:02 -0800 Subject: Beautify and better document the use of the size_t cast for bounds checking. --- Modules/_collectionsmodule.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 69814bb34c..579c37c436 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -765,6 +765,14 @@ deque_clear(dequeobject *deque) Py_SIZE(deque) == 0); } +static int +valid_index(Py_ssize_t i, Py_ssize_t limit) +{ + /* The cast to size_t let us use just a single comparison + to check whether i is in the range: 0 <= i < limit */ + return (size_t) i < (size_t) limit; +} + static PyObject * deque_item(dequeobject *deque, Py_ssize_t i) { @@ -772,9 +780,8 @@ deque_item(dequeobject *deque, Py_ssize_t i) PyObject *item; Py_ssize_t n, index=i; - if ((size_t)i >= (size_t)Py_SIZE(deque)) { - PyErr_SetString(PyExc_IndexError, - "deque index out of range"); + if (!valid_index(i, Py_SIZE(deque))) { + PyErr_SetString(PyExc_IndexError, "deque index out of range"); return NULL; } @@ -836,9 +843,8 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) block *b; Py_ssize_t n, len=Py_SIZE(deque), halflen=(len+1)>>1, index=i; - if ((size_t)i >= (size_t)len) { - PyErr_SetString(PyExc_IndexError, - "deque index out of range"); + if (!valid_index(i, len)) { + PyErr_SetString(PyExc_IndexError, "deque index out of range"); return -1; } if (v == NULL) -- cgit v1.2.1 From 15d72fff4b2cf503e3a2843ecba7863776066477 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 2 Mar 2015 22:23:37 -0800 Subject: Minor code beautification. Replace macro with in-lineable functions. --- Modules/_collectionsmodule.c | 55 ++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 20 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 579c37c436..c39e98df9b 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -130,22 +130,6 @@ typedef struct { PyObject *weakreflist; /* List of weak references */ } dequeobject; -/* The deque's size limit is d.maxlen. The limit can be zero or positive. - * If there is no limit, then d.maxlen == -1. - * - * After an item is added to a deque, we check to see if the size has grown past - * the limit. If it has, we get the size back down to the limit by popping an - * item off of the opposite end. The methods that can trigger this are append(), - * appendleft(), extend(), and extendleft(). - */ - -#define TRIM(d, popfunction) \ - if (d->maxlen != -1 && Py_SIZE(d) > d->maxlen) { \ - PyObject *rv = popfunction(d, NULL); \ - assert(rv != NULL && Py_SIZE(d) <= d->maxlen); \ - Py_DECREF(rv); \ - } - static PyTypeObject deque_type; /* XXX Todo: @@ -261,6 +245,37 @@ deque_popleft(dequeobject *deque, PyObject *unused) PyDoc_STRVAR(popleft_doc, "Remove and return the leftmost element."); +/* The deque's size limit is d.maxlen. The limit can be zero or positive. + * If there is no limit, then d.maxlen == -1. + * + * After an item is added to a deque, we check to see if the size has grown past + * the limit. If it has, we get the size back down to the limit by popping an + * item off of the opposite end. The methods that can trigger this are append(), + * appendleft(), extend(), and extendleft(). + */ + +static void +deque_trim_right(dequeobject *deque) +{ + if (deque->maxlen != -1 && Py_SIZE(deque) > deque->maxlen) { + PyObject *rv = deque_pop(deque, NULL); + assert(rv != NULL); + assert(Py_SIZE(deque) <= deque->maxlen); + Py_DECREF(rv); + } +} + +static void +deque_trim_left(dequeobject *deque) +{ + if (deque->maxlen != -1 && Py_SIZE(deque) > deque->maxlen) { + PyObject *rv = deque_popleft(deque, NULL); + assert(rv != NULL); + assert(Py_SIZE(deque) <= deque->maxlen); + Py_DECREF(rv); + } +} + static PyObject * deque_append(dequeobject *deque, PyObject *item) { @@ -280,7 +295,7 @@ deque_append(dequeobject *deque, PyObject *item) Py_SIZE(deque)++; deque->rightindex++; deque->rightblock->data[deque->rightindex] = item; - TRIM(deque, deque_popleft); + deque_trim_left(deque); Py_RETURN_NONE; } @@ -305,7 +320,7 @@ deque_appendleft(dequeobject *deque, PyObject *item) Py_SIZE(deque)++; deque->leftindex--; deque->leftblock->data[deque->leftindex] = item; - TRIM(deque, deque_pop); + deque_trim_right(deque); Py_RETURN_NONE; } @@ -378,7 +393,7 @@ deque_extend(dequeobject *deque, PyObject *iterable) Py_SIZE(deque)++; deque->rightindex++; deque->rightblock->data[deque->rightindex] = item; - TRIM(deque, deque_popleft); + deque_trim_left(deque); } Py_DECREF(it); if (PyErr_Occurred()) @@ -439,7 +454,7 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) Py_SIZE(deque)++; deque->leftindex--; deque->leftblock->data[deque->leftindex] = item; - TRIM(deque, deque_pop); + deque_trim_right(deque); } Py_DECREF(it); if (PyErr_Occurred()) -- cgit v1.2.1 From 698c91457979634cb7f34e582e0e64f3506c6105 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 2 Mar 2015 22:31:35 -0800 Subject: Minor beautification. Move struct definitions to the top. Fix-up a comment. --- Modules/_collectionsmodule.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index c39e98df9b..2546c59fcd 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -15,9 +15,9 @@ /* The block length may be set to any number over 1. Larger numbers * reduce the number of calls to the memory allocator, give faster - * indexing and rotation, and reduce the link::data overhead ratio. + * indexing and rotation, and reduce the link to data overhead ratio. * Making the block length a power of two speeds-up the modulo - * calculation in deque_item(). + * and division calculations in deque_item() and deque_ass_item(). */ #define BLOCKLEN 64 @@ -56,6 +56,19 @@ typedef struct BLOCK { struct BLOCK *rightlink; } block; +typedef struct { + PyObject_VAR_HEAD + block *leftblock; + block *rightblock; + Py_ssize_t leftindex; /* in range(BLOCKLEN) */ + Py_ssize_t rightindex; /* in range(BLOCKLEN) */ + long state; /* incremented whenever the indices move */ + Py_ssize_t maxlen; + PyObject *weakreflist; /* List of weak references */ +} dequeobject; + +static PyTypeObject deque_type; + /* For debug builds, add error checking to track the endpoints * in the chain of links. The goal is to make sure that link * assignments only take place at endpoints so that links already @@ -119,19 +132,6 @@ freeblock(block *b) } } -typedef struct { - PyObject_VAR_HEAD - block *leftblock; - block *rightblock; - Py_ssize_t leftindex; /* in range(BLOCKLEN) */ - Py_ssize_t rightindex; /* in range(BLOCKLEN) */ - long state; /* incremented whenever the indices move */ - Py_ssize_t maxlen; - PyObject *weakreflist; /* List of weak references */ -} dequeobject; - -static PyTypeObject deque_type; - /* XXX Todo: If aligned memory allocations become available, make the deque object 64 byte aligned so that all of the fields -- cgit v1.2.1 From 4e3ffa97176fb4747fe0d2ec0f68130ed05407ce Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 2 Mar 2015 22:47:46 -0800 Subject: Switch the state variable to unsigned for defined wrap-around behavior. --- Modules/_collectionsmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 2546c59fcd..96049f3f67 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -62,7 +62,7 @@ typedef struct { block *rightblock; Py_ssize_t leftindex; /* in range(BLOCKLEN) */ Py_ssize_t rightindex; /* in range(BLOCKLEN) */ - long state; /* incremented whenever the indices move */ + size_t state; /* incremented whenever the indices move */ Py_ssize_t maxlen; PyObject *weakreflist; /* List of weak references */ } dequeobject; @@ -692,8 +692,8 @@ deque_count(dequeobject *deque, PyObject *v) Py_ssize_t n = Py_SIZE(deque); Py_ssize_t i; Py_ssize_t count = 0; + size_t start_state = deque->state; PyObject *item; - long start_state = deque->state; int cmp; for (i=0 ; i Date: Mon, 2 Mar 2015 23:32:02 -0800 Subject: Minor neatening-up. Make assignments in same order a struct fields. Line-up comments. --- Modules/_collectionsmodule.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 96049f3f67..d4794be08f 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -158,14 +158,14 @@ deque_new(PyTypeObject *type, PyObject *args, PyObject *kwds) MARK_END(b->rightlink); assert(BLOCKLEN >= 2); + Py_SIZE(deque) = 0; deque->leftblock = b; deque->rightblock = b; deque->leftindex = CENTER + 1; deque->rightindex = CENTER; - Py_SIZE(deque) = 0; deque->state = 0; - deque->weakreflist = NULL; deque->maxlen = -1; + deque->weakreflist = NULL; return (PyObject *)deque; } @@ -775,9 +775,9 @@ deque_clear(dequeobject *deque) assert (item != NULL); Py_DECREF(item); } - assert(deque->leftblock == deque->rightblock && - deque->leftindex - 1 == deque->rightindex && - Py_SIZE(deque) == 0); + assert(deque->leftblock == deque->rightblock); + assert(deque->leftindex - 1 == deque->rightindex); + assert(Py_SIZE(deque) == 0); } static int @@ -1152,10 +1152,10 @@ static PySequenceMethods deque_as_sequence = { 0, /* sq_repeat */ (ssizeargfunc)deque_item, /* sq_item */ 0, /* sq_slice */ - (ssizeobjargproc)deque_ass_item, /* sq_ass_item */ + (ssizeobjargproc)deque_ass_item, /* sq_ass_item */ 0, /* sq_ass_slice */ 0, /* sq_contains */ - (binaryfunc)deque_inplace_concat, /* sq_inplace_concat */ + (binaryfunc)deque_inplace_concat, /* sq_inplace_concat */ 0, /* sq_inplace_repeat */ }; @@ -1254,8 +1254,8 @@ static PyTypeObject deque_type = { typedef struct { PyObject_HEAD - Py_ssize_t index; block *b; + Py_ssize_t index; dequeobject *deque; size_t state; /* state when the iterator is created */ Py_ssize_t counter; /* number of items remaining for iteration */ @@ -1374,7 +1374,7 @@ static PyMethodDef dequeiter_methods[] = { static PyTypeObject dequeiter_type = { PyVarObject_HEAD_INIT(NULL, 0) - "_collections._deque_iterator", /* tp_name */ + "_collections._deque_iterator", /* tp_name */ sizeof(dequeiterobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ @@ -1393,7 +1393,7 @@ static PyTypeObject dequeiter_type = { PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ 0, /* tp_doc */ (traverseproc)dequeiter_traverse, /* tp_traverse */ 0, /* tp_clear */ @@ -1496,7 +1496,7 @@ dequereviter_new(PyTypeObject *type, PyObject *args, PyObject *kwds) static PyTypeObject dequereviter_type = { PyVarObject_HEAD_INIT(NULL, 0) - "_collections._deque_reverse_iterator", /* tp_name */ + "_collections._deque_reverse_iterator", /* tp_name */ sizeof(dequeiterobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ @@ -1515,7 +1515,7 @@ static PyTypeObject dequereviter_type = { PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ 0, /* tp_doc */ (traverseproc)dequeiter_traverse, /* tp_traverse */ 0, /* tp_clear */ -- cgit v1.2.1 From 3c1a62e64f25ffeb99fc7a6f46480c6299956e78 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 4 Mar 2015 18:40:10 +0100 Subject: Issue #23285: Fix handling of EINTR in fileio.c Fix handling of EINTR: don't return None if PyErr_CheckSignals() raised an exception. Initialize also the length outside the loop to only initialize it once. --- Modules/_io/fileio.c | 74 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 28 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index ff88e40973..c44423180c 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -376,10 +376,12 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) else #endif self->fd = open(name, flags, 0666); - Py_END_ALLOW_THREADS } while (self->fd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + + if (async_err) + goto error; } else { PyObject *fdobj; @@ -408,8 +410,7 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) fd_is_own = 1; if (self->fd < 0) { - if (!async_err) - PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, nameobj); + PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, nameobj); goto error; } @@ -576,12 +577,15 @@ fileio_readinto(fileio *self, PyObject *args) if (_PyVerify_fd(self->fd)) { len = pbuf.len; +#ifdef MS_WINDOWS + if (len > INT_MAX) + len = INT_MAX; +#endif + do { Py_BEGIN_ALLOW_THREADS errno = 0; #ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; n = read(self->fd, pbuf.buf, (int)len); #else n = read(self->fd, pbuf.buf, len); @@ -589,6 +593,9 @@ fileio_readinto(fileio *self, PyObject *args) Py_END_ALLOW_THREADS } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + + if (async_err) + return NULL; } else n = -1; err = errno; @@ -597,8 +604,7 @@ fileio_readinto(fileio *self, PyObject *args) if (err == EAGAIN) Py_RETURN_NONE; errno = err; - if (!async_err) - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_IOError); return NULL; } @@ -633,7 +639,7 @@ fileio_readall(fileio *self) Py_off_t pos, end; PyObject *result; Py_ssize_t bytes_read = 0; - Py_ssize_t n; + Py_ssize_t len, n; size_t bufsize; int async_err = 0; @@ -682,20 +688,26 @@ fileio_readall(fileio *self) return NULL; } } + + len = bufsize - bytes_read; +#ifdef MS_WINDOWS + if (len > INT_MAX) + len = INT_MAX; +#endif do { Py_BEGIN_ALLOW_THREADS errno = 0; - n = bufsize - bytes_read; #ifdef MS_WINDOWS - if (n > INT_MAX) - n = INT_MAX; - n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, (int)n); + n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, (int)len); #else - n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, n); + n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, len); #endif Py_END_ALLOW_THREADS } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + + if (async_err) + return NULL; if (n == 0) break; if (n < 0) { @@ -706,8 +718,7 @@ fileio_readall(fileio *self) Py_RETURN_NONE; } Py_DECREF(result); - if (!async_err) - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_IOError); return NULL; } bytes_read += n; @@ -775,6 +786,9 @@ fileio_read(fileio *self, PyObject *args) Py_END_ALLOW_THREADS } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + + if (async_err) + return NULL; } else n = -1; @@ -784,8 +798,7 @@ fileio_read(fileio *self, PyObject *args) if (err == EAGAIN) Py_RETURN_NONE; errno = err; - if (!async_err) - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_IOError); return NULL; } @@ -815,19 +828,22 @@ fileio_write(fileio *self, PyObject *args) return NULL; if (_PyVerify_fd(self->fd)) { + len = pbuf.len; +#ifdef MS_WINDOWS + if (len > 32767 && isatty(self->fd)) { + /* Issue #11395: the Windows console returns an error (12: not + enough space error) on writing into stdout if stdout mode is + binary and the length is greater than 66,000 bytes (or less, + depending on heap usage). */ + len = 32767; + } else if (len > INT_MAX) + len = INT_MAX; +#endif + do { Py_BEGIN_ALLOW_THREADS errno = 0; - len = pbuf.len; #ifdef MS_WINDOWS - if (len > 32767 && isatty(self->fd)) { - /* Issue #11395: the Windows console returns an error (12: not - enough space error) on writing into stdout if stdout mode is - binary and the length is greater than 66,000 bytes (or less, - depending on heap usage). */ - len = 32767; - } else if (len > INT_MAX) - len = INT_MAX; n = write(self->fd, pbuf.buf, (int)len); #else n = write(self->fd, pbuf.buf, len); @@ -835,6 +851,9 @@ fileio_write(fileio *self, PyObject *args) Py_END_ALLOW_THREADS } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + + if (async_err) + return NULL; } else n = -1; err = errno; @@ -845,8 +864,7 @@ fileio_write(fileio *self, PyObject *args) if (err == EAGAIN) Py_RETURN_NONE; errno = err; - if (!async_err) - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_IOError); return NULL; } -- cgit v1.2.1 From d3ca862a228a66e93526797a9b812550aacfe22a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 5 Mar 2015 14:04:03 +0100 Subject: Fix "GCC diagnostic" in socketmodule.c Fix regression of changeset 7c6e3358221a on GCC < 4.4. The _socket module cannot be compiled on "x86 FreeBSD 7.2 3.x" buildbot anymore. --- Modules/socketmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 4eb3978bec..483dae546a 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1966,13 +1966,13 @@ cmsg_min_space(struct msghdr *msg, struct cmsghdr *cmsgh, size_t space) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wtautological-compare" #endif - #ifdef __GNUC__ + #if defined(__GNUC__) && ((__GNUC__ == 4) || ((__GNUC__ > 4) && (__GNUC_MINOR__ > 5))) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wtype-limits" #endif if (msg->msg_controllen < 0) return 0; - #ifdef __GNUC__ + #if defined(__GNUC__) && ((__GNUC__ == 4) || ((__GNUC__ > 4) && (__GNUC_MINOR__ > 5))) #pragma GCC diagnostic pop #endif #ifdef __clang__ -- cgit v1.2.1 From 05c6021fb97f086e9222428237764c56e45fe327 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 5 Mar 2015 23:42:24 +0200 Subject: Fixed GCC version testing. --- Modules/socketmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 483dae546a..057430b704 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1966,13 +1966,13 @@ cmsg_min_space(struct msghdr *msg, struct cmsghdr *cmsgh, size_t space) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wtautological-compare" #endif - #if defined(__GNUC__) && ((__GNUC__ == 4) || ((__GNUC__ > 4) && (__GNUC_MINOR__ > 5))) + #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wtype-limits" #endif if (msg->msg_controllen < 0) return 0; - #if defined(__GNUC__) && ((__GNUC__ == 4) || ((__GNUC__ > 4) && (__GNUC_MINOR__ > 5))) + #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))) #pragma GCC diagnostic pop #endif #ifdef __clang__ -- cgit v1.2.1 From fec8aca3947cf3f9d78244fca1965178e8c5e964 Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Thu, 5 Mar 2015 15:47:10 -0800 Subject: Fix regression introduced by changeset 7c6e3358221a that caused compile errors of _testcapimodule.c with older versions of gcc. --- Modules/_testcapimodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 08aa9c701c..a8ce0dc4eb 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -69,7 +69,7 @@ test_config(PyObject *self) static PyObject* test_sizeof_c_types(PyObject *self) { -#ifdef __GNUC__ +#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wtype-limits" #endif @@ -130,7 +130,7 @@ test_sizeof_c_types(PyObject *self) #undef IS_SIGNED #undef CHECK_SIGNESS #undef CHECK_SIZEOF -#ifdef __GNUC__ +#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))) #pragma GCC diagnostic pop #endif } -- cgit v1.2.1 From 6139bc8c6c02db0e084b495d1fe5ac9707635ecb Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 6 Mar 2015 14:47:02 -0800 Subject: Issue #23524: Replace _PyVerify_fd function with calling _set_thread_local_invalid_parameter_handler on every thread. --- Modules/_io/fileio.c | 2 +- Modules/posixmodule.c | 92 +++------------------------------------------------ 2 files changed, 5 insertions(+), 89 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index c44423180c..ab9eb8c061 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -182,7 +182,7 @@ check_fd(int fd) { #if defined(HAVE_FSTAT) || defined(MS_WINDOWS) struct _Py_stat_struct buf; - if (!_PyVerify_fd(fd) || (_Py_fstat(fd, &buf) < 0 && errno == EBADF)) { + if (_Py_fstat(fd, &buf) < 0 && errno == EBADF) { PyObject *exc; char *msg = strerror(EBADF); exc = PyObject_CallFunction(PyExc_OSError, "(is)", diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e381bf1bbb..679fc8f3e8 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1051,99 +1051,16 @@ PyLong_FromPy_off_t(Py_off_t offset) } -#if defined _MSC_VER && _MSC_VER >= 1400 -/* Microsoft CRT in VS2005 and higher will verify that a filehandle is - * valid and raise an assertion if it isn't. - * Normally, an invalid fd is likely to be a C program error and therefore - * an assertion can be useful, but it does contradict the POSIX standard - * which for write(2) states: - * "Otherwise, -1 shall be returned and errno set to indicate the error." - * "[EBADF] The fildes argument is not a valid file descriptor open for - * writing." - * Furthermore, python allows the user to enter any old integer - * as a fd and should merely raise a python exception on error. - * The Microsoft CRT doesn't provide an official way to check for the - * validity of a file descriptor, but we can emulate its internal behaviour - * by using the exported __pinfo data member and knowledge of the - * internal structures involved. - * The structures below must be updated for each version of visual studio - * according to the file internal.h in the CRT source, until MS comes - * up with a less hacky way to do this. - * (all of this is to avoid globally modifying the CRT behaviour using - * _set_invalid_parameter_handler() and _CrtSetReportMode()) +#if defined _MSC_VER && _MSC_VER >= 1400 && _MSC_VER < 1900 +/* Legacy implementation of _PyVerify_fd_dup2 while transitioning to + * MSVC 14.0. This should eventually be removed. (issue23524) */ -/* The actual size of the structure is determined at runtime. - * Only the first items must be present. - */ - -#if _MSC_VER >= 1900 - -typedef struct { - CRITICAL_SECTION lock; - intptr_t osfhnd; - __int64 startpos; - char osfile; -} my_ioinfo; - -#define IOINFO_L2E 6 -#define IOINFO_ARRAYS 128 - -#else - -typedef struct { - intptr_t osfhnd; - char osfile; -} my_ioinfo; - #define IOINFO_L2E 5 #define IOINFO_ARRAYS 64 - -#endif - -extern __declspec(dllimport) char * __pioinfo[]; #define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E) #define _NHANDLE_ (IOINFO_ARRAYS * IOINFO_ARRAY_ELTS) -#define FOPEN 0x01 #define _NO_CONSOLE_FILENO (intptr_t)-2 -/* This function emulates what the windows CRT does to validate file handles */ -int -_PyVerify_fd(int fd) -{ - const int i1 = fd >> IOINFO_L2E; - const int i2 = fd & ((1 << IOINFO_L2E) - 1); - - static size_t sizeof_ioinfo = 0; - - /* Determine the actual size of the ioinfo structure, - * as used by the CRT loaded in memory - */ - if (sizeof_ioinfo == 0 && __pioinfo[0] != NULL) { - sizeof_ioinfo = _msize(__pioinfo[0]) / IOINFO_ARRAY_ELTS; - } - if (sizeof_ioinfo == 0) { - /* This should not happen... */ - goto fail; - } - - /* See that it isn't a special CLEAR fileno */ - if (fd != _NO_CONSOLE_FILENO) { - /* Microsoft CRT would check that 0<=fd<_nhandle but we can't do that. Instead - * we check pointer validity and other info - */ - if (0 <= i1 && i1 < IOINFO_ARRAYS && __pioinfo[i1] != NULL) { - /* finally, check that the file is open */ - my_ioinfo* info = (my_ioinfo*)(__pioinfo[i1] + i2 * sizeof_ioinfo); - if (info->osfile & FOPEN) { - return 1; - } - } - } - fail: - errno = EBADF; - return 0; -} - /* the special case of checking dup2. The target fd must be in a sensible range */ static int _PyVerify_fd_dup2(int fd1, int fd2) @@ -1158,8 +1075,7 @@ _PyVerify_fd_dup2(int fd1, int fd2) return 0; } #else -/* dummy version. _PyVerify_fd() is already defined in fileobject.h */ -#define _PyVerify_fd_dup2(A, B) (1) +#define _PyVerify_fd_dup2(fd1, fd2) (_PyVerify_fd(fd1) && (fd2) >= 0) #endif #ifdef MS_WINDOWS -- cgit v1.2.1 From ef35d11c6986437b4eac74a6657377607c34841a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 6 Mar 2015 23:35:27 +0100 Subject: Issue #23571: PyObject_Call(), PyCFunction_Call() and call_function() now raise a SystemError if a function returns a result and raises an exception. The SystemError is chained to the previous exception. Refactor also PyObject_Call() and PyCFunction_Call() to make them more readable. Remove some checks which became useless (duplicate checks). Change reviewed by Serhiy Storchaka. --- Modules/_io/bufferedio.c | 4 ---- Modules/_sqlite/cursor.c | 4 ---- 2 files changed, 8 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 692ce41cf9..370bb5ec45 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -680,11 +680,7 @@ static void _set_BlockingIOError(char *msg, Py_ssize_t written) { PyObject *err; -#ifdef Py_DEBUG - /* in debug mode, PyEval_EvalFrameEx() fails with an assertion error - if an exception is set when it is called */ PyErr_Clear(); -#endif err = PyObject_CallFunction(PyExc_BlockingIOError, "isn", errno, msg, written); if (err) diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 7fe00e32d2..c1599c02df 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -334,11 +334,7 @@ PyObject* _pysqlite_fetch_one_row(pysqlite_Cursor* self) if (self->connection->text_factory == (PyObject*)&PyUnicode_Type) { converted = PyUnicode_FromStringAndSize(val_str, nbytes); if (!converted) { -#ifdef Py_DEBUG - /* in debug mode, type_call() fails with an assertion - error if an exception is set when it is called */ PyErr_Clear(); -#endif colname = sqlite3_column_name(self->statement->st, i); if (!colname) { colname = ""; -- cgit v1.2.1 From 78cd34ff52e1d00bd25e73675f0b60e92be7a221 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 8 Mar 2015 01:58:04 +0100 Subject: Issue #22524: New os.scandir() function, part of the PEP 471: "os.scandir() function -- a better and faster directory iterator". Patch written by Ben Hoyt. --- Modules/posixmodule.c | 818 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 798 insertions(+), 20 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 679fc8f3e8..c00113e33e 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -25,6 +25,7 @@ #define PY_SSIZE_T_CLEAN #include "Python.h" +#include "structmember.h" #ifndef MS_WINDOWS #include "posixmodule.h" #else @@ -372,6 +373,14 @@ static int win32_can_symlink = 0; #define DWORD_MAX 4294967295U +#ifdef MS_WINDOWS +#define INITFUNC PyInit_nt +#define MODNAME "nt" +#else +#define INITFUNC PyInit_posix +#define MODNAME "posix" +#endif + #ifdef MS_WINDOWS /* defined in fileutils.c */ PyAPI_FUNC(void) _Py_time_t_to_FILE_TIME(time_t, int, FILETIME *); @@ -1396,6 +1405,25 @@ attributes_from_dir(LPCSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *rep return TRUE; } +static void +find_data_to_file_info_w(WIN32_FIND_DATAW *pFileData, + BY_HANDLE_FILE_INFORMATION *info, + ULONG *reparse_tag) +{ + memset(info, 0, sizeof(*info)); + info->dwFileAttributes = pFileData->dwFileAttributes; + info->ftCreationTime = pFileData->ftCreationTime; + info->ftLastAccessTime = pFileData->ftLastAccessTime; + info->ftLastWriteTime = pFileData->ftLastWriteTime; + info->nFileSizeHigh = pFileData->nFileSizeHigh; + info->nFileSizeLow = pFileData->nFileSizeLow; +/* info->nNumberOfLinks = 1; */ + if (pFileData->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) + *reparse_tag = pFileData->dwReserved0; + else + *reparse_tag = 0; +} + static BOOL attributes_from_dir_w(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *reparse_tag) { @@ -1405,17 +1433,7 @@ attributes_from_dir_w(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG * if (hFindFile == INVALID_HANDLE_VALUE) return FALSE; FindClose(hFindFile); - memset(info, 0, sizeof(*info)); - *reparse_tag = 0; - info->dwFileAttributes = FileData.dwFileAttributes; - info->ftCreationTime = FileData.ftCreationTime; - info->ftLastAccessTime = FileData.ftLastAccessTime; - info->ftLastWriteTime = FileData.ftLastWriteTime; - info->nFileSizeHigh = FileData.nFileSizeHigh; - info->nFileSizeLow = FileData.nFileSizeLow; -/* info->nNumberOfLinks = 1; */ - if (FileData.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) - *reparse_tag = FileData.dwReserved0; + find_data_to_file_info_w(&FileData, info, reparse_tag); return TRUE; } @@ -16330,6 +16348,766 @@ posix_set_blocking(PyObject *self, PyObject *args) #endif /* !MS_WINDOWS */ +PyDoc_STRVAR(posix_scandir__doc__, +"scandir(path='.') -> iterator of DirEntry objects for given path"); + +static char *follow_symlinks_keywords[] = {"follow_symlinks", NULL}; + +typedef struct { + PyObject_HEAD + PyObject *name; + PyObject *path; + PyObject *stat; + PyObject *lstat; +#ifdef MS_WINDOWS + struct _Py_stat_struct win32_lstat; + __int64 win32_file_index; + int got_file_index; +#else /* POSIX */ + unsigned char d_type; + ino_t d_ino; +#endif +} DirEntry; + +static void +DirEntry_dealloc(DirEntry *entry) +{ + Py_XDECREF(entry->name); + Py_XDECREF(entry->path); + Py_XDECREF(entry->stat); + Py_XDECREF(entry->lstat); + Py_TYPE(entry)->tp_free((PyObject *)entry); +} + +/* Forward reference */ +static int +DirEntry_test_mode(DirEntry *self, int follow_symlinks, unsigned short mode_bits); + +/* Set exception and return -1 on error, 0 for False, 1 for True */ +static int +DirEntry_is_symlink(DirEntry *self) +{ +#ifdef MS_WINDOWS + return (self->win32_lstat.st_mode & S_IFMT) == S_IFLNK; +#else /* POSIX */ + if (self->d_type != DT_UNKNOWN) + return self->d_type == DT_LNK; + else + return DirEntry_test_mode(self, 0, S_IFLNK); +#endif +} + +static PyObject * +DirEntry_py_is_symlink(DirEntry *self) +{ + int result; + + result = DirEntry_is_symlink(self); + if (result == -1) + return NULL; + return PyBool_FromLong(result); +} + +static PyObject * +DirEntry_fetch_stat(DirEntry *self, int follow_symlinks) +{ + int result; + struct _Py_stat_struct st; + +#ifdef MS_WINDOWS + wchar_t *path; + + path = PyUnicode_AsUnicode(self->path); + if (!path) + return NULL; + + if (follow_symlinks) + result = win32_stat_w(path, &st); + else + result = win32_lstat_w(path, &st); + + if (result != 0) { + return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, + 0, self->path); + } +#else /* POSIX */ + PyObject *bytes; + char *path; + + if (!PyUnicode_FSConverter(self->path, &bytes)) + return NULL; + path = PyBytes_AS_STRING(bytes); + + if (follow_symlinks) + result = STAT(path, &st); + else + result = LSTAT(path, &st); + Py_DECREF(bytes); + + if (result != 0) + return PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, self->path); +#endif + + return _pystat_fromstructstat(&st); +} + +static PyObject * +DirEntry_get_lstat(DirEntry *self) +{ + if (!self->lstat) { +#ifdef MS_WINDOWS + self->lstat = _pystat_fromstructstat(&self->win32_lstat); +#else /* POSIX */ + self->lstat = DirEntry_fetch_stat(self, 0); +#endif + } + Py_XINCREF(self->lstat); + return self->lstat; +} + +static PyObject * +DirEntry_get_stat(DirEntry *self, int follow_symlinks) +{ + if (!follow_symlinks) + return DirEntry_get_lstat(self); + + if (!self->stat) { + int result = DirEntry_is_symlink(self); + if (result == -1) + return NULL; + else if (result) + self->stat = DirEntry_fetch_stat(self, 1); + else + self->stat = DirEntry_get_lstat(self); + } + + Py_XINCREF(self->stat); + return self->stat; +} + +static PyObject * +DirEntry_stat(DirEntry *self, PyObject *args, PyObject *kwargs) +{ + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|$p:DirEntry.stat", + follow_symlinks_keywords, &follow_symlinks)) + return NULL; + + return DirEntry_get_stat(self, follow_symlinks); +} + +/* Set exception and return -1 on error, 0 for False, 1 for True */ +static int +DirEntry_test_mode(DirEntry *self, int follow_symlinks, unsigned short mode_bits) +{ + PyObject *stat = NULL; + PyObject *st_mode = NULL; + long mode; + int result; + int is_symlink; + int need_stat; + _Py_IDENTIFIER(st_mode); +#ifdef MS_WINDOWS + unsigned long dir_bits; +#endif + +#ifdef MS_WINDOWS + is_symlink = (self->win32_lstat.st_mode & S_IFMT) == S_IFLNK; + need_stat = follow_symlinks && is_symlink; +#else /* POSIX */ + is_symlink = self->d_type == DT_LNK; + need_stat = self->d_type == DT_UNKNOWN || (follow_symlinks && is_symlink); +#endif + + if (need_stat) { + stat = DirEntry_get_stat(self, follow_symlinks); + if (!stat) { + if (PyErr_ExceptionMatches(PyExc_FileNotFoundError)) { + /* If file doesn't exist (anymore), then return False + (i.e., say it's not a file/directory) */ + PyErr_Clear(); + return 0; + } + goto error; + } + st_mode = _PyObject_GetAttrId(stat, &PyId_st_mode); + if (!st_mode) + goto error; + + mode = PyLong_AsLong(st_mode); + if (mode == -1 && PyErr_Occurred()) + goto error; + Py_CLEAR(st_mode); + Py_CLEAR(stat); + result = (mode & S_IFMT) == mode_bits; + } + else if (is_symlink) { + assert(mode_bits != S_IFLNK); + result = 0; + } + else { + assert(mode_bits == S_IFDIR || mode_bits == S_IFREG); +#ifdef MS_WINDOWS + dir_bits = self->win32_lstat.st_file_attributes & FILE_ATTRIBUTE_DIRECTORY; + if (mode_bits == S_IFDIR) + result = dir_bits != 0; + else + result = dir_bits == 0; +#else /* POSIX */ + if (mode_bits == S_IFDIR) + result = self->d_type == DT_DIR; + else + result = self->d_type == DT_REG; +#endif + } + + return result; + +error: + Py_XDECREF(st_mode); + Py_XDECREF(stat); + return -1; +} + +static PyObject * +DirEntry_py_test_mode(DirEntry *self, int follow_symlinks, unsigned short mode_bits) +{ + int result; + + result = DirEntry_test_mode(self, follow_symlinks, mode_bits); + if (result == -1) + return NULL; + return PyBool_FromLong(result); +} + +static PyObject * +DirEntry_is_dir(DirEntry *self, PyObject *args, PyObject *kwargs) +{ + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|$p:DirEntry.is_dir", + follow_symlinks_keywords, &follow_symlinks)) + return NULL; + + return DirEntry_py_test_mode(self, follow_symlinks, S_IFDIR); +} + +static PyObject * +DirEntry_is_file(DirEntry *self, PyObject *args, PyObject *kwargs) +{ + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|$p:DirEntry.is_file", + follow_symlinks_keywords, &follow_symlinks)) + return NULL; + + return DirEntry_py_test_mode(self, follow_symlinks, S_IFREG); +} + +static PyObject * +DirEntry_inode(DirEntry *self) +{ +#ifdef MS_WINDOWS + if (!self->got_file_index) { + wchar_t *path; + struct _Py_stat_struct stat; + + path = PyUnicode_AsUnicode(self->path); + if (!path) + return NULL; + + if (win32_lstat_w(path, &stat) != 0) { + return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, + 0, self->path); + } + + self->win32_file_index = stat.st_ino; + self->got_file_index = 1; + } + return PyLong_FromLongLong((PY_LONG_LONG)self->win32_file_index); +#else /* POSIX */ +#ifdef HAVE_LARGEFILE_SUPPORT + return PyLong_FromLongLong((PY_LONG_LONG)self->d_ino); +#else + return PyLong_FromLong((long)self->d_ino); +#endif +#endif +} + +static PyObject * +DirEntry_repr(DirEntry *self) +{ + return PyUnicode_FromFormat("", self->name); +} + +static PyMemberDef DirEntry_members[] = { + {"name", T_OBJECT_EX, offsetof(DirEntry, name), READONLY, + "the entry's base filename, relative to scandir() \"path\" argument"}, + {"path", T_OBJECT_EX, offsetof(DirEntry, path), READONLY, + "the entry's full path name; equivalent to os.path.join(scandir_path, entry.name)"}, + {NULL} +}; + +static PyMethodDef DirEntry_methods[] = { + {"is_dir", (PyCFunction)DirEntry_is_dir, METH_VARARGS | METH_KEYWORDS, + "return True if the entry is a directory; cached per entry" + }, + {"is_file", (PyCFunction)DirEntry_is_file, METH_VARARGS | METH_KEYWORDS, + "return True if the entry is a file; cached per entry" + }, + {"is_symlink", (PyCFunction)DirEntry_py_is_symlink, METH_NOARGS, + "return True if the entry is a symbolic link; cached per entry" + }, + {"stat", (PyCFunction)DirEntry_stat, METH_VARARGS | METH_KEYWORDS, + "return stat_result object for the entry; cached per entry" + }, + {"inode", (PyCFunction)DirEntry_inode, METH_NOARGS, + "return inode of the entry; cached per entry", + }, + {NULL} +}; + +PyTypeObject DirEntryType = { + PyVarObject_HEAD_INIT(NULL, 0) + MODNAME ".DirEntry", /* tp_name */ + sizeof(DirEntry), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor)DirEntry_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + (reprfunc)DirEntry_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + 0, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DirEntry_methods, /* tp_methods */ + DirEntry_members, /* tp_members */ +}; + +#ifdef MS_WINDOWS + +static wchar_t * +join_path_filenameW(wchar_t *path_wide, wchar_t* filename) +{ + Py_ssize_t path_len; + Py_ssize_t size; + wchar_t *result; + wchar_t ch; + + if (!path_wide) { /* Default arg: "." */ + path_wide = L"."; + path_len = 1; + } + else { + path_len = wcslen(path_wide); + } + + /* The +1's are for the path separator and the NUL */ + size = path_len + 1 + wcslen(filename) + 1; + result = PyMem_New(wchar_t, size); + if (!result) { + PyErr_NoMemory(); + return NULL; + } + wcscpy(result, path_wide); + if (path_len > 0) { + ch = result[path_len - 1]; + if (ch != SEP && ch != ALTSEP && ch != L':') + result[path_len++] = SEP; + wcscpy(result + path_len, filename); + } + return result; +} + +static PyObject * +DirEntry_from_find_data(path_t *path, WIN32_FIND_DATAW *dataW) +{ + DirEntry *entry; + BY_HANDLE_FILE_INFORMATION file_info; + ULONG reparse_tag; + wchar_t *joined_path; + + entry = PyObject_New(DirEntry, &DirEntryType); + if (!entry) + return NULL; + entry->name = NULL; + entry->path = NULL; + entry->stat = NULL; + entry->lstat = NULL; + entry->got_file_index = 0; + + entry->name = PyUnicode_FromWideChar(dataW->cFileName, -1); + if (!entry->name) + goto error; + + joined_path = join_path_filenameW(path->wide, dataW->cFileName); + if (!joined_path) + goto error; + + entry->path = PyUnicode_FromWideChar(joined_path, -1); + PyMem_Free(joined_path); + if (!entry->path) + goto error; + + find_data_to_file_info_w(dataW, &file_info, &reparse_tag); + _Py_attribute_data_to_stat(&file_info, reparse_tag, &entry->win32_lstat); + + return (PyObject *)entry; + +error: + Py_DECREF(entry); + return NULL; +} + +#else /* POSIX */ + +static char * +join_path_filename(char *path_narrow, char* filename, Py_ssize_t filename_len) +{ + Py_ssize_t path_len; + Py_ssize_t size; + char *result; + + if (!path_narrow) { /* Default arg: "." */ + path_narrow = "."; + path_len = 1; + } + else { + path_len = strlen(path_narrow); + } + + if (filename_len == -1) + filename_len = strlen(filename); + + /* The +1's are for the path separator and the NUL */ + size = path_len + 1 + filename_len + 1; + result = PyMem_New(char, size); + if (!result) { + PyErr_NoMemory(); + return NULL; + } + strcpy(result, path_narrow); + if (path_len > 0 && result[path_len - 1] != '/') + result[path_len++] = '/'; + strcpy(result + path_len, filename); + return result; +} + +static PyObject * +DirEntry_from_posix_info(path_t *path, char *name, Py_ssize_t name_len, + unsigned char d_type, ino_t d_ino) +{ + DirEntry *entry; + char *joined_path; + + entry = PyObject_New(DirEntry, &DirEntryType); + if (!entry) + return NULL; + entry->name = NULL; + entry->path = NULL; + entry->stat = NULL; + entry->lstat = NULL; + + joined_path = join_path_filename(path->narrow, name, name_len); + if (!joined_path) + goto error; + + if (!path->narrow || !PyBytes_Check(path->object)) { + entry->name = PyUnicode_DecodeFSDefaultAndSize(name, name_len); + entry->path = PyUnicode_DecodeFSDefault(joined_path); + } + else { + entry->name = PyBytes_FromStringAndSize(name, name_len); + entry->path = PyBytes_FromString(joined_path); + } + PyMem_Free(joined_path); + if (!entry->name || !entry->path) + goto error; + + entry->d_type = d_type; + entry->d_ino = d_ino; + + return (PyObject *)entry; + +error: + Py_XDECREF(entry); + return NULL; +} + +#endif + + +typedef struct { + PyObject_HEAD + path_t path; +#ifdef MS_WINDOWS + HANDLE handle; + WIN32_FIND_DATAW file_data; + int first_time; +#else /* POSIX */ + DIR *dirp; +#endif +} ScandirIterator; + +#ifdef MS_WINDOWS + +static void +ScandirIterator_close(ScandirIterator *iterator) +{ + if (iterator->handle == INVALID_HANDLE_VALUE) + return; + + Py_BEGIN_ALLOW_THREADS + FindClose(iterator->handle); + Py_END_ALLOW_THREADS + iterator->handle = INVALID_HANDLE_VALUE; +} + +static PyObject * +ScandirIterator_iternext(ScandirIterator *iterator) +{ + WIN32_FIND_DATAW *file_data = &iterator->file_data; + BOOL success; + + /* Happens if the iterator is iterated twice */ + if (iterator->handle == INVALID_HANDLE_VALUE) { + PyErr_SetNone(PyExc_StopIteration); + return NULL; + } + + while (1) { + if (!iterator->first_time) { + Py_BEGIN_ALLOW_THREADS + success = FindNextFileW(iterator->handle, file_data); + Py_END_ALLOW_THREADS + if (!success) { + if (GetLastError() != ERROR_NO_MORE_FILES) + return path_error(&iterator->path); + /* No more files found in directory, stop iterating */ + break; + } + } + iterator->first_time = 0; + + /* Skip over . and .. */ + if (wcscmp(file_data->cFileName, L".") != 0 && + wcscmp(file_data->cFileName, L"..") != 0) + return DirEntry_from_find_data(&iterator->path, file_data); + + /* Loop till we get a non-dot directory or finish iterating */ + } + + ScandirIterator_close(iterator); + + PyErr_SetNone(PyExc_StopIteration); + return NULL; +} + +#else /* POSIX */ + +static void +ScandirIterator_close(ScandirIterator *iterator) +{ + if (!iterator->dirp) + return; + + Py_BEGIN_ALLOW_THREADS + closedir(iterator->dirp); + Py_END_ALLOW_THREADS + iterator->dirp = NULL; + return; +} + +static PyObject * +ScandirIterator_iternext(ScandirIterator *iterator) +{ + struct dirent *direntp; + Py_ssize_t name_len; + int is_dot; + unsigned char d_type; + + /* Happens if the iterator is iterated twice */ + if (!iterator->dirp) { + PyErr_SetNone(PyExc_StopIteration); + return NULL; + } + + while (1) { + errno = 0; + Py_BEGIN_ALLOW_THREADS + direntp = readdir(iterator->dirp); + Py_END_ALLOW_THREADS + + if (!direntp) { + if (errno != 0) + return path_error(&iterator->path); + /* No more files found in directory, stop iterating */ + break; + } + + /* Skip over . and .. */ + name_len = NAMLEN(direntp); + is_dot = direntp->d_name[0] == '.' && + (name_len == 1 || (direntp->d_name[1] == '.' && name_len == 2)); + if (!is_dot) { +#if defined(__GLIBC__) && !defined(_DIRENT_HAVE_D_TYPE) + d_type = DT_UNKNOWN; /* System doesn't support d_type */ +#else + d_type = direntp->d_type; +#endif + return DirEntry_from_posix_info(&iterator->path, direntp->d_name, + name_len, d_type, direntp->d_ino); + } + + /* Loop till we get a non-dot directory or finish iterating */ + } + + ScandirIterator_close(iterator); + + PyErr_SetNone(PyExc_StopIteration); + return NULL; +} + +#endif + +static void +ScandirIterator_dealloc(ScandirIterator *iterator) +{ + ScandirIterator_close(iterator); + Py_XDECREF(iterator->path.object); + path_cleanup(&iterator->path); + Py_TYPE(iterator)->tp_free((PyObject *)iterator); +} + +PyTypeObject ScandirIteratorType = { + PyVarObject_HEAD_INIT(NULL, 0) + MODNAME ".ScandirIterator", /* tp_name */ + sizeof(ScandirIterator), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor)ScandirIterator_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + 0, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc)ScandirIterator_iternext, /* tp_iternext */ +}; + +static PyObject * +posix_scandir(PyObject *self, PyObject *args, PyObject *kwargs) +{ + ScandirIterator *iterator; + static char *keywords[] = {"path", NULL}; +#ifdef MS_WINDOWS + wchar_t *path_strW; +#else + char *path; +#endif + + iterator = PyObject_New(ScandirIterator, &ScandirIteratorType); + if (!iterator) + return NULL; + memset(&iterator->path, 0, sizeof(path_t)); + iterator->path.function_name = "scandir"; + iterator->path.nullable = 1; + +#ifdef MS_WINDOWS + iterator->handle = INVALID_HANDLE_VALUE; +#else + iterator->dirp = NULL; +#endif + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&:scandir", keywords, + path_converter, &iterator->path)) + goto error; + + /* path_converter doesn't keep path.object around, so do it + manually for the lifetime of the iterator here (the refcount + is decremented in ScandirIterator_dealloc) + */ + Py_XINCREF(iterator->path.object); + +#ifdef MS_WINDOWS + if (iterator->path.narrow) { + PyErr_SetString(PyExc_TypeError, + "os.scandir() doesn't support bytes path on Windows, use Unicode instead"); + goto error; + } + iterator->first_time = 1; + + path_strW = join_path_filenameW(iterator->path.wide, L"*.*"); + if (!path_strW) + goto error; + + Py_BEGIN_ALLOW_THREADS + iterator->handle = FindFirstFileW(path_strW, &iterator->file_data); + Py_END_ALLOW_THREADS + + PyMem_Free(path_strW); + + if (iterator->handle == INVALID_HANDLE_VALUE) { + path_error(&iterator->path); + goto error; + } +#else /* POSIX */ + if (iterator->path.narrow) + path = iterator->path.narrow; + else + path = "."; + + errno = 0; + Py_BEGIN_ALLOW_THREADS + iterator->dirp = opendir(path); + Py_END_ALLOW_THREADS + + if (!iterator->dirp) { + path_error(&iterator->path); + goto error; + } +#endif + + return (PyObject *)iterator; + +error: + Py_DECREF(iterator); + return NULL; +} + + /*[clinic input] dump buffer [clinic start generated code]*/ @@ -17002,6 +17780,9 @@ static PyMethodDef posix_methods[] = { {"get_blocking", posix_get_blocking, METH_VARARGS, get_blocking__doc__}, {"set_blocking", posix_set_blocking, METH_VARARGS, set_blocking__doc__}, #endif + {"scandir", (PyCFunction)posix_scandir, + METH_VARARGS | METH_KEYWORDS, + posix_scandir__doc__}, {NULL, NULL} /* Sentinel */ }; @@ -17444,15 +18225,6 @@ all_ins(PyObject *m) } -#ifdef MS_WINDOWS -#define INITFUNC PyInit_nt -#define MODNAME "nt" - -#else -#define INITFUNC PyInit_posix -#define MODNAME "posix" -#endif - static struct PyModuleDef posixmodule = { PyModuleDef_HEAD_INIT, MODNAME, @@ -17673,6 +18445,12 @@ INITFUNC(void) if (PyStructSequence_InitType2(&TerminalSizeType, &TerminalSize_desc) < 0) return NULL; + + /* initialize scandir types */ + if (PyType_Ready(&ScandirIteratorType) < 0) + return NULL; + if (PyType_Ready(&DirEntryType) < 0) + return NULL; } #if defined(HAVE_WAITID) && !defined(__APPLE__) Py_INCREF((PyObject*) &WaitidResultType); -- cgit v1.2.1 From ea83cf646de5c274ca6528be1a78e886192e0780 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 8 Mar 2015 02:59:09 +0100 Subject: Issue #22524: Fix os.scandir() for platforms which don't have a d_type field in the dirent structure (ex: OpenIndiana). --- Modules/posixmodule.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index c00113e33e..e47bd84bd1 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -16364,7 +16364,9 @@ typedef struct { __int64 win32_file_index; int got_file_index; #else /* POSIX */ +#ifdef HAVE_DIRENT_D_TYPE unsigned char d_type; +#endif ino_t d_ino; #endif } DirEntry; @@ -16389,11 +16391,15 @@ DirEntry_is_symlink(DirEntry *self) { #ifdef MS_WINDOWS return (self->win32_lstat.st_mode & S_IFMT) == S_IFLNK; -#else /* POSIX */ +#elif defined(HAVE_DIRENT_D_TYPE) + /* POSIX */ if (self->d_type != DT_UNKNOWN) return self->d_type == DT_LNK; else return DirEntry_test_mode(self, 0, S_IFLNK); +#else + /* POSIX without d_type */ + return DirEntry_test_mode(self, 0, S_IFLNK); #endif } @@ -16505,22 +16511,26 @@ DirEntry_test_mode(DirEntry *self, int follow_symlinks, unsigned short mode_bits PyObject *st_mode = NULL; long mode; int result; +#if defined(MS_WINDOWS) || defined(HAVE_DIRENT_D_TYPE) int is_symlink; int need_stat; - _Py_IDENTIFIER(st_mode); +#endif #ifdef MS_WINDOWS unsigned long dir_bits; #endif + _Py_IDENTIFIER(st_mode); #ifdef MS_WINDOWS is_symlink = (self->win32_lstat.st_mode & S_IFMT) == S_IFLNK; need_stat = follow_symlinks && is_symlink; -#else /* POSIX */ +#elif defined(HAVE_DIRENT_D_TYPE) is_symlink = self->d_type == DT_LNK; need_stat = self->d_type == DT_UNKNOWN || (follow_symlinks && is_symlink); #endif +#if defined(MS_WINDOWS) || defined(HAVE_DIRENT_D_TYPE) if (need_stat) { +#endif stat = DirEntry_get_stat(self, follow_symlinks); if (!stat) { if (PyErr_ExceptionMatches(PyExc_FileNotFoundError)) { @@ -16541,6 +16551,7 @@ DirEntry_test_mode(DirEntry *self, int follow_symlinks, unsigned short mode_bits Py_CLEAR(st_mode); Py_CLEAR(stat); result = (mode & S_IFMT) == mode_bits; +#if defined(MS_WINDOWS) || defined(HAVE_DIRENT_D_TYPE) } else if (is_symlink) { assert(mode_bits != S_IFLNK); @@ -16561,6 +16572,7 @@ DirEntry_test_mode(DirEntry *self, int follow_symlinks, unsigned short mode_bits result = self->d_type == DT_REG; #endif } +#endif return result; @@ -16812,7 +16824,11 @@ join_path_filename(char *path_narrow, char* filename, Py_ssize_t filename_len) static PyObject * DirEntry_from_posix_info(path_t *path, char *name, Py_ssize_t name_len, - unsigned char d_type, ino_t d_ino) + ino_t d_ino +#ifdef HAVE_DIRENT_D_TYPE + , unsigned char d_type +#endif + ) { DirEntry *entry; char *joined_path; @@ -16841,7 +16857,9 @@ DirEntry_from_posix_info(path_t *path, char *name, Py_ssize_t name_len, if (!entry->name || !entry->path) goto error; +#ifdef HAVE_DIRENT_D_TYPE entry->d_type = d_type; +#endif entry->d_ino = d_ino; return (PyObject *)entry; @@ -16941,7 +16959,6 @@ ScandirIterator_iternext(ScandirIterator *iterator) struct dirent *direntp; Py_ssize_t name_len; int is_dot; - unsigned char d_type; /* Happens if the iterator is iterated twice */ if (!iterator->dirp) { @@ -16967,13 +16984,12 @@ ScandirIterator_iternext(ScandirIterator *iterator) is_dot = direntp->d_name[0] == '.' && (name_len == 1 || (direntp->d_name[1] == '.' && name_len == 2)); if (!is_dot) { -#if defined(__GLIBC__) && !defined(_DIRENT_HAVE_D_TYPE) - d_type = DT_UNKNOWN; /* System doesn't support d_type */ -#else - d_type = direntp->d_type; -#endif return DirEntry_from_posix_info(&iterator->path, direntp->d_name, - name_len, d_type, direntp->d_ino); + name_len, direntp->d_ino +#ifdef HAVE_DIRENT_D_TYPE + , direntp->d_type +#endif + ); } /* Loop till we get a non-dot directory or finish iterating */ -- cgit v1.2.1 From 2d72ea4b9806468c66ac0562db71d5b4faeaea58 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 7 Mar 2015 18:14:07 -0800 Subject: Issue #23524: Change back to using Windows errors for _Py_fstat instead of the errno shim. --- Modules/_io/fileio.c | 8 +++++++- Modules/signalmodule.c | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index ab9eb8c061..0f226eafbf 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -182,7 +182,13 @@ check_fd(int fd) { #if defined(HAVE_FSTAT) || defined(MS_WINDOWS) struct _Py_stat_struct buf; - if (_Py_fstat(fd, &buf) < 0 && errno == EBADF) { + if (_Py_fstat(fd, &buf) < 0 && +#ifdef MS_WINDOWS + GetLastError() == ERROR_INVALID_HANDLE +#else + errno == EBADF +#endif + ) { PyObject *exc; char *msg = strerror(EBADF); exc = PyObject_CallFunction(PyExc_OSError, "(is)", diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 598bc8a342..3ad8ebb8cd 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -560,7 +560,7 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) } if (_Py_fstat(fd, &st) != 0) { - PyErr_SetFromErrno(PyExc_OSError); + PyErr_SetExcFromWindowsErr(PyExc_OSError, GetLastError()); return NULL; } -- cgit v1.2.1 From da1eb8aba9f5fa159b7e2cc1794da81bae56ee9a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 12 Mar 2015 15:32:03 +0100 Subject: Issue #23566: enable(), register(), dump_traceback() and dump_traceback_later() functions of faulthandler now accept file descriptors. Patch by Wei Wu. --- Modules/faulthandler.c | 56 +++++++++++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 21 deletions(-) (limited to 'Modules') diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 4643c0ede5..def7b29d6d 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -133,32 +133,46 @@ static stack_t stack; call its flush() method. If file is NULL or Py_None, use sys.stderr as the new file. + If file is an integer, it will be treated as file descriptor. - On success, return the new file and write the file descriptor into *p_fd. - On error, return NULL. */ + On success, return the file descriptor and write the new file into *file_ptr. + On error, return -1. */ -static PyObject* -faulthandler_get_fileno(PyObject *file, int *p_fd) +static int +faulthandler_get_fileno(PyObject **file_ptr) { PyObject *result; long fd_long; int fd; + PyObject *file = *file_ptr; if (file == NULL || file == Py_None) { file = _PySys_GetObjectId(&PyId_stderr); if (file == NULL) { PyErr_SetString(PyExc_RuntimeError, "unable to get sys.stderr"); - return NULL; + return -1; } if (file == Py_None) { PyErr_SetString(PyExc_RuntimeError, "sys.stderr is None"); - return NULL; + return -1; + } + } + else if (PyLong_Check(file)) { + fd = _PyLong_AsInt(file); + if (fd == -1 && PyErr_Occurred()) + return -1; + if (fd < 0 || !_PyVerify_fd(fd)) { + PyErr_SetString(PyExc_ValueError, + "file is not a valid file descripter"); + return -1; } + *file_ptr = NULL; + return fd; } result = _PyObject_CallMethodId(file, &PyId_fileno, ""); if (result == NULL) - return NULL; + return -1; fd = -1; if (PyLong_Check(result)) { @@ -171,7 +185,7 @@ faulthandler_get_fileno(PyObject *file, int *p_fd) if (fd == -1) { PyErr_SetString(PyExc_RuntimeError, "file.fileno() is not a valid file descriptor"); - return NULL; + return -1; } result = _PyObject_CallMethodId(file, &PyId_flush, ""); @@ -181,8 +195,8 @@ faulthandler_get_fileno(PyObject *file, int *p_fd) /* ignore flush() error */ PyErr_Clear(); } - *p_fd = fd; - return file; + *file_ptr = file; + return fd; } /* Get the state of the current thread: only call this function if the current @@ -215,8 +229,8 @@ faulthandler_dump_traceback_py(PyObject *self, &file, &all_threads)) return NULL; - file = faulthandler_get_fileno(file, &fd); - if (file == NULL) + fd = faulthandler_get_fileno(&file); + if (fd < 0) return NULL; tstate = get_thread_state(); @@ -339,8 +353,8 @@ faulthandler_enable(PyObject *self, PyObject *args, PyObject *kwargs) "|Oi:enable", kwlist, &file, &all_threads)) return NULL; - file = faulthandler_get_fileno(file, &fd); - if (file == NULL) + fd = faulthandler_get_fileno(&file); + if (fd < 0) return NULL; tstate = get_thread_state(); @@ -348,7 +362,7 @@ faulthandler_enable(PyObject *self, PyObject *args, PyObject *kwargs) return NULL; Py_XDECREF(fatal_error.file); - Py_INCREF(file); + Py_XINCREF(file); fatal_error.file = file; fatal_error.fd = fd; fatal_error.all_threads = all_threads; @@ -553,8 +567,8 @@ faulthandler_dump_traceback_later(PyObject *self, if (tstate == NULL) return NULL; - file = faulthandler_get_fileno(file, &fd); - if (file == NULL) + fd = faulthandler_get_fileno(&file); + if (fd < 0) return NULL; /* format the timeout */ @@ -567,7 +581,7 @@ faulthandler_dump_traceback_later(PyObject *self, cancel_dump_traceback_later(); Py_XDECREF(thread.file); - Py_INCREF(file); + Py_XINCREF(file); thread.file = file; thread.fd = fd; thread.timeout_us = timeout_us; @@ -737,8 +751,8 @@ faulthandler_register_py(PyObject *self, if (tstate == NULL) return NULL; - file = faulthandler_get_fileno(file, &fd); - if (file == NULL) + fd = faulthandler_get_fileno(&file); + if (fd < 0) return NULL; if (user_signals == NULL) { @@ -760,7 +774,7 @@ faulthandler_register_py(PyObject *self, } Py_XDECREF(user->file); - Py_INCREF(file); + Py_XINCREF(file); user->file = file; user->fd = fd; user->all_threads = all_threads; -- cgit v1.2.1 From 252bb5d72c7032ef68e0702c4d16c590d9f1479b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 12 Mar 2015 16:19:01 +0100 Subject: test --- Modules/timemodule.c | 118 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 69 insertions(+), 49 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 7f5f3149af..0eb78e9879 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1386,74 +1386,94 @@ floattime(_Py_clock_info_t *info) static int floatsleep(double secs) { -/* XXX Should test for MS_WINDOWS first! */ -#if defined(HAVE_SELECT) && !defined(__EMX__) - struct timeval t; + _PyTime_timeval deadline, monotonic; +#ifndef MS_WINDOWS + struct timeval timeout; double frac; - int err; - - frac = fmod(secs, 1.0); - secs = floor(secs); - t.tv_sec = (long)secs; - t.tv_usec = (long)(frac*1000000.0); - Py_BEGIN_ALLOW_THREADS - err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &t); - Py_END_ALLOW_THREADS - if (err != 0) { -#ifdef EINTR - if (errno == EINTR) { - if (PyErr_CheckSignals()) - return -1; - } - else -#endif - { - PyErr_SetFromErrno(PyExc_OSError); + int err = 0; + + _PyTime_monotonic(&deadline); + _PyTime_ADD_SECONDS(deadline, secs); + + while (1) { + frac = fmod(secs, 1.0); + secs = floor(secs); + timeout.tv_sec = (long)secs; + timeout.tv_usec = (long)(frac*1000000.0); + + Py_BEGIN_ALLOW_THREADS + err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout); + Py_END_ALLOW_THREADS + + if (!(err != 0 && errno == EINTR)) + break; + + /* select() was interrupted by a signal */ + if (PyErr_CheckSignals()) return -1; + + _PyTime_monotonic(&monotonic); + secs = _PyTime_INTERVAL(monotonic, deadline); + if (secs <= 0.0) { + err = 0; + errno = 0; + break; } } -#elif defined(__WATCOMC__) && !defined(__QNX__) - /* XXX Can't interrupt this sleep */ - Py_BEGIN_ALLOW_THREADS - delay((int)(secs * 1000 + 0.5)); /* delay() uses milliseconds */ - Py_END_ALLOW_THREADS -#elif defined(MS_WINDOWS) - { - double millisecs = secs * 1000.0; - unsigned long ul_millis; + if (err != 0) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } +#else + double millisecs; + unsigned long ul_millis; + DWORD rc; + HANDLE hInterruptEvent; + + _PyTime_monotonic(&deadline); + _PyTime_ADD_SECONDS(deadline, secs); + + do { + millisecs = secs * 1000.0; if (millisecs > (double)ULONG_MAX) { PyErr_SetString(PyExc_OverflowError, "sleep length is too large"); return -1; } - Py_BEGIN_ALLOW_THREADS + /* Allow sleep(0) to maintain win32 semantics, and as decreed * by Guido, only the main thread can be interrupted. */ ul_millis = (unsigned long)millisecs; - if (ul_millis == 0 || !_PyOS_IsMainThread()) - Sleep(ul_millis); + if (ul_millis == 0 || !_PyOS_IsMainThread()) { + Py_BEGIN_ALLOW_THREADS + Sleep(0); + Py_END_ALLOW_THREADS + break; + } else { - DWORD rc; - HANDLE hInterruptEvent = _PyOS_SigintEvent(); + hInterruptEvent = _PyOS_SigintEvent(); ResetEvent(hInterruptEvent); + + Py_BEGIN_ALLOW_THREADS rc = WaitForSingleObjectEx(hInterruptEvent, ul_millis, FALSE); - if (rc == WAIT_OBJECT_0) { - Py_BLOCK_THREADS - errno = EINTR; - PyErr_SetFromErrno(PyExc_OSError); + Py_END_ALLOW_THREADS + + if (rc != WAIT_OBJECT_0) + break; + + /* WaitForSingleObjectEx() was interrupted by SIGINT */ + + if (PyErr_CheckSignals()) return -1; - } + + _PyTime_monotonic(&monotonic); + secs = _PyTime_INTERVAL(monotonic, deadline); + if (secs <= 0.0) + break; } - Py_END_ALLOW_THREADS - } -#else - /* XXX Can't interrupt this sleep */ - Py_BEGIN_ALLOW_THREADS - sleep((int)secs); - Py_END_ALLOW_THREADS + } while (1); #endif - return 0; } -- cgit v1.2.1 From 194b344c9eea9f92e267c1ee2ede21c86cb2715c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 17 Mar 2015 10:49:17 +0100 Subject: Revert changeset d927047b1d8eb87738676980a24930d053ba2150 Sorry, it was a mistake, the patch is still under review: issue #23646. --- Modules/timemodule.c | 118 +++++++++++++++++++++------------------------------ 1 file changed, 49 insertions(+), 69 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 0eb78e9879..7f5f3149af 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1386,94 +1386,74 @@ floattime(_Py_clock_info_t *info) static int floatsleep(double secs) { - _PyTime_timeval deadline, monotonic; -#ifndef MS_WINDOWS - struct timeval timeout; +/* XXX Should test for MS_WINDOWS first! */ +#if defined(HAVE_SELECT) && !defined(__EMX__) + struct timeval t; double frac; - int err = 0; - - _PyTime_monotonic(&deadline); - _PyTime_ADD_SECONDS(deadline, secs); - - while (1) { - frac = fmod(secs, 1.0); - secs = floor(secs); - timeout.tv_sec = (long)secs; - timeout.tv_usec = (long)(frac*1000000.0); - - Py_BEGIN_ALLOW_THREADS - err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout); - Py_END_ALLOW_THREADS - - if (!(err != 0 && errno == EINTR)) - break; - - /* select() was interrupted by a signal */ - if (PyErr_CheckSignals()) + int err; + + frac = fmod(secs, 1.0); + secs = floor(secs); + t.tv_sec = (long)secs; + t.tv_usec = (long)(frac*1000000.0); + Py_BEGIN_ALLOW_THREADS + err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &t); + Py_END_ALLOW_THREADS + if (err != 0) { +#ifdef EINTR + if (errno == EINTR) { + if (PyErr_CheckSignals()) + return -1; + } + else +#endif + { + PyErr_SetFromErrno(PyExc_OSError); return -1; - - _PyTime_monotonic(&monotonic); - secs = _PyTime_INTERVAL(monotonic, deadline); - if (secs <= 0.0) { - err = 0; - errno = 0; - break; } } +#elif defined(__WATCOMC__) && !defined(__QNX__) + /* XXX Can't interrupt this sleep */ + Py_BEGIN_ALLOW_THREADS + delay((int)(secs * 1000 + 0.5)); /* delay() uses milliseconds */ + Py_END_ALLOW_THREADS +#elif defined(MS_WINDOWS) + { + double millisecs = secs * 1000.0; + unsigned long ul_millis; - if (err != 0) { - PyErr_SetFromErrno(PyExc_OSError); - return -1; - } -#else - double millisecs; - unsigned long ul_millis; - DWORD rc; - HANDLE hInterruptEvent; - - _PyTime_monotonic(&deadline); - _PyTime_ADD_SECONDS(deadline, secs); - - do { - millisecs = secs * 1000.0; if (millisecs > (double)ULONG_MAX) { PyErr_SetString(PyExc_OverflowError, "sleep length is too large"); return -1; } - + Py_BEGIN_ALLOW_THREADS /* Allow sleep(0) to maintain win32 semantics, and as decreed * by Guido, only the main thread can be interrupted. */ ul_millis = (unsigned long)millisecs; - if (ul_millis == 0 || !_PyOS_IsMainThread()) { - Py_BEGIN_ALLOW_THREADS - Sleep(0); - Py_END_ALLOW_THREADS - break; - } + if (ul_millis == 0 || !_PyOS_IsMainThread()) + Sleep(ul_millis); else { - hInterruptEvent = _PyOS_SigintEvent(); + DWORD rc; + HANDLE hInterruptEvent = _PyOS_SigintEvent(); ResetEvent(hInterruptEvent); - - Py_BEGIN_ALLOW_THREADS rc = WaitForSingleObjectEx(hInterruptEvent, ul_millis, FALSE); - Py_END_ALLOW_THREADS - - if (rc != WAIT_OBJECT_0) - break; - - /* WaitForSingleObjectEx() was interrupted by SIGINT */ - - if (PyErr_CheckSignals()) + if (rc == WAIT_OBJECT_0) { + Py_BLOCK_THREADS + errno = EINTR; + PyErr_SetFromErrno(PyExc_OSError); return -1; - - _PyTime_monotonic(&monotonic); - secs = _PyTime_INTERVAL(monotonic, deadline); - if (secs <= 0.0) - break; + } } - } while (1); + Py_END_ALLOW_THREADS + } +#else + /* XXX Can't interrupt this sleep */ + Py_BEGIN_ALLOW_THREADS + sleep((int)secs); + Py_END_ALLOW_THREADS #endif + return 0; } -- cgit v1.2.1 From d75a7f069519117cc6485149e9dcd4de31e64125 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 17 Mar 2015 17:48:27 +0100 Subject: Issue #23685: Fix usage of PyMODINIT_FUNC in _json, _scproxy, nis, pyexpat _codecs_cn, _codecs_hk, _codecs_iso2022, _codecs_jp, _codecs_kr and _codecs_tw modules. pyexpat.c doesn't need to redeclare PyMODINIT_FUNC, it's already declared in Include/pyport.h. --- Modules/_json.c | 2 +- Modules/_scproxy.c | 2 +- Modules/cjkcodecs/cjkcodecs.h | 2 +- Modules/nismodule.c | 4 ++-- Modules/pyexpat.c | 10 ---------- 5 files changed, 5 insertions(+), 15 deletions(-) (limited to 'Modules') diff --git a/Modules/_json.c b/Modules/_json.c index 076859f99c..3a60243256 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -1995,7 +1995,7 @@ static struct PyModuleDef jsonmodule = { NULL }; -PyObject* +PyMODINIT_FUNC PyInit__json(void) { PyObject *m = PyModule_Create(&jsonmodule); diff --git a/Modules/_scproxy.c b/Modules/_scproxy.c index 3b2a38ea32..66b6e3439f 100644 --- a/Modules/_scproxy.c +++ b/Modules/_scproxy.c @@ -249,7 +249,7 @@ static struct PyModuleDef mod_module = { extern "C" { #endif -PyObject* +PyMODINIT_FUNC PyInit__scproxy(void) { return PyModule_Create(&mod_module); diff --git a/Modules/cjkcodecs/cjkcodecs.h b/Modules/cjkcodecs/cjkcodecs.h index a45ed125fa..23642df9af 100644 --- a/Modules/cjkcodecs/cjkcodecs.h +++ b/Modules/cjkcodecs/cjkcodecs.h @@ -401,7 +401,7 @@ errorexit: NULL, \ NULL \ }; \ - PyObject* \ + PyMODINIT_FUNC \ PyInit__codecs_##loc(void) \ { \ PyObject *m = PyModule_Create(&__module); \ diff --git a/Modules/nismodule.c b/Modules/nismodule.c index 0af495fa53..64eb5dbc3d 100644 --- a/Modules/nismodule.c +++ b/Modules/nismodule.c @@ -456,8 +456,8 @@ static struct PyModuleDef nismodule = { NULL }; -PyObject* -PyInit_nis (void) +PyMODINIT_FUNC +PyInit_nis(void) { PyObject *m, *d; m = PyModule_Create(&nismodule); diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 21cb04a826..ce65354497 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1900,16 +1900,6 @@ PyDoc_STRVAR(pyexpat_module_documentation, #define MODULE_INITFUNC PyInit_pyexpat #endif -#ifndef PyMODINIT_FUNC -# ifdef MS_WINDOWS -# define PyMODINIT_FUNC __declspec(dllexport) void -# else -# define PyMODINIT_FUNC void -# endif -#endif - -PyMODINIT_FUNC MODULE_INITFUNC(void); /* avoid compiler warnings */ - static struct PyModuleDef pyexpatmodule = { PyModuleDef_HEAD_INIT, MODULE_NAME, -- cgit v1.2.1 From b8d0bcab60af86bb0d982ef0483eec7930a0a9d0 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 18 Mar 2015 00:22:14 +0100 Subject: Issue #23694: Enhance _Py_open(), it now raises exceptions * _Py_open() now raises exceptions on error. If open() fails, it raises an OSError with the filename. * _Py_open() now releases the GIL while calling open() * Add _Py_open_noraise() when _Py_open() cannot be used because the GIL is not held --- Modules/_posixsubprocess.c | 1 + Modules/mmapmodule.c | 1 - Modules/ossaudiodev.c | 9 ++------- Modules/posixmodule.c | 8 +++----- Modules/selectmodule.c | 11 +++-------- 5 files changed, 9 insertions(+), 21 deletions(-) (limited to 'Modules') diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index a8c2be223d..a33df211e9 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -257,6 +257,7 @@ _close_open_fds_safe(int start_fd, PyObject* py_fds_to_keep) fd_dir_fd = _Py_open(FD_DIR, O_RDONLY); if (fd_dir_fd == -1) { /* No way to get a list of open fds. */ + PyErr_Clear(); _close_fds_by_brute_force(start_fd, py_fds_to_keep); return; } else { diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index ac134b837d..7c4d17f243 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -1221,7 +1221,6 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) fd = devzero = _Py_open("/dev/zero", O_RDWR); if (devzero == -1) { Py_DECREF(m_obj); - PyErr_SetFromErrno(PyExc_OSError); return NULL; } #endif diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index 2d0dd098d8..34e68c7ad4 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -116,11 +116,8 @@ newossobject(PyObject *arg) provides a special ioctl() for non-blocking read/write, which is exposed via oss_nonblock() below. */ fd = _Py_open(devicename, imode|O_NONBLOCK); - - if (fd == -1) { - PyErr_SetFromErrnoWithFilename(PyExc_IOError, devicename); + if (fd == -1) return NULL; - } /* And (try to) put it back in blocking mode so we get the expected write() semantics. */ @@ -180,10 +177,8 @@ newossmixerobject(PyObject *arg) } fd = _Py_open(devicename, O_RDWR); - if (fd == -1) { - PyErr_SetFromErrnoWithFilename(PyExc_IOError, devicename); + if (fd == -1) return NULL; - } if ((self = PyObject_New(oss_mixer_t, &OSSMixerType)) == NULL) { close(fd); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e47bd84bd1..b8151c33b9 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -7930,7 +7930,7 @@ os_openpty_impl(PyModuleDef *module) slave_fd = _Py_open(slave_name, O_RDWR); if (slave_fd < 0) - goto posix_error; + goto error; #else master_fd = open(DEV_PTY_FILE, O_RDWR | O_NOCTTY); /* open master */ @@ -7958,8 +7958,8 @@ os_openpty_impl(PyModuleDef *module) goto posix_error; slave_fd = _Py_open(slave_name, O_RDWR | O_NOCTTY); /* open slave */ - if (slave_fd < 0) - goto posix_error; + if (slave_fd == -1) + goto error; if (_Py_set_inheritable(master_fd, 0, NULL) < 0) goto posix_error; @@ -7977,9 +7977,7 @@ os_openpty_impl(PyModuleDef *module) posix_error: posix_error(); -#if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) error: -#endif if (master_fd != -1) close(master_fd); if (slave_fd != -1) diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index ffaf865df2..ef53067ac4 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -1013,7 +1013,6 @@ newDevPollObject(void) struct pollfd *fds; struct rlimit limit; - Py_BEGIN_ALLOW_THREADS /* ** If we try to process more that getrlimit() ** fds, the kernel will give an error, so @@ -1021,18 +1020,14 @@ newDevPollObject(void) ** value, because we can change rlimit() anytime. */ limit_result = getrlimit(RLIMIT_NOFILE, &limit); - if (limit_result != -1) - fd_devpoll = _Py_open("/dev/poll", O_RDWR); - Py_END_ALLOW_THREADS - if (limit_result == -1) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } - if (fd_devpoll == -1) { - PyErr_SetFromErrnoWithFilename(PyExc_IOError, "/dev/poll"); + + fd_devpoll = _Py_open("/dev/poll", O_RDWR); + if (fd_devpoll == -1) return NULL; - } fds = PyMem_NEW(struct pollfd, limit.rlim_cur); if (fds == NULL) { -- cgit v1.2.1 From b76e79ce344cf60aeeff69c4ca5c96302890ea3c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 18 Mar 2015 01:39:23 +0100 Subject: Issue #23694: Enhance _Py_fopen(), it now raises an exception on error * If fopen() fails, OSError is raised with the original filename object. * The GIL is now released while calling fopen() --- Modules/_ssl.c | 6 ++---- Modules/zipimport.c | 8 ++------ 2 files changed, 4 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 8596225cbf..fb03513d89 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -2941,11 +2941,9 @@ load_dh_params(PySSLContext *self, PyObject *filepath) DH *dh; f = _Py_fopen_obj(filepath, "rb"); - if (f == NULL) { - if (!PyErr_Occurred()) - PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, filepath); + if (f == NULL) return NULL; - } + errno = 0; PySSL_BEGIN_ALLOW_THREADS dh = PEM_read_DHparams(f, NULL, NULL, NULL); diff --git a/Modules/zipimport.c b/Modules/zipimport.c index f2cc245b7d..f5ac10beb0 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -875,7 +875,7 @@ read_directory(PyObject *archive) fp = _Py_fopen_obj(archive, "rb"); if (fp == NULL) { - if (!PyErr_Occurred()) + if (PyErr_ExceptionMatches(PyExc_OSError)) PyErr_Format(ZipImportError, "can't open Zip file: %R", archive); return NULL; } @@ -1073,12 +1073,8 @@ get_data(PyObject *archive, PyObject *toc_entry) } fp = _Py_fopen_obj(archive, "rb"); - if (!fp) { - if (!PyErr_Occurred()) - PyErr_Format(PyExc_IOError, - "zipimport: can not open file %U", archive); + if (!fp) return NULL; - } /* Check to make sure the local file header is correct */ if (fseek(fp, file_offset, 0) == -1) { -- cgit v1.2.1 From 02dd357f7b41d8800e99eac56e8cf9a25f765a7c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 18 Mar 2015 13:56:25 +0100 Subject: Issue #19428: Handle PyMarshal_Read*() errors in run_pyc_file() Detect also earlier PyMarshal_Read*() errors in zipimport. --- Modules/zipimport.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/zipimport.c b/Modules/zipimport.c index f5ac10beb0..e83214c16c 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -939,6 +939,9 @@ read_directory(PyObject *archive) header_size = name_size + PyMarshal_ReadShortFromFile(fp) + PyMarshal_ReadShortFromFile(fp); + if (PyErr_Occurred()) + goto error; + if (fread(dummy, 1, 8, fp) != 8) /* Skip unused fields, avoid fseek */ goto file_error; file_offset = PyMarshal_ReadLongFromFile(fp) + arc_offset; -- cgit v1.2.1 From 10856e49fc06742b8406c0de72dccc70704e7648 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 18 Mar 2015 15:04:34 +0100 Subject: Fix compiler warning in mmapmodule.c (compare signed/unsigned integers) --- Modules/mmapmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 7c4d17f243..d043bb38d6 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -1192,7 +1192,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) return NULL; } map_size = (Py_ssize_t) (st.st_size - offset); - } else if (offset + (size_t)map_size > st.st_size) { + } else if (offset + map_size > st.st_size) { PyErr_SetString(PyExc_ValueError, "mmap length is greater than file size"); return NULL; -- cgit v1.2.1 From ab401006bd13992bf70ebf394f974c20001c2f4f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 18 Mar 2015 21:53:15 +0200 Subject: Removed unintentional trailing spaces in non-external and non-generated C files. --- Modules/_bz2module.c | 2 +- Modules/_io/bufferedio.c | 4 ++-- Modules/_lzmamodule.c | 20 ++++++++++---------- Modules/_sqlite/microprotocols.h | 2 +- Modules/_testbuffer.c | 8 ++++---- Modules/_testcapimodule.c | 2 +- Modules/atexitmodule.c | 8 ++++---- Modules/parsermodule.c | 2 +- Modules/xxlimited.c | 2 +- 9 files changed, 25 insertions(+), 25 deletions(-) (limited to 'Modules') diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index f284cd611d..51da7aeaec 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -666,7 +666,7 @@ _bz2_BZ2Decompressor___init___impl(BZ2Decompressor *self) self->unused_data = PyBytes_FromStringAndSize(NULL, 0); if (self->unused_data == NULL) goto error; - + bzerror = BZ2_bzDecompressInit(&self->bzs, 0, 0); if (catch_bz2_error(bzerror)) goto error; diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 370bb5ec45..358a94dce2 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -1055,7 +1055,7 @@ _buffered_readinto_generic(buffered *self, PyObject *args, char readinto1) } else n = 0; - + if (n == 0 || (n == -2 && written > 0)) break; if (n < 0) { @@ -1065,7 +1065,7 @@ _buffered_readinto_generic(buffered *self, PyObject *args, char readinto1) } goto end; } - + /* At most one read in readinto1 mode */ if (readinto1) { written += n; diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index bae7df6e13..9abdf63c74 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -149,10 +149,10 @@ grow_buffer(PyObject **buf, Py_ssize_t max_length) { Py_ssize_t size = PyBytes_GET_SIZE(*buf); Py_ssize_t newsize = size + (size >> 3) + 6; - + if (max_length > 0 && newsize > max_length) newsize = max_length; - + return _PyBytes_Resize(buf, newsize); } @@ -906,7 +906,7 @@ decompress_buf(Decompressor *d, Py_ssize_t max_length) Py_ssize_t data_size = 0; PyObject *result; lzma_stream *lzs = &d->lzs; - + if (max_length < 0 || max_length >= INITIAL_BUFFER_SIZE) result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); else @@ -916,7 +916,7 @@ decompress_buf(Decompressor *d, Py_ssize_t max_length) lzs->next_out = (uint8_t *)PyBytes_AS_STRING(result); lzs->avail_out = PyBytes_GET_SIZE(result); - + for (;;) { lzma_ret lzret; @@ -947,7 +947,7 @@ decompress_buf(Decompressor *d, Py_ssize_t max_length) goto error; return result; - + error: Py_XDECREF(result); return NULL; @@ -959,11 +959,11 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length) char input_buffer_in_use; PyObject *result; lzma_stream *lzs = &d->lzs; - + /* Prepend unconsumed input if necessary */ if (lzs->next_in != NULL) { size_t avail_now, avail_total; - + /* Number of bytes we can append to input buffer */ avail_now = (d->input_buffer + d->input_buffer_size) - (lzs->next_in + lzs->avail_in); @@ -987,7 +987,7 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length) } d->input_buffer = tmp; d->input_buffer_size = new_size; - + lzs->next_in = d->input_buffer + offset; } else if (avail_now < len) { @@ -1054,7 +1054,7 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length) lzs->next_in = d->input_buffer; } } - + return result; error: @@ -1247,7 +1247,7 @@ Decompressor_dealloc(Decompressor *self) { if(self->input_buffer != NULL) PyMem_Free(self->input_buffer); - + lzma_end(&self->lzs); Py_CLEAR(self->unused_data); #ifdef WITH_THREAD diff --git a/Modules/_sqlite/microprotocols.h b/Modules/_sqlite/microprotocols.h index 3a9944fc79..6941716c4c 100644 --- a/Modules/_sqlite/microprotocols.h +++ b/Modules/_sqlite/microprotocols.h @@ -48,7 +48,7 @@ extern PyObject *pysqlite_microprotocols_adapt( PyObject *obj, PyObject *proto, PyObject *alt); extern PyObject * - pysqlite_adapt(pysqlite_Cursor* self, PyObject *args); + pysqlite_adapt(pysqlite_Cursor* self, PyObject *args); #define pysqlite_adapt_doc \ "adapt(obj, protocol, alternate) -> adapt obj to given protocol. Non-standard." diff --git a/Modules/_testbuffer.c b/Modules/_testbuffer.c index de7b567c69..43db8a8e53 100644 --- a/Modules/_testbuffer.c +++ b/Modules/_testbuffer.c @@ -190,7 +190,7 @@ ndbuf_delete(NDArrayObject *nd, ndbuf_t *elt) elt->prev->next = elt->next; else nd->head = elt->next; - + if (elt->next) elt->next->prev = elt->prev; @@ -767,7 +767,7 @@ out: +-----------------+-----------+-------------+----------------+ | base.readonly | 0 | OK | OK | +-----------------+-----------+-------------+----------------+ - | base.format | NULL | OK | OK | + | base.format | NULL | OK | OK | +-----------------+-----------+-------------+----------------+ | base.ndim | 1 | 1 | OK | +-----------------+-----------+-------------+----------------+ @@ -2018,7 +2018,7 @@ ndarray_get_obj(NDArrayObject *self, void *closure) { Py_buffer *base = &self->head->base; - if (base->obj == NULL) { + if (base->obj == NULL) { Py_RETURN_NONE; } Py_INCREF(base->obj); @@ -2558,7 +2558,7 @@ result: PyBuffer_Release(&v1); PyBuffer_Release(&v2); - ret = equal ? Py_True : Py_False; + ret = equal ? Py_True : Py_False; Py_INCREF(ret); return ret; } diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index a8ce0dc4eb..df35197198 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2476,7 +2476,7 @@ make_memoryview_from_NULL_pointer(PyObject *self) return NULL; return PyMemoryView_FromBuffer(&info); } - + static PyObject * test_from_contiguous(PyObject* self, PyObject *noargs) { diff --git a/Modules/atexitmodule.c b/Modules/atexitmodule.c index 79e9962fc2..739c18836f 100644 --- a/Modules/atexitmodule.c +++ b/Modules/atexitmodule.c @@ -94,7 +94,7 @@ atexit_callfuncs(void) if (exc_type) { Py_DECREF(exc_type); Py_XDECREF(exc_value); - Py_XDECREF(exc_tb); + Py_XDECREF(exc_tb); } PyErr_Fetch(&exc_type, &exc_value, &exc_tb); if (!PyErr_ExceptionMatches(PyExc_SystemExit)) { @@ -147,7 +147,7 @@ atexit_register(PyObject *self, PyObject *args, PyObject *kwargs) if (PyTuple_GET_SIZE(args) == 0) { PyErr_SetString(PyExc_TypeError, "register() takes at least 1 argument (0 given)"); - return NULL; + return NULL; } func = PyTuple_GET_ITEM(args, 0); @@ -159,7 +159,7 @@ atexit_register(PyObject *self, PyObject *args, PyObject *kwargs) new_callback = PyMem_Malloc(sizeof(atexit_callback)); if (new_callback == NULL) - return PyErr_NoMemory(); + return PyErr_NoMemory(); new_callback->args = PyTuple_GetSlice(args, 1, PyTuple_GET_SIZE(args)); if (new_callback->args == NULL) { @@ -336,7 +336,7 @@ PyInit_atexit(void) modstate = GET_ATEXIT_STATE(m); modstate->callback_len = 32; modstate->ncallbacks = 0; - modstate->atexit_callbacks = PyMem_New(atexit_callback*, + modstate->atexit_callbacks = PyMem_New(atexit_callback*, modstate->callback_len); if (modstate->atexit_callbacks == NULL) return NULL; diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 36e9893da8..56ee445338 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -2788,7 +2788,7 @@ validate_argument(node *tree) int nch = NCH(tree); int res = (validate_ntype(tree, argument) && ((nch == 1) || (nch == 2) || (nch == 3))); - if (res) + if (res) res = validate_test(CHILD(tree, 0)); if (res && (nch == 2)) res = validate_comp_for(CHILD(tree, 1)); diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c index eecdab9697..7bfcb911e4 100644 --- a/Modules/xxlimited.c +++ b/Modules/xxlimited.c @@ -169,7 +169,7 @@ xx_roj(PyObject *self, PyObject *args) /* ---------- */ -static PyType_Slot Str_Type_slots[] = { +static PyType_Slot Str_Type_slots[] = { {Py_tp_base, NULL}, /* filled out in module init function */ {0, 0}, }; -- cgit v1.2.1 From 8b1e703abacb20abff238860f30ef73ed498922c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 19 Mar 2015 21:54:09 +0100 Subject: Issue #23646: If time.sleep() is interrupted by a signal, the sleep is now retried with the recomputed delay, except if the signal handler raises an exception (PEP 475). Modify also test_signal to use a monotonic clock instead of the system clock. --- Modules/timemodule.c | 107 +++++++++++++++++++++++++++------------------------ 1 file changed, 56 insertions(+), 51 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 7f5f3149af..179c33fb92 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1386,74 +1386,79 @@ floattime(_Py_clock_info_t *info) static int floatsleep(double secs) { -/* XXX Should test for MS_WINDOWS first! */ -#if defined(HAVE_SELECT) && !defined(__EMX__) - struct timeval t; + _PyTime_timeval deadline, monotonic; +#ifndef MS_WINDOWS + struct timeval timeout; double frac; - int err; - - frac = fmod(secs, 1.0); - secs = floor(secs); - t.tv_sec = (long)secs; - t.tv_usec = (long)(frac*1000000.0); - Py_BEGIN_ALLOW_THREADS - err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &t); - Py_END_ALLOW_THREADS - if (err != 0) { -#ifdef EINTR - if (errno == EINTR) { - if (PyErr_CheckSignals()) - return -1; - } - else + int err = 0; +#else + double millisecs; + unsigned long ul_millis; + DWORD rc; + HANDLE hInterruptEvent; #endif - { + + _PyTime_monotonic(&deadline); + _PyTime_ADD_SECONDS(deadline, secs); + + do { +#ifndef MS_WINDOWS + frac = fmod(secs, 1.0); + secs = floor(secs); + timeout.tv_sec = (long)secs; + timeout.tv_usec = (long)(frac*1000000.0); + + Py_BEGIN_ALLOW_THREADS + err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout); + Py_END_ALLOW_THREADS + + if (err == 0) + break; + + if (errno != EINTR) { PyErr_SetFromErrno(PyExc_OSError); return -1; } - } -#elif defined(__WATCOMC__) && !defined(__QNX__) - /* XXX Can't interrupt this sleep */ - Py_BEGIN_ALLOW_THREADS - delay((int)(secs * 1000 + 0.5)); /* delay() uses milliseconds */ - Py_END_ALLOW_THREADS -#elif defined(MS_WINDOWS) - { - double millisecs = secs * 1000.0; - unsigned long ul_millis; - +#else + millisecs = secs * 1000.0; if (millisecs > (double)ULONG_MAX) { PyErr_SetString(PyExc_OverflowError, "sleep length is too large"); return -1; } - Py_BEGIN_ALLOW_THREADS + /* Allow sleep(0) to maintain win32 semantics, and as decreed * by Guido, only the main thread can be interrupted. */ ul_millis = (unsigned long)millisecs; - if (ul_millis == 0 || !_PyOS_IsMainThread()) - Sleep(ul_millis); - else { - DWORD rc; - HANDLE hInterruptEvent = _PyOS_SigintEvent(); - ResetEvent(hInterruptEvent); - rc = WaitForSingleObjectEx(hInterruptEvent, ul_millis, FALSE); - if (rc == WAIT_OBJECT_0) { - Py_BLOCK_THREADS - errno = EINTR; - PyErr_SetFromErrno(PyExc_OSError); - return -1; - } + if (ul_millis == 0 || !_PyOS_IsMainThread()) { + Py_BEGIN_ALLOW_THREADS + Sleep(0); + Py_END_ALLOW_THREADS + break; } + + hInterruptEvent = _PyOS_SigintEvent(); + ResetEvent(hInterruptEvent); + + Py_BEGIN_ALLOW_THREADS + rc = WaitForSingleObjectEx(hInterruptEvent, ul_millis, FALSE); Py_END_ALLOW_THREADS - } -#else - /* XXX Can't interrupt this sleep */ - Py_BEGIN_ALLOW_THREADS - sleep((int)secs); - Py_END_ALLOW_THREADS + + if (rc != WAIT_OBJECT_0) + break; #endif + /* sleep was interrupted by SIGINT */ + if (PyErr_CheckSignals()) + return -1; + + _PyTime_monotonic(&monotonic); + secs = _PyTime_INTERVAL(monotonic, deadline); + if (secs <= 0.0) + break; + /* retry with the recomputed delay */ + } while (1); + return 0; } -- cgit v1.2.1 From 00471d560c71a73624b8983caf1707ed1610e84d Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 19 Mar 2015 22:53:20 +0100 Subject: Issue #23708: Add _Py_read() and _Py_write() functions to factorize code handle EINTR error and special cases for Windows. These functions now truncate the length to PY_SSIZE_T_MAX to have a portable and reliable behaviour. For example, read() result is undefined if counter is greater than PY_SSIZE_T_MAX on Linux. --- Modules/_io/fileio.c | 142 +++++++++++--------------------------------------- Modules/posixmodule.c | 46 ++-------------- 2 files changed, 36 insertions(+), 152 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 0f226eafbf..6152cde464 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -570,8 +570,8 @@ static PyObject * fileio_readinto(fileio *self, PyObject *args) { Py_buffer pbuf; - Py_ssize_t n, len; - int err, async_err = 0; + Py_ssize_t n; + int err; if (self->fd < 0) return err_closed(); @@ -581,36 +581,16 @@ fileio_readinto(fileio *self, PyObject *args) if (!PyArg_ParseTuple(args, "w*", &pbuf)) return NULL; - if (_PyVerify_fd(self->fd)) { - len = pbuf.len; -#ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; -#endif - - do { - Py_BEGIN_ALLOW_THREADS - errno = 0; -#ifdef MS_WINDOWS - n = read(self->fd, pbuf.buf, (int)len); -#else - n = read(self->fd, pbuf.buf, len); -#endif - Py_END_ALLOW_THREADS - } while (n < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); - - if (async_err) - return NULL; - } else - n = -1; + n = _Py_read(self->fd, pbuf.buf, pbuf.len); + /* copy errno because PyBuffer_Release() can indirectly modify it */ err = errno; PyBuffer_Release(&pbuf); - if (n < 0) { - if (err == EAGAIN) + + if (n == -1) { + if (err == EAGAIN) { + PyErr_Clear(); Py_RETURN_NONE; - errno = err; - PyErr_SetFromErrno(PyExc_IOError); + } return NULL; } @@ -645,9 +625,8 @@ fileio_readall(fileio *self) Py_off_t pos, end; PyObject *result; Py_ssize_t bytes_read = 0; - Py_ssize_t len, n; + Py_ssize_t n; size_t bufsize; - int async_err = 0; if (self->fd < 0) return err_closed(); @@ -695,36 +674,21 @@ fileio_readall(fileio *self) } } - len = bufsize - bytes_read; -#ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; -#endif - do { - Py_BEGIN_ALLOW_THREADS - errno = 0; -#ifdef MS_WINDOWS - n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, (int)len); -#else - n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, len); -#endif - Py_END_ALLOW_THREADS - } while (n < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); + n = _Py_read(self->fd, + PyBytes_AS_STRING(result) + bytes_read, + bufsize - bytes_read); - if (async_err) - return NULL; if (n == 0) break; - if (n < 0) { + if (n == -1) { if (errno == EAGAIN) { + PyErr_Clear(); if (bytes_read > 0) break; Py_DECREF(result); Py_RETURN_NONE; } Py_DECREF(result); - PyErr_SetFromErrno(PyExc_IOError); return NULL; } bytes_read += n; @@ -756,7 +720,6 @@ fileio_read(fileio *self, PyObject *args) char *ptr; Py_ssize_t n; Py_ssize_t size = -1; - int async_err = 0; PyObject *bytes; if (self->fd < 0) @@ -767,44 +730,29 @@ fileio_read(fileio *self, PyObject *args) if (!PyArg_ParseTuple(args, "|O&", &_PyIO_ConvertSsize_t, &size)) return NULL; - if (size < 0) { + if (size < 0) return fileio_readall(self); - } #ifdef MS_WINDOWS + /* On Windows, the count parameter of read() is an int */ if (size > INT_MAX) size = INT_MAX; #endif + bytes = PyBytes_FromStringAndSize(NULL, size); if (bytes == NULL) return NULL; ptr = PyBytes_AS_STRING(bytes); - if (_PyVerify_fd(self->fd)) { - do { - Py_BEGIN_ALLOW_THREADS - errno = 0; -#ifdef MS_WINDOWS - n = read(self->fd, ptr, (int)size); -#else - n = read(self->fd, ptr, size); -#endif - Py_END_ALLOW_THREADS - } while (n < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); - - if (async_err) - return NULL; - } else - n = -1; - - if (n < 0) { + n = _Py_read(self->fd, ptr, size); + if (n == -1) { + /* copy errno because Py_DECREF() can indirectly modify it */ int err = errno; Py_DECREF(bytes); - if (err == EAGAIN) + if (err == EAGAIN) { + PyErr_Clear(); Py_RETURN_NONE; - errno = err; - PyErr_SetFromErrno(PyExc_IOError); + } return NULL; } @@ -822,8 +770,8 @@ static PyObject * fileio_write(fileio *self, PyObject *args) { Py_buffer pbuf; - Py_ssize_t n, len; - int err, async_err = 0; + Py_ssize_t n; + int err; if (self->fd < 0) return err_closed(); @@ -833,44 +781,16 @@ fileio_write(fileio *self, PyObject *args) if (!PyArg_ParseTuple(args, "y*", &pbuf)) return NULL; - if (_PyVerify_fd(self->fd)) { - len = pbuf.len; -#ifdef MS_WINDOWS - if (len > 32767 && isatty(self->fd)) { - /* Issue #11395: the Windows console returns an error (12: not - enough space error) on writing into stdout if stdout mode is - binary and the length is greater than 66,000 bytes (or less, - depending on heap usage). */ - len = 32767; - } else if (len > INT_MAX) - len = INT_MAX; -#endif - - do { - Py_BEGIN_ALLOW_THREADS - errno = 0; -#ifdef MS_WINDOWS - n = write(self->fd, pbuf.buf, (int)len); -#else - n = write(self->fd, pbuf.buf, len); -#endif - Py_END_ALLOW_THREADS - } while (n < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); - - if (async_err) - return NULL; - } else - n = -1; + n = _Py_write(self->fd, pbuf.buf, pbuf.len); + /* copy errno because PyBuffer_Release() can indirectly modify it */ err = errno; - PyBuffer_Release(&pbuf); if (n < 0) { - if (err == EAGAIN) + if (err == EAGAIN) { + PyErr_Clear(); Py_RETURN_NONE; - errno = err; - PyErr_SetFromErrno(PyExc_IOError); + } return NULL; } diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index b8151c33b9..7aa8050aab 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -11207,37 +11207,27 @@ os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length) /*[clinic end generated code: output=1f3bc27260a24968 input=1df2eaa27c0bf1d3]*/ { Py_ssize_t n; - int async_err = 0; PyObject *buffer; if (length < 0) { errno = EINVAL; return posix_error(); } - if (!_PyVerify_fd(fd)) - return posix_error(); #ifdef MS_WINDOWS - #define READ_CAST (int) + /* On Windows, the count parameter of read() is an int */ if (length > INT_MAX) length = INT_MAX; -#else - #define READ_CAST #endif buffer = PyBytes_FromStringAndSize((char *)NULL, length); if (buffer == NULL) return NULL; - do { - Py_BEGIN_ALLOW_THREADS - n = read(fd, PyBytes_AS_STRING(buffer), READ_CAST length); - Py_END_ALLOW_THREADS - } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); - - if (n < 0) { + n = _Py_read(fd, PyBytes_AS_STRING(buffer), length); + if (n == -1) { Py_DECREF(buffer); - return (!async_err) ? posix_error() : NULL; + return NULL; } if (n != length) @@ -11541,33 +11531,7 @@ static Py_ssize_t os_write_impl(PyModuleDef *module, int fd, Py_buffer *data) /*[clinic end generated code: output=aeb96acfdd4d5112 input=3207e28963234f3c]*/ { - Py_ssize_t size; - int async_err = 0; - Py_ssize_t len = data->len; - - if (!_PyVerify_fd(fd)) { - posix_error(); - return -1; - } - - do { - Py_BEGIN_ALLOW_THREADS -#ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - size = write(fd, data->buf, (int)len); -#else - size = write(fd, data->buf, len); -#endif - Py_END_ALLOW_THREADS - } while (size < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); - - if (size < 0) { - if (!async_err) - posix_error(); - return -1; - } - return size; + return _Py_write(fd, data->buf, data->len); } #ifdef HAVE_SENDFILE -- cgit v1.2.1 From 24d59e05262a76b67329b649b6d67b091ab3491f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 19 Mar 2015 23:33:09 +0100 Subject: Issue #23708: select.devpoll now retries its internal write() when interrupted by a signal (EINTR). Modify devpoll_flush() to use _Py_write() instead of calling directly write(). --- Modules/selectmodule.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index ef53067ac4..a65af2ff34 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -718,14 +718,10 @@ static int devpoll_flush(devpollObject *self) size = sizeof(struct pollfd)*self->n_fds; self->n_fds = 0; - Py_BEGIN_ALLOW_THREADS - n = write(self->fd_devpoll, self->fds, size); - Py_END_ALLOW_THREADS - - if (n == -1 ) { - PyErr_SetFromErrno(PyExc_IOError); + n = _Py_write(self->fd_devpoll, self->fds, size); + if (n == -1) return -1; - } + if (n < size) { /* ** Data writed to /dev/poll is a binary data structure. It is not -- cgit v1.2.1 From d90d15a1ae74d1aefd576eb2c18a8035e7683aad Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 Mar 2015 00:27:28 +0100 Subject: Issue #23709: The ossaudiodev module now retries read/write when interrupted by a signal (PEP 475). Use he new _Py_read() and _Py_write() functions. --- Modules/ossaudiodev.c | 50 ++++++++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 28 deletions(-) (limited to 'Modules') diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index 34e68c7ad4..9bc7641e79 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -400,7 +400,6 @@ static PyObject * oss_read(oss_audio_t *self, PyObject *args) { int size, count; - char *cp; PyObject *rv; if (!_is_fd_valid(self->fd)) @@ -408,20 +407,17 @@ oss_read(oss_audio_t *self, PyObject *args) if (!PyArg_ParseTuple(args, "i:read", &size)) return NULL; + rv = PyBytes_FromStringAndSize(NULL, size); if (rv == NULL) return NULL; - cp = PyBytes_AS_STRING(rv); - - Py_BEGIN_ALLOW_THREADS - count = read(self->fd, cp, size); - Py_END_ALLOW_THREADS - if (count < 0) { - PyErr_SetFromErrno(PyExc_IOError); + count = _Py_read(self->fd, PyBytes_AS_STRING(rv), size); + if (count == -1) { Py_DECREF(rv); return NULL; } + self->icount += count; _PyBytes_Resize(&rv, count); return rv; @@ -440,15 +436,11 @@ oss_write(oss_audio_t *self, PyObject *args) return NULL; } - Py_BEGIN_ALLOW_THREADS - rv = write(self->fd, cp, size); - Py_END_ALLOW_THREADS + rv = _Py_write(self->fd, cp, size); + if (rv == -1) + return NULL; - if (rv == -1) { - return PyErr_SetFromErrno(PyExc_IOError); - } else { - self->ocount += rv; - } + self->ocount += rv; return PyLong_FromLong(rv); } @@ -486,24 +478,26 @@ oss_writeall(oss_audio_t *self, PyObject *args) Py_BEGIN_ALLOW_THREADS select_rv = select(self->fd+1, NULL, &write_set_fds, NULL, NULL); Py_END_ALLOW_THREADS - assert(select_rv != 0); /* no timeout, can't expire */ + + assert(select_rv != 0); /* no timeout, can't expire */ if (select_rv == -1) return PyErr_SetFromErrno(PyExc_IOError); - Py_BEGIN_ALLOW_THREADS - rv = write(self->fd, cp, size); - Py_END_ALLOW_THREADS + rv = _Py_write(self->fd, cp, size); if (rv == -1) { - if (errno == EAGAIN) { /* buffer is full, try again */ - errno = 0; + /* buffer is full, try again */ + if (errno == EAGAIN) { + PyErr_Clear(); continue; - } else /* it's a real error */ - return PyErr_SetFromErrno(PyExc_IOError); - } else { /* wrote rv bytes */ - self->ocount += rv; - size -= rv; - cp += rv; + } + /* it's a real error */ + return NULL; } + + /* wrote rv bytes */ + self->ocount += rv; + size -= rv; + cp += rv; } Py_INCREF(Py_None); return Py_None; -- cgit v1.2.1 From 698efefbc45dbd581dbf12fb70ab2fccc62a075e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 Mar 2015 01:42:20 +0100 Subject: Issue #23646: Enhance precision of time.sleep() and socket timeout when interrupted by a signal Add a new _PyTime_AddDouble() function and remove _PyTime_ADD_SECONDS() macro. The _PyTime_ADD_SECONDS only supported an integer number of seconds, the _PyTime_AddDouble() has subsecond resolution. --- Modules/socketmodule.c | 2 +- Modules/timemodule.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 057430b704..480ee5ab4e 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -687,7 +687,7 @@ internal_select(PySocketSockObject *s, int writing) if (has_timeout) { \ _PyTime_monotonic(&now); \ deadline = now; \ - _PyTime_ADD_SECONDS(deadline, s->sock_timeout); \ + _PyTime_AddDouble(&deadline, s->sock_timeout, _PyTime_ROUND_UP); \ } \ while (1) { \ errno = 0; \ diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 179c33fb92..204626e8f7 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1399,14 +1399,14 @@ floatsleep(double secs) #endif _PyTime_monotonic(&deadline); - _PyTime_ADD_SECONDS(deadline, secs); + _PyTime_AddDouble(&deadline, secs, _PyTime_ROUND_UP); do { #ifndef MS_WINDOWS frac = fmod(secs, 1.0); secs = floor(secs); timeout.tv_sec = (long)secs; - timeout.tv_usec = (long)(frac*1000000.0); + timeout.tv_usec = (long)(frac*1e6); Py_BEGIN_ALLOW_THREADS err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout); -- cgit v1.2.1 From b2796dd7b45d0d226b5123e71494e97a1f7cde61 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 Mar 2015 03:06:12 +0100 Subject: Issue #23646: Fix test_threading on Windows --- Modules/timemodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 204626e8f7..0c44d1259b 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1433,7 +1433,7 @@ floatsleep(double secs) ul_millis = (unsigned long)millisecs; if (ul_millis == 0 || !_PyOS_IsMainThread()) { Py_BEGIN_ALLOW_THREADS - Sleep(0); + Sleep(ul_millis); Py_END_ALLOW_THREADS break; } -- cgit v1.2.1 From a1ad450d714ca6aabf0432981c7c88b08d9c8434 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 20 Mar 2015 09:00:36 +0200 Subject: Issue #23001: Few functions in modules mmap, ossaudiodev, socket, ssl, and codecs, that accepted only read-only bytes-like object now accept writable bytes-like object too. --- Modules/_codecsmodule.c | 15 ++++--- Modules/_ssl.c | 8 +++- Modules/mmapmodule.c | 28 ++++++++----- Modules/ossaudiodev.c | 28 +++++++++---- Modules/socketmodule.c | 107 +++++++++++++++++++++++++++--------------------- 5 files changed, 111 insertions(+), 75 deletions(-) (limited to 'Modules') diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index bf408afeca..b9268cec2f 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -208,15 +208,18 @@ static PyObject * escape_decode(PyObject *self, PyObject *args) { + Py_buffer pbuf; const char *errors = NULL; - const char *data; - Py_ssize_t size; + PyObject *result; - if (!PyArg_ParseTuple(args, "s#|z:escape_decode", - &data, &size, &errors)) + if (!PyArg_ParseTuple(args, "s*|z:escape_decode", + &pbuf, &errors)) return NULL; - return codec_tuple(PyBytes_DecodeEscape(data, size, errors, 0, NULL), - size); + result = codec_tuple( + PyBytes_DecodeEscape(pbuf.buf, pbuf.len, errors, 0, NULL), + pbuf.len); + PyBuffer_Release(&pbuf); + return result; } static PyObject * diff --git a/Modules/_ssl.c b/Modules/_ssl.c index fb03513d89..be6fca3c67 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3672,18 +3672,22 @@ static PyTypeObject PySSLMemoryBIO_Type = { static PyObject * PySSL_RAND_add(PyObject *self, PyObject *args) { - char *buf; + Py_buffer view; + const char *buf; Py_ssize_t len, written; double entropy; - if (!PyArg_ParseTuple(args, "s#d:RAND_add", &buf, &len, &entropy)) + if (!PyArg_ParseTuple(args, "s*d:RAND_add", &view, &entropy)) return NULL; + buf = (const char *)view.buf; + len = view.len; do { written = Py_MIN(len, INT_MAX); RAND_add(buf, (int)written, entropy); buf += written; len -= written; } while (len); + PyBuffer_Release(&view); Py_INCREF(Py_None); return Py_None; } diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index d043bb38d6..63e93b730a 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -301,16 +301,17 @@ mmap_gfind(mmap_object *self, { Py_ssize_t start = self->pos; Py_ssize_t end = self->size; - const char *needle; - Py_ssize_t len; + Py_buffer view; CHECK_VALID(NULL); - if (!PyArg_ParseTuple(args, reverse ? "y#|nn:rfind" : "y#|nn:find", - &needle, &len, &start, &end)) { + if (!PyArg_ParseTuple(args, reverse ? "y*|nn:rfind" : "y*|nn:find", + &view, &start, &end)) { return NULL; } else { const char *p, *start_p, *end_p; int sign = reverse ? -1 : 1; + const char *needle = view.buf; + Py_ssize_t len = view.len; if (start < 0) start += self->size; @@ -335,9 +336,11 @@ mmap_gfind(mmap_object *self, for (i = 0; i < len && needle[i] == p[i]; ++i) /* nothing */; if (i == len) { + PyBuffer_Release(&view); return PyLong_FromSsize_t(p - self->data); } } + PyBuffer_Release(&view); return PyLong_FromLong(-1); } } @@ -385,22 +388,25 @@ static PyObject * mmap_write_method(mmap_object *self, PyObject *args) { - Py_ssize_t length; - char *data; + Py_buffer data; CHECK_VALID(NULL); - if (!PyArg_ParseTuple(args, "y#:write", &data, &length)) + if (!PyArg_ParseTuple(args, "y*:write", &data)) return(NULL); - if (!is_writable(self)) + if (!is_writable(self)) { + PyBuffer_Release(&data); return NULL; + } - if ((self->pos + length) > self->size) { + if ((self->pos + data.len) > self->size) { PyErr_SetString(PyExc_ValueError, "data out of range"); + PyBuffer_Release(&data); return NULL; } - memcpy(self->data+self->pos, data, length); - self->pos = self->pos+length; + memcpy(self->data + self->pos, data.buf, data.len); + self->pos = self->pos + data.len; + PyBuffer_Release(&data); Py_INCREF(Py_None); return Py_None; } diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index 9bc7641e79..f6ad216f81 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -426,17 +426,18 @@ oss_read(oss_audio_t *self, PyObject *args) static PyObject * oss_write(oss_audio_t *self, PyObject *args) { - char *cp; - int rv, size; + Py_buffer data; + int rv; if (!_is_fd_valid(self->fd)) return NULL; - if (!PyArg_ParseTuple(args, "y#:write", &cp, &size)) { + if (!PyArg_ParseTuple(args, "y*:write", &data)) { return NULL; } - rv = _Py_write(self->fd, cp, size); + rv = _Py_write(self->fd, data.buf, data.len); + PyBuffer_Release(&data); if (rv == -1) return NULL; @@ -447,8 +448,10 @@ oss_write(oss_audio_t *self, PyObject *args) static PyObject * oss_writeall(oss_audio_t *self, PyObject *args) { - char *cp; - int rv, size; + Py_buffer data; + const char *cp; + Py_ssize_t size; + int rv; fd_set write_set_fds; int select_rv; @@ -462,17 +465,20 @@ oss_writeall(oss_audio_t *self, PyObject *args) if (!_is_fd_valid(self->fd)) return NULL; - if (!PyArg_ParseTuple(args, "y#:write", &cp, &size)) + if (!PyArg_ParseTuple(args, "y*:writeall", &data)) return NULL; if (!_PyIsSelectable_fd(self->fd)) { PyErr_SetString(PyExc_ValueError, "file descriptor out of range for select"); + PyBuffer_Release(&data); return NULL; } /* use select to wait for audio device to be available */ FD_ZERO(&write_set_fds); FD_SET(self->fd, &write_set_fds); + cp = (const char *)data.buf; + size = data.len; while (size > 0) { Py_BEGIN_ALLOW_THREADS @@ -480,10 +486,12 @@ oss_writeall(oss_audio_t *self, PyObject *args) Py_END_ALLOW_THREADS assert(select_rv != 0); /* no timeout, can't expire */ - if (select_rv == -1) + if (select_rv == -1) { + PyBuffer_Release(&data); return PyErr_SetFromErrno(PyExc_IOError); + } - rv = _Py_write(self->fd, cp, size); + rv = _Py_write(self->fd, , cp, Py_MIN(size, INT_MAX)); if (rv == -1) { /* buffer is full, try again */ if (errno == EAGAIN) { @@ -491,6 +499,7 @@ oss_writeall(oss_audio_t *self, PyObject *args) continue; } /* it's a real error */ + PyBuffer_Release(&data); return NULL; } @@ -499,6 +508,7 @@ oss_writeall(oss_audio_t *self, PyObject *args) size -= rv; cp += rv; } + PyBuffer_Release(&data); Py_INCREF(Py_None); return Py_None; } diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 480ee5ab4e..147b48ee0e 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1299,8 +1299,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, case AF_UNIX: { struct sockaddr_un* addr; - char *path; - int len; + Py_buffer path; int retval = 0; /* PEP 383. Not using PyUnicode_FSConverter since we need to @@ -1311,15 +1310,17 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, } else Py_INCREF(args); - if (!PyArg_Parse(args, "y#", &path, &len)) - goto unix_out; - assert(len >= 0); + if (!PyArg_Parse(args, "y*", &path)) { + Py_DECREF(args); + return retval; + } + assert(path.len >= 0); addr = (struct sockaddr_un*)addr_ret; #ifdef linux - if (len > 0 && path[0] == 0) { + if (path.len > 0 && *(const char *)path.buf == 0) { /* Linux abstract namespace extension */ - if ((size_t)len > sizeof addr->sun_path) { + if ((size_t)path.len > sizeof addr->sun_path) { PyErr_SetString(PyExc_OSError, "AF_UNIX path too long"); goto unix_out; @@ -1329,18 +1330,19 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, #endif /* linux */ { /* regular NULL-terminated string */ - if ((size_t)len >= sizeof addr->sun_path) { + if ((size_t)path.len >= sizeof addr->sun_path) { PyErr_SetString(PyExc_OSError, "AF_UNIX path too long"); goto unix_out; } - addr->sun_path[len] = 0; + addr->sun_path[path.len] = 0; } addr->sun_family = s->sock_family; - memcpy(addr->sun_path, path, len); - *len_ret = len + offsetof(struct sockaddr_un, sun_path); + memcpy(addr->sun_path, path.buf, path.len); + *len_ret = path.len + offsetof(struct sockaddr_un, sun_path); retval = 1; unix_out: + PyBuffer_Release(&path); Py_DECREF(args); return retval; } @@ -1562,8 +1564,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, int protoNumber; int hatype = 0; int pkttype = 0; - char *haddr = NULL; - unsigned int halen = 0; + Py_buffer haddr = {NULL, NULL}; if (!PyTuple_Check(args)) { PyErr_Format( @@ -1573,25 +1574,28 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, Py_TYPE(args)->tp_name); return 0; } - if (!PyArg_ParseTuple(args, "si|iiy#", &interfaceName, + if (!PyArg_ParseTuple(args, "si|iiy*", &interfaceName, &protoNumber, &pkttype, &hatype, - &haddr, &halen)) + &haddr)) return 0; strncpy(ifr.ifr_name, interfaceName, sizeof(ifr.ifr_name)); ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0'; if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) { s->errorhandler(); + PyBuffer_Release(&haddr); return 0; } - if (halen > 8) { - PyErr_SetString(PyExc_ValueError, - "Hardware address must be 8 bytes or less"); - return 0; + if (haddr.buf && haddr.len > 8) { + PyErr_SetString(PyExc_ValueError, + "Hardware address must be 8 bytes or less"); + PyBuffer_Release(&haddr); + return 0; } if (protoNumber < 0 || protoNumber > 0xffff) { PyErr_SetString( PyExc_OverflowError, "getsockaddrarg: protoNumber must be 0-65535."); + PyBuffer_Release(&haddr); return 0; } addr = (struct sockaddr_ll*)addr_ret; @@ -1600,11 +1604,14 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, addr->sll_ifindex = ifr.ifr_ifindex; addr->sll_pkttype = pkttype; addr->sll_hatype = hatype; - if (halen != 0) { - memcpy(&addr->sll_addr, haddr, halen); + if (haddr.buf) { + memcpy(&addr->sll_addr, haddr.buf, haddr.len); + addr->sll_halen = haddr.len; } - addr->sll_halen = halen; + else + addr->sll_halen = 0; *len_ret = sizeof *addr; + PyBuffer_Release(&haddr); return 1; } #endif @@ -2230,22 +2237,21 @@ sock_setsockopt(PySocketSockObject *s, PyObject *args) int level; int optname; int res; - char *buf; - int buflen; + Py_buffer optval; int flag; if (PyArg_ParseTuple(args, "iii:setsockopt", &level, &optname, &flag)) { - buf = (char *) &flag; - buflen = sizeof flag; + res = setsockopt(s->sock_fd, level, optname, &flag, sizeof flag); } else { PyErr_Clear(); - if (!PyArg_ParseTuple(args, "iiy#:setsockopt", - &level, &optname, &buf, &buflen)) + if (!PyArg_ParseTuple(args, "iiy*:setsockopt", + &level, &optname, &optval)) return NULL; + res = setsockopt(s->sock_fd, level, optname, optval.buf, optval.len); + PyBuffer_Release(&optval); } - res = setsockopt(s->sock_fd, level, optname, (void *)buf, buflen); if (res < 0) return s->errorhandler(); Py_INCREF(Py_None); @@ -5037,21 +5043,22 @@ Convert an IP address from 32-bit packed binary format to string format"); static PyObject* socket_inet_ntoa(PyObject *self, PyObject *args) { - char *packed_str; - int addr_len; + Py_buffer packed_ip; struct in_addr packed_addr; - if (!PyArg_ParseTuple(args, "y#:inet_ntoa", &packed_str, &addr_len)) { + if (!PyArg_ParseTuple(args, "y*:inet_ntoa", &packed_ip)) { return NULL; } - if (addr_len != sizeof(packed_addr)) { + if (packed_ip.len != sizeof(packed_addr)) { PyErr_SetString(PyExc_OSError, "packed IP wrong length for inet_ntoa"); + PyBuffer_Release(&packed_ip); return NULL; } - memcpy(&packed_addr, packed_str, addr_len); + memcpy(&packed_addr, packed_ip.buf, packed_ip.len); + PyBuffer_Release(&packed_ip); return PyUnicode_FromString(inet_ntoa(packed_addr)); } @@ -5162,8 +5169,7 @@ static PyObject * socket_inet_ntop(PyObject *self, PyObject *args) { int af; - char* packed; - int len; + Py_buffer packed_ip; const char* retval; #ifdef ENABLE_IPV6 char ip[Py_MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) + 1]; @@ -5174,31 +5180,35 @@ socket_inet_ntop(PyObject *self, PyObject *args) /* Guarantee NUL-termination for PyUnicode_FromString() below */ memset((void *) &ip[0], '\0', sizeof(ip)); - if (!PyArg_ParseTuple(args, "iy#:inet_ntop", &af, &packed, &len)) { + if (!PyArg_ParseTuple(args, "iy*:inet_ntop", &af, &packed_ip)) { return NULL; } if (af == AF_INET) { - if (len != sizeof(struct in_addr)) { + if (packed_ip.len != sizeof(struct in_addr)) { PyErr_SetString(PyExc_ValueError, "invalid length of packed IP address string"); + PyBuffer_Release(&packed_ip); return NULL; } #ifdef ENABLE_IPV6 } else if (af == AF_INET6) { - if (len != sizeof(struct in6_addr)) { + if (packed_ip.len != sizeof(struct in6_addr)) { PyErr_SetString(PyExc_ValueError, "invalid length of packed IP address string"); + PyBuffer_Release(&packed_ip); return NULL; } #endif } else { PyErr_Format(PyExc_ValueError, "unknown address family %d", af); + PyBuffer_Release(&packed_ip); return NULL; } - retval = inet_ntop(af, packed, ip, sizeof(ip)); + retval = inet_ntop(af, packed_ip.buf, ip, sizeof(ip)); + PyBuffer_Release(&packed_ip); if (!retval) { PyErr_SetFromErrno(PyExc_OSError); return NULL; @@ -5217,8 +5227,7 @@ static PyObject * socket_inet_ntop(PyObject *self, PyObject *args) { int af; - char* packed; - int len; + Py_buffer packed_ip; struct sockaddr_in6 addr; DWORD addrlen, ret, retlen; #ifdef ENABLE_IPV6 @@ -5230,38 +5239,42 @@ socket_inet_ntop(PyObject *self, PyObject *args) /* Guarantee NUL-termination for PyUnicode_FromString() below */ memset((void *) &ip[0], '\0', sizeof(ip)); - if (!PyArg_ParseTuple(args, "iy#:inet_ntop", &af, &packed, &len)) { + if (!PyArg_ParseTuple(args, "iy*:inet_ntop", &af, &packed_ip)) { return NULL; } if (af == AF_INET) { struct sockaddr_in * addr4 = (struct sockaddr_in *)&addr; - if (len != sizeof(struct in_addr)) { + if (packed_ip.len != sizeof(struct in_addr)) { PyErr_SetString(PyExc_ValueError, "invalid length of packed IP address string"); + PyBuffer_Release(&packed_ip); return NULL; } memset(addr4, 0, sizeof(struct sockaddr_in)); addr4->sin_family = AF_INET; - memcpy(&(addr4->sin_addr), packed, sizeof(addr4->sin_addr)); + memcpy(&(addr4->sin_addr), packed_ip.buf, sizeof(addr4->sin_addr)); addrlen = sizeof(struct sockaddr_in); } else if (af == AF_INET6) { - if (len != sizeof(struct in6_addr)) { + if (packed_ip.len != sizeof(struct in6_addr)) { PyErr_SetString(PyExc_ValueError, "invalid length of packed IP address string"); + PyBuffer_Release(&packed_ip); return NULL; } memset(&addr, 0, sizeof(addr)); addr.sin6_family = AF_INET6; - memcpy(&(addr.sin6_addr), packed, sizeof(addr.sin6_addr)); + memcpy(&(addr.sin6_addr), packed_ip.buf, sizeof(addr.sin6_addr)); addrlen = sizeof(addr); } else { PyErr_Format(PyExc_ValueError, "unknown address family %d", af); + PyBuffer_Release(&packed_ip); return NULL; } + PyBuffer_Release(&packed_ip); retlen = sizeof(ip); ret = WSAAddressToStringA((struct sockaddr*)&addr, addrlen, NULL, -- cgit v1.2.1 From 19d88fe3c8e8a4614d4506470712a5cac6cf351d Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 Mar 2015 10:24:18 +0100 Subject: Issue #23001: Fix typo --- Modules/ossaudiodev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index f6ad216f81..3d1f18083d 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -491,7 +491,7 @@ oss_writeall(oss_audio_t *self, PyObject *args) return PyErr_SetFromErrno(PyExc_IOError); } - rv = _Py_write(self->fd, , cp, Py_MIN(size, INT_MAX)); + rv = _Py_write(self->fd, cp, Py_MIN(size, INT_MAX)); if (rv == -1) { /* buffer is full, try again */ if (errno == EAGAIN) { -- cgit v1.2.1 From 528bacb20998535f2db77743e5a367e13fbd3d48 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 Mar 2015 10:37:34 +0100 Subject: Issue #23709, #23001: ossaudiodev now uses Py_ssize_t for sizes instead of int The module is now also "SSIZE_T clean" (for PyArg_Parse...() functions) since it switched to Py_buffer ("y*" argument format). --- Modules/ossaudiodev.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index 3d1f18083d..d2fd5c81d1 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -19,6 +19,7 @@ * $Id$ */ +#define PY_SSIZE_T_CLEAN #include "Python.h" #include "structmember.h" @@ -51,8 +52,8 @@ typedef struct { char *devicename; /* name of the device file */ int fd; /* file descriptor */ int mode; /* file mode (O_RDONLY, etc.) */ - int icount; /* input count */ - int ocount; /* output count */ + Py_ssize_t icount; /* input count */ + Py_ssize_t ocount; /* output count */ uint32_t afmts; /* audio formats supported by hardware */ } oss_audio_t; @@ -399,13 +400,13 @@ oss_post(oss_audio_t *self, PyObject *args) static PyObject * oss_read(oss_audio_t *self, PyObject *args) { - int size, count; + Py_ssize_t size, count; PyObject *rv; if (!_is_fd_valid(self->fd)) return NULL; - if (!PyArg_ParseTuple(args, "i:read", &size)) + if (!PyArg_ParseTuple(args, "n:read", &size)) return NULL; rv = PyBytes_FromStringAndSize(NULL, size); @@ -427,7 +428,7 @@ static PyObject * oss_write(oss_audio_t *self, PyObject *args) { Py_buffer data; - int rv; + Py_ssize_t rv; if (!_is_fd_valid(self->fd)) return NULL; @@ -451,7 +452,7 @@ oss_writeall(oss_audio_t *self, PyObject *args) Py_buffer data; const char *cp; Py_ssize_t size; - int rv; + Py_ssize_t rv; fd_set write_set_fds; int select_rv; -- cgit v1.2.1 From 8577ee05bb77665efc65873ccd2bfe054db6d98d Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 Mar 2015 10:52:25 +0100 Subject: Issue #23696: Chain ZipImportError to the OSError --- Modules/zipimport.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/zipimport.c b/Modules/zipimport.c index e83214c16c..38dc0c4290 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -875,8 +875,12 @@ read_directory(PyObject *archive) fp = _Py_fopen_obj(archive, "rb"); if (fp == NULL) { - if (PyErr_ExceptionMatches(PyExc_OSError)) + if (PyErr_ExceptionMatches(PyExc_OSError)) { + PyObject *exc, *val, *tb; + PyErr_Fetch(&exc, &val, &tb); PyErr_Format(ZipImportError, "can't open Zip file: %R", archive); + _PyErr_ChainExceptions(exc, val, tb); + } return NULL; } -- cgit v1.2.1 From 8c2d76f34e5bad494f32a7b161348bc94c874779 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 Mar 2015 11:32:24 +0100 Subject: Fix compiler warnings: comparison between signed and unsigned numbers --- Modules/socketmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 147b48ee0e..8cf6140145 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1738,7 +1738,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, return 0; } - if (PyBytes_GET_SIZE(ctl_name) > sizeof(info.ctl_name)) { + if (PyBytes_GET_SIZE(ctl_name) > (Py_ssize_t)sizeof(info.ctl_name)) { PyErr_SetString(PyExc_ValueError, "provided string is too long"); Py_DECREF(ctl_name); -- cgit v1.2.1 From 00bf91c809a4b4eb691c210b37c392b963adaf63 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 Mar 2015 12:54:28 +0100 Subject: Issue #23715: signal.sigwaitinfo() and signal.sigtimedwait() are now retried when interrupted by a signal not in the *sigset* parameter, if the signal handler does not raise an exception. signal.sigtimedwait() recomputes the timeout with a monotonic clock when it is retried. Remove test_signal.test_sigwaitinfo_interrupted() because sigwaitinfo() doesn't raise InterruptedError anymore if it is interrupted by a signal not in its sigset parameter. --- Modules/signalmodule.c | 73 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 26 deletions(-) (limited to 'Modules') diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 3ad8ebb8cd..5dba8b1fd3 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -934,6 +934,7 @@ signal_sigwaitinfo(PyObject *self, PyObject *args) sigset_t set; siginfo_t si; int err; + int async_err = 0; if (!PyArg_ParseTuple(args, "O:sigwaitinfo", &signals)) return NULL; @@ -941,11 +942,14 @@ signal_sigwaitinfo(PyObject *self, PyObject *args) if (iterable_to_sigset(signals, &set)) return NULL; - Py_BEGIN_ALLOW_THREADS - err = sigwaitinfo(&set, &si); - Py_END_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS + err = sigwaitinfo(&set, &si); + Py_END_ALLOW_THREADS + } while (err == -1 + && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (err == -1) - return PyErr_SetFromErrno(PyExc_OSError); + return (!async_err) ? PyErr_SetFromErrno(PyExc_OSError) : NULL; return fill_siginfo(&si); } @@ -962,25 +966,19 @@ Returns a struct_siginfo containing information about the signal."); static PyObject * signal_sigtimedwait(PyObject *self, PyObject *args) { - PyObject *signals, *timeout; - struct timespec buf; + PyObject *signals; + double timeout, frac; + struct timespec ts; sigset_t set; siginfo_t si; - time_t tv_sec; - long tv_nsec; - int err; + int res; + _PyTime_timeval deadline, monotonic; - if (!PyArg_ParseTuple(args, "OO:sigtimedwait", + if (!PyArg_ParseTuple(args, "Od:sigtimedwait", &signals, &timeout)) return NULL; - if (_PyTime_ObjectToTimespec(timeout, &tv_sec, &tv_nsec, - _PyTime_ROUND_DOWN) == -1) - return NULL; - buf.tv_sec = tv_sec; - buf.tv_nsec = tv_nsec; - - if (buf.tv_sec < 0 || buf.tv_nsec < 0) { + if (timeout < 0) { PyErr_SetString(PyExc_ValueError, "timeout must be non-negative"); return NULL; } @@ -988,15 +986,38 @@ signal_sigtimedwait(PyObject *self, PyObject *args) if (iterable_to_sigset(signals, &set)) return NULL; - Py_BEGIN_ALLOW_THREADS - err = sigtimedwait(&set, &si, &buf); - Py_END_ALLOW_THREADS - if (err == -1) { - if (errno == EAGAIN) - Py_RETURN_NONE; - else - return PyErr_SetFromErrno(PyExc_OSError); - } + _PyTime_monotonic(&deadline); + _PyTime_AddDouble(&deadline, timeout, _PyTime_ROUND_UP); + + do { + frac = fmod(timeout, 1.0); + timeout = floor(timeout); + ts.tv_sec = (long)timeout; + ts.tv_nsec = (long)(frac*1e9); + + Py_BEGIN_ALLOW_THREADS + res = sigtimedwait(&set, &si, &ts); + Py_END_ALLOW_THREADS + + if (res != -1) + break; + + if (errno != EINTR) { + if (errno == EAGAIN) + Py_RETURN_NONE; + else + return PyErr_SetFromErrno(PyExc_OSError); + } + + /* sigtimedwait() was interrupted by a signal (EINTR) */ + if (PyErr_CheckSignals()) + return NULL; + + _PyTime_monotonic(&monotonic); + timeout = _PyTime_INTERVAL(monotonic, deadline); + if (timeout <= 0.0) + break; + } while (1); return fill_siginfo(&si); } -- cgit v1.2.1 From 9a2693f18fb0f73e0a832d6d8861d19c63652f6b Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 20 Mar 2015 20:04:21 +0200 Subject: Issue #22832: Tweaked parameter names for fcntl module to better match official POSIX documentation. Updated the documenttion for Python 3. Patch by Alex Shkop. --- Modules/clinic/fcntlmodule.c.h | 35 +++++++++++++++--------------- Modules/fcntlmodule.c | 49 +++++++++++++++++++++--------------------- 2 files changed, 41 insertions(+), 43 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/fcntlmodule.c.h b/Modules/clinic/fcntlmodule.c.h index 377e55d8c5..d2c36bab56 100644 --- a/Modules/clinic/fcntlmodule.c.h +++ b/Modules/clinic/fcntlmodule.c.h @@ -3,12 +3,12 @@ preserve [clinic start generated code]*/ PyDoc_STRVAR(fcntl_fcntl__doc__, -"fcntl($module, fd, code, arg=None, /)\n" +"fcntl($module, fd, cmd, arg=0, /)\n" "--\n" "\n" -"Perform the operation `code` on file descriptor fd.\n" +"Perform the operation `cmd` on file descriptor fd.\n" "\n" -"The values used for `code` are operating system dependent, and are available\n" +"The values used for `cmd` are operating system dependent, and are available\n" "as constants in the fcntl module, using the same names as used in\n" "the relevant C header files. The argument arg is optional, and\n" "defaults to 0; it may be an int or a string. If arg is given as a string,\n" @@ -43,13 +43,13 @@ exit: } PyDoc_STRVAR(fcntl_ioctl__doc__, -"ioctl($module, fd, op, arg=None, mutate_flag=True, /)\n" +"ioctl($module, fd, request, arg=0, mutate_flag=True, /)\n" "--\n" "\n" -"Perform the operation op on file descriptor fd.\n" +"Perform the operation `request` on file descriptor `fd`.\n" "\n" -"The values used for op are operating system dependent, and are available as\n" -"constants in the fcntl or termios library modules, using the same names as\n" +"The values used for `request` are operating system dependent, and are available\n" +"as constants in the fcntl or termios library modules, using the same names as\n" "used in the relevant C header files.\n" "\n" "The argument `arg` is optional, and defaults to 0; it may be an int or a\n" @@ -62,9 +62,8 @@ PyDoc_STRVAR(fcntl_ioctl__doc__, "returned. The return value is the integer returned by the ioctl system\n" "call.\n" "\n" -"If the argument is a mutable buffer and the mutable_flag argument is not\n" -"passed or is false, the behavior is as if a string had been passed. This\n" -"behavior will change in future releases of Python.\n" +"If the argument is a mutable buffer and the mutable_flag argument is false,\n" +"the behavior is as if a string had been passed.\n" "\n" "If the argument is an immutable buffer (most likely a string) then a copy\n" "of the buffer is passed to the operating system and the return value is a\n" @@ -102,10 +101,10 @@ exit: } PyDoc_STRVAR(fcntl_flock__doc__, -"flock($module, fd, code, /)\n" +"flock($module, fd, operation, /)\n" "--\n" "\n" -"Perform the lock operation op on file descriptor fd.\n" +"Perform the lock operation `operation` on file descriptor `fd`.\n" "\n" "See the Unix manual page for flock(2) for details (On some systems, this\n" "function is emulated using fcntl())."); @@ -134,12 +133,12 @@ exit: } PyDoc_STRVAR(fcntl_lockf__doc__, -"lockf($module, fd, code, lenobj=None, startobj=None, whence=0, /)\n" +"lockf($module, fd, cmd, len=0, start=0, whence=0, /)\n" "--\n" "\n" "A wrapper around the fcntl() locking calls.\n" "\n" -"fd is the file descriptor of the file to lock or unlock, and operation is one\n" +"`fd` is the file descriptor of the file to lock or unlock, and operation is one\n" "of the following values:\n" "\n" " LOCK_UN - unlock\n" @@ -152,9 +151,9 @@ PyDoc_STRVAR(fcntl_lockf__doc__, "have an errno attribute set to EACCES or EAGAIN (depending on the operating\n" "system -- for portability, check for either value).\n" "\n" -"length is the number of bytes to lock, with the default meaning to lock to\n" -"EOF. start is the byte offset, relative to whence, to that the lock\n" -"starts. whence is as with fileobj.seek(), specifically:\n" +"`len` is the number of bytes to lock, with the default meaning to lock to\n" +"EOF. `start` is the byte offset, relative to `whence`, to that the lock\n" +"starts. `whence` is as with fileobj.seek(), specifically:\n" "\n" " 0 - relative to the start of the file (SEEK_SET)\n" " 1 - relative to the current buffer position (SEEK_CUR)\n" @@ -185,4 +184,4 @@ fcntl_lockf(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=84bdde73a92f7c61 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ec482672292aab0c input=a9049054013a1b77]*/ diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c index 780e2222c5..3cea1519de 100644 --- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -39,13 +39,13 @@ conv_descriptor(PyObject *object, int *target) fcntl.fcntl fd: object(type='int', converter='conv_descriptor') - code: int - arg: object = NULL + cmd as code: int + arg: object(c_default='NULL') = 0 / -Perform the operation `code` on file descriptor fd. +Perform the operation `cmd` on file descriptor fd. -The values used for `code` are operating system dependent, and are available +The values used for `cmd` are operating system dependent, and are available as constants in the fcntl module, using the same names as used in the relevant C header files. The argument arg is optional, and defaults to 0; it may be an int or a string. If arg is given as a string, @@ -58,7 +58,7 @@ corresponding to the return value of the fcntl call in the C code. static PyObject * fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg) -/*[clinic end generated code: output=afc5bfa74a03ef0d input=4850c13a41e86930]*/ +/*[clinic end generated code: output=afc5bfa74a03ef0d input=8cefbe59b29efbe2]*/ { unsigned int int_arg = 0; int ret; @@ -111,15 +111,15 @@ fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg) fcntl.ioctl fd: object(type='int', converter='conv_descriptor') - op as code: unsigned_int(bitwise=True) - arg as ob_arg: object = NULL + request as code: unsigned_int(bitwise=True) + arg as ob_arg: object(c_default='NULL') = 0 mutate_flag as mutate_arg: bool = True / -Perform the operation op on file descriptor fd. +Perform the operation `request` on file descriptor `fd`. -The values used for op are operating system dependent, and are available as -constants in the fcntl or termios library modules, using the same names as +The values used for `request` are operating system dependent, and are available +as constants in the fcntl or termios library modules, using the same names as used in the relevant C header files. The argument `arg` is optional, and defaults to 0; it may be an int or a @@ -132,9 +132,8 @@ the OS will be reflected in the contents of the buffer after the call has returned. The return value is the integer returned by the ioctl system call. -If the argument is a mutable buffer and the mutable_flag argument is not -passed or is false, the behavior is as if a string had been passed. This -behavior will change in future releases of Python. +If the argument is a mutable buffer and the mutable_flag argument is false, +the behavior is as if a string had been passed. If the argument is an immutable buffer (most likely a string) then a copy of the buffer is passed to the operating system and the return value is a @@ -149,7 +148,7 @@ code. static PyObject * fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg) -/*[clinic end generated code: output=ad47738c118622bf input=a55a6ee8e494c449]*/ +/*[clinic end generated code: output=ad47738c118622bf input=ede70c433cccbbb2]*/ { #define IOCTL_BUFSZ 1024 /* We use the unsigned non-checked 'I' format for the 'code' parameter @@ -270,10 +269,10 @@ fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, PyObject *ob_ar fcntl.flock fd: object(type='int', converter='conv_descriptor') - code: int + operation as code: int / -Perform the lock operation op on file descriptor fd. +Perform the lock operation `operation` on file descriptor `fd`. See the Unix manual page for flock(2) for details (On some systems, this function is emulated using fcntl()). @@ -281,7 +280,7 @@ function is emulated using fcntl()). static PyObject * fcntl_flock_impl(PyModuleDef *module, int fd, int code) -/*[clinic end generated code: output=c9035133a7dbfc96 input=b762aa9448d05e43]*/ +/*[clinic end generated code: output=c9035133a7dbfc96 input=b70a0a41ca22a8a0]*/ { int ret; @@ -328,15 +327,15 @@ fcntl_flock_impl(PyModuleDef *module, int fd, int code) fcntl.lockf fd: object(type='int', converter='conv_descriptor') - code: int - lenobj: object = NULL - startobj: object = NULL + cmd as code: int + len as lenobj: object(c_default='NULL') = 0 + start as startobj: object(c_default='NULL') = 0 whence: int = 0 / A wrapper around the fcntl() locking calls. -fd is the file descriptor of the file to lock or unlock, and operation is one +`fd` is the file descriptor of the file to lock or unlock, and operation is one of the following values: LOCK_UN - unlock @@ -349,9 +348,9 @@ lock cannot be acquired, an IOError will be raised and the exception will have an errno attribute set to EACCES or EAGAIN (depending on the operating system -- for portability, check for either value). -length is the number of bytes to lock, with the default meaning to lock to -EOF. start is the byte offset, relative to whence, to that the lock -starts. whence is as with fileobj.seek(), specifically: +`len` is the number of bytes to lock, with the default meaning to lock to +EOF. `start` is the byte offset, relative to `whence`, to that the lock +starts. `whence` is as with fileobj.seek(), specifically: 0 - relative to the start of the file (SEEK_SET) 1 - relative to the current buffer position (SEEK_CUR) @@ -360,7 +359,7 @@ starts. whence is as with fileobj.seek(), specifically: static PyObject * fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence) -/*[clinic end generated code: output=5536df2892bf3ce9 input=44856fa06db36184]*/ +/*[clinic end generated code: output=5536df2892bf3ce9 input=9c594391de821f24]*/ { int ret; -- cgit v1.2.1 From 7bdca66496762347ea75cf102b1fe1a1ce112dfa Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 20 Mar 2015 16:38:56 -0700 Subject: Issue 23705: Improve the performance of __contains__ checks for deques. --- Modules/_collectionsmodule.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index d4794be08f..26a0c8ff6c 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -724,6 +724,38 @@ deque_count(dequeobject *deque, PyObject *v) PyDoc_STRVAR(count_doc, "D.count(value) -> integer -- return number of occurrences of value"); +static int +deque_contains(dequeobject *deque, PyObject *v) +{ + block *b = deque->leftblock; + Py_ssize_t index = deque->leftindex; + Py_ssize_t n = Py_SIZE(deque); + Py_ssize_t i; + size_t start_state = deque->state; + PyObject *item; + int cmp; + + for (i=0 ; idata[index]; + cmp = PyObject_RichCompareBool(item, v, Py_EQ); + if (cmp) { + return cmp; + } + if (start_state != deque->state) { + PyErr_SetString(PyExc_RuntimeError, + "deque mutated during iteration"); + return -1; + } + index++; + if (index == BLOCKLEN) { + b = b->rightlink; + index = 0; + } + } + return 0; +} + static Py_ssize_t deque_len(dequeobject *deque) { @@ -1154,7 +1186,7 @@ static PySequenceMethods deque_as_sequence = { 0, /* sq_slice */ (ssizeobjargproc)deque_ass_item, /* sq_ass_item */ 0, /* sq_ass_slice */ - 0, /* sq_contains */ + (objobjproc)deque_contains, /* sq_contains */ (binaryfunc)deque_inplace_concat, /* sq_inplace_concat */ 0, /* sq_inplace_repeat */ -- cgit v1.2.1 From 3d3148af63c3674e8dfa443d464103866bfeb028 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 21 Mar 2015 01:37:37 -0700 Subject: Issue 23704: Add index(), copy(), and insert() to deques. Register deques as a MutableSequence. --- Modules/_collectionsmodule.c | 91 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 26a0c8ff6c..223ad53193 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -762,6 +762,91 @@ deque_len(dequeobject *deque) return Py_SIZE(deque); } +static PyObject * +deque_index(dequeobject *deque, PyObject *args) +{ + Py_ssize_t i, start=0, stop=Py_SIZE(deque); + PyObject *v, *item; + block *b = deque->leftblock; + Py_ssize_t index = deque->leftindex; + size_t start_state = deque->state; + + if (!PyArg_ParseTuple(args, "O|O&O&:index", &v, + _PyEval_SliceIndex, &start, + _PyEval_SliceIndex, &stop)) + return NULL; + if (start < 0) { + start += Py_SIZE(deque); + if (start < 0) + start = 0; + } + if (stop < 0) { + stop += Py_SIZE(deque); + if (stop < 0) + stop = 0; + } + + for (i=0 ; i= start) { + int cmp; + CHECK_NOT_END(b); + item = b->data[index]; + cmp = PyObject_RichCompareBool(item, v, Py_EQ); + if (cmp > 0) + return PyLong_FromSsize_t(i); + else if (cmp < 0) + return NULL; + if (start_state != deque->state) { + PyErr_SetString(PyExc_RuntimeError, + "deque mutated during iteration"); + return NULL; + } + } + index++; + if (index == BLOCKLEN) { + b = b->rightlink; + index = 0; + } + } + PyErr_Format(PyExc_ValueError, "%R is not in deque", v); + return NULL; +} + +PyDoc_STRVAR(index_doc, +"D.index(value, [start, [stop]]) -> integer -- return first index of value.\n" +"Raises ValueError if the value is not present."); + +static PyObject * +deque_insert(dequeobject *deque, PyObject *args) +{ + Py_ssize_t index; + Py_ssize_t n = Py_SIZE(deque); + PyObject *value; + PyObject *rv; + + if (!PyArg_ParseTuple(args, "nO:insert", &index, &value)) + return NULL; + if (index >= n) + return deque_append(deque, value); + if (index <= -n || index == 0) + return deque_appendleft(deque, value); + if (_deque_rotate(deque, -index)) + return NULL; + if (index < 0) + rv = deque_append(deque, value); + else + rv = deque_appendleft(deque, value); + if (rv == NULL) + return NULL; + Py_DECREF(rv); + if (_deque_rotate(deque, index)) + return NULL; + Py_RETURN_NONE; +} + +PyDoc_STRVAR(insert_doc, +"D.insert(index, object) -- insert object before index"); + static PyObject * deque_remove(dequeobject *deque, PyObject *value) { @@ -1208,12 +1293,18 @@ static PyMethodDef deque_methods[] = { METH_NOARGS, clear_doc}, {"__copy__", (PyCFunction)deque_copy, METH_NOARGS, copy_doc}, + {"copy", (PyCFunction)deque_copy, + METH_NOARGS, copy_doc}, {"count", (PyCFunction)deque_count, METH_O, count_doc}, {"extend", (PyCFunction)deque_extend, METH_O, extend_doc}, {"extendleft", (PyCFunction)deque_extendleft, METH_O, extendleft_doc}, + {"index", (PyCFunction)deque_index, + METH_VARARGS, index_doc}, + {"insert", (PyCFunction)deque_insert, + METH_VARARGS, insert_doc}, {"pop", (PyCFunction)deque_pop, METH_NOARGS, pop_doc}, {"popleft", (PyCFunction)deque_popleft, -- cgit v1.2.1 From 66e13076c6c490a35225cb1819d3d44a1fc777ec Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 21 Mar 2015 01:42:10 -0700 Subject: Fix minor formatting nits and remove unnecessary comment. --- Modules/_collectionsmodule.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 223ad53193..7d7f0cfc03 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -64,7 +64,7 @@ typedef struct { Py_ssize_t rightindex; /* in range(BLOCKLEN) */ size_t state; /* incremented whenever the indices move */ Py_ssize_t maxlen; - PyObject *weakreflist; /* List of weak references */ + PyObject *weakreflist; } dequeobject; static PyTypeObject deque_type; @@ -1274,7 +1274,6 @@ static PySequenceMethods deque_as_sequence = { (objobjproc)deque_contains, /* sq_contains */ (binaryfunc)deque_inplace_concat, /* sq_inplace_concat */ 0, /* sq_inplace_repeat */ - }; /* deque object ********************************************************/ @@ -1296,7 +1295,7 @@ static PyMethodDef deque_methods[] = { {"copy", (PyCFunction)deque_copy, METH_NOARGS, copy_doc}, {"count", (PyCFunction)deque_count, - METH_O, count_doc}, + METH_O, count_doc}, {"extend", (PyCFunction)deque_extend, METH_O, extend_doc}, {"extendleft", (PyCFunction)deque_extendleft, @@ -1309,7 +1308,7 @@ static PyMethodDef deque_methods[] = { METH_NOARGS, pop_doc}, {"popleft", (PyCFunction)deque_popleft, METH_NOARGS, popleft_doc}, - {"__reduce__", (PyCFunction)deque_reduce, + {"__reduce__", (PyCFunction)deque_reduce, METH_NOARGS, reduce_doc}, {"remove", (PyCFunction)deque_remove, METH_O, remove_doc}, -- cgit v1.2.1 From dfa75c3aa5dcc43bdda6b520b148ee048660f08f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 21 Mar 2015 01:53:16 -0700 Subject: For safety, wait to decref deleted values until the deque state has been restored. --- Modules/_collectionsmodule.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 7d7f0cfc03..28aacc3317 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -864,9 +864,9 @@ deque_remove(dequeobject *deque, PyObject *value) if (cmp > 0) { PyObject *tgt = deque_popleft(deque, NULL); assert (tgt != NULL); - Py_DECREF(tgt); if (_deque_rotate(deque, i) == -1) return NULL; + Py_DECREF(tgt); Py_RETURN_NONE; } else if (cmp < 0) { @@ -956,16 +956,16 @@ static int deque_del_item(dequeobject *deque, Py_ssize_t i) { PyObject *item; + int rv; assert (i >= 0 && i < Py_SIZE(deque)); if (_deque_rotate(deque, -i) == -1) return -1; - item = deque_popleft(deque, NULL); + rv = _deque_rotate(deque, i); assert (item != NULL); Py_DECREF(item); - - return _deque_rotate(deque, i); + return rv; } static int -- cgit v1.2.1 From 8b0bcddd5b243ba73e2c817fb5dd826ae7f3578d Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 21 Mar 2015 02:03:40 -0700 Subject: Minor nit. Make the rotate() success/fail tests consistent. --- Modules/_collectionsmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 28aacc3317..b8316279ac 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -634,7 +634,7 @@ deque_rotate(dequeobject *deque, PyObject *args) if (!PyArg_ParseTuple(args, "|n:rotate", &n)) return NULL; - if (_deque_rotate(deque, n) == 0) + if (!_deque_rotate(deque, n)) Py_RETURN_NONE; return NULL; } @@ -864,7 +864,7 @@ deque_remove(dequeobject *deque, PyObject *value) if (cmp > 0) { PyObject *tgt = deque_popleft(deque, NULL); assert (tgt != NULL); - if (_deque_rotate(deque, i) == -1) + if (_deque_rotate(deque, i)) return NULL; Py_DECREF(tgt); Py_RETURN_NONE; @@ -959,7 +959,7 @@ deque_del_item(dequeobject *deque, Py_ssize_t i) int rv; assert (i >= 0 && i < Py_SIZE(deque)); - if (_deque_rotate(deque, -i) == -1) + if (_deque_rotate(deque, -i)) return -1; item = deque_popleft(deque, NULL); rv = _deque_rotate(deque, i); -- cgit v1.2.1 From 814337d3955510ed32321e0c38239415d224b57b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 21 Mar 2015 15:04:43 +0100 Subject: Issue #23571: _Py_CheckFunctionResult() now gives the name of the function which returned an invalid result (result+error or no result without error) in the exception message. Add also unit test to check that the exception contains the name of the function. Special case: the final _PyEval_EvalFrameEx() check doesn't mention the function since it didn't execute a single function but a whole frame. --- Modules/_testcapimodule.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index df35197198..b8e1dbc4f9 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3360,6 +3360,24 @@ pymarshal_read_object_from_file(PyObject* self, PyObject *args) return Py_BuildValue("Nl", obj, pos); } +static PyObject* +return_null_without_error(PyObject *self, PyObject *args) +{ + /* invalid call: return NULL without setting an error, + * _Py_CheckFunctionResult() must detect such bug at runtime. */ + PyErr_Clear(); + return NULL; +} + +static PyObject* +return_result_with_error(PyObject *self, PyObject *args) +{ + /* invalid call: return a result with an error set, + * _Py_CheckFunctionResult() must detect such bug at runtime. */ + PyErr_SetNone(PyExc_ValueError); + Py_RETURN_NONE; +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3519,6 +3537,10 @@ static PyMethodDef TestMethods[] = { pymarshal_read_last_object_from_file, METH_VARARGS}, {"pymarshal_read_object_from_file", pymarshal_read_object_from_file, METH_VARARGS}, + {"return_null_without_error", + return_null_without_error, METH_NOARGS}, + {"return_result_with_error", + return_result_with_error, METH_NOARGS}, {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From 9ba93fc6bcffcd9b0191bf2b15df0b5caca807cf Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 23 Mar 2015 00:47:45 +0200 Subject: Issue #21526: Tkinter now supports new boolean type in Tcl 8.5. --- Modules/_tkinter.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 52069ec8b9..4bced69682 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -229,6 +229,7 @@ typedef struct { int dispatching; /* We cannot include tclInt.h, as this is internal. So we cache interesting types here. */ + const Tcl_ObjType *OldBooleanType; const Tcl_ObjType *BooleanType; const Tcl_ObjType *ByteArrayType; const Tcl_ObjType *DoubleType; @@ -585,7 +586,8 @@ Tkapp_New(const char *screenName, const char *className, } #endif - v->BooleanType = Tcl_GetObjType("boolean"); + v->OldBooleanType = Tcl_GetObjType("boolean"); + v->BooleanType = Tcl_GetObjType("booleanString"); v->ByteArrayType = Tcl_GetObjType("bytearray"); v->DoubleType = Tcl_GetObjType("double"); v->IntType = Tcl_GetObjType("int"); @@ -1001,15 +1003,18 @@ FromObj(PyObject* tkapp, Tcl_Obj *value) { PyObject *result = NULL; TkappObject *app = (TkappObject*)tkapp; + Tcl_Interp *interp = Tkapp_Interp(tkapp); if (value->typePtr == NULL) { return unicodeFromTclStringAndSize(value->bytes, value->length); } - if (value->typePtr == app->BooleanType) { - result = value->internalRep.longValue ? Py_True : Py_False; - Py_INCREF(result); - return result; + if (value->typePtr == app->BooleanType || + value->typePtr == app->OldBooleanType) { + int boolValue; + if (Tcl_GetBooleanFromObj(interp, value, &boolValue) == TCL_ERROR) + return Tkinter_Error(tkapp); + return PyBool_FromLong(boolValue); } if (value->typePtr == app->ByteArrayType) { @@ -1032,15 +1037,14 @@ FromObj(PyObject* tkapp, Tcl_Obj *value) PyObject *elem; Tcl_Obj *tcl_elem; - status = Tcl_ListObjLength(Tkapp_Interp(tkapp), value, &size); + status = Tcl_ListObjLength(interp, value, &size); if (status == TCL_ERROR) return Tkinter_Error(tkapp); result = PyTuple_New(size); if (!result) return NULL; for (i = 0; i < size; i++) { - status = Tcl_ListObjIndex(Tkapp_Interp(tkapp), - value, i, &tcl_elem); + status = Tcl_ListObjIndex(interp, value, i, &tcl_elem); if (status == TCL_ERROR) { Py_DECREF(result); return Tkinter_Error(tkapp); -- cgit v1.2.1 From d711144b8b44784ff1a3b1fca576be0fd91459bf Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 23 Mar 2015 23:23:55 -0700 Subject: Issue 23744: Minor speed-up for deque.__bool__(). --- Modules/_collectionsmodule.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index b8316279ac..dc8e698ba7 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1249,6 +1249,12 @@ deque_sizeof(dequeobject *deque, void *unused) PyDoc_STRVAR(sizeof_doc, "D.__sizeof__() -- size of D in memory, in bytes"); +static int +deque_bool(dequeobject *deque) +{ + return Py_SIZE(deque) != 0; +} + static PyObject * deque_get_maxlen(dequeobject *deque) { @@ -1276,6 +1282,23 @@ static PySequenceMethods deque_as_sequence = { 0, /* sq_inplace_repeat */ }; +static PyNumberMethods deque_as_number = { + 0, /* nb_add */ + 0, /* nb_subtract */ + 0, /* nb_multiply */ + 0, /* nb_remainder */ + 0, /* nb_divmod */ + 0, /* nb_power */ + 0, /* nb_negative */ + 0, /* nb_positive */ + 0, /* nb_absolute */ + (inquiry)deque_bool, /* nb_bool */ + 0, /* nb_invert */ + 0, /* nb_lshift */ + 0, /* nb_rshift */ + }; + + /* deque object ********************************************************/ static PyObject *deque_iter(dequeobject *deque); @@ -1340,7 +1363,7 @@ static PyTypeObject deque_type = { 0, /* tp_setattr */ 0, /* tp_reserved */ deque_repr, /* tp_repr */ - 0, /* tp_as_number */ + &deque_as_number, /* tp_as_number */ &deque_as_sequence, /* tp_as_sequence */ 0, /* tp_as_mapping */ PyObject_HashNotImplemented, /* tp_hash */ -- cgit v1.2.1 From c09390293287d1f15a1723fa868203214f9737b5 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 24 Mar 2015 00:19:53 -0700 Subject: Improve and fix-up comments. --- Modules/_collectionsmodule.c | 71 ++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 25 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index dc8e698ba7..f7587f176e 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -23,31 +23,51 @@ #define BLOCKLEN 64 #define CENTER ((BLOCKLEN - 1) / 2) -/* A `dequeobject` is composed of a doubly-linked list of `block` nodes. +/* Data for deque objects is stored in a doubly-linked list of fixed + * length blocks. This assures that appends or pops never move any + * other data elements besides the one being appended or popped. + * + * Another advantage is that it completely avoids use of realloc(), + * resulting in more predictable performance. + * + * Textbook implementations of doubly-linked lists store one datum + * per link, but that gives them a 200% memory overhead (a prev and + * next link for each datum) and it costs one malloc() call per data + * element. By using fixed-length blocks, the link to data ratio is + * significantly improved and there are proportionally fewer calls + * to malloc() and free(). The data blocks of consecutive pointers + * also improve cache locality. + * * The list of blocks is never empty, so d.leftblock and d.rightblock * are never equal to NULL. The list is not circular. * * A deque d's first element is at d.leftblock[leftindex] * and its last element is at d.rightblock[rightindex]. - * Unlike Python slice indices, these indices are inclusive - * on both ends. This makes the algorithms for left and - * right operations more symmetrical and simplifies the design. * - * The indices, d.leftindex and d.rightindex are always in the range - * 0 <= index < BLOCKLEN. - * Their exact relationship is: - * (d.leftindex + d.len - 1) % BLOCKLEN == d.rightindex. + * Unlike Python slice indices, these indices are inclusive on both + * ends. This makes the algorithms for left and right operations + * more symmetrical and it simplifies the design. * - * Empty deques have d.len == 0; d.leftblock==d.rightblock; - * d.leftindex == CENTER+1; and d.rightindex == CENTER. - * Checking for d.len == 0 is the intended way to see whether d is empty. + * The indices, d.leftindex and d.rightindex are always in the range: + * 0 <= index < BLOCKLEN + * + * And their exact relationship is: + * (d.leftindex + d.len - 1) % BLOCKLEN == d.rightindex * * Whenever d.leftblock == d.rightblock, - * d.leftindex + d.len - 1 == d.rightindex. + * d.leftindex + d.len - 1 == d.rightindex + * + * However, when d.leftblock != d.rightblock, the d.leftindex and + * d.rightindex become indices into distinct blocks and either may + * be larger than the other. * - * However, when d.leftblock != d.rightblock, d.leftindex and d.rightindex - * become indices into distinct blocks and either may be larger than the - * other. + * Empty deques have: + * d.len == 0 + * d.leftblock == d.rightblock + * d.leftindex == CENTER + 1 + * d.rightindex == CENTER + * + * Checking for d.len == 0 is the intended way to see whether d is empty. */ typedef struct BLOCK { @@ -60,8 +80,8 @@ typedef struct { PyObject_VAR_HEAD block *leftblock; block *rightblock; - Py_ssize_t leftindex; /* in range(BLOCKLEN) */ - Py_ssize_t rightindex; /* in range(BLOCKLEN) */ + Py_ssize_t leftindex; /* 0 <= leftindex < BLOCKLEN */ + Py_ssize_t rightindex; /* 0 <= rightindex < BLOCKLEN */ size_t state; /* incremented whenever the indices move */ Py_ssize_t maxlen; PyObject *weakreflist; @@ -91,7 +111,7 @@ static PyTypeObject deque_type; #endif /* A simple freelisting scheme is used to minimize calls to the memory - allocator. It accomodates common use cases where new blocks are being + allocator. It accommodates common use cases where new blocks are being added at about the same rate as old blocks are being freed. */ @@ -816,6 +836,14 @@ PyDoc_STRVAR(index_doc, "D.index(value, [start, [stop]]) -> integer -- return first index of value.\n" "Raises ValueError if the value is not present."); +/* insert(), remove(), and delitem() are implemented in terms of + rotate() for simplicity and reasonable performance near the end + points. If for some reason these methods become popular, it is not + hard to re-implement this using direct data movement (similar to + the code used in list slice assignments) and achieve a performance + boost (by moving each pointer only one instead of twice). +*/ + static PyObject * deque_insert(dequeobject *deque, PyObject *args) { @@ -945,13 +973,6 @@ deque_item(dequeobject *deque, Py_ssize_t i) return item; } -/* delitem() implemented in terms of rotate for simplicity and reasonable - performance near the end points. If for some reason this method becomes - popular, it is not hard to re-implement this using direct data movement - (similar to code in list slice assignment) and achieve a two or threefold - performance boost. -*/ - static int deque_del_item(dequeobject *deque, Py_ssize_t i) { -- cgit v1.2.1 From eaf93d5dbe0a159d1d0908fab4f627934abbe6b1 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 24 Mar 2015 10:27:50 +0100 Subject: Issue #23753: Python doesn't support anymore platforms without stat() or fstat(), these functions are always required. Remove HAVE_STAT and HAVE_FSTAT defines, and stop supporting DONT_HAVE_STAT and DONT_HAVE_FSTAT. --- Modules/_io/fileio.c | 20 -------------------- Modules/mmapmodule.c | 4 ---- 2 files changed, 24 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 6152cde464..b35a51b4e1 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -180,7 +180,6 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) static int check_fd(int fd) { -#if defined(HAVE_FSTAT) || defined(MS_WINDOWS) struct _Py_stat_struct buf; if (_Py_fstat(fd, &buf) < 0 && #ifdef MS_WINDOWS @@ -197,7 +196,6 @@ check_fd(int fd) Py_XDECREF(exc); return -1; } -#endif return 0; } @@ -228,9 +226,7 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) #elif !defined(MS_WINDOWS) int *atomic_flag_works = NULL; #endif -#if defined(HAVE_FSTAT) || defined(MS_WINDOWS) struct _Py_stat_struct fdfstat; -#endif int async_err = 0; assert(PyFileIO_Check(oself)); @@ -427,7 +423,6 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) } self->blksize = DEFAULT_BUFFER_SIZE; -#if defined(HAVE_FSTAT) || defined(MS_WINDOWS) if (_Py_fstat(self->fd, &fdfstat) < 0) { PyErr_SetFromErrno(PyExc_OSError); goto error; @@ -446,7 +441,6 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) if (fdfstat.st_blksize > 1) self->blksize = fdfstat.st_blksize; #endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */ -#endif /* HAVE_FSTAT || MS_WINDOWS */ #if defined(MS_WINDOWS) || defined(__CYGWIN__) /* don't translate newlines (\r\n <=> \n) */ @@ -597,8 +591,6 @@ fileio_readinto(fileio *self, PyObject *args) return PyLong_FromSsize_t(n); } -#if defined(HAVE_FSTAT) || defined(MS_WINDOWS) - static size_t new_buffersize(fileio *self, size_t currentsize) { @@ -702,18 +694,6 @@ fileio_readall(fileio *self) return result; } -#else - -static PyObject * -fileio_readall(fileio *self) -{ - _Py_IDENTIFIER(readall); - return _PyObject_CallMethodId((PyObject*)&PyRawIOBase_Type, - &PyId_readall, "O", self); -} - -#endif /* HAVE_FSTAT || MS_WINDOWS */ - static PyObject * fileio_read(fileio *self, PyObject *args) { diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 63e93b730a..25056a4aaa 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -1112,9 +1112,7 @@ _GetMapSize(PyObject *o, const char* param) static PyObject * new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) { -#ifdef HAVE_FSTAT struct _Py_stat_struct st; -#endif mmap_object *m_obj; PyObject *map_size_obj = NULL; Py_ssize_t map_size; @@ -1179,7 +1177,6 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) if (fd != -1) (void)fcntl(fd, F_FULLFSYNC); #endif -#ifdef HAVE_FSTAT if (fd != -1 && _Py_fstat(fd, &st) == 0 && S_ISREG(st.st_mode)) { if (map_size == 0) { if (st.st_size == 0) { @@ -1204,7 +1201,6 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) return NULL; } } -#endif m_obj = (mmap_object *)type->tp_alloc(type, 0); if (m_obj == NULL) {return NULL;} m_obj->data = NULL; -- cgit v1.2.1 From 7f8ff41ec0ff818773f2fa5d01c21dc5cdb9d19a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 24 Mar 2015 12:16:28 +0100 Subject: Issue #23753: Move _Py_wstat() from Python/fileutils.c to Modules/getpath.c I expected more users of _Py_wstat(), but in practice it's only used by Modules/getpath.c. Move the function because it's not needed on Windows. Windows uses PC/getpathp.c which uses the Win32 API (ex: GetFileAttributesW()) not the POSIX API. --- Modules/getpath.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'Modules') diff --git a/Modules/getpath.c b/Modules/getpath.c index 3564d72afb..429bef3489 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -131,6 +131,23 @@ static wchar_t exec_prefix[MAXPATHLEN+1]; static wchar_t progpath[MAXPATHLEN+1]; static wchar_t *module_search_path = NULL; +/* Get file status. Encode the path to the locale encoding. */ + +static int +_Py_wstat(const wchar_t* path, struct stat *buf) +{ + int err; + char *fname; + fname = Py_EncodeLocale(path, NULL); + if (fname == NULL) { + errno = EINVAL; + return -1; + } + err = stat(fname, buf); + PyMem_Free(fname); + return err; +} + static void reduce(wchar_t *dir) { -- cgit v1.2.1 From 1b26cb760d81cc22ea622d16738f5ed518840a51 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 24 Mar 2015 21:01:50 -0700 Subject: Minor code and comment cleanups. --- Modules/_collectionsmodule.c | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index f7587f176e..bae1ce235e 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -54,7 +54,7 @@ * And their exact relationship is: * (d.leftindex + d.len - 1) % BLOCKLEN == d.rightindex * - * Whenever d.leftblock == d.rightblock, + * Whenever d.leftblock == d.rightblock, then: * d.leftindex + d.len - 1 == d.rightindex * * However, when d.leftblock != d.rightblock, the d.leftindex and @@ -206,13 +206,7 @@ deque_pop(dequeobject *deque, PyObject *unused) deque->state++; if (deque->rightindex == -1) { - if (Py_SIZE(deque) == 0) { - assert(deque->leftblock == deque->rightblock); - assert(deque->leftindex == deque->rightindex+1); - /* re-center instead of freeing a block */ - deque->leftindex = CENTER + 1; - deque->rightindex = CENTER; - } else { + if (Py_SIZE(deque)) { prevblock = deque->rightblock->leftlink; assert(deque->leftblock != deque->rightblock); freeblock(deque->rightblock); @@ -220,6 +214,12 @@ deque_pop(dequeobject *deque, PyObject *unused) MARK_END(prevblock->rightlink); deque->rightblock = prevblock; deque->rightindex = BLOCKLEN - 1; + } else { + assert(deque->leftblock == deque->rightblock); + assert(deque->leftindex == deque->rightindex+1); + /* re-center instead of freeing a block */ + deque->leftindex = CENTER + 1; + deque->rightindex = CENTER; } } return item; @@ -244,13 +244,7 @@ deque_popleft(dequeobject *deque, PyObject *unused) deque->state++; if (deque->leftindex == BLOCKLEN) { - if (Py_SIZE(deque) == 0) { - assert(deque->leftblock == deque->rightblock); - assert(deque->leftindex == deque->rightindex+1); - /* re-center instead of freeing a block */ - deque->leftindex = CENTER + 1; - deque->rightindex = CENTER; - } else { + if (Py_SIZE(deque)) { assert(deque->leftblock != deque->rightblock); prevblock = deque->leftblock->rightlink; freeblock(deque->leftblock); @@ -258,6 +252,12 @@ deque_popleft(dequeobject *deque, PyObject *unused) MARK_END(prevblock->leftlink); deque->leftblock = prevblock; deque->leftindex = 0; + } else { + assert(deque->leftblock == deque->rightblock); + assert(deque->leftindex == deque->rightindex+1); + /* re-center instead of freeing a block */ + deque->leftindex = CENTER + 1; + deque->rightindex = CENTER; } } return item; @@ -300,7 +300,7 @@ static PyObject * deque_append(dequeobject *deque, PyObject *item) { deque->state++; - if (deque->rightindex == BLOCKLEN-1) { + if (deque->rightindex == BLOCKLEN - 1) { block *b = newblock(Py_SIZE(deque)); if (b == NULL) return NULL; @@ -396,7 +396,7 @@ deque_extend(dequeobject *deque, PyObject *iterable) while ((item = PyIter_Next(it)) != NULL) { deque->state++; - if (deque->rightindex == BLOCKLEN-1) { + if (deque->rightindex == BLOCKLEN - 1) { block *b = newblock(Py_SIZE(deque)); if (b == NULL) { Py_DECREF(item); @@ -669,7 +669,7 @@ deque_reverse(dequeobject *deque, PyObject *unused) block *rightblock = deque->rightblock; Py_ssize_t leftindex = deque->leftindex; Py_ssize_t rightindex = deque->rightindex; - Py_ssize_t n = (Py_SIZE(deque))/2; + Py_ssize_t n = Py_SIZE(deque) / 2; Py_ssize_t i; PyObject *tmp; @@ -1135,7 +1135,6 @@ deque_repr(PyObject *deque) return NULL; } if (((dequeobject *)deque)->maxlen != -1) - result = PyUnicode_FromFormat("deque(%R, maxlen=%zd)", aslist, ((dequeobject *)deque)->maxlen); else @@ -1315,8 +1314,6 @@ static PyNumberMethods deque_as_number = { 0, /* nb_absolute */ (inquiry)deque_bool, /* nb_bool */ 0, /* nb_invert */ - 0, /* nb_lshift */ - 0, /* nb_rshift */ }; -- cgit v1.2.1 From 1a76bcb9fff9158bcb43b71b77dc63d5cf77b5e4 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 24 Mar 2015 21:12:57 -0700 Subject: Fix typo --- Modules/_collectionsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index bae1ce235e..dbb2f8a07f 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -841,7 +841,7 @@ PyDoc_STRVAR(index_doc, points. If for some reason these methods become popular, it is not hard to re-implement this using direct data movement (similar to the code used in list slice assignments) and achieve a performance - boost (by moving each pointer only one instead of twice). + boost (by moving each pointer only once instead of twice). */ static PyObject * -- cgit v1.2.1 From bd48d7ebdb8d94fb4b12ea4886665a33f89ce6de Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Tue, 24 Mar 2015 23:28:54 -0700 Subject: Issue #23765: Remove IsBadStringPtr calls in ctypes Also renames a local to avoid warnings about shadowing --- Modules/_ctypes/cfield.c | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 2078291731..4bd022dcda 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -1354,14 +1354,6 @@ z_get(void *ptr, Py_ssize_t size) { /* XXX What about invalid pointers ??? */ if (*(void **)ptr) { -#if defined(MS_WIN32) && !defined(_WIN32_WCE) - if (IsBadStringPtrA(*(char **)ptr, -1)) { - PyErr_Format(PyExc_ValueError, - "invalid string pointer %p", - *(char **)ptr); - return NULL; - } -#endif return PyBytes_FromStringAndSize(*(char **)ptr, strlen(*(char **)ptr)); } else { @@ -1418,14 +1410,6 @@ Z_get(void *ptr, Py_ssize_t size) wchar_t *p; p = *(wchar_t **)ptr; if (p) { -#if defined(MS_WIN32) && !defined(_WIN32_WCE) - if (IsBadStringPtrW(*(wchar_t **)ptr, -1)) { - PyErr_Format(PyExc_ValueError, - "invalid string pointer %p", - *(wchar_t **)ptr); - return NULL; - } -#endif return PyUnicode_FromWideChar(p, wcslen(p)); } else { Py_INCREF(Py_None); @@ -1455,15 +1439,15 @@ BSTR_set(void *ptr, PyObject *value, Py_ssize_t size) /* create a BSTR from value */ if (value) { wchar_t* wvalue; - Py_ssize_t size; - wvalue = PyUnicode_AsUnicodeAndSize(value, &size); + Py_ssize_t wsize; + wvalue = PyUnicode_AsUnicodeAndSize(value, &wsize); if (wvalue == NULL) return NULL; - if ((unsigned) size != size) { + if ((unsigned) wsize != wsize) { PyErr_SetString(PyExc_ValueError, "String too long for BSTR"); return NULL; } - bstr = SysAllocStringLen(wvalue, (unsigned)size); + bstr = SysAllocStringLen(wvalue, (unsigned)wsize); Py_DECREF(value); } else bstr = NULL; -- cgit v1.2.1 From cad130aad8666b83f88293f2591a8582c12a4f58 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 20 Mar 2015 21:49:12 -0700 Subject: Closes #9445: Removes detection of GetFinalPathNameByHandle --- Modules/posixmodule.c | 56 ++++++--------------------------------------------- 1 file changed, 6 insertions(+), 50 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 7aa8050aab..9a44d46975 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1437,31 +1437,6 @@ attributes_from_dir_w(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG * return TRUE; } -/* Grab GetFinalPathNameByHandle dynamically from kernel32 */ -static int has_GetFinalPathNameByHandle = -1; -static DWORD (CALLBACK *Py_GetFinalPathNameByHandleW)(HANDLE, LPWSTR, DWORD, - DWORD); -static int -check_GetFinalPathNameByHandle() -{ - HINSTANCE hKernel32; - DWORD (CALLBACK *Py_GetFinalPathNameByHandleA)(HANDLE, LPSTR, DWORD, - DWORD); - - /* only recheck */ - if (-1 == has_GetFinalPathNameByHandle) - { - hKernel32 = GetModuleHandleW(L"KERNEL32"); - *(FARPROC*)&Py_GetFinalPathNameByHandleA = GetProcAddress(hKernel32, - "GetFinalPathNameByHandleA"); - *(FARPROC*)&Py_GetFinalPathNameByHandleW = GetProcAddress(hKernel32, - "GetFinalPathNameByHandleW"); - has_GetFinalPathNameByHandle = Py_GetFinalPathNameByHandleA && - Py_GetFinalPathNameByHandleW; - } - return has_GetFinalPathNameByHandle; -} - static BOOL get_target_path(HANDLE hdl, wchar_t **target_path) { @@ -1470,8 +1445,8 @@ get_target_path(HANDLE hdl, wchar_t **target_path) /* We have a good handle to the target, use it to determine the target path name (then we'll call lstat on it). */ - buf_size = Py_GetFinalPathNameByHandleW(hdl, 0, 0, - VOLUME_NAME_DOS); + buf_size = GetFinalPathNameByHandleW(hdl, 0, 0, + VOLUME_NAME_DOS); if(!buf_size) return FALSE; @@ -1481,7 +1456,7 @@ get_target_path(HANDLE hdl, wchar_t **target_path) return FALSE; } - result_length = Py_GetFinalPathNameByHandleW(hdl, + result_length = GetFinalPathNameByHandleW(hdl, buf, buf_size, VOLUME_NAME_DOS); if(!result_length) { @@ -1514,12 +1489,6 @@ win32_xstat_impl(const char *path, struct _Py_stat_struct *result, wchar_t *target_path; const char *dot; - if(!check_GetFinalPathNameByHandle()) { - /* If the OS doesn't have GetFinalPathNameByHandle, don't - traverse reparse point. */ - traverse = FALSE; - } - hFile = CreateFileA( path, FILE_READ_ATTRIBUTES, /* desired access */ @@ -1610,12 +1579,6 @@ win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, wchar_t *target_path; const wchar_t *dot; - if(!check_GetFinalPathNameByHandle()) { - /* If the OS doesn't have GetFinalPathNameByHandle, don't - traverse reparse point. */ - traverse = FALSE; - } - hFile = CreateFileW( path, FILE_READ_ATTRIBUTES, /* desired access */ @@ -4700,13 +4663,6 @@ os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) if (path_wchar == NULL) return NULL; - if(!check_GetFinalPathNameByHandle()) { - /* If the OS doesn't have GetFinalPathNameByHandle, return a - NotImplementedError. */ - return PyErr_Format(PyExc_NotImplementedError, - "GetFinalPathNameByHandle not available on this platform"); - } - hFile = CreateFileW( path_wchar, 0, /* desired access */ @@ -4722,7 +4678,7 @@ os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) /* We have a good handle to the target, use it to determine the target path name. */ - buf_size = Py_GetFinalPathNameByHandleW(hFile, 0, 0, VOLUME_NAME_NT); + buf_size = GetFinalPathNameByHandleW(hFile, 0, 0, VOLUME_NAME_NT); if(!buf_size) return win32_error_object("GetFinalPathNameByHandle", path); @@ -4731,8 +4687,8 @@ os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) if(!target_path) return PyErr_NoMemory(); - result_length = Py_GetFinalPathNameByHandleW(hFile, target_path, - buf_size, VOLUME_NAME_DOS); + result_length = GetFinalPathNameByHandleW(hFile, target_path, + buf_size, VOLUME_NAME_DOS); if(!result_length) return win32_error_object("GetFinalPathNamyByHandle", path); -- cgit v1.2.1 From dea2d14b5b8f0681dc423ef4268aa0315c69f781 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 25 Mar 2015 21:03:47 +0200 Subject: Issue #22364: Improved some re error messages using regex for hints. --- Modules/_sre.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 9550d97c1b..83eb96376a 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -315,7 +315,7 @@ getstring(PyObject* string, Py_ssize_t* p_length, /* get pointer to byte string buffer */ if (PyObject_GetBuffer(string, view, PyBUF_SIMPLE) != 0) { - PyErr_SetString(PyExc_TypeError, "expected string or buffer"); + PyErr_SetString(PyExc_TypeError, "expected string or bytes-like object"); return NULL; } @@ -359,12 +359,12 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string, if (isbytes && pattern->isbytes == 0) { PyErr_SetString(PyExc_TypeError, - "can't use a string pattern on a bytes-like object"); + "cannot use a string pattern on a bytes-like object"); goto err; } if (!isbytes && pattern->isbytes > 0) { PyErr_SetString(PyExc_TypeError, - "can't use a bytes pattern on a string-like object"); + "cannot use a bytes pattern on a string-like object"); goto err; } -- cgit v1.2.1 From 6fd74191973e8e9af1813e9bd49075cc048dff82 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 27 Mar 2015 13:31:18 +0100 Subject: Issue #22117: Add a new Python timestamp format _PyTime_t to pytime.h In practice, _PyTime_t is a number of nanoseconds. Its C type is a 64-bit signed number. It's integer value is in the range [-2^63; 2^63-1]. In seconds, the range is around [-292 years; +292 years]. In term of Epoch timestamp (1970-01-01), it can store a date between 1677-09-21 and 2262-04-11. The API has a resolution of 1 nanosecond and use integer number. With a resolution on 1 nanosecond, 64-bit IEEE 754 floating point numbers loose precision after 194 days. It's not the case with this API. The drawback is overflow for values outside [-2^63; 2^63-1], but these values are unlikely for most Python modules, except of the datetime module. New functions: - _PyTime_GetMonotonicClock() - _PyTime_FromObject() - _PyTime_AsMilliseconds() - _PyTime_AsTimeval() This change uses these new functions in time.sleep() to avoid rounding issues. The new API will be extended step by step, and the old API will be removed step by step. Currently, some code is duplicated just to be able to move incrementally, instead of pushing a large change at once. --- Modules/timemodule.c | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 0c44d1259b..e44e082c26 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -31,7 +31,7 @@ #endif /* !__WATCOMC__ || __QNX__ */ /* Forward declarations */ -static int floatsleep(double); +static int pysleep(_PyTime_t); static PyObject* floattime(_Py_clock_info_t *info); static PyObject * @@ -218,17 +218,17 @@ Return the resolution (precision) of the specified clock clk_id."); #endif /* HAVE_CLOCK_GETTIME */ static PyObject * -time_sleep(PyObject *self, PyObject *args) +time_sleep(PyObject *self, PyObject *obj) { - double secs; - if (!PyArg_ParseTuple(args, "d:sleep", &secs)) + _PyTime_t secs; + if (_PyTime_FromObject(&secs, obj, _PyTime_ROUND_UP)) return NULL; if (secs < 0) { PyErr_SetString(PyExc_ValueError, "sleep length must be non-negative"); return NULL; } - if (floatsleep(secs) != 0) + if (pysleep(secs) != 0) return NULL; Py_INCREF(Py_None); return Py_None; @@ -1258,7 +1258,7 @@ static PyMethodDef time_methods[] = { {"clock_settime", time_clock_settime, METH_VARARGS, clock_settime_doc}, {"clock_getres", time_clock_getres, METH_VARARGS, clock_getres_doc}, #endif - {"sleep", time_sleep, METH_VARARGS, sleep_doc}, + {"sleep", time_sleep, METH_O, sleep_doc}, {"gmtime", time_gmtime, METH_VARARGS, gmtime_doc}, {"localtime", time_localtime, METH_VARARGS, localtime_doc}, {"asctime", time_asctime, METH_VARARGS, asctime_doc}, @@ -1379,34 +1379,30 @@ floattime(_Py_clock_info_t *info) } -/* Implement floatsleep() for various platforms. +/* Implement pysleep() for various platforms. When interrupted (or when another error occurs), return -1 and set an exception; else return 0. */ static int -floatsleep(double secs) +pysleep(_PyTime_t secs) { - _PyTime_timeval deadline, monotonic; + _PyTime_t deadline, monotonic; #ifndef MS_WINDOWS struct timeval timeout; - double frac; int err = 0; #else - double millisecs; + _PyTime_t millisecs; unsigned long ul_millis; DWORD rc; HANDLE hInterruptEvent; #endif - _PyTime_monotonic(&deadline); - _PyTime_AddDouble(&deadline, secs, _PyTime_ROUND_UP); + deadline = _PyTime_GetMonotonicClock() + secs; do { #ifndef MS_WINDOWS - frac = fmod(secs, 1.0); - secs = floor(secs); - timeout.tv_sec = (long)secs; - timeout.tv_usec = (long)(frac*1e6); + if (_PyTime_AsTimeval(secs, &timeout, _PyTime_ROUND_UP) < 0) + return -1; Py_BEGIN_ALLOW_THREADS err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout); @@ -1420,7 +1416,7 @@ floatsleep(double secs) return -1; } #else - millisecs = secs * 1000.0; + millisecs = _PyTime_AsMilliseconds(secs, _PyTime_ROUND_UP); if (millisecs > (double)ULONG_MAX) { PyErr_SetString(PyExc_OverflowError, "sleep length is too large"); @@ -1453,9 +1449,9 @@ floatsleep(double secs) if (PyErr_CheckSignals()) return -1; - _PyTime_monotonic(&monotonic); - secs = _PyTime_INTERVAL(monotonic, deadline); - if (secs <= 0.0) + monotonic = _PyTime_GetMonotonicClock(); + secs = deadline - monotonic; + if (secs <= 00) break; /* retry with the recomputed delay */ } while (1); -- cgit v1.2.1 From 8868ac99631bc516c59dcc9f0d112683ea6cbcc4 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 27 Mar 2015 17:12:45 +0100 Subject: Issue #22117: Fix rounding in _PyTime_FromSecondsObject() * Rename _PyTime_FromObject() to _PyTime_FromSecondsObject() * Add _PyTime_AsNanosecondsObject() and _testcapi.pytime_fromsecondsobject() * Add unit tests --- Modules/_testcapimodule.c | 17 +++++++++++++++++ Modules/timemodule.c | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index b8e1dbc4f9..ec513bca35 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3378,6 +3378,22 @@ return_result_with_error(PyObject *self, PyObject *args) Py_RETURN_NONE; } +static PyObject * +test_pytime_fromsecondsobject(PyObject *self, PyObject *args) +{ + PyObject *obj; + int round; + _PyTime_t ts; + + if (!PyArg_ParseTuple(args, "Oi", &obj, &round)) + return NULL; + if (check_time_rounding(round) < 0) + return NULL; + if (_PyTime_FromSecondsObject(&ts, obj, round) == -1) + return NULL; + return _PyTime_AsNanosecondsObject(ts); +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3541,6 +3557,7 @@ static PyMethodDef TestMethods[] = { return_null_without_error, METH_NOARGS}, {"return_result_with_error", return_result_with_error, METH_NOARGS}, + {"pytime_fromsecondsobject", test_pytime_fromsecondsobject, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/timemodule.c b/Modules/timemodule.c index e44e082c26..1ce2f6a0ed 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -221,7 +221,7 @@ static PyObject * time_sleep(PyObject *self, PyObject *obj) { _PyTime_t secs; - if (_PyTime_FromObject(&secs, obj, _PyTime_ROUND_UP)) + if (_PyTime_FromSecondsObject(&secs, obj, _PyTime_ROUND_UP)) return NULL; if (secs < 0) { PyErr_SetString(PyExc_ValueError, -- cgit v1.2.1 From 6f52573ef10e80de3fec8705dd6b6df16e0e7f53 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 27 Mar 2015 22:27:24 +0100 Subject: Issue #22117: time.monotonic() now uses the new _PyTime_t API * Add _PyTime_FromNanoseconds() * Add _PyTime_AsSecondsDouble() * Add unit tests for _PyTime_AsSecondsDouble() --- Modules/_testcapimodule.c | 17 ++++++++++++++++- Modules/timemodule.c | 8 +++++--- 2 files changed, 21 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index ec513bca35..b382081158 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3394,6 +3394,20 @@ test_pytime_fromsecondsobject(PyObject *self, PyObject *args) return _PyTime_AsNanosecondsObject(ts); } +static PyObject * +test_pytime_assecondsdouble(PyObject *self, PyObject *args) +{ + PY_LONG_LONG ns; + _PyTime_t ts; + double d; + + if (!PyArg_ParseTuple(args, "L", &ns)) + return NULL; + ts = _PyTime_FromNanoseconds(ns); + d = _PyTime_AsSecondsDouble(ts); + return PyFloat_FromDouble(d); +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3557,7 +3571,8 @@ static PyMethodDef TestMethods[] = { return_null_without_error, METH_NOARGS}, {"return_result_with_error", return_result_with_error, METH_NOARGS}, - {"pytime_fromsecondsobject", test_pytime_fromsecondsobject, METH_VARARGS}, + {"PyTime_FromSecondsObject", test_pytime_fromsecondsobject, METH_VARARGS}, + {"PyTime_AsSecondsDouble", test_pytime_assecondsdouble, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 1ce2f6a0ed..6563d83844 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -887,12 +887,14 @@ should not be relied on."); static PyObject * pymonotonic(_Py_clock_info_t *info) { - _PyTime_timeval tv; - if (_PyTime_monotonic_info(&tv, info) < 0) { + _PyTime_t t; + double d; + if (_PyTime_GetMonotonicClockWithInfo(&t, info) < 0) { assert(info != NULL); return NULL; } - return PyFloat_FromDouble((double)tv.tv_sec + tv.tv_usec * 1e-6); + d = _PyTime_AsSecondsDouble(t); + return PyFloat_FromDouble(d); } static PyObject * -- cgit v1.2.1 From fb93bc7a7bd2901fa147b30d815eacc8e7154d9e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 27 Mar 2015 18:16:17 +0100 Subject: Issue #22117: time.time() now uses the new _PyTime_t API * Add _PyTime_GetSystemClockWithInfo() --- Modules/timemodule.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 6563d83844..880f3d2146 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1372,12 +1372,14 @@ PyInit_time(void) static PyObject* floattime(_Py_clock_info_t *info) { - _PyTime_timeval t; - if (_PyTime_gettimeofday_info(&t, info) < 0) { + _PyTime_t t; + double d; + if (_PyTime_GetSystemClockWithInfo(&t, info) < 0) { assert(info != NULL); return NULL; } - return PyFloat_FromDouble((double)t.tv_sec + t.tv_usec * 1e-6); + d = _PyTime_AsSecondsDouble(t); + return PyFloat_FromDouble(d); } -- cgit v1.2.1 From 4206d03d5d36dfcd837da864eb623b15419c215b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 27 Mar 2015 17:47:53 +0100 Subject: Issue #22117: The gc module now uses _PyTime_t timestamp --- Modules/gcmodule.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 142687bb7f..cb7222db89 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -25,7 +25,7 @@ #include "Python.h" #include "frameobject.h" /* for PyFrame_ClearFreeList */ -#include "pytime.h" /* for _PyTime_monotonic, _PyTime_INTERVAL */ +#include "pytime.h" /* for _PyTime_GetMonotonicClock() */ /* Get an object's GC head */ #define AS_GC(o) ((PyGC_Head *)(o)-1) @@ -908,7 +908,7 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, PyGC_Head unreachable; /* non-problematic unreachable trash */ PyGC_Head finalizers; /* objects with, & reachable from, __del__ */ PyGC_Head *gc; - _PyTime_timeval t1; + _PyTime_t t1 = 0; /* initialize to prevent a compiler warning */ struct gc_generation_stats *stats = &generation_stats[generation]; @@ -919,7 +919,7 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, for (i = 0; i < NUM_GENERATIONS; i++) PySys_FormatStderr(" %zd", gc_list_size(GEN_HEAD(i))); - _PyTime_monotonic(&t1); + t1 = _PyTime_GetMonotonicClock(); PySys_WriteStderr("\n"); } @@ -1024,8 +1024,7 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, debug_cycle("uncollectable", FROM_GC(gc)); } if (debug & DEBUG_STATS) { - _PyTime_timeval t2; - _PyTime_monotonic(&t2); + _PyTime_t t2 = _PyTime_GetMonotonicClock(); if (m == 0 && n == 0) PySys_WriteStderr("gc: done"); @@ -1033,7 +1032,8 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, PySys_FormatStderr( "gc: done, %zd unreachable, %zd uncollectable", n+m, n); - PySys_WriteStderr(", %.4fs elapsed\n", _PyTime_INTERVAL(t1, t2)); + PySys_WriteStderr(", %.4fs elapsed\n", + _PyTime_AsSecondsDouble(t2 - t1)); } /* Append instances in the uncollectable set to a Python -- cgit v1.2.1 From e920c51efa3cc13cacda6c7ebc34289c02753024 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 27 Mar 2015 18:19:03 +0100 Subject: Issue #22117: The signal modules uses the new _PyTime_t API * Add _PyTime_AsTimespec() * Add unit tests for _PyTime_AsTimespec() --- Modules/_testcapimodule.c | 20 ++++++++++++++++++++ Modules/signalmodule.c | 27 +++++++++++++-------------- 2 files changed, 33 insertions(+), 14 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index b382081158..5029105a88 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3408,6 +3408,23 @@ test_pytime_assecondsdouble(PyObject *self, PyObject *args) return PyFloat_FromDouble(d); } +#ifdef HAVE_CLOCK_GETTIME +static PyObject * +test_PyTime_AsTimespec(PyObject *self, PyObject *args) +{ + PY_LONG_LONG ns; + _PyTime_t t; + struct timespec ts; + + if (!PyArg_ParseTuple(args, "L", &ns)) + return NULL; + t = _PyTime_FromNanoseconds(ns); + if (_PyTime_AsTimespec(t, &ts) == -1) + return NULL; + return Py_BuildValue("Nl", _PyLong_FromTime_t(ts.tv_sec), ts.tv_nsec); +} +#endif + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3573,6 +3590,9 @@ static PyMethodDef TestMethods[] = { return_result_with_error, METH_NOARGS}, {"PyTime_FromSecondsObject", test_pytime_fromsecondsobject, METH_VARARGS}, {"PyTime_AsSecondsDouble", test_pytime_assecondsdouble, METH_VARARGS}, +#ifdef HAVE_CLOCK_GETTIME + {"PyTime_AsTimespec", test_PyTime_AsTimespec, METH_VARARGS}, +#endif {NULL, NULL} /* sentinel */ }; diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 5dba8b1fd3..f3b2e29867 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -966,16 +966,18 @@ Returns a struct_siginfo containing information about the signal."); static PyObject * signal_sigtimedwait(PyObject *self, PyObject *args) { - PyObject *signals; - double timeout, frac; + PyObject *signals, *timeout_obj; struct timespec ts; sigset_t set; siginfo_t si; int res; - _PyTime_timeval deadline, monotonic; + _PyTime_t timeout, deadline, monotonic; + + if (!PyArg_ParseTuple(args, "OO:sigtimedwait", + &signals, &timeout_obj)) + return NULL; - if (!PyArg_ParseTuple(args, "Od:sigtimedwait", - &signals, &timeout)) + if (_PyTime_FromSecondsObject(&timeout, timeout_obj, _PyTime_ROUND_UP) < 0) return NULL; if (timeout < 0) { @@ -986,14 +988,11 @@ signal_sigtimedwait(PyObject *self, PyObject *args) if (iterable_to_sigset(signals, &set)) return NULL; - _PyTime_monotonic(&deadline); - _PyTime_AddDouble(&deadline, timeout, _PyTime_ROUND_UP); + deadline = _PyTime_GetMonotonicClock() + timeout; do { - frac = fmod(timeout, 1.0); - timeout = floor(timeout); - ts.tv_sec = (long)timeout; - ts.tv_nsec = (long)(frac*1e9); + if (_PyTime_AsTimespec(timeout, &ts) < 0) + return NULL; Py_BEGIN_ALLOW_THREADS res = sigtimedwait(&set, &si, &ts); @@ -1013,9 +1012,9 @@ signal_sigtimedwait(PyObject *self, PyObject *args) if (PyErr_CheckSignals()) return NULL; - _PyTime_monotonic(&monotonic); - timeout = _PyTime_INTERVAL(monotonic, deadline); - if (timeout <= 0.0) + monotonic = _PyTime_GetMonotonicClock(); + timeout = deadline - monotonic; + if (timeout <= 0) break; } while (1); -- cgit v1.2.1 From 962610e9c0bd61ba3096060405eddfc0ddcf0ad3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 27 Mar 2015 22:59:32 +0100 Subject: Issue #23618, #22117: refactor socketmodule.c Move Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS inside internal_select_ex() to prepare a switch to the _PyTime_t type and retry syscall on EINTR. --- Modules/socketmodule.c | 196 ++++++++++++++++++++++++++++--------------------- 1 file changed, 113 insertions(+), 83 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 8cf6140145..f7e9042fe3 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -601,6 +601,11 @@ internal_select_ex(PySocketSockObject *s, int writing, double interval) { int n; +#ifdef WITH_THREAD + /* must be called with the GIL held */ + assert(PyGILState_Check()); +#endif + /* Nothing to do unless we're in timeout mode (not non-blocking) */ if (s->sock_timeout <= 0.0) return 0; @@ -625,7 +630,10 @@ internal_select_ex(PySocketSockObject *s, int writing, double interval) /* s->sock_timeout is in seconds, timeout in ms */ timeout = (int)(interval * 1000 + 0.5); + + Py_BEGIN_ALLOW_THREADS; n = poll(&pollfd, 1, timeout); + Py_END_ALLOW_THREADS; } #else { @@ -638,12 +646,14 @@ internal_select_ex(PySocketSockObject *s, int writing, double interval) FD_SET(s->sock_fd, &fds); /* See if the socket is ready */ + Py_BEGIN_ALLOW_THREADS; if (writing) n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), NULL, &fds, NULL, &tv); else n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), &fds, NULL, NULL, &tv); + Py_END_ALLOW_THREADS; } #endif @@ -667,11 +677,14 @@ internal_select(PySocketSockObject *s, int writing) Here is an example of use: BEGIN_SELECT_LOOP(s) - Py_BEGIN_ALLOW_THREADS + timeout = internal_select_ex(s, 0, interval); - if (!timeout) + + if (!timeout) { + Py_BEGIN_ALLOW_THREADS outlen = recv(s->sock_fd, cbuf, len, flags); - Py_END_ALLOW_THREADS + Py_END_ALLOW_THREADS + } if (timeout == 1) { PyErr_SetString(socket_timeout, "timed out"); return -1; @@ -2066,9 +2079,10 @@ sock_accept(PySocketSockObject *s) BEGIN_SELECT_LOOP(s) do { - Py_BEGIN_ALLOW_THREADS timeout = internal_select_ex(s, 0, interval); + if (!timeout) { + Py_BEGIN_ALLOW_THREADS #if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) if (accept4_works != 0) { newfd = accept4(s->sock_fd, SAS2SA(&addrbuf), &addrlen, @@ -2083,8 +2097,8 @@ sock_accept(PySocketSockObject *s) #else newfd = accept(s->sock_fd, SAS2SA(&addrbuf), &addrlen); #endif + Py_END_ALLOW_THREADS } - Py_END_ALLOW_THREADS } while (newfd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (timeout == 1) { PyErr_SetString(socket_timeout, "timed out"); @@ -2395,51 +2409,59 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, { int res, timeout; + timeout = 0; + + Py_BEGIN_ALLOW_THREADS res = connect(s->sock_fd, addr, addrlen); + Py_END_ALLOW_THREADS + #ifdef MS_WINDOWS - if (s->sock_timeout > 0.0) { - if (res < 0 && WSAGetLastError() == WSAEWOULDBLOCK && - IS_SELECTABLE(s)) { - /* This is a mess. Best solution: trust select */ - fd_set fds; - fd_set fds_exc; - struct timeval tv; - tv.tv_sec = (int)s->sock_timeout; - tv.tv_usec = (int)((s->sock_timeout - tv.tv_sec) * 1e6); - FD_ZERO(&fds); - FD_SET(s->sock_fd, &fds); - FD_ZERO(&fds_exc); - FD_SET(s->sock_fd, &fds_exc); - res = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), - NULL, &fds, &fds_exc, &tv); - if (res == 0) { - res = WSAEWOULDBLOCK; - timeout = 1; - } else if (res > 0) { - if (FD_ISSET(s->sock_fd, &fds)) - /* The socket is in the writable set - this - means connected */ - res = 0; - else { - /* As per MS docs, we need to call getsockopt() - to get the underlying error */ - int res_size = sizeof res; - /* It must be in the exception set */ - assert(FD_ISSET(s->sock_fd, &fds_exc)); - if (0 == getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, - (char *)&res, &res_size)) - /* getsockopt also clears WSAGetLastError, - so reset it back. */ - WSASetLastError(res); - else - res = WSAGetLastError(); - } + if (s->sock_timeout > 0.0 + && res < 0 && WSAGetLastError() == WSAEWOULDBLOCK + && IS_SELECTABLE(s)) { + /* This is a mess. Best solution: trust select */ + fd_set fds; + fd_set fds_exc; + struct timeval tv; + + Py_BEGIN_ALLOW_THREADS + tv.tv_sec = (int)s->sock_timeout; + tv.tv_usec = (int)((s->sock_timeout - tv.tv_sec) * 1e6); + FD_ZERO(&fds); + FD_SET(s->sock_fd, &fds); + FD_ZERO(&fds_exc); + FD_SET(s->sock_fd, &fds_exc); + res = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), + NULL, &fds, &fds_exc, &tv); + Py_END_ALLOW_THREADS + + if (res == 0) { + res = WSAEWOULDBLOCK; + timeout = 1; + } else if (res > 0) { + if (FD_ISSET(s->sock_fd, &fds)) + /* The socket is in the writable set - this + means connected */ + res = 0; + else { + /* As per MS docs, we need to call getsockopt() + to get the underlying error */ + int res_size = sizeof res; + /* It must be in the exception set */ + assert(FD_ISSET(s->sock_fd, &fds_exc)); + if (0 == getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, + (char *)&res, &res_size)) + /* getsockopt also clears WSAGetLastError, + so reset it back. */ + WSASetLastError(res); + else + res = WSAGetLastError(); } - /* else if (res < 0) an error occurred */ } + /* else if (res < 0) an error occurred */ } if (res < 0) @@ -2447,26 +2469,27 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, #else - if (s->sock_timeout > 0.0) { - if (res < 0 && errno == EINPROGRESS && IS_SELECTABLE(s)) { - timeout = internal_select(s, 1); - if (timeout == 0) { - /* Bug #1019808: in case of an EINPROGRESS, - use getsockopt(SO_ERROR) to get the real - error. */ - socklen_t res_size = sizeof res; - (void)getsockopt(s->sock_fd, SOL_SOCKET, - SO_ERROR, &res, &res_size); - if (res == EISCONN) - res = 0; - errno = res; - } - else if (timeout == -1) { - res = errno; /* had error */ - } - else - res = EWOULDBLOCK; /* timed out */ + if (s->sock_timeout > 0.0 + && res < 0 && errno == EINPROGRESS && IS_SELECTABLE(s)) { + + timeout = internal_select(s, 1); + + if (timeout == 0) { + /* Bug #1019808: in case of an EINPROGRESS, + use getsockopt(SO_ERROR) to get the real + error. */ + socklen_t res_size = sizeof res; + (void)getsockopt(s->sock_fd, SOL_SOCKET, + SO_ERROR, &res, &res_size); + if (res == EISCONN) + res = 0; + errno = res; + } + else if (timeout == -1) { + res = errno; /* had error */ } + else + res = EWOULDBLOCK; /* timed out */ } if (res < 0) @@ -2491,9 +2514,7 @@ sock_connect(PySocketSockObject *s, PyObject *addro) if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) return NULL; - Py_BEGIN_ALLOW_THREADS res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); - Py_END_ALLOW_THREADS if (timeout == 1) { PyErr_SetString(socket_timeout, "timed out"); @@ -2525,9 +2546,7 @@ sock_connect_ex(PySocketSockObject *s, PyObject *addro) if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) return NULL; - Py_BEGIN_ALLOW_THREADS res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); - Py_END_ALLOW_THREADS /* Signals are not errors (though they may raise exceptions). Adapted from PyErr_SetFromErrnoWithFilenameObject(). */ @@ -2679,9 +2698,10 @@ sock_recv_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags) BEGIN_SELECT_LOOP(s) do { - Py_BEGIN_ALLOW_THREADS timeout = internal_select_ex(s, 0, interval); + if (!timeout) { + Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS if (len > INT_MAX) len = INT_MAX; @@ -2689,8 +2709,8 @@ sock_recv_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags) #else outlen = recv(s->sock_fd, cbuf, len, flags); #endif + Py_END_ALLOW_THREADS } - Py_END_ALLOW_THREADS } while (outlen < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (timeout == 1) { @@ -2853,10 +2873,11 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags, BEGIN_SELECT_LOOP(s) do { - Py_BEGIN_ALLOW_THREADS memset(&addrbuf, 0, addrlen); timeout = internal_select_ex(s, 0, interval); + if (!timeout) { + Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS if (len > INT_MAX) len = INT_MAX; @@ -2866,8 +2887,8 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags, n = recvfrom(s->sock_fd, cbuf, len, flags, SAS2SA(&addrbuf), &addrlen); #endif + Py_END_ALLOW_THREADS } - Py_END_ALLOW_THREADS } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (timeout == 1) { @@ -3054,7 +3075,6 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen, BEGIN_SELECT_LOOP(s) do { - Py_BEGIN_ALLOW_THREADS; msg.msg_name = SAS2SA(&addrbuf); msg.msg_namelen = addrbuflen; msg.msg_iov = iov; @@ -3062,13 +3082,17 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen, msg.msg_control = controlbuf; msg.msg_controllen = controllen; timeout = internal_select_ex(s, 0, interval); - if (!timeout) - bytes_received = recvmsg(s->sock_fd, &msg, flags); - Py_END_ALLOW_THREADS; + if (timeout == 1) { PyErr_SetString(socket_timeout, "timed out"); goto finally; } + + if (!timeout) { + Py_BEGIN_ALLOW_THREADS; + bytes_received = recvmsg(s->sock_fd, &msg, flags); + Py_END_ALLOW_THREADS; + } } while (bytes_received < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); END_SELECT_LOOP(s) @@ -3350,9 +3374,10 @@ sock_send(PySocketSockObject *s, PyObject *args) BEGIN_SELECT_LOOP(s) do { - Py_BEGIN_ALLOW_THREADS timeout = internal_select_ex(s, 1, interval); + if (!timeout) { + Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS if (len > INT_MAX) len = INT_MAX; @@ -3360,8 +3385,8 @@ sock_send(PySocketSockObject *s, PyObject *args) #else n = send(s->sock_fd, buf, len, flags); #endif + Py_END_ALLOW_THREADS } - Py_END_ALLOW_THREADS } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (timeout == 1) { PyBuffer_Release(&pbuf); @@ -3406,10 +3431,11 @@ sock_sendall(PySocketSockObject *s, PyObject *args) } do { - Py_BEGIN_ALLOW_THREADS timeout = internal_select(s, 1); + n = -1; if (!timeout) { + Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS if (len > INT_MAX) len = INT_MAX; @@ -3417,8 +3443,8 @@ sock_sendall(PySocketSockObject *s, PyObject *args) #else n = send(s->sock_fd, buf, len, flags); #endif + Py_END_ALLOW_THREADS } - Py_END_ALLOW_THREADS if (timeout == 1) { PyBuffer_Release(&pbuf); PyErr_SetString(socket_timeout, "timed out"); @@ -3495,9 +3521,10 @@ sock_sendto(PySocketSockObject *s, PyObject *args) BEGIN_SELECT_LOOP(s) do { - Py_BEGIN_ALLOW_THREADS timeout = internal_select_ex(s, 1, interval); + if (!timeout) { + Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS if (len > INT_MAX) len = INT_MAX; @@ -3507,8 +3534,8 @@ sock_sendto(PySocketSockObject *s, PyObject *args) n = sendto(s->sock_fd, buf, len, flags, SAS2SA(&addrbuf), addrlen); #endif + Py_END_ALLOW_THREADS } - Py_END_ALLOW_THREADS } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (timeout == 1) { @@ -3710,11 +3737,14 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) BEGIN_SELECT_LOOP(s) do { - Py_BEGIN_ALLOW_THREADS; timeout = internal_select_ex(s, 1, interval); - if (!timeout) + + if (!timeout) { + Py_BEGIN_ALLOW_THREADS; bytes_sent = sendmsg(s->sock_fd, &msg, flags); - Py_END_ALLOW_THREADS; + Py_END_ALLOW_THREADS; + } + if (timeout == 1) { PyErr_SetString(socket_timeout, "timed out"); goto finally; -- cgit v1.2.1 From 1392cf4c25fee3824c6d56fee0a37e863e52bba6 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 28 Mar 2015 01:26:47 +0100 Subject: Issue #22117: Write unit tests for _PyTime_AsTimeval() * _PyTime_AsTimeval() now ensures that tv_usec is always positive * _PyTime_AsTimespec() now ensures that tv_nsec is always positive * _PyTime_AsTimeval() now returns an integer on overflow instead of raising an exception --- Modules/_testcapimodule.c | 31 +++++++++++++++++++++++++++++++ Modules/timemodule.c | 5 ++++- 2 files changed, 35 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 5029105a88..4503dc384f 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -14,6 +14,10 @@ #include "marshal.h" #include +#ifdef MS_WINDOWS +# include +#endif + #ifdef WITH_THREAD #include "pythread.h" #endif /* WITH_THREAD */ @@ -3408,6 +3412,32 @@ test_pytime_assecondsdouble(PyObject *self, PyObject *args) return PyFloat_FromDouble(d); } +static PyObject * +test_PyTime_AsTimeval(PyObject *self, PyObject *args) +{ + PY_LONG_LONG ns; + int round; + _PyTime_t t; + struct timeval tv; + PyObject *seconds; + + if (!PyArg_ParseTuple(args, "Li", &ns, &round)) + return NULL; + if (check_time_rounding(round) < 0) + return NULL; + t = _PyTime_FromNanoseconds(ns); + if (_PyTime_AsTimeval(t, &tv, round) < 0) { + PyErr_SetString(PyExc_OverflowError, + "timeout doesn't fit into C timeval"); + return NULL; + } + + seconds = PyLong_FromLong((PY_LONG_LONG)tv.tv_sec); + if (seconds == NULL) + return NULL; + return Py_BuildValue("Nl", seconds, tv.tv_usec); +} + #ifdef HAVE_CLOCK_GETTIME static PyObject * test_PyTime_AsTimespec(PyObject *self, PyObject *args) @@ -3590,6 +3620,7 @@ static PyMethodDef TestMethods[] = { return_result_with_error, METH_NOARGS}, {"PyTime_FromSecondsObject", test_pytime_fromsecondsobject, METH_VARARGS}, {"PyTime_AsSecondsDouble", test_pytime_assecondsdouble, METH_VARARGS}, + {"PyTime_AsTimeval", test_PyTime_AsTimeval, METH_VARARGS}, #ifdef HAVE_CLOCK_GETTIME {"PyTime_AsTimespec", test_PyTime_AsTimespec, METH_VARARGS}, #endif diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 880f3d2146..21e6f433ff 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1405,8 +1405,11 @@ pysleep(_PyTime_t secs) do { #ifndef MS_WINDOWS - if (_PyTime_AsTimeval(secs, &timeout, _PyTime_ROUND_UP) < 0) + if (_PyTime_AsTimeval(secs, &timeout, _PyTime_ROUND_UP) < 0) { + PyErr_SetString(PyExc_OverflowError, + "delay doesn't fit into C timeval"); return -1; + } Py_BEGIN_ALLOW_THREADS err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout); -- cgit v1.2.1 From 0bf568f2209818147ddcf254a1513939131fe035 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 28 Mar 2015 01:18:54 +0100 Subject: Issue #22117: The socket module uses _PyTime_t timestamp for timeouts --- Modules/socketmodule.c | 213 ++++++++++++++++++++++++++++--------------------- Modules/socketmodule.h | 2 +- 2 files changed, 124 insertions(+), 91 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index f7e9042fe3..93dcd41948 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -460,7 +460,7 @@ static PyTypeObject sock_type; #else /* If there's no timeout left, we don't have to call select, so it's a safe, * little white lie. */ -#define IS_SELECTABLE(s) (_PyIsSelectable_fd((s)->sock_fd) || (s)->sock_timeout <= 0.0) +#define IS_SELECTABLE(s) (_PyIsSelectable_fd((s)->sock_fd) || (s)->sock_timeout <= 0) #endif static PyObject* @@ -597,9 +597,17 @@ internal_setblocking(PySocketSockObject *s, int block) after they've reacquired the interpreter lock. Returns 1 on timeout, -1 on error, 0 otherwise. */ static int -internal_select_ex(PySocketSockObject *s, int writing, double interval) +internal_select_ex(PySocketSockObject *s, int writing, _PyTime_t interval) { int n; +#ifdef HAVE_POLL + struct pollfd pollfd; + _PyTime_t timeout; + int timeout_int; +#else + fd_set fds; + struct timeval tv; +#endif #ifdef WITH_THREAD /* must be called with the GIL held */ @@ -607,7 +615,7 @@ internal_select_ex(PySocketSockObject *s, int writing, double interval) #endif /* Nothing to do unless we're in timeout mode (not non-blocking) */ - if (s->sock_timeout <= 0.0) + if (s->sock_timeout <= 0) return 0; /* Guard against closed socket */ @@ -615,46 +623,40 @@ internal_select_ex(PySocketSockObject *s, int writing, double interval) return 0; /* Handling this condition here simplifies the select loops */ - if (interval < 0.0) + if (interval < 0) return 1; /* Prefer poll, if available, since you can poll() any fd * which can't be done with select(). */ #ifdef HAVE_POLL - { - struct pollfd pollfd; - int timeout; - - pollfd.fd = s->sock_fd; - pollfd.events = writing ? POLLOUT : POLLIN; + pollfd.fd = s->sock_fd; + pollfd.events = writing ? POLLOUT : POLLIN; - /* s->sock_timeout is in seconds, timeout in ms */ - timeout = (int)(interval * 1000 + 0.5); + /* s->sock_timeout is in seconds, timeout in ms */ + timeout = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_UP); + assert(timeout <= INT_MAX); + timeout_int = (int)timeout; - Py_BEGIN_ALLOW_THREADS; - n = poll(&pollfd, 1, timeout); - Py_END_ALLOW_THREADS; - } + Py_BEGIN_ALLOW_THREADS; + n = poll(&pollfd, 1, timeout_int); + Py_END_ALLOW_THREADS; #else - { - /* Construct the arguments to select */ - fd_set fds; - struct timeval tv; - tv.tv_sec = (int)interval; - tv.tv_usec = (int)((interval - tv.tv_sec) * 1e6); - FD_ZERO(&fds); - FD_SET(s->sock_fd, &fds); - - /* See if the socket is ready */ - Py_BEGIN_ALLOW_THREADS; - if (writing) - n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), - NULL, &fds, NULL, &tv); - else - n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), - &fds, NULL, NULL, &tv); - Py_END_ALLOW_THREADS; - } + /* conversion was already checked for overflow when + the timeout was set */ + (void)_PyTime_AsTimeval(interval, &tv, _PyTime_ROUND_UP); + + FD_ZERO(&fds); + FD_SET(s->sock_fd, &fds); + + /* See if the socket is ready */ + Py_BEGIN_ALLOW_THREADS; + if (writing) + n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), + NULL, &fds, NULL, &tv); + else + n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), + &fds, NULL, NULL, &tv); + Py_END_ALLOW_THREADS; #endif if (n < 0) @@ -694,14 +696,11 @@ internal_select(PySocketSockObject *s, int writing) #define BEGIN_SELECT_LOOP(s) \ { \ - _PyTime_timeval now, deadline = {0, 0}; \ - double interval = s->sock_timeout; \ - int has_timeout = s->sock_timeout > 0.0; \ - if (has_timeout) { \ - _PyTime_monotonic(&now); \ - deadline = now; \ - _PyTime_AddDouble(&deadline, s->sock_timeout, _PyTime_ROUND_UP); \ - } \ + _PyTime_t deadline = 0; \ + _PyTime_t interval = s->sock_timeout; \ + int has_timeout = (s->sock_timeout > 0); \ + if (has_timeout) \ + deadline = _PyTime_GetMonotonicClock() + interval; \ while (1) { \ errno = 0; \ @@ -709,14 +708,13 @@ internal_select(PySocketSockObject *s, int writing) if (!has_timeout || \ (!CHECK_ERRNO(EWOULDBLOCK) && !CHECK_ERRNO(EAGAIN))) \ break; \ - _PyTime_monotonic(&now); \ - interval = _PyTime_INTERVAL(now, deadline); \ + interval = deadline - _PyTime_GetMonotonicClock(); \ } \ } \ /* Initialize a new socket object. */ -static double defaulttimeout = -1.0; /* Default timeout for new sockets */ +static _PyTime_t defaulttimeout = -1; /* Default timeout for new sockets */ static void init_sockobject(PySocketSockObject *s, @@ -730,12 +728,12 @@ init_sockobject(PySocketSockObject *s, s->errorhandler = &set_error; #ifdef SOCK_NONBLOCK if (type & SOCK_NONBLOCK) - s->sock_timeout = 0.0; + s->sock_timeout = 0; else #endif { s->sock_timeout = defaulttimeout; - if (defaulttimeout >= 0.0) + if (defaulttimeout >= 0) internal_setblocking(s, 0); } @@ -2168,7 +2166,7 @@ sock_setblocking(PySocketSockObject *s, PyObject *arg) if (block == -1 && PyErr_Occurred()) return NULL; - s->sock_timeout = block ? -1.0 : 0.0; + s->sock_timeout = block ? -1 : 0; internal_setblocking(s, block); Py_INCREF(Py_None); @@ -2182,6 +2180,43 @@ Set the socket to blocking (flag is true) or non-blocking (false).\n\ setblocking(True) is equivalent to settimeout(None);\n\ setblocking(False) is equivalent to settimeout(0.0)."); +static int +socket_parse_timeout(_PyTime_t *timeout, PyObject *timeout_obj) +{ +#ifdef MS_WINDOWS + struct timeval tv; +#endif + int overflow = 0; + + if (timeout_obj == Py_None) { + *timeout = -1; + return 0; + } + + if (_PyTime_FromSecondsObject(timeout, timeout_obj, _PyTime_ROUND_UP) < 0) + return -1; + + if (*timeout < 0) { + PyErr_SetString(PyExc_ValueError, "Timeout value out of range"); + return -1; + } + +#ifdef MS_WINDOWS + overflow = (_PyTime_AsTimeval(timeout, &tv, _PyTime_ROUND_UP) < 0); +#endif +#ifndef HAVE_POLL + timeout = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_UP); + overflow = (timeout > INT_MAX); +#endif + if (overflow) { + PyErr_SetString(PyExc_OverflowError, + "timeout doesn't fit into C timeval"); + return -1; + } + + return 0; +} + /* s.settimeout(timeout) method. Argument: None -- no timeout, blocking mode; same as setblocking(True) 0.0 -- non-blocking mode; same as setblocking(False) @@ -2191,22 +2226,13 @@ setblocking(False) is equivalent to settimeout(0.0)."); static PyObject * sock_settimeout(PySocketSockObject *s, PyObject *arg) { - double timeout; + _PyTime_t timeout; - if (arg == Py_None) - timeout = -1.0; - else { - timeout = PyFloat_AsDouble(arg); - if (timeout < 0.0) { - if (!PyErr_Occurred()) - PyErr_SetString(PyExc_ValueError, - "Timeout value out of range"); - return NULL; - } - } + if (socket_parse_timeout(&timeout, arg) < 0) + return NULL; s->sock_timeout = timeout; - internal_setblocking(s, timeout < 0.0); + internal_setblocking(s, timeout < 0); Py_INCREF(Py_None); return Py_None; @@ -2225,12 +2251,14 @@ Setting a timeout of zero is the same as setblocking(0)."); static PyObject * sock_gettimeout(PySocketSockObject *s) { - if (s->sock_timeout < 0.0) { + if (s->sock_timeout < 0) { Py_INCREF(Py_None); return Py_None; } - else - return PyFloat_FromDouble(s->sock_timeout); + else { + double seconds = _PyTime_AsSecondsDouble(s->sock_timeout); + return PyFloat_FromDouble(seconds); + } } PyDoc_STRVAR(gettimeout_doc, @@ -2409,27 +2437,28 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, { int res, timeout; - timeout = 0; Py_BEGIN_ALLOW_THREADS res = connect(s->sock_fd, addr, addrlen); Py_END_ALLOW_THREADS - #ifdef MS_WINDOWS - if (s->sock_timeout > 0.0 + if (s->sock_timeout > 0 && res < 0 && WSAGetLastError() == WSAEWOULDBLOCK && IS_SELECTABLE(s)) { /* This is a mess. Best solution: trust select */ fd_set fds; fd_set fds_exc; struct timeval tv; + int conv; + + /* conversion was already checked for overflow when + the timeout was set */ + (void)_PyTime_AsTimeval(s->sock_timeout, &tv, _PyTime_ROUND_UP); Py_BEGIN_ALLOW_THREADS - tv.tv_sec = (int)s->sock_timeout; - tv.tv_usec = (int)((s->sock_timeout - tv.tv_sec) * 1e6); FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); FD_ZERO(&fds_exc); @@ -2469,7 +2498,7 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, #else - if (s->sock_timeout > 0.0 + if (s->sock_timeout > 0 && res < 0 && errno == EINPROGRESS && IS_SELECTABLE(s)) { timeout = internal_select(s, 1); @@ -2498,6 +2527,7 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, #endif *timeoutp = timeout; + assert(res >= 0); return res; } @@ -2520,8 +2550,11 @@ sock_connect(PySocketSockObject *s, PyObject *addro) PyErr_SetString(socket_timeout, "timed out"); return NULL; } - if (res != 0) + if (res < 0) + return NULL; + if (res != 0) { return s->errorhandler(); + } Py_INCREF(Py_None); return Py_None; } @@ -2548,6 +2581,9 @@ sock_connect_ex(PySocketSockObject *s, PyObject *addro) res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); + if (res < 0) + return NULL; + /* Signals are not errors (though they may raise exceptions). Adapted from PyErr_SetFromErrnoWithFilenameObject(). */ if (res == EINTR && PyErr_CheckSignals()) @@ -3967,10 +4003,14 @@ static PyMemberDef sock_memberlist[] = { {"family", T_INT, offsetof(PySocketSockObject, sock_family), READONLY, "the socket family"}, {"type", T_INT, offsetof(PySocketSockObject, sock_type), READONLY, "the socket type"}, {"proto", T_INT, offsetof(PySocketSockObject, sock_proto), READONLY, "the socket protocol"}, - {"timeout", T_DOUBLE, offsetof(PySocketSockObject, sock_timeout), READONLY, "the socket timeout"}, {0}, }; +static PyGetSetDef sock_getsetlist[] = { + {"timeout", (getter)sock_gettimeout, NULL, PyDoc_STR("the socket timeout")}, + {NULL} /* sentinel */ +}; + /* Deallocate a socket object in response to the last Py_DECREF(). First close the file description. */ @@ -4034,7 +4074,7 @@ sock_new(PyTypeObject *type, PyObject *args, PyObject *kwds) new = type->tp_alloc(type, 0); if (new != NULL) { ((PySocketSockObject *)new)->sock_fd = -1; - ((PySocketSockObject *)new)->sock_timeout = -1.0; + ((PySocketSockObject *)new)->sock_timeout = -1; ((PySocketSockObject *)new)->errorhandler = &set_error; } return new; @@ -4217,7 +4257,7 @@ static PyTypeObject sock_type = { 0, /* tp_iternext */ sock_methods, /* tp_methods */ sock_memberlist, /* tp_members */ - 0, /* tp_getset */ + sock_getsetlist, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ @@ -5540,12 +5580,14 @@ Get host and port for a sockaddr."); static PyObject * socket_getdefaulttimeout(PyObject *self) { - if (defaulttimeout < 0.0) { + if (defaulttimeout < 0) { Py_INCREF(Py_None); return Py_None; } - else - return PyFloat_FromDouble(defaulttimeout); + else { + double seconds = _PyTime_AsSecondsDouble(defaulttimeout); + return PyFloat_FromDouble(seconds); + } } PyDoc_STRVAR(getdefaulttimeout_doc, @@ -5558,19 +5600,10 @@ When the socket module is first imported, the default is None."); static PyObject * socket_setdefaulttimeout(PyObject *self, PyObject *arg) { - double timeout; + _PyTime_t timeout; - if (arg == Py_None) - timeout = -1.0; - else { - timeout = PyFloat_AsDouble(arg); - if (timeout < 0.0) { - if (!PyErr_Occurred()) - PyErr_SetString(PyExc_ValueError, - "Timeout value out of range"); - return NULL; - } - } + if (socket_parse_timeout(&timeout, arg) < 0) + return NULL; defaulttimeout = timeout; diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h index 4b6a10e85a..3cce927e0b 100644 --- a/Modules/socketmodule.h +++ b/Modules/socketmodule.h @@ -174,7 +174,7 @@ typedef struct { PyObject *(*errorhandler)(void); /* Error handler; checks errno, returns NULL and sets a Python exception */ - double sock_timeout; /* Operation timeout in seconds; + _PyTime_t sock_timeout; /* Operation timeout in seconds; 0.0 means non-blocking */ } PySocketSockObject; -- cgit v1.2.1 From fda63550b557a0381457402966f813ecd972d9d9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 28 Mar 2015 03:00:46 +0100 Subject: Issue #22117: Fix ssl to use _PyTime_t API on sock_timeout I didn't notice that the ssl module uses private attributes of socket objects. --- Modules/_ssl.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index be6fca3c67..54f5d140ed 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -534,7 +534,7 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, /* If the socket is in non-blocking mode or timeout mode, set the BIO * to non-blocking mode (blocking is the default) */ - if (sock && sock->sock_timeout >= 0.0) { + if (sock && sock->sock_timeout >= 0) { BIO_set_nbio(SSL_get_rbio(self->ssl), 1); BIO_set_nbio(SSL_get_wbio(self->ssl), 1); } @@ -576,7 +576,7 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self) Py_INCREF(sock); /* just in case the blocking state of the socket has been changed */ - nonblocking = (sock->sock_timeout >= 0.0); + nonblocking = (sock->sock_timeout >= 0); BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); } @@ -1616,9 +1616,9 @@ check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) int rc; /* Nothing to do unless we're in timeout mode (not non-blocking) */ - if ((s == NULL) || (s->sock_timeout == 0.0)) + if ((s == NULL) || (s->sock_timeout == 0)) return SOCKET_IS_NONBLOCKING; - else if (s->sock_timeout < 0.0) + else if (s->sock_timeout < 0) return SOCKET_IS_BLOCKING; /* Guard against closed socket */ @@ -1636,7 +1636,9 @@ check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) pollfd.events = writing ? POLLOUT : POLLIN; /* s->sock_timeout is in seconds, timeout in ms */ - timeout = (int)(s->sock_timeout * 1000 + 0.5); + timeout = (int)_PyTime_AsMilliseconds(s->sock_timeout, + _PyTime_ROUND_UP); + PySSL_BEGIN_ALLOW_THREADS rc = poll(&pollfd, 1, timeout); PySSL_END_ALLOW_THREADS @@ -1649,9 +1651,10 @@ check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) if (!_PyIsSelectable_fd(s->sock_fd)) return SOCKET_TOO_LARGE_FOR_SELECT; - /* Construct the arguments to select */ - tv.tv_sec = (int)s->sock_timeout; - tv.tv_usec = (int)((s->sock_timeout - tv.tv_sec) * 1e6); + /* conversion was already checked for overflow when + the timeout was set */ + (void)_PyTime_AsTimeval(s->sock_timeout, &tv, _PyTime_ROUND_UP); + FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); @@ -1704,7 +1707,7 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) if (sock != NULL) { /* just in case the blocking state of the socket has been changed */ - nonblocking = (sock->sock_timeout >= 0.0); + nonblocking = (sock->sock_timeout >= 0); BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); } @@ -1836,7 +1839,7 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) if (sock != NULL) { /* just in case the blocking state of the socket has been changed */ - nonblocking = (sock->sock_timeout >= 0.0); + nonblocking = (sock->sock_timeout >= 0); BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); } @@ -1915,7 +1918,7 @@ static PyObject *PySSL_SSLshutdown(PySSLSocket *self) Py_INCREF(sock); /* Just in case the blocking state of the socket has been changed */ - nonblocking = (sock->sock_timeout >= 0.0); + nonblocking = (sock->sock_timeout >= 0); BIO_set_nbio(SSL_get_rbio(self->ssl), nonblocking); BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); } -- cgit v1.2.1 From a760a78975cb1670cad04e9a4ca5e62584758a03 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 28 Mar 2015 03:52:05 +0100 Subject: Issue #22117: The thread module uses the new _PyTime_t timestamp API Add also a new _PyTime_AsMicroseconds() function. threading.TIMEOUT_MAX is now be smaller: only 292 years instead of 292,271 years on 64-bit system for example. Sorry, your threads will hang a *little bit* shorter. Call me if you want to ensure that your locks wait longer, I can share some tricks with you. --- Modules/_threadmodule.c | 139 ++++++++++++++++++++++-------------------------- 1 file changed, 64 insertions(+), 75 deletions(-) (limited to 'Modules') diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 8f59e036b9..07b01f09c4 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -49,21 +49,18 @@ lock_dealloc(lockobject *self) * timeout. */ static PyLockStatus -acquire_timed(PyThread_type_lock lock, PY_TIMEOUT_T microseconds) +acquire_timed(PyThread_type_lock lock, _PyTime_t timeout) { PyLockStatus r; - _PyTime_timeval curtime; - _PyTime_timeval endtime; - - - if (microseconds > 0) { - _PyTime_monotonic(&endtime); - endtime.tv_sec += microseconds / (1000 * 1000); - endtime.tv_usec += microseconds % (1000 * 1000); - } + _PyTime_t endtime = 0; + _PyTime_t microseconds; + if (timeout > 0) + endtime = _PyTime_GetMonotonicClock() + timeout; do { + microseconds = _PyTime_AsMicroseconds(timeout, _PyTime_ROUND_UP); + /* first a simple non-blocking try without releasing the GIL */ r = PyThread_acquire_lock_timed(lock, 0, 0); if (r == PY_LOCK_FAILURE && microseconds != 0) { @@ -82,14 +79,12 @@ acquire_timed(PyThread_type_lock lock, PY_TIMEOUT_T microseconds) /* If we're using a timeout, recompute the timeout after processing * signals, since those can take time. */ - if (microseconds > 0) { - _PyTime_monotonic(&curtime); - microseconds = ((endtime.tv_sec - curtime.tv_sec) * 1000000 + - (endtime.tv_usec - curtime.tv_usec)); + if (timeout > 0) { + timeout = endtime - _PyTime_GetMonotonicClock(); /* Check for negative values, since those mean block forever. */ - if (microseconds <= 0) { + if (timeout <= 0) { r = PY_LOCK_FAILURE; } } @@ -99,44 +94,60 @@ acquire_timed(PyThread_type_lock lock, PY_TIMEOUT_T microseconds) return r; } -static PyObject * -lock_PyThread_acquire_lock(lockobject *self, PyObject *args, PyObject *kwds) +static int +lock_acquire_parse_args(PyObject *args, PyObject *kwds, + _PyTime_t *timeout) { char *kwlist[] = {"blocking", "timeout", NULL}; int blocking = 1; - double timeout = -1; - PY_TIMEOUT_T microseconds; - PyLockStatus r; + PyObject *timeout_obj = NULL; + const _PyTime_t unset_timeout = _PyTime_FromNanoseconds(-1000000000); - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|id:acquire", kwlist, - &blocking, &timeout)) - return NULL; + *timeout = unset_timeout ; - if (!blocking && timeout != -1) { - PyErr_SetString(PyExc_ValueError, "can't specify a timeout " - "for a non-blocking call"); - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|iO:acquire", kwlist, + &blocking, &timeout_obj)) + return -1; + + if (timeout_obj + && _PyTime_FromSecondsObject(timeout, timeout_obj, _PyTime_ROUND_UP) < 0) + return -1; + + if (!blocking && *timeout != unset_timeout ) { + PyErr_SetString(PyExc_ValueError, + "can't specify a timeout for a non-blocking call"); + return -1; } - if (timeout < 0 && timeout != -1) { - PyErr_SetString(PyExc_ValueError, "timeout value must be " - "strictly positive"); - return NULL; + if (*timeout < 0 && *timeout != unset_timeout) { + PyErr_SetString(PyExc_ValueError, + "timeout value must be positive"); + return -1; } if (!blocking) - microseconds = 0; - else if (timeout == -1) - microseconds = -1; - else { - timeout *= 1e6; - if (timeout >= (double) PY_TIMEOUT_MAX) { + *timeout = 0; + else if (*timeout != unset_timeout) { + _PyTime_t microseconds; + + microseconds = _PyTime_AsMicroseconds(*timeout, _PyTime_ROUND_UP); + if (microseconds >= PY_TIMEOUT_MAX) { PyErr_SetString(PyExc_OverflowError, "timeout value is too large"); - return NULL; + return -1; } - microseconds = (PY_TIMEOUT_T) timeout; } + return 0; +} + +static PyObject * +lock_PyThread_acquire_lock(lockobject *self, PyObject *args, PyObject *kwds) +{ + _PyTime_t timeout; + PyLockStatus r; - r = acquire_timed(self->lock_lock, microseconds); + if (lock_acquire_parse_args(args, kwds, &timeout) < 0) + return NULL; + + r = acquire_timed(self->lock_lock, timeout); if (r == PY_LOCK_INTR) { return NULL; } @@ -281,41 +292,13 @@ rlock_dealloc(rlockobject *self) static PyObject * rlock_acquire(rlockobject *self, PyObject *args, PyObject *kwds) { - char *kwlist[] = {"blocking", "timeout", NULL}; - int blocking = 1; - double timeout = -1; - PY_TIMEOUT_T microseconds; + _PyTime_t timeout; long tid; PyLockStatus r = PY_LOCK_ACQUIRED; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|id:acquire", kwlist, - &blocking, &timeout)) + if (lock_acquire_parse_args(args, kwds, &timeout) < 0) return NULL; - if (!blocking && timeout != -1) { - PyErr_SetString(PyExc_ValueError, "can't specify a timeout " - "for a non-blocking call"); - return NULL; - } - if (timeout < 0 && timeout != -1) { - PyErr_SetString(PyExc_ValueError, "timeout value must be " - "strictly positive"); - return NULL; - } - if (!blocking) - microseconds = 0; - else if (timeout == -1) - microseconds = -1; - else { - timeout *= 1e6; - if (timeout >= (double) PY_TIMEOUT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "timeout value is too large"); - return NULL; - } - microseconds = (PY_TIMEOUT_T) timeout; - } - tid = PyThread_get_thread_ident(); if (self->rlock_count > 0 && tid == self->rlock_owner) { unsigned long count = self->rlock_count + 1; @@ -327,7 +310,7 @@ rlock_acquire(rlockobject *self, PyObject *args, PyObject *kwds) self->rlock_count = count; Py_RETURN_TRUE; } - r = acquire_timed(self->rlock_lock, microseconds); + r = acquire_timed(self->rlock_lock, timeout); if (r == PY_LOCK_ACQUIRED) { assert(self->rlock_count == 0); self->rlock_owner = tid; @@ -1362,7 +1345,9 @@ static struct PyModuleDef threadmodule = { PyMODINIT_FUNC PyInit__thread(void) { - PyObject *m, *d, *timeout_max; + PyObject *m, *d, *v; + double time_max; + double timeout_max; /* Initialize types: */ if (PyType_Ready(&localdummytype) < 0) @@ -1379,10 +1364,14 @@ PyInit__thread(void) if (m == NULL) return NULL; - timeout_max = PyFloat_FromDouble(PY_TIMEOUT_MAX / 1000000); - if (!timeout_max) + timeout_max = PY_TIMEOUT_MAX / 1000000; + time_max = floor(_PyTime_AsSecondsDouble(_PyTime_MAX)); + timeout_max = Py_MIN(timeout_max, time_max); + + v = PyFloat_FromDouble(timeout_max); + if (!v) return NULL; - if (PyModule_AddObject(m, "TIMEOUT_MAX", timeout_max) < 0) + if (PyModule_AddObject(m, "TIMEOUT_MAX", v) < 0) return NULL; /* Add a symbolic constant */ -- cgit v1.2.1 From 92ab17f9200c135ec9d951e734c02ed57a77d803 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 28 Mar 2015 05:07:51 +0100 Subject: Issue #22117: Use the new _PyTime_t API in the select module --- Modules/selectmodule.c | 59 +++++++++++++++++--------------------------------- 1 file changed, 20 insertions(+), 39 deletions(-) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index a65af2ff34..2c82ce7549 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -206,38 +206,17 @@ select_select(PyObject *self, PyObject *args) if (tout == Py_None) tvp = (struct timeval *)0; - else if (!PyNumber_Check(tout)) { - PyErr_SetString(PyExc_TypeError, - "timeout must be a float or None"); - return NULL; - } else { - /* On OpenBSD 5.4, timeval.tv_sec is a long. - * Example: long is 64-bit, whereas time_t is 32-bit. */ - time_t sec; - /* On OS X 64-bit, timeval.tv_usec is an int (and thus still 4 - bytes as required), but no longer defined by a long. */ - long usec; - if (_PyTime_ObjectToTimeval(tout, &sec, &usec, - _PyTime_ROUND_UP) == -1) - return NULL; -#ifdef MS_WINDOWS - /* On Windows, timeval.tv_sec is a long (32 bit), - * whereas time_t can be 64-bit. */ - assert(sizeof(tv.tv_sec) == sizeof(long)); -#if SIZEOF_TIME_T > SIZEOF_LONG - if (sec > LONG_MAX) { - PyErr_SetString(PyExc_OverflowError, - "timeout is too large"); + _PyTime_t ts; + + if (_PyTime_FromSecondsObject(&ts, tout, _PyTime_ROUND_UP) < 0) { + PyErr_SetString(PyExc_TypeError, + "timeout must be a float or None"); return NULL; } -#endif - tv.tv_sec = (long)sec; -#else - assert(sizeof(tv.tv_sec) >= sizeof(sec)); - tv.tv_sec = sec; -#endif - tv.tv_usec = usec; + + if (_PyTime_AsTimeval(ts, &tv, _PyTime_ROUND_UP) == -1) + return NULL; if (tv.tv_sec < 0) { PyErr_SetString(PyExc_ValueError, "timeout must be non-negative"); return NULL; @@ -2032,9 +2011,18 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) if (otimeout == Py_None || otimeout == NULL) { ptimeoutspec = NULL; } - else if (PyNumber_Check(otimeout)) { - if (_PyTime_ObjectToTimespec(otimeout, &timeout.tv_sec, - &timeout.tv_nsec, _PyTime_ROUND_UP) == -1) + else { + _PyTime_t ts; + + if (_PyTime_FromSecondsObject(&ts, otimeout, _PyTime_ROUND_UP) < 0) { + PyErr_Format(PyExc_TypeError, + "timeout argument must be an number " + "or None, got %.200s", + Py_TYPE(otimeout)->tp_name); + return NULL; + } + + if (_PyTime_AsTimespec(ts, &timeout) == -1) return NULL; if (timeout.tv_sec < 0) { @@ -2044,13 +2032,6 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) } ptimeoutspec = &timeout; } - else { - PyErr_Format(PyExc_TypeError, - "timeout argument must be an number " - "or None, got %.200s", - Py_TYPE(otimeout)->tp_name); - return NULL; - } if (ch != NULL && ch != Py_None) { it = PyObject_GetIter(ch); -- cgit v1.2.1 From 1d90b89bca58066016225d3ed721c167597a0ee5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 28 Mar 2015 04:09:41 +0100 Subject: Issue #22117: Use the _PyTime_t API for time.clock_settime() Remove also the now unused _PyTime_AddDouble() function. --- Modules/timemodule.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 21e6f433ff..3178fcbf03 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -166,18 +166,18 @@ time_clock_settime(PyObject *self, PyObject *args) { int clk_id; PyObject *obj; - time_t tv_sec; - long tv_nsec; + _PyTime_t t; struct timespec tp; int ret; if (!PyArg_ParseTuple(args, "iO:clock_settime", &clk_id, &obj)) return NULL; - if (_PyTime_ObjectToTimespec(obj, &tv_sec, &tv_nsec, _PyTime_ROUND_DOWN) == -1) + if (_PyTime_FromSecondsObject(&t, obj, _PyTime_ROUND_DOWN) < 0) + return NULL; + + if (_PyTime_AsTimespec(t, &tp) == -1) return NULL; - tp.tv_sec = tv_sec; - tp.tv_nsec = tv_nsec; ret = clock_settime((clockid_t)clk_id, &tp); if (ret != 0) { -- cgit v1.2.1 From 3a5ed718f1eb432c73a069291247f6297ed2d324 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 28 Mar 2015 05:02:39 +0100 Subject: Issue #22117: Add the new _PyTime_ROUND_FLOOR rounding method for the datetime module. time.clock_settime() now uses this rounding method instead of _PyTime_ROUND_DOWN to handle correctly dates before 1970. --- Modules/_testcapimodule.c | 3 ++- Modules/timemodule.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 4503dc384f..5c54ad6785 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2634,7 +2634,8 @@ run_in_subinterp(PyObject *self, PyObject *args) static int check_time_rounding(int round) { - if (round != _PyTime_ROUND_DOWN && round != _PyTime_ROUND_UP) { + if (round != _PyTime_ROUND_DOWN && round != _PyTime_ROUND_UP + && round != _PyTime_ROUND_FLOOR) { PyErr_SetString(PyExc_ValueError, "invalid rounding"); return -1; } diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 3178fcbf03..99e83cc6dc 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -173,7 +173,7 @@ time_clock_settime(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "iO:clock_settime", &clk_id, &obj)) return NULL; - if (_PyTime_FromSecondsObject(&t, obj, _PyTime_ROUND_DOWN) < 0) + if (_PyTime_FromSecondsObject(&t, obj, _PyTime_ROUND_FLOOR) < 0) return NULL; if (_PyTime_AsTimespec(t, &tp) == -1) @@ -322,7 +322,7 @@ parse_time_t_args(PyObject *args, char *format, time_t *pwhen) whent = time(NULL); } else { - if (_PyTime_ObjectToTime_t(ot, &whent, _PyTime_ROUND_DOWN) == -1) + if (_PyTime_ObjectToTime_t(ot, &whent, _PyTime_ROUND_FLOOR) == -1) return 0; } *pwhen = whent; -- cgit v1.2.1 From 597129aa767877a4b551a2dfc197a496fc28fd15 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 29 Mar 2015 19:12:58 +0300 Subject: Removed unintentional trailing spaces in text files. --- Modules/makesetup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/makesetup b/Modules/makesetup index 8b5cc28bba..90db42e4b2 100755 --- a/Modules/makesetup +++ b/Modules/makesetup @@ -266,7 +266,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | *) sed -e " 1i$NL/* Generated automatically from $config by makesetup. */ /MARKER 1/i$NL$EXTDECLS - + /MARKER 2/i$NL$INITBITS " $config >config.c -- cgit v1.2.1 From e515d21e6c1162a31ed92383ed132f53264e9ced Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 30 Mar 2015 01:01:48 +0300 Subject: Issue #14260: The groupindex attribute of regular expression pattern object now is non-modifiable mapping. --- Modules/_sre.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 83eb96376a..8cad1ac270 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -1384,12 +1384,24 @@ static PyMethodDef pattern_methods[] = { {NULL, NULL} }; +/* PatternObject's 'groupindex' method. */ +static PyObject * +pattern_groupindex(PatternObject *self) +{ + return PyDictProxy_New(self->groupindex); +} + +static PyGetSetDef pattern_getset[] = { + {"groupindex", (getter)pattern_groupindex, (setter)NULL, + "A dictionary mapping group names to group numbers."}, + {NULL} /* Sentinel */ +}; + #define PAT_OFF(x) offsetof(PatternObject, x) static PyMemberDef pattern_members[] = { {"pattern", T_OBJECT, PAT_OFF(pattern), READONLY}, {"flags", T_INT, PAT_OFF(flags), READONLY}, {"groups", T_PYSSIZET, PAT_OFF(groups), READONLY}, - {"groupindex", T_OBJECT, PAT_OFF(groupindex), READONLY}, {NULL} /* Sentinel */ }; @@ -1422,6 +1434,7 @@ static PyTypeObject Pattern_Type = { 0, /* tp_iternext */ pattern_methods, /* tp_methods */ pattern_members, /* tp_members */ + pattern_getset, /* tp_getset */ }; static int _validate(PatternObject *self); /* Forward */ -- cgit v1.2.1 From ccf5983e6847a096b3a22191e2d2420cf50b4a30 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 00:09:18 +0200 Subject: Issue #22117: Use the _PyTime_t API in _datetime.datetime() constructor * Remove _PyTime_gettimeofday() * Add _PyTime_GetSystemClock() --- Modules/_datetimemodule.c | 18 ++++++++++++++---- Modules/_testcapimodule.c | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 09285d919d..c3e54f7af4 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -7,6 +7,10 @@ #include +#ifdef MS_WINDOWS +# include /* struct timeval */ +#endif + /* Differentiate between building the core module and building extension * modules. */ @@ -4093,6 +4097,8 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp, if (_PyTime_ObjectToTimeval(timestamp, &timet, &us, _PyTime_ROUND_DOWN) == -1) return NULL; + assert(0 <= us && us <= 999999); + return datetime_from_timet_and_us(cls, f, timet, (int)us, tzinfo); } @@ -4103,10 +4109,14 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp, static PyObject * datetime_best_possible(PyObject *cls, TM_FUNC f, PyObject *tzinfo) { - _PyTime_timeval t; - _PyTime_gettimeofday(&t); - return datetime_from_timet_and_us(cls, f, t.tv_sec, (int)t.tv_usec, - tzinfo); + _PyTime_t ts = _PyTime_GetSystemClock(); + struct timeval tv; + + if (_PyTime_AsTimeval(ts, &tv, _PyTime_ROUND_FLOOR) < 0) + return NULL; + assert(0 <= tv.tv_usec && tv.tv_usec <= 999999); + + return datetime_from_timet_and_us(cls, f, tv.tv_sec, tv.tv_usec, tzinfo); } /*[clinic input] diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 5c54ad6785..9abb7ccd19 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -15,7 +15,7 @@ #include #ifdef MS_WINDOWS -# include +# include /* struct timeval */ #endif #ifdef WITH_THREAD -- cgit v1.2.1 From f2ff10da637321a1fa9c85858539464624690a09 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 01:02:57 +0200 Subject: Issue #22117: Fix os.utime(), it now rounds the timestamp towards minus infinity (-inf) instead of rounding towards zero. Replace _PyTime_ROUND_DOWN with _PyTime_ROUND_FLOOR. --- Modules/posixmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 9a44d46975..801305f535 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -6127,9 +6127,9 @@ os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, } utime.now = 0; if (_PyTime_ObjectToTimespec(PyTuple_GET_ITEM(times, 0), - &a_sec, &a_nsec, _PyTime_ROUND_DOWN) == -1 || + &a_sec, &a_nsec, _PyTime_ROUND_FLOOR) == -1 || _PyTime_ObjectToTimespec(PyTuple_GET_ITEM(times, 1), - &m_sec, &m_nsec, _PyTime_ROUND_DOWN) == -1) { + &m_sec, &m_nsec, _PyTime_ROUND_FLOOR) == -1) { goto exit; } utime.atime_s = a_sec; -- cgit v1.2.1 From 3f7da81b26732e42db4b97345e108a1dd4d317a4 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 01:10:14 +0200 Subject: Issue #22117: Fix rounding of fromtimestamp() methods of datetime.datetime and datetime.time: round towards minus infinity ("floor") instead of rounding towards zero ("down"). --- Modules/_datetimemodule.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index c3e54f7af4..ab2acae662 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -2463,7 +2463,7 @@ date_local_from_object(PyObject *cls, PyObject *obj) struct tm *tm; time_t t; - if (_PyTime_ObjectToTime_t(obj, &t, _PyTime_ROUND_DOWN) == -1) + if (_PyTime_ObjectToTime_t(obj, &t, _PyTime_ROUND_FLOOR) == -1) return NULL; tm = localtime(&t); @@ -4095,7 +4095,8 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp, time_t timet; long us; - if (_PyTime_ObjectToTimeval(timestamp, &timet, &us, _PyTime_ROUND_DOWN) == -1) + if (_PyTime_ObjectToTimeval(timestamp, + &timet, &us, _PyTime_ROUND_FLOOR) == -1) return NULL; assert(0 <= us && us <= 999999); -- cgit v1.2.1 From 62946f3e658f38509b31b4f1e0c8ad7833d77680 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 02:18:31 +0200 Subject: Issue #23694: Fix usage of _Py_open() in the _posixsubprocess module Don't call _Py_open() from _close_open_fds_safe() because it is call just after fork(). It's not good to play with locks (the GIL) between fork() and exec(). Use instead _Py_open_noraise() which doesn't touch to the GIL. --- Modules/_posixsubprocess.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index a33df211e9..0b385a1ab1 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -254,10 +254,9 @@ _close_open_fds_safe(int start_fd, PyObject* py_fds_to_keep) { int fd_dir_fd; - fd_dir_fd = _Py_open(FD_DIR, O_RDONLY); + fd_dir_fd = _Py_open_noraise(FD_DIR, O_RDONLY); if (fd_dir_fd == -1) { /* No way to get a list of open fds. */ - PyErr_Clear(); _close_fds_by_brute_force(start_fd, py_fds_to_keep); return; } else { -- cgit v1.2.1 From e86873f59ff36f88f82bc885cf7bc052dee22a15 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 02:51:13 +0200 Subject: Issue #22117: Fix usage of _PyTime_AsTimeval() Add _PyTime_AsTimeval_noraise() function. Call it when it's not possible (or not useful) to raise a Python exception on overflow. --- Modules/_ssl.c | 4 +--- Modules/_testcapimodule.c | 5 +---- Modules/socketmodule.c | 8 ++------ Modules/timemodule.c | 5 +---- 4 files changed, 5 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 54f5d140ed..217c77c593 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1651,9 +1651,7 @@ check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) if (!_PyIsSelectable_fd(s->sock_fd)) return SOCKET_TOO_LARGE_FOR_SELECT; - /* conversion was already checked for overflow when - the timeout was set */ - (void)_PyTime_AsTimeval(s->sock_timeout, &tv, _PyTime_ROUND_UP); + _PyTime_AsTimeval_noraise(s->sock_timeout, &tv, _PyTime_ROUND_UP); FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 9abb7ccd19..128ba094b2 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3427,11 +3427,8 @@ test_PyTime_AsTimeval(PyObject *self, PyObject *args) if (check_time_rounding(round) < 0) return NULL; t = _PyTime_FromNanoseconds(ns); - if (_PyTime_AsTimeval(t, &tv, round) < 0) { - PyErr_SetString(PyExc_OverflowError, - "timeout doesn't fit into C timeval"); + if (_PyTime_AsTimeval(t, &tv, round) < 0) return NULL; - } seconds = PyLong_FromLong((PY_LONG_LONG)tv.tv_sec); if (seconds == NULL) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 93dcd41948..513405e507 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -641,9 +641,7 @@ internal_select_ex(PySocketSockObject *s, int writing, _PyTime_t interval) n = poll(&pollfd, 1, timeout_int); Py_END_ALLOW_THREADS; #else - /* conversion was already checked for overflow when - the timeout was set */ - (void)_PyTime_AsTimeval(interval, &tv, _PyTime_ROUND_UP); + _PyTime_AsTimeval_noraise(interval, &tv, _PyTime_ROUND_UP); FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); @@ -2454,9 +2452,7 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, struct timeval tv; int conv; - /* conversion was already checked for overflow when - the timeout was set */ - (void)_PyTime_AsTimeval(s->sock_timeout, &tv, _PyTime_ROUND_UP); + _PyTime_AsTimeval_noraise(s->sock_timeout, &tv, _PyTime_ROUND_UP); Py_BEGIN_ALLOW_THREADS FD_ZERO(&fds); diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 99e83cc6dc..3ed3fb31bd 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1405,11 +1405,8 @@ pysleep(_PyTime_t secs) do { #ifndef MS_WINDOWS - if (_PyTime_AsTimeval(secs, &timeout, _PyTime_ROUND_UP) < 0) { - PyErr_SetString(PyExc_OverflowError, - "delay doesn't fit into C timeval"); + if (_PyTime_AsTimeval(secs, &timeout, _PyTime_ROUND_UP) < 0) return -1; - } Py_BEGIN_ALLOW_THREADS err = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout); -- cgit v1.2.1 From 87f62f6ed268dea48663d7e806f34ff958bea7b5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 03:21:06 +0200 Subject: Issue #23752: When built from an existing file descriptor, io.FileIO() now only calls fstat() once. Before fstat() was called twice, which was not necessary. --- Modules/_io/fileio.c | 24 ------------------------ 1 file changed, 24 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index b35a51b4e1..595f99ee85 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -177,28 +177,6 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return (PyObject *) self; } -static int -check_fd(int fd) -{ - struct _Py_stat_struct buf; - if (_Py_fstat(fd, &buf) < 0 && -#ifdef MS_WINDOWS - GetLastError() == ERROR_INVALID_HANDLE -#else - errno == EBADF -#endif - ) { - PyObject *exc; - char *msg = strerror(EBADF); - exc = PyObject_CallFunction(PyExc_OSError, "(is)", - EBADF, msg); - PyErr_SetObject(PyExc_OSError, exc); - Py_XDECREF(exc); - return -1; - } - return 0; -} - #ifdef O_CLOEXEC extern int _Py_open_cloexec_works; #endif @@ -355,8 +333,6 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) #endif if (fd >= 0) { - if (check_fd(fd)) - goto error; self->fd = fd; self->closefd = closefd; } -- cgit v1.2.1 From 1e66db2443e7a814d39e2f2f7c252c310fb736cf Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 03:52:49 +0200 Subject: Issue #22117: Add _PyTime_ROUND_CEILING rounding method for timestamps Add also more tests for ROUNd_FLOOR. --- Modules/_testcapimodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 128ba094b2..25f916beb9 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2635,7 +2635,7 @@ static int check_time_rounding(int round) { if (round != _PyTime_ROUND_DOWN && round != _PyTime_ROUND_UP - && round != _PyTime_ROUND_FLOOR) { + && round != _PyTime_ROUND_FLOOR && round != _PyTime_ROUND_CEILING) { PyErr_SetString(PyExc_ValueError, "invalid rounding"); return -1; } -- cgit v1.2.1 From a825c9b4f6603a8d88aecbb0b847736aaacf6d3e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 03:49:14 +0200 Subject: Issue #22117: Replace usage of _PyTime_ROUND_UP with _PyTime_ROUND_CEILING All these functions only accept positive timeouts, so this change has no effect in practice. --- Modules/_ssl.c | 4 ++-- Modules/_threadmodule.c | 7 ++++--- Modules/selectmodule.c | 7 ++++--- Modules/signalmodule.c | 3 ++- Modules/socketmodule.c | 13 +++++++------ Modules/timemodule.c | 6 +++--- 6 files changed, 22 insertions(+), 18 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 217c77c593..3c909a6a3a 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1637,7 +1637,7 @@ check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) /* s->sock_timeout is in seconds, timeout in ms */ timeout = (int)_PyTime_AsMilliseconds(s->sock_timeout, - _PyTime_ROUND_UP); + _PyTime_ROUND_CEILING); PySSL_BEGIN_ALLOW_THREADS rc = poll(&pollfd, 1, timeout); @@ -1651,7 +1651,7 @@ check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) if (!_PyIsSelectable_fd(s->sock_fd)) return SOCKET_TOO_LARGE_FOR_SELECT; - _PyTime_AsTimeval_noraise(s->sock_timeout, &tv, _PyTime_ROUND_UP); + _PyTime_AsTimeval_noraise(s->sock_timeout, &tv, _PyTime_ROUND_CEILING); FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 07b01f09c4..0907aa0eb2 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -59,7 +59,7 @@ acquire_timed(PyThread_type_lock lock, _PyTime_t timeout) endtime = _PyTime_GetMonotonicClock() + timeout; do { - microseconds = _PyTime_AsMicroseconds(timeout, _PyTime_ROUND_UP); + microseconds = _PyTime_AsMicroseconds(timeout, _PyTime_ROUND_CEILING); /* first a simple non-blocking try without releasing the GIL */ r = PyThread_acquire_lock_timed(lock, 0, 0); @@ -110,7 +110,8 @@ lock_acquire_parse_args(PyObject *args, PyObject *kwds, return -1; if (timeout_obj - && _PyTime_FromSecondsObject(timeout, timeout_obj, _PyTime_ROUND_UP) < 0) + && _PyTime_FromSecondsObject(timeout, + timeout_obj, _PyTime_ROUND_CEILING) < 0) return -1; if (!blocking && *timeout != unset_timeout ) { @@ -128,7 +129,7 @@ lock_acquire_parse_args(PyObject *args, PyObject *kwds, else if (*timeout != unset_timeout) { _PyTime_t microseconds; - microseconds = _PyTime_AsMicroseconds(*timeout, _PyTime_ROUND_UP); + microseconds = _PyTime_AsMicroseconds(*timeout, _PyTime_ROUND_CEILING); if (microseconds >= PY_TIMEOUT_MAX) { PyErr_SetString(PyExc_OverflowError, "timeout value is too large"); diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 2c82ce7549..a8523440a9 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -209,13 +209,13 @@ select_select(PyObject *self, PyObject *args) else { _PyTime_t ts; - if (_PyTime_FromSecondsObject(&ts, tout, _PyTime_ROUND_UP) < 0) { + if (_PyTime_FromSecondsObject(&ts, tout, _PyTime_ROUND_CEILING) < 0) { PyErr_SetString(PyExc_TypeError, "timeout must be a float or None"); return NULL; } - if (_PyTime_AsTimeval(ts, &tv, _PyTime_ROUND_UP) == -1) + if (_PyTime_AsTimeval(ts, &tv, _PyTime_ROUND_CEILING) == -1) return NULL; if (tv.tv_sec < 0) { PyErr_SetString(PyExc_ValueError, "timeout must be non-negative"); @@ -2014,7 +2014,8 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) else { _PyTime_t ts; - if (_PyTime_FromSecondsObject(&ts, otimeout, _PyTime_ROUND_UP) < 0) { + if (_PyTime_FromSecondsObject(&ts, + otimeout, _PyTime_ROUND_CEILING) < 0) { PyErr_Format(PyExc_TypeError, "timeout argument must be an number " "or None, got %.200s", diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index f3b2e29867..1b3589d7c6 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -977,7 +977,8 @@ signal_sigtimedwait(PyObject *self, PyObject *args) &signals, &timeout_obj)) return NULL; - if (_PyTime_FromSecondsObject(&timeout, timeout_obj, _PyTime_ROUND_UP) < 0) + if (_PyTime_FromSecondsObject(&timeout, + timeout_obj, _PyTime_ROUND_CEILING) < 0) return NULL; if (timeout < 0) { diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 513405e507..a6c47ae526 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -633,7 +633,7 @@ internal_select_ex(PySocketSockObject *s, int writing, _PyTime_t interval) pollfd.events = writing ? POLLOUT : POLLIN; /* s->sock_timeout is in seconds, timeout in ms */ - timeout = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_UP); + timeout = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_CEILING); assert(timeout <= INT_MAX); timeout_int = (int)timeout; @@ -641,7 +641,7 @@ internal_select_ex(PySocketSockObject *s, int writing, _PyTime_t interval) n = poll(&pollfd, 1, timeout_int); Py_END_ALLOW_THREADS; #else - _PyTime_AsTimeval_noraise(interval, &tv, _PyTime_ROUND_UP); + _PyTime_AsTimeval_noraise(interval, &tv, _PyTime_ROUND_CEILING); FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); @@ -2191,7 +2191,8 @@ socket_parse_timeout(_PyTime_t *timeout, PyObject *timeout_obj) return 0; } - if (_PyTime_FromSecondsObject(timeout, timeout_obj, _PyTime_ROUND_UP) < 0) + if (_PyTime_FromSecondsObject(timeout, + timeout_obj, _PyTime_ROUND_CEILING) < 0) return -1; if (*timeout < 0) { @@ -2200,10 +2201,10 @@ socket_parse_timeout(_PyTime_t *timeout, PyObject *timeout_obj) } #ifdef MS_WINDOWS - overflow = (_PyTime_AsTimeval(timeout, &tv, _PyTime_ROUND_UP) < 0); + overflow = (_PyTime_AsTimeval(timeout, &tv, _PyTime_ROUND_CEILING) < 0); #endif #ifndef HAVE_POLL - timeout = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_UP); + timeout = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_CEILING); overflow = (timeout > INT_MAX); #endif if (overflow) { @@ -2452,7 +2453,7 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, struct timeval tv; int conv; - _PyTime_AsTimeval_noraise(s->sock_timeout, &tv, _PyTime_ROUND_UP); + _PyTime_AsTimeval_noraise(s->sock_timeout, &tv, _PyTime_ROUND_CEILING); Py_BEGIN_ALLOW_THREADS FD_ZERO(&fds); diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 3ed3fb31bd..74c544a62d 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -221,7 +221,7 @@ static PyObject * time_sleep(PyObject *self, PyObject *obj) { _PyTime_t secs; - if (_PyTime_FromSecondsObject(&secs, obj, _PyTime_ROUND_UP)) + if (_PyTime_FromSecondsObject(&secs, obj, _PyTime_ROUND_CEILING)) return NULL; if (secs < 0) { PyErr_SetString(PyExc_ValueError, @@ -1405,7 +1405,7 @@ pysleep(_PyTime_t secs) do { #ifndef MS_WINDOWS - if (_PyTime_AsTimeval(secs, &timeout, _PyTime_ROUND_UP) < 0) + if (_PyTime_AsTimeval(secs, &timeout, _PyTime_ROUND_CEILING) < 0) return -1; Py_BEGIN_ALLOW_THREADS @@ -1420,7 +1420,7 @@ pysleep(_PyTime_t secs) return -1; } #else - millisecs = _PyTime_AsMilliseconds(secs, _PyTime_ROUND_UP); + millisecs = _PyTime_AsMilliseconds(secs, _PyTime_ROUND_CEILING); if (millisecs > (double)ULONG_MAX) { PyErr_SetString(PyExc_OverflowError, "sleep length is too large"); -- cgit v1.2.1 From edb319537899ddaa0d482ec55597784fb0f775a5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 03:57:14 +0200 Subject: Issue #22117: Remove _PyTime_ROUND_DOWN and _PyTime_ROUND_UP rounding methods Use _PyTime_ROUND_FLOOR and _PyTime_ROUND_CEILING instead. --- Modules/_testcapimodule.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 25f916beb9..253efb6436 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2634,8 +2634,7 @@ run_in_subinterp(PyObject *self, PyObject *args) static int check_time_rounding(int round) { - if (round != _PyTime_ROUND_DOWN && round != _PyTime_ROUND_UP - && round != _PyTime_ROUND_FLOOR && round != _PyTime_ROUND_CEILING) { + if (round != _PyTime_ROUND_FLOOR && round != _PyTime_ROUND_CEILING) { PyErr_SetString(PyExc_ValueError, "invalid rounding"); return -1; } -- cgit v1.2.1 From 3601137a49d991a353d766ae7cd6a4bfda56d20b Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 30 Mar 2015 09:09:54 +0300 Subject: Issue #23171: csv.Writer.writerow() now supports arbitrary iterables. --- Modules/_csv.c | 79 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 39 insertions(+), 40 deletions(-) (limited to 'Modules') diff --git a/Modules/_csv.c b/Modules/_csv.c index ade35e5bf7..eb886264d7 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -1009,7 +1009,7 @@ join_reset(WriterObj *self) */ static Py_ssize_t join_append_data(WriterObj *self, unsigned int field_kind, void *field_data, - Py_ssize_t field_len, int quote_empty, int *quoted, + Py_ssize_t field_len, int *quoted, int copy_phase) { DialectObj *dialect = self->dialect; @@ -1071,18 +1071,6 @@ join_append_data(WriterObj *self, unsigned int field_kind, void *field_data, ADDCH(c); } - /* If field is empty check if it needs to be quoted. - */ - if (i == 0 && quote_empty) { - if (dialect->quoting == QUOTE_NONE) { - PyErr_Format(_csvstate_global->error_obj, - "single empty field record must be quoted"); - return -1; - } - else - *quoted = 1; - } - if (*quoted) { if (copy_phase) ADDCH(dialect->quotechar); @@ -1126,7 +1114,7 @@ join_check_rec_size(WriterObj *self, Py_ssize_t rec_len) } static int -join_append(WriterObj *self, PyObject *field, int *quoted, int quote_empty) +join_append(WriterObj *self, PyObject *field, int quoted) { unsigned int field_kind = -1; void *field_data = NULL; @@ -1141,7 +1129,7 @@ join_append(WriterObj *self, PyObject *field, int *quoted, int quote_empty) field_len = PyUnicode_GET_LENGTH(field); } rec_len = join_append_data(self, field_kind, field_data, field_len, - quote_empty, quoted, 0); + "ed, 0); if (rec_len < 0) return 0; @@ -1150,7 +1138,7 @@ join_append(WriterObj *self, PyObject *field, int *quoted, int quote_empty) return 0; self->rec_len = join_append_data(self, field_kind, field_data, field_len, - quote_empty, quoted, 1); + "ed, 1); self->num_fields++; return 1; @@ -1181,37 +1169,30 @@ join_append_lineterminator(WriterObj *self) } PyDoc_STRVAR(csv_writerow_doc, -"writerow(sequence)\n" +"writerow(iterable)\n" "\n" -"Construct and write a CSV record from a sequence of fields. Non-string\n" +"Construct and write a CSV record from an iterable of fields. Non-string\n" "elements will be converted to string."); static PyObject * csv_writerow(WriterObj *self, PyObject *seq) { DialectObj *dialect = self->dialect; - Py_ssize_t len, i; - PyObject *line, *result; + PyObject *iter, *field, *line, *result; - if (!PySequence_Check(seq)) - return PyErr_Format(_csvstate_global->error_obj, "sequence expected"); - - len = PySequence_Length(seq); - if (len < 0) - return NULL; + iter = PyObject_GetIter(seq); + if (iter == NULL) + return PyErr_Format(_csvstate_global->error_obj, + "iterable expected, not %.200s", + seq->ob_type->tp_name); /* Join all fields in internal buffer. */ join_reset(self); - for (i = 0; i < len; i++) { - PyObject *field; + while ((field = PyIter_Next(iter))) { int append_ok; int quoted; - field = PySequence_GetItem(seq, i); - if (field == NULL) - return NULL; - switch (dialect->quoting) { case QUOTE_NONNUMERIC: quoted = !PyNumber_Check(field); @@ -1225,11 +1206,11 @@ csv_writerow(WriterObj *self, PyObject *seq) } if (PyUnicode_Check(field)) { - append_ok = join_append(self, field, "ed, len == 1); + append_ok = join_append(self, field, quoted); Py_DECREF(field); } else if (field == Py_None) { - append_ok = join_append(self, NULL, "ed, len == 1); + append_ok = join_append(self, NULL, quoted); Py_DECREF(field); } else { @@ -1237,19 +1218,37 @@ csv_writerow(WriterObj *self, PyObject *seq) str = PyObject_Str(field); Py_DECREF(field); - if (str == NULL) + if (str == NULL) { + Py_DECREF(iter); return NULL; - append_ok = join_append(self, str, "ed, len == 1); + } + append_ok = join_append(self, str, quoted); Py_DECREF(str); } - if (!append_ok) + if (!append_ok) { + Py_DECREF(iter); + return NULL; + } + } + Py_DECREF(iter); + if (PyErr_Occurred()) + return NULL; + + if (self->num_fields > 0 && self->rec_size == 0) { + if (dialect->quoting == QUOTE_NONE) { + PyErr_Format(_csvstate_global->error_obj, + "single empty field record must be quoted"); + return NULL; + } + self->num_fields--; + if (!join_append(self, NULL, 1)) return NULL; } /* Add line terminator. */ if (!join_append_lineterminator(self)) - return 0; + return NULL; line = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, (void *) self->rec, self->rec_len); @@ -1261,9 +1260,9 @@ csv_writerow(WriterObj *self, PyObject *seq) } PyDoc_STRVAR(csv_writerows_doc, -"writerows(sequence of sequences)\n" +"writerows(iterable of iterables)\n" "\n" -"Construct and write a series of sequences to a csv file. Non-string\n" +"Construct and write a series of iterables to a csv file. Non-string\n" "elements will be converted to string."); static PyObject * -- cgit v1.2.1 From 0600ebc4d9a0fbb0f16689fb2c1d6a09482594cc Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 10:09:31 +0200 Subject: Issue #23752: _Py_fstat() is now responsible to raise the Python exception Add _Py_fstat_noraise() function when a Python exception is not welcome. --- Modules/_io/fileio.c | 10 ++++------ Modules/main.c | 6 ++++-- Modules/mmapmodule.c | 25 ++++++++++++------------- Modules/posixmodule.c | 2 +- Modules/signalmodule.c | 10 +++------- 5 files changed, 24 insertions(+), 29 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 595f99ee85..b56a9c3f43 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -399,10 +399,8 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) } self->blksize = DEFAULT_BUFFER_SIZE; - if (_Py_fstat(self->fd, &fdfstat) < 0) { - PyErr_SetFromErrno(PyExc_OSError); + if (_Py_fstat(self->fd, &fdfstat) < 0) goto error; - } #if defined(S_ISDIR) && defined(EISDIR) /* On Unix, open will succeed for directories. In Python, there should be no file objects referring to @@ -589,7 +587,7 @@ new_buffersize(fileio *self, size_t currentsize) static PyObject * fileio_readall(fileio *self) { - struct _Py_stat_struct st; + struct _Py_stat_struct status; Py_off_t pos, end; PyObject *result; Py_ssize_t bytes_read = 0; @@ -606,8 +604,8 @@ fileio_readall(fileio *self) #else pos = lseek(self->fd, 0L, SEEK_CUR); #endif - if (_Py_fstat(self->fd, &st) == 0) - end = st.st_size; + if (_Py_fstat_noraise(self->fd, &status) == 0) + end = status.st_size; else end = (Py_off_t)-1; diff --git a/Modules/main.c b/Modules/main.c index 74e512bac0..2a9ea2882c 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -753,9 +753,11 @@ Py_Main(int argc, wchar_t **argv) } { struct _Py_stat_struct sb; - if (_Py_fstat(fileno(fp), &sb) == 0 && + if (_Py_fstat_noraise(fileno(fp), &sb) == 0 && S_ISDIR(sb.st_mode)) { - fprintf(stderr, "%ls: '%ls' is a directory, cannot continue\n", argv[0], filename); + fprintf(stderr, + "%ls: '%ls' is a directory, cannot continue\n", + argv[0], filename); fclose(fp); return 1; } diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 25056a4aaa..e2ed5f9c8d 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -465,15 +465,13 @@ mmap_size_method(mmap_object *self, #ifdef UNIX { - struct _Py_stat_struct buf; - if (-1 == _Py_fstat(self->fd, &buf)) { - PyErr_SetFromErrno(PyExc_OSError); + struct _Py_stat_struct status; + if (_Py_fstat(self->fd, &status) == -1) return NULL; - } #ifdef HAVE_LARGEFILE_SUPPORT - return PyLong_FromLongLong(buf.st_size); + return PyLong_FromLongLong(status.st_size); #else - return PyLong_FromLong(buf.st_size); + return PyLong_FromLong(status.st_size); #endif } #endif /* UNIX */ @@ -1112,7 +1110,7 @@ _GetMapSize(PyObject *o, const char* param) static PyObject * new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) { - struct _Py_stat_struct st; + struct _Py_stat_struct status; mmap_object *m_obj; PyObject *map_size_obj = NULL; Py_ssize_t map_size; @@ -1177,25 +1175,26 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) if (fd != -1) (void)fcntl(fd, F_FULLFSYNC); #endif - if (fd != -1 && _Py_fstat(fd, &st) == 0 && S_ISREG(st.st_mode)) { + if (fd != -1 && _Py_fstat_noraise(fd, &status) == 0 + && S_ISREG(status.st_mode)) { if (map_size == 0) { - if (st.st_size == 0) { + if (status.st_size == 0) { PyErr_SetString(PyExc_ValueError, "cannot mmap an empty file"); return NULL; } - if (offset >= st.st_size) { + if (offset >= status.st_size) { PyErr_SetString(PyExc_ValueError, "mmap offset is greater than file size"); return NULL; } - if (st.st_size - offset > PY_SSIZE_T_MAX) { + if (status.st_size - offset > PY_SSIZE_T_MAX) { PyErr_SetString(PyExc_ValueError, "mmap length is too large"); return NULL; } - map_size = (Py_ssize_t) (st.st_size - offset); - } else if (offset + map_size > st.st_size) { + map_size = (Py_ssize_t) (status.st_size - offset); + } else if (offset + map_size > status.st_size) { PyErr_SetString(PyExc_ValueError, "mmap length is greater than file size"); return NULL; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 801305f535..ef69a45ee1 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -351,7 +351,7 @@ static int win32_can_symlink = 0; #ifdef MS_WINDOWS # define STAT win32_stat # define LSTAT win32_lstat -# define FSTAT _Py_fstat +# define FSTAT _Py_fstat_noraise # define STRUCT_STAT struct _Py_stat_struct #else # define STAT stat diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 1b3589d7c6..3081562abc 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -503,7 +503,7 @@ signal_siginterrupt(PyObject *self, PyObject *args) static PyObject * signal_set_wakeup_fd(PyObject *self, PyObject *args) { - struct _Py_stat_struct st; + struct _Py_stat_struct status; #ifdef MS_WINDOWS PyObject *fdobj; SOCKET_T sockfd, old_sockfd; @@ -559,10 +559,8 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) return NULL; } - if (_Py_fstat(fd, &st) != 0) { - PyErr_SetExcFromWindowsErr(PyExc_OSError, GetLastError()); + if (_Py_fstat(fd, &status) != 0) return NULL; - } /* on Windows, a file cannot be set to non-blocking mode */ } @@ -591,10 +589,8 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) return NULL; } - if (_Py_fstat(fd, &st) != 0) { - PyErr_SetFromErrno(PyExc_OSError); + if (_Py_fstat(fd, &status) != 0) return NULL; - } blocking = _Py_get_blocking(fd); if (blocking < 0) -- cgit v1.2.1 From 595196798f69de72353da4f376a800a766bc082a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 21:16:11 +0200 Subject: Issue #23485: select.select() is now retried automatically with the recomputed timeout when interrupted by a signal, except if the signal handler raises an exception. This change is part of the PEP 475. The asyncore and selectors module doesn't catch the InterruptedError exception anymore when calling select.select(), since this function should not raise InterruptedError anymore. --- Modules/selectmodule.c | 53 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 14 deletions(-) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index a8523440a9..a6d6a83750 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -193,29 +193,31 @@ select_select(PyObject *self, PyObject *args) #endif /* SELECT_USES_HEAP */ PyObject *ifdlist, *ofdlist, *efdlist; PyObject *ret = NULL; - PyObject *tout = Py_None; + PyObject *timeout_obj = Py_None; fd_set ifdset, ofdset, efdset; struct timeval tv, *tvp; int imax, omax, emax, max; int n; + _PyTime_t timeout, deadline = 0; /* convert arguments */ if (!PyArg_UnpackTuple(args, "select", 3, 4, - &ifdlist, &ofdlist, &efdlist, &tout)) + &ifdlist, &ofdlist, &efdlist, &timeout_obj)) return NULL; - if (tout == Py_None) - tvp = (struct timeval *)0; + if (timeout_obj == Py_None) + tvp = (struct timeval *)NULL; else { - _PyTime_t ts; - - if (_PyTime_FromSecondsObject(&ts, tout, _PyTime_ROUND_CEILING) < 0) { - PyErr_SetString(PyExc_TypeError, - "timeout must be a float or None"); + if (_PyTime_FromSecondsObject(&timeout, timeout_obj, + _PyTime_ROUND_CEILING) < 0) { + if (PyErr_ExceptionMatches(PyExc_TypeError)) { + PyErr_SetString(PyExc_TypeError, + "timeout must be a float or None"); + } return NULL; } - if (_PyTime_AsTimeval(ts, &tv, _PyTime_ROUND_CEILING) == -1) + if (_PyTime_AsTimeval(timeout, &tv, _PyTime_ROUND_CEILING) == -1) return NULL; if (tv.tv_sec < 0) { PyErr_SetString(PyExc_ValueError, "timeout must be non-negative"); @@ -224,7 +226,6 @@ select_select(PyObject *self, PyObject *args) tvp = &tv; } - #ifdef SELECT_USES_HEAP /* Allocate memory for the lists */ rfd2obj = PyMem_NEW(pylist, FD_SETSIZE + 1); @@ -237,6 +238,7 @@ select_select(PyObject *self, PyObject *args) return PyErr_NoMemory(); } #endif /* SELECT_USES_HEAP */ + /* Convert sequences to fd_sets, and get maximum fd number * propagates the Python exception set in seq2set() */ @@ -249,13 +251,36 @@ select_select(PyObject *self, PyObject *args) goto finally; if ((emax=seq2set(efdlist, &efdset, efd2obj)) < 0) goto finally; + max = imax; if (omax > max) max = omax; if (emax > max) max = emax; - Py_BEGIN_ALLOW_THREADS - n = select(max, &ifdset, &ofdset, &efdset, tvp); - Py_END_ALLOW_THREADS + if (tvp) + deadline = _PyTime_GetMonotonicClock() + timeout; + + do { + Py_BEGIN_ALLOW_THREADS + errno = 0; + n = select(max, &ifdset, &ofdset, &efdset, tvp); + Py_END_ALLOW_THREADS + + if (errno != EINTR) + break; + + /* select() was interrupted by a signal */ + if (PyErr_CheckSignals()) + goto finally; + + if (tvp) { + timeout = deadline - _PyTime_GetMonotonicClock(); + if (timeout < 0) { + n = 0; + break; + } + _PyTime_AsTimeval_noraise(timeout, &tv, _PyTime_ROUND_CEILING); + } + } while (1); #ifdef MS_WINDOWS if (n == SOCKET_ERROR) { -- cgit v1.2.1 From cf0fb0f2acffc375fdffbc4a50e608cad322c0a2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 21:33:51 +0200 Subject: PEP 475: on EINTR, retry the function even if the timeout is equals to zero Retry: * signal.sigtimedwait() * threading.Lock.acquire() * threading.RLock.acquire() * time.sleep() --- Modules/_threadmodule.c | 2 +- Modules/signalmodule.c | 2 +- Modules/timemodule.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 0907aa0eb2..323447f9da 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -84,7 +84,7 @@ acquire_timed(PyThread_type_lock lock, _PyTime_t timeout) /* Check for negative values, since those mean block forever. */ - if (timeout <= 0) { + if (timeout < 0) { r = PY_LOCK_FAILURE; } } diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 3081562abc..a1fda3eb31 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -1011,7 +1011,7 @@ signal_sigtimedwait(PyObject *self, PyObject *args) monotonic = _PyTime_GetMonotonicClock(); timeout = deadline - monotonic; - if (timeout <= 0) + if (timeout < 0) break; } while (1); diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 74c544a62d..5f6290d98f 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1455,7 +1455,7 @@ pysleep(_PyTime_t secs) monotonic = _PyTime_GetMonotonicClock(); secs = deadline - monotonic; - if (secs <= 00) + if (secs < 0) break; /* retry with the recomputed delay */ } while (1); -- cgit v1.2.1 From b4c98304a272d7376a00ec3294473206cadade5e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 21:38:00 +0200 Subject: Issue #23485: select.poll.poll() is now retried when interrupted by a signal --- Modules/selectmodule.c | 133 ++++++++++++++++++++++++++++++------------------- 1 file changed, 83 insertions(+), 50 deletions(-) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index a6d6a83750..71b6683660 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -279,6 +279,7 @@ select_select(PyObject *self, PyObject *args) break; } _PyTime_AsTimeval_noraise(timeout, &tv, _PyTime_ROUND_CEILING); + /* retry select() with the recomputed timeout */ } } while (1); @@ -520,30 +521,39 @@ any descriptors that have events or errors to report."); static PyObject * poll_poll(pollObject *self, PyObject *args) { - PyObject *result_list = NULL, *tout = NULL; - int timeout = 0, poll_result, i, j; + PyObject *result_list = NULL, *timeout_obj = NULL; + int poll_result, i, j; PyObject *value = NULL, *num = NULL; + _PyTime_t timeout, ms, deadline; + int async_err = 0; - if (!PyArg_UnpackTuple(args, "poll", 0, 1, &tout)) { + if (!PyArg_ParseTuple(args, "|O:poll", &timeout_obj)) { return NULL; } /* Check values for timeout */ - if (tout == NULL || tout == Py_None) + if (timeout_obj == NULL || timeout_obj == Py_None) { timeout = -1; - else if (!PyNumber_Check(tout)) { - PyErr_SetString(PyExc_TypeError, - "timeout must be an integer or None"); - return NULL; + ms = -1; + deadline = 0; } else { - tout = PyNumber_Long(tout); - if (!tout) + if (_PyTime_FromMillisecondsObject(&timeout, timeout_obj, + _PyTime_ROUND_CEILING) < 0) { + if (PyErr_ExceptionMatches(PyExc_TypeError)) { + PyErr_SetString(PyExc_TypeError, + "timeout must be an integer or None"); + } return NULL; - timeout = _PyLong_AsInt(tout); - Py_DECREF(tout); - if (timeout == -1 && PyErr_Occurred()) + } + + ms = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_CEILING); + if (ms < INT_MIN || ms > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, "timeout is too large"); return NULL; + } + + deadline = _PyTime_GetMonotonicClock() + timeout; } /* Avoid concurrent poll() invocation, issue 8865 */ @@ -561,14 +571,38 @@ poll_poll(pollObject *self, PyObject *args) self->poll_running = 1; /* call poll() */ - Py_BEGIN_ALLOW_THREADS - poll_result = poll(self->ufds, self->ufd_len, timeout); - Py_END_ALLOW_THREADS + async_err = 0; + do { + Py_BEGIN_ALLOW_THREADS + errno = 0; + poll_result = poll(self->ufds, self->ufd_len, (int)ms); + Py_END_ALLOW_THREADS + + if (errno != EINTR) + break; + + /* poll() was interrupted by a signal */ + if (PyErr_CheckSignals()) { + async_err = 1; + break; + } + + if (timeout >= 0) { + timeout = deadline - _PyTime_GetMonotonicClock(); + if (timeout < 0) { + poll_result = 0; + break; + } + ms = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_CEILING); + /* retry poll() with the recomputed timeout */ + } + } while (1); self->poll_running = 0; if (poll_result < 0) { - PyErr_SetFromErrno(PyExc_OSError); + if (!async_err) + PyErr_SetFromErrno(PyExc_OSError); return NULL; } @@ -577,41 +611,40 @@ poll_poll(pollObject *self, PyObject *args) result_list = PyList_New(poll_result); if (!result_list) return NULL; - else { - for (i = 0, j = 0; j < poll_result; j++) { - /* skip to the next fired descriptor */ - while (!self->ufds[i].revents) { - i++; - } - /* if we hit a NULL return, set value to NULL - and break out of loop; code at end will - clean up result_list */ - value = PyTuple_New(2); - if (value == NULL) - goto error; - num = PyLong_FromLong(self->ufds[i].fd); - if (num == NULL) { - Py_DECREF(value); - goto error; - } - PyTuple_SET_ITEM(value, 0, num); - - /* The &0xffff is a workaround for AIX. 'revents' - is a 16-bit short, and IBM assigned POLLNVAL - to be 0x8000, so the conversion to int results - in a negative number. See SF bug #923315. */ - num = PyLong_FromLong(self->ufds[i].revents & 0xffff); - if (num == NULL) { - Py_DECREF(value); - goto error; - } - PyTuple_SET_ITEM(value, 1, num); - if ((PyList_SetItem(result_list, j, value)) == -1) { - Py_DECREF(value); - goto error; - } + + for (i = 0, j = 0; j < poll_result; j++) { + /* skip to the next fired descriptor */ + while (!self->ufds[i].revents) { i++; } + /* if we hit a NULL return, set value to NULL + and break out of loop; code at end will + clean up result_list */ + value = PyTuple_New(2); + if (value == NULL) + goto error; + num = PyLong_FromLong(self->ufds[i].fd); + if (num == NULL) { + Py_DECREF(value); + goto error; + } + PyTuple_SET_ITEM(value, 0, num); + + /* The &0xffff is a workaround for AIX. 'revents' + is a 16-bit short, and IBM assigned POLLNVAL + to be 0x8000, so the conversion to int results + in a negative number. See SF bug #923315. */ + num = PyLong_FromLong(self->ufds[i].revents & 0xffff); + if (num == NULL) { + Py_DECREF(value); + goto error; + } + PyTuple_SET_ITEM(value, 1, num); + if ((PyList_SetItem(result_list, j, value)) == -1) { + Py_DECREF(value); + goto error; + } + i++; } return result_list; -- cgit v1.2.1 From 454db04991da0ce73ae8e2d93525a34b33d9f5c4 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 30 Mar 2015 21:59:21 +0200 Subject: Issue #23485: select.epoll.poll() is now retried when interrupted by a signal --- Modules/selectmodule.c | 69 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 18 deletions(-) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 71b6683660..96be5ba40f 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -535,7 +535,7 @@ poll_poll(pollObject *self, PyObject *args) if (timeout_obj == NULL || timeout_obj == Py_None) { timeout = -1; ms = -1; - deadline = 0; + deadline = 0; /* initialize to prevent gcc warning */ } else { if (_PyTime_FromMillisecondsObject(&timeout, timeout_obj, @@ -1465,34 +1465,46 @@ fd is the target file descriptor of the operation."); static PyObject * pyepoll_poll(pyEpoll_Object *self, PyObject *args, PyObject *kwds) { - double dtimeout = -1.; - int timeout; + static char *kwlist[] = {"timeout", "maxevents", NULL}; + PyObject *timeout_obj = NULL; int maxevents = -1; int nfds, i; PyObject *elist = NULL, *etuple = NULL; struct epoll_event *evs = NULL; - static char *kwlist[] = {"timeout", "maxevents", NULL}; + _PyTime_t timeout, ms, deadline; if (self->epfd < 0) return pyepoll_err_closed(); - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|di:poll", kwlist, - &dtimeout, &maxevents)) { + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:poll", kwlist, + &timeout_obj, &maxevents)) { return NULL; } - if (dtimeout < 0) { + if (timeout_obj == NULL || timeout_obj == Py_None) { timeout = -1; - } - else if (dtimeout * 1000.0 > INT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "timeout is too large"); - return NULL; + ms = -1; + deadline = 0; /* initialize to prevent gcc warning */ } else { - /* epoll_wait() has a resolution of 1 millisecond, round away from zero - to wait *at least* dtimeout seconds. */ - timeout = (int)ceil(dtimeout * 1000.0); + /* epoll_wait() has a resolution of 1 millisecond, round towards + infinity to wait at least timeout seconds. */ + if (_PyTime_FromSecondsObject(&timeout, timeout_obj, + _PyTime_ROUND_CEILING) < 0) { + if (PyErr_ExceptionMatches(PyExc_TypeError)) { + PyErr_SetString(PyExc_TypeError, + "timeout must be an integer or None"); + } + return NULL; + } + + ms = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_CEILING); + if (ms < INT_MIN || ms > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, "timeout is too large"); + return NULL; + } + + deadline = _PyTime_GetMonotonicClock() + timeout; } if (maxevents == -1) { @@ -1511,9 +1523,30 @@ pyepoll_poll(pyEpoll_Object *self, PyObject *args, PyObject *kwds) return NULL; } - Py_BEGIN_ALLOW_THREADS - nfds = epoll_wait(self->epfd, evs, maxevents, timeout); - Py_END_ALLOW_THREADS + do { + Py_BEGIN_ALLOW_THREADS + errno = 0; + nfds = epoll_wait(self->epfd, evs, maxevents, (int)ms); + Py_END_ALLOW_THREADS + + if (errno != EINTR) + break; + + /* poll() was interrupted by a signal */ + if (PyErr_CheckSignals()) + goto error; + + if (timeout >= 0) { + timeout = deadline - _PyTime_GetMonotonicClock(); + if (timeout < 0) { + nfds = 0; + break; + } + ms = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_CEILING); + /* retry epoll_wait() with the recomputed timeout */ + } + } while(1); + if (nfds < 0) { PyErr_SetFromErrno(PyExc_OSError); goto error; -- cgit v1.2.1 From 326f5354478a668da88ba3bc67b45136770d6cac Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 11:48:34 +0200 Subject: Issue #23485: select.kqueue.control() is now retried when interrupted by a signal --- Modules/selectmodule.c | 45 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 96be5ba40f..452525d5a0 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -2083,8 +2083,9 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) PyObject *result = NULL; struct kevent *evl = NULL; struct kevent *chl = NULL; - struct timespec timeout; + struct timespec timeoutspec; struct timespec *ptimeoutspec; + _PyTime_t timeout, deadline = 0; if (self->kqfd < 0) return kqueue_queue_err_closed(); @@ -2103,9 +2104,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) ptimeoutspec = NULL; } else { - _PyTime_t ts; - - if (_PyTime_FromSecondsObject(&ts, + if (_PyTime_FromSecondsObject(&timeout, otimeout, _PyTime_ROUND_CEILING) < 0) { PyErr_Format(PyExc_TypeError, "timeout argument must be an number " @@ -2114,15 +2113,15 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) return NULL; } - if (_PyTime_AsTimespec(ts, &timeout) == -1) + if (_PyTime_AsTimespec(timeout, &timeoutspec) == -1) return NULL; - if (timeout.tv_sec < 0) { + if (timeoutspec.tv_sec < 0) { PyErr_SetString(PyExc_ValueError, "timeout must be positive or None"); return NULL; } - ptimeoutspec = &timeout; + ptimeoutspec = &timeoutspec; } if (ch != NULL && ch != Py_None) { @@ -2167,10 +2166,34 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) } } - Py_BEGIN_ALLOW_THREADS - gotevents = kevent(self->kqfd, chl, nchanges, - evl, nevents, ptimeoutspec); - Py_END_ALLOW_THREADS + if (ptimeoutspec) + deadline = _PyTime_GetMonotonicClock() + timeout; + + do { + Py_BEGIN_ALLOW_THREADS + errno = 0; + gotevents = kevent(self->kqfd, chl, nchanges, + evl, nevents, ptimeoutspec); + Py_END_ALLOW_THREADS + + if (errno != EINTR) + break; + + /* kevent() was interrupted by a signal */ + if (PyErr_CheckSignals()) + goto error; + + if (ptimeoutspec) { + timeout = deadline - _PyTime_GetMonotonicClock(); + if (timeout < 0) { + gotevents = 0; + break; + } + if (_PyTime_AsTimespec(timeout, &timeoutspec) == -1) + goto error; + /* retry kevent() with the recomputed timeout */ + } + } while (1); if (gotevents == -1) { PyErr_SetFromErrno(PyExc_OSError); -- cgit v1.2.1 From 1f2890e7f13c4a7b231eaf09b841bb0ec56fd71a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 12:10:33 +0200 Subject: Issue #23485: select.devpoll.poll() is now retried when interrupted by a signal --- Modules/selectmodule.c | 106 +++++++++++++++++++++++++++++-------------------- 1 file changed, 63 insertions(+), 43 deletions(-) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 452525d5a0..590aeca31b 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -876,40 +876,38 @@ static PyObject * devpoll_poll(devpollObject *self, PyObject *args) { struct dvpoll dvp; - PyObject *result_list = NULL, *tout = NULL; + PyObject *result_list = NULL, *timeout_obj = NULL; int poll_result, i; - long timeout; PyObject *value, *num1, *num2; + _PyTime_t timeout, ms, deadline = 0; if (self->fd_devpoll < 0) return devpoll_err_closed(); - if (!PyArg_UnpackTuple(args, "poll", 0, 1, &tout)) { + if (!PyArg_ParseTuple(args, "|O:poll", &timeout_obj)) { return NULL; } /* Check values for timeout */ - if (tout == NULL || tout == Py_None) + if (timeout_obj == NULL || timeout_obj == Py_None) { timeout = -1; - else if (!PyNumber_Check(tout)) { - PyErr_SetString(PyExc_TypeError, - "timeout must be an integer or None"); - return NULL; + ms = -1; } else { - tout = PyNumber_Long(tout); - if (!tout) - return NULL; - timeout = PyLong_AsLong(tout); - Py_DECREF(tout); - if (timeout == -1 && PyErr_Occurred()) + if (_PyTime_FromMillisecondsObject(&timeout, timeout_obj, + _PyTime_ROUND_CEILING) < 0) { + if (PyErr_ExceptionMatches(PyExc_TypeError)) { + PyErr_SetString(PyExc_TypeError, + "timeout must be an integer or None"); + } return NULL; - } + } - if ((timeout < -1) || (timeout > INT_MAX)) { - PyErr_SetString(PyExc_OverflowError, - "timeout is out of range"); - return NULL; + ms = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_CEILING); + if (ms < -1 || ms > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, "timeout is too large"); + return NULL; + } } if (devpoll_flush(self)) @@ -917,12 +915,36 @@ devpoll_poll(devpollObject *self, PyObject *args) dvp.dp_fds = self->fds; dvp.dp_nfds = self->max_n_fds; - dvp.dp_timeout = timeout; + dvp.dp_timeout = (int)ms; + + if (timeout >= 0) + deadline = _PyTime_GetMonotonicClock() + timeout; + + do { + /* call devpoll() */ + Py_BEGIN_ALLOW_THREADS + errno = 0; + poll_result = ioctl(self->fd_devpoll, DP_POLL, &dvp); + Py_END_ALLOW_THREADS + + if (errno != EINTR) + break; - /* call devpoll() */ - Py_BEGIN_ALLOW_THREADS - poll_result = ioctl(self->fd_devpoll, DP_POLL, &dvp); - Py_END_ALLOW_THREADS + /* devpoll() was interrupted by a signal */ + if (PyErr_CheckSignals()) + return NULL; + + if (timeout >= 0) { + timeout = deadline - _PyTime_GetMonotonicClock(); + if (timeout < 0) { + poll_result = 0; + break; + } + ms = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_CEILING); + dvp.dp_timeout = (int)ms; + /* retry devpoll() with the recomputed timeout */ + } + } while (1); if (poll_result < 0) { PyErr_SetFromErrno(PyExc_IOError); @@ -930,28 +952,26 @@ devpoll_poll(devpollObject *self, PyObject *args) } /* build the result list */ - result_list = PyList_New(poll_result); if (!result_list) return NULL; - else { - for (i = 0; i < poll_result; i++) { - num1 = PyLong_FromLong(self->fds[i].fd); - num2 = PyLong_FromLong(self->fds[i].revents); - if ((num1 == NULL) || (num2 == NULL)) { - Py_XDECREF(num1); - Py_XDECREF(num2); - goto error; - } - value = PyTuple_Pack(2, num1, num2); - Py_DECREF(num1); - Py_DECREF(num2); - if (value == NULL) - goto error; - if ((PyList_SetItem(result_list, i, value)) == -1) { - Py_DECREF(value); - goto error; - } + + for (i = 0; i < poll_result; i++) { + num1 = PyLong_FromLong(self->fds[i].fd); + num2 = PyLong_FromLong(self->fds[i].revents); + if ((num1 == NULL) || (num2 == NULL)) { + Py_XDECREF(num1); + Py_XDECREF(num2); + goto error; + } + value = PyTuple_Pack(2, num1, num2); + Py_DECREF(num1); + Py_DECREF(num2); + if (value == NULL) + goto error; + if ((PyList_SetItem(result_list, i, value)) == -1) { + Py_DECREF(value); + goto error; } } -- cgit v1.2.1 From 794abb266c4cc87d3c7a70b5b9d9824f90a5b81a Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 31 Mar 2015 13:33:11 +0300 Subject: Issue #13583: sqlite3.Row now supports slice indexing. Tests by Jessica McKellar. --- Modules/_sqlite/row.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_sqlite/row.c b/Modules/_sqlite/row.c index ed8ad47ffc..d863643f31 100644 --- a/Modules/_sqlite/row.c +++ b/Modules/_sqlite/row.c @@ -142,8 +142,7 @@ PyObject* pysqlite_row_subscript(pysqlite_Row* self, PyObject* idx) return NULL; } else if (PySlice_Check(idx)) { - PyErr_SetString(PyExc_ValueError, "slices not implemented, yet"); - return NULL; + return PyObject_GetItem(self->data, idx); } else { PyErr_SetString(PyExc_IndexError, "Index must be int or string"); -- cgit v1.2.1 From 133f20f68d3bd088c54a9e1d13aea94df496c067 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 31 Mar 2015 14:07:24 +0300 Subject: Issue #23611: Serializing more "lookupable" objects (such as unbound methods or nested classes) now are supported with pickle protocols < 4. --- Modules/_pickle.c | 118 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 71 insertions(+), 47 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index c1e2b40bf3..d4130d1008 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -152,6 +152,8 @@ typedef struct { /* codecs.encode, used for saving bytes in older protocols */ PyObject *codecs_encode; + /* builtins.getattr, used for saving nested names with protocol < 4 */ + PyObject *getattr; } PickleState; /* Forward declaration of the _pickle module definition. */ @@ -188,16 +190,26 @@ _Pickle_ClearState(PickleState *st) Py_CLEAR(st->name_mapping_3to2); Py_CLEAR(st->import_mapping_3to2); Py_CLEAR(st->codecs_encode); + Py_CLEAR(st->getattr); } /* Initialize the given pickle module state. */ static int _Pickle_InitState(PickleState *st) { + PyObject *builtins; PyObject *copyreg = NULL; PyObject *compat_pickle = NULL; PyObject *codecs = NULL; + builtins = PyEval_GetBuiltins(); + if (builtins == NULL) + goto error; + st->getattr = PyDict_GetItemString(builtins, "getattr"); + if (st->getattr == NULL) + goto error; + Py_INCREF(st->getattr); + copyreg = PyImport_ImportModule("copyreg"); if (!copyreg) goto error; @@ -1535,7 +1547,7 @@ memo_put(PicklerObject *self, PyObject *obj) } static PyObject * -get_dotted_path(PyObject *obj, PyObject *name, int allow_qualname) { +get_dotted_path(PyObject *obj, PyObject *name) { _Py_static_string(PyId_dot, "."); _Py_static_string(PyId_locals, ""); PyObject *dotted_path; @@ -1546,20 +1558,6 @@ get_dotted_path(PyObject *obj, PyObject *name, int allow_qualname) { return NULL; n = PyList_GET_SIZE(dotted_path); assert(n >= 1); - if (!allow_qualname && n > 1) { - if (obj == NULL) - PyErr_Format(PyExc_AttributeError, - "Can't pickle qualified object %R; " - "use protocols >= 4 to enable support", - name); - else - PyErr_Format(PyExc_AttributeError, - "Can't pickle qualified attribute %R on %R; " - "use protocols >= 4 to enable support", - name, obj); - Py_DECREF(dotted_path); - return NULL; - } for (i = 0; i < n; i++) { PyObject *subpath = PyList_GET_ITEM(dotted_path, i); PyObject *result = PyUnicode_RichCompare( @@ -1582,22 +1580,28 @@ get_dotted_path(PyObject *obj, PyObject *name, int allow_qualname) { } static PyObject * -get_deep_attribute(PyObject *obj, PyObject *names) +get_deep_attribute(PyObject *obj, PyObject *names, PyObject **pparent) { Py_ssize_t i, n; + PyObject *parent = NULL; assert(PyList_CheckExact(names)); Py_INCREF(obj); n = PyList_GET_SIZE(names); for (i = 0; i < n; i++) { PyObject *name = PyList_GET_ITEM(names, i); - PyObject *tmp; - tmp = PyObject_GetAttr(obj, name); - Py_DECREF(obj); - if (tmp == NULL) + Py_XDECREF(parent); + parent = obj; + obj = PyObject_GetAttr(parent, name); + if (obj == NULL) { + Py_DECREF(parent); return NULL; - obj = tmp; + } } + if (pparent != NULL) + *pparent = parent; + else + Py_XDECREF(parent); return obj; } @@ -1617,18 +1621,22 @@ getattribute(PyObject *obj, PyObject *name, int allow_qualname) { PyObject *dotted_path, *attr; - dotted_path = get_dotted_path(obj, name, allow_qualname); - if (dotted_path == NULL) - return NULL; - attr = get_deep_attribute(obj, dotted_path); - Py_DECREF(dotted_path); + if (allow_qualname) { + dotted_path = get_dotted_path(obj, name); + if (dotted_path == NULL) + return NULL; + attr = get_deep_attribute(obj, dotted_path, NULL); + Py_DECREF(dotted_path); + } + else + attr = PyObject_GetAttr(obj, name); if (attr == NULL) reformat_attribute_error(obj, name); return attr; } static PyObject * -whichmodule(PyObject *global, PyObject *global_name, int allow_qualname) +whichmodule(PyObject *global, PyObject *dotted_path) { PyObject *module_name; PyObject *modules_dict; @@ -1637,7 +1645,6 @@ whichmodule(PyObject *global, PyObject *global_name, int allow_qualname) _Py_IDENTIFIER(__module__); _Py_IDENTIFIER(modules); _Py_IDENTIFIER(__main__); - PyObject *dotted_path; module_name = _PyObject_GetAttrId(global, &PyId___module__); @@ -1663,10 +1670,6 @@ whichmodule(PyObject *global, PyObject *global_name, int allow_qualname) return NULL; } - dotted_path = get_dotted_path(NULL, global_name, allow_qualname); - if (dotted_path == NULL) - return NULL; - i = 0; while (PyDict_Next(modules_dict, &i, &module_name, &module)) { PyObject *candidate; @@ -1676,19 +1679,16 @@ whichmodule(PyObject *global, PyObject *global_name, int allow_qualname) if (module == Py_None) continue; - candidate = get_deep_attribute(module, dotted_path); + candidate = get_deep_attribute(module, dotted_path, NULL); if (candidate == NULL) { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) { - Py_DECREF(dotted_path); + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) return NULL; - } PyErr_Clear(); continue; } if (candidate == global) { Py_INCREF(module_name); - Py_DECREF(dotted_path); Py_DECREF(candidate); return module_name; } @@ -1698,7 +1698,6 @@ whichmodule(PyObject *global, PyObject *global_name, int allow_qualname) /* If no module is found, use __main__. */ module_name = _PyUnicode_FromId(&PyId___main__); Py_INCREF(module_name); - Py_DECREF(dotted_path); return module_name; } @@ -3105,6 +3104,9 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name) PyObject *global_name = NULL; PyObject *module_name = NULL; PyObject *module = NULL; + PyObject *parent = NULL; + PyObject *dotted_path = NULL; + PyObject *lastname = NULL; PyObject *cls; PickleState *st = _Pickle_GetGlobalState(); int status = 0; @@ -3118,13 +3120,11 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name) global_name = name; } else { - if (self->proto >= 4) { - global_name = _PyObject_GetAttrId(obj, &PyId___qualname__); - if (global_name == NULL) { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) - goto error; - PyErr_Clear(); - } + global_name = _PyObject_GetAttrId(obj, &PyId___qualname__); + if (global_name == NULL) { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) + goto error; + PyErr_Clear(); } if (global_name == NULL) { global_name = _PyObject_GetAttrId(obj, &PyId___name__); @@ -3133,7 +3133,10 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name) } } - module_name = whichmodule(obj, global_name, self->proto >= 4); + dotted_path = get_dotted_path(module, global_name); + if (dotted_path == NULL) + goto error; + module_name = whichmodule(obj, dotted_path); if (module_name == NULL) goto error; @@ -3152,7 +3155,10 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name) obj, module_name); goto error; } - cls = getattribute(module, global_name, self->proto >= 4); + lastname = PyList_GET_ITEM(dotted_path, PyList_GET_SIZE(dotted_path)-1); + Py_INCREF(lastname); + cls = get_deep_attribute(module, dotted_path, &parent); + Py_CLEAR(dotted_path); if (cls == NULL) { PyErr_Format(st->PicklingError, "Can't pickle %R: attribute lookup %S on %S failed", @@ -3239,6 +3245,11 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name) } else { gen_global: + if (parent == module) { + Py_INCREF(lastname); + Py_DECREF(global_name); + global_name = lastname; + } if (self->proto >= 4) { const char stack_global_op = STACK_GLOBAL; @@ -3250,6 +3261,15 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name) if (_Pickler_Write(self, &stack_global_op, 1) < 0) goto error; } + else if (parent != module) { + PickleState *st = _Pickle_GetGlobalState(); + PyObject *reduce_value = Py_BuildValue("(O(OO))", + st->getattr, parent, lastname); + status = save_reduce(self, reduce_value, NULL); + Py_DECREF(reduce_value); + if (status < 0) + goto error; + } else { /* Generate a normal global opcode if we are using a pickle protocol < 4, or if the object is not registered in the @@ -3328,6 +3348,9 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name) Py_XDECREF(module_name); Py_XDECREF(global_name); Py_XDECREF(module); + Py_XDECREF(parent); + Py_XDECREF(dotted_path); + Py_XDECREF(lastname); return status; } @@ -7150,6 +7173,7 @@ pickle_traverse(PyObject *m, visitproc visit, void *arg) Py_VISIT(st->name_mapping_3to2); Py_VISIT(st->import_mapping_3to2); Py_VISIT(st->codecs_encode); + Py_VISIT(st->getattr); return 0; } -- cgit v1.2.1 From 61a880df2c67d096dbc555fadc0c2388c5c36e6f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 13:15:31 +0200 Subject: Issue #23618: Refactor the _socket module * Inline internal_select() function * Rename internal_select_ex() internal_select() --- Modules/socketmodule.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index a6c47ae526..6429c21b85 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -597,7 +597,7 @@ internal_setblocking(PySocketSockObject *s, int block) after they've reacquired the interpreter lock. Returns 1 on timeout, -1 on error, 0 otherwise. */ static int -internal_select_ex(PySocketSockObject *s, int writing, _PyTime_t interval) +internal_select(PySocketSockObject *s, int writing, _PyTime_t interval) { int n; #ifdef HAVE_POLL @@ -664,12 +664,6 @@ internal_select_ex(PySocketSockObject *s, int writing, _PyTime_t interval) return 0; } -static int -internal_select(PySocketSockObject *s, int writing) -{ - return internal_select_ex(s, writing, s->sock_timeout); -} - /* Two macros for automatic retry of select() in case of false positives (for example, select() could indicate a socket is ready for reading @@ -678,7 +672,7 @@ internal_select(PySocketSockObject *s, int writing) BEGIN_SELECT_LOOP(s) - timeout = internal_select_ex(s, 0, interval); + timeout = internal_select(s, 0, interval); if (!timeout) { Py_BEGIN_ALLOW_THREADS @@ -2075,7 +2069,7 @@ sock_accept(PySocketSockObject *s) BEGIN_SELECT_LOOP(s) do { - timeout = internal_select_ex(s, 0, interval); + timeout = internal_select(s, 0, interval); if (!timeout) { Py_BEGIN_ALLOW_THREADS @@ -2498,7 +2492,7 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, if (s->sock_timeout > 0 && res < 0 && errno == EINPROGRESS && IS_SELECTABLE(s)) { - timeout = internal_select(s, 1); + timeout = internal_select(s, 1, s->sock_timeout); if (timeout == 0) { /* Bug #1019808: in case of an EINPROGRESS, @@ -2731,7 +2725,7 @@ sock_recv_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags) BEGIN_SELECT_LOOP(s) do { - timeout = internal_select_ex(s, 0, interval); + timeout = internal_select(s, 0, interval); if (!timeout) { Py_BEGIN_ALLOW_THREADS @@ -2907,7 +2901,7 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags, BEGIN_SELECT_LOOP(s) do { memset(&addrbuf, 0, addrlen); - timeout = internal_select_ex(s, 0, interval); + timeout = internal_select(s, 0, interval); if (!timeout) { Py_BEGIN_ALLOW_THREADS @@ -3114,7 +3108,7 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen, msg.msg_iovlen = iovlen; msg.msg_control = controlbuf; msg.msg_controllen = controllen; - timeout = internal_select_ex(s, 0, interval); + timeout = internal_select(s, 0, interval); if (timeout == 1) { PyErr_SetString(socket_timeout, "timed out"); @@ -3407,7 +3401,7 @@ sock_send(PySocketSockObject *s, PyObject *args) BEGIN_SELECT_LOOP(s) do { - timeout = internal_select_ex(s, 1, interval); + timeout = internal_select(s, 1, interval); if (!timeout) { Py_BEGIN_ALLOW_THREADS @@ -3464,7 +3458,7 @@ sock_sendall(PySocketSockObject *s, PyObject *args) } do { - timeout = internal_select(s, 1); + timeout = internal_select(s, 1, s->sock_timeout); n = -1; if (!timeout) { @@ -3554,7 +3548,7 @@ sock_sendto(PySocketSockObject *s, PyObject *args) BEGIN_SELECT_LOOP(s) do { - timeout = internal_select_ex(s, 1, interval); + timeout = internal_select(s, 1, interval); if (!timeout) { Py_BEGIN_ALLOW_THREADS @@ -3770,7 +3764,7 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) BEGIN_SELECT_LOOP(s) do { - timeout = internal_select_ex(s, 1, interval); + timeout = internal_select(s, 1, interval); if (!timeout) { Py_BEGIN_ALLOW_THREADS; -- cgit v1.2.1 From 63dbc9e28a1a43ebc9f47ec450d367ac7aa0b1b6 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 13:50:44 +0200 Subject: Issue #23618: Refactor internal_select() to prepare socket.connect() for EINTR --- Modules/socketmodule.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 6429c21b85..39003be079 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -591,19 +591,13 @@ internal_setblocking(PySocketSockObject *s, int block) return 1; } -/* Do a select()/poll() on the socket, if necessary (sock_timeout > 0). - The argument writing indicates the direction. - This does not raise an exception; we'll let our caller do that - after they've reacquired the interpreter lock. - Returns 1 on timeout, -1 on error, 0 otherwise. */ static int -internal_select(PySocketSockObject *s, int writing, _PyTime_t interval) +internal_select_impl(PySocketSockObject *s, int writing, _PyTime_t interval) { int n; #ifdef HAVE_POLL struct pollfd pollfd; - _PyTime_t timeout; - int timeout_int; + _PyTime_t ms; #else fd_set fds; struct timeval tv; @@ -633,12 +627,11 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval) pollfd.events = writing ? POLLOUT : POLLIN; /* s->sock_timeout is in seconds, timeout in ms */ - timeout = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_CEILING); - assert(timeout <= INT_MAX); - timeout_int = (int)timeout; + ms = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_CEILING); + assert(ms <= INT_MAX); Py_BEGIN_ALLOW_THREADS; - n = poll(&pollfd, 1, timeout_int); + n = poll(&pollfd, 1, (int)ms); Py_END_ALLOW_THREADS; #else _PyTime_AsTimeval_noraise(interval, &tv, _PyTime_ROUND_CEILING); @@ -664,6 +657,23 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval) return 0; } +/* Do a select()/poll() on the socket, if necessary (sock_timeout > 0). + The argument writing indicates the direction. + This does not raise an exception; we'll let our caller do that + after they've reacquired the interpreter lock. + Returns 1 on timeout, -1 on error, 0 otherwise. */ +static int +internal_select(PySocketSockObject *s, int writing, _PyTime_t interval) +{ + return internal_select_impl(s, writing, interval); +} + +static int +internal_connect_select(PySocketSockObject *s) +{ + return internal_select(s, 1, s->sock_timeout); +} + /* Two macros for automatic retry of select() in case of false positives (for example, select() could indicate a socket is ready for reading @@ -2492,7 +2502,7 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, if (s->sock_timeout > 0 && res < 0 && errno == EINPROGRESS && IS_SELECTABLE(s)) { - timeout = internal_select(s, 1, s->sock_timeout); + timeout = internal_connect_select(s); if (timeout == 0) { /* Bug #1019808: in case of an EINPROGRESS, -- cgit v1.2.1 From 3ddf946c1ffb07688e74eccc8fe0c8d2f9fd31f5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 13:56:29 +0200 Subject: Issue #23618: internal_connect_select() now waits also for error events --- Modules/socketmodule.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 39003be079..98b6636d78 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -592,14 +592,15 @@ internal_setblocking(PySocketSockObject *s, int block) } static int -internal_select_impl(PySocketSockObject *s, int writing, _PyTime_t interval) +internal_select_impl(PySocketSockObject *s, int writing, _PyTime_t interval, + int error) { int n; #ifdef HAVE_POLL struct pollfd pollfd; _PyTime_t ms; #else - fd_set fds; + fd_set fds, efds; struct timeval tv; #endif @@ -608,6 +609,9 @@ internal_select_impl(PySocketSockObject *s, int writing, _PyTime_t interval) assert(PyGILState_Check()); #endif + /* Error condition is for output only */ + assert(!(error && !writing)); + /* Nothing to do unless we're in timeout mode (not non-blocking) */ if (s->sock_timeout <= 0) return 0; @@ -625,6 +629,8 @@ internal_select_impl(PySocketSockObject *s, int writing, _PyTime_t interval) #ifdef HAVE_POLL pollfd.fd = s->sock_fd; pollfd.events = writing ? POLLOUT : POLLIN; + if (error) + pollfd.events |= POLLERR; /* s->sock_timeout is in seconds, timeout in ms */ ms = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_CEILING); @@ -638,15 +644,18 @@ internal_select_impl(PySocketSockObject *s, int writing, _PyTime_t interval) FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); + FD_ZERO(&efds); + if (error) + FD_SET(s->sock_fd, &efds); /* See if the socket is ready */ Py_BEGIN_ALLOW_THREADS; if (writing) n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), - NULL, &fds, NULL, &tv); + NULL, &fds, &efds, &tv); else n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), - &fds, NULL, NULL, &tv); + &fds, NULL, &efds, &tv); Py_END_ALLOW_THREADS; #endif @@ -665,13 +674,13 @@ internal_select_impl(PySocketSockObject *s, int writing, _PyTime_t interval) static int internal_select(PySocketSockObject *s, int writing, _PyTime_t interval) { - return internal_select_impl(s, writing, interval); + return internal_select_impl(s, writing, interval, 0); } static int internal_connect_select(PySocketSockObject *s) { - return internal_select(s, 1, s->sock_timeout); + return internal_select(s, 1, s->sock_timeout, 1); } /* -- cgit v1.2.1 From b2b4c8f9363cb3edda969bf46d72a7136bad084f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 14:24:47 +0200 Subject: Issue #23618: Fix internal_connect_select() --- Modules/socketmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 98b6636d78..2eea726081 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -680,7 +680,7 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval) static int internal_connect_select(PySocketSockObject *s) { - return internal_select(s, 1, s->sock_timeout, 1); + return internal_select_impl(s, 1, s->sock_timeout, 1); } /* -- cgit v1.2.1 From b069be5549e7ba18837a6a03b74002a3162f064a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 16:31:19 +0200 Subject: Issue #22117: Fix integer overflow check in socket_parse_timeout() on Windows --- Modules/socketmodule.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 2eea726081..a33c12740c 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2196,6 +2196,9 @@ socket_parse_timeout(_PyTime_t *timeout, PyObject *timeout_obj) { #ifdef MS_WINDOWS struct timeval tv; +#endif +#ifndef HAVE_POLL + _PyTime_t ms; #endif int overflow = 0; @@ -2214,11 +2217,11 @@ socket_parse_timeout(_PyTime_t *timeout, PyObject *timeout_obj) } #ifdef MS_WINDOWS - overflow = (_PyTime_AsTimeval(timeout, &tv, _PyTime_ROUND_CEILING) < 0); + overflow |= (_PyTime_AsTimeval(*timeout, &tv, _PyTime_ROUND_CEILING) < 0); #endif #ifndef HAVE_POLL - timeout = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_CEILING); - overflow = (timeout > INT_MAX); + ms = _PyTime_AsMilliseconds(*timeout, _PyTime_ROUND_CEILING); + overflow |= (ms > INT_MAX); #endif if (overflow) { PyErr_SetString(PyExc_OverflowError, -- cgit v1.2.1 From dfd099ab5fa516d18d6edb34cff10eb1ae09dde5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 16:08:22 +0200 Subject: Issue #23618: Refactor internal_connect() The function now returns the error code instead of using the global errno (POSIX) or WSAGetLastError() (Windows). internal_connect() now returns errno if getsockopt() fails. --- Modules/socketmodule.c | 92 +++++++++++++++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 35 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index a33c12740c..b58e134121 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2450,7 +2450,7 @@ static int internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, int *timeoutp) { - int res, timeout; + int err, res, timeout; timeout = 0; @@ -2460,9 +2460,12 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, #ifdef MS_WINDOWS - if (s->sock_timeout > 0 - && res < 0 && WSAGetLastError() == WSAEWOULDBLOCK - && IS_SELECTABLE(s)) { + if (res < 0) + err = WSAGetLastError(); + else + err = res; + + if (s->sock_timeout > 0 && err == WSAEWOULDBLOCK && IS_SELECTABLE(s)) { /* This is a mess. Best solution: trust select */ fd_set fds; fd_set fds_exc; @@ -2481,38 +2484,46 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, Py_END_ALLOW_THREADS if (res == 0) { - res = WSAEWOULDBLOCK; + err = WSAEWOULDBLOCK; timeout = 1; - } else if (res > 0) { - if (FD_ISSET(s->sock_fd, &fds)) + } + else if (res > 0) { + if (FD_ISSET(s->sock_fd, &fds)) { /* The socket is in the writable set - this means connected */ - res = 0; + err = 0; + } else { /* As per MS docs, we need to call getsockopt() to get the underlying error */ - int res_size = sizeof res; + int res_size; + /* It must be in the exception set */ assert(FD_ISSET(s->sock_fd, &fds_exc)); - if (0 == getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, - (char *)&res, &res_size)) - /* getsockopt also clears WSAGetLastError, - so reset it back. */ - WSASetLastError(res); - else - res = WSAGetLastError(); + + res_size = sizeof res; + if (!getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, + (char *)&res, &res_size)) { + err = res; + } + else { + err = WSAGetLastError(); + } } } - /* else if (res < 0) an error occurred */ + else { + /* select() failed */ + err = WSAGetLastError(); + } } - if (res < 0) - res = WSAGetLastError(); - #else + if (res < 0) + err = errno; + else + err = 0; - if (s->sock_timeout > 0 - && res < 0 && errno == EINPROGRESS && IS_SELECTABLE(s)) { + if (s->sock_timeout > 0 && err == EINPROGRESS && IS_SELECTABLE(s)) { timeout = internal_connect_select(s); @@ -2521,27 +2532,31 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, use getsockopt(SO_ERROR) to get the real error. */ socklen_t res_size = sizeof res; - (void)getsockopt(s->sock_fd, SOL_SOCKET, - SO_ERROR, &res, &res_size); - if (res == EISCONN) - res = 0; - errno = res; + if (!getsockopt(s->sock_fd, SOL_SOCKET, + SO_ERROR, &res, &res_size)) { + if (res == EISCONN) + res = 0; + err = res; + } + else { + /* getsockopt() failed */ + err = errno; + } } else if (timeout == -1) { - res = errno; /* had error */ + /* select failed */ + err = errno; + } + else { + err = EWOULDBLOCK; /* timed out */ } - else - res = EWOULDBLOCK; /* timed out */ } - if (res < 0) - res = errno; - #endif *timeoutp = timeout; - assert(res >= 0); - return res; + assert(err >= 0); + return err; } /* s.connect(sockaddr) method */ @@ -2566,6 +2581,13 @@ sock_connect(PySocketSockObject *s, PyObject *addro) if (res < 0) return NULL; if (res != 0) { +#ifdef MS_WINDOWS + /* getsockopt also clears WSAGetLastError, + so reset it back. */ + WSASetLastError(res); +#else + errno = res; +#endif return s->errorhandler(); } Py_INCREF(Py_None); -- cgit v1.2.1 From 29005b4e1c33e608bac03344c851b541306a6145 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 16:35:35 +0200 Subject: Issue #23618: Refactor internal_connect() On Windows, internal_connect() now reuses internal_connect_select() and always calls getsockopt(). --- Modules/socketmodule.c | 109 ++++++++++++++----------------------------------- 1 file changed, 30 insertions(+), 79 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index b58e134121..ab3e913dbc 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2299,7 +2299,8 @@ sock_setsockopt(PySocketSockObject *s, PyObject *args) if (PyArg_ParseTuple(args, "iii:setsockopt", &level, &optname, &flag)) { - res = setsockopt(s->sock_fd, level, optname, &flag, sizeof flag); + res = setsockopt(s->sock_fd, level, optname, + (char*)&flag, sizeof flag); } else { PyErr_Clear(); @@ -2450,7 +2451,17 @@ static int internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, int *timeoutp) { - int err, res, timeout; +#ifdef MS_WINDOWS +# define GET_ERROR WSAGetLastError() +# define IN_PROGRESS_ERR WSAEWOULDBLOCK +# define TIMEOUT_ERR WSAEWOULDBLOCK +#else +# define GET_ERROR errno +# define IN_PROGRESS_ERR EINPROGRESS +# define TIMEOUT_ERR EWOULDBLOCK +#endif + + int res, err, in_progress, timeout; timeout = 0; @@ -2458,105 +2469,45 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, res = connect(s->sock_fd, addr, addrlen); Py_END_ALLOW_THREADS -#ifdef MS_WINDOWS - if (res < 0) - err = WSAGetLastError(); + err = GET_ERROR; else err = res; + in_progress = (err == IN_PROGRESS_ERR); - if (s->sock_timeout > 0 && err == WSAEWOULDBLOCK && IS_SELECTABLE(s)) { - /* This is a mess. Best solution: trust select */ - fd_set fds; - fd_set fds_exc; - struct timeval tv; - int conv; - - _PyTime_AsTimeval_noraise(s->sock_timeout, &tv, _PyTime_ROUND_CEILING); - - Py_BEGIN_ALLOW_THREADS - FD_ZERO(&fds); - FD_SET(s->sock_fd, &fds); - FD_ZERO(&fds_exc); - FD_SET(s->sock_fd, &fds_exc); - res = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), - NULL, &fds, &fds_exc, &tv); - Py_END_ALLOW_THREADS - - if (res == 0) { - err = WSAEWOULDBLOCK; - timeout = 1; - } - else if (res > 0) { - if (FD_ISSET(s->sock_fd, &fds)) { - /* The socket is in the writable set - this - means connected */ - err = 0; - } - else { - /* As per MS docs, we need to call getsockopt() - to get the underlying error */ - int res_size; - - /* It must be in the exception set */ - assert(FD_ISSET(s->sock_fd, &fds_exc)); - - res_size = sizeof res; - if (!getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, - (char *)&res, &res_size)) { - err = res; - } - else { - err = WSAGetLastError(); - } - } - } - else { - /* select() failed */ - err = WSAGetLastError(); - } - } - -#else - if (res < 0) - err = errno; - else - err = 0; - - if (s->sock_timeout > 0 && err == EINPROGRESS && IS_SELECTABLE(s)) { - + if (s->sock_timeout > 0 && in_progress && IS_SELECTABLE(s)) { timeout = internal_connect_select(s); - if (timeout == 0) { - /* Bug #1019808: in case of an EINPROGRESS, - use getsockopt(SO_ERROR) to get the real - error. */ + if (timeout == 1) { + /* timed out */ + err = TIMEOUT_ERR; + } + else if (timeout == 0) { socklen_t res_size = sizeof res; - if (!getsockopt(s->sock_fd, SOL_SOCKET, - SO_ERROR, &res, &res_size)) { + if (!getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, + (char*)&res, &res_size)) { if (res == EISCONN) res = 0; err = res; } else { /* getsockopt() failed */ - err = errno; + err = GET_ERROR; } } - else if (timeout == -1) { - /* select failed */ - err = errno; - } else { - err = EWOULDBLOCK; /* timed out */ + /* select() failed */ + err = GET_ERROR; } } - -#endif *timeoutp = timeout; assert(err >= 0); return err; + +#undef GET_ERROR +#undef IN_PROGRESS_ERR +#undef TIMEOUT_ERR } /* s.connect(sockaddr) method */ -- cgit v1.2.1 From db75d33f22894704a4c186a9c3386189aa647610 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 31 Mar 2015 08:12:23 -0700 Subject: Issue 23793: Add deque support for __add__(), __mul__(), and __imul__(). --- Modules/_collectionsmodule.c | 133 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 123 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index dbb2f8a07f..9f6c47f54a 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -110,6 +110,12 @@ static PyTypeObject deque_type; #define CHECK_NOT_END(link) #endif +/* To prevent len from overflowing PY_SSIZE_T_MAX, we refuse to + allocate new blocks if the current len is nearing overflow. +*/ + +#define MAX_DEQUE_LEN (PY_SSIZE_T_MAX - 3*BLOCKLEN) + /* A simple freelisting scheme is used to minimize calls to the memory allocator. It accommodates common use cases where new blocks are being added at about the same rate as old blocks are being freed. @@ -122,9 +128,7 @@ static block *freeblocks[MAXFREEBLOCKS]; static block * newblock(Py_ssize_t len) { block *b; - /* To prevent len from overflowing PY_SSIZE_T_MAX, we refuse to - * allocate new blocks if the current len is nearing overflow. */ - if (len >= PY_SSIZE_T_MAX - 2*BLOCKLEN) { + if (len >= MAX_DEQUE_LEN) { PyErr_SetString(PyExc_OverflowError, "cannot add more blocks to the deque"); return NULL; @@ -498,6 +502,115 @@ deque_inplace_concat(dequeobject *deque, PyObject *other) return (PyObject *)deque; } +static PyObject *deque_copy(PyObject *deque); + +static PyObject * +deque_concat(dequeobject *deque, PyObject *other) +{ + PyObject *new_deque; + int rv; + + rv = PyObject_IsInstance(other, (PyObject *)&deque_type); + if (rv <= 0) { + if (rv == 0) { + PyErr_Format(PyExc_TypeError, + "can only concatenate deque (not \"%.200s\") to deque", + other->ob_type->tp_name); + } + return NULL; + } + + new_deque = deque_copy((PyObject *)deque); + if (new_deque == NULL) + return NULL; + return deque_inplace_concat((dequeobject *)new_deque, other); +} + +static void deque_clear(dequeobject *deque); + +static PyObject * +deque_repeat(dequeobject *deque, Py_ssize_t n) +{ + dequeobject *new_deque; + PyObject *result; + + /* XXX add a special case for when maxlen is defined */ + if (n < 0) + n = 0; + else if (n > 0 && Py_SIZE(deque) > MAX_DEQUE_LEN / n) + return PyErr_NoMemory(); + + new_deque = (dequeobject *)deque_new(&deque_type, (PyObject *)NULL, (PyObject *)NULL); + new_deque->maxlen = deque->maxlen; + + for ( ; n ; n--) { + result = deque_extend(new_deque, (PyObject *)deque); + if (result == NULL) { + Py_DECREF(new_deque); + return NULL; + } + Py_DECREF(result); + } + return (PyObject *)new_deque; +} + +static PyObject * +deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) +{ + Py_ssize_t i, size; + PyObject *seq; + PyObject *rv; + + size = Py_SIZE(deque); + if (size == 0 || n == 1) { + Py_INCREF(deque); + return (PyObject *)deque; + } + + if (n <= 0) { + deque_clear(deque); + Py_INCREF(deque); + return (PyObject *)deque; + } + + if (size > MAX_DEQUE_LEN / n) { + return PyErr_NoMemory(); + } + + if (size == 1) { + /* common case, repeating a single element */ + PyObject *item = deque->leftblock->data[deque->leftindex]; + + if (deque->maxlen != -1 && n > deque->maxlen) + n = deque->maxlen; + + for (i = 0 ; i < n-1 ; i++) { + rv = deque_append(deque, item); + if (rv == NULL) + return NULL; + Py_DECREF(rv); + } + Py_INCREF(deque); + return (PyObject *)deque; + } + + seq = PySequence_List((PyObject *)deque); + if (seq == NULL) + return seq; + + for (i = 0 ; i < n-1 ; i++) { + rv = deque_extend(deque, seq); + if (rv == NULL) { + Py_DECREF(seq); + return NULL; + } + Py_DECREF(rv); + } + Py_INCREF(deque); + Py_DECREF(seq); + return (PyObject *)deque; +} + /* The rotate() method is part of the public API and is used internally as a primitive for other methods. @@ -1283,6 +1396,9 @@ deque_get_maxlen(dequeobject *deque) return PyLong_FromSsize_t(deque->maxlen); } + +/* deque object ********************************************************/ + static PyGetSetDef deque_getset[] = { {"maxlen", (getter)deque_get_maxlen, (setter)NULL, "maximum size of a deque or None if unbounded"}, @@ -1291,15 +1407,15 @@ static PyGetSetDef deque_getset[] = { static PySequenceMethods deque_as_sequence = { (lenfunc)deque_len, /* sq_length */ - 0, /* sq_concat */ - 0, /* sq_repeat */ + (binaryfunc)deque_concat, /* sq_concat */ + (ssizeargfunc)deque_repeat, /* sq_repeat */ (ssizeargfunc)deque_item, /* sq_item */ 0, /* sq_slice */ (ssizeobjargproc)deque_ass_item, /* sq_ass_item */ 0, /* sq_ass_slice */ (objobjproc)deque_contains, /* sq_contains */ (binaryfunc)deque_inplace_concat, /* sq_inplace_concat */ - 0, /* sq_inplace_repeat */ + (ssizeargfunc)deque_inplace_repeat, /* sq_inplace_repeat */ }; static PyNumberMethods deque_as_number = { @@ -1316,9 +1432,6 @@ static PyNumberMethods deque_as_number = { 0, /* nb_invert */ }; - -/* deque object ********************************************************/ - static PyObject *deque_iter(dequeobject *deque); static PyObject *deque_reviter(dequeobject *deque); PyDoc_STRVAR(reversed_doc, @@ -1367,7 +1480,7 @@ static PyMethodDef deque_methods[] = { PyDoc_STRVAR(deque_doc, "deque([iterable[, maxlen]]) --> deque object\n\ \n\ -Build an ordered collection with optimized access from its endpoints."); +A list-like sequence optimized for data accesses near its endpoints."); static PyTypeObject deque_type = { PyVarObject_HEAD_INIT(NULL, 0) -- cgit v1.2.1 From 40778d91ddd2ee4936ae1f348434c6454b5f8353 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 21:23:10 +0200 Subject: Issue #23618: Cleanup internal_connect() in socketmodule.c On Windows, it looks like using the C type socklen_t for getsockopt() (instead of int) is fine, it was already used in socket.getsockopt(). --- Modules/socketmodule.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index ab3e913dbc..211e77bb7b 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2485,7 +2485,7 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, else if (timeout == 0) { socklen_t res_size = sizeof res; if (!getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, - (char*)&res, &res_size)) { + (void *)&res, &res_size)) { if (res == EISCONN) res = 0; err = res; @@ -2533,8 +2533,6 @@ sock_connect(PySocketSockObject *s, PyObject *addro) return NULL; if (res != 0) { #ifdef MS_WINDOWS - /* getsockopt also clears WSAGetLastError, - so reset it back. */ WSASetLastError(res); #else errno = res; -- cgit v1.2.1 From 0e543b79f08352222227d7d2230baac26a77a4ff Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 21:28:42 +0200 Subject: Issue #23618: Fix EINTR handling in socket.connect() Call PyErr_CheckSignals() if connect(), select() or getsockopt() failed with EINTR. --- Modules/socketmodule.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 211e77bb7b..65651874a2 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2502,6 +2502,9 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, } *timeoutp = timeout; + if (err == EINTR && PyErr_CheckSignals()) + return -1; + assert(err >= 0); return err; @@ -2524,13 +2527,14 @@ sock_connect(PySocketSockObject *s, PyObject *addro) return NULL; res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); + if (res < 0) + return NULL; if (timeout == 1) { PyErr_SetString(socket_timeout, "timed out"); return NULL; } - if (res < 0) - return NULL; + if (res != 0) { #ifdef MS_WINDOWS WSASetLastError(res); @@ -2539,8 +2543,8 @@ sock_connect(PySocketSockObject *s, PyObject *addro) #endif return s->errorhandler(); } - Py_INCREF(Py_None); - return Py_None; + + Py_RETURN_NONE; } PyDoc_STRVAR(connect_doc, @@ -2564,15 +2568,9 @@ sock_connect_ex(PySocketSockObject *s, PyObject *addro) return NULL; res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); - if (res < 0) return NULL; - /* Signals are not errors (though they may raise exceptions). Adapted - from PyErr_SetFromErrnoWithFilenameObject(). */ - if (res == EINTR && PyErr_CheckSignals()) - return NULL; - return PyLong_FromLong((long) res); } -- cgit v1.2.1 From a737435d07b685442816d1cb7cbf06503e240339 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 31 Mar 2015 22:03:59 +0200 Subject: Issue #23618: Enhance EINTR handling in socket.connect() Call PyErr_CheckSignals() immediatly if connect() or select() fails with EINTR in internal_connect(). Refactor also the code to limit indentaton and make it more readable. --- Modules/socketmodule.c | 72 ++++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 35 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 65651874a2..fd73e08fc9 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2461,52 +2461,54 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, # define TIMEOUT_ERR EWOULDBLOCK #endif - int res, err, in_progress, timeout; + int res, err, wait_connect, timeout; + socklen_t res_size; - timeout = 0; + *timeoutp = 0; Py_BEGIN_ALLOW_THREADS res = connect(s->sock_fd, addr, addrlen); Py_END_ALLOW_THREADS - if (res < 0) - err = GET_ERROR; - else - err = res; - in_progress = (err == IN_PROGRESS_ERR); - - if (s->sock_timeout > 0 && in_progress && IS_SELECTABLE(s)) { - timeout = internal_connect_select(s); - - if (timeout == 1) { - /* timed out */ - err = TIMEOUT_ERR; - } - else if (timeout == 0) { - socklen_t res_size = sizeof res; - if (!getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, - (void *)&res, &res_size)) { - if (res == EISCONN) - res = 0; - err = res; - } - else { - /* getsockopt() failed */ - err = GET_ERROR; - } - } - else { - /* select() failed */ - err = GET_ERROR; - } + if (!res) { + /* connect() succeeded, the socket is connected */ + return 0; } - *timeoutp = timeout; + err = GET_ERROR; if (err == EINTR && PyErr_CheckSignals()) return -1; - assert(err >= 0); - return err; + wait_connect = (s->sock_timeout > 0 && err == IN_PROGRESS_ERR + && IS_SELECTABLE(s)); + if (!wait_connect) + return err; + + timeout = internal_connect_select(s); + if (timeout == -1) { + /* select() failed */ + err = GET_ERROR; + if (err == EINTR && PyErr_CheckSignals()) + return -1; + return err; + } + + if (timeout == 1) { + /* select() timed out */ + *timeoutp = 1; + return TIMEOUT_ERR; + } + + res_size = sizeof res; + if (getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, + (void *)&res, &res_size)) { + /* getsockopt() failed */ + return GET_ERROR; + } + + if (res == EISCONN) + return 0; + return res; #undef GET_ERROR #undef IN_PROGRESS_ERR -- cgit v1.2.1 From 11c9327643ba02b6da28dee489172cb79d580868 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 1 Apr 2015 11:09:43 +0200 Subject: Issue #23618: Fix EINTR handling on Windows Windows uses WSAEINTR error code, not EINTR, for socket functions. --- Modules/socketmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index fd73e08fc9..fcb1ff4f01 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2476,7 +2476,7 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, } err = GET_ERROR; - if (err == EINTR && PyErr_CheckSignals()) + if (CHECK_ERRNO(EINTR) && PyErr_CheckSignals()) return -1; wait_connect = (s->sock_timeout > 0 && err == IN_PROGRESS_ERR @@ -2488,7 +2488,7 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, if (timeout == -1) { /* select() failed */ err = GET_ERROR; - if (err == EINTR && PyErr_CheckSignals()) + if (CHECK_ERRNO(EINTR) && PyErr_CheckSignals()) return -1; return err; } -- cgit v1.2.1 From 61bf4cde8b029fb59ff4bc209c0eb413ed0cc702 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 1 Apr 2015 17:47:07 +0200 Subject: Issue #22117, issue #23485: Fix _PyTime_AsMilliseconds() and _PyTime_AsMicroseconds() rounding. Add also unit tests. --- Modules/_testcapimodule.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 253efb6436..7b4f239637 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3452,6 +3452,42 @@ test_PyTime_AsTimespec(PyObject *self, PyObject *args) } #endif +static PyObject * +test_PyTime_AsMilliseconds(PyObject *self, PyObject *args) +{ + PY_LONG_LONG ns; + int round; + _PyTime_t t, ms; + + if (!PyArg_ParseTuple(args, "Li", &ns, &round)) + return NULL; + if (check_time_rounding(round) < 0) + return NULL; + t = _PyTime_FromNanoseconds(ns); + ms = _PyTime_AsMilliseconds(t, round); + /* This conversion rely on the fact that _PyTime_t is a number of + nanoseconds */ + return _PyTime_AsNanosecondsObject(ms); +} + +static PyObject * +test_PyTime_AsMicroseconds(PyObject *self, PyObject *args) +{ + PY_LONG_LONG ns; + int round; + _PyTime_t t, ms; + + if (!PyArg_ParseTuple(args, "Li", &ns, &round)) + return NULL; + if (check_time_rounding(round) < 0) + return NULL; + t = _PyTime_FromNanoseconds(ns); + ms = _PyTime_AsMicroseconds(t, round); + /* This conversion rely on the fact that _PyTime_t is a number of + nanoseconds */ + return _PyTime_AsNanosecondsObject(ms); +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3621,6 +3657,8 @@ static PyMethodDef TestMethods[] = { #ifdef HAVE_CLOCK_GETTIME {"PyTime_AsTimespec", test_PyTime_AsTimespec, METH_VARARGS}, #endif + {"PyTime_AsMilliseconds", test_PyTime_AsMilliseconds, METH_VARARGS}, + {"PyTime_AsMicroseconds", test_PyTime_AsMicroseconds, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From aa8526f72789a74d8ee70f48833f20d371992b14 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 1 Apr 2015 18:35:22 +0200 Subject: Issue #23836: Use _Py_write_noraise() to retry on EINTR in trip_signal() of signalmodule.c --- Modules/signalmodule.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index a1fda3eb31..cc13194dfa 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -263,9 +263,10 @@ trip_signal(int sig_num) #endif { byte = (unsigned char)sig_num; - do { - rc = write(fd, &byte, 1); - } while (rc < 0 && errno == EINTR); + + /* _Py_write_noraise() retries write() if write() is interrupted by + a signal (fails with EINTR). */ + rc = _Py_write_noraise(fd, &byte, 1); if (rc < 0) { Py_AddPendingCall(report_wakeup_write_error, -- cgit v1.2.1 From 4a346fa4d40c51d143e21b097abd529b290b0b8b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 1 Apr 2015 18:35:53 +0200 Subject: Issue #23836: Use _Py_write_noraise() to retry on EINTR in child_exec() of _posixsubprocess --- Modules/_posixsubprocess.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index 0b385a1ab1..489467b9d5 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -382,7 +382,7 @@ child_exec(char *const exec_array[], PyObject *preexec_fn, PyObject *preexec_fn_args_tuple) { - int i, saved_errno, unused, reached_preexec = 0; + int i, saved_errno, reached_preexec = 0; PyObject *result; const char* err_msg = ""; /* Buffer large enough to hold a hex integer. We can't malloc. */ @@ -496,28 +496,29 @@ error: saved_errno = errno; /* Report the posix error to our parent process. */ /* We ignore all write() return values as the total size of our writes is - * less than PIPEBUF and we cannot do anything about an error anyways. */ + less than PIPEBUF and we cannot do anything about an error anyways. + Use _Py_write_noraise() to retry write() if it is interrupted by a + signal (fails with EINTR). */ if (saved_errno) { char *cur; - unused = write(errpipe_write, "OSError:", 8); + _Py_write_noraise(errpipe_write, "OSError:", 8); cur = hex_errno + sizeof(hex_errno); while (saved_errno != 0 && cur > hex_errno) { *--cur = "0123456789ABCDEF"[saved_errno % 16]; saved_errno /= 16; } - unused = write(errpipe_write, cur, hex_errno + sizeof(hex_errno) - cur); - unused = write(errpipe_write, ":", 1); + _Py_write_noraise(errpipe_write, cur, hex_errno + sizeof(hex_errno) - cur); + _Py_write_noraise(errpipe_write, ":", 1); if (!reached_preexec) { /* Indicate to the parent that the error happened before exec(). */ - unused = write(errpipe_write, "noexec", 6); + _Py_write_noraise(errpipe_write, "noexec", 6); } /* We can't call strerror(saved_errno). It is not async signal safe. * The parent process will look the error message up. */ } else { - unused = write(errpipe_write, "SubprocessError:0:", 18); - unused = write(errpipe_write, err_msg, strlen(err_msg)); + _Py_write_noraise(errpipe_write, "SubprocessError:0:", 18); + _Py_write_noraise(errpipe_write, err_msg, strlen(err_msg)); } - if (unused) return; /* silly? yes! avoids gcc compiler warning. */ } -- cgit v1.2.1 From 4cf251bd3ccee6aa80c6bcd7a7c36e3a6f26b23c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 1 Apr 2015 18:48:58 +0200 Subject: Issue #23836: Fix the faulthandler module to handle reentrant calls to its signal handlers. Use also _Py_write_noraise() instead of write() to retry write() if it is interrupted by a signal (fail with EINTR). faulthandler.dump_traceback() also calls PyErr_CheckSignals() to call the Python signal handler if a signal was received. --- Modules/faulthandler.c | 85 ++++++++++++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 40 deletions(-) (limited to 'Modules') diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 9c763ab96b..f53ea3fb86 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -28,9 +28,7 @@ # define FAULTHANDLER_USER #endif -/* cast size_t to int because write() takes an int on Windows - (anyway, the length is smaller than 30 characters) */ -#define PUTS(fd, str) write(fd, str, (int)strlen(str)) +#define PUTS(fd, str) _Py_write_noraise(fd, str, strlen(str)) _Py_IDENTIFIER(enable); _Py_IDENTIFIER(fileno); @@ -213,6 +211,42 @@ get_thread_state(void) return tstate; } +static void +faulthandler_dump_traceback(int fd, int all_threads, + PyInterpreterState *interp) +{ + static volatile int reentrant = 0; + PyThreadState *tstate; + + if (reentrant) + return; + + reentrant = 1; + +#ifdef WITH_THREAD + /* SIGSEGV, SIGFPE, SIGABRT, SIGBUS and SIGILL are synchronous signals and + are thus delivered to the thread that caused the fault. Get the Python + thread state of the current thread. + + PyThreadState_Get() doesn't give the state of the thread that caused the + fault if the thread released the GIL, and so this function cannot be + used. Read the thread local storage (TLS) instead: call + PyGILState_GetThisThreadState(). */ + tstate = PyGILState_GetThisThreadState(); +#else + tstate = PyThreadState_Get(); +#endif + + if (all_threads) + _Py_DumpTracebackThreads(fd, interp, tstate); + else { + if (tstate != NULL) + _Py_DumpTraceback(fd, tstate); + } + + reentrant = 0; +} + static PyObject* faulthandler_dump_traceback_py(PyObject *self, PyObject *args, PyObject *kwargs) @@ -247,6 +281,10 @@ faulthandler_dump_traceback_py(PyObject *self, else { _Py_DumpTraceback(fd, tstate); } + + if (PyErr_CheckSignals()) + return NULL; + Py_RETURN_NONE; } @@ -270,7 +308,6 @@ faulthandler_fatal_error(int signum) const int fd = fatal_error.fd; unsigned int i; fault_handler_t *handler = NULL; - PyThreadState *tstate; int save_errno = errno; if (!fatal_error.enabled) @@ -298,26 +335,8 @@ faulthandler_fatal_error(int signum) PUTS(fd, handler->name); PUTS(fd, "\n\n"); -#ifdef WITH_THREAD - /* SIGSEGV, SIGFPE, SIGABRT, SIGBUS and SIGILL are synchronous signals and - are thus delivered to the thread that caused the fault. Get the Python - thread state of the current thread. - - PyThreadState_Get() doesn't give the state of the thread that caused the - fault if the thread released the GIL, and so this function cannot be - used. Read the thread local storage (TLS) instead: call - PyGILState_GetThisThreadState(). */ - tstate = PyGILState_GetThisThreadState(); -#else - tstate = PyThreadState_Get(); -#endif - - if (fatal_error.all_threads) - _Py_DumpTracebackThreads(fd, fatal_error.interp, tstate); - else { - if (tstate != NULL) - _Py_DumpTraceback(fd, tstate); - } + faulthandler_dump_traceback(fd, fatal_error.all_threads, + fatal_error.interp); errno = save_errno; #ifdef MS_WINDOWS @@ -474,7 +493,7 @@ faulthandler_thread(void *unused) /* get the thread holding the GIL, NULL if no thread hold the GIL */ current = (PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current); - write(thread.fd, thread.header, (int)thread.header_len); + _Py_write_noraise(thread.fd, thread.header, (int)thread.header_len); errmsg = _Py_DumpTracebackThreads(thread.fd, thread.interp, current); ok = (errmsg == NULL); @@ -660,28 +679,14 @@ static void faulthandler_user(int signum) { user_signal_t *user; - PyThreadState *tstate; int save_errno = errno; user = &user_signals[signum]; if (!user->enabled) return; -#ifdef WITH_THREAD - /* PyThreadState_Get() doesn't give the state of the current thread if - the thread doesn't hold the GIL. Read the thread local storage (TLS) - instead: call PyGILState_GetThisThreadState(). */ - tstate = PyGILState_GetThisThreadState(); -#else - tstate = PyThreadState_Get(); -#endif + faulthandler_dump_traceback(user->fd, user->all_threads, user->interp); - if (user->all_threads) - _Py_DumpTracebackThreads(user->fd, user->interp, tstate); - else { - if (tstate != NULL) - _Py_DumpTraceback(user->fd, tstate); - } #ifdef HAVE_SIGACTION if (user->chain) { (void)sigaction(signum, &user->previous, NULL); -- cgit v1.2.1 From ec998d2d291131166cde7fdff60a8f9aef82b131 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 1 Apr 2015 21:57:09 +0200 Subject: Issue #23834: Add sock_call() helper function The BEGIN_SELECT_LOOP and END_SELECT_LOOP macros of socketmodule.c don't handle EINTR. Functions using these macros use an inner loop to handle EINTR, but they don't recompute the timeout. This changes replaces the two macros with a new sock_call() function which takes a function as a parameter. sock_call() recomputes the timeout, handle false positive and handle EINTR. --- Modules/socketmodule.c | 579 +++++++++++++++++++++++++++---------------------- 1 file changed, 323 insertions(+), 256 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 64db006e6c..38879c1987 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -683,45 +683,113 @@ internal_connect_select(PySocketSockObject *s) return internal_select_impl(s, 1, s->sock_timeout, 1); } -/* - Two macros for automatic retry of select() in case of false positives - (for example, select() could indicate a socket is ready for reading - but the data then discarded by the OS because of a wrong checksum). - Here is an example of use: +/* Call a socket function. - BEGIN_SELECT_LOOP(s) + Raise an exception and return -1 on error, return 0 on success. - timeout = internal_select(s, 0, interval); + If the socket has a timeout, wait until the socket is ready before calling + the function: wait until the socket is writable if writing is nonzero, wait + until the socket received data otherwise. - if (!timeout) { - Py_BEGIN_ALLOW_THREADS - outlen = recv(s->sock_fd, cbuf, len, flags); - Py_END_ALLOW_THREADS - } - if (timeout == 1) { - PyErr_SetString(socket_timeout, "timed out"); + If the function func is interrupted by a signal (failed with EINTR): retry + the function, except if the signal handler raised an exception (PEP 475). + + When the function is retried, recompute the timeout using a monotonic clock. + + sock_call() must be called with the GIL held. The function func is called + with the GIL released. */ +static int +sock_call(PySocketSockObject *s, + int writing, + int (*func) (PySocketSockObject *s, void *data), + void *data) +{ + int has_timeout = (s->sock_timeout > 0); + _PyTime_t deadline = 0; + int deadline_initialized = 0; + int res; + + /* sock_call() must be called with the GIL held. */ + assert(PyGILState_Check()); + + /* outer loop to retry select() when select() is interrupted by a signal + or to retry select()+func() on false positive (see above) */ + while (1) { + if (has_timeout) { + _PyTime_t interval; + + if (deadline_initialized) { + /* recompute the timeout */ + interval = deadline - _PyTime_GetMonotonicClock(); + } + else { + deadline = _PyTime_GetMonotonicClock() + s->sock_timeout; + interval = s->sock_timeout; + } + + res = internal_select(s, writing, interval); + if (res == -1) { + if (CHECK_ERRNO(EINTR)) { + /* select() was interrupted by a signal */ + if (PyErr_CheckSignals()) + return -1; + + /* retry select() */ + continue; + } + + /* select() failed */ + s->errorhandler(); + return -1; + } + + if (res == 1) { + PyErr_SetString(socket_timeout, "timed out"); + return -1; + } + + /* the socket is ready */ + } + + /* inner loop to retry func() when func() is interrupted by a signal */ + while (1) { + Py_BEGIN_ALLOW_THREADS + res = func(s, data); + Py_END_ALLOW_THREADS + + if (res) { + /* func() succeeded */ + return 0; + } + + if (!CHECK_ERRNO(EINTR)) + break; + + /* func() was interrupted by a signal */ + if (PyErr_CheckSignals()) + return -1; + + /* retry func() */ + } + + if (s->sock_timeout > 0 + && (CHECK_ERRNO(EWOULDBLOCK) || CHECK_ERRNO(EAGAIN))) { + /* False positive: func() failed with EWOULDBLOCK or EAGAIN. + + For example, select() could indicate a socket is ready for + reading, but the data then discarded by the OS because of a + wrong checksum. + + Loop on select() to recheck for socket readyness. */ + continue; + } + + /* func() failed */ + s->errorhandler(); return -1; } - END_SELECT_LOOP(s) -*/ +} -#define BEGIN_SELECT_LOOP(s) \ - { \ - _PyTime_t deadline = 0; \ - _PyTime_t interval = s->sock_timeout; \ - int has_timeout = (s->sock_timeout > 0); \ - if (has_timeout) \ - deadline = _PyTime_GetMonotonicClock() + interval; \ - while (1) { \ - errno = 0; \ - -#define END_SELECT_LOOP(s) \ - if (!has_timeout || \ - (!CHECK_ERRNO(EWOULDBLOCK) && !CHECK_ERRNO(EAGAIN))) \ - break; \ - interval = deadline - _PyTime_GetMonotonicClock(); \ - } \ - } \ /* Initialize a new socket object. */ @@ -2061,23 +2129,51 @@ get_cmsg_data_len(struct msghdr *msg, struct cmsghdr *cmsgh, size_t *data_len) #endif /* CMSG_LEN */ +struct sock_accept { + socklen_t *addrlen; + sock_addr_t *addrbuf; + SOCKET_T result; +}; + +#if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) +/* accept4() is available on Linux 2.6.28+ and glibc 2.10 */ +static int accept4_works = -1; +#endif + +static int +sock_accept_impl(PySocketSockObject *s, void *data) +{ + struct sock_accept *ctx = data; + +#if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) + if (accept4_works != 0) { + ctx->result = accept4(s->sock_fd, SAS2SA(ctx->addrbuf), ctx->addrlen, + SOCK_CLOEXEC); + if (ctx->result == INVALID_SOCKET && accept4_works == -1) { + /* On Linux older than 2.6.28, accept4() fails with ENOSYS */ + accept4_works = (errno != ENOSYS); + } + } + if (accept4_works == 0) + ctx->result = accept(s->sock_fd, SAS2SA(ctx->addrbuf), ctx->addrlen); +#else + ctx->result = accept(s->sock_fd, SAS2SA(ctx->addrbuf), ctx->addrlen); +#endif + return (ctx->result >= 0); +} + /* s._accept() -> (fd, address) */ static PyObject * sock_accept(PySocketSockObject *s) { sock_addr_t addrbuf; - SOCKET_T newfd = INVALID_SOCKET; + SOCKET_T newfd; socklen_t addrlen; PyObject *sock = NULL; PyObject *addr = NULL; PyObject *res = NULL; - int timeout; - int async_err = 0; -#if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) - /* accept4() is available on Linux 2.6.28+ and glibc 2.10 */ - static int accept4_works = -1; -#endif + struct sock_accept ctx; if (!getsockaddrlen(s, &addrlen)) return NULL; @@ -2086,37 +2182,11 @@ sock_accept(PySocketSockObject *s) if (!IS_SELECTABLE(s)) return select_error(); - BEGIN_SELECT_LOOP(s) - do { - timeout = internal_select(s, 0, interval); - - if (!timeout) { - Py_BEGIN_ALLOW_THREADS -#if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) - if (accept4_works != 0) { - newfd = accept4(s->sock_fd, SAS2SA(&addrbuf), &addrlen, - SOCK_CLOEXEC); - if (newfd == INVALID_SOCKET && accept4_works == -1) { - /* On Linux older than 2.6.28, accept4() fails with ENOSYS */ - accept4_works = (errno != ENOSYS); - } - } - if (accept4_works == 0) - newfd = accept(s->sock_fd, SAS2SA(&addrbuf), &addrlen); -#else - newfd = accept(s->sock_fd, SAS2SA(&addrbuf), &addrlen); -#endif - Py_END_ALLOW_THREADS - } - } while (newfd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); - if (timeout == 1) { - PyErr_SetString(socket_timeout, "timed out"); + ctx.addrlen = &addrlen; + ctx.addrbuf = &addrbuf; + if (sock_call(s, 0, sock_accept_impl, &ctx) < 0) return NULL; - } - END_SELECT_LOOP(s) - - if (newfd == INVALID_SOCKET) - return (!async_err) ? s->errorhandler() : NULL; + newfd = ctx.result; #ifdef MS_WINDOWS if (!SetHandleInformation((HANDLE)newfd, HANDLE_FLAG_INHERIT, 0)) { @@ -2690,6 +2760,28 @@ at least 0 (if it is lower, it is set to 0); it specifies the number of\n\ unaccepted connections that the system will allow before refusing new\n\ connections. If not specified, a default reasonable value is chosen."); +struct sock_recv { + char *cbuf; + Py_ssize_t len; + int flags; + Py_ssize_t result; +}; + +static int +sock_recv_impl(PySocketSockObject *s, void *data) +{ + struct sock_recv *ctx = data; + +#ifdef MS_WINDOWS + if (ctx->len > INT_MAX) + ctx->len = INT_MAX; + ctx->result = recv(s->sock_fd, ctx->cbuf, (int)ctx->len, ctx->flags); +#else + ctx->result = recv(s->sock_fd, ctx->cbuf, ctx->len, ctx->flags); +#endif + return (ctx->result >= 0); +} + /* * This is the guts of the recv() and recv_into() methods, which reads into a @@ -2703,9 +2795,7 @@ connections. If not specified, a default reasonable value is chosen."); static Py_ssize_t sock_recv_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags) { - Py_ssize_t outlen = -1; - int timeout; - int async_err = 0; + struct sock_recv ctx; if (!IS_SELECTABLE(s)) { select_error(); @@ -2716,36 +2806,13 @@ sock_recv_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags) return 0; } - BEGIN_SELECT_LOOP(s) - do { - timeout = internal_select(s, 0, interval); - - if (!timeout) { - Py_BEGIN_ALLOW_THREADS -#ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - outlen = recv(s->sock_fd, cbuf, (int)len, flags); -#else - outlen = recv(s->sock_fd, cbuf, len, flags); -#endif - Py_END_ALLOW_THREADS - } - } while (outlen < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); - - if (timeout == 1) { - PyErr_SetString(socket_timeout, "timed out"); + ctx.cbuf = cbuf; + ctx.len = len; + ctx.flags = flags; + if (sock_call(s, 0, sock_recv_impl, &ctx) < 0) return -1; - } - END_SELECT_LOOP(s) - if (outlen < 0) { - /* Note: the call to errorhandler() ALWAYS indirectly returned - NULL, so ignore its return value */ - if (!async_err) - s->errorhandler(); - return -1; - } - return outlen; + + return ctx.result; } @@ -2859,6 +2926,34 @@ is not specified (or 0), receive up to the size available in the given buffer.\n \n\ See recv() for documentation about the flags."); +struct sock_recvfrom { + char* cbuf; + Py_ssize_t len; + int flags; + socklen_t *addrlen; + sock_addr_t *addrbuf; + Py_ssize_t result; +}; + +static int +sock_recvfrom_impl(PySocketSockObject *s, void *data) +{ + struct sock_recvfrom *ctx = data; + + memset(ctx->addrbuf, 0, *ctx->addrlen); + +#ifdef MS_WINDOWS + if (ctx->len > INT_MAX) + ctx->len = INT_MAX; + ctx->result = recvfrom(s->sock_fd, ctx->cbuf, (int)ctx->len, ctx->flags, + SAS2SA(ctx->addrbuf), ctx->addrlen); +#else + ctx->result = recvfrom(s->sock_fd, ctx->cbuf, ctx->len, ctx->flags, + SAS2SA(ctx->addrbuf), ctx->addrlen); +#endif + return (ctx->result >= 0); +} + /* * This is the guts of the recvfrom() and recvfrom_into() methods, which reads @@ -2876,10 +2971,8 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags, PyObject** addr) { sock_addr_t addrbuf; - int timeout; - Py_ssize_t n = -1; socklen_t addrlen; - int async_err = 0; + struct sock_recvfrom ctx; *addr = NULL; @@ -2891,42 +2984,20 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags, return -1; } - BEGIN_SELECT_LOOP(s) - do { - memset(&addrbuf, 0, addrlen); - timeout = internal_select(s, 0, interval); - - if (!timeout) { - Py_BEGIN_ALLOW_THREADS -#ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - n = recvfrom(s->sock_fd, cbuf, (int)len, flags, - (void *) &addrbuf, &addrlen); -#else - n = recvfrom(s->sock_fd, cbuf, len, flags, - SAS2SA(&addrbuf), &addrlen); -#endif - Py_END_ALLOW_THREADS - } - } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); - - if (timeout == 1) { - PyErr_SetString(socket_timeout, "timed out"); + ctx.cbuf = cbuf; + ctx.len = len; + ctx.flags = flags; + ctx.addrbuf = &addrbuf; + ctx.addrlen = &addrlen; + if (sock_call(s, 0, sock_recvfrom_impl, &ctx) < 0) return -1; - } - END_SELECT_LOOP(s) - if (n < 0) { - if (!async_err) - s->errorhandler(); - return -1; - } - if (!(*addr = makesockaddr(s->sock_fd, SAS2SA(&addrbuf), - addrlen, s->sock_proto))) + *addr = makesockaddr(s->sock_fd, SAS2SA(&addrbuf), addrlen, + s->sock_proto); + if (*addr == NULL) return -1; - return n; + return ctx.result; } /* s.recvfrom(nbytes [,flags]) method */ @@ -3037,6 +3108,21 @@ PyDoc_STRVAR(recvfrom_into_doc, \n\ Like recv_into(buffer[, nbytes[, flags]]) but also return the sender's address info."); +struct sock_recvmsg { + struct msghdr *msg; + int flags; + ssize_t result; +}; + +static int +sock_recvmsg_impl(PySocketSockObject *s, void *data) +{ + struct sock_recvmsg *ctx = data; + + ctx->result = recvmsg(s->sock_fd, ctx->msg, ctx->flags); + return (ctx->result >= 0); +} + /* The sendmsg() and recvmsg[_into]() methods require a working CMSG_LEN(). See the comment near get_CMSG_LEN(). */ @@ -3056,9 +3142,6 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen, int flags, Py_ssize_t controllen, PyObject *(*makeval)(ssize_t, void *), void *makeval_data) { - ssize_t bytes_received = -1; - int timeout; - int async_err = 0; sock_addr_t addrbuf; socklen_t addrbuflen; struct msghdr msg = {0}; @@ -3067,6 +3150,7 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen, struct cmsghdr *cmsgh; size_t cmsgdatalen = 0; int cmsg_status; + struct sock_recvmsg ctx; /* XXX: POSIX says that msg_name and msg_namelen "shall be ignored" when the socket is connected (Linux fills them in @@ -3093,35 +3177,17 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen, goto finally; } - BEGIN_SELECT_LOOP(s) - do { - msg.msg_name = SAS2SA(&addrbuf); - msg.msg_namelen = addrbuflen; - msg.msg_iov = iov; - msg.msg_iovlen = iovlen; - msg.msg_control = controlbuf; - msg.msg_controllen = controllen; - timeout = internal_select(s, 0, interval); - - if (timeout == 1) { - PyErr_SetString(socket_timeout, "timed out"); - goto finally; - } - - if (!timeout) { - Py_BEGIN_ALLOW_THREADS; - bytes_received = recvmsg(s->sock_fd, &msg, flags); - Py_END_ALLOW_THREADS; - } - } while (bytes_received < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); - END_SELECT_LOOP(s) + msg.msg_name = SAS2SA(&addrbuf); + msg.msg_namelen = addrbuflen; + msg.msg_iov = iov; + msg.msg_iovlen = iovlen; + msg.msg_control = controlbuf; + msg.msg_controllen = controllen; - if (bytes_received < 0) { - if (!async_err) - s->errorhandler(); + ctx.msg = &msg; + ctx.flags = flags; + if (sock_call(s, 0, sock_recvmsg_impl, &ctx) < 0) goto finally; - } /* Make list of (level, type, data) tuples from control messages. */ if ((cmsg_list = PyList_New(0)) == NULL) @@ -3163,7 +3229,7 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen, } retval = Py_BuildValue("NOiN", - (*makeval)(bytes_received, makeval_data), + (*makeval)(ctx.result, makeval_data), cmsg_list, (int)msg.msg_flags, makesockaddr(s->sock_fd, SAS2SA(&addrbuf), @@ -3371,16 +3437,36 @@ SCM_RIGHTS mechanism."); #endif /* CMSG_LEN */ +struct sock_send { + char *buf; + Py_ssize_t len; + int flags; + Py_ssize_t result; +}; + +static int +sock_send_impl(PySocketSockObject *s, void *data) +{ + struct sock_send *ctx = data; + +#ifdef MS_WINDOWS + if (ctx->len > INT_MAX) + ctx->len = INT_MAX; + ctx->result = send(s->sock_fd, ctx->buf, (int)ctx->len, ctx->flags); +#else + ctx->result = send(s->sock_fd, ctx->buf, ctx->len, ctx->flags); +#endif + return (ctx->result >= 0); +} + /* s.send(data [,flags]) method */ static PyObject * sock_send(PySocketSockObject *s, PyObject *args) { - char *buf; - Py_ssize_t len, n = -1; - int async_err = 0; - int flags = 0, timeout; + int flags = 0; Py_buffer pbuf; + struct sock_send ctx; if (!PyArg_ParseTuple(args, "y*|i:send", &pbuf, &flags)) return NULL; @@ -3389,36 +3475,16 @@ sock_send(PySocketSockObject *s, PyObject *args) PyBuffer_Release(&pbuf); return select_error(); } - buf = pbuf.buf; - len = pbuf.len; - - BEGIN_SELECT_LOOP(s) - do { - timeout = internal_select(s, 1, interval); - - if (!timeout) { - Py_BEGIN_ALLOW_THREADS -#ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - n = send(s->sock_fd, buf, (int)len, flags); -#else - n = send(s->sock_fd, buf, len, flags); -#endif - Py_END_ALLOW_THREADS - } - } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); - if (timeout == 1) { + ctx.buf = pbuf.buf; + ctx.len = pbuf.len; + ctx.flags = flags; + if (sock_call(s, 1, sock_send_impl, &ctx) < 0) { PyBuffer_Release(&pbuf); - PyErr_SetString(socket_timeout, "timed out"); return NULL; } - END_SELECT_LOOP(s) - PyBuffer_Release(&pbuf); - if (n < 0) - return (!async_err) ? s->errorhandler() : NULL; - return PyLong_FromSsize_t(n); + + return PyLong_FromSsize_t(ctx.result); } PyDoc_STRVAR(send_doc, @@ -3494,6 +3560,32 @@ until all data is sent. If an error occurs, it's impossible\n\ to tell how much data has been sent."); +struct sock_sendto { + char *buf; + Py_ssize_t len; + int flags; + int addrlen; + sock_addr_t *addrbuf; + Py_ssize_t result; +}; + +static int +sock_sendto_impl(PySocketSockObject *s, void *data) +{ + struct sock_sendto *ctx = data; + +#ifdef MS_WINDOWS + if (ctx->len > INT_MAX) + ctx->len = INT_MAX; + ctx->result = sendto(s->sock_fd, ctx->buf, (int)ctx->len, ctx->flags, + SAS2SA(ctx->addrbuf), ctx->addrlen); +#else + ctx->result = sendto(s->sock_fd, ctx->buf, ctx->len, ctx->flags, + SAS2SA(ctx->addrbuf), ctx->addrlen); +#endif + return (ctx->result >= 0); +} + /* s.sendto(data, [flags,] sockaddr) method */ static PyObject * @@ -3501,11 +3593,10 @@ sock_sendto(PySocketSockObject *s, PyObject *args) { Py_buffer pbuf; PyObject *addro; - char *buf; - Py_ssize_t len, arglen; + Py_ssize_t arglen; sock_addr_t addrbuf; - int addrlen, n = -1, flags, timeout; - int async_err = 0; + int addrlen, flags; + struct sock_sendto ctx; flags = 0; arglen = PyTuple_Size(args); @@ -3526,9 +3617,6 @@ sock_sendto(PySocketSockObject *s, PyObject *args) if (PyErr_Occurred()) return NULL; - buf = pbuf.buf; - len = pbuf.len; - if (!IS_SELECTABLE(s)) { PyBuffer_Release(&pbuf); return select_error(); @@ -3539,35 +3627,18 @@ sock_sendto(PySocketSockObject *s, PyObject *args) return NULL; } - BEGIN_SELECT_LOOP(s) - do { - timeout = internal_select(s, 1, interval); - - if (!timeout) { - Py_BEGIN_ALLOW_THREADS -#ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - n = sendto(s->sock_fd, buf, (int)len, flags, - SAS2SA(&addrbuf), addrlen); -#else - n = sendto(s->sock_fd, buf, len, flags, - SAS2SA(&addrbuf), addrlen); -#endif - Py_END_ALLOW_THREADS - } - } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); - - if (timeout == 1) { + ctx.buf = pbuf.buf; + ctx.len = pbuf.len; + ctx.flags = flags; + ctx.addrlen = addrlen; + ctx.addrbuf = &addrbuf; + if (sock_call(s, 1, sock_sendto_impl, &ctx) < 0) { PyBuffer_Release(&pbuf); - PyErr_SetString(socket_timeout, "timed out"); return NULL; } - END_SELECT_LOOP(s) PyBuffer_Release(&pbuf); - if (n < 0) - return (!async_err) ? s->errorhandler() : NULL; - return PyLong_FromSsize_t(n); + + return PyLong_FromSsize_t(ctx.result); } PyDoc_STRVAR(sendto_doc, @@ -3577,6 +3648,21 @@ Like send(data, flags) but allows specifying the destination address.\n\ For IP sockets, the address is a pair (hostaddr, port)."); +struct sock_sendmsg { + struct msghdr *msg; + int flags; + ssize_t result; +}; + +static int +sock_sendmsg_impl(PySocketSockObject *s, void *data) +{ + struct sock_sendmsg *ctx = data; + + ctx->result = sendmsg(s->sock_fd, ctx->msg, ctx->flags); + return (ctx->result >= 0); +} + /* The sendmsg() and recvmsg[_into]() methods require a working CMSG_LEN(). See the comment near get_CMSG_LEN(). */ #ifdef CMSG_LEN @@ -3597,11 +3683,10 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) } *cmsgs = NULL; void *controlbuf = NULL; size_t controllen, controllen_last; - ssize_t bytes_sent = -1; - int async_err = 0; - int addrlen, timeout, flags = 0; + int addrlen, flags = 0; PyObject *data_arg, *cmsg_arg = NULL, *addr_arg = NULL, *data_fast = NULL, *cmsg_fast = NULL, *retval = NULL; + struct sock_sendmsg ctx; if (!PyArg_ParseTuple(args, "O|OiO:sendmsg", &data_arg, &cmsg_arg, &flags, &addr_arg)) @@ -3755,30 +3840,12 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) goto finally; } - BEGIN_SELECT_LOOP(s) - do { - timeout = internal_select(s, 1, interval); - - if (!timeout) { - Py_BEGIN_ALLOW_THREADS; - bytes_sent = sendmsg(s->sock_fd, &msg, flags); - Py_END_ALLOW_THREADS; - } - - if (timeout == 1) { - PyErr_SetString(socket_timeout, "timed out"); - goto finally; - } - } while (bytes_sent < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); - END_SELECT_LOOP(s) - - if (bytes_sent < 0) { - if (!async_err) - s->errorhandler(); + ctx.msg = &msg; + ctx.flags = flags; + if (sock_call(s, 1, sock_sendmsg_impl, &ctx) < 0) goto finally; - } - retval = PyLong_FromSsize_t(bytes_sent); + + retval = PyLong_FromSsize_t(ctx.result); finally: PyMem_Free(controlbuf); -- cgit v1.2.1 From 8a45cd80a192f997283c58e96a545dabb8207fbc Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 1 Apr 2015 22:53:26 +0200 Subject: Issue #23834: Modify socket.sendall() to reuse sock_call() with sock_send_impl() --- Modules/socketmodule.c | 50 +++++++++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 29 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 38879c1987..90d751f4a4 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -3501,10 +3501,10 @@ static PyObject * sock_sendall(PySocketSockObject *s, PyObject *args) { char *buf; - Py_ssize_t len, n = -1; - int async_err = 0; - int flags = 0, timeout; + Py_ssize_t len, n; + int flags = 0; Py_buffer pbuf; + struct sock_send ctx; if (!PyArg_ParseTuple(args, "y*|i:sendall", &pbuf, &flags)) return NULL; @@ -3517,38 +3517,30 @@ sock_sendall(PySocketSockObject *s, PyObject *args) } do { - timeout = internal_select(s, 1, s->sock_timeout); - - n = -1; - if (!timeout) { - Py_BEGIN_ALLOW_THREADS -#ifdef MS_WINDOWS - if (len > INT_MAX) - len = INT_MAX; - n = send(s->sock_fd, buf, (int)len, flags); -#else - n = send(s->sock_fd, buf, len, flags); -#endif - Py_END_ALLOW_THREADS - } - if (timeout == 1) { + ctx.buf = buf; + ctx.len = len; + ctx.flags = flags; + if (sock_call(s, 1, sock_send_impl, &ctx) < 0) { PyBuffer_Release(&pbuf); - PyErr_SetString(socket_timeout, "timed out"); return NULL; } - if (n >= 0) { - buf += n; - len -= n; + n = ctx.result; + assert(n >= 0); + + buf += n; + len -= n; + + /* We must run our signal handlers before looping again. + send() can return a successful partial write when it is + interrupted, so we can't restrict ourselves to EINTR. */ + if (PyErr_CheckSignals()) { + PyBuffer_Release(&pbuf); + return NULL; } - } while (len > 0 && (n >= 0 || errno == EINTR) && - !(async_err = PyErr_CheckSignals())); + } while (len > 0); PyBuffer_Release(&pbuf); - if (n < 0 || async_err) - return (!async_err) ? s->errorhandler() : NULL; - - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } PyDoc_STRVAR(sendall_doc, -- cgit v1.2.1 From 6f60166808919bd51cd64eabf75214c5fba21479 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 2 Apr 2015 03:22:49 +0200 Subject: Issue #23834: Fix sock_call(), set deadline_initialized to recompute the timeout --- Modules/socketmodule.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 90d751f4a4..968c2df165 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -723,6 +723,7 @@ sock_call(PySocketSockObject *s, interval = deadline - _PyTime_GetMonotonicClock(); } else { + deadline_initialized = 1; deadline = _PyTime_GetMonotonicClock() + s->sock_timeout; interval = s->sock_timeout; } -- cgit v1.2.1 From 84ae3848dc4d7709548724ef2ce362eec92bcf26 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 2 Apr 2015 12:28:07 +0200 Subject: Issue #23618: Don't declare recvmsg/sendmsg helper functions on Windows --- Modules/socketmodule.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 968c2df165..60891b8fec 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -3109,6 +3109,9 @@ PyDoc_STRVAR(recvfrom_into_doc, \n\ Like recv_into(buffer[, nbytes[, flags]]) but also return the sender's address info."); +/* The sendmsg() and recvmsg[_into]() methods require a working + CMSG_LEN(). See the comment near get_CMSG_LEN(). */ +#ifdef CMSG_LEN struct sock_recvmsg { struct msghdr *msg; int flags; @@ -3124,10 +3127,6 @@ sock_recvmsg_impl(PySocketSockObject *s, void *data) return (ctx->result >= 0); } - -/* The sendmsg() and recvmsg[_into]() methods require a working - CMSG_LEN(). See the comment near get_CMSG_LEN(). */ -#ifdef CMSG_LEN /* * Call recvmsg() with the supplied iovec structures, flags, and * ancillary data buffer size (controllen). Returns the tuple return @@ -3641,6 +3640,9 @@ Like send(data, flags) but allows specifying the destination address.\n\ For IP sockets, the address is a pair (hostaddr, port)."); +/* The sendmsg() and recvmsg[_into]() methods require a working + CMSG_LEN(). See the comment near get_CMSG_LEN(). */ +#ifdef CMSG_LEN struct sock_sendmsg { struct msghdr *msg; int flags; @@ -3656,9 +3658,6 @@ sock_sendmsg_impl(PySocketSockObject *s, void *data) return (ctx->result >= 0); } -/* The sendmsg() and recvmsg[_into]() methods require a working - CMSG_LEN(). See the comment near get_CMSG_LEN(). */ -#ifdef CMSG_LEN /* s.sendmsg(buffers[, ancdata[, flags[, address]]]) method */ static PyObject * -- cgit v1.2.1 From a478c9c642f97797b5aeedb0151d4c49937b5449 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 2 Apr 2015 11:50:57 +0200 Subject: Issue #23618: socket.socket.connect() now waits until the connection completes instead of raising InterruptedError if the connection is interrupted by signals, signal handlers don't raise an exception and the socket is blocking or has a timeout. socket.socket.connect() still raise InterruptedError for non-blocking sockets. --- Modules/socketmodule.c | 302 +++++++++++++++++++++++++++++-------------------- 1 file changed, 178 insertions(+), 124 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 60891b8fec..d9fa04d0d6 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -481,6 +481,19 @@ select_error(void) (errno == expected) #endif +#ifdef MS_WINDOWS +# define GET_SOCK_ERROR WSAGetLastError() +# define SET_SOCK_ERROR(err) WSASetLastError(err) +# define SOCK_TIMEOUT_ERR WSAEWOULDBLOCK +# define SOCK_INPROGRESS_ERR WSAEWOULDBLOCK +#else +# define GET_SOCK_ERROR errno +# define SET_SOCK_ERROR(err) do { errno = err; } while (0) +# define SOCK_TIMEOUT_ERR EWOULDBLOCK +# define SOCK_INPROGRESS_ERR EINPROGRESS +#endif + + #ifdef MS_WINDOWS /* Does WSASocket() support the WSA_FLAG_NO_HANDLE_INHERIT flag? */ static int support_wsa_no_inherit = -1; @@ -592,8 +605,8 @@ internal_setblocking(PySocketSockObject *s, int block) } static int -internal_select_impl(PySocketSockObject *s, int writing, _PyTime_t interval, - int error) +internal_select(PySocketSockObject *s, int writing, _PyTime_t interval, + int connect) { int n; #ifdef HAVE_POLL @@ -610,43 +623,64 @@ internal_select_impl(PySocketSockObject *s, int writing, _PyTime_t interval, #endif /* Error condition is for output only */ - assert(!(error && !writing)); - - /* Nothing to do unless we're in timeout mode (not non-blocking) */ - if (s->sock_timeout <= 0) - return 0; + assert(!(connect && !writing)); /* Guard against closed socket */ if (s->sock_fd < 0) return 0; - /* Handling this condition here simplifies the select loops */ - if (interval < 0) - return 1; + /* for connect(), we want to poll even if the socket is blocking */ + if (!connect) { + /* Nothing to do unless we're in timeout mode (not non-blocking) */ + if (s->sock_timeout <= 0) + return 0; + + /* Handling this condition here simplifies the select loops */ + if (interval < 0) + return 1; + } /* Prefer poll, if available, since you can poll() any fd * which can't be done with select(). */ #ifdef HAVE_POLL pollfd.fd = s->sock_fd; pollfd.events = writing ? POLLOUT : POLLIN; - if (error) + if (connect) { + /* On Windows, the socket becomes writable on connection success, + but a connection failure is notified as an error. On POSIX, the + socket becomes writable on connection success or on connection + failure. */ pollfd.events |= POLLERR; + } /* s->sock_timeout is in seconds, timeout in ms */ - ms = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_CEILING); + if (interval >= 0) + ms = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_CEILING); + else + ms = -1; assert(ms <= INT_MAX); Py_BEGIN_ALLOW_THREADS; n = poll(&pollfd, 1, (int)ms); Py_END_ALLOW_THREADS; #else - _PyTime_AsTimeval_noraise(interval, &tv, _PyTime_ROUND_CEILING); + if (interval >= 0) + _PyTime_AsTimeval_noraise(interval, &tv, _PyTime_ROUND_CEILING); + else { + tv.tv_sec = -1; + tv.tv_sec = 0; + } FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); FD_ZERO(&efds); - if (error) + if (connect) { + /* On Windows, the socket becomes writable on connection success, + but a connection failure is notified as an error. On POSIX, the + socket becomes writable on connection success or on connection + failure. */ FD_SET(s->sock_fd, &efds); + } /* See if the socket is ready */ Py_BEGIN_ALLOW_THREADS; @@ -666,43 +700,32 @@ internal_select_impl(PySocketSockObject *s, int writing, _PyTime_t interval, return 0; } -/* Do a select()/poll() on the socket, if necessary (sock_timeout > 0). - The argument writing indicates the direction. - This does not raise an exception; we'll let our caller do that - after they've reacquired the interpreter lock. - Returns 1 on timeout, -1 on error, 0 otherwise. */ -static int -internal_select(PySocketSockObject *s, int writing, _PyTime_t interval) -{ - return internal_select_impl(s, writing, interval, 0); -} - -static int -internal_connect_select(PySocketSockObject *s) -{ - return internal_select_impl(s, 1, s->sock_timeout, 1); -} - /* Call a socket function. - Raise an exception and return -1 on error, return 0 on success. + On error, raise an exception and return -1 if err is set, or fill err and + return -1 otherwise. If a signal was received and the signal handler raised + an exception, return -1, and set err to -1 if err is set. + + On success, return 0, and set err to 0 if err is set. If the socket has a timeout, wait until the socket is ready before calling the function: wait until the socket is writable if writing is nonzero, wait until the socket received data otherwise. - If the function func is interrupted by a signal (failed with EINTR): retry + If the socket function is interrupted by a signal (failed with EINTR): retry the function, except if the signal handler raised an exception (PEP 475). When the function is retried, recompute the timeout using a monotonic clock. - sock_call() must be called with the GIL held. The function func is called - with the GIL released. */ + sock_call_ex() must be called with the GIL held. The socket function is + called with the GIL released. */ static int -sock_call(PySocketSockObject *s, - int writing, - int (*func) (PySocketSockObject *s, void *data), - void *data) +sock_call_ex(PySocketSockObject *s, + int writing, + int (*sock_func) (PySocketSockObject *s, void *data), + void *data, + int connect, + int *err) { int has_timeout = (s->sock_timeout > 0); _PyTime_t deadline = 0; @@ -713,27 +736,39 @@ sock_call(PySocketSockObject *s, assert(PyGILState_Check()); /* outer loop to retry select() when select() is interrupted by a signal - or to retry select()+func() on false positive (see above) */ + or to retry select()+sock_func() on false positive (see above) */ while (1) { - if (has_timeout) { + /* For connect(), poll even for blocking socket. The connection + runs asynchronously. */ + if (has_timeout || connect) { _PyTime_t interval; - if (deadline_initialized) { - /* recompute the timeout */ - interval = deadline - _PyTime_GetMonotonicClock(); - } - else { - deadline_initialized = 1; - deadline = _PyTime_GetMonotonicClock() + s->sock_timeout; - interval = s->sock_timeout; + if (has_timeout) { + if (deadline_initialized) { + /* recompute the timeout */ + interval = deadline - _PyTime_GetMonotonicClock(); + } + else { + deadline_initialized = 1; + deadline = _PyTime_GetMonotonicClock() + s->sock_timeout; + interval = s->sock_timeout; + } } + else + interval = -1; - res = internal_select(s, writing, interval); + res = internal_select(s, writing, interval, connect); if (res == -1) { + if (err) + *err = GET_SOCK_ERROR; + if (CHECK_ERRNO(EINTR)) { /* select() was interrupted by a signal */ - if (PyErr_CheckSignals()) + if (PyErr_CheckSignals()) { + if (err) + *err = -1; return -1; + } /* retry select() */ continue; @@ -745,37 +780,49 @@ sock_call(PySocketSockObject *s, } if (res == 1) { - PyErr_SetString(socket_timeout, "timed out"); + if (err) + *err = SOCK_TIMEOUT_ERR; + else + PyErr_SetString(socket_timeout, "timed out"); return -1; } /* the socket is ready */ } - /* inner loop to retry func() when func() is interrupted by a signal */ + /* inner loop to retry sock_func() when sock_func() is interrupted + by a signal */ while (1) { Py_BEGIN_ALLOW_THREADS - res = func(s, data); + res = sock_func(s, data); Py_END_ALLOW_THREADS if (res) { - /* func() succeeded */ + /* sock_func() succeeded */ + if (err) + *err = 0; return 0; } + if (err) + *err = GET_SOCK_ERROR; + if (!CHECK_ERRNO(EINTR)) break; - /* func() was interrupted by a signal */ - if (PyErr_CheckSignals()) + /* sock_func() was interrupted by a signal */ + if (PyErr_CheckSignals()) { + if (err) + *err = -1; return -1; + } - /* retry func() */ + /* retry sock_func() */ } if (s->sock_timeout > 0 && (CHECK_ERRNO(EWOULDBLOCK) || CHECK_ERRNO(EAGAIN))) { - /* False positive: func() failed with EWOULDBLOCK or EAGAIN. + /* False positive: sock_func() failed with EWOULDBLOCK or EAGAIN. For example, select() could indicate a socket is ready for reading, but the data then discarded by the OS because of a @@ -785,12 +832,23 @@ sock_call(PySocketSockObject *s, continue; } - /* func() failed */ - s->errorhandler(); + /* sock_func() failed */ + if (!err) + s->errorhandler(); + /* else: err was already set before */ return -1; } } +static int +sock_call(PySocketSockObject *s, + int writing, + int (*func) (PySocketSockObject *s, void *data), + void *data) +{ + return sock_call_ex(s, writing, func, data, 0, NULL); +} + /* Initialize a new socket object. */ @@ -2519,23 +2577,26 @@ The object cannot be used after this call, but the file descriptor\n\ can be reused for other purposes. The file descriptor is returned."); static int -internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, - int *timeoutp) +sock_connect_impl(PySocketSockObject *s, void* Py_UNUSED(data)) { -#ifdef MS_WINDOWS -# define GET_ERROR WSAGetLastError() -# define IN_PROGRESS_ERR WSAEWOULDBLOCK -# define TIMEOUT_ERR WSAEWOULDBLOCK -#else -# define GET_ERROR errno -# define IN_PROGRESS_ERR EINPROGRESS -# define TIMEOUT_ERR EWOULDBLOCK -#endif + int err; + socklen_t size = sizeof err; - int res, err, wait_connect, timeout; - socklen_t res_size; + if (getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, (void *)&err, &size)) { + /* getsockopt() failed */ + return 0; + } + + if (err == EISCONN) + return 1; + return (err == 0); +} - *timeoutp = 0; +static int +internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, + int raise) +{ + int res, err, wait_connect; Py_BEGIN_ALLOW_THREADS res = connect(s->sock_fd, addr, addrlen); @@ -2546,44 +2607,53 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, return 0; } - err = GET_ERROR; - if (CHECK_ERRNO(EINTR) && PyErr_CheckSignals()) - return -1; - - wait_connect = (s->sock_timeout > 0 && err == IN_PROGRESS_ERR - && IS_SELECTABLE(s)); - if (!wait_connect) - return err; + /* connect() failed */ - timeout = internal_connect_select(s); - if (timeout == -1) { - /* select() failed */ - err = GET_ERROR; - if (CHECK_ERRNO(EINTR) && PyErr_CheckSignals()) + /* save error, PyErr_CheckSignals() can replace it */ + err = GET_SOCK_ERROR; + if (CHECK_ERRNO(EINTR)) { + if (PyErr_CheckSignals()) return -1; - return err; - } - if (timeout == 1) { - /* select() timed out */ - *timeoutp = 1; - return TIMEOUT_ERR; - } + /* Issue #23618: when connect() fails with EINTR, the connection is + running asynchronously. - res_size = sizeof res; - if (getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, - (void *)&res, &res_size)) { - /* getsockopt() failed */ - return GET_ERROR; + If the socket is blocking or has a timeout, wait until the + connection completes, fails or timed out using select(), and then + get the connection status using getsockopt(SO_ERROR). + + If the socket is non-blocking, raise InterruptedError. The caller is + responsible to wait until the connection completes, fails or timed + out (it's the case in asyncio for example). */ + wait_connect = (s->sock_timeout != 0 && IS_SELECTABLE(s)); + } + else { + wait_connect = (s->sock_timeout > 0 && err == SOCK_INPROGRESS_ERR + && IS_SELECTABLE(s)); } - if (res == EISCONN) - return 0; - return res; + if (!wait_connect) { + if (raise) { + /* restore error, maybe replaced by PyErr_CheckSignals() */ + SET_SOCK_ERROR(err); + s->errorhandler(); + return -1; + } + else + return err; + } -#undef GET_ERROR -#undef IN_PROGRESS_ERR -#undef TIMEOUT_ERR + if (raise) { + /* socket.connect() raises an exception on error */ + if (sock_call_ex(s, 1, sock_connect_impl, NULL, 1, NULL) < 0) + return -1; + } + else { + /* socket.connect_ex() returns the error code on error */ + if (sock_call_ex(s, 1, sock_connect_impl, NULL, 1, &err) < 0) + return err; + } + return 0; } /* s.connect(sockaddr) method */ @@ -2594,29 +2664,14 @@ sock_connect(PySocketSockObject *s, PyObject *addro) sock_addr_t addrbuf; int addrlen; int res; - int timeout; if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) return NULL; - res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); + res = internal_connect(s, SAS2SA(&addrbuf), addrlen, 1); if (res < 0) return NULL; - if (timeout == 1) { - PyErr_SetString(socket_timeout, "timed out"); - return NULL; - } - - if (res != 0) { -#ifdef MS_WINDOWS - WSASetLastError(res); -#else - errno = res; -#endif - return s->errorhandler(); - } - Py_RETURN_NONE; } @@ -2635,12 +2690,11 @@ sock_connect_ex(PySocketSockObject *s, PyObject *addro) sock_addr_t addrbuf; int addrlen; int res; - int timeout; if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) return NULL; - res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); + res = internal_connect(s, SAS2SA(&addrbuf), addrlen, 0); if (res < 0) return NULL; -- cgit v1.2.1 From 7d363af9fd6757db0b95dd89fbaf32eca760e159 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 2 Apr 2015 14:37:20 +0200 Subject: Issue #23618: Fix sock_connect_impl(), set the socket error code sock_call_ex() gets the socket error code when the socket function fails. sock_connect_impl() didn't set the error correctly. --- Modules/socketmodule.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index d9fa04d0d6..81e9cc908f 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2589,7 +2589,13 @@ sock_connect_impl(PySocketSockObject *s, void* Py_UNUSED(data)) if (err == EISCONN) return 1; - return (err == 0); + if (err != 0) { + /* sock_call_ex() uses GET_SOCK_ERROR() to get the error code */ + SET_SOCK_ERROR(err); + abort(); + return 0; + } + return 1; } static int -- cgit v1.2.1 From d66f4cc361c90d97b17443dee6b44bc8c2a563be Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 2 Apr 2015 15:17:12 +0200 Subject: Issue #23618: Ooops, remove abort() added for debug purpose --- Modules/socketmodule.c | 1 - 1 file changed, 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 81e9cc908f..89df463a52 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2592,7 +2592,6 @@ sock_connect_impl(PySocketSockObject *s, void* Py_UNUSED(data)) if (err != 0) { /* sock_call_ex() uses GET_SOCK_ERROR() to get the error code */ SET_SOCK_ERROR(err); - abort(); return 0; } return 1; -- cgit v1.2.1 From e5a1ccdc5648669a45fd37781f99b022bdd1dd52 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 3 Apr 2015 13:10:54 +0200 Subject: Issue #22117: Add a new _PyTime_FromSeconds() function Fix also _Py_InitializeEx_Private(): initialize time before initializing import, import_init() uses the _PyTime API (for thread locks). --- Modules/_testcapimodule.c | 13 +++++++++++++ Modules/_threadmodule.c | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 7b4f239637..d6eb6d4509 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3382,6 +3382,18 @@ return_result_with_error(PyObject *self, PyObject *args) Py_RETURN_NONE; } +static PyObject * +test_pytime_fromseconds(PyObject *self, PyObject *args) +{ + int seconds; + _PyTime_t ts; + + if (!PyArg_ParseTuple(args, "i", &seconds)) + return NULL; + ts = _PyTime_FromSeconds(seconds); + return _PyTime_AsNanosecondsObject(ts); +} + static PyObject * test_pytime_fromsecondsobject(PyObject *self, PyObject *args) { @@ -3651,6 +3663,7 @@ static PyMethodDef TestMethods[] = { return_null_without_error, METH_NOARGS}, {"return_result_with_error", return_result_with_error, METH_NOARGS}, + {"PyTime_FromSeconds", test_pytime_fromseconds, METH_VARARGS}, {"PyTime_FromSecondsObject", test_pytime_fromsecondsobject, METH_VARARGS}, {"PyTime_AsSecondsDouble", test_pytime_assecondsdouble, METH_VARARGS}, {"PyTime_AsTimeval", test_PyTime_AsTimeval, METH_VARARGS}, diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 323447f9da..812c8a3b6a 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -101,7 +101,7 @@ lock_acquire_parse_args(PyObject *args, PyObject *kwds, char *kwlist[] = {"blocking", "timeout", NULL}; int blocking = 1; PyObject *timeout_obj = NULL; - const _PyTime_t unset_timeout = _PyTime_FromNanoseconds(-1000000000); + const _PyTime_t unset_timeout = _PyTime_FromSeconds(-1); *timeout = unset_timeout ; -- cgit v1.2.1 From 45b87f06541e2aef57aba8471ee17a8896f6697e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 3 Apr 2015 13:22:27 +0200 Subject: Issue #23834: Simplify timeout handling * Use the new _PyTime_FromSeconds() function to set the timeout to -1 second for socket.settimeout(None). It avoids a special case in internal_select() because of a rounding issue: -1 nanosecond is rounded to 0 millisecond which means non-blocking, instead of blocking. * Check if the interval the negative in sock_call_ex() instead of doing the check in internal_select(). sock_call_ex() remembers if the socket has a timeout or not, which avoids a race condition if the timeout is modified in a different thread. --- Modules/socketmodule.c | 40 +++++++++++++--------------------------- 1 file changed, 13 insertions(+), 27 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 89df463a52..5e267a4f29 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -629,17 +629,6 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval, if (s->sock_fd < 0) return 0; - /* for connect(), we want to poll even if the socket is blocking */ - if (!connect) { - /* Nothing to do unless we're in timeout mode (not non-blocking) */ - if (s->sock_timeout <= 0) - return 0; - - /* Handling this condition here simplifies the select loops */ - if (interval < 0) - return 1; - } - /* Prefer poll, if available, since you can poll() any fd * which can't be done with select(). */ #ifdef HAVE_POLL @@ -654,22 +643,14 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval, } /* s->sock_timeout is in seconds, timeout in ms */ - if (interval >= 0) - ms = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_CEILING); - else - ms = -1; + ms = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_CEILING); assert(ms <= INT_MAX); Py_BEGIN_ALLOW_THREADS; n = poll(&pollfd, 1, (int)ms); Py_END_ALLOW_THREADS; #else - if (interval >= 0) - _PyTime_AsTimeval_noraise(interval, &tv, _PyTime_ROUND_CEILING); - else { - tv.tv_sec = -1; - tv.tv_sec = 0; - } + _PyTime_AsTimeval_noraise(interval, &tv, _PyTime_ROUND_CEILING); FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); @@ -741,9 +722,9 @@ sock_call_ex(PySocketSockObject *s, /* For connect(), poll even for blocking socket. The connection runs asynchronously. */ if (has_timeout || connect) { - _PyTime_t interval; - if (has_timeout) { + _PyTime_t interval; + if (deadline_initialized) { /* recompute the timeout */ interval = deadline - _PyTime_GetMonotonicClock(); @@ -753,11 +734,16 @@ sock_call_ex(PySocketSockObject *s, deadline = _PyTime_GetMonotonicClock() + s->sock_timeout; interval = s->sock_timeout; } + + if (interval >= 0) + res = internal_select(s, writing, interval, connect); + else + res = 1; + } + else { + res = internal_select(s, writing, -1, connect); } - else - interval = -1; - res = internal_select(s, writing, interval, connect); if (res == -1) { if (err) *err = GET_SOCK_ERROR; @@ -2332,7 +2318,7 @@ socket_parse_timeout(_PyTime_t *timeout, PyObject *timeout_obj) int overflow = 0; if (timeout_obj == Py_None) { - *timeout = -1; + *timeout = _PyTime_FromSeconds(-1); return 0; } -- cgit v1.2.1 From 1daf728f032b9765302429c9e9859085d5e4126a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 2 Apr 2015 21:28:28 +0200 Subject: Issue #23853: Cleanup _ssl.c * Rename check_socket_and_wait_for_timeout() to PySSL_select() * PySSL_select() is now clearly splitted betwen poll() and select() * Add empty lines for readability --- Modules/_ssl.c | 95 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 50 insertions(+), 45 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 3c909a6a3a..aed4ac004c 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -223,8 +223,7 @@ static PyTypeObject PySSLMemoryBIO_Type; static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args); static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args); -static int check_socket_and_wait_for_timeout(PySocketSockObject *s, - int writing); +static int PySSL_select(PySocketSockObject *s, int writing); static PyObject *PySSL_peercert(PySSLSocket *self, PyObject *args); static PyObject *PySSL_cipher(PySSLSocket *self); @@ -588,15 +587,18 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self) ret = SSL_do_handshake(self->ssl); err = SSL_get_error(self->ssl, ret); PySSL_END_ALLOW_THREADS + if (PyErr_CheckSignals()) goto error; + if (err == SSL_ERROR_WANT_READ) { - sockstate = check_socket_and_wait_for_timeout(sock, 0); + sockstate = PySSL_select(sock, 0); } else if (err == SSL_ERROR_WANT_WRITE) { - sockstate = check_socket_and_wait_for_timeout(sock, 1); + sockstate = PySSL_select(sock, 1); } else { sockstate = SOCKET_OPERATION_OK; } + if (sockstate == SOCKET_HAS_TIMED_OUT) { PyErr_SetString(PySocketModule.timeout_error, ERRSTR("The handshake operation timed out")); @@ -1609,11 +1611,17 @@ static void PySSL_dealloc(PySSLSocket *self) */ static int -check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) +PySSL_select(PySocketSockObject *s, int writing) { + int rc; +#ifdef HAVE_POLL + struct pollfd pollfd; + _PyTime_t ms; +#else + int nfds; fd_set fds; struct timeval tv; - int rc; +#endif /* Nothing to do unless we're in timeout mode (not non-blocking) */ if ((s == NULL) || (s->sock_timeout == 0)) @@ -1628,25 +1636,17 @@ check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) /* Prefer poll, if available, since you can poll() any fd * which can't be done with select(). */ #ifdef HAVE_POLL - { - struct pollfd pollfd; - int timeout; - - pollfd.fd = s->sock_fd; - pollfd.events = writing ? POLLOUT : POLLIN; + pollfd.fd = s->sock_fd; + pollfd.events = writing ? POLLOUT : POLLIN; - /* s->sock_timeout is in seconds, timeout in ms */ - timeout = (int)_PyTime_AsMilliseconds(s->sock_timeout, - _PyTime_ROUND_CEILING); - - PySSL_BEGIN_ALLOW_THREADS - rc = poll(&pollfd, 1, timeout); - PySSL_END_ALLOW_THREADS - - goto normal_return; - } -#endif + /* s->sock_timeout is in seconds, timeout in ms */ + ms = (int)_PyTime_AsMilliseconds(s->sock_timeout, _PyTime_ROUND_CEILING); + assert(ms <= INT_MAX); + PySSL_BEGIN_ALLOW_THREADS + rc = poll(&pollfd, 1, (int)ms); + PySSL_END_ALLOW_THREADS +#else /* Guard against socket too large for select*/ if (!_PyIsSelectable_fd(s->sock_fd)) return SOCKET_TOO_LARGE_FOR_SELECT; @@ -1656,19 +1656,16 @@ check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); - /* See if the socket is ready */ + /* Wait until the socket becomes ready */ PySSL_BEGIN_ALLOW_THREADS + nfds = Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int); if (writing) - rc = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), - NULL, &fds, NULL, &tv); + rc = select(nfds, NULL, &fds, NULL, &tv); else - rc = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), - &fds, NULL, NULL, &tv); + rc = select(nfds, &fds, NULL, NULL, &tv); PySSL_END_ALLOW_THREADS - -#ifdef HAVE_POLL -normal_return: #endif + /* Return SOCKET_TIMED_OUT on timeout, SOCKET_OPERATION_OK otherwise (when we are able to write or when there's something to read) */ return rc == 0 ? SOCKET_HAS_TIMED_OUT : SOCKET_OPERATION_OK; @@ -1710,7 +1707,7 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); } - sockstate = check_socket_and_wait_for_timeout(sock, 1); + sockstate = PySSL_select(sock, 1); if (sockstate == SOCKET_HAS_TIMED_OUT) { PyErr_SetString(PySocketModule.timeout_error, "The write operation timed out"); @@ -1724,21 +1721,24 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) "Underlying socket too large for select()."); goto error; } + do { PySSL_BEGIN_ALLOW_THREADS len = SSL_write(self->ssl, buf.buf, (int)buf.len); err = SSL_get_error(self->ssl, len); PySSL_END_ALLOW_THREADS - if (PyErr_CheckSignals()) { + + if (PyErr_CheckSignals()) goto error; - } + if (err == SSL_ERROR_WANT_READ) { - sockstate = check_socket_and_wait_for_timeout(sock, 0); + sockstate = PySSL_select(sock, 0); } else if (err == SSL_ERROR_WANT_WRITE) { - sockstate = check_socket_and_wait_for_timeout(sock, 1); + sockstate = PySSL_select(sock, 1); } else { sockstate = SOCKET_OPERATION_OK; } + if (sockstate == SOCKET_HAS_TIMED_OUT) { PyErr_SetString(PySocketModule.timeout_error, "The write operation timed out"); @@ -1847,21 +1847,23 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) count = SSL_read(self->ssl, mem, len); err = SSL_get_error(self->ssl, count); PySSL_END_ALLOW_THREADS + if (PyErr_CheckSignals()) goto error; + if (err == SSL_ERROR_WANT_READ) { - sockstate = check_socket_and_wait_for_timeout(sock, 0); + sockstate = PySSL_select(sock, 0); } else if (err == SSL_ERROR_WANT_WRITE) { - sockstate = check_socket_and_wait_for_timeout(sock, 1); - } else if ((err == SSL_ERROR_ZERO_RETURN) && - (SSL_get_shutdown(self->ssl) == - SSL_RECEIVED_SHUTDOWN)) + sockstate = PySSL_select(sock, 1); + } else if (err == SSL_ERROR_ZERO_RETURN && + SSL_get_shutdown(self->ssl) == SSL_RECEIVED_SHUTDOWN) { count = 0; goto done; - } else { - sockstate = SOCKET_OPERATION_OK; } + else + sockstate = SOCKET_OPERATION_OK; + if (sockstate == SOCKET_HAS_TIMED_OUT) { PyErr_SetString(PySocketModule.timeout_error, "The read operation timed out"); @@ -1870,6 +1872,7 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) break; } } while (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE); + if (count <= 0) { PySSL_SetError(self, count, __FILE__, __LINE__); goto error; @@ -1935,6 +1938,7 @@ static PyObject *PySSL_SSLshutdown(PySSLSocket *self) SSL_set_read_ahead(self->ssl, 0); err = SSL_shutdown(self->ssl); PySSL_END_ALLOW_THREADS + /* If err == 1, a secure shutdown with SSL_shutdown() is complete */ if (err > 0) break; @@ -1952,11 +1956,12 @@ static PyObject *PySSL_SSLshutdown(PySSLSocket *self) /* Possibly retry shutdown until timeout or failure */ ssl_err = SSL_get_error(self->ssl, err); if (ssl_err == SSL_ERROR_WANT_READ) - sockstate = check_socket_and_wait_for_timeout(sock, 0); + sockstate = PySSL_select(sock, 0); else if (ssl_err == SSL_ERROR_WANT_WRITE) - sockstate = check_socket_and_wait_for_timeout(sock, 1); + sockstate = PySSL_select(sock, 1); else break; + if (sockstate == SOCKET_HAS_TIMED_OUT) { if (ssl_err == SSL_ERROR_WANT_READ) PyErr_SetString(PySocketModule.timeout_error, -- cgit v1.2.1 From 08fa9a3e2bcbc621f523a2c8416103d0e5c4599d Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 3 Apr 2015 19:42:32 +0300 Subject: Removed trailing whitespaces in miscalenous files. --- Modules/ld_so_aix.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/ld_so_aix.in b/Modules/ld_so_aix.in index 86a9f7e15e..961532bb91 100644 --- a/Modules/ld_so_aix.in +++ b/Modules/ld_so_aix.in @@ -5,7 +5,7 @@ # TYPE: executable, uses makexp_aix # SYSTEM: AIX # -# DESCRIPTION: Creates a shareable .o from a set of pre-compiled +# DESCRIPTION: Creates a shareable .o from a set of pre-compiled # (unshared) .o files # # USAGE: ld_so_aix [CC] [arguments] @@ -46,7 +46,7 @@ # 4. Uncommenting the "echo" lines gives detailed output # about the commands executed in the script. # -# +# # HISTORY: Oct-1996 -- Support added for multiple .o files -- # -- and optional arguments processing. -- # Chris Myers (myers@tc.cornell.edu), Keith Kwok @@ -132,7 +132,7 @@ do done if test "$objfile" = "libpython@VERSION@@ABIFLAGS@.so"; then - ldsocoremode="true" + ldsocoremode="true" fi if test -z "$objs"; then -- cgit v1.2.1 From 3c882f5ed9c35954cd11735107d1521b4fd9235e Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Fri, 3 Apr 2015 13:09:02 -0700 Subject: Issue #23500: Argument Clinic is now smarter about generating the "#ifndef" (empty) definition of the methoddef macro: it's only generated once, even if Argument Clinic processes the same symbol multiple times, and it's emitted at the end of all processing rather than immediately after the first use. --- Modules/clinic/spwdmodule.c.h | 10 +++++----- Modules/clinic/zlibmodule.c.h | 14 +++++--------- Modules/posixmodule.c | 14 +------------- 3 files changed, 11 insertions(+), 27 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/spwdmodule.c.h b/Modules/clinic/spwdmodule.c.h index b091fc9ba7..889419e09d 100644 --- a/Modules/clinic/spwdmodule.c.h +++ b/Modules/clinic/spwdmodule.c.h @@ -36,10 +36,6 @@ exit: #endif /* defined(HAVE_GETSPNAM) */ -#ifndef SPWD_GETSPNAM_METHODDEF - #define SPWD_GETSPNAM_METHODDEF -#endif /* !defined(SPWD_GETSPNAM_METHODDEF) */ - #if defined(HAVE_GETSPENT) PyDoc_STRVAR(spwd_getspall__doc__, @@ -64,7 +60,11 @@ spwd_getspall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) #endif /* defined(HAVE_GETSPENT) */ +#ifndef SPWD_GETSPNAM_METHODDEF + #define SPWD_GETSPNAM_METHODDEF +#endif /* !defined(SPWD_GETSPNAM_METHODDEF) */ + #ifndef SPWD_GETSPALL_METHODDEF #define SPWD_GETSPALL_METHODDEF #endif /* !defined(SPWD_GETSPALL_METHODDEF) */ -/*[clinic end generated code: output=41fec4a15b0cd2a0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ab16125c5e5f2b1b input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index f54a805377..267498e399 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -314,10 +314,6 @@ zlib_Compress_copy(compobject *self, PyObject *Py_UNUSED(ignored)) #endif /* defined(HAVE_ZLIB_COPY) */ -#ifndef ZLIB_COMPRESS_COPY_METHODDEF - #define ZLIB_COMPRESS_COPY_METHODDEF -#endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ - #if defined(HAVE_ZLIB_COPY) PyDoc_STRVAR(zlib_Decompress_copy__doc__, @@ -340,10 +336,6 @@ zlib_Decompress_copy(compobject *self, PyObject *Py_UNUSED(ignored)) #endif /* defined(HAVE_ZLIB_COPY) */ -#ifndef ZLIB_DECOMPRESS_COPY_METHODDEF - #define ZLIB_DECOMPRESS_COPY_METHODDEF -#endif /* !defined(ZLIB_DECOMPRESS_COPY_METHODDEF) */ - PyDoc_STRVAR(zlib_Decompress_flush__doc__, "flush($self, length=zlib.DEF_BUF_SIZE, /)\n" "--\n" @@ -450,4 +442,8 @@ exit: return return_value; } -/*[clinic end generated code: output=bc9473721ca7c962 input=a9049054013a1b77]*/ + +#ifndef ZLIB_COMPRESS_COPY_METHODDEF + #define ZLIB_COMPRESS_COPY_METHODDEF +#endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ +/*[clinic end generated code: output=901c18189767dc08 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index ef69a45ee1..e1aabfa5c3 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -17130,10 +17130,6 @@ dump buffer #define OS_SYSTEM_METHODDEF #endif /* !defined(OS_SYSTEM_METHODDEF) */ -#ifndef OS_SYSTEM_METHODDEF - #define OS_SYSTEM_METHODDEF -#endif /* !defined(OS_SYSTEM_METHODDEF) */ - #ifndef OS_UNAME_METHODDEF #define OS_UNAME_METHODDEF #endif /* !defined(OS_UNAME_METHODDEF) */ @@ -17306,10 +17302,6 @@ dump buffer #define OS_WAITPID_METHODDEF #endif /* !defined(OS_WAITPID_METHODDEF) */ -#ifndef OS_WAITPID_METHODDEF - #define OS_WAITPID_METHODDEF -#endif /* !defined(OS_WAITPID_METHODDEF) */ - #ifndef OS_WAIT_METHODDEF #define OS_WAIT_METHODDEF #endif /* !defined(OS_WAIT_METHODDEF) */ @@ -17410,10 +17402,6 @@ dump buffer #define OS_PUTENV_METHODDEF #endif /* !defined(OS_PUTENV_METHODDEF) */ -#ifndef OS_PUTENV_METHODDEF - #define OS_PUTENV_METHODDEF -#endif /* !defined(OS_PUTENV_METHODDEF) */ - #ifndef OS_UNSETENV_METHODDEF #define OS_UNSETENV_METHODDEF #endif /* !defined(OS_UNSETENV_METHODDEF) */ @@ -17521,7 +17509,7 @@ dump buffer #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=52a6140b0b052ce6 input=524ce2e021e4eba6]*/ +/*[clinic end generated code: output=b788c2d6010113e8 input=524ce2e021e4eba6]*/ static PyMethodDef posix_methods[] = { -- cgit v1.2.1 From 970e566ca7317a2fa90d57de73aec7216995691f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 3 Apr 2015 23:53:51 +0300 Subject: Issue #23501: Argumen Clinic now generates code into separate files by default. --- Modules/_bz2module.c | 3 +- Modules/_codecsmodule.c | 31 +- Modules/_cryptmodule.c | 37 +- Modules/_cursesmodule.c | 70 +- Modules/_datetimemodule.c | 38 +- Modules/_dbmmodule.c | 74 +- Modules/_lzmamodule.c | 3 +- Modules/_opcode.c | 37 +- Modules/_pickle.c | 3 +- Modules/_weakref.c | 31 +- Modules/arraymodule.c | 3 +- Modules/audioop.c | 3 +- Modules/binascii.c | 3 +- Modules/cjkcodecs/multibytecodec.c | 7 +- Modules/clinic/_codecsmodule.c.h | 32 + Modules/clinic/_cryptmodule.c.h | 38 + Modules/clinic/_cursesmodule.c.h | 70 + Modules/clinic/_datetimemodule.c.h | 38 + Modules/clinic/_dbmmodule.c.h | 72 + Modules/clinic/_opcode.c.h | 37 + Modules/clinic/_weakref.c.h | 31 + Modules/clinic/md5module.c.h | 96 + Modules/clinic/posixmodule.c.h | 5850 ++++++++++++++++++++++++++++++++++++ Modules/clinic/pyexpat.c.h | 289 ++ Modules/clinic/sha1module.c.h | 96 + Modules/clinic/sha256module.c.h | 125 + Modules/clinic/sha512module.c.h | 173 ++ Modules/clinic/unicodedata.c.h | 37 + Modules/cmathmodule.c | 3 +- Modules/fcntlmodule.c | 3 +- Modules/grpmodule.c | 3 +- Modules/md5module.c | 103 +- Modules/posixmodule.c | 5797 ++--------------------------------- Modules/pwdmodule.c | 3 +- Modules/pyexpat.c | 307 +- Modules/sha1module.c | 103 +- Modules/sha256module.c | 135 +- Modules/sha512module.c | 163 +- Modules/spwdmodule.c | 3 +- Modules/unicodedata.c | 37 +- Modules/zlibmodule.c | 3 +- 41 files changed, 7245 insertions(+), 6745 deletions(-) create mode 100644 Modules/clinic/_codecsmodule.c.h create mode 100644 Modules/clinic/_cryptmodule.c.h create mode 100644 Modules/clinic/_cursesmodule.c.h create mode 100644 Modules/clinic/_datetimemodule.c.h create mode 100644 Modules/clinic/_dbmmodule.c.h create mode 100644 Modules/clinic/_opcode.c.h create mode 100644 Modules/clinic/_weakref.c.h create mode 100644 Modules/clinic/md5module.c.h create mode 100644 Modules/clinic/posixmodule.c.h create mode 100644 Modules/clinic/pyexpat.c.h create mode 100644 Modules/clinic/sha1module.c.h create mode 100644 Modules/clinic/sha256module.c.h create mode 100644 Modules/clinic/sha512module.c.h create mode 100644 Modules/clinic/unicodedata.c.h (limited to 'Modules') diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index 51da7aeaec..4ca0944e5c 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -211,12 +211,11 @@ error: } /*[clinic input] -output preset file module _bz2 class _bz2.BZ2Compressor "BZ2Compressor *" "&BZ2Compressor_Type" class _bz2.BZ2Decompressor "BZ2Decompressor *" "&BZ2Decompressor_Type" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=e3b139924f5e18cc]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=dc7d7992a79f9cb7]*/ #include "clinic/_bz2module.c.h" diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index b9268cec2f..d8b4bbda28 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -47,6 +47,7 @@ module _codecs [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=e1390e3da3cb9deb]*/ +#include "clinic/_codecsmodule.c.h" /* --- Registry ----------------------------------------------------------- */ @@ -153,37 +154,9 @@ _codecs._forget_codec Purge the named codec from the internal codec lookup cache [clinic start generated code]*/ -PyDoc_STRVAR(_codecs__forget_codec__doc__, -"_forget_codec($module, encoding, /)\n" -"--\n" -"\n" -"Purge the named codec from the internal codec lookup cache"); - -#define _CODECS__FORGET_CODEC_METHODDEF \ - {"_forget_codec", (PyCFunction)_codecs__forget_codec, METH_VARARGS, _codecs__forget_codec__doc__}, - -static PyObject * -_codecs__forget_codec_impl(PyModuleDef *module, const char *encoding); - -static PyObject * -_codecs__forget_codec(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - const char *encoding; - - if (!PyArg_ParseTuple(args, - "s:_forget_codec", - &encoding)) - goto exit; - return_value = _codecs__forget_codec_impl(module, encoding); - -exit: - return return_value; -} - static PyObject * _codecs__forget_codec_impl(PyModuleDef *module, const char *encoding) -/*[clinic end generated code: output=a75e631591702a5c input=18d5d92d0e386c38]*/ +/*[clinic end generated code: output=b56a9b99d2d28080 input=18d5d92d0e386c38]*/ { if (_PyCodec_Forget(encoding) < 0) { return NULL; diff --git a/Modules/_cryptmodule.c b/Modules/_cryptmodule.c index da44ef34ee..16cc4c2d6e 100644 --- a/Modules/_cryptmodule.c +++ b/Modules/_cryptmodule.c @@ -12,6 +12,7 @@ module crypt [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=c6252cf4f2f2ae81]*/ +#include "clinic/_cryptmodule.c.h" /*[clinic input] crypt.crypt @@ -29,43 +30,9 @@ results for a given *word*. [clinic start generated code]*/ -PyDoc_STRVAR(crypt_crypt__doc__, -"crypt($module, word, salt, /)\n" -"--\n" -"\n" -"Hash a *word* with the given *salt* and return the hashed password.\n" -"\n" -"*word* will usually be a user\'s password. *salt* (either a random 2 or 16\n" -"character string, possibly prefixed with $digit$ to indicate the method)\n" -"will be used to perturb the encryption algorithm and produce distinct\n" -"results for a given *word*."); - -#define CRYPT_CRYPT_METHODDEF \ - {"crypt", (PyCFunction)crypt_crypt, METH_VARARGS, crypt_crypt__doc__}, - -static PyObject * -crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt); - -static PyObject * -crypt_crypt(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - const char *word; - const char *salt; - - if (!PyArg_ParseTuple(args, - "ss:crypt", - &word, &salt)) - goto exit; - return_value = crypt_crypt_impl(module, word, salt); - -exit: - return return_value; -} - static PyObject * crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt) -/*[clinic end generated code: output=3eaacdf994a6ff23 input=4d93b6d0f41fbf58]*/ +/*[clinic end generated code: output=995ad1e854d83069 input=4d93b6d0f41fbf58]*/ { /* On some platforms (AtheOS) crypt returns NULL for an invalid salt. Return None in that case. XXX Maybe raise an exception? */ diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 6b778687e7..209f87e8b0 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -140,6 +140,8 @@ class curses.window "PyCursesWindowObject *" "&PyCursesWindow_Type" [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=88c860abdbb50e0c]*/ +#include "clinic/_cursesmodule.c.h" + /* Definition of exception curses.error */ static PyObject *PyCursesError; @@ -583,75 +585,9 @@ By default, the character position and attributes are the current settings for the window object. [clinic start generated code]*/ -PyDoc_STRVAR(curses_window_addch__doc__, -"addch([y, x,] ch, [attr])\n" -"Paint character ch at (y, x) with attributes attr.\n" -"\n" -" y\n" -" Y-coordinate.\n" -" x\n" -" X-coordinate.\n" -" ch\n" -" Character to add.\n" -" attr\n" -" Attributes for the character.\n" -"\n" -"Paint character ch at (y, x) with attributes attr,\n" -"overwriting any character previously painted at that location.\n" -"By default, the character position and attributes are the\n" -"current settings for the window object."); - -#define CURSES_WINDOW_ADDCH_METHODDEF \ - {"addch", (PyCFunction)curses_window_addch, METH_VARARGS, curses_window_addch__doc__}, - -static PyObject * -curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, int x, PyObject *ch, int group_right_1, long attr); - -static PyObject * -curses_window_addch(PyCursesWindowObject *self, PyObject *args) -{ - PyObject *return_value = NULL; - int group_left_1 = 0; - int y = 0; - int x = 0; - PyObject *ch; - int group_right_1 = 0; - long attr = 0; - - switch (PyTuple_GET_SIZE(args)) { - case 1: - if (!PyArg_ParseTuple(args, "O:addch", &ch)) - goto exit; - break; - case 2: - if (!PyArg_ParseTuple(args, "Ol:addch", &ch, &attr)) - goto exit; - group_right_1 = 1; - break; - case 3: - if (!PyArg_ParseTuple(args, "iiO:addch", &y, &x, &ch)) - goto exit; - group_left_1 = 1; - break; - case 4: - if (!PyArg_ParseTuple(args, "iiOl:addch", &y, &x, &ch, &attr)) - goto exit; - group_right_1 = 1; - group_left_1 = 1; - break; - default: - PyErr_SetString(PyExc_TypeError, "curses.window.addch requires 1 to 4 arguments"); - goto exit; - } - return_value = curses_window_addch_impl(self, group_left_1, y, x, ch, group_right_1, attr); - -exit: - return return_value; -} - static PyObject * curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, int x, PyObject *ch, int group_right_1, long attr) -/*[clinic end generated code: output=d4b97cc287010c54 input=5a41efb34a2de338]*/ +/*[clinic end generated code: output=9fa34a5d80151f1a input=5a41efb34a2de338]*/ { PyCursesWindowObject *cwself = (PyCursesWindowObject *)self; int coordinates_group = group_left_1; diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index ab2acae662..7e4be5baac 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -26,6 +26,8 @@ class datetime.datetime "PyDateTime_DateTime *" "&PyDateTime_DateTimeType" [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=78142cb64b9e98bc]*/ +#include "clinic/_datetimemodule.c.h" + /* We require that C int be at least 32 bits, and use int virtually * everywhere. In just a few cases we use a temp long, where a Python * API returns a C long. In such cases, we have to ensure that the @@ -4133,43 +4135,9 @@ Returns new datetime object representing current time local to tz. If no tz is specified, uses local timezone. [clinic start generated code]*/ -PyDoc_STRVAR(datetime_datetime_now__doc__, -"now($type, /, tz=None)\n" -"--\n" -"\n" -"Returns new datetime object representing current time local to tz.\n" -"\n" -" tz\n" -" Timezone object.\n" -"\n" -"If no tz is specified, uses local timezone."); - -#define DATETIME_DATETIME_NOW_METHODDEF \ - {"now", (PyCFunction)datetime_datetime_now, METH_VARARGS|METH_KEYWORDS|METH_CLASS, datetime_datetime_now__doc__}, - -static PyObject * -datetime_datetime_now_impl(PyTypeObject *type, PyObject *tz); - -static PyObject * -datetime_datetime_now(PyTypeObject *type, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"tz", NULL}; - PyObject *tz = Py_None; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:now", _keywords, - &tz)) - goto exit; - return_value = datetime_datetime_now_impl(type, tz); - -exit: - return return_value; -} - static PyObject * datetime_datetime_now_impl(PyTypeObject *type, PyObject *tz) -/*[clinic end generated code: output=583c5637e3c843fa input=80d09869c5267d00]*/ +/*[clinic end generated code: output=b3386e5345e2b47a input=80d09869c5267d00]*/ { PyObject *self; diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index 93ea4161a7..c017885aa2 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -40,6 +40,8 @@ typedef struct { DBM *di_dbm; } dbmobject; +#include "clinic/_dbmmodule.c.h" + static PyTypeObject Dbmtype; #define is_dbmobject(v) (Py_TYPE(v) == &Dbmtype) @@ -277,39 +279,9 @@ dbm.dbm.get Return the value for key if present, otherwise default. [clinic start generated code]*/ -PyDoc_STRVAR(dbm_dbm_get__doc__, -"get($self, key, default=None, /)\n" -"--\n" -"\n" -"Return the value for key if present, otherwise default."); - -#define DBM_DBM_GET_METHODDEF \ - {"get", (PyCFunction)dbm_dbm_get, METH_VARARGS, dbm_dbm_get__doc__}, - -static PyObject * -dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, PyObject *default_value); - -static PyObject * -dbm_dbm_get(dbmobject *dp, PyObject *args) -{ - PyObject *return_value = NULL; - const char *key; - Py_ssize_clean_t key_length; - PyObject *default_value = Py_None; - - if (!PyArg_ParseTuple(args, - "s#|O:get", - &key, &key_length, &default_value)) - goto exit; - return_value = dbm_dbm_get_impl(dp, key, key_length, default_value); - -exit: - return return_value; -} - static PyObject * dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, PyObject *default_value) -/*[clinic end generated code: output=452ea11394e7e92d input=aecf5efd2f2b1a3b]*/ +/*[clinic end generated code: output=c2bdccaa734ad349 input=aecf5efd2f2b1a3b]*/ { datum dbm_key, val; @@ -449,47 +421,9 @@ Return a database object. [clinic start generated code]*/ -PyDoc_STRVAR(dbmopen__doc__, -"open($module, filename, flags=\'r\', mode=0o666, /)\n" -"--\n" -"\n" -"Return a database object.\n" -"\n" -" filename\n" -" The filename to open.\n" -" flags\n" -" How to open the file. \"r\" for reading, \"w\" for writing, etc.\n" -" mode\n" -" If creating a new file, the mode bits for the new file\n" -" (e.g. os.O_RDWR)."); - -#define DBMOPEN_METHODDEF \ - {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, - -static PyObject * -dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode); - -static PyObject * -dbmopen(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - const char *filename; - const char *flags = "r"; - int mode = 438; - - if (!PyArg_ParseTuple(args, - "s|si:open", - &filename, &flags, &mode)) - goto exit; - return_value = dbmopen_impl(module, filename, flags, mode); - -exit: - return return_value; -} - static PyObject * dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode) -/*[clinic end generated code: output=9a7b725f9c4dcec2 input=6499ab0fab1333ac]*/ +/*[clinic end generated code: output=8b618fe06b92bf86 input=6499ab0fab1333ac]*/ { int iflags; diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index 9abdf63c74..f110f5b5ea 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -478,12 +478,11 @@ error: /*[clinic input] -output preset file module _lzma class _lzma.LZMACompressor "Compressor *" "&Compressor_type" class _lzma.LZMADecompressor "Decompressor *" "&Decompressor_type" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=f17afc786525d6c2]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=2c14bbe05ff0c147]*/ #include "clinic/_lzmamodule.c.h" diff --git a/Modules/_opcode.c b/Modules/_opcode.c index fee388f596..663bb21a5f 100644 --- a/Modules/_opcode.c +++ b/Modules/_opcode.c @@ -6,6 +6,8 @@ module _opcode [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=117442e66eb376e6]*/ +#include "clinic/_opcode.c.h" + /*[clinic input] _opcode.stack_effect -> int @@ -17,42 +19,9 @@ _opcode.stack_effect -> int Compute the stack effect of the opcode. [clinic start generated code]*/ -PyDoc_STRVAR(_opcode_stack_effect__doc__, -"stack_effect($module, opcode, oparg=None, /)\n" -"--\n" -"\n" -"Compute the stack effect of the opcode."); - -#define _OPCODE_STACK_EFFECT_METHODDEF \ - {"stack_effect", (PyCFunction)_opcode_stack_effect, METH_VARARGS, _opcode_stack_effect__doc__}, - -static int -_opcode_stack_effect_impl(PyModuleDef *module, int opcode, PyObject *oparg); - -static PyObject * -_opcode_stack_effect(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int opcode; - PyObject *oparg = Py_None; - int _return_value; - - if (!PyArg_ParseTuple(args, - "i|O:stack_effect", - &opcode, &oparg)) - goto exit; - _return_value = _opcode_stack_effect_impl(module, opcode, oparg); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong((long)_return_value); - -exit: - return return_value; -} - static int _opcode_stack_effect_impl(PyModuleDef *module, int opcode, PyObject *oparg) -/*[clinic end generated code: output=9e1133f8d587bc67 input=2d0a9ee53c0418f5]*/ +/*[clinic end generated code: output=1fcafd5596c6b050 input=2d0a9ee53c0418f5]*/ { int effect; int oparg_int = 0; diff --git a/Modules/_pickle.c b/Modules/_pickle.c index d4130d1008..d4aff5e19e 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -5,14 +5,13 @@ PyDoc_STRVAR(pickle_module_doc, "Optimized C implementation for the Python pickle module."); /*[clinic input] -output preset file module _pickle class _pickle.Pickler "PicklerObject *" "&Pickler_Type" class _pickle.PicklerMemoProxy "PicklerMemoProxyObject *" "&PicklerMemoProxyType" class _pickle.Unpickler "UnpicklerObject *" "&Unpickler_Type" class _pickle.UnpicklerMemoProxy "UnpicklerMemoProxyObject *" "&UnpicklerMemoProxyType" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=11c45248a41dd3fc]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=4b3e113468a58e6c]*/ /* Bump this when new opcodes are added to the pickle protocol. */ enum { diff --git a/Modules/_weakref.c b/Modules/_weakref.c index da589314ea..7c99d7e786 100644 --- a/Modules/_weakref.c +++ b/Modules/_weakref.c @@ -9,6 +9,8 @@ module _weakref [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=ffec73b85846596d]*/ +#include "clinic/_weakref.c.h" + /*[clinic input] _weakref.getweakrefcount -> Py_ssize_t @@ -19,36 +21,9 @@ _weakref.getweakrefcount -> Py_ssize_t Return the number of weak references to 'object'. [clinic start generated code]*/ -PyDoc_STRVAR(_weakref_getweakrefcount__doc__, -"getweakrefcount($module, object, /)\n" -"--\n" -"\n" -"Return the number of weak references to \'object\'."); - -#define _WEAKREF_GETWEAKREFCOUNT_METHODDEF \ - {"getweakrefcount", (PyCFunction)_weakref_getweakrefcount, METH_O, _weakref_getweakrefcount__doc__}, - -static Py_ssize_t -_weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object); - -static PyObject * -_weakref_getweakrefcount(PyModuleDef *module, PyObject *object) -{ - PyObject *return_value = NULL; - Py_ssize_t _return_value; - - _return_value = _weakref_getweakrefcount_impl(module, object); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromSsize_t(_return_value); - -exit: - return return_value; -} - static Py_ssize_t _weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object) -/*[clinic end generated code: output=032eedbfd7d69e10 input=cedb69711b6a2507]*/ +/*[clinic end generated code: output=6a6ad0b98285e468 input=cedb69711b6a2507]*/ { PyWeakReference **list; diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 6e755f4fcf..3e9f297f1f 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -16,10 +16,9 @@ #endif /* !STDC_HEADERS */ /*[clinic input] -output preset file module array [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=0909c1a148c69931]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=7d1b8d7f5958fd83]*/ struct arrayobject; /* Forward */ diff --git a/Modules/audioop.c b/Modules/audioop.c index 2d287f249b..7712e79cf7 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -391,10 +391,9 @@ audioop_check_parameters(Py_ssize_t len, int size) } /*[clinic input] -output preset file module audioop [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=5619f935f269199a]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=8fa8f6611be3591a]*/ /*[clinic input] audioop.getsample diff --git a/Modules/binascii.c b/Modules/binascii.c index 4e6953b8ba..e54a8ba6ea 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -184,10 +184,9 @@ static unsigned short crctab_hqx[256] = { }; /*[clinic input] -output preset file module binascii [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=44c6f840ce708f0c]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=de89fb46bcaf3fec]*/ /*[python input] diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index fe5b36256f..8cde6adacc 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -11,15 +11,10 @@ #include "clinic/multibytecodec.c.h" /*[clinic input] -output preset file module _multibytecodec -[clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=e0cf1b7f3c472d17]*/ - -/*[clinic input] class _multibytecodec.MultibyteCodec "MultibyteCodecObject *" "&MultibyteCodec_Type" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=d5b1fc1fec8eb003]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=6ad689546cbb5450]*/ typedef struct { PyObject *inobj; diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h new file mode 100644 index 0000000000..6417b61660 --- /dev/null +++ b/Modules/clinic/_codecsmodule.c.h @@ -0,0 +1,32 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_codecs__forget_codec__doc__, +"_forget_codec($module, encoding, /)\n" +"--\n" +"\n" +"Purge the named codec from the internal codec lookup cache"); + +#define _CODECS__FORGET_CODEC_METHODDEF \ + {"_forget_codec", (PyCFunction)_codecs__forget_codec, METH_VARARGS, _codecs__forget_codec__doc__}, + +static PyObject * +_codecs__forget_codec_impl(PyModuleDef *module, const char *encoding); + +static PyObject * +_codecs__forget_codec(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + const char *encoding; + + if (!PyArg_ParseTuple(args, + "s:_forget_codec", + &encoding)) + goto exit; + return_value = _codecs__forget_codec_impl(module, encoding); + +exit: + return return_value; +} +/*[clinic end generated code: output=cdea83e21d76a900 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_cryptmodule.c.h b/Modules/clinic/_cryptmodule.c.h new file mode 100644 index 0000000000..cd63bd1103 --- /dev/null +++ b/Modules/clinic/_cryptmodule.c.h @@ -0,0 +1,38 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(crypt_crypt__doc__, +"crypt($module, word, salt, /)\n" +"--\n" +"\n" +"Hash a *word* with the given *salt* and return the hashed password.\n" +"\n" +"*word* will usually be a user\'s password. *salt* (either a random 2 or 16\n" +"character string, possibly prefixed with $digit$ to indicate the method)\n" +"will be used to perturb the encryption algorithm and produce distinct\n" +"results for a given *word*."); + +#define CRYPT_CRYPT_METHODDEF \ + {"crypt", (PyCFunction)crypt_crypt, METH_VARARGS, crypt_crypt__doc__}, + +static PyObject * +crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt); + +static PyObject * +crypt_crypt(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + const char *word; + const char *salt; + + if (!PyArg_ParseTuple(args, + "ss:crypt", + &word, &salt)) + goto exit; + return_value = crypt_crypt_impl(module, word, salt); + +exit: + return return_value; +} +/*[clinic end generated code: output=b5b8d977189d19ea input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_cursesmodule.c.h b/Modules/clinic/_cursesmodule.c.h new file mode 100644 index 0000000000..7fb1b53350 --- /dev/null +++ b/Modules/clinic/_cursesmodule.c.h @@ -0,0 +1,70 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(curses_window_addch__doc__, +"addch([y, x,] ch, [attr])\n" +"Paint character ch at (y, x) with attributes attr.\n" +"\n" +" y\n" +" Y-coordinate.\n" +" x\n" +" X-coordinate.\n" +" ch\n" +" Character to add.\n" +" attr\n" +" Attributes for the character.\n" +"\n" +"Paint character ch at (y, x) with attributes attr,\n" +"overwriting any character previously painted at that location.\n" +"By default, the character position and attributes are the\n" +"current settings for the window object."); + +#define CURSES_WINDOW_ADDCH_METHODDEF \ + {"addch", (PyCFunction)curses_window_addch, METH_VARARGS, curses_window_addch__doc__}, + +static PyObject * +curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, int x, PyObject *ch, int group_right_1, long attr); + +static PyObject * +curses_window_addch(PyCursesWindowObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + int group_left_1 = 0; + int y = 0; + int x = 0; + PyObject *ch; + int group_right_1 = 0; + long attr = 0; + + switch (PyTuple_GET_SIZE(args)) { + case 1: + if (!PyArg_ParseTuple(args, "O:addch", &ch)) + goto exit; + break; + case 2: + if (!PyArg_ParseTuple(args, "Ol:addch", &ch, &attr)) + goto exit; + group_right_1 = 1; + break; + case 3: + if (!PyArg_ParseTuple(args, "iiO:addch", &y, &x, &ch)) + goto exit; + group_left_1 = 1; + break; + case 4: + if (!PyArg_ParseTuple(args, "iiOl:addch", &y, &x, &ch, &attr)) + goto exit; + group_right_1 = 1; + group_left_1 = 1; + break; + default: + PyErr_SetString(PyExc_TypeError, "curses.window.addch requires 1 to 4 arguments"); + goto exit; + } + return_value = curses_window_addch_impl(self, group_left_1, y, x, ch, group_right_1, attr); + +exit: + return return_value; +} +/*[clinic end generated code: output=660ab0ae6d8fbdda input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_datetimemodule.c.h b/Modules/clinic/_datetimemodule.c.h new file mode 100644 index 0000000000..5bf3ebe3b8 --- /dev/null +++ b/Modules/clinic/_datetimemodule.c.h @@ -0,0 +1,38 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(datetime_datetime_now__doc__, +"now($type, /, tz=None)\n" +"--\n" +"\n" +"Returns new datetime object representing current time local to tz.\n" +"\n" +" tz\n" +" Timezone object.\n" +"\n" +"If no tz is specified, uses local timezone."); + +#define DATETIME_DATETIME_NOW_METHODDEF \ + {"now", (PyCFunction)datetime_datetime_now, METH_VARARGS|METH_KEYWORDS|METH_CLASS, datetime_datetime_now__doc__}, + +static PyObject * +datetime_datetime_now_impl(PyTypeObject *type, PyObject *tz); + +static PyObject * +datetime_datetime_now(PyTypeObject *type, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"tz", NULL}; + PyObject *tz = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:now", _keywords, + &tz)) + goto exit; + return_value = datetime_datetime_now_impl(type, tz); + +exit: + return return_value; +} +/*[clinic end generated code: output=a5c51b96f10c462c input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_dbmmodule.c.h b/Modules/clinic/_dbmmodule.c.h new file mode 100644 index 0000000000..784b74b82d --- /dev/null +++ b/Modules/clinic/_dbmmodule.c.h @@ -0,0 +1,72 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(dbm_dbm_get__doc__, +"get($self, key, default=None, /)\n" +"--\n" +"\n" +"Return the value for key if present, otherwise default."); + +#define DBM_DBM_GET_METHODDEF \ + {"get", (PyCFunction)dbm_dbm_get, METH_VARARGS, dbm_dbm_get__doc__}, + +static PyObject * +dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, PyObject *default_value); + +static PyObject * +dbm_dbm_get(dbmobject *dp, PyObject *args) +{ + PyObject *return_value = NULL; + const char *key; + Py_ssize_clean_t key_length; + PyObject *default_value = Py_None; + + if (!PyArg_ParseTuple(args, + "s#|O:get", + &key, &key_length, &default_value)) + goto exit; + return_value = dbm_dbm_get_impl(dp, key, key_length, default_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(dbmopen__doc__, +"open($module, filename, flags=\'r\', mode=0o666, /)\n" +"--\n" +"\n" +"Return a database object.\n" +"\n" +" filename\n" +" The filename to open.\n" +" flags\n" +" How to open the file. \"r\" for reading, \"w\" for writing, etc.\n" +" mode\n" +" If creating a new file, the mode bits for the new file\n" +" (e.g. os.O_RDWR)."); + +#define DBMOPEN_METHODDEF \ + {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, + +static PyObject * +dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode); + +static PyObject * +dbmopen(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + const char *filename; + const char *flags = "r"; + int mode = 438; + + if (!PyArg_ParseTuple(args, + "s|si:open", + &filename, &flags, &mode)) + goto exit; + return_value = dbmopen_impl(module, filename, flags, mode); + +exit: + return return_value; +} +/*[clinic end generated code: output=78d62d1aa3ddd13c input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_opcode.c.h b/Modules/clinic/_opcode.c.h new file mode 100644 index 0000000000..945c9042e6 --- /dev/null +++ b/Modules/clinic/_opcode.c.h @@ -0,0 +1,37 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_opcode_stack_effect__doc__, +"stack_effect($module, opcode, oparg=None, /)\n" +"--\n" +"\n" +"Compute the stack effect of the opcode."); + +#define _OPCODE_STACK_EFFECT_METHODDEF \ + {"stack_effect", (PyCFunction)_opcode_stack_effect, METH_VARARGS, _opcode_stack_effect__doc__}, + +static int +_opcode_stack_effect_impl(PyModuleDef *module, int opcode, PyObject *oparg); + +static PyObject * +_opcode_stack_effect(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int opcode; + PyObject *oparg = Py_None; + int _return_value; + + if (!PyArg_ParseTuple(args, + "i|O:stack_effect", + &opcode, &oparg)) + goto exit; + _return_value = _opcode_stack_effect_impl(module, opcode, oparg); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} +/*[clinic end generated code: output=dbe45148bc21ecdf input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_weakref.c.h b/Modules/clinic/_weakref.c.h new file mode 100644 index 0000000000..87c701c52f --- /dev/null +++ b/Modules/clinic/_weakref.c.h @@ -0,0 +1,31 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_weakref_getweakrefcount__doc__, +"getweakrefcount($module, object, /)\n" +"--\n" +"\n" +"Return the number of weak references to \'object\'."); + +#define _WEAKREF_GETWEAKREFCOUNT_METHODDEF \ + {"getweakrefcount", (PyCFunction)_weakref_getweakrefcount, METH_O, _weakref_getweakrefcount__doc__}, + +static Py_ssize_t +_weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object); + +static PyObject * +_weakref_getweakrefcount(PyModuleDef *module, PyObject *object) +{ + PyObject *return_value = NULL; + Py_ssize_t _return_value; + + _return_value = _weakref_getweakrefcount_impl(module, object); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + return return_value; +} +/*[clinic end generated code: output=4da9aade63eed77f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/md5module.c.h b/Modules/clinic/md5module.c.h new file mode 100644 index 0000000000..665c8317b1 --- /dev/null +++ b/Modules/clinic/md5module.c.h @@ -0,0 +1,96 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(MD5Type_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define MD5TYPE_COPY_METHODDEF \ + {"copy", (PyCFunction)MD5Type_copy, METH_NOARGS, MD5Type_copy__doc__}, + +static PyObject * +MD5Type_copy_impl(MD5object *self); + +static PyObject * +MD5Type_copy(MD5object *self, PyObject *Py_UNUSED(ignored)) +{ + return MD5Type_copy_impl(self); +} + +PyDoc_STRVAR(MD5Type_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of binary data."); + +#define MD5TYPE_DIGEST_METHODDEF \ + {"digest", (PyCFunction)MD5Type_digest, METH_NOARGS, MD5Type_digest__doc__}, + +static PyObject * +MD5Type_digest_impl(MD5object *self); + +static PyObject * +MD5Type_digest(MD5object *self, PyObject *Py_UNUSED(ignored)) +{ + return MD5Type_digest_impl(self); +} + +PyDoc_STRVAR(MD5Type_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of hexadecimal digits."); + +#define MD5TYPE_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)MD5Type_hexdigest, METH_NOARGS, MD5Type_hexdigest__doc__}, + +static PyObject * +MD5Type_hexdigest_impl(MD5object *self); + +static PyObject * +MD5Type_hexdigest(MD5object *self, PyObject *Py_UNUSED(ignored)) +{ + return MD5Type_hexdigest_impl(self); +} + +PyDoc_STRVAR(MD5Type_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define MD5TYPE_UPDATE_METHODDEF \ + {"update", (PyCFunction)MD5Type_update, METH_O, MD5Type_update__doc__}, + +PyDoc_STRVAR(_md5_md5__doc__, +"md5($module, /, string=b\'\')\n" +"--\n" +"\n" +"Return a new MD5 hash object; optionally initialized with a string."); + +#define _MD5_MD5_METHODDEF \ + {"md5", (PyCFunction)_md5_md5, METH_VARARGS|METH_KEYWORDS, _md5_md5__doc__}, + +static PyObject * +_md5_md5_impl(PyModuleDef *module, PyObject *string); + +static PyObject * +_md5_md5(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:md5", _keywords, + &string)) + goto exit; + return_value = _md5_md5_impl(module, string); + +exit: + return return_value; +} +/*[clinic end generated code: output=f72618edfd35d984 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h new file mode 100644 index 0000000000..99a7d256fd --- /dev/null +++ b/Modules/clinic/posixmodule.c.h @@ -0,0 +1,5850 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(os_stat__doc__, +"stat($module, /, path, *, dir_fd=None, follow_symlinks=True)\n" +"--\n" +"\n" +"Perform a stat system call on the given path.\n" +"\n" +" path\n" +" Path to be examined; can be string, bytes, or open-file-descriptor int.\n" +" dir_fd\n" +" If not None, it should be a file descriptor open to a directory,\n" +" and path should be a relative string; path will then be relative to\n" +" that directory.\n" +" follow_symlinks\n" +" If False, and the last element of the path is a symbolic link,\n" +" stat will examine the symbolic link itself instead of the file\n" +" the link points to.\n" +"\n" +"dir_fd and follow_symlinks may not be implemented\n" +" on your platform. If they are unavailable, using them will raise a\n" +" NotImplementedError.\n" +"\n" +"It\'s an error to use dir_fd or follow_symlinks when specifying path as\n" +" an open file descriptor."); + +#define OS_STAT_METHODDEF \ + {"stat", (PyCFunction)os_stat, METH_VARARGS|METH_KEYWORDS, os_stat__doc__}, + +static PyObject * +os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, int follow_symlinks); + +static PyObject * +os_stat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "dir_fd", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("stat", "path", 0, 1); + int dir_fd = DEFAULT_DIR_FD; + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|$O&p:stat", _keywords, + path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + goto exit; + return_value = os_stat_impl(module, &path, dir_fd, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +PyDoc_STRVAR(os_lstat__doc__, +"lstat($module, /, path, *, dir_fd=None)\n" +"--\n" +"\n" +"Perform a stat system call on the given path, without following symbolic links.\n" +"\n" +"Like stat(), but do not follow symbolic links.\n" +"Equivalent to stat(path, follow_symlinks=False)."); + +#define OS_LSTAT_METHODDEF \ + {"lstat", (PyCFunction)os_lstat, METH_VARARGS|METH_KEYWORDS, os_lstat__doc__}, + +static PyObject * +os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd); + +static PyObject * +os_lstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("lstat", "path", 0, 0); + int dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|$O&:lstat", _keywords, + path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_lstat_impl(module, &path, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +PyDoc_STRVAR(os_access__doc__, +"access($module, /, path, mode, *, dir_fd=None, effective_ids=False,\n" +" follow_symlinks=True)\n" +"--\n" +"\n" +"Use the real uid/gid to test for access to a path.\n" +"\n" +" path\n" +" Path to be tested; can be string, bytes, or open-file-descriptor int.\n" +" mode\n" +" Operating-system mode bitfield. Can be F_OK to test existence,\n" +" or the inclusive-OR of R_OK, W_OK, and X_OK.\n" +" dir_fd\n" +" If not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that\n" +" directory.\n" +" effective_ids\n" +" If True, access will use the effective uid/gid instead of\n" +" the real uid/gid.\n" +" follow_symlinks\n" +" If False, and the last element of the path is a symbolic link,\n" +" access will examine the symbolic link itself instead of the file\n" +" the link points to.\n" +"\n" +"dir_fd, effective_ids, and follow_symlinks may not be implemented\n" +" on your platform. If they are unavailable, using them will raise a\n" +" NotImplementedError.\n" +"\n" +"Note that most operations will use the effective uid/gid, therefore this\n" +" routine can be used in a suid/sgid environment to test if the invoking user\n" +" has the specified access to the path."); + +#define OS_ACCESS_METHODDEF \ + {"access", (PyCFunction)os_access, METH_VARARGS|METH_KEYWORDS, os_access__doc__}, + +static int +os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks); + +static PyObject * +os_access(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("access", "path", 0, 1); + int mode; + int dir_fd = DEFAULT_DIR_FD; + int effective_ids = 0; + int follow_symlinks = 1; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&i|$O&pp:access", _keywords, + path_converter, &path, &mode, FACCESSAT_DIR_FD_CONVERTER, &dir_fd, &effective_ids, &follow_symlinks)) + goto exit; + _return_value = os_access_impl(module, &path, mode, dir_fd, effective_ids, follow_symlinks); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#if defined(HAVE_TTYNAME) + +PyDoc_STRVAR(os_ttyname__doc__, +"ttyname($module, fd, /)\n" +"--\n" +"\n" +"Return the name of the terminal device connected to \'fd\'.\n" +"\n" +" fd\n" +" Integer file descriptor handle."); + +#define OS_TTYNAME_METHODDEF \ + {"ttyname", (PyCFunction)os_ttyname, METH_VARARGS, os_ttyname__doc__}, + +static char * +os_ttyname_impl(PyModuleDef *module, int fd); + +static PyObject * +os_ttyname(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + char *_return_value; + + if (!PyArg_ParseTuple(args, + "i:ttyname", + &fd)) + goto exit; + _return_value = os_ttyname_impl(module, fd); + if (_return_value == NULL) + goto exit; + return_value = PyUnicode_DecodeFSDefault(_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_TTYNAME) */ + +#if defined(HAVE_CTERMID) + +PyDoc_STRVAR(os_ctermid__doc__, +"ctermid($module, /)\n" +"--\n" +"\n" +"Return the name of the controlling terminal for this process."); + +#define OS_CTERMID_METHODDEF \ + {"ctermid", (PyCFunction)os_ctermid, METH_NOARGS, os_ctermid__doc__}, + +static PyObject * +os_ctermid_impl(PyModuleDef *module); + +static PyObject * +os_ctermid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_ctermid_impl(module); +} + +#endif /* defined(HAVE_CTERMID) */ + +PyDoc_STRVAR(os_chdir__doc__, +"chdir($module, /, path)\n" +"--\n" +"\n" +"Change the current working directory to the specified path.\n" +"\n" +"path may always be specified as a string.\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception."); + +#define OS_CHDIR_METHODDEF \ + {"chdir", (PyCFunction)os_chdir, METH_VARARGS|METH_KEYWORDS, os_chdir__doc__}, + +static PyObject * +os_chdir_impl(PyModuleDef *module, path_t *path); + +static PyObject * +os_chdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + path_t path = PATH_T_INITIALIZE("chdir", "path", 0, PATH_HAVE_FCHDIR); + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:chdir", _keywords, + path_converter, &path)) + goto exit; + return_value = os_chdir_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#if defined(HAVE_FCHDIR) + +PyDoc_STRVAR(os_fchdir__doc__, +"fchdir($module, /, fd)\n" +"--\n" +"\n" +"Change to the directory of the given file descriptor.\n" +"\n" +"fd must be opened on a directory, not a file.\n" +"Equivalent to os.chdir(fd)."); + +#define OS_FCHDIR_METHODDEF \ + {"fchdir", (PyCFunction)os_fchdir, METH_VARARGS|METH_KEYWORDS, os_fchdir__doc__}, + +static PyObject * +os_fchdir_impl(PyModuleDef *module, int fd); + +static PyObject * +os_fchdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; + int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:fchdir", _keywords, + fildes_converter, &fd)) + goto exit; + return_value = os_fchdir_impl(module, fd); + +exit: + return return_value; +} + +#endif /* defined(HAVE_FCHDIR) */ + +PyDoc_STRVAR(os_chmod__doc__, +"chmod($module, /, path, mode, *, dir_fd=None, follow_symlinks=True)\n" +"--\n" +"\n" +"Change the access permissions of a file.\n" +"\n" +" path\n" +" Path to be modified. May always be specified as a str or bytes.\n" +" On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception.\n" +" mode\n" +" Operating-system mode bitfield.\n" +" dir_fd\n" +" If not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that\n" +" directory.\n" +" follow_symlinks\n" +" If False, and the last element of the path is a symbolic link,\n" +" chmod will modify the symbolic link itself instead of the file\n" +" the link points to.\n" +"\n" +"It is an error to use dir_fd or follow_symlinks when specifying path as\n" +" an open file descriptor.\n" +"dir_fd and follow_symlinks may not be implemented on your platform.\n" +" If they are unavailable, using them will raise a NotImplementedError."); + +#define OS_CHMOD_METHODDEF \ + {"chmod", (PyCFunction)os_chmod, METH_VARARGS|METH_KEYWORDS, os_chmod__doc__}, + +static PyObject * +os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int follow_symlinks); + +static PyObject * +os_chmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("chmod", "path", 0, PATH_HAVE_FCHMOD); + int mode; + int dir_fd = DEFAULT_DIR_FD; + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&i|$O&p:chmod", _keywords, + path_converter, &path, &mode, FCHMODAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + goto exit; + return_value = os_chmod_impl(module, &path, mode, dir_fd, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#if defined(HAVE_FCHMOD) + +PyDoc_STRVAR(os_fchmod__doc__, +"fchmod($module, /, fd, mode)\n" +"--\n" +"\n" +"Change the access permissions of the file given by file descriptor fd.\n" +"\n" +"Equivalent to os.chmod(fd, mode)."); + +#define OS_FCHMOD_METHODDEF \ + {"fchmod", (PyCFunction)os_fchmod, METH_VARARGS|METH_KEYWORDS, os_fchmod__doc__}, + +static PyObject * +os_fchmod_impl(PyModuleDef *module, int fd, int mode); + +static PyObject * +os_fchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", "mode", NULL}; + int fd; + int mode; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "ii:fchmod", _keywords, + &fd, &mode)) + goto exit; + return_value = os_fchmod_impl(module, fd, mode); + +exit: + return return_value; +} + +#endif /* defined(HAVE_FCHMOD) */ + +#if defined(HAVE_LCHMOD) + +PyDoc_STRVAR(os_lchmod__doc__, +"lchmod($module, /, path, mode)\n" +"--\n" +"\n" +"Change the access permissions of a file, without following symbolic links.\n" +"\n" +"If path is a symlink, this affects the link itself rather than the target.\n" +"Equivalent to chmod(path, mode, follow_symlinks=False).\""); + +#define OS_LCHMOD_METHODDEF \ + {"lchmod", (PyCFunction)os_lchmod, METH_VARARGS|METH_KEYWORDS, os_lchmod__doc__}, + +static PyObject * +os_lchmod_impl(PyModuleDef *module, path_t *path, int mode); + +static PyObject * +os_lchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "mode", NULL}; + path_t path = PATH_T_INITIALIZE("lchmod", "path", 0, 0); + int mode; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&i:lchmod", _keywords, + path_converter, &path, &mode)) + goto exit; + return_value = os_lchmod_impl(module, &path, mode); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(HAVE_LCHMOD) */ + +#if defined(HAVE_CHFLAGS) + +PyDoc_STRVAR(os_chflags__doc__, +"chflags($module, /, path, flags, follow_symlinks=True)\n" +"--\n" +"\n" +"Set file flags.\n" +"\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, chflags will change flags on the symbolic link itself instead of the\n" +" file the link points to.\n" +"follow_symlinks may not be implemented on your platform. If it is\n" +"unavailable, using it will raise a NotImplementedError."); + +#define OS_CHFLAGS_METHODDEF \ + {"chflags", (PyCFunction)os_chflags, METH_VARARGS|METH_KEYWORDS, os_chflags__doc__}, + +static PyObject * +os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, int follow_symlinks); + +static PyObject * +os_chflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "flags", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("chflags", "path", 0, 0); + unsigned long flags; + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&k|p:chflags", _keywords, + path_converter, &path, &flags, &follow_symlinks)) + goto exit; + return_value = os_chflags_impl(module, &path, flags, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(HAVE_CHFLAGS) */ + +#if defined(HAVE_LCHFLAGS) + +PyDoc_STRVAR(os_lchflags__doc__, +"lchflags($module, /, path, flags)\n" +"--\n" +"\n" +"Set file flags.\n" +"\n" +"This function will not follow symbolic links.\n" +"Equivalent to chflags(path, flags, follow_symlinks=False)."); + +#define OS_LCHFLAGS_METHODDEF \ + {"lchflags", (PyCFunction)os_lchflags, METH_VARARGS|METH_KEYWORDS, os_lchflags__doc__}, + +static PyObject * +os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags); + +static PyObject * +os_lchflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "flags", NULL}; + path_t path = PATH_T_INITIALIZE("lchflags", "path", 0, 0); + unsigned long flags; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&k:lchflags", _keywords, + path_converter, &path, &flags)) + goto exit; + return_value = os_lchflags_impl(module, &path, flags); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(HAVE_LCHFLAGS) */ + +#if defined(HAVE_CHROOT) + +PyDoc_STRVAR(os_chroot__doc__, +"chroot($module, /, path)\n" +"--\n" +"\n" +"Change root directory to path."); + +#define OS_CHROOT_METHODDEF \ + {"chroot", (PyCFunction)os_chroot, METH_VARARGS|METH_KEYWORDS, os_chroot__doc__}, + +static PyObject * +os_chroot_impl(PyModuleDef *module, path_t *path); + +static PyObject * +os_chroot(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + path_t path = PATH_T_INITIALIZE("chroot", "path", 0, 0); + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:chroot", _keywords, + path_converter, &path)) + goto exit; + return_value = os_chroot_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(HAVE_CHROOT) */ + +#if defined(HAVE_FSYNC) + +PyDoc_STRVAR(os_fsync__doc__, +"fsync($module, /, fd)\n" +"--\n" +"\n" +"Force write of fd to disk."); + +#define OS_FSYNC_METHODDEF \ + {"fsync", (PyCFunction)os_fsync, METH_VARARGS|METH_KEYWORDS, os_fsync__doc__}, + +static PyObject * +os_fsync_impl(PyModuleDef *module, int fd); + +static PyObject * +os_fsync(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; + int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:fsync", _keywords, + fildes_converter, &fd)) + goto exit; + return_value = os_fsync_impl(module, fd); + +exit: + return return_value; +} + +#endif /* defined(HAVE_FSYNC) */ + +#if defined(HAVE_SYNC) + +PyDoc_STRVAR(os_sync__doc__, +"sync($module, /)\n" +"--\n" +"\n" +"Force write of everything to disk."); + +#define OS_SYNC_METHODDEF \ + {"sync", (PyCFunction)os_sync, METH_NOARGS, os_sync__doc__}, + +static PyObject * +os_sync_impl(PyModuleDef *module); + +static PyObject * +os_sync(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_sync_impl(module); +} + +#endif /* defined(HAVE_SYNC) */ + +#if defined(HAVE_FDATASYNC) + +PyDoc_STRVAR(os_fdatasync__doc__, +"fdatasync($module, /, fd)\n" +"--\n" +"\n" +"Force write of fd to disk without forcing update of metadata."); + +#define OS_FDATASYNC_METHODDEF \ + {"fdatasync", (PyCFunction)os_fdatasync, METH_VARARGS|METH_KEYWORDS, os_fdatasync__doc__}, + +static PyObject * +os_fdatasync_impl(PyModuleDef *module, int fd); + +static PyObject * +os_fdatasync(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; + int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:fdatasync", _keywords, + fildes_converter, &fd)) + goto exit; + return_value = os_fdatasync_impl(module, fd); + +exit: + return return_value; +} + +#endif /* defined(HAVE_FDATASYNC) */ + +#if defined(HAVE_CHOWN) + +PyDoc_STRVAR(os_chown__doc__, +"chown($module, /, path, uid, gid, *, dir_fd=None, follow_symlinks=True)\n" +"--\n" +"\n" +"Change the owner and group id of path to the numeric uid and gid.\\\n" +"\n" +" path\n" +" Path to be examined; can be string, bytes, or open-file-descriptor int.\n" +" dir_fd\n" +" If not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that\n" +" directory.\n" +" follow_symlinks\n" +" If False, and the last element of the path is a symbolic link,\n" +" stat will examine the symbolic link itself instead of the file\n" +" the link points to.\n" +"\n" +"path may always be specified as a string.\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception.\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, chown will modify the symbolic link itself instead of the file the\n" +" link points to.\n" +"It is an error to use dir_fd or follow_symlinks when specifying path as\n" +" an open file descriptor.\n" +"dir_fd and follow_symlinks may not be implemented on your platform.\n" +" If they are unavailable, using them will raise a NotImplementedError."); + +#define OS_CHOWN_METHODDEF \ + {"chown", (PyCFunction)os_chown, METH_VARARGS|METH_KEYWORDS, os_chown__doc__}, + +static PyObject * +os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks); + +static PyObject * +os_chown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("chown", "path", 0, PATH_HAVE_FCHOWN); + uid_t uid; + gid_t gid; + int dir_fd = DEFAULT_DIR_FD; + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&O&|$O&p:chown", _keywords, + path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid, FCHOWNAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + goto exit; + return_value = os_chown_impl(module, &path, uid, gid, dir_fd, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(HAVE_CHOWN) */ + +#if defined(HAVE_FCHOWN) + +PyDoc_STRVAR(os_fchown__doc__, +"fchown($module, /, fd, uid, gid)\n" +"--\n" +"\n" +"Change the owner and group id of the file specified by file descriptor.\n" +"\n" +"Equivalent to os.chown(fd, uid, gid)."); + +#define OS_FCHOWN_METHODDEF \ + {"fchown", (PyCFunction)os_fchown, METH_VARARGS|METH_KEYWORDS, os_fchown__doc__}, + +static PyObject * +os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid); + +static PyObject * +os_fchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", "uid", "gid", NULL}; + int fd; + uid_t uid; + gid_t gid; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "iO&O&:fchown", _keywords, + &fd, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) + goto exit; + return_value = os_fchown_impl(module, fd, uid, gid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_FCHOWN) */ + +#if defined(HAVE_LCHOWN) + +PyDoc_STRVAR(os_lchown__doc__, +"lchown($module, /, path, uid, gid)\n" +"--\n" +"\n" +"Change the owner and group id of path to the numeric uid and gid.\n" +"\n" +"This function will not follow symbolic links.\n" +"Equivalent to os.chown(path, uid, gid, follow_symlinks=False)."); + +#define OS_LCHOWN_METHODDEF \ + {"lchown", (PyCFunction)os_lchown, METH_VARARGS|METH_KEYWORDS, os_lchown__doc__}, + +static PyObject * +os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid); + +static PyObject * +os_lchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "uid", "gid", NULL}; + path_t path = PATH_T_INITIALIZE("lchown", "path", 0, 0); + uid_t uid; + gid_t gid; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&O&:lchown", _keywords, + path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) + goto exit; + return_value = os_lchown_impl(module, &path, uid, gid); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(HAVE_LCHOWN) */ + +PyDoc_STRVAR(os_getcwd__doc__, +"getcwd($module, /)\n" +"--\n" +"\n" +"Return a unicode string representing the current working directory."); + +#define OS_GETCWD_METHODDEF \ + {"getcwd", (PyCFunction)os_getcwd, METH_NOARGS, os_getcwd__doc__}, + +static PyObject * +os_getcwd_impl(PyModuleDef *module); + +static PyObject * +os_getcwd(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getcwd_impl(module); +} + +PyDoc_STRVAR(os_getcwdb__doc__, +"getcwdb($module, /)\n" +"--\n" +"\n" +"Return a bytes string representing the current working directory."); + +#define OS_GETCWDB_METHODDEF \ + {"getcwdb", (PyCFunction)os_getcwdb, METH_NOARGS, os_getcwdb__doc__}, + +static PyObject * +os_getcwdb_impl(PyModuleDef *module); + +static PyObject * +os_getcwdb(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getcwdb_impl(module); +} + +#if defined(HAVE_LINK) + +PyDoc_STRVAR(os_link__doc__, +"link($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None,\n" +" follow_symlinks=True)\n" +"--\n" +"\n" +"Create a hard link to a file.\n" +"\n" +"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" +" descriptor open to a directory, and the respective path string (src or dst)\n" +" should be relative; the path will then be relative to that directory.\n" +"If follow_symlinks is False, and the last element of src is a symbolic\n" +" link, link will create a link to the symbolic link itself instead of the\n" +" file the link points to.\n" +"src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your\n" +" platform. If they are unavailable, using them will raise a\n" +" NotImplementedError."); + +#define OS_LINK_METHODDEF \ + {"link", (PyCFunction)os_link, METH_VARARGS|METH_KEYWORDS, os_link__doc__}, + +static PyObject * +os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks); + +static PyObject * +os_link(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL}; + path_t src = PATH_T_INITIALIZE("link", "src", 0, 0); + path_t dst = PATH_T_INITIALIZE("link", "dst", 0, 0); + int src_dir_fd = DEFAULT_DIR_FD; + int dst_dir_fd = DEFAULT_DIR_FD; + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|$O&O&p:link", _keywords, + path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd, &follow_symlinks)) + goto exit; + return_value = os_link_impl(module, &src, &dst, src_dir_fd, dst_dir_fd, follow_symlinks); + +exit: + /* Cleanup for src */ + path_cleanup(&src); + /* Cleanup for dst */ + path_cleanup(&dst); + + return return_value; +} + +#endif /* defined(HAVE_LINK) */ + +PyDoc_STRVAR(os_listdir__doc__, +"listdir($module, /, path=None)\n" +"--\n" +"\n" +"Return a list containing the names of the files in the directory.\n" +"\n" +"path can be specified as either str or bytes. If path is bytes,\n" +" the filenames returned will also be bytes; in all other circumstances\n" +" the filenames returned will be str.\n" +"If path is None, uses the path=\'.\'.\n" +"On some platforms, path may also be specified as an open file descriptor;\\\n" +" the file descriptor must refer to a directory.\n" +" If this functionality is unavailable, using it raises NotImplementedError.\n" +"\n" +"The list is in arbitrary order. It does not include the special\n" +"entries \'.\' and \'..\' even if they are present in the directory."); + +#define OS_LISTDIR_METHODDEF \ + {"listdir", (PyCFunction)os_listdir, METH_VARARGS|METH_KEYWORDS, os_listdir__doc__}, + +static PyObject * +os_listdir_impl(PyModuleDef *module, path_t *path); + +static PyObject * +os_listdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + path_t path = PATH_T_INITIALIZE("listdir", "path", 1, PATH_HAVE_FDOPENDIR); + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O&:listdir", _keywords, + path_converter, &path)) + goto exit; + return_value = os_listdir_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(os__getfinalpathname__doc__, +"_getfinalpathname($module, path, /)\n" +"--\n" +"\n" +"A helper function for samepath on windows."); + +#define OS__GETFINALPATHNAME_METHODDEF \ + {"_getfinalpathname", (PyCFunction)os__getfinalpathname, METH_VARARGS, os__getfinalpathname__doc__}, + +static PyObject * +os__getfinalpathname_impl(PyModuleDef *module, PyObject *path); + +static PyObject * +os__getfinalpathname(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *path; + + if (!PyArg_ParseTuple(args, + "U:_getfinalpathname", + &path)) + goto exit; + return_value = os__getfinalpathname_impl(module, path); + +exit: + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(os__getvolumepathname__doc__, +"_getvolumepathname($module, /, path)\n" +"--\n" +"\n" +"A helper function for ismount on Win32."); + +#define OS__GETVOLUMEPATHNAME_METHODDEF \ + {"_getvolumepathname", (PyCFunction)os__getvolumepathname, METH_VARARGS|METH_KEYWORDS, os__getvolumepathname__doc__}, + +static PyObject * +os__getvolumepathname_impl(PyModuleDef *module, PyObject *path); + +static PyObject * +os__getvolumepathname(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + PyObject *path; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "U:_getvolumepathname", _keywords, + &path)) + goto exit; + return_value = os__getvolumepathname_impl(module, path); + +exit: + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +PyDoc_STRVAR(os_mkdir__doc__, +"mkdir($module, /, path, mode=511, *, dir_fd=None)\n" +"--\n" +"\n" +"Create a directory.\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError.\n" +"\n" +"The mode argument is ignored on Windows."); + +#define OS_MKDIR_METHODDEF \ + {"mkdir", (PyCFunction)os_mkdir, METH_VARARGS|METH_KEYWORDS, os_mkdir__doc__}, + +static PyObject * +os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); + +static PyObject * +os_mkdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("mkdir", "path", 0, 0); + int mode = 511; + int dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|i$O&:mkdir", _keywords, + path_converter, &path, &mode, MKDIRAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_mkdir_impl(module, &path, mode, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#if defined(HAVE_NICE) + +PyDoc_STRVAR(os_nice__doc__, +"nice($module, increment, /)\n" +"--\n" +"\n" +"Add increment to the priority of process and return the new priority."); + +#define OS_NICE_METHODDEF \ + {"nice", (PyCFunction)os_nice, METH_VARARGS, os_nice__doc__}, + +static PyObject * +os_nice_impl(PyModuleDef *module, int increment); + +static PyObject * +os_nice(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int increment; + + if (!PyArg_ParseTuple(args, + "i:nice", + &increment)) + goto exit; + return_value = os_nice_impl(module, increment); + +exit: + return return_value; +} + +#endif /* defined(HAVE_NICE) */ + +#if defined(HAVE_GETPRIORITY) + +PyDoc_STRVAR(os_getpriority__doc__, +"getpriority($module, /, which, who)\n" +"--\n" +"\n" +"Return program scheduling priority."); + +#define OS_GETPRIORITY_METHODDEF \ + {"getpriority", (PyCFunction)os_getpriority, METH_VARARGS|METH_KEYWORDS, os_getpriority__doc__}, + +static PyObject * +os_getpriority_impl(PyModuleDef *module, int which, int who); + +static PyObject * +os_getpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"which", "who", NULL}; + int which; + int who; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "ii:getpriority", _keywords, + &which, &who)) + goto exit; + return_value = os_getpriority_impl(module, which, who); + +exit: + return return_value; +} + +#endif /* defined(HAVE_GETPRIORITY) */ + +#if defined(HAVE_SETPRIORITY) + +PyDoc_STRVAR(os_setpriority__doc__, +"setpriority($module, /, which, who, priority)\n" +"--\n" +"\n" +"Set program scheduling priority."); + +#define OS_SETPRIORITY_METHODDEF \ + {"setpriority", (PyCFunction)os_setpriority, METH_VARARGS|METH_KEYWORDS, os_setpriority__doc__}, + +static PyObject * +os_setpriority_impl(PyModuleDef *module, int which, int who, int priority); + +static PyObject * +os_setpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"which", "who", "priority", NULL}; + int which; + int who; + int priority; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "iii:setpriority", _keywords, + &which, &who, &priority)) + goto exit; + return_value = os_setpriority_impl(module, which, who, priority); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETPRIORITY) */ + +PyDoc_STRVAR(os_rename__doc__, +"rename($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n" +"--\n" +"\n" +"Rename a file or directory.\n" +"\n" +"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" +" descriptor open to a directory, and the respective path string (src or dst)\n" +" should be relative; the path will then be relative to that directory.\n" +"src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n" +" If they are unavailable, using them will raise a NotImplementedError."); + +#define OS_RENAME_METHODDEF \ + {"rename", (PyCFunction)os_rename, METH_VARARGS|METH_KEYWORDS, os_rename__doc__}, + +static PyObject * +os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); + +static PyObject * +os_rename(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; + path_t src = PATH_T_INITIALIZE("rename", "src", 0, 0); + path_t dst = PATH_T_INITIALIZE("rename", "dst", 0, 0); + int src_dir_fd = DEFAULT_DIR_FD; + int dst_dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|$O&O&:rename", _keywords, + path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) + goto exit; + return_value = os_rename_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); + +exit: + /* Cleanup for src */ + path_cleanup(&src); + /* Cleanup for dst */ + path_cleanup(&dst); + + return return_value; +} + +PyDoc_STRVAR(os_replace__doc__, +"replace($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n" +"--\n" +"\n" +"Rename a file or directory, overwriting the destination.\n" +"\n" +"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" +" descriptor open to a directory, and the respective path string (src or dst)\n" +" should be relative; the path will then be relative to that directory.\n" +"src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n" +" If they are unavailable, using them will raise a NotImplementedError.\""); + +#define OS_REPLACE_METHODDEF \ + {"replace", (PyCFunction)os_replace, METH_VARARGS|METH_KEYWORDS, os_replace__doc__}, + +static PyObject * +os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); + +static PyObject * +os_replace(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; + path_t src = PATH_T_INITIALIZE("replace", "src", 0, 0); + path_t dst = PATH_T_INITIALIZE("replace", "dst", 0, 0); + int src_dir_fd = DEFAULT_DIR_FD; + int dst_dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|$O&O&:replace", _keywords, + path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) + goto exit; + return_value = os_replace_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); + +exit: + /* Cleanup for src */ + path_cleanup(&src); + /* Cleanup for dst */ + path_cleanup(&dst); + + return return_value; +} + +PyDoc_STRVAR(os_rmdir__doc__, +"rmdir($module, /, path, *, dir_fd=None)\n" +"--\n" +"\n" +"Remove a directory.\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_RMDIR_METHODDEF \ + {"rmdir", (PyCFunction)os_rmdir, METH_VARARGS|METH_KEYWORDS, os_rmdir__doc__}, + +static PyObject * +os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd); + +static PyObject * +os_rmdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("rmdir", "path", 0, 0); + int dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|$O&:rmdir", _keywords, + path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_rmdir_impl(module, &path, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#if defined(HAVE_SYSTEM) && defined(MS_WINDOWS) + +PyDoc_STRVAR(os_system__doc__, +"system($module, /, command)\n" +"--\n" +"\n" +"Execute the command in a subshell."); + +#define OS_SYSTEM_METHODDEF \ + {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, + +static long +os_system_impl(PyModuleDef *module, Py_UNICODE *command); + +static PyObject * +os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"command", NULL}; + Py_UNICODE *command; + long _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "u:system", _keywords, + &command)) + goto exit; + _return_value = os_system_impl(module, command); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SYSTEM) && defined(MS_WINDOWS) */ + +#if defined(HAVE_SYSTEM) && !defined(MS_WINDOWS) + +PyDoc_STRVAR(os_system__doc__, +"system($module, /, command)\n" +"--\n" +"\n" +"Execute the command in a subshell."); + +#define OS_SYSTEM_METHODDEF \ + {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, + +static long +os_system_impl(PyModuleDef *module, PyObject *command); + +static PyObject * +os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"command", NULL}; + PyObject *command = NULL; + long _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:system", _keywords, + PyUnicode_FSConverter, &command)) + goto exit; + _return_value = os_system_impl(module, command); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + /* Cleanup for command */ + Py_XDECREF(command); + + return return_value; +} + +#endif /* defined(HAVE_SYSTEM) && !defined(MS_WINDOWS) */ + +PyDoc_STRVAR(os_umask__doc__, +"umask($module, mask, /)\n" +"--\n" +"\n" +"Set the current numeric umask and return the previous umask."); + +#define OS_UMASK_METHODDEF \ + {"umask", (PyCFunction)os_umask, METH_VARARGS, os_umask__doc__}, + +static PyObject * +os_umask_impl(PyModuleDef *module, int mask); + +static PyObject * +os_umask(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int mask; + + if (!PyArg_ParseTuple(args, + "i:umask", + &mask)) + goto exit; + return_value = os_umask_impl(module, mask); + +exit: + return return_value; +} + +PyDoc_STRVAR(os_unlink__doc__, +"unlink($module, /, path, *, dir_fd=None)\n" +"--\n" +"\n" +"Remove a file (same as remove()).\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_UNLINK_METHODDEF \ + {"unlink", (PyCFunction)os_unlink, METH_VARARGS|METH_KEYWORDS, os_unlink__doc__}, + +static PyObject * +os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd); + +static PyObject * +os_unlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("unlink", "path", 0, 0); + int dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|$O&:unlink", _keywords, + path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_unlink_impl(module, &path, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +PyDoc_STRVAR(os_remove__doc__, +"remove($module, /, path, *, dir_fd=None)\n" +"--\n" +"\n" +"Remove a file (same as unlink()).\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_REMOVE_METHODDEF \ + {"remove", (PyCFunction)os_remove, METH_VARARGS|METH_KEYWORDS, os_remove__doc__}, + +static PyObject * +os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd); + +static PyObject * +os_remove(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("remove", "path", 0, 0); + int dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|$O&:remove", _keywords, + path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_remove_impl(module, &path, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#if defined(HAVE_UNAME) + +PyDoc_STRVAR(os_uname__doc__, +"uname($module, /)\n" +"--\n" +"\n" +"Return an object identifying the current operating system.\n" +"\n" +"The object behaves like a named tuple with the following fields:\n" +" (sysname, nodename, release, version, machine)"); + +#define OS_UNAME_METHODDEF \ + {"uname", (PyCFunction)os_uname, METH_NOARGS, os_uname__doc__}, + +static PyObject * +os_uname_impl(PyModuleDef *module); + +static PyObject * +os_uname(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_uname_impl(module); +} + +#endif /* defined(HAVE_UNAME) */ + +PyDoc_STRVAR(os_utime__doc__, +"utime($module, /, path, times=None, *, ns=None, dir_fd=None,\n" +" follow_symlinks=True)\n" +"--\n" +"\n" +"Set the access and modified time of path.\n" +"\n" +"path may always be specified as a string.\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception.\n" +"\n" +"If times is not None, it must be a tuple (atime, mtime);\n" +" atime and mtime should be expressed as float seconds since the epoch.\n" +"If ns is not None, it must be a tuple (atime_ns, mtime_ns);\n" +" atime_ns and mtime_ns should be expressed as integer nanoseconds\n" +" since the epoch.\n" +"If both times and ns are None, utime uses the current time.\n" +"Specifying tuples for both times and ns is an error.\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, utime will modify the symbolic link itself instead of the file the\n" +" link points to.\n" +"It is an error to use dir_fd or follow_symlinks when specifying path\n" +" as an open file descriptor.\n" +"dir_fd and follow_symlinks may not be available on your platform.\n" +" If they are unavailable, using them will raise a NotImplementedError."); + +#define OS_UTIME_METHODDEF \ + {"utime", (PyCFunction)os_utime, METH_VARARGS|METH_KEYWORDS, os_utime__doc__}, + +static PyObject * +os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks); + +static PyObject * +os_utime(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "times", "ns", "dir_fd", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("utime", "path", 0, PATH_UTIME_HAVE_FD); + PyObject *times = NULL; + PyObject *ns = NULL; + int dir_fd = DEFAULT_DIR_FD; + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|O$OO&p:utime", _keywords, + path_converter, &path, ×, &ns, FUTIMENSAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + goto exit; + return_value = os_utime_impl(module, &path, times, ns, dir_fd, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +PyDoc_STRVAR(os__exit__doc__, +"_exit($module, /, status)\n" +"--\n" +"\n" +"Exit to the system with specified status, without normal exit processing."); + +#define OS__EXIT_METHODDEF \ + {"_exit", (PyCFunction)os__exit, METH_VARARGS|METH_KEYWORDS, os__exit__doc__}, + +static PyObject * +os__exit_impl(PyModuleDef *module, int status); + +static PyObject * +os__exit(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:_exit", _keywords, + &status)) + goto exit; + return_value = os__exit_impl(module, status); + +exit: + return return_value; +} + +#if defined(HAVE_EXECV) + +PyDoc_STRVAR(os_execv__doc__, +"execv($module, path, argv, /)\n" +"--\n" +"\n" +"Execute an executable path with arguments, replacing current process.\n" +"\n" +" path\n" +" Path of executable file.\n" +" argv\n" +" Tuple or list of strings."); + +#define OS_EXECV_METHODDEF \ + {"execv", (PyCFunction)os_execv, METH_VARARGS, os_execv__doc__}, + +static PyObject * +os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv); + +static PyObject * +os_execv(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *path = NULL; + PyObject *argv; + + if (!PyArg_ParseTuple(args, + "O&O:execv", + PyUnicode_FSConverter, &path, &argv)) + goto exit; + return_value = os_execv_impl(module, path, argv); + +exit: + /* Cleanup for path */ + Py_XDECREF(path); + + return return_value; +} + +#endif /* defined(HAVE_EXECV) */ + +#if defined(HAVE_EXECV) + +PyDoc_STRVAR(os_execve__doc__, +"execve($module, /, path, argv, env)\n" +"--\n" +"\n" +"Execute an executable path with arguments, replacing current process.\n" +"\n" +" path\n" +" Path of executable file.\n" +" argv\n" +" Tuple or list of strings.\n" +" env\n" +" Dictionary of strings mapping to strings."); + +#define OS_EXECVE_METHODDEF \ + {"execve", (PyCFunction)os_execve, METH_VARARGS|METH_KEYWORDS, os_execve__doc__}, + +static PyObject * +os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, PyObject *env); + +static PyObject * +os_execve(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "argv", "env", NULL}; + path_t path = PATH_T_INITIALIZE("execve", "path", 0, PATH_HAVE_FEXECVE); + PyObject *argv; + PyObject *env; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&OO:execve", _keywords, + path_converter, &path, &argv, &env)) + goto exit; + return_value = os_execve_impl(module, &path, argv, env); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(HAVE_EXECV) */ + +#if defined(HAVE_SPAWNV) + +PyDoc_STRVAR(os_spawnv__doc__, +"spawnv($module, mode, path, argv, /)\n" +"--\n" +"\n" +"Execute the program specified by path in a new process.\n" +"\n" +" mode\n" +" Mode of process creation.\n" +" path\n" +" Path of executable file.\n" +" argv\n" +" Tuple or list of strings."); + +#define OS_SPAWNV_METHODDEF \ + {"spawnv", (PyCFunction)os_spawnv, METH_VARARGS, os_spawnv__doc__}, + +static PyObject * +os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv); + +static PyObject * +os_spawnv(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int mode; + PyObject *path = NULL; + PyObject *argv; + + if (!PyArg_ParseTuple(args, + "iO&O:spawnv", + &mode, PyUnicode_FSConverter, &path, &argv)) + goto exit; + return_value = os_spawnv_impl(module, mode, path, argv); + +exit: + /* Cleanup for path */ + Py_XDECREF(path); + + return return_value; +} + +#endif /* defined(HAVE_SPAWNV) */ + +#if defined(HAVE_SPAWNV) + +PyDoc_STRVAR(os_spawnve__doc__, +"spawnve($module, mode, path, argv, env, /)\n" +"--\n" +"\n" +"Execute the program specified by path in a new process.\n" +"\n" +" mode\n" +" Mode of process creation.\n" +" path\n" +" Path of executable file.\n" +" argv\n" +" Tuple or list of strings.\n" +" env\n" +" Dictionary of strings mapping to strings."); + +#define OS_SPAWNVE_METHODDEF \ + {"spawnve", (PyCFunction)os_spawnve, METH_VARARGS, os_spawnve__doc__}, + +static PyObject * +os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv, PyObject *env); + +static PyObject * +os_spawnve(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int mode; + PyObject *path = NULL; + PyObject *argv; + PyObject *env; + + if (!PyArg_ParseTuple(args, + "iO&OO:spawnve", + &mode, PyUnicode_FSConverter, &path, &argv, &env)) + goto exit; + return_value = os_spawnve_impl(module, mode, path, argv, env); + +exit: + /* Cleanup for path */ + Py_XDECREF(path); + + return return_value; +} + +#endif /* defined(HAVE_SPAWNV) */ + +#if defined(HAVE_FORK1) + +PyDoc_STRVAR(os_fork1__doc__, +"fork1($module, /)\n" +"--\n" +"\n" +"Fork a child process with a single multiplexed (i.e., not bound) thread.\n" +"\n" +"Return 0 to child process and PID of child to parent process."); + +#define OS_FORK1_METHODDEF \ + {"fork1", (PyCFunction)os_fork1, METH_NOARGS, os_fork1__doc__}, + +static PyObject * +os_fork1_impl(PyModuleDef *module); + +static PyObject * +os_fork1(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_fork1_impl(module); +} + +#endif /* defined(HAVE_FORK1) */ + +#if defined(HAVE_FORK) + +PyDoc_STRVAR(os_fork__doc__, +"fork($module, /)\n" +"--\n" +"\n" +"Fork a child process.\n" +"\n" +"Return 0 to child process and PID of child to parent process."); + +#define OS_FORK_METHODDEF \ + {"fork", (PyCFunction)os_fork, METH_NOARGS, os_fork__doc__}, + +static PyObject * +os_fork_impl(PyModuleDef *module); + +static PyObject * +os_fork(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_fork_impl(module); +} + +#endif /* defined(HAVE_FORK) */ + +#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_GET_PRIORITY_MAX) + +PyDoc_STRVAR(os_sched_get_priority_max__doc__, +"sched_get_priority_max($module, /, policy)\n" +"--\n" +"\n" +"Get the maximum scheduling priority for policy."); + +#define OS_SCHED_GET_PRIORITY_MAX_METHODDEF \ + {"sched_get_priority_max", (PyCFunction)os_sched_get_priority_max, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_max__doc__}, + +static PyObject * +os_sched_get_priority_max_impl(PyModuleDef *module, int policy); + +static PyObject * +os_sched_get_priority_max(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"policy", NULL}; + int policy; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:sched_get_priority_max", _keywords, + &policy)) + goto exit; + return_value = os_sched_get_priority_max_impl(module, policy); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_GET_PRIORITY_MAX) */ + +#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_GET_PRIORITY_MAX) + +PyDoc_STRVAR(os_sched_get_priority_min__doc__, +"sched_get_priority_min($module, /, policy)\n" +"--\n" +"\n" +"Get the minimum scheduling priority for policy."); + +#define OS_SCHED_GET_PRIORITY_MIN_METHODDEF \ + {"sched_get_priority_min", (PyCFunction)os_sched_get_priority_min, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_min__doc__}, + +static PyObject * +os_sched_get_priority_min_impl(PyModuleDef *module, int policy); + +static PyObject * +os_sched_get_priority_min(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"policy", NULL}; + int policy; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:sched_get_priority_min", _keywords, + &policy)) + goto exit; + return_value = os_sched_get_priority_min_impl(module, policy); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_GET_PRIORITY_MAX) */ + +#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETSCHEDULER) + +PyDoc_STRVAR(os_sched_getscheduler__doc__, +"sched_getscheduler($module, pid, /)\n" +"--\n" +"\n" +"Get the scheduling policy for the process identifiedy by pid.\n" +"\n" +"Passing 0 for pid returns the scheduling policy for the calling process."); + +#define OS_SCHED_GETSCHEDULER_METHODDEF \ + {"sched_getscheduler", (PyCFunction)os_sched_getscheduler, METH_VARARGS, os_sched_getscheduler__doc__}, + +static PyObject * +os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid); + +static PyObject * +os_sched_getscheduler(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID ":sched_getscheduler", + &pid)) + goto exit; + return_value = os_sched_getscheduler_impl(module, pid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETSCHEDULER) */ + +#if defined(HAVE_SCHED_H) && (defined(HAVE_SCHED_SETSCHEDULER) || defined(HAVE_SCHED_SETPARAM)) + +PyDoc_STRVAR(os_sched_param__doc__, +"sched_param(sched_priority)\n" +"--\n" +"\n" +"Current has only one field: sched_priority\");\n" +"\n" +" sched_priority\n" +" A scheduling parameter."); + +static PyObject * +os_sched_param_impl(PyTypeObject *type, PyObject *sched_priority); + +static PyObject * +os_sched_param(PyTypeObject *type, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"sched_priority", NULL}; + PyObject *sched_priority; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O:sched_param", _keywords, + &sched_priority)) + goto exit; + return_value = os_sched_param_impl(type, sched_priority); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SCHED_H) && (defined(HAVE_SCHED_SETSCHEDULER) || defined(HAVE_SCHED_SETPARAM)) */ + +#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETSCHEDULER) + +PyDoc_STRVAR(os_sched_setscheduler__doc__, +"sched_setscheduler($module, pid, policy, param, /)\n" +"--\n" +"\n" +"Set the scheduling policy for the process identified by pid.\n" +"\n" +"If pid is 0, the calling process is changed.\n" +"param is an instance of sched_param."); + +#define OS_SCHED_SETSCHEDULER_METHODDEF \ + {"sched_setscheduler", (PyCFunction)os_sched_setscheduler, METH_VARARGS, os_sched_setscheduler__doc__}, + +static PyObject * +os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, struct sched_param *param); + +static PyObject * +os_sched_setscheduler(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + int policy; + struct sched_param param; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "iO&:sched_setscheduler", + &pid, &policy, convert_sched_param, ¶m)) + goto exit; + return_value = os_sched_setscheduler_impl(module, pid, policy, ¶m); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETSCHEDULER) */ + +#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETPARAM) + +PyDoc_STRVAR(os_sched_getparam__doc__, +"sched_getparam($module, pid, /)\n" +"--\n" +"\n" +"Returns scheduling parameters for the process identified by pid.\n" +"\n" +"If pid is 0, returns parameters for the calling process.\n" +"Return value is an instance of sched_param."); + +#define OS_SCHED_GETPARAM_METHODDEF \ + {"sched_getparam", (PyCFunction)os_sched_getparam, METH_VARARGS, os_sched_getparam__doc__}, + +static PyObject * +os_sched_getparam_impl(PyModuleDef *module, pid_t pid); + +static PyObject * +os_sched_getparam(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID ":sched_getparam", + &pid)) + goto exit; + return_value = os_sched_getparam_impl(module, pid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETPARAM) */ + +#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETPARAM) + +PyDoc_STRVAR(os_sched_setparam__doc__, +"sched_setparam($module, pid, param, /)\n" +"--\n" +"\n" +"Set scheduling parameters for the process identified by pid.\n" +"\n" +"If pid is 0, sets parameters for the calling process.\n" +"param should be an instance of sched_param."); + +#define OS_SCHED_SETPARAM_METHODDEF \ + {"sched_setparam", (PyCFunction)os_sched_setparam, METH_VARARGS, os_sched_setparam__doc__}, + +static PyObject * +os_sched_setparam_impl(PyModuleDef *module, pid_t pid, struct sched_param *param); + +static PyObject * +os_sched_setparam(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + struct sched_param param; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "O&:sched_setparam", + &pid, convert_sched_param, ¶m)) + goto exit; + return_value = os_sched_setparam_impl(module, pid, ¶m); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETPARAM) */ + +#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_RR_GET_INTERVAL) + +PyDoc_STRVAR(os_sched_rr_get_interval__doc__, +"sched_rr_get_interval($module, pid, /)\n" +"--\n" +"\n" +"Return the round-robin quantum for the process identified by pid, in seconds.\n" +"\n" +"Value returned is a float."); + +#define OS_SCHED_RR_GET_INTERVAL_METHODDEF \ + {"sched_rr_get_interval", (PyCFunction)os_sched_rr_get_interval, METH_VARARGS, os_sched_rr_get_interval__doc__}, + +static double +os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid); + +static PyObject * +os_sched_rr_get_interval(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + double _return_value; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID ":sched_rr_get_interval", + &pid)) + goto exit; + _return_value = os_sched_rr_get_interval_impl(module, pid); + if ((_return_value == -1.0) && PyErr_Occurred()) + goto exit; + return_value = PyFloat_FromDouble(_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_RR_GET_INTERVAL) */ + +#if defined(HAVE_SCHED_H) + +PyDoc_STRVAR(os_sched_yield__doc__, +"sched_yield($module, /)\n" +"--\n" +"\n" +"Voluntarily relinquish the CPU."); + +#define OS_SCHED_YIELD_METHODDEF \ + {"sched_yield", (PyCFunction)os_sched_yield, METH_NOARGS, os_sched_yield__doc__}, + +static PyObject * +os_sched_yield_impl(PyModuleDef *module); + +static PyObject * +os_sched_yield(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_sched_yield_impl(module); +} + +#endif /* defined(HAVE_SCHED_H) */ + +#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETAFFINITY) + +PyDoc_STRVAR(os_sched_setaffinity__doc__, +"sched_setaffinity($module, pid, mask, /)\n" +"--\n" +"\n" +"Set the CPU affinity of the process identified by pid to mask.\n" +"\n" +"mask should be an iterable of integers identifying CPUs."); + +#define OS_SCHED_SETAFFINITY_METHODDEF \ + {"sched_setaffinity", (PyCFunction)os_sched_setaffinity, METH_VARARGS, os_sched_setaffinity__doc__}, + +static PyObject * +os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask); + +static PyObject * +os_sched_setaffinity(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + PyObject *mask; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "O:sched_setaffinity", + &pid, &mask)) + goto exit; + return_value = os_sched_setaffinity_impl(module, pid, mask); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETAFFINITY) */ + +#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETAFFINITY) + +PyDoc_STRVAR(os_sched_getaffinity__doc__, +"sched_getaffinity($module, pid, /)\n" +"--\n" +"\n" +"Return the affinity of the process identified by pid.\n" +"\n" +"The affinity is returned as a set of CPU identifiers."); + +#define OS_SCHED_GETAFFINITY_METHODDEF \ + {"sched_getaffinity", (PyCFunction)os_sched_getaffinity, METH_VARARGS, os_sched_getaffinity__doc__}, + +static PyObject * +os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid); + +static PyObject * +os_sched_getaffinity(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID ":sched_getaffinity", + &pid)) + goto exit; + return_value = os_sched_getaffinity_impl(module, pid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETAFFINITY) */ + +#if (defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX)) + +PyDoc_STRVAR(os_openpty__doc__, +"openpty($module, /)\n" +"--\n" +"\n" +"Open a pseudo-terminal.\n" +"\n" +"Return a tuple of (master_fd, slave_fd) containing open file descriptors\n" +"for both the master and slave ends."); + +#define OS_OPENPTY_METHODDEF \ + {"openpty", (PyCFunction)os_openpty, METH_NOARGS, os_openpty__doc__}, + +static PyObject * +os_openpty_impl(PyModuleDef *module); + +static PyObject * +os_openpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_openpty_impl(module); +} + +#endif /* (defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX)) */ + +#if defined(HAVE_FORKPTY) + +PyDoc_STRVAR(os_forkpty__doc__, +"forkpty($module, /)\n" +"--\n" +"\n" +"Fork a new process with a new pseudo-terminal as controlling tty.\n" +"\n" +"Returns a tuple of (pid, master_fd).\n" +"Like fork(), return pid of 0 to the child process,\n" +"and pid of child to the parent process.\n" +"To both, return fd of newly opened pseudo-terminal."); + +#define OS_FORKPTY_METHODDEF \ + {"forkpty", (PyCFunction)os_forkpty, METH_NOARGS, os_forkpty__doc__}, + +static PyObject * +os_forkpty_impl(PyModuleDef *module); + +static PyObject * +os_forkpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_forkpty_impl(module); +} + +#endif /* defined(HAVE_FORKPTY) */ + +#if defined(HAVE_GETEGID) + +PyDoc_STRVAR(os_getegid__doc__, +"getegid($module, /)\n" +"--\n" +"\n" +"Return the current process\'s effective group id."); + +#define OS_GETEGID_METHODDEF \ + {"getegid", (PyCFunction)os_getegid, METH_NOARGS, os_getegid__doc__}, + +static PyObject * +os_getegid_impl(PyModuleDef *module); + +static PyObject * +os_getegid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getegid_impl(module); +} + +#endif /* defined(HAVE_GETEGID) */ + +#if defined(HAVE_GETEUID) + +PyDoc_STRVAR(os_geteuid__doc__, +"geteuid($module, /)\n" +"--\n" +"\n" +"Return the current process\'s effective user id."); + +#define OS_GETEUID_METHODDEF \ + {"geteuid", (PyCFunction)os_geteuid, METH_NOARGS, os_geteuid__doc__}, + +static PyObject * +os_geteuid_impl(PyModuleDef *module); + +static PyObject * +os_geteuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_geteuid_impl(module); +} + +#endif /* defined(HAVE_GETEUID) */ + +#if defined(HAVE_GETGID) + +PyDoc_STRVAR(os_getgid__doc__, +"getgid($module, /)\n" +"--\n" +"\n" +"Return the current process\'s group id."); + +#define OS_GETGID_METHODDEF \ + {"getgid", (PyCFunction)os_getgid, METH_NOARGS, os_getgid__doc__}, + +static PyObject * +os_getgid_impl(PyModuleDef *module); + +static PyObject * +os_getgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getgid_impl(module); +} + +#endif /* defined(HAVE_GETGID) */ + +PyDoc_STRVAR(os_getpid__doc__, +"getpid($module, /)\n" +"--\n" +"\n" +"Return the current process id."); + +#define OS_GETPID_METHODDEF \ + {"getpid", (PyCFunction)os_getpid, METH_NOARGS, os_getpid__doc__}, + +static PyObject * +os_getpid_impl(PyModuleDef *module); + +static PyObject * +os_getpid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getpid_impl(module); +} + +#if defined(HAVE_GETGROUPS) + +PyDoc_STRVAR(os_getgroups__doc__, +"getgroups($module, /)\n" +"--\n" +"\n" +"Return list of supplemental group IDs for the process."); + +#define OS_GETGROUPS_METHODDEF \ + {"getgroups", (PyCFunction)os_getgroups, METH_NOARGS, os_getgroups__doc__}, + +static PyObject * +os_getgroups_impl(PyModuleDef *module); + +static PyObject * +os_getgroups(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getgroups_impl(module); +} + +#endif /* defined(HAVE_GETGROUPS) */ + +#if defined(HAVE_GETPGID) + +PyDoc_STRVAR(os_getpgid__doc__, +"getpgid($module, /, pid)\n" +"--\n" +"\n" +"Call the system call getpgid(), and return the result."); + +#define OS_GETPGID_METHODDEF \ + {"getpgid", (PyCFunction)os_getpgid, METH_VARARGS|METH_KEYWORDS, os_getpgid__doc__}, + +static PyObject * +os_getpgid_impl(PyModuleDef *module, pid_t pid); + +static PyObject * +os_getpgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"pid", NULL}; + pid_t pid; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "" _Py_PARSE_PID ":getpgid", _keywords, + &pid)) + goto exit; + return_value = os_getpgid_impl(module, pid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_GETPGID) */ + +#if defined(HAVE_GETPGRP) + +PyDoc_STRVAR(os_getpgrp__doc__, +"getpgrp($module, /)\n" +"--\n" +"\n" +"Return the current process group id."); + +#define OS_GETPGRP_METHODDEF \ + {"getpgrp", (PyCFunction)os_getpgrp, METH_NOARGS, os_getpgrp__doc__}, + +static PyObject * +os_getpgrp_impl(PyModuleDef *module); + +static PyObject * +os_getpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getpgrp_impl(module); +} + +#endif /* defined(HAVE_GETPGRP) */ + +#if defined(HAVE_SETPGRP) + +PyDoc_STRVAR(os_setpgrp__doc__, +"setpgrp($module, /)\n" +"--\n" +"\n" +"Make the current process the leader of its process group."); + +#define OS_SETPGRP_METHODDEF \ + {"setpgrp", (PyCFunction)os_setpgrp, METH_NOARGS, os_setpgrp__doc__}, + +static PyObject * +os_setpgrp_impl(PyModuleDef *module); + +static PyObject * +os_setpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_setpgrp_impl(module); +} + +#endif /* defined(HAVE_SETPGRP) */ + +#if defined(HAVE_GETPPID) + +PyDoc_STRVAR(os_getppid__doc__, +"getppid($module, /)\n" +"--\n" +"\n" +"Return the parent\'s process id.\n" +"\n" +"If the parent process has already exited, Windows machines will still\n" +"return its id; others systems will return the id of the \'init\' process (1)."); + +#define OS_GETPPID_METHODDEF \ + {"getppid", (PyCFunction)os_getppid, METH_NOARGS, os_getppid__doc__}, + +static PyObject * +os_getppid_impl(PyModuleDef *module); + +static PyObject * +os_getppid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getppid_impl(module); +} + +#endif /* defined(HAVE_GETPPID) */ + +#if defined(HAVE_GETLOGIN) + +PyDoc_STRVAR(os_getlogin__doc__, +"getlogin($module, /)\n" +"--\n" +"\n" +"Return the actual login name."); + +#define OS_GETLOGIN_METHODDEF \ + {"getlogin", (PyCFunction)os_getlogin, METH_NOARGS, os_getlogin__doc__}, + +static PyObject * +os_getlogin_impl(PyModuleDef *module); + +static PyObject * +os_getlogin(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getlogin_impl(module); +} + +#endif /* defined(HAVE_GETLOGIN) */ + +#if defined(HAVE_GETUID) + +PyDoc_STRVAR(os_getuid__doc__, +"getuid($module, /)\n" +"--\n" +"\n" +"Return the current process\'s user id."); + +#define OS_GETUID_METHODDEF \ + {"getuid", (PyCFunction)os_getuid, METH_NOARGS, os_getuid__doc__}, + +static PyObject * +os_getuid_impl(PyModuleDef *module); + +static PyObject * +os_getuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getuid_impl(module); +} + +#endif /* defined(HAVE_GETUID) */ + +#if defined(HAVE_KILL) + +PyDoc_STRVAR(os_kill__doc__, +"kill($module, pid, signal, /)\n" +"--\n" +"\n" +"Kill a process with a signal."); + +#define OS_KILL_METHODDEF \ + {"kill", (PyCFunction)os_kill, METH_VARARGS, os_kill__doc__}, + +static PyObject * +os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal); + +static PyObject * +os_kill(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + Py_ssize_t signal; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "n:kill", + &pid, &signal)) + goto exit; + return_value = os_kill_impl(module, pid, signal); + +exit: + return return_value; +} + +#endif /* defined(HAVE_KILL) */ + +#if defined(HAVE_KILLPG) + +PyDoc_STRVAR(os_killpg__doc__, +"killpg($module, pgid, signal, /)\n" +"--\n" +"\n" +"Kill a process group with a signal."); + +#define OS_KILLPG_METHODDEF \ + {"killpg", (PyCFunction)os_killpg, METH_VARARGS, os_killpg__doc__}, + +static PyObject * +os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal); + +static PyObject * +os_killpg(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pgid; + int signal; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "i:killpg", + &pgid, &signal)) + goto exit; + return_value = os_killpg_impl(module, pgid, signal); + +exit: + return return_value; +} + +#endif /* defined(HAVE_KILLPG) */ + +#if defined(HAVE_PLOCK) + +PyDoc_STRVAR(os_plock__doc__, +"plock($module, op, /)\n" +"--\n" +"\n" +"Lock program segments into memory.\");"); + +#define OS_PLOCK_METHODDEF \ + {"plock", (PyCFunction)os_plock, METH_VARARGS, os_plock__doc__}, + +static PyObject * +os_plock_impl(PyModuleDef *module, int op); + +static PyObject * +os_plock(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int op; + + if (!PyArg_ParseTuple(args, + "i:plock", + &op)) + goto exit; + return_value = os_plock_impl(module, op); + +exit: + return return_value; +} + +#endif /* defined(HAVE_PLOCK) */ + +#if defined(HAVE_SETUID) + +PyDoc_STRVAR(os_setuid__doc__, +"setuid($module, uid, /)\n" +"--\n" +"\n" +"Set the current process\'s user id."); + +#define OS_SETUID_METHODDEF \ + {"setuid", (PyCFunction)os_setuid, METH_VARARGS, os_setuid__doc__}, + +static PyObject * +os_setuid_impl(PyModuleDef *module, uid_t uid); + +static PyObject * +os_setuid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + uid_t uid; + + if (!PyArg_ParseTuple(args, + "O&:setuid", + _Py_Uid_Converter, &uid)) + goto exit; + return_value = os_setuid_impl(module, uid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETUID) */ + +#if defined(HAVE_SETEUID) + +PyDoc_STRVAR(os_seteuid__doc__, +"seteuid($module, euid, /)\n" +"--\n" +"\n" +"Set the current process\'s effective user id."); + +#define OS_SETEUID_METHODDEF \ + {"seteuid", (PyCFunction)os_seteuid, METH_VARARGS, os_seteuid__doc__}, + +static PyObject * +os_seteuid_impl(PyModuleDef *module, uid_t euid); + +static PyObject * +os_seteuid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + uid_t euid; + + if (!PyArg_ParseTuple(args, + "O&:seteuid", + _Py_Uid_Converter, &euid)) + goto exit; + return_value = os_seteuid_impl(module, euid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETEUID) */ + +#if defined(HAVE_SETEGID) + +PyDoc_STRVAR(os_setegid__doc__, +"setegid($module, egid, /)\n" +"--\n" +"\n" +"Set the current process\'s effective group id."); + +#define OS_SETEGID_METHODDEF \ + {"setegid", (PyCFunction)os_setegid, METH_VARARGS, os_setegid__doc__}, + +static PyObject * +os_setegid_impl(PyModuleDef *module, gid_t egid); + +static PyObject * +os_setegid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + gid_t egid; + + if (!PyArg_ParseTuple(args, + "O&:setegid", + _Py_Gid_Converter, &egid)) + goto exit; + return_value = os_setegid_impl(module, egid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETEGID) */ + +#if defined(HAVE_SETREUID) + +PyDoc_STRVAR(os_setreuid__doc__, +"setreuid($module, ruid, euid, /)\n" +"--\n" +"\n" +"Set the current process\'s real and effective user ids."); + +#define OS_SETREUID_METHODDEF \ + {"setreuid", (PyCFunction)os_setreuid, METH_VARARGS, os_setreuid__doc__}, + +static PyObject * +os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid); + +static PyObject * +os_setreuid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + uid_t ruid; + uid_t euid; + + if (!PyArg_ParseTuple(args, + "O&O&:setreuid", + _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid)) + goto exit; + return_value = os_setreuid_impl(module, ruid, euid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETREUID) */ + +#if defined(HAVE_SETREGID) + +PyDoc_STRVAR(os_setregid__doc__, +"setregid($module, rgid, egid, /)\n" +"--\n" +"\n" +"Set the current process\'s real and effective group ids."); + +#define OS_SETREGID_METHODDEF \ + {"setregid", (PyCFunction)os_setregid, METH_VARARGS, os_setregid__doc__}, + +static PyObject * +os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid); + +static PyObject * +os_setregid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + gid_t rgid; + gid_t egid; + + if (!PyArg_ParseTuple(args, + "O&O&:setregid", + _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid)) + goto exit; + return_value = os_setregid_impl(module, rgid, egid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETREGID) */ + +#if defined(HAVE_SETGID) + +PyDoc_STRVAR(os_setgid__doc__, +"setgid($module, gid, /)\n" +"--\n" +"\n" +"Set the current process\'s group id."); + +#define OS_SETGID_METHODDEF \ + {"setgid", (PyCFunction)os_setgid, METH_VARARGS, os_setgid__doc__}, + +static PyObject * +os_setgid_impl(PyModuleDef *module, gid_t gid); + +static PyObject * +os_setgid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + gid_t gid; + + if (!PyArg_ParseTuple(args, + "O&:setgid", + _Py_Gid_Converter, &gid)) + goto exit; + return_value = os_setgid_impl(module, gid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETGID) */ + +#if defined(HAVE_SETGROUPS) + +PyDoc_STRVAR(os_setgroups__doc__, +"setgroups($module, groups, /)\n" +"--\n" +"\n" +"Set the groups of the current process to list."); + +#define OS_SETGROUPS_METHODDEF \ + {"setgroups", (PyCFunction)os_setgroups, METH_O, os_setgroups__doc__}, + +#endif /* defined(HAVE_SETGROUPS) */ + +#if defined(HAVE_WAIT3) + +PyDoc_STRVAR(os_wait3__doc__, +"wait3($module, /, options)\n" +"--\n" +"\n" +"Wait for completion of a child process.\n" +"\n" +"Returns a tuple of information about the child process:\n" +" (pid, status, rusage)"); + +#define OS_WAIT3_METHODDEF \ + {"wait3", (PyCFunction)os_wait3, METH_VARARGS|METH_KEYWORDS, os_wait3__doc__}, + +static PyObject * +os_wait3_impl(PyModuleDef *module, int options); + +static PyObject * +os_wait3(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"options", NULL}; + int options; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:wait3", _keywords, + &options)) + goto exit; + return_value = os_wait3_impl(module, options); + +exit: + return return_value; +} + +#endif /* defined(HAVE_WAIT3) */ + +#if defined(HAVE_WAIT4) + +PyDoc_STRVAR(os_wait4__doc__, +"wait4($module, /, pid, options)\n" +"--\n" +"\n" +"Wait for completion of a specific child process.\n" +"\n" +"Returns a tuple of information about the child process:\n" +" (pid, status, rusage)"); + +#define OS_WAIT4_METHODDEF \ + {"wait4", (PyCFunction)os_wait4, METH_VARARGS|METH_KEYWORDS, os_wait4__doc__}, + +static PyObject * +os_wait4_impl(PyModuleDef *module, pid_t pid, int options); + +static PyObject * +os_wait4(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"pid", "options", NULL}; + pid_t pid; + int options; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "" _Py_PARSE_PID "i:wait4", _keywords, + &pid, &options)) + goto exit; + return_value = os_wait4_impl(module, pid, options); + +exit: + return return_value; +} + +#endif /* defined(HAVE_WAIT4) */ + +#if (defined(HAVE_WAITID) && !defined(__APPLE__)) + +PyDoc_STRVAR(os_waitid__doc__, +"waitid($module, idtype, id, options, /)\n" +"--\n" +"\n" +"Returns the result of waiting for a process or processes.\n" +"\n" +" idtype\n" +" Must be one of be P_PID, P_PGID or P_ALL.\n" +" id\n" +" The id to wait on.\n" +" options\n" +" Constructed from the ORing of one or more of WEXITED, WSTOPPED\n" +" or WCONTINUED and additionally may be ORed with WNOHANG or WNOWAIT.\n" +"\n" +"Returns either waitid_result or None if WNOHANG is specified and there are\n" +"no children in a waitable state."); + +#define OS_WAITID_METHODDEF \ + {"waitid", (PyCFunction)os_waitid, METH_VARARGS, os_waitid__doc__}, + +static PyObject * +os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options); + +static PyObject * +os_waitid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + idtype_t idtype; + id_t id; + int options; + + if (!PyArg_ParseTuple(args, + "i" _Py_PARSE_PID "i:waitid", + &idtype, &id, &options)) + goto exit; + return_value = os_waitid_impl(module, idtype, id, options); + +exit: + return return_value; +} + +#endif /* (defined(HAVE_WAITID) && !defined(__APPLE__)) */ + +#if defined(HAVE_WAITPID) + +PyDoc_STRVAR(os_waitpid__doc__, +"waitpid($module, pid, options, /)\n" +"--\n" +"\n" +"Wait for completion of a given child process.\n" +"\n" +"Returns a tuple of information regarding the child process:\n" +" (pid, status)\n" +"\n" +"The options argument is ignored on Windows."); + +#define OS_WAITPID_METHODDEF \ + {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, + +static PyObject * +os_waitpid_impl(PyModuleDef *module, pid_t pid, int options); + +static PyObject * +os_waitpid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + int options; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "i:waitpid", + &pid, &options)) + goto exit; + return_value = os_waitpid_impl(module, pid, options); + +exit: + return return_value; +} + +#endif /* defined(HAVE_WAITPID) */ + +#if defined(HAVE_CWAIT) + +PyDoc_STRVAR(os_waitpid__doc__, +"waitpid($module, pid, options, /)\n" +"--\n" +"\n" +"Wait for completion of a given process.\n" +"\n" +"Returns a tuple of information regarding the process:\n" +" (pid, status << 8)\n" +"\n" +"The options argument is ignored on Windows."); + +#define OS_WAITPID_METHODDEF \ + {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, + +static PyObject * +os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options); + +static PyObject * +os_waitpid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_intptr_t pid; + int options; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_INTPTR "i:waitpid", + &pid, &options)) + goto exit; + return_value = os_waitpid_impl(module, pid, options); + +exit: + return return_value; +} + +#endif /* defined(HAVE_CWAIT) */ + +#if defined(HAVE_WAIT) + +PyDoc_STRVAR(os_wait__doc__, +"wait($module, /)\n" +"--\n" +"\n" +"Wait for completion of a child process.\n" +"\n" +"Returns a tuple of information about the child process:\n" +" (pid, status)"); + +#define OS_WAIT_METHODDEF \ + {"wait", (PyCFunction)os_wait, METH_NOARGS, os_wait__doc__}, + +static PyObject * +os_wait_impl(PyModuleDef *module); + +static PyObject * +os_wait(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_wait_impl(module); +} + +#endif /* defined(HAVE_WAIT) */ + +#if defined(HAVE_SYMLINK) + +PyDoc_STRVAR(os_symlink__doc__, +"symlink($module, /, src, dst, target_is_directory=False, *, dir_fd=None)\n" +"--\n" +"\n" +"Create a symbolic link pointing to src named dst.\n" +"\n" +"target_is_directory is required on Windows if the target is to be\n" +" interpreted as a directory. (On Windows, symlink requires\n" +" Windows 6.0 or greater, and raises a NotImplementedError otherwise.)\n" +" target_is_directory is ignored on non-Windows platforms.\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_SYMLINK_METHODDEF \ + {"symlink", (PyCFunction)os_symlink, METH_VARARGS|METH_KEYWORDS, os_symlink__doc__}, + +static PyObject * +os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd); + +static PyObject * +os_symlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"src", "dst", "target_is_directory", "dir_fd", NULL}; + path_t src = PATH_T_INITIALIZE("symlink", "src", 0, 0); + path_t dst = PATH_T_INITIALIZE("symlink", "dst", 0, 0); + int target_is_directory = 0; + int dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|p$O&:symlink", _keywords, + path_converter, &src, path_converter, &dst, &target_is_directory, SYMLINKAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_symlink_impl(module, &src, &dst, target_is_directory, dir_fd); + +exit: + /* Cleanup for src */ + path_cleanup(&src); + /* Cleanup for dst */ + path_cleanup(&dst); + + return return_value; +} + +#endif /* defined(HAVE_SYMLINK) */ + +#if defined(HAVE_TIMES) + +PyDoc_STRVAR(os_times__doc__, +"times($module, /)\n" +"--\n" +"\n" +"Return a collection containing process timing information.\n" +"\n" +"The object returned behaves like a named tuple with these fields:\n" +" (utime, stime, cutime, cstime, elapsed_time)\n" +"All fields are floating point numbers."); + +#define OS_TIMES_METHODDEF \ + {"times", (PyCFunction)os_times, METH_NOARGS, os_times__doc__}, + +static PyObject * +os_times_impl(PyModuleDef *module); + +static PyObject * +os_times(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_times_impl(module); +} + +#endif /* defined(HAVE_TIMES) */ + +#if defined(HAVE_GETSID) + +PyDoc_STRVAR(os_getsid__doc__, +"getsid($module, pid, /)\n" +"--\n" +"\n" +"Call the system call getsid(pid) and return the result."); + +#define OS_GETSID_METHODDEF \ + {"getsid", (PyCFunction)os_getsid, METH_VARARGS, os_getsid__doc__}, + +static PyObject * +os_getsid_impl(PyModuleDef *module, pid_t pid); + +static PyObject * +os_getsid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID ":getsid", + &pid)) + goto exit; + return_value = os_getsid_impl(module, pid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_GETSID) */ + +#if defined(HAVE_SETSID) + +PyDoc_STRVAR(os_setsid__doc__, +"setsid($module, /)\n" +"--\n" +"\n" +"Call the system call setsid()."); + +#define OS_SETSID_METHODDEF \ + {"setsid", (PyCFunction)os_setsid, METH_NOARGS, os_setsid__doc__}, + +static PyObject * +os_setsid_impl(PyModuleDef *module); + +static PyObject * +os_setsid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_setsid_impl(module); +} + +#endif /* defined(HAVE_SETSID) */ + +#if defined(HAVE_SETPGID) + +PyDoc_STRVAR(os_setpgid__doc__, +"setpgid($module, pid, pgrp, /)\n" +"--\n" +"\n" +"Call the system call setpgid(pid, pgrp)."); + +#define OS_SETPGID_METHODDEF \ + {"setpgid", (PyCFunction)os_setpgid, METH_VARARGS, os_setpgid__doc__}, + +static PyObject * +os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp); + +static PyObject * +os_setpgid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + pid_t pid; + pid_t pgrp; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_PID "" _Py_PARSE_PID ":setpgid", + &pid, &pgrp)) + goto exit; + return_value = os_setpgid_impl(module, pid, pgrp); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETPGID) */ + +#if defined(HAVE_TCGETPGRP) + +PyDoc_STRVAR(os_tcgetpgrp__doc__, +"tcgetpgrp($module, fd, /)\n" +"--\n" +"\n" +"Return the process group associated with the terminal specified by fd."); + +#define OS_TCGETPGRP_METHODDEF \ + {"tcgetpgrp", (PyCFunction)os_tcgetpgrp, METH_VARARGS, os_tcgetpgrp__doc__}, + +static PyObject * +os_tcgetpgrp_impl(PyModuleDef *module, int fd); + +static PyObject * +os_tcgetpgrp(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + + if (!PyArg_ParseTuple(args, + "i:tcgetpgrp", + &fd)) + goto exit; + return_value = os_tcgetpgrp_impl(module, fd); + +exit: + return return_value; +} + +#endif /* defined(HAVE_TCGETPGRP) */ + +#if defined(HAVE_TCSETPGRP) + +PyDoc_STRVAR(os_tcsetpgrp__doc__, +"tcsetpgrp($module, fd, pgid, /)\n" +"--\n" +"\n" +"Set the process group associated with the terminal specified by fd."); + +#define OS_TCSETPGRP_METHODDEF \ + {"tcsetpgrp", (PyCFunction)os_tcsetpgrp, METH_VARARGS, os_tcsetpgrp__doc__}, + +static PyObject * +os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid); + +static PyObject * +os_tcsetpgrp(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + pid_t pgid; + + if (!PyArg_ParseTuple(args, + "i" _Py_PARSE_PID ":tcsetpgrp", + &fd, &pgid)) + goto exit; + return_value = os_tcsetpgrp_impl(module, fd, pgid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_TCSETPGRP) */ + +PyDoc_STRVAR(os_open__doc__, +"open($module, /, path, flags, mode=511, *, dir_fd=None)\n" +"--\n" +"\n" +"Open a file for low level IO. Returns a file descriptor (integer).\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_OPEN_METHODDEF \ + {"open", (PyCFunction)os_open, METH_VARARGS|METH_KEYWORDS, os_open__doc__}, + +static int +os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd); + +static PyObject * +os_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "flags", "mode", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("open", "path", 0, 0); + int flags; + int mode = 511; + int dir_fd = DEFAULT_DIR_FD; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&i|i$O&:open", _keywords, + path_converter, &path, &flags, &mode, OPENAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + _return_value = os_open_impl(module, &path, flags, mode, dir_fd); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +PyDoc_STRVAR(os_close__doc__, +"close($module, /, fd)\n" +"--\n" +"\n" +"Close a file descriptor."); + +#define OS_CLOSE_METHODDEF \ + {"close", (PyCFunction)os_close, METH_VARARGS|METH_KEYWORDS, os_close__doc__}, + +static PyObject * +os_close_impl(PyModuleDef *module, int fd); + +static PyObject * +os_close(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; + int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:close", _keywords, + &fd)) + goto exit; + return_value = os_close_impl(module, fd); + +exit: + return return_value; +} + +PyDoc_STRVAR(os_closerange__doc__, +"closerange($module, fd_low, fd_high, /)\n" +"--\n" +"\n" +"Closes all file descriptors in [fd_low, fd_high), ignoring errors."); + +#define OS_CLOSERANGE_METHODDEF \ + {"closerange", (PyCFunction)os_closerange, METH_VARARGS, os_closerange__doc__}, + +static PyObject * +os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high); + +static PyObject * +os_closerange(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd_low; + int fd_high; + + if (!PyArg_ParseTuple(args, + "ii:closerange", + &fd_low, &fd_high)) + goto exit; + return_value = os_closerange_impl(module, fd_low, fd_high); + +exit: + return return_value; +} + +PyDoc_STRVAR(os_dup__doc__, +"dup($module, fd, /)\n" +"--\n" +"\n" +"Return a duplicate of a file descriptor."); + +#define OS_DUP_METHODDEF \ + {"dup", (PyCFunction)os_dup, METH_VARARGS, os_dup__doc__}, + +static int +os_dup_impl(PyModuleDef *module, int fd); + +static PyObject * +os_dup(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int _return_value; + + if (!PyArg_ParseTuple(args, + "i:dup", + &fd)) + goto exit; + _return_value = os_dup_impl(module, fd); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(os_dup2__doc__, +"dup2($module, /, fd, fd2, inheritable=True)\n" +"--\n" +"\n" +"Duplicate file descriptor."); + +#define OS_DUP2_METHODDEF \ + {"dup2", (PyCFunction)os_dup2, METH_VARARGS|METH_KEYWORDS, os_dup2__doc__}, + +static PyObject * +os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable); + +static PyObject * +os_dup2(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", "fd2", "inheritable", NULL}; + int fd; + int fd2; + int inheritable = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "ii|p:dup2", _keywords, + &fd, &fd2, &inheritable)) + goto exit; + return_value = os_dup2_impl(module, fd, fd2, inheritable); + +exit: + return return_value; +} + +#if defined(HAVE_LOCKF) + +PyDoc_STRVAR(os_lockf__doc__, +"lockf($module, fd, command, length, /)\n" +"--\n" +"\n" +"Apply, test or remove a POSIX lock on an open file descriptor.\n" +"\n" +" fd\n" +" An open file descriptor.\n" +" command\n" +" One of F_LOCK, F_TLOCK, F_ULOCK or F_TEST.\n" +" length\n" +" The number of bytes to lock, starting at the current position."); + +#define OS_LOCKF_METHODDEF \ + {"lockf", (PyCFunction)os_lockf, METH_VARARGS, os_lockf__doc__}, + +static PyObject * +os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length); + +static PyObject * +os_lockf(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int command; + Py_off_t length; + + if (!PyArg_ParseTuple(args, + "iiO&:lockf", + &fd, &command, Py_off_t_converter, &length)) + goto exit; + return_value = os_lockf_impl(module, fd, command, length); + +exit: + return return_value; +} + +#endif /* defined(HAVE_LOCKF) */ + +PyDoc_STRVAR(os_lseek__doc__, +"lseek($module, fd, position, how, /)\n" +"--\n" +"\n" +"Set the position of a file descriptor. Return the new position.\n" +"\n" +"Return the new cursor position in number of bytes\n" +"relative to the beginning of the file."); + +#define OS_LSEEK_METHODDEF \ + {"lseek", (PyCFunction)os_lseek, METH_VARARGS, os_lseek__doc__}, + +static Py_off_t +os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how); + +static PyObject * +os_lseek(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + Py_off_t position; + int how; + Py_off_t _return_value; + + if (!PyArg_ParseTuple(args, + "iO&i:lseek", + &fd, Py_off_t_converter, &position, &how)) + goto exit; + _return_value = os_lseek_impl(module, fd, position, how); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromPy_off_t(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(os_read__doc__, +"read($module, fd, length, /)\n" +"--\n" +"\n" +"Read from a file descriptor. Returns a bytes object."); + +#define OS_READ_METHODDEF \ + {"read", (PyCFunction)os_read, METH_VARARGS, os_read__doc__}, + +static PyObject * +os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length); + +static PyObject * +os_read(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + Py_ssize_t length; + + if (!PyArg_ParseTuple(args, + "in:read", + &fd, &length)) + goto exit; + return_value = os_read_impl(module, fd, length); + +exit: + return return_value; +} + +#if defined(HAVE_READV) + +PyDoc_STRVAR(os_readv__doc__, +"readv($module, fd, buffers, /)\n" +"--\n" +"\n" +"Read from a file descriptor fd into an iterable of buffers.\n" +"\n" +"The buffers should be mutable buffers accepting bytes.\n" +"readv will transfer data into each buffer until it is full\n" +"and then move on to the next buffer in the sequence to hold\n" +"the rest of the data.\n" +"\n" +"readv returns the total number of bytes read,\n" +"which may be less than the total capacity of all the buffers."); + +#define OS_READV_METHODDEF \ + {"readv", (PyCFunction)os_readv, METH_VARARGS, os_readv__doc__}, + +static Py_ssize_t +os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers); + +static PyObject * +os_readv(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + PyObject *buffers; + Py_ssize_t _return_value; + + if (!PyArg_ParseTuple(args, + "iO:readv", + &fd, &buffers)) + goto exit; + _return_value = os_readv_impl(module, fd, buffers); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_READV) */ + +#if defined(HAVE_PREAD) + +PyDoc_STRVAR(os_pread__doc__, +"pread($module, fd, length, offset, /)\n" +"--\n" +"\n" +"Read a number of bytes from a file descriptor starting at a particular offset.\n" +"\n" +"Read length bytes from file descriptor fd, starting at offset bytes from\n" +"the beginning of the file. The file offset remains unchanged."); + +#define OS_PREAD_METHODDEF \ + {"pread", (PyCFunction)os_pread, METH_VARARGS, os_pread__doc__}, + +static PyObject * +os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset); + +static PyObject * +os_pread(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int length; + Py_off_t offset; + + if (!PyArg_ParseTuple(args, + "iiO&:pread", + &fd, &length, Py_off_t_converter, &offset)) + goto exit; + return_value = os_pread_impl(module, fd, length, offset); + +exit: + return return_value; +} + +#endif /* defined(HAVE_PREAD) */ + +PyDoc_STRVAR(os_write__doc__, +"write($module, fd, data, /)\n" +"--\n" +"\n" +"Write a bytes object to a file descriptor."); + +#define OS_WRITE_METHODDEF \ + {"write", (PyCFunction)os_write, METH_VARARGS, os_write__doc__}, + +static Py_ssize_t +os_write_impl(PyModuleDef *module, int fd, Py_buffer *data); + +static PyObject * +os_write(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + Py_buffer data = {NULL, NULL}; + Py_ssize_t _return_value; + + if (!PyArg_ParseTuple(args, + "iy*:write", + &fd, &data)) + goto exit; + _return_value = os_write_impl(module, fd, &data); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(os_fstat__doc__, +"fstat($module, /, fd)\n" +"--\n" +"\n" +"Perform a stat system call on the given file descriptor.\n" +"\n" +"Like stat(), but for an open file descriptor.\n" +"Equivalent to os.stat(fd)."); + +#define OS_FSTAT_METHODDEF \ + {"fstat", (PyCFunction)os_fstat, METH_VARARGS|METH_KEYWORDS, os_fstat__doc__}, + +static PyObject * +os_fstat_impl(PyModuleDef *module, int fd); + +static PyObject * +os_fstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; + int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:fstat", _keywords, + &fd)) + goto exit; + return_value = os_fstat_impl(module, fd); + +exit: + return return_value; +} + +PyDoc_STRVAR(os_isatty__doc__, +"isatty($module, fd, /)\n" +"--\n" +"\n" +"Return True if the fd is connected to a terminal.\n" +"\n" +"Return True if the file descriptor is an open file descriptor\n" +"connected to the slave end of a terminal."); + +#define OS_ISATTY_METHODDEF \ + {"isatty", (PyCFunction)os_isatty, METH_VARARGS, os_isatty__doc__}, + +static int +os_isatty_impl(PyModuleDef *module, int fd); + +static PyObject * +os_isatty(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int _return_value; + + if (!PyArg_ParseTuple(args, + "i:isatty", + &fd)) + goto exit; + _return_value = os_isatty_impl(module, fd); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} + +#if defined(HAVE_PIPE) + +PyDoc_STRVAR(os_pipe__doc__, +"pipe($module, /)\n" +"--\n" +"\n" +"Create a pipe.\n" +"\n" +"Returns a tuple of two file descriptors:\n" +" (read_fd, write_fd)"); + +#define OS_PIPE_METHODDEF \ + {"pipe", (PyCFunction)os_pipe, METH_NOARGS, os_pipe__doc__}, + +static PyObject * +os_pipe_impl(PyModuleDef *module); + +static PyObject * +os_pipe(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_pipe_impl(module); +} + +#endif /* defined(HAVE_PIPE) */ + +#if defined(HAVE_PIPE2) + +PyDoc_STRVAR(os_pipe2__doc__, +"pipe2($module, flags, /)\n" +"--\n" +"\n" +"Create a pipe with flags set atomically.\n" +"\n" +"Returns a tuple of two file descriptors:\n" +" (read_fd, write_fd)\n" +"\n" +"flags can be constructed by ORing together one or more of these values:\n" +"O_NONBLOCK, O_CLOEXEC."); + +#define OS_PIPE2_METHODDEF \ + {"pipe2", (PyCFunction)os_pipe2, METH_VARARGS, os_pipe2__doc__}, + +static PyObject * +os_pipe2_impl(PyModuleDef *module, int flags); + +static PyObject * +os_pipe2(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int flags; + + if (!PyArg_ParseTuple(args, + "i:pipe2", + &flags)) + goto exit; + return_value = os_pipe2_impl(module, flags); + +exit: + return return_value; +} + +#endif /* defined(HAVE_PIPE2) */ + +#if defined(HAVE_WRITEV) + +PyDoc_STRVAR(os_writev__doc__, +"writev($module, fd, buffers, /)\n" +"--\n" +"\n" +"Iterate over buffers, and write the contents of each to a file descriptor.\n" +"\n" +"Returns the total number of bytes written.\n" +"buffers must be a sequence of bytes-like objects."); + +#define OS_WRITEV_METHODDEF \ + {"writev", (PyCFunction)os_writev, METH_VARARGS, os_writev__doc__}, + +static Py_ssize_t +os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers); + +static PyObject * +os_writev(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + PyObject *buffers; + Py_ssize_t _return_value; + + if (!PyArg_ParseTuple(args, + "iO:writev", + &fd, &buffers)) + goto exit; + _return_value = os_writev_impl(module, fd, buffers); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_WRITEV) */ + +#if defined(HAVE_PWRITE) + +PyDoc_STRVAR(os_pwrite__doc__, +"pwrite($module, fd, buffer, offset, /)\n" +"--\n" +"\n" +"Write bytes to a file descriptor starting at a particular offset.\n" +"\n" +"Write buffer to fd, starting at offset bytes from the beginning of\n" +"the file. Returns the number of bytes writte. Does not change the\n" +"current file offset."); + +#define OS_PWRITE_METHODDEF \ + {"pwrite", (PyCFunction)os_pwrite, METH_VARARGS, os_pwrite__doc__}, + +static Py_ssize_t +os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, Py_off_t offset); + +static PyObject * +os_pwrite(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + Py_buffer buffer = {NULL, NULL}; + Py_off_t offset; + Py_ssize_t _return_value; + + if (!PyArg_ParseTuple(args, + "iy*O&:pwrite", + &fd, &buffer, Py_off_t_converter, &offset)) + goto exit; + _return_value = os_pwrite_impl(module, fd, &buffer, offset); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +#endif /* defined(HAVE_PWRITE) */ + +#if defined(HAVE_MKFIFO) + +PyDoc_STRVAR(os_mkfifo__doc__, +"mkfifo($module, /, path, mode=438, *, dir_fd=None)\n" +"--\n" +"\n" +"Create a \"fifo\" (a POSIX named pipe).\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_MKFIFO_METHODDEF \ + {"mkfifo", (PyCFunction)os_mkfifo, METH_VARARGS|METH_KEYWORDS, os_mkfifo__doc__}, + +static PyObject * +os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); + +static PyObject * +os_mkfifo(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("mkfifo", "path", 0, 0); + int mode = 438; + int dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|i$O&:mkfifo", _keywords, + path_converter, &path, &mode, MKFIFOAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_mkfifo_impl(module, &path, mode, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(HAVE_MKFIFO) */ + +#if (defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV)) + +PyDoc_STRVAR(os_mknod__doc__, +"mknod($module, /, path, mode=384, device=0, *, dir_fd=None)\n" +"--\n" +"\n" +"Create a node in the file system.\n" +"\n" +"Create a node in the file system (file, device special file or named pipe)\n" +"at path. mode specifies both the permissions to use and the\n" +"type of node to be created, being combined (bitwise OR) with one of\n" +"S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. If S_IFCHR or S_IFBLK is set on mode,\n" +"device defines the newly created device special file (probably using\n" +"os.makedev()). Otherwise device is ignored.\n" +"\n" +"If dir_fd is not None, it should be a file descriptor open to a directory,\n" +" and path should be relative; path will then be relative to that directory.\n" +"dir_fd may not be implemented on your platform.\n" +" If it is unavailable, using it will raise a NotImplementedError."); + +#define OS_MKNOD_METHODDEF \ + {"mknod", (PyCFunction)os_mknod, METH_VARARGS|METH_KEYWORDS, os_mknod__doc__}, + +static PyObject * +os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, int dir_fd); + +static PyObject * +os_mknod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "mode", "device", "dir_fd", NULL}; + path_t path = PATH_T_INITIALIZE("mknod", "path", 0, 0); + int mode = 384; + dev_t device = 0; + int dir_fd = DEFAULT_DIR_FD; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&|iO&$O&:mknod", _keywords, + path_converter, &path, &mode, _Py_Dev_Converter, &device, MKNODAT_DIR_FD_CONVERTER, &dir_fd)) + goto exit; + return_value = os_mknod_impl(module, &path, mode, device, dir_fd); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* (defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV)) */ + +#if defined(HAVE_DEVICE_MACROS) + +PyDoc_STRVAR(os_major__doc__, +"major($module, device, /)\n" +"--\n" +"\n" +"Extracts a device major number from a raw device number."); + +#define OS_MAJOR_METHODDEF \ + {"major", (PyCFunction)os_major, METH_VARARGS, os_major__doc__}, + +static unsigned int +os_major_impl(PyModuleDef *module, dev_t device); + +static PyObject * +os_major(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + dev_t device; + unsigned int _return_value; + + if (!PyArg_ParseTuple(args, + "O&:major", + _Py_Dev_Converter, &device)) + goto exit; + _return_value = os_major_impl(module, device); + if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + +PyDoc_STRVAR(os_minor__doc__, +"minor($module, device, /)\n" +"--\n" +"\n" +"Extracts a device minor number from a raw device number."); + +#define OS_MINOR_METHODDEF \ + {"minor", (PyCFunction)os_minor, METH_VARARGS, os_minor__doc__}, + +static unsigned int +os_minor_impl(PyModuleDef *module, dev_t device); + +static PyObject * +os_minor(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + dev_t device; + unsigned int _return_value; + + if (!PyArg_ParseTuple(args, + "O&:minor", + _Py_Dev_Converter, &device)) + goto exit; + _return_value = os_minor_impl(module, device); + if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + +PyDoc_STRVAR(os_makedev__doc__, +"makedev($module, major, minor, /)\n" +"--\n" +"\n" +"Composes a raw device number from the major and minor device numbers."); + +#define OS_MAKEDEV_METHODDEF \ + {"makedev", (PyCFunction)os_makedev, METH_VARARGS, os_makedev__doc__}, + +static dev_t +os_makedev_impl(PyModuleDef *module, int major, int minor); + +static PyObject * +os_makedev(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int major; + int minor; + dev_t _return_value; + + if (!PyArg_ParseTuple(args, + "ii:makedev", + &major, &minor)) + goto exit; + _return_value = os_makedev_impl(module, major, minor); + if ((_return_value == (dev_t)-1) && PyErr_Occurred()) + goto exit; + return_value = _PyLong_FromDev(_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_FTRUNCATE) + +PyDoc_STRVAR(os_ftruncate__doc__, +"ftruncate($module, fd, length, /)\n" +"--\n" +"\n" +"Truncate a file, specified by file descriptor, to a specific length."); + +#define OS_FTRUNCATE_METHODDEF \ + {"ftruncate", (PyCFunction)os_ftruncate, METH_VARARGS, os_ftruncate__doc__}, + +static PyObject * +os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length); + +static PyObject * +os_ftruncate(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + Py_off_t length; + + if (!PyArg_ParseTuple(args, + "iO&:ftruncate", + &fd, Py_off_t_converter, &length)) + goto exit; + return_value = os_ftruncate_impl(module, fd, length); + +exit: + return return_value; +} + +#endif /* defined(HAVE_FTRUNCATE) */ + +#if defined(HAVE_TRUNCATE) + +PyDoc_STRVAR(os_truncate__doc__, +"truncate($module, /, path, length)\n" +"--\n" +"\n" +"Truncate a file, specified by path, to a specific length.\n" +"\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception."); + +#define OS_TRUNCATE_METHODDEF \ + {"truncate", (PyCFunction)os_truncate, METH_VARARGS|METH_KEYWORDS, os_truncate__doc__}, + +static PyObject * +os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length); + +static PyObject * +os_truncate(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "length", NULL}; + path_t path = PATH_T_INITIALIZE("truncate", "path", 0, PATH_HAVE_FTRUNCATE); + Py_off_t length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&:truncate", _keywords, + path_converter, &path, Py_off_t_converter, &length)) + goto exit; + return_value = os_truncate_impl(module, &path, length); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(HAVE_TRUNCATE) */ + +#if (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG)) + +PyDoc_STRVAR(os_posix_fallocate__doc__, +"posix_fallocate($module, fd, offset, length, /)\n" +"--\n" +"\n" +"Ensure a file has allocated at least a particular number of bytes on disk.\n" +"\n" +"Ensure that the file specified by fd encompasses a range of bytes\n" +"starting at offset bytes from the beginning and continuing for length bytes."); + +#define OS_POSIX_FALLOCATE_METHODDEF \ + {"posix_fallocate", (PyCFunction)os_posix_fallocate, METH_VARARGS, os_posix_fallocate__doc__}, + +static PyObject * +os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length); + +static PyObject * +os_posix_fallocate(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + Py_off_t offset; + Py_off_t length; + + if (!PyArg_ParseTuple(args, + "iO&O&:posix_fallocate", + &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length)) + goto exit; + return_value = os_posix_fallocate_impl(module, fd, offset, length); + +exit: + return return_value; +} + +#endif /* (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG)) */ + +#if (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) + +PyDoc_STRVAR(os_posix_fadvise__doc__, +"posix_fadvise($module, fd, offset, length, advice, /)\n" +"--\n" +"\n" +"Announce an intention to access data in a specific pattern.\n" +"\n" +"Announce an intention to access data in a specific pattern, thus allowing\n" +"the kernel to make optimizations.\n" +"The advice applies to the region of the file specified by fd starting at\n" +"offset and continuing for length bytes.\n" +"advice is one of POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL,\n" +"POSIX_FADV_RANDOM, POSIX_FADV_NOREUSE, POSIX_FADV_WILLNEED, or\n" +"POSIX_FADV_DONTNEED."); + +#define OS_POSIX_FADVISE_METHODDEF \ + {"posix_fadvise", (PyCFunction)os_posix_fadvise, METH_VARARGS, os_posix_fadvise__doc__}, + +static PyObject * +os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length, int advice); + +static PyObject * +os_posix_fadvise(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + Py_off_t offset; + Py_off_t length; + int advice; + + if (!PyArg_ParseTuple(args, + "iO&O&i:posix_fadvise", + &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length, &advice)) + goto exit; + return_value = os_posix_fadvise_impl(module, fd, offset, length, advice); + +exit: + return return_value; +} + +#endif /* (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) */ + +#if defined(HAVE_PUTENV) && defined(MS_WINDOWS) + +PyDoc_STRVAR(os_putenv__doc__, +"putenv($module, name, value, /)\n" +"--\n" +"\n" +"Change or add an environment variable."); + +#define OS_PUTENV_METHODDEF \ + {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, + +static PyObject * +os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); + +static PyObject * +os_putenv(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *name; + PyObject *value; + + if (!PyArg_ParseTuple(args, + "UU:putenv", + &name, &value)) + goto exit; + return_value = os_putenv_impl(module, name, value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_PUTENV) && defined(MS_WINDOWS) */ + +#if defined(HAVE_PUTENV) && !defined(MS_WINDOWS) + +PyDoc_STRVAR(os_putenv__doc__, +"putenv($module, name, value, /)\n" +"--\n" +"\n" +"Change or add an environment variable."); + +#define OS_PUTENV_METHODDEF \ + {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, + +static PyObject * +os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); + +static PyObject * +os_putenv(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *name = NULL; + PyObject *value = NULL; + + if (!PyArg_ParseTuple(args, + "O&O&:putenv", + PyUnicode_FSConverter, &name, PyUnicode_FSConverter, &value)) + goto exit; + return_value = os_putenv_impl(module, name, value); + +exit: + /* Cleanup for name */ + Py_XDECREF(name); + /* Cleanup for value */ + Py_XDECREF(value); + + return return_value; +} + +#endif /* defined(HAVE_PUTENV) && !defined(MS_WINDOWS) */ + +#if defined(HAVE_UNSETENV) + +PyDoc_STRVAR(os_unsetenv__doc__, +"unsetenv($module, name, /)\n" +"--\n" +"\n" +"Delete an environment variable."); + +#define OS_UNSETENV_METHODDEF \ + {"unsetenv", (PyCFunction)os_unsetenv, METH_VARARGS, os_unsetenv__doc__}, + +static PyObject * +os_unsetenv_impl(PyModuleDef *module, PyObject *name); + +static PyObject * +os_unsetenv(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *name = NULL; + + if (!PyArg_ParseTuple(args, + "O&:unsetenv", + PyUnicode_FSConverter, &name)) + goto exit; + return_value = os_unsetenv_impl(module, name); + +exit: + /* Cleanup for name */ + Py_XDECREF(name); + + return return_value; +} + +#endif /* defined(HAVE_UNSETENV) */ + +PyDoc_STRVAR(os_strerror__doc__, +"strerror($module, code, /)\n" +"--\n" +"\n" +"Translate an error code to a message string."); + +#define OS_STRERROR_METHODDEF \ + {"strerror", (PyCFunction)os_strerror, METH_VARARGS, os_strerror__doc__}, + +static PyObject * +os_strerror_impl(PyModuleDef *module, int code); + +static PyObject * +os_strerror(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int code; + + if (!PyArg_ParseTuple(args, + "i:strerror", + &code)) + goto exit; + return_value = os_strerror_impl(module, code); + +exit: + return return_value; +} + +#if defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) + +PyDoc_STRVAR(os_WCOREDUMP__doc__, +"WCOREDUMP($module, status, /)\n" +"--\n" +"\n" +"Return True if the process returning status was dumped to a core file."); + +#define OS_WCOREDUMP_METHODDEF \ + {"WCOREDUMP", (PyCFunction)os_WCOREDUMP, METH_VARARGS, os_WCOREDUMP__doc__}, + +static int +os_WCOREDUMP_impl(PyModuleDef *module, int status); + +static PyObject * +os_WCOREDUMP(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int status; + int _return_value; + + if (!PyArg_ParseTuple(args, + "i:WCOREDUMP", + &status)) + goto exit; + _return_value = os_WCOREDUMP_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) */ + +#if defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) + +PyDoc_STRVAR(os_WIFCONTINUED__doc__, +"WIFCONTINUED($module, /, status)\n" +"--\n" +"\n" +"Return True if a particular process was continued from a job control stop.\n" +"\n" +"Return True if the process returning status was continued from a\n" +"job control stop."); + +#define OS_WIFCONTINUED_METHODDEF \ + {"WIFCONTINUED", (PyCFunction)os_WIFCONTINUED, METH_VARARGS|METH_KEYWORDS, os_WIFCONTINUED__doc__}, + +static int +os_WIFCONTINUED_impl(PyModuleDef *module, int status); + +static PyObject * +os_WIFCONTINUED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WIFCONTINUED", _keywords, + &status)) + goto exit; + _return_value = os_WIFCONTINUED_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) */ + +#if defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) + +PyDoc_STRVAR(os_WIFSTOPPED__doc__, +"WIFSTOPPED($module, /, status)\n" +"--\n" +"\n" +"Return True if the process returning status was stopped."); + +#define OS_WIFSTOPPED_METHODDEF \ + {"WIFSTOPPED", (PyCFunction)os_WIFSTOPPED, METH_VARARGS|METH_KEYWORDS, os_WIFSTOPPED__doc__}, + +static int +os_WIFSTOPPED_impl(PyModuleDef *module, int status); + +static PyObject * +os_WIFSTOPPED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WIFSTOPPED", _keywords, + &status)) + goto exit; + _return_value = os_WIFSTOPPED_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) */ + +#if defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) + +PyDoc_STRVAR(os_WIFSIGNALED__doc__, +"WIFSIGNALED($module, /, status)\n" +"--\n" +"\n" +"Return True if the process returning status was terminated by a signal."); + +#define OS_WIFSIGNALED_METHODDEF \ + {"WIFSIGNALED", (PyCFunction)os_WIFSIGNALED, METH_VARARGS|METH_KEYWORDS, os_WIFSIGNALED__doc__}, + +static int +os_WIFSIGNALED_impl(PyModuleDef *module, int status); + +static PyObject * +os_WIFSIGNALED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WIFSIGNALED", _keywords, + &status)) + goto exit; + _return_value = os_WIFSIGNALED_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) */ + +#if defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) + +PyDoc_STRVAR(os_WIFEXITED__doc__, +"WIFEXITED($module, /, status)\n" +"--\n" +"\n" +"Return True if the process returning status exited via the exit() system call."); + +#define OS_WIFEXITED_METHODDEF \ + {"WIFEXITED", (PyCFunction)os_WIFEXITED, METH_VARARGS|METH_KEYWORDS, os_WIFEXITED__doc__}, + +static int +os_WIFEXITED_impl(PyModuleDef *module, int status); + +static PyObject * +os_WIFEXITED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WIFEXITED", _keywords, + &status)) + goto exit; + _return_value = os_WIFEXITED_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) */ + +#if defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) + +PyDoc_STRVAR(os_WEXITSTATUS__doc__, +"WEXITSTATUS($module, /, status)\n" +"--\n" +"\n" +"Return the process return code from status."); + +#define OS_WEXITSTATUS_METHODDEF \ + {"WEXITSTATUS", (PyCFunction)os_WEXITSTATUS, METH_VARARGS|METH_KEYWORDS, os_WEXITSTATUS__doc__}, + +static int +os_WEXITSTATUS_impl(PyModuleDef *module, int status); + +static PyObject * +os_WEXITSTATUS(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WEXITSTATUS", _keywords, + &status)) + goto exit; + _return_value = os_WEXITSTATUS_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) */ + +#if defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) + +PyDoc_STRVAR(os_WTERMSIG__doc__, +"WTERMSIG($module, /, status)\n" +"--\n" +"\n" +"Return the signal that terminated the process that provided the status value."); + +#define OS_WTERMSIG_METHODDEF \ + {"WTERMSIG", (PyCFunction)os_WTERMSIG, METH_VARARGS|METH_KEYWORDS, os_WTERMSIG__doc__}, + +static int +os_WTERMSIG_impl(PyModuleDef *module, int status); + +static PyObject * +os_WTERMSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WTERMSIG", _keywords, + &status)) + goto exit; + _return_value = os_WTERMSIG_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) */ + +#if defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) + +PyDoc_STRVAR(os_WSTOPSIG__doc__, +"WSTOPSIG($module, /, status)\n" +"--\n" +"\n" +"Return the signal that stopped the process that provided the status value."); + +#define OS_WSTOPSIG_METHODDEF \ + {"WSTOPSIG", (PyCFunction)os_WSTOPSIG, METH_VARARGS|METH_KEYWORDS, os_WSTOPSIG__doc__}, + +static int +os_WSTOPSIG_impl(PyModuleDef *module, int status); + +static PyObject * +os_WSTOPSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"status", NULL}; + int status; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:WSTOPSIG", _keywords, + &status)) + goto exit; + _return_value = os_WSTOPSIG_impl(module, status); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) */ + +#if (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) + +PyDoc_STRVAR(os_fstatvfs__doc__, +"fstatvfs($module, fd, /)\n" +"--\n" +"\n" +"Perform an fstatvfs system call on the given fd.\n" +"\n" +"Equivalent to statvfs(fd)."); + +#define OS_FSTATVFS_METHODDEF \ + {"fstatvfs", (PyCFunction)os_fstatvfs, METH_VARARGS, os_fstatvfs__doc__}, + +static PyObject * +os_fstatvfs_impl(PyModuleDef *module, int fd); + +static PyObject * +os_fstatvfs(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + + if (!PyArg_ParseTuple(args, + "i:fstatvfs", + &fd)) + goto exit; + return_value = os_fstatvfs_impl(module, fd); + +exit: + return return_value; +} + +#endif /* (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) */ + +#if (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) + +PyDoc_STRVAR(os_statvfs__doc__, +"statvfs($module, /, path)\n" +"--\n" +"\n" +"Perform a statvfs system call on the given path.\n" +"\n" +"path may always be specified as a string.\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception."); + +#define OS_STATVFS_METHODDEF \ + {"statvfs", (PyCFunction)os_statvfs, METH_VARARGS|METH_KEYWORDS, os_statvfs__doc__}, + +static PyObject * +os_statvfs_impl(PyModuleDef *module, path_t *path); + +static PyObject * +os_statvfs(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + path_t path = PATH_T_INITIALIZE("statvfs", "path", 0, PATH_HAVE_FSTATVFS); + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&:statvfs", _keywords, + path_converter, &path)) + goto exit; + return_value = os_statvfs_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(os__getdiskusage__doc__, +"_getdiskusage($module, /, path)\n" +"--\n" +"\n" +"Return disk usage statistics about the given path as a (total, free) tuple."); + +#define OS__GETDISKUSAGE_METHODDEF \ + {"_getdiskusage", (PyCFunction)os__getdiskusage, METH_VARARGS|METH_KEYWORDS, os__getdiskusage__doc__}, + +static PyObject * +os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path); + +static PyObject * +os__getdiskusage(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + Py_UNICODE *path; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "u:_getdiskusage", _keywords, + &path)) + goto exit; + return_value = os__getdiskusage_impl(module, path); + +exit: + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(HAVE_FPATHCONF) + +PyDoc_STRVAR(os_fpathconf__doc__, +"fpathconf($module, fd, name, /)\n" +"--\n" +"\n" +"Return the configuration limit name for the file descriptor fd.\n" +"\n" +"If there is no limit, return -1."); + +#define OS_FPATHCONF_METHODDEF \ + {"fpathconf", (PyCFunction)os_fpathconf, METH_VARARGS, os_fpathconf__doc__}, + +static long +os_fpathconf_impl(PyModuleDef *module, int fd, int name); + +static PyObject * +os_fpathconf(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int name; + long _return_value; + + if (!PyArg_ParseTuple(args, + "iO&:fpathconf", + &fd, conv_path_confname, &name)) + goto exit; + _return_value = os_fpathconf_impl(module, fd, name); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_FPATHCONF) */ + +#if defined(HAVE_PATHCONF) + +PyDoc_STRVAR(os_pathconf__doc__, +"pathconf($module, /, path, name)\n" +"--\n" +"\n" +"Return the configuration limit name for the file or directory path.\n" +"\n" +"If there is no limit, return -1.\n" +"On some platforms, path may also be specified as an open file descriptor.\n" +" If this functionality is unavailable, using it raises an exception."); + +#define OS_PATHCONF_METHODDEF \ + {"pathconf", (PyCFunction)os_pathconf, METH_VARARGS|METH_KEYWORDS, os_pathconf__doc__}, + +static long +os_pathconf_impl(PyModuleDef *module, path_t *path, int name); + +static PyObject * +os_pathconf(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "name", NULL}; + path_t path = PATH_T_INITIALIZE("pathconf", "path", 0, PATH_HAVE_FPATHCONF); + int name; + long _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&:pathconf", _keywords, + path_converter, &path, conv_path_confname, &name)) + goto exit; + _return_value = os_pathconf_impl(module, &path, name); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(HAVE_PATHCONF) */ + +#if defined(HAVE_CONFSTR) + +PyDoc_STRVAR(os_confstr__doc__, +"confstr($module, name, /)\n" +"--\n" +"\n" +"Return a string-valued system configuration variable."); + +#define OS_CONFSTR_METHODDEF \ + {"confstr", (PyCFunction)os_confstr, METH_VARARGS, os_confstr__doc__}, + +static PyObject * +os_confstr_impl(PyModuleDef *module, int name); + +static PyObject * +os_confstr(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int name; + + if (!PyArg_ParseTuple(args, + "O&:confstr", + conv_confstr_confname, &name)) + goto exit; + return_value = os_confstr_impl(module, name); + +exit: + return return_value; +} + +#endif /* defined(HAVE_CONFSTR) */ + +#if defined(HAVE_SYSCONF) + +PyDoc_STRVAR(os_sysconf__doc__, +"sysconf($module, name, /)\n" +"--\n" +"\n" +"Return an integer-valued system configuration variable."); + +#define OS_SYSCONF_METHODDEF \ + {"sysconf", (PyCFunction)os_sysconf, METH_VARARGS, os_sysconf__doc__}, + +static long +os_sysconf_impl(PyModuleDef *module, int name); + +static PyObject * +os_sysconf(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int name; + long _return_value; + + if (!PyArg_ParseTuple(args, + "O&:sysconf", + conv_sysconf_confname, &name)) + goto exit; + _return_value = os_sysconf_impl(module, name); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SYSCONF) */ + +PyDoc_STRVAR(os_abort__doc__, +"abort($module, /)\n" +"--\n" +"\n" +"Abort the interpreter immediately.\n" +"\n" +"This function \'dumps core\' or otherwise fails in the hardest way possible\n" +"on the hosting operating system. This function never returns."); + +#define OS_ABORT_METHODDEF \ + {"abort", (PyCFunction)os_abort, METH_NOARGS, os_abort__doc__}, + +static PyObject * +os_abort_impl(PyModuleDef *module); + +static PyObject * +os_abort(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_abort_impl(module); +} + +#if defined(HAVE_GETLOADAVG) + +PyDoc_STRVAR(os_getloadavg__doc__, +"getloadavg($module, /)\n" +"--\n" +"\n" +"Return average recent system load information.\n" +"\n" +"Return the number of processes in the system run queue averaged over\n" +"the last 1, 5, and 15 minutes as a tuple of three floats.\n" +"Raises OSError if the load average was unobtainable."); + +#define OS_GETLOADAVG_METHODDEF \ + {"getloadavg", (PyCFunction)os_getloadavg, METH_NOARGS, os_getloadavg__doc__}, + +static PyObject * +os_getloadavg_impl(PyModuleDef *module); + +static PyObject * +os_getloadavg(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getloadavg_impl(module); +} + +#endif /* defined(HAVE_GETLOADAVG) */ + +PyDoc_STRVAR(os_device_encoding__doc__, +"device_encoding($module, /, fd)\n" +"--\n" +"\n" +"Return a string describing the encoding of a terminal\'s file descriptor.\n" +"\n" +"The file descriptor must be attached to a terminal.\n" +"If the device is not a terminal, return None."); + +#define OS_DEVICE_ENCODING_METHODDEF \ + {"device_encoding", (PyCFunction)os_device_encoding, METH_VARARGS|METH_KEYWORDS, os_device_encoding__doc__}, + +static PyObject * +os_device_encoding_impl(PyModuleDef *module, int fd); + +static PyObject * +os_device_encoding(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"fd", NULL}; + int fd; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "i:device_encoding", _keywords, + &fd)) + goto exit; + return_value = os_device_encoding_impl(module, fd); + +exit: + return return_value; +} + +#if defined(HAVE_SETRESUID) + +PyDoc_STRVAR(os_setresuid__doc__, +"setresuid($module, ruid, euid, suid, /)\n" +"--\n" +"\n" +"Set the current process\'s real, effective, and saved user ids."); + +#define OS_SETRESUID_METHODDEF \ + {"setresuid", (PyCFunction)os_setresuid, METH_VARARGS, os_setresuid__doc__}, + +static PyObject * +os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid); + +static PyObject * +os_setresuid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + uid_t ruid; + uid_t euid; + uid_t suid; + + if (!PyArg_ParseTuple(args, + "O&O&O&:setresuid", + _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid, _Py_Uid_Converter, &suid)) + goto exit; + return_value = os_setresuid_impl(module, ruid, euid, suid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETRESUID) */ + +#if defined(HAVE_SETRESGID) + +PyDoc_STRVAR(os_setresgid__doc__, +"setresgid($module, rgid, egid, sgid, /)\n" +"--\n" +"\n" +"Set the current process\'s real, effective, and saved group ids."); + +#define OS_SETRESGID_METHODDEF \ + {"setresgid", (PyCFunction)os_setresgid, METH_VARARGS, os_setresgid__doc__}, + +static PyObject * +os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid); + +static PyObject * +os_setresgid(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + gid_t rgid; + gid_t egid; + gid_t sgid; + + if (!PyArg_ParseTuple(args, + "O&O&O&:setresgid", + _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid, _Py_Gid_Converter, &sgid)) + goto exit; + return_value = os_setresgid_impl(module, rgid, egid, sgid); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETRESGID) */ + +#if defined(HAVE_GETRESUID) + +PyDoc_STRVAR(os_getresuid__doc__, +"getresuid($module, /)\n" +"--\n" +"\n" +"Return a tuple of the current process\'s real, effective, and saved user ids."); + +#define OS_GETRESUID_METHODDEF \ + {"getresuid", (PyCFunction)os_getresuid, METH_NOARGS, os_getresuid__doc__}, + +static PyObject * +os_getresuid_impl(PyModuleDef *module); + +static PyObject * +os_getresuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getresuid_impl(module); +} + +#endif /* defined(HAVE_GETRESUID) */ + +#if defined(HAVE_GETRESGID) + +PyDoc_STRVAR(os_getresgid__doc__, +"getresgid($module, /)\n" +"--\n" +"\n" +"Return a tuple of the current process\'s real, effective, and saved group ids."); + +#define OS_GETRESGID_METHODDEF \ + {"getresgid", (PyCFunction)os_getresgid, METH_NOARGS, os_getresgid__doc__}, + +static PyObject * +os_getresgid_impl(PyModuleDef *module); + +static PyObject * +os_getresgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_getresgid_impl(module); +} + +#endif /* defined(HAVE_GETRESGID) */ + +#if defined(USE_XATTRS) + +PyDoc_STRVAR(os_getxattr__doc__, +"getxattr($module, /, path, attribute, *, follow_symlinks=True)\n" +"--\n" +"\n" +"Return the value of extended attribute attribute on path.\n" +"\n" +"path may be either a string or an open file descriptor.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, getxattr will examine the symbolic link itself instead of the file\n" +" the link points to."); + +#define OS_GETXATTR_METHODDEF \ + {"getxattr", (PyCFunction)os_getxattr, METH_VARARGS|METH_KEYWORDS, os_getxattr__doc__}, + +static PyObject * +os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks); + +static PyObject * +os_getxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("getxattr", "path", 0, 1); + path_t attribute = PATH_T_INITIALIZE("getxattr", "attribute", 0, 0); + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|$p:getxattr", _keywords, + path_converter, &path, path_converter, &attribute, &follow_symlinks)) + goto exit; + return_value = os_getxattr_impl(module, &path, &attribute, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + /* Cleanup for attribute */ + path_cleanup(&attribute); + + return return_value; +} + +#endif /* defined(USE_XATTRS) */ + +#if defined(USE_XATTRS) + +PyDoc_STRVAR(os_setxattr__doc__, +"setxattr($module, /, path, attribute, value, flags=0, *,\n" +" follow_symlinks=True)\n" +"--\n" +"\n" +"Set extended attribute attribute on path to value.\n" +"\n" +"path may be either a string or an open file descriptor.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, setxattr will modify the symbolic link itself instead of the file\n" +" the link points to."); + +#define OS_SETXATTR_METHODDEF \ + {"setxattr", (PyCFunction)os_setxattr, METH_VARARGS|METH_KEYWORDS, os_setxattr__doc__}, + +static PyObject * +os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks); + +static PyObject * +os_setxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "attribute", "value", "flags", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("setxattr", "path", 0, 1); + path_t attribute = PATH_T_INITIALIZE("setxattr", "attribute", 0, 0); + Py_buffer value = {NULL, NULL}; + int flags = 0; + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&y*|i$p:setxattr", _keywords, + path_converter, &path, path_converter, &attribute, &value, &flags, &follow_symlinks)) + goto exit; + return_value = os_setxattr_impl(module, &path, &attribute, &value, flags, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + /* Cleanup for attribute */ + path_cleanup(&attribute); + /* Cleanup for value */ + if (value.obj) + PyBuffer_Release(&value); + + return return_value; +} + +#endif /* defined(USE_XATTRS) */ + +#if defined(USE_XATTRS) + +PyDoc_STRVAR(os_removexattr__doc__, +"removexattr($module, /, path, attribute, *, follow_symlinks=True)\n" +"--\n" +"\n" +"Remove extended attribute attribute on path.\n" +"\n" +"path may be either a string or an open file descriptor.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, removexattr will modify the symbolic link itself instead of the file\n" +" the link points to."); + +#define OS_REMOVEXATTR_METHODDEF \ + {"removexattr", (PyCFunction)os_removexattr, METH_VARARGS|METH_KEYWORDS, os_removexattr__doc__}, + +static PyObject * +os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks); + +static PyObject * +os_removexattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("removexattr", "path", 0, 1); + path_t attribute = PATH_T_INITIALIZE("removexattr", "attribute", 0, 0); + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O&O&|$p:removexattr", _keywords, + path_converter, &path, path_converter, &attribute, &follow_symlinks)) + goto exit; + return_value = os_removexattr_impl(module, &path, &attribute, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + /* Cleanup for attribute */ + path_cleanup(&attribute); + + return return_value; +} + +#endif /* defined(USE_XATTRS) */ + +#if defined(USE_XATTRS) + +PyDoc_STRVAR(os_listxattr__doc__, +"listxattr($module, /, path=None, *, follow_symlinks=True)\n" +"--\n" +"\n" +"Return a list of extended attributes on path.\n" +"\n" +"path may be either None, a string, or an open file descriptor.\n" +"if path is None, listxattr will examine the current directory.\n" +"If follow_symlinks is False, and the last element of the path is a symbolic\n" +" link, listxattr will examine the symbolic link itself instead of the file\n" +" the link points to."); + +#define OS_LISTXATTR_METHODDEF \ + {"listxattr", (PyCFunction)os_listxattr, METH_VARARGS|METH_KEYWORDS, os_listxattr__doc__}, + +static PyObject * +os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks); + +static PyObject * +os_listxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "follow_symlinks", NULL}; + path_t path = PATH_T_INITIALIZE("listxattr", "path", 1, 1); + int follow_symlinks = 1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O&$p:listxattr", _keywords, + path_converter, &path, &follow_symlinks)) + goto exit; + return_value = os_listxattr_impl(module, &path, follow_symlinks); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(USE_XATTRS) */ + +PyDoc_STRVAR(os_urandom__doc__, +"urandom($module, size, /)\n" +"--\n" +"\n" +"Return a bytes object containing random bytes suitable for cryptographic use."); + +#define OS_URANDOM_METHODDEF \ + {"urandom", (PyCFunction)os_urandom, METH_VARARGS, os_urandom__doc__}, + +static PyObject * +os_urandom_impl(PyModuleDef *module, Py_ssize_t size); + +static PyObject * +os_urandom(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t size; + + if (!PyArg_ParseTuple(args, + "n:urandom", + &size)) + goto exit; + return_value = os_urandom_impl(module, size); + +exit: + return return_value; +} + +PyDoc_STRVAR(os_cpu_count__doc__, +"cpu_count($module, /)\n" +"--\n" +"\n" +"Return the number of CPUs in the system; return None if indeterminable."); + +#define OS_CPU_COUNT_METHODDEF \ + {"cpu_count", (PyCFunction)os_cpu_count, METH_NOARGS, os_cpu_count__doc__}, + +static PyObject * +os_cpu_count_impl(PyModuleDef *module); + +static PyObject * +os_cpu_count(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return os_cpu_count_impl(module); +} + +PyDoc_STRVAR(os_get_inheritable__doc__, +"get_inheritable($module, fd, /)\n" +"--\n" +"\n" +"Get the close-on-exe flag of the specified file descriptor."); + +#define OS_GET_INHERITABLE_METHODDEF \ + {"get_inheritable", (PyCFunction)os_get_inheritable, METH_VARARGS, os_get_inheritable__doc__}, + +static int +os_get_inheritable_impl(PyModuleDef *module, int fd); + +static PyObject * +os_get_inheritable(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int _return_value; + + if (!PyArg_ParseTuple(args, + "i:get_inheritable", + &fd)) + goto exit; + _return_value = os_get_inheritable_impl(module, fd); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(os_set_inheritable__doc__, +"set_inheritable($module, fd, inheritable, /)\n" +"--\n" +"\n" +"Set the inheritable flag of the specified file descriptor."); + +#define OS_SET_INHERITABLE_METHODDEF \ + {"set_inheritable", (PyCFunction)os_set_inheritable, METH_VARARGS, os_set_inheritable__doc__}, + +static PyObject * +os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable); + +static PyObject * +os_set_inheritable(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int fd; + int inheritable; + + if (!PyArg_ParseTuple(args, + "ii:set_inheritable", + &fd, &inheritable)) + goto exit; + return_value = os_set_inheritable_impl(module, fd, inheritable); + +exit: + return return_value; +} + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(os_get_handle_inheritable__doc__, +"get_handle_inheritable($module, handle, /)\n" +"--\n" +"\n" +"Get the close-on-exe flag of the specified file descriptor."); + +#define OS_GET_HANDLE_INHERITABLE_METHODDEF \ + {"get_handle_inheritable", (PyCFunction)os_get_handle_inheritable, METH_VARARGS, os_get_handle_inheritable__doc__}, + +static int +os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle); + +static PyObject * +os_get_handle_inheritable(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_intptr_t handle; + int _return_value; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_INTPTR ":get_handle_inheritable", + &handle)) + goto exit; + _return_value = os_get_handle_inheritable_impl(module, handle); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(os_set_handle_inheritable__doc__, +"set_handle_inheritable($module, handle, inheritable, /)\n" +"--\n" +"\n" +"Set the inheritable flag of the specified handle."); + +#define OS_SET_HANDLE_INHERITABLE_METHODDEF \ + {"set_handle_inheritable", (PyCFunction)os_set_handle_inheritable, METH_VARARGS, os_set_handle_inheritable__doc__}, + +static PyObject * +os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, int inheritable); + +static PyObject * +os_set_handle_inheritable(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_intptr_t handle; + int inheritable; + + if (!PyArg_ParseTuple(args, + "" _Py_PARSE_INTPTR "p:set_handle_inheritable", + &handle, &inheritable)) + goto exit; + return_value = os_set_handle_inheritable_impl(module, handle, inheritable); + +exit: + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +#ifndef OS_TTYNAME_METHODDEF + #define OS_TTYNAME_METHODDEF +#endif /* !defined(OS_TTYNAME_METHODDEF) */ + +#ifndef OS_CTERMID_METHODDEF + #define OS_CTERMID_METHODDEF +#endif /* !defined(OS_CTERMID_METHODDEF) */ + +#ifndef OS_FCHDIR_METHODDEF + #define OS_FCHDIR_METHODDEF +#endif /* !defined(OS_FCHDIR_METHODDEF) */ + +#ifndef OS_FCHMOD_METHODDEF + #define OS_FCHMOD_METHODDEF +#endif /* !defined(OS_FCHMOD_METHODDEF) */ + +#ifndef OS_LCHMOD_METHODDEF + #define OS_LCHMOD_METHODDEF +#endif /* !defined(OS_LCHMOD_METHODDEF) */ + +#ifndef OS_CHFLAGS_METHODDEF + #define OS_CHFLAGS_METHODDEF +#endif /* !defined(OS_CHFLAGS_METHODDEF) */ + +#ifndef OS_LCHFLAGS_METHODDEF + #define OS_LCHFLAGS_METHODDEF +#endif /* !defined(OS_LCHFLAGS_METHODDEF) */ + +#ifndef OS_CHROOT_METHODDEF + #define OS_CHROOT_METHODDEF +#endif /* !defined(OS_CHROOT_METHODDEF) */ + +#ifndef OS_FSYNC_METHODDEF + #define OS_FSYNC_METHODDEF +#endif /* !defined(OS_FSYNC_METHODDEF) */ + +#ifndef OS_SYNC_METHODDEF + #define OS_SYNC_METHODDEF +#endif /* !defined(OS_SYNC_METHODDEF) */ + +#ifndef OS_FDATASYNC_METHODDEF + #define OS_FDATASYNC_METHODDEF +#endif /* !defined(OS_FDATASYNC_METHODDEF) */ + +#ifndef OS_CHOWN_METHODDEF + #define OS_CHOWN_METHODDEF +#endif /* !defined(OS_CHOWN_METHODDEF) */ + +#ifndef OS_FCHOWN_METHODDEF + #define OS_FCHOWN_METHODDEF +#endif /* !defined(OS_FCHOWN_METHODDEF) */ + +#ifndef OS_LCHOWN_METHODDEF + #define OS_LCHOWN_METHODDEF +#endif /* !defined(OS_LCHOWN_METHODDEF) */ + +#ifndef OS_LINK_METHODDEF + #define OS_LINK_METHODDEF +#endif /* !defined(OS_LINK_METHODDEF) */ + +#ifndef OS__GETFINALPATHNAME_METHODDEF + #define OS__GETFINALPATHNAME_METHODDEF +#endif /* !defined(OS__GETFINALPATHNAME_METHODDEF) */ + +#ifndef OS__GETVOLUMEPATHNAME_METHODDEF + #define OS__GETVOLUMEPATHNAME_METHODDEF +#endif /* !defined(OS__GETVOLUMEPATHNAME_METHODDEF) */ + +#ifndef OS_NICE_METHODDEF + #define OS_NICE_METHODDEF +#endif /* !defined(OS_NICE_METHODDEF) */ + +#ifndef OS_GETPRIORITY_METHODDEF + #define OS_GETPRIORITY_METHODDEF +#endif /* !defined(OS_GETPRIORITY_METHODDEF) */ + +#ifndef OS_SETPRIORITY_METHODDEF + #define OS_SETPRIORITY_METHODDEF +#endif /* !defined(OS_SETPRIORITY_METHODDEF) */ + +#ifndef OS_SYSTEM_METHODDEF + #define OS_SYSTEM_METHODDEF +#endif /* !defined(OS_SYSTEM_METHODDEF) */ + +#ifndef OS_UNAME_METHODDEF + #define OS_UNAME_METHODDEF +#endif /* !defined(OS_UNAME_METHODDEF) */ + +#ifndef OS_EXECV_METHODDEF + #define OS_EXECV_METHODDEF +#endif /* !defined(OS_EXECV_METHODDEF) */ + +#ifndef OS_EXECVE_METHODDEF + #define OS_EXECVE_METHODDEF +#endif /* !defined(OS_EXECVE_METHODDEF) */ + +#ifndef OS_SPAWNV_METHODDEF + #define OS_SPAWNV_METHODDEF +#endif /* !defined(OS_SPAWNV_METHODDEF) */ + +#ifndef OS_SPAWNVE_METHODDEF + #define OS_SPAWNVE_METHODDEF +#endif /* !defined(OS_SPAWNVE_METHODDEF) */ + +#ifndef OS_FORK1_METHODDEF + #define OS_FORK1_METHODDEF +#endif /* !defined(OS_FORK1_METHODDEF) */ + +#ifndef OS_FORK_METHODDEF + #define OS_FORK_METHODDEF +#endif /* !defined(OS_FORK_METHODDEF) */ + +#ifndef OS_SCHED_GET_PRIORITY_MAX_METHODDEF + #define OS_SCHED_GET_PRIORITY_MAX_METHODDEF +#endif /* !defined(OS_SCHED_GET_PRIORITY_MAX_METHODDEF) */ + +#ifndef OS_SCHED_GET_PRIORITY_MIN_METHODDEF + #define OS_SCHED_GET_PRIORITY_MIN_METHODDEF +#endif /* !defined(OS_SCHED_GET_PRIORITY_MIN_METHODDEF) */ + +#ifndef OS_SCHED_GETSCHEDULER_METHODDEF + #define OS_SCHED_GETSCHEDULER_METHODDEF +#endif /* !defined(OS_SCHED_GETSCHEDULER_METHODDEF) */ + +#ifndef OS_SCHED_SETSCHEDULER_METHODDEF + #define OS_SCHED_SETSCHEDULER_METHODDEF +#endif /* !defined(OS_SCHED_SETSCHEDULER_METHODDEF) */ + +#ifndef OS_SCHED_GETPARAM_METHODDEF + #define OS_SCHED_GETPARAM_METHODDEF +#endif /* !defined(OS_SCHED_GETPARAM_METHODDEF) */ + +#ifndef OS_SCHED_SETPARAM_METHODDEF + #define OS_SCHED_SETPARAM_METHODDEF +#endif /* !defined(OS_SCHED_SETPARAM_METHODDEF) */ + +#ifndef OS_SCHED_RR_GET_INTERVAL_METHODDEF + #define OS_SCHED_RR_GET_INTERVAL_METHODDEF +#endif /* !defined(OS_SCHED_RR_GET_INTERVAL_METHODDEF) */ + +#ifndef OS_SCHED_YIELD_METHODDEF + #define OS_SCHED_YIELD_METHODDEF +#endif /* !defined(OS_SCHED_YIELD_METHODDEF) */ + +#ifndef OS_SCHED_SETAFFINITY_METHODDEF + #define OS_SCHED_SETAFFINITY_METHODDEF +#endif /* !defined(OS_SCHED_SETAFFINITY_METHODDEF) */ + +#ifndef OS_SCHED_GETAFFINITY_METHODDEF + #define OS_SCHED_GETAFFINITY_METHODDEF +#endif /* !defined(OS_SCHED_GETAFFINITY_METHODDEF) */ + +#ifndef OS_OPENPTY_METHODDEF + #define OS_OPENPTY_METHODDEF +#endif /* !defined(OS_OPENPTY_METHODDEF) */ + +#ifndef OS_FORKPTY_METHODDEF + #define OS_FORKPTY_METHODDEF +#endif /* !defined(OS_FORKPTY_METHODDEF) */ + +#ifndef OS_GETEGID_METHODDEF + #define OS_GETEGID_METHODDEF +#endif /* !defined(OS_GETEGID_METHODDEF) */ + +#ifndef OS_GETEUID_METHODDEF + #define OS_GETEUID_METHODDEF +#endif /* !defined(OS_GETEUID_METHODDEF) */ + +#ifndef OS_GETGID_METHODDEF + #define OS_GETGID_METHODDEF +#endif /* !defined(OS_GETGID_METHODDEF) */ + +#ifndef OS_GETGROUPS_METHODDEF + #define OS_GETGROUPS_METHODDEF +#endif /* !defined(OS_GETGROUPS_METHODDEF) */ + +#ifndef OS_GETPGID_METHODDEF + #define OS_GETPGID_METHODDEF +#endif /* !defined(OS_GETPGID_METHODDEF) */ + +#ifndef OS_GETPGRP_METHODDEF + #define OS_GETPGRP_METHODDEF +#endif /* !defined(OS_GETPGRP_METHODDEF) */ + +#ifndef OS_SETPGRP_METHODDEF + #define OS_SETPGRP_METHODDEF +#endif /* !defined(OS_SETPGRP_METHODDEF) */ + +#ifndef OS_GETPPID_METHODDEF + #define OS_GETPPID_METHODDEF +#endif /* !defined(OS_GETPPID_METHODDEF) */ + +#ifndef OS_GETLOGIN_METHODDEF + #define OS_GETLOGIN_METHODDEF +#endif /* !defined(OS_GETLOGIN_METHODDEF) */ + +#ifndef OS_GETUID_METHODDEF + #define OS_GETUID_METHODDEF +#endif /* !defined(OS_GETUID_METHODDEF) */ + +#ifndef OS_KILL_METHODDEF + #define OS_KILL_METHODDEF +#endif /* !defined(OS_KILL_METHODDEF) */ + +#ifndef OS_KILLPG_METHODDEF + #define OS_KILLPG_METHODDEF +#endif /* !defined(OS_KILLPG_METHODDEF) */ + +#ifndef OS_PLOCK_METHODDEF + #define OS_PLOCK_METHODDEF +#endif /* !defined(OS_PLOCK_METHODDEF) */ + +#ifndef OS_SETUID_METHODDEF + #define OS_SETUID_METHODDEF +#endif /* !defined(OS_SETUID_METHODDEF) */ + +#ifndef OS_SETEUID_METHODDEF + #define OS_SETEUID_METHODDEF +#endif /* !defined(OS_SETEUID_METHODDEF) */ + +#ifndef OS_SETEGID_METHODDEF + #define OS_SETEGID_METHODDEF +#endif /* !defined(OS_SETEGID_METHODDEF) */ + +#ifndef OS_SETREUID_METHODDEF + #define OS_SETREUID_METHODDEF +#endif /* !defined(OS_SETREUID_METHODDEF) */ + +#ifndef OS_SETREGID_METHODDEF + #define OS_SETREGID_METHODDEF +#endif /* !defined(OS_SETREGID_METHODDEF) */ + +#ifndef OS_SETGID_METHODDEF + #define OS_SETGID_METHODDEF +#endif /* !defined(OS_SETGID_METHODDEF) */ + +#ifndef OS_SETGROUPS_METHODDEF + #define OS_SETGROUPS_METHODDEF +#endif /* !defined(OS_SETGROUPS_METHODDEF) */ + +#ifndef OS_WAIT3_METHODDEF + #define OS_WAIT3_METHODDEF +#endif /* !defined(OS_WAIT3_METHODDEF) */ + +#ifndef OS_WAIT4_METHODDEF + #define OS_WAIT4_METHODDEF +#endif /* !defined(OS_WAIT4_METHODDEF) */ + +#ifndef OS_WAITID_METHODDEF + #define OS_WAITID_METHODDEF +#endif /* !defined(OS_WAITID_METHODDEF) */ + +#ifndef OS_WAITPID_METHODDEF + #define OS_WAITPID_METHODDEF +#endif /* !defined(OS_WAITPID_METHODDEF) */ + +#ifndef OS_WAIT_METHODDEF + #define OS_WAIT_METHODDEF +#endif /* !defined(OS_WAIT_METHODDEF) */ + +#ifndef OS_SYMLINK_METHODDEF + #define OS_SYMLINK_METHODDEF +#endif /* !defined(OS_SYMLINK_METHODDEF) */ + +#ifndef OS_TIMES_METHODDEF + #define OS_TIMES_METHODDEF +#endif /* !defined(OS_TIMES_METHODDEF) */ + +#ifndef OS_GETSID_METHODDEF + #define OS_GETSID_METHODDEF +#endif /* !defined(OS_GETSID_METHODDEF) */ + +#ifndef OS_SETSID_METHODDEF + #define OS_SETSID_METHODDEF +#endif /* !defined(OS_SETSID_METHODDEF) */ + +#ifndef OS_SETPGID_METHODDEF + #define OS_SETPGID_METHODDEF +#endif /* !defined(OS_SETPGID_METHODDEF) */ + +#ifndef OS_TCGETPGRP_METHODDEF + #define OS_TCGETPGRP_METHODDEF +#endif /* !defined(OS_TCGETPGRP_METHODDEF) */ + +#ifndef OS_TCSETPGRP_METHODDEF + #define OS_TCSETPGRP_METHODDEF +#endif /* !defined(OS_TCSETPGRP_METHODDEF) */ + +#ifndef OS_LOCKF_METHODDEF + #define OS_LOCKF_METHODDEF +#endif /* !defined(OS_LOCKF_METHODDEF) */ + +#ifndef OS_READV_METHODDEF + #define OS_READV_METHODDEF +#endif /* !defined(OS_READV_METHODDEF) */ + +#ifndef OS_PREAD_METHODDEF + #define OS_PREAD_METHODDEF +#endif /* !defined(OS_PREAD_METHODDEF) */ + +#ifndef OS_PIPE_METHODDEF + #define OS_PIPE_METHODDEF +#endif /* !defined(OS_PIPE_METHODDEF) */ + +#ifndef OS_PIPE2_METHODDEF + #define OS_PIPE2_METHODDEF +#endif /* !defined(OS_PIPE2_METHODDEF) */ + +#ifndef OS_WRITEV_METHODDEF + #define OS_WRITEV_METHODDEF +#endif /* !defined(OS_WRITEV_METHODDEF) */ + +#ifndef OS_PWRITE_METHODDEF + #define OS_PWRITE_METHODDEF +#endif /* !defined(OS_PWRITE_METHODDEF) */ + +#ifndef OS_MKFIFO_METHODDEF + #define OS_MKFIFO_METHODDEF +#endif /* !defined(OS_MKFIFO_METHODDEF) */ + +#ifndef OS_MKNOD_METHODDEF + #define OS_MKNOD_METHODDEF +#endif /* !defined(OS_MKNOD_METHODDEF) */ + +#ifndef OS_MAJOR_METHODDEF + #define OS_MAJOR_METHODDEF +#endif /* !defined(OS_MAJOR_METHODDEF) */ + +#ifndef OS_MINOR_METHODDEF + #define OS_MINOR_METHODDEF +#endif /* !defined(OS_MINOR_METHODDEF) */ + +#ifndef OS_MAKEDEV_METHODDEF + #define OS_MAKEDEV_METHODDEF +#endif /* !defined(OS_MAKEDEV_METHODDEF) */ + +#ifndef OS_FTRUNCATE_METHODDEF + #define OS_FTRUNCATE_METHODDEF +#endif /* !defined(OS_FTRUNCATE_METHODDEF) */ + +#ifndef OS_TRUNCATE_METHODDEF + #define OS_TRUNCATE_METHODDEF +#endif /* !defined(OS_TRUNCATE_METHODDEF) */ + +#ifndef OS_POSIX_FALLOCATE_METHODDEF + #define OS_POSIX_FALLOCATE_METHODDEF +#endif /* !defined(OS_POSIX_FALLOCATE_METHODDEF) */ + +#ifndef OS_POSIX_FADVISE_METHODDEF + #define OS_POSIX_FADVISE_METHODDEF +#endif /* !defined(OS_POSIX_FADVISE_METHODDEF) */ + +#ifndef OS_PUTENV_METHODDEF + #define OS_PUTENV_METHODDEF +#endif /* !defined(OS_PUTENV_METHODDEF) */ + +#ifndef OS_UNSETENV_METHODDEF + #define OS_UNSETENV_METHODDEF +#endif /* !defined(OS_UNSETENV_METHODDEF) */ + +#ifndef OS_WCOREDUMP_METHODDEF + #define OS_WCOREDUMP_METHODDEF +#endif /* !defined(OS_WCOREDUMP_METHODDEF) */ + +#ifndef OS_WIFCONTINUED_METHODDEF + #define OS_WIFCONTINUED_METHODDEF +#endif /* !defined(OS_WIFCONTINUED_METHODDEF) */ + +#ifndef OS_WIFSTOPPED_METHODDEF + #define OS_WIFSTOPPED_METHODDEF +#endif /* !defined(OS_WIFSTOPPED_METHODDEF) */ + +#ifndef OS_WIFSIGNALED_METHODDEF + #define OS_WIFSIGNALED_METHODDEF +#endif /* !defined(OS_WIFSIGNALED_METHODDEF) */ + +#ifndef OS_WIFEXITED_METHODDEF + #define OS_WIFEXITED_METHODDEF +#endif /* !defined(OS_WIFEXITED_METHODDEF) */ + +#ifndef OS_WEXITSTATUS_METHODDEF + #define OS_WEXITSTATUS_METHODDEF +#endif /* !defined(OS_WEXITSTATUS_METHODDEF) */ + +#ifndef OS_WTERMSIG_METHODDEF + #define OS_WTERMSIG_METHODDEF +#endif /* !defined(OS_WTERMSIG_METHODDEF) */ + +#ifndef OS_WSTOPSIG_METHODDEF + #define OS_WSTOPSIG_METHODDEF +#endif /* !defined(OS_WSTOPSIG_METHODDEF) */ + +#ifndef OS_FSTATVFS_METHODDEF + #define OS_FSTATVFS_METHODDEF +#endif /* !defined(OS_FSTATVFS_METHODDEF) */ + +#ifndef OS_STATVFS_METHODDEF + #define OS_STATVFS_METHODDEF +#endif /* !defined(OS_STATVFS_METHODDEF) */ + +#ifndef OS__GETDISKUSAGE_METHODDEF + #define OS__GETDISKUSAGE_METHODDEF +#endif /* !defined(OS__GETDISKUSAGE_METHODDEF) */ + +#ifndef OS_FPATHCONF_METHODDEF + #define OS_FPATHCONF_METHODDEF +#endif /* !defined(OS_FPATHCONF_METHODDEF) */ + +#ifndef OS_PATHCONF_METHODDEF + #define OS_PATHCONF_METHODDEF +#endif /* !defined(OS_PATHCONF_METHODDEF) */ + +#ifndef OS_CONFSTR_METHODDEF + #define OS_CONFSTR_METHODDEF +#endif /* !defined(OS_CONFSTR_METHODDEF) */ + +#ifndef OS_SYSCONF_METHODDEF + #define OS_SYSCONF_METHODDEF +#endif /* !defined(OS_SYSCONF_METHODDEF) */ + +#ifndef OS_GETLOADAVG_METHODDEF + #define OS_GETLOADAVG_METHODDEF +#endif /* !defined(OS_GETLOADAVG_METHODDEF) */ + +#ifndef OS_SETRESUID_METHODDEF + #define OS_SETRESUID_METHODDEF +#endif /* !defined(OS_SETRESUID_METHODDEF) */ + +#ifndef OS_SETRESGID_METHODDEF + #define OS_SETRESGID_METHODDEF +#endif /* !defined(OS_SETRESGID_METHODDEF) */ + +#ifndef OS_GETRESUID_METHODDEF + #define OS_GETRESUID_METHODDEF +#endif /* !defined(OS_GETRESUID_METHODDEF) */ + +#ifndef OS_GETRESGID_METHODDEF + #define OS_GETRESGID_METHODDEF +#endif /* !defined(OS_GETRESGID_METHODDEF) */ + +#ifndef OS_GETXATTR_METHODDEF + #define OS_GETXATTR_METHODDEF +#endif /* !defined(OS_GETXATTR_METHODDEF) */ + +#ifndef OS_SETXATTR_METHODDEF + #define OS_SETXATTR_METHODDEF +#endif /* !defined(OS_SETXATTR_METHODDEF) */ + +#ifndef OS_REMOVEXATTR_METHODDEF + #define OS_REMOVEXATTR_METHODDEF +#endif /* !defined(OS_REMOVEXATTR_METHODDEF) */ + +#ifndef OS_LISTXATTR_METHODDEF + #define OS_LISTXATTR_METHODDEF +#endif /* !defined(OS_LISTXATTR_METHODDEF) */ + +#ifndef OS_GET_HANDLE_INHERITABLE_METHODDEF + #define OS_GET_HANDLE_INHERITABLE_METHODDEF +#endif /* !defined(OS_GET_HANDLE_INHERITABLE_METHODDEF) */ + +#ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF + #define OS_SET_HANDLE_INHERITABLE_METHODDEF +#endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ +/*[clinic end generated code: output=d17c625afa72886b input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h new file mode 100644 index 0000000000..e461fc3dc3 --- /dev/null +++ b/Modules/clinic/pyexpat.c.h @@ -0,0 +1,289 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(pyexpat_xmlparser_Parse__doc__, +"Parse($self, data, isFinal=0, /)\n" +"--\n" +"\n" +"Parse XML data.\n" +"\n" +"`isfinal\' should be true at end of input."); + +#define PYEXPAT_XMLPARSER_PARSE_METHODDEF \ + {"Parse", (PyCFunction)pyexpat_xmlparser_Parse, METH_VARARGS, pyexpat_xmlparser_Parse__doc__}, + +static PyObject * +pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, int isFinal); + +static PyObject * +pyexpat_xmlparser_Parse(xmlparseobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *data; + int isFinal = 0; + + if (!PyArg_ParseTuple(args, + "O|i:Parse", + &data, &isFinal)) + goto exit; + return_value = pyexpat_xmlparser_Parse_impl(self, data, isFinal); + +exit: + return return_value; +} + +PyDoc_STRVAR(pyexpat_xmlparser_ParseFile__doc__, +"ParseFile($self, file, /)\n" +"--\n" +"\n" +"Parse XML data from file-like object."); + +#define PYEXPAT_XMLPARSER_PARSEFILE_METHODDEF \ + {"ParseFile", (PyCFunction)pyexpat_xmlparser_ParseFile, METH_O, pyexpat_xmlparser_ParseFile__doc__}, + +PyDoc_STRVAR(pyexpat_xmlparser_SetBase__doc__, +"SetBase($self, base, /)\n" +"--\n" +"\n" +"Set the base URL for the parser."); + +#define PYEXPAT_XMLPARSER_SETBASE_METHODDEF \ + {"SetBase", (PyCFunction)pyexpat_xmlparser_SetBase, METH_VARARGS, pyexpat_xmlparser_SetBase__doc__}, + +static PyObject * +pyexpat_xmlparser_SetBase_impl(xmlparseobject *self, const char *base); + +static PyObject * +pyexpat_xmlparser_SetBase(xmlparseobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + const char *base; + + if (!PyArg_ParseTuple(args, + "s:SetBase", + &base)) + goto exit; + return_value = pyexpat_xmlparser_SetBase_impl(self, base); + +exit: + return return_value; +} + +PyDoc_STRVAR(pyexpat_xmlparser_GetBase__doc__, +"GetBase($self, /)\n" +"--\n" +"\n" +"Return base URL string for the parser."); + +#define PYEXPAT_XMLPARSER_GETBASE_METHODDEF \ + {"GetBase", (PyCFunction)pyexpat_xmlparser_GetBase, METH_NOARGS, pyexpat_xmlparser_GetBase__doc__}, + +static PyObject * +pyexpat_xmlparser_GetBase_impl(xmlparseobject *self); + +static PyObject * +pyexpat_xmlparser_GetBase(xmlparseobject *self, PyObject *Py_UNUSED(ignored)) +{ + return pyexpat_xmlparser_GetBase_impl(self); +} + +PyDoc_STRVAR(pyexpat_xmlparser_GetInputContext__doc__, +"GetInputContext($self, /)\n" +"--\n" +"\n" +"Return the untranslated text of the input that caused the current event.\n" +"\n" +"If the event was generated by a large amount of text (such as a start tag\n" +"for an element with many attributes), not all of the text may be available."); + +#define PYEXPAT_XMLPARSER_GETINPUTCONTEXT_METHODDEF \ + {"GetInputContext", (PyCFunction)pyexpat_xmlparser_GetInputContext, METH_NOARGS, pyexpat_xmlparser_GetInputContext__doc__}, + +static PyObject * +pyexpat_xmlparser_GetInputContext_impl(xmlparseobject *self); + +static PyObject * +pyexpat_xmlparser_GetInputContext(xmlparseobject *self, PyObject *Py_UNUSED(ignored)) +{ + return pyexpat_xmlparser_GetInputContext_impl(self); +} + +PyDoc_STRVAR(pyexpat_xmlparser_ExternalEntityParserCreate__doc__, +"ExternalEntityParserCreate($self, context, encoding=None, /)\n" +"--\n" +"\n" +"Create a parser for parsing an external entity based on the information passed to the ExternalEntityRefHandler."); + +#define PYEXPAT_XMLPARSER_EXTERNALENTITYPARSERCREATE_METHODDEF \ + {"ExternalEntityParserCreate", (PyCFunction)pyexpat_xmlparser_ExternalEntityParserCreate, METH_VARARGS, pyexpat_xmlparser_ExternalEntityParserCreate__doc__}, + +static PyObject * +pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self, const char *context, const char *encoding); + +static PyObject * +pyexpat_xmlparser_ExternalEntityParserCreate(xmlparseobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + const char *context; + const char *encoding = NULL; + + if (!PyArg_ParseTuple(args, + "z|s:ExternalEntityParserCreate", + &context, &encoding)) + goto exit; + return_value = pyexpat_xmlparser_ExternalEntityParserCreate_impl(self, context, encoding); + +exit: + return return_value; +} + +PyDoc_STRVAR(pyexpat_xmlparser_SetParamEntityParsing__doc__, +"SetParamEntityParsing($self, flag, /)\n" +"--\n" +"\n" +"Controls parsing of parameter entities (including the external DTD subset).\n" +"\n" +"Possible flag values are XML_PARAM_ENTITY_PARSING_NEVER,\n" +"XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE and\n" +"XML_PARAM_ENTITY_PARSING_ALWAYS. Returns true if setting the flag\n" +"was successful."); + +#define PYEXPAT_XMLPARSER_SETPARAMENTITYPARSING_METHODDEF \ + {"SetParamEntityParsing", (PyCFunction)pyexpat_xmlparser_SetParamEntityParsing, METH_VARARGS, pyexpat_xmlparser_SetParamEntityParsing__doc__}, + +static PyObject * +pyexpat_xmlparser_SetParamEntityParsing_impl(xmlparseobject *self, int flag); + +static PyObject * +pyexpat_xmlparser_SetParamEntityParsing(xmlparseobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + int flag; + + if (!PyArg_ParseTuple(args, + "i:SetParamEntityParsing", + &flag)) + goto exit; + return_value = pyexpat_xmlparser_SetParamEntityParsing_impl(self, flag); + +exit: + return return_value; +} + +#if (XML_COMBINED_VERSION >= 19505) + +PyDoc_STRVAR(pyexpat_xmlparser_UseForeignDTD__doc__, +"UseForeignDTD($self, flag=True, /)\n" +"--\n" +"\n" +"Allows the application to provide an artificial external subset if one is not specified as part of the document instance.\n" +"\n" +"This readily allows the use of a \'default\' document type controlled by the\n" +"application, while still getting the advantage of providing document type\n" +"information to the parser. \'flag\' defaults to True if not provided."); + +#define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF \ + {"UseForeignDTD", (PyCFunction)pyexpat_xmlparser_UseForeignDTD, METH_VARARGS, pyexpat_xmlparser_UseForeignDTD__doc__}, + +static PyObject * +pyexpat_xmlparser_UseForeignDTD_impl(xmlparseobject *self, int flag); + +static PyObject * +pyexpat_xmlparser_UseForeignDTD(xmlparseobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + int flag = 1; + + if (!PyArg_ParseTuple(args, + "|p:UseForeignDTD", + &flag)) + goto exit; + return_value = pyexpat_xmlparser_UseForeignDTD_impl(self, flag); + +exit: + return return_value; +} + +#endif /* (XML_COMBINED_VERSION >= 19505) */ + +PyDoc_STRVAR(pyexpat_xmlparser___dir____doc__, +"__dir__($self, /)\n" +"--"); + +#define PYEXPAT_XMLPARSER___DIR___METHODDEF \ + {"__dir__", (PyCFunction)pyexpat_xmlparser___dir__, METH_NOARGS, pyexpat_xmlparser___dir____doc__}, + +static PyObject * +pyexpat_xmlparser___dir___impl(xmlparseobject *self); + +static PyObject * +pyexpat_xmlparser___dir__(xmlparseobject *self, PyObject *Py_UNUSED(ignored)) +{ + return pyexpat_xmlparser___dir___impl(self); +} + +PyDoc_STRVAR(pyexpat_ParserCreate__doc__, +"ParserCreate($module, /, encoding=None, namespace_separator=None,\n" +" intern=None)\n" +"--\n" +"\n" +"Return a new XML parser object."); + +#define PYEXPAT_PARSERCREATE_METHODDEF \ + {"ParserCreate", (PyCFunction)pyexpat_ParserCreate, METH_VARARGS|METH_KEYWORDS, pyexpat_ParserCreate__doc__}, + +static PyObject * +pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, const char *namespace_separator, PyObject *intern); + +static PyObject * +pyexpat_ParserCreate(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"encoding", "namespace_separator", "intern", NULL}; + const char *encoding = NULL; + const char *namespace_separator = NULL; + PyObject *intern = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|zzO:ParserCreate", _keywords, + &encoding, &namespace_separator, &intern)) + goto exit; + return_value = pyexpat_ParserCreate_impl(module, encoding, namespace_separator, intern); + +exit: + return return_value; +} + +PyDoc_STRVAR(pyexpat_ErrorString__doc__, +"ErrorString($module, code, /)\n" +"--\n" +"\n" +"Returns string error for given number."); + +#define PYEXPAT_ERRORSTRING_METHODDEF \ + {"ErrorString", (PyCFunction)pyexpat_ErrorString, METH_VARARGS, pyexpat_ErrorString__doc__}, + +static PyObject * +pyexpat_ErrorString_impl(PyModuleDef *module, long code); + +static PyObject * +pyexpat_ErrorString(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + long code; + + if (!PyArg_ParseTuple(args, + "l:ErrorString", + &code)) + goto exit; + return_value = pyexpat_ErrorString_impl(module, code); + +exit: + return return_value; +} + +#ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF + #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF +#endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ +/*[clinic end generated code: output=0198390005e40e1c input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha1module.c.h b/Modules/clinic/sha1module.c.h new file mode 100644 index 0000000000..1b50633962 --- /dev/null +++ b/Modules/clinic/sha1module.c.h @@ -0,0 +1,96 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA1Type_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define SHA1TYPE_COPY_METHODDEF \ + {"copy", (PyCFunction)SHA1Type_copy, METH_NOARGS, SHA1Type_copy__doc__}, + +static PyObject * +SHA1Type_copy_impl(SHA1object *self); + +static PyObject * +SHA1Type_copy(SHA1object *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA1Type_copy_impl(self); +} + +PyDoc_STRVAR(SHA1Type_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of binary data."); + +#define SHA1TYPE_DIGEST_METHODDEF \ + {"digest", (PyCFunction)SHA1Type_digest, METH_NOARGS, SHA1Type_digest__doc__}, + +static PyObject * +SHA1Type_digest_impl(SHA1object *self); + +static PyObject * +SHA1Type_digest(SHA1object *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA1Type_digest_impl(self); +} + +PyDoc_STRVAR(SHA1Type_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of hexadecimal digits."); + +#define SHA1TYPE_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)SHA1Type_hexdigest, METH_NOARGS, SHA1Type_hexdigest__doc__}, + +static PyObject * +SHA1Type_hexdigest_impl(SHA1object *self); + +static PyObject * +SHA1Type_hexdigest(SHA1object *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA1Type_hexdigest_impl(self); +} + +PyDoc_STRVAR(SHA1Type_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define SHA1TYPE_UPDATE_METHODDEF \ + {"update", (PyCFunction)SHA1Type_update, METH_O, SHA1Type_update__doc__}, + +PyDoc_STRVAR(_sha1_sha1__doc__, +"sha1($module, /, string=b\'\')\n" +"--\n" +"\n" +"Return a new SHA1 hash object; optionally initialized with a string."); + +#define _SHA1_SHA1_METHODDEF \ + {"sha1", (PyCFunction)_sha1_sha1, METH_VARARGS|METH_KEYWORDS, _sha1_sha1__doc__}, + +static PyObject * +_sha1_sha1_impl(PyModuleDef *module, PyObject *string); + +static PyObject * +_sha1_sha1(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:sha1", _keywords, + &string)) + goto exit; + return_value = _sha1_sha1_impl(module, string); + +exit: + return return_value; +} +/*[clinic end generated code: output=b2890b9ca964b217 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha256module.c.h b/Modules/clinic/sha256module.c.h new file mode 100644 index 0000000000..cd7c3e3938 --- /dev/null +++ b/Modules/clinic/sha256module.c.h @@ -0,0 +1,125 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(SHA256Type_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define SHA256TYPE_COPY_METHODDEF \ + {"copy", (PyCFunction)SHA256Type_copy, METH_NOARGS, SHA256Type_copy__doc__}, + +static PyObject * +SHA256Type_copy_impl(SHAobject *self); + +static PyObject * +SHA256Type_copy(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA256Type_copy_impl(self); +} + +PyDoc_STRVAR(SHA256Type_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of binary data."); + +#define SHA256TYPE_DIGEST_METHODDEF \ + {"digest", (PyCFunction)SHA256Type_digest, METH_NOARGS, SHA256Type_digest__doc__}, + +static PyObject * +SHA256Type_digest_impl(SHAobject *self); + +static PyObject * +SHA256Type_digest(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA256Type_digest_impl(self); +} + +PyDoc_STRVAR(SHA256Type_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of hexadecimal digits."); + +#define SHA256TYPE_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)SHA256Type_hexdigest, METH_NOARGS, SHA256Type_hexdigest__doc__}, + +static PyObject * +SHA256Type_hexdigest_impl(SHAobject *self); + +static PyObject * +SHA256Type_hexdigest(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA256Type_hexdigest_impl(self); +} + +PyDoc_STRVAR(SHA256Type_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define SHA256TYPE_UPDATE_METHODDEF \ + {"update", (PyCFunction)SHA256Type_update, METH_O, SHA256Type_update__doc__}, + +PyDoc_STRVAR(_sha256_sha256__doc__, +"sha256($module, /, string=b\'\')\n" +"--\n" +"\n" +"Return a new SHA-256 hash object; optionally initialized with a string."); + +#define _SHA256_SHA256_METHODDEF \ + {"sha256", (PyCFunction)_sha256_sha256, METH_VARARGS|METH_KEYWORDS, _sha256_sha256__doc__}, + +static PyObject * +_sha256_sha256_impl(PyModuleDef *module, PyObject *string); + +static PyObject * +_sha256_sha256(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:sha256", _keywords, + &string)) + goto exit; + return_value = _sha256_sha256_impl(module, string); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sha256_sha224__doc__, +"sha224($module, /, string=b\'\')\n" +"--\n" +"\n" +"Return a new SHA-224 hash object; optionally initialized with a string."); + +#define _SHA256_SHA224_METHODDEF \ + {"sha224", (PyCFunction)_sha256_sha224, METH_VARARGS|METH_KEYWORDS, _sha256_sha224__doc__}, + +static PyObject * +_sha256_sha224_impl(PyModuleDef *module, PyObject *string); + +static PyObject * +_sha256_sha224(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:sha224", _keywords, + &string)) + goto exit; + return_value = _sha256_sha224_impl(module, string); + +exit: + return return_value; +} +/*[clinic end generated code: output=8a0520371b097358 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha512module.c.h b/Modules/clinic/sha512module.c.h new file mode 100644 index 0000000000..7991eff653 --- /dev/null +++ b/Modules/clinic/sha512module.c.h @@ -0,0 +1,173 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +#if defined(PY_LONG_LONG) + +PyDoc_STRVAR(SHA512Type_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define SHA512TYPE_COPY_METHODDEF \ + {"copy", (PyCFunction)SHA512Type_copy, METH_NOARGS, SHA512Type_copy__doc__}, + +static PyObject * +SHA512Type_copy_impl(SHAobject *self); + +static PyObject * +SHA512Type_copy(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA512Type_copy_impl(self); +} + +#endif /* defined(PY_LONG_LONG) */ + +#if defined(PY_LONG_LONG) + +PyDoc_STRVAR(SHA512Type_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of binary data."); + +#define SHA512TYPE_DIGEST_METHODDEF \ + {"digest", (PyCFunction)SHA512Type_digest, METH_NOARGS, SHA512Type_digest__doc__}, + +static PyObject * +SHA512Type_digest_impl(SHAobject *self); + +static PyObject * +SHA512Type_digest(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA512Type_digest_impl(self); +} + +#endif /* defined(PY_LONG_LONG) */ + +#if defined(PY_LONG_LONG) + +PyDoc_STRVAR(SHA512Type_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of hexadecimal digits."); + +#define SHA512TYPE_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)SHA512Type_hexdigest, METH_NOARGS, SHA512Type_hexdigest__doc__}, + +static PyObject * +SHA512Type_hexdigest_impl(SHAobject *self); + +static PyObject * +SHA512Type_hexdigest(SHAobject *self, PyObject *Py_UNUSED(ignored)) +{ + return SHA512Type_hexdigest_impl(self); +} + +#endif /* defined(PY_LONG_LONG) */ + +#if defined(PY_LONG_LONG) + +PyDoc_STRVAR(SHA512Type_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define SHA512TYPE_UPDATE_METHODDEF \ + {"update", (PyCFunction)SHA512Type_update, METH_O, SHA512Type_update__doc__}, + +#endif /* defined(PY_LONG_LONG) */ + +#if defined(PY_LONG_LONG) + +PyDoc_STRVAR(_sha512_sha512__doc__, +"sha512($module, /, string=b\'\')\n" +"--\n" +"\n" +"Return a new SHA-512 hash object; optionally initialized with a string."); + +#define _SHA512_SHA512_METHODDEF \ + {"sha512", (PyCFunction)_sha512_sha512, METH_VARARGS|METH_KEYWORDS, _sha512_sha512__doc__}, + +static PyObject * +_sha512_sha512_impl(PyModuleDef *module, PyObject *string); + +static PyObject * +_sha512_sha512(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:sha512", _keywords, + &string)) + goto exit; + return_value = _sha512_sha512_impl(module, string); + +exit: + return return_value; +} + +#endif /* defined(PY_LONG_LONG) */ + +#if defined(PY_LONG_LONG) + +PyDoc_STRVAR(_sha512_sha384__doc__, +"sha384($module, /, string=b\'\')\n" +"--\n" +"\n" +"Return a new SHA-384 hash object; optionally initialized with a string."); + +#define _SHA512_SHA384_METHODDEF \ + {"sha384", (PyCFunction)_sha512_sha384, METH_VARARGS|METH_KEYWORDS, _sha512_sha384__doc__}, + +static PyObject * +_sha512_sha384_impl(PyModuleDef *module, PyObject *string); + +static PyObject * +_sha512_sha384(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *string = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:sha384", _keywords, + &string)) + goto exit; + return_value = _sha512_sha384_impl(module, string); + +exit: + return return_value; +} + +#endif /* defined(PY_LONG_LONG) */ + +#ifndef SHA512TYPE_COPY_METHODDEF + #define SHA512TYPE_COPY_METHODDEF +#endif /* !defined(SHA512TYPE_COPY_METHODDEF) */ + +#ifndef SHA512TYPE_DIGEST_METHODDEF + #define SHA512TYPE_DIGEST_METHODDEF +#endif /* !defined(SHA512TYPE_DIGEST_METHODDEF) */ + +#ifndef SHA512TYPE_HEXDIGEST_METHODDEF + #define SHA512TYPE_HEXDIGEST_METHODDEF +#endif /* !defined(SHA512TYPE_HEXDIGEST_METHODDEF) */ + +#ifndef SHA512TYPE_UPDATE_METHODDEF + #define SHA512TYPE_UPDATE_METHODDEF +#endif /* !defined(SHA512TYPE_UPDATE_METHODDEF) */ + +#ifndef _SHA512_SHA512_METHODDEF + #define _SHA512_SHA512_METHODDEF +#endif /* !defined(_SHA512_SHA512_METHODDEF) */ + +#ifndef _SHA512_SHA384_METHODDEF + #define _SHA512_SHA384_METHODDEF +#endif /* !defined(_SHA512_SHA384_METHODDEF) */ +/*[clinic end generated code: output=de7bda19fde49310 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/unicodedata.c.h b/Modules/clinic/unicodedata.c.h new file mode 100644 index 0000000000..4934e84f36 --- /dev/null +++ b/Modules/clinic/unicodedata.c.h @@ -0,0 +1,37 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(unicodedata_UCD_decimal__doc__, +"decimal($self, unichr, default=None, /)\n" +"--\n" +"\n" +"Converts a Unicode character into its equivalent decimal value.\n" +"\n" +"Returns the decimal value assigned to the Unicode character unichr\n" +"as integer. If no such value is defined, default is returned, or, if\n" +"not given, ValueError is raised."); + +#define UNICODEDATA_UCD_DECIMAL_METHODDEF \ + {"decimal", (PyCFunction)unicodedata_UCD_decimal, METH_VARARGS, unicodedata_UCD_decimal__doc__}, + +static PyObject * +unicodedata_UCD_decimal_impl(PreviousDBVersion *self, PyUnicodeObject *unichr, PyObject *default_value); + +static PyObject * +unicodedata_UCD_decimal(PreviousDBVersion *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyUnicodeObject *unichr; + PyObject *default_value = NULL; + + if (!PyArg_ParseTuple(args, + "O!|O:decimal", + &PyUnicode_Type, &unichr, &default_value)) + goto exit; + return_value = unicodedata_UCD_decimal_impl(self, unichr, default_value); + +exit: + return return_value; +} +/*[clinic end generated code: output=15b82651419cc823 input=a9049054013a1b77]*/ diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 67161adaf5..921eaaa88a 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -10,10 +10,9 @@ #include "clinic/cmathmodule.c.h" /*[clinic input] -output preset file module cmath [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=ef7e0fdd8a143c03]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=308d6839f4a46333]*/ /*[python input] class Py_complex_protected_converter(Py_complex_converter): diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c index 3cea1519de..cabff06269 100644 --- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -16,10 +16,9 @@ #endif /*[clinic input] -output preset file module fcntl [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=c7356fdb126a904a]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=124b58387c158179]*/ static int conv_descriptor(PyObject *object, int *target) diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c index f7979be334..403e434697 100644 --- a/Modules/grpmodule.c +++ b/Modules/grpmodule.c @@ -8,10 +8,9 @@ #include "clinic/grpmodule.c.h" /*[clinic input] -output preset file module grp [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=68180a9a9efb8506]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=cade63f2ed1bd9f8]*/ static PyStructSequence_Field struct_group_type_fields[] = { {"gr_name", "group name"}, diff --git a/Modules/md5module.c b/Modules/md5module.c index 65f5c35a62..25b163c179 100644 --- a/Modules/md5module.c +++ b/Modules/md5module.c @@ -53,6 +53,7 @@ typedef struct { struct md5_state hash_state; } MD5object; +#include "clinic/md5module.c.h" /* ------------------------------------------------------------------------ * @@ -343,27 +344,9 @@ MD5Type.copy Return a copy of the hash object. [clinic start generated code]*/ -PyDoc_STRVAR(MD5Type_copy__doc__, -"copy($self, /)\n" -"--\n" -"\n" -"Return a copy of the hash object."); - -#define MD5TYPE_COPY_METHODDEF \ - {"copy", (PyCFunction)MD5Type_copy, METH_NOARGS, MD5Type_copy__doc__}, - -static PyObject * -MD5Type_copy_impl(MD5object *self); - -static PyObject * -MD5Type_copy(MD5object *self, PyObject *Py_UNUSED(ignored)) -{ - return MD5Type_copy_impl(self); -} - static PyObject * MD5Type_copy_impl(MD5object *self) -/*[clinic end generated code: output=3b3a88920b3dc7f4 input=2c09e6d2493f3079]*/ +/*[clinic end generated code: output=596eb36852f02071 input=2c09e6d2493f3079]*/ { MD5object *newobj; @@ -385,27 +368,9 @@ MD5Type.digest Return the digest value as a string of binary data. [clinic start generated code]*/ -PyDoc_STRVAR(MD5Type_digest__doc__, -"digest($self, /)\n" -"--\n" -"\n" -"Return the digest value as a string of binary data."); - -#define MD5TYPE_DIGEST_METHODDEF \ - {"digest", (PyCFunction)MD5Type_digest, METH_NOARGS, MD5Type_digest__doc__}, - -static PyObject * -MD5Type_digest_impl(MD5object *self); - -static PyObject * -MD5Type_digest(MD5object *self, PyObject *Py_UNUSED(ignored)) -{ - return MD5Type_digest_impl(self); -} - static PyObject * MD5Type_digest_impl(MD5object *self) -/*[clinic end generated code: output=7a796b28fa89485f input=7b96e65389412a34]*/ +/*[clinic end generated code: output=eb691dc4190a07ec input=7b96e65389412a34]*/ { unsigned char digest[MD5_DIGESTSIZE]; struct md5_state temp; @@ -421,27 +386,9 @@ MD5Type.hexdigest Return the digest value as a string of hexadecimal digits. [clinic start generated code]*/ -PyDoc_STRVAR(MD5Type_hexdigest__doc__, -"hexdigest($self, /)\n" -"--\n" -"\n" -"Return the digest value as a string of hexadecimal digits."); - -#define MD5TYPE_HEXDIGEST_METHODDEF \ - {"hexdigest", (PyCFunction)MD5Type_hexdigest, METH_NOARGS, MD5Type_hexdigest__doc__}, - -static PyObject * -MD5Type_hexdigest_impl(MD5object *self); - -static PyObject * -MD5Type_hexdigest(MD5object *self, PyObject *Py_UNUSED(ignored)) -{ - return MD5Type_hexdigest_impl(self); -} - static PyObject * MD5Type_hexdigest_impl(MD5object *self) -/*[clinic end generated code: output=daa73609f94f92e1 input=b60b19de644798dd]*/ +/*[clinic end generated code: output=17badced1f3ac932 input=b60b19de644798dd]*/ { unsigned char digest[MD5_DIGESTSIZE]; struct md5_state temp; @@ -482,18 +429,9 @@ MD5Type.update Update this hash object's state with the provided string. [clinic start generated code]*/ -PyDoc_STRVAR(MD5Type_update__doc__, -"update($self, obj, /)\n" -"--\n" -"\n" -"Update this hash object\'s state with the provided string."); - -#define MD5TYPE_UPDATE_METHODDEF \ - {"update", (PyCFunction)MD5Type_update, METH_O, MD5Type_update__doc__}, - static PyObject * MD5Type_update(MD5object *self, PyObject *obj) -/*[clinic end generated code: output=9d09b6c6cdc6cac3 input=6e1efcd9ecf17032]*/ +/*[clinic end generated code: output=f6ad168416338423 input=6e1efcd9ecf17032]*/ { Py_buffer buf; @@ -594,38 +532,9 @@ _md5.md5 Return a new MD5 hash object; optionally initialized with a string. [clinic start generated code]*/ -PyDoc_STRVAR(_md5_md5__doc__, -"md5($module, /, string=b\'\')\n" -"--\n" -"\n" -"Return a new MD5 hash object; optionally initialized with a string."); - -#define _MD5_MD5_METHODDEF \ - {"md5", (PyCFunction)_md5_md5, METH_VARARGS|METH_KEYWORDS, _md5_md5__doc__}, - -static PyObject * -_md5_md5_impl(PyModuleDef *module, PyObject *string); - -static PyObject * -_md5_md5(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; - PyObject *string = NULL; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:md5", _keywords, - &string)) - goto exit; - return_value = _md5_md5_impl(module, string); - -exit: - return return_value; -} - static PyObject * _md5_md5_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=1039e912d919880e input=d12ef8f72d684f7b]*/ +/*[clinic end generated code: output=3527436a2090b956 input=d12ef8f72d684f7b]*/ { MD5object *new; Py_buffer buf; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e1aabfa5c3..a92d9604d4 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2470,61 +2470,9 @@ It's an error to use dir_fd or follow_symlinks when specifying path as [clinic start generated code]*/ -PyDoc_STRVAR(os_stat__doc__, -"stat($module, /, path, *, dir_fd=None, follow_symlinks=True)\n" -"--\n" -"\n" -"Perform a stat system call on the given path.\n" -"\n" -" path\n" -" Path to be examined; can be string, bytes, or open-file-descriptor int.\n" -" dir_fd\n" -" If not None, it should be a file descriptor open to a directory,\n" -" and path should be a relative string; path will then be relative to\n" -" that directory.\n" -" follow_symlinks\n" -" If False, and the last element of the path is a symbolic link,\n" -" stat will examine the symbolic link itself instead of the file\n" -" the link points to.\n" -"\n" -"dir_fd and follow_symlinks may not be implemented\n" -" on your platform. If they are unavailable, using them will raise a\n" -" NotImplementedError.\n" -"\n" -"It\'s an error to use dir_fd or follow_symlinks when specifying path as\n" -" an open file descriptor."); - -#define OS_STAT_METHODDEF \ - {"stat", (PyCFunction)os_stat, METH_VARARGS|METH_KEYWORDS, os_stat__doc__}, - -static PyObject * -os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, int follow_symlinks); - -static PyObject * -os_stat(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "dir_fd", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("stat", "path", 0, 1); - int dir_fd = DEFAULT_DIR_FD; - int follow_symlinks = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|$O&p:stat", _keywords, - path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) - goto exit; - return_value = os_stat_impl(module, &path, dir_fd, follow_symlinks); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=0e9f9508fa0c0607 input=099d356c306fa24a]*/ +/*[clinic end generated code: output=708c225f94fcfc8e input=099d356c306fa24a]*/ { return posix_do_stat("stat", path, dir_fd, follow_symlinks); } @@ -2545,45 +2493,9 @@ Like stat(), but do not follow symbolic links. Equivalent to stat(path, follow_symlinks=False). [clinic start generated code]*/ -PyDoc_STRVAR(os_lstat__doc__, -"lstat($module, /, path, *, dir_fd=None)\n" -"--\n" -"\n" -"Perform a stat system call on the given path, without following symbolic links.\n" -"\n" -"Like stat(), but do not follow symbolic links.\n" -"Equivalent to stat(path, follow_symlinks=False)."); - -#define OS_LSTAT_METHODDEF \ - {"lstat", (PyCFunction)os_lstat, METH_VARARGS|METH_KEYWORDS, os_lstat__doc__}, - -static PyObject * -os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_lstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "dir_fd", NULL}; - path_t path = PATH_T_INITIALIZE("lstat", "path", 0, 0); - int dir_fd = DEFAULT_DIR_FD; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|$O&:lstat", _keywords, - path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd)) - goto exit; - return_value = os_lstat_impl(module, &path, dir_fd); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=85702247224a2b1c input=0b7474765927b925]*/ +/*[clinic end generated code: output=7a748e333fcb39bd input=0b7474765927b925]*/ { int follow_symlinks = 0; return posix_do_stat("lstat", path, dir_fd, follow_symlinks); @@ -2629,75 +2541,9 @@ Note that most operations will use the effective uid/gid, therefore this [clinic start generated code]*/ -PyDoc_STRVAR(os_access__doc__, -"access($module, /, path, mode, *, dir_fd=None, effective_ids=False,\n" -" follow_symlinks=True)\n" -"--\n" -"\n" -"Use the real uid/gid to test for access to a path.\n" -"\n" -" path\n" -" Path to be tested; can be string, bytes, or open-file-descriptor int.\n" -" mode\n" -" Operating-system mode bitfield. Can be F_OK to test existence,\n" -" or the inclusive-OR of R_OK, W_OK, and X_OK.\n" -" dir_fd\n" -" If not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that\n" -" directory.\n" -" effective_ids\n" -" If True, access will use the effective uid/gid instead of\n" -" the real uid/gid.\n" -" follow_symlinks\n" -" If False, and the last element of the path is a symbolic link,\n" -" access will examine the symbolic link itself instead of the file\n" -" the link points to.\n" -"\n" -"dir_fd, effective_ids, and follow_symlinks may not be implemented\n" -" on your platform. If they are unavailable, using them will raise a\n" -" NotImplementedError.\n" -"\n" -"Note that most operations will use the effective uid/gid, therefore this\n" -" routine can be used in a suid/sgid environment to test if the invoking user\n" -" has the specified access to the path."); - -#define OS_ACCESS_METHODDEF \ - {"access", (PyCFunction)os_access, METH_VARARGS|METH_KEYWORDS, os_access__doc__}, - -static int -os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks); - -static PyObject * -os_access(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("access", "path", 0, 1); - int mode; - int dir_fd = DEFAULT_DIR_FD; - int effective_ids = 0; - int follow_symlinks = 1; - int _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&i|$O&pp:access", _keywords, - path_converter, &path, &mode, FACCESSAT_DIR_FD_CONVERTER, &dir_fd, &effective_ids, &follow_symlinks)) - goto exit; - _return_value = os_access_impl(module, &path, mode, dir_fd, effective_ids, follow_symlinks); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyBool_FromLong((long)_return_value); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static int os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks) -/*[clinic end generated code: output=dfd404666906f012 input=b75a756797af45ec]*/ +/*[clinic end generated code: output=f9e734db3d88b767 input=b75a756797af45ec]*/ { int return_value; @@ -2787,44 +2633,9 @@ os.ttyname -> DecodeFSDefault Return the name of the terminal device connected to 'fd'. [clinic start generated code]*/ -PyDoc_STRVAR(os_ttyname__doc__, -"ttyname($module, fd, /)\n" -"--\n" -"\n" -"Return the name of the terminal device connected to \'fd\'.\n" -"\n" -" fd\n" -" Integer file descriptor handle."); - -#define OS_TTYNAME_METHODDEF \ - {"ttyname", (PyCFunction)os_ttyname, METH_VARARGS, os_ttyname__doc__}, - -static char * -os_ttyname_impl(PyModuleDef *module, int fd); - -static PyObject * -os_ttyname(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - char *_return_value; - - if (!PyArg_ParseTuple(args, - "i:ttyname", - &fd)) - goto exit; - _return_value = os_ttyname_impl(module, fd); - if (_return_value == NULL) - goto exit; - return_value = PyUnicode_DecodeFSDefault(_return_value); - -exit: - return return_value; -} - static char * os_ttyname_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=cee7bc4cffec01a2 input=5f72ca83e76b3b45]*/ +/*[clinic end generated code: output=03ad3d5ccaef75c3 input=5f72ca83e76b3b45]*/ { char *ret; @@ -2842,27 +2653,9 @@ os.ctermid Return the name of the controlling terminal for this process. [clinic start generated code]*/ -PyDoc_STRVAR(os_ctermid__doc__, -"ctermid($module, /)\n" -"--\n" -"\n" -"Return the name of the controlling terminal for this process."); - -#define OS_CTERMID_METHODDEF \ - {"ctermid", (PyCFunction)os_ctermid, METH_NOARGS, os_ctermid__doc__}, - -static PyObject * -os_ctermid_impl(PyModuleDef *module); - -static PyObject * -os_ctermid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_ctermid_impl(module); -} - static PyObject * os_ctermid_impl(PyModuleDef *module) -/*[clinic end generated code: output=277bf7964ec2d782 input=3b87fdd52556382d]*/ +/*[clinic end generated code: output=1b73788201e0aebd input=3b87fdd52556382d]*/ { char *ret; char buffer[L_ctermid]; @@ -2891,45 +2684,9 @@ On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception. [clinic start generated code]*/ -PyDoc_STRVAR(os_chdir__doc__, -"chdir($module, /, path)\n" -"--\n" -"\n" -"Change the current working directory to the specified path.\n" -"\n" -"path may always be specified as a string.\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception."); - -#define OS_CHDIR_METHODDEF \ - {"chdir", (PyCFunction)os_chdir, METH_VARARGS|METH_KEYWORDS, os_chdir__doc__}, - -static PyObject * -os_chdir_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_chdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; - path_t path = PATH_T_INITIALIZE("chdir", "path", 0, PATH_HAVE_FCHDIR); - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:chdir", _keywords, - path_converter, &path)) - goto exit; - return_value = os_chdir_impl(module, &path); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_chdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=cc07592dd23ca9e0 input=1a4a15b4d12cb15d]*/ +/*[clinic end generated code: output=7358e3a20fb5aa93 input=1a4a15b4d12cb15d]*/ { int result; @@ -2971,41 +2728,9 @@ Equivalent to os.chdir(fd). [clinic start generated code]*/ -PyDoc_STRVAR(os_fchdir__doc__, -"fchdir($module, /, fd)\n" -"--\n" -"\n" -"Change to the directory of the given file descriptor.\n" -"\n" -"fd must be opened on a directory, not a file.\n" -"Equivalent to os.chdir(fd)."); - -#define OS_FCHDIR_METHODDEF \ - {"fchdir", (PyCFunction)os_fchdir, METH_VARARGS|METH_KEYWORDS, os_fchdir__doc__}, - -static PyObject * -os_fchdir_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fchdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; - int fd; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:fchdir", _keywords, - fildes_converter, &fd)) - goto exit; - return_value = os_fchdir_impl(module, fd); - -exit: - return return_value; -} - static PyObject * os_fchdir_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=9f6dbc89b2778834 input=18e816479a2fa985]*/ +/*[clinic end generated code: output=361d30df6b2d3418 input=18e816479a2fa985]*/ { return posix_fildes_fd(fd, fchdir); } @@ -3044,64 +2769,9 @@ dir_fd and follow_symlinks may not be implemented on your platform. [clinic start generated code]*/ -PyDoc_STRVAR(os_chmod__doc__, -"chmod($module, /, path, mode, *, dir_fd=None, follow_symlinks=True)\n" -"--\n" -"\n" -"Change the access permissions of a file.\n" -"\n" -" path\n" -" Path to be modified. May always be specified as a str or bytes.\n" -" On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception.\n" -" mode\n" -" Operating-system mode bitfield.\n" -" dir_fd\n" -" If not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that\n" -" directory.\n" -" follow_symlinks\n" -" If False, and the last element of the path is a symbolic link,\n" -" chmod will modify the symbolic link itself instead of the file\n" -" the link points to.\n" -"\n" -"It is an error to use dir_fd or follow_symlinks when specifying path as\n" -" an open file descriptor.\n" -"dir_fd and follow_symlinks may not be implemented on your platform.\n" -" If they are unavailable, using them will raise a NotImplementedError."); - -#define OS_CHMOD_METHODDEF \ - {"chmod", (PyCFunction)os_chmod, METH_VARARGS|METH_KEYWORDS, os_chmod__doc__}, - -static PyObject * -os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int follow_symlinks); - -static PyObject * -os_chmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("chmod", "path", 0, PATH_HAVE_FCHMOD); - int mode; - int dir_fd = DEFAULT_DIR_FD; - int follow_symlinks = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&i|$O&p:chmod", _keywords, - path_converter, &path, &mode, FCHMODAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) - goto exit; - return_value = os_chmod_impl(module, &path, mode, dir_fd, follow_symlinks); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=1e9db031aea46422 input=7f1618e5e15cc196]*/ +/*[clinic end generated code: output=96063c976f23106a input=7f1618e5e15cc196]*/ { int result; @@ -3212,41 +2882,9 @@ Change the access permissions of the file given by file descriptor fd. Equivalent to os.chmod(fd, mode). [clinic start generated code]*/ -PyDoc_STRVAR(os_fchmod__doc__, -"fchmod($module, /, fd, mode)\n" -"--\n" -"\n" -"Change the access permissions of the file given by file descriptor fd.\n" -"\n" -"Equivalent to os.chmod(fd, mode)."); - -#define OS_FCHMOD_METHODDEF \ - {"fchmod", (PyCFunction)os_fchmod, METH_VARARGS|METH_KEYWORDS, os_fchmod__doc__}, - -static PyObject * -os_fchmod_impl(PyModuleDef *module, int fd, int mode); - -static PyObject * -os_fchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"fd", "mode", NULL}; - int fd; - int mode; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "ii:fchmod", _keywords, - &fd, &mode)) - goto exit; - return_value = os_fchmod_impl(module, fd, mode); - -exit: - return return_value; -} - static PyObject * os_fchmod_impl(PyModuleDef *module, int fd, int mode) -/*[clinic end generated code: output=3c19fbfd724a8e0f input=8ab11975ca01ee5b]*/ +/*[clinic end generated code: output=2ee31ca226d1ed33 input=8ab11975ca01ee5b]*/ { int res; int async_err = 0; @@ -3277,45 +2915,9 @@ If path is a symlink, this affects the link itself rather than the target. Equivalent to chmod(path, mode, follow_symlinks=False)." [clinic start generated code]*/ -PyDoc_STRVAR(os_lchmod__doc__, -"lchmod($module, /, path, mode)\n" -"--\n" -"\n" -"Change the access permissions of a file, without following symbolic links.\n" -"\n" -"If path is a symlink, this affects the link itself rather than the target.\n" -"Equivalent to chmod(path, mode, follow_symlinks=False).\""); - -#define OS_LCHMOD_METHODDEF \ - {"lchmod", (PyCFunction)os_lchmod, METH_VARARGS|METH_KEYWORDS, os_lchmod__doc__}, - -static PyObject * -os_lchmod_impl(PyModuleDef *module, path_t *path, int mode); - -static PyObject * -os_lchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", NULL}; - path_t path = PATH_T_INITIALIZE("lchmod", "path", 0, 0); - int mode; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&i:lchmod", _keywords, - path_converter, &path, &mode)) - goto exit; - return_value = os_lchmod_impl(module, &path, mode); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_lchmod_impl(PyModuleDef *module, path_t *path, int mode) -/*[clinic end generated code: output=2849977d65f8c68c input=90c5663c7465d24f]*/ +/*[clinic end generated code: output=7c0cc46588d89e46 input=90c5663c7465d24f]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3348,49 +2950,9 @@ unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ -PyDoc_STRVAR(os_chflags__doc__, -"chflags($module, /, path, flags, follow_symlinks=True)\n" -"--\n" -"\n" -"Set file flags.\n" -"\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, chflags will change flags on the symbolic link itself instead of the\n" -" file the link points to.\n" -"follow_symlinks may not be implemented on your platform. If it is\n" -"unavailable, using it will raise a NotImplementedError."); - -#define OS_CHFLAGS_METHODDEF \ - {"chflags", (PyCFunction)os_chflags, METH_VARARGS|METH_KEYWORDS, os_chflags__doc__}, - -static PyObject * -os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, int follow_symlinks); - -static PyObject * -os_chflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "flags", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("chflags", "path", 0, 0); - unsigned long flags; - int follow_symlinks = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&k|p:chflags", _keywords, - path_converter, &path, &flags, &follow_symlinks)) - goto exit; - return_value = os_chflags_impl(module, &path, flags, follow_symlinks); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, int follow_symlinks) -/*[clinic end generated code: output=2767927bf071e3cf input=0327e29feb876236]*/ +/*[clinic end generated code: output=9e5f9417afc20c4b input=0327e29feb876236]*/ { int result; @@ -3429,45 +2991,9 @@ This function will not follow symbolic links. Equivalent to chflags(path, flags, follow_symlinks=False). [clinic start generated code]*/ -PyDoc_STRVAR(os_lchflags__doc__, -"lchflags($module, /, path, flags)\n" -"--\n" -"\n" -"Set file flags.\n" -"\n" -"This function will not follow symbolic links.\n" -"Equivalent to chflags(path, flags, follow_symlinks=False)."); - -#define OS_LCHFLAGS_METHODDEF \ - {"lchflags", (PyCFunction)os_lchflags, METH_VARARGS|METH_KEYWORDS, os_lchflags__doc__}, - -static PyObject * -os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags); - -static PyObject * -os_lchflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "flags", NULL}; - path_t path = PATH_T_INITIALIZE("lchflags", "path", 0, 0); - unsigned long flags; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&k:lchflags", _keywords, - path_converter, &path, &flags)) - goto exit; - return_value = os_lchflags_impl(module, &path, flags); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags) -/*[clinic end generated code: output=bb93b6b8a5e45aa7 input=f9f82ea8b585ca9d]*/ +/*[clinic end generated code: output=6741322fb949661b input=f9f82ea8b585ca9d]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3490,41 +3016,9 @@ Change root directory to path. [clinic start generated code]*/ -PyDoc_STRVAR(os_chroot__doc__, -"chroot($module, /, path)\n" -"--\n" -"\n" -"Change root directory to path."); - -#define OS_CHROOT_METHODDEF \ - {"chroot", (PyCFunction)os_chroot, METH_VARARGS|METH_KEYWORDS, os_chroot__doc__}, - -static PyObject * -os_chroot_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_chroot(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; - path_t path = PATH_T_INITIALIZE("chroot", "path", 0, 0); - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:chroot", _keywords, - path_converter, &path)) - goto exit; - return_value = os_chroot_impl(module, &path); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_chroot_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=15b1256cbe4f24a1 input=14822965652c3dc3]*/ +/*[clinic end generated code: output=b6dbfabe74ecaa9d input=14822965652c3dc3]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3546,38 +3040,9 @@ os.fsync Force write of fd to disk. [clinic start generated code]*/ -PyDoc_STRVAR(os_fsync__doc__, -"fsync($module, /, fd)\n" -"--\n" -"\n" -"Force write of fd to disk."); - -#define OS_FSYNC_METHODDEF \ - {"fsync", (PyCFunction)os_fsync, METH_VARARGS|METH_KEYWORDS, os_fsync__doc__}, - -static PyObject * -os_fsync_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fsync(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; - int fd; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:fsync", _keywords, - fildes_converter, &fd)) - goto exit; - return_value = os_fsync_impl(module, fd); - -exit: - return return_value; -} - static PyObject * os_fsync_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=59f32d3a0b360133 input=21c3645c056967f2]*/ +/*[clinic end generated code: output=83a350851064aea7 input=21c3645c056967f2]*/ { return posix_fildes_fd(fd, fsync); } @@ -3591,27 +3056,9 @@ os.sync Force write of everything to disk. [clinic start generated code]*/ -PyDoc_STRVAR(os_sync__doc__, -"sync($module, /)\n" -"--\n" -"\n" -"Force write of everything to disk."); - -#define OS_SYNC_METHODDEF \ - {"sync", (PyCFunction)os_sync, METH_NOARGS, os_sync__doc__}, - -static PyObject * -os_sync_impl(PyModuleDef *module); - -static PyObject * -os_sync(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_sync_impl(module); -} - static PyObject * os_sync_impl(PyModuleDef *module) -/*[clinic end generated code: output=526c495683d0bb38 input=84749fe5e9b404ff]*/ +/*[clinic end generated code: output=ba524f656c201c40 input=84749fe5e9b404ff]*/ { Py_BEGIN_ALLOW_THREADS sync(); @@ -3634,38 +3081,9 @@ os.fdatasync Force write of fd to disk without forcing update of metadata. [clinic start generated code]*/ -PyDoc_STRVAR(os_fdatasync__doc__, -"fdatasync($module, /, fd)\n" -"--\n" -"\n" -"Force write of fd to disk without forcing update of metadata."); - -#define OS_FDATASYNC_METHODDEF \ - {"fdatasync", (PyCFunction)os_fdatasync, METH_VARARGS|METH_KEYWORDS, os_fdatasync__doc__}, - -static PyObject * -os_fdatasync_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fdatasync(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; - int fd; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:fdatasync", _keywords, - fildes_converter, &fd)) - goto exit; - return_value = os_fdatasync_impl(module, fd); - -exit: - return return_value; -} - static PyObject * os_fdatasync_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=2335fdfd37c92180 input=bc74791ee54dd291]*/ +/*[clinic end generated code: output=e0f04a3aff515b75 input=bc74791ee54dd291]*/ { return posix_fildes_fd(fd, fdatasync); } @@ -3712,71 +3130,11 @@ dir_fd and follow_symlinks may not be implemented on your platform. [clinic start generated code]*/ -PyDoc_STRVAR(os_chown__doc__, -"chown($module, /, path, uid, gid, *, dir_fd=None, follow_symlinks=True)\n" -"--\n" -"\n" -"Change the owner and group id of path to the numeric uid and gid.\\\n" -"\n" -" path\n" -" Path to be examined; can be string, bytes, or open-file-descriptor int.\n" -" dir_fd\n" -" If not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that\n" -" directory.\n" -" follow_symlinks\n" -" If False, and the last element of the path is a symbolic link,\n" -" stat will examine the symbolic link itself instead of the file\n" -" the link points to.\n" -"\n" -"path may always be specified as a string.\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception.\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, chown will modify the symbolic link itself instead of the file the\n" -" link points to.\n" -"It is an error to use dir_fd or follow_symlinks when specifying path as\n" -" an open file descriptor.\n" -"dir_fd and follow_symlinks may not be implemented on your platform.\n" -" If they are unavailable, using them will raise a NotImplementedError."); - -#define OS_CHOWN_METHODDEF \ - {"chown", (PyCFunction)os_chown, METH_VARARGS|METH_KEYWORDS, os_chown__doc__}, - -static PyObject * -os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks); - static PyObject * -os_chown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=59a8db91897fb46c input=a61cc35574814d5d]*/ { - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("chown", "path", 0, PATH_HAVE_FCHOWN); - uid_t uid; - gid_t gid; - int dir_fd = DEFAULT_DIR_FD; - int follow_symlinks = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&O&|$O&p:chown", _keywords, - path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid, FCHOWNAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) - goto exit; - return_value = os_chown_impl(module, &path, uid, gid, dir_fd, follow_symlinks); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - -static PyObject * -os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=22f011e3b4f9ff49 input=a61cc35574814d5d]*/ -{ - int result; + int result; #if !(defined(HAVE_LCHOWN) || defined(HAVE_FCHOWNAT)) if (follow_symlinks_specified("chown", follow_symlinks)) @@ -3841,42 +3199,9 @@ Equivalent to os.chown(fd, uid, gid). [clinic start generated code]*/ -PyDoc_STRVAR(os_fchown__doc__, -"fchown($module, /, fd, uid, gid)\n" -"--\n" -"\n" -"Change the owner and group id of the file specified by file descriptor.\n" -"\n" -"Equivalent to os.chown(fd, uid, gid)."); - -#define OS_FCHOWN_METHODDEF \ - {"fchown", (PyCFunction)os_fchown, METH_VARARGS|METH_KEYWORDS, os_fchown__doc__}, - -static PyObject * -os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid); - -static PyObject * -os_fchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"fd", "uid", "gid", NULL}; - int fd; - uid_t uid; - gid_t gid; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "iO&O&:fchown", _keywords, - &fd, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) - goto exit; - return_value = os_fchown_impl(module, fd, uid, gid); - -exit: - return return_value; -} - static PyObject * os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid) -/*[clinic end generated code: output=687781cb7d8974d6 input=3af544ba1b13a0d7]*/ +/*[clinic end generated code: output=7545abf8f6086d76 input=3af544ba1b13a0d7]*/ { int res; int async_err = 0; @@ -3908,46 +3233,9 @@ This function will not follow symbolic links. Equivalent to os.chown(path, uid, gid, follow_symlinks=False). [clinic start generated code]*/ -PyDoc_STRVAR(os_lchown__doc__, -"lchown($module, /, path, uid, gid)\n" -"--\n" -"\n" -"Change the owner and group id of path to the numeric uid and gid.\n" -"\n" -"This function will not follow symbolic links.\n" -"Equivalent to os.chown(path, uid, gid, follow_symlinks=False)."); - -#define OS_LCHOWN_METHODDEF \ - {"lchown", (PyCFunction)os_lchown, METH_VARARGS|METH_KEYWORDS, os_lchown__doc__}, - -static PyObject * -os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid); - -static PyObject * -os_lchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "uid", "gid", NULL}; - path_t path = PATH_T_INITIALIZE("lchown", "path", 0, 0); - uid_t uid; - gid_t gid; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&O&:lchown", _keywords, - path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) - goto exit; - return_value = os_lchown_impl(module, &path, uid, gid); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid) -/*[clinic end generated code: output=bf25fdb0d25130e2 input=b1c6014d563a7161]*/ +/*[clinic end generated code: output=bb0d2da1579ac275 input=b1c6014d563a7161]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -4020,27 +3308,9 @@ os.getcwd Return a unicode string representing the current working directory. [clinic start generated code]*/ -PyDoc_STRVAR(os_getcwd__doc__, -"getcwd($module, /)\n" -"--\n" -"\n" -"Return a unicode string representing the current working directory."); - -#define OS_GETCWD_METHODDEF \ - {"getcwd", (PyCFunction)os_getcwd, METH_NOARGS, os_getcwd__doc__}, - -static PyObject * -os_getcwd_impl(PyModuleDef *module); - -static PyObject * -os_getcwd(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getcwd_impl(module); -} - static PyObject * os_getcwd_impl(PyModuleDef *module) -/*[clinic end generated code: output=d70b281db5c78ff7 input=f069211bb70e3d39]*/ +/*[clinic end generated code: output=efe3a8c0121525ea input=f069211bb70e3d39]*/ { return posix_getcwd(0); } @@ -4052,27 +3322,9 @@ os.getcwdb Return a bytes string representing the current working directory. [clinic start generated code]*/ -PyDoc_STRVAR(os_getcwdb__doc__, -"getcwdb($module, /)\n" -"--\n" -"\n" -"Return a bytes string representing the current working directory."); - -#define OS_GETCWDB_METHODDEF \ - {"getcwdb", (PyCFunction)os_getcwdb, METH_NOARGS, os_getcwdb__doc__}, - -static PyObject * -os_getcwdb_impl(PyModuleDef *module); - -static PyObject * -os_getcwdb(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getcwdb_impl(module); -} - static PyObject * os_getcwdb_impl(PyModuleDef *module) -/*[clinic end generated code: output=75da47f2d75f9166 input=f6f6a378dad3d9cb]*/ +/*[clinic end generated code: output=7fce42ee4b2a296a input=f6f6a378dad3d9cb]*/ { return posix_getcwd(1); } @@ -4107,58 +3359,9 @@ src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your NotImplementedError. [clinic start generated code]*/ -PyDoc_STRVAR(os_link__doc__, -"link($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None,\n" -" follow_symlinks=True)\n" -"--\n" -"\n" -"Create a hard link to a file.\n" -"\n" -"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" -" descriptor open to a directory, and the respective path string (src or dst)\n" -" should be relative; the path will then be relative to that directory.\n" -"If follow_symlinks is False, and the last element of src is a symbolic\n" -" link, link will create a link to the symbolic link itself instead of the\n" -" file the link points to.\n" -"src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your\n" -" platform. If they are unavailable, using them will raise a\n" -" NotImplementedError."); - -#define OS_LINK_METHODDEF \ - {"link", (PyCFunction)os_link, METH_VARARGS|METH_KEYWORDS, os_link__doc__}, - -static PyObject * -os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks); - -static PyObject * -os_link(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL}; - path_t src = PATH_T_INITIALIZE("link", "src", 0, 0); - path_t dst = PATH_T_INITIALIZE("link", "dst", 0, 0); - int src_dir_fd = DEFAULT_DIR_FD; - int dst_dir_fd = DEFAULT_DIR_FD; - int follow_symlinks = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|$O&O&p:link", _keywords, - path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd, &follow_symlinks)) - goto exit; - return_value = os_link_impl(module, &src, &dst, src_dir_fd, dst_dir_fd, follow_symlinks); - -exit: - /* Cleanup for src */ - path_cleanup(&src); - /* Cleanup for dst */ - path_cleanup(&dst); - - return return_value; -} - static PyObject * os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks) -/*[clinic end generated code: output=53477662fe02e183 input=b0095ebbcbaa7e04]*/ +/*[clinic end generated code: output=c0a9ded8111d2a79 input=b0095ebbcbaa7e04]*/ { #ifdef MS_WINDOWS BOOL result; @@ -4496,52 +3699,9 @@ entries '.' and '..' even if they are present in the directory. [clinic start generated code]*/ -PyDoc_STRVAR(os_listdir__doc__, -"listdir($module, /, path=None)\n" -"--\n" -"\n" -"Return a list containing the names of the files in the directory.\n" -"\n" -"path can be specified as either str or bytes. If path is bytes,\n" -" the filenames returned will also be bytes; in all other circumstances\n" -" the filenames returned will be str.\n" -"If path is None, uses the path=\'.\'.\n" -"On some platforms, path may also be specified as an open file descriptor;\\\n" -" the file descriptor must refer to a directory.\n" -" If this functionality is unavailable, using it raises NotImplementedError.\n" -"\n" -"The list is in arbitrary order. It does not include the special\n" -"entries \'.\' and \'..\' even if they are present in the directory."); - -#define OS_LISTDIR_METHODDEF \ - {"listdir", (PyCFunction)os_listdir, METH_VARARGS|METH_KEYWORDS, os_listdir__doc__}, - -static PyObject * -os_listdir_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_listdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; - path_t path = PATH_T_INITIALIZE("listdir", "path", 1, PATH_HAVE_FDOPENDIR); - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O&:listdir", _keywords, - path_converter, &path)) - goto exit; - return_value = os_listdir_impl(module, &path); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_listdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=e159bd9be6909018 input=09e300416e3cd729]*/ +/*[clinic end generated code: output=1fbe67c1f780c8b7 input=09e300416e3cd729]*/ { #if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR) return _listdir_windows_no_opendir(path, NULL); @@ -4620,37 +3780,9 @@ os._getfinalpathname A helper function for samepath on windows. [clinic start generated code]*/ -PyDoc_STRVAR(os__getfinalpathname__doc__, -"_getfinalpathname($module, path, /)\n" -"--\n" -"\n" -"A helper function for samepath on windows."); - -#define OS__GETFINALPATHNAME_METHODDEF \ - {"_getfinalpathname", (PyCFunction)os__getfinalpathname, METH_VARARGS, os__getfinalpathname__doc__}, - -static PyObject * -os__getfinalpathname_impl(PyModuleDef *module, PyObject *path); - -static PyObject * -os__getfinalpathname(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *path; - - if (!PyArg_ParseTuple(args, - "U:_getfinalpathname", - &path)) - goto exit; - return_value = os__getfinalpathname_impl(module, path); - -exit: - return return_value; -} - static PyObject * os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=4563c6eacf1b0881 input=71d5e89334891bf4]*/ +/*[clinic end generated code: output=8be81a5f51a34bcf input=71d5e89334891bf4]*/ { HANDLE hFile; int buf_size; @@ -4750,38 +3882,9 @@ os._getvolumepathname A helper function for ismount on Win32. [clinic start generated code]*/ -PyDoc_STRVAR(os__getvolumepathname__doc__, -"_getvolumepathname($module, /, path)\n" -"--\n" -"\n" -"A helper function for ismount on Win32."); - -#define OS__GETVOLUMEPATHNAME_METHODDEF \ - {"_getvolumepathname", (PyCFunction)os__getvolumepathname, METH_VARARGS|METH_KEYWORDS, os__getvolumepathname__doc__}, - -static PyObject * -os__getvolumepathname_impl(PyModuleDef *module, PyObject *path); - -static PyObject * -os__getvolumepathname(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; - PyObject *path; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "U:_getvolumepathname", _keywords, - &path)) - goto exit; - return_value = os__getvolumepathname_impl(module, path); - -exit: - return return_value; -} - static PyObject * os__getvolumepathname_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=ac0833b6d6da7657 input=7eacadc40acbda6b]*/ +/*[clinic end generated code: output=79a0ba729f956dbe input=7eacadc40acbda6b]*/ { PyObject *result; wchar_t *path_wchar, *mountpath=NULL; @@ -4847,50 +3950,9 @@ dir_fd may not be implemented on your platform. The mode argument is ignored on Windows. [clinic start generated code]*/ -PyDoc_STRVAR(os_mkdir__doc__, -"mkdir($module, /, path, mode=511, *, dir_fd=None)\n" -"--\n" -"\n" -"Create a directory.\n" -"\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError.\n" -"\n" -"The mode argument is ignored on Windows."); - -#define OS_MKDIR_METHODDEF \ - {"mkdir", (PyCFunction)os_mkdir, METH_VARARGS|METH_KEYWORDS, os_mkdir__doc__}, - -static PyObject * -os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); - -static PyObject * -os_mkdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; - path_t path = PATH_T_INITIALIZE("mkdir", "path", 0, 0); - int mode = 511; - int dir_fd = DEFAULT_DIR_FD; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|i$O&:mkdir", _keywords, - path_converter, &path, &mode, MKDIRAT_DIR_FD_CONVERTER, &dir_fd)) - goto exit; - return_value = os_mkdir_impl(module, &path, mode, dir_fd); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) -/*[clinic end generated code: output=55c6ef2bc1b207e6 input=e965f68377e9b1ce]*/ +/*[clinic end generated code: output=8bf1f738873ef2c5 input=e965f68377e9b1ce]*/ { int result; @@ -4940,37 +4002,9 @@ os.nice Add increment to the priority of process and return the new priority. [clinic start generated code]*/ -PyDoc_STRVAR(os_nice__doc__, -"nice($module, increment, /)\n" -"--\n" -"\n" -"Add increment to the priority of process and return the new priority."); - -#define OS_NICE_METHODDEF \ - {"nice", (PyCFunction)os_nice, METH_VARARGS, os_nice__doc__}, - -static PyObject * -os_nice_impl(PyModuleDef *module, int increment); - -static PyObject * -os_nice(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int increment; - - if (!PyArg_ParseTuple(args, - "i:nice", - &increment)) - goto exit; - return_value = os_nice_impl(module, increment); - -exit: - return return_value; -} - static PyObject * os_nice_impl(PyModuleDef *module, int increment) -/*[clinic end generated code: output=c360dc2a3bd8e3d0 input=864be2d402a21da2]*/ +/*[clinic end generated code: output=8870418a3fc07b51 input=864be2d402a21da2]*/ { int value; @@ -5008,39 +4042,9 @@ os.getpriority Return program scheduling priority. [clinic start generated code]*/ -PyDoc_STRVAR(os_getpriority__doc__, -"getpriority($module, /, which, who)\n" -"--\n" -"\n" -"Return program scheduling priority."); - -#define OS_GETPRIORITY_METHODDEF \ - {"getpriority", (PyCFunction)os_getpriority, METH_VARARGS|METH_KEYWORDS, os_getpriority__doc__}, - -static PyObject * -os_getpriority_impl(PyModuleDef *module, int which, int who); - -static PyObject * -os_getpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"which", "who", NULL}; - int which; - int who; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "ii:getpriority", _keywords, - &which, &who)) - goto exit; - return_value = os_getpriority_impl(module, which, who); - -exit: - return return_value; -} - static PyObject * os_getpriority_impl(PyModuleDef *module, int which, int who) -/*[clinic end generated code: output=81639cf765f05dae input=9be615d40e2544ef]*/ +/*[clinic end generated code: output=4759937aa5b67ed6 input=9be615d40e2544ef]*/ { int retval; @@ -5064,40 +4068,9 @@ os.setpriority Set program scheduling priority. [clinic start generated code]*/ -PyDoc_STRVAR(os_setpriority__doc__, -"setpriority($module, /, which, who, priority)\n" -"--\n" -"\n" -"Set program scheduling priority."); - -#define OS_SETPRIORITY_METHODDEF \ - {"setpriority", (PyCFunction)os_setpriority, METH_VARARGS|METH_KEYWORDS, os_setpriority__doc__}, - -static PyObject * -os_setpriority_impl(PyModuleDef *module, int which, int who, int priority); - -static PyObject * -os_setpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"which", "who", "priority", NULL}; - int which; - int who; - int priority; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "iii:setpriority", _keywords, - &which, &who, &priority)) - goto exit; - return_value = os_setpriority_impl(module, which, who, priority); - -exit: - return return_value; -} - static PyObject * os_setpriority_impl(PyModuleDef *module, int which, int who, int priority) -/*[clinic end generated code: output=ddad62651fb2120c input=710ccbf65b9dc513]*/ +/*[clinic end generated code: output=6497d3301547e7d5 input=710ccbf65b9dc513]*/ { int retval; @@ -5183,52 +4156,9 @@ src_dir_fd and dst_dir_fd, may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError. [clinic start generated code]*/ -PyDoc_STRVAR(os_rename__doc__, -"rename($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n" -"--\n" -"\n" -"Rename a file or directory.\n" -"\n" -"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" -" descriptor open to a directory, and the respective path string (src or dst)\n" -" should be relative; the path will then be relative to that directory.\n" -"src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n" -" If they are unavailable, using them will raise a NotImplementedError."); - -#define OS_RENAME_METHODDEF \ - {"rename", (PyCFunction)os_rename, METH_VARARGS|METH_KEYWORDS, os_rename__doc__}, - -static PyObject * -os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); - -static PyObject * -os_rename(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; - path_t src = PATH_T_INITIALIZE("rename", "src", 0, 0); - path_t dst = PATH_T_INITIALIZE("rename", "dst", 0, 0); - int src_dir_fd = DEFAULT_DIR_FD; - int dst_dir_fd = DEFAULT_DIR_FD; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|$O&O&:rename", _keywords, - path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) - goto exit; - return_value = os_rename_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); - -exit: - /* Cleanup for src */ - path_cleanup(&src); - /* Cleanup for dst */ - path_cleanup(&dst); - - return return_value; -} - static PyObject * os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=c936bdc81f460a1e input=faa61c847912c850]*/ +/*[clinic end generated code: output=1bb520bf2fad186d input=faa61c847912c850]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 0); } @@ -5246,52 +4176,9 @@ src_dir_fd and dst_dir_fd, may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError." [clinic start generated code]*/ -PyDoc_STRVAR(os_replace__doc__, -"replace($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n" -"--\n" -"\n" -"Rename a file or directory, overwriting the destination.\n" -"\n" -"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" -" descriptor open to a directory, and the respective path string (src or dst)\n" -" should be relative; the path will then be relative to that directory.\n" -"src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n" -" If they are unavailable, using them will raise a NotImplementedError.\""); - -#define OS_REPLACE_METHODDEF \ - {"replace", (PyCFunction)os_replace, METH_VARARGS|METH_KEYWORDS, os_replace__doc__}, - -static PyObject * -os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); - -static PyObject * -os_replace(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; - path_t src = PATH_T_INITIALIZE("replace", "src", 0, 0); - path_t dst = PATH_T_INITIALIZE("replace", "dst", 0, 0); - int src_dir_fd = DEFAULT_DIR_FD; - int dst_dir_fd = DEFAULT_DIR_FD; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|$O&O&:replace", _keywords, - path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) - goto exit; - return_value = os_replace_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); - -exit: - /* Cleanup for src */ - path_cleanup(&src); - /* Cleanup for dst */ - path_cleanup(&dst); - - return return_value; -} - static PyObject * os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=224e4710d290d171 input=25515dfb107c8421]*/ +/*[clinic end generated code: output=aa9ddad55fdef8e3 input=25515dfb107c8421]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 1); } @@ -5312,47 +4199,9 @@ dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ -PyDoc_STRVAR(os_rmdir__doc__, -"rmdir($module, /, path, *, dir_fd=None)\n" -"--\n" -"\n" -"Remove a directory.\n" -"\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); - -#define OS_RMDIR_METHODDEF \ - {"rmdir", (PyCFunction)os_rmdir, METH_VARARGS|METH_KEYWORDS, os_rmdir__doc__}, - -static PyObject * -os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_rmdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "dir_fd", NULL}; - path_t path = PATH_T_INITIALIZE("rmdir", "path", 0, 0); - int dir_fd = DEFAULT_DIR_FD; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|$O&:rmdir", _keywords, - path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) - goto exit; - return_value = os_rmdir_impl(module, &path, dir_fd); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=70b9fdbe3bee0591 input=38c8b375ca34a7e2]*/ +/*[clinic end generated code: output=cabadec80d5a77c7 input=38c8b375ca34a7e2]*/ { int result; @@ -5390,42 +4239,9 @@ os.system -> long Execute the command in a subshell. [clinic start generated code]*/ -PyDoc_STRVAR(os_system__doc__, -"system($module, /, command)\n" -"--\n" -"\n" -"Execute the command in a subshell."); - -#define OS_SYSTEM_METHODDEF \ - {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, - -static long -os_system_impl(PyModuleDef *module, Py_UNICODE *command); - -static PyObject * -os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"command", NULL}; - Py_UNICODE *command; - long _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "u:system", _keywords, - &command)) - goto exit; - _return_value = os_system_impl(module, command); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong(_return_value); - -exit: - return return_value; -} - static long os_system_impl(PyModuleDef *module, Py_UNICODE *command) -/*[clinic end generated code: output=29fe699c0b2e9d38 input=303f5ce97df606b0]*/ +/*[clinic end generated code: output=4c3bd5abcd9c29e7 input=303f5ce97df606b0]*/ { long result; Py_BEGIN_ALLOW_THREADS @@ -5442,45 +4258,9 @@ os.system -> long Execute the command in a subshell. [clinic start generated code]*/ -PyDoc_STRVAR(os_system__doc__, -"system($module, /, command)\n" -"--\n" -"\n" -"Execute the command in a subshell."); - -#define OS_SYSTEM_METHODDEF \ - {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, - -static long -os_system_impl(PyModuleDef *module, PyObject *command); - -static PyObject * -os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"command", NULL}; - PyObject *command = NULL; - long _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:system", _keywords, - PyUnicode_FSConverter, &command)) - goto exit; - _return_value = os_system_impl(module, command); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong(_return_value); - -exit: - /* Cleanup for command */ - Py_XDECREF(command); - - return return_value; -} - static long os_system_impl(PyModuleDef *module, PyObject *command) -/*[clinic end generated code: output=5be9f3c40ead3bad input=86a58554ba6094af]*/ +/*[clinic end generated code: output=800f775e10b7be55 input=86a58554ba6094af]*/ { long result; char *bytes = PyBytes_AsString(command); @@ -5502,37 +4282,9 @@ os.umask Set the current numeric umask and return the previous umask. [clinic start generated code]*/ -PyDoc_STRVAR(os_umask__doc__, -"umask($module, mask, /)\n" -"--\n" -"\n" -"Set the current numeric umask and return the previous umask."); - -#define OS_UMASK_METHODDEF \ - {"umask", (PyCFunction)os_umask, METH_VARARGS, os_umask__doc__}, - static PyObject * -os_umask_impl(PyModuleDef *module, int mask); - -static PyObject * -os_umask(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int mask; - - if (!PyArg_ParseTuple(args, - "i:umask", - &mask)) - goto exit; - return_value = os_umask_impl(module, mask); - -exit: - return return_value; -} - -static PyObject * -os_umask_impl(PyModuleDef *module, int mask) -/*[clinic end generated code: output=90048b39d2d4a961 input=ab6bfd9b24d8a7e8]*/ +os_umask_impl(PyModuleDef *module, int mask) +/*[clinic end generated code: output=9e1fe3c9f14d6a05 input=ab6bfd9b24d8a7e8]*/ { int i = (int)umask(mask); if (i < 0) @@ -5596,47 +4348,9 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ -PyDoc_STRVAR(os_unlink__doc__, -"unlink($module, /, path, *, dir_fd=None)\n" -"--\n" -"\n" -"Remove a file (same as remove()).\n" -"\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); - -#define OS_UNLINK_METHODDEF \ - {"unlink", (PyCFunction)os_unlink, METH_VARARGS|METH_KEYWORDS, os_unlink__doc__}, - -static PyObject * -os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_unlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "dir_fd", NULL}; - path_t path = PATH_T_INITIALIZE("unlink", "path", 0, 0); - int dir_fd = DEFAULT_DIR_FD; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|$O&:unlink", _keywords, - path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) - goto exit; - return_value = os_unlink_impl(module, &path, dir_fd); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=59a6e66d67ff2e75 input=d7bcde2b1b2a2552]*/ +/*[clinic end generated code: output=474afd5cd09b237e input=d7bcde2b1b2a2552]*/ { int result; @@ -5675,47 +4389,9 @@ dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ -PyDoc_STRVAR(os_remove__doc__, -"remove($module, /, path, *, dir_fd=None)\n" -"--\n" -"\n" -"Remove a file (same as unlink()).\n" -"\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); - -#define OS_REMOVE_METHODDEF \ - {"remove", (PyCFunction)os_remove, METH_VARARGS|METH_KEYWORDS, os_remove__doc__}, - -static PyObject * -os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_remove(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "dir_fd", NULL}; - path_t path = PATH_T_INITIALIZE("remove", "path", 0, 0); - int dir_fd = DEFAULT_DIR_FD; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|$O&:remove", _keywords, - path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) - goto exit; - return_value = os_remove_impl(module, &path, dir_fd); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=cb170cf1e195b8ed input=e05c5ab55cd30983]*/ +/*[clinic end generated code: output=d0d5149e64832b9e input=e05c5ab55cd30983]*/ { return os_unlink_impl(module, path, dir_fd); } @@ -5759,30 +4435,9 @@ The object behaves like a named tuple with the following fields: [clinic start generated code]*/ -PyDoc_STRVAR(os_uname__doc__, -"uname($module, /)\n" -"--\n" -"\n" -"Return an object identifying the current operating system.\n" -"\n" -"The object behaves like a named tuple with the following fields:\n" -" (sysname, nodename, release, version, machine)"); - -#define OS_UNAME_METHODDEF \ - {"uname", (PyCFunction)os_uname, METH_NOARGS, os_uname__doc__}, - -static PyObject * -os_uname_impl(PyModuleDef *module); - -static PyObject * -os_uname(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_uname_impl(module); -} - static PyObject * os_uname_impl(PyModuleDef *module) -/*[clinic end generated code: output=459a86521ff5041c input=e68bd246db3043ed]*/ +/*[clinic end generated code: output=01e1421b757e753f input=e68bd246db3043ed]*/ { struct utsname u; int res; @@ -6034,68 +4689,9 @@ dir_fd and follow_symlinks may not be available on your platform. [clinic start generated code]*/ -PyDoc_STRVAR(os_utime__doc__, -"utime($module, /, path, times=None, *, ns=None, dir_fd=None,\n" -" follow_symlinks=True)\n" -"--\n" -"\n" -"Set the access and modified time of path.\n" -"\n" -"path may always be specified as a string.\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception.\n" -"\n" -"If times is not None, it must be a tuple (atime, mtime);\n" -" atime and mtime should be expressed as float seconds since the epoch.\n" -"If ns is not None, it must be a tuple (atime_ns, mtime_ns);\n" -" atime_ns and mtime_ns should be expressed as integer nanoseconds\n" -" since the epoch.\n" -"If both times and ns are None, utime uses the current time.\n" -"Specifying tuples for both times and ns is an error.\n" -"\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, utime will modify the symbolic link itself instead of the file the\n" -" link points to.\n" -"It is an error to use dir_fd or follow_symlinks when specifying path\n" -" as an open file descriptor.\n" -"dir_fd and follow_symlinks may not be available on your platform.\n" -" If they are unavailable, using them will raise a NotImplementedError."); - -#define OS_UTIME_METHODDEF \ - {"utime", (PyCFunction)os_utime, METH_VARARGS|METH_KEYWORDS, os_utime__doc__}, - -static PyObject * -os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks); - -static PyObject * -os_utime(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "times", "ns", "dir_fd", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("utime", "path", 0, PATH_UTIME_HAVE_FD); - PyObject *times = NULL; - PyObject *ns = NULL; - int dir_fd = DEFAULT_DIR_FD; - int follow_symlinks = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|O$OO&p:utime", _keywords, - path_converter, &path, ×, &ns, FUTIMENSAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) - goto exit; - return_value = os_utime_impl(module, &path, times, ns, dir_fd, follow_symlinks); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=891489c35cc68c5d input=1f18c17d5941aa82]*/ +/*[clinic end generated code: output=c52d8fd0d1067f0b input=1f18c17d5941aa82]*/ { #ifdef MS_WINDOWS HANDLE hFile; @@ -6262,38 +4858,9 @@ os._exit Exit to the system with specified status, without normal exit processing. [clinic start generated code]*/ -PyDoc_STRVAR(os__exit__doc__, -"_exit($module, /, status)\n" -"--\n" -"\n" -"Exit to the system with specified status, without normal exit processing."); - -#define OS__EXIT_METHODDEF \ - {"_exit", (PyCFunction)os__exit, METH_VARARGS|METH_KEYWORDS, os__exit__doc__}, - -static PyObject * -os__exit_impl(PyModuleDef *module, int status); - -static PyObject * -os__exit(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; - int status; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:_exit", _keywords, - &status)) - goto exit; - return_value = os__exit_impl(module, status); - -exit: - return return_value; -} - static PyObject * os__exit_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=4f9858c4cc2dcb89 input=5e6d57556b0c4a62]*/ +/*[clinic end generated code: output=472a3cbaf68f3621 input=5e6d57556b0c4a62]*/ { _exit(status); return NULL; /* Make gcc -Wall happy */ @@ -6447,46 +5014,9 @@ os.execv Execute an executable path with arguments, replacing current process. [clinic start generated code]*/ -PyDoc_STRVAR(os_execv__doc__, -"execv($module, path, argv, /)\n" -"--\n" -"\n" -"Execute an executable path with arguments, replacing current process.\n" -"\n" -" path\n" -" Path of executable file.\n" -" argv\n" -" Tuple or list of strings."); - -#define OS_EXECV_METHODDEF \ - {"execv", (PyCFunction)os_execv, METH_VARARGS, os_execv__doc__}, - -static PyObject * -os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv); - -static PyObject * -os_execv(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *path = NULL; - PyObject *argv; - - if (!PyArg_ParseTuple(args, - "O&O:execv", - PyUnicode_FSConverter, &path, &argv)) - goto exit; - return_value = os_execv_impl(module, path, argv); - -exit: - /* Cleanup for path */ - Py_XDECREF(path); - - return return_value; -} - static PyObject * os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv) -/*[clinic end generated code: output=b0f5f2caa6097edc input=96041559925e5229]*/ +/*[clinic end generated code: output=9221f08143146fff input=96041559925e5229]*/ { char *path_char; char **argvlist; @@ -6534,50 +5064,9 @@ os.execve Execute an executable path with arguments, replacing current process. [clinic start generated code]*/ -PyDoc_STRVAR(os_execve__doc__, -"execve($module, /, path, argv, env)\n" -"--\n" -"\n" -"Execute an executable path with arguments, replacing current process.\n" -"\n" -" path\n" -" Path of executable file.\n" -" argv\n" -" Tuple or list of strings.\n" -" env\n" -" Dictionary of strings mapping to strings."); - -#define OS_EXECVE_METHODDEF \ - {"execve", (PyCFunction)os_execve, METH_VARARGS|METH_KEYWORDS, os_execve__doc__}, - -static PyObject * -os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, PyObject *env); - -static PyObject * -os_execve(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "argv", "env", NULL}; - path_t path = PATH_T_INITIALIZE("execve", "path", 0, PATH_HAVE_FEXECVE); - PyObject *argv; - PyObject *env; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&OO:execve", _keywords, - path_converter, &path, &argv, &env)) - goto exit; - return_value = os_execve_impl(module, &path, argv, env); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, PyObject *env) -/*[clinic end generated code: output=fb283760f5d15ab7 input=626804fa092606d9]*/ +/*[clinic end generated code: output=7758d4f230d8aac6 input=626804fa092606d9]*/ { char **argvlist = NULL; char **envlist; @@ -6645,49 +5134,9 @@ os.spawnv Execute the program specified by path in a new process. [clinic start generated code]*/ -PyDoc_STRVAR(os_spawnv__doc__, -"spawnv($module, mode, path, argv, /)\n" -"--\n" -"\n" -"Execute the program specified by path in a new process.\n" -"\n" -" mode\n" -" Mode of process creation.\n" -" path\n" -" Path of executable file.\n" -" argv\n" -" Tuple or list of strings."); - -#define OS_SPAWNV_METHODDEF \ - {"spawnv", (PyCFunction)os_spawnv, METH_VARARGS, os_spawnv__doc__}, - -static PyObject * -os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv); - -static PyObject * -os_spawnv(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int mode; - PyObject *path = NULL; - PyObject *argv; - - if (!PyArg_ParseTuple(args, - "iO&O:spawnv", - &mode, PyUnicode_FSConverter, &path, &argv)) - goto exit; - return_value = os_spawnv_impl(module, mode, path, argv); - -exit: - /* Cleanup for path */ - Py_XDECREF(path); - - return return_value; -} - static PyObject * os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv) -/*[clinic end generated code: output=dfee6be062e780e3 input=042c91dfc1e6debc]*/ +/*[clinic end generated code: output=140a7945484c8cc5 input=042c91dfc1e6debc]*/ { char *path_char; char **argvlist; @@ -6762,52 +5211,9 @@ os.spawnve Execute the program specified by path in a new process. [clinic start generated code]*/ -PyDoc_STRVAR(os_spawnve__doc__, -"spawnve($module, mode, path, argv, env, /)\n" -"--\n" -"\n" -"Execute the program specified by path in a new process.\n" -"\n" -" mode\n" -" Mode of process creation.\n" -" path\n" -" Path of executable file.\n" -" argv\n" -" Tuple or list of strings.\n" -" env\n" -" Dictionary of strings mapping to strings."); - -#define OS_SPAWNVE_METHODDEF \ - {"spawnve", (PyCFunction)os_spawnve, METH_VARARGS, os_spawnve__doc__}, - -static PyObject * -os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv, PyObject *env); - -static PyObject * -os_spawnve(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int mode; - PyObject *path = NULL; - PyObject *argv; - PyObject *env; - - if (!PyArg_ParseTuple(args, - "iO&OO:spawnve", - &mode, PyUnicode_FSConverter, &path, &argv, &env)) - goto exit; - return_value = os_spawnve_impl(module, mode, path, argv, env); - -exit: - /* Cleanup for path */ - Py_XDECREF(path); - - return return_value; -} - static PyObject * os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv, PyObject *env) -/*[clinic end generated code: output=6f7df38473f63c7c input=02362fd937963f8f]*/ +/*[clinic end generated code: output=1c52955789461be8 input=02362fd937963f8f]*/ { char *path_char; char **argvlist; @@ -6895,29 +5301,9 @@ Fork a child process with a single multiplexed (i.e., not bound) thread. Return 0 to child process and PID of child to parent process. [clinic start generated code]*/ -PyDoc_STRVAR(os_fork1__doc__, -"fork1($module, /)\n" -"--\n" -"\n" -"Fork a child process with a single multiplexed (i.e., not bound) thread.\n" -"\n" -"Return 0 to child process and PID of child to parent process."); - -#define OS_FORK1_METHODDEF \ - {"fork1", (PyCFunction)os_fork1, METH_NOARGS, os_fork1__doc__}, - -static PyObject * -os_fork1_impl(PyModuleDef *module); - -static PyObject * -os_fork1(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_fork1_impl(module); -} - static PyObject * os_fork1_impl(PyModuleDef *module) -/*[clinic end generated code: output=fa04088d6bc02efa input=12db02167893926e]*/ +/*[clinic end generated code: output=e27b4f66419c9dcf input=12db02167893926e]*/ { pid_t pid; int result = 0; @@ -6952,29 +5338,9 @@ Fork a child process. Return 0 to child process and PID of child to parent process. [clinic start generated code]*/ -PyDoc_STRVAR(os_fork__doc__, -"fork($module, /)\n" -"--\n" -"\n" -"Fork a child process.\n" -"\n" -"Return 0 to child process and PID of child to parent process."); - -#define OS_FORK_METHODDEF \ - {"fork", (PyCFunction)os_fork, METH_NOARGS, os_fork__doc__}, - -static PyObject * -os_fork_impl(PyModuleDef *module); - -static PyObject * -os_fork(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_fork_impl(module); -} - static PyObject * os_fork_impl(PyModuleDef *module) -/*[clinic end generated code: output=b3c8e6bdc11eedc6 input=13c956413110eeaa]*/ +/*[clinic end generated code: output=898b1ecd3498ba12 input=13c956413110eeaa]*/ { pid_t pid; int result = 0; @@ -7010,38 +5376,9 @@ os.sched_get_priority_max Get the maximum scheduling priority for policy. [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_get_priority_max__doc__, -"sched_get_priority_max($module, /, policy)\n" -"--\n" -"\n" -"Get the maximum scheduling priority for policy."); - -#define OS_SCHED_GET_PRIORITY_MAX_METHODDEF \ - {"sched_get_priority_max", (PyCFunction)os_sched_get_priority_max, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_max__doc__}, - -static PyObject * -os_sched_get_priority_max_impl(PyModuleDef *module, int policy); - -static PyObject * -os_sched_get_priority_max(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"policy", NULL}; - int policy; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:sched_get_priority_max", _keywords, - &policy)) - goto exit; - return_value = os_sched_get_priority_max_impl(module, policy); - -exit: - return return_value; -} - static PyObject * os_sched_get_priority_max_impl(PyModuleDef *module, int policy) -/*[clinic end generated code: output=a580a52f25238c1f input=2097b7998eca6874]*/ +/*[clinic end generated code: output=a6a30fa5071f2d81 input=2097b7998eca6874]*/ { int max; @@ -7060,38 +5397,9 @@ os.sched_get_priority_min Get the minimum scheduling priority for policy. [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_get_priority_min__doc__, -"sched_get_priority_min($module, /, policy)\n" -"--\n" -"\n" -"Get the minimum scheduling priority for policy."); - -#define OS_SCHED_GET_PRIORITY_MIN_METHODDEF \ - {"sched_get_priority_min", (PyCFunction)os_sched_get_priority_min, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_min__doc__}, - -static PyObject * -os_sched_get_priority_min_impl(PyModuleDef *module, int policy); - -static PyObject * -os_sched_get_priority_min(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"policy", NULL}; - int policy; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:sched_get_priority_min", _keywords, - &policy)) - goto exit; - return_value = os_sched_get_priority_min_impl(module, policy); - -exit: - return return_value; -} - static PyObject * os_sched_get_priority_min_impl(PyModuleDef *module, int policy) -/*[clinic end generated code: output=bad8ba10e7d0e977 input=21bc8fa0d70983bf]*/ +/*[clinic end generated code: output=5ca3ed6bc43e9b20 input=21bc8fa0d70983bf]*/ { int min = sched_get_priority_min(policy); if (min < 0) @@ -7112,39 +5420,9 @@ Get the scheduling policy for the process identifiedy by pid. Passing 0 for pid returns the scheduling policy for the calling process. [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_getscheduler__doc__, -"sched_getscheduler($module, pid, /)\n" -"--\n" -"\n" -"Get the scheduling policy for the process identifiedy by pid.\n" -"\n" -"Passing 0 for pid returns the scheduling policy for the calling process."); - -#define OS_SCHED_GETSCHEDULER_METHODDEF \ - {"sched_getscheduler", (PyCFunction)os_sched_getscheduler, METH_VARARGS, os_sched_getscheduler__doc__}, - -static PyObject * -os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_getscheduler(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID ":sched_getscheduler", - &pid)) - goto exit; - return_value = os_sched_getscheduler_impl(module, pid); - -exit: - return return_value; -} - static PyObject * os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=e0d6244207b1d828 input=5f14cfd1f189e1a0]*/ +/*[clinic end generated code: output=8cd63c15caf54fa9 input=5f14cfd1f189e1a0]*/ { int policy; @@ -7169,38 +5447,9 @@ os.sched_param.__new__ Current has only one field: sched_priority"); [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_param__doc__, -"sched_param(sched_priority)\n" -"--\n" -"\n" -"Current has only one field: sched_priority\");\n" -"\n" -" sched_priority\n" -" A scheduling parameter."); - -static PyObject * -os_sched_param_impl(PyTypeObject *type, PyObject *sched_priority); - -static PyObject * -os_sched_param(PyTypeObject *type, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"sched_priority", NULL}; - PyObject *sched_priority; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O:sched_param", _keywords, - &sched_priority)) - goto exit; - return_value = os_sched_param_impl(type, sched_priority); - -exit: - return return_value; -} - static PyObject * os_sched_param_impl(PyTypeObject *type, PyObject *sched_priority) -/*[clinic end generated code: output=d3791e345f7fe573 input=73a4c22f7071fc62]*/ +/*[clinic end generated code: output=48f4067d60f48c13 input=73a4c22f7071fc62]*/ { PyObject *res; @@ -7213,6 +5462,8 @@ os_sched_param_impl(PyTypeObject *type, PyObject *sched_priority) } +PyDoc_VAR(os_sched_param__doc__); + static PyStructSequence_Field sched_param_fields[] = { {"sched_priority", "the scheduling priority"}, {0} @@ -7262,42 +5513,9 @@ If pid is 0, the calling process is changed. param is an instance of sched_param. [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_setscheduler__doc__, -"sched_setscheduler($module, pid, policy, param, /)\n" -"--\n" -"\n" -"Set the scheduling policy for the process identified by pid.\n" -"\n" -"If pid is 0, the calling process is changed.\n" -"param is an instance of sched_param."); - -#define OS_SCHED_SETSCHEDULER_METHODDEF \ - {"sched_setscheduler", (PyCFunction)os_sched_setscheduler, METH_VARARGS, os_sched_setscheduler__doc__}, - -static PyObject * -os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, struct sched_param *param); - -static PyObject * -os_sched_setscheduler(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - int policy; - struct sched_param param; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "iO&:sched_setscheduler", - &pid, &policy, convert_sched_param, ¶m)) - goto exit; - return_value = os_sched_setscheduler_impl(module, pid, policy, ¶m); - -exit: - return return_value; -} - static PyObject * os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, struct sched_param *param) -/*[clinic end generated code: output=36abdb73f81c224f input=c581f9469a5327dd]*/ +/*[clinic end generated code: output=97f40f8384e554b0 input=c581f9469a5327dd]*/ { /* ** sched_setscheduler() returns 0 in Linux, but the previous @@ -7323,40 +5541,9 @@ If pid is 0, returns parameters for the calling process. Return value is an instance of sched_param. [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_getparam__doc__, -"sched_getparam($module, pid, /)\n" -"--\n" -"\n" -"Returns scheduling parameters for the process identified by pid.\n" -"\n" -"If pid is 0, returns parameters for the calling process.\n" -"Return value is an instance of sched_param."); - -#define OS_SCHED_GETPARAM_METHODDEF \ - {"sched_getparam", (PyCFunction)os_sched_getparam, METH_VARARGS, os_sched_getparam__doc__}, - -static PyObject * -os_sched_getparam_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_getparam(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID ":sched_getparam", - &pid)) - goto exit; - return_value = os_sched_getparam_impl(module, pid); - -exit: - return return_value; -} - static PyObject * os_sched_getparam_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=b33acc8db004a8c9 input=18a1ef9c2efae296]*/ +/*[clinic end generated code: output=f42c5bd2604ecd08 input=18a1ef9c2efae296]*/ { struct sched_param param; PyObject *result; @@ -7389,41 +5576,9 @@ If pid is 0, sets parameters for the calling process. param should be an instance of sched_param. [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_setparam__doc__, -"sched_setparam($module, pid, param, /)\n" -"--\n" -"\n" -"Set scheduling parameters for the process identified by pid.\n" -"\n" -"If pid is 0, sets parameters for the calling process.\n" -"param should be an instance of sched_param."); - -#define OS_SCHED_SETPARAM_METHODDEF \ - {"sched_setparam", (PyCFunction)os_sched_setparam, METH_VARARGS, os_sched_setparam__doc__}, - -static PyObject * -os_sched_setparam_impl(PyModuleDef *module, pid_t pid, struct sched_param *param); - static PyObject * -os_sched_setparam(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - struct sched_param param; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "O&:sched_setparam", - &pid, convert_sched_param, ¶m)) - goto exit; - return_value = os_sched_setparam_impl(module, pid, ¶m); - -exit: - return return_value; -} - -static PyObject * -os_sched_setparam_impl(PyModuleDef *module, pid_t pid, struct sched_param *param) -/*[clinic end generated code: output=488bdf5bcbe0d4e8 input=6b8d6dfcecdc21bd]*/ +os_sched_setparam_impl(PyModuleDef *module, pid_t pid, struct sched_param *param) +/*[clinic end generated code: output=c6560b34395bb343 input=6b8d6dfcecdc21bd]*/ { if (sched_setparam(pid, param)) return posix_error(); @@ -7443,43 +5598,9 @@ Return the round-robin quantum for the process identified by pid, in seconds. Value returned is a float. [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_rr_get_interval__doc__, -"sched_rr_get_interval($module, pid, /)\n" -"--\n" -"\n" -"Return the round-robin quantum for the process identified by pid, in seconds.\n" -"\n" -"Value returned is a float."); - -#define OS_SCHED_RR_GET_INTERVAL_METHODDEF \ - {"sched_rr_get_interval", (PyCFunction)os_sched_rr_get_interval, METH_VARARGS, os_sched_rr_get_interval__doc__}, - -static double -os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_rr_get_interval(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - double _return_value; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID ":sched_rr_get_interval", - &pid)) - goto exit; - _return_value = os_sched_rr_get_interval_impl(module, pid); - if ((_return_value == -1.0) && PyErr_Occurred()) - goto exit; - return_value = PyFloat_FromDouble(_return_value); - -exit: - return return_value; -} - static double os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=5b3b8d1f27fb2c0a input=2a973da15cca6fae]*/ +/*[clinic end generated code: output=7adc137a86dea581 input=2a973da15cca6fae]*/ { struct timespec interval; if (sched_rr_get_interval(pid, &interval)) { @@ -7497,27 +5618,9 @@ os.sched_yield Voluntarily relinquish the CPU. [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_yield__doc__, -"sched_yield($module, /)\n" -"--\n" -"\n" -"Voluntarily relinquish the CPU."); - -#define OS_SCHED_YIELD_METHODDEF \ - {"sched_yield", (PyCFunction)os_sched_yield, METH_NOARGS, os_sched_yield__doc__}, - -static PyObject * -os_sched_yield_impl(PyModuleDef *module); - -static PyObject * -os_sched_yield(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_sched_yield_impl(module); -} - static PyObject * os_sched_yield_impl(PyModuleDef *module) -/*[clinic end generated code: output=9d2e5f29f1370324 input=e54d6f98189391d4]*/ +/*[clinic end generated code: output=d7bd51869c4cb6a8 input=e54d6f98189391d4]*/ { if (sched_yield()) return posix_error(); @@ -7539,40 +5642,9 @@ Set the CPU affinity of the process identified by pid to mask. mask should be an iterable of integers identifying CPUs. [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_setaffinity__doc__, -"sched_setaffinity($module, pid, mask, /)\n" -"--\n" -"\n" -"Set the CPU affinity of the process identified by pid to mask.\n" -"\n" -"mask should be an iterable of integers identifying CPUs."); - -#define OS_SCHED_SETAFFINITY_METHODDEF \ - {"sched_setaffinity", (PyCFunction)os_sched_setaffinity, METH_VARARGS, os_sched_setaffinity__doc__}, - -static PyObject * -os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask); - -static PyObject * -os_sched_setaffinity(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - PyObject *mask; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "O:sched_setaffinity", - &pid, &mask)) - goto exit; - return_value = os_sched_setaffinity_impl(module, pid, mask); - -exit: - return return_value; -} - static PyObject * os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask) -/*[clinic end generated code: output=5199929738130196 input=a0791a597c7085ba]*/ +/*[clinic end generated code: output=582bcbf40d3253a9 input=a0791a597c7085ba]*/ { int ncpus; size_t setsize; @@ -7666,39 +5738,9 @@ Return the affinity of the process identified by pid. The affinity is returned as a set of CPU identifiers. [clinic start generated code]*/ -PyDoc_STRVAR(os_sched_getaffinity__doc__, -"sched_getaffinity($module, pid, /)\n" -"--\n" -"\n" -"Return the affinity of the process identified by pid.\n" -"\n" -"The affinity is returned as a set of CPU identifiers."); - -#define OS_SCHED_GETAFFINITY_METHODDEF \ - {"sched_getaffinity", (PyCFunction)os_sched_getaffinity, METH_VARARGS, os_sched_getaffinity__doc__}, - -static PyObject * -os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_getaffinity(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID ":sched_getaffinity", - &pid)) - goto exit; - return_value = os_sched_getaffinity_impl(module, pid); - -exit: - return return_value; -} - static PyObject * os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=7b273b0fca9830f0 input=eaf161936874b8a1]*/ +/*[clinic end generated code: output=b431a8f310e369e7 input=eaf161936874b8a1]*/ { int cpu, ncpus, count; size_t setsize; @@ -7754,46 +5796,6 @@ error: #endif /* HAVE_SCHED_H */ -#ifndef OS_SCHED_GET_PRIORITY_MAX_METHODDEF -#define OS_SCHED_GET_PRIORITY_MAX_METHODDEF -#endif /* OS_SCHED_GET_PRIORITY_MAX_METHODDEF */ - -#ifndef OS_SCHED_GET_PRIORITY_MIN_METHODDEF -#define OS_SCHED_GET_PRIORITY_MIN_METHODDEF -#endif /* OS_SCHED_GET_PRIORITY_MIN_METHODDEF */ - -#ifndef OS_SCHED_GETSCHEDULER_METHODDEF -#define OS_SCHED_GETSCHEDULER_METHODDEF -#endif /* OS_SCHED_GETSCHEDULER_METHODDEF */ - -#ifndef OS_SCHED_SETSCHEDULER_METHODDEF -#define OS_SCHED_SETSCHEDULER_METHODDEF -#endif /* OS_SCHED_SETSCHEDULER_METHODDEF */ - -#ifndef OS_SCHED_GETPARAM_METHODDEF -#define OS_SCHED_GETPARAM_METHODDEF -#endif /* OS_SCHED_GETPARAM_METHODDEF */ - -#ifndef OS_SCHED_SETPARAM_METHODDEF -#define OS_SCHED_SETPARAM_METHODDEF -#endif /* OS_SCHED_SETPARAM_METHODDEF */ - -#ifndef OS_SCHED_RR_GET_INTERVAL_METHODDEF -#define OS_SCHED_RR_GET_INTERVAL_METHODDEF -#endif /* OS_SCHED_RR_GET_INTERVAL_METHODDEF */ - -#ifndef OS_SCHED_YIELD_METHODDEF -#define OS_SCHED_YIELD_METHODDEF -#endif /* OS_SCHED_YIELD_METHODDEF */ - -#ifndef OS_SCHED_SETAFFINITY_METHODDEF -#define OS_SCHED_SETAFFINITY_METHODDEF -#endif /* OS_SCHED_SETAFFINITY_METHODDEF */ - -#ifndef OS_SCHED_GETAFFINITY_METHODDEF -#define OS_SCHED_GETAFFINITY_METHODDEF -#endif /* OS_SCHED_GETAFFINITY_METHODDEF */ - /* AIX uses /dev/ptc but is otherwise the same as /dev/ptmx */ /* IRIX has both /dev/ptc and /dev/ptmx, use ptmx */ @@ -7832,30 +5834,9 @@ Return a tuple of (master_fd, slave_fd) containing open file descriptors for both the master and slave ends. [clinic start generated code]*/ -PyDoc_STRVAR(os_openpty__doc__, -"openpty($module, /)\n" -"--\n" -"\n" -"Open a pseudo-terminal.\n" -"\n" -"Return a tuple of (master_fd, slave_fd) containing open file descriptors\n" -"for both the master and slave ends."); - -#define OS_OPENPTY_METHODDEF \ - {"openpty", (PyCFunction)os_openpty, METH_NOARGS, os_openpty__doc__}, - -static PyObject * -os_openpty_impl(PyModuleDef *module); - -static PyObject * -os_openpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_openpty_impl(module); -} - static PyObject * os_openpty_impl(PyModuleDef *module) -/*[clinic end generated code: output=b12d3c1735468464 input=f3d99fd99e762907]*/ +/*[clinic end generated code: output=358e571c1ba135ee input=f3d99fd99e762907]*/ { int master_fd = -1, slave_fd = -1; #ifndef HAVE_OPENPTY @@ -7955,32 +5936,9 @@ and pid of child to the parent process. To both, return fd of newly opened pseudo-terminal. [clinic start generated code]*/ -PyDoc_STRVAR(os_forkpty__doc__, -"forkpty($module, /)\n" -"--\n" -"\n" -"Fork a new process with a new pseudo-terminal as controlling tty.\n" -"\n" -"Returns a tuple of (pid, master_fd).\n" -"Like fork(), return pid of 0 to the child process,\n" -"and pid of child to the parent process.\n" -"To both, return fd of newly opened pseudo-terminal."); - -#define OS_FORKPTY_METHODDEF \ - {"forkpty", (PyCFunction)os_forkpty, METH_NOARGS, os_forkpty__doc__}, - -static PyObject * -os_forkpty_impl(PyModuleDef *module); - -static PyObject * -os_forkpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_forkpty_impl(module); -} - static PyObject * os_forkpty_impl(PyModuleDef *module) -/*[clinic end generated code: output=d4f82958d2ed5cad input=f1f7f4bae3966010]*/ +/*[clinic end generated code: output=a11b8391dce3cb57 input=f1f7f4bae3966010]*/ { int master_fd = -1, result = 0; pid_t pid; @@ -8014,27 +5972,9 @@ os.getegid Return the current process's effective group id. [clinic start generated code]*/ -PyDoc_STRVAR(os_getegid__doc__, -"getegid($module, /)\n" -"--\n" -"\n" -"Return the current process\'s effective group id."); - -#define OS_GETEGID_METHODDEF \ - {"getegid", (PyCFunction)os_getegid, METH_NOARGS, os_getegid__doc__}, - -static PyObject * -os_getegid_impl(PyModuleDef *module); - -static PyObject * -os_getegid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getegid_impl(module); -} - static PyObject * os_getegid_impl(PyModuleDef *module) -/*[clinic end generated code: output=fd12c346fa41cccb input=1596f79ad1107d5d]*/ +/*[clinic end generated code: output=90f433a8c0b1d919 input=1596f79ad1107d5d]*/ { return _PyLong_FromGid(getegid()); } @@ -8048,27 +5988,9 @@ os.geteuid Return the current process's effective user id. [clinic start generated code]*/ -PyDoc_STRVAR(os_geteuid__doc__, -"geteuid($module, /)\n" -"--\n" -"\n" -"Return the current process\'s effective user id."); - -#define OS_GETEUID_METHODDEF \ - {"geteuid", (PyCFunction)os_geteuid, METH_NOARGS, os_geteuid__doc__}, - -static PyObject * -os_geteuid_impl(PyModuleDef *module); - -static PyObject * -os_geteuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_geteuid_impl(module); -} - static PyObject * os_geteuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=03d98e07f4bc03d4 input=4644c662d3bd9f19]*/ +/*[clinic end generated code: output=1a532c4a66874357 input=4644c662d3bd9f19]*/ { return _PyLong_FromUid(geteuid()); } @@ -8082,27 +6004,9 @@ os.getgid Return the current process's group id. [clinic start generated code]*/ -PyDoc_STRVAR(os_getgid__doc__, -"getgid($module, /)\n" -"--\n" -"\n" -"Return the current process\'s group id."); - -#define OS_GETGID_METHODDEF \ - {"getgid", (PyCFunction)os_getgid, METH_NOARGS, os_getgid__doc__}, - -static PyObject * -os_getgid_impl(PyModuleDef *module); - -static PyObject * -os_getgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getgid_impl(module); -} - static PyObject * os_getgid_impl(PyModuleDef *module) -/*[clinic end generated code: output=07b0356121b8098d input=58796344cd87c0f6]*/ +/*[clinic end generated code: output=91a22021b74ea46b input=58796344cd87c0f6]*/ { return _PyLong_FromGid(getgid()); } @@ -8115,27 +6019,9 @@ os.getpid Return the current process id. [clinic start generated code]*/ -PyDoc_STRVAR(os_getpid__doc__, -"getpid($module, /)\n" -"--\n" -"\n" -"Return the current process id."); - -#define OS_GETPID_METHODDEF \ - {"getpid", (PyCFunction)os_getpid, METH_NOARGS, os_getpid__doc__}, - -static PyObject * -os_getpid_impl(PyModuleDef *module); - -static PyObject * -os_getpid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getpid_impl(module); -} - static PyObject * os_getpid_impl(PyModuleDef *module) -/*[clinic end generated code: output=d63a01a3cebc573d input=5a9a00f0ab68aa00]*/ +/*[clinic end generated code: output=8fbf3a934ee09e62 input=5a9a00f0ab68aa00]*/ { return PyLong_FromPid(getpid()); } @@ -8225,27 +6111,9 @@ os.getgroups Return list of supplemental group IDs for the process. [clinic start generated code]*/ -PyDoc_STRVAR(os_getgroups__doc__, -"getgroups($module, /)\n" -"--\n" -"\n" -"Return list of supplemental group IDs for the process."); - -#define OS_GETGROUPS_METHODDEF \ - {"getgroups", (PyCFunction)os_getgroups, METH_NOARGS, os_getgroups__doc__}, - -static PyObject * -os_getgroups_impl(PyModuleDef *module); - -static PyObject * -os_getgroups(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getgroups_impl(module); -} - static PyObject * os_getgroups_impl(PyModuleDef *module) -/*[clinic end generated code: output=d9a3559b2e6f4ab8 input=d3f109412e6a155c]*/ +/*[clinic end generated code: output=6e7c4fd2db6d5c60 input=d3f109412e6a155c]*/ { PyObject *result = NULL; @@ -8398,38 +6266,9 @@ os.getpgid Call the system call getpgid(), and return the result. [clinic start generated code]*/ -PyDoc_STRVAR(os_getpgid__doc__, -"getpgid($module, /, pid)\n" -"--\n" -"\n" -"Call the system call getpgid(), and return the result."); - -#define OS_GETPGID_METHODDEF \ - {"getpgid", (PyCFunction)os_getpgid, METH_VARARGS|METH_KEYWORDS, os_getpgid__doc__}, - -static PyObject * -os_getpgid_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_getpgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"pid", NULL}; - pid_t pid; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "" _Py_PARSE_PID ":getpgid", _keywords, - &pid)) - goto exit; - return_value = os_getpgid_impl(module, pid); - -exit: - return return_value; -} - static PyObject * os_getpgid_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=3db4ed686179160d input=39d710ae3baaf1c7]*/ +/*[clinic end generated code: output=70e713b4d54b7c61 input=39d710ae3baaf1c7]*/ { pid_t pgid = getpgid(pid); if (pgid < 0) @@ -8446,27 +6285,9 @@ os.getpgrp Return the current process group id. [clinic start generated code]*/ -PyDoc_STRVAR(os_getpgrp__doc__, -"getpgrp($module, /)\n" -"--\n" -"\n" -"Return the current process group id."); - -#define OS_GETPGRP_METHODDEF \ - {"getpgrp", (PyCFunction)os_getpgrp, METH_NOARGS, os_getpgrp__doc__}, - -static PyObject * -os_getpgrp_impl(PyModuleDef *module); - -static PyObject * -os_getpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getpgrp_impl(module); -} - static PyObject * os_getpgrp_impl(PyModuleDef *module) -/*[clinic end generated code: output=3b0d3663ea054277 input=6846fb2bb9a3705e]*/ +/*[clinic end generated code: output=cf3403585846811f input=6846fb2bb9a3705e]*/ { #ifdef GETPGRP_HAVE_ARG return PyLong_FromPid(getpgrp(0)); @@ -8484,27 +6305,9 @@ os.setpgrp Make the current process the leader of its process group. [clinic start generated code]*/ -PyDoc_STRVAR(os_setpgrp__doc__, -"setpgrp($module, /)\n" -"--\n" -"\n" -"Make the current process the leader of its process group."); - -#define OS_SETPGRP_METHODDEF \ - {"setpgrp", (PyCFunction)os_setpgrp, METH_NOARGS, os_setpgrp__doc__}, - -static PyObject * -os_setpgrp_impl(PyModuleDef *module); - -static PyObject * -os_setpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_setpgrp_impl(module); -} - static PyObject * os_setpgrp_impl(PyModuleDef *module) -/*[clinic end generated code: output=8fbb0ee29ef6fb2d input=1f0619fcb5731e7e]*/ +/*[clinic end generated code: output=59650f55a963d7ac input=1f0619fcb5731e7e]*/ { #ifdef SETPGRP_HAVE_ARG if (setpgrp(0, 0) < 0) @@ -8571,30 +6374,9 @@ If the parent process has already exited, Windows machines will still return its id; others systems will return the id of the 'init' process (1). [clinic start generated code]*/ -PyDoc_STRVAR(os_getppid__doc__, -"getppid($module, /)\n" -"--\n" -"\n" -"Return the parent\'s process id.\n" -"\n" -"If the parent process has already exited, Windows machines will still\n" -"return its id; others systems will return the id of the \'init\' process (1)."); - -#define OS_GETPPID_METHODDEF \ - {"getppid", (PyCFunction)os_getppid, METH_NOARGS, os_getppid__doc__}, - -static PyObject * -os_getppid_impl(PyModuleDef *module); - -static PyObject * -os_getppid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getppid_impl(module); -} - static PyObject * os_getppid_impl(PyModuleDef *module) -/*[clinic end generated code: output=9ff3b387781edf3a input=e637cb87539c030e]*/ +/*[clinic end generated code: output=4e49c8e7a8738cd2 input=e637cb87539c030e]*/ { #ifdef MS_WINDOWS return win32_getppid(); @@ -8612,27 +6394,9 @@ os.getlogin Return the actual login name. [clinic start generated code]*/ -PyDoc_STRVAR(os_getlogin__doc__, -"getlogin($module, /)\n" -"--\n" -"\n" -"Return the actual login name."); - -#define OS_GETLOGIN_METHODDEF \ - {"getlogin", (PyCFunction)os_getlogin, METH_NOARGS, os_getlogin__doc__}, - -static PyObject * -os_getlogin_impl(PyModuleDef *module); - -static PyObject * -os_getlogin(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getlogin_impl(module); -} - static PyObject * os_getlogin_impl(PyModuleDef *module) -/*[clinic end generated code: output=ab6211dab104cbb2 input=2a21ab1e917163df]*/ +/*[clinic end generated code: output=037ebdb3e4b5dac1 input=2a21ab1e917163df]*/ { PyObject *result = NULL; #ifdef MS_WINDOWS @@ -8673,27 +6437,9 @@ os.getuid Return the current process's user id. [clinic start generated code]*/ -PyDoc_STRVAR(os_getuid__doc__, -"getuid($module, /)\n" -"--\n" -"\n" -"Return the current process\'s user id."); - -#define OS_GETUID_METHODDEF \ - {"getuid", (PyCFunction)os_getuid, METH_NOARGS, os_getuid__doc__}, - -static PyObject * -os_getuid_impl(PyModuleDef *module); - -static PyObject * -os_getuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getuid_impl(module); -} - static PyObject * os_getuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=77e0dcf2e37d1e89 input=b53c8b35f110a516]*/ +/*[clinic end generated code: output=03a8b894cefb3fa5 input=b53c8b35f110a516]*/ { return _PyLong_FromUid(getuid()); } @@ -8715,38 +6461,9 @@ os.kill Kill a process with a signal. [clinic start generated code]*/ -PyDoc_STRVAR(os_kill__doc__, -"kill($module, pid, signal, /)\n" -"--\n" -"\n" -"Kill a process with a signal."); - -#define OS_KILL_METHODDEF \ - {"kill", (PyCFunction)os_kill, METH_VARARGS, os_kill__doc__}, - -static PyObject * -os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal); - -static PyObject * -os_kill(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - Py_ssize_t signal; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "n:kill", - &pid, &signal)) - goto exit; - return_value = os_kill_impl(module, pid, signal); - -exit: - return return_value; -} - static PyObject * os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal) -/*[clinic end generated code: output=2f5c77920ed575e6 input=61a36b86ca275ab9]*/ +/*[clinic end generated code: output=74f907dd00a83c26 input=61a36b86ca275ab9]*/ #ifndef MS_WINDOWS { if (kill(pid, (int)signal) == -1) @@ -8805,38 +6522,9 @@ os.killpg Kill a process group with a signal. [clinic start generated code]*/ -PyDoc_STRVAR(os_killpg__doc__, -"killpg($module, pgid, signal, /)\n" -"--\n" -"\n" -"Kill a process group with a signal."); - -#define OS_KILLPG_METHODDEF \ - {"killpg", (PyCFunction)os_killpg, METH_VARARGS, os_killpg__doc__}, - -static PyObject * -os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal); - -static PyObject * -os_killpg(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pgid; - int signal; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "i:killpg", - &pgid, &signal)) - goto exit; - return_value = os_killpg_impl(module, pgid, signal); - -exit: - return return_value; -} - static PyObject * os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal) -/*[clinic end generated code: output=0e05215d1c007e01 input=38b5449eb8faec19]*/ +/*[clinic end generated code: output=3434a766ef945f93 input=38b5449eb8faec19]*/ { /* XXX some man pages make the `pgid` parameter an int, others a pid_t. Since getpgrp() returns a pid_t, we assume killpg should @@ -8862,37 +6550,9 @@ os.plock Lock program segments into memory."); [clinic start generated code]*/ -PyDoc_STRVAR(os_plock__doc__, -"plock($module, op, /)\n" -"--\n" -"\n" -"Lock program segments into memory.\");"); - -#define OS_PLOCK_METHODDEF \ - {"plock", (PyCFunction)os_plock, METH_VARARGS, os_plock__doc__}, - -static PyObject * -os_plock_impl(PyModuleDef *module, int op); - -static PyObject * -os_plock(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int op; - - if (!PyArg_ParseTuple(args, - "i:plock", - &op)) - goto exit; - return_value = os_plock_impl(module, op); - -exit: - return return_value; -} - static PyObject * os_plock_impl(PyModuleDef *module, int op) -/*[clinic end generated code: output=2744fe4b6e5f4dbc input=e6e5e348e1525f60]*/ +/*[clinic end generated code: output=5cb851f81b914984 input=e6e5e348e1525f60]*/ { if (plock(op) == -1) return posix_error(); @@ -8911,37 +6571,9 @@ os.setuid Set the current process's user id. [clinic start generated code]*/ -PyDoc_STRVAR(os_setuid__doc__, -"setuid($module, uid, /)\n" -"--\n" -"\n" -"Set the current process\'s user id."); - -#define OS_SETUID_METHODDEF \ - {"setuid", (PyCFunction)os_setuid, METH_VARARGS, os_setuid__doc__}, - -static PyObject * -os_setuid_impl(PyModuleDef *module, uid_t uid); - -static PyObject * -os_setuid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - uid_t uid; - - if (!PyArg_ParseTuple(args, - "O&:setuid", - _Py_Uid_Converter, &uid)) - goto exit; - return_value = os_setuid_impl(module, uid); - -exit: - return return_value; -} - static PyObject * os_setuid_impl(PyModuleDef *module, uid_t uid) -/*[clinic end generated code: output=aea344bc22ccf400 input=c921a3285aa22256]*/ +/*[clinic end generated code: output=941ea9a8d1e5d565 input=c921a3285aa22256]*/ { if (setuid(uid) < 0) return posix_error(); @@ -8960,37 +6592,9 @@ os.seteuid Set the current process's effective user id. [clinic start generated code]*/ -PyDoc_STRVAR(os_seteuid__doc__, -"seteuid($module, euid, /)\n" -"--\n" -"\n" -"Set the current process\'s effective user id."); - -#define OS_SETEUID_METHODDEF \ - {"seteuid", (PyCFunction)os_seteuid, METH_VARARGS, os_seteuid__doc__}, - -static PyObject * -os_seteuid_impl(PyModuleDef *module, uid_t euid); - -static PyObject * -os_seteuid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - uid_t euid; - - if (!PyArg_ParseTuple(args, - "O&:seteuid", - _Py_Uid_Converter, &euid)) - goto exit; - return_value = os_seteuid_impl(module, euid); - -exit: - return return_value; -} - static PyObject * os_seteuid_impl(PyModuleDef *module, uid_t euid) -/*[clinic end generated code: output=6e824cce4f3b8a5d input=ba93d927e4781aa9]*/ +/*[clinic end generated code: output=66f4f6823a648d6d input=ba93d927e4781aa9]*/ { if (seteuid(euid) < 0) return posix_error(); @@ -9009,37 +6613,9 @@ os.setegid Set the current process's effective group id. [clinic start generated code]*/ -PyDoc_STRVAR(os_setegid__doc__, -"setegid($module, egid, /)\n" -"--\n" -"\n" -"Set the current process\'s effective group id."); - -#define OS_SETEGID_METHODDEF \ - {"setegid", (PyCFunction)os_setegid, METH_VARARGS, os_setegid__doc__}, - -static PyObject * -os_setegid_impl(PyModuleDef *module, gid_t egid); - -static PyObject * -os_setegid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - gid_t egid; - - if (!PyArg_ParseTuple(args, - "O&:setegid", - _Py_Gid_Converter, &egid)) - goto exit; - return_value = os_setegid_impl(module, egid); - -exit: - return return_value; -} - static PyObject * os_setegid_impl(PyModuleDef *module, gid_t egid) -/*[clinic end generated code: output=80a32263a4d56a9c input=4080526d0ccd6ce3]*/ +/*[clinic end generated code: output=ca094a69a081a60f input=4080526d0ccd6ce3]*/ { if (setegid(egid) < 0) return posix_error(); @@ -9059,38 +6635,9 @@ os.setreuid Set the current process's real and effective user ids. [clinic start generated code]*/ -PyDoc_STRVAR(os_setreuid__doc__, -"setreuid($module, ruid, euid, /)\n" -"--\n" -"\n" -"Set the current process\'s real and effective user ids."); - -#define OS_SETREUID_METHODDEF \ - {"setreuid", (PyCFunction)os_setreuid, METH_VARARGS, os_setreuid__doc__}, - -static PyObject * -os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid); - -static PyObject * -os_setreuid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - uid_t ruid; - uid_t euid; - - if (!PyArg_ParseTuple(args, - "O&O&:setreuid", - _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid)) - goto exit; - return_value = os_setreuid_impl(module, ruid, euid); - -exit: - return return_value; -} - static PyObject * os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid) -/*[clinic end generated code: output=d7f226f943dad739 input=0ca8978de663880c]*/ +/*[clinic end generated code: output=b2938c3e73d27ec7 input=0ca8978de663880c]*/ { if (setreuid(ruid, euid) < 0) { return posix_error(); @@ -9113,38 +6660,9 @@ os.setregid Set the current process's real and effective group ids. [clinic start generated code]*/ -PyDoc_STRVAR(os_setregid__doc__, -"setregid($module, rgid, egid, /)\n" -"--\n" -"\n" -"Set the current process\'s real and effective group ids."); - -#define OS_SETREGID_METHODDEF \ - {"setregid", (PyCFunction)os_setregid, METH_VARARGS, os_setregid__doc__}, - -static PyObject * -os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid); - -static PyObject * -os_setregid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - gid_t rgid; - gid_t egid; - - if (!PyArg_ParseTuple(args, - "O&O&:setregid", - _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid)) - goto exit; - return_value = os_setregid_impl(module, rgid, egid); - -exit: - return return_value; -} - static PyObject * os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid) -/*[clinic end generated code: output=a82d9ab70f8e6562 input=c59499f72846db78]*/ +/*[clinic end generated code: output=db18f1839ababe3d input=c59499f72846db78]*/ { if (setregid(rgid, egid) < 0) return posix_error(); @@ -9162,37 +6680,9 @@ os.setgid Set the current process's group id. [clinic start generated code]*/ -PyDoc_STRVAR(os_setgid__doc__, -"setgid($module, gid, /)\n" -"--\n" -"\n" -"Set the current process\'s group id."); - -#define OS_SETGID_METHODDEF \ - {"setgid", (PyCFunction)os_setgid, METH_VARARGS, os_setgid__doc__}, - -static PyObject * -os_setgid_impl(PyModuleDef *module, gid_t gid); - -static PyObject * -os_setgid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - gid_t gid; - - if (!PyArg_ParseTuple(args, - "O&:setgid", - _Py_Gid_Converter, &gid)) - goto exit; - return_value = os_setgid_impl(module, gid); - -exit: - return return_value; -} - static PyObject * os_setgid_impl(PyModuleDef *module, gid_t gid) -/*[clinic end generated code: output=08287886db435f23 input=27d30c4059045dc6]*/ +/*[clinic end generated code: output=756cb42c6abd9d87 input=27d30c4059045dc6]*/ { if (setgid(gid) < 0) return posix_error(); @@ -9211,18 +6701,9 @@ os.setgroups Set the groups of the current process to list. [clinic start generated code]*/ -PyDoc_STRVAR(os_setgroups__doc__, -"setgroups($module, groups, /)\n" -"--\n" -"\n" -"Set the groups of the current process to list."); - -#define OS_SETGROUPS_METHODDEF \ - {"setgroups", (PyCFunction)os_setgroups, METH_O, os_setgroups__doc__}, - static PyObject * os_setgroups(PyModuleDef *module, PyObject *groups) -/*[clinic end generated code: output=0b8de65d5b3cda94 input=fa742ca3daf85a7e]*/ +/*[clinic end generated code: output=7945c2e3cc817c58 input=fa742ca3daf85a7e]*/ { int i, len; gid_t grouplist[MAX_GROUPS]; @@ -9335,41 +6816,9 @@ Returns a tuple of information about the child process: (pid, status, rusage) [clinic start generated code]*/ -PyDoc_STRVAR(os_wait3__doc__, -"wait3($module, /, options)\n" -"--\n" -"\n" -"Wait for completion of a child process.\n" -"\n" -"Returns a tuple of information about the child process:\n" -" (pid, status, rusage)"); - -#define OS_WAIT3_METHODDEF \ - {"wait3", (PyCFunction)os_wait3, METH_VARARGS|METH_KEYWORDS, os_wait3__doc__}, - -static PyObject * -os_wait3_impl(PyModuleDef *module, int options); - -static PyObject * -os_wait3(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"options", NULL}; - int options; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:wait3", _keywords, - &options)) - goto exit; - return_value = os_wait3_impl(module, options); - -exit: - return return_value; -} - static PyObject * os_wait3_impl(PyModuleDef *module, int options) -/*[clinic end generated code: output=1f2a63b6a93cbb57 input=8ac4c56956b61710]*/ +/*[clinic end generated code: output=e18af4924dc54945 input=8ac4c56956b61710]*/ { pid_t pid; struct rusage ru; @@ -9404,42 +6853,9 @@ Returns a tuple of information about the child process: (pid, status, rusage) [clinic start generated code]*/ -PyDoc_STRVAR(os_wait4__doc__, -"wait4($module, /, pid, options)\n" -"--\n" -"\n" -"Wait for completion of a specific child process.\n" -"\n" -"Returns a tuple of information about the child process:\n" -" (pid, status, rusage)"); - -#define OS_WAIT4_METHODDEF \ - {"wait4", (PyCFunction)os_wait4, METH_VARARGS|METH_KEYWORDS, os_wait4__doc__}, - -static PyObject * -os_wait4_impl(PyModuleDef *module, pid_t pid, int options); - -static PyObject * -os_wait4(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"pid", "options", NULL}; - pid_t pid; - int options; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "" _Py_PARSE_PID "i:wait4", _keywords, - &pid, &options)) - goto exit; - return_value = os_wait4_impl(module, pid, options); - -exit: - return return_value; -} - static PyObject * os_wait4_impl(PyModuleDef *module, pid_t pid, int options) -/*[clinic end generated code: output=20dfb05289d37dc6 input=d11deed0750600ba]*/ +/*[clinic end generated code: output=714f19e6ff01e099 input=d11deed0750600ba]*/ { pid_t res; struct rusage ru; @@ -9479,50 +6895,9 @@ Returns either waitid_result or None if WNOHANG is specified and there are no children in a waitable state. [clinic start generated code]*/ -PyDoc_STRVAR(os_waitid__doc__, -"waitid($module, idtype, id, options, /)\n" -"--\n" -"\n" -"Returns the result of waiting for a process or processes.\n" -"\n" -" idtype\n" -" Must be one of be P_PID, P_PGID or P_ALL.\n" -" id\n" -" The id to wait on.\n" -" options\n" -" Constructed from the ORing of one or more of WEXITED, WSTOPPED\n" -" or WCONTINUED and additionally may be ORed with WNOHANG or WNOWAIT.\n" -"\n" -"Returns either waitid_result or None if WNOHANG is specified and there are\n" -"no children in a waitable state."); - -#define OS_WAITID_METHODDEF \ - {"waitid", (PyCFunction)os_waitid, METH_VARARGS, os_waitid__doc__}, - -static PyObject * -os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options); - -static PyObject * -os_waitid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - idtype_t idtype; - id_t id; - int options; - - if (!PyArg_ParseTuple(args, - "i" _Py_PARSE_PID "i:waitid", - &idtype, &id, &options)) - goto exit; - return_value = os_waitid_impl(module, idtype, id, options); - -exit: - return return_value; -} - static PyObject * os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options) -/*[clinic end generated code: output=fb44bf97f01021b2 input=d8e7f76e052b7920]*/ +/*[clinic end generated code: output=5c0192750e22fa2e input=d8e7f76e052b7920]*/ { PyObject *result; int res; @@ -9575,43 +6950,9 @@ Returns a tuple of information regarding the child process: The options argument is ignored on Windows. [clinic start generated code]*/ -PyDoc_STRVAR(os_waitpid__doc__, -"waitpid($module, pid, options, /)\n" -"--\n" -"\n" -"Wait for completion of a given child process.\n" -"\n" -"Returns a tuple of information regarding the child process:\n" -" (pid, status)\n" -"\n" -"The options argument is ignored on Windows."); - -#define OS_WAITPID_METHODDEF \ - {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, - -static PyObject * -os_waitpid_impl(PyModuleDef *module, pid_t pid, int options); - -static PyObject * -os_waitpid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - int options; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "i:waitpid", - &pid, &options)) - goto exit; - return_value = os_waitpid_impl(module, pid, options); - -exit: - return return_value; -} - static PyObject * os_waitpid_impl(PyModuleDef *module, pid_t pid, int options) -/*[clinic end generated code: output=095a6b00af70b7ac input=0bf1666b8758fda3]*/ +/*[clinic end generated code: output=5e3593353d54b15b input=0bf1666b8758fda3]*/ { pid_t res; int async_err = 0; @@ -9644,43 +6985,9 @@ Returns a tuple of information regarding the process: The options argument is ignored on Windows. [clinic start generated code]*/ -PyDoc_STRVAR(os_waitpid__doc__, -"waitpid($module, pid, options, /)\n" -"--\n" -"\n" -"Wait for completion of a given process.\n" -"\n" -"Returns a tuple of information regarding the process:\n" -" (pid, status << 8)\n" -"\n" -"The options argument is ignored on Windows."); - -#define OS_WAITPID_METHODDEF \ - {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, - -static PyObject * -os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options); - -static PyObject * -os_waitpid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - Py_intptr_t pid; - int options; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_INTPTR "i:waitpid", - &pid, &options)) - goto exit; - return_value = os_waitpid_impl(module, pid, options); - -exit: - return return_value; -} - static PyObject * os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options) -/*[clinic end generated code: output=c20b95b15ad44a3a input=444c8f51cca5b862]*/ +/*[clinic end generated code: output=fc1d520db019625f input=444c8f51cca5b862]*/ { int status; Py_intptr_t res; @@ -9710,30 +7017,9 @@ Returns a tuple of information about the child process: (pid, status) [clinic start generated code]*/ -PyDoc_STRVAR(os_wait__doc__, -"wait($module, /)\n" -"--\n" -"\n" -"Wait for completion of a child process.\n" -"\n" -"Returns a tuple of information about the child process:\n" -" (pid, status)"); - -#define OS_WAIT_METHODDEF \ - {"wait", (PyCFunction)os_wait, METH_NOARGS, os_wait__doc__}, - -static PyObject * -os_wait_impl(PyModuleDef *module); - -static PyObject * -os_wait(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_wait_impl(module); -} - static PyObject * os_wait_impl(PyModuleDef *module) -/*[clinic end generated code: output=2a83a9d164e7e6a8 input=03b0182d4a4700ce]*/ +/*[clinic end generated code: output=4a7f4978393e0654 input=03b0182d4a4700ce]*/ { pid_t pid; int async_err = 0; @@ -10059,56 +7345,9 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ -PyDoc_STRVAR(os_symlink__doc__, -"symlink($module, /, src, dst, target_is_directory=False, *, dir_fd=None)\n" -"--\n" -"\n" -"Create a symbolic link pointing to src named dst.\n" -"\n" -"target_is_directory is required on Windows if the target is to be\n" -" interpreted as a directory. (On Windows, symlink requires\n" -" Windows 6.0 or greater, and raises a NotImplementedError otherwise.)\n" -" target_is_directory is ignored on non-Windows platforms.\n" -"\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); - -#define OS_SYMLINK_METHODDEF \ - {"symlink", (PyCFunction)os_symlink, METH_VARARGS|METH_KEYWORDS, os_symlink__doc__}, - -static PyObject * -os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd); - -static PyObject * -os_symlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"src", "dst", "target_is_directory", "dir_fd", NULL}; - path_t src = PATH_T_INITIALIZE("symlink", "src", 0, 0); - path_t dst = PATH_T_INITIALIZE("symlink", "dst", 0, 0); - int target_is_directory = 0; - int dir_fd = DEFAULT_DIR_FD; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|p$O&:symlink", _keywords, - path_converter, &src, path_converter, &dst, &target_is_directory, SYMLINKAT_DIR_FD_CONVERTER, &dir_fd)) - goto exit; - return_value = os_symlink_impl(module, &src, &dst, target_is_directory, dir_fd); - -exit: - /* Cleanup for src */ - path_cleanup(&src); - /* Cleanup for dst */ - path_cleanup(&dst); - - return return_value; -} - static PyObject * os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd) -/*[clinic end generated code: output=1a31e6d88aafe9b6 input=e820ec4472547bc3]*/ +/*[clinic end generated code: output=11aa03f278bb2c8a input=e820ec4472547bc3]*/ { #ifdef MS_WINDOWS DWORD result; @@ -10255,31 +7494,9 @@ The object returned behaves like a named tuple with these fields: All fields are floating point numbers. [clinic start generated code]*/ -PyDoc_STRVAR(os_times__doc__, -"times($module, /)\n" -"--\n" -"\n" -"Return a collection containing process timing information.\n" -"\n" -"The object returned behaves like a named tuple with these fields:\n" -" (utime, stime, cutime, cstime, elapsed_time)\n" -"All fields are floating point numbers."); - -#define OS_TIMES_METHODDEF \ - {"times", (PyCFunction)os_times, METH_NOARGS, os_times__doc__}, - -static PyObject * -os_times_impl(PyModuleDef *module); - -static PyObject * -os_times(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_times_impl(module); -} - static PyObject * os_times_impl(PyModuleDef *module) -/*[clinic end generated code: output=b86896d031a9b768 input=2bf9df3d6ab2e48b]*/ +/*[clinic end generated code: output=df0a63ebe6e6f091 input=2bf9df3d6ab2e48b]*/ #ifdef MS_WINDOWS { FILETIME create, exit, kernel, user; @@ -10331,37 +7548,9 @@ os.getsid Call the system call getsid(pid) and return the result. [clinic start generated code]*/ -PyDoc_STRVAR(os_getsid__doc__, -"getsid($module, pid, /)\n" -"--\n" -"\n" -"Call the system call getsid(pid) and return the result."); - -#define OS_GETSID_METHODDEF \ - {"getsid", (PyCFunction)os_getsid, METH_VARARGS, os_getsid__doc__}, - -static PyObject * -os_getsid_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_getsid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID ":getsid", - &pid)) - goto exit; - return_value = os_getsid_impl(module, pid); - -exit: - return return_value; -} - static PyObject * os_getsid_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=ea8390f395f4e0e1 input=eeb2b923a30ce04e]*/ +/*[clinic end generated code: output=a074f80c0e6bfb38 input=eeb2b923a30ce04e]*/ { int sid; sid = getsid(pid); @@ -10379,27 +7568,9 @@ os.setsid Call the system call setsid(). [clinic start generated code]*/ -PyDoc_STRVAR(os_setsid__doc__, -"setsid($module, /)\n" -"--\n" -"\n" -"Call the system call setsid()."); - -#define OS_SETSID_METHODDEF \ - {"setsid", (PyCFunction)os_setsid, METH_NOARGS, os_setsid__doc__}, - -static PyObject * -os_setsid_impl(PyModuleDef *module); - -static PyObject * -os_setsid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_setsid_impl(module); -} - static PyObject * os_setsid_impl(PyModuleDef *module) -/*[clinic end generated code: output=2a9a1435d8d764d5 input=5fff45858e2f0776]*/ +/*[clinic end generated code: output=398fc152ae327330 input=5fff45858e2f0776]*/ { if (setsid() < 0) return posix_error(); @@ -10419,38 +7590,9 @@ os.setpgid Call the system call setpgid(pid, pgrp). [clinic start generated code]*/ -PyDoc_STRVAR(os_setpgid__doc__, -"setpgid($module, pid, pgrp, /)\n" -"--\n" -"\n" -"Call the system call setpgid(pid, pgrp)."); - -#define OS_SETPGID_METHODDEF \ - {"setpgid", (PyCFunction)os_setpgid, METH_VARARGS, os_setpgid__doc__}, - -static PyObject * -os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp); - -static PyObject * -os_setpgid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - pid_t pid; - pid_t pgrp; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "" _Py_PARSE_PID ":setpgid", - &pid, &pgrp)) - goto exit; - return_value = os_setpgid_impl(module, pid, pgrp); - -exit: - return return_value; -} - static PyObject * os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp) -/*[clinic end generated code: output=7ad79b725f890e1f input=fceb395eca572e1a]*/ +/*[clinic end generated code: output=7079a8e932912841 input=fceb395eca572e1a]*/ { if (setpgid(pid, pgrp) < 0) return posix_error(); @@ -10469,37 +7611,9 @@ os.tcgetpgrp Return the process group associated with the terminal specified by fd. [clinic start generated code]*/ -PyDoc_STRVAR(os_tcgetpgrp__doc__, -"tcgetpgrp($module, fd, /)\n" -"--\n" -"\n" -"Return the process group associated with the terminal specified by fd."); - -#define OS_TCGETPGRP_METHODDEF \ - {"tcgetpgrp", (PyCFunction)os_tcgetpgrp, METH_VARARGS, os_tcgetpgrp__doc__}, - -static PyObject * -os_tcgetpgrp_impl(PyModuleDef *module, int fd); - -static PyObject * -os_tcgetpgrp(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - - if (!PyArg_ParseTuple(args, - "i:tcgetpgrp", - &fd)) - goto exit; - return_value = os_tcgetpgrp_impl(module, fd); - -exit: - return return_value; -} - static PyObject * os_tcgetpgrp_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=abcf52ed4c8d22cb input=7f6c18eac10ada86]*/ +/*[clinic end generated code: output=ebb6dc5f111c7dc0 input=7f6c18eac10ada86]*/ { pid_t pgid = tcgetpgrp(fd); if (pgid < 0) @@ -10520,38 +7634,9 @@ os.tcsetpgrp Set the process group associated with the terminal specified by fd. [clinic start generated code]*/ -PyDoc_STRVAR(os_tcsetpgrp__doc__, -"tcsetpgrp($module, fd, pgid, /)\n" -"--\n" -"\n" -"Set the process group associated with the terminal specified by fd."); - -#define OS_TCSETPGRP_METHODDEF \ - {"tcsetpgrp", (PyCFunction)os_tcsetpgrp, METH_VARARGS, os_tcsetpgrp__doc__}, - -static PyObject * -os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid); - -static PyObject * -os_tcsetpgrp(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - pid_t pgid; - - if (!PyArg_ParseTuple(args, - "i" _Py_PARSE_PID ":tcsetpgrp", - &fd, &pgid)) - goto exit; - return_value = os_tcsetpgrp_impl(module, fd, pgid); - -exit: - return return_value; -} - static PyObject * os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid) -/*[clinic end generated code: output=76f9bb8fd00f20f5 input=5bdc997c6a619020]*/ +/*[clinic end generated code: output=3e4b05177462cd22 input=5bdc997c6a619020]*/ { if (tcsetpgrp(fd, pgid) < 0) return posix_error(); @@ -10584,53 +7669,9 @@ dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ -PyDoc_STRVAR(os_open__doc__, -"open($module, /, path, flags, mode=511, *, dir_fd=None)\n" -"--\n" -"\n" -"Open a file for low level IO. Returns a file descriptor (integer).\n" -"\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); - -#define OS_OPEN_METHODDEF \ - {"open", (PyCFunction)os_open, METH_VARARGS|METH_KEYWORDS, os_open__doc__}, - -static int -os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd); - -static PyObject * -os_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "flags", "mode", "dir_fd", NULL}; - path_t path = PATH_T_INITIALIZE("open", "path", 0, 0); - int flags; - int mode = 511; - int dir_fd = DEFAULT_DIR_FD; - int _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&i|i$O&:open", _keywords, - path_converter, &path, &flags, &mode, OPENAT_DIR_FD_CONVERTER, &dir_fd)) - goto exit; - _return_value = os_open_impl(module, &path, flags, mode, dir_fd); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong((long)_return_value); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static int os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd) -/*[clinic end generated code: output=05b68fc4ed5e29c9 input=ad8623b29acd2934]*/ +/*[clinic end generated code: output=c95a64f0e62f199b input=ad8623b29acd2934]*/ { int fd; int async_err = 0; @@ -10688,38 +7729,9 @@ os.close Close a file descriptor. [clinic start generated code]*/ -PyDoc_STRVAR(os_close__doc__, -"close($module, /, fd)\n" -"--\n" -"\n" -"Close a file descriptor."); - -#define OS_CLOSE_METHODDEF \ - {"close", (PyCFunction)os_close, METH_VARARGS|METH_KEYWORDS, os_close__doc__}, - -static PyObject * -os_close_impl(PyModuleDef *module, int fd); - static PyObject * -os_close(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; - int fd; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:close", _keywords, - &fd)) - goto exit; - return_value = os_close_impl(module, fd); - -exit: - return return_value; -} - -static PyObject * -os_close_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=927004e29ad55808 input=2bc42451ca5c3223]*/ +os_close_impl(PyModuleDef *module, int fd) +/*[clinic end generated code: output=47bf2ea536445a26 input=2bc42451ca5c3223]*/ { int res; if (!_PyVerify_fd(fd)) @@ -10747,38 +7759,9 @@ os.closerange Closes all file descriptors in [fd_low, fd_high), ignoring errors. [clinic start generated code]*/ -PyDoc_STRVAR(os_closerange__doc__, -"closerange($module, fd_low, fd_high, /)\n" -"--\n" -"\n" -"Closes all file descriptors in [fd_low, fd_high), ignoring errors."); - -#define OS_CLOSERANGE_METHODDEF \ - {"closerange", (PyCFunction)os_closerange, METH_VARARGS, os_closerange__doc__}, - -static PyObject * -os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high); - -static PyObject * -os_closerange(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd_low; - int fd_high; - - if (!PyArg_ParseTuple(args, - "ii:closerange", - &fd_low, &fd_high)) - goto exit; - return_value = os_closerange_impl(module, fd_low, fd_high); - -exit: - return return_value; -} - static PyObject * os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high) -/*[clinic end generated code: output=0a929ece386811c3 input=5855a3d053ebd4ec]*/ +/*[clinic end generated code: output=70e6adb95220ba96 input=5855a3d053ebd4ec]*/ { int i; Py_BEGIN_ALLOW_THREADS @@ -10799,41 +7782,9 @@ os.dup -> int Return a duplicate of a file descriptor. [clinic start generated code]*/ -PyDoc_STRVAR(os_dup__doc__, -"dup($module, fd, /)\n" -"--\n" -"\n" -"Return a duplicate of a file descriptor."); - -#define OS_DUP_METHODDEF \ - {"dup", (PyCFunction)os_dup, METH_VARARGS, os_dup__doc__}, - -static int -os_dup_impl(PyModuleDef *module, int fd); - -static PyObject * -os_dup(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - int _return_value; - - if (!PyArg_ParseTuple(args, - "i:dup", - &fd)) - goto exit; - _return_value = os_dup_impl(module, fd); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_dup_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=75943e057b25e1bd input=6f10f7ea97f7852a]*/ +/*[clinic end generated code: output=f4bbac8c7652d05e input=6f10f7ea97f7852a]*/ { return _Py_dup(fd); } @@ -10848,40 +7799,9 @@ os.dup2 Duplicate file descriptor. [clinic start generated code]*/ -PyDoc_STRVAR(os_dup2__doc__, -"dup2($module, /, fd, fd2, inheritable=True)\n" -"--\n" -"\n" -"Duplicate file descriptor."); - -#define OS_DUP2_METHODDEF \ - {"dup2", (PyCFunction)os_dup2, METH_VARARGS|METH_KEYWORDS, os_dup2__doc__}, - -static PyObject * -os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable); - -static PyObject * -os_dup2(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"fd", "fd2", "inheritable", NULL}; - int fd; - int fd2; - int inheritable = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "ii|p:dup2", _keywords, - &fd, &fd2, &inheritable)) - goto exit; - return_value = os_dup2_impl(module, fd, fd2, inheritable); - -exit: - return return_value; -} - static PyObject * os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable) -/*[clinic end generated code: output=531e482dd11a99a0 input=76e96f511be0352f]*/ +/*[clinic end generated code: output=9a099d95881a7923 input=76e96f511be0352f]*/ { int res; #if defined(HAVE_DUP3) && \ @@ -10974,46 +7894,9 @@ Apply, test or remove a POSIX lock on an open file descriptor. [clinic start generated code]*/ -PyDoc_STRVAR(os_lockf__doc__, -"lockf($module, fd, command, length, /)\n" -"--\n" -"\n" -"Apply, test or remove a POSIX lock on an open file descriptor.\n" -"\n" -" fd\n" -" An open file descriptor.\n" -" command\n" -" One of F_LOCK, F_TLOCK, F_ULOCK or F_TEST.\n" -" length\n" -" The number of bytes to lock, starting at the current position."); - -#define OS_LOCKF_METHODDEF \ - {"lockf", (PyCFunction)os_lockf, METH_VARARGS, os_lockf__doc__}, - -static PyObject * -os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length); - -static PyObject * -os_lockf(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - int command; - Py_off_t length; - - if (!PyArg_ParseTuple(args, - "iiO&:lockf", - &fd, &command, Py_off_t_converter, &length)) - goto exit; - return_value = os_lockf_impl(module, fd, command, length); - -exit: - return return_value; -} - static PyObject * os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length) -/*[clinic end generated code: output=1b28346ac7335c0f input=65da41d2106e9b79]*/ +/*[clinic end generated code: output=25ff778f9e2fbf1b input=65da41d2106e9b79]*/ { int res; @@ -11043,46 +7926,9 @@ Return the new cursor position in number of bytes relative to the beginning of the file. [clinic start generated code]*/ -PyDoc_STRVAR(os_lseek__doc__, -"lseek($module, fd, position, how, /)\n" -"--\n" -"\n" -"Set the position of a file descriptor. Return the new position.\n" -"\n" -"Return the new cursor position in number of bytes\n" -"relative to the beginning of the file."); - -#define OS_LSEEK_METHODDEF \ - {"lseek", (PyCFunction)os_lseek, METH_VARARGS, os_lseek__doc__}, - -static Py_off_t -os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how); - -static PyObject * -os_lseek(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - Py_off_t position; - int how; - Py_off_t _return_value; - - if (!PyArg_ParseTuple(args, - "iO&i:lseek", - &fd, Py_off_t_converter, &position, &how)) - goto exit; - _return_value = os_lseek_impl(module, fd, position, how); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromPy_off_t(_return_value); - -exit: - return return_value; -} - static Py_off_t os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how) -/*[clinic end generated code: output=88cfc146f55667af input=902654ad3f96a6d3]*/ +/*[clinic end generated code: output=65d4ab96d664998c input=902654ad3f96a6d3]*/ { Py_off_t result; @@ -11129,38 +7975,9 @@ os.read Read from a file descriptor. Returns a bytes object. [clinic start generated code]*/ -PyDoc_STRVAR(os_read__doc__, -"read($module, fd, length, /)\n" -"--\n" -"\n" -"Read from a file descriptor. Returns a bytes object."); - -#define OS_READ_METHODDEF \ - {"read", (PyCFunction)os_read, METH_VARARGS, os_read__doc__}, - -static PyObject * -os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length); - -static PyObject * -os_read(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - Py_ssize_t length; - - if (!PyArg_ParseTuple(args, - "in:read", - &fd, &length)) - goto exit; - return_value = os_read_impl(module, fd, length); - -exit: - return return_value; -} - static PyObject * os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length) -/*[clinic end generated code: output=1f3bc27260a24968 input=1df2eaa27c0bf1d3]*/ +/*[clinic end generated code: output=be24f44178455e8b input=1df2eaa27c0bf1d3]*/ { Py_ssize_t n; PyObject *buffer; @@ -11270,50 +8087,9 @@ readv returns the total number of bytes read, which may be less than the total capacity of all the buffers. [clinic start generated code]*/ -PyDoc_STRVAR(os_readv__doc__, -"readv($module, fd, buffers, /)\n" -"--\n" -"\n" -"Read from a file descriptor fd into an iterable of buffers.\n" -"\n" -"The buffers should be mutable buffers accepting bytes.\n" -"readv will transfer data into each buffer until it is full\n" -"and then move on to the next buffer in the sequence to hold\n" -"the rest of the data.\n" -"\n" -"readv returns the total number of bytes read,\n" -"which may be less than the total capacity of all the buffers."); - -#define OS_READV_METHODDEF \ - {"readv", (PyCFunction)os_readv, METH_VARARGS, os_readv__doc__}, - -static Py_ssize_t -os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers); - -static PyObject * -os_readv(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - PyObject *buffers; - Py_ssize_t _return_value; - - if (!PyArg_ParseTuple(args, - "iO:readv", - &fd, &buffers)) - goto exit; - _return_value = os_readv_impl(module, fd, buffers); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromSsize_t(_return_value); - -exit: - return return_value; -} - static Py_ssize_t os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers) -/*[clinic end generated code: output=72748b1c32a6e2a1 input=e679eb5dbfa0357d]*/ +/*[clinic end generated code: output=00fc56ff1800059f input=e679eb5dbfa0357d]*/ { int cnt; Py_ssize_t n; @@ -11366,42 +8142,9 @@ Read length bytes from file descriptor fd, starting at offset bytes from the beginning of the file. The file offset remains unchanged. [clinic start generated code]*/ -PyDoc_STRVAR(os_pread__doc__, -"pread($module, fd, length, offset, /)\n" -"--\n" -"\n" -"Read a number of bytes from a file descriptor starting at a particular offset.\n" -"\n" -"Read length bytes from file descriptor fd, starting at offset bytes from\n" -"the beginning of the file. The file offset remains unchanged."); - -#define OS_PREAD_METHODDEF \ - {"pread", (PyCFunction)os_pread, METH_VARARGS, os_pread__doc__}, - -static PyObject * -os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset); - -static PyObject * -os_pread(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - int length; - Py_off_t offset; - - if (!PyArg_ParseTuple(args, - "iiO&:pread", - &fd, &length, Py_off_t_converter, &offset)) - goto exit; - return_value = os_pread_impl(module, fd, length, offset); - -exit: - return return_value; -} - static PyObject * os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset) -/*[clinic end generated code: output=7b62bf6c06e20ae8 input=084948dcbaa35d4c]*/ +/*[clinic end generated code: output=90d1fed87f68fa33 input=084948dcbaa35d4c]*/ { Py_ssize_t n; int async_err = 0; @@ -11446,46 +8189,9 @@ os.write -> Py_ssize_t Write a bytes object to a file descriptor. [clinic start generated code]*/ -PyDoc_STRVAR(os_write__doc__, -"write($module, fd, data, /)\n" -"--\n" -"\n" -"Write a bytes object to a file descriptor."); - -#define OS_WRITE_METHODDEF \ - {"write", (PyCFunction)os_write, METH_VARARGS, os_write__doc__}, - -static Py_ssize_t -os_write_impl(PyModuleDef *module, int fd, Py_buffer *data); - -static PyObject * -os_write(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - Py_buffer data = {NULL, NULL}; - Py_ssize_t _return_value; - - if (!PyArg_ParseTuple(args, - "iy*:write", - &fd, &data)) - goto exit; - _return_value = os_write_impl(module, fd, &data); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromSsize_t(_return_value); - -exit: - /* Cleanup for data */ - if (data.obj) - PyBuffer_Release(&data); - - return return_value; -} - static Py_ssize_t os_write_impl(PyModuleDef *module, int fd, Py_buffer *data) -/*[clinic end generated code: output=aeb96acfdd4d5112 input=3207e28963234f3c]*/ +/*[clinic end generated code: output=58845c93c9ee1dda input=3207e28963234f3c]*/ { return _Py_write(fd, data->buf, data->len); } @@ -11651,41 +8357,9 @@ Like stat(), but for an open file descriptor. Equivalent to os.stat(fd). [clinic start generated code]*/ -PyDoc_STRVAR(os_fstat__doc__, -"fstat($module, /, fd)\n" -"--\n" -"\n" -"Perform a stat system call on the given file descriptor.\n" -"\n" -"Like stat(), but for an open file descriptor.\n" -"Equivalent to os.stat(fd)."); - -#define OS_FSTAT_METHODDEF \ - {"fstat", (PyCFunction)os_fstat, METH_VARARGS|METH_KEYWORDS, os_fstat__doc__}, - -static PyObject * -os_fstat_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; - int fd; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:fstat", _keywords, - &fd)) - goto exit; - return_value = os_fstat_impl(module, fd); - -exit: - return return_value; -} - static PyObject * os_fstat_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=dae4a9678c7bd881 input=27e0e0ebbe5600c9]*/ +/*[clinic end generated code: output=d71fe98bf042b626 input=27e0e0ebbe5600c9]*/ { STRUCT_STAT st; int res; @@ -11719,44 +8393,9 @@ Return True if the file descriptor is an open file descriptor connected to the slave end of a terminal. [clinic start generated code]*/ -PyDoc_STRVAR(os_isatty__doc__, -"isatty($module, fd, /)\n" -"--\n" -"\n" -"Return True if the fd is connected to a terminal.\n" -"\n" -"Return True if the file descriptor is an open file descriptor\n" -"connected to the slave end of a terminal."); - -#define OS_ISATTY_METHODDEF \ - {"isatty", (PyCFunction)os_isatty, METH_VARARGS, os_isatty__doc__}, - -static int -os_isatty_impl(PyModuleDef *module, int fd); - -static PyObject * -os_isatty(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - int _return_value; - - if (!PyArg_ParseTuple(args, - "i:isatty", - &fd)) - goto exit; - _return_value = os_isatty_impl(module, fd); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyBool_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_isatty_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=4bfadbfe22715097 input=08ce94aa1eaf7b5e]*/ +/*[clinic end generated code: output=acec9d3c29d16d33 input=08ce94aa1eaf7b5e]*/ { if (!_PyVerify_fd(fd)) return 0; @@ -11774,30 +8413,9 @@ Returns a tuple of two file descriptors: (read_fd, write_fd) [clinic start generated code]*/ -PyDoc_STRVAR(os_pipe__doc__, -"pipe($module, /)\n" -"--\n" -"\n" -"Create a pipe.\n" -"\n" -"Returns a tuple of two file descriptors:\n" -" (read_fd, write_fd)"); - -#define OS_PIPE_METHODDEF \ - {"pipe", (PyCFunction)os_pipe, METH_NOARGS, os_pipe__doc__}, - -static PyObject * -os_pipe_impl(PyModuleDef *module); - -static PyObject * -os_pipe(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_pipe_impl(module); -} - static PyObject * os_pipe_impl(PyModuleDef *module) -/*[clinic end generated code: output=0da2479f2266e774 input=02535e8c8fa6c4d4]*/ +/*[clinic end generated code: output=6b0cd3f868ec3c40 input=02535e8c8fa6c4d4]*/ { int fds[2]; #ifdef MS_WINDOWS @@ -11882,43 +8500,9 @@ flags can be constructed by ORing together one or more of these values: O_NONBLOCK, O_CLOEXEC. [clinic start generated code]*/ -PyDoc_STRVAR(os_pipe2__doc__, -"pipe2($module, flags, /)\n" -"--\n" -"\n" -"Create a pipe with flags set atomically.\n" -"\n" -"Returns a tuple of two file descriptors:\n" -" (read_fd, write_fd)\n" -"\n" -"flags can be constructed by ORing together one or more of these values:\n" -"O_NONBLOCK, O_CLOEXEC."); - -#define OS_PIPE2_METHODDEF \ - {"pipe2", (PyCFunction)os_pipe2, METH_VARARGS, os_pipe2__doc__}, - -static PyObject * -os_pipe2_impl(PyModuleDef *module, int flags); - -static PyObject * -os_pipe2(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int flags; - - if (!PyArg_ParseTuple(args, - "i:pipe2", - &flags)) - goto exit; - return_value = os_pipe2_impl(module, flags); - -exit: - return return_value; -} - static PyObject * os_pipe2_impl(PyModuleDef *module, int flags) -/*[clinic end generated code: output=9e27c799ce19220b input=f261b6e7e63c6817]*/ +/*[clinic end generated code: output=c15b6075d0c6b2e7 input=f261b6e7e63c6817]*/ { int fds[2]; int res; @@ -11944,45 +8528,9 @@ Returns the total number of bytes written. buffers must be a sequence of bytes-like objects. [clinic start generated code]*/ -PyDoc_STRVAR(os_writev__doc__, -"writev($module, fd, buffers, /)\n" -"--\n" -"\n" -"Iterate over buffers, and write the contents of each to a file descriptor.\n" -"\n" -"Returns the total number of bytes written.\n" -"buffers must be a sequence of bytes-like objects."); - -#define OS_WRITEV_METHODDEF \ - {"writev", (PyCFunction)os_writev, METH_VARARGS, os_writev__doc__}, - -static Py_ssize_t -os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers); - -static PyObject * -os_writev(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - PyObject *buffers; - Py_ssize_t _return_value; - - if (!PyArg_ParseTuple(args, - "iO:writev", - &fd, &buffers)) - goto exit; - _return_value = os_writev_impl(module, fd, buffers); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromSsize_t(_return_value); - -exit: - return return_value; -} - static Py_ssize_t os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers) -/*[clinic end generated code: output=591c662dccbe4951 input=5b8d17fe4189d2fe]*/ +/*[clinic end generated code: output=a48925dbf2d5c238 input=5b8d17fe4189d2fe]*/ { int cnt; Py_ssize_t result; @@ -12032,51 +8580,9 @@ the file. Returns the number of bytes writte. Does not change the current file offset. [clinic start generated code]*/ -PyDoc_STRVAR(os_pwrite__doc__, -"pwrite($module, fd, buffer, offset, /)\n" -"--\n" -"\n" -"Write bytes to a file descriptor starting at a particular offset.\n" -"\n" -"Write buffer to fd, starting at offset bytes from the beginning of\n" -"the file. Returns the number of bytes writte. Does not change the\n" -"current file offset."); - -#define OS_PWRITE_METHODDEF \ - {"pwrite", (PyCFunction)os_pwrite, METH_VARARGS, os_pwrite__doc__}, - -static Py_ssize_t -os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, Py_off_t offset); - -static PyObject * -os_pwrite(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - Py_buffer buffer = {NULL, NULL}; - Py_off_t offset; - Py_ssize_t _return_value; - - if (!PyArg_ParseTuple(args, - "iy*O&:pwrite", - &fd, &buffer, Py_off_t_converter, &offset)) - goto exit; - _return_value = os_pwrite_impl(module, fd, &buffer, offset); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromSsize_t(_return_value); - -exit: - /* Cleanup for buffer */ - if (buffer.obj) - PyBuffer_Release(&buffer); - - return return_value; -} - static Py_ssize_t os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, Py_off_t offset) -/*[clinic end generated code: output=ec9cc5b2238e96a7 input=19903f1b3dd26377]*/ +/*[clinic end generated code: output=95225f3b496feaf3 input=19903f1b3dd26377]*/ { Py_ssize_t size; int async_err = 0; @@ -12116,48 +8622,9 @@ dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ -PyDoc_STRVAR(os_mkfifo__doc__, -"mkfifo($module, /, path, mode=438, *, dir_fd=None)\n" -"--\n" -"\n" -"Create a \"fifo\" (a POSIX named pipe).\n" -"\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); - -#define OS_MKFIFO_METHODDEF \ - {"mkfifo", (PyCFunction)os_mkfifo, METH_VARARGS|METH_KEYWORDS, os_mkfifo__doc__}, - -static PyObject * -os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); - -static PyObject * -os_mkfifo(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; - path_t path = PATH_T_INITIALIZE("mkfifo", "path", 0, 0); - int mode = 438; - int dir_fd = DEFAULT_DIR_FD; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|i$O&:mkfifo", _keywords, - path_converter, &path, &mode, MKFIFOAT_DIR_FD_CONVERTER, &dir_fd)) - goto exit; - return_value = os_mkfifo_impl(module, &path, mode, dir_fd); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) -/*[clinic end generated code: output=b3321927546893d0 input=73032e98a36e0e19]*/ +/*[clinic end generated code: output=8f5f5e72c630049a input=73032e98a36e0e19]*/ { int result; int async_err = 0; @@ -12206,59 +8673,12 @@ dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ -PyDoc_STRVAR(os_mknod__doc__, -"mknod($module, /, path, mode=384, device=0, *, dir_fd=None)\n" -"--\n" -"\n" -"Create a node in the file system.\n" -"\n" -"Create a node in the file system (file, device special file or named pipe)\n" -"at path. mode specifies both the permissions to use and the\n" -"type of node to be created, being combined (bitwise OR) with one of\n" -"S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. If S_IFCHR or S_IFBLK is set on mode,\n" -"device defines the newly created device special file (probably using\n" -"os.makedev()). Otherwise device is ignored.\n" -"\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); - -#define OS_MKNOD_METHODDEF \ - {"mknod", (PyCFunction)os_mknod, METH_VARARGS|METH_KEYWORDS, os_mknod__doc__}, - -static PyObject * -os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, int dir_fd); - static PyObject * -os_mknod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, int dir_fd) +/*[clinic end generated code: output=f7f813e8847de12f input=ee44531551a4d83b]*/ { - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", "device", "dir_fd", NULL}; - path_t path = PATH_T_INITIALIZE("mknod", "path", 0, 0); - int mode = 384; - dev_t device = 0; - int dir_fd = DEFAULT_DIR_FD; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|iO&$O&:mknod", _keywords, - path_converter, &path, &mode, _Py_Dev_Converter, &device, MKNODAT_DIR_FD_CONVERTER, &dir_fd)) - goto exit; - return_value = os_mknod_impl(module, &path, mode, device, dir_fd); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - -static PyObject * -os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, int dir_fd) -/*[clinic end generated code: output=f71d54eaf9bb6f1a input=ee44531551a4d83b]*/ -{ - int result; - int async_err = 0; + int result; + int async_err = 0; do { Py_BEGIN_ALLOW_THREADS @@ -12289,41 +8709,9 @@ os.major -> unsigned_int Extracts a device major number from a raw device number. [clinic start generated code]*/ -PyDoc_STRVAR(os_major__doc__, -"major($module, device, /)\n" -"--\n" -"\n" -"Extracts a device major number from a raw device number."); - -#define OS_MAJOR_METHODDEF \ - {"major", (PyCFunction)os_major, METH_VARARGS, os_major__doc__}, - -static unsigned int -os_major_impl(PyModuleDef *module, dev_t device); - -static PyObject * -os_major(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - dev_t device; - unsigned int _return_value; - - if (!PyArg_ParseTuple(args, - "O&:major", - _Py_Dev_Converter, &device)) - goto exit; - _return_value = os_major_impl(module, device); - if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); - -exit: - return return_value; -} - static unsigned int os_major_impl(PyModuleDef *module, dev_t device) -/*[clinic end generated code: output=a2d06e908ebf95b5 input=1e16a4d30c4d4462]*/ +/*[clinic end generated code: output=ba55693ab49bac34 input=1e16a4d30c4d4462]*/ { return major(device); } @@ -12338,41 +8726,9 @@ os.minor -> unsigned_int Extracts a device minor number from a raw device number. [clinic start generated code]*/ -PyDoc_STRVAR(os_minor__doc__, -"minor($module, device, /)\n" -"--\n" -"\n" -"Extracts a device minor number from a raw device number."); - -#define OS_MINOR_METHODDEF \ - {"minor", (PyCFunction)os_minor, METH_VARARGS, os_minor__doc__}, - -static unsigned int -os_minor_impl(PyModuleDef *module, dev_t device); - -static PyObject * -os_minor(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - dev_t device; - unsigned int _return_value; - - if (!PyArg_ParseTuple(args, - "O&:minor", - _Py_Dev_Converter, &device)) - goto exit; - _return_value = os_minor_impl(module, device); - if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); - -exit: - return return_value; -} - static unsigned int os_minor_impl(PyModuleDef *module, dev_t device) -/*[clinic end generated code: output=6332287ee3f006e2 input=0842c6d23f24c65e]*/ +/*[clinic end generated code: output=2867219ebf274e27 input=0842c6d23f24c65e]*/ { return minor(device); } @@ -12388,42 +8744,9 @@ os.makedev -> dev_t Composes a raw device number from the major and minor device numbers. [clinic start generated code]*/ -PyDoc_STRVAR(os_makedev__doc__, -"makedev($module, major, minor, /)\n" -"--\n" -"\n" -"Composes a raw device number from the major and minor device numbers."); - -#define OS_MAKEDEV_METHODDEF \ - {"makedev", (PyCFunction)os_makedev, METH_VARARGS, os_makedev__doc__}, - -static dev_t -os_makedev_impl(PyModuleDef *module, int major, int minor); - -static PyObject * -os_makedev(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int major; - int minor; - dev_t _return_value; - - if (!PyArg_ParseTuple(args, - "ii:makedev", - &major, &minor)) - goto exit; - _return_value = os_makedev_impl(module, major, minor); - if ((_return_value == (dev_t)-1) && PyErr_Occurred()) - goto exit; - return_value = _PyLong_FromDev(_return_value); - -exit: - return return_value; -} - static dev_t os_makedev_impl(PyModuleDef *module, int major, int minor) -/*[clinic end generated code: output=38e9a9774c96511a input=4b9fd8fc73cbe48f]*/ +/*[clinic end generated code: output=7cb6264352437660 input=4b9fd8fc73cbe48f]*/ { return makedev(major, minor); } @@ -12441,38 +8764,9 @@ os.ftruncate Truncate a file, specified by file descriptor, to a specific length. [clinic start generated code]*/ -PyDoc_STRVAR(os_ftruncate__doc__, -"ftruncate($module, fd, length, /)\n" -"--\n" -"\n" -"Truncate a file, specified by file descriptor, to a specific length."); - -#define OS_FTRUNCATE_METHODDEF \ - {"ftruncate", (PyCFunction)os_ftruncate, METH_VARARGS, os_ftruncate__doc__}, - -static PyObject * -os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length); - -static PyObject * -os_ftruncate(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - Py_off_t length; - - if (!PyArg_ParseTuple(args, - "iO&:ftruncate", - &fd, Py_off_t_converter, &length)) - goto exit; - return_value = os_ftruncate_impl(module, fd, length); - -exit: - return return_value; -} - static PyObject * os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length) -/*[clinic end generated code: output=62326766cb9b76bf input=63b43641e52818f2]*/ +/*[clinic end generated code: output=3666f401d76bf834 input=63b43641e52818f2]*/ { int result; int async_err = 0; @@ -12502,45 +8796,9 @@ On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception. [clinic start generated code]*/ -PyDoc_STRVAR(os_truncate__doc__, -"truncate($module, /, path, length)\n" -"--\n" -"\n" -"Truncate a file, specified by path, to a specific length.\n" -"\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception."); - -#define OS_TRUNCATE_METHODDEF \ - {"truncate", (PyCFunction)os_truncate, METH_VARARGS|METH_KEYWORDS, os_truncate__doc__}, - -static PyObject * -os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length); - -static PyObject * -os_truncate(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "length", NULL}; - path_t path = PATH_T_INITIALIZE("truncate", "path", 0, PATH_HAVE_FTRUNCATE); - Py_off_t length; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&:truncate", _keywords, - path_converter, &path, Py_off_t_converter, &length)) - goto exit; - return_value = os_truncate_impl(module, &path, length); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length) -/*[clinic end generated code: output=6bd76262d2e027c6 input=77229cf0b50a9b77]*/ +/*[clinic end generated code: output=f60a9e08370e9e2e input=77229cf0b50a9b77]*/ { int result; @@ -12584,42 +8842,9 @@ Ensure that the file specified by fd encompasses a range of bytes starting at offset bytes from the beginning and continuing for length bytes. [clinic start generated code]*/ -PyDoc_STRVAR(os_posix_fallocate__doc__, -"posix_fallocate($module, fd, offset, length, /)\n" -"--\n" -"\n" -"Ensure a file has allocated at least a particular number of bytes on disk.\n" -"\n" -"Ensure that the file specified by fd encompasses a range of bytes\n" -"starting at offset bytes from the beginning and continuing for length bytes."); - -#define OS_POSIX_FALLOCATE_METHODDEF \ - {"posix_fallocate", (PyCFunction)os_posix_fallocate, METH_VARARGS, os_posix_fallocate__doc__}, - -static PyObject * -os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length); - -static PyObject * -os_posix_fallocate(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - Py_off_t offset; - Py_off_t length; - - if (!PyArg_ParseTuple(args, - "iO&O&:posix_fallocate", - &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length)) - goto exit; - return_value = os_posix_fallocate_impl(module, fd, offset, length); - -exit: - return return_value; -} - static PyObject * os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length) -/*[clinic end generated code: output=0cd702d2065c79db input=d7a2ef0ab2ca52fb]*/ +/*[clinic end generated code: output=8ae5f7837004d454 input=d7a2ef0ab2ca52fb]*/ { int result; int async_err = 0; @@ -12658,48 +8883,9 @@ POSIX_FADV_RANDOM, POSIX_FADV_NOREUSE, POSIX_FADV_WILLNEED, or POSIX_FADV_DONTNEED. [clinic start generated code]*/ -PyDoc_STRVAR(os_posix_fadvise__doc__, -"posix_fadvise($module, fd, offset, length, advice, /)\n" -"--\n" -"\n" -"Announce an intention to access data in a specific pattern.\n" -"\n" -"Announce an intention to access data in a specific pattern, thus allowing\n" -"the kernel to make optimizations.\n" -"The advice applies to the region of the file specified by fd starting at\n" -"offset and continuing for length bytes.\n" -"advice is one of POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL,\n" -"POSIX_FADV_RANDOM, POSIX_FADV_NOREUSE, POSIX_FADV_WILLNEED, or\n" -"POSIX_FADV_DONTNEED."); - -#define OS_POSIX_FADVISE_METHODDEF \ - {"posix_fadvise", (PyCFunction)os_posix_fadvise, METH_VARARGS, os_posix_fadvise__doc__}, - -static PyObject * -os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length, int advice); - -static PyObject * -os_posix_fadvise(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - Py_off_t offset; - Py_off_t length; - int advice; - - if (!PyArg_ParseTuple(args, - "iO&O&i:posix_fadvise", - &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length, &advice)) - goto exit; - return_value = os_posix_fadvise_impl(module, fd, offset, length, advice); - -exit: - return return_value; -} - static PyObject * os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length, int advice) -/*[clinic end generated code: output=dad93f32c04dd4f7 input=0fbe554edc2f04b5]*/ +/*[clinic end generated code: output=0e3f09f651661257 input=0fbe554edc2f04b5]*/ { int result; int async_err = 0; @@ -12748,38 +8934,9 @@ os.putenv Change or add an environment variable. [clinic start generated code]*/ -PyDoc_STRVAR(os_putenv__doc__, -"putenv($module, name, value, /)\n" -"--\n" -"\n" -"Change or add an environment variable."); - -#define OS_PUTENV_METHODDEF \ - {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, - -static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); - -static PyObject * -os_putenv(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *name; - PyObject *value; - - if (!PyArg_ParseTuple(args, - "UU:putenv", - &name, &value)) - goto exit; - return_value = os_putenv_impl(module, name, value); - -exit: - return return_value; -} - static PyObject * os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) -/*[clinic end generated code: output=5ce9ef9b15606e7e input=ba586581c2e6105f]*/ +/*[clinic end generated code: output=a2438cf95e5a0c1c input=ba586581c2e6105f]*/ { wchar_t *env; @@ -12821,43 +8978,9 @@ os.putenv Change or add an environment variable. [clinic start generated code]*/ -PyDoc_STRVAR(os_putenv__doc__, -"putenv($module, name, value, /)\n" -"--\n" -"\n" -"Change or add an environment variable."); - -#define OS_PUTENV_METHODDEF \ - {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, - -static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); - -static PyObject * -os_putenv(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *name = NULL; - PyObject *value = NULL; - - if (!PyArg_ParseTuple(args, - "O&O&:putenv", - PyUnicode_FSConverter, &name, PyUnicode_FSConverter, &value)) - goto exit; - return_value = os_putenv_impl(module, name, value); - -exit: - /* Cleanup for name */ - Py_XDECREF(name); - /* Cleanup for value */ - Py_XDECREF(value); - - return return_value; -} - static PyObject * os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) -/*[clinic end generated code: output=85ab223393dc7afd input=a97bc6152f688d31]*/ +/*[clinic end generated code: output=a2438cf95e5a0c1c input=a97bc6152f688d31]*/ { PyObject *bytes = NULL; char *env; @@ -12892,40 +9015,9 @@ os.unsetenv Delete an environment variable. [clinic start generated code]*/ -PyDoc_STRVAR(os_unsetenv__doc__, -"unsetenv($module, name, /)\n" -"--\n" -"\n" -"Delete an environment variable."); - -#define OS_UNSETENV_METHODDEF \ - {"unsetenv", (PyCFunction)os_unsetenv, METH_VARARGS, os_unsetenv__doc__}, - -static PyObject * -os_unsetenv_impl(PyModuleDef *module, PyObject *name); - -static PyObject * -os_unsetenv(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *name = NULL; - - if (!PyArg_ParseTuple(args, - "O&:unsetenv", - PyUnicode_FSConverter, &name)) - goto exit; - return_value = os_unsetenv_impl(module, name); - -exit: - /* Cleanup for name */ - Py_XDECREF(name); - - return return_value; -} - static PyObject * os_unsetenv_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=91318c995f9a0767 input=2bb5288a599c7107]*/ +/*[clinic end generated code: output=25994b57016a2dc9 input=2bb5288a599c7107]*/ { #ifndef HAVE_BROKEN_UNSETENV int err; @@ -12962,37 +9054,9 @@ os.strerror Translate an error code to a message string. [clinic start generated code]*/ -PyDoc_STRVAR(os_strerror__doc__, -"strerror($module, code, /)\n" -"--\n" -"\n" -"Translate an error code to a message string."); - -#define OS_STRERROR_METHODDEF \ - {"strerror", (PyCFunction)os_strerror, METH_VARARGS, os_strerror__doc__}, - -static PyObject * -os_strerror_impl(PyModuleDef *module, int code); - -static PyObject * -os_strerror(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int code; - - if (!PyArg_ParseTuple(args, - "i:strerror", - &code)) - goto exit; - return_value = os_strerror_impl(module, code); - -exit: - return return_value; -} - static PyObject * os_strerror_impl(PyModuleDef *module, int code) -/*[clinic end generated code: output=8665c70bb2ca4720 input=75a8673d97915a91]*/ +/*[clinic end generated code: output=0280c6af51e5c9fe input=75a8673d97915a91]*/ { char *message = strerror(code); if (message == NULL) { @@ -13015,41 +9079,9 @@ os.WCOREDUMP -> bool Return True if the process returning status was dumped to a core file. [clinic start generated code]*/ -PyDoc_STRVAR(os_WCOREDUMP__doc__, -"WCOREDUMP($module, status, /)\n" -"--\n" -"\n" -"Return True if the process returning status was dumped to a core file."); - -#define OS_WCOREDUMP_METHODDEF \ - {"WCOREDUMP", (PyCFunction)os_WCOREDUMP, METH_VARARGS, os_WCOREDUMP__doc__}, - -static int -os_WCOREDUMP_impl(PyModuleDef *module, int status); - -static PyObject * -os_WCOREDUMP(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int status; - int _return_value; - - if (!PyArg_ParseTuple(args, - "i:WCOREDUMP", - &status)) - goto exit; - _return_value = os_WCOREDUMP_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyBool_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_WCOREDUMP_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=e04d55c09c299828 input=8b05e7ab38528d04]*/ +/*[clinic end generated code: output=134f70bbe63fbf41 input=8b05e7ab38528d04]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -13070,45 +9102,9 @@ Return True if the process returning status was continued from a job control stop. [clinic start generated code]*/ -PyDoc_STRVAR(os_WIFCONTINUED__doc__, -"WIFCONTINUED($module, /, status)\n" -"--\n" -"\n" -"Return True if a particular process was continued from a job control stop.\n" -"\n" -"Return True if the process returning status was continued from a\n" -"job control stop."); - -#define OS_WIFCONTINUED_METHODDEF \ - {"WIFCONTINUED", (PyCFunction)os_WIFCONTINUED, METH_VARARGS|METH_KEYWORDS, os_WIFCONTINUED__doc__}, - -static int -os_WIFCONTINUED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFCONTINUED(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; - int status; - int _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WIFCONTINUED", _keywords, - &status)) - goto exit; - _return_value = os_WIFCONTINUED_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyBool_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_WIFCONTINUED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=9c4e6105a4520ab5 input=e777e7d38eb25bd9]*/ +/*[clinic end generated code: output=9cdd26543ebb6dcd input=e777e7d38eb25bd9]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -13126,42 +9122,9 @@ os.WIFSTOPPED -> bool Return True if the process returning status was stopped. [clinic start generated code]*/ -PyDoc_STRVAR(os_WIFSTOPPED__doc__, -"WIFSTOPPED($module, /, status)\n" -"--\n" -"\n" -"Return True if the process returning status was stopped."); - -#define OS_WIFSTOPPED_METHODDEF \ - {"WIFSTOPPED", (PyCFunction)os_WIFSTOPPED, METH_VARARGS|METH_KEYWORDS, os_WIFSTOPPED__doc__}, - -static int -os_WIFSTOPPED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFSTOPPED(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; - int status; - int _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WIFSTOPPED", _keywords, - &status)) - goto exit; - _return_value = os_WIFSTOPPED_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyBool_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_WIFSTOPPED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=e0de2da8ec9593ff input=043cb7f1289ef904]*/ +/*[clinic end generated code: output=73bf35e44994a724 input=043cb7f1289ef904]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -13179,42 +9142,9 @@ os.WIFSIGNALED -> bool Return True if the process returning status was terminated by a signal. [clinic start generated code]*/ -PyDoc_STRVAR(os_WIFSIGNALED__doc__, -"WIFSIGNALED($module, /, status)\n" -"--\n" -"\n" -"Return True if the process returning status was terminated by a signal."); - -#define OS_WIFSIGNALED_METHODDEF \ - {"WIFSIGNALED", (PyCFunction)os_WIFSIGNALED, METH_VARARGS|METH_KEYWORDS, os_WIFSIGNALED__doc__}, - -static int -os_WIFSIGNALED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFSIGNALED(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; - int status; - int _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WIFSIGNALED", _keywords, - &status)) - goto exit; - _return_value = os_WIFSIGNALED_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyBool_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_WIFSIGNALED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=f14d106558f406be input=d55ba7cc9ce5dc43]*/ +/*[clinic end generated code: output=2697975771872420 input=d55ba7cc9ce5dc43]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -13232,42 +9162,9 @@ os.WIFEXITED -> bool Return True if the process returning status exited via the exit() system call. [clinic start generated code]*/ -PyDoc_STRVAR(os_WIFEXITED__doc__, -"WIFEXITED($module, /, status)\n" -"--\n" -"\n" -"Return True if the process returning status exited via the exit() system call."); - -#define OS_WIFEXITED_METHODDEF \ - {"WIFEXITED", (PyCFunction)os_WIFEXITED, METH_VARARGS|METH_KEYWORDS, os_WIFEXITED__doc__}, - -static int -os_WIFEXITED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFEXITED(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; - int status; - int _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WIFEXITED", _keywords, - &status)) - goto exit; - _return_value = os_WIFEXITED_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyBool_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_WIFEXITED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=2f76087d53721255 input=d63775a6791586c0]*/ +/*[clinic end generated code: output=ca8f8c61f0b8532e input=d63775a6791586c0]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -13276,51 +9173,18 @@ os_WIFEXITED_impl(PyModuleDef *module, int status) #endif /* WIFEXITED */ -#ifdef WEXITSTATUS -/*[clinic input] -os.WEXITSTATUS -> int - - status: int - -Return the process return code from status. -[clinic start generated code]*/ - -PyDoc_STRVAR(os_WEXITSTATUS__doc__, -"WEXITSTATUS($module, /, status)\n" -"--\n" -"\n" -"Return the process return code from status."); - -#define OS_WEXITSTATUS_METHODDEF \ - {"WEXITSTATUS", (PyCFunction)os_WEXITSTATUS, METH_VARARGS|METH_KEYWORDS, os_WEXITSTATUS__doc__}, - -static int -os_WEXITSTATUS_impl(PyModuleDef *module, int status); - -static PyObject * -os_WEXITSTATUS(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; - int status; - int _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WEXITSTATUS", _keywords, - &status)) - goto exit; - _return_value = os_WEXITSTATUS_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong((long)_return_value); - -exit: - return return_value; -} +#ifdef WEXITSTATUS +/*[clinic input] +os.WEXITSTATUS -> int + + status: int + +Return the process return code from status. +[clinic start generated code]*/ static int os_WEXITSTATUS_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=13b6c270e2a326b1 input=e1fb4944e377585b]*/ +/*[clinic end generated code: output=ea54da23d9e0f6af input=e1fb4944e377585b]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -13338,42 +9202,9 @@ os.WTERMSIG -> int Return the signal that terminated the process that provided the status value. [clinic start generated code]*/ -PyDoc_STRVAR(os_WTERMSIG__doc__, -"WTERMSIG($module, /, status)\n" -"--\n" -"\n" -"Return the signal that terminated the process that provided the status value."); - -#define OS_WTERMSIG_METHODDEF \ - {"WTERMSIG", (PyCFunction)os_WTERMSIG, METH_VARARGS|METH_KEYWORDS, os_WTERMSIG__doc__}, - -static int -os_WTERMSIG_impl(PyModuleDef *module, int status); - -static PyObject * -os_WTERMSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; - int status; - int _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WTERMSIG", _keywords, - &status)) - goto exit; - _return_value = os_WTERMSIG_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_WTERMSIG_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=bf1fd4b002d0a9ed input=727fd7f84ec3f243]*/ +/*[clinic end generated code: output=4d25367026cb852c input=727fd7f84ec3f243]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -13391,42 +9222,9 @@ os.WSTOPSIG -> int Return the signal that stopped the process that provided the status value. [clinic start generated code]*/ -PyDoc_STRVAR(os_WSTOPSIG__doc__, -"WSTOPSIG($module, /, status)\n" -"--\n" -"\n" -"Return the signal that stopped the process that provided the status value."); - -#define OS_WSTOPSIG_METHODDEF \ - {"WSTOPSIG", (PyCFunction)os_WSTOPSIG, METH_VARARGS|METH_KEYWORDS, os_WSTOPSIG__doc__}, - -static int -os_WSTOPSIG_impl(PyModuleDef *module, int status); - -static PyObject * -os_WSTOPSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; - int status; - int _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WSTOPSIG", _keywords, - &status)) - goto exit; - _return_value = os_WSTOPSIG_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_WSTOPSIG_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=92e1647d29ee0549 input=46ebf1d1b293c5c1]*/ +/*[clinic end generated code: output=54eb9c13b001adb4 input=46ebf1d1b293c5c1]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -13436,39 +9234,6 @@ os_WSTOPSIG_impl(PyModuleDef *module, int status) #endif /* HAVE_SYS_WAIT_H */ -#ifndef OS_WCOREDUMP_METHODDEF -#define OS_WCOREDUMP_METHODDEF -#endif /* OS_WCOREDUMP_METHODDEF */ - -#ifndef OS_WIFCONTINUED_METHODDEF -#define OS_WIFCONTINUED_METHODDEF -#endif /* OS_WIFCONTINUED_METHODDEF */ - -#ifndef OS_WIFSTOPPED_METHODDEF -#define OS_WIFSTOPPED_METHODDEF -#endif /* OS_WIFSTOPPED_METHODDEF */ - -#ifndef OS_WIFSIGNALED_METHODDEF -#define OS_WIFSIGNALED_METHODDEF -#endif /* OS_WIFSIGNALED_METHODDEF */ - -#ifndef OS_WIFEXITED_METHODDEF -#define OS_WIFEXITED_METHODDEF -#endif /* OS_WIFEXITED_METHODDEF */ - -#ifndef OS_WEXITSTATUS_METHODDEF -#define OS_WEXITSTATUS_METHODDEF -#endif /* OS_WEXITSTATUS_METHODDEF */ - -#ifndef OS_WTERMSIG_METHODDEF -#define OS_WTERMSIG_METHODDEF -#endif /* OS_WTERMSIG_METHODDEF */ - -#ifndef OS_WSTOPSIG_METHODDEF -#define OS_WSTOPSIG_METHODDEF -#endif /* OS_WSTOPSIG_METHODDEF */ - - #if defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H) #ifdef _SCO_DS /* SCO OpenServer 5.0 and later requires _SVID3 before it reveals the @@ -13531,39 +9296,9 @@ Perform an fstatvfs system call on the given fd. Equivalent to statvfs(fd). [clinic start generated code]*/ -PyDoc_STRVAR(os_fstatvfs__doc__, -"fstatvfs($module, fd, /)\n" -"--\n" -"\n" -"Perform an fstatvfs system call on the given fd.\n" -"\n" -"Equivalent to statvfs(fd)."); - -#define OS_FSTATVFS_METHODDEF \ - {"fstatvfs", (PyCFunction)os_fstatvfs, METH_VARARGS, os_fstatvfs__doc__}, - -static PyObject * -os_fstatvfs_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fstatvfs(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - - if (!PyArg_ParseTuple(args, - "i:fstatvfs", - &fd)) - goto exit; - return_value = os_fstatvfs_impl(module, fd); - -exit: - return return_value; -} - static PyObject * os_fstatvfs_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=0e32bf07f946ec0d input=d8122243ac50975e]*/ +/*[clinic end generated code: output=584a94a754497ac0 input=d8122243ac50975e]*/ { int result; int async_err = 0; @@ -13597,45 +9332,9 @@ On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception. [clinic start generated code]*/ -PyDoc_STRVAR(os_statvfs__doc__, -"statvfs($module, /, path)\n" -"--\n" -"\n" -"Perform a statvfs system call on the given path.\n" -"\n" -"path may always be specified as a string.\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception."); - -#define OS_STATVFS_METHODDEF \ - {"statvfs", (PyCFunction)os_statvfs, METH_VARARGS|METH_KEYWORDS, os_statvfs__doc__}, - -static PyObject * -os_statvfs_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_statvfs(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; - path_t path = PATH_T_INITIALIZE("statvfs", "path", 0, PATH_HAVE_FSTATVFS); - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:statvfs", _keywords, - path_converter, &path)) - goto exit; - return_value = os_statvfs_impl(module, &path); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_statvfs_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=00ff54983360b446 input=3f5c35791c669bd9]*/ +/*[clinic end generated code: output=5ced07a2cf931f41 input=3f5c35791c669bd9]*/ { int result; struct statvfs st; @@ -13675,38 +9374,9 @@ os._getdiskusage Return disk usage statistics about the given path as a (total, free) tuple. [clinic start generated code]*/ -PyDoc_STRVAR(os__getdiskusage__doc__, -"_getdiskusage($module, /, path)\n" -"--\n" -"\n" -"Return disk usage statistics about the given path as a (total, free) tuple."); - -#define OS__GETDISKUSAGE_METHODDEF \ - {"_getdiskusage", (PyCFunction)os__getdiskusage, METH_VARARGS|METH_KEYWORDS, os__getdiskusage__doc__}, - -static PyObject * -os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path); - -static PyObject * -os__getdiskusage(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; - Py_UNICODE *path; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "u:_getdiskusage", _keywords, - &path)) - goto exit; - return_value = os__getdiskusage_impl(module, path); - -exit: - return return_value; -} - static PyObject * os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path) -/*[clinic end generated code: output=054c972179b13708 input=6458133aed893c78]*/ +/*[clinic end generated code: output=60a9cf33449db1dd input=6458133aed893c78]*/ { BOOL retval; ULARGE_INTEGER _, total, free; @@ -13890,44 +9560,9 @@ Return the configuration limit name for the file descriptor fd. If there is no limit, return -1. [clinic start generated code]*/ -PyDoc_STRVAR(os_fpathconf__doc__, -"fpathconf($module, fd, name, /)\n" -"--\n" -"\n" -"Return the configuration limit name for the file descriptor fd.\n" -"\n" -"If there is no limit, return -1."); - -#define OS_FPATHCONF_METHODDEF \ - {"fpathconf", (PyCFunction)os_fpathconf, METH_VARARGS, os_fpathconf__doc__}, - -static long -os_fpathconf_impl(PyModuleDef *module, int fd, int name); - -static PyObject * -os_fpathconf(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - int name; - long _return_value; - - if (!PyArg_ParseTuple(args, - "iO&:fpathconf", - &fd, conv_path_confname, &name)) - goto exit; - _return_value = os_fpathconf_impl(module, fd, name); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong(_return_value); - -exit: - return return_value; -} - static long os_fpathconf_impl(PyModuleDef *module, int fd, int name) -/*[clinic end generated code: output=3bf04b40e0523a8c input=5942a024d3777810]*/ +/*[clinic end generated code: output=082b2922d4441de7 input=5942a024d3777810]*/ { long limit; @@ -13954,50 +9589,9 @@ On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception. [clinic start generated code]*/ -PyDoc_STRVAR(os_pathconf__doc__, -"pathconf($module, /, path, name)\n" -"--\n" -"\n" -"Return the configuration limit name for the file or directory path.\n" -"\n" -"If there is no limit, return -1.\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception."); - -#define OS_PATHCONF_METHODDEF \ - {"pathconf", (PyCFunction)os_pathconf, METH_VARARGS|METH_KEYWORDS, os_pathconf__doc__}, - -static long -os_pathconf_impl(PyModuleDef *module, path_t *path, int name); - -static PyObject * -os_pathconf(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "name", NULL}; - path_t path = PATH_T_INITIALIZE("pathconf", "path", 0, PATH_HAVE_FPATHCONF); - int name; - long _return_value; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&:pathconf", _keywords, - path_converter, &path, conv_path_confname, &name)) - goto exit; - _return_value = os_pathconf_impl(module, &path, name); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong(_return_value); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static long os_pathconf_impl(PyModuleDef *module, path_t *path, int name) -/*[clinic end generated code: output=1a53e125b6cf63e4 input=bc3e2a985af27e5e]*/ +/*[clinic end generated code: output=3713029e9501f5ab input=bc3e2a985af27e5e]*/ { long limit; @@ -14192,37 +9786,9 @@ os.confstr Return a string-valued system configuration variable. [clinic start generated code]*/ -PyDoc_STRVAR(os_confstr__doc__, -"confstr($module, name, /)\n" -"--\n" -"\n" -"Return a string-valued system configuration variable."); - -#define OS_CONFSTR_METHODDEF \ - {"confstr", (PyCFunction)os_confstr, METH_VARARGS, os_confstr__doc__}, - -static PyObject * -os_confstr_impl(PyModuleDef *module, int name); - -static PyObject * -os_confstr(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int name; - - if (!PyArg_ParseTuple(args, - "O&:confstr", - conv_confstr_confname, &name)) - goto exit; - return_value = os_confstr_impl(module, name); - -exit: - return return_value; -} - static PyObject * os_confstr_impl(PyModuleDef *module, int name) -/*[clinic end generated code: output=3f5e8aba9f8e3174 input=18fb4d0567242e65]*/ +/*[clinic end generated code: output=6ff79c9eed8c2daf input=18fb4d0567242e65]*/ { PyObject *result = NULL; char buffer[255]; @@ -14761,6 +10327,8 @@ conv_sysconf_confname(PyObject *arg, int *valuep) / sizeof(struct constdef)); } +#include "clinic/posixmodule.c.h" + /*[clinic input] os.sysconf -> long @@ -14770,41 +10338,9 @@ os.sysconf -> long Return an integer-valued system configuration variable. [clinic start generated code]*/ -PyDoc_STRVAR(os_sysconf__doc__, -"sysconf($module, name, /)\n" -"--\n" -"\n" -"Return an integer-valued system configuration variable."); - -#define OS_SYSCONF_METHODDEF \ - {"sysconf", (PyCFunction)os_sysconf, METH_VARARGS, os_sysconf__doc__}, - -static long -os_sysconf_impl(PyModuleDef *module, int name); - -static PyObject * -os_sysconf(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int name; - long _return_value; - - if (!PyArg_ParseTuple(args, - "O&:sysconf", - conv_sysconf_confname, &name)) - goto exit; - _return_value = os_sysconf_impl(module, name); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyLong_FromLong(_return_value); - -exit: - return return_value; -} - static long os_sysconf_impl(PyModuleDef *module, int name) -/*[clinic end generated code: output=7b06dfdc472431e4 input=279e3430a33f29e4]*/ +/*[clinic end generated code: output=ed567306f58d69c4 input=279e3430a33f29e4]*/ { long value; @@ -14900,30 +10436,9 @@ This function 'dumps core' or otherwise fails in the hardest way possible on the hosting operating system. This function never returns. [clinic start generated code]*/ -PyDoc_STRVAR(os_abort__doc__, -"abort($module, /)\n" -"--\n" -"\n" -"Abort the interpreter immediately.\n" -"\n" -"This function \'dumps core\' or otherwise fails in the hardest way possible\n" -"on the hosting operating system. This function never returns."); - -#define OS_ABORT_METHODDEF \ - {"abort", (PyCFunction)os_abort, METH_NOARGS, os_abort__doc__}, - -static PyObject * -os_abort_impl(PyModuleDef *module); - -static PyObject * -os_abort(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_abort_impl(module); -} - static PyObject * os_abort_impl(PyModuleDef *module) -/*[clinic end generated code: output=cded2cc8c5453d3a input=cf2c7d98bc504047]*/ +/*[clinic end generated code: output=486bb96647c299b3 input=cf2c7d98bc504047]*/ { abort(); /*NOTREACHED*/ @@ -15079,31 +10594,9 @@ the last 1, 5, and 15 minutes as a tuple of three floats. Raises OSError if the load average was unobtainable. [clinic start generated code]*/ -PyDoc_STRVAR(os_getloadavg__doc__, -"getloadavg($module, /)\n" -"--\n" -"\n" -"Return average recent system load information.\n" -"\n" -"Return the number of processes in the system run queue averaged over\n" -"the last 1, 5, and 15 minutes as a tuple of three floats.\n" -"Raises OSError if the load average was unobtainable."); - -#define OS_GETLOADAVG_METHODDEF \ - {"getloadavg", (PyCFunction)os_getloadavg, METH_NOARGS, os_getloadavg__doc__}, - -static PyObject * -os_getloadavg_impl(PyModuleDef *module); - -static PyObject * -os_getloadavg(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getloadavg_impl(module); -} - static PyObject * os_getloadavg_impl(PyModuleDef *module) -/*[clinic end generated code: output=67593a92457d55af input=3d6d826b76d8a34e]*/ +/*[clinic end generated code: output=2b64c5b675d74c14 input=3d6d826b76d8a34e]*/ { double loadavg[3]; if (getloadavg(loadavg, 3)!=3) { @@ -15125,41 +10618,9 @@ The file descriptor must be attached to a terminal. If the device is not a terminal, return None. [clinic start generated code]*/ -PyDoc_STRVAR(os_device_encoding__doc__, -"device_encoding($module, /, fd)\n" -"--\n" -"\n" -"Return a string describing the encoding of a terminal\'s file descriptor.\n" -"\n" -"The file descriptor must be attached to a terminal.\n" -"If the device is not a terminal, return None."); - -#define OS_DEVICE_ENCODING_METHODDEF \ - {"device_encoding", (PyCFunction)os_device_encoding, METH_VARARGS|METH_KEYWORDS, os_device_encoding__doc__}, - -static PyObject * -os_device_encoding_impl(PyModuleDef *module, int fd); - -static PyObject * -os_device_encoding(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; - int fd; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:device_encoding", _keywords, - &fd)) - goto exit; - return_value = os_device_encoding_impl(module, fd); - -exit: - return return_value; -} - static PyObject * os_device_encoding_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=e9f8274d42f5cce3 input=9e1d4a42b66df312]*/ +/*[clinic end generated code: output=34f14e33468419c1 input=9e1d4a42b66df312]*/ { return _Py_device_encoding(fd); } @@ -15177,39 +10638,9 @@ os.setresuid Set the current process's real, effective, and saved user ids. [clinic start generated code]*/ -PyDoc_STRVAR(os_setresuid__doc__, -"setresuid($module, ruid, euid, suid, /)\n" -"--\n" -"\n" -"Set the current process\'s real, effective, and saved user ids."); - -#define OS_SETRESUID_METHODDEF \ - {"setresuid", (PyCFunction)os_setresuid, METH_VARARGS, os_setresuid__doc__}, - -static PyObject * -os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid); - -static PyObject * -os_setresuid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - uid_t ruid; - uid_t euid; - uid_t suid; - - if (!PyArg_ParseTuple(args, - "O&O&O&:setresuid", - _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid, _Py_Uid_Converter, &suid)) - goto exit; - return_value = os_setresuid_impl(module, ruid, euid, suid); - -exit: - return return_value; -} - static PyObject * os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid) -/*[clinic end generated code: output=2e3457cfe7cd1f94 input=9e33cb79a82792f3]*/ +/*[clinic end generated code: output=92cc330812c6ed0f input=9e33cb79a82792f3]*/ { if (setresuid(ruid, euid, suid) < 0) return posix_error(); @@ -15230,39 +10661,9 @@ os.setresgid Set the current process's real, effective, and saved group ids. [clinic start generated code]*/ -PyDoc_STRVAR(os_setresgid__doc__, -"setresgid($module, rgid, egid, sgid, /)\n" -"--\n" -"\n" -"Set the current process\'s real, effective, and saved group ids."); - -#define OS_SETRESGID_METHODDEF \ - {"setresgid", (PyCFunction)os_setresgid, METH_VARARGS, os_setresgid__doc__}, - -static PyObject * -os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid); - -static PyObject * -os_setresgid(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - gid_t rgid; - gid_t egid; - gid_t sgid; - - if (!PyArg_ParseTuple(args, - "O&O&O&:setresgid", - _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid, _Py_Gid_Converter, &sgid)) - goto exit; - return_value = os_setresgid_impl(module, rgid, egid, sgid); - -exit: - return return_value; -} - static PyObject * os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid) -/*[clinic end generated code: output=8a7ee6c1f2482362 input=33e9e0785ef426b1]*/ +/*[clinic end generated code: output=e91dc4842a604429 input=33e9e0785ef426b1]*/ { if (setresgid(rgid, egid, sgid) < 0) return posix_error(); @@ -15278,27 +10679,9 @@ os.getresuid Return a tuple of the current process's real, effective, and saved user ids. [clinic start generated code]*/ -PyDoc_STRVAR(os_getresuid__doc__, -"getresuid($module, /)\n" -"--\n" -"\n" -"Return a tuple of the current process\'s real, effective, and saved user ids."); - -#define OS_GETRESUID_METHODDEF \ - {"getresuid", (PyCFunction)os_getresuid, METH_NOARGS, os_getresuid__doc__}, - -static PyObject * -os_getresuid_impl(PyModuleDef *module); - -static PyObject * -os_getresuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getresuid_impl(module); -} - static PyObject * os_getresuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=d0786686a6ef1320 input=41ccfa8e1f6517ad]*/ +/*[clinic end generated code: output=9ddef62faae8e477 input=41ccfa8e1f6517ad]*/ { uid_t ruid, euid, suid; if (getresuid(&ruid, &euid, &suid) < 0) @@ -15317,27 +10700,9 @@ os.getresgid Return a tuple of the current process's real, effective, and saved group ids. [clinic start generated code]*/ -PyDoc_STRVAR(os_getresgid__doc__, -"getresgid($module, /)\n" -"--\n" -"\n" -"Return a tuple of the current process\'s real, effective, and saved group ids."); - -#define OS_GETRESGID_METHODDEF \ - {"getresgid", (PyCFunction)os_getresgid, METH_NOARGS, os_getresgid__doc__}, - -static PyObject * -os_getresgid_impl(PyModuleDef *module); - -static PyObject * -os_getresgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_getresgid_impl(module); -} - static PyObject * os_getresgid_impl(PyModuleDef *module) -/*[clinic end generated code: output=05249ac795fa759f input=517e68db9ca32df6]*/ +/*[clinic end generated code: output=e1a553cbcf16234c input=517e68db9ca32df6]*/ { gid_t rgid, egid, sgid; if (getresgid(&rgid, &egid, &sgid) < 0) @@ -15360,57 +10725,16 @@ os.getxattr Return the value of extended attribute attribute on path. -path may be either a string or an open file descriptor. -If follow_symlinks is False, and the last element of the path is a symbolic - link, getxattr will examine the symbolic link itself instead of the file - the link points to. - -[clinic start generated code]*/ - -PyDoc_STRVAR(os_getxattr__doc__, -"getxattr($module, /, path, attribute, *, follow_symlinks=True)\n" -"--\n" -"\n" -"Return the value of extended attribute attribute on path.\n" -"\n" -"path may be either a string or an open file descriptor.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, getxattr will examine the symbolic link itself instead of the file\n" -" the link points to."); - -#define OS_GETXATTR_METHODDEF \ - {"getxattr", (PyCFunction)os_getxattr, METH_VARARGS|METH_KEYWORDS, os_getxattr__doc__}, - -static PyObject * -os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks); - -static PyObject * -os_getxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("getxattr", "path", 0, 1); - path_t attribute = PATH_T_INITIALIZE("getxattr", "attribute", 0, 0); - int follow_symlinks = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|$p:getxattr", _keywords, - path_converter, &path, path_converter, &attribute, &follow_symlinks)) - goto exit; - return_value = os_getxattr_impl(module, &path, &attribute, follow_symlinks); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - /* Cleanup for attribute */ - path_cleanup(&attribute); +path may be either a string or an open file descriptor. +If follow_symlinks is False, and the last element of the path is a symbolic + link, getxattr will examine the symbolic link itself instead of the file + the link points to. - return return_value; -} +[clinic start generated code]*/ static PyObject * os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=bbc9454fe2b9ea86 input=8c8ea3bab78d89c2]*/ +/*[clinic end generated code: output=d90086b314859f8b input=8c8ea3bab78d89c2]*/ { Py_ssize_t i; PyObject *buffer = NULL; @@ -15479,56 +10803,9 @@ If follow_symlinks is False, and the last element of the path is a symbolic [clinic start generated code]*/ -PyDoc_STRVAR(os_setxattr__doc__, -"setxattr($module, /, path, attribute, value, flags=0, *,\n" -" follow_symlinks=True)\n" -"--\n" -"\n" -"Set extended attribute attribute on path to value.\n" -"\n" -"path may be either a string or an open file descriptor.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, setxattr will modify the symbolic link itself instead of the file\n" -" the link points to."); - -#define OS_SETXATTR_METHODDEF \ - {"setxattr", (PyCFunction)os_setxattr, METH_VARARGS|METH_KEYWORDS, os_setxattr__doc__}, - -static PyObject * -os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks); - -static PyObject * -os_setxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "attribute", "value", "flags", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("setxattr", "path", 0, 1); - path_t attribute = PATH_T_INITIALIZE("setxattr", "attribute", 0, 0); - Py_buffer value = {NULL, NULL}; - int flags = 0; - int follow_symlinks = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&y*|i$p:setxattr", _keywords, - path_converter, &path, path_converter, &attribute, &value, &flags, &follow_symlinks)) - goto exit; - return_value = os_setxattr_impl(module, &path, &attribute, &value, flags, follow_symlinks); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - /* Cleanup for attribute */ - path_cleanup(&attribute); - /* Cleanup for value */ - if (value.obj) - PyBuffer_Release(&value); - - return return_value; -} - static PyObject * os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks) -/*[clinic end generated code: output=2ff845d8e024b218 input=f0d26833992015c2]*/ +/*[clinic end generated code: output=e3defa5c4b1ad0ae input=f0d26833992015c2]*/ { ssize_t result; @@ -15573,50 +10850,9 @@ If follow_symlinks is False, and the last element of the path is a symbolic [clinic start generated code]*/ -PyDoc_STRVAR(os_removexattr__doc__, -"removexattr($module, /, path, attribute, *, follow_symlinks=True)\n" -"--\n" -"\n" -"Remove extended attribute attribute on path.\n" -"\n" -"path may be either a string or an open file descriptor.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, removexattr will modify the symbolic link itself instead of the file\n" -" the link points to."); - -#define OS_REMOVEXATTR_METHODDEF \ - {"removexattr", (PyCFunction)os_removexattr, METH_VARARGS|METH_KEYWORDS, os_removexattr__doc__}, - -static PyObject * -os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks); - -static PyObject * -os_removexattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("removexattr", "path", 0, 1); - path_t attribute = PATH_T_INITIALIZE("removexattr", "attribute", 0, 0); - int follow_symlinks = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|$p:removexattr", _keywords, - path_converter, &path, path_converter, &attribute, &follow_symlinks)) - goto exit; - return_value = os_removexattr_impl(module, &path, &attribute, follow_symlinks); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - /* Cleanup for attribute */ - path_cleanup(&attribute); - - return return_value; -} - static PyObject * os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=8dfc715bf607c4cf input=cdb54834161e3329]*/ +/*[clinic end generated code: output=4870ec90249af875 input=cdb54834161e3329]*/ { ssize_t result; @@ -15656,48 +10892,9 @@ If follow_symlinks is False, and the last element of the path is a symbolic the link points to. [clinic start generated code]*/ -PyDoc_STRVAR(os_listxattr__doc__, -"listxattr($module, /, path=None, *, follow_symlinks=True)\n" -"--\n" -"\n" -"Return a list of extended attributes on path.\n" -"\n" -"path may be either None, a string, or an open file descriptor.\n" -"if path is None, listxattr will examine the current directory.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, listxattr will examine the symbolic link itself instead of the file\n" -" the link points to."); - -#define OS_LISTXATTR_METHODDEF \ - {"listxattr", (PyCFunction)os_listxattr, METH_VARARGS|METH_KEYWORDS, os_listxattr__doc__}, - -static PyObject * -os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks); - -static PyObject * -os_listxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"path", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("listxattr", "path", 1, 1); - int follow_symlinks = 1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O&$p:listxattr", _keywords, - path_converter, &path, &follow_symlinks)) - goto exit; - return_value = os_listxattr_impl(module, &path, follow_symlinks); - -exit: - /* Cleanup for path */ - path_cleanup(&path); - - return return_value; -} - static PyObject * os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks) -/*[clinic end generated code: output=3104cafda1a3d887 input=08cca53ac0b07c13]*/ +/*[clinic end generated code: output=a87ad6ce56e42a4f input=08cca53ac0b07c13]*/ { Py_ssize_t i; PyObject *result = NULL; @@ -15789,37 +10986,9 @@ os.urandom Return a bytes object containing random bytes suitable for cryptographic use. [clinic start generated code]*/ -PyDoc_STRVAR(os_urandom__doc__, -"urandom($module, size, /)\n" -"--\n" -"\n" -"Return a bytes object containing random bytes suitable for cryptographic use."); - -#define OS_URANDOM_METHODDEF \ - {"urandom", (PyCFunction)os_urandom, METH_VARARGS, os_urandom__doc__}, - -static PyObject * -os_urandom_impl(PyModuleDef *module, Py_ssize_t size); - -static PyObject * -os_urandom(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - Py_ssize_t size; - - if (!PyArg_ParseTuple(args, - "n:urandom", - &size)) - goto exit; - return_value = os_urandom_impl(module, size); - -exit: - return return_value; -} - static PyObject * os_urandom_impl(PyModuleDef *module, Py_ssize_t size) -/*[clinic end generated code: output=5dbff582cab94cb9 input=4067cdb1b6776c29]*/ +/*[clinic end generated code: output=e0011f021501f03b input=4067cdb1b6776c29]*/ { PyObject *bytes; int result; @@ -15954,27 +11123,9 @@ os.cpu_count Return the number of CPUs in the system; return None if indeterminable. [clinic start generated code]*/ -PyDoc_STRVAR(os_cpu_count__doc__, -"cpu_count($module, /)\n" -"--\n" -"\n" -"Return the number of CPUs in the system; return None if indeterminable."); - -#define OS_CPU_COUNT_METHODDEF \ - {"cpu_count", (PyCFunction)os_cpu_count, METH_NOARGS, os_cpu_count__doc__}, - -static PyObject * -os_cpu_count_impl(PyModuleDef *module); - -static PyObject * -os_cpu_count(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return os_cpu_count_impl(module); -} - static PyObject * os_cpu_count_impl(PyModuleDef *module) -/*[clinic end generated code: output=92e2a4a729eb7740 input=d55e2f8f3823a628]*/ +/*[clinic end generated code: output=c59ee7f6bce832b8 input=d55e2f8f3823a628]*/ { int ncpu = 0; #ifdef MS_WINDOWS @@ -16013,41 +11164,9 @@ os.get_inheritable -> bool Get the close-on-exe flag of the specified file descriptor. [clinic start generated code]*/ -PyDoc_STRVAR(os_get_inheritable__doc__, -"get_inheritable($module, fd, /)\n" -"--\n" -"\n" -"Get the close-on-exe flag of the specified file descriptor."); - -#define OS_GET_INHERITABLE_METHODDEF \ - {"get_inheritable", (PyCFunction)os_get_inheritable, METH_VARARGS, os_get_inheritable__doc__}, - -static int -os_get_inheritable_impl(PyModuleDef *module, int fd); - -static PyObject * -os_get_inheritable(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - int _return_value; - - if (!PyArg_ParseTuple(args, - "i:get_inheritable", - &fd)) - goto exit; - _return_value = os_get_inheritable_impl(module, fd); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyBool_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_get_inheritable_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=261d1dd2b0dbdc35 input=89ac008dc9ab6b95]*/ +/*[clinic end generated code: output=36110bb36efaa21e input=89ac008dc9ab6b95]*/ { if (!_PyVerify_fd(fd)){ posix_error(); @@ -16067,38 +11186,9 @@ os.set_inheritable Set the inheritable flag of the specified file descriptor. [clinic start generated code]*/ -PyDoc_STRVAR(os_set_inheritable__doc__, -"set_inheritable($module, fd, inheritable, /)\n" -"--\n" -"\n" -"Set the inheritable flag of the specified file descriptor."); - -#define OS_SET_INHERITABLE_METHODDEF \ - {"set_inheritable", (PyCFunction)os_set_inheritable, METH_VARARGS, os_set_inheritable__doc__}, - -static PyObject * -os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable); - -static PyObject * -os_set_inheritable(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - int fd; - int inheritable; - - if (!PyArg_ParseTuple(args, - "ii:set_inheritable", - &fd, &inheritable)) - goto exit; - return_value = os_set_inheritable_impl(module, fd, inheritable); - -exit: - return return_value; -} - static PyObject * os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable) -/*[clinic end generated code: output=64dfe5e15c906539 input=9ceaead87a1e2402]*/ +/*[clinic end generated code: output=2ac5c6ce8623f045 input=9ceaead87a1e2402]*/ { if (!_PyVerify_fd(fd)) return posix_error(); @@ -16118,41 +11208,9 @@ os.get_handle_inheritable -> bool Get the close-on-exe flag of the specified file descriptor. [clinic start generated code]*/ -PyDoc_STRVAR(os_get_handle_inheritable__doc__, -"get_handle_inheritable($module, handle, /)\n" -"--\n" -"\n" -"Get the close-on-exe flag of the specified file descriptor."); - -#define OS_GET_HANDLE_INHERITABLE_METHODDEF \ - {"get_handle_inheritable", (PyCFunction)os_get_handle_inheritable, METH_VARARGS, os_get_handle_inheritable__doc__}, - -static int -os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle); - -static PyObject * -os_get_handle_inheritable(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - Py_intptr_t handle; - int _return_value; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_INTPTR ":get_handle_inheritable", - &handle)) - goto exit; - _return_value = os_get_handle_inheritable_impl(module, handle); - if ((_return_value == -1) && PyErr_Occurred()) - goto exit; - return_value = PyBool_FromLong((long)_return_value); - -exit: - return return_value; -} - static int os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle) -/*[clinic end generated code: output=d5bf9d86900bf457 input=5f7759443aae3dc5]*/ +/*[clinic end generated code: output=3b7b3e1b43f312b6 input=5f7759443aae3dc5]*/ { DWORD flags; @@ -16174,38 +11232,9 @@ os.set_handle_inheritable Set the inheritable flag of the specified handle. [clinic start generated code]*/ -PyDoc_STRVAR(os_set_handle_inheritable__doc__, -"set_handle_inheritable($module, handle, inheritable, /)\n" -"--\n" -"\n" -"Set the inheritable flag of the specified handle."); - -#define OS_SET_HANDLE_INHERITABLE_METHODDEF \ - {"set_handle_inheritable", (PyCFunction)os_set_handle_inheritable, METH_VARARGS, os_set_handle_inheritable__doc__}, - -static PyObject * -os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, int inheritable); - -static PyObject * -os_set_handle_inheritable(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - Py_intptr_t handle; - int inheritable; - - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_INTPTR "p:set_handle_inheritable", - &handle, &inheritable)) - goto exit; - return_value = os_set_handle_inheritable_impl(module, handle, inheritable); - -exit: - return return_value; -} - static PyObject * os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, int inheritable) -/*[clinic end generated code: output=ee5fcc6d9f0d4f8b input=e64b2b2730469def]*/ +/*[clinic end generated code: output=627aa5b158b69338 input=e64b2b2730469def]*/ { DWORD flags = inheritable ? HANDLE_FLAG_INHERIT : 0; if (!SetHandleInformation((HANDLE)handle, HANDLE_FLAG_INHERIT, flags)) { @@ -17045,471 +12074,7 @@ error: /*[clinic input] dump buffer [clinic start generated code]*/ - -#ifndef OS_TTYNAME_METHODDEF - #define OS_TTYNAME_METHODDEF -#endif /* !defined(OS_TTYNAME_METHODDEF) */ - -#ifndef OS_CTERMID_METHODDEF - #define OS_CTERMID_METHODDEF -#endif /* !defined(OS_CTERMID_METHODDEF) */ - -#ifndef OS_FCHDIR_METHODDEF - #define OS_FCHDIR_METHODDEF -#endif /* !defined(OS_FCHDIR_METHODDEF) */ - -#ifndef OS_FCHMOD_METHODDEF - #define OS_FCHMOD_METHODDEF -#endif /* !defined(OS_FCHMOD_METHODDEF) */ - -#ifndef OS_LCHMOD_METHODDEF - #define OS_LCHMOD_METHODDEF -#endif /* !defined(OS_LCHMOD_METHODDEF) */ - -#ifndef OS_CHFLAGS_METHODDEF - #define OS_CHFLAGS_METHODDEF -#endif /* !defined(OS_CHFLAGS_METHODDEF) */ - -#ifndef OS_LCHFLAGS_METHODDEF - #define OS_LCHFLAGS_METHODDEF -#endif /* !defined(OS_LCHFLAGS_METHODDEF) */ - -#ifndef OS_CHROOT_METHODDEF - #define OS_CHROOT_METHODDEF -#endif /* !defined(OS_CHROOT_METHODDEF) */ - -#ifndef OS_FSYNC_METHODDEF - #define OS_FSYNC_METHODDEF -#endif /* !defined(OS_FSYNC_METHODDEF) */ - -#ifndef OS_SYNC_METHODDEF - #define OS_SYNC_METHODDEF -#endif /* !defined(OS_SYNC_METHODDEF) */ - -#ifndef OS_FDATASYNC_METHODDEF - #define OS_FDATASYNC_METHODDEF -#endif /* !defined(OS_FDATASYNC_METHODDEF) */ - -#ifndef OS_CHOWN_METHODDEF - #define OS_CHOWN_METHODDEF -#endif /* !defined(OS_CHOWN_METHODDEF) */ - -#ifndef OS_FCHOWN_METHODDEF - #define OS_FCHOWN_METHODDEF -#endif /* !defined(OS_FCHOWN_METHODDEF) */ - -#ifndef OS_LCHOWN_METHODDEF - #define OS_LCHOWN_METHODDEF -#endif /* !defined(OS_LCHOWN_METHODDEF) */ - -#ifndef OS_LINK_METHODDEF - #define OS_LINK_METHODDEF -#endif /* !defined(OS_LINK_METHODDEF) */ - -#ifndef OS__GETFINALPATHNAME_METHODDEF - #define OS__GETFINALPATHNAME_METHODDEF -#endif /* !defined(OS__GETFINALPATHNAME_METHODDEF) */ - -#ifndef OS__GETVOLUMEPATHNAME_METHODDEF - #define OS__GETVOLUMEPATHNAME_METHODDEF -#endif /* !defined(OS__GETVOLUMEPATHNAME_METHODDEF) */ - -#ifndef OS_NICE_METHODDEF - #define OS_NICE_METHODDEF -#endif /* !defined(OS_NICE_METHODDEF) */ - -#ifndef OS_GETPRIORITY_METHODDEF - #define OS_GETPRIORITY_METHODDEF -#endif /* !defined(OS_GETPRIORITY_METHODDEF) */ - -#ifndef OS_SETPRIORITY_METHODDEF - #define OS_SETPRIORITY_METHODDEF -#endif /* !defined(OS_SETPRIORITY_METHODDEF) */ - -#ifndef OS_SYSTEM_METHODDEF - #define OS_SYSTEM_METHODDEF -#endif /* !defined(OS_SYSTEM_METHODDEF) */ - -#ifndef OS_UNAME_METHODDEF - #define OS_UNAME_METHODDEF -#endif /* !defined(OS_UNAME_METHODDEF) */ - -#ifndef OS_EXECV_METHODDEF - #define OS_EXECV_METHODDEF -#endif /* !defined(OS_EXECV_METHODDEF) */ - -#ifndef OS_EXECVE_METHODDEF - #define OS_EXECVE_METHODDEF -#endif /* !defined(OS_EXECVE_METHODDEF) */ - -#ifndef OS_SPAWNV_METHODDEF - #define OS_SPAWNV_METHODDEF -#endif /* !defined(OS_SPAWNV_METHODDEF) */ - -#ifndef OS_SPAWNVE_METHODDEF - #define OS_SPAWNVE_METHODDEF -#endif /* !defined(OS_SPAWNVE_METHODDEF) */ - -#ifndef OS_FORK1_METHODDEF - #define OS_FORK1_METHODDEF -#endif /* !defined(OS_FORK1_METHODDEF) */ - -#ifndef OS_FORK_METHODDEF - #define OS_FORK_METHODDEF -#endif /* !defined(OS_FORK_METHODDEF) */ - -#ifndef OS_SCHED_GET_PRIORITY_MAX_METHODDEF - #define OS_SCHED_GET_PRIORITY_MAX_METHODDEF -#endif /* !defined(OS_SCHED_GET_PRIORITY_MAX_METHODDEF) */ - -#ifndef OS_SCHED_GET_PRIORITY_MIN_METHODDEF - #define OS_SCHED_GET_PRIORITY_MIN_METHODDEF -#endif /* !defined(OS_SCHED_GET_PRIORITY_MIN_METHODDEF) */ - -#ifndef OS_SCHED_GETSCHEDULER_METHODDEF - #define OS_SCHED_GETSCHEDULER_METHODDEF -#endif /* !defined(OS_SCHED_GETSCHEDULER_METHODDEF) */ - -#ifndef OS_SCHED_SETSCHEDULER_METHODDEF - #define OS_SCHED_SETSCHEDULER_METHODDEF -#endif /* !defined(OS_SCHED_SETSCHEDULER_METHODDEF) */ - -#ifndef OS_SCHED_GETPARAM_METHODDEF - #define OS_SCHED_GETPARAM_METHODDEF -#endif /* !defined(OS_SCHED_GETPARAM_METHODDEF) */ - -#ifndef OS_SCHED_SETPARAM_METHODDEF - #define OS_SCHED_SETPARAM_METHODDEF -#endif /* !defined(OS_SCHED_SETPARAM_METHODDEF) */ - -#ifndef OS_SCHED_RR_GET_INTERVAL_METHODDEF - #define OS_SCHED_RR_GET_INTERVAL_METHODDEF -#endif /* !defined(OS_SCHED_RR_GET_INTERVAL_METHODDEF) */ - -#ifndef OS_SCHED_YIELD_METHODDEF - #define OS_SCHED_YIELD_METHODDEF -#endif /* !defined(OS_SCHED_YIELD_METHODDEF) */ - -#ifndef OS_SCHED_SETAFFINITY_METHODDEF - #define OS_SCHED_SETAFFINITY_METHODDEF -#endif /* !defined(OS_SCHED_SETAFFINITY_METHODDEF) */ - -#ifndef OS_SCHED_GETAFFINITY_METHODDEF - #define OS_SCHED_GETAFFINITY_METHODDEF -#endif /* !defined(OS_SCHED_GETAFFINITY_METHODDEF) */ - -#ifndef OS_OPENPTY_METHODDEF - #define OS_OPENPTY_METHODDEF -#endif /* !defined(OS_OPENPTY_METHODDEF) */ - -#ifndef OS_FORKPTY_METHODDEF - #define OS_FORKPTY_METHODDEF -#endif /* !defined(OS_FORKPTY_METHODDEF) */ - -#ifndef OS_GETEGID_METHODDEF - #define OS_GETEGID_METHODDEF -#endif /* !defined(OS_GETEGID_METHODDEF) */ - -#ifndef OS_GETEUID_METHODDEF - #define OS_GETEUID_METHODDEF -#endif /* !defined(OS_GETEUID_METHODDEF) */ - -#ifndef OS_GETGID_METHODDEF - #define OS_GETGID_METHODDEF -#endif /* !defined(OS_GETGID_METHODDEF) */ - -#ifndef OS_GETGROUPS_METHODDEF - #define OS_GETGROUPS_METHODDEF -#endif /* !defined(OS_GETGROUPS_METHODDEF) */ - -#ifndef OS_GETPGID_METHODDEF - #define OS_GETPGID_METHODDEF -#endif /* !defined(OS_GETPGID_METHODDEF) */ - -#ifndef OS_GETPGRP_METHODDEF - #define OS_GETPGRP_METHODDEF -#endif /* !defined(OS_GETPGRP_METHODDEF) */ - -#ifndef OS_SETPGRP_METHODDEF - #define OS_SETPGRP_METHODDEF -#endif /* !defined(OS_SETPGRP_METHODDEF) */ - -#ifndef OS_GETPPID_METHODDEF - #define OS_GETPPID_METHODDEF -#endif /* !defined(OS_GETPPID_METHODDEF) */ - -#ifndef OS_GETLOGIN_METHODDEF - #define OS_GETLOGIN_METHODDEF -#endif /* !defined(OS_GETLOGIN_METHODDEF) */ - -#ifndef OS_GETUID_METHODDEF - #define OS_GETUID_METHODDEF -#endif /* !defined(OS_GETUID_METHODDEF) */ - -#ifndef OS_KILL_METHODDEF - #define OS_KILL_METHODDEF -#endif /* !defined(OS_KILL_METHODDEF) */ - -#ifndef OS_KILLPG_METHODDEF - #define OS_KILLPG_METHODDEF -#endif /* !defined(OS_KILLPG_METHODDEF) */ - -#ifndef OS_PLOCK_METHODDEF - #define OS_PLOCK_METHODDEF -#endif /* !defined(OS_PLOCK_METHODDEF) */ - -#ifndef OS_SETUID_METHODDEF - #define OS_SETUID_METHODDEF -#endif /* !defined(OS_SETUID_METHODDEF) */ - -#ifndef OS_SETEUID_METHODDEF - #define OS_SETEUID_METHODDEF -#endif /* !defined(OS_SETEUID_METHODDEF) */ - -#ifndef OS_SETEGID_METHODDEF - #define OS_SETEGID_METHODDEF -#endif /* !defined(OS_SETEGID_METHODDEF) */ - -#ifndef OS_SETREUID_METHODDEF - #define OS_SETREUID_METHODDEF -#endif /* !defined(OS_SETREUID_METHODDEF) */ - -#ifndef OS_SETREGID_METHODDEF - #define OS_SETREGID_METHODDEF -#endif /* !defined(OS_SETREGID_METHODDEF) */ - -#ifndef OS_SETGID_METHODDEF - #define OS_SETGID_METHODDEF -#endif /* !defined(OS_SETGID_METHODDEF) */ - -#ifndef OS_SETGROUPS_METHODDEF - #define OS_SETGROUPS_METHODDEF -#endif /* !defined(OS_SETGROUPS_METHODDEF) */ - -#ifndef OS_WAIT3_METHODDEF - #define OS_WAIT3_METHODDEF -#endif /* !defined(OS_WAIT3_METHODDEF) */ - -#ifndef OS_WAIT4_METHODDEF - #define OS_WAIT4_METHODDEF -#endif /* !defined(OS_WAIT4_METHODDEF) */ - -#ifndef OS_WAITID_METHODDEF - #define OS_WAITID_METHODDEF -#endif /* !defined(OS_WAITID_METHODDEF) */ - -#ifndef OS_WAITPID_METHODDEF - #define OS_WAITPID_METHODDEF -#endif /* !defined(OS_WAITPID_METHODDEF) */ - -#ifndef OS_WAIT_METHODDEF - #define OS_WAIT_METHODDEF -#endif /* !defined(OS_WAIT_METHODDEF) */ - -#ifndef OS_SYMLINK_METHODDEF - #define OS_SYMLINK_METHODDEF -#endif /* !defined(OS_SYMLINK_METHODDEF) */ - -#ifndef OS_TIMES_METHODDEF - #define OS_TIMES_METHODDEF -#endif /* !defined(OS_TIMES_METHODDEF) */ - -#ifndef OS_GETSID_METHODDEF - #define OS_GETSID_METHODDEF -#endif /* !defined(OS_GETSID_METHODDEF) */ - -#ifndef OS_SETSID_METHODDEF - #define OS_SETSID_METHODDEF -#endif /* !defined(OS_SETSID_METHODDEF) */ - -#ifndef OS_SETPGID_METHODDEF - #define OS_SETPGID_METHODDEF -#endif /* !defined(OS_SETPGID_METHODDEF) */ - -#ifndef OS_TCGETPGRP_METHODDEF - #define OS_TCGETPGRP_METHODDEF -#endif /* !defined(OS_TCGETPGRP_METHODDEF) */ - -#ifndef OS_TCSETPGRP_METHODDEF - #define OS_TCSETPGRP_METHODDEF -#endif /* !defined(OS_TCSETPGRP_METHODDEF) */ - -#ifndef OS_LOCKF_METHODDEF - #define OS_LOCKF_METHODDEF -#endif /* !defined(OS_LOCKF_METHODDEF) */ - -#ifndef OS_READV_METHODDEF - #define OS_READV_METHODDEF -#endif /* !defined(OS_READV_METHODDEF) */ - -#ifndef OS_PREAD_METHODDEF - #define OS_PREAD_METHODDEF -#endif /* !defined(OS_PREAD_METHODDEF) */ - -#ifndef OS_PIPE_METHODDEF - #define OS_PIPE_METHODDEF -#endif /* !defined(OS_PIPE_METHODDEF) */ - -#ifndef OS_PIPE2_METHODDEF - #define OS_PIPE2_METHODDEF -#endif /* !defined(OS_PIPE2_METHODDEF) */ - -#ifndef OS_WRITEV_METHODDEF - #define OS_WRITEV_METHODDEF -#endif /* !defined(OS_WRITEV_METHODDEF) */ - -#ifndef OS_PWRITE_METHODDEF - #define OS_PWRITE_METHODDEF -#endif /* !defined(OS_PWRITE_METHODDEF) */ - -#ifndef OS_MKFIFO_METHODDEF - #define OS_MKFIFO_METHODDEF -#endif /* !defined(OS_MKFIFO_METHODDEF) */ - -#ifndef OS_MKNOD_METHODDEF - #define OS_MKNOD_METHODDEF -#endif /* !defined(OS_MKNOD_METHODDEF) */ - -#ifndef OS_MAJOR_METHODDEF - #define OS_MAJOR_METHODDEF -#endif /* !defined(OS_MAJOR_METHODDEF) */ - -#ifndef OS_MINOR_METHODDEF - #define OS_MINOR_METHODDEF -#endif /* !defined(OS_MINOR_METHODDEF) */ - -#ifndef OS_MAKEDEV_METHODDEF - #define OS_MAKEDEV_METHODDEF -#endif /* !defined(OS_MAKEDEV_METHODDEF) */ - -#ifndef OS_FTRUNCATE_METHODDEF - #define OS_FTRUNCATE_METHODDEF -#endif /* !defined(OS_FTRUNCATE_METHODDEF) */ - -#ifndef OS_TRUNCATE_METHODDEF - #define OS_TRUNCATE_METHODDEF -#endif /* !defined(OS_TRUNCATE_METHODDEF) */ - -#ifndef OS_POSIX_FALLOCATE_METHODDEF - #define OS_POSIX_FALLOCATE_METHODDEF -#endif /* !defined(OS_POSIX_FALLOCATE_METHODDEF) */ - -#ifndef OS_POSIX_FADVISE_METHODDEF - #define OS_POSIX_FADVISE_METHODDEF -#endif /* !defined(OS_POSIX_FADVISE_METHODDEF) */ - -#ifndef OS_PUTENV_METHODDEF - #define OS_PUTENV_METHODDEF -#endif /* !defined(OS_PUTENV_METHODDEF) */ - -#ifndef OS_UNSETENV_METHODDEF - #define OS_UNSETENV_METHODDEF -#endif /* !defined(OS_UNSETENV_METHODDEF) */ - -#ifndef OS_WCOREDUMP_METHODDEF - #define OS_WCOREDUMP_METHODDEF -#endif /* !defined(OS_WCOREDUMP_METHODDEF) */ - -#ifndef OS_WIFCONTINUED_METHODDEF - #define OS_WIFCONTINUED_METHODDEF -#endif /* !defined(OS_WIFCONTINUED_METHODDEF) */ - -#ifndef OS_WIFSTOPPED_METHODDEF - #define OS_WIFSTOPPED_METHODDEF -#endif /* !defined(OS_WIFSTOPPED_METHODDEF) */ - -#ifndef OS_WIFSIGNALED_METHODDEF - #define OS_WIFSIGNALED_METHODDEF -#endif /* !defined(OS_WIFSIGNALED_METHODDEF) */ - -#ifndef OS_WIFEXITED_METHODDEF - #define OS_WIFEXITED_METHODDEF -#endif /* !defined(OS_WIFEXITED_METHODDEF) */ - -#ifndef OS_WEXITSTATUS_METHODDEF - #define OS_WEXITSTATUS_METHODDEF -#endif /* !defined(OS_WEXITSTATUS_METHODDEF) */ - -#ifndef OS_WTERMSIG_METHODDEF - #define OS_WTERMSIG_METHODDEF -#endif /* !defined(OS_WTERMSIG_METHODDEF) */ - -#ifndef OS_WSTOPSIG_METHODDEF - #define OS_WSTOPSIG_METHODDEF -#endif /* !defined(OS_WSTOPSIG_METHODDEF) */ - -#ifndef OS_FSTATVFS_METHODDEF - #define OS_FSTATVFS_METHODDEF -#endif /* !defined(OS_FSTATVFS_METHODDEF) */ - -#ifndef OS_STATVFS_METHODDEF - #define OS_STATVFS_METHODDEF -#endif /* !defined(OS_STATVFS_METHODDEF) */ - -#ifndef OS__GETDISKUSAGE_METHODDEF - #define OS__GETDISKUSAGE_METHODDEF -#endif /* !defined(OS__GETDISKUSAGE_METHODDEF) */ - -#ifndef OS_FPATHCONF_METHODDEF - #define OS_FPATHCONF_METHODDEF -#endif /* !defined(OS_FPATHCONF_METHODDEF) */ - -#ifndef OS_PATHCONF_METHODDEF - #define OS_PATHCONF_METHODDEF -#endif /* !defined(OS_PATHCONF_METHODDEF) */ - -#ifndef OS_CONFSTR_METHODDEF - #define OS_CONFSTR_METHODDEF -#endif /* !defined(OS_CONFSTR_METHODDEF) */ - -#ifndef OS_SYSCONF_METHODDEF - #define OS_SYSCONF_METHODDEF -#endif /* !defined(OS_SYSCONF_METHODDEF) */ - -#ifndef OS_GETLOADAVG_METHODDEF - #define OS_GETLOADAVG_METHODDEF -#endif /* !defined(OS_GETLOADAVG_METHODDEF) */ - -#ifndef OS_SETRESUID_METHODDEF - #define OS_SETRESUID_METHODDEF -#endif /* !defined(OS_SETRESUID_METHODDEF) */ - -#ifndef OS_SETRESGID_METHODDEF - #define OS_SETRESGID_METHODDEF -#endif /* !defined(OS_SETRESGID_METHODDEF) */ - -#ifndef OS_GETRESUID_METHODDEF - #define OS_GETRESUID_METHODDEF -#endif /* !defined(OS_GETRESUID_METHODDEF) */ - -#ifndef OS_GETRESGID_METHODDEF - #define OS_GETRESGID_METHODDEF -#endif /* !defined(OS_GETRESGID_METHODDEF) */ - -#ifndef OS_GETXATTR_METHODDEF - #define OS_GETXATTR_METHODDEF -#endif /* !defined(OS_GETXATTR_METHODDEF) */ - -#ifndef OS_SETXATTR_METHODDEF - #define OS_SETXATTR_METHODDEF -#endif /* !defined(OS_SETXATTR_METHODDEF) */ - -#ifndef OS_REMOVEXATTR_METHODDEF - #define OS_REMOVEXATTR_METHODDEF -#endif /* !defined(OS_REMOVEXATTR_METHODDEF) */ - -#ifndef OS_LISTXATTR_METHODDEF - #define OS_LISTXATTR_METHODDEF -#endif /* !defined(OS_LISTXATTR_METHODDEF) */ - -#ifndef OS_GET_HANDLE_INHERITABLE_METHODDEF - #define OS_GET_HANDLE_INHERITABLE_METHODDEF -#endif /* !defined(OS_GET_HANDLE_INHERITABLE_METHODDEF) */ - -#ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF - #define OS_SET_HANDLE_INHERITABLE_METHODDEF -#endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=b788c2d6010113e8 input=524ce2e021e4eba6]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=524ce2e021e4eba6]*/ static PyMethodDef posix_methods[] = { diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c index b02753f932..281c30b26e 100644 --- a/Modules/pwdmodule.c +++ b/Modules/pwdmodule.c @@ -8,10 +8,9 @@ #include "clinic/pwdmodule.c.h" /*[clinic input] -output preset file module pwd [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=bbcf68b1f549f917]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=60f628ef356b97b6]*/ static PyStructSequence_Field struct_pwd_type_fields[] = { {"pw_name", "user name"}, diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index ce65354497..52064a59b5 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -68,6 +68,8 @@ typedef struct { PyObject **handlers; } xmlparseobject; +#include "clinic/pyexpat.c.h" + #define CHARACTER_DATA_BUFFER_SIZE 8192 static PyTypeObject Xmlparsetype; @@ -713,40 +715,9 @@ Parse XML data. `isfinal' should be true at end of input. [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_xmlparser_Parse__doc__, -"Parse($self, data, isFinal=0, /)\n" -"--\n" -"\n" -"Parse XML data.\n" -"\n" -"`isfinal\' should be true at end of input."); - -#define PYEXPAT_XMLPARSER_PARSE_METHODDEF \ - {"Parse", (PyCFunction)pyexpat_xmlparser_Parse, METH_VARARGS, pyexpat_xmlparser_Parse__doc__}, - -static PyObject * -pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, int isFinal); - -static PyObject * -pyexpat_xmlparser_Parse(xmlparseobject *self, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *data; - int isFinal = 0; - - if (!PyArg_ParseTuple(args, - "O|i:Parse", - &data, &isFinal)) - goto exit; - return_value = pyexpat_xmlparser_Parse_impl(self, data, isFinal); - -exit: - return return_value; -} - static PyObject * pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, int isFinal) -/*[clinic end generated code: output=65b1652b01f20856 input=e37b81b8948ca7e0]*/ +/*[clinic end generated code: output=2d4dc77f4d434854 input=e37b81b8948ca7e0]*/ { const char *s; Py_ssize_t slen; @@ -836,18 +807,9 @@ pyexpat.xmlparser.ParseFile Parse XML data from file-like object. [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_xmlparser_ParseFile__doc__, -"ParseFile($self, file, /)\n" -"--\n" -"\n" -"Parse XML data from file-like object."); - -#define PYEXPAT_XMLPARSER_PARSEFILE_METHODDEF \ - {"ParseFile", (PyCFunction)pyexpat_xmlparser_ParseFile, METH_O, pyexpat_xmlparser_ParseFile__doc__}, - static PyObject * pyexpat_xmlparser_ParseFile(xmlparseobject *self, PyObject *file) -/*[clinic end generated code: output=2e13803c3d8c22b2 input=fbb5a12b6038d735]*/ +/*[clinic end generated code: output=2adc6a13100cc42b input=fbb5a12b6038d735]*/ { int rv = 1; PyObject *readmethod = NULL; @@ -894,37 +856,9 @@ pyexpat.xmlparser.SetBase Set the base URL for the parser. [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_xmlparser_SetBase__doc__, -"SetBase($self, base, /)\n" -"--\n" -"\n" -"Set the base URL for the parser."); - -#define PYEXPAT_XMLPARSER_SETBASE_METHODDEF \ - {"SetBase", (PyCFunction)pyexpat_xmlparser_SetBase, METH_VARARGS, pyexpat_xmlparser_SetBase__doc__}, - -static PyObject * -pyexpat_xmlparser_SetBase_impl(xmlparseobject *self, const char *base); - -static PyObject * -pyexpat_xmlparser_SetBase(xmlparseobject *self, PyObject *args) -{ - PyObject *return_value = NULL; - const char *base; - - if (!PyArg_ParseTuple(args, - "s:SetBase", - &base)) - goto exit; - return_value = pyexpat_xmlparser_SetBase_impl(self, base); - -exit: - return return_value; -} - static PyObject * pyexpat_xmlparser_SetBase_impl(xmlparseobject *self, const char *base) -/*[clinic end generated code: output=5bdb49f6689a5f93 input=c684e5de895ee1a8]*/ +/*[clinic end generated code: output=c212ddceb607b539 input=c684e5de895ee1a8]*/ { if (!XML_SetBase(self->itself, base)) { return PyErr_NoMemory(); @@ -938,27 +872,9 @@ pyexpat.xmlparser.GetBase Return base URL string for the parser. [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_xmlparser_GetBase__doc__, -"GetBase($self, /)\n" -"--\n" -"\n" -"Return base URL string for the parser."); - -#define PYEXPAT_XMLPARSER_GETBASE_METHODDEF \ - {"GetBase", (PyCFunction)pyexpat_xmlparser_GetBase, METH_NOARGS, pyexpat_xmlparser_GetBase__doc__}, - -static PyObject * -pyexpat_xmlparser_GetBase_impl(xmlparseobject *self); - -static PyObject * -pyexpat_xmlparser_GetBase(xmlparseobject *self, PyObject *Py_UNUSED(ignored)) -{ - return pyexpat_xmlparser_GetBase_impl(self); -} - static PyObject * pyexpat_xmlparser_GetBase_impl(xmlparseobject *self) -/*[clinic end generated code: output=ef6046ee28f2b8ee input=918d71c38009620e]*/ +/*[clinic end generated code: output=2886cb21f9a8739a input=918d71c38009620e]*/ { return Py_BuildValue("z", XML_GetBase(self->itself)); } @@ -972,30 +888,9 @@ If the event was generated by a large amount of text (such as a start tag for an element with many attributes), not all of the text may be available. [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_xmlparser_GetInputContext__doc__, -"GetInputContext($self, /)\n" -"--\n" -"\n" -"Return the untranslated text of the input that caused the current event.\n" -"\n" -"If the event was generated by a large amount of text (such as a start tag\n" -"for an element with many attributes), not all of the text may be available."); - -#define PYEXPAT_XMLPARSER_GETINPUTCONTEXT_METHODDEF \ - {"GetInputContext", (PyCFunction)pyexpat_xmlparser_GetInputContext, METH_NOARGS, pyexpat_xmlparser_GetInputContext__doc__}, - -static PyObject * -pyexpat_xmlparser_GetInputContext_impl(xmlparseobject *self); - -static PyObject * -pyexpat_xmlparser_GetInputContext(xmlparseobject *self, PyObject *Py_UNUSED(ignored)) -{ - return pyexpat_xmlparser_GetInputContext_impl(self); -} - static PyObject * pyexpat_xmlparser_GetInputContext_impl(xmlparseobject *self) -/*[clinic end generated code: output=62ff03390f074cd2 input=034df8712db68379]*/ +/*[clinic end generated code: output=a88026d683fc22cc input=034df8712db68379]*/ { if (self->in_callback) { int offset, size; @@ -1022,38 +917,9 @@ pyexpat.xmlparser.ExternalEntityParserCreate Create a parser for parsing an external entity based on the information passed to the ExternalEntityRefHandler. [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_xmlparser_ExternalEntityParserCreate__doc__, -"ExternalEntityParserCreate($self, context, encoding=None, /)\n" -"--\n" -"\n" -"Create a parser for parsing an external entity based on the information passed to the ExternalEntityRefHandler."); - -#define PYEXPAT_XMLPARSER_EXTERNALENTITYPARSERCREATE_METHODDEF \ - {"ExternalEntityParserCreate", (PyCFunction)pyexpat_xmlparser_ExternalEntityParserCreate, METH_VARARGS, pyexpat_xmlparser_ExternalEntityParserCreate__doc__}, - -static PyObject * -pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self, const char *context, const char *encoding); - -static PyObject * -pyexpat_xmlparser_ExternalEntityParserCreate(xmlparseobject *self, PyObject *args) -{ - PyObject *return_value = NULL; - const char *context; - const char *encoding = NULL; - - if (!PyArg_ParseTuple(args, - "z|s:ExternalEntityParserCreate", - &context, &encoding)) - goto exit; - return_value = pyexpat_xmlparser_ExternalEntityParserCreate_impl(self, context, encoding); - -exit: - return return_value; -} - static PyObject * pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self, const char *context, const char *encoding) -/*[clinic end generated code: output=4948c35f3dd01133 input=283206575d960272]*/ +/*[clinic end generated code: output=942f300ed0e56054 input=283206575d960272]*/ { xmlparseobject *new_parser; int i; @@ -1127,42 +993,9 @@ XML_PARAM_ENTITY_PARSING_ALWAYS. Returns true if setting the flag was successful. [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_xmlparser_SetParamEntityParsing__doc__, -"SetParamEntityParsing($self, flag, /)\n" -"--\n" -"\n" -"Controls parsing of parameter entities (including the external DTD subset).\n" -"\n" -"Possible flag values are XML_PARAM_ENTITY_PARSING_NEVER,\n" -"XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE and\n" -"XML_PARAM_ENTITY_PARSING_ALWAYS. Returns true if setting the flag\n" -"was successful."); - -#define PYEXPAT_XMLPARSER_SETPARAMENTITYPARSING_METHODDEF \ - {"SetParamEntityParsing", (PyCFunction)pyexpat_xmlparser_SetParamEntityParsing, METH_VARARGS, pyexpat_xmlparser_SetParamEntityParsing__doc__}, - -static PyObject * -pyexpat_xmlparser_SetParamEntityParsing_impl(xmlparseobject *self, int flag); - -static PyObject * -pyexpat_xmlparser_SetParamEntityParsing(xmlparseobject *self, PyObject *args) -{ - PyObject *return_value = NULL; - int flag; - - if (!PyArg_ParseTuple(args, - "i:SetParamEntityParsing", - &flag)) - goto exit; - return_value = pyexpat_xmlparser_SetParamEntityParsing_impl(self, flag); - -exit: - return return_value; -} - static PyObject * pyexpat_xmlparser_SetParamEntityParsing_impl(xmlparseobject *self, int flag) -/*[clinic end generated code: output=0f820882bc7768cc input=8aea19b4b15e9af1]*/ +/*[clinic end generated code: output=18668ee8e760d64c input=8aea19b4b15e9af1]*/ { flag = XML_SetParamEntityParsing(self->itself, flag); return PyLong_FromLong(flag); @@ -1183,41 +1016,9 @@ application, while still getting the advantage of providing document type information to the parser. 'flag' defaults to True if not provided. [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_xmlparser_UseForeignDTD__doc__, -"UseForeignDTD($self, flag=True, /)\n" -"--\n" -"\n" -"Allows the application to provide an artificial external subset if one is not specified as part of the document instance.\n" -"\n" -"This readily allows the use of a \'default\' document type controlled by the\n" -"application, while still getting the advantage of providing document type\n" -"information to the parser. \'flag\' defaults to True if not provided."); - -#define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF \ - {"UseForeignDTD", (PyCFunction)pyexpat_xmlparser_UseForeignDTD, METH_VARARGS, pyexpat_xmlparser_UseForeignDTD__doc__}, - -static PyObject * -pyexpat_xmlparser_UseForeignDTD_impl(xmlparseobject *self, int flag); - -static PyObject * -pyexpat_xmlparser_UseForeignDTD(xmlparseobject *self, PyObject *args) -{ - PyObject *return_value = NULL; - int flag = 1; - - if (!PyArg_ParseTuple(args, - "|p:UseForeignDTD", - &flag)) - goto exit; - return_value = pyexpat_xmlparser_UseForeignDTD_impl(self, flag); - -exit: - return return_value; -} - static PyObject * pyexpat_xmlparser_UseForeignDTD_impl(xmlparseobject *self, int flag) -/*[clinic end generated code: output=22e924ae6cad67d6 input=78144c519d116a6e]*/ +/*[clinic end generated code: output=cfaa9aa50bb0f65c input=78144c519d116a6e]*/ { enum XML_Error rc; @@ -1234,25 +1035,9 @@ pyexpat_xmlparser_UseForeignDTD_impl(xmlparseobject *self, int flag) pyexpat.xmlparser.__dir__ [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_xmlparser___dir____doc__, -"__dir__($self, /)\n" -"--"); - -#define PYEXPAT_XMLPARSER___DIR___METHODDEF \ - {"__dir__", (PyCFunction)pyexpat_xmlparser___dir__, METH_NOARGS, pyexpat_xmlparser___dir____doc__}, - -static PyObject * -pyexpat_xmlparser___dir___impl(xmlparseobject *self); - -static PyObject * -pyexpat_xmlparser___dir__(xmlparseobject *self, PyObject *Py_UNUSED(ignored)) -{ - return pyexpat_xmlparser___dir___impl(self); -} - static PyObject * pyexpat_xmlparser___dir___impl(xmlparseobject *self) -/*[clinic end generated code: output=1ed6efe83bc304cc input=76aa455f2a661384]*/ +/*[clinic end generated code: output=bc22451efb9e4d17 input=76aa455f2a661384]*/ { #define APPEND(list, str) \ do { \ @@ -1765,41 +1550,9 @@ pyexpat.ParserCreate Return a new XML parser object. [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_ParserCreate__doc__, -"ParserCreate($module, /, encoding=None, namespace_separator=None,\n" -" intern=None)\n" -"--\n" -"\n" -"Return a new XML parser object."); - -#define PYEXPAT_PARSERCREATE_METHODDEF \ - {"ParserCreate", (PyCFunction)pyexpat_ParserCreate, METH_VARARGS|METH_KEYWORDS, pyexpat_ParserCreate__doc__}, - -static PyObject * -pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, const char *namespace_separator, PyObject *intern); - -static PyObject * -pyexpat_ParserCreate(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"encoding", "namespace_separator", "intern", NULL}; - const char *encoding = NULL; - const char *namespace_separator = NULL; - PyObject *intern = NULL; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|zzO:ParserCreate", _keywords, - &encoding, &namespace_separator, &intern)) - goto exit; - return_value = pyexpat_ParserCreate_impl(module, encoding, namespace_separator, intern); - -exit: - return return_value; -} - static PyObject * pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, const char *namespace_separator, PyObject *intern) -/*[clinic end generated code: output=4fc027dd33b7a2ac input=71b9f471aa6f8f86]*/ +/*[clinic end generated code: output=b839b60992d8ce71 input=71b9f471aa6f8f86]*/ { PyObject *result; int intern_decref = 0; @@ -1842,37 +1595,9 @@ pyexpat.ErrorString Returns string error for given number. [clinic start generated code]*/ -PyDoc_STRVAR(pyexpat_ErrorString__doc__, -"ErrorString($module, code, /)\n" -"--\n" -"\n" -"Returns string error for given number."); - -#define PYEXPAT_ERRORSTRING_METHODDEF \ - {"ErrorString", (PyCFunction)pyexpat_ErrorString, METH_VARARGS, pyexpat_ErrorString__doc__}, - -static PyObject * -pyexpat_ErrorString_impl(PyModuleDef *module, long code); - -static PyObject * -pyexpat_ErrorString(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - long code; - - if (!PyArg_ParseTuple(args, - "l:ErrorString", - &code)) - goto exit; - return_value = pyexpat_ErrorString_impl(module, code); - -exit: - return return_value; -} - static PyObject * pyexpat_ErrorString_impl(PyModuleDef *module, long code) -/*[clinic end generated code: output=c70f3cd82bfaf067 input=cc67de010d9e62b3]*/ +/*[clinic end generated code: output=d87668108b6868e5 input=cc67de010d9e62b3]*/ { return Py_BuildValue("z", XML_ErrorString((int)code)); } @@ -2252,8 +1977,4 @@ static struct HandlerInfo handler_info[] = { /*[clinic input] dump buffer [clinic start generated code]*/ - -#ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF - #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF -#endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=a7880cb78bbd58ce input=524ce2e021e4eba6]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=524ce2e021e4eba6]*/ diff --git a/Modules/sha1module.c b/Modules/sha1module.c index 8961de48d8..d1f89364d7 100644 --- a/Modules/sha1module.c +++ b/Modules/sha1module.c @@ -53,6 +53,7 @@ typedef struct { struct sha1_state hash_state; } SHA1object; +#include "clinic/sha1module.c.h" /* ------------------------------------------------------------------------ * @@ -320,27 +321,9 @@ SHA1Type.copy Return a copy of the hash object. [clinic start generated code]*/ -PyDoc_STRVAR(SHA1Type_copy__doc__, -"copy($self, /)\n" -"--\n" -"\n" -"Return a copy of the hash object."); - -#define SHA1TYPE_COPY_METHODDEF \ - {"copy", (PyCFunction)SHA1Type_copy, METH_NOARGS, SHA1Type_copy__doc__}, - -static PyObject * -SHA1Type_copy_impl(SHA1object *self); - -static PyObject * -SHA1Type_copy(SHA1object *self, PyObject *Py_UNUSED(ignored)) -{ - return SHA1Type_copy_impl(self); -} - static PyObject * SHA1Type_copy_impl(SHA1object *self) -/*[clinic end generated code: output=1a320e75a7444098 input=b7eae10df6f89b36]*/ +/*[clinic end generated code: output=b4e001264620f02a input=b7eae10df6f89b36]*/ { SHA1object *newobj; @@ -357,27 +340,9 @@ SHA1Type.digest Return the digest value as a string of binary data. [clinic start generated code]*/ -PyDoc_STRVAR(SHA1Type_digest__doc__, -"digest($self, /)\n" -"--\n" -"\n" -"Return the digest value as a string of binary data."); - -#define SHA1TYPE_DIGEST_METHODDEF \ - {"digest", (PyCFunction)SHA1Type_digest, METH_NOARGS, SHA1Type_digest__doc__}, - -static PyObject * -SHA1Type_digest_impl(SHA1object *self); - -static PyObject * -SHA1Type_digest(SHA1object *self, PyObject *Py_UNUSED(ignored)) -{ - return SHA1Type_digest_impl(self); -} - static PyObject * SHA1Type_digest_impl(SHA1object *self) -/*[clinic end generated code: output=c4920f75228bfbfd input=205d47e1927fd009]*/ +/*[clinic end generated code: output=2f05302a7aa2b5cb input=205d47e1927fd009]*/ { unsigned char digest[SHA1_DIGESTSIZE]; struct sha1_state temp; @@ -393,27 +358,9 @@ SHA1Type.hexdigest Return the digest value as a string of hexadecimal digits. [clinic start generated code]*/ -PyDoc_STRVAR(SHA1Type_hexdigest__doc__, -"hexdigest($self, /)\n" -"--\n" -"\n" -"Return the digest value as a string of hexadecimal digits."); - -#define SHA1TYPE_HEXDIGEST_METHODDEF \ - {"hexdigest", (PyCFunction)SHA1Type_hexdigest, METH_NOARGS, SHA1Type_hexdigest__doc__}, - -static PyObject * -SHA1Type_hexdigest_impl(SHA1object *self); - -static PyObject * -SHA1Type_hexdigest(SHA1object *self, PyObject *Py_UNUSED(ignored)) -{ - return SHA1Type_hexdigest_impl(self); -} - static PyObject * SHA1Type_hexdigest_impl(SHA1object *self) -/*[clinic end generated code: output=6e345aac201887b2 input=97691055c0c74ab0]*/ +/*[clinic end generated code: output=4161fd71e68c6659 input=97691055c0c74ab0]*/ { unsigned char digest[SHA1_DIGESTSIZE]; struct sha1_state temp; @@ -454,18 +401,9 @@ SHA1Type.update Update this hash object's state with the provided string. [clinic start generated code]*/ -PyDoc_STRVAR(SHA1Type_update__doc__, -"update($self, obj, /)\n" -"--\n" -"\n" -"Update this hash object\'s state with the provided string."); - -#define SHA1TYPE_UPDATE_METHODDEF \ - {"update", (PyCFunction)SHA1Type_update, METH_O, SHA1Type_update__doc__}, - static PyObject * SHA1Type_update(SHA1object *self, PyObject *obj) -/*[clinic end generated code: output=ab20a86a25e7d255 input=aad8e07812edbba3]*/ +/*[clinic end generated code: output=d9902f0e5015e9ae input=aad8e07812edbba3]*/ { Py_buffer buf; @@ -566,38 +504,9 @@ _sha1.sha1 Return a new SHA1 hash object; optionally initialized with a string. [clinic start generated code]*/ -PyDoc_STRVAR(_sha1_sha1__doc__, -"sha1($module, /, string=b\'\')\n" -"--\n" -"\n" -"Return a new SHA1 hash object; optionally initialized with a string."); - -#define _SHA1_SHA1_METHODDEF \ - {"sha1", (PyCFunction)_sha1_sha1, METH_VARARGS|METH_KEYWORDS, _sha1_sha1__doc__}, - -static PyObject * -_sha1_sha1_impl(PyModuleDef *module, PyObject *string); - -static PyObject * -_sha1_sha1(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; - PyObject *string = NULL; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:sha1", _keywords, - &string)) - goto exit; - return_value = _sha1_sha1_impl(module, string); - -exit: - return return_value; -} - static PyObject * _sha1_sha1_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=c9068552f07b8954 input=27ea54281d995ec2]*/ +/*[clinic end generated code: output=3e4e841386b9e8db input=27ea54281d995ec2]*/ { SHA1object *new; Py_buffer buf; diff --git a/Modules/sha256module.c b/Modules/sha256module.c index 7b1488696f..957fd2b8f9 100644 --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -52,6 +52,8 @@ typedef struct { int digestsize; } SHAobject; +#include "clinic/sha256module.c.h" + /* When run on a little-endian CPU we need to perform byte reversal on an array of longwords. */ @@ -404,27 +406,9 @@ SHA256Type.copy Return a copy of the hash object. [clinic start generated code]*/ -PyDoc_STRVAR(SHA256Type_copy__doc__, -"copy($self, /)\n" -"--\n" -"\n" -"Return a copy of the hash object."); - -#define SHA256TYPE_COPY_METHODDEF \ - {"copy", (PyCFunction)SHA256Type_copy, METH_NOARGS, SHA256Type_copy__doc__}, - -static PyObject * -SHA256Type_copy_impl(SHAobject *self); - -static PyObject * -SHA256Type_copy(SHAobject *self, PyObject *Py_UNUSED(ignored)) -{ - return SHA256Type_copy_impl(self); -} - static PyObject * SHA256Type_copy_impl(SHAobject *self) -/*[clinic end generated code: output=f716c39d3f81c27c input=f58840a618d4f2a7]*/ +/*[clinic end generated code: output=1a8bbd66a0c9c168 input=f58840a618d4f2a7]*/ { SHAobject *newobj; @@ -446,27 +430,9 @@ SHA256Type.digest Return the digest value as a string of binary data. [clinic start generated code]*/ -PyDoc_STRVAR(SHA256Type_digest__doc__, -"digest($self, /)\n" -"--\n" -"\n" -"Return the digest value as a string of binary data."); - -#define SHA256TYPE_DIGEST_METHODDEF \ - {"digest", (PyCFunction)SHA256Type_digest, METH_NOARGS, SHA256Type_digest__doc__}, - -static PyObject * -SHA256Type_digest_impl(SHAobject *self); - -static PyObject * -SHA256Type_digest(SHAobject *self, PyObject *Py_UNUSED(ignored)) -{ - return SHA256Type_digest_impl(self); -} - static PyObject * SHA256Type_digest_impl(SHAobject *self) -/*[clinic end generated code: output=72d34723d7bb694c input=1fb752e58954157d]*/ +/*[clinic end generated code: output=46616a5e909fbc3d input=1fb752e58954157d]*/ { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; @@ -482,27 +448,9 @@ SHA256Type.hexdigest Return the digest value as a string of hexadecimal digits. [clinic start generated code]*/ -PyDoc_STRVAR(SHA256Type_hexdigest__doc__, -"hexdigest($self, /)\n" -"--\n" -"\n" -"Return the digest value as a string of hexadecimal digits."); - -#define SHA256TYPE_HEXDIGEST_METHODDEF \ - {"hexdigest", (PyCFunction)SHA256Type_hexdigest, METH_NOARGS, SHA256Type_hexdigest__doc__}, - -static PyObject * -SHA256Type_hexdigest_impl(SHAobject *self); - -static PyObject * -SHA256Type_hexdigest(SHAobject *self, PyObject *Py_UNUSED(ignored)) -{ - return SHA256Type_hexdigest_impl(self); -} - static PyObject * SHA256Type_hexdigest_impl(SHAobject *self) -/*[clinic end generated code: output=3687aa6183c7d27f input=0cc4c714693010d1]*/ +/*[clinic end generated code: output=725f8a7041ae97f3 input=0cc4c714693010d1]*/ { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; @@ -543,18 +491,9 @@ SHA256Type.update Update this hash object's state with the provided string. [clinic start generated code]*/ -PyDoc_STRVAR(SHA256Type_update__doc__, -"update($self, obj, /)\n" -"--\n" -"\n" -"Update this hash object\'s state with the provided string."); - -#define SHA256TYPE_UPDATE_METHODDEF \ - {"update", (PyCFunction)SHA256Type_update, METH_O, SHA256Type_update__doc__}, - static PyObject * SHA256Type_update(SHAobject *self, PyObject *obj) -/*[clinic end generated code: output=b47f53d7cbeabee4 input=b2d449d5b30f0f5a]*/ +/*[clinic end generated code: output=0967fb2860c66af7 input=b2d449d5b30f0f5a]*/ { Py_buffer buf; @@ -686,38 +625,9 @@ _sha256.sha256 Return a new SHA-256 hash object; optionally initialized with a string. [clinic start generated code]*/ -PyDoc_STRVAR(_sha256_sha256__doc__, -"sha256($module, /, string=b\'\')\n" -"--\n" -"\n" -"Return a new SHA-256 hash object; optionally initialized with a string."); - -#define _SHA256_SHA256_METHODDEF \ - {"sha256", (PyCFunction)_sha256_sha256, METH_VARARGS|METH_KEYWORDS, _sha256_sha256__doc__}, - -static PyObject * -_sha256_sha256_impl(PyModuleDef *module, PyObject *string); - -static PyObject * -_sha256_sha256(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; - PyObject *string = NULL; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:sha256", _keywords, - &string)) - goto exit; - return_value = _sha256_sha256_impl(module, string); - -exit: - return return_value; -} - static PyObject * _sha256_sha256_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=4b1263d1e2fcdb98 input=09cce3fb855056b2]*/ +/*[clinic end generated code: output=d70e6e2d97112844 input=09cce3fb855056b2]*/ { SHAobject *new; Py_buffer buf; @@ -755,38 +665,9 @@ _sha256.sha224 Return a new SHA-224 hash object; optionally initialized with a string. [clinic start generated code]*/ -PyDoc_STRVAR(_sha256_sha224__doc__, -"sha224($module, /, string=b\'\')\n" -"--\n" -"\n" -"Return a new SHA-224 hash object; optionally initialized with a string."); - -#define _SHA256_SHA224_METHODDEF \ - {"sha224", (PyCFunction)_sha256_sha224, METH_VARARGS|METH_KEYWORDS, _sha256_sha224__doc__}, - -static PyObject * -_sha256_sha224_impl(PyModuleDef *module, PyObject *string); - -static PyObject * -_sha256_sha224(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; - PyObject *string = NULL; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:sha224", _keywords, - &string)) - goto exit; - return_value = _sha256_sha224_impl(module, string); - -exit: - return return_value; -} - static PyObject * _sha256_sha224_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=4dde0eb1cdaebc06 input=27a04ba24c353a73]*/ +/*[clinic end generated code: output=f2822bf28416b42a input=27a04ba24c353a73]*/ { SHAobject *new; Py_buffer buf; diff --git a/Modules/sha512module.c b/Modules/sha512module.c index 843f95d5c6..4533c003d5 100644 --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -55,6 +55,8 @@ typedef struct { int digestsize; } SHAobject; +#include "clinic/sha512module.c.h" + /* When run on a little-endian CPU we need to perform byte reversal on an array of longwords. */ @@ -471,27 +473,9 @@ SHA512Type.copy Return a copy of the hash object. [clinic start generated code]*/ -PyDoc_STRVAR(SHA512Type_copy__doc__, -"copy($self, /)\n" -"--\n" -"\n" -"Return a copy of the hash object."); - -#define SHA512TYPE_COPY_METHODDEF \ - {"copy", (PyCFunction)SHA512Type_copy, METH_NOARGS, SHA512Type_copy__doc__}, - -static PyObject * -SHA512Type_copy_impl(SHAobject *self); - -static PyObject * -SHA512Type_copy(SHAobject *self, PyObject *Py_UNUSED(ignored)) -{ - return SHA512Type_copy_impl(self); -} - static PyObject * SHA512Type_copy_impl(SHAobject *self) -/*[clinic end generated code: output=14f8e6ce9c61ece0 input=9f5f31e6c457776a]*/ +/*[clinic end generated code: output=adea896ed3164821 input=9f5f31e6c457776a]*/ { SHAobject *newobj; @@ -513,27 +497,9 @@ SHA512Type.digest Return the digest value as a string of binary data. [clinic start generated code]*/ -PyDoc_STRVAR(SHA512Type_digest__doc__, -"digest($self, /)\n" -"--\n" -"\n" -"Return the digest value as a string of binary data."); - -#define SHA512TYPE_DIGEST_METHODDEF \ - {"digest", (PyCFunction)SHA512Type_digest, METH_NOARGS, SHA512Type_digest__doc__}, - -static PyObject * -SHA512Type_digest_impl(SHAobject *self); - -static PyObject * -SHA512Type_digest(SHAobject *self, PyObject *Py_UNUSED(ignored)) -{ - return SHA512Type_digest_impl(self); -} - static PyObject * SHA512Type_digest_impl(SHAobject *self) -/*[clinic end generated code: output=be8de024b232977e input=60c2cede9e023018]*/ +/*[clinic end generated code: output=1080bbeeef7dde1b input=60c2cede9e023018]*/ { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; @@ -549,27 +515,9 @@ SHA512Type.hexdigest Return the digest value as a string of hexadecimal digits. [clinic start generated code]*/ -PyDoc_STRVAR(SHA512Type_hexdigest__doc__, -"hexdigest($self, /)\n" -"--\n" -"\n" -"Return the digest value as a string of hexadecimal digits."); - -#define SHA512TYPE_HEXDIGEST_METHODDEF \ - {"hexdigest", (PyCFunction)SHA512Type_hexdigest, METH_NOARGS, SHA512Type_hexdigest__doc__}, - -static PyObject * -SHA512Type_hexdigest_impl(SHAobject *self); - -static PyObject * -SHA512Type_hexdigest(SHAobject *self, PyObject *Py_UNUSED(ignored)) -{ - return SHA512Type_hexdigest_impl(self); -} - static PyObject * SHA512Type_hexdigest_impl(SHAobject *self) -/*[clinic end generated code: output=28a4ab2f9a1781b8 input=498b877b25cbe0a2]*/ +/*[clinic end generated code: output=7373305b8601e18b input=498b877b25cbe0a2]*/ { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; @@ -610,18 +558,9 @@ SHA512Type.update Update this hash object's state with the provided string. [clinic start generated code]*/ -PyDoc_STRVAR(SHA512Type_update__doc__, -"update($self, obj, /)\n" -"--\n" -"\n" -"Update this hash object\'s state with the provided string."); - -#define SHA512TYPE_UPDATE_METHODDEF \ - {"update", (PyCFunction)SHA512Type_update, METH_O, SHA512Type_update__doc__}, - static PyObject * SHA512Type_update(SHAobject *self, PyObject *obj) -/*[clinic end generated code: output=6be574cdc3a9c52d input=ded2b46656566283]*/ +/*[clinic end generated code: output=1cf333e73995a79e input=ded2b46656566283]*/ { Py_buffer buf; @@ -636,23 +575,7 @@ SHA512Type_update(SHAobject *self, PyObject *obj) /*[clinic input] dump buffer [clinic start generated code]*/ - -#ifndef SHA512TYPE_COPY_METHODDEF - #define SHA512TYPE_COPY_METHODDEF -#endif /* !defined(SHA512TYPE_COPY_METHODDEF) */ - -#ifndef SHA512TYPE_DIGEST_METHODDEF - #define SHA512TYPE_DIGEST_METHODDEF -#endif /* !defined(SHA512TYPE_DIGEST_METHODDEF) */ - -#ifndef SHA512TYPE_HEXDIGEST_METHODDEF - #define SHA512TYPE_HEXDIGEST_METHODDEF -#endif /* !defined(SHA512TYPE_HEXDIGEST_METHODDEF) */ - -#ifndef SHA512TYPE_UPDATE_METHODDEF - #define SHA512TYPE_UPDATE_METHODDEF -#endif /* !defined(SHA512TYPE_UPDATE_METHODDEF) */ -/*[clinic end generated code: output=de713947d31130e9 input=524ce2e021e4eba6]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=524ce2e021e4eba6]*/ static PyMethodDef SHA_methods[] = { SHA512TYPE_COPY_METHODDEF @@ -773,38 +696,9 @@ _sha512.sha512 Return a new SHA-512 hash object; optionally initialized with a string. [clinic start generated code]*/ -PyDoc_STRVAR(_sha512_sha512__doc__, -"sha512($module, /, string=b\'\')\n" -"--\n" -"\n" -"Return a new SHA-512 hash object; optionally initialized with a string."); - -#define _SHA512_SHA512_METHODDEF \ - {"sha512", (PyCFunction)_sha512_sha512, METH_VARARGS|METH_KEYWORDS, _sha512_sha512__doc__}, - -static PyObject * -_sha512_sha512_impl(PyModuleDef *module, PyObject *string); - -static PyObject * -_sha512_sha512(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; - PyObject *string = NULL; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:sha512", _keywords, - &string)) - goto exit; - return_value = _sha512_sha512_impl(module, string); - -exit: - return return_value; -} - static PyObject * _sha512_sha512_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=9e39b11115f36878 input=e69bad9ae9b6a308]*/ +/*[clinic end generated code: output=da13bc0a94da6de3 input=e69bad9ae9b6a308]*/ { SHAobject *new; Py_buffer buf; @@ -842,38 +736,9 @@ _sha512.sha384 Return a new SHA-384 hash object; optionally initialized with a string. [clinic start generated code]*/ -PyDoc_STRVAR(_sha512_sha384__doc__, -"sha384($module, /, string=b\'\')\n" -"--\n" -"\n" -"Return a new SHA-384 hash object; optionally initialized with a string."); - -#define _SHA512_SHA384_METHODDEF \ - {"sha384", (PyCFunction)_sha512_sha384, METH_VARARGS|METH_KEYWORDS, _sha512_sha384__doc__}, - -static PyObject * -_sha512_sha384_impl(PyModuleDef *module, PyObject *string); - -static PyObject * -_sha512_sha384(PyModuleDef *module, PyObject *args, PyObject *kwargs) -{ - PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; - PyObject *string = NULL; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:sha384", _keywords, - &string)) - goto exit; - return_value = _sha512_sha384_impl(module, string); - -exit: - return return_value; -} - static PyObject * _sha512_sha384_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=397c6fba3525b93a input=c9327788d4ea4545]*/ +/*[clinic end generated code: output=ac731aea5509174d input=c9327788d4ea4545]*/ { SHAobject *new; Py_buffer buf; @@ -907,15 +772,7 @@ _sha512_sha384_impl(PyModuleDef *module, PyObject *string) /*[clinic input] dump buffer [clinic start generated code]*/ - -#ifndef _SHA512_SHA512_METHODDEF - #define _SHA512_SHA512_METHODDEF -#endif /* !defined(_SHA512_SHA512_METHODDEF) */ - -#ifndef _SHA512_SHA384_METHODDEF - #define _SHA512_SHA384_METHODDEF -#endif /* !defined(_SHA512_SHA384_METHODDEF) */ -/*[clinic end generated code: output=69d84aa9445b01d8 input=524ce2e021e4eba6]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=524ce2e021e4eba6]*/ /* List of functions exported by this module */ diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c index 013cb1156e..49324d50f8 100644 --- a/Modules/spwdmodule.c +++ b/Modules/spwdmodule.c @@ -13,10 +13,9 @@ #include "clinic/spwdmodule.c.h" /*[clinic input] -output preset file module spwd [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b3464a3667278fae]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=c0b841b90a6a07ce]*/ PyDoc_STRVAR(spwd__doc__, "This module provides access to the Unix shadow password database.\n\ diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index 507cef3ba1..e89c92d669 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -73,6 +73,8 @@ typedef struct previous_version { Py_UCS4 (*normalization)(Py_UCS4); } PreviousDBVersion; +#include "clinic/unicodedata.c.h" + #define get_old_record(self, v) ((((PreviousDBVersion*)self)->getrecord)(v)) static PyMemberDef DB_members[] = { @@ -130,42 +132,9 @@ as integer. If no such value is defined, default is returned, or, if not given, ValueError is raised. [clinic start generated code]*/ -PyDoc_STRVAR(unicodedata_UCD_decimal__doc__, -"decimal($self, unichr, default=None, /)\n" -"--\n" -"\n" -"Converts a Unicode character into its equivalent decimal value.\n" -"\n" -"Returns the decimal value assigned to the Unicode character unichr\n" -"as integer. If no such value is defined, default is returned, or, if\n" -"not given, ValueError is raised."); - -#define UNICODEDATA_UCD_DECIMAL_METHODDEF \ - {"decimal", (PyCFunction)unicodedata_UCD_decimal, METH_VARARGS, unicodedata_UCD_decimal__doc__}, - -static PyObject * -unicodedata_UCD_decimal_impl(PreviousDBVersion *self, PyUnicodeObject *unichr, PyObject *default_value); - -static PyObject * -unicodedata_UCD_decimal(PreviousDBVersion *self, PyObject *args) -{ - PyObject *return_value = NULL; - PyUnicodeObject *unichr; - PyObject *default_value = NULL; - - if (!PyArg_ParseTuple(args, - "O!|O:decimal", - &PyUnicode_Type, &unichr, &default_value)) - goto exit; - return_value = unicodedata_UCD_decimal_impl(self, unichr, default_value); - -exit: - return return_value; -} - static PyObject * unicodedata_UCD_decimal_impl(PreviousDBVersion *self, PyUnicodeObject *unichr, PyObject *default_value) -/*[clinic end generated code: output=8689669896d293df input=c25c9d2b4de076b1]*/ +/*[clinic end generated code: output=d285215533b58b28 input=c25c9d2b4de076b1]*/ { int have_old = 0; long rc; diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 0d2e188b43..768c4510d6 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -82,12 +82,11 @@ zlib_error(z_stream zst, int err, char *msg) } /*[clinic input] -output preset file module zlib class zlib.Compress "compobject *" "&Comptype" class zlib.Decompress "compobject *" "&Decomptype" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=bfd4c340573ba91d]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=093935115c3e3158]*/ static compobject * newcompobject(PyTypeObject *type) -- cgit v1.2.1 From dc6237d9ff54cb520ea9f53d78b769c59f5cf11d Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 4 Apr 2015 00:12:11 +0300 Subject: Issue #23492: Argument Clinic now generates argument parsing code with PyArg_Parse instead of PyArg_ParseTuple if possible. --- Modules/clinic/_bz2module.c.h | 8 +- Modules/clinic/_codecsmodule.c.h | 8 +- Modules/clinic/_lzmamodule.c.h | 20 ++--- Modules/clinic/arraymodule.c.h | 20 ++--- Modules/clinic/binascii.c.h | 74 ++++++++-------- Modules/clinic/cmathmodule.c.h | 122 +++++++++++++-------------- Modules/clinic/posixmodule.c.h | 176 +++++++++++++++++++-------------------- Modules/clinic/pwdmodule.c.h | 8 +- Modules/clinic/pyexpat.c.h | 20 ++--- Modules/clinic/spwdmodule.c.h | 8 +- Modules/clinic/zlibmodule.c.h | 8 +- 11 files changed, 236 insertions(+), 236 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/_bz2module.c.h b/Modules/clinic/_bz2module.c.h index 5201432a4c..d118c39627 100644 --- a/Modules/clinic/_bz2module.c.h +++ b/Modules/clinic/_bz2module.c.h @@ -14,18 +14,18 @@ PyDoc_STRVAR(_bz2_BZ2Compressor_compress__doc__, "flush() method to finish the compression process."); #define _BZ2_BZ2COMPRESSOR_COMPRESS_METHODDEF \ - {"compress", (PyCFunction)_bz2_BZ2Compressor_compress, METH_VARARGS, _bz2_BZ2Compressor_compress__doc__}, + {"compress", (PyCFunction)_bz2_BZ2Compressor_compress, METH_O, _bz2_BZ2Compressor_compress__doc__}, static PyObject * _bz2_BZ2Compressor_compress_impl(BZ2Compressor *self, Py_buffer *data); static PyObject * -_bz2_BZ2Compressor_compress(BZ2Compressor *self, PyObject *args) +_bz2_BZ2Compressor_compress(BZ2Compressor *self, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:compress", &data)) goto exit; @@ -168,4 +168,4 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=8e65e3953430bc3d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=3565d163a360af01 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index 6417b61660..084648f13d 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -9,18 +9,18 @@ PyDoc_STRVAR(_codecs__forget_codec__doc__, "Purge the named codec from the internal codec lookup cache"); #define _CODECS__FORGET_CODEC_METHODDEF \ - {"_forget_codec", (PyCFunction)_codecs__forget_codec, METH_VARARGS, _codecs__forget_codec__doc__}, + {"_forget_codec", (PyCFunction)_codecs__forget_codec, METH_O, _codecs__forget_codec__doc__}, static PyObject * _codecs__forget_codec_impl(PyModuleDef *module, const char *encoding); static PyObject * -_codecs__forget_codec(PyModuleDef *module, PyObject *args) +_codecs__forget_codec(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; const char *encoding; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "s:_forget_codec", &encoding)) goto exit; @@ -29,4 +29,4 @@ _codecs__forget_codec(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=cdea83e21d76a900 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=fc5ce4d3166f7d96 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h index 636427137f..131edd3f75 100644 --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -14,18 +14,18 @@ PyDoc_STRVAR(_lzma_LZMACompressor_compress__doc__, "flush() method to finish the compression process."); #define _LZMA_LZMACOMPRESSOR_COMPRESS_METHODDEF \ - {"compress", (PyCFunction)_lzma_LZMACompressor_compress, METH_VARARGS, _lzma_LZMACompressor_compress__doc__}, + {"compress", (PyCFunction)_lzma_LZMACompressor_compress, METH_O, _lzma_LZMACompressor_compress__doc__}, static PyObject * _lzma_LZMACompressor_compress_impl(Compressor *self, Py_buffer *data); static PyObject * -_lzma_LZMACompressor_compress(Compressor *self, PyObject *args) +_lzma_LZMACompressor_compress(Compressor *self, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:compress", &data)) goto exit; @@ -162,18 +162,18 @@ PyDoc_STRVAR(_lzma_is_check_supported__doc__, "Always returns True for CHECK_NONE and CHECK_CRC32."); #define _LZMA_IS_CHECK_SUPPORTED_METHODDEF \ - {"is_check_supported", (PyCFunction)_lzma_is_check_supported, METH_VARARGS, _lzma_is_check_supported__doc__}, + {"is_check_supported", (PyCFunction)_lzma_is_check_supported, METH_O, _lzma_is_check_supported__doc__}, static PyObject * _lzma_is_check_supported_impl(PyModuleDef *module, int check_id); static PyObject * -_lzma_is_check_supported(PyModuleDef *module, PyObject *args) +_lzma_is_check_supported(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int check_id; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:is_check_supported", &check_id)) goto exit; @@ -192,18 +192,18 @@ PyDoc_STRVAR(_lzma__encode_filter_properties__doc__, "The result does not include the filter ID itself, only the options."); #define _LZMA__ENCODE_FILTER_PROPERTIES_METHODDEF \ - {"_encode_filter_properties", (PyCFunction)_lzma__encode_filter_properties, METH_VARARGS, _lzma__encode_filter_properties__doc__}, + {"_encode_filter_properties", (PyCFunction)_lzma__encode_filter_properties, METH_O, _lzma__encode_filter_properties__doc__}, static PyObject * _lzma__encode_filter_properties_impl(PyModuleDef *module, lzma_filter filter); static PyObject * -_lzma__encode_filter_properties(PyModuleDef *module, PyObject *args) +_lzma__encode_filter_properties(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; lzma_filter filter = {LZMA_VLI_UNKNOWN, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:_encode_filter_properties", lzma_filter_converter, &filter)) goto exit; @@ -251,4 +251,4 @@ exit: return return_value; } -/*[clinic end generated code: output=dc42b73890609369 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ea7f2b2c4019fe86 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h index 57d769026d..5e664213ef 100644 --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -267,18 +267,18 @@ PyDoc_STRVAR(array_array_fromstring__doc__, "This method is deprecated. Use frombytes instead."); #define ARRAY_ARRAY_FROMSTRING_METHODDEF \ - {"fromstring", (PyCFunction)array_array_fromstring, METH_VARARGS, array_array_fromstring__doc__}, + {"fromstring", (PyCFunction)array_array_fromstring, METH_O, array_array_fromstring__doc__}, static PyObject * array_array_fromstring_impl(arrayobject *self, Py_buffer *buffer); static PyObject * -array_array_fromstring(arrayobject *self, PyObject *args) +array_array_fromstring(arrayobject *self, PyObject *arg) { PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "s*:fromstring", &buffer)) goto exit; @@ -299,18 +299,18 @@ PyDoc_STRVAR(array_array_frombytes__doc__, "Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method)."); #define ARRAY_ARRAY_FROMBYTES_METHODDEF \ - {"frombytes", (PyCFunction)array_array_frombytes, METH_VARARGS, array_array_frombytes__doc__}, + {"frombytes", (PyCFunction)array_array_frombytes, METH_O, array_array_frombytes__doc__}, static PyObject * array_array_frombytes_impl(arrayobject *self, Py_buffer *buffer); static PyObject * -array_array_frombytes(arrayobject *self, PyObject *args) +array_array_frombytes(arrayobject *self, PyObject *arg) { PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:frombytes", &buffer)) goto exit; @@ -373,19 +373,19 @@ PyDoc_STRVAR(array_array_fromunicode__doc__, "some other type."); #define ARRAY_ARRAY_FROMUNICODE_METHODDEF \ - {"fromunicode", (PyCFunction)array_array_fromunicode, METH_VARARGS, array_array_fromunicode__doc__}, + {"fromunicode", (PyCFunction)array_array_fromunicode, METH_O, array_array_fromunicode__doc__}, static PyObject * array_array_fromunicode_impl(arrayobject *self, Py_UNICODE *ustr, Py_ssize_clean_t ustr_length); static PyObject * -array_array_fromunicode(arrayobject *self, PyObject *args) +array_array_fromunicode(arrayobject *self, PyObject *arg) { PyObject *return_value = NULL; Py_UNICODE *ustr; Py_ssize_clean_t ustr_length; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "u#:fromunicode", &ustr, &ustr_length)) goto exit; @@ -502,4 +502,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__, #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, -/*[clinic end generated code: output=e1deb61c6a3bc8c8 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a8fbe83c2026fa83 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h index b2b6e6b4fa..0e42c36b61 100644 --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -9,18 +9,18 @@ PyDoc_STRVAR(binascii_a2b_uu__doc__, "Decode a line of uuencoded data."); #define BINASCII_A2B_UU_METHODDEF \ - {"a2b_uu", (PyCFunction)binascii_a2b_uu, METH_VARARGS, binascii_a2b_uu__doc__}, + {"a2b_uu", (PyCFunction)binascii_a2b_uu, METH_O, binascii_a2b_uu__doc__}, static PyObject * binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data); static PyObject * -binascii_a2b_uu(PyModuleDef *module, PyObject *args) +binascii_a2b_uu(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:a2b_uu", ascii_buffer_converter, &data)) goto exit; @@ -41,18 +41,18 @@ PyDoc_STRVAR(binascii_b2a_uu__doc__, "Uuencode line of data."); #define BINASCII_B2A_UU_METHODDEF \ - {"b2a_uu", (PyCFunction)binascii_b2a_uu, METH_VARARGS, binascii_b2a_uu__doc__}, + {"b2a_uu", (PyCFunction)binascii_b2a_uu, METH_O, binascii_b2a_uu__doc__}, static PyObject * binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data); static PyObject * -binascii_b2a_uu(PyModuleDef *module, PyObject *args) +binascii_b2a_uu(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:b2a_uu", &data)) goto exit; @@ -73,18 +73,18 @@ PyDoc_STRVAR(binascii_a2b_base64__doc__, "Decode a line of base64 data."); #define BINASCII_A2B_BASE64_METHODDEF \ - {"a2b_base64", (PyCFunction)binascii_a2b_base64, METH_VARARGS, binascii_a2b_base64__doc__}, + {"a2b_base64", (PyCFunction)binascii_a2b_base64, METH_O, binascii_a2b_base64__doc__}, static PyObject * binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data); static PyObject * -binascii_a2b_base64(PyModuleDef *module, PyObject *args) +binascii_a2b_base64(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:a2b_base64", ascii_buffer_converter, &data)) goto exit; @@ -105,18 +105,18 @@ PyDoc_STRVAR(binascii_b2a_base64__doc__, "Base64-code line of data."); #define BINASCII_B2A_BASE64_METHODDEF \ - {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_VARARGS, binascii_b2a_base64__doc__}, + {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_O, binascii_b2a_base64__doc__}, static PyObject * binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data); static PyObject * -binascii_b2a_base64(PyModuleDef *module, PyObject *args) +binascii_b2a_base64(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:b2a_base64", &data)) goto exit; @@ -137,18 +137,18 @@ PyDoc_STRVAR(binascii_a2b_hqx__doc__, "Decode .hqx coding."); #define BINASCII_A2B_HQX_METHODDEF \ - {"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_VARARGS, binascii_a2b_hqx__doc__}, + {"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_O, binascii_a2b_hqx__doc__}, static PyObject * binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data); static PyObject * -binascii_a2b_hqx(PyModuleDef *module, PyObject *args) +binascii_a2b_hqx(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:a2b_hqx", ascii_buffer_converter, &data)) goto exit; @@ -169,18 +169,18 @@ PyDoc_STRVAR(binascii_rlecode_hqx__doc__, "Binhex RLE-code binary data."); #define BINASCII_RLECODE_HQX_METHODDEF \ - {"rlecode_hqx", (PyCFunction)binascii_rlecode_hqx, METH_VARARGS, binascii_rlecode_hqx__doc__}, + {"rlecode_hqx", (PyCFunction)binascii_rlecode_hqx, METH_O, binascii_rlecode_hqx__doc__}, static PyObject * binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data); static PyObject * -binascii_rlecode_hqx(PyModuleDef *module, PyObject *args) +binascii_rlecode_hqx(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:rlecode_hqx", &data)) goto exit; @@ -201,18 +201,18 @@ PyDoc_STRVAR(binascii_b2a_hqx__doc__, "Encode .hqx data."); #define BINASCII_B2A_HQX_METHODDEF \ - {"b2a_hqx", (PyCFunction)binascii_b2a_hqx, METH_VARARGS, binascii_b2a_hqx__doc__}, + {"b2a_hqx", (PyCFunction)binascii_b2a_hqx, METH_O, binascii_b2a_hqx__doc__}, static PyObject * binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data); static PyObject * -binascii_b2a_hqx(PyModuleDef *module, PyObject *args) +binascii_b2a_hqx(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:b2a_hqx", &data)) goto exit; @@ -233,18 +233,18 @@ PyDoc_STRVAR(binascii_rledecode_hqx__doc__, "Decode hexbin RLE-coded string."); #define BINASCII_RLEDECODE_HQX_METHODDEF \ - {"rledecode_hqx", (PyCFunction)binascii_rledecode_hqx, METH_VARARGS, binascii_rledecode_hqx__doc__}, + {"rledecode_hqx", (PyCFunction)binascii_rledecode_hqx, METH_O, binascii_rledecode_hqx__doc__}, static PyObject * binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data); static PyObject * -binascii_rledecode_hqx(PyModuleDef *module, PyObject *args) +binascii_rledecode_hqx(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:rledecode_hqx", &data)) goto exit; @@ -342,18 +342,18 @@ PyDoc_STRVAR(binascii_b2a_hex__doc__, "available as \"hexlify()\"."); #define BINASCII_B2A_HEX_METHODDEF \ - {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_VARARGS, binascii_b2a_hex__doc__}, + {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_O, binascii_b2a_hex__doc__}, static PyObject * binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data); static PyObject * -binascii_b2a_hex(PyModuleDef *module, PyObject *args) +binascii_b2a_hex(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:b2a_hex", &data)) goto exit; @@ -376,18 +376,18 @@ PyDoc_STRVAR(binascii_hexlify__doc__, "The return value is a bytes object."); #define BINASCII_HEXLIFY_METHODDEF \ - {"hexlify", (PyCFunction)binascii_hexlify, METH_VARARGS, binascii_hexlify__doc__}, + {"hexlify", (PyCFunction)binascii_hexlify, METH_O, binascii_hexlify__doc__}, static PyObject * binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data); static PyObject * -binascii_hexlify(PyModuleDef *module, PyObject *args) +binascii_hexlify(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:hexlify", &data)) goto exit; @@ -411,18 +411,18 @@ PyDoc_STRVAR(binascii_a2b_hex__doc__, "This function is also available as \"unhexlify()\"."); #define BINASCII_A2B_HEX_METHODDEF \ - {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_VARARGS, binascii_a2b_hex__doc__}, + {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_O, binascii_a2b_hex__doc__}, static PyObject * binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr); static PyObject * -binascii_a2b_hex(PyModuleDef *module, PyObject *args) +binascii_a2b_hex(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:a2b_hex", ascii_buffer_converter, &hexstr)) goto exit; @@ -445,18 +445,18 @@ PyDoc_STRVAR(binascii_unhexlify__doc__, "hexstr must contain an even number of hex digits (upper or lower case)."); #define BINASCII_UNHEXLIFY_METHODDEF \ - {"unhexlify", (PyCFunction)binascii_unhexlify, METH_VARARGS, binascii_unhexlify__doc__}, + {"unhexlify", (PyCFunction)binascii_unhexlify, METH_O, binascii_unhexlify__doc__}, static PyObject * binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr); static PyObject * -binascii_unhexlify(PyModuleDef *module, PyObject *args) +binascii_unhexlify(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:unhexlify", ascii_buffer_converter, &hexstr)) goto exit; @@ -543,4 +543,4 @@ exit: return return_value; } -/*[clinic end generated code: output=771126f8f53e84e7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=31ccbd5fddc8fd75 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h index d0c48d334e..4655dbf893 100644 --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -9,19 +9,19 @@ PyDoc_STRVAR(cmath_acos__doc__, "Return the arc cosine of z."); #define CMATH_ACOS_METHODDEF \ - {"acos", (PyCFunction)cmath_acos, METH_VARARGS, cmath_acos__doc__}, + {"acos", (PyCFunction)cmath_acos, METH_O, cmath_acos__doc__}, static Py_complex cmath_acos_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_acos(PyModuleDef *module, PyObject *args) +cmath_acos(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:acos", &z)) goto exit; @@ -52,19 +52,19 @@ PyDoc_STRVAR(cmath_acosh__doc__, "Return the inverse hyperbolic cosine of z."); #define CMATH_ACOSH_METHODDEF \ - {"acosh", (PyCFunction)cmath_acosh, METH_VARARGS, cmath_acosh__doc__}, + {"acosh", (PyCFunction)cmath_acosh, METH_O, cmath_acosh__doc__}, static Py_complex cmath_acosh_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_acosh(PyModuleDef *module, PyObject *args) +cmath_acosh(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:acosh", &z)) goto exit; @@ -95,19 +95,19 @@ PyDoc_STRVAR(cmath_asin__doc__, "Return the arc sine of z."); #define CMATH_ASIN_METHODDEF \ - {"asin", (PyCFunction)cmath_asin, METH_VARARGS, cmath_asin__doc__}, + {"asin", (PyCFunction)cmath_asin, METH_O, cmath_asin__doc__}, static Py_complex cmath_asin_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_asin(PyModuleDef *module, PyObject *args) +cmath_asin(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:asin", &z)) goto exit; @@ -138,19 +138,19 @@ PyDoc_STRVAR(cmath_asinh__doc__, "Return the inverse hyperbolic sine of z."); #define CMATH_ASINH_METHODDEF \ - {"asinh", (PyCFunction)cmath_asinh, METH_VARARGS, cmath_asinh__doc__}, + {"asinh", (PyCFunction)cmath_asinh, METH_O, cmath_asinh__doc__}, static Py_complex cmath_asinh_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_asinh(PyModuleDef *module, PyObject *args) +cmath_asinh(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:asinh", &z)) goto exit; @@ -181,19 +181,19 @@ PyDoc_STRVAR(cmath_atan__doc__, "Return the arc tangent of z."); #define CMATH_ATAN_METHODDEF \ - {"atan", (PyCFunction)cmath_atan, METH_VARARGS, cmath_atan__doc__}, + {"atan", (PyCFunction)cmath_atan, METH_O, cmath_atan__doc__}, static Py_complex cmath_atan_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_atan(PyModuleDef *module, PyObject *args) +cmath_atan(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:atan", &z)) goto exit; @@ -224,19 +224,19 @@ PyDoc_STRVAR(cmath_atanh__doc__, "Return the inverse hyperbolic tangent of z."); #define CMATH_ATANH_METHODDEF \ - {"atanh", (PyCFunction)cmath_atanh, METH_VARARGS, cmath_atanh__doc__}, + {"atanh", (PyCFunction)cmath_atanh, METH_O, cmath_atanh__doc__}, static Py_complex cmath_atanh_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_atanh(PyModuleDef *module, PyObject *args) +cmath_atanh(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:atanh", &z)) goto exit; @@ -267,19 +267,19 @@ PyDoc_STRVAR(cmath_cos__doc__, "Return the cosine of z."); #define CMATH_COS_METHODDEF \ - {"cos", (PyCFunction)cmath_cos, METH_VARARGS, cmath_cos__doc__}, + {"cos", (PyCFunction)cmath_cos, METH_O, cmath_cos__doc__}, static Py_complex cmath_cos_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_cos(PyModuleDef *module, PyObject *args) +cmath_cos(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:cos", &z)) goto exit; @@ -310,19 +310,19 @@ PyDoc_STRVAR(cmath_cosh__doc__, "Return the hyperbolic cosine of z."); #define CMATH_COSH_METHODDEF \ - {"cosh", (PyCFunction)cmath_cosh, METH_VARARGS, cmath_cosh__doc__}, + {"cosh", (PyCFunction)cmath_cosh, METH_O, cmath_cosh__doc__}, static Py_complex cmath_cosh_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_cosh(PyModuleDef *module, PyObject *args) +cmath_cosh(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:cosh", &z)) goto exit; @@ -353,19 +353,19 @@ PyDoc_STRVAR(cmath_exp__doc__, "Return the exponential value e**z."); #define CMATH_EXP_METHODDEF \ - {"exp", (PyCFunction)cmath_exp, METH_VARARGS, cmath_exp__doc__}, + {"exp", (PyCFunction)cmath_exp, METH_O, cmath_exp__doc__}, static Py_complex cmath_exp_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_exp(PyModuleDef *module, PyObject *args) +cmath_exp(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:exp", &z)) goto exit; @@ -396,19 +396,19 @@ PyDoc_STRVAR(cmath_log10__doc__, "Return the base-10 logarithm of z."); #define CMATH_LOG10_METHODDEF \ - {"log10", (PyCFunction)cmath_log10, METH_VARARGS, cmath_log10__doc__}, + {"log10", (PyCFunction)cmath_log10, METH_O, cmath_log10__doc__}, static Py_complex cmath_log10_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_log10(PyModuleDef *module, PyObject *args) +cmath_log10(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:log10", &z)) goto exit; @@ -439,19 +439,19 @@ PyDoc_STRVAR(cmath_sin__doc__, "Return the sine of z."); #define CMATH_SIN_METHODDEF \ - {"sin", (PyCFunction)cmath_sin, METH_VARARGS, cmath_sin__doc__}, + {"sin", (PyCFunction)cmath_sin, METH_O, cmath_sin__doc__}, static Py_complex cmath_sin_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_sin(PyModuleDef *module, PyObject *args) +cmath_sin(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:sin", &z)) goto exit; @@ -482,19 +482,19 @@ PyDoc_STRVAR(cmath_sinh__doc__, "Return the hyperbolic sine of z."); #define CMATH_SINH_METHODDEF \ - {"sinh", (PyCFunction)cmath_sinh, METH_VARARGS, cmath_sinh__doc__}, + {"sinh", (PyCFunction)cmath_sinh, METH_O, cmath_sinh__doc__}, static Py_complex cmath_sinh_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_sinh(PyModuleDef *module, PyObject *args) +cmath_sinh(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:sinh", &z)) goto exit; @@ -525,19 +525,19 @@ PyDoc_STRVAR(cmath_sqrt__doc__, "Return the square root of z."); #define CMATH_SQRT_METHODDEF \ - {"sqrt", (PyCFunction)cmath_sqrt, METH_VARARGS, cmath_sqrt__doc__}, + {"sqrt", (PyCFunction)cmath_sqrt, METH_O, cmath_sqrt__doc__}, static Py_complex cmath_sqrt_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_sqrt(PyModuleDef *module, PyObject *args) +cmath_sqrt(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:sqrt", &z)) goto exit; @@ -568,19 +568,19 @@ PyDoc_STRVAR(cmath_tan__doc__, "Return the tangent of z."); #define CMATH_TAN_METHODDEF \ - {"tan", (PyCFunction)cmath_tan, METH_VARARGS, cmath_tan__doc__}, + {"tan", (PyCFunction)cmath_tan, METH_O, cmath_tan__doc__}, static Py_complex cmath_tan_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_tan(PyModuleDef *module, PyObject *args) +cmath_tan(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:tan", &z)) goto exit; @@ -611,19 +611,19 @@ PyDoc_STRVAR(cmath_tanh__doc__, "Return the hyperbolic tangent of z."); #define CMATH_TANH_METHODDEF \ - {"tanh", (PyCFunction)cmath_tanh, METH_VARARGS, cmath_tanh__doc__}, + {"tanh", (PyCFunction)cmath_tanh, METH_O, cmath_tanh__doc__}, static Py_complex cmath_tanh_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_tanh(PyModuleDef *module, PyObject *args) +cmath_tanh(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; Py_complex _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:tanh", &z)) goto exit; @@ -685,18 +685,18 @@ PyDoc_STRVAR(cmath_phase__doc__, "Return argument, also known as the phase angle, of a complex."); #define CMATH_PHASE_METHODDEF \ - {"phase", (PyCFunction)cmath_phase, METH_VARARGS, cmath_phase__doc__}, + {"phase", (PyCFunction)cmath_phase, METH_O, cmath_phase__doc__}, static PyObject * cmath_phase_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_phase(PyModuleDef *module, PyObject *args) +cmath_phase(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:phase", &z)) goto exit; @@ -715,18 +715,18 @@ PyDoc_STRVAR(cmath_polar__doc__, "r is the distance from 0 and phi the phase angle."); #define CMATH_POLAR_METHODDEF \ - {"polar", (PyCFunction)cmath_polar, METH_VARARGS, cmath_polar__doc__}, + {"polar", (PyCFunction)cmath_polar, METH_O, cmath_polar__doc__}, static PyObject * cmath_polar_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_polar(PyModuleDef *module, PyObject *args) +cmath_polar(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:polar", &z)) goto exit; @@ -772,18 +772,18 @@ PyDoc_STRVAR(cmath_isfinite__doc__, "Return True if both the real and imaginary parts of z are finite, else False."); #define CMATH_ISFINITE_METHODDEF \ - {"isfinite", (PyCFunction)cmath_isfinite, METH_VARARGS, cmath_isfinite__doc__}, + {"isfinite", (PyCFunction)cmath_isfinite, METH_O, cmath_isfinite__doc__}, static PyObject * cmath_isfinite_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_isfinite(PyModuleDef *module, PyObject *args) +cmath_isfinite(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:isfinite", &z)) goto exit; @@ -800,18 +800,18 @@ PyDoc_STRVAR(cmath_isnan__doc__, "Checks if the real or imaginary part of z not a number (NaN)."); #define CMATH_ISNAN_METHODDEF \ - {"isnan", (PyCFunction)cmath_isnan, METH_VARARGS, cmath_isnan__doc__}, + {"isnan", (PyCFunction)cmath_isnan, METH_O, cmath_isnan__doc__}, static PyObject * cmath_isnan_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_isnan(PyModuleDef *module, PyObject *args) +cmath_isnan(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:isnan", &z)) goto exit; @@ -828,18 +828,18 @@ PyDoc_STRVAR(cmath_isinf__doc__, "Checks if the real or imaginary part of z is infinite."); #define CMATH_ISINF_METHODDEF \ - {"isinf", (PyCFunction)cmath_isinf, METH_VARARGS, cmath_isinf__doc__}, + {"isinf", (PyCFunction)cmath_isinf, METH_O, cmath_isinf__doc__}, static PyObject * cmath_isinf_impl(PyModuleDef *module, Py_complex z); static PyObject * -cmath_isinf(PyModuleDef *module, PyObject *args) +cmath_isinf(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "D:isinf", &z)) goto exit; @@ -848,4 +848,4 @@ cmath_isinf(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=9b6d81711e4e3c4b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9143b8dcc8069024 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 99a7d256fd..f94fec9526 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -168,19 +168,19 @@ PyDoc_STRVAR(os_ttyname__doc__, " Integer file descriptor handle."); #define OS_TTYNAME_METHODDEF \ - {"ttyname", (PyCFunction)os_ttyname, METH_VARARGS, os_ttyname__doc__}, + {"ttyname", (PyCFunction)os_ttyname, METH_O, os_ttyname__doc__}, static char * os_ttyname_impl(PyModuleDef *module, int fd); static PyObject * -os_ttyname(PyModuleDef *module, PyObject *args) +os_ttyname(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int fd; char *_return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:ttyname", &fd)) goto exit; @@ -911,18 +911,18 @@ PyDoc_STRVAR(os__getfinalpathname__doc__, "A helper function for samepath on windows."); #define OS__GETFINALPATHNAME_METHODDEF \ - {"_getfinalpathname", (PyCFunction)os__getfinalpathname, METH_VARARGS, os__getfinalpathname__doc__}, + {"_getfinalpathname", (PyCFunction)os__getfinalpathname, METH_O, os__getfinalpathname__doc__}, static PyObject * os__getfinalpathname_impl(PyModuleDef *module, PyObject *path); static PyObject * -os__getfinalpathname(PyModuleDef *module, PyObject *args) +os__getfinalpathname(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *path; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "U:_getfinalpathname", &path)) goto exit; @@ -1017,18 +1017,18 @@ PyDoc_STRVAR(os_nice__doc__, "Add increment to the priority of process and return the new priority."); #define OS_NICE_METHODDEF \ - {"nice", (PyCFunction)os_nice, METH_VARARGS, os_nice__doc__}, + {"nice", (PyCFunction)os_nice, METH_O, os_nice__doc__}, static PyObject * os_nice_impl(PyModuleDef *module, int increment); static PyObject * -os_nice(PyModuleDef *module, PyObject *args) +os_nice(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int increment; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:nice", &increment)) goto exit; @@ -1317,18 +1317,18 @@ PyDoc_STRVAR(os_umask__doc__, "Set the current numeric umask and return the previous umask."); #define OS_UMASK_METHODDEF \ - {"umask", (PyCFunction)os_umask, METH_VARARGS, os_umask__doc__}, + {"umask", (PyCFunction)os_umask, METH_O, os_umask__doc__}, static PyObject * os_umask_impl(PyModuleDef *module, int mask); static PyObject * -os_umask(PyModuleDef *module, PyObject *args) +os_umask(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int mask; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:umask", &mask)) goto exit; @@ -1829,18 +1829,18 @@ PyDoc_STRVAR(os_sched_getscheduler__doc__, "Passing 0 for pid returns the scheduling policy for the calling process."); #define OS_SCHED_GETSCHEDULER_METHODDEF \ - {"sched_getscheduler", (PyCFunction)os_sched_getscheduler, METH_VARARGS, os_sched_getscheduler__doc__}, + {"sched_getscheduler", (PyCFunction)os_sched_getscheduler, METH_O, os_sched_getscheduler__doc__}, static PyObject * os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid); static PyObject * -os_sched_getscheduler(PyModuleDef *module, PyObject *args) +os_sched_getscheduler(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getscheduler", &pid)) goto exit; @@ -1934,18 +1934,18 @@ PyDoc_STRVAR(os_sched_getparam__doc__, "Return value is an instance of sched_param."); #define OS_SCHED_GETPARAM_METHODDEF \ - {"sched_getparam", (PyCFunction)os_sched_getparam, METH_VARARGS, os_sched_getparam__doc__}, + {"sched_getparam", (PyCFunction)os_sched_getparam, METH_O, os_sched_getparam__doc__}, static PyObject * os_sched_getparam_impl(PyModuleDef *module, pid_t pid); static PyObject * -os_sched_getparam(PyModuleDef *module, PyObject *args) +os_sched_getparam(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getparam", &pid)) goto exit; @@ -2004,19 +2004,19 @@ PyDoc_STRVAR(os_sched_rr_get_interval__doc__, "Value returned is a float."); #define OS_SCHED_RR_GET_INTERVAL_METHODDEF \ - {"sched_rr_get_interval", (PyCFunction)os_sched_rr_get_interval, METH_VARARGS, os_sched_rr_get_interval__doc__}, + {"sched_rr_get_interval", (PyCFunction)os_sched_rr_get_interval, METH_O, os_sched_rr_get_interval__doc__}, static double os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid); static PyObject * -os_sched_rr_get_interval(PyModuleDef *module, PyObject *args) +os_sched_rr_get_interval(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; double _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_rr_get_interval", &pid)) goto exit; @@ -2099,18 +2099,18 @@ PyDoc_STRVAR(os_sched_getaffinity__doc__, "The affinity is returned as a set of CPU identifiers."); #define OS_SCHED_GETAFFINITY_METHODDEF \ - {"sched_getaffinity", (PyCFunction)os_sched_getaffinity, METH_VARARGS, os_sched_getaffinity__doc__}, + {"sched_getaffinity", (PyCFunction)os_sched_getaffinity, METH_O, os_sched_getaffinity__doc__}, static PyObject * os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid); static PyObject * -os_sched_getaffinity(PyModuleDef *module, PyObject *args) +os_sched_getaffinity(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getaffinity", &pid)) goto exit; @@ -2501,18 +2501,18 @@ PyDoc_STRVAR(os_plock__doc__, "Lock program segments into memory.\");"); #define OS_PLOCK_METHODDEF \ - {"plock", (PyCFunction)os_plock, METH_VARARGS, os_plock__doc__}, + {"plock", (PyCFunction)os_plock, METH_O, os_plock__doc__}, static PyObject * os_plock_impl(PyModuleDef *module, int op); static PyObject * -os_plock(PyModuleDef *module, PyObject *args) +os_plock(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int op; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:plock", &op)) goto exit; @@ -2533,18 +2533,18 @@ PyDoc_STRVAR(os_setuid__doc__, "Set the current process\'s user id."); #define OS_SETUID_METHODDEF \ - {"setuid", (PyCFunction)os_setuid, METH_VARARGS, os_setuid__doc__}, + {"setuid", (PyCFunction)os_setuid, METH_O, os_setuid__doc__}, static PyObject * os_setuid_impl(PyModuleDef *module, uid_t uid); static PyObject * -os_setuid(PyModuleDef *module, PyObject *args) +os_setuid(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; uid_t uid; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:setuid", _Py_Uid_Converter, &uid)) goto exit; @@ -2565,18 +2565,18 @@ PyDoc_STRVAR(os_seteuid__doc__, "Set the current process\'s effective user id."); #define OS_SETEUID_METHODDEF \ - {"seteuid", (PyCFunction)os_seteuid, METH_VARARGS, os_seteuid__doc__}, + {"seteuid", (PyCFunction)os_seteuid, METH_O, os_seteuid__doc__}, static PyObject * os_seteuid_impl(PyModuleDef *module, uid_t euid); static PyObject * -os_seteuid(PyModuleDef *module, PyObject *args) +os_seteuid(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; uid_t euid; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:seteuid", _Py_Uid_Converter, &euid)) goto exit; @@ -2597,18 +2597,18 @@ PyDoc_STRVAR(os_setegid__doc__, "Set the current process\'s effective group id."); #define OS_SETEGID_METHODDEF \ - {"setegid", (PyCFunction)os_setegid, METH_VARARGS, os_setegid__doc__}, + {"setegid", (PyCFunction)os_setegid, METH_O, os_setegid__doc__}, static PyObject * os_setegid_impl(PyModuleDef *module, gid_t egid); static PyObject * -os_setegid(PyModuleDef *module, PyObject *args) +os_setegid(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; gid_t egid; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:setegid", _Py_Gid_Converter, &egid)) goto exit; @@ -2695,18 +2695,18 @@ PyDoc_STRVAR(os_setgid__doc__, "Set the current process\'s group id."); #define OS_SETGID_METHODDEF \ - {"setgid", (PyCFunction)os_setgid, METH_VARARGS, os_setgid__doc__}, + {"setgid", (PyCFunction)os_setgid, METH_O, os_setgid__doc__}, static PyObject * os_setgid_impl(PyModuleDef *module, gid_t gid); static PyObject * -os_setgid(PyModuleDef *module, PyObject *args) +os_setgid(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; gid_t gid; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:setgid", _Py_Gid_Converter, &gid)) goto exit; @@ -3036,18 +3036,18 @@ PyDoc_STRVAR(os_getsid__doc__, "Call the system call getsid(pid) and return the result."); #define OS_GETSID_METHODDEF \ - {"getsid", (PyCFunction)os_getsid, METH_VARARGS, os_getsid__doc__}, + {"getsid", (PyCFunction)os_getsid, METH_O, os_getsid__doc__}, static PyObject * os_getsid_impl(PyModuleDef *module, pid_t pid); static PyObject * -os_getsid(PyModuleDef *module, PyObject *args) +os_getsid(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":getsid", &pid)) goto exit; @@ -3123,18 +3123,18 @@ PyDoc_STRVAR(os_tcgetpgrp__doc__, "Return the process group associated with the terminal specified by fd."); #define OS_TCGETPGRP_METHODDEF \ - {"tcgetpgrp", (PyCFunction)os_tcgetpgrp, METH_VARARGS, os_tcgetpgrp__doc__}, + {"tcgetpgrp", (PyCFunction)os_tcgetpgrp, METH_O, os_tcgetpgrp__doc__}, static PyObject * os_tcgetpgrp_impl(PyModuleDef *module, int fd); static PyObject * -os_tcgetpgrp(PyModuleDef *module, PyObject *args) +os_tcgetpgrp(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int fd; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:tcgetpgrp", &fd)) goto exit; @@ -3288,19 +3288,19 @@ PyDoc_STRVAR(os_dup__doc__, "Return a duplicate of a file descriptor."); #define OS_DUP_METHODDEF \ - {"dup", (PyCFunction)os_dup, METH_VARARGS, os_dup__doc__}, + {"dup", (PyCFunction)os_dup, METH_O, os_dup__doc__}, static int os_dup_impl(PyModuleDef *module, int fd); static PyObject * -os_dup(PyModuleDef *module, PyObject *args) +os_dup(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int fd; int _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:dup", &fd)) goto exit; @@ -3612,19 +3612,19 @@ PyDoc_STRVAR(os_isatty__doc__, "connected to the slave end of a terminal."); #define OS_ISATTY_METHODDEF \ - {"isatty", (PyCFunction)os_isatty, METH_VARARGS, os_isatty__doc__}, + {"isatty", (PyCFunction)os_isatty, METH_O, os_isatty__doc__}, static int os_isatty_impl(PyModuleDef *module, int fd); static PyObject * -os_isatty(PyModuleDef *module, PyObject *args) +os_isatty(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int fd; int _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:isatty", &fd)) goto exit; @@ -3677,18 +3677,18 @@ PyDoc_STRVAR(os_pipe2__doc__, "O_NONBLOCK, O_CLOEXEC."); #define OS_PIPE2_METHODDEF \ - {"pipe2", (PyCFunction)os_pipe2, METH_VARARGS, os_pipe2__doc__}, + {"pipe2", (PyCFunction)os_pipe2, METH_O, os_pipe2__doc__}, static PyObject * os_pipe2_impl(PyModuleDef *module, int flags); static PyObject * -os_pipe2(PyModuleDef *module, PyObject *args) +os_pipe2(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int flags; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:pipe2", &flags)) goto exit; @@ -3889,19 +3889,19 @@ PyDoc_STRVAR(os_major__doc__, "Extracts a device major number from a raw device number."); #define OS_MAJOR_METHODDEF \ - {"major", (PyCFunction)os_major, METH_VARARGS, os_major__doc__}, + {"major", (PyCFunction)os_major, METH_O, os_major__doc__}, static unsigned int os_major_impl(PyModuleDef *module, dev_t device); static PyObject * -os_major(PyModuleDef *module, PyObject *args) +os_major(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; dev_t device; unsigned int _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:major", _Py_Dev_Converter, &device)) goto exit; @@ -3925,19 +3925,19 @@ PyDoc_STRVAR(os_minor__doc__, "Extracts a device minor number from a raw device number."); #define OS_MINOR_METHODDEF \ - {"minor", (PyCFunction)os_minor, METH_VARARGS, os_minor__doc__}, + {"minor", (PyCFunction)os_minor, METH_O, os_minor__doc__}, static unsigned int os_minor_impl(PyModuleDef *module, dev_t device); static PyObject * -os_minor(PyModuleDef *module, PyObject *args) +os_minor(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; dev_t device; unsigned int _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:minor", _Py_Dev_Converter, &device)) goto exit; @@ -4222,18 +4222,18 @@ PyDoc_STRVAR(os_unsetenv__doc__, "Delete an environment variable."); #define OS_UNSETENV_METHODDEF \ - {"unsetenv", (PyCFunction)os_unsetenv, METH_VARARGS, os_unsetenv__doc__}, + {"unsetenv", (PyCFunction)os_unsetenv, METH_O, os_unsetenv__doc__}, static PyObject * os_unsetenv_impl(PyModuleDef *module, PyObject *name); static PyObject * -os_unsetenv(PyModuleDef *module, PyObject *args) +os_unsetenv(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name = NULL; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:unsetenv", PyUnicode_FSConverter, &name)) goto exit; @@ -4255,18 +4255,18 @@ PyDoc_STRVAR(os_strerror__doc__, "Translate an error code to a message string."); #define OS_STRERROR_METHODDEF \ - {"strerror", (PyCFunction)os_strerror, METH_VARARGS, os_strerror__doc__}, + {"strerror", (PyCFunction)os_strerror, METH_O, os_strerror__doc__}, static PyObject * os_strerror_impl(PyModuleDef *module, int code); static PyObject * -os_strerror(PyModuleDef *module, PyObject *args) +os_strerror(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int code; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:strerror", &code)) goto exit; @@ -4285,19 +4285,19 @@ PyDoc_STRVAR(os_WCOREDUMP__doc__, "Return True if the process returning status was dumped to a core file."); #define OS_WCOREDUMP_METHODDEF \ - {"WCOREDUMP", (PyCFunction)os_WCOREDUMP, METH_VARARGS, os_WCOREDUMP__doc__}, + {"WCOREDUMP", (PyCFunction)os_WCOREDUMP, METH_O, os_WCOREDUMP__doc__}, static int os_WCOREDUMP_impl(PyModuleDef *module, int status); static PyObject * -os_WCOREDUMP(PyModuleDef *module, PyObject *args) +os_WCOREDUMP(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int status; int _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:WCOREDUMP", &status)) goto exit; @@ -4585,18 +4585,18 @@ PyDoc_STRVAR(os_fstatvfs__doc__, "Equivalent to statvfs(fd)."); #define OS_FSTATVFS_METHODDEF \ - {"fstatvfs", (PyCFunction)os_fstatvfs, METH_VARARGS, os_fstatvfs__doc__}, + {"fstatvfs", (PyCFunction)os_fstatvfs, METH_O, os_fstatvfs__doc__}, static PyObject * os_fstatvfs_impl(PyModuleDef *module, int fd); static PyObject * -os_fstatvfs(PyModuleDef *module, PyObject *args) +os_fstatvfs(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int fd; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:fstatvfs", &fd)) goto exit; @@ -4774,18 +4774,18 @@ PyDoc_STRVAR(os_confstr__doc__, "Return a string-valued system configuration variable."); #define OS_CONFSTR_METHODDEF \ - {"confstr", (PyCFunction)os_confstr, METH_VARARGS, os_confstr__doc__}, + {"confstr", (PyCFunction)os_confstr, METH_O, os_confstr__doc__}, static PyObject * os_confstr_impl(PyModuleDef *module, int name); static PyObject * -os_confstr(PyModuleDef *module, PyObject *args) +os_confstr(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int name; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:confstr", conv_confstr_confname, &name)) goto exit; @@ -4806,19 +4806,19 @@ PyDoc_STRVAR(os_sysconf__doc__, "Return an integer-valued system configuration variable."); #define OS_SYSCONF_METHODDEF \ - {"sysconf", (PyCFunction)os_sysconf, METH_VARARGS, os_sysconf__doc__}, + {"sysconf", (PyCFunction)os_sysconf, METH_O, os_sysconf__doc__}, static long os_sysconf_impl(PyModuleDef *module, int name); static PyObject * -os_sysconf(PyModuleDef *module, PyObject *args) +os_sysconf(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int name; long _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "O&:sysconf", conv_sysconf_confname, &name)) goto exit; @@ -5215,18 +5215,18 @@ PyDoc_STRVAR(os_urandom__doc__, "Return a bytes object containing random bytes suitable for cryptographic use."); #define OS_URANDOM_METHODDEF \ - {"urandom", (PyCFunction)os_urandom, METH_VARARGS, os_urandom__doc__}, + {"urandom", (PyCFunction)os_urandom, METH_O, os_urandom__doc__}, static PyObject * os_urandom_impl(PyModuleDef *module, Py_ssize_t size); static PyObject * -os_urandom(PyModuleDef *module, PyObject *args) +os_urandom(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_ssize_t size; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "n:urandom", &size)) goto exit; @@ -5261,19 +5261,19 @@ PyDoc_STRVAR(os_get_inheritable__doc__, "Get the close-on-exe flag of the specified file descriptor."); #define OS_GET_INHERITABLE_METHODDEF \ - {"get_inheritable", (PyCFunction)os_get_inheritable, METH_VARARGS, os_get_inheritable__doc__}, + {"get_inheritable", (PyCFunction)os_get_inheritable, METH_O, os_get_inheritable__doc__}, static int os_get_inheritable_impl(PyModuleDef *module, int fd); static PyObject * -os_get_inheritable(PyModuleDef *module, PyObject *args) +os_get_inheritable(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; int fd; int _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:get_inheritable", &fd)) goto exit; @@ -5324,19 +5324,19 @@ PyDoc_STRVAR(os_get_handle_inheritable__doc__, "Get the close-on-exe flag of the specified file descriptor."); #define OS_GET_HANDLE_INHERITABLE_METHODDEF \ - {"get_handle_inheritable", (PyCFunction)os_get_handle_inheritable, METH_VARARGS, os_get_handle_inheritable__doc__}, + {"get_handle_inheritable", (PyCFunction)os_get_handle_inheritable, METH_O, os_get_handle_inheritable__doc__}, static int os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle); static PyObject * -os_get_handle_inheritable(PyModuleDef *module, PyObject *args) +os_get_handle_inheritable(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; Py_intptr_t handle; int _return_value; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "" _Py_PARSE_INTPTR ":get_handle_inheritable", &handle)) goto exit; @@ -5847,4 +5847,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=d17c625afa72886b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b15ceac3a8ff0eae input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pwdmodule.c.h b/Modules/clinic/pwdmodule.c.h index 6a40042c5e..ffe7c1c282 100644 --- a/Modules/clinic/pwdmodule.c.h +++ b/Modules/clinic/pwdmodule.c.h @@ -22,18 +22,18 @@ PyDoc_STRVAR(pwd_getpwnam__doc__, "See `help(pwd)` for more on password database entries."); #define PWD_GETPWNAM_METHODDEF \ - {"getpwnam", (PyCFunction)pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__}, + {"getpwnam", (PyCFunction)pwd_getpwnam, METH_O, pwd_getpwnam__doc__}, static PyObject * pwd_getpwnam_impl(PyModuleDef *module, PyObject *arg); static PyObject * -pwd_getpwnam(PyModuleDef *module, PyObject *args) +pwd_getpwnam(PyModuleDef *module, PyObject *arg_) { PyObject *return_value = NULL; PyObject *arg; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg_, "U:getpwnam", &arg)) goto exit; @@ -70,4 +70,4 @@ pwd_getpwall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) #ifndef PWD_GETPWALL_METHODDEF #define PWD_GETPWALL_METHODDEF #endif /* !defined(PWD_GETPWALL_METHODDEF) */ -/*[clinic end generated code: output=2e23f920020a750a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e7d5ac24b20e91ae input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h index e461fc3dc3..d4a3a4b8ce 100644 --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -49,18 +49,18 @@ PyDoc_STRVAR(pyexpat_xmlparser_SetBase__doc__, "Set the base URL for the parser."); #define PYEXPAT_XMLPARSER_SETBASE_METHODDEF \ - {"SetBase", (PyCFunction)pyexpat_xmlparser_SetBase, METH_VARARGS, pyexpat_xmlparser_SetBase__doc__}, + {"SetBase", (PyCFunction)pyexpat_xmlparser_SetBase, METH_O, pyexpat_xmlparser_SetBase__doc__}, static PyObject * pyexpat_xmlparser_SetBase_impl(xmlparseobject *self, const char *base); static PyObject * -pyexpat_xmlparser_SetBase(xmlparseobject *self, PyObject *args) +pyexpat_xmlparser_SetBase(xmlparseobject *self, PyObject *arg) { PyObject *return_value = NULL; const char *base; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "s:SetBase", &base)) goto exit; @@ -150,18 +150,18 @@ PyDoc_STRVAR(pyexpat_xmlparser_SetParamEntityParsing__doc__, "was successful."); #define PYEXPAT_XMLPARSER_SETPARAMENTITYPARSING_METHODDEF \ - {"SetParamEntityParsing", (PyCFunction)pyexpat_xmlparser_SetParamEntityParsing, METH_VARARGS, pyexpat_xmlparser_SetParamEntityParsing__doc__}, + {"SetParamEntityParsing", (PyCFunction)pyexpat_xmlparser_SetParamEntityParsing, METH_O, pyexpat_xmlparser_SetParamEntityParsing__doc__}, static PyObject * pyexpat_xmlparser_SetParamEntityParsing_impl(xmlparseobject *self, int flag); static PyObject * -pyexpat_xmlparser_SetParamEntityParsing(xmlparseobject *self, PyObject *args) +pyexpat_xmlparser_SetParamEntityParsing(xmlparseobject *self, PyObject *arg) { PyObject *return_value = NULL; int flag; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "i:SetParamEntityParsing", &flag)) goto exit; @@ -262,18 +262,18 @@ PyDoc_STRVAR(pyexpat_ErrorString__doc__, "Returns string error for given number."); #define PYEXPAT_ERRORSTRING_METHODDEF \ - {"ErrorString", (PyCFunction)pyexpat_ErrorString, METH_VARARGS, pyexpat_ErrorString__doc__}, + {"ErrorString", (PyCFunction)pyexpat_ErrorString, METH_O, pyexpat_ErrorString__doc__}, static PyObject * pyexpat_ErrorString_impl(PyModuleDef *module, long code); static PyObject * -pyexpat_ErrorString(PyModuleDef *module, PyObject *args) +pyexpat_ErrorString(PyModuleDef *module, PyObject *arg) { PyObject *return_value = NULL; long code; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "l:ErrorString", &code)) goto exit; @@ -286,4 +286,4 @@ exit: #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=0198390005e40e1c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9715b916f2d618fa input=a9049054013a1b77]*/ diff --git a/Modules/clinic/spwdmodule.c.h b/Modules/clinic/spwdmodule.c.h index 889419e09d..e1dde77893 100644 --- a/Modules/clinic/spwdmodule.c.h +++ b/Modules/clinic/spwdmodule.c.h @@ -13,18 +13,18 @@ PyDoc_STRVAR(spwd_getspnam__doc__, "See `help(spwd)` for more on shadow password database entries."); #define SPWD_GETSPNAM_METHODDEF \ - {"getspnam", (PyCFunction)spwd_getspnam, METH_VARARGS, spwd_getspnam__doc__}, + {"getspnam", (PyCFunction)spwd_getspnam, METH_O, spwd_getspnam__doc__}, static PyObject * spwd_getspnam_impl(PyModuleDef *module, PyObject *arg); static PyObject * -spwd_getspnam(PyModuleDef *module, PyObject *args) +spwd_getspnam(PyModuleDef *module, PyObject *arg_) { PyObject *return_value = NULL; PyObject *arg; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg_, "U:getspnam", &arg)) goto exit; @@ -67,4 +67,4 @@ spwd_getspall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) #ifndef SPWD_GETSPALL_METHODDEF #define SPWD_GETSPALL_METHODDEF #endif /* !defined(SPWD_GETSPALL_METHODDEF) */ -/*[clinic end generated code: output=ab16125c5e5f2b1b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=67a4f8c47008f28f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index 267498e399..2fb4809aa9 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -189,18 +189,18 @@ PyDoc_STRVAR(zlib_Compress_compress__doc__, "Call the flush() method to clear these buffers."); #define ZLIB_COMPRESS_COMPRESS_METHODDEF \ - {"compress", (PyCFunction)zlib_Compress_compress, METH_VARARGS, zlib_Compress_compress__doc__}, + {"compress", (PyCFunction)zlib_Compress_compress, METH_O, zlib_Compress_compress__doc__}, static PyObject * zlib_Compress_compress_impl(compobject *self, Py_buffer *data); static PyObject * -zlib_Compress_compress(compobject *self, PyObject *args) +zlib_Compress_compress(compobject *self, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_ParseTuple(args, + if (!PyArg_Parse(arg, "y*:compress", &data)) goto exit; @@ -446,4 +446,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=901c18189767dc08 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0743b1aa908f0b68 input=a9049054013a1b77]*/ -- cgit v1.2.1 From d3d3cf776267a880fcbce95885a51bb2b84fbf8e Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 4 Apr 2015 17:06:55 +0300 Subject: Fixed the array module broken in issue #23492. array_array_frombytes() is used in other functions, but it's signature was changed. Closes issue #23866. --- Modules/arraymodule.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) (limited to 'Modules') diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 3e9f297f1f..6e20aaa7d5 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1403,7 +1403,7 @@ static PyObject * array_array_fromfile_impl(arrayobject *self, PyObject *f, Py_ssize_t n) /*[clinic end generated code: output=ec9f600e10f53510 input=e188afe8e58adf40]*/ { - PyObject *args, *b, *res; + PyObject *b, *res; Py_ssize_t itemsize = self->ob_descr->itemsize; Py_ssize_t nbytes; _Py_IDENTIFIER(read); @@ -1432,13 +1432,8 @@ array_array_fromfile_impl(arrayobject *self, PyObject *f, Py_ssize_t n) not_enough_bytes = (PyBytes_GET_SIZE(b) != nbytes); - args = Py_BuildValue("(O)", b); + res = array_array_frombytes(self, b); Py_DECREF(b); - if (args == NULL) - return NULL; - - res = array_array_frombytes(self, args); - Py_DECREF(args); if (res == NULL) return NULL; @@ -2672,15 +2667,9 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } else if (initial != NULL && (PyByteArray_Check(initial) || PyBytes_Check(initial))) { - PyObject *t_initial, *v; - t_initial = PyTuple_Pack(1, initial); - if (t_initial == NULL) { - Py_DECREF(a); - return NULL; - } + PyObject *v; v = array_array_frombytes((arrayobject *)a, - t_initial); - Py_DECREF(t_initial); + initial); if (v == NULL) { Py_DECREF(a); return NULL; -- cgit v1.2.1 From 4e364584228cdc1469aad4c26793c777afcd95e6 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sat, 4 Apr 2015 10:52:36 -0400 Subject: fix refleak in deque_concat --- Modules/_collectionsmodule.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 9f6c47f54a..2b70b2ba06 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -507,7 +507,7 @@ static PyObject *deque_copy(PyObject *deque); static PyObject * deque_concat(dequeobject *deque, PyObject *other) { - PyObject *new_deque; + PyObject *new_deque, *result; int rv; rv = PyObject_IsInstance(other, (PyObject *)&deque_type); @@ -523,7 +523,13 @@ deque_concat(dequeobject *deque, PyObject *other) new_deque = deque_copy((PyObject *)deque); if (new_deque == NULL) return NULL; - return deque_inplace_concat((dequeobject *)new_deque, other); + result = deque_extend((dequeobject *)new_deque, other); + if (result == NULL) { + Py_DECREF(new_deque); + return NULL; + } + Py_DECREF(result); + return new_deque; } static void deque_clear(dequeobject *deque); -- cgit v1.2.1 From 1c029f5f55175d18e74700c2d7dabbafe7ca752a Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 4 Apr 2015 23:35:52 +0300 Subject: Issue #23501: #include "clinic/posixmodule.c.h" was in the section skipped on Windows. --- Modules/posixmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index a92d9604d4..7da1ab0eb8 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -10327,8 +10327,6 @@ conv_sysconf_confname(PyObject *arg, int *valuep) / sizeof(struct constdef)); } -#include "clinic/posixmodule.c.h" - /*[clinic input] os.sysconf -> long @@ -12071,6 +12069,8 @@ error: } +#include "clinic/posixmodule.c.h" + /*[clinic input] dump buffer [clinic start generated code]*/ -- cgit v1.2.1 From 672c6b757b68f00d75e3bac619856a29c3261ab9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 6 Apr 2015 23:06:01 +0200 Subject: Issue #23834: Fix initial value of the socket timeout Use _PyTime_FromSeconds() to initialize the default socket timeout to -1 second, instead of -1 nanosecond which causes rounding issues in internal_select(). --- Modules/socketmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 5e267a4f29..604b9a8207 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2292,7 +2292,7 @@ sock_setblocking(PySocketSockObject *s, PyObject *arg) if (block == -1 && PyErr_Occurred()) return NULL; - s->sock_timeout = block ? -1 : 0; + s->sock_timeout = _PyTime_FromSeconds(block ? -1 : 0); internal_setblocking(s, block); Py_INCREF(Py_None); @@ -4162,7 +4162,7 @@ sock_new(PyTypeObject *type, PyObject *args, PyObject *kwds) new = type->tp_alloc(type, 0); if (new != NULL) { ((PySocketSockObject *)new)->sock_fd = -1; - ((PySocketSockObject *)new)->sock_timeout = -1; + ((PySocketSockObject *)new)->sock_timeout = _PyTime_FromSeconds(-1); ((PySocketSockObject *)new)->errorhandler = &set_error; } return new; -- cgit v1.2.1 From 7115401a9f3d9c7bb1f5ad81885a5e198411ef57 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 6 Apr 2015 23:16:34 +0200 Subject: Issue #23853: socket.socket.sendall() does no more reset the socket timeout each time data is sent successfuly. The socket timeout is now the maximum total duration to send all data. --- Modules/socketmodule.c | 57 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 16 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 604b9a8207..f27e69729c 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -706,9 +706,10 @@ sock_call_ex(PySocketSockObject *s, int (*sock_func) (PySocketSockObject *s, void *data), void *data, int connect, - int *err) + int *err, + _PyTime_t timeout) { - int has_timeout = (s->sock_timeout > 0); + int has_timeout = (timeout > 0); _PyTime_t deadline = 0; int deadline_initialized = 0; int res; @@ -731,8 +732,8 @@ sock_call_ex(PySocketSockObject *s, } else { deadline_initialized = 1; - deadline = _PyTime_GetMonotonicClock() + s->sock_timeout; - interval = s->sock_timeout; + deadline = _PyTime_GetMonotonicClock() + timeout; + interval = timeout; } if (interval >= 0) @@ -832,7 +833,7 @@ sock_call(PySocketSockObject *s, int (*func) (PySocketSockObject *s, void *data), void *data) { - return sock_call_ex(s, writing, func, data, 0, NULL); + return sock_call_ex(s, writing, func, data, 0, NULL, s->sock_timeout); } @@ -2636,12 +2637,14 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, if (raise) { /* socket.connect() raises an exception on error */ - if (sock_call_ex(s, 1, sock_connect_impl, NULL, 1, NULL) < 0) + if (sock_call_ex(s, 1, sock_connect_impl, NULL, + 1, NULL, s->sock_timeout) < 0) return -1; } else { /* socket.connect_ex() returns the error code on error */ - if (sock_call_ex(s, 1, sock_connect_impl, NULL, 1, &err) < 0) + if (sock_call_ex(s, 1, sock_connect_impl, NULL, + 1, &err, s->sock_timeout) < 0) return err; } return 0; @@ -3550,6 +3553,11 @@ sock_sendall(PySocketSockObject *s, PyObject *args) int flags = 0; Py_buffer pbuf; struct sock_send ctx; + int has_timeout = (s->sock_timeout > 0); + _PyTime_t interval = s->sock_timeout; + _PyTime_t deadline = 0; + int deadline_initialized = 0; + PyObject *res = NULL; if (!PyArg_ParseTuple(args, "y*|i:sendall", &pbuf, &flags)) return NULL; @@ -3562,13 +3570,27 @@ sock_sendall(PySocketSockObject *s, PyObject *args) } do { + if (has_timeout) { + if (deadline_initialized) { + /* recompute the timeout */ + interval = deadline - _PyTime_GetMonotonicClock(); + } + else { + deadline_initialized = 1; + deadline = _PyTime_GetMonotonicClock() + s->sock_timeout; + } + + if (interval <= 0) { + PyErr_SetString(socket_timeout, "timed out"); + goto done; + } + } + ctx.buf = buf; ctx.len = len; ctx.flags = flags; - if (sock_call(s, 1, sock_send_impl, &ctx) < 0) { - PyBuffer_Release(&pbuf); - return NULL; - } + if (sock_call_ex(s, 1, sock_send_impl, &ctx, 0, NULL, interval) < 0) + goto done; n = ctx.result; assert(n >= 0); @@ -3578,14 +3600,17 @@ sock_sendall(PySocketSockObject *s, PyObject *args) /* We must run our signal handlers before looping again. send() can return a successful partial write when it is interrupted, so we can't restrict ourselves to EINTR. */ - if (PyErr_CheckSignals()) { - PyBuffer_Release(&pbuf); - return NULL; - } + if (PyErr_CheckSignals()) + goto done; } while (len > 0); PyBuffer_Release(&pbuf); - Py_RETURN_NONE; + Py_INCREF(Py_None); + res = Py_None; + +done: + PyBuffer_Release(&pbuf); + return res; } PyDoc_STRVAR(sendall_doc, -- cgit v1.2.1 From 45b2afde76f15198947341490cb82837820b1921 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 6 Apr 2015 22:30:41 +0200 Subject: Issue #22117: Fix sock_call_ex() for non-blocking socket Call internal_select() with a timeout of 0 second, not a timeout of -1 second (blocking)! --- Modules/socketmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index f27e69729c..1ecec5a3b9 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -742,7 +742,7 @@ sock_call_ex(PySocketSockObject *s, res = 1; } else { - res = internal_select(s, writing, -1, connect); + res = internal_select(s, writing, timeout, connect); } if (res == -1) { -- cgit v1.2.1 From 9a4cae67c9a7d5a409144faae88d0f19f211b4c5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 6 Apr 2015 22:46:13 +0200 Subject: Issue #23853: Methods of SSL socket don't reset the socket timeout anymore each time bytes are received or sent. The socket timeout is now the maximum total duration of the method. This change fixes a denial of service if the application is regulary interrupted by a signal and the signal handler does not raise an exception. --- Modules/_ssl.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 65 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index bb838b0dba..b7b39dd372 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -223,7 +223,7 @@ static PyTypeObject PySSLMemoryBIO_Type; static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args); static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args); -static int PySSL_select(PySocketSockObject *s, int writing); +static int PySSL_select(PySocketSockObject *s, int writing, _PyTime_t timeout); static PyObject *PySSL_peercert(PySSLSocket *self, PyObject *args); static PyObject *PySSL_cipher(PySSLSocket *self); @@ -248,6 +248,10 @@ typedef enum { #define GET_SOCKET(obj) ((obj)->Socket ? \ (PySocketSockObject *) PyWeakref_GetObject((obj)->Socket) : NULL) +/* If sock is NULL, use a timeout of 0 second */ +#define GET_SOCKET_TIMEOUT(sock) \ + ((sock != NULL) ? (sock)->sock_timeout : 0) + /* * SSL errors. */ @@ -565,6 +569,8 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self) int err; int sockstate, nonblocking; PySocketSockObject *sock = GET_SOCKET(self); + _PyTime_t timeout, deadline = 0; + int has_timeout; if (sock) { if (((PyObject*)sock) == Py_None) { @@ -580,6 +586,11 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self) BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); } + timeout = GET_SOCKET_TIMEOUT(sock); + has_timeout = (timeout > 0); + if (has_timeout) + deadline = _PyTime_GetMonotonicClock() + timeout; + /* Actually negotiate SSL connection */ /* XXX If SSL_do_handshake() returns 0, it's also a failure. */ do { @@ -591,10 +602,13 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self) if (PyErr_CheckSignals()) goto error; + if (has_timeout) + timeout = deadline - _PyTime_GetMonotonicClock(); + if (err == SSL_ERROR_WANT_READ) { - sockstate = PySSL_select(sock, 0); + sockstate = PySSL_select(sock, 0, timeout); } else if (err == SSL_ERROR_WANT_WRITE) { - sockstate = PySSL_select(sock, 1); + sockstate = PySSL_select(sock, 1, timeout); } else { sockstate = SOCKET_OPERATION_OK; } @@ -1611,7 +1625,7 @@ static void PySSL_dealloc(PySSLSocket *self) */ static int -PySSL_select(PySocketSockObject *s, int writing) +PySSL_select(PySocketSockObject *s, int writing, _PyTime_t timeout) { int rc; #ifdef HAVE_POLL @@ -1624,10 +1638,14 @@ PySSL_select(PySocketSockObject *s, int writing) #endif /* Nothing to do unless we're in timeout mode (not non-blocking) */ - if ((s == NULL) || (s->sock_timeout == 0)) + if ((s == NULL) || (timeout == 0)) return SOCKET_IS_NONBLOCKING; - else if (s->sock_timeout < 0) - return SOCKET_IS_BLOCKING; + else if (timeout < 0) { + if (s->sock_timeout > 0) + return SOCKET_HAS_TIMED_OUT; + else + return SOCKET_IS_BLOCKING; + } /* Guard against closed socket */ if (s->sock_fd < 0) @@ -1639,8 +1657,8 @@ PySSL_select(PySocketSockObject *s, int writing) pollfd.fd = s->sock_fd; pollfd.events = writing ? POLLOUT : POLLIN; - /* s->sock_timeout is in seconds, timeout in ms */ - ms = (int)_PyTime_AsMilliseconds(s->sock_timeout, _PyTime_ROUND_CEILING); + /* timeout is in seconds, poll() uses milliseconds */ + ms = (int)_PyTime_AsMilliseconds(timeout, _PyTime_ROUND_CEILING); assert(ms <= INT_MAX); PySSL_BEGIN_ALLOW_THREADS @@ -1651,7 +1669,7 @@ PySSL_select(PySocketSockObject *s, int writing) if (!_PyIsSelectable_fd(s->sock_fd)) return SOCKET_TOO_LARGE_FOR_SELECT; - _PyTime_AsTimeval_noraise(s->sock_timeout, &tv, _PyTime_ROUND_CEILING); + _PyTime_AsTimeval_noraise(timeout, &tv, _PyTime_ROUND_CEILING); FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); @@ -1679,6 +1697,8 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) int err; int nonblocking; PySocketSockObject *sock = GET_SOCKET(self); + _PyTime_t timeout, deadline = 0; + int has_timeout; if (sock != NULL) { if (((PyObject*)sock) == Py_None) { @@ -1707,7 +1727,12 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); } - sockstate = PySSL_select(sock, 1); + timeout = GET_SOCKET_TIMEOUT(sock); + has_timeout = (timeout > 0); + if (has_timeout) + deadline = _PyTime_GetMonotonicClock() + timeout; + + sockstate = PySSL_select(sock, 1, timeout); if (sockstate == SOCKET_HAS_TIMED_OUT) { PyErr_SetString(PySocketModule.timeout_error, "The write operation timed out"); @@ -1731,10 +1756,13 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) if (PyErr_CheckSignals()) goto error; + if (has_timeout) + timeout = deadline - _PyTime_GetMonotonicClock(); + if (err == SSL_ERROR_WANT_READ) { - sockstate = PySSL_select(sock, 0); + sockstate = PySSL_select(sock, 0, timeout); } else if (err == SSL_ERROR_WANT_WRITE) { - sockstate = PySSL_select(sock, 1); + sockstate = PySSL_select(sock, 1, timeout); } else { sockstate = SOCKET_OPERATION_OK; } @@ -1801,6 +1829,8 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) int err; int nonblocking; PySocketSockObject *sock = GET_SOCKET(self); + _PyTime_t timeout, deadline = 0; + int has_timeout; if (sock != NULL) { if (((PyObject*)sock) == Py_None) { @@ -1842,6 +1872,11 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); } + timeout = GET_SOCKET_TIMEOUT(sock); + has_timeout = (timeout > 0); + if (has_timeout) + deadline = _PyTime_GetMonotonicClock() + timeout; + do { PySSL_BEGIN_ALLOW_THREADS count = SSL_read(self->ssl, mem, len); @@ -1851,10 +1886,13 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) if (PyErr_CheckSignals()) goto error; + if (has_timeout) + timeout = deadline - _PyTime_GetMonotonicClock(); + if (err == SSL_ERROR_WANT_READ) { - sockstate = PySSL_select(sock, 0); + sockstate = PySSL_select(sock, 0, timeout); } else if (err == SSL_ERROR_WANT_WRITE) { - sockstate = PySSL_select(sock, 1); + sockstate = PySSL_select(sock, 1, timeout); } else if (err == SSL_ERROR_ZERO_RETURN && SSL_get_shutdown(self->ssl) == SSL_RECEIVED_SHUTDOWN) { @@ -1908,6 +1946,8 @@ static PyObject *PySSL_SSLshutdown(PySSLSocket *self) int err, ssl_err, sockstate, nonblocking; int zeros = 0; PySocketSockObject *sock = GET_SOCKET(self); + _PyTime_t timeout, deadline = 0; + int has_timeout; if (sock != NULL) { /* Guard against closed socket */ @@ -1924,6 +1964,11 @@ static PyObject *PySSL_SSLshutdown(PySSLSocket *self) BIO_set_nbio(SSL_get_wbio(self->ssl), nonblocking); } + timeout = GET_SOCKET_TIMEOUT(sock); + has_timeout = (timeout > 0); + if (has_timeout) + deadline = _PyTime_GetMonotonicClock() + timeout; + while (1) { PySSL_BEGIN_ALLOW_THREADS /* Disable read-ahead so that unwrap can work correctly. @@ -1953,12 +1998,15 @@ static PyObject *PySSL_SSLshutdown(PySSLSocket *self) continue; } + if (has_timeout) + timeout = deadline - _PyTime_GetMonotonicClock(); + /* Possibly retry shutdown until timeout or failure */ ssl_err = SSL_get_error(self->ssl, err); if (ssl_err == SSL_ERROR_WANT_READ) - sockstate = PySSL_select(sock, 0); + sockstate = PySSL_select(sock, 0, timeout); else if (ssl_err == SSL_ERROR_WANT_WRITE) - sockstate = PySSL_select(sock, 1); + sockstate = PySSL_select(sock, 1, timeout); else break; -- cgit v1.2.1 From d97cab45a1be4152a65bdf9a41c9111ee6a78aad Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 9 Apr 2015 10:23:12 +0200 Subject: Issue #23834: Fix the default socket timeout Use -1 second by default, not -1 nanosecond. --- Modules/socketmodule.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 1ecec5a3b9..8c5c36cdc0 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -839,7 +839,8 @@ sock_call(PySocketSockObject *s, /* Initialize a new socket object. */ -static _PyTime_t defaulttimeout = -1; /* Default timeout for new sockets */ +/* Default timeout for new sockets */ +static _PyTime_t defaulttimeout = _PYTIME_FROMSECONDS(-1); static void init_sockobject(PySocketSockObject *s, -- cgit v1.2.1 From 17a44be629dd13b68438eabb78ebdb698d8d9569 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 9 Apr 2015 10:27:25 +0200 Subject: Issue #23618: Fix internal_select() for negative timeout (blocking socket) when poll() is not available. select() doesn't accept negative timeout, the timeout parameter must be NULL to block on select(). --- Modules/socketmodule.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 8c5c36cdc0..fd20b174d3 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -614,7 +614,7 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval, _PyTime_t ms; #else fd_set fds, efds; - struct timeval tv; + struct timeval tv, *tvp; #endif #ifdef WITH_THREAD @@ -650,7 +650,12 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval, n = poll(&pollfd, 1, (int)ms); Py_END_ALLOW_THREADS; #else - _PyTime_AsTimeval_noraise(interval, &tv, _PyTime_ROUND_CEILING); + if (interval >= 0) { + _PyTime_AsTimeval_noraise(interval, &tv, _PyTime_ROUND_CEILING); + tvp = &tv; + } + else + tvp = NULL; FD_ZERO(&fds); FD_SET(s->sock_fd, &fds); @@ -667,10 +672,10 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval, Py_BEGIN_ALLOW_THREADS; if (writing) n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), - NULL, &fds, &efds, &tv); + NULL, &fds, &efds, tvp); else n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), - &fds, NULL, &efds, &tv); + &fds, NULL, &efds, tvp); Py_END_ALLOW_THREADS; #endif -- cgit v1.2.1 From 782fea260ae8f1410a26bee59d02f02e7319228b Mon Sep 17 00:00:00 2001 From: doko Date: Sun, 12 Apr 2015 00:13:52 +0200 Subject: - Modules/Setup.dist: remove time extension duplicate, introduced by the fix for #5309. --- Modules/Setup.dist | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/Setup.dist b/Modules/Setup.dist index ee84df466e..6e24eb0c69 100644 --- a/Modules/Setup.dist +++ b/Modules/Setup.dist @@ -118,7 +118,7 @@ _collections _collectionsmodule.c # Container types itertools itertoolsmodule.c # Functions creating iterators for efficient looping atexit atexitmodule.c # Register functions to be run at interpreter-shutdown _stat _stat.c # stat.h interface -time timemodule.c # time module +time timemodule.c # -lm # time operations and variables # access to ISO C locale support _locale _localemodule.c # -lintl @@ -172,7 +172,6 @@ _symtable symtablemodule.c #cmath cmathmodule.c _math.c # -lm # complex math library functions #math mathmodule.c _math.c # -lm # math library functions, e.g. sin() #_struct _struct.c # binary structure packing/unpacking -#time timemodule.c # -lm # time operations and variables #_weakref _weakref.c # basic weak reference support #_testcapi _testcapimodule.c # Python C API test module #_random _randommodule.c # Random number generator -- cgit v1.2.1 From 652487fbda9903abe14257e157348074ffff75e0 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 20 Mar 2015 19:50:46 -0700 Subject: Issue #23668: Adds support for os.truncate and os.ftruncate on Windows --- Modules/_io/fileio.c | 54 ++++----------------------------------------------- Modules/posixmodule.c | 45 +++++++++++++++++++++++++++++++++--------- 2 files changed, 40 insertions(+), 59 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 5108fc759c..bb3e9b9f94 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -839,9 +839,7 @@ static PyObject * fileio_truncate(fileio *self, PyObject *args) { PyObject *posobj = NULL; /* the new size wanted by the user */ -#ifndef MS_WINDOWS Py_off_t pos; -#endif int ret; int fd; @@ -864,52 +862,6 @@ fileio_truncate(fileio *self, PyObject *args) Py_INCREF(posobj); } -#ifdef MS_WINDOWS - /* MS _chsize doesn't work if newsize doesn't fit in 32 bits, - so don't even try using it. */ - { - PyObject *oldposobj, *tempposobj; - HANDLE hFile; - - /* we save the file pointer position */ - oldposobj = portable_lseek(fd, NULL, 1); - if (oldposobj == NULL) { - Py_DECREF(posobj); - return NULL; - } - - /* we then move to the truncation position */ - tempposobj = portable_lseek(fd, posobj, 0); - if (tempposobj == NULL) { - Py_DECREF(oldposobj); - Py_DECREF(posobj); - return NULL; - } - Py_DECREF(tempposobj); - - /* Truncate. Note that this may grow the file! */ - Py_BEGIN_ALLOW_THREADS - errno = 0; - hFile = (HANDLE)_get_osfhandle(fd); - ret = hFile == (HANDLE)-1; /* testing for INVALID_HANDLE value */ - if (ret == 0) { - ret = SetEndOfFile(hFile) == 0; - if (ret) - errno = EACCES; - } - Py_END_ALLOW_THREADS - - /* we restore the file pointer position in any case */ - tempposobj = portable_lseek(fd, oldposobj, 0); - Py_DECREF(oldposobj); - if (tempposobj == NULL) { - Py_DECREF(posobj); - return NULL; - } - Py_DECREF(tempposobj); - } -#else - #if defined(HAVE_LARGEFILE_SUPPORT) pos = PyLong_AsLongLong(posobj); #else @@ -922,11 +874,13 @@ fileio_truncate(fileio *self, PyObject *args) Py_BEGIN_ALLOW_THREADS errno = 0; +#ifdef MS_WINDOWS + ret = _chsize_s(fd, pos); +#else ret = ftruncate(fd, pos); +#endif Py_END_ALLOW_THREADS -#endif /* !MS_WINDOWS */ - if (ret != 0) { Py_DECREF(posobj); PyErr_SetFromErrno(PyExc_IOError); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 7da1ab0eb8..724acc63d1 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2315,6 +2315,10 @@ FTRUNCATE #endif /*[python end generated code: output=4bd4f6f7d41267f1 input=80b4c890b6774ea5]*/ +#ifdef MS_WINDOWS + #undef PATH_HAVE_FTRUNCATE + #define PATH_HAVE_FTRUNCATE 1 +#endif /*[python input] @@ -8753,7 +8757,7 @@ os_makedev_impl(PyModuleDef *module, int major, int minor) #endif /* HAVE_DEVICE_MACROS */ -#ifdef HAVE_FTRUNCATE +#if defined HAVE_FTRUNCATE || defined MS_WINDOWS /*[clinic input] os.ftruncate @@ -8771,9 +8775,16 @@ os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length) int result; int async_err = 0; + if (!_PyVerify_fd(fd)) + return posix_error(); + do { Py_BEGIN_ALLOW_THREADS +#ifdef MS_WINDOWS + result = _chsize_s(fd, length); +#else result = ftruncate(fd, length); +#endif Py_END_ALLOW_THREADS } while (result != 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); @@ -8781,10 +8792,10 @@ os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length) return (!async_err) ? posix_error() : NULL; Py_RETURN_NONE; } -#endif /* HAVE_FTRUNCATE */ +#endif /* HAVE_FTRUNCATE || MS_WINDOWS */ -#ifdef HAVE_TRUNCATE +#if defined HAVE_TRUNCATE || defined MS_WINDOWS /*[clinic input] os.truncate path: path_t(allow_fd='PATH_HAVE_FTRUNCATE') @@ -8801,21 +8812,37 @@ os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length) /*[clinic end generated code: output=f60a9e08370e9e2e input=77229cf0b50a9b77]*/ { int result; +#ifdef MS_WINDOWS + int fd; +#endif - Py_BEGIN_ALLOW_THREADS -#ifdef HAVE_FTRUNCATE if (path->fd != -1) - result = ftruncate(path->fd, length); + return os_ftruncate_impl(module, path->fd, length); + + Py_BEGIN_ALLOW_THREADS +#ifdef MS_WINDOWS + if (path->wide) + fd = _wopen(path->wide, _O_WRONLY | _O_BINARY | _O_NOINHERIT); else + fd = _open(path->narrow, _O_WRONLY | _O_BINARY | _O_NOINHERIT); + if (fd < 0) + result = -1; + else { + result = _chsize_s(fd, length); + close(fd); + if (result < 0) + errno = result; + } +#else + result = truncate(path->narrow, length); #endif - result = truncate(path->narrow, length); Py_END_ALLOW_THREADS if (result < 0) return path_error(path); Py_RETURN_NONE; } -#endif /* HAVE_TRUNCATE */ +#endif /* HAVE_TRUNCATE || MS_WINDOWS */ /* Issue #22396: On 32-bit AIX platform, the prototypes of os.posix_fadvise() @@ -12771,7 +12798,7 @@ static char *have_functions[] = { "HAVE_FSTATVFS", #endif -#ifdef HAVE_FTRUNCATE +#if defined HAVE_FTRUNCATE || defined MS_WINDOWS "HAVE_FTRUNCATE", #endif -- cgit v1.2.1 From e07a52f272f00b6707b40f557e481749b73dd0fd Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sun, 12 Apr 2015 00:26:27 -0400 Subject: Issue #23524: Replace _PyVerify_fd function with calls to _set_thread_local_invalid_parameter_handler. --- Modules/_io/fileio.c | 14 ++++++++++++- Modules/mmapmodule.c | 4 +++- Modules/posixmodule.c | 56 ++++++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 62 insertions(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index bb3e9b9f94..186319bfdf 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -107,9 +107,11 @@ internal_close(fileio *self) /* fd is accessible and someone else may have closed it */ if (_PyVerify_fd(fd)) { Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH err = close(fd); if (err < 0) save_errno = errno; + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS } else { save_errno = errno; @@ -599,11 +601,14 @@ fileio_readall(fileio *self) if (!_PyVerify_fd(self->fd)) return PyErr_SetFromErrno(PyExc_IOError); + _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS pos = _lseeki64(self->fd, 0L, SEEK_CUR); #else pos = lseek(self->fd, 0L, SEEK_CUR); #endif + _Py_END_SUPPRESS_IPH + if (_Py_fstat_noraise(self->fd, &status) == 0) end = status.st_size; else @@ -792,11 +797,13 @@ portable_lseek(int fd, PyObject *posobj, int whence) if (_PyVerify_fd(fd)) { Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS res = _lseeki64(fd, pos, whence); #else res = lseek(fd, pos, whence); #endif + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS } else res = -1; @@ -951,7 +958,12 @@ fileio_isatty(fileio *self) if (self->fd < 0) return err_closed(); Py_BEGIN_ALLOW_THREADS - res = isatty(self->fd); + _Py_BEGIN_SUPPRESS_IPH + if (_PyVerify_fd(self->fd)) + res = isatty(self->fd); + else + res = 0; + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS return PyBool_FromLong(res); } diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index e2ed5f9c8d..c5ba4b7045 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -1325,11 +1325,13 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) */ if (fileno != -1 && fileno != 0) { /* Ensure that fileno is within the CRT's valid range */ - if (_PyVerify_fd(fileno) == 0) { + if (!_PyVerify_fd(fileno)) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } + _Py_BEGIN_SUPPRESS_IPH fh = (HANDLE)_get_osfhandle(fileno); + _Py_END_SUPPRESS_IPH if (fh==(HANDLE)-1) { PyErr_SetFromErrno(PyExc_OSError); return NULL; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 724acc63d1..fcabadd2c8 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1280,10 +1280,6 @@ fildes_converter(PyObject *o, void *p) fd = PyObject_AsFileDescriptor(o); if (fd < 0) return 0; - if (!_PyVerify_fd(fd)) { - posix_error(); - return 0; - } *pointer = fd; return 1; } @@ -1294,9 +1290,14 @@ posix_fildes_fd(int fd, int (*func)(int)) int res; int async_err = 0; + if (!_PyVerify_fd(fd)) + return posix_error(); + do { Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH res = (*func)(fd); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS } while (res != 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (res != 0) @@ -4359,6 +4360,7 @@ os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd) int result; Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS if (path->wide) result = Py_DeleteFileW(path->wide); @@ -4373,6 +4375,7 @@ os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd) #endif /* HAVE_UNLINKAT */ result = unlink(path->narrow); #endif + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (result) @@ -7692,6 +7695,7 @@ os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd) flags |= O_CLOEXEC; #endif + _Py_BEGIN_SUPPRESS_IPH do { Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS @@ -7707,6 +7711,7 @@ os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd) fd = open(path->narrow, flags, mode); Py_END_ALLOW_THREADS } while (fd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + _Py_END_SUPPRESS_IPH if (fd == -1) { if (!async_err) @@ -7745,7 +7750,9 @@ os_close_impl(PyModuleDef *module, int fd) * for more details. */ Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH res = close(fd); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (res < 0) return posix_error(); @@ -7769,9 +7776,11 @@ os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high) { int i; Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH for (i = fd_low; i < fd_high; i++) if (_PyVerify_fd(i)) close(i); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS Py_RETURN_NONE; } @@ -7823,7 +7832,9 @@ os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable) */ #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH res = dup2(fd, fd2); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (res < 0) return posix_error(); @@ -7957,11 +7968,13 @@ os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how) return -1; } Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS result = _lseeki64(fd, position, how); #else result = lseek(fd, position, how); #endif + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (result < 0) posix_error(); @@ -8168,7 +8181,9 @@ os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset) do { Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH n = pread(fd, PyBytes_AS_STRING(buffer), length, offset); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); @@ -8276,6 +8291,7 @@ posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict) } } + _Py_BEGIN_SUPPRESS_IPH do { Py_BEGIN_ALLOW_THREADS #ifdef __APPLE__ @@ -8285,6 +8301,7 @@ posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict) #endif Py_END_ALLOW_THREADS } while (ret < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); + _Py_END_SUPPRESS_IPH if (sf.headers != NULL) iov_cleanup(sf.headers, hbuf, sf.hdr_cnt); @@ -8401,9 +8418,13 @@ static int os_isatty_impl(PyModuleDef *module, int fd) /*[clinic end generated code: output=acec9d3c29d16d33 input=08ce94aa1eaf7b5e]*/ { + int return_value; if (!_PyVerify_fd(fd)) return 0; - return isatty(fd); + _Py_BEGIN_SUPPRESS_IPH + return_value = isatty(fd); + _Py_END_SUPPRESS_IPH + return return_value; } @@ -8598,7 +8619,9 @@ os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, Py_off_t offset) do { Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH size = pwrite(fd, buffer->buf, (size_t)buffer->len, offset); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS } while (size < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); @@ -11193,12 +11216,16 @@ static int os_get_inheritable_impl(PyModuleDef *module, int fd) /*[clinic end generated code: output=36110bb36efaa21e input=89ac008dc9ab6b95]*/ { - if (!_PyVerify_fd(fd)){ + int return_value; + if (!_PyVerify_fd(fd)) { posix_error(); return -1; } - return _Py_get_inheritable(fd); + _Py_BEGIN_SUPPRESS_IPH + return_value = _Py_get_inheritable(fd); + _Py_END_SUPPRESS_IPH + return return_value; } @@ -11215,10 +11242,14 @@ static PyObject * os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable) /*[clinic end generated code: output=2ac5c6ce8623f045 input=9ceaead87a1e2402]*/ { + int result; if (!_PyVerify_fd(fd)) return posix_error(); - if (_Py_set_inheritable(fd, inheritable, NULL) < 0) + _Py_BEGIN_SUPPRESS_IPH + result = _Py_set_inheritable(fd, inheritable, NULL); + _Py_END_SUPPRESS_IPH + if (result < 0) return NULL; Py_RETURN_NONE; } @@ -11289,7 +11320,9 @@ posix_get_blocking(PyObject *self, PyObject *args) if (!_PyVerify_fd(fd)) return posix_error(); + _Py_BEGIN_SUPPRESS_IPH blocking = _Py_get_blocking(fd); + _Py_END_SUPPRESS_IPH if (blocking < 0) return NULL; return PyBool_FromLong(blocking); @@ -11305,7 +11338,7 @@ PyDoc_STRVAR(set_blocking__doc__, static PyObject* posix_set_blocking(PyObject *self, PyObject *args) { - int fd, blocking; + int fd, blocking, result; if (!PyArg_ParseTuple(args, "ii:set_blocking", &fd, &blocking)) return NULL; @@ -11313,7 +11346,10 @@ posix_set_blocking(PyObject *self, PyObject *args) if (!_PyVerify_fd(fd)) return posix_error(); - if (_Py_set_blocking(fd, blocking) < 0) + _Py_BEGIN_SUPPRESS_IPH + result = _Py_set_blocking(fd, blocking); + _Py_END_SUPPRESS_IPH + if (result < 0) return NULL; Py_RETURN_NONE; } -- cgit v1.2.1 From 7e564d6d12b9da79756ee26e863efc0c6954ed16 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sun, 12 Apr 2015 00:26:43 -0400 Subject: Issue #23668: Suppresses invalid parameter handler around chsize calls. --- Modules/_io/fileio.c | 2 ++ Modules/posixmodule.c | 4 ++++ 2 files changed, 6 insertions(+) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 186319bfdf..af93499cae 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -880,12 +880,14 @@ fileio_truncate(fileio *self, PyObject *args) } Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH errno = 0; #ifdef MS_WINDOWS ret = _chsize_s(fd, pos); #else ret = ftruncate(fd, pos); #endif + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (ret != 0) { diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index fcabadd2c8..82eae5eec4 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -8803,11 +8803,13 @@ os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length) do { Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS result = _chsize_s(fd, length); #else result = ftruncate(fd, length); #endif + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS } while (result != 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); @@ -8843,6 +8845,7 @@ os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length) return os_ftruncate_impl(module, path->fd, length); Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS if (path->wide) fd = _wopen(path->wide, _O_WRONLY | _O_BINARY | _O_NOINHERIT); @@ -8859,6 +8862,7 @@ os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length) #else result = truncate(path->narrow, length); #endif + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (result < 0) return path_error(path); -- cgit v1.2.1 From e8958bc5e862be241654d46788df58f8740ab411 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sun, 12 Apr 2015 15:44:54 -0400 Subject: Issue #23668: Regenerates posixmodule.c.h for new ifdefs --- Modules/clinic/posixmodule.c.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index f94fec9526..3f337090b1 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -3989,7 +3989,7 @@ exit: #endif /* defined(HAVE_DEVICE_MACROS) */ -#if defined(HAVE_FTRUNCATE) +#if (defined HAVE_FTRUNCATE || defined MS_WINDOWS) PyDoc_STRVAR(os_ftruncate__doc__, "ftruncate($module, fd, length, /)\n" @@ -4020,9 +4020,9 @@ exit: return return_value; } -#endif /* defined(HAVE_FTRUNCATE) */ +#endif /* (defined HAVE_FTRUNCATE || defined MS_WINDOWS) */ -#if defined(HAVE_TRUNCATE) +#if (defined HAVE_TRUNCATE || defined MS_WINDOWS) PyDoc_STRVAR(os_truncate__doc__, "truncate($module, /, path, length)\n" @@ -4060,7 +4060,7 @@ exit: return return_value; } -#endif /* defined(HAVE_TRUNCATE) */ +#endif /* (defined HAVE_TRUNCATE || defined MS_WINDOWS) */ #if (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG)) @@ -5847,4 +5847,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=b15ceac3a8ff0eae input=a9049054013a1b77]*/ +/*[clinic end generated code: output=22f405f79f87ba20 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 87bb4c9a774224b8d78b3806d662670d8566669f Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 12 Apr 2015 17:56:34 -0400 Subject: make DirEntryType and ScandirIteratorType static (closes #23918) --- Modules/posixmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 82eae5eec4..23c006844e 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -11692,7 +11692,7 @@ static PyMethodDef DirEntry_methods[] = { {NULL} }; -PyTypeObject DirEntryType = { +static PyTypeObject DirEntryType = { PyVarObject_HEAD_INIT(NULL, 0) MODNAME ".DirEntry", /* tp_name */ sizeof(DirEntry), /* tp_basicsize */ @@ -12024,7 +12024,7 @@ ScandirIterator_dealloc(ScandirIterator *iterator) Py_TYPE(iterator)->tp_free((PyObject *)iterator); } -PyTypeObject ScandirIteratorType = { +static PyTypeObject ScandirIteratorType = { PyVarObject_HEAD_INIT(NULL, 0) MODNAME ".ScandirIterator", /* tp_name */ sizeof(ScandirIterator), /* tp_basicsize */ -- cgit v1.2.1 From b09b34b211300f68cc98f6b882f7d2e2f4a76f10 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Mon, 13 Apr 2015 14:21:02 -0400 Subject: Issue #23731: Implement PEP 488. The concept of .pyo files no longer exists. Now .pyc files have an optional `opt-` tag which specifies if any extra optimizations beyond the peepholer were applied. --- Modules/getpath.c | 5 ++--- Modules/zipimport.c | 17 ++--------------- 2 files changed, 4 insertions(+), 18 deletions(-) (limited to 'Modules') diff --git a/Modules/getpath.c b/Modules/getpath.c index 429bef3489..03d292c18b 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -170,14 +170,14 @@ isfile(wchar_t *filename) /* Is file, not directory */ static int -ismodule(wchar_t *filename) /* Is module -- check for .pyc/.pyo too */ +ismodule(wchar_t *filename) /* Is module -- check for .pyc too */ { if (isfile(filename)) return 1; /* Check for the compiled version of prefix. */ if (wcslen(filename) < MAXPATHLEN) { - wcscat(filename, Py_OptimizeFlag ? L"o" : L"c"); + wcscat(filename, L"c"); if (isfile(filename)) return 1; } @@ -891,4 +891,3 @@ Py_GetProgramFullPath(void) #ifdef __cplusplus } #endif - diff --git a/Modules/zipimport.c b/Modules/zipimport.c index 38dc0c4290..06abb312b3 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -20,15 +20,13 @@ _Py_IDENTIFIER(replace); /* zip_searchorder defines how we search for a module in the Zip archive: we first search for a package __init__, then for - non-package .pyc, .pyo and .py entries. The .pyc and .pyo entries + non-package .pyc, and .py entries. The .pyc entries are swapped by initzipimport() if we run in optimized mode. Also, '/' is replaced by SEP there. */ static struct st_zip_searchorder zip_searchorder[] = { {"/__init__.pyc", IS_PACKAGE | IS_BYTECODE}, - {"/__init__.pyo", IS_PACKAGE | IS_BYTECODE}, {"/__init__.py", IS_PACKAGE | IS_SOURCE}, {".pyc", IS_BYTECODE}, - {".pyo", IS_BYTECODE}, {".py", IS_SOURCE}, {"", 0} }; @@ -1318,7 +1316,7 @@ parse_dostime(int dostime, int dosdate) return mktime(&stm); } -/* Given a path to a .pyc or .pyo file in the archive, return the +/* Given a path to a .pyc file in the archive, return the modification time of the matching .py file, or 0 if no source is available. */ static time_t @@ -1481,17 +1479,6 @@ PyInit_zipimport(void) /* Correct directory separator */ zip_searchorder[0].suffix[0] = SEP; zip_searchorder[1].suffix[0] = SEP; - zip_searchorder[2].suffix[0] = SEP; - if (Py_OptimizeFlag) { - /* Reverse *.pyc and *.pyo */ - struct st_zip_searchorder tmp; - tmp = zip_searchorder[0]; - zip_searchorder[0] = zip_searchorder[1]; - zip_searchorder[1] = tmp; - tmp = zip_searchorder[3]; - zip_searchorder[3] = zip_searchorder[4]; - zip_searchorder[4] = tmp; - } mod = PyModule_Create(&zipimportmodule); if (mod == NULL) -- cgit v1.2.1 From e43bbe2166fa92c5a574a4cbfe70423291816733 Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Mon, 13 Apr 2015 17:48:40 -0400 Subject: Issue #22631: Added Linux-specific socket constant CAN_RAW_FD_FRAMES. Patch courtesy of Joe Jevnik. --- Modules/socketmodule.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index fd20b174d3..7610b0c05d 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -6617,6 +6617,9 @@ PyInit__socket(void) PyModule_AddIntMacro(m, CAN_RAW_LOOPBACK); PyModule_AddIntMacro(m, CAN_RAW_RECV_OWN_MSGS); #endif +#ifdef HAVE_LINUX_CAN_RAW_FD_FRAMES + PyModule_AddIntMacro(m, CAN_RAW_FD_FRAMES); +#endif #ifdef HAVE_LINUX_CAN_BCM_H PyModule_AddIntMacro(m, CAN_BCM); PyModule_AddIntConstant(m, "CAN_BCM_TX_SETUP", TX_SETUP); -- cgit v1.2.1 From 605ad6a026d02b5101c2d746d31e17ad52f902b1 Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Mon, 13 Apr 2015 18:22:35 -0500 Subject: Issue #20586: Argument Clinic now ensures signatures on functions without docstrings. --- Modules/_testcapimodule.c | 9 +++++++ Modules/cjkcodecs/clinic/multibytecodec.c.h | 38 +++++++++++++++++++---------- Modules/clinic/pyexpat.c.h | 5 ++-- 3 files changed, 37 insertions(+), 15 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index d6eb6d4509..d77d1dbcd9 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3083,6 +3083,12 @@ PyDoc_STRVAR(docstring_with_signature, "This docstring has a valid signature." ); +PyDoc_STRVAR(docstring_with_signature_but_no_doc, +"docstring_with_signature_but_no_doc($module, /, sig)\n" +"--\n" +"\n" +); + PyDoc_STRVAR(docstring_with_signature_and_extra_newlines, "docstring_with_signature_and_extra_newlines($module, /, parameter)\n" "--\n" @@ -3635,6 +3641,9 @@ static PyMethodDef TestMethods[] = { {"docstring_with_signature", (PyCFunction)test_with_docstring, METH_NOARGS, docstring_with_signature}, + {"docstring_with_signature_but_no_doc", + (PyCFunction)test_with_docstring, METH_NOARGS, + docstring_with_signature_but_no_doc}, {"docstring_with_signature_and_extra_newlines", (PyCFunction)test_with_docstring, METH_NOARGS, docstring_with_signature_and_extra_newlines}, diff --git a/Modules/cjkcodecs/clinic/multibytecodec.c.h b/Modules/cjkcodecs/clinic/multibytecodec.c.h index 2f9cb63927..29b00acd88 100644 --- a/Modules/cjkcodecs/clinic/multibytecodec.c.h +++ b/Modules/cjkcodecs/clinic/multibytecodec.c.h @@ -78,7 +78,8 @@ exit: PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalEncoder_encode__doc__, "encode($self, /, input, final=0)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTEINCREMENTALENCODER_ENCODE_METHODDEF \ {"encode", (PyCFunction)_multibytecodec_MultibyteIncrementalEncoder_encode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteIncrementalEncoder_encode__doc__}, @@ -106,7 +107,8 @@ exit: PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalEncoder_reset__doc__, "reset($self, /)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTEINCREMENTALENCODER_RESET_METHODDEF \ {"reset", (PyCFunction)_multibytecodec_MultibyteIncrementalEncoder_reset, METH_NOARGS, _multibytecodec_MultibyteIncrementalEncoder_reset__doc__}, @@ -122,7 +124,8 @@ _multibytecodec_MultibyteIncrementalEncoder_reset(MultibyteIncrementalEncoderObj PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalDecoder_decode__doc__, "decode($self, /, input, final=0)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTEINCREMENTALDECODER_DECODE_METHODDEF \ {"decode", (PyCFunction)_multibytecodec_MultibyteIncrementalDecoder_decode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteIncrementalDecoder_decode__doc__}, @@ -154,7 +157,8 @@ exit: PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalDecoder_reset__doc__, "reset($self, /)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTEINCREMENTALDECODER_RESET_METHODDEF \ {"reset", (PyCFunction)_multibytecodec_MultibyteIncrementalDecoder_reset, METH_NOARGS, _multibytecodec_MultibyteIncrementalDecoder_reset__doc__}, @@ -170,7 +174,8 @@ _multibytecodec_MultibyteIncrementalDecoder_reset(MultibyteIncrementalDecoderObj PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_read__doc__, "read($self, sizeobj=None, /)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTESTREAMREADER_READ_METHODDEF \ {"read", (PyCFunction)_multibytecodec_MultibyteStreamReader_read, METH_VARARGS, _multibytecodec_MultibyteStreamReader_read__doc__}, @@ -196,7 +201,8 @@ exit: PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_readline__doc__, "readline($self, sizeobj=None, /)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTESTREAMREADER_READLINE_METHODDEF \ {"readline", (PyCFunction)_multibytecodec_MultibyteStreamReader_readline, METH_VARARGS, _multibytecodec_MultibyteStreamReader_readline__doc__}, @@ -222,7 +228,8 @@ exit: PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_readlines__doc__, "readlines($self, sizehintobj=None, /)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTESTREAMREADER_READLINES_METHODDEF \ {"readlines", (PyCFunction)_multibytecodec_MultibyteStreamReader_readlines, METH_VARARGS, _multibytecodec_MultibyteStreamReader_readlines__doc__}, @@ -248,7 +255,8 @@ exit: PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_reset__doc__, "reset($self, /)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTESTREAMREADER_RESET_METHODDEF \ {"reset", (PyCFunction)_multibytecodec_MultibyteStreamReader_reset, METH_NOARGS, _multibytecodec_MultibyteStreamReader_reset__doc__}, @@ -264,21 +272,24 @@ _multibytecodec_MultibyteStreamReader_reset(MultibyteStreamReaderObject *self, P PyDoc_STRVAR(_multibytecodec_MultibyteStreamWriter_write__doc__, "write($self, strobj, /)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTESTREAMWRITER_WRITE_METHODDEF \ {"write", (PyCFunction)_multibytecodec_MultibyteStreamWriter_write, METH_O, _multibytecodec_MultibyteStreamWriter_write__doc__}, PyDoc_STRVAR(_multibytecodec_MultibyteStreamWriter_writelines__doc__, "writelines($self, lines, /)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTESTREAMWRITER_WRITELINES_METHODDEF \ {"writelines", (PyCFunction)_multibytecodec_MultibyteStreamWriter_writelines, METH_O, _multibytecodec_MultibyteStreamWriter_writelines__doc__}, PyDoc_STRVAR(_multibytecodec_MultibyteStreamWriter_reset__doc__, "reset($self, /)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC_MULTIBYTESTREAMWRITER_RESET_METHODDEF \ {"reset", (PyCFunction)_multibytecodec_MultibyteStreamWriter_reset, METH_NOARGS, _multibytecodec_MultibyteStreamWriter_reset__doc__}, @@ -294,8 +305,9 @@ _multibytecodec_MultibyteStreamWriter_reset(MultibyteStreamWriterObject *self, P PyDoc_STRVAR(_multibytecodec___create_codec__doc__, "__create_codec($module, arg, /)\n" -"--"); +"--\n" +"\n"); #define _MULTIBYTECODEC___CREATE_CODEC_METHODDEF \ {"__create_codec", (PyCFunction)_multibytecodec___create_codec, METH_O, _multibytecodec___create_codec__doc__}, -/*[clinic end generated code: output=dff1459dec464796 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0ea29cd57f7cbc1a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h index d4a3a4b8ce..707cc0c8c3 100644 --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -209,7 +209,8 @@ exit: PyDoc_STRVAR(pyexpat_xmlparser___dir____doc__, "__dir__($self, /)\n" -"--"); +"--\n" +"\n"); #define PYEXPAT_XMLPARSER___DIR___METHODDEF \ {"__dir__", (PyCFunction)pyexpat_xmlparser___dir__, METH_NOARGS, pyexpat_xmlparser___dir____doc__}, @@ -286,4 +287,4 @@ exit: #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=9715b916f2d618fa input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e5993de4e9dd2236 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 8f7e37ea29d7bdfadb98c3ef264862962e99748c Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Tue, 14 Apr 2015 18:07:59 -0400 Subject: Issue #23944: Argument Clinic now wraps long impl prototypes at column 78. --- Modules/_bz2module.c | 5 +- Modules/_cursesmodule.c | 5 +- Modules/_dbmmodule.c | 10 ++- Modules/_lzmamodule.c | 15 ++-- Modules/_pickle.c | 37 +++++---- Modules/arraymodule.c | 12 ++- Modules/audioop.c | 66 +++++++++------- Modules/binascii.c | 5 +- Modules/cjkcodecs/clinic/multibytecodec.c.h | 27 +++++-- Modules/cjkcodecs/multibytecodec.c | 49 +++++++----- Modules/clinic/_bz2module.c.h | 5 +- Modules/clinic/_cursesmodule.c.h | 5 +- Modules/clinic/_dbmmodule.c.h | 8 +- Modules/clinic/_lzmamodule.c.h | 11 ++- Modules/clinic/_pickle.c.h | 25 ++++-- Modules/clinic/arraymodule.c.h | 10 ++- Modules/clinic/audioop.c.h | 42 ++++++---- Modules/clinic/binascii.c.h | 5 +- Modules/clinic/fcntlmodule.c.h | 8 +- Modules/clinic/posixmodule.c.h | 71 +++++++++++------ Modules/clinic/pyexpat.c.h | 12 ++- Modules/clinic/unicodedata.c.h | 6 +- Modules/clinic/zlibmodule.c.h | 11 ++- Modules/fcntlmodule.c | 10 ++- Modules/posixmodule.c | 115 +++++++++++++++++----------- Modules/pyexpat.c | 16 ++-- Modules/unicodedata.c | 6 +- Modules/zlibmodule.c | 15 ++-- 28 files changed, 387 insertions(+), 225 deletions(-) (limited to 'Modules') diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index 4ca0944e5c..7dfd3072dc 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -614,8 +614,9 @@ the unused_data attribute. [clinic start generated code]*/ static PyObject * -_bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=7eeb5794035a2ca3 input=9558b424c8b00516]*/ +_bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data, + Py_ssize_t max_length) +/*[clinic end generated code: output=23e41045deb240a3 input=9558b424c8b00516]*/ { PyObject *result = NULL; diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 209f87e8b0..54c724ba5f 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -586,8 +586,9 @@ current settings for the window object. [clinic start generated code]*/ static PyObject * -curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, int x, PyObject *ch, int group_right_1, long attr) -/*[clinic end generated code: output=9fa34a5d80151f1a input=5a41efb34a2de338]*/ +curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, + int x, PyObject *ch, int group_right_1, long attr) +/*[clinic end generated code: output=99f7f85078ec06c3 input=5a41efb34a2de338]*/ { PyCursesWindowObject *cwself = (PyCursesWindowObject *)self; int coordinates_group = group_left_1; diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index c017885aa2..bcdea1ddf9 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -280,8 +280,9 @@ Return the value for key if present, otherwise default. [clinic start generated code]*/ static PyObject * -dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, PyObject *default_value) -/*[clinic end generated code: output=c2bdccaa734ad349 input=aecf5efd2f2b1a3b]*/ +dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, + PyObject *default_value) +/*[clinic end generated code: output=4f5c0e523eaf1251 input=aecf5efd2f2b1a3b]*/ { datum dbm_key, val; @@ -422,8 +423,9 @@ Return a database object. [clinic start generated code]*/ static PyObject * -dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode) -/*[clinic end generated code: output=8b618fe06b92bf86 input=6499ab0fab1333ac]*/ +dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, + int mode) +/*[clinic end generated code: output=e8d4b36f25c733fd input=6499ab0fab1333ac]*/ { int iflags; diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index f110f5b5ea..7e4e2dfa8e 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -1085,8 +1085,9 @@ the unused_data attribute. [clinic start generated code]*/ static PyObject * -_lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=1532a5bb23629001 input=f2bb902cc1caf203]*/ +_lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data, + Py_ssize_t max_length) +/*[clinic end generated code: output=ef4e20ec7122241d input=f2bb902cc1caf203]*/ { PyObject *result = NULL; @@ -1150,8 +1151,9 @@ For one-shot decompression, use the decompress() function instead. [clinic start generated code]*/ static int -_lzma_LZMADecompressor___init___impl(Decompressor *self, int format, PyObject *memlimit, PyObject *filters) -/*[clinic end generated code: output=9b119f6f2cc2d7a8 input=458ca6132ef29801]*/ +_lzma_LZMADecompressor___init___impl(Decompressor *self, int format, + PyObject *memlimit, PyObject *filters) +/*[clinic end generated code: output=3e1821f8aa36564c input=458ca6132ef29801]*/ { const uint32_t decoder_flags = LZMA_TELL_ANY_CHECK | LZMA_TELL_NO_CHECK; uint64_t memlimit_ = UINT64_MAX; @@ -1399,8 +1401,9 @@ The result does not include the filter ID itself, only the options. [clinic start generated code]*/ static PyObject * -_lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, Py_buffer *encoded_props) -/*[clinic end generated code: output=235f7f5345d48744 input=246410800782160c]*/ +_lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, + Py_buffer *encoded_props) +/*[clinic end generated code: output=af248f570746668b input=246410800782160c]*/ { lzma_filter filter; lzma_ret lzret; diff --git a/Modules/_pickle.c b/Modules/_pickle.c index d4aff5e19e..78a4b15a00 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -4106,8 +4106,9 @@ to map the new Python 3 names to the old module names used in Python [clinic start generated code]*/ static int -_pickle_Pickler___init___impl(PicklerObject *self, PyObject *file, PyObject *protocol, int fix_imports) -/*[clinic end generated code: output=56e229f3b1f4332f input=b8cdeb7e3f5ee674]*/ +_pickle_Pickler___init___impl(PicklerObject *self, PyObject *file, + PyObject *protocol, int fix_imports) +/*[clinic end generated code: output=b5f31078dab17fb0 input=b8cdeb7e3f5ee674]*/ { _Py_IDENTIFIER(persistent_id); _Py_IDENTIFIER(dispatch_table); @@ -6302,8 +6303,10 @@ needed. Both arguments passed are str objects. [clinic start generated code]*/ static PyObject * -_pickle_Unpickler_find_class_impl(UnpicklerObject *self, PyObject *module_name, PyObject *global_name) -/*[clinic end generated code: output=64c77437e088e188 input=e2e6a865de093ef4]*/ +_pickle_Unpickler_find_class_impl(UnpicklerObject *self, + PyObject *module_name, + PyObject *global_name) +/*[clinic end generated code: output=becc08d7f9ed41e3 input=e2e6a865de093ef4]*/ { PyObject *global; PyObject *modules_dict; @@ -6514,8 +6517,10 @@ string instances as bytes objects. [clinic start generated code]*/ static int -_pickle_Unpickler___init___impl(UnpicklerObject *self, PyObject *file, int fix_imports, const char *encoding, const char *errors) -/*[clinic end generated code: output=b9ed1d84d315f3b5 input=30b4dc9e976b890c]*/ +_pickle_Unpickler___init___impl(UnpicklerObject *self, PyObject *file, + int fix_imports, const char *encoding, + const char *errors) +/*[clinic end generated code: output=e2c8ce748edc57b0 input=30b4dc9e976b890c]*/ { _Py_IDENTIFIER(persistent_load); @@ -6943,8 +6948,9 @@ to map the new Python 3 names to the old module names used in Python [clinic start generated code]*/ static PyObject * -_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports) -/*[clinic end generated code: output=a606e626d553850d input=e9e5fdd48de92eae]*/ +_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, + PyObject *protocol, int fix_imports) +/*[clinic end generated code: output=0de7dff89c406816 input=e9e5fdd48de92eae]*/ { PicklerObject *pickler = _Pickler_New(); @@ -6996,8 +7002,9 @@ Python 2, so that the pickle data stream is readable with Python 2. [clinic start generated code]*/ static PyObject * -_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, int fix_imports) -/*[clinic end generated code: output=777f0deefe5b88ee input=293dbeda181580b7]*/ +_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, + int fix_imports) +/*[clinic end generated code: output=daa380db56fe07b9 input=293dbeda181580b7]*/ { PyObject *result; PicklerObject *pickler = _Pickler_New(); @@ -7056,8 +7063,9 @@ string instances as bytes objects. [clinic start generated code]*/ static PyObject * -_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, const char *encoding, const char *errors) -/*[clinic end generated code: output=568c61356c172654 input=da97372e38e510a6]*/ +_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, + const char *encoding, const char *errors) +/*[clinic end generated code: output=798f1c57cb2b4eb1 input=da97372e38e510a6]*/ { PyObject *result; UnpicklerObject *unpickler = _Unpickler_New(); @@ -7109,8 +7117,9 @@ string instances as bytes objects. [clinic start generated code]*/ static PyObject * -_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, const char *encoding, const char *errors) -/*[clinic end generated code: output=0b3845ad110b2522 input=f57f0fdaa2b4cb8b]*/ +_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, + const char *encoding, const char *errors) +/*[clinic end generated code: output=61e9cdb01e36a736 input=f57f0fdaa2b4cb8b]*/ { PyObject *result; UnpicklerObject *unpickler = _Unpickler_New(); diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 6e20aaa7d5..49f837c91c 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1684,8 +1684,9 @@ some other type. [clinic start generated code]*/ static PyObject * -array_array_fromunicode_impl(arrayobject *self, Py_UNICODE *ustr, Py_ssize_clean_t ustr_length) -/*[clinic end generated code: output=3b3f4f133bac725e input=56bcedb5ef70139f]*/ +array_array_fromunicode_impl(arrayobject *self, Py_UNICODE *ustr, + Py_ssize_clean_t ustr_length) +/*[clinic end generated code: output=ebb72fc16975e06d input=56bcedb5ef70139f]*/ { char typecode; @@ -1937,8 +1938,11 @@ Internal. Used for pickling support. [clinic start generated code]*/ static PyObject * -array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items) -/*[clinic end generated code: output=c51081ec91caf7e9 input=f72492708c0a1d50]*/ +array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, + int typecode, + enum machine_format_code mformat_code, + PyObject *items) +/*[clinic end generated code: output=6ecbf0e8e4d92ab9 input=f72492708c0a1d50]*/ { PyObject *converted_items; PyObject *result; diff --git a/Modules/audioop.c b/Modules/audioop.c index 7712e79cf7..d49596fdd6 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -407,8 +407,9 @@ Return the value of sample index from the fragment. [clinic start generated code]*/ static PyObject * -audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, Py_ssize_t index) -/*[clinic end generated code: output=f4482497e6f6e78f input=88edbe2871393549]*/ +audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, + Py_ssize_t index) +/*[clinic end generated code: output=3995e189fdc8ec16 input=88edbe2871393549]*/ { int val; @@ -593,8 +594,9 @@ Try to match reference as well as possible to a portion of fragment. [clinic start generated code]*/ static PyObject * -audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, Py_buffer *reference) -/*[clinic end generated code: output=505fd04d4244db31 input=62c305605e183c9a]*/ +audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, + Py_buffer *reference) +/*[clinic end generated code: output=609eedf5d823d6dd input=62c305605e183c9a]*/ { const short *cp1, *cp2; Py_ssize_t len1, len2; @@ -661,8 +663,9 @@ Return a factor F such that rms(add(fragment, mul(reference, -F))) is minimal. [clinic start generated code]*/ static PyObject * -audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, Py_buffer *reference) -/*[clinic end generated code: output=ddf35a1e57575ce4 input=816680301d012b21]*/ +audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, + Py_buffer *reference) +/*[clinic end generated code: output=5566a8c55de54f99 input=816680301d012b21]*/ { const short *cp1, *cp2; Py_ssize_t len; @@ -702,8 +705,9 @@ Search fragment for a slice of specified number of samples with maximum energy. [clinic start generated code]*/ static PyObject * -audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, Py_ssize_t length) -/*[clinic end generated code: output=21d0c2a1e5655134 input=2f304801ed42383c]*/ +audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, + Py_ssize_t length) +/*[clinic end generated code: output=01fe796fad2573bb input=2f304801ed42383c]*/ { const short *cp1; Py_ssize_t len1; @@ -896,8 +900,9 @@ Return a fragment that has all samples in the original fragment multiplied by th [clinic start generated code]*/ static PyObject * -audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, double factor) -/*[clinic end generated code: output=a697ebbd5852d38f input=c726667baa157d3c]*/ +audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, + double factor) +/*[clinic end generated code: output=1c7c31191ac86b10 input=c726667baa157d3c]*/ { signed char *ncp; Py_ssize_t i; @@ -937,8 +942,9 @@ Convert a stereo fragment to a mono fragment. [clinic start generated code]*/ static PyObject * -audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, double lfactor, double rfactor) -/*[clinic end generated code: output=436e7710521661dd input=c4ec949b3f4dddfa]*/ +audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, + double lfactor, double rfactor) +/*[clinic end generated code: output=553f547c5e29e3b6 input=c4ec949b3f4dddfa]*/ { signed char *cp, *ncp; Py_ssize_t len, i; @@ -985,8 +991,9 @@ Generate a stereo fragment from a mono fragment. [clinic start generated code]*/ static PyObject * -audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, double lfactor, double rfactor) -/*[clinic end generated code: output=6ff50681c87f4c1c input=27b6395ebfdff37a]*/ +audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, + double lfactor, double rfactor) +/*[clinic end generated code: output=697bb6ba41e9dd2c input=27b6395ebfdff37a]*/ { signed char *ncp; Py_ssize_t i; @@ -1032,8 +1039,9 @@ Return a fragment which is the addition of the two samples passed as parameters. [clinic start generated code]*/ static PyObject * -audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, Py_buffer *fragment2, int width) -/*[clinic end generated code: output=f9218bf9ea75c3f1 input=4a8d4bae4c1605c7]*/ +audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, + Py_buffer *fragment2, int width) +/*[clinic end generated code: output=fe6c12f143e0b027 input=4a8d4bae4c1605c7]*/ { signed char *ncp; Py_ssize_t i; @@ -1090,8 +1098,9 @@ Return a fragment that is the original fragment with a bias added to each sample [clinic start generated code]*/ static PyObject * -audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, int bias) -/*[clinic end generated code: output=8ec80b3f5d510a51 input=2b5cce5c3bb4838c]*/ +audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, + int bias) +/*[clinic end generated code: output=ac1f4dda20a01c26 input=2b5cce5c3bb4838c]*/ { signed char *ncp; Py_ssize_t i; @@ -1217,8 +1226,9 @@ Convert samples between 1-, 2-, 3- and 4-byte formats. [clinic start generated code]*/ static PyObject * -audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, int newwidth) -/*[clinic end generated code: output=3f9468a74472a93e input=5ce08c8aa2f24d96]*/ +audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, + int newwidth) +/*[clinic end generated code: output=cb6ca950d1df9898 input=5ce08c8aa2f24d96]*/ { unsigned char *ncp; Py_ssize_t i, j; @@ -1274,8 +1284,10 @@ Convert the frame rate of the input fragment. [clinic start generated code]*/ static PyObject * -audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, int nchannels, int inrate, int outrate, PyObject *state, int weightA, int weightB) -/*[clinic end generated code: output=5585dddc4b5ff236 input=aff3acdc94476191]*/ +audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, + int nchannels, int inrate, int outrate, PyObject *state, + int weightA, int weightB) +/*[clinic end generated code: output=59e1787bfa49b9d9 input=aff3acdc94476191]*/ { char *cp, *ncp; Py_ssize_t len; @@ -1601,8 +1613,9 @@ Convert samples to 4 bit Intel/DVI ADPCM encoding. [clinic start generated code]*/ static PyObject * -audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, PyObject *state) -/*[clinic end generated code: output=4654c29d2731fafe input=12919d549b90c90a]*/ +audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, + PyObject *state) +/*[clinic end generated code: output=93f0996f592b5ce5 input=12919d549b90c90a]*/ { signed char *ncp; Py_ssize_t i; @@ -1723,8 +1736,9 @@ Decode an Intel/DVI ADPCM coded fragment to a linear fragment. [clinic start generated code]*/ static PyObject * -audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, PyObject *state) -/*[clinic end generated code: output=371965cdcc0aa69b input=f5221144f5ca9ef0]*/ +audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, + PyObject *state) +/*[clinic end generated code: output=236cf6dc2c829181 input=f5221144f5ca9ef0]*/ { signed char *cp; signed char *ncp; diff --git a/Modules/binascii.c b/Modules/binascii.c index e54a8ba6ea..4e4faa9546 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -1381,8 +1381,9 @@ are both encoded. When quotetabs is set, space and tabs are encoded. [clinic start generated code]*/ static PyObject * -binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, int istext, int header) -/*[clinic end generated code: output=ff2991ba640fff3e input=7f2a9aaa008e92b2]*/ +binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, + int istext, int header) +/*[clinic end generated code: output=a87ca9ccb94e2a9f input=7f2a9aaa008e92b2]*/ { Py_ssize_t in, out; unsigned char *databuf, *odata; diff --git a/Modules/cjkcodecs/clinic/multibytecodec.c.h b/Modules/cjkcodecs/clinic/multibytecodec.c.h index 29b00acd88..d2bad32908 100644 --- a/Modules/cjkcodecs/clinic/multibytecodec.c.h +++ b/Modules/cjkcodecs/clinic/multibytecodec.c.h @@ -17,7 +17,9 @@ PyDoc_STRVAR(_multibytecodec_MultibyteCodec_encode__doc__, {"encode", (PyCFunction)_multibytecodec_MultibyteCodec_encode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteCodec_encode__doc__}, static PyObject * -_multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, PyObject *input, const char *errors); +_multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, + PyObject *input, + const char *errors); static PyObject * _multibytecodec_MultibyteCodec_encode(MultibyteCodecObject *self, PyObject *args, PyObject *kwargs) @@ -52,7 +54,9 @@ PyDoc_STRVAR(_multibytecodec_MultibyteCodec_decode__doc__, {"decode", (PyCFunction)_multibytecodec_MultibyteCodec_decode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteCodec_decode__doc__}, static PyObject * -_multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self, Py_buffer *input, const char *errors); +_multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self, + Py_buffer *input, + const char *errors); static PyObject * _multibytecodec_MultibyteCodec_decode(MultibyteCodecObject *self, PyObject *args, PyObject *kwargs) @@ -85,7 +89,9 @@ PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalEncoder_encode__doc__, {"encode", (PyCFunction)_multibytecodec_MultibyteIncrementalEncoder_encode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteIncrementalEncoder_encode__doc__}, static PyObject * -_multibytecodec_MultibyteIncrementalEncoder_encode_impl(MultibyteIncrementalEncoderObject *self, PyObject *input, int final); +_multibytecodec_MultibyteIncrementalEncoder_encode_impl(MultibyteIncrementalEncoderObject *self, + PyObject *input, + int final); static PyObject * _multibytecodec_MultibyteIncrementalEncoder_encode(MultibyteIncrementalEncoderObject *self, PyObject *args, PyObject *kwargs) @@ -131,7 +137,9 @@ PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalDecoder_decode__doc__, {"decode", (PyCFunction)_multibytecodec_MultibyteIncrementalDecoder_decode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteIncrementalDecoder_decode__doc__}, static PyObject * -_multibytecodec_MultibyteIncrementalDecoder_decode_impl(MultibyteIncrementalDecoderObject *self, Py_buffer *input, int final); +_multibytecodec_MultibyteIncrementalDecoder_decode_impl(MultibyteIncrementalDecoderObject *self, + Py_buffer *input, + int final); static PyObject * _multibytecodec_MultibyteIncrementalDecoder_decode(MultibyteIncrementalDecoderObject *self, PyObject *args, PyObject *kwargs) @@ -181,7 +189,8 @@ PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_read__doc__, {"read", (PyCFunction)_multibytecodec_MultibyteStreamReader_read, METH_VARARGS, _multibytecodec_MultibyteStreamReader_read__doc__}, static PyObject * -_multibytecodec_MultibyteStreamReader_read_impl(MultibyteStreamReaderObject *self, PyObject *sizeobj); +_multibytecodec_MultibyteStreamReader_read_impl(MultibyteStreamReaderObject *self, + PyObject *sizeobj); static PyObject * _multibytecodec_MultibyteStreamReader_read(MultibyteStreamReaderObject *self, PyObject *args) @@ -208,7 +217,8 @@ PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_readline__doc__, {"readline", (PyCFunction)_multibytecodec_MultibyteStreamReader_readline, METH_VARARGS, _multibytecodec_MultibyteStreamReader_readline__doc__}, static PyObject * -_multibytecodec_MultibyteStreamReader_readline_impl(MultibyteStreamReaderObject *self, PyObject *sizeobj); +_multibytecodec_MultibyteStreamReader_readline_impl(MultibyteStreamReaderObject *self, + PyObject *sizeobj); static PyObject * _multibytecodec_MultibyteStreamReader_readline(MultibyteStreamReaderObject *self, PyObject *args) @@ -235,7 +245,8 @@ PyDoc_STRVAR(_multibytecodec_MultibyteStreamReader_readlines__doc__, {"readlines", (PyCFunction)_multibytecodec_MultibyteStreamReader_readlines, METH_VARARGS, _multibytecodec_MultibyteStreamReader_readlines__doc__}, static PyObject * -_multibytecodec_MultibyteStreamReader_readlines_impl(MultibyteStreamReaderObject *self, PyObject *sizehintobj); +_multibytecodec_MultibyteStreamReader_readlines_impl(MultibyteStreamReaderObject *self, + PyObject *sizehintobj); static PyObject * _multibytecodec_MultibyteStreamReader_readlines(MultibyteStreamReaderObject *self, PyObject *args) @@ -310,4 +321,4 @@ PyDoc_STRVAR(_multibytecodec___create_codec__doc__, #define _MULTIBYTECODEC___CREATE_CODEC_METHODDEF \ {"__create_codec", (PyCFunction)_multibytecodec___create_codec, METH_O, _multibytecodec___create_codec__doc__}, -/*[clinic end generated code: output=0ea29cd57f7cbc1a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0fe582cb941024c1 input=a9049054013a1b77]*/ diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 8cde6adacc..70f7a21080 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -555,8 +555,10 @@ registered with codecs.register_error that can handle UnicodeEncodeErrors. [clinic start generated code]*/ static PyObject * -_multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, PyObject *input, const char *errors) -/*[clinic end generated code: output=a36bfa08783a0d0b input=252e7ee695867b2d]*/ +_multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, + PyObject *input, + const char *errors) +/*[clinic end generated code: output=7b26652045ba56a9 input=252e7ee695867b2d]*/ { MultibyteCodec_State state; PyObject *errorcb, *r, *ucvt; @@ -622,8 +624,10 @@ codecs.register_error that is able to handle UnicodeDecodeErrors." [clinic start generated code]*/ static PyObject * -_multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self, Py_buffer *input, const char *errors) -/*[clinic end generated code: output=4c8ee8b2931b014e input=37e1d9236e3ce8f3]*/ +_multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self, + Py_buffer *input, + const char *errors) +/*[clinic end generated code: output=ff419f65bad6cc77 input=37e1d9236e3ce8f3]*/ { MultibyteCodec_State state; MultibyteDecodeBuffer buf; @@ -884,8 +888,10 @@ _multibytecodec.MultibyteIncrementalEncoder.encode [clinic start generated code]*/ static PyObject * -_multibytecodec_MultibyteIncrementalEncoder_encode_impl(MultibyteIncrementalEncoderObject *self, PyObject *input, int final) -/*[clinic end generated code: output=3cd8780c8a719bbf input=456b76d73e464661]*/ +_multibytecodec_MultibyteIncrementalEncoder_encode_impl(MultibyteIncrementalEncoderObject *self, + PyObject *input, + int final) +/*[clinic end generated code: output=123361b6c505e2c1 input=456b76d73e464661]*/ { return encoder_encode_stateful(STATEFUL_ECTX(self), input, final); } @@ -1039,8 +1045,10 @@ _multibytecodec.MultibyteIncrementalDecoder.decode [clinic start generated code]*/ static PyObject * -_multibytecodec_MultibyteIncrementalDecoder_decode_impl(MultibyteIncrementalDecoderObject *self, Py_buffer *input, int final) -/*[clinic end generated code: output=a0f3f92aa7303cf7 input=eb18c2f6e83589e1]*/ +_multibytecodec_MultibyteIncrementalDecoder_decode_impl(MultibyteIncrementalDecoderObject *self, + Py_buffer *input, + int final) +/*[clinic end generated code: output=b9b9090e8a9ce2ba input=eb18c2f6e83589e1]*/ { MultibyteDecodeBuffer buf; char *data, *wdata = NULL; @@ -1360,8 +1368,9 @@ errorexit: [clinic start generated code]*/ static PyObject * -_multibytecodec_MultibyteStreamReader_read_impl(MultibyteStreamReaderObject *self, PyObject *sizeobj) -/*[clinic end generated code: output=f298ea6e1bd2083c input=015b0d3ff2fca485]*/ +_multibytecodec_MultibyteStreamReader_read_impl(MultibyteStreamReaderObject *self, + PyObject *sizeobj) +/*[clinic end generated code: output=35621eb75355d5b8 input=015b0d3ff2fca485]*/ { Py_ssize_t size; @@ -1388,8 +1397,9 @@ _multibytecodec_MultibyteStreamReader_read_impl(MultibyteStreamReaderObject *sel [clinic start generated code]*/ static PyObject * -_multibytecodec_MultibyteStreamReader_readline_impl(MultibyteStreamReaderObject *self, PyObject *sizeobj) -/*[clinic end generated code: output=e5ac302a6d0999de input=41ccc64f9bb0cec3]*/ +_multibytecodec_MultibyteStreamReader_readline_impl(MultibyteStreamReaderObject *self, + PyObject *sizeobj) +/*[clinic end generated code: output=4fbfaae1ed457a11 input=41ccc64f9bb0cec3]*/ { Py_ssize_t size; @@ -1416,8 +1426,9 @@ _multibytecodec_MultibyteStreamReader_readline_impl(MultibyteStreamReaderObject [clinic start generated code]*/ static PyObject * -_multibytecodec_MultibyteStreamReader_readlines_impl(MultibyteStreamReaderObject *self, PyObject *sizehintobj) -/*[clinic end generated code: output=68f024178b77cb0f input=54932f5d4d88e880]*/ +_multibytecodec_MultibyteStreamReader_readlines_impl(MultibyteStreamReaderObject *self, + PyObject *sizehintobj) +/*[clinic end generated code: output=e7c4310768ed2ad4 input=54932f5d4d88e880]*/ { PyObject *r, *sr; Py_ssize_t sizehint; @@ -1618,8 +1629,9 @@ mbstreamwriter_iwrite(MultibyteStreamWriterObject *self, [clinic start generated code]*/ static PyObject * -_multibytecodec_MultibyteStreamWriter_write(MultibyteStreamWriterObject *self, PyObject *strobj) -/*[clinic end generated code: output=44e9eb0db0374cb1 input=551dc4c018c10a2b]*/ +_multibytecodec_MultibyteStreamWriter_write(MultibyteStreamWriterObject *self, + PyObject *strobj) +/*[clinic end generated code: output=e13ae841c895251e input=551dc4c018c10a2b]*/ { if (mbstreamwriter_iwrite(self, strobj)) return NULL; @@ -1635,8 +1647,9 @@ _multibytecodec_MultibyteStreamWriter_write(MultibyteStreamWriterObject *self, P [clinic start generated code]*/ static PyObject * -_multibytecodec_MultibyteStreamWriter_writelines(MultibyteStreamWriterObject *self, PyObject *lines) -/*[clinic end generated code: output=4facbb0638dde172 input=57797fe7008d4e96]*/ +_multibytecodec_MultibyteStreamWriter_writelines(MultibyteStreamWriterObject *self, + PyObject *lines) +/*[clinic end generated code: output=e5c4285ac8e7d522 input=57797fe7008d4e96]*/ { PyObject *strobj; int i, r; diff --git a/Modules/clinic/_bz2module.c.h b/Modules/clinic/_bz2module.c.h index d118c39627..7937fb6704 100644 --- a/Modules/clinic/_bz2module.c.h +++ b/Modules/clinic/_bz2module.c.h @@ -117,7 +117,8 @@ PyDoc_STRVAR(_bz2_BZ2Decompressor_decompress__doc__, {"decompress", (PyCFunction)_bz2_BZ2Decompressor_decompress, METH_VARARGS|METH_KEYWORDS, _bz2_BZ2Decompressor_decompress__doc__}, static PyObject * -_bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data, Py_ssize_t max_length); +_bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data, + Py_ssize_t max_length); static PyObject * _bz2_BZ2Decompressor_decompress(BZ2Decompressor *self, PyObject *args, PyObject *kwargs) @@ -168,4 +169,4 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=3565d163a360af01 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e8a48a949969c355 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_cursesmodule.c.h b/Modules/clinic/_cursesmodule.c.h index 7fb1b53350..5e11742499 100644 --- a/Modules/clinic/_cursesmodule.c.h +++ b/Modules/clinic/_cursesmodule.c.h @@ -24,7 +24,8 @@ PyDoc_STRVAR(curses_window_addch__doc__, {"addch", (PyCFunction)curses_window_addch, METH_VARARGS, curses_window_addch__doc__}, static PyObject * -curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, int x, PyObject *ch, int group_right_1, long attr); +curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, + int x, PyObject *ch, int group_right_1, long attr); static PyObject * curses_window_addch(PyCursesWindowObject *self, PyObject *args) @@ -67,4 +68,4 @@ curses_window_addch(PyCursesWindowObject *self, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=660ab0ae6d8fbdda input=a9049054013a1b77]*/ +/*[clinic end generated code: output=982b1e709577f3ec input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_dbmmodule.c.h b/Modules/clinic/_dbmmodule.c.h index 784b74b82d..c5f4c5ac60 100644 --- a/Modules/clinic/_dbmmodule.c.h +++ b/Modules/clinic/_dbmmodule.c.h @@ -12,7 +12,8 @@ PyDoc_STRVAR(dbm_dbm_get__doc__, {"get", (PyCFunction)dbm_dbm_get, METH_VARARGS, dbm_dbm_get__doc__}, static PyObject * -dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, PyObject *default_value); +dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, + PyObject *default_value); static PyObject * dbm_dbm_get(dbmobject *dp, PyObject *args) @@ -50,7 +51,8 @@ PyDoc_STRVAR(dbmopen__doc__, {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, static PyObject * -dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode); +dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, + int mode); static PyObject * dbmopen(PyModuleDef *module, PyObject *args) @@ -69,4 +71,4 @@ dbmopen(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=78d62d1aa3ddd13c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d6ec55c6c5d0b19d input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h index 131edd3f75..815dc90dc3 100644 --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -84,7 +84,8 @@ PyDoc_STRVAR(_lzma_LZMADecompressor_decompress__doc__, {"decompress", (PyCFunction)_lzma_LZMADecompressor_decompress, METH_VARARGS|METH_KEYWORDS, _lzma_LZMADecompressor_decompress__doc__}, static PyObject * -_lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data, Py_ssize_t max_length); +_lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data, + Py_ssize_t max_length); static PyObject * _lzma_LZMADecompressor_decompress(Decompressor *self, PyObject *args, PyObject *kwargs) @@ -132,7 +133,8 @@ PyDoc_STRVAR(_lzma_LZMADecompressor___init____doc__, "For one-shot decompression, use the decompress() function instead."); static int -_lzma_LZMADecompressor___init___impl(Decompressor *self, int format, PyObject *memlimit, PyObject *filters); +_lzma_LZMADecompressor___init___impl(Decompressor *self, int format, + PyObject *memlimit, PyObject *filters); static int _lzma_LZMADecompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) @@ -229,7 +231,8 @@ PyDoc_STRVAR(_lzma__decode_filter_properties__doc__, {"_decode_filter_properties", (PyCFunction)_lzma__decode_filter_properties, METH_VARARGS, _lzma__decode_filter_properties__doc__}, static PyObject * -_lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, Py_buffer *encoded_props); +_lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, + Py_buffer *encoded_props); static PyObject * _lzma__decode_filter_properties(PyModuleDef *module, PyObject *args) @@ -251,4 +254,4 @@ exit: return return_value; } -/*[clinic end generated code: output=ea7f2b2c4019fe86 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8981089cde080b54 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h index 975298ce47..c7fa5bfcea 100644 --- a/Modules/clinic/_pickle.c.h +++ b/Modules/clinic/_pickle.c.h @@ -85,7 +85,8 @@ PyDoc_STRVAR(_pickle_Pickler___init____doc__, "2, so that the pickle data stream is readable with Python 2."); static int -_pickle_Pickler___init___impl(PicklerObject *self, PyObject *file, PyObject *protocol, int fix_imports); +_pickle_Pickler___init___impl(PicklerObject *self, PyObject *file, + PyObject *protocol, int fix_imports); static int _pickle_Pickler___init__(PyObject *self, PyObject *args, PyObject *kwargs) @@ -199,7 +200,9 @@ PyDoc_STRVAR(_pickle_Unpickler_find_class__doc__, {"find_class", (PyCFunction)_pickle_Unpickler_find_class, METH_VARARGS, _pickle_Unpickler_find_class__doc__}, static PyObject * -_pickle_Unpickler_find_class_impl(UnpicklerObject *self, PyObject *module_name, PyObject *global_name); +_pickle_Unpickler_find_class_impl(UnpicklerObject *self, + PyObject *module_name, + PyObject *global_name); static PyObject * _pickle_Unpickler_find_class(UnpicklerObject *self, PyObject *args) @@ -271,7 +274,9 @@ PyDoc_STRVAR(_pickle_Unpickler___init____doc__, "string instances as bytes objects."); static int -_pickle_Unpickler___init___impl(UnpicklerObject *self, PyObject *file, int fix_imports, const char *encoding, const char *errors); +_pickle_Unpickler___init___impl(UnpicklerObject *self, PyObject *file, + int fix_imports, const char *encoding, + const char *errors); static int _pickle_Unpickler___init__(PyObject *self, PyObject *args, PyObject *kwargs) @@ -377,7 +382,8 @@ PyDoc_STRVAR(_pickle_dump__doc__, {"dump", (PyCFunction)_pickle_dump, METH_VARARGS|METH_KEYWORDS, _pickle_dump__doc__}, static PyObject * -_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports); +_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, + PyObject *protocol, int fix_imports); static PyObject * _pickle_dump(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -421,7 +427,8 @@ PyDoc_STRVAR(_pickle_dumps__doc__, {"dumps", (PyCFunction)_pickle_dumps, METH_VARARGS|METH_KEYWORDS, _pickle_dumps__doc__}, static PyObject * -_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, int fix_imports); +_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, + int fix_imports); static PyObject * _pickle_dumps(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -475,7 +482,8 @@ PyDoc_STRVAR(_pickle_load__doc__, {"load", (PyCFunction)_pickle_load, METH_VARARGS|METH_KEYWORDS, _pickle_load__doc__}, static PyObject * -_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, const char *encoding, const char *errors); +_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, + const char *encoding, const char *errors); static PyObject * _pickle_load(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -521,7 +529,8 @@ PyDoc_STRVAR(_pickle_loads__doc__, {"loads", (PyCFunction)_pickle_loads, METH_VARARGS|METH_KEYWORDS, _pickle_loads__doc__}, static PyObject * -_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, const char *encoding, const char *errors); +_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, + const char *encoding, const char *errors); static PyObject * _pickle_loads(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -542,4 +551,4 @@ _pickle_loads(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=3aba79576e240c62 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2c413ecc2ec74f7c input=a9049054013a1b77]*/ diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h index 5e664213ef..2e64aad43b 100644 --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -376,7 +376,8 @@ PyDoc_STRVAR(array_array_fromunicode__doc__, {"fromunicode", (PyCFunction)array_array_fromunicode, METH_O, array_array_fromunicode__doc__}, static PyObject * -array_array_fromunicode_impl(arrayobject *self, Py_UNICODE *ustr, Py_ssize_clean_t ustr_length); +array_array_fromunicode_impl(arrayobject *self, Py_UNICODE *ustr, + Py_ssize_clean_t ustr_length); static PyObject * array_array_fromunicode(arrayobject *self, PyObject *arg) @@ -446,7 +447,10 @@ PyDoc_STRVAR(array__array_reconstructor__doc__, {"_array_reconstructor", (PyCFunction)array__array_reconstructor, METH_VARARGS, array__array_reconstructor__doc__}, static PyObject * -array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items); +array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, + int typecode, + enum machine_format_code mformat_code, + PyObject *items); static PyObject * array__array_reconstructor(PyModuleDef *module, PyObject *args) @@ -502,4 +506,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__, #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, -/*[clinic end generated code: output=a8fbe83c2026fa83 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=48e8198c8087cd00 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/audioop.c.h b/Modules/clinic/audioop.c.h index 40ef5e2dc4..a58afdab3b 100644 --- a/Modules/clinic/audioop.c.h +++ b/Modules/clinic/audioop.c.h @@ -12,7 +12,8 @@ PyDoc_STRVAR(audioop_getsample__doc__, {"getsample", (PyCFunction)audioop_getsample, METH_VARARGS, audioop_getsample__doc__}, static PyObject * -audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, Py_ssize_t index); +audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, + Py_ssize_t index); static PyObject * audioop_getsample(PyModuleDef *module, PyObject *args) @@ -178,7 +179,8 @@ PyDoc_STRVAR(audioop_findfit__doc__, {"findfit", (PyCFunction)audioop_findfit, METH_VARARGS, audioop_findfit__doc__}, static PyObject * -audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, Py_buffer *reference); +audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, + Py_buffer *reference); static PyObject * audioop_findfit(PyModuleDef *module, PyObject *args) @@ -214,7 +216,8 @@ PyDoc_STRVAR(audioop_findfactor__doc__, {"findfactor", (PyCFunction)audioop_findfactor, METH_VARARGS, audioop_findfactor__doc__}, static PyObject * -audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, Py_buffer *reference); +audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, + Py_buffer *reference); static PyObject * audioop_findfactor(PyModuleDef *module, PyObject *args) @@ -250,7 +253,8 @@ PyDoc_STRVAR(audioop_findmax__doc__, {"findmax", (PyCFunction)audioop_findmax, METH_VARARGS, audioop_findmax__doc__}, static PyObject * -audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, Py_ssize_t length); +audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, + Py_ssize_t length); static PyObject * audioop_findmax(PyModuleDef *module, PyObject *args) @@ -382,7 +386,8 @@ PyDoc_STRVAR(audioop_mul__doc__, {"mul", (PyCFunction)audioop_mul, METH_VARARGS, audioop_mul__doc__}, static PyObject * -audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, double factor); +audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, + double factor); static PyObject * audioop_mul(PyModuleDef *module, PyObject *args) @@ -416,7 +421,8 @@ PyDoc_STRVAR(audioop_tomono__doc__, {"tomono", (PyCFunction)audioop_tomono, METH_VARARGS, audioop_tomono__doc__}, static PyObject * -audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, double lfactor, double rfactor); +audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, + double lfactor, double rfactor); static PyObject * audioop_tomono(PyModuleDef *module, PyObject *args) @@ -451,7 +457,8 @@ PyDoc_STRVAR(audioop_tostereo__doc__, {"tostereo", (PyCFunction)audioop_tostereo, METH_VARARGS, audioop_tostereo__doc__}, static PyObject * -audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, double lfactor, double rfactor); +audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, + double lfactor, double rfactor); static PyObject * audioop_tostereo(PyModuleDef *module, PyObject *args) @@ -486,7 +493,8 @@ PyDoc_STRVAR(audioop_add__doc__, {"add", (PyCFunction)audioop_add, METH_VARARGS, audioop_add__doc__}, static PyObject * -audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, Py_buffer *fragment2, int width); +audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, + Py_buffer *fragment2, int width); static PyObject * audioop_add(PyModuleDef *module, PyObject *args) @@ -523,7 +531,8 @@ PyDoc_STRVAR(audioop_bias__doc__, {"bias", (PyCFunction)audioop_bias, METH_VARARGS, audioop_bias__doc__}, static PyObject * -audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, int bias); +audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, + int bias); static PyObject * audioop_bias(PyModuleDef *module, PyObject *args) @@ -623,7 +632,8 @@ PyDoc_STRVAR(audioop_lin2lin__doc__, {"lin2lin", (PyCFunction)audioop_lin2lin, METH_VARARGS, audioop_lin2lin__doc__}, static PyObject * -audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, int newwidth); +audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, + int newwidth); static PyObject * audioop_lin2lin(PyModuleDef *module, PyObject *args) @@ -658,7 +668,9 @@ PyDoc_STRVAR(audioop_ratecv__doc__, {"ratecv", (PyCFunction)audioop_ratecv, METH_VARARGS, audioop_ratecv__doc__}, static PyObject * -audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, int nchannels, int inrate, int outrate, PyObject *state, int weightA, int weightB); +audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, + int nchannels, int inrate, int outrate, PyObject *state, + int weightA, int weightB); static PyObject * audioop_ratecv(PyModuleDef *module, PyObject *args) @@ -829,7 +841,8 @@ PyDoc_STRVAR(audioop_lin2adpcm__doc__, {"lin2adpcm", (PyCFunction)audioop_lin2adpcm, METH_VARARGS, audioop_lin2adpcm__doc__}, static PyObject * -audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, PyObject *state); +audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, + PyObject *state); static PyObject * audioop_lin2adpcm(PyModuleDef *module, PyObject *args) @@ -863,7 +876,8 @@ PyDoc_STRVAR(audioop_adpcm2lin__doc__, {"adpcm2lin", (PyCFunction)audioop_adpcm2lin, METH_VARARGS, audioop_adpcm2lin__doc__}, static PyObject * -audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, PyObject *state); +audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, + PyObject *state); static PyObject * audioop_adpcm2lin(PyModuleDef *module, PyObject *args) @@ -886,4 +900,4 @@ exit: return return_value; } -/*[clinic end generated code: output=be840bba5d40c2ce input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9b01aafef50425ae input=a9049054013a1b77]*/ diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h index 0e42c36b61..d7c2ee64d7 100644 --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -518,7 +518,8 @@ PyDoc_STRVAR(binascii_b2a_qp__doc__, {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_VARARGS|METH_KEYWORDS, binascii_b2a_qp__doc__}, static PyObject * -binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, int istext, int header); +binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, + int istext, int header); static PyObject * binascii_b2a_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -543,4 +544,4 @@ exit: return return_value; } -/*[clinic end generated code: output=31ccbd5fddc8fd75 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=175025a8a94fbdd1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/fcntlmodule.c.h b/Modules/clinic/fcntlmodule.c.h index d2c36bab56..2a1f8aa024 100644 --- a/Modules/clinic/fcntlmodule.c.h +++ b/Modules/clinic/fcntlmodule.c.h @@ -79,7 +79,8 @@ PyDoc_STRVAR(fcntl_ioctl__doc__, {"ioctl", (PyCFunction)fcntl_ioctl, METH_VARARGS, fcntl_ioctl__doc__}, static PyObject * -fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg); +fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, + PyObject *ob_arg, int mutate_arg); static PyObject * fcntl_ioctl(PyModuleDef *module, PyObject *args) @@ -163,7 +164,8 @@ PyDoc_STRVAR(fcntl_lockf__doc__, {"lockf", (PyCFunction)fcntl_lockf, METH_VARARGS, fcntl_lockf__doc__}, static PyObject * -fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence); +fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, + PyObject *startobj, int whence); static PyObject * fcntl_lockf(PyModuleDef *module, PyObject *args) @@ -184,4 +186,4 @@ fcntl_lockf(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=ec482672292aab0c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=badaa968eb04410d input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 3f337090b1..fc79f5715d 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -30,7 +30,8 @@ PyDoc_STRVAR(os_stat__doc__, {"stat", (PyCFunction)os_stat, METH_VARARGS|METH_KEYWORDS, os_stat__doc__}, static PyObject * -os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, int follow_symlinks); +os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, + int follow_symlinks); static PyObject * os_stat(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -126,7 +127,8 @@ PyDoc_STRVAR(os_access__doc__, {"access", (PyCFunction)os_access, METH_VARARGS|METH_KEYWORDS, os_access__doc__}, static int -os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks); +os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, + int effective_ids, int follow_symlinks); static PyObject * os_access(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -319,7 +321,8 @@ PyDoc_STRVAR(os_chmod__doc__, {"chmod", (PyCFunction)os_chmod, METH_VARARGS|METH_KEYWORDS, os_chmod__doc__}, static PyObject * -os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int follow_symlinks); +os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, + int follow_symlinks); static PyObject * os_chmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -438,7 +441,8 @@ PyDoc_STRVAR(os_chflags__doc__, {"chflags", (PyCFunction)os_chflags, METH_VARARGS|METH_KEYWORDS, os_chflags__doc__}, static PyObject * -os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, int follow_symlinks); +os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, + int follow_symlinks); static PyObject * os_chflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -664,7 +668,8 @@ PyDoc_STRVAR(os_chown__doc__, {"chown", (PyCFunction)os_chown, METH_VARARGS|METH_KEYWORDS, os_chown__doc__}, static PyObject * -os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks); +os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, + int dir_fd, int follow_symlinks); static PyObject * os_chown(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -829,7 +834,8 @@ PyDoc_STRVAR(os_link__doc__, {"link", (PyCFunction)os_link, METH_VARARGS|METH_KEYWORDS, os_link__doc__}, static PyObject * -os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks); +os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, + int dst_dir_fd, int follow_symlinks); static PyObject * os_link(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -1125,7 +1131,8 @@ PyDoc_STRVAR(os_rename__doc__, {"rename", (PyCFunction)os_rename, METH_VARARGS|METH_KEYWORDS, os_rename__doc__}, static PyObject * -os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); +os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, + int dst_dir_fd); static PyObject * os_rename(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -1168,7 +1175,8 @@ PyDoc_STRVAR(os_replace__doc__, {"replace", (PyCFunction)os_replace, METH_VARARGS|METH_KEYWORDS, os_replace__doc__}, static PyObject * -os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); +os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, + int src_dir_fd, int dst_dir_fd); static PyObject * os_replace(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -1472,7 +1480,8 @@ PyDoc_STRVAR(os_utime__doc__, {"utime", (PyCFunction)os_utime, METH_VARARGS|METH_KEYWORDS, os_utime__doc__}, static PyObject * -os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks); +os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, + PyObject *ns, int dir_fd, int follow_symlinks); static PyObject * os_utime(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -1587,7 +1596,8 @@ PyDoc_STRVAR(os_execve__doc__, {"execve", (PyCFunction)os_execve, METH_VARARGS|METH_KEYWORDS, os_execve__doc__}, static PyObject * -os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, PyObject *env); +os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, + PyObject *env); static PyObject * os_execve(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -1678,7 +1688,8 @@ PyDoc_STRVAR(os_spawnve__doc__, {"spawnve", (PyCFunction)os_spawnve, METH_VARARGS, os_spawnve__doc__}, static PyObject * -os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv, PyObject *env); +os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, + PyObject *argv, PyObject *env); static PyObject * os_spawnve(PyModuleDef *module, PyObject *args) @@ -1900,7 +1911,8 @@ PyDoc_STRVAR(os_sched_setscheduler__doc__, {"sched_setscheduler", (PyCFunction)os_sched_setscheduler, METH_VARARGS, os_sched_setscheduler__doc__}, static PyObject * -os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, struct sched_param *param); +os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, + struct sched_param *param); static PyObject * os_sched_setscheduler(PyModuleDef *module, PyObject *args) @@ -1972,7 +1984,8 @@ PyDoc_STRVAR(os_sched_setparam__doc__, {"sched_setparam", (PyCFunction)os_sched_setparam, METH_VARARGS, os_sched_setparam__doc__}, static PyObject * -os_sched_setparam_impl(PyModuleDef *module, pid_t pid, struct sched_param *param); +os_sched_setparam_impl(PyModuleDef *module, pid_t pid, + struct sched_param *param); static PyObject * os_sched_setparam(PyModuleDef *module, PyObject *args) @@ -2972,7 +2985,8 @@ PyDoc_STRVAR(os_symlink__doc__, {"symlink", (PyCFunction)os_symlink, METH_VARARGS|METH_KEYWORDS, os_symlink__doc__}, static PyObject * -os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd); +os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, + int target_is_directory, int dir_fd); static PyObject * os_symlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -3194,7 +3208,8 @@ PyDoc_STRVAR(os_open__doc__, {"open", (PyCFunction)os_open, METH_VARARGS|METH_KEYWORDS, os_open__doc__}, static int -os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd); +os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, + int dir_fd); static PyObject * os_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -3756,7 +3771,8 @@ PyDoc_STRVAR(os_pwrite__doc__, {"pwrite", (PyCFunction)os_pwrite, METH_VARARGS, os_pwrite__doc__}, static Py_ssize_t -os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, Py_off_t offset); +os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, + Py_off_t offset); static PyObject * os_pwrite(PyModuleDef *module, PyObject *args) @@ -3853,7 +3869,8 @@ PyDoc_STRVAR(os_mknod__doc__, {"mknod", (PyCFunction)os_mknod, METH_VARARGS|METH_KEYWORDS, os_mknod__doc__}, static PyObject * -os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, int dir_fd); +os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, + int dir_fd); static PyObject * os_mknod(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -4077,7 +4094,8 @@ PyDoc_STRVAR(os_posix_fallocate__doc__, {"posix_fallocate", (PyCFunction)os_posix_fallocate, METH_VARARGS, os_posix_fallocate__doc__}, static PyObject * -os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length); +os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, + Py_off_t length); static PyObject * os_posix_fallocate(PyModuleDef *module, PyObject *args) @@ -4119,7 +4137,8 @@ PyDoc_STRVAR(os_posix_fadvise__doc__, {"posix_fadvise", (PyCFunction)os_posix_fadvise, METH_VARARGS, os_posix_fadvise__doc__}, static PyObject * -os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length, int advice); +os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, + Py_off_t length, int advice); static PyObject * os_posix_fadvise(PyModuleDef *module, PyObject *args) @@ -5041,7 +5060,8 @@ PyDoc_STRVAR(os_getxattr__doc__, {"getxattr", (PyCFunction)os_getxattr, METH_VARARGS|METH_KEYWORDS, os_getxattr__doc__}, static PyObject * -os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks); +os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, + int follow_symlinks); static PyObject * os_getxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -5087,7 +5107,8 @@ PyDoc_STRVAR(os_setxattr__doc__, {"setxattr", (PyCFunction)os_setxattr, METH_VARARGS|METH_KEYWORDS, os_setxattr__doc__}, static PyObject * -os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks); +os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, + Py_buffer *value, int flags, int follow_symlinks); static PyObject * os_setxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -5137,7 +5158,8 @@ PyDoc_STRVAR(os_removexattr__doc__, {"removexattr", (PyCFunction)os_removexattr, METH_VARARGS|METH_KEYWORDS, os_removexattr__doc__}, static PyObject * -os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks); +os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, + int follow_symlinks); static PyObject * os_removexattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -5363,7 +5385,8 @@ PyDoc_STRVAR(os_set_handle_inheritable__doc__, {"set_handle_inheritable", (PyCFunction)os_set_handle_inheritable, METH_VARARGS, os_set_handle_inheritable__doc__}, static PyObject * -os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, int inheritable); +os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, + int inheritable); static PyObject * os_set_handle_inheritable(PyModuleDef *module, PyObject *args) @@ -5847,4 +5870,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=22f405f79f87ba20 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0e3fb3bb5df25fea input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h index 707cc0c8c3..ba5c380ff0 100644 --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -14,7 +14,8 @@ PyDoc_STRVAR(pyexpat_xmlparser_Parse__doc__, {"Parse", (PyCFunction)pyexpat_xmlparser_Parse, METH_VARARGS, pyexpat_xmlparser_Parse__doc__}, static PyObject * -pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, int isFinal); +pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, + int isFinal); static PyObject * pyexpat_xmlparser_Parse(xmlparseobject *self, PyObject *args) @@ -119,7 +120,9 @@ PyDoc_STRVAR(pyexpat_xmlparser_ExternalEntityParserCreate__doc__, {"ExternalEntityParserCreate", (PyCFunction)pyexpat_xmlparser_ExternalEntityParserCreate, METH_VARARGS, pyexpat_xmlparser_ExternalEntityParserCreate__doc__}, static PyObject * -pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self, const char *context, const char *encoding); +pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self, + const char *context, + const char *encoding); static PyObject * pyexpat_xmlparser_ExternalEntityParserCreate(xmlparseobject *self, PyObject *args) @@ -235,7 +238,8 @@ PyDoc_STRVAR(pyexpat_ParserCreate__doc__, {"ParserCreate", (PyCFunction)pyexpat_ParserCreate, METH_VARARGS|METH_KEYWORDS, pyexpat_ParserCreate__doc__}, static PyObject * -pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, const char *namespace_separator, PyObject *intern); +pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, + const char *namespace_separator, PyObject *intern); static PyObject * pyexpat_ParserCreate(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -287,4 +291,4 @@ exit: #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=e5993de4e9dd2236 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=abdf05a21dae98c7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/unicodedata.c.h b/Modules/clinic/unicodedata.c.h index 4934e84f36..99cc36969e 100644 --- a/Modules/clinic/unicodedata.c.h +++ b/Modules/clinic/unicodedata.c.h @@ -16,7 +16,9 @@ PyDoc_STRVAR(unicodedata_UCD_decimal__doc__, {"decimal", (PyCFunction)unicodedata_UCD_decimal, METH_VARARGS, unicodedata_UCD_decimal__doc__}, static PyObject * -unicodedata_UCD_decimal_impl(PreviousDBVersion *self, PyUnicodeObject *unichr, PyObject *default_value); +unicodedata_UCD_decimal_impl(PreviousDBVersion *self, + PyUnicodeObject *unichr, + PyObject *default_value); static PyObject * unicodedata_UCD_decimal(PreviousDBVersion *self, PyObject *args) @@ -34,4 +36,4 @@ unicodedata_UCD_decimal(PreviousDBVersion *self, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=15b82651419cc823 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=33b488251c4fd143 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index 2fb4809aa9..61bcdc42f0 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -57,7 +57,8 @@ PyDoc_STRVAR(zlib_decompress__doc__, {"decompress", (PyCFunction)zlib_decompress, METH_VARARGS, zlib_decompress__doc__}, static PyObject * -zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, unsigned int bufsize); +zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, + unsigned int bufsize); static PyObject * zlib_decompress(PyModuleDef *module, PyObject *args) @@ -111,7 +112,8 @@ PyDoc_STRVAR(zlib_compressobj__doc__, {"compressobj", (PyCFunction)zlib_compressobj, METH_VARARGS|METH_KEYWORDS, zlib_compressobj__doc__}, static PyObject * -zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict); +zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, + int memLevel, int strategy, Py_buffer *zdict); static PyObject * zlib_compressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -235,7 +237,8 @@ PyDoc_STRVAR(zlib_Decompress_decompress__doc__, {"decompress", (PyCFunction)zlib_Decompress_decompress, METH_VARARGS, zlib_Decompress_decompress__doc__}, static PyObject * -zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, unsigned int max_length); +zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, + unsigned int max_length); static PyObject * zlib_Decompress_decompress(compobject *self, PyObject *args) @@ -446,4 +449,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=0743b1aa908f0b68 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6cdeb624bebfe11f input=a9049054013a1b77]*/ diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c index cabff06269..97ff07c12e 100644 --- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -146,8 +146,9 @@ code. [clinic start generated code]*/ static PyObject * -fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg) -/*[clinic end generated code: output=ad47738c118622bf input=ede70c433cccbbb2]*/ +fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, + PyObject *ob_arg, int mutate_arg) +/*[clinic end generated code: output=102faa0f7ebe2210 input=ede70c433cccbbb2]*/ { #define IOCTL_BUFSZ 1024 /* We use the unsigned non-checked 'I' format for the 'code' parameter @@ -357,8 +358,9 @@ starts. `whence` is as with fileobj.seek(), specifically: [clinic start generated code]*/ static PyObject * -fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence) -/*[clinic end generated code: output=5536df2892bf3ce9 input=9c594391de821f24]*/ +fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, + PyObject *startobj, int whence) +/*[clinic end generated code: output=31af35eba08b9af7 input=9c594391de821f24]*/ { int ret; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 23c006844e..89fb08b674 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2476,8 +2476,9 @@ It's an error to use dir_fd or follow_symlinks when specifying path as [clinic start generated code]*/ static PyObject * -os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=708c225f94fcfc8e input=099d356c306fa24a]*/ +os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, + int follow_symlinks) +/*[clinic end generated code: output=e4f7569f95d523ca input=099d356c306fa24a]*/ { return posix_do_stat("stat", path, dir_fd, follow_symlinks); } @@ -2547,8 +2548,9 @@ Note that most operations will use the effective uid/gid, therefore this [clinic start generated code]*/ static int -os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks) -/*[clinic end generated code: output=f9e734db3d88b767 input=b75a756797af45ec]*/ +os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, + int effective_ids, int follow_symlinks) +/*[clinic end generated code: output=abaa53340210088d input=b75a756797af45ec]*/ { int return_value; @@ -2775,8 +2777,9 @@ dir_fd and follow_symlinks may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=96063c976f23106a input=7f1618e5e15cc196]*/ +os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, + int follow_symlinks) +/*[clinic end generated code: output=05e7f73b1a843ba2 input=7f1618e5e15cc196]*/ { int result; @@ -2956,8 +2959,9 @@ unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * -os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, int follow_symlinks) -/*[clinic end generated code: output=9e5f9417afc20c4b input=0327e29feb876236]*/ +os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, + int follow_symlinks) +/*[clinic end generated code: output=ff2d6e73534a95b9 input=0327e29feb876236]*/ { int result; @@ -3136,8 +3140,9 @@ dir_fd and follow_symlinks may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=59a8db91897fb46c input=a61cc35574814d5d]*/ +os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, + int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=e0a4559f394dbd91 input=a61cc35574814d5d]*/ { int result; @@ -3365,8 +3370,9 @@ src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your [clinic start generated code]*/ static PyObject * -os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks) -/*[clinic end generated code: output=c0a9ded8111d2a79 input=b0095ebbcbaa7e04]*/ +os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, + int dst_dir_fd, int follow_symlinks) +/*[clinic end generated code: output=f47a7e88f7b391b6 input=b0095ebbcbaa7e04]*/ { #ifdef MS_WINDOWS BOOL result; @@ -4162,8 +4168,9 @@ src_dir_fd and dst_dir_fd, may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=1bb520bf2fad186d input=faa61c847912c850]*/ +os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, + int dst_dir_fd) +/*[clinic end generated code: output=08033bb2ec27fb5f input=faa61c847912c850]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 0); } @@ -4182,8 +4189,9 @@ src_dir_fd and dst_dir_fd, may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=aa9ddad55fdef8e3 input=25515dfb107c8421]*/ +os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, + int src_dir_fd, int dst_dir_fd) +/*[clinic end generated code: output=131d012eed8d3b8b input=25515dfb107c8421]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 1); } @@ -4697,8 +4705,9 @@ dir_fd and follow_symlinks may not be available on your platform. [clinic start generated code]*/ static PyObject * -os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=c52d8fd0d1067f0b input=1f18c17d5941aa82]*/ +os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, + PyObject *ns, int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=31f3434e560ba2f0 input=1f18c17d5941aa82]*/ { #ifdef MS_WINDOWS HANDLE hFile; @@ -5072,8 +5081,9 @@ Execute an executable path with arguments, replacing current process. [clinic start generated code]*/ static PyObject * -os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, PyObject *env) -/*[clinic end generated code: output=7758d4f230d8aac6 input=626804fa092606d9]*/ +os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, + PyObject *env) +/*[clinic end generated code: output=181884fcdb21508e input=626804fa092606d9]*/ { char **argvlist = NULL; char **envlist; @@ -5219,8 +5229,9 @@ Execute the program specified by path in a new process. [clinic start generated code]*/ static PyObject * -os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv, PyObject *env) -/*[clinic end generated code: output=1c52955789461be8 input=02362fd937963f8f]*/ +os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, + PyObject *argv, PyObject *env) +/*[clinic end generated code: output=e7f5f0703610531f input=02362fd937963f8f]*/ { char *path_char; char **argvlist; @@ -5521,8 +5532,9 @@ param is an instance of sched_param. [clinic start generated code]*/ static PyObject * -os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, struct sched_param *param) -/*[clinic end generated code: output=97f40f8384e554b0 input=c581f9469a5327dd]*/ +os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, + struct sched_param *param) +/*[clinic end generated code: output=37053e5c528c35c9 input=c581f9469a5327dd]*/ { /* ** sched_setscheduler() returns 0 in Linux, but the previous @@ -5584,8 +5596,9 @@ param should be an instance of sched_param. [clinic start generated code]*/ static PyObject * -os_sched_setparam_impl(PyModuleDef *module, pid_t pid, struct sched_param *param) -/*[clinic end generated code: output=c6560b34395bb343 input=6b8d6dfcecdc21bd]*/ +os_sched_setparam_impl(PyModuleDef *module, pid_t pid, + struct sched_param *param) +/*[clinic end generated code: output=b7a3c589436cec9b input=6b8d6dfcecdc21bd]*/ { if (sched_setparam(pid, param)) return posix_error(); @@ -7353,8 +7366,9 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd) -/*[clinic end generated code: output=11aa03f278bb2c8a input=e820ec4472547bc3]*/ +os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, + int target_is_directory, int dir_fd) +/*[clinic end generated code: output=a01b4bcf32403ccd input=e820ec4472547bc3]*/ { #ifdef MS_WINDOWS DWORD result; @@ -7677,8 +7691,9 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ static int -os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, int dir_fd) -/*[clinic end generated code: output=c95a64f0e62f199b input=ad8623b29acd2934]*/ +os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, + int dir_fd) +/*[clinic end generated code: output=47e8cc63559f5ddd input=ad8623b29acd2934]*/ { int fd; int async_err = 0; @@ -8606,8 +8621,9 @@ current file offset. [clinic start generated code]*/ static Py_ssize_t -os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, Py_off_t offset) -/*[clinic end generated code: output=95225f3b496feaf3 input=19903f1b3dd26377]*/ +os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, + Py_off_t offset) +/*[clinic end generated code: output=93aabdb40e17d325 input=19903f1b3dd26377]*/ { Py_ssize_t size; int async_err = 0; @@ -8701,8 +8717,9 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, int dir_fd) -/*[clinic end generated code: output=f7f813e8847de12f input=ee44531551a4d83b]*/ +os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, + int dir_fd) +/*[clinic end generated code: output=5151a8a9f754d272 input=ee44531551a4d83b]*/ { int result; int async_err = 0; @@ -8897,8 +8914,9 @@ starting at offset bytes from the beginning and continuing for length bytes. [clinic start generated code]*/ static PyObject * -os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length) -/*[clinic end generated code: output=8ae5f7837004d454 input=d7a2ef0ab2ca52fb]*/ +os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, + Py_off_t length) +/*[clinic end generated code: output=7f6f87a8c751e1b4 input=d7a2ef0ab2ca52fb]*/ { int result; int async_err = 0; @@ -8938,8 +8956,9 @@ POSIX_FADV_DONTNEED. [clinic start generated code]*/ static PyObject * -os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, Py_off_t length, int advice) -/*[clinic end generated code: output=0e3f09f651661257 input=0fbe554edc2f04b5]*/ +os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, + Py_off_t length, int advice) +/*[clinic end generated code: output=457ce6a67189e10d input=0fbe554edc2f04b5]*/ { int result; int async_err = 0; @@ -10785,8 +10804,9 @@ If follow_symlinks is False, and the last element of the path is a symbolic [clinic start generated code]*/ static PyObject * -os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=d90086b314859f8b input=8c8ea3bab78d89c2]*/ +os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, + int follow_symlinks) +/*[clinic end generated code: output=cf2cede74bd5d412 input=8c8ea3bab78d89c2]*/ { Py_ssize_t i; PyObject *buffer = NULL; @@ -10856,8 +10876,9 @@ If follow_symlinks is False, and the last element of the path is a symbolic [clinic start generated code]*/ static PyObject * -os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks) -/*[clinic end generated code: output=e3defa5c4b1ad0ae input=f0d26833992015c2]*/ +os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, + Py_buffer *value, int flags, int follow_symlinks) +/*[clinic end generated code: output=1b395ef82880fea0 input=f0d26833992015c2]*/ { ssize_t result; @@ -10903,8 +10924,9 @@ If follow_symlinks is False, and the last element of the path is a symbolic [clinic start generated code]*/ static PyObject * -os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=4870ec90249af875 input=cdb54834161e3329]*/ +os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, + int follow_symlinks) +/*[clinic end generated code: output=f92bb39ab992650d input=cdb54834161e3329]*/ { ssize_t result; @@ -11293,8 +11315,9 @@ Set the inheritable flag of the specified handle. [clinic start generated code]*/ static PyObject * -os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, int inheritable) -/*[clinic end generated code: output=627aa5b158b69338 input=e64b2b2730469def]*/ +os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, + int inheritable) +/*[clinic end generated code: output=d2e111a96c9eb296 input=e64b2b2730469def]*/ { DWORD flags = inheritable ? HANDLE_FLAG_INHERIT : 0; if (!SetHandleInformation((HANDLE)handle, HANDLE_FLAG_INHERIT, flags)) { diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 52064a59b5..706319ec00 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -716,8 +716,9 @@ Parse XML data. [clinic start generated code]*/ static PyObject * -pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, int isFinal) -/*[clinic end generated code: output=2d4dc77f4d434854 input=e37b81b8948ca7e0]*/ +pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, + int isFinal) +/*[clinic end generated code: output=37e105d55645b0f2 input=e37b81b8948ca7e0]*/ { const char *s; Py_ssize_t slen; @@ -918,8 +919,10 @@ Create a parser for parsing an external entity based on the information passed t [clinic start generated code]*/ static PyObject * -pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self, const char *context, const char *encoding) -/*[clinic end generated code: output=942f300ed0e56054 input=283206575d960272]*/ +pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self, + const char *context, + const char *encoding) +/*[clinic end generated code: output=535cda9d7a0fbcd6 input=283206575d960272]*/ { xmlparseobject *new_parser; int i; @@ -1551,8 +1554,9 @@ Return a new XML parser object. [clinic start generated code]*/ static PyObject * -pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, const char *namespace_separator, PyObject *intern) -/*[clinic end generated code: output=b839b60992d8ce71 input=71b9f471aa6f8f86]*/ +pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, + const char *namespace_separator, PyObject *intern) +/*[clinic end generated code: output=81fccd233e1743a8 input=71b9f471aa6f8f86]*/ { PyObject *result; int intern_decref = 0; diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index e89c92d669..d6f3829426 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -133,8 +133,10 @@ not given, ValueError is raised. [clinic start generated code]*/ static PyObject * -unicodedata_UCD_decimal_impl(PreviousDBVersion *self, PyUnicodeObject *unichr, PyObject *default_value) -/*[clinic end generated code: output=d285215533b58b28 input=c25c9d2b4de076b1]*/ +unicodedata_UCD_decimal_impl(PreviousDBVersion *self, + PyUnicodeObject *unichr, + PyObject *default_value) +/*[clinic end generated code: output=bf853108f246ba19 input=c25c9d2b4de076b1]*/ { int have_old = 0; long rc; diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 768c4510d6..1997b40d18 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -280,8 +280,9 @@ Returns a bytes object containing the uncompressed data. [clinic start generated code]*/ static PyObject * -zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, unsigned int bufsize) -/*[clinic end generated code: output=9e5464e72df9cb5f input=0f4b9abb7103f50e]*/ +zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, + unsigned int bufsize) +/*[clinic end generated code: output=444d0987f3429574 input=0f4b9abb7103f50e]*/ { PyObject *result_str = NULL; Byte *input; @@ -410,8 +411,9 @@ Return a compressor object. [clinic start generated code]*/ static PyObject * -zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict) -/*[clinic end generated code: output=89e5a6c1449caa9e input=b034847f8821f6af]*/ +zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, + int memLevel, int strategy, Py_buffer *zdict) +/*[clinic end generated code: output=2949bbb9a5723ccd input=b034847f8821f6af]*/ { compobject *self = NULL; int err; @@ -703,8 +705,9 @@ Call the flush() method to clear these buffers. [clinic start generated code]*/ static PyObject * -zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, unsigned int max_length) -/*[clinic end generated code: output=755cccc9087bfe55 input=02cfc047377cec86]*/ +zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, + unsigned int max_length) +/*[clinic end generated code: output=b82e2a2c19f5fe7b input=02cfc047377cec86]*/ { int err; unsigned int old_length, length = DEF_BUF_SIZE; -- cgit v1.2.1 From 616025bf96db445b9ffcc27534d8b81c1e16d7ca Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 15 Apr 2015 18:06:05 -0400 Subject: Issue #4254: Adds _curses.update_lines_cols() Patch by Arnon Yaari --- Modules/_cursesmodule.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Modules') diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 54c724ba5f..d64bdc74e9 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -2866,6 +2866,13 @@ update_lines_cols(void) Py_DECREF(m); return 1; } + +static PyObject * +PyCurses_update_lines_cols(PyObject *self) +{ + return PyLong_FromLong((long) update_lines_cols()); +} + #endif #ifdef HAVE_CURSES_RESIZETERM @@ -3268,6 +3275,9 @@ static PyMethodDef PyCurses_methods[] = { {"typeahead", (PyCFunction)PyCurses_TypeAhead, METH_VARARGS}, {"unctrl", (PyCFunction)PyCurses_UnCtrl, METH_VARARGS}, {"ungetch", (PyCFunction)PyCurses_UngetCh, METH_VARARGS}, +#if defined(HAVE_CURSES_RESIZETERM) || defined(HAVE_CURSES_RESIZE_TERM) + {"update_lines_cols", (PyCFunction)PyCurses_update_lines_cols, METH_NOARGS}, +#endif #ifdef HAVE_NCURSESW {"unget_wch", (PyCFunction)PyCurses_Unget_Wch, METH_VARARGS}, #endif -- cgit v1.2.1 From b4cbe01f7052efafa91ea6115a9a231d9b5e4279 Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Wed, 15 Apr 2015 23:02:12 -0400 Subject: Issue #23935: Argument Clinic's understanding of format units accepting bytes, bytearrays, and buffers is now consistent with both the documentation and the implementation. --- Modules/_dbmmodule.c | 4 ++-- Modules/arraymodule.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index bcdea1ddf9..b815e97fd5 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -272,7 +272,7 @@ dbm.dbm.get self: dbmobject - key: str(length=True) + key: str(types={'str', 'robuffer'}, length=True) default: object = None / @@ -282,7 +282,7 @@ Return the value for key if present, otherwise default. static PyObject * dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, PyObject *default_value) -/*[clinic end generated code: output=4f5c0e523eaf1251 input=aecf5efd2f2b1a3b]*/ +/*[clinic end generated code: output=4f5c0e523eaf1251 input=f81478bc211895ef]*/ { datum dbm_key, val; diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 49f837c91c..4704490558 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1600,7 +1600,7 @@ frombytes(arrayobject *self, Py_buffer *buffer) /*[clinic input] array.array.fromstring - buffer: Py_buffer(types='str bytes bytearray buffer') + buffer: Py_buffer(types={'str', 'buffer'}) / Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method). @@ -1610,7 +1610,7 @@ This method is deprecated. Use frombytes instead. static PyObject * array_array_fromstring_impl(arrayobject *self, Py_buffer *buffer) -/*[clinic end generated code: output=31c4baa779df84ce input=1302d94c97696b84]*/ +/*[clinic end generated code: output=31c4baa779df84ce input=fdde1a56cbe2b05b]*/ { if (PyErr_WarnEx(PyExc_DeprecationWarning, "fromstring() is deprecated. Use frombytes() instead.", 2) != 0) @@ -1929,7 +1929,7 @@ make_array(PyTypeObject *arraytype, char typecode, PyObject *items) array._array_reconstructor arraytype: object(type="PyTypeObject *") - typecode: int(types='str') + typecode: int(types={'str'}) mformat_code: int(type="enum machine_format_code") items: object / @@ -1942,7 +1942,7 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items) -/*[clinic end generated code: output=6ecbf0e8e4d92ab9 input=f72492708c0a1d50]*/ +/*[clinic end generated code: output=6ecbf0e8e4d92ab9 input=a9ae223306d7b262]*/ { PyObject *converted_items; PyObject *result; -- cgit v1.2.1 From 518540be31f07ac3fb6f575c4e56a72a31475f54 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 16 Apr 2015 11:19:43 +0300 Subject: Issue #20175: Converted the _io module to Argument Clinic. --- Modules/_io/_iomodule.c | 278 +++++----- Modules/_io/bufferedio.c | 1007 +++++++++++++++++++------------------ Modules/_io/bytesio.c | 427 +++++++++------- Modules/_io/clinic/_iomodule.c.h | 160 ++++++ Modules/_io/clinic/bufferedio.c.h | 474 +++++++++++++++++ Modules/_io/clinic/bytesio.c.h | 426 ++++++++++++++++ Modules/_io/clinic/fileio.c.h | 374 ++++++++++++++ Modules/_io/clinic/iobase.c.h | 282 +++++++++++ Modules/_io/clinic/stringio.c.h | 288 +++++++++++ Modules/_io/clinic/textio.c.h | 464 +++++++++++++++++ Modules/_io/fileio.c | 359 +++++++------ Modules/_io/iobase.c | 248 +++++---- Modules/_io/stringio.c | 269 ++++++---- Modules/_io/textio.c | 476 +++++++++++------- 14 files changed, 4177 insertions(+), 1355 deletions(-) create mode 100644 Modules/_io/clinic/_iomodule.c.h create mode 100644 Modules/_io/clinic/bufferedio.c.h create mode 100644 Modules/_io/clinic/bytesio.c.h create mode 100644 Modules/_io/clinic/fileio.c.h create mode 100644 Modules/_io/clinic/iobase.c.h create mode 100644 Modules/_io/clinic/stringio.c.h create mode 100644 Modules/_io/clinic/textio.c.h (limited to 'Modules') diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index e70c4b7611..ea727f25c5 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -93,140 +93,145 @@ PyDoc_STRVAR(module_doc, /* * The main open() function */ -PyDoc_STRVAR(open_doc, -"open(file, mode='r', buffering=-1, encoding=None,\n" -" errors=None, newline=None, closefd=True, opener=None) -> file object\n" -"\n" -"Open file and return a stream. Raise IOError upon failure.\n" -"\n" -"file is either a text or byte string giving the name (and the path\n" -"if the file isn't in the current working directory) of the file to\n" -"be opened or an integer file descriptor of the file to be\n" -"wrapped. (If a file descriptor is given, it is closed when the\n" -"returned I/O object is closed, unless closefd is set to False.)\n" -"\n" -"mode is an optional string that specifies the mode in which the file\n" -"is opened. It defaults to 'r' which means open for reading in text\n" -"mode. Other common values are 'w' for writing (truncating the file if\n" -"it already exists), 'x' for creating and writing to a new file, and\n" -"'a' for appending (which on some Unix systems, means that all writes\n" -"append to the end of the file regardless of the current seek position).\n" -"In text mode, if encoding is not specified the encoding used is platform\n" -"dependent: locale.getpreferredencoding(False) is called to get the\n" -"current locale encoding. (For reading and writing raw bytes use binary\n" -"mode and leave encoding unspecified.) The available modes are:\n" -"\n" -"========= ===============================================================\n" -"Character Meaning\n" -"--------- ---------------------------------------------------------------\n" -"'r' open for reading (default)\n" -"'w' open for writing, truncating the file first\n" -"'x' create a new file and open it for writing\n" -"'a' open for writing, appending to the end of the file if it exists\n" -"'b' binary mode\n" -"'t' text mode (default)\n" -"'+' open a disk file for updating (reading and writing)\n" -"'U' universal newline mode (deprecated)\n" -"========= ===============================================================\n" -"\n" -"The default mode is 'rt' (open for reading text). For binary random\n" -"access, the mode 'w+b' opens and truncates the file to 0 bytes, while\n" -"'r+b' opens the file without truncation. The 'x' mode implies 'w' and\n" -"raises an `FileExistsError` if the file already exists.\n" -"\n" -"Python distinguishes between files opened in binary and text modes,\n" -"even when the underlying operating system doesn't. Files opened in\n" -"binary mode (appending 'b' to the mode argument) return contents as\n" -"bytes objects without any decoding. In text mode (the default, or when\n" -"'t' is appended to the mode argument), the contents of the file are\n" -"returned as strings, the bytes having been first decoded using a\n" -"platform-dependent encoding or using the specified encoding if given.\n" -"\n" -"'U' mode is deprecated and will raise an exception in future versions\n" -"of Python. It has no effect in Python 3. Use newline to control\n" -"universal newlines mode.\n" -"\n" -"buffering is an optional integer used to set the buffering policy.\n" -"Pass 0 to switch buffering off (only allowed in binary mode), 1 to select\n" -"line buffering (only usable in text mode), and an integer > 1 to indicate\n" -"the size of a fixed-size chunk buffer. When no buffering argument is\n" -"given, the default buffering policy works as follows:\n" -"\n" -"* Binary files are buffered in fixed-size chunks; the size of the buffer\n" -" is chosen using a heuristic trying to determine the underlying device's\n" -" \"block size\" and falling back on `io.DEFAULT_BUFFER_SIZE`.\n" -" On many systems, the buffer will typically be 4096 or 8192 bytes long.\n" -"\n" -"* \"Interactive\" text files (files for which isatty() returns True)\n" -" use line buffering. Other text files use the policy described above\n" -" for binary files.\n" -"\n" -"encoding is the name of the encoding used to decode or encode the\n" -"file. This should only be used in text mode. The default encoding is\n" -"platform dependent, but any encoding supported by Python can be\n" -"passed. See the codecs module for the list of supported encodings.\n" -"\n" -"errors is an optional string that specifies how encoding errors are to\n" -"be handled---this argument should not be used in binary mode. Pass\n" -"'strict' to raise a ValueError exception if there is an encoding error\n" -"(the default of None has the same effect), or pass 'ignore' to ignore\n" -"errors. (Note that ignoring encoding errors can lead to data loss.)\n" -"See the documentation for codecs.register or run 'help(codecs.Codec)'\n" -"for a list of the permitted encoding error strings.\n" -"\n" -"newline controls how universal newlines works (it only applies to text\n" -"mode). It can be None, '', '\\n', '\\r', and '\\r\\n'. It works as\n" -"follows:\n" -"\n" -"* On input, if newline is None, universal newlines mode is\n" -" enabled. Lines in the input can end in '\\n', '\\r', or '\\r\\n', and\n" -" these are translated into '\\n' before being returned to the\n" -" caller. If it is '', universal newline mode is enabled, but line\n" -" endings are returned to the caller untranslated. If it has any of\n" -" the other legal values, input lines are only terminated by the given\n" -" string, and the line ending is returned to the caller untranslated.\n" -"\n" -"* On output, if newline is None, any '\\n' characters written are\n" -" translated to the system default line separator, os.linesep. If\n" -" newline is '' or '\\n', no translation takes place. If newline is any\n" -" of the other legal values, any '\\n' characters written are translated\n" -" to the given string.\n" -"\n" -"If closefd is False, the underlying file descriptor will be kept open\n" -"when the file is closed. This does not work when a file name is given\n" -"and must be True in that case.\n" -"\n" -"A custom opener can be used by passing a callable as *opener*. The\n" -"underlying file descriptor for the file object is then obtained by\n" -"calling *opener* with (*file*, *flags*). *opener* must return an open\n" -"file descriptor (passing os.open as *opener* results in functionality\n" -"similar to passing None).\n" -"\n" -"open() returns a file object whose type depends on the mode, and\n" -"through which the standard file operations such as reading and writing\n" -"are performed. When open() is used to open a file in a text mode ('w',\n" -"'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open\n" -"a file in a binary mode, the returned class varies: in read binary\n" -"mode, it returns a BufferedReader; in write binary and append binary\n" -"modes, it returns a BufferedWriter, and in read/write mode, it returns\n" -"a BufferedRandom.\n" -"\n" -"It is also possible to use a string or bytearray as a file for both\n" -"reading and writing. For strings StringIO can be used like a file\n" -"opened in a text mode, and for bytes a BytesIO can be used like a file\n" -"opened in a binary mode.\n" - ); +/*[clinic input] +module _io + +_io.open + file: object + mode: str = "r" + buffering: int = -1 + encoding: str(nullable=True) = NULL + errors: str(nullable=True) = NULL + newline: str(nullable=True) = NULL + closefd: int(c_default="1") = True + opener: object = None + +Open file and return a stream. Raise IOError upon failure. + +file is either a text or byte string giving the name (and the path +if the file isn't in the current working directory) of the file to +be opened or an integer file descriptor of the file to be +wrapped. (If a file descriptor is given, it is closed when the +returned I/O object is closed, unless closefd is set to False.) + +mode is an optional string that specifies the mode in which the file +is opened. It defaults to 'r' which means open for reading in text +mode. Other common values are 'w' for writing (truncating the file if +it already exists), 'x' for creating and writing to a new file, and +'a' for appending (which on some Unix systems, means that all writes +append to the end of the file regardless of the current seek position). +In text mode, if encoding is not specified the encoding used is platform +dependent: locale.getpreferredencoding(False) is called to get the +current locale encoding. (For reading and writing raw bytes use binary +mode and leave encoding unspecified.) The available modes are: + +========= =============================================================== +Character Meaning +--------- --------------------------------------------------------------- +'r' open for reading (default) +'w' open for writing, truncating the file first +'x' create a new file and open it for writing +'a' open for writing, appending to the end of the file if it exists +'b' binary mode +'t' text mode (default) +'+' open a disk file for updating (reading and writing) +'U' universal newline mode (deprecated) +========= =============================================================== + +The default mode is 'rt' (open for reading text). For binary random +access, the mode 'w+b' opens and truncates the file to 0 bytes, while +'r+b' opens the file without truncation. The 'x' mode implies 'w' and +raises an `FileExistsError` if the file already exists. + +Python distinguishes between files opened in binary and text modes, +even when the underlying operating system doesn't. Files opened in +binary mode (appending 'b' to the mode argument) return contents as +bytes objects without any decoding. In text mode (the default, or when +'t' is appended to the mode argument), the contents of the file are +returned as strings, the bytes having been first decoded using a +platform-dependent encoding or using the specified encoding if given. + +'U' mode is deprecated and will raise an exception in future versions +of Python. It has no effect in Python 3. Use newline to control +universal newlines mode. + +buffering is an optional integer used to set the buffering policy. +Pass 0 to switch buffering off (only allowed in binary mode), 1 to select +line buffering (only usable in text mode), and an integer > 1 to indicate +the size of a fixed-size chunk buffer. When no buffering argument is +given, the default buffering policy works as follows: + +* Binary files are buffered in fixed-size chunks; the size of the buffer + is chosen using a heuristic trying to determine the underlying device's + "block size" and falling back on `io.DEFAULT_BUFFER_SIZE`. + On many systems, the buffer will typically be 4096 or 8192 bytes long. + +* "Interactive" text files (files for which isatty() returns True) + use line buffering. Other text files use the policy described above + for binary files. + +encoding is the name of the encoding used to decode or encode the +file. This should only be used in text mode. The default encoding is +platform dependent, but any encoding supported by Python can be +passed. See the codecs module for the list of supported encodings. + +errors is an optional string that specifies how encoding errors are to +be handled---this argument should not be used in binary mode. Pass +'strict' to raise a ValueError exception if there is an encoding error +(the default of None has the same effect), or pass 'ignore' to ignore +errors. (Note that ignoring encoding errors can lead to data loss.) +See the documentation for codecs.register or run 'help(codecs.Codec)' +for a list of the permitted encoding error strings. + +newline controls how universal newlines works (it only applies to text +mode). It can be None, '', '\n', '\r', and '\r\n'. It works as +follows: + +* On input, if newline is None, universal newlines mode is + enabled. Lines in the input can end in '\n', '\r', or '\r\n', and + these are translated into '\n' before being returned to the + caller. If it is '', universal newline mode is enabled, but line + endings are returned to the caller untranslated. If it has any of + the other legal values, input lines are only terminated by the given + string, and the line ending is returned to the caller untranslated. + +* On output, if newline is None, any '\n' characters written are + translated to the system default line separator, os.linesep. If + newline is '' or '\n', no translation takes place. If newline is any + of the other legal values, any '\n' characters written are translated + to the given string. + +If closefd is False, the underlying file descriptor will be kept open +when the file is closed. This does not work when a file name is given +and must be True in that case. + +A custom opener can be used by passing a callable as *opener*. The +underlying file descriptor for the file object is then obtained by +calling *opener* with (*file*, *flags*). *opener* must return an open +file descriptor (passing os.open as *opener* results in functionality +similar to passing None). + +open() returns a file object whose type depends on the mode, and +through which the standard file operations such as reading and writing +are performed. When open() is used to open a file in a text mode ('w', +'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open +a file in a binary mode, the returned class varies: in read binary +mode, it returns a BufferedReader; in write binary and append binary +modes, it returns a BufferedWriter, and in read/write mode, it returns +a BufferedRandom. + +It is also possible to use a string or bytearray as a file for both +reading and writing. For strings StringIO can be used like a file +opened in a text mode, and for bytes a BytesIO can be used like a file +opened in a binary mode. +[clinic start generated code]*/ static PyObject * -io_open(PyObject *self, PyObject *args, PyObject *kwds) +_io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, + int buffering, const char *encoding, const char *errors, + const char *newline, int closefd, PyObject *opener) +/*[clinic end generated code: output=7615d0d746eb14d2 input=0541ce15691a82f2]*/ { - char *kwlist[] = {"file", "mode", "buffering", - "encoding", "errors", "newline", - "closefd", "opener", NULL}; - PyObject *file, *opener = Py_None; - char *mode = "r"; - int buffering = -1, closefd = 1; - char *encoding = NULL, *errors = NULL, *newline = NULL; unsigned i; int creating = 0, reading = 0, writing = 0, appending = 0, updating = 0; @@ -242,13 +247,6 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds) _Py_IDENTIFIER(mode); _Py_IDENTIFIER(close); - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|sizzziO:open", kwlist, - &file, &mode, &buffering, - &encoding, &errors, &newline, - &closefd, &opener)) { - return NULL; - } - if (!PyUnicode_Check(file) && !PyBytes_Check(file) && !PyNumber_Check(file)) { @@ -611,8 +609,10 @@ iomodule_free(PyObject *mod) { * Module definition */ +#include "clinic/_iomodule.c.h" + static PyMethodDef module_methods[] = { - {"open", (PyCFunction)io_open, METH_VARARGS|METH_KEYWORDS, open_doc}, + _IO_OPEN_METHODDEF {NULL, NULL} }; diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 7cf5ddaf00..916353bdf7 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -13,6 +13,24 @@ #include "pythread.h" #include "_iomodule.h" +/*[clinic input] +module _io +class _io._BufferedIOBase "PyObject *" "&PyBufferedIOBase_Type" +class _io._Buffered "buffered *" "&PyBufferedIOBase_Type" +class _io.BufferedReader "buffered *" "&PyBufferedReader_Type" +class _io.BufferedWriter "buffered *" "&PyBufferedWriter_Type" +class _io.BufferedRWPair "rwpair *" "&PyBufferedRWPair_Type" +class _io.BufferedRandom "buffered *" "&PyBufferedRandom_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=59460b9c5639984d]*/ + +/*[python input] +class io_ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = '_PyIO_ConvertSsize_t' +[python start generated code]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=d0a811d3cbfd1b33]*/ + _Py_IDENTIFIER(close); _Py_IDENTIFIER(_dealloc_warn); _Py_IDENTIFIER(flush); @@ -48,61 +66,63 @@ PyDoc_STRVAR(bufferediobase_doc, ); static PyObject * -_bufferediobase_readinto_generic(PyObject *self, PyObject *args, char readinto1) +_bufferediobase_readinto_generic(PyObject *self, Py_buffer *buffer, char readinto1) { - Py_buffer buf; Py_ssize_t len; PyObject *data; - if (!PyArg_ParseTuple(args, - readinto1 ? "w*:readinto1" : "w*:readinto", - &buf)) { - return NULL; - } - data = _PyObject_CallMethodId(self, readinto1 ? &PyId_read1 : &PyId_read, - "n", buf.len); + "n", buffer->len); if (data == NULL) - goto error; + return NULL; if (!PyBytes_Check(data)) { Py_DECREF(data); PyErr_SetString(PyExc_TypeError, "read() should return bytes"); - goto error; + return NULL; } len = Py_SIZE(data); - if (len > buf.len) { + if (len > buffer->len) { PyErr_Format(PyExc_ValueError, "read() returned too much data: " "%zd bytes requested, %zd returned", - buf.len, len); + buffer->len, len); Py_DECREF(data); - goto error; + return NULL; } - memcpy(buf.buf, PyBytes_AS_STRING(data), len); + memcpy(buffer->buf, PyBytes_AS_STRING(data), len); - PyBuffer_Release(&buf); Py_DECREF(data); return PyLong_FromSsize_t(len); - - error: - PyBuffer_Release(&buf); - return NULL; } +/*[clinic input] +_io._BufferedIOBase.readinto + buffer: Py_buffer(types={'rwbuffer'}) + / +[clinic start generated code]*/ + static PyObject * -bufferediobase_readinto(PyObject *self, PyObject *args) +_io__BufferedIOBase_readinto_impl(PyObject *self, Py_buffer *buffer) +/*[clinic end generated code: output=8c8cda6684af8038 input=f8242a06c21763a0]*/ { - return _bufferediobase_readinto_generic(self, args, 0); + return _bufferediobase_readinto_generic(self, buffer, 0); } +/*[clinic input] +_io._BufferedIOBase.readinto1 + buffer: Py_buffer(types={'rwbuffer'}) + / +[clinic start generated code]*/ + static PyObject * -bufferediobase_readinto1(PyObject *self, PyObject *args) +_io__BufferedIOBase_readinto1_impl(PyObject *self, Py_buffer *buffer) +/*[clinic end generated code: output=358623e4fd2b69d3 input=2003e706c730bd21]*/ { - return _bufferediobase_readinto_generic(self, args, 1); + return _bufferediobase_readinto_generic(self, buffer, 1); } static PyObject * @@ -114,14 +134,18 @@ bufferediobase_unsupported(const char *message) return NULL; } -PyDoc_STRVAR(bufferediobase_detach_doc, - "Disconnect this buffer from its underlying raw stream and return it.\n" - "\n" - "After the raw stream has been detached, the buffer is in an unusable\n" - "state.\n"); +/*[clinic input] +_io._BufferedIOBase.detach + +Disconnect this buffer from its underlying raw stream and return it. + +After the raw stream has been detached, the buffer is in an unusable +state. +[clinic start generated code]*/ static PyObject * -bufferediobase_detach(PyObject *self) +_io__BufferedIOBase_detach_impl(PyObject *self) +/*[clinic end generated code: output=754977c8d10ed88c input=822427fb58fe4169]*/ { return bufferediobase_unsupported("detach"); } @@ -179,69 +203,6 @@ bufferediobase_write(PyObject *self, PyObject *args) } -static PyMethodDef bufferediobase_methods[] = { - {"detach", (PyCFunction)bufferediobase_detach, METH_NOARGS, bufferediobase_detach_doc}, - {"read", bufferediobase_read, METH_VARARGS, bufferediobase_read_doc}, - {"read1", bufferediobase_read1, METH_VARARGS, bufferediobase_read1_doc}, - {"readinto", bufferediobase_readinto, METH_VARARGS, NULL}, - {"readinto1", bufferediobase_readinto1, METH_VARARGS, NULL}, - {"write", bufferediobase_write, METH_VARARGS, bufferediobase_write_doc}, - {NULL, NULL} -}; - -PyTypeObject PyBufferedIOBase_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "_io._BufferedIOBase", /*tp_name*/ - 0, /*tp_basicsize*/ - 0, /*tp_itemsize*/ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare */ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE - | Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ - bufferediobase_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - bufferediobase_methods, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - &PyIOBase_Type, /* 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 */ - 0, /* tp_del */ - 0, /* tp_version_tag */ - 0, /* tp_finalize */ -}; - - typedef struct { PyObject_HEAD @@ -896,17 +857,20 @@ buffered_flush(buffered *self, PyObject *args) return res; } +/*[clinic input] +_io._Buffered.peek + size: Py_ssize_t = 0 + / + +[clinic start generated code]*/ + static PyObject * -buffered_peek(buffered *self, PyObject *args) +_io__Buffered_peek_impl(buffered *self, Py_ssize_t size) +/*[clinic end generated code: output=ba7a097ca230102b input=37ffb97d06ff4adb]*/ { - Py_ssize_t n = 0; PyObject *res = NULL; CHECK_INITIALIZED(self) - if (!PyArg_ParseTuple(args, "|n:peek", &n)) { - return NULL; - } - if (!ENTER_BUFFERED(self)) return NULL; @@ -923,16 +887,19 @@ end: return res; } +/*[clinic input] +_io._Buffered.read + size as n: io_ssize_t = -1 + / +[clinic start generated code]*/ + static PyObject * -buffered_read(buffered *self, PyObject *args) +_io__Buffered_read_impl(buffered *self, Py_ssize_t n) +/*[clinic end generated code: output=f41c78bb15b9bbe9 input=c0939ec7f9e9354f]*/ { - Py_ssize_t n = -1; PyObject *res; CHECK_INITIALIZED(self) - if (!PyArg_ParseTuple(args, "|O&:read", &_PyIO_ConvertSsize_t, &n)) { - return NULL; - } if (n < -1) { PyErr_SetString(PyExc_ValueError, "read length must be positive or -1"); @@ -961,17 +928,20 @@ buffered_read(buffered *self, PyObject *args) return res; } +/*[clinic input] +_io._Buffered.read1 + size as n: Py_ssize_t + / +[clinic start generated code]*/ + static PyObject * -buffered_read1(buffered *self, PyObject *args) +_io__Buffered_read1_impl(buffered *self, Py_ssize_t n) +/*[clinic end generated code: output=bcc4fb4e54d103a3 input=8d2869c18b983184]*/ { - Py_ssize_t n, have, r; + Py_ssize_t have, r; PyObject *res = NULL; CHECK_INITIALIZED(self) - if (!PyArg_ParseTuple(args, "n:read1", &n)) { - return NULL; - } - if (n < 0) { PyErr_SetString(PyExc_ValueError, "read length must be positive"); @@ -1012,34 +982,27 @@ buffered_read1(buffered *self, PyObject *args) } static PyObject * -_buffered_readinto_generic(buffered *self, PyObject *args, char readinto1) +_buffered_readinto_generic(buffered *self, Py_buffer *buffer, char readinto1) { - Py_buffer buf; Py_ssize_t n, written = 0, remaining; PyObject *res = NULL; CHECK_INITIALIZED(self) - if (!PyArg_ParseTuple(args, - readinto1 ? "w*:readinto1" : "w*:readinto", - &buf)) - return NULL; - n = Py_SAFE_DOWNCAST(READAHEAD(self), Py_off_t, Py_ssize_t); if (n > 0) { - if (n >= buf.len) { - memcpy(buf.buf, self->buffer + self->pos, buf.len); - self->pos += buf.len; - res = PyLong_FromSsize_t(buf.len); - goto end_unlocked; + if (n >= buffer->len) { + memcpy(buffer->buf, self->buffer + self->pos, buffer->len); + self->pos += buffer->len; + return PyLong_FromSsize_t(buffer->len); } - memcpy(buf.buf, self->buffer + self->pos, n); + memcpy(buffer->buf, self->buffer + self->pos, n); self->pos += n; written = n; } if (!ENTER_BUFFERED(self)) - goto end_unlocked; + return NULL; if (self->writable) { res = buffered_flush_and_rewind_unlocked(self); @@ -1051,13 +1014,13 @@ _buffered_readinto_generic(buffered *self, PyObject *args, char readinto1) _bufferedreader_reset_buf(self); self->pos = 0; - for (remaining = buf.len - written; + for (remaining = buffer->len - written; remaining > 0; written += n, remaining -= n) { /* If remaining bytes is larger than internal buffer size, copy * directly into caller's buffer. */ if (remaining > self->buffer_size) { - n = _bufferedreader_raw_read(self, (char *) buf.buf + written, + n = _bufferedreader_raw_read(self, (char *) buffer->buf + written, remaining); } @@ -1068,7 +1031,7 @@ _buffered_readinto_generic(buffered *self, PyObject *args, char readinto1) if (n > 0) { if (n > remaining) n = remaining; - memcpy((char *) buf.buf + written, + memcpy((char *) buffer->buf + written, self->buffer + self->pos, n); self->pos += n; continue; /* short circuit */ @@ -1097,21 +1060,33 @@ _buffered_readinto_generic(buffered *self, PyObject *args, char readinto1) end: LEAVE_BUFFERED(self); -end_unlocked: - PyBuffer_Release(&buf); return res; } +/*[clinic input] +_io._Buffered.readinto + buffer: Py_buffer(types={'rwbuffer'}) + / +[clinic start generated code]*/ + static PyObject * -buffered_readinto(buffered *self, PyObject *args) +_io__Buffered_readinto_impl(buffered *self, Py_buffer *buffer) +/*[clinic end generated code: output=bcb376580b1d8170 input=962b7496eac38b3a]*/ { - return _buffered_readinto_generic(self, args, 0); + return _buffered_readinto_generic(self, buffer, 0); } +/*[clinic input] +_io._Buffered.readinto1 + buffer: Py_buffer(types={'rwbuffer'}) + / +[clinic start generated code]*/ + static PyObject * -buffered_readinto1(buffered *self, PyObject *args) +_io__Buffered_readinto1_impl(buffered *self, Py_buffer *buffer) +/*[clinic end generated code: output=6e5c6ac5868205d6 input=834614d93f0adeb5]*/ { - return _buffered_readinto_generic(self, args, 1); + return _buffered_readinto_generic(self, buffer, 1); } @@ -1226,15 +1201,18 @@ end_unlocked: return res; } +/*[clinic input] +_io._Buffered.readline + size: io_ssize_t = -1 + / +[clinic start generated code]*/ + static PyObject * -buffered_readline(buffered *self, PyObject *args) +_io__Buffered_readline_impl(buffered *self, Py_ssize_t size) +/*[clinic end generated code: output=24dd2aa6e33be83c input=ff1e0df821cb4e5c]*/ { - Py_ssize_t limit = -1; - CHECK_INITIALIZED(self) - if (!PyArg_ParseTuple(args, "|O&:readline", &_PyIO_ConvertSsize_t, &limit)) - return NULL; - return _buffered_readline(self, limit); + return _buffered_readline(self, size); } @@ -1252,17 +1230,21 @@ buffered_tell(buffered *self, PyObject *args) return PyLong_FromOff_t(pos); } +/*[clinic input] +_io._Buffered.seek + target as targetobj: object + whence: int = 0 + / +[clinic start generated code]*/ + static PyObject * -buffered_seek(buffered *self, PyObject *args) +_io__Buffered_seek_impl(buffered *self, PyObject *targetobj, int whence) +/*[clinic end generated code: output=7ae0e8dc46efdefb input=a9c4920bfcba6163]*/ { Py_off_t target, n; - int whence = 0; - PyObject *targetobj, *res = NULL; + PyObject *res = NULL; CHECK_INITIALIZED(self) - if (!PyArg_ParseTuple(args, "O|i:seek", &targetobj, &whence)) { - return NULL; - } /* Do some error checking instead of trusting OS 'seek()' ** error detection, just in case. @@ -1344,17 +1326,19 @@ end: return res; } +/*[clinic input] +_io._Buffered.truncate + pos: object = None + / +[clinic start generated code]*/ + static PyObject * -buffered_truncate(buffered *self, PyObject *args) +_io__Buffered_truncate_impl(buffered *self, PyObject *pos) +/*[clinic end generated code: output=667ca03c60c270de input=8a1be34d57cca2d3]*/ { - PyObject *pos = Py_None; PyObject *res = NULL; CHECK_INITIALIZED(self) - if (!PyArg_ParseTuple(args, "|O:truncate", &pos)) { - return NULL; - } - if (!ENTER_BUFFERED(self)) return NULL; @@ -1439,29 +1423,27 @@ buffered_repr(buffered *self) * class BufferedReader */ -PyDoc_STRVAR(bufferedreader_doc, - "Create a new buffered reader using the given readable raw IO object."); - static void _bufferedreader_reset_buf(buffered *self) { self->read_end = -1; } +/*[clinic input] +_io.BufferedReader.__init__ + raw: object + buffer_size: Py_ssize_t(c_default="DEFAULT_BUFFER_SIZE") = DEFAULT_BUFFER_SIZE + +Create a new buffered reader using the given readable raw IO object. +[clinic start generated code]*/ + static int -bufferedreader_init(buffered *self, PyObject *args, PyObject *kwds) +_io_BufferedReader___init___impl(buffered *self, PyObject *raw, + Py_ssize_t buffer_size) +/*[clinic end generated code: output=cddcfefa0ed294c4 input=fb887e06f11b4e48]*/ { - char *kwlist[] = {"raw", "buffer_size", NULL}; - Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; - PyObject *raw; - self->ok = 0; self->detached = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|n:BufferedReader", kwlist, - &raw, &buffer_size)) { - return -1; - } - if (_PyIOBase_check_readable(raw, Py_True) == NULL) return -1; @@ -1782,112 +1764,12 @@ _bufferedreader_peek_unlocked(buffered *self) self->pos = 0; return PyBytes_FromStringAndSize(self->buffer, r); } - -static PyMethodDef bufferedreader_methods[] = { - /* BufferedIOMixin methods */ - {"detach", (PyCFunction)buffered_detach, METH_NOARGS}, - {"flush", (PyCFunction)buffered_simple_flush, METH_NOARGS}, - {"close", (PyCFunction)buffered_close, METH_NOARGS}, - {"seekable", (PyCFunction)buffered_seekable, METH_NOARGS}, - {"readable", (PyCFunction)buffered_readable, METH_NOARGS}, - {"writable", (PyCFunction)buffered_writable, METH_NOARGS}, - {"fileno", (PyCFunction)buffered_fileno, METH_NOARGS}, - {"isatty", (PyCFunction)buffered_isatty, METH_NOARGS}, - {"_dealloc_warn", (PyCFunction)buffered_dealloc_warn, METH_O}, - {"__getstate__", (PyCFunction)buffered_getstate, METH_NOARGS}, - - {"read", (PyCFunction)buffered_read, METH_VARARGS}, - {"peek", (PyCFunction)buffered_peek, METH_VARARGS}, - {"read1", (PyCFunction)buffered_read1, METH_VARARGS}, - {"readinto", (PyCFunction)buffered_readinto, METH_VARARGS}, - {"readinto1", (PyCFunction)buffered_readinto1, METH_VARARGS}, - {"readline", (PyCFunction)buffered_readline, METH_VARARGS}, - {"seek", (PyCFunction)buffered_seek, METH_VARARGS}, - {"tell", (PyCFunction)buffered_tell, METH_NOARGS}, - {"truncate", (PyCFunction)buffered_truncate, METH_VARARGS}, - {"__sizeof__", (PyCFunction)buffered_sizeof, METH_NOARGS}, - {NULL, NULL} -}; - -static PyMemberDef bufferedreader_members[] = { - {"raw", T_OBJECT, offsetof(buffered, raw), READONLY}, - {"_finalizing", T_BOOL, offsetof(buffered, finalizing), 0}, - {NULL} -}; - -static PyGetSetDef bufferedreader_getset[] = { - {"closed", (getter)buffered_closed_get, NULL, NULL}, - {"name", (getter)buffered_name_get, NULL, NULL}, - {"mode", (getter)buffered_mode_get, NULL, NULL}, - {NULL} -}; - - -PyTypeObject PyBufferedReader_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "_io.BufferedReader", /*tp_name*/ - sizeof(buffered), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor)buffered_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare */ - (reprfunc)buffered_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE - | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ - bufferedreader_doc, /* tp_doc */ - (traverseproc)buffered_traverse, /* tp_traverse */ - (inquiry)buffered_clear, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(buffered, weakreflist), /*tp_weaklistoffset*/ - 0, /* tp_iter */ - (iternextfunc)buffered_iternext, /* tp_iternext */ - bufferedreader_methods, /* tp_methods */ - bufferedreader_members, /* tp_members */ - bufferedreader_getset, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - offsetof(buffered, dict), /* tp_dictoffset */ - (initproc)bufferedreader_init, /* tp_init */ - 0, /* tp_alloc */ - PyType_GenericNew, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ - 0, /* tp_del */ - 0, /* tp_version_tag */ - 0, /* tp_finalize */ -}; /* * class BufferedWriter */ -PyDoc_STRVAR(bufferedwriter_doc, - "A buffer for a writeable sequential RawIO object.\n" - "\n" - "The constructor creates a BufferedWriter for the given writeable raw\n" - "stream. If the buffer_size is not given, it defaults to\n" - "DEFAULT_BUFFER_SIZE.\n" - ); - static void _bufferedwriter_reset_buf(buffered *self) { @@ -1895,21 +1777,26 @@ _bufferedwriter_reset_buf(buffered *self) self->write_end = -1; } +/*[clinic input] +_io.BufferedWriter.__init__ + raw: object + buffer_size: Py_ssize_t(c_default="DEFAULT_BUFFER_SIZE") = DEFAULT_BUFFER_SIZE + +A buffer for a writeable sequential RawIO object. + +The constructor creates a BufferedWriter for the given writeable raw +stream. If the buffer_size is not given, it defaults to +DEFAULT_BUFFER_SIZE. +[clinic start generated code]*/ + static int -bufferedwriter_init(buffered *self, PyObject *args, PyObject *kwds) +_io_BufferedWriter___init___impl(buffered *self, PyObject *raw, + Py_ssize_t buffer_size) +/*[clinic end generated code: output=c8942a020c0dee64 input=914be9b95e16007b]*/ { - char *kwlist[] = {"raw", "buffer_size", NULL}; - Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; - PyObject *raw; - self->ok = 0; self->detached = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|n:BufferedWriter", kwlist, - &raw, &buffer_size)) { - return -1; - } - if (_PyIOBase_check_writable(raw, Py_True) == NULL) return -1; @@ -2030,29 +1917,28 @@ error: return NULL; } +/*[clinic input] +_io.BufferedWriter.write + buffer: Py_buffer + / +[clinic start generated code]*/ + static PyObject * -bufferedwriter_write(buffered *self, PyObject *args) +_io_BufferedWriter_write_impl(buffered *self, Py_buffer *buffer) +/*[clinic end generated code: output=7f8d1365759bfc6b input=dd87dd85fc7f8850]*/ { PyObject *res = NULL; - Py_buffer buf; Py_ssize_t written, avail, remaining; Py_off_t offset; CHECK_INITIALIZED(self) - if (!PyArg_ParseTuple(args, "y*:write", &buf)) { - return NULL; - } - if (IS_CLOSED(self)) { PyErr_SetString(PyExc_ValueError, "write to closed file"); - PyBuffer_Release(&buf); return NULL; } - if (!ENTER_BUFFERED(self)) { - PyBuffer_Release(&buf); + if (!ENTER_BUFFERED(self)) return NULL; - } /* Fast path: the data to write can be fully buffered. */ if (!VALID_READ_BUFFER(self) && !VALID_WRITE_BUFFER(self)) { @@ -2060,15 +1946,15 @@ bufferedwriter_write(buffered *self, PyObject *args) self->raw_pos = 0; } avail = Py_SAFE_DOWNCAST(self->buffer_size - self->pos, Py_off_t, Py_ssize_t); - if (buf.len <= avail) { - memcpy(self->buffer + self->pos, buf.buf, buf.len); + if (buffer->len <= avail) { + memcpy(self->buffer + self->pos, buffer->buf, buffer->len); if (!VALID_WRITE_BUFFER(self) || self->write_pos > self->pos) { self->write_pos = self->pos; } - ADJUST_POSITION(self, self->pos + buf.len); + ADJUST_POSITION(self, self->pos + buffer->len); if (self->pos > self->write_end) self->write_end = self->pos; - written = buf.len; + written = buffer->len; goto end; } @@ -2091,17 +1977,17 @@ bufferedwriter_write(buffered *self, PyObject *args) self->write_pos = 0; avail = Py_SAFE_DOWNCAST(self->buffer_size - self->write_end, Py_off_t, Py_ssize_t); - if (buf.len <= avail) { + if (buffer->len <= avail) { /* Everything can be buffered */ PyErr_Clear(); - memcpy(self->buffer + self->write_end, buf.buf, buf.len); - self->write_end += buf.len; - self->pos += buf.len; - written = buf.len; + memcpy(self->buffer + self->write_end, buffer->buf, buffer->len); + self->write_end += buffer->len; + self->pos += buffer->len; + written = buffer->len; goto end; } /* Buffer as much as possible. */ - memcpy(self->buffer + self->write_end, buf.buf, avail); + memcpy(self->buffer + self->write_end, buffer->buf, avail); self->write_end += avail; self->pos += avail; /* XXX Modifying the existing exception e using the pointer w @@ -2127,11 +2013,11 @@ bufferedwriter_write(buffered *self, PyObject *args) } /* Then write buf itself. At this point the buffer has been emptied. */ - remaining = buf.len; + remaining = buffer->len; written = 0; while (remaining > self->buffer_size) { Py_ssize_t n = _bufferedwriter_raw_write( - self, (char *) buf.buf + written, buf.len - written); + self, (char *) buffer->buf + written, buffer->len - written); if (n == -1) { goto error; } else if (n == -2) { @@ -2139,7 +2025,7 @@ bufferedwriter_write(buffered *self, PyObject *args) if (remaining > self->buffer_size) { /* Can't buffer everything, still buffer as much as possible */ memcpy(self->buffer, - (char *) buf.buf + written, self->buffer_size); + (char *) buffer->buf + written, self->buffer_size); self->raw_pos = 0; ADJUST_POSITION(self, self->buffer_size); self->write_end = self->buffer_size; @@ -2162,7 +2048,7 @@ bufferedwriter_write(buffered *self, PyObject *args) if (self->readable) _bufferedreader_reset_buf(self); if (remaining > 0) { - memcpy(self->buffer, (char *) buf.buf + written, remaining); + memcpy(self->buffer, (char *) buffer->buf + written, remaining); written += remaining; } self->write_pos = 0; @@ -2176,118 +2062,18 @@ end: error: LEAVE_BUFFERED(self) - PyBuffer_Release(&buf); return res; } + -static PyMethodDef bufferedwriter_methods[] = { - /* BufferedIOMixin methods */ - {"close", (PyCFunction)buffered_close, METH_NOARGS}, - {"detach", (PyCFunction)buffered_detach, METH_NOARGS}, - {"seekable", (PyCFunction)buffered_seekable, METH_NOARGS}, - {"readable", (PyCFunction)buffered_readable, METH_NOARGS}, - {"writable", (PyCFunction)buffered_writable, METH_NOARGS}, - {"fileno", (PyCFunction)buffered_fileno, METH_NOARGS}, - {"isatty", (PyCFunction)buffered_isatty, METH_NOARGS}, - {"_dealloc_warn", (PyCFunction)buffered_dealloc_warn, METH_O}, - {"__getstate__", (PyCFunction)buffered_getstate, METH_NOARGS}, - - {"write", (PyCFunction)bufferedwriter_write, METH_VARARGS}, - {"truncate", (PyCFunction)buffered_truncate, METH_VARARGS}, - {"flush", (PyCFunction)buffered_flush, METH_NOARGS}, - {"seek", (PyCFunction)buffered_seek, METH_VARARGS}, - {"tell", (PyCFunction)buffered_tell, METH_NOARGS}, - {"__sizeof__", (PyCFunction)buffered_sizeof, METH_NOARGS}, - {NULL, NULL} -}; - -static PyMemberDef bufferedwriter_members[] = { - {"raw", T_OBJECT, offsetof(buffered, raw), READONLY}, - {"_finalizing", T_BOOL, offsetof(buffered, finalizing), 0}, - {NULL} -}; -static PyGetSetDef bufferedwriter_getset[] = { - {"closed", (getter)buffered_closed_get, NULL, NULL}, - {"name", (getter)buffered_name_get, NULL, NULL}, - {"mode", (getter)buffered_mode_get, NULL, NULL}, - {NULL} -}; +/* + * BufferedRWPair + */ - -PyTypeObject PyBufferedWriter_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "_io.BufferedWriter", /*tp_name*/ - sizeof(buffered), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor)buffered_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare */ - (reprfunc)buffered_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE - | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ - bufferedwriter_doc, /* tp_doc */ - (traverseproc)buffered_traverse, /* tp_traverse */ - (inquiry)buffered_clear, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(buffered, weakreflist), /*tp_weaklistoffset*/ - 0, /* tp_iter */ - 0, /* tp_iternext */ - bufferedwriter_methods, /* tp_methods */ - bufferedwriter_members, /* tp_members */ - bufferedwriter_getset, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - offsetof(buffered, dict), /* tp_dictoffset */ - (initproc)bufferedwriter_init, /* tp_init */ - 0, /* tp_alloc */ - PyType_GenericNew, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ - 0, /* tp_del */ - 0, /* tp_version_tag */ - 0, /* tp_finalize */ -}; - - - -/* - * BufferedRWPair - */ - -PyDoc_STRVAR(bufferedrwpair_doc, - "A buffered reader and writer object together.\n" - "\n" - "A buffered reader object and buffered writer object put together to\n" - "form a sequential IO object that can read and write. This is typically\n" - "used with a socket or two-way pipe.\n" - "\n" - "reader and writer are RawIOBase objects that are readable and\n" - "writeable respectively. If the buffer_size is omitted it defaults to\n" - "DEFAULT_BUFFER_SIZE.\n" - ); - -/* XXX The usefulness of this (compared to having two separate IO objects) is - * questionable. - */ +/* XXX The usefulness of this (compared to having two separate IO objects) is + * questionable. + */ typedef struct { PyObject_HEAD @@ -2297,17 +2083,29 @@ typedef struct { PyObject *weakreflist; } rwpair; -static int -bufferedrwpair_init(rwpair *self, PyObject *args, PyObject *kwds) -{ - PyObject *reader, *writer; - Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; +/*[clinic input] +_io.BufferedRWPair.__init__ + reader: object + writer: object + buffer_size: Py_ssize_t(c_default="DEFAULT_BUFFER_SIZE") = DEFAULT_BUFFER_SIZE + / - if (!PyArg_ParseTuple(args, "OO|n:BufferedRWPair", &reader, &writer, - &buffer_size)) { - return -1; - } +A buffered reader and writer object together. +A buffered reader object and buffered writer object put together to +form a sequential IO object that can read and write. This is typically +used with a socket or two-way pipe. + +reader and writer are RawIOBase objects that are readable and +writeable respectively. If the buffer_size is omitted it defaults to +DEFAULT_BUFFER_SIZE. +[clinic start generated code]*/ + +static int +_io_BufferedRWPair___init___impl(rwpair *self, PyObject *reader, + PyObject *writer, Py_ssize_t buffer_size) +/*[clinic end generated code: output=327e73d1aee8f984 input=620d42d71f33a031]*/ +{ if (_PyIOBase_check_readable(reader, Py_True) == NULL) return -1; if (_PyIOBase_check_writable(writer, Py_True) == NULL) @@ -2472,6 +2270,306 @@ bufferedrwpair_closed_get(rwpair *self, void *context) } return PyObject_GetAttr((PyObject *) self->writer, _PyIO_str_closed); } + + + +/* + * BufferedRandom + */ + +/*[clinic input] +_io.BufferedRandom.__init__ + raw: object + buffer_size: Py_ssize_t(c_default="DEFAULT_BUFFER_SIZE") = DEFAULT_BUFFER_SIZE + +A buffered interface to random access streams. + +The constructor creates a reader and writer for a seekable stream, +raw, given in the first argument. If the buffer_size is omitted it +defaults to DEFAULT_BUFFER_SIZE. +[clinic start generated code]*/ + +static int +_io_BufferedRandom___init___impl(buffered *self, PyObject *raw, + Py_ssize_t buffer_size) +/*[clinic end generated code: output=d3d64eb0f64e64a3 input=a4e818fb86d0e50c]*/ +{ + self->ok = 0; + self->detached = 0; + + if (_PyIOBase_check_seekable(raw, Py_True) == NULL) + return -1; + if (_PyIOBase_check_readable(raw, Py_True) == NULL) + return -1; + if (_PyIOBase_check_writable(raw, Py_True) == NULL) + return -1; + + Py_CLEAR(self->raw); + Py_INCREF(raw); + self->raw = raw; + self->buffer_size = buffer_size; + self->readable = 1; + self->writable = 1; + + if (_buffered_init(self) < 0) + return -1; + _bufferedreader_reset_buf(self); + _bufferedwriter_reset_buf(self); + self->pos = 0; + + self->fast_closed_checks = (Py_TYPE(self) == &PyBufferedRandom_Type && + Py_TYPE(raw) == &PyFileIO_Type); + + self->ok = 1; + return 0; +} + +#include "clinic/bufferedio.c.h" + + +static PyMethodDef bufferediobase_methods[] = { + _IO__BUFFEREDIOBASE_DETACH_METHODDEF + {"read", bufferediobase_read, METH_VARARGS, bufferediobase_read_doc}, + {"read1", bufferediobase_read1, METH_VARARGS, bufferediobase_read1_doc}, + _IO__BUFFEREDIOBASE_READINTO_METHODDEF + _IO__BUFFEREDIOBASE_READINTO1_METHODDEF + {"write", bufferediobase_write, METH_VARARGS, bufferediobase_write_doc}, + {NULL, NULL} +}; + +PyTypeObject PyBufferedIOBase_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "_io._BufferedIOBase", /*tp_name*/ + 0, /*tp_basicsize*/ + 0, /*tp_itemsize*/ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare */ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE + | Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + bufferediobase_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + bufferediobase_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + &PyIOBase_Type, /* 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 */ + 0, /* tp_del */ + 0, /* tp_version_tag */ + 0, /* tp_finalize */ +}; + + +static PyMethodDef bufferedreader_methods[] = { + /* BufferedIOMixin methods */ + {"detach", (PyCFunction)buffered_detach, METH_NOARGS}, + {"flush", (PyCFunction)buffered_simple_flush, METH_NOARGS}, + {"close", (PyCFunction)buffered_close, METH_NOARGS}, + {"seekable", (PyCFunction)buffered_seekable, METH_NOARGS}, + {"readable", (PyCFunction)buffered_readable, METH_NOARGS}, + {"writable", (PyCFunction)buffered_writable, METH_NOARGS}, + {"fileno", (PyCFunction)buffered_fileno, METH_NOARGS}, + {"isatty", (PyCFunction)buffered_isatty, METH_NOARGS}, + {"_dealloc_warn", (PyCFunction)buffered_dealloc_warn, METH_O}, + {"__getstate__", (PyCFunction)buffered_getstate, METH_NOARGS}, + + _IO__BUFFERED_READ_METHODDEF + _IO__BUFFERED_PEEK_METHODDEF + _IO__BUFFERED_READ1_METHODDEF + _IO__BUFFERED_READINTO_METHODDEF + _IO__BUFFERED_READINTO1_METHODDEF + _IO__BUFFERED_READLINE_METHODDEF + _IO__BUFFERED_SEEK_METHODDEF + {"tell", (PyCFunction)buffered_tell, METH_NOARGS}, + _IO__BUFFERED_TRUNCATE_METHODDEF + {"__sizeof__", (PyCFunction)buffered_sizeof, METH_NOARGS}, + {NULL, NULL} +}; + +static PyMemberDef bufferedreader_members[] = { + {"raw", T_OBJECT, offsetof(buffered, raw), READONLY}, + {"_finalizing", T_BOOL, offsetof(buffered, finalizing), 0}, + {NULL} +}; + +static PyGetSetDef bufferedreader_getset[] = { + {"closed", (getter)buffered_closed_get, NULL, NULL}, + {"name", (getter)buffered_name_get, NULL, NULL}, + {"mode", (getter)buffered_mode_get, NULL, NULL}, + {NULL} +}; + + +PyTypeObject PyBufferedReader_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "_io.BufferedReader", /*tp_name*/ + sizeof(buffered), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)buffered_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare */ + (reprfunc)buffered_repr, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE + | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + _io_BufferedReader___init____doc__, /* tp_doc */ + (traverseproc)buffered_traverse, /* tp_traverse */ + (inquiry)buffered_clear, /* tp_clear */ + 0, /* tp_richcompare */ + offsetof(buffered, weakreflist), /*tp_weaklistoffset*/ + 0, /* tp_iter */ + (iternextfunc)buffered_iternext, /* tp_iternext */ + bufferedreader_methods, /* tp_methods */ + bufferedreader_members, /* tp_members */ + bufferedreader_getset, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + offsetof(buffered, dict), /* tp_dictoffset */ + _io_BufferedReader___init__, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ + 0, /* tp_del */ + 0, /* tp_version_tag */ + 0, /* tp_finalize */ +}; + + +static PyMethodDef bufferedwriter_methods[] = { + /* BufferedIOMixin methods */ + {"close", (PyCFunction)buffered_close, METH_NOARGS}, + {"detach", (PyCFunction)buffered_detach, METH_NOARGS}, + {"seekable", (PyCFunction)buffered_seekable, METH_NOARGS}, + {"readable", (PyCFunction)buffered_readable, METH_NOARGS}, + {"writable", (PyCFunction)buffered_writable, METH_NOARGS}, + {"fileno", (PyCFunction)buffered_fileno, METH_NOARGS}, + {"isatty", (PyCFunction)buffered_isatty, METH_NOARGS}, + {"_dealloc_warn", (PyCFunction)buffered_dealloc_warn, METH_O}, + {"__getstate__", (PyCFunction)buffered_getstate, METH_NOARGS}, + + _IO_BUFFEREDWRITER_WRITE_METHODDEF + _IO__BUFFERED_TRUNCATE_METHODDEF + {"flush", (PyCFunction)buffered_flush, METH_NOARGS}, + _IO__BUFFERED_SEEK_METHODDEF + {"tell", (PyCFunction)buffered_tell, METH_NOARGS}, + {"__sizeof__", (PyCFunction)buffered_sizeof, METH_NOARGS}, + {NULL, NULL} +}; + +static PyMemberDef bufferedwriter_members[] = { + {"raw", T_OBJECT, offsetof(buffered, raw), READONLY}, + {"_finalizing", T_BOOL, offsetof(buffered, finalizing), 0}, + {NULL} +}; + +static PyGetSetDef bufferedwriter_getset[] = { + {"closed", (getter)buffered_closed_get, NULL, NULL}, + {"name", (getter)buffered_name_get, NULL, NULL}, + {"mode", (getter)buffered_mode_get, NULL, NULL}, + {NULL} +}; + + +PyTypeObject PyBufferedWriter_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "_io.BufferedWriter", /*tp_name*/ + sizeof(buffered), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)buffered_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare */ + (reprfunc)buffered_repr, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE + | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + _io_BufferedWriter___init____doc__, /* tp_doc */ + (traverseproc)buffered_traverse, /* tp_traverse */ + (inquiry)buffered_clear, /* tp_clear */ + 0, /* tp_richcompare */ + offsetof(buffered, weakreflist), /*tp_weaklistoffset*/ + 0, /* tp_iter */ + 0, /* tp_iternext */ + bufferedwriter_methods, /* tp_methods */ + bufferedwriter_members, /* tp_members */ + bufferedwriter_getset, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + offsetof(buffered, dict), /* tp_dictoffset */ + _io_BufferedWriter___init__, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ + 0, /* tp_del */ + 0, /* tp_version_tag */ + 0, /* tp_finalize */ +}; + static PyMethodDef bufferedrwpair_methods[] = { {"read", (PyCFunction)bufferedrwpair_read, METH_VARARGS}, @@ -2521,7 +2619,7 @@ PyTypeObject PyBufferedRWPair_Type = { 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, /* tp_flags */ - bufferedrwpair_doc, /* tp_doc */ + _io_BufferedRWPair___init____doc__, /* tp_doc */ (traverseproc)bufferedrwpair_traverse, /* tp_traverse */ (inquiry)bufferedrwpair_clear, /* tp_clear */ 0, /* tp_richcompare */ @@ -2536,7 +2634,7 @@ PyTypeObject PyBufferedRWPair_Type = { 0, /* tp_descr_get */ 0, /* tp_descr_set */ offsetof(rwpair, dict), /* tp_dictoffset */ - (initproc)bufferedrwpair_init, /* tp_init */ + _io_BufferedRWPair___init__, /* tp_init */ 0, /* tp_alloc */ PyType_GenericNew, /* tp_new */ 0, /* tp_free */ @@ -2550,62 +2648,7 @@ PyTypeObject PyBufferedRWPair_Type = { 0, /* tp_version_tag */ 0, /* tp_finalize */ }; - - - -/* - * BufferedRandom - */ - -PyDoc_STRVAR(bufferedrandom_doc, - "A buffered interface to random access streams.\n" - "\n" - "The constructor creates a reader and writer for a seekable stream,\n" - "raw, given in the first argument. If the buffer_size is omitted it\n" - "defaults to DEFAULT_BUFFER_SIZE.\n" - ); - -static int -bufferedrandom_init(buffered *self, PyObject *args, PyObject *kwds) -{ - char *kwlist[] = {"raw", "buffer_size", NULL}; - Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; - PyObject *raw; - - self->ok = 0; - self->detached = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|n:BufferedRandom", kwlist, - &raw, &buffer_size)) { - return -1; - } - - if (_PyIOBase_check_seekable(raw, Py_True) == NULL) - return -1; - if (_PyIOBase_check_readable(raw, Py_True) == NULL) - return -1; - if (_PyIOBase_check_writable(raw, Py_True) == NULL) - return -1; - - Py_CLEAR(self->raw); - Py_INCREF(raw); - self->raw = raw; - self->buffer_size = buffer_size; - self->readable = 1; - self->writable = 1; - if (_buffered_init(self) < 0) - return -1; - _bufferedreader_reset_buf(self); - _bufferedwriter_reset_buf(self); - self->pos = 0; - - self->fast_closed_checks = (Py_TYPE(self) == &PyBufferedRandom_Type && - Py_TYPE(raw) == &PyFileIO_Type); - - self->ok = 1; - return 0; -} static PyMethodDef bufferedrandom_methods[] = { /* BufferedIOMixin methods */ @@ -2621,16 +2664,16 @@ static PyMethodDef bufferedrandom_methods[] = { {"flush", (PyCFunction)buffered_flush, METH_NOARGS}, - {"seek", (PyCFunction)buffered_seek, METH_VARARGS}, + _IO__BUFFERED_SEEK_METHODDEF {"tell", (PyCFunction)buffered_tell, METH_NOARGS}, - {"truncate", (PyCFunction)buffered_truncate, METH_VARARGS}, - {"read", (PyCFunction)buffered_read, METH_VARARGS}, - {"read1", (PyCFunction)buffered_read1, METH_VARARGS}, - {"readinto", (PyCFunction)buffered_readinto, METH_VARARGS}, - {"readinto1", (PyCFunction)buffered_readinto1, METH_VARARGS}, - {"readline", (PyCFunction)buffered_readline, METH_VARARGS}, - {"peek", (PyCFunction)buffered_peek, METH_VARARGS}, - {"write", (PyCFunction)bufferedwriter_write, METH_VARARGS}, + _IO__BUFFERED_TRUNCATE_METHODDEF + _IO__BUFFERED_READ_METHODDEF + _IO__BUFFERED_READ1_METHODDEF + _IO__BUFFERED_READINTO_METHODDEF + _IO__BUFFERED_READINTO1_METHODDEF + _IO__BUFFERED_READLINE_METHODDEF + _IO__BUFFERED_PEEK_METHODDEF + _IO_BUFFEREDWRITER_WRITE_METHODDEF {"__sizeof__", (PyCFunction)buffered_sizeof, METH_NOARGS}, {NULL, NULL} }; @@ -2671,7 +2714,7 @@ PyTypeObject PyBufferedRandom_Type = { 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ - bufferedrandom_doc, /* tp_doc */ + _io_BufferedRandom___init____doc__, /* tp_doc */ (traverseproc)buffered_traverse, /* tp_traverse */ (inquiry)buffered_clear, /* tp_clear */ 0, /* tp_richcompare */ @@ -2686,7 +2729,7 @@ PyTypeObject PyBufferedRandom_Type = { 0, /* tp_descr_get */ 0, /* tp_descr_set */ offsetof(buffered, dict), /*tp_dictoffset*/ - (initproc)bufferedrandom_init, /* tp_init */ + _io_BufferedRandom___init__, /* tp_init */ 0, /* tp_alloc */ PyType_GenericNew, /* tp_new */ 0, /* tp_free */ diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index 974e33ac2a..42dfe2404a 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -2,6 +2,12 @@ #include "structmember.h" /* for offsetof() */ #include "_iomodule.h" +/*[clinic input] +module _io +class _io.BytesIO "bytesio *" "&PyBytesIO_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=7f50ec034f5c0b26]*/ + typedef struct { PyObject_HEAD PyObject *buf; @@ -203,40 +209,71 @@ bytesio_get_closed(bytesio *self) } } -PyDoc_STRVAR(readable_doc, -"readable() -> bool. Returns True if the IO object can be read."); +/*[clinic input] +_io.BytesIO.readable -PyDoc_STRVAR(writable_doc, -"writable() -> bool. Returns True if the IO object can be written."); +Returns True if the IO object can be read. +[clinic start generated code]*/ -PyDoc_STRVAR(seekable_doc, -"seekable() -> bool. Returns True if the IO object can be seeked."); +static PyObject * +_io_BytesIO_readable_impl(bytesio *self) +/*[clinic end generated code: output=4e93822ad5b62263 input=96c5d0cccfb29f5c]*/ +{ + CHECK_CLOSED(self); + Py_RETURN_TRUE; +} + +/*[clinic input] +_io.BytesIO.writable + +Returns True if the IO object can be written. +[clinic start generated code]*/ -/* Generic getter for the writable, readable and seekable properties */ static PyObject * -return_not_closed(bytesio *self) +_io_BytesIO_writable_impl(bytesio *self) +/*[clinic end generated code: output=64ff6a254b1150b8 input=700eed808277560a]*/ { CHECK_CLOSED(self); Py_RETURN_TRUE; } -PyDoc_STRVAR(flush_doc, -"flush() -> None. Does nothing."); +/*[clinic input] +_io.BytesIO.seekable + +Returns True if the IO object can be seeked. +[clinic start generated code]*/ + +static PyObject * +_io_BytesIO_seekable_impl(bytesio *self) +/*[clinic end generated code: output=6b417f46dcc09b56 input=9421f65627a344dd]*/ +{ + CHECK_CLOSED(self); + Py_RETURN_TRUE; +} + +/*[clinic input] +_io.BytesIO.flush + +Does nothing. +[clinic start generated code]*/ static PyObject * -bytesio_flush(bytesio *self) +_io_BytesIO_flush_impl(bytesio *self) +/*[clinic end generated code: output=187e3d781ca134a0 input=561ea490be4581a7]*/ { CHECK_CLOSED(self); Py_RETURN_NONE; } -PyDoc_STRVAR(getbuffer_doc, -"getbuffer() -> bytes.\n" -"\n" -"Get a read-write view over the contents of the BytesIO object."); +/*[clinic input] +_io.BytesIO.getbuffer + +Get a read-write view over the contents of the BytesIO object. +[clinic start generated code]*/ static PyObject * -bytesio_getbuffer(bytesio *self) +_io_BytesIO_getbuffer_impl(bytesio *self) +/*[clinic end generated code: output=72cd7c6e13aa09ed input=8f738ef615865176]*/ { PyTypeObject *type = &_PyBytesIOBuffer_Type; bytesiobuf *buf; @@ -254,13 +291,15 @@ bytesio_getbuffer(bytesio *self) return view; } -PyDoc_STRVAR(getval_doc, -"getvalue() -> bytes.\n" -"\n" -"Retrieve the entire contents of the BytesIO object."); +/*[clinic input] +_io.BytesIO.getvalue + +Retrieve the entire contents of the BytesIO object. +[clinic start generated code]*/ static PyObject * -bytesio_getvalue(bytesio *self) +_io_BytesIO_getvalue_impl(bytesio *self) +/*[clinic end generated code: output=b3f6a3233c8fd628 input=4b403ac0af3973ed]*/ { CHECK_CLOSED(self); if (self->string_size <= 1 || self->exports > 0) @@ -281,24 +320,31 @@ bytesio_getvalue(bytesio *self) return self->buf; } -PyDoc_STRVAR(isatty_doc, -"isatty() -> False.\n" -"\n" -"Always returns False since BytesIO objects are not connected\n" -"to a tty-like device."); +/*[clinic input] +_io.BytesIO.isatty + +Always returns False. + +BytesIO objects are not connected to a TTY-like device. +[clinic start generated code]*/ static PyObject * -bytesio_isatty(bytesio *self) +_io_BytesIO_isatty_impl(bytesio *self) +/*[clinic end generated code: output=df67712e669f6c8f input=6f97f0985d13f827]*/ { CHECK_CLOSED(self); Py_RETURN_FALSE; } -PyDoc_STRVAR(tell_doc, -"tell() -> current file position, an integer\n"); +/*[clinic input] +_io.BytesIO.tell + +Current file position, an integer. +[clinic start generated code]*/ static PyObject * -bytesio_tell(bytesio *self) +_io_BytesIO_tell_impl(bytesio *self) +/*[clinic end generated code: output=b54b0f93cd0e5e1d input=b106adf099cb3657]*/ { CHECK_CLOSED(self); return PyLong_FromSsize_t(self->pos); @@ -324,23 +370,25 @@ read_bytes(bytesio *self, Py_ssize_t size) return PyBytes_FromStringAndSize(output, size); } -PyDoc_STRVAR(read_doc, -"read([size]) -> read at most size bytes, returned as a bytes object.\n" -"\n" -"If the size argument is negative, read until EOF is reached.\n" -"Return an empty bytes object at EOF."); +/*[clinic input] +_io.BytesIO.read + size as arg: object = None + / + +Read at most size bytes, returned as a bytes object. + +If the size argument is negative, read until EOF is reached. +Return an empty bytes object at EOF. +[clinic start generated code]*/ static PyObject * -bytesio_read(bytesio *self, PyObject *args) +_io_BytesIO_read_impl(bytesio *self, PyObject *arg) +/*[clinic end generated code: output=85dacb535c1e1781 input=cc7ba4a797bb1555]*/ { Py_ssize_t size, n; - PyObject *arg = Py_None; CHECK_CLOSED(self); - if (!PyArg_ParseTuple(args, "|O:read", &arg)) - return NULL; - if (PyLong_Check(arg)) { size = PyLong_AsSsize_t(arg); if (size == -1 && PyErr_Occurred()) @@ -368,43 +416,44 @@ bytesio_read(bytesio *self, PyObject *args) } -PyDoc_STRVAR(read1_doc, -"read1(size) -> read at most size bytes, returned as a bytes object.\n" -"\n" -"If the size argument is negative or omitted, read until EOF is reached.\n" -"Return an empty bytes object at EOF."); +/*[clinic input] +_io.BytesIO.read1 + size: object + / + +Read at most size bytes, returned as a bytes object. + +If the size argument is negative or omitted, read until EOF is reached. +Return an empty bytes object at EOF. +[clinic start generated code]*/ static PyObject * -bytesio_read1(bytesio *self, PyObject *n) +_io_BytesIO_read1(bytesio *self, PyObject *size) +/*[clinic end generated code: output=16021f5d0ac3d4e2 input=d4f40bb8f2f99418]*/ { - PyObject *arg, *res; - - arg = PyTuple_Pack(1, n); - if (arg == NULL) - return NULL; - res = bytesio_read(self, arg); - Py_DECREF(arg); - return res; + return _io_BytesIO_read_impl(self, size); } -PyDoc_STRVAR(readline_doc, -"readline([size]) -> next line from the file, as a bytes object.\n" -"\n" -"Retain newline. A non-negative size argument limits the maximum\n" -"number of bytes to return (an incomplete line may be returned then).\n" -"Return an empty bytes object at EOF.\n"); +/*[clinic input] +_io.BytesIO.readline + size as arg: object = None + / + +Next line from the file, as a bytes object. + +Retain newline. A non-negative size argument limits the maximum +number of bytes to return (an incomplete line may be returned then). +Return an empty bytes object at EOF. +[clinic start generated code]*/ static PyObject * -bytesio_readline(bytesio *self, PyObject *args) +_io_BytesIO_readline_impl(bytesio *self, PyObject *arg) +/*[clinic end generated code: output=1c2115534a4f9276 input=ca31f06de6eab257]*/ { Py_ssize_t size, n; - PyObject *arg = Py_None; CHECK_CLOSED(self); - if (!PyArg_ParseTuple(args, "|O:readline", &arg)) - return NULL; - if (PyLong_Check(arg)) { size = PyLong_AsSsize_t(arg); if (size == -1 && PyErr_Occurred()) @@ -425,26 +474,28 @@ bytesio_readline(bytesio *self, PyObject *args) return read_bytes(self, n); } -PyDoc_STRVAR(readlines_doc, -"readlines([size]) -> list of strings, each a line from the file.\n" -"\n" -"Call readline() repeatedly and return a list of the lines so read.\n" -"The optional size argument, if given, is an approximate bound on the\n" -"total number of bytes in the lines returned.\n"); +/*[clinic input] +_io.BytesIO.readlines + size as arg: object = None + / + +List of bytes objects, each a line from the file. + +Call readline() repeatedly and return a list of the lines so read. +The optional size argument, if given, is an approximate bound on the +total number of bytes in the lines returned. +[clinic start generated code]*/ static PyObject * -bytesio_readlines(bytesio *self, PyObject *args) +_io_BytesIO_readlines_impl(bytesio *self, PyObject *arg) +/*[clinic end generated code: output=09b8e34c880808ff input=691aa1314f2c2a87]*/ { Py_ssize_t maxsize, size, n; PyObject *result, *line; char *output; - PyObject *arg = Py_None; CHECK_CLOSED(self); - if (!PyArg_ParseTuple(args, "|O:readlines", &arg)) - return NULL; - if (PyLong_Check(arg)) { maxsize = PyLong_AsSsize_t(arg); if (maxsize == -1 && PyErr_Occurred()) @@ -488,25 +539,27 @@ bytesio_readlines(bytesio *self, PyObject *args) return NULL; } -PyDoc_STRVAR(readinto_doc, -"readinto(bytearray) -> int. Read up to len(b) bytes into b.\n" -"\n" -"Returns number of bytes read (0 for EOF), or None if the object\n" -"is set not to block as has no data to read."); +/*[clinic input] +_io.BytesIO.readinto + buffer: Py_buffer(types={'rwbuffer'}) + / + +Read up to len(buffer) bytes into buffer. + +Returns number of bytes read (0 for EOF), or None if the object +is set not to block as has no data to read. +[clinic start generated code]*/ static PyObject * -bytesio_readinto(bytesio *self, PyObject *arg) +_io_BytesIO_readinto_impl(bytesio *self, Py_buffer *buffer) +/*[clinic end generated code: output=a5d407217dcf0639 input=d289da851c7c4159]*/ { - Py_buffer buffer; Py_ssize_t len, n; CHECK_CLOSED(self); - if (!PyArg_Parse(arg, "w*", &buffer)) - return NULL; - /* adjust invalid sizes */ - len = buffer.len; + len = buffer->len; n = self->string_size - self->pos; if (len > n) { len = n; @@ -514,33 +567,34 @@ bytesio_readinto(bytesio *self, PyObject *arg) len = 0; } - memcpy(buffer.buf, PyBytes_AS_STRING(self->buf) + self->pos, len); + memcpy(buffer->buf, PyBytes_AS_STRING(self->buf) + self->pos, len); assert(self->pos + len < PY_SSIZE_T_MAX); assert(len >= 0); self->pos += len; - PyBuffer_Release(&buffer); return PyLong_FromSsize_t(len); } -PyDoc_STRVAR(truncate_doc, -"truncate([size]) -> int. Truncate the file to at most size bytes.\n" -"\n" -"Size defaults to the current file position, as returned by tell().\n" -"The current file position is unchanged. Returns the new size.\n"); +/*[clinic input] +_io.BytesIO.truncate + size as arg: object = None + / + +Truncate the file to at most size bytes. + +Size defaults to the current file position, as returned by tell(). +The current file position is unchanged. Returns the new size. +[clinic start generated code]*/ static PyObject * -bytesio_truncate(bytesio *self, PyObject *args) +_io_BytesIO_truncate_impl(bytesio *self, PyObject *arg) +/*[clinic end generated code: output=81e6be60e67ddd66 input=11ed1966835462ba]*/ { Py_ssize_t size; - PyObject *arg = Py_None; CHECK_CLOSED(self); CHECK_EXPORTS(self); - if (!PyArg_ParseTuple(args, "|O:truncate", &arg)) - return NULL; - if (PyLong_Check(arg)) { size = PyLong_AsSsize_t(arg); if (size == -1 && PyErr_Occurred()) @@ -586,36 +640,37 @@ bytesio_iternext(bytesio *self) return read_bytes(self, n); } -PyDoc_STRVAR(seek_doc, -"seek(pos, whence=0) -> int. Change stream position.\n" -"\n" -"Seek to byte offset pos relative to position indicated by whence:\n" -" 0 Start of stream (the default). pos should be >= 0;\n" -" 1 Current position - pos may be negative;\n" -" 2 End of stream - pos usually negative.\n" -"Returns the new absolute position."); +/*[clinic input] +_io.BytesIO.seek + pos: Py_ssize_t + whence: int = 0 + / + +Change stream position. + +Seek to byte offset pos relative to position indicated by whence: + 0 Start of stream (the default). pos should be >= 0; + 1 Current position - pos may be negative; + 2 End of stream - pos usually negative. +Returns the new absolute position. +[clinic start generated code]*/ static PyObject * -bytesio_seek(bytesio *self, PyObject *args) +_io_BytesIO_seek_impl(bytesio *self, Py_ssize_t pos, int whence) +/*[clinic end generated code: output=c26204a68e9190e4 input=1e875e6ebc652948]*/ { - Py_ssize_t pos; - int mode = 0; - CHECK_CLOSED(self); - if (!PyArg_ParseTuple(args, "n|i:seek", &pos, &mode)) - return NULL; - - if (pos < 0 && mode == 0) { + if (pos < 0 && whence == 0) { PyErr_Format(PyExc_ValueError, "negative seek value %zd", pos); return NULL; } - /* mode 0: offset relative to beginning of the string. - mode 1: offset relative to current position. - mode 2: offset relative the end of the string. */ - if (mode == 1) { + /* whence = 0: offset relative to beginning of the string. + whence = 1: offset relative to current position. + whence = 2: offset relative the end of the string. */ + if (whence == 1) { if (pos > PY_SSIZE_T_MAX - self->pos) { PyErr_SetString(PyExc_OverflowError, "new position too large"); @@ -623,7 +678,7 @@ bytesio_seek(bytesio *self, PyObject *args) } pos += self->pos; } - else if (mode == 2) { + else if (whence == 2) { if (pos > PY_SSIZE_T_MAX - self->string_size) { PyErr_SetString(PyExc_OverflowError, "new position too large"); @@ -631,9 +686,9 @@ bytesio_seek(bytesio *self, PyObject *args) } pos += self->string_size; } - else if (mode != 0) { + else if (whence != 0) { PyErr_Format(PyExc_ValueError, - "invalid whence (%i, should be 0, 1 or 2)", mode); + "invalid whence (%i, should be 0, 1 or 2)", whence); return NULL; } @@ -644,54 +699,63 @@ bytesio_seek(bytesio *self, PyObject *args) return PyLong_FromSsize_t(self->pos); } -PyDoc_STRVAR(write_doc, -"write(bytes) -> int. Write bytes to file.\n" -"\n" -"Return the number of bytes written."); +/*[clinic input] +_io.BytesIO.write + b: object + / + +Write bytes to file. + +Return the number of bytes written. +[clinic start generated code]*/ static PyObject * -bytesio_write(bytesio *self, PyObject *obj) +_io_BytesIO_write(bytesio *self, PyObject *b) +/*[clinic end generated code: output=53316d99800a0b95 input=f5ec7c8c64ed720a]*/ { Py_ssize_t n = 0; Py_buffer buf; - PyObject *result = NULL; CHECK_CLOSED(self); CHECK_EXPORTS(self); - if (PyObject_GetBuffer(obj, &buf, PyBUF_CONTIG_RO) < 0) + if (PyObject_GetBuffer(b, &buf, PyBUF_CONTIG_RO) < 0) return NULL; if (buf.len != 0) n = write_bytes(self, buf.buf, buf.len); - if (n >= 0) - result = PyLong_FromSsize_t(n); PyBuffer_Release(&buf); - return result; + return n >= 0 ? PyLong_FromSsize_t(n) : NULL; } -PyDoc_STRVAR(writelines_doc, -"writelines(lines) -> None. Write bytes objects to the file.\n" -"\n" -"Note that newlines are not added. The argument can be any iterable\n" -"object producing bytes objects. This is equivalent to calling write() for\n" -"each bytes object."); +/*[clinic input] +_io.BytesIO.writelines + lines: object + / + +Write lines to the file. + +Note that newlines are not added. lines can be any iterable object +producing bytes-like objects. This is equivalent to calling write() for +each element. +[clinic start generated code]*/ static PyObject * -bytesio_writelines(bytesio *self, PyObject *v) +_io_BytesIO_writelines(bytesio *self, PyObject *lines) +/*[clinic end generated code: output=7f33aa3271c91752 input=e972539176fc8fc1]*/ { PyObject *it, *item; PyObject *ret; CHECK_CLOSED(self); - it = PyObject_GetIter(v); + it = PyObject_GetIter(lines); if (it == NULL) return NULL; while ((item = PyIter_Next(it)) != NULL) { - ret = bytesio_write(self, item); + ret = _io_BytesIO_write(self, item); Py_DECREF(item); if (ret == NULL) { Py_DECREF(it); @@ -708,11 +772,15 @@ bytesio_writelines(bytesio *self, PyObject *v) Py_RETURN_NONE; } -PyDoc_STRVAR(close_doc, -"close() -> None. Disable all I/O operations."); +/*[clinic input] +_io.BytesIO.close + +Disable all I/O operations. +[clinic start generated code]*/ static PyObject * -bytesio_close(bytesio *self) +_io_BytesIO_close_impl(bytesio *self) +/*[clinic end generated code: output=1471bb9411af84a0 input=37e1f55556e61f60]*/ { CHECK_EXPORTS(self); Py_CLEAR(self->buf); @@ -737,7 +805,7 @@ bytesio_close(bytesio *self) static PyObject * bytesio_getstate(bytesio *self) { - PyObject *initvalue = bytesio_getvalue(self); + PyObject *initvalue = _io_BytesIO_getvalue_impl(self); PyObject *dict; PyObject *state; @@ -787,7 +855,7 @@ bytesio_setstate(bytesio *self, PyObject *state) /* Set the value of the internal buffer. If state[0] does not support the buffer protocol, bytesio_write will raise the appropriate TypeError. */ - result = bytesio_write(self, PyTuple_GET_ITEM(state, 0)); + result = _io_BytesIO_write(self, PyTuple_GET_ITEM(state, 0)); if (result == NULL) return NULL; Py_DECREF(result); @@ -874,16 +942,17 @@ bytesio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return (PyObject *)self; } -static int -bytesio_init(bytesio *self, PyObject *args, PyObject *kwds) -{ - char *kwlist[] = {"initial_bytes", NULL}; - PyObject *initvalue = NULL; +/*[clinic input] +_io.BytesIO.__init__ + initial_bytes as initvalue: object(c_default="NULL") = b'' - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:BytesIO", kwlist, - &initvalue)) - return -1; +Buffered I/O implementation using an in-memory bytes buffer. +[clinic start generated code]*/ +static int +_io_BytesIO___init___impl(bytesio *self, PyObject *initvalue) +/*[clinic end generated code: output=65c0c51e24c5b621 input=aac7f31b67bf0fb6]*/ +{ /* In case, __init__ is called multiple times. */ self->string_size = 0; self->pos = 0; @@ -902,7 +971,7 @@ bytesio_init(bytesio *self, PyObject *args, PyObject *kwds) } else { PyObject *res; - res = bytesio_write(self, initvalue); + res = _io_BytesIO_write(self, initvalue); if (res == NULL) return -1; Py_DECREF(res); @@ -939,6 +1008,8 @@ bytesio_clear(bytesio *self) } +#include "clinic/bytesio.c.h" + static PyGetSetDef bytesio_getsetlist[] = { {"closed", (getter)bytesio_get_closed, NULL, "True if the file is closed."}, @@ -946,36 +1017,30 @@ static PyGetSetDef bytesio_getsetlist[] = { }; static struct PyMethodDef bytesio_methods[] = { - {"readable", (PyCFunction)return_not_closed, METH_NOARGS, readable_doc}, - {"seekable", (PyCFunction)return_not_closed, METH_NOARGS, seekable_doc}, - {"writable", (PyCFunction)return_not_closed, METH_NOARGS, writable_doc}, - {"close", (PyCFunction)bytesio_close, METH_NOARGS, close_doc}, - {"flush", (PyCFunction)bytesio_flush, METH_NOARGS, flush_doc}, - {"isatty", (PyCFunction)bytesio_isatty, METH_NOARGS, isatty_doc}, - {"tell", (PyCFunction)bytesio_tell, METH_NOARGS, tell_doc}, - {"write", (PyCFunction)bytesio_write, METH_O, write_doc}, - {"writelines", (PyCFunction)bytesio_writelines, METH_O, writelines_doc}, - {"read1", (PyCFunction)bytesio_read1, METH_O, read1_doc}, - {"readinto", (PyCFunction)bytesio_readinto, METH_O, readinto_doc}, - {"readline", (PyCFunction)bytesio_readline, METH_VARARGS, readline_doc}, - {"readlines", (PyCFunction)bytesio_readlines, METH_VARARGS, readlines_doc}, - {"read", (PyCFunction)bytesio_read, METH_VARARGS, read_doc}, - {"getbuffer", (PyCFunction)bytesio_getbuffer, METH_NOARGS, getbuffer_doc}, - {"getvalue", (PyCFunction)bytesio_getvalue, METH_NOARGS, getval_doc}, - {"seek", (PyCFunction)bytesio_seek, METH_VARARGS, seek_doc}, - {"truncate", (PyCFunction)bytesio_truncate, METH_VARARGS, truncate_doc}, + _IO_BYTESIO_READABLE_METHODDEF + _IO_BYTESIO_SEEKABLE_METHODDEF + _IO_BYTESIO_WRITABLE_METHODDEF + _IO_BYTESIO_CLOSE_METHODDEF + _IO_BYTESIO_FLUSH_METHODDEF + _IO_BYTESIO_ISATTY_METHODDEF + _IO_BYTESIO_TELL_METHODDEF + _IO_BYTESIO_WRITE_METHODDEF + _IO_BYTESIO_WRITELINES_METHODDEF + _IO_BYTESIO_READ1_METHODDEF + _IO_BYTESIO_READINTO_METHODDEF + _IO_BYTESIO_READLINE_METHODDEF + _IO_BYTESIO_READLINES_METHODDEF + _IO_BYTESIO_READ_METHODDEF + _IO_BYTESIO_GETBUFFER_METHODDEF + _IO_BYTESIO_GETVALUE_METHODDEF + _IO_BYTESIO_SEEK_METHODDEF + _IO_BYTESIO_TRUNCATE_METHODDEF {"__getstate__", (PyCFunction)bytesio_getstate, METH_NOARGS, NULL}, {"__setstate__", (PyCFunction)bytesio_setstate, METH_O, NULL}, {"__sizeof__", (PyCFunction)bytesio_sizeof, METH_NOARGS, NULL}, {NULL, NULL} /* sentinel */ }; -PyDoc_STRVAR(bytesio_doc, -"BytesIO([buffer]) -> object\n" -"\n" -"Create a buffered I/O implementation using an in-memory bytes\n" -"buffer, ready for reading and writing."); - PyTypeObject PyBytesIO_Type = { PyVarObject_HEAD_INIT(NULL, 0) "_io.BytesIO", /*tp_name*/ @@ -998,7 +1063,7 @@ PyTypeObject PyBytesIO_Type = { 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - bytesio_doc, /*tp_doc*/ + _io_BytesIO___init____doc__, /*tp_doc*/ (traverseproc)bytesio_traverse, /*tp_traverse*/ (inquiry)bytesio_clear, /*tp_clear*/ 0, /*tp_richcompare*/ @@ -1013,7 +1078,7 @@ PyTypeObject PyBytesIO_Type = { 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ offsetof(bytesio, dict), /*tp_dictoffset*/ - (initproc)bytesio_init, /*tp_init*/ + _io_BytesIO___init__, /*tp_init*/ 0, /*tp_alloc*/ bytesio_new, /*tp_new*/ }; diff --git a/Modules/_io/clinic/_iomodule.c.h b/Modules/_io/clinic/_iomodule.c.h new file mode 100644 index 0000000000..df877a5b28 --- /dev/null +++ b/Modules/_io/clinic/_iomodule.c.h @@ -0,0 +1,160 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_io_open__doc__, +"open($module, /, file, mode=\'r\', buffering=-1, encoding=None,\n" +" errors=None, newline=None, closefd=True, opener=None)\n" +"--\n" +"\n" +"Open file and return a stream. Raise IOError upon failure.\n" +"\n" +"file is either a text or byte string giving the name (and the path\n" +"if the file isn\'t in the current working directory) of the file to\n" +"be opened or an integer file descriptor of the file to be\n" +"wrapped. (If a file descriptor is given, it is closed when the\n" +"returned I/O object is closed, unless closefd is set to False.)\n" +"\n" +"mode is an optional string that specifies the mode in which the file\n" +"is opened. It defaults to \'r\' which means open for reading in text\n" +"mode. Other common values are \'w\' for writing (truncating the file if\n" +"it already exists), \'x\' for creating and writing to a new file, and\n" +"\'a\' for appending (which on some Unix systems, means that all writes\n" +"append to the end of the file regardless of the current seek position).\n" +"In text mode, if encoding is not specified the encoding used is platform\n" +"dependent: locale.getpreferredencoding(False) is called to get the\n" +"current locale encoding. (For reading and writing raw bytes use binary\n" +"mode and leave encoding unspecified.) The available modes are:\n" +"\n" +"========= ===============================================================\n" +"Character Meaning\n" +"--------- ---------------------------------------------------------------\n" +"\'r\' open for reading (default)\n" +"\'w\' open for writing, truncating the file first\n" +"\'x\' create a new file and open it for writing\n" +"\'a\' open for writing, appending to the end of the file if it exists\n" +"\'b\' binary mode\n" +"\'t\' text mode (default)\n" +"\'+\' open a disk file for updating (reading and writing)\n" +"\'U\' universal newline mode (deprecated)\n" +"========= ===============================================================\n" +"\n" +"The default mode is \'rt\' (open for reading text). For binary random\n" +"access, the mode \'w+b\' opens and truncates the file to 0 bytes, while\n" +"\'r+b\' opens the file without truncation. The \'x\' mode implies \'w\' and\n" +"raises an `FileExistsError` if the file already exists.\n" +"\n" +"Python distinguishes between files opened in binary and text modes,\n" +"even when the underlying operating system doesn\'t. Files opened in\n" +"binary mode (appending \'b\' to the mode argument) return contents as\n" +"bytes objects without any decoding. In text mode (the default, or when\n" +"\'t\' is appended to the mode argument), the contents of the file are\n" +"returned as strings, the bytes having been first decoded using a\n" +"platform-dependent encoding or using the specified encoding if given.\n" +"\n" +"\'U\' mode is deprecated and will raise an exception in future versions\n" +"of Python. It has no effect in Python 3. Use newline to control\n" +"universal newlines mode.\n" +"\n" +"buffering is an optional integer used to set the buffering policy.\n" +"Pass 0 to switch buffering off (only allowed in binary mode), 1 to select\n" +"line buffering (only usable in text mode), and an integer > 1 to indicate\n" +"the size of a fixed-size chunk buffer. When no buffering argument is\n" +"given, the default buffering policy works as follows:\n" +"\n" +"* Binary files are buffered in fixed-size chunks; the size of the buffer\n" +" is chosen using a heuristic trying to determine the underlying device\'s\n" +" \"block size\" and falling back on `io.DEFAULT_BUFFER_SIZE`.\n" +" On many systems, the buffer will typically be 4096 or 8192 bytes long.\n" +"\n" +"* \"Interactive\" text files (files for which isatty() returns True)\n" +" use line buffering. Other text files use the policy described above\n" +" for binary files.\n" +"\n" +"encoding is the name of the encoding used to decode or encode the\n" +"file. This should only be used in text mode. The default encoding is\n" +"platform dependent, but any encoding supported by Python can be\n" +"passed. See the codecs module for the list of supported encodings.\n" +"\n" +"errors is an optional string that specifies how encoding errors are to\n" +"be handled---this argument should not be used in binary mode. Pass\n" +"\'strict\' to raise a ValueError exception if there is an encoding error\n" +"(the default of None has the same effect), or pass \'ignore\' to ignore\n" +"errors. (Note that ignoring encoding errors can lead to data loss.)\n" +"See the documentation for codecs.register or run \'help(codecs.Codec)\'\n" +"for a list of the permitted encoding error strings.\n" +"\n" +"newline controls how universal newlines works (it only applies to text\n" +"mode). It can be None, \'\', \'\\n\', \'\\r\', and \'\\r\\n\'. It works as\n" +"follows:\n" +"\n" +"* On input, if newline is None, universal newlines mode is\n" +" enabled. Lines in the input can end in \'\\n\', \'\\r\', or \'\\r\\n\', and\n" +" these are translated into \'\\n\' before being returned to the\n" +" caller. If it is \'\', universal newline mode is enabled, but line\n" +" endings are returned to the caller untranslated. If it has any of\n" +" the other legal values, input lines are only terminated by the given\n" +" string, and the line ending is returned to the caller untranslated.\n" +"\n" +"* On output, if newline is None, any \'\\n\' characters written are\n" +" translated to the system default line separator, os.linesep. If\n" +" newline is \'\' or \'\\n\', no translation takes place. If newline is any\n" +" of the other legal values, any \'\\n\' characters written are translated\n" +" to the given string.\n" +"\n" +"If closefd is False, the underlying file descriptor will be kept open\n" +"when the file is closed. This does not work when a file name is given\n" +"and must be True in that case.\n" +"\n" +"A custom opener can be used by passing a callable as *opener*. The\n" +"underlying file descriptor for the file object is then obtained by\n" +"calling *opener* with (*file*, *flags*). *opener* must return an open\n" +"file descriptor (passing os.open as *opener* results in functionality\n" +"similar to passing None).\n" +"\n" +"open() returns a file object whose type depends on the mode, and\n" +"through which the standard file operations such as reading and writing\n" +"are performed. When open() is used to open a file in a text mode (\'w\',\n" +"\'r\', \'wt\', \'rt\', etc.), it returns a TextIOWrapper. When used to open\n" +"a file in a binary mode, the returned class varies: in read binary\n" +"mode, it returns a BufferedReader; in write binary and append binary\n" +"modes, it returns a BufferedWriter, and in read/write mode, it returns\n" +"a BufferedRandom.\n" +"\n" +"It is also possible to use a string or bytearray as a file for both\n" +"reading and writing. For strings StringIO can be used like a file\n" +"opened in a text mode, and for bytes a BytesIO can be used like a file\n" +"opened in a binary mode."); + +#define _IO_OPEN_METHODDEF \ + {"open", (PyCFunction)_io_open, METH_VARARGS|METH_KEYWORDS, _io_open__doc__}, + +static PyObject * +_io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, + int buffering, const char *encoding, const char *errors, + const char *newline, int closefd, PyObject *opener); + +static PyObject * +_io_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"file", "mode", "buffering", "encoding", "errors", "newline", "closefd", "opener", NULL}; + PyObject *file; + const char *mode = "r"; + int buffering = -1; + const char *encoding = NULL; + const char *errors = NULL; + const char *newline = NULL; + int closefd = 1; + PyObject *opener = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|sizzziO:open", _keywords, + &file, &mode, &buffering, &encoding, &errors, &newline, &closefd, &opener)) + goto exit; + return_value = _io_open_impl(module, file, mode, buffering, encoding, errors, newline, closefd, opener); + +exit: + return return_value; +} +/*[clinic end generated code: output=c51a5a443c11f02b input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/bufferedio.c.h b/Modules/_io/clinic/bufferedio.c.h new file mode 100644 index 0000000000..b79b8d56c4 --- /dev/null +++ b/Modules/_io/clinic/bufferedio.c.h @@ -0,0 +1,474 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_io__BufferedIOBase_readinto__doc__, +"readinto($self, buffer, /)\n" +"--\n" +"\n"); + +#define _IO__BUFFEREDIOBASE_READINTO_METHODDEF \ + {"readinto", (PyCFunction)_io__BufferedIOBase_readinto, METH_O, _io__BufferedIOBase_readinto__doc__}, + +static PyObject * +_io__BufferedIOBase_readinto_impl(PyObject *self, Py_buffer *buffer); + +static PyObject * +_io__BufferedIOBase_readinto(PyObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer buffer = {NULL, NULL}; + + if (!PyArg_Parse(arg, + "w*:readinto", + &buffer)) + goto exit; + return_value = _io__BufferedIOBase_readinto_impl(self, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +PyDoc_STRVAR(_io__BufferedIOBase_readinto1__doc__, +"readinto1($self, buffer, /)\n" +"--\n" +"\n"); + +#define _IO__BUFFEREDIOBASE_READINTO1_METHODDEF \ + {"readinto1", (PyCFunction)_io__BufferedIOBase_readinto1, METH_O, _io__BufferedIOBase_readinto1__doc__}, + +static PyObject * +_io__BufferedIOBase_readinto1_impl(PyObject *self, Py_buffer *buffer); + +static PyObject * +_io__BufferedIOBase_readinto1(PyObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer buffer = {NULL, NULL}; + + if (!PyArg_Parse(arg, + "w*:readinto1", + &buffer)) + goto exit; + return_value = _io__BufferedIOBase_readinto1_impl(self, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +PyDoc_STRVAR(_io__BufferedIOBase_detach__doc__, +"detach($self, /)\n" +"--\n" +"\n" +"Disconnect this buffer from its underlying raw stream and return it.\n" +"\n" +"After the raw stream has been detached, the buffer is in an unusable\n" +"state."); + +#define _IO__BUFFEREDIOBASE_DETACH_METHODDEF \ + {"detach", (PyCFunction)_io__BufferedIOBase_detach, METH_NOARGS, _io__BufferedIOBase_detach__doc__}, + +static PyObject * +_io__BufferedIOBase_detach_impl(PyObject *self); + +static PyObject * +_io__BufferedIOBase_detach(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__BufferedIOBase_detach_impl(self); +} + +PyDoc_STRVAR(_io__Buffered_peek__doc__, +"peek($self, size=0, /)\n" +"--\n" +"\n"); + +#define _IO__BUFFERED_PEEK_METHODDEF \ + {"peek", (PyCFunction)_io__Buffered_peek, METH_VARARGS, _io__Buffered_peek__doc__}, + +static PyObject * +_io__Buffered_peek_impl(buffered *self, Py_ssize_t size); + +static PyObject * +_io__Buffered_peek(buffered *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t size = 0; + + if (!PyArg_ParseTuple(args, + "|n:peek", + &size)) + goto exit; + return_value = _io__Buffered_peek_impl(self, size); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io__Buffered_read__doc__, +"read($self, size=-1, /)\n" +"--\n" +"\n"); + +#define _IO__BUFFERED_READ_METHODDEF \ + {"read", (PyCFunction)_io__Buffered_read, METH_VARARGS, _io__Buffered_read__doc__}, + +static PyObject * +_io__Buffered_read_impl(buffered *self, Py_ssize_t n); + +static PyObject * +_io__Buffered_read(buffered *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t n = -1; + + if (!PyArg_ParseTuple(args, + "|O&:read", + _PyIO_ConvertSsize_t, &n)) + goto exit; + return_value = _io__Buffered_read_impl(self, n); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io__Buffered_read1__doc__, +"read1($self, size, /)\n" +"--\n" +"\n"); + +#define _IO__BUFFERED_READ1_METHODDEF \ + {"read1", (PyCFunction)_io__Buffered_read1, METH_O, _io__Buffered_read1__doc__}, + +static PyObject * +_io__Buffered_read1_impl(buffered *self, Py_ssize_t n); + +static PyObject * +_io__Buffered_read1(buffered *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_ssize_t n; + + if (!PyArg_Parse(arg, + "n:read1", + &n)) + goto exit; + return_value = _io__Buffered_read1_impl(self, n); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io__Buffered_readinto__doc__, +"readinto($self, buffer, /)\n" +"--\n" +"\n"); + +#define _IO__BUFFERED_READINTO_METHODDEF \ + {"readinto", (PyCFunction)_io__Buffered_readinto, METH_O, _io__Buffered_readinto__doc__}, + +static PyObject * +_io__Buffered_readinto_impl(buffered *self, Py_buffer *buffer); + +static PyObject * +_io__Buffered_readinto(buffered *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer buffer = {NULL, NULL}; + + if (!PyArg_Parse(arg, + "w*:readinto", + &buffer)) + goto exit; + return_value = _io__Buffered_readinto_impl(self, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +PyDoc_STRVAR(_io__Buffered_readinto1__doc__, +"readinto1($self, buffer, /)\n" +"--\n" +"\n"); + +#define _IO__BUFFERED_READINTO1_METHODDEF \ + {"readinto1", (PyCFunction)_io__Buffered_readinto1, METH_O, _io__Buffered_readinto1__doc__}, + +static PyObject * +_io__Buffered_readinto1_impl(buffered *self, Py_buffer *buffer); + +static PyObject * +_io__Buffered_readinto1(buffered *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer buffer = {NULL, NULL}; + + if (!PyArg_Parse(arg, + "w*:readinto1", + &buffer)) + goto exit; + return_value = _io__Buffered_readinto1_impl(self, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +PyDoc_STRVAR(_io__Buffered_readline__doc__, +"readline($self, size=-1, /)\n" +"--\n" +"\n"); + +#define _IO__BUFFERED_READLINE_METHODDEF \ + {"readline", (PyCFunction)_io__Buffered_readline, METH_VARARGS, _io__Buffered_readline__doc__}, + +static PyObject * +_io__Buffered_readline_impl(buffered *self, Py_ssize_t size); + +static PyObject * +_io__Buffered_readline(buffered *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t size = -1; + + if (!PyArg_ParseTuple(args, + "|O&:readline", + _PyIO_ConvertSsize_t, &size)) + goto exit; + return_value = _io__Buffered_readline_impl(self, size); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io__Buffered_seek__doc__, +"seek($self, target, whence=0, /)\n" +"--\n" +"\n"); + +#define _IO__BUFFERED_SEEK_METHODDEF \ + {"seek", (PyCFunction)_io__Buffered_seek, METH_VARARGS, _io__Buffered_seek__doc__}, + +static PyObject * +_io__Buffered_seek_impl(buffered *self, PyObject *targetobj, int whence); + +static PyObject * +_io__Buffered_seek(buffered *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *targetobj; + int whence = 0; + + if (!PyArg_ParseTuple(args, + "O|i:seek", + &targetobj, &whence)) + goto exit; + return_value = _io__Buffered_seek_impl(self, targetobj, whence); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io__Buffered_truncate__doc__, +"truncate($self, pos=None, /)\n" +"--\n" +"\n"); + +#define _IO__BUFFERED_TRUNCATE_METHODDEF \ + {"truncate", (PyCFunction)_io__Buffered_truncate, METH_VARARGS, _io__Buffered_truncate__doc__}, + +static PyObject * +_io__Buffered_truncate_impl(buffered *self, PyObject *pos); + +static PyObject * +_io__Buffered_truncate(buffered *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *pos = Py_None; + + if (!PyArg_UnpackTuple(args, "truncate", + 0, 1, + &pos)) + goto exit; + return_value = _io__Buffered_truncate_impl(self, pos); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_BufferedReader___init____doc__, +"BufferedReader(raw, buffer_size=DEFAULT_BUFFER_SIZE)\n" +"--\n" +"\n" +"Create a new buffered reader using the given readable raw IO object."); + +static int +_io_BufferedReader___init___impl(buffered *self, PyObject *raw, + Py_ssize_t buffer_size); + +static int +_io_BufferedReader___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static char *_keywords[] = {"raw", "buffer_size", NULL}; + PyObject *raw; + Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|n:BufferedReader", _keywords, + &raw, &buffer_size)) + goto exit; + return_value = _io_BufferedReader___init___impl((buffered *)self, raw, buffer_size); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_BufferedWriter___init____doc__, +"BufferedWriter(raw, buffer_size=DEFAULT_BUFFER_SIZE)\n" +"--\n" +"\n" +"A buffer for a writeable sequential RawIO object.\n" +"\n" +"The constructor creates a BufferedWriter for the given writeable raw\n" +"stream. If the buffer_size is not given, it defaults to\n" +"DEFAULT_BUFFER_SIZE."); + +static int +_io_BufferedWriter___init___impl(buffered *self, PyObject *raw, + Py_ssize_t buffer_size); + +static int +_io_BufferedWriter___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static char *_keywords[] = {"raw", "buffer_size", NULL}; + PyObject *raw; + Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|n:BufferedWriter", _keywords, + &raw, &buffer_size)) + goto exit; + return_value = _io_BufferedWriter___init___impl((buffered *)self, raw, buffer_size); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_BufferedWriter_write__doc__, +"write($self, buffer, /)\n" +"--\n" +"\n"); + +#define _IO_BUFFEREDWRITER_WRITE_METHODDEF \ + {"write", (PyCFunction)_io_BufferedWriter_write, METH_O, _io_BufferedWriter_write__doc__}, + +static PyObject * +_io_BufferedWriter_write_impl(buffered *self, Py_buffer *buffer); + +static PyObject * +_io_BufferedWriter_write(buffered *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer buffer = {NULL, NULL}; + + if (!PyArg_Parse(arg, + "y*:write", + &buffer)) + goto exit; + return_value = _io_BufferedWriter_write_impl(self, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +PyDoc_STRVAR(_io_BufferedRWPair___init____doc__, +"BufferedRWPair(reader, writer, buffer_size=DEFAULT_BUFFER_SIZE, /)\n" +"--\n" +"\n" +"A buffered reader and writer object together.\n" +"\n" +"A buffered reader object and buffered writer object put together to\n" +"form a sequential IO object that can read and write. This is typically\n" +"used with a socket or two-way pipe.\n" +"\n" +"reader and writer are RawIOBase objects that are readable and\n" +"writeable respectively. If the buffer_size is omitted it defaults to\n" +"DEFAULT_BUFFER_SIZE."); + +static int +_io_BufferedRWPair___init___impl(rwpair *self, PyObject *reader, + PyObject *writer, Py_ssize_t buffer_size); + +static int +_io_BufferedRWPair___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + PyObject *reader; + PyObject *writer; + Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; + + if ((Py_TYPE(self) == &PyBufferedRWPair_Type) && + !_PyArg_NoKeywords("BufferedRWPair", kwargs)) + goto exit; + if (!PyArg_ParseTuple(args, + "OO|n:BufferedRWPair", + &reader, &writer, &buffer_size)) + goto exit; + return_value = _io_BufferedRWPair___init___impl((rwpair *)self, reader, writer, buffer_size); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_BufferedRandom___init____doc__, +"BufferedRandom(raw, buffer_size=DEFAULT_BUFFER_SIZE)\n" +"--\n" +"\n" +"A buffered interface to random access streams.\n" +"\n" +"The constructor creates a reader and writer for a seekable stream,\n" +"raw, given in the first argument. If the buffer_size is omitted it\n" +"defaults to DEFAULT_BUFFER_SIZE."); + +static int +_io_BufferedRandom___init___impl(buffered *self, PyObject *raw, + Py_ssize_t buffer_size); + +static int +_io_BufferedRandom___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static char *_keywords[] = {"raw", "buffer_size", NULL}; + PyObject *raw; + Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|n:BufferedRandom", _keywords, + &raw, &buffer_size)) + goto exit; + return_value = _io_BufferedRandom___init___impl((buffered *)self, raw, buffer_size); + +exit: + return return_value; +} +/*[clinic end generated code: output=78808e39f36e3fa9 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/bytesio.c.h b/Modules/_io/clinic/bytesio.c.h new file mode 100644 index 0000000000..695c46a7b3 --- /dev/null +++ b/Modules/_io/clinic/bytesio.c.h @@ -0,0 +1,426 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_io_BytesIO_readable__doc__, +"readable($self, /)\n" +"--\n" +"\n" +"Returns True if the IO object can be read."); + +#define _IO_BYTESIO_READABLE_METHODDEF \ + {"readable", (PyCFunction)_io_BytesIO_readable, METH_NOARGS, _io_BytesIO_readable__doc__}, + +static PyObject * +_io_BytesIO_readable_impl(bytesio *self); + +static PyObject * +_io_BytesIO_readable(bytesio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_BytesIO_readable_impl(self); +} + +PyDoc_STRVAR(_io_BytesIO_writable__doc__, +"writable($self, /)\n" +"--\n" +"\n" +"Returns True if the IO object can be written."); + +#define _IO_BYTESIO_WRITABLE_METHODDEF \ + {"writable", (PyCFunction)_io_BytesIO_writable, METH_NOARGS, _io_BytesIO_writable__doc__}, + +static PyObject * +_io_BytesIO_writable_impl(bytesio *self); + +static PyObject * +_io_BytesIO_writable(bytesio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_BytesIO_writable_impl(self); +} + +PyDoc_STRVAR(_io_BytesIO_seekable__doc__, +"seekable($self, /)\n" +"--\n" +"\n" +"Returns True if the IO object can be seeked."); + +#define _IO_BYTESIO_SEEKABLE_METHODDEF \ + {"seekable", (PyCFunction)_io_BytesIO_seekable, METH_NOARGS, _io_BytesIO_seekable__doc__}, + +static PyObject * +_io_BytesIO_seekable_impl(bytesio *self); + +static PyObject * +_io_BytesIO_seekable(bytesio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_BytesIO_seekable_impl(self); +} + +PyDoc_STRVAR(_io_BytesIO_flush__doc__, +"flush($self, /)\n" +"--\n" +"\n" +"Does nothing."); + +#define _IO_BYTESIO_FLUSH_METHODDEF \ + {"flush", (PyCFunction)_io_BytesIO_flush, METH_NOARGS, _io_BytesIO_flush__doc__}, + +static PyObject * +_io_BytesIO_flush_impl(bytesio *self); + +static PyObject * +_io_BytesIO_flush(bytesio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_BytesIO_flush_impl(self); +} + +PyDoc_STRVAR(_io_BytesIO_getbuffer__doc__, +"getbuffer($self, /)\n" +"--\n" +"\n" +"Get a read-write view over the contents of the BytesIO object."); + +#define _IO_BYTESIO_GETBUFFER_METHODDEF \ + {"getbuffer", (PyCFunction)_io_BytesIO_getbuffer, METH_NOARGS, _io_BytesIO_getbuffer__doc__}, + +static PyObject * +_io_BytesIO_getbuffer_impl(bytesio *self); + +static PyObject * +_io_BytesIO_getbuffer(bytesio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_BytesIO_getbuffer_impl(self); +} + +PyDoc_STRVAR(_io_BytesIO_getvalue__doc__, +"getvalue($self, /)\n" +"--\n" +"\n" +"Retrieve the entire contents of the BytesIO object."); + +#define _IO_BYTESIO_GETVALUE_METHODDEF \ + {"getvalue", (PyCFunction)_io_BytesIO_getvalue, METH_NOARGS, _io_BytesIO_getvalue__doc__}, + +static PyObject * +_io_BytesIO_getvalue_impl(bytesio *self); + +static PyObject * +_io_BytesIO_getvalue(bytesio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_BytesIO_getvalue_impl(self); +} + +PyDoc_STRVAR(_io_BytesIO_isatty__doc__, +"isatty($self, /)\n" +"--\n" +"\n" +"Always returns False.\n" +"\n" +"BytesIO objects are not connected to a TTY-like device."); + +#define _IO_BYTESIO_ISATTY_METHODDEF \ + {"isatty", (PyCFunction)_io_BytesIO_isatty, METH_NOARGS, _io_BytesIO_isatty__doc__}, + +static PyObject * +_io_BytesIO_isatty_impl(bytesio *self); + +static PyObject * +_io_BytesIO_isatty(bytesio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_BytesIO_isatty_impl(self); +} + +PyDoc_STRVAR(_io_BytesIO_tell__doc__, +"tell($self, /)\n" +"--\n" +"\n" +"Current file position, an integer."); + +#define _IO_BYTESIO_TELL_METHODDEF \ + {"tell", (PyCFunction)_io_BytesIO_tell, METH_NOARGS, _io_BytesIO_tell__doc__}, + +static PyObject * +_io_BytesIO_tell_impl(bytesio *self); + +static PyObject * +_io_BytesIO_tell(bytesio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_BytesIO_tell_impl(self); +} + +PyDoc_STRVAR(_io_BytesIO_read__doc__, +"read($self, size=None, /)\n" +"--\n" +"\n" +"Read at most size bytes, returned as a bytes object.\n" +"\n" +"If the size argument is negative, read until EOF is reached.\n" +"Return an empty bytes object at EOF."); + +#define _IO_BYTESIO_READ_METHODDEF \ + {"read", (PyCFunction)_io_BytesIO_read, METH_VARARGS, _io_BytesIO_read__doc__}, + +static PyObject * +_io_BytesIO_read_impl(bytesio *self, PyObject *arg); + +static PyObject * +_io_BytesIO_read(bytesio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *arg = Py_None; + + if (!PyArg_UnpackTuple(args, "read", + 0, 1, + &arg)) + goto exit; + return_value = _io_BytesIO_read_impl(self, arg); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_BytesIO_read1__doc__, +"read1($self, size, /)\n" +"--\n" +"\n" +"Read at most size bytes, returned as a bytes object.\n" +"\n" +"If the size argument is negative or omitted, read until EOF is reached.\n" +"Return an empty bytes object at EOF."); + +#define _IO_BYTESIO_READ1_METHODDEF \ + {"read1", (PyCFunction)_io_BytesIO_read1, METH_O, _io_BytesIO_read1__doc__}, + +PyDoc_STRVAR(_io_BytesIO_readline__doc__, +"readline($self, size=None, /)\n" +"--\n" +"\n" +"Next line from the file, as a bytes object.\n" +"\n" +"Retain newline. A non-negative size argument limits the maximum\n" +"number of bytes to return (an incomplete line may be returned then).\n" +"Return an empty bytes object at EOF."); + +#define _IO_BYTESIO_READLINE_METHODDEF \ + {"readline", (PyCFunction)_io_BytesIO_readline, METH_VARARGS, _io_BytesIO_readline__doc__}, + +static PyObject * +_io_BytesIO_readline_impl(bytesio *self, PyObject *arg); + +static PyObject * +_io_BytesIO_readline(bytesio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *arg = Py_None; + + if (!PyArg_UnpackTuple(args, "readline", + 0, 1, + &arg)) + goto exit; + return_value = _io_BytesIO_readline_impl(self, arg); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_BytesIO_readlines__doc__, +"readlines($self, size=None, /)\n" +"--\n" +"\n" +"List of bytes objects, each a line from the file.\n" +"\n" +"Call readline() repeatedly and return a list of the lines so read.\n" +"The optional size argument, if given, is an approximate bound on the\n" +"total number of bytes in the lines returned."); + +#define _IO_BYTESIO_READLINES_METHODDEF \ + {"readlines", (PyCFunction)_io_BytesIO_readlines, METH_VARARGS, _io_BytesIO_readlines__doc__}, + +static PyObject * +_io_BytesIO_readlines_impl(bytesio *self, PyObject *arg); + +static PyObject * +_io_BytesIO_readlines(bytesio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *arg = Py_None; + + if (!PyArg_UnpackTuple(args, "readlines", + 0, 1, + &arg)) + goto exit; + return_value = _io_BytesIO_readlines_impl(self, arg); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_BytesIO_readinto__doc__, +"readinto($self, buffer, /)\n" +"--\n" +"\n" +"Read up to len(buffer) bytes into buffer.\n" +"\n" +"Returns number of bytes read (0 for EOF), or None if the object\n" +"is set not to block as has no data to read."); + +#define _IO_BYTESIO_READINTO_METHODDEF \ + {"readinto", (PyCFunction)_io_BytesIO_readinto, METH_O, _io_BytesIO_readinto__doc__}, + +static PyObject * +_io_BytesIO_readinto_impl(bytesio *self, Py_buffer *buffer); + +static PyObject * +_io_BytesIO_readinto(bytesio *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer buffer = {NULL, NULL}; + + if (!PyArg_Parse(arg, + "w*:readinto", + &buffer)) + goto exit; + return_value = _io_BytesIO_readinto_impl(self, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +PyDoc_STRVAR(_io_BytesIO_truncate__doc__, +"truncate($self, size=None, /)\n" +"--\n" +"\n" +"Truncate the file to at most size bytes.\n" +"\n" +"Size defaults to the current file position, as returned by tell().\n" +"The current file position is unchanged. Returns the new size."); + +#define _IO_BYTESIO_TRUNCATE_METHODDEF \ + {"truncate", (PyCFunction)_io_BytesIO_truncate, METH_VARARGS, _io_BytesIO_truncate__doc__}, + +static PyObject * +_io_BytesIO_truncate_impl(bytesio *self, PyObject *arg); + +static PyObject * +_io_BytesIO_truncate(bytesio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *arg = Py_None; + + if (!PyArg_UnpackTuple(args, "truncate", + 0, 1, + &arg)) + goto exit; + return_value = _io_BytesIO_truncate_impl(self, arg); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_BytesIO_seek__doc__, +"seek($self, pos, whence=0, /)\n" +"--\n" +"\n" +"Change stream position.\n" +"\n" +"Seek to byte offset pos relative to position indicated by whence:\n" +" 0 Start of stream (the default). pos should be >= 0;\n" +" 1 Current position - pos may be negative;\n" +" 2 End of stream - pos usually negative.\n" +"Returns the new absolute position."); + +#define _IO_BYTESIO_SEEK_METHODDEF \ + {"seek", (PyCFunction)_io_BytesIO_seek, METH_VARARGS, _io_BytesIO_seek__doc__}, + +static PyObject * +_io_BytesIO_seek_impl(bytesio *self, Py_ssize_t pos, int whence); + +static PyObject * +_io_BytesIO_seek(bytesio *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t pos; + int whence = 0; + + if (!PyArg_ParseTuple(args, + "n|i:seek", + &pos, &whence)) + goto exit; + return_value = _io_BytesIO_seek_impl(self, pos, whence); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_BytesIO_write__doc__, +"write($self, b, /)\n" +"--\n" +"\n" +"Write bytes to file.\n" +"\n" +"Return the number of bytes written."); + +#define _IO_BYTESIO_WRITE_METHODDEF \ + {"write", (PyCFunction)_io_BytesIO_write, METH_O, _io_BytesIO_write__doc__}, + +PyDoc_STRVAR(_io_BytesIO_writelines__doc__, +"writelines($self, lines, /)\n" +"--\n" +"\n" +"Write lines to the file.\n" +"\n" +"Note that newlines are not added. lines can be any iterable object\n" +"producing bytes-like objects. This is equivalent to calling write() for\n" +"each element."); + +#define _IO_BYTESIO_WRITELINES_METHODDEF \ + {"writelines", (PyCFunction)_io_BytesIO_writelines, METH_O, _io_BytesIO_writelines__doc__}, + +PyDoc_STRVAR(_io_BytesIO_close__doc__, +"close($self, /)\n" +"--\n" +"\n" +"Disable all I/O operations."); + +#define _IO_BYTESIO_CLOSE_METHODDEF \ + {"close", (PyCFunction)_io_BytesIO_close, METH_NOARGS, _io_BytesIO_close__doc__}, + +static PyObject * +_io_BytesIO_close_impl(bytesio *self); + +static PyObject * +_io_BytesIO_close(bytesio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_BytesIO_close_impl(self); +} + +PyDoc_STRVAR(_io_BytesIO___init____doc__, +"BytesIO(initial_bytes=b\'\')\n" +"--\n" +"\n" +"Buffered I/O implementation using an in-memory bytes buffer."); + +static int +_io_BytesIO___init___impl(bytesio *self, PyObject *initvalue); + +static int +_io_BytesIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static char *_keywords[] = {"initial_bytes", NULL}; + PyObject *initvalue = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|O:BytesIO", _keywords, + &initvalue)) + goto exit; + return_value = _io_BytesIO___init___impl((bytesio *)self, initvalue); + +exit: + return return_value; +} +/*[clinic end generated code: output=e22697ada514f4eb input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/fileio.c.h b/Modules/_io/clinic/fileio.c.h new file mode 100644 index 0000000000..bb68cc9926 --- /dev/null +++ b/Modules/_io/clinic/fileio.c.h @@ -0,0 +1,374 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_io_FileIO_close__doc__, +"close($self, /)\n" +"--\n" +"\n" +"Close the file.\n" +"\n" +"A closed file cannot be used for further I/O operations. close() may be\n" +"called more than once without error."); + +#define _IO_FILEIO_CLOSE_METHODDEF \ + {"close", (PyCFunction)_io_FileIO_close, METH_NOARGS, _io_FileIO_close__doc__}, + +static PyObject * +_io_FileIO_close_impl(fileio *self); + +static PyObject * +_io_FileIO_close(fileio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_FileIO_close_impl(self); +} + +PyDoc_STRVAR(_io_FileIO___init____doc__, +"FileIO(file, mode=\'r\', closefd=True, opener=None)\n" +"--\n" +"\n" +"Open a file.\n" +"\n" +"The mode can be \'r\' (default), \'w\', \'x\' or \'a\' for reading,\n" +"writing, exclusive creation or appending. The file will be created if it\n" +"doesn\'t exist when opened for writing or appending; it will be truncated\n" +"when opened for writing. A FileExistsError will be raised if it already\n" +"exists when opened for creating. Opening a file for creating implies\n" +"writing so this mode behaves in a similar way to \'w\'.Add a \'+\' to the mode\n" +"to allow simultaneous reading and writing. A custom opener can be used by\n" +"passing a callable as *opener*. The underlying file descriptor for the file\n" +"object is then obtained by calling opener with (*name*, *flags*).\n" +"*opener* must return an open file descriptor (passing os.open as *opener*\n" +"results in functionality similar to passing None)."); + +static int +_io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode, + int closefd, PyObject *opener); + +static int +_io_FileIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static char *_keywords[] = {"file", "mode", "closefd", "opener", NULL}; + PyObject *nameobj; + const char *mode = "r"; + int closefd = 1; + PyObject *opener = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|siO:FileIO", _keywords, + &nameobj, &mode, &closefd, &opener)) + goto exit; + return_value = _io_FileIO___init___impl((fileio *)self, nameobj, mode, closefd, opener); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_FileIO_fileno__doc__, +"fileno($self, /)\n" +"--\n" +"\n" +"Return the underlying file descriptor (an integer)."); + +#define _IO_FILEIO_FILENO_METHODDEF \ + {"fileno", (PyCFunction)_io_FileIO_fileno, METH_NOARGS, _io_FileIO_fileno__doc__}, + +static PyObject * +_io_FileIO_fileno_impl(fileio *self); + +static PyObject * +_io_FileIO_fileno(fileio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_FileIO_fileno_impl(self); +} + +PyDoc_STRVAR(_io_FileIO_readable__doc__, +"readable($self, /)\n" +"--\n" +"\n" +"True if file was opened in a read mode."); + +#define _IO_FILEIO_READABLE_METHODDEF \ + {"readable", (PyCFunction)_io_FileIO_readable, METH_NOARGS, _io_FileIO_readable__doc__}, + +static PyObject * +_io_FileIO_readable_impl(fileio *self); + +static PyObject * +_io_FileIO_readable(fileio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_FileIO_readable_impl(self); +} + +PyDoc_STRVAR(_io_FileIO_writable__doc__, +"writable($self, /)\n" +"--\n" +"\n" +"True if file was opened in a write mode."); + +#define _IO_FILEIO_WRITABLE_METHODDEF \ + {"writable", (PyCFunction)_io_FileIO_writable, METH_NOARGS, _io_FileIO_writable__doc__}, + +static PyObject * +_io_FileIO_writable_impl(fileio *self); + +static PyObject * +_io_FileIO_writable(fileio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_FileIO_writable_impl(self); +} + +PyDoc_STRVAR(_io_FileIO_seekable__doc__, +"seekable($self, /)\n" +"--\n" +"\n" +"True if file supports random-access."); + +#define _IO_FILEIO_SEEKABLE_METHODDEF \ + {"seekable", (PyCFunction)_io_FileIO_seekable, METH_NOARGS, _io_FileIO_seekable__doc__}, + +static PyObject * +_io_FileIO_seekable_impl(fileio *self); + +static PyObject * +_io_FileIO_seekable(fileio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_FileIO_seekable_impl(self); +} + +PyDoc_STRVAR(_io_FileIO_readinto__doc__, +"readinto($self, buffer, /)\n" +"--\n" +"\n" +"Same as RawIOBase.readinto()."); + +#define _IO_FILEIO_READINTO_METHODDEF \ + {"readinto", (PyCFunction)_io_FileIO_readinto, METH_O, _io_FileIO_readinto__doc__}, + +static PyObject * +_io_FileIO_readinto_impl(fileio *self, Py_buffer *buffer); + +static PyObject * +_io_FileIO_readinto(fileio *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer buffer = {NULL, NULL}; + + if (!PyArg_Parse(arg, + "w*:readinto", + &buffer)) + goto exit; + return_value = _io_FileIO_readinto_impl(self, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +PyDoc_STRVAR(_io_FileIO_readall__doc__, +"readall($self, /)\n" +"--\n" +"\n" +"Read all data from the file, returned as bytes.\n" +"\n" +"In non-blocking mode, returns as much as is immediately available,\n" +"or None if no data is available. Return an empty bytes object at EOF."); + +#define _IO_FILEIO_READALL_METHODDEF \ + {"readall", (PyCFunction)_io_FileIO_readall, METH_NOARGS, _io_FileIO_readall__doc__}, + +static PyObject * +_io_FileIO_readall_impl(fileio *self); + +static PyObject * +_io_FileIO_readall(fileio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_FileIO_readall_impl(self); +} + +PyDoc_STRVAR(_io_FileIO_read__doc__, +"read($self, size=-1, /)\n" +"--\n" +"\n" +"Read at most size bytes, returned as bytes.\n" +"\n" +"Only makes one system call, so less data may be returned than requested.\n" +"In non-blocking mode, returns None if no data is available.\n" +"Return an empty bytes object at EOF."); + +#define _IO_FILEIO_READ_METHODDEF \ + {"read", (PyCFunction)_io_FileIO_read, METH_VARARGS, _io_FileIO_read__doc__}, + +static PyObject * +_io_FileIO_read_impl(fileio *self, Py_ssize_t size); + +static PyObject * +_io_FileIO_read(fileio *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t size = -1; + + if (!PyArg_ParseTuple(args, + "|O&:read", + _PyIO_ConvertSsize_t, &size)) + goto exit; + return_value = _io_FileIO_read_impl(self, size); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_FileIO_write__doc__, +"write($self, b, /)\n" +"--\n" +"\n" +"Write bytes b to file, return number written.\n" +"\n" +"Only makes one system call, so not all of the data may be written.\n" +"The number of bytes actually written is returned. In non-blocking mode,\n" +"returns None if the write would block."); + +#define _IO_FILEIO_WRITE_METHODDEF \ + {"write", (PyCFunction)_io_FileIO_write, METH_O, _io_FileIO_write__doc__}, + +static PyObject * +_io_FileIO_write_impl(fileio *self, Py_buffer *b); + +static PyObject * +_io_FileIO_write(fileio *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer b = {NULL, NULL}; + + if (!PyArg_Parse(arg, + "y*:write", + &b)) + goto exit; + return_value = _io_FileIO_write_impl(self, &b); + +exit: + /* Cleanup for b */ + if (b.obj) + PyBuffer_Release(&b); + + return return_value; +} + +PyDoc_STRVAR(_io_FileIO_seek__doc__, +"seek($self, pos, whence=0, /)\n" +"--\n" +"\n" +"Move to new file position and return the file position.\n" +"\n" +"Argument offset is a byte count. Optional argument whence defaults to\n" +"SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values\n" +"are SEEK_CUR or 1 (move relative to current position, positive or negative),\n" +"and SEEK_END or 2 (move relative to end of file, usually negative, although\n" +"many platforms allow seeking beyond the end of a file).\n" +"\n" +"Note that not all file objects are seekable."); + +#define _IO_FILEIO_SEEK_METHODDEF \ + {"seek", (PyCFunction)_io_FileIO_seek, METH_VARARGS, _io_FileIO_seek__doc__}, + +static PyObject * +_io_FileIO_seek_impl(fileio *self, PyObject *pos, int whence); + +static PyObject * +_io_FileIO_seek(fileio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *pos; + int whence = 0; + + if (!PyArg_ParseTuple(args, + "O|i:seek", + &pos, &whence)) + goto exit; + return_value = _io_FileIO_seek_impl(self, pos, whence); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_FileIO_tell__doc__, +"tell($self, /)\n" +"--\n" +"\n" +"Current file position.\n" +"\n" +"Can raise OSError for non seekable files."); + +#define _IO_FILEIO_TELL_METHODDEF \ + {"tell", (PyCFunction)_io_FileIO_tell, METH_NOARGS, _io_FileIO_tell__doc__}, + +static PyObject * +_io_FileIO_tell_impl(fileio *self); + +static PyObject * +_io_FileIO_tell(fileio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_FileIO_tell_impl(self); +} + +#if defined(HAVE_FTRUNCATE) + +PyDoc_STRVAR(_io_FileIO_truncate__doc__, +"truncate($self, size=None, /)\n" +"--\n" +"\n" +"Truncate the file to at most size bytes and return the truncated size.\n" +"\n" +"Size defaults to the current file position, as returned by tell().\n" +"The current file position is changed to the value of size."); + +#define _IO_FILEIO_TRUNCATE_METHODDEF \ + {"truncate", (PyCFunction)_io_FileIO_truncate, METH_VARARGS, _io_FileIO_truncate__doc__}, + +static PyObject * +_io_FileIO_truncate_impl(fileio *self, PyObject *posobj); + +static PyObject * +_io_FileIO_truncate(fileio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *posobj = NULL; + + if (!PyArg_UnpackTuple(args, "truncate", + 0, 1, + &posobj)) + goto exit; + return_value = _io_FileIO_truncate_impl(self, posobj); + +exit: + return return_value; +} + +#endif /* defined(HAVE_FTRUNCATE) */ + +PyDoc_STRVAR(_io_FileIO_isatty__doc__, +"isatty($self, /)\n" +"--\n" +"\n" +"True if the file is connected to a TTY device."); + +#define _IO_FILEIO_ISATTY_METHODDEF \ + {"isatty", (PyCFunction)_io_FileIO_isatty, METH_NOARGS, _io_FileIO_isatty__doc__}, + +static PyObject * +_io_FileIO_isatty_impl(fileio *self); + +static PyObject * +_io_FileIO_isatty(fileio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_FileIO_isatty_impl(self); +} + +#ifndef _IO_FILEIO_TRUNCATE_METHODDEF + #define _IO_FILEIO_TRUNCATE_METHODDEF +#endif /* !defined(_IO_FILEIO_TRUNCATE_METHODDEF) */ +/*[clinic end generated code: output=c6708e1980f6e02d input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/iobase.c.h b/Modules/_io/clinic/iobase.c.h new file mode 100644 index 0000000000..ce47faadc4 --- /dev/null +++ b/Modules/_io/clinic/iobase.c.h @@ -0,0 +1,282 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_io__IOBase_tell__doc__, +"tell($self, /)\n" +"--\n" +"\n" +"Return current stream position."); + +#define _IO__IOBASE_TELL_METHODDEF \ + {"tell", (PyCFunction)_io__IOBase_tell, METH_NOARGS, _io__IOBase_tell__doc__}, + +static PyObject * +_io__IOBase_tell_impl(PyObject *self); + +static PyObject * +_io__IOBase_tell(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__IOBase_tell_impl(self); +} + +PyDoc_STRVAR(_io__IOBase_flush__doc__, +"flush($self, /)\n" +"--\n" +"\n" +"Flush write buffers, if applicable.\n" +"\n" +"This is not implemented for read-only and non-blocking streams."); + +#define _IO__IOBASE_FLUSH_METHODDEF \ + {"flush", (PyCFunction)_io__IOBase_flush, METH_NOARGS, _io__IOBase_flush__doc__}, + +static PyObject * +_io__IOBase_flush_impl(PyObject *self); + +static PyObject * +_io__IOBase_flush(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__IOBase_flush_impl(self); +} + +PyDoc_STRVAR(_io__IOBase_close__doc__, +"close($self, /)\n" +"--\n" +"\n" +"Flush and close the IO object.\n" +"\n" +"This method has no effect if the file is already closed."); + +#define _IO__IOBASE_CLOSE_METHODDEF \ + {"close", (PyCFunction)_io__IOBase_close, METH_NOARGS, _io__IOBase_close__doc__}, + +static PyObject * +_io__IOBase_close_impl(PyObject *self); + +static PyObject * +_io__IOBase_close(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__IOBase_close_impl(self); +} + +PyDoc_STRVAR(_io__IOBase_seekable__doc__, +"seekable($self, /)\n" +"--\n" +"\n" +"Return whether object supports random access.\n" +"\n" +"If False, seek(), tell() and truncate() will raise UnsupportedOperation.\n" +"This method may need to do a test seek()."); + +#define _IO__IOBASE_SEEKABLE_METHODDEF \ + {"seekable", (PyCFunction)_io__IOBase_seekable, METH_NOARGS, _io__IOBase_seekable__doc__}, + +static PyObject * +_io__IOBase_seekable_impl(PyObject *self); + +static PyObject * +_io__IOBase_seekable(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__IOBase_seekable_impl(self); +} + +PyDoc_STRVAR(_io__IOBase_readable__doc__, +"readable($self, /)\n" +"--\n" +"\n" +"Return whether object was opened for reading.\n" +"\n" +"If False, read() will raise UnsupportedOperation."); + +#define _IO__IOBASE_READABLE_METHODDEF \ + {"readable", (PyCFunction)_io__IOBase_readable, METH_NOARGS, _io__IOBase_readable__doc__}, + +static PyObject * +_io__IOBase_readable_impl(PyObject *self); + +static PyObject * +_io__IOBase_readable(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__IOBase_readable_impl(self); +} + +PyDoc_STRVAR(_io__IOBase_writable__doc__, +"writable($self, /)\n" +"--\n" +"\n" +"Return whether object was opened for writing.\n" +"\n" +"If False, write() will raise UnsupportedOperation."); + +#define _IO__IOBASE_WRITABLE_METHODDEF \ + {"writable", (PyCFunction)_io__IOBase_writable, METH_NOARGS, _io__IOBase_writable__doc__}, + +static PyObject * +_io__IOBase_writable_impl(PyObject *self); + +static PyObject * +_io__IOBase_writable(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__IOBase_writable_impl(self); +} + +PyDoc_STRVAR(_io__IOBase_fileno__doc__, +"fileno($self, /)\n" +"--\n" +"\n" +"Returns underlying file descriptor if one exists.\n" +"\n" +"An IOError is raised if the IO object does not use a file descriptor."); + +#define _IO__IOBASE_FILENO_METHODDEF \ + {"fileno", (PyCFunction)_io__IOBase_fileno, METH_NOARGS, _io__IOBase_fileno__doc__}, + +static PyObject * +_io__IOBase_fileno_impl(PyObject *self); + +static PyObject * +_io__IOBase_fileno(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__IOBase_fileno_impl(self); +} + +PyDoc_STRVAR(_io__IOBase_isatty__doc__, +"isatty($self, /)\n" +"--\n" +"\n" +"Return whether this is an \'interactive\' stream.\n" +"\n" +"Return False if it can\'t be determined."); + +#define _IO__IOBASE_ISATTY_METHODDEF \ + {"isatty", (PyCFunction)_io__IOBase_isatty, METH_NOARGS, _io__IOBase_isatty__doc__}, + +static PyObject * +_io__IOBase_isatty_impl(PyObject *self); + +static PyObject * +_io__IOBase_isatty(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__IOBase_isatty_impl(self); +} + +PyDoc_STRVAR(_io__IOBase_readline__doc__, +"readline($self, size=-1, /)\n" +"--\n" +"\n" +"Read and return a line from the stream.\n" +"\n" +"If size is specified, at most size bytes will be read.\n" +"\n" +"The line terminator is always b\'\\n\' for binary files; for text\n" +"files, the newlines argument to open can be used to select the line\n" +"terminator(s) recognized."); + +#define _IO__IOBASE_READLINE_METHODDEF \ + {"readline", (PyCFunction)_io__IOBase_readline, METH_VARARGS, _io__IOBase_readline__doc__}, + +static PyObject * +_io__IOBase_readline_impl(PyObject *self, Py_ssize_t limit); + +static PyObject * +_io__IOBase_readline(PyObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t limit = -1; + + if (!PyArg_ParseTuple(args, + "|O&:readline", + _PyIO_ConvertSsize_t, &limit)) + goto exit; + return_value = _io__IOBase_readline_impl(self, limit); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io__IOBase_readlines__doc__, +"readlines($self, hint=-1, /)\n" +"--\n" +"\n" +"Return a list of lines from the stream.\n" +"\n" +"hint can be specified to control the number of lines read: no more\n" +"lines will be read if the total size (in bytes/characters) of all\n" +"lines so far exceeds hint."); + +#define _IO__IOBASE_READLINES_METHODDEF \ + {"readlines", (PyCFunction)_io__IOBase_readlines, METH_VARARGS, _io__IOBase_readlines__doc__}, + +static PyObject * +_io__IOBase_readlines_impl(PyObject *self, Py_ssize_t hint); + +static PyObject * +_io__IOBase_readlines(PyObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t hint = -1; + + if (!PyArg_ParseTuple(args, + "|O&:readlines", + _PyIO_ConvertSsize_t, &hint)) + goto exit; + return_value = _io__IOBase_readlines_impl(self, hint); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io__IOBase_writelines__doc__, +"writelines($self, lines, /)\n" +"--\n" +"\n"); + +#define _IO__IOBASE_WRITELINES_METHODDEF \ + {"writelines", (PyCFunction)_io__IOBase_writelines, METH_O, _io__IOBase_writelines__doc__}, + +PyDoc_STRVAR(_io__RawIOBase_read__doc__, +"read($self, size=-1, /)\n" +"--\n" +"\n"); + +#define _IO__RAWIOBASE_READ_METHODDEF \ + {"read", (PyCFunction)_io__RawIOBase_read, METH_VARARGS, _io__RawIOBase_read__doc__}, + +static PyObject * +_io__RawIOBase_read_impl(PyObject *self, Py_ssize_t n); + +static PyObject * +_io__RawIOBase_read(PyObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t n = -1; + + if (!PyArg_ParseTuple(args, + "|n:read", + &n)) + goto exit; + return_value = _io__RawIOBase_read_impl(self, n); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io__RawIOBase_readall__doc__, +"readall($self, /)\n" +"--\n" +"\n" +"Read until EOF, using multiple read() call."); + +#define _IO__RAWIOBASE_READALL_METHODDEF \ + {"readall", (PyCFunction)_io__RawIOBase_readall, METH_NOARGS, _io__RawIOBase_readall__doc__}, + +static PyObject * +_io__RawIOBase_readall_impl(PyObject *self); + +static PyObject * +_io__RawIOBase_readall(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__RawIOBase_readall_impl(self); +} +/*[clinic end generated code: output=84eef4b7541f54b7 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/stringio.c.h b/Modules/_io/clinic/stringio.c.h new file mode 100644 index 0000000000..b830c6d3fb --- /dev/null +++ b/Modules/_io/clinic/stringio.c.h @@ -0,0 +1,288 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_io_StringIO_getvalue__doc__, +"getvalue($self, /)\n" +"--\n" +"\n" +"Retrieve the entire contents of the object."); + +#define _IO_STRINGIO_GETVALUE_METHODDEF \ + {"getvalue", (PyCFunction)_io_StringIO_getvalue, METH_NOARGS, _io_StringIO_getvalue__doc__}, + +static PyObject * +_io_StringIO_getvalue_impl(stringio *self); + +static PyObject * +_io_StringIO_getvalue(stringio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_StringIO_getvalue_impl(self); +} + +PyDoc_STRVAR(_io_StringIO_tell__doc__, +"tell($self, /)\n" +"--\n" +"\n" +"Tell the current file position."); + +#define _IO_STRINGIO_TELL_METHODDEF \ + {"tell", (PyCFunction)_io_StringIO_tell, METH_NOARGS, _io_StringIO_tell__doc__}, + +static PyObject * +_io_StringIO_tell_impl(stringio *self); + +static PyObject * +_io_StringIO_tell(stringio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_StringIO_tell_impl(self); +} + +PyDoc_STRVAR(_io_StringIO_read__doc__, +"read($self, size=None, /)\n" +"--\n" +"\n" +"Read at most size characters, returned as a string.\n" +"\n" +"If the argument is negative or omitted, read until EOF\n" +"is reached. Return an empty string at EOF."); + +#define _IO_STRINGIO_READ_METHODDEF \ + {"read", (PyCFunction)_io_StringIO_read, METH_VARARGS, _io_StringIO_read__doc__}, + +static PyObject * +_io_StringIO_read_impl(stringio *self, PyObject *arg); + +static PyObject * +_io_StringIO_read(stringio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *arg = Py_None; + + if (!PyArg_UnpackTuple(args, "read", + 0, 1, + &arg)) + goto exit; + return_value = _io_StringIO_read_impl(self, arg); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_StringIO_readline__doc__, +"readline($self, size=None, /)\n" +"--\n" +"\n" +"Read until newline or EOF.\n" +"\n" +"Returns an empty string if EOF is hit immediately."); + +#define _IO_STRINGIO_READLINE_METHODDEF \ + {"readline", (PyCFunction)_io_StringIO_readline, METH_VARARGS, _io_StringIO_readline__doc__}, + +static PyObject * +_io_StringIO_readline_impl(stringio *self, PyObject *arg); + +static PyObject * +_io_StringIO_readline(stringio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *arg = Py_None; + + if (!PyArg_UnpackTuple(args, "readline", + 0, 1, + &arg)) + goto exit; + return_value = _io_StringIO_readline_impl(self, arg); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_StringIO_truncate__doc__, +"truncate($self, pos=None, /)\n" +"--\n" +"\n" +"Truncate size to pos.\n" +"\n" +"The pos argument defaults to the current file position, as\n" +"returned by tell(). The current file position is unchanged.\n" +"Returns the new absolute position."); + +#define _IO_STRINGIO_TRUNCATE_METHODDEF \ + {"truncate", (PyCFunction)_io_StringIO_truncate, METH_VARARGS, _io_StringIO_truncate__doc__}, + +static PyObject * +_io_StringIO_truncate_impl(stringio *self, PyObject *arg); + +static PyObject * +_io_StringIO_truncate(stringio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *arg = Py_None; + + if (!PyArg_UnpackTuple(args, "truncate", + 0, 1, + &arg)) + goto exit; + return_value = _io_StringIO_truncate_impl(self, arg); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_StringIO_seek__doc__, +"seek($self, pos, whence=0, /)\n" +"--\n" +"\n" +"Change stream position.\n" +"\n" +"Seek to character offset pos relative to position indicated by whence:\n" +" 0 Start of stream (the default). pos should be >= 0;\n" +" 1 Current position - pos must be 0;\n" +" 2 End of stream - pos must be 0.\n" +"Returns the new absolute position."); + +#define _IO_STRINGIO_SEEK_METHODDEF \ + {"seek", (PyCFunction)_io_StringIO_seek, METH_VARARGS, _io_StringIO_seek__doc__}, + +static PyObject * +_io_StringIO_seek_impl(stringio *self, Py_ssize_t pos, int whence); + +static PyObject * +_io_StringIO_seek(stringio *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t pos; + int whence = 0; + + if (!PyArg_ParseTuple(args, + "n|i:seek", + &pos, &whence)) + goto exit; + return_value = _io_StringIO_seek_impl(self, pos, whence); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_StringIO_write__doc__, +"write($self, s, /)\n" +"--\n" +"\n" +"Write string to file.\n" +"\n" +"Returns the number of characters written, which is always equal to\n" +"the length of the string."); + +#define _IO_STRINGIO_WRITE_METHODDEF \ + {"write", (PyCFunction)_io_StringIO_write, METH_O, _io_StringIO_write__doc__}, + +PyDoc_STRVAR(_io_StringIO_close__doc__, +"close($self, /)\n" +"--\n" +"\n" +"Close the IO object.\n" +"\n" +"Attempting any further operation after the object is closed\n" +"will raise a ValueError.\n" +"\n" +"This method has no effect if the file is already closed."); + +#define _IO_STRINGIO_CLOSE_METHODDEF \ + {"close", (PyCFunction)_io_StringIO_close, METH_NOARGS, _io_StringIO_close__doc__}, + +static PyObject * +_io_StringIO_close_impl(stringio *self); + +static PyObject * +_io_StringIO_close(stringio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_StringIO_close_impl(self); +} + +PyDoc_STRVAR(_io_StringIO___init____doc__, +"StringIO(initial_value=\'\', newline=\'\\n\')\n" +"--\n" +"\n" +"Text I/O implementation using an in-memory buffer.\n" +"\n" +"The initial_value argument sets the value of object. The newline\n" +"argument is like the one of TextIOWrapper\'s constructor."); + +static int +_io_StringIO___init___impl(stringio *self, PyObject *value, + PyObject *newline_obj); + +static int +_io_StringIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static char *_keywords[] = {"initial_value", "newline", NULL}; + PyObject *value = NULL; + PyObject *newline_obj = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|OO:StringIO", _keywords, + &value, &newline_obj)) + goto exit; + return_value = _io_StringIO___init___impl((stringio *)self, value, newline_obj); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_StringIO_readable__doc__, +"readable($self, /)\n" +"--\n" +"\n" +"Returns True if the IO object can be read."); + +#define _IO_STRINGIO_READABLE_METHODDEF \ + {"readable", (PyCFunction)_io_StringIO_readable, METH_NOARGS, _io_StringIO_readable__doc__}, + +static PyObject * +_io_StringIO_readable_impl(stringio *self); + +static PyObject * +_io_StringIO_readable(stringio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_StringIO_readable_impl(self); +} + +PyDoc_STRVAR(_io_StringIO_writable__doc__, +"writable($self, /)\n" +"--\n" +"\n" +"Returns True if the IO object can be written."); + +#define _IO_STRINGIO_WRITABLE_METHODDEF \ + {"writable", (PyCFunction)_io_StringIO_writable, METH_NOARGS, _io_StringIO_writable__doc__}, + +static PyObject * +_io_StringIO_writable_impl(stringio *self); + +static PyObject * +_io_StringIO_writable(stringio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_StringIO_writable_impl(self); +} + +PyDoc_STRVAR(_io_StringIO_seekable__doc__, +"seekable($self, /)\n" +"--\n" +"\n" +"Returns True if the IO object can be seeked."); + +#define _IO_STRINGIO_SEEKABLE_METHODDEF \ + {"seekable", (PyCFunction)_io_StringIO_seekable, METH_NOARGS, _io_StringIO_seekable__doc__}, + +static PyObject * +_io_StringIO_seekable_impl(stringio *self); + +static PyObject * +_io_StringIO_seekable(stringio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_StringIO_seekable_impl(self); +} +/*[clinic end generated code: output=f3062096d357c652 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/textio.c.h b/Modules/_io/clinic/textio.c.h new file mode 100644 index 0000000000..62603bd739 --- /dev/null +++ b/Modules/_io/clinic/textio.c.h @@ -0,0 +1,464 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_io_IncrementalNewlineDecoder___init____doc__, +"IncrementalNewlineDecoder(decoder, translate, errors=\'strict\')\n" +"--\n" +"\n" +"Codec used when reading a file in universal newlines mode.\n" +"\n" +"It wraps another incremental decoder, translating \\r\\n and \\r into \\n.\n" +"It also records the types of newlines encountered. When used with\n" +"translate=False, it ensures that the newline sequence is returned in\n" +"one piece. When used with decoder=None, it expects unicode strings as\n" +"decode input and translates newlines without first invoking an external\n" +"decoder."); + +static int +_io_IncrementalNewlineDecoder___init___impl(nldecoder_object *self, + PyObject *decoder, int translate, + PyObject *errors); + +static int +_io_IncrementalNewlineDecoder___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static char *_keywords[] = {"decoder", "translate", "errors", NULL}; + PyObject *decoder; + int translate; + PyObject *errors = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "Oi|O:IncrementalNewlineDecoder", _keywords, + &decoder, &translate, &errors)) + goto exit; + return_value = _io_IncrementalNewlineDecoder___init___impl((nldecoder_object *)self, decoder, translate, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_IncrementalNewlineDecoder_decode__doc__, +"decode($self, /, input, final=False)\n" +"--\n" +"\n"); + +#define _IO_INCREMENTALNEWLINEDECODER_DECODE_METHODDEF \ + {"decode", (PyCFunction)_io_IncrementalNewlineDecoder_decode, METH_VARARGS|METH_KEYWORDS, _io_IncrementalNewlineDecoder_decode__doc__}, + +static PyObject * +_io_IncrementalNewlineDecoder_decode_impl(nldecoder_object *self, + PyObject *input, int final); + +static PyObject * +_io_IncrementalNewlineDecoder_decode(nldecoder_object *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"input", "final", NULL}; + PyObject *input; + int final = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|i:decode", _keywords, + &input, &final)) + goto exit; + return_value = _io_IncrementalNewlineDecoder_decode_impl(self, input, final); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_IncrementalNewlineDecoder_getstate__doc__, +"getstate($self, /)\n" +"--\n" +"\n"); + +#define _IO_INCREMENTALNEWLINEDECODER_GETSTATE_METHODDEF \ + {"getstate", (PyCFunction)_io_IncrementalNewlineDecoder_getstate, METH_NOARGS, _io_IncrementalNewlineDecoder_getstate__doc__}, + +static PyObject * +_io_IncrementalNewlineDecoder_getstate_impl(nldecoder_object *self); + +static PyObject * +_io_IncrementalNewlineDecoder_getstate(nldecoder_object *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_IncrementalNewlineDecoder_getstate_impl(self); +} + +PyDoc_STRVAR(_io_IncrementalNewlineDecoder_setstate__doc__, +"setstate($self, state, /)\n" +"--\n" +"\n"); + +#define _IO_INCREMENTALNEWLINEDECODER_SETSTATE_METHODDEF \ + {"setstate", (PyCFunction)_io_IncrementalNewlineDecoder_setstate, METH_O, _io_IncrementalNewlineDecoder_setstate__doc__}, + +PyDoc_STRVAR(_io_IncrementalNewlineDecoder_reset__doc__, +"reset($self, /)\n" +"--\n" +"\n"); + +#define _IO_INCREMENTALNEWLINEDECODER_RESET_METHODDEF \ + {"reset", (PyCFunction)_io_IncrementalNewlineDecoder_reset, METH_NOARGS, _io_IncrementalNewlineDecoder_reset__doc__}, + +static PyObject * +_io_IncrementalNewlineDecoder_reset_impl(nldecoder_object *self); + +static PyObject * +_io_IncrementalNewlineDecoder_reset(nldecoder_object *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_IncrementalNewlineDecoder_reset_impl(self); +} + +PyDoc_STRVAR(_io_TextIOWrapper___init____doc__, +"TextIOWrapper(buffer, encoding=None, errors=None, newline=None,\n" +" line_buffering=False, write_through=False)\n" +"--\n" +"\n" +"Character and line based layer over a BufferedIOBase object, buffer.\n" +"\n" +"encoding gives the name of the encoding that the stream will be\n" +"decoded or encoded with. It defaults to locale.getpreferredencoding(False).\n" +"\n" +"errors determines the strictness of encoding and decoding (see\n" +"help(codecs.Codec) or the documentation for codecs.register) and\n" +"defaults to \"strict\".\n" +"\n" +"newline controls how line endings are handled. It can be None, \'\',\n" +"\'\\n\', \'\\r\', and \'\\r\\n\'. It works as follows:\n" +"\n" +"* On input, if newline is None, universal newlines mode is\n" +" enabled. Lines in the input can end in \'\\n\', \'\\r\', or \'\\r\\n\', and\n" +" these are translated into \'\\n\' before being returned to the\n" +" caller. If it is \'\', universal newline mode is enabled, but line\n" +" endings are returned to the caller untranslated. If it has any of\n" +" the other legal values, input lines are only terminated by the given\n" +" string, and the line ending is returned to the caller untranslated.\n" +"\n" +"* On output, if newline is None, any \'\\n\' characters written are\n" +" translated to the system default line separator, os.linesep. If\n" +" newline is \'\' or \'\\n\', no translation takes place. If newline is any\n" +" of the other legal values, any \'\\n\' characters written are translated\n" +" to the given string.\n" +"\n" +"If line_buffering is True, a call to flush is implied when a call to\n" +"write contains a newline character."); + +static int +_io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, + const char *encoding, const char *errors, + const char *newline, int line_buffering, + int write_through); + +static int +_io_TextIOWrapper___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static char *_keywords[] = {"buffer", "encoding", "errors", "newline", "line_buffering", "write_through", NULL}; + PyObject *buffer; + const char *encoding = NULL; + const char *errors = NULL; + const char *newline = NULL; + int line_buffering = 0; + int write_through = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|zzzii:TextIOWrapper", _keywords, + &buffer, &encoding, &errors, &newline, &line_buffering, &write_through)) + goto exit; + return_value = _io_TextIOWrapper___init___impl((textio *)self, buffer, encoding, errors, newline, line_buffering, write_through); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_TextIOWrapper_detach__doc__, +"detach($self, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_DETACH_METHODDEF \ + {"detach", (PyCFunction)_io_TextIOWrapper_detach, METH_NOARGS, _io_TextIOWrapper_detach__doc__}, + +static PyObject * +_io_TextIOWrapper_detach_impl(textio *self); + +static PyObject * +_io_TextIOWrapper_detach(textio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_TextIOWrapper_detach_impl(self); +} + +PyDoc_STRVAR(_io_TextIOWrapper_write__doc__, +"write($self, text, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_WRITE_METHODDEF \ + {"write", (PyCFunction)_io_TextIOWrapper_write, METH_O, _io_TextIOWrapper_write__doc__}, + +static PyObject * +_io_TextIOWrapper_write_impl(textio *self, PyObject *text); + +static PyObject * +_io_TextIOWrapper_write(textio *self, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *text; + + if (!PyArg_Parse(arg, + "U:write", + &text)) + goto exit; + return_value = _io_TextIOWrapper_write_impl(self, text); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_TextIOWrapper_read__doc__, +"read($self, size=-1, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_READ_METHODDEF \ + {"read", (PyCFunction)_io_TextIOWrapper_read, METH_VARARGS, _io_TextIOWrapper_read__doc__}, + +static PyObject * +_io_TextIOWrapper_read_impl(textio *self, Py_ssize_t n); + +static PyObject * +_io_TextIOWrapper_read(textio *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t n = -1; + + if (!PyArg_ParseTuple(args, + "|O&:read", + _PyIO_ConvertSsize_t, &n)) + goto exit; + return_value = _io_TextIOWrapper_read_impl(self, n); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_TextIOWrapper_readline__doc__, +"readline($self, size=-1, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_READLINE_METHODDEF \ + {"readline", (PyCFunction)_io_TextIOWrapper_readline, METH_VARARGS, _io_TextIOWrapper_readline__doc__}, + +static PyObject * +_io_TextIOWrapper_readline_impl(textio *self, Py_ssize_t size); + +static PyObject * +_io_TextIOWrapper_readline(textio *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t size = -1; + + if (!PyArg_ParseTuple(args, + "|n:readline", + &size)) + goto exit; + return_value = _io_TextIOWrapper_readline_impl(self, size); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_TextIOWrapper_seek__doc__, +"seek($self, cookie, whence=0, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_SEEK_METHODDEF \ + {"seek", (PyCFunction)_io_TextIOWrapper_seek, METH_VARARGS, _io_TextIOWrapper_seek__doc__}, + +static PyObject * +_io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence); + +static PyObject * +_io_TextIOWrapper_seek(textio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *cookieObj; + int whence = 0; + + if (!PyArg_ParseTuple(args, + "O|i:seek", + &cookieObj, &whence)) + goto exit; + return_value = _io_TextIOWrapper_seek_impl(self, cookieObj, whence); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_TextIOWrapper_tell__doc__, +"tell($self, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_TELL_METHODDEF \ + {"tell", (PyCFunction)_io_TextIOWrapper_tell, METH_NOARGS, _io_TextIOWrapper_tell__doc__}, + +static PyObject * +_io_TextIOWrapper_tell_impl(textio *self); + +static PyObject * +_io_TextIOWrapper_tell(textio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_TextIOWrapper_tell_impl(self); +} + +PyDoc_STRVAR(_io_TextIOWrapper_truncate__doc__, +"truncate($self, pos=None, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_TRUNCATE_METHODDEF \ + {"truncate", (PyCFunction)_io_TextIOWrapper_truncate, METH_VARARGS, _io_TextIOWrapper_truncate__doc__}, + +static PyObject * +_io_TextIOWrapper_truncate_impl(textio *self, PyObject *pos); + +static PyObject * +_io_TextIOWrapper_truncate(textio *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *pos = Py_None; + + if (!PyArg_UnpackTuple(args, "truncate", + 0, 1, + &pos)) + goto exit; + return_value = _io_TextIOWrapper_truncate_impl(self, pos); + +exit: + return return_value; +} + +PyDoc_STRVAR(_io_TextIOWrapper_fileno__doc__, +"fileno($self, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_FILENO_METHODDEF \ + {"fileno", (PyCFunction)_io_TextIOWrapper_fileno, METH_NOARGS, _io_TextIOWrapper_fileno__doc__}, + +static PyObject * +_io_TextIOWrapper_fileno_impl(textio *self); + +static PyObject * +_io_TextIOWrapper_fileno(textio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_TextIOWrapper_fileno_impl(self); +} + +PyDoc_STRVAR(_io_TextIOWrapper_seekable__doc__, +"seekable($self, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_SEEKABLE_METHODDEF \ + {"seekable", (PyCFunction)_io_TextIOWrapper_seekable, METH_NOARGS, _io_TextIOWrapper_seekable__doc__}, + +static PyObject * +_io_TextIOWrapper_seekable_impl(textio *self); + +static PyObject * +_io_TextIOWrapper_seekable(textio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_TextIOWrapper_seekable_impl(self); +} + +PyDoc_STRVAR(_io_TextIOWrapper_readable__doc__, +"readable($self, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_READABLE_METHODDEF \ + {"readable", (PyCFunction)_io_TextIOWrapper_readable, METH_NOARGS, _io_TextIOWrapper_readable__doc__}, + +static PyObject * +_io_TextIOWrapper_readable_impl(textio *self); + +static PyObject * +_io_TextIOWrapper_readable(textio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_TextIOWrapper_readable_impl(self); +} + +PyDoc_STRVAR(_io_TextIOWrapper_writable__doc__, +"writable($self, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_WRITABLE_METHODDEF \ + {"writable", (PyCFunction)_io_TextIOWrapper_writable, METH_NOARGS, _io_TextIOWrapper_writable__doc__}, + +static PyObject * +_io_TextIOWrapper_writable_impl(textio *self); + +static PyObject * +_io_TextIOWrapper_writable(textio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_TextIOWrapper_writable_impl(self); +} + +PyDoc_STRVAR(_io_TextIOWrapper_isatty__doc__, +"isatty($self, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_ISATTY_METHODDEF \ + {"isatty", (PyCFunction)_io_TextIOWrapper_isatty, METH_NOARGS, _io_TextIOWrapper_isatty__doc__}, + +static PyObject * +_io_TextIOWrapper_isatty_impl(textio *self); + +static PyObject * +_io_TextIOWrapper_isatty(textio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_TextIOWrapper_isatty_impl(self); +} + +PyDoc_STRVAR(_io_TextIOWrapper_flush__doc__, +"flush($self, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_FLUSH_METHODDEF \ + {"flush", (PyCFunction)_io_TextIOWrapper_flush, METH_NOARGS, _io_TextIOWrapper_flush__doc__}, + +static PyObject * +_io_TextIOWrapper_flush_impl(textio *self); + +static PyObject * +_io_TextIOWrapper_flush(textio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_TextIOWrapper_flush_impl(self); +} + +PyDoc_STRVAR(_io_TextIOWrapper_close__doc__, +"close($self, /)\n" +"--\n" +"\n"); + +#define _IO_TEXTIOWRAPPER_CLOSE_METHODDEF \ + {"close", (PyCFunction)_io_TextIOWrapper_close, METH_NOARGS, _io_TextIOWrapper_close__doc__}, + +static PyObject * +_io_TextIOWrapper_close_impl(textio *self); + +static PyObject * +_io_TextIOWrapper_close(textio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io_TextIOWrapper_close_impl(self); +} +/*[clinic end generated code: output=a610bd3b694886c3 input=a9049054013a1b77]*/ diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index af93499cae..3c52c802e3 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -43,6 +43,19 @@ #define SMALLCHUNK BUFSIZ #endif +/*[clinic input] +module _io +class _io.FileIO "fileio *" "&PyFileIO_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=1c77708b41fda70c]*/ + +/*[python input] +class io_ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = '_PyIO_ConvertSsize_t' +[python start generated code]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=d0a811d3cbfd1b33]*/ + typedef struct { PyObject_HEAD int fd; @@ -126,8 +139,18 @@ internal_close(fileio *self) return 0; } +/*[clinic input] +_io.FileIO.close + +Close the file. + +A closed file cannot be used for further I/O operations. close() may be +called more than once without error. +[clinic start generated code]*/ + static PyObject * -fileio_close(fileio *self) +_io_FileIO_close_impl(fileio *self) +/*[clinic end generated code: output=7737a319ef3bad0b input=f35231760d54a522]*/ { PyObject *res; PyObject *exc, *val, *tb; @@ -183,15 +206,36 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) extern int _Py_open_cloexec_works; #endif +/*[clinic input] +_io.FileIO.__init__ + file as nameobj: object + mode: str = "r" + closefd: int(c_default="1") = True + opener: object = None + +Open a file. + +The mode can be 'r' (default), 'w', 'x' or 'a' for reading, +writing, exclusive creation or appending. The file will be created if it +doesn't exist when opened for writing or appending; it will be truncated +when opened for writing. A FileExistsError will be raised if it already +exists when opened for creating. Opening a file for creating implies +writing so this mode behaves in a similar way to 'w'.Add a '+' to the mode +to allow simultaneous reading and writing. A custom opener can be used by +passing a callable as *opener*. The underlying file descriptor for the file +object is then obtained by calling opener with (*name*, *flags*). +*opener* must return an open file descriptor (passing os.open as *opener* +results in functionality similar to passing None). +[clinic start generated code]*/ + static int -fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) +_io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode, + int closefd, PyObject *opener) +/*[clinic end generated code: output=23413f68e6484bbd input=193164e293d6c097]*/ { - fileio *self = (fileio *) oself; - static char *kwlist[] = {"file", "mode", "closefd", "opener", NULL}; const char *name = NULL; - PyObject *nameobj, *stringobj = NULL, *opener = Py_None; - char *mode = "r"; - char *s; + PyObject *stringobj = NULL; + const char *s; #ifdef MS_WINDOWS Py_UNICODE *widename = NULL; #endif @@ -199,7 +243,6 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) int rwa = 0, plus = 0; int flags = 0; int fd = -1; - int closefd = 1; int fd_is_own = 0; #ifdef O_CLOEXEC int *atomic_flag_works = &_Py_open_cloexec_works; @@ -220,11 +263,6 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) self->fd = -1; } - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|siO:fileio", - kwlist, &nameobj, &mode, &closefd, - &opener)) - return -1; - if (PyFloat_Check(nameobj)) { PyErr_SetString(PyExc_TypeError, "integer argument expected, got float"); @@ -494,32 +532,60 @@ err_mode(char *action) return NULL; } +/*[clinic input] +_io.FileIO.fileno + +Return the underlying file descriptor (an integer). +[clinic start generated code]*/ + static PyObject * -fileio_fileno(fileio *self) +_io_FileIO_fileno_impl(fileio *self) +/*[clinic end generated code: output=a9626ce5398ece90 input=0b9b2de67335ada3]*/ { if (self->fd < 0) return err_closed(); return PyLong_FromLong((long) self->fd); } +/*[clinic input] +_io.FileIO.readable + +True if file was opened in a read mode. +[clinic start generated code]*/ + static PyObject * -fileio_readable(fileio *self) +_io_FileIO_readable_impl(fileio *self) +/*[clinic end generated code: output=640744a6150fe9ba input=a3fdfed6eea721c5]*/ { if (self->fd < 0) return err_closed(); return PyBool_FromLong((long) self->readable); } +/*[clinic input] +_io.FileIO.writable + +True if file was opened in a write mode. +[clinic start generated code]*/ + static PyObject * -fileio_writable(fileio *self) +_io_FileIO_writable_impl(fileio *self) +/*[clinic end generated code: output=96cefc5446e89977 input=c204a808ca2e1748]*/ { if (self->fd < 0) return err_closed(); return PyBool_FromLong((long) self->writable); } +/*[clinic input] +_io.FileIO.seekable + +True if file supports random-access. +[clinic start generated code]*/ + static PyObject * -fileio_seekable(fileio *self) +_io_FileIO_seekable_impl(fileio *self) +/*[clinic end generated code: output=47909ca0a42e9287 input=c8e5554d2fd63c7f]*/ { if (self->fd < 0) return err_closed(); @@ -536,10 +602,18 @@ fileio_seekable(fileio *self) return PyBool_FromLong((long) self->seekable); } +/*[clinic input] +_io.FileIO.readinto + buffer: Py_buffer(types={'rwbuffer'}) + / + +Same as RawIOBase.readinto(). +[clinic start generated code]*/ + static PyObject * -fileio_readinto(fileio *self, PyObject *args) +_io_FileIO_readinto_impl(fileio *self, Py_buffer *buffer) +/*[clinic end generated code: output=b01a5a22c8415cb4 input=5edd8327498d468c]*/ { - Py_buffer pbuf; Py_ssize_t n; int err; @@ -548,13 +622,9 @@ fileio_readinto(fileio *self, PyObject *args) if (!self->readable) return err_mode("reading"); - if (!PyArg_ParseTuple(args, "w*", &pbuf)) - return NULL; - - n = _Py_read(self->fd, pbuf.buf, pbuf.len); + n = _Py_read(self->fd, buffer->buf, buffer->len); /* copy errno because PyBuffer_Release() can indirectly modify it */ err = errno; - PyBuffer_Release(&pbuf); if (n == -1) { if (err == EAGAIN) { @@ -586,8 +656,18 @@ new_buffersize(fileio *self, size_t currentsize) return addend + currentsize; } +/*[clinic input] +_io.FileIO.readall + +Read all data from the file, returned as bytes. + +In non-blocking mode, returns as much as is immediately available, +or None if no data is available. Return an empty bytes object at EOF. +[clinic start generated code]*/ + static PyObject * -fileio_readall(fileio *self) +_io_FileIO_readall_impl(fileio *self) +/*[clinic end generated code: output=faa0292b213b4022 input=dbdc137f55602834]*/ { struct _Py_stat_struct status; Py_off_t pos, end; @@ -673,12 +753,24 @@ fileio_readall(fileio *self) return result; } +/*[clinic input] +_io.FileIO.read + size: io_ssize_t = -1 + / + +Read at most size bytes, returned as bytes. + +Only makes one system call, so less data may be returned than requested. +In non-blocking mode, returns None if no data is available. +Return an empty bytes object at EOF. +[clinic start generated code]*/ + static PyObject * -fileio_read(fileio *self, PyObject *args) +_io_FileIO_read_impl(fileio *self, Py_ssize_t size) +/*[clinic end generated code: output=42528d39dd0ca641 input=5c6caa5490c13a9b]*/ { char *ptr; Py_ssize_t n; - Py_ssize_t size = -1; PyObject *bytes; if (self->fd < 0) @@ -686,11 +778,8 @@ fileio_read(fileio *self, PyObject *args) if (!self->readable) return err_mode("reading"); - if (!PyArg_ParseTuple(args, "|O&", &_PyIO_ConvertSsize_t, &size)) - return NULL; - if (size < 0) - return fileio_readall(self); + return _io_FileIO_readall_impl(self); #ifdef MS_WINDOWS /* On Windows, the count parameter of read() is an int */ @@ -725,10 +814,22 @@ fileio_read(fileio *self, PyObject *args) return (PyObject *) bytes; } +/*[clinic input] +_io.FileIO.write + b: Py_buffer + / + +Write bytes b to file, return number written. + +Only makes one system call, so not all of the data may be written. +The number of bytes actually written is returned. In non-blocking mode, +returns None if the write would block. +[clinic start generated code]*/ + static PyObject * -fileio_write(fileio *self, PyObject *args) +_io_FileIO_write_impl(fileio *self, Py_buffer *b) +/*[clinic end generated code: output=b4059db3d363a2f7 input=ffbd8834f447ac31]*/ { - Py_buffer pbuf; Py_ssize_t n; int err; @@ -737,13 +838,9 @@ fileio_write(fileio *self, PyObject *args) if (!self->writable) return err_mode("writing"); - if (!PyArg_ParseTuple(args, "y*", &pbuf)) - return NULL; - - n = _Py_write(self->fd, pbuf.buf, pbuf.len); + n = _Py_write(self->fd, b->buf, b->len); /* copy errno because PyBuffer_Release() can indirectly modify it */ err = errno; - PyBuffer_Release(&pbuf); if (n < 0) { if (err == EAGAIN) { @@ -817,23 +914,44 @@ portable_lseek(int fd, PyObject *posobj, int whence) #endif } +/*[clinic input] +_io.FileIO.seek + pos: object + whence: int = 0 + / + +Move to new file position and return the file position. + +Argument offset is a byte count. Optional argument whence defaults to +SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values +are SEEK_CUR or 1 (move relative to current position, positive or negative), +and SEEK_END or 2 (move relative to end of file, usually negative, although +many platforms allow seeking beyond the end of a file). + +Note that not all file objects are seekable. +[clinic start generated code]*/ + static PyObject * -fileio_seek(fileio *self, PyObject *args) +_io_FileIO_seek_impl(fileio *self, PyObject *pos, int whence) +/*[clinic end generated code: output=c976acdf054e6655 input=0439194b0774d454]*/ { - PyObject *posobj; - int whence = 0; - if (self->fd < 0) return err_closed(); - if (!PyArg_ParseTuple(args, "O|i", &posobj, &whence)) - return NULL; - - return portable_lseek(self->fd, posobj, whence); + return portable_lseek(self->fd, pos, whence); } +/*[clinic input] +_io.FileIO.tell + +Current file position. + +Can raise OSError for non seekable files. +[clinic start generated code]*/ + static PyObject * -fileio_tell(fileio *self, PyObject *args) +_io_FileIO_tell_impl(fileio *self) +/*[clinic end generated code: output=ffe2147058809d0b input=807e24ead4cec2f9]*/ { if (self->fd < 0) return err_closed(); @@ -842,10 +960,21 @@ fileio_tell(fileio *self, PyObject *args) } #ifdef HAVE_FTRUNCATE +/*[clinic input] +_io.FileIO.truncate + size as posobj: object = NULL + / + +Truncate the file to at most size bytes and return the truncated size. + +Size defaults to the current file position, as returned by tell(). +The current file position is changed to the value of size. +[clinic start generated code]*/ + static PyObject * -fileio_truncate(fileio *self, PyObject *args) +_io_FileIO_truncate_impl(fileio *self, PyObject *posobj) +/*[clinic end generated code: output=e49ca7a916c176fa input=9026af44686b7318]*/ { - PyObject *posobj = NULL; /* the new size wanted by the user */ Py_off_t pos; int ret; int fd; @@ -856,9 +985,6 @@ fileio_truncate(fileio *self, PyObject *args) if (!self->writable) return err_mode("writing"); - if (!PyArg_ParseTuple(args, "|O", &posobj)) - return NULL; - if (posobj == Py_None || posobj == NULL) { /* Get the current position. */ posobj = portable_lseek(fd, NULL, 1); @@ -952,8 +1078,15 @@ fileio_repr(fileio *self) return res; } +/*[clinic input] +_io.FileIO.isatty + +True if the file is connected to a TTY device. +[clinic start generated code]*/ + static PyObject * -fileio_isatty(fileio *self) +_io_FileIO_isatty_impl(fileio *self) +/*[clinic end generated code: output=932c39924e9a8070 input=cd94ca1f5e95e843]*/ { long res; @@ -978,110 +1111,22 @@ fileio_getstate(fileio *self) return NULL; } - -PyDoc_STRVAR(fileio_doc, -"file(name: str[, mode: str][, opener: None]) -> file IO object\n" -"\n" -"Open a file. The mode can be 'r' (default), 'w', 'x' or 'a' for reading,\n" -"writing, exclusive creation or appending. The file will be created if it\n" -"doesn't exist when opened for writing or appending; it will be truncated\n" -"when opened for writing. A FileExistsError will be raised if it already\n" -"exists when opened for creating. Opening a file for creating implies\n" -"writing so this mode behaves in a similar way to 'w'.Add a '+' to the mode\n" -"to allow simultaneous reading and writing. A custom opener can be used by\n" -"passing a callable as *opener*. The underlying file descriptor for the file\n" -"object is then obtained by calling opener with (*name*, *flags*).\n" -"*opener* must return an open file descriptor (passing os.open as *opener*\n" -"results in functionality similar to passing None)."); - -PyDoc_STRVAR(read_doc, -"read(size: int) -> bytes. read at most size bytes, returned as bytes.\n" -"\n" -"Only makes one system call, so less data may be returned than requested\n" -"In non-blocking mode, returns None if no data is available.\n" -"Return an empty bytes object at EOF."); - -PyDoc_STRVAR(readall_doc, -"readall() -> bytes. read all data from the file, returned as bytes.\n" -"\n" -"In non-blocking mode, returns as much as is immediately available,\n" -"or None if no data is available. Return an empty bytes object at EOF."); - -PyDoc_STRVAR(write_doc, -"write(b: bytes) -> int. Write bytes b to file, return number written.\n" -"\n" -"Only makes one system call, so not all of the data may be written.\n" -"The number of bytes actually written is returned. In non-blocking mode,\n" -"returns None if the write would block." -); - -PyDoc_STRVAR(fileno_doc, -"fileno() -> int. Return the underlying file descriptor (an integer)."); - -PyDoc_STRVAR(seek_doc, -"seek(offset: int[, whence: int]) -> int. Move to new file position and\n" -"return the file position.\n" -"\n" -"Argument offset is a byte count. Optional argument whence defaults to\n" -"SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values\n" -"are SEEK_CUR or 1 (move relative to current position, positive or negative),\n" -"and SEEK_END or 2 (move relative to end of file, usually negative, although\n" -"many platforms allow seeking beyond the end of a file).\n" -"\n" -"Note that not all file objects are seekable."); - -#ifdef HAVE_FTRUNCATE -PyDoc_STRVAR(truncate_doc, -"truncate([size: int]) -> int. Truncate the file to at most size bytes\n" -"and return the truncated size.\n" -"\n" -"Size defaults to the current file position, as returned by tell().\n" -"The current file position is changed to the value of size."); -#endif - -PyDoc_STRVAR(tell_doc, -"tell() -> int. Current file position.\n" -"\n" -"Can raise OSError for non seekable files." -); - -PyDoc_STRVAR(readinto_doc, -"readinto() -> Same as RawIOBase.readinto()."); - -PyDoc_STRVAR(close_doc, -"close() -> None. Close the file.\n" -"\n" -"A closed file cannot be used for further I/O operations. close() may be\n" -"called more than once without error."); - -PyDoc_STRVAR(isatty_doc, -"isatty() -> bool. True if the file is connected to a TTY device."); - -PyDoc_STRVAR(seekable_doc, -"seekable() -> bool. True if file supports random-access."); - -PyDoc_STRVAR(readable_doc, -"readable() -> bool. True if file was opened in a read mode."); - -PyDoc_STRVAR(writable_doc, -"writable() -> bool. True if file was opened in a write mode."); +#include "clinic/fileio.c.h" static PyMethodDef fileio_methods[] = { - {"read", (PyCFunction)fileio_read, METH_VARARGS, read_doc}, - {"readall", (PyCFunction)fileio_readall, METH_NOARGS, readall_doc}, - {"readinto", (PyCFunction)fileio_readinto, METH_VARARGS, readinto_doc}, - {"write", (PyCFunction)fileio_write, METH_VARARGS, write_doc}, - {"seek", (PyCFunction)fileio_seek, METH_VARARGS, seek_doc}, - {"tell", (PyCFunction)fileio_tell, METH_VARARGS, tell_doc}, -#ifdef HAVE_FTRUNCATE - {"truncate", (PyCFunction)fileio_truncate, METH_VARARGS, truncate_doc}, -#endif - {"close", (PyCFunction)fileio_close, METH_NOARGS, close_doc}, - {"seekable", (PyCFunction)fileio_seekable, METH_NOARGS, seekable_doc}, - {"readable", (PyCFunction)fileio_readable, METH_NOARGS, readable_doc}, - {"writable", (PyCFunction)fileio_writable, METH_NOARGS, writable_doc}, - {"fileno", (PyCFunction)fileio_fileno, METH_NOARGS, fileno_doc}, - {"isatty", (PyCFunction)fileio_isatty, METH_NOARGS, isatty_doc}, + _IO_FILEIO_READ_METHODDEF + _IO_FILEIO_READALL_METHODDEF + _IO_FILEIO_READINTO_METHODDEF + _IO_FILEIO_WRITE_METHODDEF + _IO_FILEIO_SEEK_METHODDEF + _IO_FILEIO_TELL_METHODDEF + _IO_FILEIO_TRUNCATE_METHODDEF + _IO_FILEIO_CLOSE_METHODDEF + _IO_FILEIO_SEEKABLE_METHODDEF + _IO_FILEIO_READABLE_METHODDEF + _IO_FILEIO_WRITABLE_METHODDEF + _IO_FILEIO_FILENO_METHODDEF + _IO_FILEIO_ISATTY_METHODDEF {"_dealloc_warn", (PyCFunction)fileio_dealloc_warn, METH_O, NULL}, {"__getstate__", (PyCFunction)fileio_getstate, METH_NOARGS, NULL}, {NULL, NULL} /* sentinel */ @@ -1143,7 +1188,7 @@ PyTypeObject PyFileIO_Type = { 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, /* tp_flags */ - fileio_doc, /* tp_doc */ + _io_FileIO___init____doc__, /* tp_doc */ (traverseproc)fileio_traverse, /* tp_traverse */ (inquiry)fileio_clear, /* tp_clear */ 0, /* tp_richcompare */ @@ -1158,7 +1203,7 @@ PyTypeObject PyFileIO_Type = { 0, /* tp_descr_get */ 0, /* tp_descr_set */ offsetof(fileio, dict), /* tp_dictoffset */ - fileio_init, /* tp_init */ + _io_FileIO___init__, /* tp_init */ PyType_GenericAlloc, /* tp_alloc */ fileio_new, /* tp_new */ PyObject_GC_Del, /* tp_free */ diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index ef06b43ca6..79d716a98a 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -13,6 +13,20 @@ #include "structmember.h" #include "_iomodule.h" +/*[clinic input] +module _io +class _io._IOBase "PyObject *" "&PyIOBase_Type" +class _io._RawIOBase "PyObject *" "&PyRawIOBase_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=d29a4d076c2b211c]*/ + +/*[python input] +class io_ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = '_PyIO_ConvertSsize_t' +[python start generated code]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=d0a811d3cbfd1b33]*/ + /* * IOBase class, an abstract class */ @@ -96,11 +110,15 @@ iobase_seek(PyObject *self, PyObject *args) return iobase_unsupported("seek"); } -PyDoc_STRVAR(iobase_tell_doc, - "Return current stream position."); +/*[clinic input] +_io._IOBase.tell + +Return current stream position. +[clinic start generated code]*/ static PyObject * -iobase_tell(PyObject *self, PyObject *args) +_io__IOBase_tell_impl(PyObject *self) +/*[clinic end generated code: output=89a1c0807935abe2 input=04e615fec128801f]*/ { _Py_IDENTIFIER(seek); @@ -121,13 +139,17 @@ iobase_truncate(PyObject *self, PyObject *args) /* Flush and close methods */ -PyDoc_STRVAR(iobase_flush_doc, - "Flush write buffers, if applicable.\n" - "\n" - "This is not implemented for read-only and non-blocking streams.\n"); +/*[clinic input] +_io._IOBase.flush + +Flush write buffers, if applicable. + +This is not implemented for read-only and non-blocking streams. +[clinic start generated code]*/ static PyObject * -iobase_flush(PyObject *self, PyObject *args) +_io__IOBase_flush_impl(PyObject *self) +/*[clinic end generated code: output=7cef4b4d54656a3b input=773be121abe270aa]*/ { /* XXX Should this return the number of bytes written??? */ if (IS_CLOSED(self)) { @@ -137,11 +159,6 @@ iobase_flush(PyObject *self, PyObject *args) Py_RETURN_NONE; } -PyDoc_STRVAR(iobase_close_doc, - "Flush and close the IO object.\n" - "\n" - "This method has no effect if the file is already closed.\n"); - static int iobase_closed(PyObject *self) { @@ -180,8 +197,17 @@ _PyIOBase_check_closed(PyObject *self, PyObject *args) `__IOBase_closed` and call flush() by itself, but it is redundant with whatever behaviour a non-trivial derived class will implement. */ +/*[clinic input] +_io._IOBase.close + +Flush and close the IO object. + +This method has no effect if the file is already closed. +[clinic start generated code]*/ + static PyObject * -iobase_close(PyObject *self, PyObject *args) +_io__IOBase_close_impl(PyObject *self) +/*[clinic end generated code: output=63c6a6f57d783d6d input=f4494d5c31dbc6b7]*/ { PyObject *res; @@ -304,14 +330,18 @@ iobase_dealloc(iobase *self) /* Inquiry methods */ -PyDoc_STRVAR(iobase_seekable_doc, - "Return whether object supports random access.\n" - "\n" - "If False, seek(), tell() and truncate() will raise UnsupportedOperation.\n" - "This method may need to do a test seek()."); +/*[clinic input] +_io._IOBase.seekable + +Return whether object supports random access. + +If False, seek(), tell() and truncate() will raise UnsupportedOperation. +This method may need to do a test seek(). +[clinic start generated code]*/ static PyObject * -iobase_seekable(PyObject *self, PyObject *args) +_io__IOBase_seekable_impl(PyObject *self) +/*[clinic end generated code: output=4c24c67f5f32a43d input=22676eebb81dcf1e]*/ { Py_RETURN_FALSE; } @@ -333,13 +363,17 @@ _PyIOBase_check_seekable(PyObject *self, PyObject *args) return res; } -PyDoc_STRVAR(iobase_readable_doc, - "Return whether object was opened for reading.\n" - "\n" - "If False, read() will raise UnsupportedOperation."); +/*[clinic input] +_io._IOBase.readable + +Return whether object was opened for reading. + +If False, read() will raise UnsupportedOperation. +[clinic start generated code]*/ static PyObject * -iobase_readable(PyObject *self, PyObject *args) +_io__IOBase_readable_impl(PyObject *self) +/*[clinic end generated code: output=e48089250686388b input=12fc3d8f6be46434]*/ { Py_RETURN_FALSE; } @@ -362,13 +396,17 @@ _PyIOBase_check_readable(PyObject *self, PyObject *args) return res; } -PyDoc_STRVAR(iobase_writable_doc, - "Return whether object was opened for writing.\n" - "\n" - "If False, write() will raise UnsupportedOperation."); +/*[clinic input] +_io._IOBase.writable + +Return whether object was opened for writing. + +If False, write() will raise UnsupportedOperation. +[clinic start generated code]*/ static PyObject * -iobase_writable(PyObject *self, PyObject *args) +_io__IOBase_writable_impl(PyObject *self) +/*[clinic end generated code: output=406001d0985be14f input=c17a0bb6a8dfc590]*/ { Py_RETURN_FALSE; } @@ -413,24 +451,32 @@ iobase_exit(PyObject *self, PyObject *args) /* XXX Should these be present even if unimplemented? */ -PyDoc_STRVAR(iobase_fileno_doc, - "Returns underlying file descriptor if one exists.\n" - "\n" - "An IOError is raised if the IO object does not use a file descriptor.\n"); +/*[clinic input] +_io._IOBase.fileno + +Returns underlying file descriptor if one exists. + +An IOError is raised if the IO object does not use a file descriptor. +[clinic start generated code]*/ static PyObject * -iobase_fileno(PyObject *self, PyObject *args) +_io__IOBase_fileno_impl(PyObject *self) +/*[clinic end generated code: output=7cc0973f0f5f3b73 input=32773c5df4b7eede]*/ { return iobase_unsupported("fileno"); } -PyDoc_STRVAR(iobase_isatty_doc, - "Return whether this is an 'interactive' stream.\n" - "\n" - "Return False if it can't be determined.\n"); +/*[clinic input] +_io._IOBase.isatty + +Return whether this is an 'interactive' stream. + +Return False if it can't be determined. +[clinic start generated code]*/ static PyObject * -iobase_isatty(PyObject *self, PyObject *args) +_io__IOBase_isatty_impl(PyObject *self) +/*[clinic end generated code: output=60cab77cede41cdd input=9ef76530d368458b]*/ { if (_PyIOBase_check_closed(self, Py_True) == NULL) return NULL; @@ -439,30 +485,31 @@ iobase_isatty(PyObject *self, PyObject *args) /* Readline(s) and writelines */ -PyDoc_STRVAR(iobase_readline_doc, - "Read and return a line from the stream.\n" - "\n" - "If limit is specified, at most limit bytes will be read.\n" - "\n" - "The line terminator is always b'\\n' for binary files; for text\n" - "files, the newlines argument to open can be used to select the line\n" - "terminator(s) recognized.\n"); +/*[clinic input] +_io._IOBase.readline + size as limit: io_ssize_t = -1 + / + +Read and return a line from the stream. + +If size is specified, at most size bytes will be read. + +The line terminator is always b'\n' for binary files; for text +files, the newlines argument to open can be used to select the line +terminator(s) recognized. +[clinic start generated code]*/ static PyObject * -iobase_readline(PyObject *self, PyObject *args) +_io__IOBase_readline_impl(PyObject *self, Py_ssize_t limit) +/*[clinic end generated code: output=4479f79b58187840 input=df4cc8884f553cab]*/ { /* For backwards compatibility, a (slowish) readline(). */ - Py_ssize_t limit = -1; int has_peek = 0; PyObject *buffer, *result; Py_ssize_t old_size = -1; _Py_IDENTIFIER(peek); - if (!PyArg_ParseTuple(args, "|O&:readline", &_PyIO_ConvertSsize_t, &limit)) { - return NULL; - } - if (_PyObject_HasAttrId(self, &PyId_peek)) has_peek = 1; @@ -585,23 +632,25 @@ iobase_iternext(PyObject *self) return line; } -PyDoc_STRVAR(iobase_readlines_doc, - "Return a list of lines from the stream.\n" - "\n" - "hint can be specified to control the number of lines read: no more\n" - "lines will be read if the total size (in bytes/characters) of all\n" - "lines so far exceeds hint."); +/*[clinic input] +_io._IOBase.readlines + hint: io_ssize_t = -1 + / + +Return a list of lines from the stream. + +hint can be specified to control the number of lines read: no more +lines will be read if the total size (in bytes/characters) of all +lines so far exceeds hint. +[clinic start generated code]*/ static PyObject * -iobase_readlines(PyObject *self, PyObject *args) +_io__IOBase_readlines_impl(PyObject *self, Py_ssize_t hint) +/*[clinic end generated code: output=2f50421677fa3dea input=1961c4a95e96e661]*/ { - Py_ssize_t hint = -1, length = 0; + Py_ssize_t length = 0; PyObject *result; - if (!PyArg_ParseTuple(args, "|O&:readlines", &_PyIO_ConvertSsize_t, &hint)) { - return NULL; - } - result = PyList_New(0); if (result == NULL) return NULL; @@ -646,14 +695,17 @@ iobase_readlines(PyObject *self, PyObject *args) return result; } +/*[clinic input] +_io._IOBase.writelines + lines: object + / +[clinic start generated code]*/ + static PyObject * -iobase_writelines(PyObject *self, PyObject *args) +_io__IOBase_writelines(PyObject *self, PyObject *lines) +/*[clinic end generated code: output=976eb0a9b60a6628 input=432e729a8450b3cb]*/ { - PyObject *lines, *iter, *res; - - if (!PyArg_ParseTuple(args, "O:writelines", &lines)) { - return NULL; - } + PyObject *iter, *res; if (_PyIOBase_check_closed(self, Py_True) == NULL) return NULL; @@ -688,31 +740,33 @@ iobase_writelines(PyObject *self, PyObject *args) Py_RETURN_NONE; } +#include "clinic/iobase.c.h" + static PyMethodDef iobase_methods[] = { {"seek", iobase_seek, METH_VARARGS, iobase_seek_doc}, - {"tell", iobase_tell, METH_NOARGS, iobase_tell_doc}, + _IO__IOBASE_TELL_METHODDEF {"truncate", iobase_truncate, METH_VARARGS, iobase_truncate_doc}, - {"flush", iobase_flush, METH_NOARGS, iobase_flush_doc}, - {"close", iobase_close, METH_NOARGS, iobase_close_doc}, + _IO__IOBASE_FLUSH_METHODDEF + _IO__IOBASE_CLOSE_METHODDEF - {"seekable", iobase_seekable, METH_NOARGS, iobase_seekable_doc}, - {"readable", iobase_readable, METH_NOARGS, iobase_readable_doc}, - {"writable", iobase_writable, METH_NOARGS, iobase_writable_doc}, + _IO__IOBASE_SEEKABLE_METHODDEF + _IO__IOBASE_READABLE_METHODDEF + _IO__IOBASE_WRITABLE_METHODDEF {"_checkClosed", _PyIOBase_check_closed, METH_NOARGS}, {"_checkSeekable", _PyIOBase_check_seekable, METH_NOARGS}, {"_checkReadable", _PyIOBase_check_readable, METH_NOARGS}, {"_checkWritable", _PyIOBase_check_writable, METH_NOARGS}, - {"fileno", iobase_fileno, METH_NOARGS, iobase_fileno_doc}, - {"isatty", iobase_isatty, METH_NOARGS, iobase_isatty_doc}, + _IO__IOBASE_FILENO_METHODDEF + _IO__IOBASE_ISATTY_METHODDEF {"__enter__", iobase_enter, METH_NOARGS}, {"__exit__", iobase_exit, METH_VARARGS}, - {"readline", iobase_readline, METH_VARARGS, iobase_readline_doc}, - {"readlines", iobase_readlines, METH_VARARGS, iobase_readlines_doc}, - {"writelines", iobase_writelines, METH_VARARGS}, + _IO__IOBASE_READLINE_METHODDEF + _IO__IOBASE_READLINES_METHODDEF + _IO__IOBASE_WRITELINES_METHODDEF {NULL, NULL} }; @@ -795,16 +849,18 @@ PyDoc_STRVAR(rawiobase_doc, * either.) */ +/*[clinic input] +_io._RawIOBase.read + size as n: Py_ssize_t = -1 + / +[clinic start generated code]*/ + static PyObject * -rawiobase_read(PyObject *self, PyObject *args) +_io__RawIOBase_read_impl(PyObject *self, Py_ssize_t n) +/*[clinic end generated code: output=6cdeb731e3c9f13c input=b6d0dcf6417d1374]*/ { - Py_ssize_t n = -1; PyObject *b, *res; - if (!PyArg_ParseTuple(args, "|n:read", &n)) { - return NULL; - } - if (n < 0) { _Py_IDENTIFIER(readall); @@ -836,11 +892,15 @@ rawiobase_read(PyObject *self, PyObject *args) } -PyDoc_STRVAR(rawiobase_readall_doc, - "Read until EOF, using multiple read() call."); +/*[clinic input] +_io._RawIOBase.readall + +Read until EOF, using multiple read() call. +[clinic start generated code]*/ static PyObject * -rawiobase_readall(PyObject *self, PyObject *args) +_io__RawIOBase_readall_impl(PyObject *self) +/*[clinic end generated code: output=1987b9ce929425a0 input=688874141213622a]*/ { int r; PyObject *chunks = PyList_New(0); @@ -893,8 +953,8 @@ rawiobase_readall(PyObject *self, PyObject *args) } static PyMethodDef rawiobase_methods[] = { - {"read", rawiobase_read, METH_VARARGS}, - {"readall", rawiobase_readall, METH_NOARGS, rawiobase_readall_doc}, + _IO__RAWIOBASE_READ_METHODDEF + _IO__RAWIOBASE_READALL_METHODDEF {NULL, NULL} }; diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c index 9d73884f73..8315ab8e70 100644 --- a/Modules/_io/stringio.c +++ b/Modules/_io/stringio.c @@ -11,6 +11,12 @@ #define STATE_REALIZED 1 #define STATE_ACCUMULATING 2 +/*[clinic input] +module _io +class _io.StringIO "stringio *" "&PyStringIO_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=c17bc0f42165cd7d]*/ + typedef struct { PyObject_HEAD Py_UCS4 *buf; @@ -39,6 +45,8 @@ typedef struct { PyObject *weakreflist; } stringio; +static int _io_StringIO___init__(PyObject *self, PyObject *args, PyObject *kwargs); + #define CHECK_INITIALIZED(self) \ if (self->ok <= 0) { \ PyErr_SetString(PyExc_ValueError, \ @@ -58,12 +66,6 @@ typedef struct { return NULL; \ } -PyDoc_STRVAR(stringio_doc, - "Text I/O implementation using an in-memory buffer.\n" - "\n" - "The initial_value argument sets the value of object. The newline\n" - "argument is like the one of TextIOWrapper's constructor."); - /* Internal routine for changing the size, in terms of characters, of the buffer of StringIO objects. The caller should ensure that the 'size' @@ -264,11 +266,15 @@ fail: return -1; } -PyDoc_STRVAR(stringio_getvalue_doc, - "Retrieve the entire contents of the object."); +/*[clinic input] +_io.StringIO.getvalue + +Retrieve the entire contents of the object. +[clinic start generated code]*/ static PyObject * -stringio_getvalue(stringio *self) +_io_StringIO_getvalue_impl(stringio *self) +/*[clinic end generated code: output=27b6a7bfeaebce01 input=d23cb81d6791cf88]*/ { CHECK_INITIALIZED(self); CHECK_CLOSED(self); @@ -278,33 +284,40 @@ stringio_getvalue(stringio *self) self->string_size); } -PyDoc_STRVAR(stringio_tell_doc, - "Tell the current file position."); +/*[clinic input] +_io.StringIO.tell + +Tell the current file position. +[clinic start generated code]*/ static PyObject * -stringio_tell(stringio *self) +_io_StringIO_tell_impl(stringio *self) +/*[clinic end generated code: output=2e87ac67b116c77b input=ec866ebaff02f405]*/ { CHECK_INITIALIZED(self); CHECK_CLOSED(self); return PyLong_FromSsize_t(self->pos); } -PyDoc_STRVAR(stringio_read_doc, - "Read at most n characters, returned as a string.\n" - "\n" - "If the argument is negative or omitted, read until EOF\n" - "is reached. Return an empty string at EOF.\n"); +/*[clinic input] +_io.StringIO.read + size as arg: object = None + / + +Read at most size characters, returned as a string. + +If the argument is negative or omitted, read until EOF +is reached. Return an empty string at EOF. +[clinic start generated code]*/ static PyObject * -stringio_read(stringio *self, PyObject *args) +_io_StringIO_read_impl(stringio *self, PyObject *arg) +/*[clinic end generated code: output=3676864773746f68 input=9a319015f6f3965c]*/ { Py_ssize_t size, n; Py_UCS4 *output; - PyObject *arg = Py_None; CHECK_INITIALIZED(self); - if (!PyArg_ParseTuple(args, "|O:read", &arg)) - return NULL; CHECK_CLOSED(self); if (PyNumber_Check(arg)) { @@ -373,20 +386,23 @@ _stringio_readline(stringio *self, Py_ssize_t limit) return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, start, len); } -PyDoc_STRVAR(stringio_readline_doc, - "Read until newline or EOF.\n" - "\n" - "Returns an empty string if EOF is hit immediately.\n"); +/*[clinic input] +_io.StringIO.readline + size as arg: object = None + / + +Read until newline or EOF. + +Returns an empty string if EOF is hit immediately. +[clinic start generated code]*/ static PyObject * -stringio_readline(stringio *self, PyObject *args) +_io_StringIO_readline_impl(stringio *self, PyObject *arg) +/*[clinic end generated code: output=99fdcac03a3dee81 input=e0e0ed4042040176]*/ { - PyObject *arg = Py_None; Py_ssize_t limit = -1; CHECK_INITIALIZED(self); - if (!PyArg_ParseTuple(args, "|O:readline", &arg)) - return NULL; CHECK_CLOSED(self); ENSURE_REALIZED(self); @@ -441,22 +457,25 @@ stringio_iternext(stringio *self) return line; } -PyDoc_STRVAR(stringio_truncate_doc, - "Truncate size to pos.\n" - "\n" - "The pos argument defaults to the current file position, as\n" - "returned by tell(). The current file position is unchanged.\n" - "Returns the new absolute position.\n"); +/*[clinic input] +_io.StringIO.truncate + pos as arg: object = None + / + +Truncate size to pos. + +The pos argument defaults to the current file position, as +returned by tell(). The current file position is unchanged. +Returns the new absolute position. +[clinic start generated code]*/ static PyObject * -stringio_truncate(stringio *self, PyObject *args) +_io_StringIO_truncate_impl(stringio *self, PyObject *arg) +/*[clinic end generated code: output=6072439c2b01d306 input=748619a494ba53ad]*/ { Py_ssize_t size; - PyObject *arg = Py_None; CHECK_INITIALIZED(self); - if (!PyArg_ParseTuple(args, "|O:truncate", &arg)) - return NULL; CHECK_CLOSED(self); if (PyNumber_Check(arg)) { @@ -490,49 +509,51 @@ stringio_truncate(stringio *self, PyObject *args) return PyLong_FromSsize_t(size); } -PyDoc_STRVAR(stringio_seek_doc, - "Change stream position.\n" - "\n" - "Seek to character offset pos relative to position indicated by whence:\n" - " 0 Start of stream (the default). pos should be >= 0;\n" - " 1 Current position - pos must be 0;\n" - " 2 End of stream - pos must be 0.\n" - "Returns the new absolute position.\n"); +/*[clinic input] +_io.StringIO.seek + pos: Py_ssize_t + whence: int = 0 + / + +Change stream position. + +Seek to character offset pos relative to position indicated by whence: + 0 Start of stream (the default). pos should be >= 0; + 1 Current position - pos must be 0; + 2 End of stream - pos must be 0. +Returns the new absolute position. +[clinic start generated code]*/ static PyObject * -stringio_seek(stringio *self, PyObject *args) +_io_StringIO_seek_impl(stringio *self, Py_ssize_t pos, int whence) +/*[clinic end generated code: output=e9e0ac9a8ae71c25 input=e3855b24e7cae06a]*/ { - Py_ssize_t pos; - int mode = 0; - CHECK_INITIALIZED(self); - if (!PyArg_ParseTuple(args, "n|i:seek", &pos, &mode)) - return NULL; CHECK_CLOSED(self); - if (mode != 0 && mode != 1 && mode != 2) { + if (whence != 0 && whence != 1 && whence != 2) { PyErr_Format(PyExc_ValueError, - "Invalid whence (%i, should be 0, 1 or 2)", mode); + "Invalid whence (%i, should be 0, 1 or 2)", whence); return NULL; } - else if (pos < 0 && mode == 0) { + else if (pos < 0 && whence == 0) { PyErr_Format(PyExc_ValueError, "Negative seek position %zd", pos); return NULL; } - else if (mode != 0 && pos != 0) { + else if (whence != 0 && pos != 0) { PyErr_SetString(PyExc_IOError, "Can't do nonzero cur-relative seeks"); return NULL; } - /* mode 0: offset relative to beginning of the string. - mode 1: no change to current position. - mode 2: change position to end of file. */ - if (mode == 1) { + /* whence = 0: offset relative to beginning of the string. + whence = 1: no change to current position. + whence = 2: change position to end of file. */ + if (whence == 1) { pos = self->pos; } - else if (mode == 2) { + else if (whence == 2) { pos = self->string_size; } @@ -541,14 +562,20 @@ stringio_seek(stringio *self, PyObject *args) return PyLong_FromSsize_t(self->pos); } -PyDoc_STRVAR(stringio_write_doc, - "Write string to file.\n" - "\n" - "Returns the number of characters written, which is always equal to\n" - "the length of the string.\n"); +/*[clinic input] +_io.StringIO.write + s as obj: object + / + +Write string to file. + +Returns the number of characters written, which is always equal to +the length of the string. +[clinic start generated code]*/ static PyObject * -stringio_write(stringio *self, PyObject *obj) +_io_StringIO_write(stringio *self, PyObject *obj) +/*[clinic end generated code: output=0deaba91a15b94da input=cf96f3b16586e669]*/ { Py_ssize_t size; @@ -569,14 +596,20 @@ stringio_write(stringio *self, PyObject *obj) return PyLong_FromSsize_t(size); } -PyDoc_STRVAR(stringio_close_doc, - "Close the IO object. Attempting any further operation after the\n" - "object is closed will raise a ValueError.\n" - "\n" - "This method has no effect if the file is already closed.\n"); +/*[clinic input] +_io.StringIO.close + +Close the IO object. + +Attempting any further operation after the object is closed +will raise a ValueError. + +This method has no effect if the file is already closed. +[clinic start generated code]*/ static PyObject * -stringio_close(stringio *self) +_io_StringIO_close_impl(stringio *self) +/*[clinic end generated code: output=04399355cbe518f1 input=cbc10b45f35d6d46]*/ { self->closed = 1; /* Free up some memory */ @@ -644,19 +677,25 @@ stringio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return (PyObject *)self; } +/*[clinic input] +_io.StringIO.__init__ + initial_value as value: object(c_default="NULL") = '' + newline as newline_obj: object(c_default="NULL") = '\n' + +Text I/O implementation using an in-memory buffer. + +The initial_value argument sets the value of object. The newline +argument is like the one of TextIOWrapper's constructor. +[clinic start generated code]*/ + static int -stringio_init(stringio *self, PyObject *args, PyObject *kwds) +_io_StringIO___init___impl(stringio *self, PyObject *value, + PyObject *newline_obj) +/*[clinic end generated code: output=a421ea023b22ef4e input=cee2d9181b2577a3]*/ { - char *kwlist[] = {"initial_value", "newline", NULL}; - PyObject *value = NULL; - PyObject *newline_obj = NULL; char *newline = "\n"; Py_ssize_t value_len; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:__init__", kwlist, - &value, &newline_obj)) - return -1; - /* Parse the newline argument. This used to be done with the 'z' specifier, however this allowed any object with the buffer interface to be converted. Thus we have to parse it manually since we only want to @@ -761,33 +800,45 @@ stringio_init(stringio *self, PyObject *args, PyObject *kwds) /* Properties and pseudo-properties */ -PyDoc_STRVAR(stringio_readable_doc, -"readable() -> bool. Returns True if the IO object can be read."); +/*[clinic input] +_io.StringIO.readable -PyDoc_STRVAR(stringio_writable_doc, -"writable() -> bool. Returns True if the IO object can be written."); - -PyDoc_STRVAR(stringio_seekable_doc, -"seekable() -> bool. Returns True if the IO object can be seeked."); +Returns True if the IO object can be read. +[clinic start generated code]*/ static PyObject * -stringio_seekable(stringio *self, PyObject *args) +_io_StringIO_readable_impl(stringio *self) +/*[clinic end generated code: output=b19d44dd8b1ceb99 input=39ce068b224c21ad]*/ { CHECK_INITIALIZED(self); CHECK_CLOSED(self); Py_RETURN_TRUE; } +/*[clinic input] +_io.StringIO.writable + +Returns True if the IO object can be written. +[clinic start generated code]*/ + static PyObject * -stringio_readable(stringio *self, PyObject *args) +_io_StringIO_writable_impl(stringio *self) +/*[clinic end generated code: output=13e4dd77187074ca input=7a691353aac38835]*/ { CHECK_INITIALIZED(self); CHECK_CLOSED(self); Py_RETURN_TRUE; } +/*[clinic input] +_io.StringIO.seekable + +Returns True if the IO object can be seeked. +[clinic start generated code]*/ + static PyObject * -stringio_writable(stringio *self, PyObject *args) +_io_StringIO_seekable_impl(stringio *self) +/*[clinic end generated code: output=4d20b4641c756879 input=4c606d05b32952e6]*/ { CHECK_INITIALIZED(self); CHECK_CLOSED(self); @@ -809,7 +860,7 @@ stringio_writable(stringio *self, PyObject *args) static PyObject * stringio_getstate(stringio *self) { - PyObject *initvalue = stringio_getvalue(self); + PyObject *initvalue = _io_StringIO_getvalue_impl(self); PyObject *dict; PyObject *state; @@ -857,7 +908,7 @@ stringio_setstate(stringio *self, PyObject *state) initarg = PyTuple_GetSlice(state, 0, 2); if (initarg == NULL) return NULL; - if (stringio_init(self, initarg, NULL) < 0) { + if (_io_StringIO___init__((PyObject *)self, initarg, NULL) < 0) { Py_DECREF(initarg); return NULL; } @@ -959,19 +1010,21 @@ stringio_newlines(stringio *self, void *context) return PyObject_GetAttr(self->decoder, _PyIO_str_newlines); } +#include "clinic/stringio.c.h" + static struct PyMethodDef stringio_methods[] = { - {"close", (PyCFunction)stringio_close, METH_NOARGS, stringio_close_doc}, - {"getvalue", (PyCFunction)stringio_getvalue, METH_NOARGS, stringio_getvalue_doc}, - {"read", (PyCFunction)stringio_read, METH_VARARGS, stringio_read_doc}, - {"readline", (PyCFunction)stringio_readline, METH_VARARGS, stringio_readline_doc}, - {"tell", (PyCFunction)stringio_tell, METH_NOARGS, stringio_tell_doc}, - {"truncate", (PyCFunction)stringio_truncate, METH_VARARGS, stringio_truncate_doc}, - {"seek", (PyCFunction)stringio_seek, METH_VARARGS, stringio_seek_doc}, - {"write", (PyCFunction)stringio_write, METH_O, stringio_write_doc}, - - {"seekable", (PyCFunction)stringio_seekable, METH_NOARGS, stringio_seekable_doc}, - {"readable", (PyCFunction)stringio_readable, METH_NOARGS, stringio_readable_doc}, - {"writable", (PyCFunction)stringio_writable, METH_NOARGS, stringio_writable_doc}, + _IO_STRINGIO_CLOSE_METHODDEF + _IO_STRINGIO_GETVALUE_METHODDEF + _IO_STRINGIO_READ_METHODDEF + _IO_STRINGIO_READLINE_METHODDEF + _IO_STRINGIO_TELL_METHODDEF + _IO_STRINGIO_TRUNCATE_METHODDEF + _IO_STRINGIO_SEEK_METHODDEF + _IO_STRINGIO_WRITE_METHODDEF + + _IO_STRINGIO_SEEKABLE_METHODDEF + _IO_STRINGIO_READABLE_METHODDEF + _IO_STRINGIO_WRITABLE_METHODDEF {"__getstate__", (PyCFunction)stringio_getstate, METH_NOARGS}, {"__setstate__", (PyCFunction)stringio_setstate, METH_O}, @@ -1013,7 +1066,7 @@ PyTypeObject PyStringIO_Type = { 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - stringio_doc, /*tp_doc*/ + _io_StringIO___init____doc__, /*tp_doc*/ (traverseproc)stringio_traverse, /*tp_traverse*/ (inquiry)stringio_clear, /*tp_clear*/ 0, /*tp_richcompare*/ @@ -1028,7 +1081,7 @@ PyTypeObject PyStringIO_Type = { 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ offsetof(stringio, dict), /*tp_dictoffset*/ - (initproc)stringio_init, /*tp_init*/ + _io_StringIO___init__, /*tp_init*/ 0, /*tp_alloc*/ stringio_new, /*tp_new*/ }; diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 67ac4457d5..b5990f3060 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -11,6 +11,20 @@ #include "structmember.h" #include "_iomodule.h" +/*[clinic input] +module _io +class _io.IncrementalNewlineDecoder "nldecoder_object *" "&PyIncrementalNewlineDecoder_Type" +class _io.TextIOWrapper "textio *" "&TextIOWrapper_TYpe" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=2097a4fc85670c26]*/ + +/*[python input] +class io_ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = '_PyIO_ConvertSsize_t' +[python start generated code]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=d0a811d3cbfd1b33]*/ + _Py_IDENTIFIER(close); _Py_IDENTIFIER(_dealloc_warn); _Py_IDENTIFIER(decode); @@ -210,16 +224,6 @@ PyTypeObject PyTextIOBase_Type = { /* IncrementalNewlineDecoder */ -PyDoc_STRVAR(incrementalnewlinedecoder_doc, - "Codec used when reading a file in universal newlines mode. It wraps\n" - "another incremental decoder, translating \\r\\n and \\r into \\n. It also\n" - "records the types of newlines encountered. When used with\n" - "translate=False, it ensures that the newline sequence is returned in\n" - "one piece. When used with decoder=None, it expects unicode strings as\n" - "decode input and translates newlines without first invoking an external\n" - "decoder.\n" - ); - typedef struct { PyObject_HEAD PyObject *decoder; @@ -229,19 +233,28 @@ typedef struct { unsigned int seennl: 3; } nldecoder_object; -static int -incrementalnewlinedecoder_init(nldecoder_object *self, - PyObject *args, PyObject *kwds) -{ - PyObject *decoder; - int translate; - PyObject *errors = NULL; - char *kwlist[] = {"decoder", "translate", "errors", NULL}; +/*[clinic input] +_io.IncrementalNewlineDecoder.__init__ + decoder: object + translate: int + errors: object(c_default="NULL") = "strict" - if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oi|O:IncrementalNewlineDecoder", - kwlist, &decoder, &translate, &errors)) - return -1; +Codec used when reading a file in universal newlines mode. + +It wraps another incremental decoder, translating \r\n and \r into \n. +It also records the types of newlines encountered. When used with +translate=False, it ensures that the newline sequence is returned in +one piece. When used with decoder=None, it expects unicode strings as +decode input and translates newlines without first invoking an external +decoder. +[clinic start generated code]*/ +static int +_io_IncrementalNewlineDecoder___init___impl(nldecoder_object *self, + PyObject *decoder, int translate, + PyObject *errors) +/*[clinic end generated code: output=fbd04d443e764ec2 input=89db6b19c6b126bf]*/ +{ self->decoder = decoder; Py_INCREF(decoder); @@ -495,22 +508,27 @@ _PyIncrementalNewlineDecoder_decode(PyObject *myself, return NULL; } +/*[clinic input] +_io.IncrementalNewlineDecoder.decode + input: object + final: int(c_default="0") = False +[clinic start generated code]*/ + static PyObject * -incrementalnewlinedecoder_decode(nldecoder_object *self, - PyObject *args, PyObject *kwds) +_io_IncrementalNewlineDecoder_decode_impl(nldecoder_object *self, + PyObject *input, int final) +/*[clinic end generated code: output=0d486755bb37a66e input=d65677385bfd6827]*/ { - char *kwlist[] = {"input", "final", NULL}; - PyObject *input; - int final = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:IncrementalNewlineDecoder", - kwlist, &input, &final)) - return NULL; return _PyIncrementalNewlineDecoder_decode((PyObject *) self, input, final); } +/*[clinic input] +_io.IncrementalNewlineDecoder.getstate +[clinic start generated code]*/ + static PyObject * -incrementalnewlinedecoder_getstate(nldecoder_object *self, PyObject *args) +_io_IncrementalNewlineDecoder_getstate_impl(nldecoder_object *self) +/*[clinic end generated code: output=f0d2c9c136f4e0d0 input=f8ff101825e32e7f]*/ { PyObject *buffer; unsigned PY_LONG_LONG flag; @@ -537,8 +555,16 @@ incrementalnewlinedecoder_getstate(nldecoder_object *self, PyObject *args) return Py_BuildValue("NK", buffer, flag); } +/*[clinic input] +_io.IncrementalNewlineDecoder.setstate + state: object + / +[clinic start generated code]*/ + static PyObject * -incrementalnewlinedecoder_setstate(nldecoder_object *self, PyObject *state) +_io_IncrementalNewlineDecoder_setstate(nldecoder_object *self, + PyObject *state) +/*[clinic end generated code: output=c10c622508b576cb input=c53fb505a76dbbe2]*/ { PyObject *buffer; unsigned PY_LONG_LONG flag; @@ -556,8 +582,13 @@ incrementalnewlinedecoder_setstate(nldecoder_object *self, PyObject *state) Py_RETURN_NONE; } +/*[clinic input] +_io.IncrementalNewlineDecoder.reset +[clinic start generated code]*/ + static PyObject * -incrementalnewlinedecoder_reset(nldecoder_object *self, PyObject *args) +_io_IncrementalNewlineDecoder_reset_impl(nldecoder_object *self) +/*[clinic end generated code: output=32fa40c7462aa8ff input=728678ddaea776df]*/ { self->seennl = 0; self->pendingcr = 0; @@ -591,95 +622,8 @@ incrementalnewlinedecoder_newlines_get(nldecoder_object *self, void *context) } - -static PyMethodDef incrementalnewlinedecoder_methods[] = { - {"decode", (PyCFunction)incrementalnewlinedecoder_decode, METH_VARARGS|METH_KEYWORDS}, - {"getstate", (PyCFunction)incrementalnewlinedecoder_getstate, METH_NOARGS}, - {"setstate", (PyCFunction)incrementalnewlinedecoder_setstate, METH_O}, - {"reset", (PyCFunction)incrementalnewlinedecoder_reset, METH_NOARGS}, - {NULL} -}; - -static PyGetSetDef incrementalnewlinedecoder_getset[] = { - {"newlines", (getter)incrementalnewlinedecoder_newlines_get, NULL, NULL}, - {NULL} -}; - -PyTypeObject PyIncrementalNewlineDecoder_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "_io.IncrementalNewlineDecoder", /*tp_name*/ - sizeof(nldecoder_object), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor)incrementalnewlinedecoder_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare */ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ - incrementalnewlinedecoder_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /*tp_weaklistoffset*/ - 0, /* tp_iter */ - 0, /* tp_iternext */ - incrementalnewlinedecoder_methods, /* tp_methods */ - 0, /* tp_members */ - incrementalnewlinedecoder_getset, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - (initproc)incrementalnewlinedecoder_init, /* tp_init */ - 0, /* tp_alloc */ - PyType_GenericNew, /* tp_new */ -}; - - /* TextIOWrapper */ -PyDoc_STRVAR(textiowrapper_doc, - "Character and line based layer over a BufferedIOBase object, buffer.\n" - "\n" - "encoding gives the name of the encoding that the stream will be\n" - "decoded or encoded with. It defaults to locale.getpreferredencoding(False).\n" - "\n" - "errors determines the strictness of encoding and decoding (see\n" - "help(codecs.Codec) or the documentation for codecs.register) and\n" - "defaults to \"strict\".\n" - "\n" - "newline controls how line endings are handled. It can be None, '',\n" - "'\\n', '\\r', and '\\r\\n'. It works as follows:\n" - "\n" - "* On input, if newline is None, universal newlines mode is\n" - " enabled. Lines in the input can end in '\\n', '\\r', or '\\r\\n', and\n" - " these are translated into '\\n' before being returned to the\n" - " caller. If it is '', universal newline mode is enabled, but line\n" - " endings are returned to the caller untranslated. If it has any of\n" - " the other legal values, input lines are only terminated by the given\n" - " string, and the line ending is returned to the caller untranslated.\n" - "\n" - "* On output, if newline is None, any '\\n' characters written are\n" - " translated to the system default line separator, os.linesep. If\n" - " newline is '' or '\\n', no translation takes place. If newline is any\n" - " of the other legal values, any '\\n' characters written are translated\n" - " to the given string.\n" - "\n" - "If line_buffering is True, a call to flush is implied when a call to\n" - "write contains a newline character." - ); - typedef PyObject * (*encodefunc_t)(PyObject *, PyObject *); @@ -742,7 +686,6 @@ typedef struct PyObject *dict; } textio; - /* A couple of specialized cases in order to bypass the slow incremental encoding methods for the most popular encodings. */ @@ -843,28 +786,59 @@ static encodefuncentry encodefuncs[] = { }; +/*[clinic input] +_io.TextIOWrapper.__init__ + buffer: object + encoding: str(nullable=True) = NULL + errors: str(nullable=True) = NULL + newline: str(nullable=True) = NULL + line_buffering: int(c_default="0") = False + write_through: int(c_default="0") = False + +Character and line based layer over a BufferedIOBase object, buffer. + +encoding gives the name of the encoding that the stream will be +decoded or encoded with. It defaults to locale.getpreferredencoding(False). + +errors determines the strictness of encoding and decoding (see +help(codecs.Codec) or the documentation for codecs.register) and +defaults to "strict". + +newline controls how line endings are handled. It can be None, '', +'\n', '\r', and '\r\n'. It works as follows: + +* On input, if newline is None, universal newlines mode is + enabled. Lines in the input can end in '\n', '\r', or '\r\n', and + these are translated into '\n' before being returned to the + caller. If it is '', universal newline mode is enabled, but line + endings are returned to the caller untranslated. If it has any of + the other legal values, input lines are only terminated by the given + string, and the line ending is returned to the caller untranslated. + +* On output, if newline is None, any '\n' characters written are + translated to the system default line separator, os.linesep. If + newline is '' or '\n', no translation takes place. If newline is any + of the other legal values, any '\n' characters written are translated + to the given string. + +If line_buffering is True, a call to flush is implied when a call to +write contains a newline character. +[clinic start generated code]*/ + static int -textiowrapper_init(textio *self, PyObject *args, PyObject *kwds) -{ - char *kwlist[] = {"buffer", "encoding", "errors", - "newline", "line_buffering", "write_through", - NULL}; - PyObject *buffer, *raw, *codec_info = NULL; - char *encoding = NULL; - char *errors = NULL; - char *newline = NULL; - int line_buffering = 0, write_through = 0; +_io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, + const char *encoding, const char *errors, + const char *newline, int line_buffering, + int write_through) +/*[clinic end generated code: output=56a83402ce2a8381 input=1f20decb8d54a4ec]*/ +{ + PyObject *raw, *codec_info = NULL; _PyIO_State *state = NULL; - PyObject *res; int r; self->ok = 0; self->detached = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|zzzii:fileio", - kwlist, &buffer, &encoding, &errors, - &newline, &line_buffering, &write_through)) - return -1; if (newline && newline[0] != '\0' && !(newline[0] == '\n' && newline[1] == '\0') @@ -1244,8 +1218,13 @@ textiowrapper_closed_get(textio *self, void *context); } +/*[clinic input] +_io.TextIOWrapper.detach +[clinic start generated code]*/ + static PyObject * -textiowrapper_detach(textio *self) +_io_TextIOWrapper_detach_impl(textio *self) +/*[clinic end generated code: output=7ba3715cd032d5f2 input=e5a71fbda9e1d9f9]*/ { PyObject *buffer, *res; CHECK_ATTACHED(self); @@ -1290,25 +1269,26 @@ _textiowrapper_writeflush(textio *self) return 0; } +/*[clinic input] +_io.TextIOWrapper.write + text: unicode + / +[clinic start generated code]*/ + static PyObject * -textiowrapper_write(textio *self, PyObject *args) +_io_TextIOWrapper_write_impl(textio *self, PyObject *text) +/*[clinic end generated code: output=d2deb0d50771fcec input=fdf19153584a0e44]*/ { PyObject *ret; - PyObject *text; /* owned reference */ PyObject *b; Py_ssize_t textlen; int haslf = 0; int needflush = 0, text_needflush = 0; - CHECK_ATTACHED(self); - - if (!PyArg_ParseTuple(args, "U:write", &text)) { - return NULL; - } - if (PyUnicode_READY(text) == -1) return NULL; + CHECK_ATTACHED(self); CHECK_CLOSED(self); if (self->encoder == NULL) @@ -1557,17 +1537,19 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint) return -1; } +/*[clinic input] +_io.TextIOWrapper.read + size as n: io_ssize_t = -1 + / +[clinic start generated code]*/ + static PyObject * -textiowrapper_read(textio *self, PyObject *args) +_io_TextIOWrapper_read_impl(textio *self, Py_ssize_t n) +/*[clinic end generated code: output=7e651ce6cc6a25a6 input=8c09398424085cca]*/ { - Py_ssize_t n = -1; PyObject *result = NULL, *chunks = NULL; CHECK_ATTACHED(self); - - if (!PyArg_ParseTuple(args, "|O&:read", &_PyIO_ConvertSsize_t, &n)) - return NULL; - CHECK_CLOSED(self); if (self->decoder == NULL) @@ -1933,16 +1915,18 @@ _textiowrapper_readline(textio *self, Py_ssize_t limit) return NULL; } +/*[clinic input] +_io.TextIOWrapper.readline + size: Py_ssize_t = -1 + / +[clinic start generated code]*/ + static PyObject * -textiowrapper_readline(textio *self, PyObject *args) +_io_TextIOWrapper_readline_impl(textio *self, Py_ssize_t size) +/*[clinic end generated code: output=344afa98804e8b25 input=56c7172483b36db6]*/ { - Py_ssize_t limit = -1; - CHECK_ATTACHED(self); - if (!PyArg_ParseTuple(args, "|n:readline", &limit)) { - return NULL; - } - return _textiowrapper_readline(self, limit); + return _textiowrapper_readline(self, size); } /* Seek and Tell */ @@ -2074,19 +2058,23 @@ _textiowrapper_encoder_setstate(textio *self, cookie_type *cookie) self, cookie->start_pos == 0 && cookie->dec_flags == 0); } +/*[clinic input] +_io.TextIOWrapper.seek + cookie as cookieObj: object + whence: int = 0 + / +[clinic start generated code]*/ + static PyObject * -textiowrapper_seek(textio *self, PyObject *args) +_io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence) +/*[clinic end generated code: output=0a15679764e2d04d input=0458abeb3d7842be]*/ { - PyObject *cookieObj, *posobj; + PyObject *posobj; cookie_type cookie; - int whence = 0; PyObject *res; int cmp; CHECK_ATTACHED(self); - - if (!PyArg_ParseTuple(args, "O|i:seek", &cookieObj, &whence)) - return NULL; CHECK_CLOSED(self); Py_INCREF(cookieObj); @@ -2258,8 +2246,13 @@ textiowrapper_seek(textio *self, PyObject *args) } +/*[clinic input] +_io.TextIOWrapper.tell +[clinic start generated code]*/ + static PyObject * -textiowrapper_tell(textio *self, PyObject *args) +_io_TextIOWrapper_tell_impl(textio *self) +/*[clinic end generated code: output=4f168c08bf34ad5f input=9a2caf88c24f9ddf]*/ { PyObject *res; PyObject *posobj = NULL; @@ -2466,16 +2459,19 @@ fail: return NULL; } +/*[clinic input] +_io.TextIOWrapper.truncate + pos: object = None + / +[clinic start generated code]*/ + static PyObject * -textiowrapper_truncate(textio *self, PyObject *args) +_io_TextIOWrapper_truncate_impl(textio *self, PyObject *pos) +/*[clinic end generated code: output=90ec2afb9bb7745f input=56ec8baa65aea377]*/ { - PyObject *pos = Py_None; PyObject *res; CHECK_ATTACHED(self) - if (!PyArg_ParseTuple(args, "|O:truncate", &pos)) { - return NULL; - } res = PyObject_CallMethodObjArgs((PyObject *) self, _PyIO_str_flush, NULL); if (res == NULL) @@ -2540,36 +2536,61 @@ error: /* Inquiries */ +/*[clinic input] +_io.TextIOWrapper.fileno +[clinic start generated code]*/ + static PyObject * -textiowrapper_fileno(textio *self, PyObject *args) +_io_TextIOWrapper_fileno_impl(textio *self) +/*[clinic end generated code: output=21490a4c3da13e6c input=c488ca83d0069f9b]*/ { CHECK_ATTACHED(self); return _PyObject_CallMethodId(self->buffer, &PyId_fileno, NULL); } +/*[clinic input] +_io.TextIOWrapper.seekable +[clinic start generated code]*/ + static PyObject * -textiowrapper_seekable(textio *self, PyObject *args) +_io_TextIOWrapper_seekable_impl(textio *self) +/*[clinic end generated code: output=ab223dbbcffc0f00 input=8b005ca06e1fca13]*/ { CHECK_ATTACHED(self); return _PyObject_CallMethodId(self->buffer, &PyId_seekable, NULL); } +/*[clinic input] +_io.TextIOWrapper.readable +[clinic start generated code]*/ + static PyObject * -textiowrapper_readable(textio *self, PyObject *args) +_io_TextIOWrapper_readable_impl(textio *self) +/*[clinic end generated code: output=72ff7ba289a8a91b input=0704ea7e01b0d3eb]*/ { CHECK_ATTACHED(self); return _PyObject_CallMethodId(self->buffer, &PyId_readable, NULL); } +/*[clinic input] +_io.TextIOWrapper.writable +[clinic start generated code]*/ + static PyObject * -textiowrapper_writable(textio *self, PyObject *args) +_io_TextIOWrapper_writable_impl(textio *self) +/*[clinic end generated code: output=a728c71790d03200 input=c41740bc9d8636e8]*/ { CHECK_ATTACHED(self); return _PyObject_CallMethodId(self->buffer, &PyId_writable, NULL); } +/*[clinic input] +_io.TextIOWrapper.isatty +[clinic start generated code]*/ + static PyObject * -textiowrapper_isatty(textio *self, PyObject *args) +_io_TextIOWrapper_isatty_impl(textio *self) +/*[clinic end generated code: output=12be1a35bace882e input=fb68d9f2c99bbfff]*/ { CHECK_ATTACHED(self); return _PyObject_CallMethodId(self->buffer, &PyId_isatty, NULL); @@ -2583,8 +2604,13 @@ textiowrapper_getstate(textio *self, PyObject *args) return NULL; } +/*[clinic input] +_io.TextIOWrapper.flush +[clinic start generated code]*/ + static PyObject * -textiowrapper_flush(textio *self, PyObject *args) +_io_TextIOWrapper_flush_impl(textio *self) +/*[clinic end generated code: output=59de9165f9c2e4d2 input=928c60590694ab85]*/ { CHECK_ATTACHED(self); CHECK_CLOSED(self); @@ -2594,8 +2620,13 @@ textiowrapper_flush(textio *self, PyObject *args) return _PyObject_CallMethodId(self->buffer, &PyId_flush, NULL); } +/*[clinic input] +_io.TextIOWrapper.close +[clinic start generated code]*/ + static PyObject * -textiowrapper_close(textio *self, PyObject *args) +_io_TextIOWrapper_close_impl(textio *self) +/*[clinic end generated code: output=056ccf8b4876e4f4 input=9c2114315eae1948]*/ { PyObject *res; int r; @@ -2739,24 +2770,81 @@ textiowrapper_chunk_size_set(textio *self, PyObject *arg, void *context) return 0; } +#include "clinic/textio.c.h" + +static PyMethodDef incrementalnewlinedecoder_methods[] = { + _IO_INCREMENTALNEWLINEDECODER_DECODE_METHODDEF + _IO_INCREMENTALNEWLINEDECODER_GETSTATE_METHODDEF + _IO_INCREMENTALNEWLINEDECODER_SETSTATE_METHODDEF + _IO_INCREMENTALNEWLINEDECODER_RESET_METHODDEF + {NULL} +}; + +static PyGetSetDef incrementalnewlinedecoder_getset[] = { + {"newlines", (getter)incrementalnewlinedecoder_newlines_get, NULL, NULL}, + {NULL} +}; + +PyTypeObject PyIncrementalNewlineDecoder_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "_io.IncrementalNewlineDecoder", /*tp_name*/ + sizeof(nldecoder_object), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)incrementalnewlinedecoder_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare */ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ + _io_IncrementalNewlineDecoder___init____doc__, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /*tp_weaklistoffset*/ + 0, /* tp_iter */ + 0, /* tp_iternext */ + incrementalnewlinedecoder_methods, /* tp_methods */ + 0, /* tp_members */ + incrementalnewlinedecoder_getset, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + _io_IncrementalNewlineDecoder___init__, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ +}; + + static PyMethodDef textiowrapper_methods[] = { - {"detach", (PyCFunction)textiowrapper_detach, METH_NOARGS}, - {"write", (PyCFunction)textiowrapper_write, METH_VARARGS}, - {"read", (PyCFunction)textiowrapper_read, METH_VARARGS}, - {"readline", (PyCFunction)textiowrapper_readline, METH_VARARGS}, - {"flush", (PyCFunction)textiowrapper_flush, METH_NOARGS}, - {"close", (PyCFunction)textiowrapper_close, METH_NOARGS}, - - {"fileno", (PyCFunction)textiowrapper_fileno, METH_NOARGS}, - {"seekable", (PyCFunction)textiowrapper_seekable, METH_NOARGS}, - {"readable", (PyCFunction)textiowrapper_readable, METH_NOARGS}, - {"writable", (PyCFunction)textiowrapper_writable, METH_NOARGS}, - {"isatty", (PyCFunction)textiowrapper_isatty, METH_NOARGS}, + _IO_TEXTIOWRAPPER_DETACH_METHODDEF + _IO_TEXTIOWRAPPER_WRITE_METHODDEF + _IO_TEXTIOWRAPPER_READ_METHODDEF + _IO_TEXTIOWRAPPER_READLINE_METHODDEF + _IO_TEXTIOWRAPPER_FLUSH_METHODDEF + _IO_TEXTIOWRAPPER_CLOSE_METHODDEF + + _IO_TEXTIOWRAPPER_FILENO_METHODDEF + _IO_TEXTIOWRAPPER_SEEKABLE_METHODDEF + _IO_TEXTIOWRAPPER_READABLE_METHODDEF + _IO_TEXTIOWRAPPER_WRITABLE_METHODDEF + _IO_TEXTIOWRAPPER_ISATTY_METHODDEF {"__getstate__", (PyCFunction)textiowrapper_getstate, METH_NOARGS}, - {"seek", (PyCFunction)textiowrapper_seek, METH_VARARGS}, - {"tell", (PyCFunction)textiowrapper_tell, METH_NOARGS}, - {"truncate", (PyCFunction)textiowrapper_truncate, METH_VARARGS}, + _IO_TEXTIOWRAPPER_SEEK_METHODDEF + _IO_TEXTIOWRAPPER_TELL_METHODDEF + _IO_TEXTIOWRAPPER_TRUNCATE_METHODDEF {NULL, NULL} }; @@ -2802,7 +2890,7 @@ PyTypeObject PyTextIOWrapper_Type = { 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ - textiowrapper_doc, /* tp_doc */ + _io_TextIOWrapper___init____doc__, /* tp_doc */ (traverseproc)textiowrapper_traverse, /* tp_traverse */ (inquiry)textiowrapper_clear, /* tp_clear */ 0, /* tp_richcompare */ @@ -2817,7 +2905,7 @@ PyTypeObject PyTextIOWrapper_Type = { 0, /* tp_descr_get */ 0, /* tp_descr_set */ offsetof(textio, dict), /*tp_dictoffset*/ - (initproc)textiowrapper_init, /* tp_init */ + _io_TextIOWrapper___init__, /* tp_init */ 0, /* tp_alloc */ PyType_GenericNew, /* tp_new */ 0, /* tp_free */ -- cgit v1.2.1 From 73bb19ea7143c943ea88e281feb3a1f7a5c5019d Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Thu, 16 Apr 2015 17:21:54 +0200 Subject: Fix typo in assert statement --- Modules/_io/fileio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 3c52c802e3..145d93adeb 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -252,7 +252,7 @@ _io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode, struct _Py_stat_struct fdfstat; int async_err = 0; - assert(PyFileIO_Check(oself)); + assert(PyFileIO_Check(self)); if (self->fd >= 0) { if (self->closefd) { /* Have to close the existing file first. */ -- cgit v1.2.1 From c50fe9ae3396de22f58798b0cc0e381b5a99ce3d Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Thu, 16 Apr 2015 17:29:11 +0200 Subject: Remove redundant check fro md5module. CID 1294331 (#1 of 1): Identical code for different branches (IDENTICAL_BRANCHES) --- Modules/md5module.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/md5module.c b/Modules/md5module.c index 25b163c179..00ee6c3379 100644 --- a/Modules/md5module.c +++ b/Modules/md5module.c @@ -350,13 +350,8 @@ MD5Type_copy_impl(MD5object *self) { MD5object *newobj; - if (Py_TYPE(self) == &MD5type) { - if ( (newobj = newMD5object())==NULL) - return NULL; - } else { - if ( (newobj = newMD5object())==NULL) - return NULL; - } + if ((newobj = newMD5object())==NULL) + return NULL; newobj->hash_state = self->hash_state; return (PyObject *)newobj; -- cgit v1.2.1 From 921d3fd03375eb2379073b36d5e3f6634b2f43dd Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 17 Apr 2015 21:05:18 +0300 Subject: Issue #20184: Converted _dbm and _gdbm modules to Argument Clinic. --- Modules/_dbmmodule.c | 128 +++++++++-------- Modules/_gdbmmodule.c | 306 ++++++++++++++++++++++++----------------- Modules/clinic/_dbmmodule.c.h | 90 ++++++++++-- Modules/clinic/_gdbmmodule.c.h | 256 ++++++++++++++++++++++++++++++++++ 4 files changed, 580 insertions(+), 200 deletions(-) create mode 100644 Modules/clinic/_gdbmmodule.c.h (limited to 'Modules') diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index b815e97fd5..6c605eacc9 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -29,10 +29,10 @@ static char *which_dbm = "Berkeley DB"; #endif /*[clinic input] -module dbm -class dbm.dbm "dbmobject *" "&Dbmtype" +module _dbm +class _dbm.dbm "dbmobject *" "&Dbmtype" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=92450564684a69a3]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=9b1aa8756d16150e]*/ typedef struct { PyObject_HEAD @@ -51,15 +51,6 @@ static PyTypeObject Dbmtype; static PyObject *DbmError; -/*[python input] -class dbmobject_converter(self_converter): - type = "dbmobject *" - def pre_render(self): - super().pre_render() - self.name = 'dp' -[python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=6ad536357913879a]*/ - static PyObject * newdbmobject(const char *file, int flags, int mode) { @@ -183,29 +174,43 @@ static PyMappingMethods dbm_as_mapping = { (objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/ }; +/*[clinic input] +_dbm.dbm.close + +Close the database. +[clinic start generated code]*/ + static PyObject * -dbm__close(dbmobject *dp, PyObject *unused) +_dbm_dbm_close_impl(dbmobject *self) +/*[clinic end generated code: output=c8dc5b6709600b86 input=046db72377d51be8]*/ { - if (dp->di_dbm) - dbm_close(dp->di_dbm); - dp->di_dbm = NULL; + if (self->di_dbm) + dbm_close(self->di_dbm); + self->di_dbm = NULL; Py_INCREF(Py_None); return Py_None; } +/*[clinic input] +_dbm.dbm.keys + +Return a list of all keys in the database. +[clinic start generated code]*/ + static PyObject * -dbm_keys(dbmobject *dp, PyObject *unused) +_dbm_dbm_keys_impl(dbmobject *self) +/*[clinic end generated code: output=434549f7c121b33c input=d210ba778cd9c68a]*/ { PyObject *v, *item; datum key; int err; - check_dbmobject_open(dp); + check_dbmobject_open(self); v = PyList_New(0); if (v == NULL) return NULL; - for (key = dbm_firstkey(dp->di_dbm); key.dptr; - key = dbm_nextkey(dp->di_dbm)) { + for (key = dbm_firstkey(self->di_dbm); key.dptr; + key = dbm_nextkey(self->di_dbm)) { item = PyBytes_FromStringAndSize(key.dptr, key.dsize); if (item == NULL) { Py_DECREF(v); @@ -267,29 +272,26 @@ static PySequenceMethods dbm_as_sequence = { }; /*[clinic input] - -dbm.dbm.get - - self: dbmobject +_dbm.dbm.get key: str(types={'str', 'robuffer'}, length=True) - default: object = None + default: object(c_default="NULL") = b'' / Return the value for key if present, otherwise default. [clinic start generated code]*/ static PyObject * -dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, - PyObject *default_value) -/*[clinic end generated code: output=4f5c0e523eaf1251 input=f81478bc211895ef]*/ +_dbm_dbm_get_impl(dbmobject *self, const char *key, + Py_ssize_clean_t key_length, PyObject *default_value) +/*[clinic end generated code: output=b44f95eba8203d93 input=fee97bbe85e84822]*/ { datum dbm_key, val; dbm_key.dptr = (char *)key; dbm_key.dsize = key_length; - check_dbmobject_open(dp); - val = dbm_fetch(dp->di_dbm, dbm_key); + check_dbmobject_open(self); + val = dbm_fetch(self->di_dbm, dbm_key); if (val.dptr != NULL) return PyBytes_FromStringAndSize(val.dptr, val.dsize); @@ -297,46 +299,55 @@ dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, return default_value; } +/*[clinic input] +_dbm.dbm.setdefault + key: str(types={'str', 'robuffer'}, length=True) + default: object(c_default="NULL") = b'' + / + +Return the value for key if present, otherwise default. + +If key is not in the database, it is inserted with default as the value. +[clinic start generated code]*/ + static PyObject * -dbm_setdefault(dbmobject *dp, PyObject *args) +_dbm_dbm_setdefault_impl(dbmobject *self, const char *key, + Py_ssize_clean_t key_length, + PyObject *default_value) +/*[clinic end generated code: output=52545886cf272161 input=6a3b99ae91f20203]*/ { - datum key, val; - PyObject *defvalue = NULL; - char *tmp_ptr; + datum dbm_key, val; Py_ssize_t tmp_size; - if (!PyArg_ParseTuple(args, "s#|O:setdefault", - &tmp_ptr, &tmp_size, &defvalue)) - return NULL; - key.dptr = tmp_ptr; - key.dsize = tmp_size; - check_dbmobject_open(dp); - val = dbm_fetch(dp->di_dbm, key); + dbm_key.dptr = (char *)key; + dbm_key.dsize = key_length; + check_dbmobject_open(self); + val = dbm_fetch(self->di_dbm, dbm_key); if (val.dptr != NULL) return PyBytes_FromStringAndSize(val.dptr, val.dsize); - if (defvalue == NULL) { - defvalue = PyBytes_FromStringAndSize(NULL, 0); - if (defvalue == NULL) + if (default_value == NULL) { + default_value = PyBytes_FromStringAndSize(NULL, 0); + if (default_value == NULL) return NULL; val.dptr = NULL; val.dsize = 0; } else { - if ( !PyArg_Parse(defvalue, "s#", &val.dptr, &tmp_size) ) { + if ( !PyArg_Parse(default_value, "s#", &val.dptr, &tmp_size) ) { PyErr_SetString(PyExc_TypeError, "dbm mappings have byte string elements only"); return NULL; } val.dsize = tmp_size; - Py_INCREF(defvalue); + Py_INCREF(default_value); } - if (dbm_store(dp->di_dbm, key, val, DBM_INSERT) < 0) { - dbm_clearerr(dp->di_dbm); + if (dbm_store(self->di_dbm, dbm_key, val, DBM_INSERT) < 0) { + dbm_clearerr(self->di_dbm); PyErr_SetString(DbmError, "cannot add item to database"); - Py_DECREF(defvalue); + Py_DECREF(default_value); return NULL; } - return defvalue; + return default_value; } static PyObject * @@ -355,15 +366,10 @@ dbm__exit__(PyObject *self, PyObject *args) static PyMethodDef dbm_methods[] = { - {"close", (PyCFunction)dbm__close, METH_NOARGS, - "close()\nClose the database."}, - {"keys", (PyCFunction)dbm_keys, METH_NOARGS, - "keys() -> list\nReturn a list of all keys in the database."}, - DBM_DBM_GET_METHODDEF - {"setdefault", (PyCFunction)dbm_setdefault, METH_VARARGS, - "setdefault(key[, default]) -> value\n" - "Return the value for key if present, otherwise default. If key\n" - "is not in the database, it is inserted with default as the value."}, + _DBM_DBM_CLOSE_METHODDEF + _DBM_DBM_KEYS_METHODDEF + _DBM_DBM_GET_METHODDEF + _DBM_DBM_SETDEFAULT_METHODDEF {"__enter__", dbm__enter__, METH_NOARGS, NULL}, {"__exit__", dbm__exit__, METH_VARARGS, NULL}, {NULL, NULL} /* sentinel */ @@ -404,7 +410,7 @@ static PyTypeObject Dbmtype = { /*[clinic input] -dbm.open as dbmopen +_dbm.open as dbmopen filename: str The filename to open. @@ -425,7 +431,7 @@ Return a database object. static PyObject * dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode) -/*[clinic end generated code: output=e8d4b36f25c733fd input=6499ab0fab1333ac]*/ +/*[clinic end generated code: output=e8d4b36f25c733fd input=226334bade5764e6]*/ { int iflags; diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c index 229e16e627..eb6da8e175 100644 --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -16,17 +16,23 @@ extern const char * gdbm_strerror(gdbm_error); #endif +/*[clinic input] +module _gdbm +class _gdbm.gdbm "dbmobject *" "&Dbmtype" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=113927c6170729b2]*/ + PyDoc_STRVAR(gdbmmodule__doc__, "This module provides an interface to the GNU DBM (GDBM) library.\n\ \n\ This module is quite similar to the dbm module, but uses GDBM instead to\n\ -provide some additional functionality. Please note that the file formats\n\ -created by GDBM and dbm are incompatible. \n\ +provide some additional functionality. Please note that the file formats\n\ +created by GDBM and dbm are incompatible.\n\ \n\ GDBM objects behave like mappings (dictionaries), except that keys and\n\ -values are always strings. Printing a GDBM object doesn't print the\n\ -keys and values, and the items() and values() methods are not\n\ -supported."); +values are always immutable bytes-like objects or strings. Printing\n\ +a GDBM object doesn't print the keys and values, and the items() and\n\ +values() methods are not supported."); typedef struct { PyObject_HEAD @@ -36,6 +42,8 @@ typedef struct { static PyTypeObject Dbmtype; +#include "clinic/_gdbmmodule.c.h" + #define is_dbmobject(v) (Py_TYPE(v) == &Dbmtype) #define check_dbmobject_open(v) if ((v)->di_dbm == NULL) \ { PyErr_SetString(DbmError, "GDBM object has already been closed"); \ @@ -48,15 +56,15 @@ static PyObject *DbmError; PyDoc_STRVAR(gdbm_object__doc__, "This object represents a GDBM database.\n\ GDBM objects behave like mappings (dictionaries), except that keys and\n\ -values are always strings. Printing a GDBM object doesn't print the\n\ -keys and values, and the items() and values() methods are not\n\ -supported.\n\ +values are always immutable bytes-like objects or strings. Printing\n\ +a GDBM object doesn't print the keys and values, and the items() and\n\ +values() methods are not supported.\n\ \n\ GDBM objects also support additional operations such as firstkey,\n\ nextkey, reorganize, and sync."); static PyObject * -newdbmobject(char *file, int flags, int mode) +newdbmobject(const char *file, int flags, int mode) { dbmobject *dp; @@ -65,7 +73,7 @@ newdbmobject(char *file, int flags, int mode) return NULL; dp->di_size = -1; errno = 0; - if ((dp->di_dbm = gdbm_open(file, 0, flags, mode, NULL)) == 0) { + if ((dp->di_dbm = gdbm_open((char *)file, 0, flags, mode, NULL)) == 0) { if (errno != 0) PyErr_SetFromErrno(DbmError); else @@ -135,24 +143,27 @@ dbm_subscript(dbmobject *dp, PyObject *key) return v; } -PyDoc_STRVAR(dbm_get__doc__, -"get(key[, default]) -> value\n\ -Get the value for key, or default if not present; if not given,\n\ -default is None."); +/*[clinic input] +_gdbm.gdbm.get + + key: object + default: object = None + / + +Get the value for key, or default if not present. +[clinic start generated code]*/ static PyObject * -dbm_get(dbmobject *dp, PyObject *args) +_gdbm_gdbm_get_impl(dbmobject *self, PyObject *key, PyObject *default_value) +/*[clinic end generated code: output=19b7c585ad4f554a input=a9c20423f34c17b6]*/ { - PyObject *v, *res; - PyObject *def = Py_None; + PyObject *res; - if (!PyArg_UnpackTuple(args, "get", 1, 2, &v, &def)) - return NULL; - res = dbm_subscript(dp, v); + res = dbm_subscript(self, key); if (res == NULL && PyErr_ExceptionMatches(PyExc_KeyError)) { PyErr_Clear(); - Py_INCREF(def); - return def; + Py_INCREF(default_value); + return default_value; } return res; } @@ -198,25 +209,29 @@ dbm_ass_sub(dbmobject *dp, PyObject *v, PyObject *w) return 0; } -PyDoc_STRVAR(dbm_setdefault__doc__, -"setdefault(key[, default]) -> value\n\ -Get value for key, or set it to default and return default if not present;\n\ -if not given, default is None."); +/*[clinic input] +_gdbm.gdbm.setdefault + + key: object + default: object = None + / + +Get value for key, or set it to default and return default if not present. +[clinic start generated code]*/ static PyObject * -dbm_setdefault(dbmobject *dp, PyObject *args) +_gdbm_gdbm_setdefault_impl(dbmobject *self, PyObject *key, + PyObject *default_value) +/*[clinic end generated code: output=88760ee520329012 input=0db46b69e9680171]*/ { - PyObject *v, *res; - PyObject *def = Py_None; + PyObject *res; - if (!PyArg_UnpackTuple(args, "setdefault", 1, 2, &v, &def)) - return NULL; - res = dbm_subscript(dp, v); + res = dbm_subscript(self, key); if (res == NULL && PyErr_ExceptionMatches(PyExc_KeyError)) { PyErr_Clear(); - if (dbm_ass_sub(dp, v, def) < 0) + if (dbm_ass_sub(self, key, default_value) < 0) return NULL; - return dbm_subscript(dp, v); + return dbm_subscript(self, key); } return res; } @@ -227,43 +242,49 @@ static PyMappingMethods dbm_as_mapping = { (objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/ }; -PyDoc_STRVAR(dbm_close__doc__, -"close() -> None\n\ -Closes the database."); +/*[clinic input] +_gdbm.gdbm.close + +Close the database. +[clinic start generated code]*/ static PyObject * -dbm_close(dbmobject *dp, PyObject *unused) +_gdbm_gdbm_close_impl(dbmobject *self) +/*[clinic end generated code: output=23512a594598b563 input=0a203447379b45fd]*/ { - if (dp->di_dbm) - gdbm_close(dp->di_dbm); - dp->di_dbm = NULL; + if (self->di_dbm) + gdbm_close(self->di_dbm); + self->di_dbm = NULL; Py_INCREF(Py_None); return Py_None; } /* XXX Should return a set or a set view */ -PyDoc_STRVAR(dbm_keys__doc__, -"keys() -> list_of_keys\n\ -Get a list of all keys in the database."); +/*[clinic input] +_gdbm.gdbm.keys + +Get a list of all keys in the database. +[clinic start generated code]*/ static PyObject * -dbm_keys(dbmobject *dp, PyObject *unused) +_gdbm_gdbm_keys_impl(dbmobject *self) +/*[clinic end generated code: output=cb4b1776c3645dcc input=1832ee0a3132cfaf]*/ { PyObject *v, *item; datum key, nextkey; int err; - if (dp == NULL || !is_dbmobject(dp)) { + if (self == NULL || !is_dbmobject(self)) { PyErr_BadInternalCall(); return NULL; } - check_dbmobject_open(dp); + check_dbmobject_open(self); v = PyList_New(0); if (v == NULL) return NULL; - key = gdbm_firstkey(dp->di_dbm); + key = gdbm_firstkey(self->di_dbm); while (key.dptr) { item = PyBytes_FromStringAndSize(key.dptr, key.dsize); if (item == NULL) { @@ -278,7 +299,7 @@ dbm_keys(dbmobject *dp, PyObject *unused) Py_DECREF(v); return NULL; } - nextkey = gdbm_nextkey(dp->di_dbm, key); + nextkey = gdbm_nextkey(self->di_dbm, key); free(key.dptr); key = nextkey; } @@ -329,21 +350,25 @@ static PySequenceMethods dbm_as_sequence = { 0, /* sq_inplace_repeat */ }; -PyDoc_STRVAR(dbm_firstkey__doc__, -"firstkey() -> key\n\ -It's possible to loop over every key in the database using this method\n\ -and the nextkey() method. The traversal is ordered by GDBM's internal\n\ -hash values, and won't be sorted by the key values. This method\n\ -returns the starting key."); +/*[clinic input] +_gdbm.gdbm.firstkey + +Return the starting key for the traversal. + +It's possible to loop over every key in the database using this method +and the nextkey() method. The traversal is ordered by GDBM's internal +hash values, and won't be sorted by the key values. +[clinic start generated code]*/ static PyObject * -dbm_firstkey(dbmobject *dp, PyObject *unused) +_gdbm_gdbm_firstkey_impl(dbmobject *self) +/*[clinic end generated code: output=9ff85628d84b65d2 input=0dbd6a335d69bba0]*/ { PyObject *v; datum key; - check_dbmobject_open(dp); - key = gdbm_firstkey(dp->di_dbm); + check_dbmobject_open(self); + key = gdbm_firstkey(self->di_dbm); if (key.dptr) { v = PyBytes_FromStringAndSize(key.dptr, key.dsize); free(key.dptr); @@ -355,27 +380,35 @@ dbm_firstkey(dbmobject *dp, PyObject *unused) } } -PyDoc_STRVAR(dbm_nextkey__doc__, -"nextkey(key) -> next_key\n\ -Returns the key that follows key in the traversal.\n\ -The following code prints every key in the database db, without having\n\ -to create a list in memory that contains them all:\n\ -\n\ - k = db.firstkey()\n\ - while k != None:\n\ - print k\n\ - k = db.nextkey(k)"); +/*[clinic input] +_gdbm.gdbm.nextkey + + key: str(types={'str', 'robuffer'}, length=True) + / + +Returns the key that follows key in the traversal. + +The following code prints every key in the database db, without having +to create a list in memory that contains them all: + + k = db.firstkey() + while k != None: + print(k) + k = db.nextkey(k) +[clinic start generated code]*/ static PyObject * -dbm_nextkey(dbmobject *dp, PyObject *args) +_gdbm_gdbm_nextkey_impl(dbmobject *self, const char *key, + Py_ssize_clean_t key_length) +/*[clinic end generated code: output=192ab892de6eb2f6 input=df8e8828201214a6]*/ { PyObject *v; - datum key, nextkey; + datum dbm_key, nextkey; - if (!PyArg_ParseTuple(args, "s#:nextkey", &key.dptr, &key.dsize)) - return NULL; - check_dbmobject_open(dp); - nextkey = gdbm_nextkey(dp->di_dbm, key); + dbm_key.dptr = (char *)key; + dbm_key.dsize = key_length; + check_dbmobject_open(self); + nextkey = gdbm_nextkey(self->di_dbm, dbm_key); if (nextkey.dptr) { v = PyBytes_FromStringAndSize(nextkey.dptr, nextkey.dsize); free(nextkey.dptr); @@ -387,20 +420,25 @@ dbm_nextkey(dbmobject *dp, PyObject *args) } } -PyDoc_STRVAR(dbm_reorganize__doc__, -"reorganize() -> None\n\ -If you have carried out a lot of deletions and would like to shrink\n\ -the space used by the GDBM file, this routine will reorganize the\n\ -database. GDBM will not shorten the length of a database file except\n\ -by using this reorganization; otherwise, deleted file space will be\n\ -kept and reused as new (key,value) pairs are added."); +/*[clinic input] +_gdbm.gdbm.reorganize + +Reorganize the database. + +If you have carried out a lot of deletions and would like to shrink +the space used by the GDBM file, this routine will reorganize the +database. GDBM will not shorten the length of a database file except +by using this reorganization; otherwise, deleted file space will be +kept and reused as new (key,value) pairs are added. +[clinic start generated code]*/ static PyObject * -dbm_reorganize(dbmobject *dp, PyObject *unused) +_gdbm_gdbm_reorganize_impl(dbmobject *self) +/*[clinic end generated code: output=38d9624df92e961d input=f6bea85bcfd40dd2]*/ { - check_dbmobject_open(dp); + check_dbmobject_open(self); errno = 0; - if (gdbm_reorganize(dp->di_dbm) < 0) { + if (gdbm_reorganize(self->di_dbm) < 0) { if (errno != 0) PyErr_SetFromErrno(DbmError); else @@ -411,16 +449,21 @@ dbm_reorganize(dbmobject *dp, PyObject *unused) return Py_None; } -PyDoc_STRVAR(dbm_sync__doc__, -"sync() -> None\n\ -When the database has been opened in fast mode, this method forces\n\ -any unwritten data to be written to the disk."); +/*[clinic input] +_gdbm.gdbm.sync + +Flush the database to the disk file. + +When the database has been opened in fast mode, this method forces +any unwritten data to be written to the disk. +[clinic start generated code]*/ static PyObject * -dbm_sync(dbmobject *dp, PyObject *unused) +_gdbm_gdbm_sync_impl(dbmobject *self) +/*[clinic end generated code: output=488b15f47028f125 input=2a47d2c9e153ab8a]*/ { - check_dbmobject_open(dp); - gdbm_sync(dp->di_dbm); + check_dbmobject_open(self); + gdbm_sync(self->di_dbm); Py_INCREF(Py_None); return Py_None; } @@ -440,14 +483,15 @@ dbm__exit__(PyObject *self, PyObject *args) } static PyMethodDef dbm_methods[] = { - {"close", (PyCFunction)dbm_close, METH_NOARGS, dbm_close__doc__}, - {"keys", (PyCFunction)dbm_keys, METH_NOARGS, dbm_keys__doc__}, - {"firstkey", (PyCFunction)dbm_firstkey,METH_NOARGS, dbm_firstkey__doc__}, - {"nextkey", (PyCFunction)dbm_nextkey, METH_VARARGS, dbm_nextkey__doc__}, - {"reorganize",(PyCFunction)dbm_reorganize,METH_NOARGS, dbm_reorganize__doc__}, - {"sync", (PyCFunction)dbm_sync, METH_NOARGS, dbm_sync__doc__}, - {"get", (PyCFunction)dbm_get, METH_VARARGS, dbm_get__doc__}, - {"setdefault",(PyCFunction)dbm_setdefault,METH_VARARGS, dbm_setdefault__doc__}, + _GDBM_GDBM_CLOSE_METHODDEF + _GDBM_GDBM_KEYS_METHODDEF + _GDBM_GDBM_FIRSTKEY_METHODDEF + _GDBM_GDBM_NEXTKEY_METHODDEF + _GDBM_GDBM_REORGANIZE_METHODDEF + _GDBM_GDBM_SYNC_METHODDEF + _GDBM_GDBM_GET_METHODDEF + _GDBM_GDBM_GET_METHODDEF + _GDBM_GDBM_SETDEFAULT_METHODDEF {"__enter__", dbm__enter__, METH_NOARGS, NULL}, {"__exit__", dbm__exit__, METH_VARARGS, NULL}, {NULL, NULL} /* sentinel */ @@ -486,40 +530,44 @@ static PyTypeObject Dbmtype = { /* ----------------------------------------------------------------- */ -PyDoc_STRVAR(dbmopen__doc__, -"open(filename, [flags, [mode]]) -> dbm_object\n\ -Open a dbm database and return a dbm object. The filename argument is\n\ -the name of the database file.\n\ -\n\ -The optional flags argument can be 'r' (to open an existing database\n\ -for reading only -- default), 'w' (to open an existing database for\n\ -reading and writing), 'c' (which creates the database if it doesn't\n\ -exist), or 'n' (which always creates a new empty database).\n\ -\n\ -Some versions of gdbm support additional flags which must be\n\ -appended to one of the flags described above. The module constant\n\ -'open_flags' is a string of valid additional flags. The 'f' flag\n\ -opens the database in fast mode; altered data will not automatically\n\ -be written to the disk after every change. This results in faster\n\ -writes to the database, but may result in an inconsistent database\n\ -if the program crashes while the database is still open. Use the\n\ -sync() method to force any unwritten data to be written to the disk.\n\ -The 's' flag causes all database operations to be synchronized to\n\ -disk. The 'u' flag disables locking of the database file.\n\ -\n\ -The optional mode argument is the Unix mode of the file, used only\n\ -when the database has to be created. It defaults to octal 0666. "); +/*[clinic input] +_gdbm.open as dbmopen + filename as name: str + flags: str="r" + mode: int(py_default="0o666") = 0o666 + / + +Open a dbm database and return a dbm object. + +The filename argument is the name of the database file. + +The optional flags argument can be 'r' (to open an existing database +for reading only -- default), 'w' (to open an existing database for +reading and writing), 'c' (which creates the database if it doesn't +exist), or 'n' (which always creates a new empty database). + +Some versions of gdbm support additional flags which must be +appended to one of the flags described above. The module constant +'open_flags' is a string of valid additional flags. The 'f' flag +opens the database in fast mode; altered data will not automatically +be written to the disk after every change. This results in faster +writes to the database, but may result in an inconsistent database +if the program crashes while the database is still open. Use the +sync() method to force any unwritten data to be written to the disk. +The 's' flag causes all database operations to be synchronized to +disk. The 'u' flag disables locking of the database file. + +The optional mode argument is the Unix mode of the file, used only +when the database has to be created. It defaults to octal 0o666. +[clinic start generated code]*/ static PyObject * -dbmopen(PyObject *self, PyObject *args) +dbmopen_impl(PyModuleDef *module, const char *name, const char *flags, + int mode) +/*[clinic end generated code: output=365b31415c03ccd4 input=55563cd60e51984a]*/ { - char *name; - char *flags = "r"; int iflags; - int mode = 0666; - if (!PyArg_ParseTuple(args, "s|si:open", &name, &flags, &mode)) - return NULL; switch (flags[0]) { case 'r': iflags = GDBM_READER; @@ -580,7 +628,7 @@ static char dbmmodule_open_flags[] = "rwcn" ; static PyMethodDef dbmmodule_methods[] = { - { "open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, + DBMOPEN_METHODDEF { 0, 0 }, }; diff --git a/Modules/clinic/_dbmmodule.c.h b/Modules/clinic/_dbmmodule.c.h index c5f4c5ac60..4d8837370d 100644 --- a/Modules/clinic/_dbmmodule.c.h +++ b/Modules/clinic/_dbmmodule.c.h @@ -2,32 +2,102 @@ preserve [clinic start generated code]*/ -PyDoc_STRVAR(dbm_dbm_get__doc__, -"get($self, key, default=None, /)\n" +PyDoc_STRVAR(_dbm_dbm_close__doc__, +"close($self, /)\n" +"--\n" +"\n" +"Close the database."); + +#define _DBM_DBM_CLOSE_METHODDEF \ + {"close", (PyCFunction)_dbm_dbm_close, METH_NOARGS, _dbm_dbm_close__doc__}, + +static PyObject * +_dbm_dbm_close_impl(dbmobject *self); + +static PyObject * +_dbm_dbm_close(dbmobject *self, PyObject *Py_UNUSED(ignored)) +{ + return _dbm_dbm_close_impl(self); +} + +PyDoc_STRVAR(_dbm_dbm_keys__doc__, +"keys($self, /)\n" +"--\n" +"\n" +"Return a list of all keys in the database."); + +#define _DBM_DBM_KEYS_METHODDEF \ + {"keys", (PyCFunction)_dbm_dbm_keys, METH_NOARGS, _dbm_dbm_keys__doc__}, + +static PyObject * +_dbm_dbm_keys_impl(dbmobject *self); + +static PyObject * +_dbm_dbm_keys(dbmobject *self, PyObject *Py_UNUSED(ignored)) +{ + return _dbm_dbm_keys_impl(self); +} + +PyDoc_STRVAR(_dbm_dbm_get__doc__, +"get($self, key, default=b\'\', /)\n" "--\n" "\n" "Return the value for key if present, otherwise default."); -#define DBM_DBM_GET_METHODDEF \ - {"get", (PyCFunction)dbm_dbm_get, METH_VARARGS, dbm_dbm_get__doc__}, +#define _DBM_DBM_GET_METHODDEF \ + {"get", (PyCFunction)_dbm_dbm_get, METH_VARARGS, _dbm_dbm_get__doc__}, static PyObject * -dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, - PyObject *default_value); +_dbm_dbm_get_impl(dbmobject *self, const char *key, + Py_ssize_clean_t key_length, PyObject *default_value); static PyObject * -dbm_dbm_get(dbmobject *dp, PyObject *args) +_dbm_dbm_get(dbmobject *self, PyObject *args) { PyObject *return_value = NULL; const char *key; Py_ssize_clean_t key_length; - PyObject *default_value = Py_None; + PyObject *default_value = NULL; if (!PyArg_ParseTuple(args, "s#|O:get", &key, &key_length, &default_value)) goto exit; - return_value = dbm_dbm_get_impl(dp, key, key_length, default_value); + return_value = _dbm_dbm_get_impl(self, key, key_length, default_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_dbm_dbm_setdefault__doc__, +"setdefault($self, key, default=b\'\', /)\n" +"--\n" +"\n" +"Return the value for key if present, otherwise default.\n" +"\n" +"If key is not in the database, it is inserted with default as the value."); + +#define _DBM_DBM_SETDEFAULT_METHODDEF \ + {"setdefault", (PyCFunction)_dbm_dbm_setdefault, METH_VARARGS, _dbm_dbm_setdefault__doc__}, + +static PyObject * +_dbm_dbm_setdefault_impl(dbmobject *self, const char *key, + Py_ssize_clean_t key_length, + PyObject *default_value); + +static PyObject * +_dbm_dbm_setdefault(dbmobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + const char *key; + Py_ssize_clean_t key_length; + PyObject *default_value = NULL; + + if (!PyArg_ParseTuple(args, + "s#|O:setdefault", + &key, &key_length, &default_value)) + goto exit; + return_value = _dbm_dbm_setdefault_impl(self, key, key_length, default_value); exit: return return_value; @@ -71,4 +141,4 @@ dbmopen(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=d6ec55c6c5d0b19d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=951fcfdb6d667a61 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_gdbmmodule.c.h b/Modules/clinic/_gdbmmodule.c.h new file mode 100644 index 0000000000..d9e9acf696 --- /dev/null +++ b/Modules/clinic/_gdbmmodule.c.h @@ -0,0 +1,256 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_gdbm_gdbm_get__doc__, +"get($self, key, default=None, /)\n" +"--\n" +"\n" +"Get the value for key, or default if not present."); + +#define _GDBM_GDBM_GET_METHODDEF \ + {"get", (PyCFunction)_gdbm_gdbm_get, METH_VARARGS, _gdbm_gdbm_get__doc__}, + +static PyObject * +_gdbm_gdbm_get_impl(dbmobject *self, PyObject *key, PyObject *default_value); + +static PyObject * +_gdbm_gdbm_get(dbmobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *key; + PyObject *default_value = Py_None; + + if (!PyArg_UnpackTuple(args, "get", + 1, 2, + &key, &default_value)) + goto exit; + return_value = _gdbm_gdbm_get_impl(self, key, default_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_gdbm_gdbm_setdefault__doc__, +"setdefault($self, key, default=None, /)\n" +"--\n" +"\n" +"Get value for key, or set it to default and return default if not present."); + +#define _GDBM_GDBM_SETDEFAULT_METHODDEF \ + {"setdefault", (PyCFunction)_gdbm_gdbm_setdefault, METH_VARARGS, _gdbm_gdbm_setdefault__doc__}, + +static PyObject * +_gdbm_gdbm_setdefault_impl(dbmobject *self, PyObject *key, + PyObject *default_value); + +static PyObject * +_gdbm_gdbm_setdefault(dbmobject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *key; + PyObject *default_value = Py_None; + + if (!PyArg_UnpackTuple(args, "setdefault", + 1, 2, + &key, &default_value)) + goto exit; + return_value = _gdbm_gdbm_setdefault_impl(self, key, default_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_gdbm_gdbm_close__doc__, +"close($self, /)\n" +"--\n" +"\n" +"Close the database."); + +#define _GDBM_GDBM_CLOSE_METHODDEF \ + {"close", (PyCFunction)_gdbm_gdbm_close, METH_NOARGS, _gdbm_gdbm_close__doc__}, + +static PyObject * +_gdbm_gdbm_close_impl(dbmobject *self); + +static PyObject * +_gdbm_gdbm_close(dbmobject *self, PyObject *Py_UNUSED(ignored)) +{ + return _gdbm_gdbm_close_impl(self); +} + +PyDoc_STRVAR(_gdbm_gdbm_keys__doc__, +"keys($self, /)\n" +"--\n" +"\n" +"Get a list of all keys in the database."); + +#define _GDBM_GDBM_KEYS_METHODDEF \ + {"keys", (PyCFunction)_gdbm_gdbm_keys, METH_NOARGS, _gdbm_gdbm_keys__doc__}, + +static PyObject * +_gdbm_gdbm_keys_impl(dbmobject *self); + +static PyObject * +_gdbm_gdbm_keys(dbmobject *self, PyObject *Py_UNUSED(ignored)) +{ + return _gdbm_gdbm_keys_impl(self); +} + +PyDoc_STRVAR(_gdbm_gdbm_firstkey__doc__, +"firstkey($self, /)\n" +"--\n" +"\n" +"Return the starting key for the traversal.\n" +"\n" +"It\'s possible to loop over every key in the database using this method\n" +"and the nextkey() method. The traversal is ordered by GDBM\'s internal\n" +"hash values, and won\'t be sorted by the key values."); + +#define _GDBM_GDBM_FIRSTKEY_METHODDEF \ + {"firstkey", (PyCFunction)_gdbm_gdbm_firstkey, METH_NOARGS, _gdbm_gdbm_firstkey__doc__}, + +static PyObject * +_gdbm_gdbm_firstkey_impl(dbmobject *self); + +static PyObject * +_gdbm_gdbm_firstkey(dbmobject *self, PyObject *Py_UNUSED(ignored)) +{ + return _gdbm_gdbm_firstkey_impl(self); +} + +PyDoc_STRVAR(_gdbm_gdbm_nextkey__doc__, +"nextkey($self, key, /)\n" +"--\n" +"\n" +"Returns the key that follows key in the traversal.\n" +"\n" +"The following code prints every key in the database db, without having\n" +"to create a list in memory that contains them all:\n" +"\n" +" k = db.firstkey()\n" +" while k != None:\n" +" print(k)\n" +" k = db.nextkey(k)"); + +#define _GDBM_GDBM_NEXTKEY_METHODDEF \ + {"nextkey", (PyCFunction)_gdbm_gdbm_nextkey, METH_O, _gdbm_gdbm_nextkey__doc__}, + +static PyObject * +_gdbm_gdbm_nextkey_impl(dbmobject *self, const char *key, + Py_ssize_clean_t key_length); + +static PyObject * +_gdbm_gdbm_nextkey(dbmobject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *key; + Py_ssize_clean_t key_length; + + if (!PyArg_Parse(arg, + "s#:nextkey", + &key, &key_length)) + goto exit; + return_value = _gdbm_gdbm_nextkey_impl(self, key, key_length); + +exit: + return return_value; +} + +PyDoc_STRVAR(_gdbm_gdbm_reorganize__doc__, +"reorganize($self, /)\n" +"--\n" +"\n" +"Reorganize the database.\n" +"\n" +"If you have carried out a lot of deletions and would like to shrink\n" +"the space used by the GDBM file, this routine will reorganize the\n" +"database. GDBM will not shorten the length of a database file except\n" +"by using this reorganization; otherwise, deleted file space will be\n" +"kept and reused as new (key,value) pairs are added."); + +#define _GDBM_GDBM_REORGANIZE_METHODDEF \ + {"reorganize", (PyCFunction)_gdbm_gdbm_reorganize, METH_NOARGS, _gdbm_gdbm_reorganize__doc__}, + +static PyObject * +_gdbm_gdbm_reorganize_impl(dbmobject *self); + +static PyObject * +_gdbm_gdbm_reorganize(dbmobject *self, PyObject *Py_UNUSED(ignored)) +{ + return _gdbm_gdbm_reorganize_impl(self); +} + +PyDoc_STRVAR(_gdbm_gdbm_sync__doc__, +"sync($self, /)\n" +"--\n" +"\n" +"Flush the database to the disk file.\n" +"\n" +"When the database has been opened in fast mode, this method forces\n" +"any unwritten data to be written to the disk."); + +#define _GDBM_GDBM_SYNC_METHODDEF \ + {"sync", (PyCFunction)_gdbm_gdbm_sync, METH_NOARGS, _gdbm_gdbm_sync__doc__}, + +static PyObject * +_gdbm_gdbm_sync_impl(dbmobject *self); + +static PyObject * +_gdbm_gdbm_sync(dbmobject *self, PyObject *Py_UNUSED(ignored)) +{ + return _gdbm_gdbm_sync_impl(self); +} + +PyDoc_STRVAR(dbmopen__doc__, +"open($module, filename, flags=\'r\', mode=0o666, /)\n" +"--\n" +"\n" +"Open a dbm database and return a dbm object.\n" +"\n" +"The filename argument is the name of the database file.\n" +"\n" +"The optional flags argument can be \'r\' (to open an existing database\n" +"for reading only -- default), \'w\' (to open an existing database for\n" +"reading and writing), \'c\' (which creates the database if it doesn\'t\n" +"exist), or \'n\' (which always creates a new empty database).\n" +"\n" +"Some versions of gdbm support additional flags which must be\n" +"appended to one of the flags described above. The module constant\n" +"\'open_flags\' is a string of valid additional flags. The \'f\' flag\n" +"opens the database in fast mode; altered data will not automatically\n" +"be written to the disk after every change. This results in faster\n" +"writes to the database, but may result in an inconsistent database\n" +"if the program crashes while the database is still open. Use the\n" +"sync() method to force any unwritten data to be written to the disk.\n" +"The \'s\' flag causes all database operations to be synchronized to\n" +"disk. The \'u\' flag disables locking of the database file.\n" +"\n" +"The optional mode argument is the Unix mode of the file, used only\n" +"when the database has to be created. It defaults to octal 0o666."); + +#define DBMOPEN_METHODDEF \ + {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, + +static PyObject * +dbmopen_impl(PyModuleDef *module, const char *name, const char *flags, + int mode); + +static PyObject * +dbmopen(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + const char *name; + const char *flags = "r"; + int mode = 438; + + if (!PyArg_ParseTuple(args, + "s|si:open", + &name, &flags, &mode)) + goto exit; + return_value = dbmopen_impl(module, name, flags, mode); + +exit: + return return_value; +} +/*[clinic end generated code: output=b41c68a5f30699cb input=a9049054013a1b77]*/ -- cgit v1.2.1 From 51a22196c516578dac0f81d71b94bb0b252e26be Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 17 Apr 2015 21:18:49 +0300 Subject: Issue #20181: Converted the unicodedata module to Argument Clinic. --- Modules/clinic/unicodedata.c.h | 372 ++++++++++++++++++++++++++++++++++-- Modules/unicodedata.c | 423 +++++++++++++++++++---------------------- 2 files changed, 556 insertions(+), 239 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/unicodedata.c.h b/Modules/clinic/unicodedata.c.h index 99cc36969e..13e6bf9fce 100644 --- a/Modules/clinic/unicodedata.c.h +++ b/Modules/clinic/unicodedata.c.h @@ -3,37 +3,385 @@ preserve [clinic start generated code]*/ PyDoc_STRVAR(unicodedata_UCD_decimal__doc__, -"decimal($self, unichr, default=None, /)\n" +"decimal($self, chr, default=None, /)\n" "--\n" "\n" "Converts a Unicode character into its equivalent decimal value.\n" "\n" -"Returns the decimal value assigned to the Unicode character unichr\n" -"as integer. If no such value is defined, default is returned, or, if\n" -"not given, ValueError is raised."); +"Returns the decimal value assigned to the character chr as integer.\n" +"If no such value is defined, default is returned, or, if not given,\n" +"ValueError is raised."); #define UNICODEDATA_UCD_DECIMAL_METHODDEF \ {"decimal", (PyCFunction)unicodedata_UCD_decimal, METH_VARARGS, unicodedata_UCD_decimal__doc__}, static PyObject * -unicodedata_UCD_decimal_impl(PreviousDBVersion *self, - PyUnicodeObject *unichr, +unicodedata_UCD_decimal_impl(PyObject *self, int chr, PyObject *default_value); static PyObject * -unicodedata_UCD_decimal(PreviousDBVersion *self, PyObject *args) +unicodedata_UCD_decimal(PyObject *self, PyObject *args) { PyObject *return_value = NULL; - PyUnicodeObject *unichr; + int chr; PyObject *default_value = NULL; if (!PyArg_ParseTuple(args, - "O!|O:decimal", - &PyUnicode_Type, &unichr, &default_value)) + "C|O:decimal", + &chr, &default_value)) goto exit; - return_value = unicodedata_UCD_decimal_impl(self, unichr, default_value); + return_value = unicodedata_UCD_decimal_impl(self, chr, default_value); exit: return return_value; } -/*[clinic end generated code: output=33b488251c4fd143 input=a9049054013a1b77]*/ + +PyDoc_STRVAR(unicodedata_UCD_digit__doc__, +"digit($self, chr, default=None, /)\n" +"--\n" +"\n" +"Converts a Unicode character into its equivalent digit value.\n" +"\n" +"Returns the digit value assigned to the character chr as integer.\n" +"If no such value is defined, default is returned, or, if not given,\n" +"ValueError is raised."); + +#define UNICODEDATA_UCD_DIGIT_METHODDEF \ + {"digit", (PyCFunction)unicodedata_UCD_digit, METH_VARARGS, unicodedata_UCD_digit__doc__}, + +static PyObject * +unicodedata_UCD_digit_impl(PyObject *self, int chr, PyObject *default_value); + +static PyObject * +unicodedata_UCD_digit(PyObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + int chr; + PyObject *default_value = NULL; + + if (!PyArg_ParseTuple(args, + "C|O:digit", + &chr, &default_value)) + goto exit; + return_value = unicodedata_UCD_digit_impl(self, chr, default_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(unicodedata_UCD_numeric__doc__, +"numeric($self, chr, default=None, /)\n" +"--\n" +"\n" +"Converts a Unicode character into its equivalent numeric value.\n" +"\n" +"Returns the numeric value assigned to the character chr as float.\n" +"If no such value is defined, default is returned, or, if not given,\n" +"ValueError is raised."); + +#define UNICODEDATA_UCD_NUMERIC_METHODDEF \ + {"numeric", (PyCFunction)unicodedata_UCD_numeric, METH_VARARGS, unicodedata_UCD_numeric__doc__}, + +static PyObject * +unicodedata_UCD_numeric_impl(PyObject *self, int chr, + PyObject *default_value); + +static PyObject * +unicodedata_UCD_numeric(PyObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + int chr; + PyObject *default_value = NULL; + + if (!PyArg_ParseTuple(args, + "C|O:numeric", + &chr, &default_value)) + goto exit; + return_value = unicodedata_UCD_numeric_impl(self, chr, default_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(unicodedata_UCD_category__doc__, +"category($self, chr, /)\n" +"--\n" +"\n" +"Returns the general category assigned to the character chr as string."); + +#define UNICODEDATA_UCD_CATEGORY_METHODDEF \ + {"category", (PyCFunction)unicodedata_UCD_category, METH_O, unicodedata_UCD_category__doc__}, + +static PyObject * +unicodedata_UCD_category_impl(PyObject *self, int chr); + +static PyObject * +unicodedata_UCD_category(PyObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + int chr; + + if (!PyArg_Parse(arg, + "C:category", + &chr)) + goto exit; + return_value = unicodedata_UCD_category_impl(self, chr); + +exit: + return return_value; +} + +PyDoc_STRVAR(unicodedata_UCD_bidirectional__doc__, +"bidirectional($self, chr, /)\n" +"--\n" +"\n" +"Returns the bidirectional class assigned to the character chr as string.\n" +"\n" +"If no such value is defined, an empty string is returned."); + +#define UNICODEDATA_UCD_BIDIRECTIONAL_METHODDEF \ + {"bidirectional", (PyCFunction)unicodedata_UCD_bidirectional, METH_O, unicodedata_UCD_bidirectional__doc__}, + +static PyObject * +unicodedata_UCD_bidirectional_impl(PyObject *self, int chr); + +static PyObject * +unicodedata_UCD_bidirectional(PyObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + int chr; + + if (!PyArg_Parse(arg, + "C:bidirectional", + &chr)) + goto exit; + return_value = unicodedata_UCD_bidirectional_impl(self, chr); + +exit: + return return_value; +} + +PyDoc_STRVAR(unicodedata_UCD_combining__doc__, +"combining($self, chr, /)\n" +"--\n" +"\n" +"Returns the canonical combining class assigned to the character chr as integer.\n" +"\n" +"Returns 0 if no combining class is defined."); + +#define UNICODEDATA_UCD_COMBINING_METHODDEF \ + {"combining", (PyCFunction)unicodedata_UCD_combining, METH_O, unicodedata_UCD_combining__doc__}, + +static int +unicodedata_UCD_combining_impl(PyObject *self, int chr); + +static PyObject * +unicodedata_UCD_combining(PyObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + int chr; + int _return_value; + + if (!PyArg_Parse(arg, + "C:combining", + &chr)) + goto exit; + _return_value = unicodedata_UCD_combining_impl(self, chr); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(unicodedata_UCD_mirrored__doc__, +"mirrored($self, chr, /)\n" +"--\n" +"\n" +"Returns the mirrored property assigned to the character chr as integer.\n" +"\n" +"Returns 1 if the character has been identified as a \"mirrored\"\n" +"character in bidirectional text, 0 otherwise."); + +#define UNICODEDATA_UCD_MIRRORED_METHODDEF \ + {"mirrored", (PyCFunction)unicodedata_UCD_mirrored, METH_O, unicodedata_UCD_mirrored__doc__}, + +static int +unicodedata_UCD_mirrored_impl(PyObject *self, int chr); + +static PyObject * +unicodedata_UCD_mirrored(PyObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + int chr; + int _return_value; + + if (!PyArg_Parse(arg, + "C:mirrored", + &chr)) + goto exit; + _return_value = unicodedata_UCD_mirrored_impl(self, chr); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(unicodedata_UCD_east_asian_width__doc__, +"east_asian_width($self, chr, /)\n" +"--\n" +"\n" +"Returns the east asian width assigned to the character chr as string."); + +#define UNICODEDATA_UCD_EAST_ASIAN_WIDTH_METHODDEF \ + {"east_asian_width", (PyCFunction)unicodedata_UCD_east_asian_width, METH_O, unicodedata_UCD_east_asian_width__doc__}, + +static PyObject * +unicodedata_UCD_east_asian_width_impl(PyObject *self, int chr); + +static PyObject * +unicodedata_UCD_east_asian_width(PyObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + int chr; + + if (!PyArg_Parse(arg, + "C:east_asian_width", + &chr)) + goto exit; + return_value = unicodedata_UCD_east_asian_width_impl(self, chr); + +exit: + return return_value; +} + +PyDoc_STRVAR(unicodedata_UCD_decomposition__doc__, +"decomposition($self, chr, /)\n" +"--\n" +"\n" +"Returns the character decomposition mapping assigned to the character chr as string.\n" +"\n" +"An empty string is returned in case no such mapping is defined."); + +#define UNICODEDATA_UCD_DECOMPOSITION_METHODDEF \ + {"decomposition", (PyCFunction)unicodedata_UCD_decomposition, METH_O, unicodedata_UCD_decomposition__doc__}, + +static PyObject * +unicodedata_UCD_decomposition_impl(PyObject *self, int chr); + +static PyObject * +unicodedata_UCD_decomposition(PyObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + int chr; + + if (!PyArg_Parse(arg, + "C:decomposition", + &chr)) + goto exit; + return_value = unicodedata_UCD_decomposition_impl(self, chr); + +exit: + return return_value; +} + +PyDoc_STRVAR(unicodedata_UCD_normalize__doc__, +"normalize($self, form, unistr, /)\n" +"--\n" +"\n" +"Return the normal form \'form\' for the Unicode string unistr.\n" +"\n" +"Valid values for form are \'NFC\', \'NFKC\', \'NFD\', and \'NFKD\'."); + +#define UNICODEDATA_UCD_NORMALIZE_METHODDEF \ + {"normalize", (PyCFunction)unicodedata_UCD_normalize, METH_VARARGS, unicodedata_UCD_normalize__doc__}, + +static PyObject * +unicodedata_UCD_normalize_impl(PyObject *self, const char *form, + PyObject *input); + +static PyObject * +unicodedata_UCD_normalize(PyObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + const char *form; + PyObject *input; + + if (!PyArg_ParseTuple(args, + "sO!:normalize", + &form, &PyUnicode_Type, &input)) + goto exit; + return_value = unicodedata_UCD_normalize_impl(self, form, input); + +exit: + return return_value; +} + +PyDoc_STRVAR(unicodedata_UCD_name__doc__, +"name($self, chr, default=None, /)\n" +"--\n" +"\n" +"Returns the name assigned to the character chr as a string.\n" +"\n" +"If no name is defined, default is returned, or, if not given,\n" +"ValueError is raised."); + +#define UNICODEDATA_UCD_NAME_METHODDEF \ + {"name", (PyCFunction)unicodedata_UCD_name, METH_VARARGS, unicodedata_UCD_name__doc__}, + +static PyObject * +unicodedata_UCD_name_impl(PyObject *self, int chr, PyObject *default_value); + +static PyObject * +unicodedata_UCD_name(PyObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + int chr; + PyObject *default_value = NULL; + + if (!PyArg_ParseTuple(args, + "C|O:name", + &chr, &default_value)) + goto exit; + return_value = unicodedata_UCD_name_impl(self, chr, default_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(unicodedata_UCD_lookup__doc__, +"lookup($self, name, /)\n" +"--\n" +"\n" +"Look up character by name.\n" +"\n" +"If a character with the given name is found, return the\n" +"corresponding character. If not found, KeyError is raised."); + +#define UNICODEDATA_UCD_LOOKUP_METHODDEF \ + {"lookup", (PyCFunction)unicodedata_UCD_lookup, METH_O, unicodedata_UCD_lookup__doc__}, + +static PyObject * +unicodedata_UCD_lookup_impl(PyObject *self, const char *name, + Py_ssize_clean_t name_length); + +static PyObject * +unicodedata_UCD_lookup(PyObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *name; + Py_ssize_clean_t name_length; + + if (!PyArg_Parse(arg, + "s#:lookup", + &name, &name_length)) + goto exit; + return_value = unicodedata_UCD_lookup_impl(self, name, name_length); + +exit: + return return_value; +} +/*[clinic end generated code: output=1f04e31ae703ffed input=a9049054013a1b77]*/ diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index d6f3829426..47ada37818 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -101,50 +101,31 @@ new_previous_version(const char*name, const change_record* (*getrecord)(Py_UCS4) } -static Py_UCS4 getuchar(PyUnicodeObject *obj) -{ - if (PyUnicode_READY(obj)) - return (Py_UCS4)-1; - if (PyUnicode_GET_LENGTH(obj) == 1) { - if (PyUnicode_READY(obj)) - return (Py_UCS4)-1; - return PyUnicode_READ_CHAR(obj, 0); - } - PyErr_SetString(PyExc_TypeError, - "need a single Unicode character as parameter"); - return (Py_UCS4)-1; -} - /* --- Module API --------------------------------------------------------- */ /*[clinic input] - unicodedata.UCD.decimal - unichr: object(type='PyUnicodeObject *', subclass_of='&PyUnicode_Type') + self: self + chr: int(types={'str'}) default: object=NULL / Converts a Unicode character into its equivalent decimal value. -Returns the decimal value assigned to the Unicode character unichr -as integer. If no such value is defined, default is returned, or, if -not given, ValueError is raised. +Returns the decimal value assigned to the character chr as integer. +If no such value is defined, default is returned, or, if not given, +ValueError is raised. [clinic start generated code]*/ static PyObject * -unicodedata_UCD_decimal_impl(PreviousDBVersion *self, - PyUnicodeObject *unichr, +unicodedata_UCD_decimal_impl(PyObject *self, int chr, PyObject *default_value) -/*[clinic end generated code: output=bf853108f246ba19 input=c25c9d2b4de076b1]*/ +/*[clinic end generated code: output=be23376e1a185231 input=3acf7f2238874a49]*/ { int have_old = 0; long rc; - Py_UCS4 c; - - c = getuchar(unichr); - if (c == (Py_UCS4)-1) - return NULL; + Py_UCS4 c = (Py_UCS4)chr; if (self && UCD_Check(self)) { const change_record *old = get_old_record(self, c); @@ -175,61 +156,64 @@ unicodedata_UCD_decimal_impl(PreviousDBVersion *self, return PyLong_FromLong(rc); } -PyDoc_STRVAR(unicodedata_digit__doc__, -"digit(unichr[, default])\n\ -\n\ -Returns the digit value assigned to the Unicode character unichr as\n\ -integer. If no such value is defined, default is returned, or, if\n\ -not given, ValueError is raised."); +/*[clinic input] +unicodedata.UCD.digit + + self: self + chr: int(types={'str'}) + default: object=NULL + / + +Converts a Unicode character into its equivalent digit value. + +Returns the digit value assigned to the character chr as integer. +If no such value is defined, default is returned, or, if not given, +ValueError is raised. +[clinic start generated code]*/ static PyObject * -unicodedata_digit(PyObject *self, PyObject *args) +unicodedata_UCD_digit_impl(PyObject *self, int chr, PyObject *default_value) +/*[clinic end generated code: output=96e18c950171fd2f input=733f093b399f5ab6]*/ { - PyUnicodeObject *v; - PyObject *defobj = NULL; long rc; - Py_UCS4 c; - - if (!PyArg_ParseTuple(args, "O!|O:digit", &PyUnicode_Type, &v, &defobj)) - return NULL; - c = getuchar(v); - if (c == (Py_UCS4)-1) - return NULL; + Py_UCS4 c = (Py_UCS4)chr; rc = Py_UNICODE_TODIGIT(c); if (rc < 0) { - if (defobj == NULL) { + if (default_value == NULL) { PyErr_SetString(PyExc_ValueError, "not a digit"); return NULL; } else { - Py_INCREF(defobj); - return defobj; + Py_INCREF(default_value); + return default_value; } } return PyLong_FromLong(rc); } -PyDoc_STRVAR(unicodedata_numeric__doc__, -"numeric(unichr[, default])\n\ -\n\ -Returns the numeric value assigned to the Unicode character unichr\n\ -as float. If no such value is defined, default is returned, or, if\n\ -not given, ValueError is raised."); +/*[clinic input] +unicodedata.UCD.numeric + + self: self + chr: int(types={'str'}) + default: object=NULL + / + +Converts a Unicode character into its equivalent numeric value. + +Returns the numeric value assigned to the character chr as float. +If no such value is defined, default is returned, or, if not given, +ValueError is raised. +[clinic start generated code]*/ static PyObject * -unicodedata_numeric(PyObject *self, PyObject *args) +unicodedata_UCD_numeric_impl(PyObject *self, int chr, + PyObject *default_value) +/*[clinic end generated code: output=53ce281fe85b10c4 input=c5875fa7cc768fb2]*/ { - PyUnicodeObject *v; - PyObject *defobj = NULL; int have_old = 0; double rc; - Py_UCS4 c; - - if (!PyArg_ParseTuple(args, "O!|O:numeric", &PyUnicode_Type, &v, &defobj)) - return NULL; - c = getuchar(v); - if (c == (Py_UCS4)-1) - return NULL; + Py_UCS4 c = (Py_UCS4)chr; if (self && UCD_Check(self)) { const change_record *old = get_old_record(self, c); @@ -247,37 +231,34 @@ unicodedata_numeric(PyObject *self, PyObject *args) if (!have_old) rc = Py_UNICODE_TONUMERIC(c); if (rc == -1.0) { - if (defobj == NULL) { + if (default_value == NULL) { PyErr_SetString(PyExc_ValueError, "not a numeric character"); return NULL; } else { - Py_INCREF(defobj); - return defobj; + Py_INCREF(default_value); + return default_value; } } return PyFloat_FromDouble(rc); } -PyDoc_STRVAR(unicodedata_category__doc__, -"category(unichr)\n\ -\n\ -Returns the general category assigned to the Unicode character\n\ -unichr as string."); +/*[clinic input] +unicodedata.UCD.category + + self: self + chr: int(types={'str'}) + / + +Returns the general category assigned to the character chr as string. +[clinic start generated code]*/ static PyObject * -unicodedata_category(PyObject *self, PyObject *args) +unicodedata_UCD_category_impl(PyObject *self, int chr) +/*[clinic end generated code: output=8571539ee2e6783a input=f5edd6fd04bd455d]*/ { - PyUnicodeObject *v; int index; - Py_UCS4 c; - - if (!PyArg_ParseTuple(args, "O!:category", - &PyUnicode_Type, &v)) - return NULL; - c = getuchar(v); - if (c == (Py_UCS4)-1) - return NULL; + Py_UCS4 c = (Py_UCS4)chr; index = (int) _getrecord_ex(c)->category; if (self && UCD_Check(self)) { const change_record *old = get_old_record(self, c); @@ -287,26 +268,24 @@ unicodedata_category(PyObject *self, PyObject *args) return PyUnicode_FromString(_PyUnicode_CategoryNames[index]); } -PyDoc_STRVAR(unicodedata_bidirectional__doc__, -"bidirectional(unichr)\n\ -\n\ -Returns the bidirectional class assigned to the Unicode character\n\ -unichr as string. If no such value is defined, an empty string is\n\ -returned."); +/*[clinic input] +unicodedata.UCD.bidirectional + + self: self + chr: int(types={'str'}) + / + +Returns the bidirectional class assigned to the character chr as string. + +If no such value is defined, an empty string is returned. +[clinic start generated code]*/ static PyObject * -unicodedata_bidirectional(PyObject *self, PyObject *args) +unicodedata_UCD_bidirectional_impl(PyObject *self, int chr) +/*[clinic end generated code: output=d36310ce2039bb92 input=5ce2f877b35305b5]*/ { - PyUnicodeObject *v; int index; - Py_UCS4 c; - - if (!PyArg_ParseTuple(args, "O!:bidirectional", - &PyUnicode_Type, &v)) - return NULL; - c = getuchar(v); - if (c == (Py_UCS4)-1) - return NULL; + Py_UCS4 c = (Py_UCS4)chr; index = (int) _getrecord_ex(c)->bidirectional; if (self && UCD_Check(self)) { const change_record *old = get_old_record(self, c); @@ -318,55 +297,52 @@ unicodedata_bidirectional(PyObject *self, PyObject *args) return PyUnicode_FromString(_PyUnicode_BidirectionalNames[index]); } -PyDoc_STRVAR(unicodedata_combining__doc__, -"combining(unichr)\n\ -\n\ -Returns the canonical combining class assigned to the Unicode\n\ -character unichr as integer. Returns 0 if no combining class is\n\ -defined."); +/*[clinic input] +unicodedata.UCD.combining -> int -static PyObject * -unicodedata_combining(PyObject *self, PyObject *args) + self: self + chr: int(types={'str'}) + / + +Returns the canonical combining class assigned to the character chr as integer. + +Returns 0 if no combining class is defined. +[clinic start generated code]*/ + +static int +unicodedata_UCD_combining_impl(PyObject *self, int chr) +/*[clinic end generated code: output=cad056d0cb6a5920 input=9125ea7d50b319e7]*/ { - PyUnicodeObject *v; int index; - Py_UCS4 c; - - if (!PyArg_ParseTuple(args, "O!:combining", - &PyUnicode_Type, &v)) - return NULL; - c = getuchar(v); - if (c == (Py_UCS4)-1) - return NULL; + Py_UCS4 c = (Py_UCS4)chr; index = (int) _getrecord_ex(c)->combining; if (self && UCD_Check(self)) { const change_record *old = get_old_record(self, c); if (old->category_changed == 0) index = 0; /* unassigned */ } - return PyLong_FromLong(index); + return index; } -PyDoc_STRVAR(unicodedata_mirrored__doc__, -"mirrored(unichr)\n\ -\n\ -Returns the mirrored property assigned to the Unicode character\n\ -unichr as integer. Returns 1 if the character has been identified as\n\ -a \"mirrored\" character in bidirectional text, 0 otherwise."); +/*[clinic input] +unicodedata.UCD.mirrored -> int -static PyObject * -unicodedata_mirrored(PyObject *self, PyObject *args) + self: self + chr: int(types={'str'}) + / + +Returns the mirrored property assigned to the character chr as integer. + +Returns 1 if the character has been identified as a "mirrored" +character in bidirectional text, 0 otherwise. +[clinic start generated code]*/ + +static int +unicodedata_UCD_mirrored_impl(PyObject *self, int chr) +/*[clinic end generated code: output=2532dbf8121b50e6 input=4e51e8aaf8d7e23e]*/ { - PyUnicodeObject *v; int index; - Py_UCS4 c; - - if (!PyArg_ParseTuple(args, "O!:mirrored", - &PyUnicode_Type, &v)) - return NULL; - c = getuchar(v); - if (c == (Py_UCS4)-1) - return NULL; + Py_UCS4 c = (Py_UCS4)chr; index = (int) _getrecord_ex(c)->mirrored; if (self && UCD_Check(self)) { const change_record *old = get_old_record(self, c); @@ -375,28 +351,25 @@ unicodedata_mirrored(PyObject *self, PyObject *args) else if (old->mirrored_changed != 0xFF) index = old->mirrored_changed; } - return PyLong_FromLong(index); + return index; } -PyDoc_STRVAR(unicodedata_east_asian_width__doc__, -"east_asian_width(unichr)\n\ -\n\ -Returns the east asian width assigned to the Unicode character\n\ -unichr as string."); +/*[clinic input] +unicodedata.UCD.east_asian_width + + self: self + chr: int(types={'str'}) + / + +Returns the east asian width assigned to the character chr as string. +[clinic start generated code]*/ static PyObject * -unicodedata_east_asian_width(PyObject *self, PyObject *args) +unicodedata_UCD_east_asian_width_impl(PyObject *self, int chr) +/*[clinic end generated code: output=484e8537d9ee8197 input=f93c61f37276c8f0]*/ { - PyUnicodeObject *v; int index; - Py_UCS4 c; - - if (!PyArg_ParseTuple(args, "O!:east_asian_width", - &PyUnicode_Type, &v)) - return NULL; - c = getuchar(v); - if (c == (Py_UCS4)-1) - return NULL; + Py_UCS4 c = (Py_UCS4)chr; index = (int) _getrecord_ex(c)->east_asian_width; if (self && UCD_Check(self)) { const change_record *old = get_old_record(self, c); @@ -406,29 +379,27 @@ unicodedata_east_asian_width(PyObject *self, PyObject *args) return PyUnicode_FromString(_PyUnicode_EastAsianWidthNames[index]); } -PyDoc_STRVAR(unicodedata_decomposition__doc__, -"decomposition(unichr)\n\ -\n\ -Returns the character decomposition mapping assigned to the Unicode\n\ -character unichr as string. An empty string is returned in case no\n\ -such mapping is defined."); +/*[clinic input] +unicodedata.UCD.decomposition + + self: self + chr: int(types={'str'}) + / + +Returns the character decomposition mapping assigned to the character chr as string. + +An empty string is returned in case no such mapping is defined. +[clinic start generated code]*/ static PyObject * -unicodedata_decomposition(PyObject *self, PyObject *args) +unicodedata_UCD_decomposition_impl(PyObject *self, int chr) +/*[clinic end generated code: output=7d699f3ec7565d27 input=7f2c0ee66d75468f]*/ { - PyUnicodeObject *v; char decomp[256]; int code, index, count; size_t i; unsigned int prefix_index; - Py_UCS4 c; - - if (!PyArg_ParseTuple(args, "O!:decomposition", - &PyUnicode_Type, &v)) - return NULL; - c = getuchar(v); - if (c == (Py_UCS4)-1) - return NULL; + Py_UCS4 c = (Py_UCS4)chr; code = (int)c; @@ -829,22 +800,24 @@ is_normalized(PyObject *self, PyObject *input, int nfc, int k) return 1; /* certainly normalized */ } -PyDoc_STRVAR(unicodedata_normalize__doc__, -"normalize(form, unistr)\n\ -\n\ -Return the normal form 'form' for the Unicode string unistr. Valid\n\ -values for form are 'NFC', 'NFKC', 'NFD', and 'NFKD'."); +/*[clinic input] +unicodedata.UCD.normalize -static PyObject* -unicodedata_normalize(PyObject *self, PyObject *args) -{ - char *form; - PyObject *input; + self: self + form: str + unistr as input: object(subclass_of='&PyUnicode_Type') + / - if(!PyArg_ParseTuple(args, "sO!:normalize", - &form, &PyUnicode_Type, &input)) - return NULL; +Return the normal form 'form' for the Unicode string unistr. + +Valid values for form are 'NFC', 'NFKC', 'NFD', and 'NFKD'. +[clinic start generated code]*/ +static PyObject * +unicodedata_UCD_normalize_impl(PyObject *self, const char *form, + PyObject *input) +/*[clinic end generated code: output=62d1f8870027efdc input=cd092e631cf11883]*/ +{ if (PyUnicode_READY(input) == -1) return NULL; @@ -1203,64 +1176,67 @@ static const _PyUnicode_Name_CAPI hashAPI = /* -------------------------------------------------------------------- */ /* Python bindings */ -PyDoc_STRVAR(unicodedata_name__doc__, -"name(unichr[, default])\n\ -Returns the name assigned to the Unicode character unichr as a\n\ -string. If no name is defined, default is returned, or, if not\n\ -given, ValueError is raised."); +/*[clinic input] +unicodedata.UCD.name + + self: self + chr: int(types={'str'}) + default: object=NULL + / + +Returns the name assigned to the character chr as a string. + +If no name is defined, default is returned, or, if not given, +ValueError is raised. +[clinic start generated code]*/ static PyObject * -unicodedata_name(PyObject* self, PyObject* args) +unicodedata_UCD_name_impl(PyObject *self, int chr, PyObject *default_value) +/*[clinic end generated code: output=6bbb37a326407707 input=51ee2f971c918113]*/ { char name[NAME_MAXLEN]; - Py_UCS4 c; - - PyUnicodeObject* v; - PyObject* defobj = NULL; - if (!PyArg_ParseTuple(args, "O!|O:name", &PyUnicode_Type, &v, &defobj)) - return NULL; - - c = getuchar(v); - if (c == (Py_UCS4)-1) - return NULL; + Py_UCS4 c = (Py_UCS4)chr; if (!_getucname(self, c, name, sizeof(name), 0)) { - if (defobj == NULL) { + if (default_value == NULL) { PyErr_SetString(PyExc_ValueError, "no such name"); return NULL; } else { - Py_INCREF(defobj); - return defobj; + Py_INCREF(default_value); + return default_value; } } return PyUnicode_FromString(name); } -PyDoc_STRVAR(unicodedata_lookup__doc__, -"lookup(name)\n\ -\n\ -Look up character by name. If a character with the\n\ -given name is found, return the corresponding Unicode\n\ -character. If not found, KeyError is raised."); +/*[clinic input] +unicodedata.UCD.lookup + + self: self + name: str(types={'str', 'robuffer'}, length=True) + / + +Look up character by name. + +If a character with the given name is found, return the +corresponding character. If not found, KeyError is raised. +[clinic start generated code]*/ static PyObject * -unicodedata_lookup(PyObject* self, PyObject* args) +unicodedata_UCD_lookup_impl(PyObject *self, const char *name, + Py_ssize_clean_t name_length) +/*[clinic end generated code: output=765cb8186788e6be input=f2bf29706135a590]*/ { Py_UCS4 code; - - char* name; - Py_ssize_t namelen; unsigned int index; - if (!PyArg_ParseTuple(args, "s#:lookup", &name, &namelen)) - return NULL; - if (namelen > INT_MAX) { + if (name_length > INT_MAX) { PyErr_SetString(PyExc_KeyError, "name too long"); return NULL; } - if (!_getcode(self, name, (int)namelen, &code, 1)) { + if (!_getcode(self, name, (int)name_length, &code, 1)) { PyErr_Format(PyExc_KeyError, "undefined character name '%s'", name); return NULL; } @@ -1279,24 +1255,17 @@ unicodedata_lookup(PyObject* self, PyObject* args) static PyMethodDef unicodedata_functions[] = { UNICODEDATA_UCD_DECIMAL_METHODDEF - {"digit", unicodedata_digit, METH_VARARGS, unicodedata_digit__doc__}, - {"numeric", unicodedata_numeric, METH_VARARGS, unicodedata_numeric__doc__}, - {"category", unicodedata_category, METH_VARARGS, - unicodedata_category__doc__}, - {"bidirectional", unicodedata_bidirectional, METH_VARARGS, - unicodedata_bidirectional__doc__}, - {"combining", unicodedata_combining, METH_VARARGS, - unicodedata_combining__doc__}, - {"mirrored", unicodedata_mirrored, METH_VARARGS, - unicodedata_mirrored__doc__}, - {"east_asian_width", unicodedata_east_asian_width, METH_VARARGS, - unicodedata_east_asian_width__doc__}, - {"decomposition", unicodedata_decomposition, METH_VARARGS, - unicodedata_decomposition__doc__}, - {"name", unicodedata_name, METH_VARARGS, unicodedata_name__doc__}, - {"lookup", unicodedata_lookup, METH_VARARGS, unicodedata_lookup__doc__}, - {"normalize", unicodedata_normalize, METH_VARARGS, - unicodedata_normalize__doc__}, + UNICODEDATA_UCD_DIGIT_METHODDEF + UNICODEDATA_UCD_NUMERIC_METHODDEF + UNICODEDATA_UCD_CATEGORY_METHODDEF + UNICODEDATA_UCD_BIDIRECTIONAL_METHODDEF + UNICODEDATA_UCD_COMBINING_METHODDEF + UNICODEDATA_UCD_MIRRORED_METHODDEF + UNICODEDATA_UCD_EAST_ASIAN_WIDTH_METHODDEF + UNICODEDATA_UCD_DECOMPOSITION_METHODDEF + UNICODEDATA_UCD_NAME_METHODDEF + UNICODEDATA_UCD_LOOKUP_METHODDEF + UNICODEDATA_UCD_NORMALIZE_METHODDEF {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From 51e54fb71e267ac7935b58f8d15cc20b319e8f3f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 19 Apr 2015 20:38:19 +0300 Subject: Use PyArg_ParseTuple (new API) instead of PyArg_Parse (old API) for parsing tuples. --- Modules/_io/textio.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index b5990f3060..f61b2818f3 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -538,7 +538,7 @@ _io_IncrementalNewlineDecoder_getstate_impl(nldecoder_object *self) _PyIO_str_getstate, NULL); if (state == NULL) return NULL; - if (!PyArg_Parse(state, "(OK)", &buffer, &flag)) { + if (!PyArg_ParseTuple(state, "OK", &buffer, &flag)) { Py_DECREF(state); return NULL; } @@ -569,7 +569,7 @@ _io_IncrementalNewlineDecoder_setstate(nldecoder_object *self, PyObject *buffer; unsigned PY_LONG_LONG flag; - if (!PyArg_Parse(state, "(OK)", &buffer, &flag)) + if (!PyArg_ParseTuple(state, "OK", &buffer, &flag)) return NULL; self->pendingcr = (int) (flag & 1); @@ -1449,7 +1449,7 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint) /* Given this, we know there was a valid snapshot point * len(dec_buffer) bytes ago with decoder state (b'', dec_flags). */ - if (PyArg_Parse(state, "(OO)", &dec_buffer, &dec_flags) < 0) { + if (PyArg_ParseTuple(state, "OO", &dec_buffer, &dec_flags) < 0) { Py_DECREF(state); return -1; } @@ -2305,7 +2305,7 @@ _io_TextIOWrapper_tell_impl(textio *self) goto fail; /* Skip backward to the snapshot point (see _read_chunk). */ - if (!PyArg_Parse(self->snapshot, "(iO)", &cookie.dec_flags, &next_input)) + if (!PyArg_ParseTuple(self->snapshot, "iO", &cookie.dec_flags, &next_input)) goto fail; assert (PyBytes_Check(next_input)); @@ -2331,7 +2331,7 @@ _io_TextIOWrapper_tell_impl(textio *self) _PyIO_str_getstate, NULL); \ if (_state == NULL) \ goto fail; \ - if (!PyArg_Parse(_state, "(y#i)", &dec_buffer, &dec_buffer_len, &dec_flags)) { \ + if (!PyArg_ParseTuple(_state, "y#i", &dec_buffer, &dec_buffer_len, &dec_flags)) { \ Py_DECREF(_state); \ goto fail; \ } \ -- cgit v1.2.1 From 8ffde52f054eb4b702904568f84660d1c2db3167 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 21 Apr 2015 10:57:41 +0200 Subject: Get rid of unused-but-set-variable warning. len and len2 should be equal and len2 is technically more correct, too. --- Modules/posixmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 90d820fa81..ce34b3b0b8 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -9891,7 +9891,7 @@ os_confstr_impl(PyModuleDef *module, int name) return PyErr_NoMemory(); len2 = confstr(name, buf, len); assert(len == len2); - result = PyUnicode_DecodeFSDefaultAndSize(buf, len-1); + result = PyUnicode_DecodeFSDefaultAndSize(buf, len2-1); PyMem_Free(buf); } else -- cgit v1.2.1 From fb2b5bbc6a941ec46c28262cce7d55f4bea2658e Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 24 Apr 2015 00:40:51 +0300 Subject: Issue #24007: Argument Clinic now writes the format of PyArg_Parse*() at the same line as function name. --- Modules/_io/clinic/_iomodule.c.h | 5 +- Modules/_io/clinic/bufferedio.c.h | 50 +--- Modules/_io/clinic/bytesio.c.h | 12 +- Modules/_io/clinic/fileio.c.h | 19 +- Modules/_io/clinic/iobase.c.h | 11 +- Modules/_io/clinic/stringio.c.h | 8 +- Modules/_io/clinic/textio.c.h | 24 +- Modules/cjkcodecs/clinic/multibytecodec.c.h | 14 +- Modules/clinic/_bz2module.c.h | 12 +- Modules/clinic/_codecsmodule.c.h | 6 +- Modules/clinic/_cryptmodule.c.h | 5 +- Modules/clinic/_datetimemodule.c.h | 5 +- Modules/clinic/_dbmmodule.c.h | 11 +- Modules/clinic/_gdbmmodule.c.h | 9 +- Modules/clinic/_lzmamodule.c.h | 23 +- Modules/clinic/_opcode.c.h | 5 +- Modules/clinic/_pickle.c.h | 20 +- Modules/clinic/arraymodule.c.h | 26 +- Modules/clinic/audioop.c.h | 80 ++---- Modules/clinic/binascii.c.h | 62 ++--- Modules/clinic/cmathmodule.c.h | 88 ++---- Modules/clinic/fcntlmodule.c.h | 14 +- Modules/clinic/grpmodule.c.h | 8 +- Modules/clinic/md5module.c.h | 5 +- Modules/clinic/posixmodule.c.h | 406 +++++++++------------------- Modules/clinic/pwdmodule.c.h | 6 +- Modules/clinic/pyexpat.c.h | 26 +- Modules/clinic/sha1module.c.h | 5 +- Modules/clinic/sha256module.c.h | 8 +- Modules/clinic/sha512module.c.h | 8 +- Modules/clinic/spwdmodule.c.h | 6 +- Modules/clinic/unicodedata.c.h | 45 +-- Modules/clinic/zlibmodule.c.h | 33 +-- 33 files changed, 335 insertions(+), 730 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/clinic/_iomodule.c.h b/Modules/_io/clinic/_iomodule.c.h index df877a5b28..a3abb93cc7 100644 --- a/Modules/_io/clinic/_iomodule.c.h +++ b/Modules/_io/clinic/_iomodule.c.h @@ -148,8 +148,7 @@ _io_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) int closefd = 1; PyObject *opener = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|sizzziO:open", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|sizzziO:open", _keywords, &file, &mode, &buffering, &encoding, &errors, &newline, &closefd, &opener)) goto exit; return_value = _io_open_impl(module, file, mode, buffering, encoding, errors, newline, closefd, opener); @@ -157,4 +156,4 @@ _io_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=c51a5a443c11f02b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=97cdc09bf68a8064 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/bufferedio.c.h b/Modules/_io/clinic/bufferedio.c.h index b79b8d56c4..437e275730 100644 --- a/Modules/_io/clinic/bufferedio.c.h +++ b/Modules/_io/clinic/bufferedio.c.h @@ -19,9 +19,7 @@ _io__BufferedIOBase_readinto(PyObject *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, - "w*:readinto", - &buffer)) + if (!PyArg_Parse(arg, "w*:readinto", &buffer)) goto exit; return_value = _io__BufferedIOBase_readinto_impl(self, &buffer); @@ -50,9 +48,7 @@ _io__BufferedIOBase_readinto1(PyObject *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, - "w*:readinto1", - &buffer)) + if (!PyArg_Parse(arg, "w*:readinto1", &buffer)) goto exit; return_value = _io__BufferedIOBase_readinto1_impl(self, &buffer); @@ -102,8 +98,7 @@ _io__Buffered_peek(buffered *self, PyObject *args) PyObject *return_value = NULL; Py_ssize_t size = 0; - if (!PyArg_ParseTuple(args, - "|n:peek", + if (!PyArg_ParseTuple(args, "|n:peek", &size)) goto exit; return_value = _io__Buffered_peek_impl(self, size); @@ -129,8 +124,7 @@ _io__Buffered_read(buffered *self, PyObject *args) PyObject *return_value = NULL; Py_ssize_t n = -1; - if (!PyArg_ParseTuple(args, - "|O&:read", + if (!PyArg_ParseTuple(args, "|O&:read", _PyIO_ConvertSsize_t, &n)) goto exit; return_value = _io__Buffered_read_impl(self, n); @@ -156,9 +150,7 @@ _io__Buffered_read1(buffered *self, PyObject *arg) PyObject *return_value = NULL; Py_ssize_t n; - if (!PyArg_Parse(arg, - "n:read1", - &n)) + if (!PyArg_Parse(arg, "n:read1", &n)) goto exit; return_value = _io__Buffered_read1_impl(self, n); @@ -183,9 +175,7 @@ _io__Buffered_readinto(buffered *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, - "w*:readinto", - &buffer)) + if (!PyArg_Parse(arg, "w*:readinto", &buffer)) goto exit; return_value = _io__Buffered_readinto_impl(self, &buffer); @@ -214,9 +204,7 @@ _io__Buffered_readinto1(buffered *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, - "w*:readinto1", - &buffer)) + if (!PyArg_Parse(arg, "w*:readinto1", &buffer)) goto exit; return_value = _io__Buffered_readinto1_impl(self, &buffer); @@ -245,8 +233,7 @@ _io__Buffered_readline(buffered *self, PyObject *args) PyObject *return_value = NULL; Py_ssize_t size = -1; - if (!PyArg_ParseTuple(args, - "|O&:readline", + if (!PyArg_ParseTuple(args, "|O&:readline", _PyIO_ConvertSsize_t, &size)) goto exit; return_value = _io__Buffered_readline_impl(self, size); @@ -273,8 +260,7 @@ _io__Buffered_seek(buffered *self, PyObject *args) PyObject *targetobj; int whence = 0; - if (!PyArg_ParseTuple(args, - "O|i:seek", + if (!PyArg_ParseTuple(args, "O|i:seek", &targetobj, &whence)) goto exit; return_value = _io__Buffered_seek_impl(self, targetobj, whence); @@ -328,8 +314,7 @@ _io_BufferedReader___init__(PyObject *self, PyObject *args, PyObject *kwargs) PyObject *raw; Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|n:BufferedReader", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|n:BufferedReader", _keywords, &raw, &buffer_size)) goto exit; return_value = _io_BufferedReader___init___impl((buffered *)self, raw, buffer_size); @@ -360,8 +345,7 @@ _io_BufferedWriter___init__(PyObject *self, PyObject *args, PyObject *kwargs) PyObject *raw; Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|n:BufferedWriter", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|n:BufferedWriter", _keywords, &raw, &buffer_size)) goto exit; return_value = _io_BufferedWriter___init___impl((buffered *)self, raw, buffer_size); @@ -387,9 +371,7 @@ _io_BufferedWriter_write(buffered *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:write", - &buffer)) + if (!PyArg_Parse(arg, "y*:write", &buffer)) goto exit; return_value = _io_BufferedWriter_write_impl(self, &buffer); @@ -430,8 +412,7 @@ _io_BufferedRWPair___init__(PyObject *self, PyObject *args, PyObject *kwargs) if ((Py_TYPE(self) == &PyBufferedRWPair_Type) && !_PyArg_NoKeywords("BufferedRWPair", kwargs)) goto exit; - if (!PyArg_ParseTuple(args, - "OO|n:BufferedRWPair", + if (!PyArg_ParseTuple(args, "OO|n:BufferedRWPair", &reader, &writer, &buffer_size)) goto exit; return_value = _io_BufferedRWPair___init___impl((rwpair *)self, reader, writer, buffer_size); @@ -462,8 +443,7 @@ _io_BufferedRandom___init__(PyObject *self, PyObject *args, PyObject *kwargs) PyObject *raw; Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|n:BufferedRandom", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|n:BufferedRandom", _keywords, &raw, &buffer_size)) goto exit; return_value = _io_BufferedRandom___init___impl((buffered *)self, raw, buffer_size); @@ -471,4 +451,4 @@ _io_BufferedRandom___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=78808e39f36e3fa9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2bbb5e239b4ffe6f input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/bytesio.c.h b/Modules/_io/clinic/bytesio.c.h index 695c46a7b3..1ab1d65a65 100644 --- a/Modules/_io/clinic/bytesio.c.h +++ b/Modules/_io/clinic/bytesio.c.h @@ -276,9 +276,7 @@ _io_BytesIO_readinto(bytesio *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, - "w*:readinto", - &buffer)) + if (!PyArg_Parse(arg, "w*:readinto", &buffer)) goto exit; return_value = _io_BytesIO_readinto_impl(self, &buffer); @@ -346,8 +344,7 @@ _io_BytesIO_seek(bytesio *self, PyObject *args) Py_ssize_t pos; int whence = 0; - if (!PyArg_ParseTuple(args, - "n|i:seek", + if (!PyArg_ParseTuple(args, "n|i:seek", &pos, &whence)) goto exit; return_value = _io_BytesIO_seek_impl(self, pos, whence); @@ -414,8 +411,7 @@ _io_BytesIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"initial_bytes", NULL}; PyObject *initvalue = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:BytesIO", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:BytesIO", _keywords, &initvalue)) goto exit; return_value = _io_BytesIO___init___impl((bytesio *)self, initvalue); @@ -423,4 +419,4 @@ _io_BytesIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=e22697ada514f4eb input=a9049054013a1b77]*/ +/*[clinic end generated code: output=500ccc149587fac4 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/fileio.c.h b/Modules/_io/clinic/fileio.c.h index bb68cc9926..4a1205e933 100644 --- a/Modules/_io/clinic/fileio.c.h +++ b/Modules/_io/clinic/fileio.c.h @@ -55,8 +55,7 @@ _io_FileIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) int closefd = 1; PyObject *opener = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|siO:FileIO", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|siO:FileIO", _keywords, &nameobj, &mode, &closefd, &opener)) goto exit; return_value = _io_FileIO___init___impl((fileio *)self, nameobj, mode, closefd, opener); @@ -155,9 +154,7 @@ _io_FileIO_readinto(fileio *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, - "w*:readinto", - &buffer)) + if (!PyArg_Parse(arg, "w*:readinto", &buffer)) goto exit; return_value = _io_FileIO_readinto_impl(self, &buffer); @@ -212,8 +209,7 @@ _io_FileIO_read(fileio *self, PyObject *args) PyObject *return_value = NULL; Py_ssize_t size = -1; - if (!PyArg_ParseTuple(args, - "|O&:read", + if (!PyArg_ParseTuple(args, "|O&:read", _PyIO_ConvertSsize_t, &size)) goto exit; return_value = _io_FileIO_read_impl(self, size); @@ -244,9 +240,7 @@ _io_FileIO_write(fileio *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer b = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:write", - &b)) + if (!PyArg_Parse(arg, "y*:write", &b)) goto exit; return_value = _io_FileIO_write_impl(self, &b); @@ -285,8 +279,7 @@ _io_FileIO_seek(fileio *self, PyObject *args) PyObject *pos; int whence = 0; - if (!PyArg_ParseTuple(args, - "O|i:seek", + if (!PyArg_ParseTuple(args, "O|i:seek", &pos, &whence)) goto exit; return_value = _io_FileIO_seek_impl(self, pos, whence); @@ -371,4 +364,4 @@ _io_FileIO_isatty(fileio *self, PyObject *Py_UNUSED(ignored)) #ifndef _IO_FILEIO_TRUNCATE_METHODDEF #define _IO_FILEIO_TRUNCATE_METHODDEF #endif /* !defined(_IO_FILEIO_TRUNCATE_METHODDEF) */ -/*[clinic end generated code: output=c6708e1980f6e02d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b1a20b10c81add64 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/iobase.c.h b/Modules/_io/clinic/iobase.c.h index ce47faadc4..3cea079d45 100644 --- a/Modules/_io/clinic/iobase.c.h +++ b/Modules/_io/clinic/iobase.c.h @@ -185,8 +185,7 @@ _io__IOBase_readline(PyObject *self, PyObject *args) PyObject *return_value = NULL; Py_ssize_t limit = -1; - if (!PyArg_ParseTuple(args, - "|O&:readline", + if (!PyArg_ParseTuple(args, "|O&:readline", _PyIO_ConvertSsize_t, &limit)) goto exit; return_value = _io__IOBase_readline_impl(self, limit); @@ -217,8 +216,7 @@ _io__IOBase_readlines(PyObject *self, PyObject *args) PyObject *return_value = NULL; Py_ssize_t hint = -1; - if (!PyArg_ParseTuple(args, - "|O&:readlines", + if (!PyArg_ParseTuple(args, "|O&:readlines", _PyIO_ConvertSsize_t, &hint)) goto exit; return_value = _io__IOBase_readlines_impl(self, hint); @@ -252,8 +250,7 @@ _io__RawIOBase_read(PyObject *self, PyObject *args) PyObject *return_value = NULL; Py_ssize_t n = -1; - if (!PyArg_ParseTuple(args, - "|n:read", + if (!PyArg_ParseTuple(args, "|n:read", &n)) goto exit; return_value = _io__RawIOBase_read_impl(self, n); @@ -279,4 +276,4 @@ _io__RawIOBase_readall(PyObject *self, PyObject *Py_UNUSED(ignored)) { return _io__RawIOBase_readall_impl(self); } -/*[clinic end generated code: output=84eef4b7541f54b7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=fe034152b6884e65 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/stringio.c.h b/Modules/_io/clinic/stringio.c.h index b830c6d3fb..a8e32a3376 100644 --- a/Modules/_io/clinic/stringio.c.h +++ b/Modules/_io/clinic/stringio.c.h @@ -156,8 +156,7 @@ _io_StringIO_seek(stringio *self, PyObject *args) Py_ssize_t pos; int whence = 0; - if (!PyArg_ParseTuple(args, - "n|i:seek", + if (!PyArg_ParseTuple(args, "n|i:seek", &pos, &whence)) goto exit; return_value = _io_StringIO_seek_impl(self, pos, whence); @@ -222,8 +221,7 @@ _io_StringIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) PyObject *value = NULL; PyObject *newline_obj = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|OO:StringIO", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OO:StringIO", _keywords, &value, &newline_obj)) goto exit; return_value = _io_StringIO___init___impl((stringio *)self, value, newline_obj); @@ -285,4 +283,4 @@ _io_StringIO_seekable(stringio *self, PyObject *Py_UNUSED(ignored)) { return _io_StringIO_seekable_impl(self); } -/*[clinic end generated code: output=f3062096d357c652 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f061cf3a20cd14ed input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/textio.c.h b/Modules/_io/clinic/textio.c.h index 62603bd739..dc7e8c7584 100644 --- a/Modules/_io/clinic/textio.c.h +++ b/Modules/_io/clinic/textio.c.h @@ -29,8 +29,7 @@ _io_IncrementalNewlineDecoder___init__(PyObject *self, PyObject *args, PyObject int translate; PyObject *errors = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "Oi|O:IncrementalNewlineDecoder", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi|O:IncrementalNewlineDecoder", _keywords, &decoder, &translate, &errors)) goto exit; return_value = _io_IncrementalNewlineDecoder___init___impl((nldecoder_object *)self, decoder, translate, errors); @@ -59,8 +58,7 @@ _io_IncrementalNewlineDecoder_decode(nldecoder_object *self, PyObject *args, PyO PyObject *input; int final = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|i:decode", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|i:decode", _keywords, &input, &final)) goto exit; return_value = _io_IncrementalNewlineDecoder_decode_impl(self, input, final); @@ -163,8 +161,7 @@ _io_TextIOWrapper___init__(PyObject *self, PyObject *args, PyObject *kwargs) int line_buffering = 0; int write_through = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|zzzii:TextIOWrapper", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|zzzii:TextIOWrapper", _keywords, &buffer, &encoding, &errors, &newline, &line_buffering, &write_through)) goto exit; return_value = _io_TextIOWrapper___init___impl((textio *)self, buffer, encoding, errors, newline, line_buffering, write_through); @@ -207,9 +204,7 @@ _io_TextIOWrapper_write(textio *self, PyObject *arg) PyObject *return_value = NULL; PyObject *text; - if (!PyArg_Parse(arg, - "U:write", - &text)) + if (!PyArg_Parse(arg, "U:write", &text)) goto exit; return_value = _io_TextIOWrapper_write_impl(self, text); @@ -234,8 +229,7 @@ _io_TextIOWrapper_read(textio *self, PyObject *args) PyObject *return_value = NULL; Py_ssize_t n = -1; - if (!PyArg_ParseTuple(args, - "|O&:read", + if (!PyArg_ParseTuple(args, "|O&:read", _PyIO_ConvertSsize_t, &n)) goto exit; return_value = _io_TextIOWrapper_read_impl(self, n); @@ -261,8 +255,7 @@ _io_TextIOWrapper_readline(textio *self, PyObject *args) PyObject *return_value = NULL; Py_ssize_t size = -1; - if (!PyArg_ParseTuple(args, - "|n:readline", + if (!PyArg_ParseTuple(args, "|n:readline", &size)) goto exit; return_value = _io_TextIOWrapper_readline_impl(self, size); @@ -289,8 +282,7 @@ _io_TextIOWrapper_seek(textio *self, PyObject *args) PyObject *cookieObj; int whence = 0; - if (!PyArg_ParseTuple(args, - "O|i:seek", + if (!PyArg_ParseTuple(args, "O|i:seek", &cookieObj, &whence)) goto exit; return_value = _io_TextIOWrapper_seek_impl(self, cookieObj, whence); @@ -461,4 +453,4 @@ _io_TextIOWrapper_close(textio *self, PyObject *Py_UNUSED(ignored)) { return _io_TextIOWrapper_close_impl(self); } -/*[clinic end generated code: output=a610bd3b694886c3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=690608f85aab8ba5 input=a9049054013a1b77]*/ diff --git a/Modules/cjkcodecs/clinic/multibytecodec.c.h b/Modules/cjkcodecs/clinic/multibytecodec.c.h index d2bad32908..1985147c43 100644 --- a/Modules/cjkcodecs/clinic/multibytecodec.c.h +++ b/Modules/cjkcodecs/clinic/multibytecodec.c.h @@ -29,8 +29,7 @@ _multibytecodec_MultibyteCodec_encode(MultibyteCodecObject *self, PyObject *args PyObject *input; const char *errors = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|z:encode", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|z:encode", _keywords, &input, &errors)) goto exit; return_value = _multibytecodec_MultibyteCodec_encode_impl(self, input, errors); @@ -66,8 +65,7 @@ _multibytecodec_MultibyteCodec_decode(MultibyteCodecObject *self, PyObject *args Py_buffer input = {NULL, NULL}; const char *errors = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "y*|z:decode", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|z:decode", _keywords, &input, &errors)) goto exit; return_value = _multibytecodec_MultibyteCodec_decode_impl(self, &input, errors); @@ -101,8 +99,7 @@ _multibytecodec_MultibyteIncrementalEncoder_encode(MultibyteIncrementalEncoderOb PyObject *input; int final = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|i:encode", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|i:encode", _keywords, &input, &final)) goto exit; return_value = _multibytecodec_MultibyteIncrementalEncoder_encode_impl(self, input, final); @@ -149,8 +146,7 @@ _multibytecodec_MultibyteIncrementalDecoder_decode(MultibyteIncrementalDecoderOb Py_buffer input = {NULL, NULL}; int final = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "y*|i:decode", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|i:decode", _keywords, &input, &final)) goto exit; return_value = _multibytecodec_MultibyteIncrementalDecoder_decode_impl(self, &input, final); @@ -321,4 +317,4 @@ PyDoc_STRVAR(_multibytecodec___create_codec__doc__, #define _MULTIBYTECODEC___CREATE_CODEC_METHODDEF \ {"__create_codec", (PyCFunction)_multibytecodec___create_codec, METH_O, _multibytecodec___create_codec__doc__}, -/*[clinic end generated code: output=0fe582cb941024c1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c104f5fd548c1ac5 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_bz2module.c.h b/Modules/clinic/_bz2module.c.h index 7937fb6704..3ed8303e95 100644 --- a/Modules/clinic/_bz2module.c.h +++ b/Modules/clinic/_bz2module.c.h @@ -25,9 +25,7 @@ _bz2_BZ2Compressor_compress(BZ2Compressor *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:compress", - &data)) + if (!PyArg_Parse(arg, "y*:compress", &data)) goto exit; return_value = _bz2_BZ2Compressor_compress_impl(self, &data); @@ -84,8 +82,7 @@ _bz2_BZ2Compressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) if ((Py_TYPE(self) == &BZ2Compressor_Type) && !_PyArg_NoKeywords("BZ2Compressor", kwargs)) goto exit; - if (!PyArg_ParseTuple(args, - "|i:BZ2Compressor", + if (!PyArg_ParseTuple(args, "|i:BZ2Compressor", &compresslevel)) goto exit; return_value = _bz2_BZ2Compressor___init___impl((BZ2Compressor *)self, compresslevel); @@ -128,8 +125,7 @@ _bz2_BZ2Decompressor_decompress(BZ2Decompressor *self, PyObject *args, PyObject Py_buffer data = {NULL, NULL}; Py_ssize_t max_length = -1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "y*|n:decompress", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|n:decompress", _keywords, &data, &max_length)) goto exit; return_value = _bz2_BZ2Decompressor_decompress_impl(self, &data, max_length); @@ -169,4 +165,4 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=e8a48a949969c355 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=fef29b76b3314fc7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index 084648f13d..238bed46f4 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -20,13 +20,11 @@ _codecs__forget_codec(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; const char *encoding; - if (!PyArg_Parse(arg, - "s:_forget_codec", - &encoding)) + if (!PyArg_Parse(arg, "s:_forget_codec", &encoding)) goto exit; return_value = _codecs__forget_codec_impl(module, encoding); exit: return return_value; } -/*[clinic end generated code: output=fc5ce4d3166f7d96 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=52cc017e06c8ef9a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_cryptmodule.c.h b/Modules/clinic/_cryptmodule.c.h index cd63bd1103..b8ec31e003 100644 --- a/Modules/clinic/_cryptmodule.c.h +++ b/Modules/clinic/_cryptmodule.c.h @@ -26,8 +26,7 @@ crypt_crypt(PyModuleDef *module, PyObject *args) const char *word; const char *salt; - if (!PyArg_ParseTuple(args, - "ss:crypt", + if (!PyArg_ParseTuple(args, "ss:crypt", &word, &salt)) goto exit; return_value = crypt_crypt_impl(module, word, salt); @@ -35,4 +34,4 @@ crypt_crypt(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=b5b8d977189d19ea input=a9049054013a1b77]*/ +/*[clinic end generated code: output=22c295c9bce018c4 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_datetimemodule.c.h b/Modules/clinic/_datetimemodule.c.h index 5bf3ebe3b8..688c903e2f 100644 --- a/Modules/clinic/_datetimemodule.c.h +++ b/Modules/clinic/_datetimemodule.c.h @@ -26,8 +26,7 @@ datetime_datetime_now(PyTypeObject *type, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"tz", NULL}; PyObject *tz = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:now", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:now", _keywords, &tz)) goto exit; return_value = datetime_datetime_now_impl(type, tz); @@ -35,4 +34,4 @@ datetime_datetime_now(PyTypeObject *type, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=a5c51b96f10c462c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7f45c670d6e4953a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_dbmmodule.c.h b/Modules/clinic/_dbmmodule.c.h index 4d8837370d..8474e02828 100644 --- a/Modules/clinic/_dbmmodule.c.h +++ b/Modules/clinic/_dbmmodule.c.h @@ -59,8 +59,7 @@ _dbm_dbm_get(dbmobject *self, PyObject *args) Py_ssize_clean_t key_length; PyObject *default_value = NULL; - if (!PyArg_ParseTuple(args, - "s#|O:get", + if (!PyArg_ParseTuple(args, "s#|O:get", &key, &key_length, &default_value)) goto exit; return_value = _dbm_dbm_get_impl(self, key, key_length, default_value); @@ -93,8 +92,7 @@ _dbm_dbm_setdefault(dbmobject *self, PyObject *args) Py_ssize_clean_t key_length; PyObject *default_value = NULL; - if (!PyArg_ParseTuple(args, - "s#|O:setdefault", + if (!PyArg_ParseTuple(args, "s#|O:setdefault", &key, &key_length, &default_value)) goto exit; return_value = _dbm_dbm_setdefault_impl(self, key, key_length, default_value); @@ -132,8 +130,7 @@ dbmopen(PyModuleDef *module, PyObject *args) const char *flags = "r"; int mode = 438; - if (!PyArg_ParseTuple(args, - "s|si:open", + if (!PyArg_ParseTuple(args, "s|si:open", &filename, &flags, &mode)) goto exit; return_value = dbmopen_impl(module, filename, flags, mode); @@ -141,4 +138,4 @@ dbmopen(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=951fcfdb6d667a61 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1d92e81b28c558d0 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_gdbmmodule.c.h b/Modules/clinic/_gdbmmodule.c.h index d9e9acf696..110ad9a539 100644 --- a/Modules/clinic/_gdbmmodule.c.h +++ b/Modules/clinic/_gdbmmodule.c.h @@ -147,9 +147,7 @@ _gdbm_gdbm_nextkey(dbmobject *self, PyObject *arg) const char *key; Py_ssize_clean_t key_length; - if (!PyArg_Parse(arg, - "s#:nextkey", - &key, &key_length)) + if (!PyArg_Parse(arg, "s#:nextkey", &key, &key_length)) goto exit; return_value = _gdbm_gdbm_nextkey_impl(self, key, key_length); @@ -244,8 +242,7 @@ dbmopen(PyModuleDef *module, PyObject *args) const char *flags = "r"; int mode = 438; - if (!PyArg_ParseTuple(args, - "s|si:open", + if (!PyArg_ParseTuple(args, "s|si:open", &name, &flags, &mode)) goto exit; return_value = dbmopen_impl(module, name, flags, mode); @@ -253,4 +250,4 @@ dbmopen(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=b41c68a5f30699cb input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d3d8d871bcccb68a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h index 815dc90dc3..59d9d51026 100644 --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -25,9 +25,7 @@ _lzma_LZMACompressor_compress(Compressor *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:compress", - &data)) + if (!PyArg_Parse(arg, "y*:compress", &data)) goto exit; return_value = _lzma_LZMACompressor_compress_impl(self, &data); @@ -95,8 +93,7 @@ _lzma_LZMADecompressor_decompress(Decompressor *self, PyObject *args, PyObject * Py_buffer data = {NULL, NULL}; Py_ssize_t max_length = -1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "y*|n:decompress", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|n:decompress", _keywords, &data, &max_length)) goto exit; return_value = _lzma_LZMADecompressor_decompress_impl(self, &data, max_length); @@ -145,8 +142,7 @@ _lzma_LZMADecompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs PyObject *memlimit = Py_None; PyObject *filters = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|iOO:LZMADecompressor", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iOO:LZMADecompressor", _keywords, &format, &memlimit, &filters)) goto exit; return_value = _lzma_LZMADecompressor___init___impl((Decompressor *)self, format, memlimit, filters); @@ -175,9 +171,7 @@ _lzma_is_check_supported(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int check_id; - if (!PyArg_Parse(arg, - "i:is_check_supported", - &check_id)) + if (!PyArg_Parse(arg, "i:is_check_supported", &check_id)) goto exit; return_value = _lzma_is_check_supported_impl(module, check_id); @@ -205,9 +199,7 @@ _lzma__encode_filter_properties(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; lzma_filter filter = {LZMA_VLI_UNKNOWN, NULL}; - if (!PyArg_Parse(arg, - "O&:_encode_filter_properties", - lzma_filter_converter, &filter)) + if (!PyArg_Parse(arg, "O&:_encode_filter_properties", lzma_filter_converter, &filter)) goto exit; return_value = _lzma__encode_filter_properties_impl(module, filter); @@ -241,8 +233,7 @@ _lzma__decode_filter_properties(PyModuleDef *module, PyObject *args) lzma_vli filter_id; Py_buffer encoded_props = {NULL, NULL}; - if (!PyArg_ParseTuple(args, - "O&y*:_decode_filter_properties", + if (!PyArg_ParseTuple(args, "O&y*:_decode_filter_properties", lzma_vli_converter, &filter_id, &encoded_props)) goto exit; return_value = _lzma__decode_filter_properties_impl(module, filter_id, &encoded_props); @@ -254,4 +245,4 @@ exit: return return_value; } -/*[clinic end generated code: output=8981089cde080b54 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2d3e0842be3d3fe1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_opcode.c.h b/Modules/clinic/_opcode.c.h index 945c9042e6..196a2eefd3 100644 --- a/Modules/clinic/_opcode.c.h +++ b/Modules/clinic/_opcode.c.h @@ -22,8 +22,7 @@ _opcode_stack_effect(PyModuleDef *module, PyObject *args) PyObject *oparg = Py_None; int _return_value; - if (!PyArg_ParseTuple(args, - "i|O:stack_effect", + if (!PyArg_ParseTuple(args, "i|O:stack_effect", &opcode, &oparg)) goto exit; _return_value = _opcode_stack_effect_impl(module, opcode, oparg); @@ -34,4 +33,4 @@ _opcode_stack_effect(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=dbe45148bc21ecdf input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8ee7cb735705e8b3 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h index c7fa5bfcea..b698ce81bd 100644 --- a/Modules/clinic/_pickle.c.h +++ b/Modules/clinic/_pickle.c.h @@ -97,8 +97,7 @@ _pickle_Pickler___init__(PyObject *self, PyObject *args, PyObject *kwargs) PyObject *protocol = NULL; int fix_imports = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|Op:Pickler", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Op:Pickler", _keywords, &file, &protocol, &fix_imports)) goto exit; return_value = _pickle_Pickler___init___impl((PicklerObject *)self, file, protocol, fix_imports); @@ -288,8 +287,7 @@ _pickle_Unpickler___init__(PyObject *self, PyObject *args, PyObject *kwargs) const char *encoding = "ASCII"; const char *errors = "strict"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|$pss:Unpickler", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|$pss:Unpickler", _keywords, &file, &fix_imports, &encoding, &errors)) goto exit; return_value = _pickle_Unpickler___init___impl((UnpicklerObject *)self, file, fix_imports, encoding, errors); @@ -395,8 +393,7 @@ _pickle_dump(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *protocol = NULL; int fix_imports = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "OO|O$p:dump", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|O$p:dump", _keywords, &obj, &file, &protocol, &fix_imports)) goto exit; return_value = _pickle_dump_impl(module, obj, file, protocol, fix_imports); @@ -439,8 +436,7 @@ _pickle_dumps(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *protocol = NULL; int fix_imports = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|O$p:dumps", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O$p:dumps", _keywords, &obj, &protocol, &fix_imports)) goto exit; return_value = _pickle_dumps_impl(module, obj, protocol, fix_imports); @@ -495,8 +491,7 @@ _pickle_load(PyModuleDef *module, PyObject *args, PyObject *kwargs) const char *encoding = "ASCII"; const char *errors = "strict"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|$pss:load", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|$pss:load", _keywords, &file, &fix_imports, &encoding, &errors)) goto exit; return_value = _pickle_load_impl(module, file, fix_imports, encoding, errors); @@ -542,8 +537,7 @@ _pickle_loads(PyModuleDef *module, PyObject *args, PyObject *kwargs) const char *encoding = "ASCII"; const char *errors = "strict"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O|$pss:loads", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|$pss:loads", _keywords, &data, &fix_imports, &encoding, &errors)) goto exit; return_value = _pickle_loads_impl(module, data, fix_imports, encoding, errors); @@ -551,4 +545,4 @@ _pickle_loads(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=2c413ecc2ec74f7c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=06f3a5233298448e input=a9049054013a1b77]*/ diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h index 2e64aad43b..fdf247e2ca 100644 --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -76,8 +76,7 @@ array_array_pop(arrayobject *self, PyObject *args) PyObject *return_value = NULL; Py_ssize_t i = -1; - if (!PyArg_ParseTuple(args, - "|n:pop", + if (!PyArg_ParseTuple(args, "|n:pop", &i)) goto exit; return_value = array_array_pop_impl(self, i); @@ -114,8 +113,7 @@ array_array_insert(arrayobject *self, PyObject *args) Py_ssize_t i; PyObject *v; - if (!PyArg_ParseTuple(args, - "nO:insert", + if (!PyArg_ParseTuple(args, "nO:insert", &i, &v)) goto exit; return_value = array_array_insert_impl(self, i, v); @@ -212,8 +210,7 @@ array_array_fromfile(arrayobject *self, PyObject *args) PyObject *f; Py_ssize_t n; - if (!PyArg_ParseTuple(args, - "On:fromfile", + if (!PyArg_ParseTuple(args, "On:fromfile", &f, &n)) goto exit; return_value = array_array_fromfile_impl(self, f, n); @@ -278,9 +275,7 @@ array_array_fromstring(arrayobject *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, - "s*:fromstring", - &buffer)) + if (!PyArg_Parse(arg, "s*:fromstring", &buffer)) goto exit; return_value = array_array_fromstring_impl(self, &buffer); @@ -310,9 +305,7 @@ array_array_frombytes(arrayobject *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:frombytes", - &buffer)) + if (!PyArg_Parse(arg, "y*:frombytes", &buffer)) goto exit; return_value = array_array_frombytes_impl(self, &buffer); @@ -386,9 +379,7 @@ array_array_fromunicode(arrayobject *self, PyObject *arg) Py_UNICODE *ustr; Py_ssize_clean_t ustr_length; - if (!PyArg_Parse(arg, - "u#:fromunicode", - &ustr, &ustr_length)) + if (!PyArg_Parse(arg, "u#:fromunicode", &ustr, &ustr_length)) goto exit; return_value = array_array_fromunicode_impl(self, ustr, ustr_length); @@ -461,8 +452,7 @@ array__array_reconstructor(PyModuleDef *module, PyObject *args) enum machine_format_code mformat_code; PyObject *items; - if (!PyArg_ParseTuple(args, - "OCiO:_array_reconstructor", + if (!PyArg_ParseTuple(args, "OCiO:_array_reconstructor", &arraytype, &typecode, &mformat_code, &items)) goto exit; return_value = array__array_reconstructor_impl(module, arraytype, typecode, mformat_code, items); @@ -506,4 +496,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__, #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, -/*[clinic end generated code: output=48e8198c8087cd00 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d2e82c65ea841cfc input=a9049054013a1b77]*/ diff --git a/Modules/clinic/audioop.c.h b/Modules/clinic/audioop.c.h index a58afdab3b..3ee29666cc 100644 --- a/Modules/clinic/audioop.c.h +++ b/Modules/clinic/audioop.c.h @@ -23,8 +23,7 @@ audioop_getsample(PyModuleDef *module, PyObject *args) int width; Py_ssize_t index; - if (!PyArg_ParseTuple(args, - "y*in:getsample", + if (!PyArg_ParseTuple(args, "y*in:getsample", &fragment, &width, &index)) goto exit; return_value = audioop_getsample_impl(module, &fragment, width, index); @@ -56,8 +55,7 @@ audioop_max(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:max", + if (!PyArg_ParseTuple(args, "y*i:max", &fragment, &width)) goto exit; return_value = audioop_max_impl(module, &fragment, width); @@ -89,8 +87,7 @@ audioop_minmax(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:minmax", + if (!PyArg_ParseTuple(args, "y*i:minmax", &fragment, &width)) goto exit; return_value = audioop_minmax_impl(module, &fragment, width); @@ -122,8 +119,7 @@ audioop_avg(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:avg", + if (!PyArg_ParseTuple(args, "y*i:avg", &fragment, &width)) goto exit; return_value = audioop_avg_impl(module, &fragment, width); @@ -155,8 +151,7 @@ audioop_rms(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:rms", + if (!PyArg_ParseTuple(args, "y*i:rms", &fragment, &width)) goto exit; return_value = audioop_rms_impl(module, &fragment, width); @@ -189,8 +184,7 @@ audioop_findfit(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; Py_buffer reference = {NULL, NULL}; - if (!PyArg_ParseTuple(args, - "y*y*:findfit", + if (!PyArg_ParseTuple(args, "y*y*:findfit", &fragment, &reference)) goto exit; return_value = audioop_findfit_impl(module, &fragment, &reference); @@ -226,8 +220,7 @@ audioop_findfactor(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; Py_buffer reference = {NULL, NULL}; - if (!PyArg_ParseTuple(args, - "y*y*:findfactor", + if (!PyArg_ParseTuple(args, "y*y*:findfactor", &fragment, &reference)) goto exit; return_value = audioop_findfactor_impl(module, &fragment, &reference); @@ -263,8 +256,7 @@ audioop_findmax(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; Py_ssize_t length; - if (!PyArg_ParseTuple(args, - "y*n:findmax", + if (!PyArg_ParseTuple(args, "y*n:findmax", &fragment, &length)) goto exit; return_value = audioop_findmax_impl(module, &fragment, length); @@ -296,8 +288,7 @@ audioop_avgpp(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:avgpp", + if (!PyArg_ParseTuple(args, "y*i:avgpp", &fragment, &width)) goto exit; return_value = audioop_avgpp_impl(module, &fragment, width); @@ -329,8 +320,7 @@ audioop_maxpp(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:maxpp", + if (!PyArg_ParseTuple(args, "y*i:maxpp", &fragment, &width)) goto exit; return_value = audioop_maxpp_impl(module, &fragment, width); @@ -362,8 +352,7 @@ audioop_cross(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:cross", + if (!PyArg_ParseTuple(args, "y*i:cross", &fragment, &width)) goto exit; return_value = audioop_cross_impl(module, &fragment, width); @@ -397,8 +386,7 @@ audioop_mul(PyModuleDef *module, PyObject *args) int width; double factor; - if (!PyArg_ParseTuple(args, - "y*id:mul", + if (!PyArg_ParseTuple(args, "y*id:mul", &fragment, &width, &factor)) goto exit; return_value = audioop_mul_impl(module, &fragment, width, factor); @@ -433,8 +421,7 @@ audioop_tomono(PyModuleDef *module, PyObject *args) double lfactor; double rfactor; - if (!PyArg_ParseTuple(args, - "y*idd:tomono", + if (!PyArg_ParseTuple(args, "y*idd:tomono", &fragment, &width, &lfactor, &rfactor)) goto exit; return_value = audioop_tomono_impl(module, &fragment, width, lfactor, rfactor); @@ -469,8 +456,7 @@ audioop_tostereo(PyModuleDef *module, PyObject *args) double lfactor; double rfactor; - if (!PyArg_ParseTuple(args, - "y*idd:tostereo", + if (!PyArg_ParseTuple(args, "y*idd:tostereo", &fragment, &width, &lfactor, &rfactor)) goto exit; return_value = audioop_tostereo_impl(module, &fragment, width, lfactor, rfactor); @@ -504,8 +490,7 @@ audioop_add(PyModuleDef *module, PyObject *args) Py_buffer fragment2 = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*y*i:add", + if (!PyArg_ParseTuple(args, "y*y*i:add", &fragment1, &fragment2, &width)) goto exit; return_value = audioop_add_impl(module, &fragment1, &fragment2, width); @@ -542,8 +527,7 @@ audioop_bias(PyModuleDef *module, PyObject *args) int width; int bias; - if (!PyArg_ParseTuple(args, - "y*ii:bias", + if (!PyArg_ParseTuple(args, "y*ii:bias", &fragment, &width, &bias)) goto exit; return_value = audioop_bias_impl(module, &fragment, width, bias); @@ -575,8 +559,7 @@ audioop_reverse(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:reverse", + if (!PyArg_ParseTuple(args, "y*i:reverse", &fragment, &width)) goto exit; return_value = audioop_reverse_impl(module, &fragment, width); @@ -608,8 +591,7 @@ audioop_byteswap(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:byteswap", + if (!PyArg_ParseTuple(args, "y*i:byteswap", &fragment, &width)) goto exit; return_value = audioop_byteswap_impl(module, &fragment, width); @@ -643,8 +625,7 @@ audioop_lin2lin(PyModuleDef *module, PyObject *args) int width; int newwidth; - if (!PyArg_ParseTuple(args, - "y*ii:lin2lin", + if (!PyArg_ParseTuple(args, "y*ii:lin2lin", &fragment, &width, &newwidth)) goto exit; return_value = audioop_lin2lin_impl(module, &fragment, width, newwidth); @@ -685,8 +666,7 @@ audioop_ratecv(PyModuleDef *module, PyObject *args) int weightA = 1; int weightB = 0; - if (!PyArg_ParseTuple(args, - "y*iiiiO|ii:ratecv", + if (!PyArg_ParseTuple(args, "y*iiiiO|ii:ratecv", &fragment, &width, &nchannels, &inrate, &outrate, &state, &weightA, &weightB)) goto exit; return_value = audioop_ratecv_impl(module, &fragment, width, nchannels, inrate, outrate, state, weightA, weightB); @@ -718,8 +698,7 @@ audioop_lin2ulaw(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:lin2ulaw", + if (!PyArg_ParseTuple(args, "y*i:lin2ulaw", &fragment, &width)) goto exit; return_value = audioop_lin2ulaw_impl(module, &fragment, width); @@ -751,8 +730,7 @@ audioop_ulaw2lin(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:ulaw2lin", + if (!PyArg_ParseTuple(args, "y*i:ulaw2lin", &fragment, &width)) goto exit; return_value = audioop_ulaw2lin_impl(module, &fragment, width); @@ -784,8 +762,7 @@ audioop_lin2alaw(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:lin2alaw", + if (!PyArg_ParseTuple(args, "y*i:lin2alaw", &fragment, &width)) goto exit; return_value = audioop_lin2alaw_impl(module, &fragment, width); @@ -817,8 +794,7 @@ audioop_alaw2lin(PyModuleDef *module, PyObject *args) Py_buffer fragment = {NULL, NULL}; int width; - if (!PyArg_ParseTuple(args, - "y*i:alaw2lin", + if (!PyArg_ParseTuple(args, "y*i:alaw2lin", &fragment, &width)) goto exit; return_value = audioop_alaw2lin_impl(module, &fragment, width); @@ -852,8 +828,7 @@ audioop_lin2adpcm(PyModuleDef *module, PyObject *args) int width; PyObject *state; - if (!PyArg_ParseTuple(args, - "y*iO:lin2adpcm", + if (!PyArg_ParseTuple(args, "y*iO:lin2adpcm", &fragment, &width, &state)) goto exit; return_value = audioop_lin2adpcm_impl(module, &fragment, width, state); @@ -887,8 +862,7 @@ audioop_adpcm2lin(PyModuleDef *module, PyObject *args) int width; PyObject *state; - if (!PyArg_ParseTuple(args, - "y*iO:adpcm2lin", + if (!PyArg_ParseTuple(args, "y*iO:adpcm2lin", &fragment, &width, &state)) goto exit; return_value = audioop_adpcm2lin_impl(module, &fragment, width, state); @@ -900,4 +874,4 @@ exit: return return_value; } -/*[clinic end generated code: output=9b01aafef50425ae input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a076e1b213a8727b input=a9049054013a1b77]*/ diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h index 25d39d2519..e348beebaa 100644 --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -20,9 +20,7 @@ binascii_a2b_uu(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "O&:a2b_uu", - ascii_buffer_converter, &data)) + if (!PyArg_Parse(arg, "O&:a2b_uu", ascii_buffer_converter, &data)) goto exit; return_value = binascii_a2b_uu_impl(module, &data); @@ -52,9 +50,7 @@ binascii_b2a_uu(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:b2a_uu", - &data)) + if (!PyArg_Parse(arg, "y*:b2a_uu", &data)) goto exit; return_value = binascii_b2a_uu_impl(module, &data); @@ -84,9 +80,7 @@ binascii_a2b_base64(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "O&:a2b_base64", - ascii_buffer_converter, &data)) + if (!PyArg_Parse(arg, "O&:a2b_base64", ascii_buffer_converter, &data)) goto exit; return_value = binascii_a2b_base64_impl(module, &data); @@ -116,9 +110,7 @@ binascii_b2a_base64(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:b2a_base64", - &data)) + if (!PyArg_Parse(arg, "y*:b2a_base64", &data)) goto exit; return_value = binascii_b2a_base64_impl(module, &data); @@ -148,9 +140,7 @@ binascii_a2b_hqx(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "O&:a2b_hqx", - ascii_buffer_converter, &data)) + if (!PyArg_Parse(arg, "O&:a2b_hqx", ascii_buffer_converter, &data)) goto exit; return_value = binascii_a2b_hqx_impl(module, &data); @@ -180,9 +170,7 @@ binascii_rlecode_hqx(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:rlecode_hqx", - &data)) + if (!PyArg_Parse(arg, "y*:rlecode_hqx", &data)) goto exit; return_value = binascii_rlecode_hqx_impl(module, &data); @@ -212,9 +200,7 @@ binascii_b2a_hqx(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:b2a_hqx", - &data)) + if (!PyArg_Parse(arg, "y*:b2a_hqx", &data)) goto exit; return_value = binascii_b2a_hqx_impl(module, &data); @@ -244,9 +230,7 @@ binascii_rledecode_hqx(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:rledecode_hqx", - &data)) + if (!PyArg_Parse(arg, "y*:rledecode_hqx", &data)) goto exit; return_value = binascii_rledecode_hqx_impl(module, &data); @@ -278,8 +262,7 @@ binascii_crc_hqx(PyModuleDef *module, PyObject *args) unsigned int crc; unsigned int _return_value; - if (!PyArg_ParseTuple(args, - "y*I:crc_hqx", + if (!PyArg_ParseTuple(args, "y*I:crc_hqx", &data, &crc)) goto exit; _return_value = binascii_crc_hqx_impl(module, &data, crc); @@ -315,8 +298,7 @@ binascii_crc32(PyModuleDef *module, PyObject *args) unsigned int crc = 0; unsigned int _return_value; - if (!PyArg_ParseTuple(args, - "y*|I:crc32", + if (!PyArg_ParseTuple(args, "y*|I:crc32", &data, &crc)) goto exit; _return_value = binascii_crc32_impl(module, &data, crc); @@ -353,9 +335,7 @@ binascii_b2a_hex(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:b2a_hex", - &data)) + if (!PyArg_Parse(arg, "y*:b2a_hex", &data)) goto exit; return_value = binascii_b2a_hex_impl(module, &data); @@ -387,9 +367,7 @@ binascii_hexlify(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:hexlify", - &data)) + if (!PyArg_Parse(arg, "y*:hexlify", &data)) goto exit; return_value = binascii_hexlify_impl(module, &data); @@ -422,9 +400,7 @@ binascii_a2b_hex(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; - if (!PyArg_Parse(arg, - "O&:a2b_hex", - ascii_buffer_converter, &hexstr)) + if (!PyArg_Parse(arg, "O&:a2b_hex", ascii_buffer_converter, &hexstr)) goto exit; return_value = binascii_a2b_hex_impl(module, &hexstr); @@ -456,9 +432,7 @@ binascii_unhexlify(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; - if (!PyArg_Parse(arg, - "O&:unhexlify", - ascii_buffer_converter, &hexstr)) + if (!PyArg_Parse(arg, "O&:unhexlify", ascii_buffer_converter, &hexstr)) goto exit; return_value = binascii_unhexlify_impl(module, &hexstr); @@ -490,8 +464,7 @@ binascii_a2b_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) Py_buffer data = {NULL, NULL}; int header = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|i:a2b_qp", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i:a2b_qp", _keywords, ascii_buffer_converter, &data, &header)) goto exit; return_value = binascii_a2b_qp_impl(module, &data, header); @@ -531,8 +504,7 @@ binascii_b2a_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) int istext = 1; int header = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "y*|iii:b2a_qp", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|iii:b2a_qp", _keywords, &data, "etabs, &istext, &header)) goto exit; return_value = binascii_b2a_qp_impl(module, &data, quotetabs, istext, header); @@ -544,4 +516,4 @@ exit: return return_value; } -/*[clinic end generated code: output=5f8d3578618b3432 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b1a3cbf7660ebaa5 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h index 4655dbf893..e8fa6cb061 100644 --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -21,9 +21,7 @@ cmath_acos(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:acos", - &z)) + if (!PyArg_Parse(arg, "D:acos", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -64,9 +62,7 @@ cmath_acosh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:acosh", - &z)) + if (!PyArg_Parse(arg, "D:acosh", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -107,9 +103,7 @@ cmath_asin(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:asin", - &z)) + if (!PyArg_Parse(arg, "D:asin", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -150,9 +144,7 @@ cmath_asinh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:asinh", - &z)) + if (!PyArg_Parse(arg, "D:asinh", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -193,9 +185,7 @@ cmath_atan(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:atan", - &z)) + if (!PyArg_Parse(arg, "D:atan", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -236,9 +226,7 @@ cmath_atanh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:atanh", - &z)) + if (!PyArg_Parse(arg, "D:atanh", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -279,9 +267,7 @@ cmath_cos(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:cos", - &z)) + if (!PyArg_Parse(arg, "D:cos", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -322,9 +308,7 @@ cmath_cosh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:cosh", - &z)) + if (!PyArg_Parse(arg, "D:cosh", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -365,9 +349,7 @@ cmath_exp(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:exp", - &z)) + if (!PyArg_Parse(arg, "D:exp", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -408,9 +390,7 @@ cmath_log10(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:log10", - &z)) + if (!PyArg_Parse(arg, "D:log10", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -451,9 +431,7 @@ cmath_sin(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:sin", - &z)) + if (!PyArg_Parse(arg, "D:sin", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -494,9 +472,7 @@ cmath_sinh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:sinh", - &z)) + if (!PyArg_Parse(arg, "D:sinh", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -537,9 +513,7 @@ cmath_sqrt(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:sqrt", - &z)) + if (!PyArg_Parse(arg, "D:sqrt", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -580,9 +554,7 @@ cmath_tan(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:tan", - &z)) + if (!PyArg_Parse(arg, "D:tan", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -623,9 +595,7 @@ cmath_tanh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, - "D:tanh", - &z)) + if (!PyArg_Parse(arg, "D:tanh", &z)) goto exit; /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); @@ -668,8 +638,7 @@ cmath_log(PyModuleDef *module, PyObject *args) Py_complex x; PyObject *y_obj = NULL; - if (!PyArg_ParseTuple(args, - "D|O:log", + if (!PyArg_ParseTuple(args, "D|O:log", &x, &y_obj)) goto exit; return_value = cmath_log_impl(module, x, y_obj); @@ -696,9 +665,7 @@ cmath_phase(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_complex z; - if (!PyArg_Parse(arg, - "D:phase", - &z)) + if (!PyArg_Parse(arg, "D:phase", &z)) goto exit; return_value = cmath_phase_impl(module, z); @@ -726,9 +693,7 @@ cmath_polar(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_complex z; - if (!PyArg_Parse(arg, - "D:polar", - &z)) + if (!PyArg_Parse(arg, "D:polar", &z)) goto exit; return_value = cmath_polar_impl(module, z); @@ -755,8 +720,7 @@ cmath_rect(PyModuleDef *module, PyObject *args) double r; double phi; - if (!PyArg_ParseTuple(args, - "dd:rect", + if (!PyArg_ParseTuple(args, "dd:rect", &r, &phi)) goto exit; return_value = cmath_rect_impl(module, r, phi); @@ -783,9 +747,7 @@ cmath_isfinite(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_complex z; - if (!PyArg_Parse(arg, - "D:isfinite", - &z)) + if (!PyArg_Parse(arg, "D:isfinite", &z)) goto exit; return_value = cmath_isfinite_impl(module, z); @@ -811,9 +773,7 @@ cmath_isnan(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_complex z; - if (!PyArg_Parse(arg, - "D:isnan", - &z)) + if (!PyArg_Parse(arg, "D:isnan", &z)) goto exit; return_value = cmath_isnan_impl(module, z); @@ -839,13 +799,11 @@ cmath_isinf(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_complex z; - if (!PyArg_Parse(arg, - "D:isinf", - &z)) + if (!PyArg_Parse(arg, "D:isinf", &z)) goto exit; return_value = cmath_isinf_impl(module, z); exit: return return_value; } -/*[clinic end generated code: output=9143b8dcc8069024 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=274f59792cf4f418 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/fcntlmodule.c.h b/Modules/clinic/fcntlmodule.c.h index 2a1f8aa024..5e3b1c06f6 100644 --- a/Modules/clinic/fcntlmodule.c.h +++ b/Modules/clinic/fcntlmodule.c.h @@ -32,8 +32,7 @@ fcntl_fcntl(PyModuleDef *module, PyObject *args) int code; PyObject *arg = NULL; - if (!PyArg_ParseTuple(args, - "O&i|O:fcntl", + if (!PyArg_ParseTuple(args, "O&i|O:fcntl", conv_descriptor, &fd, &code, &arg)) goto exit; return_value = fcntl_fcntl_impl(module, fd, code, arg); @@ -91,8 +90,7 @@ fcntl_ioctl(PyModuleDef *module, PyObject *args) PyObject *ob_arg = NULL; int mutate_arg = 1; - if (!PyArg_ParseTuple(args, - "O&I|Op:ioctl", + if (!PyArg_ParseTuple(args, "O&I|Op:ioctl", conv_descriptor, &fd, &code, &ob_arg, &mutate_arg)) goto exit; return_value = fcntl_ioctl_impl(module, fd, code, ob_arg, mutate_arg); @@ -123,8 +121,7 @@ fcntl_flock(PyModuleDef *module, PyObject *args) int fd; int code; - if (!PyArg_ParseTuple(args, - "O&i:flock", + if (!PyArg_ParseTuple(args, "O&i:flock", conv_descriptor, &fd, &code)) goto exit; return_value = fcntl_flock_impl(module, fd, code); @@ -177,8 +174,7 @@ fcntl_lockf(PyModuleDef *module, PyObject *args) PyObject *startobj = NULL; int whence = 0; - if (!PyArg_ParseTuple(args, - "O&i|OOi:lockf", + if (!PyArg_ParseTuple(args, "O&i|OOi:lockf", conv_descriptor, &fd, &code, &lenobj, &startobj, &whence)) goto exit; return_value = fcntl_lockf_impl(module, fd, code, lenobj, startobj, whence); @@ -186,4 +182,4 @@ fcntl_lockf(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=badaa968eb04410d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=92963b631d00f0fe input=a9049054013a1b77]*/ diff --git a/Modules/clinic/grpmodule.c.h b/Modules/clinic/grpmodule.c.h index 681830954b..eb5b59d29b 100644 --- a/Modules/clinic/grpmodule.c.h +++ b/Modules/clinic/grpmodule.c.h @@ -23,8 +23,7 @@ grp_getgrgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"id", NULL}; PyObject *id; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O:getgrgid", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:getgrgid", _keywords, &id)) goto exit; return_value = grp_getgrgid_impl(module, id); @@ -54,8 +53,7 @@ grp_getgrnam(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"name", NULL}; PyObject *name; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "U:getgrnam", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "U:getgrnam", _keywords, &name)) goto exit; return_value = grp_getgrnam_impl(module, name); @@ -84,4 +82,4 @@ grp_getgrall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) { return grp_getgrall_impl(module); } -/*[clinic end generated code: output=4709a6ba40bb8df9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5191c25600afb1bd input=a9049054013a1b77]*/ diff --git a/Modules/clinic/md5module.c.h b/Modules/clinic/md5module.c.h index 665c8317b1..f5a3117f10 100644 --- a/Modules/clinic/md5module.c.h +++ b/Modules/clinic/md5module.c.h @@ -84,8 +84,7 @@ _md5_md5(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"string", NULL}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:md5", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:md5", _keywords, &string)) goto exit; return_value = _md5_md5_impl(module, string); @@ -93,4 +92,4 @@ _md5_md5(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=f72618edfd35d984 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0f803ded701aca54 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index fc79f5715d..e305512596 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -42,8 +42,7 @@ os_stat(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|$O&p:stat", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&p:stat", _keywords, path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) goto exit; return_value = os_stat_impl(module, &path, dir_fd, follow_symlinks); @@ -78,8 +77,7 @@ os_lstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("lstat", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|$O&:lstat", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:lstat", _keywords, path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd)) goto exit; return_value = os_lstat_impl(module, &path, dir_fd); @@ -142,8 +140,7 @@ os_access(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&i|$O&pp:access", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&pp:access", _keywords, path_converter, &path, &mode, FACCESSAT_DIR_FD_CONVERTER, &dir_fd, &effective_ids, &follow_symlinks)) goto exit; _return_value = os_access_impl(module, &path, mode, dir_fd, effective_ids, follow_symlinks); @@ -182,9 +179,7 @@ os_ttyname(PyModuleDef *module, PyObject *arg) int fd; char *_return_value; - if (!PyArg_Parse(arg, - "i:ttyname", - &fd)) + if (!PyArg_Parse(arg, "i:ttyname", &fd)) goto exit; _return_value = os_ttyname_impl(module, fd); if (_return_value == NULL) @@ -242,8 +237,7 @@ os_chdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"path", NULL}; path_t path = PATH_T_INITIALIZE("chdir", "path", 0, PATH_HAVE_FCHDIR); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:chdir", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:chdir", _keywords, path_converter, &path)) goto exit; return_value = os_chdir_impl(module, &path); @@ -279,8 +273,7 @@ os_fchdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"fd", NULL}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:fchdir", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:fchdir", _keywords, fildes_converter, &fd)) goto exit; return_value = os_fchdir_impl(module, fd); @@ -334,8 +327,7 @@ os_chmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&i|$O&p:chmod", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&p:chmod", _keywords, path_converter, &path, &mode, FCHMODAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) goto exit; return_value = os_chmod_impl(module, &path, mode, dir_fd, follow_symlinks); @@ -371,8 +363,7 @@ os_fchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) int fd; int mode; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "ii:fchmod", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii:fchmod", _keywords, &fd, &mode)) goto exit; return_value = os_fchmod_impl(module, fd, mode); @@ -408,8 +399,7 @@ os_lchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("lchmod", "path", 0, 0); int mode; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&i:lchmod", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i:lchmod", _keywords, path_converter, &path, &mode)) goto exit; return_value = os_lchmod_impl(module, &path, mode); @@ -453,8 +443,7 @@ os_chflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) unsigned long flags; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&k|p:chflags", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&k|p:chflags", _keywords, path_converter, &path, &flags, &follow_symlinks)) goto exit; return_value = os_chflags_impl(module, &path, flags, follow_symlinks); @@ -493,8 +482,7 @@ os_lchflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("lchflags", "path", 0, 0); unsigned long flags; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&k:lchflags", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&k:lchflags", _keywords, path_converter, &path, &flags)) goto exit; return_value = os_lchflags_impl(module, &path, flags); @@ -529,8 +517,7 @@ os_chroot(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"path", NULL}; path_t path = PATH_T_INITIALIZE("chroot", "path", 0, 0); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:chroot", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:chroot", _keywords, path_converter, &path)) goto exit; return_value = os_chroot_impl(module, &path); @@ -565,8 +552,7 @@ os_fsync(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"fd", NULL}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:fsync", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:fsync", _keywords, fildes_converter, &fd)) goto exit; return_value = os_fsync_impl(module, fd); @@ -620,8 +606,7 @@ os_fdatasync(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"fd", NULL}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:fdatasync", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:fdatasync", _keywords, fildes_converter, &fd)) goto exit; return_value = os_fdatasync_impl(module, fd); @@ -682,8 +667,7 @@ os_chown(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&O&|$O&p:chown", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&|$O&p:chown", _keywords, path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid, FCHOWNAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) goto exit; return_value = os_chown_impl(module, &path, uid, gid, dir_fd, follow_symlinks); @@ -722,8 +706,7 @@ os_fchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) uid_t uid; gid_t gid; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "iO&O&:fchown", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iO&O&:fchown", _keywords, &fd, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) goto exit; return_value = os_fchown_impl(module, fd, uid, gid); @@ -760,8 +743,7 @@ os_lchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) uid_t uid; gid_t gid; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&O&:lchown", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&:lchown", _keywords, path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) goto exit; return_value = os_lchown_impl(module, &path, uid, gid); @@ -848,8 +830,7 @@ os_link(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dst_dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|$O&O&p:link", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$O&O&p:link", _keywords, path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd, &follow_symlinks)) goto exit; return_value = os_link_impl(module, &src, &dst, src_dir_fd, dst_dir_fd, follow_symlinks); @@ -895,8 +876,7 @@ os_listdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"path", NULL}; path_t path = PATH_T_INITIALIZE("listdir", "path", 1, PATH_HAVE_FDOPENDIR); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O&:listdir", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&:listdir", _keywords, path_converter, &path)) goto exit; return_value = os_listdir_impl(module, &path); @@ -928,9 +908,7 @@ os__getfinalpathname(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *path; - if (!PyArg_Parse(arg, - "U:_getfinalpathname", - &path)) + if (!PyArg_Parse(arg, "U:_getfinalpathname", &path)) goto exit; return_value = os__getfinalpathname_impl(module, path); @@ -961,8 +939,7 @@ os__getvolumepathname(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"path", NULL}; PyObject *path; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "U:_getvolumepathname", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "U:_getvolumepathname", _keywords, &path)) goto exit; return_value = os__getvolumepathname_impl(module, path); @@ -1001,8 +978,7 @@ os_mkdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) int mode = 511; int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|i$O&:mkdir", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i$O&:mkdir", _keywords, path_converter, &path, &mode, MKDIRAT_DIR_FD_CONVERTER, &dir_fd)) goto exit; return_value = os_mkdir_impl(module, &path, mode, dir_fd); @@ -1034,9 +1010,7 @@ os_nice(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int increment; - if (!PyArg_Parse(arg, - "i:nice", - &increment)) + if (!PyArg_Parse(arg, "i:nice", &increment)) goto exit; return_value = os_nice_impl(module, increment); @@ -1068,8 +1042,7 @@ os_getpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) int which; int who; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "ii:getpriority", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii:getpriority", _keywords, &which, &who)) goto exit; return_value = os_getpriority_impl(module, which, who); @@ -1103,8 +1076,7 @@ os_setpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) int who; int priority; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "iii:setpriority", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iii:setpriority", _keywords, &which, &who, &priority)) goto exit; return_value = os_setpriority_impl(module, which, who, priority); @@ -1144,8 +1116,7 @@ os_rename(PyModuleDef *module, PyObject *args, PyObject *kwargs) int src_dir_fd = DEFAULT_DIR_FD; int dst_dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|$O&O&:rename", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$O&O&:rename", _keywords, path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) goto exit; return_value = os_rename_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); @@ -1188,8 +1159,7 @@ os_replace(PyModuleDef *module, PyObject *args, PyObject *kwargs) int src_dir_fd = DEFAULT_DIR_FD; int dst_dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|$O&O&:replace", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$O&O&:replace", _keywords, path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) goto exit; return_value = os_replace_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); @@ -1228,8 +1198,7 @@ os_rmdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("rmdir", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|$O&:rmdir", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:rmdir", _keywords, path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) goto exit; return_value = os_rmdir_impl(module, &path, dir_fd); @@ -1263,8 +1232,7 @@ os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) Py_UNICODE *command; long _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "u:system", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "u:system", _keywords, &command)) goto exit; _return_value = os_system_impl(module, command); @@ -1300,8 +1268,7 @@ os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *command = NULL; long _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:system", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:system", _keywords, PyUnicode_FSConverter, &command)) goto exit; _return_value = os_system_impl(module, command); @@ -1336,9 +1303,7 @@ os_umask(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int mask; - if (!PyArg_Parse(arg, - "i:umask", - &mask)) + if (!PyArg_Parse(arg, "i:umask", &mask)) goto exit; return_value = os_umask_impl(module, mask); @@ -1371,8 +1336,7 @@ os_unlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("unlink", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|$O&:unlink", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:unlink", _keywords, path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) goto exit; return_value = os_unlink_impl(module, &path, dir_fd); @@ -1409,8 +1373,7 @@ os_remove(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("remove", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|$O&:remove", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:remove", _keywords, path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) goto exit; return_value = os_remove_impl(module, &path, dir_fd); @@ -1494,8 +1457,7 @@ os_utime(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|O$OO&p:utime", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|O$OO&p:utime", _keywords, path_converter, &path, ×, &ns, FUTIMENSAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) goto exit; return_value = os_utime_impl(module, &path, times, ns, dir_fd, follow_symlinks); @@ -1526,8 +1488,7 @@ os__exit(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"status", NULL}; int status; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:_exit", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:_exit", _keywords, &status)) goto exit; return_value = os__exit_impl(module, status); @@ -1562,8 +1523,7 @@ os_execv(PyModuleDef *module, PyObject *args) PyObject *path = NULL; PyObject *argv; - if (!PyArg_ParseTuple(args, - "O&O:execv", + if (!PyArg_ParseTuple(args, "O&O:execv", PyUnicode_FSConverter, &path, &argv)) goto exit; return_value = os_execv_impl(module, path, argv); @@ -1608,8 +1568,7 @@ os_execve(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *argv; PyObject *env; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&OO:execve", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&OO:execve", _keywords, path_converter, &path, &argv, &env)) goto exit; return_value = os_execve_impl(module, &path, argv, env); @@ -1652,8 +1611,7 @@ os_spawnv(PyModuleDef *module, PyObject *args) PyObject *path = NULL; PyObject *argv; - if (!PyArg_ParseTuple(args, - "iO&O:spawnv", + if (!PyArg_ParseTuple(args, "iO&O:spawnv", &mode, PyUnicode_FSConverter, &path, &argv)) goto exit; return_value = os_spawnv_impl(module, mode, path, argv); @@ -1700,8 +1658,7 @@ os_spawnve(PyModuleDef *module, PyObject *args) PyObject *argv; PyObject *env; - if (!PyArg_ParseTuple(args, - "iO&OO:spawnve", + if (!PyArg_ParseTuple(args, "iO&OO:spawnve", &mode, PyUnicode_FSConverter, &path, &argv, &env)) goto exit; return_value = os_spawnve_impl(module, mode, path, argv, env); @@ -1784,8 +1741,7 @@ os_sched_get_priority_max(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"policy", NULL}; int policy; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:sched_get_priority_max", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:sched_get_priority_max", _keywords, &policy)) goto exit; return_value = os_sched_get_priority_max_impl(module, policy); @@ -1817,8 +1773,7 @@ os_sched_get_priority_min(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"policy", NULL}; int policy; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:sched_get_priority_min", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:sched_get_priority_min", _keywords, &policy)) goto exit; return_value = os_sched_get_priority_min_impl(module, policy); @@ -1851,9 +1806,7 @@ os_sched_getscheduler(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; pid_t pid; - if (!PyArg_Parse(arg, - "" _Py_PARSE_PID ":sched_getscheduler", - &pid)) + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getscheduler", &pid)) goto exit; return_value = os_sched_getscheduler_impl(module, pid); @@ -1884,8 +1837,7 @@ os_sched_param(PyTypeObject *type, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"sched_priority", NULL}; PyObject *sched_priority; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O:sched_param", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:sched_param", _keywords, &sched_priority)) goto exit; return_value = os_sched_param_impl(type, sched_priority); @@ -1922,8 +1874,7 @@ os_sched_setscheduler(PyModuleDef *module, PyObject *args) int policy; struct sched_param param; - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "iO&:sched_setscheduler", + if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "iO&:sched_setscheduler", &pid, &policy, convert_sched_param, ¶m)) goto exit; return_value = os_sched_setscheduler_impl(module, pid, policy, ¶m); @@ -1957,9 +1908,7 @@ os_sched_getparam(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; pid_t pid; - if (!PyArg_Parse(arg, - "" _Py_PARSE_PID ":sched_getparam", - &pid)) + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getparam", &pid)) goto exit; return_value = os_sched_getparam_impl(module, pid); @@ -1994,8 +1943,7 @@ os_sched_setparam(PyModuleDef *module, PyObject *args) pid_t pid; struct sched_param param; - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "O&:sched_setparam", + if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "O&:sched_setparam", &pid, convert_sched_param, ¶m)) goto exit; return_value = os_sched_setparam_impl(module, pid, ¶m); @@ -2029,9 +1977,7 @@ os_sched_rr_get_interval(PyModuleDef *module, PyObject *arg) pid_t pid; double _return_value; - if (!PyArg_Parse(arg, - "" _Py_PARSE_PID ":sched_rr_get_interval", - &pid)) + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_rr_get_interval", &pid)) goto exit; _return_value = os_sched_rr_get_interval_impl(module, pid); if ((_return_value == -1.0) && PyErr_Occurred()) @@ -2089,8 +2035,7 @@ os_sched_setaffinity(PyModuleDef *module, PyObject *args) pid_t pid; PyObject *mask; - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "O:sched_setaffinity", + if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "O:sched_setaffinity", &pid, &mask)) goto exit; return_value = os_sched_setaffinity_impl(module, pid, mask); @@ -2123,9 +2068,7 @@ os_sched_getaffinity(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; pid_t pid; - if (!PyArg_Parse(arg, - "" _Py_PARSE_PID ":sched_getaffinity", - &pid)) + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getaffinity", &pid)) goto exit; return_value = os_sched_getaffinity_impl(module, pid); @@ -2314,8 +2257,7 @@ os_getpgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"pid", NULL}; pid_t pid; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "" _Py_PARSE_PID ":getpgid", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" _Py_PARSE_PID ":getpgid", _keywords, &pid)) goto exit; return_value = os_getpgid_impl(module, pid); @@ -2460,8 +2402,7 @@ os_kill(PyModuleDef *module, PyObject *args) pid_t pid; Py_ssize_t signal; - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "n:kill", + if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "n:kill", &pid, &signal)) goto exit; return_value = os_kill_impl(module, pid, signal); @@ -2493,8 +2434,7 @@ os_killpg(PyModuleDef *module, PyObject *args) pid_t pgid; int signal; - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "i:killpg", + if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "i:killpg", &pgid, &signal)) goto exit; return_value = os_killpg_impl(module, pgid, signal); @@ -2525,9 +2465,7 @@ os_plock(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int op; - if (!PyArg_Parse(arg, - "i:plock", - &op)) + if (!PyArg_Parse(arg, "i:plock", &op)) goto exit; return_value = os_plock_impl(module, op); @@ -2557,9 +2495,7 @@ os_setuid(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; uid_t uid; - if (!PyArg_Parse(arg, - "O&:setuid", - _Py_Uid_Converter, &uid)) + if (!PyArg_Parse(arg, "O&:setuid", _Py_Uid_Converter, &uid)) goto exit; return_value = os_setuid_impl(module, uid); @@ -2589,9 +2525,7 @@ os_seteuid(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; uid_t euid; - if (!PyArg_Parse(arg, - "O&:seteuid", - _Py_Uid_Converter, &euid)) + if (!PyArg_Parse(arg, "O&:seteuid", _Py_Uid_Converter, &euid)) goto exit; return_value = os_seteuid_impl(module, euid); @@ -2621,9 +2555,7 @@ os_setegid(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; gid_t egid; - if (!PyArg_Parse(arg, - "O&:setegid", - _Py_Gid_Converter, &egid)) + if (!PyArg_Parse(arg, "O&:setegid", _Py_Gid_Converter, &egid)) goto exit; return_value = os_setegid_impl(module, egid); @@ -2654,8 +2586,7 @@ os_setreuid(PyModuleDef *module, PyObject *args) uid_t ruid; uid_t euid; - if (!PyArg_ParseTuple(args, - "O&O&:setreuid", + if (!PyArg_ParseTuple(args, "O&O&:setreuid", _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid)) goto exit; return_value = os_setreuid_impl(module, ruid, euid); @@ -2687,8 +2618,7 @@ os_setregid(PyModuleDef *module, PyObject *args) gid_t rgid; gid_t egid; - if (!PyArg_ParseTuple(args, - "O&O&:setregid", + if (!PyArg_ParseTuple(args, "O&O&:setregid", _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid)) goto exit; return_value = os_setregid_impl(module, rgid, egid); @@ -2719,9 +2649,7 @@ os_setgid(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; gid_t gid; - if (!PyArg_Parse(arg, - "O&:setgid", - _Py_Gid_Converter, &gid)) + if (!PyArg_Parse(arg, "O&:setgid", _Py_Gid_Converter, &gid)) goto exit; return_value = os_setgid_impl(module, gid); @@ -2768,8 +2696,7 @@ os_wait3(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"options", NULL}; int options; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:wait3", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:wait3", _keywords, &options)) goto exit; return_value = os_wait3_impl(module, options); @@ -2805,8 +2732,7 @@ os_wait4(PyModuleDef *module, PyObject *args, PyObject *kwargs) pid_t pid; int options; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "" _Py_PARSE_PID "i:wait4", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" _Py_PARSE_PID "i:wait4", _keywords, &pid, &options)) goto exit; return_value = os_wait4_impl(module, pid, options); @@ -2850,8 +2776,7 @@ os_waitid(PyModuleDef *module, PyObject *args) id_t id; int options; - if (!PyArg_ParseTuple(args, - "i" _Py_PARSE_PID "i:waitid", + if (!PyArg_ParseTuple(args, "i" _Py_PARSE_PID "i:waitid", &idtype, &id, &options)) goto exit; return_value = os_waitid_impl(module, idtype, id, options); @@ -2888,8 +2813,7 @@ os_waitpid(PyModuleDef *module, PyObject *args) pid_t pid; int options; - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "i:waitpid", + if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "i:waitpid", &pid, &options)) goto exit; return_value = os_waitpid_impl(module, pid, options); @@ -2926,8 +2850,7 @@ os_waitpid(PyModuleDef *module, PyObject *args) Py_intptr_t pid; int options; - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_INTPTR "i:waitpid", + if (!PyArg_ParseTuple(args, "" _Py_PARSE_INTPTR "i:waitpid", &pid, &options)) goto exit; return_value = os_waitpid_impl(module, pid, options); @@ -2998,8 +2921,7 @@ os_symlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) int target_is_directory = 0; int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|p$O&:symlink", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|p$O&:symlink", _keywords, path_converter, &src, path_converter, &dst, &target_is_directory, SYMLINKAT_DIR_FD_CONVERTER, &dir_fd)) goto exit; return_value = os_symlink_impl(module, &src, &dst, target_is_directory, dir_fd); @@ -3061,9 +2983,7 @@ os_getsid(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; pid_t pid; - if (!PyArg_Parse(arg, - "" _Py_PARSE_PID ":getsid", - &pid)) + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":getsid", &pid)) goto exit; return_value = os_getsid_impl(module, pid); @@ -3116,8 +3036,7 @@ os_setpgid(PyModuleDef *module, PyObject *args) pid_t pid; pid_t pgrp; - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_PID "" _Py_PARSE_PID ":setpgid", + if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "" _Py_PARSE_PID ":setpgid", &pid, &pgrp)) goto exit; return_value = os_setpgid_impl(module, pid, pgrp); @@ -3148,9 +3067,7 @@ os_tcgetpgrp(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int fd; - if (!PyArg_Parse(arg, - "i:tcgetpgrp", - &fd)) + if (!PyArg_Parse(arg, "i:tcgetpgrp", &fd)) goto exit; return_value = os_tcgetpgrp_impl(module, fd); @@ -3181,8 +3098,7 @@ os_tcsetpgrp(PyModuleDef *module, PyObject *args) int fd; pid_t pgid; - if (!PyArg_ParseTuple(args, - "i" _Py_PARSE_PID ":tcsetpgrp", + if (!PyArg_ParseTuple(args, "i" _Py_PARSE_PID ":tcsetpgrp", &fd, &pgid)) goto exit; return_value = os_tcsetpgrp_impl(module, fd, pgid); @@ -3222,8 +3138,7 @@ os_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&i|i$O&:open", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|i$O&:open", _keywords, path_converter, &path, &flags, &mode, OPENAT_DIR_FD_CONVERTER, &dir_fd)) goto exit; _return_value = os_open_impl(module, &path, flags, mode, dir_fd); @@ -3257,8 +3172,7 @@ os_close(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"fd", NULL}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:close", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:close", _keywords, &fd)) goto exit; return_value = os_close_impl(module, fd); @@ -3286,8 +3200,7 @@ os_closerange(PyModuleDef *module, PyObject *args) int fd_low; int fd_high; - if (!PyArg_ParseTuple(args, - "ii:closerange", + if (!PyArg_ParseTuple(args, "ii:closerange", &fd_low, &fd_high)) goto exit; return_value = os_closerange_impl(module, fd_low, fd_high); @@ -3315,9 +3228,7 @@ os_dup(PyModuleDef *module, PyObject *arg) int fd; int _return_value; - if (!PyArg_Parse(arg, - "i:dup", - &fd)) + if (!PyArg_Parse(arg, "i:dup", &fd)) goto exit; _return_value = os_dup_impl(module, fd); if ((_return_value == -1) && PyErr_Occurred()) @@ -3349,8 +3260,7 @@ os_dup2(PyModuleDef *module, PyObject *args, PyObject *kwargs) int fd2; int inheritable = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "ii|p:dup2", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii|p:dup2", _keywords, &fd, &fd2, &inheritable)) goto exit; return_value = os_dup2_impl(module, fd, fd2, inheritable); @@ -3388,8 +3298,7 @@ os_lockf(PyModuleDef *module, PyObject *args) int command; Py_off_t length; - if (!PyArg_ParseTuple(args, - "iiO&:lockf", + if (!PyArg_ParseTuple(args, "iiO&:lockf", &fd, &command, Py_off_t_converter, &length)) goto exit; return_value = os_lockf_impl(module, fd, command, length); @@ -3424,8 +3333,7 @@ os_lseek(PyModuleDef *module, PyObject *args) int how; Py_off_t _return_value; - if (!PyArg_ParseTuple(args, - "iO&i:lseek", + if (!PyArg_ParseTuple(args, "iO&i:lseek", &fd, Py_off_t_converter, &position, &how)) goto exit; _return_value = os_lseek_impl(module, fd, position, how); @@ -3456,8 +3364,7 @@ os_read(PyModuleDef *module, PyObject *args) int fd; Py_ssize_t length; - if (!PyArg_ParseTuple(args, - "in:read", + if (!PyArg_ParseTuple(args, "in:read", &fd, &length)) goto exit; return_value = os_read_impl(module, fd, length); @@ -3496,8 +3403,7 @@ os_readv(PyModuleDef *module, PyObject *args) PyObject *buffers; Py_ssize_t _return_value; - if (!PyArg_ParseTuple(args, - "iO:readv", + if (!PyArg_ParseTuple(args, "iO:readv", &fd, &buffers)) goto exit; _return_value = os_readv_impl(module, fd, buffers); @@ -3536,8 +3442,7 @@ os_pread(PyModuleDef *module, PyObject *args) int length; Py_off_t offset; - if (!PyArg_ParseTuple(args, - "iiO&:pread", + if (!PyArg_ParseTuple(args, "iiO&:pread", &fd, &length, Py_off_t_converter, &offset)) goto exit; return_value = os_pread_impl(module, fd, length, offset); @@ -3568,8 +3473,7 @@ os_write(PyModuleDef *module, PyObject *args) Py_buffer data = {NULL, NULL}; Py_ssize_t _return_value; - if (!PyArg_ParseTuple(args, - "iy*:write", + if (!PyArg_ParseTuple(args, "iy*:write", &fd, &data)) goto exit; _return_value = os_write_impl(module, fd, &data); @@ -3607,8 +3511,7 @@ os_fstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"fd", NULL}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:fstat", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:fstat", _keywords, &fd)) goto exit; return_value = os_fstat_impl(module, fd); @@ -3639,9 +3542,7 @@ os_isatty(PyModuleDef *module, PyObject *arg) int fd; int _return_value; - if (!PyArg_Parse(arg, - "i:isatty", - &fd)) + if (!PyArg_Parse(arg, "i:isatty", &fd)) goto exit; _return_value = os_isatty_impl(module, fd); if ((_return_value == -1) && PyErr_Occurred()) @@ -3703,9 +3604,7 @@ os_pipe2(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int flags; - if (!PyArg_Parse(arg, - "i:pipe2", - &flags)) + if (!PyArg_Parse(arg, "i:pipe2", &flags)) goto exit; return_value = os_pipe2_impl(module, flags); @@ -3740,8 +3639,7 @@ os_writev(PyModuleDef *module, PyObject *args) PyObject *buffers; Py_ssize_t _return_value; - if (!PyArg_ParseTuple(args, - "iO:writev", + if (!PyArg_ParseTuple(args, "iO:writev", &fd, &buffers)) goto exit; _return_value = os_writev_impl(module, fd, buffers); @@ -3783,8 +3681,7 @@ os_pwrite(PyModuleDef *module, PyObject *args) Py_off_t offset; Py_ssize_t _return_value; - if (!PyArg_ParseTuple(args, - "iy*O&:pwrite", + if (!PyArg_ParseTuple(args, "iy*O&:pwrite", &fd, &buffer, Py_off_t_converter, &offset)) goto exit; _return_value = os_pwrite_impl(module, fd, &buffer, offset); @@ -3830,8 +3727,7 @@ os_mkfifo(PyModuleDef *module, PyObject *args, PyObject *kwargs) int mode = 438; int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|i$O&:mkfifo", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i$O&:mkfifo", _keywords, path_converter, &path, &mode, MKFIFOAT_DIR_FD_CONVERTER, &dir_fd)) goto exit; return_value = os_mkfifo_impl(module, &path, mode, dir_fd); @@ -3882,8 +3778,7 @@ os_mknod(PyModuleDef *module, PyObject *args, PyObject *kwargs) dev_t device = 0; int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&|iO&$O&:mknod", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|iO&$O&:mknod", _keywords, path_converter, &path, &mode, _Py_Dev_Converter, &device, MKNODAT_DIR_FD_CONVERTER, &dir_fd)) goto exit; return_value = os_mknod_impl(module, &path, mode, device, dir_fd); @@ -3918,9 +3813,7 @@ os_major(PyModuleDef *module, PyObject *arg) dev_t device; unsigned int _return_value; - if (!PyArg_Parse(arg, - "O&:major", - _Py_Dev_Converter, &device)) + if (!PyArg_Parse(arg, "O&:major", _Py_Dev_Converter, &device)) goto exit; _return_value = os_major_impl(module, device); if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) @@ -3954,9 +3847,7 @@ os_minor(PyModuleDef *module, PyObject *arg) dev_t device; unsigned int _return_value; - if (!PyArg_Parse(arg, - "O&:minor", - _Py_Dev_Converter, &device)) + if (!PyArg_Parse(arg, "O&:minor", _Py_Dev_Converter, &device)) goto exit; _return_value = os_minor_impl(module, device); if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) @@ -3991,8 +3882,7 @@ os_makedev(PyModuleDef *module, PyObject *args) int minor; dev_t _return_value; - if (!PyArg_ParseTuple(args, - "ii:makedev", + if (!PyArg_ParseTuple(args, "ii:makedev", &major, &minor)) goto exit; _return_value = os_makedev_impl(module, major, minor); @@ -4027,8 +3917,7 @@ os_ftruncate(PyModuleDef *module, PyObject *args) int fd; Py_off_t length; - if (!PyArg_ParseTuple(args, - "iO&:ftruncate", + if (!PyArg_ParseTuple(args, "iO&:ftruncate", &fd, Py_off_t_converter, &length)) goto exit; return_value = os_ftruncate_impl(module, fd, length); @@ -4064,8 +3953,7 @@ os_truncate(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("truncate", "path", 0, PATH_HAVE_FTRUNCATE); Py_off_t length; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&:truncate", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&:truncate", _keywords, path_converter, &path, Py_off_t_converter, &length)) goto exit; return_value = os_truncate_impl(module, &path, length); @@ -4105,8 +3993,7 @@ os_posix_fallocate(PyModuleDef *module, PyObject *args) Py_off_t offset; Py_off_t length; - if (!PyArg_ParseTuple(args, - "iO&O&:posix_fallocate", + if (!PyArg_ParseTuple(args, "iO&O&:posix_fallocate", &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length)) goto exit; return_value = os_posix_fallocate_impl(module, fd, offset, length); @@ -4149,8 +4036,7 @@ os_posix_fadvise(PyModuleDef *module, PyObject *args) Py_off_t length; int advice; - if (!PyArg_ParseTuple(args, - "iO&O&i:posix_fadvise", + if (!PyArg_ParseTuple(args, "iO&O&i:posix_fadvise", &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length, &advice)) goto exit; return_value = os_posix_fadvise_impl(module, fd, offset, length, advice); @@ -4182,8 +4068,7 @@ os_putenv(PyModuleDef *module, PyObject *args) PyObject *name; PyObject *value; - if (!PyArg_ParseTuple(args, - "UU:putenv", + if (!PyArg_ParseTuple(args, "UU:putenv", &name, &value)) goto exit; return_value = os_putenv_impl(module, name, value); @@ -4215,8 +4100,7 @@ os_putenv(PyModuleDef *module, PyObject *args) PyObject *name = NULL; PyObject *value = NULL; - if (!PyArg_ParseTuple(args, - "O&O&:putenv", + if (!PyArg_ParseTuple(args, "O&O&:putenv", PyUnicode_FSConverter, &name, PyUnicode_FSConverter, &value)) goto exit; return_value = os_putenv_impl(module, name, value); @@ -4252,9 +4136,7 @@ os_unsetenv(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name = NULL; - if (!PyArg_Parse(arg, - "O&:unsetenv", - PyUnicode_FSConverter, &name)) + if (!PyArg_Parse(arg, "O&:unsetenv", PyUnicode_FSConverter, &name)) goto exit; return_value = os_unsetenv_impl(module, name); @@ -4285,9 +4167,7 @@ os_strerror(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int code; - if (!PyArg_Parse(arg, - "i:strerror", - &code)) + if (!PyArg_Parse(arg, "i:strerror", &code)) goto exit; return_value = os_strerror_impl(module, code); @@ -4316,9 +4196,7 @@ os_WCOREDUMP(PyModuleDef *module, PyObject *arg) int status; int _return_value; - if (!PyArg_Parse(arg, - "i:WCOREDUMP", - &status)) + if (!PyArg_Parse(arg, "i:WCOREDUMP", &status)) goto exit; _return_value = os_WCOREDUMP_impl(module, status); if ((_return_value == -1) && PyErr_Occurred()) @@ -4356,8 +4234,7 @@ os_WIFCONTINUED(PyModuleDef *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WIFCONTINUED", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFCONTINUED", _keywords, &status)) goto exit; _return_value = os_WIFCONTINUED_impl(module, status); @@ -4393,8 +4270,7 @@ os_WIFSTOPPED(PyModuleDef *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WIFSTOPPED", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFSTOPPED", _keywords, &status)) goto exit; _return_value = os_WIFSTOPPED_impl(module, status); @@ -4430,8 +4306,7 @@ os_WIFSIGNALED(PyModuleDef *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WIFSIGNALED", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFSIGNALED", _keywords, &status)) goto exit; _return_value = os_WIFSIGNALED_impl(module, status); @@ -4467,8 +4342,7 @@ os_WIFEXITED(PyModuleDef *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WIFEXITED", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFEXITED", _keywords, &status)) goto exit; _return_value = os_WIFEXITED_impl(module, status); @@ -4504,8 +4378,7 @@ os_WEXITSTATUS(PyModuleDef *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WEXITSTATUS", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WEXITSTATUS", _keywords, &status)) goto exit; _return_value = os_WEXITSTATUS_impl(module, status); @@ -4541,8 +4414,7 @@ os_WTERMSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WTERMSIG", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WTERMSIG", _keywords, &status)) goto exit; _return_value = os_WTERMSIG_impl(module, status); @@ -4578,8 +4450,7 @@ os_WSTOPSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:WSTOPSIG", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WSTOPSIG", _keywords, &status)) goto exit; _return_value = os_WSTOPSIG_impl(module, status); @@ -4615,9 +4486,7 @@ os_fstatvfs(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int fd; - if (!PyArg_Parse(arg, - "i:fstatvfs", - &fd)) + if (!PyArg_Parse(arg, "i:fstatvfs", &fd)) goto exit; return_value = os_fstatvfs_impl(module, fd); @@ -4652,8 +4521,7 @@ os_statvfs(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"path", NULL}; path_t path = PATH_T_INITIALIZE("statvfs", "path", 0, PATH_HAVE_FSTATVFS); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&:statvfs", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:statvfs", _keywords, path_converter, &path)) goto exit; return_value = os_statvfs_impl(module, &path); @@ -4688,8 +4556,7 @@ os__getdiskusage(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"path", NULL}; Py_UNICODE *path; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "u:_getdiskusage", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "u:_getdiskusage", _keywords, &path)) goto exit; return_value = os__getdiskusage_impl(module, path); @@ -4724,8 +4591,7 @@ os_fpathconf(PyModuleDef *module, PyObject *args) int name; long _return_value; - if (!PyArg_ParseTuple(args, - "iO&:fpathconf", + if (!PyArg_ParseTuple(args, "iO&:fpathconf", &fd, conv_path_confname, &name)) goto exit; _return_value = os_fpathconf_impl(module, fd, name); @@ -4766,8 +4632,7 @@ os_pathconf(PyModuleDef *module, PyObject *args, PyObject *kwargs) int name; long _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&:pathconf", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&:pathconf", _keywords, path_converter, &path, conv_path_confname, &name)) goto exit; _return_value = os_pathconf_impl(module, &path, name); @@ -4804,9 +4669,7 @@ os_confstr(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int name; - if (!PyArg_Parse(arg, - "O&:confstr", - conv_confstr_confname, &name)) + if (!PyArg_Parse(arg, "O&:confstr", conv_confstr_confname, &name)) goto exit; return_value = os_confstr_impl(module, name); @@ -4837,9 +4700,7 @@ os_sysconf(PyModuleDef *module, PyObject *arg) int name; long _return_value; - if (!PyArg_Parse(arg, - "O&:sysconf", - conv_sysconf_confname, &name)) + if (!PyArg_Parse(arg, "O&:sysconf", conv_sysconf_confname, &name)) goto exit; _return_value = os_sysconf_impl(module, name); if ((_return_value == -1) && PyErr_Occurred()) @@ -4921,8 +4782,7 @@ os_device_encoding(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"fd", NULL}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i:device_encoding", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:device_encoding", _keywords, &fd)) goto exit; return_value = os_device_encoding_impl(module, fd); @@ -4953,8 +4813,7 @@ os_setresuid(PyModuleDef *module, PyObject *args) uid_t euid; uid_t suid; - if (!PyArg_ParseTuple(args, - "O&O&O&:setresuid", + if (!PyArg_ParseTuple(args, "O&O&O&:setresuid", _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid, _Py_Uid_Converter, &suid)) goto exit; return_value = os_setresuid_impl(module, ruid, euid, suid); @@ -4987,8 +4846,7 @@ os_setresgid(PyModuleDef *module, PyObject *args) gid_t egid; gid_t sgid; - if (!PyArg_ParseTuple(args, - "O&O&O&:setresgid", + if (!PyArg_ParseTuple(args, "O&O&O&:setresgid", _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid, _Py_Gid_Converter, &sgid)) goto exit; return_value = os_setresgid_impl(module, rgid, egid, sgid); @@ -5072,8 +4930,7 @@ os_getxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t attribute = PATH_T_INITIALIZE("getxattr", "attribute", 0, 0); int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|$p:getxattr", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$p:getxattr", _keywords, path_converter, &path, path_converter, &attribute, &follow_symlinks)) goto exit; return_value = os_getxattr_impl(module, &path, &attribute, follow_symlinks); @@ -5121,8 +4978,7 @@ os_setxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) int flags = 0; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&y*|i$p:setxattr", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&y*|i$p:setxattr", _keywords, path_converter, &path, path_converter, &attribute, &value, &flags, &follow_symlinks)) goto exit; return_value = os_setxattr_impl(module, &path, &attribute, &value, flags, follow_symlinks); @@ -5170,8 +5026,7 @@ os_removexattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t attribute = PATH_T_INITIALIZE("removexattr", "attribute", 0, 0); int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "O&O&|$p:removexattr", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$p:removexattr", _keywords, path_converter, &path, path_converter, &attribute, &follow_symlinks)) goto exit; return_value = os_removexattr_impl(module, &path, &attribute, follow_symlinks); @@ -5215,8 +5070,7 @@ os_listxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("listxattr", "path", 1, 1); int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O&$p:listxattr", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&$p:listxattr", _keywords, path_converter, &path, &follow_symlinks)) goto exit; return_value = os_listxattr_impl(module, &path, follow_symlinks); @@ -5248,9 +5102,7 @@ os_urandom(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_ssize_t size; - if (!PyArg_Parse(arg, - "n:urandom", - &size)) + if (!PyArg_Parse(arg, "n:urandom", &size)) goto exit; return_value = os_urandom_impl(module, size); @@ -5295,9 +5147,7 @@ os_get_inheritable(PyModuleDef *module, PyObject *arg) int fd; int _return_value; - if (!PyArg_Parse(arg, - "i:get_inheritable", - &fd)) + if (!PyArg_Parse(arg, "i:get_inheritable", &fd)) goto exit; _return_value = os_get_inheritable_impl(module, fd); if ((_return_value == -1) && PyErr_Occurred()) @@ -5327,8 +5177,7 @@ os_set_inheritable(PyModuleDef *module, PyObject *args) int fd; int inheritable; - if (!PyArg_ParseTuple(args, - "ii:set_inheritable", + if (!PyArg_ParseTuple(args, "ii:set_inheritable", &fd, &inheritable)) goto exit; return_value = os_set_inheritable_impl(module, fd, inheritable); @@ -5358,9 +5207,7 @@ os_get_handle_inheritable(PyModuleDef *module, PyObject *arg) Py_intptr_t handle; int _return_value; - if (!PyArg_Parse(arg, - "" _Py_PARSE_INTPTR ":get_handle_inheritable", - &handle)) + if (!PyArg_Parse(arg, "" _Py_PARSE_INTPTR ":get_handle_inheritable", &handle)) goto exit; _return_value = os_get_handle_inheritable_impl(module, handle); if ((_return_value == -1) && PyErr_Occurred()) @@ -5395,8 +5242,7 @@ os_set_handle_inheritable(PyModuleDef *module, PyObject *args) Py_intptr_t handle; int inheritable; - if (!PyArg_ParseTuple(args, - "" _Py_PARSE_INTPTR "p:set_handle_inheritable", + if (!PyArg_ParseTuple(args, "" _Py_PARSE_INTPTR "p:set_handle_inheritable", &handle, &inheritable)) goto exit; return_value = os_set_handle_inheritable_impl(module, handle, inheritable); @@ -5870,4 +5716,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=0e3fb3bb5df25fea input=a9049054013a1b77]*/ +/*[clinic end generated code: output=bba73c13a01c09a0 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pwdmodule.c.h b/Modules/clinic/pwdmodule.c.h index ffe7c1c282..9de2e4ff2a 100644 --- a/Modules/clinic/pwdmodule.c.h +++ b/Modules/clinic/pwdmodule.c.h @@ -33,9 +33,7 @@ pwd_getpwnam(PyModuleDef *module, PyObject *arg_) PyObject *return_value = NULL; PyObject *arg; - if (!PyArg_Parse(arg_, - "U:getpwnam", - &arg)) + if (!PyArg_Parse(arg_, "U:getpwnam", &arg)) goto exit; return_value = pwd_getpwnam_impl(module, arg); @@ -70,4 +68,4 @@ pwd_getpwall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) #ifndef PWD_GETPWALL_METHODDEF #define PWD_GETPWALL_METHODDEF #endif /* !defined(PWD_GETPWALL_METHODDEF) */ -/*[clinic end generated code: output=e7d5ac24b20e91ae input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2ed0ecf34fd3f98f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h index ba5c380ff0..72861bec3d 100644 --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -24,8 +24,7 @@ pyexpat_xmlparser_Parse(xmlparseobject *self, PyObject *args) PyObject *data; int isFinal = 0; - if (!PyArg_ParseTuple(args, - "O|i:Parse", + if (!PyArg_ParseTuple(args, "O|i:Parse", &data, &isFinal)) goto exit; return_value = pyexpat_xmlparser_Parse_impl(self, data, isFinal); @@ -61,9 +60,7 @@ pyexpat_xmlparser_SetBase(xmlparseobject *self, PyObject *arg) PyObject *return_value = NULL; const char *base; - if (!PyArg_Parse(arg, - "s:SetBase", - &base)) + if (!PyArg_Parse(arg, "s:SetBase", &base)) goto exit; return_value = pyexpat_xmlparser_SetBase_impl(self, base); @@ -131,8 +128,7 @@ pyexpat_xmlparser_ExternalEntityParserCreate(xmlparseobject *self, PyObject *arg const char *context; const char *encoding = NULL; - if (!PyArg_ParseTuple(args, - "z|s:ExternalEntityParserCreate", + if (!PyArg_ParseTuple(args, "z|s:ExternalEntityParserCreate", &context, &encoding)) goto exit; return_value = pyexpat_xmlparser_ExternalEntityParserCreate_impl(self, context, encoding); @@ -164,9 +160,7 @@ pyexpat_xmlparser_SetParamEntityParsing(xmlparseobject *self, PyObject *arg) PyObject *return_value = NULL; int flag; - if (!PyArg_Parse(arg, - "i:SetParamEntityParsing", - &flag)) + if (!PyArg_Parse(arg, "i:SetParamEntityParsing", &flag)) goto exit; return_value = pyexpat_xmlparser_SetParamEntityParsing_impl(self, flag); @@ -198,8 +192,7 @@ pyexpat_xmlparser_UseForeignDTD(xmlparseobject *self, PyObject *args) PyObject *return_value = NULL; int flag = 1; - if (!PyArg_ParseTuple(args, - "|p:UseForeignDTD", + if (!PyArg_ParseTuple(args, "|p:UseForeignDTD", &flag)) goto exit; return_value = pyexpat_xmlparser_UseForeignDTD_impl(self, flag); @@ -250,8 +243,7 @@ pyexpat_ParserCreate(PyModuleDef *module, PyObject *args, PyObject *kwargs) const char *namespace_separator = NULL; PyObject *intern = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|zzO:ParserCreate", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|zzO:ParserCreate", _keywords, &encoding, &namespace_separator, &intern)) goto exit; return_value = pyexpat_ParserCreate_impl(module, encoding, namespace_separator, intern); @@ -278,9 +270,7 @@ pyexpat_ErrorString(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; long code; - if (!PyArg_Parse(arg, - "l:ErrorString", - &code)) + if (!PyArg_Parse(arg, "l:ErrorString", &code)) goto exit; return_value = pyexpat_ErrorString_impl(module, code); @@ -291,4 +281,4 @@ exit: #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=abdf05a21dae98c7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=958c0faa1b855fc7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha1module.c.h b/Modules/clinic/sha1module.c.h index 1b50633962..fa865baec8 100644 --- a/Modules/clinic/sha1module.c.h +++ b/Modules/clinic/sha1module.c.h @@ -84,8 +84,7 @@ _sha1_sha1(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"string", NULL}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:sha1", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha1", _keywords, &string)) goto exit; return_value = _sha1_sha1_impl(module, string); @@ -93,4 +92,4 @@ _sha1_sha1(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=b2890b9ca964b217 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=be19102f3120490a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha256module.c.h b/Modules/clinic/sha256module.c.h index cd7c3e3938..c5fe188a9c 100644 --- a/Modules/clinic/sha256module.c.h +++ b/Modules/clinic/sha256module.c.h @@ -84,8 +84,7 @@ _sha256_sha256(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"string", NULL}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:sha256", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha256", _keywords, &string)) goto exit; return_value = _sha256_sha256_impl(module, string); @@ -113,8 +112,7 @@ _sha256_sha224(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"string", NULL}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:sha224", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha224", _keywords, &string)) goto exit; return_value = _sha256_sha224_impl(module, string); @@ -122,4 +120,4 @@ _sha256_sha224(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=8a0520371b097358 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=354cedf3b632c7b2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha512module.c.h b/Modules/clinic/sha512module.c.h index 7991eff653..c308739d44 100644 --- a/Modules/clinic/sha512module.c.h +++ b/Modules/clinic/sha512module.c.h @@ -102,8 +102,7 @@ _sha512_sha512(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"string", NULL}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:sha512", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha512", _keywords, &string)) goto exit; return_value = _sha512_sha512_impl(module, string); @@ -135,8 +134,7 @@ _sha512_sha384(PyModuleDef *module, PyObject *args, PyObject *kwargs) static char *_keywords[] = {"string", NULL}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|O:sha384", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha384", _keywords, &string)) goto exit; return_value = _sha512_sha384_impl(module, string); @@ -170,4 +168,4 @@ exit: #ifndef _SHA512_SHA384_METHODDEF #define _SHA512_SHA384_METHODDEF #endif /* !defined(_SHA512_SHA384_METHODDEF) */ -/*[clinic end generated code: output=de7bda19fde49310 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1c7d385731fee7c0 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/spwdmodule.c.h b/Modules/clinic/spwdmodule.c.h index e1dde77893..c0d18db589 100644 --- a/Modules/clinic/spwdmodule.c.h +++ b/Modules/clinic/spwdmodule.c.h @@ -24,9 +24,7 @@ spwd_getspnam(PyModuleDef *module, PyObject *arg_) PyObject *return_value = NULL; PyObject *arg; - if (!PyArg_Parse(arg_, - "U:getspnam", - &arg)) + if (!PyArg_Parse(arg_, "U:getspnam", &arg)) goto exit; return_value = spwd_getspnam_impl(module, arg); @@ -67,4 +65,4 @@ spwd_getspall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) #ifndef SPWD_GETSPALL_METHODDEF #define SPWD_GETSPALL_METHODDEF #endif /* !defined(SPWD_GETSPALL_METHODDEF) */ -/*[clinic end generated code: output=67a4f8c47008f28f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6c178830413f7763 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/unicodedata.c.h b/Modules/clinic/unicodedata.c.h index 13e6bf9fce..d520c1e3dd 100644 --- a/Modules/clinic/unicodedata.c.h +++ b/Modules/clinic/unicodedata.c.h @@ -26,8 +26,7 @@ unicodedata_UCD_decimal(PyObject *self, PyObject *args) int chr; PyObject *default_value = NULL; - if (!PyArg_ParseTuple(args, - "C|O:decimal", + if (!PyArg_ParseTuple(args, "C|O:decimal", &chr, &default_value)) goto exit; return_value = unicodedata_UCD_decimal_impl(self, chr, default_value); @@ -59,8 +58,7 @@ unicodedata_UCD_digit(PyObject *self, PyObject *args) int chr; PyObject *default_value = NULL; - if (!PyArg_ParseTuple(args, - "C|O:digit", + if (!PyArg_ParseTuple(args, "C|O:digit", &chr, &default_value)) goto exit; return_value = unicodedata_UCD_digit_impl(self, chr, default_value); @@ -93,8 +91,7 @@ unicodedata_UCD_numeric(PyObject *self, PyObject *args) int chr; PyObject *default_value = NULL; - if (!PyArg_ParseTuple(args, - "C|O:numeric", + if (!PyArg_ParseTuple(args, "C|O:numeric", &chr, &default_value)) goto exit; return_value = unicodedata_UCD_numeric_impl(self, chr, default_value); @@ -121,9 +118,7 @@ unicodedata_UCD_category(PyObject *self, PyObject *arg) PyObject *return_value = NULL; int chr; - if (!PyArg_Parse(arg, - "C:category", - &chr)) + if (!PyArg_Parse(arg, "C:category", &chr)) goto exit; return_value = unicodedata_UCD_category_impl(self, chr); @@ -151,9 +146,7 @@ unicodedata_UCD_bidirectional(PyObject *self, PyObject *arg) PyObject *return_value = NULL; int chr; - if (!PyArg_Parse(arg, - "C:bidirectional", - &chr)) + if (!PyArg_Parse(arg, "C:bidirectional", &chr)) goto exit; return_value = unicodedata_UCD_bidirectional_impl(self, chr); @@ -182,9 +175,7 @@ unicodedata_UCD_combining(PyObject *self, PyObject *arg) int chr; int _return_value; - if (!PyArg_Parse(arg, - "C:combining", - &chr)) + if (!PyArg_Parse(arg, "C:combining", &chr)) goto exit; _return_value = unicodedata_UCD_combining_impl(self, chr); if ((_return_value == -1) && PyErr_Occurred()) @@ -217,9 +208,7 @@ unicodedata_UCD_mirrored(PyObject *self, PyObject *arg) int chr; int _return_value; - if (!PyArg_Parse(arg, - "C:mirrored", - &chr)) + if (!PyArg_Parse(arg, "C:mirrored", &chr)) goto exit; _return_value = unicodedata_UCD_mirrored_impl(self, chr); if ((_return_value == -1) && PyErr_Occurred()) @@ -248,9 +237,7 @@ unicodedata_UCD_east_asian_width(PyObject *self, PyObject *arg) PyObject *return_value = NULL; int chr; - if (!PyArg_Parse(arg, - "C:east_asian_width", - &chr)) + if (!PyArg_Parse(arg, "C:east_asian_width", &chr)) goto exit; return_value = unicodedata_UCD_east_asian_width_impl(self, chr); @@ -278,9 +265,7 @@ unicodedata_UCD_decomposition(PyObject *self, PyObject *arg) PyObject *return_value = NULL; int chr; - if (!PyArg_Parse(arg, - "C:decomposition", - &chr)) + if (!PyArg_Parse(arg, "C:decomposition", &chr)) goto exit; return_value = unicodedata_UCD_decomposition_impl(self, chr); @@ -310,8 +295,7 @@ unicodedata_UCD_normalize(PyObject *self, PyObject *args) const char *form; PyObject *input; - if (!PyArg_ParseTuple(args, - "sO!:normalize", + if (!PyArg_ParseTuple(args, "sO!:normalize", &form, &PyUnicode_Type, &input)) goto exit; return_value = unicodedata_UCD_normalize_impl(self, form, input); @@ -342,8 +326,7 @@ unicodedata_UCD_name(PyObject *self, PyObject *args) int chr; PyObject *default_value = NULL; - if (!PyArg_ParseTuple(args, - "C|O:name", + if (!PyArg_ParseTuple(args, "C|O:name", &chr, &default_value)) goto exit; return_value = unicodedata_UCD_name_impl(self, chr, default_value); @@ -375,13 +358,11 @@ unicodedata_UCD_lookup(PyObject *self, PyObject *arg) const char *name; Py_ssize_clean_t name_length; - if (!PyArg_Parse(arg, - "s#:lookup", - &name, &name_length)) + if (!PyArg_Parse(arg, "s#:lookup", &name, &name_length)) goto exit; return_value = unicodedata_UCD_lookup_impl(self, name, name_length); exit: return return_value; } -/*[clinic end generated code: output=1f04e31ae703ffed input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4f8da33c6bc6efc9 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index 61bcdc42f0..35661a5a46 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -26,8 +26,7 @@ zlib_compress(PyModuleDef *module, PyObject *args) Py_buffer bytes = {NULL, NULL}; int level = Z_DEFAULT_COMPRESSION; - if (!PyArg_ParseTuple(args, - "y*|i:compress", + if (!PyArg_ParseTuple(args, "y*|i:compress", &bytes, &level)) goto exit; return_value = zlib_compress_impl(module, &bytes, level); @@ -68,8 +67,7 @@ zlib_decompress(PyModuleDef *module, PyObject *args) int wbits = MAX_WBITS; unsigned int bufsize = DEF_BUF_SIZE; - if (!PyArg_ParseTuple(args, - "y*|iO&:decompress", + if (!PyArg_ParseTuple(args, "y*|iO&:decompress", &data, &wbits, uint_converter, &bufsize)) goto exit; return_value = zlib_decompress_impl(module, &data, wbits, bufsize); @@ -127,8 +125,7 @@ zlib_compressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) int strategy = Z_DEFAULT_STRATEGY; Py_buffer zdict = {NULL, NULL}; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|iiiiiy*:compressobj", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iiiiiy*:compressobj", _keywords, &level, &method, &wbits, &memLevel, &strategy, &zdict)) goto exit; return_value = zlib_compressobj_impl(module, level, method, wbits, memLevel, strategy, &zdict); @@ -167,8 +164,7 @@ zlib_decompressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) int wbits = MAX_WBITS; PyObject *zdict = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|iO:decompressobj", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iO:decompressobj", _keywords, &wbits, &zdict)) goto exit; return_value = zlib_decompressobj_impl(module, wbits, zdict); @@ -202,9 +198,7 @@ zlib_Compress_compress(compobject *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, - "y*:compress", - &data)) + if (!PyArg_Parse(arg, "y*:compress", &data)) goto exit; return_value = zlib_Compress_compress_impl(self, &data); @@ -247,8 +241,7 @@ zlib_Decompress_decompress(compobject *self, PyObject *args) Py_buffer data = {NULL, NULL}; unsigned int max_length = 0; - if (!PyArg_ParseTuple(args, - "y*|O&:decompress", + if (!PyArg_ParseTuple(args, "y*|O&:decompress", &data, uint_converter, &max_length)) goto exit; return_value = zlib_Decompress_decompress_impl(self, &data, max_length); @@ -285,8 +278,7 @@ zlib_Compress_flush(compobject *self, PyObject *args) PyObject *return_value = NULL; int mode = Z_FINISH; - if (!PyArg_ParseTuple(args, - "|i:flush", + if (!PyArg_ParseTuple(args, "|i:flush", &mode)) goto exit; return_value = zlib_Compress_flush_impl(self, mode); @@ -360,8 +352,7 @@ zlib_Decompress_flush(compobject *self, PyObject *args) PyObject *return_value = NULL; unsigned int length = DEF_BUF_SIZE; - if (!PyArg_ParseTuple(args, - "|O&:flush", + if (!PyArg_ParseTuple(args, "|O&:flush", uint_converter, &length)) goto exit; return_value = zlib_Decompress_flush_impl(self, length); @@ -394,8 +385,7 @@ zlib_adler32(PyModuleDef *module, PyObject *args) Py_buffer data = {NULL, NULL}; unsigned int value = 1; - if (!PyArg_ParseTuple(args, - "y*|I:adler32", + if (!PyArg_ParseTuple(args, "y*|I:adler32", &data, &value)) goto exit; return_value = zlib_adler32_impl(module, &data, value); @@ -432,8 +422,7 @@ zlib_crc32(PyModuleDef *module, PyObject *args) Py_buffer data = {NULL, NULL}; unsigned int value = 0; - if (!PyArg_ParseTuple(args, - "y*|I:crc32", + if (!PyArg_ParseTuple(args, "y*|I:crc32", &data, &value)) goto exit; return_value = zlib_crc32_impl(module, &data, value); @@ -449,4 +438,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=6cdeb624bebfe11f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=56ed1147bbbb4788 input=a9049054013a1b77]*/ -- cgit v1.2.1 From f36b001ad012f16a6bcc9405207c5f0abc9dfbad Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Sat, 25 Apr 2015 23:22:26 +0000 Subject: Implements issue #9951: Adds a hex() method to bytes, bytearray, & memoryview. Also updates a few internal implementations of the same thing to use the new built-in code. Contributed by Arnon Yaari. --- Modules/sha1module.c | 23 ++--------------------- Modules/sha256module.c | 23 ++--------------------- Modules/sha512module.c | 23 ++--------------------- 3 files changed, 6 insertions(+), 63 deletions(-) (limited to 'Modules') diff --git a/Modules/sha1module.c b/Modules/sha1module.c index d1f89364d7..74b94ba270 100644 --- a/Modules/sha1module.c +++ b/Modules/sha1module.c @@ -18,6 +18,7 @@ #include "Python.h" #include "hashlib.h" +#include "pystrhex.h" /*[clinic input] module _sha1 @@ -364,32 +365,12 @@ SHA1Type_hexdigest_impl(SHA1object *self) { unsigned char digest[SHA1_DIGESTSIZE]; struct sha1_state temp; - PyObject *retval; - Py_UCS1 *hex_digest; - int i, j; /* Get the raw (binary) digest value */ temp = self->hash_state; sha1_done(&temp, digest); - /* Create a new string */ - retval = PyUnicode_New(SHA1_DIGESTSIZE * 2, 127); - if (!retval) - return NULL; - hex_digest = PyUnicode_1BYTE_DATA(retval); - - /* Make hex version of the digest */ - for(i=j=0; i> 4) & 0xf; - hex_digest[j++] = Py_hexdigits[c]; - c = (digest[i] & 0xf); - hex_digest[j++] = Py_hexdigits[c]; - } -#ifdef Py_DEBUG - assert(_PyUnicode_CheckConsistency(retval, 1)); -#endif - return retval; + return _Py_strhex((const char *)digest, SHA1_DIGESTSIZE); } /*[clinic input] diff --git a/Modules/sha256module.c b/Modules/sha256module.c index 957fd2b8f9..8c4def0572 100644 --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -19,6 +19,7 @@ #include "Python.h" #include "structmember.h" #include "hashlib.h" +#include "pystrhex.h" /*[clinic input] module _sha256 @@ -454,32 +455,12 @@ SHA256Type_hexdigest_impl(SHAobject *self) { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; - PyObject *retval; - Py_UCS1 *hex_digest; - int i, j; /* Get the raw (binary) digest value */ SHAcopy(self, &temp); sha_final(digest, &temp); - /* Create a new string */ - retval = PyUnicode_New(self->digestsize * 2, 127); - if (!retval) - return NULL; - hex_digest = PyUnicode_1BYTE_DATA(retval); - - /* Make hex version of the digest */ - for(i=j=0; idigestsize; i++) { - unsigned char c; - c = (digest[i] >> 4) & 0xf; - hex_digest[j++] = Py_hexdigits[c]; - c = (digest[i] & 0xf); - hex_digest[j++] = Py_hexdigits[c]; - } -#ifdef Py_DEBUG - assert(_PyUnicode_CheckConsistency(retval, 1)); -#endif - return retval; + return _Py_strhex((const char *)digest, self->digestsize); } /*[clinic input] diff --git a/Modules/sha512module.c b/Modules/sha512module.c index 4533c003d5..8237d867f4 100644 --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -19,6 +19,7 @@ #include "Python.h" #include "structmember.h" #include "hashlib.h" +#include "pystrhex.h" /*[clinic input] module _sha512 @@ -521,32 +522,12 @@ SHA512Type_hexdigest_impl(SHAobject *self) { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; - PyObject *retval; - Py_UCS1 *hex_digest; - int i, j; /* Get the raw (binary) digest value */ SHAcopy(self, &temp); sha512_final(digest, &temp); - /* Create a new string */ - retval = PyUnicode_New(self->digestsize * 2, 127); - if (!retval) - return NULL; - hex_digest = PyUnicode_1BYTE_DATA(retval); - - /* Make hex version of the digest */ - for (i=j=0; idigestsize; i++) { - unsigned char c; - c = (digest[i] >> 4) & 0xf; - hex_digest[j++] = Py_hexdigits[c]; - c = (digest[i] & 0xf); - hex_digest[j++] = Py_hexdigits[c]; - } -#ifdef Py_DEBUG - assert(_PyUnicode_CheckConsistency(retval, 1)); -#endif - return retval; + return _Py_strhex((const char *)digest, self->digestsize); } /*[clinic input] -- cgit v1.2.1 From 5bcfa065bc65a6b765cd3c44b861b5fd25b4c1bb Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Sat, 25 Apr 2015 23:42:38 +0000 Subject: Issue9951: update _hashopenssl and md5module to use _Py_strhex(). Also update _posixsubprocess to use Py_hexdigits instead of its own constant. --- Modules/_hashopenssl.c | 22 +++------------------- Modules/_posixsubprocess.c | 2 +- Modules/md5module.c | 23 ++--------------------- 3 files changed, 6 insertions(+), 41 deletions(-) (limited to 'Modules') diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index 1566b18991..a157fbb14a 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -16,6 +16,7 @@ #include "Python.h" #include "structmember.h" #include "hashlib.h" +#include "pystrhex.h" /* EVP is the preferred interface to hashing in OpenSSL */ @@ -157,9 +158,7 @@ EVP_hexdigest(EVPobject *self, PyObject *unused) { unsigned char digest[EVP_MAX_MD_SIZE]; EVP_MD_CTX temp_ctx; - PyObject *retval; - char *hex_digest; - unsigned int i, j, digest_size; + unsigned int digest_size; /* Get the raw (binary) digest value */ locked_EVP_MD_CTX_copy(&temp_ctx, self); @@ -168,22 +167,7 @@ EVP_hexdigest(EVPobject *self, PyObject *unused) EVP_MD_CTX_cleanup(&temp_ctx); - /* Allocate a new buffer */ - hex_digest = PyMem_Malloc(digest_size * 2 + 1); - if (!hex_digest) - return PyErr_NoMemory(); - - /* Make hex version of the digest */ - for(i=j=0; i> 4) & 0xf; - hex_digest[j++] = Py_hexdigits[c]; - c = (digest[i] & 0xf); - hex_digest[j++] = Py_hexdigits[c]; - } - retval = PyUnicode_FromStringAndSize(hex_digest, digest_size * 2); - PyMem_Free(hex_digest); - return retval; + return _Py_strhex((const char *)digest, digest_size); } PyDoc_STRVAR(EVP_update__doc__, diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index 39914c5ec5..00989bcdca 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -504,7 +504,7 @@ error: _Py_write_noraise(errpipe_write, "OSError:", 8); cur = hex_errno + sizeof(hex_errno); while (saved_errno != 0 && cur > hex_errno) { - *--cur = "0123456789ABCDEF"[saved_errno % 16]; + *--cur = Py_hexdigits[saved_errno % 16]; saved_errno /= 16; } _Py_write_noraise(errpipe_write, cur, hex_errno + sizeof(hex_errno) - cur); diff --git a/Modules/md5module.c b/Modules/md5module.c index 00ee6c3379..a9ebc8cc51 100644 --- a/Modules/md5module.c +++ b/Modules/md5module.c @@ -18,6 +18,7 @@ #include "Python.h" #include "hashlib.h" +#include "pystrhex.h" /*[clinic input] module _md5 @@ -387,32 +388,12 @@ MD5Type_hexdigest_impl(MD5object *self) { unsigned char digest[MD5_DIGESTSIZE]; struct md5_state temp; - PyObject *retval; - Py_UCS1 *hex_digest; - int i, j; /* Get the raw (binary) digest value */ temp = self->hash_state; md5_done(&temp, digest); - /* Create a new string */ - retval = PyUnicode_New(MD5_DIGESTSIZE * 2, 127); - if (!retval) - return NULL; - hex_digest = PyUnicode_1BYTE_DATA(retval); - - /* Make hex version of the digest */ - for(i=j=0; i> 4) & 0xf; - hex_digest[j++] = Py_hexdigits[c]; - c = (digest[i] & 0xf); - hex_digest[j++] = Py_hexdigits[c]; - } -#ifdef Py_DEBUG - assert(_PyUnicode_CheckConsistency(retval, 1)); -#endif - return retval; + return _Py_strhex((const char*)digest, MD5_DIGESTSIZE); } /*[clinic input] -- cgit v1.2.1 From 83a139cb095ee91932818ba9d5f0f03c8f51fb2f Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Sun, 26 Apr 2015 00:42:13 +0000 Subject: Switch binascii over to using the common _Py_strhex implementation for its hex and hexlify functions. issue9951. --- Modules/binascii.c | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) (limited to 'Modules') diff --git a/Modules/binascii.c b/Modules/binascii.c index ceee4f1bf5..d920d23871 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -56,6 +56,7 @@ #define PY_SSIZE_T_CLEAN #include "Python.h" +#include "pystrhex.h" #ifdef USE_ZLIB_CRC32 #include "zlib.h" #endif @@ -1117,33 +1118,7 @@ static PyObject * binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=179318922c2f8fda input=96423cfa299ff3b1]*/ { - char* argbuf; - Py_ssize_t arglen; - PyObject *retval; - char* retbuf; - Py_ssize_t i, j; - - argbuf = data->buf; - arglen = data->len; - - assert(arglen >= 0); - if (arglen > PY_SSIZE_T_MAX / 2) - return PyErr_NoMemory(); - - retval = PyBytes_FromStringAndSize(NULL, arglen*2); - if (!retval) - return NULL; - retbuf = PyBytes_AS_STRING(retval); - - /* make hex version of string, taken from shamodule.c */ - for (i=j=0; i < arglen; i++) { - unsigned char c; - c = (argbuf[i] >> 4) & 0xf; - retbuf[j++] = Py_hexdigits[c]; - c = argbuf[i] & 0xf; - retbuf[j++] = Py_hexdigits[c]; - } - return retval; + return _Py_strhex_bytes((const char *)data->buf, data->len); } /*[clinic input] @@ -1158,7 +1133,7 @@ static PyObject * binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=6098440091fb61dc input=2e3afae7f083f061]*/ { - return binascii_b2a_hex_impl(module, data); + return _Py_strhex_bytes((const char *)data->buf, data->len); } static int -- cgit v1.2.1 From be670f799c5cc553ecaadf12d309cf60c9469230 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 27 Apr 2015 21:44:22 -0400 Subject: remove the concept of an unoptimized function scope from the compiler, since it can't happen anymore --- Modules/symtablemodule.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'Modules') diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c index cdb4ffcbd8..f84cc78b73 100644 --- a/Modules/symtablemodule.c +++ b/Modules/symtablemodule.c @@ -84,9 +84,6 @@ PyInit__symtable(void) PyModule_AddIntConstant(m, "TYPE_CLASS", ClassBlock); PyModule_AddIntConstant(m, "TYPE_MODULE", ModuleBlock); - PyModule_AddIntMacro(m, OPT_IMPORT_STAR); - PyModule_AddIntMacro(m, OPT_TOPLEVEL); - PyModule_AddIntMacro(m, LOCAL); PyModule_AddIntMacro(m, GLOBAL_EXPLICIT); PyModule_AddIntMacro(m, GLOBAL_IMPLICIT); -- cgit v1.2.1 From ebad79cdff1fda40371e0cbe4e241600296eb441 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 3 May 2015 15:49:47 +0300 Subject: Issue #20168: Converted the _tkinter module to Argument Clinic. --- Modules/_tkinter.c | 663 ++++++++++++++++++++++++++++---------------- Modules/clinic/_tkinter.c.h | 624 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1041 insertions(+), 246 deletions(-) create mode 100644 Modules/clinic/_tkinter.c.h (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 4d61bb23a1..444b13a7d1 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -509,6 +509,14 @@ SplitObj(PyObject *arg) } +/*[clinic input] +module _tkinter +class _tkinter.tkapp "TkappObject *" "&Tkapp_Type_spec" +class _tkinter.Tcl_Obj "PyTclObject *" "&PyTclObject_Type_spec" +class _tkinter.tktimertoken "TkttObject *" "&Tktt_Type_spec" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b1ebf15c162ee229]*/ + /**** Tkapp Object ****/ #ifndef WITH_APPINIT @@ -1489,16 +1497,21 @@ Tkapp_Call(PyObject *selfptr, PyObject *args) } +/*[clinic input] +_tkinter.tkapp.eval + + script: str + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_Eval(PyObject *self, PyObject *args) +_tkinter_tkapp_eval_impl(TkappObject *self, const char *script) +/*[clinic end generated code: output=24b79831f700dea0 input=481484123a455f22]*/ { - char *script; PyObject *res = NULL; int err; - if (!PyArg_ParseTuple(args, "s:eval", &script)) - return NULL; - CHECK_STRING_LENGTH(script); CHECK_TCL_APPARTMENT; @@ -1506,23 +1519,28 @@ Tkapp_Eval(PyObject *self, PyObject *args) err = Tcl_Eval(Tkapp_Interp(self), script); ENTER_OVERLAP if (err == TCL_ERROR) - res = Tkinter_Error(self); + res = Tkinter_Error((PyObject *)self); else res = unicodeFromTclString(Tkapp_Result(self)); LEAVE_OVERLAP_TCL return res; } +/*[clinic input] +_tkinter.tkapp.evalfile + + fileName: str + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_EvalFile(PyObject *self, PyObject *args) +_tkinter_tkapp_evalfile_impl(TkappObject *self, const char *fileName) +/*[clinic end generated code: output=63be88dcee4f11d3 input=873ab707e5e947e1]*/ { - char *fileName; PyObject *res = NULL; int err; - if (!PyArg_ParseTuple(args, "s:evalfile", &fileName)) - return NULL; - CHECK_STRING_LENGTH(fileName); CHECK_TCL_APPARTMENT; @@ -1530,23 +1548,28 @@ Tkapp_EvalFile(PyObject *self, PyObject *args) err = Tcl_EvalFile(Tkapp_Interp(self), fileName); ENTER_OVERLAP if (err == TCL_ERROR) - res = Tkinter_Error(self); + res = Tkinter_Error((PyObject *)self); else res = unicodeFromTclString(Tkapp_Result(self)); LEAVE_OVERLAP_TCL return res; } +/*[clinic input] +_tkinter.tkapp.record + + script: str + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_Record(PyObject *self, PyObject *args) +_tkinter_tkapp_record_impl(TkappObject *self, const char *script) +/*[clinic end generated code: output=0ffe08a0061730df input=c0b0db5a21412cac]*/ { - char *script; PyObject *res = NULL; int err; - if (!PyArg_ParseTuple(args, "s:record", &script)) - return NULL; - CHECK_STRING_LENGTH(script); CHECK_TCL_APPARTMENT; @@ -1554,20 +1577,25 @@ Tkapp_Record(PyObject *self, PyObject *args) err = Tcl_RecordAndEval(Tkapp_Interp(self), script, TCL_NO_EVAL); ENTER_OVERLAP if (err == TCL_ERROR) - res = Tkinter_Error(self); + res = Tkinter_Error((PyObject *)self); else res = unicodeFromTclString(Tkapp_Result(self)); LEAVE_OVERLAP_TCL return res; } +/*[clinic input] +_tkinter.tkapp.adderrinfo + + msg: str + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_AddErrorInfo(PyObject *self, PyObject *args) +_tkinter_tkapp_adderrinfo_impl(TkappObject *self, const char *msg) +/*[clinic end generated code: output=0e222ee2050eb357 input=4971399317d4c136]*/ { - char *msg; - - if (!PyArg_ParseTuple(args, "s:adderrorinfo", &msg)) - return NULL; CHECK_STRING_LENGTH(msg); CHECK_TCL_APPARTMENT; @@ -1600,6 +1628,15 @@ typedef struct VarEvent { } VarEvent; #endif +/*[python] + +class varname_converter(CConverter): + type = 'const char *' + converter = 'varname_converter' + +[python]*/ +/*[python checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/ + static int varname_converter(PyObject *in, void *_out) { @@ -1876,26 +1913,33 @@ Tkapp_GlobalUnsetVar(PyObject *self, PyObject *args) /** Tcl to Python **/ +/*[clinic input] +_tkinter.tkapp.getint + + arg: object + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_GetInt(PyObject *self, PyObject *args) +_tkinter_tkapp_getint(TkappObject *self, PyObject *arg) +/*[clinic end generated code: output=88cf293fae307cfe input=034026997c5b91f8]*/ { char *s; Tcl_Obj *value; PyObject *result; - if (PyTuple_Size(args) == 1) { - PyObject* o = PyTuple_GetItem(args, 0); - if (PyLong_Check(o)) { - Py_INCREF(o); - return o; - } + if (PyLong_Check(arg)) { + Py_INCREF(arg); + return arg; } - if (!PyArg_ParseTuple(args, "s:getint", &s)) + + if (!PyArg_Parse(arg, "s:getint", &s)) return NULL; CHECK_STRING_LENGTH(s); value = Tcl_NewStringObj(s, -1); if (value == NULL) - return Tkinter_Error(self); + return Tkinter_Error((PyObject *)self); /* Don't use Tcl_GetInt() because it returns ambiguous result for value in ranges -2**32..-2**31-1 and 2**31..2**32-1 (on 32-bit platform). @@ -1903,39 +1947,55 @@ Tkapp_GetInt(PyObject *self, PyObject *args) value in ranges -2**64..-2**63-1 and 2**63..2**64-1 (on 32-bit platform). */ #ifdef HAVE_LIBTOMMAMTH - result = fromBignumObj(self, value); + result = fromBignumObj((PyObject *)self, value); #else - result = fromWideIntObj(self, value); + result = fromWideIntObj((PyObject *)self, value); #endif Tcl_DecrRefCount(value); if (result != NULL || PyErr_Occurred()) return result; - return Tkinter_Error(self); + return Tkinter_Error((PyObject *)self); } +/*[clinic input] +_tkinter.tkapp.getdouble + + arg: object + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_GetDouble(PyObject *self, PyObject *args) +_tkinter_tkapp_getdouble(TkappObject *self, PyObject *arg) +/*[clinic end generated code: output=c52b138bd8b956b9 input=22015729ce9ef7f8]*/ { char *s; double v; - if (PyTuple_Size(args) == 1) { - PyObject *o = PyTuple_GetItem(args, 0); - if (PyFloat_Check(o)) { - Py_INCREF(o); - return o; - } + if (PyFloat_Check(arg)) { + Py_INCREF(arg); + return arg; } - if (!PyArg_ParseTuple(args, "s:getdouble", &s)) + + if (!PyArg_Parse(arg, "s:getdouble", &s)) return NULL; CHECK_STRING_LENGTH(s); if (Tcl_GetDouble(Tkapp_Interp(self), s, &v) == TCL_ERROR) - return Tkinter_Error(self); + return Tkinter_Error((PyObject *)self); return Py_BuildValue("d", v); } +/*[clinic input] +_tkinter.tkapp.getboolean + + arg: object + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_GetBoolean(PyObject *self, PyObject *arg) +_tkinter_tkapp_getboolean(TkappObject *self, PyObject *arg) +/*[clinic end generated code: output=726a9ae445821d91 input=7f11248ef8f8776e]*/ { char *s; int v; @@ -1948,7 +2008,7 @@ Tkapp_GetBoolean(PyObject *self, PyObject *arg) if (Tcl_GetBooleanFromObj(Tkapp_Interp(self), ((PyTclObject*)arg)->value, &v) == TCL_ERROR) - return Tkinter_Error(self); + return Tkinter_Error((PyObject *)self); return PyBool_FromLong(v); } @@ -1956,20 +2016,25 @@ Tkapp_GetBoolean(PyObject *self, PyObject *arg) return NULL; CHECK_STRING_LENGTH(s); if (Tcl_GetBoolean(Tkapp_Interp(self), s, &v) == TCL_ERROR) - return Tkinter_Error(self); + return Tkinter_Error((PyObject *)self); return PyBool_FromLong(v); } +/*[clinic input] +_tkinter.tkapp.exprstring + + s: str + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_ExprString(PyObject *self, PyObject *args) +_tkinter_tkapp_exprstring_impl(TkappObject *self, const char *s) +/*[clinic end generated code: output=beda323d3ed0abb1 input=fa78f751afb2f21b]*/ { - char *s; PyObject *res = NULL; int retval; - if (!PyArg_ParseTuple(args, "s:exprstring", &s)) - return NULL; - CHECK_STRING_LENGTH(s); CHECK_TCL_APPARTMENT; @@ -1977,24 +2042,29 @@ Tkapp_ExprString(PyObject *self, PyObject *args) retval = Tcl_ExprString(Tkapp_Interp(self), s); ENTER_OVERLAP if (retval == TCL_ERROR) - res = Tkinter_Error(self); + res = Tkinter_Error((PyObject *)self); else res = unicodeFromTclString(Tkapp_Result(self)); LEAVE_OVERLAP_TCL return res; } +/*[clinic input] +_tkinter.tkapp.exprlong + + s: str + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_ExprLong(PyObject *self, PyObject *args) +_tkinter_tkapp_exprlong_impl(TkappObject *self, const char *s) +/*[clinic end generated code: output=5d6a46b63c6ebcf9 input=11bd7eee0c57b4dc]*/ { - char *s; PyObject *res = NULL; int retval; long v; - if (!PyArg_ParseTuple(args, "s:exprlong", &s)) - return NULL; - CHECK_STRING_LENGTH(s); CHECK_TCL_APPARTMENT; @@ -2002,23 +2072,29 @@ Tkapp_ExprLong(PyObject *self, PyObject *args) retval = Tcl_ExprLong(Tkapp_Interp(self), s, &v); ENTER_OVERLAP if (retval == TCL_ERROR) - res = Tkinter_Error(self); + res = Tkinter_Error((PyObject *)self); else res = Py_BuildValue("l", v); LEAVE_OVERLAP_TCL return res; } +/*[clinic input] +_tkinter.tkapp.exprdouble + + s: str + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_ExprDouble(PyObject *self, PyObject *args) +_tkinter_tkapp_exprdouble_impl(TkappObject *self, const char *s) +/*[clinic end generated code: output=ff78df1081ea4158 input=ff02bc11798832d5]*/ { - char *s; PyObject *res = NULL; double v; int retval; - if (!PyArg_ParseTuple(args, "s:exprdouble", &s)) - return NULL; CHECK_STRING_LENGTH(s); CHECK_TCL_APPARTMENT; PyFPE_START_PROTECT("Tkapp_ExprDouble", return 0) @@ -2027,30 +2103,36 @@ Tkapp_ExprDouble(PyObject *self, PyObject *args) ENTER_OVERLAP PyFPE_END_PROTECT(retval) if (retval == TCL_ERROR) - res = Tkinter_Error(self); + res = Tkinter_Error((PyObject *)self); else res = Py_BuildValue("d", v); LEAVE_OVERLAP_TCL return res; } +/*[clinic input] +_tkinter.tkapp.exprboolean + + s: str + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_ExprBoolean(PyObject *self, PyObject *args) +_tkinter_tkapp_exprboolean_impl(TkappObject *self, const char *s) +/*[clinic end generated code: output=8b28038c22887311 input=c8c66022bdb8d5d3]*/ { - char *s; PyObject *res = NULL; int retval; int v; - if (!PyArg_ParseTuple(args, "s:exprboolean", &s)) - return NULL; CHECK_STRING_LENGTH(s); CHECK_TCL_APPARTMENT; ENTER_TCL retval = Tcl_ExprBoolean(Tkapp_Interp(self), s, &v); ENTER_OVERLAP if (retval == TCL_ERROR) - res = Tkinter_Error(self); + res = Tkinter_Error((PyObject *)self); else res = Py_BuildValue("i", v); LEAVE_OVERLAP_TCL @@ -2059,29 +2141,36 @@ Tkapp_ExprBoolean(PyObject *self, PyObject *args) +/*[clinic input] +_tkinter.tkapp.splitlist + + arg: object + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_SplitList(PyObject *self, PyObject *args) +_tkinter_tkapp_splitlist(TkappObject *self, PyObject *arg) +/*[clinic end generated code: output=13b51d34386d36fb input=2b2e13351e3c0b53]*/ { char *list; int argc; const char **argv; - PyObject *arg, *v; + PyObject *v; int i; - if (!PyArg_ParseTuple(args, "O:splitlist", &arg)) - return NULL; if (PyTclObject_Check(arg)) { int objc; Tcl_Obj **objv; if (Tcl_ListObjGetElements(Tkapp_Interp(self), ((PyTclObject*)arg)->value, &objc, &objv) == TCL_ERROR) { - return Tkinter_Error(self); + return Tkinter_Error((PyObject *)self); } if (!(v = PyTuple_New(objc))) return NULL; for (i = 0; i < objc; i++) { - PyObject *s = FromObj(self, objv[i]); + PyObject *s = FromObj((PyObject*)self, objv[i]); if (!s || PyTuple_SetItem(v, i, s)) { Py_DECREF(v); return NULL; @@ -2097,14 +2186,14 @@ Tkapp_SplitList(PyObject *self, PyObject *args) return PySequence_Tuple(arg); } - if (!PyArg_ParseTuple(args, "et:splitlist", "utf-8", &list)) + if (!PyArg_Parse(arg, "et:splitlist", "utf-8", &list)) return NULL; CHECK_STRING_LENGTH(list); if (Tcl_SplitList(Tkapp_Interp(self), list, &argc, &argv) == TCL_ERROR) { PyMem_Free(list); - return Tkinter_Error(self); + return Tkinter_Error((PyObject *)self); } if (!(v = PyTuple_New(argc))) @@ -2125,14 +2214,21 @@ Tkapp_SplitList(PyObject *self, PyObject *args) return v; } +/*[clinic input] +_tkinter.tkapp.split + + arg: object + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_Split(PyObject *self, PyObject *args) +_tkinter_tkapp_split(TkappObject *self, PyObject *arg) +/*[clinic end generated code: output=e08ad832363facfd input=a1c78349eacaa140]*/ { - PyObject *arg, *v; + PyObject *v; char *list; - if (!PyArg_ParseTuple(args, "O:split", &arg)) - return NULL; if (PyTclObject_Check(arg)) { Tcl_Obj *value = ((PyTclObject*)arg)->value; int objc; @@ -2140,16 +2236,16 @@ Tkapp_Split(PyObject *self, PyObject *args) int i; if (Tcl_ListObjGetElements(Tkapp_Interp(self), value, &objc, &objv) == TCL_ERROR) { - return FromObj(self, value); + return FromObj((PyObject*)self, value); } if (objc == 0) return PyUnicode_FromString(""); if (objc == 1) - return FromObj(self, objv[0]); + return FromObj((PyObject*)self, objv[0]); if (!(v = PyTuple_New(objc))) return NULL; for (i = 0; i < objc; i++) { - PyObject *s = FromObj(self, objv[i]); + PyObject *s = FromObj((PyObject*)self, objv[i]); if (!s || PyTuple_SetItem(v, i, s)) { Py_DECREF(v); return NULL; @@ -2160,7 +2256,7 @@ Tkapp_Split(PyObject *self, PyObject *args) if (PyTuple_Check(arg) || PyList_Check(arg)) return SplitObj(arg); - if (!PyArg_ParseTuple(args, "et:split", "utf-8", &list)) + if (!PyArg_Parse(arg, "et:split", "utf-8", &list)) return NULL; CHECK_STRING_LENGTH(list); v = Split(list); @@ -2260,7 +2356,7 @@ TCL_DECLARE_MUTEX(command_mutex) typedef struct CommandEvent{ Tcl_Event ev; Tcl_Interp* interp; - char *name; + const char *name; int create; int *status; ClientData *data; @@ -2283,18 +2379,25 @@ Tkapp_CommandProc(CommandEvent *ev, int flags) } #endif +/*[clinic input] +_tkinter.tkapp.createcommand + + self: self(type="TkappObject *") + name: str + func: object + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_CreateCommand(PyObject *selfptr, PyObject *args) +_tkinter_tkapp_createcommand_impl(TkappObject *self, const char *name, + PyObject *func) +/*[clinic end generated code: output=2a1c79a4ee2af410 input=2bc2c046a0914234]*/ { - TkappObject *self = (TkappObject*)selfptr; PythonCmd_ClientData *data; - char *cmdName; - PyObject *func; int err; - if (!PyArg_ParseTuple(args, "sO:createcommand", &cmdName, &func)) - return NULL; - CHECK_STRING_LENGTH(cmdName); + CHECK_STRING_LENGTH(name); if (!PyCallable_Check(func)) { PyErr_SetString(PyExc_TypeError, "command not callable"); return NULL; @@ -2311,7 +2414,7 @@ Tkapp_CreateCommand(PyObject *selfptr, PyObject *args) return PyErr_NoMemory(); Py_INCREF(self); Py_INCREF(func); - data->self = selfptr; + data->self = (PyObject *) self; data->func = func; #ifdef WITH_THREAD if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) { @@ -2325,7 +2428,7 @@ Tkapp_CreateCommand(PyObject *selfptr, PyObject *args) ev->ev.proc = (Tcl_EventProc*)Tkapp_CommandProc; ev->interp = self->interp; ev->create = 1; - ev->name = cmdName; + ev->name = name; ev->data = (ClientData)data; ev->status = &err; ev->done = &cond; @@ -2337,7 +2440,7 @@ Tkapp_CreateCommand(PyObject *selfptr, PyObject *args) { ENTER_TCL err = Tcl_CreateCommand( - Tkapp_Interp(self), cmdName, PythonCmd, + Tkapp_Interp(self), name, PythonCmd, (ClientData)data, PythonCmdDelete) == NULL; LEAVE_TCL } @@ -2352,16 +2455,22 @@ Tkapp_CreateCommand(PyObject *selfptr, PyObject *args) +/*[clinic input] +_tkinter.tkapp.deletecommand + + self: self(type="TkappObject *") + name: str + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_DeleteCommand(PyObject *selfptr, PyObject *args) +_tkinter_tkapp_deletecommand_impl(TkappObject *self, const char *name) +/*[clinic end generated code: output=a67e8cb5845e0d2d input=b6306468f10b219c]*/ { - TkappObject *self = (TkappObject*)selfptr; - char *cmdName; int err; - if (!PyArg_ParseTuple(args, "s:deletecommand", &cmdName)) - return NULL; - CHECK_STRING_LENGTH(cmdName); + CHECK_STRING_LENGTH(name); #ifdef WITH_THREAD if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) { @@ -2375,7 +2484,7 @@ Tkapp_DeleteCommand(PyObject *selfptr, PyObject *args) ev->ev.proc = (Tcl_EventProc*)Tkapp_CommandProc; ev->interp = self->interp; ev->create = 0; - ev->name = cmdName; + ev->name = name; ev->status = &err; ev->done = &cond; Tkapp_ThreadSend(self, (Tcl_Event*)ev, &cond, @@ -2386,7 +2495,7 @@ Tkapp_DeleteCommand(PyObject *selfptr, PyObject *args) #endif { ENTER_TCL - err = Tcl_DeleteCommand(self->interp, cmdName); + err = Tcl_DeleteCommand(self->interp, name); LEAVE_TCL } if (err == -1) { @@ -2467,17 +2576,23 @@ FileHandler(ClientData clientData, int mask) LEAVE_PYTHON } +/*[clinic input] +_tkinter.tkapp.createfilehandler + + file: object + mask: int + func: object + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_CreateFileHandler(PyObject *self, PyObject *args) - /* args is (file, mask, func) */ +_tkinter_tkapp_createfilehandler_impl(TkappObject *self, PyObject *file, + int mask, PyObject *func) +/*[clinic end generated code: output=f73ce82de801c353 input=84943a5286e47947]*/ { FileHandler_ClientData *data; - PyObject *file, *func; - int mask, tfile; - - if (!PyArg_ParseTuple(args, "OiO:createfilehandler", - &file, &mask, &func)) - return NULL; + int tfile; CHECK_TCL_APPARTMENT; @@ -2500,15 +2615,20 @@ Tkapp_CreateFileHandler(PyObject *self, PyObject *args) Py_RETURN_NONE; } +/*[clinic input] +_tkinter.tkapp.deletefilehandler + + file: object + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_DeleteFileHandler(PyObject *self, PyObject *args) +_tkinter_tkapp_deletefilehandler(TkappObject *self, PyObject *file) +/*[clinic end generated code: output=b53cc96ebf9476fd input=abbec19d66312e2a]*/ { - PyObject *file; int tfile; - if (!PyArg_ParseTuple(args, "O:deletefilehandler", &file)) - return NULL; - CHECK_TCL_APPARTMENT; tfile = PyObject_AsFileDescriptor(file); @@ -2536,14 +2656,20 @@ typedef struct { PyObject *func; } TkttObject; +/*[clinic input] +_tkinter.tktimertoken.deletetimerhandler + + self: self(type="TkttObject *") + +[clinic start generated code]*/ + static PyObject * -Tktt_DeleteTimerHandler(PyObject *self, PyObject *args) +_tkinter_tktimertoken_deletetimerhandler_impl(TkttObject *self) +/*[clinic end generated code: output=bd7fe17f328cfa55 input=25ba5dd594e52084]*/ { - TkttObject *v = (TkttObject *)self; + TkttObject *v = self; PyObject *func = v->func; - if (!PyArg_ParseTuple(args, ":deletetimerhandler")) - return NULL; if (v->token != NULL) { Tcl_DeleteTimerHandler(v->token); v->token = NULL; @@ -2556,11 +2682,7 @@ Tktt_DeleteTimerHandler(PyObject *self, PyObject *args) Py_RETURN_NONE; } -static PyMethodDef Tktt_methods[] = -{ - {"deletetimerhandler", Tktt_DeleteTimerHandler, METH_VARARGS}, - {NULL, NULL} -}; +static PyMethodDef Tktt_methods[]; static TkttObject * Tktt_New(PyObject *func) @@ -2649,16 +2771,22 @@ TimerHandler(ClientData clientData) LEAVE_PYTHON } +/*[clinic input] +_tkinter.tkapp.createtimerhandler + + milliseconds: int + func: object + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_CreateTimerHandler(PyObject *self, PyObject *args) +_tkinter_tkapp_createtimerhandler_impl(TkappObject *self, int milliseconds, + PyObject *func) +/*[clinic end generated code: output=2da5959b9d031911 input=ba6729f32f0277a5]*/ { - int milliseconds; - PyObject *func; TkttObject *v; - if (!PyArg_ParseTuple(args, "iO:createtimerhandler", - &milliseconds, &func)) - return NULL; if (!PyCallable_Check(func)) { PyErr_SetString(PyExc_TypeError, "bad argument list"); return NULL; @@ -2678,18 +2806,23 @@ Tkapp_CreateTimerHandler(PyObject *self, PyObject *args) /** Event Loop **/ +/*[clinic input] +_tkinter.tkapp.mainloop + + self: self(type="TkappObject *") + threshold: int = 0 + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_MainLoop(PyObject *selfptr, PyObject *args) +_tkinter_tkapp_mainloop_impl(TkappObject *self, int threshold) +/*[clinic end generated code: output=0ba8eabbe57841b0 input=ad57c9c1dd2b9470]*/ { - int threshold = 0; - TkappObject *self = (TkappObject*)selfptr; #ifdef WITH_THREAD PyThreadState *tstate = PyThreadState_Get(); #endif - if (!PyArg_ParseTuple(args, "|i:mainloop", &threshold)) - return NULL; - CHECK_TCL_APPARTMENT; self->dispatching = 1; @@ -2741,44 +2874,56 @@ Tkapp_MainLoop(PyObject *selfptr, PyObject *args) Py_RETURN_NONE; } +/*[clinic input] +_tkinter.tkapp.dooneevent + + flags: int = 0 + / + +[clinic start generated code]*/ + static PyObject * -Tkapp_DoOneEvent(PyObject *self, PyObject *args) +_tkinter_tkapp_dooneevent_impl(TkappObject *self, int flags) +/*[clinic end generated code: output=27c6b2aa464cac29 input=6542b928e364b793]*/ { - int flags = 0; int rv; - if (!PyArg_ParseTuple(args, "|i:dooneevent", &flags)) - return NULL; - ENTER_TCL rv = Tcl_DoOneEvent(flags); LEAVE_TCL return Py_BuildValue("i", rv); } +/*[clinic input] +_tkinter.tkapp.quit +[clinic start generated code]*/ + static PyObject * -Tkapp_Quit(PyObject *self, PyObject *args) +_tkinter_tkapp_quit_impl(TkappObject *self) +/*[clinic end generated code: output=7f21eeff481f754f input=e03020dc38aff23c]*/ { - - if (!PyArg_ParseTuple(args, ":quit")) - return NULL; - quitMainLoop = 1; Py_RETURN_NONE; } +/*[clinic input] +_tkinter.tkapp.interpaddr +[clinic start generated code]*/ + static PyObject * -Tkapp_InterpAddr(PyObject *self, PyObject *args) +_tkinter_tkapp_interpaddr_impl(TkappObject *self) +/*[clinic end generated code: output=6caaae3273b3c95a input=2dd32cbddb55a111]*/ { - - if (!PyArg_ParseTuple(args, ":interpaddr")) - return NULL; - return PyLong_FromVoidPtr(Tkapp_Interp(self)); } +/*[clinic input] +_tkinter.tkapp.loadtk +[clinic start generated code]*/ + static PyObject * -Tkapp_TkInit(PyObject *self, PyObject *args) +_tkinter_tkapp_loadtk_impl(TkappObject *self) +/*[clinic end generated code: output=e9e10a954ce46d2a input=b5e82afedd6354f0]*/ { Tcl_Interp *interp = Tkapp_Interp(self); const char * _tk_exists = NULL; @@ -2804,7 +2949,7 @@ Tkapp_TkInit(PyObject *self, PyObject *args) if (err == TCL_ERROR) { /* This sets an exception, but we cannot return right away because we need to exit the overlap first. */ - Tkinter_Error(self); + Tkinter_Error((PyObject *)self); } else { _tk_exists = Tkapp_Result(self); } @@ -2839,11 +2984,18 @@ Tkapp_WantObjects(PyObject *self, PyObject *args) Py_RETURN_NONE; } +/*[clinic input] +_tkinter.tkapp.willdispatch + + self: self(type="TkappObject *") + +[clinic start generated code]*/ + static PyObject * -Tkapp_WillDispatch(PyObject *self, PyObject *args) +_tkinter_tkapp_willdispatch_impl(TkappObject *self) +/*[clinic end generated code: output=0e3f46d244642155 input=2630699767808970]*/ { - - ((TkappObject*)self)->dispatching = 1; + self->dispatching = 1; Py_RETURN_NONE; } @@ -2851,45 +3003,7 @@ Tkapp_WillDispatch(PyObject *self, PyObject *args) /**** Tkapp Method List ****/ -static PyMethodDef Tkapp_methods[] = -{ - {"willdispatch", Tkapp_WillDispatch, METH_NOARGS}, - {"wantobjects", Tkapp_WantObjects, METH_VARARGS}, - {"call", Tkapp_Call, METH_VARARGS}, - {"eval", Tkapp_Eval, METH_VARARGS}, - {"evalfile", Tkapp_EvalFile, METH_VARARGS}, - {"record", Tkapp_Record, METH_VARARGS}, - {"adderrorinfo", Tkapp_AddErrorInfo, METH_VARARGS}, - {"setvar", Tkapp_SetVar, METH_VARARGS}, - {"globalsetvar", Tkapp_GlobalSetVar, METH_VARARGS}, - {"getvar", Tkapp_GetVar, METH_VARARGS}, - {"globalgetvar", Tkapp_GlobalGetVar, METH_VARARGS}, - {"unsetvar", Tkapp_UnsetVar, METH_VARARGS}, - {"globalunsetvar", Tkapp_GlobalUnsetVar, METH_VARARGS}, - {"getint", Tkapp_GetInt, METH_VARARGS}, - {"getdouble", Tkapp_GetDouble, METH_VARARGS}, - {"getboolean", Tkapp_GetBoolean, METH_O}, - {"exprstring", Tkapp_ExprString, METH_VARARGS}, - {"exprlong", Tkapp_ExprLong, METH_VARARGS}, - {"exprdouble", Tkapp_ExprDouble, METH_VARARGS}, - {"exprboolean", Tkapp_ExprBoolean, METH_VARARGS}, - {"splitlist", Tkapp_SplitList, METH_VARARGS}, - {"split", Tkapp_Split, METH_VARARGS}, - {"createcommand", Tkapp_CreateCommand, METH_VARARGS}, - {"deletecommand", Tkapp_DeleteCommand, METH_VARARGS}, -#ifdef HAVE_CREATEFILEHANDLER - {"createfilehandler", Tkapp_CreateFileHandler, METH_VARARGS}, - {"deletefilehandler", Tkapp_DeleteFileHandler, METH_VARARGS}, -#endif - {"createtimerhandler", Tkapp_CreateTimerHandler, METH_VARARGS}, - {"mainloop", Tkapp_MainLoop, METH_VARARGS}, - {"dooneevent", Tkapp_DoOneEvent, METH_VARARGS}, - {"quit", Tkapp_Quit, METH_VARARGS}, - {"interpaddr", Tkapp_InterpAddr, METH_VARARGS}, - {"loadtk", Tkapp_TkInit, METH_NOARGS}, - {NULL, NULL} -}; - +static PyMethodDef Tkapp_methods[]; /**** Tkapp Type Methods ****/ @@ -2987,14 +3101,19 @@ _flatten1(FlattenContext* context, PyObject* item, int depth) return 1; } +/*[clinic input] +_tkinter._flatten + + item: object + / + +[clinic start generated code]*/ + static PyObject * -Tkinter_Flatten(PyObject* self, PyObject* args) +_tkinter__flatten(PyModuleDef *module, PyObject *item) +/*[clinic end generated code: output=9505049ec74c3480 input=6b9c12260aa1157f]*/ { FlattenContext context; - PyObject* item; - - if (!PyArg_ParseTuple(args, "O:_flatten", &item)) - return NULL; context.maxsize = PySequence_Size(item); if (context.maxsize < 0) @@ -3017,26 +3136,33 @@ Tkinter_Flatten(PyObject* self, PyObject* args) return context.tuple; } +/*[clinic input] +_tkinter.create + + screenName: str(nullable=True) = NULL + baseName: str = NULL + className: str = "Tk" + interactive: int(c_default="0") = False + wantobjects: int(c_default="0") = False + wantTk: int(c_default="1") = True + if false, then Tk_Init() doesn't get called + sync: int(c_default="0") = False + if true, then pass -sync to wish + use: str(nullable=True) = NULL + if not None, then pass -use to wish + / + +[clinic start generated code]*/ + static PyObject * -Tkinter_Create(PyObject *self, PyObject *args) -{ - char *screenName = NULL; - char *baseName = NULL; /* XXX this is not used anymore; - try getting rid of it. */ - char *className = NULL; - int interactive = 0; - int wantobjects = 1; - int wantTk = 1; /* If false, then Tk_Init() doesn't get called */ - int sync = 0; /* pass -sync to wish */ - char *use = NULL; /* pass -use to wish */ - - className = "Tk"; - - if (!PyArg_ParseTuple(args, "|zssiiiiz:create", - &screenName, &baseName, &className, - &interactive, &wantobjects, &wantTk, - &sync, &use)) - return NULL; +_tkinter_create_impl(PyModuleDef *module, const char *screenName, + const char *baseName, const char *className, + int interactive, int wantobjects, int wantTk, int sync, + const char *use) +/*[clinic end generated code: output=b8847800fc3b27eb input=c133c59a99dd0086]*/ +{ + /* XXX baseName is not used anymore; + * try getting rid of it. */ CHECK_STRING_LENGTH(screenName); CHECK_STRING_LENGTH(baseName); CHECK_STRING_LENGTH(className); @@ -3047,12 +3173,21 @@ Tkinter_Create(PyObject *self, PyObject *args) sync, use); } +/*[clinic input] +_tkinter.setbusywaitinterval + + new_val: int + / + +Set the busy-wait interval in milliseconds between successive calls to Tcl_DoOneEvent in a threaded Python interpreter. + +It should be set to a divisor of the maximum time between frames in an animation. +[clinic start generated code]*/ + static PyObject * -Tkinter_setbusywaitinterval(PyObject *self, PyObject *args) +_tkinter_setbusywaitinterval_impl(PyModuleDef *module, int new_val) +/*[clinic end generated code: output=0b9d7ef7940461ea input=deca1d6f9e6dae47]*/ { - int new_val; - if (!PyArg_ParseTuple(args, "i:setbusywaitinterval", &new_val)) - return NULL; if (new_val < 0) { PyErr_SetString(PyExc_ValueError, "busywaitinterval must be >= 0"); @@ -3062,34 +3197,70 @@ Tkinter_setbusywaitinterval(PyObject *self, PyObject *args) Py_RETURN_NONE; } -static char setbusywaitinterval_doc[] = -"setbusywaitinterval(n) -> None\n\ -\n\ -Set the busy-wait interval in milliseconds between successive\n\ -calls to Tcl_DoOneEvent in a threaded Python interpreter.\n\ -It should be set to a divisor of the maximum time between\n\ -frames in an animation."; +/*[clinic input] +_tkinter.getbusywaitinterval -> int -static PyObject * -Tkinter_getbusywaitinterval(PyObject *self, PyObject *args) +Return the current busy-wait interval between successive calls to Tcl_DoOneEvent in a threaded Python interpreter. +[clinic start generated code]*/ + +static int +_tkinter_getbusywaitinterval_impl(PyModuleDef *module) +/*[clinic end generated code: output=9d09eee026e96971 input=a695878d2d576a84]*/ { - return PyLong_FromLong(Tkinter_busywaitinterval); + return Tkinter_busywaitinterval; } -static char getbusywaitinterval_doc[] = -"getbusywaitinterval() -> int\n\ -\n\ -Return the current busy-wait interval between successive\n\ -calls to Tcl_DoOneEvent in a threaded Python interpreter."; +#include "clinic/_tkinter.c.h" + +static PyMethodDef Tktt_methods[] = +{ + _TKINTER_TKTIMERTOKEN_DELETETIMERHANDLER_METHODDEF + {NULL, NULL} +}; + +static PyMethodDef Tkapp_methods[] = +{ + _TKINTER_TKAPP_WILLDISPATCH_METHODDEF + {"wantobjects", Tkapp_WantObjects, METH_VARARGS}, + {"call", Tkapp_Call, METH_VARARGS}, + _TKINTER_TKAPP_EVAL_METHODDEF + _TKINTER_TKAPP_EVALFILE_METHODDEF + _TKINTER_TKAPP_RECORD_METHODDEF + _TKINTER_TKAPP_ADDERRINFO_METHODDEF + {"setvar", Tkapp_SetVar, METH_VARARGS}, + {"globalsetvar", Tkapp_GlobalSetVar, METH_VARARGS}, + {"getvar", Tkapp_GetVar, METH_VARARGS}, + {"globalgetvar", Tkapp_GlobalGetVar, METH_VARARGS}, + {"unsetvar", Tkapp_UnsetVar, METH_VARARGS}, + {"globalunsetvar", Tkapp_GlobalUnsetVar, METH_VARARGS}, + _TKINTER_TKAPP_GETINT_METHODDEF + _TKINTER_TKAPP_GETDOUBLE_METHODDEF + _TKINTER_TKAPP_GETBOOLEAN_METHODDEF + _TKINTER_TKAPP_EXPRSTRING_METHODDEF + _TKINTER_TKAPP_EXPRLONG_METHODDEF + _TKINTER_TKAPP_EXPRDOUBLE_METHODDEF + _TKINTER_TKAPP_EXPRBOOLEAN_METHODDEF + _TKINTER_TKAPP_SPLITLIST_METHODDEF + _TKINTER_TKAPP_SPLIT_METHODDEF + _TKINTER_TKAPP_CREATECOMMAND_METHODDEF + _TKINTER_TKAPP_DELETECOMMAND_METHODDEF + _TKINTER_TKAPP_CREATEFILEHANDLER_METHODDEF + _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF + _TKINTER_TKAPP_CREATETIMERHANDLER_METHODDEF + _TKINTER_TKAPP_MAINLOOP_METHODDEF + _TKINTER_TKAPP_DOONEEVENT_METHODDEF + _TKINTER_TKAPP_QUIT_METHODDEF + _TKINTER_TKAPP_INTERPADDR_METHODDEF + _TKINTER_TKAPP_LOADTK_METHODDEF + {NULL, NULL} +}; static PyMethodDef moduleMethods[] = { - {"_flatten", Tkinter_Flatten, METH_VARARGS}, - {"create", Tkinter_Create, METH_VARARGS}, - {"setbusywaitinterval",Tkinter_setbusywaitinterval, METH_VARARGS, - setbusywaitinterval_doc}, - {"getbusywaitinterval",(PyCFunction)Tkinter_getbusywaitinterval, - METH_NOARGS, getbusywaitinterval_doc}, + _TKINTER__FLATTEN_METHODDEF + _TKINTER_CREATE_METHODDEF + _TKINTER_SETBUSYWAITINTERVAL_METHODDEF + _TKINTER_GETBUSYWAITINTERVAL_METHODDEF {NULL, NULL} }; diff --git a/Modules/clinic/_tkinter.c.h b/Modules/clinic/_tkinter.c.h new file mode 100644 index 0000000000..7917dec9c4 --- /dev/null +++ b/Modules/clinic/_tkinter.c.h @@ -0,0 +1,624 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_tkinter_tkapp_eval__doc__, +"eval($self, script, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_EVAL_METHODDEF \ + {"eval", (PyCFunction)_tkinter_tkapp_eval, METH_O, _tkinter_tkapp_eval__doc__}, + +static PyObject * +_tkinter_tkapp_eval_impl(TkappObject *self, const char *script); + +static PyObject * +_tkinter_tkapp_eval(TkappObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *script; + + if (!PyArg_Parse(arg, "s:eval", &script)) + goto exit; + return_value = _tkinter_tkapp_eval_impl(self, script); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_evalfile__doc__, +"evalfile($self, fileName, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_EVALFILE_METHODDEF \ + {"evalfile", (PyCFunction)_tkinter_tkapp_evalfile, METH_O, _tkinter_tkapp_evalfile__doc__}, + +static PyObject * +_tkinter_tkapp_evalfile_impl(TkappObject *self, const char *fileName); + +static PyObject * +_tkinter_tkapp_evalfile(TkappObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *fileName; + + if (!PyArg_Parse(arg, "s:evalfile", &fileName)) + goto exit; + return_value = _tkinter_tkapp_evalfile_impl(self, fileName); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_record__doc__, +"record($self, script, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_RECORD_METHODDEF \ + {"record", (PyCFunction)_tkinter_tkapp_record, METH_O, _tkinter_tkapp_record__doc__}, + +static PyObject * +_tkinter_tkapp_record_impl(TkappObject *self, const char *script); + +static PyObject * +_tkinter_tkapp_record(TkappObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *script; + + if (!PyArg_Parse(arg, "s:record", &script)) + goto exit; + return_value = _tkinter_tkapp_record_impl(self, script); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_adderrinfo__doc__, +"adderrinfo($self, msg, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_ADDERRINFO_METHODDEF \ + {"adderrinfo", (PyCFunction)_tkinter_tkapp_adderrinfo, METH_O, _tkinter_tkapp_adderrinfo__doc__}, + +static PyObject * +_tkinter_tkapp_adderrinfo_impl(TkappObject *self, const char *msg); + +static PyObject * +_tkinter_tkapp_adderrinfo(TkappObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *msg; + + if (!PyArg_Parse(arg, "s:adderrinfo", &msg)) + goto exit; + return_value = _tkinter_tkapp_adderrinfo_impl(self, msg); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_getint__doc__, +"getint($self, arg, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_GETINT_METHODDEF \ + {"getint", (PyCFunction)_tkinter_tkapp_getint, METH_O, _tkinter_tkapp_getint__doc__}, + +PyDoc_STRVAR(_tkinter_tkapp_getdouble__doc__, +"getdouble($self, arg, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_GETDOUBLE_METHODDEF \ + {"getdouble", (PyCFunction)_tkinter_tkapp_getdouble, METH_O, _tkinter_tkapp_getdouble__doc__}, + +PyDoc_STRVAR(_tkinter_tkapp_getboolean__doc__, +"getboolean($self, arg, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_GETBOOLEAN_METHODDEF \ + {"getboolean", (PyCFunction)_tkinter_tkapp_getboolean, METH_O, _tkinter_tkapp_getboolean__doc__}, + +PyDoc_STRVAR(_tkinter_tkapp_exprstring__doc__, +"exprstring($self, s, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_EXPRSTRING_METHODDEF \ + {"exprstring", (PyCFunction)_tkinter_tkapp_exprstring, METH_O, _tkinter_tkapp_exprstring__doc__}, + +static PyObject * +_tkinter_tkapp_exprstring_impl(TkappObject *self, const char *s); + +static PyObject * +_tkinter_tkapp_exprstring(TkappObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *s; + + if (!PyArg_Parse(arg, "s:exprstring", &s)) + goto exit; + return_value = _tkinter_tkapp_exprstring_impl(self, s); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_exprlong__doc__, +"exprlong($self, s, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_EXPRLONG_METHODDEF \ + {"exprlong", (PyCFunction)_tkinter_tkapp_exprlong, METH_O, _tkinter_tkapp_exprlong__doc__}, + +static PyObject * +_tkinter_tkapp_exprlong_impl(TkappObject *self, const char *s); + +static PyObject * +_tkinter_tkapp_exprlong(TkappObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *s; + + if (!PyArg_Parse(arg, "s:exprlong", &s)) + goto exit; + return_value = _tkinter_tkapp_exprlong_impl(self, s); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_exprdouble__doc__, +"exprdouble($self, s, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_EXPRDOUBLE_METHODDEF \ + {"exprdouble", (PyCFunction)_tkinter_tkapp_exprdouble, METH_O, _tkinter_tkapp_exprdouble__doc__}, + +static PyObject * +_tkinter_tkapp_exprdouble_impl(TkappObject *self, const char *s); + +static PyObject * +_tkinter_tkapp_exprdouble(TkappObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *s; + + if (!PyArg_Parse(arg, "s:exprdouble", &s)) + goto exit; + return_value = _tkinter_tkapp_exprdouble_impl(self, s); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_exprboolean__doc__, +"exprboolean($self, s, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_EXPRBOOLEAN_METHODDEF \ + {"exprboolean", (PyCFunction)_tkinter_tkapp_exprboolean, METH_O, _tkinter_tkapp_exprboolean__doc__}, + +static PyObject * +_tkinter_tkapp_exprboolean_impl(TkappObject *self, const char *s); + +static PyObject * +_tkinter_tkapp_exprboolean(TkappObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *s; + + if (!PyArg_Parse(arg, "s:exprboolean", &s)) + goto exit; + return_value = _tkinter_tkapp_exprboolean_impl(self, s); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_splitlist__doc__, +"splitlist($self, arg, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_SPLITLIST_METHODDEF \ + {"splitlist", (PyCFunction)_tkinter_tkapp_splitlist, METH_O, _tkinter_tkapp_splitlist__doc__}, + +PyDoc_STRVAR(_tkinter_tkapp_split__doc__, +"split($self, arg, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_SPLIT_METHODDEF \ + {"split", (PyCFunction)_tkinter_tkapp_split, METH_O, _tkinter_tkapp_split__doc__}, + +PyDoc_STRVAR(_tkinter_tkapp_createcommand__doc__, +"createcommand($self, name, func, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_CREATECOMMAND_METHODDEF \ + {"createcommand", (PyCFunction)_tkinter_tkapp_createcommand, METH_VARARGS, _tkinter_tkapp_createcommand__doc__}, + +static PyObject * +_tkinter_tkapp_createcommand_impl(TkappObject *self, const char *name, + PyObject *func); + +static PyObject * +_tkinter_tkapp_createcommand(TkappObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + const char *name; + PyObject *func; + + if (!PyArg_ParseTuple(args, "sO:createcommand", + &name, &func)) + goto exit; + return_value = _tkinter_tkapp_createcommand_impl(self, name, func); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_deletecommand__doc__, +"deletecommand($self, name, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_DELETECOMMAND_METHODDEF \ + {"deletecommand", (PyCFunction)_tkinter_tkapp_deletecommand, METH_O, _tkinter_tkapp_deletecommand__doc__}, + +static PyObject * +_tkinter_tkapp_deletecommand_impl(TkappObject *self, const char *name); + +static PyObject * +_tkinter_tkapp_deletecommand(TkappObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *name; + + if (!PyArg_Parse(arg, "s:deletecommand", &name)) + goto exit; + return_value = _tkinter_tkapp_deletecommand_impl(self, name); + +exit: + return return_value; +} + +#if defined(HAVE_CREATEFILEHANDLER) + +PyDoc_STRVAR(_tkinter_tkapp_createfilehandler__doc__, +"createfilehandler($self, file, mask, func, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_CREATEFILEHANDLER_METHODDEF \ + {"createfilehandler", (PyCFunction)_tkinter_tkapp_createfilehandler, METH_VARARGS, _tkinter_tkapp_createfilehandler__doc__}, + +static PyObject * +_tkinter_tkapp_createfilehandler_impl(TkappObject *self, PyObject *file, + int mask, PyObject *func); + +static PyObject * +_tkinter_tkapp_createfilehandler(TkappObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *file; + int mask; + PyObject *func; + + if (!PyArg_ParseTuple(args, "OiO:createfilehandler", + &file, &mask, &func)) + goto exit; + return_value = _tkinter_tkapp_createfilehandler_impl(self, file, mask, func); + +exit: + return return_value; +} + +#endif /* defined(HAVE_CREATEFILEHANDLER) */ + +#if defined(HAVE_CREATEFILEHANDLER) + +PyDoc_STRVAR(_tkinter_tkapp_deletefilehandler__doc__, +"deletefilehandler($self, file, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF \ + {"deletefilehandler", (PyCFunction)_tkinter_tkapp_deletefilehandler, METH_O, _tkinter_tkapp_deletefilehandler__doc__}, + +#endif /* defined(HAVE_CREATEFILEHANDLER) */ + +PyDoc_STRVAR(_tkinter_tktimertoken_deletetimerhandler__doc__, +"deletetimerhandler($self, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKTIMERTOKEN_DELETETIMERHANDLER_METHODDEF \ + {"deletetimerhandler", (PyCFunction)_tkinter_tktimertoken_deletetimerhandler, METH_NOARGS, _tkinter_tktimertoken_deletetimerhandler__doc__}, + +static PyObject * +_tkinter_tktimertoken_deletetimerhandler_impl(TkttObject *self); + +static PyObject * +_tkinter_tktimertoken_deletetimerhandler(TkttObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _tkinter_tktimertoken_deletetimerhandler_impl(self); +} + +PyDoc_STRVAR(_tkinter_tkapp_createtimerhandler__doc__, +"createtimerhandler($self, milliseconds, func, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_CREATETIMERHANDLER_METHODDEF \ + {"createtimerhandler", (PyCFunction)_tkinter_tkapp_createtimerhandler, METH_VARARGS, _tkinter_tkapp_createtimerhandler__doc__}, + +static PyObject * +_tkinter_tkapp_createtimerhandler_impl(TkappObject *self, int milliseconds, + PyObject *func); + +static PyObject * +_tkinter_tkapp_createtimerhandler(TkappObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + int milliseconds; + PyObject *func; + + if (!PyArg_ParseTuple(args, "iO:createtimerhandler", + &milliseconds, &func)) + goto exit; + return_value = _tkinter_tkapp_createtimerhandler_impl(self, milliseconds, func); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_mainloop__doc__, +"mainloop($self, threshold=0, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_MAINLOOP_METHODDEF \ + {"mainloop", (PyCFunction)_tkinter_tkapp_mainloop, METH_VARARGS, _tkinter_tkapp_mainloop__doc__}, + +static PyObject * +_tkinter_tkapp_mainloop_impl(TkappObject *self, int threshold); + +static PyObject * +_tkinter_tkapp_mainloop(TkappObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + int threshold = 0; + + if (!PyArg_ParseTuple(args, "|i:mainloop", + &threshold)) + goto exit; + return_value = _tkinter_tkapp_mainloop_impl(self, threshold); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_dooneevent__doc__, +"dooneevent($self, flags=0, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_DOONEEVENT_METHODDEF \ + {"dooneevent", (PyCFunction)_tkinter_tkapp_dooneevent, METH_VARARGS, _tkinter_tkapp_dooneevent__doc__}, + +static PyObject * +_tkinter_tkapp_dooneevent_impl(TkappObject *self, int flags); + +static PyObject * +_tkinter_tkapp_dooneevent(TkappObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + int flags = 0; + + if (!PyArg_ParseTuple(args, "|i:dooneevent", + &flags)) + goto exit; + return_value = _tkinter_tkapp_dooneevent_impl(self, flags); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_tkapp_quit__doc__, +"quit($self, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_QUIT_METHODDEF \ + {"quit", (PyCFunction)_tkinter_tkapp_quit, METH_NOARGS, _tkinter_tkapp_quit__doc__}, + +static PyObject * +_tkinter_tkapp_quit_impl(TkappObject *self); + +static PyObject * +_tkinter_tkapp_quit(TkappObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _tkinter_tkapp_quit_impl(self); +} + +PyDoc_STRVAR(_tkinter_tkapp_interpaddr__doc__, +"interpaddr($self, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_INTERPADDR_METHODDEF \ + {"interpaddr", (PyCFunction)_tkinter_tkapp_interpaddr, METH_NOARGS, _tkinter_tkapp_interpaddr__doc__}, + +static PyObject * +_tkinter_tkapp_interpaddr_impl(TkappObject *self); + +static PyObject * +_tkinter_tkapp_interpaddr(TkappObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _tkinter_tkapp_interpaddr_impl(self); +} + +PyDoc_STRVAR(_tkinter_tkapp_loadtk__doc__, +"loadtk($self, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_LOADTK_METHODDEF \ + {"loadtk", (PyCFunction)_tkinter_tkapp_loadtk, METH_NOARGS, _tkinter_tkapp_loadtk__doc__}, + +static PyObject * +_tkinter_tkapp_loadtk_impl(TkappObject *self); + +static PyObject * +_tkinter_tkapp_loadtk(TkappObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _tkinter_tkapp_loadtk_impl(self); +} + +PyDoc_STRVAR(_tkinter_tkapp_willdispatch__doc__, +"willdispatch($self, /)\n" +"--\n" +"\n"); + +#define _TKINTER_TKAPP_WILLDISPATCH_METHODDEF \ + {"willdispatch", (PyCFunction)_tkinter_tkapp_willdispatch, METH_NOARGS, _tkinter_tkapp_willdispatch__doc__}, + +static PyObject * +_tkinter_tkapp_willdispatch_impl(TkappObject *self); + +static PyObject * +_tkinter_tkapp_willdispatch(TkappObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _tkinter_tkapp_willdispatch_impl(self); +} + +PyDoc_STRVAR(_tkinter__flatten__doc__, +"_flatten($module, item, /)\n" +"--\n" +"\n"); + +#define _TKINTER__FLATTEN_METHODDEF \ + {"_flatten", (PyCFunction)_tkinter__flatten, METH_O, _tkinter__flatten__doc__}, + +PyDoc_STRVAR(_tkinter_create__doc__, +"create($module, screenName=None, baseName=None, className=\'Tk\',\n" +" interactive=False, wantobjects=False, wantTk=True, sync=False,\n" +" use=None, /)\n" +"--\n" +"\n" +"\n" +"\n" +" wantTk\n" +" if false, then Tk_Init() doesn\'t get called\n" +" sync\n" +" if true, then pass -sync to wish\n" +" use\n" +" if not None, then pass -use to wish"); + +#define _TKINTER_CREATE_METHODDEF \ + {"create", (PyCFunction)_tkinter_create, METH_VARARGS, _tkinter_create__doc__}, + +static PyObject * +_tkinter_create_impl(PyModuleDef *module, const char *screenName, + const char *baseName, const char *className, + int interactive, int wantobjects, int wantTk, int sync, + const char *use); + +static PyObject * +_tkinter_create(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + const char *screenName = NULL; + const char *baseName = NULL; + const char *className = "Tk"; + int interactive = 0; + int wantobjects = 0; + int wantTk = 1; + int sync = 0; + const char *use = NULL; + + if (!PyArg_ParseTuple(args, "|zssiiiiz:create", + &screenName, &baseName, &className, &interactive, &wantobjects, &wantTk, &sync, &use)) + goto exit; + return_value = _tkinter_create_impl(module, screenName, baseName, className, interactive, wantobjects, wantTk, sync, use); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_setbusywaitinterval__doc__, +"setbusywaitinterval($module, new_val, /)\n" +"--\n" +"\n" +"Set the busy-wait interval in milliseconds between successive calls to Tcl_DoOneEvent in a threaded Python interpreter.\n" +"\n" +"It should be set to a divisor of the maximum time between frames in an animation."); + +#define _TKINTER_SETBUSYWAITINTERVAL_METHODDEF \ + {"setbusywaitinterval", (PyCFunction)_tkinter_setbusywaitinterval, METH_O, _tkinter_setbusywaitinterval__doc__}, + +static PyObject * +_tkinter_setbusywaitinterval_impl(PyModuleDef *module, int new_val); + +static PyObject * +_tkinter_setbusywaitinterval(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + int new_val; + + if (!PyArg_Parse(arg, "i:setbusywaitinterval", &new_val)) + goto exit; + return_value = _tkinter_setbusywaitinterval_impl(module, new_val); + +exit: + return return_value; +} + +PyDoc_STRVAR(_tkinter_getbusywaitinterval__doc__, +"getbusywaitinterval($module, /)\n" +"--\n" +"\n" +"Return the current busy-wait interval between successive calls to Tcl_DoOneEvent in a threaded Python interpreter."); + +#define _TKINTER_GETBUSYWAITINTERVAL_METHODDEF \ + {"getbusywaitinterval", (PyCFunction)_tkinter_getbusywaitinterval, METH_NOARGS, _tkinter_getbusywaitinterval__doc__}, + +static int +_tkinter_getbusywaitinterval_impl(PyModuleDef *module); + +static PyObject * +_tkinter_getbusywaitinterval(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + PyObject *return_value = NULL; + int _return_value; + + _return_value = _tkinter_getbusywaitinterval_impl(module); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +#ifndef _TKINTER_TKAPP_CREATEFILEHANDLER_METHODDEF + #define _TKINTER_TKAPP_CREATEFILEHANDLER_METHODDEF +#endif /* !defined(_TKINTER_TKAPP_CREATEFILEHANDLER_METHODDEF) */ + +#ifndef _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF + #define _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF +#endif /* !defined(_TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF) */ +/*[clinic end generated code: output=6dd667b91cf8addd input=a9049054013a1b77]*/ -- cgit v1.2.1 From 0298496572d9f00f998e3f43cc217e81bf9ef375 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 3 May 2015 15:54:23 +0300 Subject: Issue #20148: Converted the _sre module to Argument Clinic. --- Modules/_sre.c | 702 +++++++++++++++++++++++++++--------------------- Modules/clinic/_sre.c.h | 693 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1084 insertions(+), 311 deletions(-) create mode 100644 Modules/clinic/_sre.c.h (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 8cad1ac270..e3245a08d0 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -258,25 +258,46 @@ data_stack_grow(SRE_STATE* state, Py_ssize_t size) /* see sre.h for object declarations */ static PyObject*pattern_new_match(PatternObject*, SRE_STATE*, Py_ssize_t); -static PyObject*pattern_scanner(PatternObject*, PyObject*, PyObject* kw); +static PyObject *pattern_scanner(PatternObject *, PyObject *, Py_ssize_t, Py_ssize_t); -static PyObject * -sre_codesize(PyObject* self, PyObject *unused) + +/*[clinic input] +module _sre +class _sre.SRE_Pattern "PatternObject *" "&Pattern_Type" +class _sre.SRE_Match "MatchObject *" "&Match_Type" +class _sre.SRE_Scanner "ScannerObject *" "&Scanner_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b0230ec19a0deac8]*/ + +/*[clinic input] +_sre.getcodesize -> int +[clinic start generated code]*/ + +static int +_sre_getcodesize_impl(PyModuleDef *module) +/*[clinic end generated code: output=794f1f98ef4883e5 input=bd6f6ecf4916bb2b]*/ { - return PyLong_FromSize_t(sizeof(SRE_CODE)); + return sizeof(SRE_CODE); } -static PyObject * -sre_getlower(PyObject* self, PyObject* args) +/*[clinic input] +_sre.getlower -> int + + character: int + flags: int + / + +[clinic start generated code]*/ + +static int +_sre_getlower_impl(PyModuleDef *module, int character, int flags) +/*[clinic end generated code: output=5fc3616ae2a4c306 input=087d2f1c44bbca6f]*/ { - int character, flags; - if (!PyArg_ParseTuple(args, "ii", &character, &flags)) - return NULL; if (flags & SRE_FLAG_LOCALE) - return Py_BuildValue("i", sre_lower_locale(character)); + return sre_lower_locale(character); if (flags & SRE_FLAG_UNICODE) - return Py_BuildValue("i", sre_lower_unicode(character)); - return Py_BuildValue("i", sre_lower(character)); + return sre_lower_unicode(character); + return sre_lower(character); } LOCAL(void) @@ -552,27 +573,32 @@ fix_string_param(PyObject *string, PyObject *string2, const char *oldname) return string; } +/*[clinic input] +_sre.SRE_Pattern.match + + string: object = NULL + pos: Py_ssize_t = 0 + endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize + * + pattern: object = NULL + +Matches zero or more characters at the beginning of the string. +[clinic start generated code]*/ + static PyObject * -pattern_match(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos, + PyObject *pattern) +/*[clinic end generated code: output=74b4b1da3bb2d84e input=3d079aa99979b81d]*/ { - static char *_keywords[] = {"string", "pos", "endpos", "pattern", NULL}; - PyObject *string = NULL; - Py_ssize_t pos = 0; - Py_ssize_t endpos = PY_SSIZE_T_MAX; - PyObject *pattern = NULL; SRE_STATE state; Py_ssize_t status; PyObject *match; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "|Onn$O:match", _keywords, - &string, &pos, &endpos, &pattern)) - return NULL; string = fix_string_param(string, pattern, "pattern"); if (!string) return NULL; - string = state_init(&state, (PatternObject *)self, string, pos, endpos); - if (!string) + if (!state_init(&state, (PatternObject *)self, string, pos, endpos)) return NULL; state.ptr = state.start; @@ -592,27 +618,33 @@ pattern_match(PatternObject *self, PyObject *args, PyObject *kwargs) return match; } -static PyObject* -pattern_fullmatch(PatternObject* self, PyObject* args, PyObject* kw) +/*[clinic input] +_sre.SRE_Pattern.fullmatch + + string: object = NULL + pos: Py_ssize_t = 0 + endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize + * + pattern: object = NULL + +Matches against all of the string +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos, + PyObject *pattern) +/*[clinic end generated code: output=1c98bc5da744ea94 input=d4228606cc12580f]*/ { SRE_STATE state; Py_ssize_t status; PyObject *match; - PyObject *string = NULL, *string2 = NULL; - Py_ssize_t start = 0; - Py_ssize_t end = PY_SSIZE_T_MAX; - static char* kwlist[] = { "string", "pos", "endpos", "pattern", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kw, "|Onn$O:fullmatch", kwlist, - &string, &start, &end, &string2)) - return NULL; - - string = fix_string_param(string, string2, "pattern"); + string = fix_string_param(string, pattern, "pattern"); if (!string) return NULL; - string = state_init(&state, self, string, start, end); - if (!string) + if (!state_init(&state, self, string, pos, endpos)) return NULL; state.ptr = state.start; @@ -632,27 +664,35 @@ pattern_fullmatch(PatternObject* self, PyObject* args, PyObject* kw) return match; } -static PyObject* -pattern_search(PatternObject* self, PyObject* args, PyObject* kw) +/*[clinic input] +_sre.SRE_Pattern.search + + string: object = NULL + pos: Py_ssize_t = 0 + endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize + * + pattern: object = NULL + +Scan through string looking for a match, and return a corresponding match object instance. + +Return None if no position in the string matches. +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Pattern_search_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos, + PyObject *pattern) +/*[clinic end generated code: output=3839394a18e5ea4f input=dab42720f4be3a4b]*/ { SRE_STATE state; Py_ssize_t status; PyObject *match; - PyObject *string = NULL, *string2 = NULL; - Py_ssize_t start = 0; - Py_ssize_t end = PY_SSIZE_T_MAX; - static char* kwlist[] = { "string", "pos", "endpos", "pattern", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kw, "|Onn$O:search", kwlist, - &string, &start, &end, &string2)) - return NULL; - - string = fix_string_param(string, string2, "pattern"); + string = fix_string_param(string, pattern, "pattern"); if (!string) return NULL; - string = state_init(&state, self, string, start, end); - if (!string) + if (!state_init(&state, self, string, pos, endpos)) return NULL; TRACE(("|%p|%p|SEARCH\n", PatternObject_GetCode(self), state.ptr)); @@ -718,28 +758,34 @@ deepcopy(PyObject** object, PyObject* memo) } #endif -static PyObject* -pattern_findall(PatternObject* self, PyObject* args, PyObject* kw) +/*[clinic input] +_sre.SRE_Pattern.findall + + string: object = NULL + pos: Py_ssize_t = 0 + endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize + * + source: object = NULL + +Return a list of all non-overlapping matches of pattern in string. +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Pattern_findall_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos, + PyObject *source) +/*[clinic end generated code: output=51295498b300639d input=df688355c056b9de]*/ { SRE_STATE state; PyObject* list; Py_ssize_t status; Py_ssize_t i, b, e; - PyObject *string = NULL, *string2 = NULL; - Py_ssize_t start = 0; - Py_ssize_t end = PY_SSIZE_T_MAX; - static char* kwlist[] = { "string", "pos", "endpos", "source", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kw, "|Onn$O:findall", kwlist, - &string, &start, &end, &string2)) - return NULL; - - string = fix_string_param(string, string2, "source"); + string = fix_string_param(string, source, "source"); if (!string) return NULL; - string = state_init(&state, self, string, start, end); - if (!string) + if (!state_init(&state, self, string, pos, endpos)) return NULL; list = PyList_New(0); @@ -819,14 +865,28 @@ error: } -static PyObject* -pattern_finditer(PatternObject* pattern, PyObject* args, PyObject* kw) +/*[clinic input] +_sre.SRE_Pattern.finditer + + string: object + pos: Py_ssize_t = 0 + endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize + +Return an iterator over all non-overlapping matches for the RE pattern in string. + +For each match, the iterator returns a match object. +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Pattern_finditer_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos) +/*[clinic end generated code: output=0bbb1a0aeb38bb14 input=612aab69e9fe08e4]*/ { PyObject* scanner; PyObject* search; PyObject* iterator; - scanner = pattern_scanner(pattern, args, kw); + scanner = pattern_scanner(self, string, pos, endpos); if (!scanner) return NULL; @@ -841,8 +901,38 @@ pattern_finditer(PatternObject* pattern, PyObject* args, PyObject* kw) return iterator; } -static PyObject* -pattern_split(PatternObject* self, PyObject* args, PyObject* kw) +/*[clinic input] +_sre.SRE_Pattern.scanner + + string: object + pos: Py_ssize_t = 0 + endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize + +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Pattern_scanner_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos) +/*[clinic end generated code: output=54ea548aed33890b input=3aacdbde77a3a637]*/ +{ + return pattern_scanner(self, string, pos, endpos); +} + +/*[clinic input] +_sre.SRE_Pattern.split + + string: object = NULL + maxsplit: Py_ssize_t = 0 + * + source: object = NULL + +Split string by the occurrences of pattern. +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Pattern_split_impl(PatternObject *self, PyObject *string, + Py_ssize_t maxsplit, PyObject *source) +/*[clinic end generated code: output=20bac2ff55b9f84c input=41e0b2e35e599d7b]*/ { SRE_STATE state; PyObject* list; @@ -852,14 +942,7 @@ pattern_split(PatternObject* self, PyObject* args, PyObject* kw) Py_ssize_t i; void* last; - PyObject *string = NULL, *string2 = NULL; - Py_ssize_t maxsplit = 0; - static char* kwlist[] = { "string", "maxsplit", "source", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kw, "|On$O:split", kwlist, - &string, &maxsplit, &string2)) - return NULL; - - string = fix_string_param(string, string2, "source"); + string = fix_string_param(string, source, "source"); if (!string) return NULL; @@ -876,8 +959,7 @@ pattern_split(PatternObject* self, PyObject* args, PyObject* kw) return NULL; } - string = state_init(&state, self, string, 0, PY_SSIZE_T_MAX); - if (!string) + if (!state_init(&state, self, string, 0, PY_SSIZE_T_MAX)) return NULL; list = PyList_New(0); @@ -1021,8 +1103,7 @@ pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string, } } - string = state_init(&state, self, string, 0, PY_SSIZE_T_MAX); - if (!string) { + if (!state_init(&state, self, string, 0, PY_SSIZE_T_MAX)) { Py_DECREF(filter); return NULL; } @@ -1162,36 +1243,50 @@ error: } -static PyObject* -pattern_sub(PatternObject* self, PyObject* args, PyObject* kw) -{ - PyObject* ptemplate; - PyObject* string; - Py_ssize_t count = 0; - static char* kwlist[] = { "repl", "string", "count", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|n:sub", kwlist, - &ptemplate, &string, &count)) - return NULL; +/*[clinic input] +_sre.SRE_Pattern.sub + + repl: object + string: object + count: Py_ssize_t = 0 + +Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl. +[clinic start generated code]*/ - return pattern_subx(self, ptemplate, string, count, 0); +static PyObject * +_sre_SRE_Pattern_sub_impl(PatternObject *self, PyObject *repl, + PyObject *string, Py_ssize_t count) +/*[clinic end generated code: output=1dbf2ec3479cba00 input=c53d70be0b3caf86]*/ +{ + return pattern_subx(self, repl, string, count, 0); } -static PyObject* -pattern_subn(PatternObject* self, PyObject* args, PyObject* kw) -{ - PyObject* ptemplate; - PyObject* string; - Py_ssize_t count = 0; - static char* kwlist[] = { "repl", "string", "count", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|n:subn", kwlist, - &ptemplate, &string, &count)) - return NULL; +/*[clinic input] +_sre.SRE_Pattern.subn + + repl: object + string: object + count: Py_ssize_t = 0 + +Return the tuple (new_string, number_of_subs_made) found by replacing the leftmost non-overlapping occurrences of pattern with the replacement repl. +[clinic start generated code]*/ - return pattern_subx(self, ptemplate, string, count, 1); +static PyObject * +_sre_SRE_Pattern_subn_impl(PatternObject *self, PyObject *repl, + PyObject *string, Py_ssize_t count) +/*[clinic end generated code: output=0d9522cd529e9728 input=e7342d7ce6083577]*/ +{ + return pattern_subx(self, repl, string, count, 1); } -static PyObject* -pattern_copy(PatternObject* self, PyObject *unused) +/*[clinic input] +_sre.SRE_Pattern.__copy__ + +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Pattern___copy___impl(PatternObject *self) +/*[clinic end generated code: output=85dedc2db1bd8694 input=a730a59d863bc9f5]*/ { #ifdef USE_BUILTIN_COPY PatternObject* copy; @@ -1218,8 +1313,16 @@ pattern_copy(PatternObject* self, PyObject *unused) #endif } -static PyObject* -pattern_deepcopy(PatternObject* self, PyObject* memo) +/*[clinic input] +_sre.SRE_Pattern.__deepcopy__ + + memo: object + +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Pattern___deepcopy___impl(PatternObject *self, PyObject *memo) +/*[clinic end generated code: output=75efe69bd12c5d7d input=3959719482c07f70]*/ { #ifdef USE_BUILTIN_COPY PatternObject* copy; @@ -1321,68 +1424,9 @@ done: return result; } -PyDoc_STRVAR(pattern_match_doc, -"match(string[, pos[, endpos]]) -> match object or None.\n\ - Matches zero or more characters at the beginning of the string"); - -PyDoc_STRVAR(pattern_fullmatch_doc, -"fullmatch(string[, pos[, endpos]]) -> match object or None.\n\ - Matches against all of the string"); - -PyDoc_STRVAR(pattern_search_doc, -"search(string[, pos[, endpos]]) -> match object or None.\n\ - Scan through string looking for a match, and return a corresponding\n\ - match object instance. Return None if no position in the string matches."); - -PyDoc_STRVAR(pattern_split_doc, -"split(string[, maxsplit = 0]) -> list.\n\ - Split string by the occurrences of pattern."); - -PyDoc_STRVAR(pattern_findall_doc, -"findall(string[, pos[, endpos]]) -> list.\n\ - Return a list of all non-overlapping matches of pattern in string."); - -PyDoc_STRVAR(pattern_finditer_doc, -"finditer(string[, pos[, endpos]]) -> iterator.\n\ - Return an iterator over all non-overlapping matches for the \n\ - RE pattern in string. For each match, the iterator returns a\n\ - match object."); - -PyDoc_STRVAR(pattern_sub_doc, -"sub(repl, string[, count = 0]) -> newstring.\n\ - Return the string obtained by replacing the leftmost non-overlapping\n\ - occurrences of pattern in string by the replacement repl."); - -PyDoc_STRVAR(pattern_subn_doc, -"subn(repl, string[, count = 0]) -> (newstring, number of subs)\n\ - Return the tuple (new_string, number_of_subs_made) found by replacing\n\ - the leftmost non-overlapping occurrences of pattern with the\n\ - replacement repl."); - PyDoc_STRVAR(pattern_doc, "Compiled regular expression objects"); -static PyMethodDef pattern_methods[] = { - {"match", (PyCFunction) pattern_match, METH_VARARGS|METH_KEYWORDS, - pattern_match_doc}, - {"fullmatch", (PyCFunction) pattern_fullmatch, METH_VARARGS|METH_KEYWORDS, - pattern_fullmatch_doc}, - {"search", (PyCFunction) pattern_search, METH_VARARGS|METH_KEYWORDS, - pattern_search_doc}, - {"sub", (PyCFunction) pattern_sub, METH_VARARGS|METH_KEYWORDS, - pattern_sub_doc}, - {"subn", (PyCFunction) pattern_subn, METH_VARARGS|METH_KEYWORDS, - pattern_subn_doc}, - {"split", (PyCFunction) pattern_split, METH_VARARGS|METH_KEYWORDS, - pattern_split_doc}, - {"findall", (PyCFunction) pattern_findall, METH_VARARGS|METH_KEYWORDS, - pattern_findall_doc}, - {"finditer", (PyCFunction) pattern_finditer, METH_VARARGS|METH_KEYWORDS, - pattern_finditer_doc}, - {"scanner", (PyCFunction) pattern_scanner, METH_VARARGS|METH_KEYWORDS}, - {"__copy__", (PyCFunction) pattern_copy, METH_NOARGS}, - {"__deepcopy__", (PyCFunction) pattern_deepcopy, METH_O}, - {NULL, NULL} -}; +static PyMethodDef pattern_methods[]; /* PatternObject's 'groupindex' method. */ static PyObject * @@ -1439,26 +1483,29 @@ static PyTypeObject Pattern_Type = { static int _validate(PatternObject *self); /* Forward */ +/*[clinic input] +_sre.compile + + pattern: object + flags: int + code: object(subclass_of='&PyList_Type') + groups: Py_ssize_t + groupindex: object + indexgroup: object + +[clinic start generated code]*/ + static PyObject * -_compile(PyObject* self_, PyObject* args) +_sre_compile_impl(PyModuleDef *module, PyObject *pattern, int flags, + PyObject *code, Py_ssize_t groups, PyObject *groupindex, + PyObject *indexgroup) +/*[clinic end generated code: output=3004b293730bf309 input=7d059ec8ae1edb85]*/ { /* "compile" pattern descriptor to pattern object */ PatternObject* self; Py_ssize_t i, n; - PyObject* pattern; - int flags = 0; - PyObject* code; - Py_ssize_t groups = 0; - PyObject* groupindex = NULL; - PyObject* indexgroup = NULL; - - if (!PyArg_ParseTuple(args, "OiO!nOO", &pattern, &flags, - &PyList_Type, &code, &groups, - &groupindex, &indexgroup)) - return NULL; - n = PyList_GET_SIZE(code); /* coverity[ampersand_in_size] */ self = PyObject_NEW_VAR(PatternObject, &Pattern_Type, n); @@ -2071,13 +2118,22 @@ match_getslice(MatchObject* self, PyObject* index, PyObject* def) return match_getslice_by_index(self, match_getindex(self, index), def); } -static PyObject* -match_expand(MatchObject* self, PyObject* ptemplate) +/*[clinic input] +_sre.SRE_Match.expand + + template: object + +Return the string obtained by doing backslash substitution on the string template, as done by the sub() method. +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Match_expand_impl(MatchObject *self, PyObject *template) +/*[clinic end generated code: output=931b58ccc323c3a1 input=4bfdb22c2f8b146a]*/ { /* delegate to Python code */ return call( SRE_PY_MODULE, "_expand", - PyTuple_Pack(3, self->pattern, self, ptemplate) + PyTuple_Pack(3, self->pattern, self, template) ); } @@ -2116,24 +2172,29 @@ match_group(MatchObject* self, PyObject* args) return result; } -static PyObject* -match_groups(MatchObject* self, PyObject* args, PyObject* kw) +/*[clinic input] +_sre.SRE_Match.groups + + default: object = None + Is used for groups that did not participate in the match. + +Return a tuple containing all the subgroups of the match, from 1. +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Match_groups_impl(MatchObject *self, PyObject *default_value) +/*[clinic end generated code: output=daf8e2641537238a input=bb069ef55dabca91]*/ { PyObject* result; Py_ssize_t index; - PyObject* def = Py_None; - static char* kwlist[] = { "default", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kw, "|O:groups", kwlist, &def)) - return NULL; - result = PyTuple_New(self->groups-1); if (!result) return NULL; for (index = 1; index < self->groups; index++) { PyObject* item; - item = match_getslice_by_index(self, index, def); + item = match_getslice_by_index(self, index, default_value); if (!item) { Py_DECREF(result); return NULL; @@ -2144,18 +2205,23 @@ match_groups(MatchObject* self, PyObject* args, PyObject* kw) return result; } -static PyObject* -match_groupdict(MatchObject* self, PyObject* args, PyObject* kw) +/*[clinic input] +_sre.SRE_Match.groupdict + + default: object = None + Is used for groups that did not participate in the match. + +Return a dictionary containing all the named subgroups of the match, keyed by the subgroup name. +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Match_groupdict_impl(MatchObject *self, PyObject *default_value) +/*[clinic end generated code: output=29917c9073e41757 input=0ded7960b23780aa]*/ { PyObject* result; PyObject* keys; Py_ssize_t index; - PyObject* def = Py_None; - static char* kwlist[] = { "default", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kw, "|O:groupdict", kwlist, &def)) - return NULL; - result = PyDict_New(); if (!result || !self->pattern->groupindex) return result; @@ -2171,7 +2237,7 @@ match_groupdict(MatchObject* self, PyObject* args, PyObject* kw) key = PyList_GET_ITEM(keys, index); if (!key) goto failed; - value = match_getslice(self, key, def); + value = match_getslice(self, key, default_value); if (!value) { Py_DECREF(key); goto failed; @@ -2192,50 +2258,58 @@ failed: return NULL; } -static PyObject* -match_start(MatchObject* self, PyObject* args) -{ - Py_ssize_t index; +/*[clinic input] +_sre.SRE_Match.start -> Py_ssize_t - PyObject* index_ = NULL; - if (!PyArg_UnpackTuple(args, "start", 0, 1, &index_)) - return NULL; + group: object(c_default="NULL") = 0 + / - index = match_getindex(self, index_); +Return index of the start of the substring matched by group. +[clinic start generated code]*/ + +static Py_ssize_t +_sre_SRE_Match_start_impl(MatchObject *self, PyObject *group) +/*[clinic end generated code: output=3f6e7f9df2fb5201 input=ced8e4ed4b33ee6c]*/ +{ + Py_ssize_t index = match_getindex(self, group); if (index < 0 || index >= self->groups) { PyErr_SetString( PyExc_IndexError, "no such group" ); - return NULL; + return -1; } /* mark is -1 if group is undefined */ - return PyLong_FromSsize_t(self->mark[index*2]); + return self->mark[index*2]; } -static PyObject* -match_end(MatchObject* self, PyObject* args) -{ - Py_ssize_t index; +/*[clinic input] +_sre.SRE_Match.end -> Py_ssize_t - PyObject* index_ = NULL; - if (!PyArg_UnpackTuple(args, "end", 0, 1, &index_)) - return NULL; + group: object(c_default="NULL") = 0 + / - index = match_getindex(self, index_); +Return index of the end of the substring matched by group. +[clinic start generated code]*/ + +static Py_ssize_t +_sre_SRE_Match_end_impl(MatchObject *self, PyObject *group) +/*[clinic end generated code: output=f4240b09911f7692 input=1b799560c7f3d7e6]*/ +{ + Py_ssize_t index = match_getindex(self, group); if (index < 0 || index >= self->groups) { PyErr_SetString( PyExc_IndexError, "no such group" ); - return NULL; + return -1; } /* mark is -1 if group is undefined */ - return PyLong_FromSsize_t(self->mark[index*2+1]); + return self->mark[index*2+1]; } LOCAL(PyObject*) @@ -2265,16 +2339,20 @@ _pair(Py_ssize_t i1, Py_ssize_t i2) return NULL; } -static PyObject* -match_span(MatchObject* self, PyObject* args) -{ - Py_ssize_t index; +/*[clinic input] +_sre.SRE_Match.span - PyObject* index_ = NULL; - if (!PyArg_UnpackTuple(args, "span", 0, 1, &index_)) - return NULL; + group: object(c_default="NULL") = 0 + / - index = match_getindex(self, index_); +For MatchObject m, return the 2-tuple (m.start(group), m.end(group)). +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Match_span_impl(MatchObject *self, PyObject *group) +/*[clinic end generated code: output=f02ae40594d14fe6 input=49092b6008d176d3]*/ +{ + Py_ssize_t index = match_getindex(self, group); if (index < 0 || index >= self->groups) { PyErr_SetString( @@ -2314,8 +2392,14 @@ match_regs(MatchObject* self) return regs; } -static PyObject* -match_copy(MatchObject* self, PyObject *unused) +/*[clinic input] +_sre.SRE_Match.__copy__ + +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Match___copy___impl(MatchObject *self) +/*[clinic end generated code: output=a779c5fc8b5b4eb4 input=3bb4d30b6baddb5b]*/ { #ifdef USE_BUILTIN_COPY MatchObject* copy; @@ -2345,8 +2429,16 @@ match_copy(MatchObject* self, PyObject *unused) #endif } -static PyObject* -match_deepcopy(MatchObject* self, PyObject* memo) +/*[clinic input] +_sre.SRE_Match.__deepcopy__ + + memo: object + +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Match___deepcopy___impl(MatchObject *self, PyObject *memo) +/*[clinic end generated code: output=2b657578eb03f4a3 input=b65b72489eac64cc]*/ { #ifdef USE_BUILTIN_COPY MatchObject* copy; @@ -2377,49 +2469,7 @@ PyDoc_STRVAR(match_group_doc, Return subgroup(s) of the match by indices or names.\n\ For 0 returns the entire match."); -PyDoc_STRVAR(match_start_doc, -"start([group=0]) -> int.\n\ - Return index of the start of the substring matched by group."); - -PyDoc_STRVAR(match_end_doc, -"end([group=0]) -> int.\n\ - Return index of the end of the substring matched by group."); - -PyDoc_STRVAR(match_span_doc, -"span([group]) -> tuple.\n\ - For MatchObject m, return the 2-tuple (m.start(group), m.end(group))."); - -PyDoc_STRVAR(match_groups_doc, -"groups([default=None]) -> tuple.\n\ - Return a tuple containing all the subgroups of the match, from 1.\n\ - The default argument is used for groups\n\ - that did not participate in the match"); - -PyDoc_STRVAR(match_groupdict_doc, -"groupdict([default=None]) -> dict.\n\ - Return a dictionary containing all the named subgroups of the match,\n\ - keyed by the subgroup name. The default argument is used for groups\n\ - that did not participate in the match"); - -PyDoc_STRVAR(match_expand_doc, -"expand(template) -> str.\n\ - Return the string obtained by doing backslash substitution\n\ - on the string template, as done by the sub() method."); - -static PyMethodDef match_methods[] = { - {"group", (PyCFunction) match_group, METH_VARARGS, match_group_doc}, - {"start", (PyCFunction) match_start, METH_VARARGS, match_start_doc}, - {"end", (PyCFunction) match_end, METH_VARARGS, match_end_doc}, - {"span", (PyCFunction) match_span, METH_VARARGS, match_span_doc}, - {"groups", (PyCFunction) match_groups, METH_VARARGS|METH_KEYWORDS, - match_groups_doc}, - {"groupdict", (PyCFunction) match_groupdict, METH_VARARGS|METH_KEYWORDS, - match_groupdict_doc}, - {"expand", (PyCFunction) match_expand, METH_O, match_expand_doc}, - {"__copy__", (PyCFunction) match_copy, METH_NOARGS}, - {"__deepcopy__", (PyCFunction) match_deepcopy, METH_O}, - {NULL, NULL} -}; +static PyMethodDef match_methods[]; static PyObject * match_lastindex_get(MatchObject *self) @@ -2597,8 +2647,14 @@ scanner_dealloc(ScannerObject* self) PyObject_DEL(self); } -static PyObject* -scanner_match(ScannerObject* self, PyObject *unused) +/*[clinic input] +_sre.SRE_Scanner.match + +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Scanner_match_impl(ScannerObject *self) +/*[clinic end generated code: output=936b30c63d4b81eb input=881a0154f8c13d9a]*/ { SRE_STATE* state = &self->state; PyObject* match; @@ -2624,8 +2680,14 @@ scanner_match(ScannerObject* self, PyObject *unused) } -static PyObject* -scanner_search(ScannerObject* self, PyObject *unused) +/*[clinic input] +_sre.SRE_Scanner.search + +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Scanner_search_impl(ScannerObject *self) +/*[clinic end generated code: output=7dc211986088f025 input=161223ee92ef9270]*/ { SRE_STATE* state = &self->state; PyObject* match; @@ -2650,11 +2712,7 @@ scanner_search(ScannerObject* self, PyObject *unused) return match; } -static PyMethodDef scanner_methods[] = { - {"match", (PyCFunction) scanner_match, METH_NOARGS}, - {"search", (PyCFunction) scanner_search, METH_NOARGS}, - {NULL, NULL} -}; +static PyMethodDef scanner_methods[]; #define SCAN_OFF(x) offsetof(ScannerObject, x) static PyMemberDef scanner_members[] = { @@ -2694,47 +2752,69 @@ static PyTypeObject Scanner_Type = { 0, /* tp_getset */ }; -static PyObject* -pattern_scanner(PatternObject* pattern, PyObject* args, PyObject* kw) +static PyObject * +pattern_scanner(PatternObject *self, PyObject *string, Py_ssize_t pos, Py_ssize_t endpos) { - /* create search state object */ - - ScannerObject* self; - - PyObject *string = NULL, *string2 = NULL; - Py_ssize_t start = 0; - Py_ssize_t end = PY_SSIZE_T_MAX; - static char* kwlist[] = { "string", "pos", "endpos", "source", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kw, "|Onn$O:scanner", kwlist, - &string, &start, &end, &string2)) - return NULL; - - string = fix_string_param(string, string2, "source"); - if (!string) - return NULL; + ScannerObject* scanner; /* create scanner object */ - self = PyObject_NEW(ScannerObject, &Scanner_Type); - if (!self) + scanner = PyObject_NEW(ScannerObject, &Scanner_Type); + if (!scanner) return NULL; - self->pattern = NULL; + scanner->pattern = NULL; - string = state_init(&self->state, pattern, string, start, end); - if (!string) { - Py_DECREF(self); + /* create search state object */ + if (!state_init(&scanner->state, self, string, pos, endpos)) { + Py_DECREF(scanner); return NULL; } - Py_INCREF(pattern); - self->pattern = (PyObject*) pattern; + Py_INCREF(self); + scanner->pattern = (PyObject*) self; - return (PyObject*) self; + return (PyObject*) scanner; } +#include "clinic/_sre.c.h" + +static PyMethodDef pattern_methods[] = { + _SRE_SRE_PATTERN_MATCH_METHODDEF + _SRE_SRE_PATTERN_FULLMATCH_METHODDEF + _SRE_SRE_PATTERN_SEARCH_METHODDEF + _SRE_SRE_PATTERN_SUB_METHODDEF + _SRE_SRE_PATTERN_SUBN_METHODDEF + _SRE_SRE_PATTERN_FINDALL_METHODDEF + _SRE_SRE_PATTERN_SPLIT_METHODDEF + _SRE_SRE_PATTERN_FINDITER_METHODDEF + _SRE_SRE_PATTERN_SCANNER_METHODDEF + _SRE_SRE_PATTERN___COPY___METHODDEF + _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF + {NULL, NULL} +}; + +static PyMethodDef match_methods[] = { + {"group", (PyCFunction) match_group, METH_VARARGS, match_group_doc}, + _SRE_SRE_MATCH_START_METHODDEF + _SRE_SRE_MATCH_END_METHODDEF + _SRE_SRE_MATCH_SPAN_METHODDEF + _SRE_SRE_MATCH_GROUPS_METHODDEF + _SRE_SRE_MATCH_GROUPDICT_METHODDEF + _SRE_SRE_MATCH_EXPAND_METHODDEF + _SRE_SRE_MATCH___COPY___METHODDEF + _SRE_SRE_MATCH___DEEPCOPY___METHODDEF + {NULL, NULL} +}; + +static PyMethodDef scanner_methods[] = { + _SRE_SRE_SCANNER_MATCH_METHODDEF + _SRE_SRE_SCANNER_SEARCH_METHODDEF + {NULL, NULL} +}; + static PyMethodDef _functions[] = { - {"compile", _compile, METH_VARARGS}, - {"getcodesize", sre_codesize, METH_NOARGS}, - {"getlower", sre_getlower, METH_VARARGS}, + _SRE_COMPILE_METHODDEF + _SRE_GETCODESIZE_METHODDEF + _SRE_GETLOWER_METHODDEF {NULL, NULL} }; diff --git a/Modules/clinic/_sre.c.h b/Modules/clinic/_sre.c.h new file mode 100644 index 0000000000..6de470847e --- /dev/null +++ b/Modules/clinic/_sre.c.h @@ -0,0 +1,693 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_sre_getcodesize__doc__, +"getcodesize($module, /)\n" +"--\n" +"\n"); + +#define _SRE_GETCODESIZE_METHODDEF \ + {"getcodesize", (PyCFunction)_sre_getcodesize, METH_NOARGS, _sre_getcodesize__doc__}, + +static int +_sre_getcodesize_impl(PyModuleDef *module); + +static PyObject * +_sre_getcodesize(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + PyObject *return_value = NULL; + int _return_value; + + _return_value = _sre_getcodesize_impl(module); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_getlower__doc__, +"getlower($module, character, flags, /)\n" +"--\n" +"\n"); + +#define _SRE_GETLOWER_METHODDEF \ + {"getlower", (PyCFunction)_sre_getlower, METH_VARARGS, _sre_getlower__doc__}, + +static int +_sre_getlower_impl(PyModuleDef *module, int character, int flags); + +static PyObject * +_sre_getlower(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int character; + int flags; + int _return_value; + + if (!PyArg_ParseTuple(args, "ii:getlower", + &character, &flags)) + goto exit; + _return_value = _sre_getlower_impl(module, character, flags); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong((long)_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Pattern_match__doc__, +"match($self, /, string=None, pos=0, endpos=sys.maxsize, *, pattern=None)\n" +"--\n" +"\n" +"Matches zero or more characters at the beginning of the string."); + +#define _SRE_SRE_PATTERN_MATCH_METHODDEF \ + {"match", (PyCFunction)_sre_SRE_Pattern_match, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_match__doc__}, + +static PyObject * +_sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos, + PyObject *pattern); + +static PyObject * +_sre_SRE_Pattern_match(PatternObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", "pos", "endpos", "pattern", NULL}; + PyObject *string = NULL; + Py_ssize_t pos = 0; + Py_ssize_t endpos = PY_SSIZE_T_MAX; + PyObject *pattern = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:match", _keywords, + &string, &pos, &endpos, &pattern)) + goto exit; + return_value = _sre_SRE_Pattern_match_impl(self, string, pos, endpos, pattern); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Pattern_fullmatch__doc__, +"fullmatch($self, /, string=None, pos=0, endpos=sys.maxsize, *,\n" +" pattern=None)\n" +"--\n" +"\n" +"Matches against all of the string"); + +#define _SRE_SRE_PATTERN_FULLMATCH_METHODDEF \ + {"fullmatch", (PyCFunction)_sre_SRE_Pattern_fullmatch, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_fullmatch__doc__}, + +static PyObject * +_sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos, + PyObject *pattern); + +static PyObject * +_sre_SRE_Pattern_fullmatch(PatternObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", "pos", "endpos", "pattern", NULL}; + PyObject *string = NULL; + Py_ssize_t pos = 0; + Py_ssize_t endpos = PY_SSIZE_T_MAX; + PyObject *pattern = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:fullmatch", _keywords, + &string, &pos, &endpos, &pattern)) + goto exit; + return_value = _sre_SRE_Pattern_fullmatch_impl(self, string, pos, endpos, pattern); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Pattern_search__doc__, +"search($self, /, string=None, pos=0, endpos=sys.maxsize, *,\n" +" pattern=None)\n" +"--\n" +"\n" +"Scan through string looking for a match, and return a corresponding match object instance.\n" +"\n" +"Return None if no position in the string matches."); + +#define _SRE_SRE_PATTERN_SEARCH_METHODDEF \ + {"search", (PyCFunction)_sre_SRE_Pattern_search, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_search__doc__}, + +static PyObject * +_sre_SRE_Pattern_search_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos, + PyObject *pattern); + +static PyObject * +_sre_SRE_Pattern_search(PatternObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", "pos", "endpos", "pattern", NULL}; + PyObject *string = NULL; + Py_ssize_t pos = 0; + Py_ssize_t endpos = PY_SSIZE_T_MAX; + PyObject *pattern = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:search", _keywords, + &string, &pos, &endpos, &pattern)) + goto exit; + return_value = _sre_SRE_Pattern_search_impl(self, string, pos, endpos, pattern); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Pattern_findall__doc__, +"findall($self, /, string=None, pos=0, endpos=sys.maxsize, *,\n" +" source=None)\n" +"--\n" +"\n" +"Return a list of all non-overlapping matches of pattern in string."); + +#define _SRE_SRE_PATTERN_FINDALL_METHODDEF \ + {"findall", (PyCFunction)_sre_SRE_Pattern_findall, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_findall__doc__}, + +static PyObject * +_sre_SRE_Pattern_findall_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos, + PyObject *source); + +static PyObject * +_sre_SRE_Pattern_findall(PatternObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", "pos", "endpos", "source", NULL}; + PyObject *string = NULL; + Py_ssize_t pos = 0; + Py_ssize_t endpos = PY_SSIZE_T_MAX; + PyObject *source = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:findall", _keywords, + &string, &pos, &endpos, &source)) + goto exit; + return_value = _sre_SRE_Pattern_findall_impl(self, string, pos, endpos, source); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Pattern_finditer__doc__, +"finditer($self, /, string, pos=0, endpos=sys.maxsize)\n" +"--\n" +"\n" +"Return an iterator over all non-overlapping matches for the RE pattern in string.\n" +"\n" +"For each match, the iterator returns a match object."); + +#define _SRE_SRE_PATTERN_FINDITER_METHODDEF \ + {"finditer", (PyCFunction)_sre_SRE_Pattern_finditer, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_finditer__doc__}, + +static PyObject * +_sre_SRE_Pattern_finditer_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos); + +static PyObject * +_sre_SRE_Pattern_finditer(PatternObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", "pos", "endpos", NULL}; + PyObject *string; + Py_ssize_t pos = 0; + Py_ssize_t endpos = PY_SSIZE_T_MAX; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|nn:finditer", _keywords, + &string, &pos, &endpos)) + goto exit; + return_value = _sre_SRE_Pattern_finditer_impl(self, string, pos, endpos); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Pattern_scanner__doc__, +"scanner($self, /, string, pos=0, endpos=sys.maxsize)\n" +"--\n" +"\n"); + +#define _SRE_SRE_PATTERN_SCANNER_METHODDEF \ + {"scanner", (PyCFunction)_sre_SRE_Pattern_scanner, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_scanner__doc__}, + +static PyObject * +_sre_SRE_Pattern_scanner_impl(PatternObject *self, PyObject *string, + Py_ssize_t pos, Py_ssize_t endpos); + +static PyObject * +_sre_SRE_Pattern_scanner(PatternObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", "pos", "endpos", NULL}; + PyObject *string; + Py_ssize_t pos = 0; + Py_ssize_t endpos = PY_SSIZE_T_MAX; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|nn:scanner", _keywords, + &string, &pos, &endpos)) + goto exit; + return_value = _sre_SRE_Pattern_scanner_impl(self, string, pos, endpos); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Pattern_split__doc__, +"split($self, /, string=None, maxsplit=0, *, source=None)\n" +"--\n" +"\n" +"Split string by the occurrences of pattern."); + +#define _SRE_SRE_PATTERN_SPLIT_METHODDEF \ + {"split", (PyCFunction)_sre_SRE_Pattern_split, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_split__doc__}, + +static PyObject * +_sre_SRE_Pattern_split_impl(PatternObject *self, PyObject *string, + Py_ssize_t maxsplit, PyObject *source); + +static PyObject * +_sre_SRE_Pattern_split(PatternObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", "maxsplit", "source", NULL}; + PyObject *string = NULL; + Py_ssize_t maxsplit = 0; + PyObject *source = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|On$O:split", _keywords, + &string, &maxsplit, &source)) + goto exit; + return_value = _sre_SRE_Pattern_split_impl(self, string, maxsplit, source); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Pattern_sub__doc__, +"sub($self, /, repl, string, count=0)\n" +"--\n" +"\n" +"Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl."); + +#define _SRE_SRE_PATTERN_SUB_METHODDEF \ + {"sub", (PyCFunction)_sre_SRE_Pattern_sub, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_sub__doc__}, + +static PyObject * +_sre_SRE_Pattern_sub_impl(PatternObject *self, PyObject *repl, + PyObject *string, Py_ssize_t count); + +static PyObject * +_sre_SRE_Pattern_sub(PatternObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"repl", "string", "count", NULL}; + PyObject *repl; + PyObject *string; + Py_ssize_t count = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|n:sub", _keywords, + &repl, &string, &count)) + goto exit; + return_value = _sre_SRE_Pattern_sub_impl(self, repl, string, count); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Pattern_subn__doc__, +"subn($self, /, repl, string, count=0)\n" +"--\n" +"\n" +"Return the tuple (new_string, number_of_subs_made) found by replacing the leftmost non-overlapping occurrences of pattern with the replacement repl."); + +#define _SRE_SRE_PATTERN_SUBN_METHODDEF \ + {"subn", (PyCFunction)_sre_SRE_Pattern_subn, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_subn__doc__}, + +static PyObject * +_sre_SRE_Pattern_subn_impl(PatternObject *self, PyObject *repl, + PyObject *string, Py_ssize_t count); + +static PyObject * +_sre_SRE_Pattern_subn(PatternObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"repl", "string", "count", NULL}; + PyObject *repl; + PyObject *string; + Py_ssize_t count = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|n:subn", _keywords, + &repl, &string, &count)) + goto exit; + return_value = _sre_SRE_Pattern_subn_impl(self, repl, string, count); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Pattern___copy____doc__, +"__copy__($self, /)\n" +"--\n" +"\n"); + +#define _SRE_SRE_PATTERN___COPY___METHODDEF \ + {"__copy__", (PyCFunction)_sre_SRE_Pattern___copy__, METH_NOARGS, _sre_SRE_Pattern___copy____doc__}, + +static PyObject * +_sre_SRE_Pattern___copy___impl(PatternObject *self); + +static PyObject * +_sre_SRE_Pattern___copy__(PatternObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _sre_SRE_Pattern___copy___impl(self); +} + +PyDoc_STRVAR(_sre_SRE_Pattern___deepcopy____doc__, +"__deepcopy__($self, /, memo)\n" +"--\n" +"\n"); + +#define _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF \ + {"__deepcopy__", (PyCFunction)_sre_SRE_Pattern___deepcopy__, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern___deepcopy____doc__}, + +static PyObject * +_sre_SRE_Pattern___deepcopy___impl(PatternObject *self, PyObject *memo); + +static PyObject * +_sre_SRE_Pattern___deepcopy__(PatternObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"memo", NULL}; + PyObject *memo; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:__deepcopy__", _keywords, + &memo)) + goto exit; + return_value = _sre_SRE_Pattern___deepcopy___impl(self, memo); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_compile__doc__, +"compile($module, /, pattern, flags, code, groups, groupindex,\n" +" indexgroup)\n" +"--\n" +"\n"); + +#define _SRE_COMPILE_METHODDEF \ + {"compile", (PyCFunction)_sre_compile, METH_VARARGS|METH_KEYWORDS, _sre_compile__doc__}, + +static PyObject * +_sre_compile_impl(PyModuleDef *module, PyObject *pattern, int flags, + PyObject *code, Py_ssize_t groups, PyObject *groupindex, + PyObject *indexgroup); + +static PyObject * +_sre_compile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL}; + PyObject *pattern; + int flags; + PyObject *code; + Py_ssize_t groups; + PyObject *groupindex; + PyObject *indexgroup; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OiO!nOO:compile", _keywords, + &pattern, &flags, &PyList_Type, &code, &groups, &groupindex, &indexgroup)) + goto exit; + return_value = _sre_compile_impl(module, pattern, flags, code, groups, groupindex, indexgroup); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Match_expand__doc__, +"expand($self, /, template)\n" +"--\n" +"\n" +"Return the string obtained by doing backslash substitution on the string template, as done by the sub() method."); + +#define _SRE_SRE_MATCH_EXPAND_METHODDEF \ + {"expand", (PyCFunction)_sre_SRE_Match_expand, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Match_expand__doc__}, + +static PyObject * +_sre_SRE_Match_expand_impl(MatchObject *self, PyObject *template); + +static PyObject * +_sre_SRE_Match_expand(MatchObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"template", NULL}; + PyObject *template; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:expand", _keywords, + &template)) + goto exit; + return_value = _sre_SRE_Match_expand_impl(self, template); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Match_groups__doc__, +"groups($self, /, default=None)\n" +"--\n" +"\n" +"Return a tuple containing all the subgroups of the match, from 1.\n" +"\n" +" default\n" +" Is used for groups that did not participate in the match."); + +#define _SRE_SRE_MATCH_GROUPS_METHODDEF \ + {"groups", (PyCFunction)_sre_SRE_Match_groups, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Match_groups__doc__}, + +static PyObject * +_sre_SRE_Match_groups_impl(MatchObject *self, PyObject *default_value); + +static PyObject * +_sre_SRE_Match_groups(MatchObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"default", NULL}; + PyObject *default_value = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:groups", _keywords, + &default_value)) + goto exit; + return_value = _sre_SRE_Match_groups_impl(self, default_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Match_groupdict__doc__, +"groupdict($self, /, default=None)\n" +"--\n" +"\n" +"Return a dictionary containing all the named subgroups of the match, keyed by the subgroup name.\n" +"\n" +" default\n" +" Is used for groups that did not participate in the match."); + +#define _SRE_SRE_MATCH_GROUPDICT_METHODDEF \ + {"groupdict", (PyCFunction)_sre_SRE_Match_groupdict, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Match_groupdict__doc__}, + +static PyObject * +_sre_SRE_Match_groupdict_impl(MatchObject *self, PyObject *default_value); + +static PyObject * +_sre_SRE_Match_groupdict(MatchObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"default", NULL}; + PyObject *default_value = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:groupdict", _keywords, + &default_value)) + goto exit; + return_value = _sre_SRE_Match_groupdict_impl(self, default_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Match_start__doc__, +"start($self, group=0, /)\n" +"--\n" +"\n" +"Return index of the start of the substring matched by group."); + +#define _SRE_SRE_MATCH_START_METHODDEF \ + {"start", (PyCFunction)_sre_SRE_Match_start, METH_VARARGS, _sre_SRE_Match_start__doc__}, + +static Py_ssize_t +_sre_SRE_Match_start_impl(MatchObject *self, PyObject *group); + +static PyObject * +_sre_SRE_Match_start(MatchObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *group = NULL; + Py_ssize_t _return_value; + + if (!PyArg_UnpackTuple(args, "start", + 0, 1, + &group)) + goto exit; + _return_value = _sre_SRE_Match_start_impl(self, group); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Match_end__doc__, +"end($self, group=0, /)\n" +"--\n" +"\n" +"Return index of the end of the substring matched by group."); + +#define _SRE_SRE_MATCH_END_METHODDEF \ + {"end", (PyCFunction)_sre_SRE_Match_end, METH_VARARGS, _sre_SRE_Match_end__doc__}, + +static Py_ssize_t +_sre_SRE_Match_end_impl(MatchObject *self, PyObject *group); + +static PyObject * +_sre_SRE_Match_end(MatchObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *group = NULL; + Py_ssize_t _return_value; + + if (!PyArg_UnpackTuple(args, "end", + 0, 1, + &group)) + goto exit; + _return_value = _sre_SRE_Match_end_impl(self, group); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Match_span__doc__, +"span($self, group=0, /)\n" +"--\n" +"\n" +"For MatchObject m, return the 2-tuple (m.start(group), m.end(group))."); + +#define _SRE_SRE_MATCH_SPAN_METHODDEF \ + {"span", (PyCFunction)_sre_SRE_Match_span, METH_VARARGS, _sre_SRE_Match_span__doc__}, + +static PyObject * +_sre_SRE_Match_span_impl(MatchObject *self, PyObject *group); + +static PyObject * +_sre_SRE_Match_span(MatchObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *group = NULL; + + if (!PyArg_UnpackTuple(args, "span", + 0, 1, + &group)) + goto exit; + return_value = _sre_SRE_Match_span_impl(self, group); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Match___copy____doc__, +"__copy__($self, /)\n" +"--\n" +"\n"); + +#define _SRE_SRE_MATCH___COPY___METHODDEF \ + {"__copy__", (PyCFunction)_sre_SRE_Match___copy__, METH_NOARGS, _sre_SRE_Match___copy____doc__}, + +static PyObject * +_sre_SRE_Match___copy___impl(MatchObject *self); + +static PyObject * +_sre_SRE_Match___copy__(MatchObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _sre_SRE_Match___copy___impl(self); +} + +PyDoc_STRVAR(_sre_SRE_Match___deepcopy____doc__, +"__deepcopy__($self, /, memo)\n" +"--\n" +"\n"); + +#define _SRE_SRE_MATCH___DEEPCOPY___METHODDEF \ + {"__deepcopy__", (PyCFunction)_sre_SRE_Match___deepcopy__, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Match___deepcopy____doc__}, + +static PyObject * +_sre_SRE_Match___deepcopy___impl(MatchObject *self, PyObject *memo); + +static PyObject * +_sre_SRE_Match___deepcopy__(MatchObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"memo", NULL}; + PyObject *memo; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:__deepcopy__", _keywords, + &memo)) + goto exit; + return_value = _sre_SRE_Match___deepcopy___impl(self, memo); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sre_SRE_Scanner_match__doc__, +"match($self, /)\n" +"--\n" +"\n"); + +#define _SRE_SRE_SCANNER_MATCH_METHODDEF \ + {"match", (PyCFunction)_sre_SRE_Scanner_match, METH_NOARGS, _sre_SRE_Scanner_match__doc__}, + +static PyObject * +_sre_SRE_Scanner_match_impl(ScannerObject *self); + +static PyObject * +_sre_SRE_Scanner_match(ScannerObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _sre_SRE_Scanner_match_impl(self); +} + +PyDoc_STRVAR(_sre_SRE_Scanner_search__doc__, +"search($self, /)\n" +"--\n" +"\n"); + +#define _SRE_SRE_SCANNER_SEARCH_METHODDEF \ + {"search", (PyCFunction)_sre_SRE_Scanner_search, METH_NOARGS, _sre_SRE_Scanner_search__doc__}, + +static PyObject * +_sre_SRE_Scanner_search_impl(ScannerObject *self); + +static PyObject * +_sre_SRE_Scanner_search(ScannerObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _sre_SRE_Scanner_search_impl(self); +} +/*[clinic end generated code: output=d1d73ab2c5008bd4 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 07c49bfdcf6081e668668b829f58a5c41952c56f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 3 May 2015 16:14:08 +0300 Subject: Issue #20179: Converted the _ssl module to Argument Clinic. --- Modules/_ssl.c | 1020 +++++++++++++++++++++++-------------------- Modules/clinic/_ssl.c.h | 1105 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1646 insertions(+), 479 deletions(-) create mode 100644 Modules/clinic/_ssl.c.h (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index b7b39dd372..e758da6c4f 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -221,11 +221,17 @@ static PyTypeObject PySSLContext_Type; static PyTypeObject PySSLSocket_Type; static PyTypeObject PySSLMemoryBIO_Type; -static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args); -static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args); +/*[clinic input] +module _ssl +class _ssl._SSLContext "PySSLContext *" "&PySSLContext_Type" +class _ssl._SSLSocket "PySSLSocket *" "&PySSLSocket_Type" +class _ssl.MemoryBIO "PySSLMemoryBIO *" "&PySSLMemoryBIO_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=7bf7cb832638e2e1]*/ + +#include "clinic/_ssl.c.h" + static int PySSL_select(PySocketSockObject *s, int writing, _PyTime_t timeout); -static PyObject *PySSL_peercert(PySSLSocket *self, PyObject *args); -static PyObject *PySSL_cipher(PySSLSocket *self); #define PySSLContext_Check(v) (Py_TYPE(v) == &PySSLContext_Type) #define PySSLSocket_Check(v) (Py_TYPE(v) == &PySSLSocket_Type) @@ -563,7 +569,13 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, /* SSL object methods */ -static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self) +/*[clinic input] +_ssl._SSLSocket.do_handshake +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_do_handshake_impl(PySSLSocket *self) +/*[clinic end generated code: output=6c0898a8936548f6 input=d2d737de3df018c8]*/ { int ret; int err; @@ -1303,25 +1315,28 @@ _certificate_to_der(X509 *certificate) return retval; } -static PyObject * -PySSL_test_decode_certificate (PyObject *mod, PyObject *args) { +/*[clinic input] +_ssl._test_decode_cert + path: object(converter="PyUnicode_FSConverter") + / + +[clinic start generated code]*/ +static PyObject * +_ssl__test_decode_cert_impl(PyModuleDef *module, PyObject *path) +/*[clinic end generated code: output=679e01db282804e9 input=cdeaaf02d4346628]*/ +{ PyObject *retval = NULL; - PyObject *filename; X509 *x=NULL; BIO *cert; - if (!PyArg_ParseTuple(args, "O&:test_decode_certificate", - PyUnicode_FSConverter, &filename)) - return NULL; - if ((cert=BIO_new(BIO_s_file())) == NULL) { PyErr_SetString(PySSLErrorObject, "Can't malloc memory to read file"); goto fail0; } - if (BIO_read_filename(cert, PyBytes_AsString(filename)) <= 0) { + if (BIO_read_filename(cert, PyBytes_AsString(path)) <= 0) { PyErr_SetString(PySSLErrorObject, "Can't open file"); goto fail0; @@ -1338,20 +1353,33 @@ PySSL_test_decode_certificate (PyObject *mod, PyObject *args) { X509_free(x); fail0: - Py_DECREF(filename); + Py_DECREF(path); if (cert != NULL) BIO_free(cert); return retval; } +/*[clinic input] +_ssl._SSLSocket.peer_certificate + der as binary_mode: bool = False + / + +Returns the certificate for the peer. + +If no certificate was provided, returns None. If a certificate was +provided, but not validated, returns an empty dictionary. Otherwise +returns a dict containing information about the peer certificate. + +If the optional argument is True, returns a DER-encoded copy of the +peer certificate, or None if no certificate was provided. This will +return the certificate even if it wasn't validated. +[clinic start generated code]*/ + static PyObject * -PySSL_peercert(PySSLSocket *self, PyObject *args) +_ssl__SSLSocket_peer_certificate_impl(PySSLSocket *self, int binary_mode) +/*[clinic end generated code: output=f0dc3e4d1d818a1d input=8281bd1d193db843]*/ { int verification; - int binary_mode = 0; - - if (!PyArg_ParseTuple(args, "|p:peer_certificate", &binary_mode)) - return NULL; if (!self->handshake_done) { PyErr_SetString(PyExc_ValueError, @@ -1373,18 +1401,6 @@ PySSL_peercert(PySSLSocket *self, PyObject *args) } } -PyDoc_STRVAR(PySSL_peercert_doc, -"peer_certificate([der=False]) -> certificate\n\ -\n\ -Returns the certificate for the peer. If no certificate was provided,\n\ -returns None. If a certificate was provided, but not validated, returns\n\ -an empty dictionary. Otherwise returns a dict containing information\n\ -about the peer certificate.\n\ -\n\ -If the optional argument is True, returns a DER-encoded copy of the\n\ -peer certificate, or None if no certificate was provided. This will\n\ -return the certificate even if it wasn't validated."); - static PyObject * cipher_to_tuple(const SSL_CIPHER *cipher) { @@ -1427,7 +1443,13 @@ cipher_to_tuple(const SSL_CIPHER *cipher) return NULL; } -static PyObject *PySSL_shared_ciphers(PySSLSocket *self) +/*[clinic input] +_ssl._SSLSocket.shared_ciphers +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_shared_ciphers_impl(PySSLSocket *self) +/*[clinic end generated code: output=3d174ead2e42c4fd input=0bfe149da8fe6306]*/ { SSL_SESSION *sess = SSL_get_session(self->ssl); STACK_OF(SSL_CIPHER) *ciphers; @@ -1451,7 +1473,13 @@ static PyObject *PySSL_shared_ciphers(PySSLSocket *self) return res; } -static PyObject *PySSL_cipher (PySSLSocket *self) +/*[clinic input] +_ssl._SSLSocket.cipher +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_cipher_impl(PySSLSocket *self) +/*[clinic end generated code: output=376417c16d0e5815 input=548fb0e27243796d]*/ { const SSL_CIPHER *current; @@ -1463,7 +1491,13 @@ static PyObject *PySSL_cipher (PySSLSocket *self) return cipher_to_tuple(current); } -static PyObject *PySSL_version(PySSLSocket *self) +/*[clinic input] +_ssl._SSLSocket.version +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_version_impl(PySSLSocket *self) +/*[clinic end generated code: output=178aed33193b2cdb input=900186a503436fd6]*/ { const char *version; @@ -1476,7 +1510,14 @@ static PyObject *PySSL_version(PySSLSocket *self) } #ifdef OPENSSL_NPN_NEGOTIATED -static PyObject *PySSL_selected_npn_protocol(PySSLSocket *self) { +/*[clinic input] +_ssl._SSLSocket.selected_npn_protocol +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_selected_npn_protocol_impl(PySSLSocket *self) +/*[clinic end generated code: output=b91d494cd207ecf6 input=c28fde139204b826]*/ +{ const unsigned char *out; unsigned int outlen; @@ -1490,7 +1531,14 @@ static PyObject *PySSL_selected_npn_protocol(PySSLSocket *self) { #endif #ifdef HAVE_ALPN -static PyObject *PySSL_selected_alpn_protocol(PySSLSocket *self) { +/*[clinic input] +_ssl._SSLSocket.selected_alpn_protocol +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_selected_alpn_protocol_impl(PySSLSocket *self) +/*[clinic end generated code: output=ec33688b303d250f input=442de30e35bc2913]*/ +{ const unsigned char *out; unsigned int outlen; @@ -1502,7 +1550,14 @@ static PyObject *PySSL_selected_alpn_protocol(PySSLSocket *self) { } #endif -static PyObject *PySSL_compression(PySSLSocket *self) { +/*[clinic input] +_ssl._SSLSocket.compression +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_compression_impl(PySSLSocket *self) +/*[clinic end generated code: output=bd16cb1bb4646ae7 input=5d059d0a2bbc32c8]*/ +{ #ifdef OPENSSL_NO_COMP Py_RETURN_NONE; #else @@ -1689,9 +1744,20 @@ PySSL_select(PySocketSockObject *s, int writing, _PyTime_t timeout) return rc == 0 ? SOCKET_HAS_TIMED_OUT : SOCKET_OPERATION_OK; } -static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) +/*[clinic input] +_ssl._SSLSocket.write + b: Py_buffer + / + +Writes the bytes-like object b into the SSL object. + +Returns the number of bytes written. +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b) +/*[clinic end generated code: output=aa7a6be5527358d8 input=77262d994fe5100a]*/ { - Py_buffer buf; int len; int sockstate; int err; @@ -1709,12 +1775,7 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) Py_INCREF(sock); } - if (!PyArg_ParseTuple(args, "y*:write", &buf)) { - Py_XDECREF(sock); - return NULL; - } - - if (buf.len > INT_MAX) { + if (b->len > INT_MAX) { PyErr_Format(PyExc_OverflowError, "string longer than %d bytes", INT_MAX); goto error; @@ -1749,7 +1810,7 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) do { PySSL_BEGIN_ALLOW_THREADS - len = SSL_write(self->ssl, buf.buf, (int)buf.len); + len = SSL_write(self->ssl, b->buf, (int)b->len); err = SSL_get_error(self->ssl, len); PySSL_END_ALLOW_THREADS @@ -1781,7 +1842,6 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) } while (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE); Py_XDECREF(sock); - PyBuffer_Release(&buf); if (len > 0) return PyLong_FromLong(len); else @@ -1789,17 +1849,18 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args) error: Py_XDECREF(sock); - PyBuffer_Release(&buf); return NULL; } -PyDoc_STRVAR(PySSL_SSLwrite_doc, -"write(s) -> len\n\ -\n\ -Writes the string s into the SSL object. Returns the number\n\ -of bytes written."); +/*[clinic input] +_ssl._SSLSocket.pending + +Returns the number of already decrypted bytes available for read, pending on the connection. +[clinic start generated code]*/ -static PyObject *PySSL_SSLpending(PySSLSocket *self) +static PyObject * +_ssl__SSLSocket_pending_impl(PySSLSocket *self) +/*[clinic end generated code: output=983d9fecdc308a83 input=2b77487d6dfd597f]*/ { int count = 0; @@ -1812,19 +1873,25 @@ static PyObject *PySSL_SSLpending(PySSLSocket *self) return PyLong_FromLong(count); } -PyDoc_STRVAR(PySSL_SSLpending_doc, -"pending() -> count\n\ -\n\ -Returns the number of already decrypted bytes available for read,\n\ -pending on the connection.\n"); +/*[clinic input] +_ssl._SSLSocket.read + size as len: int + [ + buffer: Py_buffer(types={'rwbuffer'}) + ] + / + +Read up to size bytes from the SSL socket. +[clinic start generated code]*/ -static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) +static PyObject * +_ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, + Py_buffer *buffer) +/*[clinic end generated code: output=00097776cec2a0af input=4a0bbd2859e817b0]*/ { PyObject *dest = NULL; - Py_buffer buf; char *mem; - int len, count; - int buf_passed = 0; + int count; int sockstate; int err; int nonblocking; @@ -1841,23 +1908,17 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) Py_INCREF(sock); } - buf.obj = NULL; - buf.buf = NULL; - if (!PyArg_ParseTuple(args, "i|w*:read", &len, &buf)) - goto error; - - if ((buf.buf == NULL) && (buf.obj == NULL)) { + if (!group_right_1) { dest = PyBytes_FromStringAndSize(NULL, len); if (dest == NULL) goto error; mem = PyBytes_AS_STRING(dest); } else { - buf_passed = 1; - mem = buf.buf; - if (len <= 0 || len > buf.len) { - len = (int) buf.len; - if (buf.len != len) { + mem = buffer->buf; + if (len <= 0 || len > buffer->len) { + len = (int) buffer->len; + if (buffer->len != len) { PyErr_SetString(PyExc_OverflowError, "maximum length can't fit in a C 'int'"); goto error; @@ -1918,30 +1979,32 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args) done: Py_XDECREF(sock); - if (!buf_passed) { + if (!group_right_1) { _PyBytes_Resize(&dest, count); return dest; } else { - PyBuffer_Release(&buf); return PyLong_FromLong(count); } error: Py_XDECREF(sock); - if (!buf_passed) + if (!group_right_1) Py_XDECREF(dest); - else - PyBuffer_Release(&buf); return NULL; } -PyDoc_STRVAR(PySSL_SSLread_doc, -"read([len]) -> string\n\ -\n\ -Read up to len bytes from the SSL socket."); +/*[clinic input] +_ssl._SSLSocket.shutdown -static PyObject *PySSL_SSLshutdown(PySSLSocket *self) +Does the SSL shutdown handshake with the remote end. + +Returns the underlying socket object. +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_shutdown_impl(PySSLSocket *self) +/*[clinic end generated code: output=ca1aa7ed9d25ca42 input=ede2cc1a2ddf0ee4]*/ { int err, ssl_err, sockstate, nonblocking; int zeros = 0; @@ -2044,14 +2107,17 @@ error: return NULL; } -PyDoc_STRVAR(PySSL_SSLshutdown_doc, -"shutdown(s) -> socket\n\ -\n\ -Does the SSL shutdown handshake with the remote end, and returns\n\ -the underlying socket object."); +/*[clinic input] +_ssl._SSLSocket.tls_unique_cb + +Returns the 'tls-unique' channel binding data, as defined by RFC 5929. + +If the TLS handshake is not yet complete, None is returned. +[clinic start generated code]*/ static PyObject * -PySSL_tls_unique_cb(PySSLSocket *self) +_ssl__SSLSocket_tls_unique_cb_impl(PySSLSocket *self) +/*[clinic end generated code: output=f3a832d603f586af input=439525c7b3d8d34d]*/ { PyObject *retval = NULL; char buf[PySSL_CB_MAXLEN]; @@ -2075,13 +2141,6 @@ PySSL_tls_unique_cb(PySSLSocket *self) return retval; } -PyDoc_STRVAR(PySSL_tls_unique_cb_doc, -"tls_unique_cb() -> bytes\n\ -\n\ -Returns the 'tls-unique' channel binding data, as defined by RFC 5929.\n\ -\n\ -If the TLS handshake is not yet complete, None is returned"); - static PyGetSetDef ssl_getsetlist[] = { {"context", (getter) PySSL_get_context, (setter) PySSL_set_context, PySSL_set_context_doc}, @@ -2095,29 +2154,19 @@ static PyGetSetDef ssl_getsetlist[] = { }; static PyMethodDef PySSLMethods[] = { - {"do_handshake", (PyCFunction)PySSL_SSLdo_handshake, METH_NOARGS}, - {"write", (PyCFunction)PySSL_SSLwrite, METH_VARARGS, - PySSL_SSLwrite_doc}, - {"read", (PyCFunction)PySSL_SSLread, METH_VARARGS, - PySSL_SSLread_doc}, - {"pending", (PyCFunction)PySSL_SSLpending, METH_NOARGS, - PySSL_SSLpending_doc}, - {"peer_certificate", (PyCFunction)PySSL_peercert, METH_VARARGS, - PySSL_peercert_doc}, - {"cipher", (PyCFunction)PySSL_cipher, METH_NOARGS}, - {"shared_ciphers", (PyCFunction)PySSL_shared_ciphers, METH_NOARGS}, - {"version", (PyCFunction)PySSL_version, METH_NOARGS}, -#ifdef OPENSSL_NPN_NEGOTIATED - {"selected_npn_protocol", (PyCFunction)PySSL_selected_npn_protocol, METH_NOARGS}, -#endif -#ifdef HAVE_ALPN - {"selected_alpn_protocol", (PyCFunction)PySSL_selected_alpn_protocol, METH_NOARGS}, -#endif - {"compression", (PyCFunction)PySSL_compression, METH_NOARGS}, - {"shutdown", (PyCFunction)PySSL_SSLshutdown, METH_NOARGS, - PySSL_SSLshutdown_doc}, - {"tls_unique_cb", (PyCFunction)PySSL_tls_unique_cb, METH_NOARGS, - PySSL_tls_unique_cb_doc}, + _SSL__SSLSOCKET_DO_HANDSHAKE_METHODDEF + _SSL__SSLSOCKET_WRITE_METHODDEF + _SSL__SSLSOCKET_READ_METHODDEF + _SSL__SSLSOCKET_PENDING_METHODDEF + _SSL__SSLSOCKET_PEER_CERTIFICATE_METHODDEF + _SSL__SSLSOCKET_CIPHER_METHODDEF + _SSL__SSLSOCKET_SHARED_CIPHERS_METHODDEF + _SSL__SSLSOCKET_VERSION_METHODDEF + _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF + _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF + _SSL__SSLSOCKET_COMPRESSION_METHODDEF + _SSL__SSLSOCKET_SHUTDOWN_METHODDEF + _SSL__SSLSOCKET_TLS_UNIQUE_CB_METHODDEF {NULL, NULL} }; @@ -2160,20 +2209,21 @@ static PyTypeObject PySSLSocket_Type = { * _SSLContext objects */ +/*[clinic input] +@classmethod +_ssl._SSLContext.__new__ + protocol as proto_version: int + / +[clinic start generated code]*/ + static PyObject * -context_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +_ssl__SSLContext_impl(PyTypeObject *type, int proto_version) +/*[clinic end generated code: output=2cf0d7a0741b6bd1 input=8d58a805b95fc534]*/ { - char *kwlist[] = {"protocol", NULL}; PySSLContext *self; - int proto_version = PY_SSL_VERSION_SSL23; long options; SSL_CTX *ctx = NULL; - if (!PyArg_ParseTupleAndKeywords( - args, kwds, "i:_SSLContext", kwlist, - &proto_version)) - return NULL; - PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); @@ -2297,15 +2347,17 @@ context_dealloc(PySSLContext *self) Py_TYPE(self)->tp_free(self); } +/*[clinic input] +_ssl._SSLContext.set_ciphers + cipherlist: str + / +[clinic start generated code]*/ + static PyObject * -set_ciphers(PySSLContext *self, PyObject *args) +_ssl__SSLContext_set_ciphers_impl(PySSLContext *self, const char *cipherlist) +/*[clinic end generated code: output=3a3162f3557c0f3f input=a7ac931b9f3ca7fc]*/ { - int ret; - const char *cipherlist; - - if (!PyArg_ParseTuple(args, "s:set_ciphers", &cipherlist)) - return NULL; - ret = SSL_CTX_set_cipher_list(self->ctx, cipherlist); + int ret = SSL_CTX_set_cipher_list(self->ctx, cipherlist); if (ret == 0) { /* Clearing the error queue is necessary on some OpenSSL versions, otherwise the error will be reported again when another SSL call @@ -2374,26 +2426,24 @@ _selectNPN_cb(SSL *s, } #endif +/*[clinic input] +_ssl._SSLContext._set_npn_protocols + protos: Py_buffer + / +[clinic start generated code]*/ + static PyObject * -_set_npn_protocols(PySSLContext *self, PyObject *args) +_ssl__SSLContext__set_npn_protocols_impl(PySSLContext *self, + Py_buffer *protos) +/*[clinic end generated code: output=72b002c3324390c6 input=319fcb66abf95bd7]*/ { #ifdef OPENSSL_NPN_NEGOTIATED - Py_buffer protos; - - if (!PyArg_ParseTuple(args, "y*:set_npn_protocols", &protos)) - return NULL; - - if (self->npn_protocols != NULL) { - PyMem_Free(self->npn_protocols); - } - - self->npn_protocols = PyMem_Malloc(protos.len); - if (self->npn_protocols == NULL) { - PyBuffer_Release(&protos); + PyMem_Free(self->npn_protocols); + self->npn_protocols = PyMem_Malloc(protos->len); + if (self->npn_protocols == NULL) return PyErr_NoMemory(); - } - memcpy(self->npn_protocols, protos.buf, protos.len); - self->npn_protocols_len = (int) protos.len; + memcpy(self->npn_protocols, protos->buf, protos->len); + self->npn_protocols_len = (int) protos->len; /* set both server and client callbacks, because the context can * be used to create both types of sockets */ @@ -2404,7 +2454,6 @@ _set_npn_protocols(PySSLContext *self, PyObject *args) _selectNPN_cb, self); - PyBuffer_Release(&protos); Py_RETURN_NONE; #else PyErr_SetString(PyExc_NotImplementedError, @@ -2427,28 +2476,29 @@ _selectALPN_cb(SSL *s, } #endif +/*[clinic input] +_ssl._SSLContext._set_alpn_protocols + protos: Py_buffer + / +[clinic start generated code]*/ + static PyObject * -_set_alpn_protocols(PySSLContext *self, PyObject *args) +_ssl__SSLContext__set_alpn_protocols_impl(PySSLContext *self, + Py_buffer *protos) +/*[clinic end generated code: output=87599a7f76651a9b input=9bba964595d519be]*/ { #ifdef HAVE_ALPN - Py_buffer protos; - - if (!PyArg_ParseTuple(args, "y*:set_npn_protocols", &protos)) - return NULL; - PyMem_FREE(self->alpn_protocols); - self->alpn_protocols = PyMem_Malloc(protos.len); + self->alpn_protocols = PyMem_Malloc(protos->len); if (!self->alpn_protocols) return PyErr_NoMemory(); - memcpy(self->alpn_protocols, protos.buf, protos.len); - self->alpn_protocols_len = protos.len; - PyBuffer_Release(&protos); + memcpy(self->alpn_protocols, protos->buf, protos->len); + self->alpn_protocols_len = protos->len; if (SSL_CTX_set_alpn_protos(self->ctx, self->alpn_protocols, self->alpn_protocols_len)) return PyErr_NoMemory(); SSL_CTX_set_alpn_select_cb(self->ctx, _selectALPN_cb, self); - PyBuffer_Release(&protos); Py_RETURN_NONE; #else PyErr_SetString(PyExc_NotImplementedError, @@ -2693,11 +2743,19 @@ error: return -1; } +/*[clinic input] +_ssl._SSLContext.load_cert_chain + certfile: object + keyfile: object = NULL + password: object = NULL + +[clinic start generated code]*/ + static PyObject * -load_cert_chain(PySSLContext *self, PyObject *args, PyObject *kwds) +_ssl__SSLContext_load_cert_chain_impl(PySSLContext *self, PyObject *certfile, + PyObject *keyfile, PyObject *password) +/*[clinic end generated code: output=9480bc1c380e2095 input=7cf9ac673cbee6fc]*/ { - char *kwlist[] = {"certfile", "keyfile", "password", NULL}; - PyObject *certfile, *keyfile = NULL, *password = NULL; PyObject *certfile_bytes = NULL, *keyfile_bytes = NULL; pem_password_cb *orig_passwd_cb = self->ctx->default_passwd_callback; void *orig_passwd_userdata = self->ctx->default_passwd_callback_userdata; @@ -2706,10 +2764,6 @@ load_cert_chain(PySSLContext *self, PyObject *args, PyObject *kwds) errno = 0; ERR_clear_error(); - if (!PyArg_ParseTupleAndKeywords(args, kwds, - "O|OO:load_cert_chain", kwlist, - &certfile, &keyfile, &password)) - return NULL; if (keyfile == Py_None) keyfile = NULL; if (!PyUnicode_FSConverter(certfile, &certfile_bytes)) { @@ -2877,21 +2931,26 @@ _add_ca_certs(PySSLContext *self, void *data, Py_ssize_t len, } +/*[clinic input] +_ssl._SSLContext.load_verify_locations + cafile: object = NULL + capath: object = NULL + cadata: object = NULL + +[clinic start generated code]*/ + static PyObject * -load_verify_locations(PySSLContext *self, PyObject *args, PyObject *kwds) +_ssl__SSLContext_load_verify_locations_impl(PySSLContext *self, + PyObject *cafile, + PyObject *capath, + PyObject *cadata) +/*[clinic end generated code: output=454c7e41230ca551 input=997f1fb3a784ef88]*/ { - char *kwlist[] = {"cafile", "capath", "cadata", NULL}; - PyObject *cafile = NULL, *capath = NULL, *cadata = NULL; PyObject *cafile_bytes = NULL, *capath_bytes = NULL; const char *cafile_buf = NULL, *capath_buf = NULL; int r = 0, ok = 1; errno = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwds, - "|OOO:load_verify_locations", kwlist, - &cafile, &capath, &cadata)) - return NULL; - if (cafile == Py_None) cafile = NULL; if (capath == Py_None) @@ -2988,8 +3047,16 @@ load_verify_locations(PySSLContext *self, PyObject *args, PyObject *kwds) } } +/*[clinic input] +_ssl._SSLContext.load_dh_params + path as filepath: object + / + +[clinic start generated code]*/ + static PyObject * -load_dh_params(PySSLContext *self, PyObject *filepath) +_ssl__SSLContext_load_dh_params(PySSLContext *self, PyObject *filepath) +/*[clinic end generated code: output=1c8e57a38e055af0 input=c8871f3c796ae1d6]*/ { FILE *f; DH *dh; @@ -3019,53 +3086,57 @@ load_dh_params(PySSLContext *self, PyObject *filepath) Py_RETURN_NONE; } +/*[clinic input] +_ssl._SSLContext._wrap_socket + sock: object(subclass_of="PySocketModule.Sock_Type") + server_side: int + server_hostname as hostname_obj: object = None + +[clinic start generated code]*/ + static PyObject * -context_wrap_socket(PySSLContext *self, PyObject *args, PyObject *kwds) +_ssl__SSLContext__wrap_socket_impl(PySSLContext *self, PyObject *sock, + int server_side, PyObject *hostname_obj) +/*[clinic end generated code: output=6973e4b60995e933 input=83859b9156ddfc63]*/ { - char *kwlist[] = {"sock", "server_side", "server_hostname", NULL}; - PySocketSockObject *sock; - int server_side = 0; char *hostname = NULL; - PyObject *hostname_obj, *res; + PyObject *res; /* server_hostname is either None (or absent), or to be encoded using the idna encoding. */ - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!i|O!:_wrap_socket", kwlist, - PySocketModule.Sock_Type, - &sock, &server_side, - Py_TYPE(Py_None), &hostname_obj)) { - PyErr_Clear(); - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!iet:_wrap_socket", kwlist, - PySocketModule.Sock_Type, - &sock, &server_side, - "idna", &hostname)) + if (hostname_obj != Py_None) { + if (!PyArg_Parse(hostname_obj, "et", "idna", &hostname)) return NULL; } - res = (PyObject *) newPySSLSocket(self, sock, server_side, hostname, + res = (PyObject *) newPySSLSocket(self, (PySocketSockObject *)sock, + server_side, hostname, NULL, NULL); if (hostname != NULL) PyMem_Free(hostname); return res; } +/*[clinic input] +_ssl._SSLContext._wrap_bio + incoming: object(subclass_of="&PySSLMemoryBIO_Type", type="PySSLMemoryBIO *") + outgoing: object(subclass_of="&PySSLMemoryBIO_Type", type="PySSLMemoryBIO *") + server_side: int + server_hostname as hostname_obj: object = None + +[clinic start generated code]*/ + static PyObject * -context_wrap_bio(PySSLContext *self, PyObject *args, PyObject *kwds) +_ssl__SSLContext__wrap_bio_impl(PySSLContext *self, PySSLMemoryBIO *incoming, + PySSLMemoryBIO *outgoing, int server_side, + PyObject *hostname_obj) +/*[clinic end generated code: output=4fe4ba75ad95940d input=17725ecdac0bf220]*/ { - char *kwlist[] = {"incoming", "outgoing", "server_side", - "server_hostname", NULL}; - int server_side; char *hostname = NULL; - PyObject *hostname_obj = Py_None, *res; - PySSLMemoryBIO *incoming, *outgoing; + PyObject *res; /* server_hostname is either None (or absent), or to be encoded using the idna encoding. */ - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!O!i|O:_wrap_bio", kwlist, - &PySSLMemoryBIO_Type, &incoming, - &PySSLMemoryBIO_Type, &outgoing, - &server_side, &hostname_obj)) - return NULL; if (hostname_obj != Py_None) { if (!PyArg_Parse(hostname_obj, "et", "idna", &hostname)) return NULL; @@ -3078,8 +3149,13 @@ context_wrap_bio(PySSLContext *self, PyObject *args, PyObject *kwds) return res; } +/*[clinic input] +_ssl._SSLContext.session_stats +[clinic start generated code]*/ + static PyObject * -session_stats(PySSLContext *self, PyObject *unused) +_ssl__SSLContext_session_stats_impl(PySSLContext *self) +/*[clinic end generated code: output=0d96411c42893bfb input=7e0a81fb11102c8b]*/ { int r; PyObject *value, *stats = PyDict_New(); @@ -3117,8 +3193,13 @@ error: return NULL; } +/*[clinic input] +_ssl._SSLContext.set_default_verify_paths +[clinic start generated code]*/ + static PyObject * -set_default_verify_paths(PySSLContext *self, PyObject *unused) +_ssl__SSLContext_set_default_verify_paths_impl(PySSLContext *self) +/*[clinic end generated code: output=0bee74e6e09deaaa input=35f3408021463d74]*/ { if (!SSL_CTX_set_default_verify_paths(self->ctx)) { _setSSLError(NULL, 0, __FILE__, __LINE__); @@ -3128,8 +3209,16 @@ set_default_verify_paths(PySSLContext *self, PyObject *unused) } #ifndef OPENSSL_NO_ECDH +/*[clinic input] +_ssl._SSLContext.set_ecdh_curve + name: object + / + +[clinic start generated code]*/ + static PyObject * -set_ecdh_curve(PySSLContext *self, PyObject *name) +_ssl__SSLContext_set_ecdh_curve(PySSLContext *self, PyObject *name) +/*[clinic end generated code: output=23022c196e40d7d2 input=c2bafb6f6e34726b]*/ { PyObject *name_bytes; int nid; @@ -3263,25 +3352,23 @@ error: } #endif -PyDoc_STRVAR(PySSL_set_servername_callback_doc, -"set_servername_callback(method)\n\ -\n\ -This sets a callback that will be called when a server name is provided by\n\ -the SSL/TLS client in the SNI extension.\n\ -\n\ -If the argument is None then the callback is disabled. The method is called\n\ -with the SSLSocket, the server name as a string, and the SSLContext object.\n\ -See RFC 6066 for details of the SNI extension."); +/*[clinic input] +_ssl._SSLContext.set_servername_callback + method as cb: object + / + +Set a callback that will be called when a server name is provided by the SSL/TLS client in the SNI extension. + +If the argument is None then the callback is disabled. The method is called +with the SSLSocket, the server name as a string, and the SSLContext object. +See RFC 6066 for details of the SNI extension. +[clinic start generated code]*/ static PyObject * -set_servername_callback(PySSLContext *self, PyObject *args) +_ssl__SSLContext_set_servername_callback(PySSLContext *self, PyObject *cb) +/*[clinic end generated code: output=3439a1b2d5d3b7ea input=a2a83620197d602b]*/ { #if HAVE_SNI && !defined(OPENSSL_NO_TLSEXT) - PyObject *cb; - - if (!PyArg_ParseTuple(args, "O", &cb)) - return NULL; - Py_CLEAR(self->set_hostname); if (cb == Py_None) { SSL_CTX_set_tlsext_servername_callback(self->ctx, NULL); @@ -3308,17 +3395,21 @@ set_servername_callback(PySSLContext *self, PyObject *args) #endif } -PyDoc_STRVAR(PySSL_get_stats_doc, -"cert_store_stats() -> {'crl': int, 'x509_ca': int, 'x509': int}\n\ -\n\ -Returns quantities of loaded X.509 certificates. X.509 certificates with a\n\ -CA extension and certificate revocation lists inside the context's cert\n\ -store.\n\ -NOTE: Certificates in a capath directory aren't loaded unless they have\n\ -been used at least once."); +/*[clinic input] +_ssl._SSLContext.cert_store_stats + +Returns quantities of loaded X.509 certificates. + +X.509 certificates with a CA extension and certificate revocation lists +inside the context's cert store. + +NOTE: Certificates in a capath directory aren't loaded unless they have +been used at least once. +[clinic start generated code]*/ static PyObject * -cert_store_stats(PySSLContext *self) +_ssl__SSLContext_cert_store_stats_impl(PySSLContext *self) +/*[clinic end generated code: output=5f356f4d9cca874d input=eb40dd0f6d0e40cf]*/ { X509_STORE *store; X509_OBJECT *obj; @@ -3351,27 +3442,26 @@ cert_store_stats(PySSLContext *self) "x509_ca", ca); } -PyDoc_STRVAR(PySSL_get_ca_certs_doc, -"get_ca_certs(binary_form=False) -> list of loaded certificate\n\ -\n\ -Returns a list of dicts with information of loaded CA certs. If the\n\ -optional argument is True, returns a DER-encoded copy of the CA certificate.\n\ -NOTE: Certificates in a capath directory aren't loaded unless they have\n\ -been used at least once."); +/*[clinic input] +_ssl._SSLContext.get_ca_certs + binary_form: bool = False + +Returns a list of dicts with information of loaded CA certs. + +If the optional argument is True, returns a DER-encoded copy of the CA +certificate. + +NOTE: Certificates in a capath directory aren't loaded unless they have +been used at least once. +[clinic start generated code]*/ static PyObject * -get_ca_certs(PySSLContext *self, PyObject *args, PyObject *kwds) +_ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form) +/*[clinic end generated code: output=0d58f148f37e2938 input=6887b5a09b7f9076]*/ { - char *kwlist[] = {"binary_form", NULL}; X509_STORE *store; PyObject *ci = NULL, *rlist = NULL; int i; - int binary_mode = 0; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|p:get_ca_certs", - kwlist, &binary_mode)) { - return NULL; - } if ((rlist = PyList_New(0)) == NULL) { return NULL; @@ -3392,7 +3482,7 @@ get_ca_certs(PySSLContext *self, PyObject *args, PyObject *kwds) if (!X509_check_ca(cert)) { continue; } - if (binary_mode) { + if (binary_form) { ci = _certificate_to_der(cert); } else { ci = _decode_certificate(cert); @@ -3427,36 +3517,20 @@ static PyGetSetDef context_getsetlist[] = { }; static struct PyMethodDef context_methods[] = { - {"_wrap_socket", (PyCFunction) context_wrap_socket, - METH_VARARGS | METH_KEYWORDS, NULL}, - {"_wrap_bio", (PyCFunction) context_wrap_bio, - METH_VARARGS | METH_KEYWORDS, NULL}, - {"set_ciphers", (PyCFunction) set_ciphers, - METH_VARARGS, NULL}, - {"_set_alpn_protocols", (PyCFunction) _set_alpn_protocols, - METH_VARARGS, NULL}, - {"_set_npn_protocols", (PyCFunction) _set_npn_protocols, - METH_VARARGS, NULL}, - {"load_cert_chain", (PyCFunction) load_cert_chain, - METH_VARARGS | METH_KEYWORDS, NULL}, - {"load_dh_params", (PyCFunction) load_dh_params, - METH_O, NULL}, - {"load_verify_locations", (PyCFunction) load_verify_locations, - METH_VARARGS | METH_KEYWORDS, NULL}, - {"session_stats", (PyCFunction) session_stats, - METH_NOARGS, NULL}, - {"set_default_verify_paths", (PyCFunction) set_default_verify_paths, - METH_NOARGS, NULL}, -#ifndef OPENSSL_NO_ECDH - {"set_ecdh_curve", (PyCFunction) set_ecdh_curve, - METH_O, NULL}, -#endif - {"set_servername_callback", (PyCFunction) set_servername_callback, - METH_VARARGS, PySSL_set_servername_callback_doc}, - {"cert_store_stats", (PyCFunction) cert_store_stats, - METH_NOARGS, PySSL_get_stats_doc}, - {"get_ca_certs", (PyCFunction) get_ca_certs, - METH_VARARGS | METH_KEYWORDS, PySSL_get_ca_certs_doc}, + _SSL__SSLCONTEXT__WRAP_SOCKET_METHODDEF + _SSL__SSLCONTEXT__WRAP_BIO_METHODDEF + _SSL__SSLCONTEXT_SET_CIPHERS_METHODDEF + _SSL__SSLCONTEXT__SET_ALPN_PROTOCOLS_METHODDEF + _SSL__SSLCONTEXT__SET_NPN_PROTOCOLS_METHODDEF + _SSL__SSLCONTEXT_LOAD_CERT_CHAIN_METHODDEF + _SSL__SSLCONTEXT_LOAD_DH_PARAMS_METHODDEF + _SSL__SSLCONTEXT_LOAD_VERIFY_LOCATIONS_METHODDEF + _SSL__SSLCONTEXT_SESSION_STATS_METHODDEF + _SSL__SSLCONTEXT_SET_DEFAULT_VERIFY_PATHS_METHODDEF + _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF + _SSL__SSLCONTEXT_SET_SERVERNAME_CALLBACK_METHODDEF + _SSL__SSLCONTEXT_CERT_STORE_STATS_METHODDEF + _SSL__SSLCONTEXT_GET_CA_CERTS_METHODDEF {NULL, NULL} /* sentinel */ }; @@ -3498,7 +3572,7 @@ static PyTypeObject PySSLContext_Type = { 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ - context_new, /*tp_new*/ + _ssl__SSLContext, /*tp_new*/ }; @@ -3506,16 +3580,19 @@ static PyTypeObject PySSLContext_Type = { * MemoryBIO objects */ +/*[clinic input] +@classmethod +_ssl.MemoryBIO.__new__ + +[clinic start generated code]*/ + static PyObject * -memory_bio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +_ssl_MemoryBIO_impl(PyTypeObject *type) +/*[clinic end generated code: output=8820a58db78330ac input=26d22e4909ecb1b5]*/ { - char *kwlist[] = {NULL}; BIO *bio; PySSLMemoryBIO *self; - if (!PyArg_ParseTupleAndKeywords(args, kwds, ":MemoryBIO", kwlist)) - return NULL; - bio = BIO_new(BIO_s_mem()); if (bio == NULL) { PyErr_SetString(PySSLErrorObject, @@ -3566,15 +3643,26 @@ memory_bio_get_eof(PySSLMemoryBIO *self, void *c) PyDoc_STRVAR(PySSL_memory_bio_eof_doc, "Whether the memory BIO is at EOF."); +/*[clinic input] +_ssl.MemoryBIO.read + size as len: int = -1 + / + +Read up to size bytes from the memory BIO. + +If size is not specified, read the entire buffer. +If the return value is an empty bytes instance, this means either +EOF or that no data is available. Use the "eof" property to +distinguish between the two. +[clinic start generated code]*/ + static PyObject * -memory_bio_read(PySSLMemoryBIO *self, PyObject *args) +_ssl_MemoryBIO_read_impl(PySSLMemoryBIO *self, int len) +/*[clinic end generated code: output=a657aa1e79cd01b3 input=574d7be06a902366]*/ { - int len = -1, avail, nbytes; + int avail, nbytes; PyObject *result; - if (!PyArg_ParseTuple(args, "|i:read", &len)) - return NULL; - avail = BIO_ctrl_pending(self->bio); if ((len < 0) || (len > avail)) len = avail; @@ -3593,59 +3681,54 @@ memory_bio_read(PySSLMemoryBIO *self, PyObject *args) return result; } -PyDoc_STRVAR(PySSL_memory_bio_read_doc, -"read([len]) -> bytes\n\ -\n\ -Read up to len bytes from the memory BIO.\n\ -\n\ -If len is not specified, read the entire buffer.\n\ -If the return value is an empty bytes instance, this means either\n\ -EOF or that no data is available. Use the \"eof\" property to\n\ -distinguish between the two."); +/*[clinic input] +_ssl.MemoryBIO.write + b: Py_buffer + / + +Writes the bytes b into the memory BIO. + +Returns the number of bytes written. +[clinic start generated code]*/ static PyObject * -memory_bio_write(PySSLMemoryBIO *self, PyObject *args) +_ssl_MemoryBIO_write_impl(PySSLMemoryBIO *self, Py_buffer *b) +/*[clinic end generated code: output=156ec59110d75935 input=e45757b3e17c4808]*/ { - Py_buffer buf; int nbytes; - if (!PyArg_ParseTuple(args, "y*:write", &buf)) - return NULL; - - if (buf.len > INT_MAX) { + if (b->len > INT_MAX) { PyErr_Format(PyExc_OverflowError, "string longer than %d bytes", INT_MAX); - goto error; + return NULL; } if (self->eof_written) { PyErr_SetString(PySSLErrorObject, "cannot write() after write_eof()"); - goto error; + return NULL; } - nbytes = BIO_write(self->bio, buf.buf, buf.len); + nbytes = BIO_write(self->bio, b->buf, b->len); if (nbytes < 0) { _setSSLError(NULL, 0, __FILE__, __LINE__); - goto error; + return NULL; } - PyBuffer_Release(&buf); return PyLong_FromLong(nbytes); - -error: - PyBuffer_Release(&buf); - return NULL; } -PyDoc_STRVAR(PySSL_memory_bio_write_doc, -"write(b) -> len\n\ -\n\ -Writes the bytes b into the memory BIO. Returns the number\n\ -of bytes written."); +/*[clinic input] +_ssl.MemoryBIO.write_eof + +Write an EOF marker to the memory BIO. + +When all data has been read, the "eof" property will be True. +[clinic start generated code]*/ static PyObject * -memory_bio_write_eof(PySSLMemoryBIO *self, PyObject *args) +_ssl_MemoryBIO_write_eof_impl(PySSLMemoryBIO *self) +/*[clinic end generated code: output=d4106276ccd1ed34 input=56a945f1d29e8bd6]*/ { self->eof_written = 1; /* After an EOF is written, a zero return from read() should be a real EOF @@ -3656,12 +3739,6 @@ memory_bio_write_eof(PySSLMemoryBIO *self, PyObject *args) Py_RETURN_NONE; } -PyDoc_STRVAR(PySSL_memory_bio_write_eof_doc, -"write_eof()\n\ -\n\ -Write an EOF marker to the memory BIO.\n\ -When all data has been read, the \"eof\" property will be True."); - static PyGetSetDef memory_bio_getsetlist[] = { {"pending", (getter) memory_bio_get_pending, NULL, PySSL_memory_bio_pending_doc}, @@ -3671,12 +3748,9 @@ static PyGetSetDef memory_bio_getsetlist[] = { }; static struct PyMethodDef memory_bio_methods[] = { - {"read", (PyCFunction) memory_bio_read, - METH_VARARGS, PySSL_memory_bio_read_doc}, - {"write", (PyCFunction) memory_bio_write, - METH_VARARGS, PySSL_memory_bio_write_doc}, - {"write_eof", (PyCFunction) memory_bio_write_eof, - METH_NOARGS, PySSL_memory_bio_write_eof_doc}, + _SSL_MEMORYBIO_READ_METHODDEF + _SSL_MEMORYBIO_WRITE_METHODDEF + _SSL_MEMORYBIO_WRITE_EOF_METHODDEF {NULL, NULL} /* sentinel */ }; @@ -3718,40 +3792,42 @@ static PyTypeObject PySSLMemoryBIO_Type = { 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ - memory_bio_new, /*tp_new*/ + _ssl_MemoryBIO, /*tp_new*/ }; /* helper routines for seeding the SSL PRNG */ +/*[clinic input] +_ssl.RAND_add + string as view: Py_buffer(types={'str', 'buffer'}) + entropy: double + / + +Mix string into the OpenSSL PRNG state. + +entropy (a float) is a lower bound on the entropy contained in +string. See RFC 1750. +[clinic start generated code]*/ + static PyObject * -PySSL_RAND_add(PyObject *self, PyObject *args) +_ssl_RAND_add_impl(PyModuleDef *module, Py_buffer *view, double entropy) +/*[clinic end generated code: output=0f8d5c8cce328958 input=c98b11d606b354bc]*/ { - Py_buffer view; const char *buf; Py_ssize_t len, written; - double entropy; - if (!PyArg_ParseTuple(args, "s*d:RAND_add", &view, &entropy)) - return NULL; - buf = (const char *)view.buf; - len = view.len; + buf = (const char *)view->buf; + len = view->len; do { written = Py_MIN(len, INT_MAX); RAND_add(buf, (int)written, entropy); buf += written; len -= written; } while (len); - PyBuffer_Release(&view); Py_INCREF(Py_None); return Py_None; } -PyDoc_STRVAR(PySSL_RAND_add_doc, -"RAND_add(string, entropy)\n\ -\n\ -Mix string into the OpenSSL PRNG state. entropy (a float) is a lower\n\ -bound on the entropy contained in string. See RFC 1750."); - static PyObject * PySSL_RAND(int len, int pseudo) { @@ -3791,60 +3867,72 @@ PySSL_RAND(int len, int pseudo) return NULL; } +/*[clinic input] +_ssl.RAND_bytes + n: int + / + +Generate n cryptographically strong pseudo-random bytes. +[clinic start generated code]*/ + static PyObject * -PySSL_RAND_bytes(PyObject *self, PyObject *args) +_ssl_RAND_bytes_impl(PyModuleDef *module, int n) +/*[clinic end generated code: output=7d8741bdc1d435f3 input=678ddf2872dfebfc]*/ { - int len; - if (!PyArg_ParseTuple(args, "i:RAND_bytes", &len)) - return NULL; - return PySSL_RAND(len, 0); + return PySSL_RAND(n, 0); } -PyDoc_STRVAR(PySSL_RAND_bytes_doc, -"RAND_bytes(n) -> bytes\n\ -\n\ -Generate n cryptographically strong pseudo-random bytes."); +/*[clinic input] +_ssl.RAND_pseudo_bytes + n: int + / + +Generate n pseudo-random bytes. + +Return a pair (bytes, is_cryptographic). is_cryptographic is True +if the bytes generated are cryptographically strong. +[clinic start generated code]*/ static PyObject * -PySSL_RAND_pseudo_bytes(PyObject *self, PyObject *args) +_ssl_RAND_pseudo_bytes_impl(PyModuleDef *module, int n) +/*[clinic end generated code: output=dd673813107f3875 input=58312bd53f9bbdd0]*/ { - int len; - if (!PyArg_ParseTuple(args, "i:RAND_pseudo_bytes", &len)) - return NULL; - return PySSL_RAND(len, 1); + return PySSL_RAND(n, 1); } -PyDoc_STRVAR(PySSL_RAND_pseudo_bytes_doc, -"RAND_pseudo_bytes(n) -> (bytes, is_cryptographic)\n\ -\n\ -Generate n pseudo-random bytes. is_cryptographic is True if the bytes\ -generated are cryptographically strong."); +/*[clinic input] +_ssl.RAND_status + +Returns 1 if the OpenSSL PRNG has been seeded with enough data and 0 if not. + +It is necessary to seed the PRNG with RAND_add() on some platforms before +using the ssl() function. +[clinic start generated code]*/ static PyObject * -PySSL_RAND_status(PyObject *self) +_ssl_RAND_status_impl(PyModuleDef *module) +/*[clinic end generated code: output=7f7ef57bc7dd1d1c input=8a774b02d1dc81f3]*/ { return PyLong_FromLong(RAND_status()); } -PyDoc_STRVAR(PySSL_RAND_status_doc, -"RAND_status() -> 0 or 1\n\ -\n\ -Returns 1 if the OpenSSL PRNG has been seeded with enough data and 0 if not.\n\ -It is necessary to seed the PRNG with RAND_add() on some platforms before\n\ -using the ssl() function."); - #ifdef HAVE_RAND_EGD -static PyObject * -PySSL_RAND_egd(PyObject *self, PyObject *args) -{ - PyObject *path; - int bytes; +/*[clinic input] +_ssl.RAND_egd + path: object(converter="PyUnicode_FSConverter") + / - if (!PyArg_ParseTuple(args, "O&:RAND_egd", - PyUnicode_FSConverter, &path)) - return NULL; +Queries the entropy gather daemon (EGD) on the socket named by 'path'. - bytes = RAND_egd(PyBytes_AsString(path)); +Returns number of bytes read. Raises SSLError if connection to EGD +fails or if it does not provide enough data to seed PRNG. +[clinic start generated code]*/ + +static PyObject * +_ssl_RAND_egd_impl(PyModuleDef *module, PyObject *path) +/*[clinic end generated code: output=8e728e501e28541b input=1aeb7eb948312195]*/ +{ + int bytes = RAND_egd(PyBytes_AsString(path)); Py_DECREF(path); if (bytes == -1) { PyErr_SetString(PySSLErrorObject, @@ -3854,25 +3942,21 @@ PySSL_RAND_egd(PyObject *self, PyObject *args) } return PyLong_FromLong(bytes); } - -PyDoc_STRVAR(PySSL_RAND_egd_doc, -"RAND_egd(path) -> bytes\n\ -\n\ -Queries the entropy gather daemon (EGD) on the socket named by 'path'.\n\ -Returns number of bytes read. Raises SSLError if connection to EGD\n\ -fails or if it does not provide enough data to seed PRNG."); #endif /* HAVE_RAND_EGD */ -PyDoc_STRVAR(PySSL_get_default_verify_paths_doc, -"get_default_verify_paths() -> tuple\n\ -\n\ -Return search paths and environment vars that are used by SSLContext's\n\ -set_default_verify_paths() to load default CAs. The values are\n\ -'cert_file_env', 'cert_file', 'cert_dir_env', 'cert_dir'."); + +/*[clinic input] +_ssl.get_default_verify_paths + +Return search paths and environment vars that are used by SSLContext's set_default_verify_paths() to load default CAs. + +The values are 'cert_file_env', 'cert_file', 'cert_dir_env', 'cert_dir'. +[clinic start generated code]*/ static PyObject * -PySSL_get_default_verify_paths(PyObject *self) +_ssl_get_default_verify_paths_impl(PyModuleDef *module) +/*[clinic end generated code: output=5a2820ce7e3304d3 input=5210c953d98c3eb5]*/ { PyObject *ofile_env = NULL; PyObject *ofile = NULL; @@ -3931,26 +4015,24 @@ asn1obj2py(ASN1_OBJECT *obj) } } -PyDoc_STRVAR(PySSL_txt2obj_doc, -"txt2obj(txt, name=False) -> (nid, shortname, longname, oid)\n\ -\n\ -Lookup NID, short name, long name and OID of an ASN1_OBJECT. By default\n\ -objects are looked up by OID. With name=True short and long name are also\n\ -matched."); +/*[clinic input] +_ssl.txt2obj + txt: str + name: bool = False -static PyObject* -PySSL_txt2obj(PyObject *self, PyObject *args, PyObject *kwds) +Lookup NID, short name, long name and OID of an ASN1_OBJECT. + +By default objects are looked up by OID. With name=True short and +long name are also matched. +[clinic start generated code]*/ + +static PyObject * +_ssl_txt2obj_impl(PyModuleDef *module, const char *txt, int name) +/*[clinic end generated code: output=2ae2c30531b8809f input=1c1e7d0aa7c48602]*/ { - char *kwlist[] = {"txt", "name", NULL}; PyObject *result = NULL; - char *txt; - int name = 0; ASN1_OBJECT *obj; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|p:txt2obj", - kwlist, &txt, &name)) { - return NULL; - } obj = OBJ_txt2obj(txt, name ? 0 : 1); if (obj == NULL) { PyErr_Format(PyExc_ValueError, "unknown object '%.100s'", txt); @@ -3961,21 +4043,21 @@ PySSL_txt2obj(PyObject *self, PyObject *args, PyObject *kwds) return result; } -PyDoc_STRVAR(PySSL_nid2obj_doc, -"nid2obj(nid) -> (nid, shortname, longname, oid)\n\ -\n\ -Lookup NID, short name, long name and OID of an ASN1_OBJECT by NID."); +/*[clinic input] +_ssl.nid2obj + nid: int + / -static PyObject* -PySSL_nid2obj(PyObject *self, PyObject *args) +Lookup NID, short name, long name and OID of an ASN1_OBJECT by NID. +[clinic start generated code]*/ + +static PyObject * +_ssl_nid2obj_impl(PyModuleDef *module, int nid) +/*[clinic end generated code: output=8db1df89e44badb8 input=51787a3bee7d8f98]*/ { PyObject *result = NULL; - int nid; ASN1_OBJECT *obj; - if (!PyArg_ParseTuple(args, "i:nid2obj", &nid)) { - return NULL; - } if (nid < NID_undef) { PyErr_SetString(PyExc_ValueError, "NID must be positive."); return NULL; @@ -4075,30 +4157,28 @@ parseKeyUsage(PCCERT_CONTEXT pCertCtx, DWORD flags) return retval; } -PyDoc_STRVAR(PySSL_enum_certificates_doc, -"enum_certificates(store_name) -> []\n\ -\n\ -Retrieve certificates from Windows' cert store. store_name may be one of\n\ -'CA', 'ROOT' or 'MY'. The system may provide more cert storages, too.\n\ -The function returns a list of (bytes, encoding_type, trust) tuples. The\n\ -encoding_type flag can be interpreted with X509_ASN_ENCODING or\n\ -PKCS_7_ASN_ENCODING. The trust setting is either a set of OIDs or the\n\ -boolean True."); +/*[clinic input] +_ssl.enum_certificates + store_name: str + +Retrieve certificates from Windows' cert store. + +store_name may be one of 'CA', 'ROOT' or 'MY'. The system may provide +more cert storages, too. The function returns a list of (bytes, +encoding_type, trust) tuples. The encoding_type flag can be interpreted +with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The trust setting is either +a set of OIDs or the boolean True. +[clinic start generated code]*/ static PyObject * -PySSL_enum_certificates(PyObject *self, PyObject *args, PyObject *kwds) +_ssl_enum_certificates_impl(PyModuleDef *module, const char *store_name) +/*[clinic end generated code: output=cc4ebc10b8adacfc input=915f60d70461ea4e]*/ { - char *kwlist[] = {"store_name", NULL}; - char *store_name; HCERTSTORE hStore = NULL; PCCERT_CONTEXT pCertCtx = NULL; PyObject *keyusage = NULL, *cert = NULL, *enc = NULL, *tup = NULL; PyObject *result = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "s:enum_certificates", - kwlist, &store_name)) { - return NULL; - } result = PyList_New(0); if (result == NULL) { return NULL; @@ -4164,29 +4244,27 @@ PySSL_enum_certificates(PyObject *self, PyObject *args, PyObject *kwds) return result; } -PyDoc_STRVAR(PySSL_enum_crls_doc, -"enum_crls(store_name) -> []\n\ -\n\ -Retrieve CRLs from Windows' cert store. store_name may be one of\n\ -'CA', 'ROOT' or 'MY'. The system may provide more cert storages, too.\n\ -The function returns a list of (bytes, encoding_type) tuples. The\n\ -encoding_type flag can be interpreted with X509_ASN_ENCODING or\n\ -PKCS_7_ASN_ENCODING."); +/*[clinic input] +_ssl.enum_crls + store_name: str + +Retrieve CRLs from Windows' cert store. + +store_name may be one of 'CA', 'ROOT' or 'MY'. The system may provide +more cert storages, too. The function returns a list of (bytes, +encoding_type) tuples. The encoding_type flag can be interpreted with +X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. +[clinic start generated code]*/ static PyObject * -PySSL_enum_crls(PyObject *self, PyObject *args, PyObject *kwds) +_ssl_enum_crls_impl(PyModuleDef *module, const char *store_name) +/*[clinic end generated code: output=763490a2aa1c50d5 input=a1f1d7629f1c5d3d]*/ { - char *kwlist[] = {"store_name", NULL}; - char *store_name; HCERTSTORE hStore = NULL; PCCRL_CONTEXT pCrlCtx = NULL; PyObject *crl = NULL, *enc = NULL, *tup = NULL; PyObject *result = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "s:enum_crls", - kwlist, &store_name)) { - return NULL; - } result = PyList_New(0); if (result == NULL) { return NULL; @@ -4244,34 +4322,18 @@ PySSL_enum_crls(PyObject *self, PyObject *args, PyObject *kwds) #endif /* _MSC_VER */ /* List of functions exported by this module. */ - static PyMethodDef PySSL_methods[] = { - {"_test_decode_cert", PySSL_test_decode_certificate, - METH_VARARGS}, - {"RAND_add", PySSL_RAND_add, METH_VARARGS, - PySSL_RAND_add_doc}, - {"RAND_bytes", PySSL_RAND_bytes, METH_VARARGS, - PySSL_RAND_bytes_doc}, - {"RAND_pseudo_bytes", PySSL_RAND_pseudo_bytes, METH_VARARGS, - PySSL_RAND_pseudo_bytes_doc}, -#ifdef HAVE_RAND_EGD - {"RAND_egd", PySSL_RAND_egd, METH_VARARGS, - PySSL_RAND_egd_doc}, -#endif - {"RAND_status", (PyCFunction)PySSL_RAND_status, METH_NOARGS, - PySSL_RAND_status_doc}, - {"get_default_verify_paths", (PyCFunction)PySSL_get_default_verify_paths, - METH_NOARGS, PySSL_get_default_verify_paths_doc}, -#ifdef _MSC_VER - {"enum_certificates", (PyCFunction)PySSL_enum_certificates, - METH_VARARGS | METH_KEYWORDS, PySSL_enum_certificates_doc}, - {"enum_crls", (PyCFunction)PySSL_enum_crls, - METH_VARARGS | METH_KEYWORDS, PySSL_enum_crls_doc}, -#endif - {"txt2obj", (PyCFunction)PySSL_txt2obj, - METH_VARARGS | METH_KEYWORDS, PySSL_txt2obj_doc}, - {"nid2obj", (PyCFunction)PySSL_nid2obj, - METH_VARARGS, PySSL_nid2obj_doc}, + _SSL__TEST_DECODE_CERT_METHODDEF + _SSL_RAND_ADD_METHODDEF + _SSL_RAND_BYTES_METHODDEF + _SSL_RAND_PSEUDO_BYTES_METHODDEF + _SSL_RAND_EGD_METHODDEF + _SSL_RAND_STATUS_METHODDEF + _SSL_GET_DEFAULT_VERIFY_PATHS_METHODDEF + _SSL_ENUM_CERTIFICATES_METHODDEF + _SSL_ENUM_CRLS_METHODDEF + _SSL_TXT2OBJ_METHODDEF + _SSL_NID2OBJ_METHODDEF {NULL, NULL} /* Sentinel */ }; diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h new file mode 100644 index 0000000000..4dbc5d0010 --- /dev/null +++ b/Modules/clinic/_ssl.c.h @@ -0,0 +1,1105 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_ssl__SSLSocket_do_handshake__doc__, +"do_handshake($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLSOCKET_DO_HANDSHAKE_METHODDEF \ + {"do_handshake", (PyCFunction)_ssl__SSLSocket_do_handshake, METH_NOARGS, _ssl__SSLSocket_do_handshake__doc__}, + +static PyObject * +_ssl__SSLSocket_do_handshake_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_do_handshake(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_do_handshake_impl(self); +} + +PyDoc_STRVAR(_ssl__test_decode_cert__doc__, +"_test_decode_cert($module, path, /)\n" +"--\n" +"\n"); + +#define _SSL__TEST_DECODE_CERT_METHODDEF \ + {"_test_decode_cert", (PyCFunction)_ssl__test_decode_cert, METH_O, _ssl__test_decode_cert__doc__}, + +static PyObject * +_ssl__test_decode_cert_impl(PyModuleDef *module, PyObject *path); + +static PyObject * +_ssl__test_decode_cert(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *path; + + if (!PyArg_Parse(arg, "O&:_test_decode_cert", PyUnicode_FSConverter, &path)) + goto exit; + return_value = _ssl__test_decode_cert_impl(module, path); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLSocket_peer_certificate__doc__, +"peer_certificate($self, der=False, /)\n" +"--\n" +"\n" +"Returns the certificate for the peer.\n" +"\n" +"If no certificate was provided, returns None. If a certificate was\n" +"provided, but not validated, returns an empty dictionary. Otherwise\n" +"returns a dict containing information about the peer certificate.\n" +"\n" +"If the optional argument is True, returns a DER-encoded copy of the\n" +"peer certificate, or None if no certificate was provided. This will\n" +"return the certificate even if it wasn\'t validated."); + +#define _SSL__SSLSOCKET_PEER_CERTIFICATE_METHODDEF \ + {"peer_certificate", (PyCFunction)_ssl__SSLSocket_peer_certificate, METH_VARARGS, _ssl__SSLSocket_peer_certificate__doc__}, + +static PyObject * +_ssl__SSLSocket_peer_certificate_impl(PySSLSocket *self, int binary_mode); + +static PyObject * +_ssl__SSLSocket_peer_certificate(PySSLSocket *self, PyObject *args) +{ + PyObject *return_value = NULL; + int binary_mode = 0; + + if (!PyArg_ParseTuple(args, "|p:peer_certificate", + &binary_mode)) + goto exit; + return_value = _ssl__SSLSocket_peer_certificate_impl(self, binary_mode); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLSocket_shared_ciphers__doc__, +"shared_ciphers($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLSOCKET_SHARED_CIPHERS_METHODDEF \ + {"shared_ciphers", (PyCFunction)_ssl__SSLSocket_shared_ciphers, METH_NOARGS, _ssl__SSLSocket_shared_ciphers__doc__}, + +static PyObject * +_ssl__SSLSocket_shared_ciphers_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_shared_ciphers(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_shared_ciphers_impl(self); +} + +PyDoc_STRVAR(_ssl__SSLSocket_cipher__doc__, +"cipher($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLSOCKET_CIPHER_METHODDEF \ + {"cipher", (PyCFunction)_ssl__SSLSocket_cipher, METH_NOARGS, _ssl__SSLSocket_cipher__doc__}, + +static PyObject * +_ssl__SSLSocket_cipher_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_cipher(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_cipher_impl(self); +} + +PyDoc_STRVAR(_ssl__SSLSocket_version__doc__, +"version($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLSOCKET_VERSION_METHODDEF \ + {"version", (PyCFunction)_ssl__SSLSocket_version, METH_NOARGS, _ssl__SSLSocket_version__doc__}, + +static PyObject * +_ssl__SSLSocket_version_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_version(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_version_impl(self); +} + +#if defined(OPENSSL_NPN_NEGOTIATED) + +PyDoc_STRVAR(_ssl__SSLSocket_selected_npn_protocol__doc__, +"selected_npn_protocol($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF \ + {"selected_npn_protocol", (PyCFunction)_ssl__SSLSocket_selected_npn_protocol, METH_NOARGS, _ssl__SSLSocket_selected_npn_protocol__doc__}, + +static PyObject * +_ssl__SSLSocket_selected_npn_protocol_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_selected_npn_protocol(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_selected_npn_protocol_impl(self); +} + +#endif /* defined(OPENSSL_NPN_NEGOTIATED) */ + +#if defined(HAVE_ALPN) + +PyDoc_STRVAR(_ssl__SSLSocket_selected_alpn_protocol__doc__, +"selected_alpn_protocol($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF \ + {"selected_alpn_protocol", (PyCFunction)_ssl__SSLSocket_selected_alpn_protocol, METH_NOARGS, _ssl__SSLSocket_selected_alpn_protocol__doc__}, + +static PyObject * +_ssl__SSLSocket_selected_alpn_protocol_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_selected_alpn_protocol(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_selected_alpn_protocol_impl(self); +} + +#endif /* defined(HAVE_ALPN) */ + +PyDoc_STRVAR(_ssl__SSLSocket_compression__doc__, +"compression($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLSOCKET_COMPRESSION_METHODDEF \ + {"compression", (PyCFunction)_ssl__SSLSocket_compression, METH_NOARGS, _ssl__SSLSocket_compression__doc__}, + +static PyObject * +_ssl__SSLSocket_compression_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_compression(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_compression_impl(self); +} + +PyDoc_STRVAR(_ssl__SSLSocket_write__doc__, +"write($self, b, /)\n" +"--\n" +"\n" +"Writes the bytes-like object b into the SSL object.\n" +"\n" +"Returns the number of bytes written."); + +#define _SSL__SSLSOCKET_WRITE_METHODDEF \ + {"write", (PyCFunction)_ssl__SSLSocket_write, METH_O, _ssl__SSLSocket_write__doc__}, + +static PyObject * +_ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b); + +static PyObject * +_ssl__SSLSocket_write(PySSLSocket *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer b = {NULL, NULL}; + + if (!PyArg_Parse(arg, "y*:write", &b)) + goto exit; + return_value = _ssl__SSLSocket_write_impl(self, &b); + +exit: + /* Cleanup for b */ + if (b.obj) + PyBuffer_Release(&b); + + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLSocket_pending__doc__, +"pending($self, /)\n" +"--\n" +"\n" +"Returns the number of already decrypted bytes available for read, pending on the connection."); + +#define _SSL__SSLSOCKET_PENDING_METHODDEF \ + {"pending", (PyCFunction)_ssl__SSLSocket_pending, METH_NOARGS, _ssl__SSLSocket_pending__doc__}, + +static PyObject * +_ssl__SSLSocket_pending_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_pending(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_pending_impl(self); +} + +PyDoc_STRVAR(_ssl__SSLSocket_read__doc__, +"read(size, [buffer])\n" +"Read up to size bytes from the SSL socket."); + +#define _SSL__SSLSOCKET_READ_METHODDEF \ + {"read", (PyCFunction)_ssl__SSLSocket_read, METH_VARARGS, _ssl__SSLSocket_read__doc__}, + +static PyObject * +_ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, + Py_buffer *buffer); + +static PyObject * +_ssl__SSLSocket_read(PySSLSocket *self, PyObject *args) +{ + PyObject *return_value = NULL; + int len; + int group_right_1 = 0; + Py_buffer buffer = {NULL, NULL}; + + switch (PyTuple_GET_SIZE(args)) { + case 1: + if (!PyArg_ParseTuple(args, "i:read", &len)) + goto exit; + break; + case 2: + if (!PyArg_ParseTuple(args, "iw*:read", &len, &buffer)) + goto exit; + group_right_1 = 1; + break; + default: + PyErr_SetString(PyExc_TypeError, "_ssl._SSLSocket.read requires 1 to 2 arguments"); + goto exit; + } + return_value = _ssl__SSLSocket_read_impl(self, len, group_right_1, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) + PyBuffer_Release(&buffer); + + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLSocket_shutdown__doc__, +"shutdown($self, /)\n" +"--\n" +"\n" +"Does the SSL shutdown handshake with the remote end.\n" +"\n" +"Returns the underlying socket object."); + +#define _SSL__SSLSOCKET_SHUTDOWN_METHODDEF \ + {"shutdown", (PyCFunction)_ssl__SSLSocket_shutdown, METH_NOARGS, _ssl__SSLSocket_shutdown__doc__}, + +static PyObject * +_ssl__SSLSocket_shutdown_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_shutdown(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_shutdown_impl(self); +} + +PyDoc_STRVAR(_ssl__SSLSocket_tls_unique_cb__doc__, +"tls_unique_cb($self, /)\n" +"--\n" +"\n" +"Returns the \'tls-unique\' channel binding data, as defined by RFC 5929.\n" +"\n" +"If the TLS handshake is not yet complete, None is returned."); + +#define _SSL__SSLSOCKET_TLS_UNIQUE_CB_METHODDEF \ + {"tls_unique_cb", (PyCFunction)_ssl__SSLSocket_tls_unique_cb, METH_NOARGS, _ssl__SSLSocket_tls_unique_cb__doc__}, + +static PyObject * +_ssl__SSLSocket_tls_unique_cb_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_tls_unique_cb(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_tls_unique_cb_impl(self); +} + +static PyObject * +_ssl__SSLContext_impl(PyTypeObject *type, int proto_version); + +static PyObject * +_ssl__SSLContext(PyTypeObject *type, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + int proto_version; + + if ((type == &PySSLContext_Type) && + !_PyArg_NoKeywords("_SSLContext", kwargs)) + goto exit; + if (!PyArg_ParseTuple(args, "i:_SSLContext", + &proto_version)) + goto exit; + return_value = _ssl__SSLContext_impl(type, proto_version); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLContext_set_ciphers__doc__, +"set_ciphers($self, cipherlist, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT_SET_CIPHERS_METHODDEF \ + {"set_ciphers", (PyCFunction)_ssl__SSLContext_set_ciphers, METH_O, _ssl__SSLContext_set_ciphers__doc__}, + +static PyObject * +_ssl__SSLContext_set_ciphers_impl(PySSLContext *self, const char *cipherlist); + +static PyObject * +_ssl__SSLContext_set_ciphers(PySSLContext *self, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *cipherlist; + + if (!PyArg_Parse(arg, "s:set_ciphers", &cipherlist)) + goto exit; + return_value = _ssl__SSLContext_set_ciphers_impl(self, cipherlist); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLContext__set_npn_protocols__doc__, +"_set_npn_protocols($self, protos, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT__SET_NPN_PROTOCOLS_METHODDEF \ + {"_set_npn_protocols", (PyCFunction)_ssl__SSLContext__set_npn_protocols, METH_O, _ssl__SSLContext__set_npn_protocols__doc__}, + +static PyObject * +_ssl__SSLContext__set_npn_protocols_impl(PySSLContext *self, + Py_buffer *protos); + +static PyObject * +_ssl__SSLContext__set_npn_protocols(PySSLContext *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer protos = {NULL, NULL}; + + if (!PyArg_Parse(arg, "y*:_set_npn_protocols", &protos)) + goto exit; + return_value = _ssl__SSLContext__set_npn_protocols_impl(self, &protos); + +exit: + /* Cleanup for protos */ + if (protos.obj) + PyBuffer_Release(&protos); + + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLContext__set_alpn_protocols__doc__, +"_set_alpn_protocols($self, protos, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT__SET_ALPN_PROTOCOLS_METHODDEF \ + {"_set_alpn_protocols", (PyCFunction)_ssl__SSLContext__set_alpn_protocols, METH_O, _ssl__SSLContext__set_alpn_protocols__doc__}, + +static PyObject * +_ssl__SSLContext__set_alpn_protocols_impl(PySSLContext *self, + Py_buffer *protos); + +static PyObject * +_ssl__SSLContext__set_alpn_protocols(PySSLContext *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer protos = {NULL, NULL}; + + if (!PyArg_Parse(arg, "y*:_set_alpn_protocols", &protos)) + goto exit; + return_value = _ssl__SSLContext__set_alpn_protocols_impl(self, &protos); + +exit: + /* Cleanup for protos */ + if (protos.obj) + PyBuffer_Release(&protos); + + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLContext_load_cert_chain__doc__, +"load_cert_chain($self, /, certfile, keyfile=None, password=None)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT_LOAD_CERT_CHAIN_METHODDEF \ + {"load_cert_chain", (PyCFunction)_ssl__SSLContext_load_cert_chain, METH_VARARGS|METH_KEYWORDS, _ssl__SSLContext_load_cert_chain__doc__}, + +static PyObject * +_ssl__SSLContext_load_cert_chain_impl(PySSLContext *self, PyObject *certfile, + PyObject *keyfile, PyObject *password); + +static PyObject * +_ssl__SSLContext_load_cert_chain(PySSLContext *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"certfile", "keyfile", "password", NULL}; + PyObject *certfile; + PyObject *keyfile = NULL; + PyObject *password = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OO:load_cert_chain", _keywords, + &certfile, &keyfile, &password)) + goto exit; + return_value = _ssl__SSLContext_load_cert_chain_impl(self, certfile, keyfile, password); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLContext_load_verify_locations__doc__, +"load_verify_locations($self, /, cafile=None, capath=None, cadata=None)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT_LOAD_VERIFY_LOCATIONS_METHODDEF \ + {"load_verify_locations", (PyCFunction)_ssl__SSLContext_load_verify_locations, METH_VARARGS|METH_KEYWORDS, _ssl__SSLContext_load_verify_locations__doc__}, + +static PyObject * +_ssl__SSLContext_load_verify_locations_impl(PySSLContext *self, + PyObject *cafile, + PyObject *capath, + PyObject *cadata); + +static PyObject * +_ssl__SSLContext_load_verify_locations(PySSLContext *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"cafile", "capath", "cadata", NULL}; + PyObject *cafile = NULL; + PyObject *capath = NULL; + PyObject *cadata = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OOO:load_verify_locations", _keywords, + &cafile, &capath, &cadata)) + goto exit; + return_value = _ssl__SSLContext_load_verify_locations_impl(self, cafile, capath, cadata); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLContext_load_dh_params__doc__, +"load_dh_params($self, path, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT_LOAD_DH_PARAMS_METHODDEF \ + {"load_dh_params", (PyCFunction)_ssl__SSLContext_load_dh_params, METH_O, _ssl__SSLContext_load_dh_params__doc__}, + +PyDoc_STRVAR(_ssl__SSLContext__wrap_socket__doc__, +"_wrap_socket($self, /, sock, server_side, server_hostname=None)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT__WRAP_SOCKET_METHODDEF \ + {"_wrap_socket", (PyCFunction)_ssl__SSLContext__wrap_socket, METH_VARARGS|METH_KEYWORDS, _ssl__SSLContext__wrap_socket__doc__}, + +static PyObject * +_ssl__SSLContext__wrap_socket_impl(PySSLContext *self, PyObject *sock, + int server_side, PyObject *hostname_obj); + +static PyObject * +_ssl__SSLContext__wrap_socket(PySSLContext *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"sock", "server_side", "server_hostname", NULL}; + PyObject *sock; + int server_side; + PyObject *hostname_obj = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!i|O:_wrap_socket", _keywords, + PySocketModule.Sock_Type, &sock, &server_side, &hostname_obj)) + goto exit; + return_value = _ssl__SSLContext__wrap_socket_impl(self, sock, server_side, hostname_obj); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLContext__wrap_bio__doc__, +"_wrap_bio($self, /, incoming, outgoing, server_side,\n" +" server_hostname=None)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT__WRAP_BIO_METHODDEF \ + {"_wrap_bio", (PyCFunction)_ssl__SSLContext__wrap_bio, METH_VARARGS|METH_KEYWORDS, _ssl__SSLContext__wrap_bio__doc__}, + +static PyObject * +_ssl__SSLContext__wrap_bio_impl(PySSLContext *self, PySSLMemoryBIO *incoming, + PySSLMemoryBIO *outgoing, int server_side, + PyObject *hostname_obj); + +static PyObject * +_ssl__SSLContext__wrap_bio(PySSLContext *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"incoming", "outgoing", "server_side", "server_hostname", NULL}; + PySSLMemoryBIO *incoming; + PySSLMemoryBIO *outgoing; + int server_side; + PyObject *hostname_obj = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!i|O:_wrap_bio", _keywords, + &PySSLMemoryBIO_Type, &incoming, &PySSLMemoryBIO_Type, &outgoing, &server_side, &hostname_obj)) + goto exit; + return_value = _ssl__SSLContext__wrap_bio_impl(self, incoming, outgoing, server_side, hostname_obj); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl__SSLContext_session_stats__doc__, +"session_stats($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT_SESSION_STATS_METHODDEF \ + {"session_stats", (PyCFunction)_ssl__SSLContext_session_stats, METH_NOARGS, _ssl__SSLContext_session_stats__doc__}, + +static PyObject * +_ssl__SSLContext_session_stats_impl(PySSLContext *self); + +static PyObject * +_ssl__SSLContext_session_stats(PySSLContext *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLContext_session_stats_impl(self); +} + +PyDoc_STRVAR(_ssl__SSLContext_set_default_verify_paths__doc__, +"set_default_verify_paths($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT_SET_DEFAULT_VERIFY_PATHS_METHODDEF \ + {"set_default_verify_paths", (PyCFunction)_ssl__SSLContext_set_default_verify_paths, METH_NOARGS, _ssl__SSLContext_set_default_verify_paths__doc__}, + +static PyObject * +_ssl__SSLContext_set_default_verify_paths_impl(PySSLContext *self); + +static PyObject * +_ssl__SSLContext_set_default_verify_paths(PySSLContext *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLContext_set_default_verify_paths_impl(self); +} + +#if !defined(OPENSSL_NO_ECDH) + +PyDoc_STRVAR(_ssl__SSLContext_set_ecdh_curve__doc__, +"set_ecdh_curve($self, name, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF \ + {"set_ecdh_curve", (PyCFunction)_ssl__SSLContext_set_ecdh_curve, METH_O, _ssl__SSLContext_set_ecdh_curve__doc__}, + +#endif /* !defined(OPENSSL_NO_ECDH) */ + +PyDoc_STRVAR(_ssl__SSLContext_set_servername_callback__doc__, +"set_servername_callback($self, method, /)\n" +"--\n" +"\n" +"Set a callback that will be called when a server name is provided by the SSL/TLS client in the SNI extension.\n" +"\n" +"If the argument is None then the callback is disabled. The method is called\n" +"with the SSLSocket, the server name as a string, and the SSLContext object.\n" +"See RFC 6066 for details of the SNI extension."); + +#define _SSL__SSLCONTEXT_SET_SERVERNAME_CALLBACK_METHODDEF \ + {"set_servername_callback", (PyCFunction)_ssl__SSLContext_set_servername_callback, METH_O, _ssl__SSLContext_set_servername_callback__doc__}, + +PyDoc_STRVAR(_ssl__SSLContext_cert_store_stats__doc__, +"cert_store_stats($self, /)\n" +"--\n" +"\n" +"Returns quantities of loaded X.509 certificates.\n" +"\n" +"X.509 certificates with a CA extension and certificate revocation lists\n" +"inside the context\'s cert store.\n" +"\n" +"NOTE: Certificates in a capath directory aren\'t loaded unless they have\n" +"been used at least once."); + +#define _SSL__SSLCONTEXT_CERT_STORE_STATS_METHODDEF \ + {"cert_store_stats", (PyCFunction)_ssl__SSLContext_cert_store_stats, METH_NOARGS, _ssl__SSLContext_cert_store_stats__doc__}, + +static PyObject * +_ssl__SSLContext_cert_store_stats_impl(PySSLContext *self); + +static PyObject * +_ssl__SSLContext_cert_store_stats(PySSLContext *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLContext_cert_store_stats_impl(self); +} + +PyDoc_STRVAR(_ssl__SSLContext_get_ca_certs__doc__, +"get_ca_certs($self, /, binary_form=False)\n" +"--\n" +"\n" +"Returns a list of dicts with information of loaded CA certs.\n" +"\n" +"If the optional argument is True, returns a DER-encoded copy of the CA\n" +"certificate.\n" +"\n" +"NOTE: Certificates in a capath directory aren\'t loaded unless they have\n" +"been used at least once."); + +#define _SSL__SSLCONTEXT_GET_CA_CERTS_METHODDEF \ + {"get_ca_certs", (PyCFunction)_ssl__SSLContext_get_ca_certs, METH_VARARGS|METH_KEYWORDS, _ssl__SSLContext_get_ca_certs__doc__}, + +static PyObject * +_ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form); + +static PyObject * +_ssl__SSLContext_get_ca_certs(PySSLContext *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"binary_form", NULL}; + int binary_form = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|p:get_ca_certs", _keywords, + &binary_form)) + goto exit; + return_value = _ssl__SSLContext_get_ca_certs_impl(self, binary_form); + +exit: + return return_value; +} + +static PyObject * +_ssl_MemoryBIO_impl(PyTypeObject *type); + +static PyObject * +_ssl_MemoryBIO(PyTypeObject *type, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + + if ((type == &PySSLMemoryBIO_Type) && + !_PyArg_NoPositional("MemoryBIO", args)) + goto exit; + if ((type == &PySSLMemoryBIO_Type) && + !_PyArg_NoKeywords("MemoryBIO", kwargs)) + goto exit; + return_value = _ssl_MemoryBIO_impl(type); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl_MemoryBIO_read__doc__, +"read($self, size=-1, /)\n" +"--\n" +"\n" +"Read up to size bytes from the memory BIO.\n" +"\n" +"If size is not specified, read the entire buffer.\n" +"If the return value is an empty bytes instance, this means either\n" +"EOF or that no data is available. Use the \"eof\" property to\n" +"distinguish between the two."); + +#define _SSL_MEMORYBIO_READ_METHODDEF \ + {"read", (PyCFunction)_ssl_MemoryBIO_read, METH_VARARGS, _ssl_MemoryBIO_read__doc__}, + +static PyObject * +_ssl_MemoryBIO_read_impl(PySSLMemoryBIO *self, int len); + +static PyObject * +_ssl_MemoryBIO_read(PySSLMemoryBIO *self, PyObject *args) +{ + PyObject *return_value = NULL; + int len = -1; + + if (!PyArg_ParseTuple(args, "|i:read", + &len)) + goto exit; + return_value = _ssl_MemoryBIO_read_impl(self, len); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl_MemoryBIO_write__doc__, +"write($self, b, /)\n" +"--\n" +"\n" +"Writes the bytes b into the memory BIO.\n" +"\n" +"Returns the number of bytes written."); + +#define _SSL_MEMORYBIO_WRITE_METHODDEF \ + {"write", (PyCFunction)_ssl_MemoryBIO_write, METH_O, _ssl_MemoryBIO_write__doc__}, + +static PyObject * +_ssl_MemoryBIO_write_impl(PySSLMemoryBIO *self, Py_buffer *b); + +static PyObject * +_ssl_MemoryBIO_write(PySSLMemoryBIO *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer b = {NULL, NULL}; + + if (!PyArg_Parse(arg, "y*:write", &b)) + goto exit; + return_value = _ssl_MemoryBIO_write_impl(self, &b); + +exit: + /* Cleanup for b */ + if (b.obj) + PyBuffer_Release(&b); + + return return_value; +} + +PyDoc_STRVAR(_ssl_MemoryBIO_write_eof__doc__, +"write_eof($self, /)\n" +"--\n" +"\n" +"Write an EOF marker to the memory BIO.\n" +"\n" +"When all data has been read, the \"eof\" property will be True."); + +#define _SSL_MEMORYBIO_WRITE_EOF_METHODDEF \ + {"write_eof", (PyCFunction)_ssl_MemoryBIO_write_eof, METH_NOARGS, _ssl_MemoryBIO_write_eof__doc__}, + +static PyObject * +_ssl_MemoryBIO_write_eof_impl(PySSLMemoryBIO *self); + +static PyObject * +_ssl_MemoryBIO_write_eof(PySSLMemoryBIO *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl_MemoryBIO_write_eof_impl(self); +} + +PyDoc_STRVAR(_ssl_RAND_add__doc__, +"RAND_add($module, string, entropy, /)\n" +"--\n" +"\n" +"Mix string into the OpenSSL PRNG state.\n" +"\n" +"entropy (a float) is a lower bound on the entropy contained in\n" +"string. See RFC 1750."); + +#define _SSL_RAND_ADD_METHODDEF \ + {"RAND_add", (PyCFunction)_ssl_RAND_add, METH_VARARGS, _ssl_RAND_add__doc__}, + +static PyObject * +_ssl_RAND_add_impl(PyModuleDef *module, Py_buffer *view, double entropy); + +static PyObject * +_ssl_RAND_add(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer view = {NULL, NULL}; + double entropy; + + if (!PyArg_ParseTuple(args, "s*d:RAND_add", + &view, &entropy)) + goto exit; + return_value = _ssl_RAND_add_impl(module, &view, entropy); + +exit: + /* Cleanup for view */ + if (view.obj) + PyBuffer_Release(&view); + + return return_value; +} + +PyDoc_STRVAR(_ssl_RAND_bytes__doc__, +"RAND_bytes($module, n, /)\n" +"--\n" +"\n" +"Generate n cryptographically strong pseudo-random bytes."); + +#define _SSL_RAND_BYTES_METHODDEF \ + {"RAND_bytes", (PyCFunction)_ssl_RAND_bytes, METH_O, _ssl_RAND_bytes__doc__}, + +static PyObject * +_ssl_RAND_bytes_impl(PyModuleDef *module, int n); + +static PyObject * +_ssl_RAND_bytes(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + int n; + + if (!PyArg_Parse(arg, "i:RAND_bytes", &n)) + goto exit; + return_value = _ssl_RAND_bytes_impl(module, n); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl_RAND_pseudo_bytes__doc__, +"RAND_pseudo_bytes($module, n, /)\n" +"--\n" +"\n" +"Generate n pseudo-random bytes.\n" +"\n" +"Return a pair (bytes, is_cryptographic). is_cryptographic is True\n" +"if the bytes generated are cryptographically strong."); + +#define _SSL_RAND_PSEUDO_BYTES_METHODDEF \ + {"RAND_pseudo_bytes", (PyCFunction)_ssl_RAND_pseudo_bytes, METH_O, _ssl_RAND_pseudo_bytes__doc__}, + +static PyObject * +_ssl_RAND_pseudo_bytes_impl(PyModuleDef *module, int n); + +static PyObject * +_ssl_RAND_pseudo_bytes(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + int n; + + if (!PyArg_Parse(arg, "i:RAND_pseudo_bytes", &n)) + goto exit; + return_value = _ssl_RAND_pseudo_bytes_impl(module, n); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl_RAND_status__doc__, +"RAND_status($module, /)\n" +"--\n" +"\n" +"Returns 1 if the OpenSSL PRNG has been seeded with enough data and 0 if not.\n" +"\n" +"It is necessary to seed the PRNG with RAND_add() on some platforms before\n" +"using the ssl() function."); + +#define _SSL_RAND_STATUS_METHODDEF \ + {"RAND_status", (PyCFunction)_ssl_RAND_status, METH_NOARGS, _ssl_RAND_status__doc__}, + +static PyObject * +_ssl_RAND_status_impl(PyModuleDef *module); + +static PyObject * +_ssl_RAND_status(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return _ssl_RAND_status_impl(module); +} + +#if defined(HAVE_RAND_EGD) + +PyDoc_STRVAR(_ssl_RAND_egd__doc__, +"RAND_egd($module, path, /)\n" +"--\n" +"\n" +"Queries the entropy gather daemon (EGD) on the socket named by \'path\'.\n" +"\n" +"Returns number of bytes read. Raises SSLError if connection to EGD\n" +"fails or if it does not provide enough data to seed PRNG."); + +#define _SSL_RAND_EGD_METHODDEF \ + {"RAND_egd", (PyCFunction)_ssl_RAND_egd, METH_O, _ssl_RAND_egd__doc__}, + +static PyObject * +_ssl_RAND_egd_impl(PyModuleDef *module, PyObject *path); + +static PyObject * +_ssl_RAND_egd(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *path; + + if (!PyArg_Parse(arg, "O&:RAND_egd", PyUnicode_FSConverter, &path)) + goto exit; + return_value = _ssl_RAND_egd_impl(module, path); + +exit: + return return_value; +} + +#endif /* defined(HAVE_RAND_EGD) */ + +PyDoc_STRVAR(_ssl_get_default_verify_paths__doc__, +"get_default_verify_paths($module, /)\n" +"--\n" +"\n" +"Return search paths and environment vars that are used by SSLContext\'s set_default_verify_paths() to load default CAs.\n" +"\n" +"The values are \'cert_file_env\', \'cert_file\', \'cert_dir_env\', \'cert_dir\'."); + +#define _SSL_GET_DEFAULT_VERIFY_PATHS_METHODDEF \ + {"get_default_verify_paths", (PyCFunction)_ssl_get_default_verify_paths, METH_NOARGS, _ssl_get_default_verify_paths__doc__}, + +static PyObject * +_ssl_get_default_verify_paths_impl(PyModuleDef *module); + +static PyObject * +_ssl_get_default_verify_paths(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return _ssl_get_default_verify_paths_impl(module); +} + +PyDoc_STRVAR(_ssl_txt2obj__doc__, +"txt2obj($module, /, txt, name=False)\n" +"--\n" +"\n" +"Lookup NID, short name, long name and OID of an ASN1_OBJECT.\n" +"\n" +"By default objects are looked up by OID. With name=True short and\n" +"long name are also matched."); + +#define _SSL_TXT2OBJ_METHODDEF \ + {"txt2obj", (PyCFunction)_ssl_txt2obj, METH_VARARGS|METH_KEYWORDS, _ssl_txt2obj__doc__}, + +static PyObject * +_ssl_txt2obj_impl(PyModuleDef *module, const char *txt, int name); + +static PyObject * +_ssl_txt2obj(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"txt", "name", NULL}; + const char *txt; + int name = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|p:txt2obj", _keywords, + &txt, &name)) + goto exit; + return_value = _ssl_txt2obj_impl(module, txt, name); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl_nid2obj__doc__, +"nid2obj($module, nid, /)\n" +"--\n" +"\n" +"Lookup NID, short name, long name and OID of an ASN1_OBJECT by NID."); + +#define _SSL_NID2OBJ_METHODDEF \ + {"nid2obj", (PyCFunction)_ssl_nid2obj, METH_O, _ssl_nid2obj__doc__}, + +static PyObject * +_ssl_nid2obj_impl(PyModuleDef *module, int nid); + +static PyObject * +_ssl_nid2obj(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + int nid; + + if (!PyArg_Parse(arg, "i:nid2obj", &nid)) + goto exit; + return_value = _ssl_nid2obj_impl(module, nid); + +exit: + return return_value; +} + +#if defined(_MSC_VER) + +PyDoc_STRVAR(_ssl_enum_certificates__doc__, +"enum_certificates($module, /, store_name)\n" +"--\n" +"\n" +"Retrieve certificates from Windows\' cert store.\n" +"\n" +"store_name may be one of \'CA\', \'ROOT\' or \'MY\'. The system may provide\n" +"more cert storages, too. The function returns a list of (bytes,\n" +"encoding_type, trust) tuples. The encoding_type flag can be interpreted\n" +"with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The trust setting is either\n" +"a set of OIDs or the boolean True."); + +#define _SSL_ENUM_CERTIFICATES_METHODDEF \ + {"enum_certificates", (PyCFunction)_ssl_enum_certificates, METH_VARARGS|METH_KEYWORDS, _ssl_enum_certificates__doc__}, + +static PyObject * +_ssl_enum_certificates_impl(PyModuleDef *module, const char *store_name); + +static PyObject * +_ssl_enum_certificates(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"store_name", NULL}; + const char *store_name; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:enum_certificates", _keywords, + &store_name)) + goto exit; + return_value = _ssl_enum_certificates_impl(module, store_name); + +exit: + return return_value; +} + +#endif /* defined(_MSC_VER) */ + +#if defined(_MSC_VER) + +PyDoc_STRVAR(_ssl_enum_crls__doc__, +"enum_crls($module, /, store_name)\n" +"--\n" +"\n" +"Retrieve CRLs from Windows\' cert store.\n" +"\n" +"store_name may be one of \'CA\', \'ROOT\' or \'MY\'. The system may provide\n" +"more cert storages, too. The function returns a list of (bytes,\n" +"encoding_type) tuples. The encoding_type flag can be interpreted with\n" +"X509_ASN_ENCODING or PKCS_7_ASN_ENCODING."); + +#define _SSL_ENUM_CRLS_METHODDEF \ + {"enum_crls", (PyCFunction)_ssl_enum_crls, METH_VARARGS|METH_KEYWORDS, _ssl_enum_crls__doc__}, + +static PyObject * +_ssl_enum_crls_impl(PyModuleDef *module, const char *store_name); + +static PyObject * +_ssl_enum_crls(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"store_name", NULL}; + const char *store_name; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:enum_crls", _keywords, + &store_name)) + goto exit; + return_value = _ssl_enum_crls_impl(module, store_name); + +exit: + return return_value; +} + +#endif /* defined(_MSC_VER) */ + +#ifndef _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF + #define _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF +#endif /* !defined(_SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF) */ + +#ifndef _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF + #define _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF +#endif /* !defined(_SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF) */ + +#ifndef _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF + #define _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF +#endif /* !defined(_SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF) */ + +#ifndef _SSL_RAND_EGD_METHODDEF + #define _SSL_RAND_EGD_METHODDEF +#endif /* !defined(_SSL_RAND_EGD_METHODDEF) */ + +#ifndef _SSL_ENUM_CERTIFICATES_METHODDEF + #define _SSL_ENUM_CERTIFICATES_METHODDEF +#endif /* !defined(_SSL_ENUM_CERTIFICATES_METHODDEF) */ + +#ifndef _SSL_ENUM_CRLS_METHODDEF + #define _SSL_ENUM_CRLS_METHODDEF +#endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ +/*[clinic end generated code: output=a14999cb565a69a2 input=a9049054013a1b77]*/ -- cgit v1.2.1 From e97c5fbf219cdc4f6da502c44e2b453b8dd3ddad Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Sun, 3 May 2015 14:49:19 -0700 Subject: Fix Windows build breakage from checkins on Issues #20148 and #20168. --- Modules/_sre.c | 281 ++++++++++++++++++++++++++--------------------------- Modules/_tkinter.c | 71 +++++++------- 2 files changed, 173 insertions(+), 179 deletions(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index e3245a08d0..4016a4533e 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -269,6 +269,10 @@ class _sre.SRE_Scanner "ScannerObject *" "&Scanner_Type" [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=b0230ec19a0deac8]*/ +static PyTypeObject Pattern_Type; +static PyTypeObject Match_Type; +static PyTypeObject Scanner_Type; + /*[clinic input] _sre.getcodesize -> int [clinic start generated code]*/ @@ -1426,8 +1430,6 @@ done: PyDoc_STRVAR(pattern_doc, "Compiled regular expression objects"); -static PyMethodDef pattern_methods[]; - /* PatternObject's 'groupindex' method. */ static PyObject * pattern_groupindex(PatternObject *self) @@ -1435,52 +1437,6 @@ pattern_groupindex(PatternObject *self) return PyDictProxy_New(self->groupindex); } -static PyGetSetDef pattern_getset[] = { - {"groupindex", (getter)pattern_groupindex, (setter)NULL, - "A dictionary mapping group names to group numbers."}, - {NULL} /* Sentinel */ -}; - -#define PAT_OFF(x) offsetof(PatternObject, x) -static PyMemberDef pattern_members[] = { - {"pattern", T_OBJECT, PAT_OFF(pattern), READONLY}, - {"flags", T_INT, PAT_OFF(flags), READONLY}, - {"groups", T_PYSSIZET, PAT_OFF(groups), READONLY}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Pattern_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "_" SRE_MODULE ".SRE_Pattern", - sizeof(PatternObject), sizeof(SRE_CODE), - (destructor)pattern_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - (reprfunc)pattern_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - pattern_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(PatternObject, weakreflist), /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - pattern_methods, /* tp_methods */ - pattern_members, /* tp_members */ - pattern_getset, /* tp_getset */ -}; - static int _validate(PatternObject *self); /* Forward */ /*[clinic input] @@ -2469,8 +2425,6 @@ PyDoc_STRVAR(match_group_doc, Return subgroup(s) of the match by indices or names.\n\ For 0 returns the entire match."); -static PyMethodDef match_methods[]; - static PyObject * match_lastindex_get(MatchObject *self) { @@ -2521,57 +2475,6 @@ match_repr(MatchObject *self) } -static PyGetSetDef match_getset[] = { - {"lastindex", (getter)match_lastindex_get, (setter)NULL}, - {"lastgroup", (getter)match_lastgroup_get, (setter)NULL}, - {"regs", (getter)match_regs_get, (setter)NULL}, - {NULL} -}; - -#define MATCH_OFF(x) offsetof(MatchObject, x) -static PyMemberDef match_members[] = { - {"string", T_OBJECT, MATCH_OFF(string), READONLY}, - {"re", T_OBJECT, MATCH_OFF(pattern), READONLY}, - {"pos", T_PYSSIZET, MATCH_OFF(pos), READONLY}, - {"endpos", T_PYSSIZET, MATCH_OFF(endpos), READONLY}, - {NULL} -}; - -/* FIXME: implement setattr("string", None) as a special case (to - detach the associated string, if any */ - -static PyTypeObject Match_Type = { - PyVarObject_HEAD_INIT(NULL,0) - "_" SRE_MODULE ".SRE_Match", - sizeof(MatchObject), sizeof(Py_ssize_t), - (destructor)match_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - (reprfunc)match_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - match_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - match_methods, /* tp_methods */ - match_members, /* tp_members */ - match_getset, /* tp_getset */ -}; - static PyObject* pattern_new_match(PatternObject* pattern, SRE_STATE* state, Py_ssize_t status) { @@ -2712,46 +2615,6 @@ _sre_SRE_Scanner_search_impl(ScannerObject *self) return match; } -static PyMethodDef scanner_methods[]; - -#define SCAN_OFF(x) offsetof(ScannerObject, x) -static PyMemberDef scanner_members[] = { - {"pattern", T_OBJECT, SCAN_OFF(pattern), READONLY}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Scanner_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "_" SRE_MODULE ".SRE_Scanner", - sizeof(ScannerObject), 0, - (destructor)scanner_dealloc,/* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - scanner_methods, /* tp_methods */ - scanner_members, /* tp_members */ - 0, /* tp_getset */ -}; - static PyObject * pattern_scanner(PatternObject *self, PyObject *string, Py_ssize_t pos, Py_ssize_t endpos) { @@ -2792,6 +2655,53 @@ static PyMethodDef pattern_methods[] = { {NULL, NULL} }; +static PyGetSetDef pattern_getset[] = { + {"groupindex", (getter)pattern_groupindex, (setter)NULL, + "A dictionary mapping group names to group numbers."}, + {NULL} /* Sentinel */ +}; + +#define PAT_OFF(x) offsetof(PatternObject, x) +static PyMemberDef pattern_members[] = { + {"pattern", T_OBJECT, PAT_OFF(pattern), READONLY}, + {"flags", T_INT, PAT_OFF(flags), READONLY}, + {"groups", T_PYSSIZET, PAT_OFF(groups), READONLY}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject Pattern_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "_" SRE_MODULE ".SRE_Pattern", + sizeof(PatternObject), sizeof(SRE_CODE), + (destructor)pattern_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + (reprfunc)pattern_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + pattern_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + offsetof(PatternObject, weakreflist), /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + pattern_methods, /* tp_methods */ + pattern_members, /* tp_members */ + pattern_getset, /* tp_getset */ +}; + + static PyMethodDef match_methods[] = { {"group", (PyCFunction) match_group, METH_VARARGS, match_group_doc}, _SRE_SRE_MATCH_START_METHODDEF @@ -2805,12 +2715,101 @@ static PyMethodDef match_methods[] = { {NULL, NULL} }; +static PyGetSetDef match_getset[] = { + {"lastindex", (getter)match_lastindex_get, (setter)NULL}, + {"lastgroup", (getter)match_lastgroup_get, (setter)NULL}, + {"regs", (getter)match_regs_get, (setter)NULL}, + {NULL} +}; + +#define MATCH_OFF(x) offsetof(MatchObject, x) +static PyMemberDef match_members[] = { + {"string", T_OBJECT, MATCH_OFF(string), READONLY}, + {"re", T_OBJECT, MATCH_OFF(pattern), READONLY}, + {"pos", T_PYSSIZET, MATCH_OFF(pos), READONLY}, + {"endpos", T_PYSSIZET, MATCH_OFF(endpos), READONLY}, + {NULL} +}; + +/* FIXME: implement setattr("string", None) as a special case (to + detach the associated string, if any */ + +static PyTypeObject Match_Type = { + PyVarObject_HEAD_INIT(NULL,0) + "_" SRE_MODULE ".SRE_Match", + sizeof(MatchObject), sizeof(Py_ssize_t), + (destructor)match_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + (reprfunc)match_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + match_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + match_methods, /* tp_methods */ + match_members, /* tp_members */ + match_getset, /* tp_getset */ +}; + static PyMethodDef scanner_methods[] = { _SRE_SRE_SCANNER_MATCH_METHODDEF _SRE_SRE_SCANNER_SEARCH_METHODDEF {NULL, NULL} }; +#define SCAN_OFF(x) offsetof(ScannerObject, x) +static PyMemberDef scanner_members[] = { + {"pattern", T_OBJECT, SCAN_OFF(pattern), READONLY}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject Scanner_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "_" SRE_MODULE ".SRE_Scanner", + sizeof(ScannerObject), 0, + (destructor)scanner_dealloc,/* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + 0, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + scanner_methods, /* tp_methods */ + scanner_members, /* tp_members */ + 0, /* tp_getset */ +}; + static PyMethodDef _functions[] = { _SRE_COMPILE_METHODDEF _SRE_GETCODESIZE_METHODDEF diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 444b13a7d1..1f21c03983 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -2682,8 +2682,6 @@ _tkinter_tktimertoken_deletetimerhandler_impl(TkttObject *self) Py_RETURN_NONE; } -static PyMethodDef Tktt_methods[]; - static TkttObject * Tktt_New(PyObject *func) { @@ -2725,22 +2723,6 @@ Tktt_Repr(PyObject *self) v->func == NULL ? ", handler deleted" : ""); } -static PyType_Slot Tktt_Type_slots[] = { - {Py_tp_dealloc, Tktt_Dealloc}, - {Py_tp_repr, Tktt_Repr}, - {Py_tp_methods, Tktt_methods}, - {0, 0} -}; - -static PyType_Spec Tktt_Type_spec = { - "_tkinter.tktimertoken", - sizeof(TkttObject), - 0, - Py_TPFLAGS_DEFAULT, - Tktt_Type_slots, -}; - - /** Timer Handler **/ static void @@ -3001,11 +2983,6 @@ _tkinter_tkapp_willdispatch_impl(TkappObject *self) } -/**** Tkapp Method List ****/ - -static PyMethodDef Tkapp_methods[]; - - /**** Tkapp Type Methods ****/ static void @@ -3021,21 +2998,6 @@ Tkapp_Dealloc(PyObject *self) DisableEventHook(); } -static PyType_Slot Tkapp_Type_slots[] = { - {Py_tp_dealloc, Tkapp_Dealloc}, - {Py_tp_methods, Tkapp_methods}, - {0, 0} -}; - - -static PyType_Spec Tkapp_Type_spec = { - "_tkinter.tkapp", - sizeof(TkappObject), - 0, - Py_TPFLAGS_DEFAULT, - Tkapp_Type_slots, -}; - /**** Tkinter Module ****/ @@ -3218,6 +3180,24 @@ static PyMethodDef Tktt_methods[] = {NULL, NULL} }; +static PyType_Slot Tktt_Type_slots[] = { + {Py_tp_dealloc, Tktt_Dealloc}, + {Py_tp_repr, Tktt_Repr}, + {Py_tp_methods, Tktt_methods}, + {0, 0} +}; + +static PyType_Spec Tktt_Type_spec = { + "_tkinter.tktimertoken", + sizeof(TkttObject), + 0, + Py_TPFLAGS_DEFAULT, + Tktt_Type_slots, +}; + + +/**** Tkapp Method List ****/ + static PyMethodDef Tkapp_methods[] = { _TKINTER_TKAPP_WILLDISPATCH_METHODDEF @@ -3255,6 +3235,21 @@ static PyMethodDef Tkapp_methods[] = {NULL, NULL} }; +static PyType_Slot Tkapp_Type_slots[] = { + {Py_tp_dealloc, Tkapp_Dealloc}, + {Py_tp_methods, Tkapp_methods}, + {0, 0} +}; + + +static PyType_Spec Tkapp_Type_spec = { + "_tkinter.tkapp", + sizeof(TkappObject), + 0, + Py_TPFLAGS_DEFAULT, + Tkapp_Type_slots, +}; + static PyMethodDef moduleMethods[] = { _TKINTER__FLATTEN_METHODDEF -- cgit v1.2.1 From f64d8de83a463063d21f897ec1f5a3581289aeb3 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 4 May 2015 15:32:48 +0300 Subject: Issue #20159. Converted the _elementtree module to Argument Clinic. --- Modules/_elementtree.c | 956 +++++++++++++++++++++++----------------- Modules/clinic/_elementtree.c.h | 666 ++++++++++++++++++++++++++++ 2 files changed, 1222 insertions(+), 400 deletions(-) create mode 100644 Modules/clinic/_elementtree.c.h (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index bf4bc4a8a2..342bcc68f9 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -370,6 +370,14 @@ get_attrib_from_keywords(PyObject *kwds) return attrib; } +/*[clinic input] +module _elementtree +class _elementtree.Element "ElementObject *" "&Element_Type" +class _elementtree.TreeBuilder "TreeBuilderObject *" "&TreeBuilder_Type" +class _elementtree.XMLParser "XMLParserObject *" "&XMLParser_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=159aa50a54061c22]*/ + static int element_init(PyObject *self, PyObject *args, PyObject *kwds) { @@ -658,25 +666,33 @@ element_dealloc(ElementObject* self) /* -------------------------------------------------------------------- */ -static PyObject* -element_append(ElementObject* self, PyObject* args) -{ - PyObject* element; - if (!PyArg_ParseTuple(args, "O!:append", &Element_Type, &element)) - return NULL; +/*[clinic input] +_elementtree.Element.append - if (element_add_subelement(self, element) < 0) + subelement: object(subclass_of='&Element_Type') + / + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_append_impl(ElementObject *self, PyObject *subelement) +/*[clinic end generated code: output=54a884b7cf2295f4 input=3ed648beb5bfa22a]*/ +{ + if (element_add_subelement(self, subelement) < 0) return NULL; Py_RETURN_NONE; } -static PyObject* -element_clearmethod(ElementObject* self, PyObject* args) -{ - if (!PyArg_ParseTuple(args, ":clear")) - return NULL; +/*[clinic input] +_elementtree.Element.clear +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_clear_impl(ElementObject *self) +/*[clinic end generated code: output=8bcd7a51f94cfff6 input=3c719ff94bf45dd6]*/ +{ dealloc_extra(self); Py_INCREF(Py_None); @@ -690,15 +706,18 @@ element_clearmethod(ElementObject* self, PyObject* args) Py_RETURN_NONE; } -static PyObject* -element_copy(ElementObject* self, PyObject* args) +/*[clinic input] +_elementtree.Element.__copy__ + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element___copy___impl(ElementObject *self) +/*[clinic end generated code: output=2c701ebff7247781 input=ad87aaebe95675bf]*/ { Py_ssize_t i; ElementObject* element; - if (!PyArg_ParseTuple(args, ":__copy__")) - return NULL; - element = (ElementObject*) create_new_element( self->tag, (self->extra) ? self->extra->attrib : Py_None); if (!element) @@ -729,8 +748,17 @@ element_copy(ElementObject* self, PyObject* args) return (PyObject*) element; } -static PyObject* -element_deepcopy(ElementObject* self, PyObject* args) +/*[clinic input] +_elementtree.Element.__deepcopy__ + + memo: object + / + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element___deepcopy__(ElementObject *self, PyObject *memo) +/*[clinic end generated code: output=d1f19851d17bf239 input=df24c2b602430b77]*/ { Py_ssize_t i; ElementObject* element; @@ -740,10 +768,6 @@ element_deepcopy(ElementObject* self, PyObject* args) PyObject* tail; PyObject* id; - PyObject* memo; - if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo)) - return NULL; - tag = deepcopy(self->tag, memo); if (!tag) return NULL; @@ -814,17 +838,22 @@ element_deepcopy(ElementObject* self, PyObject* args) return NULL; } -static PyObject* -element_sizeof(PyObject* myself, PyObject* args) +/*[clinic input] +_elementtree.Element.__sizeof__ -> Py_ssize_t + +[clinic start generated code]*/ + +static Py_ssize_t +_elementtree_Element___sizeof___impl(ElementObject *self) +/*[clinic end generated code: output=bf73867721008000 input=70f4b323d55a17c1]*/ { - ElementObject *self = (ElementObject*)myself; Py_ssize_t result = sizeof(ElementObject); if (self->extra) { result += sizeof(ElementObjectExtra); if (self->extra->children != self->extra->_children) result += sizeof(PyObject*) * self->extra->allocated; } - return PyLong_FromSsize_t(result); + return result; } /* dict keys for getstate/setstate. */ @@ -840,8 +869,14 @@ element_sizeof(PyObject* myself, PyObject* args) * any unnecessary structures there; and (b) it buys compatibility with 3.2 * pickles. See issue #16076. */ +/*[clinic input] +_elementtree.Element.__getstate__ + +[clinic start generated code]*/ + static PyObject * -element_getstate(ElementObject *self) +_elementtree_Element___getstate___impl(ElementObject *self) +/*[clinic end generated code: output=37279aeeb6bb5b04 input=f0d16d7ec2f7adc1]*/ { Py_ssize_t i, noattrib; PyObject *instancedict = NULL, *children; @@ -956,6 +991,7 @@ element_setstate_from_attributes(ElementObject *self, /* __setstate__ for Element instance from the Python implementation. * 'state' should be the instance dict. */ + static PyObject * element_setstate_from_Python(ElementObject *self, PyObject *state) { @@ -981,8 +1017,17 @@ element_setstate_from_Python(ElementObject *self, PyObject *state) return retval; } +/*[clinic input] +_elementtree.Element.__setstate__ + + state: object + / + +[clinic start generated code]*/ + static PyObject * -element_setstate(ElementObject *self, PyObject *state) +_elementtree_Element___setstate__(ElementObject *self, PyObject *state) +/*[clinic end generated code: output=ea28bf3491b1f75e input=aaf80abea7c1e3b9]*/ { if (!PyDict_CheckExact(state)) { PyErr_Format(PyExc_TypeError, @@ -1036,21 +1081,26 @@ checkpath(PyObject* tag) return 1; /* unknown type; might be path expression */ } -static PyObject* -element_extend(ElementObject* self, PyObject* args) +/*[clinic input] +_elementtree.Element.extend + + elements: object + / + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_extend(ElementObject *self, PyObject *elements) +/*[clinic end generated code: output=f6e67fc2ff529191 input=807bc4f31c69f7c0]*/ { PyObject* seq; Py_ssize_t i, seqlen = 0; - PyObject* seq_in; - if (!PyArg_ParseTuple(args, "O:extend", &seq_in)) - return NULL; - - seq = PySequence_Fast(seq_in, ""); + seq = PySequence_Fast(elements, ""); if (!seq) { PyErr_Format( PyExc_TypeError, - "expected sequence, not \"%.200s\"", Py_TYPE(seq_in)->tp_name + "expected sequence, not \"%.200s\"", Py_TYPE(elements)->tp_name ); return NULL; } @@ -1078,23 +1128,26 @@ element_extend(ElementObject* self, PyObject* args) Py_RETURN_NONE; } -static PyObject* -element_find(ElementObject *self, PyObject *args, PyObject *kwds) +/*[clinic input] +_elementtree.Element.find + + path: object + namespaces: object = None + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_find_impl(ElementObject *self, PyObject *path, + PyObject *namespaces) +/*[clinic end generated code: output=41b43f0f0becafae input=359b6985f6489d2e]*/ { Py_ssize_t i; - PyObject* tag; - PyObject* namespaces = Py_None; - static char *kwlist[] = {"path", "namespaces", 0}; elementtreestate *st = ET_STATE_GLOBAL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:find", kwlist, - &tag, &namespaces)) - return NULL; - - if (checkpath(tag) || namespaces != Py_None) { + if (checkpath(path) || namespaces != Py_None) { _Py_IDENTIFIER(find); return _PyObject_CallMethodId( - st->elementpath_obj, &PyId_find, "OOO", self, tag, namespaces + st->elementpath_obj, &PyId_find, "OOO", self, path, namespaces ); } @@ -1104,7 +1157,7 @@ element_find(ElementObject *self, PyObject *args, PyObject *kwds) for (i = 0; i < self->extra->length; i++) { PyObject* item = self->extra->children[i]; if (Element_CheckExact(item) && - PyObject_RichCompareBool(((ElementObject*)item)->tag, tag, Py_EQ) == 1) { + PyObject_RichCompareBool(((ElementObject*)item)->tag, path, Py_EQ) == 1) { Py_INCREF(item); return item; } @@ -1113,24 +1166,28 @@ element_find(ElementObject *self, PyObject *args, PyObject *kwds) Py_RETURN_NONE; } -static PyObject* -element_findtext(ElementObject *self, PyObject *args, PyObject *kwds) +/*[clinic input] +_elementtree.Element.findtext + + path: object + default: object = None + namespaces: object = None + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_findtext_impl(ElementObject *self, PyObject *path, + PyObject *default_value, + PyObject *namespaces) +/*[clinic end generated code: output=83b3ba4535d308d2 input=b53a85aa5aa2a916]*/ { Py_ssize_t i; - PyObject* tag; - PyObject* default_value = Py_None; - PyObject* namespaces = Py_None; _Py_IDENTIFIER(findtext); - static char *kwlist[] = {"path", "default", "namespaces", 0}; elementtreestate *st = ET_STATE_GLOBAL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OO:findtext", kwlist, - &tag, &default_value, &namespaces)) - return NULL; - - if (checkpath(tag) || namespaces != Py_None) + if (checkpath(path) || namespaces != Py_None) return _PyObject_CallMethodId( - st->elementpath_obj, &PyId_findtext, "OOOO", self, tag, default_value, namespaces + st->elementpath_obj, &PyId_findtext, "OOOO", self, path, default_value, namespaces ); if (!self->extra) { @@ -1141,7 +1198,7 @@ element_findtext(ElementObject *self, PyObject *args, PyObject *kwds) for (i = 0; i < self->extra->length; i++) { ElementObject* item = (ElementObject*) self->extra->children[i]; if (Element_CheckExact(item) && - (PyObject_RichCompareBool(item->tag, tag, Py_EQ) == 1)) { + (PyObject_RichCompareBool(item->tag, path, Py_EQ) == 1)) { PyObject* text = element_get_text(item); if (text == Py_None) return PyUnicode_New(0, 0); @@ -1154,20 +1211,24 @@ element_findtext(ElementObject *self, PyObject *args, PyObject *kwds) return default_value; } -static PyObject* -element_findall(ElementObject *self, PyObject *args, PyObject *kwds) +/*[clinic input] +_elementtree.Element.findall + + path: object + namespaces: object = None + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_findall_impl(ElementObject *self, PyObject *path, + PyObject *namespaces) +/*[clinic end generated code: output=1a0bd9f5541b711d input=4d9e6505a638550c]*/ { Py_ssize_t i; PyObject* out; - PyObject* tag; - PyObject* namespaces = Py_None; - static char *kwlist[] = {"path", "namespaces", 0}; + PyObject* tag = path; elementtreestate *st = ET_STATE_GLOBAL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:findall", kwlist, - &tag, &namespaces)) - return NULL; - if (checkpath(tag) || namespaces != Py_None) { _Py_IDENTIFIER(findall); return _PyObject_CallMethodId( @@ -1196,36 +1257,41 @@ element_findall(ElementObject *self, PyObject *args, PyObject *kwds) return out; } -static PyObject* -element_iterfind(ElementObject *self, PyObject *args, PyObject *kwds) +/*[clinic input] +_elementtree.Element.iterfind + + path: object + namespaces: object = None + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_iterfind_impl(ElementObject *self, PyObject *path, + PyObject *namespaces) +/*[clinic end generated code: output=ecdd56d63b19d40f input=abb974e350fb65c7]*/ { - PyObject* tag; - PyObject* namespaces = Py_None; + PyObject* tag = path; _Py_IDENTIFIER(iterfind); - static char *kwlist[] = {"path", "namespaces", 0}; elementtreestate *st = ET_STATE_GLOBAL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:iterfind", kwlist, - &tag, &namespaces)) { - return NULL; - } - return _PyObject_CallMethodId( st->elementpath_obj, &PyId_iterfind, "OOO", self, tag, namespaces); } -static PyObject* -element_get(ElementObject* self, PyObject* args, PyObject* kwds) -{ - PyObject* value; - static char* kwlist[] = {"key", "default", 0}; +/*[clinic input] +_elementtree.Element.get - PyObject* key; - PyObject* default_value = Py_None; + key: object + default: object = None - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:get", kwlist, &key, - &default_value)) - return NULL; +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_get_impl(ElementObject *self, PyObject *key, + PyObject *default_value) +/*[clinic end generated code: output=523c614142595d75 input=ee153bbf8cdb246e]*/ +{ + PyObject* value; if (!self->extra || self->extra->attrib == Py_None) value = default_value; @@ -1239,17 +1305,20 @@ element_get(ElementObject* self, PyObject* args, PyObject* kwds) return value; } -static PyObject* -element_getchildren(ElementObject* self, PyObject* args) +/*[clinic input] +_elementtree.Element.getchildren + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_getchildren_impl(ElementObject *self) +/*[clinic end generated code: output=e50ffe118637b14f input=0f754dfded150d5f]*/ { Py_ssize_t i; PyObject* list; /* FIXME: report as deprecated? */ - if (!PyArg_ParseTuple(args, ":getchildren")) - return NULL; - if (!self->extra) return PyList_New(0); @@ -1271,25 +1340,30 @@ static PyObject * create_elementiter(ElementObject *self, PyObject *tag, int gettext); -static PyObject * -element_iter(ElementObject *self, PyObject *args, PyObject *kwds) -{ - PyObject* tag = Py_None; - static char* kwlist[] = {"tag", 0}; +/*[clinic input] +_elementtree.Element.iter - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:iter", kwlist, &tag)) - return NULL; + tag: object = None +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_iter_impl(ElementObject *self, PyObject *tag) +/*[clinic end generated code: output=3f49f9a862941cc5 input=774d5b12e573aedd]*/ +{ return create_elementiter(self, tag, 0); } -static PyObject* -element_itertext(ElementObject* self, PyObject* args) -{ - if (!PyArg_ParseTuple(args, ":itertext")) - return NULL; +/*[clinic input] +_elementtree.Element.itertext + +[clinic start generated code]*/ +static PyObject * +_elementtree_Element_itertext_impl(ElementObject *self) +/*[clinic end generated code: output=5fa34b2fbcb65df6 input=af8f0e42cb239c89]*/ +{ return create_elementiter(self, Py_None, 1); } @@ -1311,14 +1385,21 @@ element_getitem(PyObject* self_, Py_ssize_t index) return self->extra->children[index]; } -static PyObject* -element_insert(ElementObject* self, PyObject* args) +/*[clinic input] +_elementtree.Element.insert + + index: Py_ssize_t + subelement: object(subclass_of='&Element_Type') + / + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_insert_impl(ElementObject *self, Py_ssize_t index, + PyObject *subelement) +/*[clinic end generated code: output=990adfef4d424c0b input=cd6fbfcdab52d7a8]*/ { - Py_ssize_t index, i; - PyObject* element; - if (!PyArg_ParseTuple(args, "nO!:insert", &index, - &Element_Type, &element)) - return NULL; + Py_ssize_t i; if (!self->extra) { if (create_extra(self, NULL) < 0) @@ -1339,32 +1420,38 @@ element_insert(ElementObject* self, PyObject* args) for (i = self->extra->length; i > index; i--) self->extra->children[i] = self->extra->children[i-1]; - Py_INCREF(element); - self->extra->children[index] = element; + Py_INCREF(subelement); + self->extra->children[index] = subelement; self->extra->length++; Py_RETURN_NONE; } -static PyObject* -element_items(ElementObject* self, PyObject* args) -{ - if (!PyArg_ParseTuple(args, ":items")) - return NULL; +/*[clinic input] +_elementtree.Element.items + +[clinic start generated code]*/ +static PyObject * +_elementtree_Element_items_impl(ElementObject *self) +/*[clinic end generated code: output=6db2c778ce3f5a4d input=adbe09aaea474447]*/ +{ if (!self->extra || self->extra->attrib == Py_None) return PyList_New(0); return PyDict_Items(self->extra->attrib); } -static PyObject* -element_keys(ElementObject* self, PyObject* args) -{ - if (!PyArg_ParseTuple(args, ":keys")) - return NULL; +/*[clinic input] +_elementtree.Element.keys + +[clinic start generated code]*/ +static PyObject * +_elementtree_Element_keys_impl(ElementObject *self) +/*[clinic end generated code: output=bc5bfabbf20eeb3c input=f02caf5b496b5b0b]*/ +{ if (!self->extra || self->extra->attrib == Py_None) return PyList_New(0); @@ -1380,16 +1467,22 @@ element_length(ElementObject* self) return self->extra->length; } -static PyObject* -element_makeelement(PyObject* self, PyObject* args, PyObject* kw) +/*[clinic input] +_elementtree.Element.makeelement + + tag: object + attrib: object + / + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_makeelement_impl(ElementObject *self, PyObject *tag, + PyObject *attrib) +/*[clinic end generated code: output=4109832d5bb789ef input=9480d1d2e3e68235]*/ { PyObject* elem; - PyObject* tag; - PyObject* attrib; - if (!PyArg_ParseTuple(args, "OO:makeelement", &tag, &attrib)) - return NULL; - attrib = PyDict_Copy(attrib); if (!attrib) return NULL; @@ -1401,15 +1494,20 @@ element_makeelement(PyObject* self, PyObject* args, PyObject* kw) return elem; } -static PyObject* -element_remove(ElementObject* self, PyObject* args) +/*[clinic input] +_elementtree.Element.remove + + subelement: object(subclass_of='&Element_Type') + / + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_remove_impl(ElementObject *self, PyObject *subelement) +/*[clinic end generated code: output=38fe6c07d6d87d1f input=d52fc28ededc0bd8]*/ { Py_ssize_t i; - PyObject* element; - if (!PyArg_ParseTuple(args, "O!:remove", &Element_Type, &element)) - return NULL; - if (!self->extra) { /* element has no children, so raise exception */ PyErr_SetString( @@ -1420,14 +1518,14 @@ element_remove(ElementObject* self, PyObject* args) } for (i = 0; i < self->extra->length; i++) { - if (self->extra->children[i] == element) + if (self->extra->children[i] == subelement) break; - if (PyObject_RichCompareBool(self->extra->children[i], element, Py_EQ) == 1) + if (PyObject_RichCompareBool(self->extra->children[i], subelement, Py_EQ) == 1) break; } if (i == self->extra->length) { - /* element is not in children, so raise exception */ + /* subelement is not in children, so raise exception */ PyErr_SetString( PyExc_ValueError, "list.remove(x): x not in list" @@ -1454,16 +1552,22 @@ element_repr(ElementObject* self) return PyUnicode_FromFormat("", self); } -static PyObject* -element_set(ElementObject* self, PyObject* args) +/*[clinic input] +_elementtree.Element.set + + key: object + value: object + / + +[clinic start generated code]*/ + +static PyObject * +_elementtree_Element_set_impl(ElementObject *self, PyObject *key, + PyObject *value) +/*[clinic end generated code: output=fb938806be3c5656 input=1efe90f7d82b3fe9]*/ { PyObject* attrib; - PyObject* key; - PyObject* value; - if (!PyArg_ParseTuple(args, "OO:set", &key, &value)) - return NULL; - if (!self->extra) { if (create_extra(self, NULL) < 0) return NULL; @@ -1744,43 +1848,6 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) } } -static PyMethodDef element_methods[] = { - - {"clear", (PyCFunction) element_clearmethod, METH_VARARGS}, - - {"get", (PyCFunction) element_get, METH_VARARGS | METH_KEYWORDS}, - {"set", (PyCFunction) element_set, METH_VARARGS}, - - {"find", (PyCFunction) element_find, METH_VARARGS | METH_KEYWORDS}, - {"findtext", (PyCFunction) element_findtext, METH_VARARGS | METH_KEYWORDS}, - {"findall", (PyCFunction) element_findall, METH_VARARGS | METH_KEYWORDS}, - - {"append", (PyCFunction) element_append, METH_VARARGS}, - {"extend", (PyCFunction) element_extend, METH_VARARGS}, - {"insert", (PyCFunction) element_insert, METH_VARARGS}, - {"remove", (PyCFunction) element_remove, METH_VARARGS}, - - {"iter", (PyCFunction) element_iter, METH_VARARGS | METH_KEYWORDS}, - {"itertext", (PyCFunction) element_itertext, METH_VARARGS}, - {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS | METH_KEYWORDS}, - - {"getiterator", (PyCFunction) element_iter, METH_VARARGS | METH_KEYWORDS}, - {"getchildren", (PyCFunction) element_getchildren, METH_VARARGS}, - - {"items", (PyCFunction) element_items, METH_VARARGS}, - {"keys", (PyCFunction) element_keys, METH_VARARGS}, - - {"makeelement", (PyCFunction) element_makeelement, METH_VARARGS}, - - {"__copy__", (PyCFunction) element_copy, METH_VARARGS}, - {"__deepcopy__", (PyCFunction) element_deepcopy, METH_VARARGS}, - {"__sizeof__", element_sizeof, METH_NOARGS}, - {"__getstate__", (PyCFunction)element_getstate, METH_NOARGS}, - {"__setstate__", (PyCFunction)element_setstate, METH_O}, - - {NULL, NULL} -}; - static PyObject* element_getattro(ElementObject* self, PyObject* nameobj) { @@ -1877,54 +1944,6 @@ static PySequenceMethods element_as_sequence = { 0, }; -static PyMappingMethods element_as_mapping = { - (lenfunc) element_length, - (binaryfunc) element_subscr, - (objobjargproc) element_ass_subscr, -}; - -static PyTypeObject Element_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "xml.etree.ElementTree.Element", sizeof(ElementObject), 0, - /* methods */ - (destructor)element_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - (reprfunc)element_repr, /* tp_repr */ - 0, /* tp_as_number */ - &element_as_sequence, /* tp_as_sequence */ - &element_as_mapping, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - (getattrofunc)element_getattro, /* tp_getattro */ - (setattrofunc)element_setattro, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, - /* tp_flags */ - 0, /* tp_doc */ - (traverseproc)element_gc_traverse, /* tp_traverse */ - (inquiry)element_gc_clear, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(ElementObject, weakreflist), /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - element_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 */ - (initproc)element_init, /* tp_init */ - PyType_GenericAlloc, /* tp_alloc */ - element_new, /* tp_new */ - 0, /* tp_free */ -}; - /******************************* Element iterator ****************************/ /* ElementIterObject represents the iteration state over an XML element in @@ -2264,23 +2283,24 @@ treebuilder_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return (PyObject *)t; } +/*[clinic input] +_elementtree.TreeBuilder.__init__ + + element_factory: object = NULL + +[clinic start generated code]*/ + static int -treebuilder_init(PyObject *self, PyObject *args, PyObject *kwds) +_elementtree_TreeBuilder___init___impl(TreeBuilderObject *self, + PyObject *element_factory) +/*[clinic end generated code: output=91cfa7558970ee96 input=1b424eeefc35249c]*/ { - static char *kwlist[] = {"element_factory", 0}; - PyObject *element_factory = NULL; - TreeBuilderObject *self_tb = (TreeBuilderObject *)self; PyObject *tmp; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:TreeBuilder", kwlist, - &element_factory)) { - return -1; - } - if (element_factory) { Py_INCREF(element_factory); - tmp = self_tb->element_factory; - self_tb->element_factory = element_factory; + tmp = self->element_factory; + self->element_factory = element_factory; Py_XDECREF(tmp); } @@ -2600,23 +2620,33 @@ treebuilder_handle_namespace(TreeBuilderObject* self, int start, /* -------------------------------------------------------------------- */ /* methods (in alphabetical order) */ -static PyObject* -treebuilder_data(TreeBuilderObject* self, PyObject* args) -{ - PyObject* data; - if (!PyArg_ParseTuple(args, "O:data", &data)) - return NULL; +/*[clinic input] +_elementtree.TreeBuilder.data + + data: object + / +[clinic start generated code]*/ + +static PyObject * +_elementtree_TreeBuilder_data(TreeBuilderObject *self, PyObject *data) +/*[clinic end generated code: output=69144c7100795bb2 input=a0540c532b284d29]*/ +{ return treebuilder_handle_data(self, data); } -static PyObject* -treebuilder_end(TreeBuilderObject* self, PyObject* args) -{ - PyObject* tag; - if (!PyArg_ParseTuple(args, "O:end", &tag)) - return NULL; +/*[clinic input] +_elementtree.TreeBuilder.end + + tag: object + / + +[clinic start generated code]*/ +static PyObject * +_elementtree_TreeBuilder_end(TreeBuilderObject *self, PyObject *tag) +/*[clinic end generated code: output=9a98727cc691cd9d input=22dc3674236f5745]*/ +{ return treebuilder_handle_end(self, tag); } @@ -2636,75 +2666,34 @@ treebuilder_done(TreeBuilderObject* self) return res; } -static PyObject* -treebuilder_close(TreeBuilderObject* self, PyObject* args) -{ - if (!PyArg_ParseTuple(args, ":close")) - return NULL; +/*[clinic input] +_elementtree.TreeBuilder.close +[clinic start generated code]*/ + +static PyObject * +_elementtree_TreeBuilder_close_impl(TreeBuilderObject *self) +/*[clinic end generated code: output=b441fee3202f61ee input=f7c9c65dc718de14]*/ +{ return treebuilder_done(self); } -static PyObject* -treebuilder_start(TreeBuilderObject* self, PyObject* args) -{ - PyObject* tag; - PyObject* attrib = Py_None; - if (!PyArg_ParseTuple(args, "O|O:start", &tag, &attrib)) - return NULL; +/*[clinic input] +_elementtree.TreeBuilder.start - return treebuilder_handle_start(self, tag, attrib); -} + tag: object + attrs: object = None + / -static PyMethodDef treebuilder_methods[] = { - {"data", (PyCFunction) treebuilder_data, METH_VARARGS}, - {"start", (PyCFunction) treebuilder_start, METH_VARARGS}, - {"end", (PyCFunction) treebuilder_end, METH_VARARGS}, - {"close", (PyCFunction) treebuilder_close, METH_VARARGS}, - {NULL, NULL} -}; +[clinic start generated code]*/ -static PyTypeObject TreeBuilder_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "xml.etree.ElementTree.TreeBuilder", sizeof(TreeBuilderObject), 0, - /* methods */ - (destructor)treebuilder_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, - /* tp_flags */ - 0, /* tp_doc */ - (traverseproc)treebuilder_gc_traverse, /* tp_traverse */ - (inquiry)treebuilder_gc_clear, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - treebuilder_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 */ - (initproc)treebuilder_init, /* tp_init */ - PyType_GenericAlloc, /* tp_alloc */ - treebuilder_new, /* tp_new */ - 0, /* tp_free */ -}; +static PyObject * +_elementtree_TreeBuilder_start_impl(TreeBuilderObject *self, PyObject *tag, + PyObject *attrs) +/*[clinic end generated code: output=e7e9dc2861349411 input=95fc1758dd042c65]*/ +{ + return treebuilder_handle_start(self, tag, attrs); +} /* ==================================================================== */ /* the expat interface */ @@ -3212,33 +3201,34 @@ xmlparser_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return (PyObject *)self; } -static int -xmlparser_init(PyObject *self, PyObject *args, PyObject *kwds) -{ - XMLParserObject *self_xp = (XMLParserObject *)self; - PyObject *target = NULL, *html = NULL; - char *encoding = NULL; - static char *kwlist[] = {"html", "target", "encoding", 0}; +/*[clinic input] +_elementtree.XMLParser.__init__ - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOz:XMLParser", kwlist, - &html, &target, &encoding)) { - return -1; - } + html: object = NULL + target: object = NULL + encoding: str(nullable=True) = NULL - self_xp->entity = PyDict_New(); - if (!self_xp->entity) +[clinic start generated code]*/ + +static int +_elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *html, + PyObject *target, const char *encoding) +/*[clinic end generated code: output=d6a16c63dda54441 input=a870da39c80d7d68]*/ +{ + self->entity = PyDict_New(); + if (!self->entity) return -1; - self_xp->names = PyDict_New(); - if (!self_xp->names) { - Py_CLEAR(self_xp->entity); + self->names = PyDict_New(); + if (!self->names) { + Py_CLEAR(self->entity); return -1; } - self_xp->parser = EXPAT(ParserCreate_MM)(encoding, &ExpatMemoryHandler, "}"); - if (!self_xp->parser) { - Py_CLEAR(self_xp->entity); - Py_CLEAR(self_xp->names); + self->parser = EXPAT(ParserCreate_MM)(encoding, &ExpatMemoryHandler, "}"); + if (!self->parser) { + Py_CLEAR(self->entity); + Py_CLEAR(self->names); PyErr_NoMemory(); return -1; } @@ -3248,55 +3238,55 @@ xmlparser_init(PyObject *self, PyObject *args, PyObject *kwds) } else { target = treebuilder_new(&TreeBuilder_Type, NULL, NULL); if (!target) { - Py_CLEAR(self_xp->entity); - Py_CLEAR(self_xp->names); - EXPAT(ParserFree)(self_xp->parser); + Py_CLEAR(self->entity); + Py_CLEAR(self->names); + EXPAT(ParserFree)(self->parser); return -1; } } - self_xp->target = target; + self->target = target; - self_xp->handle_start = PyObject_GetAttrString(target, "start"); - self_xp->handle_data = PyObject_GetAttrString(target, "data"); - self_xp->handle_end = PyObject_GetAttrString(target, "end"); - self_xp->handle_comment = PyObject_GetAttrString(target, "comment"); - self_xp->handle_pi = PyObject_GetAttrString(target, "pi"); - self_xp->handle_close = PyObject_GetAttrString(target, "close"); - self_xp->handle_doctype = PyObject_GetAttrString(target, "doctype"); + self->handle_start = PyObject_GetAttrString(target, "start"); + self->handle_data = PyObject_GetAttrString(target, "data"); + self->handle_end = PyObject_GetAttrString(target, "end"); + self->handle_comment = PyObject_GetAttrString(target, "comment"); + self->handle_pi = PyObject_GetAttrString(target, "pi"); + self->handle_close = PyObject_GetAttrString(target, "close"); + self->handle_doctype = PyObject_GetAttrString(target, "doctype"); PyErr_Clear(); /* configure parser */ - EXPAT(SetUserData)(self_xp->parser, self_xp); + EXPAT(SetUserData)(self->parser, self); EXPAT(SetElementHandler)( - self_xp->parser, + self->parser, (XML_StartElementHandler) expat_start_handler, (XML_EndElementHandler) expat_end_handler ); EXPAT(SetDefaultHandlerExpand)( - self_xp->parser, + self->parser, (XML_DefaultHandler) expat_default_handler ); EXPAT(SetCharacterDataHandler)( - self_xp->parser, + self->parser, (XML_CharacterDataHandler) expat_data_handler ); - if (self_xp->handle_comment) + if (self->handle_comment) EXPAT(SetCommentHandler)( - self_xp->parser, + self->parser, (XML_CommentHandler) expat_comment_handler ); - if (self_xp->handle_pi) + if (self->handle_pi) EXPAT(SetProcessingInstructionHandler)( - self_xp->parser, + self->parser, (XML_ProcessingInstructionHandler) expat_pi_handler ); EXPAT(SetStartDoctypeDeclHandler)( - self_xp->parser, + self->parser, (XML_StartDoctypeDeclHandler) expat_start_doctype_handler ); EXPAT(SetUnknownEncodingHandler)( - self_xp->parser, + self->parser, EXPAT(DefaultUnknownEncodingHandler), NULL ); @@ -3372,15 +3362,18 @@ expat_parse(XMLParserObject* self, const char* data, int data_len, int final) Py_RETURN_NONE; } -static PyObject* -xmlparser_close(XMLParserObject* self, PyObject* args) +/*[clinic input] +_elementtree.XMLParser.close + +[clinic start generated code]*/ + +static PyObject * +_elementtree_XMLParser_close_impl(XMLParserObject *self) +/*[clinic end generated code: output=d68d375dd23bc7fb input=ca7909ca78c3abfe]*/ { /* end feeding data to parser */ PyObject* res; - if (!PyArg_ParseTuple(args, ":close")) - return NULL; - res = expat_parse(self, "", 0, 1); if (!res) return NULL; @@ -3398,15 +3391,24 @@ xmlparser_close(XMLParserObject* self, PyObject* args) } } -static PyObject* -xmlparser_feed(XMLParserObject* self, PyObject* arg) +/*[clinic input] +_elementtree.XMLParser.feed + + data: object + / + +[clinic start generated code]*/ + +static PyObject * +_elementtree_XMLParser_feed(XMLParserObject *self, PyObject *data) +/*[clinic end generated code: output=e42b6a78eec7446d input=fe231b6b8de3ce1f]*/ { /* feed data to parser */ - if (PyUnicode_Check(arg)) { + if (PyUnicode_Check(data)) { Py_ssize_t data_len; - const char *data = PyUnicode_AsUTF8AndSize(arg, &data_len); - if (data == NULL) + const char *data_ptr = PyUnicode_AsUTF8AndSize(data, &data_len); + if (data_ptr == NULL) return NULL; if (data_len > INT_MAX) { PyErr_SetString(PyExc_OverflowError, "size does not fit in an int"); @@ -3414,12 +3416,12 @@ xmlparser_feed(XMLParserObject* self, PyObject* arg) } /* Explicitly set UTF-8 encoding. Return code ignored. */ (void)EXPAT(SetEncoding)(self->parser, "utf-8"); - return expat_parse(self, data, (int)data_len, 0); + return expat_parse(self, data_ptr, (int)data_len, 0); } else { Py_buffer view; PyObject *res; - if (PyObject_GetBuffer(arg, &view, PyBUF_SIMPLE) < 0) + if (PyObject_GetBuffer(data, &view, PyBUF_SIMPLE) < 0) return NULL; if (view.len > INT_MAX) { PyBuffer_Release(&view); @@ -3432,8 +3434,17 @@ xmlparser_feed(XMLParserObject* self, PyObject* arg) } } -static PyObject* -xmlparser_parse_whole(XMLParserObject* self, PyObject* args) +/*[clinic input] +_elementtree.XMLParser._parse_whole + + file: object + / + +[clinic start generated code]*/ + +static PyObject * +_elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file) +/*[clinic end generated code: output=f797197bb818dda3 input=19ecc893b6f3e752]*/ { /* (internal) parse the whole input, until end of stream */ PyObject* reader; @@ -3441,11 +3452,7 @@ xmlparser_parse_whole(XMLParserObject* self, PyObject* args) PyObject* temp; PyObject* res; - PyObject* fileobj; - if (!PyArg_ParseTuple(args, "O:_parse", &fileobj)) - return NULL; - - reader = PyObject_GetAttrString(fileobj, "read"); + reader = PyObject_GetAttrString(file, "read"); if (!reader) return NULL; @@ -3512,25 +3519,37 @@ xmlparser_parse_whole(XMLParserObject* self, PyObject* args) return res; } -static PyObject* -xmlparser_doctype(XMLParserObject *self, PyObject *args) +/*[clinic input] +_elementtree.XMLParser.doctype + +[clinic start generated code]*/ + +static PyObject * +_elementtree_XMLParser_doctype_impl(XMLParserObject *self) +/*[clinic end generated code: output=d09fdb9c45f3a602 input=20d5e0febf902a2f]*/ { Py_RETURN_NONE; } -static PyObject* -xmlparser_setevents(XMLParserObject *self, PyObject* args) +/*[clinic input] +_elementtree.XMLParser._setevents + + events_queue: object(subclass_of='&PyList_Type') + events_to_report: object = None + / + +[clinic start generated code]*/ + +static PyObject * +_elementtree_XMLParser__setevents_impl(XMLParserObject *self, + PyObject *events_queue, + PyObject *events_to_report) +/*[clinic end generated code: output=1440092922b13ed1 input=59db9742910c6174]*/ { /* activate element event reporting */ Py_ssize_t i, seqlen; TreeBuilderObject *target; - - PyObject *events_queue; - PyObject *events_to_report = Py_None; PyObject *events_seq; - if (!PyArg_ParseTuple(args, "O!|O:_setevents", &PyList_Type, &events_queue, - &events_to_report)) - return NULL; if (!TreeBuilder_CheckExact(self->target)) { PyErr_SetString( @@ -3614,15 +3633,6 @@ xmlparser_setevents(XMLParserObject *self, PyObject* args) Py_RETURN_NONE; } -static PyMethodDef xmlparser_methods[] = { - {"feed", (PyCFunction) xmlparser_feed, METH_O}, - {"close", (PyCFunction) xmlparser_close, METH_VARARGS}, - {"_parse_whole", (PyCFunction) xmlparser_parse_whole, METH_VARARGS}, - {"_setevents", (PyCFunction) xmlparser_setevents, METH_VARARGS}, - {"doctype", (PyCFunction) xmlparser_doctype, METH_VARARGS}, - {NULL, NULL} -}; - static PyObject* xmlparser_getattro(XMLParserObject* self, PyObject* nameobj) { @@ -3647,6 +3657,152 @@ xmlparser_getattro(XMLParserObject* self, PyObject* nameobj) return PyObject_GenericGetAttr((PyObject*) self, nameobj); } +#include "clinic/_elementtree.c.h" + +static PyMethodDef element_methods[] = { + + _ELEMENTTREE_ELEMENT_CLEAR_METHODDEF + + _ELEMENTTREE_ELEMENT_GET_METHODDEF + _ELEMENTTREE_ELEMENT_SET_METHODDEF + + _ELEMENTTREE_ELEMENT_FIND_METHODDEF + _ELEMENTTREE_ELEMENT_FINDTEXT_METHODDEF + _ELEMENTTREE_ELEMENT_FINDALL_METHODDEF + + _ELEMENTTREE_ELEMENT_APPEND_METHODDEF + _ELEMENTTREE_ELEMENT_EXTEND_METHODDEF + _ELEMENTTREE_ELEMENT_INSERT_METHODDEF + _ELEMENTTREE_ELEMENT_REMOVE_METHODDEF + + _ELEMENTTREE_ELEMENT_ITER_METHODDEF + _ELEMENTTREE_ELEMENT_ITERTEXT_METHODDEF + _ELEMENTTREE_ELEMENT_ITERFIND_METHODDEF + + {"getiterator", (PyCFunction)_elementtree_Element_iter, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_iter__doc__}, + _ELEMENTTREE_ELEMENT_GETCHILDREN_METHODDEF + + _ELEMENTTREE_ELEMENT_ITEMS_METHODDEF + _ELEMENTTREE_ELEMENT_KEYS_METHODDEF + + _ELEMENTTREE_ELEMENT_MAKEELEMENT_METHODDEF + + _ELEMENTTREE_ELEMENT___COPY___METHODDEF + _ELEMENTTREE_ELEMENT___DEEPCOPY___METHODDEF + _ELEMENTTREE_ELEMENT___SIZEOF___METHODDEF + _ELEMENTTREE_ELEMENT___GETSTATE___METHODDEF + _ELEMENTTREE_ELEMENT___SETSTATE___METHODDEF + + {NULL, NULL} +}; + +static PyMappingMethods element_as_mapping = { + (lenfunc) element_length, + (binaryfunc) element_subscr, + (objobjargproc) element_ass_subscr, +}; + +static PyTypeObject Element_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "xml.etree.ElementTree.Element", sizeof(ElementObject), 0, + /* methods */ + (destructor)element_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + (reprfunc)element_repr, /* tp_repr */ + 0, /* tp_as_number */ + &element_as_sequence, /* tp_as_sequence */ + &element_as_mapping, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + (getattrofunc)element_getattro, /* tp_getattro */ + (setattrofunc)element_setattro, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + /* tp_flags */ + 0, /* tp_doc */ + (traverseproc)element_gc_traverse, /* tp_traverse */ + (inquiry)element_gc_clear, /* tp_clear */ + 0, /* tp_richcompare */ + offsetof(ElementObject, weakreflist), /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + element_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 */ + (initproc)element_init, /* tp_init */ + PyType_GenericAlloc, /* tp_alloc */ + element_new, /* tp_new */ + 0, /* tp_free */ +}; + +static PyMethodDef treebuilder_methods[] = { + _ELEMENTTREE_TREEBUILDER_DATA_METHODDEF + _ELEMENTTREE_TREEBUILDER_START_METHODDEF + _ELEMENTTREE_TREEBUILDER_END_METHODDEF + _ELEMENTTREE_TREEBUILDER_CLOSE_METHODDEF + {NULL, NULL} +}; + +static PyTypeObject TreeBuilder_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "xml.etree.ElementTree.TreeBuilder", sizeof(TreeBuilderObject), 0, + /* methods */ + (destructor)treebuilder_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + /* tp_flags */ + 0, /* tp_doc */ + (traverseproc)treebuilder_gc_traverse, /* tp_traverse */ + (inquiry)treebuilder_gc_clear, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + treebuilder_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 */ + _elementtree_TreeBuilder___init__, /* tp_init */ + PyType_GenericAlloc, /* tp_alloc */ + treebuilder_new, /* tp_new */ + 0, /* tp_free */ +}; + +static PyMethodDef xmlparser_methods[] = { + _ELEMENTTREE_XMLPARSER_FEED_METHODDEF + _ELEMENTTREE_XMLPARSER_CLOSE_METHODDEF + _ELEMENTTREE_XMLPARSER__PARSE_WHOLE_METHODDEF + _ELEMENTTREE_XMLPARSER__SETEVENTS_METHODDEF + _ELEMENTTREE_XMLPARSER_DOCTYPE_METHODDEF + {NULL, NULL} +}; + static PyTypeObject XMLParser_Type = { PyVarObject_HEAD_INIT(NULL, 0) "xml.etree.ElementTree.XMLParser", sizeof(XMLParserObject), 0, @@ -3683,7 +3839,7 @@ static PyTypeObject XMLParser_Type = { 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ - (initproc)xmlparser_init, /* tp_init */ + _elementtree_XMLParser___init__, /* tp_init */ PyType_GenericAlloc, /* tp_alloc */ xmlparser_new, /* tp_new */ 0, /* tp_free */ diff --git a/Modules/clinic/_elementtree.c.h b/Modules/clinic/_elementtree.c.h new file mode 100644 index 0000000000..a4c3f91790 --- /dev/null +++ b/Modules/clinic/_elementtree.c.h @@ -0,0 +1,666 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_elementtree_Element_append__doc__, +"append($self, subelement, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_APPEND_METHODDEF \ + {"append", (PyCFunction)_elementtree_Element_append, METH_O, _elementtree_Element_append__doc__}, + +static PyObject * +_elementtree_Element_append_impl(ElementObject *self, PyObject *subelement); + +static PyObject * +_elementtree_Element_append(ElementObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *subelement; + + if (!PyArg_Parse(arg, "O!:append", &Element_Type, &subelement)) + goto exit; + return_value = _elementtree_Element_append_impl(self, subelement); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element_clear__doc__, +"clear($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_CLEAR_METHODDEF \ + {"clear", (PyCFunction)_elementtree_Element_clear, METH_NOARGS, _elementtree_Element_clear__doc__}, + +static PyObject * +_elementtree_Element_clear_impl(ElementObject *self); + +static PyObject * +_elementtree_Element_clear(ElementObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_Element_clear_impl(self); +} + +PyDoc_STRVAR(_elementtree_Element___copy____doc__, +"__copy__($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT___COPY___METHODDEF \ + {"__copy__", (PyCFunction)_elementtree_Element___copy__, METH_NOARGS, _elementtree_Element___copy____doc__}, + +static PyObject * +_elementtree_Element___copy___impl(ElementObject *self); + +static PyObject * +_elementtree_Element___copy__(ElementObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_Element___copy___impl(self); +} + +PyDoc_STRVAR(_elementtree_Element___deepcopy____doc__, +"__deepcopy__($self, memo, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT___DEEPCOPY___METHODDEF \ + {"__deepcopy__", (PyCFunction)_elementtree_Element___deepcopy__, METH_O, _elementtree_Element___deepcopy____doc__}, + +PyDoc_STRVAR(_elementtree_Element___sizeof____doc__, +"__sizeof__($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT___SIZEOF___METHODDEF \ + {"__sizeof__", (PyCFunction)_elementtree_Element___sizeof__, METH_NOARGS, _elementtree_Element___sizeof____doc__}, + +static Py_ssize_t +_elementtree_Element___sizeof___impl(ElementObject *self); + +static PyObject * +_elementtree_Element___sizeof__(ElementObject *self, PyObject *Py_UNUSED(ignored)) +{ + PyObject *return_value = NULL; + Py_ssize_t _return_value; + + _return_value = _elementtree_Element___sizeof___impl(self); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromSsize_t(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element___getstate____doc__, +"__getstate__($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT___GETSTATE___METHODDEF \ + {"__getstate__", (PyCFunction)_elementtree_Element___getstate__, METH_NOARGS, _elementtree_Element___getstate____doc__}, + +static PyObject * +_elementtree_Element___getstate___impl(ElementObject *self); + +static PyObject * +_elementtree_Element___getstate__(ElementObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_Element___getstate___impl(self); +} + +PyDoc_STRVAR(_elementtree_Element___setstate____doc__, +"__setstate__($self, state, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT___SETSTATE___METHODDEF \ + {"__setstate__", (PyCFunction)_elementtree_Element___setstate__, METH_O, _elementtree_Element___setstate____doc__}, + +PyDoc_STRVAR(_elementtree_Element_extend__doc__, +"extend($self, elements, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_EXTEND_METHODDEF \ + {"extend", (PyCFunction)_elementtree_Element_extend, METH_O, _elementtree_Element_extend__doc__}, + +PyDoc_STRVAR(_elementtree_Element_find__doc__, +"find($self, /, path, namespaces=None)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_FIND_METHODDEF \ + {"find", (PyCFunction)_elementtree_Element_find, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_find__doc__}, + +static PyObject * +_elementtree_Element_find_impl(ElementObject *self, PyObject *path, + PyObject *namespaces); + +static PyObject * +_elementtree_Element_find(ElementObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "namespaces", NULL}; + PyObject *path; + PyObject *namespaces = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:find", _keywords, + &path, &namespaces)) + goto exit; + return_value = _elementtree_Element_find_impl(self, path, namespaces); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element_findtext__doc__, +"findtext($self, /, path, default=None, namespaces=None)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_FINDTEXT_METHODDEF \ + {"findtext", (PyCFunction)_elementtree_Element_findtext, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_findtext__doc__}, + +static PyObject * +_elementtree_Element_findtext_impl(ElementObject *self, PyObject *path, + PyObject *default_value, + PyObject *namespaces); + +static PyObject * +_elementtree_Element_findtext(ElementObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "default", "namespaces", NULL}; + PyObject *path; + PyObject *default_value = Py_None; + PyObject *namespaces = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OO:findtext", _keywords, + &path, &default_value, &namespaces)) + goto exit; + return_value = _elementtree_Element_findtext_impl(self, path, default_value, namespaces); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element_findall__doc__, +"findall($self, /, path, namespaces=None)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_FINDALL_METHODDEF \ + {"findall", (PyCFunction)_elementtree_Element_findall, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_findall__doc__}, + +static PyObject * +_elementtree_Element_findall_impl(ElementObject *self, PyObject *path, + PyObject *namespaces); + +static PyObject * +_elementtree_Element_findall(ElementObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "namespaces", NULL}; + PyObject *path; + PyObject *namespaces = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:findall", _keywords, + &path, &namespaces)) + goto exit; + return_value = _elementtree_Element_findall_impl(self, path, namespaces); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element_iterfind__doc__, +"iterfind($self, /, path, namespaces=None)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_ITERFIND_METHODDEF \ + {"iterfind", (PyCFunction)_elementtree_Element_iterfind, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_iterfind__doc__}, + +static PyObject * +_elementtree_Element_iterfind_impl(ElementObject *self, PyObject *path, + PyObject *namespaces); + +static PyObject * +_elementtree_Element_iterfind(ElementObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", "namespaces", NULL}; + PyObject *path; + PyObject *namespaces = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:iterfind", _keywords, + &path, &namespaces)) + goto exit; + return_value = _elementtree_Element_iterfind_impl(self, path, namespaces); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element_get__doc__, +"get($self, /, key, default=None)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_GET_METHODDEF \ + {"get", (PyCFunction)_elementtree_Element_get, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_get__doc__}, + +static PyObject * +_elementtree_Element_get_impl(ElementObject *self, PyObject *key, + PyObject *default_value); + +static PyObject * +_elementtree_Element_get(ElementObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"key", "default", NULL}; + PyObject *key; + PyObject *default_value = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:get", _keywords, + &key, &default_value)) + goto exit; + return_value = _elementtree_Element_get_impl(self, key, default_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element_getchildren__doc__, +"getchildren($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_GETCHILDREN_METHODDEF \ + {"getchildren", (PyCFunction)_elementtree_Element_getchildren, METH_NOARGS, _elementtree_Element_getchildren__doc__}, + +static PyObject * +_elementtree_Element_getchildren_impl(ElementObject *self); + +static PyObject * +_elementtree_Element_getchildren(ElementObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_Element_getchildren_impl(self); +} + +PyDoc_STRVAR(_elementtree_Element_iter__doc__, +"iter($self, /, tag=None)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_ITER_METHODDEF \ + {"iter", (PyCFunction)_elementtree_Element_iter, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_iter__doc__}, + +static PyObject * +_elementtree_Element_iter_impl(ElementObject *self, PyObject *tag); + +static PyObject * +_elementtree_Element_iter(ElementObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"tag", NULL}; + PyObject *tag = Py_None; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:iter", _keywords, + &tag)) + goto exit; + return_value = _elementtree_Element_iter_impl(self, tag); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element_itertext__doc__, +"itertext($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_ITERTEXT_METHODDEF \ + {"itertext", (PyCFunction)_elementtree_Element_itertext, METH_NOARGS, _elementtree_Element_itertext__doc__}, + +static PyObject * +_elementtree_Element_itertext_impl(ElementObject *self); + +static PyObject * +_elementtree_Element_itertext(ElementObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_Element_itertext_impl(self); +} + +PyDoc_STRVAR(_elementtree_Element_insert__doc__, +"insert($self, index, subelement, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_INSERT_METHODDEF \ + {"insert", (PyCFunction)_elementtree_Element_insert, METH_VARARGS, _elementtree_Element_insert__doc__}, + +static PyObject * +_elementtree_Element_insert_impl(ElementObject *self, Py_ssize_t index, + PyObject *subelement); + +static PyObject * +_elementtree_Element_insert(ElementObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t index; + PyObject *subelement; + + if (!PyArg_ParseTuple(args, "nO!:insert", + &index, &Element_Type, &subelement)) + goto exit; + return_value = _elementtree_Element_insert_impl(self, index, subelement); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element_items__doc__, +"items($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_ITEMS_METHODDEF \ + {"items", (PyCFunction)_elementtree_Element_items, METH_NOARGS, _elementtree_Element_items__doc__}, + +static PyObject * +_elementtree_Element_items_impl(ElementObject *self); + +static PyObject * +_elementtree_Element_items(ElementObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_Element_items_impl(self); +} + +PyDoc_STRVAR(_elementtree_Element_keys__doc__, +"keys($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_KEYS_METHODDEF \ + {"keys", (PyCFunction)_elementtree_Element_keys, METH_NOARGS, _elementtree_Element_keys__doc__}, + +static PyObject * +_elementtree_Element_keys_impl(ElementObject *self); + +static PyObject * +_elementtree_Element_keys(ElementObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_Element_keys_impl(self); +} + +PyDoc_STRVAR(_elementtree_Element_makeelement__doc__, +"makeelement($self, tag, attrib, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_MAKEELEMENT_METHODDEF \ + {"makeelement", (PyCFunction)_elementtree_Element_makeelement, METH_VARARGS, _elementtree_Element_makeelement__doc__}, + +static PyObject * +_elementtree_Element_makeelement_impl(ElementObject *self, PyObject *tag, + PyObject *attrib); + +static PyObject * +_elementtree_Element_makeelement(ElementObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *tag; + PyObject *attrib; + + if (!PyArg_UnpackTuple(args, "makeelement", + 2, 2, + &tag, &attrib)) + goto exit; + return_value = _elementtree_Element_makeelement_impl(self, tag, attrib); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element_remove__doc__, +"remove($self, subelement, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_REMOVE_METHODDEF \ + {"remove", (PyCFunction)_elementtree_Element_remove, METH_O, _elementtree_Element_remove__doc__}, + +static PyObject * +_elementtree_Element_remove_impl(ElementObject *self, PyObject *subelement); + +static PyObject * +_elementtree_Element_remove(ElementObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *subelement; + + if (!PyArg_Parse(arg, "O!:remove", &Element_Type, &subelement)) + goto exit; + return_value = _elementtree_Element_remove_impl(self, subelement); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_Element_set__doc__, +"set($self, key, value, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_ELEMENT_SET_METHODDEF \ + {"set", (PyCFunction)_elementtree_Element_set, METH_VARARGS, _elementtree_Element_set__doc__}, + +static PyObject * +_elementtree_Element_set_impl(ElementObject *self, PyObject *key, + PyObject *value); + +static PyObject * +_elementtree_Element_set(ElementObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *key; + PyObject *value; + + if (!PyArg_UnpackTuple(args, "set", + 2, 2, + &key, &value)) + goto exit; + return_value = _elementtree_Element_set_impl(self, key, value); + +exit: + return return_value; +} + +static int +_elementtree_TreeBuilder___init___impl(TreeBuilderObject *self, + PyObject *element_factory); + +static int +_elementtree_TreeBuilder___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static char *_keywords[] = {"element_factory", NULL}; + PyObject *element_factory = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:TreeBuilder", _keywords, + &element_factory)) + goto exit; + return_value = _elementtree_TreeBuilder___init___impl((TreeBuilderObject *)self, element_factory); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_TreeBuilder_data__doc__, +"data($self, data, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_TREEBUILDER_DATA_METHODDEF \ + {"data", (PyCFunction)_elementtree_TreeBuilder_data, METH_O, _elementtree_TreeBuilder_data__doc__}, + +PyDoc_STRVAR(_elementtree_TreeBuilder_end__doc__, +"end($self, tag, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_TREEBUILDER_END_METHODDEF \ + {"end", (PyCFunction)_elementtree_TreeBuilder_end, METH_O, _elementtree_TreeBuilder_end__doc__}, + +PyDoc_STRVAR(_elementtree_TreeBuilder_close__doc__, +"close($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_TREEBUILDER_CLOSE_METHODDEF \ + {"close", (PyCFunction)_elementtree_TreeBuilder_close, METH_NOARGS, _elementtree_TreeBuilder_close__doc__}, + +static PyObject * +_elementtree_TreeBuilder_close_impl(TreeBuilderObject *self); + +static PyObject * +_elementtree_TreeBuilder_close(TreeBuilderObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_TreeBuilder_close_impl(self); +} + +PyDoc_STRVAR(_elementtree_TreeBuilder_start__doc__, +"start($self, tag, attrs=None, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_TREEBUILDER_START_METHODDEF \ + {"start", (PyCFunction)_elementtree_TreeBuilder_start, METH_VARARGS, _elementtree_TreeBuilder_start__doc__}, + +static PyObject * +_elementtree_TreeBuilder_start_impl(TreeBuilderObject *self, PyObject *tag, + PyObject *attrs); + +static PyObject * +_elementtree_TreeBuilder_start(TreeBuilderObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *tag; + PyObject *attrs = Py_None; + + if (!PyArg_UnpackTuple(args, "start", + 1, 2, + &tag, &attrs)) + goto exit; + return_value = _elementtree_TreeBuilder_start_impl(self, tag, attrs); + +exit: + return return_value; +} + +static int +_elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *html, + PyObject *target, const char *encoding); + +static int +_elementtree_XMLParser___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static char *_keywords[] = {"html", "target", "encoding", NULL}; + PyObject *html = NULL; + PyObject *target = NULL; + const char *encoding = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OOz:XMLParser", _keywords, + &html, &target, &encoding)) + goto exit; + return_value = _elementtree_XMLParser___init___impl((XMLParserObject *)self, html, target, encoding); + +exit: + return return_value; +} + +PyDoc_STRVAR(_elementtree_XMLParser_close__doc__, +"close($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_XMLPARSER_CLOSE_METHODDEF \ + {"close", (PyCFunction)_elementtree_XMLParser_close, METH_NOARGS, _elementtree_XMLParser_close__doc__}, + +static PyObject * +_elementtree_XMLParser_close_impl(XMLParserObject *self); + +static PyObject * +_elementtree_XMLParser_close(XMLParserObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_XMLParser_close_impl(self); +} + +PyDoc_STRVAR(_elementtree_XMLParser_feed__doc__, +"feed($self, data, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_XMLPARSER_FEED_METHODDEF \ + {"feed", (PyCFunction)_elementtree_XMLParser_feed, METH_O, _elementtree_XMLParser_feed__doc__}, + +PyDoc_STRVAR(_elementtree_XMLParser__parse_whole__doc__, +"_parse_whole($self, file, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_XMLPARSER__PARSE_WHOLE_METHODDEF \ + {"_parse_whole", (PyCFunction)_elementtree_XMLParser__parse_whole, METH_O, _elementtree_XMLParser__parse_whole__doc__}, + +PyDoc_STRVAR(_elementtree_XMLParser_doctype__doc__, +"doctype($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_XMLPARSER_DOCTYPE_METHODDEF \ + {"doctype", (PyCFunction)_elementtree_XMLParser_doctype, METH_NOARGS, _elementtree_XMLParser_doctype__doc__}, + +static PyObject * +_elementtree_XMLParser_doctype_impl(XMLParserObject *self); + +static PyObject * +_elementtree_XMLParser_doctype(XMLParserObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_XMLParser_doctype_impl(self); +} + +PyDoc_STRVAR(_elementtree_XMLParser__setevents__doc__, +"_setevents($self, events_queue, events_to_report=None, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_XMLPARSER__SETEVENTS_METHODDEF \ + {"_setevents", (PyCFunction)_elementtree_XMLParser__setevents, METH_VARARGS, _elementtree_XMLParser__setevents__doc__}, + +static PyObject * +_elementtree_XMLParser__setevents_impl(XMLParserObject *self, + PyObject *events_queue, + PyObject *events_to_report); + +static PyObject * +_elementtree_XMLParser__setevents(XMLParserObject *self, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *events_queue; + PyObject *events_to_report = Py_None; + + if (!PyArg_ParseTuple(args, "O!|O:_setevents", + &PyList_Type, &events_queue, &events_to_report)) + goto exit; + return_value = _elementtree_XMLParser__setevents_impl(self, events_queue, events_to_report); + +exit: + return return_value; +} +/*[clinic end generated code: output=119aed84c1545187 input=a9049054013a1b77]*/ -- cgit v1.2.1 From cc6bf529161d5befef04ea2c083fb22c30a6858c Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Mon, 4 May 2015 06:59:46 -0700 Subject: Issue #24001: Argument Clinic converters now use accept={type} instead of types={'type'} to specify the types the converter accepts. --- Modules/_dbmmodule.c | 8 +++---- Modules/_elementtree.c | 4 ++-- Modules/_gdbmmodule.c | 4 ++-- Modules/_io/_iomodule.c | 8 +++---- Modules/_io/bufferedio.c | 16 +++++++------- Modules/_io/bytesio.c | 4 ++-- Modules/_io/fileio.c | 4 ++-- Modules/_io/textio.c | 8 +++---- Modules/_ssl.c | 8 +++---- Modules/_tkinter.c | 6 +++--- Modules/arraymodule.c | 8 +++---- Modules/cjkcodecs/multibytecodec.c | 8 +++---- Modules/pyexpat.c | 10 ++++----- Modules/unicodedata.c | 44 +++++++++++++++++++------------------- 14 files changed, 70 insertions(+), 70 deletions(-) (limited to 'Modules') diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index 6c605eacc9..191cdd6088 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -274,7 +274,7 @@ static PySequenceMethods dbm_as_sequence = { /*[clinic input] _dbm.dbm.get - key: str(types={'str', 'robuffer'}, length=True) + key: str(accept={str, robuffer}, length=True) default: object(c_default="NULL") = b'' / @@ -284,7 +284,7 @@ Return the value for key if present, otherwise default. static PyObject * _dbm_dbm_get_impl(dbmobject *self, const char *key, Py_ssize_clean_t key_length, PyObject *default_value) -/*[clinic end generated code: output=b44f95eba8203d93 input=fee97bbe85e84822]*/ +/*[clinic end generated code: output=b44f95eba8203d93 input=3c7c1afd9c508457]*/ { datum dbm_key, val; @@ -301,7 +301,7 @@ _dbm_dbm_get_impl(dbmobject *self, const char *key, /*[clinic input] _dbm.dbm.setdefault - key: str(types={'str', 'robuffer'}, length=True) + key: str(accept={str, robuffer}, length=True) default: object(c_default="NULL") = b'' / @@ -314,7 +314,7 @@ static PyObject * _dbm_dbm_setdefault_impl(dbmobject *self, const char *key, Py_ssize_clean_t key_length, PyObject *default_value) -/*[clinic end generated code: output=52545886cf272161 input=6a3b99ae91f20203]*/ +/*[clinic end generated code: output=52545886cf272161 input=a66fcb7f18ee2f50]*/ { datum dbm_key, val; Py_ssize_t tmp_size; diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 342bcc68f9..ebdb95b05e 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -3206,14 +3206,14 @@ _elementtree.XMLParser.__init__ html: object = NULL target: object = NULL - encoding: str(nullable=True) = NULL + encoding: str(accept={str, NoneType}) = NULL [clinic start generated code]*/ static int _elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *html, PyObject *target, const char *encoding) -/*[clinic end generated code: output=d6a16c63dda54441 input=a870da39c80d7d68]*/ +/*[clinic end generated code: output=d6a16c63dda54441 input=155bc5695baafffd]*/ { self->entity = PyDict_New(); if (!self->entity) diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c index eb6da8e175..cce5c7e008 100644 --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -383,7 +383,7 @@ _gdbm_gdbm_firstkey_impl(dbmobject *self) /*[clinic input] _gdbm.gdbm.nextkey - key: str(types={'str', 'robuffer'}, length=True) + key: str(accept={str, robuffer}, length=True) / Returns the key that follows key in the traversal. @@ -400,7 +400,7 @@ to create a list in memory that contains them all: static PyObject * _gdbm_gdbm_nextkey_impl(dbmobject *self, const char *key, Py_ssize_clean_t key_length) -/*[clinic end generated code: output=192ab892de6eb2f6 input=df8e8828201214a6]*/ +/*[clinic end generated code: output=192ab892de6eb2f6 input=1eb2ff9b4b0e6ffd]*/ { PyObject *v; datum dbm_key, nextkey; diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index ea727f25c5..528bcd4ac1 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -100,9 +100,9 @@ _io.open file: object mode: str = "r" buffering: int = -1 - encoding: str(nullable=True) = NULL - errors: str(nullable=True) = NULL - newline: str(nullable=True) = NULL + encoding: str(accept={str, NoneType}) = NULL + errors: str(accept={str, NoneType}) = NULL + newline: str(accept={str, NoneType}) = NULL closefd: int(c_default="1") = True opener: object = None @@ -230,7 +230,7 @@ static PyObject * _io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd, PyObject *opener) -/*[clinic end generated code: output=7615d0d746eb14d2 input=0541ce15691a82f2]*/ +/*[clinic end generated code: output=7615d0d746eb14d2 input=f4e1ca75223987bc]*/ { unsigned i; diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 916353bdf7..2c9064855a 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -101,26 +101,26 @@ _bufferediobase_readinto_generic(PyObject *self, Py_buffer *buffer, char readint /*[clinic input] _io._BufferedIOBase.readinto - buffer: Py_buffer(types={'rwbuffer'}) + buffer: Py_buffer(accept={rwbuffer}) / [clinic start generated code]*/ static PyObject * _io__BufferedIOBase_readinto_impl(PyObject *self, Py_buffer *buffer) -/*[clinic end generated code: output=8c8cda6684af8038 input=f8242a06c21763a0]*/ +/*[clinic end generated code: output=8c8cda6684af8038 input=00a6b9a38f29830a]*/ { return _bufferediobase_readinto_generic(self, buffer, 0); } /*[clinic input] _io._BufferedIOBase.readinto1 - buffer: Py_buffer(types={'rwbuffer'}) + buffer: Py_buffer(accept={rwbuffer}) / [clinic start generated code]*/ static PyObject * _io__BufferedIOBase_readinto1_impl(PyObject *self, Py_buffer *buffer) -/*[clinic end generated code: output=358623e4fd2b69d3 input=2003e706c730bd21]*/ +/*[clinic end generated code: output=358623e4fd2b69d3 input=ebad75b4aadfb9be]*/ { return _bufferediobase_readinto_generic(self, buffer, 1); } @@ -1065,26 +1065,26 @@ end: /*[clinic input] _io._Buffered.readinto - buffer: Py_buffer(types={'rwbuffer'}) + buffer: Py_buffer(accept={rwbuffer}) / [clinic start generated code]*/ static PyObject * _io__Buffered_readinto_impl(buffered *self, Py_buffer *buffer) -/*[clinic end generated code: output=bcb376580b1d8170 input=962b7496eac38b3a]*/ +/*[clinic end generated code: output=bcb376580b1d8170 input=ed6b98b7a20a3008]*/ { return _buffered_readinto_generic(self, buffer, 0); } /*[clinic input] _io._Buffered.readinto1 - buffer: Py_buffer(types={'rwbuffer'}) + buffer: Py_buffer(accept={rwbuffer}) / [clinic start generated code]*/ static PyObject * _io__Buffered_readinto1_impl(buffered *self, Py_buffer *buffer) -/*[clinic end generated code: output=6e5c6ac5868205d6 input=834614d93f0adeb5]*/ +/*[clinic end generated code: output=6e5c6ac5868205d6 input=4455c5d55fdf1687]*/ { return _buffered_readinto_generic(self, buffer, 1); } diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index 42dfe2404a..d46430dca5 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -541,7 +541,7 @@ _io_BytesIO_readlines_impl(bytesio *self, PyObject *arg) /*[clinic input] _io.BytesIO.readinto - buffer: Py_buffer(types={'rwbuffer'}) + buffer: Py_buffer(accept={rwbuffer}) / Read up to len(buffer) bytes into buffer. @@ -552,7 +552,7 @@ is set not to block as has no data to read. static PyObject * _io_BytesIO_readinto_impl(bytesio *self, Py_buffer *buffer) -/*[clinic end generated code: output=a5d407217dcf0639 input=d289da851c7c4159]*/ +/*[clinic end generated code: output=a5d407217dcf0639 input=71581f32635c3a31]*/ { Py_ssize_t len, n; diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 0894ca45c8..12e37bbbbe 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -603,7 +603,7 @@ _io_FileIO_seekable_impl(fileio *self) /*[clinic input] _io.FileIO.readinto - buffer: Py_buffer(types={'rwbuffer'}) + buffer: Py_buffer(accept={rwbuffer}) / Same as RawIOBase.readinto(). @@ -611,7 +611,7 @@ Same as RawIOBase.readinto(). static PyObject * _io_FileIO_readinto_impl(fileio *self, Py_buffer *buffer) -/*[clinic end generated code: output=b01a5a22c8415cb4 input=5edd8327498d468c]*/ +/*[clinic end generated code: output=b01a5a22c8415cb4 input=4721d7b68b154eaf]*/ { Py_ssize_t n; int err; diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index f61b2818f3..c45f70dc21 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -789,9 +789,9 @@ static encodefuncentry encodefuncs[] = { /*[clinic input] _io.TextIOWrapper.__init__ buffer: object - encoding: str(nullable=True) = NULL - errors: str(nullable=True) = NULL - newline: str(nullable=True) = NULL + encoding: str(accept={str, NoneType}) = NULL + errors: str(accept={str, NoneType}) = NULL + newline: str(accept={str, NoneType}) = NULL line_buffering: int(c_default="0") = False write_through: int(c_default="0") = False @@ -830,7 +830,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, const char *encoding, const char *errors, const char *newline, int line_buffering, int write_through) -/*[clinic end generated code: output=56a83402ce2a8381 input=1f20decb8d54a4ec]*/ +/*[clinic end generated code: output=56a83402ce2a8381 input=3126cb3101a2c99b]*/ { PyObject *raw, *codec_info = NULL; _PyIO_State *state = NULL; diff --git a/Modules/_ssl.c b/Modules/_ssl.c index e758da6c4f..7a9e0665cf 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1877,7 +1877,7 @@ _ssl__SSLSocket_pending_impl(PySSLSocket *self) _ssl._SSLSocket.read size as len: int [ - buffer: Py_buffer(types={'rwbuffer'}) + buffer: Py_buffer(accept={rwbuffer}) ] / @@ -1887,7 +1887,7 @@ Read up to size bytes from the SSL socket. static PyObject * _ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, Py_buffer *buffer) -/*[clinic end generated code: output=00097776cec2a0af input=4a0bbd2859e817b0]*/ +/*[clinic end generated code: output=00097776cec2a0af input=ff157eb918d0905b]*/ { PyObject *dest = NULL; char *mem; @@ -3799,7 +3799,7 @@ static PyTypeObject PySSLMemoryBIO_Type = { /* helper routines for seeding the SSL PRNG */ /*[clinic input] _ssl.RAND_add - string as view: Py_buffer(types={'str', 'buffer'}) + string as view: Py_buffer(accept={str, buffer}) entropy: double / @@ -3811,7 +3811,7 @@ string. See RFC 1750. static PyObject * _ssl_RAND_add_impl(PyModuleDef *module, Py_buffer *view, double entropy) -/*[clinic end generated code: output=0f8d5c8cce328958 input=c98b11d606b354bc]*/ +/*[clinic end generated code: output=0f8d5c8cce328958 input=580c85e6a3a4fe29]*/ { const char *buf; Py_ssize_t len, written; diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 1f21c03983..208ec47092 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -3101,7 +3101,7 @@ _tkinter__flatten(PyModuleDef *module, PyObject *item) /*[clinic input] _tkinter.create - screenName: str(nullable=True) = NULL + screenName: str(accept={str, NoneType}) = NULL baseName: str = NULL className: str = "Tk" interactive: int(c_default="0") = False @@ -3110,7 +3110,7 @@ _tkinter.create if false, then Tk_Init() doesn't get called sync: int(c_default="0") = False if true, then pass -sync to wish - use: str(nullable=True) = NULL + use: str(accept={str, NoneType}) = NULL if not None, then pass -use to wish / @@ -3121,7 +3121,7 @@ _tkinter_create_impl(PyModuleDef *module, const char *screenName, const char *baseName, const char *className, int interactive, int wantobjects, int wantTk, int sync, const char *use) -/*[clinic end generated code: output=b8847800fc3b27eb input=c133c59a99dd0086]*/ +/*[clinic end generated code: output=b8847800fc3b27eb input=0d522aad1cb0ca0e]*/ { /* XXX baseName is not used anymore; * try getting rid of it. */ diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 4704490558..45e27eb1b3 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1600,7 +1600,7 @@ frombytes(arrayobject *self, Py_buffer *buffer) /*[clinic input] array.array.fromstring - buffer: Py_buffer(types={'str', 'buffer'}) + buffer: Py_buffer(accept={str, buffer}) / Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method). @@ -1610,7 +1610,7 @@ This method is deprecated. Use frombytes instead. static PyObject * array_array_fromstring_impl(arrayobject *self, Py_buffer *buffer) -/*[clinic end generated code: output=31c4baa779df84ce input=fdde1a56cbe2b05b]*/ +/*[clinic end generated code: output=31c4baa779df84ce input=a3341a512e11d773]*/ { if (PyErr_WarnEx(PyExc_DeprecationWarning, "fromstring() is deprecated. Use frombytes() instead.", 2) != 0) @@ -1929,7 +1929,7 @@ make_array(PyTypeObject *arraytype, char typecode, PyObject *items) array._array_reconstructor arraytype: object(type="PyTypeObject *") - typecode: int(types={'str'}) + typecode: int(accept={str}) mformat_code: int(type="enum machine_format_code") items: object / @@ -1942,7 +1942,7 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items) -/*[clinic end generated code: output=6ecbf0e8e4d92ab9 input=a9ae223306d7b262]*/ +/*[clinic end generated code: output=6ecbf0e8e4d92ab9 input=2464dc8f4c7736b5]*/ { PyObject *converted_items; PyObject *result; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 70f7a21080..c4dff412ef 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -544,7 +544,7 @@ errorexit: _multibytecodec.MultibyteCodec.encode input: object - errors: str(nullable=True) = NULL + errors: str(accept={str, NoneType}) = NULL Return an encoded string version of `input'. @@ -558,7 +558,7 @@ static PyObject * _multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, PyObject *input, const char *errors) -/*[clinic end generated code: output=7b26652045ba56a9 input=252e7ee695867b2d]*/ +/*[clinic end generated code: output=7b26652045ba56a9 input=05f6ced3c8dd0582]*/ { MultibyteCodec_State state; PyObject *errorcb, *r, *ucvt; @@ -613,7 +613,7 @@ errorexit: _multibytecodec.MultibyteCodec.decode input: Py_buffer - errors: str(nullable=True) = NULL + errors: str(accept={str, NoneType}) = NULL Decodes 'input'. @@ -627,7 +627,7 @@ static PyObject * _multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self, Py_buffer *input, const char *errors) -/*[clinic end generated code: output=ff419f65bad6cc77 input=37e1d9236e3ce8f3]*/ +/*[clinic end generated code: output=ff419f65bad6cc77 input=a7d45f87f75e5e02]*/ { MultibyteCodec_State state; MultibyteDecodeBuffer buf; diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 706319ec00..7a8e96a2d9 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -911,7 +911,7 @@ pyexpat_xmlparser_GetInputContext_impl(xmlparseobject *self) /*[clinic input] pyexpat.xmlparser.ExternalEntityParserCreate - context: str(nullable=True) + context: str(accept={str, NoneType}) encoding: str = NULL / @@ -922,7 +922,7 @@ static PyObject * pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self, const char *context, const char *encoding) -/*[clinic end generated code: output=535cda9d7a0fbcd6 input=283206575d960272]*/ +/*[clinic end generated code: output=535cda9d7a0fbcd6 input=b906714cc122c322]*/ { xmlparseobject *new_parser; int i; @@ -1546,8 +1546,8 @@ static PyTypeObject Xmlparsetype = { /*[clinic input] pyexpat.ParserCreate - encoding: str(nullable=True) = NULL - namespace_separator: str(nullable=True) = NULL + encoding: str(accept={str, NoneType}) = NULL + namespace_separator: str(accept={str, NoneType}) = NULL intern: object = NULL Return a new XML parser object. @@ -1556,7 +1556,7 @@ Return a new XML parser object. static PyObject * pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, const char *namespace_separator, PyObject *intern) -/*[clinic end generated code: output=81fccd233e1743a8 input=71b9f471aa6f8f86]*/ +/*[clinic end generated code: output=81fccd233e1743a8 input=23d29704acad385d]*/ { PyObject *result; int intern_decref = 0; diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index 47ada37818..b4336f2d46 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -107,7 +107,7 @@ new_previous_version(const char*name, const change_record* (*getrecord)(Py_UCS4) unicodedata.UCD.decimal self: self - chr: int(types={'str'}) + chr: int(accept={str}) default: object=NULL / @@ -121,7 +121,7 @@ ValueError is raised. static PyObject * unicodedata_UCD_decimal_impl(PyObject *self, int chr, PyObject *default_value) -/*[clinic end generated code: output=be23376e1a185231 input=3acf7f2238874a49]*/ +/*[clinic end generated code: output=be23376e1a185231 input=933f8107993f23d0]*/ { int have_old = 0; long rc; @@ -160,7 +160,7 @@ unicodedata_UCD_decimal_impl(PyObject *self, int chr, unicodedata.UCD.digit self: self - chr: int(types={'str'}) + chr: int(accept={str}) default: object=NULL / @@ -173,7 +173,7 @@ ValueError is raised. static PyObject * unicodedata_UCD_digit_impl(PyObject *self, int chr, PyObject *default_value) -/*[clinic end generated code: output=96e18c950171fd2f input=733f093b399f5ab6]*/ +/*[clinic end generated code: output=96e18c950171fd2f input=e27d6e4565cd29f2]*/ { long rc; Py_UCS4 c = (Py_UCS4)chr; @@ -195,7 +195,7 @@ unicodedata_UCD_digit_impl(PyObject *self, int chr, PyObject *default_value) unicodedata.UCD.numeric self: self - chr: int(types={'str'}) + chr: int(accept={str}) default: object=NULL / @@ -209,7 +209,7 @@ ValueError is raised. static PyObject * unicodedata_UCD_numeric_impl(PyObject *self, int chr, PyObject *default_value) -/*[clinic end generated code: output=53ce281fe85b10c4 input=c5875fa7cc768fb2]*/ +/*[clinic end generated code: output=53ce281fe85b10c4 input=fdf5871a5542893c]*/ { int have_old = 0; double rc; @@ -247,7 +247,7 @@ unicodedata_UCD_numeric_impl(PyObject *self, int chr, unicodedata.UCD.category self: self - chr: int(types={'str'}) + chr: int(accept={str}) / Returns the general category assigned to the character chr as string. @@ -255,7 +255,7 @@ Returns the general category assigned to the character chr as string. static PyObject * unicodedata_UCD_category_impl(PyObject *self, int chr) -/*[clinic end generated code: output=8571539ee2e6783a input=f5edd6fd04bd455d]*/ +/*[clinic end generated code: output=8571539ee2e6783a input=27d6f3d85050bc06]*/ { int index; Py_UCS4 c = (Py_UCS4)chr; @@ -272,7 +272,7 @@ unicodedata_UCD_category_impl(PyObject *self, int chr) unicodedata.UCD.bidirectional self: self - chr: int(types={'str'}) + chr: int(accept={str}) / Returns the bidirectional class assigned to the character chr as string. @@ -282,7 +282,7 @@ If no such value is defined, an empty string is returned. static PyObject * unicodedata_UCD_bidirectional_impl(PyObject *self, int chr) -/*[clinic end generated code: output=d36310ce2039bb92 input=5ce2f877b35305b5]*/ +/*[clinic end generated code: output=d36310ce2039bb92 input=b3d8f42cebfcf475]*/ { int index; Py_UCS4 c = (Py_UCS4)chr; @@ -301,7 +301,7 @@ unicodedata_UCD_bidirectional_impl(PyObject *self, int chr) unicodedata.UCD.combining -> int self: self - chr: int(types={'str'}) + chr: int(accept={str}) / Returns the canonical combining class assigned to the character chr as integer. @@ -311,7 +311,7 @@ Returns 0 if no combining class is defined. static int unicodedata_UCD_combining_impl(PyObject *self, int chr) -/*[clinic end generated code: output=cad056d0cb6a5920 input=9125ea7d50b319e7]*/ +/*[clinic end generated code: output=cad056d0cb6a5920 input=9f2d6b2a95d0a22a]*/ { int index; Py_UCS4 c = (Py_UCS4)chr; @@ -328,7 +328,7 @@ unicodedata_UCD_combining_impl(PyObject *self, int chr) unicodedata.UCD.mirrored -> int self: self - chr: int(types={'str'}) + chr: int(accept={str}) / Returns the mirrored property assigned to the character chr as integer. @@ -339,7 +339,7 @@ character in bidirectional text, 0 otherwise. static int unicodedata_UCD_mirrored_impl(PyObject *self, int chr) -/*[clinic end generated code: output=2532dbf8121b50e6 input=4e51e8aaf8d7e23e]*/ +/*[clinic end generated code: output=2532dbf8121b50e6 input=5dd400d351ae6f3b]*/ { int index; Py_UCS4 c = (Py_UCS4)chr; @@ -358,7 +358,7 @@ unicodedata_UCD_mirrored_impl(PyObject *self, int chr) unicodedata.UCD.east_asian_width self: self - chr: int(types={'str'}) + chr: int(accept={str}) / Returns the east asian width assigned to the character chr as string. @@ -366,7 +366,7 @@ Returns the east asian width assigned to the character chr as string. static PyObject * unicodedata_UCD_east_asian_width_impl(PyObject *self, int chr) -/*[clinic end generated code: output=484e8537d9ee8197 input=f93c61f37276c8f0]*/ +/*[clinic end generated code: output=484e8537d9ee8197 input=c4854798aab026e0]*/ { int index; Py_UCS4 c = (Py_UCS4)chr; @@ -383,7 +383,7 @@ unicodedata_UCD_east_asian_width_impl(PyObject *self, int chr) unicodedata.UCD.decomposition self: self - chr: int(types={'str'}) + chr: int(accept={str}) / Returns the character decomposition mapping assigned to the character chr as string. @@ -393,7 +393,7 @@ An empty string is returned in case no such mapping is defined. static PyObject * unicodedata_UCD_decomposition_impl(PyObject *self, int chr) -/*[clinic end generated code: output=7d699f3ec7565d27 input=7f2c0ee66d75468f]*/ +/*[clinic end generated code: output=7d699f3ec7565d27 input=e4c12459ad68507b]*/ { char decomp[256]; int code, index, count; @@ -1180,7 +1180,7 @@ static const _PyUnicode_Name_CAPI hashAPI = unicodedata.UCD.name self: self - chr: int(types={'str'}) + chr: int(accept={str}) default: object=NULL / @@ -1192,7 +1192,7 @@ ValueError is raised. static PyObject * unicodedata_UCD_name_impl(PyObject *self, int chr, PyObject *default_value) -/*[clinic end generated code: output=6bbb37a326407707 input=51ee2f971c918113]*/ +/*[clinic end generated code: output=6bbb37a326407707 input=3e0367f534de56d9]*/ { char name[NAME_MAXLEN]; Py_UCS4 c = (Py_UCS4)chr; @@ -1215,7 +1215,7 @@ unicodedata_UCD_name_impl(PyObject *self, int chr, PyObject *default_value) unicodedata.UCD.lookup self: self - name: str(types={'str', 'robuffer'}, length=True) + name: str(accept={str, robuffer}, length=True) / Look up character by name. @@ -1227,7 +1227,7 @@ corresponding character. If not found, KeyError is raised. static PyObject * unicodedata_UCD_lookup_impl(PyObject *self, const char *name, Py_ssize_clean_t name_length) -/*[clinic end generated code: output=765cb8186788e6be input=f2bf29706135a590]*/ +/*[clinic end generated code: output=765cb8186788e6be input=2dfe682c2491447a]*/ { Py_UCS4 code; unsigned int index; -- cgit v1.2.1 From 2571248c875b79a134b3a6fd4010c2a2e6e2c7aa Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 5 May 2015 20:16:41 -0400 Subject: PEP 448: additional unpacking generalizations (closes #2292) Patch by Neil Girdhar. --- Modules/parsermodule.c | 265 ++++++++++++++++++++++++++----------------------- 1 file changed, 141 insertions(+), 124 deletions(-) (limited to 'Modules') diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 56ee445338..828f46b928 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -23,6 +23,11 @@ * that lint detects are gone, but there are still warnings with * Py_[X]DECREF() and Py_[X]INCREF() macros. The lint annotations * look like "NOTE(...)". + * + * To debug parser errors like + * "parser.ParserError: Expected node type 12, got 333." + * decode symbol numbers using the automatically-generated files + * Lib/symbol.h and Include/token.h. */ #include "Python.h" /* general Python API */ @@ -1087,30 +1092,56 @@ validate_terminal(node *terminal, int type, char *string) return (res); } +/* X (',' X) [','] */ +static int +validate_repeating_list_variable(node *tree, + int list_node_type, + int (*validate_child_func_inc)(node *, int *), + int *pos, + const char *const list_node_type_name) +{ + int nch = NCH(tree); + int res = (nch && validate_ntype(tree, list_node_type)); -/* X (',' X) [','] - */ + if (!res && !PyErr_Occurred()) { + /* Unconditionally raise. */ + (void) validate_numnodes(tree, 1, list_node_type_name); + } + else { + for ( ; res && *pos < nch; ) { + res = validate_child_func_inc(tree, pos); + if (!res || *pos >= nch) + break; + res = validate_comma(CHILD(tree, (*pos)++)); + } + } + return res; +} + +/* X (',' X) [','] */ static int -validate_repeating_list(node *tree, int ntype, int (*vfunc)(node *), - const char *const name) +validate_repeating_list(node *tree, + int list_node_type, + int (*validate_child_func)(node *), + const char *const list_node_type_name) { int nch = NCH(tree); - int res = (nch && validate_ntype(tree, ntype) - && vfunc(CHILD(tree, 0))); + int res = (nch && validate_ntype(tree, list_node_type)); + int pos = 0; - if (!res && !PyErr_Occurred()) - (void) validate_numnodes(tree, 1, name); + if (!res && !PyErr_Occurred()) { + /* Unconditionally raise. */ + (void) validate_numnodes(tree, 1, list_node_type_name); + } else { - if (is_even(nch)) - res = validate_comma(CHILD(tree, --nch)); - if (res && nch > 1) { - int pos = 1; - for ( ; res && pos < nch; pos += 2) - res = (validate_comma(CHILD(tree, pos)) - && vfunc(CHILD(tree, pos + 1))); + for ( ; res && pos < nch; ) { + res = validate_child_func(CHILD(tree, pos++)); + if (!res || pos >= nch) + break; + res = validate_comma(CHILD(tree, pos++)); } } - return (res); + return res; } @@ -2451,9 +2482,9 @@ validate_atom(node *tree) if (res && (nch == 3)) { if (TYPE(CHILD(tree, 1))==yield_expr) - res = validate_yield_expr(CHILD(tree, 1)); + res = validate_yield_expr(CHILD(tree, 1)); else - res = validate_testlist_comp(CHILD(tree, 1)); + res = validate_testlist_comp(CHILD(tree, 1)); } break; case LSQB: @@ -2493,39 +2524,28 @@ validate_atom(node *tree) /* testlist_comp: - * test ( comp_for | (',' test)* [','] ) + * (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] ) */ static int validate_testlist_comp(node *tree) { int nch = NCH(tree); - int ok = nch; + int ok; - if (nch == 0) + if (nch == 0) { err_string("missing child nodes of testlist_comp"); - else { - ok = validate_test_or_star_expr(CHILD(tree, 0)); + return 0; } - /* - * comp_for | (',' test)* [','] - */ - if (nch == 2 && TYPE(CHILD(tree, 1)) == comp_for) - ok = validate_comp_for(CHILD(tree, 1)); + if (nch == 2 && TYPE(CHILD(tree, 1)) == comp_for) { + ok = (validate_test(CHILD(tree, 0)) + && validate_comp_for(CHILD(tree, 1))); + } else { - /* (',' test)* [','] */ - int i = 1; - while (ok && nch - i >= 2) { - ok = (validate_comma(CHILD(tree, i)) - && validate_test_or_star_expr(CHILD(tree, i+1))); - i += 2; - } - if (ok && i == nch-1) - ok = validate_comma(CHILD(tree, i)); - else if (i != nch) { - ok = 0; - err_string("illegal trailing nodes for testlist_comp"); - } + ok = validate_repeating_list(tree, + testlist_comp, + validate_test_or_star_expr, + "testlist_comp"); } return ok; } @@ -2732,9 +2752,6 @@ validate_arglist(node *tree) } ok = 1; if (nch-i > 0) { - /* - * argument | '*' test [',' '**' test] | '**' test - */ int sym = TYPE(CHILD(tree, i)); if (sym == argument) { @@ -2745,30 +2762,7 @@ validate_arglist(node *tree) ok = 0; } } - else if (sym == STAR) { - ok = validate_star(CHILD(tree, i)); - if (ok && (nch-i == 2)) - ok = validate_test(CHILD(tree, i+1)); - else if (ok && (nch-i == 5)) - ok = (validate_test(CHILD(tree, i+1)) - && validate_comma(CHILD(tree, i+2)) - && validate_doublestar(CHILD(tree, i+3)) - && validate_test(CHILD(tree, i+4))); - else { - err_string("illegal use of '*' in arglist"); - ok = 0; - } - } - else if (sym == DOUBLESTAR) { - if (nch-i == 2) - ok = (validate_doublestar(CHILD(tree, i)) - && validate_test(CHILD(tree, i+1))); - else { - err_string("illegal use of '**' in arglist"); - ok = 0; - } - } - else { + else { err_string("illegal arglist specification"); ok = 0; } @@ -2778,9 +2772,10 @@ validate_arglist(node *tree) -/* argument: - * - * [test '='] test [comp_for] +/* argument: ( test [comp_for] | + * test '=' test | + * '**' expr | + * star_expr ) */ static int validate_argument(node *tree) @@ -2788,14 +2783,24 @@ validate_argument(node *tree) int nch = NCH(tree); int res = (validate_ntype(tree, argument) && ((nch == 1) || (nch == 2) || (nch == 3))); - if (res) - res = validate_test(CHILD(tree, 0)); - if (res && (nch == 2)) - res = validate_comp_for(CHILD(tree, 1)); - else if (res && (nch == 3)) - res = (validate_equal(CHILD(tree, 1)) - && validate_test(CHILD(tree, 2))); + if (res) { + if (TYPE(CHILD(tree, 0)) == DOUBLESTAR) { + res = validate_expr(CHILD(tree, 1)); + } + else if (nch == 1) { + res = validate_test_or_star_expr(CHILD(tree, 0)); + } + else if (nch == 2) { + res = (validate_test(CHILD(tree, 0)) + && validate_comp_for(CHILD(tree, 1))); + } + else if (res && (nch == 3)) { + res = (validate_test(CHILD(tree, 0)) + && validate_equal(CHILD(tree, 1)) + && validate_test(CHILD(tree, 2))); + } + } return (res); } @@ -2948,11 +2953,44 @@ validate_exprlist(node *tree) validate_expr_or_star_expr, "exprlist")); } +/* Incrementing validate functions returns nonzero iff success (like other + * validate functions, and advance *i by the length of the matched pattern. */ + +/* test ':' test */ +static int +validate_test_colon_test_inc(node *tree, int *i) +{ + return (validate_test(CHILD(tree, (*i)++)) + && validate_colon(CHILD(tree, (*i)++)) + && validate_test(CHILD(tree, (*i)++))); +} + +/* test ':' test | '**' expr */ +static int +validate_dict_element_inc(node *tree, int *i) +{ + int nch = NCH(tree); + int res = 0; + if (nch - *i >= 2) { + if (TYPE(CHILD(tree, *i+1)) == COLON) { + /* test ':' test */ + res = validate_test_colon_test_inc(tree, i); + } else { + /* '**' expr */ + res = (validate_doublestar(CHILD(tree, (*i)++)) + && validate_expr(CHILD(tree, (*i)++))); + } + } + return res; +} + /* * dictorsetmaker: * - * (test ':' test (comp_for | (',' test ':' test)* [','])) | - * (test (comp_for | (',' test)* [','])) + * ( ((test ':' test | '**' expr) + * (comp_for | (',' (test ':' test | '**' expr))* [','])) | + * ((test | '*' test) + * (comp_for | (',' (test | '*' test))* [','])) ) */ static int validate_dictorsetmaker(node *tree) @@ -2966,65 +3004,44 @@ validate_dictorsetmaker(node *tree) return 0; if (nch - i < 1) { + /* Unconditionally raise. */ (void) validate_numnodes(tree, 1, "dictorsetmaker"); return 0; } - res = validate_test(CHILD(tree, i++)); - if (!res) - return 0; - - if (nch - i >= 2 && TYPE(CHILD(tree, i)) == COLON) { + if (nch - i >= 2 + && ((TYPE(CHILD(tree, i+1)) == COLON) || + (TYPE(CHILD(tree, i)) == DOUBLESTAR))) { /* Dictionary display or dictionary comprehension. */ - res = (validate_colon(CHILD(tree, i++)) - && validate_test(CHILD(tree, i++))); - if (!res) - return 0; - - if (nch - i >= 1 && TYPE(CHILD(tree, i)) == comp_for) { + if (nch - i >= 4 && TYPE(CHILD(tree, i+3)) == comp_for) { /* Dictionary comprehension. */ - res = validate_comp_for(CHILD(tree, i++)); + res = (validate_test_colon_test_inc(tree, &i) + && validate_comp_for(CHILD(tree, i++))); if (!res) return 0; - } - else { + } else { /* Dictionary display. */ - while (nch - i >= 4) { - res = (validate_comma(CHILD(tree, i++)) - && validate_test(CHILD(tree, i++)) - && validate_colon(CHILD(tree, i++)) - && validate_test(CHILD(tree, i++))); - if (!res) - return 0; - } - if (nch - i == 1) { - res = validate_comma(CHILD(tree, i++)); - if (!res) - return 0; - } + return validate_repeating_list_variable( + tree, + dictorsetmaker, + validate_dict_element_inc, + &i, + "dictorsetmaker"); } - } - else { + } else { /* Set display or set comprehension. */ - if (nch - i >= 1 && TYPE(CHILD(tree, i)) == comp_for) { + if (nch - i >= 2 && TYPE(CHILD(tree, i + 1)) == comp_for) { /* Set comprehension. */ - res = validate_comp_for(CHILD(tree, i++)); + res = (validate_test(CHILD(tree, i++)) + && validate_comp_for(CHILD(tree, i++))); if (!res) return 0; - } - else { + } else { /* Set display. */ - while (nch - i >= 2) { - res = (validate_comma(CHILD(tree, i++)) - && validate_test(CHILD(tree, i++))); - if (!res) - return 0; - } - if (nch - i == 1) { - res = validate_comma(CHILD(tree, i++)); - if (!res) - return 0; - } + return validate_repeating_list(tree, + dictorsetmaker, + validate_test_or_star_expr, + "dictorsetmaker"); } } -- cgit v1.2.1 From 5b9538b353d5e18ebf42f34d5f3c5a0feead75f5 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 6 May 2015 09:53:07 +0300 Subject: Issue #24009: Got rid of using rare "y#" format unit in TextIOWrapper.tell(). Parsed value should be bytes, not general robuffer, this is required in other places. --- Modules/_io/textio.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index c45f70dc21..c962c0ba08 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -2262,7 +2262,6 @@ _io_TextIOWrapper_tell_impl(textio *self) Py_ssize_t skip_bytes, skip_back; PyObject *saved_state = NULL; char *input, *input_end; - char *dec_buffer; Py_ssize_t dec_buffer_len; int dec_flags; @@ -2327,14 +2326,24 @@ _io_TextIOWrapper_tell_impl(textio *self) goto fail; #define DECODER_GETSTATE() do { \ + PyObject *dec_buffer; \ PyObject *_state = PyObject_CallMethodObjArgs(self->decoder, \ _PyIO_str_getstate, NULL); \ if (_state == NULL) \ goto fail; \ - if (!PyArg_ParseTuple(_state, "y#i", &dec_buffer, &dec_buffer_len, &dec_flags)) { \ + if (!PyArg_ParseTuple(_state, "Oi", &dec_buffer, &dec_flags)) { \ Py_DECREF(_state); \ goto fail; \ } \ + if (!PyBytes_Check(dec_buffer)) { \ + PyErr_Format(PyExc_TypeError, \ + "decoder getstate() should have returned a bytes " \ + "object, not '%.200s'", \ + Py_TYPE(dec_buffer)->tp_name); \ + Py_DECREF(_state); \ + goto fail; \ + } \ + dec_buffer_len = PyBytes_GET_SIZE(dec_buffer); \ Py_DECREF(_state); \ } while (0) -- cgit v1.2.1 From d03331ce9b762b8cfb92683736b3a36c666a9a08 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 6 May 2015 14:00:04 +0300 Subject: Issue #23880: Tkinter's getint() and getdouble() now support Tcl_Obj. Tkinter's getdouble() now supports any numbers (in particular int). --- Modules/_tkinter.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 208ec47092..b048a489e9 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -1934,12 +1934,18 @@ _tkinter_tkapp_getint(TkappObject *self, PyObject *arg) return arg; } - if (!PyArg_Parse(arg, "s:getint", &s)) - return NULL; - CHECK_STRING_LENGTH(s); - value = Tcl_NewStringObj(s, -1); - if (value == NULL) - return Tkinter_Error((PyObject *)self); + if (PyTclObject_Check(arg)) { + value = ((PyTclObject*)arg)->value; + Tcl_IncrRefCount(value); + } + else { + if (!PyArg_Parse(arg, "s:getint", &s)) + return NULL; + CHECK_STRING_LENGTH(s); + value = Tcl_NewStringObj(s, -1); + if (value == NULL) + return Tkinter_Error((PyObject *)self); + } /* Don't use Tcl_GetInt() because it returns ambiguous result for value in ranges -2**32..-2**31-1 and 2**31..2**32-1 (on 32-bit platform). @@ -1977,12 +1983,24 @@ _tkinter_tkapp_getdouble(TkappObject *self, PyObject *arg) return arg; } + if (PyNumber_Check(arg)) { + return PyNumber_Float(arg); + } + + if (PyTclObject_Check(arg)) { + if (Tcl_GetDoubleFromObj(Tkapp_Interp(self), + ((PyTclObject*)arg)->value, + &v) == TCL_ERROR) + return Tkinter_Error((PyObject *)self); + return PyFloat_FromDouble(v); + } + if (!PyArg_Parse(arg, "s:getdouble", &s)) return NULL; CHECK_STRING_LENGTH(s); if (Tcl_GetDouble(Tkapp_Interp(self), s, &v) == TCL_ERROR) return Tkinter_Error((PyObject *)self); - return Py_BuildValue("d", v); + return PyFloat_FromDouble(v); } /*[clinic input] -- cgit v1.2.1 From ab2e03b120e8df45f53a840e692bfe99b15ecfaa Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 6 May 2015 14:19:22 +0300 Subject: Use specialized functions intead of Py_BuildValue() in _tkinter. --- Modules/_tkinter.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index b048a489e9..4da836e440 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -2092,7 +2092,7 @@ _tkinter_tkapp_exprlong_impl(TkappObject *self, const char *s) if (retval == TCL_ERROR) res = Tkinter_Error((PyObject *)self); else - res = Py_BuildValue("l", v); + res = PyLong_FromLong(v); LEAVE_OVERLAP_TCL return res; } @@ -2123,7 +2123,7 @@ _tkinter_tkapp_exprdouble_impl(TkappObject *self, const char *s) if (retval == TCL_ERROR) res = Tkinter_Error((PyObject *)self); else - res = Py_BuildValue("d", v); + res = PyFloat_FromDouble(v); LEAVE_OVERLAP_TCL return res; } @@ -2152,7 +2152,7 @@ _tkinter_tkapp_exprboolean_impl(TkappObject *self, const char *s) if (retval == TCL_ERROR) res = Tkinter_Error((PyObject *)self); else - res = Py_BuildValue("i", v); + res = PyLong_FromLong(v); LEAVE_OVERLAP_TCL return res; } @@ -2891,7 +2891,7 @@ _tkinter_tkapp_dooneevent_impl(TkappObject *self, int flags) ENTER_TCL rv = Tcl_DoOneEvent(flags); LEAVE_TCL - return Py_BuildValue("i", rv); + return PyLong_FromLong(rv); } /*[clinic input] -- cgit v1.2.1 From 09cff51b1bfff4967d1af9fabe3c855d8c65b823 Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Thu, 7 May 2015 23:30:09 -0700 Subject: Issue #24000: Improved Argument Clinic's mapping of converters to legacy "format units". Updated the documentation to match. --- Modules/_dbmmodule.c | 9 +++++---- Modules/_gdbmmodule.c | 4 ++-- Modules/arraymodule.c | 4 ++-- Modules/unicodedata.c | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index 191cdd6088..02899e4303 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -274,7 +274,7 @@ static PySequenceMethods dbm_as_sequence = { /*[clinic input] _dbm.dbm.get - key: str(accept={str, robuffer}, length=True) + key: str(accept={str, robuffer}, zeroes=True) default: object(c_default="NULL") = b'' / @@ -284,7 +284,8 @@ Return the value for key if present, otherwise default. static PyObject * _dbm_dbm_get_impl(dbmobject *self, const char *key, Py_ssize_clean_t key_length, PyObject *default_value) -/*[clinic end generated code: output=b44f95eba8203d93 input=3c7c1afd9c508457]*/ +/*[clinic end generated code: output=b44f95eba8203d93 input=a3a279957f85eb6d]*/ +/*[clinic end generated code: output=4f5c0e523eaf1251 input=9402c0af8582dc69]*/ { datum dbm_key, val; @@ -301,7 +302,7 @@ _dbm_dbm_get_impl(dbmobject *self, const char *key, /*[clinic input] _dbm.dbm.setdefault - key: str(accept={str, robuffer}, length=True) + key: str(accept={str, robuffer}, zeroes=True) default: object(c_default="NULL") = b'' / @@ -314,7 +315,7 @@ static PyObject * _dbm_dbm_setdefault_impl(dbmobject *self, const char *key, Py_ssize_clean_t key_length, PyObject *default_value) -/*[clinic end generated code: output=52545886cf272161 input=a66fcb7f18ee2f50]*/ +/*[clinic end generated code: output=52545886cf272161 input=bf40c48edaca01d6]*/ { datum dbm_key, val; Py_ssize_t tmp_size; diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c index cce5c7e008..f070a14007 100644 --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -383,7 +383,7 @@ _gdbm_gdbm_firstkey_impl(dbmobject *self) /*[clinic input] _gdbm.gdbm.nextkey - key: str(accept={str, robuffer}, length=True) + key: str(accept={str, robuffer}, zeroes=True) / Returns the key that follows key in the traversal. @@ -400,7 +400,7 @@ to create a list in memory that contains them all: static PyObject * _gdbm_gdbm_nextkey_impl(dbmobject *self, const char *key, Py_ssize_clean_t key_length) -/*[clinic end generated code: output=192ab892de6eb2f6 input=1eb2ff9b4b0e6ffd]*/ +/*[clinic end generated code: output=192ab892de6eb2f6 input=1f1606943614e36f]*/ { PyObject *v; datum dbm_key, nextkey; diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 45e27eb1b3..8d0462d5d0 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1673,7 +1673,7 @@ array_array_tostring_impl(arrayobject *self) /*[clinic input] array.array.fromunicode - ustr: Py_UNICODE(length=True) + ustr: Py_UNICODE(zeroes=True) / Extends this array with data from the unicode string ustr. @@ -1686,7 +1686,7 @@ some other type. static PyObject * array_array_fromunicode_impl(arrayobject *self, Py_UNICODE *ustr, Py_ssize_clean_t ustr_length) -/*[clinic end generated code: output=ebb72fc16975e06d input=56bcedb5ef70139f]*/ +/*[clinic end generated code: output=ebb72fc16975e06d input=150f00566ffbca6e]*/ { char typecode; diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index b4336f2d46..a6e2dbc34c 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -1215,7 +1215,7 @@ unicodedata_UCD_name_impl(PyObject *self, int chr, PyObject *default_value) unicodedata.UCD.lookup self: self - name: str(accept={str, robuffer}, length=True) + name: str(accept={str, robuffer}, zeroes=True) / Look up character by name. @@ -1227,7 +1227,7 @@ corresponding character. If not found, KeyError is raised. static PyObject * unicodedata_UCD_lookup_impl(PyObject *self, const char *name, Py_ssize_clean_t name_length) -/*[clinic end generated code: output=765cb8186788e6be input=2dfe682c2491447a]*/ +/*[clinic end generated code: output=765cb8186788e6be input=a557be0f8607a0d6]*/ { Py_UCS4 code; unsigned int index; -- cgit v1.2.1 From 982a2135170a15d9a7b3c1357333beb4454658e0 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 11 May 2015 10:19:03 -0700 Subject: Issue #24155: Optimize heapify for better cache utililzation. --- Modules/_heapqmodule.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 4372ad497d..380489ec48 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -250,6 +250,71 @@ PyDoc_STRVAR(heappushpop_doc, from the heap. The combined action runs more efficiently than\n\ heappush() followed by a separate call to heappop()."); +static Py_ssize_t +keep_top_bit(Py_ssize_t n) +{ + int i = 0; + + while (n > 1) { + i += 1; + n >>= 1; + } + return n << i; +} + +/* Cache friendly version of heapify() + ----------------------------------- + + Build-up a heap in O(n) time by performing siftup() operations + on nodes whose children are already heaps. + + The simplest way is to sift the nodes in reverse order from + n//2-1 to 0 inclusive. The downside is that children may be + out of cache by the time their parent is reached. + + A better way is to not wait for the children to go out of cache. + Once a sibling pair of child nodes have been sifted, immediately + sift their parent node (while the children are still in cache). + + Both ways build child heaps before their parents, so both ways + do the exact same number of comparisons and produce exactly + the same heap. The only difference is that the traversal + order is optimized for cache efficiency. +*/ + +static PyObject * +cache_friendly_heapify(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) +{ + Py_ssize_t i, j, m, mhalf, leftmost; + + m = PyList_GET_SIZE(heap) >> 1; /* index of first childless node */ + leftmost = keep_top_bit(m + 1) - 1; /* leftmost node in row of m */ + mhalf = m >> 1; /* parent of first childless node */ + + for (i = leftmost - 1 ; i >= mhalf ; i--) { + j = i; + while (1) { + if (siftup_func((PyListObject *)heap, j)) + return NULL; + if (!(j & 1)) + break; + j >>= 1; + } + } + + for (i = m - 1 ; i >= leftmost ; i--) { + j = i; + while (1) { + if (siftup_func((PyListObject *)heap, j)) + return NULL; + if (!(j & 1)) + break; + j >>= 1; + } + } + Py_RETURN_NONE; +} + static PyObject * heapify_internal(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) { @@ -260,7 +325,14 @@ heapify_internal(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) return NULL; } + /* For heaps likely to be bigger than L1 cache, we use the cache + friendly heapify function. For smaller heaps that fit entirely + in cache, we prefer the simpler algorithm with less branching. + */ n = PyList_GET_SIZE(heap); + if (n > 10000) + return cache_friendly_heapify(heap, siftup_func); + /* Transform bottom-up. The largest index there's any point to looking at is the largest with a child index in-range, so must have 2*i + 1 < n, or i < (n-1)/2. If n is even = 2*j, this is -- cgit v1.2.1 From 844b3310c7ff676a87d9d7b0122d8a7beeacee88 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 11 May 2015 10:32:57 -0700 Subject: Minor stylistic clean-up. --- Modules/_heapqmodule.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 380489ec48..1ed6c2b115 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -107,10 +107,10 @@ heappush(PyObject *self, PyObject *args) return NULL; } - if (PyList_Append(heap, item) == -1) + if (PyList_Append(heap, item)) return NULL; - if (siftdown((PyListObject *)heap, 0, PyList_GET_SIZE(heap)-1) == -1) + if (siftdown((PyListObject *)heap, 0, PyList_GET_SIZE(heap)-1)) return NULL; Py_RETURN_NONE; } @@ -148,7 +148,7 @@ heappop_internal(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) return lastelt; returnitem = PyList_GET_ITEM(heap, 0); PyList_SET_ITEM(heap, 0, lastelt); - if (siftup_func((PyListObject *)heap, 0) == -1) { + if (siftup_func((PyListObject *)heap, 0)) { Py_DECREF(returnitem); return NULL; } @@ -185,7 +185,7 @@ heapreplace_internal(PyObject *args, int siftup_func(PyListObject *, Py_ssize_t) returnitem = PyList_GET_ITEM(heap, 0); Py_INCREF(item); PyList_SET_ITEM(heap, 0, item); - if (siftup_func((PyListObject *)heap, 0) == -1) { + if (siftup_func((PyListObject *)heap, 0)) { Py_DECREF(returnitem); return NULL; } @@ -238,7 +238,7 @@ heappushpop(PyObject *self, PyObject *args) returnitem = PyList_GET_ITEM(heap, 0); Py_INCREF(item); PyList_SET_ITEM(heap, 0, item); - if (siftup((PyListObject *)heap, 0) == -1) { + if (siftup((PyListObject *)heap, 0)) { Py_DECREF(returnitem); return NULL; } @@ -341,7 +341,7 @@ heapify_internal(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) and that's again n//2-1. */ for (i=n/2-1 ; i>=0 ; i--) - if(siftup_func((PyListObject *)heap, i) == -1) + if(siftup_func((PyListObject *)heap, i)) return NULL; Py_RETURN_NONE; } -- cgit v1.2.1 From 3024d9c66a9b98345d8f88478ca5483f1781bfc7 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 11 May 2015 19:25:32 -0700 Subject: Minor code cleanups. --- Modules/_heapqmodule.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 1ed6c2b115..5e724a1ef1 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -138,7 +138,7 @@ heappop_internal(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) lastelt = PyList_GET_ITEM(heap, n-1) ; Py_INCREF(lastelt); - if (PyList_SetSlice(heap, n-1, n, NULL) < 0) { + if (PyList_SetSlice(heap, n-1, n, NULL)) { Py_DECREF(lastelt); return NULL; } @@ -177,7 +177,7 @@ heapreplace_internal(PyObject *args, int siftup_func(PyListObject *, Py_ssize_t) return NULL; } - if (PyList_GET_SIZE(heap) < 1) { + if (PyList_GET_SIZE(heap) == 0) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } @@ -222,7 +222,7 @@ heappushpop(PyObject *self, PyObject *args) return NULL; } - if (PyList_GET_SIZE(heap) < 1) { + if (PyList_GET_SIZE(heap) == 0) { Py_INCREF(item); return item; } @@ -340,8 +340,8 @@ heapify_internal(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) n is odd = 2*j+1, this is (2*j+1-1)/2 = j so j-1 is the largest, and that's again n//2-1. */ - for (i=n/2-1 ; i>=0 ; i--) - if(siftup_func((PyListObject *)heap, i)) + for (i = n/2 - 1 ; i >= 0 ; i--) + if (siftup_func((PyListObject *)heap, i)) return NULL; Py_RETURN_NONE; } -- cgit v1.2.1 From ea639832c36905ecb07caba111f614c4bbf9bdd6 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Mon, 11 May 2015 22:57:16 -0400 Subject: PEP 0492 -- Coroutines with async and await syntax. Issue #24017. --- Modules/_testcapimodule.c | 97 ++++++++++++++++++++++++++++++++++++++ Modules/parsermodule.c | 115 +++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 200 insertions(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index d77d1dbcd9..77167b2c1e 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3944,6 +3944,98 @@ static PyTypeObject matmulType = { }; +typedef struct { + PyObject_HEAD + PyObject *ao_iterator; +} awaitObject; + + +static PyObject * +awaitObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + PyObject *v; + awaitObject *ao; + + if (!PyArg_UnpackTuple(args, "awaitObject", 1, 1, &v)) + return NULL; + + ao = (awaitObject *)type->tp_alloc(type, 0); + if (ao == NULL) { + return NULL; + } + + Py_INCREF(v); + ao->ao_iterator = v; + + return (PyObject *)ao; +} + + +static void +awaitObject_dealloc(awaitObject *ao) +{ + Py_CLEAR(ao->ao_iterator); + Py_TYPE(ao)->tp_free(ao); +} + + +static PyObject * +awaitObject_await(awaitObject *ao) +{ + Py_INCREF(ao->ao_iterator); + return ao->ao_iterator; +} + +static PyAsyncMethods awaitType_as_async = { + (getawaitablefunc)awaitObject_await, /* am_await */ + 0, /* am_aiter */ + 0 /* am_anext */ +}; + + +static PyTypeObject awaitType = { + PyVarObject_HEAD_INIT(NULL, 0) + "awaitType", + sizeof(awaitObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)awaitObject_dealloc, /* destructor tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + &awaitType_as_async, /* tp_as_async */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + 0, /* tp_flags */ + "C level type with tp_as_async", + 0, /* traverseproc tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + awaitObject_new, /* tp_new */ + PyObject_Del, /* tp_free */ +}; + + static struct PyModuleDef _testcapimodule = { PyModuleDef_HEAD_INIT, "_testcapi", @@ -3977,6 +4069,11 @@ PyInit__testcapi(void) Py_INCREF(&matmulType); PyModule_AddObject(m, "matmulType", (PyObject *)&matmulType); + if (PyType_Ready(&awaitType) < 0) + return NULL; + Py_INCREF(&awaitType); + PyModule_AddObject(m, "awaitType", (PyObject *)&awaitType); + PyModule_AddObject(m, "CHAR_MAX", PyLong_FromLong(CHAR_MAX)); PyModule_AddObject(m, "CHAR_MIN", PyLong_FromLong(CHAR_MIN)); PyModule_AddObject(m, "UCHAR_MAX", PyLong_FromLong(UCHAR_MAX)); diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 828f46b928..876e57d9dd 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -1041,6 +1041,8 @@ VALIDATER(testlist_comp); VALIDATER(yield_expr); VALIDATER(or_test); VALIDATER(test_nocond); VALIDATER(lambdef_nocond); VALIDATER(yield_arg); +VALIDATER(async_funcdef); VALIDATER(async_stmt); +VALIDATER(atom_expr); #undef VALIDATER @@ -1608,6 +1610,7 @@ validate_compound_stmt(node *tree) || (ntype == try_stmt) || (ntype == with_stmt) || (ntype == funcdef) + || (ntype == async_stmt) || (ntype == classdef) || (ntype == decorated)) res = validate_node(tree); @@ -2440,27 +2443,60 @@ validate_factor(node *tree) /* power: * - * power: atom trailer* ('**' factor)* + * power: atom_expr trailer* ['**' factor] */ static int validate_power(node *tree) { - int pos = 1; int nch = NCH(tree); int res = (validate_ntype(tree, power) && (nch >= 1) - && validate_atom(CHILD(tree, 0))); + && validate_atom_expr(CHILD(tree, 0))); - while (res && (pos < nch) && (TYPE(CHILD(tree, pos)) == trailer)) - res = validate_trailer(CHILD(tree, pos++)); - if (res && (pos < nch)) { - if (!is_even(nch - pos)) { + if (nch > 1) { + if (nch != 3) { err_string("illegal number of nodes for 'power'"); return (0); } - for ( ; res && (pos < (nch - 1)); pos += 2) - res = (validate_doublestar(CHILD(tree, pos)) - && validate_factor(CHILD(tree, pos + 1))); + res = (validate_doublestar(CHILD(tree, 1)) + && validate_factor(CHILD(tree, 2))); } + + return (res); +} + + +/* atom_expr: + * + * atom_expr: [AWAIT] atom trailer* + */ +static int +validate_atom_expr(node *tree) +{ + int start = 0; + int nch = NCH(tree); + int res; + int pos; + + res = validate_ntype(tree, atom_expr) && (nch >= 1); + if (!res) { + return (res); + } + + if (TYPE(CHILD(tree, 0)) == AWAIT) { + start = 1; + if (nch < 2) { + err_string("illegal number of nodes for 'atom_expr'"); + return (0); + } + } + + res = validate_atom(CHILD(tree, start)); + if (res) { + pos = start + 1; + while (res && (pos < nch) && (TYPE(CHILD(tree, pos)) == trailer)) + res = validate_trailer(CHILD(tree, pos++)); + } + return (res); } @@ -2482,9 +2518,9 @@ validate_atom(node *tree) if (res && (nch == 3)) { if (TYPE(CHILD(tree, 1))==yield_expr) - res = validate_yield_expr(CHILD(tree, 1)); + res = validate_yield_expr(CHILD(tree, 1)); else - res = validate_testlist_comp(CHILD(tree, 1)); + res = validate_testlist_comp(CHILD(tree, 1)); } break; case LSQB: @@ -2658,6 +2694,55 @@ validate_funcdef(node *tree) return res; } +/* async_funcdef: ASYNC funcdef */ + +static int +validate_async_funcdef(node *tree) +{ + int nch = NCH(tree); + int res = validate_ntype(tree, async_funcdef); + if (res) { + if (nch == 2) { + res = (validate_ntype(CHILD(tree, 0), ASYNC) + && validate_funcdef(CHILD(tree, 1))); + } + else { + res = 0; + err_string("illegal number of children for async_funcdef"); + } + } + return res; +} + + +/* async_stmt: ASYNC (funcdef | with_stmt | for_stmt) */ + +static int +validate_async_stmt(node *tree) +{ + int nch = NCH(tree); + int res = (validate_ntype(tree, async_stmt) + && validate_ntype(CHILD(tree, 0), ASYNC)); + + if (nch != 2) { + res = 0; + err_string("illegal number of children for async_stmt"); + } else { + if (TYPE(CHILD(tree, 1)) == funcdef) { + res = validate_funcdef(CHILD(tree, 1)); + } + else if (TYPE(CHILD(tree, 1)) == with_stmt) { + res = validate_with_stmt(CHILD(tree, 1)); + } + else if (TYPE(CHILD(tree, 1)) == for_stmt) { + res = validate_for(CHILD(tree, 1)); + } + } + + return res; +} + + /* decorated * decorators (classdef | funcdef) @@ -3085,6 +3170,12 @@ validate_node(node *tree) /* * Definition nodes. */ + case async_funcdef: + res = validate_async_funcdef(tree); + break; + case async_stmt: + res = validate_async_stmt(tree); + break; case funcdef: res = validate_funcdef(tree); break; -- cgit v1.2.1 From db14c22e694d58699e0d23e40ec5285ebb53c79e Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 12 May 2015 13:15:57 +0300 Subject: Issue #20173: Converted the _codecs module to Argument Clinic. --- Modules/_codecsmodule.c | 1244 +++++++++++++++++----------------- Modules/clinic/_codecsmodule.c.h | 1370 +++++++++++++++++++++++++++++++++++++- 2 files changed, 1998 insertions(+), 616 deletions(-) (limited to 'Modules') diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index d8b4bbda28..0e90f3c9c6 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -51,16 +51,21 @@ module _codecs /* --- Registry ----------------------------------------------------------- */ -PyDoc_STRVAR(register__doc__, -"register(search_function)\n\ -\n\ -Register a codec search function. Search functions are expected to take\n\ -one argument, the encoding name in all lower case letters, and either\n\ -return None, or a tuple of functions (encoder, decoder, stream_reader,\n\ -stream_writer) (or a CodecInfo object)."); +/*[clinic input] +_codecs.register + search_function: object + / -static -PyObject *codec_register(PyObject *self, PyObject *search_function) +Register a codec search function. + +Search functions are expected to take one argument, the encoding name in +all lower case letters, and either return None, or a tuple of functions +(encoder, decoder, stream_reader, stream_writer) (or a CodecInfo object). +[clinic start generated code]*/ + +static PyObject * +_codecs_register(PyModuleDef *module, PyObject *search_function) +/*[clinic end generated code: output=d17608b6ad380eb8 input=369578467955cae4]*/ { if (PyCodec_Register(search_function)) return NULL; @@ -68,79 +73,73 @@ PyObject *codec_register(PyObject *self, PyObject *search_function) Py_RETURN_NONE; } -PyDoc_STRVAR(lookup__doc__, -"lookup(encoding) -> CodecInfo\n\ -\n\ -Looks up a codec tuple in the Python codec registry and returns\n\ -a CodecInfo object."); - -static -PyObject *codec_lookup(PyObject *self, PyObject *args) -{ - char *encoding; +/*[clinic input] +_codecs.lookup + encoding: str + / - if (!PyArg_ParseTuple(args, "s:lookup", &encoding)) - return NULL; +Looks up a codec tuple in the Python codec registry and returns a CodecInfo object. +[clinic start generated code]*/ +static PyObject * +_codecs_lookup_impl(PyModuleDef *module, const char *encoding) +/*[clinic end generated code: output=798e41aff0c04ef6 input=3c572c0db3febe9c]*/ +{ return _PyCodec_Lookup(encoding); } -PyDoc_STRVAR(encode__doc__, -"encode(obj, [encoding[,errors]]) -> object\n\ -\n\ -Encodes obj using the codec registered for encoding. encoding defaults\n\ -to the default encoding. errors may be given to set a different error\n\ -handling scheme. Default is 'strict' meaning that encoding errors raise\n\ -a ValueError. Other possible values are 'ignore', 'replace' and\n\ -'xmlcharrefreplace' as well as any other name registered with\n\ -codecs.register_error that can handle ValueErrors."); +/*[clinic input] +_codecs.encode + obj: object + encoding: str(c_default="NULL") = sys.getdefaultencoding() + errors: str(c_default="NULL") = "strict" + +Encodes obj using the codec registered for encoding. + +encoding defaults to the default encoding. errors may be given to set a +different error handling scheme. Default is 'strict' meaning that encoding +errors raise a ValueError. Other possible values are 'ignore', 'replace' +and 'backslashreplace' as well as any other name registered with +codecs.register_error that can handle ValueErrors. +[clinic start generated code]*/ static PyObject * -codec_encode(PyObject *self, PyObject *args, PyObject *kwargs) +_codecs_encode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, + const char *errors) +/*[clinic end generated code: output=5c073f62249c8d7c input=2440d769df020a0e]*/ { - static char *kwlist[] = {"obj", "encoding", "errors", NULL}; - const char *encoding = NULL; - const char *errors = NULL; - PyObject *v; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:encode", kwlist, - &v, &encoding, &errors)) - return NULL; - if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); /* Encode via the codec registry */ - return PyCodec_Encode(v, encoding, errors); + return PyCodec_Encode(obj, encoding, errors); } -PyDoc_STRVAR(decode__doc__, -"decode(obj, [encoding[,errors]]) -> object\n\ -\n\ -Decodes obj using the codec registered for encoding. encoding defaults\n\ -to the default encoding. errors may be given to set a different error\n\ -handling scheme. Default is 'strict' meaning that encoding errors raise\n\ -a ValueError. Other possible values are 'ignore' and 'replace'\n\ -as well as any other name registered with codecs.register_error that is\n\ -able to handle ValueErrors."); +/*[clinic input] +_codecs.decode + obj: object + encoding: str(c_default="NULL") = sys.getdefaultencoding() + errors: str(c_default="NULL") = "strict" + +Decodes obj using the codec registered for encoding. + +encoding defaults to the default encoding. errors may be given to set a +different error handling scheme. Default is 'strict' meaning that encoding +errors raise a ValueError. Other possible values are 'ignore', 'replace' +and 'backslashreplace' as well as any other name registered with +codecs.register_error that can handle ValueErrors. +[clinic start generated code]*/ static PyObject * -codec_decode(PyObject *self, PyObject *args, PyObject *kwargs) +_codecs_decode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, + const char *errors) +/*[clinic end generated code: output=c81cbf6189a7f878 input=a351e5f5baad1544]*/ { - static char *kwlist[] = {"obj", "encoding", "errors", NULL}; - const char *encoding = NULL; - const char *errors = NULL; - PyObject *v; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:decode", kwlist, - &v, &encoding, &errors)) - return NULL; - if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); /* Decode via the codec registry */ - return PyCodec_Decode(v, encoding, errors); + return PyCodec_Decode(obj, encoding, errors); } /* --- Helpers ------------------------------------------------------------ */ @@ -165,51 +164,49 @@ _codecs__forget_codec_impl(PyModuleDef *module, const char *encoding) } static -PyObject *codec_tuple(PyObject *unicode, +PyObject *codec_tuple(PyObject *decoded, Py_ssize_t len) { - PyObject *v; - if (unicode == NULL) + if (decoded == NULL) return NULL; - v = Py_BuildValue("On", unicode, len); - Py_DECREF(unicode); - return v; + return Py_BuildValue("Nn", decoded, len); } /* --- String codecs ------------------------------------------------------ */ +/*[clinic input] +_codecs.escape_decode + data: Py_buffer(accept={str, buffer}) + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -escape_decode(PyObject *self, - PyObject *args) +_codecs_escape_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors) +/*[clinic end generated code: output=648fa3e78d03e658 input=0018edfd99db714d]*/ { - Py_buffer pbuf; - const char *errors = NULL; - PyObject *result; - - if (!PyArg_ParseTuple(args, "s*|z:escape_decode", - &pbuf, &errors)) - return NULL; - result = codec_tuple( - PyBytes_DecodeEscape(pbuf.buf, pbuf.len, errors, 0, NULL), - pbuf.len); - PyBuffer_Release(&pbuf); - return result; + PyObject *decoded = PyBytes_DecodeEscape(data->buf, data->len, + errors, 0, NULL); + return codec_tuple(decoded, data->len); } +/*[clinic input] +_codecs.escape_encode + data: object(subclass_of='&PyBytes_Type') + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -escape_encode(PyObject *self, - PyObject *args) +_codecs_escape_encode_impl(PyModuleDef *module, PyObject *data, + const char *errors) +/*[clinic end generated code: output=fcd6f34fe4111c50 input=da9ded00992f32f2]*/ { - PyObject *str; Py_ssize_t size; Py_ssize_t newsize; - const char *errors = NULL; PyObject *v; - if (!PyArg_ParseTuple(args, "O!|z:escape_encode", - &PyBytes_Type, &str, &errors)) - return NULL; - - size = PyBytes_GET_SIZE(str); + size = PyBytes_GET_SIZE(data); if (size > PY_SSIZE_T_MAX / 4) { PyErr_SetString(PyExc_OverflowError, "string is too large to encode"); @@ -229,7 +226,7 @@ escape_encode(PyObject *self, for (i = 0; i < size; i++) { /* There's at least enough room for a hex escape */ assert(newsize - (p - PyBytes_AS_STRING(v)) >= 4); - c = PyBytes_AS_STRING(str)[i]; + c = PyBytes_AS_STRING(data)[i]; if (c == '\'' || c == '\\') *p++ = '\\', *p++ = c; else if (c == '\t') @@ -257,18 +254,18 @@ escape_encode(PyObject *self, } /* --- Decoder ------------------------------------------------------------ */ +/*[clinic input] +_codecs.unicode_internal_decode + obj: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ static PyObject * -unicode_internal_decode(PyObject *self, - PyObject *args) +_codecs_unicode_internal_decode_impl(PyModuleDef *module, PyObject *obj, + const char *errors) +/*[clinic end generated code: output=9fe47c2cd8807d92 input=8d57930aeda170c6]*/ { - PyObject *obj; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:unicode_internal_decode", - &obj, &errors)) - return NULL; - if (PyUnicode_Check(obj)) { if (PyUnicode_READY(obj) < 0) return NULL; @@ -289,120 +286,109 @@ unicode_internal_decode(PyObject *self, } } +/*[clinic input] +_codecs.utf_7_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + static PyObject * -utf_7_decode(PyObject *self, - PyObject *args) +_codecs_utf_7_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final) +/*[clinic end generated code: output=ca945e907e72e827 input=bc4d6247ecdb01e6]*/ { - Py_buffer pbuf; - const char *errors = NULL; - int final = 0; - Py_ssize_t consumed; - PyObject *decoded = NULL; - - if (!PyArg_ParseTuple(args, "y*|zi:utf_7_decode", - &pbuf, &errors, &final)) - return NULL; - consumed = pbuf.len; - - decoded = PyUnicode_DecodeUTF7Stateful(pbuf.buf, pbuf.len, errors, - final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (decoded == NULL) - return NULL; + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeUTF7Stateful(data->buf, data->len, + errors, + final ? NULL : &consumed); return codec_tuple(decoded, consumed); } +/*[clinic input] +_codecs.utf_8_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + static PyObject * -utf_8_decode(PyObject *self, - PyObject *args) +_codecs_utf_8_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final) +/*[clinic end generated code: output=7309f9ff4ef5c9b6 input=39161d71e7422ee2]*/ { - Py_buffer pbuf; - const char *errors = NULL; - int final = 0; - Py_ssize_t consumed; - PyObject *decoded = NULL; - - if (!PyArg_ParseTuple(args, "y*|zi:utf_8_decode", - &pbuf, &errors, &final)) - return NULL; - consumed = pbuf.len; - - decoded = PyUnicode_DecodeUTF8Stateful(pbuf.buf, pbuf.len, errors, - final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (decoded == NULL) - return NULL; + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeUTF8Stateful(data->buf, data->len, + errors, + final ? NULL : &consumed); return codec_tuple(decoded, consumed); } +/*[clinic input] +_codecs.utf_16_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + static PyObject * -utf_16_decode(PyObject *self, - PyObject *args) +_codecs_utf_16_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final) +/*[clinic end generated code: output=8d2fa0507d9bef2c input=f3cf01d1461007ce]*/ { - Py_buffer pbuf; - const char *errors = NULL; int byteorder = 0; - int final = 0; - Py_ssize_t consumed; - PyObject *decoded; - - if (!PyArg_ParseTuple(args, "y*|zi:utf_16_decode", - &pbuf, &errors, &final)) - return NULL; - consumed = pbuf.len; /* This is overwritten unless final is true. */ - decoded = PyUnicode_DecodeUTF16Stateful(pbuf.buf, pbuf.len, errors, - &byteorder, final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (decoded == NULL) - return NULL; + /* This is overwritten unless final is true. */ + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeUTF16Stateful(data->buf, data->len, + errors, &byteorder, + final ? NULL : &consumed); return codec_tuple(decoded, consumed); } +/*[clinic input] +_codecs.utf_16_le_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + static PyObject * -utf_16_le_decode(PyObject *self, - PyObject *args) +_codecs_utf_16_le_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final) +/*[clinic end generated code: output=4fd621515ef4ce18 input=a77e3bf97335d94e]*/ { - Py_buffer pbuf; - const char *errors = NULL; int byteorder = -1; - int final = 0; - Py_ssize_t consumed; - PyObject *decoded = NULL; - - if (!PyArg_ParseTuple(args, "y*|zi:utf_16_le_decode", - &pbuf, &errors, &final)) - return NULL; - - consumed = pbuf.len; /* This is overwritten unless final is true. */ - decoded = PyUnicode_DecodeUTF16Stateful(pbuf.buf, pbuf.len, errors, - &byteorder, final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (decoded == NULL) - return NULL; + /* This is overwritten unless final is true. */ + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeUTF16Stateful(data->buf, data->len, + errors, &byteorder, + final ? NULL : &consumed); return codec_tuple(decoded, consumed); } +/*[clinic input] +_codecs.utf_16_be_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + static PyObject * -utf_16_be_decode(PyObject *self, - PyObject *args) +_codecs_utf_16_be_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final) +/*[clinic end generated code: output=792f4eacb3e1fa05 input=606f69fae91b5563]*/ { - Py_buffer pbuf; - const char *errors = NULL; int byteorder = 1; - int final = 0; - Py_ssize_t consumed; - PyObject *decoded = NULL; - - if (!PyArg_ParseTuple(args, "y*|zi:utf_16_be_decode", - &pbuf, &errors, &final)) - return NULL; - - consumed = pbuf.len; /* This is overwritten unless final is true. */ - decoded = PyUnicode_DecodeUTF16Stateful(pbuf.buf, pbuf.len, errors, - &byteorder, final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (decoded == NULL) - return NULL; + /* This is overwritten unless final is true. */ + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeUTF16Stateful(data->buf, data->len, + errors, &byteorder, + final ? NULL : &consumed); return codec_tuple(decoded, consumed); } @@ -413,98 +399,94 @@ utf_16_be_decode(PyObject *self, being the value in effect at the end of data. */ +/*[clinic input] +_codecs.utf_16_ex_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + byteorder: int = 0 + final: int(c_default="0") = False + / +[clinic start generated code]*/ static PyObject * -utf_16_ex_decode(PyObject *self, - PyObject *args) +_codecs_utf_16_ex_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int byteorder, int final) +/*[clinic end generated code: output=f136a186dc2defa0 input=f6e7f697658c013e]*/ { - Py_buffer pbuf; - const char *errors = NULL; - int byteorder = 0; - PyObject *unicode, *tuple; - int final = 0; - Py_ssize_t consumed; + /* This is overwritten unless final is true. */ + Py_ssize_t consumed = data->len; - if (!PyArg_ParseTuple(args, "y*|zii:utf_16_ex_decode", - &pbuf, &errors, &byteorder, &final)) - return NULL; - consumed = pbuf.len; /* This is overwritten unless final is true. */ - unicode = PyUnicode_DecodeUTF16Stateful(pbuf.buf, pbuf.len, errors, - &byteorder, final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (unicode == NULL) + PyObject *decoded = PyUnicode_DecodeUTF16Stateful(data->buf, data->len, + errors, &byteorder, + final ? NULL : &consumed); + if (decoded == NULL) return NULL; - tuple = Py_BuildValue("Oni", unicode, consumed, byteorder); - Py_DECREF(unicode); - return tuple; + return Py_BuildValue("Nni", decoded, consumed, byteorder); } +/*[clinic input] +_codecs.utf_32_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + static PyObject * -utf_32_decode(PyObject *self, - PyObject *args) +_codecs_utf_32_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final) +/*[clinic end generated code: output=b7635e55857e8efb input=86d4f41c6c2e763d]*/ { - Py_buffer pbuf; - const char *errors = NULL; int byteorder = 0; - int final = 0; - Py_ssize_t consumed; - PyObject *decoded; - - if (!PyArg_ParseTuple(args, "y*|zi:utf_32_decode", - &pbuf, &errors, &final)) - return NULL; - consumed = pbuf.len; /* This is overwritten unless final is true. */ - decoded = PyUnicode_DecodeUTF32Stateful(pbuf.buf, pbuf.len, errors, - &byteorder, final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (decoded == NULL) - return NULL; + /* This is overwritten unless final is true. */ + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeUTF32Stateful(data->buf, data->len, + errors, &byteorder, + final ? NULL : &consumed); return codec_tuple(decoded, consumed); } +/*[clinic input] +_codecs.utf_32_le_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + static PyObject * -utf_32_le_decode(PyObject *self, - PyObject *args) +_codecs_utf_32_le_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final) +/*[clinic end generated code: output=a79d1787d8ddf988 input=d18b650772d188ba]*/ { - Py_buffer pbuf; - const char *errors = NULL; int byteorder = -1; - int final = 0; - Py_ssize_t consumed; - PyObject *decoded; - - if (!PyArg_ParseTuple(args, "y*|zi:utf_32_le_decode", - &pbuf, &errors, &final)) - return NULL; - consumed = pbuf.len; /* This is overwritten unless final is true. */ - decoded = PyUnicode_DecodeUTF32Stateful(pbuf.buf, pbuf.len, errors, - &byteorder, final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (decoded == NULL) - return NULL; + /* This is overwritten unless final is true. */ + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeUTF32Stateful(data->buf, data->len, + errors, &byteorder, + final ? NULL : &consumed); return codec_tuple(decoded, consumed); } +/*[clinic input] +_codecs.utf_32_be_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + static PyObject * -utf_32_be_decode(PyObject *self, - PyObject *args) +_codecs_utf_32_be_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final) +/*[clinic end generated code: output=a8356b0f36779981 input=19c271b5d34926d8]*/ { - Py_buffer pbuf; - const char *errors = NULL; int byteorder = 1; - int final = 0; - Py_ssize_t consumed; - PyObject *decoded; - - if (!PyArg_ParseTuple(args, "y*|zi:utf_32_be_decode", - &pbuf, &errors, &final)) - return NULL; - consumed = pbuf.len; /* This is overwritten unless final is true. */ - decoded = PyUnicode_DecodeUTF32Stateful(pbuf.buf, pbuf.len, errors, - &byteorder, final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (decoded == NULL) - return NULL; + /* This is overwritten unless final is true. */ + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeUTF32Stateful(data->buf, data->len, + errors, &byteorder, + final ? NULL : &consumed); return codec_tuple(decoded, consumed); } @@ -515,167 +497,157 @@ utf_32_be_decode(PyObject *self, being the value in effect at the end of data. */ +/*[clinic input] +_codecs.utf_32_ex_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + byteorder: int = 0 + final: int(c_default="0") = False + / +[clinic start generated code]*/ static PyObject * -utf_32_ex_decode(PyObject *self, - PyObject *args) +_codecs_utf_32_ex_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int byteorder, int final) +/*[clinic end generated code: output=ab8c70977c1992f5 input=4af3e6ccfe34a076]*/ { - Py_buffer pbuf; - const char *errors = NULL; - int byteorder = 0; - PyObject *unicode, *tuple; - int final = 0; - Py_ssize_t consumed; - - if (!PyArg_ParseTuple(args, "y*|zii:utf_32_ex_decode", - &pbuf, &errors, &byteorder, &final)) - return NULL; - consumed = pbuf.len; /* This is overwritten unless final is true. */ - unicode = PyUnicode_DecodeUTF32Stateful(pbuf.buf, pbuf.len, errors, - &byteorder, final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (unicode == NULL) + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeUTF32Stateful(data->buf, data->len, + errors, &byteorder, + final ? NULL : &consumed); + if (decoded == NULL) return NULL; - tuple = Py_BuildValue("Oni", unicode, consumed, byteorder); - Py_DECREF(unicode); - return tuple; + return Py_BuildValue("Nni", decoded, consumed, byteorder); } +/*[clinic input] +_codecs.unicode_escape_decode + data: Py_buffer(accept={str, buffer}) + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -unicode_escape_decode(PyObject *self, - PyObject *args) +_codecs_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors) +/*[clinic end generated code: output=d1aa63f2620c4999 input=49fd27d06813a7f5]*/ { - Py_buffer pbuf; - const char *errors = NULL; - PyObject *unicode; - - if (!PyArg_ParseTuple(args, "s*|z:unicode_escape_decode", - &pbuf, &errors)) - return NULL; - - unicode = PyUnicode_DecodeUnicodeEscape(pbuf.buf, pbuf.len, errors); - PyBuffer_Release(&pbuf); - return codec_tuple(unicode, pbuf.len); + PyObject *decoded = PyUnicode_DecodeUnicodeEscape(data->buf, data->len, + errors); + return codec_tuple(decoded, data->len); } +/*[clinic input] +_codecs.raw_unicode_escape_decode + data: Py_buffer(accept={str, buffer}) + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -raw_unicode_escape_decode(PyObject *self, - PyObject *args) +_codecs_raw_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors) +/*[clinic end generated code: output=0bf96cc182d81379 input=770903a211434ebc]*/ { - Py_buffer pbuf; - const char *errors = NULL; - PyObject *unicode; - - if (!PyArg_ParseTuple(args, "s*|z:raw_unicode_escape_decode", - &pbuf, &errors)) - return NULL; - - unicode = PyUnicode_DecodeRawUnicodeEscape(pbuf.buf, pbuf.len, errors); - PyBuffer_Release(&pbuf); - return codec_tuple(unicode, pbuf.len); + PyObject *decoded = PyUnicode_DecodeRawUnicodeEscape(data->buf, data->len, + errors); + return codec_tuple(decoded, data->len); } +/*[clinic input] +_codecs.latin_1_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -latin_1_decode(PyObject *self, - PyObject *args) +_codecs_latin_1_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors) +/*[clinic end generated code: output=66b916f5055aaf13 input=5cad0f1759c618ec]*/ { - Py_buffer pbuf; - PyObject *unicode; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "y*|z:latin_1_decode", - &pbuf, &errors)) - return NULL; - - unicode = PyUnicode_DecodeLatin1(pbuf.buf, pbuf.len, errors); - PyBuffer_Release(&pbuf); - return codec_tuple(unicode, pbuf.len); + PyObject *decoded = PyUnicode_DecodeLatin1(data->buf, data->len, errors); + return codec_tuple(decoded, data->len); } +/*[clinic input] +_codecs.ascii_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -ascii_decode(PyObject *self, - PyObject *args) +_codecs_ascii_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors) +/*[clinic end generated code: output=7f213a1b5cdafc65 input=ad1106f64037bd16]*/ { - Py_buffer pbuf; - PyObject *unicode; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "y*|z:ascii_decode", - &pbuf, &errors)) - return NULL; - - unicode = PyUnicode_DecodeASCII(pbuf.buf, pbuf.len, errors); - PyBuffer_Release(&pbuf); - return codec_tuple(unicode, pbuf.len); + PyObject *decoded = PyUnicode_DecodeASCII(data->buf, data->len, errors); + return codec_tuple(decoded, data->len); } +/*[clinic input] +_codecs.charmap_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + mapping: object = NULL + / +[clinic start generated code]*/ + static PyObject * -charmap_decode(PyObject *self, - PyObject *args) +_codecs_charmap_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, PyObject *mapping) +/*[clinic end generated code: output=87d27f365098bbae input=19712ca35c5a80e2]*/ { - Py_buffer pbuf; - PyObject *unicode; - const char *errors = NULL; - PyObject *mapping = NULL; + PyObject *decoded; - if (!PyArg_ParseTuple(args, "y*|zO:charmap_decode", - &pbuf, &errors, &mapping)) - return NULL; if (mapping == Py_None) mapping = NULL; - unicode = PyUnicode_DecodeCharmap(pbuf.buf, pbuf.len, mapping, errors); - PyBuffer_Release(&pbuf); - return codec_tuple(unicode, pbuf.len); + decoded = PyUnicode_DecodeCharmap(data->buf, data->len, mapping, errors); + return codec_tuple(decoded, data->len); } #ifdef HAVE_MBCS +/*[clinic input] +_codecs.mbcs_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + static PyObject * -mbcs_decode(PyObject *self, - PyObject *args) +_codecs_mbcs_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final) +/*[clinic end generated code: output=0ebaf3a5b20e53fa input=d492c1ca64f4fa8a]*/ { - Py_buffer pbuf; - const char *errors = NULL; - int final = 0; - Py_ssize_t consumed; - PyObject *decoded = NULL; - - if (!PyArg_ParseTuple(args, "y*|zi:mbcs_decode", - &pbuf, &errors, &final)) - return NULL; - consumed = pbuf.len; - - decoded = PyUnicode_DecodeMBCSStateful(pbuf.buf, pbuf.len, errors, - final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (decoded == NULL) - return NULL; + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeMBCSStateful(data->buf, data->len, + errors, final ? NULL : &consumed); return codec_tuple(decoded, consumed); } +/*[clinic input] +_codecs.code_page_decode + codepage: int + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + static PyObject * -code_page_decode(PyObject *self, - PyObject *args) +_codecs_code_page_decode_impl(PyModuleDef *module, int codepage, + Py_buffer *data, const char *errors, int final) +/*[clinic end generated code: output=4318e3d9971e31ba input=4f3152a304e21d51]*/ { - Py_buffer pbuf; - const char *errors = NULL; - int final = 0; - Py_ssize_t consumed; - PyObject *decoded = NULL; - int code_page; - - if (!PyArg_ParseTuple(args, "iy*|zi:code_page_decode", - &code_page, &pbuf, &errors, &final)) - return NULL; - consumed = pbuf.len; - - decoded = PyUnicode_DecodeCodePageStateful(code_page, - pbuf.buf, pbuf.len, errors, - final ? NULL : &consumed); - PyBuffer_Release(&pbuf); - if (decoded == NULL) - return NULL; + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeCodePageStateful(code_page, + data->buf, data->len, + errors, + final ? NULL : &consumed); return codec_tuple(decoded, consumed); } @@ -683,43 +655,39 @@ code_page_decode(PyObject *self, /* --- Encoder ------------------------------------------------------------ */ +/*[clinic input] +_codecs.readbuffer_encode + data: Py_buffer(accept={str, buffer}) + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -readbuffer_encode(PyObject *self, - PyObject *args) +_codecs_readbuffer_encode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors) +/*[clinic end generated code: output=319cc24083299859 input=b7c322b89d4ab923]*/ { - Py_buffer pdata; - const char *data; - Py_ssize_t size; - const char *errors = NULL; - PyObject *result; - - if (!PyArg_ParseTuple(args, "s*|z:readbuffer_encode", - &pdata, &errors)) - return NULL; - data = pdata.buf; - size = pdata.len; - - result = PyBytes_FromStringAndSize(data, size); - PyBuffer_Release(&pdata); - return codec_tuple(result, size); + PyObject *result = PyBytes_FromStringAndSize(data->buf, data->len); + return codec_tuple(result, data->len); } +/*[clinic input] +_codecs.unicode_internal_encode + obj: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -unicode_internal_encode(PyObject *self, - PyObject *args) +_codecs_unicode_internal_encode_impl(PyModuleDef *module, PyObject *obj, + const char *errors) +/*[clinic end generated code: output=be08457068ad503b input=8628f0280cf5ba61]*/ { - PyObject *obj; - const char *errors = NULL; - if (PyErr_WarnEx(PyExc_DeprecationWarning, "unicode_internal codec has been deprecated", 1)) return NULL; - if (!PyArg_ParseTuple(args, "O|z:unicode_internal_encode", - &obj, &errors)) - return NULL; - if (PyUnicode_Check(obj)) { Py_UNICODE *u; Py_ssize_t len, size; @@ -741,22 +709,26 @@ unicode_internal_encode(PyObject *self, PyObject *result; if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) != 0) return NULL; - result = codec_tuple(PyBytes_FromStringAndSize(view.buf, view.len), view.len); + result = codec_tuple(PyBytes_FromStringAndSize(view.buf, view.len), + view.len); PyBuffer_Release(&view); return result; } } +/*[clinic input] +_codecs.utf_7_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -utf_7_encode(PyObject *self, - PyObject *args) +_codecs_utf_7_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=a7accc496a32b759 input=fd91a78f103b0421]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:utf_7_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -769,16 +741,19 @@ utf_7_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.utf_8_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -utf_8_encode(PyObject *self, - PyObject *args) +_codecs_utf_8_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=ec831d80e7aedede input=2c22d40532f071f3]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:utf_8_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -798,17 +773,20 @@ utf_8_encode(PyObject *self, */ +/*[clinic input] +_codecs.utf_16_encode + str: object + errors: str(accept={str, NoneType}) = NULL + byteorder: int = 0 + / +[clinic start generated code]*/ + static PyObject * -utf_16_encode(PyObject *self, - PyObject *args) +_codecs_utf_16_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors, int byteorder) +/*[clinic end generated code: output=93ac58e960a9ee4d input=3935a489b2d5385e]*/ { - PyObject *str, *v; - const char *errors = NULL; - int byteorder = 0; - - if (!PyArg_ParseTuple(args, "O|zi:utf_16_encode", - &str, &errors, &byteorder)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -821,16 +799,19 @@ utf_16_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.utf_16_le_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -utf_16_le_encode(PyObject *self, - PyObject *args) +_codecs_utf_16_le_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=422bedb8da34fb66 input=bc27df05d1d20dfe]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:utf_16_le_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -843,16 +824,19 @@ utf_16_le_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.utf_16_be_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -utf_16_be_encode(PyObject *self, - PyObject *args) +_codecs_utf_16_be_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=3aa7ee9502acdd77 input=5a69d4112763462b]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:utf_16_be_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -872,17 +856,20 @@ utf_16_be_encode(PyObject *self, */ +/*[clinic input] +_codecs.utf_32_encode + str: object + errors: str(accept={str, NoneType}) = NULL + byteorder: int = 0 + / +[clinic start generated code]*/ + static PyObject * -utf_32_encode(PyObject *self, - PyObject *args) +_codecs_utf_32_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors, int byteorder) +/*[clinic end generated code: output=3e7d5a003b02baed input=434a1efa492b8d58]*/ { - PyObject *str, *v; - const char *errors = NULL; - int byteorder = 0; - - if (!PyArg_ParseTuple(args, "O|zi:utf_32_encode", - &str, &errors, &byteorder)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -895,16 +882,19 @@ utf_32_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.utf_32_le_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -utf_32_le_encode(PyObject *self, - PyObject *args) +_codecs_utf_32_le_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=5dda641cd33dbfc2 input=dfa2d7dc78b99422]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:utf_32_le_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -917,16 +907,19 @@ utf_32_le_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.utf_32_be_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -utf_32_be_encode(PyObject *self, - PyObject *args) +_codecs_utf_32_be_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=ccca8b44d91a7c7a input=4595617b18169002]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:utf_32_be_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -939,16 +932,19 @@ utf_32_be_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.unicode_escape_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -unicode_escape_encode(PyObject *self, - PyObject *args) +_codecs_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=389f23d2b8f8d80b input=8273506f14076912]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:unicode_escape_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -961,16 +957,19 @@ unicode_escape_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.raw_unicode_escape_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -raw_unicode_escape_encode(PyObject *self, - PyObject *args) +_codecs_raw_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=fec4e39d6ec37a62 input=181755d5dfacef3c]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:raw_unicode_escape_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -983,16 +982,19 @@ raw_unicode_escape_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.latin_1_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -latin_1_encode(PyObject *self, - PyObject *args) +_codecs_latin_1_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=ecf00eb8e48c889c input=f03f6dcf1d84bee4]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:latin_1_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -1005,16 +1007,19 @@ latin_1_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.ascii_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -ascii_encode(PyObject *self, - PyObject *args) +_codecs_ascii_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=a9d18fc6b6b91cfb input=d87e25a10a593fee]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:ascii_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -1027,17 +1032,21 @@ ascii_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.charmap_encode + str: object + errors: str(accept={str, NoneType}) = NULL + mapping: object = NULL + / +[clinic start generated code]*/ + static PyObject * -charmap_encode(PyObject *self, - PyObject *args) +_codecs_charmap_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors, PyObject *mapping) +/*[clinic end generated code: output=14ca42b83853c643 input=85f4172661e8dad9]*/ { - PyObject *str, *v; - const char *errors = NULL; - PyObject *mapping = NULL; + PyObject *v; - if (!PyArg_ParseTuple(args, "O|zO:charmap_encode", - &str, &errors, &mapping)) - return NULL; if (mapping == Py_None) mapping = NULL; @@ -1052,27 +1061,34 @@ charmap_encode(PyObject *self, return v; } -static PyObject* -charmap_build(PyObject *self, PyObject *args) +/*[clinic input] +_codecs.charmap_build + map: unicode + / +[clinic start generated code]*/ + +static PyObject * +_codecs_charmap_build_impl(PyModuleDef *module, PyObject *map) +/*[clinic end generated code: output=9485b58fa44afa6a input=d91a91d1717dbc6d]*/ { - PyObject *map; - if (!PyArg_ParseTuple(args, "U:charmap_build", &map)) - return NULL; return PyUnicode_BuildEncodingMap(map); } #ifdef HAVE_MBCS +/*[clinic input] +_codecs.mbcs_encode + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -mbcs_encode(PyObject *self, - PyObject *args) +_codecs_mbcs_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors) +/*[clinic end generated code: output=d1a013bc68798bd7 input=65c09ee1e4203263]*/ { - PyObject *str, *v; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "O|z:mbcs_encode", - &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -1085,17 +1101,20 @@ mbcs_encode(PyObject *self, return v; } +/*[clinic input] +_codecs.code_page_encode + code_page: int + str: object + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + static PyObject * -code_page_encode(PyObject *self, - PyObject *args) +_codecs_code_page_encode_impl(PyModuleDef *module, int code_page, + PyObject *str, const char *errors) +/*[clinic end generated code: output=3b406618dbfbce25 input=c8562ec460c2e309]*/ { - PyObject *str, *v; - const char *errors = NULL; - int code_page; - - if (!PyArg_ParseTuple(args, "iO|z:code_page_encode", - &code_page, &str, &errors)) - return NULL; + PyObject *v; str = PyUnicode_FromObject(str); if (str == NULL || PyUnicode_READY(str) < 0) { @@ -1114,99 +1133,94 @@ code_page_encode(PyObject *self, /* --- Error handler registry --------------------------------------------- */ -PyDoc_STRVAR(register_error__doc__, -"register_error(errors, handler)\n\ -\n\ -Register the specified error handler under the name\n\ -errors. handler must be a callable object, that\n\ -will be called with an exception instance containing\n\ -information about the location of the encoding/decoding\n\ -error and must return a (replacement, new position) tuple."); +/*[clinic input] +_codecs.register_error + errors: str + handler: object + / -static PyObject *register_error(PyObject *self, PyObject *args) -{ - const char *name; - PyObject *handler; +Register the specified error handler under the name errors. - if (!PyArg_ParseTuple(args, "sO:register_error", - &name, &handler)) - return NULL; - if (PyCodec_RegisterError(name, handler)) +handler must be a callable object, that will be called with an exception +instance containing information about the location of the encoding/decoding +error and must return a (replacement, new position) tuple. +[clinic start generated code]*/ + +static PyObject * +_codecs_register_error_impl(PyModuleDef *module, const char *errors, + PyObject *handler) +/*[clinic end generated code: output=be00d3b1849ce68a input=5e6709203c2e33fe]*/ +{ + if (PyCodec_RegisterError(errors, handler)) return NULL; Py_RETURN_NONE; } -PyDoc_STRVAR(lookup_error__doc__, -"lookup_error(errors) -> handler\n\ -\n\ -Return the error handler for the specified error handling name\n\ -or raise a LookupError, if no handler exists under this name."); +/*[clinic input] +_codecs.lookup_error + name: str + / -static PyObject *lookup_error(PyObject *self, PyObject *args) -{ - const char *name; +lookup_error(errors) -> handler - if (!PyArg_ParseTuple(args, "s:lookup_error", - &name)) - return NULL; +Return the error handler for the specified error handling name or raise a +LookupError, if no handler exists under this name. +[clinic start generated code]*/ + +static PyObject * +_codecs_lookup_error_impl(PyModuleDef *module, const char *name) +/*[clinic end generated code: output=731e6df8c83c6158 input=4775dd65e6235aba]*/ +{ return PyCodec_LookupError(name); } /* --- Module API --------------------------------------------------------- */ static PyMethodDef _codecs_functions[] = { - {"register", codec_register, METH_O, - register__doc__}, - {"lookup", codec_lookup, METH_VARARGS, - lookup__doc__}, - {"encode", (PyCFunction)codec_encode, METH_VARARGS|METH_KEYWORDS, - encode__doc__}, - {"decode", (PyCFunction)codec_decode, METH_VARARGS|METH_KEYWORDS, - decode__doc__}, - {"escape_encode", escape_encode, METH_VARARGS}, - {"escape_decode", escape_decode, METH_VARARGS}, - {"utf_8_encode", utf_8_encode, METH_VARARGS}, - {"utf_8_decode", utf_8_decode, METH_VARARGS}, - {"utf_7_encode", utf_7_encode, METH_VARARGS}, - {"utf_7_decode", utf_7_decode, METH_VARARGS}, - {"utf_16_encode", utf_16_encode, METH_VARARGS}, - {"utf_16_le_encode", utf_16_le_encode, METH_VARARGS}, - {"utf_16_be_encode", utf_16_be_encode, METH_VARARGS}, - {"utf_16_decode", utf_16_decode, METH_VARARGS}, - {"utf_16_le_decode", utf_16_le_decode, METH_VARARGS}, - {"utf_16_be_decode", utf_16_be_decode, METH_VARARGS}, - {"utf_16_ex_decode", utf_16_ex_decode, METH_VARARGS}, - {"utf_32_encode", utf_32_encode, METH_VARARGS}, - {"utf_32_le_encode", utf_32_le_encode, METH_VARARGS}, - {"utf_32_be_encode", utf_32_be_encode, METH_VARARGS}, - {"utf_32_decode", utf_32_decode, METH_VARARGS}, - {"utf_32_le_decode", utf_32_le_decode, METH_VARARGS}, - {"utf_32_be_decode", utf_32_be_decode, METH_VARARGS}, - {"utf_32_ex_decode", utf_32_ex_decode, METH_VARARGS}, - {"unicode_escape_encode", unicode_escape_encode, METH_VARARGS}, - {"unicode_escape_decode", unicode_escape_decode, METH_VARARGS}, - {"unicode_internal_encode", unicode_internal_encode, METH_VARARGS}, - {"unicode_internal_decode", unicode_internal_decode, METH_VARARGS}, - {"raw_unicode_escape_encode", raw_unicode_escape_encode, METH_VARARGS}, - {"raw_unicode_escape_decode", raw_unicode_escape_decode, METH_VARARGS}, - {"latin_1_encode", latin_1_encode, METH_VARARGS}, - {"latin_1_decode", latin_1_decode, METH_VARARGS}, - {"ascii_encode", ascii_encode, METH_VARARGS}, - {"ascii_decode", ascii_decode, METH_VARARGS}, - {"charmap_encode", charmap_encode, METH_VARARGS}, - {"charmap_decode", charmap_decode, METH_VARARGS}, - {"charmap_build", charmap_build, METH_VARARGS}, - {"readbuffer_encode", readbuffer_encode, METH_VARARGS}, -#ifdef HAVE_MBCS - {"mbcs_encode", mbcs_encode, METH_VARARGS}, - {"mbcs_decode", mbcs_decode, METH_VARARGS}, - {"code_page_encode", code_page_encode, METH_VARARGS}, - {"code_page_decode", code_page_decode, METH_VARARGS}, -#endif - {"register_error", register_error, METH_VARARGS, - register_error__doc__}, - {"lookup_error", lookup_error, METH_VARARGS, - lookup_error__doc__}, + _CODECS_REGISTER_METHODDEF + _CODECS_LOOKUP_METHODDEF + _CODECS_ENCODE_METHODDEF + _CODECS_DECODE_METHODDEF + _CODECS_ESCAPE_ENCODE_METHODDEF + _CODECS_ESCAPE_DECODE_METHODDEF + _CODECS_UTF_8_ENCODE_METHODDEF + _CODECS_UTF_8_DECODE_METHODDEF + _CODECS_UTF_7_ENCODE_METHODDEF + _CODECS_UTF_7_DECODE_METHODDEF + _CODECS_UTF_16_ENCODE_METHODDEF + _CODECS_UTF_16_LE_ENCODE_METHODDEF + _CODECS_UTF_16_BE_ENCODE_METHODDEF + _CODECS_UTF_16_DECODE_METHODDEF + _CODECS_UTF_16_LE_DECODE_METHODDEF + _CODECS_UTF_16_BE_DECODE_METHODDEF + _CODECS_UTF_16_EX_DECODE_METHODDEF + _CODECS_UTF_32_ENCODE_METHODDEF + _CODECS_UTF_32_LE_ENCODE_METHODDEF + _CODECS_UTF_32_BE_ENCODE_METHODDEF + _CODECS_UTF_32_DECODE_METHODDEF + _CODECS_UTF_32_LE_DECODE_METHODDEF + _CODECS_UTF_32_BE_DECODE_METHODDEF + _CODECS_UTF_32_EX_DECODE_METHODDEF + _CODECS_UNICODE_ESCAPE_ENCODE_METHODDEF + _CODECS_UNICODE_ESCAPE_DECODE_METHODDEF + _CODECS_UNICODE_INTERNAL_ENCODE_METHODDEF + _CODECS_UNICODE_INTERNAL_DECODE_METHODDEF + _CODECS_RAW_UNICODE_ESCAPE_ENCODE_METHODDEF + _CODECS_RAW_UNICODE_ESCAPE_DECODE_METHODDEF + _CODECS_LATIN_1_ENCODE_METHODDEF + _CODECS_LATIN_1_DECODE_METHODDEF + _CODECS_ASCII_ENCODE_METHODDEF + _CODECS_ASCII_DECODE_METHODDEF + _CODECS_CHARMAP_ENCODE_METHODDEF + _CODECS_CHARMAP_DECODE_METHODDEF + _CODECS_CHARMAP_BUILD_METHODDEF + _CODECS_READBUFFER_ENCODE_METHODDEF + _CODECS_MBCS_ENCODE_METHODDEF + _CODECS_MBCS_DECODE_METHODDEF + _CODECS_CODE_PAGE_ENCODE_METHODDEF + _CODECS_CODE_PAGE_DECODE_METHODDEF + _CODECS_REGISTER_ERROR_METHODDEF + _CODECS_LOOKUP_ERROR_METHODDEF _CODECS__FORGET_CODEC_METHODDEF {NULL, NULL} /* sentinel */ }; diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index 238bed46f4..2b97b187ce 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -2,6 +2,121 @@ preserve [clinic start generated code]*/ +PyDoc_STRVAR(_codecs_register__doc__, +"register($module, search_function, /)\n" +"--\n" +"\n" +"Register a codec search function.\n" +"\n" +"Search functions are expected to take one argument, the encoding name in\n" +"all lower case letters, and either return None, or a tuple of functions\n" +"(encoder, decoder, stream_reader, stream_writer) (or a CodecInfo object)."); + +#define _CODECS_REGISTER_METHODDEF \ + {"register", (PyCFunction)_codecs_register, METH_O, _codecs_register__doc__}, + +PyDoc_STRVAR(_codecs_lookup__doc__, +"lookup($module, encoding, /)\n" +"--\n" +"\n" +"Looks up a codec tuple in the Python codec registry and returns a CodecInfo object."); + +#define _CODECS_LOOKUP_METHODDEF \ + {"lookup", (PyCFunction)_codecs_lookup, METH_O, _codecs_lookup__doc__}, + +static PyObject * +_codecs_lookup_impl(PyModuleDef *module, const char *encoding); + +static PyObject * +_codecs_lookup(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *encoding; + + if (!PyArg_Parse(arg, "s:lookup", &encoding)) + goto exit; + return_value = _codecs_lookup_impl(module, encoding); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_encode__doc__, +"encode($module, /, obj, encoding=sys.getdefaultencoding(),\n" +" errors=\'strict\')\n" +"--\n" +"\n" +"Encodes obj using the codec registered for encoding.\n" +"\n" +"encoding defaults to the default encoding. errors may be given to set a\n" +"different error handling scheme. Default is \'strict\' meaning that encoding\n" +"errors raise a ValueError. Other possible values are \'ignore\', \'replace\'\n" +"and \'backslashreplace\' as well as any other name registered with\n" +"codecs.register_error that can handle ValueErrors."); + +#define _CODECS_ENCODE_METHODDEF \ + {"encode", (PyCFunction)_codecs_encode, METH_VARARGS|METH_KEYWORDS, _codecs_encode__doc__}, + +static PyObject * +_codecs_encode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, + const char *errors); + +static PyObject * +_codecs_encode(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"obj", "encoding", "errors", NULL}; + PyObject *obj; + const char *encoding = NULL; + const char *errors = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:encode", _keywords, + &obj, &encoding, &errors)) + goto exit; + return_value = _codecs_encode_impl(module, obj, encoding, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_decode__doc__, +"decode($module, /, obj, encoding=sys.getdefaultencoding(),\n" +" errors=\'strict\')\n" +"--\n" +"\n" +"Decodes obj using the codec registered for encoding.\n" +"\n" +"encoding defaults to the default encoding. errors may be given to set a\n" +"different error handling scheme. Default is \'strict\' meaning that encoding\n" +"errors raise a ValueError. Other possible values are \'ignore\', \'replace\'\n" +"and \'backslashreplace\' as well as any other name registered with\n" +"codecs.register_error that can handle ValueErrors."); + +#define _CODECS_DECODE_METHODDEF \ + {"decode", (PyCFunction)_codecs_decode, METH_VARARGS|METH_KEYWORDS, _codecs_decode__doc__}, + +static PyObject * +_codecs_decode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, + const char *errors); + +static PyObject * +_codecs_decode(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"obj", "encoding", "errors", NULL}; + PyObject *obj; + const char *encoding = NULL; + const char *errors = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:decode", _keywords, + &obj, &encoding, &errors)) + goto exit; + return_value = _codecs_decode_impl(module, obj, encoding, errors); + +exit: + return return_value; +} + PyDoc_STRVAR(_codecs__forget_codec__doc__, "_forget_codec($module, encoding, /)\n" "--\n" @@ -27,4 +142,1257 @@ _codecs__forget_codec(PyModuleDef *module, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=52cc017e06c8ef9a input=a9049054013a1b77]*/ + +PyDoc_STRVAR(_codecs_escape_decode__doc__, +"escape_decode($module, data, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_ESCAPE_DECODE_METHODDEF \ + {"escape_decode", (PyCFunction)_codecs_escape_decode, METH_VARARGS, _codecs_escape_decode__doc__}, + +static PyObject * +_codecs_escape_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors); + +static PyObject * +_codecs_escape_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "s*|z:escape_decode", + &data, &errors)) + goto exit; + return_value = _codecs_escape_decode_impl(module, &data, errors); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_escape_encode__doc__, +"escape_encode($module, data, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_ESCAPE_ENCODE_METHODDEF \ + {"escape_encode", (PyCFunction)_codecs_escape_encode, METH_VARARGS, _codecs_escape_encode__doc__}, + +static PyObject * +_codecs_escape_encode_impl(PyModuleDef *module, PyObject *data, + const char *errors); + +static PyObject * +_codecs_escape_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *data; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O!|z:escape_encode", + &PyBytes_Type, &data, &errors)) + goto exit; + return_value = _codecs_escape_encode_impl(module, data, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_unicode_internal_decode__doc__, +"unicode_internal_decode($module, obj, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_UNICODE_INTERNAL_DECODE_METHODDEF \ + {"unicode_internal_decode", (PyCFunction)_codecs_unicode_internal_decode, METH_VARARGS, _codecs_unicode_internal_decode__doc__}, + +static PyObject * +_codecs_unicode_internal_decode_impl(PyModuleDef *module, PyObject *obj, + const char *errors); + +static PyObject * +_codecs_unicode_internal_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *obj; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:unicode_internal_decode", + &obj, &errors)) + goto exit; + return_value = _codecs_unicode_internal_decode_impl(module, obj, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_7_decode__doc__, +"utf_7_decode($module, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_7_DECODE_METHODDEF \ + {"utf_7_decode", (PyCFunction)_codecs_utf_7_decode, METH_VARARGS, _codecs_utf_7_decode__doc__}, + +static PyObject * +_codecs_utf_7_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final); + +static PyObject * +_codecs_utf_7_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zi:utf_7_decode", + &data, &errors, &final)) + goto exit; + return_value = _codecs_utf_7_decode_impl(module, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_8_decode__doc__, +"utf_8_decode($module, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_8_DECODE_METHODDEF \ + {"utf_8_decode", (PyCFunction)_codecs_utf_8_decode, METH_VARARGS, _codecs_utf_8_decode__doc__}, + +static PyObject * +_codecs_utf_8_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final); + +static PyObject * +_codecs_utf_8_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zi:utf_8_decode", + &data, &errors, &final)) + goto exit; + return_value = _codecs_utf_8_decode_impl(module, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_16_decode__doc__, +"utf_16_decode($module, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_16_DECODE_METHODDEF \ + {"utf_16_decode", (PyCFunction)_codecs_utf_16_decode, METH_VARARGS, _codecs_utf_16_decode__doc__}, + +static PyObject * +_codecs_utf_16_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final); + +static PyObject * +_codecs_utf_16_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zi:utf_16_decode", + &data, &errors, &final)) + goto exit; + return_value = _codecs_utf_16_decode_impl(module, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_16_le_decode__doc__, +"utf_16_le_decode($module, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_16_LE_DECODE_METHODDEF \ + {"utf_16_le_decode", (PyCFunction)_codecs_utf_16_le_decode, METH_VARARGS, _codecs_utf_16_le_decode__doc__}, + +static PyObject * +_codecs_utf_16_le_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final); + +static PyObject * +_codecs_utf_16_le_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zi:utf_16_le_decode", + &data, &errors, &final)) + goto exit; + return_value = _codecs_utf_16_le_decode_impl(module, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_16_be_decode__doc__, +"utf_16_be_decode($module, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_16_BE_DECODE_METHODDEF \ + {"utf_16_be_decode", (PyCFunction)_codecs_utf_16_be_decode, METH_VARARGS, _codecs_utf_16_be_decode__doc__}, + +static PyObject * +_codecs_utf_16_be_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final); + +static PyObject * +_codecs_utf_16_be_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zi:utf_16_be_decode", + &data, &errors, &final)) + goto exit; + return_value = _codecs_utf_16_be_decode_impl(module, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_16_ex_decode__doc__, +"utf_16_ex_decode($module, data, errors=None, byteorder=0, final=False,\n" +" /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_16_EX_DECODE_METHODDEF \ + {"utf_16_ex_decode", (PyCFunction)_codecs_utf_16_ex_decode, METH_VARARGS, _codecs_utf_16_ex_decode__doc__}, + +static PyObject * +_codecs_utf_16_ex_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int byteorder, int final); + +static PyObject * +_codecs_utf_16_ex_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int byteorder = 0; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zii:utf_16_ex_decode", + &data, &errors, &byteorder, &final)) + goto exit; + return_value = _codecs_utf_16_ex_decode_impl(module, &data, errors, byteorder, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_32_decode__doc__, +"utf_32_decode($module, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_32_DECODE_METHODDEF \ + {"utf_32_decode", (PyCFunction)_codecs_utf_32_decode, METH_VARARGS, _codecs_utf_32_decode__doc__}, + +static PyObject * +_codecs_utf_32_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final); + +static PyObject * +_codecs_utf_32_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zi:utf_32_decode", + &data, &errors, &final)) + goto exit; + return_value = _codecs_utf_32_decode_impl(module, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_32_le_decode__doc__, +"utf_32_le_decode($module, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_32_LE_DECODE_METHODDEF \ + {"utf_32_le_decode", (PyCFunction)_codecs_utf_32_le_decode, METH_VARARGS, _codecs_utf_32_le_decode__doc__}, + +static PyObject * +_codecs_utf_32_le_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final); + +static PyObject * +_codecs_utf_32_le_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zi:utf_32_le_decode", + &data, &errors, &final)) + goto exit; + return_value = _codecs_utf_32_le_decode_impl(module, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_32_be_decode__doc__, +"utf_32_be_decode($module, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_32_BE_DECODE_METHODDEF \ + {"utf_32_be_decode", (PyCFunction)_codecs_utf_32_be_decode, METH_VARARGS, _codecs_utf_32_be_decode__doc__}, + +static PyObject * +_codecs_utf_32_be_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final); + +static PyObject * +_codecs_utf_32_be_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zi:utf_32_be_decode", + &data, &errors, &final)) + goto exit; + return_value = _codecs_utf_32_be_decode_impl(module, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_32_ex_decode__doc__, +"utf_32_ex_decode($module, data, errors=None, byteorder=0, final=False,\n" +" /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_32_EX_DECODE_METHODDEF \ + {"utf_32_ex_decode", (PyCFunction)_codecs_utf_32_ex_decode, METH_VARARGS, _codecs_utf_32_ex_decode__doc__}, + +static PyObject * +_codecs_utf_32_ex_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int byteorder, int final); + +static PyObject * +_codecs_utf_32_ex_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int byteorder = 0; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zii:utf_32_ex_decode", + &data, &errors, &byteorder, &final)) + goto exit; + return_value = _codecs_utf_32_ex_decode_impl(module, &data, errors, byteorder, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_unicode_escape_decode__doc__, +"unicode_escape_decode($module, data, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_UNICODE_ESCAPE_DECODE_METHODDEF \ + {"unicode_escape_decode", (PyCFunction)_codecs_unicode_escape_decode, METH_VARARGS, _codecs_unicode_escape_decode__doc__}, + +static PyObject * +_codecs_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors); + +static PyObject * +_codecs_unicode_escape_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "s*|z:unicode_escape_decode", + &data, &errors)) + goto exit; + return_value = _codecs_unicode_escape_decode_impl(module, &data, errors); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_raw_unicode_escape_decode__doc__, +"raw_unicode_escape_decode($module, data, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_RAW_UNICODE_ESCAPE_DECODE_METHODDEF \ + {"raw_unicode_escape_decode", (PyCFunction)_codecs_raw_unicode_escape_decode, METH_VARARGS, _codecs_raw_unicode_escape_decode__doc__}, + +static PyObject * +_codecs_raw_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors); + +static PyObject * +_codecs_raw_unicode_escape_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "s*|z:raw_unicode_escape_decode", + &data, &errors)) + goto exit; + return_value = _codecs_raw_unicode_escape_decode_impl(module, &data, errors); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_latin_1_decode__doc__, +"latin_1_decode($module, data, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_LATIN_1_DECODE_METHODDEF \ + {"latin_1_decode", (PyCFunction)_codecs_latin_1_decode, METH_VARARGS, _codecs_latin_1_decode__doc__}, + +static PyObject * +_codecs_latin_1_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors); + +static PyObject * +_codecs_latin_1_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "y*|z:latin_1_decode", + &data, &errors)) + goto exit; + return_value = _codecs_latin_1_decode_impl(module, &data, errors); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_ascii_decode__doc__, +"ascii_decode($module, data, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_ASCII_DECODE_METHODDEF \ + {"ascii_decode", (PyCFunction)_codecs_ascii_decode, METH_VARARGS, _codecs_ascii_decode__doc__}, + +static PyObject * +_codecs_ascii_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors); + +static PyObject * +_codecs_ascii_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "y*|z:ascii_decode", + &data, &errors)) + goto exit; + return_value = _codecs_ascii_decode_impl(module, &data, errors); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_charmap_decode__doc__, +"charmap_decode($module, data, errors=None, mapping=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_CHARMAP_DECODE_METHODDEF \ + {"charmap_decode", (PyCFunction)_codecs_charmap_decode, METH_VARARGS, _codecs_charmap_decode__doc__}, + +static PyObject * +_codecs_charmap_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, PyObject *mapping); + +static PyObject * +_codecs_charmap_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + PyObject *mapping = NULL; + + if (!PyArg_ParseTuple(args, "y*|zO:charmap_decode", + &data, &errors, &mapping)) + goto exit; + return_value = _codecs_charmap_decode_impl(module, &data, errors, mapping); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +#if defined(HAVE_MBCS) + +PyDoc_STRVAR(_codecs_mbcs_decode__doc__, +"mbcs_decode($module, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_MBCS_DECODE_METHODDEF \ + {"mbcs_decode", (PyCFunction)_codecs_mbcs_decode, METH_VARARGS, _codecs_mbcs_decode__doc__}, + +static PyObject * +_codecs_mbcs_decode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors, int final); + +static PyObject * +_codecs_mbcs_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zi:mbcs_decode", + &data, &errors, &final)) + goto exit; + return_value = _codecs_mbcs_decode_impl(module, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +#endif /* defined(HAVE_MBCS) */ + +#if defined(HAVE_MBCS) + +PyDoc_STRVAR(_codecs_code_page_decode__doc__, +"code_page_decode($module, codepage, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_CODE_PAGE_DECODE_METHODDEF \ + {"code_page_decode", (PyCFunction)_codecs_code_page_decode, METH_VARARGS, _codecs_code_page_decode__doc__}, + +static PyObject * +_codecs_code_page_decode_impl(PyModuleDef *module, int codepage, + Py_buffer *data, const char *errors, int final); + +static PyObject * +_codecs_code_page_decode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int codepage; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "iy*|zi:code_page_decode", + &codepage, &data, &errors, &final)) + goto exit; + return_value = _codecs_code_page_decode_impl(module, codepage, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +#endif /* defined(HAVE_MBCS) */ + +PyDoc_STRVAR(_codecs_readbuffer_encode__doc__, +"readbuffer_encode($module, data, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_READBUFFER_ENCODE_METHODDEF \ + {"readbuffer_encode", (PyCFunction)_codecs_readbuffer_encode, METH_VARARGS, _codecs_readbuffer_encode__doc__}, + +static PyObject * +_codecs_readbuffer_encode_impl(PyModuleDef *module, Py_buffer *data, + const char *errors); + +static PyObject * +_codecs_readbuffer_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "s*|z:readbuffer_encode", + &data, &errors)) + goto exit; + return_value = _codecs_readbuffer_encode_impl(module, &data, errors); + +exit: + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); + + return return_value; +} + +PyDoc_STRVAR(_codecs_unicode_internal_encode__doc__, +"unicode_internal_encode($module, obj, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_UNICODE_INTERNAL_ENCODE_METHODDEF \ + {"unicode_internal_encode", (PyCFunction)_codecs_unicode_internal_encode, METH_VARARGS, _codecs_unicode_internal_encode__doc__}, + +static PyObject * +_codecs_unicode_internal_encode_impl(PyModuleDef *module, PyObject *obj, + const char *errors); + +static PyObject * +_codecs_unicode_internal_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *obj; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:unicode_internal_encode", + &obj, &errors)) + goto exit; + return_value = _codecs_unicode_internal_encode_impl(module, obj, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_7_encode__doc__, +"utf_7_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_7_ENCODE_METHODDEF \ + {"utf_7_encode", (PyCFunction)_codecs_utf_7_encode, METH_VARARGS, _codecs_utf_7_encode__doc__}, + +static PyObject * +_codecs_utf_7_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_utf_7_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:utf_7_encode", + &str, &errors)) + goto exit; + return_value = _codecs_utf_7_encode_impl(module, str, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_8_encode__doc__, +"utf_8_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_8_ENCODE_METHODDEF \ + {"utf_8_encode", (PyCFunction)_codecs_utf_8_encode, METH_VARARGS, _codecs_utf_8_encode__doc__}, + +static PyObject * +_codecs_utf_8_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_utf_8_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:utf_8_encode", + &str, &errors)) + goto exit; + return_value = _codecs_utf_8_encode_impl(module, str, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_16_encode__doc__, +"utf_16_encode($module, str, errors=None, byteorder=0, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_16_ENCODE_METHODDEF \ + {"utf_16_encode", (PyCFunction)_codecs_utf_16_encode, METH_VARARGS, _codecs_utf_16_encode__doc__}, + +static PyObject * +_codecs_utf_16_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors, int byteorder); + +static PyObject * +_codecs_utf_16_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + int byteorder = 0; + + if (!PyArg_ParseTuple(args, "O|zi:utf_16_encode", + &str, &errors, &byteorder)) + goto exit; + return_value = _codecs_utf_16_encode_impl(module, str, errors, byteorder); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_16_le_encode__doc__, +"utf_16_le_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_16_LE_ENCODE_METHODDEF \ + {"utf_16_le_encode", (PyCFunction)_codecs_utf_16_le_encode, METH_VARARGS, _codecs_utf_16_le_encode__doc__}, + +static PyObject * +_codecs_utf_16_le_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_utf_16_le_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:utf_16_le_encode", + &str, &errors)) + goto exit; + return_value = _codecs_utf_16_le_encode_impl(module, str, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_16_be_encode__doc__, +"utf_16_be_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_16_BE_ENCODE_METHODDEF \ + {"utf_16_be_encode", (PyCFunction)_codecs_utf_16_be_encode, METH_VARARGS, _codecs_utf_16_be_encode__doc__}, + +static PyObject * +_codecs_utf_16_be_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_utf_16_be_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:utf_16_be_encode", + &str, &errors)) + goto exit; + return_value = _codecs_utf_16_be_encode_impl(module, str, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_32_encode__doc__, +"utf_32_encode($module, str, errors=None, byteorder=0, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_32_ENCODE_METHODDEF \ + {"utf_32_encode", (PyCFunction)_codecs_utf_32_encode, METH_VARARGS, _codecs_utf_32_encode__doc__}, + +static PyObject * +_codecs_utf_32_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors, int byteorder); + +static PyObject * +_codecs_utf_32_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + int byteorder = 0; + + if (!PyArg_ParseTuple(args, "O|zi:utf_32_encode", + &str, &errors, &byteorder)) + goto exit; + return_value = _codecs_utf_32_encode_impl(module, str, errors, byteorder); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_32_le_encode__doc__, +"utf_32_le_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_32_LE_ENCODE_METHODDEF \ + {"utf_32_le_encode", (PyCFunction)_codecs_utf_32_le_encode, METH_VARARGS, _codecs_utf_32_le_encode__doc__}, + +static PyObject * +_codecs_utf_32_le_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_utf_32_le_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:utf_32_le_encode", + &str, &errors)) + goto exit; + return_value = _codecs_utf_32_le_encode_impl(module, str, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_utf_32_be_encode__doc__, +"utf_32_be_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_UTF_32_BE_ENCODE_METHODDEF \ + {"utf_32_be_encode", (PyCFunction)_codecs_utf_32_be_encode, METH_VARARGS, _codecs_utf_32_be_encode__doc__}, + +static PyObject * +_codecs_utf_32_be_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_utf_32_be_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:utf_32_be_encode", + &str, &errors)) + goto exit; + return_value = _codecs_utf_32_be_encode_impl(module, str, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_unicode_escape_encode__doc__, +"unicode_escape_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_UNICODE_ESCAPE_ENCODE_METHODDEF \ + {"unicode_escape_encode", (PyCFunction)_codecs_unicode_escape_encode, METH_VARARGS, _codecs_unicode_escape_encode__doc__}, + +static PyObject * +_codecs_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_unicode_escape_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:unicode_escape_encode", + &str, &errors)) + goto exit; + return_value = _codecs_unicode_escape_encode_impl(module, str, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_raw_unicode_escape_encode__doc__, +"raw_unicode_escape_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_RAW_UNICODE_ESCAPE_ENCODE_METHODDEF \ + {"raw_unicode_escape_encode", (PyCFunction)_codecs_raw_unicode_escape_encode, METH_VARARGS, _codecs_raw_unicode_escape_encode__doc__}, + +static PyObject * +_codecs_raw_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_raw_unicode_escape_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:raw_unicode_escape_encode", + &str, &errors)) + goto exit; + return_value = _codecs_raw_unicode_escape_encode_impl(module, str, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_latin_1_encode__doc__, +"latin_1_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_LATIN_1_ENCODE_METHODDEF \ + {"latin_1_encode", (PyCFunction)_codecs_latin_1_encode, METH_VARARGS, _codecs_latin_1_encode__doc__}, + +static PyObject * +_codecs_latin_1_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_latin_1_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:latin_1_encode", + &str, &errors)) + goto exit; + return_value = _codecs_latin_1_encode_impl(module, str, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_ascii_encode__doc__, +"ascii_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_ASCII_ENCODE_METHODDEF \ + {"ascii_encode", (PyCFunction)_codecs_ascii_encode, METH_VARARGS, _codecs_ascii_encode__doc__}, + +static PyObject * +_codecs_ascii_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_ascii_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:ascii_encode", + &str, &errors)) + goto exit; + return_value = _codecs_ascii_encode_impl(module, str, errors); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_charmap_encode__doc__, +"charmap_encode($module, str, errors=None, mapping=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_CHARMAP_ENCODE_METHODDEF \ + {"charmap_encode", (PyCFunction)_codecs_charmap_encode, METH_VARARGS, _codecs_charmap_encode__doc__}, + +static PyObject * +_codecs_charmap_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors, PyObject *mapping); + +static PyObject * +_codecs_charmap_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + PyObject *mapping = NULL; + + if (!PyArg_ParseTuple(args, "O|zO:charmap_encode", + &str, &errors, &mapping)) + goto exit; + return_value = _codecs_charmap_encode_impl(module, str, errors, mapping); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_charmap_build__doc__, +"charmap_build($module, map, /)\n" +"--\n" +"\n"); + +#define _CODECS_CHARMAP_BUILD_METHODDEF \ + {"charmap_build", (PyCFunction)_codecs_charmap_build, METH_O, _codecs_charmap_build__doc__}, + +static PyObject * +_codecs_charmap_build_impl(PyModuleDef *module, PyObject *map); + +static PyObject * +_codecs_charmap_build(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *map; + + if (!PyArg_Parse(arg, "U:charmap_build", &map)) + goto exit; + return_value = _codecs_charmap_build_impl(module, map); + +exit: + return return_value; +} + +#if defined(HAVE_MBCS) + +PyDoc_STRVAR(_codecs_mbcs_encode__doc__, +"mbcs_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_MBCS_ENCODE_METHODDEF \ + {"mbcs_encode", (PyCFunction)_codecs_mbcs_encode, METH_VARARGS, _codecs_mbcs_encode__doc__}, + +static PyObject * +_codecs_mbcs_encode_impl(PyModuleDef *module, PyObject *str, + const char *errors); + +static PyObject * +_codecs_mbcs_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "O|z:mbcs_encode", + &str, &errors)) + goto exit; + return_value = _codecs_mbcs_encode_impl(module, str, errors); + +exit: + return return_value; +} + +#endif /* defined(HAVE_MBCS) */ + +#if defined(HAVE_MBCS) + +PyDoc_STRVAR(_codecs_code_page_encode__doc__, +"code_page_encode($module, code_page, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_CODE_PAGE_ENCODE_METHODDEF \ + {"code_page_encode", (PyCFunction)_codecs_code_page_encode, METH_VARARGS, _codecs_code_page_encode__doc__}, + +static PyObject * +_codecs_code_page_encode_impl(PyModuleDef *module, int code_page, + PyObject *str, const char *errors); + +static PyObject * +_codecs_code_page_encode(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int code_page; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "iO|z:code_page_encode", + &code_page, &str, &errors)) + goto exit; + return_value = _codecs_code_page_encode_impl(module, code_page, str, errors); + +exit: + return return_value; +} + +#endif /* defined(HAVE_MBCS) */ + +PyDoc_STRVAR(_codecs_register_error__doc__, +"register_error($module, errors, handler, /)\n" +"--\n" +"\n" +"Register the specified error handler under the name errors.\n" +"\n" +"handler must be a callable object, that will be called with an exception\n" +"instance containing information about the location of the encoding/decoding\n" +"error and must return a (replacement, new position) tuple."); + +#define _CODECS_REGISTER_ERROR_METHODDEF \ + {"register_error", (PyCFunction)_codecs_register_error, METH_VARARGS, _codecs_register_error__doc__}, + +static PyObject * +_codecs_register_error_impl(PyModuleDef *module, const char *errors, + PyObject *handler); + +static PyObject * +_codecs_register_error(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + const char *errors; + PyObject *handler; + + if (!PyArg_ParseTuple(args, "sO:register_error", + &errors, &handler)) + goto exit; + return_value = _codecs_register_error_impl(module, errors, handler); + +exit: + return return_value; +} + +PyDoc_STRVAR(_codecs_lookup_error__doc__, +"lookup_error($module, name, /)\n" +"--\n" +"\n" +"lookup_error(errors) -> handler\n" +"\n" +"Return the error handler for the specified error handling name or raise a\n" +"LookupError, if no handler exists under this name."); + +#define _CODECS_LOOKUP_ERROR_METHODDEF \ + {"lookup_error", (PyCFunction)_codecs_lookup_error, METH_O, _codecs_lookup_error__doc__}, + +static PyObject * +_codecs_lookup_error_impl(PyModuleDef *module, const char *name); + +static PyObject * +_codecs_lookup_error(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + const char *name; + + if (!PyArg_Parse(arg, "s:lookup_error", &name)) + goto exit; + return_value = _codecs_lookup_error_impl(module, name); + +exit: + return return_value; +} + +#ifndef _CODECS_MBCS_DECODE_METHODDEF + #define _CODECS_MBCS_DECODE_METHODDEF +#endif /* !defined(_CODECS_MBCS_DECODE_METHODDEF) */ + +#ifndef _CODECS_CODE_PAGE_DECODE_METHODDEF + #define _CODECS_CODE_PAGE_DECODE_METHODDEF +#endif /* !defined(_CODECS_CODE_PAGE_DECODE_METHODDEF) */ + +#ifndef _CODECS_MBCS_ENCODE_METHODDEF + #define _CODECS_MBCS_ENCODE_METHODDEF +#endif /* !defined(_CODECS_MBCS_ENCODE_METHODDEF) */ + +#ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF + #define _CODECS_CODE_PAGE_ENCODE_METHODDEF +#endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ +/*[clinic end generated code: output=713a4081788da1bc input=a9049054013a1b77]*/ -- cgit v1.2.1 From f4e329b23e85c41d3d3eb83fd42b43dcf3fb9347 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 12 May 2015 14:00:22 +0300 Subject: Fixed compilation on Windows for issue #20173. --- Modules/_codecsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index 0e90f3c9c6..cf67c462e7 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -644,7 +644,7 @@ _codecs_code_page_decode_impl(PyModuleDef *module, int codepage, /*[clinic end generated code: output=4318e3d9971e31ba input=4f3152a304e21d51]*/ { Py_ssize_t consumed = data->len; - PyObject *decoded = PyUnicode_DecodeCodePageStateful(code_page, + PyObject *decoded = PyUnicode_DecodeCodePageStateful(codepage, data->buf, data->len, errors, final ? NULL : &consumed); -- cgit v1.2.1 From 8689bcdb5a2f2d2453268c6fe14b6441bd5f26d0 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Tue, 12 May 2015 17:01:05 +0300 Subject: Issue #23796: peak and read1 methods of BufferedReader now raise ValueError if they called on a closed object. Patch by John Hergenroeder. --- Modules/_io/bufferedio.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Modules') diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 2c9064855a..23ba3df866 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -871,6 +871,8 @@ _io__Buffered_peek_impl(buffered *self, Py_ssize_t size) PyObject *res = NULL; CHECK_INITIALIZED(self) + CHECK_CLOSED(self, "peek of closed file") + if (!ENTER_BUFFERED(self)) return NULL; @@ -947,6 +949,9 @@ _io__Buffered_read1_impl(buffered *self, Py_ssize_t n) "read length must be positive"); return NULL; } + + CHECK_CLOSED(self, "read of closed file") + if (n == 0) return PyBytes_FromStringAndSize(NULL, 0); -- cgit v1.2.1 From 42d04f8151c7c200d1c55f0a3a6f9bb455f07183 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 13 May 2015 00:19:51 +0300 Subject: Issue #22486: Added the math.gcd() function. The fractions.gcd() function now is deprecated. Based on patch by Mark Dickinson. --- Modules/mathmodule.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'Modules') diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 153d152a2e..a65de474bc 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -685,6 +685,33 @@ m_log10(double x) } +static PyObject * +math_gcd(PyObject *self, PyObject *args) +{ + PyObject *a, *b, *g; + + if (!PyArg_ParseTuple(args, "OO:gcd", &a, &b)) + return NULL; + + a = PyNumber_Index(a); + if (a == NULL) + return NULL; + b = PyNumber_Index(b); + if (b == NULL) { + Py_DECREF(a); + return NULL; + } + g = _PyLong_GCD(a, b); + Py_DECREF(a); + Py_DECREF(b); + return g; +} + +PyDoc_STRVAR(math_gcd_doc, +"gcd(x, y) -> int\n\ +greatest common divisor of x and y"); + + /* Call is_error when errno != 0, and where x is the result libm * returned. is_error will usually set up an exception and return * true (1), but may return false (0) without setting up an exception. @@ -1987,6 +2014,7 @@ static PyMethodDef math_methods[] = { {"frexp", math_frexp, METH_O, math_frexp_doc}, {"fsum", math_fsum, METH_O, math_fsum_doc}, {"gamma", math_gamma, METH_O, math_gamma_doc}, + {"gcd", math_gcd, METH_VARARGS, math_gcd_doc}, {"hypot", math_hypot, METH_VARARGS, math_hypot_doc}, {"isfinite", math_isfinite, METH_O, math_isfinite_doc}, {"isinf", math_isinf, METH_O, math_isinf_doc}, -- cgit v1.2.1 From 468fb42a898108d16fc92495d06a8508982773b4 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 13 May 2015 00:52:39 +0300 Subject: Converted os._getfullpathname() and os._isdir() to Argument Clinic. --- Modules/clinic/posixmodule.c.h | 74 ++++++++++++++++++++++++++++++- Modules/posixmodule.c | 98 +++++++++++++++++------------------------- 2 files changed, 112 insertions(+), 60 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index e305512596..98eeae4861 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -890,6 +890,38 @@ exit: #if defined(MS_WINDOWS) +PyDoc_STRVAR(os__getfullpathname__doc__, +"_getfullpathname($module, path, /)\n" +"--\n" +"\n"); + +#define OS__GETFULLPATHNAME_METHODDEF \ + {"_getfullpathname", (PyCFunction)os__getfullpathname, METH_O, os__getfullpathname__doc__}, + +static PyObject * +os__getfullpathname_impl(PyModuleDef *module, path_t *path); + +static PyObject * +os__getfullpathname(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + path_t path = PATH_T_INITIALIZE("_getfullpathname", "path", 0, 0); + + if (!PyArg_Parse(arg, "O&:_getfullpathname", path_converter, &path)) + goto exit; + return_value = os__getfullpathname_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + PyDoc_STRVAR(os__getfinalpathname__doc__, "_getfinalpathname($module, path, /)\n" "--\n" @@ -920,6 +952,38 @@ exit: #if defined(MS_WINDOWS) +PyDoc_STRVAR(os__isdir__doc__, +"_isdir($module, path, /)\n" +"--\n" +"\n"); + +#define OS__ISDIR_METHODDEF \ + {"_isdir", (PyCFunction)os__isdir, METH_O, os__isdir__doc__}, + +static PyObject * +os__isdir_impl(PyModuleDef *module, path_t *path); + +static PyObject * +os__isdir(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + path_t path = PATH_T_INITIALIZE("_isdir", "path", 0, 0); + + if (!PyArg_Parse(arg, "O&:_isdir", path_converter, &path)) + goto exit; + return_value = os__isdir_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + PyDoc_STRVAR(os__getvolumepathname__doc__, "_getvolumepathname($module, /, path)\n" "--\n" @@ -5313,10 +5377,18 @@ exit: #define OS_LINK_METHODDEF #endif /* !defined(OS_LINK_METHODDEF) */ +#ifndef OS__GETFULLPATHNAME_METHODDEF + #define OS__GETFULLPATHNAME_METHODDEF +#endif /* !defined(OS__GETFULLPATHNAME_METHODDEF) */ + #ifndef OS__GETFINALPATHNAME_METHODDEF #define OS__GETFINALPATHNAME_METHODDEF #endif /* !defined(OS__GETFINALPATHNAME_METHODDEF) */ +#ifndef OS__ISDIR_METHODDEF + #define OS__ISDIR_METHODDEF +#endif /* !defined(OS__ISDIR_METHODDEF) */ + #ifndef OS__GETVOLUMEPATHNAME_METHODDEF #define OS__GETVOLUMEPATHNAME_METHODDEF #endif /* !defined(OS__GETVOLUMEPATHNAME_METHODDEF) */ @@ -5716,4 +5788,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=bba73c13a01c09a0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f3f92b2d2e2c3fe3 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 3bed9583a9..ec8c526c0a 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -3748,62 +3748,53 @@ os_listdir_impl(PyModuleDef *module, path_t *path) #ifdef MS_WINDOWS /* A helper function for abspath on win32 */ -/* AC 3.5: probably just convert to using path converter */ +/*[clinic input] +os._getfullpathname + + path: path_t + / + +[clinic start generated code]*/ + static PyObject * -posix__getfullpathname(PyObject *self, PyObject *args) +os__getfullpathname_impl(PyModuleDef *module, path_t *path) +/*[clinic end generated code: output=b90b1f103b08773f input=332ed537c29d0a3e]*/ { - const char *path; - char outbuf[MAX_PATH]; - char *temp; - PyObject *po; - - if (PyArg_ParseTuple(args, "U|:_getfullpathname", &po)) + if (!path->narrow) { - wchar_t *wpath; wchar_t woutbuf[MAX_PATH], *woutbufp = woutbuf; wchar_t *wtemp; DWORD result; PyObject *v; - wpath = PyUnicode_AsUnicode(po); - if (wpath == NULL) - return NULL; - result = GetFullPathNameW(wpath, + result = GetFullPathNameW(path->wide, Py_ARRAY_LENGTH(woutbuf), woutbuf, &wtemp); if (result > Py_ARRAY_LENGTH(woutbuf)) { woutbufp = PyMem_New(wchar_t, result); if (!woutbufp) return PyErr_NoMemory(); - result = GetFullPathNameW(wpath, result, woutbufp, &wtemp); + result = GetFullPathNameW(path->wide, result, woutbufp, &wtemp); } if (result) v = PyUnicode_FromWideChar(woutbufp, wcslen(woutbufp)); else - v = win32_error_object("GetFullPathNameW", po); + v = win32_error_object("GetFullPathNameW", path->object); if (woutbufp != woutbuf) PyMem_Free(woutbufp); return v; } - /* Drop the argument parsing error as narrow strings - are also valid. */ - PyErr_Clear(); + else { + char outbuf[MAX_PATH]; + char *temp; - if (!PyArg_ParseTuple (args, "y:_getfullpathname", - &path)) - return NULL; - if (win32_warn_bytes_api()) - return NULL; - if (!GetFullPathName(path, Py_ARRAY_LENGTH(outbuf), - outbuf, &temp)) { - win32_error("GetFullPathName", path); - return NULL; - } - if (PyUnicode_Check(PyTuple_GetItem(args, 0))) { - return PyUnicode_Decode(outbuf, strlen(outbuf), - Py_FileSystemDefaultEncoding, NULL); + if (!GetFullPathName(path->narrow, Py_ARRAY_LENGTH(outbuf), + outbuf, &temp)) { + win32_error_object("GetFullPathName", path->object); + return NULL; + } + return PyBytes_FromString(outbuf); } - return PyBytes_FromString(outbuf); } @@ -3872,37 +3863,28 @@ os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) PyDoc_STRVAR(posix__isdir__doc__, "Return true if the pathname refers to an existing directory."); -/* AC 3.5: convert using path converter */ +/*[clinic input] +os._isdir + + path: path_t + / + +[clinic start generated code]*/ + static PyObject * -posix__isdir(PyObject *self, PyObject *args) +os__isdir_impl(PyModuleDef *module, path_t *path) +/*[clinic end generated code: output=f17b2d4e1994b0ff input=e794f12faab62a2a]*/ { - const char *path; - PyObject *po; DWORD attributes; - if (PyArg_ParseTuple(args, "U|:_isdir", &po)) { - wchar_t *wpath = PyUnicode_AsUnicode(po); - if (wpath == NULL) - return NULL; - - attributes = GetFileAttributesW(wpath); - if (attributes == INVALID_FILE_ATTRIBUTES) - Py_RETURN_FALSE; - goto check; - } - /* Drop the argument parsing error as narrow strings - are also valid. */ - PyErr_Clear(); + if (!path->narrow) + attributes = GetFileAttributesW(path->wide); + else + attributes = GetFileAttributesA(path->narrow); - if (!PyArg_ParseTuple(args, "y:_isdir", &path)) - return NULL; - if (win32_warn_bytes_api()) - return NULL; - attributes = GetFileAttributesA(path); if (attributes == INVALID_FILE_ATTRIBUTES) Py_RETURN_FALSE; -check: if (attributes & FILE_ATTRIBUTE_DIRECTORY) Py_RETURN_TRUE; else @@ -12351,10 +12333,8 @@ static PyMethodDef posix_methods[] = { OS_FPATHCONF_METHODDEF OS_PATHCONF_METHODDEF OS_ABORT_METHODDEF -#ifdef MS_WINDOWS - {"_getfullpathname", posix__getfullpathname, METH_VARARGS, NULL}, - {"_isdir", posix__isdir, METH_VARARGS, posix__isdir__doc__}, -#endif + OS__GETFULLPATHNAME_METHODDEF + OS__ISDIR_METHODDEF OS__GETDISKUSAGE_METHODDEF OS__GETFINALPATHNAME_METHODDEF OS__GETVOLUMEPATHNAME_METHODDEF -- cgit v1.2.1 From 86a328a2baadabc480529e93a53512affe04eb52 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 12 May 2015 21:40:50 -0700 Subject: More timings suggest that 2500 is closer to the break-even point. --- Modules/_heapqmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 01b35be8eb..88c35cf32e 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -335,7 +335,7 @@ heapify_internal(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) in cache, we prefer the simpler algorithm with less branching. */ n = PyList_GET_SIZE(heap); - if (n > 10000) + if (n > 2500) return cache_friendly_heapify(heap, siftup_func); /* Transform bottom-up. The largest index there's any point to -- cgit v1.2.1 From c64878f1b302352b322ed2e530b75ea50dfaf17a Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Wed, 13 May 2015 01:22:54 -0500 Subject: Issue #20172: Convert the _winapi module to Argument Clinic. --- Modules/_winapi.c | 837 +++++++++++++++++++++++--------------------- Modules/clinic/_winapi.c.h | 851 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1292 insertions(+), 396 deletions(-) create mode 100644 Modules/clinic/_winapi.c.h (limited to 'Modules') diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 0274874dda..83c3a3bb35 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -58,8 +58,6 @@ #define F_HANDLE F_POINTER #define F_DWORD "k" -#define F_BOOL "i" -#define F_UINT "I" #define T_HANDLE T_POINTER @@ -147,17 +145,68 @@ overlapped_dealloc(OverlappedObject *self) PyObject_Del(self); } +/*[clinic input] +module _winapi +class _winapi.Overlapped "OverlappedObject *" "&OverlappedType" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=c13d3f5fd1dabb84]*/ + +/*[python input] +def create_converter(type_, format_unit): + name = type_ + '_converter' + # registered upon creation by CConverter's metaclass + type(name, (CConverter,), {'type': type_, 'format_unit': format_unit}) + +# format unit differs between platforms for these +create_converter('HANDLE', '" F_HANDLE "') +create_converter('HMODULE', '" F_HANDLE "') +create_converter('LPSECURITY_ATTRIBUTES', '" F_POINTER "') + +create_converter('BOOL', 'i') # F_BOOL used previously (always 'i') +create_converter('DWORD', 'k') # F_DWORD is always "k" (which is much shorter) +create_converter('LPCTSTR', 's') +create_converter('LPWSTR', 'u') +create_converter('UINT', 'I') # F_UINT used previously (always 'I') + +class HANDLE_return_converter(CReturnConverter): + type = 'HANDLE' + + def render(self, function, data): + self.declare(data) + self.err_occurred_if("_return_value == INVALID_HANDLE_VALUE", data) + data.return_conversion.append( + 'if (_return_value == NULL)\n Py_RETURN_NONE;\n') + data.return_conversion.append( + 'return_value = HANDLE_TO_PYNUM(_return_value);\n') + +class DWORD_return_converter(CReturnConverter): + type = 'DWORD' + + def render(self, function, data): + self.declare(data) + self.err_occurred_if("_return_value == DWORD_MAX", data) + data.return_conversion.append( + 'return_value = Py_BuildValue("k", _return_value);\n') +[python start generated code]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=374076979596ebba]*/ + +#include "clinic/_winapi.c.h" + +/*[clinic input] +_winapi.Overlapped.GetOverlappedResult + + wait: bool + / +[clinic start generated code]*/ + static PyObject * -overlapped_GetOverlappedResult(OverlappedObject *self, PyObject *waitobj) +_winapi_Overlapped_GetOverlappedResult_impl(OverlappedObject *self, int wait) +/*[clinic end generated code: output=bdd0c1ed6518cd03 input=194505ee8e0e3565]*/ { - int wait; BOOL res; DWORD transferred = 0; DWORD err; - wait = PyObject_IsTrue(waitobj); - if (wait < 0) - return NULL; Py_BEGIN_ALLOW_THREADS res = GetOverlappedResult(self->handle, &self->overlapped, &transferred, wait != 0); @@ -186,8 +235,13 @@ overlapped_GetOverlappedResult(OverlappedObject *self, PyObject *waitobj) return Py_BuildValue("II", (unsigned) transferred, (unsigned) err); } +/*[clinic input] +_winapi.Overlapped.getbuffer +[clinic start generated code]*/ + static PyObject * -overlapped_getbuffer(OverlappedObject *self) +_winapi_Overlapped_getbuffer_impl(OverlappedObject *self) +/*[clinic end generated code: output=95a3eceefae0f748 input=347fcfd56b4ceabd]*/ { PyObject *res; if (!self->completed) { @@ -201,8 +255,13 @@ overlapped_getbuffer(OverlappedObject *self) return res; } +/*[clinic input] +_winapi.Overlapped.cancel +[clinic start generated code]*/ + static PyObject * -overlapped_cancel(OverlappedObject *self) +_winapi_Overlapped_cancel_impl(OverlappedObject *self) +/*[clinic end generated code: output=fcb9ab5df4ebdae5 input=cbf3da142290039f]*/ { BOOL res = TRUE; @@ -223,10 +282,9 @@ overlapped_cancel(OverlappedObject *self) } static PyMethodDef overlapped_methods[] = { - {"GetOverlappedResult", (PyCFunction) overlapped_GetOverlappedResult, - METH_O, NULL}, - {"getbuffer", (PyCFunction) overlapped_getbuffer, METH_NOARGS, NULL}, - {"cancel", (PyCFunction) overlapped_cancel, METH_NOARGS, NULL}, + _WINAPI_OVERLAPPED_GETOVERLAPPEDRESULT_METHODDEF + _WINAPI_OVERLAPPED_GETBUFFER_METHODDEF + _WINAPI_OVERLAPPED_CANCEL_METHODDEF {NULL} }; @@ -300,22 +358,23 @@ new_overlapped(HANDLE handle) /* -------------------------------------------------------------------- */ /* windows API functions */ -PyDoc_STRVAR(CloseHandle_doc, -"CloseHandle(handle) -> None\n\ -\n\ -Close handle."); +/*[clinic input] +_winapi.CloseHandle + + handle: HANDLE + / + +Close handle. +[clinic start generated code]*/ static PyObject * -winapi_CloseHandle(PyObject *self, PyObject *args) +_winapi_CloseHandle_impl(PyModuleDef *module, HANDLE handle) +/*[clinic end generated code: output=0548595c71cb4bf7 input=7f0e4ac36e0352b8]*/ { - HANDLE hObject; BOOL success; - if (!PyArg_ParseTuple(args, F_HANDLE ":CloseHandle", &hObject)) - return NULL; - Py_BEGIN_ALLOW_THREADS - success = CloseHandle(hObject); + success = CloseHandle(handle); Py_END_ALLOW_THREADS if (!success) @@ -324,28 +383,28 @@ winapi_CloseHandle(PyObject *self, PyObject *args) Py_RETURN_NONE; } +/*[clinic input] +_winapi.ConnectNamedPipe + + handle: HANDLE + overlapped as use_overlapped: int(c_default='0') = False +[clinic start generated code]*/ + static PyObject * -winapi_ConnectNamedPipe(PyObject *self, PyObject *args, PyObject *kwds) +_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, int use_overlapped) +/*[clinic end generated code: output=d9a64e59c27e10f6 input=edc83da007ebf3be]*/ { - HANDLE hNamedPipe; - int use_overlapped = 0; BOOL success; OverlappedObject *overlapped = NULL; - static char *kwlist[] = {"handle", "overlapped", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, - F_HANDLE "|" F_BOOL, kwlist, - &hNamedPipe, &use_overlapped)) - return NULL; if (use_overlapped) { - overlapped = new_overlapped(hNamedPipe); + overlapped = new_overlapped(handle); if (!overlapped) return NULL; } Py_BEGIN_ALLOW_THREADS - success = ConnectNamedPipe(hNamedPipe, + success = ConnectNamedPipe(handle, overlapped ? &overlapped->overlapped : NULL); Py_END_ALLOW_THREADS @@ -369,45 +428,50 @@ winapi_ConnectNamedPipe(PyObject *self, PyObject *args, PyObject *kwds) Py_RETURN_NONE; } -static PyObject * -winapi_CreateFile(PyObject *self, PyObject *args) +/*[clinic input] +_winapi.CreateFile -> HANDLE + + file_name: LPCTSTR + desired_access: DWORD + share_mode: DWORD + security_attributes: LPSECURITY_ATTRIBUTES + creation_disposition: DWORD + flags_and_attributes: DWORD + template_file: HANDLE + / +[clinic start generated code]*/ + +static HANDLE +_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file) +/*[clinic end generated code: output=f8649129a4959288 input=6423c3e40372dbd5]*/ { - LPCTSTR lpFileName; - DWORD dwDesiredAccess; - DWORD dwShareMode; - LPSECURITY_ATTRIBUTES lpSecurityAttributes; - DWORD dwCreationDisposition; - DWORD dwFlagsAndAttributes; - HANDLE hTemplateFile; HANDLE handle; - if (!PyArg_ParseTuple(args, "s" F_DWORD F_DWORD F_POINTER - F_DWORD F_DWORD F_HANDLE, - &lpFileName, &dwDesiredAccess, &dwShareMode, - &lpSecurityAttributes, &dwCreationDisposition, - &dwFlagsAndAttributes, &hTemplateFile)) - return NULL; - Py_BEGIN_ALLOW_THREADS - handle = CreateFile(lpFileName, dwDesiredAccess, - dwShareMode, lpSecurityAttributes, - dwCreationDisposition, - dwFlagsAndAttributes, hTemplateFile); + handle = CreateFile(file_name, desired_access, + share_mode, security_attributes, + creation_disposition, + flags_and_attributes, template_file); Py_END_ALLOW_THREADS if (handle == INVALID_HANDLE_VALUE) - return PyErr_SetFromWindowsErr(0); + PyErr_SetFromWindowsErr(0); - return Py_BuildValue(F_HANDLE, handle); + return handle; } +/*[clinic input] +_winapi.CreateJunction + + src_path: LPWSTR + dst_path: LPWSTR + / +[clinic start generated code]*/ + static PyObject * -winapi_CreateJunction(PyObject *self, PyObject *args) +_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, LPWSTR dst_path) +/*[clinic end generated code: output=df22af7be7045584 input=8cd1f9964b6e3d36]*/ { - /* Input arguments */ - LPWSTR src_path = NULL; - LPWSTR dst_path = NULL; - /* Privilege adjustment */ HANDLE token = NULL; TOKEN_PRIVILEGES tp; @@ -422,9 +486,6 @@ winapi_CreateJunction(PyObject *self, PyObject *args) HANDLE junction = NULL; DWORD ret = 0; - if (!PyArg_ParseTuple(args, "uu", &src_path, &dst_path)) - return NULL; - if (src_path == NULL || dst_path == NULL) return PyErr_SetFromWindowsErr(ERROR_INVALID_PARAMETER); @@ -535,62 +596,60 @@ cleanup: Py_RETURN_NONE; } -static PyObject * -winapi_CreateNamedPipe(PyObject *self, PyObject *args) +/*[clinic input] +_winapi.CreateNamedPipe -> HANDLE + + name: LPCTSTR + open_mode: DWORD + pipe_mode: DWORD + max_instances: DWORD + out_buffer_size: DWORD + in_buffer_size: DWORD + default_timeout: DWORD + security_attributes: LPSECURITY_ATTRIBUTES + / +[clinic start generated code]*/ + +static HANDLE +_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD open_mode, DWORD pipe_mode, DWORD max_instances, DWORD out_buffer_size, DWORD in_buffer_size, DWORD default_timeout, LPSECURITY_ATTRIBUTES security_attributes) +/*[clinic end generated code: output=711e231639c25c24 input=5a73530b84d8bc37]*/ { - LPCTSTR lpName; - DWORD dwOpenMode; - DWORD dwPipeMode; - DWORD nMaxInstances; - DWORD nOutBufferSize; - DWORD nInBufferSize; - DWORD nDefaultTimeOut; - LPSECURITY_ATTRIBUTES lpSecurityAttributes; HANDLE handle; - if (!PyArg_ParseTuple(args, "s" F_DWORD F_DWORD F_DWORD - F_DWORD F_DWORD F_DWORD F_POINTER, - &lpName, &dwOpenMode, &dwPipeMode, - &nMaxInstances, &nOutBufferSize, - &nInBufferSize, &nDefaultTimeOut, - &lpSecurityAttributes)) - return NULL; - Py_BEGIN_ALLOW_THREADS - handle = CreateNamedPipe(lpName, dwOpenMode, dwPipeMode, - nMaxInstances, nOutBufferSize, - nInBufferSize, nDefaultTimeOut, - lpSecurityAttributes); + handle = CreateNamedPipe(name, open_mode, pipe_mode, + max_instances, out_buffer_size, + in_buffer_size, default_timeout, + security_attributes); Py_END_ALLOW_THREADS if (handle == INVALID_HANDLE_VALUE) - return PyErr_SetFromWindowsErr(0); + PyErr_SetFromWindowsErr(0); - return Py_BuildValue(F_HANDLE, handle); + return handle; } -PyDoc_STRVAR(CreatePipe_doc, -"CreatePipe(pipe_attrs, size) -> (read_handle, write_handle)\n\ -\n\ -Create an anonymous pipe, and return handles to the read and\n\ -write ends of the pipe.\n\ -\n\ -pipe_attrs is ignored internally and can be None."); +/*[clinic input] +_winapi.CreatePipe + + pipe_attrs: object + Ignored internally, can be None. + size: DWORD + / + +Create an anonymous pipe. + +Returns a 2-tuple of handles, to the read and write ends of the pipe. +[clinic start generated code]*/ static PyObject * -winapi_CreatePipe(PyObject* self, PyObject* args) +_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, DWORD size) +/*[clinic end generated code: output=ed09baf1d43086df input=c4f2cfa56ef68d90]*/ { HANDLE read_pipe; HANDLE write_pipe; BOOL result; - PyObject* pipe_attributes; /* ignored */ - DWORD size; - - if (! PyArg_ParseTuple(args, "O" F_DWORD ":CreatePipe", - &pipe_attributes, &size)) - return NULL; - Py_BEGIN_ALLOW_THREADS result = CreatePipe(&read_pipe, &write_pipe, NULL, size); Py_END_ALLOW_THREADS @@ -721,20 +780,31 @@ getenvironment(PyObject* environment) return NULL; } -PyDoc_STRVAR(CreateProcess_doc, -"CreateProcess(app_name, cmd_line, proc_attrs, thread_attrs,\n\ - inherit, flags, env_mapping, curdir,\n\ - startup_info) -> (proc_handle, thread_handle,\n\ - pid, tid)\n\ -\n\ -Create a new process and its primary thread. The return\n\ -value is a tuple of the process handle, thread handle,\n\ -process ID, and thread ID.\n\ -\n\ -proc_attrs and thread_attrs are ignored internally and can be None."); +/*[clinic input] +_winapi.CreateProcess + + application_name: Py_UNICODE(nullable=True) + command_line: Py_UNICODE(nullable=True) + proc_attrs: object + Ignored internally, can be None. + thread_attrs: object + Ignored internally, can be None. + inherit_handles: BOOL + creation_flags: DWORD + env_mapping: object + current_directory: Py_UNICODE(nullable=True) + startup_info: object + / + +Create a new process and its primary thread. + +The return value is a tuple of the process handle, thread handle, +process ID, and thread ID. +[clinic start generated code]*/ static PyObject * -winapi_CreateProcess(PyObject* self, PyObject* args) +_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, Py_UNICODE *command_line, PyObject *proc_attrs, PyObject *thread_attrs, BOOL inherit_handles, DWORD creation_flags, PyObject *env_mapping, Py_UNICODE *current_directory, PyObject *startup_info) +/*[clinic end generated code: output=c279c1271b4c45cf input=6667ea0bc7036472]*/ { BOOL result; PROCESS_INFORMATION pi; @@ -742,28 +812,6 @@ winapi_CreateProcess(PyObject* self, PyObject* args) PyObject* environment; wchar_t *wenvironment; - wchar_t* application_name; - wchar_t* command_line; - PyObject* process_attributes; /* ignored */ - PyObject* thread_attributes; /* ignored */ - BOOL inherit_handles; - DWORD creation_flags; - PyObject* env_mapping; - wchar_t* current_directory; - PyObject* startup_info; - - if (! PyArg_ParseTuple(args, "ZZOO" F_BOOL F_DWORD "OZO:CreateProcess", - &application_name, - &command_line, - &process_attributes, - &thread_attributes, - &inherit_handles, - &creation_flags, - &env_mapping, - ¤t_directory, - &startup_info)) - return NULL; - ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); @@ -817,41 +865,31 @@ winapi_CreateProcess(PyObject* self, PyObject* args) pi.dwThreadId); } -PyDoc_STRVAR(DuplicateHandle_doc, -"DuplicateHandle(source_proc_handle, source_handle,\n\ - target_proc_handle, target_handle, access,\n\ - inherit[, options]) -> handle\n\ -\n\ -Return a duplicate handle object.\n\ -\n\ -The duplicate handle refers to the same object as the original\n\ -handle. Therefore, any changes to the object are reflected\n\ -through both handles."); +/*[clinic input] +_winapi.DuplicateHandle -> HANDLE -static PyObject * -winapi_DuplicateHandle(PyObject* self, PyObject* args) + source_process_handle: HANDLE + source_handle: HANDLE + target_process_handle: HANDLE + desired_access: DWORD + inherit_handle: BOOL + options: DWORD = 0 + / + +Return a duplicate handle object. + +The duplicate handle refers to the same object as the original +handle. Therefore, any changes to the object are reflected +through both handles. +[clinic start generated code]*/ + +static HANDLE +_winapi_DuplicateHandle_impl(PyModuleDef *module, HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, DWORD desired_access, BOOL inherit_handle, DWORD options) +/*[clinic end generated code: output=24a7836ca4d94aba input=b933e3f2356a8c12]*/ { HANDLE target_handle; BOOL result; - HANDLE source_process_handle; - HANDLE source_handle; - HANDLE target_process_handle; - DWORD desired_access; - BOOL inherit_handle; - DWORD options = 0; - - if (! PyArg_ParseTuple(args, - F_HANDLE F_HANDLE F_HANDLE F_DWORD F_BOOL F_DWORD - ":DuplicateHandle", - &source_process_handle, - &source_handle, - &target_process_handle, - &desired_access, - &inherit_handle, - &options)) - return NULL; - Py_BEGIN_ALLOW_THREADS result = DuplicateHandle( source_process_handle, @@ -864,98 +902,111 @@ winapi_DuplicateHandle(PyObject* self, PyObject* args) ); Py_END_ALLOW_THREADS - if (! result) - return PyErr_SetFromWindowsErr(GetLastError()); + if (! result) { + PyErr_SetFromWindowsErr(GetLastError()); + return INVALID_HANDLE_VALUE; + } - return HANDLE_TO_PYNUM(target_handle); + return target_handle; } -static PyObject * -winapi_ExitProcess(PyObject *self, PyObject *args) -{ - UINT uExitCode; +/*[clinic input] +_winapi.ExitProcess - if (!PyArg_ParseTuple(args, F_UINT, &uExitCode)) - return NULL; + ExitCode: UINT + / + +[clinic start generated code]*/ +static PyObject * +_winapi_ExitProcess_impl(PyModuleDef *module, UINT ExitCode) +/*[clinic end generated code: output=25f3b499c24cedc8 input=4f05466a9406c558]*/ +{ #if defined(Py_DEBUG) SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOALIGNMENTFAULTEXCEPT| SEM_NOGPFAULTERRORBOX|SEM_NOOPENFILEERRORBOX); _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG); #endif - ExitProcess(uExitCode); + ExitProcess(ExitCode); return NULL; } -PyDoc_STRVAR(GetCurrentProcess_doc, -"GetCurrentProcess() -> handle\n\ -\n\ -Return a handle object for the current process."); +/*[clinic input] +_winapi.GetCurrentProcess -> HANDLE -static PyObject * -winapi_GetCurrentProcess(PyObject* self, PyObject* args) -{ - if (! PyArg_ParseTuple(args, ":GetCurrentProcess")) - return NULL; +Return a handle object for the current process. +[clinic start generated code]*/ - return HANDLE_TO_PYNUM(GetCurrentProcess()); +static HANDLE +_winapi_GetCurrentProcess_impl(PyModuleDef *module) +/*[clinic end generated code: output=be29ac3ad5f8291e input=b213403fd4b96b41]*/ +{ + return GetCurrentProcess(); } -PyDoc_STRVAR(GetExitCodeProcess_doc, -"GetExitCodeProcess(handle) -> Exit code\n\ -\n\ -Return the termination status of the specified process."); +/*[clinic input] +_winapi.GetExitCodeProcess -> DWORD -static PyObject * -winapi_GetExitCodeProcess(PyObject* self, PyObject* args) + process: HANDLE + / + +Return the termination status of the specified process. +[clinic start generated code]*/ + +static DWORD +_winapi_GetExitCodeProcess_impl(PyModuleDef *module, HANDLE process) +/*[clinic end generated code: output=0b10f0848a410f65 input=61b6bfc7dc2ee374]*/ { DWORD exit_code; BOOL result; - HANDLE process; - if (! PyArg_ParseTuple(args, F_HANDLE ":GetExitCodeProcess", &process)) - return NULL; - result = GetExitCodeProcess(process, &exit_code); - if (! result) - return PyErr_SetFromWindowsErr(GetLastError()); + if (! result) { + PyErr_SetFromWindowsErr(GetLastError()); + exit_code = DWORD_MAX; + } - return PyLong_FromUnsignedLong(exit_code); + return exit_code; } -static PyObject * -winapi_GetLastError(PyObject *self, PyObject *args) +/*[clinic input] +_winapi.GetLastError -> DWORD +[clinic start generated code]*/ + +static DWORD +_winapi_GetLastError_impl(PyModuleDef *module) +/*[clinic end generated code: output=0ea00d8e67bdd056 input=62d47fb9bce038ba]*/ { - return Py_BuildValue(F_DWORD, GetLastError()); + return GetLastError(); } -PyDoc_STRVAR(GetModuleFileName_doc, -"GetModuleFileName(module) -> path\n\ -\n\ -Return the fully-qualified path for the file that contains\n\ -the specified module. The module must have been loaded by the\n\ -current process.\n\ -\n\ -The module parameter should be a handle to the loaded module\n\ -whose path is being requested. If this parameter is 0, \n\ -GetModuleFileName retrieves the path of the executable file\n\ -of the current process."); +/*[clinic input] +_winapi.GetModuleFileName + + module_handle: HMODULE + / + +Return the fully-qualified path for the file that contains module. + +The module must have been loaded by the current process. + +The module parameter should be a handle to the loaded module +whose path is being requested. If this parameter is 0, +GetModuleFileName retrieves the path of the executable file +of the current process. +[clinic start generated code]*/ static PyObject * -winapi_GetModuleFileName(PyObject* self, PyObject* args) +_winapi_GetModuleFileName_impl(PyModuleDef *module, HMODULE module_handle) +/*[clinic end generated code: output=90063dc63bdbfa18 input=6d66ff7deca5d11f]*/ { BOOL result; - HMODULE module; WCHAR filename[MAX_PATH]; - if (! PyArg_ParseTuple(args, F_HANDLE ":GetModuleFileName", - &module)) - return NULL; - - result = GetModuleFileNameW(module, filename, MAX_PATH); + result = GetModuleFileNameW(module_handle, filename, MAX_PATH); filename[MAX_PATH-1] = '\0'; if (! result) @@ -964,91 +1015,95 @@ winapi_GetModuleFileName(PyObject* self, PyObject* args) return PyUnicode_FromWideChar(filename, wcslen(filename)); } -PyDoc_STRVAR(GetStdHandle_doc, -"GetStdHandle(handle) -> integer\n\ -\n\ -Return a handle to the specified standard device\n\ -(STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, STD_ERROR_HANDLE).\n\ -The integer associated with the handle object is returned."); +/*[clinic input] +_winapi.GetStdHandle -> HANDLE -static PyObject * -winapi_GetStdHandle(PyObject* self, PyObject* args) + std_handle: DWORD + One of STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, or STD_ERROR_HANDLE. + / + +Return a handle to the specified standard device. + +The integer associated with the handle object is returned. +[clinic start generated code]*/ + +static HANDLE +_winapi_GetStdHandle_impl(PyModuleDef *module, DWORD std_handle) +/*[clinic end generated code: output=5f5ca28b28c6fad2 input=07016b06a2fc8826]*/ { HANDLE handle; - DWORD std_handle; - - if (! PyArg_ParseTuple(args, F_DWORD ":GetStdHandle", &std_handle)) - return NULL; Py_BEGIN_ALLOW_THREADS handle = GetStdHandle(std_handle); Py_END_ALLOW_THREADS if (handle == INVALID_HANDLE_VALUE) - return PyErr_SetFromWindowsErr(GetLastError()); - - if (! handle) { - Py_INCREF(Py_None); - return Py_None; - } + PyErr_SetFromWindowsErr(GetLastError()); - /* note: returns integer, not handle object */ - return HANDLE_TO_PYNUM(handle); + return handle; } -PyDoc_STRVAR(GetVersion_doc, -"GetVersion() -> version\n\ -\n\ -Return the version number of the current operating system."); +/*[clinic input] +_winapi.GetVersion -> long + +Return the version number of the current operating system. +[clinic start generated code]*/ +static long +_winapi_GetVersion_impl(PyModuleDef *module) +/*[clinic end generated code: output=95a2f8ad3b948ca8 input=e21dff8d0baeded2]*/ /* Disable deprecation warnings about GetVersionEx as the result is being passed straight through to the caller, who is responsible for using it correctly. */ #pragma warning(push) #pragma warning(disable:4996) -static PyObject * -winapi_GetVersion(PyObject* self, PyObject* args) { - if (! PyArg_ParseTuple(args, ":GetVersion")) - return NULL; - - return PyLong_FromUnsignedLong(GetVersion()); + return GetVersion(); } #pragma warning(pop) -static PyObject * -winapi_OpenProcess(PyObject *self, PyObject *args) +/*[clinic input] +_winapi.OpenProcess -> HANDLE + + desired_access: DWORD + inherit_handle: BOOL + process_id: DWORD + / +[clinic start generated code]*/ + +static HANDLE +_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, BOOL inherit_handle, DWORD process_id) +/*[clinic end generated code: output=2a7be5336f16f63c input=ec98c4cf4ea2ec36]*/ { - DWORD dwDesiredAccess; - BOOL bInheritHandle; - DWORD dwProcessId; HANDLE handle; - if (!PyArg_ParseTuple(args, F_DWORD F_BOOL F_DWORD, - &dwDesiredAccess, &bInheritHandle, &dwProcessId)) - return NULL; - - handle = OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId); - if (handle == NULL) - return PyErr_SetFromWindowsErr(0); + handle = OpenProcess(desired_access, inherit_handle, process_id); + if (handle == NULL) { + PyErr_SetFromWindowsErr(0); + handle = INVALID_HANDLE_VALUE; + } - return Py_BuildValue(F_HANDLE, handle); + return handle; } +/*[clinic input] +_winapi.PeekNamedPipe + + handle: HANDLE + size: int = 0 + / +[clinic start generated code]*/ + static PyObject * -winapi_PeekNamedPipe(PyObject *self, PyObject *args) +_winapi_PeekNamedPipe_impl(PyModuleDef *module, HANDLE handle, int size) +/*[clinic end generated code: output=e6c908e2fb63c798 input=c7aa53bfbce69d70]*/ { - HANDLE handle; - int size = 0; PyObject *buf = NULL; DWORD nread, navail, nleft; BOOL ret; - if (!PyArg_ParseTuple(args, F_HANDLE "|i:PeekNamedPipe" , &handle, &size)) - return NULL; - if (size < 0) { PyErr_SetString(PyExc_ValueError, "negative size"); return NULL; @@ -1081,23 +1136,23 @@ winapi_PeekNamedPipe(PyObject *self, PyObject *args) } } +/*[clinic input] +_winapi.ReadFile + + handle: HANDLE + size: int + overlapped as use_overlapped: int(c_default='0') = False +[clinic start generated code]*/ + static PyObject * -winapi_ReadFile(PyObject *self, PyObject *args, PyObject *kwds) +_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, int use_overlapped) +/*[clinic end generated code: output=5a087be0ff44479a input=8dd810194e86ac7d]*/ { - HANDLE handle; - int size; DWORD nread; PyObject *buf; BOOL ret; - int use_overlapped = 0; DWORD err; OverlappedObject *overlapped = NULL; - static char *kwlist[] = {"handle", "size", "overlapped", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, - F_HANDLE "i|i:ReadFile", kwlist, - &handle, &size, &use_overlapped)) - return NULL; buf = PyBytes_FromStringAndSize(NULL, size); if (!buf) @@ -1140,18 +1195,24 @@ winapi_ReadFile(PyObject *self, PyObject *args, PyObject *kwds) return Py_BuildValue("NI", buf, err); } +/*[clinic input] +_winapi.SetNamedPipeHandleState + + named_pipe: HANDLE + mode: object + max_collection_count: object + collect_data_timeout: object + / +[clinic start generated code]*/ + static PyObject * -winapi_SetNamedPipeHandleState(PyObject *self, PyObject *args) +_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, PyObject *mode, PyObject *max_collection_count, PyObject *collect_data_timeout) +/*[clinic end generated code: output=327efd18ff0c30ec input=9142d72163d0faa6]*/ { - HANDLE hNamedPipe; - PyObject *oArgs[3]; + PyObject *oArgs[3] = {mode, max_collection_count, collect_data_timeout}; DWORD dwArgs[3], *pArgs[3] = {NULL, NULL, NULL}; int i; - if (!PyArg_ParseTuple(args, F_HANDLE "OOO", - &hNamedPipe, &oArgs[0], &oArgs[1], &oArgs[2])) - return NULL; - PyErr_Clear(); for (i = 0 ; i < 3 ; i++) { @@ -1163,49 +1224,53 @@ winapi_SetNamedPipeHandleState(PyObject *self, PyObject *args) } } - if (!SetNamedPipeHandleState(hNamedPipe, pArgs[0], pArgs[1], pArgs[2])) + if (!SetNamedPipeHandleState(named_pipe, pArgs[0], pArgs[1], pArgs[2])) return PyErr_SetFromWindowsErr(0); Py_RETURN_NONE; } -PyDoc_STRVAR(TerminateProcess_doc, -"TerminateProcess(handle, exit_code) -> None\n\ -\n\ -Terminate the specified process and all of its threads."); + +/*[clinic input] +_winapi.TerminateProcess + + handle: HANDLE + exit_code: UINT + / + +Terminate the specified process and all of its threads. +[clinic start generated code]*/ static PyObject * -winapi_TerminateProcess(PyObject* self, PyObject* args) +_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, UINT exit_code) +/*[clinic end generated code: output=1559f0f6500c2283 input=d6bc0aa1ee3bb4df]*/ { BOOL result; - HANDLE process; - UINT exit_code; - if (! PyArg_ParseTuple(args, F_HANDLE F_UINT ":TerminateProcess", - &process, &exit_code)) - return NULL; - - result = TerminateProcess(process, exit_code); + result = TerminateProcess(handle, exit_code); if (! result) return PyErr_SetFromWindowsErr(GetLastError()); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } +/*[clinic input] +_winapi.WaitNamedPipe + + name: LPCTSTR + timeout: DWORD + / +[clinic start generated code]*/ + static PyObject * -winapi_WaitNamedPipe(PyObject *self, PyObject *args) +_winapi_WaitNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD timeout) +/*[clinic end generated code: output=5bca5e02f448c9d7 input=36fc781291b1862c]*/ { - LPCTSTR lpNamedPipeName; - DWORD nTimeOut; BOOL success; - if (!PyArg_ParseTuple(args, "s" F_DWORD, &lpNamedPipeName, &nTimeOut)) - return NULL; - Py_BEGIN_ALLOW_THREADS - success = WaitNamedPipe(lpNamedPipeName, nTimeOut); + success = WaitNamedPipe(name, timeout); Py_END_ALLOW_THREADS if (!success) @@ -1214,21 +1279,23 @@ winapi_WaitNamedPipe(PyObject *self, PyObject *args) Py_RETURN_NONE; } +/*[clinic input] +_winapi.WaitForMultipleObjects + + handle_seq: object + wait_flag: BOOL + milliseconds: DWORD(c_default='INFINITE') = _winapi.INFINITE + / +[clinic start generated code]*/ + static PyObject * -winapi_WaitForMultipleObjects(PyObject* self, PyObject* args) +_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, PyObject *handle_seq, BOOL wait_flag, DWORD milliseconds) +/*[clinic end generated code: output=e3efee6b505dd48e input=36f76ca057cd28a0]*/ { DWORD result; - PyObject *handle_seq; HANDLE handles[MAXIMUM_WAIT_OBJECTS]; HANDLE sigint_event = NULL; Py_ssize_t nhandles, i; - BOOL wait_flag; - DWORD milliseconds = INFINITE; - - if (!PyArg_ParseTuple(args, "O" F_BOOL "|" F_DWORD - ":WaitForMultipleObjects", - &handle_seq, &wait_flag, &milliseconds)) - return NULL; if (!PySequence_Check(handle_seq)) { PyErr_Format(PyExc_TypeError, @@ -1282,53 +1349,55 @@ winapi_WaitForMultipleObjects(PyObject* self, PyObject* args) return PyLong_FromLong((int) result); } -PyDoc_STRVAR(WaitForSingleObject_doc, -"WaitForSingleObject(handle, timeout) -> result\n\ -\n\ -Wait until the specified object is in the signaled state or\n\ -the time-out interval elapses. The timeout value is specified\n\ -in milliseconds."); +/*[clinic input] +_winapi.WaitForSingleObject -> long -static PyObject * -winapi_WaitForSingleObject(PyObject* self, PyObject* args) + handle: HANDLE + milliseconds: DWORD + / + +Wait for a single object. + +Wait until the specified object is in the signaled state or +the time-out interval elapses. The timeout value is specified +in milliseconds. +[clinic start generated code]*/ + +static long +_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, DWORD milliseconds) +/*[clinic end generated code: output=0c75bcc6eec6b973 input=443d1ab076edc7b1]*/ { DWORD result; - HANDLE handle; - DWORD milliseconds; - if (! PyArg_ParseTuple(args, F_HANDLE F_DWORD ":WaitForSingleObject", - &handle, - &milliseconds)) - return NULL; - Py_BEGIN_ALLOW_THREADS result = WaitForSingleObject(handle, milliseconds); Py_END_ALLOW_THREADS - if (result == WAIT_FAILED) - return PyErr_SetFromWindowsErr(GetLastError()); + if (result == WAIT_FAILED) { + PyErr_SetFromWindowsErr(GetLastError()); + return -1; + } - return PyLong_FromUnsignedLong(result); + return result; } +/*[clinic input] +_winapi.WriteFile + + handle: HANDLE + buffer: object + overlapped as use_overlapped: int(c_default='0') = False +[clinic start generated code]*/ + static PyObject * -winapi_WriteFile(PyObject *self, PyObject *args, PyObject *kwds) +_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, int use_overlapped) +/*[clinic end generated code: output=37bd88e293079b2c input=51846a5af52053fd]*/ { - HANDLE handle; Py_buffer _buf, *buf; - PyObject *bufobj; DWORD len, written; BOOL ret; - int use_overlapped = 0; DWORD err; OverlappedObject *overlapped = NULL; - static char *kwlist[] = {"handle", "buffer", "overlapped", NULL}; - - /* First get handle and use_overlapped to know which Py_buffer to use */ - if (!PyArg_ParseTupleAndKeywords(args, kwds, - F_HANDLE "O|i:WriteFile", kwlist, - &handle, &bufobj, &use_overlapped)) - return NULL; if (use_overlapped) { overlapped = new_overlapped(handle); @@ -1339,7 +1408,7 @@ winapi_WriteFile(PyObject *self, PyObject *args, PyObject *kwds) else buf = &_buf; - if (!PyArg_Parse(bufobj, "y*", buf)) { + if (!PyArg_Parse(buffer, "y*", buf)) { Py_XDECREF(overlapped); return NULL; } @@ -1372,54 +1441,30 @@ winapi_WriteFile(PyObject *self, PyObject *args, PyObject *kwds) static PyMethodDef winapi_functions[] = { - {"CloseHandle", winapi_CloseHandle, METH_VARARGS, - CloseHandle_doc}, - {"ConnectNamedPipe", (PyCFunction)winapi_ConnectNamedPipe, - METH_VARARGS | METH_KEYWORDS, ""}, - {"CreateFile", winapi_CreateFile, METH_VARARGS, - ""}, - {"CreateJunction", winapi_CreateJunction, METH_VARARGS, - ""}, - {"CreateNamedPipe", winapi_CreateNamedPipe, METH_VARARGS, - ""}, - {"CreatePipe", winapi_CreatePipe, METH_VARARGS, - CreatePipe_doc}, - {"CreateProcess", winapi_CreateProcess, METH_VARARGS, - CreateProcess_doc}, - {"DuplicateHandle", winapi_DuplicateHandle, METH_VARARGS, - DuplicateHandle_doc}, - {"ExitProcess", winapi_ExitProcess, METH_VARARGS, - ""}, - {"GetCurrentProcess", winapi_GetCurrentProcess, METH_VARARGS, - GetCurrentProcess_doc}, - {"GetExitCodeProcess", winapi_GetExitCodeProcess, METH_VARARGS, - GetExitCodeProcess_doc}, - {"GetLastError", winapi_GetLastError, METH_NOARGS, - GetCurrentProcess_doc}, - {"GetModuleFileName", winapi_GetModuleFileName, METH_VARARGS, - GetModuleFileName_doc}, - {"GetStdHandle", winapi_GetStdHandle, METH_VARARGS, - GetStdHandle_doc}, - {"GetVersion", winapi_GetVersion, METH_VARARGS, - GetVersion_doc}, - {"OpenProcess", winapi_OpenProcess, METH_VARARGS, - ""}, - {"PeekNamedPipe", winapi_PeekNamedPipe, METH_VARARGS, - ""}, - {"ReadFile", (PyCFunction)winapi_ReadFile, METH_VARARGS | METH_KEYWORDS, - ""}, - {"SetNamedPipeHandleState", winapi_SetNamedPipeHandleState, METH_VARARGS, - ""}, - {"TerminateProcess", winapi_TerminateProcess, METH_VARARGS, - TerminateProcess_doc}, - {"WaitNamedPipe", winapi_WaitNamedPipe, METH_VARARGS, - ""}, - {"WaitForMultipleObjects", winapi_WaitForMultipleObjects, METH_VARARGS, - ""}, - {"WaitForSingleObject", winapi_WaitForSingleObject, METH_VARARGS, - WaitForSingleObject_doc}, - {"WriteFile", (PyCFunction)winapi_WriteFile, METH_VARARGS | METH_KEYWORDS, - ""}, + _WINAPI_CLOSEHANDLE_METHODDEF + _WINAPI_CONNECTNAMEDPIPE_METHODDEF + _WINAPI_CREATEFILE_METHODDEF + _WINAPI_CREATENAMEDPIPE_METHODDEF + _WINAPI_CREATEPIPE_METHODDEF + _WINAPI_CREATEPROCESS_METHODDEF + _WINAPI_CREATEJUNCTION_METHODDEF + _WINAPI_DUPLICATEHANDLE_METHODDEF + _WINAPI_EXITPROCESS_METHODDEF + _WINAPI_GETCURRENTPROCESS_METHODDEF + _WINAPI_GETEXITCODEPROCESS_METHODDEF + _WINAPI_GETLASTERROR_METHODDEF + _WINAPI_GETMODULEFILENAME_METHODDEF + _WINAPI_GETSTDHANDLE_METHODDEF + _WINAPI_GETVERSION_METHODDEF + _WINAPI_OPENPROCESS_METHODDEF + _WINAPI_PEEKNAMEDPIPE_METHODDEF + _WINAPI_READFILE_METHODDEF + _WINAPI_SETNAMEDPIPEHANDLESTATE_METHODDEF + _WINAPI_TERMINATEPROCESS_METHODDEF + _WINAPI_WAITNAMEDPIPE_METHODDEF + _WINAPI_WAITFORMULTIPLEOBJECTS_METHODDEF + _WINAPI_WAITFORSINGLEOBJECT_METHODDEF + _WINAPI_WRITEFILE_METHODDEF {NULL, NULL} }; diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h new file mode 100644 index 0000000000..c568f0f516 --- /dev/null +++ b/Modules/clinic/_winapi.c.h @@ -0,0 +1,851 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_winapi_Overlapped_GetOverlappedResult__doc__, +"GetOverlappedResult($self, wait, /)\n" +"--\n" +"\n"); + +#define _WINAPI_OVERLAPPED_GETOVERLAPPEDRESULT_METHODDEF \ + {"GetOverlappedResult", (PyCFunction)_winapi_Overlapped_GetOverlappedResult, METH_O, _winapi_Overlapped_GetOverlappedResult__doc__}, + +static PyObject * +_winapi_Overlapped_GetOverlappedResult_impl(OverlappedObject *self, int wait); + +static PyObject * +_winapi_Overlapped_GetOverlappedResult(OverlappedObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + int wait; + + if (!PyArg_Parse(arg, + "p:GetOverlappedResult", + &wait)) + goto exit; + return_value = _winapi_Overlapped_GetOverlappedResult_impl(self, wait); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_Overlapped_getbuffer__doc__, +"getbuffer($self, /)\n" +"--\n" +"\n"); + +#define _WINAPI_OVERLAPPED_GETBUFFER_METHODDEF \ + {"getbuffer", (PyCFunction)_winapi_Overlapped_getbuffer, METH_NOARGS, _winapi_Overlapped_getbuffer__doc__}, + +static PyObject * +_winapi_Overlapped_getbuffer_impl(OverlappedObject *self); + +static PyObject * +_winapi_Overlapped_getbuffer(OverlappedObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _winapi_Overlapped_getbuffer_impl(self); +} + +PyDoc_STRVAR(_winapi_Overlapped_cancel__doc__, +"cancel($self, /)\n" +"--\n" +"\n"); + +#define _WINAPI_OVERLAPPED_CANCEL_METHODDEF \ + {"cancel", (PyCFunction)_winapi_Overlapped_cancel, METH_NOARGS, _winapi_Overlapped_cancel__doc__}, + +static PyObject * +_winapi_Overlapped_cancel_impl(OverlappedObject *self); + +static PyObject * +_winapi_Overlapped_cancel(OverlappedObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _winapi_Overlapped_cancel_impl(self); +} + +PyDoc_STRVAR(_winapi_CloseHandle__doc__, +"CloseHandle($module, handle, /)\n" +"--\n" +"\n" +"Close handle."); + +#define _WINAPI_CLOSEHANDLE_METHODDEF \ + {"CloseHandle", (PyCFunction)_winapi_CloseHandle, METH_O, _winapi_CloseHandle__doc__}, + +static PyObject * +_winapi_CloseHandle_impl(PyModuleDef *module, HANDLE handle); + +static PyObject * +_winapi_CloseHandle(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + HANDLE handle; + + if (!PyArg_Parse(arg, + "" F_HANDLE ":CloseHandle", + &handle)) + goto exit; + return_value = _winapi_CloseHandle_impl(module, handle); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_ConnectNamedPipe__doc__, +"ConnectNamedPipe($module, /, handle, overlapped=False)\n" +"--\n" +"\n"); + +#define _WINAPI_CONNECTNAMEDPIPE_METHODDEF \ + {"ConnectNamedPipe", (PyCFunction)_winapi_ConnectNamedPipe, METH_VARARGS|METH_KEYWORDS, _winapi_ConnectNamedPipe__doc__}, + +static PyObject * +_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, int use_overlapped); + +static PyObject * +_winapi_ConnectNamedPipe(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"handle", "overlapped", NULL}; + HANDLE handle; + int use_overlapped = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "" F_HANDLE "|i:ConnectNamedPipe", _keywords, + &handle, &use_overlapped)) + goto exit; + return_value = _winapi_ConnectNamedPipe_impl(module, handle, use_overlapped); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_CreateFile__doc__, +"CreateFile($module, file_name, desired_access, share_mode,\n" +" security_attributes, creation_disposition,\n" +" flags_and_attributes, template_file, /)\n" +"--\n" +"\n"); + +#define _WINAPI_CREATEFILE_METHODDEF \ + {"CreateFile", (PyCFunction)_winapi_CreateFile, METH_VARARGS, _winapi_CreateFile__doc__}, + +static HANDLE +_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file); + +static PyObject * +_winapi_CreateFile(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + LPCTSTR file_name; + DWORD desired_access; + DWORD share_mode; + LPSECURITY_ATTRIBUTES security_attributes; + DWORD creation_disposition; + DWORD flags_and_attributes; + HANDLE template_file; + HANDLE _return_value; + + if (!PyArg_ParseTuple(args, + "skk" F_POINTER "kk" F_HANDLE ":CreateFile", + &file_name, &desired_access, &share_mode, &security_attributes, &creation_disposition, &flags_and_attributes, &template_file)) + goto exit; + _return_value = _winapi_CreateFile_impl(module, file_name, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file); + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + goto exit; + if (_return_value == NULL) + Py_RETURN_NONE; + return_value = HANDLE_TO_PYNUM(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_CreateJunction__doc__, +"CreateJunction($module, src_path, dst_path, /)\n" +"--\n" +"\n"); + +#define _WINAPI_CREATEJUNCTION_METHODDEF \ + {"CreateJunction", (PyCFunction)_winapi_CreateJunction, METH_VARARGS, _winapi_CreateJunction__doc__}, + +static PyObject * +_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, LPWSTR dst_path); + +static PyObject * +_winapi_CreateJunction(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + LPWSTR src_path; + LPWSTR dst_path; + + if (!PyArg_ParseTuple(args, + "uu:CreateJunction", + &src_path, &dst_path)) + goto exit; + return_value = _winapi_CreateJunction_impl(module, src_path, dst_path); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_CreateNamedPipe__doc__, +"CreateNamedPipe($module, name, open_mode, pipe_mode, max_instances,\n" +" out_buffer_size, in_buffer_size, default_timeout,\n" +" security_attributes, /)\n" +"--\n" +"\n"); + +#define _WINAPI_CREATENAMEDPIPE_METHODDEF \ + {"CreateNamedPipe", (PyCFunction)_winapi_CreateNamedPipe, METH_VARARGS, _winapi_CreateNamedPipe__doc__}, + +static HANDLE +_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD open_mode, DWORD pipe_mode, DWORD max_instances, DWORD out_buffer_size, DWORD in_buffer_size, DWORD default_timeout, LPSECURITY_ATTRIBUTES security_attributes); + +static PyObject * +_winapi_CreateNamedPipe(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + LPCTSTR name; + DWORD open_mode; + DWORD pipe_mode; + DWORD max_instances; + DWORD out_buffer_size; + DWORD in_buffer_size; + DWORD default_timeout; + LPSECURITY_ATTRIBUTES security_attributes; + HANDLE _return_value; + + if (!PyArg_ParseTuple(args, + "skkkkkk" F_POINTER ":CreateNamedPipe", + &name, &open_mode, &pipe_mode, &max_instances, &out_buffer_size, &in_buffer_size, &default_timeout, &security_attributes)) + goto exit; + _return_value = _winapi_CreateNamedPipe_impl(module, name, open_mode, pipe_mode, max_instances, out_buffer_size, in_buffer_size, default_timeout, security_attributes); + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + goto exit; + if (_return_value == NULL) + Py_RETURN_NONE; + return_value = HANDLE_TO_PYNUM(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_CreatePipe__doc__, +"CreatePipe($module, pipe_attrs, size, /)\n" +"--\n" +"\n" +"Create an anonymous pipe.\n" +"\n" +" pipe_attrs\n" +" Ignored internally, can be None.\n" +"\n" +"Returns a 2-tuple of handles, to the read and write ends of the pipe."); + +#define _WINAPI_CREATEPIPE_METHODDEF \ + {"CreatePipe", (PyCFunction)_winapi_CreatePipe, METH_VARARGS, _winapi_CreatePipe__doc__}, + +static PyObject * +_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, DWORD size); + +static PyObject * +_winapi_CreatePipe(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *pipe_attrs; + DWORD size; + + if (!PyArg_ParseTuple(args, + "Ok:CreatePipe", + &pipe_attrs, &size)) + goto exit; + return_value = _winapi_CreatePipe_impl(module, pipe_attrs, size); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_CreateProcess__doc__, +"CreateProcess($module, application_name, command_line, proc_attrs,\n" +" thread_attrs, inherit_handles, creation_flags,\n" +" env_mapping, current_directory, startup_info, /)\n" +"--\n" +"\n" +"Create a new process and its primary thread.\n" +"\n" +" proc_attrs\n" +" Ignored internally, can be None.\n" +" thread_attrs\n" +" Ignored internally, can be None.\n" +"\n" +"The return value is a tuple of the process handle, thread handle,\n" +"process ID, and thread ID."); + +#define _WINAPI_CREATEPROCESS_METHODDEF \ + {"CreateProcess", (PyCFunction)_winapi_CreateProcess, METH_VARARGS, _winapi_CreateProcess__doc__}, + +static PyObject * +_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, Py_UNICODE *command_line, PyObject *proc_attrs, PyObject *thread_attrs, BOOL inherit_handles, DWORD creation_flags, PyObject *env_mapping, Py_UNICODE *current_directory, PyObject *startup_info); + +static PyObject * +_winapi_CreateProcess(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_UNICODE *application_name; + Py_UNICODE *command_line; + PyObject *proc_attrs; + PyObject *thread_attrs; + BOOL inherit_handles; + DWORD creation_flags; + PyObject *env_mapping; + Py_UNICODE *current_directory; + PyObject *startup_info; + + if (!PyArg_ParseTuple(args, + "ZZOOikOZO:CreateProcess", + &application_name, &command_line, &proc_attrs, &thread_attrs, &inherit_handles, &creation_flags, &env_mapping, ¤t_directory, &startup_info)) + goto exit; + return_value = _winapi_CreateProcess_impl(module, application_name, command_line, proc_attrs, thread_attrs, inherit_handles, creation_flags, env_mapping, current_directory, startup_info); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_DuplicateHandle__doc__, +"DuplicateHandle($module, source_process_handle, source_handle,\n" +" target_process_handle, desired_access, inherit_handle,\n" +" options=0, /)\n" +"--\n" +"\n" +"Return a duplicate handle object.\n" +"\n" +"The duplicate handle refers to the same object as the original\n" +"handle. Therefore, any changes to the object are reflected\n" +"through both handles."); + +#define _WINAPI_DUPLICATEHANDLE_METHODDEF \ + {"DuplicateHandle", (PyCFunction)_winapi_DuplicateHandle, METH_VARARGS, _winapi_DuplicateHandle__doc__}, + +static HANDLE +_winapi_DuplicateHandle_impl(PyModuleDef *module, HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, DWORD desired_access, BOOL inherit_handle, DWORD options); + +static PyObject * +_winapi_DuplicateHandle(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + HANDLE source_process_handle; + HANDLE source_handle; + HANDLE target_process_handle; + DWORD desired_access; + BOOL inherit_handle; + DWORD options = 0; + HANDLE _return_value; + + if (!PyArg_ParseTuple(args, + "" F_HANDLE "" F_HANDLE "" F_HANDLE "ki|k:DuplicateHandle", + &source_process_handle, &source_handle, &target_process_handle, &desired_access, &inherit_handle, &options)) + goto exit; + _return_value = _winapi_DuplicateHandle_impl(module, source_process_handle, source_handle, target_process_handle, desired_access, inherit_handle, options); + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + goto exit; + if (_return_value == NULL) + Py_RETURN_NONE; + return_value = HANDLE_TO_PYNUM(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_ExitProcess__doc__, +"ExitProcess($module, ExitCode, /)\n" +"--\n" +"\n"); + +#define _WINAPI_EXITPROCESS_METHODDEF \ + {"ExitProcess", (PyCFunction)_winapi_ExitProcess, METH_O, _winapi_ExitProcess__doc__}, + +static PyObject * +_winapi_ExitProcess_impl(PyModuleDef *module, UINT ExitCode); + +static PyObject * +_winapi_ExitProcess(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + UINT ExitCode; + + if (!PyArg_Parse(arg, + "I:ExitProcess", + &ExitCode)) + goto exit; + return_value = _winapi_ExitProcess_impl(module, ExitCode); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_GetCurrentProcess__doc__, +"GetCurrentProcess($module, /)\n" +"--\n" +"\n" +"Return a handle object for the current process."); + +#define _WINAPI_GETCURRENTPROCESS_METHODDEF \ + {"GetCurrentProcess", (PyCFunction)_winapi_GetCurrentProcess, METH_NOARGS, _winapi_GetCurrentProcess__doc__}, + +static HANDLE +_winapi_GetCurrentProcess_impl(PyModuleDef *module); + +static PyObject * +_winapi_GetCurrentProcess(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + PyObject *return_value = NULL; + HANDLE _return_value; + + _return_value = _winapi_GetCurrentProcess_impl(module); + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + goto exit; + if (_return_value == NULL) + Py_RETURN_NONE; + return_value = HANDLE_TO_PYNUM(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_GetExitCodeProcess__doc__, +"GetExitCodeProcess($module, process, /)\n" +"--\n" +"\n" +"Return the termination status of the specified process."); + +#define _WINAPI_GETEXITCODEPROCESS_METHODDEF \ + {"GetExitCodeProcess", (PyCFunction)_winapi_GetExitCodeProcess, METH_O, _winapi_GetExitCodeProcess__doc__}, + +static DWORD +_winapi_GetExitCodeProcess_impl(PyModuleDef *module, HANDLE process); + +static PyObject * +_winapi_GetExitCodeProcess(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + HANDLE process; + DWORD _return_value; + + if (!PyArg_Parse(arg, + "" F_HANDLE ":GetExitCodeProcess", + &process)) + goto exit; + _return_value = _winapi_GetExitCodeProcess_impl(module, process); + if ((_return_value == DWORD_MAX) && PyErr_Occurred()) + goto exit; + return_value = Py_BuildValue("k", _return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_GetLastError__doc__, +"GetLastError($module, /)\n" +"--\n" +"\n"); + +#define _WINAPI_GETLASTERROR_METHODDEF \ + {"GetLastError", (PyCFunction)_winapi_GetLastError, METH_NOARGS, _winapi_GetLastError__doc__}, + +static DWORD +_winapi_GetLastError_impl(PyModuleDef *module); + +static PyObject * +_winapi_GetLastError(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + PyObject *return_value = NULL; + DWORD _return_value; + + _return_value = _winapi_GetLastError_impl(module); + if ((_return_value == DWORD_MAX) && PyErr_Occurred()) + goto exit; + return_value = Py_BuildValue("k", _return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_GetModuleFileName__doc__, +"GetModuleFileName($module, module_handle, /)\n" +"--\n" +"\n" +"Return the fully-qualified path for the file that contains module.\n" +"\n" +"The module must have been loaded by the current process.\n" +"\n" +"The module parameter should be a handle to the loaded module\n" +"whose path is being requested. If this parameter is 0,\n" +"GetModuleFileName retrieves the path of the executable file\n" +"of the current process."); + +#define _WINAPI_GETMODULEFILENAME_METHODDEF \ + {"GetModuleFileName", (PyCFunction)_winapi_GetModuleFileName, METH_O, _winapi_GetModuleFileName__doc__}, + +static PyObject * +_winapi_GetModuleFileName_impl(PyModuleDef *module, HMODULE module_handle); + +static PyObject * +_winapi_GetModuleFileName(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + HMODULE module_handle; + + if (!PyArg_Parse(arg, + "" F_HANDLE ":GetModuleFileName", + &module_handle)) + goto exit; + return_value = _winapi_GetModuleFileName_impl(module, module_handle); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_GetStdHandle__doc__, +"GetStdHandle($module, std_handle, /)\n" +"--\n" +"\n" +"Return a handle to the specified standard device.\n" +"\n" +" std_handle\n" +" One of STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, or STD_ERROR_HANDLE.\n" +"\n" +"The integer associated with the handle object is returned."); + +#define _WINAPI_GETSTDHANDLE_METHODDEF \ + {"GetStdHandle", (PyCFunction)_winapi_GetStdHandle, METH_O, _winapi_GetStdHandle__doc__}, + +static HANDLE +_winapi_GetStdHandle_impl(PyModuleDef *module, DWORD std_handle); + +static PyObject * +_winapi_GetStdHandle(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + DWORD std_handle; + HANDLE _return_value; + + if (!PyArg_Parse(arg, + "k:GetStdHandle", + &std_handle)) + goto exit; + _return_value = _winapi_GetStdHandle_impl(module, std_handle); + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + goto exit; + if (_return_value == NULL) + Py_RETURN_NONE; + return_value = HANDLE_TO_PYNUM(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_GetVersion__doc__, +"GetVersion($module, /)\n" +"--\n" +"\n" +"Return the version number of the current operating system."); + +#define _WINAPI_GETVERSION_METHODDEF \ + {"GetVersion", (PyCFunction)_winapi_GetVersion, METH_NOARGS, _winapi_GetVersion__doc__}, + +static long +_winapi_GetVersion_impl(PyModuleDef *module); + +static PyObject * +_winapi_GetVersion(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + PyObject *return_value = NULL; + long _return_value; + + _return_value = _winapi_GetVersion_impl(module); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_OpenProcess__doc__, +"OpenProcess($module, desired_access, inherit_handle, process_id, /)\n" +"--\n" +"\n"); + +#define _WINAPI_OPENPROCESS_METHODDEF \ + {"OpenProcess", (PyCFunction)_winapi_OpenProcess, METH_VARARGS, _winapi_OpenProcess__doc__}, + +static HANDLE +_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, BOOL inherit_handle, DWORD process_id); + +static PyObject * +_winapi_OpenProcess(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + DWORD desired_access; + BOOL inherit_handle; + DWORD process_id; + HANDLE _return_value; + + if (!PyArg_ParseTuple(args, + "kik:OpenProcess", + &desired_access, &inherit_handle, &process_id)) + goto exit; + _return_value = _winapi_OpenProcess_impl(module, desired_access, inherit_handle, process_id); + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + goto exit; + if (_return_value == NULL) + Py_RETURN_NONE; + return_value = HANDLE_TO_PYNUM(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_PeekNamedPipe__doc__, +"PeekNamedPipe($module, handle, size=0, /)\n" +"--\n" +"\n"); + +#define _WINAPI_PEEKNAMEDPIPE_METHODDEF \ + {"PeekNamedPipe", (PyCFunction)_winapi_PeekNamedPipe, METH_VARARGS, _winapi_PeekNamedPipe__doc__}, + +static PyObject * +_winapi_PeekNamedPipe_impl(PyModuleDef *module, HANDLE handle, int size); + +static PyObject * +_winapi_PeekNamedPipe(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + HANDLE handle; + int size = 0; + + if (!PyArg_ParseTuple(args, + "" F_HANDLE "|i:PeekNamedPipe", + &handle, &size)) + goto exit; + return_value = _winapi_PeekNamedPipe_impl(module, handle, size); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_ReadFile__doc__, +"ReadFile($module, /, handle, size, overlapped=False)\n" +"--\n" +"\n"); + +#define _WINAPI_READFILE_METHODDEF \ + {"ReadFile", (PyCFunction)_winapi_ReadFile, METH_VARARGS|METH_KEYWORDS, _winapi_ReadFile__doc__}, + +static PyObject * +_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, int use_overlapped); + +static PyObject * +_winapi_ReadFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"handle", "size", "overlapped", NULL}; + HANDLE handle; + int size; + int use_overlapped = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "" F_HANDLE "i|i:ReadFile", _keywords, + &handle, &size, &use_overlapped)) + goto exit; + return_value = _winapi_ReadFile_impl(module, handle, size, use_overlapped); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_SetNamedPipeHandleState__doc__, +"SetNamedPipeHandleState($module, named_pipe, mode,\n" +" max_collection_count, collect_data_timeout, /)\n" +"--\n" +"\n"); + +#define _WINAPI_SETNAMEDPIPEHANDLESTATE_METHODDEF \ + {"SetNamedPipeHandleState", (PyCFunction)_winapi_SetNamedPipeHandleState, METH_VARARGS, _winapi_SetNamedPipeHandleState__doc__}, + +static PyObject * +_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, PyObject *mode, PyObject *max_collection_count, PyObject *collect_data_timeout); + +static PyObject * +_winapi_SetNamedPipeHandleState(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + HANDLE named_pipe; + PyObject *mode; + PyObject *max_collection_count; + PyObject *collect_data_timeout; + + if (!PyArg_ParseTuple(args, + "" F_HANDLE "OOO:SetNamedPipeHandleState", + &named_pipe, &mode, &max_collection_count, &collect_data_timeout)) + goto exit; + return_value = _winapi_SetNamedPipeHandleState_impl(module, named_pipe, mode, max_collection_count, collect_data_timeout); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_TerminateProcess__doc__, +"TerminateProcess($module, handle, exit_code, /)\n" +"--\n" +"\n" +"Terminate the specified process and all of its threads."); + +#define _WINAPI_TERMINATEPROCESS_METHODDEF \ + {"TerminateProcess", (PyCFunction)_winapi_TerminateProcess, METH_VARARGS, _winapi_TerminateProcess__doc__}, + +static PyObject * +_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, UINT exit_code); + +static PyObject * +_winapi_TerminateProcess(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + HANDLE handle; + UINT exit_code; + + if (!PyArg_ParseTuple(args, + "" F_HANDLE "I:TerminateProcess", + &handle, &exit_code)) + goto exit; + return_value = _winapi_TerminateProcess_impl(module, handle, exit_code); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_WaitNamedPipe__doc__, +"WaitNamedPipe($module, name, timeout, /)\n" +"--\n" +"\n"); + +#define _WINAPI_WAITNAMEDPIPE_METHODDEF \ + {"WaitNamedPipe", (PyCFunction)_winapi_WaitNamedPipe, METH_VARARGS, _winapi_WaitNamedPipe__doc__}, + +static PyObject * +_winapi_WaitNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD timeout); + +static PyObject * +_winapi_WaitNamedPipe(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + LPCTSTR name; + DWORD timeout; + + if (!PyArg_ParseTuple(args, + "sk:WaitNamedPipe", + &name, &timeout)) + goto exit; + return_value = _winapi_WaitNamedPipe_impl(module, name, timeout); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_WaitForMultipleObjects__doc__, +"WaitForMultipleObjects($module, handle_seq, wait_flag,\n" +" milliseconds=_winapi.INFINITE, /)\n" +"--\n" +"\n"); + +#define _WINAPI_WAITFORMULTIPLEOBJECTS_METHODDEF \ + {"WaitForMultipleObjects", (PyCFunction)_winapi_WaitForMultipleObjects, METH_VARARGS, _winapi_WaitForMultipleObjects__doc__}, + +static PyObject * +_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, PyObject *handle_seq, BOOL wait_flag, DWORD milliseconds); + +static PyObject * +_winapi_WaitForMultipleObjects(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *handle_seq; + BOOL wait_flag; + DWORD milliseconds = INFINITE; + + if (!PyArg_ParseTuple(args, + "Oi|k:WaitForMultipleObjects", + &handle_seq, &wait_flag, &milliseconds)) + goto exit; + return_value = _winapi_WaitForMultipleObjects_impl(module, handle_seq, wait_flag, milliseconds); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_WaitForSingleObject__doc__, +"WaitForSingleObject($module, handle, milliseconds, /)\n" +"--\n" +"\n" +"Wait for a single object.\n" +"\n" +"Wait until the specified object is in the signaled state or\n" +"the time-out interval elapses. The timeout value is specified\n" +"in milliseconds."); + +#define _WINAPI_WAITFORSINGLEOBJECT_METHODDEF \ + {"WaitForSingleObject", (PyCFunction)_winapi_WaitForSingleObject, METH_VARARGS, _winapi_WaitForSingleObject__doc__}, + +static long +_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, DWORD milliseconds); + +static PyObject * +_winapi_WaitForSingleObject(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + HANDLE handle; + DWORD milliseconds; + long _return_value; + + if (!PyArg_ParseTuple(args, + "" F_HANDLE "k:WaitForSingleObject", + &handle, &milliseconds)) + goto exit; + _return_value = _winapi_WaitForSingleObject_impl(module, handle, milliseconds); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + return return_value; +} + +PyDoc_STRVAR(_winapi_WriteFile__doc__, +"WriteFile($module, /, handle, buffer, overlapped=False)\n" +"--\n" +"\n"); + +#define _WINAPI_WRITEFILE_METHODDEF \ + {"WriteFile", (PyCFunction)_winapi_WriteFile, METH_VARARGS|METH_KEYWORDS, _winapi_WriteFile__doc__}, + +static PyObject * +_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, int use_overlapped); + +static PyObject * +_winapi_WriteFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"handle", "buffer", "overlapped", NULL}; + HANDLE handle; + PyObject *buffer; + int use_overlapped = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "" F_HANDLE "O|i:WriteFile", _keywords, + &handle, &buffer, &use_overlapped)) + goto exit; + return_value = _winapi_WriteFile_impl(module, handle, buffer, use_overlapped); + +exit: + return return_value; +} +/*[clinic end generated code: output=107b73892f62ff3c input=a9049054013a1b77]*/ -- cgit v1.2.1 From 8948e76ab2ab103e422a62a9a779582740e6e438 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 13 May 2015 15:02:12 +0300 Subject: Issue #23488: Random generator objects now consume 2x less memory on 64-bit. --- Modules/_randommodule.c | 138 ++++++++++++++++++++++++------------------------ 1 file changed, 68 insertions(+), 70 deletions(-) (limited to 'Modules') diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index af861820a2..91fcc87c9d 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -69,17 +69,21 @@ #include "Python.h" #include /* for seeding to current time */ +#ifndef PY_UINT32_T +# error "Failed to find an exact-width 32-bit integer type" +#endif + /* Period parameters -- These are all magic. Don't change. */ #define N 624 #define M 397 -#define MATRIX_A 0x9908b0dfUL /* constant vector a */ -#define UPPER_MASK 0x80000000UL /* most significant w-r bits */ -#define LOWER_MASK 0x7fffffffUL /* least significant r bits */ +#define MATRIX_A 0x9908b0dfU /* constant vector a */ +#define UPPER_MASK 0x80000000U /* most significant w-r bits */ +#define LOWER_MASK 0x7fffffffU /* least significant r bits */ typedef struct { PyObject_HEAD int index; - unsigned long state[N]; + PY_UINT32_T state[N]; } RandomObject; static PyTypeObject Random_Type; @@ -91,13 +95,13 @@ static PyTypeObject Random_Type; /* generates a random number on [0,0xffffffff]-interval */ -static unsigned long +static PY_UINT32_T genrand_int32(RandomObject *self) { - unsigned long y; - static unsigned long mag01[2]={0x0UL, MATRIX_A}; + PY_UINT32_T y; + static PY_UINT32_T mag01[2]={0x0U, MATRIX_A}; /* mag01[x] = x * MATRIX_A for x=0,1 */ - unsigned long *mt; + PY_UINT32_T *mt; mt = self->state; if (self->index >= N) { /* generate N words at one time */ @@ -105,22 +109,22 @@ genrand_int32(RandomObject *self) for (kk=0;kk> 1) ^ mag01[y & 0x1UL]; + mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1U]; } for (;kk> 1) ^ mag01[y & 0x1UL]; + mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1U]; } y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); - mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL]; + mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1U]; self->index = 0; } y = mt[self->index++]; y ^= (y >> 11); - y ^= (y << 7) & 0x9d2c5680UL; - y ^= (y << 15) & 0xefc60000UL; + y ^= (y << 7) & 0x9d2c5680U; + y ^= (y << 15) & 0xefc60000U; y ^= (y >> 18); return y; } @@ -137,28 +141,26 @@ genrand_int32(RandomObject *self) static PyObject * random_random(RandomObject *self) { - unsigned long a=genrand_int32(self)>>5, b=genrand_int32(self)>>6; + PY_UINT32_T a=genrand_int32(self)>>5, b=genrand_int32(self)>>6; return PyFloat_FromDouble((a*67108864.0+b)*(1.0/9007199254740992.0)); } /* initializes mt[N] with a seed */ static void -init_genrand(RandomObject *self, unsigned long s) +init_genrand(RandomObject *self, PY_UINT32_T s) { int mti; - unsigned long *mt; + PY_UINT32_T *mt; mt = self->state; - mt[0]= s & 0xffffffffUL; + mt[0]= s; for (mti=1; mti> 30)) + mti); + (1812433253U * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti); /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ /* In the previous versions, MSBs of the seed affect */ /* only MSBs of the array mt[]. */ /* 2002/01/09 modified by Makoto Matsumoto */ - mt[mti] &= 0xffffffffUL; - /* for >32 bit machines */ } self->index = mti; return; @@ -168,32 +170,30 @@ init_genrand(RandomObject *self, unsigned long s) /* init_key is the array for initializing keys */ /* key_length is its length */ static PyObject * -init_by_array(RandomObject *self, unsigned long init_key[], size_t key_length) +init_by_array(RandomObject *self, PY_UINT32_T init_key[], size_t key_length) { size_t i, j, k; /* was signed in the original code. RDH 12/16/2002 */ - unsigned long *mt; + PY_UINT32_T *mt; mt = self->state; - init_genrand(self, 19650218UL); + init_genrand(self, 19650218U); i=1; j=0; k = (N>key_length ? N : key_length); for (; k; k--) { - mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525UL)) - + init_key[j] + (unsigned long)j; /* non linear */ - mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ + mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525U)) + + init_key[j] + (PY_UINT32_T)j; /* non linear */ i++; j++; if (i>=N) { mt[0] = mt[N-1]; i=1; } if (j>=key_length) j=0; } for (k=N-1; k; k--) { - mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941UL)) - - (unsigned long)i; /* non linear */ - mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ + mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941U)) + - (PY_UINT32_T)i; /* non linear */ i++; if (i>=N) { mt[0] = mt[N-1]; i=1; } } - mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */ + mt[0] = 0x80000000U; /* MSB is 1; assuring non-zero initial array */ Py_INCREF(Py_None); return Py_None; } @@ -208,9 +208,8 @@ random_seed(RandomObject *self, PyObject *args) { PyObject *result = NULL; /* guilty until proved innocent */ PyObject *n = NULL; - unsigned long *key = NULL; - unsigned char *key_as_bytes = NULL; - size_t bits, keyused, i; + PY_UINT32_T *key = NULL; + size_t bits, keyused; int res; PyObject *arg = NULL; @@ -221,7 +220,7 @@ random_seed(RandomObject *self, PyObject *args) time_t now; time(&now); - init_genrand(self, (unsigned long)now); + init_genrand(self, (PY_UINT32_T)now); Py_INCREF(Py_None); return Py_None; } @@ -249,35 +248,31 @@ random_seed(RandomObject *self, PyObject *args) keyused = bits == 0 ? 1 : (bits - 1) / 32 + 1; /* Convert seed to byte sequence. */ - key_as_bytes = (unsigned char *)PyMem_Malloc((size_t)4 * keyused); - if (key_as_bytes == NULL) { + key = (PY_UINT32_T *)PyMem_Malloc((size_t)4 * keyused); + if (key == NULL) { PyErr_NoMemory(); goto Done; } res = _PyLong_AsByteArray((PyLongObject *)n, - key_as_bytes, keyused * 4, - 1, /* little-endian */ + (unsigned char *)key, keyused * 4, + PY_LITTLE_ENDIAN, 0); /* unsigned */ if (res == -1) { - PyMem_Free(key_as_bytes); + PyMem_Free(key); goto Done; } - /* Fill array of unsigned longs from byte sequence. */ - key = (unsigned long *)PyMem_Malloc(sizeof(unsigned long) * keyused); - if (key == NULL) { - PyErr_NoMemory(); - PyMem_Free(key_as_bytes); - goto Done; - } - for (i = 0; i < keyused; i++) { - key[i] = - ((unsigned long)key_as_bytes[4*i + 0] << 0) + - ((unsigned long)key_as_bytes[4*i + 1] << 8) + - ((unsigned long)key_as_bytes[4*i + 2] << 16) + - ((unsigned long)key_as_bytes[4*i + 3] << 24); +#if PY_BIG_ENDIAN + { + size_t i, j; + /* Reverse an array. */ + for (i = 0; j = keyused - 1; i < j; i++, j--) { + PY_UINT32_T tmp = key[i]; + key[i] = key[j]; + key[j] = tmp; + } } - PyMem_Free(key_as_bytes); +#endif result = init_by_array(self, key, keyused); Done: Py_XDECREF(n); @@ -334,7 +329,7 @@ random_setstate(RandomObject *self, PyObject *state) element = PyLong_AsUnsignedLong(PyTuple_GET_ITEM(state, i)); if (element == (unsigned long)-1 && PyErr_Occurred()) return NULL; - self->state[i] = element & 0xffffffffUL; /* Make sure we get sane state */ + self->state[i] = (PY_UINT32_T)element; } index = PyLong_AsLong(PyTuple_GET_ITEM(state, i)); @@ -349,9 +344,9 @@ random_setstate(RandomObject *self, PyObject *state) static PyObject * random_getrandbits(RandomObject *self, PyObject *args) { - int k, i, bytes; - unsigned long r; - unsigned char *bytearray; + int k, i, words; + PY_UINT32_T r; + PY_UINT32_T *wordarray; PyObject *result; if (!PyArg_ParseTuple(args, "i:getrandbits", &k)) @@ -366,27 +361,30 @@ random_getrandbits(RandomObject *self, PyObject *args) if (k <= 32) /* Fast path */ return PyLong_FromUnsignedLong(genrand_int32(self) >> (32 - k)); - bytes = ((k - 1) / 32 + 1) * 4; - bytearray = (unsigned char *)PyMem_Malloc(bytes); - if (bytearray == NULL) { + words = (k - 1) / 32 + 1; + wordarray = (PY_UINT32_T *)PyMem_Malloc(words * 4); + if (wordarray == NULL) { PyErr_NoMemory(); return NULL; } - /* Fill-out whole words, byte-by-byte to avoid endianness issues */ - for (i=0 ; i= 0; i--, k -= 32) +#endif + { r = genrand_int32(self); if (k < 32) - r >>= (32 - k); - bytearray[i+0] = (unsigned char)r; - bytearray[i+1] = (unsigned char)(r >> 8); - bytearray[i+2] = (unsigned char)(r >> 16); - bytearray[i+3] = (unsigned char)(r >> 24); + r >>= (32 - k); /* Drop least significant bits */ + wordarray[i] = r; } - /* little endian order to match bytearray assignment order */ - result = _PyLong_FromByteArray(bytearray, bytes, 1, 0); - PyMem_Free(bytearray); + result = _PyLong_FromByteArray((unsigned char *)wordarray, words * 4, + PY_LITTLE_ENDIAN, 0 /* unsigned */); + PyMem_Free(wordarray); return result; } -- cgit v1.2.1 From b38005ef174b8a5dd5ce4cc65b8390c71f277d1f Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Wed, 13 May 2015 10:58:35 -0500 Subject: Issue #20172: Update clinicizations to current clinic. --- Modules/_winapi.c | 93 ++++++++++++++++++++----------- Modules/clinic/_winapi.c.h | 133 +++++++++++++++++++++++---------------------- 2 files changed, 130 insertions(+), 96 deletions(-) (limited to 'Modules') diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 83c3a3bb35..3e7f18741f 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -391,8 +391,9 @@ _winapi.ConnectNamedPipe [clinic start generated code]*/ static PyObject * -_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, int use_overlapped) -/*[clinic end generated code: output=d9a64e59c27e10f6 input=edc83da007ebf3be]*/ +_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, + int use_overlapped) +/*[clinic end generated code: output=fed3b165d1bca95a input=edc83da007ebf3be]*/ { BOOL success; OverlappedObject *overlapped = NULL; @@ -442,8 +443,12 @@ _winapi.CreateFile -> HANDLE [clinic start generated code]*/ static HANDLE -_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file) -/*[clinic end generated code: output=f8649129a4959288 input=6423c3e40372dbd5]*/ +_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, + DWORD desired_access, DWORD share_mode, + LPSECURITY_ATTRIBUTES security_attributes, + DWORD creation_disposition, + DWORD flags_and_attributes, HANDLE template_file) +/*[clinic end generated code: output=c6e1d78f8affd10c input=6423c3e40372dbd5]*/ { HANDLE handle; @@ -469,8 +474,9 @@ _winapi.CreateJunction [clinic start generated code]*/ static PyObject * -_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, LPWSTR dst_path) -/*[clinic end generated code: output=df22af7be7045584 input=8cd1f9964b6e3d36]*/ +_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, + LPWSTR dst_path) +/*[clinic end generated code: output=eccae9364e46f6da input=8cd1f9964b6e3d36]*/ { /* Privilege adjustment */ HANDLE token = NULL; @@ -611,8 +617,12 @@ _winapi.CreateNamedPipe -> HANDLE [clinic start generated code]*/ static HANDLE -_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD open_mode, DWORD pipe_mode, DWORD max_instances, DWORD out_buffer_size, DWORD in_buffer_size, DWORD default_timeout, LPSECURITY_ATTRIBUTES security_attributes) -/*[clinic end generated code: output=711e231639c25c24 input=5a73530b84d8bc37]*/ +_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, + DWORD open_mode, DWORD pipe_mode, + DWORD max_instances, DWORD out_buffer_size, + DWORD in_buffer_size, DWORD default_timeout, + LPSECURITY_ATTRIBUTES security_attributes) +/*[clinic end generated code: output=44ca2a06a219b523 input=5a73530b84d8bc37]*/ { HANDLE handle; @@ -643,8 +653,9 @@ Returns a 2-tuple of handles, to the read and write ends of the pipe. [clinic start generated code]*/ static PyObject * -_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, DWORD size) -/*[clinic end generated code: output=ed09baf1d43086df input=c4f2cfa56ef68d90]*/ +_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, + DWORD size) +/*[clinic end generated code: output=fef99f3b4222bc78 input=c4f2cfa56ef68d90]*/ { HANDLE read_pipe; HANDLE write_pipe; @@ -783,8 +794,8 @@ getenvironment(PyObject* environment) /*[clinic input] _winapi.CreateProcess - application_name: Py_UNICODE(nullable=True) - command_line: Py_UNICODE(nullable=True) + application_name: Py_UNICODE(accept={str, NoneType}) + command_line: Py_UNICODE(accept={str, NoneType}) proc_attrs: object Ignored internally, can be None. thread_attrs: object @@ -792,7 +803,7 @@ _winapi.CreateProcess inherit_handles: BOOL creation_flags: DWORD env_mapping: object - current_directory: Py_UNICODE(nullable=True) + current_directory: Py_UNICODE(accept={str, NoneType}) startup_info: object / @@ -803,8 +814,13 @@ process ID, and thread ID. [clinic start generated code]*/ static PyObject * -_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, Py_UNICODE *command_line, PyObject *proc_attrs, PyObject *thread_attrs, BOOL inherit_handles, DWORD creation_flags, PyObject *env_mapping, Py_UNICODE *current_directory, PyObject *startup_info) -/*[clinic end generated code: output=c279c1271b4c45cf input=6667ea0bc7036472]*/ +_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, + Py_UNICODE *command_line, PyObject *proc_attrs, + PyObject *thread_attrs, BOOL inherit_handles, + DWORD creation_flags, PyObject *env_mapping, + Py_UNICODE *current_directory, + PyObject *startup_info) +/*[clinic end generated code: output=874bb350ff9ed4ef input=4a43b05038d639bb]*/ { BOOL result; PROCESS_INFORMATION pi; @@ -884,8 +900,13 @@ through both handles. [clinic start generated code]*/ static HANDLE -_winapi_DuplicateHandle_impl(PyModuleDef *module, HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, DWORD desired_access, BOOL inherit_handle, DWORD options) -/*[clinic end generated code: output=24a7836ca4d94aba input=b933e3f2356a8c12]*/ +_winapi_DuplicateHandle_impl(PyModuleDef *module, + HANDLE source_process_handle, + HANDLE source_handle, + HANDLE target_process_handle, + DWORD desired_access, BOOL inherit_handle, + DWORD options) +/*[clinic end generated code: output=0799515b68b5237b input=b933e3f2356a8c12]*/ { HANDLE target_handle; BOOL result; @@ -1074,8 +1095,9 @@ _winapi.OpenProcess -> HANDLE [clinic start generated code]*/ static HANDLE -_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, BOOL inherit_handle, DWORD process_id) -/*[clinic end generated code: output=2a7be5336f16f63c input=ec98c4cf4ea2ec36]*/ +_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, + BOOL inherit_handle, DWORD process_id) +/*[clinic end generated code: output=6bc52eda82a3d226 input=ec98c4cf4ea2ec36]*/ { HANDLE handle; @@ -1145,8 +1167,9 @@ _winapi.ReadFile [clinic start generated code]*/ static PyObject * -_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, int use_overlapped) -/*[clinic end generated code: output=5a087be0ff44479a input=8dd810194e86ac7d]*/ +_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, + int use_overlapped) +/*[clinic end generated code: output=d7695db4db97b135 input=8dd810194e86ac7d]*/ { DWORD nread; PyObject *buf; @@ -1206,8 +1229,11 @@ _winapi.SetNamedPipeHandleState [clinic start generated code]*/ static PyObject * -_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, PyObject *mode, PyObject *max_collection_count, PyObject *collect_data_timeout) -/*[clinic end generated code: output=327efd18ff0c30ec input=9142d72163d0faa6]*/ +_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, + PyObject *mode, + PyObject *max_collection_count, + PyObject *collect_data_timeout) +/*[clinic end generated code: output=25aa3c28dee223ce input=9142d72163d0faa6]*/ { PyObject *oArgs[3] = {mode, max_collection_count, collect_data_timeout}; DWORD dwArgs[3], *pArgs[3] = {NULL, NULL, NULL}; @@ -1242,8 +1268,9 @@ Terminate the specified process and all of its threads. [clinic start generated code]*/ static PyObject * -_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, UINT exit_code) -/*[clinic end generated code: output=1559f0f6500c2283 input=d6bc0aa1ee3bb4df]*/ +_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, + UINT exit_code) +/*[clinic end generated code: output=937c1bb6219aca8b input=d6bc0aa1ee3bb4df]*/ { BOOL result; @@ -1289,8 +1316,10 @@ _winapi.WaitForMultipleObjects [clinic start generated code]*/ static PyObject * -_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, PyObject *handle_seq, BOOL wait_flag, DWORD milliseconds) -/*[clinic end generated code: output=e3efee6b505dd48e input=36f76ca057cd28a0]*/ +_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, + PyObject *handle_seq, BOOL wait_flag, + DWORD milliseconds) +/*[clinic end generated code: output=acb440728d06d130 input=36f76ca057cd28a0]*/ { DWORD result; HANDLE handles[MAXIMUM_WAIT_OBJECTS]; @@ -1364,8 +1393,9 @@ in milliseconds. [clinic start generated code]*/ static long -_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, DWORD milliseconds) -/*[clinic end generated code: output=0c75bcc6eec6b973 input=443d1ab076edc7b1]*/ +_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, + DWORD milliseconds) +/*[clinic end generated code: output=34ae40c269749c48 input=443d1ab076edc7b1]*/ { DWORD result; @@ -1390,8 +1420,9 @@ _winapi.WriteFile [clinic start generated code]*/ static PyObject * -_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, int use_overlapped) -/*[clinic end generated code: output=37bd88e293079b2c input=51846a5af52053fd]*/ +_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, + int use_overlapped) +/*[clinic end generated code: output=65e70ea41f4d2a1d input=51846a5af52053fd]*/ { Py_buffer _buf, *buf; DWORD len, written; diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h index c568f0f516..34518e836b 100644 --- a/Modules/clinic/_winapi.c.h +++ b/Modules/clinic/_winapi.c.h @@ -19,9 +19,7 @@ _winapi_Overlapped_GetOverlappedResult(OverlappedObject *self, PyObject *arg) PyObject *return_value = NULL; int wait; - if (!PyArg_Parse(arg, - "p:GetOverlappedResult", - &wait)) + if (!PyArg_Parse(arg, "p:GetOverlappedResult", &wait)) goto exit; return_value = _winapi_Overlapped_GetOverlappedResult_impl(self, wait); @@ -81,9 +79,7 @@ _winapi_CloseHandle(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; HANDLE handle; - if (!PyArg_Parse(arg, - "" F_HANDLE ":CloseHandle", - &handle)) + if (!PyArg_Parse(arg, "" F_HANDLE ":CloseHandle", &handle)) goto exit; return_value = _winapi_CloseHandle_impl(module, handle); @@ -100,7 +96,8 @@ PyDoc_STRVAR(_winapi_ConnectNamedPipe__doc__, {"ConnectNamedPipe", (PyCFunction)_winapi_ConnectNamedPipe, METH_VARARGS|METH_KEYWORDS, _winapi_ConnectNamedPipe__doc__}, static PyObject * -_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, int use_overlapped); +_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, + int use_overlapped); static PyObject * _winapi_ConnectNamedPipe(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -110,8 +107,7 @@ _winapi_ConnectNamedPipe(PyModuleDef *module, PyObject *args, PyObject *kwargs) HANDLE handle; int use_overlapped = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "" F_HANDLE "|i:ConnectNamedPipe", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" F_HANDLE "|i:ConnectNamedPipe", _keywords, &handle, &use_overlapped)) goto exit; return_value = _winapi_ConnectNamedPipe_impl(module, handle, use_overlapped); @@ -131,7 +127,11 @@ PyDoc_STRVAR(_winapi_CreateFile__doc__, {"CreateFile", (PyCFunction)_winapi_CreateFile, METH_VARARGS, _winapi_CreateFile__doc__}, static HANDLE -_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file); +_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, + DWORD desired_access, DWORD share_mode, + LPSECURITY_ATTRIBUTES security_attributes, + DWORD creation_disposition, + DWORD flags_and_attributes, HANDLE template_file); static PyObject * _winapi_CreateFile(PyModuleDef *module, PyObject *args) @@ -146,8 +146,7 @@ _winapi_CreateFile(PyModuleDef *module, PyObject *args) HANDLE template_file; HANDLE _return_value; - if (!PyArg_ParseTuple(args, - "skk" F_POINTER "kk" F_HANDLE ":CreateFile", + if (!PyArg_ParseTuple(args, "skk" F_POINTER "kk" F_HANDLE ":CreateFile", &file_name, &desired_access, &share_mode, &security_attributes, &creation_disposition, &flags_and_attributes, &template_file)) goto exit; _return_value = _winapi_CreateFile_impl(module, file_name, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file); @@ -170,7 +169,8 @@ PyDoc_STRVAR(_winapi_CreateJunction__doc__, {"CreateJunction", (PyCFunction)_winapi_CreateJunction, METH_VARARGS, _winapi_CreateJunction__doc__}, static PyObject * -_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, LPWSTR dst_path); +_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, + LPWSTR dst_path); static PyObject * _winapi_CreateJunction(PyModuleDef *module, PyObject *args) @@ -179,8 +179,7 @@ _winapi_CreateJunction(PyModuleDef *module, PyObject *args) LPWSTR src_path; LPWSTR dst_path; - if (!PyArg_ParseTuple(args, - "uu:CreateJunction", + if (!PyArg_ParseTuple(args, "uu:CreateJunction", &src_path, &dst_path)) goto exit; return_value = _winapi_CreateJunction_impl(module, src_path, dst_path); @@ -200,7 +199,11 @@ PyDoc_STRVAR(_winapi_CreateNamedPipe__doc__, {"CreateNamedPipe", (PyCFunction)_winapi_CreateNamedPipe, METH_VARARGS, _winapi_CreateNamedPipe__doc__}, static HANDLE -_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD open_mode, DWORD pipe_mode, DWORD max_instances, DWORD out_buffer_size, DWORD in_buffer_size, DWORD default_timeout, LPSECURITY_ATTRIBUTES security_attributes); +_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, + DWORD open_mode, DWORD pipe_mode, + DWORD max_instances, DWORD out_buffer_size, + DWORD in_buffer_size, DWORD default_timeout, + LPSECURITY_ATTRIBUTES security_attributes); static PyObject * _winapi_CreateNamedPipe(PyModuleDef *module, PyObject *args) @@ -216,8 +219,7 @@ _winapi_CreateNamedPipe(PyModuleDef *module, PyObject *args) LPSECURITY_ATTRIBUTES security_attributes; HANDLE _return_value; - if (!PyArg_ParseTuple(args, - "skkkkkk" F_POINTER ":CreateNamedPipe", + if (!PyArg_ParseTuple(args, "skkkkkk" F_POINTER ":CreateNamedPipe", &name, &open_mode, &pipe_mode, &max_instances, &out_buffer_size, &in_buffer_size, &default_timeout, &security_attributes)) goto exit; _return_value = _winapi_CreateNamedPipe_impl(module, name, open_mode, pipe_mode, max_instances, out_buffer_size, in_buffer_size, default_timeout, security_attributes); @@ -246,7 +248,8 @@ PyDoc_STRVAR(_winapi_CreatePipe__doc__, {"CreatePipe", (PyCFunction)_winapi_CreatePipe, METH_VARARGS, _winapi_CreatePipe__doc__}, static PyObject * -_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, DWORD size); +_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, + DWORD size); static PyObject * _winapi_CreatePipe(PyModuleDef *module, PyObject *args) @@ -255,8 +258,7 @@ _winapi_CreatePipe(PyModuleDef *module, PyObject *args) PyObject *pipe_attrs; DWORD size; - if (!PyArg_ParseTuple(args, - "Ok:CreatePipe", + if (!PyArg_ParseTuple(args, "Ok:CreatePipe", &pipe_attrs, &size)) goto exit; return_value = _winapi_CreatePipe_impl(module, pipe_attrs, size); @@ -285,7 +287,12 @@ PyDoc_STRVAR(_winapi_CreateProcess__doc__, {"CreateProcess", (PyCFunction)_winapi_CreateProcess, METH_VARARGS, _winapi_CreateProcess__doc__}, static PyObject * -_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, Py_UNICODE *command_line, PyObject *proc_attrs, PyObject *thread_attrs, BOOL inherit_handles, DWORD creation_flags, PyObject *env_mapping, Py_UNICODE *current_directory, PyObject *startup_info); +_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, + Py_UNICODE *command_line, PyObject *proc_attrs, + PyObject *thread_attrs, BOOL inherit_handles, + DWORD creation_flags, PyObject *env_mapping, + Py_UNICODE *current_directory, + PyObject *startup_info); static PyObject * _winapi_CreateProcess(PyModuleDef *module, PyObject *args) @@ -301,8 +308,7 @@ _winapi_CreateProcess(PyModuleDef *module, PyObject *args) Py_UNICODE *current_directory; PyObject *startup_info; - if (!PyArg_ParseTuple(args, - "ZZOOikOZO:CreateProcess", + if (!PyArg_ParseTuple(args, "ZZOOikOZO:CreateProcess", &application_name, &command_line, &proc_attrs, &thread_attrs, &inherit_handles, &creation_flags, &env_mapping, ¤t_directory, &startup_info)) goto exit; return_value = _winapi_CreateProcess_impl(module, application_name, command_line, proc_attrs, thread_attrs, inherit_handles, creation_flags, env_mapping, current_directory, startup_info); @@ -327,7 +333,12 @@ PyDoc_STRVAR(_winapi_DuplicateHandle__doc__, {"DuplicateHandle", (PyCFunction)_winapi_DuplicateHandle, METH_VARARGS, _winapi_DuplicateHandle__doc__}, static HANDLE -_winapi_DuplicateHandle_impl(PyModuleDef *module, HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, DWORD desired_access, BOOL inherit_handle, DWORD options); +_winapi_DuplicateHandle_impl(PyModuleDef *module, + HANDLE source_process_handle, + HANDLE source_handle, + HANDLE target_process_handle, + DWORD desired_access, BOOL inherit_handle, + DWORD options); static PyObject * _winapi_DuplicateHandle(PyModuleDef *module, PyObject *args) @@ -341,8 +352,7 @@ _winapi_DuplicateHandle(PyModuleDef *module, PyObject *args) DWORD options = 0; HANDLE _return_value; - if (!PyArg_ParseTuple(args, - "" F_HANDLE "" F_HANDLE "" F_HANDLE "ki|k:DuplicateHandle", + if (!PyArg_ParseTuple(args, "" F_HANDLE "" F_HANDLE "" F_HANDLE "ki|k:DuplicateHandle", &source_process_handle, &source_handle, &target_process_handle, &desired_access, &inherit_handle, &options)) goto exit; _return_value = _winapi_DuplicateHandle_impl(module, source_process_handle, source_handle, target_process_handle, desired_access, inherit_handle, options); @@ -373,9 +383,7 @@ _winapi_ExitProcess(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; UINT ExitCode; - if (!PyArg_Parse(arg, - "I:ExitProcess", - &ExitCode)) + if (!PyArg_Parse(arg, "I:ExitProcess", &ExitCode)) goto exit; return_value = _winapi_ExitProcess_impl(module, ExitCode); @@ -431,9 +439,7 @@ _winapi_GetExitCodeProcess(PyModuleDef *module, PyObject *arg) HANDLE process; DWORD _return_value; - if (!PyArg_Parse(arg, - "" F_HANDLE ":GetExitCodeProcess", - &process)) + if (!PyArg_Parse(arg, "" F_HANDLE ":GetExitCodeProcess", &process)) goto exit; _return_value = _winapi_GetExitCodeProcess_impl(module, process); if ((_return_value == DWORD_MAX) && PyErr_Occurred()) @@ -495,9 +501,7 @@ _winapi_GetModuleFileName(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; HMODULE module_handle; - if (!PyArg_Parse(arg, - "" F_HANDLE ":GetModuleFileName", - &module_handle)) + if (!PyArg_Parse(arg, "" F_HANDLE ":GetModuleFileName", &module_handle)) goto exit; return_value = _winapi_GetModuleFileName_impl(module, module_handle); @@ -529,9 +533,7 @@ _winapi_GetStdHandle(PyModuleDef *module, PyObject *arg) DWORD std_handle; HANDLE _return_value; - if (!PyArg_Parse(arg, - "k:GetStdHandle", - &std_handle)) + if (!PyArg_Parse(arg, "k:GetStdHandle", &std_handle)) goto exit; _return_value = _winapi_GetStdHandle_impl(module, std_handle); if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) @@ -580,7 +582,8 @@ PyDoc_STRVAR(_winapi_OpenProcess__doc__, {"OpenProcess", (PyCFunction)_winapi_OpenProcess, METH_VARARGS, _winapi_OpenProcess__doc__}, static HANDLE -_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, BOOL inherit_handle, DWORD process_id); +_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, + BOOL inherit_handle, DWORD process_id); static PyObject * _winapi_OpenProcess(PyModuleDef *module, PyObject *args) @@ -591,8 +594,7 @@ _winapi_OpenProcess(PyModuleDef *module, PyObject *args) DWORD process_id; HANDLE _return_value; - if (!PyArg_ParseTuple(args, - "kik:OpenProcess", + if (!PyArg_ParseTuple(args, "kik:OpenProcess", &desired_access, &inherit_handle, &process_id)) goto exit; _return_value = _winapi_OpenProcess_impl(module, desired_access, inherit_handle, process_id); @@ -624,8 +626,7 @@ _winapi_PeekNamedPipe(PyModuleDef *module, PyObject *args) HANDLE handle; int size = 0; - if (!PyArg_ParseTuple(args, - "" F_HANDLE "|i:PeekNamedPipe", + if (!PyArg_ParseTuple(args, "" F_HANDLE "|i:PeekNamedPipe", &handle, &size)) goto exit; return_value = _winapi_PeekNamedPipe_impl(module, handle, size); @@ -643,7 +644,8 @@ PyDoc_STRVAR(_winapi_ReadFile__doc__, {"ReadFile", (PyCFunction)_winapi_ReadFile, METH_VARARGS|METH_KEYWORDS, _winapi_ReadFile__doc__}, static PyObject * -_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, int use_overlapped); +_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, + int use_overlapped); static PyObject * _winapi_ReadFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -654,8 +656,7 @@ _winapi_ReadFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) int size; int use_overlapped = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "" F_HANDLE "i|i:ReadFile", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" F_HANDLE "i|i:ReadFile", _keywords, &handle, &size, &use_overlapped)) goto exit; return_value = _winapi_ReadFile_impl(module, handle, size, use_overlapped); @@ -674,7 +675,10 @@ PyDoc_STRVAR(_winapi_SetNamedPipeHandleState__doc__, {"SetNamedPipeHandleState", (PyCFunction)_winapi_SetNamedPipeHandleState, METH_VARARGS, _winapi_SetNamedPipeHandleState__doc__}, static PyObject * -_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, PyObject *mode, PyObject *max_collection_count, PyObject *collect_data_timeout); +_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, + PyObject *mode, + PyObject *max_collection_count, + PyObject *collect_data_timeout); static PyObject * _winapi_SetNamedPipeHandleState(PyModuleDef *module, PyObject *args) @@ -685,8 +689,7 @@ _winapi_SetNamedPipeHandleState(PyModuleDef *module, PyObject *args) PyObject *max_collection_count; PyObject *collect_data_timeout; - if (!PyArg_ParseTuple(args, - "" F_HANDLE "OOO:SetNamedPipeHandleState", + if (!PyArg_ParseTuple(args, "" F_HANDLE "OOO:SetNamedPipeHandleState", &named_pipe, &mode, &max_collection_count, &collect_data_timeout)) goto exit; return_value = _winapi_SetNamedPipeHandleState_impl(module, named_pipe, mode, max_collection_count, collect_data_timeout); @@ -705,7 +708,8 @@ PyDoc_STRVAR(_winapi_TerminateProcess__doc__, {"TerminateProcess", (PyCFunction)_winapi_TerminateProcess, METH_VARARGS, _winapi_TerminateProcess__doc__}, static PyObject * -_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, UINT exit_code); +_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, + UINT exit_code); static PyObject * _winapi_TerminateProcess(PyModuleDef *module, PyObject *args) @@ -714,8 +718,7 @@ _winapi_TerminateProcess(PyModuleDef *module, PyObject *args) HANDLE handle; UINT exit_code; - if (!PyArg_ParseTuple(args, - "" F_HANDLE "I:TerminateProcess", + if (!PyArg_ParseTuple(args, "" F_HANDLE "I:TerminateProcess", &handle, &exit_code)) goto exit; return_value = _winapi_TerminateProcess_impl(module, handle, exit_code); @@ -742,8 +745,7 @@ _winapi_WaitNamedPipe(PyModuleDef *module, PyObject *args) LPCTSTR name; DWORD timeout; - if (!PyArg_ParseTuple(args, - "sk:WaitNamedPipe", + if (!PyArg_ParseTuple(args, "sk:WaitNamedPipe", &name, &timeout)) goto exit; return_value = _winapi_WaitNamedPipe_impl(module, name, timeout); @@ -762,7 +764,9 @@ PyDoc_STRVAR(_winapi_WaitForMultipleObjects__doc__, {"WaitForMultipleObjects", (PyCFunction)_winapi_WaitForMultipleObjects, METH_VARARGS, _winapi_WaitForMultipleObjects__doc__}, static PyObject * -_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, PyObject *handle_seq, BOOL wait_flag, DWORD milliseconds); +_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, + PyObject *handle_seq, BOOL wait_flag, + DWORD milliseconds); static PyObject * _winapi_WaitForMultipleObjects(PyModuleDef *module, PyObject *args) @@ -772,8 +776,7 @@ _winapi_WaitForMultipleObjects(PyModuleDef *module, PyObject *args) BOOL wait_flag; DWORD milliseconds = INFINITE; - if (!PyArg_ParseTuple(args, - "Oi|k:WaitForMultipleObjects", + if (!PyArg_ParseTuple(args, "Oi|k:WaitForMultipleObjects", &handle_seq, &wait_flag, &milliseconds)) goto exit; return_value = _winapi_WaitForMultipleObjects_impl(module, handle_seq, wait_flag, milliseconds); @@ -796,7 +799,8 @@ PyDoc_STRVAR(_winapi_WaitForSingleObject__doc__, {"WaitForSingleObject", (PyCFunction)_winapi_WaitForSingleObject, METH_VARARGS, _winapi_WaitForSingleObject__doc__}, static long -_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, DWORD milliseconds); +_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, + DWORD milliseconds); static PyObject * _winapi_WaitForSingleObject(PyModuleDef *module, PyObject *args) @@ -806,8 +810,7 @@ _winapi_WaitForSingleObject(PyModuleDef *module, PyObject *args) DWORD milliseconds; long _return_value; - if (!PyArg_ParseTuple(args, - "" F_HANDLE "k:WaitForSingleObject", + if (!PyArg_ParseTuple(args, "" F_HANDLE "k:WaitForSingleObject", &handle, &milliseconds)) goto exit; _return_value = _winapi_WaitForSingleObject_impl(module, handle, milliseconds); @@ -828,7 +831,8 @@ PyDoc_STRVAR(_winapi_WriteFile__doc__, {"WriteFile", (PyCFunction)_winapi_WriteFile, METH_VARARGS|METH_KEYWORDS, _winapi_WriteFile__doc__}, static PyObject * -_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, int use_overlapped); +_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, + int use_overlapped); static PyObject * _winapi_WriteFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) @@ -839,8 +843,7 @@ _winapi_WriteFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *buffer; int use_overlapped = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "" F_HANDLE "O|i:WriteFile", _keywords, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" F_HANDLE "O|i:WriteFile", _keywords, &handle, &buffer, &use_overlapped)) goto exit; return_value = _winapi_WriteFile_impl(module, handle, buffer, use_overlapped); @@ -848,4 +851,4 @@ _winapi_WriteFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=107b73892f62ff3c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=98771c6584056d19 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 6130490d944d96cb330317bb2bd7a82a99c9946a Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 15 May 2015 17:53:52 -0700 Subject: Minor code clean-up. --- Modules/_heapqmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 88c35cf32e..6767feb9f2 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -261,8 +261,8 @@ keep_top_bit(Py_ssize_t n) int i = 0; while (n > 1) { - i += 1; n >>= 1; + i++; } return n << i; } -- cgit v1.2.1 From f7a79693f757737cbe54fd27eeb1a3f014f63c85 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 15 May 2015 21:01:13 -0700 Subject: Tighten-up code by eliminating an unnecessary variable. --- Modules/_heapqmodule.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 6767feb9f2..d709dd44c8 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -50,7 +50,7 @@ siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) static int siftup(PyListObject *heap, Py_ssize_t pos) { - Py_ssize_t startpos, endpos, childpos, rightpos, limit; + Py_ssize_t startpos, endpos, childpos, limit; PyObject *tmp1, *tmp2; int cmp; @@ -67,16 +67,15 @@ siftup(PyListObject *heap, Py_ssize_t pos) while (pos < limit) { /* Set childpos to index of smaller child. */ childpos = 2*pos + 1; /* leftmost child position */ - rightpos = childpos + 1; - if (rightpos < endpos) { + if (childpos + 1 < endpos) { cmp = PyObject_RichCompareBool( PyList_GET_ITEM(heap, childpos), - PyList_GET_ITEM(heap, rightpos), + PyList_GET_ITEM(heap, childpos + 1), Py_LT); if (cmp == -1) return -1; if (cmp == 0) - childpos = rightpos; + childpos++; /* rightmost child is smallest */ if (endpos != PyList_GET_SIZE(heap)) { PyErr_SetString(PyExc_RuntimeError, "list changed size during iteration"); @@ -402,7 +401,7 @@ siftdown_max(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) static int siftup_max(PyListObject *heap, Py_ssize_t pos) { - Py_ssize_t startpos, endpos, childpos, rightpos, limit; + Py_ssize_t startpos, endpos, childpos, limit; PyObject *tmp1, *tmp2; int cmp; @@ -419,16 +418,15 @@ siftup_max(PyListObject *heap, Py_ssize_t pos) while (pos < limit) { /* Set childpos to index of smaller child. */ childpos = 2*pos + 1; /* leftmost child position */ - rightpos = childpos + 1; - if (rightpos < endpos) { + if (childpos + 1 < endpos) { cmp = PyObject_RichCompareBool( - PyList_GET_ITEM(heap, rightpos), + PyList_GET_ITEM(heap, childpos + 1), PyList_GET_ITEM(heap, childpos), Py_LT); if (cmp == -1) return -1; if (cmp == 0) - childpos = rightpos; + childpos++; /* rightmost child is smallest */ if (endpos != PyList_GET_SIZE(heap)) { PyErr_SetString(PyExc_RuntimeError, "list changed size during iteration"); -- cgit v1.2.1 From b03ca5cea4d5912250f978ec6544c250e26b2a13 Mon Sep 17 00:00:00 2001 From: Tal Einat Date: Sat, 16 May 2015 14:14:49 +0300 Subject: Issue #20182: converted the signal module to use Argument Clinic --- Modules/clinic/signalmodule.c.h | 432 +++++++++++++++++++++++++++++++++++++ Modules/signalmodule.c | 461 +++++++++++++++++++++------------------- 2 files changed, 678 insertions(+), 215 deletions(-) create mode 100644 Modules/clinic/signalmodule.c.h (limited to 'Modules') diff --git a/Modules/clinic/signalmodule.c.h b/Modules/clinic/signalmodule.c.h new file mode 100644 index 0000000000..30dc745338 --- /dev/null +++ b/Modules/clinic/signalmodule.c.h @@ -0,0 +1,432 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +#if defined(HAVE_ALARM) + +PyDoc_STRVAR(signal_alarm__doc__, +"alarm($module, seconds, /)\n" +"--\n" +"\n" +"Arrange for SIGALRM to arrive after the given number of seconds."); + +#define SIGNAL_ALARM_METHODDEF \ + {"alarm", (PyCFunction)signal_alarm, METH_O, signal_alarm__doc__}, + +static long +signal_alarm_impl(PyModuleDef *module, int seconds); + +static PyObject * +signal_alarm(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + int seconds; + long _return_value; + + if (!PyArg_Parse(arg, "i:alarm", &seconds)) + goto exit; + _return_value = signal_alarm_impl(module, seconds); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyLong_FromLong(_return_value); + +exit: + return return_value; +} + +#endif /* defined(HAVE_ALARM) */ + +#if defined(HAVE_PAUSE) + +PyDoc_STRVAR(signal_pause__doc__, +"pause($module, /)\n" +"--\n" +"\n" +"Wait until a signal arrives."); + +#define SIGNAL_PAUSE_METHODDEF \ + {"pause", (PyCFunction)signal_pause, METH_NOARGS, signal_pause__doc__}, + +static PyObject * +signal_pause_impl(PyModuleDef *module); + +static PyObject * +signal_pause(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return signal_pause_impl(module); +} + +#endif /* defined(HAVE_PAUSE) */ + +PyDoc_STRVAR(signal_signal__doc__, +"signal($module, signalnum, handler, /)\n" +"--\n" +"\n" +"Set the action for the given signal.\n" +"\n" +"The action can be SIG_DFL, SIG_IGN, or a callable Python object.\n" +"The previous action is returned. See getsignal() for possible return values.\n" +"\n" +"*** IMPORTANT NOTICE ***\n" +"A signal handler function is called with two arguments:\n" +"the first is the signal number, the second is the interrupted stack frame."); + +#define SIGNAL_SIGNAL_METHODDEF \ + {"signal", (PyCFunction)signal_signal, METH_VARARGS, signal_signal__doc__}, + +static PyObject * +signal_signal_impl(PyModuleDef *module, int signalnum, PyObject *handler); + +static PyObject * +signal_signal(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int signalnum; + PyObject *handler; + + if (!PyArg_ParseTuple(args, "iO:signal", + &signalnum, &handler)) + goto exit; + return_value = signal_signal_impl(module, signalnum, handler); + +exit: + return return_value; +} + +PyDoc_STRVAR(signal_getsignal__doc__, +"getsignal($module, signalnum, /)\n" +"--\n" +"\n" +"Return the current action for the given signal.\n" +"\n" +"The return value can be:\n" +" SIG_IGN -- if the signal is being ignored\n" +" SIG_DFL -- if the default action for the signal is in effect\n" +" None -- if an unknown handler is in effect\n" +" anything else -- the callable Python object used as a handler"); + +#define SIGNAL_GETSIGNAL_METHODDEF \ + {"getsignal", (PyCFunction)signal_getsignal, METH_O, signal_getsignal__doc__}, + +static PyObject * +signal_getsignal_impl(PyModuleDef *module, int signalnum); + +static PyObject * +signal_getsignal(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + int signalnum; + + if (!PyArg_Parse(arg, "i:getsignal", &signalnum)) + goto exit; + return_value = signal_getsignal_impl(module, signalnum); + +exit: + return return_value; +} + +#if defined(HAVE_SIGINTERRUPT) + +PyDoc_STRVAR(signal_siginterrupt__doc__, +"siginterrupt($module, signalnum, flag, /)\n" +"--\n" +"\n" +"Change system call restart behaviour.\n" +"\n" +"If flag is False, system calls will be restarted when interrupted by\n" +"signal sig, else system calls will be interrupted."); + +#define SIGNAL_SIGINTERRUPT_METHODDEF \ + {"siginterrupt", (PyCFunction)signal_siginterrupt, METH_VARARGS, signal_siginterrupt__doc__}, + +static PyObject * +signal_siginterrupt_impl(PyModuleDef *module, int signalnum, int flag); + +static PyObject * +signal_siginterrupt(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int signalnum; + int flag; + + if (!PyArg_ParseTuple(args, "ii:siginterrupt", + &signalnum, &flag)) + goto exit; + return_value = signal_siginterrupt_impl(module, signalnum, flag); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SIGINTERRUPT) */ + +#if defined(HAVE_SETITIMER) + +PyDoc_STRVAR(signal_setitimer__doc__, +"setitimer($module, which, seconds, interval=0.0, /)\n" +"--\n" +"\n" +"Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL or ITIMER_PROF).\n" +"\n" +"The timer will fire after value seconds and after that every interval seconds.\n" +"The itimer can be cleared by setting seconds to zero.\n" +"\n" +"Returns old values as a tuple: (delay, interval)."); + +#define SIGNAL_SETITIMER_METHODDEF \ + {"setitimer", (PyCFunction)signal_setitimer, METH_VARARGS, signal_setitimer__doc__}, + +static PyObject * +signal_setitimer_impl(PyModuleDef *module, int which, double seconds, + double interval); + +static PyObject * +signal_setitimer(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int which; + double seconds; + double interval = 0.0; + + if (!PyArg_ParseTuple(args, "id|d:setitimer", + &which, &seconds, &interval)) + goto exit; + return_value = signal_setitimer_impl(module, which, seconds, interval); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SETITIMER) */ + +#if defined(HAVE_GETITIMER) + +PyDoc_STRVAR(signal_getitimer__doc__, +"getitimer($module, which, /)\n" +"--\n" +"\n" +"Returns current value of given itimer."); + +#define SIGNAL_GETITIMER_METHODDEF \ + {"getitimer", (PyCFunction)signal_getitimer, METH_O, signal_getitimer__doc__}, + +static PyObject * +signal_getitimer_impl(PyModuleDef *module, int which); + +static PyObject * +signal_getitimer(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + int which; + + if (!PyArg_Parse(arg, "i:getitimer", &which)) + goto exit; + return_value = signal_getitimer_impl(module, which); + +exit: + return return_value; +} + +#endif /* defined(HAVE_GETITIMER) */ + +#if defined(PYPTHREAD_SIGMASK) + +PyDoc_STRVAR(signal_pthread_sigmask__doc__, +"pthread_sigmask($module, how, mask, /)\n" +"--\n" +"\n" +"Fetch and/or change the signal mask of the calling thread."); + +#define SIGNAL_PTHREAD_SIGMASK_METHODDEF \ + {"pthread_sigmask", (PyCFunction)signal_pthread_sigmask, METH_VARARGS, signal_pthread_sigmask__doc__}, + +static PyObject * +signal_pthread_sigmask_impl(PyModuleDef *module, int how, PyObject *mask); + +static PyObject * +signal_pthread_sigmask(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + int how; + PyObject *mask; + + if (!PyArg_ParseTuple(args, "iO:pthread_sigmask", + &how, &mask)) + goto exit; + return_value = signal_pthread_sigmask_impl(module, how, mask); + +exit: + return return_value; +} + +#endif /* defined(PYPTHREAD_SIGMASK) */ + +#if defined(HAVE_SIGPENDING) + +PyDoc_STRVAR(signal_sigpending__doc__, +"sigpending($module, /)\n" +"--\n" +"\n" +"Examine pending signals.\n" +"\n" +"Returns a set of signal numbers that are pending for delivery to\n" +"the calling thread."); + +#define SIGNAL_SIGPENDING_METHODDEF \ + {"sigpending", (PyCFunction)signal_sigpending, METH_NOARGS, signal_sigpending__doc__}, + +static PyObject * +signal_sigpending_impl(PyModuleDef *module); + +static PyObject * +signal_sigpending(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return signal_sigpending_impl(module); +} + +#endif /* defined(HAVE_SIGPENDING) */ + +#if defined(HAVE_SIGWAIT) + +PyDoc_STRVAR(signal_sigwait__doc__, +"sigwait($module, sigset, /)\n" +"--\n" +"\n" +"Wait for a signal.\n" +"\n" +"Suspend execution of the calling thread until the delivery of one of the\n" +"signals specified in the signal set sigset. The function accepts the signal\n" +"and returns the signal number."); + +#define SIGNAL_SIGWAIT_METHODDEF \ + {"sigwait", (PyCFunction)signal_sigwait, METH_O, signal_sigwait__doc__}, + +#endif /* defined(HAVE_SIGWAIT) */ + +#if defined(HAVE_SIGWAITINFO) + +PyDoc_STRVAR(signal_sigwaitinfo__doc__, +"sigwaitinfo($module, sigset, /)\n" +"--\n" +"\n" +"Wait synchronously until one of the signals in *sigset* is delivered.\n" +"\n" +"Returns a struct_siginfo containing information about the signal."); + +#define SIGNAL_SIGWAITINFO_METHODDEF \ + {"sigwaitinfo", (PyCFunction)signal_sigwaitinfo, METH_O, signal_sigwaitinfo__doc__}, + +#endif /* defined(HAVE_SIGWAITINFO) */ + +#if defined(HAVE_SIGTIMEDWAIT) + +PyDoc_STRVAR(signal_sigtimedwait__doc__, +"sigtimedwait($module, sigset, timeout, /)\n" +"--\n" +"\n" +"Like sigwaitinfo(), but with a timeout.\n" +"\n" +"The timeout is specified in seconds, with floating point numbers allowed."); + +#define SIGNAL_SIGTIMEDWAIT_METHODDEF \ + {"sigtimedwait", (PyCFunction)signal_sigtimedwait, METH_VARARGS, signal_sigtimedwait__doc__}, + +static PyObject * +signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, + PyObject *timeout); + +static PyObject * +signal_sigtimedwait(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *sigset; + PyObject *timeout; + + if (!PyArg_UnpackTuple(args, "sigtimedwait", + 2, 2, + &sigset, &timeout)) + goto exit; + return_value = signal_sigtimedwait_impl(module, sigset, timeout); + +exit: + return return_value; +} + +#endif /* defined(HAVE_SIGTIMEDWAIT) */ + +#if (defined(HAVE_PTHREAD_KILL) && defined(WITH_THREAD)) + +PyDoc_STRVAR(signal_pthread_kill__doc__, +"pthread_kill($module, thread_id, signalnum, /)\n" +"--\n" +"\n" +"Send a signal to a thread."); + +#define SIGNAL_PTHREAD_KILL_METHODDEF \ + {"pthread_kill", (PyCFunction)signal_pthread_kill, METH_VARARGS, signal_pthread_kill__doc__}, + +static PyObject * +signal_pthread_kill_impl(PyModuleDef *module, long thread_id, int signalnum); + +static PyObject * +signal_pthread_kill(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + long thread_id; + int signalnum; + + if (!PyArg_ParseTuple(args, "li:pthread_kill", + &thread_id, &signalnum)) + goto exit; + return_value = signal_pthread_kill_impl(module, thread_id, signalnum); + +exit: + return return_value; +} + +#endif /* (defined(HAVE_PTHREAD_KILL) && defined(WITH_THREAD)) */ + +#ifndef SIGNAL_ALARM_METHODDEF + #define SIGNAL_ALARM_METHODDEF +#endif /* !defined(SIGNAL_ALARM_METHODDEF) */ + +#ifndef SIGNAL_PAUSE_METHODDEF + #define SIGNAL_PAUSE_METHODDEF +#endif /* !defined(SIGNAL_PAUSE_METHODDEF) */ + +#ifndef SIGNAL_SIGINTERRUPT_METHODDEF + #define SIGNAL_SIGINTERRUPT_METHODDEF +#endif /* !defined(SIGNAL_SIGINTERRUPT_METHODDEF) */ + +#ifndef SIGNAL_SETITIMER_METHODDEF + #define SIGNAL_SETITIMER_METHODDEF +#endif /* !defined(SIGNAL_SETITIMER_METHODDEF) */ + +#ifndef SIGNAL_GETITIMER_METHODDEF + #define SIGNAL_GETITIMER_METHODDEF +#endif /* !defined(SIGNAL_GETITIMER_METHODDEF) */ + +#ifndef SIGNAL_PTHREAD_SIGMASK_METHODDEF + #define SIGNAL_PTHREAD_SIGMASK_METHODDEF +#endif /* !defined(SIGNAL_PTHREAD_SIGMASK_METHODDEF) */ + +#ifndef SIGNAL_SIGPENDING_METHODDEF + #define SIGNAL_SIGPENDING_METHODDEF +#endif /* !defined(SIGNAL_SIGPENDING_METHODDEF) */ + +#ifndef SIGNAL_SIGWAIT_METHODDEF + #define SIGNAL_SIGWAIT_METHODDEF +#endif /* !defined(SIGNAL_SIGWAIT_METHODDEF) */ + +#ifndef SIGNAL_SIGWAITINFO_METHODDEF + #define SIGNAL_SIGWAITINFO_METHODDEF +#endif /* !defined(SIGNAL_SIGWAITINFO_METHODDEF) */ + +#ifndef SIGNAL_SIGTIMEDWAIT_METHODDEF + #define SIGNAL_SIGTIMEDWAIT_METHODDEF +#endif /* !defined(SIGNAL_SIGTIMEDWAIT_METHODDEF) */ + +#ifndef SIGNAL_PTHREAD_KILL_METHODDEF + #define SIGNAL_PTHREAD_KILL_METHODDEF +#endif /* !defined(SIGNAL_PTHREAD_KILL_METHODDEF) */ +/*[clinic end generated code: output=65ca7b83632eda99 input=a9049054013a1b77]*/ diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index cc13194dfa..d7b44f6695 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -52,6 +52,13 @@ # endif #endif +#include "clinic/signalmodule.c.h" + +/*[clinic input] +module signal +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b0301a3bde5fe9d3]*/ + /* NOTES ON THE INTERACTION BETWEEN SIGNALS AND THREADS @@ -322,25 +329,37 @@ signal_handler(int sig_num) #ifdef HAVE_ALARM -static PyObject * -signal_alarm(PyObject *self, PyObject *args) + +/*[clinic input] +signal.alarm -> long + + seconds: int + / + +Arrange for SIGALRM to arrive after the given number of seconds. +[clinic start generated code]*/ + +static long +signal_alarm_impl(PyModuleDef *module, int seconds) +/*[clinic end generated code: output=f5f9badaab25d3e7 input=0d5e97e0e6f39e86]*/ { - int t; - if (!PyArg_ParseTuple(args, "i:alarm", &t)) - return NULL; /* alarm() returns the number of seconds remaining */ - return PyLong_FromLong((long)alarm(t)); + return (long)alarm(seconds); } -PyDoc_STRVAR(alarm_doc, -"alarm(seconds)\n\ -\n\ -Arrange for SIGALRM to arrive after the given number of seconds."); #endif #ifdef HAVE_PAUSE + +/*[clinic input] +signal.pause + +Wait until a signal arrives. +[clinic start generated code]*/ + static PyObject * -signal_pause(PyObject *self) +signal_pause_impl(PyModuleDef *module) +/*[clinic end generated code: output=9245704caa63bbe9 input=f03de0f875752062]*/ { Py_BEGIN_ALLOW_THREADS (void)pause(); @@ -351,29 +370,38 @@ signal_pause(PyObject *self) if (PyErr_CheckSignals()) return NULL; - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } -PyDoc_STRVAR(pause_doc, -"pause()\n\ -\n\ -Wait until a signal arrives."); #endif +/*[clinic input] +signal.signal + + signalnum: int + handler: object + / + +Set the action for the given signal. + +The action can be SIG_DFL, SIG_IGN, or a callable Python object. +The previous action is returned. See getsignal() for possible return values. + +*** IMPORTANT NOTICE *** +A signal handler function is called with two arguments: +the first is the signal number, the second is the interrupted stack frame. +[clinic start generated code]*/ + static PyObject * -signal_signal(PyObject *self, PyObject *args) +signal_signal_impl(PyModuleDef *module, int signalnum, PyObject *handler) +/*[clinic end generated code: output=622d7d0beebea546 input=deee84af5fa0432c]*/ { - PyObject *obj; - int sig_num; PyObject *old_handler; void (*func)(int); - if (!PyArg_ParseTuple(args, "iO:signal", &sig_num, &obj)) - return NULL; #ifdef MS_WINDOWS - /* Validate that sig_num is one of the allowable signals */ - switch (sig_num) { + /* Validate that signalnum is one of the allowable signals */ + switch (signalnum) { case SIGABRT: break; #ifdef SIGBREAK /* Issue #10003: SIGBREAK is not documented as permitted, but works @@ -397,61 +425,63 @@ signal_signal(PyObject *self, PyObject *args) return NULL; } #endif - if (sig_num < 1 || sig_num >= NSIG) { + if (signalnum < 1 || signalnum >= NSIG) { PyErr_SetString(PyExc_ValueError, "signal number out of range"); return NULL; } - if (obj == IgnoreHandler) + if (handler == IgnoreHandler) func = SIG_IGN; - else if (obj == DefaultHandler) + else if (handler == DefaultHandler) func = SIG_DFL; - else if (!PyCallable_Check(obj)) { + else if (!PyCallable_Check(handler)) { PyErr_SetString(PyExc_TypeError, "signal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable object"); return NULL; } else func = signal_handler; - if (PyOS_setsig(sig_num, func) == SIG_ERR) { + if (PyOS_setsig(signalnum, func) == SIG_ERR) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } - old_handler = Handlers[sig_num].func; - Handlers[sig_num].tripped = 0; - Py_INCREF(obj); - Handlers[sig_num].func = obj; + old_handler = Handlers[signalnum].func; + Handlers[signalnum].tripped = 0; + Py_INCREF(handler); + Handlers[signalnum].func = handler; if (old_handler != NULL) return old_handler; else Py_RETURN_NONE; } -PyDoc_STRVAR(signal_doc, -"signal(sig, action) -> action\n\ -\n\ -Set the action for the given signal. The action can be SIG_DFL,\n\ -SIG_IGN, or a callable Python object. The previous action is\n\ -returned. See getsignal() for possible return values.\n\ -\n\ -*** IMPORTANT NOTICE ***\n\ -A signal handler function is called with two arguments:\n\ -the first is the signal number, the second is the interrupted stack frame."); +/*[clinic input] +signal.getsignal + + signalnum: int + / + +Return the current action for the given signal. + +The return value can be: + SIG_IGN -- if the signal is being ignored + SIG_DFL -- if the default action for the signal is in effect + None -- if an unknown handler is in effect + anything else -- the callable Python object used as a handler +[clinic start generated code]*/ static PyObject * -signal_getsignal(PyObject *self, PyObject *args) +signal_getsignal_impl(PyModuleDef *module, int signalnum) +/*[clinic end generated code: output=d50ec355757e360c input=ac23a00f19dfa509]*/ { - int sig_num; PyObject *old_handler; - if (!PyArg_ParseTuple(args, "i:getsignal", &sig_num)) - return NULL; - if (sig_num < 1 || sig_num >= NSIG) { + if (signalnum < 1 || signalnum >= NSIG) { PyErr_SetString(PyExc_ValueError, "signal number out of range"); return NULL; } - old_handler = Handlers[sig_num].func; + old_handler = Handlers[signalnum].func; if (old_handler != NULL) { Py_INCREF(old_handler); return old_handler; @@ -461,47 +491,41 @@ signal_getsignal(PyObject *self, PyObject *args) } } -PyDoc_STRVAR(getsignal_doc, -"getsignal(sig) -> action\n\ -\n\ -Return the current action for the given signal. The return value can be:\n\ -SIG_IGN -- if the signal is being ignored\n\ -SIG_DFL -- if the default action for the signal is in effect\n\ -None -- if an unknown handler is in effect\n\ -anything else -- the callable Python object used as a handler"); - #ifdef HAVE_SIGINTERRUPT -PyDoc_STRVAR(siginterrupt_doc, -"siginterrupt(sig, flag) -> None\n\ -change system call restart behaviour: if flag is False, system calls\n\ -will be restarted when interrupted by signal sig, else system calls\n\ -will be interrupted."); + +/*[clinic input] +signal.siginterrupt + + signalnum: int + flag: int + / + +Change system call restart behaviour. + +If flag is False, system calls will be restarted when interrupted by +signal sig, else system calls will be interrupted. +[clinic start generated code]*/ static PyObject * -signal_siginterrupt(PyObject *self, PyObject *args) +signal_siginterrupt_impl(PyModuleDef *module, int signalnum, int flag) +/*[clinic end generated code: output=5dcf8b031b0e8044 input=4160acacca3e2099]*/ { - int sig_num; - int flag; - - if (!PyArg_ParseTuple(args, "ii:siginterrupt", &sig_num, &flag)) - return NULL; - if (sig_num < 1 || sig_num >= NSIG) { + if (signalnum < 1 || signalnum >= NSIG) { PyErr_SetString(PyExc_ValueError, "signal number out of range"); return NULL; } - if (siginterrupt(sig_num, flag)<0) { + if (siginterrupt(signalnum, flag)<0) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } - - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } #endif -static PyObject * + +static PyObject* signal_set_wakeup_fd(PyObject *self, PyObject *args) { struct _Py_stat_struct status; @@ -640,62 +664,69 @@ PySignal_SetWakeupFd(int fd) #ifdef HAVE_SETITIMER + +/*[clinic input] +signal.setitimer + + which: int + seconds: double + interval: double = 0.0 + / + +Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL or ITIMER_PROF). + +The timer will fire after value seconds and after that every interval seconds. +The itimer can be cleared by setting seconds to zero. + +Returns old values as a tuple: (delay, interval). +[clinic start generated code]*/ + static PyObject * -signal_setitimer(PyObject *self, PyObject *args) +signal_setitimer_impl(PyModuleDef *module, int which, double seconds, + double interval) +/*[clinic end generated code: output=9a9227a27bd05988 input=0d27d417cfcbd51a]*/ { - double first; - double interval = 0; - int which; struct itimerval new, old; - if(!PyArg_ParseTuple(args, "id|d:setitimer", &which, &first, &interval)) - return NULL; - - timeval_from_double(first, &new.it_value); + timeval_from_double(seconds, &new.it_value); timeval_from_double(interval, &new.it_interval); /* Let OS check "which" value */ if (setitimer(which, &new, &old) != 0) { - PyErr_SetFromErrno(ItimerError); - return NULL; + PyErr_SetFromErrno(ItimerError); + return NULL; } return itimer_retval(&old); } -PyDoc_STRVAR(setitimer_doc, -"setitimer(which, seconds[, interval])\n\ -\n\ -Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL\n\ -or ITIMER_PROF) to fire after value seconds and after\n\ -that every interval seconds.\n\ -The itimer can be cleared by setting seconds to zero.\n\ -\n\ -Returns old values as a tuple: (delay, interval)."); #endif #ifdef HAVE_GETITIMER + +/*[clinic input] +signal.getitimer + + which: int + / + +Returns current value of given itimer. +[clinic start generated code]*/ + static PyObject * -signal_getitimer(PyObject *self, PyObject *args) +signal_getitimer_impl(PyModuleDef *module, int which) +/*[clinic end generated code: output=d1349ab18aadc569 input=f7d21d38f3490627]*/ { - int which; struct itimerval old; - if (!PyArg_ParseTuple(args, "i:getitimer", &which)) - return NULL; - if (getitimer(which, &old) != 0) { - PyErr_SetFromErrno(ItimerError); - return NULL; + PyErr_SetFromErrno(ItimerError); + return NULL; } return itimer_retval(&old); } -PyDoc_STRVAR(getitimer_doc, -"getitimer(which)\n\ -\n\ -Returns current value of given itimer."); #endif #if defined(PYPTHREAD_SIGMASK) || defined(HAVE_SIGWAIT) || \ @@ -786,21 +817,28 @@ sigset_to_set(sigset_t mask) #endif #ifdef PYPTHREAD_SIGMASK + +/*[clinic input] +signal.pthread_sigmask + + how: int + mask: object + / + +Fetch and/or change the signal mask of the calling thread. +[clinic start generated code]*/ + static PyObject * -signal_pthread_sigmask(PyObject *self, PyObject *args) +signal_pthread_sigmask_impl(PyModuleDef *module, int how, PyObject *mask) +/*[clinic end generated code: output=b043a9f0eeb1e075 input=f3b7d7a61b7b8283]*/ { - int how; - PyObject *signals; - sigset_t mask, previous; + sigset_t newmask, previous; int err; - if (!PyArg_ParseTuple(args, "iO:pthread_sigmask", &how, &signals)) + if (iterable_to_sigset(mask, &newmask)) return NULL; - if (iterable_to_sigset(signals, &mask)) - return NULL; - - err = pthread_sigmask(how, &mask, &previous); + err = pthread_sigmask(how, &newmask, &previous); if (err != 0) { errno = err; PyErr_SetFromErrno(PyExc_OSError); @@ -814,16 +852,23 @@ signal_pthread_sigmask(PyObject *self, PyObject *args) return sigset_to_set(previous); } -PyDoc_STRVAR(signal_pthread_sigmask_doc, -"pthread_sigmask(how, mask) -> old mask\n\ -\n\ -Fetch and/or change the signal mask of the calling thread."); #endif /* #ifdef PYPTHREAD_SIGMASK */ #ifdef HAVE_SIGPENDING + +/*[clinic input] +signal.sigpending + +Examine pending signals. + +Returns a set of signal numbers that are pending for delivery to +the calling thread. +[clinic start generated code]*/ + static PyObject * -signal_sigpending(PyObject *self) +signal_sigpending_impl(PyModuleDef *module) +/*[clinic end generated code: output=bf4ced803e7e51dd input=e0036c016f874e29]*/ { int err; sigset_t mask; @@ -833,25 +878,32 @@ signal_sigpending(PyObject *self) return sigset_to_set(mask); } -PyDoc_STRVAR(signal_sigpending_doc, -"sigpending() -> list\n\ -\n\ -Examine pending signals."); #endif /* #ifdef HAVE_SIGPENDING */ #ifdef HAVE_SIGWAIT + +/*[clinic input] +signal.sigwait + + sigset: object + / + +Wait for a signal. + +Suspend execution of the calling thread until the delivery of one of the +signals specified in the signal set sigset. The function accepts the signal +and returns the signal number. +[clinic start generated code]*/ + static PyObject * -signal_sigwait(PyObject *self, PyObject *args) +signal_sigwait(PyModuleDef *module, PyObject *sigset) +/*[clinic end generated code: output=dae53048b0336a5c input=11af2d82d83c2e94]*/ { - PyObject *signals; sigset_t set; int err, signum; - if (!PyArg_ParseTuple(args, "O:sigwait", &signals)) - return NULL; - - if (iterable_to_sigset(signals, &set)) + if (iterable_to_sigset(sigset, &set)) return NULL; Py_BEGIN_ALLOW_THREADS @@ -865,11 +917,8 @@ signal_sigwait(PyObject *self, PyObject *args) return PyLong_FromLong(signum); } -PyDoc_STRVAR(signal_sigwait_doc, -"sigwait(sigset) -> signum\n\ -\n\ -Wait a signal."); -#endif /* #ifdef HAVE_SIGPENDING */ +#endif /* #ifdef HAVE_SIGWAIT */ + #if defined(HAVE_SIGWAITINFO) || defined(HAVE_SIGTIMEDWAIT) static int initialized; @@ -924,19 +973,28 @@ fill_siginfo(siginfo_t *si) #endif #ifdef HAVE_SIGWAITINFO + +/*[clinic input] +signal.sigwaitinfo + + sigset: object + / + +Wait synchronously until one of the signals in *sigset* is delivered. + +Returns a struct_siginfo containing information about the signal. +[clinic start generated code]*/ + static PyObject * -signal_sigwaitinfo(PyObject *self, PyObject *args) +signal_sigwaitinfo(PyModuleDef *module, PyObject *sigset) +/*[clinic end generated code: output=0bb53b07e5e926b5 input=f3779a74a991e171]*/ { - PyObject *signals; sigset_t set; siginfo_t si; int err; int async_err = 0; - if (!PyArg_ParseTuple(args, "O:sigwaitinfo", &signals)) - return NULL; - - if (iterable_to_sigset(signals, &set)) + if (iterable_to_sigset(sigset, &set)) return NULL; do { @@ -951,29 +1009,33 @@ signal_sigwaitinfo(PyObject *self, PyObject *args) return fill_siginfo(&si); } -PyDoc_STRVAR(signal_sigwaitinfo_doc, -"sigwaitinfo(sigset) -> struct_siginfo\n\ -\n\ -Wait synchronously for a signal until one of the signals in *sigset* is\n\ -delivered.\n\ -Returns a struct_siginfo containing information about the signal."); #endif /* #ifdef HAVE_SIGWAITINFO */ #ifdef HAVE_SIGTIMEDWAIT + +/*[clinic input] +signal.sigtimedwait + + sigset: object + timeout: object + / + +Like sigwaitinfo(), but with a timeout. + +The timeout is specified in seconds, with floating point numbers allowed. +[clinic start generated code]*/ + static PyObject * -signal_sigtimedwait(PyObject *self, PyObject *args) +signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, + PyObject *timeout) +/*[clinic end generated code: output=e6e049f2bddea688 input=036bbab9b15cb8de]*/ { - PyObject *signals, *timeout_obj; struct timespec ts; sigset_t set; siginfo_t si; int res; _PyTime_t timeout, deadline, monotonic; - if (!PyArg_ParseTuple(args, "OO:sigtimedwait", - &signals, &timeout_obj)) - return NULL; - if (_PyTime_FromSecondsObject(&timeout, timeout_obj, _PyTime_ROUND_CEILING) < 0) return NULL; @@ -983,7 +1045,7 @@ signal_sigtimedwait(PyObject *self, PyObject *args) return NULL; } - if (iterable_to_sigset(signals, &set)) + if (iterable_to_sigset(sigset, &set)) return NULL; deadline = _PyTime_GetMonotonicClock() + timeout; @@ -1019,26 +1081,28 @@ signal_sigtimedwait(PyObject *self, PyObject *args) return fill_siginfo(&si); } -PyDoc_STRVAR(signal_sigtimedwait_doc, -"sigtimedwait(sigset, (timeout_sec, timeout_nsec)) -> struct_siginfo\n\ -\n\ -Like sigwaitinfo(), but with a timeout specified as a tuple of (seconds,\n\ -nanoseconds)."); #endif /* #ifdef HAVE_SIGTIMEDWAIT */ #if defined(HAVE_PTHREAD_KILL) && defined(WITH_THREAD) + +/*[clinic input] +signal.pthread_kill + + thread_id: long + signalnum: int + / + +Send a signal to a thread. +[clinic start generated code]*/ + static PyObject * -signal_pthread_kill(PyObject *self, PyObject *args) +signal_pthread_kill_impl(PyModuleDef *module, long thread_id, int signalnum) +/*[clinic end generated code: output=35aed2713c756d7a input=77ed6a3b6f2a8122]*/ { - long tid; - int signum; int err; - if (!PyArg_ParseTuple(args, "li:pthread_kill", &tid, &signum)) - return NULL; - - err = pthread_kill((pthread_t)tid, signum); + err = pthread_kill((pthread_t)thread_id, signalnum); if (err != 0) { errno = err; PyErr_SetFromErrno(PyExc_OSError); @@ -1052,62 +1116,29 @@ signal_pthread_kill(PyObject *self, PyObject *args) Py_RETURN_NONE; } -PyDoc_STRVAR(signal_pthread_kill_doc, -"pthread_kill(thread_id, signum)\n\ -\n\ -Send a signal to a thread."); #endif /* #if defined(HAVE_PTHREAD_KILL) && defined(WITH_THREAD) */ -/* List of functions defined in the module */ +/* List of functions defined in the module -- some of the methoddefs are + defined to nothing if the corresponding C function is not available. */ static PyMethodDef signal_methods[] = { -#ifdef HAVE_ALARM - {"alarm", signal_alarm, METH_VARARGS, alarm_doc}, -#endif -#ifdef HAVE_SETITIMER - {"setitimer", signal_setitimer, METH_VARARGS, setitimer_doc}, -#endif -#ifdef HAVE_GETITIMER - {"getitimer", signal_getitimer, METH_VARARGS, getitimer_doc}, -#endif - {"signal", signal_signal, METH_VARARGS, signal_doc}, - {"getsignal", signal_getsignal, METH_VARARGS, getsignal_doc}, + {"default_int_handler", signal_default_int_handler, METH_VARARGS, default_int_handler_doc}, + SIGNAL_ALARM_METHODDEF + SIGNAL_SETITIMER_METHODDEF + SIGNAL_GETITIMER_METHODDEF + SIGNAL_SIGNAL_METHODDEF + SIGNAL_GETSIGNAL_METHODDEF {"set_wakeup_fd", signal_set_wakeup_fd, METH_VARARGS, set_wakeup_fd_doc}, -#ifdef HAVE_SIGINTERRUPT - {"siginterrupt", signal_siginterrupt, METH_VARARGS, siginterrupt_doc}, -#endif -#ifdef HAVE_PAUSE - {"pause", (PyCFunction)signal_pause, - METH_NOARGS, pause_doc}, -#endif - {"default_int_handler", signal_default_int_handler, - METH_VARARGS, default_int_handler_doc}, -#if defined(HAVE_PTHREAD_KILL) && defined(WITH_THREAD) - {"pthread_kill", (PyCFunction)signal_pthread_kill, - METH_VARARGS, signal_pthread_kill_doc}, -#endif -#ifdef PYPTHREAD_SIGMASK - {"pthread_sigmask", (PyCFunction)signal_pthread_sigmask, - METH_VARARGS, signal_pthread_sigmask_doc}, -#endif -#ifdef HAVE_SIGPENDING - {"sigpending", (PyCFunction)signal_sigpending, - METH_NOARGS, signal_sigpending_doc}, -#endif -#ifdef HAVE_SIGWAIT - {"sigwait", (PyCFunction)signal_sigwait, - METH_VARARGS, signal_sigwait_doc}, -#endif -#ifdef HAVE_SIGWAITINFO - {"sigwaitinfo", (PyCFunction)signal_sigwaitinfo, - METH_VARARGS, signal_sigwaitinfo_doc}, -#endif -#ifdef HAVE_SIGTIMEDWAIT - {"sigtimedwait", (PyCFunction)signal_sigtimedwait, - METH_VARARGS, signal_sigtimedwait_doc}, -#endif - {NULL, NULL} /* sentinel */ + SIGNAL_SIGINTERRUPT_METHODDEF + SIGNAL_PAUSE_METHODDEF + SIGNAL_PTHREAD_KILL_METHODDEF + SIGNAL_PTHREAD_SIGMASK_METHODDEF + SIGNAL_SIGPENDING_METHODDEF + SIGNAL_SIGWAIT_METHODDEF + SIGNAL_SIGWAITINFO_METHODDEF + SIGNAL_SIGTIMEDWAIT_METHODDEF + {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From d17d4367a0ca11127a01033d7a677698573b2ca6 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 16 May 2015 15:57:56 +0300 Subject: Fixed compilation error in signalmodule.c (issue #20182). --- Modules/clinic/signalmodule.c.h | 10 +++++----- Modules/signalmodule.c | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/signalmodule.c.h b/Modules/clinic/signalmodule.c.h index 30dc745338..ec07ef1f8e 100644 --- a/Modules/clinic/signalmodule.c.h +++ b/Modules/clinic/signalmodule.c.h @@ -333,20 +333,20 @@ PyDoc_STRVAR(signal_sigtimedwait__doc__, static PyObject * signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, - PyObject *timeout); + PyObject *timeout_obj); static PyObject * signal_sigtimedwait(PyModuleDef *module, PyObject *args) { PyObject *return_value = NULL; PyObject *sigset; - PyObject *timeout; + PyObject *timeout_obj; if (!PyArg_UnpackTuple(args, "sigtimedwait", 2, 2, - &sigset, &timeout)) + &sigset, &timeout_obj)) goto exit; - return_value = signal_sigtimedwait_impl(module, sigset, timeout); + return_value = signal_sigtimedwait_impl(module, sigset, timeout_obj); exit: return return_value; @@ -429,4 +429,4 @@ exit: #ifndef SIGNAL_PTHREAD_KILL_METHODDEF #define SIGNAL_PTHREAD_KILL_METHODDEF #endif /* !defined(SIGNAL_PTHREAD_KILL_METHODDEF) */ -/*[clinic end generated code: output=65ca7b83632eda99 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b99278c16c40ea43 input=a9049054013a1b77]*/ diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index d7b44f6695..70f3052149 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -1017,7 +1017,7 @@ signal_sigwaitinfo(PyModuleDef *module, PyObject *sigset) signal.sigtimedwait sigset: object - timeout: object + timeout as timeout_obj: object / Like sigwaitinfo(), but with a timeout. @@ -1027,8 +1027,8 @@ The timeout is specified in seconds, with floating point numbers allowed. static PyObject * signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, - PyObject *timeout) -/*[clinic end generated code: output=e6e049f2bddea688 input=036bbab9b15cb8de]*/ + PyObject *timeout_obj) +/*[clinic end generated code: output=c1960b5cea139929 input=53fd4ea3e3724eb8]*/ { struct timespec ts; sigset_t set; -- cgit v1.2.1 From 2dd93d7970f6f6538069f41b1a3ba4b7a813d22f Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sat, 16 May 2015 09:44:45 -0400 Subject: allow test node after ** in calls (closes #24176) --- Modules/parsermodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 876e57d9dd..2a16dbacc6 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -2871,7 +2871,7 @@ validate_argument(node *tree) if (res) { if (TYPE(CHILD(tree, 0)) == DOUBLESTAR) { - res = validate_expr(CHILD(tree, 1)); + res = validate_test(CHILD(tree, 1)); } else if (nch == 1) { res = validate_test_or_star_expr(CHILD(tree, 0)); -- cgit v1.2.1 From 4166ca458d7a3eb6b3083e67bf5164ccafc1a16e Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Sun, 17 May 2015 23:46:22 -0500 Subject: Issue #23488: Fix a syntax error on big endian platforms. Hopefully this will allow the PPC64 PowerLinux buildbot to finish a test run. --- Modules/_randommodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 91fcc87c9d..df149c5e8a 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -266,7 +266,7 @@ random_seed(RandomObject *self, PyObject *args) { size_t i, j; /* Reverse an array. */ - for (i = 0; j = keyused - 1; i < j; i++, j--) { + for (i = 0, j = keyused - 1; i < j; i++, j--) { PY_UINT32_T tmp = key[i]; key[i] = key[j]; key[j] = tmp; -- cgit v1.2.1 From b40af6e18bbac1627277f8768bf5c0940af88a49 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 20 May 2015 18:29:18 +0300 Subject: Issue #22955: attrgetter, itemgetter and methodcaller objects in the operator module now support pickling. Added readable and evaluable repr for these objects. Based on patch by Josh Rosenberg. --- Modules/_operator.c | 277 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 270 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/_operator.c b/Modules/_operator.c index 8f524a6449..9e4db58d76 100644 --- a/Modules/_operator.c +++ b/Modules/_operator.c @@ -485,6 +485,41 @@ itemgetter_call(itemgetterobject *ig, PyObject *args, PyObject *kw) return result; } +static PyObject * +itemgetter_repr(itemgetterobject *ig) +{ + PyObject *repr; + const char *reprfmt; + + int status = Py_ReprEnter((PyObject *)ig); + if (status != 0) { + if (status < 0) + return NULL; + return PyUnicode_FromFormat("%s(...)", Py_TYPE(ig)->tp_name); + } + + reprfmt = ig->nitems == 1 ? "%s(%R)" : "%s%R"; + repr = PyUnicode_FromFormat(reprfmt, Py_TYPE(ig)->tp_name, ig->item); + Py_ReprLeave((PyObject *)ig); + return repr; +} + +static PyObject * +itemgetter_reduce(itemgetterobject *ig) +{ + if (ig->nitems == 1) + return Py_BuildValue("O(O)", Py_TYPE(ig), ig->item); + return PyTuple_Pack(2, Py_TYPE(ig), ig->item); +} + +PyDoc_STRVAR(reduce_doc, "Return state information for pickling"); + +static PyMethodDef itemgetter_methods[] = { + {"__reduce__", (PyCFunction)itemgetter_reduce, METH_NOARGS, + reduce_doc}, + {NULL} +}; + PyDoc_STRVAR(itemgetter_doc, "itemgetter(item, ...) --> itemgetter object\n\ \n\ @@ -503,7 +538,7 @@ static PyTypeObject itemgetter_type = { 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ - 0, /* tp_repr */ + (reprfunc)itemgetter_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ @@ -521,7 +556,7 @@ static PyTypeObject itemgetter_type = { 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ - 0, /* tp_methods */ + itemgetter_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ @@ -737,6 +772,91 @@ attrgetter_call(attrgetterobject *ag, PyObject *args, PyObject *kw) return result; } +static PyObject * +dotjoinattr(PyObject *attr, PyObject **attrsep) +{ + if (PyTuple_CheckExact(attr)) { + if (*attrsep == NULL) { + *attrsep = PyUnicode_FromString("."); + if (*attrsep == NULL) + return NULL; + } + return PyUnicode_Join(*attrsep, attr); + } else { + Py_INCREF(attr); + return attr; + } +} + +static PyObject * +attrgetter_args(attrgetterobject *ag) +{ + Py_ssize_t i; + PyObject *attrsep = NULL; + PyObject *attrstrings = PyTuple_New(ag->nattrs); + if (attrstrings == NULL) + return NULL; + + for (i = 0; i < ag->nattrs; ++i) { + PyObject *attr = PyTuple_GET_ITEM(ag->attr, i); + PyObject *attrstr = dotjoinattr(attr, &attrsep); + if (attrstr == NULL) { + Py_XDECREF(attrsep); + Py_DECREF(attrstrings); + return NULL; + } + PyTuple_SET_ITEM(attrstrings, i, attrstr); + } + Py_XDECREF(attrsep); + return attrstrings; +} + +static PyObject * +attrgetter_repr(attrgetterobject *ag) +{ + PyObject *repr = NULL; + int status = Py_ReprEnter((PyObject *)ag); + if (status != 0) { + if (status < 0) + return NULL; + return PyUnicode_FromFormat("%s(...)", Py_TYPE(ag)->tp_name); + } + + if (ag->nattrs == 1) { + PyObject *attrsep = NULL; + PyObject *attr = dotjoinattr(PyTuple_GET_ITEM(ag->attr, 0), &attrsep); + if (attr != NULL) + repr = PyUnicode_FromFormat("%s(%R)", Py_TYPE(ag)->tp_name, attr); + Py_XDECREF(attrsep); + } + else { + PyObject *attrstrings = attrgetter_args(ag); + if (attrstrings != NULL) { + repr = PyUnicode_FromFormat("%s%R", + Py_TYPE(ag)->tp_name, attrstrings); + Py_DECREF(attrstrings); + } + } + Py_ReprLeave((PyObject *)ag); + return repr; +} + +static PyObject * +attrgetter_reduce(attrgetterobject *ag) +{ + PyObject *attrstrings = attrgetter_args(ag); + if (attrstrings == NULL) + return NULL; + + return Py_BuildValue("ON", Py_TYPE(ag), attrstrings); +} + +static PyMethodDef attrgetter_methods[] = { + {"__reduce__", (PyCFunction)attrgetter_reduce, METH_NOARGS, + reduce_doc}, + {NULL} +}; + PyDoc_STRVAR(attrgetter_doc, "attrgetter(attr, ...) --> attrgetter object\n\ \n\ @@ -757,7 +877,7 @@ static PyTypeObject attrgetter_type = { 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ - 0, /* tp_repr */ + (reprfunc)attrgetter_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ @@ -775,7 +895,7 @@ static PyTypeObject attrgetter_type = { 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ - 0, /* tp_methods */ + attrgetter_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ @@ -813,6 +933,13 @@ methodcaller_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return NULL; } + name = PyTuple_GET_ITEM(args, 0); + if (!PyUnicode_Check(name)) { + PyErr_SetString(PyExc_TypeError, + "method name must be a string"); + return NULL; + } + /* create methodcallerobject structure */ mc = PyObject_GC_New(methodcallerobject, &methodcaller_type); if (mc == NULL) @@ -825,8 +952,8 @@ methodcaller_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } mc->args = newargs; - name = PyTuple_GET_ITEM(args, 0); Py_INCREF(name); + PyUnicode_InternInPlace(&name); mc->name = name; Py_XINCREF(kwds); @@ -869,6 +996,142 @@ methodcaller_call(methodcallerobject *mc, PyObject *args, PyObject *kw) return result; } +static PyObject * +methodcaller_repr(methodcallerobject *mc) +{ + PyObject *argreprs, *repr = NULL, *sep, *joinedargreprs; + Py_ssize_t numtotalargs, numposargs, numkwdargs, i; + int status = Py_ReprEnter((PyObject *)mc); + if (status != 0) { + if (status < 0) + return NULL; + return PyUnicode_FromFormat("%s(...)", Py_TYPE(mc)->tp_name); + } + + if (mc->kwds != NULL) { + numkwdargs = PyDict_Size(mc->kwds); + if (numkwdargs < 0) { + Py_ReprLeave((PyObject *)mc); + return NULL; + } + } else { + numkwdargs = 0; + } + + numposargs = PyTuple_GET_SIZE(mc->args); + numtotalargs = numposargs + numkwdargs; + + if (numtotalargs == 0) { + repr = PyUnicode_FromFormat("%s(%R)", Py_TYPE(mc)->tp_name, mc->name); + Py_ReprLeave((PyObject *)mc); + return repr; + } + + argreprs = PyTuple_New(numtotalargs); + if (argreprs == NULL) { + Py_ReprLeave((PyObject *)mc); + return NULL; + } + + for (i = 0; i < numposargs; ++i) { + PyObject *onerepr = PyObject_Repr(PyTuple_GET_ITEM(mc->args, i)); + if (onerepr == NULL) + goto done; + PyTuple_SET_ITEM(argreprs, i, onerepr); + } + + if (numkwdargs != 0) { + PyObject *key, *value; + Py_ssize_t pos = 0; + while (PyDict_Next(mc->kwds, &pos, &key, &value)) { + PyObject *onerepr = PyUnicode_FromFormat("%U=%R", key, value); + if (onerepr == NULL) + goto done; + if (i >= numtotalargs) { + i = -1; + break; + } + PyTuple_SET_ITEM(argreprs, i, onerepr); + ++i; + } + if (i != numtotalargs) { + PyErr_SetString(PyExc_RuntimeError, + "keywords dict changed size during iteration"); + goto done; + } + } + + sep = PyUnicode_FromString(", "); + if (sep == NULL) + goto done; + + joinedargreprs = PyUnicode_Join(sep, argreprs); + Py_DECREF(sep); + if (joinedargreprs == NULL) + goto done; + + repr = PyUnicode_FromFormat("%s(%R, %U)", Py_TYPE(mc)->tp_name, + mc->name, joinedargreprs); + Py_DECREF(joinedargreprs); + +done: + Py_DECREF(argreprs); + Py_ReprLeave((PyObject *)mc); + return repr; +} + +static PyObject * +methodcaller_reduce(methodcallerobject *mc) +{ + PyObject *newargs; + if (!mc->kwds || PyDict_Size(mc->kwds) == 0) { + Py_ssize_t i; + Py_ssize_t callargcount = PyTuple_GET_SIZE(mc->args); + newargs = PyTuple_New(1 + callargcount); + if (newargs == NULL) + return NULL; + Py_INCREF(mc->name); + PyTuple_SET_ITEM(newargs, 0, mc->name); + for (i = 0; i < callargcount; ++i) { + PyObject *arg = PyTuple_GET_ITEM(mc->args, i); + Py_INCREF(arg); + PyTuple_SET_ITEM(newargs, i + 1, arg); + } + return Py_BuildValue("ON", Py_TYPE(mc), newargs); + } + else { + PyObject *functools; + PyObject *partial; + PyObject *constructor; + _Py_IDENTIFIER(partial); + functools = PyImport_ImportModule("functools"); + if (!functools) + return NULL; + partial = _PyObject_GetAttrId(functools, &PyId_partial); + Py_DECREF(functools); + if (!partial) + return NULL; + newargs = PyTuple_New(2); + if (newargs == NULL) { + Py_DECREF(partial); + return NULL; + } + Py_INCREF(Py_TYPE(mc)); + PyTuple_SET_ITEM(newargs, 0, (PyObject *)Py_TYPE(mc)); + Py_INCREF(mc->name); + PyTuple_SET_ITEM(newargs, 1, mc->name); + constructor = PyObject_Call(partial, newargs, mc->kwds); + Py_DECREF(newargs); + Py_DECREF(partial); + return Py_BuildValue("NO", constructor, mc->args); + } +} + +static PyMethodDef methodcaller_methods[] = { + {"__reduce__", (PyCFunction)methodcaller_reduce, METH_NOARGS, + reduce_doc}, + {NULL} +}; PyDoc_STRVAR(methodcaller_doc, "methodcaller(name, ...) --> methodcaller object\n\ \n\ @@ -888,7 +1151,7 @@ static PyTypeObject methodcaller_type = { 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ - 0, /* tp_repr */ + (reprfunc)methodcaller_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ @@ -906,7 +1169,7 @@ static PyTypeObject methodcaller_type = { 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ - 0, /* tp_methods */ + methodcaller_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ -- cgit v1.2.1 From 50a678b95a356e30300264ca25e37d1d1910b265 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Wed, 20 May 2015 21:50:59 +0200 Subject: Issue #9858: Add missing method stubs to _io.RawIOBase. Patch by Laura Rupprecht. --- Modules/_io/iobase.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'Modules') diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index 79d716a98a..025007e40d 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -952,9 +952,25 @@ _io__RawIOBase_readall_impl(PyObject *self) return result; } +static PyObject * +rawiobase_readinto(PyObject *self, PyObject *args) +{ + PyErr_SetNone(PyExc_NotImplementedError); + return NULL; +} + +static PyObject * +rawiobase_write(PyObject *self, PyObject *args) +{ + PyErr_SetNone(PyExc_NotImplementedError); + return NULL; +} + static PyMethodDef rawiobase_methods[] = { _IO__RAWIOBASE_READ_METHODDEF _IO__RAWIOBASE_READALL_METHODDEF + {"readinto", rawiobase_readinto, METH_VARARGS}, + {"write", rawiobase_write, METH_VARARGS}, {NULL, NULL} }; -- cgit v1.2.1 From 3d2134468b68b214ec36107bbe5ecc28afb36b46 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 21 May 2015 14:19:20 +0300 Subject: Issue #22955: Fixed reference leak in attrgetter.repr(). --- Modules/_operator.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_operator.c b/Modules/_operator.c index 9e4db58d76..735affcdbb 100644 --- a/Modules/_operator.c +++ b/Modules/_operator.c @@ -825,8 +825,10 @@ attrgetter_repr(attrgetterobject *ag) if (ag->nattrs == 1) { PyObject *attrsep = NULL; PyObject *attr = dotjoinattr(PyTuple_GET_ITEM(ag->attr, 0), &attrsep); - if (attr != NULL) + if (attr != NULL) { repr = PyUnicode_FromFormat("%s(%R)", Py_TYPE(ag)->tp_name, attr); + Py_DECREF(attr); + } Py_XDECREF(attrsep); } else { -- cgit v1.2.1 From 2f27cf5854a27f26774e9721383f69ac968b3c84 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 22 May 2015 00:41:57 -0700 Subject: Issue #24221: Small optimizations for heapq. Replaces the PyList_GET_ITEM and PyList_SET_ITEM macros with normal array accesses. Replace the siftup unpredicatable branch with arithmetic. Replace the rc == -1 tests with rc < 0. Gives nicer looking assembly with both Clang and GCC-4.9. Also gives a small performance both for both. --- Modules/_heapqmodule.c | 80 +++++++++++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 37 deletions(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index d709dd44c8..c343862b8c 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -11,7 +11,7 @@ annotated by François Pinard, and converted to C by Raymond Hettinger. static int siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) { - PyObject *newitem, *parent; + PyObject *newitem, *parent, **arr; Py_ssize_t parentpos, size; int cmp; @@ -24,12 +24,13 @@ siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) /* Follow the path to the root, moving parents down until finding a place newitem fits. */ - newitem = PyList_GET_ITEM(heap, pos); + arr = _PyList_ITEMS(heap); + newitem = arr[pos]; while (pos > startpos) { parentpos = (pos - 1) >> 1; - parent = PyList_GET_ITEM(heap, parentpos); + parent = arr[parentpos]; cmp = PyObject_RichCompareBool(newitem, parent, Py_LT); - if (cmp == -1) + if (cmp < 0) return -1; if (size != PyList_GET_SIZE(heap)) { PyErr_SetString(PyExc_RuntimeError, @@ -38,10 +39,11 @@ siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) } if (cmp == 0) break; - parent = PyList_GET_ITEM(heap, parentpos); - newitem = PyList_GET_ITEM(heap, pos); - PyList_SET_ITEM(heap, parentpos, newitem); - PyList_SET_ITEM(heap, pos, parent); + arr = _PyList_ITEMS(heap); + parent = arr[parentpos]; + newitem = arr[pos]; + arr[parentpos] = newitem; + arr[pos] = parent; pos = parentpos; } return 0; @@ -51,7 +53,7 @@ static int siftup(PyListObject *heap, Py_ssize_t pos) { Py_ssize_t startpos, endpos, childpos, limit; - PyObject *tmp1, *tmp2; + PyObject *tmp1, *tmp2, **arr; int cmp; assert(PyList_Check(heap)); @@ -63,19 +65,19 @@ siftup(PyListObject *heap, Py_ssize_t pos) } /* Bubble up the smaller child until hitting a leaf. */ + arr = _PyList_ITEMS(heap); limit = endpos / 2; /* smallest pos that has no child */ while (pos < limit) { /* Set childpos to index of smaller child. */ childpos = 2*pos + 1; /* leftmost child position */ if (childpos + 1 < endpos) { cmp = PyObject_RichCompareBool( - PyList_GET_ITEM(heap, childpos), - PyList_GET_ITEM(heap, childpos + 1), + arr[childpos], + arr[childpos + 1], Py_LT); - if (cmp == -1) + if (cmp < 0) return -1; - if (cmp == 0) - childpos++; /* rightmost child is smallest */ + childpos += ((unsigned)cmp ^ 1); /* increment when cmp==0 */ if (endpos != PyList_GET_SIZE(heap)) { PyErr_SetString(PyExc_RuntimeError, "list changed size during iteration"); @@ -83,10 +85,11 @@ siftup(PyListObject *heap, Py_ssize_t pos) } } /* Move the smaller child up. */ - tmp1 = PyList_GET_ITEM(heap, childpos); - tmp2 = PyList_GET_ITEM(heap, pos); - PyList_SET_ITEM(heap, childpos, tmp2); - PyList_SET_ITEM(heap, pos, tmp1); + arr = _PyList_ITEMS(heap); + tmp1 = arr[childpos]; + tmp2 = arr[pos]; + arr[childpos] = tmp2; + arr[pos] = tmp1; pos = childpos; } /* Bubble it up to its final resting place (by sifting its parents down). */ @@ -227,7 +230,7 @@ heappushpop(PyObject *self, PyObject *args) } cmp = PyObject_RichCompareBool(PyList_GET_ITEM(heap, 0), item, Py_LT); - if (cmp == -1) + if (cmp < 0) return NULL; if (cmp == 0) { Py_INCREF(item); @@ -362,7 +365,7 @@ PyDoc_STRVAR(heapify_doc, static int siftdown_max(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) { - PyObject *newitem, *parent; + PyObject *newitem, *parent, **arr; Py_ssize_t parentpos, size; int cmp; @@ -375,12 +378,13 @@ siftdown_max(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) /* Follow the path to the root, moving parents down until finding a place newitem fits. */ - newitem = PyList_GET_ITEM(heap, pos); + arr = _PyList_ITEMS(heap); + newitem = arr[pos]; while (pos > startpos) { parentpos = (pos - 1) >> 1; - parent = PyList_GET_ITEM(heap, parentpos); + parent = arr[parentpos]; cmp = PyObject_RichCompareBool(parent, newitem, Py_LT); - if (cmp == -1) + if (cmp < 0) return -1; if (size != PyList_GET_SIZE(heap)) { PyErr_SetString(PyExc_RuntimeError, @@ -389,10 +393,11 @@ siftdown_max(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) } if (cmp == 0) break; - parent = PyList_GET_ITEM(heap, parentpos); - newitem = PyList_GET_ITEM(heap, pos); - PyList_SET_ITEM(heap, parentpos, newitem); - PyList_SET_ITEM(heap, pos, parent); + arr = _PyList_ITEMS(heap); + parent = arr[parentpos]; + newitem = arr[pos]; + arr[parentpos] = newitem; + arr[pos] = parent; pos = parentpos; } return 0; @@ -402,7 +407,7 @@ static int siftup_max(PyListObject *heap, Py_ssize_t pos) { Py_ssize_t startpos, endpos, childpos, limit; - PyObject *tmp1, *tmp2; + PyObject *tmp1, *tmp2, **arr; int cmp; assert(PyList_Check(heap)); @@ -414,19 +419,19 @@ siftup_max(PyListObject *heap, Py_ssize_t pos) } /* Bubble up the smaller child until hitting a leaf. */ + arr = _PyList_ITEMS(heap); limit = endpos / 2; /* smallest pos that has no child */ while (pos < limit) { /* Set childpos to index of smaller child. */ childpos = 2*pos + 1; /* leftmost child position */ if (childpos + 1 < endpos) { cmp = PyObject_RichCompareBool( - PyList_GET_ITEM(heap, childpos + 1), - PyList_GET_ITEM(heap, childpos), + arr[childpos + 1], + arr[childpos], Py_LT); - if (cmp == -1) + if (cmp < 0) return -1; - if (cmp == 0) - childpos++; /* rightmost child is smallest */ + childpos += ((unsigned)cmp ^ 1); /* increment when cmp==0 */ if (endpos != PyList_GET_SIZE(heap)) { PyErr_SetString(PyExc_RuntimeError, "list changed size during iteration"); @@ -434,10 +439,11 @@ siftup_max(PyListObject *heap, Py_ssize_t pos) } } /* Move the smaller child up. */ - tmp1 = PyList_GET_ITEM(heap, childpos); - tmp2 = PyList_GET_ITEM(heap, pos); - PyList_SET_ITEM(heap, childpos, tmp2); - PyList_SET_ITEM(heap, pos, tmp1); + arr = _PyList_ITEMS(heap); + tmp1 = arr[childpos]; + tmp2 = arr[pos]; + arr[childpos] = tmp2; + arr[pos] = tmp1; pos = childpos; } /* Bubble it up to its final resting place (by sifting its parents down). */ -- cgit v1.2.1 From 68d985068c1e6d1ec7429108772ca9e99d9be859 Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Fri, 22 May 2015 11:36:53 -0500 Subject: Issue #20035: Reimplement tkinter._fix module as a C function. The new private C function makes no permanent changes to the environment and is #ifdef'd out on non-Windows platforms. --- Modules/_tkinter.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 118 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 4da836e440..41ad5f91f7 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -101,7 +101,65 @@ Copyright (C) 1994 Steen Lumholt. #ifdef MS_WINDOWS #include #define WAIT_FOR_STDIN + +static PyObject * +_get_tcl_lib_path() +{ + static PyObject *tcl_library_path = NULL; + static int already_checked = 0; + + if (already_checked == 0) { + PyObject *prefix; + struct stat stat_buf; + int stat_return_value; + + prefix = PyUnicode_FromWideChar(Py_GetPrefix(), -1); + if (prefix == NULL) { + return NULL; + } + + /* Check expected location for an installed Python first */ + tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); + if (tcl_library_path == NULL) { + return NULL; + } + tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); + if (tcl_library_path == NULL) { + return NULL; + } + stat_return_value = _Py_stat(tcl_library_path, &stat_buf); + if (stat_return_value == -2) { + return NULL; + } + if (stat_return_value == -1) { + /* install location doesn't exist, reset errno and see if + we're a repository build */ + errno = 0; +#ifdef Py_TCLTK_DIR + tcl_library_path = PyUnicode_FromString( + Py_TCLTK_DIR "\\lib\\tcl" TCL_VERSION); + if (tcl_library_path == NULL) { + return NULL; + } + stat_return_value = _Py_stat(tcl_library_path, &stat_buf); + if (stat_return_value == -2) { + return NULL; + } + if (stat_return_value == -1) { + /* tcltkDir for a repository build doesn't exist either, + reset errno and leave Tcl to its own devices */ + errno = 0; + tcl_library_path = NULL; + } +#else + tcl_library_path = NULL; #endif + } + already_checked = 1; + } + return tcl_library_path; +} +#endif /* MS_WINDOWS */ #ifdef WITH_THREAD @@ -681,6 +739,33 @@ Tkapp_New(const char *screenName, const char *className, PyMem_Free(args); } +#ifdef MS_WINDOWS + { + PyObject *str_path; + PyObject *utf8_path; + DWORD ret; + + ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); + if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; + } + if (str_path != NULL) { + utf8_path = PyUnicode_AsUTF8String(str_path); + if (utf8_path == NULL) { + return NULL; + } + Tcl_SetVar(v->interp, + "tcl_library", + PyBytes_AsString(utf8_path), + TCL_GLOBAL_ONLY); + Py_DECREF(utf8_path); + } + } + } +#endif + if (Tcl_AppInit(v->interp) != TCL_OK) { PyObject *result = Tkinter_Error((PyObject *)v); #ifdef TKINTER_PROTECT_LOADTK @@ -3517,8 +3602,40 @@ PyInit__tkinter(void) uexe = PyUnicode_FromWideChar(Py_GetProgramName(), -1); if (uexe) { cexe = PyUnicode_EncodeFSDefault(uexe); - if (cexe) + if (cexe) { +#ifdef MS_WINDOWS + int set_var = 0; + PyObject *str_path; + wchar_t *wcs_path; + DWORD ret; + + ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); + + if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; + } + if (str_path != NULL) { + wcs_path = PyUnicode_AsWideCharString(str_path, NULL); + if (wcs_path == NULL) { + return NULL; + } + SetEnvironmentVariableW(L"TCL_LIBRARY", wcs_path); + set_var = 1; + } + } + Tcl_FindExecutable(PyBytes_AsString(cexe)); + + if (set_var) { + SetEnvironmentVariableW(L"TCL_LIBRARY", NULL); + PyMem_Free(wcs_path); + } +#else + Tcl_FindExecutable(PyBytes_AsString(cexe)); +#endif /* MS_WINDOWS */ + } Py_XDECREF(cexe); Py_DECREF(uexe); } -- cgit v1.2.1 From 08d2396c08ef82d087d98a8e7d9ef171884207c3 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 22 May 2015 15:08:34 -0700 Subject: Issue 24244: Prevents termination when an invalid format string is encountered on Windows. --- Modules/timemodule.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 5f6290d98f..197d2c0b8d 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -616,13 +616,6 @@ time_strftime(PyObject *self, PyObject *args) { if (outbuf[1]=='#') ++outbuf; /* not documented by python, */ - if (outbuf[1]=='\0' || - !strchr("aAbBcdHIjmMpSUwWxXyYzZ%", outbuf[1])) - { - PyErr_SetString(PyExc_ValueError, "Invalid format string"); - Py_DECREF(format); - return NULL; - } if ((outbuf[1] == 'y') && buf.tm_year < 0) { PyErr_SetString(PyExc_ValueError, @@ -660,7 +653,9 @@ time_strftime(PyObject *self, PyObject *args) PyErr_NoMemory(); break; } + _Py_BEGIN_SUPPRESS_IPH buflen = format_time(outbuf, i, fmt, &buf); + _Py_END_SUPPRESS_IPH #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) err = errno; #endif -- cgit v1.2.1 From 599ed75a674f7ad2c983783ed6f3a75bd5ccae18 Mon Sep 17 00:00:00 2001 From: Nick Coghlan Date: Sat, 23 May 2015 22:24:10 +1000 Subject: PEP 489: Multi-phase extension module initialization Known limitations of the current implementation: - documentation changes are incomplete - there's a reference leak I haven't tracked down yet The leak is most visible by running: ./python -m test -R3:3 test_importlib However, you can also see it by running: ./python -X showrefcount Importing the array or _testmultiphase modules, and then deleting them from both sys.modules and the local namespace shows significant increases in the total number of active references each cycle. By contrast, with _testcapi (which continues to use single-phase initialisation) the global refcounts stabilise after a couple of cycles. --- Modules/_testcapimodule.c | 3 + Modules/_testmultiphase.c | 567 ++++++++++++++++++++++++++++++++++++++++++++++ Modules/arraymodule.c | 50 ++-- Modules/config.c.in | 2 +- Modules/xxlimited.c | 55 +++-- Modules/xxmodule.c | 54 +++-- Modules/xxsubtype.c | 61 ++--- 7 files changed, 692 insertions(+), 100 deletions(-) create mode 100644 Modules/_testmultiphase.c (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 77167b2c1e..1967686624 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -4048,6 +4048,9 @@ static struct PyModuleDef _testcapimodule = { NULL }; +/* Per PEP 489, this module will not be converted to multi-phase initialization + */ + PyMODINIT_FUNC PyInit__testcapi(void) { diff --git a/Modules/_testmultiphase.c b/Modules/_testmultiphase.c new file mode 100644 index 0000000000..3e8e5d5c6c --- /dev/null +++ b/Modules/_testmultiphase.c @@ -0,0 +1,567 @@ + +/* Testing module for multi-phase initialization of extension modules (PEP 489) + */ + +#include "Python.h" + +/* Example objects */ +typedef struct { + PyObject_HEAD + PyObject *x_attr; /* Attributes dictionary */ +} ExampleObject; + +/* Example methods */ + +static void +Example_dealloc(ExampleObject *self) +{ + Py_XDECREF(self->x_attr); + PyObject_Del(self); +} + +static PyObject * +Example_demo(ExampleObject *self, PyObject *args) +{ + PyObject *o = NULL; + if (!PyArg_ParseTuple(args, "|O:demo", &o)) + return NULL; + if (o != NULL && PyUnicode_Check(o)) { + Py_INCREF(o); + return o; + } + Py_INCREF(Py_None); + return Py_None; +} + + +static PyMethodDef Example_methods[] = { + {"demo", (PyCFunction)Example_demo, METH_VARARGS, + PyDoc_STR("demo() -> None")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +Example_getattro(ExampleObject *self, PyObject *name) +{ + if (self->x_attr != NULL) { + PyObject *v = PyDict_GetItem(self->x_attr, name); + if (v != NULL) { + Py_INCREF(v); + return v; + } + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int +Example_setattr(ExampleObject *self, char *name, PyObject *v) +{ + if (self->x_attr == NULL) { + self->x_attr = PyDict_New(); + if (self->x_attr == NULL) + return -1; + } + if (v == NULL) { + int rv = PyDict_DelItemString(self->x_attr, name); + if (rv < 0) + PyErr_SetString(PyExc_AttributeError, + "delete non-existing Example attribute"); + return rv; + } + else + return PyDict_SetItemString(self->x_attr, name, v); +} + +static PyType_Slot Example_Type_slots[] = { + {Py_tp_doc, "The Example type"}, + {Py_tp_dealloc, Example_dealloc}, + {Py_tp_getattro, Example_getattro}, + {Py_tp_setattr, Example_setattr}, + {Py_tp_methods, Example_methods}, + {0, 0}, +}; + +static PyType_Spec Example_Type_spec = { + "_testimportexec.Example", + sizeof(ExampleObject), + 0, + Py_TPFLAGS_DEFAULT, + Example_Type_slots +}; + +/* Function of two integers returning integer */ + +PyDoc_STRVAR(testexport_foo_doc, +"foo(i,j)\n\ +\n\ +Return the sum of i and j."); + +static PyObject * +testexport_foo(PyObject *self, PyObject *args) +{ + long i, j; + long res; + if (!PyArg_ParseTuple(args, "ll:foo", &i, &j)) + return NULL; + res = i + j; + return PyLong_FromLong(res); +} + +/* Test that PyState registration fails */ + +PyDoc_STRVAR(call_state_registration_func_doc, +"register_state(0): call PyState_FindModule()\n\ +register_state(1): call PyState_AddModule()\n\ +register_state(2): call PyState_RemoveModule()"); + +static PyObject * +call_state_registration_func(PyObject *mod, PyObject *args) +{ + int i, ret; + PyModuleDef *def = PyModule_GetDef(mod); + if (def == NULL) { + return NULL; + } + if (!PyArg_ParseTuple(args, "i:call_state_registration_func", &i)) + return NULL; + switch (i) { + case 0: + mod = PyState_FindModule(def); + if (mod == NULL) { + Py_RETURN_NONE; + } + return mod; + case 1: + ret = PyState_AddModule(mod, def); + if (ret != 0) { + return NULL; + } + break; + case 2: + ret = PyState_RemoveModule(def); + if (ret != 0) { + return NULL; + } + break; + } + Py_RETURN_NONE; +} + + +static PyType_Slot Str_Type_slots[] = { + {Py_tp_base, NULL}, /* filled out in module exec function */ + {0, 0}, +}; + +static PyType_Spec Str_Type_spec = { + "_testimportexec.Str", + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + Str_Type_slots +}; + +static PyMethodDef testexport_methods[] = { + {"foo", testexport_foo, METH_VARARGS, + testexport_foo_doc}, + {"call_state_registration_func", call_state_registration_func, + METH_VARARGS, call_state_registration_func_doc}, + {NULL, NULL} /* sentinel */ +}; + +static int execfunc(PyObject *m) +{ + PyObject *temp = NULL; + + /* Due to cross platform compiler issues the slots must be filled + * here. It's required for portability to Windows without requiring + * C++. */ + Str_Type_slots[0].pfunc = &PyUnicode_Type; + + /* Add a custom type */ + temp = PyType_FromSpec(&Example_Type_spec); + if (temp == NULL) + goto fail; + if (PyModule_AddObject(m, "Example", temp) != 0) + goto fail; + + /* Add an exception type */ + temp = PyErr_NewException("_testimportexec.error", NULL, NULL); + if (temp == NULL) + goto fail; + if (PyModule_AddObject(m, "error", temp) != 0) + goto fail; + + /* Add Str */ + temp = PyType_FromSpec(&Str_Type_spec); + if (temp == NULL) + goto fail; + if (PyModule_AddObject(m, "Str", temp) != 0) + goto fail; + + if (PyModule_AddIntConstant(m, "int_const", 1969) != 0) + goto fail; + + if (PyModule_AddStringConstant(m, "str_const", "something different") != 0) + goto fail; + + return 0; + fail: + return -1; +} + +/* Helper for module definitions; there'll be a lot of them */ +#define TEST_MODULE_DEF(name, slots, methods) { \ + PyModuleDef_HEAD_INIT, /* m_base */ \ + name, /* m_name */ \ + PyDoc_STR("Test module " name), /* m_doc */ \ + 0, /* m_size */ \ + methods, /* m_methods */ \ + slots, /* m_slots */ \ + NULL, /* m_traverse */ \ + NULL, /* m_clear */ \ + NULL, /* m_free */ \ +} + +PyModuleDef_Slot main_slots[] = { + {Py_mod_exec, execfunc}, + {0, NULL}, +}; + +static PyModuleDef main_def = TEST_MODULE_DEF("main", main_slots, testexport_methods); + +PyMODINIT_FUNC +PyInit__testmultiphase(PyObject *spec) +{ + return PyModuleDef_Init(&main_def); +} + + +/**** Importing a non-module object ****/ + +static PyModuleDef def_nonmodule; + +/* Create a SimpleNamespace(three=3) */ +static PyObject* +createfunc_nonmodule(PyObject *spec, PyModuleDef *def) +{ + PyObject *dct, *ns, *three; + + if (def != &def_nonmodule) { + PyErr_SetString(PyExc_SystemError, "def does not match"); + return NULL; + } + + dct = PyDict_New(); + if (dct == NULL) + return NULL; + + three = PyLong_FromLong(3); + if (three == NULL) { + Py_DECREF(dct); + return NULL; + } + PyDict_SetItemString(dct, "three", three); + + ns = _PyNamespace_New(dct); + Py_DECREF(dct); + return ns; +} + +static PyModuleDef_Slot slots_create_nonmodule[] = { + {Py_mod_create, createfunc_nonmodule}, + {0, NULL}, +}; + +static PyModuleDef def_nonmodule = TEST_MODULE_DEF( + "_testmultiphase_nonmodule", slots_create_nonmodule, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_nonmodule(PyObject *spec) +{ + return PyModuleDef_Init(&def_nonmodule); +} + +/**** Non-ASCII-named modules ****/ + +static PyModuleDef def_nonascii_latin = { \ + PyModuleDef_HEAD_INIT, /* m_base */ + "_testmultiphase_nonascii_latin", /* m_name */ + PyDoc_STR("Module named in Czech"), /* m_doc */ + 0, /* m_size */ + NULL, /* m_methods */ + NULL, /* m_slots */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; + +PyMODINIT_FUNC +PyInitU__testmultiphase_zkouka_naten_evc07gi8e(PyObject *spec) +{ + return PyModuleDef_Init(&def_nonascii_latin); +} + +static PyModuleDef def_nonascii_kana = { \ + PyModuleDef_HEAD_INIT, /* m_base */ + "_testmultiphase_nonascii_kana", /* m_name */ + PyDoc_STR("Module named in Japanese"), /* m_doc */ + 0, /* m_size */ + NULL, /* m_methods */ + NULL, /* m_slots */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; + +PyMODINIT_FUNC +PyInitU_eckzbwbhc6jpgzcx415x(PyObject *spec) +{ + return PyModuleDef_Init(&def_nonascii_kana); +} + +/**** Testing NULL slots ****/ + +static PyModuleDef null_slots_def = TEST_MODULE_DEF( + "_testmultiphase_null_slots", NULL, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_null_slots(PyObject *spec) +{ + return PyModuleDef_Init(&null_slots_def); +} + +/**** Problematic modules ****/ + +static PyModuleDef_Slot slots_bad_large[] = { + {_Py_mod_LAST_SLOT + 1, NULL}, + {0, NULL}, +}; + +static PyModuleDef def_bad_large = TEST_MODULE_DEF( + "_testmultiphase_bad_slot_large", slots_bad_large, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_bad_slot_large(PyObject *spec) +{ + return PyModuleDef_Init(&def_bad_large); +} + +static PyModuleDef_Slot slots_bad_negative[] = { + {-1, NULL}, + {0, NULL}, +}; + +static PyModuleDef def_bad_negative = TEST_MODULE_DEF( + "_testmultiphase_bad_slot_negative", slots_bad_negative, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_bad_slot_negative(PyObject *spec) +{ + return PyModuleDef_Init(&def_bad_negative); +} + +static PyModuleDef def_create_int_with_state = { \ + PyModuleDef_HEAD_INIT, /* m_base */ + "create_with_state", /* m_name */ + PyDoc_STR("Not a PyModuleObject object, but requests per-module state"), + 10, /* m_size */ + NULL, /* m_methods */ + slots_create_nonmodule, /* m_slots */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; + +PyMODINIT_FUNC +PyInit__testmultiphase_create_int_with_state(PyObject *spec) +{ + return PyModuleDef_Init(&def_create_int_with_state); +} + + +static PyModuleDef def_negative_size = { \ + PyModuleDef_HEAD_INIT, /* m_base */ + "negative_size", /* m_name */ + PyDoc_STR("PyModuleDef with negative m_size"), + -1, /* m_size */ + NULL, /* m_methods */ + slots_create_nonmodule, /* m_slots */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; + +PyMODINIT_FUNC +PyInit__testmultiphase_negative_size(PyObject *spec) +{ + return PyModuleDef_Init(&def_negative_size); +} + + +static PyModuleDef uninitialized_def = TEST_MODULE_DEF("main", main_slots, testexport_methods); + +PyMODINIT_FUNC +PyInit__testmultiphase_export_uninitialized(PyObject *spec) +{ + return (PyObject*) &uninitialized_def; +} + +PyMODINIT_FUNC +PyInit__testmultiphase_export_null(PyObject *spec) +{ + return NULL; +} + +PyMODINIT_FUNC +PyInit__testmultiphase_export_raise(PyObject *spec) +{ + PyErr_SetString(PyExc_SystemError, "bad export function"); + return NULL; +} + +PyMODINIT_FUNC +PyInit__testmultiphase_export_unreported_exception(PyObject *spec) +{ + PyErr_SetString(PyExc_SystemError, "bad export function"); + return PyModuleDef_Init(&main_def); +} + +static PyObject* +createfunc_null(PyObject *spec, PyModuleDef *def) +{ + return NULL; +} + +PyModuleDef_Slot slots_create_null[] = { + {Py_mod_create, createfunc_null}, + {0, NULL}, +}; + +static PyModuleDef def_create_null = TEST_MODULE_DEF( + "_testmultiphase_create_null", slots_create_null, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_create_null(PyObject *spec) +{ + return PyModuleDef_Init(&def_create_null); +} + +static PyObject* +createfunc_raise(PyObject *spec, PyModuleDef *def) +{ + PyErr_SetString(PyExc_SystemError, "bad create function"); + return NULL; +} + +static PyModuleDef_Slot slots_create_raise[] = { + {Py_mod_create, createfunc_raise}, + {0, NULL}, +}; + +static PyModuleDef def_create_raise = TEST_MODULE_DEF( + "_testmultiphase_create_null", slots_create_raise, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_create_raise(PyObject *spec) +{ + return PyModuleDef_Init(&def_create_raise); +} + +static PyObject* +createfunc_unreported_exception(PyObject *spec, PyModuleDef *def) +{ + PyErr_SetString(PyExc_SystemError, "bad create function"); + return PyModule_New("foo"); +} + +static PyModuleDef_Slot slots_create_unreported_exception[] = { + {Py_mod_create, createfunc_unreported_exception}, + {0, NULL}, +}; + +static PyModuleDef def_create_unreported_exception = TEST_MODULE_DEF( + "_testmultiphase_create_unreported_exception", slots_create_unreported_exception, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_create_unreported_exception(PyObject *spec) +{ + return PyModuleDef_Init(&def_create_unreported_exception); +} + +static PyModuleDef_Slot slots_nonmodule_with_exec_slots[] = { + {Py_mod_create, createfunc_nonmodule}, + {Py_mod_exec, execfunc}, + {0, NULL}, +}; + +static PyModuleDef def_nonmodule_with_exec_slots = TEST_MODULE_DEF( + "_testmultiphase_nonmodule_with_exec_slots", slots_nonmodule_with_exec_slots, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_nonmodule_with_exec_slots(PyObject *spec) +{ + return PyModuleDef_Init(&def_nonmodule_with_exec_slots); +} + +static int +execfunc_err(PyObject *mod) +{ + return -1; +} + +static PyModuleDef_Slot slots_exec_err[] = { + {Py_mod_exec, execfunc_err}, + {0, NULL}, +}; + +static PyModuleDef def_exec_err = TEST_MODULE_DEF( + "_testmultiphase_exec_err", slots_exec_err, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_exec_err(PyObject *spec) +{ + return PyModuleDef_Init(&def_exec_err); +} + +static int +execfunc_raise(PyObject *spec) +{ + PyErr_SetString(PyExc_SystemError, "bad exec function"); + return -1; +} + +static PyModuleDef_Slot slots_exec_raise[] = { + {Py_mod_exec, execfunc_raise}, + {0, NULL}, +}; + +static PyModuleDef def_exec_raise = TEST_MODULE_DEF( + "_testmultiphase_exec_raise", slots_exec_raise, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_exec_raise(PyObject *mod) +{ + return PyModuleDef_Init(&def_exec_raise); +} + +static int +execfunc_unreported_exception(PyObject *mod) +{ + PyErr_SetString(PyExc_SystemError, "bad exec function"); + return 0; +} + +static PyModuleDef_Slot slots_exec_unreported_exception[] = { + {Py_mod_exec, execfunc_unreported_exception}, + {0, NULL}, +}; + +static PyModuleDef def_exec_unreported_exception = TEST_MODULE_DEF( + "_testmultiphase_exec_unreported_exception", slots_exec_unreported_exception, NULL); + +PyMODINIT_FUNC +PyInit__testmultiphase_exec_unreported_exception(PyObject *spec) +{ + return PyModuleDef_Init(&def_exec_unreported_exception); +} diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 8d0462d5d0..a3ccf9344f 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2981,34 +2981,17 @@ static PyMethodDef a_methods[] = { {NULL, NULL, 0, NULL} /* Sentinel */ }; -static struct PyModuleDef arraymodule = { - PyModuleDef_HEAD_INIT, - "array", - module_doc, - -1, - a_methods, - NULL, - NULL, - NULL, - NULL -}; - - -PyMODINIT_FUNC -PyInit_array(void) +static int +array_modexec(PyObject *m) { - PyObject *m; char buffer[Py_ARRAY_LENGTH(descriptors)], *p; PyObject *typecodes; Py_ssize_t size = 0; struct arraydescr *descr; if (PyType_Ready(&Arraytype) < 0) - return NULL; + return -1; Py_TYPE(&PyArrayIter_Type) = &PyType_Type; - m = PyModule_Create(&arraymodule); - if (m == NULL) - return NULL; Py_INCREF((PyObject *)&Arraytype); PyModule_AddObject(m, "ArrayType", (PyObject *)&Arraytype); @@ -3031,5 +3014,30 @@ PyInit_array(void) Py_DECREF(m); m = NULL; } - return m; + return 0; +} + +static PyModuleDef_Slot arrayslots[] = { + {Py_mod_exec, array_modexec}, + {0, NULL} +}; + + +static struct PyModuleDef arraymodule = { + PyModuleDef_HEAD_INIT, + "array", + module_doc, + 0, + a_methods, + arrayslots, + NULL, + NULL, + NULL +}; + + +PyMODINIT_FUNC +PyInit_array(void) +{ + return PyModuleDef_Init(&arraymodule); } diff --git a/Modules/config.c.in b/Modules/config.c.in index 7a24e2dc89..7b77199c2e 100644 --- a/Modules/config.c.in +++ b/Modules/config.c.in @@ -13,7 +13,7 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. /* !!! !!! !!! This file is edited by the makesetup script !!! !!! !!! */ /* This file contains the table of built-in modules. - See init_builtin() in import.c. */ + See create_builtin() in import.c. */ #include "Python.h" diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c index 7bfcb911e4..604456bffe 100644 --- a/Modules/xxlimited.c +++ b/Modules/xxlimited.c @@ -222,25 +222,9 @@ static PyMethodDef xx_methods[] = { PyDoc_STRVAR(module_doc, "This is a template module just for instruction."); -/* Initialization function for the module (*must* be called PyInit_xx) */ - - -static struct PyModuleDef xxmodule = { - PyModuleDef_HEAD_INIT, - "xxlimited", - module_doc, - -1, - xx_methods, - NULL, - NULL, - NULL, - NULL -}; - -PyMODINIT_FUNC -PyInit_xxlimited(void) +static int +xx_modexec(PyObject *m) { - PyObject *m = NULL; PyObject *o; /* Due to cross platform compiler issues the slots must be filled @@ -254,11 +238,6 @@ PyInit_xxlimited(void) if (Xxo_Type == NULL) goto fail; - /* Create the module and add the functions */ - m = PyModule_Create(&xxmodule); - if (m == NULL) - goto fail; - /* Add some symbolic constants to the module */ if (ErrorObject == NULL) { ErrorObject = PyErr_NewException("xxlimited.error", NULL, NULL); @@ -279,8 +258,34 @@ PyInit_xxlimited(void) if (o == NULL) goto fail; PyModule_AddObject(m, "Null", o); - return m; + return 0; fail: Py_XDECREF(m); - return NULL; + return -1; +} + + +static PyModuleDef_Slot xx_slots[] = { + {Py_mod_exec, xx_modexec}, + {0, NULL} +}; + +static struct PyModuleDef xxmodule = { + PyModuleDef_HEAD_INIT, + "xxlimited", + module_doc, + 0, + xx_methods, + xx_slots, + NULL, + NULL, + NULL +}; + +/* Export function for the module (*must* be called PyInit_xx) */ + +PyMODINIT_FUNC +PyInit_xxlimited(void) +{ + return PyModuleDef_Init(&xxmodule); } diff --git a/Modules/xxmodule.c b/Modules/xxmodule.c index 0feff662d5..85230d9c97 100644 --- a/Modules/xxmodule.c +++ b/Modules/xxmodule.c @@ -334,26 +334,10 @@ static PyMethodDef xx_methods[] = { PyDoc_STRVAR(module_doc, "This is a template module just for instruction."); -/* Initialization function for the module (*must* be called PyInit_xx) */ - -static struct PyModuleDef xxmodule = { - PyModuleDef_HEAD_INIT, - "xx", - module_doc, - -1, - xx_methods, - NULL, - NULL, - NULL, - NULL -}; - -PyMODINIT_FUNC -PyInit_xx(void) +static int +xx_exec(PyObject *m) { - PyObject *m = NULL; - /* Due to cross platform compiler issues the slots must be filled * here. It's required for portability to Windows without requiring * C++. */ @@ -366,11 +350,6 @@ PyInit_xx(void) if (PyType_Ready(&Xxo_Type) < 0) goto fail; - /* Create the module and add the functions */ - m = PyModule_Create(&xxmodule); - if (m == NULL) - goto fail; - /* Add some symbolic constants to the module */ if (ErrorObject == NULL) { ErrorObject = PyErr_NewException("xx.error", NULL, NULL); @@ -389,8 +368,33 @@ PyInit_xx(void) if (PyType_Ready(&Null_Type) < 0) goto fail; PyModule_AddObject(m, "Null", (PyObject *)&Null_Type); - return m; + return 0; fail: Py_XDECREF(m); - return NULL; + return -1; +} + +static struct PyModuleDef_Slot xx_slots[] = { + {Py_mod_exec, xx_exec}, + {0, NULL}, +}; + +static struct PyModuleDef xxmodule = { + PyModuleDef_HEAD_INIT, + "xx", + module_doc, + 0, + xx_methods, + xx_slots, + NULL, + NULL, + NULL +}; + +/* Export function for the module (*must* be called PyInit_xx) */ + +PyMODINIT_FUNC +PyInit_xx(void) +{ + return PyModuleDef_Init(&xxmodule); } diff --git a/Modules/xxsubtype.c b/Modules/xxsubtype.c index 6944e37703..8d0d6ae814 100644 --- a/Modules/xxsubtype.c +++ b/Modules/xxsubtype.c @@ -257,53 +257,58 @@ static PyMethodDef xxsubtype_functions[] = { {NULL, NULL} /* sentinel */ }; -static struct PyModuleDef xxsubtypemodule = { - PyModuleDef_HEAD_INIT, - "xxsubtype", - xxsubtype__doc__, - -1, - xxsubtype_functions, - NULL, - NULL, - NULL, - NULL -}; - - -PyMODINIT_FUNC -PyInit_xxsubtype(void) +static int +xxsubtype_exec(PyObject* m) { - PyObject *m; - /* Fill in deferred data addresses. This must be done before PyType_Ready() is called. Note that PyType_Ready() automatically initializes the ob.ob_type field to &PyType_Type if it's NULL, so it's not necessary to fill in ob_type first. */ spamdict_type.tp_base = &PyDict_Type; if (PyType_Ready(&spamdict_type) < 0) - return NULL; + return -1; spamlist_type.tp_base = &PyList_Type; if (PyType_Ready(&spamlist_type) < 0) - return NULL; - - m = PyModule_Create(&xxsubtypemodule); - if (m == NULL) - return NULL; + return -1; if (PyType_Ready(&spamlist_type) < 0) - return NULL; + return -1; if (PyType_Ready(&spamdict_type) < 0) - return NULL; + return -1; Py_INCREF(&spamlist_type); if (PyModule_AddObject(m, "spamlist", (PyObject *) &spamlist_type) < 0) - return NULL; + return -1; Py_INCREF(&spamdict_type); if (PyModule_AddObject(m, "spamdict", (PyObject *) &spamdict_type) < 0) - return NULL; - return m; + return -1; + return 0; +} + +static struct PyModuleDef_Slot xxsubtype_slots[] = { + {Py_mod_exec, xxsubtype_exec}, + {0, NULL}, +}; + +static struct PyModuleDef xxsubtypemodule = { + PyModuleDef_HEAD_INIT, + "xxsubtype", + xxsubtype__doc__, + 0, + xxsubtype_functions, + xxsubtype_slots, + NULL, + NULL, + NULL +}; + + +PyMODINIT_FUNC +PyInit_xxsubtype(void) +{ + return PyModuleDef_Init(&xxsubtypemodule); } -- cgit v1.2.1 From f6e3e7c93dbc3a08d386c440525fbfc7c004166f Mon Sep 17 00:00:00 2001 From: Nick Coghlan Date: Sun, 24 May 2015 01:03:46 +1000 Subject: Issue #24268: Address some PEP 489 refleaks - missing DECREF in PyModule_FromDefAndSpec2 - missing DECREF in PyType_FromSpecAndBases2 - missing DECREF in _testmultiphase module Patch by Petr Viktorin --- Modules/_testmultiphase.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/_testmultiphase.c b/Modules/_testmultiphase.c index 3e8e5d5c6c..0d50db2f02 100644 --- a/Modules/_testmultiphase.c +++ b/Modules/_testmultiphase.c @@ -262,6 +262,7 @@ createfunc_nonmodule(PyObject *spec, PyModuleDef *def) return NULL; } PyDict_SetItemString(dct, "three", three); + Py_DECREF(three); ns = _PyNamespace_New(dct); Py_DECREF(dct); -- cgit v1.2.1 From ffb38076ab94f9f3451a0eb0dbe6e2330e3d19d7 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 23 May 2015 08:59:25 -0700 Subject: Fixes cast warning in bufferedio.c --- Modules/_io/bufferedio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 23ba3df866..29e000bde4 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -297,7 +297,7 @@ _enter_buffered_busy(buffered *self) * Note that non-daemon threads have already exited here, so this * shouldn't affect carefully written threaded I/O code. */ - st = PyThread_acquire_lock_timed(self->lock, 1e6, 0); + st = PyThread_acquire_lock_timed(self->lock, (PY_TIMEOUT_T)1e6, 0); } Py_END_ALLOW_THREADS if (relax_locking && st != PY_LOCK_ACQUIRED) { -- cgit v1.2.1 From 77b5a72094088a40e40dce25c9362d6c2bfbafcf Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 23 May 2015 22:42:49 +0300 Subject: Issue #14373: Added C implementation of functools.lru_cache(). Based on patches by Matt Joiner and Alexey Kachayev. --- Modules/_functoolsmodule.c | 547 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 546 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 3c82e5134a..99b50b0e9d 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -590,6 +590,539 @@ For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\ of the sequence in the calculation, and serves as a default when the\n\ sequence is empty."); +/* lru_cache object **********************************************************/ + +/* this object is used delimit args and keywords in the cache keys */ +static PyObject *kwd_mark = NULL; + +struct lru_list_elem; +struct lru_cache_object; + +typedef struct lru_list_elem { + PyObject_HEAD + struct lru_list_elem *prev, *next; /* borrowed links */ + PyObject *key, *result; +} lru_list_elem; + +static void +lru_list_elem_dealloc(lru_list_elem *link) +{ + _PyObject_GC_UNTRACK(link); + Py_XDECREF(link->key); + Py_XDECREF(link->result); + PyObject_GC_Del(link); +} + +static int +lru_list_elem_traverse(lru_list_elem *link, visitproc visit, void *arg) +{ + Py_VISIT(link->key); + Py_VISIT(link->result); + return 0; +} + +static int +lru_list_elem_clear(lru_list_elem *link) +{ + Py_CLEAR(link->key); + Py_CLEAR(link->result); + return 0; +} + +static PyTypeObject lru_list_elem_type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "functools._lru_list_elem", /* tp_name */ + sizeof(lru_list_elem), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor)lru_list_elem_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ + 0, /* tp_doc */ + (traverseproc)lru_list_elem_traverse, /* tp_traverse */ + (inquiry)lru_list_elem_clear, /* tp_clear */ +}; + + +typedef PyObject *(*lru_cache_ternaryfunc)(struct lru_cache_object *, PyObject *, PyObject *); + +typedef struct lru_cache_object { + lru_list_elem root; /* includes PyObject_HEAD */ + Py_ssize_t maxsize; + PyObject *maxsize_O; + PyObject *func; + lru_cache_ternaryfunc wrapper; + PyObject *cache; + PyObject *cache_info_type; + Py_ssize_t misses, hits; + int typed; + PyObject *dict; + int full; +} lru_cache_object; + +static PyTypeObject lru_cache_type; + +static PyObject * +lru_cache_make_key(PyObject *args, PyObject *kwds, int typed) +{ + PyObject *key, *sorted_items; + Py_ssize_t key_size, pos, key_pos; + + /* short path, key will match args anyway, which is a tuple */ + if (!typed && !kwds) { + Py_INCREF(args); + return args; + } + + if (kwds && PyDict_Size(kwds) > 0) { + sorted_items = PyDict_Items(kwds); + if (!sorted_items) + return NULL; + if (PyList_Sort(sorted_items) < 0) { + Py_DECREF(sorted_items); + return NULL; + } + } else + sorted_items = NULL; + + key_size = PyTuple_GET_SIZE(args); + if (sorted_items) + key_size += PyList_GET_SIZE(sorted_items); + if (typed) + key_size *= 2; + if (sorted_items) + key_size++; + + key = PyTuple_New(key_size); + if (key == NULL) + goto done; + + key_pos = 0; + for (pos = 0; pos < PyTuple_GET_SIZE(args); ++pos) { + PyObject *item = PyTuple_GET_ITEM(args, pos); + Py_INCREF(item); + PyTuple_SET_ITEM(key, key_pos++, item); + } + if (sorted_items) { + Py_INCREF(kwd_mark); + PyTuple_SET_ITEM(key, key_pos++, kwd_mark); + for (pos = 0; pos < PyList_GET_SIZE(sorted_items); ++pos) { + PyObject *item = PyList_GET_ITEM(sorted_items, pos); + Py_INCREF(item); + PyTuple_SET_ITEM(key, key_pos++, item); + } + } + if (typed) { + for (pos = 0; pos < PyTuple_GET_SIZE(args); ++pos) { + PyObject *item = (PyObject *)Py_TYPE(PyTuple_GET_ITEM(args, pos)); + Py_INCREF(item); + PyTuple_SET_ITEM(key, key_pos++, item); + } + if (sorted_items) { + for (pos = 0; pos < PyList_GET_SIZE(sorted_items); ++pos) { + PyObject *tp_items = PyList_GET_ITEM(sorted_items, pos); + PyObject *item = (PyObject *)Py_TYPE(PyTuple_GET_ITEM(tp_items, 1)); + Py_INCREF(item); + PyTuple_SET_ITEM(key, key_pos++, item); + } + } + } + assert(key_pos == key_size); + +done: + if (sorted_items) + Py_DECREF(sorted_items); + return key; +} + +static PyObject * +uncached_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds) +{ + PyObject *result = PyObject_Call(self->func, args, kwds); + if (!result) + return NULL; + self->misses++; + return result; +} + +static PyObject * +infinite_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds) +{ + PyObject *result; + PyObject *key = lru_cache_make_key(args, kwds, self->typed); + if (!key) + return NULL; + result = PyDict_GetItemWithError(self->cache, key); + if (result) { + Py_INCREF(result); + self->hits++; + Py_DECREF(key); + return result; + } + if (PyErr_Occurred()) { + Py_DECREF(key); + return NULL; + } + result = PyObject_Call(self->func, args, kwds); + if (!result) { + Py_DECREF(key); + return NULL; + } + if (PyDict_SetItem(self->cache, key, result) < 0) { + Py_DECREF(result); + Py_DECREF(key); + return NULL; + } + Py_DECREF(key); + self->misses++; + return result; +} + +static void +lru_cache_extricate_link(lru_list_elem *link) +{ + link->prev->next = link->next; + link->next->prev = link->prev; +} + +static void +lru_cache_append_link(lru_cache_object *self, lru_list_elem *link) +{ + lru_list_elem *root = &self->root; + lru_list_elem *last = root->prev; + last->next = root->prev = link; + link->prev = last; + link->next = root; +} + +static PyObject * +bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds) +{ + lru_list_elem *link; + PyObject *key, *result; + + key = lru_cache_make_key(args, kwds, self->typed); + if (!key) + return NULL; + link = (lru_list_elem *)PyDict_GetItemWithError(self->cache, key); + if (link) { + lru_cache_extricate_link(link); + lru_cache_append_link(self, link); + self->hits++; + result = link->result; + Py_INCREF(result); + Py_DECREF(key); + return result; + } + if (PyErr_Occurred()) { + Py_DECREF(key); + return NULL; + } + result = PyObject_Call(self->func, args, kwds); + if (!result) { + Py_DECREF(key); + return NULL; + } + if (self->full && self->root.next != &self->root) { + /* Use the oldest item to store the new key and result. */ + PyObject *oldkey, *oldresult; + /* Extricate the oldest item. */ + link = self->root.next; + lru_cache_extricate_link(link); + /* Remove it from the cache. + The cache dict holds one reference to the link, + and the linked list holds yet one reference to it. */ + if (PyDict_DelItem(self->cache, link->key) < 0) { + lru_cache_append_link(self, link); + Py_DECREF(key); + Py_DECREF(result); + return NULL; + } + /* Keep a reference to the old key and old result to + prevent their ref counts from going to zero during the + update. That will prevent potentially arbitrary object + clean-up code (i.e. __del__) from running while we're + still adjusting the links. */ + oldkey = link->key; + oldresult = link->result; + + link->key = key; + link->result = result; + if (PyDict_SetItem(self->cache, key, (PyObject *)link) < 0) { + Py_DECREF(link); + Py_DECREF(oldkey); + Py_DECREF(oldresult); + return NULL; + } + lru_cache_append_link(self, link); + Py_INCREF(result); /* for return */ + Py_DECREF(oldkey); + Py_DECREF(oldresult); + } else { + /* Put result in a new link at the front of the queue. */ + link = (lru_list_elem *)PyObject_GC_New(lru_list_elem, + &lru_list_elem_type); + if (link == NULL) { + Py_DECREF(key); + Py_DECREF(result); + return NULL; + } + + link->key = key; + link->result = result; + _PyObject_GC_TRACK(link); + if (PyDict_SetItem(self->cache, key, (PyObject *)link) < 0) { + Py_DECREF(link); + return NULL; + } + lru_cache_append_link(self, link); + Py_INCREF(result); /* for return */ + self->full = (PyDict_Size(self->cache) >= self->maxsize); + } + self->misses++; + return result; +} + +static PyObject * +lru_cache_new(PyTypeObject *type, PyObject *args, PyObject *kw) +{ + PyObject *func, *maxsize_O, *cache_info_type; + int typed; + lru_cache_object *obj; + Py_ssize_t maxsize; + PyObject *(*wrapper)(lru_cache_object *, PyObject *, PyObject *); + static char *keywords[] = {"user_function", "maxsize", "typed", + "cache_info_type", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kw, "OOpO:lru_cache", keywords, + &func, &maxsize_O, &typed, + &cache_info_type)) { + return NULL; + } + + if (!PyCallable_Check(func)) { + PyErr_SetString(PyExc_TypeError, + "the first argument must be callable"); + return NULL; + } + + /* select the caching function, and make/inc maxsize_O */ + if (maxsize_O == Py_None) { + wrapper = infinite_lru_cache_wrapper; + /* use this only to initialize lru_cache_object attribute maxsize */ + maxsize = -1; + } else if (PyIndex_Check(maxsize_O)) { + maxsize = PyNumber_AsSsize_t(maxsize_O, PyExc_OverflowError); + if (maxsize == -1 && PyErr_Occurred()) + return NULL; + if (maxsize == 0) + wrapper = uncached_lru_cache_wrapper; + else + wrapper = bounded_lru_cache_wrapper; + } else { + PyErr_SetString(PyExc_TypeError, "maxsize should be integer or None"); + return NULL; + } + + obj = (lru_cache_object *)type->tp_alloc(type, 0); + if (obj == NULL) + return NULL; + + if (!(obj->cache = PyDict_New())) { + Py_DECREF(obj); + return NULL; + } + + obj->root.prev = &obj->root; + obj->root.next = &obj->root; + obj->maxsize = maxsize; + Py_INCREF(maxsize_O); + obj->maxsize_O = maxsize_O; + Py_INCREF(func); + obj->func = func; + obj->wrapper = wrapper; + obj->misses = obj->hits = 0; + obj->typed = typed; + Py_INCREF(cache_info_type); + obj->cache_info_type = cache_info_type; + + return (PyObject *)obj; +} + +static lru_list_elem * +lru_cache_unlink_list(lru_cache_object *self) +{ + lru_list_elem *root = &self->root; + lru_list_elem *link = root->next; + if (link == root) + return NULL; + root->prev->next = NULL; + root->next = root->prev = root; + return link; +} + +static void +lru_cache_clear_list(lru_list_elem *link) +{ + while (link != NULL) { + lru_list_elem *next = link->next; + Py_DECREF(link); + link = next; + } +} + +static void +lru_cache_dealloc(lru_cache_object *obj) +{ + lru_list_elem *list = lru_cache_unlink_list(obj); + Py_XDECREF(obj->maxsize_O); + Py_XDECREF(obj->func); + Py_XDECREF(obj->cache); + Py_XDECREF(obj->dict); + Py_XDECREF(obj->cache_info_type); + lru_cache_clear_list(list); + Py_TYPE(obj)->tp_free(obj); +} + +static PyObject * +lru_cache_call(lru_cache_object *self, PyObject *args, PyObject *kwds) +{ + return self->wrapper(self, args, kwds); +} + +static PyObject * +lru_cache_cache_info(lru_cache_object *self, PyObject *unused) +{ + return PyObject_CallFunction(self->cache_info_type, "nnOn", + self->hits, self->misses, self->maxsize_O, + PyDict_Size(self->cache)); +} + +static PyObject * +lru_cache_cache_clear(lru_cache_object *self, PyObject *unused) +{ + lru_list_elem *list = lru_cache_unlink_list(self); + self->hits = self->misses = 0; + self->full = 0; + PyDict_Clear(self->cache); + lru_cache_clear_list(list); + Py_RETURN_NONE; +} + +static int +lru_cache_tp_traverse(lru_cache_object *self, visitproc visit, void *arg) +{ + lru_list_elem *link = self->root.next; + while (link != &self->root) { + lru_list_elem *next = link->next; + Py_VISIT(link); + link = next; + } + Py_VISIT(self->maxsize_O); + Py_VISIT(self->func); + Py_VISIT(self->cache); + Py_VISIT(self->cache_info_type); + Py_VISIT(self->dict); + return 0; +} + +static int +lru_cache_tp_clear(lru_cache_object *self) +{ + lru_list_elem *list = lru_cache_unlink_list(self); + Py_CLEAR(self->maxsize_O); + Py_CLEAR(self->func); + Py_CLEAR(self->cache); + Py_CLEAR(self->cache_info_type); + Py_CLEAR(self->dict); + lru_cache_clear_list(list); + return 0; +} + + +PyDoc_STRVAR(lru_cache_doc, +"Create a cached callable that wraps another function.\n\ +\n\ +user_function: the function being cached\n\ +\n\ +maxsize: 0 for no caching\n\ + None for unlimited cache size\n\ + n for a bounded cache\n\ +\n\ +typed: False cache f(3) and f(3.0) as identical calls\n\ + True cache f(3) and f(3.0) as distinct calls\n\ +\n\ +cache_info_type: namedtuple class with the fields:\n\ + hits misses currsize maxsize\n" +); + +static PyMethodDef lru_cache_methods[] = { + {"cache_info", (PyCFunction)lru_cache_cache_info, METH_NOARGS}, + {"cache_clear", (PyCFunction)lru_cache_cache_clear, METH_NOARGS}, + {NULL} +}; + +static PyGetSetDef lru_cache_getsetlist[] = { + {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict}, + {NULL} +}; + +static PyTypeObject lru_cache_type = { + PyVarObject_HEAD_INIT(NULL, 0) + "functools._lru_cache_wrapper", /* tp_name */ + sizeof(lru_cache_object), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor)lru_cache_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + (ternaryfunc)lru_cache_call, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + /* tp_flags */ + lru_cache_doc, /* tp_doc */ + (traverseproc)lru_cache_tp_traverse,/* tp_traverse */ + (inquiry)lru_cache_tp_clear, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + lru_cache_methods, /* tp_methods */ + 0, /* tp_members */ + lru_cache_getsetlist, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + offsetof(lru_cache_object, dict), /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + lru_cache_new, /* tp_new */ +}; + /* module level code ********************************************************/ PyDoc_STRVAR(module_doc, @@ -602,6 +1135,11 @@ static PyMethodDef module_methods[] = { {NULL, NULL} /* sentinel */ }; +static void +module_free(void *m) +{ + Py_CLEAR(kwd_mark); +} static struct PyModuleDef _functoolsmodule = { PyModuleDef_HEAD_INIT, @@ -612,7 +1150,7 @@ static struct PyModuleDef _functoolsmodule = { NULL, NULL, NULL, - NULL + module_free, }; PyMODINIT_FUNC @@ -623,6 +1161,7 @@ PyInit__functools(void) char *name; PyTypeObject *typelist[] = { &partial_type, + &lru_cache_type, NULL }; @@ -630,6 +1169,12 @@ PyInit__functools(void) if (m == NULL) return NULL; + kwd_mark = PyObject_CallObject((PyObject *)&PyBaseObject_Type, NULL); + if (!kwd_mark) { + Py_DECREF(m); + return NULL; + } + for (i=0 ; typelist[i] != NULL ; i++) { if (PyType_Ready(typelist[i]) < 0) { Py_DECREF(m); -- cgit v1.2.1 From c3f1a2c48b65a3f6915c962d059783aa7c8c6453 Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Sat, 23 May 2015 14:56:23 -0700 Subject: Backed out changeset 57776eee74f2 --- Modules/_functoolsmodule.c | 547 +-------------------------------------------- 1 file changed, 1 insertion(+), 546 deletions(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 99b50b0e9d..3c82e5134a 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -590,539 +590,6 @@ For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\ of the sequence in the calculation, and serves as a default when the\n\ sequence is empty."); -/* lru_cache object **********************************************************/ - -/* this object is used delimit args and keywords in the cache keys */ -static PyObject *kwd_mark = NULL; - -struct lru_list_elem; -struct lru_cache_object; - -typedef struct lru_list_elem { - PyObject_HEAD - struct lru_list_elem *prev, *next; /* borrowed links */ - PyObject *key, *result; -} lru_list_elem; - -static void -lru_list_elem_dealloc(lru_list_elem *link) -{ - _PyObject_GC_UNTRACK(link); - Py_XDECREF(link->key); - Py_XDECREF(link->result); - PyObject_GC_Del(link); -} - -static int -lru_list_elem_traverse(lru_list_elem *link, visitproc visit, void *arg) -{ - Py_VISIT(link->key); - Py_VISIT(link->result); - return 0; -} - -static int -lru_list_elem_clear(lru_list_elem *link) -{ - Py_CLEAR(link->key); - Py_CLEAR(link->result); - return 0; -} - -static PyTypeObject lru_list_elem_type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) - "functools._lru_list_elem", /* tp_name */ - sizeof(lru_list_elem), /* tp_basicsize */ - 0, /* tp_itemsize */ - /* methods */ - (destructor)lru_list_elem_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ - 0, /* tp_doc */ - (traverseproc)lru_list_elem_traverse, /* tp_traverse */ - (inquiry)lru_list_elem_clear, /* tp_clear */ -}; - - -typedef PyObject *(*lru_cache_ternaryfunc)(struct lru_cache_object *, PyObject *, PyObject *); - -typedef struct lru_cache_object { - lru_list_elem root; /* includes PyObject_HEAD */ - Py_ssize_t maxsize; - PyObject *maxsize_O; - PyObject *func; - lru_cache_ternaryfunc wrapper; - PyObject *cache; - PyObject *cache_info_type; - Py_ssize_t misses, hits; - int typed; - PyObject *dict; - int full; -} lru_cache_object; - -static PyTypeObject lru_cache_type; - -static PyObject * -lru_cache_make_key(PyObject *args, PyObject *kwds, int typed) -{ - PyObject *key, *sorted_items; - Py_ssize_t key_size, pos, key_pos; - - /* short path, key will match args anyway, which is a tuple */ - if (!typed && !kwds) { - Py_INCREF(args); - return args; - } - - if (kwds && PyDict_Size(kwds) > 0) { - sorted_items = PyDict_Items(kwds); - if (!sorted_items) - return NULL; - if (PyList_Sort(sorted_items) < 0) { - Py_DECREF(sorted_items); - return NULL; - } - } else - sorted_items = NULL; - - key_size = PyTuple_GET_SIZE(args); - if (sorted_items) - key_size += PyList_GET_SIZE(sorted_items); - if (typed) - key_size *= 2; - if (sorted_items) - key_size++; - - key = PyTuple_New(key_size); - if (key == NULL) - goto done; - - key_pos = 0; - for (pos = 0; pos < PyTuple_GET_SIZE(args); ++pos) { - PyObject *item = PyTuple_GET_ITEM(args, pos); - Py_INCREF(item); - PyTuple_SET_ITEM(key, key_pos++, item); - } - if (sorted_items) { - Py_INCREF(kwd_mark); - PyTuple_SET_ITEM(key, key_pos++, kwd_mark); - for (pos = 0; pos < PyList_GET_SIZE(sorted_items); ++pos) { - PyObject *item = PyList_GET_ITEM(sorted_items, pos); - Py_INCREF(item); - PyTuple_SET_ITEM(key, key_pos++, item); - } - } - if (typed) { - for (pos = 0; pos < PyTuple_GET_SIZE(args); ++pos) { - PyObject *item = (PyObject *)Py_TYPE(PyTuple_GET_ITEM(args, pos)); - Py_INCREF(item); - PyTuple_SET_ITEM(key, key_pos++, item); - } - if (sorted_items) { - for (pos = 0; pos < PyList_GET_SIZE(sorted_items); ++pos) { - PyObject *tp_items = PyList_GET_ITEM(sorted_items, pos); - PyObject *item = (PyObject *)Py_TYPE(PyTuple_GET_ITEM(tp_items, 1)); - Py_INCREF(item); - PyTuple_SET_ITEM(key, key_pos++, item); - } - } - } - assert(key_pos == key_size); - -done: - if (sorted_items) - Py_DECREF(sorted_items); - return key; -} - -static PyObject * -uncached_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds) -{ - PyObject *result = PyObject_Call(self->func, args, kwds); - if (!result) - return NULL; - self->misses++; - return result; -} - -static PyObject * -infinite_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds) -{ - PyObject *result; - PyObject *key = lru_cache_make_key(args, kwds, self->typed); - if (!key) - return NULL; - result = PyDict_GetItemWithError(self->cache, key); - if (result) { - Py_INCREF(result); - self->hits++; - Py_DECREF(key); - return result; - } - if (PyErr_Occurred()) { - Py_DECREF(key); - return NULL; - } - result = PyObject_Call(self->func, args, kwds); - if (!result) { - Py_DECREF(key); - return NULL; - } - if (PyDict_SetItem(self->cache, key, result) < 0) { - Py_DECREF(result); - Py_DECREF(key); - return NULL; - } - Py_DECREF(key); - self->misses++; - return result; -} - -static void -lru_cache_extricate_link(lru_list_elem *link) -{ - link->prev->next = link->next; - link->next->prev = link->prev; -} - -static void -lru_cache_append_link(lru_cache_object *self, lru_list_elem *link) -{ - lru_list_elem *root = &self->root; - lru_list_elem *last = root->prev; - last->next = root->prev = link; - link->prev = last; - link->next = root; -} - -static PyObject * -bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds) -{ - lru_list_elem *link; - PyObject *key, *result; - - key = lru_cache_make_key(args, kwds, self->typed); - if (!key) - return NULL; - link = (lru_list_elem *)PyDict_GetItemWithError(self->cache, key); - if (link) { - lru_cache_extricate_link(link); - lru_cache_append_link(self, link); - self->hits++; - result = link->result; - Py_INCREF(result); - Py_DECREF(key); - return result; - } - if (PyErr_Occurred()) { - Py_DECREF(key); - return NULL; - } - result = PyObject_Call(self->func, args, kwds); - if (!result) { - Py_DECREF(key); - return NULL; - } - if (self->full && self->root.next != &self->root) { - /* Use the oldest item to store the new key and result. */ - PyObject *oldkey, *oldresult; - /* Extricate the oldest item. */ - link = self->root.next; - lru_cache_extricate_link(link); - /* Remove it from the cache. - The cache dict holds one reference to the link, - and the linked list holds yet one reference to it. */ - if (PyDict_DelItem(self->cache, link->key) < 0) { - lru_cache_append_link(self, link); - Py_DECREF(key); - Py_DECREF(result); - return NULL; - } - /* Keep a reference to the old key and old result to - prevent their ref counts from going to zero during the - update. That will prevent potentially arbitrary object - clean-up code (i.e. __del__) from running while we're - still adjusting the links. */ - oldkey = link->key; - oldresult = link->result; - - link->key = key; - link->result = result; - if (PyDict_SetItem(self->cache, key, (PyObject *)link) < 0) { - Py_DECREF(link); - Py_DECREF(oldkey); - Py_DECREF(oldresult); - return NULL; - } - lru_cache_append_link(self, link); - Py_INCREF(result); /* for return */ - Py_DECREF(oldkey); - Py_DECREF(oldresult); - } else { - /* Put result in a new link at the front of the queue. */ - link = (lru_list_elem *)PyObject_GC_New(lru_list_elem, - &lru_list_elem_type); - if (link == NULL) { - Py_DECREF(key); - Py_DECREF(result); - return NULL; - } - - link->key = key; - link->result = result; - _PyObject_GC_TRACK(link); - if (PyDict_SetItem(self->cache, key, (PyObject *)link) < 0) { - Py_DECREF(link); - return NULL; - } - lru_cache_append_link(self, link); - Py_INCREF(result); /* for return */ - self->full = (PyDict_Size(self->cache) >= self->maxsize); - } - self->misses++; - return result; -} - -static PyObject * -lru_cache_new(PyTypeObject *type, PyObject *args, PyObject *kw) -{ - PyObject *func, *maxsize_O, *cache_info_type; - int typed; - lru_cache_object *obj; - Py_ssize_t maxsize; - PyObject *(*wrapper)(lru_cache_object *, PyObject *, PyObject *); - static char *keywords[] = {"user_function", "maxsize", "typed", - "cache_info_type", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kw, "OOpO:lru_cache", keywords, - &func, &maxsize_O, &typed, - &cache_info_type)) { - return NULL; - } - - if (!PyCallable_Check(func)) { - PyErr_SetString(PyExc_TypeError, - "the first argument must be callable"); - return NULL; - } - - /* select the caching function, and make/inc maxsize_O */ - if (maxsize_O == Py_None) { - wrapper = infinite_lru_cache_wrapper; - /* use this only to initialize lru_cache_object attribute maxsize */ - maxsize = -1; - } else if (PyIndex_Check(maxsize_O)) { - maxsize = PyNumber_AsSsize_t(maxsize_O, PyExc_OverflowError); - if (maxsize == -1 && PyErr_Occurred()) - return NULL; - if (maxsize == 0) - wrapper = uncached_lru_cache_wrapper; - else - wrapper = bounded_lru_cache_wrapper; - } else { - PyErr_SetString(PyExc_TypeError, "maxsize should be integer or None"); - return NULL; - } - - obj = (lru_cache_object *)type->tp_alloc(type, 0); - if (obj == NULL) - return NULL; - - if (!(obj->cache = PyDict_New())) { - Py_DECREF(obj); - return NULL; - } - - obj->root.prev = &obj->root; - obj->root.next = &obj->root; - obj->maxsize = maxsize; - Py_INCREF(maxsize_O); - obj->maxsize_O = maxsize_O; - Py_INCREF(func); - obj->func = func; - obj->wrapper = wrapper; - obj->misses = obj->hits = 0; - obj->typed = typed; - Py_INCREF(cache_info_type); - obj->cache_info_type = cache_info_type; - - return (PyObject *)obj; -} - -static lru_list_elem * -lru_cache_unlink_list(lru_cache_object *self) -{ - lru_list_elem *root = &self->root; - lru_list_elem *link = root->next; - if (link == root) - return NULL; - root->prev->next = NULL; - root->next = root->prev = root; - return link; -} - -static void -lru_cache_clear_list(lru_list_elem *link) -{ - while (link != NULL) { - lru_list_elem *next = link->next; - Py_DECREF(link); - link = next; - } -} - -static void -lru_cache_dealloc(lru_cache_object *obj) -{ - lru_list_elem *list = lru_cache_unlink_list(obj); - Py_XDECREF(obj->maxsize_O); - Py_XDECREF(obj->func); - Py_XDECREF(obj->cache); - Py_XDECREF(obj->dict); - Py_XDECREF(obj->cache_info_type); - lru_cache_clear_list(list); - Py_TYPE(obj)->tp_free(obj); -} - -static PyObject * -lru_cache_call(lru_cache_object *self, PyObject *args, PyObject *kwds) -{ - return self->wrapper(self, args, kwds); -} - -static PyObject * -lru_cache_cache_info(lru_cache_object *self, PyObject *unused) -{ - return PyObject_CallFunction(self->cache_info_type, "nnOn", - self->hits, self->misses, self->maxsize_O, - PyDict_Size(self->cache)); -} - -static PyObject * -lru_cache_cache_clear(lru_cache_object *self, PyObject *unused) -{ - lru_list_elem *list = lru_cache_unlink_list(self); - self->hits = self->misses = 0; - self->full = 0; - PyDict_Clear(self->cache); - lru_cache_clear_list(list); - Py_RETURN_NONE; -} - -static int -lru_cache_tp_traverse(lru_cache_object *self, visitproc visit, void *arg) -{ - lru_list_elem *link = self->root.next; - while (link != &self->root) { - lru_list_elem *next = link->next; - Py_VISIT(link); - link = next; - } - Py_VISIT(self->maxsize_O); - Py_VISIT(self->func); - Py_VISIT(self->cache); - Py_VISIT(self->cache_info_type); - Py_VISIT(self->dict); - return 0; -} - -static int -lru_cache_tp_clear(lru_cache_object *self) -{ - lru_list_elem *list = lru_cache_unlink_list(self); - Py_CLEAR(self->maxsize_O); - Py_CLEAR(self->func); - Py_CLEAR(self->cache); - Py_CLEAR(self->cache_info_type); - Py_CLEAR(self->dict); - lru_cache_clear_list(list); - return 0; -} - - -PyDoc_STRVAR(lru_cache_doc, -"Create a cached callable that wraps another function.\n\ -\n\ -user_function: the function being cached\n\ -\n\ -maxsize: 0 for no caching\n\ - None for unlimited cache size\n\ - n for a bounded cache\n\ -\n\ -typed: False cache f(3) and f(3.0) as identical calls\n\ - True cache f(3) and f(3.0) as distinct calls\n\ -\n\ -cache_info_type: namedtuple class with the fields:\n\ - hits misses currsize maxsize\n" -); - -static PyMethodDef lru_cache_methods[] = { - {"cache_info", (PyCFunction)lru_cache_cache_info, METH_NOARGS}, - {"cache_clear", (PyCFunction)lru_cache_cache_clear, METH_NOARGS}, - {NULL} -}; - -static PyGetSetDef lru_cache_getsetlist[] = { - {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict}, - {NULL} -}; - -static PyTypeObject lru_cache_type = { - PyVarObject_HEAD_INIT(NULL, 0) - "functools._lru_cache_wrapper", /* tp_name */ - sizeof(lru_cache_object), /* tp_basicsize */ - 0, /* tp_itemsize */ - /* methods */ - (destructor)lru_cache_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - (ternaryfunc)lru_cache_call, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, - /* tp_flags */ - lru_cache_doc, /* tp_doc */ - (traverseproc)lru_cache_tp_traverse,/* tp_traverse */ - (inquiry)lru_cache_tp_clear, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - lru_cache_methods, /* tp_methods */ - 0, /* tp_members */ - lru_cache_getsetlist, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - offsetof(lru_cache_object, dict), /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - lru_cache_new, /* tp_new */ -}; - /* module level code ********************************************************/ PyDoc_STRVAR(module_doc, @@ -1135,11 +602,6 @@ static PyMethodDef module_methods[] = { {NULL, NULL} /* sentinel */ }; -static void -module_free(void *m) -{ - Py_CLEAR(kwd_mark); -} static struct PyModuleDef _functoolsmodule = { PyModuleDef_HEAD_INIT, @@ -1150,7 +612,7 @@ static struct PyModuleDef _functoolsmodule = { NULL, NULL, NULL, - module_free, + NULL }; PyMODINIT_FUNC @@ -1161,7 +623,6 @@ PyInit__functools(void) char *name; PyTypeObject *typelist[] = { &partial_type, - &lru_cache_type, NULL }; @@ -1169,12 +630,6 @@ PyInit__functools(void) if (m == NULL) return NULL; - kwd_mark = PyObject_CallObject((PyObject *)&PyBaseObject_Type, NULL); - if (!kwd_mark) { - Py_DECREF(m); - return NULL; - } - for (i=0 ; typelist[i] != NULL ; i++) { if (PyType_Ready(typelist[i]) < 0) { Py_DECREF(m); -- cgit v1.2.1 From cc57b55958f841caf5d58d2f7d1e040512c4217d Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 24 May 2015 21:53:49 +0300 Subject: Backed out changeset: b0a0b9b59012 --- Modules/_functoolsmodule.c | 547 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 546 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 3c82e5134a..99b50b0e9d 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -590,6 +590,539 @@ For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\ of the sequence in the calculation, and serves as a default when the\n\ sequence is empty."); +/* lru_cache object **********************************************************/ + +/* this object is used delimit args and keywords in the cache keys */ +static PyObject *kwd_mark = NULL; + +struct lru_list_elem; +struct lru_cache_object; + +typedef struct lru_list_elem { + PyObject_HEAD + struct lru_list_elem *prev, *next; /* borrowed links */ + PyObject *key, *result; +} lru_list_elem; + +static void +lru_list_elem_dealloc(lru_list_elem *link) +{ + _PyObject_GC_UNTRACK(link); + Py_XDECREF(link->key); + Py_XDECREF(link->result); + PyObject_GC_Del(link); +} + +static int +lru_list_elem_traverse(lru_list_elem *link, visitproc visit, void *arg) +{ + Py_VISIT(link->key); + Py_VISIT(link->result); + return 0; +} + +static int +lru_list_elem_clear(lru_list_elem *link) +{ + Py_CLEAR(link->key); + Py_CLEAR(link->result); + return 0; +} + +static PyTypeObject lru_list_elem_type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "functools._lru_list_elem", /* tp_name */ + sizeof(lru_list_elem), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor)lru_list_elem_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ + 0, /* tp_doc */ + (traverseproc)lru_list_elem_traverse, /* tp_traverse */ + (inquiry)lru_list_elem_clear, /* tp_clear */ +}; + + +typedef PyObject *(*lru_cache_ternaryfunc)(struct lru_cache_object *, PyObject *, PyObject *); + +typedef struct lru_cache_object { + lru_list_elem root; /* includes PyObject_HEAD */ + Py_ssize_t maxsize; + PyObject *maxsize_O; + PyObject *func; + lru_cache_ternaryfunc wrapper; + PyObject *cache; + PyObject *cache_info_type; + Py_ssize_t misses, hits; + int typed; + PyObject *dict; + int full; +} lru_cache_object; + +static PyTypeObject lru_cache_type; + +static PyObject * +lru_cache_make_key(PyObject *args, PyObject *kwds, int typed) +{ + PyObject *key, *sorted_items; + Py_ssize_t key_size, pos, key_pos; + + /* short path, key will match args anyway, which is a tuple */ + if (!typed && !kwds) { + Py_INCREF(args); + return args; + } + + if (kwds && PyDict_Size(kwds) > 0) { + sorted_items = PyDict_Items(kwds); + if (!sorted_items) + return NULL; + if (PyList_Sort(sorted_items) < 0) { + Py_DECREF(sorted_items); + return NULL; + } + } else + sorted_items = NULL; + + key_size = PyTuple_GET_SIZE(args); + if (sorted_items) + key_size += PyList_GET_SIZE(sorted_items); + if (typed) + key_size *= 2; + if (sorted_items) + key_size++; + + key = PyTuple_New(key_size); + if (key == NULL) + goto done; + + key_pos = 0; + for (pos = 0; pos < PyTuple_GET_SIZE(args); ++pos) { + PyObject *item = PyTuple_GET_ITEM(args, pos); + Py_INCREF(item); + PyTuple_SET_ITEM(key, key_pos++, item); + } + if (sorted_items) { + Py_INCREF(kwd_mark); + PyTuple_SET_ITEM(key, key_pos++, kwd_mark); + for (pos = 0; pos < PyList_GET_SIZE(sorted_items); ++pos) { + PyObject *item = PyList_GET_ITEM(sorted_items, pos); + Py_INCREF(item); + PyTuple_SET_ITEM(key, key_pos++, item); + } + } + if (typed) { + for (pos = 0; pos < PyTuple_GET_SIZE(args); ++pos) { + PyObject *item = (PyObject *)Py_TYPE(PyTuple_GET_ITEM(args, pos)); + Py_INCREF(item); + PyTuple_SET_ITEM(key, key_pos++, item); + } + if (sorted_items) { + for (pos = 0; pos < PyList_GET_SIZE(sorted_items); ++pos) { + PyObject *tp_items = PyList_GET_ITEM(sorted_items, pos); + PyObject *item = (PyObject *)Py_TYPE(PyTuple_GET_ITEM(tp_items, 1)); + Py_INCREF(item); + PyTuple_SET_ITEM(key, key_pos++, item); + } + } + } + assert(key_pos == key_size); + +done: + if (sorted_items) + Py_DECREF(sorted_items); + return key; +} + +static PyObject * +uncached_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds) +{ + PyObject *result = PyObject_Call(self->func, args, kwds); + if (!result) + return NULL; + self->misses++; + return result; +} + +static PyObject * +infinite_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds) +{ + PyObject *result; + PyObject *key = lru_cache_make_key(args, kwds, self->typed); + if (!key) + return NULL; + result = PyDict_GetItemWithError(self->cache, key); + if (result) { + Py_INCREF(result); + self->hits++; + Py_DECREF(key); + return result; + } + if (PyErr_Occurred()) { + Py_DECREF(key); + return NULL; + } + result = PyObject_Call(self->func, args, kwds); + if (!result) { + Py_DECREF(key); + return NULL; + } + if (PyDict_SetItem(self->cache, key, result) < 0) { + Py_DECREF(result); + Py_DECREF(key); + return NULL; + } + Py_DECREF(key); + self->misses++; + return result; +} + +static void +lru_cache_extricate_link(lru_list_elem *link) +{ + link->prev->next = link->next; + link->next->prev = link->prev; +} + +static void +lru_cache_append_link(lru_cache_object *self, lru_list_elem *link) +{ + lru_list_elem *root = &self->root; + lru_list_elem *last = root->prev; + last->next = root->prev = link; + link->prev = last; + link->next = root; +} + +static PyObject * +bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds) +{ + lru_list_elem *link; + PyObject *key, *result; + + key = lru_cache_make_key(args, kwds, self->typed); + if (!key) + return NULL; + link = (lru_list_elem *)PyDict_GetItemWithError(self->cache, key); + if (link) { + lru_cache_extricate_link(link); + lru_cache_append_link(self, link); + self->hits++; + result = link->result; + Py_INCREF(result); + Py_DECREF(key); + return result; + } + if (PyErr_Occurred()) { + Py_DECREF(key); + return NULL; + } + result = PyObject_Call(self->func, args, kwds); + if (!result) { + Py_DECREF(key); + return NULL; + } + if (self->full && self->root.next != &self->root) { + /* Use the oldest item to store the new key and result. */ + PyObject *oldkey, *oldresult; + /* Extricate the oldest item. */ + link = self->root.next; + lru_cache_extricate_link(link); + /* Remove it from the cache. + The cache dict holds one reference to the link, + and the linked list holds yet one reference to it. */ + if (PyDict_DelItem(self->cache, link->key) < 0) { + lru_cache_append_link(self, link); + Py_DECREF(key); + Py_DECREF(result); + return NULL; + } + /* Keep a reference to the old key and old result to + prevent their ref counts from going to zero during the + update. That will prevent potentially arbitrary object + clean-up code (i.e. __del__) from running while we're + still adjusting the links. */ + oldkey = link->key; + oldresult = link->result; + + link->key = key; + link->result = result; + if (PyDict_SetItem(self->cache, key, (PyObject *)link) < 0) { + Py_DECREF(link); + Py_DECREF(oldkey); + Py_DECREF(oldresult); + return NULL; + } + lru_cache_append_link(self, link); + Py_INCREF(result); /* for return */ + Py_DECREF(oldkey); + Py_DECREF(oldresult); + } else { + /* Put result in a new link at the front of the queue. */ + link = (lru_list_elem *)PyObject_GC_New(lru_list_elem, + &lru_list_elem_type); + if (link == NULL) { + Py_DECREF(key); + Py_DECREF(result); + return NULL; + } + + link->key = key; + link->result = result; + _PyObject_GC_TRACK(link); + if (PyDict_SetItem(self->cache, key, (PyObject *)link) < 0) { + Py_DECREF(link); + return NULL; + } + lru_cache_append_link(self, link); + Py_INCREF(result); /* for return */ + self->full = (PyDict_Size(self->cache) >= self->maxsize); + } + self->misses++; + return result; +} + +static PyObject * +lru_cache_new(PyTypeObject *type, PyObject *args, PyObject *kw) +{ + PyObject *func, *maxsize_O, *cache_info_type; + int typed; + lru_cache_object *obj; + Py_ssize_t maxsize; + PyObject *(*wrapper)(lru_cache_object *, PyObject *, PyObject *); + static char *keywords[] = {"user_function", "maxsize", "typed", + "cache_info_type", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kw, "OOpO:lru_cache", keywords, + &func, &maxsize_O, &typed, + &cache_info_type)) { + return NULL; + } + + if (!PyCallable_Check(func)) { + PyErr_SetString(PyExc_TypeError, + "the first argument must be callable"); + return NULL; + } + + /* select the caching function, and make/inc maxsize_O */ + if (maxsize_O == Py_None) { + wrapper = infinite_lru_cache_wrapper; + /* use this only to initialize lru_cache_object attribute maxsize */ + maxsize = -1; + } else if (PyIndex_Check(maxsize_O)) { + maxsize = PyNumber_AsSsize_t(maxsize_O, PyExc_OverflowError); + if (maxsize == -1 && PyErr_Occurred()) + return NULL; + if (maxsize == 0) + wrapper = uncached_lru_cache_wrapper; + else + wrapper = bounded_lru_cache_wrapper; + } else { + PyErr_SetString(PyExc_TypeError, "maxsize should be integer or None"); + return NULL; + } + + obj = (lru_cache_object *)type->tp_alloc(type, 0); + if (obj == NULL) + return NULL; + + if (!(obj->cache = PyDict_New())) { + Py_DECREF(obj); + return NULL; + } + + obj->root.prev = &obj->root; + obj->root.next = &obj->root; + obj->maxsize = maxsize; + Py_INCREF(maxsize_O); + obj->maxsize_O = maxsize_O; + Py_INCREF(func); + obj->func = func; + obj->wrapper = wrapper; + obj->misses = obj->hits = 0; + obj->typed = typed; + Py_INCREF(cache_info_type); + obj->cache_info_type = cache_info_type; + + return (PyObject *)obj; +} + +static lru_list_elem * +lru_cache_unlink_list(lru_cache_object *self) +{ + lru_list_elem *root = &self->root; + lru_list_elem *link = root->next; + if (link == root) + return NULL; + root->prev->next = NULL; + root->next = root->prev = root; + return link; +} + +static void +lru_cache_clear_list(lru_list_elem *link) +{ + while (link != NULL) { + lru_list_elem *next = link->next; + Py_DECREF(link); + link = next; + } +} + +static void +lru_cache_dealloc(lru_cache_object *obj) +{ + lru_list_elem *list = lru_cache_unlink_list(obj); + Py_XDECREF(obj->maxsize_O); + Py_XDECREF(obj->func); + Py_XDECREF(obj->cache); + Py_XDECREF(obj->dict); + Py_XDECREF(obj->cache_info_type); + lru_cache_clear_list(list); + Py_TYPE(obj)->tp_free(obj); +} + +static PyObject * +lru_cache_call(lru_cache_object *self, PyObject *args, PyObject *kwds) +{ + return self->wrapper(self, args, kwds); +} + +static PyObject * +lru_cache_cache_info(lru_cache_object *self, PyObject *unused) +{ + return PyObject_CallFunction(self->cache_info_type, "nnOn", + self->hits, self->misses, self->maxsize_O, + PyDict_Size(self->cache)); +} + +static PyObject * +lru_cache_cache_clear(lru_cache_object *self, PyObject *unused) +{ + lru_list_elem *list = lru_cache_unlink_list(self); + self->hits = self->misses = 0; + self->full = 0; + PyDict_Clear(self->cache); + lru_cache_clear_list(list); + Py_RETURN_NONE; +} + +static int +lru_cache_tp_traverse(lru_cache_object *self, visitproc visit, void *arg) +{ + lru_list_elem *link = self->root.next; + while (link != &self->root) { + lru_list_elem *next = link->next; + Py_VISIT(link); + link = next; + } + Py_VISIT(self->maxsize_O); + Py_VISIT(self->func); + Py_VISIT(self->cache); + Py_VISIT(self->cache_info_type); + Py_VISIT(self->dict); + return 0; +} + +static int +lru_cache_tp_clear(lru_cache_object *self) +{ + lru_list_elem *list = lru_cache_unlink_list(self); + Py_CLEAR(self->maxsize_O); + Py_CLEAR(self->func); + Py_CLEAR(self->cache); + Py_CLEAR(self->cache_info_type); + Py_CLEAR(self->dict); + lru_cache_clear_list(list); + return 0; +} + + +PyDoc_STRVAR(lru_cache_doc, +"Create a cached callable that wraps another function.\n\ +\n\ +user_function: the function being cached\n\ +\n\ +maxsize: 0 for no caching\n\ + None for unlimited cache size\n\ + n for a bounded cache\n\ +\n\ +typed: False cache f(3) and f(3.0) as identical calls\n\ + True cache f(3) and f(3.0) as distinct calls\n\ +\n\ +cache_info_type: namedtuple class with the fields:\n\ + hits misses currsize maxsize\n" +); + +static PyMethodDef lru_cache_methods[] = { + {"cache_info", (PyCFunction)lru_cache_cache_info, METH_NOARGS}, + {"cache_clear", (PyCFunction)lru_cache_cache_clear, METH_NOARGS}, + {NULL} +}; + +static PyGetSetDef lru_cache_getsetlist[] = { + {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict}, + {NULL} +}; + +static PyTypeObject lru_cache_type = { + PyVarObject_HEAD_INIT(NULL, 0) + "functools._lru_cache_wrapper", /* tp_name */ + sizeof(lru_cache_object), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor)lru_cache_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + (ternaryfunc)lru_cache_call, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + /* tp_flags */ + lru_cache_doc, /* tp_doc */ + (traverseproc)lru_cache_tp_traverse,/* tp_traverse */ + (inquiry)lru_cache_tp_clear, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + lru_cache_methods, /* tp_methods */ + 0, /* tp_members */ + lru_cache_getsetlist, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + offsetof(lru_cache_object, dict), /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + lru_cache_new, /* tp_new */ +}; + /* module level code ********************************************************/ PyDoc_STRVAR(module_doc, @@ -602,6 +1135,11 @@ static PyMethodDef module_methods[] = { {NULL, NULL} /* sentinel */ }; +static void +module_free(void *m) +{ + Py_CLEAR(kwd_mark); +} static struct PyModuleDef _functoolsmodule = { PyModuleDef_HEAD_INIT, @@ -612,7 +1150,7 @@ static struct PyModuleDef _functoolsmodule = { NULL, NULL, NULL, - NULL + module_free, }; PyMODINIT_FUNC @@ -623,6 +1161,7 @@ PyInit__functools(void) char *name; PyTypeObject *typelist[] = { &partial_type, + &lru_cache_type, NULL }; @@ -630,6 +1169,12 @@ PyInit__functools(void) if (m == NULL) return NULL; + kwd_mark = PyObject_CallObject((PyObject *)&PyBaseObject_Type, NULL); + if (!kwd_mark) { + Py_DECREF(m); + return NULL; + } + for (i=0 ; typelist[i] != NULL ; i++) { if (PyType_Ready(typelist[i]) < 0) { Py_DECREF(m); -- cgit v1.2.1 From eef24c3a5da25a828bc79c777e85ae604167a977 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Thu, 28 May 2015 11:21:31 -0400 Subject: Issue 24017: Drop getawaitablefunc and friends in favor of unaryfunc. --- Modules/_testcapimodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 1967686624..2697ac2433 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3987,7 +3987,7 @@ awaitObject_await(awaitObject *ao) } static PyAsyncMethods awaitType_as_async = { - (getawaitablefunc)awaitObject_await, /* am_await */ + (unaryfunc)awaitObject_await, /* am_await */ 0, /* am_aiter */ 0 /* am_anext */ }; -- cgit v1.2.1 From 85b9535b469480457f93076018d786186b1f35a0 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 29 May 2015 17:10:30 -0500 Subject: fix importing one char extension modules (closes #24328) --- Modules/_testmultiphase.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'Modules') diff --git a/Modules/_testmultiphase.c b/Modules/_testmultiphase.c index 0d50db2f02..7b98be2b8e 100644 --- a/Modules/_testmultiphase.c +++ b/Modules/_testmultiphase.c @@ -321,6 +321,14 @@ PyInitU_eckzbwbhc6jpgzcx415x(PyObject *spec) return PyModuleDef_Init(&def_nonascii_kana); } +/*** Module with a single-character name ***/ + +PyMODINIT_FUNC +PyInit_x(PyObject *spec) +{ + return PyModuleDef_Init(&main_def); +} + /**** Testing NULL slots ****/ static PyModuleDef null_slots_def = TEST_MODULE_DEF( -- cgit v1.2.1 From 1b80fbf61c833e94b67d313523015df6e1136550 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Fri, 29 May 2015 22:21:39 -0600 Subject: Issue #16991: Add a C implementation of collections.OrderedDict. --- Modules/_collectionsmodule.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 2b70b2ba06..c1fd8b9d9b 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -2263,6 +2263,9 @@ PyInit__collections(void) Py_INCREF(&defdict_type); PyModule_AddObject(m, "defaultdict", (PyObject *)&defdict_type); + Py_INCREF(&PyODict_Type); + PyModule_AddObject(m, "OrderedDict", (PyObject *)&PyODict_Type); + if (PyType_Ready(&dequeiter_type) < 0) return NULL; Py_INCREF(&dequeiter_type); -- cgit v1.2.1 From d7ec94fe5c3ac4463377ac6e5957917fdb19ae93 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 30 May 2015 11:09:35 +0300 Subject: Use converter names instead of format units in Argument Clinic descriptions in builtin and _crypt modules. --- Modules/_cryptmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_cryptmodule.c b/Modules/_cryptmodule.c index 16cc4c2d6e..d422cfdff7 100644 --- a/Modules/_cryptmodule.c +++ b/Modules/_cryptmodule.c @@ -17,8 +17,8 @@ module crypt /*[clinic input] crypt.crypt - word: 's' - salt: 's' + word: str + salt: str / Hash a *word* with the given *salt* and return the hashed password. @@ -32,7 +32,7 @@ results for a given *word*. static PyObject * crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt) -/*[clinic end generated code: output=995ad1e854d83069 input=4d93b6d0f41fbf58]*/ +/*[clinic end generated code: output=995ad1e854d83069 input=0e8edec9c364352b]*/ { /* On some platforms (AtheOS) crypt returns NULL for an invalid salt. Return None in that case. XXX Maybe raise an exception? */ -- cgit v1.2.1 From 4a7c3504f8559e7981b06092328d00e03bdad187 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 30 May 2015 11:30:39 +0300 Subject: Specify default values of semantic booleans in Argument Clinic generated signatures as booleans. --- Modules/cjkcodecs/clinic/multibytecodec.c.h | 6 +++--- Modules/cjkcodecs/multibytecodec.c | 8 ++++---- Modules/clinic/pyexpat.c.h | 12 ++++++------ Modules/pyexpat.c | 8 ++++---- 4 files changed, 17 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/cjkcodecs/clinic/multibytecodec.c.h b/Modules/cjkcodecs/clinic/multibytecodec.c.h index 1985147c43..8a47ff88a6 100644 --- a/Modules/cjkcodecs/clinic/multibytecodec.c.h +++ b/Modules/cjkcodecs/clinic/multibytecodec.c.h @@ -79,7 +79,7 @@ exit: } PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalEncoder_encode__doc__, -"encode($self, /, input, final=0)\n" +"encode($self, /, input, final=False)\n" "--\n" "\n"); @@ -126,7 +126,7 @@ _multibytecodec_MultibyteIncrementalEncoder_reset(MultibyteIncrementalEncoderObj } PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalDecoder_decode__doc__, -"decode($self, /, input, final=0)\n" +"decode($self, /, input, final=False)\n" "--\n" "\n"); @@ -317,4 +317,4 @@ PyDoc_STRVAR(_multibytecodec___create_codec__doc__, #define _MULTIBYTECODEC___CREATE_CODEC_METHODDEF \ {"__create_codec", (PyCFunction)_multibytecodec___create_codec, METH_O, _multibytecodec___create_codec__doc__}, -/*[clinic end generated code: output=c104f5fd548c1ac5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=eebb21e18c3043d1 input=a9049054013a1b77]*/ diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index c4dff412ef..c0515141c9 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -884,14 +884,14 @@ decoder_feed_buffer(MultibyteStatefulDecoderContext *ctx, _multibytecodec.MultibyteIncrementalEncoder.encode input: object - final: int = 0 + final: int(c_default="0") = False [clinic start generated code]*/ static PyObject * _multibytecodec_MultibyteIncrementalEncoder_encode_impl(MultibyteIncrementalEncoderObject *self, PyObject *input, int final) -/*[clinic end generated code: output=123361b6c505e2c1 input=456b76d73e464661]*/ +/*[clinic end generated code: output=123361b6c505e2c1 input=a345c688fa664f92]*/ { return encoder_encode_stateful(STATEFUL_ECTX(self), input, final); } @@ -1041,14 +1041,14 @@ static PyTypeObject MultibyteIncrementalEncoder_Type = { _multibytecodec.MultibyteIncrementalDecoder.decode input: Py_buffer - final: int = 0 + final: int(c_default="0") = False [clinic start generated code]*/ static PyObject * _multibytecodec_MultibyteIncrementalDecoder_decode_impl(MultibyteIncrementalDecoderObject *self, Py_buffer *input, int final) -/*[clinic end generated code: output=b9b9090e8a9ce2ba input=eb18c2f6e83589e1]*/ +/*[clinic end generated code: output=b9b9090e8a9ce2ba input=576631c61906d39d]*/ { MultibyteDecodeBuffer buf; char *data, *wdata = NULL; diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h index 72861bec3d..379c5db637 100644 --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -3,7 +3,7 @@ preserve [clinic start generated code]*/ PyDoc_STRVAR(pyexpat_xmlparser_Parse__doc__, -"Parse($self, data, isFinal=0, /)\n" +"Parse($self, data, isfinal=False, /)\n" "--\n" "\n" "Parse XML data.\n" @@ -15,19 +15,19 @@ PyDoc_STRVAR(pyexpat_xmlparser_Parse__doc__, static PyObject * pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, - int isFinal); + int isfinal); static PyObject * pyexpat_xmlparser_Parse(xmlparseobject *self, PyObject *args) { PyObject *return_value = NULL; PyObject *data; - int isFinal = 0; + int isfinal = 0; if (!PyArg_ParseTuple(args, "O|i:Parse", - &data, &isFinal)) + &data, &isfinal)) goto exit; - return_value = pyexpat_xmlparser_Parse_impl(self, data, isFinal); + return_value = pyexpat_xmlparser_Parse_impl(self, data, isfinal); exit: return return_value; @@ -281,4 +281,4 @@ exit: #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=958c0faa1b855fc7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=bf4d99c9702d8a6c input=a9049054013a1b77]*/ diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 7a8e96a2d9..a43887e04c 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -707,7 +707,7 @@ get_parse_result(xmlparseobject *self, int rv) pyexpat.xmlparser.Parse data: object - isFinal: int = 0 + isfinal: int(c_default="0") = False / Parse XML data. @@ -717,8 +717,8 @@ Parse XML data. static PyObject * pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, - int isFinal) -/*[clinic end generated code: output=37e105d55645b0f2 input=e37b81b8948ca7e0]*/ + int isfinal) +/*[clinic end generated code: output=f4db843dd1f4ed4b input=199d9e8e92ebbb4b]*/ { const char *s; Py_ssize_t slen; @@ -748,7 +748,7 @@ pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, slen -= MAX_CHUNK_SIZE; } assert(MAX_CHUNK_SIZE < INT_MAX && slen < INT_MAX); - rc = XML_Parse(self->itself, s, (int)slen, isFinal); + rc = XML_Parse(self->itself, s, (int)slen, isfinal); done: if (view.buf != NULL) -- cgit v1.2.1 From ebca10bccbf59478578bb008da8276e878ebf415 Mon Sep 17 00:00:00 2001 From: Tal Einat Date: Sun, 31 May 2015 22:05:00 +0300 Subject: Issue #19543: Implementation of isclose as per PEP 485 For details, see: PEP 0485 -- A Function for testing approximate equality Functions added: math.isclose() and cmath.isclose(). Original code by Chris Barker. Patch by Tal Einat. --- Modules/clinic/cmathmodule.c.h | 53 +++++++++++++++++++++++++++- Modules/cmathmodule.c | 68 ++++++++++++++++++++++++++++++++++++ Modules/mathmodule.c | 79 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 199 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h index e8fa6cb061..7d61649783 100644 --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -806,4 +806,55 @@ cmath_isinf(PyModuleDef *module, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=274f59792cf4f418 input=a9049054013a1b77]*/ + +PyDoc_STRVAR(cmath_isclose__doc__, +"isclose($module, /, a, b, *, rel_tol=1e-09, abs_tol=0.0)\n" +"--\n" +"\n" +"Determine whether two complex numbers are close in value.\n" +"\n" +" rel_tol\n" +" maximum difference for being considered \"close\", relative to the\n" +" magnitude of the input values\n" +" abs_tol\n" +" maximum difference for being considered \"close\", regardless of the\n" +" magnitude of the input values\n" +"\n" +"Return True if a is close in value to b, and False otherwise.\n" +"\n" +"For the values to be considered close, the difference between them must be\n" +"smaller than at least one of the tolerances.\n" +"\n" +"-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, NaN is\n" +"not close to anything, even itself. inf and -inf are only close to themselves."); + +#define CMATH_ISCLOSE_METHODDEF \ + {"isclose", (PyCFunction)cmath_isclose, METH_VARARGS|METH_KEYWORDS, cmath_isclose__doc__}, + +static int +cmath_isclose_impl(PyModuleDef *module, Py_complex a, Py_complex b, + double rel_tol, double abs_tol); + +static PyObject * +cmath_isclose(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL}; + Py_complex a; + Py_complex b; + double rel_tol = 1e-09; + double abs_tol = 0.0; + int _return_value; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "DD|$dd:isclose", _keywords, + &a, &b, &rel_tol, &abs_tol)) + goto exit; + _return_value = cmath_isclose_impl(module, a, b, rel_tol, abs_tol); + if ((_return_value == -1) && PyErr_Occurred()) + goto exit; + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; +} +/*[clinic end generated code: output=229e9c48c9d27362 input=a9049054013a1b77]*/ diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 921eaaa88a..d12e4c50cd 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -1114,6 +1114,73 @@ cmath_isinf_impl(PyModuleDef *module, Py_complex z) Py_IS_INFINITY(z.imag)); } +/*[clinic input] +cmath.isclose -> bool + + a: Py_complex + b: Py_complex + * + rel_tol: double = 1e-09 + maximum difference for being considered "close", relative to the + magnitude of the input values + abs_tol: double = 0.0 + maximum difference for being considered "close", regardless of the + magnitude of the input values + +Determine whether two complex numbers are close in value. + +Return True if a is close in value to b, and False otherwise. + +For the values to be considered close, the difference between them must be +smaller than at least one of the tolerances. + +-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, NaN is +not close to anything, even itself. inf and -inf are only close to themselves. +[clinic start generated code]*/ + +static int +cmath_isclose_impl(PyModuleDef *module, Py_complex a, Py_complex b, + double rel_tol, double abs_tol) +/*[clinic end generated code: output=da0c535fb54e2310 input=df9636d7de1d4ac3]*/ +{ + double diff; + + /* sanity check on the inputs */ + if (rel_tol < 0.0 || abs_tol < 0.0 ) { + PyErr_SetString(PyExc_ValueError, + "tolerances must be non-negative"); + return -1; + } + + if ( (a.real == b.real) && (a.imag == b.imag) ) { + /* short circuit exact equality -- needed to catch two infinities of + the same sign. And perhaps speeds things up a bit sometimes. + */ + return 1; + } + + /* This catches the case of two infinities of opposite sign, or + one infinity and one finite number. Two infinities of opposite + sign would otherwise have an infinite relative tolerance. + Two infinities of the same sign are caught by the equality check + above. + */ + + if (Py_IS_INFINITY(a.real) || Py_IS_INFINITY(a.imag) || + Py_IS_INFINITY(b.real) || Py_IS_INFINITY(b.imag)) { + return 0; + } + + /* now do the regular computation + this is essentially the "weak" test from the Boost library + */ + + diff = _Py_c_abs(_Py_c_diff(a, b)); + + return (((diff <= rel_tol * _Py_c_abs(b)) || + (diff <= rel_tol * _Py_c_abs(a))) || + (diff <= abs_tol)); +} PyDoc_STRVAR(module_doc, "This module is always available. It provides access to mathematical\n" @@ -1129,6 +1196,7 @@ static PyMethodDef cmath_methods[] = { CMATH_COS_METHODDEF CMATH_COSH_METHODDEF CMATH_EXP_METHODDEF + CMATH_ISCLOSE_METHODDEF CMATH_ISFINITE_METHODDEF CMATH_ISINF_METHODDEF CMATH_ISNAN_METHODDEF diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index a65de474bc..9359eb2b3a 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -1990,6 +1990,83 @@ PyDoc_STRVAR(math_isinf_doc, "isinf(x) -> bool\n\n\ Return True if x is a positive or negative infinity, and False otherwise."); +static PyObject * +math_isclose(PyObject *self, PyObject *args, PyObject *kwargs) +{ + double a, b; + double rel_tol = 1e-9; + double abs_tol = 0.0; + double diff = 0.0; + long result = 0; + + static char *keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL}; + + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "dd|$dd:isclose", + keywords, + &a, &b, &rel_tol, &abs_tol + )) + return NULL; + + /* sanity check on the inputs */ + if (rel_tol < 0.0 || abs_tol < 0.0 ) { + PyErr_SetString(PyExc_ValueError, + "tolerances must be non-negative"); + return NULL; + } + + if ( a == b ) { + /* short circuit exact equality -- needed to catch two infinities of + the same sign. And perhaps speeds things up a bit sometimes. + */ + Py_RETURN_TRUE; + } + + /* This catches the case of two infinities of opposite sign, or + one infinity and one finite number. Two infinities of opposite + sign would otherwise have an infinite relative tolerance. + Two infinities of the same sign are caught by the equality check + above. + */ + + if (Py_IS_INFINITY(a) || Py_IS_INFINITY(b)) { + Py_RETURN_FALSE; + } + + /* now do the regular computation + this is essentially the "weak" test from the Boost library + */ + + diff = fabs(b - a); + + result = (((diff <= fabs(rel_tol * b)) || + (diff <= fabs(rel_tol * a))) || + (diff <= abs_tol)); + + return PyBool_FromLong(result); +} + +PyDoc_STRVAR(math_isclose_doc, +"is_close(a, b, *, rel_tol=1e-09, abs_tol=0.0) -> bool\n" +"\n" +"Determine whether two floating point numbers are close in value.\n" +"\n" +" rel_tol\n" +" maximum difference for being considered \"close\", relative to the\n" +" magnitude of the input values\n" +" abs_tol\n" +" maximum difference for being considered \"close\", regardless of the\n" +" magnitude of the input values\n" +"\n" +"Return True if a is close in value to b, and False otherwise.\n" +"\n" +"For the values to be considered close, the difference between them\n" +"must be smaller than at least one of the tolerances.\n" +"\n" +"-inf, inf and NaN behave similarly to the IEEE 754 Standard. That\n" +"is, NaN is not close to anything, even itself. inf and -inf are\n" +"only close to themselves."); + static PyMethodDef math_methods[] = { {"acos", math_acos, METH_O, math_acos_doc}, {"acosh", math_acosh, METH_O, math_acosh_doc}, @@ -2016,6 +2093,8 @@ static PyMethodDef math_methods[] = { {"gamma", math_gamma, METH_O, math_gamma_doc}, {"gcd", math_gcd, METH_VARARGS, math_gcd_doc}, {"hypot", math_hypot, METH_VARARGS, math_hypot_doc}, + {"isclose", (PyCFunction) math_isclose, METH_VARARGS | METH_KEYWORDS, + math_isclose_doc}, {"isfinite", math_isfinite, METH_O, math_isfinite_doc}, {"isinf", math_isinf, METH_O, math_isinf_doc}, {"isnan", math_isnan, METH_O, math_isnan_doc}, -- cgit v1.2.1 From ebfd79103b92f2324772ae94c421ace463905b6b Mon Sep 17 00:00:00 2001 From: Nick Coghlan Date: Thu, 4 Jun 2015 21:52:57 +1000 Subject: Issue #24373: Eliminate PEP 489 test refleaks _testmultiphase and xxlimited now use tp_traverse and tp_finalize to avoid reference leaks encountered when combining tp_dealloc with PyType_FromSpec (see issue #16690 for details) --- Modules/_testmultiphase.c | 20 ++++++++++++++------ Modules/xxlimited.c | 26 ++++++++++++++++++++------ 2 files changed, 34 insertions(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_testmultiphase.c b/Modules/_testmultiphase.c index 7b98be2b8e..2919687e11 100644 --- a/Modules/_testmultiphase.c +++ b/Modules/_testmultiphase.c @@ -12,11 +12,18 @@ typedef struct { /* Example methods */ -static void -Example_dealloc(ExampleObject *self) +static int +Example_traverse(ExampleObject *self, visitproc visit, void *arg) { - Py_XDECREF(self->x_attr); - PyObject_Del(self); + Py_VISIT(self->x_attr); + return 0; +} + +static int +Example_finalize(ExampleObject *self) +{ + Py_CLEAR(self->x_attr); + return 0; } static PyObject * @@ -74,7 +81,8 @@ Example_setattr(ExampleObject *self, char *name, PyObject *v) static PyType_Slot Example_Type_slots[] = { {Py_tp_doc, "The Example type"}, - {Py_tp_dealloc, Example_dealloc}, + {Py_tp_finalize, Example_finalize}, + {Py_tp_traverse, Example_traverse}, {Py_tp_getattro, Example_getattro}, {Py_tp_setattr, Example_setattr}, {Py_tp_methods, Example_methods}, @@ -85,7 +93,7 @@ static PyType_Spec Example_Type_spec = { "_testimportexec.Example", sizeof(ExampleObject), 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, Example_Type_slots }; diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c index 604456bffe..40c176063d 100644 --- a/Modules/xxlimited.c +++ b/Modules/xxlimited.c @@ -40,11 +40,18 @@ newXxoObject(PyObject *arg) /* Xxo methods */ -static void -Xxo_dealloc(XxoObject *self) +static int +Xxo_traverse(XxoObject *self, visitproc visit, void *arg) +{ + Py_VISIT(self->x_attr); + return 0; +} + +static int +Xxo_finalize(XxoObject *self) { - Py_XDECREF(self->x_attr); - ((freefunc)PyType_GetSlot(Py_TYPE(self), Py_tp_free))(self); + Py_CLEAR(self->x_attr); + return 0; } static PyObject * @@ -102,7 +109,8 @@ Xxo_setattr(XxoObject *self, char *name, PyObject *v) static PyType_Slot Xxo_Type_slots[] = { {Py_tp_doc, "The Xxo type"}, - {Py_tp_dealloc, Xxo_dealloc}, + {Py_tp_traverse, Xxo_traverse}, + {Py_tp_finalize, Xxo_finalize}, {Py_tp_getattro, Xxo_getattro}, {Py_tp_setattr, Xxo_setattr}, {Py_tp_methods, Xxo_methods}, @@ -113,7 +121,7 @@ static PyType_Spec Xxo_Type_spec = { "xxlimited.Xxo", sizeof(XxoObject), 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, Xxo_Type_slots }; @@ -247,6 +255,12 @@ xx_modexec(PyObject *m) Py_INCREF(ErrorObject); PyModule_AddObject(m, "error", ErrorObject); + /* Add Xxo */ + o = PyType_FromSpec(&Xxo_Type_spec); + if (o == NULL) + goto fail; + PyModule_AddObject(m, "Xxo", o); + /* Add Str */ o = PyType_FromSpec(&Str_Type_spec); if (o == NULL) -- cgit v1.2.1 From d2f9a0068f43cbebf59e9fb6a650d203e6bc03bf Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 8 Jun 2015 11:19:24 +0300 Subject: Issue #14373: C implementation of functools.lru_cache() now can be used with methods. --- Modules/_functoolsmodule.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 99b50b0e9d..95b5b13fbe 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -1003,6 +1003,16 @@ lru_cache_call(lru_cache_object *self, PyObject *args, PyObject *kwds) return self->wrapper(self, args, kwds); } +static PyObject * +lru_cache_descr_get(PyObject *self, PyObject *obj, PyObject *type) +{ + if (obj == Py_None || obj == NULL) { + Py_INCREF(self); + return self; + } + return PyMethod_New(self, obj); +} + static PyObject * lru_cache_cache_info(lru_cache_object *self, PyObject *unused) { @@ -1115,7 +1125,7 @@ static PyTypeObject lru_cache_type = { lru_cache_getsetlist, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ - 0, /* tp_descr_get */ + lru_cache_descr_get, /* tp_descr_get */ 0, /* tp_descr_set */ offsetof(lru_cache_object, dict), /* tp_dictoffset */ 0, /* tp_init */ -- cgit v1.2.1 From 22341f49d37941bb47451f990566f9f7a74eaeec Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 21 Jun 2015 14:06:55 +0300 Subject: Issue #24426: Fast searching optimization in regular expressions now works for patterns that starts with capturing groups. Fast searching optimization now can't be disabled at compile time. --- Modules/_sre.c | 3 --- Modules/sre_lib.h | 53 +++++++++++++++++++++++++++-------------------------- 2 files changed, 27 insertions(+), 29 deletions(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 4016a4533e..1d90281a58 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -62,9 +62,6 @@ static char copyright[] = /* -------------------------------------------------------------------- */ /* optional features */ -/* enables fast searching */ -#define USE_FAST_SEARCH - /* enables copy/deepcopy handling (work in progress) */ #undef USE_BUILTIN_COPY diff --git a/Modules/sre_lib.h b/Modules/sre_lib.h index 463a908b00..422f168409 100644 --- a/Modules/sre_lib.h +++ b/Modules/sre_lib.h @@ -1248,7 +1248,32 @@ SRE(search)(SRE_STATE* state, SRE_CODE* pattern) prefix, prefix_len, prefix_skip)); TRACE(("charset = %p\n", charset)); -#if defined(USE_FAST_SEARCH) + if (prefix_len == 1) { + /* pattern starts with a literal character */ + SRE_CHAR c = (SRE_CHAR) prefix[0]; +#if SIZEOF_SRE_CHAR < 4 + if ((SRE_CODE) c != prefix[0]) + return 0; /* literal can't match: doesn't fit in char width */ +#endif + end = (SRE_CHAR *)state->end; + while (ptr < end) { + while (*ptr != c) { + if (++ptr >= end) + return 0; + } + TRACE(("|%p|%p|SEARCH LITERAL\n", pattern, ptr)); + state->start = ptr; + state->ptr = ptr + prefix_skip; + if (flags & SRE_INFO_LITERAL) + return 1; /* we got all of it */ + status = SRE(match)(state, pattern + 2*prefix_skip, 0); + if (status != 0) + return status; + ++ptr; + } + return 0; + } + if (prefix_len > 1) { /* pattern starts with a known prefix. use the overlap table to skip forward as fast as we possibly can */ @@ -1297,32 +1322,8 @@ SRE(search)(SRE_STATE* state, SRE_CODE* pattern) } return 0; } -#endif - if (pattern[0] == SRE_OP_LITERAL) { - /* pattern starts with a literal character. this is used - for short prefixes, and if fast search is disabled */ - SRE_CHAR c = (SRE_CHAR) pattern[1]; -#if SIZEOF_SRE_CHAR < 4 - if ((SRE_CODE) c != pattern[1]) - return 0; /* literal can't match: doesn't fit in char width */ -#endif - end = (SRE_CHAR *)state->end; - while (ptr < end) { - while (*ptr != c) { - if (++ptr >= end) - return 0; - } - TRACE(("|%p|%p|SEARCH LITERAL\n", pattern, ptr)); - state->start = ptr; - state->ptr = ++ptr; - if (flags & SRE_INFO_LITERAL) - return 1; /* we got all of it */ - status = SRE(match)(state, pattern + 2, 0); - if (status != 0) - break; - } - } else if (charset) { + if (charset) { /* pattern starts with a character from a known set */ end = (SRE_CHAR *)state->end; for (;;) { -- cgit v1.2.1 From 8c761b8e8448cf386f9976083013a83678da775a Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sat, 27 Jun 2015 15:01:51 -0500 Subject: prevent integer overflow in escape_unicode (closes #24522) --- Modules/_json.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_json.c b/Modules/_json.c index e4478ef420..8000f915f3 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -249,17 +249,23 @@ escape_unicode(PyObject *pystr) /* Compute the output size */ for (i = 0, output_size = 2; i < input_chars; i++) { Py_UCS4 c = PyUnicode_READ(kind, input, i); + Py_ssize_t d; switch (c) { case '\\': case '"': case '\b': case '\f': case '\n': case '\r': case '\t': - output_size += 2; + d = 2; break; default: if (c <= 0x1f) - output_size += 6; + d = 6; else - output_size++; + d = 1; + } + if (output_size > PY_SSIZE_T_MAX - d) { + PyErr_SetString(PyExc_OverflowError, "string is too long to escape"); + return NULL; } + output_size += d; } rval = PyUnicode_New(output_size, maxchar); -- cgit v1.2.1 From fbff4549e00af01c17c03daa566002e560113fce Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sat, 27 Jun 2015 15:45:56 -0500 Subject: upgrade to Unicode 8.0.0 --- Modules/unicodedata.c | 5 +- Modules/unicodedata_db.h | 2700 +-- Modules/unicodename_db.h | 42564 +++++++++++++++++++++++---------------------- 3 files changed, 23416 insertions(+), 21853 deletions(-) (limited to 'Modules') diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index a6e2dbc34c..fe4e90822a 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -921,10 +921,11 @@ is_unified_ideograph(Py_UCS4 code) { return (0x3400 <= code && code <= 0x4DB5) || /* CJK Ideograph Extension A */ - (0x4E00 <= code && code <= 0x9FCC) || /* CJK Ideograph */ + (0x4E00 <= code && code <= 0x9FD5) || /* CJK Ideograph */ (0x20000 <= code && code <= 0x2A6D6) || /* CJK Ideograph Extension B */ (0x2A700 <= code && code <= 0x2B734) || /* CJK Ideograph Extension C */ - (0x2B740 <= code && code <= 0x2B81D); /* CJK Ideograph Extension D */ + (0x2B740 <= code && code <= 0x2B81D) || /* CJK Ideograph Extension D */ + (0x2B820 <= code && code <= 0x2CEA1); /* CJK Ideograph Extension E */ } /* macros used to determine if the given code point is in the PUA range that diff --git a/Modules/unicodedata_db.h b/Modules/unicodedata_db.h index a79132fd1e..89d8768dd9 100644 --- a/Modules/unicodedata_db.h +++ b/Modules/unicodedata_db.h @@ -1,6 +1,6 @@ /* this file was generated by Tools/unicode/makeunicodedata.py 3.2 */ -#define UNIDATA_VERSION "7.0.0" +#define UNIDATA_VERSION "8.0.0" /* a list of unique database records */ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {0, 0, 0, 0, 0, 0}, @@ -326,6 +326,8 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {9, 0, 9, 0, 5, 0}, {9, 0, 4, 0, 5, 0}, {30, 0, 4, 0, 5, 0}, + {1, 0, 4, 0, 5, 0}, + {2, 0, 4, 0, 5, 0}, {9, 0, 12, 0, 5, 0}, {30, 0, 1, 0, 5, 170}, {5, 216, 1, 0, 5, 0}, @@ -727,21 +729,22 @@ static unsigned char index1[] = { 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 123, 124, 125, 126, 127, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 138, 41, 41, 145, 138, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 138, 138, 138, 155, 138, 138, 138, 156, - 157, 158, 159, 160, 161, 162, 138, 138, 163, 138, 164, 165, 166, 138, - 138, 138, 167, 138, 138, 138, 168, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 169, 170, 138, 138, 138, 138, + 149, 150, 151, 152, 153, 154, 155, 138, 138, 156, 138, 138, 138, 157, + 158, 159, 160, 161, 162, 163, 138, 138, 164, 138, 165, 166, 167, 168, + 138, 138, 169, 138, 138, 138, 170, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 171, 172, 41, 173, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 41, 171, 138, 138, + 138, 138, 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 41, 174, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 41, 41, 41, 41, 175, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 41, 41, 41, 41, 176, 177, 178, 179, 138, 138, 138, 138, 138, + 138, 180, 181, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 41, 41, 41, 41, 172, 173, 174, 175, 138, 138, 138, 138, - 138, 138, 176, 177, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, @@ -749,19 +752,18 @@ static unsigned char index1[] = { 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 182, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 178, 138, 138, 138, 138, 138, 138, 138, + 138, 183, 184, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 179, 180, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 78, 185, + 186, 187, 188, 138, 189, 138, 190, 191, 192, 193, 194, 195, 196, 197, 78, + 78, 78, 78, 198, 199, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 78, - 181, 182, 183, 184, 138, 185, 138, 186, 187, 188, 189, 190, 191, 192, - 193, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 194, 195, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 196, 197, 138, 138, 198, 199, 200, 201, 202, 138, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 101, 101, 101, + 138, 138, 200, 201, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 202, 203, 138, 138, 204, 205, 206, 207, 208, 138, 209, 210, 209, 209, + 211, 212, 209, 213, 214, 215, 216, 217, 218, 219, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, @@ -785,19 +787,19 @@ static unsigned char index1[] = { 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 215, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 220, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 216, - 101, 217, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 221, 101, 222, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 223, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 122, 122, 122, 122, 218, 138, 138, 138, 138, 138, 138, + 122, 122, 122, 122, 224, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, @@ -1200,7 +1202,7 @@ static unsigned char index1[] = { 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 219, 138, 220, 221, 138, + 138, 138, 138, 138, 138, 138, 225, 138, 226, 227, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, @@ -1237,7 +1239,6 @@ static unsigned char index1[] = { 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, @@ -1273,7 +1274,8 @@ static unsigned char index1[] = { 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 222, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 228, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, @@ -1310,7 +1312,7 @@ static unsigned char index1[] = { 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 222, + 121, 228, }; static unsigned short index2[] = { @@ -1442,169 +1444,171 @@ static unsigned short index2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 86, 81, 81, 86, 81, 81, - 81, 86, 86, 86, 121, 122, 123, 81, 81, 81, 86, 81, 81, 86, 86, 81, 81, - 81, 81, 81, 135, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, 48, 48, 48, 140, - 48, 48, 140, 48, 48, 48, 48, 48, 135, 139, 141, 48, 139, 139, 139, 135, - 135, 135, 135, 135, 135, 135, 135, 139, 139, 139, 139, 142, 139, 139, 48, - 81, 86, 81, 81, 135, 135, 135, 143, 143, 143, 143, 143, 143, 143, 143, - 48, 48, 135, 135, 83, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 83, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, - 48, 0, 0, 145, 48, 146, 139, 139, 135, 135, 135, 135, 0, 0, 139, 139, 0, - 0, 147, 147, 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 143, 143, - 0, 143, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 48, 48, 85, 85, 148, 148, 148, 148, 148, 148, 80, 85, 0, 0, 0, - 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 0, 0, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 143, 0, 48, 143, 0, - 48, 48, 0, 0, 145, 0, 139, 139, 139, 135, 135, 0, 0, 0, 0, 135, 135, 0, - 0, 135, 135, 142, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 143, 143, 143, 48, - 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 135, 135, 48, 48, 48, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 135, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, - 48, 0, 0, 145, 48, 139, 139, 139, 135, 135, 135, 135, 135, 0, 135, 135, - 139, 0, 139, 139, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 83, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 139, - 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 0, - 0, 145, 48, 146, 135, 139, 135, 135, 135, 135, 0, 0, 139, 147, 0, 0, 147, - 147, 142, 0, 0, 0, 0, 0, 0, 0, 0, 149, 146, 0, 0, 0, 0, 143, 143, 0, 48, - 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 80, 48, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 48, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 0, 48, 48, 140, 48, - 0, 0, 0, 48, 48, 0, 48, 0, 48, 48, 0, 0, 0, 48, 48, 0, 0, 0, 48, 48, 48, - 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 146, - 139, 135, 139, 139, 0, 0, 0, 139, 139, 139, 0, 147, 147, 147, 142, 0, 0, - 48, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, 148, 26, 26, 26, - 26, 26, 26, 85, 26, 0, 0, 0, 0, 0, 135, 139, 139, 139, 0, 48, 48, 48, 48, - 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 135, 135, - 135, 139, 139, 139, 139, 0, 135, 135, 150, 0, 135, 135, 135, 142, 0, 0, - 0, 0, 0, 0, 0, 151, 152, 0, 48, 48, 0, 0, 0, 0, 0, 0, 48, 48, 135, 135, - 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, - 0, 0, 153, 153, 153, 153, 153, 153, 153, 80, 0, 135, 139, 139, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 81, 81, 86, 81, 81, 86, 81, + 81, 81, 86, 86, 86, 121, 122, 123, 81, 81, 81, 86, 81, 81, 86, 86, 81, + 81, 81, 81, 81, 135, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, 48, 48, 48, + 140, 48, 48, 140, 48, 48, 48, 48, 48, 135, 139, 141, 48, 139, 139, 139, + 135, 135, 135, 135, 135, 135, 135, 135, 139, 139, 139, 139, 142, 139, + 139, 48, 81, 86, 81, 81, 135, 135, 135, 143, 143, 143, 143, 143, 143, + 143, 143, 48, 48, 135, 135, 83, 83, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 83, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, + 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, + 48, 48, 48, 48, 0, 0, 145, 48, 146, 139, 139, 135, 135, 135, 135, 0, 0, + 139, 139, 0, 0, 147, 147, 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, + 0, 143, 143, 0, 143, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 48, 48, 85, 85, 148, 148, 148, 148, 148, 148, + 80, 85, 0, 0, 0, 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, + 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, + 143, 0, 48, 143, 0, 48, 48, 0, 0, 145, 0, 139, 139, 139, 135, 135, 0, 0, + 0, 0, 135, 135, 0, 0, 135, 135, 142, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, + 143, 143, 143, 48, 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 135, 135, 48, 48, 48, 135, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, + 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, + 48, 48, 48, 48, 48, 0, 0, 145, 48, 139, 139, 139, 135, 135, 135, 135, + 135, 0, 135, 135, 139, 0, 139, 139, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 83, 85, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, + 0, 0, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, + 48, 48, 48, 0, 0, 145, 48, 146, 135, 139, 135, 135, 135, 135, 0, 0, 139, + 147, 0, 0, 147, 147, 142, 0, 0, 0, 0, 0, 0, 0, 0, 149, 146, 0, 0, 0, 0, + 143, 143, 0, 48, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 80, 48, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 135, 48, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, + 0, 48, 48, 140, 48, 0, 0, 0, 48, 48, 0, 48, 0, 48, 48, 0, 0, 0, 48, 48, + 0, 0, 0, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 0, 0, 0, 146, 139, 135, 139, 139, 0, 0, 0, 139, 139, 139, 0, 147, + 147, 147, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, + 148, 148, 26, 26, 26, 26, 26, 26, 85, 26, 0, 0, 0, 0, 0, 135, 139, 139, + 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 48, 135, 135, 135, 139, 139, 139, 139, 0, 135, 135, 150, 0, 135, + 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 151, 152, 0, 48, 48, 48, 0, 0, 0, 0, + 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 0, 0, 0, 0, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, 80, 0, + 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, + 48, 48, 0, 0, 145, 48, 139, 154, 147, 139, 146, 139, 139, 0, 154, 147, + 147, 0, 147, 147, 135, 142, 0, 0, 0, 0, 0, 0, 0, 146, 146, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 0, 48, 146, 139, 139, 135, 135, 135, 135, 0, 139, 139, + 139, 0, 147, 147, 147, 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 48, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 148, 148, 148, 148, 148, 148, 0, 0, 0, 80, 48, 48, 48, 48, + 48, 48, 0, 0, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 0, 145, 48, - 139, 154, 147, 139, 146, 139, 139, 0, 154, 147, 147, 0, 147, 147, 135, - 142, 0, 0, 0, 0, 0, 0, 0, 146, 146, 0, 0, 0, 0, 0, 0, 0, 48, 0, 48, 48, - 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 48, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 139, 139, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, - 146, 139, 139, 135, 135, 135, 135, 0, 139, 139, 139, 0, 147, 147, 147, - 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, - 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, - 148, 148, 148, 148, 148, 0, 0, 0, 80, 48, 48, 48, 48, 48, 48, 0, 0, 139, - 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 155, 0, 0, 0, - 0, 146, 139, 139, 135, 135, 135, 0, 135, 0, 139, 139, 147, 139, 147, 147, - 147, 146, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 0, 0, 139, 139, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 48, 156, 135, 135, 135, 135, - 157, 157, 142, 0, 0, 0, 0, 85, 48, 48, 48, 48, 48, 48, 53, 135, 158, 158, - 158, 158, 135, 135, 135, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 48, 0, 0, - 48, 48, 0, 48, 0, 0, 48, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, - 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 0, 48, 0, 0, 48, 48, 0, 48, 48, 48, - 48, 135, 48, 156, 135, 135, 135, 135, 159, 159, 0, 135, 135, 48, 0, 0, - 48, 48, 48, 48, 48, 0, 53, 0, 160, 160, 160, 160, 135, 135, 0, 0, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 156, 156, 48, 48, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 48, 80, 80, 80, 83, 83, 83, 83, 83, 83, 83, 83, 161, - 83, 83, 83, 83, 83, 83, 80, 83, 80, 80, 80, 86, 86, 80, 80, 80, 80, 80, - 80, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 80, 86, 80, 86, 80, 162, 163, 164, 163, - 164, 139, 139, 48, 48, 48, 143, 48, 48, 48, 48, 0, 48, 48, 48, 48, 143, - 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 143, 48, 48, 48, 0, 0, 0, 0, 165, - 166, 167, 168, 167, 167, 169, 167, 169, 166, 166, 166, 166, 135, 139, - 166, 167, 81, 81, 142, 83, 81, 81, 48, 48, 48, 48, 48, 135, 135, 135, - 135, 135, 135, 167, 135, 135, 135, 135, 0, 135, 135, 135, 135, 167, 135, - 135, 135, 135, 167, 135, 135, 135, 135, 167, 135, 135, 135, 135, 167, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 167, 135, - 135, 135, 0, 80, 80, 80, 80, 80, 80, 80, 80, 86, 80, 80, 80, 80, 80, 80, - 0, 80, 80, 83, 83, 83, 83, 83, 80, 80, 80, 80, 83, 83, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 155, 0, 0, 0, 0, 146, 139, 139, 135, 135, 135, 0, 135, 0, 139, 139, + 147, 139, 147, 147, 147, 146, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 0, 0, 139, 139, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 48, 156, + 135, 135, 135, 135, 157, 157, 142, 0, 0, 0, 0, 85, 48, 48, 48, 48, 48, + 48, 53, 135, 158, 158, 158, 158, 135, 135, 135, 83, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 48, 48, 0, 48, 0, 0, 48, 48, 0, 48, 0, 0, 48, 0, 0, 0, 0, 0, 0, 48, + 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 0, 48, + 0, 0, 48, 48, 0, 48, 48, 48, 48, 135, 48, 156, 135, 135, 135, 135, 159, + 159, 0, 135, 135, 48, 0, 0, 48, 48, 48, 48, 48, 0, 53, 0, 160, 160, 160, + 160, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, + 0, 156, 156, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 80, 80, 80, 83, 83, 83, + 83, 83, 83, 83, 83, 161, 83, 83, 83, 83, 83, 83, 80, 83, 80, 80, 80, 86, + 86, 80, 80, 80, 80, 80, 80, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 80, 86, 80, 86, + 80, 162, 163, 164, 163, 164, 139, 139, 48, 48, 48, 143, 48, 48, 48, 48, + 0, 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, + 48, 48, 143, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 143, 48, 48, + 48, 0, 0, 0, 0, 165, 166, 167, 168, 167, 167, 169, 167, 169, 166, 166, + 166, 166, 135, 139, 166, 167, 81, 81, 142, 83, 81, 81, 48, 48, 48, 48, + 48, 135, 135, 135, 135, 135, 135, 167, 135, 135, 135, 135, 0, 135, 135, + 135, 135, 167, 135, 135, 135, 135, 167, 135, 135, 135, 135, 167, 135, + 135, 135, 135, 167, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 167, 135, 135, 135, 0, 80, 80, 80, 80, 80, 80, 80, 80, 86, 80, + 80, 80, 80, 80, 80, 0, 80, 80, 83, 83, 83, 83, 83, 80, 80, 80, 80, 83, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, 139, 139, 135, 149, 135, - 135, 139, 135, 135, 135, 135, 135, 145, 139, 142, 142, 139, 139, 135, - 135, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 83, 83, 83, - 83, 83, 83, 48, 48, 48, 48, 48, 48, 139, 139, 135, 135, 48, 48, 48, 48, - 135, 135, 135, 48, 139, 139, 139, 48, 48, 139, 139, 139, 139, 139, 139, - 139, 48, 48, 48, 135, 135, 135, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 135, 139, 139, 135, 135, 139, 139, 139, 139, 139, 139, - 86, 48, 139, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 139, 139, - 139, 135, 80, 80, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, 139, + 139, 135, 149, 135, 135, 139, 135, 135, 135, 135, 135, 145, 139, 142, + 142, 139, 139, 135, 135, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 83, 83, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 139, 139, 135, 135, + 48, 48, 48, 48, 135, 135, 135, 48, 139, 139, 139, 48, 48, 139, 139, 139, + 139, 139, 139, 139, 48, 48, 48, 135, 135, 135, 135, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 139, 135, 135, 139, 139, 139, + 139, 139, 139, 86, 48, 139, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 139, 139, 139, 135, 80, 80, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 0, 44, 0, 0, 0, 0, 0, 44, 0, 0, 48, 48, 48, 48, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 44, 0, 0, 0, 0, 0, 44, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 83, 51, 48, 48, 48, 170, 170, 170, 170, 170, 170, 170, 170, + 48, 48, 48, 48, 48, 48, 48, 83, 51, 48, 48, 48, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 48, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 48, 48, 48, 48, + 170, 170, 170, 170, 170, 170, 170, 48, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 171, 171, 171, 171, 171, 171, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 171, 171, 171, 171, 171, 171, 171, 171, 171, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, - 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, - 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, - 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, + 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, - 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 81, 81, - 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, - 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, + 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, + 81, 81, 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 47, 47, 47, 47, 47, 47, + 0, 0, 84, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, @@ -1623,73 +1627,71 @@ static unsigned short index2[] = { 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 172, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 163, 164, + 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 172, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 163, 164, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 83, 83, 83, 173, 173, 173, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 48, 48, 48, 48, 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 135, 135, 142, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 48, 48, 0, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, + 139, 135, 135, 135, 135, 135, 135, 135, 139, 139, 139, 139, 139, 139, + 139, 139, 135, 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 142, 135, 83, 83, 83, 53, 83, 83, 83, 85, 48, 81, 0, 0, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, + 138, 84, 138, 138, 138, 138, 135, 135, 135, 174, 0, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 83, 83, 83, 173, 173, 173, 48, 48, 48, 48, 48, 48, 48, 48, 0, - 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, - 48, 48, 48, 48, 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, - 142, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 0, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 139, 135, 135, - 135, 135, 135, 135, 135, 139, 139, 139, 139, 139, 139, 139, 139, 135, - 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, 135, 142, 135, 83, 83, - 83, 53, 83, 83, 83, 85, 48, 81, 0, 0, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 0, 0, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, 138, 84, 138, 138, - 138, 138, 135, 135, 135, 174, 0, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 88, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 88, 48, - 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 135, 135, 135, 139, 139, 139, 139, + 135, 135, 139, 139, 139, 0, 0, 0, 0, 139, 139, 135, 139, 139, 139, 139, + 139, 139, 87, 81, 86, 0, 0, 0, 0, 26, 0, 0, 0, 138, 138, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 0, 135, 135, 135, 139, 139, 139, 139, 135, 135, 139, 139, - 139, 0, 0, 0, 0, 139, 139, 135, 139, 139, 139, 139, 139, 139, 87, 81, 86, - 0, 0, 0, 0, 26, 0, 0, 0, 138, 138, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, - 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 0, 0, 0, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 48, 48, 48, 48, 48, 48, 48, 139, 139, - 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, - 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 48, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 148, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 81, 86, 139, 139, 135, 0, 0, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 81, 86, 139, 139, 135, 0, 0, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, 139, 135, - 135, 135, 135, 135, 135, 135, 0, 142, 139, 135, 139, 139, 135, 135, 135, - 135, 135, 135, 135, 135, 139, 139, 139, 139, 139, 139, 135, 135, 81, 81, - 81, 81, 81, 81, 81, 81, 0, 0, 86, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 53, 83, 83, 83, 83, - 83, 83, 0, 0, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86, 86, 81, 81, 86, 82, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, 139, + 135, 135, 135, 135, 135, 135, 135, 0, 142, 139, 135, 139, 139, 135, 135, + 135, 135, 135, 135, 135, 135, 139, 139, 139, 139, 139, 139, 135, 135, 81, + 81, 81, 81, 81, 81, 81, 81, 0, 0, 86, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 53, 83, 83, 83, + 83, 83, 83, 0, 0, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86, 86, 81, 81, 86, + 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 139, 48, 140, 48, 140, 48, 140, 48, 140, 48, 140, 48, 48, 48, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 146, 135, @@ -1773,211 +1775,211 @@ static unsigned short index2[] = { 34, 34, 34, 34, 214, 214, 214, 214, 214, 215, 215, 216, 217, 218, 0, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 85, 85, 85, 85, 85, 85, 85, 85, 220, 221, 85, 85, 23, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 81, 81, 176, 176, 81, 81, 81, 81, 176, 176, 176, 81, 81, 82, - 82, 82, 82, 81, 82, 82, 82, 176, 176, 81, 86, 81, 176, 176, 86, 86, 86, - 86, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 49, 223, - 26, 223, 222, 49, 26, 223, 35, 49, 49, 49, 35, 35, 49, 49, 49, 46, 26, - 49, 223, 26, 78, 49, 49, 49, 49, 49, 26, 26, 222, 223, 223, 26, 49, 26, - 224, 26, 49, 26, 184, 224, 49, 49, 225, 35, 49, 49, 44, 49, 35, 156, 156, - 156, 156, 35, 26, 222, 35, 35, 49, 49, 226, 78, 78, 78, 78, 49, 35, 35, - 35, 35, 26, 78, 26, 26, 47, 80, 227, 227, 227, 37, 37, 227, 227, 227, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 81, 81, 176, 176, 81, 81, 81, 81, 176, 176, 176, 81, 81, + 82, 82, 82, 82, 81, 82, 82, 82, 176, 176, 81, 86, 81, 176, 176, 86, 86, + 86, 86, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 49, + 223, 26, 223, 222, 49, 26, 223, 35, 49, 49, 49, 35, 35, 49, 49, 49, 46, + 26, 49, 223, 26, 78, 49, 49, 49, 49, 49, 26, 26, 222, 223, 223, 26, 49, + 26, 224, 26, 49, 26, 184, 224, 49, 49, 225, 35, 49, 49, 44, 49, 35, 156, + 156, 156, 156, 35, 26, 222, 35, 35, 49, 49, 226, 78, 78, 78, 78, 49, 35, + 35, 35, 35, 26, 78, 26, 26, 47, 80, 227, 227, 227, 37, 37, 227, 227, 227, 227, 227, 227, 37, 37, 37, 37, 227, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 173, 173, 173, 44, - 47, 173, 173, 173, 173, 37, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 30, 30, - 30, 30, 30, 230, 230, 26, 26, 26, 26, 78, 26, 26, 78, 26, 26, 78, 26, 26, - 26, 26, 26, 26, 26, 230, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, + 47, 173, 173, 173, 173, 37, 26, 26, 0, 0, 0, 0, 40, 40, 40, 40, 40, 30, + 30, 30, 30, 30, 230, 230, 26, 26, 26, 26, 78, 26, 26, 78, 26, 26, 78, 26, + 26, 26, 26, 26, 26, 26, 230, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 231, 230, 230, 26, 26, 40, 26, 40, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 40, 232, - 233, 233, 234, 78, 78, 40, 233, 234, 232, 233, 234, 232, 78, 40, 78, 233, - 235, 236, 78, 233, 232, 78, 78, 78, 233, 232, 232, 233, 40, 233, 233, - 232, 232, 40, 234, 40, 234, 40, 40, 40, 40, 233, 237, 226, 233, 226, 226, - 232, 232, 232, 40, 40, 40, 40, 78, 232, 78, 232, 233, 233, 232, 232, 232, - 234, 232, 232, 234, 232, 232, 234, 233, 234, 232, 232, 233, 78, 78, 78, - 78, 78, 233, 232, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 238, - 40, 234, 78, 233, 233, 233, 233, 232, 232, 233, 233, 78, 230, 238, 238, - 234, 234, 232, 232, 234, 234, 232, 232, 234, 234, 232, 232, 232, 232, - 232, 232, 234, 234, 233, 233, 234, 234, 233, 233, 234, 234, 232, 232, - 232, 78, 78, 232, 232, 232, 232, 78, 78, 40, 78, 78, 232, 40, 78, 78, 78, - 78, 78, 78, 78, 78, 232, 232, 78, 40, 232, 232, 232, 232, 232, 232, 234, - 234, 234, 234, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, - 78, 78, 232, 233, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, 232, 232, - 232, 78, 78, 232, 232, 78, 78, 78, 78, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 234, 234, 234, 234, 232, 232, 232, 232, 232, 232, 234, - 234, 234, 234, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 26, 26, 26, 26, 26, 26, 26, 26, 163, 164, - 163, 164, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 232, 232, 26, 26, 26, 26, 26, 26, 26, 239, 240, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 26, 231, 230, 230, 26, 26, 40, 26, 40, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 40, + 232, 233, 233, 234, 78, 78, 40, 233, 234, 232, 233, 234, 232, 78, 40, 78, + 233, 235, 236, 78, 233, 232, 78, 78, 78, 233, 232, 232, 233, 40, 233, + 233, 232, 232, 40, 234, 40, 234, 40, 40, 40, 40, 233, 237, 226, 233, 226, + 226, 232, 232, 232, 40, 40, 40, 40, 78, 232, 78, 232, 233, 233, 232, 232, + 232, 234, 232, 232, 234, 232, 232, 234, 233, 234, 232, 232, 233, 78, 78, + 78, 78, 78, 233, 232, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, + 238, 40, 234, 78, 233, 233, 233, 233, 232, 232, 233, 233, 78, 230, 238, + 238, 234, 234, 232, 232, 234, 234, 232, 232, 234, 234, 232, 232, 232, + 232, 232, 232, 234, 234, 233, 233, 234, 234, 233, 233, 234, 234, 232, + 232, 232, 78, 78, 232, 232, 232, 232, 78, 78, 40, 78, 78, 232, 40, 78, + 78, 78, 78, 78, 78, 78, 78, 232, 232, 78, 40, 232, 232, 232, 232, 232, + 232, 234, 234, 234, 234, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, + 78, 78, 78, 78, 232, 233, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, + 232, 232, 232, 78, 78, 232, 232, 78, 78, 78, 78, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 234, 234, 234, 234, 232, 232, 232, 232, 232, + 232, 234, 234, 234, 234, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 26, 26, 26, 26, 26, 26, 26, 26, + 163, 164, 163, 164, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 232, 232, 26, 26, 26, 26, 26, 26, 26, 239, + 240, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 26, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 26, 26, 26, - 26, 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 26, 78, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, + 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, - 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, + 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 241, 241, 241, 241, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 227, 242, 242, 242, 242, 242, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 30, 30, 30, + 241, 241, 241, 241, 241, 241, 227, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 26, 30, - 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, - 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 30, - 40, 26, 26, 26, 26, 30, 30, 26, 26, 30, 40, 26, 26, 26, 26, 30, 30, 30, - 26, 26, 30, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78, - 78, 26, 26, 26, 26, 26, 30, 30, 26, 26, 30, 26, 26, 26, 26, 30, 30, 26, - 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 30, 26, 30, 26, 26, 26, 26, + 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, + 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, + 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, + 26, 30, 40, 26, 26, 26, 26, 30, 30, 26, 26, 30, 40, 26, 26, 26, 26, 30, + 30, 30, 26, 26, 30, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, + 78, 78, 78, 26, 26, 26, 26, 26, 30, 30, 26, 26, 30, 26, 26, 26, 26, 30, + 30, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 30, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 30, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, 30, 26, 30, 30, 30, 30, - 26, 30, 30, 26, 40, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, 30, 26, 30, 30, + 30, 30, 26, 30, 30, 26, 40, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 26, 26, 26, 26, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, + 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, + 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 26, 26, 26, + 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, - 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 153, 153, 153, 153, + 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, + 163, 164, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 153, 153, 153, 153, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 232, 78, 78, 232, 232, 163, 164, - 78, 232, 232, 78, 232, 232, 232, 78, 78, 78, 78, 78, 232, 232, 232, 232, - 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 232, 232, 232, 232, 9, 10, - 9, 10, 9, 10, 9, 10, 163, 164, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 232, 78, 78, 232, + 232, 163, 164, 78, 232, 232, 78, 232, 232, 232, 78, 78, 78, 78, 78, 232, + 232, 232, 232, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 232, 232, + 232, 232, 9, 10, 9, 10, 9, 10, 9, 10, 163, 164, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 163, 164, 9, 10, 163, - 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, - 164, 163, 164, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, 78, - 78, 78, 78, 78, 232, 78, 78, 78, 78, 78, 78, 78, 232, 232, 232, 232, 232, - 232, 78, 78, 78, 232, 78, 78, 78, 78, 232, 232, 232, 232, 232, 78, 232, - 232, 78, 78, 163, 164, 163, 164, 232, 78, 78, 78, 78, 232, 78, 232, 232, - 232, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, - 232, 232, 232, 232, 78, 78, 163, 164, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 232, 232, 226, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, 232, 232, 78, 78, 232, - 78, 232, 78, 78, 232, 78, 232, 232, 232, 232, 78, 78, 78, 78, 78, 232, - 232, 78, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, - 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, 78, 78, 78, - 78, 232, 232, 232, 232, 78, 232, 232, 78, 78, 232, 226, 216, 216, 78, 78, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 163, + 164, 9, 10, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, + 163, 164, 163, 164, 163, 164, 78, 78, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, + 78, 78, 78, 78, 78, 78, 78, 232, 78, 78, 78, 78, 78, 78, 78, 232, 232, + 232, 232, 232, 232, 78, 78, 78, 232, 78, 78, 78, 78, 232, 232, 232, 232, + 232, 78, 232, 232, 78, 78, 163, 164, 163, 164, 232, 78, 78, 78, 78, 232, + 78, 232, 232, 232, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 232, 232, 232, 232, 232, 232, 78, 78, 163, 164, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 232, 232, 226, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, 232, 232, + 78, 78, 232, 78, 232, 78, 78, 232, 78, 232, 232, 232, 232, 78, 78, 78, + 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, + 78, 78, 78, 78, 232, 232, 232, 232, 78, 232, 232, 78, 78, 232, 226, 216, + 216, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, 232, + 232, 232, 232, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, 78, 78, 243, 78, - 232, 78, 78, 78, 232, 232, 232, 232, 232, 78, 78, 78, 78, 78, 232, 232, - 232, 78, 78, 78, 78, 232, 78, 78, 78, 232, 232, 232, 232, 232, 78, 232, - 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, 78, + 78, 243, 78, 232, 78, 78, 78, 232, 232, 232, 232, 232, 78, 78, 78, 78, + 78, 232, 232, 232, 78, 78, 78, 78, 232, 78, 78, 78, 232, 232, 232, 232, + 232, 78, 232, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 26, - 26, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, - 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 26, 26, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, + 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 44, 44, 44, 44, 44, 44, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 44, 47, 44, - 44, 44, 47, 47, 44, 47, 44, 47, 44, 47, 44, 44, 44, 44, 47, 44, 47, 47, - 44, 47, 47, 47, 47, 47, 47, 51, 51, 44, 44, 44, 47, 44, 47, 44, 47, 44, + 0, 44, 47, 44, 44, 44, 47, 47, 44, 47, 44, 47, 44, 47, 44, 44, 44, 44, + 47, 44, 47, 47, 44, 47, 47, 47, 47, 47, 47, 51, 51, 44, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 47, 26, 26, 26, 26, 26, 26, 44, 47, 44, 47, 81, 81, 81, 44, - 47, 0, 0, 0, 0, 0, 138, 138, 138, 138, 153, 138, 138, 47, 47, 47, 47, 47, + 47, 44, 47, 44, 47, 44, 47, 47, 26, 26, 26, 26, 26, 26, 44, 47, 44, 47, + 81, 81, 81, 44, 47, 0, 0, 0, 0, 0, 138, 138, 138, 138, 153, 138, 138, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, - 0, 0, 0, 47, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 0, 0, 0, 0, 0, 47, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 51, 83, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, - 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, - 0, 48, 48, 48, 48, 48, 48, 48, 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 51, 83, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, + 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, + 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, + 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 138, 138, 28, 36, 28, 36, 138, 138, 138, 28, 36, 138, 28, - 36, 138, 138, 138, 138, 138, 138, 138, 138, 138, 84, 138, 138, 84, 138, - 28, 36, 138, 138, 28, 36, 163, 164, 163, 164, 163, 164, 163, 164, 138, - 138, 138, 138, 138, 52, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 84, 84, 138, 138, 138, 138, 84, 138, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 81, 81, 81, 81, 81, 81, 81, 81, 138, 138, 28, 36, 28, 36, 138, 138, 138, + 28, 36, 138, 28, 36, 138, 138, 138, 138, 138, 138, 138, 138, 138, 84, + 138, 138, 84, 138, 28, 36, 138, 138, 28, 36, 163, 164, 163, 164, 163, + 164, 163, 164, 138, 138, 138, 138, 138, 52, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 84, 84, 138, 138, 138, 138, 84, 138, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 0, 244, - 244, 244, 244, 245, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 0, 244, 244, 244, 244, 245, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, @@ -1992,62 +1994,62 @@ static unsigned short index2[] = { 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 0, - 0, 0, 0, 246, 247, 247, 247, 244, 248, 170, 249, 250, 251, 250, 251, 250, - 251, 250, 251, 250, 251, 244, 244, 250, 251, 250, 251, 250, 251, 250, - 251, 252, 253, 254, 254, 244, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 255, 256, 257, 258, 259, 259, 252, 248, 248, 248, 248, 248, 245, - 244, 260, 260, 260, 248, 170, 247, 244, 26, 0, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 261, 170, 261, 170, 261, 170, 261, 170, - 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, - 261, 170, 170, 261, 170, 261, 170, 261, 170, 170, 170, 170, 170, 170, - 261, 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, + 245, 245, 245, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 0, 0, 0, 0, 246, 247, 247, 247, 244, 248, 170, 249, 250, 251, + 250, 251, 250, 251, 250, 251, 250, 251, 244, 244, 250, 251, 250, 251, + 250, 251, 250, 251, 252, 253, 254, 254, 244, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 255, 256, 257, 258, 259, 259, 252, 248, 248, 248, + 248, 248, 245, 244, 260, 260, 260, 248, 170, 247, 244, 26, 0, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 261, 170, 261, 170, 261, + 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, + 170, 261, 170, 261, 170, 170, 261, 170, 261, 170, 261, 170, 170, 170, + 170, 170, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, + 170, 261, 261, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 261, 170, 170, 0, + 0, 262, 262, 263, 263, 248, 264, 265, 252, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, + 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, + 170, 170, 261, 170, 261, 170, 261, 170, 170, 170, 170, 170, 170, 261, + 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 261, 170, 170, 0, 0, 262, 262, - 263, 263, 248, 264, 265, 252, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, - 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 170, - 261, 170, 261, 170, 261, 170, 170, 170, 170, 170, 170, 261, 261, 170, - 261, 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 261, 170, 170, 261, 261, 261, 261, + 247, 248, 248, 264, 265, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 261, 170, 170, 261, 261, 261, 261, 247, 248, - 248, 264, 265, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 0, 0, 0, 265, 265, 265, 265, 265, 265, 265, 265, + 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 0, 266, 266, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 265, 265, 265, 265, 0, 266, 266, 267, 267, 267, 267, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 0, 0, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, + 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 268, 268, 268, 268, 268, 268, + 244, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 0, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 0, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 269, 269, 269, 269, - 269, 269, 269, 245, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 269, + 269, 269, 269, 269, 269, 269, 245, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 245, 245, 245, 266, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 245, 266, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 245, 245, 245, 245, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 245, 245, 245, 245, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, @@ -2056,16 +2058,17 @@ static unsigned short index2[] = { 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 245, 245, 245, 245, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 245, 245, 245, 245, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 245, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, @@ -2078,21 +2081,20 @@ static unsigned short index2[] = { 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 170, + 26, 26, 26, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 248, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 248, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, @@ -2100,98 +2102,100 @@ static unsigned short index2[] = { 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 244, 244, 244, 244, 244, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 53, 53, 53, 53, 53, 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 53, 138, 138, 138, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 48, 81, 82, 82, 82, 138, 81, - 81, 81, 81, 81, 81, 81, 81, 81, 81, 138, 52, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 51, 51, 0, 81, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, 53, + 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 138, 138, + 138, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 48, 81, 82, 82, 82, 138, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 138, 52, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 51, 51, 81, 81, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 81, - 81, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 54, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 44, 47, 44, 47, 47, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 51, - 47, 47, 47, 47, 47, 47, 47, 47, 44, 47, 44, 47, 44, 44, 47, 44, 47, 44, - 47, 44, 47, 44, 47, 52, 271, 271, 44, 47, 44, 47, 0, 44, 47, 44, 47, 47, - 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 44, 44, 44, 44, 0, 0, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 173, 173, 173, + 173, 173, 173, 173, 173, 173, 173, 81, 81, 83, 83, 83, 83, 83, 83, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 54, 54, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 47, 47, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 44, 47, 44, 47, 44, 47, 51, 47, 47, 47, 47, 47, 47, 47, 47, 44, + 47, 44, 47, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 52, 271, 271, 44, + 47, 44, 47, 48, 44, 47, 44, 47, 47, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 44, 44, 44, 0, 0, 44, + 44, 44, 44, 44, 47, 44, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 51, 51, 47, 48, 48, 48, 48, 48, 48, - 48, 135, 48, 48, 48, 142, 48, 48, 48, 48, 135, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, - 139, 135, 135, 139, 26, 26, 26, 26, 0, 0, 0, 0, 148, 148, 148, 148, 148, - 148, 80, 80, 85, 225, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 51, 51, 47, 48, 48, 48, 48, 48, 48, 48, 135, 48, 48, 48, 142, 48, 48, + 48, 48, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 135, 135, 139, 26, 26, 26, 26, + 0, 0, 0, 0, 148, 148, 148, 148, 148, 148, 80, 80, 85, 225, 0, 0, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 138, + 138, 138, 138, 0, 0, 0, 0, 0, 0, 0, 0, 139, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0, 0, - 0, 139, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 48, 48, 48, 48, 48, 48, 83, - 83, 83, 48, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 86, 86, - 86, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 139, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 170, 170, + 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, + 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 48, 48, 48, 48, 48, 48, 83, 83, 83, 48, 83, 48, 0, 0, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 135, 135, 135, 135, 135, 86, 86, 86, 83, 83, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 139, 175, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 83, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, - 135, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 139, - 139, 135, 135, 135, 135, 139, 139, 135, 139, 139, 139, 175, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, 53, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 0, 0, 0, 0, 83, 83, 48, 48, 48, 48, 48, 135, 53, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, - 135, 135, 135, 139, 139, 135, 135, 139, 139, 135, 135, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 48, 48, 48, 135, 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 0, 0, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 83, 83, 83, 83, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, - 48, 48, 48, 48, 48, 80, 80, 80, 48, 139, 135, 139, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 81, 48, 81, 81, 86, 48, 48, 81, 81, - 48, 48, 48, 48, 48, 81, 81, 48, 81, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 53, 83, 83, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, 135, 139, 139, 83, 83, 48, 53, - 53, 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, - 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, + 170, 170, 170, 170, 170, 170, 0, 0, 0, 135, 135, 135, 139, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 145, 139, 139, 135, 135, 135, 135, 139, + 139, 135, 139, 139, 139, 175, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 0, 53, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, + 0, 83, 83, 48, 48, 48, 48, 48, 135, 53, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 139, 139, 135, 135, + 139, 139, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 135, 48, 48, + 48, 48, 48, 48, 48, 48, 135, 139, 0, 0, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 0, 0, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, 80, 80, 80, + 48, 139, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 81, 48, 81, 81, 86, 48, 48, 81, 81, 48, 48, 48, 48, 48, 81, 81, 48, + 81, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 48, 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 139, 135, 135, 139, 139, 83, 83, 48, 53, 53, 139, 142, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, + 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 271, + 51, 51, 51, 51, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 271, 51, 51, 51, 51, 0, 0, 0, 0, 47, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 135, 139, 139, - 135, 139, 139, 83, 139, 142, 0, 0, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 0, 0, 0, 0, 0, 0, 261, 261, 261, 261, 261, 261, 261, 261, + 48, 48, 48, 48, 48, 48, 139, 139, 135, 139, 139, 135, 139, 139, 83, 139, + 142, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, + 0, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, @@ -2202,13 +2206,12 @@ static unsigned short index2[] = { 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, - 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, @@ -2217,7 +2220,7 @@ static unsigned short index2[] = { 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, @@ -2226,7 +2229,8 @@ static unsigned short index2[] = { 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, @@ -2236,37 +2240,37 @@ static unsigned short index2[] = { 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 170, 170, 274, 170, 274, 170, 170, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 170, 274, 170, 274, 170, 170, - 274, 274, 170, 170, 170, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 170, 170, 274, 170, 274, 170, 170, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 170, 274, 170, 274, 170, 170, 274, 274, 170, 170, 170, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 0, 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 0, 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 275, 276, 275, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 215, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 0, 275, 275, 275, 275, 275, - 0, 275, 0, 275, 275, 0, 275, 275, 0, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 277, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, + 35, 35, 35, 35, 0, 0, 0, 0, 0, 275, 276, 275, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 215, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 0, 275, 275, 275, 275, 275, 0, 275, 0, 275, 275, 0, + 275, 275, 0, 275, 275, 275, 275, 275, 275, 275, 275, 275, 277, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, - 278, 278, 278, 278, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, @@ -2282,27 +2286,26 @@ static unsigned short index2[] = { 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 279, 195, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 279, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 280, 26, 0, 0, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 281, 281, 281, 281, 281, 281, - 281, 282, 283, 281, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 86, 86, - 86, 86, 86, 86, 86, 0, 0, 281, 284, 284, 285, 285, 282, 283, 282, 283, - 282, 283, 282, 283, 282, 283, 282, 283, 282, 283, 282, 283, 247, 247, - 282, 283, 281, 281, 281, 281, 285, 285, 285, 286, 281, 286, 0, 281, 286, - 281, 281, 284, 287, 288, 287, 288, 287, 288, 289, 281, 281, 290, 291, - 292, 292, 293, 0, 281, 294, 289, 281, 0, 0, 0, 0, 131, 131, 131, 118, - 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 280, 26, 0, 0, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 281, 281, 281, 281, 281, 281, 281, 282, 283, 281, 0, 0, + 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86, 86, 86, 81, + 81, 281, 284, 284, 285, 285, 282, 283, 282, 283, 282, 283, 282, 283, 282, + 283, 282, 283, 282, 283, 282, 283, 247, 247, 282, 283, 281, 281, 281, + 281, 285, 285, 285, 286, 281, 286, 0, 281, 286, 281, 281, 284, 287, 288, + 287, 288, 287, 288, 289, 281, 281, 290, 291, 292, 292, 293, 0, 281, 294, + 289, 281, 0, 0, 0, 0, 131, 131, 131, 118, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, @@ -2311,436 +2314,482 @@ static unsigned short index2[] = { 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 174, 0, 295, 295, - 296, 297, 296, 295, 295, 298, 299, 295, 300, 301, 302, 301, 301, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 301, 295, 304, 305, 304, - 295, 295, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 0, 0, 174, 0, 295, 295, 296, 297, 296, 295, 295, + 298, 299, 295, 300, 301, 302, 301, 301, 303, 303, 303, 303, 303, 303, + 303, 303, 303, 303, 301, 295, 304, 305, 304, 295, 295, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 298, 295, 299, 307, 308, 307, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 298, 305, 299, 305, 298, 299, 310, 311, 312, 310, - 310, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 314, 313, 313, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 298, 295, 299, 307, 308, + 307, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 298, + 305, 299, 305, 298, 299, 310, 311, 312, 310, 310, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 314, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 314, 314, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 314, 314, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 0, 0, 0, 313, 313, 313, 313, 313, 313, 0, - 0, 313, 313, 313, 313, 313, 313, 0, 0, 313, 313, 313, 313, 313, 313, 0, - 0, 313, 313, 313, 0, 0, 0, 297, 297, 305, 307, 315, 297, 297, 0, 316, - 317, 317, 317, 317, 316, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 318, - 318, 26, 30, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 313, 0, 0, 0, 313, 313, 313, 313, 313, 313, 0, 0, 313, 313, 313, 313, + 313, 313, 0, 0, 313, 313, 313, 313, 313, 313, 0, 0, 313, 313, 313, 0, 0, + 0, 297, 297, 305, 307, 315, 297, 297, 0, 316, 317, 317, 317, 317, 316, + 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 318, 318, 26, 30, 0, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 83, 138, 83, 0, 0, - 0, 0, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 0, 0, 0, 0, 0, 83, 138, 83, 0, 0, 0, 0, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 319, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, + 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 153, 153, 153, 153, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 153, 153, - 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 319, 319, 319, 319, 319, 153, 153, 153, 153, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 153, 153, 26, 0, 0, 0, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 80, 80, 80, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 0, 0, 0, - 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 148, 148, - 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 173, 48, 48, 48, 48, 48, 48, 48, - 48, 173, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 320, 320, 320, + 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, + 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 0, 0, 0, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 148, 148, 148, 148, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 173, 48, 48, 48, 48, 48, 48, 48, 48, 173, 0, 0, + 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 48, + 48, 48, 48, 48, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 83, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 83, 173, 173, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 83, 173, 173, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, + 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 0, - 0, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 0, 0, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 0, 107, 107, 0, 0, 0, 107, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 0, 104, 321, 321, 321, 321, 321, 321, 321, 321, + 107, 107, 0, 107, 107, 0, 0, 0, 107, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 322, 322, 321, 321, 321, - 321, 321, 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 0, 104, 321, 321, 321, 321, 321, 321, 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 322, 322, 321, 321, 321, 321, 321, + 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 321, 321, 321, 321, 321, 321, 0, 0, 0, 138, 107, 107, + 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 321, 321, 321, 321, 321, + 321, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 0, 0, 0, 0, 0, 321, + 321, 321, 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 321, 321, + 321, 321, 321, 321, 0, 0, 0, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 104, 0, + 107, 107, 107, 107, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, + 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 107, 107, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 135, 135, 135, 0, - 135, 135, 0, 0, 0, 0, 0, 135, 86, 135, 81, 107, 107, 107, 107, 0, 107, - 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 0, 0, 0, 0, 321, 321, 107, 107, 321, 321, 321, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 0, 0, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 321, 107, 135, 135, 135, 0, 135, 135, 0, 0, 0, 0, 0, 135, 86, 135, + 81, 107, 107, 107, 107, 0, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 0, 0, 0, 0, 81, 176, 86, 0, 0, 0, 0, 142, 321, 321, 321, 321, 321, - 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 104, 104, 104, 104, 104, 104, 104, - 104, 104, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 81, 176, 86, 0, 0, 0, + 0, 142, 321, 321, 321, 321, 321, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 321, 321, 104, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 321, 321, 321, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 322, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 81, 86, - 0, 0, 0, 0, 321, 321, 321, 321, 321, 104, 104, 104, 104, 104, 104, 104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 321, 321, 104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, + 107, 107, 107, 107, 107, 322, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 81, 86, 0, 0, 0, 0, 321, 321, 321, 321, + 321, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 0, 0, 321, 321, 321, 321, 321, 321, 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 321, 321, 321, 321, 321, 321, - 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 104, 104, 104, 104, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 321, 321, 321, 321, 321, 321, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 138, 138, + 138, 138, 138, 138, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, + 321, 321, 321, 321, 321, 321, 321, 321, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, + 0, 0, 321, 321, 321, 321, 321, 321, 321, 321, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, + 0, 0, 0, 0, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 321, 321, 321, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 0, 0, 0, + 0, 0, 0, 0, 321, 321, 321, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 0, 139, - 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 325, 325, 325, 325, 325, + 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 0, 139, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 142, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 135, 135, 139, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, - 48, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, - 48, 48, 48, 139, 139, 139, 135, 135, 135, 135, 139, 139, 142, 141, 83, - 83, 188, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 142, 83, + 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 142, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 140, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, + 139, 139, 139, 135, 135, 135, 135, 139, 139, 142, 141, 83, 83, 188, 83, + 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 81, 81, 81, 48, 48, 48, 48, + 48, 48, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 0, 0, 0, 0, 0, 0, 81, 81, 81, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 149, 135, 135, - 135, 135, 139, 135, 150, 150, 135, 135, 135, 142, 142, 0, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 149, 135, 135, 135, 135, 139, 135, + 150, 150, 135, 135, 135, 142, 142, 0, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 145, 83, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 139, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 83, + 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 139, 175, 48, 48, 48, 48, 83, 83, 83, - 83, 0, 0, 0, 0, 83, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 48, 0, 0, 0, 0, 0, 0, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, - 135, 139, 139, 135, 175, 145, 135, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 139, 175, 48, 48, 48, 48, 83, 83, 83, 83, 83, 145, 135, 135, + 83, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 83, 48, + 83, 83, 83, 0, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, 135, 139, + 139, 135, 175, 145, 135, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, + 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 83, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 135, 139, 139, 139, 135, 135, 135, 135, 135, 135, 145, 142, - 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, - 0, 0, 0, 0, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, - 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, - 48, 48, 48, 48, 0, 0, 145, 48, 146, 139, 135, 139, 139, 139, 139, 0, 0, - 139, 139, 0, 0, 147, 147, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, - 0, 0, 48, 48, 48, 48, 48, 139, 139, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, - 0, 0, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 146, 139, 139, 135, 135, 135, 135, - 135, 135, 139, 149, 147, 147, 146, 147, 135, 135, 139, 142, 145, 48, 48, - 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 139, 139, 135, 135, + 135, 135, 135, 135, 145, 142, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 135, 135, 139, 139, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, + 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 0, 0, 145, 48, 146, + 139, 135, 139, 139, 139, 139, 0, 0, 139, 139, 0, 0, 147, 147, 175, 0, 0, + 48, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 139, 139, + 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 81, 81, 81, 81, 81, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 146, 139, 139, 135, 135, 135, 135, 0, 0, 139, - 139, 147, 147, 135, 135, 139, 142, 145, 83, 83, 83, 83, 83, 83, 83, 83, - 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 146, 139, 139, 135, 135, 135, 135, 135, 135, 139, 149, 147, 147, 146, + 147, 135, 135, 139, 142, 145, 48, 48, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, - 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, 139, 139, 135, 139, - 142, 135, 83, 83, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 146, 139, + 139, 135, 135, 135, 135, 0, 0, 139, 139, 147, 147, 135, 135, 139, 142, + 145, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 48, 48, 48, 48, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, + 135, 135, 135, 135, 135, 135, 135, 139, 139, 135, 139, 142, 135, 83, 83, + 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 135, 139, 139, 135, 135, 135, - 135, 135, 135, 175, 145, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 135, 139, 135, 139, 139, 135, 135, 135, 135, 135, 135, + 175, 145, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 135, + 135, 135, 139, 139, 135, 135, 135, 135, 139, 135, 135, 135, 135, 142, 0, + 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, 83, + 83, 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 173, 173, 173, 173, 173, + 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, - 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 0, 83, - 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, + 173, 173, 173, 173, 173, 0, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, - 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 0, 176, 176, 176, 176, 176, 83, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 81, - 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 80, 80, 80, 80, 53, 53, 53, - 53, 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 0, 148, 148, 148, 148, 148, 148, 148, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, + 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 176, 176, 176, 176, 176, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 80, 80, 80, 80, + 53, 53, 53, 53, 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 0, 148, 148, 148, 148, 148, 148, 148, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 135, 135, 135, 135, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, - 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 80, 135, - 176, 83, 174, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, + 0, 80, 135, 176, 83, 174, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 324, 324, 324, 324, 324, 324, 324, 325, 325, 176, - 176, 176, 80, 80, 80, 326, 325, 325, 325, 325, 325, 174, 174, 174, 174, - 174, 174, 174, 174, 86, 86, 86, 86, 86, 86, 86, 86, 80, 80, 81, 81, 81, - 81, 81, 86, 86, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, - 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 324, 324, - 324, 324, 324, 324, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 326, 326, 326, 326, 326, 326, 326, + 327, 327, 176, 176, 176, 80, 80, 80, 328, 327, 327, 327, 327, 327, 174, + 174, 174, 174, 174, 174, 174, 174, 86, 86, 86, 86, 86, 86, 86, 86, 80, + 80, 81, 81, 81, 81, 81, 86, 86, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 326, 326, 326, 326, 326, 326, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 81, - 81, 81, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 81, 81, 81, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, + 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 0, 49, 49, 0, 0, 49, 0, + 0, 49, 49, 0, 0, 49, 49, 49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 49, 35, + 35, 35, 35, 0, 35, 0, 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 49, 0, 49, 49, 0, 0, 49, 0, 0, 49, 49, 0, 0, 49, - 49, 49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 0, 35, 0, - 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, - 49, 0, 49, 49, 49, 49, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 0, 49, 49, + 35, 35, 35, 35, 49, 49, 0, 49, 49, 49, 49, 0, 0, 49, 49, 49, 49, 49, 49, + 49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 49, 49, 0, 49, 49, 49, 49, 0, 49, 49, 49, 49, 49, 0, 49, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 0, 49, - 49, 49, 49, 0, 49, 49, 49, 49, 49, 0, 49, 0, 0, 0, 49, 49, 49, 49, 49, - 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 327, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, - 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 327, 35, 35, 35, 35, + 35, 35, 35, 35, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 329, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 327, + 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 329, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, + 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 327, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, + 49, 49, 329, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 327, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, - 35, 35, 35, 35, 49, 35, 0, 0, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 49, 49, 49, 49, 49, 49, 329, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, + 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 329, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 226, 35, 35, 35, 35, 35, 35, 49, 35, 0, 0, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 80, 80, 80, 80, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 80, 80, 80, + 80, 80, 80, 80, 80, 135, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 135, 80, 80, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, @@ -2754,76 +2803,63 @@ static unsigned short index2[] = { 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 0, 0, 321, 321, 321, 321, 321, 321, 321, 321, 321, 86, 86, 86, 86, - 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, + 0, 321, 321, 321, 321, 321, 321, 321, 321, 321, 86, 86, 86, 86, 86, 86, + 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, + 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, + 131, 0, 131, 0, 0, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 0, 131, 131, 131, 131, 0, 131, 0, 131, 0, 0, 0, 0, 0, 0, 131, 0, 0, + 0, 0, 131, 0, 131, 0, 131, 0, 131, 131, 131, 0, 131, 131, 0, 131, 0, 0, + 131, 0, 131, 0, 131, 0, 131, 0, 131, 0, 131, 131, 0, 131, 0, 0, 131, 131, + 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 0, + 131, 131, 131, 131, 0, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 0, 131, 131, 0, 131, 0, 0, 131, 0, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 0, 131, 131, 131, 131, 0, 131, 0, 131, 0, 0, 0, 0, 0, - 0, 131, 0, 0, 0, 0, 131, 0, 131, 0, 131, 0, 131, 131, 131, 0, 131, 131, - 0, 131, 0, 0, 131, 0, 131, 0, 131, 0, 131, 0, 131, 0, 131, 131, 0, 131, - 0, 0, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 0, 131, - 131, 131, 131, 0, 131, 131, 131, 131, 0, 131, 0, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 0, - 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 0, 131, 131, 131, + 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 153, 153, 0, 0, - 0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 153, 153, 0, 0, 0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 329, 0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 331, 0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 222, 222, 0, 0, 0, 0, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 241, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 0, 0, 0, 0, 0, 0, 0, 0, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, + 332, 332, 222, 222, 0, 0, 0, 0, 332, 332, 332, 332, 332, 332, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 241, 332, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 268, 268, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 268, 268, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 0, 0, 0, 0, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 0, 0, - 0, 0, 0, 0, 268, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 0, 0, 0, 0, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 0, 0, 0, 0, 0, 0, 268, + 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, - 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, @@ -2834,99 +2870,112 @@ static unsigned short index2[] = { 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 54, 54, + 54, 54, 54, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, + 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 71, 71, 71, 71, 71, 71, + 174, 174, 174, 174, 174, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, @@ -2939,8 +2988,8 @@ static unsigned short index2[] = { 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 273, 273, 273, 273, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, @@ -2949,7 +2998,7 @@ static unsigned short index2[] = { 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 0, 0, + 273, 273, 273, 273, 0, 0, }; /* decomposition data */ @@ -5647,6 +5696,7 @@ static const change_record change_records_3_2_0[] = { { 255, 7, 7, 255, 0 }, { 255, 7, 8, 255, 0 }, { 255, 7, 9, 255, 0 }, + { 255, 19, 255, 255, 0 }, { 1, 5, 255, 255, 0 }, { 255, 10, 255, 255, 0 }, { 18, 255, 255, 255, 0 }, @@ -5668,7 +5718,6 @@ static const change_record change_records_3_2_0[] = { { 255, 20, 255, 255, 0 }, { 255, 255, 255, 255, 1e+16 }, { 255, 255, 255, 255, 1e+20 }, - { 255, 19, 255, 255, 0 }, { 255, 19, 255, 255, -1 }, { 1, 255, 255, 0, 0 }, }; @@ -5697,50 +5746,51 @@ static unsigned char changes_3_2_0_index[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 111, 112, 113, 114, 115, 116, 2, 2, 117, 118, 119, 2, 120, 121, 122, 123, 124, 125, 2, 126, 127, 128, 129, 130, 131, 2, 50, 50, 132, - 2, 133, 134, 135, 136, 137, 138, 139, 140, 141, 2, 2, 2, 142, 2, 2, 2, - 143, 144, 145, 146, 147, 148, 149, 2, 2, 150, 2, 151, 152, 153, 2, 2, 2, - 154, 2, 2, 2, 155, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, - 50, 156, 157, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 50, 50, 50, 50, 50, 50, 50, 50, 158, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 2, 2, 143, 2, 2, 2, + 144, 145, 146, 147, 148, 149, 150, 2, 2, 151, 2, 152, 153, 154, 155, 2, + 2, 156, 2, 2, 2, 157, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, + 50, 50, 158, 159, 50, 160, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, 50, 50, 161, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 50, 50, 50, 50, 162, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, - 50, 50, 159, 160, 161, 162, 2, 2, 2, 2, 2, 2, 163, 164, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 50, 50, 50, 50, 163, 164, 165, 166, 2, 2, 2, 2, 2, 2, 167, 168, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 165, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 166, 167, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 168, 2, - 169, 2, 170, 2, 2, 171, 2, 2, 2, 172, 173, 174, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 50, 175, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 176, 177, 2, 2, 178, 179, 180, - 181, 182, 2, 183, 184, 50, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 194, 195, 95, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 84, 196, 2, 197, 198, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 169, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 170, 171, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 199, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 200, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 201, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 172, 173, 174, 2, 175, 2, 2, 176, 2, 2, 2, 177, 178, 179, 50, + 50, 50, 50, 50, 180, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 181, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 182, + 183, 2, 2, 184, 185, 186, 187, 188, 2, 50, 50, 50, 50, 189, 190, 50, 191, + 192, 193, 194, 195, 196, 197, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 198, + 199, 95, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 84, 200, 2, 201, + 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 203, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 204, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 202, 2, 2, + 2, 205, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 206, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 203, 50, 204, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 207, 50, 208, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 209, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 199, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 203, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5976,7 +6026,7 @@ static unsigned char changes_3_2_0_index[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 50, 205, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 50, 210, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6040,7 +6090,7 @@ static unsigned char changes_3_2_0_index[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, }; static unsigned char changes_3_2_0_data[] = { @@ -6126,9 +6176,9 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, @@ -6150,7 +6200,7 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, @@ -6165,7 +6215,7 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6176,7 +6226,7 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 0, 0, 0, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6237,12 +6287,14 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6251,67 +6303,66 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, @@ -6321,129 +6372,130 @@ static unsigned char changes_3_2_0_data[] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 36, 4, 0, 0, + 37, 38, 39, 40, 41, 42, 1, 1, 0, 0, 0, 4, 36, 8, 6, 7, 37, 38, 39, 40, + 41, 42, 1, 1, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 35, 4, 0, 0, 36, 37, 38, - 39, 40, 41, 1, 1, 0, 0, 0, 4, 35, 8, 6, 7, 36, 37, 38, 39, 40, 41, 1, 1, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 43, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 9, 9, 9, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, + 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6451,83 +6503,82 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6537,143 +6588,143 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6681,440 +6732,456 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 9, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 9, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, - 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 9, 9, 0, 0, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, + 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, - 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, - 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9, - 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 9, 0, 9, 0, 0, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, + 9, 9, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, + 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 9, 0, 9, + 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7125,27 +7192,38 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const change_record* get_change_3_2_0(Py_UCS4 n) diff --git a/Modules/unicodename_db.h b/Modules/unicodename_db.h index dd05f852b5..d0f9cb4dbc 100644 --- a/Modules/unicodename_db.h +++ b/Modules/unicodename_db.h @@ -4,682 +4,706 @@ /* lexicon */ static unsigned char lexicon[] = { - 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 73, 71, 206, 83, 89, 76, + 76, 69, 84, 84, 69, 210, 83, 73, 71, 206, 87, 73, 84, 200, 83, 89, 76, 76, 65, 66, 76, 197, 83, 77, 65, 76, 204, 67, 65, 80, 73, 84, 65, 204, - 76, 65, 84, 73, 206, 65, 82, 65, 66, 73, 195, 89, 201, 67, 74, 203, 77, - 65, 84, 72, 69, 77, 65, 84, 73, 67, 65, 204, 69, 71, 89, 80, 84, 73, 65, - 206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 67, 85, 78, 69, 73, 70, 79, - 82, 205, 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 83, 89, 77, - 66, 79, 204, 70, 79, 82, 77, 128, 68, 73, 71, 73, 212, 67, 65, 78, 65, - 68, 73, 65, 206, 83, 89, 76, 76, 65, 66, 73, 67, 211, 66, 65, 77, 85, - 205, 86, 79, 87, 69, 204, 65, 78, 196, 66, 79, 76, 196, 72, 65, 78, 71, - 85, 204, 76, 73, 78, 69, 65, 210, 71, 82, 69, 69, 203, 76, 73, 71, 65, - 84, 85, 82, 197, 84, 73, 77, 69, 211, 77, 85, 83, 73, 67, 65, 204, 69, - 84, 72, 73, 79, 80, 73, 195, 193, 70, 79, 210, 67, 89, 82, 73, 76, 76, - 73, 195, 73, 84, 65, 76, 73, 195, 67, 79, 77, 66, 73, 78, 73, 78, 199, - 82, 65, 68, 73, 67, 65, 204, 83, 65, 78, 83, 45, 83, 69, 82, 73, 198, 67, - 73, 82, 67, 76, 69, 196, 84, 65, 77, 73, 204, 84, 65, 201, 70, 73, 78, - 65, 204, 78, 85, 77, 66, 69, 210, 65, 82, 82, 79, 87, 128, 86, 65, 201, - 76, 69, 70, 212, 82, 73, 71, 72, 212, 83, 81, 85, 65, 82, 197, 68, 79, - 85, 66, 76, 197, 65, 82, 82, 79, 215, 65, 66, 79, 86, 69, 128, 83, 73, - 71, 78, 128, 86, 65, 82, 73, 65, 84, 73, 79, 206, 66, 69, 76, 79, 87, - 128, 66, 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 66, 89, - 90, 65, 78, 84, 73, 78, 197, 87, 72, 73, 84, 197, 66, 76, 65, 67, 203, - 73, 83, 79, 76, 65, 84, 69, 196, 65, 128, 194, 75, 65, 84, 65, 75, 65, - 78, 193, 77, 79, 68, 73, 70, 73, 69, 210, 77, 89, 65, 78, 77, 65, 210, - 68, 79, 212, 75, 65, 78, 71, 88, 201, 75, 73, 75, 65, 75, 85, 201, 77, - 69, 78, 68, 197, 85, 128, 84, 73, 66, 69, 84, 65, 206, 79, 198, 73, 128, - 79, 128, 72, 69, 65, 86, 217, 73, 78, 73, 84, 73, 65, 204, 86, 69, 82, - 84, 73, 67, 65, 204, 77, 69, 69, 205, 67, 79, 80, 84, 73, 195, 75, 72, - 77, 69, 210, 77, 65, 82, 75, 128, 65, 66, 79, 86, 197, 67, 65, 82, 82, - 73, 69, 210, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 89, 69, 200, 80, - 72, 65, 83, 69, 45, 197, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201, 77, 79, - 78, 71, 79, 76, 73, 65, 206, 83, 84, 82, 79, 75, 69, 128, 76, 69, 70, 84, - 87, 65, 82, 68, 211, 83, 89, 77, 66, 79, 76, 128, 84, 73, 76, 197, 68, - 85, 80, 76, 79, 89, 65, 206, 66, 79, 216, 80, 65, 82, 69, 78, 84, 72, 69, - 83, 73, 90, 69, 196, 83, 81, 85, 65, 82, 69, 196, 84, 72, 65, 205, 74, - 79, 78, 71, 83, 69, 79, 78, 199, 80, 76, 85, 211, 79, 78, 69, 128, 72, - 69, 66, 82, 69, 215, 77, 73, 65, 207, 84, 87, 79, 128, 213, 67, 79, 78, - 83, 79, 78, 65, 78, 212, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, 75, - 128, 68, 82, 65, 87, 73, 78, 71, 211, 72, 77, 79, 78, 199, 80, 65, 72, - 65, 87, 200, 67, 72, 79, 83, 69, 79, 78, 199, 76, 79, 215, 86, 79, 67, - 65, 76, 73, 195, 72, 65, 76, 70, 87, 73, 68, 84, 200, 66, 65, 76, 73, 78, - 69, 83, 197, 84, 87, 207, 79, 78, 197, 85, 208, 83, 67, 82, 73, 80, 212, - 73, 68, 69, 79, 71, 82, 65, 205, 80, 72, 65, 83, 69, 45, 196, 84, 79, - 128, 65, 76, 67, 72, 69, 77, 73, 67, 65, 204, 65, 76, 69, 198, 72, 73, - 71, 200, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 84, 72, 82, 69, - 197, 68, 79, 87, 206, 79, 86, 69, 210, 83, 73, 78, 72, 65, 76, 193, 78, - 85, 77, 69, 82, 73, 195, 66, 65, 82, 128, 84, 79, 78, 197, 66, 82, 65, - 72, 77, 201, 66, 65, 82, 194, 70, 79, 85, 82, 128, 72, 65, 200, 77, 65, - 82, 203, 84, 72, 82, 69, 69, 128, 78, 79, 82, 84, 200, 70, 85, 76, 76, - 87, 73, 68, 84, 200, 66, 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, - 204, 76, 73, 71, 72, 212, 84, 65, 199, 68, 79, 77, 73, 78, 207, 76, 79, - 78, 199, 65, 67, 85, 84, 69, 128, 70, 82, 65, 75, 84, 85, 210, 72, 65, - 128, 77, 65, 76, 65, 89, 65, 76, 65, 205, 67, 72, 65, 82, 65, 67, 84, 69, - 210, 80, 72, 65, 83, 69, 45, 195, 68, 79, 85, 66, 76, 69, 45, 83, 84, 82, - 85, 67, 203, 72, 65, 76, 198, 72, 73, 82, 65, 71, 65, 78, 193, 74, 85, - 78, 71, 83, 69, 79, 78, 199, 84, 69, 76, 85, 71, 213, 65, 82, 77, 69, 78, - 73, 65, 206, 66, 69, 78, 71, 65, 76, 201, 71, 76, 65, 71, 79, 76, 73, 84, - 73, 195, 85, 80, 87, 65, 82, 68, 211, 70, 73, 86, 69, 128, 77, 69, 68, - 73, 65, 204, 78, 69, 71, 65, 84, 73, 86, 197, 74, 69, 69, 205, 75, 65, - 128, 68, 79, 87, 78, 87, 65, 82, 68, 211, 73, 68, 69, 79, 71, 82, 65, 80, - 200, 74, 65, 86, 65, 78, 69, 83, 197, 68, 79, 84, 211, 79, 82, 73, 89, - 193, 80, 65, 128, 87, 69, 83, 84, 45, 67, 82, 69, 197, 82, 85, 78, 73, - 195, 83, 128, 75, 65, 78, 78, 65, 68, 193, 83, 73, 88, 128, 77, 65, 128, - 78, 69, 215, 80, 72, 65, 83, 69, 45, 193, 83, 79, 85, 84, 200, 84, 72, - 65, 201, 89, 65, 128, 67, 65, 82, 196, 67, 72, 69, 82, 79, 75, 69, 197, - 69, 73, 71, 72, 84, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 83, 69, - 86, 69, 78, 128, 83, 72, 65, 82, 65, 68, 193, 67, 73, 84, 201, 71, 85, - 74, 65, 82, 65, 84, 201, 78, 65, 128, 78, 73, 78, 69, 128, 84, 85, 82, - 78, 69, 196, 87, 65, 82, 65, 78, 199, 67, 72, 65, 205, 71, 82, 65, 78, - 84, 72, 193, 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, - 88, 128, 90, 90, 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89, 65, 128, - 90, 90, 89, 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90, - 85, 82, 128, 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83, 89, 65, - 128, 90, 90, 83, 65, 128, 90, 90, 79, 88, 128, 90, 90, 79, 80, 128, 90, - 90, 79, 128, 90, 90, 73, 88, 128, 90, 90, 73, 84, 128, 90, 90, 73, 80, - 128, 90, 90, 73, 69, 88, 128, 90, 90, 73, 69, 84, 128, 90, 90, 73, 69, - 80, 128, 90, 90, 73, 69, 128, 90, 90, 73, 128, 90, 90, 69, 88, 128, 90, - 90, 69, 80, 128, 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90, 65, 88, - 128, 90, 90, 65, 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65, 128, 90, - 90, 65, 128, 90, 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90, 87, 78, - 74, 128, 90, 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 202, 90, - 87, 65, 82, 65, 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, - 85, 79, 88, 128, 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, - 90, 85, 66, 85, 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 83, 72, 65, - 128, 90, 82, 65, 128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, - 79, 128, 90, 79, 65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, - 193, 90, 74, 69, 128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, - 73, 78, 79, 82, 128, 90, 73, 76, 68, 69, 128, 90, 73, 71, 90, 65, 199, - 90, 73, 71, 128, 90, 73, 68, 193, 90, 73, 66, 128, 90, 73, 194, 90, 73, - 51, 128, 90, 201, 90, 72, 89, 88, 128, 90, 72, 89, 84, 128, 90, 72, 89, - 82, 88, 128, 90, 72, 89, 82, 128, 90, 72, 89, 80, 128, 90, 72, 89, 128, - 90, 72, 87, 69, 128, 90, 72, 87, 65, 128, 90, 72, 85, 88, 128, 90, 72, - 85, 84, 128, 90, 72, 85, 82, 88, 128, 90, 72, 85, 82, 128, 90, 72, 85, - 80, 128, 90, 72, 85, 79, 88, 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, - 79, 128, 90, 72, 85, 128, 90, 72, 79, 88, 128, 90, 72, 79, 84, 128, 90, - 72, 79, 80, 128, 90, 72, 79, 79, 128, 90, 72, 79, 73, 128, 90, 72, 79, - 128, 90, 72, 73, 86, 69, 84, 69, 128, 90, 72, 73, 76, 128, 90, 72, 73, - 128, 90, 72, 69, 88, 128, 90, 72, 69, 84, 128, 90, 72, 69, 80, 128, 90, - 72, 69, 69, 128, 90, 72, 69, 128, 90, 72, 197, 90, 72, 65, 89, 73, 78, - 128, 90, 72, 65, 88, 128, 90, 72, 65, 84, 128, 90, 72, 65, 82, 128, 90, - 72, 65, 80, 128, 90, 72, 65, 73, 78, 128, 90, 72, 65, 65, 128, 90, 72, - 65, 128, 90, 72, 128, 90, 69, 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, - 82, 207, 90, 69, 78, 128, 90, 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, - 74, 65, 128, 90, 69, 50, 128, 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, - 73, 78, 128, 90, 65, 89, 73, 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, - 90, 65, 84, 65, 128, 90, 65, 82, 81, 65, 128, 90, 65, 82, 76, 128, 90, - 65, 81, 69, 198, 90, 65, 77, 88, 128, 90, 65, 204, 90, 65, 73, 78, 128, - 90, 65, 73, 206, 90, 65, 73, 128, 90, 65, 72, 128, 90, 65, 200, 90, 65, - 71, 128, 90, 65, 69, 70, 128, 90, 193, 90, 48, 49, 54, 72, 128, 90, 48, - 49, 54, 71, 128, 90, 48, 49, 54, 70, 128, 90, 48, 49, 54, 69, 128, 90, - 48, 49, 54, 68, 128, 90, 48, 49, 54, 67, 128, 90, 48, 49, 54, 66, 128, - 90, 48, 49, 54, 65, 128, 90, 48, 49, 54, 128, 90, 48, 49, 53, 73, 128, - 90, 48, 49, 53, 72, 128, 90, 48, 49, 53, 71, 128, 90, 48, 49, 53, 70, - 128, 90, 48, 49, 53, 69, 128, 90, 48, 49, 53, 68, 128, 90, 48, 49, 53, - 67, 128, 90, 48, 49, 53, 66, 128, 90, 48, 49, 53, 65, 128, 90, 48, 49, - 53, 128, 90, 48, 49, 52, 128, 90, 48, 49, 51, 128, 90, 48, 49, 50, 128, - 90, 48, 49, 49, 128, 90, 48, 49, 48, 128, 90, 48, 48, 57, 128, 90, 48, - 48, 56, 128, 90, 48, 48, 55, 128, 90, 48, 48, 54, 128, 90, 48, 48, 53, - 65, 128, 90, 48, 48, 53, 128, 90, 48, 48, 52, 65, 128, 90, 48, 48, 52, - 128, 90, 48, 48, 51, 66, 128, 90, 48, 48, 51, 65, 128, 90, 48, 48, 51, - 128, 90, 48, 48, 50, 68, 128, 90, 48, 48, 50, 67, 128, 90, 48, 48, 50, - 66, 128, 90, 48, 48, 50, 65, 128, 90, 48, 48, 50, 128, 90, 48, 48, 49, - 128, 90, 128, 218, 89, 89, 88, 128, 89, 89, 84, 128, 89, 89, 82, 88, 128, - 89, 89, 82, 128, 89, 89, 80, 128, 89, 89, 69, 128, 89, 89, 65, 65, 128, - 89, 89, 65, 128, 89, 89, 128, 89, 87, 79, 79, 128, 89, 87, 79, 128, 89, - 87, 73, 73, 128, 89, 87, 73, 128, 89, 87, 69, 128, 89, 87, 65, 65, 128, - 89, 87, 65, 128, 89, 86, 128, 89, 85, 88, 128, 89, 85, 87, 79, 81, 128, - 89, 85, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 85, 128, - 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, 89, - 85, 82, 128, 89, 85, 81, 128, 89, 85, 209, 89, 85, 80, 128, 89, 85, 79, - 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, 128, 89, 85, 79, 77, 128, - 89, 85, 79, 128, 89, 85, 78, 128, 89, 85, 77, 128, 89, 85, 74, 128, 89, - 85, 69, 81, 128, 89, 85, 69, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200, - 89, 85, 65, 78, 128, 89, 85, 65, 69, 78, 128, 89, 85, 45, 89, 69, 79, - 128, 89, 85, 45, 89, 69, 128, 89, 85, 45, 85, 128, 89, 85, 45, 79, 128, - 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, 69, 128, 89, - 85, 45, 65, 69, 128, 89, 85, 45, 65, 128, 89, 85, 128, 89, 213, 89, 82, - 89, 128, 89, 80, 83, 73, 76, 73, 128, 89, 80, 79, 82, 82, 79, 73, 128, - 89, 80, 79, 75, 82, 73, 83, 73, 83, 128, 89, 80, 79, 75, 82, 73, 83, 73, - 211, 89, 80, 79, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 89, 79, 89, - 128, 89, 79, 88, 128, 89, 79, 87, 68, 128, 89, 79, 85, 84, 72, 70, 85, - 76, 78, 69, 83, 83, 128, 89, 79, 85, 84, 72, 70, 85, 204, 89, 79, 84, - 128, 89, 79, 82, 73, 128, 89, 79, 81, 128, 89, 79, 209, 89, 79, 80, 128, - 89, 79, 79, 128, 89, 79, 77, 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, - 72, 128, 89, 79, 68, 128, 89, 79, 196, 89, 79, 65, 128, 89, 79, 45, 89, - 69, 79, 128, 89, 79, 45, 89, 65, 69, 128, 89, 79, 45, 89, 65, 128, 89, - 79, 45, 79, 128, 89, 79, 45, 73, 128, 89, 79, 45, 69, 79, 128, 89, 79, - 45, 65, 69, 128, 89, 79, 45, 65, 128, 89, 79, 128, 89, 207, 89, 73, 90, - 69, 84, 128, 89, 73, 88, 128, 89, 73, 87, 78, 128, 89, 73, 84, 128, 89, - 73, 80, 128, 89, 73, 78, 71, 128, 89, 73, 73, 128, 89, 73, 199, 89, 73, - 69, 88, 128, 89, 73, 69, 84, 128, 89, 73, 69, 80, 128, 89, 73, 69, 69, - 128, 89, 73, 69, 128, 89, 73, 68, 68, 73, 83, 200, 89, 73, 45, 85, 128, - 89, 73, 128, 89, 70, 69, 83, 73, 83, 128, 89, 70, 69, 83, 73, 211, 89, - 70, 69, 206, 89, 69, 89, 128, 89, 69, 87, 128, 89, 69, 85, 88, 128, 89, - 69, 85, 82, 65, 69, 128, 89, 69, 85, 81, 128, 89, 69, 85, 77, 128, 89, - 69, 85, 65, 69, 84, 128, 89, 69, 85, 65, 69, 128, 89, 69, 84, 73, 86, - 128, 89, 69, 83, 84, 85, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 83, 73, - 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 80, 65, 78, 83, 73, 79, - 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 77, 73, 69, 85, 77, 128, 89, - 69, 83, 73, 69, 85, 78, 71, 45, 72, 73, 69, 85, 72, 128, 89, 69, 83, 73, - 69, 85, 78, 71, 128, 89, 69, 82, 85, 128, 89, 69, 82, 213, 89, 69, 82, - 73, 128, 89, 69, 82, 65, 200, 89, 69, 82, 128, 89, 69, 79, 82, 73, 78, - 72, 73, 69, 85, 72, 128, 89, 69, 79, 45, 89, 65, 128, 89, 69, 79, 45, 85, - 128, 89, 69, 79, 45, 79, 128, 89, 69, 78, 73, 83, 69, 201, 89, 69, 78, - 65, 80, 128, 89, 69, 78, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, 128, - 89, 69, 76, 76, 79, 215, 89, 69, 73, 78, 128, 89, 69, 72, 128, 89, 69, - 69, 71, 128, 89, 69, 69, 128, 89, 69, 65, 210, 89, 69, 65, 128, 89, 65, - 90, 90, 128, 89, 65, 90, 72, 128, 89, 65, 90, 128, 89, 65, 89, 68, 128, - 89, 65, 89, 65, 78, 78, 65, 128, 89, 65, 89, 128, 89, 65, 87, 128, 89, - 65, 86, 128, 89, 65, 85, 128, 89, 65, 84, 84, 128, 89, 65, 84, 73, 128, - 89, 65, 84, 72, 128, 89, 65, 84, 128, 89, 65, 83, 83, 128, 89, 65, 83, - 72, 128, 89, 65, 83, 128, 89, 65, 82, 82, 128, 89, 65, 82, 128, 89, 65, - 210, 89, 65, 81, 128, 89, 65, 80, 128, 89, 65, 78, 83, 65, 89, 65, 128, - 89, 65, 78, 71, 128, 89, 65, 78, 199, 89, 65, 78, 128, 89, 65, 77, 79, - 75, 128, 89, 65, 77, 65, 75, 75, 65, 78, 128, 89, 65, 77, 128, 89, 65, - 76, 128, 89, 65, 75, 72, 72, 128, 89, 65, 75, 72, 128, 89, 65, 75, 65, - 83, 72, 128, 89, 65, 75, 128, 89, 65, 74, 85, 82, 86, 69, 68, 73, 195, - 89, 65, 74, 128, 89, 65, 73, 128, 89, 65, 72, 72, 128, 89, 65, 72, 128, - 89, 65, 71, 78, 128, 89, 65, 71, 72, 72, 128, 89, 65, 71, 72, 128, 89, - 65, 71, 128, 89, 65, 70, 213, 89, 65, 70, 128, 89, 65, 69, 77, 77, 65, - 69, 128, 89, 65, 68, 72, 128, 89, 65, 68, 68, 72, 128, 89, 65, 68, 68, - 128, 89, 65, 68, 128, 89, 65, 67, 72, 128, 89, 65, 66, 72, 128, 89, 65, - 66, 128, 89, 65, 65, 82, 85, 128, 89, 65, 65, 73, 128, 89, 65, 65, 68, - 79, 128, 89, 65, 45, 89, 79, 128, 89, 65, 45, 85, 128, 89, 65, 45, 79, - 128, 89, 48, 48, 56, 128, 89, 48, 48, 55, 128, 89, 48, 48, 54, 128, 89, - 48, 48, 53, 128, 89, 48, 48, 52, 128, 89, 48, 48, 51, 128, 89, 48, 48, - 50, 128, 89, 48, 48, 49, 65, 128, 89, 48, 48, 49, 128, 89, 45, 67, 82, - 69, 197, 88, 89, 88, 128, 88, 89, 85, 128, 88, 89, 84, 128, 88, 89, 82, - 88, 128, 88, 89, 82, 128, 88, 89, 80, 128, 88, 89, 79, 79, 74, 128, 88, - 89, 79, 79, 128, 88, 89, 79, 128, 88, 89, 73, 128, 88, 89, 69, 69, 205, - 88, 89, 69, 69, 128, 88, 89, 69, 128, 88, 89, 65, 65, 128, 88, 89, 65, - 128, 88, 89, 128, 88, 87, 73, 128, 88, 87, 69, 69, 128, 88, 87, 69, 128, - 88, 87, 65, 65, 128, 88, 87, 65, 128, 88, 87, 128, 88, 86, 69, 128, 88, - 86, 65, 128, 88, 85, 79, 88, 128, 88, 85, 79, 128, 88, 85, 128, 88, 83, - 72, 65, 65, 89, 65, 84, 72, 73, 89, 65, 128, 88, 79, 88, 128, 88, 79, 84, - 128, 88, 79, 82, 128, 88, 79, 80, 72, 128, 88, 79, 80, 128, 88, 79, 65, - 128, 88, 79, 128, 88, 73, 88, 128, 88, 73, 84, 128, 88, 73, 82, 79, 206, - 88, 73, 80, 128, 88, 73, 69, 88, 128, 88, 73, 69, 84, 128, 88, 73, 69, - 80, 128, 88, 73, 69, 128, 88, 73, 65, 66, 128, 88, 73, 128, 88, 71, 128, - 88, 69, 89, 78, 128, 88, 69, 83, 84, 69, 211, 88, 69, 72, 128, 88, 69, - 69, 128, 88, 69, 128, 88, 65, 85, 83, 128, 88, 65, 85, 128, 88, 65, 80, - 72, 128, 88, 65, 78, 128, 88, 65, 65, 128, 88, 65, 128, 88, 48, 48, 56, - 65, 128, 88, 48, 48, 56, 128, 88, 48, 48, 55, 128, 88, 48, 48, 54, 65, - 128, 88, 48, 48, 54, 128, 88, 48, 48, 53, 128, 88, 48, 48, 52, 66, 128, - 88, 48, 48, 52, 65, 128, 88, 48, 48, 52, 128, 88, 48, 48, 51, 128, 88, - 48, 48, 50, 128, 88, 48, 48, 49, 128, 88, 45, 216, 87, 90, 128, 87, 89, - 78, 78, 128, 87, 89, 78, 206, 87, 86, 73, 128, 87, 86, 69, 128, 87, 86, - 65, 128, 87, 86, 128, 87, 85, 80, 128, 87, 85, 79, 88, 128, 87, 85, 79, - 80, 128, 87, 85, 79, 128, 87, 85, 78, 74, 207, 87, 85, 78, 128, 87, 85, - 76, 85, 128, 87, 85, 76, 213, 87, 85, 73, 128, 87, 85, 69, 128, 87, 85, - 65, 69, 84, 128, 87, 85, 65, 69, 78, 128, 87, 85, 128, 87, 82, 217, 87, - 82, 79, 78, 71, 128, 87, 82, 73, 84, 73, 78, 199, 87, 82, 69, 78, 67, 72, - 128, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, 80, 69, 196, 87, 82, 65, - 80, 128, 87, 79, 88, 128, 87, 79, 87, 128, 87, 79, 82, 82, 73, 69, 196, - 87, 79, 82, 76, 196, 87, 79, 82, 75, 69, 82, 128, 87, 79, 82, 75, 128, - 87, 79, 82, 203, 87, 79, 82, 68, 83, 80, 65, 67, 69, 128, 87, 79, 82, - 196, 87, 79, 80, 128, 87, 79, 79, 78, 128, 87, 79, 79, 76, 128, 87, 79, - 79, 68, 83, 45, 67, 82, 69, 197, 87, 79, 79, 68, 128, 87, 79, 78, 128, - 87, 79, 206, 87, 79, 77, 69, 78, 211, 87, 79, 77, 69, 206, 87, 79, 77, - 65, 78, 211, 87, 79, 77, 65, 78, 128, 87, 79, 77, 65, 206, 87, 79, 76, - 79, 83, 79, 128, 87, 79, 76, 198, 87, 79, 69, 128, 87, 79, 65, 128, 87, - 73, 84, 72, 79, 85, 212, 87, 73, 84, 72, 73, 78, 128, 87, 73, 84, 72, 73, - 206, 87, 73, 82, 69, 196, 87, 73, 78, 84, 69, 82, 128, 87, 73, 78, 75, - 73, 78, 199, 87, 73, 78, 74, 65, 128, 87, 73, 78, 71, 83, 128, 87, 73, - 78, 69, 128, 87, 73, 78, 197, 87, 73, 78, 68, 85, 128, 87, 73, 78, 68, - 79, 87, 128, 87, 73, 78, 68, 128, 87, 73, 78, 196, 87, 73, 78, 128, 87, - 73, 71, 78, 89, 65, 78, 128, 87, 73, 71, 71, 76, 217, 87, 73, 68, 69, 45, - 72, 69, 65, 68, 69, 196, 87, 73, 68, 197, 87, 73, 65, 78, 71, 87, 65, 65, - 75, 128, 87, 73, 65, 78, 71, 128, 87, 72, 79, 76, 197, 87, 72, 73, 84, - 69, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 87, 72, 73, 84, 69, 128, 87, - 72, 69, 69, 76, 69, 196, 87, 72, 69, 69, 76, 67, 72, 65, 73, 210, 87, 72, - 69, 69, 76, 128, 87, 72, 69, 69, 204, 87, 72, 69, 65, 84, 128, 87, 72, - 65, 76, 69, 128, 87, 72, 128, 87, 71, 128, 87, 69, 88, 128, 87, 69, 85, - 88, 128, 87, 69, 83, 84, 69, 82, 206, 87, 69, 83, 84, 128, 87, 69, 83, - 212, 87, 69, 80, 128, 87, 69, 79, 128, 87, 69, 78, 128, 87, 69, 76, 76, - 128, 87, 69, 73, 71, 72, 212, 87, 69, 73, 69, 82, 83, 84, 82, 65, 83, - 211, 87, 69, 73, 128, 87, 69, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, - 65, 73, 76, 69, 196, 87, 69, 68, 68, 73, 78, 71, 128, 87, 69, 66, 128, - 87, 69, 65, 82, 217, 87, 69, 65, 80, 79, 78, 128, 87, 67, 128, 87, 66, - 128, 87, 65, 89, 128, 87, 65, 217, 87, 65, 88, 73, 78, 199, 87, 65, 88, - 128, 87, 65, 87, 45, 65, 89, 73, 78, 45, 82, 69, 83, 72, 128, 87, 65, 87, - 128, 87, 65, 215, 87, 65, 86, 217, 87, 65, 86, 73, 78, 199, 87, 65, 86, - 69, 83, 128, 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, 85, 128, 87, - 65, 84, 84, 79, 128, 87, 65, 84, 69, 82, 77, 69, 76, 79, 78, 128, 87, 65, - 84, 69, 82, 128, 87, 65, 84, 69, 210, 87, 65, 84, 67, 72, 128, 87, 65, - 84, 128, 87, 65, 83, 84, 73, 78, 71, 128, 87, 65, 83, 84, 69, 66, 65, 83, - 75, 69, 84, 128, 87, 65, 83, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, - 65, 128, 87, 65, 83, 76, 193, 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, - 65, 83, 65, 76, 76, 65, 205, 87, 65, 82, 78, 73, 78, 199, 87, 65, 80, - 128, 87, 65, 78, 73, 78, 199, 87, 65, 78, 71, 75, 85, 79, 81, 128, 87, - 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 78, 128, 87, 65, 76, 76, 128, - 87, 65, 76, 75, 128, 87, 65, 76, 203, 87, 65, 73, 84, 73, 78, 71, 128, - 87, 65, 73, 128, 87, 65, 69, 78, 128, 87, 65, 69, 128, 87, 65, 68, 68, - 65, 128, 87, 65, 65, 86, 85, 128, 87, 48, 50, 53, 128, 87, 48, 50, 52, - 65, 128, 87, 48, 50, 52, 128, 87, 48, 50, 51, 128, 87, 48, 50, 50, 128, - 87, 48, 50, 49, 128, 87, 48, 50, 48, 128, 87, 48, 49, 57, 128, 87, 48, - 49, 56, 65, 128, 87, 48, 49, 56, 128, 87, 48, 49, 55, 65, 128, 87, 48, - 49, 55, 128, 87, 48, 49, 54, 128, 87, 48, 49, 53, 128, 87, 48, 49, 52, - 65, 128, 87, 48, 49, 52, 128, 87, 48, 49, 51, 128, 87, 48, 49, 50, 128, - 87, 48, 49, 49, 128, 87, 48, 49, 48, 65, 128, 87, 48, 49, 48, 128, 87, - 48, 48, 57, 65, 128, 87, 48, 48, 57, 128, 87, 48, 48, 56, 128, 87, 48, - 48, 55, 128, 87, 48, 48, 54, 128, 87, 48, 48, 53, 128, 87, 48, 48, 52, - 128, 87, 48, 48, 51, 65, 128, 87, 48, 48, 51, 128, 87, 48, 48, 50, 128, - 87, 48, 48, 49, 128, 86, 90, 77, 69, 84, 128, 86, 89, 88, 128, 86, 89, - 84, 128, 86, 89, 82, 88, 128, 86, 89, 82, 128, 86, 89, 80, 128, 86, 89, - 128, 86, 87, 74, 128, 86, 87, 65, 128, 86, 85, 88, 128, 86, 85, 85, 128, - 86, 85, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, 85, 80, 128, - 86, 85, 76, 71, 65, 210, 86, 85, 69, 81, 128, 86, 84, 83, 128, 86, 84, - 128, 86, 83, 57, 57, 128, 86, 83, 57, 56, 128, 86, 83, 57, 55, 128, 86, - 83, 57, 54, 128, 86, 83, 57, 53, 128, 86, 83, 57, 52, 128, 86, 83, 57, - 51, 128, 86, 83, 57, 50, 128, 86, 83, 57, 49, 128, 86, 83, 57, 48, 128, - 86, 83, 57, 128, 86, 83, 56, 57, 128, 86, 83, 56, 56, 128, 86, 83, 56, - 55, 128, 86, 83, 56, 54, 128, 86, 83, 56, 53, 128, 86, 83, 56, 52, 128, - 86, 83, 56, 51, 128, 86, 83, 56, 50, 128, 86, 83, 56, 49, 128, 86, 83, - 56, 48, 128, 86, 83, 56, 128, 86, 83, 55, 57, 128, 86, 83, 55, 56, 128, - 86, 83, 55, 55, 128, 86, 83, 55, 54, 128, 86, 83, 55, 53, 128, 86, 83, - 55, 52, 128, 86, 83, 55, 51, 128, 86, 83, 55, 50, 128, 86, 83, 55, 49, - 128, 86, 83, 55, 48, 128, 86, 83, 55, 128, 86, 83, 54, 57, 128, 86, 83, - 54, 56, 128, 86, 83, 54, 55, 128, 86, 83, 54, 54, 128, 86, 83, 54, 53, - 128, 86, 83, 54, 52, 128, 86, 83, 54, 51, 128, 86, 83, 54, 50, 128, 86, - 83, 54, 49, 128, 86, 83, 54, 48, 128, 86, 83, 54, 128, 86, 83, 53, 57, - 128, 86, 83, 53, 56, 128, 86, 83, 53, 55, 128, 86, 83, 53, 54, 128, 86, - 83, 53, 53, 128, 86, 83, 53, 52, 128, 86, 83, 53, 51, 128, 86, 83, 53, - 50, 128, 86, 83, 53, 49, 128, 86, 83, 53, 48, 128, 86, 83, 53, 128, 86, - 83, 52, 57, 128, 86, 83, 52, 56, 128, 86, 83, 52, 55, 128, 86, 83, 52, - 54, 128, 86, 83, 52, 53, 128, 86, 83, 52, 52, 128, 86, 83, 52, 51, 128, - 86, 83, 52, 50, 128, 86, 83, 52, 49, 128, 86, 83, 52, 48, 128, 86, 83, - 52, 128, 86, 83, 51, 57, 128, 86, 83, 51, 56, 128, 86, 83, 51, 55, 128, - 86, 83, 51, 54, 128, 86, 83, 51, 53, 128, 86, 83, 51, 52, 128, 86, 83, - 51, 51, 128, 86, 83, 51, 50, 128, 86, 83, 51, 49, 128, 86, 83, 51, 48, - 128, 86, 83, 51, 128, 86, 83, 50, 57, 128, 86, 83, 50, 56, 128, 86, 83, - 50, 55, 128, 86, 83, 50, 54, 128, 86, 83, 50, 53, 54, 128, 86, 83, 50, - 53, 53, 128, 86, 83, 50, 53, 52, 128, 86, 83, 50, 53, 51, 128, 86, 83, - 50, 53, 50, 128, 86, 83, 50, 53, 49, 128, 86, 83, 50, 53, 48, 128, 86, - 83, 50, 53, 128, 86, 83, 50, 52, 57, 128, 86, 83, 50, 52, 56, 128, 86, - 83, 50, 52, 55, 128, 86, 83, 50, 52, 54, 128, 86, 83, 50, 52, 53, 128, - 86, 83, 50, 52, 52, 128, 86, 83, 50, 52, 51, 128, 86, 83, 50, 52, 50, - 128, 86, 83, 50, 52, 49, 128, 86, 83, 50, 52, 48, 128, 86, 83, 50, 52, - 128, 86, 83, 50, 51, 57, 128, 86, 83, 50, 51, 56, 128, 86, 83, 50, 51, - 55, 128, 86, 83, 50, 51, 54, 128, 86, 83, 50, 51, 53, 128, 86, 83, 50, - 51, 52, 128, 86, 83, 50, 51, 51, 128, 86, 83, 50, 51, 50, 128, 86, 83, - 50, 51, 49, 128, 86, 83, 50, 51, 48, 128, 86, 83, 50, 51, 128, 86, 83, - 50, 50, 57, 128, 86, 83, 50, 50, 56, 128, 86, 83, 50, 50, 55, 128, 86, - 83, 50, 50, 54, 128, 86, 83, 50, 50, 53, 128, 86, 83, 50, 50, 52, 128, - 86, 83, 50, 50, 51, 128, 86, 83, 50, 50, 50, 128, 86, 83, 50, 50, 49, - 128, 86, 83, 50, 50, 48, 128, 86, 83, 50, 50, 128, 86, 83, 50, 49, 57, - 128, 86, 83, 50, 49, 56, 128, 86, 83, 50, 49, 55, 128, 86, 83, 50, 49, - 54, 128, 86, 83, 50, 49, 53, 128, 86, 83, 50, 49, 52, 128, 86, 83, 50, - 49, 51, 128, 86, 83, 50, 49, 50, 128, 86, 83, 50, 49, 49, 128, 86, 83, - 50, 49, 48, 128, 86, 83, 50, 49, 128, 86, 83, 50, 48, 57, 128, 86, 83, - 50, 48, 56, 128, 86, 83, 50, 48, 55, 128, 86, 83, 50, 48, 54, 128, 86, - 83, 50, 48, 53, 128, 86, 83, 50, 48, 52, 128, 86, 83, 50, 48, 51, 128, - 86, 83, 50, 48, 50, 128, 86, 83, 50, 48, 49, 128, 86, 83, 50, 48, 48, - 128, 86, 83, 50, 48, 128, 86, 83, 50, 128, 86, 83, 49, 57, 57, 128, 86, - 83, 49, 57, 56, 128, 86, 83, 49, 57, 55, 128, 86, 83, 49, 57, 54, 128, - 86, 83, 49, 57, 53, 128, 86, 83, 49, 57, 52, 128, 86, 83, 49, 57, 51, - 128, 86, 83, 49, 57, 50, 128, 86, 83, 49, 57, 49, 128, 86, 83, 49, 57, - 48, 128, 86, 83, 49, 57, 128, 86, 83, 49, 56, 57, 128, 86, 83, 49, 56, - 56, 128, 86, 83, 49, 56, 55, 128, 86, 83, 49, 56, 54, 128, 86, 83, 49, - 56, 53, 128, 86, 83, 49, 56, 52, 128, 86, 83, 49, 56, 51, 128, 86, 83, - 49, 56, 50, 128, 86, 83, 49, 56, 49, 128, 86, 83, 49, 56, 48, 128, 86, - 83, 49, 56, 128, 86, 83, 49, 55, 57, 128, 86, 83, 49, 55, 56, 128, 86, - 83, 49, 55, 55, 128, 86, 83, 49, 55, 54, 128, 86, 83, 49, 55, 53, 128, - 86, 83, 49, 55, 52, 128, 86, 83, 49, 55, 51, 128, 86, 83, 49, 55, 50, - 128, 86, 83, 49, 55, 49, 128, 86, 83, 49, 55, 48, 128, 86, 83, 49, 55, - 128, 86, 83, 49, 54, 57, 128, 86, 83, 49, 54, 56, 128, 86, 83, 49, 54, - 55, 128, 86, 83, 49, 54, 54, 128, 86, 83, 49, 54, 53, 128, 86, 83, 49, - 54, 52, 128, 86, 83, 49, 54, 51, 128, 86, 83, 49, 54, 50, 128, 86, 83, - 49, 54, 49, 128, 86, 83, 49, 54, 48, 128, 86, 83, 49, 54, 128, 86, 83, - 49, 53, 57, 128, 86, 83, 49, 53, 56, 128, 86, 83, 49, 53, 55, 128, 86, - 83, 49, 53, 54, 128, 86, 83, 49, 53, 53, 128, 86, 83, 49, 53, 52, 128, - 86, 83, 49, 53, 51, 128, 86, 83, 49, 53, 50, 128, 86, 83, 49, 53, 49, - 128, 86, 83, 49, 53, 48, 128, 86, 83, 49, 53, 128, 86, 83, 49, 52, 57, - 128, 86, 83, 49, 52, 56, 128, 86, 83, 49, 52, 55, 128, 86, 83, 49, 52, - 54, 128, 86, 83, 49, 52, 53, 128, 86, 83, 49, 52, 52, 128, 86, 83, 49, - 52, 51, 128, 86, 83, 49, 52, 50, 128, 86, 83, 49, 52, 49, 128, 86, 83, - 49, 52, 48, 128, 86, 83, 49, 52, 128, 86, 83, 49, 51, 57, 128, 86, 83, - 49, 51, 56, 128, 86, 83, 49, 51, 55, 128, 86, 83, 49, 51, 54, 128, 86, - 83, 49, 51, 53, 128, 86, 83, 49, 51, 52, 128, 86, 83, 49, 51, 51, 128, - 86, 83, 49, 51, 50, 128, 86, 83, 49, 51, 49, 128, 86, 83, 49, 51, 48, - 128, 86, 83, 49, 51, 128, 86, 83, 49, 50, 57, 128, 86, 83, 49, 50, 56, - 128, 86, 83, 49, 50, 55, 128, 86, 83, 49, 50, 54, 128, 86, 83, 49, 50, - 53, 128, 86, 83, 49, 50, 52, 128, 86, 83, 49, 50, 51, 128, 86, 83, 49, - 50, 50, 128, 86, 83, 49, 50, 49, 128, 86, 83, 49, 50, 48, 128, 86, 83, - 49, 50, 128, 86, 83, 49, 49, 57, 128, 86, 83, 49, 49, 56, 128, 86, 83, - 49, 49, 55, 128, 86, 83, 49, 49, 54, 128, 86, 83, 49, 49, 53, 128, 86, - 83, 49, 49, 52, 128, 86, 83, 49, 49, 51, 128, 86, 83, 49, 49, 50, 128, - 86, 83, 49, 49, 49, 128, 86, 83, 49, 49, 48, 128, 86, 83, 49, 49, 128, - 86, 83, 49, 48, 57, 128, 86, 83, 49, 48, 56, 128, 86, 83, 49, 48, 55, - 128, 86, 83, 49, 48, 54, 128, 86, 83, 49, 48, 53, 128, 86, 83, 49, 48, - 52, 128, 86, 83, 49, 48, 51, 128, 86, 83, 49, 48, 50, 128, 86, 83, 49, - 48, 49, 128, 86, 83, 49, 48, 48, 128, 86, 83, 49, 48, 128, 86, 83, 49, - 128, 86, 83, 128, 86, 82, 65, 67, 72, 89, 128, 86, 79, 88, 128, 86, 79, - 87, 69, 76, 45, 67, 65, 82, 82, 73, 69, 210, 86, 79, 87, 128, 86, 79, 85, - 128, 86, 79, 84, 128, 86, 79, 211, 86, 79, 80, 128, 86, 79, 79, 73, 128, - 86, 79, 79, 128, 86, 79, 77, 128, 86, 79, 76, 85, 77, 197, 86, 79, 76, - 84, 65, 71, 197, 86, 79, 76, 67, 65, 78, 79, 128, 86, 79, 76, 65, 80, 85, - 203, 86, 79, 73, 196, 86, 79, 73, 67, 73, 78, 71, 128, 86, 79, 73, 67, - 69, 76, 69, 83, 211, 86, 79, 73, 67, 69, 196, 86, 79, 67, 65, 76, 73, 90, - 65, 84, 73, 79, 206, 86, 79, 67, 65, 204, 86, 79, 128, 86, 73, 89, 79, - 128, 86, 73, 88, 128, 86, 73, 84, 82, 73, 79, 76, 45, 50, 128, 86, 73, - 84, 82, 73, 79, 76, 128, 86, 73, 84, 65, 69, 45, 50, 128, 86, 73, 84, 65, - 69, 128, 86, 73, 84, 128, 86, 73, 83, 73, 71, 79, 84, 72, 73, 195, 86, - 73, 83, 65, 82, 71, 65, 89, 65, 128, 86, 73, 83, 65, 82, 71, 65, 128, 86, - 73, 83, 65, 82, 71, 193, 86, 73, 82, 73, 65, 77, 128, 86, 73, 82, 71, 79, - 128, 86, 73, 82, 71, 65, 128, 86, 73, 82, 65, 77, 65, 128, 86, 73, 80, - 128, 86, 73, 79, 76, 73, 78, 128, 86, 73, 78, 69, 71, 65, 82, 45, 51, - 128, 86, 73, 78, 69, 71, 65, 82, 45, 50, 128, 86, 73, 78, 69, 71, 65, 82, - 128, 86, 73, 78, 69, 71, 65, 210, 86, 73, 78, 69, 128, 86, 73, 78, 197, - 86, 73, 78, 128, 86, 73, 76, 76, 65, 71, 69, 128, 86, 73, 73, 128, 86, - 73, 69, 88, 128, 86, 73, 69, 87, 73, 78, 199, 86, 73, 69, 87, 68, 65, 84, - 193, 86, 73, 69, 84, 128, 86, 73, 69, 212, 86, 73, 69, 80, 128, 86, 73, - 69, 128, 86, 73, 68, 74, 45, 50, 128, 86, 73, 68, 74, 128, 86, 73, 68, - 69, 79, 67, 65, 83, 83, 69, 84, 84, 69, 128, 86, 73, 68, 69, 207, 86, 73, - 68, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, 73, 66, 82, 65, 84, 73, 79, - 206, 86, 70, 65, 128, 86, 69, 89, 90, 128, 86, 69, 88, 128, 86, 69, 87, - 128, 86, 69, 215, 86, 69, 85, 88, 128, 86, 69, 85, 77, 128, 86, 69, 85, - 65, 69, 80, 69, 78, 128, 86, 69, 85, 65, 69, 128, 86, 69, 83, 84, 65, - 128, 86, 69, 83, 83, 69, 204, 86, 69, 82, 217, 86, 69, 82, 84, 73, 67, - 65, 76, 76, 89, 128, 86, 69, 82, 84, 73, 67, 65, 76, 76, 217, 86, 69, 82, - 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 45, 48, 54, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, - 48, 54, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, - 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 50, 128, - 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 49, 128, 86, 69, 82, - 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 45, 48, 53, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, - 48, 53, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, - 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 51, 128, - 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 50, 128, 86, 69, 82, - 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 45, 48, 53, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, - 48, 52, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, - 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 52, 128, - 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 51, 128, 86, 69, 82, - 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 45, 48, 52, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, - 48, 52, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, - 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 53, 128, - 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 52, 128, 86, 69, 82, - 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 45, 48, 51, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, - 48, 51, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, - 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 54, 128, - 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 53, 128, 86, 69, 82, - 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 45, 48, 50, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, - 48, 50, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, - 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 48, 128, - 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 54, 128, 86, 69, 82, - 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 45, 48, 49, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, - 48, 49, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, - 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 49, 128, - 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 48, 128, 86, 69, 82, - 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 45, 48, 48, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, - 48, 48, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, - 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 50, 128, - 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 49, 128, 86, 69, 82, - 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 128, 86, 69, 82, 83, 73, 67, 76, 69, 128, 86, 69, 82, 83, 197, - 86, 69, 82, 71, 69, 128, 86, 69, 82, 68, 73, 71, 82, 73, 83, 128, 86, 69, - 82, 128, 86, 69, 80, 128, 86, 69, 78, 68, 128, 86, 69, 73, 76, 128, 86, - 69, 72, 73, 67, 76, 69, 128, 86, 69, 72, 128, 86, 69, 200, 86, 69, 69, - 128, 86, 69, 197, 86, 69, 68, 69, 128, 86, 69, 67, 84, 79, 210, 86, 65, - 89, 65, 78, 78, 65, 128, 86, 65, 88, 128, 86, 65, 86, 128, 86, 65, 214, - 86, 65, 85, 128, 86, 65, 84, 72, 89, 128, 86, 65, 84, 128, 86, 65, 83, - 84, 78, 69, 83, 211, 86, 65, 83, 73, 83, 128, 86, 65, 82, 89, 211, 86, - 65, 82, 73, 75, 65, 128, 86, 65, 82, 73, 65, 78, 84, 128, 86, 65, 82, 73, - 65, 78, 212, 86, 65, 82, 73, 65, 128, 86, 65, 82, 73, 193, 86, 65, 82, - 69, 73, 65, 201, 86, 65, 82, 69, 73, 193, 86, 65, 80, 79, 85, 82, 83, - 128, 86, 65, 80, 128, 86, 65, 78, 69, 128, 86, 65, 77, 65, 71, 79, 77, - 85, 75, 72, 65, 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 193, 86, 65, - 76, 76, 69, 89, 128, 86, 65, 74, 128, 86, 65, 73, 128, 86, 65, 72, 128, - 86, 65, 200, 86, 65, 65, 86, 85, 128, 86, 65, 65, 128, 86, 48, 52, 48, - 65, 128, 86, 48, 52, 48, 128, 86, 48, 51, 57, 128, 86, 48, 51, 56, 128, - 86, 48, 51, 55, 65, 128, 86, 48, 51, 55, 128, 86, 48, 51, 54, 128, 86, - 48, 51, 53, 128, 86, 48, 51, 52, 128, 86, 48, 51, 51, 65, 128, 86, 48, - 51, 51, 128, 86, 48, 51, 50, 128, 86, 48, 51, 49, 65, 128, 86, 48, 51, - 49, 128, 86, 48, 51, 48, 65, 128, 86, 48, 51, 48, 128, 86, 48, 50, 57, - 65, 128, 86, 48, 50, 57, 128, 86, 48, 50, 56, 65, 128, 86, 48, 50, 56, - 128, 86, 48, 50, 55, 128, 86, 48, 50, 54, 128, 86, 48, 50, 53, 128, 86, - 48, 50, 52, 128, 86, 48, 50, 51, 65, 128, 86, 48, 50, 51, 128, 86, 48, - 50, 50, 128, 86, 48, 50, 49, 128, 86, 48, 50, 48, 76, 128, 86, 48, 50, - 48, 75, 128, 86, 48, 50, 48, 74, 128, 86, 48, 50, 48, 73, 128, 86, 48, - 50, 48, 72, 128, 86, 48, 50, 48, 71, 128, 86, 48, 50, 48, 70, 128, 86, - 48, 50, 48, 69, 128, 86, 48, 50, 48, 68, 128, 86, 48, 50, 48, 67, 128, - 86, 48, 50, 48, 66, 128, 86, 48, 50, 48, 65, 128, 86, 48, 50, 48, 128, - 86, 48, 49, 57, 128, 86, 48, 49, 56, 128, 86, 48, 49, 55, 128, 86, 48, - 49, 54, 128, 86, 48, 49, 53, 128, 86, 48, 49, 52, 128, 86, 48, 49, 51, - 128, 86, 48, 49, 50, 66, 128, 86, 48, 49, 50, 65, 128, 86, 48, 49, 50, - 128, 86, 48, 49, 49, 67, 128, 86, 48, 49, 49, 66, 128, 86, 48, 49, 49, - 65, 128, 86, 48, 49, 49, 128, 86, 48, 49, 48, 128, 86, 48, 48, 57, 128, - 86, 48, 48, 56, 128, 86, 48, 48, 55, 66, 128, 86, 48, 48, 55, 65, 128, - 86, 48, 48, 55, 128, 86, 48, 48, 54, 128, 86, 48, 48, 53, 128, 86, 48, - 48, 52, 128, 86, 48, 48, 51, 128, 86, 48, 48, 50, 65, 128, 86, 48, 48, - 50, 128, 86, 48, 48, 49, 73, 128, 86, 48, 48, 49, 72, 128, 86, 48, 48, - 49, 71, 128, 86, 48, 48, 49, 70, 128, 86, 48, 48, 49, 69, 128, 86, 48, - 48, 49, 68, 128, 86, 48, 48, 49, 67, 128, 86, 48, 48, 49, 66, 128, 86, - 48, 48, 49, 65, 128, 86, 48, 48, 49, 128, 85, 90, 85, 128, 85, 90, 51, - 128, 85, 90, 179, 85, 89, 65, 78, 78, 65, 128, 85, 89, 128, 85, 87, 85, - 128, 85, 85, 89, 65, 78, 78, 65, 128, 85, 85, 85, 85, 128, 85, 85, 85, - 51, 128, 85, 85, 85, 50, 128, 85, 85, 69, 128, 85, 84, 85, 75, 73, 128, - 85, 83, 83, 85, 51, 128, 85, 83, 83, 85, 128, 85, 83, 72, 88, 128, 85, - 83, 72, 85, 77, 88, 128, 85, 83, 72, 69, 78, 78, 65, 128, 85, 83, 72, 50, - 128, 85, 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 45, 50, - 128, 85, 83, 69, 45, 49, 128, 85, 83, 69, 128, 85, 83, 197, 85, 82, 85, - 218, 85, 82, 85, 83, 128, 85, 82, 85, 68, 65, 128, 85, 82, 85, 68, 193, - 85, 82, 85, 128, 85, 82, 213, 85, 82, 78, 128, 85, 82, 73, 78, 69, 128, - 85, 82, 73, 51, 128, 85, 82, 73, 128, 85, 82, 65, 78, 85, 83, 128, 85, - 82, 65, 128, 85, 82, 52, 128, 85, 82, 50, 128, 85, 82, 178, 85, 80, 87, - 65, 82, 68, 83, 128, 85, 80, 87, 65, 82, 68, 128, 85, 80, 87, 65, 82, - 196, 85, 80, 84, 85, 82, 78, 128, 85, 80, 83, 73, 76, 79, 78, 128, 85, - 80, 83, 73, 76, 79, 206, 85, 80, 82, 73, 71, 72, 212, 85, 80, 80, 69, - 210, 85, 80, 65, 68, 72, 77, 65, 78, 73, 89, 65, 128, 85, 80, 45, 80, 79, - 73, 78, 84, 73, 78, 199, 85, 79, 78, 128, 85, 78, 78, 128, 85, 78, 77, - 65, 82, 82, 73, 69, 196, 85, 78, 75, 78, 79, 87, 78, 128, 85, 78, 73, 86, + 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 76, 65, 84, 73, 206, 67, 85, 78, + 69, 73, 70, 79, 82, 205, 65, 82, 65, 66, 73, 195, 89, 201, 67, 74, 203, + 77, 65, 84, 72, 69, 77, 65, 84, 73, 67, 65, 204, 69, 71, 89, 80, 84, 73, + 65, 206, 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 83, 89, 77, + 66, 79, 204, 68, 73, 71, 73, 212, 70, 79, 82, 77, 128, 67, 65, 78, 65, + 68, 73, 65, 206, 83, 89, 76, 76, 65, 66, 73, 67, 211, 83, 73, 71, 78, 87, + 82, 73, 84, 73, 78, 199, 86, 79, 87, 69, 204, 84, 73, 77, 69, 211, 66, + 65, 77, 85, 205, 65, 78, 196, 66, 79, 76, 196, 65, 78, 65, 84, 79, 76, + 73, 65, 206, 72, 65, 78, 71, 85, 204, 76, 73, 78, 69, 65, 210, 71, 82, + 69, 69, 203, 77, 85, 83, 73, 67, 65, 204, 76, 73, 71, 65, 84, 85, 82, + 197, 69, 84, 72, 73, 79, 80, 73, 195, 193, 70, 79, 210, 67, 89, 82, 73, + 76, 76, 73, 195, 73, 84, 65, 76, 73, 195, 67, 79, 77, 66, 73, 78, 73, 78, + 199, 82, 65, 68, 73, 67, 65, 204, 83, 65, 78, 83, 45, 83, 69, 82, 73, + 198, 78, 85, 77, 66, 69, 210, 67, 73, 82, 67, 76, 69, 196, 84, 65, 77, + 73, 204, 84, 65, 201, 70, 73, 78, 65, 204, 65, 82, 82, 79, 87, 128, 86, + 65, 201, 76, 69, 70, 212, 82, 73, 71, 72, 212, 83, 81, 85, 65, 82, 197, + 68, 79, 85, 66, 76, 197, 65, 82, 82, 79, 215, 83, 73, 71, 78, 128, 65, + 66, 79, 86, 69, 128, 66, 69, 76, 79, 87, 128, 86, 65, 82, 73, 65, 84, 73, + 79, 206, 66, 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 66, + 89, 90, 65, 78, 84, 73, 78, 197, 87, 72, 73, 84, 197, 66, 76, 65, 67, + 203, 65, 128, 73, 83, 79, 76, 65, 84, 69, 196, 77, 79, 68, 73, 70, 73, + 69, 210, 194, 75, 65, 84, 65, 75, 65, 78, 193, 85, 128, 77, 89, 65, 78, + 77, 65, 210, 68, 79, 212, 75, 65, 78, 71, 88, 201, 75, 73, 75, 65, 75, + 85, 201, 77, 69, 78, 68, 197, 73, 128, 79, 198, 84, 73, 66, 69, 84, 65, + 206, 79, 128, 72, 69, 65, 86, 217, 86, 69, 82, 84, 73, 67, 65, 204, 73, + 78, 73, 84, 73, 65, 204, 77, 65, 82, 75, 128, 77, 69, 69, 205, 67, 79, + 80, 84, 73, 195, 75, 72, 77, 69, 210, 82, 73, 71, 72, 84, 87, 65, 82, 68, + 211, 65, 66, 79, 86, 197, 67, 65, 82, 82, 73, 69, 210, 89, 69, 200, 67, + 72, 69, 82, 79, 75, 69, 197, 80, 76, 85, 211, 68, 69, 86, 65, 78, 65, 71, + 65, 82, 201, 80, 72, 65, 83, 69, 45, 197, 77, 79, 78, 71, 79, 76, 73, 65, + 206, 83, 84, 82, 79, 75, 69, 128, 76, 69, 70, 84, 87, 65, 82, 68, 211, + 83, 89, 77, 66, 79, 76, 128, 66, 79, 216, 84, 73, 76, 197, 68, 85, 80, + 76, 79, 89, 65, 206, 77, 73, 68, 68, 76, 197, 80, 65, 82, 69, 78, 84, 72, + 69, 83, 73, 90, 69, 196, 83, 81, 85, 65, 82, 69, 196, 84, 72, 65, 205, + 79, 78, 69, 128, 213, 74, 79, 78, 71, 83, 69, 79, 78, 199, 84, 87, 79, + 128, 67, 79, 78, 83, 79, 78, 65, 78, 212, 72, 69, 66, 82, 69, 215, 77, + 73, 65, 207, 85, 208, 72, 79, 79, 75, 128, 71, 69, 79, 82, 71, 73, 65, + 206, 79, 86, 69, 210, 68, 82, 65, 87, 73, 78, 71, 211, 72, 77, 79, 78, + 199, 79, 78, 197, 80, 65, 72, 65, 87, 200, 84, 87, 207, 68, 79, 87, 206, + 73, 78, 68, 69, 216, 67, 72, 79, 83, 69, 79, 78, 199, 76, 79, 215, 86, + 79, 67, 65, 76, 73, 195, 84, 72, 82, 69, 197, 72, 65, 76, 70, 87, 73, 68, + 84, 200, 72, 65, 78, 68, 45, 70, 73, 83, 212, 77, 69, 82, 79, 73, 84, 73, + 195, 66, 65, 76, 73, 78, 69, 83, 197, 77, 65, 82, 203, 83, 67, 82, 73, + 80, 212, 73, 68, 69, 79, 71, 82, 65, 205, 80, 72, 65, 83, 69, 45, 196, + 84, 79, 128, 65, 76, 67, 72, 69, 77, 73, 67, 65, 204, 65, 76, 69, 198, + 72, 73, 71, 200, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 83, 73, 78, + 72, 65, 76, 193, 78, 85, 77, 69, 82, 73, 195, 66, 65, 82, 128, 84, 79, + 78, 197, 66, 82, 65, 72, 77, 201, 72, 85, 78, 71, 65, 82, 73, 65, 206, + 84, 72, 82, 69, 69, 128, 84, 72, 85, 77, 194, 70, 79, 85, 82, 128, 66, + 65, 82, 194, 72, 65, 200, 72, 65, 128, 78, 79, 82, 84, 200, 70, 85, 76, + 76, 87, 73, 68, 84, 200, 66, 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, + 204, 76, 73, 71, 72, 212, 84, 65, 199, 68, 79, 77, 73, 78, 207, 72, 65, + 76, 198, 76, 79, 78, 199, 77, 65, 76, 65, 89, 65, 76, 65, 205, 65, 67, + 85, 84, 69, 128, 70, 82, 65, 75, 84, 85, 210, 67, 72, 65, 82, 65, 67, 84, + 69, 210, 80, 72, 65, 83, 69, 45, 195, 68, 79, 85, 66, 76, 69, 45, 83, 84, + 82, 85, 67, 203, 70, 73, 86, 69, 128, 79, 80, 69, 206, 72, 73, 82, 65, + 71, 65, 78, 193, 75, 65, 128, 77, 69, 68, 73, 65, 204, 84, 69, 76, 85, + 71, 213, 74, 85, 78, 71, 83, 69, 79, 78, 199, 85, 80, 87, 65, 82, 68, + 211, 65, 82, 77, 69, 78, 73, 65, 206, 66, 69, 78, 71, 65, 76, 201, 71, + 76, 65, 71, 79, 76, 73, 84, 73, 195, 83, 72, 65, 82, 65, 68, 193, 78, 69, + 71, 65, 84, 73, 86, 197, 68, 79, 87, 78, 87, 65, 82, 68, 211, 74, 69, 69, + 205, 80, 65, 128, 83, 73, 68, 68, 72, 65, 205, 68, 79, 84, 211, 73, 68, + 69, 79, 71, 82, 65, 80, 200, 74, 65, 86, 65, 78, 69, 83, 197, 67, 85, 82, + 83, 73, 86, 197, 77, 65, 128, 79, 82, 73, 89, 193, 83, 128, 83, 73, 88, + 128, 87, 69, 83, 84, 45, 67, 82, 69, 197, 82, 85, 78, 73, 195, 89, 65, + 128, 69, 73, 71, 72, 84, 128, 75, 65, 78, 78, 65, 68, 193, 78, 65, 128, + 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, 88, 128, 90, + 90, 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89, 65, 128, 90, 90, 89, + 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90, 85, 82, 128, + 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83, 89, 65, 128, 90, 90, + 83, 65, 128, 90, 90, 79, 88, 128, 90, 90, 79, 80, 128, 90, 90, 79, 128, + 90, 90, 73, 88, 128, 90, 90, 73, 84, 128, 90, 90, 73, 80, 128, 90, 90, + 73, 69, 88, 128, 90, 90, 73, 69, 84, 128, 90, 90, 73, 69, 80, 128, 90, + 90, 73, 69, 128, 90, 90, 73, 128, 90, 90, 69, 88, 128, 90, 90, 69, 80, + 128, 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90, 65, 88, 128, 90, 90, + 65, 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65, 128, 90, 90, 65, 128, + 90, 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90, 87, 78, 74, 128, 90, + 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 202, 90, 87, 65, 82, + 65, 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, 85, 79, 88, + 128, 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, 90, 85, 66, + 85, 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 213, 90, 83, 72, 65, 128, + 90, 82, 65, 128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, 79, + 128, 90, 79, 65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, + 90, 74, 69, 128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, + 80, 80, 69, 82, 45, 77, 79, 85, 84, 200, 90, 73, 78, 79, 82, 128, 90, 73, + 76, 68, 69, 128, 90, 73, 71, 90, 65, 199, 90, 73, 71, 128, 90, 73, 68, + 193, 90, 73, 66, 128, 90, 73, 194, 90, 73, 51, 128, 90, 201, 90, 72, 89, + 88, 128, 90, 72, 89, 84, 128, 90, 72, 89, 82, 88, 128, 90, 72, 89, 82, + 128, 90, 72, 89, 80, 128, 90, 72, 89, 128, 90, 72, 87, 69, 128, 90, 72, + 87, 65, 128, 90, 72, 85, 88, 128, 90, 72, 85, 84, 128, 90, 72, 85, 82, + 88, 128, 90, 72, 85, 82, 128, 90, 72, 85, 80, 128, 90, 72, 85, 79, 88, + 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 128, 90, 72, 85, 128, 90, + 72, 79, 88, 128, 90, 72, 79, 84, 128, 90, 72, 79, 80, 128, 90, 72, 79, + 79, 128, 90, 72, 79, 73, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, + 69, 128, 90, 72, 73, 76, 128, 90, 72, 73, 128, 90, 72, 69, 88, 128, 90, + 72, 69, 84, 128, 90, 72, 69, 80, 128, 90, 72, 69, 69, 128, 90, 72, 69, + 128, 90, 72, 197, 90, 72, 65, 89, 73, 78, 128, 90, 72, 65, 88, 128, 90, + 72, 65, 84, 128, 90, 72, 65, 82, 128, 90, 72, 65, 80, 128, 90, 72, 65, + 73, 78, 128, 90, 72, 65, 65, 128, 90, 72, 65, 128, 90, 72, 128, 90, 69, + 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, 82, 207, 90, 69, 78, 128, 90, + 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, 74, 65, 128, 90, 69, 50, 128, + 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78, 128, 90, 65, 89, 73, + 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65, 128, 90, 65, + 82, 81, 65, 128, 90, 65, 82, 76, 128, 90, 65, 81, 69, 198, 90, 65, 77, + 88, 128, 90, 65, 204, 90, 65, 73, 78, 128, 90, 65, 73, 206, 90, 65, 73, + 128, 90, 65, 72, 128, 90, 65, 200, 90, 65, 71, 128, 90, 65, 69, 70, 128, + 90, 65, 55, 128, 90, 193, 90, 48, 49, 54, 72, 128, 90, 48, 49, 54, 71, + 128, 90, 48, 49, 54, 70, 128, 90, 48, 49, 54, 69, 128, 90, 48, 49, 54, + 68, 128, 90, 48, 49, 54, 67, 128, 90, 48, 49, 54, 66, 128, 90, 48, 49, + 54, 65, 128, 90, 48, 49, 54, 128, 90, 48, 49, 53, 73, 128, 90, 48, 49, + 53, 72, 128, 90, 48, 49, 53, 71, 128, 90, 48, 49, 53, 70, 128, 90, 48, + 49, 53, 69, 128, 90, 48, 49, 53, 68, 128, 90, 48, 49, 53, 67, 128, 90, + 48, 49, 53, 66, 128, 90, 48, 49, 53, 65, 128, 90, 48, 49, 53, 128, 90, + 48, 49, 52, 128, 90, 48, 49, 51, 128, 90, 48, 49, 50, 128, 90, 48, 49, + 49, 128, 90, 48, 49, 48, 128, 90, 48, 48, 57, 128, 90, 48, 48, 56, 128, + 90, 48, 48, 55, 128, 90, 48, 48, 54, 128, 90, 48, 48, 53, 65, 128, 90, + 48, 48, 53, 128, 90, 48, 48, 52, 65, 128, 90, 48, 48, 52, 128, 90, 48, + 48, 51, 66, 128, 90, 48, 48, 51, 65, 128, 90, 48, 48, 51, 128, 90, 48, + 48, 50, 68, 128, 90, 48, 48, 50, 67, 128, 90, 48, 48, 50, 66, 128, 90, + 48, 48, 50, 65, 128, 90, 48, 48, 50, 128, 90, 48, 48, 49, 128, 90, 128, + 218, 89, 89, 88, 128, 89, 89, 84, 128, 89, 89, 82, 88, 128, 89, 89, 82, + 128, 89, 89, 80, 128, 89, 89, 69, 128, 89, 89, 65, 65, 128, 89, 89, 65, + 128, 89, 89, 128, 89, 87, 79, 79, 128, 89, 87, 79, 128, 89, 87, 73, 73, + 128, 89, 87, 73, 128, 89, 87, 69, 128, 89, 87, 65, 65, 128, 89, 87, 65, + 128, 89, 86, 128, 89, 85, 88, 128, 89, 85, 87, 79, 81, 128, 89, 85, 85, + 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 85, 128, 89, 85, 84, + 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, 89, 85, 82, 128, + 89, 85, 81, 128, 89, 85, 209, 89, 85, 80, 128, 89, 85, 79, 88, 128, 89, + 85, 79, 84, 128, 89, 85, 79, 80, 128, 89, 85, 79, 77, 128, 89, 85, 79, + 128, 89, 85, 78, 128, 89, 85, 77, 128, 89, 85, 74, 128, 89, 85, 69, 81, + 128, 89, 85, 69, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200, 89, 85, 65, + 78, 128, 89, 85, 65, 69, 78, 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, + 45, 89, 69, 128, 89, 85, 45, 85, 128, 89, 85, 45, 79, 128, 89, 85, 45, + 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, 69, 128, 89, 85, 45, 65, + 69, 128, 89, 85, 45, 65, 128, 89, 85, 128, 89, 213, 89, 82, 89, 128, 89, + 80, 83, 73, 76, 73, 128, 89, 80, 79, 82, 82, 79, 73, 128, 89, 80, 79, 75, + 82, 73, 83, 73, 83, 128, 89, 80, 79, 75, 82, 73, 83, 73, 211, 89, 80, 79, + 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 89, 79, 89, 128, 89, 79, 88, + 128, 89, 79, 87, 68, 128, 89, 79, 85, 84, 72, 70, 85, 76, 78, 69, 83, 83, + 128, 89, 79, 85, 84, 72, 70, 85, 204, 89, 79, 84, 128, 89, 79, 82, 73, + 128, 89, 79, 81, 128, 89, 79, 209, 89, 79, 80, 128, 89, 79, 79, 128, 89, + 79, 77, 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, 72, 128, 89, 79, 68, + 128, 89, 79, 196, 89, 79, 65, 128, 89, 79, 45, 89, 69, 79, 128, 89, 79, + 45, 89, 65, 69, 128, 89, 79, 45, 89, 65, 128, 89, 79, 45, 79, 128, 89, + 79, 45, 73, 128, 89, 79, 45, 69, 79, 128, 89, 79, 45, 65, 69, 128, 89, + 79, 45, 65, 128, 89, 79, 128, 89, 207, 89, 73, 90, 69, 84, 128, 89, 73, + 88, 128, 89, 73, 87, 78, 128, 89, 73, 84, 128, 89, 73, 80, 128, 89, 73, + 78, 71, 128, 89, 73, 73, 128, 89, 73, 199, 89, 73, 69, 88, 128, 89, 73, + 69, 84, 128, 89, 73, 69, 80, 128, 89, 73, 69, 69, 128, 89, 73, 69, 128, + 89, 73, 68, 68, 73, 83, 200, 89, 73, 45, 85, 128, 89, 73, 128, 89, 70, + 69, 83, 73, 83, 128, 89, 70, 69, 83, 73, 211, 89, 70, 69, 206, 89, 69, + 89, 128, 89, 69, 87, 128, 89, 69, 85, 88, 128, 89, 69, 85, 82, 65, 69, + 128, 89, 69, 85, 81, 128, 89, 69, 85, 77, 128, 89, 69, 85, 65, 69, 84, + 128, 89, 69, 85, 65, 69, 128, 89, 69, 84, 73, 86, 128, 89, 69, 83, 84, + 85, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 83, 73, 79, 83, 128, 89, 69, + 83, 73, 69, 85, 78, 71, 45, 80, 65, 78, 83, 73, 79, 83, 128, 89, 69, 83, + 73, 69, 85, 78, 71, 45, 77, 73, 69, 85, 77, 128, 89, 69, 83, 73, 69, 85, + 78, 71, 45, 72, 73, 69, 85, 72, 128, 89, 69, 83, 73, 69, 85, 78, 71, 128, + 89, 69, 82, 85, 128, 89, 69, 82, 213, 89, 69, 82, 73, 128, 89, 69, 82, + 65, 200, 89, 69, 82, 128, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, + 128, 89, 69, 79, 45, 89, 65, 128, 89, 69, 79, 45, 85, 128, 89, 69, 79, + 45, 79, 128, 89, 69, 78, 73, 83, 69, 201, 89, 69, 78, 65, 80, 128, 89, + 69, 78, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, 128, 89, 69, 76, 76, + 79, 215, 89, 69, 73, 78, 128, 89, 69, 72, 128, 89, 69, 69, 71, 128, 89, + 69, 69, 128, 89, 69, 65, 210, 89, 69, 65, 128, 89, 65, 90, 90, 128, 89, + 65, 90, 72, 128, 89, 65, 90, 128, 89, 65, 89, 68, 128, 89, 65, 89, 65, + 78, 78, 65, 128, 89, 65, 89, 128, 89, 65, 87, 78, 128, 89, 65, 87, 128, + 89, 65, 86, 128, 89, 65, 85, 128, 89, 65, 84, 84, 128, 89, 65, 84, 73, + 128, 89, 65, 84, 72, 128, 89, 65, 84, 128, 89, 65, 83, 83, 128, 89, 65, + 83, 72, 128, 89, 65, 83, 128, 89, 65, 82, 82, 128, 89, 65, 82, 128, 89, + 65, 210, 89, 65, 81, 128, 89, 65, 80, 128, 89, 65, 78, 83, 65, 89, 65, + 128, 89, 65, 78, 71, 128, 89, 65, 78, 199, 89, 65, 78, 128, 89, 65, 77, + 79, 75, 128, 89, 65, 77, 65, 75, 75, 65, 78, 128, 89, 65, 77, 128, 89, + 65, 76, 128, 89, 65, 75, 72, 72, 128, 89, 65, 75, 72, 128, 89, 65, 75, + 65, 83, 72, 128, 89, 65, 75, 128, 89, 65, 74, 85, 82, 86, 69, 68, 73, + 195, 89, 65, 74, 128, 89, 65, 73, 128, 89, 65, 72, 72, 128, 89, 65, 72, + 128, 89, 65, 71, 78, 128, 89, 65, 71, 72, 72, 128, 89, 65, 71, 72, 128, + 89, 65, 71, 128, 89, 65, 70, 213, 89, 65, 70, 128, 89, 65, 69, 77, 77, + 65, 69, 128, 89, 65, 68, 72, 128, 89, 65, 68, 68, 72, 128, 89, 65, 68, + 68, 128, 89, 65, 68, 128, 89, 65, 67, 72, 128, 89, 65, 66, 72, 128, 89, + 65, 66, 128, 89, 65, 65, 82, 85, 128, 89, 65, 65, 73, 128, 89, 65, 65, + 68, 79, 128, 89, 65, 45, 89, 79, 128, 89, 65, 45, 85, 128, 89, 65, 45, + 79, 128, 89, 48, 48, 56, 128, 89, 48, 48, 55, 128, 89, 48, 48, 54, 128, + 89, 48, 48, 53, 128, 89, 48, 48, 52, 128, 89, 48, 48, 51, 128, 89, 48, + 48, 50, 128, 89, 48, 48, 49, 65, 128, 89, 48, 48, 49, 128, 89, 45, 67, + 82, 69, 197, 88, 89, 88, 128, 88, 89, 85, 128, 88, 89, 84, 128, 88, 89, + 82, 88, 128, 88, 89, 82, 128, 88, 89, 80, 128, 88, 89, 79, 79, 74, 128, + 88, 89, 79, 79, 128, 88, 89, 79, 128, 88, 89, 73, 128, 88, 89, 69, 69, + 205, 88, 89, 69, 69, 128, 88, 89, 69, 128, 88, 89, 65, 65, 128, 88, 89, + 65, 128, 88, 89, 128, 88, 87, 73, 128, 88, 87, 69, 69, 128, 88, 87, 69, + 128, 88, 87, 65, 65, 128, 88, 87, 65, 128, 88, 87, 128, 88, 86, 69, 128, + 88, 86, 65, 128, 88, 85, 79, 88, 128, 88, 85, 79, 128, 88, 85, 128, 88, + 83, 72, 65, 65, 89, 65, 84, 72, 73, 89, 65, 128, 88, 79, 88, 128, 88, 79, + 84, 128, 88, 79, 82, 128, 88, 79, 80, 72, 128, 88, 79, 80, 128, 88, 79, + 65, 128, 88, 79, 128, 88, 73, 88, 128, 88, 73, 84, 128, 88, 73, 82, 79, + 206, 88, 73, 80, 128, 88, 73, 69, 88, 128, 88, 73, 69, 84, 128, 88, 73, + 69, 80, 128, 88, 73, 69, 128, 88, 73, 65, 66, 128, 88, 73, 128, 88, 71, + 128, 88, 69, 89, 78, 128, 88, 69, 83, 84, 69, 211, 88, 69, 72, 128, 88, + 69, 69, 128, 88, 69, 128, 88, 65, 85, 83, 128, 88, 65, 85, 128, 88, 65, + 80, 72, 128, 88, 65, 78, 128, 88, 65, 65, 128, 88, 65, 128, 88, 48, 48, + 56, 65, 128, 88, 48, 48, 56, 128, 88, 48, 48, 55, 128, 88, 48, 48, 54, + 65, 128, 88, 48, 48, 54, 128, 88, 48, 48, 53, 128, 88, 48, 48, 52, 66, + 128, 88, 48, 48, 52, 65, 128, 88, 48, 48, 52, 128, 88, 48, 48, 51, 128, + 88, 48, 48, 50, 128, 88, 48, 48, 49, 128, 88, 45, 216, 87, 90, 128, 87, + 89, 78, 78, 128, 87, 89, 78, 206, 87, 86, 73, 128, 87, 86, 69, 128, 87, + 86, 65, 128, 87, 86, 128, 87, 85, 80, 128, 87, 85, 79, 88, 128, 87, 85, + 79, 80, 128, 87, 85, 79, 128, 87, 85, 78, 74, 207, 87, 85, 78, 128, 87, + 85, 76, 85, 128, 87, 85, 76, 213, 87, 85, 73, 128, 87, 85, 69, 128, 87, + 85, 65, 69, 84, 128, 87, 85, 65, 69, 78, 128, 87, 85, 128, 87, 82, 217, + 87, 82, 79, 78, 71, 128, 87, 82, 73, 83, 212, 87, 82, 73, 78, 75, 76, 69, + 83, 128, 87, 82, 73, 78, 75, 76, 69, 211, 87, 82, 73, 78, 75, 76, 69, 68, + 128, 87, 82, 69, 78, 67, 72, 128, 87, 82, 69, 65, 84, 200, 87, 82, 65, + 80, 80, 69, 196, 87, 82, 65, 80, 128, 87, 79, 88, 128, 87, 79, 87, 128, + 87, 79, 82, 83, 72, 73, 80, 128, 87, 79, 82, 82, 73, 69, 196, 87, 79, 82, + 76, 196, 87, 79, 82, 75, 69, 82, 128, 87, 79, 82, 75, 128, 87, 79, 82, + 203, 87, 79, 82, 68, 83, 80, 65, 67, 69, 128, 87, 79, 82, 196, 87, 79, + 80, 128, 87, 79, 79, 78, 128, 87, 79, 79, 76, 128, 87, 79, 79, 68, 83, + 45, 67, 82, 69, 197, 87, 79, 79, 68, 128, 87, 79, 78, 128, 87, 79, 206, + 87, 79, 77, 69, 78, 211, 87, 79, 77, 69, 206, 87, 79, 77, 65, 78, 211, + 87, 79, 77, 65, 78, 128, 87, 79, 77, 65, 206, 87, 79, 76, 79, 83, 79, + 128, 87, 79, 76, 198, 87, 79, 69, 128, 87, 79, 65, 128, 87, 73, 84, 72, + 79, 85, 212, 87, 73, 84, 72, 73, 78, 128, 87, 73, 84, 72, 73, 206, 87, + 73, 82, 69, 196, 87, 73, 78, 84, 69, 82, 128, 87, 73, 78, 75, 73, 78, + 199, 87, 73, 78, 75, 128, 87, 73, 78, 74, 65, 128, 87, 73, 78, 71, 83, + 128, 87, 73, 78, 69, 128, 87, 73, 78, 197, 87, 73, 78, 68, 85, 128, 87, + 73, 78, 68, 79, 87, 128, 87, 73, 78, 68, 128, 87, 73, 78, 196, 87, 73, + 78, 128, 87, 73, 71, 78, 89, 65, 78, 128, 87, 73, 71, 71, 76, 217, 87, + 73, 71, 71, 76, 69, 83, 128, 87, 73, 68, 84, 72, 128, 87, 73, 68, 69, 78, + 73, 78, 199, 87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68, + 197, 87, 73, 65, 78, 71, 87, 65, 65, 75, 128, 87, 73, 65, 78, 71, 128, + 87, 72, 79, 76, 197, 87, 72, 73, 84, 69, 45, 70, 69, 65, 84, 72, 69, 82, + 69, 196, 87, 72, 73, 84, 69, 128, 87, 72, 69, 69, 76, 69, 196, 87, 72, + 69, 69, 76, 67, 72, 65, 73, 210, 87, 72, 69, 69, 76, 128, 87, 72, 69, 69, + 204, 87, 72, 69, 65, 84, 128, 87, 72, 65, 76, 69, 128, 87, 72, 128, 87, + 71, 128, 87, 69, 88, 128, 87, 69, 85, 88, 128, 87, 69, 83, 84, 69, 82, + 206, 87, 69, 83, 84, 128, 87, 69, 83, 212, 87, 69, 80, 128, 87, 69, 79, + 128, 87, 69, 78, 128, 87, 69, 76, 76, 128, 87, 69, 73, 71, 72, 212, 87, + 69, 73, 69, 82, 83, 84, 82, 65, 83, 211, 87, 69, 73, 128, 87, 69, 69, 78, + 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, 68, 71, 69, + 128, 87, 69, 68, 68, 73, 78, 71, 128, 87, 69, 66, 128, 87, 69, 65, 82, + 217, 87, 69, 65, 80, 79, 78, 128, 87, 67, 128, 87, 66, 128, 87, 65, 89, + 128, 87, 65, 217, 87, 65, 88, 73, 78, 199, 87, 65, 88, 128, 87, 65, 87, + 45, 65, 89, 73, 78, 45, 82, 69, 83, 72, 128, 87, 65, 87, 128, 87, 65, + 215, 87, 65, 86, 217, 87, 65, 86, 73, 78, 199, 87, 65, 86, 69, 83, 128, + 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, 85, 128, 87, 65, 84, 84, + 79, 128, 87, 65, 84, 69, 82, 77, 69, 76, 79, 78, 128, 87, 65, 84, 69, 82, + 128, 87, 65, 84, 69, 210, 87, 65, 84, 67, 72, 128, 87, 65, 84, 128, 87, + 65, 83, 84, 73, 78, 71, 128, 87, 65, 83, 84, 69, 66, 65, 83, 75, 69, 84, + 128, 87, 65, 83, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, 65, 128, + 87, 65, 83, 76, 193, 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 65, + 76, 76, 65, 205, 87, 65, 82, 78, 73, 78, 199, 87, 65, 82, 65, 78, 199, + 87, 65, 80, 128, 87, 65, 78, 73, 78, 199, 87, 65, 78, 71, 75, 85, 79, 81, + 128, 87, 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 78, 128, 87, 65, 76, + 76, 80, 76, 65, 78, 197, 87, 65, 76, 76, 128, 87, 65, 76, 204, 87, 65, + 76, 75, 128, 87, 65, 76, 203, 87, 65, 73, 84, 73, 78, 71, 128, 87, 65, + 73, 83, 84, 128, 87, 65, 73, 128, 87, 65, 69, 78, 128, 87, 65, 69, 128, + 87, 65, 68, 68, 65, 128, 87, 65, 65, 86, 85, 128, 87, 48, 50, 53, 128, + 87, 48, 50, 52, 65, 128, 87, 48, 50, 52, 128, 87, 48, 50, 51, 128, 87, + 48, 50, 50, 128, 87, 48, 50, 49, 128, 87, 48, 50, 48, 128, 87, 48, 49, + 57, 128, 87, 48, 49, 56, 65, 128, 87, 48, 49, 56, 128, 87, 48, 49, 55, + 65, 128, 87, 48, 49, 55, 128, 87, 48, 49, 54, 128, 87, 48, 49, 53, 128, + 87, 48, 49, 52, 65, 128, 87, 48, 49, 52, 128, 87, 48, 49, 51, 128, 87, + 48, 49, 50, 128, 87, 48, 49, 49, 128, 87, 48, 49, 48, 65, 128, 87, 48, + 49, 48, 128, 87, 48, 48, 57, 65, 128, 87, 48, 48, 57, 128, 87, 48, 48, + 56, 128, 87, 48, 48, 55, 128, 87, 48, 48, 54, 128, 87, 48, 48, 53, 128, + 87, 48, 48, 52, 128, 87, 48, 48, 51, 65, 128, 87, 48, 48, 51, 128, 87, + 48, 48, 50, 128, 87, 48, 48, 49, 128, 86, 90, 77, 69, 84, 128, 86, 89, + 88, 128, 86, 89, 84, 128, 86, 89, 82, 88, 128, 86, 89, 82, 128, 86, 89, + 80, 128, 86, 89, 128, 86, 87, 74, 128, 86, 87, 65, 128, 86, 85, 88, 128, + 86, 85, 85, 128, 86, 85, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, + 86, 85, 80, 128, 86, 85, 76, 71, 65, 210, 86, 85, 69, 81, 128, 86, 84, + 83, 128, 86, 84, 128, 86, 83, 57, 57, 128, 86, 83, 57, 56, 128, 86, 83, + 57, 55, 128, 86, 83, 57, 54, 128, 86, 83, 57, 53, 128, 86, 83, 57, 52, + 128, 86, 83, 57, 51, 128, 86, 83, 57, 50, 128, 86, 83, 57, 49, 128, 86, + 83, 57, 48, 128, 86, 83, 57, 128, 86, 83, 56, 57, 128, 86, 83, 56, 56, + 128, 86, 83, 56, 55, 128, 86, 83, 56, 54, 128, 86, 83, 56, 53, 128, 86, + 83, 56, 52, 128, 86, 83, 56, 51, 128, 86, 83, 56, 50, 128, 86, 83, 56, + 49, 128, 86, 83, 56, 48, 128, 86, 83, 56, 128, 86, 83, 55, 57, 128, 86, + 83, 55, 56, 128, 86, 83, 55, 55, 128, 86, 83, 55, 54, 128, 86, 83, 55, + 53, 128, 86, 83, 55, 52, 128, 86, 83, 55, 51, 128, 86, 83, 55, 50, 128, + 86, 83, 55, 49, 128, 86, 83, 55, 48, 128, 86, 83, 55, 128, 86, 83, 54, + 57, 128, 86, 83, 54, 56, 128, 86, 83, 54, 55, 128, 86, 83, 54, 54, 128, + 86, 83, 54, 53, 128, 86, 83, 54, 52, 128, 86, 83, 54, 51, 128, 86, 83, + 54, 50, 128, 86, 83, 54, 49, 128, 86, 83, 54, 48, 128, 86, 83, 54, 128, + 86, 83, 53, 57, 128, 86, 83, 53, 56, 128, 86, 83, 53, 55, 128, 86, 83, + 53, 54, 128, 86, 83, 53, 53, 128, 86, 83, 53, 52, 128, 86, 83, 53, 51, + 128, 86, 83, 53, 50, 128, 86, 83, 53, 49, 128, 86, 83, 53, 48, 128, 86, + 83, 53, 128, 86, 83, 52, 57, 128, 86, 83, 52, 56, 128, 86, 83, 52, 55, + 128, 86, 83, 52, 54, 128, 86, 83, 52, 53, 128, 86, 83, 52, 52, 128, 86, + 83, 52, 51, 128, 86, 83, 52, 50, 128, 86, 83, 52, 49, 128, 86, 83, 52, + 48, 128, 86, 83, 52, 128, 86, 83, 51, 57, 128, 86, 83, 51, 56, 128, 86, + 83, 51, 55, 128, 86, 83, 51, 54, 128, 86, 83, 51, 53, 128, 86, 83, 51, + 52, 128, 86, 83, 51, 51, 128, 86, 83, 51, 50, 128, 86, 83, 51, 49, 128, + 86, 83, 51, 48, 128, 86, 83, 51, 128, 86, 83, 50, 57, 128, 86, 83, 50, + 56, 128, 86, 83, 50, 55, 128, 86, 83, 50, 54, 128, 86, 83, 50, 53, 54, + 128, 86, 83, 50, 53, 53, 128, 86, 83, 50, 53, 52, 128, 86, 83, 50, 53, + 51, 128, 86, 83, 50, 53, 50, 128, 86, 83, 50, 53, 49, 128, 86, 83, 50, + 53, 48, 128, 86, 83, 50, 53, 128, 86, 83, 50, 52, 57, 128, 86, 83, 50, + 52, 56, 128, 86, 83, 50, 52, 55, 128, 86, 83, 50, 52, 54, 128, 86, 83, + 50, 52, 53, 128, 86, 83, 50, 52, 52, 128, 86, 83, 50, 52, 51, 128, 86, + 83, 50, 52, 50, 128, 86, 83, 50, 52, 49, 128, 86, 83, 50, 52, 48, 128, + 86, 83, 50, 52, 128, 86, 83, 50, 51, 57, 128, 86, 83, 50, 51, 56, 128, + 86, 83, 50, 51, 55, 128, 86, 83, 50, 51, 54, 128, 86, 83, 50, 51, 53, + 128, 86, 83, 50, 51, 52, 128, 86, 83, 50, 51, 51, 128, 86, 83, 50, 51, + 50, 128, 86, 83, 50, 51, 49, 128, 86, 83, 50, 51, 48, 128, 86, 83, 50, + 51, 128, 86, 83, 50, 50, 57, 128, 86, 83, 50, 50, 56, 128, 86, 83, 50, + 50, 55, 128, 86, 83, 50, 50, 54, 128, 86, 83, 50, 50, 53, 128, 86, 83, + 50, 50, 52, 128, 86, 83, 50, 50, 51, 128, 86, 83, 50, 50, 50, 128, 86, + 83, 50, 50, 49, 128, 86, 83, 50, 50, 48, 128, 86, 83, 50, 50, 128, 86, + 83, 50, 49, 57, 128, 86, 83, 50, 49, 56, 128, 86, 83, 50, 49, 55, 128, + 86, 83, 50, 49, 54, 128, 86, 83, 50, 49, 53, 128, 86, 83, 50, 49, 52, + 128, 86, 83, 50, 49, 51, 128, 86, 83, 50, 49, 50, 128, 86, 83, 50, 49, + 49, 128, 86, 83, 50, 49, 48, 128, 86, 83, 50, 49, 128, 86, 83, 50, 48, + 57, 128, 86, 83, 50, 48, 56, 128, 86, 83, 50, 48, 55, 128, 86, 83, 50, + 48, 54, 128, 86, 83, 50, 48, 53, 128, 86, 83, 50, 48, 52, 128, 86, 83, + 50, 48, 51, 128, 86, 83, 50, 48, 50, 128, 86, 83, 50, 48, 49, 128, 86, + 83, 50, 48, 48, 128, 86, 83, 50, 48, 128, 86, 83, 50, 128, 86, 83, 49, + 57, 57, 128, 86, 83, 49, 57, 56, 128, 86, 83, 49, 57, 55, 128, 86, 83, + 49, 57, 54, 128, 86, 83, 49, 57, 53, 128, 86, 83, 49, 57, 52, 128, 86, + 83, 49, 57, 51, 128, 86, 83, 49, 57, 50, 128, 86, 83, 49, 57, 49, 128, + 86, 83, 49, 57, 48, 128, 86, 83, 49, 57, 128, 86, 83, 49, 56, 57, 128, + 86, 83, 49, 56, 56, 128, 86, 83, 49, 56, 55, 128, 86, 83, 49, 56, 54, + 128, 86, 83, 49, 56, 53, 128, 86, 83, 49, 56, 52, 128, 86, 83, 49, 56, + 51, 128, 86, 83, 49, 56, 50, 128, 86, 83, 49, 56, 49, 128, 86, 83, 49, + 56, 48, 128, 86, 83, 49, 56, 128, 86, 83, 49, 55, 57, 128, 86, 83, 49, + 55, 56, 128, 86, 83, 49, 55, 55, 128, 86, 83, 49, 55, 54, 128, 86, 83, + 49, 55, 53, 128, 86, 83, 49, 55, 52, 128, 86, 83, 49, 55, 51, 128, 86, + 83, 49, 55, 50, 128, 86, 83, 49, 55, 49, 128, 86, 83, 49, 55, 48, 128, + 86, 83, 49, 55, 128, 86, 83, 49, 54, 57, 128, 86, 83, 49, 54, 56, 128, + 86, 83, 49, 54, 55, 128, 86, 83, 49, 54, 54, 128, 86, 83, 49, 54, 53, + 128, 86, 83, 49, 54, 52, 128, 86, 83, 49, 54, 51, 128, 86, 83, 49, 54, + 50, 128, 86, 83, 49, 54, 49, 128, 86, 83, 49, 54, 48, 128, 86, 83, 49, + 54, 128, 86, 83, 49, 53, 57, 128, 86, 83, 49, 53, 56, 128, 86, 83, 49, + 53, 55, 128, 86, 83, 49, 53, 54, 128, 86, 83, 49, 53, 53, 128, 86, 83, + 49, 53, 52, 128, 86, 83, 49, 53, 51, 128, 86, 83, 49, 53, 50, 128, 86, + 83, 49, 53, 49, 128, 86, 83, 49, 53, 48, 128, 86, 83, 49, 53, 128, 86, + 83, 49, 52, 57, 128, 86, 83, 49, 52, 56, 128, 86, 83, 49, 52, 55, 128, + 86, 83, 49, 52, 54, 128, 86, 83, 49, 52, 53, 128, 86, 83, 49, 52, 52, + 128, 86, 83, 49, 52, 51, 128, 86, 83, 49, 52, 50, 128, 86, 83, 49, 52, + 49, 128, 86, 83, 49, 52, 48, 128, 86, 83, 49, 52, 128, 86, 83, 49, 51, + 57, 128, 86, 83, 49, 51, 56, 128, 86, 83, 49, 51, 55, 128, 86, 83, 49, + 51, 54, 128, 86, 83, 49, 51, 53, 128, 86, 83, 49, 51, 52, 128, 86, 83, + 49, 51, 51, 128, 86, 83, 49, 51, 50, 128, 86, 83, 49, 51, 49, 128, 86, + 83, 49, 51, 48, 128, 86, 83, 49, 51, 128, 86, 83, 49, 50, 57, 128, 86, + 83, 49, 50, 56, 128, 86, 83, 49, 50, 55, 128, 86, 83, 49, 50, 54, 128, + 86, 83, 49, 50, 53, 128, 86, 83, 49, 50, 52, 128, 86, 83, 49, 50, 51, + 128, 86, 83, 49, 50, 50, 128, 86, 83, 49, 50, 49, 128, 86, 83, 49, 50, + 48, 128, 86, 83, 49, 50, 128, 86, 83, 49, 49, 57, 128, 86, 83, 49, 49, + 56, 128, 86, 83, 49, 49, 55, 128, 86, 83, 49, 49, 54, 128, 86, 83, 49, + 49, 53, 128, 86, 83, 49, 49, 52, 128, 86, 83, 49, 49, 51, 128, 86, 83, + 49, 49, 50, 128, 86, 83, 49, 49, 49, 128, 86, 83, 49, 49, 48, 128, 86, + 83, 49, 49, 128, 86, 83, 49, 48, 57, 128, 86, 83, 49, 48, 56, 128, 86, + 83, 49, 48, 55, 128, 86, 83, 49, 48, 54, 128, 86, 83, 49, 48, 53, 128, + 86, 83, 49, 48, 52, 128, 86, 83, 49, 48, 51, 128, 86, 83, 49, 48, 50, + 128, 86, 83, 49, 48, 49, 128, 86, 83, 49, 48, 48, 128, 86, 83, 49, 48, + 128, 86, 83, 49, 128, 86, 83, 128, 86, 82, 65, 67, 72, 89, 128, 86, 79, + 88, 128, 86, 79, 87, 69, 76, 45, 67, 65, 82, 82, 73, 69, 210, 86, 79, 87, + 128, 86, 79, 85, 128, 86, 79, 84, 128, 86, 79, 211, 86, 79, 80, 128, 86, + 79, 79, 73, 128, 86, 79, 79, 128, 86, 79, 77, 128, 86, 79, 76, 85, 77, + 197, 86, 79, 76, 84, 65, 71, 197, 86, 79, 76, 76, 69, 89, 66, 65, 76, 76, + 128, 86, 79, 76, 67, 65, 78, 79, 128, 86, 79, 76, 65, 80, 85, 203, 86, + 79, 73, 196, 86, 79, 73, 67, 73, 78, 71, 128, 86, 79, 73, 67, 69, 76, 69, + 83, 211, 86, 79, 73, 67, 69, 196, 86, 79, 67, 65, 76, 73, 90, 65, 84, 73, + 79, 206, 86, 79, 67, 65, 204, 86, 79, 128, 86, 73, 89, 79, 128, 86, 73, + 88, 128, 86, 73, 84, 82, 73, 79, 76, 45, 50, 128, 86, 73, 84, 82, 73, 79, + 76, 128, 86, 73, 84, 65, 69, 45, 50, 128, 86, 73, 84, 65, 69, 128, 86, + 73, 84, 128, 86, 73, 83, 73, 71, 79, 84, 72, 73, 195, 86, 73, 83, 65, 82, + 71, 65, 89, 65, 128, 86, 73, 83, 65, 82, 71, 65, 128, 86, 73, 83, 65, 82, + 71, 193, 86, 73, 82, 73, 65, 77, 128, 86, 73, 82, 71, 79, 128, 86, 73, + 82, 71, 65, 128, 86, 73, 82, 65, 77, 65, 128, 86, 73, 80, 128, 86, 73, + 79, 76, 73, 78, 128, 86, 73, 78, 69, 71, 65, 82, 45, 51, 128, 86, 73, 78, + 69, 71, 65, 82, 45, 50, 128, 86, 73, 78, 69, 71, 65, 82, 128, 86, 73, 78, + 69, 71, 65, 210, 86, 73, 78, 69, 128, 86, 73, 78, 197, 86, 73, 78, 128, + 86, 73, 76, 76, 65, 71, 69, 128, 86, 73, 73, 128, 86, 73, 69, 88, 128, + 86, 73, 69, 87, 73, 78, 199, 86, 73, 69, 87, 68, 65, 84, 193, 86, 73, 69, + 84, 128, 86, 73, 69, 212, 86, 73, 69, 80, 128, 86, 73, 69, 128, 86, 73, + 68, 74, 45, 50, 128, 86, 73, 68, 74, 128, 86, 73, 68, 69, 79, 67, 65, 83, + 83, 69, 84, 84, 69, 128, 86, 73, 68, 69, 207, 86, 73, 68, 65, 128, 86, + 73, 67, 84, 79, 82, 217, 86, 73, 66, 82, 65, 84, 73, 79, 206, 86, 70, 65, + 128, 86, 69, 89, 90, 128, 86, 69, 88, 128, 86, 69, 87, 128, 86, 69, 215, + 86, 69, 85, 88, 128, 86, 69, 85, 77, 128, 86, 69, 85, 65, 69, 80, 69, 78, + 128, 86, 69, 85, 65, 69, 128, 86, 69, 83, 84, 65, 128, 86, 69, 83, 83, + 69, 204, 86, 69, 82, 217, 86, 69, 82, 84, 73, 67, 65, 76, 76, 89, 128, + 86, 69, 82, 84, 73, 67, 65, 76, 76, 217, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 54, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, + 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 52, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 51, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 50, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 54, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 54, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, + 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 53, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 52, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 51, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 53, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 53, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, + 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 54, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 53, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 52, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 52, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 52, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, + 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 48, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 54, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 53, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 51, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 51, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, + 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 49, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 48, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 54, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 50, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 50, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, + 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 50, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 49, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 48, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 49, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 49, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, + 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 51, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 50, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 49, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 49, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 48, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, + 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 52, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 51, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 50, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 48, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 48, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 128, 86, 69, + 82, 83, 73, 67, 76, 69, 128, 86, 69, 82, 83, 197, 86, 69, 82, 71, 69, + 128, 86, 69, 82, 68, 73, 71, 82, 73, 83, 128, 86, 69, 82, 128, 86, 69, + 80, 128, 86, 69, 78, 68, 128, 86, 69, 73, 76, 128, 86, 69, 72, 73, 67, + 76, 69, 128, 86, 69, 72, 128, 86, 69, 200, 86, 69, 69, 128, 86, 69, 197, + 86, 69, 68, 69, 128, 86, 69, 67, 84, 79, 210, 86, 65, 89, 65, 78, 78, 65, + 128, 86, 65, 88, 128, 86, 65, 86, 128, 86, 65, 214, 86, 65, 85, 128, 86, + 65, 84, 72, 89, 128, 86, 65, 84, 128, 86, 65, 83, 84, 78, 69, 83, 211, + 86, 65, 83, 73, 83, 128, 86, 65, 82, 89, 211, 86, 65, 82, 73, 75, 65, + 128, 86, 65, 82, 73, 65, 78, 84, 128, 86, 65, 82, 73, 65, 78, 212, 86, + 65, 82, 73, 65, 128, 86, 65, 82, 73, 193, 86, 65, 82, 69, 73, 65, 201, + 86, 65, 82, 69, 73, 193, 86, 65, 80, 79, 85, 82, 83, 128, 86, 65, 80, + 128, 86, 65, 78, 69, 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 65, + 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 193, 86, 65, 76, 76, 69, 89, + 128, 86, 65, 74, 128, 86, 65, 73, 128, 86, 65, 72, 128, 86, 65, 200, 86, + 65, 65, 86, 85, 128, 86, 65, 65, 128, 86, 48, 52, 48, 65, 128, 86, 48, + 52, 48, 128, 86, 48, 51, 57, 128, 86, 48, 51, 56, 128, 86, 48, 51, 55, + 65, 128, 86, 48, 51, 55, 128, 86, 48, 51, 54, 128, 86, 48, 51, 53, 128, + 86, 48, 51, 52, 128, 86, 48, 51, 51, 65, 128, 86, 48, 51, 51, 128, 86, + 48, 51, 50, 128, 86, 48, 51, 49, 65, 128, 86, 48, 51, 49, 128, 86, 48, + 51, 48, 65, 128, 86, 48, 51, 48, 128, 86, 48, 50, 57, 65, 128, 86, 48, + 50, 57, 128, 86, 48, 50, 56, 65, 128, 86, 48, 50, 56, 128, 86, 48, 50, + 55, 128, 86, 48, 50, 54, 128, 86, 48, 50, 53, 128, 86, 48, 50, 52, 128, + 86, 48, 50, 51, 65, 128, 86, 48, 50, 51, 128, 86, 48, 50, 50, 128, 86, + 48, 50, 49, 128, 86, 48, 50, 48, 76, 128, 86, 48, 50, 48, 75, 128, 86, + 48, 50, 48, 74, 128, 86, 48, 50, 48, 73, 128, 86, 48, 50, 48, 72, 128, + 86, 48, 50, 48, 71, 128, 86, 48, 50, 48, 70, 128, 86, 48, 50, 48, 69, + 128, 86, 48, 50, 48, 68, 128, 86, 48, 50, 48, 67, 128, 86, 48, 50, 48, + 66, 128, 86, 48, 50, 48, 65, 128, 86, 48, 50, 48, 128, 86, 48, 49, 57, + 128, 86, 48, 49, 56, 128, 86, 48, 49, 55, 128, 86, 48, 49, 54, 128, 86, + 48, 49, 53, 128, 86, 48, 49, 52, 128, 86, 48, 49, 51, 128, 86, 48, 49, + 50, 66, 128, 86, 48, 49, 50, 65, 128, 86, 48, 49, 50, 128, 86, 48, 49, + 49, 67, 128, 86, 48, 49, 49, 66, 128, 86, 48, 49, 49, 65, 128, 86, 48, + 49, 49, 128, 86, 48, 49, 48, 128, 86, 48, 48, 57, 128, 86, 48, 48, 56, + 128, 86, 48, 48, 55, 66, 128, 86, 48, 48, 55, 65, 128, 86, 48, 48, 55, + 128, 86, 48, 48, 54, 128, 86, 48, 48, 53, 128, 86, 48, 48, 52, 128, 86, + 48, 48, 51, 128, 86, 48, 48, 50, 65, 128, 86, 48, 48, 50, 128, 86, 48, + 48, 49, 73, 128, 86, 48, 48, 49, 72, 128, 86, 48, 48, 49, 71, 128, 86, + 48, 48, 49, 70, 128, 86, 48, 48, 49, 69, 128, 86, 48, 48, 49, 68, 128, + 86, 48, 48, 49, 67, 128, 86, 48, 48, 49, 66, 128, 86, 48, 48, 49, 65, + 128, 86, 48, 48, 49, 128, 85, 90, 85, 128, 85, 90, 51, 128, 85, 90, 179, + 85, 89, 65, 78, 78, 65, 128, 85, 89, 128, 85, 87, 85, 128, 85, 85, 89, + 65, 78, 78, 65, 128, 85, 85, 85, 85, 128, 85, 85, 85, 51, 128, 85, 85, + 85, 50, 128, 85, 85, 69, 128, 85, 84, 85, 75, 73, 128, 85, 83, 83, 85, + 51, 128, 85, 83, 83, 85, 128, 85, 83, 72, 88, 128, 85, 83, 72, 85, 77, + 88, 128, 85, 83, 72, 69, 78, 78, 65, 128, 85, 83, 72, 50, 128, 85, 83, + 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 45, 50, 128, 85, 83, + 69, 45, 49, 128, 85, 83, 69, 128, 85, 83, 197, 85, 82, 85, 218, 85, 82, + 85, 83, 128, 85, 82, 85, 68, 65, 128, 85, 82, 85, 68, 193, 85, 82, 85, + 128, 85, 82, 213, 85, 82, 78, 128, 85, 82, 73, 78, 69, 128, 85, 82, 73, + 51, 128, 85, 82, 73, 128, 85, 82, 65, 78, 85, 83, 128, 85, 82, 65, 128, + 85, 82, 52, 128, 85, 82, 50, 128, 85, 82, 178, 85, 80, 87, 65, 82, 68, + 83, 128, 85, 80, 87, 65, 82, 68, 128, 85, 80, 87, 65, 82, 196, 85, 80, + 84, 85, 82, 78, 128, 85, 80, 83, 73, 76, 79, 78, 128, 85, 80, 83, 73, 76, + 79, 206, 85, 80, 83, 73, 68, 69, 45, 68, 79, 87, 206, 85, 80, 82, 73, 71, + 72, 212, 85, 80, 80, 69, 82, 128, 85, 80, 80, 69, 210, 85, 80, 65, 68, + 72, 77, 65, 78, 73, 89, 65, 128, 85, 80, 45, 80, 79, 73, 78, 84, 73, 78, + 199, 85, 79, 78, 128, 85, 78, 78, 128, 85, 78, 77, 65, 82, 82, 73, 69, + 196, 85, 78, 75, 78, 79, 87, 78, 128, 85, 78, 75, 128, 85, 78, 73, 86, 69, 82, 83, 65, 204, 85, 78, 73, 84, 89, 128, 85, 78, 73, 84, 128, 85, 78, 73, 212, 85, 78, 73, 79, 78, 128, 85, 78, 73, 79, 206, 85, 78, 73, - 70, 73, 69, 196, 85, 78, 68, 207, 85, 78, 68, 69, 82, 84, 73, 69, 128, - 85, 78, 68, 69, 82, 76, 73, 78, 197, 85, 78, 68, 69, 82, 68, 79, 84, 128, - 85, 78, 68, 69, 82, 66, 65, 82, 128, 85, 78, 68, 69, 210, 85, 78, 67, 73, - 193, 85, 78, 67, 69, 82, 84, 65, 73, 78, 84, 217, 85, 78, 65, 83, 80, 73, - 82, 65, 84, 69, 68, 128, 85, 78, 65, 80, 128, 85, 78, 65, 77, 85, 83, 69, - 196, 85, 78, 65, 128, 85, 206, 85, 77, 85, 77, 128, 85, 77, 85, 205, 85, - 77, 66, 82, 69, 76, 76, 65, 128, 85, 77, 66, 82, 69, 76, 76, 193, 85, 77, - 66, 73, 78, 128, 85, 75, 85, 128, 85, 75, 82, 65, 73, 78, 73, 65, 206, - 85, 75, 65, 82, 65, 128, 85, 75, 65, 82, 193, 85, 75, 128, 85, 73, 76, - 76, 69, 65, 78, 78, 128, 85, 73, 71, 72, 85, 210, 85, 71, 65, 82, 73, 84, - 73, 195, 85, 69, 89, 128, 85, 69, 73, 128, 85, 69, 69, 128, 85, 69, 65, - 128, 85, 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 84, - 84, 193, 85, 68, 65, 65, 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, - 66, 85, 70, 73, 76, 73, 128, 85, 66, 72, 65, 89, 65, 84, 207, 85, 66, 65, - 68, 65, 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, 85, 65, 78, 71, - 128, 85, 65, 128, 85, 178, 85, 48, 52, 50, 128, 85, 48, 52, 49, 128, 85, - 48, 52, 48, 128, 85, 48, 51, 57, 128, 85, 48, 51, 56, 128, 85, 48, 51, - 55, 128, 85, 48, 51, 54, 128, 85, 48, 51, 53, 128, 85, 48, 51, 52, 128, - 85, 48, 51, 51, 128, 85, 48, 51, 50, 65, 128, 85, 48, 51, 50, 128, 85, - 48, 51, 49, 128, 85, 48, 51, 48, 128, 85, 48, 50, 57, 65, 128, 85, 48, - 50, 57, 128, 85, 48, 50, 56, 128, 85, 48, 50, 55, 128, 85, 48, 50, 54, - 128, 85, 48, 50, 53, 128, 85, 48, 50, 52, 128, 85, 48, 50, 51, 65, 128, - 85, 48, 50, 51, 128, 85, 48, 50, 50, 128, 85, 48, 50, 49, 128, 85, 48, - 50, 48, 128, 85, 48, 49, 57, 128, 85, 48, 49, 56, 128, 85, 48, 49, 55, - 128, 85, 48, 49, 54, 128, 85, 48, 49, 53, 128, 85, 48, 49, 52, 128, 85, - 48, 49, 51, 128, 85, 48, 49, 50, 128, 85, 48, 49, 49, 128, 85, 48, 49, - 48, 128, 85, 48, 48, 57, 128, 85, 48, 48, 56, 128, 85, 48, 48, 55, 128, - 85, 48, 48, 54, 66, 128, 85, 48, 48, 54, 65, 128, 85, 48, 48, 54, 128, - 85, 48, 48, 53, 128, 85, 48, 48, 52, 128, 85, 48, 48, 51, 128, 85, 48, - 48, 50, 128, 85, 48, 48, 49, 128, 85, 45, 83, 72, 65, 80, 69, 196, 85, - 45, 73, 45, 73, 128, 85, 45, 69, 79, 45, 69, 85, 128, 85, 45, 66, 82, 74, - 71, 85, 128, 84, 90, 85, 128, 84, 90, 79, 65, 128, 84, 90, 79, 128, 84, - 90, 73, 210, 84, 90, 73, 128, 84, 90, 69, 69, 128, 84, 90, 69, 128, 84, - 90, 65, 65, 128, 84, 90, 65, 128, 84, 90, 128, 84, 89, 210, 84, 89, 80, - 69, 45, 183, 84, 89, 80, 69, 45, 182, 84, 89, 80, 69, 45, 181, 84, 89, - 80, 69, 45, 180, 84, 89, 80, 69, 45, 179, 84, 89, 80, 69, 45, 178, 84, + 70, 73, 69, 196, 85, 78, 73, 67, 79, 82, 206, 85, 78, 68, 207, 85, 78, + 68, 69, 82, 84, 73, 69, 128, 85, 78, 68, 69, 82, 76, 73, 78, 197, 85, 78, + 68, 69, 82, 68, 79, 84, 128, 85, 78, 68, 69, 82, 66, 65, 82, 128, 85, 78, + 68, 69, 82, 128, 85, 78, 68, 69, 210, 85, 78, 67, 73, 193, 85, 78, 67, + 69, 82, 84, 65, 73, 78, 84, 217, 85, 78, 65, 83, 80, 73, 82, 65, 84, 69, + 68, 128, 85, 78, 65, 80, 128, 85, 78, 65, 77, 85, 83, 69, 196, 85, 78, + 65, 128, 85, 206, 85, 77, 85, 77, 128, 85, 77, 85, 205, 85, 77, 66, 82, + 69, 76, 76, 65, 128, 85, 77, 66, 82, 69, 76, 76, 193, 85, 77, 66, 73, 78, + 128, 85, 75, 85, 128, 85, 75, 82, 65, 73, 78, 73, 65, 206, 85, 75, 65, + 82, 65, 128, 85, 75, 65, 82, 193, 85, 75, 128, 85, 73, 76, 76, 69, 65, + 78, 78, 128, 85, 73, 71, 72, 85, 210, 85, 71, 65, 82, 73, 84, 73, 195, + 85, 69, 89, 128, 85, 69, 73, 128, 85, 69, 69, 128, 85, 69, 65, 128, 85, + 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 84, 84, 193, + 85, 68, 65, 65, 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66, 85, + 70, 73, 76, 73, 128, 85, 66, 72, 65, 89, 65, 84, 207, 85, 66, 65, 68, 65, + 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, 85, 65, 78, 71, 128, 85, + 65, 128, 85, 178, 85, 48, 52, 50, 128, 85, 48, 52, 49, 128, 85, 48, 52, + 48, 128, 85, 48, 51, 57, 128, 85, 48, 51, 56, 128, 85, 48, 51, 55, 128, + 85, 48, 51, 54, 128, 85, 48, 51, 53, 128, 85, 48, 51, 52, 128, 85, 48, + 51, 51, 128, 85, 48, 51, 50, 65, 128, 85, 48, 51, 50, 128, 85, 48, 51, + 49, 128, 85, 48, 51, 48, 128, 85, 48, 50, 57, 65, 128, 85, 48, 50, 57, + 128, 85, 48, 50, 56, 128, 85, 48, 50, 55, 128, 85, 48, 50, 54, 128, 85, + 48, 50, 53, 128, 85, 48, 50, 52, 128, 85, 48, 50, 51, 65, 128, 85, 48, + 50, 51, 128, 85, 48, 50, 50, 128, 85, 48, 50, 49, 128, 85, 48, 50, 48, + 128, 85, 48, 49, 57, 128, 85, 48, 49, 56, 128, 85, 48, 49, 55, 128, 85, + 48, 49, 54, 128, 85, 48, 49, 53, 128, 85, 48, 49, 52, 128, 85, 48, 49, + 51, 128, 85, 48, 49, 50, 128, 85, 48, 49, 49, 128, 85, 48, 49, 48, 128, + 85, 48, 48, 57, 128, 85, 48, 48, 56, 128, 85, 48, 48, 55, 128, 85, 48, + 48, 54, 66, 128, 85, 48, 48, 54, 65, 128, 85, 48, 48, 54, 128, 85, 48, + 48, 53, 128, 85, 48, 48, 52, 128, 85, 48, 48, 51, 128, 85, 48, 48, 50, + 128, 85, 48, 48, 49, 128, 85, 45, 83, 72, 65, 80, 69, 196, 85, 45, 73, + 45, 73, 128, 85, 45, 69, 79, 45, 69, 85, 128, 85, 45, 66, 82, 74, 71, 85, + 128, 84, 90, 85, 128, 84, 90, 79, 65, 128, 84, 90, 79, 128, 84, 90, 73, + 210, 84, 90, 73, 128, 84, 90, 69, 69, 128, 84, 90, 69, 128, 84, 90, 65, + 65, 128, 84, 90, 65, 128, 84, 90, 128, 84, 89, 210, 84, 89, 80, 69, 45, + 183, 84, 89, 80, 69, 45, 54, 128, 84, 89, 80, 69, 45, 182, 84, 89, 80, + 69, 45, 53, 128, 84, 89, 80, 69, 45, 181, 84, 89, 80, 69, 45, 52, 128, + 84, 89, 80, 69, 45, 180, 84, 89, 80, 69, 45, 51, 128, 84, 89, 80, 69, 45, + 179, 84, 89, 80, 69, 45, 178, 84, 89, 80, 69, 45, 49, 45, 50, 128, 84, 89, 80, 69, 45, 177, 84, 89, 80, 197, 84, 89, 79, 128, 84, 89, 73, 128, 84, 89, 69, 128, 84, 89, 65, 89, 128, 84, 89, 65, 128, 84, 88, 87, 86, 128, 84, 88, 87, 214, 84, 88, 72, 69, 69, 202, 84, 87, 79, 79, 128, 84, 87, 79, 45, 87, 65, 217, 84, 87, 79, 45, 84, 72, 73, 82, 84, 89, 128, 84, 87, 79, 45, 76, 73, 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 69, 196, 84, - 87, 79, 45, 69, 205, 84, 87, 73, 83, 84, 69, 196, 84, 87, 73, 73, 128, - 84, 87, 73, 128, 84, 87, 69, 78, 84, 89, 45, 84, 87, 79, 128, 84, 87, 69, - 78, 84, 89, 45, 84, 72, 82, 69, 69, 128, 84, 87, 69, 78, 84, 89, 45, 83, - 73, 88, 128, 84, 87, 69, 78, 84, 89, 45, 83, 69, 86, 69, 78, 128, 84, 87, - 69, 78, 84, 89, 45, 79, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 78, 73, - 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 70, 79, 85, 82, 128, 84, 87, 69, - 78, 84, 89, 45, 70, 73, 86, 69, 128, 84, 87, 69, 78, 84, 89, 45, 69, 73, - 71, 72, 84, 200, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, 128, 84, - 87, 69, 78, 84, 89, 128, 84, 87, 69, 78, 84, 217, 84, 87, 69, 76, 86, 69, - 45, 84, 72, 73, 82, 84, 89, 128, 84, 87, 69, 76, 86, 69, 128, 84, 87, 69, - 76, 86, 197, 84, 87, 69, 128, 84, 87, 65, 65, 128, 84, 87, 65, 128, 84, - 86, 82, 73, 68, 79, 128, 84, 86, 73, 77, 65, 68, 85, 210, 84, 85, 88, - 128, 84, 85, 85, 77, 85, 128, 84, 85, 85, 128, 84, 85, 84, 84, 89, 128, - 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 84, 85, 84, 128, 84, 85, 82, 88, - 128, 84, 85, 82, 85, 128, 84, 85, 82, 84, 76, 69, 128, 84, 85, 82, 79, - 50, 128, 84, 85, 82, 78, 83, 84, 73, 76, 69, 128, 84, 85, 82, 206, 84, - 85, 82, 75, 73, 83, 200, 84, 85, 82, 75, 73, 195, 84, 85, 82, 66, 65, 78, - 128, 84, 85, 82, 128, 84, 85, 80, 128, 84, 85, 79, 88, 128, 84, 85, 79, - 84, 128, 84, 85, 79, 80, 128, 84, 85, 79, 128, 84, 85, 78, 78, 89, 128, - 84, 85, 77, 69, 84, 69, 83, 128, 84, 85, 77, 65, 69, 128, 84, 85, 77, - 128, 84, 85, 76, 73, 80, 128, 84, 85, 75, 87, 69, 78, 84, 73, 83, 128, - 84, 85, 75, 128, 84, 85, 71, 82, 73, 203, 84, 85, 71, 50, 128, 84, 85, - 71, 178, 84, 85, 66, 128, 84, 85, 65, 82, 69, 199, 84, 85, 65, 69, 80, - 128, 84, 85, 65, 69, 128, 84, 213, 84, 84, 85, 85, 128, 84, 84, 85, 68, - 68, 65, 71, 128, 84, 84, 85, 68, 68, 65, 65, 71, 128, 84, 84, 85, 128, - 84, 84, 84, 72, 65, 128, 84, 84, 84, 65, 128, 84, 84, 83, 85, 128, 84, - 84, 83, 79, 128, 84, 84, 83, 73, 128, 84, 84, 83, 69, 69, 128, 84, 84, - 83, 69, 128, 84, 84, 83, 65, 128, 84, 84, 79, 79, 128, 84, 84, 73, 73, - 128, 84, 84, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, 72, 85, 128, 84, - 84, 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, 84, - 72, 69, 69, 128, 84, 84, 72, 69, 128, 84, 84, 72, 65, 65, 128, 84, 84, - 72, 128, 84, 84, 69, 72, 69, 72, 128, 84, 84, 69, 72, 69, 200, 84, 84, - 69, 72, 128, 84, 84, 69, 200, 84, 84, 69, 69, 128, 84, 84, 65, 89, 65, - 78, 78, 65, 128, 84, 84, 65, 85, 128, 84, 84, 65, 73, 128, 84, 84, 65, - 65, 128, 84, 84, 50, 128, 84, 83, 87, 69, 128, 84, 83, 87, 66, 128, 84, - 83, 87, 65, 128, 84, 83, 86, 128, 84, 83, 83, 69, 128, 84, 83, 83, 65, - 128, 84, 83, 79, 214, 84, 83, 73, 85, 128, 84, 83, 72, 85, 71, 83, 128, - 84, 83, 72, 79, 79, 75, 128, 84, 83, 72, 79, 79, 203, 84, 83, 72, 79, 79, - 74, 128, 84, 83, 72, 69, 83, 128, 84, 83, 72, 69, 71, 128, 84, 83, 72, - 69, 199, 84, 83, 72, 69, 69, 74, 128, 84, 83, 72, 69, 128, 84, 83, 72, - 65, 194, 84, 83, 72, 65, 128, 84, 83, 69, 82, 69, 128, 84, 83, 69, 69, - 66, 128, 84, 83, 65, 68, 73, 128, 84, 83, 65, 68, 201, 84, 83, 65, 66, - 128, 84, 83, 65, 65, 68, 73, 89, 128, 84, 83, 65, 65, 128, 84, 83, 193, - 84, 82, 89, 66, 76, 73, 79, 206, 84, 82, 85, 84, 72, 128, 84, 82, 85, 78, - 75, 128, 84, 82, 85, 78, 67, 65, 84, 69, 196, 84, 82, 85, 77, 80, 69, 84, - 128, 84, 82, 85, 77, 80, 45, 57, 128, 84, 82, 85, 77, 80, 45, 56, 128, - 84, 82, 85, 77, 80, 45, 55, 128, 84, 82, 85, 77, 80, 45, 54, 128, 84, 82, - 85, 77, 80, 45, 53, 128, 84, 82, 85, 77, 80, 45, 52, 128, 84, 82, 85, 77, - 80, 45, 51, 128, 84, 82, 85, 77, 80, 45, 50, 49, 128, 84, 82, 85, 77, 80, - 45, 50, 48, 128, 84, 82, 85, 77, 80, 45, 50, 128, 84, 82, 85, 77, 80, 45, - 49, 57, 128, 84, 82, 85, 77, 80, 45, 49, 56, 128, 84, 82, 85, 77, 80, 45, - 49, 55, 128, 84, 82, 85, 77, 80, 45, 49, 54, 128, 84, 82, 85, 77, 80, 45, - 49, 53, 128, 84, 82, 85, 77, 80, 45, 49, 52, 128, 84, 82, 85, 77, 80, 45, - 49, 51, 128, 84, 82, 85, 77, 80, 45, 49, 50, 128, 84, 82, 85, 77, 80, 45, - 49, 49, 128, 84, 82, 85, 77, 80, 45, 49, 48, 128, 84, 82, 85, 77, 80, 45, - 49, 128, 84, 82, 85, 69, 128, 84, 82, 85, 67, 75, 128, 84, 82, 79, 80, - 73, 67, 65, 204, 84, 82, 79, 80, 72, 89, 128, 84, 82, 79, 77, 73, 75, 79, - 83, 89, 78, 65, 71, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79, 80, 83, 73, - 70, 73, 83, 84, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, 80, 65, 82, 65, - 75, 65, 76, 69, 83, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79, 78, 128, 84, - 82, 79, 77, 73, 75, 79, 206, 84, 82, 79, 77, 73, 75, 79, 76, 89, 71, 73, - 83, 77, 65, 128, 84, 82, 79, 76, 76, 69, 89, 66, 85, 83, 128, 84, 82, 79, - 75, 85, 84, 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, 84, - 82, 73, 85, 77, 80, 72, 128, 84, 82, 73, 84, 79, 211, 84, 82, 73, 84, 73, - 77, 79, 82, 73, 79, 78, 128, 84, 82, 73, 83, 73, 77, 79, 85, 128, 84, 82, - 73, 83, 69, 77, 69, 128, 84, 82, 73, 80, 79, 68, 128, 84, 82, 73, 80, 76, - 73, 128, 84, 82, 73, 80, 76, 197, 84, 82, 73, 79, 206, 84, 82, 73, 76, - 76, 73, 79, 78, 83, 128, 84, 82, 73, 73, 83, 65, 80, 128, 84, 82, 73, 71, - 82, 65, 77, 77, 79, 211, 84, 82, 73, 71, 82, 65, 205, 84, 82, 73, 71, 79, - 82, 71, 79, 78, 128, 84, 82, 73, 70, 79, 78, 73, 65, 83, 128, 84, 82, 73, - 70, 79, 76, 73, 65, 84, 197, 84, 82, 73, 68, 69, 78, 84, 128, 84, 82, 73, - 68, 69, 78, 212, 84, 82, 73, 67, 79, 76, 79, 78, 128, 84, 82, 73, 65, 78, - 71, 85, 76, 65, 210, 84, 82, 73, 65, 78, 71, 76, 69, 45, 82, 79, 85, 78, - 196, 84, 82, 73, 65, 78, 71, 76, 69, 45, 72, 69, 65, 68, 69, 196, 84, 82, - 73, 65, 78, 71, 76, 69, 128, 84, 82, 73, 65, 78, 71, 76, 197, 84, 82, 73, - 65, 128, 84, 82, 73, 128, 84, 82, 69, 83, 73, 76, 76, 79, 128, 84, 82, - 69, 78, 68, 128, 84, 82, 69, 78, 196, 84, 82, 69, 77, 79, 76, 79, 45, 51, - 128, 84, 82, 69, 77, 79, 76, 79, 45, 50, 128, 84, 82, 69, 77, 79, 76, 79, - 45, 49, 128, 84, 82, 69, 69, 128, 84, 82, 69, 197, 84, 82, 69, 65, 68, - 73, 78, 71, 128, 84, 82, 65, 89, 128, 84, 82, 65, 80, 69, 90, 73, 85, 77, - 128, 84, 82, 65, 78, 83, 86, 69, 82, 83, 65, 204, 84, 82, 65, 78, 83, 80, - 79, 83, 73, 84, 73, 79, 206, 84, 82, 65, 78, 83, 77, 73, 212, 84, 82, 65, - 78, 83, 77, 73, 83, 83, 73, 79, 78, 128, 84, 82, 65, 78, 83, 77, 73, 83, - 83, 73, 79, 206, 84, 82, 65, 77, 87, 65, 89, 128, 84, 82, 65, 77, 128, - 84, 82, 65, 205, 84, 82, 65, 73, 78, 128, 84, 82, 65, 73, 206, 84, 82, - 65, 73, 76, 73, 78, 199, 84, 82, 65, 70, 70, 73, 67, 128, 84, 82, 65, 70, - 70, 73, 195, 84, 82, 65, 68, 197, 84, 82, 65, 67, 84, 79, 82, 128, 84, - 82, 65, 67, 75, 66, 65, 76, 76, 128, 84, 82, 65, 67, 75, 128, 84, 82, 65, - 128, 84, 82, 128, 84, 79, 88, 128, 84, 79, 87, 69, 82, 128, 84, 79, 86, - 128, 84, 79, 85, 82, 78, 79, 73, 211, 84, 79, 85, 67, 72, 84, 79, 78, - 197, 84, 79, 84, 65, 204, 84, 79, 84, 128, 84, 79, 83, 128, 84, 79, 82, - 84, 79, 73, 83, 197, 84, 79, 82, 78, 65, 68, 79, 128, 84, 79, 82, 67, 85, - 76, 85, 83, 128, 84, 79, 82, 67, 85, 76, 85, 211, 84, 79, 82, 67, 72, - 128, 84, 79, 81, 128, 84, 79, 80, 66, 65, 82, 128, 84, 79, 80, 45, 76, - 73, 71, 72, 84, 69, 196, 84, 79, 80, 128, 84, 79, 208, 84, 79, 79, 84, - 72, 128, 84, 79, 79, 78, 128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, - 85, 69, 128, 84, 79, 78, 71, 85, 197, 84, 79, 78, 71, 128, 84, 79, 78, - 69, 45, 56, 128, 84, 79, 78, 69, 45, 55, 128, 84, 79, 78, 69, 45, 54, - 128, 84, 79, 78, 69, 45, 53, 128, 84, 79, 78, 69, 45, 52, 128, 84, 79, - 78, 69, 45, 51, 128, 84, 79, 78, 69, 45, 50, 128, 84, 79, 78, 69, 45, 49, - 128, 84, 79, 78, 69, 128, 84, 79, 78, 65, 204, 84, 79, 77, 80, 73, 128, - 84, 79, 77, 65, 84, 79, 128, 84, 79, 76, 79, 78, 71, 128, 84, 79, 75, 89, - 207, 84, 79, 73, 76, 69, 84, 128, 84, 79, 71, 69, 84, 72, 69, 82, 128, - 84, 79, 68, 207, 84, 79, 65, 78, 68, 65, 75, 72, 73, 65, 84, 128, 84, 79, - 65, 128, 84, 78, 128, 84, 76, 86, 128, 84, 76, 85, 128, 84, 76, 79, 128, - 84, 76, 73, 128, 84, 76, 72, 89, 65, 128, 84, 76, 72, 87, 69, 128, 84, - 76, 72, 85, 128, 84, 76, 72, 79, 79, 128, 84, 76, 72, 79, 128, 84, 76, - 72, 73, 128, 84, 76, 72, 69, 69, 128, 84, 76, 72, 69, 128, 84, 76, 72, - 65, 128, 84, 76, 69, 69, 128, 84, 76, 65, 128, 84, 74, 69, 128, 84, 73, - 88, 128, 84, 73, 87, 82, 128, 84, 73, 87, 78, 128, 84, 73, 87, 65, 218, - 84, 73, 84, 85, 65, 69, 80, 128, 84, 73, 84, 76, 79, 128, 84, 73, 84, - 193, 84, 73, 84, 128, 84, 73, 82, 89, 65, 75, 128, 84, 73, 82, 84, 193, - 84, 73, 82, 79, 78, 73, 65, 206, 84, 73, 82, 72, 85, 84, 193, 84, 73, 82, - 69, 196, 84, 73, 82, 128, 84, 73, 210, 84, 73, 80, 80, 73, 128, 84, 73, - 80, 69, 72, 65, 128, 84, 73, 80, 128, 84, 73, 208, 84, 73, 78, 89, 128, - 84, 73, 78, 217, 84, 73, 78, 78, 69, 128, 84, 73, 78, 67, 84, 85, 82, 69, - 128, 84, 73, 78, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73, - 77, 69, 210, 84, 73, 77, 69, 128, 84, 73, 76, 69, 83, 128, 84, 73, 76, - 68, 69, 128, 84, 73, 76, 68, 197, 84, 73, 76, 128, 84, 73, 204, 84, 73, - 75, 69, 85, 84, 45, 84, 72, 73, 69, 85, 84, 72, 128, 84, 73, 75, 69, 85, - 84, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, 69, - 85, 84, 45, 83, 73, 79, 83, 128, 84, 73, 75, 69, 85, 84, 45, 82, 73, 69, - 85, 76, 128, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 84, 73, - 75, 69, 85, 84, 45, 77, 73, 69, 85, 77, 128, 84, 73, 75, 69, 85, 84, 45, - 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 45, 67, 73, 69, 85, - 67, 128, 84, 73, 75, 69, 85, 84, 45, 67, 72, 73, 69, 85, 67, 72, 128, 84, - 73, 75, 69, 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73, 71, 72, 84, 76, - 89, 45, 67, 76, 79, 83, 69, 196, 84, 73, 71, 72, 212, 84, 73, 71, 69, 82, - 128, 84, 73, 71, 69, 210, 84, 73, 70, 73, 78, 65, 71, 200, 84, 73, 69, - 88, 128, 84, 73, 69, 80, 128, 84, 73, 197, 84, 73, 67, 75, 69, 84, 83, - 128, 84, 73, 67, 75, 69, 84, 128, 84, 73, 67, 75, 128, 84, 73, 67, 203, - 84, 73, 65, 82, 65, 128, 84, 73, 50, 128, 84, 72, 90, 128, 84, 72, 89, - 79, 79, 205, 84, 72, 87, 79, 79, 128, 84, 72, 87, 79, 128, 84, 72, 87, - 73, 73, 128, 84, 72, 87, 73, 128, 84, 72, 87, 69, 69, 128, 84, 72, 87, - 65, 65, 128, 84, 72, 87, 65, 128, 84, 72, 85, 82, 211, 84, 72, 85, 82, - 73, 83, 65, 218, 84, 72, 85, 78, 71, 128, 84, 72, 85, 78, 68, 69, 82, 83, - 84, 79, 82, 77, 128, 84, 72, 85, 78, 68, 69, 82, 128, 84, 72, 85, 78, 68, - 69, 210, 84, 72, 85, 77, 66, 211, 84, 72, 82, 79, 87, 73, 78, 199, 84, - 72, 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 84, 72, 82, 69, - 69, 45, 84, 72, 73, 82, 84, 89, 128, 84, 72, 82, 69, 69, 45, 80, 69, 82, + 87, 79, 45, 69, 205, 84, 87, 79, 45, 67, 73, 82, 67, 76, 197, 84, 87, 73, + 83, 84, 73, 78, 71, 128, 84, 87, 73, 83, 84, 69, 196, 84, 87, 73, 73, + 128, 84, 87, 73, 128, 84, 87, 69, 78, 84, 89, 45, 84, 87, 79, 128, 84, + 87, 69, 78, 84, 89, 45, 84, 72, 82, 69, 69, 128, 84, 87, 69, 78, 84, 89, + 45, 83, 73, 88, 128, 84, 87, 69, 78, 84, 89, 45, 83, 69, 86, 69, 78, 128, + 84, 87, 69, 78, 84, 89, 45, 79, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, + 78, 73, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 70, 79, 85, 82, 128, 84, + 87, 69, 78, 84, 89, 45, 70, 73, 86, 69, 128, 84, 87, 69, 78, 84, 89, 45, + 69, 73, 71, 72, 84, 200, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, + 128, 84, 87, 69, 78, 84, 89, 128, 84, 87, 69, 78, 84, 217, 84, 87, 69, + 76, 86, 69, 45, 84, 72, 73, 82, 84, 89, 128, 84, 87, 69, 76, 86, 69, 128, + 84, 87, 69, 76, 86, 197, 84, 87, 69, 76, 70, 84, 72, 83, 128, 84, 87, 69, + 76, 70, 84, 72, 128, 84, 87, 69, 128, 84, 87, 65, 65, 128, 84, 87, 65, + 128, 84, 86, 82, 73, 68, 79, 128, 84, 86, 73, 77, 65, 68, 85, 210, 84, + 85, 88, 128, 84, 85, 85, 77, 85, 128, 84, 85, 85, 128, 84, 85, 84, 84, + 89, 128, 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 84, 85, 84, 128, 84, + 85, 82, 88, 128, 84, 85, 82, 85, 128, 84, 85, 82, 84, 76, 69, 128, 84, + 85, 82, 79, 50, 128, 84, 85, 82, 78, 83, 84, 73, 76, 69, 128, 84, 85, 82, + 78, 69, 196, 84, 85, 82, 206, 84, 85, 82, 75, 73, 83, 200, 84, 85, 82, + 75, 73, 195, 84, 85, 82, 75, 69, 89, 128, 84, 85, 82, 66, 65, 78, 128, + 84, 85, 82, 128, 84, 85, 80, 128, 84, 85, 79, 88, 128, 84, 85, 79, 84, + 128, 84, 85, 79, 80, 128, 84, 85, 79, 128, 84, 85, 78, 78, 89, 128, 84, + 85, 77, 69, 84, 69, 83, 128, 84, 85, 77, 65, 69, 128, 84, 85, 77, 128, + 84, 85, 205, 84, 85, 76, 73, 80, 128, 84, 85, 75, 87, 69, 78, 84, 73, 83, + 128, 84, 85, 75, 128, 84, 85, 71, 82, 73, 203, 84, 85, 71, 50, 128, 84, + 85, 71, 178, 84, 85, 66, 128, 84, 85, 65, 82, 69, 199, 84, 85, 65, 69, + 80, 128, 84, 85, 65, 69, 128, 84, 213, 84, 84, 85, 85, 128, 84, 84, 85, + 68, 68, 65, 71, 128, 84, 84, 85, 68, 68, 65, 65, 71, 128, 84, 84, 85, + 128, 84, 84, 84, 72, 65, 128, 84, 84, 84, 65, 128, 84, 84, 83, 85, 128, + 84, 84, 83, 79, 128, 84, 84, 83, 73, 128, 84, 84, 83, 69, 69, 128, 84, + 84, 83, 69, 128, 84, 84, 83, 65, 128, 84, 84, 79, 79, 128, 84, 84, 73, + 73, 128, 84, 84, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, 72, 85, 128, + 84, 84, 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, + 84, 72, 69, 69, 128, 84, 84, 72, 69, 128, 84, 84, 72, 65, 65, 128, 84, + 84, 72, 128, 84, 84, 69, 72, 69, 72, 128, 84, 84, 69, 72, 69, 200, 84, + 84, 69, 72, 128, 84, 84, 69, 200, 84, 84, 69, 69, 128, 84, 84, 65, 89, + 65, 78, 78, 65, 128, 84, 84, 65, 85, 128, 84, 84, 65, 73, 128, 84, 84, + 65, 65, 128, 84, 84, 50, 128, 84, 83, 87, 69, 128, 84, 83, 87, 66, 128, + 84, 83, 87, 65, 128, 84, 83, 86, 128, 84, 83, 83, 69, 128, 84, 83, 83, + 65, 128, 84, 83, 79, 214, 84, 83, 73, 85, 128, 84, 83, 72, 85, 71, 83, + 128, 84, 83, 72, 79, 79, 75, 128, 84, 83, 72, 79, 79, 203, 84, 83, 72, + 79, 79, 74, 128, 84, 83, 72, 69, 83, 128, 84, 83, 72, 69, 71, 128, 84, + 83, 72, 69, 199, 84, 83, 72, 69, 69, 74, 128, 84, 83, 72, 69, 128, 84, + 83, 72, 65, 194, 84, 83, 72, 65, 128, 84, 83, 69, 82, 69, 128, 84, 83, + 69, 69, 66, 128, 84, 83, 65, 68, 73, 128, 84, 83, 65, 68, 201, 84, 83, + 65, 66, 128, 84, 83, 65, 65, 68, 73, 89, 128, 84, 83, 65, 65, 128, 84, + 83, 193, 84, 82, 89, 66, 76, 73, 79, 206, 84, 82, 85, 84, 72, 128, 84, + 82, 85, 78, 75, 128, 84, 82, 85, 78, 67, 65, 84, 69, 196, 84, 82, 85, 77, + 80, 69, 84, 128, 84, 82, 85, 77, 80, 45, 57, 128, 84, 82, 85, 77, 80, 45, + 56, 128, 84, 82, 85, 77, 80, 45, 55, 128, 84, 82, 85, 77, 80, 45, 54, + 128, 84, 82, 85, 77, 80, 45, 53, 128, 84, 82, 85, 77, 80, 45, 52, 128, + 84, 82, 85, 77, 80, 45, 51, 128, 84, 82, 85, 77, 80, 45, 50, 49, 128, 84, + 82, 85, 77, 80, 45, 50, 48, 128, 84, 82, 85, 77, 80, 45, 50, 128, 84, 82, + 85, 77, 80, 45, 49, 57, 128, 84, 82, 85, 77, 80, 45, 49, 56, 128, 84, 82, + 85, 77, 80, 45, 49, 55, 128, 84, 82, 85, 77, 80, 45, 49, 54, 128, 84, 82, + 85, 77, 80, 45, 49, 53, 128, 84, 82, 85, 77, 80, 45, 49, 52, 128, 84, 82, + 85, 77, 80, 45, 49, 51, 128, 84, 82, 85, 77, 80, 45, 49, 50, 128, 84, 82, + 85, 77, 80, 45, 49, 49, 128, 84, 82, 85, 77, 80, 45, 49, 48, 128, 84, 82, + 85, 77, 80, 45, 49, 128, 84, 82, 85, 69, 128, 84, 82, 85, 67, 75, 128, + 84, 82, 79, 80, 73, 67, 65, 204, 84, 82, 79, 80, 72, 89, 128, 84, 82, 79, + 77, 73, 75, 79, 83, 89, 78, 65, 71, 77, 65, 128, 84, 82, 79, 77, 73, 75, + 79, 80, 83, 73, 70, 73, 83, 84, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, + 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 84, 82, 79, 77, 73, 75, + 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, 206, 84, 82, 79, 77, 73, 75, 79, + 76, 89, 71, 73, 83, 77, 65, 128, 84, 82, 79, 76, 76, 69, 89, 66, 85, 83, + 128, 84, 82, 79, 75, 85, 84, 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, + 73, 65, 206, 84, 82, 73, 85, 77, 80, 72, 128, 84, 82, 73, 84, 79, 211, + 84, 82, 73, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 82, 73, 83, 73, 77, + 79, 85, 128, 84, 82, 73, 83, 69, 77, 69, 128, 84, 82, 73, 80, 79, 68, + 128, 84, 82, 73, 80, 76, 73, 128, 84, 82, 73, 80, 76, 69, 128, 84, 82, + 73, 80, 76, 197, 84, 82, 73, 79, 206, 84, 82, 73, 76, 76, 73, 79, 78, 83, + 128, 84, 82, 73, 73, 83, 65, 80, 128, 84, 82, 73, 71, 82, 65, 77, 77, 79, + 211, 84, 82, 73, 71, 82, 65, 205, 84, 82, 73, 71, 79, 82, 71, 79, 78, + 128, 84, 82, 73, 70, 79, 78, 73, 65, 83, 128, 84, 82, 73, 70, 79, 76, 73, + 65, 84, 197, 84, 82, 73, 68, 69, 78, 84, 128, 84, 82, 73, 68, 69, 78, + 212, 84, 82, 73, 67, 79, 76, 79, 78, 128, 84, 82, 73, 65, 78, 71, 85, 76, + 65, 210, 84, 82, 73, 65, 78, 71, 76, 69, 45, 82, 79, 85, 78, 196, 84, 82, + 73, 65, 78, 71, 76, 69, 45, 72, 69, 65, 68, 69, 196, 84, 82, 73, 65, 78, + 71, 76, 69, 128, 84, 82, 73, 65, 78, 71, 76, 197, 84, 82, 73, 65, 128, + 84, 82, 73, 128, 84, 82, 69, 83, 73, 76, 76, 79, 128, 84, 82, 69, 78, 68, + 128, 84, 82, 69, 78, 196, 84, 82, 69, 77, 79, 76, 79, 45, 51, 128, 84, + 82, 69, 77, 79, 76, 79, 45, 50, 128, 84, 82, 69, 77, 79, 76, 79, 45, 49, + 128, 84, 82, 69, 69, 128, 84, 82, 69, 197, 84, 82, 69, 65, 68, 73, 78, + 71, 128, 84, 82, 65, 89, 128, 84, 82, 65, 86, 69, 76, 45, 87, 65, 76, 76, + 80, 76, 65, 78, 197, 84, 82, 65, 86, 69, 76, 45, 70, 76, 79, 79, 82, 80, + 76, 65, 78, 197, 84, 82, 65, 80, 69, 90, 73, 85, 77, 128, 84, 82, 65, 78, + 83, 86, 69, 82, 83, 65, 204, 84, 82, 65, 78, 83, 80, 79, 83, 73, 84, 73, + 79, 206, 84, 82, 65, 78, 83, 77, 73, 212, 84, 82, 65, 78, 83, 77, 73, 83, + 83, 73, 79, 78, 128, 84, 82, 65, 78, 83, 77, 73, 83, 83, 73, 79, 206, 84, + 82, 65, 77, 87, 65, 89, 128, 84, 82, 65, 77, 128, 84, 82, 65, 205, 84, + 82, 65, 73, 78, 128, 84, 82, 65, 73, 206, 84, 82, 65, 73, 76, 73, 78, + 199, 84, 82, 65, 70, 70, 73, 67, 128, 84, 82, 65, 70, 70, 73, 195, 84, + 82, 65, 68, 197, 84, 82, 65, 67, 84, 79, 82, 128, 84, 82, 65, 67, 75, 66, + 65, 76, 76, 128, 84, 82, 65, 67, 75, 128, 84, 82, 65, 128, 84, 82, 128, + 84, 79, 88, 128, 84, 79, 87, 69, 82, 128, 84, 79, 87, 65, 82, 68, 211, + 84, 79, 86, 128, 84, 79, 85, 82, 78, 79, 73, 211, 84, 79, 85, 67, 72, 84, + 79, 78, 197, 84, 79, 85, 67, 72, 73, 78, 199, 84, 79, 85, 67, 72, 69, + 211, 84, 79, 85, 67, 200, 84, 79, 84, 65, 204, 84, 79, 84, 128, 84, 79, + 83, 128, 84, 79, 82, 84, 79, 73, 83, 197, 84, 79, 82, 83, 79, 45, 87, 65, + 76, 76, 80, 76, 65, 78, 197, 84, 79, 82, 83, 79, 45, 70, 76, 79, 79, 82, + 80, 76, 65, 78, 197, 84, 79, 82, 83, 79, 128, 84, 79, 82, 78, 65, 68, 79, + 128, 84, 79, 82, 67, 85, 76, 85, 83, 128, 84, 79, 82, 67, 85, 76, 85, + 211, 84, 79, 82, 67, 72, 128, 84, 79, 81, 128, 84, 79, 80, 66, 65, 82, + 128, 84, 79, 80, 45, 76, 73, 71, 72, 84, 69, 196, 84, 79, 80, 128, 84, + 79, 208, 84, 79, 79, 84, 72, 128, 84, 79, 79, 78, 128, 84, 79, 78, 79, + 83, 128, 84, 79, 78, 71, 85, 69, 128, 84, 79, 78, 71, 85, 197, 84, 79, + 78, 71, 128, 84, 79, 78, 69, 45, 56, 128, 84, 79, 78, 69, 45, 55, 128, + 84, 79, 78, 69, 45, 54, 128, 84, 79, 78, 69, 45, 53, 128, 84, 79, 78, 69, + 45, 52, 128, 84, 79, 78, 69, 45, 51, 128, 84, 79, 78, 69, 45, 50, 128, + 84, 79, 78, 69, 45, 49, 128, 84, 79, 78, 69, 128, 84, 79, 78, 65, 204, + 84, 79, 77, 80, 73, 128, 84, 79, 77, 65, 84, 79, 128, 84, 79, 76, 79, 78, + 71, 128, 84, 79, 75, 89, 207, 84, 79, 73, 76, 69, 84, 128, 84, 79, 71, + 69, 84, 72, 69, 82, 128, 84, 79, 68, 207, 84, 79, 65, 78, 68, 65, 75, 72, + 73, 65, 84, 128, 84, 79, 65, 128, 84, 78, 128, 84, 76, 86, 128, 84, 76, + 85, 128, 84, 76, 79, 128, 84, 76, 73, 128, 84, 76, 72, 89, 65, 128, 84, + 76, 72, 87, 69, 128, 84, 76, 72, 85, 128, 84, 76, 72, 79, 79, 128, 84, + 76, 72, 79, 128, 84, 76, 72, 73, 128, 84, 76, 72, 69, 69, 128, 84, 76, + 72, 69, 128, 84, 76, 72, 65, 128, 84, 76, 69, 69, 128, 84, 76, 65, 128, + 84, 74, 69, 128, 84, 73, 88, 128, 84, 73, 87, 82, 128, 84, 73, 87, 78, + 128, 84, 73, 87, 65, 218, 84, 73, 84, 85, 65, 69, 80, 128, 84, 73, 84, + 76, 79, 128, 84, 73, 84, 76, 207, 84, 73, 84, 193, 84, 73, 84, 128, 84, + 73, 82, 89, 65, 75, 128, 84, 73, 82, 84, 193, 84, 73, 82, 79, 78, 73, 65, + 206, 84, 73, 82, 72, 85, 84, 193, 84, 73, 82, 69, 196, 84, 73, 82, 128, + 84, 73, 210, 84, 73, 80, 80, 73, 128, 84, 73, 80, 69, 72, 65, 128, 84, + 73, 80, 128, 84, 73, 208, 84, 73, 78, 89, 128, 84, 73, 78, 217, 84, 73, + 78, 78, 69, 128, 84, 73, 78, 67, 84, 85, 82, 69, 128, 84, 73, 78, 65, 71, + 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73, 77, 69, 210, 84, 73, 77, + 69, 128, 84, 73, 76, 84, 73, 78, 71, 128, 84, 73, 76, 84, 73, 78, 199, + 84, 73, 76, 84, 128, 84, 73, 76, 69, 83, 128, 84, 73, 76, 68, 69, 128, + 84, 73, 76, 68, 197, 84, 73, 76, 128, 84, 73, 204, 84, 73, 75, 69, 85, + 84, 45, 84, 72, 73, 69, 85, 84, 72, 128, 84, 73, 75, 69, 85, 84, 45, 83, + 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 45, + 83, 73, 79, 83, 128, 84, 73, 75, 69, 85, 84, 45, 82, 73, 69, 85, 76, 128, + 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 84, 73, 75, 69, 85, + 84, 45, 77, 73, 69, 85, 77, 128, 84, 73, 75, 69, 85, 84, 45, 75, 73, 89, + 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 45, 67, 73, 69, 85, 67, 128, 84, + 73, 75, 69, 85, 84, 45, 67, 72, 73, 69, 85, 67, 72, 128, 84, 73, 75, 69, + 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73, 71, 72, 84, 76, 89, 45, 67, + 76, 79, 83, 69, 196, 84, 73, 71, 72, 212, 84, 73, 71, 69, 82, 128, 84, + 73, 71, 69, 210, 84, 73, 70, 73, 78, 65, 71, 200, 84, 73, 69, 88, 128, + 84, 73, 69, 80, 128, 84, 73, 197, 84, 73, 67, 75, 69, 84, 83, 128, 84, + 73, 67, 75, 69, 84, 128, 84, 73, 67, 75, 128, 84, 73, 67, 203, 84, 73, + 65, 82, 65, 128, 84, 73, 50, 128, 84, 72, 90, 128, 84, 72, 89, 79, 79, + 205, 84, 72, 87, 79, 79, 128, 84, 72, 87, 79, 128, 84, 72, 87, 73, 73, + 128, 84, 72, 87, 73, 128, 84, 72, 87, 69, 69, 128, 84, 72, 87, 65, 65, + 128, 84, 72, 87, 65, 128, 84, 72, 85, 82, 211, 84, 72, 85, 82, 73, 83, + 65, 218, 84, 72, 85, 78, 71, 128, 84, 72, 85, 78, 68, 69, 82, 83, 84, 79, + 82, 77, 128, 84, 72, 85, 78, 68, 69, 82, 128, 84, 72, 85, 78, 68, 69, + 210, 84, 72, 85, 77, 66, 211, 84, 72, 85, 77, 66, 128, 84, 72, 82, 79, + 87, 73, 78, 199, 84, 72, 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, + 200, 84, 72, 82, 69, 69, 45, 84, 72, 73, 82, 84, 89, 128, 84, 72, 82, 69, + 69, 45, 81, 85, 65, 82, 84, 69, 210, 84, 72, 82, 69, 69, 45, 80, 69, 82, 45, 69, 205, 84, 72, 82, 69, 69, 45, 76, 73, 78, 197, 84, 72, 82, 69, 69, - 45, 69, 205, 84, 72, 82, 69, 69, 45, 196, 84, 72, 82, 69, 65, 68, 128, - 84, 72, 79, 85, 83, 65, 78, 68, 83, 128, 84, 72, 79, 85, 83, 65, 78, 68, - 211, 84, 72, 79, 85, 83, 65, 78, 68, 128, 84, 72, 79, 85, 83, 65, 78, - 196, 84, 72, 79, 85, 71, 72, 212, 84, 72, 79, 85, 128, 84, 72, 79, 82, - 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, 78, 71, 128, 84, 72, 79, 77, - 128, 84, 72, 79, 74, 128, 84, 72, 79, 65, 128, 84, 72, 207, 84, 72, 73, - 85, 84, 72, 128, 84, 72, 73, 84, 65, 128, 84, 72, 73, 82, 84, 89, 45, 83, - 69, 67, 79, 78, 196, 84, 72, 73, 82, 84, 89, 45, 79, 78, 69, 128, 84, 72, - 73, 82, 84, 217, 84, 72, 73, 82, 84, 69, 69, 78, 128, 84, 72, 73, 82, 84, - 69, 69, 206, 84, 72, 73, 82, 68, 83, 128, 84, 72, 73, 82, 68, 211, 84, - 72, 73, 82, 68, 45, 83, 84, 65, 71, 197, 84, 72, 73, 82, 68, 128, 84, 72, - 73, 82, 196, 84, 72, 73, 73, 128, 84, 72, 73, 71, 72, 128, 84, 72, 73, - 69, 85, 84, 200, 84, 72, 73, 67, 203, 84, 72, 73, 65, 66, 128, 84, 72, - 69, 89, 128, 84, 72, 69, 84, 72, 69, 128, 84, 72, 69, 84, 72, 128, 84, - 72, 69, 84, 65, 128, 84, 72, 69, 84, 193, 84, 72, 69, 83, 80, 73, 65, + 45, 69, 205, 84, 72, 82, 69, 69, 45, 196, 84, 72, 82, 69, 69, 45, 67, 73, + 82, 67, 76, 197, 84, 72, 82, 69, 65, 68, 128, 84, 72, 79, 85, 83, 65, 78, + 68, 83, 128, 84, 72, 79, 85, 83, 65, 78, 68, 211, 84, 72, 79, 85, 83, 65, + 78, 68, 128, 84, 72, 79, 85, 83, 65, 78, 196, 84, 72, 79, 85, 71, 72, + 212, 84, 72, 79, 85, 128, 84, 72, 79, 82, 78, 128, 84, 72, 79, 82, 206, + 84, 72, 79, 78, 71, 128, 84, 72, 79, 77, 128, 84, 72, 79, 74, 128, 84, + 72, 79, 65, 128, 84, 72, 207, 84, 72, 73, 85, 84, 72, 128, 84, 72, 73, + 84, 65, 128, 84, 72, 73, 82, 84, 89, 45, 83, 69, 67, 79, 78, 196, 84, 72, + 73, 82, 84, 89, 45, 79, 78, 69, 128, 84, 72, 73, 82, 84, 217, 84, 72, 73, + 82, 84, 69, 69, 78, 128, 84, 72, 73, 82, 84, 69, 69, 206, 84, 72, 73, 82, + 68, 83, 128, 84, 72, 73, 82, 68, 211, 84, 72, 73, 82, 68, 45, 83, 84, 65, + 71, 197, 84, 72, 73, 82, 68, 128, 84, 72, 73, 82, 196, 84, 72, 73, 78, + 75, 73, 78, 199, 84, 72, 73, 73, 128, 84, 72, 73, 71, 72, 128, 84, 72, + 73, 69, 85, 84, 200, 84, 72, 73, 67, 203, 84, 72, 73, 65, 66, 128, 84, + 72, 69, 89, 128, 84, 72, 69, 84, 72, 69, 128, 84, 72, 69, 84, 72, 128, + 84, 72, 69, 84, 65, 128, 84, 72, 69, 84, 193, 84, 72, 69, 83, 80, 73, 65, 206, 84, 72, 69, 83, 69, 79, 83, 128, 84, 72, 69, 83, 69, 79, 211, 84, 72, 69, 211, 84, 72, 69, 82, 77, 79, 77, 69, 84, 69, 82, 128, 84, 72, 69, 82, 77, 79, 68, 89, 78, 65, 77, 73, 67, 128, 84, 72, 69, 82, 69, 70, 79, @@ -689,83 +713,86 @@ static unsigned char lexicon[] = { 84, 72, 65, 87, 128, 84, 72, 65, 78, 84, 72, 65, 75, 72, 65, 84, 128, 84, 72, 65, 78, 78, 65, 128, 84, 72, 65, 78, 128, 84, 72, 65, 206, 84, 72, 65, 77, 69, 68, 72, 128, 84, 72, 65, 76, 128, 84, 72, 65, 204, 84, 72, - 65, 74, 128, 84, 72, 65, 72, 65, 78, 128, 84, 72, 65, 65, 78, 193, 84, - 72, 65, 65, 76, 85, 128, 84, 72, 45, 67, 82, 69, 197, 84, 69, 88, 84, - 128, 84, 69, 88, 212, 84, 69, 88, 128, 84, 69, 86, 73, 82, 128, 84, 69, - 85, 84, 69, 85, 88, 128, 84, 69, 85, 84, 69, 85, 87, 69, 78, 128, 84, 69, - 85, 84, 128, 84, 69, 85, 78, 128, 84, 69, 85, 65, 69, 81, 128, 84, 69, - 85, 65, 69, 78, 128, 84, 69, 85, 128, 84, 69, 84, 82, 65, 83, 73, 77, 79, - 85, 128, 84, 69, 84, 82, 65, 83, 69, 77, 69, 128, 84, 69, 84, 82, 65, 80, - 76, 73, 128, 84, 69, 84, 82, 65, 71, 82, 65, 205, 84, 69, 84, 82, 65, 70, - 79, 78, 73, 65, 83, 128, 84, 69, 84, 72, 128, 84, 69, 84, 200, 84, 69, - 84, 65, 82, 84, 79, 211, 84, 69, 84, 65, 82, 84, 73, 77, 79, 82, 73, 79, - 78, 128, 84, 69, 84, 128, 84, 69, 212, 84, 69, 83, 83, 69, 82, 65, 128, - 84, 69, 83, 83, 69, 82, 193, 84, 69, 83, 83, 65, 82, 79, 206, 84, 69, 83, - 200, 84, 69, 82, 77, 73, 78, 65, 84, 79, 82, 128, 84, 69, 80, 128, 84, - 69, 78, 85, 84, 79, 128, 84, 69, 78, 85, 128, 84, 69, 78, 213, 84, 69, - 78, 84, 72, 128, 84, 69, 78, 84, 128, 84, 69, 78, 83, 128, 84, 69, 78, - 211, 84, 69, 78, 78, 73, 211, 84, 69, 78, 71, 197, 84, 69, 78, 45, 84, - 72, 73, 82, 84, 89, 128, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, - 85, 211, 84, 69, 76, 85, 128, 84, 69, 76, 79, 85, 211, 84, 69, 76, 76, - 69, 210, 84, 69, 76, 73, 83, 72, 193, 84, 69, 76, 69, 86, 73, 83, 73, 79, - 78, 128, 84, 69, 76, 69, 83, 67, 79, 80, 69, 128, 84, 69, 76, 69, 80, 72, - 79, 78, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78, 197, 84, 69, 76, 69, 73, - 65, 128, 84, 69, 76, 69, 71, 82, 65, 80, 200, 84, 69, 75, 128, 84, 69, - 73, 87, 83, 128, 84, 69, 71, 69, 72, 128, 84, 69, 69, 78, 83, 128, 84, - 69, 69, 69, 69, 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128, 84, 69, - 65, 82, 211, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 80, 79, 75, 69, 196, - 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78, 75, 69, 196, 84, 69, - 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196, 84, 69, 65, 82, 45, - 79, 70, 198, 84, 69, 65, 67, 85, 208, 84, 69, 45, 85, 128, 84, 69, 45, - 50, 128, 84, 67, 72, 69, 72, 69, 72, 128, 84, 67, 72, 69, 72, 69, 200, - 84, 67, 72, 69, 72, 128, 84, 67, 72, 69, 200, 84, 67, 72, 69, 128, 84, - 195, 84, 65, 89, 128, 84, 65, 88, 73, 128, 84, 65, 88, 128, 84, 65, 87, - 69, 76, 76, 69, 77, 69, 212, 84, 65, 87, 65, 128, 84, 65, 87, 128, 84, - 65, 86, 73, 89, 65, 78, 73, 128, 84, 65, 86, 128, 84, 65, 214, 84, 65, - 85, 82, 85, 83, 128, 84, 65, 85, 77, 128, 84, 65, 213, 84, 65, 84, 87, - 69, 69, 76, 128, 84, 65, 84, 87, 69, 69, 204, 84, 65, 84, 84, 79, 79, 69, - 196, 84, 65, 84, 128, 84, 65, 83, 128, 84, 65, 82, 85, 78, 71, 128, 84, - 65, 82, 84, 65, 82, 45, 50, 128, 84, 65, 82, 84, 65, 82, 128, 84, 65, 82, - 71, 69, 84, 128, 84, 65, 81, 128, 84, 65, 80, 69, 82, 128, 84, 65, 80, - 197, 84, 65, 80, 128, 84, 65, 79, 128, 84, 65, 78, 78, 69, 196, 84, 65, - 78, 71, 69, 82, 73, 78, 69, 128, 84, 65, 78, 71, 69, 78, 84, 128, 84, 65, - 78, 71, 69, 78, 212, 84, 65, 78, 199, 84, 65, 78, 65, 66, 65, 84, 193, - 84, 65, 78, 128, 84, 65, 77, 73, 78, 71, 128, 84, 65, 77, 128, 84, 65, - 76, 76, 128, 84, 65, 76, 204, 84, 65, 76, 73, 78, 71, 128, 84, 65, 76, - 73, 78, 199, 84, 65, 76, 69, 78, 84, 83, 128, 84, 65, 76, 69, 78, 212, - 84, 65, 75, 82, 201, 84, 65, 75, 72, 65, 76, 76, 85, 83, 128, 84, 65, 75, - 69, 128, 84, 65, 75, 52, 128, 84, 65, 75, 128, 84, 65, 73, 83, 89, 79, - 85, 128, 84, 65, 73, 76, 76, 69, 83, 211, 84, 65, 73, 76, 128, 84, 65, - 73, 204, 84, 65, 72, 128, 84, 65, 200, 84, 65, 71, 66, 65, 78, 87, 193, - 84, 65, 71, 65, 76, 79, 199, 84, 65, 71, 128, 84, 65, 69, 206, 84, 65, - 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, 65, 84, 73, 79, 78, - 128, 84, 65, 66, 85, 76, 65, 84, 73, 79, 206, 84, 65, 66, 83, 128, 84, - 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, 65, 194, 84, 65, 65, 83, 72, - 65, 69, 128, 84, 65, 65, 81, 128, 84, 65, 65, 77, 128, 84, 65, 65, 76, - 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 65, 70, 128, 84, 65, 50, 128, - 84, 65, 45, 82, 79, 76, 128, 84, 65, 45, 50, 128, 84, 48, 51, 54, 128, - 84, 48, 51, 53, 128, 84, 48, 51, 52, 128, 84, 48, 51, 51, 65, 128, 84, - 48, 51, 51, 128, 84, 48, 51, 50, 65, 128, 84, 48, 51, 50, 128, 84, 48, - 51, 49, 128, 84, 48, 51, 48, 128, 84, 48, 50, 57, 128, 84, 48, 50, 56, - 128, 84, 48, 50, 55, 128, 84, 48, 50, 54, 128, 84, 48, 50, 53, 128, 84, - 48, 50, 52, 128, 84, 48, 50, 51, 128, 84, 48, 50, 50, 128, 84, 48, 50, - 49, 128, 84, 48, 50, 48, 128, 84, 48, 49, 57, 128, 84, 48, 49, 56, 128, - 84, 48, 49, 55, 128, 84, 48, 49, 54, 65, 128, 84, 48, 49, 54, 128, 84, - 48, 49, 53, 128, 84, 48, 49, 52, 128, 84, 48, 49, 51, 128, 84, 48, 49, - 50, 128, 84, 48, 49, 49, 65, 128, 84, 48, 49, 49, 128, 84, 48, 49, 48, - 128, 84, 48, 48, 57, 65, 128, 84, 48, 48, 57, 128, 84, 48, 48, 56, 65, - 128, 84, 48, 48, 56, 128, 84, 48, 48, 55, 65, 128, 84, 48, 48, 55, 128, - 84, 48, 48, 54, 128, 84, 48, 48, 53, 128, 84, 48, 48, 52, 128, 84, 48, - 48, 51, 65, 128, 84, 48, 48, 51, 128, 84, 48, 48, 50, 128, 84, 48, 48, - 49, 128, 84, 45, 83, 72, 73, 82, 84, 128, 83, 90, 90, 128, 83, 90, 87, - 71, 128, 83, 90, 87, 65, 128, 83, 90, 85, 128, 83, 90, 79, 128, 83, 90, - 73, 128, 83, 90, 69, 69, 128, 83, 90, 69, 128, 83, 90, 65, 65, 128, 83, - 90, 65, 128, 83, 90, 128, 83, 89, 88, 128, 83, 89, 84, 128, 83, 89, 83, - 84, 69, 205, 83, 89, 82, 88, 128, 83, 89, 82, 77, 65, 84, 73, 75, 73, - 128, 83, 89, 82, 77, 65, 128, 83, 89, 82, 73, 78, 71, 69, 128, 83, 89, - 82, 73, 65, 195, 83, 89, 82, 128, 83, 89, 80, 128, 83, 89, 79, 85, 87, - 65, 128, 83, 89, 78, 69, 86, 77, 65, 128, 83, 89, 78, 68, 69, 83, 77, 79, - 211, 83, 89, 78, 67, 72, 82, 79, 78, 79, 85, 211, 83, 89, 78, 65, 71, 77, + 65, 74, 128, 84, 72, 65, 201, 84, 72, 65, 72, 65, 78, 128, 84, 72, 65, + 65, 78, 193, 84, 72, 65, 65, 76, 85, 128, 84, 72, 45, 67, 82, 69, 197, + 84, 69, 88, 84, 128, 84, 69, 88, 212, 84, 69, 88, 128, 84, 69, 86, 73, + 82, 128, 84, 69, 85, 84, 69, 85, 88, 128, 84, 69, 85, 84, 69, 85, 87, 69, + 78, 128, 84, 69, 85, 84, 128, 84, 69, 85, 78, 128, 84, 69, 85, 65, 69, + 81, 128, 84, 69, 85, 65, 69, 78, 128, 84, 69, 85, 128, 84, 69, 84, 82, + 65, 83, 73, 77, 79, 85, 128, 84, 69, 84, 82, 65, 83, 69, 77, 69, 128, 84, + 69, 84, 82, 65, 80, 76, 73, 128, 84, 69, 84, 82, 65, 71, 82, 65, 205, 84, + 69, 84, 82, 65, 70, 79, 78, 73, 65, 83, 128, 84, 69, 84, 72, 128, 84, 69, + 84, 200, 84, 69, 84, 65, 82, 84, 79, 211, 84, 69, 84, 65, 82, 84, 73, 77, + 79, 82, 73, 79, 78, 128, 84, 69, 84, 128, 84, 69, 212, 84, 69, 83, 83, + 69, 82, 65, 128, 84, 69, 83, 83, 69, 82, 193, 84, 69, 83, 83, 65, 82, 79, + 206, 84, 69, 83, 200, 84, 69, 82, 77, 73, 78, 65, 84, 79, 82, 128, 84, + 69, 80, 128, 84, 69, 78, 85, 84, 79, 128, 84, 69, 78, 85, 128, 84, 69, + 78, 213, 84, 69, 78, 84, 72, 128, 84, 69, 78, 84, 128, 84, 69, 78, 83, + 69, 128, 84, 69, 78, 83, 197, 84, 69, 78, 83, 128, 84, 69, 78, 211, 84, + 69, 78, 78, 73, 211, 84, 69, 78, 71, 197, 84, 69, 78, 45, 84, 72, 73, 82, + 84, 89, 128, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211, 84, + 69, 76, 85, 128, 84, 69, 76, 79, 85, 211, 84, 69, 76, 76, 69, 210, 84, + 69, 76, 73, 83, 72, 193, 84, 69, 76, 69, 86, 73, 83, 73, 79, 78, 128, 84, + 69, 76, 69, 83, 67, 79, 80, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78, 69, + 128, 84, 69, 76, 69, 80, 72, 79, 78, 197, 84, 69, 76, 69, 73, 65, 128, + 84, 69, 76, 69, 71, 82, 65, 80, 200, 84, 69, 75, 128, 84, 69, 73, 87, 83, + 128, 84, 69, 71, 69, 72, 128, 84, 69, 69, 84, 72, 128, 84, 69, 69, 84, + 200, 84, 69, 69, 78, 83, 128, 84, 69, 69, 69, 69, 128, 84, 69, 197, 84, + 69, 68, 85, 78, 71, 128, 84, 69, 65, 82, 211, 84, 69, 65, 82, 68, 82, 79, + 80, 45, 83, 80, 79, 75, 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, + 72, 65, 78, 75, 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, + 66, 69, 196, 84, 69, 65, 82, 45, 79, 70, 198, 84, 69, 65, 67, 85, 208, + 84, 69, 45, 85, 128, 84, 69, 45, 50, 128, 84, 67, 72, 69, 72, 69, 72, + 128, 84, 67, 72, 69, 72, 69, 200, 84, 67, 72, 69, 72, 128, 84, 67, 72, + 69, 200, 84, 67, 72, 69, 128, 84, 195, 84, 65, 89, 128, 84, 65, 88, 73, + 128, 84, 65, 88, 128, 84, 65, 87, 69, 76, 76, 69, 77, 69, 212, 84, 65, + 87, 65, 128, 84, 65, 87, 128, 84, 65, 86, 73, 89, 65, 78, 73, 128, 84, + 65, 86, 128, 84, 65, 214, 84, 65, 85, 82, 85, 83, 128, 84, 65, 85, 77, + 128, 84, 65, 213, 84, 65, 84, 87, 69, 69, 76, 128, 84, 65, 84, 87, 69, + 69, 204, 84, 65, 84, 84, 79, 79, 69, 196, 84, 65, 84, 128, 84, 65, 83, + 128, 84, 65, 82, 85, 78, 71, 128, 84, 65, 82, 84, 65, 82, 45, 50, 128, + 84, 65, 82, 84, 65, 82, 128, 84, 65, 82, 71, 69, 84, 128, 84, 65, 81, + 128, 84, 65, 80, 69, 82, 128, 84, 65, 80, 197, 84, 65, 80, 128, 84, 65, + 79, 128, 84, 65, 78, 78, 69, 196, 84, 65, 78, 71, 69, 82, 73, 78, 69, + 128, 84, 65, 78, 71, 69, 78, 84, 128, 84, 65, 78, 71, 69, 78, 212, 84, + 65, 78, 199, 84, 65, 78, 65, 66, 65, 84, 193, 84, 65, 78, 128, 84, 65, + 77, 73, 78, 71, 128, 84, 65, 77, 128, 84, 65, 76, 76, 128, 84, 65, 76, + 204, 84, 65, 76, 73, 78, 71, 128, 84, 65, 76, 73, 78, 199, 84, 65, 76, + 69, 78, 84, 83, 128, 84, 65, 76, 69, 78, 212, 84, 65, 75, 82, 201, 84, + 65, 75, 72, 65, 76, 76, 85, 83, 128, 84, 65, 75, 69, 128, 84, 65, 75, 52, + 128, 84, 65, 75, 180, 84, 65, 75, 128, 84, 65, 73, 83, 89, 79, 85, 128, + 84, 65, 73, 76, 76, 69, 83, 211, 84, 65, 73, 76, 128, 84, 65, 73, 204, + 84, 65, 72, 128, 84, 65, 200, 84, 65, 71, 66, 65, 78, 87, 193, 84, 65, + 71, 65, 76, 79, 199, 84, 65, 71, 128, 84, 65, 69, 206, 84, 65, 67, 79, + 128, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, 65, 84, + 73, 79, 78, 128, 84, 65, 66, 85, 76, 65, 84, 73, 79, 206, 84, 65, 66, 83, + 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 76, 197, 84, 65, 66, 128, 84, + 65, 194, 84, 65, 65, 83, 72, 65, 69, 128, 84, 65, 65, 81, 128, 84, 65, + 65, 77, 128, 84, 65, 65, 76, 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, + 65, 70, 128, 84, 65, 50, 128, 84, 65, 45, 82, 79, 76, 128, 84, 65, 45, + 50, 128, 84, 48, 51, 54, 128, 84, 48, 51, 53, 128, 84, 48, 51, 52, 128, + 84, 48, 51, 51, 65, 128, 84, 48, 51, 51, 128, 84, 48, 51, 50, 65, 128, + 84, 48, 51, 50, 128, 84, 48, 51, 49, 128, 84, 48, 51, 48, 128, 84, 48, + 50, 57, 128, 84, 48, 50, 56, 128, 84, 48, 50, 55, 128, 84, 48, 50, 54, + 128, 84, 48, 50, 53, 128, 84, 48, 50, 52, 128, 84, 48, 50, 51, 128, 84, + 48, 50, 50, 128, 84, 48, 50, 49, 128, 84, 48, 50, 48, 128, 84, 48, 49, + 57, 128, 84, 48, 49, 56, 128, 84, 48, 49, 55, 128, 84, 48, 49, 54, 65, + 128, 84, 48, 49, 54, 128, 84, 48, 49, 53, 128, 84, 48, 49, 52, 128, 84, + 48, 49, 51, 128, 84, 48, 49, 50, 128, 84, 48, 49, 49, 65, 128, 84, 48, + 49, 49, 128, 84, 48, 49, 48, 128, 84, 48, 48, 57, 65, 128, 84, 48, 48, + 57, 128, 84, 48, 48, 56, 65, 128, 84, 48, 48, 56, 128, 84, 48, 48, 55, + 65, 128, 84, 48, 48, 55, 128, 84, 48, 48, 54, 128, 84, 48, 48, 53, 128, + 84, 48, 48, 52, 128, 84, 48, 48, 51, 65, 128, 84, 48, 48, 51, 128, 84, + 48, 48, 50, 128, 84, 48, 48, 49, 128, 84, 45, 83, 72, 73, 82, 84, 128, + 83, 90, 90, 128, 83, 90, 87, 71, 128, 83, 90, 87, 65, 128, 83, 90, 85, + 128, 83, 90, 79, 128, 83, 90, 73, 128, 83, 90, 69, 69, 128, 83, 90, 69, + 128, 83, 90, 65, 65, 128, 83, 90, 65, 128, 83, 90, 128, 83, 89, 88, 128, + 83, 89, 84, 128, 83, 89, 83, 84, 69, 205, 83, 89, 82, 88, 128, 83, 89, + 82, 77, 65, 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 128, 83, 89, 82, 73, + 78, 71, 69, 128, 83, 89, 82, 73, 65, 195, 83, 89, 82, 128, 83, 89, 80, + 128, 83, 89, 79, 85, 87, 65, 128, 83, 89, 78, 69, 86, 77, 65, 128, 83, + 89, 78, 68, 69, 83, 77, 79, 211, 83, 89, 78, 67, 72, 82, 79, 78, 79, 85, + 211, 83, 89, 78, 65, 71, 79, 71, 85, 69, 128, 83, 89, 78, 65, 71, 77, 193, 83, 89, 78, 65, 70, 73, 128, 83, 89, 78, 128, 83, 89, 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 83, 89, 77, 66, 79, 76, 83, 128, 83, 89, 77, 66, 79, 76, 45, 57, 128, 83, 89, 77, 66, 79, 76, @@ -822,450 +849,463 @@ static unsigned char lexicon[] = { 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, 213, 83, 85, 73, 84, 65, 66, 76, 69, 128, 83, 85, 73, 84, 128, 83, 85, 73, 212, 83, 85, 72, 85, 82, 128, 83, 85, 69, 128, 83, 85, 68, 50, 128, 83, 85, 68, 128, - 83, 85, 67, 67, 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, 211, 83, - 85, 67, 67, 69, 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, 85, 66, 85, - 78, 73, 84, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, 206, 83, 85, - 66, 83, 84, 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, - 197, 83, 85, 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, 83, 85, 66, - 83, 67, 82, 73, 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, - 85, 66, 76, 73, 78, 69, 65, 210, 83, 85, 66, 76, 73, 77, 65, 84, 73, 79, - 78, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 45, 51, 128, 83, 85, 66, 76, - 73, 77, 65, 84, 69, 45, 50, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 128, - 83, 85, 66, 76, 73, 77, 65, 84, 197, 83, 85, 66, 74, 79, 73, 78, 69, 196, - 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, 66, 73, 84, 79, 128, 83, 85, 66, - 71, 82, 79, 85, 80, 128, 83, 85, 66, 71, 82, 79, 85, 208, 83, 85, 66, - 128, 83, 85, 65, 77, 128, 83, 85, 65, 69, 84, 128, 83, 85, 65, 69, 78, - 128, 83, 85, 65, 69, 128, 83, 85, 65, 66, 128, 83, 85, 65, 128, 83, 213, - 83, 84, 88, 128, 83, 84, 87, 65, 128, 83, 84, 85, 68, 89, 128, 83, 84, - 85, 68, 73, 207, 83, 84, 85, 67, 75, 45, 79, 85, 212, 83, 84, 83, 128, - 83, 84, 82, 79, 78, 199, 83, 84, 82, 79, 75, 69, 83, 128, 83, 84, 82, 79, - 75, 69, 211, 83, 84, 82, 79, 75, 69, 45, 57, 128, 83, 84, 82, 79, 75, 69, - 45, 56, 128, 83, 84, 82, 79, 75, 69, 45, 55, 128, 83, 84, 82, 79, 75, 69, - 45, 54, 128, 83, 84, 82, 79, 75, 69, 45, 53, 128, 83, 84, 82, 79, 75, 69, - 45, 52, 128, 83, 84, 82, 79, 75, 69, 45, 51, 128, 83, 84, 82, 79, 75, 69, - 45, 50, 128, 83, 84, 82, 79, 75, 69, 45, 49, 49, 128, 83, 84, 82, 79, 75, - 69, 45, 49, 48, 128, 83, 84, 82, 79, 75, 69, 45, 49, 128, 83, 84, 82, 79, - 75, 197, 83, 84, 82, 73, 80, 69, 128, 83, 84, 82, 73, 78, 71, 128, 83, - 84, 82, 73, 78, 199, 83, 84, 82, 73, 75, 69, 84, 72, 82, 79, 85, 71, 72, - 128, 83, 84, 82, 73, 68, 69, 128, 83, 84, 82, 73, 67, 84, 76, 217, 83, - 84, 82, 69, 84, 67, 72, 69, 196, 83, 84, 82, 69, 83, 211, 83, 84, 82, 69, - 78, 71, 84, 72, 128, 83, 84, 82, 69, 65, 77, 69, 82, 128, 83, 84, 82, 65, - 87, 66, 69, 82, 82, 89, 128, 83, 84, 82, 65, 84, 85, 77, 45, 50, 128, 83, - 84, 82, 65, 84, 85, 77, 128, 83, 84, 82, 65, 84, 85, 205, 83, 84, 82, 65, - 84, 73, 65, 206, 83, 84, 82, 65, 73, 78, 69, 82, 128, 83, 84, 82, 65, 73, - 71, 72, 84, 78, 69, 83, 83, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83, 84, - 82, 65, 73, 70, 128, 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65, 128, - 83, 84, 79, 86, 69, 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80, 87, 65, - 84, 67, 72, 128, 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79, 80, 80, - 65, 71, 69, 128, 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84, 79, 78, - 69, 128, 83, 84, 79, 67, 75, 128, 83, 84, 79, 67, 203, 83, 84, 73, 82, - 82, 85, 208, 83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204, 83, 84, - 73, 76, 197, 83, 84, 73, 71, 77, 65, 128, 83, 84, 69, 82, 69, 79, 128, - 83, 84, 69, 80, 128, 83, 84, 69, 78, 79, 71, 82, 65, 80, 72, 73, 195, 83, - 84, 69, 77, 128, 83, 84, 69, 65, 77, 73, 78, 199, 83, 84, 69, 65, 77, - 128, 83, 84, 69, 65, 205, 83, 84, 65, 86, 82, 79, 85, 128, 83, 84, 65, - 86, 82, 79, 83, 128, 83, 84, 65, 86, 82, 79, 211, 83, 84, 65, 85, 82, 79, - 83, 128, 83, 84, 65, 84, 85, 197, 83, 84, 65, 84, 73, 79, 78, 128, 83, - 84, 65, 84, 69, 82, 83, 128, 83, 84, 65, 84, 69, 128, 83, 84, 65, 82, - 212, 83, 84, 65, 82, 83, 128, 83, 84, 65, 82, 82, 69, 196, 83, 84, 65, - 82, 75, 128, 83, 84, 65, 82, 128, 83, 84, 65, 210, 83, 84, 65, 78, 68, - 83, 84, 73, 76, 76, 128, 83, 84, 65, 78, 68, 65, 82, 196, 83, 84, 65, 78, - 68, 128, 83, 84, 65, 78, 128, 83, 84, 65, 77, 80, 69, 196, 83, 84, 65, - 76, 76, 73, 79, 78, 128, 83, 84, 65, 70, 70, 128, 83, 84, 65, 70, 198, - 83, 84, 65, 68, 73, 85, 77, 128, 83, 84, 65, 67, 67, 65, 84, 79, 128, 83, - 84, 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, 79, 128, 83, 84, 50, 128, 83, - 83, 89, 88, 128, 83, 83, 89, 84, 128, 83, 83, 89, 82, 88, 128, 83, 83, - 89, 82, 128, 83, 83, 89, 80, 128, 83, 83, 89, 128, 83, 83, 85, 88, 128, - 83, 83, 85, 85, 128, 83, 83, 85, 84, 128, 83, 83, 85, 80, 128, 83, 83, - 79, 88, 128, 83, 83, 79, 84, 128, 83, 83, 79, 80, 128, 83, 83, 79, 79, - 128, 83, 83, 79, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, 83, - 73, 80, 128, 83, 83, 73, 73, 128, 83, 83, 73, 69, 88, 128, 83, 83, 73, - 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, 73, 128, 83, 83, 72, 73, 78, - 128, 83, 83, 72, 69, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, - 83, 69, 69, 128, 83, 83, 65, 88, 128, 83, 83, 65, 85, 128, 83, 83, 65, - 84, 128, 83, 83, 65, 80, 128, 83, 83, 65, 78, 71, 89, 69, 79, 82, 73, 78, - 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 45, - 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, - 83, 83, 65, 78, 71, 84, 72, 73, 69, 85, 84, 72, 128, 83, 83, 65, 78, 71, - 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, - 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 83, 73, 79, - 83, 45, 75, 73, 89, 69, 79, 75, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, - 128, 83, 83, 65, 78, 71, 82, 73, 69, 85, 76, 45, 75, 72, 73, 69, 85, 75, - 72, 128, 83, 83, 65, 78, 71, 82, 73, 69, 85, 76, 128, 83, 83, 65, 78, 71, - 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 83, - 83, 65, 78, 71, 77, 73, 69, 85, 77, 128, 83, 83, 65, 78, 71, 75, 73, 89, - 69, 79, 75, 128, 83, 83, 65, 78, 71, 73, 69, 85, 78, 71, 128, 83, 83, 65, - 78, 71, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, - 45, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, - 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, 128, 83, 83, 65, 73, 128, 83, 83, - 65, 65, 128, 83, 83, 51, 128, 83, 83, 50, 128, 83, 82, 128, 83, 81, 85, - 73, 83, 200, 83, 81, 85, 73, 82, 82, 69, 204, 83, 81, 85, 73, 71, 71, 76, - 197, 83, 81, 85, 65, 212, 83, 81, 85, 65, 82, 69, 83, 128, 83, 81, 85, - 65, 82, 69, 68, 128, 83, 81, 85, 65, 82, 69, 128, 83, 80, 89, 128, 83, - 80, 87, 65, 128, 83, 80, 85, 78, 71, 211, 83, 80, 82, 79, 85, 84, 128, - 83, 80, 82, 73, 78, 71, 83, 128, 83, 80, 82, 73, 78, 71, 128, 83, 80, 82, - 69, 67, 72, 71, 69, 83, 65, 78, 199, 83, 80, 79, 85, 84, 73, 78, 199, 83, - 80, 79, 84, 128, 83, 80, 79, 82, 84, 211, 83, 80, 79, 79, 78, 128, 83, - 80, 76, 73, 84, 84, 73, 78, 199, 83, 80, 76, 65, 89, 69, 68, 128, 83, 80, - 76, 65, 83, 72, 73, 78, 199, 83, 80, 73, 82, 73, 84, 85, 211, 83, 80, 73, - 82, 73, 84, 128, 83, 80, 73, 82, 73, 212, 83, 80, 73, 82, 65, 78, 84, - 128, 83, 80, 73, 82, 65, 76, 128, 83, 80, 73, 82, 65, 204, 83, 80, 73, - 68, 69, 82, 217, 83, 80, 73, 68, 69, 82, 128, 83, 80, 73, 68, 69, 210, - 83, 80, 73, 67, 69, 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, 83, 80, 69, - 83, 77, 73, 76, 207, 83, 80, 69, 69, 68, 66, 79, 65, 84, 128, 83, 80, 69, - 69, 67, 72, 128, 83, 80, 69, 69, 67, 200, 83, 80, 69, 67, 73, 65, 76, - 128, 83, 80, 69, 65, 82, 128, 83, 80, 69, 65, 75, 73, 78, 199, 83, 80, - 69, 65, 75, 69, 82, 128, 83, 80, 69, 65, 75, 69, 210, 83, 80, 69, 65, 75, - 45, 78, 79, 45, 69, 86, 73, 204, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, - 82, 75, 76, 73, 78, 199, 83, 80, 65, 82, 75, 76, 69, 83, 128, 83, 80, 65, - 82, 75, 76, 69, 82, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 71, - 72, 69, 84, 84, 73, 128, 83, 80, 65, 68, 69, 83, 128, 83, 80, 65, 68, - 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 65, 67, 197, 83, 80, 65, 128, - 83, 79, 89, 128, 83, 79, 87, 73, 76, 207, 83, 79, 87, 128, 83, 79, 85, - 84, 72, 69, 82, 206, 83, 79, 85, 84, 72, 45, 83, 76, 65, 86, 69, 217, 83, - 79, 85, 82, 67, 69, 128, 83, 79, 85, 78, 68, 128, 83, 79, 85, 78, 196, - 83, 79, 85, 78, 65, 80, 128, 83, 79, 85, 128, 83, 79, 83, 128, 83, 79, - 82, 193, 83, 79, 81, 128, 83, 79, 79, 206, 83, 79, 78, 74, 65, 77, 128, - 83, 79, 78, 71, 128, 83, 79, 78, 128, 83, 79, 77, 80, 69, 78, 199, 83, - 79, 77, 128, 83, 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, - 211, 83, 79, 76, 73, 196, 83, 79, 72, 128, 83, 79, 71, 68, 73, 65, 206, - 83, 79, 70, 84, 87, 65, 82, 69, 45, 70, 85, 78, 67, 84, 73, 79, 206, 83, - 79, 70, 84, 78, 69, 83, 83, 128, 83, 79, 70, 212, 83, 79, 198, 83, 79, - 67, 73, 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 83, 79, 65, 80, 128, - 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, - 87, 77, 65, 206, 83, 78, 79, 87, 70, 76, 65, 75, 69, 128, 83, 78, 79, 87, - 66, 79, 65, 82, 68, 69, 82, 128, 83, 78, 79, 87, 128, 83, 78, 79, 215, - 83, 78, 79, 85, 84, 128, 83, 78, 79, 85, 212, 83, 78, 65, 208, 83, 78, - 65, 75, 69, 128, 83, 78, 65, 75, 197, 83, 78, 65, 73, 76, 128, 83, 78, - 193, 83, 77, 79, 75, 73, 78, 199, 83, 77, 73, 82, 75, 73, 78, 199, 83, - 77, 73, 76, 73, 78, 199, 83, 77, 73, 76, 69, 128, 83, 77, 69, 65, 82, - 128, 83, 77, 65, 83, 200, 83, 77, 65, 76, 76, 69, 210, 83, 77, 65, 76, - 76, 128, 83, 76, 85, 82, 128, 83, 76, 79, 87, 76, 89, 128, 83, 76, 79, - 215, 83, 76, 79, 86, 79, 128, 83, 76, 79, 212, 83, 76, 79, 80, 73, 78, - 199, 83, 76, 79, 80, 69, 128, 83, 76, 79, 65, 206, 83, 76, 73, 78, 71, - 128, 83, 76, 73, 71, 72, 84, 76, 217, 83, 76, 73, 68, 73, 78, 71, 128, - 83, 76, 73, 68, 69, 82, 128, 83, 76, 73, 67, 69, 128, 83, 76, 73, 67, - 197, 83, 76, 69, 85, 84, 200, 83, 76, 69, 69, 80, 217, 83, 76, 69, 69, - 80, 73, 78, 199, 83, 76, 65, 86, 79, 78, 73, 195, 83, 76, 65, 86, 69, - 128, 83, 76, 65, 83, 72, 128, 83, 76, 65, 83, 200, 83, 76, 65, 78, 84, - 69, 196, 83, 75, 87, 65, 128, 83, 75, 87, 128, 83, 75, 85, 76, 76, 128, - 83, 75, 85, 76, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, 78, 128, - 83, 75, 73, 69, 82, 128, 83, 75, 201, 83, 75, 69, 87, 69, 196, 83, 75, - 65, 84, 69, 128, 83, 75, 128, 83, 74, 69, 128, 83, 73, 90, 197, 83, 73, - 88, 84, 89, 45, 70, 79, 85, 82, 84, 200, 83, 73, 88, 84, 89, 128, 83, 73, - 88, 84, 217, 83, 73, 88, 84, 72, 83, 128, 83, 73, 88, 84, 72, 211, 83, - 73, 88, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 83, 128, 83, 73, - 88, 84, 69, 69, 78, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 200, 83, - 73, 88, 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 83, 73, 88, 45, - 84, 72, 73, 82, 84, 89, 128, 83, 73, 88, 45, 83, 84, 82, 73, 78, 199, 83, - 73, 88, 45, 80, 69, 82, 45, 69, 205, 83, 73, 88, 45, 76, 73, 78, 197, 83, - 73, 216, 83, 73, 84, 69, 128, 83, 73, 83, 65, 128, 83, 73, 82, 73, 78, - 71, 85, 128, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 83, 73, - 79, 83, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, - 82, 73, 69, 85, 76, 128, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 45, 75, - 73, 89, 69, 79, 75, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, - 128, 83, 73, 79, 83, 45, 80, 65, 78, 83, 73, 79, 83, 128, 83, 73, 79, 83, - 45, 78, 73, 69, 85, 78, 128, 83, 73, 79, 83, 45, 77, 73, 69, 85, 77, 128, - 83, 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, - 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 83, 73, 79, 83, - 45, 73, 69, 85, 78, 71, 128, 83, 73, 79, 83, 45, 72, 73, 69, 85, 72, 128, - 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 83, 73, 79, 83, 45, 67, 72, - 73, 69, 85, 67, 72, 128, 83, 73, 79, 211, 83, 73, 78, 85, 83, 79, 73, - 196, 83, 73, 78, 75, 73, 78, 71, 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, - 73, 70, 84, 45, 51, 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, - 45, 50, 128, 83, 73, 78, 71, 76, 69, 45, 76, 73, 78, 197, 83, 73, 78, 71, - 76, 69, 128, 83, 73, 78, 71, 76, 197, 83, 73, 78, 71, 65, 65, 84, 128, - 83, 73, 78, 197, 83, 73, 78, 68, 72, 201, 83, 73, 206, 83, 73, 77, 80, - 76, 73, 70, 73, 69, 196, 83, 73, 77, 73, 76, 65, 82, 128, 83, 73, 77, 73, - 76, 65, 210, 83, 73, 77, 65, 78, 83, 73, 211, 83, 73, 77, 65, 76, 85, 78, - 71, 85, 206, 83, 73, 77, 65, 128, 83, 73, 76, 86, 69, 82, 128, 83, 73, - 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 72, 79, 85, 69, 84, - 84, 69, 128, 83, 73, 76, 72, 79, 85, 69, 84, 84, 197, 83, 73, 76, 65, 51, + 83, 85, 67, 75, 73, 78, 199, 83, 85, 67, 75, 69, 68, 128, 83, 85, 67, + 203, 83, 85, 67, 67, 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, + 211, 83, 85, 67, 67, 69, 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, + 85, 66, 85, 78, 73, 84, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, + 206, 83, 85, 66, 83, 84, 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, + 84, 85, 84, 197, 83, 85, 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, + 83, 85, 66, 83, 67, 82, 73, 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, + 83, 128, 83, 85, 66, 76, 73, 78, 69, 65, 210, 83, 85, 66, 76, 73, 77, 65, + 84, 73, 79, 78, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 45, 51, 128, 83, + 85, 66, 76, 73, 77, 65, 84, 69, 45, 50, 128, 83, 85, 66, 76, 73, 77, 65, + 84, 69, 128, 83, 85, 66, 76, 73, 77, 65, 84, 197, 83, 85, 66, 74, 79, 73, + 78, 69, 196, 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, 66, 73, 84, 79, + 128, 83, 85, 66, 71, 82, 79, 85, 80, 128, 83, 85, 66, 71, 82, 79, 85, + 208, 83, 85, 66, 128, 83, 85, 65, 77, 128, 83, 85, 65, 69, 84, 128, 83, + 85, 65, 69, 78, 128, 83, 85, 65, 69, 128, 83, 85, 65, 66, 128, 83, 85, + 65, 128, 83, 213, 83, 84, 88, 128, 83, 84, 87, 65, 128, 83, 84, 85, 68, + 89, 128, 83, 84, 85, 68, 73, 207, 83, 84, 85, 67, 75, 45, 79, 85, 212, + 83, 84, 83, 128, 83, 84, 82, 79, 78, 199, 83, 84, 82, 79, 75, 69, 83, + 128, 83, 84, 82, 79, 75, 69, 211, 83, 84, 82, 79, 75, 69, 45, 57, 128, + 83, 84, 82, 79, 75, 69, 45, 56, 128, 83, 84, 82, 79, 75, 69, 45, 55, 128, + 83, 84, 82, 79, 75, 69, 45, 54, 128, 83, 84, 82, 79, 75, 69, 45, 53, 128, + 83, 84, 82, 79, 75, 69, 45, 52, 128, 83, 84, 82, 79, 75, 69, 45, 51, 128, + 83, 84, 82, 79, 75, 69, 45, 50, 128, 83, 84, 82, 79, 75, 69, 45, 49, 49, + 128, 83, 84, 82, 79, 75, 69, 45, 49, 48, 128, 83, 84, 82, 79, 75, 69, 45, + 49, 128, 83, 84, 82, 79, 75, 197, 83, 84, 82, 73, 80, 69, 128, 83, 84, + 82, 73, 78, 71, 128, 83, 84, 82, 73, 78, 199, 83, 84, 82, 73, 75, 69, 84, + 72, 82, 79, 85, 71, 72, 128, 83, 84, 82, 73, 75, 197, 83, 84, 82, 73, 68, + 69, 128, 83, 84, 82, 73, 67, 84, 76, 217, 83, 84, 82, 69, 84, 67, 72, 69, + 196, 83, 84, 82, 69, 84, 67, 72, 128, 83, 84, 82, 69, 83, 211, 83, 84, + 82, 69, 78, 71, 84, 72, 128, 83, 84, 82, 69, 65, 77, 69, 82, 128, 83, 84, + 82, 65, 87, 66, 69, 82, 82, 89, 128, 83, 84, 82, 65, 84, 85, 77, 45, 50, + 128, 83, 84, 82, 65, 84, 85, 77, 128, 83, 84, 82, 65, 84, 85, 205, 83, + 84, 82, 65, 84, 73, 65, 206, 83, 84, 82, 65, 73, 78, 69, 82, 128, 83, 84, + 82, 65, 73, 71, 72, 84, 78, 69, 83, 83, 128, 83, 84, 82, 65, 73, 71, 72, + 84, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83, 84, 82, 65, 73, 70, 128, + 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65, 128, 83, 84, 79, 86, 69, + 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80, 87, 65, 84, 67, 72, 128, + 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79, 80, 80, 65, 71, 69, 128, + 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84, 79, 78, 69, 128, 83, 84, + 79, 67, 75, 128, 83, 84, 79, 67, 203, 83, 84, 73, 82, 82, 85, 208, 83, + 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204, 83, 84, 73, 76, 197, 83, + 84, 73, 71, 77, 65, 128, 83, 84, 73, 67, 75, 73, 78, 199, 83, 84, 73, 67, + 203, 83, 84, 69, 82, 69, 79, 128, 83, 84, 69, 80, 128, 83, 84, 69, 78, + 79, 71, 82, 65, 80, 72, 73, 195, 83, 84, 69, 77, 128, 83, 84, 69, 65, 77, + 73, 78, 199, 83, 84, 69, 65, 77, 128, 83, 84, 69, 65, 205, 83, 84, 65, + 86, 82, 79, 85, 128, 83, 84, 65, 86, 82, 79, 83, 128, 83, 84, 65, 86, 82, + 79, 211, 83, 84, 65, 85, 82, 79, 83, 128, 83, 84, 65, 84, 85, 197, 83, + 84, 65, 84, 73, 79, 78, 128, 83, 84, 65, 84, 69, 82, 83, 128, 83, 84, 65, + 84, 69, 128, 83, 84, 65, 82, 212, 83, 84, 65, 82, 83, 128, 83, 84, 65, + 82, 82, 69, 196, 83, 84, 65, 82, 75, 128, 83, 84, 65, 82, 128, 83, 84, + 65, 210, 83, 84, 65, 78, 68, 83, 84, 73, 76, 76, 128, 83, 84, 65, 78, 68, + 65, 82, 196, 83, 84, 65, 78, 68, 128, 83, 84, 65, 78, 128, 83, 84, 65, + 77, 80, 69, 196, 83, 84, 65, 76, 76, 73, 79, 78, 128, 83, 84, 65, 70, 70, + 128, 83, 84, 65, 70, 198, 83, 84, 65, 68, 73, 85, 77, 128, 83, 84, 65, + 67, 67, 65, 84, 79, 128, 83, 84, 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, + 79, 128, 83, 84, 50, 128, 83, 83, 89, 88, 128, 83, 83, 89, 84, 128, 83, + 83, 89, 82, 88, 128, 83, 83, 89, 82, 128, 83, 83, 89, 80, 128, 83, 83, + 89, 128, 83, 83, 85, 88, 128, 83, 83, 85, 85, 128, 83, 83, 85, 84, 128, + 83, 83, 85, 80, 128, 83, 83, 79, 88, 128, 83, 83, 79, 84, 128, 83, 83, + 79, 80, 128, 83, 83, 79, 79, 128, 83, 83, 79, 128, 83, 83, 73, 88, 128, + 83, 83, 73, 84, 128, 83, 83, 73, 80, 128, 83, 83, 73, 73, 128, 83, 83, + 73, 69, 88, 128, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, + 73, 128, 83, 83, 72, 73, 78, 128, 83, 83, 72, 69, 128, 83, 83, 69, 88, + 128, 83, 83, 69, 80, 128, 83, 83, 69, 69, 128, 83, 83, 65, 88, 128, 83, + 83, 65, 85, 128, 83, 83, 65, 84, 128, 83, 83, 65, 80, 128, 83, 83, 65, + 78, 71, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, + 71, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, + 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 84, 72, 73, 69, 85, + 84, 72, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, + 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, + 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 83, + 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 83, 65, 78, 71, 82, 73, 69, 85, + 76, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 83, 65, 78, 71, 82, 73, 69, + 85, 76, 128, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, + 71, 78, 73, 69, 85, 78, 128, 83, 83, 65, 78, 71, 77, 73, 69, 85, 77, 128, + 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 83, 83, 65, 78, 71, 73, + 69, 85, 78, 71, 128, 83, 83, 65, 78, 71, 72, 73, 69, 85, 72, 128, 83, 83, + 65, 78, 71, 67, 73, 69, 85, 67, 45, 72, 73, 69, 85, 72, 128, 83, 83, 65, + 78, 71, 67, 73, 69, 85, 67, 128, 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, + 128, 83, 83, 65, 73, 128, 83, 83, 65, 65, 128, 83, 83, 51, 128, 83, 83, + 50, 128, 83, 82, 128, 83, 81, 85, 73, 83, 200, 83, 81, 85, 73, 82, 82, + 69, 204, 83, 81, 85, 73, 71, 71, 76, 197, 83, 81, 85, 69, 69, 90, 69, 68, + 128, 83, 81, 85, 69, 69, 90, 197, 83, 81, 85, 65, 212, 83, 81, 85, 65, + 82, 69, 83, 128, 83, 81, 85, 65, 82, 69, 68, 128, 83, 81, 85, 65, 82, 69, + 128, 83, 80, 89, 128, 83, 80, 87, 65, 128, 83, 80, 85, 78, 71, 211, 83, + 80, 82, 79, 85, 84, 128, 83, 80, 82, 73, 78, 71, 83, 128, 83, 80, 82, 73, + 78, 71, 128, 83, 80, 82, 69, 67, 72, 71, 69, 83, 65, 78, 199, 83, 80, 82, + 69, 65, 68, 128, 83, 80, 82, 69, 65, 196, 83, 80, 79, 85, 84, 73, 78, + 199, 83, 80, 79, 84, 128, 83, 80, 79, 82, 84, 211, 83, 80, 79, 79, 78, + 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 83, 80, 76, 73, 84, 128, 83, + 80, 76, 73, 212, 83, 80, 76, 65, 89, 69, 68, 128, 83, 80, 76, 65, 83, 72, + 73, 78, 199, 83, 80, 73, 82, 73, 84, 85, 211, 83, 80, 73, 82, 73, 84, + 128, 83, 80, 73, 82, 73, 212, 83, 80, 73, 82, 65, 78, 84, 128, 83, 80, + 73, 82, 65, 76, 128, 83, 80, 73, 82, 65, 204, 83, 80, 73, 78, 69, 128, + 83, 80, 73, 68, 69, 82, 217, 83, 80, 73, 68, 69, 82, 128, 83, 80, 73, 68, + 69, 210, 83, 80, 73, 67, 69, 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, + 83, 80, 69, 83, 77, 73, 76, 207, 83, 80, 69, 69, 68, 66, 79, 65, 84, 128, + 83, 80, 69, 69, 67, 72, 128, 83, 80, 69, 69, 67, 200, 83, 80, 69, 67, 73, + 65, 76, 128, 83, 80, 69, 65, 82, 128, 83, 80, 69, 65, 75, 73, 78, 199, + 83, 80, 69, 65, 75, 69, 82, 128, 83, 80, 69, 65, 75, 69, 210, 83, 80, 69, + 65, 75, 45, 78, 79, 45, 69, 86, 73, 204, 83, 80, 65, 84, 72, 73, 128, 83, + 80, 65, 82, 75, 76, 73, 78, 199, 83, 80, 65, 82, 75, 76, 69, 83, 128, 83, + 80, 65, 82, 75, 76, 69, 82, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, + 65, 71, 72, 69, 84, 84, 73, 128, 83, 80, 65, 68, 69, 83, 128, 83, 80, 65, + 68, 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 65, 67, 197, 83, 80, 65, + 128, 83, 79, 89, 128, 83, 79, 87, 73, 76, 207, 83, 79, 87, 128, 83, 79, + 85, 84, 72, 69, 82, 206, 83, 79, 85, 84, 72, 45, 83, 76, 65, 86, 69, 217, + 83, 79, 85, 84, 200, 83, 79, 85, 82, 67, 69, 128, 83, 79, 85, 78, 68, + 128, 83, 79, 85, 78, 196, 83, 79, 85, 78, 65, 80, 128, 83, 79, 85, 128, + 83, 79, 83, 128, 83, 79, 82, 193, 83, 79, 81, 128, 83, 79, 79, 206, 83, + 79, 78, 74, 65, 77, 128, 83, 79, 78, 71, 128, 83, 79, 78, 128, 83, 79, + 77, 80, 69, 78, 199, 83, 79, 77, 128, 83, 79, 76, 73, 68, 85, 83, 128, + 83, 79, 76, 73, 68, 85, 211, 83, 79, 76, 73, 196, 83, 79, 72, 128, 83, + 79, 71, 68, 73, 65, 206, 83, 79, 70, 84, 87, 65, 82, 69, 45, 70, 85, 78, + 67, 84, 73, 79, 206, 83, 79, 70, 84, 78, 69, 83, 83, 128, 83, 79, 70, + 212, 83, 79, 198, 83, 79, 67, 73, 69, 84, 89, 128, 83, 79, 67, 67, 69, + 210, 83, 79, 65, 80, 128, 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, + 65, 78, 128, 83, 78, 79, 87, 77, 65, 206, 83, 78, 79, 87, 70, 76, 65, 75, + 69, 128, 83, 78, 79, 87, 66, 79, 65, 82, 68, 69, 82, 128, 83, 78, 79, 87, + 128, 83, 78, 79, 215, 83, 78, 79, 85, 84, 128, 83, 78, 79, 85, 212, 83, + 78, 65, 208, 83, 78, 65, 75, 69, 128, 83, 78, 65, 75, 197, 83, 78, 65, + 73, 76, 128, 83, 78, 193, 83, 77, 79, 75, 73, 78, 199, 83, 77, 73, 82, + 75, 73, 78, 199, 83, 77, 73, 76, 73, 78, 199, 83, 77, 73, 76, 69, 128, + 83, 77, 73, 76, 197, 83, 77, 69, 65, 82, 128, 83, 77, 65, 83, 200, 83, + 77, 65, 76, 76, 69, 210, 83, 77, 65, 76, 76, 128, 83, 76, 85, 82, 128, + 83, 76, 79, 87, 76, 89, 128, 83, 76, 79, 87, 128, 83, 76, 79, 215, 83, + 76, 79, 86, 79, 128, 83, 76, 79, 212, 83, 76, 79, 80, 73, 78, 199, 83, + 76, 79, 80, 69, 128, 83, 76, 79, 65, 206, 83, 76, 73, 78, 71, 128, 83, + 76, 73, 71, 72, 84, 76, 217, 83, 76, 73, 68, 73, 78, 71, 128, 83, 76, 73, + 68, 69, 82, 128, 83, 76, 73, 67, 69, 128, 83, 76, 73, 67, 197, 83, 76, + 69, 85, 84, 200, 83, 76, 69, 69, 80, 217, 83, 76, 69, 69, 80, 73, 78, + 199, 83, 76, 65, 86, 79, 78, 73, 195, 83, 76, 65, 86, 69, 128, 83, 76, + 65, 83, 72, 128, 83, 76, 65, 83, 200, 83, 76, 65, 78, 84, 69, 196, 83, + 75, 87, 65, 128, 83, 75, 87, 128, 83, 75, 85, 76, 76, 128, 83, 75, 85, + 76, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, 78, 128, 83, 75, 73, + 69, 82, 128, 83, 75, 201, 83, 75, 69, 87, 69, 196, 83, 75, 65, 84, 69, + 128, 83, 75, 128, 83, 74, 69, 128, 83, 73, 90, 197, 83, 73, 88, 84, 89, + 45, 70, 79, 85, 82, 84, 200, 83, 73, 88, 84, 89, 128, 83, 73, 88, 84, + 217, 83, 73, 88, 84, 72, 83, 128, 83, 73, 88, 84, 72, 211, 83, 73, 88, + 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 83, 128, 83, 73, 88, 84, + 69, 69, 78, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 200, 83, 73, 88, + 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 83, 73, 88, 45, 84, 72, + 73, 82, 84, 89, 128, 83, 73, 88, 45, 83, 84, 82, 73, 78, 199, 83, 73, 88, + 45, 80, 69, 82, 45, 69, 205, 83, 73, 88, 45, 76, 73, 78, 197, 83, 73, + 216, 83, 73, 84, 69, 128, 83, 73, 83, 65, 128, 83, 73, 82, 73, 78, 71, + 85, 128, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 83, 73, 79, + 83, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, 82, + 73, 69, 85, 76, 128, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 45, 75, 73, + 89, 69, 79, 75, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, 128, + 83, 73, 79, 83, 45, 80, 65, 78, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, + 78, 73, 69, 85, 78, 128, 83, 73, 79, 83, 45, 77, 73, 69, 85, 77, 128, 83, + 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, 75, + 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45, + 73, 69, 85, 78, 71, 128, 83, 73, 79, 83, 45, 72, 73, 69, 85, 72, 128, 83, + 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 83, 73, 79, 83, 45, 67, 72, 73, + 69, 85, 67, 72, 128, 83, 73, 79, 211, 83, 73, 78, 85, 83, 79, 73, 196, + 83, 73, 78, 79, 76, 79, 71, 73, 67, 65, 204, 83, 73, 78, 75, 73, 78, 71, + 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 51, 128, 83, 73, + 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 50, 128, 83, 73, 78, 71, 76, + 69, 45, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, 73, 78, 71, 76, + 197, 83, 73, 78, 71, 65, 65, 84, 128, 83, 73, 78, 197, 83, 73, 78, 68, + 72, 201, 83, 73, 206, 83, 73, 77, 85, 76, 84, 65, 78, 69, 79, 85, 83, + 128, 83, 73, 77, 85, 76, 84, 65, 78, 69, 79, 85, 211, 83, 73, 77, 80, 76, + 73, 70, 73, 69, 196, 83, 73, 77, 73, 76, 65, 82, 128, 83, 73, 77, 73, 76, + 65, 210, 83, 73, 77, 65, 78, 83, 73, 211, 83, 73, 77, 65, 76, 85, 78, 71, + 85, 206, 83, 73, 77, 65, 128, 83, 73, 76, 86, 69, 82, 128, 83, 73, 76, + 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 72, 79, 85, 69, 84, 84, + 69, 128, 83, 73, 76, 72, 79, 85, 69, 84, 84, 197, 83, 73, 76, 65, 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 71, 78, 83, 128, 83, 73, 71, 77, 65, 128, 83, 73, 71, 77, 193, 83, 73, 71, 69, 204, 83, 73, 71, 52, 128, 83, 73, 71, 180, 83, 73, 71, 128, 83, - 73, 69, 69, 128, 83, 73, 68, 69, 87, 65, 89, 211, 83, 73, 68, 68, 72, 65, - 77, 128, 83, 73, 68, 68, 72, 65, 205, 83, 73, 67, 75, 78, 69, 83, 83, - 128, 83, 73, 67, 75, 76, 69, 128, 83, 73, 66, 197, 83, 73, 65, 128, 83, - 201, 83, 72, 89, 88, 128, 83, 72, 89, 84, 128, 83, 72, 89, 82, 88, 128, - 83, 72, 89, 82, 128, 83, 72, 89, 80, 128, 83, 72, 89, 69, 128, 83, 72, - 89, 65, 128, 83, 72, 89, 128, 83, 72, 87, 79, 89, 128, 83, 72, 87, 79, - 79, 128, 83, 72, 87, 79, 128, 83, 72, 87, 73, 73, 128, 83, 72, 87, 73, - 128, 83, 72, 87, 69, 128, 83, 72, 87, 197, 83, 72, 87, 65, 65, 128, 83, - 72, 87, 65, 128, 83, 72, 85, 88, 128, 83, 72, 85, 85, 128, 83, 72, 85, - 84, 128, 83, 72, 85, 82, 88, 128, 83, 72, 85, 82, 128, 83, 72, 85, 80, - 128, 83, 72, 85, 79, 88, 128, 83, 72, 85, 79, 80, 128, 83, 72, 85, 79, - 128, 83, 72, 85, 77, 128, 83, 72, 85, 76, 128, 83, 72, 85, 70, 70, 76, - 197, 83, 72, 85, 69, 81, 128, 83, 72, 85, 69, 78, 83, 72, 85, 69, 84, - 128, 83, 72, 85, 66, 85, 82, 128, 83, 72, 85, 50, 128, 83, 72, 85, 178, - 83, 72, 85, 128, 83, 72, 213, 83, 72, 84, 65, 80, 73, 67, 128, 83, 72, - 84, 65, 128, 83, 72, 82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80, 128, - 83, 72, 82, 73, 73, 128, 83, 72, 82, 73, 128, 83, 72, 79, 89, 128, 83, - 72, 79, 88, 128, 83, 72, 79, 87, 69, 82, 128, 83, 72, 79, 85, 76, 68, 69, - 82, 69, 196, 83, 72, 79, 84, 128, 83, 72, 79, 82, 84, 83, 128, 83, 72, - 79, 82, 84, 211, 83, 72, 79, 82, 84, 72, 65, 78, 196, 83, 72, 79, 82, 84, - 69, 78, 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 69, 128, 83, 72, 79, - 82, 84, 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 79, 82, 84, 45, 84, - 87, 73, 71, 45, 84, 89, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, - 83, 79, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 79, 83, 211, 83, - 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 78, 65, 85, 196, 83, 72, 79, 82, - 84, 45, 84, 87, 73, 71, 45, 77, 65, 68, 210, 83, 72, 79, 82, 84, 45, 84, - 87, 73, 71, 45, 72, 65, 71, 65, 76, 204, 83, 72, 79, 82, 84, 45, 84, 87, - 73, 71, 45, 66, 74, 65, 82, 75, 65, 206, 83, 72, 79, 82, 84, 45, 84, 87, - 73, 71, 45, 65, 210, 83, 72, 79, 82, 84, 128, 83, 72, 79, 82, 212, 83, - 72, 79, 81, 128, 83, 72, 79, 209, 83, 72, 79, 80, 80, 73, 78, 199, 83, - 72, 79, 80, 128, 83, 72, 79, 79, 84, 73, 78, 199, 83, 72, 79, 79, 84, - 128, 83, 72, 79, 79, 73, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, 201, - 83, 72, 79, 199, 83, 72, 79, 69, 128, 83, 72, 79, 197, 83, 72, 79, 65, - 128, 83, 72, 79, 128, 83, 72, 73, 89, 89, 65, 65, 76, 65, 65, 128, 83, - 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, 72, 73, 82, 212, 83, 72, - 73, 82, 65, 69, 128, 83, 72, 73, 82, 128, 83, 72, 73, 210, 83, 72, 73, - 81, 128, 83, 72, 73, 80, 128, 83, 72, 73, 78, 84, 207, 83, 72, 73, 78, - 73, 71, 128, 83, 72, 73, 78, 68, 193, 83, 72, 73, 206, 83, 72, 73, 77, - 65, 128, 83, 72, 73, 77, 193, 83, 72, 73, 77, 128, 83, 72, 73, 205, 83, - 72, 73, 73, 78, 128, 83, 72, 73, 73, 128, 83, 72, 73, 70, 212, 83, 72, - 73, 69, 76, 68, 128, 83, 72, 73, 68, 128, 83, 72, 73, 196, 83, 72, 72, - 65, 128, 83, 72, 72, 193, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, - 83, 72, 69, 85, 88, 128, 83, 72, 69, 85, 79, 81, 128, 83, 72, 69, 85, 65, - 69, 81, 84, 85, 128, 83, 72, 69, 85, 65, 69, 81, 128, 83, 72, 69, 85, 65, - 69, 128, 83, 72, 69, 84, 128, 83, 72, 69, 212, 83, 72, 69, 83, 72, 76, - 65, 77, 128, 83, 72, 69, 83, 72, 73, 71, 128, 83, 72, 69, 83, 72, 73, - 199, 83, 72, 69, 83, 72, 50, 128, 83, 72, 69, 83, 72, 128, 83, 72, 69, - 81, 69, 204, 83, 72, 69, 80, 128, 83, 72, 69, 78, 128, 83, 72, 69, 76, - 76, 128, 83, 72, 69, 76, 204, 83, 72, 69, 76, 70, 128, 83, 72, 69, 73, - 128, 83, 72, 69, 71, 57, 128, 83, 72, 69, 69, 80, 128, 83, 72, 69, 69, - 78, 85, 128, 83, 72, 69, 69, 78, 128, 83, 72, 69, 69, 206, 83, 72, 69, - 69, 128, 83, 72, 69, 45, 71, 79, 65, 84, 128, 83, 72, 197, 83, 72, 67, - 72, 79, 79, 73, 128, 83, 72, 67, 72, 65, 128, 83, 72, 65, 89, 128, 83, - 72, 65, 88, 128, 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 86, - 73, 65, 206, 83, 72, 65, 86, 69, 196, 83, 72, 65, 85, 128, 83, 72, 65, - 84, 128, 83, 72, 65, 82, 85, 128, 83, 72, 65, 82, 213, 83, 72, 65, 82, - 80, 128, 83, 72, 65, 82, 208, 83, 72, 65, 82, 65, 128, 83, 72, 65, 82, - 50, 128, 83, 72, 65, 82, 178, 83, 72, 65, 80, 73, 78, 71, 128, 83, 72, - 65, 80, 69, 83, 128, 83, 72, 65, 80, 197, 83, 72, 65, 80, 128, 83, 72, - 65, 78, 71, 128, 83, 72, 65, 78, 128, 83, 72, 65, 206, 83, 72, 65, 77, - 82, 79, 67, 75, 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, 128, 83, 72, - 65, 75, 84, 73, 128, 83, 72, 65, 75, 128, 83, 72, 65, 73, 128, 83, 72, - 65, 70, 84, 128, 83, 72, 65, 70, 212, 83, 72, 65, 68, 79, 87, 69, 196, - 83, 72, 65, 68, 69, 196, 83, 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, - 128, 83, 72, 65, 68, 68, 193, 83, 72, 65, 68, 128, 83, 72, 65, 196, 83, - 72, 65, 66, 54, 128, 83, 72, 65, 65, 128, 83, 72, 65, 54, 128, 83, 72, - 65, 51, 128, 83, 72, 65, 179, 83, 71, 82, 193, 83, 71, 79, 210, 83, 71, - 67, 128, 83, 71, 65, 215, 83, 71, 65, 194, 83, 71, 128, 83, 69, 89, 75, - 128, 83, 69, 88, 84, 85, 76, 193, 83, 69, 88, 84, 73, 76, 69, 128, 83, - 69, 88, 84, 65, 78, 211, 83, 69, 86, 69, 82, 65, 78, 67, 69, 128, 83, 69, - 86, 69, 78, 84, 89, 128, 83, 69, 86, 69, 78, 84, 217, 83, 69, 86, 69, 78, - 84, 72, 128, 83, 69, 86, 69, 78, 84, 69, 69, 78, 128, 83, 69, 86, 69, 78, - 84, 69, 69, 206, 83, 69, 86, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, 83, - 69, 86, 69, 206, 83, 69, 85, 88, 128, 83, 69, 85, 78, 89, 65, 77, 128, - 83, 69, 85, 65, 69, 81, 128, 83, 69, 84, 70, 79, 78, 128, 83, 69, 83, 84, - 69, 82, 84, 73, 85, 211, 83, 69, 83, 81, 85, 73, 81, 85, 65, 68, 82, 65, - 84, 69, 128, 83, 69, 83, 65, 77, 197, 83, 69, 82, 86, 73, 67, 197, 83, - 69, 82, 73, 70, 83, 128, 83, 69, 82, 73, 70, 211, 83, 69, 82, 73, 70, - 128, 83, 69, 81, 85, 69, 78, 67, 197, 83, 69, 80, 84, 69, 77, 66, 69, 82, - 128, 83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 83, 69, 80, 65, 82, 65, 84, - 79, 210, 83, 69, 78, 84, 79, 128, 83, 69, 78, 84, 73, 128, 83, 69, 77, - 85, 78, 67, 73, 193, 83, 69, 77, 75, 65, 84, 72, 128, 83, 69, 77, 75, - 128, 83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 69, 77, 73, 83, 79, 70, - 212, 83, 69, 77, 73, 83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 77, 73, 77, - 73, 78, 73, 77, 193, 83, 69, 77, 73, 68, 73, 82, 69, 67, 212, 83, 69, 77, - 73, 67, 79, 76, 79, 78, 128, 83, 69, 77, 73, 67, 79, 76, 79, 206, 83, 69, - 77, 73, 67, 73, 82, 67, 85, 76, 65, 210, 83, 69, 77, 73, 67, 73, 82, 67, - 76, 197, 83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, 69, 77, 73, 45, 86, - 79, 73, 67, 69, 196, 83, 69, 76, 70, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 57, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 56, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 57, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 53, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 57, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 50, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 55, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 56, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 52, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 56, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 49, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 56, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 57, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, - 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 54, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, - 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 51, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, - 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 48, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 57, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 56, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 54, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 54, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 53, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 51, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 50, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 48, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 56, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 55, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 53, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 52, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 50, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 49, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 55, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 52, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 49, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 57, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 54, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 51, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 48, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 56, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 54, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 51, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 50, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 55, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 54, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 51, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 50, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, - 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 55, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 54, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, - 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 51, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 50, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 48, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, - 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 55, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 50, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 52, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 51, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 50, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 48, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 56, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 55, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 50, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 52, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 49, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 48, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 48, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 56, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 48, 55, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 48, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 53, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 52, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 48, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 48, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 49, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 48, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 57, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 57, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, - 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 54, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 57, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 51, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 50, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 55, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 54, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 56, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 51, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 48, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 55, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 55, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 55, 54, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 52, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 51, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 55, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 48, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 56, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 55, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 54, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 52, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 51, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 54, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, - 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 48, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 56, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 55, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, - 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 52, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 49, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 48, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, - 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 56, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 53, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 52, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 49, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 57, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 56, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 53, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 50, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 49, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 57, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 54, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 53, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 50, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 49, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 57, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 54, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 53, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, - 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 50, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 57, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 48, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, - 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 54, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 48, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 48, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 51, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 50, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 48, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 48, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 128, 83, - 69, 76, 69, 67, 84, 79, 210, 83, 69, 76, 69, 67, 84, 69, 196, 83, 69, 73, - 83, 77, 65, 128, 83, 69, 73, 83, 77, 193, 83, 69, 72, 128, 83, 69, 71, - 79, 76, 128, 83, 69, 71, 78, 79, 128, 83, 69, 71, 77, 69, 78, 84, 128, - 83, 69, 69, 86, 128, 83, 69, 69, 78, 85, 128, 83, 69, 69, 78, 128, 83, - 69, 69, 206, 83, 69, 69, 68, 76, 73, 78, 71, 128, 83, 69, 69, 45, 78, 79, - 45, 69, 86, 73, 204, 83, 69, 67, 84, 79, 82, 128, 83, 69, 67, 84, 73, 79, - 78, 128, 83, 69, 67, 84, 73, 79, 206, 83, 69, 67, 82, 69, 84, 128, 83, - 69, 67, 79, 78, 68, 128, 83, 69, 67, 65, 78, 84, 128, 83, 69, 66, 65, 84, - 66, 69, 73, 212, 83, 69, 65, 84, 128, 83, 69, 65, 76, 128, 83, 69, 65, - 71, 85, 76, 204, 83, 68, 79, 78, 199, 83, 68, 128, 83, 67, 87, 65, 128, - 83, 67, 82, 85, 80, 76, 69, 128, 83, 67, 82, 79, 76, 76, 128, 83, 67, 82, - 73, 80, 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, - 83, 67, 82, 69, 65, 77, 73, 78, 199, 83, 67, 79, 82, 80, 73, 85, 83, 128, - 83, 67, 79, 82, 69, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, 73, + 73, 69, 69, 128, 83, 73, 68, 69, 87, 65, 89, 211, 83, 73, 68, 69, 128, + 83, 73, 68, 197, 83, 73, 68, 68, 72, 65, 77, 128, 83, 73, 67, 75, 78, 69, + 83, 83, 128, 83, 73, 67, 75, 76, 69, 128, 83, 73, 66, 197, 83, 73, 65, + 128, 83, 201, 83, 72, 89, 88, 128, 83, 72, 89, 84, 128, 83, 72, 89, 82, + 88, 128, 83, 72, 89, 82, 128, 83, 72, 89, 80, 128, 83, 72, 89, 69, 128, + 83, 72, 89, 65, 128, 83, 72, 89, 128, 83, 72, 87, 79, 89, 128, 83, 72, + 87, 79, 79, 128, 83, 72, 87, 79, 128, 83, 72, 87, 73, 73, 128, 83, 72, + 87, 73, 128, 83, 72, 87, 69, 128, 83, 72, 87, 197, 83, 72, 87, 65, 65, + 128, 83, 72, 87, 65, 128, 83, 72, 85, 88, 128, 83, 72, 85, 85, 128, 83, + 72, 85, 84, 84, 76, 69, 67, 79, 67, 75, 128, 83, 72, 85, 84, 128, 83, 72, + 85, 82, 88, 128, 83, 72, 85, 82, 128, 83, 72, 85, 80, 128, 83, 72, 85, + 79, 88, 128, 83, 72, 85, 79, 80, 128, 83, 72, 85, 79, 128, 83, 72, 85, + 77, 128, 83, 72, 85, 76, 128, 83, 72, 85, 70, 70, 76, 197, 83, 72, 85, + 69, 81, 128, 83, 72, 85, 69, 78, 83, 72, 85, 69, 84, 128, 83, 72, 85, 66, + 85, 82, 128, 83, 72, 85, 50, 128, 83, 72, 85, 178, 83, 72, 85, 128, 83, + 72, 213, 83, 72, 84, 65, 80, 73, 67, 128, 83, 72, 84, 65, 128, 83, 72, + 82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80, 128, 83, 72, 82, 73, 73, + 128, 83, 72, 82, 73, 128, 83, 72, 79, 89, 128, 83, 72, 79, 88, 128, 83, + 72, 79, 87, 69, 82, 128, 83, 72, 79, 85, 76, 68, 69, 82, 69, 196, 83, 72, + 79, 85, 76, 68, 69, 210, 83, 72, 79, 84, 128, 83, 72, 79, 82, 84, 83, + 128, 83, 72, 79, 82, 84, 211, 83, 72, 79, 82, 84, 72, 65, 78, 196, 83, + 72, 79, 82, 84, 69, 78, 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 69, + 128, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 79, + 82, 84, 45, 84, 87, 73, 71, 45, 84, 89, 210, 83, 72, 79, 82, 84, 45, 84, + 87, 73, 71, 45, 83, 79, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, + 79, 83, 211, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 78, 65, 85, 196, + 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 77, 65, 68, 210, 83, 72, 79, + 82, 84, 45, 84, 87, 73, 71, 45, 72, 65, 71, 65, 76, 204, 83, 72, 79, 82, + 84, 45, 84, 87, 73, 71, 45, 66, 74, 65, 82, 75, 65, 206, 83, 72, 79, 82, + 84, 45, 84, 87, 73, 71, 45, 65, 210, 83, 72, 79, 82, 84, 128, 83, 72, 79, + 82, 212, 83, 72, 79, 81, 128, 83, 72, 79, 209, 83, 72, 79, 80, 80, 73, + 78, 199, 83, 72, 79, 80, 128, 83, 72, 79, 79, 84, 73, 78, 199, 83, 72, + 79, 79, 84, 128, 83, 72, 79, 79, 73, 128, 83, 72, 79, 79, 128, 83, 72, + 79, 71, 201, 83, 72, 79, 199, 83, 72, 79, 69, 128, 83, 72, 79, 197, 83, + 72, 79, 65, 128, 83, 72, 79, 128, 83, 72, 73, 89, 89, 65, 65, 76, 65, 65, + 128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, 72, 73, 82, 212, + 83, 72, 73, 82, 65, 69, 128, 83, 72, 73, 82, 128, 83, 72, 73, 210, 83, + 72, 73, 81, 128, 83, 72, 73, 78, 84, 207, 83, 72, 73, 78, 73, 71, 128, + 83, 72, 73, 78, 68, 193, 83, 72, 73, 206, 83, 72, 73, 77, 65, 128, 83, + 72, 73, 77, 193, 83, 72, 73, 77, 128, 83, 72, 73, 205, 83, 72, 73, 73, + 78, 128, 83, 72, 73, 73, 128, 83, 72, 73, 70, 212, 83, 72, 73, 69, 76, + 68, 128, 83, 72, 73, 68, 128, 83, 72, 73, 196, 83, 72, 72, 65, 128, 83, + 72, 72, 193, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, 72, 69, + 85, 88, 128, 83, 72, 69, 85, 79, 81, 128, 83, 72, 69, 85, 65, 69, 81, 84, + 85, 128, 83, 72, 69, 85, 65, 69, 81, 128, 83, 72, 69, 85, 65, 69, 128, + 83, 72, 69, 84, 128, 83, 72, 69, 212, 83, 72, 69, 83, 72, 76, 65, 77, + 128, 83, 72, 69, 83, 72, 73, 71, 128, 83, 72, 69, 83, 72, 73, 199, 83, + 72, 69, 83, 72, 50, 128, 83, 72, 69, 83, 72, 128, 83, 72, 69, 83, 200, + 83, 72, 69, 81, 69, 204, 83, 72, 69, 80, 128, 83, 72, 69, 78, 128, 83, + 72, 69, 76, 76, 128, 83, 72, 69, 76, 204, 83, 72, 69, 76, 70, 128, 83, + 72, 69, 73, 128, 83, 72, 69, 71, 57, 128, 83, 72, 69, 69, 80, 128, 83, + 72, 69, 69, 78, 85, 128, 83, 72, 69, 69, 78, 128, 83, 72, 69, 69, 206, + 83, 72, 69, 69, 128, 83, 72, 69, 45, 71, 79, 65, 84, 128, 83, 72, 197, + 83, 72, 67, 72, 79, 79, 73, 128, 83, 72, 67, 72, 65, 128, 83, 72, 65, 89, + 128, 83, 72, 65, 88, 128, 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, + 72, 65, 86, 73, 65, 206, 83, 72, 65, 86, 69, 196, 83, 72, 65, 85, 128, + 83, 72, 65, 84, 128, 83, 72, 65, 82, 85, 128, 83, 72, 65, 82, 213, 83, + 72, 65, 82, 80, 128, 83, 72, 65, 82, 208, 83, 72, 65, 82, 65, 128, 83, + 72, 65, 82, 50, 128, 83, 72, 65, 82, 178, 83, 72, 65, 80, 73, 78, 71, + 128, 83, 72, 65, 80, 69, 83, 128, 83, 72, 65, 80, 197, 83, 72, 65, 80, + 128, 83, 72, 65, 78, 71, 128, 83, 72, 65, 78, 128, 83, 72, 65, 206, 83, + 72, 65, 77, 82, 79, 67, 75, 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, + 128, 83, 72, 65, 75, 84, 73, 128, 83, 72, 65, 75, 73, 78, 71, 128, 83, + 72, 65, 75, 73, 78, 199, 83, 72, 65, 75, 128, 83, 72, 65, 73, 128, 83, + 72, 65, 70, 84, 128, 83, 72, 65, 70, 212, 83, 72, 65, 68, 79, 87, 69, + 196, 83, 72, 65, 68, 69, 196, 83, 72, 65, 68, 69, 128, 83, 72, 65, 68, + 68, 65, 128, 83, 72, 65, 68, 68, 193, 83, 72, 65, 68, 128, 83, 72, 65, + 196, 83, 72, 65, 66, 54, 128, 83, 72, 65, 65, 128, 83, 72, 65, 54, 128, + 83, 72, 65, 182, 83, 72, 65, 51, 128, 83, 72, 65, 179, 83, 71, 82, 193, + 83, 71, 79, 210, 83, 71, 67, 128, 83, 71, 65, 215, 83, 71, 65, 194, 83, + 71, 128, 83, 69, 89, 75, 128, 83, 69, 88, 84, 85, 76, 193, 83, 69, 88, + 84, 73, 76, 69, 128, 83, 69, 88, 84, 65, 78, 211, 83, 69, 86, 69, 82, 65, + 78, 67, 69, 128, 83, 69, 86, 69, 78, 84, 89, 128, 83, 69, 86, 69, 78, 84, + 217, 83, 69, 86, 69, 78, 84, 72, 128, 83, 69, 86, 69, 78, 84, 69, 69, 78, + 128, 83, 69, 86, 69, 78, 84, 69, 69, 206, 83, 69, 86, 69, 78, 45, 84, 72, + 73, 82, 84, 89, 128, 83, 69, 86, 69, 206, 83, 69, 85, 88, 128, 83, 69, + 85, 78, 89, 65, 77, 128, 83, 69, 85, 65, 69, 81, 128, 83, 69, 84, 70, 79, + 78, 128, 83, 69, 83, 84, 69, 82, 84, 73, 85, 211, 83, 69, 83, 81, 85, 73, + 81, 85, 65, 68, 82, 65, 84, 69, 128, 83, 69, 83, 65, 77, 197, 83, 69, 82, + 86, 73, 67, 197, 83, 69, 82, 73, 70, 83, 128, 83, 69, 82, 73, 70, 211, + 83, 69, 82, 73, 70, 128, 83, 69, 81, 85, 69, 78, 84, 73, 65, 76, 128, 83, + 69, 81, 85, 69, 78, 67, 197, 83, 69, 80, 84, 85, 80, 76, 197, 83, 69, 80, + 84, 69, 77, 66, 69, 82, 128, 83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 83, + 69, 80, 65, 82, 65, 84, 79, 210, 83, 69, 78, 84, 79, 128, 83, 69, 78, 84, + 73, 128, 83, 69, 77, 85, 78, 67, 73, 193, 83, 69, 77, 75, 65, 84, 72, + 128, 83, 69, 77, 75, 128, 83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 69, + 77, 73, 83, 79, 70, 212, 83, 69, 77, 73, 83, 69, 88, 84, 73, 76, 69, 128, + 83, 69, 77, 73, 77, 73, 78, 73, 77, 193, 83, 69, 77, 73, 68, 73, 82, 69, + 67, 212, 83, 69, 77, 73, 67, 79, 76, 79, 78, 128, 83, 69, 77, 73, 67, 79, + 76, 79, 206, 83, 69, 77, 73, 67, 73, 82, 67, 85, 76, 65, 210, 83, 69, 77, + 73, 67, 73, 82, 67, 76, 197, 83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, + 69, 77, 73, 45, 86, 79, 73, 67, 69, 196, 83, 69, 76, 70, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 57, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 57, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 55, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 57, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 57, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 52, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 57, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 57, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 49, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 57, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, + 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 54, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, + 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 51, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, + 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 48, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 57, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 56, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 55, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 54, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 53, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 55, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 51, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 50, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 55, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 48, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 56, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 55, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 53, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 52, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 54, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 50, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 49, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 54, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 53, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 55, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 52, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 49, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 57, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 54, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 51, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 48, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 56, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 53, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 50, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 55, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 53, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 50, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 49, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 57, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 54, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 53, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 50, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 49, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 57, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 54, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 53, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, + 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 50, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 50, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 50, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 57, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, + 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 54, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 50, 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 50, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 51, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 50, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 50, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 50, 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 50, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 55, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 54, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 50, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 51, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 48, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 50, 48, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 48, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 55, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 48, 54, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 48, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 52, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 51, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 48, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 48, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 48, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 57, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 56, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, + 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 53, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 57, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 50, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 49, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 57, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 56, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 54, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 53, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 56, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 56, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 50, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 56, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 57, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 55, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 54, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 55, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 51, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 50, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 55, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 55, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 54, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 55, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 54, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 54, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 51, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 50, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, + 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 53, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 55, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 54, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, + 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 51, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 48, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, + 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 55, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 52, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 51, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 48, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 56, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 55, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 52, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 49, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 48, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 56, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 53, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 52, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 49, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 48, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 57, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 56, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 53, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 52, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, + 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 49, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 57, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 56, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 48, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, + 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 53, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 48, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 48, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 50, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 49, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 48, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 128, 83, 69, 76, 69, 67, 84, 79, 210, 83, 69, 76, 69, 67, 84, + 69, 196, 83, 69, 73, 83, 77, 65, 128, 83, 69, 73, 83, 77, 193, 83, 69, + 72, 128, 83, 69, 71, 79, 76, 128, 83, 69, 71, 78, 79, 128, 83, 69, 71, + 77, 69, 78, 84, 128, 83, 69, 69, 86, 128, 83, 69, 69, 78, 85, 128, 83, + 69, 69, 78, 128, 83, 69, 69, 206, 83, 69, 69, 68, 76, 73, 78, 71, 128, + 83, 69, 69, 45, 78, 79, 45, 69, 86, 73, 204, 83, 69, 67, 84, 79, 82, 128, + 83, 69, 67, 84, 73, 79, 78, 128, 83, 69, 67, 84, 73, 79, 206, 83, 69, 67, + 82, 69, 84, 128, 83, 69, 67, 79, 78, 68, 128, 83, 69, 67, 65, 78, 84, + 128, 83, 69, 66, 65, 84, 66, 69, 73, 212, 83, 69, 65, 84, 128, 83, 69, + 65, 76, 128, 83, 69, 65, 71, 85, 76, 204, 83, 68, 79, 78, 199, 83, 68, + 128, 83, 67, 87, 65, 128, 83, 67, 82, 85, 80, 76, 69, 128, 83, 67, 82, + 79, 76, 76, 128, 83, 67, 82, 73, 80, 84, 128, 83, 67, 82, 69, 69, 78, + 128, 83, 67, 82, 69, 69, 206, 83, 67, 82, 69, 65, 77, 73, 78, 199, 83, + 67, 79, 82, 80, 73, 85, 83, 128, 83, 67, 79, 82, 80, 73, 79, 78, 128, 83, + 67, 79, 82, 69, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, 73, 128, 83, 67, 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 82, 79, 69, 68, 69, 82, 128, 83, 67, 72, 79, 79, 76, 128, 83, 67, 72, 79, 79, 204, 83, 67, 72, 79, 76, 65, 82, 128, 83, 67, 72, 69, 77, 193, 83, 67, @@ -1293,112 +1333,118 @@ static unsigned char lexicon[] = { 83, 65, 76, 212, 83, 65, 76, 76, 65, 76, 76, 65, 72, 79, 213, 83, 65, 76, 76, 193, 83, 65, 76, 65, 205, 83, 65, 76, 65, 128, 83, 65, 76, 45, 65, 77, 77, 79, 78, 73, 65, 67, 128, 83, 65, 76, 128, 83, 65, 75, 79, 84, - 128, 83, 65, 75, 69, 85, 65, 69, 128, 83, 65, 75, 197, 83, 65, 74, 68, - 65, 72, 128, 83, 65, 73, 76, 66, 79, 65, 84, 128, 83, 65, 73, 76, 128, - 83, 65, 73, 75, 85, 82, 85, 128, 83, 65, 72, 128, 83, 65, 71, 73, 84, 84, - 65, 82, 73, 85, 83, 128, 83, 65, 71, 65, 128, 83, 65, 71, 128, 83, 65, - 199, 83, 65, 70, 72, 65, 128, 83, 65, 70, 69, 84, 217, 83, 65, 68, 72, - 69, 128, 83, 65, 68, 69, 128, 83, 65, 68, 128, 83, 65, 196, 83, 65, 67, - 82, 73, 70, 73, 67, 73, 65, 204, 83, 65, 65, 73, 128, 83, 65, 65, 68, 72, - 85, 128, 83, 65, 45, 73, 128, 83, 65, 45, 50, 128, 83, 48, 52, 54, 128, - 83, 48, 52, 53, 128, 83, 48, 52, 52, 128, 83, 48, 52, 51, 128, 83, 48, - 52, 50, 128, 83, 48, 52, 49, 128, 83, 48, 52, 48, 128, 83, 48, 51, 57, - 128, 83, 48, 51, 56, 128, 83, 48, 51, 55, 128, 83, 48, 51, 54, 128, 83, - 48, 51, 53, 65, 128, 83, 48, 51, 53, 128, 83, 48, 51, 52, 128, 83, 48, - 51, 51, 128, 83, 48, 51, 50, 128, 83, 48, 51, 49, 128, 83, 48, 51, 48, - 128, 83, 48, 50, 57, 128, 83, 48, 50, 56, 128, 83, 48, 50, 55, 128, 83, - 48, 50, 54, 66, 128, 83, 48, 50, 54, 65, 128, 83, 48, 50, 54, 128, 83, - 48, 50, 53, 128, 83, 48, 50, 52, 128, 83, 48, 50, 51, 128, 83, 48, 50, - 50, 128, 83, 48, 50, 49, 128, 83, 48, 50, 48, 128, 83, 48, 49, 57, 128, - 83, 48, 49, 56, 128, 83, 48, 49, 55, 65, 128, 83, 48, 49, 55, 128, 83, - 48, 49, 54, 128, 83, 48, 49, 53, 128, 83, 48, 49, 52, 66, 128, 83, 48, - 49, 52, 65, 128, 83, 48, 49, 52, 128, 83, 48, 49, 51, 128, 83, 48, 49, - 50, 128, 83, 48, 49, 49, 128, 83, 48, 49, 48, 128, 83, 48, 48, 57, 128, - 83, 48, 48, 56, 128, 83, 48, 48, 55, 128, 83, 48, 48, 54, 65, 128, 83, - 48, 48, 54, 128, 83, 48, 48, 53, 128, 83, 48, 48, 52, 128, 83, 48, 48, - 51, 128, 83, 48, 48, 50, 65, 128, 83, 48, 48, 50, 128, 83, 48, 48, 49, - 128, 83, 45, 87, 128, 83, 45, 83, 72, 65, 80, 69, 196, 82, 89, 89, 128, - 82, 89, 88, 128, 82, 89, 84, 128, 82, 89, 82, 88, 128, 82, 89, 82, 128, - 82, 89, 80, 128, 82, 87, 79, 79, 128, 82, 87, 79, 128, 82, 87, 73, 73, - 128, 82, 87, 73, 128, 82, 87, 69, 69, 128, 82, 87, 69, 128, 82, 87, 65, - 72, 65, 128, 82, 87, 65, 65, 128, 82, 87, 65, 128, 82, 85, 88, 128, 82, - 85, 85, 66, 85, 82, 85, 128, 82, 85, 85, 128, 82, 85, 84, 128, 82, 85, - 83, 73, 128, 82, 85, 82, 88, 128, 82, 85, 82, 128, 82, 85, 80, 73, 73, - 128, 82, 85, 80, 69, 197, 82, 85, 80, 128, 82, 85, 79, 88, 128, 82, 85, - 79, 80, 128, 82, 85, 79, 128, 82, 85, 78, 79, 85, 84, 128, 82, 85, 78, - 78, 73, 78, 199, 82, 85, 78, 78, 69, 82, 128, 82, 85, 78, 128, 82, 85, - 77, 201, 82, 85, 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 82, 85, 76, - 69, 82, 128, 82, 85, 76, 69, 45, 68, 69, 76, 65, 89, 69, 68, 128, 82, 85, - 76, 69, 128, 82, 85, 75, 75, 65, 75, 72, 65, 128, 82, 85, 73, 83, 128, - 82, 85, 71, 66, 217, 82, 85, 66, 76, 197, 82, 85, 194, 82, 85, 65, 128, - 82, 84, 72, 65, 78, 199, 82, 84, 65, 71, 83, 128, 82, 84, 65, 71, 211, - 82, 82, 89, 88, 128, 82, 82, 89, 84, 128, 82, 82, 89, 82, 88, 128, 82, - 82, 89, 82, 128, 82, 82, 89, 80, 128, 82, 82, 85, 88, 128, 82, 82, 85, - 85, 128, 82, 82, 85, 84, 128, 82, 82, 85, 82, 88, 128, 82, 82, 85, 82, - 128, 82, 82, 85, 80, 128, 82, 82, 85, 79, 88, 128, 82, 82, 85, 79, 128, - 82, 82, 85, 128, 82, 82, 79, 88, 128, 82, 82, 79, 84, 128, 82, 82, 79, - 80, 128, 82, 82, 79, 79, 128, 82, 82, 79, 128, 82, 82, 73, 73, 128, 82, - 82, 73, 128, 82, 82, 69, 88, 128, 82, 82, 69, 84, 128, 82, 82, 69, 80, - 128, 82, 82, 69, 72, 128, 82, 82, 69, 200, 82, 82, 69, 69, 128, 82, 82, - 69, 128, 82, 82, 65, 88, 128, 82, 82, 65, 85, 128, 82, 82, 65, 73, 128, - 82, 82, 65, 65, 128, 82, 82, 65, 128, 82, 79, 87, 66, 79, 65, 84, 128, - 82, 79, 85, 78, 68, 69, 196, 82, 79, 85, 78, 68, 45, 84, 73, 80, 80, 69, - 196, 82, 79, 84, 85, 78, 68, 65, 128, 82, 79, 84, 65, 84, 69, 196, 82, - 79, 83, 72, 128, 82, 79, 83, 69, 84, 84, 69, 128, 82, 79, 83, 69, 128, - 82, 79, 79, 84, 128, 82, 79, 79, 83, 84, 69, 82, 128, 82, 79, 79, 75, - 128, 82, 79, 79, 70, 128, 82, 79, 77, 65, 78, 73, 65, 206, 82, 79, 77, - 65, 206, 82, 79, 77, 128, 82, 79, 76, 76, 69, 210, 82, 79, 76, 76, 69, - 68, 45, 85, 208, 82, 79, 72, 73, 78, 71, 89, 193, 82, 79, 71, 128, 82, - 79, 196, 82, 79, 67, 75, 69, 84, 128, 82, 79, 67, 203, 82, 79, 67, 128, - 82, 79, 66, 65, 84, 128, 82, 79, 65, 83, 84, 69, 196, 82, 79, 65, 82, - 128, 82, 79, 65, 128, 82, 78, 89, 73, 78, 199, 82, 78, 79, 79, 78, 128, - 82, 78, 79, 79, 206, 82, 78, 65, 205, 82, 77, 84, 128, 82, 76, 79, 128, - 82, 76, 77, 128, 82, 76, 73, 128, 82, 76, 69, 128, 82, 74, 69, 211, 82, - 74, 69, 128, 82, 74, 197, 82, 73, 86, 69, 82, 128, 82, 73, 84, 85, 65, - 76, 128, 82, 73, 84, 84, 79, 82, 85, 128, 82, 73, 84, 83, 73, 128, 82, - 73, 83, 73, 78, 199, 82, 73, 83, 72, 128, 82, 73, 82, 65, 128, 82, 73, - 80, 128, 82, 73, 78, 71, 211, 82, 73, 78, 71, 73, 78, 199, 82, 73, 78, - 70, 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, 206, 82, 73, 77, 71, 66, 65, - 128, 82, 73, 75, 82, 73, 75, 128, 82, 73, 71, 86, 69, 68, 73, 195, 82, - 73, 71, 72, 84, 87, 65, 82, 68, 83, 128, 82, 73, 71, 72, 84, 72, 65, 78, - 196, 82, 73, 71, 72, 84, 45, 84, 79, 45, 76, 69, 70, 212, 82, 73, 71, 72, - 84, 45, 83, 73, 68, 197, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 79, 87, - 69, 196, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 69, 196, 82, 73, 71, 72, - 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 82, 73, 71, 72, 84, 45, 76, 73, - 71, 72, 84, 69, 196, 82, 73, 71, 72, 84, 45, 72, 65, 78, 68, 69, 196, 82, - 73, 71, 72, 84, 45, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 70, 65, 67, - 73, 78, 199, 82, 73, 71, 72, 84, 128, 82, 73, 69, 85, 76, 45, 89, 69, 83, - 73, 69, 85, 78, 71, 128, 82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, - 72, 73, 69, 85, 72, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, - 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, - 84, 73, 75, 69, 85, 84, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, - 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 84, 72, 73, 69, - 85, 84, 72, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 84, 73, 75, - 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 83, 73, 79, - 83, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, - 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, - 128, 82, 73, 69, 85, 76, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, - 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, - 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, - 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, - 76, 45, 80, 73, 69, 85, 80, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, - 76, 45, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, - 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 65, 78, 83, 73, 79, 83, 128, - 82, 73, 69, 85, 76, 45, 78, 73, 69, 85, 78, 128, 82, 73, 69, 85, 76, 45, - 77, 73, 69, 85, 77, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 77, - 73, 69, 85, 77, 45, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, - 77, 73, 69, 85, 77, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, - 77, 73, 69, 85, 77, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, - 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, - 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, - 75, 128, 82, 73, 69, 85, 76, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, - 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 72, 73, 69, 85, 72, 128, 82, 73, - 69, 85, 76, 45, 67, 73, 69, 85, 67, 128, 82, 73, 69, 85, 204, 82, 73, 69, - 76, 128, 82, 73, 69, 69, 128, 82, 73, 67, 69, 77, 128, 82, 73, 67, 69, - 128, 82, 73, 67, 197, 82, 73, 66, 66, 79, 78, 128, 82, 73, 66, 66, 79, - 206, 82, 73, 65, 204, 82, 72, 79, 84, 73, 195, 82, 72, 79, 128, 82, 72, - 207, 82, 72, 65, 128, 82, 72, 128, 82, 71, 89, 73, 78, 71, 83, 128, 82, - 71, 89, 65, 78, 128, 82, 71, 89, 193, 82, 69, 86, 79, 76, 86, 73, 78, + 128, 83, 65, 75, 72, 193, 83, 65, 75, 69, 85, 65, 69, 128, 83, 65, 75, + 197, 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 66, 79, 65, 84, 128, + 83, 65, 73, 76, 128, 83, 65, 73, 75, 85, 82, 85, 128, 83, 65, 72, 128, + 83, 65, 71, 73, 84, 84, 65, 82, 73, 85, 83, 128, 83, 65, 71, 65, 128, 83, + 65, 71, 128, 83, 65, 199, 83, 65, 70, 72, 65, 128, 83, 65, 70, 69, 84, + 217, 83, 65, 68, 72, 69, 128, 83, 65, 68, 69, 128, 83, 65, 68, 128, 83, + 65, 196, 83, 65, 67, 82, 73, 70, 73, 67, 73, 65, 204, 83, 65, 65, 73, + 128, 83, 65, 65, 68, 72, 85, 128, 83, 65, 45, 73, 128, 83, 65, 45, 50, + 128, 83, 48, 52, 54, 128, 83, 48, 52, 53, 128, 83, 48, 52, 52, 128, 83, + 48, 52, 51, 128, 83, 48, 52, 50, 128, 83, 48, 52, 49, 128, 83, 48, 52, + 48, 128, 83, 48, 51, 57, 128, 83, 48, 51, 56, 128, 83, 48, 51, 55, 128, + 83, 48, 51, 54, 128, 83, 48, 51, 53, 65, 128, 83, 48, 51, 53, 128, 83, + 48, 51, 52, 128, 83, 48, 51, 51, 128, 83, 48, 51, 50, 128, 83, 48, 51, + 49, 128, 83, 48, 51, 48, 128, 83, 48, 50, 57, 128, 83, 48, 50, 56, 128, + 83, 48, 50, 55, 128, 83, 48, 50, 54, 66, 128, 83, 48, 50, 54, 65, 128, + 83, 48, 50, 54, 128, 83, 48, 50, 53, 128, 83, 48, 50, 52, 128, 83, 48, + 50, 51, 128, 83, 48, 50, 50, 128, 83, 48, 50, 49, 128, 83, 48, 50, 48, + 128, 83, 48, 49, 57, 128, 83, 48, 49, 56, 128, 83, 48, 49, 55, 65, 128, + 83, 48, 49, 55, 128, 83, 48, 49, 54, 128, 83, 48, 49, 53, 128, 83, 48, + 49, 52, 66, 128, 83, 48, 49, 52, 65, 128, 83, 48, 49, 52, 128, 83, 48, + 49, 51, 128, 83, 48, 49, 50, 128, 83, 48, 49, 49, 128, 83, 48, 49, 48, + 128, 83, 48, 48, 57, 128, 83, 48, 48, 56, 128, 83, 48, 48, 55, 128, 83, + 48, 48, 54, 65, 128, 83, 48, 48, 54, 128, 83, 48, 48, 53, 128, 83, 48, + 48, 52, 128, 83, 48, 48, 51, 128, 83, 48, 48, 50, 65, 128, 83, 48, 48, + 50, 128, 83, 48, 48, 49, 128, 83, 45, 87, 128, 83, 45, 83, 72, 65, 80, + 69, 196, 82, 89, 89, 128, 82, 89, 88, 128, 82, 89, 84, 128, 82, 89, 82, + 88, 128, 82, 89, 82, 128, 82, 89, 80, 128, 82, 87, 79, 79, 128, 82, 87, + 79, 128, 82, 87, 73, 73, 128, 82, 87, 73, 128, 82, 87, 69, 69, 128, 82, + 87, 69, 128, 82, 87, 65, 72, 65, 128, 82, 87, 65, 65, 128, 82, 87, 65, + 128, 82, 85, 88, 128, 82, 85, 85, 66, 85, 82, 85, 128, 82, 85, 85, 128, + 82, 85, 84, 128, 82, 85, 83, 73, 128, 82, 85, 82, 88, 128, 82, 85, 82, + 128, 82, 85, 80, 73, 73, 128, 82, 85, 80, 69, 197, 82, 85, 80, 128, 82, + 85, 79, 88, 128, 82, 85, 79, 80, 128, 82, 85, 79, 128, 82, 85, 78, 79, + 85, 84, 128, 82, 85, 78, 78, 73, 78, 199, 82, 85, 78, 78, 69, 82, 128, + 82, 85, 78, 128, 82, 85, 77, 201, 82, 85, 77, 65, 201, 82, 85, 77, 128, + 82, 85, 205, 82, 85, 76, 69, 82, 128, 82, 85, 76, 69, 45, 68, 69, 76, 65, + 89, 69, 68, 128, 82, 85, 76, 69, 128, 82, 85, 76, 65, 73, 128, 82, 85, + 75, 75, 65, 75, 72, 65, 128, 82, 85, 73, 83, 128, 82, 85, 71, 66, 217, + 82, 85, 68, 73, 77, 69, 78, 84, 193, 82, 85, 66, 76, 197, 82, 85, 194, + 82, 85, 65, 128, 82, 84, 72, 65, 78, 199, 82, 84, 65, 71, 83, 128, 82, + 84, 65, 71, 211, 82, 82, 89, 88, 128, 82, 82, 89, 84, 128, 82, 82, 89, + 82, 88, 128, 82, 82, 89, 82, 128, 82, 82, 89, 80, 128, 82, 82, 85, 88, + 128, 82, 82, 85, 85, 128, 82, 82, 85, 84, 128, 82, 82, 85, 82, 88, 128, + 82, 82, 85, 82, 128, 82, 82, 85, 80, 128, 82, 82, 85, 79, 88, 128, 82, + 82, 85, 79, 128, 82, 82, 85, 128, 82, 82, 82, 65, 128, 82, 82, 79, 88, + 128, 82, 82, 79, 84, 128, 82, 82, 79, 80, 128, 82, 82, 79, 79, 128, 82, + 82, 79, 128, 82, 82, 73, 73, 128, 82, 82, 73, 128, 82, 82, 69, 88, 128, + 82, 82, 69, 84, 128, 82, 82, 69, 80, 128, 82, 82, 69, 72, 128, 82, 82, + 69, 200, 82, 82, 69, 69, 128, 82, 82, 69, 128, 82, 82, 65, 88, 128, 82, + 82, 65, 85, 128, 82, 82, 65, 73, 128, 82, 82, 65, 65, 128, 82, 79, 87, + 66, 79, 65, 84, 128, 82, 79, 85, 78, 68, 69, 196, 82, 79, 85, 78, 68, 45, + 84, 73, 80, 80, 69, 196, 82, 79, 84, 85, 78, 68, 65, 128, 82, 79, 84, 65, + 84, 73, 79, 78, 83, 128, 82, 79, 84, 65, 84, 73, 79, 78, 45, 87, 65, 76, + 76, 80, 76, 65, 78, 197, 82, 79, 84, 65, 84, 73, 79, 78, 45, 70, 76, 79, + 79, 82, 80, 76, 65, 78, 197, 82, 79, 84, 65, 84, 73, 79, 78, 128, 82, 79, + 84, 65, 84, 73, 79, 206, 82, 79, 84, 65, 84, 69, 196, 82, 79, 83, 72, + 128, 82, 79, 83, 69, 84, 84, 69, 128, 82, 79, 83, 69, 128, 82, 79, 79, + 84, 128, 82, 79, 79, 83, 84, 69, 82, 128, 82, 79, 79, 75, 128, 82, 79, + 79, 70, 128, 82, 79, 77, 65, 78, 73, 65, 206, 82, 79, 77, 65, 206, 82, + 79, 77, 128, 82, 79, 76, 76, 73, 78, 199, 82, 79, 76, 76, 69, 210, 82, + 79, 76, 76, 69, 68, 45, 85, 208, 82, 79, 72, 73, 78, 71, 89, 193, 82, 79, + 71, 128, 82, 79, 196, 82, 79, 67, 75, 69, 84, 128, 82, 79, 67, 203, 82, + 79, 67, 128, 82, 79, 66, 79, 212, 82, 79, 66, 65, 84, 128, 82, 79, 65, + 83, 84, 69, 196, 82, 79, 65, 82, 128, 82, 79, 65, 128, 82, 78, 89, 73, + 78, 199, 82, 78, 79, 79, 78, 128, 82, 78, 79, 79, 206, 82, 78, 65, 205, + 82, 77, 84, 128, 82, 76, 79, 128, 82, 76, 77, 128, 82, 76, 73, 128, 82, + 76, 69, 128, 82, 74, 69, 211, 82, 74, 69, 128, 82, 74, 197, 82, 73, 86, + 69, 82, 128, 82, 73, 84, 85, 65, 76, 128, 82, 73, 84, 84, 79, 82, 85, + 128, 82, 73, 84, 83, 73, 128, 82, 73, 83, 73, 78, 199, 82, 73, 83, 72, + 128, 82, 73, 82, 65, 128, 82, 73, 80, 80, 76, 197, 82, 73, 80, 128, 82, + 73, 78, 71, 211, 82, 73, 78, 71, 73, 78, 199, 82, 73, 78, 70, 79, 82, 90, + 65, 78, 68, 79, 128, 82, 73, 206, 82, 73, 77, 71, 66, 65, 128, 82, 73, + 77, 128, 82, 73, 75, 82, 73, 75, 128, 82, 73, 71, 86, 69, 68, 73, 195, + 82, 73, 71, 72, 84, 87, 65, 82, 68, 83, 128, 82, 73, 71, 72, 84, 72, 65, + 78, 196, 82, 73, 71, 72, 84, 45, 84, 79, 45, 76, 69, 70, 212, 82, 73, 71, + 72, 84, 45, 83, 73, 68, 197, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 79, + 87, 69, 196, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 69, 196, 82, 73, 71, + 72, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 82, 73, 71, 72, 84, 45, 76, + 73, 71, 72, 84, 69, 196, 82, 73, 71, 72, 84, 45, 72, 65, 78, 68, 69, 196, + 82, 73, 71, 72, 84, 45, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 70, 65, + 67, 73, 78, 199, 82, 73, 71, 72, 84, 128, 82, 73, 69, 85, 76, 45, 89, 69, + 83, 73, 69, 85, 78, 71, 128, 82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, + 78, 72, 73, 69, 85, 72, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, + 45, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, + 45, 84, 73, 75, 69, 85, 84, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, + 76, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 84, 72, 73, + 69, 85, 84, 72, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 84, 73, + 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 83, 73, + 79, 83, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, + 80, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, + 75, 128, 82, 73, 69, 85, 76, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, + 45, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, + 76, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, + 45, 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, + 85, 76, 45, 80, 73, 69, 85, 80, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, + 85, 76, 45, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 80, 72, 73, + 69, 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 65, 78, 83, 73, 79, 83, + 128, 82, 73, 69, 85, 76, 45, 78, 73, 69, 85, 78, 128, 82, 73, 69, 85, 76, + 45, 77, 73, 69, 85, 77, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, + 77, 73, 69, 85, 77, 45, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, + 45, 77, 73, 69, 85, 77, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, + 45, 77, 73, 69, 85, 77, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, + 75, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, + 75, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, + 79, 75, 128, 82, 73, 69, 85, 76, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, + 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 72, 73, 69, 85, 72, 128, 82, + 73, 69, 85, 76, 45, 67, 73, 69, 85, 67, 128, 82, 73, 69, 85, 204, 82, 73, + 69, 76, 128, 82, 73, 69, 69, 128, 82, 73, 67, 69, 77, 128, 82, 73, 67, + 69, 128, 82, 73, 67, 197, 82, 73, 66, 66, 79, 78, 128, 82, 73, 66, 66, + 79, 206, 82, 73, 65, 204, 82, 72, 79, 84, 73, 195, 82, 72, 79, 128, 82, + 72, 207, 82, 72, 65, 128, 82, 72, 128, 82, 71, 89, 73, 78, 71, 83, 128, + 82, 71, 89, 65, 78, 128, 82, 71, 89, 193, 82, 69, 86, 79, 76, 86, 73, 78, 199, 82, 69, 86, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 86, 77, 65, 128, 82, 69, 86, 73, 65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 45, 83, 67, 72, 87, 65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 128, 82, 69, 86, 69, 82, @@ -1419,30 +1465,31 @@ static unsigned char lexicon[] = { 128, 82, 69, 206, 82, 69, 77, 85, 128, 82, 69, 77, 73, 78, 68, 69, 210, 82, 69, 77, 69, 68, 89, 128, 82, 69, 76, 73, 71, 73, 79, 78, 128, 82, 69, 76, 73, 69, 86, 69, 196, 82, 69, 76, 69, 65, 83, 69, 128, 82, 69, 76, 65, - 84, 73, 79, 78, 65, 204, 82, 69, 76, 65, 84, 73, 79, 78, 128, 82, 69, 76, - 65, 65, 128, 82, 69, 74, 65, 78, 199, 82, 69, 73, 196, 82, 69, 73, 128, - 82, 69, 71, 85, 76, 85, 83, 45, 52, 128, 82, 69, 71, 85, 76, 85, 83, 45, - 51, 128, 82, 69, 71, 85, 76, 85, 83, 45, 50, 128, 82, 69, 71, 85, 76, 85, - 83, 128, 82, 69, 71, 85, 76, 85, 211, 82, 69, 71, 73, 83, 84, 69, 82, 69, - 196, 82, 69, 71, 73, 79, 78, 65, 204, 82, 69, 71, 73, 65, 45, 50, 128, - 82, 69, 71, 73, 65, 128, 82, 69, 70, 79, 82, 77, 69, 196, 82, 69, 70, 69, - 82, 69, 78, 67, 197, 82, 69, 68, 85, 80, 76, 73, 67, 65, 84, 73, 79, 78, - 128, 82, 69, 67, 89, 67, 76, 73, 78, 199, 82, 69, 67, 89, 67, 76, 69, - 196, 82, 69, 67, 84, 73, 76, 73, 78, 69, 65, 210, 82, 69, 67, 84, 65, 78, - 71, 85, 76, 65, 210, 82, 69, 67, 84, 65, 78, 71, 76, 69, 128, 82, 69, 67, - 84, 65, 78, 71, 76, 197, 82, 69, 67, 82, 69, 65, 84, 73, 79, 78, 65, 204, - 82, 69, 67, 79, 82, 68, 73, 78, 199, 82, 69, 67, 79, 82, 68, 69, 82, 128, - 82, 69, 67, 79, 82, 68, 128, 82, 69, 67, 79, 82, 196, 82, 69, 67, 69, 80, - 84, 73, 86, 197, 82, 69, 67, 69, 73, 86, 69, 82, 128, 82, 69, 67, 69, 73, - 86, 69, 210, 82, 69, 65, 76, 71, 65, 82, 45, 50, 128, 82, 69, 65, 76, 71, - 65, 82, 128, 82, 69, 65, 72, 77, 85, 75, 128, 82, 69, 65, 67, 72, 128, - 82, 68, 207, 82, 68, 69, 204, 82, 66, 65, 83, 193, 82, 65, 89, 83, 128, - 82, 65, 89, 211, 82, 65, 89, 65, 78, 78, 65, 128, 82, 65, 84, 73, 79, - 128, 82, 65, 84, 72, 65, 128, 82, 65, 84, 72, 193, 82, 65, 84, 65, 128, - 82, 65, 84, 128, 82, 65, 83, 87, 65, 68, 73, 128, 82, 65, 83, 79, 85, - 204, 82, 65, 83, 72, 65, 128, 82, 65, 81, 128, 82, 65, 80, 73, 83, 77, - 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 65, 128, 82, 65, 78, 128, 82, - 65, 77, 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 75, 72, 65, 78, 71, + 88, 69, 68, 128, 82, 69, 76, 65, 84, 73, 79, 78, 65, 204, 82, 69, 76, 65, + 84, 73, 79, 78, 128, 82, 69, 76, 65, 65, 128, 82, 69, 74, 65, 78, 199, + 82, 69, 73, 196, 82, 69, 73, 128, 82, 69, 71, 85, 76, 85, 83, 45, 52, + 128, 82, 69, 71, 85, 76, 85, 83, 45, 51, 128, 82, 69, 71, 85, 76, 85, 83, + 45, 50, 128, 82, 69, 71, 85, 76, 85, 83, 128, 82, 69, 71, 85, 76, 85, + 211, 82, 69, 71, 73, 83, 84, 69, 82, 69, 196, 82, 69, 71, 73, 79, 78, 65, + 204, 82, 69, 71, 73, 65, 45, 50, 128, 82, 69, 71, 73, 65, 128, 82, 69, + 70, 79, 82, 77, 69, 196, 82, 69, 70, 69, 82, 69, 78, 67, 197, 82, 69, 68, + 85, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 82, 69, 67, 89, 67, 76, 73, + 78, 199, 82, 69, 67, 89, 67, 76, 69, 196, 82, 69, 67, 84, 73, 76, 73, 78, + 69, 65, 210, 82, 69, 67, 84, 65, 78, 71, 85, 76, 65, 210, 82, 69, 67, 84, + 65, 78, 71, 76, 69, 128, 82, 69, 67, 84, 65, 78, 71, 76, 197, 82, 69, 67, + 82, 69, 65, 84, 73, 79, 78, 65, 204, 82, 69, 67, 79, 82, 68, 73, 78, 199, + 82, 69, 67, 79, 82, 68, 69, 82, 128, 82, 69, 67, 79, 82, 68, 128, 82, 69, + 67, 79, 82, 196, 82, 69, 67, 73, 84, 65, 84, 73, 86, 197, 82, 69, 67, 69, + 80, 84, 73, 86, 197, 82, 69, 67, 69, 73, 86, 69, 82, 128, 82, 69, 67, 69, + 73, 86, 69, 210, 82, 69, 65, 76, 71, 65, 82, 45, 50, 128, 82, 69, 65, 76, + 71, 65, 82, 128, 82, 69, 65, 72, 77, 85, 75, 128, 82, 69, 65, 67, 72, + 128, 82, 68, 207, 82, 68, 69, 204, 82, 66, 65, 83, 193, 82, 65, 89, 83, + 128, 82, 65, 89, 211, 82, 65, 89, 65, 78, 78, 65, 128, 82, 65, 84, 73, + 79, 128, 82, 65, 84, 72, 65, 128, 82, 65, 84, 72, 193, 82, 65, 84, 65, + 128, 82, 65, 84, 128, 82, 65, 83, 87, 65, 68, 73, 128, 82, 65, 83, 79, + 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 81, 128, 82, 65, 80, 73, 83, + 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 65, 128, 82, 65, 78, 128, + 82, 65, 77, 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 75, 65, 65, 82, 65, 65, 78, 83, 65, 89, 65, 128, 82, 65, 73, 83, 73, 78, 199, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 66, 79, 87, 128, 82, 65, 73, 76, 87, 65, 89, 128, 82, 65, 73, 76, 87, 65, 217, 82, @@ -1482,144 +1529,147 @@ static unsigned char lexicon[] = { 128, 81, 85, 69, 69, 206, 81, 85, 69, 128, 81, 85, 66, 85, 84, 83, 128, 81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, 85, 65, 82, 84, 69, 82, 83, 128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, 65, 82, 84, 69, 82, 128, - 81, 85, 65, 82, 84, 69, 210, 81, 85, 65, 78, 84, 73, 84, 217, 81, 85, 65, - 68, 82, 85, 80, 76, 197, 81, 85, 65, 68, 82, 65, 78, 84, 128, 81, 85, 65, - 68, 82, 65, 78, 212, 81, 85, 65, 68, 67, 79, 76, 79, 78, 128, 81, 85, 65, - 68, 128, 81, 85, 65, 196, 81, 85, 65, 128, 81, 85, 128, 81, 208, 81, 79, - 88, 128, 81, 79, 84, 128, 81, 79, 80, 72, 128, 81, 79, 80, 65, 128, 81, - 79, 80, 128, 81, 79, 79, 128, 81, 79, 207, 81, 79, 70, 128, 81, 79, 198, - 81, 79, 65, 128, 81, 79, 128, 81, 78, 128, 81, 73, 88, 128, 81, 73, 84, - 83, 65, 128, 81, 73, 84, 128, 81, 73, 80, 128, 81, 73, 73, 128, 81, 73, - 69, 88, 128, 81, 73, 69, 84, 128, 81, 73, 69, 80, 128, 81, 73, 69, 128, - 81, 73, 128, 81, 72, 87, 73, 128, 81, 72, 87, 69, 69, 128, 81, 72, 87, - 69, 128, 81, 72, 87, 65, 65, 128, 81, 72, 87, 65, 128, 81, 72, 85, 128, - 81, 72, 79, 80, 72, 128, 81, 72, 79, 128, 81, 72, 73, 128, 81, 72, 69, - 69, 128, 81, 72, 69, 128, 81, 72, 65, 85, 128, 81, 72, 65, 65, 128, 81, - 72, 65, 128, 81, 71, 65, 128, 81, 69, 84, 65, 78, 65, 128, 81, 69, 69, - 128, 81, 69, 128, 81, 65, 89, 128, 81, 65, 85, 128, 81, 65, 84, 65, 78, - 128, 81, 65, 82, 78, 69, 217, 81, 65, 82, 128, 81, 65, 81, 128, 81, 65, - 80, 72, 128, 81, 65, 77, 65, 84, 83, 128, 81, 65, 77, 65, 84, 211, 81, - 65, 76, 193, 81, 65, 73, 82, 84, 72, 82, 65, 128, 81, 65, 73, 128, 81, - 65, 70, 128, 81, 65, 198, 81, 65, 68, 77, 65, 128, 81, 65, 65, 73, 128, - 81, 65, 65, 70, 85, 128, 81, 65, 65, 70, 128, 81, 48, 48, 55, 128, 81, - 48, 48, 54, 128, 81, 48, 48, 53, 128, 81, 48, 48, 52, 128, 81, 48, 48, - 51, 128, 81, 48, 48, 50, 128, 81, 48, 48, 49, 128, 80, 90, 128, 80, 89, - 88, 128, 80, 89, 84, 128, 80, 89, 82, 88, 128, 80, 89, 82, 128, 80, 89, - 80, 128, 80, 87, 79, 89, 128, 80, 87, 79, 79, 128, 80, 87, 79, 128, 80, - 87, 207, 80, 87, 73, 73, 128, 80, 87, 73, 128, 80, 87, 69, 69, 128, 80, - 87, 69, 128, 80, 87, 65, 65, 128, 80, 87, 128, 80, 86, 128, 80, 85, 88, - 128, 80, 85, 85, 84, 128, 80, 85, 85, 128, 80, 85, 84, 82, 69, 70, 65, - 67, 84, 73, 79, 78, 128, 80, 85, 84, 128, 80, 85, 212, 80, 85, 83, 72, - 80, 73, 78, 128, 80, 85, 83, 72, 80, 73, 75, 65, 128, 80, 85, 83, 72, 73, - 78, 199, 80, 85, 82, 88, 128, 80, 85, 82, 83, 69, 128, 80, 85, 82, 80, - 76, 197, 80, 85, 82, 78, 65, 77, 65, 128, 80, 85, 82, 73, 84, 89, 128, - 80, 85, 82, 73, 70, 89, 128, 80, 85, 82, 128, 80, 85, 81, 128, 80, 85, - 80, 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 128, 80, - 85, 78, 71, 65, 65, 77, 128, 80, 85, 78, 71, 128, 80, 85, 78, 67, 84, 85, - 65, 84, 73, 79, 78, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 206, 80, - 85, 77, 80, 128, 80, 85, 77, 128, 80, 85, 69, 128, 80, 85, 66, 76, 73, - 195, 80, 85, 194, 80, 85, 65, 81, 128, 80, 85, 65, 69, 128, 80, 85, 50, - 128, 80, 85, 49, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, - 128, 80, 83, 73, 76, 201, 80, 83, 73, 70, 73, 83, 84, 79, 83, 89, 78, 65, - 71, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 80, 65, 82, 65, 75, 65, - 76, 69, 83, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 206, 80, 83, 73, - 70, 73, 83, 84, 79, 76, 89, 71, 73, 83, 77, 65, 128, 80, 83, 73, 128, 80, - 83, 65, 76, 84, 69, 210, 80, 83, 128, 80, 82, 79, 86, 69, 128, 80, 82, - 79, 84, 79, 86, 65, 82, 89, 211, 80, 82, 79, 84, 79, 211, 80, 82, 79, 84, - 69, 67, 84, 69, 196, 80, 82, 79, 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, - 73, 128, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 65, 204, 80, 82, 79, 80, - 79, 82, 84, 73, 79, 78, 128, 80, 82, 79, 80, 69, 82, 84, 217, 80, 82, 79, - 80, 69, 76, 76, 69, 210, 80, 82, 79, 79, 70, 128, 80, 82, 79, 76, 79, 78, - 71, 69, 196, 80, 82, 79, 76, 65, 84, 73, 79, 78, 197, 80, 82, 79, 74, 69, - 67, 84, 79, 82, 128, 80, 82, 79, 74, 69, 67, 84, 73, 86, 69, 128, 80, 82, - 79, 74, 69, 67, 84, 73, 79, 78, 128, 80, 82, 79, 72, 73, 66, 73, 84, 69, - 196, 80, 82, 79, 71, 82, 69, 83, 83, 128, 80, 82, 79, 71, 82, 65, 205, - 80, 82, 79, 70, 79, 85, 78, 68, 128, 80, 82, 79, 68, 85, 67, 84, 128, 80, - 82, 79, 68, 85, 67, 212, 80, 82, 73, 86, 65, 84, 69, 128, 80, 82, 73, 86, - 65, 84, 197, 80, 82, 73, 86, 65, 67, 217, 80, 82, 73, 83, 72, 84, 72, 65, - 77, 65, 84, 82, 193, 80, 82, 73, 78, 84, 83, 128, 80, 82, 73, 78, 84, 69, - 82, 128, 80, 82, 73, 78, 84, 69, 210, 80, 82, 73, 78, 84, 128, 80, 82, - 73, 78, 212, 80, 82, 73, 78, 67, 69, 83, 83, 128, 80, 82, 73, 77, 69, - 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211, 80, 82, 69, - 83, 69, 84, 128, 80, 82, 69, 83, 69, 78, 84, 65, 84, 73, 79, 206, 80, 82, - 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, 82, 69, 80, 79, 78, 68, 69, - 82, 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, 72, 65, 128, 80, 82, 69, 70, - 65, 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, 69, 128, 80, 82, 69, - 67, 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, 83, 128, 80, 82, 69, - 67, 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69, 67, 69, - 68, 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, 82, 65, 77, 45, 80, 73, 73, - 128, 80, 82, 65, 77, 45, 80, 73, 201, 80, 82, 65, 77, 45, 77, 85, 79, 89, - 128, 80, 82, 65, 77, 45, 77, 85, 79, 217, 80, 82, 65, 77, 45, 66, 85, 79, - 78, 128, 80, 82, 65, 77, 45, 66, 85, 79, 206, 80, 82, 65, 77, 45, 66, 69, - 73, 128, 80, 82, 65, 77, 45, 66, 69, 201, 80, 82, 65, 77, 128, 80, 82, - 65, 205, 80, 82, 128, 80, 80, 86, 128, 80, 80, 77, 128, 80, 80, 65, 128, - 80, 79, 89, 128, 80, 79, 88, 128, 80, 79, 87, 69, 82, 211, 80, 79, 87, - 69, 82, 128, 80, 79, 87, 68, 69, 82, 69, 196, 80, 79, 87, 68, 69, 82, - 128, 80, 79, 85, 78, 196, 80, 79, 85, 76, 84, 82, 217, 80, 79, 85, 67, - 72, 128, 80, 79, 84, 65, 84, 79, 128, 80, 79, 84, 65, 66, 76, 197, 80, - 79, 212, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, - 66, 79, 88, 128, 80, 79, 83, 84, 65, 204, 80, 79, 83, 84, 128, 80, 79, - 83, 212, 80, 79, 83, 83, 69, 83, 83, 73, 79, 78, 128, 80, 79, 82, 84, 65, - 66, 76, 197, 80, 79, 82, 82, 69, 67, 84, 85, 83, 128, 80, 79, 82, 82, 69, - 67, 84, 85, 211, 80, 79, 80, 80, 69, 82, 128, 80, 79, 80, 128, 80, 79, - 208, 80, 79, 79, 68, 76, 69, 128, 80, 79, 79, 128, 80, 79, 78, 68, 79, - 128, 80, 79, 206, 80, 79, 77, 77, 69, 69, 128, 80, 79, 77, 77, 69, 197, - 80, 79, 76, 73, 83, 72, 128, 80, 79, 76, 73, 67, 197, 80, 79, 76, 201, - 80, 79, 76, 69, 128, 80, 79, 76, 197, 80, 79, 75, 82, 89, 84, 73, 69, - 128, 80, 79, 75, 79, 74, 73, 128, 80, 79, 73, 78, 84, 211, 80, 79, 73, - 78, 84, 79, 128, 80, 79, 73, 78, 84, 69, 82, 128, 80, 79, 73, 78, 84, 69, - 196, 80, 79, 73, 78, 84, 128, 80, 79, 73, 78, 212, 80, 79, 69, 84, 82, - 217, 80, 79, 69, 84, 73, 195, 80, 79, 68, 65, 84, 85, 83, 128, 80, 79, - 67, 75, 69, 212, 80, 79, 65, 128, 80, 79, 128, 80, 207, 80, 78, 69, 85, - 77, 65, 84, 65, 128, 80, 76, 85, 84, 79, 128, 80, 76, 85, 84, 65, 128, - 80, 76, 85, 83, 45, 77, 73, 78, 85, 211, 80, 76, 85, 83, 128, 80, 76, 85, - 82, 65, 76, 128, 80, 76, 85, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76, - 85, 75, 128, 80, 76, 85, 71, 128, 80, 76, 85, 128, 80, 76, 79, 87, 128, - 80, 76, 79, 80, 72, 85, 128, 80, 76, 72, 65, 85, 128, 80, 76, 69, 84, 72, - 82, 79, 78, 128, 80, 76, 68, 128, 80, 76, 65, 89, 73, 78, 199, 80, 76, - 65, 84, 69, 128, 80, 76, 65, 83, 84, 73, 67, 83, 128, 80, 76, 65, 78, 69, - 128, 80, 76, 65, 78, 197, 80, 76, 65, 78, 67, 203, 80, 76, 65, 75, 128, - 80, 76, 65, 71, 73, 79, 211, 80, 76, 65, 67, 69, 72, 79, 76, 68, 69, 210, - 80, 76, 65, 67, 197, 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, - 128, 80, 73, 90, 90, 65, 128, 80, 73, 88, 128, 80, 73, 87, 82, 128, 80, - 73, 84, 67, 72, 70, 79, 82, 75, 128, 80, 73, 84, 67, 72, 70, 79, 82, 203, - 80, 73, 84, 128, 80, 73, 83, 84, 79, 76, 128, 80, 73, 83, 69, 76, 69, 72, - 128, 80, 73, 83, 67, 69, 83, 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, - 73, 199, 80, 73, 82, 73, 69, 69, 78, 128, 80, 73, 82, 65, 67, 89, 128, - 80, 73, 82, 50, 128, 80, 73, 80, 73, 78, 71, 128, 80, 73, 80, 65, 69, 77, - 71, 66, 73, 69, 69, 128, 80, 73, 80, 65, 69, 77, 66, 65, 128, 80, 73, 80, - 128, 80, 73, 78, 87, 72, 69, 69, 204, 80, 73, 78, 69, 65, 80, 80, 76, 69, - 128, 80, 73, 78, 197, 80, 73, 78, 65, 82, 66, 79, 82, 65, 83, 128, 80, - 73, 76, 76, 128, 80, 73, 76, 197, 80, 73, 76, 67, 82, 79, 215, 80, 73, - 75, 85, 82, 85, 128, 80, 73, 75, 79, 128, 80, 73, 71, 128, 80, 73, 199, - 80, 73, 69, 88, 128, 80, 73, 69, 85, 80, 45, 84, 72, 73, 69, 85, 84, 72, - 128, 80, 73, 69, 85, 80, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80, - 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 80, - 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, - 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, - 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 80, - 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 80, 73, - 69, 85, 80, 45, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, - 80, 73, 69, 85, 80, 45, 82, 73, 69, 85, 76, 128, 80, 73, 69, 85, 80, 45, - 78, 73, 69, 85, 78, 128, 80, 73, 69, 85, 80, 45, 77, 73, 69, 85, 77, 128, - 80, 73, 69, 85, 80, 45, 75, 72, 73, 69, 85, 75, 72, 128, 80, 73, 69, 85, - 80, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 67, 72, 73, 69, - 85, 67, 72, 128, 80, 73, 69, 85, 208, 80, 73, 69, 84, 128, 80, 73, 69, - 80, 128, 80, 73, 69, 69, 84, 128, 80, 73, 69, 69, 81, 128, 80, 73, 69, - 67, 69, 128, 80, 73, 69, 128, 80, 73, 67, 84, 85, 82, 69, 128, 80, 73, - 67, 75, 69, 84, 128, 80, 73, 67, 75, 128, 80, 73, 65, 83, 85, 84, 79, 82, - 85, 128, 80, 73, 65, 83, 77, 193, 80, 73, 65, 78, 79, 128, 80, 201, 80, - 72, 87, 65, 128, 80, 72, 85, 84, 72, 65, 79, 128, 80, 72, 85, 210, 80, - 72, 85, 78, 71, 128, 80, 72, 82, 65, 83, 69, 128, 80, 72, 79, 78, 69, 83, - 128, 80, 72, 79, 69, 78, 73, 67, 73, 65, 206, 80, 72, 79, 65, 128, 80, - 72, 79, 128, 80, 72, 207, 80, 72, 78, 65, 69, 203, 80, 72, 73, 78, 84, - 72, 85, 128, 80, 72, 73, 76, 79, 83, 79, 80, 72, 69, 82, 211, 80, 72, 73, - 76, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, 45, 84, 72, 73, - 69, 85, 84, 72, 128, 80, 72, 73, 69, 85, 80, 72, 45, 83, 73, 79, 83, 128, - 80, 72, 73, 69, 85, 80, 72, 45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, - 85, 80, 72, 45, 72, 73, 69, 85, 72, 128, 80, 72, 73, 69, 85, 80, 200, 80, - 72, 73, 128, 80, 72, 201, 80, 72, 69, 69, 128, 80, 72, 69, 128, 80, 72, - 65, 83, 69, 45, 198, 80, 72, 65, 83, 69, 45, 194, 80, 72, 65, 82, 89, 78, + 81, 85, 65, 78, 84, 73, 84, 217, 81, 85, 65, 68, 82, 85, 80, 76, 197, 81, + 85, 65, 68, 82, 65, 78, 84, 128, 81, 85, 65, 68, 82, 65, 78, 212, 81, 85, + 65, 68, 67, 79, 76, 79, 78, 128, 81, 85, 65, 68, 128, 81, 85, 65, 196, + 81, 85, 65, 128, 81, 85, 128, 81, 208, 81, 79, 88, 128, 81, 79, 84, 128, + 81, 79, 80, 72, 128, 81, 79, 80, 65, 128, 81, 79, 80, 128, 81, 79, 79, + 128, 81, 79, 207, 81, 79, 70, 128, 81, 79, 198, 81, 79, 65, 128, 81, 79, + 128, 81, 78, 128, 81, 73, 88, 128, 81, 73, 84, 83, 65, 128, 81, 73, 84, + 128, 81, 73, 80, 128, 81, 73, 73, 128, 81, 73, 69, 88, 128, 81, 73, 69, + 84, 128, 81, 73, 69, 80, 128, 81, 73, 69, 128, 81, 73, 128, 81, 72, 87, + 73, 128, 81, 72, 87, 69, 69, 128, 81, 72, 87, 69, 128, 81, 72, 87, 65, + 65, 128, 81, 72, 87, 65, 128, 81, 72, 85, 128, 81, 72, 79, 80, 72, 128, + 81, 72, 79, 128, 81, 72, 73, 128, 81, 72, 69, 69, 128, 81, 72, 69, 128, + 81, 72, 65, 85, 128, 81, 72, 65, 65, 128, 81, 72, 65, 128, 81, 71, 65, + 128, 81, 69, 84, 65, 78, 65, 128, 81, 69, 69, 128, 81, 69, 128, 81, 65, + 89, 128, 81, 65, 85, 128, 81, 65, 84, 65, 78, 128, 81, 65, 82, 78, 69, + 217, 81, 65, 82, 128, 81, 65, 81, 128, 81, 65, 80, 72, 128, 81, 65, 77, + 65, 84, 83, 128, 81, 65, 77, 65, 84, 211, 81, 65, 76, 193, 81, 65, 73, + 82, 84, 72, 82, 65, 128, 81, 65, 73, 128, 81, 65, 70, 128, 81, 65, 198, + 81, 65, 68, 77, 65, 128, 81, 65, 65, 73, 128, 81, 65, 65, 70, 85, 128, + 81, 65, 65, 70, 128, 81, 48, 48, 55, 128, 81, 48, 48, 54, 128, 81, 48, + 48, 53, 128, 81, 48, 48, 52, 128, 81, 48, 48, 51, 128, 81, 48, 48, 50, + 128, 81, 48, 48, 49, 128, 80, 90, 128, 80, 89, 88, 128, 80, 89, 84, 128, + 80, 89, 82, 88, 128, 80, 89, 82, 128, 80, 89, 80, 128, 80, 87, 79, 89, + 128, 80, 87, 79, 79, 128, 80, 87, 79, 128, 80, 87, 207, 80, 87, 73, 73, + 128, 80, 87, 73, 128, 80, 87, 69, 69, 128, 80, 87, 69, 128, 80, 87, 65, + 65, 128, 80, 87, 128, 80, 86, 128, 80, 85, 88, 128, 80, 85, 85, 84, 128, + 80, 85, 85, 128, 80, 85, 84, 82, 69, 70, 65, 67, 84, 73, 79, 78, 128, 80, + 85, 84, 128, 80, 85, 212, 80, 85, 83, 72, 80, 73, 78, 128, 80, 85, 83, + 72, 80, 73, 75, 65, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, + 128, 80, 85, 82, 83, 69, 128, 80, 85, 82, 80, 76, 197, 80, 85, 82, 78, + 65, 77, 65, 128, 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 73, 70, 89, + 128, 80, 85, 82, 128, 80, 85, 81, 128, 80, 85, 80, 128, 80, 85, 79, 88, + 128, 80, 85, 79, 80, 128, 80, 85, 79, 128, 80, 85, 78, 71, 65, 65, 77, + 128, 80, 85, 78, 71, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 78, + 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 206, 80, 85, 77, 80, 128, + 80, 85, 77, 128, 80, 85, 70, 70, 69, 68, 128, 80, 85, 69, 128, 80, 85, + 67, 75, 128, 80, 85, 66, 76, 73, 195, 80, 85, 194, 80, 85, 65, 81, 128, + 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, 85, 49, 128, 80, 85, 128, 80, + 84, 72, 65, 72, 193, 80, 84, 69, 128, 80, 83, 73, 76, 201, 80, 83, 73, + 70, 73, 83, 84, 79, 83, 89, 78, 65, 71, 77, 65, 128, 80, 83, 73, 70, 73, + 83, 84, 79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 80, 83, 73, + 70, 73, 83, 84, 79, 206, 80, 83, 73, 70, 73, 83, 84, 79, 76, 89, 71, 73, + 83, 77, 65, 128, 80, 83, 73, 128, 80, 83, 65, 76, 84, 69, 210, 80, 83, + 128, 80, 82, 79, 86, 69, 128, 80, 82, 79, 84, 79, 86, 65, 82, 89, 211, + 80, 82, 79, 84, 79, 211, 80, 82, 79, 84, 69, 67, 84, 69, 196, 80, 82, 79, + 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 80, 82, 79, 80, 79, 82, + 84, 73, 79, 78, 65, 204, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 128, 80, + 82, 79, 80, 69, 82, 84, 217, 80, 82, 79, 80, 69, 76, 76, 69, 210, 80, 82, + 79, 79, 70, 128, 80, 82, 79, 76, 79, 78, 71, 69, 196, 80, 82, 79, 76, 65, + 84, 73, 79, 78, 197, 80, 82, 79, 74, 69, 67, 84, 79, 82, 128, 80, 82, 79, + 74, 69, 67, 84, 73, 86, 69, 128, 80, 82, 79, 74, 69, 67, 84, 73, 79, 78, + 128, 80, 82, 79, 72, 73, 66, 73, 84, 69, 196, 80, 82, 79, 71, 82, 69, 83, + 83, 128, 80, 82, 79, 71, 82, 65, 205, 80, 82, 79, 70, 79, 85, 78, 68, + 128, 80, 82, 79, 68, 85, 67, 84, 128, 80, 82, 79, 68, 85, 67, 212, 80, + 82, 73, 86, 65, 84, 69, 128, 80, 82, 73, 86, 65, 84, 197, 80, 82, 73, 86, + 65, 67, 217, 80, 82, 73, 83, 72, 84, 72, 65, 77, 65, 84, 82, 193, 80, 82, + 73, 78, 84, 83, 128, 80, 82, 73, 78, 84, 69, 82, 128, 80, 82, 73, 78, 84, + 69, 210, 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 78, + 67, 69, 83, 83, 128, 80, 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, + 82, 69, 86, 73, 79, 85, 211, 80, 82, 69, 83, 83, 69, 196, 80, 82, 69, 83, + 69, 84, 128, 80, 82, 69, 83, 69, 78, 84, 65, 84, 73, 79, 206, 80, 82, 69, + 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, 82, 69, 80, 79, 78, 68, 69, 82, + 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, 72, 65, 128, 80, 82, 69, 70, 65, + 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, 69, 128, 80, 82, 69, 67, + 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, 83, 128, 80, 82, 69, 67, + 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69, 67, 69, 68, + 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, 82, 65, 89, 69, 210, 80, 82, + 65, 77, 45, 80, 73, 73, 128, 80, 82, 65, 77, 45, 80, 73, 201, 80, 82, 65, + 77, 45, 77, 85, 79, 89, 128, 80, 82, 65, 77, 45, 77, 85, 79, 217, 80, 82, + 65, 77, 45, 66, 85, 79, 78, 128, 80, 82, 65, 77, 45, 66, 85, 79, 206, 80, + 82, 65, 77, 45, 66, 69, 73, 128, 80, 82, 65, 77, 45, 66, 69, 201, 80, 82, + 65, 77, 128, 80, 82, 65, 205, 80, 82, 128, 80, 80, 86, 128, 80, 80, 77, + 128, 80, 80, 65, 128, 80, 79, 89, 128, 80, 79, 88, 128, 80, 79, 87, 69, + 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 87, 68, 69, 82, 69, 196, 80, + 79, 87, 68, 69, 82, 128, 80, 79, 85, 78, 196, 80, 79, 85, 76, 84, 82, + 217, 80, 79, 85, 67, 72, 128, 80, 79, 84, 65, 84, 79, 128, 80, 79, 84, + 65, 66, 76, 197, 80, 79, 212, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, + 206, 80, 79, 83, 84, 66, 79, 88, 128, 80, 79, 83, 84, 65, 204, 80, 79, + 83, 84, 128, 80, 79, 83, 212, 80, 79, 83, 83, 69, 83, 83, 73, 79, 78, + 128, 80, 79, 83, 73, 84, 73, 79, 78, 83, 128, 80, 79, 82, 84, 65, 66, 76, + 197, 80, 79, 82, 82, 69, 67, 84, 85, 83, 128, 80, 79, 82, 82, 69, 67, 84, + 85, 211, 80, 79, 80, 80, 73, 78, 199, 80, 79, 80, 80, 69, 82, 128, 80, + 79, 80, 67, 79, 82, 78, 128, 80, 79, 80, 128, 80, 79, 208, 80, 79, 79, + 68, 76, 69, 128, 80, 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 206, + 80, 79, 77, 77, 69, 69, 128, 80, 79, 77, 77, 69, 197, 80, 79, 76, 73, 83, + 72, 128, 80, 79, 76, 73, 67, 197, 80, 79, 76, 201, 80, 79, 76, 69, 128, + 80, 79, 76, 197, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 75, 79, 74, + 73, 128, 80, 79, 73, 78, 84, 211, 80, 79, 73, 78, 84, 79, 128, 80, 79, + 73, 78, 84, 69, 82, 128, 80, 79, 73, 78, 84, 69, 196, 80, 79, 73, 78, 84, + 128, 80, 79, 73, 78, 212, 80, 79, 69, 84, 82, 217, 80, 79, 69, 84, 73, + 195, 80, 79, 68, 65, 84, 85, 83, 128, 80, 79, 67, 75, 69, 212, 80, 79, + 65, 128, 80, 79, 128, 80, 207, 80, 78, 69, 85, 77, 65, 84, 65, 128, 80, + 76, 85, 84, 79, 128, 80, 76, 85, 84, 65, 128, 80, 76, 85, 83, 45, 77, 73, + 78, 85, 211, 80, 76, 85, 83, 128, 80, 76, 85, 82, 65, 76, 128, 80, 76, + 85, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, 85, + 71, 128, 80, 76, 85, 128, 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, + 128, 80, 76, 72, 65, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, 128, 80, + 76, 68, 128, 80, 76, 65, 89, 73, 78, 199, 80, 76, 65, 84, 69, 128, 80, + 76, 65, 83, 84, 73, 67, 83, 128, 80, 76, 65, 78, 69, 128, 80, 76, 65, 78, + 67, 203, 80, 76, 65, 75, 128, 80, 76, 65, 71, 73, 79, 211, 80, 76, 65, + 67, 69, 72, 79, 76, 68, 69, 210, 80, 76, 65, 67, 197, 80, 76, 65, 128, + 80, 73, 90, 90, 73, 67, 65, 84, 79, 128, 80, 73, 90, 90, 65, 128, 80, 73, + 88, 128, 80, 73, 87, 82, 128, 80, 73, 84, 67, 72, 70, 79, 82, 75, 128, + 80, 73, 84, 67, 72, 70, 79, 82, 203, 80, 73, 84, 128, 80, 73, 83, 84, 79, + 76, 128, 80, 73, 83, 69, 76, 69, 72, 128, 80, 73, 83, 67, 69, 83, 128, + 80, 73, 82, 73, 71, 128, 80, 73, 82, 73, 199, 80, 73, 82, 73, 69, 69, 78, + 128, 80, 73, 82, 65, 67, 89, 128, 80, 73, 82, 50, 128, 80, 73, 80, 73, + 78, 71, 128, 80, 73, 80, 65, 69, 77, 71, 66, 73, 69, 69, 128, 80, 73, 80, + 65, 69, 77, 66, 65, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, + 204, 80, 73, 78, 69, 65, 80, 80, 76, 69, 128, 80, 73, 78, 197, 80, 73, + 78, 65, 82, 66, 79, 82, 65, 83, 128, 80, 73, 76, 76, 128, 80, 73, 76, + 197, 80, 73, 76, 67, 82, 79, 215, 80, 73, 75, 85, 82, 85, 128, 80, 73, + 75, 79, 128, 80, 73, 71, 128, 80, 73, 199, 80, 73, 69, 88, 128, 80, 73, + 69, 85, 80, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45, + 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80, 73, 69, 85, 80, 45, 83, 73, + 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 80, 73, 69, 85, 80, 45, 83, 73, + 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45, 83, + 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, 73, 69, 85, 80, 45, 83, 73, + 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 80, 73, 69, 85, 80, 45, 83, 73, + 79, 83, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 82, 73, 69, + 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, 80, 73, 69, 85, 80, 45, 82, + 73, 69, 85, 76, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, 78, 128, 80, + 73, 69, 85, 80, 45, 77, 73, 69, 85, 77, 128, 80, 73, 69, 85, 80, 45, 75, + 72, 73, 69, 85, 75, 72, 128, 80, 73, 69, 85, 80, 45, 67, 73, 69, 85, 67, + 128, 80, 73, 69, 85, 80, 45, 67, 72, 73, 69, 85, 67, 72, 128, 80, 73, 69, + 85, 208, 80, 73, 69, 84, 128, 80, 73, 69, 80, 128, 80, 73, 69, 69, 84, + 128, 80, 73, 69, 69, 81, 128, 80, 73, 69, 67, 69, 128, 80, 73, 69, 128, + 80, 73, 67, 84, 85, 82, 69, 128, 80, 73, 67, 75, 69, 84, 128, 80, 73, 67, + 75, 128, 80, 73, 65, 83, 85, 84, 79, 82, 85, 128, 80, 73, 65, 83, 77, + 193, 80, 73, 65, 78, 79, 128, 80, 201, 80, 72, 87, 65, 128, 80, 72, 85, + 84, 72, 65, 79, 128, 80, 72, 85, 210, 80, 72, 85, 78, 71, 128, 80, 72, + 82, 65, 83, 69, 128, 80, 72, 79, 78, 69, 83, 128, 80, 72, 79, 69, 78, 73, + 67, 73, 65, 206, 80, 72, 79, 65, 128, 80, 72, 79, 128, 80, 72, 207, 80, + 72, 78, 65, 69, 203, 80, 72, 73, 78, 84, 72, 85, 128, 80, 72, 73, 76, 79, + 83, 79, 80, 72, 69, 82, 211, 80, 72, 73, 76, 73, 80, 80, 73, 78, 197, 80, + 72, 73, 69, 85, 80, 72, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 72, 73, + 69, 85, 80, 72, 45, 83, 73, 79, 83, 128, 80, 72, 73, 69, 85, 80, 72, 45, + 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, 85, 80, 72, 45, 72, 73, 69, 85, + 72, 128, 80, 72, 73, 69, 85, 80, 200, 80, 72, 73, 128, 80, 72, 201, 80, + 72, 69, 69, 128, 80, 72, 69, 128, 80, 72, 65, 83, 69, 45, 198, 80, 72, + 65, 83, 69, 45, 194, 80, 72, 65, 83, 69, 45, 193, 80, 72, 65, 82, 89, 78, 71, 69, 65, 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, 72, 65, 77, 128, 80, 72, 65, 73, 83, 84, 79, 211, 80, 72, 65, 71, 83, 45, 80, 193, 80, 72, 65, 66, 128, 80, 72, 65, 65, 82, 75, 65, 65, 128, 80, 72, @@ -1646,20 +1696,20 @@ static unsigned char lexicon[] = { 78, 83, 85, 128, 80, 69, 78, 83, 73, 86, 197, 80, 69, 78, 78, 217, 80, 69, 78, 78, 65, 78, 84, 128, 80, 69, 78, 73, 72, 73, 128, 80, 69, 78, 71, 85, 73, 78, 128, 80, 69, 78, 71, 75, 65, 76, 128, 80, 69, 78, 69, 84, 82, - 65, 84, 73, 79, 78, 128, 80, 69, 78, 67, 73, 76, 128, 80, 69, 206, 80, - 69, 76, 65, 83, 84, 79, 78, 128, 80, 69, 76, 65, 83, 84, 79, 206, 80, 69, - 73, 84, 72, 128, 80, 69, 72, 69, 72, 128, 80, 69, 72, 69, 200, 80, 69, - 72, 128, 80, 69, 200, 80, 69, 69, 90, 73, 128, 80, 69, 69, 83, 72, 73, - 128, 80, 69, 69, 80, 128, 80, 69, 69, 77, 128, 80, 69, 69, 73, 128, 80, - 69, 69, 128, 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 83, 128, 80, 69, 68, - 69, 83, 84, 82, 73, 65, 78, 128, 80, 69, 68, 69, 83, 84, 65, 76, 128, 80, - 69, 68, 69, 83, 84, 65, 204, 80, 69, 68, 65, 204, 80, 69, 65, 67, 72, - 128, 80, 69, 65, 67, 69, 128, 80, 69, 65, 67, 197, 80, 68, 73, 128, 80, - 68, 70, 128, 80, 68, 128, 80, 67, 128, 80, 65, 90, 69, 82, 128, 80, 65, - 89, 69, 82, 79, 75, 128, 80, 65, 89, 65, 78, 78, 65, 128, 80, 65, 89, - 128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 215, 80, 65, 86, 73, - 89, 65, 78, 73, 128, 80, 65, 85, 128, 80, 65, 213, 80, 65, 84, 84, 69, - 82, 78, 128, 80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, + 65, 84, 73, 79, 78, 128, 80, 69, 78, 67, 73, 76, 128, 80, 69, 76, 65, 83, + 84, 79, 78, 128, 80, 69, 76, 65, 83, 84, 79, 206, 80, 69, 73, 84, 72, + 128, 80, 69, 72, 69, 72, 128, 80, 69, 72, 69, 200, 80, 69, 72, 128, 80, + 69, 200, 80, 69, 69, 90, 73, 128, 80, 69, 69, 83, 72, 73, 128, 80, 69, + 69, 80, 128, 80, 69, 69, 77, 128, 80, 69, 69, 73, 128, 80, 69, 69, 128, + 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 83, 128, 80, 69, 68, 69, 83, 84, + 82, 73, 65, 78, 128, 80, 69, 68, 69, 83, 84, 65, 76, 128, 80, 69, 68, 69, + 83, 84, 65, 204, 80, 69, 68, 65, 204, 80, 69, 65, 75, 211, 80, 69, 65, + 67, 72, 128, 80, 69, 65, 67, 69, 128, 80, 69, 65, 67, 197, 80, 68, 73, + 128, 80, 68, 70, 128, 80, 68, 128, 80, 67, 128, 80, 65, 90, 69, 82, 128, + 80, 65, 89, 69, 82, 79, 75, 128, 80, 65, 89, 65, 78, 78, 65, 128, 80, 65, + 89, 128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 215, 80, 65, 86, + 73, 89, 65, 78, 73, 128, 80, 65, 85, 128, 80, 65, 213, 80, 65, 84, 84, + 69, 82, 78, 128, 80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, 200, 80, 65, 84, 65, 75, 128, 80, 65, 84, 65, 72, 128, 80, 65, 84, 128, 80, 65, 83, 85, 81, 128, 80, 65, 83, 83, 80, 79, 82, 212, 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, 76, 76, 45, 85, 80, 45, 79, 85, 84, 80, 85, 212, @@ -1709,40 +1759,42 @@ static unsigned char lexicon[] = { 69, 196, 80, 65, 73, 78, 84, 66, 82, 85, 83, 72, 128, 80, 65, 73, 128, 80, 65, 72, 76, 65, 86, 201, 80, 65, 72, 128, 80, 65, 71, 69, 83, 128, 80, 65, 71, 69, 82, 128, 80, 65, 71, 197, 80, 65, 68, 77, 193, 80, 65, - 68, 68, 73, 78, 199, 80, 65, 68, 193, 80, 65, 68, 128, 80, 65, 67, 75, - 73, 78, 71, 128, 80, 65, 67, 75, 65, 71, 69, 128, 80, 65, 65, 84, 85, - 128, 80, 65, 65, 83, 69, 78, 84, 79, 128, 80, 65, 65, 82, 65, 69, 128, - 80, 65, 65, 77, 128, 80, 65, 65, 73, 128, 80, 65, 65, 45, 80, 73, 76, 76, - 65, 128, 80, 65, 65, 128, 80, 50, 128, 80, 48, 49, 49, 128, 80, 48, 49, - 48, 128, 80, 48, 48, 57, 128, 80, 48, 48, 56, 128, 80, 48, 48, 55, 128, - 80, 48, 48, 54, 128, 80, 48, 48, 53, 128, 80, 48, 48, 52, 128, 80, 48, - 48, 51, 65, 128, 80, 48, 48, 51, 128, 80, 48, 48, 50, 128, 80, 48, 48, - 49, 65, 128, 80, 48, 48, 49, 128, 79, 89, 82, 65, 78, 73, 83, 77, 193, - 79, 89, 65, 78, 78, 65, 128, 79, 88, 73, 65, 128, 79, 88, 73, 193, 79, - 88, 69, 73, 65, 201, 79, 88, 69, 73, 193, 79, 86, 69, 82, 82, 73, 68, 69, - 128, 79, 86, 69, 82, 76, 79, 78, 199, 79, 86, 69, 82, 76, 73, 78, 69, - 128, 79, 86, 69, 82, 76, 65, 89, 128, 79, 86, 69, 82, 76, 65, 80, 80, 73, - 78, 199, 79, 86, 69, 82, 76, 65, 80, 128, 79, 86, 69, 82, 76, 65, 73, 68, - 128, 79, 86, 69, 82, 66, 65, 82, 128, 79, 86, 65, 204, 79, 85, 84, 76, - 73, 78, 69, 196, 79, 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, - 79, 85, 84, 66, 79, 216, 79, 85, 78, 75, 73, 193, 79, 85, 78, 67, 69, - 128, 79, 85, 78, 67, 197, 79, 84, 85, 128, 79, 84, 84, 65, 86, 193, 79, - 84, 84, 128, 79, 84, 72, 65, 76, 65, 206, 79, 84, 72, 65, 76, 128, 79, - 83, 77, 65, 78, 89, 193, 79, 83, 67, 128, 79, 82, 84, 72, 79, 71, 79, 78, - 65, 204, 79, 82, 84, 72, 79, 68, 79, 216, 79, 82, 78, 65, 84, 197, 79, - 82, 78, 65, 77, 69, 78, 84, 128, 79, 82, 78, 65, 77, 69, 78, 212, 79, 82, - 75, 72, 79, 206, 79, 82, 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, - 128, 79, 82, 69, 45, 50, 128, 79, 82, 68, 73, 78, 65, 204, 79, 82, 68, - 69, 210, 79, 82, 67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 197, 79, 80, - 84, 73, 79, 206, 79, 80, 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83, 83, - 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80, 80, - 79, 83, 73, 78, 199, 79, 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85, 67, - 72, 85, 83, 128, 79, 80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, - 84, 79, 210, 79, 80, 69, 82, 65, 84, 73, 78, 199, 79, 80, 69, 78, 73, 78, - 199, 79, 80, 69, 78, 45, 80, 128, 79, 80, 69, 78, 45, 79, 85, 84, 76, 73, - 78, 69, 196, 79, 80, 69, 78, 45, 79, 128, 79, 80, 69, 78, 45, 207, 79, - 80, 69, 78, 45, 72, 69, 65, 68, 69, 196, 79, 80, 69, 78, 45, 67, 73, 82, - 67, 85, 73, 84, 45, 79, 85, 84, 80, 85, 212, 79, 80, 69, 206, 79, 79, 90, + 68, 68, 76, 197, 80, 65, 68, 68, 73, 78, 199, 80, 65, 68, 193, 80, 65, + 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 67, 75, 65, 71, 69, + 128, 80, 65, 65, 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 128, 80, + 65, 65, 82, 65, 69, 128, 80, 65, 65, 77, 128, 80, 65, 65, 73, 128, 80, + 65, 65, 45, 80, 73, 76, 76, 65, 128, 80, 65, 65, 128, 80, 50, 128, 80, + 48, 49, 49, 128, 80, 48, 49, 48, 128, 80, 48, 48, 57, 128, 80, 48, 48, + 56, 128, 80, 48, 48, 55, 128, 80, 48, 48, 54, 128, 80, 48, 48, 53, 128, + 80, 48, 48, 52, 128, 80, 48, 48, 51, 65, 128, 80, 48, 48, 51, 128, 80, + 48, 48, 50, 128, 80, 48, 48, 49, 65, 128, 80, 48, 48, 49, 128, 79, 89, + 82, 65, 78, 73, 83, 77, 193, 79, 89, 65, 78, 78, 65, 128, 79, 88, 73, 65, + 128, 79, 88, 73, 193, 79, 88, 69, 73, 65, 201, 79, 88, 69, 73, 193, 79, + 86, 69, 82, 82, 73, 68, 69, 128, 79, 86, 69, 82, 76, 79, 78, 199, 79, 86, + 69, 82, 76, 73, 78, 69, 128, 79, 86, 69, 82, 76, 65, 89, 128, 79, 86, 69, + 82, 76, 65, 80, 80, 73, 78, 199, 79, 86, 69, 82, 76, 65, 80, 128, 79, 86, + 69, 82, 76, 65, 73, 68, 128, 79, 86, 69, 82, 66, 65, 82, 128, 79, 86, 65, + 76, 128, 79, 86, 65, 204, 79, 85, 84, 76, 73, 78, 69, 196, 79, 85, 84, + 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, 79, 85, 84, 66, 79, 216, 79, + 85, 78, 75, 73, 193, 79, 85, 78, 67, 69, 128, 79, 85, 78, 67, 197, 79, + 84, 85, 128, 79, 84, 84, 65, 86, 193, 79, 84, 84, 128, 79, 84, 72, 69, + 82, 211, 79, 84, 72, 69, 210, 79, 84, 72, 65, 76, 65, 206, 79, 84, 72, + 65, 76, 128, 79, 83, 77, 65, 78, 89, 193, 79, 83, 67, 128, 79, 82, 84, + 72, 79, 71, 79, 78, 65, 204, 79, 82, 84, 72, 79, 68, 79, 216, 79, 82, 78, + 65, 84, 197, 79, 82, 78, 65, 77, 69, 78, 84, 83, 128, 79, 82, 78, 65, 77, + 69, 78, 84, 128, 79, 82, 78, 65, 77, 69, 78, 212, 79, 82, 75, 72, 79, + 206, 79, 82, 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, + 82, 69, 45, 50, 128, 79, 82, 68, 73, 78, 65, 204, 79, 82, 68, 69, 210, + 79, 82, 67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 197, 79, 80, 84, 73, 79, + 206, 79, 80, 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83, 83, 73, 79, 78, + 128, 79, 80, 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, + 78, 199, 79, 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85, 67, 72, 85, 83, + 128, 79, 80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, + 210, 79, 80, 69, 82, 65, 84, 73, 78, 199, 79, 80, 69, 78, 73, 78, 199, + 79, 80, 69, 78, 45, 80, 128, 79, 80, 69, 78, 45, 79, 85, 84, 76, 73, 78, + 69, 196, 79, 80, 69, 78, 45, 79, 128, 79, 80, 69, 78, 45, 207, 79, 80, + 69, 78, 45, 72, 69, 65, 68, 69, 196, 79, 80, 69, 78, 45, 67, 73, 82, 67, + 85, 73, 84, 45, 79, 85, 84, 80, 85, 212, 79, 80, 69, 78, 128, 79, 79, 90, 69, 128, 79, 79, 89, 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 77, 85, 128, 79, 79, 72, 128, 79, 79, 69, 128, 79, 79, 66, 79, 79, 70, 73, 76, 73, 128, 79, 78, 85, 128, 79, 78, 83, 85, 128, 79, 78, 78, 128, 79, @@ -1758,398 +1810,416 @@ static unsigned char lexicon[] = { 79, 71, 79, 78, 69, 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 70, 70, 73, 67, 69, 82, 128, 79, 70, 70, 73, 67, 69, 128, 79, 70, 70, 73, 67, 197, 79, 70, 70, 128, 79, 69, 89, 128, 79, 69, 75, 128, - 79, 68, 69, 78, 128, 79, 68, 68, 128, 79, 68, 196, 79, 67, 84, 79, 80, - 85, 83, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 84, 69, 212, 79, - 67, 84, 65, 71, 79, 78, 128, 79, 67, 210, 79, 67, 76, 79, 67, 75, 128, - 79, 67, 67, 76, 85, 83, 73, 79, 78, 128, 79, 66, 83, 84, 82, 85, 67, 84, - 73, 79, 78, 128, 79, 66, 79, 76, 211, 79, 66, 79, 204, 79, 66, 79, 70, - 73, 76, 73, 128, 79, 66, 76, 73, 81, 85, 197, 79, 66, 74, 69, 67, 212, - 79, 66, 69, 76, 85, 83, 128, 79, 66, 69, 76, 79, 83, 128, 79, 66, 128, - 79, 65, 89, 128, 79, 65, 75, 128, 79, 65, 66, 79, 65, 70, 73, 76, 73, - 128, 79, 193, 79, 48, 53, 49, 128, 79, 48, 53, 48, 66, 128, 79, 48, 53, - 48, 65, 128, 79, 48, 53, 48, 128, 79, 48, 52, 57, 128, 79, 48, 52, 56, - 128, 79, 48, 52, 55, 128, 79, 48, 52, 54, 128, 79, 48, 52, 53, 128, 79, - 48, 52, 52, 128, 79, 48, 52, 51, 128, 79, 48, 52, 50, 128, 79, 48, 52, - 49, 128, 79, 48, 52, 48, 128, 79, 48, 51, 57, 128, 79, 48, 51, 56, 128, - 79, 48, 51, 55, 128, 79, 48, 51, 54, 68, 128, 79, 48, 51, 54, 67, 128, - 79, 48, 51, 54, 66, 128, 79, 48, 51, 54, 65, 128, 79, 48, 51, 54, 128, - 79, 48, 51, 53, 128, 79, 48, 51, 52, 128, 79, 48, 51, 51, 65, 128, 79, - 48, 51, 51, 128, 79, 48, 51, 50, 128, 79, 48, 51, 49, 128, 79, 48, 51, - 48, 65, 128, 79, 48, 51, 48, 128, 79, 48, 50, 57, 65, 128, 79, 48, 50, - 57, 128, 79, 48, 50, 56, 128, 79, 48, 50, 55, 128, 79, 48, 50, 54, 128, - 79, 48, 50, 53, 65, 128, 79, 48, 50, 53, 128, 79, 48, 50, 52, 65, 128, - 79, 48, 50, 52, 128, 79, 48, 50, 51, 128, 79, 48, 50, 50, 128, 79, 48, - 50, 49, 128, 79, 48, 50, 48, 65, 128, 79, 48, 50, 48, 128, 79, 48, 49, - 57, 65, 128, 79, 48, 49, 57, 128, 79, 48, 49, 56, 128, 79, 48, 49, 55, - 128, 79, 48, 49, 54, 128, 79, 48, 49, 53, 128, 79, 48, 49, 52, 128, 79, - 48, 49, 51, 128, 79, 48, 49, 50, 128, 79, 48, 49, 49, 128, 79, 48, 49, - 48, 67, 128, 79, 48, 49, 48, 66, 128, 79, 48, 49, 48, 65, 128, 79, 48, - 49, 48, 128, 79, 48, 48, 57, 128, 79, 48, 48, 56, 128, 79, 48, 48, 55, - 128, 79, 48, 48, 54, 70, 128, 79, 48, 48, 54, 69, 128, 79, 48, 48, 54, - 68, 128, 79, 48, 48, 54, 67, 128, 79, 48, 48, 54, 66, 128, 79, 48, 48, - 54, 65, 128, 79, 48, 48, 54, 128, 79, 48, 48, 53, 65, 128, 79, 48, 48, - 53, 128, 79, 48, 48, 52, 128, 79, 48, 48, 51, 128, 79, 48, 48, 50, 128, - 79, 48, 48, 49, 65, 128, 79, 48, 48, 49, 128, 79, 45, 89, 69, 128, 79, - 45, 79, 45, 73, 128, 79, 45, 69, 128, 78, 90, 89, 88, 128, 78, 90, 89, - 84, 128, 78, 90, 89, 82, 88, 128, 78, 90, 89, 82, 128, 78, 90, 89, 80, - 128, 78, 90, 89, 128, 78, 90, 85, 88, 128, 78, 90, 85, 82, 88, 128, 78, - 90, 85, 82, 128, 78, 90, 85, 81, 128, 78, 90, 85, 80, 128, 78, 90, 85, - 79, 88, 128, 78, 90, 85, 79, 128, 78, 90, 85, 206, 78, 90, 85, 128, 78, - 90, 79, 88, 128, 78, 90, 79, 80, 128, 78, 90, 73, 88, 128, 78, 90, 73, - 84, 128, 78, 90, 73, 80, 128, 78, 90, 73, 69, 88, 128, 78, 90, 73, 69, - 80, 128, 78, 90, 73, 69, 128, 78, 90, 73, 128, 78, 90, 69, 88, 128, 78, - 90, 69, 85, 77, 128, 78, 90, 69, 128, 78, 90, 65, 88, 128, 78, 90, 65, - 84, 128, 78, 90, 65, 81, 128, 78, 90, 65, 80, 128, 78, 90, 65, 128, 78, - 90, 193, 78, 89, 87, 65, 128, 78, 89, 85, 88, 128, 78, 89, 85, 85, 128, - 78, 89, 85, 84, 128, 78, 89, 85, 80, 128, 78, 89, 85, 79, 88, 128, 78, - 89, 85, 79, 80, 128, 78, 89, 85, 79, 128, 78, 89, 85, 78, 128, 78, 89, - 85, 69, 128, 78, 89, 85, 128, 78, 89, 79, 88, 128, 78, 89, 79, 84, 128, - 78, 89, 79, 80, 128, 78, 89, 79, 79, 128, 78, 89, 79, 78, 128, 78, 89, - 79, 65, 128, 78, 89, 79, 128, 78, 89, 74, 65, 128, 78, 89, 73, 88, 128, - 78, 89, 73, 84, 128, 78, 89, 73, 212, 78, 89, 73, 211, 78, 89, 73, 210, - 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, 68, 79, 128, 78, 89, 73, 78, - 128, 78, 89, 73, 73, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, 69, 84, - 128, 78, 89, 73, 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, 128, 78, - 89, 201, 78, 89, 72, 65, 128, 78, 89, 69, 84, 128, 78, 89, 69, 212, 78, - 89, 69, 78, 128, 78, 89, 69, 72, 128, 78, 89, 69, 200, 78, 89, 69, 69, - 128, 78, 89, 69, 128, 78, 89, 196, 78, 89, 67, 65, 128, 78, 89, 65, 85, - 128, 78, 89, 65, 73, 128, 78, 89, 65, 72, 128, 78, 89, 65, 69, 77, 65, - 69, 128, 78, 89, 65, 65, 128, 78, 87, 79, 79, 128, 78, 87, 79, 128, 78, - 87, 73, 73, 128, 78, 87, 73, 128, 78, 87, 69, 128, 78, 87, 65, 65, 128, - 78, 87, 65, 128, 78, 87, 128, 78, 86, 128, 78, 85, 88, 128, 78, 85, 85, - 78, 128, 78, 85, 85, 128, 78, 85, 84, 73, 76, 76, 85, 128, 78, 85, 84, - 128, 78, 85, 212, 78, 85, 82, 88, 128, 78, 85, 82, 128, 78, 85, 80, 128, - 78, 85, 79, 88, 128, 78, 85, 79, 80, 128, 78, 85, 79, 128, 78, 85, 78, - 85, 90, 128, 78, 85, 78, 85, 218, 78, 85, 78, 71, 128, 78, 85, 78, 65, - 86, 85, 212, 78, 85, 78, 65, 86, 73, 203, 78, 85, 78, 128, 78, 85, 206, - 78, 85, 77, 69, 82, 207, 78, 85, 77, 69, 82, 65, 84, 79, 210, 78, 85, 77, - 69, 82, 65, 204, 78, 85, 77, 66, 69, 82, 83, 128, 78, 85, 77, 66, 69, 82, - 128, 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 76, - 128, 78, 85, 75, 84, 65, 128, 78, 85, 69, 78, 71, 128, 78, 85, 69, 128, - 78, 85, 66, 73, 65, 206, 78, 85, 65, 69, 128, 78, 85, 49, 49, 128, 78, - 85, 49, 177, 78, 85, 48, 50, 50, 65, 128, 78, 85, 48, 50, 50, 128, 78, - 85, 48, 50, 49, 128, 78, 85, 48, 50, 48, 128, 78, 85, 48, 49, 57, 128, - 78, 85, 48, 49, 56, 65, 128, 78, 85, 48, 49, 56, 128, 78, 85, 48, 49, 55, - 128, 78, 85, 48, 49, 54, 128, 78, 85, 48, 49, 53, 128, 78, 85, 48, 49, - 52, 128, 78, 85, 48, 49, 51, 128, 78, 85, 48, 49, 50, 128, 78, 85, 48, - 49, 49, 65, 128, 78, 85, 48, 49, 49, 128, 78, 85, 48, 49, 48, 65, 128, - 78, 85, 48, 49, 48, 128, 78, 85, 48, 48, 57, 128, 78, 85, 48, 48, 56, - 128, 78, 85, 48, 48, 55, 128, 78, 85, 48, 48, 54, 128, 78, 85, 48, 48, - 53, 128, 78, 85, 48, 48, 52, 128, 78, 85, 48, 48, 51, 128, 78, 85, 48, - 48, 50, 128, 78, 85, 48, 48, 49, 128, 78, 84, 88, 73, 86, 128, 78, 84, - 85, 85, 128, 78, 84, 85, 77, 128, 78, 84, 85, 74, 128, 78, 84, 213, 78, - 84, 83, 65, 85, 128, 78, 84, 79, 81, 80, 69, 78, 128, 78, 84, 79, 71, - 128, 78, 84, 79, 199, 78, 84, 73, 69, 197, 78, 84, 72, 65, 85, 128, 78, - 84, 69, 85, 78, 71, 66, 65, 128, 78, 84, 69, 85, 77, 128, 78, 84, 69, 78, - 128, 78, 84, 69, 69, 128, 78, 84, 65, 80, 128, 78, 84, 65, 208, 78, 84, - 65, 65, 128, 78, 83, 85, 79, 212, 78, 83, 85, 78, 128, 78, 83, 85, 77, - 128, 78, 83, 79, 77, 128, 78, 83, 73, 69, 69, 84, 128, 78, 83, 73, 69, - 69, 80, 128, 78, 83, 73, 69, 69, 128, 78, 83, 72, 85, 84, 128, 78, 83, - 72, 85, 212, 78, 83, 72, 85, 79, 80, 128, 78, 83, 72, 85, 69, 128, 78, - 83, 72, 73, 69, 69, 128, 78, 83, 72, 69, 69, 128, 78, 83, 72, 65, 81, - 128, 78, 83, 72, 65, 128, 78, 83, 69, 85, 65, 69, 78, 128, 78, 83, 69, - 78, 128, 78, 83, 65, 128, 78, 82, 89, 88, 128, 78, 82, 89, 84, 128, 78, - 82, 89, 82, 88, 128, 78, 82, 89, 82, 128, 78, 82, 89, 80, 128, 78, 82, - 89, 128, 78, 82, 85, 88, 128, 78, 82, 85, 84, 128, 78, 82, 85, 82, 88, - 128, 78, 82, 85, 82, 128, 78, 82, 85, 80, 128, 78, 82, 85, 65, 128, 78, - 82, 85, 128, 78, 82, 79, 88, 128, 78, 82, 79, 80, 128, 78, 82, 79, 128, - 78, 82, 69, 88, 128, 78, 82, 69, 84, 128, 78, 82, 69, 211, 78, 82, 69, - 80, 128, 78, 82, 69, 128, 78, 82, 65, 88, 128, 78, 82, 65, 84, 128, 78, - 82, 65, 80, 128, 78, 82, 65, 128, 78, 81, 73, 71, 128, 78, 79, 89, 128, - 78, 79, 88, 128, 78, 79, 87, 67, 128, 78, 79, 86, 69, 77, 66, 69, 82, - 128, 78, 79, 84, 84, 79, 128, 78, 79, 84, 69, 83, 128, 78, 79, 84, 69, - 72, 69, 65, 68, 128, 78, 79, 84, 69, 72, 69, 65, 196, 78, 79, 84, 69, 66, - 79, 79, 75, 128, 78, 79, 84, 69, 66, 79, 79, 203, 78, 79, 84, 69, 128, - 78, 79, 84, 197, 78, 79, 84, 67, 72, 69, 196, 78, 79, 84, 67, 72, 128, - 78, 79, 84, 65, 84, 73, 79, 206, 78, 79, 84, 128, 78, 79, 212, 78, 79, - 83, 69, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 72, 69, - 82, 206, 78, 79, 82, 84, 72, 69, 65, 83, 84, 45, 80, 79, 73, 78, 84, 73, - 78, 199, 78, 79, 82, 77, 65, 204, 78, 79, 82, 68, 73, 195, 78, 79, 210, - 78, 79, 80, 128, 78, 79, 79, 78, 85, 128, 78, 79, 79, 128, 78, 79, 78, - 70, 79, 82, 75, 73, 78, 71, 128, 78, 79, 78, 45, 80, 79, 84, 65, 66, 76, - 197, 78, 79, 78, 45, 74, 79, 73, 78, 69, 82, 128, 78, 79, 78, 45, 66, 82, - 69, 65, 75, 73, 78, 199, 78, 79, 78, 128, 78, 79, 77, 73, 78, 65, 204, - 78, 79, 75, 72, 85, 75, 128, 78, 79, 68, 69, 128, 78, 79, 65, 128, 78, - 79, 45, 66, 82, 69, 65, 203, 78, 78, 85, 85, 128, 78, 78, 85, 128, 78, - 78, 79, 79, 128, 78, 78, 79, 128, 78, 78, 78, 85, 85, 128, 78, 78, 78, - 85, 128, 78, 78, 78, 79, 79, 128, 78, 78, 78, 79, 128, 78, 78, 78, 73, - 73, 128, 78, 78, 78, 73, 128, 78, 78, 78, 69, 69, 128, 78, 78, 78, 69, - 128, 78, 78, 78, 65, 85, 128, 78, 78, 78, 65, 73, 128, 78, 78, 78, 65, - 65, 128, 78, 78, 78, 65, 128, 78, 78, 78, 128, 78, 78, 72, 65, 128, 78, - 78, 71, 79, 79, 128, 78, 78, 71, 79, 128, 78, 78, 71, 73, 73, 128, 78, - 78, 71, 73, 128, 78, 78, 71, 65, 65, 128, 78, 78, 71, 65, 128, 78, 78, - 71, 128, 78, 78, 66, 83, 80, 128, 78, 77, 128, 78, 76, 65, 85, 128, 78, - 76, 48, 50, 48, 128, 78, 76, 48, 49, 57, 128, 78, 76, 48, 49, 56, 128, - 78, 76, 48, 49, 55, 65, 128, 78, 76, 48, 49, 55, 128, 78, 76, 48, 49, 54, - 128, 78, 76, 48, 49, 53, 128, 78, 76, 48, 49, 52, 128, 78, 76, 48, 49, - 51, 128, 78, 76, 48, 49, 50, 128, 78, 76, 48, 49, 49, 128, 78, 76, 48, - 49, 48, 128, 78, 76, 48, 48, 57, 128, 78, 76, 48, 48, 56, 128, 78, 76, - 48, 48, 55, 128, 78, 76, 48, 48, 54, 128, 78, 76, 48, 48, 53, 65, 128, - 78, 76, 48, 48, 53, 128, 78, 76, 48, 48, 52, 128, 78, 76, 48, 48, 51, - 128, 78, 76, 48, 48, 50, 128, 78, 76, 48, 48, 49, 128, 78, 76, 128, 78, - 75, 79, 77, 128, 78, 75, 207, 78, 75, 73, 78, 68, 73, 128, 78, 75, 65, - 85, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78, 74, 89, 88, 128, 78, 74, - 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74, 89, 82, 128, 78, 74, 89, - 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128, 78, 74, 85, 82, 88, 128, - 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128, 78, 74, 85, 80, 128, 78, - 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, 74, 85, 69, 81, 128, 78, - 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74, 79, 88, 128, 78, 74, 79, - 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79, 128, 78, 74, 79, 128, 78, - 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74, 73, 80, 128, 78, 74, 73, - 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74, 73, 69, 80, 128, 78, 74, - 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74, 73, 128, 78, 74, 201, 78, - 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128, 78, 74, 69, 85, 65, 69, 78, - 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78, 74, 69, 69, 69, 69, 128, - 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74, 69, 128, 78, 74, 65, 81, - 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77, 76, 73, 128, 78, 74, 65, - 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88, 128, 78, 73, 84, 82, 69, - 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, 71, 85, 128, 78, 73, 80, - 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69, 84, 89, 128, 78, 73, 78, - 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78, 128, 78, 73, 78, 69, 84, 69, - 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 78, 73, 78, - 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78, 68, 65, 178, 78, 73, 78, - 57, 128, 78, 73, 78, 128, 78, 73, 77, 128, 78, 73, 205, 78, 73, 75, 72, - 65, 72, 73, 84, 128, 78, 73, 75, 65, 72, 73, 84, 128, 78, 73, 75, 65, - 128, 78, 73, 72, 83, 72, 86, 65, 83, 65, 128, 78, 73, 71, 73, 68, 65, 77, - 73, 78, 128, 78, 73, 71, 73, 68, 65, 69, 83, 72, 128, 78, 73, 71, 72, 84, - 128, 78, 73, 71, 72, 212, 78, 73, 71, 71, 65, 72, 73, 84, 65, 128, 78, - 73, 69, 88, 128, 78, 73, 69, 85, 78, 45, 84, 73, 75, 69, 85, 84, 128, 78, - 73, 69, 85, 78, 45, 84, 72, 73, 69, 85, 84, 72, 128, 78, 73, 69, 85, 78, - 45, 83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 82, 73, 69, 85, 76, 128, - 78, 73, 69, 85, 78, 45, 80, 73, 69, 85, 80, 128, 78, 73, 69, 85, 78, 45, - 80, 65, 78, 83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 75, 73, 89, 69, - 79, 75, 128, 78, 73, 69, 85, 78, 45, 72, 73, 69, 85, 72, 128, 78, 73, 69, - 85, 78, 45, 67, 73, 69, 85, 67, 128, 78, 73, 69, 85, 78, 45, 67, 72, 73, - 69, 85, 67, 72, 128, 78, 73, 69, 85, 206, 78, 73, 69, 80, 128, 78, 73, - 69, 128, 78, 73, 66, 128, 78, 73, 65, 128, 78, 73, 50, 128, 78, 72, 85, - 69, 128, 78, 72, 74, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, 71, - 86, 69, 128, 78, 71, 85, 85, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, - 79, 84, 128, 78, 71, 85, 79, 128, 78, 71, 85, 65, 78, 128, 78, 71, 85, - 65, 69, 84, 128, 78, 71, 85, 65, 69, 128, 78, 71, 79, 88, 128, 78, 71, - 79, 85, 128, 78, 71, 79, 213, 78, 71, 79, 84, 128, 78, 71, 79, 81, 128, - 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 77, 128, 78, 71, - 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 89, 69, - 69, 128, 78, 71, 75, 87, 65, 69, 78, 128, 78, 71, 75, 85, 80, 128, 78, - 71, 75, 85, 78, 128, 78, 71, 75, 85, 77, 128, 78, 71, 75, 85, 69, 78, 90, - 69, 85, 77, 128, 78, 71, 75, 85, 197, 78, 71, 75, 73, 78, 68, 201, 78, - 71, 75, 73, 69, 69, 128, 78, 71, 75, 69, 85, 88, 128, 78, 71, 75, 69, 85, - 82, 73, 128, 78, 71, 75, 69, 85, 65, 69, 81, 128, 78, 71, 75, 69, 85, 65, - 69, 77, 128, 78, 71, 75, 65, 81, 128, 78, 71, 75, 65, 80, 128, 78, 71, - 75, 65, 65, 77, 73, 128, 78, 71, 75, 65, 128, 78, 71, 73, 69, 88, 128, - 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 128, 78, 71, 72, 65, 128, 78, - 71, 71, 87, 65, 69, 78, 128, 78, 71, 71, 85, 82, 65, 69, 128, 78, 71, 71, - 85, 80, 128, 78, 71, 71, 85, 79, 81, 128, 78, 71, 71, 85, 79, 209, 78, - 71, 71, 85, 79, 78, 128, 78, 71, 71, 85, 79, 77, 128, 78, 71, 71, 85, 77, - 128, 78, 71, 71, 85, 69, 69, 84, 128, 78, 71, 71, 85, 65, 69, 83, 72, 65, - 197, 78, 71, 71, 85, 65, 69, 206, 78, 71, 71, 85, 65, 128, 78, 71, 71, - 85, 128, 78, 71, 71, 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, - 128, 78, 71, 71, 69, 85, 88, 128, 78, 71, 71, 69, 85, 65, 69, 84, 128, - 78, 71, 71, 69, 85, 65, 69, 128, 78, 71, 71, 69, 213, 78, 71, 71, 69, 78, - 128, 78, 71, 71, 69, 69, 84, 128, 78, 71, 71, 69, 69, 69, 69, 128, 78, - 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 65, 80, 128, 78, - 71, 71, 65, 65, 77, 65, 69, 128, 78, 71, 71, 65, 65, 77, 128, 78, 71, 71, - 65, 65, 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, 85, 82, - 69, 85, 84, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, - 69, 128, 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, 65, 88, 128, 78, 71, - 65, 85, 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 81, 128, - 78, 71, 65, 80, 128, 78, 71, 65, 78, 71, 85, 128, 78, 71, 65, 78, 128, - 78, 71, 65, 73, 128, 78, 71, 65, 72, 128, 78, 71, 65, 65, 73, 128, 78, - 71, 193, 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 83, - 80, 65, 80, 69, 82, 128, 78, 69, 87, 76, 73, 78, 69, 128, 78, 69, 87, 76, - 73, 78, 197, 78, 69, 87, 128, 78, 69, 85, 84, 82, 65, 204, 78, 69, 85, - 84, 69, 82, 128, 78, 69, 84, 87, 79, 82, 75, 69, 196, 78, 69, 84, 128, - 78, 69, 212, 78, 69, 83, 84, 69, 196, 78, 69, 81, 85, 68, 65, 65, 128, - 78, 69, 80, 84, 85, 78, 69, 128, 78, 69, 80, 128, 78, 69, 79, 128, 78, - 69, 207, 78, 69, 78, 79, 69, 128, 78, 69, 78, 65, 78, 79, 128, 78, 69, - 78, 128, 78, 69, 76, 128, 78, 69, 73, 84, 72, 69, 210, 78, 69, 71, 65, - 84, 73, 79, 206, 78, 69, 71, 65, 84, 69, 196, 78, 69, 67, 75, 84, 73, 69, - 128, 78, 69, 66, 69, 78, 83, 84, 73, 77, 77, 69, 128, 78, 68, 85, 88, - 128, 78, 68, 85, 84, 128, 78, 68, 85, 82, 88, 128, 78, 68, 85, 82, 128, - 78, 68, 85, 80, 128, 78, 68, 85, 78, 128, 78, 68, 213, 78, 68, 79, 88, - 128, 78, 68, 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, 79, 128, 78, - 68, 79, 78, 128, 78, 68, 79, 77, 66, 85, 128, 78, 68, 79, 76, 197, 78, - 68, 73, 88, 128, 78, 68, 73, 84, 128, 78, 68, 73, 81, 128, 78, 68, 73, - 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73, 68, - 65, 128, 78, 68, 73, 65, 81, 128, 78, 68, 69, 88, 128, 78, 68, 69, 85, - 88, 128, 78, 68, 69, 85, 84, 128, 78, 68, 69, 85, 65, 69, 82, 69, 69, - 128, 78, 68, 69, 80, 128, 78, 68, 69, 69, 128, 78, 68, 69, 128, 78, 68, - 65, 88, 128, 78, 68, 65, 84, 128, 78, 68, 65, 80, 128, 78, 68, 65, 77, - 128, 78, 68, 65, 65, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 68, 65, 65, - 128, 78, 68, 65, 193, 78, 67, 72, 65, 85, 128, 78, 66, 89, 88, 128, 78, - 66, 89, 84, 128, 78, 66, 89, 82, 88, 128, 78, 66, 89, 82, 128, 78, 66, - 89, 80, 128, 78, 66, 89, 128, 78, 66, 85, 88, 128, 78, 66, 85, 84, 128, - 78, 66, 85, 82, 88, 128, 78, 66, 85, 82, 128, 78, 66, 85, 80, 128, 78, - 66, 85, 128, 78, 66, 79, 88, 128, 78, 66, 79, 84, 128, 78, 66, 79, 80, - 128, 78, 66, 79, 128, 78, 66, 73, 88, 128, 78, 66, 73, 84, 128, 78, 66, - 73, 80, 128, 78, 66, 73, 69, 88, 128, 78, 66, 73, 69, 80, 128, 78, 66, - 73, 69, 128, 78, 66, 73, 128, 78, 66, 72, 128, 78, 66, 65, 88, 128, 78, - 66, 65, 84, 128, 78, 66, 65, 80, 128, 78, 66, 65, 128, 78, 65, 89, 65, - 78, 78, 65, 128, 78, 65, 89, 128, 78, 65, 88, 73, 65, 206, 78, 65, 88, - 128, 78, 65, 85, 84, 72, 83, 128, 78, 65, 85, 68, 73, 218, 78, 65, 84, - 85, 82, 65, 204, 78, 65, 84, 73, 79, 78, 65, 204, 78, 65, 83, 75, 65, 80, - 201, 78, 65, 83, 72, 73, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, - 78, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, 206, 78, 65, 83, 65, - 204, 78, 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 81, 128, 78, 65, - 79, 211, 78, 65, 78, 83, 65, 78, 65, 81, 128, 78, 65, 78, 71, 77, 79, 78, - 84, 72, 79, 128, 78, 65, 78, 68, 128, 78, 65, 78, 65, 128, 78, 65, 77, - 69, 128, 78, 65, 77, 197, 78, 65, 77, 50, 128, 78, 65, 77, 128, 78, 65, - 75, 128, 78, 65, 73, 82, 193, 78, 65, 73, 204, 78, 65, 71, 82, 201, 78, - 65, 71, 65, 82, 128, 78, 65, 71, 65, 128, 78, 65, 71, 193, 78, 65, 71, - 128, 78, 65, 199, 78, 65, 69, 128, 78, 65, 66, 76, 65, 128, 78, 65, 66, - 65, 84, 65, 69, 65, 206, 78, 65, 65, 83, 73, 75, 89, 65, 89, 65, 128, 78, - 65, 65, 75, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, 73, 128, 78, 65, - 193, 78, 65, 52, 128, 78, 65, 50, 128, 78, 65, 45, 50, 128, 78, 48, 52, - 50, 128, 78, 48, 52, 49, 128, 78, 48, 52, 48, 128, 78, 48, 51, 57, 128, - 78, 48, 51, 56, 128, 78, 48, 51, 55, 65, 128, 78, 48, 51, 55, 128, 78, - 48, 51, 54, 128, 78, 48, 51, 53, 65, 128, 78, 48, 51, 53, 128, 78, 48, - 51, 52, 65, 128, 78, 48, 51, 52, 128, 78, 48, 51, 51, 65, 128, 78, 48, - 51, 51, 128, 78, 48, 51, 50, 128, 78, 48, 51, 49, 128, 78, 48, 51, 48, - 128, 78, 48, 50, 57, 128, 78, 48, 50, 56, 128, 78, 48, 50, 55, 128, 78, - 48, 50, 54, 128, 78, 48, 50, 53, 65, 128, 78, 48, 50, 53, 128, 78, 48, - 50, 52, 128, 78, 48, 50, 51, 128, 78, 48, 50, 50, 128, 78, 48, 50, 49, - 128, 78, 48, 50, 48, 128, 78, 48, 49, 57, 128, 78, 48, 49, 56, 66, 128, - 78, 48, 49, 56, 65, 128, 78, 48, 49, 56, 128, 78, 48, 49, 55, 128, 78, - 48, 49, 54, 128, 78, 48, 49, 53, 128, 78, 48, 49, 52, 128, 78, 48, 49, - 51, 128, 78, 48, 49, 50, 128, 78, 48, 49, 49, 128, 78, 48, 49, 48, 128, - 78, 48, 48, 57, 128, 78, 48, 48, 56, 128, 78, 48, 48, 55, 128, 78, 48, - 48, 54, 128, 78, 48, 48, 53, 128, 78, 48, 48, 52, 128, 78, 48, 48, 51, - 128, 78, 48, 48, 50, 128, 78, 48, 48, 49, 128, 78, 45, 67, 82, 69, 197, - 78, 45, 65, 82, 217, 77, 89, 88, 128, 77, 89, 84, 128, 77, 89, 83, 76, - 73, 84, 69, 128, 77, 89, 80, 128, 77, 89, 65, 128, 77, 89, 193, 77, 89, - 128, 77, 217, 77, 87, 79, 79, 128, 77, 87, 79, 128, 77, 87, 73, 73, 128, - 77, 87, 73, 128, 77, 87, 69, 69, 128, 77, 87, 69, 128, 77, 87, 65, 65, - 128, 77, 87, 65, 128, 77, 87, 128, 77, 215, 77, 86, 83, 128, 77, 86, 79, - 80, 128, 77, 86, 73, 128, 77, 86, 69, 85, 65, 69, 78, 71, 65, 77, 128, - 77, 86, 128, 77, 214, 77, 85, 88, 128, 77, 85, 85, 83, 73, 75, 65, 84, - 79, 65, 78, 128, 77, 85, 85, 82, 68, 72, 65, 74, 193, 77, 85, 85, 128, - 77, 85, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 77, 85, - 83, 72, 82, 79, 79, 77, 128, 77, 85, 83, 72, 51, 128, 77, 85, 83, 72, - 179, 77, 85, 83, 72, 128, 77, 85, 83, 200, 77, 85, 83, 128, 77, 85, 82, - 88, 128, 77, 85, 82, 71, 85, 50, 128, 77, 85, 82, 69, 128, 77, 85, 82, - 68, 65, 128, 77, 85, 82, 68, 193, 77, 85, 82, 128, 77, 85, 81, 68, 65, - 77, 128, 77, 85, 80, 128, 77, 85, 79, 88, 128, 77, 85, 79, 84, 128, 77, - 85, 79, 80, 128, 77, 85, 79, 77, 65, 69, 128, 77, 85, 79, 128, 77, 85, - 78, 83, 85, 66, 128, 77, 85, 78, 65, 72, 128, 77, 85, 78, 128, 77, 85, - 76, 84, 73, 83, 69, 84, 128, 77, 85, 76, 84, 73, 83, 69, 212, 77, 85, 76, - 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 77, 85, 76, 84, 73, 80, - 76, 73, 67, 65, 84, 73, 79, 206, 77, 85, 76, 84, 73, 80, 76, 197, 77, 85, - 76, 84, 73, 79, 67, 85, 76, 65, 210, 77, 85, 76, 84, 73, 77, 65, 80, 128, - 77, 85, 76, 84, 201, 77, 85, 75, 80, 72, 82, 69, 78, 71, 128, 77, 85, 73, - 78, 128, 77, 85, 71, 83, 128, 77, 85, 71, 128, 77, 85, 199, 77, 85, 69, - 78, 128, 77, 85, 69, 128, 77, 85, 67, 72, 128, 77, 85, 67, 200, 77, 85, - 67, 65, 65, 68, 128, 77, 85, 65, 83, 128, 77, 85, 65, 78, 128, 77, 85, - 65, 69, 128, 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, - 128, 77, 82, 207, 77, 80, 65, 128, 77, 79, 89, 65, 73, 128, 77, 79, 88, - 128, 77, 79, 86, 73, 197, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, - 77, 79, 85, 84, 200, 77, 79, 85, 83, 69, 128, 77, 79, 85, 83, 197, 77, - 79, 85, 78, 84, 65, 73, 78, 83, 128, 77, 79, 85, 78, 84, 65, 73, 78, 128, - 77, 79, 85, 78, 84, 65, 73, 206, 77, 79, 85, 78, 212, 77, 79, 85, 78, 68, - 128, 77, 79, 85, 78, 196, 77, 79, 84, 79, 82, 87, 65, 89, 128, 77, 79, - 84, 79, 82, 67, 89, 67, 76, 69, 128, 77, 79, 84, 79, 210, 77, 79, 84, 72, - 69, 82, 128, 77, 79, 84, 128, 77, 79, 82, 84, 85, 85, 77, 128, 77, 79, - 82, 84, 65, 82, 128, 77, 79, 82, 80, 72, 79, 76, 79, 71, 73, 67, 65, 204, - 77, 79, 82, 78, 73, 78, 71, 128, 77, 79, 80, 128, 77, 79, 79, 83, 69, 45, - 67, 82, 69, 197, 77, 79, 79, 78, 128, 77, 79, 79, 206, 77, 79, 79, 77, - 80, 85, 81, 128, 77, 79, 79, 77, 69, 85, 84, 128, 77, 79, 79, 68, 128, - 77, 79, 79, 196, 77, 79, 79, 128, 77, 79, 78, 84, 73, 69, 69, 78, 128, - 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78, 83, 84, 69, 82, - 128, 77, 79, 78, 79, 83, 84, 65, 66, 76, 197, 77, 79, 78, 79, 83, 80, 65, - 67, 197, 77, 79, 78, 79, 82, 65, 73, 76, 128, 77, 79, 78, 79, 71, 82, 65, - 80, 200, 77, 79, 78, 79, 71, 82, 65, 77, 77, 79, 211, 77, 79, 78, 79, 71, - 82, 65, 205, 77, 79, 78, 79, 70, 79, 78, 73, 65, 83, 128, 77, 79, 78, 79, - 67, 85, 76, 65, 210, 77, 79, 78, 75, 69, 89, 128, 77, 79, 78, 75, 69, - 217, 77, 79, 78, 73, 128, 77, 79, 78, 71, 75, 69, 85, 65, 69, 81, 128, - 77, 79, 78, 69, 217, 77, 79, 78, 128, 77, 79, 206, 77, 79, 76, 128, 77, - 79, 72, 65, 77, 77, 65, 196, 77, 79, 68, 85, 76, 207, 77, 79, 68, 201, - 77, 79, 68, 69, 83, 84, 89, 128, 77, 79, 68, 69, 77, 128, 77, 79, 68, 69, - 76, 83, 128, 77, 79, 68, 69, 76, 128, 77, 79, 68, 69, 128, 77, 79, 66, - 73, 76, 197, 77, 79, 65, 128, 77, 207, 77, 78, 89, 65, 205, 77, 78, 65, - 83, 128, 77, 77, 83, 80, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, - 76, 128, 77, 75, 80, 65, 82, 65, 209, 77, 73, 88, 128, 77, 73, 84, 128, - 77, 73, 83, 82, 65, 128, 77, 73, 82, 73, 66, 65, 65, 82, 85, 128, 77, 73, - 82, 73, 128, 77, 73, 82, 69, 68, 128, 77, 73, 80, 128, 77, 73, 78, 89, - 128, 77, 73, 78, 85, 83, 45, 79, 82, 45, 80, 76, 85, 211, 77, 73, 78, 85, - 83, 128, 77, 73, 78, 73, 83, 84, 69, 82, 128, 77, 73, 78, 73, 77, 73, 90, - 69, 128, 77, 73, 78, 73, 77, 65, 128, 77, 73, 78, 73, 68, 73, 83, 67, - 128, 77, 73, 78, 73, 66, 85, 83, 128, 77, 73, 77, 69, 128, 77, 73, 77, - 128, 77, 73, 76, 76, 73, 79, 78, 83, 128, 77, 73, 76, 76, 73, 79, 78, - 211, 77, 73, 76, 76, 69, 84, 128, 77, 73, 76, 76, 197, 77, 73, 76, 204, - 77, 73, 76, 75, 217, 77, 73, 76, 73, 84, 65, 82, 217, 77, 73, 76, 128, - 77, 73, 75, 85, 82, 79, 78, 128, 77, 73, 75, 82, 79, 206, 77, 73, 75, 82, - 73, 128, 77, 73, 73, 78, 128, 77, 73, 73, 128, 77, 73, 199, 77, 73, 69, - 88, 128, 77, 73, 69, 85, 77, 45, 84, 73, 75, 69, 85, 84, 128, 77, 73, 69, - 85, 77, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, - 45, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, - 82, 73, 69, 85, 76, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 45, - 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 128, 77, - 73, 69, 85, 77, 45, 80, 65, 78, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, - 45, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 67, 73, 69, 85, 67, - 128, 77, 73, 69, 85, 77, 45, 67, 72, 73, 69, 85, 67, 72, 128, 77, 73, 69, - 85, 205, 77, 73, 69, 80, 128, 77, 73, 69, 69, 128, 77, 73, 69, 128, 77, - 73, 68, 76, 73, 78, 197, 77, 73, 68, 68, 76, 69, 45, 87, 69, 76, 83, 200, - 77, 73, 68, 68, 76, 197, 77, 73, 68, 45, 76, 69, 86, 69, 204, 77, 73, - 196, 77, 73, 67, 82, 79, 83, 67, 79, 80, 69, 128, 77, 73, 67, 82, 79, 80, - 72, 79, 78, 69, 128, 77, 73, 67, 82, 207, 77, 73, 67, 210, 77, 72, 90, - 128, 77, 72, 65, 128, 77, 72, 128, 77, 71, 85, 88, 128, 77, 71, 85, 84, - 128, 77, 71, 85, 82, 88, 128, 77, 71, 85, 82, 128, 77, 71, 85, 80, 128, - 77, 71, 85, 79, 88, 128, 77, 71, 85, 79, 80, 128, 77, 71, 85, 79, 128, - 77, 71, 85, 128, 77, 71, 79, 88, 128, 77, 71, 79, 84, 128, 77, 71, 79, - 80, 128, 77, 71, 79, 128, 77, 71, 207, 77, 71, 73, 69, 88, 128, 77, 71, - 73, 69, 128, 77, 71, 69, 88, 128, 77, 71, 69, 80, 128, 77, 71, 69, 128, - 77, 71, 66, 85, 128, 77, 71, 66, 79, 79, 128, 77, 71, 66, 79, 70, 85, 77, - 128, 77, 71, 66, 79, 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 85, 78, - 128, 77, 71, 66, 69, 78, 128, 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, - 128, 77, 71, 66, 65, 83, 65, 81, 128, 77, 71, 66, 65, 83, 65, 128, 77, - 71, 65, 88, 128, 77, 71, 65, 84, 128, 77, 71, 65, 80, 128, 77, 71, 65, - 128, 77, 71, 128, 77, 70, 79, 78, 128, 77, 70, 79, 206, 77, 70, 79, 128, - 77, 70, 73, 89, 65, 81, 128, 77, 70, 73, 69, 69, 128, 77, 70, 69, 85, 84, - 128, 77, 70, 69, 85, 81, 128, 77, 70, 69, 85, 65, 69, 128, 77, 70, 65, - 65, 128, 77, 69, 90, 90, 79, 128, 77, 69, 88, 128, 77, 69, 85, 212, 77, - 69, 85, 81, 128, 77, 69, 85, 78, 74, 79, 77, 78, 68, 69, 85, 81, 128, 77, - 69, 85, 78, 128, 77, 69, 84, 82, 79, 128, 77, 69, 84, 82, 73, 67, 65, - 204, 77, 69, 84, 82, 73, 65, 128, 77, 69, 84, 82, 69, 84, 69, 211, 77, - 69, 84, 79, 66, 69, 76, 85, 83, 128, 77, 69, 84, 69, 75, 128, 77, 69, 84, - 69, 71, 128, 77, 69, 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, - 69, 78, 73, 65, 206, 77, 69, 83, 83, 65, 71, 69, 128, 77, 69, 83, 83, 65, - 71, 197, 77, 69, 83, 79, 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, - 77, 69, 82, 79, 73, 84, 73, 195, 77, 69, 82, 75, 72, 65, 128, 77, 69, 82, - 75, 72, 193, 77, 69, 82, 73, 68, 73, 65, 78, 83, 128, 77, 69, 82, 73, - 128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, 69, - 82, 67, 85, 82, 217, 77, 69, 78, 79, 69, 128, 77, 69, 78, 68, 85, 84, - 128, 77, 69, 78, 128, 77, 69, 77, 79, 128, 77, 69, 77, 66, 69, 82, 83, - 72, 73, 80, 128, 77, 69, 77, 66, 69, 82, 128, 77, 69, 77, 66, 69, 210, - 77, 69, 77, 45, 81, 79, 80, 72, 128, 77, 69, 77, 128, 77, 69, 205, 77, - 69, 76, 79, 68, 73, 195, 77, 69, 76, 73, 75, 128, 77, 69, 73, 90, 73, - 128, 77, 69, 71, 65, 84, 79, 78, 128, 77, 69, 71, 65, 80, 72, 79, 78, 69, - 128, 77, 69, 71, 65, 76, 73, 128, 77, 69, 69, 84, 79, 82, 85, 128, 77, - 69, 69, 84, 69, 201, 77, 69, 69, 84, 128, 77, 69, 69, 77, 85, 128, 77, - 69, 69, 77, 128, 77, 69, 69, 202, 77, 69, 69, 69, 69, 128, 77, 69, 68, - 73, 85, 77, 128, 77, 69, 68, 73, 85, 205, 77, 69, 68, 73, 67, 73, 78, 69, - 128, 77, 69, 68, 73, 67, 65, 204, 77, 69, 68, 65, 76, 128, 77, 69, 65, - 84, 128, 77, 69, 65, 212, 77, 69, 65, 83, 85, 82, 69, 196, 77, 69, 65, - 83, 85, 82, 69, 128, 77, 69, 65, 83, 85, 82, 197, 77, 68, 85, 206, 77, - 196, 77, 67, 72, 213, 77, 67, 72, 65, 206, 77, 195, 77, 66, 85, 85, 128, - 77, 66, 85, 79, 81, 128, 77, 66, 85, 79, 128, 77, 66, 85, 69, 128, 77, - 66, 85, 65, 69, 77, 128, 77, 66, 85, 65, 69, 128, 77, 66, 79, 79, 128, - 77, 66, 79, 128, 77, 66, 73, 84, 128, 77, 66, 73, 212, 77, 66, 73, 82, - 73, 69, 69, 78, 128, 77, 66, 73, 128, 77, 66, 69, 85, 88, 128, 77, 66, - 69, 85, 82, 73, 128, 77, 66, 69, 85, 77, 128, 77, 66, 69, 82, 65, 69, - 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 75, 69, 69, 84, 128, 77, 66, - 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 81, 128, 77, 66, 65, 78, 89, - 73, 128, 77, 66, 65, 65, 82, 65, 69, 128, 77, 66, 65, 65, 75, 69, 84, - 128, 77, 66, 65, 65, 128, 77, 66, 65, 193, 77, 66, 193, 77, 66, 52, 128, - 77, 66, 51, 128, 77, 66, 50, 128, 77, 66, 128, 77, 194, 77, 65, 89, 69, - 203, 77, 65, 89, 65, 78, 78, 65, 128, 77, 65, 89, 128, 77, 65, 88, 73, - 77, 73, 90, 69, 128, 77, 65, 88, 73, 77, 65, 128, 77, 65, 88, 128, 77, - 65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, 77, 65, 84, 82, 73, 88, - 128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, 65, 84, 128, 77, 65, - 83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, 83, 83, 65, 71, 69, - 128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, 77, 65, 83, 72, 70, - 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, 78, - 197, 77, 65, 82, 89, 128, 77, 65, 82, 87, 65, 82, 201, 77, 65, 82, 85, - 75, 85, 128, 77, 65, 82, 84, 89, 82, 73, 193, 77, 65, 82, 82, 89, 73, 78, - 199, 77, 65, 82, 82, 73, 65, 71, 197, 77, 65, 82, 75, 211, 77, 65, 82, - 75, 69, 82, 128, 77, 65, 82, 75, 45, 52, 128, 77, 65, 82, 75, 45, 51, + 79, 69, 69, 128, 79, 68, 69, 78, 128, 79, 68, 68, 128, 79, 68, 196, 79, + 67, 84, 79, 80, 85, 83, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 84, + 69, 212, 79, 67, 84, 65, 71, 79, 78, 128, 79, 67, 210, 79, 67, 76, 79, + 67, 75, 128, 79, 67, 67, 76, 85, 83, 73, 79, 78, 128, 79, 66, 83, 84, 82, + 85, 67, 84, 73, 79, 78, 128, 79, 66, 79, 76, 211, 79, 66, 79, 204, 79, + 66, 79, 70, 73, 76, 73, 128, 79, 66, 76, 73, 81, 85, 197, 79, 66, 74, 69, + 67, 212, 79, 66, 69, 76, 85, 83, 128, 79, 66, 69, 76, 79, 83, 128, 79, + 66, 128, 79, 65, 89, 128, 79, 65, 75, 128, 79, 65, 66, 79, 65, 70, 73, + 76, 73, 128, 79, 193, 79, 48, 53, 49, 128, 79, 48, 53, 48, 66, 128, 79, + 48, 53, 48, 65, 128, 79, 48, 53, 48, 128, 79, 48, 52, 57, 128, 79, 48, + 52, 56, 128, 79, 48, 52, 55, 128, 79, 48, 52, 54, 128, 79, 48, 52, 53, + 128, 79, 48, 52, 52, 128, 79, 48, 52, 51, 128, 79, 48, 52, 50, 128, 79, + 48, 52, 49, 128, 79, 48, 52, 48, 128, 79, 48, 51, 57, 128, 79, 48, 51, + 56, 128, 79, 48, 51, 55, 128, 79, 48, 51, 54, 68, 128, 79, 48, 51, 54, + 67, 128, 79, 48, 51, 54, 66, 128, 79, 48, 51, 54, 65, 128, 79, 48, 51, + 54, 128, 79, 48, 51, 53, 128, 79, 48, 51, 52, 128, 79, 48, 51, 51, 65, + 128, 79, 48, 51, 51, 128, 79, 48, 51, 50, 128, 79, 48, 51, 49, 128, 79, + 48, 51, 48, 65, 128, 79, 48, 51, 48, 128, 79, 48, 50, 57, 65, 128, 79, + 48, 50, 57, 128, 79, 48, 50, 56, 128, 79, 48, 50, 55, 128, 79, 48, 50, + 54, 128, 79, 48, 50, 53, 65, 128, 79, 48, 50, 53, 128, 79, 48, 50, 52, + 65, 128, 79, 48, 50, 52, 128, 79, 48, 50, 51, 128, 79, 48, 50, 50, 128, + 79, 48, 50, 49, 128, 79, 48, 50, 48, 65, 128, 79, 48, 50, 48, 128, 79, + 48, 49, 57, 65, 128, 79, 48, 49, 57, 128, 79, 48, 49, 56, 128, 79, 48, + 49, 55, 128, 79, 48, 49, 54, 128, 79, 48, 49, 53, 128, 79, 48, 49, 52, + 128, 79, 48, 49, 51, 128, 79, 48, 49, 50, 128, 79, 48, 49, 49, 128, 79, + 48, 49, 48, 67, 128, 79, 48, 49, 48, 66, 128, 79, 48, 49, 48, 65, 128, + 79, 48, 49, 48, 128, 79, 48, 48, 57, 128, 79, 48, 48, 56, 128, 79, 48, + 48, 55, 128, 79, 48, 48, 54, 70, 128, 79, 48, 48, 54, 69, 128, 79, 48, + 48, 54, 68, 128, 79, 48, 48, 54, 67, 128, 79, 48, 48, 54, 66, 128, 79, + 48, 48, 54, 65, 128, 79, 48, 48, 54, 128, 79, 48, 48, 53, 65, 128, 79, + 48, 48, 53, 128, 79, 48, 48, 52, 128, 79, 48, 48, 51, 128, 79, 48, 48, + 50, 128, 79, 48, 48, 49, 65, 128, 79, 48, 48, 49, 128, 79, 45, 89, 69, + 128, 79, 45, 79, 45, 73, 128, 79, 45, 69, 128, 78, 90, 89, 88, 128, 78, + 90, 89, 84, 128, 78, 90, 89, 82, 88, 128, 78, 90, 89, 82, 128, 78, 90, + 89, 80, 128, 78, 90, 89, 128, 78, 90, 85, 88, 128, 78, 90, 85, 82, 88, + 128, 78, 90, 85, 82, 128, 78, 90, 85, 81, 128, 78, 90, 85, 80, 128, 78, + 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 78, 90, 85, 206, 78, 90, 85, + 128, 78, 90, 79, 88, 128, 78, 90, 79, 80, 128, 78, 90, 73, 88, 128, 78, + 90, 73, 84, 128, 78, 90, 73, 80, 128, 78, 90, 73, 69, 88, 128, 78, 90, + 73, 69, 80, 128, 78, 90, 73, 69, 128, 78, 90, 73, 128, 78, 90, 69, 88, + 128, 78, 90, 69, 85, 77, 128, 78, 90, 69, 128, 78, 90, 65, 88, 128, 78, + 90, 65, 84, 128, 78, 90, 65, 81, 128, 78, 90, 65, 80, 128, 78, 90, 65, + 128, 78, 90, 193, 78, 89, 87, 65, 128, 78, 89, 85, 88, 128, 78, 89, 85, + 85, 128, 78, 89, 85, 84, 128, 78, 89, 85, 80, 128, 78, 89, 85, 79, 88, + 128, 78, 89, 85, 79, 80, 128, 78, 89, 85, 79, 128, 78, 89, 85, 78, 128, + 78, 89, 85, 69, 128, 78, 89, 85, 128, 78, 89, 79, 88, 128, 78, 89, 79, + 84, 128, 78, 89, 79, 80, 128, 78, 89, 79, 79, 128, 78, 89, 79, 78, 128, + 78, 89, 79, 65, 128, 78, 89, 79, 128, 78, 89, 74, 65, 128, 78, 89, 73, + 88, 128, 78, 89, 73, 84, 128, 78, 89, 73, 212, 78, 89, 73, 211, 78, 89, + 73, 210, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, 68, 79, 128, 78, 89, + 73, 78, 128, 78, 89, 73, 73, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, + 69, 84, 128, 78, 89, 73, 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, + 128, 78, 89, 201, 78, 89, 72, 65, 128, 78, 89, 69, 84, 128, 78, 89, 69, + 212, 78, 89, 69, 78, 128, 78, 89, 69, 72, 128, 78, 89, 69, 200, 78, 89, + 69, 69, 128, 78, 89, 69, 128, 78, 89, 196, 78, 89, 67, 65, 128, 78, 89, + 65, 85, 128, 78, 89, 65, 73, 128, 78, 89, 65, 72, 128, 78, 89, 65, 69, + 77, 65, 69, 128, 78, 89, 65, 65, 128, 78, 87, 79, 79, 128, 78, 87, 79, + 128, 78, 87, 73, 73, 128, 78, 87, 73, 128, 78, 87, 69, 128, 78, 87, 65, + 65, 128, 78, 87, 65, 128, 78, 87, 128, 78, 86, 128, 78, 85, 88, 128, 78, + 85, 85, 78, 128, 78, 85, 85, 128, 78, 85, 84, 73, 76, 76, 85, 128, 78, + 85, 84, 128, 78, 85, 212, 78, 85, 82, 88, 128, 78, 85, 82, 128, 78, 85, + 80, 128, 78, 85, 79, 88, 128, 78, 85, 79, 80, 128, 78, 85, 79, 128, 78, + 85, 78, 85, 90, 128, 78, 85, 78, 85, 218, 78, 85, 78, 71, 128, 78, 85, + 78, 65, 86, 85, 212, 78, 85, 78, 65, 86, 73, 203, 78, 85, 78, 128, 78, + 85, 206, 78, 85, 77, 69, 82, 207, 78, 85, 77, 69, 82, 65, 84, 79, 210, + 78, 85, 77, 69, 82, 65, 204, 78, 85, 77, 66, 69, 82, 83, 128, 78, 85, 77, + 66, 69, 82, 128, 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, + 78, 85, 76, 128, 78, 85, 75, 84, 65, 128, 78, 85, 69, 78, 71, 128, 78, + 85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, 65, 69, 128, 78, 85, 49, + 49, 128, 78, 85, 49, 177, 78, 85, 48, 50, 50, 65, 128, 78, 85, 48, 50, + 50, 128, 78, 85, 48, 50, 49, 128, 78, 85, 48, 50, 48, 128, 78, 85, 48, + 49, 57, 128, 78, 85, 48, 49, 56, 65, 128, 78, 85, 48, 49, 56, 128, 78, + 85, 48, 49, 55, 128, 78, 85, 48, 49, 54, 128, 78, 85, 48, 49, 53, 128, + 78, 85, 48, 49, 52, 128, 78, 85, 48, 49, 51, 128, 78, 85, 48, 49, 50, + 128, 78, 85, 48, 49, 49, 65, 128, 78, 85, 48, 49, 49, 128, 78, 85, 48, + 49, 48, 65, 128, 78, 85, 48, 49, 48, 128, 78, 85, 48, 48, 57, 128, 78, + 85, 48, 48, 56, 128, 78, 85, 48, 48, 55, 128, 78, 85, 48, 48, 54, 128, + 78, 85, 48, 48, 53, 128, 78, 85, 48, 48, 52, 128, 78, 85, 48, 48, 51, + 128, 78, 85, 48, 48, 50, 128, 78, 85, 48, 48, 49, 128, 78, 84, 88, 73, + 86, 128, 78, 84, 85, 85, 128, 78, 84, 85, 77, 128, 78, 84, 85, 74, 128, + 78, 84, 213, 78, 84, 83, 65, 85, 128, 78, 84, 79, 81, 80, 69, 78, 128, + 78, 84, 79, 71, 128, 78, 84, 79, 199, 78, 84, 73, 69, 197, 78, 84, 72, + 65, 85, 128, 78, 84, 69, 85, 78, 71, 66, 65, 128, 78, 84, 69, 85, 77, + 128, 78, 84, 69, 78, 128, 78, 84, 69, 69, 128, 78, 84, 65, 80, 128, 78, + 84, 65, 208, 78, 84, 65, 65, 128, 78, 83, 85, 79, 212, 78, 83, 85, 78, + 128, 78, 83, 85, 77, 128, 78, 83, 79, 77, 128, 78, 83, 73, 69, 69, 84, + 128, 78, 83, 73, 69, 69, 80, 128, 78, 83, 73, 69, 69, 128, 78, 83, 72, + 85, 84, 128, 78, 83, 72, 85, 212, 78, 83, 72, 85, 79, 80, 128, 78, 83, + 72, 85, 69, 128, 78, 83, 72, 73, 69, 69, 128, 78, 83, 72, 69, 69, 128, + 78, 83, 72, 65, 81, 128, 78, 83, 72, 65, 128, 78, 83, 69, 85, 65, 69, 78, + 128, 78, 83, 69, 78, 128, 78, 83, 65, 128, 78, 82, 89, 88, 128, 78, 82, + 89, 84, 128, 78, 82, 89, 82, 88, 128, 78, 82, 89, 82, 128, 78, 82, 89, + 80, 128, 78, 82, 89, 128, 78, 82, 85, 88, 128, 78, 82, 85, 84, 128, 78, + 82, 85, 82, 88, 128, 78, 82, 85, 82, 128, 78, 82, 85, 80, 128, 78, 82, + 85, 65, 128, 78, 82, 85, 128, 78, 82, 79, 88, 128, 78, 82, 79, 80, 128, + 78, 82, 79, 128, 78, 82, 69, 88, 128, 78, 82, 69, 84, 128, 78, 82, 69, + 211, 78, 82, 69, 80, 128, 78, 82, 69, 128, 78, 82, 65, 88, 128, 78, 82, + 65, 84, 128, 78, 82, 65, 80, 128, 78, 82, 65, 128, 78, 81, 73, 71, 128, + 78, 79, 89, 128, 78, 79, 88, 128, 78, 79, 87, 67, 128, 78, 79, 86, 69, + 77, 66, 69, 82, 128, 78, 79, 84, 84, 79, 128, 78, 79, 84, 69, 83, 128, + 78, 79, 84, 69, 72, 69, 65, 68, 128, 78, 79, 84, 69, 72, 69, 65, 196, 78, + 79, 84, 69, 66, 79, 79, 75, 128, 78, 79, 84, 69, 66, 79, 79, 203, 78, 79, + 84, 69, 128, 78, 79, 84, 197, 78, 79, 84, 67, 72, 69, 196, 78, 79, 84, + 67, 72, 128, 78, 79, 84, 65, 84, 73, 79, 206, 78, 79, 84, 128, 78, 79, + 212, 78, 79, 83, 69, 128, 78, 79, 83, 197, 78, 79, 82, 84, 72, 87, 69, + 83, 212, 78, 79, 82, 84, 72, 69, 82, 206, 78, 79, 82, 84, 72, 69, 65, 83, + 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 78, 79, 82, 77, 65, 204, 78, 79, + 82, 68, 73, 195, 78, 79, 210, 78, 79, 80, 128, 78, 79, 79, 78, 85, 128, + 78, 79, 79, 128, 78, 79, 78, 70, 79, 82, 75, 73, 78, 71, 128, 78, 79, 78, + 45, 80, 79, 84, 65, 66, 76, 197, 78, 79, 78, 45, 74, 79, 73, 78, 69, 82, + 128, 78, 79, 78, 45, 66, 82, 69, 65, 75, 73, 78, 199, 78, 79, 78, 128, + 78, 79, 77, 73, 78, 65, 204, 78, 79, 75, 72, 85, 75, 128, 78, 79, 68, 69, + 128, 78, 79, 65, 128, 78, 79, 45, 66, 82, 69, 65, 203, 78, 78, 85, 85, + 128, 78, 78, 85, 128, 78, 78, 79, 79, 128, 78, 78, 79, 128, 78, 78, 78, + 85, 85, 128, 78, 78, 78, 85, 128, 78, 78, 78, 79, 79, 128, 78, 78, 78, + 79, 128, 78, 78, 78, 73, 73, 128, 78, 78, 78, 73, 128, 78, 78, 78, 69, + 69, 128, 78, 78, 78, 69, 128, 78, 78, 78, 65, 85, 128, 78, 78, 78, 65, + 73, 128, 78, 78, 78, 65, 65, 128, 78, 78, 78, 65, 128, 78, 78, 78, 128, + 78, 78, 72, 65, 128, 78, 78, 71, 79, 79, 128, 78, 78, 71, 79, 128, 78, + 78, 71, 73, 73, 128, 78, 78, 71, 73, 128, 78, 78, 71, 65, 65, 128, 78, + 78, 71, 65, 128, 78, 78, 71, 128, 78, 78, 66, 83, 80, 128, 78, 77, 128, + 78, 76, 65, 85, 128, 78, 76, 48, 50, 48, 128, 78, 76, 48, 49, 57, 128, + 78, 76, 48, 49, 56, 128, 78, 76, 48, 49, 55, 65, 128, 78, 76, 48, 49, 55, + 128, 78, 76, 48, 49, 54, 128, 78, 76, 48, 49, 53, 128, 78, 76, 48, 49, + 52, 128, 78, 76, 48, 49, 51, 128, 78, 76, 48, 49, 50, 128, 78, 76, 48, + 49, 49, 128, 78, 76, 48, 49, 48, 128, 78, 76, 48, 48, 57, 128, 78, 76, + 48, 48, 56, 128, 78, 76, 48, 48, 55, 128, 78, 76, 48, 48, 54, 128, 78, + 76, 48, 48, 53, 65, 128, 78, 76, 48, 48, 53, 128, 78, 76, 48, 48, 52, + 128, 78, 76, 48, 48, 51, 128, 78, 76, 48, 48, 50, 128, 78, 76, 48, 48, + 49, 128, 78, 76, 128, 78, 75, 79, 77, 128, 78, 75, 207, 78, 75, 73, 78, + 68, 73, 128, 78, 75, 65, 85, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78, + 74, 89, 88, 128, 78, 74, 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74, + 89, 82, 128, 78, 74, 89, 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128, + 78, 74, 85, 82, 88, 128, 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128, + 78, 74, 85, 80, 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, + 74, 85, 69, 81, 128, 78, 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74, + 79, 88, 128, 78, 74, 79, 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79, + 128, 78, 74, 79, 128, 78, 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74, + 73, 80, 128, 78, 74, 73, 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74, + 73, 69, 80, 128, 78, 74, 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74, + 73, 128, 78, 74, 201, 78, 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128, + 78, 74, 69, 85, 65, 69, 78, 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78, + 74, 69, 69, 69, 69, 128, 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74, + 69, 128, 78, 74, 65, 81, 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77, + 76, 73, 128, 78, 74, 65, 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88, + 128, 78, 73, 84, 82, 69, 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, + 71, 85, 128, 78, 73, 80, 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69, + 84, 89, 128, 78, 73, 78, 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78, + 128, 78, 73, 78, 69, 84, 69, 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82, + 84, 89, 128, 78, 73, 78, 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78, + 68, 65, 178, 78, 73, 78, 57, 128, 78, 73, 78, 128, 78, 73, 77, 128, 78, + 73, 205, 78, 73, 75, 79, 76, 83, 66, 85, 82, 199, 78, 73, 75, 72, 65, 72, + 73, 84, 128, 78, 73, 75, 65, 72, 73, 84, 128, 78, 73, 75, 65, 128, 78, + 73, 72, 83, 72, 86, 65, 83, 65, 128, 78, 73, 71, 73, 68, 65, 77, 73, 78, + 128, 78, 73, 71, 73, 68, 65, 69, 83, 72, 128, 78, 73, 71, 72, 84, 128, + 78, 73, 71, 72, 212, 78, 73, 71, 71, 65, 72, 73, 84, 65, 128, 78, 73, 69, + 88, 128, 78, 73, 69, 85, 78, 45, 84, 73, 75, 69, 85, 84, 128, 78, 73, 69, + 85, 78, 45, 84, 72, 73, 69, 85, 84, 72, 128, 78, 73, 69, 85, 78, 45, 83, + 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 82, 73, 69, 85, 76, 128, 78, 73, + 69, 85, 78, 45, 80, 73, 69, 85, 80, 128, 78, 73, 69, 85, 78, 45, 80, 65, + 78, 83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 75, 73, 89, 69, 79, 75, + 128, 78, 73, 69, 85, 78, 45, 72, 73, 69, 85, 72, 128, 78, 73, 69, 85, 78, + 45, 67, 73, 69, 85, 67, 128, 78, 73, 69, 85, 78, 45, 67, 72, 73, 69, 85, + 67, 72, 128, 78, 73, 69, 85, 206, 78, 73, 69, 80, 128, 78, 73, 69, 128, + 78, 73, 66, 128, 78, 73, 65, 128, 78, 73, 50, 128, 78, 72, 85, 69, 128, + 78, 72, 74, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, 71, 86, 69, + 128, 78, 71, 85, 85, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, + 128, 78, 71, 85, 79, 128, 78, 71, 85, 65, 78, 128, 78, 71, 85, 65, 69, + 84, 128, 78, 71, 85, 65, 69, 128, 78, 71, 79, 88, 128, 78, 71, 79, 85, + 128, 78, 71, 79, 213, 78, 71, 79, 84, 128, 78, 71, 79, 81, 128, 78, 71, + 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 77, 128, 78, 71, 79, 69, + 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 89, 69, 69, 128, + 78, 71, 75, 87, 65, 69, 78, 128, 78, 71, 75, 85, 80, 128, 78, 71, 75, 85, + 78, 128, 78, 71, 75, 85, 77, 128, 78, 71, 75, 85, 69, 78, 90, 69, 85, 77, + 128, 78, 71, 75, 85, 197, 78, 71, 75, 73, 78, 68, 201, 78, 71, 75, 73, + 69, 69, 128, 78, 71, 75, 69, 85, 88, 128, 78, 71, 75, 69, 85, 82, 73, + 128, 78, 71, 75, 69, 85, 65, 69, 81, 128, 78, 71, 75, 69, 85, 65, 69, 77, + 128, 78, 71, 75, 65, 81, 128, 78, 71, 75, 65, 80, 128, 78, 71, 75, 65, + 65, 77, 73, 128, 78, 71, 75, 65, 128, 78, 71, 73, 69, 88, 128, 78, 71, + 73, 69, 80, 128, 78, 71, 73, 69, 128, 78, 71, 72, 65, 128, 78, 71, 71, + 87, 65, 69, 78, 128, 78, 71, 71, 85, 82, 65, 69, 128, 78, 71, 71, 85, 80, + 128, 78, 71, 71, 85, 79, 81, 128, 78, 71, 71, 85, 79, 209, 78, 71, 71, + 85, 79, 78, 128, 78, 71, 71, 85, 79, 77, 128, 78, 71, 71, 85, 77, 128, + 78, 71, 71, 85, 69, 69, 84, 128, 78, 71, 71, 85, 65, 69, 83, 72, 65, 197, + 78, 71, 71, 85, 65, 69, 206, 78, 71, 71, 85, 65, 128, 78, 71, 71, 85, + 128, 78, 71, 71, 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, + 78, 71, 71, 69, 85, 88, 128, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 71, + 71, 69, 85, 65, 69, 128, 78, 71, 71, 69, 213, 78, 71, 71, 69, 78, 128, + 78, 71, 71, 69, 69, 84, 128, 78, 71, 71, 69, 69, 69, 69, 128, 78, 71, 71, + 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 65, 80, 128, 78, 71, 71, + 65, 65, 77, 65, 69, 128, 78, 71, 71, 65, 65, 77, 128, 78, 71, 71, 65, 65, + 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, 85, 82, 69, 85, + 84, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 69, 128, + 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, 65, 88, 128, 78, 71, 65, 85, + 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 81, 128, 78, 71, + 65, 80, 128, 78, 71, 65, 78, 71, 85, 128, 78, 71, 65, 78, 128, 78, 71, + 65, 73, 128, 78, 71, 65, 72, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, + 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 83, 80, 65, + 80, 69, 82, 128, 78, 69, 87, 76, 73, 78, 69, 128, 78, 69, 87, 76, 73, 78, + 197, 78, 69, 87, 128, 78, 69, 215, 78, 69, 85, 84, 82, 65, 76, 128, 78, + 69, 85, 84, 82, 65, 204, 78, 69, 85, 84, 69, 82, 128, 78, 69, 84, 87, 79, + 82, 75, 69, 196, 78, 69, 84, 128, 78, 69, 212, 78, 69, 83, 84, 69, 196, + 78, 69, 82, 196, 78, 69, 81, 85, 68, 65, 65, 128, 78, 69, 80, 84, 85, 78, + 69, 128, 78, 69, 80, 128, 78, 69, 79, 128, 78, 69, 207, 78, 69, 78, 79, + 69, 128, 78, 69, 78, 65, 78, 79, 128, 78, 69, 78, 128, 78, 69, 76, 128, + 78, 69, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 79, 206, 78, 69, 71, + 65, 84, 69, 196, 78, 69, 67, 75, 84, 73, 69, 128, 78, 69, 67, 75, 128, + 78, 69, 66, 69, 78, 83, 84, 73, 77, 77, 69, 128, 78, 68, 85, 88, 128, 78, + 68, 85, 84, 128, 78, 68, 85, 82, 88, 128, 78, 68, 85, 82, 128, 78, 68, + 85, 80, 128, 78, 68, 85, 78, 128, 78, 68, 213, 78, 68, 79, 88, 128, 78, + 68, 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, 79, 128, 78, 68, 79, + 78, 128, 78, 68, 79, 77, 66, 85, 128, 78, 68, 79, 76, 197, 78, 68, 73, + 88, 128, 78, 68, 73, 84, 128, 78, 68, 73, 81, 128, 78, 68, 73, 80, 128, + 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73, 68, 65, 128, + 78, 68, 73, 65, 81, 128, 78, 68, 69, 88, 128, 78, 68, 69, 85, 88, 128, + 78, 68, 69, 85, 84, 128, 78, 68, 69, 85, 65, 69, 82, 69, 69, 128, 78, 68, + 69, 80, 128, 78, 68, 69, 69, 128, 78, 68, 69, 128, 78, 68, 65, 88, 128, + 78, 68, 65, 84, 128, 78, 68, 65, 80, 128, 78, 68, 65, 77, 128, 78, 68, + 65, 65, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 68, 65, 65, 128, 78, 68, + 65, 193, 78, 67, 72, 65, 85, 128, 78, 66, 89, 88, 128, 78, 66, 89, 84, + 128, 78, 66, 89, 82, 88, 128, 78, 66, 89, 82, 128, 78, 66, 89, 80, 128, + 78, 66, 89, 128, 78, 66, 85, 88, 128, 78, 66, 85, 84, 128, 78, 66, 85, + 82, 88, 128, 78, 66, 85, 82, 128, 78, 66, 85, 80, 128, 78, 66, 85, 128, + 78, 66, 79, 88, 128, 78, 66, 79, 84, 128, 78, 66, 79, 80, 128, 78, 66, + 79, 128, 78, 66, 73, 88, 128, 78, 66, 73, 84, 128, 78, 66, 73, 80, 128, + 78, 66, 73, 69, 88, 128, 78, 66, 73, 69, 80, 128, 78, 66, 73, 69, 128, + 78, 66, 73, 128, 78, 66, 72, 128, 78, 66, 65, 88, 128, 78, 66, 65, 84, + 128, 78, 66, 65, 80, 128, 78, 66, 65, 128, 78, 65, 89, 65, 78, 78, 65, + 128, 78, 65, 89, 128, 78, 65, 88, 73, 65, 206, 78, 65, 88, 128, 78, 65, + 85, 84, 72, 83, 128, 78, 65, 85, 68, 73, 218, 78, 65, 84, 85, 82, 65, + 204, 78, 65, 84, 73, 79, 78, 65, 204, 78, 65, 83, 75, 65, 80, 201, 78, + 65, 83, 72, 73, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, 78, 128, + 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, 206, 78, 65, 83, 65, 204, 78, + 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 81, 128, 78, 65, 79, 211, + 78, 65, 78, 83, 65, 78, 65, 81, 128, 78, 65, 78, 71, 77, 79, 78, 84, 72, + 79, 128, 78, 65, 78, 68, 128, 78, 65, 78, 65, 128, 78, 65, 77, 69, 128, + 78, 65, 77, 197, 78, 65, 77, 50, 128, 78, 65, 77, 128, 78, 65, 75, 128, + 78, 65, 73, 82, 193, 78, 65, 73, 204, 78, 65, 71, 82, 201, 78, 65, 71, + 65, 82, 128, 78, 65, 71, 65, 128, 78, 65, 71, 193, 78, 65, 71, 128, 78, + 65, 199, 78, 65, 69, 128, 78, 65, 66, 76, 65, 128, 78, 65, 66, 65, 84, + 65, 69, 65, 206, 78, 65, 65, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, + 75, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, 73, 128, 78, 65, 193, + 78, 65, 52, 128, 78, 65, 50, 128, 78, 65, 45, 50, 128, 78, 48, 52, 50, + 128, 78, 48, 52, 49, 128, 78, 48, 52, 48, 128, 78, 48, 51, 57, 128, 78, + 48, 51, 56, 128, 78, 48, 51, 55, 65, 128, 78, 48, 51, 55, 128, 78, 48, + 51, 54, 128, 78, 48, 51, 53, 65, 128, 78, 48, 51, 53, 128, 78, 48, 51, + 52, 65, 128, 78, 48, 51, 52, 128, 78, 48, 51, 51, 65, 128, 78, 48, 51, + 51, 128, 78, 48, 51, 50, 128, 78, 48, 51, 49, 128, 78, 48, 51, 48, 128, + 78, 48, 50, 57, 128, 78, 48, 50, 56, 128, 78, 48, 50, 55, 128, 78, 48, + 50, 54, 128, 78, 48, 50, 53, 65, 128, 78, 48, 50, 53, 128, 78, 48, 50, + 52, 128, 78, 48, 50, 51, 128, 78, 48, 50, 50, 128, 78, 48, 50, 49, 128, + 78, 48, 50, 48, 128, 78, 48, 49, 57, 128, 78, 48, 49, 56, 66, 128, 78, + 48, 49, 56, 65, 128, 78, 48, 49, 56, 128, 78, 48, 49, 55, 128, 78, 48, + 49, 54, 128, 78, 48, 49, 53, 128, 78, 48, 49, 52, 128, 78, 48, 49, 51, + 128, 78, 48, 49, 50, 128, 78, 48, 49, 49, 128, 78, 48, 49, 48, 128, 78, + 48, 48, 57, 128, 78, 48, 48, 56, 128, 78, 48, 48, 55, 128, 78, 48, 48, + 54, 128, 78, 48, 48, 53, 128, 78, 48, 48, 52, 128, 78, 48, 48, 51, 128, + 78, 48, 48, 50, 128, 78, 48, 48, 49, 128, 78, 45, 67, 82, 69, 197, 78, + 45, 65, 82, 217, 77, 89, 88, 128, 77, 89, 84, 128, 77, 89, 83, 76, 73, + 84, 69, 128, 77, 89, 80, 128, 77, 89, 65, 128, 77, 89, 193, 77, 89, 128, + 77, 217, 77, 87, 79, 79, 128, 77, 87, 79, 128, 77, 87, 73, 73, 128, 77, + 87, 73, 128, 77, 87, 69, 69, 128, 77, 87, 69, 128, 77, 87, 65, 65, 128, + 77, 87, 65, 128, 77, 87, 128, 77, 215, 77, 86, 83, 128, 77, 86, 79, 80, + 128, 77, 86, 73, 128, 77, 86, 69, 85, 65, 69, 78, 71, 65, 77, 128, 77, + 86, 128, 77, 214, 77, 85, 88, 128, 77, 85, 85, 83, 73, 75, 65, 84, 79, + 65, 78, 128, 77, 85, 85, 82, 68, 72, 65, 74, 193, 77, 85, 85, 128, 77, + 85, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 77, 85, 83, + 72, 82, 79, 79, 77, 128, 77, 85, 83, 72, 51, 128, 77, 85, 83, 72, 179, + 77, 85, 83, 72, 128, 77, 85, 83, 200, 77, 85, 83, 128, 77, 85, 82, 88, + 128, 77, 85, 82, 71, 85, 50, 128, 77, 85, 82, 69, 128, 77, 85, 82, 68, + 65, 128, 77, 85, 82, 68, 193, 77, 85, 82, 128, 77, 85, 81, 68, 65, 77, + 128, 77, 85, 80, 128, 77, 85, 79, 88, 128, 77, 85, 79, 84, 128, 77, 85, + 79, 80, 128, 77, 85, 79, 77, 65, 69, 128, 77, 85, 79, 128, 77, 85, 78, + 83, 85, 66, 128, 77, 85, 78, 65, 72, 128, 77, 85, 78, 128, 77, 85, 76, + 84, 73, 83, 69, 84, 128, 77, 85, 76, 84, 73, 83, 69, 212, 77, 85, 76, 84, + 73, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 77, 85, 76, 84, 73, 80, 76, + 73, 67, 65, 84, 73, 79, 206, 77, 85, 76, 84, 73, 80, 76, 69, 128, 77, 85, + 76, 84, 73, 80, 76, 197, 77, 85, 76, 84, 73, 79, 67, 85, 76, 65, 210, 77, + 85, 76, 84, 73, 77, 65, 80, 128, 77, 85, 76, 84, 201, 77, 85, 76, 84, 65, + 78, 201, 77, 85, 75, 80, 72, 82, 69, 78, 71, 128, 77, 85, 73, 78, 128, + 77, 85, 71, 83, 128, 77, 85, 71, 128, 77, 85, 199, 77, 85, 69, 78, 128, + 77, 85, 69, 128, 77, 85, 67, 72, 128, 77, 85, 67, 200, 77, 85, 67, 65, + 65, 68, 128, 77, 85, 65, 83, 128, 77, 85, 65, 78, 128, 77, 85, 65, 69, + 128, 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, + 82, 207, 77, 80, 65, 128, 77, 79, 89, 65, 73, 128, 77, 79, 88, 128, 77, + 79, 86, 73, 197, 77, 79, 86, 69, 211, 77, 79, 86, 69, 77, 69, 78, 84, 45, + 87, 65, 76, 76, 80, 76, 65, 78, 197, 77, 79, 86, 69, 77, 69, 78, 84, 45, + 72, 73, 78, 71, 197, 77, 79, 86, 69, 77, 69, 78, 84, 45, 70, 76, 79, 79, + 82, 80, 76, 65, 78, 197, 77, 79, 86, 69, 77, 69, 78, 84, 45, 68, 73, 65, + 71, 79, 78, 65, 204, 77, 79, 86, 69, 77, 69, 78, 84, 128, 77, 79, 86, 69, + 77, 69, 78, 212, 77, 79, 86, 69, 196, 77, 79, 86, 69, 128, 77, 79, 85, + 84, 72, 128, 77, 79, 85, 83, 69, 128, 77, 79, 85, 83, 197, 77, 79, 85, + 78, 84, 65, 73, 78, 83, 128, 77, 79, 85, 78, 84, 65, 73, 78, 128, 77, 79, + 85, 78, 84, 65, 73, 206, 77, 79, 85, 78, 212, 77, 79, 85, 78, 68, 128, + 77, 79, 85, 78, 196, 77, 79, 84, 79, 82, 87, 65, 89, 128, 77, 79, 84, 79, + 82, 67, 89, 67, 76, 69, 128, 77, 79, 84, 79, 210, 77, 79, 84, 72, 69, 82, + 128, 77, 79, 84, 128, 77, 79, 83, 81, 85, 69, 128, 77, 79, 82, 84, 85, + 85, 77, 128, 77, 79, 82, 84, 65, 82, 128, 77, 79, 82, 80, 72, 79, 76, 79, + 71, 73, 67, 65, 204, 77, 79, 82, 78, 73, 78, 71, 128, 77, 79, 80, 128, + 77, 79, 79, 83, 69, 45, 67, 82, 69, 197, 77, 79, 79, 78, 128, 77, 79, 79, + 206, 77, 79, 79, 77, 80, 85, 81, 128, 77, 79, 79, 77, 69, 85, 84, 128, + 77, 79, 79, 68, 128, 77, 79, 79, 196, 77, 79, 79, 128, 77, 79, 78, 84, + 73, 69, 69, 78, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, + 79, 78, 83, 84, 69, 82, 128, 77, 79, 78, 79, 83, 84, 65, 66, 76, 197, 77, + 79, 78, 79, 83, 80, 65, 67, 197, 77, 79, 78, 79, 82, 65, 73, 76, 128, 77, + 79, 78, 79, 71, 82, 65, 80, 200, 77, 79, 78, 79, 71, 82, 65, 77, 77, 79, + 211, 77, 79, 78, 79, 71, 82, 65, 205, 77, 79, 78, 79, 70, 79, 78, 73, 65, + 83, 128, 77, 79, 78, 79, 67, 85, 76, 65, 210, 77, 79, 78, 75, 69, 89, + 128, 77, 79, 78, 75, 69, 217, 77, 79, 78, 73, 128, 77, 79, 78, 71, 75, + 69, 85, 65, 69, 81, 128, 77, 79, 78, 69, 89, 45, 77, 79, 85, 84, 200, 77, + 79, 78, 69, 217, 77, 79, 78, 128, 77, 79, 206, 77, 79, 76, 128, 77, 79, + 72, 65, 77, 77, 65, 196, 77, 79, 68, 85, 76, 207, 77, 79, 68, 73, 70, 73, + 69, 82, 45, 57, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 56, 128, 77, 79, + 68, 73, 70, 73, 69, 82, 45, 55, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, + 54, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 53, 128, 77, 79, 68, 73, 70, + 73, 69, 82, 45, 52, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 51, 128, 77, + 79, 68, 73, 70, 73, 69, 82, 45, 50, 128, 77, 79, 68, 73, 70, 73, 69, 82, + 45, 49, 54, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 53, 128, 77, 79, + 68, 73, 70, 73, 69, 82, 45, 49, 52, 128, 77, 79, 68, 73, 70, 73, 69, 82, + 45, 49, 51, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 50, 128, 77, 79, + 68, 73, 70, 73, 69, 82, 45, 49, 49, 128, 77, 79, 68, 73, 70, 73, 69, 82, + 45, 49, 48, 128, 77, 79, 68, 201, 77, 79, 68, 69, 83, 84, 89, 128, 77, + 79, 68, 69, 77, 128, 77, 79, 68, 69, 76, 83, 128, 77, 79, 68, 69, 76, + 128, 77, 79, 68, 69, 128, 77, 79, 66, 73, 76, 197, 77, 79, 65, 128, 77, + 207, 77, 78, 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 83, 80, 128, 77, + 77, 128, 77, 205, 77, 76, 65, 128, 77, 76, 128, 77, 75, 80, 65, 82, 65, + 209, 77, 73, 88, 128, 77, 73, 84, 128, 77, 73, 83, 82, 65, 128, 77, 73, + 82, 73, 66, 65, 65, 82, 85, 128, 77, 73, 82, 73, 128, 77, 73, 82, 69, 68, + 128, 77, 73, 80, 128, 77, 73, 78, 89, 128, 77, 73, 78, 85, 83, 45, 79, + 82, 45, 80, 76, 85, 211, 77, 73, 78, 85, 83, 128, 77, 73, 78, 73, 83, 84, + 69, 82, 128, 77, 73, 78, 73, 77, 73, 90, 69, 128, 77, 73, 78, 73, 77, 65, + 128, 77, 73, 78, 73, 68, 73, 83, 67, 128, 77, 73, 78, 73, 66, 85, 83, + 128, 77, 73, 77, 69, 128, 77, 73, 77, 128, 77, 73, 76, 76, 73, 79, 78, + 83, 128, 77, 73, 76, 76, 73, 79, 78, 211, 77, 73, 76, 76, 69, 84, 128, + 77, 73, 76, 76, 197, 77, 73, 76, 204, 77, 73, 76, 75, 217, 77, 73, 76, + 73, 84, 65, 82, 217, 77, 73, 76, 128, 77, 73, 75, 85, 82, 79, 78, 128, + 77, 73, 75, 82, 79, 206, 77, 73, 75, 82, 73, 128, 77, 73, 73, 78, 128, + 77, 73, 73, 128, 77, 73, 199, 77, 73, 69, 88, 128, 77, 73, 69, 85, 77, + 45, 84, 73, 75, 69, 85, 84, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, + 71, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, 71, 78, + 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 82, 73, 69, 85, 76, 128, 77, + 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 77, 73, + 69, 85, 77, 45, 80, 73, 69, 85, 80, 128, 77, 73, 69, 85, 77, 45, 80, 65, + 78, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 78, 73, 69, 85, 78, 128, + 77, 73, 69, 85, 77, 45, 67, 73, 69, 85, 67, 128, 77, 73, 69, 85, 77, 45, + 67, 72, 73, 69, 85, 67, 72, 128, 77, 73, 69, 85, 205, 77, 73, 69, 80, + 128, 77, 73, 69, 69, 128, 77, 73, 69, 128, 77, 73, 68, 76, 73, 78, 197, + 77, 73, 68, 68, 76, 69, 45, 87, 69, 76, 83, 200, 77, 73, 68, 68, 76, 69, + 128, 77, 73, 68, 45, 76, 69, 86, 69, 204, 77, 73, 196, 77, 73, 67, 82, + 79, 83, 67, 79, 80, 69, 128, 77, 73, 67, 82, 79, 80, 72, 79, 78, 69, 128, + 77, 73, 67, 82, 207, 77, 73, 67, 210, 77, 72, 90, 128, 77, 72, 65, 128, + 77, 72, 128, 77, 71, 85, 88, 128, 77, 71, 85, 84, 128, 77, 71, 85, 82, + 88, 128, 77, 71, 85, 82, 128, 77, 71, 85, 80, 128, 77, 71, 85, 79, 88, + 128, 77, 71, 85, 79, 80, 128, 77, 71, 85, 79, 128, 77, 71, 85, 128, 77, + 71, 79, 88, 128, 77, 71, 79, 84, 128, 77, 71, 79, 80, 128, 77, 71, 79, + 128, 77, 71, 207, 77, 71, 73, 69, 88, 128, 77, 71, 73, 69, 128, 77, 71, + 69, 88, 128, 77, 71, 69, 80, 128, 77, 71, 69, 128, 77, 71, 66, 85, 128, + 77, 71, 66, 79, 79, 128, 77, 71, 66, 79, 70, 85, 77, 128, 77, 71, 66, 79, + 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 85, 78, 128, 77, 71, 66, 69, + 78, 128, 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 65, + 83, 65, 81, 128, 77, 71, 66, 65, 83, 65, 128, 77, 71, 65, 88, 128, 77, + 71, 65, 84, 128, 77, 71, 65, 80, 128, 77, 71, 65, 128, 77, 71, 128, 77, + 70, 79, 78, 128, 77, 70, 79, 206, 77, 70, 79, 128, 77, 70, 73, 89, 65, + 81, 128, 77, 70, 73, 69, 69, 128, 77, 70, 69, 85, 84, 128, 77, 70, 69, + 85, 81, 128, 77, 70, 69, 85, 65, 69, 128, 77, 70, 65, 65, 128, 77, 69, + 90, 90, 79, 128, 77, 69, 88, 128, 77, 69, 85, 212, 77, 69, 85, 81, 128, + 77, 69, 85, 78, 74, 79, 77, 78, 68, 69, 85, 81, 128, 77, 69, 85, 78, 128, + 77, 69, 84, 82, 79, 128, 77, 69, 84, 82, 73, 67, 65, 204, 77, 69, 84, 82, + 73, 65, 128, 77, 69, 84, 82, 69, 84, 69, 211, 77, 69, 84, 79, 66, 69, 76, + 85, 83, 128, 77, 69, 84, 69, 75, 128, 77, 69, 84, 69, 71, 128, 77, 69, + 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206, + 77, 69, 83, 83, 65, 71, 69, 128, 77, 69, 83, 83, 65, 71, 197, 77, 69, 83, + 79, 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 77, 69, 82, 75, 72, + 65, 128, 77, 69, 82, 75, 72, 193, 77, 69, 82, 73, 68, 73, 65, 78, 83, + 128, 77, 69, 82, 73, 128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, + 82, 89, 128, 77, 69, 82, 67, 85, 82, 217, 77, 69, 78, 79, 82, 65, 200, + 77, 69, 78, 79, 69, 128, 77, 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, + 77, 69, 77, 79, 128, 77, 69, 77, 66, 69, 82, 83, 72, 73, 80, 128, 77, 69, + 77, 66, 69, 82, 128, 77, 69, 77, 66, 69, 210, 77, 69, 77, 45, 81, 79, 80, + 72, 128, 77, 69, 77, 128, 77, 69, 205, 77, 69, 76, 79, 68, 73, 195, 77, + 69, 76, 73, 75, 128, 77, 69, 73, 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, + 128, 77, 69, 71, 65, 80, 72, 79, 78, 69, 128, 77, 69, 71, 65, 76, 73, + 128, 77, 69, 69, 84, 79, 82, 85, 128, 77, 69, 69, 84, 69, 201, 77, 69, + 69, 84, 128, 77, 69, 69, 77, 85, 128, 77, 69, 69, 77, 128, 77, 69, 69, + 202, 77, 69, 69, 69, 69, 128, 77, 69, 68, 73, 85, 77, 128, 77, 69, 68, + 73, 85, 205, 77, 69, 68, 73, 67, 73, 78, 69, 128, 77, 69, 68, 73, 67, 65, + 204, 77, 69, 68, 65, 76, 128, 77, 69, 65, 84, 128, 77, 69, 65, 212, 77, + 69, 65, 83, 85, 82, 69, 196, 77, 69, 65, 83, 85, 82, 69, 128, 77, 69, 65, + 83, 85, 82, 197, 77, 68, 85, 206, 77, 196, 77, 67, 72, 213, 77, 67, 72, + 65, 206, 77, 195, 77, 66, 85, 85, 128, 77, 66, 85, 79, 81, 128, 77, 66, + 85, 79, 128, 77, 66, 85, 69, 128, 77, 66, 85, 65, 69, 77, 128, 77, 66, + 85, 65, 69, 128, 77, 66, 79, 79, 128, 77, 66, 79, 128, 77, 66, 73, 84, + 128, 77, 66, 73, 212, 77, 66, 73, 82, 73, 69, 69, 78, 128, 77, 66, 73, + 128, 77, 66, 69, 85, 88, 128, 77, 66, 69, 85, 82, 73, 128, 77, 66, 69, + 85, 77, 128, 77, 66, 69, 82, 65, 69, 128, 77, 66, 69, 78, 128, 77, 66, + 69, 69, 75, 69, 69, 84, 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, + 66, 65, 81, 128, 77, 66, 65, 78, 89, 73, 128, 77, 66, 65, 65, 82, 65, 69, + 128, 77, 66, 65, 65, 75, 69, 84, 128, 77, 66, 65, 65, 128, 77, 66, 65, + 193, 77, 66, 193, 77, 66, 52, 128, 77, 66, 51, 128, 77, 66, 50, 128, 77, + 65, 89, 69, 203, 77, 65, 89, 65, 78, 78, 65, 128, 77, 65, 89, 128, 77, + 65, 88, 73, 77, 73, 90, 69, 128, 77, 65, 88, 73, 77, 65, 128, 77, 65, 88, + 128, 77, 65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, 77, 65, 84, 82, + 73, 88, 128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, 65, 84, 128, + 77, 65, 83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, 83, 83, 65, 71, + 69, 128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, 77, 65, 83, 72, + 70, 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, + 78, 197, 77, 65, 82, 89, 128, 77, 65, 82, 87, 65, 82, 201, 77, 65, 82, + 85, 75, 85, 128, 77, 65, 82, 84, 89, 82, 73, 193, 77, 65, 82, 82, 89, 73, + 78, 199, 77, 65, 82, 82, 73, 65, 71, 197, 77, 65, 82, 75, 211, 77, 65, + 82, 75, 69, 82, 128, 77, 65, 82, 75, 45, 52, 128, 77, 65, 82, 75, 45, 51, 128, 77, 65, 82, 75, 45, 50, 128, 77, 65, 82, 75, 45, 49, 128, 77, 65, 82, 69, 128, 77, 65, 82, 67, 72, 128, 77, 65, 82, 67, 65, 84, 79, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65, 84, 79, 128, 77, 65, @@ -2259,148 +2329,180 @@ static unsigned char lexicon[] = { 76, 85, 80, 128, 76, 85, 79, 88, 128, 76, 85, 79, 84, 128, 76, 85, 79, 80, 128, 76, 85, 79, 128, 76, 85, 78, 71, 83, 73, 128, 76, 85, 78, 65, 84, 197, 76, 85, 205, 76, 85, 76, 128, 76, 85, 73, 83, 128, 76, 85, 72, - 85, 82, 128, 76, 85, 72, 128, 76, 85, 71, 71, 65, 71, 69, 128, 76, 85, - 71, 65, 76, 128, 76, 85, 71, 65, 204, 76, 85, 69, 128, 76, 85, 197, 76, - 85, 66, 128, 76, 85, 65, 69, 80, 128, 76, 85, 51, 128, 76, 85, 50, 128, - 76, 85, 178, 76, 82, 79, 128, 76, 82, 77, 128, 76, 82, 73, 128, 76, 82, - 69, 128, 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, - 76, 79, 88, 128, 76, 79, 87, 69, 82, 69, 196, 76, 79, 87, 69, 210, 76, - 79, 87, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 76, 79, 87, 45, 77, - 73, 196, 76, 79, 87, 45, 70, 65, 76, 76, 73, 78, 199, 76, 79, 87, 45, - 185, 76, 79, 86, 197, 76, 79, 85, 82, 69, 128, 76, 79, 85, 68, 83, 80, - 69, 65, 75, 69, 82, 128, 76, 79, 85, 68, 76, 217, 76, 79, 84, 85, 83, - 128, 76, 79, 84, 128, 76, 79, 82, 82, 89, 128, 76, 79, 82, 82, 65, 73, - 78, 69, 128, 76, 79, 81, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, 76, - 79, 79, 80, 69, 196, 76, 79, 79, 80, 128, 76, 79, 79, 208, 76, 79, 79, - 78, 128, 76, 79, 79, 203, 76, 79, 79, 128, 76, 79, 78, 83, 85, 77, 128, - 76, 79, 78, 71, 65, 128, 76, 79, 78, 71, 193, 76, 79, 78, 71, 45, 66, 82, - 65, 78, 67, 72, 45, 89, 82, 128, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, - 72, 45, 83, 79, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 79, - 83, 211, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 77, 65, 68, 210, - 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 72, 65, 71, 65, 76, 204, - 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 65, 210, 76, 79, 77, 77, - 65, 69, 128, 76, 79, 77, 128, 76, 79, 205, 76, 79, 76, 76, 73, 80, 79, - 80, 128, 76, 79, 76, 76, 128, 76, 79, 71, 210, 76, 79, 71, 79, 84, 89, - 80, 197, 76, 79, 71, 79, 71, 82, 65, 205, 76, 79, 71, 128, 76, 79, 68, - 69, 83, 84, 79, 78, 69, 128, 76, 79, 67, 79, 77, 79, 84, 73, 86, 69, 128, - 76, 79, 67, 75, 73, 78, 71, 45, 83, 72, 73, 70, 212, 76, 79, 67, 203, 76, - 79, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, 73, 79, 206, 76, 79, - 65, 128, 76, 78, 128, 76, 76, 85, 85, 128, 76, 76, 79, 79, 128, 76, 76, - 76, 85, 85, 128, 76, 76, 76, 85, 128, 76, 76, 76, 79, 79, 128, 76, 76, - 76, 79, 128, 76, 76, 76, 73, 73, 128, 76, 76, 76, 73, 128, 76, 76, 76, - 69, 69, 128, 76, 76, 76, 69, 128, 76, 76, 76, 65, 85, 128, 76, 76, 76, - 65, 73, 128, 76, 76, 76, 65, 65, 128, 76, 76, 76, 65, 128, 76, 76, 76, - 128, 76, 74, 85, 68, 73, 74, 69, 128, 76, 74, 69, 128, 76, 74, 128, 76, - 73, 88, 128, 76, 73, 87, 78, 128, 76, 73, 86, 82, 197, 76, 73, 84, 84, - 76, 197, 76, 73, 84, 84, 69, 210, 76, 73, 84, 82, 193, 76, 73, 84, 200, - 76, 73, 84, 128, 76, 73, 83, 213, 76, 73, 83, 128, 76, 73, 82, 193, 76, - 73, 81, 85, 73, 196, 76, 73, 81, 128, 76, 73, 80, 83, 84, 73, 67, 75, - 128, 76, 73, 78, 75, 73, 78, 199, 76, 73, 78, 75, 69, 196, 76, 73, 78, - 203, 76, 73, 78, 71, 83, 65, 128, 76, 73, 78, 69, 83, 128, 76, 73, 78, - 69, 211, 76, 73, 78, 69, 45, 57, 128, 76, 73, 78, 69, 45, 55, 128, 76, - 73, 78, 69, 45, 51, 128, 76, 73, 78, 69, 45, 49, 128, 76, 73, 77, 77, 85, - 52, 128, 76, 73, 77, 77, 85, 50, 128, 76, 73, 77, 77, 85, 128, 76, 73, - 77, 77, 213, 76, 73, 77, 73, 84, 69, 196, 76, 73, 77, 73, 84, 65, 84, 73, - 79, 78, 128, 76, 73, 77, 73, 84, 128, 76, 73, 77, 69, 128, 76, 73, 77, - 66, 213, 76, 73, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, - 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, 128, 76, 73, 71, 72, 84, 78, 73, - 78, 199, 76, 73, 71, 72, 84, 72, 79, 85, 83, 69, 128, 76, 73, 71, 72, 84, - 128, 76, 73, 70, 84, 69, 82, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, - 128, 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, 76, 73, 69, 69, 128, 76, - 73, 69, 128, 76, 73, 68, 128, 76, 73, 66, 82, 65, 128, 76, 73, 66, 69, - 82, 84, 89, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, 72, 73, 73, - 128, 76, 72, 65, 86, 73, 89, 65, 78, 73, 128, 76, 72, 65, 199, 76, 72, - 65, 65, 128, 76, 72, 128, 76, 69, 90, 72, 128, 76, 69, 88, 128, 76, 69, - 86, 73, 84, 65, 84, 73, 78, 71, 128, 76, 69, 85, 77, 128, 76, 69, 85, 65, - 69, 80, 128, 76, 69, 85, 65, 69, 77, 128, 76, 69, 85, 128, 76, 69, 213, - 76, 69, 84, 84, 69, 82, 83, 128, 76, 69, 84, 84, 69, 82, 128, 76, 69, - 212, 76, 69, 83, 83, 69, 210, 76, 69, 83, 83, 45, 84, 72, 65, 78, 128, - 76, 69, 83, 83, 45, 84, 72, 65, 206, 76, 69, 80, 67, 72, 193, 76, 69, 80, - 128, 76, 69, 79, 80, 65, 82, 68, 128, 76, 69, 79, 128, 76, 69, 78, 84, - 73, 67, 85, 76, 65, 210, 76, 69, 78, 73, 83, 128, 76, 69, 78, 73, 211, - 76, 69, 78, 71, 84, 72, 69, 78, 69, 82, 128, 76, 69, 78, 71, 84, 200, 76, - 69, 78, 71, 65, 128, 76, 69, 78, 71, 193, 76, 69, 77, 79, 78, 128, 76, - 69, 77, 79, 73, 128, 76, 69, 76, 69, 84, 128, 76, 69, 76, 69, 212, 76, - 69, 203, 76, 69, 73, 77, 77, 65, 128, 76, 69, 73, 77, 77, 193, 76, 69, - 73, 128, 76, 69, 71, 83, 128, 76, 69, 71, 73, 79, 78, 128, 76, 69, 71, - 69, 84, 79, 211, 76, 69, 71, 128, 76, 69, 199, 76, 69, 70, 84, 87, 65, - 82, 68, 83, 128, 76, 69, 70, 84, 45, 84, 79, 45, 82, 73, 71, 72, 212, 76, - 69, 70, 84, 45, 83, 84, 69, 205, 76, 69, 70, 84, 45, 83, 73, 68, 197, 76, - 69, 70, 84, 45, 83, 72, 65, 68, 69, 196, 76, 69, 70, 84, 45, 80, 79, 73, - 78, 84, 73, 78, 199, 76, 69, 70, 84, 45, 76, 73, 71, 72, 84, 69, 196, 76, - 69, 70, 84, 45, 72, 65, 78, 68, 69, 196, 76, 69, 70, 84, 45, 72, 65, 78, - 196, 76, 69, 70, 84, 45, 70, 65, 67, 73, 78, 199, 76, 69, 70, 84, 128, - 76, 69, 69, 82, 65, 69, 87, 65, 128, 76, 69, 69, 75, 128, 76, 69, 69, 69, - 69, 128, 76, 69, 68, 71, 69, 82, 128, 76, 69, 65, 84, 72, 69, 82, 128, - 76, 69, 65, 70, 128, 76, 69, 65, 198, 76, 69, 65, 68, 73, 78, 199, 76, - 69, 65, 68, 69, 82, 128, 76, 69, 65, 196, 76, 68, 65, 78, 128, 76, 68, - 50, 128, 76, 67, 201, 76, 67, 197, 76, 65, 90, 217, 76, 65, 89, 65, 78, - 78, 65, 128, 76, 65, 88, 128, 76, 65, 87, 128, 76, 65, 215, 76, 65, 85, - 76, 65, 128, 76, 65, 85, 75, 65, 218, 76, 65, 85, 74, 128, 76, 65, 84, - 73, 78, 65, 84, 197, 76, 65, 84, 73, 75, 128, 76, 65, 84, 69, 82, 65, - 204, 76, 65, 84, 197, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, - 204, 76, 65, 82, 71, 69, 210, 76, 65, 82, 71, 69, 128, 76, 65, 82, 71, - 197, 76, 65, 81, 128, 76, 65, 80, 65, 81, 128, 76, 65, 207, 76, 65, 78, - 84, 69, 82, 78, 128, 76, 65, 78, 71, 85, 65, 71, 197, 76, 65, 78, 69, 83, - 128, 76, 65, 78, 128, 76, 65, 77, 80, 128, 76, 65, 77, 69, 68, 72, 128, - 76, 65, 77, 69, 68, 128, 76, 65, 77, 69, 196, 76, 65, 77, 69, 128, 76, - 65, 77, 197, 76, 65, 77, 68, 65, 128, 76, 65, 77, 68, 128, 76, 65, 77, - 66, 68, 193, 76, 65, 77, 65, 68, 72, 128, 76, 65, 76, 128, 76, 65, 204, - 76, 65, 75, 75, 72, 65, 78, 71, 89, 65, 79, 128, 76, 65, 74, 65, 78, 89, - 65, 76, 65, 78, 128, 76, 65, 73, 78, 199, 76, 65, 201, 76, 65, 72, 83, - 72, 85, 128, 76, 65, 72, 128, 76, 65, 71, 85, 83, 128, 76, 65, 71, 213, - 76, 65, 71, 65, 82, 128, 76, 65, 71, 65, 210, 76, 65, 71, 65, 66, 128, - 76, 65, 71, 65, 194, 76, 65, 69, 86, 128, 76, 65, 69, 128, 76, 65, 68, - 217, 76, 65, 67, 75, 128, 76, 65, 67, 65, 128, 76, 65, 66, 79, 85, 82, - 73, 78, 71, 128, 76, 65, 66, 79, 82, 128, 76, 65, 66, 73, 65, 76, 73, 90, - 65, 84, 73, 79, 206, 76, 65, 66, 73, 65, 204, 76, 65, 66, 69, 76, 128, - 76, 65, 66, 65, 84, 128, 76, 65, 65, 78, 65, 69, 128, 76, 65, 65, 78, - 128, 76, 65, 65, 77, 85, 128, 76, 65, 65, 77, 128, 76, 65, 65, 73, 128, - 76, 54, 128, 76, 52, 128, 76, 51, 128, 76, 50, 128, 76, 48, 48, 54, 65, - 128, 76, 48, 48, 50, 65, 128, 76, 45, 84, 89, 80, 197, 76, 45, 83, 72, - 65, 80, 69, 196, 75, 89, 85, 82, 73, 73, 128, 75, 89, 85, 128, 75, 89, - 79, 128, 75, 89, 76, 73, 83, 77, 65, 128, 75, 89, 73, 128, 75, 89, 69, - 128, 75, 89, 65, 84, 72, 79, 211, 75, 89, 65, 65, 128, 75, 89, 65, 128, - 75, 88, 87, 73, 128, 75, 88, 87, 69, 69, 128, 75, 88, 87, 69, 128, 75, - 88, 87, 65, 65, 128, 75, 88, 87, 65, 128, 75, 88, 85, 128, 75, 88, 79, - 128, 75, 88, 73, 128, 75, 88, 69, 69, 128, 75, 88, 69, 128, 75, 88, 65, - 65, 128, 75, 88, 65, 128, 75, 87, 86, 128, 75, 87, 85, 51, 49, 56, 128, - 75, 87, 79, 79, 128, 75, 87, 79, 128, 75, 87, 77, 128, 75, 87, 73, 73, - 128, 75, 87, 73, 128, 75, 87, 69, 69, 128, 75, 87, 69, 128, 75, 87, 66, - 128, 75, 87, 65, 89, 128, 75, 87, 65, 69, 84, 128, 75, 87, 65, 65, 128, - 75, 86, 65, 128, 75, 86, 128, 75, 85, 88, 128, 75, 85, 86, 128, 75, 85, - 85, 72, 128, 75, 85, 84, 128, 75, 85, 83, 77, 65, 128, 75, 85, 83, 72, - 85, 50, 128, 75, 85, 82, 88, 128, 75, 85, 82, 85, 90, 69, 73, 82, 79, - 128, 75, 85, 82, 84, 128, 75, 85, 82, 79, 79, 78, 69, 128, 75, 85, 82, - 128, 75, 85, 210, 75, 85, 81, 128, 75, 85, 79, 88, 128, 75, 85, 79, 80, - 128, 75, 85, 79, 208, 75, 85, 79, 77, 128, 75, 85, 79, 128, 75, 85, 78, - 71, 128, 75, 85, 78, 68, 68, 65, 76, 73, 89, 65, 128, 75, 85, 76, 128, - 75, 85, 204, 75, 85, 71, 128, 75, 85, 69, 84, 128, 75, 85, 66, 128, 75, - 85, 65, 86, 128, 75, 85, 65, 66, 128, 75, 85, 65, 128, 75, 85, 55, 128, - 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, 128, - 75, 83, 83, 85, 85, 128, 75, 83, 83, 85, 128, 75, 83, 83, 79, 79, 128, - 75, 83, 83, 79, 128, 75, 83, 83, 73, 73, 128, 75, 83, 83, 73, 128, 75, - 83, 83, 69, 69, 128, 75, 83, 83, 69, 128, 75, 83, 83, 65, 85, 128, 75, - 83, 83, 65, 73, 128, 75, 83, 83, 65, 65, 128, 75, 83, 83, 65, 128, 75, - 83, 83, 128, 75, 83, 73, 128, 75, 82, 69, 77, 65, 83, 84, 73, 128, 75, - 82, 65, 84, 73, 77, 79, 89, 80, 79, 82, 82, 79, 79, 78, 128, 75, 82, 65, - 84, 73, 77, 79, 75, 79, 85, 70, 73, 83, 77, 65, 128, 75, 82, 65, 84, 73, - 77, 65, 84, 65, 128, 75, 82, 65, 84, 73, 77, 193, 75, 80, 85, 128, 75, - 80, 79, 81, 128, 75, 80, 79, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, - 75, 80, 69, 85, 88, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, 80, - 65, 82, 65, 81, 128, 75, 80, 65, 78, 128, 75, 80, 65, 72, 128, 75, 80, - 65, 128, 75, 79, 88, 128, 75, 79, 86, 85, 85, 128, 75, 79, 86, 128, 75, - 79, 84, 79, 128, 75, 79, 82, 85, 78, 65, 128, 75, 79, 82, 79, 78, 73, 83, - 128, 75, 79, 82, 69, 65, 206, 75, 79, 82, 65, 78, 73, 195, 75, 79, 81, - 78, 68, 79, 78, 128, 75, 79, 80, 80, 65, 128, 75, 79, 80, 128, 75, 79, - 79, 86, 128, 75, 79, 79, 80, 79, 128, 75, 79, 79, 77, 85, 85, 84, 128, - 75, 79, 79, 66, 128, 75, 79, 79, 128, 75, 79, 78, 84, 69, 86, 77, 65, - 128, 75, 79, 78, 84, 69, 86, 77, 193, 75, 79, 77, 201, 75, 79, 77, 66, - 85, 86, 65, 128, 75, 79, 77, 66, 85, 86, 193, 75, 79, 77, 66, 213, 75, - 79, 75, 79, 128, 75, 79, 75, 69, 128, 75, 79, 75, 128, 75, 79, 203, 75, - 79, 73, 128, 75, 79, 201, 75, 79, 72, 128, 75, 79, 71, 72, 79, 77, 128, - 75, 79, 69, 84, 128, 75, 79, 66, 128, 75, 79, 65, 76, 65, 128, 75, 79, - 65, 128, 75, 78, 79, 66, 83, 128, 75, 78, 73, 71, 72, 84, 128, 75, 78, + 85, 82, 128, 76, 85, 72, 128, 76, 85, 200, 76, 85, 71, 71, 65, 71, 69, + 128, 76, 85, 71, 65, 76, 128, 76, 85, 71, 65, 204, 76, 85, 69, 128, 76, + 85, 197, 76, 85, 66, 128, 76, 85, 65, 69, 80, 128, 76, 85, 51, 128, 76, + 85, 50, 128, 76, 85, 178, 76, 82, 79, 128, 76, 82, 77, 128, 76, 82, 73, + 128, 76, 82, 69, 128, 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, + 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 69, 82, 69, 196, 76, 79, 87, + 69, 210, 76, 79, 87, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 76, 79, + 87, 45, 77, 73, 196, 76, 79, 87, 45, 70, 65, 76, 76, 73, 78, 199, 76, 79, + 87, 45, 185, 76, 79, 86, 197, 76, 79, 85, 82, 69, 128, 76, 79, 85, 68, + 83, 80, 69, 65, 75, 69, 82, 128, 76, 79, 85, 68, 76, 217, 76, 79, 84, 85, + 83, 128, 76, 79, 84, 128, 76, 79, 82, 82, 89, 128, 76, 79, 82, 82, 65, + 73, 78, 69, 128, 76, 79, 81, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, + 76, 79, 79, 80, 69, 196, 76, 79, 79, 80, 128, 76, 79, 79, 208, 76, 79, + 79, 78, 128, 76, 79, 79, 203, 76, 79, 79, 128, 76, 79, 78, 83, 85, 77, + 128, 76, 79, 78, 71, 65, 128, 76, 79, 78, 71, 193, 76, 79, 78, 71, 45, + 66, 82, 65, 78, 67, 72, 45, 89, 82, 128, 76, 79, 78, 71, 45, 66, 82, 65, + 78, 67, 72, 45, 83, 79, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, + 45, 79, 83, 211, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 77, 65, + 68, 210, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 72, 65, 71, 65, + 76, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 65, 210, 76, 79, + 77, 77, 65, 69, 128, 76, 79, 77, 128, 76, 79, 205, 76, 79, 76, 76, 73, + 80, 79, 80, 128, 76, 79, 76, 76, 128, 76, 79, 71, 210, 76, 79, 71, 79, + 84, 89, 80, 197, 76, 79, 71, 79, 71, 82, 65, 205, 76, 79, 71, 128, 76, + 79, 68, 69, 83, 84, 79, 78, 69, 128, 76, 79, 67, 79, 77, 79, 84, 73, 86, + 69, 128, 76, 79, 67, 75, 73, 78, 71, 45, 83, 72, 73, 70, 212, 76, 79, 67, + 203, 76, 79, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, 73, 79, 78, + 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 76, 79, 67, 65, 84, 73, 79, 78, + 45, 70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 76, 79, 67, 65, 84, 73, 79, + 206, 76, 79, 65, 128, 76, 78, 128, 76, 76, 85, 85, 128, 76, 76, 79, 79, + 128, 76, 76, 76, 85, 85, 128, 76, 76, 76, 85, 128, 76, 76, 76, 79, 79, + 128, 76, 76, 76, 79, 128, 76, 76, 76, 73, 73, 128, 76, 76, 76, 73, 128, + 76, 76, 76, 69, 69, 128, 76, 76, 76, 69, 128, 76, 76, 76, 65, 85, 128, + 76, 76, 76, 65, 73, 128, 76, 76, 76, 65, 65, 128, 76, 76, 76, 65, 128, + 76, 76, 76, 128, 76, 74, 85, 68, 73, 74, 69, 128, 76, 74, 69, 128, 76, + 74, 128, 76, 73, 88, 128, 76, 73, 87, 78, 128, 76, 73, 86, 82, 197, 76, + 73, 84, 84, 76, 69, 128, 76, 73, 84, 84, 76, 197, 76, 73, 84, 84, 69, + 210, 76, 73, 84, 82, 193, 76, 73, 84, 200, 76, 73, 83, 213, 76, 73, 83, + 128, 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 81, 128, 76, 73, + 80, 83, 84, 73, 67, 75, 128, 76, 73, 80, 211, 76, 73, 208, 76, 73, 78, + 75, 73, 78, 199, 76, 73, 78, 75, 69, 196, 76, 73, 78, 203, 76, 73, 78, + 71, 83, 65, 128, 76, 73, 78, 69, 83, 128, 76, 73, 78, 69, 211, 76, 73, + 78, 69, 45, 57, 128, 76, 73, 78, 69, 45, 55, 128, 76, 73, 78, 69, 45, 51, + 128, 76, 73, 78, 69, 45, 49, 128, 76, 73, 77, 77, 85, 52, 128, 76, 73, + 77, 77, 85, 50, 128, 76, 73, 77, 77, 85, 128, 76, 73, 77, 77, 213, 76, + 73, 77, 73, 84, 69, 196, 76, 73, 77, 73, 84, 65, 84, 73, 79, 78, 128, 76, + 73, 77, 73, 84, 128, 76, 73, 77, 69, 128, 76, 73, 77, 66, 213, 76, 73, + 77, 66, 211, 76, 73, 77, 194, 76, 73, 76, 89, 128, 76, 73, 76, 73, 84, + 72, 128, 76, 73, 76, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, 128, 76, + 73, 71, 72, 84, 78, 73, 78, 199, 76, 73, 71, 72, 84, 72, 79, 85, 83, 69, + 128, 76, 73, 71, 72, 84, 128, 76, 73, 71, 65, 84, 73, 78, 199, 76, 73, + 70, 84, 69, 82, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 128, 76, 73, + 69, 84, 128, 76, 73, 69, 80, 128, 76, 73, 69, 69, 128, 76, 73, 69, 128, + 76, 73, 68, 128, 76, 73, 67, 75, 73, 78, 199, 76, 73, 66, 82, 65, 128, + 76, 73, 66, 69, 82, 84, 89, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, + 72, 73, 73, 128, 76, 72, 65, 86, 73, 89, 65, 78, 73, 128, 76, 72, 65, + 199, 76, 72, 65, 65, 128, 76, 72, 128, 76, 69, 90, 72, 128, 76, 69, 88, + 128, 76, 69, 86, 73, 84, 65, 84, 73, 78, 71, 128, 76, 69, 85, 77, 128, + 76, 69, 85, 65, 69, 80, 128, 76, 69, 85, 65, 69, 77, 128, 76, 69, 85, + 128, 76, 69, 213, 76, 69, 84, 84, 69, 82, 83, 128, 76, 69, 84, 84, 69, + 82, 128, 76, 69, 212, 76, 69, 83, 83, 69, 210, 76, 69, 83, 83, 45, 84, + 72, 65, 78, 128, 76, 69, 83, 83, 45, 84, 72, 65, 206, 76, 69, 80, 67, 72, + 193, 76, 69, 80, 128, 76, 69, 79, 80, 65, 82, 68, 128, 76, 69, 79, 128, + 76, 69, 78, 84, 73, 67, 85, 76, 65, 210, 76, 69, 78, 73, 83, 128, 76, 69, + 78, 73, 211, 76, 69, 78, 71, 84, 72, 69, 78, 69, 82, 128, 76, 69, 78, 71, + 84, 72, 45, 55, 128, 76, 69, 78, 71, 84, 72, 45, 54, 128, 76, 69, 78, 71, + 84, 72, 45, 53, 128, 76, 69, 78, 71, 84, 72, 45, 52, 128, 76, 69, 78, 71, + 84, 72, 45, 51, 128, 76, 69, 78, 71, 84, 72, 45, 50, 128, 76, 69, 78, 71, + 84, 72, 45, 49, 128, 76, 69, 78, 71, 84, 200, 76, 69, 78, 71, 65, 128, + 76, 69, 78, 71, 193, 76, 69, 77, 79, 78, 128, 76, 69, 77, 79, 73, 128, + 76, 69, 76, 69, 84, 128, 76, 69, 76, 69, 212, 76, 69, 203, 76, 69, 73, + 77, 77, 65, 128, 76, 69, 73, 77, 77, 193, 76, 69, 73, 128, 76, 69, 71, + 83, 128, 76, 69, 71, 73, 79, 78, 128, 76, 69, 71, 69, 84, 79, 211, 76, + 69, 71, 128, 76, 69, 199, 76, 69, 70, 84, 87, 65, 82, 68, 83, 128, 76, + 69, 70, 84, 45, 84, 79, 45, 82, 73, 71, 72, 212, 76, 69, 70, 84, 45, 83, + 84, 69, 205, 76, 69, 70, 84, 45, 83, 73, 68, 197, 76, 69, 70, 84, 45, 83, + 72, 65, 68, 69, 196, 76, 69, 70, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, + 76, 69, 70, 84, 45, 76, 73, 71, 72, 84, 69, 196, 76, 69, 70, 84, 45, 72, + 65, 78, 68, 69, 196, 76, 69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, 84, + 45, 70, 65, 67, 73, 78, 199, 76, 69, 70, 84, 128, 76, 69, 69, 82, 65, 69, + 87, 65, 128, 76, 69, 69, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 68, + 71, 69, 82, 128, 76, 69, 65, 84, 72, 69, 82, 128, 76, 69, 65, 70, 128, + 76, 69, 65, 198, 76, 69, 65, 68, 73, 78, 199, 76, 69, 65, 68, 69, 82, + 128, 76, 69, 65, 196, 76, 68, 65, 78, 128, 76, 68, 50, 128, 76, 67, 201, + 76, 67, 197, 76, 65, 90, 217, 76, 65, 89, 65, 78, 78, 65, 128, 76, 65, + 88, 128, 76, 65, 87, 128, 76, 65, 215, 76, 65, 85, 76, 65, 128, 76, 65, + 85, 75, 65, 218, 76, 65, 85, 74, 128, 76, 65, 84, 73, 78, 65, 84, 197, + 76, 65, 84, 73, 75, 128, 76, 65, 84, 69, 82, 65, 204, 76, 65, 84, 197, + 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 201, + 76, 65, 82, 71, 69, 83, 84, 128, 76, 65, 82, 71, 69, 210, 76, 65, 82, 71, + 69, 128, 76, 65, 82, 71, 197, 76, 65, 81, 128, 76, 65, 80, 65, 81, 128, + 76, 65, 207, 76, 65, 78, 84, 69, 82, 78, 128, 76, 65, 78, 71, 85, 65, 71, + 197, 76, 65, 78, 69, 83, 128, 76, 65, 78, 128, 76, 65, 77, 80, 128, 76, + 65, 77, 69, 68, 72, 128, 76, 65, 77, 69, 68, 128, 76, 65, 77, 69, 196, + 76, 65, 77, 69, 128, 76, 65, 77, 197, 76, 65, 77, 68, 65, 128, 76, 65, + 77, 68, 128, 76, 65, 77, 66, 68, 193, 76, 65, 77, 65, 68, 72, 128, 76, + 65, 76, 128, 76, 65, 204, 76, 65, 75, 75, 72, 65, 78, 71, 89, 65, 79, + 128, 76, 65, 75, 45, 55, 52, 57, 128, 76, 65, 75, 45, 55, 50, 52, 128, + 76, 65, 75, 45, 54, 54, 56, 128, 76, 65, 75, 45, 54, 52, 56, 128, 76, 65, + 75, 45, 54, 52, 184, 76, 65, 75, 45, 54, 51, 54, 128, 76, 65, 75, 45, 54, + 49, 55, 128, 76, 65, 75, 45, 54, 49, 183, 76, 65, 75, 45, 54, 48, 56, + 128, 76, 65, 75, 45, 53, 53, 48, 128, 76, 65, 75, 45, 52, 57, 53, 128, + 76, 65, 75, 45, 52, 57, 51, 128, 76, 65, 75, 45, 52, 57, 50, 128, 76, 65, + 75, 45, 52, 57, 48, 128, 76, 65, 75, 45, 52, 56, 51, 128, 76, 65, 75, 45, + 52, 55, 48, 128, 76, 65, 75, 45, 52, 53, 55, 128, 76, 65, 75, 45, 52, 53, + 48, 128, 76, 65, 75, 45, 52, 52, 57, 128, 76, 65, 75, 45, 52, 52, 185, + 76, 65, 75, 45, 52, 52, 49, 128, 76, 65, 75, 45, 51, 57, 48, 128, 76, 65, + 75, 45, 51, 56, 52, 128, 76, 65, 75, 45, 51, 56, 51, 128, 76, 65, 75, 45, + 51, 52, 56, 128, 76, 65, 75, 45, 51, 52, 55, 128, 76, 65, 75, 45, 51, 52, + 51, 128, 76, 65, 75, 45, 50, 54, 54, 128, 76, 65, 75, 45, 50, 54, 53, + 128, 76, 65, 75, 45, 50, 51, 56, 128, 76, 65, 75, 45, 50, 50, 56, 128, + 76, 65, 75, 45, 50, 50, 53, 128, 76, 65, 75, 45, 50, 50, 48, 128, 76, 65, + 75, 45, 50, 49, 57, 128, 76, 65, 75, 45, 50, 49, 48, 128, 76, 65, 75, 45, + 49, 52, 50, 128, 76, 65, 75, 45, 49, 51, 48, 128, 76, 65, 75, 45, 48, 57, + 50, 128, 76, 65, 75, 45, 48, 56, 49, 128, 76, 65, 75, 45, 48, 56, 177, + 76, 65, 75, 45, 48, 56, 48, 128, 76, 65, 75, 45, 48, 55, 185, 76, 65, 75, + 45, 48, 54, 50, 128, 76, 65, 75, 45, 48, 53, 49, 128, 76, 65, 75, 45, 48, + 53, 48, 128, 76, 65, 75, 45, 48, 51, 48, 128, 76, 65, 75, 45, 48, 50, 53, + 128, 76, 65, 75, 45, 48, 50, 49, 128, 76, 65, 75, 45, 48, 50, 48, 128, + 76, 65, 75, 45, 48, 48, 51, 128, 76, 65, 74, 65, 78, 89, 65, 76, 65, 78, + 128, 76, 65, 73, 78, 199, 76, 65, 201, 76, 65, 72, 83, 72, 85, 128, 76, + 65, 72, 128, 76, 65, 71, 85, 83, 128, 76, 65, 71, 213, 76, 65, 71, 65, + 82, 128, 76, 65, 71, 65, 210, 76, 65, 71, 65, 66, 128, 76, 65, 71, 65, + 194, 76, 65, 69, 86, 128, 76, 65, 69, 128, 76, 65, 68, 217, 76, 65, 67, + 75, 128, 76, 65, 67, 65, 128, 76, 65, 66, 79, 85, 82, 73, 78, 71, 128, + 76, 65, 66, 79, 82, 128, 76, 65, 66, 73, 65, 76, 73, 90, 65, 84, 73, 79, + 206, 76, 65, 66, 73, 65, 204, 76, 65, 66, 69, 76, 128, 76, 65, 66, 65, + 84, 128, 76, 65, 65, 78, 65, 69, 128, 76, 65, 65, 78, 128, 76, 65, 65, + 77, 85, 128, 76, 65, 65, 77, 128, 76, 65, 65, 73, 128, 76, 54, 128, 76, + 52, 128, 76, 51, 128, 76, 50, 128, 76, 48, 48, 54, 65, 128, 76, 48, 48, + 50, 65, 128, 76, 45, 84, 89, 80, 197, 76, 45, 83, 72, 65, 80, 69, 196, + 75, 89, 85, 82, 73, 73, 128, 75, 89, 85, 128, 75, 89, 79, 128, 75, 89, + 76, 73, 83, 77, 65, 128, 75, 89, 73, 128, 75, 89, 69, 128, 75, 89, 65, + 84, 72, 79, 211, 75, 89, 65, 65, 128, 75, 89, 65, 128, 75, 88, 87, 73, + 128, 75, 88, 87, 69, 69, 128, 75, 88, 87, 69, 128, 75, 88, 87, 65, 65, + 128, 75, 88, 87, 65, 128, 75, 88, 85, 128, 75, 88, 79, 128, 75, 88, 73, + 128, 75, 88, 69, 69, 128, 75, 88, 69, 128, 75, 88, 65, 65, 128, 75, 88, + 65, 128, 75, 87, 86, 128, 75, 87, 85, 51, 49, 56, 128, 75, 87, 79, 79, + 128, 75, 87, 79, 128, 75, 87, 77, 128, 75, 87, 73, 73, 128, 75, 87, 73, + 128, 75, 87, 69, 69, 128, 75, 87, 69, 128, 75, 87, 66, 128, 75, 87, 65, + 89, 128, 75, 87, 65, 69, 84, 128, 75, 87, 65, 65, 128, 75, 86, 65, 128, + 75, 86, 128, 75, 85, 88, 128, 75, 85, 86, 128, 75, 85, 85, 72, 128, 75, + 85, 84, 128, 75, 85, 83, 77, 65, 128, 75, 85, 83, 72, 85, 50, 128, 75, + 85, 83, 72, 85, 178, 75, 85, 82, 88, 128, 75, 85, 82, 85, 90, 69, 73, 82, + 79, 128, 75, 85, 82, 84, 128, 75, 85, 82, 79, 79, 78, 69, 128, 75, 85, + 82, 128, 75, 85, 210, 75, 85, 81, 128, 75, 85, 79, 88, 128, 75, 85, 79, + 80, 128, 75, 85, 79, 208, 75, 85, 79, 77, 128, 75, 85, 79, 128, 75, 85, + 78, 71, 128, 75, 85, 78, 68, 68, 65, 76, 73, 89, 65, 128, 75, 85, 76, + 128, 75, 85, 204, 75, 85, 71, 128, 75, 85, 69, 84, 128, 75, 85, 66, 128, + 75, 85, 65, 86, 128, 75, 85, 65, 66, 128, 75, 85, 65, 128, 75, 85, 55, + 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, + 128, 75, 83, 83, 85, 85, 128, 75, 83, 83, 85, 128, 75, 83, 83, 79, 79, + 128, 75, 83, 83, 79, 128, 75, 83, 83, 73, 73, 128, 75, 83, 83, 73, 128, + 75, 83, 83, 69, 69, 128, 75, 83, 83, 69, 128, 75, 83, 83, 65, 85, 128, + 75, 83, 83, 65, 73, 128, 75, 83, 83, 65, 65, 128, 75, 83, 83, 65, 128, + 75, 83, 83, 128, 75, 83, 73, 128, 75, 82, 69, 77, 65, 83, 84, 73, 128, + 75, 82, 65, 84, 73, 77, 79, 89, 80, 79, 82, 82, 79, 79, 78, 128, 75, 82, + 65, 84, 73, 77, 79, 75, 79, 85, 70, 73, 83, 77, 65, 128, 75, 82, 65, 84, + 73, 77, 65, 84, 65, 128, 75, 82, 65, 84, 73, 77, 193, 75, 80, 85, 128, + 75, 80, 79, 81, 128, 75, 80, 79, 79, 128, 75, 80, 79, 128, 75, 80, 73, + 128, 75, 80, 69, 85, 88, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, + 80, 65, 82, 65, 81, 128, 75, 80, 65, 78, 128, 75, 80, 65, 72, 128, 75, + 80, 65, 128, 75, 79, 88, 128, 75, 79, 86, 85, 85, 128, 75, 79, 86, 128, + 75, 79, 84, 79, 128, 75, 79, 82, 85, 78, 65, 128, 75, 79, 82, 79, 78, 73, + 83, 128, 75, 79, 82, 69, 65, 206, 75, 79, 82, 65, 78, 73, 195, 75, 79, + 81, 78, 68, 79, 78, 128, 75, 79, 80, 80, 65, 128, 75, 79, 80, 128, 75, + 79, 79, 86, 128, 75, 79, 79, 80, 79, 128, 75, 79, 79, 77, 85, 85, 84, + 128, 75, 79, 79, 66, 128, 75, 79, 79, 128, 75, 79, 78, 84, 69, 86, 77, + 65, 128, 75, 79, 78, 84, 69, 86, 77, 193, 75, 79, 77, 201, 75, 79, 77, + 66, 85, 86, 65, 128, 75, 79, 77, 66, 85, 86, 193, 75, 79, 77, 66, 213, + 75, 79, 75, 79, 128, 75, 79, 75, 69, 128, 75, 79, 75, 128, 75, 79, 203, + 75, 79, 73, 128, 75, 79, 201, 75, 79, 72, 128, 75, 79, 71, 72, 79, 77, + 128, 75, 79, 69, 84, 128, 75, 79, 66, 128, 75, 79, 65, 76, 65, 128, 75, + 79, 65, 128, 75, 78, 85, 67, 75, 76, 69, 83, 128, 75, 78, 85, 67, 75, 76, + 69, 128, 75, 78, 79, 66, 83, 128, 75, 78, 73, 71, 72, 84, 128, 75, 78, 73, 71, 72, 212, 75, 78, 73, 70, 69, 128, 75, 78, 73, 70, 197, 75, 77, 128, 75, 205, 75, 76, 73, 84, 79, 78, 128, 75, 76, 65, 83, 77, 65, 128, 75, 76, 65, 83, 77, 193, 75, 76, 65, 128, 75, 76, 128, 75, 75, 85, 128, @@ -2419,1175 +2521,1180 @@ static unsigned char lexicon[] = { 79, 82, 85, 128, 75, 73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 75, 73, 82, 79, 128, 75, 73, 82, 71, 72, 73, 218, 75, 73, 81, 128, 75, 73, 80, 128, 75, 73, 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 78, 68, 69, 82, 71, - 65, 82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128, 75, 73, 73, 128, - 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 128, 75, 73, 69, - 69, 77, 128, 75, 73, 69, 128, 75, 73, 68, 128, 75, 73, 196, 75, 73, 67, - 75, 128, 75, 73, 66, 128, 75, 73, 65, 86, 128, 75, 73, 65, 66, 128, 75, - 72, 90, 128, 75, 72, 87, 65, 73, 128, 75, 72, 85, 69, 78, 45, 76, 85, - 197, 75, 72, 85, 69, 206, 75, 72, 85, 68, 65, 87, 65, 68, 201, 75, 72, - 85, 68, 65, 77, 128, 75, 72, 85, 65, 84, 128, 75, 72, 79, 85, 128, 75, - 72, 79, 212, 75, 72, 79, 78, 128, 75, 72, 79, 77, 85, 84, 128, 75, 72, - 79, 74, 75, 201, 75, 72, 79, 128, 75, 72, 207, 75, 72, 77, 213, 75, 72, - 73, 84, 128, 75, 72, 73, 78, 89, 65, 128, 75, 72, 73, 69, 85, 75, 200, - 75, 72, 73, 128, 75, 72, 201, 75, 72, 72, 79, 128, 75, 72, 72, 65, 128, - 75, 72, 69, 84, 72, 128, 75, 72, 69, 73, 128, 75, 72, 69, 69, 128, 75, - 72, 69, 128, 75, 72, 65, 86, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72, - 201, 75, 72, 65, 82, 128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199, - 75, 72, 65, 78, 68, 193, 75, 72, 65, 78, 128, 75, 72, 65, 77, 84, 201, - 75, 72, 65, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, - 72, 128, 75, 72, 65, 200, 75, 72, 65, 66, 128, 75, 72, 65, 65, 128, 75, - 71, 128, 75, 69, 89, 67, 65, 80, 128, 75, 69, 89, 67, 65, 208, 75, 69, - 89, 66, 79, 65, 82, 68, 128, 75, 69, 89, 66, 79, 65, 82, 196, 75, 69, 88, - 128, 75, 69, 86, 128, 75, 69, 85, 89, 69, 85, 88, 128, 75, 69, 85, 83, - 72, 69, 85, 65, 69, 80, 128, 75, 69, 85, 83, 69, 85, 88, 128, 75, 69, 85, - 80, 85, 81, 128, 75, 69, 85, 79, 212, 75, 69, 85, 77, 128, 75, 69, 85, - 75, 69, 85, 84, 78, 68, 65, 128, 75, 69, 85, 75, 65, 81, 128, 75, 69, 85, - 65, 69, 84, 77, 69, 85, 78, 128, 75, 69, 85, 65, 69, 82, 73, 128, 75, 69, - 84, 84, 201, 75, 69, 83, 72, 50, 128, 75, 69, 82, 69, 84, 128, 75, 69, - 79, 87, 128, 75, 69, 78, 84, 73, 77, 65, 84, 65, 128, 75, 69, 78, 84, 73, - 77, 65, 84, 193, 75, 69, 78, 84, 73, 77, 193, 75, 69, 78, 65, 84, 128, - 75, 69, 78, 128, 75, 69, 206, 75, 69, 77, 80, 85, 76, 128, 75, 69, 77, - 80, 85, 204, 75, 69, 77, 80, 76, 73, 128, 75, 69, 77, 80, 76, 201, 75, - 69, 77, 80, 72, 82, 69, 78, 71, 128, 75, 69, 77, 66, 65, 78, 71, 128, 75, - 69, 76, 86, 73, 206, 75, 69, 72, 69, 72, 128, 75, 69, 72, 69, 200, 75, - 69, 72, 128, 75, 69, 70, 85, 76, 65, 128, 75, 69, 69, 86, 128, 75, 69, - 69, 83, 85, 128, 75, 69, 69, 80, 73, 78, 199, 75, 69, 69, 78, 71, 128, - 75, 69, 69, 66, 128, 75, 69, 66, 128, 75, 69, 65, 65, 69, 128, 75, 67, - 65, 76, 128, 75, 66, 128, 75, 65, 90, 65, 75, 200, 75, 65, 89, 65, 78, - 78, 65, 128, 75, 65, 89, 65, 200, 75, 65, 88, 128, 75, 65, 87, 86, 128, - 75, 65, 87, 73, 128, 75, 65, 87, 66, 128, 75, 65, 86, 89, 75, 65, 128, - 75, 65, 86, 128, 75, 65, 85, 86, 128, 75, 65, 85, 78, 65, 128, 75, 65, - 85, 206, 75, 65, 85, 66, 128, 75, 65, 84, 79, 128, 75, 65, 84, 72, 73, - 83, 84, 73, 128, 75, 65, 84, 72, 65, 75, 193, 75, 65, 84, 65, 86, 65, 83, - 77, 65, 128, 75, 65, 84, 65, 86, 193, 75, 65, 84, 65, 75, 65, 78, 65, 45, - 72, 73, 82, 65, 71, 65, 78, 193, 75, 65, 83, 82, 65, 84, 65, 78, 128, 75, - 65, 83, 82, 65, 84, 65, 206, 75, 65, 83, 82, 65, 128, 75, 65, 83, 82, - 193, 75, 65, 83, 75, 65, 76, 128, 75, 65, 83, 75, 65, 204, 75, 65, 83, - 72, 77, 73, 82, 201, 75, 65, 82, 83, 72, 65, 78, 65, 128, 75, 65, 82, 79, - 82, 73, 73, 128, 75, 65, 82, 207, 75, 65, 82, 69, 206, 75, 65, 82, 65, - 84, 84, 79, 128, 75, 65, 82, 65, 78, 128, 75, 65, 80, 89, 69, 79, 85, 78, - 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 75, 65, 80, 89, 69, 79, 85, - 78, 82, 73, 69, 85, 76, 128, 75, 65, 80, 89, 69, 79, 85, 78, 80, 72, 73, - 69, 85, 80, 72, 128, 75, 65, 80, 89, 69, 79, 85, 78, 77, 73, 69, 85, 77, - 128, 75, 65, 80, 80, 65, 128, 75, 65, 80, 80, 193, 75, 65, 80, 79, 128, - 75, 65, 80, 72, 128, 75, 65, 80, 65, 76, 128, 75, 65, 80, 65, 128, 75, - 65, 208, 75, 65, 78, 84, 65, 74, 193, 75, 65, 78, 71, 128, 75, 65, 78, - 199, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, 65, 77, 50, - 128, 75, 65, 77, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, - 128, 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 86, 128, 75, 65, 73, 84, - 72, 201, 75, 65, 73, 82, 73, 128, 75, 65, 73, 66, 128, 75, 65, 73, 128, - 75, 65, 201, 75, 65, 70, 65, 128, 75, 65, 70, 128, 75, 65, 198, 75, 65, - 68, 53, 128, 75, 65, 68, 181, 75, 65, 68, 52, 128, 75, 65, 68, 51, 128, - 75, 65, 68, 179, 75, 65, 68, 50, 128, 75, 65, 68, 128, 75, 65, 66, 193, - 75, 65, 66, 128, 75, 65, 65, 86, 128, 75, 65, 65, 73, 128, 75, 65, 65, - 70, 85, 128, 75, 65, 65, 70, 128, 75, 65, 65, 66, 128, 75, 65, 50, 128, - 75, 65, 178, 75, 48, 48, 56, 128, 75, 48, 48, 55, 128, 75, 48, 48, 54, - 128, 75, 48, 48, 53, 128, 75, 48, 48, 52, 128, 75, 48, 48, 51, 128, 75, - 48, 48, 50, 128, 75, 48, 48, 49, 128, 74, 87, 65, 128, 74, 85, 85, 128, - 74, 85, 84, 128, 74, 85, 83, 84, 73, 70, 73, 67, 65, 84, 73, 79, 78, 128, - 74, 85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84, 128, 74, 85, 79, 80, - 128, 74, 85, 78, 79, 128, 74, 85, 78, 69, 128, 74, 85, 76, 89, 128, 74, - 85, 69, 85, 73, 128, 74, 85, 68, 85, 76, 128, 74, 85, 68, 71, 69, 128, - 74, 85, 68, 69, 79, 45, 83, 80, 65, 78, 73, 83, 200, 74, 79, 89, 83, 84, - 73, 67, 75, 128, 74, 79, 89, 79, 85, 211, 74, 79, 89, 128, 74, 79, 86, - 69, 128, 74, 79, 212, 74, 79, 78, 71, 128, 74, 79, 78, 193, 74, 79, 75, - 69, 82, 128, 74, 79, 73, 78, 69, 68, 128, 74, 79, 73, 78, 128, 74, 79, - 65, 128, 74, 74, 89, 88, 128, 74, 74, 89, 84, 128, 74, 74, 89, 80, 128, - 74, 74, 89, 128, 74, 74, 85, 88, 128, 74, 74, 85, 84, 128, 74, 74, 85, - 82, 88, 128, 74, 74, 85, 82, 128, 74, 74, 85, 80, 128, 74, 74, 85, 79, - 88, 128, 74, 74, 85, 79, 80, 128, 74, 74, 85, 79, 128, 74, 74, 85, 128, - 74, 74, 79, 88, 128, 74, 74, 79, 84, 128, 74, 74, 79, 80, 128, 74, 74, - 79, 128, 74, 74, 73, 88, 128, 74, 74, 73, 84, 128, 74, 74, 73, 80, 128, - 74, 74, 73, 69, 88, 128, 74, 74, 73, 69, 84, 128, 74, 74, 73, 69, 80, - 128, 74, 74, 73, 69, 128, 74, 74, 73, 128, 74, 74, 69, 69, 128, 74, 74, - 69, 128, 74, 74, 65, 128, 74, 73, 76, 128, 74, 73, 73, 128, 74, 73, 72, - 86, 65, 77, 85, 76, 73, 89, 65, 128, 74, 73, 65, 128, 74, 72, 79, 88, - 128, 74, 72, 79, 128, 74, 72, 69, 72, 128, 74, 72, 65, 89, 73, 78, 128, - 74, 72, 65, 78, 128, 74, 72, 65, 77, 128, 74, 72, 65, 65, 128, 74, 72, - 65, 128, 74, 69, 85, 128, 74, 69, 82, 85, 83, 65, 76, 69, 77, 128, 74, - 69, 82, 65, 206, 74, 69, 82, 65, 128, 74, 69, 82, 128, 74, 69, 72, 128, - 74, 69, 200, 74, 69, 71, 79, 71, 65, 78, 128, 74, 69, 69, 77, 128, 74, - 69, 65, 78, 83, 128, 74, 65, 89, 78, 128, 74, 65, 89, 73, 78, 128, 74, - 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, - 85, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 74, 65, 80, - 65, 78, 128, 74, 65, 78, 85, 65, 82, 89, 128, 74, 65, 76, 76, 65, 74, 65, - 76, 65, 76, 79, 85, 72, 79, 85, 128, 74, 65, 73, 128, 74, 65, 72, 128, - 74, 65, 68, 69, 128, 74, 65, 67, 75, 83, 128, 74, 65, 67, 75, 45, 79, 45, - 76, 65, 78, 84, 69, 82, 78, 128, 74, 65, 67, 203, 74, 45, 83, 73, 77, 80, - 76, 73, 70, 73, 69, 196, 73, 90, 72, 73, 84, 83, 65, 128, 73, 90, 72, 73, - 84, 83, 193, 73, 90, 72, 69, 128, 73, 90, 65, 75, 65, 89, 193, 73, 89, - 69, 75, 128, 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 84, - 211, 73, 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, - 83, 72, 65, 82, 128, 73, 83, 79, 83, 67, 69, 76, 69, 211, 73, 83, 79, 78, - 128, 73, 83, 79, 206, 73, 83, 79, 76, 65, 84, 69, 128, 73, 83, 76, 65, - 78, 68, 128, 73, 83, 69, 78, 45, 73, 83, 69, 78, 128, 73, 83, 65, 75, 73, - 193, 73, 83, 45, 80, 73, 76, 76, 65, 128, 73, 82, 85, 89, 65, 78, 78, 65, - 128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, 73, 82, 79, 78, 45, 67, 79, - 80, 80, 69, 210, 73, 82, 79, 78, 128, 73, 82, 66, 128, 73, 79, 84, 73, - 70, 73, 69, 196, 73, 79, 84, 65, 84, 69, 196, 73, 79, 84, 65, 128, 73, - 79, 84, 193, 73, 79, 82, 128, 73, 79, 68, 72, 65, 68, 72, 128, 73, 78, - 86, 73, 83, 73, 66, 76, 197, 73, 78, 86, 69, 82, 84, 69, 68, 128, 73, 78, - 86, 69, 82, 84, 69, 196, 73, 78, 86, 69, 82, 83, 197, 73, 78, 84, 82, 79, - 68, 85, 67, 69, 82, 128, 73, 78, 84, 73, 128, 73, 78, 84, 69, 82, 83, 89, - 76, 76, 65, 66, 73, 195, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 78, - 128, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 206, 73, 78, 84, 69, 82, - 83, 69, 67, 84, 73, 78, 199, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 71, - 128, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 199, 73, 78, 84, 69, 82, 80, - 79, 76, 65, 84, 73, 79, 206, 73, 78, 84, 69, 82, 76, 79, 67, 75, 69, 196, - 73, 78, 84, 69, 82, 76, 73, 78, 69, 65, 210, 73, 78, 84, 69, 82, 76, 65, - 67, 69, 196, 73, 78, 84, 69, 82, 73, 79, 210, 73, 78, 84, 69, 82, 69, 83, - 212, 73, 78, 84, 69, 82, 67, 65, 76, 65, 84, 69, 128, 73, 78, 84, 69, 71, - 82, 65, 84, 73, 79, 78, 128, 73, 78, 84, 69, 71, 82, 65, 84, 73, 79, 206, - 73, 78, 84, 69, 71, 82, 65, 76, 128, 73, 78, 84, 69, 71, 82, 65, 204, 73, - 78, 83, 85, 76, 65, 210, 73, 78, 83, 84, 82, 85, 77, 69, 78, 84, 65, 204, - 73, 78, 83, 73, 68, 69, 128, 73, 78, 83, 73, 68, 197, 73, 78, 83, 69, 82, - 84, 73, 79, 206, 73, 78, 83, 69, 67, 84, 128, 73, 78, 83, 67, 82, 73, 80, - 84, 73, 79, 78, 65, 204, 73, 78, 80, 85, 212, 73, 78, 78, 79, 67, 69, 78, - 67, 69, 128, 73, 78, 78, 78, 128, 73, 78, 78, 69, 82, 128, 73, 78, 78, - 69, 210, 73, 78, 78, 128, 73, 78, 73, 78, 71, 85, 128, 73, 78, 73, 128, - 73, 78, 72, 73, 66, 73, 212, 73, 78, 72, 69, 82, 69, 78, 212, 73, 78, 71, - 87, 65, 90, 128, 73, 78, 70, 79, 82, 77, 65, 84, 73, 79, 206, 73, 78, 70, - 76, 85, 69, 78, 67, 69, 128, 73, 78, 70, 73, 78, 73, 84, 89, 128, 73, 78, - 70, 73, 78, 73, 84, 217, 73, 78, 68, 85, 83, 84, 82, 73, 65, 204, 73, 78, - 68, 73, 82, 69, 67, 212, 73, 78, 68, 73, 67, 65, 84, 79, 82, 128, 73, 78, - 68, 73, 67, 65, 84, 79, 210, 73, 78, 68, 73, 195, 73, 78, 68, 73, 65, - 206, 73, 78, 68, 69, 88, 128, 73, 78, 68, 69, 216, 73, 78, 68, 69, 80, - 69, 78, 68, 69, 78, 212, 73, 78, 67, 82, 69, 77, 69, 78, 84, 128, 73, 78, - 67, 82, 69, 65, 83, 69, 211, 73, 78, 67, 82, 69, 65, 83, 69, 128, 73, 78, - 67, 82, 69, 65, 83, 197, 73, 78, 67, 79, 77, 80, 76, 69, 84, 197, 73, 78, - 67, 79, 77, 73, 78, 199, 73, 78, 67, 76, 85, 68, 73, 78, 199, 73, 78, 67, - 72, 128, 73, 78, 66, 79, 216, 73, 78, 65, 80, 128, 73, 78, 45, 65, 76, - 65, 70, 128, 73, 77, 80, 69, 82, 73, 65, 204, 73, 77, 80, 69, 82, 70, 69, - 67, 84, 85, 205, 73, 77, 80, 69, 82, 70, 69, 67, 84, 65, 128, 73, 77, 80, - 69, 82, 70, 69, 67, 84, 193, 73, 77, 78, 128, 73, 77, 73, 83, 69, 79, - 211, 73, 77, 73, 78, 51, 128, 73, 77, 73, 78, 128, 73, 77, 73, 206, 73, - 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, 73, 77, 73, 70, 84, 72, 79, 82, - 65, 128, 73, 77, 73, 70, 79, 78, 79, 78, 128, 73, 77, 73, 68, 73, 65, 82, - 71, 79, 78, 128, 73, 77, 65, 71, 197, 73, 76, 85, 89, 65, 78, 78, 65, - 128, 73, 76, 85, 89, 128, 73, 76, 85, 85, 89, 65, 78, 78, 65, 128, 73, - 76, 85, 84, 128, 73, 76, 73, 77, 77, 85, 52, 128, 73, 76, 73, 77, 77, 85, - 51, 128, 73, 76, 73, 77, 77, 85, 128, 73, 76, 73, 77, 77, 213, 73, 76, - 50, 128, 73, 75, 65, 82, 65, 128, 73, 75, 65, 82, 193, 73, 74, 128, 73, - 73, 89, 65, 78, 78, 65, 128, 73, 71, 73, 128, 73, 71, 201, 73, 71, 71, - 87, 83, 128, 73, 70, 73, 78, 128, 73, 69, 85, 78, 71, 45, 84, 73, 75, 69, - 85, 84, 128, 73, 69, 85, 78, 71, 45, 84, 72, 73, 69, 85, 84, 72, 128, 73, - 69, 85, 78, 71, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 73, - 69, 85, 78, 71, 45, 82, 73, 69, 85, 76, 128, 73, 69, 85, 78, 71, 45, 80, - 73, 69, 85, 80, 128, 73, 69, 85, 78, 71, 45, 80, 72, 73, 69, 85, 80, 72, - 128, 73, 69, 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128, 73, 69, 85, 78, - 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, 73, 69, 85, 78, 71, 45, 67, 73, - 69, 85, 67, 128, 73, 69, 85, 78, 71, 45, 67, 72, 73, 69, 85, 67, 72, 128, - 73, 69, 85, 78, 199, 73, 68, 76, 69, 128, 73, 68, 73, 77, 128, 73, 68, - 73, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 57, 48, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 68, 55, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 67, 65, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 57, 69, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 55, 68, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 55, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 55, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 54, 68, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 51, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 49, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 55, 49, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 55, 48, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 54, 70, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 69, 56, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 50, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 54, 55, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 54, 54, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 54, 53, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 57, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 53, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 53, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 54, 51, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 54, 50, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 54, 50, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 52, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 70, 56, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 68, 69, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 53, 66, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 53, 66, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 53, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 57, 49, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 56, 70, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 53, 66, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 53, 52, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 53, 52, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 53, 51, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 51, 67, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 68, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 55, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 53, 50, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 53, 50, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 53, 49, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 65, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 56, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 50, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 52, 69, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 52, 69, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 65, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 57, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 55, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 49, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 48, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 56, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 55, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 53, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 70, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 69, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 54, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 53, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 51, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 68, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 67, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 52, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 51, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 49, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 66, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 65, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 50, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 49, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 70, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 57, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 56, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 48, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 70, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 68, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 55, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 54, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 69, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 68, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 66, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 53, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 52, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 67, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 66, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 57, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 51, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 50, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 65, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 57, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 55, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 49, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 48, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 56, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 55, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 53, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 70, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 69, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 54, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 53, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 51, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 68, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 67, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 52, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 51, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 49, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 66, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 65, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 50, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 49, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 70, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 57, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 56, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 48, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 70, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 68, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 55, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 54, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 69, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 68, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 66, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 53, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 52, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 67, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 66, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 57, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 51, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 50, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 65, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 57, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 55, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 49, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 48, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 69, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 56, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 55, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 53, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 70, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 69, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 67, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 54, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 53, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 51, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 68, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 67, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 65, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 52, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 51, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 49, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 66, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 65, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 56, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 50, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 49, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 70, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 57, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 56, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 54, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 48, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 70, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 68, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 55, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 54, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 52, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 69, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 68, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 67, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 66, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, - 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 53, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 52, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 50, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 67, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 66, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 57, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, - 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 51, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 50, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 48, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 65, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 57, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 56, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 55, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 49, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 48, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 69, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 56, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 55, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 54, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 53, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, - 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 70, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 69, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 67, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 54, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 53, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 51, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, - 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 68, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 67, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 65, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 52, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 51, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 50, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 49, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, - 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 66, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 65, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 56, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 50, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 49, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 70, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, - 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 57, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 56, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 54, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 48, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 70, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 69, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 68, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 55, 128, - 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 54, 128, 73, 68, - 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 52, 128, 73, 68, 69, 79, 71, 82, - 65, 80, 72, 45, 50, 70, 56, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 56, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, - 56, 48, 48, 128, 73, 68, 69, 78, 84, 73, 70, 73, 67, 65, 84, 73, 79, 78, - 128, 73, 68, 69, 78, 84, 73, 67, 65, 204, 73, 67, 79, 78, 128, 73, 67, - 72, 79, 85, 128, 73, 67, 72, 79, 83, 128, 73, 67, 72, 73, 77, 65, 84, 79, - 83, 128, 73, 67, 72, 65, 68, 73, 78, 128, 73, 67, 69, 76, 65, 78, 68, 73, - 67, 45, 89, 82, 128, 73, 66, 73, 70, 73, 76, 73, 128, 73, 65, 85, 68, 65, - 128, 73, 48, 49, 53, 128, 73, 48, 49, 52, 128, 73, 48, 49, 51, 128, 73, - 48, 49, 50, 128, 73, 48, 49, 49, 65, 128, 73, 48, 49, 49, 128, 73, 48, - 49, 48, 65, 128, 73, 48, 49, 48, 128, 73, 48, 48, 57, 65, 128, 73, 48, - 48, 57, 128, 73, 48, 48, 56, 128, 73, 48, 48, 55, 128, 73, 48, 48, 54, - 128, 73, 48, 48, 53, 65, 128, 73, 48, 48, 53, 128, 73, 48, 48, 52, 128, - 73, 48, 48, 51, 128, 73, 48, 48, 50, 128, 73, 48, 48, 49, 128, 73, 45, - 89, 85, 128, 73, 45, 89, 79, 128, 73, 45, 89, 69, 79, 128, 73, 45, 89, - 69, 128, 73, 45, 89, 65, 69, 128, 73, 45, 89, 65, 45, 79, 128, 73, 45, - 89, 65, 128, 73, 45, 79, 45, 73, 128, 73, 45, 79, 128, 73, 45, 69, 85, - 128, 73, 45, 66, 69, 65, 77, 128, 73, 45, 65, 82, 65, 69, 65, 128, 73, - 45, 65, 128, 72, 90, 90, 90, 71, 128, 72, 90, 90, 90, 128, 72, 90, 90, - 80, 128, 72, 90, 90, 128, 72, 90, 87, 71, 128, 72, 90, 87, 128, 72, 90, - 84, 128, 72, 90, 71, 128, 72, 89, 83, 84, 69, 82, 69, 83, 73, 211, 72, - 89, 80, 79, 68, 73, 65, 83, 84, 79, 76, 69, 128, 72, 89, 80, 72, 69, 78, - 65, 84, 73, 79, 206, 72, 89, 80, 72, 69, 78, 45, 77, 73, 78, 85, 83, 128, - 72, 89, 80, 72, 69, 78, 128, 72, 89, 80, 72, 69, 206, 72, 88, 87, 71, - 128, 72, 88, 85, 79, 88, 128, 72, 88, 85, 79, 84, 128, 72, 88, 85, 79, - 80, 128, 72, 88, 85, 79, 128, 72, 88, 79, 88, 128, 72, 88, 79, 84, 128, - 72, 88, 79, 80, 128, 72, 88, 79, 128, 72, 88, 73, 88, 128, 72, 88, 73, - 84, 128, 72, 88, 73, 80, 128, 72, 88, 73, 69, 88, 128, 72, 88, 73, 69, - 84, 128, 72, 88, 73, 69, 80, 128, 72, 88, 73, 69, 128, 72, 88, 73, 128, - 72, 88, 69, 88, 128, 72, 88, 69, 80, 128, 72, 88, 69, 128, 72, 88, 65, - 88, 128, 72, 88, 65, 84, 128, 72, 88, 65, 80, 128, 72, 88, 65, 128, 72, - 87, 85, 128, 72, 87, 65, 73, 82, 128, 72, 87, 65, 72, 128, 72, 86, 128, - 72, 85, 86, 65, 128, 72, 85, 83, 72, 69, 196, 72, 85, 83, 72, 128, 72, - 85, 82, 65, 78, 128, 72, 85, 79, 84, 128, 72, 85, 78, 68, 82, 69, 68, 83, + 65, 82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128, 75, 73, 76, 76, 69, + 82, 128, 75, 73, 73, 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, + 69, 86, 65, 206, 75, 73, 69, 80, 128, 75, 73, 69, 69, 77, 128, 75, 73, + 69, 128, 75, 73, 68, 128, 75, 73, 196, 75, 73, 67, 75, 128, 75, 73, 66, + 128, 75, 73, 65, 86, 128, 75, 73, 65, 66, 128, 75, 72, 90, 128, 75, 72, + 87, 65, 73, 128, 75, 72, 85, 69, 78, 45, 76, 85, 197, 75, 72, 85, 69, + 206, 75, 72, 85, 68, 65, 87, 65, 68, 201, 75, 72, 85, 68, 65, 77, 128, + 75, 72, 85, 65, 84, 128, 75, 72, 79, 85, 128, 75, 72, 79, 212, 75, 72, + 79, 78, 128, 75, 72, 79, 77, 85, 84, 128, 75, 72, 79, 74, 75, 201, 75, + 72, 79, 128, 75, 72, 207, 75, 72, 77, 213, 75, 72, 73, 84, 128, 75, 72, + 73, 78, 89, 65, 128, 75, 72, 73, 69, 85, 75, 200, 75, 72, 73, 128, 75, + 72, 201, 75, 72, 72, 79, 128, 75, 72, 72, 65, 128, 75, 72, 69, 84, 72, + 128, 75, 72, 69, 73, 128, 75, 72, 69, 69, 128, 75, 72, 69, 128, 75, 72, + 65, 86, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 75, 72, 65, 82, + 128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199, 75, 72, 65, 78, 68, + 193, 75, 72, 65, 78, 128, 75, 72, 65, 77, 84, 201, 75, 72, 65, 75, 65, + 83, 83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, 72, 128, 75, 72, + 65, 200, 75, 72, 65, 66, 128, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, + 89, 67, 65, 80, 128, 75, 69, 89, 67, 65, 208, 75, 69, 89, 66, 79, 65, 82, + 68, 128, 75, 69, 89, 66, 79, 65, 82, 196, 75, 69, 88, 128, 75, 69, 86, + 128, 75, 69, 85, 89, 69, 85, 88, 128, 75, 69, 85, 83, 72, 69, 85, 65, 69, + 80, 128, 75, 69, 85, 83, 69, 85, 88, 128, 75, 69, 85, 80, 85, 81, 128, + 75, 69, 85, 79, 212, 75, 69, 85, 77, 128, 75, 69, 85, 75, 69, 85, 84, 78, + 68, 65, 128, 75, 69, 85, 75, 65, 81, 128, 75, 69, 85, 65, 69, 84, 77, 69, + 85, 78, 128, 75, 69, 85, 65, 69, 82, 73, 128, 75, 69, 84, 84, 201, 75, + 69, 83, 72, 50, 128, 75, 69, 82, 69, 84, 128, 75, 69, 79, 87, 128, 75, + 69, 78, 84, 73, 77, 65, 84, 65, 128, 75, 69, 78, 84, 73, 77, 65, 84, 193, + 75, 69, 78, 84, 73, 77, 193, 75, 69, 78, 65, 84, 128, 75, 69, 78, 128, + 75, 69, 206, 75, 69, 77, 80, 85, 76, 128, 75, 69, 77, 80, 85, 204, 75, + 69, 77, 80, 76, 73, 128, 75, 69, 77, 80, 76, 201, 75, 69, 77, 80, 72, 82, + 69, 78, 71, 128, 75, 69, 77, 66, 65, 78, 71, 128, 75, 69, 76, 86, 73, + 206, 75, 69, 72, 69, 72, 128, 75, 69, 72, 69, 200, 75, 69, 72, 128, 75, + 69, 70, 85, 76, 65, 128, 75, 69, 69, 86, 128, 75, 69, 69, 83, 85, 128, + 75, 69, 69, 80, 73, 78, 199, 75, 69, 69, 78, 71, 128, 75, 69, 69, 66, + 128, 75, 69, 66, 128, 75, 69, 65, 65, 69, 128, 75, 67, 65, 76, 128, 75, + 66, 128, 75, 65, 90, 65, 75, 200, 75, 65, 89, 65, 78, 78, 65, 128, 75, + 65, 89, 65, 200, 75, 65, 88, 128, 75, 65, 87, 86, 128, 75, 65, 87, 73, + 128, 75, 65, 87, 66, 128, 75, 65, 86, 89, 75, 65, 128, 75, 65, 86, 128, + 75, 65, 85, 86, 128, 75, 65, 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, + 85, 66, 128, 75, 65, 84, 79, 128, 75, 65, 84, 72, 73, 83, 84, 73, 128, + 75, 65, 84, 72, 65, 75, 193, 75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75, + 65, 84, 65, 86, 193, 75, 65, 84, 65, 75, 65, 78, 65, 45, 72, 73, 82, 65, + 71, 65, 78, 193, 75, 65, 83, 82, 65, 84, 65, 78, 128, 75, 65, 83, 82, 65, + 84, 65, 206, 75, 65, 83, 82, 65, 128, 75, 65, 83, 82, 193, 75, 65, 83, + 75, 65, 76, 128, 75, 65, 83, 75, 65, 204, 75, 65, 83, 72, 77, 73, 82, + 201, 75, 65, 82, 83, 72, 65, 78, 65, 128, 75, 65, 82, 79, 82, 73, 73, + 128, 75, 65, 82, 207, 75, 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, + 128, 75, 65, 82, 65, 78, 128, 75, 65, 80, 89, 69, 79, 85, 78, 83, 83, 65, + 78, 71, 80, 73, 69, 85, 80, 128, 75, 65, 80, 89, 69, 79, 85, 78, 82, 73, + 69, 85, 76, 128, 75, 65, 80, 89, 69, 79, 85, 78, 80, 72, 73, 69, 85, 80, + 72, 128, 75, 65, 80, 89, 69, 79, 85, 78, 77, 73, 69, 85, 77, 128, 75, 65, + 80, 80, 65, 128, 75, 65, 80, 80, 193, 75, 65, 80, 79, 128, 75, 65, 80, + 72, 128, 75, 65, 80, 65, 76, 128, 75, 65, 80, 65, 128, 75, 65, 208, 75, + 65, 78, 84, 65, 74, 193, 75, 65, 78, 71, 128, 75, 65, 78, 199, 75, 65, + 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, 65, 77, 50, 128, 75, 65, + 77, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, + 75, 128, 75, 65, 203, 75, 65, 73, 86, 128, 75, 65, 73, 84, 72, 201, 75, + 65, 73, 82, 73, 128, 75, 65, 73, 66, 128, 75, 65, 73, 128, 75, 65, 201, + 75, 65, 70, 65, 128, 75, 65, 70, 128, 75, 65, 198, 75, 65, 68, 53, 128, + 75, 65, 68, 181, 75, 65, 68, 52, 128, 75, 65, 68, 51, 128, 75, 65, 68, + 179, 75, 65, 68, 50, 128, 75, 65, 68, 128, 75, 65, 66, 193, 75, 65, 66, + 128, 75, 65, 65, 86, 128, 75, 65, 65, 73, 128, 75, 65, 65, 70, 85, 128, + 75, 65, 65, 70, 128, 75, 65, 65, 66, 65, 128, 75, 65, 65, 66, 128, 75, + 65, 50, 128, 75, 65, 178, 75, 48, 48, 56, 128, 75, 48, 48, 55, 128, 75, + 48, 48, 54, 128, 75, 48, 48, 53, 128, 75, 48, 48, 52, 128, 75, 48, 48, + 51, 128, 75, 48, 48, 50, 128, 75, 48, 48, 49, 128, 74, 87, 65, 128, 74, + 85, 85, 128, 74, 85, 84, 128, 74, 85, 83, 84, 73, 70, 73, 67, 65, 84, 73, + 79, 78, 128, 74, 85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84, 128, 74, + 85, 79, 80, 128, 74, 85, 78, 79, 128, 74, 85, 78, 69, 128, 74, 85, 76, + 89, 128, 74, 85, 69, 85, 73, 128, 74, 85, 68, 85, 76, 128, 74, 85, 68, + 71, 69, 128, 74, 85, 68, 69, 79, 45, 83, 80, 65, 78, 73, 83, 200, 74, 79, + 89, 83, 84, 73, 67, 75, 128, 74, 79, 89, 79, 85, 211, 74, 79, 89, 128, + 74, 79, 86, 69, 128, 74, 79, 212, 74, 79, 78, 71, 128, 74, 79, 78, 193, + 74, 79, 75, 69, 82, 128, 74, 79, 73, 78, 84, 83, 128, 74, 79, 73, 78, 69, + 68, 128, 74, 79, 73, 78, 128, 74, 79, 65, 128, 74, 74, 89, 88, 128, 74, + 74, 89, 84, 128, 74, 74, 89, 80, 128, 74, 74, 89, 128, 74, 74, 85, 88, + 128, 74, 74, 85, 84, 128, 74, 74, 85, 82, 88, 128, 74, 74, 85, 82, 128, + 74, 74, 85, 80, 128, 74, 74, 85, 79, 88, 128, 74, 74, 85, 79, 80, 128, + 74, 74, 85, 79, 128, 74, 74, 85, 128, 74, 74, 79, 88, 128, 74, 74, 79, + 84, 128, 74, 74, 79, 80, 128, 74, 74, 79, 128, 74, 74, 73, 88, 128, 74, + 74, 73, 84, 128, 74, 74, 73, 80, 128, 74, 74, 73, 69, 88, 128, 74, 74, + 73, 69, 84, 128, 74, 74, 73, 69, 80, 128, 74, 74, 73, 69, 128, 74, 74, + 73, 128, 74, 74, 69, 69, 128, 74, 74, 69, 128, 74, 74, 65, 128, 74, 73, + 76, 128, 74, 73, 73, 128, 74, 73, 72, 86, 65, 77, 85, 76, 73, 89, 65, + 128, 74, 73, 65, 128, 74, 72, 79, 88, 128, 74, 72, 79, 128, 74, 72, 69, + 72, 128, 74, 72, 65, 89, 73, 78, 128, 74, 72, 65, 78, 128, 74, 72, 65, + 77, 128, 74, 72, 65, 65, 128, 74, 72, 65, 128, 74, 69, 85, 128, 74, 69, + 82, 85, 83, 65, 76, 69, 77, 128, 74, 69, 82, 65, 206, 74, 69, 82, 65, + 128, 74, 69, 82, 128, 74, 69, 72, 128, 74, 69, 200, 74, 69, 71, 79, 71, + 65, 78, 128, 74, 69, 69, 77, 128, 74, 69, 65, 78, 83, 128, 74, 65, 89, + 78, 128, 74, 65, 89, 73, 78, 128, 74, 65, 89, 65, 78, 78, 65, 128, 74, + 65, 87, 128, 74, 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, 85, 128, 74, + 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 74, 65, 80, 65, 78, 128, + 74, 65, 78, 85, 65, 82, 89, 128, 74, 65, 76, 76, 65, 74, 65, 76, 65, 76, + 79, 85, 72, 79, 85, 128, 74, 65, 73, 206, 74, 65, 73, 128, 74, 65, 72, + 128, 74, 65, 68, 69, 128, 74, 65, 67, 75, 83, 128, 74, 65, 67, 75, 45, + 79, 45, 76, 65, 78, 84, 69, 82, 78, 128, 74, 65, 67, 203, 74, 45, 83, 73, + 77, 80, 76, 73, 70, 73, 69, 196, 73, 90, 72, 73, 84, 83, 65, 128, 73, 90, + 72, 73, 84, 83, 193, 73, 90, 72, 69, 128, 73, 90, 65, 75, 65, 89, 193, + 73, 89, 69, 75, 128, 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, + 73, 84, 211, 73, 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, + 73, 83, 83, 72, 65, 82, 128, 73, 83, 79, 83, 67, 69, 76, 69, 211, 73, 83, + 79, 78, 128, 73, 83, 79, 206, 73, 83, 79, 76, 65, 84, 69, 128, 73, 83, + 76, 65, 78, 68, 128, 73, 83, 69, 78, 45, 73, 83, 69, 78, 128, 73, 83, 65, + 75, 73, 193, 73, 83, 45, 80, 73, 76, 76, 65, 128, 73, 82, 85, 89, 65, 78, + 78, 65, 128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, 73, 82, 79, 78, 45, + 67, 79, 80, 80, 69, 210, 73, 82, 79, 78, 128, 73, 82, 66, 128, 73, 79, + 84, 73, 70, 73, 69, 196, 73, 79, 84, 65, 84, 69, 196, 73, 79, 84, 65, + 128, 73, 79, 84, 193, 73, 79, 82, 128, 73, 79, 68, 72, 65, 68, 72, 128, + 73, 78, 86, 73, 83, 73, 66, 76, 197, 73, 78, 86, 69, 82, 84, 69, 68, 128, + 73, 78, 86, 69, 82, 84, 69, 196, 73, 78, 86, 69, 82, 83, 197, 73, 78, 84, + 82, 79, 68, 85, 67, 69, 82, 128, 73, 78, 84, 73, 128, 73, 78, 84, 69, 82, + 83, 89, 76, 76, 65, 66, 73, 195, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, + 79, 78, 128, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 206, 73, 78, 84, + 69, 82, 83, 69, 67, 84, 73, 78, 199, 73, 78, 84, 69, 82, 82, 79, 66, 65, + 78, 71, 128, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 199, 73, 78, 84, 69, + 82, 80, 79, 76, 65, 84, 73, 79, 206, 73, 78, 84, 69, 82, 76, 79, 67, 75, + 69, 196, 73, 78, 84, 69, 82, 76, 73, 78, 69, 65, 210, 73, 78, 84, 69, 82, + 76, 65, 67, 69, 196, 73, 78, 84, 69, 82, 73, 79, 210, 73, 78, 84, 69, 82, + 69, 83, 212, 73, 78, 84, 69, 82, 67, 65, 76, 65, 84, 69, 128, 73, 78, 84, + 69, 71, 82, 65, 84, 73, 79, 78, 128, 73, 78, 84, 69, 71, 82, 65, 84, 73, + 79, 206, 73, 78, 84, 69, 71, 82, 65, 76, 128, 73, 78, 84, 69, 71, 82, 65, + 204, 73, 78, 83, 85, 76, 65, 210, 73, 78, 83, 84, 82, 85, 77, 69, 78, 84, + 65, 204, 73, 78, 83, 73, 68, 69, 128, 73, 78, 83, 73, 68, 197, 73, 78, + 83, 69, 82, 84, 73, 79, 206, 73, 78, 83, 69, 67, 84, 128, 73, 78, 83, 67, + 82, 73, 80, 84, 73, 79, 78, 65, 204, 73, 78, 80, 85, 212, 73, 78, 78, 79, + 67, 69, 78, 67, 69, 128, 73, 78, 78, 78, 128, 73, 78, 78, 69, 82, 128, + 73, 78, 78, 69, 210, 73, 78, 78, 128, 73, 78, 73, 78, 71, 85, 128, 73, + 78, 73, 128, 73, 78, 72, 73, 66, 73, 212, 73, 78, 72, 69, 82, 69, 78, + 212, 73, 78, 72, 65, 76, 69, 128, 73, 78, 71, 87, 65, 90, 128, 73, 78, + 70, 79, 82, 77, 65, 84, 73, 79, 206, 73, 78, 70, 76, 85, 69, 78, 67, 69, + 128, 73, 78, 70, 73, 78, 73, 84, 89, 128, 73, 78, 70, 73, 78, 73, 84, + 217, 73, 78, 68, 85, 83, 84, 82, 73, 65, 204, 73, 78, 68, 73, 82, 69, 67, + 212, 73, 78, 68, 73, 67, 65, 84, 79, 82, 128, 73, 78, 68, 73, 67, 65, 84, + 79, 210, 73, 78, 68, 73, 195, 73, 78, 68, 73, 65, 206, 73, 78, 68, 69, + 88, 128, 73, 78, 68, 69, 80, 69, 78, 68, 69, 78, 212, 73, 78, 67, 82, 69, + 77, 69, 78, 84, 128, 73, 78, 67, 82, 69, 65, 83, 69, 211, 73, 78, 67, 82, + 69, 65, 83, 69, 128, 73, 78, 67, 82, 69, 65, 83, 197, 73, 78, 67, 79, 77, + 80, 76, 69, 84, 197, 73, 78, 67, 79, 77, 73, 78, 199, 73, 78, 67, 76, 85, + 68, 73, 78, 199, 73, 78, 67, 72, 128, 73, 78, 66, 79, 216, 73, 78, 65, + 80, 128, 73, 78, 45, 65, 76, 65, 70, 128, 73, 77, 80, 69, 82, 73, 65, + 204, 73, 77, 80, 69, 82, 70, 69, 67, 84, 85, 205, 73, 77, 80, 69, 82, 70, + 69, 67, 84, 65, 128, 73, 77, 80, 69, 82, 70, 69, 67, 84, 193, 73, 77, 78, + 128, 73, 77, 73, 83, 69, 79, 211, 73, 77, 73, 78, 51, 128, 73, 77, 73, + 78, 128, 73, 77, 73, 206, 73, 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, + 73, 77, 73, 70, 84, 72, 79, 82, 65, 128, 73, 77, 73, 70, 79, 78, 79, 78, + 128, 73, 77, 73, 68, 73, 65, 82, 71, 79, 78, 128, 73, 77, 65, 71, 197, + 73, 76, 85, 89, 65, 78, 78, 65, 128, 73, 76, 85, 89, 128, 73, 76, 85, 85, + 89, 65, 78, 78, 65, 128, 73, 76, 85, 84, 128, 73, 76, 73, 77, 77, 85, 52, + 128, 73, 76, 73, 77, 77, 85, 51, 128, 73, 76, 73, 77, 77, 85, 128, 73, + 76, 73, 77, 77, 213, 73, 76, 50, 128, 73, 75, 65, 82, 65, 128, 73, 75, + 65, 82, 193, 73, 74, 128, 73, 73, 89, 65, 78, 78, 65, 128, 73, 71, 73, + 128, 73, 71, 201, 73, 71, 71, 87, 83, 128, 73, 70, 73, 78, 128, 73, 69, + 85, 78, 71, 45, 84, 73, 75, 69, 85, 84, 128, 73, 69, 85, 78, 71, 45, 84, + 72, 73, 69, 85, 84, 72, 128, 73, 69, 85, 78, 71, 45, 83, 83, 65, 78, 71, + 75, 73, 89, 69, 79, 75, 128, 73, 69, 85, 78, 71, 45, 82, 73, 69, 85, 76, + 128, 73, 69, 85, 78, 71, 45, 80, 73, 69, 85, 80, 128, 73, 69, 85, 78, 71, + 45, 80, 72, 73, 69, 85, 80, 72, 128, 73, 69, 85, 78, 71, 45, 75, 73, 89, + 69, 79, 75, 128, 73, 69, 85, 78, 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, + 73, 69, 85, 78, 71, 45, 67, 73, 69, 85, 67, 128, 73, 69, 85, 78, 71, 45, + 67, 72, 73, 69, 85, 67, 72, 128, 73, 69, 85, 78, 199, 73, 68, 76, 69, + 128, 73, 68, 73, 77, 128, 73, 68, 73, 205, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 70, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, + 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, + 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, + 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 66, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 53, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 57, 48, 52, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 56, 68, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 56, 67, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 56, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 68, 52, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 65, 55, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 57, 56, 49, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 55, 54, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 55, 53, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 55, 53, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 49, 50, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 48, 66, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 70, 49, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 54, 69, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 54, 55, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 54, 55, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 54, 50, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 66, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 54, 53, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 54, 53, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 54, 51, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 48, + 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 57, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 53, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 54, 50, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 53, 70, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 53, 68, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 66, 56, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 66, 53, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 57, 50, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 53, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 53, 56, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 53, 53, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 52, 51, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 52, 48, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 51, 70, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 53, 51, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 53, 50, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 53, 50, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 52, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 49, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 49, 56, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 52, 69, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 52, 69, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 52, 69, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 48, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 48, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 68, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 67, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 65, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, + 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 54, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 52, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 65, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 65, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 65, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, + 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 68, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 66, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 65, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 65, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, + 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 52, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 50, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 66, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 57, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 56, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 50, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 48, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 57, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 55, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 54, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 48, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 69, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 55, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 53, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 52, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 69, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 67, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 53, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 51, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 50, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 67, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 65, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 51, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 49, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 48, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 65, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 56, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 49, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 70, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 69, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 56, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 54, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 70, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 68, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 67, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 54, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 52, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 68, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 66, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 65, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 52, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 50, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 66, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 57, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 56, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 50, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 48, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 57, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 55, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 54, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 48, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 69, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 55, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 53, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 52, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 69, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 67, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 53, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 51, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 50, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 67, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 65, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 51, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 49, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 48, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 65, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 56, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 49, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 70, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 69, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 56, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 54, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 70, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 68, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 67, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 54, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 52, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 51, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 68, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 66, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 65, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 52, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 50, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 49, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 66, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 57, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 56, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 50, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 48, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 70, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 57, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 55, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 54, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 48, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 69, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 68, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 55, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 53, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 52, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 69, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 67, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 66, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 53, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 51, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 50, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 67, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 65, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 57, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 51, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 49, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 48, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 65, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 56, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 55, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 49, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 70, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 69, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 56, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 54, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 53, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 70, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 68, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 67, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 54, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 52, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 51, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 68, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 66, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 65, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 52, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 50, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 49, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 66, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 57, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 56, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 50, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 48, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 70, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 57, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 55, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 54, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 48, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 69, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 68, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 55, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 53, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 52, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 69, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 67, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 66, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 53, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 51, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 50, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 67, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 65, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 57, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 51, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 49, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 48, 128, 73, 68, 69, 78, 84, + 73, 70, 73, 67, 65, 84, 73, 79, 78, 128, 73, 68, 69, 78, 84, 73, 67, 65, + 204, 73, 67, 79, 78, 128, 73, 67, 72, 79, 85, 128, 73, 67, 72, 79, 83, + 128, 73, 67, 72, 73, 77, 65, 84, 79, 83, 128, 73, 67, 72, 65, 68, 73, 78, + 128, 73, 67, 69, 76, 65, 78, 68, 73, 67, 45, 89, 82, 128, 73, 66, 73, 70, + 73, 76, 73, 128, 73, 65, 85, 68, 65, 128, 73, 48, 49, 53, 128, 73, 48, + 49, 52, 128, 73, 48, 49, 51, 128, 73, 48, 49, 50, 128, 73, 48, 49, 49, + 65, 128, 73, 48, 49, 49, 128, 73, 48, 49, 48, 65, 128, 73, 48, 49, 48, + 128, 73, 48, 48, 57, 65, 128, 73, 48, 48, 57, 128, 73, 48, 48, 56, 128, + 73, 48, 48, 55, 128, 73, 48, 48, 54, 128, 73, 48, 48, 53, 65, 128, 73, + 48, 48, 53, 128, 73, 48, 48, 52, 128, 73, 48, 48, 51, 128, 73, 48, 48, + 50, 128, 73, 48, 48, 49, 128, 73, 45, 89, 85, 128, 73, 45, 89, 79, 128, + 73, 45, 89, 69, 79, 128, 73, 45, 89, 69, 128, 73, 45, 89, 65, 69, 128, + 73, 45, 89, 65, 45, 79, 128, 73, 45, 89, 65, 128, 73, 45, 79, 45, 73, + 128, 73, 45, 79, 128, 73, 45, 69, 85, 128, 73, 45, 66, 69, 65, 77, 128, + 73, 45, 65, 82, 65, 69, 65, 128, 73, 45, 65, 128, 72, 90, 90, 90, 71, + 128, 72, 90, 90, 90, 128, 72, 90, 90, 80, 128, 72, 90, 90, 128, 72, 90, + 87, 71, 128, 72, 90, 87, 128, 72, 90, 84, 128, 72, 90, 71, 128, 72, 89, + 83, 84, 69, 82, 69, 83, 73, 211, 72, 89, 80, 79, 68, 73, 65, 83, 84, 79, + 76, 69, 128, 72, 89, 80, 72, 69, 78, 65, 84, 73, 79, 206, 72, 89, 80, 72, + 69, 78, 45, 77, 73, 78, 85, 83, 128, 72, 89, 80, 72, 69, 78, 128, 72, 89, + 80, 72, 69, 206, 72, 89, 71, 73, 69, 73, 65, 128, 72, 88, 87, 71, 128, + 72, 88, 85, 79, 88, 128, 72, 88, 85, 79, 84, 128, 72, 88, 85, 79, 80, + 128, 72, 88, 85, 79, 128, 72, 88, 79, 88, 128, 72, 88, 79, 84, 128, 72, + 88, 79, 80, 128, 72, 88, 79, 128, 72, 88, 73, 88, 128, 72, 88, 73, 84, + 128, 72, 88, 73, 80, 128, 72, 88, 73, 69, 88, 128, 72, 88, 73, 69, 84, + 128, 72, 88, 73, 69, 80, 128, 72, 88, 73, 69, 128, 72, 88, 73, 128, 72, + 88, 69, 88, 128, 72, 88, 69, 80, 128, 72, 88, 69, 128, 72, 88, 65, 88, + 128, 72, 88, 65, 84, 128, 72, 88, 65, 80, 128, 72, 88, 65, 128, 72, 87, + 85, 128, 72, 87, 65, 73, 82, 128, 72, 87, 65, 72, 128, 72, 86, 128, 72, + 85, 86, 65, 128, 72, 85, 83, 72, 69, 196, 72, 85, 83, 72, 128, 72, 85, + 82, 65, 78, 128, 72, 85, 79, 84, 128, 72, 85, 78, 68, 82, 69, 68, 83, 128, 72, 85, 78, 68, 82, 69, 68, 128, 72, 85, 78, 68, 82, 69, 196, 72, - 85, 78, 128, 72, 85, 77, 65, 78, 128, 72, 85, 77, 65, 206, 72, 85, 76, - 50, 128, 72, 85, 73, 73, 84, 79, 128, 72, 85, 66, 50, 128, 72, 85, 66, - 178, 72, 85, 66, 128, 72, 85, 65, 82, 65, 68, 68, 79, 128, 72, 85, 65, - 78, 128, 72, 84, 83, 128, 72, 84, 74, 128, 72, 82, 89, 86, 78, 73, 193, - 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, 80, 128, 72, 79, 85, 83, 197, - 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, 85, 82, 71, 76, 65, 83, - 211, 72, 79, 85, 82, 128, 72, 79, 85, 210, 72, 79, 84, 69, 76, 128, 72, - 79, 84, 65, 128, 72, 79, 83, 80, 73, 84, 65, 76, 128, 72, 79, 82, 83, 69, - 128, 72, 79, 82, 83, 197, 72, 79, 82, 82, 128, 72, 79, 82, 78, 83, 128, - 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 76, 217, 72, 79, 82, 73, 90, 79, - 78, 84, 65, 76, 45, 48, 54, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, - 84, 65, 76, 45, 48, 54, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 76, 45, 48, 54, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, - 76, 45, 48, 54, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, - 45, 48, 54, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, - 48, 54, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, - 54, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, - 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, - 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, - 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 51, - 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 50, 128, - 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 49, 128, 72, - 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 48, 128, 72, 79, - 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 54, 128, 72, 79, 82, - 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 53, 128, 72, 79, 82, 73, - 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 52, 128, 72, 79, 82, 73, 90, - 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, - 78, 84, 65, 76, 45, 48, 52, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, - 84, 65, 76, 45, 48, 52, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 76, 45, 48, 52, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, - 76, 45, 48, 51, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, - 45, 48, 51, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, - 48, 51, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, - 51, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, - 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, - 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, - 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 54, - 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 53, 128, - 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 52, 128, 72, - 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 51, 128, 72, 79, - 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 50, 128, 72, 79, 82, - 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 49, 128, 72, 79, 82, 73, - 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 48, 128, 72, 79, 82, 73, 90, - 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, - 78, 84, 65, 76, 45, 48, 49, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, - 84, 65, 76, 45, 48, 49, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 76, 45, 48, 49, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, - 76, 45, 48, 49, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, - 45, 48, 49, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, - 48, 49, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, - 48, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, - 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, - 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, - 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 50, - 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 49, 128, - 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 48, 128, 72, - 79, 82, 73, 90, 79, 78, 84, 65, 76, 128, 72, 79, 82, 73, 128, 72, 79, 82, - 193, 72, 79, 79, 85, 128, 72, 79, 79, 82, 85, 128, 72, 79, 79, 80, 128, - 72, 79, 79, 78, 128, 72, 79, 79, 75, 69, 196, 72, 79, 78, 69, 89, 66, 69, - 69, 128, 72, 79, 78, 69, 217, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, - 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 195, 72, 79, 76, 79, 128, 72, - 79, 76, 76, 79, 215, 72, 79, 76, 69, 128, 72, 79, 76, 68, 73, 78, 199, - 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 75, 65, 128, 72, + 85, 78, 128, 72, 85, 77, 208, 72, 85, 77, 65, 78, 128, 72, 85, 77, 65, + 206, 72, 85, 76, 50, 128, 72, 85, 73, 73, 84, 79, 128, 72, 85, 71, 71, + 73, 78, 199, 72, 85, 66, 50, 128, 72, 85, 66, 178, 72, 85, 66, 128, 72, + 85, 65, 82, 65, 68, 68, 79, 128, 72, 85, 65, 78, 128, 72, 84, 83, 128, + 72, 84, 74, 128, 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, + 80, 65, 128, 72, 80, 128, 72, 79, 85, 83, 197, 72, 79, 85, 82, 71, 76, + 65, 83, 83, 128, 72, 79, 85, 82, 71, 76, 65, 83, 211, 72, 79, 85, 82, + 128, 72, 79, 85, 210, 72, 79, 84, 69, 76, 128, 72, 79, 84, 65, 128, 72, + 79, 83, 80, 73, 84, 65, 76, 128, 72, 79, 82, 83, 69, 128, 72, 79, 82, 83, + 197, 72, 79, 82, 82, 128, 72, 79, 82, 78, 83, 128, 72, 79, 82, 73, 90, + 79, 78, 84, 65, 76, 76, 217, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, + 48, 54, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, + 54, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, + 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, + 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, + 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 49, + 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 48, 128, + 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 54, 128, 72, + 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 53, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 52, 128, 72, 79, 82, + 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 51, 128, 72, 79, 82, 73, + 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 50, 128, 72, 79, 82, 73, 90, + 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, + 78, 84, 65, 76, 45, 48, 53, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, + 84, 65, 76, 45, 48, 52, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, + 65, 76, 45, 48, 52, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, + 76, 45, 48, 52, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, + 45, 48, 52, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, + 48, 52, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, + 52, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, + 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, + 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, + 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 52, + 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 51, 128, + 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 50, 128, 72, + 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 49, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 48, 128, 72, 79, 82, + 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 54, 128, 72, 79, 82, 73, + 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 53, 128, 72, 79, 82, 73, 90, + 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, + 78, 84, 65, 76, 45, 48, 50, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, + 84, 65, 76, 45, 48, 50, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, + 65, 76, 45, 48, 50, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, + 76, 45, 48, 50, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, + 45, 48, 49, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, + 48, 49, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, + 49, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, + 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, + 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, + 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 48, + 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 54, 128, + 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 53, 128, 72, + 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 52, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 51, 128, 72, 79, 82, + 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 50, 128, 72, 79, 82, 73, + 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 49, 128, 72, 79, 82, 73, 90, + 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, + 78, 84, 65, 76, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 72, 79, 82, + 73, 128, 72, 79, 82, 193, 72, 79, 79, 85, 128, 72, 79, 79, 82, 85, 128, + 72, 79, 79, 80, 128, 72, 79, 79, 78, 128, 72, 79, 79, 75, 69, 68, 128, + 72, 79, 79, 75, 69, 196, 72, 79, 78, 69, 89, 66, 69, 69, 128, 72, 79, 78, + 69, 217, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 79, 77, 79, 84, + 72, 69, 84, 73, 195, 72, 79, 76, 79, 128, 72, 79, 76, 76, 79, 215, 72, + 79, 76, 69, 128, 72, 79, 76, 68, 73, 78, 199, 72, 79, 76, 65, 77, 128, + 72, 79, 76, 65, 205, 72, 79, 75, 65, 128, 72, 79, 67, 75, 69, 217, 72, 79, 67, 72, 79, 128, 72, 78, 85, 84, 128, 72, 78, 85, 79, 88, 128, 72, 78, 85, 79, 128, 72, 78, 85, 66, 128, 72, 78, 79, 88, 128, 72, 78, 79, 84, 128, 72, 78, 79, 80, 128, 72, 78, 73, 88, 128, 72, 78, 73, 84, 128, @@ -3614,308 +3721,334 @@ static unsigned char lexicon[] = { 73, 69, 128, 72, 76, 73, 128, 72, 76, 69, 88, 128, 72, 76, 69, 80, 128, 72, 76, 69, 128, 72, 76, 65, 88, 128, 72, 76, 65, 85, 128, 72, 76, 65, 84, 128, 72, 76, 65, 80, 128, 72, 76, 65, 128, 72, 76, 128, 72, 75, 128, - 72, 73, 90, 66, 128, 72, 73, 89, 79, 128, 72, 73, 83, 84, 79, 82, 73, - 195, 72, 73, 82, 73, 81, 128, 72, 73, 71, 72, 45, 83, 80, 69, 69, 196, - 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 71, - 72, 45, 76, 79, 215, 72, 73, 71, 72, 45, 72, 69, 69, 76, 69, 196, 72, 73, - 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, 73, 79, 83, 128, 72, 73, 69, 85, - 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, 69, 85, 72, 45, 80, 73, 69, 85, - 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, 69, 85, 78, 128, 72, 73, 69, 85, - 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, 69, 85, 200, 72, 73, 69, 82, 79, - 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, 128, 72, 73, 68, 73, 78, 199, - 72, 73, 68, 69, 84, 128, 72, 73, 68, 69, 128, 72, 73, 66, 73, 83, 67, 85, - 83, 128, 72, 72, 87, 65, 128, 72, 72, 85, 128, 72, 72, 73, 128, 72, 72, - 69, 69, 128, 72, 72, 69, 128, 72, 72, 65, 65, 128, 72, 71, 128, 72, 69, - 89, 84, 128, 72, 69, 88, 73, 70, 79, 82, 205, 72, 69, 88, 65, 71, 82, 65, - 205, 72, 69, 88, 65, 71, 79, 78, 128, 72, 69, 82, 85, 84, 85, 128, 72, - 69, 82, 85, 128, 72, 69, 82, 77, 73, 84, 73, 65, 206, 72, 69, 82, 77, 73, - 79, 78, 73, 65, 206, 72, 69, 82, 77, 69, 83, 128, 72, 69, 82, 69, 128, - 72, 69, 82, 66, 128, 72, 69, 82, 65, 69, 85, 205, 72, 69, 78, 71, 128, - 72, 69, 78, 199, 72, 69, 77, 80, 128, 72, 69, 76, 77, 69, 84, 128, 72, - 69, 76, 77, 69, 212, 72, 69, 76, 205, 72, 69, 76, 73, 67, 79, 80, 84, 69, - 82, 128, 72, 69, 75, 85, 84, 65, 65, 82, 85, 128, 72, 69, 73, 83, 69, 73, + 72, 73, 90, 66, 128, 72, 73, 89, 79, 128, 72, 73, 84, 84, 73, 78, 199, + 72, 73, 83, 84, 79, 82, 73, 195, 72, 73, 82, 73, 81, 128, 72, 73, 78, 71, + 69, 68, 128, 72, 73, 78, 71, 69, 196, 72, 73, 78, 71, 69, 128, 72, 73, + 71, 72, 45, 83, 80, 69, 69, 196, 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, + 83, 69, 68, 45, 185, 72, 73, 71, 72, 45, 76, 79, 215, 72, 73, 71, 72, 45, + 72, 69, 69, 76, 69, 196, 72, 73, 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, + 73, 79, 83, 128, 72, 73, 69, 85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, + 69, 85, 72, 45, 80, 73, 69, 85, 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, + 69, 85, 78, 128, 72, 73, 69, 85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, + 69, 85, 200, 72, 73, 69, 82, 79, 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, + 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, 69, 84, 128, 72, 73, 68, 69, + 128, 72, 73, 66, 73, 83, 67, 85, 83, 128, 72, 72, 87, 65, 128, 72, 72, + 85, 128, 72, 72, 73, 128, 72, 72, 69, 69, 128, 72, 72, 69, 128, 72, 72, + 65, 65, 128, 72, 71, 128, 72, 69, 89, 84, 128, 72, 69, 88, 73, 70, 79, + 82, 205, 72, 69, 88, 65, 71, 82, 65, 205, 72, 69, 88, 65, 71, 79, 78, + 128, 72, 69, 82, 85, 84, 85, 128, 72, 69, 82, 85, 128, 72, 69, 82, 77, + 73, 84, 73, 65, 206, 72, 69, 82, 77, 73, 79, 78, 73, 65, 206, 72, 69, 82, + 77, 69, 83, 128, 72, 69, 82, 69, 128, 72, 69, 82, 66, 128, 72, 69, 82, + 65, 69, 85, 205, 72, 69, 78, 71, 128, 72, 69, 78, 199, 72, 69, 77, 80, + 128, 72, 69, 76, 77, 69, 84, 128, 72, 69, 76, 77, 69, 212, 72, 69, 76, + 205, 72, 69, 76, 73, 67, 79, 80, 84, 69, 82, 128, 72, 69, 75, 85, 84, 65, + 65, 82, 85, 128, 72, 69, 73, 83, 69, 73, 128, 72, 69, 73, 71, 72, 84, 128, 72, 69, 69, 73, 128, 72, 69, 65, 86, 89, 128, 72, 69, 65, 86, 69, 78, 76, 217, 72, 69, 65, 86, 69, 78, 128, 72, 69, 65, 86, 69, 206, 72, 69, 65, 82, 84, 83, 128, 72, 69, 65, 82, 84, 45, 83, 72, 65, 80, 69, 196, 72, 69, 65, 82, 84, 128, 72, 69, 65, 82, 212, 72, 69, 65, 82, 45, 78, 79, 45, 69, 86, 73, 204, 72, 69, 65, 68, 83, 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, 83, 84, 79, 78, 197, 72, 69, 65, 68, 80, 72, 79, 78, 69, 128, 72, - 69, 65, 68, 73, 78, 71, 128, 72, 66, 65, 83, 65, 45, 69, 83, 65, 83, 193, - 72, 66, 65, 83, 193, 72, 65, 89, 65, 78, 78, 65, 128, 72, 65, 87, 74, - 128, 72, 65, 86, 69, 128, 72, 65, 85, 80, 84, 83, 84, 73, 77, 77, 69, - 128, 72, 65, 213, 72, 65, 84, 72, 73, 128, 72, 65, 84, 69, 128, 72, 65, - 84, 67, 72, 73, 78, 199, 72, 65, 84, 65, 198, 72, 65, 83, 69, 210, 72, - 65, 83, 65, 78, 84, 65, 128, 72, 65, 82, 80, 79, 79, 78, 128, 72, 65, 82, - 80, 79, 79, 206, 72, 65, 82, 77, 79, 78, 73, 67, 128, 72, 65, 82, 75, 76, - 69, 65, 206, 72, 65, 82, 68, 78, 69, 83, 83, 128, 72, 65, 82, 196, 72, - 65, 80, 80, 217, 72, 65, 78, 85, 78, 79, 207, 72, 65, 78, 71, 90, 72, 79, - 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 211, 72, 65, 78, 68, 76, - 69, 83, 128, 72, 65, 78, 68, 76, 69, 128, 72, 65, 78, 68, 66, 65, 71, - 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 128, 72, 65, - 77, 90, 65, 128, 72, 65, 77, 90, 193, 72, 65, 77, 83, 84, 69, 210, 72, - 65, 77, 77, 69, 82, 128, 72, 65, 77, 77, 69, 210, 72, 65, 77, 66, 85, 82, - 71, 69, 82, 128, 72, 65, 76, 81, 65, 128, 72, 65, 76, 79, 128, 72, 65, - 76, 70, 45, 67, 73, 82, 67, 76, 197, 72, 65, 76, 70, 128, 72, 65, 76, 66, - 69, 82, 68, 128, 72, 65, 76, 65, 78, 84, 65, 128, 72, 65, 73, 84, 85, - 128, 72, 65, 73, 211, 72, 65, 73, 82, 67, 85, 84, 128, 72, 65, 73, 82, - 128, 72, 65, 71, 76, 65, 218, 72, 65, 71, 76, 128, 72, 65, 70, 85, 75, - 72, 65, 128, 72, 65, 70, 85, 75, 72, 128, 72, 65, 69, 71, 204, 72, 65, - 65, 82, 85, 128, 72, 65, 65, 77, 128, 72, 65, 193, 72, 65, 45, 72, 65, - 128, 72, 48, 48, 56, 128, 72, 48, 48, 55, 128, 72, 48, 48, 54, 65, 128, - 72, 48, 48, 54, 128, 72, 48, 48, 53, 128, 72, 48, 48, 52, 128, 72, 48, - 48, 51, 128, 72, 48, 48, 50, 128, 72, 48, 48, 49, 128, 72, 45, 84, 89, - 80, 197, 71, 89, 85, 128, 71, 89, 79, 78, 128, 71, 89, 79, 128, 71, 89, - 73, 128, 71, 89, 70, 213, 71, 89, 69, 69, 128, 71, 89, 65, 83, 128, 71, - 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 128, 71, 87, 85, 128, 71, 87, - 73, 128, 71, 87, 69, 69, 128, 71, 87, 69, 128, 71, 87, 65, 65, 128, 71, - 87, 65, 128, 71, 86, 65, 78, 71, 128, 71, 86, 128, 71, 85, 82, 85, 83, - 72, 128, 71, 85, 82, 85, 78, 128, 71, 85, 82, 77, 85, 75, 72, 201, 71, - 85, 82, 65, 77, 85, 84, 79, 78, 128, 71, 85, 82, 55, 128, 71, 85, 78, 85, - 128, 71, 85, 78, 213, 71, 85, 205, 71, 85, 76, 128, 71, 85, 73, 84, 65, - 82, 128, 71, 85, 199, 71, 85, 69, 73, 128, 71, 85, 69, 72, 128, 71, 85, - 69, 200, 71, 85, 68, 128, 71, 85, 196, 71, 85, 65, 82, 68, 83, 77, 65, - 78, 128, 71, 85, 65, 82, 68, 69, 68, 78, 69, 83, 83, 128, 71, 85, 65, 82, - 68, 69, 196, 71, 85, 65, 82, 68, 128, 71, 85, 65, 82, 65, 78, 201, 71, - 85, 193, 71, 85, 178, 71, 84, 69, 210, 71, 83, 85, 77, 128, 71, 83, 85, - 205, 71, 82, 213, 71, 82, 79, 87, 73, 78, 199, 71, 82, 79, 85, 78, 68, - 128, 71, 82, 79, 78, 84, 72, 73, 83, 77, 65, 84, 65, 128, 71, 82, 73, 78, - 78, 73, 78, 199, 71, 82, 73, 77, 65, 67, 73, 78, 199, 71, 82, 69, 71, 79, - 82, 73, 65, 206, 71, 82, 69, 69, 206, 71, 82, 69, 65, 84, 78, 69, 83, 83, - 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 65, 78, 128, 71, 82, 69, 65, - 84, 69, 82, 45, 84, 72, 65, 206, 71, 82, 69, 65, 84, 69, 210, 71, 82, 69, - 65, 212, 71, 82, 65, 86, 69, 89, 65, 82, 196, 71, 82, 65, 86, 69, 45, 77, - 65, 67, 82, 79, 78, 128, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 45, - 71, 82, 65, 86, 69, 128, 71, 82, 65, 86, 197, 71, 82, 65, 84, 69, 82, - 128, 71, 82, 65, 83, 83, 128, 71, 82, 65, 83, 211, 71, 82, 65, 80, 72, - 69, 77, 197, 71, 82, 65, 80, 69, 83, 128, 71, 82, 65, 77, 77, 193, 71, - 82, 65, 73, 78, 128, 71, 82, 65, 68, 85, 65, 84, 73, 79, 206, 71, 82, 65, - 67, 69, 128, 71, 82, 65, 67, 197, 71, 80, 65, 128, 71, 79, 82, 84, 72, - 77, 73, 75, 79, 206, 71, 79, 82, 84, 128, 71, 79, 82, 71, 79, 84, 69, 82, - 73, 128, 71, 79, 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 71, - 79, 82, 71, 79, 206, 71, 79, 82, 71, 73, 128, 71, 79, 82, 65, 128, 71, - 79, 79, 196, 71, 79, 78, 71, 128, 71, 79, 76, 70, 69, 82, 128, 71, 79, - 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, 78, 199, 71, 79, 66, 76, 73, - 78, 128, 71, 79, 65, 76, 128, 71, 79, 65, 204, 71, 79, 65, 128, 71, 78, - 89, 73, 83, 128, 71, 78, 65, 86, 73, 89, 65, 78, 73, 128, 71, 76, 79, 87, - 73, 78, 199, 71, 76, 79, 84, 84, 65, 204, 71, 76, 79, 66, 197, 71, 76, - 73, 83, 83, 65, 78, 68, 207, 71, 76, 69, 73, 67, 200, 71, 76, 65, 71, 79, - 76, 73, 128, 71, 76, 65, 128, 71, 74, 69, 128, 71, 73, 88, 128, 71, 73, - 84, 128, 71, 73, 83, 72, 128, 71, 73, 83, 200, 71, 73, 83, 65, 76, 128, - 71, 73, 82, 85, 68, 65, 65, 128, 71, 73, 82, 76, 211, 71, 73, 82, 76, - 128, 71, 73, 82, 51, 128, 71, 73, 82, 179, 71, 73, 82, 50, 128, 71, 73, - 82, 178, 71, 73, 80, 128, 71, 73, 78, 73, 73, 128, 71, 73, 77, 69, 76, - 128, 71, 73, 77, 69, 204, 71, 73, 77, 128, 71, 73, 71, 65, 128, 71, 73, - 71, 128, 71, 73, 69, 84, 128, 71, 73, 68, 73, 77, 128, 71, 73, 66, 66, - 79, 85, 211, 71, 73, 66, 65, 128, 71, 73, 52, 128, 71, 73, 180, 71, 72, - 90, 128, 71, 72, 87, 65, 128, 71, 72, 85, 78, 78, 65, 128, 71, 72, 85, - 78, 78, 193, 71, 72, 85, 128, 71, 72, 79, 85, 128, 71, 72, 79, 83, 84, - 128, 71, 72, 79, 128, 71, 72, 73, 77, 69, 76, 128, 71, 72, 73, 128, 71, - 72, 72, 65, 128, 71, 72, 69, 89, 83, 128, 71, 72, 69, 85, 88, 128, 71, - 72, 69, 85, 78, 128, 71, 72, 69, 85, 71, 72, 69, 85, 65, 69, 77, 128, 71, - 72, 69, 85, 71, 72, 69, 78, 128, 71, 72, 69, 85, 65, 69, 82, 65, 69, 128, - 71, 72, 69, 85, 65, 69, 71, 72, 69, 85, 65, 69, 128, 71, 72, 69, 84, 128, - 71, 72, 69, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, - 128, 71, 72, 65, 82, 65, 69, 128, 71, 72, 65, 80, 128, 71, 72, 65, 78, - 128, 71, 72, 65, 77, 77, 65, 128, 71, 72, 65, 77, 65, 76, 128, 71, 72, - 65, 73, 78, 85, 128, 71, 72, 65, 73, 78, 128, 71, 72, 65, 73, 206, 71, - 72, 65, 68, 128, 71, 72, 65, 65, 77, 65, 69, 128, 71, 72, 65, 65, 128, - 71, 71, 87, 73, 128, 71, 71, 87, 69, 69, 128, 71, 71, 87, 69, 128, 71, - 71, 87, 65, 65, 128, 71, 71, 87, 65, 128, 71, 71, 85, 88, 128, 71, 71, - 85, 84, 128, 71, 71, 85, 82, 88, 128, 71, 71, 85, 82, 128, 71, 71, 85, - 79, 88, 128, 71, 71, 85, 79, 84, 128, 71, 71, 85, 79, 80, 128, 71, 71, - 85, 79, 128, 71, 71, 79, 88, 128, 71, 71, 79, 84, 128, 71, 71, 79, 80, - 128, 71, 71, 73, 88, 128, 71, 71, 73, 84, 128, 71, 71, 73, 69, 88, 128, - 71, 71, 73, 69, 80, 128, 71, 71, 73, 69, 128, 71, 71, 69, 88, 128, 71, - 71, 69, 84, 128, 71, 71, 69, 80, 128, 71, 71, 65, 88, 128, 71, 71, 65, - 84, 128, 71, 69, 84, 193, 71, 69, 83, 84, 85, 82, 69, 128, 71, 69, 83, - 72, 85, 128, 71, 69, 83, 72, 84, 73, 78, 128, 71, 69, 83, 72, 84, 73, - 206, 71, 69, 83, 72, 50, 128, 71, 69, 82, 83, 72, 65, 89, 73, 77, 128, - 71, 69, 82, 77, 65, 206, 71, 69, 82, 69, 83, 72, 128, 71, 69, 82, 69, 83, - 200, 71, 69, 79, 77, 69, 84, 82, 73, 67, 65, 76, 76, 217, 71, 69, 79, 77, - 69, 84, 82, 73, 195, 71, 69, 78, 84, 76, 197, 71, 69, 78, 73, 84, 73, 86, - 69, 128, 71, 69, 78, 73, 75, 201, 71, 69, 78, 69, 82, 73, 195, 71, 69, - 77, 73, 78, 73, 128, 71, 69, 77, 73, 78, 65, 84, 73, 79, 206, 71, 69, - 205, 71, 69, 69, 77, 128, 71, 69, 68, 79, 76, 65, 128, 71, 69, 68, 69, - 128, 71, 69, 66, 207, 71, 69, 66, 193, 71, 69, 65, 82, 128, 71, 69, 65, - 210, 71, 69, 50, 50, 128, 71, 68, 65, 78, 128, 71, 67, 73, 71, 128, 71, - 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 73, 69, 197, 71, 66, 69, 85, - 88, 128, 71, 66, 69, 84, 128, 71, 66, 65, 89, 73, 128, 71, 66, 65, 75, - 85, 82, 85, 78, 69, 78, 128, 71, 66, 128, 71, 65, 89, 65, 78, 85, 75, 73, - 84, 84, 65, 128, 71, 65, 89, 65, 78, 78, 65, 128, 71, 65, 89, 128, 71, - 65, 85, 78, 84, 76, 69, 84, 128, 71, 65, 84, 72, 69, 82, 73, 78, 71, 128, - 71, 65, 84, 72, 69, 82, 73, 78, 199, 71, 65, 84, 69, 128, 71, 65, 83, 72, - 65, 78, 128, 71, 65, 82, 83, 72, 85, 78, 73, 128, 71, 65, 82, 79, 78, - 128, 71, 65, 82, 77, 69, 78, 84, 128, 71, 65, 82, 68, 69, 78, 128, 71, - 65, 82, 51, 128, 71, 65, 80, 80, 69, 196, 71, 65, 208, 71, 65, 78, 77, - 65, 128, 71, 65, 78, 71, 73, 65, 128, 71, 65, 78, 68, 193, 71, 65, 78, - 50, 128, 71, 65, 78, 178, 71, 65, 77, 77, 65, 128, 71, 65, 77, 76, 65, - 128, 71, 65, 77, 76, 128, 71, 65, 77, 69, 128, 71, 65, 77, 197, 71, 65, - 77, 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, - 71, 128, 71, 65, 70, 128, 71, 65, 198, 71, 65, 69, 84, 84, 65, 45, 80, - 73, 76, 76, 65, 128, 71, 65, 68, 79, 76, 128, 71, 65, 68, 128, 71, 65, - 196, 71, 65, 66, 65, 128, 71, 65, 66, 193, 71, 65, 65, 70, 85, 128, 71, - 65, 178, 71, 48, 53, 52, 128, 71, 48, 53, 51, 128, 71, 48, 53, 50, 128, - 71, 48, 53, 49, 128, 71, 48, 53, 48, 128, 71, 48, 52, 57, 128, 71, 48, - 52, 56, 128, 71, 48, 52, 55, 128, 71, 48, 52, 54, 128, 71, 48, 52, 53, - 65, 128, 71, 48, 52, 53, 128, 71, 48, 52, 52, 128, 71, 48, 52, 51, 65, - 128, 71, 48, 52, 51, 128, 71, 48, 52, 50, 128, 71, 48, 52, 49, 128, 71, - 48, 52, 48, 128, 71, 48, 51, 57, 128, 71, 48, 51, 56, 128, 71, 48, 51, - 55, 65, 128, 71, 48, 51, 55, 128, 71, 48, 51, 54, 65, 128, 71, 48, 51, - 54, 128, 71, 48, 51, 53, 128, 71, 48, 51, 52, 128, 71, 48, 51, 51, 128, - 71, 48, 51, 50, 128, 71, 48, 51, 49, 128, 71, 48, 51, 48, 128, 71, 48, - 50, 57, 128, 71, 48, 50, 56, 128, 71, 48, 50, 55, 128, 71, 48, 50, 54, - 65, 128, 71, 48, 50, 54, 128, 71, 48, 50, 53, 128, 71, 48, 50, 52, 128, - 71, 48, 50, 51, 128, 71, 48, 50, 50, 128, 71, 48, 50, 49, 128, 71, 48, - 50, 48, 65, 128, 71, 48, 50, 48, 128, 71, 48, 49, 57, 128, 71, 48, 49, - 56, 128, 71, 48, 49, 55, 128, 71, 48, 49, 54, 128, 71, 48, 49, 53, 128, - 71, 48, 49, 52, 128, 71, 48, 49, 51, 128, 71, 48, 49, 50, 128, 71, 48, - 49, 49, 65, 128, 71, 48, 49, 49, 128, 71, 48, 49, 48, 128, 71, 48, 48, - 57, 128, 71, 48, 48, 56, 128, 71, 48, 48, 55, 66, 128, 71, 48, 48, 55, - 65, 128, 71, 48, 48, 55, 128, 71, 48, 48, 54, 65, 128, 71, 48, 48, 54, - 128, 71, 48, 48, 53, 128, 71, 48, 48, 52, 128, 71, 48, 48, 51, 128, 71, - 48, 48, 50, 128, 71, 48, 48, 49, 128, 70, 89, 88, 128, 70, 89, 84, 128, - 70, 89, 80, 128, 70, 89, 65, 128, 70, 87, 73, 128, 70, 87, 69, 69, 128, - 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, 128, 70, 86, 83, 51, - 128, 70, 86, 83, 50, 128, 70, 86, 83, 49, 128, 70, 85, 88, 128, 70, 85, - 84, 128, 70, 85, 83, 69, 128, 70, 85, 83, 193, 70, 85, 82, 88, 128, 70, - 85, 80, 128, 70, 85, 78, 69, 82, 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, - 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 128, 70, 85, 76, 76, 78, 69, 83, - 83, 128, 70, 85, 76, 204, 70, 85, 74, 73, 128, 70, 85, 69, 84, 128, 70, - 85, 69, 204, 70, 85, 69, 128, 70, 85, 65, 128, 70, 84, 72, 79, 82, 193, - 70, 83, 73, 128, 70, 82, 79, 87, 78, 73, 78, 71, 128, 70, 82, 79, 87, 78, - 73, 78, 199, 70, 82, 79, 87, 78, 128, 70, 82, 79, 78, 84, 45, 84, 73, 76, - 84, 69, 196, 70, 82, 79, 78, 84, 45, 70, 65, 67, 73, 78, 199, 70, 82, 79, - 205, 70, 82, 79, 71, 128, 70, 82, 79, 199, 70, 82, 73, 84, 85, 128, 70, - 82, 73, 69, 83, 128, 70, 82, 73, 69, 196, 70, 82, 73, 67, 65, 84, 73, 86, - 69, 128, 70, 82, 69, 84, 66, 79, 65, 82, 68, 128, 70, 82, 69, 78, 67, - 200, 70, 82, 69, 69, 128, 70, 82, 69, 197, 70, 82, 65, 78, 75, 211, 70, - 82, 65, 78, 195, 70, 82, 65, 77, 69, 83, 128, 70, 82, 65, 77, 69, 128, - 70, 82, 65, 77, 197, 70, 82, 65, 71, 82, 65, 78, 84, 128, 70, 82, 65, 71, - 77, 69, 78, 84, 128, 70, 82, 65, 67, 84, 73, 79, 206, 70, 79, 88, 128, - 70, 79, 85, 82, 84, 69, 69, 78, 128, 70, 79, 85, 82, 84, 69, 69, 206, 70, - 79, 85, 82, 45, 84, 72, 73, 82, 84, 89, 128, 70, 79, 85, 82, 45, 83, 84, - 82, 73, 78, 199, 70, 79, 85, 82, 45, 80, 69, 82, 45, 69, 205, 70, 79, 85, - 82, 45, 76, 73, 78, 197, 70, 79, 85, 210, 70, 79, 85, 78, 84, 65, 73, 78, - 128, 70, 79, 85, 78, 84, 65, 73, 206, 70, 79, 83, 84, 69, 82, 73, 78, 71, - 128, 70, 79, 82, 87, 65, 82, 68, 128, 70, 79, 82, 84, 89, 128, 70, 79, - 82, 84, 217, 70, 79, 82, 84, 69, 128, 70, 79, 82, 77, 211, 70, 79, 82, - 77, 65, 84, 84, 73, 78, 71, 128, 70, 79, 82, 77, 65, 212, 70, 79, 82, 75, - 69, 196, 70, 79, 82, 67, 69, 83, 128, 70, 79, 82, 67, 69, 128, 70, 79, - 80, 128, 70, 79, 79, 84, 83, 84, 79, 79, 76, 128, 70, 79, 79, 84, 80, 82, - 73, 78, 84, 83, 128, 70, 79, 79, 84, 78, 79, 84, 197, 70, 79, 79, 84, 66, - 65, 76, 76, 128, 70, 79, 79, 84, 128, 70, 79, 79, 76, 128, 70, 79, 79, - 68, 128, 70, 79, 79, 128, 70, 79, 78, 212, 70, 79, 78, 71, 77, 65, 78, - 128, 70, 79, 77, 128, 70, 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, - 73, 78, 71, 128, 70, 79, 76, 68, 69, 82, 128, 70, 79, 76, 68, 69, 196, - 70, 79, 71, 71, 89, 128, 70, 79, 71, 128, 70, 207, 70, 77, 128, 70, 76, - 89, 73, 78, 199, 70, 76, 89, 128, 70, 76, 85, 84, 84, 69, 82, 73, 78, - 199, 70, 76, 85, 84, 69, 128, 70, 76, 85, 83, 72, 69, 196, 70, 76, 79, - 87, 73, 78, 199, 70, 76, 79, 87, 69, 82, 83, 128, 70, 76, 79, 87, 69, - 210, 70, 76, 79, 85, 82, 73, 83, 72, 128, 70, 76, 79, 82, 69, 84, 84, 69, - 128, 70, 76, 79, 82, 65, 204, 70, 76, 79, 80, 80, 217, 70, 76, 79, 79, - 82, 128, 70, 76, 73, 80, 128, 70, 76, 73, 71, 72, 84, 128, 70, 76, 69, - 88, 85, 83, 128, 70, 76, 69, 88, 69, 196, 70, 76, 69, 85, 82, 79, 78, - 128, 70, 76, 69, 85, 82, 45, 68, 69, 45, 76, 73, 83, 128, 70, 76, 65, 84, - 84, 69, 78, 69, 196, 70, 76, 65, 84, 78, 69, 83, 83, 128, 70, 76, 65, 84, - 128, 70, 76, 65, 212, 70, 76, 65, 83, 72, 128, 70, 76, 65, 71, 83, 128, - 70, 76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45, 52, 128, 70, 76, 65, 71, - 45, 51, 128, 70, 76, 65, 71, 45, 50, 128, 70, 76, 65, 71, 45, 49, 128, - 70, 76, 65, 71, 128, 70, 76, 65, 199, 70, 76, 65, 128, 70, 76, 128, 70, - 73, 88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 88, 128, 70, 73, 86, 69, 45, - 84, 72, 73, 82, 84, 89, 128, 70, 73, 86, 69, 45, 76, 73, 78, 197, 70, 73, - 86, 197, 70, 73, 84, 65, 128, 70, 73, 84, 128, 70, 73, 83, 84, 69, 196, - 70, 73, 83, 84, 128, 70, 73, 83, 72, 73, 78, 199, 70, 73, 83, 72, 72, 79, - 79, 75, 128, 70, 73, 83, 72, 72, 79, 79, 203, 70, 73, 83, 72, 69, 89, 69, - 128, 70, 73, 83, 72, 128, 70, 73, 83, 200, 70, 73, 82, 83, 212, 70, 73, - 82, 73, 128, 70, 73, 82, 69, 87, 79, 82, 75, 83, 128, 70, 73, 82, 69, 87, - 79, 82, 203, 70, 73, 82, 69, 128, 70, 73, 82, 197, 70, 73, 80, 128, 70, - 73, 78, 73, 84, 197, 70, 73, 78, 71, 69, 82, 83, 128, 70, 73, 78, 71, 69, - 82, 211, 70, 73, 78, 71, 69, 82, 78, 65, 73, 76, 83, 128, 70, 73, 78, 71, - 69, 82, 69, 196, 70, 73, 78, 71, 69, 82, 45, 80, 79, 83, 212, 70, 73, 78, - 71, 69, 210, 70, 73, 78, 65, 78, 67, 73, 65, 76, 128, 70, 73, 78, 65, 76, + 69, 65, 68, 73, 78, 71, 128, 72, 69, 65, 68, 45, 66, 65, 78, 68, 65, 71, + 69, 128, 72, 66, 65, 83, 65, 45, 69, 83, 65, 83, 193, 72, 66, 65, 83, + 193, 72, 65, 89, 65, 78, 78, 65, 128, 72, 65, 87, 74, 128, 72, 65, 86, + 69, 128, 72, 65, 85, 80, 84, 83, 84, 73, 77, 77, 69, 128, 72, 65, 213, + 72, 65, 84, 82, 65, 206, 72, 65, 84, 72, 73, 128, 72, 65, 84, 69, 128, + 72, 65, 84, 67, 72, 73, 78, 199, 72, 65, 84, 65, 198, 72, 65, 83, 69, + 210, 72, 65, 83, 65, 78, 84, 65, 128, 72, 65, 82, 80, 79, 79, 78, 128, + 72, 65, 82, 80, 79, 79, 206, 72, 65, 82, 77, 79, 78, 73, 67, 128, 72, 65, + 82, 75, 76, 69, 65, 206, 72, 65, 82, 68, 78, 69, 83, 83, 128, 72, 65, 82, + 196, 72, 65, 80, 80, 217, 72, 65, 78, 85, 78, 79, 207, 72, 65, 78, 71, + 90, 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 211, 72, 65, + 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 76, 69, 128, 72, 65, 78, 68, 66, + 65, 71, 128, 72, 65, 78, 68, 45, 79, 86, 65, 76, 128, 72, 65, 78, 68, 45, + 79, 86, 65, 204, 72, 65, 78, 68, 45, 72, 79, 79, 75, 128, 72, 65, 78, 68, + 45, 72, 79, 79, 203, 72, 65, 78, 68, 45, 72, 73, 78, 71, 69, 128, 72, 65, + 78, 68, 45, 72, 73, 78, 71, 197, 72, 65, 78, 68, 45, 70, 76, 65, 84, 128, + 72, 65, 78, 68, 45, 70, 76, 65, 212, 72, 65, 78, 68, 45, 70, 73, 83, 84, + 128, 72, 65, 78, 68, 45, 67, 85, 82, 76, 73, 67, 85, 69, 128, 72, 65, 78, + 68, 45, 67, 85, 82, 76, 73, 67, 85, 197, 72, 65, 78, 68, 45, 67, 85, 80, + 128, 72, 65, 78, 68, 45, 67, 85, 208, 72, 65, 78, 68, 45, 67, 76, 65, 87, + 128, 72, 65, 78, 68, 45, 67, 76, 65, 215, 72, 65, 78, 68, 45, 67, 73, 82, + 67, 76, 69, 128, 72, 65, 78, 68, 45, 67, 73, 82, 67, 76, 197, 72, 65, 78, + 68, 45, 65, 78, 71, 76, 69, 128, 72, 65, 78, 68, 45, 65, 78, 71, 76, 197, + 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 128, 72, 65, 77, 90, + 65, 128, 72, 65, 77, 90, 193, 72, 65, 77, 83, 84, 69, 210, 72, 65, 77, + 77, 69, 82, 128, 72, 65, 77, 77, 69, 210, 72, 65, 77, 66, 85, 82, 71, 69, + 82, 128, 72, 65, 76, 81, 65, 128, 72, 65, 76, 79, 128, 72, 65, 76, 70, + 45, 67, 73, 82, 67, 76, 197, 72, 65, 76, 70, 128, 72, 65, 76, 66, 69, 82, + 68, 128, 72, 65, 76, 65, 78, 84, 65, 128, 72, 65, 73, 84, 85, 128, 72, + 65, 73, 211, 72, 65, 73, 82, 67, 85, 84, 128, 72, 65, 73, 82, 128, 72, + 65, 71, 76, 65, 218, 72, 65, 71, 76, 128, 72, 65, 70, 85, 75, 72, 65, + 128, 72, 65, 70, 85, 75, 72, 128, 72, 65, 69, 71, 204, 72, 65, 65, 82, + 85, 128, 72, 65, 65, 77, 128, 72, 65, 193, 72, 65, 45, 72, 65, 128, 72, + 48, 48, 56, 128, 72, 48, 48, 55, 128, 72, 48, 48, 54, 65, 128, 72, 48, + 48, 54, 128, 72, 48, 48, 53, 128, 72, 48, 48, 52, 128, 72, 48, 48, 51, + 128, 72, 48, 48, 50, 128, 72, 48, 48, 49, 128, 72, 45, 84, 89, 80, 197, + 71, 89, 85, 128, 71, 89, 79, 78, 128, 71, 89, 79, 128, 71, 89, 73, 128, + 71, 89, 70, 213, 71, 89, 69, 69, 128, 71, 89, 65, 83, 128, 71, 89, 65, + 65, 128, 71, 89, 65, 128, 71, 89, 128, 71, 87, 85, 128, 71, 87, 73, 128, + 71, 87, 69, 69, 128, 71, 87, 69, 128, 71, 87, 65, 65, 128, 71, 87, 65, + 128, 71, 86, 65, 78, 71, 128, 71, 86, 128, 71, 85, 82, 85, 83, 72, 128, + 71, 85, 82, 85, 78, 128, 71, 85, 82, 77, 85, 75, 72, 201, 71, 85, 82, 65, + 77, 85, 84, 79, 78, 128, 71, 85, 82, 55, 128, 71, 85, 78, 85, 128, 71, + 85, 78, 213, 71, 85, 205, 71, 85, 76, 128, 71, 85, 74, 65, 82, 65, 84, + 201, 71, 85, 73, 84, 65, 82, 128, 71, 85, 199, 71, 85, 69, 73, 128, 71, + 85, 69, 72, 128, 71, 85, 69, 200, 71, 85, 68, 128, 71, 85, 196, 71, 85, + 65, 82, 68, 83, 77, 65, 78, 128, 71, 85, 65, 82, 68, 69, 68, 78, 69, 83, + 83, 128, 71, 85, 65, 82, 68, 69, 196, 71, 85, 65, 82, 68, 128, 71, 85, + 65, 82, 65, 78, 201, 71, 85, 193, 71, 85, 178, 71, 84, 69, 210, 71, 83, + 85, 77, 128, 71, 83, 85, 205, 71, 82, 213, 71, 82, 79, 87, 73, 78, 199, + 71, 82, 79, 85, 78, 68, 128, 71, 82, 79, 78, 84, 72, 73, 83, 77, 65, 84, + 65, 128, 71, 82, 73, 78, 78, 73, 78, 199, 71, 82, 73, 77, 65, 67, 73, 78, + 199, 71, 82, 69, 71, 79, 82, 73, 65, 206, 71, 82, 69, 69, 206, 71, 82, + 69, 65, 84, 78, 69, 83, 83, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, + 65, 78, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 65, 206, 71, 82, 69, + 65, 84, 69, 210, 71, 82, 69, 65, 212, 71, 82, 65, 86, 69, 89, 65, 82, + 196, 71, 82, 65, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 71, 82, 65, 86, + 69, 45, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, 128, 71, 82, 65, 86, + 197, 71, 82, 65, 84, 69, 82, 128, 71, 82, 65, 83, 83, 128, 71, 82, 65, + 83, 211, 71, 82, 65, 83, 208, 71, 82, 65, 80, 72, 69, 77, 197, 71, 82, + 65, 80, 69, 83, 128, 71, 82, 65, 78, 84, 72, 193, 71, 82, 65, 77, 77, + 193, 71, 82, 65, 73, 78, 128, 71, 82, 65, 68, 85, 65, 84, 73, 79, 206, + 71, 82, 65, 68, 85, 65, 76, 128, 71, 82, 65, 67, 69, 128, 71, 82, 65, 67, + 197, 71, 80, 65, 128, 71, 79, 82, 84, 72, 77, 73, 75, 79, 206, 71, 79, + 82, 84, 128, 71, 79, 82, 71, 79, 84, 69, 82, 73, 128, 71, 79, 82, 71, 79, + 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 71, 79, 82, 71, 79, 206, 71, 79, + 82, 71, 73, 128, 71, 79, 82, 65, 128, 71, 79, 79, 196, 71, 79, 78, 71, + 128, 71, 79, 76, 70, 69, 82, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, + 71, 79, 73, 78, 199, 71, 79, 66, 76, 73, 78, 128, 71, 79, 65, 76, 128, + 71, 79, 65, 204, 71, 79, 65, 128, 71, 78, 89, 73, 83, 128, 71, 78, 65, + 86, 73, 89, 65, 78, 73, 128, 71, 76, 79, 87, 73, 78, 199, 71, 76, 79, 84, + 84, 65, 204, 71, 76, 79, 66, 197, 71, 76, 73, 83, 83, 65, 78, 68, 207, + 71, 76, 69, 73, 67, 200, 71, 76, 65, 71, 79, 76, 73, 128, 71, 76, 65, + 128, 71, 74, 69, 128, 71, 73, 88, 128, 71, 73, 84, 128, 71, 73, 83, 72, + 128, 71, 73, 83, 200, 71, 73, 83, 65, 76, 128, 71, 73, 82, 85, 68, 65, + 65, 128, 71, 73, 82, 76, 211, 71, 73, 82, 76, 128, 71, 73, 82, 51, 128, + 71, 73, 82, 179, 71, 73, 82, 50, 128, 71, 73, 82, 178, 71, 73, 80, 128, + 71, 73, 78, 73, 73, 128, 71, 73, 77, 69, 76, 128, 71, 73, 77, 69, 204, + 71, 73, 77, 128, 71, 73, 71, 65, 128, 71, 73, 71, 128, 71, 73, 69, 84, + 128, 71, 73, 68, 73, 77, 128, 71, 73, 66, 66, 79, 85, 211, 71, 73, 66, + 65, 128, 71, 73, 52, 128, 71, 73, 180, 71, 72, 90, 128, 71, 72, 87, 65, + 128, 71, 72, 85, 78, 78, 65, 128, 71, 72, 85, 78, 78, 193, 71, 72, 85, + 128, 71, 72, 79, 85, 128, 71, 72, 79, 83, 84, 128, 71, 72, 79, 128, 71, + 72, 73, 77, 69, 76, 128, 71, 72, 73, 128, 71, 72, 72, 65, 128, 71, 72, + 69, 89, 83, 128, 71, 72, 69, 85, 88, 128, 71, 72, 69, 85, 78, 128, 71, + 72, 69, 85, 71, 72, 69, 85, 65, 69, 77, 128, 71, 72, 69, 85, 71, 72, 69, + 78, 128, 71, 72, 69, 85, 65, 69, 82, 65, 69, 128, 71, 72, 69, 85, 65, 69, + 71, 72, 69, 85, 65, 69, 128, 71, 72, 69, 84, 128, 71, 72, 69, 69, 128, + 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 128, 71, 72, 65, 82, + 65, 69, 128, 71, 72, 65, 80, 128, 71, 72, 65, 78, 128, 71, 72, 65, 77, + 77, 65, 128, 71, 72, 65, 77, 65, 76, 128, 71, 72, 65, 73, 78, 85, 128, + 71, 72, 65, 73, 78, 128, 71, 72, 65, 73, 206, 71, 72, 65, 68, 128, 71, + 72, 65, 65, 77, 65, 69, 128, 71, 72, 65, 65, 128, 71, 71, 87, 73, 128, + 71, 71, 87, 69, 69, 128, 71, 71, 87, 69, 128, 71, 71, 87, 65, 65, 128, + 71, 71, 87, 65, 128, 71, 71, 85, 88, 128, 71, 71, 85, 84, 128, 71, 71, + 85, 82, 88, 128, 71, 71, 85, 82, 128, 71, 71, 85, 79, 88, 128, 71, 71, + 85, 79, 84, 128, 71, 71, 85, 79, 80, 128, 71, 71, 85, 79, 128, 71, 71, + 79, 88, 128, 71, 71, 79, 84, 128, 71, 71, 79, 80, 128, 71, 71, 73, 88, + 128, 71, 71, 73, 84, 128, 71, 71, 73, 69, 88, 128, 71, 71, 73, 69, 80, + 128, 71, 71, 73, 69, 128, 71, 71, 69, 88, 128, 71, 71, 69, 84, 128, 71, + 71, 69, 80, 128, 71, 71, 65, 88, 128, 71, 71, 65, 84, 128, 71, 69, 84, + 193, 71, 69, 83, 84, 85, 82, 69, 128, 71, 69, 83, 72, 85, 128, 71, 69, + 83, 72, 84, 73, 78, 128, 71, 69, 83, 72, 84, 73, 206, 71, 69, 83, 72, 50, + 128, 71, 69, 82, 83, 72, 65, 89, 73, 77, 128, 71, 69, 82, 77, 65, 206, + 71, 69, 82, 69, 83, 72, 128, 71, 69, 82, 69, 83, 200, 71, 69, 79, 77, 69, + 84, 82, 73, 67, 65, 76, 76, 217, 71, 69, 79, 77, 69, 84, 82, 73, 195, 71, + 69, 78, 84, 76, 197, 71, 69, 78, 73, 84, 73, 86, 69, 128, 71, 69, 78, 73, + 75, 201, 71, 69, 78, 69, 82, 73, 195, 71, 69, 77, 73, 78, 73, 128, 71, + 69, 77, 73, 78, 65, 84, 73, 79, 206, 71, 69, 205, 71, 69, 69, 77, 128, + 71, 69, 68, 79, 76, 65, 128, 71, 69, 68, 69, 128, 71, 69, 66, 207, 71, + 69, 66, 193, 71, 69, 65, 82, 128, 71, 69, 65, 210, 71, 69, 50, 50, 128, + 71, 68, 65, 78, 128, 71, 67, 73, 71, 128, 71, 67, 65, 206, 71, 66, 79, + 78, 128, 71, 66, 73, 69, 197, 71, 66, 69, 85, 88, 128, 71, 66, 69, 84, + 128, 71, 66, 65, 89, 73, 128, 71, 66, 65, 75, 85, 82, 85, 78, 69, 78, + 128, 71, 66, 128, 71, 65, 89, 65, 78, 85, 75, 73, 84, 84, 65, 128, 71, + 65, 89, 65, 78, 78, 65, 128, 71, 65, 89, 128, 71, 65, 85, 78, 84, 76, 69, + 84, 128, 71, 65, 84, 72, 69, 82, 73, 78, 71, 128, 71, 65, 84, 72, 69, 82, + 73, 78, 199, 71, 65, 84, 69, 128, 71, 65, 83, 72, 65, 78, 128, 71, 65, + 82, 83, 72, 85, 78, 73, 128, 71, 65, 82, 79, 78, 128, 71, 65, 82, 77, 69, + 78, 84, 128, 71, 65, 82, 68, 69, 78, 128, 71, 65, 82, 51, 128, 71, 65, + 80, 80, 69, 196, 71, 65, 208, 71, 65, 78, 77, 65, 128, 71, 65, 78, 71, + 73, 65, 128, 71, 65, 78, 68, 193, 71, 65, 78, 50, 128, 71, 65, 78, 178, + 71, 65, 77, 77, 65, 128, 71, 65, 77, 76, 65, 128, 71, 65, 77, 76, 128, + 71, 65, 77, 69, 128, 71, 65, 77, 197, 71, 65, 77, 65, 78, 128, 71, 65, + 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, 71, 128, 71, 65, 70, 128, + 71, 65, 198, 71, 65, 69, 84, 84, 65, 45, 80, 73, 76, 76, 65, 128, 71, 65, + 68, 79, 76, 128, 71, 65, 68, 128, 71, 65, 196, 71, 65, 66, 65, 128, 71, + 65, 66, 193, 71, 65, 65, 70, 85, 128, 71, 65, 178, 71, 48, 53, 52, 128, + 71, 48, 53, 51, 128, 71, 48, 53, 50, 128, 71, 48, 53, 49, 128, 71, 48, + 53, 48, 128, 71, 48, 52, 57, 128, 71, 48, 52, 56, 128, 71, 48, 52, 55, + 128, 71, 48, 52, 54, 128, 71, 48, 52, 53, 65, 128, 71, 48, 52, 53, 128, + 71, 48, 52, 52, 128, 71, 48, 52, 51, 65, 128, 71, 48, 52, 51, 128, 71, + 48, 52, 50, 128, 71, 48, 52, 49, 128, 71, 48, 52, 48, 128, 71, 48, 51, + 57, 128, 71, 48, 51, 56, 128, 71, 48, 51, 55, 65, 128, 71, 48, 51, 55, + 128, 71, 48, 51, 54, 65, 128, 71, 48, 51, 54, 128, 71, 48, 51, 53, 128, + 71, 48, 51, 52, 128, 71, 48, 51, 51, 128, 71, 48, 51, 50, 128, 71, 48, + 51, 49, 128, 71, 48, 51, 48, 128, 71, 48, 50, 57, 128, 71, 48, 50, 56, + 128, 71, 48, 50, 55, 128, 71, 48, 50, 54, 65, 128, 71, 48, 50, 54, 128, + 71, 48, 50, 53, 128, 71, 48, 50, 52, 128, 71, 48, 50, 51, 128, 71, 48, + 50, 50, 128, 71, 48, 50, 49, 128, 71, 48, 50, 48, 65, 128, 71, 48, 50, + 48, 128, 71, 48, 49, 57, 128, 71, 48, 49, 56, 128, 71, 48, 49, 55, 128, + 71, 48, 49, 54, 128, 71, 48, 49, 53, 128, 71, 48, 49, 52, 128, 71, 48, + 49, 51, 128, 71, 48, 49, 50, 128, 71, 48, 49, 49, 65, 128, 71, 48, 49, + 49, 128, 71, 48, 49, 48, 128, 71, 48, 48, 57, 128, 71, 48, 48, 56, 128, + 71, 48, 48, 55, 66, 128, 71, 48, 48, 55, 65, 128, 71, 48, 48, 55, 128, + 71, 48, 48, 54, 65, 128, 71, 48, 48, 54, 128, 71, 48, 48, 53, 128, 71, + 48, 48, 52, 128, 71, 48, 48, 51, 128, 71, 48, 48, 50, 128, 71, 48, 48, + 49, 128, 70, 89, 88, 128, 70, 89, 84, 128, 70, 89, 80, 128, 70, 89, 65, + 128, 70, 87, 73, 128, 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, + 65, 128, 70, 87, 65, 128, 70, 86, 83, 51, 128, 70, 86, 83, 50, 128, 70, + 86, 83, 49, 128, 70, 85, 88, 128, 70, 85, 84, 128, 70, 85, 83, 69, 128, + 70, 85, 83, 193, 70, 85, 82, 88, 128, 70, 85, 80, 128, 70, 85, 78, 69, + 82, 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 65, 204, 70, 85, 78, 67, 84, + 73, 79, 78, 128, 70, 85, 76, 76, 78, 69, 83, 83, 128, 70, 85, 76, 204, + 70, 85, 74, 73, 128, 70, 85, 69, 84, 128, 70, 85, 69, 204, 70, 85, 69, + 128, 70, 85, 65, 128, 70, 84, 72, 79, 82, 193, 70, 83, 73, 128, 70, 82, + 79, 87, 78, 73, 78, 71, 128, 70, 82, 79, 87, 78, 73, 78, 199, 70, 82, 79, + 87, 78, 128, 70, 82, 79, 87, 206, 70, 82, 79, 78, 84, 45, 84, 73, 76, 84, + 69, 196, 70, 82, 79, 78, 84, 45, 70, 65, 67, 73, 78, 199, 70, 82, 79, 78, + 212, 70, 82, 79, 205, 70, 82, 79, 71, 128, 70, 82, 79, 199, 70, 82, 73, + 84, 85, 128, 70, 82, 73, 69, 83, 128, 70, 82, 73, 69, 196, 70, 82, 73, + 67, 65, 84, 73, 86, 69, 128, 70, 82, 69, 84, 66, 79, 65, 82, 68, 128, 70, + 82, 69, 78, 67, 200, 70, 82, 69, 69, 128, 70, 82, 69, 197, 70, 82, 65, + 78, 75, 211, 70, 82, 65, 78, 195, 70, 82, 65, 77, 69, 83, 128, 70, 82, + 65, 77, 69, 128, 70, 82, 65, 77, 197, 70, 82, 65, 71, 82, 65, 78, 84, + 128, 70, 82, 65, 71, 77, 69, 78, 84, 128, 70, 82, 65, 67, 84, 73, 79, + 206, 70, 79, 88, 128, 70, 79, 85, 82, 84, 69, 69, 78, 128, 70, 79, 85, + 82, 84, 69, 69, 206, 70, 79, 85, 82, 45, 84, 72, 73, 82, 84, 89, 128, 70, + 79, 85, 82, 45, 83, 84, 82, 73, 78, 199, 70, 79, 85, 82, 45, 80, 69, 82, + 45, 69, 205, 70, 79, 85, 82, 45, 76, 73, 78, 197, 70, 79, 85, 210, 70, + 79, 85, 78, 84, 65, 73, 78, 128, 70, 79, 85, 78, 84, 65, 73, 206, 70, 79, + 83, 84, 69, 82, 73, 78, 71, 128, 70, 79, 82, 87, 65, 82, 68, 128, 70, 79, + 82, 87, 65, 82, 196, 70, 79, 82, 84, 89, 128, 70, 79, 82, 84, 217, 70, + 79, 82, 84, 69, 128, 70, 79, 82, 77, 211, 70, 79, 82, 77, 65, 84, 84, 73, + 78, 71, 128, 70, 79, 82, 77, 65, 212, 70, 79, 82, 75, 69, 196, 70, 79, + 82, 69, 72, 69, 65, 196, 70, 79, 82, 67, 69, 83, 128, 70, 79, 82, 67, 69, + 128, 70, 79, 80, 128, 70, 79, 79, 84, 83, 84, 79, 79, 76, 128, 70, 79, + 79, 84, 80, 82, 73, 78, 84, 83, 128, 70, 79, 79, 84, 78, 79, 84, 197, 70, + 79, 79, 84, 66, 65, 76, 76, 128, 70, 79, 79, 84, 128, 70, 79, 79, 76, + 128, 70, 79, 79, 68, 128, 70, 79, 79, 128, 70, 79, 78, 212, 70, 79, 78, + 71, 77, 65, 78, 128, 70, 79, 77, 128, 70, 79, 76, 76, 89, 128, 70, 79, + 76, 76, 79, 87, 73, 78, 71, 128, 70, 79, 76, 68, 69, 82, 128, 70, 79, 76, + 68, 69, 196, 70, 79, 71, 71, 89, 128, 70, 79, 71, 128, 70, 207, 70, 77, + 128, 70, 76, 89, 73, 78, 199, 70, 76, 89, 128, 70, 76, 85, 84, 84, 69, + 82, 73, 78, 71, 128, 70, 76, 85, 84, 84, 69, 82, 73, 78, 199, 70, 76, 85, + 84, 69, 128, 70, 76, 85, 83, 72, 69, 196, 70, 76, 79, 87, 73, 78, 199, + 70, 76, 79, 87, 69, 82, 83, 128, 70, 76, 79, 87, 69, 210, 70, 76, 79, 85, + 82, 73, 83, 72, 128, 70, 76, 79, 82, 69, 84, 84, 69, 128, 70, 76, 79, 82, + 65, 204, 70, 76, 79, 80, 80, 217, 70, 76, 79, 79, 82, 128, 70, 76, 79, + 79, 210, 70, 76, 73, 80, 128, 70, 76, 73, 71, 72, 84, 128, 70, 76, 73, + 67, 203, 70, 76, 69, 88, 85, 83, 128, 70, 76, 69, 88, 69, 196, 70, 76, + 69, 88, 128, 70, 76, 69, 85, 82, 79, 78, 128, 70, 76, 69, 85, 82, 45, 68, + 69, 45, 76, 73, 83, 128, 70, 76, 65, 84, 84, 69, 78, 69, 196, 70, 76, 65, + 84, 78, 69, 83, 83, 128, 70, 76, 65, 83, 72, 128, 70, 76, 65, 71, 83, + 128, 70, 76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45, 52, 128, 70, 76, + 65, 71, 45, 51, 128, 70, 76, 65, 71, 45, 50, 128, 70, 76, 65, 71, 45, 49, + 128, 70, 76, 65, 71, 128, 70, 76, 65, 199, 70, 76, 65, 128, 70, 76, 128, + 70, 73, 88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 88, 128, 70, 73, 86, 69, + 45, 84, 72, 73, 82, 84, 89, 128, 70, 73, 86, 69, 45, 76, 73, 78, 197, 70, + 73, 86, 197, 70, 73, 84, 90, 80, 65, 84, 82, 73, 67, 203, 70, 73, 84, 65, + 128, 70, 73, 84, 128, 70, 73, 83, 84, 69, 196, 70, 73, 83, 72, 73, 78, + 199, 70, 73, 83, 72, 72, 79, 79, 75, 128, 70, 73, 83, 72, 72, 79, 79, + 203, 70, 73, 83, 72, 69, 89, 69, 128, 70, 73, 83, 72, 128, 70, 73, 83, + 200, 70, 73, 82, 83, 212, 70, 73, 82, 73, 128, 70, 73, 82, 69, 87, 79, + 82, 75, 83, 128, 70, 73, 82, 69, 87, 79, 82, 203, 70, 73, 82, 69, 128, + 70, 73, 82, 197, 70, 73, 80, 128, 70, 73, 78, 73, 84, 197, 70, 73, 78, + 71, 69, 82, 83, 128, 70, 73, 78, 71, 69, 82, 211, 70, 73, 78, 71, 69, 82, + 78, 65, 73, 76, 83, 128, 70, 73, 78, 71, 69, 82, 69, 196, 70, 73, 78, 71, + 69, 82, 45, 80, 79, 83, 212, 70, 73, 78, 71, 69, 82, 128, 70, 73, 78, 71, + 69, 210, 70, 73, 78, 65, 78, 67, 73, 65, 76, 128, 70, 73, 78, 65, 76, 128, 70, 73, 76, 205, 70, 73, 76, 76, 69, 82, 128, 70, 73, 76, 76, 69, 196, 70, 73, 76, 76, 128, 70, 73, 76, 204, 70, 73, 76, 197, 70, 73, 73, 128, 70, 73, 71, 85, 82, 69, 45, 51, 128, 70, 73, 71, 85, 82, 69, 45, 50, 128, 70, 73, 71, 85, 82, 69, 45, 49, 128, 70, 73, 71, 85, 82, 197, 70, 73, 71, 72, 84, 128, 70, 73, 70, 84, 89, 128, 70, 73, 70, 84, 217, 70, 73, 70, 84, 72, 83, 128, 70, 73, 70, 84, 72, 128, 70, 73, 70, 84, 69, 69, - 78, 128, 70, 73, 70, 84, 69, 69, 206, 70, 73, 69, 76, 68, 128, 70, 72, - 84, 79, 82, 193, 70, 70, 76, 128, 70, 70, 73, 128, 70, 69, 85, 88, 128, - 70, 69, 85, 70, 69, 85, 65, 69, 84, 128, 70, 69, 83, 84, 73, 86, 65, 76, - 128, 70, 69, 82, 82, 89, 128, 70, 69, 82, 82, 73, 211, 70, 69, 82, 77, - 65, 84, 65, 128, 70, 69, 82, 77, 65, 84, 193, 70, 69, 79, 200, 70, 69, - 78, 199, 70, 69, 78, 67, 69, 128, 70, 69, 77, 73, 78, 73, 78, 197, 70, - 69, 77, 65, 76, 69, 128, 70, 69, 77, 65, 76, 197, 70, 69, 76, 76, 79, 87, - 83, 72, 73, 80, 128, 70, 69, 73, 128, 70, 69, 72, 213, 70, 69, 72, 128, - 70, 69, 200, 70, 69, 69, 78, 71, 128, 70, 69, 69, 77, 128, 70, 69, 69, - 68, 128, 70, 69, 69, 196, 70, 69, 69, 128, 70, 69, 66, 82, 85, 65, 82, - 89, 128, 70, 69, 65, 84, 72, 69, 82, 128, 70, 69, 65, 84, 72, 69, 210, - 70, 69, 65, 82, 78, 128, 70, 69, 65, 82, 70, 85, 204, 70, 69, 65, 82, - 128, 70, 65, 89, 65, 78, 78, 65, 128, 70, 65, 89, 128, 70, 65, 88, 128, - 70, 65, 216, 70, 65, 84, 73, 71, 85, 69, 128, 70, 65, 84, 72, 69, 82, - 128, 70, 65, 84, 72, 69, 210, 70, 65, 84, 72, 65, 84, 65, 78, 128, 70, - 65, 84, 72, 65, 84, 65, 206, 70, 65, 84, 72, 65, 128, 70, 65, 84, 72, - 193, 70, 65, 84, 128, 70, 65, 82, 83, 201, 70, 65, 81, 128, 70, 65, 80, - 128, 70, 65, 78, 71, 128, 70, 65, 78, 69, 82, 79, 83, 73, 211, 70, 65, - 78, 128, 70, 65, 77, 73, 76, 89, 128, 70, 65, 77, 128, 70, 65, 76, 76, - 69, 206, 70, 65, 74, 128, 70, 65, 73, 76, 85, 82, 69, 128, 70, 65, 73, - 72, 85, 128, 70, 65, 73, 66, 128, 70, 65, 72, 82, 69, 78, 72, 69, 73, 84, - 128, 70, 65, 67, 84, 79, 82, 89, 128, 70, 65, 67, 84, 79, 210, 70, 65, - 67, 83, 73, 77, 73, 76, 197, 70, 65, 67, 69, 45, 54, 128, 70, 65, 67, 69, - 45, 53, 128, 70, 65, 67, 69, 45, 52, 128, 70, 65, 67, 69, 45, 51, 128, - 70, 65, 67, 69, 45, 50, 128, 70, 65, 67, 69, 45, 49, 128, 70, 65, 65, 77, - 65, 69, 128, 70, 65, 65, 73, 128, 70, 65, 65, 70, 85, 128, 70, 48, 53, - 51, 128, 70, 48, 53, 50, 128, 70, 48, 53, 49, 67, 128, 70, 48, 53, 49, - 66, 128, 70, 48, 53, 49, 65, 128, 70, 48, 53, 49, 128, 70, 48, 53, 48, - 128, 70, 48, 52, 57, 128, 70, 48, 52, 56, 128, 70, 48, 52, 55, 65, 128, - 70, 48, 52, 55, 128, 70, 48, 52, 54, 65, 128, 70, 48, 52, 54, 128, 70, - 48, 52, 53, 65, 128, 70, 48, 52, 53, 128, 70, 48, 52, 52, 128, 70, 48, - 52, 51, 128, 70, 48, 52, 50, 128, 70, 48, 52, 49, 128, 70, 48, 52, 48, - 128, 70, 48, 51, 57, 128, 70, 48, 51, 56, 65, 128, 70, 48, 51, 56, 128, - 70, 48, 51, 55, 65, 128, 70, 48, 51, 55, 128, 70, 48, 51, 54, 128, 70, - 48, 51, 53, 128, 70, 48, 51, 52, 128, 70, 48, 51, 51, 128, 70, 48, 51, - 50, 128, 70, 48, 51, 49, 65, 128, 70, 48, 51, 49, 128, 70, 48, 51, 48, - 128, 70, 48, 50, 57, 128, 70, 48, 50, 56, 128, 70, 48, 50, 55, 128, 70, - 48, 50, 54, 128, 70, 48, 50, 53, 128, 70, 48, 50, 52, 128, 70, 48, 50, - 51, 128, 70, 48, 50, 50, 128, 70, 48, 50, 49, 65, 128, 70, 48, 50, 49, - 128, 70, 48, 50, 48, 128, 70, 48, 49, 57, 128, 70, 48, 49, 56, 128, 70, - 48, 49, 55, 128, 70, 48, 49, 54, 128, 70, 48, 49, 53, 128, 70, 48, 49, - 52, 128, 70, 48, 49, 51, 65, 128, 70, 48, 49, 51, 128, 70, 48, 49, 50, - 128, 70, 48, 49, 49, 128, 70, 48, 49, 48, 128, 70, 48, 48, 57, 128, 70, - 48, 48, 56, 128, 70, 48, 48, 55, 128, 70, 48, 48, 54, 128, 70, 48, 48, - 53, 128, 70, 48, 48, 52, 128, 70, 48, 48, 51, 128, 70, 48, 48, 50, 128, - 70, 48, 48, 49, 65, 128, 70, 48, 48, 49, 128, 69, 90, 200, 69, 90, 69, - 78, 128, 69, 90, 69, 206, 69, 90, 128, 69, 89, 89, 89, 128, 69, 89, 69, - 83, 128, 69, 89, 69, 71, 76, 65, 83, 83, 69, 83, 128, 69, 89, 66, 69, 89, - 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, 128, 69, 88, 84, 82, 69, 77, - 69, 76, 217, 69, 88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82, 73, 65, - 204, 69, 88, 84, 82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45, 72, 73, - 71, 200, 69, 88, 84, 69, 78, 83, 73, 79, 78, 128, 69, 88, 84, 69, 78, 68, - 69, 68, 128, 69, 88, 84, 69, 78, 68, 69, 196, 69, 88, 80, 82, 69, 83, 83, - 73, 79, 78, 76, 69, 83, 211, 69, 88, 80, 79, 78, 69, 78, 212, 69, 88, 79, - 128, 69, 88, 207, 69, 88, 73, 83, 84, 83, 128, 69, 88, 73, 83, 84, 128, - 69, 88, 72, 65, 85, 83, 84, 73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65, - 84, 73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 206, 69, 88, - 67, 72, 65, 78, 71, 69, 128, 69, 88, 67, 69, 83, 83, 128, 69, 88, 67, 69, - 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 82, 71, 82, 69, 69, - 206, 69, 86, 69, 78, 73, 78, 71, 128, 69, 85, 82, 79, 80, 69, 65, 206, - 69, 85, 82, 79, 80, 69, 45, 65, 70, 82, 73, 67, 65, 128, 69, 85, 82, 79, - 45, 67, 85, 82, 82, 69, 78, 67, 217, 69, 85, 82, 207, 69, 85, 76, 69, - 210, 69, 85, 45, 85, 128, 69, 85, 45, 79, 128, 69, 85, 45, 69, 85, 128, - 69, 85, 45, 69, 79, 128, 69, 85, 45, 69, 128, 69, 85, 45, 65, 128, 69, - 84, 88, 128, 69, 84, 78, 65, 72, 84, 65, 128, 69, 84, 72, 69, 204, 69, - 84, 69, 82, 79, 206, 69, 84, 69, 82, 78, 73, 84, 89, 128, 69, 84, 69, 82, - 78, 73, 84, 217, 69, 84, 66, 128, 69, 83, 85, 75, 85, 85, 68, 79, 128, - 69, 83, 84, 73, 77, 65, 84, 69, 83, 128, 69, 83, 84, 73, 77, 65, 84, 69, - 196, 69, 83, 72, 69, 51, 128, 69, 83, 72, 50, 49, 128, 69, 83, 72, 49, - 54, 128, 69, 83, 67, 65, 80, 69, 128, 69, 83, 67, 128, 69, 83, 65, 128, - 69, 83, 45, 84, 69, 128, 69, 83, 45, 51, 128, 69, 83, 45, 50, 128, 69, - 83, 45, 49, 128, 69, 82, 82, 79, 82, 45, 66, 65, 82, 82, 69, 196, 69, 82, - 82, 128, 69, 82, 73, 78, 50, 128, 69, 82, 71, 128, 69, 82, 65, 83, 197, - 69, 81, 85, 73, 86, 65, 76, 69, 78, 212, 69, 81, 85, 73, 76, 65, 84, 69, - 82, 65, 204, 69, 81, 85, 73, 68, 128, 69, 81, 85, 73, 65, 78, 71, 85, 76, - 65, 210, 69, 81, 85, 65, 76, 83, 128, 69, 81, 85, 65, 76, 211, 69, 81, - 85, 65, 76, 128, 69, 80, 83, 73, 76, 79, 78, 128, 69, 80, 83, 73, 76, 79, + 78, 128, 70, 73, 70, 84, 69, 69, 206, 70, 73, 69, 76, 68, 128, 70, 73, + 69, 76, 196, 70, 72, 84, 79, 82, 193, 70, 70, 76, 128, 70, 70, 73, 128, + 70, 69, 85, 88, 128, 70, 69, 85, 70, 69, 85, 65, 69, 84, 128, 70, 69, 83, + 84, 73, 86, 65, 76, 128, 70, 69, 82, 82, 89, 128, 70, 69, 82, 82, 73, + 211, 70, 69, 82, 77, 65, 84, 65, 128, 70, 69, 82, 77, 65, 84, 193, 70, + 69, 79, 200, 70, 69, 78, 199, 70, 69, 78, 67, 69, 128, 70, 69, 77, 73, + 78, 73, 78, 197, 70, 69, 77, 65, 76, 69, 128, 70, 69, 77, 65, 76, 197, + 70, 69, 76, 76, 79, 87, 83, 72, 73, 80, 128, 70, 69, 73, 128, 70, 69, 72, + 213, 70, 69, 72, 128, 70, 69, 200, 70, 69, 69, 78, 71, 128, 70, 69, 69, + 77, 128, 70, 69, 69, 68, 128, 70, 69, 69, 196, 70, 69, 69, 128, 70, 69, + 66, 82, 85, 65, 82, 89, 128, 70, 69, 65, 84, 72, 69, 82, 128, 70, 69, 65, + 84, 72, 69, 210, 70, 69, 65, 82, 78, 128, 70, 69, 65, 82, 70, 85, 204, + 70, 69, 65, 82, 128, 70, 65, 89, 65, 78, 78, 65, 128, 70, 65, 89, 128, + 70, 65, 88, 128, 70, 65, 216, 70, 65, 84, 73, 71, 85, 69, 128, 70, 65, + 84, 72, 69, 82, 128, 70, 65, 84, 72, 69, 210, 70, 65, 84, 72, 65, 84, 65, + 78, 128, 70, 65, 84, 72, 65, 84, 65, 206, 70, 65, 84, 72, 65, 128, 70, + 65, 84, 72, 193, 70, 65, 84, 128, 70, 65, 83, 84, 128, 70, 65, 82, 83, + 201, 70, 65, 82, 128, 70, 65, 81, 128, 70, 65, 80, 128, 70, 65, 78, 71, + 128, 70, 65, 78, 69, 82, 79, 83, 73, 211, 70, 65, 78, 128, 70, 65, 77, + 73, 76, 89, 128, 70, 65, 77, 128, 70, 65, 76, 76, 69, 206, 70, 65, 74, + 128, 70, 65, 73, 76, 85, 82, 69, 128, 70, 65, 73, 72, 85, 128, 70, 65, + 73, 66, 128, 70, 65, 72, 82, 69, 78, 72, 69, 73, 84, 128, 70, 65, 67, 84, + 79, 82, 89, 128, 70, 65, 67, 84, 79, 210, 70, 65, 67, 83, 73, 77, 73, 76, + 197, 70, 65, 67, 73, 78, 71, 83, 128, 70, 65, 67, 69, 45, 54, 128, 70, + 65, 67, 69, 45, 53, 128, 70, 65, 67, 69, 45, 52, 128, 70, 65, 67, 69, 45, + 51, 128, 70, 65, 67, 69, 45, 50, 128, 70, 65, 67, 69, 45, 49, 128, 70, + 65, 65, 77, 65, 69, 128, 70, 65, 65, 73, 128, 70, 65, 65, 70, 85, 128, + 70, 48, 53, 51, 128, 70, 48, 53, 50, 128, 70, 48, 53, 49, 67, 128, 70, + 48, 53, 49, 66, 128, 70, 48, 53, 49, 65, 128, 70, 48, 53, 49, 128, 70, + 48, 53, 48, 128, 70, 48, 52, 57, 128, 70, 48, 52, 56, 128, 70, 48, 52, + 55, 65, 128, 70, 48, 52, 55, 128, 70, 48, 52, 54, 65, 128, 70, 48, 52, + 54, 128, 70, 48, 52, 53, 65, 128, 70, 48, 52, 53, 128, 70, 48, 52, 52, + 128, 70, 48, 52, 51, 128, 70, 48, 52, 50, 128, 70, 48, 52, 49, 128, 70, + 48, 52, 48, 128, 70, 48, 51, 57, 128, 70, 48, 51, 56, 65, 128, 70, 48, + 51, 56, 128, 70, 48, 51, 55, 65, 128, 70, 48, 51, 55, 128, 70, 48, 51, + 54, 128, 70, 48, 51, 53, 128, 70, 48, 51, 52, 128, 70, 48, 51, 51, 128, + 70, 48, 51, 50, 128, 70, 48, 51, 49, 65, 128, 70, 48, 51, 49, 128, 70, + 48, 51, 48, 128, 70, 48, 50, 57, 128, 70, 48, 50, 56, 128, 70, 48, 50, + 55, 128, 70, 48, 50, 54, 128, 70, 48, 50, 53, 128, 70, 48, 50, 52, 128, + 70, 48, 50, 51, 128, 70, 48, 50, 50, 128, 70, 48, 50, 49, 65, 128, 70, + 48, 50, 49, 128, 70, 48, 50, 48, 128, 70, 48, 49, 57, 128, 70, 48, 49, + 56, 128, 70, 48, 49, 55, 128, 70, 48, 49, 54, 128, 70, 48, 49, 53, 128, + 70, 48, 49, 52, 128, 70, 48, 49, 51, 65, 128, 70, 48, 49, 51, 128, 70, + 48, 49, 50, 128, 70, 48, 49, 49, 128, 70, 48, 49, 48, 128, 70, 48, 48, + 57, 128, 70, 48, 48, 56, 128, 70, 48, 48, 55, 128, 70, 48, 48, 54, 128, + 70, 48, 48, 53, 128, 70, 48, 48, 52, 128, 70, 48, 48, 51, 128, 70, 48, + 48, 50, 128, 70, 48, 48, 49, 65, 128, 70, 48, 48, 49, 128, 69, 90, 83, + 128, 69, 90, 200, 69, 90, 69, 78, 128, 69, 90, 69, 206, 69, 90, 128, 69, + 89, 89, 89, 128, 69, 89, 69, 83, 128, 69, 89, 69, 211, 69, 89, 69, 76, + 65, 83, 72, 69, 211, 69, 89, 69, 71, 76, 65, 83, 83, 69, 83, 128, 69, 89, + 69, 71, 65, 90, 69, 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 69, 89, 69, + 71, 65, 90, 69, 45, 70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 69, 89, 69, + 66, 82, 79, 87, 211, 69, 89, 197, 69, 89, 66, 69, 89, 70, 73, 76, 73, + 128, 69, 89, 65, 78, 78, 65, 128, 69, 88, 84, 82, 69, 77, 69, 76, 217, + 69, 88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82, 73, 65, 204, 69, 88, + 84, 82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45, 72, 73, 71, 200, 69, + 88, 84, 82, 193, 69, 88, 84, 69, 78, 83, 73, 79, 78, 128, 69, 88, 84, 69, + 78, 68, 69, 68, 128, 69, 88, 84, 69, 78, 68, 69, 196, 69, 88, 80, 82, 69, + 83, 83, 73, 79, 78, 76, 69, 83, 211, 69, 88, 80, 79, 78, 69, 78, 212, 69, + 88, 79, 128, 69, 88, 207, 69, 88, 73, 83, 84, 83, 128, 69, 88, 73, 83, + 84, 128, 69, 88, 72, 65, 85, 83, 84, 73, 79, 78, 128, 69, 88, 72, 65, 76, + 69, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 78, 128, 69, 88, 67, 76, + 65, 77, 65, 84, 73, 79, 206, 69, 88, 67, 73, 84, 69, 77, 69, 78, 84, 128, + 69, 88, 67, 72, 65, 78, 71, 69, 128, 69, 88, 67, 69, 83, 83, 128, 69, 88, + 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 82, 217, + 69, 86, 69, 82, 71, 82, 69, 69, 206, 69, 86, 69, 78, 73, 78, 71, 128, 69, + 85, 82, 79, 80, 69, 65, 206, 69, 85, 82, 79, 80, 69, 45, 65, 70, 82, 73, + 67, 65, 128, 69, 85, 82, 79, 45, 67, 85, 82, 82, 69, 78, 67, 217, 69, 85, + 82, 207, 69, 85, 76, 69, 210, 69, 85, 45, 85, 128, 69, 85, 45, 79, 128, + 69, 85, 45, 69, 85, 128, 69, 85, 45, 69, 79, 128, 69, 85, 45, 69, 128, + 69, 85, 45, 65, 128, 69, 84, 88, 128, 69, 84, 78, 65, 72, 84, 65, 128, + 69, 84, 72, 69, 204, 69, 84, 69, 82, 79, 206, 69, 84, 69, 82, 78, 73, 84, + 89, 128, 69, 84, 69, 82, 78, 73, 84, 217, 69, 84, 66, 128, 69, 83, 90, + 128, 69, 83, 85, 75, 85, 85, 68, 79, 128, 69, 83, 84, 73, 77, 65, 84, 69, + 83, 128, 69, 83, 84, 73, 77, 65, 84, 69, 196, 69, 83, 72, 69, 51, 128, + 69, 83, 72, 50, 49, 128, 69, 83, 72, 49, 54, 128, 69, 83, 67, 65, 80, 69, + 128, 69, 83, 67, 128, 69, 83, 65, 128, 69, 83, 45, 84, 69, 128, 69, 83, + 45, 51, 128, 69, 83, 45, 50, 128, 69, 83, 45, 49, 128, 69, 82, 82, 79, + 82, 45, 66, 65, 82, 82, 69, 196, 69, 82, 82, 128, 69, 82, 73, 78, 50, + 128, 69, 82, 73, 78, 178, 69, 82, 71, 128, 69, 82, 65, 83, 197, 69, 81, + 85, 73, 86, 65, 76, 69, 78, 212, 69, 81, 85, 73, 76, 65, 84, 69, 82, 65, + 204, 69, 81, 85, 73, 68, 128, 69, 81, 85, 73, 65, 78, 71, 85, 76, 65, + 210, 69, 81, 85, 65, 76, 83, 128, 69, 81, 85, 65, 76, 211, 69, 81, 85, + 65, 76, 128, 69, 80, 83, 73, 76, 79, 78, 128, 69, 80, 83, 73, 76, 79, 206, 69, 80, 79, 67, 72, 128, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 69, 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69, 78, 84, 72, 69, 84, 73, 195, 69, 80, 69, 71, 69, 82, 77, 65, 128, 69, 80, 65, 67, 212, 69, @@ -3926,117 +4059,120 @@ static unsigned char lexicon[] = { 69, 78, 84, 82, 89, 128, 69, 78, 84, 82, 217, 69, 78, 84, 72, 85, 83, 73, 65, 83, 77, 128, 69, 78, 84, 69, 82, 80, 82, 73, 83, 69, 128, 69, 78, 84, 69, 82, 73, 78, 199, 69, 78, 84, 69, 82, 128, 69, 78, 84, 69, 210, 69, - 78, 81, 85, 73, 82, 89, 128, 69, 78, 81, 128, 69, 78, 79, 211, 69, 78, - 78, 73, 128, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, - 128, 69, 78, 71, 73, 78, 69, 128, 69, 78, 68, 79, 70, 79, 78, 79, 78, - 128, 69, 78, 68, 73, 78, 199, 69, 78, 68, 69, 80, 128, 69, 78, 68, 69, - 65, 86, 79, 85, 82, 128, 69, 78, 67, 79, 85, 78, 84, 69, 82, 83, 128, 69, - 78, 67, 76, 79, 83, 85, 82, 69, 128, 69, 78, 67, 76, 79, 83, 73, 78, 199, - 69, 78, 67, 128, 69, 78, 65, 82, 88, 73, 211, 69, 78, 65, 82, 77, 79, 78, - 73, 79, 211, 69, 77, 80, 84, 217, 69, 77, 80, 72, 65, 84, 73, 195, 69, - 77, 80, 72, 65, 83, 73, 211, 69, 77, 66, 82, 79, 73, 68, 69, 82, 89, 128, - 69, 77, 66, 76, 69, 77, 128, 69, 77, 66, 69, 76, 76, 73, 83, 72, 77, 69, - 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 69, 76, 84, 128, - 69, 76, 76, 73, 80, 84, 73, 195, 69, 76, 76, 73, 80, 83, 73, 83, 128, 69, - 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, 69, 86, 69, - 78, 45, 84, 72, 73, 82, 84, 89, 128, 69, 76, 69, 86, 69, 78, 128, 69, 76, - 69, 86, 69, 206, 69, 76, 69, 80, 72, 65, 78, 84, 128, 69, 76, 69, 77, 69, - 78, 212, 69, 76, 69, 67, 84, 82, 73, 67, 65, 204, 69, 76, 69, 67, 84, 82, - 73, 195, 69, 76, 66, 65, 83, 65, 206, 69, 76, 65, 77, 73, 84, 69, 128, - 69, 76, 65, 77, 73, 84, 197, 69, 76, 65, 70, 82, 79, 78, 128, 69, 75, 83, - 84, 82, 69, 80, 84, 79, 78, 128, 69, 75, 83, 128, 69, 75, 70, 79, 78, 73, - 84, 73, 75, 79, 78, 128, 69, 75, 65, 82, 65, 128, 69, 75, 65, 77, 128, - 69, 74, 69, 67, 212, 69, 73, 83, 128, 69, 73, 71, 72, 84, 89, 128, 69, - 73, 71, 72, 84, 217, 69, 73, 71, 72, 84, 72, 83, 128, 69, 73, 71, 72, 84, - 72, 211, 69, 73, 71, 72, 84, 72, 128, 69, 73, 71, 72, 84, 69, 69, 78, - 128, 69, 73, 71, 72, 84, 69, 69, 206, 69, 73, 71, 72, 84, 45, 84, 72, 73, - 82, 84, 89, 128, 69, 73, 69, 128, 69, 72, 87, 65, 218, 69, 71, 89, 80, - 84, 79, 76, 79, 71, 73, 67, 65, 204, 69, 71, 73, 82, 128, 69, 71, 71, - 128, 69, 69, 89, 65, 78, 78, 65, 128, 69, 69, 75, 65, 65, 128, 69, 69, - 72, 128, 69, 69, 66, 69, 69, 70, 73, 76, 73, 128, 69, 68, 73, 84, 79, 82, - 73, 65, 204, 69, 68, 73, 78, 128, 69, 68, 68, 128, 69, 66, 69, 70, 73, - 76, 73, 128, 69, 65, 83, 84, 69, 82, 206, 69, 65, 83, 84, 128, 69, 65, - 83, 212, 69, 65, 82, 84, 72, 76, 217, 69, 65, 82, 84, 72, 128, 69, 65, - 82, 84, 200, 69, 65, 82, 83, 128, 69, 65, 82, 76, 217, 69, 65, 77, 72, - 65, 78, 67, 72, 79, 76, 76, 128, 69, 65, 71, 76, 69, 128, 69, 65, 68, 72, - 65, 68, 72, 128, 69, 65, 66, 72, 65, 68, 72, 128, 69, 178, 69, 48, 51, - 56, 128, 69, 48, 51, 55, 128, 69, 48, 51, 54, 128, 69, 48, 51, 52, 65, - 128, 69, 48, 51, 52, 128, 69, 48, 51, 51, 128, 69, 48, 51, 50, 128, 69, - 48, 51, 49, 128, 69, 48, 51, 48, 128, 69, 48, 50, 57, 128, 69, 48, 50, - 56, 65, 128, 69, 48, 50, 56, 128, 69, 48, 50, 55, 128, 69, 48, 50, 54, - 128, 69, 48, 50, 53, 128, 69, 48, 50, 52, 128, 69, 48, 50, 51, 128, 69, - 48, 50, 50, 128, 69, 48, 50, 49, 128, 69, 48, 50, 48, 65, 128, 69, 48, - 50, 48, 128, 69, 48, 49, 57, 128, 69, 48, 49, 56, 128, 69, 48, 49, 55, - 65, 128, 69, 48, 49, 55, 128, 69, 48, 49, 54, 65, 128, 69, 48, 49, 54, - 128, 69, 48, 49, 53, 128, 69, 48, 49, 52, 128, 69, 48, 49, 51, 128, 69, - 48, 49, 50, 128, 69, 48, 49, 49, 128, 69, 48, 49, 48, 128, 69, 48, 48, - 57, 65, 128, 69, 48, 48, 57, 128, 69, 48, 48, 56, 65, 128, 69, 48, 48, - 56, 128, 69, 48, 48, 55, 128, 69, 48, 48, 54, 128, 69, 48, 48, 53, 128, - 69, 48, 48, 52, 128, 69, 48, 48, 51, 128, 69, 48, 48, 50, 128, 69, 48, - 48, 49, 128, 69, 45, 77, 65, 73, 204, 68, 90, 90, 72, 69, 128, 68, 90, - 90, 69, 128, 68, 90, 90, 65, 128, 68, 90, 89, 65, 89, 128, 68, 90, 87, - 69, 128, 68, 90, 85, 128, 68, 90, 79, 128, 68, 90, 74, 69, 128, 68, 90, - 73, 84, 65, 128, 68, 90, 73, 128, 68, 90, 72, 79, 73, 128, 68, 90, 72, - 69, 128, 68, 90, 72, 65, 128, 68, 90, 69, 76, 79, 128, 68, 90, 69, 69, - 128, 68, 90, 69, 128, 68, 90, 65, 89, 128, 68, 90, 65, 65, 128, 68, 90, - 65, 128, 68, 90, 128, 68, 218, 68, 89, 79, 128, 68, 89, 207, 68, 89, 69, - 72, 128, 68, 89, 69, 200, 68, 89, 65, 78, 128, 68, 87, 79, 128, 68, 87, - 69, 128, 68, 87, 65, 128, 68, 86, 73, 83, 86, 65, 82, 65, 128, 68, 86, - 68, 128, 68, 86, 128, 68, 85, 84, 73, 69, 83, 128, 68, 85, 83, 75, 128, - 68, 85, 83, 72, 69, 78, 78, 65, 128, 68, 85, 82, 65, 84, 73, 79, 78, 128, - 68, 85, 82, 50, 128, 68, 85, 80, 79, 78, 68, 73, 85, 211, 68, 85, 79, 88, - 128, 68, 85, 79, 128, 68, 85, 78, 52, 128, 68, 85, 78, 51, 128, 68, 85, - 78, 179, 68, 85, 77, 128, 68, 85, 204, 68, 85, 72, 128, 68, 85, 71, 85, - 68, 128, 68, 85, 66, 50, 128, 68, 85, 66, 128, 68, 85, 194, 68, 82, 89, - 128, 68, 82, 217, 68, 82, 85, 77, 128, 68, 82, 85, 205, 68, 82, 79, 80, - 83, 128, 68, 82, 79, 80, 76, 69, 84, 128, 68, 82, 79, 80, 45, 83, 72, 65, - 68, 79, 87, 69, 196, 68, 82, 79, 77, 69, 68, 65, 82, 217, 68, 82, 73, 86, - 69, 128, 68, 82, 73, 86, 197, 68, 82, 73, 78, 75, 128, 68, 82, 73, 204, - 68, 82, 69, 83, 83, 128, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, 65, 77, - 128, 68, 82, 65, 205, 68, 82, 65, 71, 79, 78, 128, 68, 82, 65, 71, 79, - 206, 68, 82, 65, 70, 84, 73, 78, 199, 68, 82, 65, 67, 72, 77, 65, 83, - 128, 68, 82, 65, 67, 72, 77, 65, 128, 68, 82, 65, 67, 72, 77, 193, 68, - 79, 87, 78, 87, 65, 82, 68, 83, 128, 68, 79, 87, 78, 45, 80, 79, 73, 78, - 84, 73, 78, 199, 68, 79, 87, 78, 128, 68, 79, 86, 69, 128, 68, 79, 86, - 197, 68, 79, 85, 71, 72, 78, 85, 84, 128, 68, 79, 85, 66, 84, 128, 68, - 79, 85, 66, 76, 69, 196, 68, 79, 85, 66, 76, 69, 45, 76, 73, 78, 197, 68, - 79, 85, 66, 76, 69, 45, 69, 78, 68, 69, 196, 68, 79, 85, 66, 76, 69, 128, - 68, 79, 84, 84, 69, 68, 45, 80, 128, 68, 79, 84, 84, 69, 68, 45, 78, 128, - 68, 79, 84, 84, 69, 68, 45, 76, 128, 68, 79, 84, 84, 69, 68, 128, 68, 79, - 84, 84, 69, 196, 68, 79, 84, 83, 45, 56, 128, 68, 79, 84, 83, 45, 55, 56, - 128, 68, 79, 84, 83, 45, 55, 128, 68, 79, 84, 83, 45, 54, 56, 128, 68, - 79, 84, 83, 45, 54, 55, 56, 128, 68, 79, 84, 83, 45, 54, 55, 128, 68, 79, - 84, 83, 45, 54, 128, 68, 79, 84, 83, 45, 53, 56, 128, 68, 79, 84, 83, 45, - 53, 55, 56, 128, 68, 79, 84, 83, 45, 53, 55, 128, 68, 79, 84, 83, 45, 53, - 54, 56, 128, 68, 79, 84, 83, 45, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, - 53, 54, 55, 128, 68, 79, 84, 83, 45, 53, 54, 128, 68, 79, 84, 83, 45, 53, - 128, 68, 79, 84, 83, 45, 52, 56, 128, 68, 79, 84, 83, 45, 52, 55, 56, - 128, 68, 79, 84, 83, 45, 52, 55, 128, 68, 79, 84, 83, 45, 52, 54, 56, - 128, 68, 79, 84, 83, 45, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 54, - 55, 128, 68, 79, 84, 83, 45, 52, 54, 128, 68, 79, 84, 83, 45, 52, 53, 56, - 128, 68, 79, 84, 83, 45, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, - 55, 128, 68, 79, 84, 83, 45, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 52, - 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, 128, 68, 79, 84, - 83, 45, 52, 53, 54, 128, 68, 79, 84, 83, 45, 52, 53, 128, 68, 79, 84, 83, - 45, 52, 128, 68, 79, 84, 83, 45, 51, 56, 128, 68, 79, 84, 83, 45, 51, 55, - 56, 128, 68, 79, 84, 83, 45, 51, 55, 128, 68, 79, 84, 83, 45, 51, 54, 56, - 128, 68, 79, 84, 83, 45, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 54, - 55, 128, 68, 79, 84, 83, 45, 51, 54, 128, 68, 79, 84, 83, 45, 51, 53, 56, - 128, 68, 79, 84, 83, 45, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53, - 55, 128, 68, 79, 84, 83, 45, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 51, - 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53, 54, 55, 128, 68, 79, 84, - 83, 45, 51, 53, 54, 128, 68, 79, 84, 83, 45, 51, 53, 128, 68, 79, 84, 83, - 45, 51, 52, 56, 128, 68, 79, 84, 83, 45, 51, 52, 55, 56, 128, 68, 79, 84, - 83, 45, 51, 52, 55, 128, 68, 79, 84, 83, 45, 51, 52, 54, 56, 128, 68, 79, - 84, 83, 45, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 54, 55, - 128, 68, 79, 84, 83, 45, 51, 52, 54, 128, 68, 79, 84, 83, 45, 51, 52, 53, - 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, - 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 56, 128, 68, 79, - 84, 83, 45, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, - 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, - 51, 52, 53, 128, 68, 79, 84, 83, 45, 51, 52, 128, 68, 79, 84, 83, 45, 51, - 128, 68, 79, 84, 83, 45, 50, 56, 128, 68, 79, 84, 83, 45, 50, 55, 56, - 128, 68, 79, 84, 83, 45, 50, 55, 128, 68, 79, 84, 83, 45, 50, 54, 56, + 78, 84, 45, 83, 72, 65, 80, 69, 196, 69, 78, 81, 85, 73, 82, 89, 128, 69, + 78, 81, 128, 69, 78, 79, 211, 69, 78, 78, 73, 128, 69, 78, 78, 128, 69, + 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 128, 69, 78, 71, 73, 78, 69, 128, + 69, 78, 68, 79, 70, 79, 78, 79, 78, 128, 69, 78, 68, 73, 78, 199, 69, 78, + 68, 69, 80, 128, 69, 78, 68, 69, 65, 86, 79, 85, 82, 128, 69, 78, 67, 79, + 85, 78, 84, 69, 82, 83, 128, 69, 78, 67, 76, 79, 83, 85, 82, 69, 83, 128, + 69, 78, 67, 76, 79, 83, 85, 82, 69, 128, 69, 78, 67, 76, 79, 83, 73, 78, + 199, 69, 78, 67, 128, 69, 78, 65, 82, 88, 73, 211, 69, 78, 65, 82, 77, + 79, 78, 73, 79, 211, 69, 77, 80, 84, 217, 69, 77, 80, 72, 65, 84, 73, + 195, 69, 77, 80, 72, 65, 83, 73, 211, 69, 77, 79, 74, 201, 69, 77, 66, + 82, 79, 73, 68, 69, 82, 89, 128, 69, 77, 66, 76, 69, 77, 128, 69, 77, 66, + 69, 76, 76, 73, 83, 72, 77, 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, + 78, 71, 128, 69, 76, 89, 128, 69, 76, 84, 128, 69, 76, 76, 73, 80, 84, + 73, 195, 69, 76, 76, 73, 80, 83, 73, 83, 128, 69, 76, 76, 73, 80, 83, 69, + 128, 69, 76, 73, 70, 73, 128, 69, 76, 69, 86, 69, 78, 45, 84, 72, 73, 82, + 84, 89, 128, 69, 76, 69, 86, 69, 78, 128, 69, 76, 69, 86, 69, 206, 69, + 76, 69, 80, 72, 65, 78, 84, 128, 69, 76, 69, 77, 69, 78, 212, 69, 76, 69, + 67, 84, 82, 73, 67, 65, 204, 69, 76, 69, 67, 84, 82, 73, 195, 69, 76, 66, + 65, 83, 65, 206, 69, 76, 65, 77, 73, 84, 69, 128, 69, 76, 65, 77, 73, 84, + 197, 69, 76, 65, 70, 82, 79, 78, 128, 69, 75, 83, 84, 82, 69, 80, 84, 79, + 78, 128, 69, 75, 83, 128, 69, 75, 70, 79, 78, 73, 84, 73, 75, 79, 78, + 128, 69, 75, 65, 82, 65, 128, 69, 75, 65, 77, 128, 69, 74, 69, 67, 212, + 69, 73, 83, 128, 69, 73, 71, 72, 84, 89, 128, 69, 73, 71, 72, 84, 217, + 69, 73, 71, 72, 84, 72, 83, 128, 69, 73, 71, 72, 84, 72, 211, 69, 73, 71, + 72, 84, 72, 128, 69, 73, 71, 72, 84, 69, 69, 78, 128, 69, 73, 71, 72, 84, + 69, 69, 206, 69, 73, 71, 72, 84, 45, 84, 72, 73, 82, 84, 89, 128, 69, 73, + 69, 128, 69, 72, 87, 65, 218, 69, 71, 89, 80, 84, 79, 76, 79, 71, 73, 67, + 65, 204, 69, 71, 89, 128, 69, 71, 73, 82, 128, 69, 71, 71, 128, 69, 69, + 89, 65, 78, 78, 65, 128, 69, 69, 75, 65, 65, 128, 69, 69, 72, 128, 69, + 69, 66, 69, 69, 70, 73, 76, 73, 128, 69, 68, 73, 84, 79, 82, 73, 65, 204, + 69, 68, 73, 78, 128, 69, 68, 68, 128, 69, 67, 83, 128, 69, 66, 69, 70, + 73, 76, 73, 128, 69, 65, 83, 84, 69, 82, 206, 69, 65, 83, 84, 128, 69, + 65, 83, 212, 69, 65, 82, 84, 72, 76, 217, 69, 65, 82, 84, 72, 128, 69, + 65, 82, 84, 200, 69, 65, 82, 83, 128, 69, 65, 82, 76, 217, 69, 65, 77, + 72, 65, 78, 67, 72, 79, 76, 76, 128, 69, 65, 71, 76, 69, 128, 69, 65, 68, + 72, 65, 68, 72, 128, 69, 65, 66, 72, 65, 68, 72, 128, 69, 178, 69, 48, + 51, 56, 128, 69, 48, 51, 55, 128, 69, 48, 51, 54, 128, 69, 48, 51, 52, + 65, 128, 69, 48, 51, 52, 128, 69, 48, 51, 51, 128, 69, 48, 51, 50, 128, + 69, 48, 51, 49, 128, 69, 48, 51, 48, 128, 69, 48, 50, 57, 128, 69, 48, + 50, 56, 65, 128, 69, 48, 50, 56, 128, 69, 48, 50, 55, 128, 69, 48, 50, + 54, 128, 69, 48, 50, 53, 128, 69, 48, 50, 52, 128, 69, 48, 50, 51, 128, + 69, 48, 50, 50, 128, 69, 48, 50, 49, 128, 69, 48, 50, 48, 65, 128, 69, + 48, 50, 48, 128, 69, 48, 49, 57, 128, 69, 48, 49, 56, 128, 69, 48, 49, + 55, 65, 128, 69, 48, 49, 55, 128, 69, 48, 49, 54, 65, 128, 69, 48, 49, + 54, 128, 69, 48, 49, 53, 128, 69, 48, 49, 52, 128, 69, 48, 49, 51, 128, + 69, 48, 49, 50, 128, 69, 48, 49, 49, 128, 69, 48, 49, 48, 128, 69, 48, + 48, 57, 65, 128, 69, 48, 48, 57, 128, 69, 48, 48, 56, 65, 128, 69, 48, + 48, 56, 128, 69, 48, 48, 55, 128, 69, 48, 48, 54, 128, 69, 48, 48, 53, + 128, 69, 48, 48, 52, 128, 69, 48, 48, 51, 128, 69, 48, 48, 50, 128, 69, + 48, 48, 49, 128, 69, 45, 77, 65, 73, 204, 68, 90, 90, 72, 69, 128, 68, + 90, 90, 69, 128, 68, 90, 90, 65, 128, 68, 90, 89, 65, 89, 128, 68, 90, + 87, 69, 128, 68, 90, 85, 128, 68, 90, 79, 128, 68, 90, 74, 69, 128, 68, + 90, 73, 84, 65, 128, 68, 90, 73, 128, 68, 90, 72, 79, 73, 128, 68, 90, + 72, 69, 128, 68, 90, 72, 65, 128, 68, 90, 69, 76, 79, 128, 68, 90, 69, + 69, 128, 68, 90, 69, 128, 68, 90, 65, 89, 128, 68, 90, 65, 65, 128, 68, + 90, 65, 128, 68, 90, 128, 68, 218, 68, 89, 79, 128, 68, 89, 207, 68, 89, + 78, 65, 77, 73, 195, 68, 89, 69, 72, 128, 68, 89, 69, 200, 68, 89, 65, + 78, 128, 68, 87, 79, 128, 68, 87, 69, 128, 68, 87, 65, 128, 68, 86, 73, + 83, 86, 65, 82, 65, 128, 68, 86, 68, 128, 68, 86, 128, 68, 85, 84, 73, + 69, 83, 128, 68, 85, 83, 75, 128, 68, 85, 83, 72, 69, 78, 78, 65, 128, + 68, 85, 82, 65, 84, 73, 79, 78, 128, 68, 85, 82, 50, 128, 68, 85, 80, 79, + 78, 68, 73, 85, 211, 68, 85, 79, 88, 128, 68, 85, 79, 128, 68, 85, 78, + 52, 128, 68, 85, 78, 51, 128, 68, 85, 78, 179, 68, 85, 77, 128, 68, 85, + 204, 68, 85, 72, 128, 68, 85, 71, 85, 68, 128, 68, 85, 199, 68, 85, 66, + 50, 128, 68, 85, 66, 128, 68, 85, 194, 68, 82, 89, 128, 68, 82, 217, 68, + 82, 85, 77, 128, 68, 82, 85, 205, 68, 82, 79, 80, 83, 128, 68, 82, 79, + 80, 76, 69, 84, 128, 68, 82, 79, 80, 45, 83, 72, 65, 68, 79, 87, 69, 196, + 68, 82, 79, 77, 69, 68, 65, 82, 217, 68, 82, 73, 86, 69, 128, 68, 82, 73, + 86, 197, 68, 82, 73, 78, 75, 128, 68, 82, 73, 204, 68, 82, 69, 83, 83, + 128, 68, 82, 69, 65, 77, 217, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, + 65, 77, 128, 68, 82, 65, 205, 68, 82, 65, 71, 79, 78, 128, 68, 82, 65, + 71, 79, 206, 68, 82, 65, 70, 84, 73, 78, 199, 68, 82, 65, 67, 72, 77, 65, + 83, 128, 68, 82, 65, 67, 72, 77, 65, 128, 68, 82, 65, 67, 72, 77, 193, + 68, 79, 87, 78, 87, 65, 82, 68, 83, 128, 68, 79, 87, 78, 45, 80, 79, 73, + 78, 84, 73, 78, 199, 68, 79, 87, 78, 128, 68, 79, 86, 69, 128, 68, 79, + 86, 197, 68, 79, 85, 71, 72, 78, 85, 84, 128, 68, 79, 85, 66, 84, 128, + 68, 79, 85, 66, 76, 69, 196, 68, 79, 85, 66, 76, 69, 45, 76, 73, 78, 197, + 68, 79, 85, 66, 76, 69, 45, 69, 78, 68, 69, 196, 68, 79, 85, 66, 76, 69, + 128, 68, 79, 84, 84, 69, 68, 45, 80, 128, 68, 79, 84, 84, 69, 68, 45, 78, + 128, 68, 79, 84, 84, 69, 68, 45, 76, 128, 68, 79, 84, 84, 69, 68, 128, + 68, 79, 84, 84, 69, 196, 68, 79, 84, 83, 45, 56, 128, 68, 79, 84, 83, 45, + 55, 56, 128, 68, 79, 84, 83, 45, 55, 128, 68, 79, 84, 83, 45, 54, 56, + 128, 68, 79, 84, 83, 45, 54, 55, 56, 128, 68, 79, 84, 83, 45, 54, 55, + 128, 68, 79, 84, 83, 45, 54, 128, 68, 79, 84, 83, 45, 53, 56, 128, 68, + 79, 84, 83, 45, 53, 55, 56, 128, 68, 79, 84, 83, 45, 53, 55, 128, 68, 79, + 84, 83, 45, 53, 54, 56, 128, 68, 79, 84, 83, 45, 53, 54, 55, 56, 128, 68, + 79, 84, 83, 45, 53, 54, 55, 128, 68, 79, 84, 83, 45, 53, 54, 128, 68, 79, + 84, 83, 45, 53, 128, 68, 79, 84, 83, 45, 52, 56, 128, 68, 79, 84, 83, 45, + 52, 55, 56, 128, 68, 79, 84, 83, 45, 52, 55, 128, 68, 79, 84, 83, 45, 52, + 54, 56, 128, 68, 79, 84, 83, 45, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, + 52, 54, 55, 128, 68, 79, 84, 83, 45, 52, 54, 128, 68, 79, 84, 83, 45, 52, + 53, 56, 128, 68, 79, 84, 83, 45, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, + 52, 53, 55, 128, 68, 79, 84, 83, 45, 52, 53, 54, 56, 128, 68, 79, 84, 83, + 45, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, 128, 68, + 79, 84, 83, 45, 52, 53, 54, 128, 68, 79, 84, 83, 45, 52, 53, 128, 68, 79, + 84, 83, 45, 52, 128, 68, 79, 84, 83, 45, 51, 56, 128, 68, 79, 84, 83, 45, + 51, 55, 56, 128, 68, 79, 84, 83, 45, 51, 55, 128, 68, 79, 84, 83, 45, 51, + 54, 56, 128, 68, 79, 84, 83, 45, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, + 51, 54, 55, 128, 68, 79, 84, 83, 45, 51, 54, 128, 68, 79, 84, 83, 45, 51, + 53, 56, 128, 68, 79, 84, 83, 45, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, + 51, 53, 55, 128, 68, 79, 84, 83, 45, 51, 53, 54, 56, 128, 68, 79, 84, 83, + 45, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53, 54, 55, 128, 68, + 79, 84, 83, 45, 51, 53, 54, 128, 68, 79, 84, 83, 45, 51, 53, 128, 68, 79, + 84, 83, 45, 51, 52, 56, 128, 68, 79, 84, 83, 45, 51, 52, 55, 56, 128, 68, + 79, 84, 83, 45, 51, 52, 55, 128, 68, 79, 84, 83, 45, 51, 52, 54, 56, 128, + 68, 79, 84, 83, 45, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, + 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 54, 128, 68, 79, 84, 83, 45, 51, + 52, 53, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55, 56, 128, 68, 79, 84, + 83, 45, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 56, 128, + 68, 79, 84, 83, 45, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, + 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 128, 68, 79, 84, + 83, 45, 51, 52, 53, 128, 68, 79, 84, 83, 45, 51, 52, 128, 68, 79, 84, 83, + 45, 51, 128, 68, 79, 84, 83, 45, 50, 56, 128, 68, 79, 84, 83, 45, 50, 55, + 56, 128, 68, 79, 84, 83, 45, 50, 55, 128, 68, 79, 84, 83, 45, 50, 54, 56, 128, 68, 79, 84, 83, 45, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 54, 55, 128, 68, 79, 84, 83, 45, 50, 54, 128, 68, 79, 84, 83, 45, 50, 53, 56, 128, 68, 79, 84, 83, 45, 50, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, @@ -4172,379 +4308,390 @@ static unsigned char lexicon[] = { 83, 67, 79, 78, 84, 73, 78, 85, 79, 85, 211, 68, 73, 83, 195, 68, 73, 83, 65, 80, 80, 79, 73, 78, 84, 69, 196, 68, 73, 83, 65, 66, 76, 69, 196, 68, 73, 82, 71, 193, 68, 73, 82, 69, 67, 84, 76, 217, 68, 73, 82, 69, 67, 84, - 73, 79, 78, 65, 204, 68, 73, 80, 84, 69, 128, 68, 73, 80, 80, 69, 82, - 128, 68, 73, 80, 76, 79, 85, 78, 128, 68, 73, 80, 76, 73, 128, 68, 73, - 80, 76, 201, 68, 73, 78, 71, 66, 65, 212, 68, 73, 206, 68, 73, 77, 77, - 73, 78, 71, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 51, 128, 68, - 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 50, 128, 68, 73, 77, 73, 78, 85, - 84, 73, 79, 78, 45, 49, 128, 68, 73, 77, 73, 78, 73, 83, 72, 77, 69, 78, - 84, 128, 68, 73, 77, 73, 68, 73, 193, 68, 73, 77, 69, 78, 83, 73, 79, 78, - 65, 204, 68, 73, 77, 69, 78, 83, 73, 79, 206, 68, 73, 77, 50, 128, 68, - 73, 76, 128, 68, 73, 71, 82, 65, 80, 72, 128, 68, 73, 71, 82, 65, 80, - 200, 68, 73, 71, 82, 65, 77, 77, 79, 211, 68, 73, 71, 82, 65, 77, 77, - 193, 68, 73, 71, 82, 65, 205, 68, 73, 71, 79, 82, 71, 79, 78, 128, 68, - 73, 71, 79, 82, 71, 79, 206, 68, 73, 71, 65, 77, 77, 65, 128, 68, 73, 71, - 193, 68, 73, 70, 84, 79, 71, 71, 79, 211, 68, 73, 70, 79, 78, 73, 65, 83, - 128, 68, 73, 70, 70, 73, 67, 85, 76, 84, 217, 68, 73, 70, 70, 73, 67, 85, - 76, 84, 73, 69, 83, 128, 68, 73, 70, 70, 69, 82, 69, 78, 84, 73, 65, 76, - 128, 68, 73, 70, 70, 69, 82, 69, 78, 67, 197, 68, 73, 70, 65, 84, 128, - 68, 73, 69, 83, 73, 83, 128, 68, 73, 69, 83, 73, 211, 68, 73, 69, 83, 69, - 204, 68, 73, 69, 80, 128, 68, 73, 197, 68, 73, 66, 128, 68, 73, 65, 84, - 79, 78, 79, 206, 68, 73, 65, 84, 79, 78, 73, 75, 201, 68, 73, 65, 83, 84, - 79, 76, 201, 68, 73, 65, 77, 79, 78, 68, 83, 128, 68, 73, 65, 77, 79, 78, - 68, 128, 68, 73, 65, 77, 79, 78, 196, 68, 73, 65, 77, 69, 84, 69, 210, - 68, 73, 65, 76, 89, 84, 73, 75, 65, 128, 68, 73, 65, 76, 89, 84, 73, 75, - 193, 68, 73, 65, 76, 69, 67, 84, 45, 208, 68, 73, 65, 71, 79, 78, 65, 76, - 128, 68, 73, 65, 71, 79, 78, 65, 204, 68, 73, 65, 69, 82, 69, 83, 73, 90, - 69, 196, 68, 73, 65, 69, 82, 69, 83, 73, 83, 45, 82, 73, 78, 71, 128, 68, - 73, 65, 69, 82, 69, 83, 73, 83, 128, 68, 73, 65, 69, 82, 69, 83, 73, 211, - 68, 72, 79, 85, 128, 68, 72, 79, 79, 128, 68, 72, 79, 128, 68, 72, 73, - 73, 128, 68, 72, 73, 128, 68, 72, 72, 85, 128, 68, 72, 72, 79, 79, 128, - 68, 72, 72, 79, 128, 68, 72, 72, 73, 128, 68, 72, 72, 69, 69, 128, 68, - 72, 72, 69, 128, 68, 72, 72, 65, 128, 68, 72, 69, 69, 128, 68, 72, 65, - 82, 77, 65, 128, 68, 72, 65, 77, 69, 68, 72, 128, 68, 72, 65, 76, 69, 84, - 72, 128, 68, 72, 65, 76, 65, 84, 72, 128, 68, 72, 65, 76, 128, 68, 72, - 65, 68, 72, 69, 128, 68, 72, 65, 65, 76, 85, 128, 68, 72, 65, 65, 128, - 68, 72, 65, 128, 68, 69, 90, 200, 68, 69, 89, 84, 69, 82, 79, 213, 68, - 69, 89, 84, 69, 82, 79, 211, 68, 69, 88, 73, 65, 128, 68, 69, 86, 73, 67, - 197, 68, 69, 86, 69, 76, 79, 80, 77, 69, 78, 84, 128, 68, 69, 85, 78, 71, - 128, 68, 69, 83, 75, 84, 79, 208, 68, 69, 83, 203, 68, 69, 83, 73, 71, - 78, 128, 68, 69, 83, 73, 128, 68, 69, 83, 69, 82, 84, 128, 68, 69, 83, - 69, 82, 212, 68, 69, 83, 69, 82, 69, 212, 68, 69, 83, 67, 82, 73, 80, 84, - 73, 79, 206, 68, 69, 83, 67, 69, 78, 68, 73, 78, 199, 68, 69, 83, 67, 69, - 78, 68, 69, 82, 128, 68, 69, 82, 69, 84, 45, 72, 73, 68, 69, 84, 128, 68, - 69, 82, 69, 84, 128, 68, 69, 82, 69, 76, 73, 67, 212, 68, 69, 80, 65, 82, - 84, 85, 82, 69, 128, 68, 69, 80, 65, 82, 84, 77, 69, 78, 212, 68, 69, 80, - 65, 82, 84, 73, 78, 199, 68, 69, 78, 84, 73, 83, 84, 82, 217, 68, 69, 78, - 84, 65, 204, 68, 69, 78, 79, 77, 73, 78, 65, 84, 79, 82, 128, 68, 69, 78, - 79, 77, 73, 78, 65, 84, 79, 210, 68, 69, 78, 78, 69, 78, 128, 68, 69, 78, - 71, 128, 68, 69, 78, 197, 68, 69, 78, 65, 82, 73, 85, 211, 68, 69, 76, - 84, 65, 128, 68, 69, 76, 84, 193, 68, 69, 76, 84, 128, 68, 69, 76, 80, - 72, 73, 195, 68, 69, 76, 73, 86, 69, 82, 217, 68, 69, 76, 73, 86, 69, 82, - 65, 78, 67, 69, 128, 68, 69, 76, 73, 77, 73, 84, 69, 82, 128, 68, 69, 76, - 73, 77, 73, 84, 69, 210, 68, 69, 76, 73, 67, 73, 79, 85, 211, 68, 69, 76, - 69, 84, 69, 128, 68, 69, 76, 69, 84, 197, 68, 69, 75, 65, 128, 68, 69, - 75, 128, 68, 69, 73, 128, 68, 69, 72, 73, 128, 68, 69, 71, 82, 69, 69, - 83, 128, 68, 69, 71, 82, 69, 197, 68, 69, 70, 73, 78, 73, 84, 73, 79, 78, - 128, 68, 69, 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, - 128, 68, 69, 69, 80, 76, 89, 128, 68, 69, 69, 76, 128, 68, 69, 67, 82, - 69, 83, 67, 69, 78, 68, 79, 128, 68, 69, 67, 82, 69, 65, 83, 69, 128, 68, - 69, 67, 82, 69, 65, 83, 197, 68, 69, 67, 79, 82, 65, 84, 73, 86, 197, 68, - 69, 67, 79, 82, 65, 84, 73, 79, 78, 128, 68, 69, 67, 73, 83, 73, 86, 69, - 78, 69, 83, 83, 128, 68, 69, 67, 73, 77, 65, 204, 68, 69, 67, 73, 68, 85, - 79, 85, 211, 68, 69, 67, 69, 77, 66, 69, 82, 128, 68, 69, 67, 65, 89, 69, - 68, 128, 68, 69, 66, 73, 212, 68, 69, 65, 84, 72, 128, 68, 69, 65, 68, - 128, 68, 68, 87, 65, 128, 68, 68, 85, 88, 128, 68, 68, 85, 84, 128, 68, - 68, 85, 82, 88, 128, 68, 68, 85, 82, 128, 68, 68, 85, 80, 128, 68, 68, - 85, 79, 88, 128, 68, 68, 85, 79, 80, 128, 68, 68, 85, 79, 128, 68, 68, - 85, 128, 68, 68, 79, 88, 128, 68, 68, 79, 84, 128, 68, 68, 79, 80, 128, - 68, 68, 79, 65, 128, 68, 68, 73, 88, 128, 68, 68, 73, 84, 128, 68, 68, - 73, 80, 128, 68, 68, 73, 69, 88, 128, 68, 68, 73, 69, 80, 128, 68, 68, - 73, 69, 128, 68, 68, 73, 128, 68, 68, 72, 85, 128, 68, 68, 72, 79, 128, - 68, 68, 72, 73, 128, 68, 68, 72, 69, 69, 128, 68, 68, 72, 69, 128, 68, - 68, 72, 65, 65, 128, 68, 68, 72, 65, 128, 68, 68, 69, 88, 128, 68, 68, - 69, 80, 128, 68, 68, 69, 69, 128, 68, 68, 69, 128, 68, 68, 68, 72, 65, - 128, 68, 68, 68, 65, 128, 68, 68, 65, 89, 65, 78, 78, 65, 128, 68, 68, - 65, 88, 128, 68, 68, 65, 84, 128, 68, 68, 65, 80, 128, 68, 68, 65, 76, - 128, 68, 68, 65, 204, 68, 68, 65, 72, 65, 76, 128, 68, 68, 65, 72, 65, - 204, 68, 68, 65, 65, 128, 68, 67, 83, 128, 68, 67, 72, 69, 128, 68, 67, - 52, 128, 68, 67, 51, 128, 68, 67, 50, 128, 68, 67, 49, 128, 68, 194, 68, - 65, 89, 45, 78, 73, 71, 72, 84, 128, 68, 65, 217, 68, 65, 87, 66, 128, - 68, 65, 86, 73, 89, 65, 78, 73, 128, 68, 65, 86, 73, 68, 128, 68, 65, 84, - 197, 68, 65, 83, 73, 65, 128, 68, 65, 83, 73, 193, 68, 65, 83, 72, 69, - 196, 68, 65, 83, 72, 128, 68, 65, 83, 200, 68, 65, 83, 69, 73, 65, 128, - 68, 65, 82, 84, 128, 68, 65, 82, 75, 69, 78, 73, 78, 71, 128, 68, 65, 82, - 75, 69, 78, 73, 78, 199, 68, 65, 82, 203, 68, 65, 82, 71, 65, 128, 68, - 65, 82, 65, 52, 128, 68, 65, 82, 65, 51, 128, 68, 65, 82, 128, 68, 65, - 80, 45, 80, 82, 65, 205, 68, 65, 80, 45, 80, 73, 201, 68, 65, 80, 45, 77, - 85, 79, 217, 68, 65, 80, 45, 66, 85, 79, 206, 68, 65, 80, 45, 66, 69, - 201, 68, 65, 208, 68, 65, 78, 84, 65, 74, 193, 68, 65, 78, 71, 79, 128, - 68, 65, 78, 71, 128, 68, 65, 78, 199, 68, 65, 78, 68, 65, 128, 68, 65, - 78, 67, 69, 82, 128, 68, 65, 77, 80, 128, 68, 65, 77, 208, 68, 65, 77, - 77, 65, 84, 65, 78, 128, 68, 65, 77, 77, 65, 84, 65, 206, 68, 65, 77, 77, - 65, 128, 68, 65, 77, 77, 193, 68, 65, 77, 65, 82, 85, 128, 68, 65, 76, - 69, 84, 72, 128, 68, 65, 76, 69, 84, 128, 68, 65, 76, 69, 212, 68, 65, - 76, 68, 65, 128, 68, 65, 76, 65, 84, 72, 128, 68, 65, 76, 65, 84, 200, - 68, 65, 76, 65, 84, 128, 68, 65, 73, 82, 128, 68, 65, 73, 78, 71, 128, - 68, 65, 73, 128, 68, 65, 72, 89, 65, 65, 85, 83, 72, 45, 50, 128, 68, 65, - 72, 89, 65, 65, 85, 83, 72, 128, 68, 65, 71, 83, 128, 68, 65, 71, 71, 69, - 82, 128, 68, 65, 71, 71, 69, 210, 68, 65, 71, 69, 83, 72, 128, 68, 65, - 71, 69, 83, 200, 68, 65, 71, 66, 65, 83, 73, 78, 78, 65, 128, 68, 65, 71, - 65, 218, 68, 65, 71, 65, 76, 71, 65, 128, 68, 65, 71, 51, 128, 68, 65, - 199, 68, 65, 69, 78, 71, 128, 68, 65, 69, 199, 68, 65, 68, 128, 68, 65, - 196, 68, 65, 65, 83, 85, 128, 68, 65, 65, 68, 72, 85, 128, 68, 48, 54, - 55, 72, 128, 68, 48, 54, 55, 71, 128, 68, 48, 54, 55, 70, 128, 68, 48, - 54, 55, 69, 128, 68, 48, 54, 55, 68, 128, 68, 48, 54, 55, 67, 128, 68, - 48, 54, 55, 66, 128, 68, 48, 54, 55, 65, 128, 68, 48, 54, 55, 128, 68, - 48, 54, 54, 128, 68, 48, 54, 53, 128, 68, 48, 54, 52, 128, 68, 48, 54, - 51, 128, 68, 48, 54, 50, 128, 68, 48, 54, 49, 128, 68, 48, 54, 48, 128, - 68, 48, 53, 57, 128, 68, 48, 53, 56, 128, 68, 48, 53, 55, 128, 68, 48, - 53, 54, 128, 68, 48, 53, 53, 128, 68, 48, 53, 52, 65, 128, 68, 48, 53, - 52, 128, 68, 48, 53, 51, 128, 68, 48, 53, 50, 65, 128, 68, 48, 53, 50, - 128, 68, 48, 53, 49, 128, 68, 48, 53, 48, 73, 128, 68, 48, 53, 48, 72, - 128, 68, 48, 53, 48, 71, 128, 68, 48, 53, 48, 70, 128, 68, 48, 53, 48, - 69, 128, 68, 48, 53, 48, 68, 128, 68, 48, 53, 48, 67, 128, 68, 48, 53, - 48, 66, 128, 68, 48, 53, 48, 65, 128, 68, 48, 53, 48, 128, 68, 48, 52, - 57, 128, 68, 48, 52, 56, 65, 128, 68, 48, 52, 56, 128, 68, 48, 52, 55, - 128, 68, 48, 52, 54, 65, 128, 68, 48, 52, 54, 128, 68, 48, 52, 53, 128, - 68, 48, 52, 52, 128, 68, 48, 52, 51, 128, 68, 48, 52, 50, 128, 68, 48, - 52, 49, 128, 68, 48, 52, 48, 128, 68, 48, 51, 57, 128, 68, 48, 51, 56, - 128, 68, 48, 51, 55, 128, 68, 48, 51, 54, 128, 68, 48, 51, 53, 128, 68, - 48, 51, 52, 65, 128, 68, 48, 51, 52, 128, 68, 48, 51, 51, 128, 68, 48, - 51, 50, 128, 68, 48, 51, 49, 65, 128, 68, 48, 51, 49, 128, 68, 48, 51, - 48, 128, 68, 48, 50, 57, 128, 68, 48, 50, 56, 128, 68, 48, 50, 55, 65, - 128, 68, 48, 50, 55, 128, 68, 48, 50, 54, 128, 68, 48, 50, 53, 128, 68, - 48, 50, 52, 128, 68, 48, 50, 51, 128, 68, 48, 50, 50, 128, 68, 48, 50, - 49, 128, 68, 48, 50, 48, 128, 68, 48, 49, 57, 128, 68, 48, 49, 56, 128, - 68, 48, 49, 55, 128, 68, 48, 49, 54, 128, 68, 48, 49, 53, 128, 68, 48, - 49, 52, 128, 68, 48, 49, 51, 128, 68, 48, 49, 50, 128, 68, 48, 49, 49, - 128, 68, 48, 49, 48, 128, 68, 48, 48, 57, 128, 68, 48, 48, 56, 65, 128, - 68, 48, 48, 56, 128, 68, 48, 48, 55, 128, 68, 48, 48, 54, 128, 68, 48, - 48, 53, 128, 68, 48, 48, 52, 128, 68, 48, 48, 51, 128, 68, 48, 48, 50, - 128, 68, 48, 48, 49, 128, 67, 89, 88, 128, 67, 89, 84, 128, 67, 89, 82, - 88, 128, 67, 89, 82, 69, 78, 65, 73, 195, 67, 89, 82, 128, 67, 89, 80, - 82, 73, 79, 212, 67, 89, 80, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, - 89, 76, 73, 78, 68, 82, 73, 67, 73, 84, 89, 128, 67, 89, 67, 76, 79, 78, - 69, 128, 67, 89, 65, 89, 128, 67, 89, 65, 87, 128, 67, 89, 65, 128, 67, - 87, 79, 79, 128, 67, 87, 79, 128, 67, 87, 73, 73, 128, 67, 87, 73, 128, - 67, 87, 69, 79, 82, 84, 72, 128, 67, 87, 69, 128, 67, 87, 65, 65, 128, - 67, 85, 88, 128, 67, 85, 85, 128, 67, 85, 212, 67, 85, 83, 84, 79, 77, - 83, 128, 67, 85, 83, 84, 79, 77, 69, 210, 67, 85, 83, 84, 65, 82, 68, - 128, 67, 85, 83, 80, 128, 67, 85, 82, 88, 128, 67, 85, 82, 86, 73, 78, - 199, 67, 85, 82, 86, 69, 196, 67, 85, 82, 86, 69, 128, 67, 85, 82, 86, - 197, 67, 85, 82, 83, 73, 86, 197, 67, 85, 82, 82, 217, 67, 85, 82, 82, - 69, 78, 84, 128, 67, 85, 82, 82, 69, 78, 212, 67, 85, 82, 76, 217, 67, - 85, 82, 76, 128, 67, 85, 82, 128, 67, 85, 80, 128, 67, 85, 79, 88, 128, - 67, 85, 79, 80, 128, 67, 85, 79, 128, 67, 85, 205, 67, 85, 66, 69, 68, - 128, 67, 85, 66, 197, 67, 85, 65, 84, 82, 73, 76, 76, 79, 128, 67, 85, - 65, 84, 82, 73, 76, 76, 207, 67, 85, 65, 205, 67, 85, 128, 67, 83, 73, - 128, 67, 82, 89, 83, 84, 65, 204, 67, 82, 89, 80, 84, 79, 71, 82, 65, 77, - 77, 73, 195, 67, 82, 89, 73, 78, 199, 67, 82, 85, 90, 69, 73, 82, 207, - 67, 82, 85, 67, 73, 70, 79, 82, 205, 67, 82, 85, 67, 73, 66, 76, 69, 45, - 53, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 52, 128, 67, 82, 85, 67, 73, - 66, 76, 69, 45, 51, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 50, 128, 67, - 82, 85, 67, 73, 66, 76, 69, 128, 67, 82, 79, 87, 78, 128, 67, 82, 79, 83, - 83, 73, 78, 71, 128, 67, 82, 79, 83, 83, 73, 78, 199, 67, 82, 79, 83, 83, - 72, 65, 84, 67, 200, 67, 82, 79, 83, 83, 69, 68, 45, 84, 65, 73, 76, 128, - 67, 82, 79, 83, 83, 69, 196, 67, 82, 79, 83, 83, 66, 79, 78, 69, 83, 128, - 67, 82, 79, 83, 83, 128, 67, 82, 79, 83, 211, 67, 82, 79, 80, 128, 67, - 82, 79, 73, 88, 128, 67, 82, 79, 67, 85, 211, 67, 82, 79, 67, 79, 68, 73, - 76, 69, 128, 67, 82, 69, 83, 67, 69, 78, 84, 128, 67, 82, 69, 83, 67, 69, - 78, 212, 67, 82, 69, 68, 73, 212, 67, 82, 69, 65, 84, 73, 86, 197, 67, - 82, 69, 65, 77, 128, 67, 82, 65, 89, 79, 78, 128, 67, 82, 65, 67, 75, 69, - 82, 128, 67, 82, 128, 67, 79, 88, 128, 67, 79, 87, 128, 67, 79, 215, 67, - 79, 86, 69, 82, 128, 67, 79, 85, 80, 76, 197, 67, 79, 85, 78, 84, 73, 78, + 73, 79, 78, 65, 204, 68, 73, 82, 69, 67, 84, 73, 79, 206, 68, 73, 80, 84, + 69, 128, 68, 73, 80, 80, 69, 82, 128, 68, 73, 80, 76, 79, 85, 78, 128, + 68, 73, 80, 76, 73, 128, 68, 73, 80, 76, 201, 68, 73, 78, 71, 66, 65, + 212, 68, 73, 206, 68, 73, 77, 77, 73, 78, 71, 128, 68, 73, 77, 73, 78, + 85, 84, 73, 79, 78, 45, 51, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, + 45, 50, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 49, 128, 68, 73, + 77, 73, 78, 73, 83, 72, 77, 69, 78, 84, 128, 68, 73, 77, 73, 68, 73, 193, + 68, 73, 77, 69, 78, 83, 73, 79, 78, 65, 204, 68, 73, 77, 69, 78, 83, 73, + 79, 206, 68, 73, 77, 50, 128, 68, 73, 77, 178, 68, 73, 76, 128, 68, 73, + 71, 82, 65, 80, 72, 128, 68, 73, 71, 82, 65, 80, 200, 68, 73, 71, 82, 65, + 77, 77, 79, 211, 68, 73, 71, 82, 65, 77, 77, 193, 68, 73, 71, 82, 65, + 205, 68, 73, 71, 79, 82, 71, 79, 78, 128, 68, 73, 71, 79, 82, 71, 79, + 206, 68, 73, 71, 73, 84, 83, 128, 68, 73, 71, 65, 77, 77, 65, 128, 68, + 73, 71, 193, 68, 73, 70, 84, 79, 71, 71, 79, 211, 68, 73, 70, 79, 78, 73, + 65, 83, 128, 68, 73, 70, 70, 73, 67, 85, 76, 84, 217, 68, 73, 70, 70, 73, + 67, 85, 76, 84, 73, 69, 83, 128, 68, 73, 70, 70, 69, 82, 69, 78, 84, 73, + 65, 76, 128, 68, 73, 70, 70, 69, 82, 69, 78, 67, 197, 68, 73, 70, 65, 84, + 128, 68, 73, 69, 83, 73, 83, 128, 68, 73, 69, 83, 73, 211, 68, 73, 69, + 83, 69, 204, 68, 73, 69, 80, 128, 68, 73, 197, 68, 73, 66, 128, 68, 73, + 65, 84, 79, 78, 79, 206, 68, 73, 65, 84, 79, 78, 73, 75, 201, 68, 73, 65, + 83, 84, 79, 76, 201, 68, 73, 65, 77, 79, 78, 68, 83, 128, 68, 73, 65, 77, + 79, 78, 68, 128, 68, 73, 65, 77, 79, 78, 196, 68, 73, 65, 77, 69, 84, 69, + 210, 68, 73, 65, 76, 89, 84, 73, 75, 65, 128, 68, 73, 65, 76, 89, 84, 73, + 75, 193, 68, 73, 65, 76, 69, 67, 84, 45, 208, 68, 73, 65, 71, 79, 78, 65, + 76, 128, 68, 73, 65, 69, 82, 69, 83, 73, 90, 69, 196, 68, 73, 65, 69, 82, + 69, 83, 73, 83, 45, 82, 73, 78, 71, 128, 68, 73, 65, 69, 82, 69, 83, 73, + 83, 128, 68, 73, 65, 69, 82, 69, 83, 73, 211, 68, 72, 79, 85, 128, 68, + 72, 79, 79, 128, 68, 72, 79, 128, 68, 72, 73, 73, 128, 68, 72, 73, 128, + 68, 72, 72, 85, 128, 68, 72, 72, 79, 79, 128, 68, 72, 72, 79, 128, 68, + 72, 72, 73, 128, 68, 72, 72, 69, 69, 128, 68, 72, 72, 69, 128, 68, 72, + 72, 65, 128, 68, 72, 69, 69, 128, 68, 72, 65, 82, 77, 65, 128, 68, 72, + 65, 77, 69, 68, 72, 128, 68, 72, 65, 76, 69, 84, 72, 128, 68, 72, 65, 76, + 65, 84, 72, 128, 68, 72, 65, 76, 128, 68, 72, 65, 68, 72, 69, 128, 68, + 72, 65, 65, 76, 85, 128, 68, 72, 65, 65, 128, 68, 72, 65, 128, 68, 69, + 90, 200, 68, 69, 89, 84, 69, 82, 79, 213, 68, 69, 89, 84, 69, 82, 79, + 211, 68, 69, 88, 73, 65, 128, 68, 69, 86, 73, 67, 197, 68, 69, 86, 69, + 76, 79, 80, 77, 69, 78, 84, 128, 68, 69, 85, 78, 71, 128, 68, 69, 83, 75, + 84, 79, 208, 68, 69, 83, 203, 68, 69, 83, 73, 71, 78, 128, 68, 69, 83, + 73, 128, 68, 69, 83, 69, 82, 84, 128, 68, 69, 83, 69, 82, 212, 68, 69, + 83, 69, 82, 69, 212, 68, 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 68, 69, + 83, 67, 69, 78, 68, 73, 78, 199, 68, 69, 83, 67, 69, 78, 68, 69, 82, 128, + 68, 69, 82, 69, 84, 45, 72, 73, 68, 69, 84, 128, 68, 69, 82, 69, 84, 128, + 68, 69, 82, 69, 76, 73, 67, 212, 68, 69, 80, 84, 72, 128, 68, 69, 80, 65, + 82, 84, 85, 82, 69, 128, 68, 69, 80, 65, 82, 84, 77, 69, 78, 212, 68, 69, + 80, 65, 82, 84, 73, 78, 199, 68, 69, 78, 84, 73, 83, 84, 82, 217, 68, 69, + 78, 84, 65, 204, 68, 69, 78, 79, 77, 73, 78, 65, 84, 79, 82, 128, 68, 69, + 78, 79, 77, 73, 78, 65, 84, 79, 210, 68, 69, 78, 78, 69, 78, 128, 68, 69, + 78, 71, 128, 68, 69, 78, 197, 68, 69, 78, 65, 82, 73, 85, 211, 68, 69, + 76, 84, 65, 128, 68, 69, 76, 84, 193, 68, 69, 76, 84, 128, 68, 69, 76, + 80, 72, 73, 195, 68, 69, 76, 73, 86, 69, 82, 217, 68, 69, 76, 73, 86, 69, + 82, 65, 78, 67, 69, 128, 68, 69, 76, 73, 77, 73, 84, 69, 82, 128, 68, 69, + 76, 73, 77, 73, 84, 69, 210, 68, 69, 76, 73, 67, 73, 79, 85, 211, 68, 69, + 76, 69, 84, 69, 128, 68, 69, 76, 69, 84, 197, 68, 69, 75, 65, 128, 68, + 69, 75, 128, 68, 69, 73, 128, 68, 69, 72, 73, 128, 68, 69, 71, 82, 69, + 69, 83, 128, 68, 69, 71, 82, 69, 197, 68, 69, 70, 73, 78, 73, 84, 73, 79, + 78, 128, 68, 69, 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, + 82, 128, 68, 69, 69, 80, 76, 89, 128, 68, 69, 69, 76, 128, 68, 69, 67, + 82, 69, 83, 67, 69, 78, 68, 79, 128, 68, 69, 67, 82, 69, 65, 83, 69, 128, + 68, 69, 67, 82, 69, 65, 83, 197, 68, 69, 67, 79, 82, 65, 84, 73, 86, 197, + 68, 69, 67, 79, 82, 65, 84, 73, 79, 78, 128, 68, 69, 67, 73, 83, 73, 86, + 69, 78, 69, 83, 83, 128, 68, 69, 67, 73, 77, 65, 204, 68, 69, 67, 73, 68, + 85, 79, 85, 211, 68, 69, 67, 69, 77, 66, 69, 82, 128, 68, 69, 67, 65, 89, + 69, 68, 128, 68, 69, 66, 73, 212, 68, 69, 65, 84, 72, 128, 68, 69, 65, + 68, 128, 68, 68, 87, 65, 128, 68, 68, 85, 88, 128, 68, 68, 85, 84, 128, + 68, 68, 85, 82, 88, 128, 68, 68, 85, 82, 128, 68, 68, 85, 80, 128, 68, + 68, 85, 79, 88, 128, 68, 68, 85, 79, 80, 128, 68, 68, 85, 79, 128, 68, + 68, 85, 128, 68, 68, 79, 88, 128, 68, 68, 79, 84, 128, 68, 68, 79, 80, + 128, 68, 68, 79, 65, 128, 68, 68, 73, 88, 128, 68, 68, 73, 84, 128, 68, + 68, 73, 80, 128, 68, 68, 73, 69, 88, 128, 68, 68, 73, 69, 80, 128, 68, + 68, 73, 69, 128, 68, 68, 73, 128, 68, 68, 72, 85, 128, 68, 68, 72, 79, + 128, 68, 68, 72, 73, 128, 68, 68, 72, 69, 69, 128, 68, 68, 72, 69, 128, + 68, 68, 72, 65, 65, 128, 68, 68, 72, 65, 128, 68, 68, 69, 88, 128, 68, + 68, 69, 80, 128, 68, 68, 69, 69, 128, 68, 68, 69, 128, 68, 68, 68, 72, + 65, 128, 68, 68, 68, 65, 128, 68, 68, 65, 89, 65, 78, 78, 65, 128, 68, + 68, 65, 88, 128, 68, 68, 65, 84, 128, 68, 68, 65, 80, 128, 68, 68, 65, + 76, 128, 68, 68, 65, 204, 68, 68, 65, 72, 65, 76, 128, 68, 68, 65, 72, + 65, 204, 68, 68, 65, 65, 128, 68, 67, 83, 128, 68, 67, 72, 69, 128, 68, + 67, 52, 128, 68, 67, 51, 128, 68, 67, 50, 128, 68, 67, 49, 128, 68, 194, + 68, 65, 89, 45, 78, 73, 71, 72, 84, 128, 68, 65, 217, 68, 65, 87, 66, + 128, 68, 65, 86, 73, 89, 65, 78, 73, 128, 68, 65, 86, 73, 68, 128, 68, + 65, 84, 197, 68, 65, 83, 73, 65, 128, 68, 65, 83, 73, 193, 68, 65, 83, + 72, 69, 196, 68, 65, 83, 72, 128, 68, 65, 83, 200, 68, 65, 83, 69, 73, + 65, 128, 68, 65, 82, 84, 128, 68, 65, 82, 75, 69, 78, 73, 78, 71, 128, + 68, 65, 82, 75, 69, 78, 73, 78, 199, 68, 65, 82, 203, 68, 65, 82, 71, 65, + 128, 68, 65, 82, 65, 52, 128, 68, 65, 82, 65, 51, 128, 68, 65, 82, 128, + 68, 65, 80, 45, 80, 82, 65, 205, 68, 65, 80, 45, 80, 73, 201, 68, 65, 80, + 45, 77, 85, 79, 217, 68, 65, 80, 45, 66, 85, 79, 206, 68, 65, 80, 45, 66, + 69, 201, 68, 65, 208, 68, 65, 78, 84, 65, 74, 193, 68, 65, 78, 71, 79, + 128, 68, 65, 78, 71, 128, 68, 65, 78, 199, 68, 65, 78, 68, 65, 128, 68, + 65, 78, 67, 69, 82, 128, 68, 65, 77, 80, 128, 68, 65, 77, 208, 68, 65, + 77, 77, 65, 84, 65, 78, 128, 68, 65, 77, 77, 65, 84, 65, 206, 68, 65, 77, + 77, 65, 128, 68, 65, 77, 77, 193, 68, 65, 77, 65, 82, 85, 128, 68, 65, + 76, 69, 84, 72, 45, 82, 69, 83, 72, 128, 68, 65, 76, 69, 84, 72, 128, 68, + 65, 76, 69, 84, 128, 68, 65, 76, 69, 212, 68, 65, 76, 68, 65, 128, 68, + 65, 76, 65, 84, 72, 128, 68, 65, 76, 65, 84, 200, 68, 65, 76, 65, 84, + 128, 68, 65, 73, 82, 128, 68, 65, 73, 78, 71, 128, 68, 65, 73, 128, 68, + 65, 72, 89, 65, 65, 85, 83, 72, 45, 50, 128, 68, 65, 72, 89, 65, 65, 85, + 83, 72, 128, 68, 65, 71, 83, 128, 68, 65, 71, 71, 69, 82, 128, 68, 65, + 71, 71, 69, 210, 68, 65, 71, 69, 83, 72, 128, 68, 65, 71, 69, 83, 200, + 68, 65, 71, 66, 65, 83, 73, 78, 78, 65, 128, 68, 65, 71, 65, 218, 68, 65, + 71, 65, 76, 71, 65, 128, 68, 65, 71, 51, 128, 68, 65, 199, 68, 65, 69, + 78, 71, 128, 68, 65, 69, 199, 68, 65, 68, 128, 68, 65, 196, 68, 65, 65, + 83, 85, 128, 68, 65, 65, 68, 72, 85, 128, 68, 48, 54, 55, 72, 128, 68, + 48, 54, 55, 71, 128, 68, 48, 54, 55, 70, 128, 68, 48, 54, 55, 69, 128, + 68, 48, 54, 55, 68, 128, 68, 48, 54, 55, 67, 128, 68, 48, 54, 55, 66, + 128, 68, 48, 54, 55, 65, 128, 68, 48, 54, 55, 128, 68, 48, 54, 54, 128, + 68, 48, 54, 53, 128, 68, 48, 54, 52, 128, 68, 48, 54, 51, 128, 68, 48, + 54, 50, 128, 68, 48, 54, 49, 128, 68, 48, 54, 48, 128, 68, 48, 53, 57, + 128, 68, 48, 53, 56, 128, 68, 48, 53, 55, 128, 68, 48, 53, 54, 128, 68, + 48, 53, 53, 128, 68, 48, 53, 52, 65, 128, 68, 48, 53, 52, 128, 68, 48, + 53, 51, 128, 68, 48, 53, 50, 65, 128, 68, 48, 53, 50, 128, 68, 48, 53, + 49, 128, 68, 48, 53, 48, 73, 128, 68, 48, 53, 48, 72, 128, 68, 48, 53, + 48, 71, 128, 68, 48, 53, 48, 70, 128, 68, 48, 53, 48, 69, 128, 68, 48, + 53, 48, 68, 128, 68, 48, 53, 48, 67, 128, 68, 48, 53, 48, 66, 128, 68, + 48, 53, 48, 65, 128, 68, 48, 53, 48, 128, 68, 48, 52, 57, 128, 68, 48, + 52, 56, 65, 128, 68, 48, 52, 56, 128, 68, 48, 52, 55, 128, 68, 48, 52, + 54, 65, 128, 68, 48, 52, 54, 128, 68, 48, 52, 53, 128, 68, 48, 52, 52, + 128, 68, 48, 52, 51, 128, 68, 48, 52, 50, 128, 68, 48, 52, 49, 128, 68, + 48, 52, 48, 128, 68, 48, 51, 57, 128, 68, 48, 51, 56, 128, 68, 48, 51, + 55, 128, 68, 48, 51, 54, 128, 68, 48, 51, 53, 128, 68, 48, 51, 52, 65, + 128, 68, 48, 51, 52, 128, 68, 48, 51, 51, 128, 68, 48, 51, 50, 128, 68, + 48, 51, 49, 65, 128, 68, 48, 51, 49, 128, 68, 48, 51, 48, 128, 68, 48, + 50, 57, 128, 68, 48, 50, 56, 128, 68, 48, 50, 55, 65, 128, 68, 48, 50, + 55, 128, 68, 48, 50, 54, 128, 68, 48, 50, 53, 128, 68, 48, 50, 52, 128, + 68, 48, 50, 51, 128, 68, 48, 50, 50, 128, 68, 48, 50, 49, 128, 68, 48, + 50, 48, 128, 68, 48, 49, 57, 128, 68, 48, 49, 56, 128, 68, 48, 49, 55, + 128, 68, 48, 49, 54, 128, 68, 48, 49, 53, 128, 68, 48, 49, 52, 128, 68, + 48, 49, 51, 128, 68, 48, 49, 50, 128, 68, 48, 49, 49, 128, 68, 48, 49, + 48, 128, 68, 48, 48, 57, 128, 68, 48, 48, 56, 65, 128, 68, 48, 48, 56, + 128, 68, 48, 48, 55, 128, 68, 48, 48, 54, 128, 68, 48, 48, 53, 128, 68, + 48, 48, 52, 128, 68, 48, 48, 51, 128, 68, 48, 48, 50, 128, 68, 48, 48, + 49, 128, 67, 89, 88, 128, 67, 89, 84, 128, 67, 89, 82, 88, 128, 67, 89, + 82, 69, 78, 65, 73, 195, 67, 89, 82, 128, 67, 89, 80, 82, 73, 79, 212, + 67, 89, 80, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, + 82, 73, 67, 73, 84, 89, 128, 67, 89, 67, 76, 79, 78, 69, 128, 67, 89, 65, + 89, 128, 67, 89, 65, 87, 128, 67, 89, 65, 128, 67, 87, 79, 79, 128, 67, + 87, 79, 128, 67, 87, 73, 73, 128, 67, 87, 73, 128, 67, 87, 69, 79, 82, + 84, 72, 128, 67, 87, 69, 128, 67, 87, 65, 65, 128, 67, 85, 88, 128, 67, + 85, 85, 128, 67, 85, 212, 67, 85, 83, 84, 79, 77, 83, 128, 67, 85, 83, + 84, 79, 77, 69, 210, 67, 85, 83, 84, 65, 82, 68, 128, 67, 85, 83, 80, + 128, 67, 85, 82, 88, 128, 67, 85, 82, 86, 73, 78, 199, 67, 85, 82, 86, + 69, 68, 128, 67, 85, 82, 86, 69, 196, 67, 85, 82, 86, 69, 128, 67, 85, + 82, 86, 197, 67, 85, 82, 82, 217, 67, 85, 82, 82, 69, 78, 84, 128, 67, + 85, 82, 82, 69, 78, 212, 67, 85, 82, 76, 217, 67, 85, 82, 76, 128, 67, + 85, 82, 128, 67, 85, 80, 80, 69, 68, 128, 67, 85, 80, 80, 69, 196, 67, + 85, 79, 88, 128, 67, 85, 79, 80, 128, 67, 85, 79, 128, 67, 85, 205, 67, + 85, 66, 69, 68, 128, 67, 85, 66, 197, 67, 85, 65, 84, 82, 73, 76, 76, 79, + 128, 67, 85, 65, 84, 82, 73, 76, 76, 207, 67, 85, 65, 205, 67, 85, 128, + 67, 83, 73, 128, 67, 82, 89, 83, 84, 65, 204, 67, 82, 89, 80, 84, 79, 71, + 82, 65, 77, 77, 73, 195, 67, 82, 89, 73, 78, 199, 67, 82, 85, 90, 69, 73, + 82, 207, 67, 82, 85, 67, 73, 70, 79, 82, 205, 67, 82, 85, 67, 73, 66, 76, + 69, 45, 53, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 52, 128, 67, 82, 85, + 67, 73, 66, 76, 69, 45, 51, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 50, + 128, 67, 82, 85, 67, 73, 66, 76, 69, 128, 67, 82, 79, 87, 78, 128, 67, + 82, 79, 83, 83, 73, 78, 71, 128, 67, 82, 79, 83, 83, 73, 78, 199, 67, 82, + 79, 83, 83, 72, 65, 84, 67, 200, 67, 82, 79, 83, 83, 69, 68, 45, 84, 65, + 73, 76, 128, 67, 82, 79, 83, 83, 69, 68, 128, 67, 82, 79, 83, 83, 69, + 196, 67, 82, 79, 83, 83, 66, 79, 78, 69, 83, 128, 67, 82, 79, 83, 83, + 128, 67, 82, 79, 83, 211, 67, 82, 79, 80, 128, 67, 82, 79, 73, 88, 128, + 67, 82, 79, 67, 85, 211, 67, 82, 79, 67, 79, 68, 73, 76, 69, 128, 67, 82, + 73, 67, 75, 69, 212, 67, 82, 69, 83, 67, 69, 78, 84, 83, 128, 67, 82, 69, + 83, 67, 69, 78, 84, 128, 67, 82, 69, 83, 67, 69, 78, 212, 67, 82, 69, 68, + 73, 212, 67, 82, 69, 65, 84, 73, 86, 197, 67, 82, 69, 65, 77, 128, 67, + 82, 65, 89, 79, 78, 128, 67, 82, 65, 67, 75, 69, 82, 128, 67, 82, 65, 66, + 128, 67, 82, 128, 67, 79, 88, 128, 67, 79, 87, 128, 67, 79, 215, 67, 79, + 86, 69, 82, 128, 67, 79, 85, 80, 76, 197, 67, 79, 85, 78, 84, 73, 78, 199, 67, 79, 85, 78, 84, 69, 82, 83, 73, 78, 75, 128, 67, 79, 85, 78, 84, 69, 82, 66, 79, 82, 69, 128, 67, 79, 85, 78, 67, 73, 204, 67, 79, 85, 67, 200, 67, 79, 84, 128, 67, 79, 82, 82, 69, 83, 80, 79, 78, 68, 211, 67, 79, 82, 82, 69, 67, 84, 128, 67, 79, 82, 80, 83, 69, 128, 67, 79, 82, 80, 79, 82, 65, 84, 73, 79, 78, 128, 67, 79, 82, 79, 78, 73, 83, 128, 67, 79, 82, 78, 69, 82, 83, 128, 67, 79, 82, 78, 69, 82, 128, 67, 79, 82, 78, 69, - 210, 67, 79, 80, 89, 82, 73, 71, 72, 84, 128, 67, 79, 80, 89, 82, 73, 71, - 72, 212, 67, 79, 80, 89, 128, 67, 79, 80, 82, 79, 68, 85, 67, 84, 128, - 67, 79, 80, 80, 69, 82, 45, 50, 128, 67, 79, 80, 80, 69, 82, 128, 67, 79, - 80, 128, 67, 79, 79, 76, 128, 67, 79, 79, 75, 73, 78, 71, 128, 67, 79, - 79, 75, 73, 69, 128, 67, 79, 79, 75, 69, 196, 67, 79, 79, 128, 67, 79, - 78, 86, 69, 82, 71, 73, 78, 199, 67, 79, 78, 86, 69, 78, 73, 69, 78, 67, - 197, 67, 79, 78, 84, 82, 79, 76, 128, 67, 79, 78, 84, 82, 79, 204, 67, - 79, 78, 84, 82, 65, 82, 73, 69, 84, 89, 128, 67, 79, 78, 84, 82, 65, 67, - 84, 73, 79, 78, 128, 67, 79, 78, 84, 79, 85, 82, 69, 196, 67, 79, 78, 84, - 79, 85, 210, 67, 79, 78, 84, 73, 78, 85, 73, 78, 199, 67, 79, 78, 84, 69, - 78, 84, 73, 79, 78, 128, 67, 79, 78, 84, 69, 77, 80, 76, 65, 84, 73, 79, - 78, 128, 67, 79, 78, 84, 65, 73, 78, 211, 67, 79, 78, 84, 65, 73, 78, 73, - 78, 199, 67, 79, 78, 84, 65, 73, 206, 67, 79, 78, 84, 65, 67, 84, 128, - 67, 79, 78, 83, 84, 82, 85, 67, 84, 73, 79, 78, 128, 67, 79, 78, 83, 84, - 82, 85, 67, 84, 73, 79, 206, 67, 79, 78, 83, 84, 65, 78, 84, 128, 67, 79, - 78, 83, 84, 65, 78, 212, 67, 79, 78, 83, 84, 65, 78, 67, 89, 128, 67, 79, - 78, 83, 69, 67, 85, 84, 73, 86, 197, 67, 79, 78, 74, 85, 78, 67, 84, 73, - 79, 78, 128, 67, 79, 78, 74, 85, 71, 65, 84, 197, 67, 79, 78, 74, 79, 73, - 78, 73, 78, 199, 67, 79, 78, 73, 67, 65, 204, 67, 79, 78, 71, 82, 85, 69, - 78, 212, 67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 128, 67, - 79, 78, 70, 85, 83, 69, 196, 67, 79, 78, 70, 79, 85, 78, 68, 69, 196, 67, - 79, 78, 70, 76, 73, 67, 84, 128, 67, 79, 78, 70, 69, 84, 84, 201, 67, 79, - 78, 67, 65, 86, 69, 45, 83, 73, 68, 69, 196, 67, 79, 78, 67, 65, 86, 69, - 45, 80, 79, 73, 78, 84, 69, 196, 67, 79, 77, 80, 85, 84, 69, 82, 83, 128, - 67, 79, 77, 80, 85, 84, 69, 82, 128, 67, 79, 77, 80, 82, 69, 83, 83, 73, - 79, 78, 128, 67, 79, 77, 80, 82, 69, 83, 83, 69, 196, 67, 79, 77, 80, 79, - 83, 73, 84, 73, 79, 78, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 206, - 67, 79, 77, 80, 76, 73, 65, 78, 67, 69, 128, 67, 79, 77, 80, 76, 69, 84, - 73, 79, 78, 128, 67, 79, 77, 80, 76, 69, 84, 69, 68, 128, 67, 79, 77, 80, - 76, 69, 77, 69, 78, 84, 128, 67, 79, 77, 80, 65, 82, 69, 128, 67, 79, 77, - 77, 79, 206, 67, 79, 77, 77, 69, 82, 67, 73, 65, 204, 67, 79, 77, 77, 65, - 78, 68, 128, 67, 79, 77, 77, 65, 128, 67, 79, 77, 77, 193, 67, 79, 77, - 69, 84, 128, 67, 79, 77, 66, 128, 67, 79, 76, 85, 77, 78, 128, 67, 79, - 76, 79, 82, 128, 67, 79, 76, 76, 73, 83, 73, 79, 206, 67, 79, 76, 76, - 128, 67, 79, 76, 196, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, 78, 71, - 128, 67, 79, 69, 78, 199, 67, 79, 68, 65, 128, 67, 79, 67, 75, 84, 65, - 73, 204, 67, 79, 65, 83, 84, 69, 82, 128, 67, 79, 65, 128, 67, 79, 128, - 67, 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 83, - 128, 67, 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, - 67, 76, 85, 194, 67, 76, 79, 86, 69, 82, 128, 67, 76, 79, 85, 68, 128, - 67, 76, 79, 85, 196, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, 79, 84, 72, - 128, 67, 76, 79, 83, 69, 84, 128, 67, 76, 79, 83, 69, 78, 69, 83, 83, - 128, 67, 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 197, 67, 76, 79, 67, - 75, 87, 73, 83, 197, 67, 76, 79, 67, 203, 67, 76, 73, 86, 73, 83, 128, - 67, 76, 73, 80, 66, 79, 65, 82, 68, 128, 67, 76, 73, 78, 75, 73, 78, 199, - 67, 76, 73, 78, 71, 73, 78, 199, 67, 76, 73, 77, 65, 67, 85, 83, 128, 67, - 76, 73, 70, 70, 128, 67, 76, 73, 67, 75, 128, 67, 76, 69, 70, 45, 50, - 128, 67, 76, 69, 70, 45, 49, 128, 67, 76, 69, 70, 128, 67, 76, 69, 198, - 67, 76, 69, 65, 86, 69, 82, 128, 67, 76, 69, 65, 210, 67, 76, 65, 87, - 128, 67, 76, 65, 83, 83, 73, 67, 65, 204, 67, 76, 65, 80, 80, 73, 78, - 199, 67, 76, 65, 80, 80, 69, 210, 67, 76, 65, 78, 128, 67, 76, 65, 206, - 67, 76, 65, 77, 83, 72, 69, 76, 204, 67, 76, 65, 73, 77, 128, 67, 76, - 128, 67, 73, 88, 128, 67, 73, 86, 73, 76, 73, 65, 78, 128, 67, 73, 84, - 89, 83, 67, 65, 80, 69, 128, 67, 73, 84, 89, 83, 67, 65, 80, 197, 67, 73, - 84, 65, 84, 73, 79, 206, 67, 73, 84, 128, 67, 73, 82, 67, 85, 211, 67, - 73, 82, 67, 85, 77, 70, 76, 69, 88, 128, 67, 73, 82, 67, 85, 77, 70, 76, - 69, 216, 67, 73, 82, 67, 85, 76, 65, 84, 73, 79, 206, 67, 73, 82, 67, 76, - 73, 78, 199, 67, 73, 82, 67, 76, 69, 83, 128, 67, 73, 82, 67, 76, 69, - 128, 67, 73, 80, 128, 67, 73, 78, 78, 65, 66, 65, 82, 128, 67, 73, 78, - 69, 77, 65, 128, 67, 73, 206, 67, 73, 205, 67, 73, 73, 128, 67, 73, 69, - 88, 128, 67, 73, 69, 85, 67, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, - 128, 67, 73, 69, 85, 67, 45, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, - 45, 73, 69, 85, 78, 71, 128, 67, 73, 69, 85, 195, 67, 73, 69, 84, 128, - 67, 73, 69, 80, 128, 67, 73, 69, 128, 67, 72, 89, 88, 128, 67, 72, 89, - 84, 128, 67, 72, 89, 82, 88, 128, 67, 72, 89, 82, 128, 67, 72, 89, 80, - 128, 67, 72, 87, 86, 128, 67, 72, 85, 88, 128, 67, 72, 85, 82, 88, 128, - 67, 72, 85, 82, 67, 72, 128, 67, 72, 85, 82, 128, 67, 72, 85, 80, 128, - 67, 72, 85, 79, 88, 128, 67, 72, 85, 79, 84, 128, 67, 72, 85, 79, 80, - 128, 67, 72, 85, 79, 128, 67, 72, 85, 76, 65, 128, 67, 72, 85, 128, 67, - 72, 82, 89, 83, 65, 78, 84, 72, 69, 77, 85, 77, 128, 67, 72, 82, 79, 78, - 79, 85, 128, 67, 72, 82, 79, 78, 79, 78, 128, 67, 72, 82, 79, 77, 193, - 67, 72, 82, 79, 193, 67, 72, 82, 73, 86, 73, 128, 67, 72, 82, 73, 83, 84, - 77, 65, 83, 128, 67, 72, 82, 73, 83, 84, 77, 65, 211, 67, 72, 79, 89, - 128, 67, 72, 79, 88, 128, 67, 72, 79, 84, 128, 67, 72, 79, 82, 69, 86, - 77, 193, 67, 72, 79, 80, 128, 67, 72, 79, 75, 69, 128, 67, 72, 79, 69, - 128, 67, 72, 79, 67, 79, 76, 65, 84, 197, 67, 72, 79, 65, 128, 67, 72, - 207, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, - 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, 69, 85, - 67, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 73, 79, 83, 128, 67, 72, 73, - 84, 85, 69, 85, 77, 67, 73, 69, 85, 67, 128, 67, 72, 73, 84, 85, 69, 85, - 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 72, 73, 82, 79, 78, 128, 67, 72, - 73, 82, 69, 84, 128, 67, 72, 73, 80, 77, 85, 78, 75, 128, 67, 72, 73, 78, - 79, 79, 203, 67, 72, 73, 78, 71, 128, 67, 72, 73, 78, 69, 83, 197, 67, - 72, 73, 78, 128, 67, 72, 73, 77, 69, 128, 67, 72, 73, 76, 76, 213, 67, - 72, 73, 76, 68, 82, 69, 206, 67, 72, 73, 76, 68, 128, 67, 72, 73, 76, - 128, 67, 72, 73, 75, 201, 67, 72, 73, 69, 85, 67, 72, 45, 75, 72, 73, 69, - 85, 75, 72, 128, 67, 72, 73, 69, 85, 67, 72, 45, 72, 73, 69, 85, 72, 128, - 67, 72, 73, 69, 85, 67, 200, 67, 72, 73, 67, 75, 69, 78, 128, 67, 72, 73, - 67, 75, 128, 67, 72, 73, 128, 67, 72, 201, 67, 72, 72, 65, 128, 67, 72, - 69, 88, 128, 67, 72, 69, 86, 82, 79, 206, 67, 72, 69, 84, 128, 67, 72, - 69, 83, 84, 78, 85, 84, 128, 67, 72, 69, 83, 211, 67, 72, 69, 82, 89, + 210, 67, 79, 82, 75, 128, 67, 79, 80, 89, 82, 73, 71, 72, 84, 128, 67, + 79, 80, 89, 82, 73, 71, 72, 212, 67, 79, 80, 89, 128, 67, 79, 80, 82, 79, + 68, 85, 67, 84, 128, 67, 79, 80, 80, 69, 82, 45, 50, 128, 67, 79, 80, 80, + 69, 82, 128, 67, 79, 80, 128, 67, 79, 79, 76, 128, 67, 79, 79, 75, 73, + 78, 71, 128, 67, 79, 79, 75, 73, 69, 128, 67, 79, 79, 75, 69, 196, 67, + 79, 79, 128, 67, 79, 78, 86, 69, 82, 71, 73, 78, 199, 67, 79, 78, 86, 69, + 78, 73, 69, 78, 67, 197, 67, 79, 78, 84, 82, 79, 76, 128, 67, 79, 78, 84, + 82, 79, 204, 67, 79, 78, 84, 82, 65, 82, 73, 69, 84, 89, 128, 67, 79, 78, + 84, 82, 65, 67, 84, 73, 79, 78, 128, 67, 79, 78, 84, 79, 85, 82, 69, 196, + 67, 79, 78, 84, 79, 85, 210, 67, 79, 78, 84, 73, 78, 85, 73, 78, 199, 67, + 79, 78, 84, 73, 78, 85, 65, 84, 73, 79, 206, 67, 79, 78, 84, 69, 78, 84, + 73, 79, 78, 128, 67, 79, 78, 84, 69, 77, 80, 76, 65, 84, 73, 79, 78, 128, + 67, 79, 78, 84, 65, 73, 78, 211, 67, 79, 78, 84, 65, 73, 78, 73, 78, 199, + 67, 79, 78, 84, 65, 73, 206, 67, 79, 78, 84, 65, 67, 84, 128, 67, 79, 78, + 83, 84, 82, 85, 67, 84, 73, 79, 78, 128, 67, 79, 78, 83, 84, 82, 85, 67, + 84, 73, 79, 206, 67, 79, 78, 83, 84, 65, 78, 84, 128, 67, 79, 78, 83, 84, + 65, 78, 212, 67, 79, 78, 83, 84, 65, 78, 67, 89, 128, 67, 79, 78, 83, 69, + 67, 85, 84, 73, 86, 197, 67, 79, 78, 74, 85, 78, 67, 84, 73, 79, 78, 128, + 67, 79, 78, 74, 85, 71, 65, 84, 197, 67, 79, 78, 74, 79, 73, 78, 73, 78, + 199, 67, 79, 78, 74, 79, 73, 78, 69, 68, 128, 67, 79, 78, 74, 79, 73, 78, + 69, 196, 67, 79, 78, 73, 67, 65, 204, 67, 79, 78, 71, 82, 85, 69, 78, + 212, 67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 128, 67, 79, + 78, 70, 85, 83, 69, 196, 67, 79, 78, 70, 79, 85, 78, 68, 69, 196, 67, 79, + 78, 70, 76, 73, 67, 84, 128, 67, 79, 78, 70, 69, 84, 84, 201, 67, 79, 78, + 67, 65, 86, 69, 45, 83, 73, 68, 69, 196, 67, 79, 78, 67, 65, 86, 69, 45, + 80, 79, 73, 78, 84, 69, 196, 67, 79, 77, 80, 85, 84, 69, 82, 83, 128, 67, + 79, 77, 80, 85, 84, 69, 82, 128, 67, 79, 77, 80, 82, 69, 83, 83, 73, 79, + 78, 128, 67, 79, 77, 80, 82, 69, 83, 83, 69, 196, 67, 79, 77, 80, 79, 83, + 73, 84, 73, 79, 78, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 206, 67, + 79, 77, 80, 76, 73, 65, 78, 67, 69, 128, 67, 79, 77, 80, 76, 69, 84, 73, + 79, 78, 128, 67, 79, 77, 80, 76, 69, 84, 69, 68, 128, 67, 79, 77, 80, 76, + 69, 77, 69, 78, 84, 128, 67, 79, 77, 80, 65, 82, 69, 128, 67, 79, 77, 77, + 79, 206, 67, 79, 77, 77, 69, 82, 67, 73, 65, 204, 67, 79, 77, 77, 65, 78, + 68, 128, 67, 79, 77, 77, 65, 128, 67, 79, 77, 77, 193, 67, 79, 77, 69, + 84, 128, 67, 79, 77, 66, 73, 78, 69, 68, 128, 67, 79, 77, 66, 73, 78, 65, + 84, 73, 79, 78, 128, 67, 79, 77, 66, 128, 67, 79, 76, 85, 77, 78, 128, + 67, 79, 76, 79, 82, 128, 67, 79, 76, 76, 73, 83, 73, 79, 206, 67, 79, 76, + 76, 128, 67, 79, 76, 196, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, 78, + 71, 128, 67, 79, 69, 78, 199, 67, 79, 68, 65, 128, 67, 79, 67, 75, 84, + 65, 73, 204, 67, 79, 65, 83, 84, 69, 82, 128, 67, 79, 65, 128, 67, 77, + 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 83, 128, 67, + 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, + 194, 67, 76, 79, 86, 69, 82, 128, 67, 76, 79, 85, 68, 128, 67, 76, 79, + 85, 196, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, 79, 84, 72, 128, 67, + 76, 79, 83, 69, 84, 128, 67, 76, 79, 83, 69, 78, 69, 83, 83, 128, 67, 76, + 79, 83, 69, 68, 128, 67, 76, 79, 83, 197, 67, 76, 79, 67, 75, 87, 73, 83, + 197, 67, 76, 79, 67, 203, 67, 76, 73, 86, 73, 83, 128, 67, 76, 73, 80, + 66, 79, 65, 82, 68, 128, 67, 76, 73, 78, 75, 73, 78, 199, 67, 76, 73, 78, + 71, 73, 78, 199, 67, 76, 73, 77, 65, 67, 85, 83, 128, 67, 76, 73, 70, 70, + 128, 67, 76, 73, 67, 75, 128, 67, 76, 69, 70, 45, 50, 128, 67, 76, 69, + 70, 45, 49, 128, 67, 76, 69, 70, 128, 67, 76, 69, 198, 67, 76, 69, 65, + 86, 69, 82, 128, 67, 76, 69, 65, 210, 67, 76, 65, 83, 83, 73, 67, 65, + 204, 67, 76, 65, 80, 80, 73, 78, 199, 67, 76, 65, 80, 80, 69, 210, 67, + 76, 65, 78, 128, 67, 76, 65, 206, 67, 76, 65, 77, 83, 72, 69, 76, 204, + 67, 76, 65, 73, 77, 128, 67, 76, 128, 67, 73, 88, 128, 67, 73, 86, 73, + 76, 73, 65, 78, 128, 67, 73, 84, 89, 83, 67, 65, 80, 69, 128, 67, 73, 84, + 89, 83, 67, 65, 80, 197, 67, 73, 84, 201, 67, 73, 84, 65, 84, 73, 79, + 206, 67, 73, 84, 128, 67, 73, 82, 67, 85, 211, 67, 73, 82, 67, 85, 77, + 70, 76, 69, 88, 128, 67, 73, 82, 67, 85, 77, 70, 76, 69, 216, 67, 73, 82, + 67, 85, 76, 65, 84, 73, 79, 206, 67, 73, 82, 67, 76, 73, 78, 71, 128, 67, + 73, 82, 67, 76, 73, 78, 199, 67, 73, 82, 67, 76, 69, 83, 128, 67, 73, 82, + 67, 76, 69, 211, 67, 73, 82, 67, 76, 69, 68, 128, 67, 73, 80, 128, 67, + 73, 78, 78, 65, 66, 65, 82, 128, 67, 73, 78, 69, 77, 65, 128, 67, 73, + 206, 67, 73, 205, 67, 73, 73, 128, 67, 73, 69, 88, 128, 67, 73, 69, 85, + 67, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, + 45, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, 45, 73, 69, 85, 78, 71, + 128, 67, 73, 69, 85, 195, 67, 73, 69, 84, 128, 67, 73, 69, 80, 128, 67, + 73, 69, 128, 67, 72, 89, 88, 128, 67, 72, 89, 84, 128, 67, 72, 89, 82, + 88, 128, 67, 72, 89, 82, 128, 67, 72, 89, 80, 128, 67, 72, 87, 86, 128, + 67, 72, 85, 88, 128, 67, 72, 85, 82, 88, 128, 67, 72, 85, 82, 67, 72, + 128, 67, 72, 85, 82, 128, 67, 72, 85, 80, 128, 67, 72, 85, 79, 88, 128, + 67, 72, 85, 79, 84, 128, 67, 72, 85, 79, 80, 128, 67, 72, 85, 79, 128, + 67, 72, 85, 76, 65, 128, 67, 72, 85, 128, 67, 72, 82, 89, 83, 65, 78, 84, + 72, 69, 77, 85, 77, 128, 67, 72, 82, 79, 78, 79, 85, 128, 67, 72, 82, 79, + 78, 79, 78, 128, 67, 72, 82, 79, 77, 193, 67, 72, 82, 79, 193, 67, 72, + 82, 73, 86, 73, 128, 67, 72, 82, 73, 83, 84, 77, 65, 83, 128, 67, 72, 82, + 73, 83, 84, 77, 65, 211, 67, 72, 79, 89, 128, 67, 72, 79, 88, 128, 67, + 72, 79, 84, 128, 67, 72, 79, 82, 69, 86, 77, 193, 67, 72, 79, 80, 128, + 67, 72, 79, 75, 69, 128, 67, 72, 79, 69, 128, 67, 72, 79, 67, 79, 76, 65, + 84, 197, 67, 72, 79, 65, 128, 67, 72, 207, 67, 72, 73, 84, 85, 69, 85, + 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 67, 72, 73, 84, 85, 69, 85, + 77, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 67, 72, 73, 84, 85, 69, + 85, 77, 83, 73, 79, 83, 128, 67, 72, 73, 84, 85, 69, 85, 77, 67, 73, 69, + 85, 67, 128, 67, 72, 73, 84, 85, 69, 85, 77, 67, 72, 73, 69, 85, 67, 72, + 128, 67, 72, 73, 82, 79, 78, 128, 67, 72, 73, 82, 69, 84, 128, 67, 72, + 73, 80, 77, 85, 78, 75, 128, 67, 72, 73, 78, 79, 79, 203, 67, 72, 73, 78, + 71, 128, 67, 72, 73, 78, 69, 83, 197, 67, 72, 73, 78, 128, 67, 72, 73, + 77, 69, 128, 67, 72, 73, 76, 76, 213, 67, 72, 73, 76, 68, 82, 69, 206, + 67, 72, 73, 76, 68, 128, 67, 72, 73, 76, 128, 67, 72, 73, 75, 201, 67, + 72, 73, 69, 85, 67, 72, 45, 75, 72, 73, 69, 85, 75, 72, 128, 67, 72, 73, + 69, 85, 67, 72, 45, 72, 73, 69, 85, 72, 128, 67, 72, 73, 69, 85, 67, 200, + 67, 72, 73, 67, 75, 69, 78, 128, 67, 72, 73, 67, 75, 128, 67, 72, 73, + 128, 67, 72, 201, 67, 72, 72, 65, 128, 67, 72, 69, 88, 128, 67, 72, 69, + 86, 82, 79, 206, 67, 72, 69, 84, 128, 67, 72, 69, 83, 84, 78, 85, 84, + 128, 67, 72, 69, 83, 84, 128, 67, 72, 69, 83, 211, 67, 72, 69, 82, 89, 128, 67, 72, 69, 82, 82, 217, 67, 72, 69, 82, 82, 73, 69, 83, 128, 67, 72, 69, 81, 85, 69, 82, 69, 196, 67, 72, 69, 80, 128, 67, 72, 69, 206, 67, 72, 69, 73, 78, 65, 80, 128, 67, 72, 69, 73, 75, 72, 69, 73, 128, 67, - 72, 69, 73, 75, 72, 65, 78, 128, 67, 72, 69, 69, 82, 73, 78, 199, 67, 72, - 69, 69, 77, 128, 67, 72, 69, 69, 128, 67, 72, 69, 67, 75, 69, 210, 67, - 72, 69, 67, 75, 128, 67, 72, 69, 67, 203, 67, 72, 197, 67, 72, 65, 88, - 128, 67, 72, 65, 86, 73, 89, 65, 78, 73, 128, 67, 72, 65, 84, 84, 65, 87, - 65, 128, 67, 72, 65, 84, 128, 67, 72, 65, 82, 84, 128, 67, 72, 65, 82, - 212, 67, 72, 65, 82, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, 67, - 72, 65, 82, 65, 67, 84, 69, 82, 83, 128, 67, 72, 65, 82, 65, 67, 84, 69, - 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 84, 69, 82, 128, 67, 72, - 65, 80, 128, 67, 72, 65, 78, 71, 128, 67, 72, 65, 78, 128, 67, 72, 65, - 77, 75, 79, 128, 67, 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65, 77, 73, - 76, 73, 128, 67, 72, 65, 75, 77, 193, 67, 72, 65, 73, 82, 128, 67, 72, - 65, 73, 78, 83, 128, 67, 72, 65, 68, 65, 128, 67, 72, 65, 196, 67, 72, - 65, 65, 128, 67, 71, 74, 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 128, - 67, 69, 82, 69, 77, 79, 78, 89, 128, 67, 69, 82, 69, 75, 128, 67, 69, 82, - 45, 87, 65, 128, 67, 69, 80, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, - 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, - 73, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 67, 69, 79, - 78, 71, 67, 72, 73, 69, 85, 77, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, - 67, 72, 73, 69, 85, 77, 67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, - 72, 73, 69, 85, 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 69, 78, 84, 85, - 82, 73, 65, 204, 67, 69, 78, 84, 82, 69, 76, 73, 78, 197, 67, 69, 78, 84, - 82, 69, 68, 128, 67, 69, 78, 84, 82, 69, 196, 67, 69, 78, 84, 82, 69, - 128, 67, 69, 78, 84, 82, 197, 67, 69, 78, 84, 82, 65, 76, 73, 90, 65, 84, - 73, 79, 206, 67, 69, 78, 128, 67, 69, 76, 84, 73, 195, 67, 69, 76, 83, - 73, 85, 83, 128, 67, 69, 76, 69, 66, 82, 65, 84, 73, 79, 78, 128, 67, 69, - 73, 82, 84, 128, 67, 69, 73, 76, 73, 78, 71, 128, 67, 69, 69, 86, 128, - 67, 69, 69, 66, 128, 67, 69, 69, 128, 67, 69, 68, 73, 76, 76, 65, 128, - 67, 69, 68, 73, 76, 76, 193, 67, 69, 68, 201, 67, 69, 67, 69, 75, 128, - 67, 69, 67, 65, 75, 128, 67, 69, 67, 65, 203, 67, 69, 65, 76, 67, 128, - 67, 67, 85, 128, 67, 67, 79, 128, 67, 67, 73, 128, 67, 67, 72, 85, 128, - 67, 67, 72, 79, 128, 67, 67, 72, 73, 128, 67, 67, 72, 72, 85, 128, 67, - 67, 72, 72, 79, 128, 67, 67, 72, 72, 73, 128, 67, 67, 72, 72, 69, 69, - 128, 67, 67, 72, 72, 69, 128, 67, 67, 72, 72, 65, 65, 128, 67, 67, 72, - 72, 65, 128, 67, 67, 72, 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, 72, - 65, 65, 128, 67, 67, 72, 65, 128, 67, 67, 72, 128, 67, 67, 69, 69, 128, - 67, 67, 69, 128, 67, 67, 65, 65, 128, 67, 67, 65, 128, 67, 65, 89, 78, - 128, 67, 65, 89, 65, 78, 78, 65, 128, 67, 65, 88, 128, 67, 65, 86, 69, - 128, 67, 65, 85, 84, 73, 79, 206, 67, 65, 85, 76, 68, 82, 79, 78, 128, - 67, 65, 85, 68, 65, 128, 67, 65, 85, 67, 65, 83, 73, 65, 206, 67, 65, 85, - 128, 67, 65, 84, 65, 87, 65, 128, 67, 65, 84, 128, 67, 65, 212, 67, 65, - 83, 84, 76, 69, 128, 67, 65, 83, 75, 69, 212, 67, 65, 82, 89, 83, 84, 73, - 65, 206, 67, 65, 82, 84, 82, 73, 68, 71, 69, 128, 67, 65, 82, 84, 128, - 67, 65, 82, 211, 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, 80, 69, 78, - 84, 82, 217, 67, 65, 82, 208, 67, 65, 82, 79, 85, 83, 69, 204, 67, 65, - 82, 79, 78, 128, 67, 65, 82, 79, 206, 67, 65, 82, 73, 203, 67, 65, 82, - 73, 65, 206, 67, 65, 82, 69, 84, 128, 67, 65, 82, 69, 212, 67, 65, 82, - 197, 67, 65, 82, 68, 83, 128, 67, 65, 82, 68, 128, 67, 65, 82, 128, 67, - 65, 210, 67, 65, 80, 85, 212, 67, 65, 80, 84, 73, 86, 69, 128, 67, 65, - 80, 82, 73, 67, 79, 82, 78, 128, 67, 65, 80, 80, 69, 196, 67, 65, 80, 79, - 128, 67, 65, 80, 73, 84, 85, 76, 85, 77, 128, 67, 65, 80, 73, 84, 65, 76, - 128, 67, 65, 78, 84, 73, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 199, - 67, 65, 78, 68, 89, 128, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 85, 128, - 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 213, 67, 65, 78, 68, 82, 65, 128, - 67, 65, 78, 68, 82, 193, 67, 65, 78, 68, 76, 69, 128, 67, 65, 78, 67, 69, - 82, 128, 67, 65, 78, 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 67, - 69, 76, 128, 67, 65, 78, 67, 69, 204, 67, 65, 78, 128, 67, 65, 77, 80, - 73, 78, 71, 128, 67, 65, 77, 78, 85, 195, 67, 65, 77, 69, 82, 65, 128, - 67, 65, 77, 69, 82, 193, 67, 65, 77, 69, 76, 128, 67, 65, 76, 89, 65, - 128, 67, 65, 76, 89, 193, 67, 65, 76, 88, 128, 67, 65, 76, 76, 128, 67, - 65, 76, 69, 78, 68, 65, 82, 128, 67, 65, 76, 69, 78, 68, 65, 210, 67, 65, - 76, 67, 85, 76, 65, 84, 79, 82, 128, 67, 65, 76, 67, 128, 67, 65, 75, 82, - 65, 128, 67, 65, 75, 197, 67, 65, 73, 128, 67, 65, 72, 128, 67, 65, 69, - 83, 85, 82, 65, 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, - 193, 67, 65, 67, 84, 85, 83, 128, 67, 65, 66, 76, 69, 87, 65, 89, 128, - 67, 65, 66, 73, 78, 69, 84, 128, 67, 65, 66, 66, 65, 71, 69, 45, 84, 82, - 69, 69, 128, 67, 65, 65, 78, 71, 128, 67, 65, 65, 73, 128, 67, 193, 67, - 48, 50, 52, 128, 67, 48, 50, 51, 128, 67, 48, 50, 50, 128, 67, 48, 50, - 49, 128, 67, 48, 50, 48, 128, 67, 48, 49, 57, 128, 67, 48, 49, 56, 128, - 67, 48, 49, 55, 128, 67, 48, 49, 54, 128, 67, 48, 49, 53, 128, 67, 48, - 49, 52, 128, 67, 48, 49, 51, 128, 67, 48, 49, 50, 128, 67, 48, 49, 49, - 128, 67, 48, 49, 48, 65, 128, 67, 48, 49, 48, 128, 67, 48, 48, 57, 128, - 67, 48, 48, 56, 128, 67, 48, 48, 55, 128, 67, 48, 48, 54, 128, 67, 48, - 48, 53, 128, 67, 48, 48, 52, 128, 67, 48, 48, 51, 128, 67, 48, 48, 50, - 67, 128, 67, 48, 48, 50, 66, 128, 67, 48, 48, 50, 65, 128, 67, 48, 48, - 50, 128, 67, 48, 48, 49, 128, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, - 196, 67, 45, 51, 57, 128, 67, 45, 49, 56, 128, 66, 90, 85, 78, 199, 66, - 90, 72, 201, 66, 89, 84, 197, 66, 89, 69, 76, 79, 82, 85, 83, 83, 73, 65, - 78, 45, 85, 75, 82, 65, 73, 78, 73, 65, 206, 66, 88, 71, 128, 66, 87, 73, - 128, 66, 87, 69, 69, 128, 66, 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, - 77, 73, 83, 72, 128, 66, 85, 84, 84, 79, 78, 128, 66, 85, 84, 84, 79, - 206, 66, 85, 212, 66, 85, 83, 84, 211, 66, 85, 83, 212, 66, 85, 83, 83, - 89, 69, 82, 85, 128, 66, 85, 83, 73, 78, 69, 83, 211, 66, 85, 211, 66, - 85, 82, 213, 66, 85, 82, 50, 128, 66, 85, 210, 66, 85, 79, 88, 128, 66, - 85, 79, 80, 128, 66, 85, 78, 78, 217, 66, 85, 78, 71, 128, 66, 85, 77, - 80, 217, 66, 85, 76, 85, 71, 128, 66, 85, 76, 85, 199, 66, 85, 76, 76, - 83, 69, 89, 69, 128, 66, 85, 76, 76, 211, 66, 85, 76, 76, 72, 79, 82, 78, - 128, 66, 85, 76, 76, 72, 79, 82, 206, 66, 85, 76, 76, 69, 84, 128, 66, - 85, 76, 76, 69, 212, 66, 85, 76, 76, 128, 66, 85, 76, 66, 128, 66, 85, - 75, 89, 128, 66, 85, 73, 76, 68, 73, 78, 71, 83, 128, 66, 85, 73, 76, 68, - 73, 78, 71, 128, 66, 85, 73, 76, 68, 73, 78, 199, 66, 85, 72, 73, 196, - 66, 85, 71, 73, 78, 69, 83, 197, 66, 85, 71, 128, 66, 85, 70, 70, 65, 76, - 79, 128, 66, 85, 68, 128, 66, 85, 67, 75, 76, 69, 128, 66, 85, 66, 66, - 76, 69, 83, 128, 66, 85, 66, 66, 76, 69, 128, 66, 83, 84, 65, 82, 128, - 66, 83, 75, 85, 210, 66, 83, 75, 65, 173, 66, 83, 68, 85, 211, 66, 82, - 85, 83, 200, 66, 82, 79, 78, 90, 69, 128, 66, 82, 79, 75, 69, 206, 66, - 82, 79, 65, 196, 66, 82, 73, 83, 84, 76, 69, 128, 66, 82, 73, 71, 72, 84, - 78, 69, 83, 211, 66, 82, 73, 69, 70, 67, 65, 83, 69, 128, 66, 82, 73, 68, - 71, 197, 66, 82, 73, 68, 197, 66, 82, 73, 67, 75, 128, 66, 82, 69, 86, - 73, 83, 128, 66, 82, 69, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 66, 82, - 69, 86, 197, 66, 82, 69, 65, 84, 200, 66, 82, 69, 65, 75, 84, 72, 82, 79, - 85, 71, 72, 128, 66, 82, 69, 65, 68, 128, 66, 82, 68, 193, 66, 82, 65, - 78, 67, 72, 73, 78, 199, 66, 82, 65, 78, 67, 72, 128, 66, 82, 65, 78, 67, - 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, 84, 69, - 196, 66, 82, 65, 67, 75, 69, 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, - 66, 80, 72, 128, 66, 79, 89, 211, 66, 79, 89, 128, 66, 79, 87, 84, 73, - 69, 128, 66, 79, 87, 84, 73, 197, 66, 79, 87, 76, 73, 78, 71, 128, 66, - 79, 87, 76, 128, 66, 79, 87, 73, 78, 199, 66, 79, 215, 66, 79, 85, 81, - 85, 69, 84, 128, 66, 79, 85, 81, 85, 69, 212, 66, 79, 85, 78, 68, 65, 82, - 217, 66, 79, 84, 84, 79, 77, 45, 83, 72, 65, 68, 69, 196, 66, 79, 84, 84, - 79, 77, 45, 76, 73, 71, 72, 84, 69, 196, 66, 79, 84, 84, 79, 77, 128, 66, - 79, 84, 84, 79, 205, 66, 79, 84, 84, 76, 69, 128, 66, 79, 84, 84, 76, + 72, 69, 73, 75, 72, 65, 78, 128, 67, 72, 69, 69, 83, 197, 67, 72, 69, 69, + 82, 73, 78, 199, 67, 72, 69, 69, 77, 128, 67, 72, 69, 69, 75, 211, 67, + 72, 69, 69, 75, 128, 67, 72, 69, 69, 128, 67, 72, 69, 67, 75, 69, 210, + 67, 72, 69, 67, 75, 128, 67, 72, 69, 67, 203, 67, 72, 197, 67, 72, 65, + 88, 128, 67, 72, 65, 86, 73, 89, 65, 78, 73, 128, 67, 72, 65, 84, 84, 65, + 87, 65, 128, 67, 72, 65, 84, 128, 67, 72, 65, 82, 84, 128, 67, 72, 65, + 82, 212, 67, 72, 65, 82, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, + 67, 72, 65, 82, 65, 67, 84, 69, 82, 83, 128, 67, 72, 65, 82, 65, 67, 84, + 69, 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 84, 69, 82, 128, 67, + 72, 65, 80, 128, 67, 72, 65, 78, 71, 128, 67, 72, 65, 78, 128, 67, 72, + 65, 77, 75, 79, 128, 67, 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65, 77, + 73, 76, 73, 128, 67, 72, 65, 205, 67, 72, 65, 75, 77, 193, 67, 72, 65, + 73, 82, 128, 67, 72, 65, 73, 78, 83, 128, 67, 72, 65, 68, 65, 128, 67, + 72, 65, 196, 67, 72, 65, 65, 128, 67, 71, 74, 128, 67, 69, 88, 128, 67, + 69, 82, 69, 83, 128, 67, 69, 82, 69, 77, 79, 78, 89, 128, 67, 69, 82, 69, + 75, 128, 67, 69, 82, 45, 87, 65, 128, 67, 69, 80, 128, 67, 69, 79, 78, + 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 67, + 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, 69, + 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 73, 79, 83, + 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 67, 73, 69, 85, 67, 128, + 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 67, 72, 73, 69, 85, 67, 72, + 128, 67, 69, 78, 84, 85, 82, 73, 65, 204, 67, 69, 78, 84, 82, 69, 76, 73, + 78, 197, 67, 69, 78, 84, 82, 69, 68, 128, 67, 69, 78, 84, 82, 69, 196, + 67, 69, 78, 84, 82, 69, 128, 67, 69, 78, 84, 82, 197, 67, 69, 78, 84, 82, + 65, 76, 73, 90, 65, 84, 73, 79, 206, 67, 69, 78, 128, 67, 69, 76, 84, 73, + 195, 67, 69, 76, 83, 73, 85, 83, 128, 67, 69, 76, 69, 66, 82, 65, 84, 73, + 79, 78, 128, 67, 69, 73, 82, 84, 128, 67, 69, 73, 76, 73, 78, 71, 128, + 67, 69, 73, 76, 73, 78, 199, 67, 69, 69, 86, 128, 67, 69, 69, 66, 128, + 67, 69, 69, 128, 67, 69, 68, 73, 76, 76, 65, 128, 67, 69, 68, 73, 76, 76, + 193, 67, 69, 68, 201, 67, 69, 67, 69, 75, 128, 67, 69, 67, 65, 75, 128, + 67, 69, 67, 65, 203, 67, 69, 65, 76, 67, 128, 67, 67, 85, 128, 67, 67, + 79, 128, 67, 67, 73, 128, 67, 67, 72, 85, 128, 67, 67, 72, 79, 128, 67, + 67, 72, 73, 128, 67, 67, 72, 72, 85, 128, 67, 67, 72, 72, 79, 128, 67, + 67, 72, 72, 73, 128, 67, 67, 72, 72, 69, 69, 128, 67, 67, 72, 72, 69, + 128, 67, 67, 72, 72, 65, 65, 128, 67, 67, 72, 72, 65, 128, 67, 67, 72, + 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, + 65, 128, 67, 67, 72, 128, 67, 67, 69, 69, 128, 67, 67, 69, 128, 67, 67, + 65, 65, 128, 67, 67, 65, 128, 67, 65, 89, 78, 128, 67, 65, 89, 65, 78, + 78, 65, 128, 67, 65, 88, 128, 67, 65, 86, 69, 128, 67, 65, 85, 84, 73, + 79, 206, 67, 65, 85, 76, 68, 82, 79, 78, 128, 67, 65, 85, 68, 65, 128, + 67, 65, 85, 67, 65, 83, 73, 65, 206, 67, 65, 85, 128, 67, 65, 84, 65, 87, + 65, 128, 67, 65, 84, 128, 67, 65, 212, 67, 65, 83, 84, 76, 69, 128, 67, + 65, 83, 75, 69, 212, 67, 65, 82, 89, 83, 84, 73, 65, 206, 67, 65, 82, 84, + 82, 73, 68, 71, 69, 128, 67, 65, 82, 84, 128, 67, 65, 82, 211, 67, 65, + 82, 82, 73, 65, 71, 197, 67, 65, 82, 80, 69, 78, 84, 82, 217, 67, 65, 82, + 208, 67, 65, 82, 79, 85, 83, 69, 204, 67, 65, 82, 79, 78, 128, 67, 65, + 82, 79, 206, 67, 65, 82, 73, 203, 67, 65, 82, 73, 65, 206, 67, 65, 82, + 69, 84, 128, 67, 65, 82, 69, 212, 67, 65, 82, 197, 67, 65, 82, 68, 83, + 128, 67, 65, 82, 68, 128, 67, 65, 82, 196, 67, 65, 82, 128, 67, 65, 210, + 67, 65, 80, 85, 212, 67, 65, 80, 84, 73, 86, 69, 128, 67, 65, 80, 82, 73, + 67, 79, 82, 78, 128, 67, 65, 80, 80, 69, 196, 67, 65, 80, 79, 128, 67, + 65, 80, 73, 84, 85, 76, 85, 77, 128, 67, 65, 80, 73, 84, 65, 76, 128, 67, + 65, 78, 84, 73, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 199, 67, 65, 78, + 68, 89, 128, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 85, 128, 67, 65, 78, + 68, 82, 65, 66, 73, 78, 68, 213, 67, 65, 78, 68, 82, 65, 128, 67, 65, 78, + 68, 82, 193, 67, 65, 78, 68, 76, 69, 128, 67, 65, 78, 67, 69, 82, 128, + 67, 65, 78, 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 67, 69, 76, + 128, 67, 65, 78, 67, 69, 204, 67, 65, 78, 128, 67, 65, 77, 80, 73, 78, + 71, 128, 67, 65, 77, 78, 85, 195, 67, 65, 77, 69, 82, 65, 128, 67, 65, + 77, 69, 82, 193, 67, 65, 77, 69, 76, 128, 67, 65, 76, 89, 65, 128, 67, + 65, 76, 89, 193, 67, 65, 76, 88, 128, 67, 65, 76, 76, 128, 67, 65, 76, + 69, 78, 68, 65, 82, 128, 67, 65, 76, 69, 78, 68, 65, 210, 67, 65, 76, 67, + 85, 76, 65, 84, 79, 82, 128, 67, 65, 76, 67, 128, 67, 65, 75, 82, 65, + 128, 67, 65, 75, 197, 67, 65, 73, 128, 67, 65, 72, 128, 67, 65, 69, 83, + 85, 82, 65, 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, + 67, 65, 67, 84, 85, 83, 128, 67, 65, 66, 76, 69, 87, 65, 89, 128, 67, 65, + 66, 73, 78, 69, 84, 128, 67, 65, 66, 66, 65, 71, 69, 45, 84, 82, 69, 69, + 128, 67, 65, 65, 78, 71, 128, 67, 65, 65, 73, 128, 67, 193, 67, 48, 50, + 52, 128, 67, 48, 50, 51, 128, 67, 48, 50, 50, 128, 67, 48, 50, 49, 128, + 67, 48, 50, 48, 128, 67, 48, 49, 57, 128, 67, 48, 49, 56, 128, 67, 48, + 49, 55, 128, 67, 48, 49, 54, 128, 67, 48, 49, 53, 128, 67, 48, 49, 52, + 128, 67, 48, 49, 51, 128, 67, 48, 49, 50, 128, 67, 48, 49, 49, 128, 67, + 48, 49, 48, 65, 128, 67, 48, 49, 48, 128, 67, 48, 48, 57, 128, 67, 48, + 48, 56, 128, 67, 48, 48, 55, 128, 67, 48, 48, 54, 128, 67, 48, 48, 53, + 128, 67, 48, 48, 52, 128, 67, 48, 48, 51, 128, 67, 48, 48, 50, 67, 128, + 67, 48, 48, 50, 66, 128, 67, 48, 48, 50, 65, 128, 67, 48, 48, 50, 128, + 67, 48, 48, 49, 128, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 67, + 45, 51, 57, 128, 67, 45, 49, 56, 128, 66, 90, 85, 78, 199, 66, 90, 72, + 201, 66, 89, 84, 197, 66, 89, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, + 85, 75, 82, 65, 73, 78, 73, 65, 206, 66, 88, 71, 128, 66, 87, 73, 128, + 66, 87, 69, 69, 128, 66, 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, 77, + 73, 83, 72, 128, 66, 85, 84, 84, 79, 78, 128, 66, 85, 84, 84, 79, 206, + 66, 85, 212, 66, 85, 83, 84, 211, 66, 85, 83, 212, 66, 85, 83, 83, 89, + 69, 82, 85, 128, 66, 85, 83, 73, 78, 69, 83, 211, 66, 85, 211, 66, 85, + 82, 213, 66, 85, 82, 82, 73, 84, 79, 128, 66, 85, 82, 50, 128, 66, 85, + 210, 66, 85, 79, 88, 128, 66, 85, 79, 80, 128, 66, 85, 78, 78, 217, 66, + 85, 78, 71, 128, 66, 85, 77, 80, 217, 66, 85, 76, 85, 71, 128, 66, 85, + 76, 85, 199, 66, 85, 76, 76, 83, 69, 89, 69, 128, 66, 85, 76, 76, 211, + 66, 85, 76, 76, 72, 79, 82, 78, 128, 66, 85, 76, 76, 72, 79, 82, 206, 66, + 85, 76, 76, 69, 84, 128, 66, 85, 76, 76, 69, 212, 66, 85, 76, 76, 128, + 66, 85, 76, 66, 128, 66, 85, 75, 89, 128, 66, 85, 73, 76, 68, 73, 78, 71, + 83, 128, 66, 85, 73, 76, 68, 73, 78, 71, 128, 66, 85, 73, 76, 68, 73, 78, + 199, 66, 85, 72, 73, 196, 66, 85, 71, 73, 78, 69, 83, 197, 66, 85, 71, + 128, 66, 85, 70, 70, 65, 76, 79, 128, 66, 85, 68, 128, 66, 85, 67, 75, + 76, 69, 128, 66, 85, 66, 66, 76, 69, 83, 128, 66, 85, 66, 66, 76, 69, + 128, 66, 83, 84, 65, 82, 128, 66, 83, 75, 85, 210, 66, 83, 75, 65, 173, + 66, 83, 68, 85, 211, 66, 82, 85, 83, 200, 66, 82, 79, 78, 90, 69, 128, + 66, 82, 79, 75, 69, 206, 66, 82, 79, 65, 196, 66, 82, 73, 83, 84, 76, 69, + 128, 66, 82, 73, 71, 72, 84, 78, 69, 83, 211, 66, 82, 73, 69, 70, 67, 65, + 83, 69, 128, 66, 82, 73, 68, 71, 197, 66, 82, 73, 68, 197, 66, 82, 73, + 67, 75, 128, 66, 82, 69, 86, 73, 83, 128, 66, 82, 69, 86, 69, 45, 77, 65, + 67, 82, 79, 78, 128, 66, 82, 69, 86, 197, 66, 82, 69, 65, 84, 200, 66, + 82, 69, 65, 75, 84, 72, 82, 79, 85, 71, 72, 128, 66, 82, 69, 65, 68, 128, + 66, 82, 68, 193, 66, 82, 65, 78, 67, 72, 73, 78, 199, 66, 82, 65, 78, 67, + 72, 69, 83, 128, 66, 82, 65, 78, 67, 72, 128, 66, 82, 65, 78, 67, 200, + 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, 84, 69, 196, 66, + 82, 65, 67, 75, 69, 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 80, + 72, 128, 66, 79, 89, 211, 66, 79, 89, 128, 66, 79, 87, 84, 73, 69, 128, + 66, 79, 87, 84, 73, 197, 66, 79, 87, 76, 73, 78, 71, 128, 66, 79, 87, 76, + 128, 66, 79, 87, 204, 66, 79, 87, 73, 78, 199, 66, 79, 215, 66, 79, 85, + 81, 85, 69, 84, 128, 66, 79, 85, 81, 85, 69, 212, 66, 79, 85, 78, 68, 65, + 82, 217, 66, 79, 84, 84, 79, 77, 45, 83, 72, 65, 68, 69, 196, 66, 79, 84, + 84, 79, 77, 45, 76, 73, 71, 72, 84, 69, 196, 66, 79, 84, 84, 79, 77, 128, + 66, 79, 84, 84, 79, 205, 66, 79, 84, 84, 76, 69, 128, 66, 79, 84, 84, 76, 197, 66, 79, 84, 200, 66, 79, 82, 85, 84, 79, 128, 66, 79, 82, 65, 88, 45, 51, 128, 66, 79, 82, 65, 88, 45, 50, 128, 66, 79, 82, 65, 88, 128, 66, 79, 80, 79, 77, 79, 70, 207, 66, 79, 79, 84, 83, 128, 66, 79, 79, 84, @@ -4552,24 +4699,25 @@ static unsigned char lexicon[] = { 66, 79, 79, 75, 77, 65, 82, 75, 128, 66, 79, 79, 75, 77, 65, 82, 203, 66, 79, 78, 69, 128, 66, 79, 77, 66, 128, 66, 79, 77, 128, 66, 79, 76, 84, 128, 66, 79, 76, 212, 66, 79, 72, 65, 73, 82, 73, 195, 66, 79, 68, 89, - 128, 66, 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, - 85, 197, 66, 76, 79, 87, 73, 78, 199, 66, 76, 79, 87, 70, 73, 83, 72, - 128, 66, 76, 79, 83, 83, 79, 77, 128, 66, 76, 79, 79, 68, 128, 66, 76, - 79, 78, 196, 66, 76, 79, 67, 75, 128, 66, 76, 69, 78, 68, 69, 196, 66, - 76, 65, 78, 75, 128, 66, 76, 65, 78, 203, 66, 76, 65, 68, 197, 66, 76, - 65, 67, 75, 76, 69, 84, 84, 69, 210, 66, 76, 65, 67, 75, 70, 79, 79, 212, - 66, 76, 65, 67, 75, 45, 76, 69, 84, 84, 69, 210, 66, 76, 65, 67, 75, 45, - 70, 69, 65, 84, 72, 69, 82, 69, 196, 66, 76, 65, 67, 75, 128, 66, 75, 65, - 173, 66, 73, 84, 84, 69, 82, 128, 66, 73, 84, 73, 78, 199, 66, 73, 83, - 77, 85, 84, 200, 66, 73, 83, 77, 73, 76, 76, 65, 200, 66, 73, 83, 72, 79, - 80, 128, 66, 73, 83, 69, 67, 84, 73, 78, 199, 66, 73, 83, 65, 72, 128, - 66, 73, 82, 85, 128, 66, 73, 82, 84, 72, 68, 65, 217, 66, 73, 82, 71, 65, - 128, 66, 73, 82, 68, 128, 66, 73, 79, 72, 65, 90, 65, 82, 196, 66, 73, - 78, 79, 67, 85, 76, 65, 210, 66, 73, 78, 68, 73, 78, 199, 66, 73, 78, 68, - 73, 128, 66, 73, 78, 65, 82, 217, 66, 73, 76, 76, 73, 79, 78, 83, 128, - 66, 73, 76, 76, 73, 65, 82, 68, 83, 128, 66, 73, 76, 65, 66, 73, 65, 204, - 66, 73, 75, 73, 78, 73, 128, 66, 73, 71, 128, 66, 73, 199, 66, 73, 69, - 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 66, 73, 68, 65, 75, 85, 79, + 128, 66, 79, 68, 217, 66, 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, + 69, 128, 66, 76, 85, 197, 66, 76, 79, 87, 73, 78, 199, 66, 76, 79, 87, + 70, 73, 83, 72, 128, 66, 76, 79, 215, 66, 76, 79, 83, 83, 79, 77, 128, + 66, 76, 79, 79, 68, 128, 66, 76, 79, 78, 196, 66, 76, 79, 67, 75, 128, + 66, 76, 73, 78, 203, 66, 76, 69, 78, 68, 69, 196, 66, 76, 65, 78, 75, + 128, 66, 76, 65, 78, 203, 66, 76, 65, 68, 197, 66, 76, 65, 67, 75, 76, + 69, 84, 84, 69, 210, 66, 76, 65, 67, 75, 70, 79, 79, 212, 66, 76, 65, 67, + 75, 45, 76, 69, 84, 84, 69, 210, 66, 76, 65, 67, 75, 45, 70, 69, 65, 84, + 72, 69, 82, 69, 196, 66, 76, 65, 67, 75, 128, 66, 75, 65, 173, 66, 73, + 84, 84, 69, 82, 128, 66, 73, 84, 73, 78, 199, 66, 73, 84, 197, 66, 73, + 83, 77, 85, 84, 200, 66, 73, 83, 77, 73, 76, 76, 65, 200, 66, 73, 83, 72, + 79, 80, 128, 66, 73, 83, 69, 67, 84, 73, 78, 199, 66, 73, 83, 65, 72, + 128, 66, 73, 82, 85, 128, 66, 73, 82, 84, 72, 68, 65, 217, 66, 73, 82, + 71, 65, 128, 66, 73, 82, 68, 128, 66, 73, 79, 72, 65, 90, 65, 82, 196, + 66, 73, 78, 79, 67, 85, 76, 65, 210, 66, 73, 78, 68, 73, 78, 199, 66, 73, + 78, 68, 73, 128, 66, 73, 78, 65, 82, 217, 66, 73, 76, 76, 73, 79, 78, 83, + 128, 66, 73, 76, 76, 73, 65, 82, 68, 83, 128, 66, 73, 76, 65, 66, 73, 65, + 204, 66, 73, 75, 73, 78, 73, 128, 66, 73, 71, 128, 66, 73, 199, 66, 73, + 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 66, 73, 68, 65, 75, 85, 79, 206, 66, 73, 67, 89, 67, 76, 73, 83, 84, 128, 66, 73, 67, 89, 67, 76, 69, 83, 128, 66, 73, 67, 89, 67, 76, 69, 128, 66, 73, 67, 69, 80, 83, 128, 66, 73, 66, 76, 69, 45, 67, 82, 69, 197, 66, 73, 66, 128, 66, 201, 66, @@ -4581,52 +4729,54 @@ static unsigned char lexicon[] = { 84, 87, 69, 69, 206, 66, 69, 84, 72, 128, 66, 69, 84, 65, 128, 66, 69, 84, 193, 66, 69, 212, 66, 69, 83, 73, 68, 197, 66, 69, 82, 75, 65, 78, 65, 206, 66, 69, 82, 66, 69, 210, 66, 69, 80, 128, 66, 69, 79, 82, 195, - 66, 69, 78, 90, 69, 78, 197, 66, 69, 78, 84, 207, 66, 69, 78, 212, 66, - 69, 78, 68, 69, 128, 66, 69, 78, 68, 128, 66, 69, 206, 66, 69, 76, 84, - 128, 66, 69, 76, 212, 66, 69, 76, 79, 215, 66, 69, 76, 76, 72, 79, 208, - 66, 69, 76, 76, 128, 66, 69, 76, 204, 66, 69, 76, 71, 84, 72, 79, 210, - 66, 69, 73, 84, 72, 128, 66, 69, 72, 73, 78, 196, 66, 69, 72, 69, 72, - 128, 66, 69, 72, 69, 200, 66, 69, 72, 128, 66, 69, 200, 66, 69, 71, 73, - 78, 78, 73, 78, 71, 128, 66, 69, 71, 73, 78, 78, 69, 82, 128, 66, 69, 71, - 73, 206, 66, 69, 70, 79, 82, 197, 66, 69, 69, 84, 76, 69, 128, 66, 69, - 69, 84, 65, 128, 66, 69, 69, 210, 66, 69, 69, 72, 73, 86, 69, 128, 66, - 69, 69, 72, 128, 66, 69, 69, 200, 66, 69, 67, 65, 85, 83, 69, 128, 66, - 69, 65, 86, 69, 210, 66, 69, 65, 84, 73, 78, 199, 66, 69, 65, 84, 128, - 66, 69, 65, 210, 66, 69, 65, 78, 128, 66, 69, 65, 77, 69, 196, 66, 69, - 65, 67, 200, 66, 67, 65, 68, 128, 66, 67, 65, 196, 66, 66, 89, 88, 128, - 66, 66, 89, 84, 128, 66, 66, 89, 80, 128, 66, 66, 89, 128, 66, 66, 85, - 88, 128, 66, 66, 85, 84, 128, 66, 66, 85, 82, 88, 128, 66, 66, 85, 82, - 128, 66, 66, 85, 80, 128, 66, 66, 85, 79, 88, 128, 66, 66, 85, 79, 80, - 128, 66, 66, 85, 79, 128, 66, 66, 85, 128, 66, 66, 79, 88, 128, 66, 66, - 79, 84, 128, 66, 66, 79, 80, 128, 66, 66, 79, 128, 66, 66, 73, 88, 128, - 66, 66, 73, 80, 128, 66, 66, 73, 69, 88, 128, 66, 66, 73, 69, 84, 128, - 66, 66, 73, 69, 80, 128, 66, 66, 73, 69, 128, 66, 66, 73, 128, 66, 66, - 69, 88, 128, 66, 66, 69, 80, 128, 66, 66, 69, 69, 128, 66, 66, 69, 128, - 66, 66, 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, - 65, 65, 128, 66, 66, 65, 128, 66, 65, 89, 65, 78, 78, 65, 128, 66, 65, - 85, 128, 66, 65, 84, 84, 69, 82, 89, 128, 66, 65, 84, 72, 84, 85, 66, - 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65, 84, 72, 128, - 66, 65, 84, 200, 66, 65, 84, 65, 203, 66, 65, 83, 83, 65, 128, 66, 65, - 83, 83, 193, 66, 65, 83, 75, 69, 84, 66, 65, 76, 204, 66, 65, 83, 72, 75, - 73, 210, 66, 65, 83, 72, 128, 66, 65, 83, 69, 76, 73, 78, 197, 66, 65, - 83, 69, 66, 65, 76, 76, 128, 66, 65, 83, 69, 128, 66, 65, 83, 197, 66, - 65, 82, 83, 128, 66, 65, 82, 82, 73, 69, 82, 128, 66, 65, 82, 82, 69, 75, - 72, 128, 66, 65, 82, 82, 69, 69, 128, 66, 65, 82, 82, 69, 197, 66, 65, - 82, 76, 73, 78, 69, 128, 66, 65, 82, 76, 69, 89, 128, 66, 65, 82, 73, 89, - 79, 79, 83, 65, 78, 128, 66, 65, 82, 66, 69, 210, 66, 65, 82, 65, 50, - 128, 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, 65, 78, 75, 78, 79, - 84, 197, 66, 65, 78, 75, 128, 66, 65, 78, 203, 66, 65, 78, 68, 128, 66, - 65, 78, 65, 78, 65, 128, 66, 65, 78, 50, 128, 66, 65, 78, 178, 66, 65, - 77, 66, 79, 79, 83, 128, 66, 65, 77, 66, 79, 79, 128, 66, 65, 76, 85, 68, - 65, 128, 66, 65, 76, 76, 80, 79, 73, 78, 212, 66, 65, 76, 76, 79, 84, - 128, 66, 65, 76, 76, 79, 212, 66, 65, 76, 76, 79, 79, 78, 45, 83, 80, 79, - 75, 69, 196, 66, 65, 76, 76, 79, 79, 78, 128, 66, 65, 76, 65, 71, 128, - 66, 65, 76, 128, 66, 65, 204, 66, 65, 73, 82, 75, 65, 78, 128, 66, 65, - 73, 77, 65, 73, 128, 66, 65, 72, 84, 128, 66, 65, 72, 73, 82, 71, 79, 77, - 85, 75, 72, 65, 128, 66, 65, 72, 65, 82, 50, 128, 66, 65, 72, 128, 66, - 65, 71, 83, 128, 66, 65, 71, 71, 65, 71, 197, 66, 65, 71, 65, 128, 66, - 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, 65, 68, - 71, 69, 128, 66, 65, 68, 128, 66, 65, 67, 84, 82, 73, 65, 206, 66, 65, + 66, 69, 78, 90, 69, 78, 197, 66, 69, 78, 84, 207, 66, 69, 78, 84, 128, + 66, 69, 78, 212, 66, 69, 78, 68, 69, 128, 66, 69, 78, 68, 128, 66, 69, + 78, 196, 66, 69, 206, 66, 69, 76, 84, 128, 66, 69, 76, 212, 66, 69, 76, + 79, 215, 66, 69, 76, 76, 72, 79, 208, 66, 69, 76, 76, 128, 66, 69, 76, + 204, 66, 69, 76, 71, 84, 72, 79, 210, 66, 69, 73, 84, 72, 128, 66, 69, + 72, 73, 78, 196, 66, 69, 72, 69, 72, 128, 66, 69, 72, 69, 200, 66, 69, + 72, 128, 66, 69, 200, 66, 69, 71, 73, 78, 78, 73, 78, 71, 128, 66, 69, + 71, 73, 78, 78, 69, 82, 128, 66, 69, 71, 73, 206, 66, 69, 70, 79, 82, + 197, 66, 69, 69, 84, 76, 69, 128, 66, 69, 69, 84, 65, 128, 66, 69, 69, + 210, 66, 69, 69, 72, 73, 86, 69, 128, 66, 69, 69, 72, 128, 66, 69, 69, + 200, 66, 69, 67, 65, 85, 83, 69, 128, 66, 69, 65, 86, 69, 210, 66, 69, + 65, 84, 73, 78, 199, 66, 69, 65, 84, 128, 66, 69, 65, 210, 66, 69, 65, + 78, 128, 66, 69, 65, 77, 69, 196, 66, 69, 65, 68, 83, 128, 66, 69, 65, + 67, 200, 66, 67, 65, 68, 128, 66, 67, 65, 196, 66, 66, 89, 88, 128, 66, + 66, 89, 84, 128, 66, 66, 89, 80, 128, 66, 66, 89, 128, 66, 66, 85, 88, + 128, 66, 66, 85, 84, 128, 66, 66, 85, 82, 88, 128, 66, 66, 85, 82, 128, + 66, 66, 85, 80, 128, 66, 66, 85, 79, 88, 128, 66, 66, 85, 79, 80, 128, + 66, 66, 85, 79, 128, 66, 66, 85, 128, 66, 66, 79, 88, 128, 66, 66, 79, + 84, 128, 66, 66, 79, 80, 128, 66, 66, 79, 128, 66, 66, 73, 88, 128, 66, + 66, 73, 80, 128, 66, 66, 73, 69, 88, 128, 66, 66, 73, 69, 84, 128, 66, + 66, 73, 69, 80, 128, 66, 66, 73, 69, 128, 66, 66, 73, 128, 66, 66, 69, + 88, 128, 66, 66, 69, 80, 128, 66, 66, 69, 69, 128, 66, 66, 69, 128, 66, + 66, 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, + 65, 128, 66, 66, 65, 128, 66, 65, 89, 65, 78, 78, 65, 128, 66, 65, 85, + 128, 66, 65, 84, 84, 69, 82, 89, 128, 66, 65, 84, 72, 84, 85, 66, 128, + 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65, 84, 72, 128, 66, 65, + 84, 200, 66, 65, 84, 65, 203, 66, 65, 83, 83, 65, 128, 66, 65, 83, 83, + 193, 66, 65, 83, 75, 69, 84, 66, 65, 76, 204, 66, 65, 83, 72, 75, 73, + 210, 66, 65, 83, 72, 128, 66, 65, 83, 69, 76, 73, 78, 197, 66, 65, 83, + 69, 66, 65, 76, 76, 128, 66, 65, 83, 69, 128, 66, 65, 83, 197, 66, 65, + 82, 83, 128, 66, 65, 82, 82, 73, 69, 82, 128, 66, 65, 82, 82, 69, 75, 72, + 128, 66, 65, 82, 82, 69, 69, 128, 66, 65, 82, 82, 69, 197, 66, 65, 82, + 76, 73, 78, 69, 128, 66, 65, 82, 76, 69, 89, 128, 66, 65, 82, 73, 89, 79, + 79, 83, 65, 78, 128, 66, 65, 82, 66, 69, 210, 66, 65, 82, 65, 50, 128, + 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, 65, 78, 75, 78, 79, 84, + 197, 66, 65, 78, 75, 128, 66, 65, 78, 203, 66, 65, 78, 68, 128, 66, 65, + 78, 65, 78, 65, 128, 66, 65, 78, 50, 128, 66, 65, 78, 178, 66, 65, 77, + 66, 79, 79, 83, 128, 66, 65, 77, 66, 79, 79, 128, 66, 65, 76, 85, 68, 65, + 128, 66, 65, 76, 76, 80, 79, 73, 78, 212, 66, 65, 76, 76, 79, 84, 128, + 66, 65, 76, 76, 79, 212, 66, 65, 76, 76, 79, 79, 78, 45, 83, 80, 79, 75, + 69, 196, 66, 65, 76, 76, 79, 79, 78, 128, 66, 65, 76, 65, 71, 128, 66, + 65, 76, 128, 66, 65, 204, 66, 65, 73, 82, 75, 65, 78, 128, 66, 65, 73, + 77, 65, 73, 128, 66, 65, 72, 84, 128, 66, 65, 72, 73, 82, 71, 79, 77, 85, + 75, 72, 65, 128, 66, 65, 72, 65, 82, 50, 128, 66, 65, 72, 65, 82, 178, + 66, 65, 72, 128, 66, 65, 71, 83, 128, 66, 65, 71, 71, 65, 71, 197, 66, + 65, 71, 65, 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 77, 73, + 78, 84, 79, 206, 66, 65, 68, 71, 69, 82, 128, 66, 65, 68, 71, 69, 128, + 66, 65, 68, 128, 66, 65, 196, 66, 65, 67, 84, 82, 73, 65, 206, 66, 65, 67, 75, 87, 65, 82, 68, 128, 66, 65, 67, 75, 83, 80, 65, 67, 69, 128, 66, 65, 67, 75, 83, 76, 65, 83, 72, 128, 66, 65, 67, 75, 83, 76, 65, 83, 200, 66, 65, 67, 75, 83, 76, 65, 78, 84, 69, 196, 66, 65, 67, 75, 72, 65, 78, @@ -4691,8 +4841,8 @@ static unsigned char lexicon[] = { 182, 66, 48, 48, 53, 65, 128, 66, 48, 48, 53, 128, 66, 48, 48, 181, 66, 48, 48, 52, 128, 66, 48, 48, 180, 66, 48, 48, 51, 128, 66, 48, 48, 179, 66, 48, 48, 50, 128, 66, 48, 48, 178, 66, 48, 48, 49, 128, 66, 48, 48, - 177, 65, 90, 85, 128, 65, 89, 69, 210, 65, 89, 66, 128, 65, 89, 65, 72, - 128, 65, 88, 69, 128, 65, 87, 69, 128, 65, 86, 69, 83, 84, 65, 206, 65, + 177, 65, 90, 85, 128, 65, 89, 66, 128, 65, 89, 65, 72, 128, 65, 88, 69, + 128, 65, 87, 69, 128, 65, 87, 65, 217, 65, 86, 69, 83, 84, 65, 206, 65, 86, 69, 82, 65, 71, 197, 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89, 65, 128, 65, 86, 65, 71, 82, 65, 72, 65, 128, 65, 85, 89, 65, 78, 78, 65, 128, 65, 85, 84, 85, 77, 78, 128, 65, 85, 84, 79, 77, 79, 66, 73, 76, 69, @@ -4723,10672 +4873,11648 @@ static unsigned char lexicon[] = { 76, 65, 84, 69, 196, 65, 82, 84, 65, 66, 197, 65, 82, 83, 69, 79, 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 83, 69, 78, 73, 67, 128, 65, 82, 82, 79, 87, 83, 128, 65, 82, 82, 79, 87, 211, 65, 82, 82, 79, 87, 72, 69, - 65, 68, 128, 65, 82, 82, 79, 87, 72, 69, 65, 196, 65, 82, 82, 79, 87, 45, - 84, 65, 73, 76, 128, 65, 82, 82, 73, 86, 73, 78, 71, 128, 65, 82, 82, 73, - 86, 69, 128, 65, 82, 82, 65, 89, 128, 65, 82, 80, 69, 71, 71, 73, 65, 84, - 207, 65, 82, 79, 85, 83, 73, 78, 199, 65, 82, 79, 85, 82, 193, 65, 82, - 79, 85, 78, 68, 45, 80, 82, 79, 70, 73, 76, 69, 128, 65, 82, 79, 85, 78, - 196, 65, 82, 77, 89, 128, 65, 82, 77, 79, 85, 82, 128, 65, 82, 205, 65, - 82, 76, 65, 85, 199, 65, 82, 75, 84, 73, 75, 207, 65, 82, 75, 65, 66, - 128, 65, 82, 75, 65, 65, 78, 85, 128, 65, 82, 73, 83, 84, 69, 82, 65, - 128, 65, 82, 73, 83, 84, 69, 82, 193, 65, 82, 73, 69, 83, 128, 65, 82, - 71, 79, 84, 69, 82, 73, 128, 65, 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, - 79, 78, 128, 65, 82, 71, 73, 128, 65, 82, 69, 80, 65, 128, 65, 82, 69, - 65, 128, 65, 82, 68, 72, 65, 86, 73, 83, 65, 82, 71, 65, 128, 65, 82, 68, - 72, 65, 67, 65, 78, 68, 82, 65, 128, 65, 82, 67, 72, 65, 73, 79, 78, 128, - 65, 82, 67, 72, 65, 73, 79, 206, 65, 82, 67, 72, 65, 73, 195, 65, 82, 67, - 200, 65, 82, 67, 128, 65, 82, 195, 65, 82, 65, 77, 65, 73, 195, 65, 82, - 65, 69, 65, 69, 128, 65, 82, 65, 69, 65, 45, 85, 128, 65, 82, 65, 69, 65, - 45, 73, 128, 65, 82, 65, 69, 65, 45, 69, 79, 128, 65, 82, 65, 69, 65, 45, - 69, 128, 65, 82, 65, 69, 65, 45, 65, 128, 65, 82, 65, 68, 128, 65, 82, - 65, 196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, 65, 82, 65, 66, - 73, 65, 206, 65, 82, 45, 82, 65, 72, 77, 65, 206, 65, 82, 45, 82, 65, 72, - 69, 69, 77, 128, 65, 81, 85, 65, 82, 73, 85, 83, 128, 65, 81, 85, 65, 70, - 79, 82, 84, 73, 83, 128, 65, 81, 85, 193, 65, 80, 85, 206, 65, 80, 82, - 73, 76, 128, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 76, 217, 65, 80, - 80, 82, 79, 88, 73, 77, 65, 84, 69, 128, 65, 80, 80, 82, 79, 65, 67, 72, - 69, 211, 65, 80, 80, 82, 79, 65, 67, 72, 128, 65, 80, 80, 76, 73, 67, 65, - 84, 73, 79, 78, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73, 79, 206, 65, 80, - 79, 84, 72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, 128, 65, 80, 79, - 83, 84, 82, 79, 80, 72, 69, 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 83, - 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 211, 65, 80, 79, 83, 84, 82, 79, - 70, 79, 201, 65, 80, 79, 68, 69, 88, 73, 65, 128, 65, 80, 79, 68, 69, 82, - 77, 193, 65, 80, 76, 79, 85, 78, 128, 65, 80, 76, 201, 65, 80, 204, 65, - 80, 73, 78, 128, 65, 80, 69, 83, 207, 65, 80, 67, 128, 65, 80, 65, 82, - 84, 128, 65, 80, 65, 65, 84, 79, 128, 65, 79, 85, 128, 65, 79, 82, 128, - 65, 78, 85, 83, 86, 65, 82, 65, 89, 65, 128, 65, 78, 85, 83, 86, 65, 82, - 65, 128, 65, 78, 85, 83, 86, 65, 82, 193, 65, 78, 85, 68, 65, 84, 84, 65, - 128, 65, 78, 85, 68, 65, 84, 84, 193, 65, 78, 84, 73, 82, 69, 83, 84, 82, - 73, 67, 84, 73, 79, 78, 128, 65, 78, 84, 73, 77, 79, 78, 89, 45, 50, 128, - 65, 78, 84, 73, 77, 79, 78, 89, 128, 65, 78, 84, 73, 77, 79, 78, 217, 65, - 78, 84, 73, 77, 79, 78, 73, 65, 84, 69, 128, 65, 78, 84, 73, 75, 69, 78, - 79, 77, 65, 128, 65, 78, 84, 73, 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, - 65, 128, 65, 78, 84, 73, 70, 79, 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, - 79, 67, 75, 87, 73, 83, 69, 45, 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, - 73, 67, 76, 79, 67, 75, 87, 73, 83, 69, 128, 65, 78, 84, 73, 67, 76, 79, - 67, 75, 87, 73, 83, 197, 65, 78, 84, 69, 78, 78, 65, 128, 65, 78, 84, 69, - 78, 78, 193, 65, 78, 84, 65, 82, 71, 79, 77, 85, 75, 72, 65, 128, 65, 78, - 83, 85, 218, 65, 78, 83, 72, 69, 128, 65, 78, 80, 69, 65, 128, 65, 78, - 207, 65, 78, 78, 85, 73, 84, 217, 65, 78, 78, 79, 84, 65, 84, 73, 79, - 206, 65, 78, 78, 65, 65, 85, 128, 65, 78, 75, 72, 128, 65, 78, 74, 73, - 128, 65, 78, 72, 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, - 85, 73, 83, 72, 69, 196, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 82, - 217, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, 128, 65, 78, 71, 69, 210, - 65, 78, 71, 69, 76, 128, 65, 78, 71, 69, 68, 128, 65, 78, 68, 65, 80, - 128, 65, 78, 67, 79, 82, 65, 128, 65, 78, 67, 72, 79, 82, 128, 65, 78, - 65, 84, 82, 73, 67, 72, 73, 83, 77, 65, 128, 65, 78, 65, 80, 128, 65, 77, - 80, 83, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 80, 69, 82, - 83, 65, 78, 196, 65, 77, 79, 85, 78, 212, 65, 77, 69, 82, 73, 67, 65, 83, - 128, 65, 77, 69, 82, 73, 67, 65, 206, 65, 77, 66, 85, 76, 65, 78, 67, 69, - 128, 65, 77, 66, 193, 65, 77, 65, 82, 128, 65, 77, 65, 210, 65, 77, 65, - 76, 71, 65, 77, 65, 84, 73, 79, 206, 65, 77, 65, 76, 71, 65, 77, 128, 65, - 76, 86, 69, 79, 76, 65, 210, 65, 76, 85, 77, 128, 65, 76, 84, 69, 82, 78, - 65, 84, 73, 86, 197, 65, 76, 84, 69, 82, 78, 65, 84, 73, 79, 206, 65, 76, - 84, 69, 82, 78, 65, 84, 197, 65, 76, 84, 65, 128, 65, 76, 80, 72, 65, - 128, 65, 76, 80, 72, 193, 65, 76, 80, 65, 80, 82, 65, 78, 65, 128, 65, - 76, 80, 65, 80, 82, 65, 65, 78, 193, 65, 76, 80, 65, 128, 65, 76, 77, 79, - 83, 212, 65, 76, 77, 128, 65, 76, 76, 79, 128, 65, 76, 76, 73, 65, 78, - 67, 69, 128, 65, 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 75, 65, 76, - 73, 45, 50, 128, 65, 76, 75, 65, 76, 73, 128, 65, 76, 73, 71, 78, 69, - 196, 65, 76, 73, 70, 85, 128, 65, 76, 73, 69, 78, 128, 65, 76, 73, 69, - 206, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 69, 85, 212, 65, - 76, 69, 82, 84, 128, 65, 76, 69, 80, 72, 128, 65, 76, 69, 77, 66, 73, 67, - 128, 65, 76, 69, 70, 128, 65, 76, 66, 65, 78, 73, 65, 206, 65, 76, 65, - 89, 72, 69, 128, 65, 76, 65, 89, 72, 197, 65, 76, 65, 82, 205, 65, 76, - 65, 80, 72, 128, 65, 76, 45, 76, 65, 75, 85, 78, 65, 128, 65, 75, 84, 73, - 69, 83, 69, 76, 83, 75, 65, 66, 128, 65, 75, 83, 65, 128, 65, 75, 72, 77, - 73, 77, 73, 195, 65, 75, 66, 65, 210, 65, 75, 65, 82, 65, 128, 65, 75, - 65, 82, 193, 65, 73, 89, 65, 78, 78, 65, 128, 65, 73, 86, 73, 76, 73, - 203, 65, 73, 84, 79, 206, 65, 73, 82, 80, 76, 65, 78, 69, 128, 65, 73, - 82, 80, 76, 65, 78, 197, 65, 73, 78, 213, 65, 73, 78, 78, 128, 65, 73, - 76, 77, 128, 65, 73, 75, 65, 82, 65, 128, 65, 73, 72, 86, 85, 83, 128, - 65, 72, 83, 68, 65, 128, 65, 72, 83, 65, 128, 65, 72, 65, 78, 199, 65, - 72, 65, 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 85, 78, 71, 128, - 65, 71, 79, 71, 201, 65, 71, 71, 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, - 71, 71, 82, 65, 86, 65, 84, 69, 196, 65, 71, 65, 73, 78, 128, 65, 70, 84, - 69, 210, 65, 70, 83, 65, 65, 81, 128, 65, 70, 82, 73, 67, 65, 206, 65, - 70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, 68, 128, 65, 70, 71, 72, - 65, 78, 201, 65, 70, 70, 82, 73, 67, 65, 84, 73, 79, 206, 65, 70, 70, 73, - 216, 65, 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 83, 67, - 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, 67, 128, 65, 69, 83, 128, - 65, 69, 82, 73, 65, 204, 65, 69, 82, 128, 65, 69, 76, 65, 45, 80, 73, 76, - 76, 65, 128, 65, 69, 76, 128, 65, 69, 75, 128, 65, 69, 71, 69, 65, 206, - 65, 69, 71, 128, 65, 69, 69, 89, 65, 78, 78, 65, 128, 65, 69, 69, 128, - 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 68, 128, 65, 69, 66, - 128, 65, 68, 86, 65, 78, 84, 65, 71, 69, 128, 65, 68, 86, 65, 78, 67, 69, - 128, 65, 68, 77, 73, 83, 83, 73, 79, 206, 65, 68, 69, 71, 128, 65, 68, - 69, 199, 65, 68, 68, 82, 69, 83, 83, 69, 196, 65, 68, 68, 82, 69, 83, - 211, 65, 68, 68, 65, 75, 128, 65, 68, 65, 203, 65, 67, 85, 84, 69, 45, - 77, 65, 67, 82, 79, 78, 128, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, - 45, 65, 67, 85, 84, 69, 128, 65, 67, 85, 84, 197, 65, 67, 84, 85, 65, 76, - 76, 217, 65, 67, 84, 73, 86, 65, 84, 197, 65, 67, 82, 79, 80, 72, 79, 78, - 73, 195, 65, 67, 75, 78, 79, 87, 76, 69, 68, 71, 69, 128, 65, 67, 67, 85, - 77, 85, 76, 65, 84, 73, 79, 78, 128, 65, 67, 67, 79, 85, 78, 212, 65, 67, - 67, 79, 77, 77, 79, 68, 65, 84, 73, 79, 78, 128, 65, 67, 67, 69, 80, 84, - 128, 65, 67, 67, 69, 78, 84, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, 65, - 67, 67, 69, 78, 84, 128, 65, 67, 67, 69, 78, 212, 65, 67, 65, 68, 69, 77, - 217, 65, 66, 89, 83, 77, 65, 204, 65, 66, 85, 78, 68, 65, 78, 67, 69, - 128, 65, 66, 75, 72, 65, 83, 73, 65, 206, 65, 66, 66, 82, 69, 86, 73, 65, - 84, 73, 79, 206, 65, 66, 65, 70, 73, 76, 73, 128, 65, 66, 178, 65, 66, - 49, 57, 49, 128, 65, 66, 49, 56, 56, 128, 65, 66, 49, 56, 48, 128, 65, - 66, 49, 55, 49, 128, 65, 66, 49, 54, 52, 128, 65, 66, 49, 51, 49, 66, - 128, 65, 66, 49, 51, 49, 65, 128, 65, 66, 49, 50, 51, 128, 65, 66, 49, - 50, 50, 128, 65, 66, 49, 50, 48, 128, 65, 66, 49, 49, 56, 128, 65, 66, - 48, 56, 55, 128, 65, 66, 48, 56, 54, 128, 65, 66, 48, 56, 53, 128, 65, - 66, 48, 56, 50, 128, 65, 66, 48, 56, 49, 128, 65, 66, 48, 56, 48, 128, - 65, 66, 48, 55, 57, 128, 65, 66, 48, 55, 56, 128, 65, 66, 48, 55, 55, - 128, 65, 66, 48, 55, 54, 128, 65, 66, 48, 55, 52, 128, 65, 66, 48, 55, - 51, 128, 65, 66, 48, 55, 48, 128, 65, 66, 48, 54, 57, 128, 65, 66, 48, - 54, 55, 128, 65, 66, 48, 54, 54, 128, 65, 66, 48, 54, 53, 128, 65, 66, - 48, 54, 49, 128, 65, 66, 48, 54, 48, 128, 65, 66, 48, 53, 57, 128, 65, - 66, 48, 53, 56, 128, 65, 66, 48, 53, 55, 128, 65, 66, 48, 53, 54, 128, - 65, 66, 48, 53, 53, 128, 65, 66, 48, 53, 52, 128, 65, 66, 48, 53, 51, - 128, 65, 66, 48, 53, 49, 128, 65, 66, 48, 53, 48, 128, 65, 66, 48, 52, - 57, 128, 65, 66, 48, 52, 56, 128, 65, 66, 48, 52, 55, 128, 65, 66, 48, - 52, 54, 128, 65, 66, 48, 52, 53, 128, 65, 66, 48, 52, 52, 128, 65, 66, - 48, 52, 49, 128, 65, 66, 48, 52, 48, 128, 65, 66, 48, 51, 57, 128, 65, - 66, 48, 51, 56, 128, 65, 66, 48, 51, 55, 128, 65, 66, 48, 51, 52, 128, - 65, 66, 48, 51, 49, 128, 65, 66, 48, 51, 48, 128, 65, 66, 48, 50, 57, - 128, 65, 66, 48, 50, 56, 128, 65, 66, 48, 50, 55, 128, 65, 66, 48, 50, - 54, 128, 65, 66, 48, 50, 52, 128, 65, 66, 48, 50, 51, 77, 128, 65, 66, - 48, 50, 51, 128, 65, 66, 48, 50, 50, 77, 128, 65, 66, 48, 50, 50, 70, - 128, 65, 66, 48, 50, 50, 128, 65, 66, 48, 50, 49, 77, 128, 65, 66, 48, - 50, 49, 70, 128, 65, 66, 48, 50, 49, 128, 65, 66, 48, 50, 48, 128, 65, - 66, 48, 49, 55, 128, 65, 66, 48, 49, 54, 128, 65, 66, 48, 49, 51, 128, - 65, 66, 48, 49, 49, 128, 65, 66, 48, 49, 48, 128, 65, 66, 48, 48, 57, - 128, 65, 66, 48, 48, 56, 128, 65, 66, 48, 48, 55, 128, 65, 66, 48, 48, - 54, 128, 65, 66, 48, 48, 53, 128, 65, 66, 48, 48, 52, 128, 65, 66, 48, - 48, 51, 128, 65, 66, 48, 48, 50, 128, 65, 66, 48, 48, 49, 128, 65, 65, - 89, 73, 78, 128, 65, 65, 89, 65, 78, 78, 65, 128, 65, 65, 89, 128, 65, - 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128, 65, 65, 66, 65, 65, 70, - 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65, 48, 51, 49, 128, 65, - 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65, 65, 48, 50, 56, 128, - 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128, 65, 65, 48, 50, 53, - 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51, 128, 65, 65, 48, 50, - 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50, 48, 128, 65, 65, 48, - 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48, 49, 55, 128, 65, 65, - 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65, 48, 49, 52, 128, 65, - 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65, 65, 48, 49, 49, 128, - 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128, 65, 65, 48, 48, 56, - 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, 65, 128, 65, 65, - 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, 48, 53, 128, 65, - 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, 48, 48, 50, 128, - 65, 65, 48, 48, 49, 128, 65, 56, 48, 55, 128, 65, 56, 48, 54, 128, 65, - 56, 48, 53, 128, 65, 56, 48, 52, 128, 65, 56, 48, 51, 128, 65, 56, 48, - 50, 128, 65, 56, 48, 49, 128, 65, 56, 48, 48, 128, 65, 55, 51, 178, 65, - 55, 50, 182, 65, 55, 49, 183, 65, 55, 49, 181, 65, 55, 49, 180, 65, 55, - 49, 179, 65, 55, 49, 178, 65, 55, 49, 177, 65, 55, 49, 176, 65, 55, 48, - 57, 45, 182, 65, 55, 48, 57, 45, 180, 65, 55, 48, 57, 45, 179, 65, 55, - 48, 57, 45, 178, 65, 55, 48, 185, 65, 55, 48, 184, 65, 55, 48, 183, 65, - 55, 48, 182, 65, 55, 48, 181, 65, 55, 48, 180, 65, 55, 48, 179, 65, 55, - 48, 178, 65, 55, 48, 177, 65, 54, 54, 52, 128, 65, 54, 54, 51, 128, 65, - 54, 54, 50, 128, 65, 54, 54, 49, 128, 65, 54, 54, 48, 128, 65, 54, 53, - 57, 128, 65, 54, 53, 56, 128, 65, 54, 53, 55, 128, 65, 54, 53, 54, 128, - 65, 54, 53, 53, 128, 65, 54, 53, 52, 128, 65, 54, 53, 51, 128, 65, 54, - 53, 50, 128, 65, 54, 53, 49, 128, 65, 54, 52, 57, 128, 65, 54, 52, 56, - 128, 65, 54, 52, 54, 128, 65, 54, 52, 53, 128, 65, 54, 52, 52, 128, 65, - 54, 52, 51, 128, 65, 54, 52, 50, 128, 65, 54, 52, 48, 128, 65, 54, 51, - 56, 128, 65, 54, 51, 55, 128, 65, 54, 51, 52, 128, 65, 54, 50, 57, 128, - 65, 54, 50, 56, 128, 65, 54, 50, 55, 128, 65, 54, 50, 54, 128, 65, 54, - 50, 52, 128, 65, 54, 50, 51, 128, 65, 54, 50, 50, 128, 65, 54, 50, 49, - 128, 65, 54, 50, 48, 128, 65, 54, 49, 57, 128, 65, 54, 49, 56, 128, 65, - 54, 49, 55, 128, 65, 54, 49, 54, 128, 65, 54, 49, 53, 128, 65, 54, 49, - 52, 128, 65, 54, 49, 51, 128, 65, 54, 49, 50, 128, 65, 54, 49, 49, 128, - 65, 54, 49, 48, 128, 65, 54, 48, 57, 128, 65, 54, 48, 56, 128, 65, 54, - 48, 54, 128, 65, 54, 48, 52, 128, 65, 54, 48, 51, 128, 65, 54, 48, 50, - 128, 65, 54, 48, 49, 128, 65, 54, 48, 48, 128, 65, 53, 57, 56, 128, 65, - 53, 57, 54, 128, 65, 53, 57, 53, 128, 65, 53, 57, 52, 128, 65, 53, 57, - 50, 128, 65, 53, 57, 49, 128, 65, 53, 56, 57, 128, 65, 53, 56, 56, 128, - 65, 53, 56, 55, 128, 65, 53, 56, 54, 128, 65, 53, 56, 53, 128, 65, 53, - 56, 52, 128, 65, 53, 56, 51, 128, 65, 53, 56, 50, 128, 65, 53, 56, 49, - 128, 65, 53, 56, 48, 128, 65, 53, 55, 57, 128, 65, 53, 55, 56, 128, 65, - 53, 55, 55, 128, 65, 53, 55, 54, 128, 65, 53, 55, 53, 128, 65, 53, 55, - 52, 128, 65, 53, 55, 51, 128, 65, 53, 55, 50, 128, 65, 53, 55, 49, 128, - 65, 53, 55, 48, 128, 65, 53, 54, 57, 128, 65, 53, 54, 56, 128, 65, 53, - 54, 54, 128, 65, 53, 54, 53, 128, 65, 53, 54, 52, 128, 65, 53, 54, 51, - 128, 65, 53, 53, 57, 128, 65, 53, 53, 55, 128, 65, 53, 53, 54, 128, 65, - 53, 53, 53, 128, 65, 53, 53, 52, 128, 65, 53, 53, 51, 128, 65, 53, 53, - 50, 128, 65, 53, 53, 49, 128, 65, 53, 53, 48, 128, 65, 53, 52, 57, 128, - 65, 53, 52, 56, 128, 65, 53, 52, 55, 128, 65, 53, 52, 53, 128, 65, 53, - 52, 50, 128, 65, 53, 52, 49, 128, 65, 53, 52, 48, 128, 65, 53, 51, 57, - 128, 65, 53, 51, 56, 128, 65, 53, 51, 55, 128, 65, 53, 51, 54, 128, 65, - 53, 51, 53, 128, 65, 53, 51, 52, 128, 65, 53, 51, 50, 128, 65, 53, 51, - 49, 128, 65, 53, 51, 48, 128, 65, 53, 50, 57, 128, 65, 53, 50, 56, 128, - 65, 53, 50, 55, 128, 65, 53, 50, 54, 128, 65, 53, 50, 53, 128, 65, 53, - 50, 52, 128, 65, 53, 50, 51, 128, 65, 53, 50, 49, 128, 65, 53, 50, 48, - 128, 65, 53, 49, 54, 128, 65, 53, 49, 53, 128, 65, 53, 49, 51, 128, 65, - 53, 49, 50, 128, 65, 53, 49, 49, 128, 65, 53, 49, 48, 128, 65, 53, 48, - 57, 128, 65, 53, 48, 56, 128, 65, 53, 48, 54, 128, 65, 53, 48, 53, 128, - 65, 53, 48, 52, 128, 65, 53, 48, 51, 128, 65, 53, 48, 50, 128, 65, 53, - 48, 49, 128, 65, 52, 49, 56, 45, 86, 65, 83, 128, 65, 52, 49, 55, 45, 86, - 65, 83, 128, 65, 52, 49, 54, 45, 86, 65, 83, 128, 65, 52, 49, 53, 45, 86, - 65, 83, 128, 65, 52, 49, 52, 45, 86, 65, 83, 128, 65, 52, 49, 51, 45, 86, - 65, 83, 128, 65, 52, 49, 50, 45, 86, 65, 83, 128, 65, 52, 49, 49, 45, 86, - 65, 83, 128, 65, 52, 49, 48, 45, 86, 65, 83, 128, 65, 52, 48, 57, 45, 86, - 65, 83, 128, 65, 52, 48, 56, 45, 86, 65, 83, 128, 65, 52, 48, 55, 45, 86, - 65, 83, 128, 65, 52, 48, 54, 45, 86, 65, 83, 128, 65, 52, 48, 53, 45, 86, - 65, 83, 128, 65, 52, 48, 52, 45, 86, 65, 83, 128, 65, 52, 48, 51, 45, 86, - 65, 83, 128, 65, 52, 48, 50, 45, 86, 65, 83, 128, 65, 52, 48, 49, 45, 86, - 65, 83, 128, 65, 52, 48, 48, 45, 86, 65, 83, 128, 65, 51, 55, 49, 128, - 65, 51, 55, 48, 128, 65, 51, 54, 57, 128, 65, 51, 54, 56, 128, 65, 51, - 54, 55, 128, 65, 51, 54, 54, 128, 65, 51, 54, 53, 128, 65, 51, 54, 52, - 128, 65, 51, 54, 51, 128, 65, 51, 54, 50, 128, 65, 51, 54, 49, 128, 65, - 51, 54, 48, 128, 65, 51, 53, 57, 128, 65, 51, 53, 56, 128, 65, 51, 53, - 55, 128, 65, 51, 53, 54, 128, 65, 51, 53, 53, 128, 65, 51, 53, 52, 128, - 65, 51, 53, 51, 128, 65, 51, 53, 50, 128, 65, 51, 53, 49, 128, 65, 51, - 53, 48, 128, 65, 51, 52, 57, 128, 65, 51, 52, 56, 128, 65, 51, 52, 55, - 128, 65, 51, 52, 54, 128, 65, 51, 52, 53, 128, 65, 51, 52, 52, 128, 65, - 51, 52, 51, 128, 65, 51, 52, 50, 128, 65, 51, 52, 49, 128, 65, 51, 52, - 48, 128, 65, 51, 51, 57, 128, 65, 51, 51, 56, 128, 65, 51, 51, 55, 128, - 65, 51, 51, 54, 128, 65, 51, 51, 53, 128, 65, 51, 51, 52, 128, 65, 51, - 51, 51, 128, 65, 51, 51, 50, 128, 65, 51, 51, 49, 128, 65, 51, 51, 48, - 128, 65, 51, 50, 57, 128, 65, 51, 50, 56, 128, 65, 51, 50, 55, 128, 65, - 51, 50, 54, 128, 65, 51, 50, 53, 128, 65, 51, 50, 52, 128, 65, 51, 50, - 51, 128, 65, 51, 50, 50, 128, 65, 51, 50, 49, 128, 65, 51, 50, 48, 128, - 65, 51, 49, 57, 128, 65, 51, 49, 56, 128, 65, 51, 49, 55, 128, 65, 51, - 49, 54, 128, 65, 51, 49, 53, 128, 65, 51, 49, 52, 128, 65, 51, 49, 51, - 67, 128, 65, 51, 49, 51, 66, 128, 65, 51, 49, 51, 65, 128, 65, 51, 49, - 50, 128, 65, 51, 49, 49, 128, 65, 51, 49, 48, 128, 65, 51, 48, 57, 67, - 128, 65, 51, 48, 57, 66, 128, 65, 51, 48, 57, 65, 128, 65, 51, 48, 56, - 128, 65, 51, 48, 55, 128, 65, 51, 48, 54, 128, 65, 51, 48, 53, 128, 65, - 51, 48, 52, 128, 65, 51, 48, 51, 128, 65, 51, 48, 50, 128, 65, 51, 48, - 49, 128, 65, 49, 51, 49, 67, 128, 65, 49, 50, 48, 66, 128, 65, 49, 48, - 48, 45, 49, 48, 50, 128, 65, 48, 55, 48, 128, 65, 48, 54, 57, 128, 65, - 48, 54, 56, 128, 65, 48, 54, 55, 128, 65, 48, 54, 54, 128, 65, 48, 54, - 53, 128, 65, 48, 54, 52, 128, 65, 48, 54, 51, 128, 65, 48, 54, 50, 128, - 65, 48, 54, 49, 128, 65, 48, 54, 48, 128, 65, 48, 53, 57, 128, 65, 48, - 53, 56, 128, 65, 48, 53, 55, 128, 65, 48, 53, 54, 128, 65, 48, 53, 53, - 128, 65, 48, 53, 52, 128, 65, 48, 53, 51, 128, 65, 48, 53, 50, 128, 65, - 48, 53, 49, 128, 65, 48, 53, 48, 128, 65, 48, 52, 57, 128, 65, 48, 52, - 56, 128, 65, 48, 52, 55, 128, 65, 48, 52, 54, 128, 65, 48, 52, 53, 65, - 128, 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, 52, 51, 65, 128, - 65, 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, 52, 50, 128, 65, - 48, 52, 49, 128, 65, 48, 52, 48, 65, 128, 65, 48, 52, 48, 128, 65, 48, - 51, 57, 128, 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, 65, 48, 51, 54, - 128, 65, 48, 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, 51, 51, 128, 65, - 48, 51, 50, 65, 128, 65, 48, 50, 56, 66, 128, 65, 48, 49, 55, 65, 128, - 65, 48, 49, 52, 65, 128, 65, 48, 48, 54, 66, 128, 65, 48, 48, 54, 65, - 128, 65, 48, 48, 53, 65, 128, 65, 45, 69, 85, 128, 45, 85, 205, 45, 80, - 72, 82, 85, 128, 45, 75, 72, 89, 85, 196, 45, 75, 72, 89, 73, 76, 128, - 45, 68, 90, 85, 196, 45, 67, 72, 65, 210, 45, 67, 72, 65, 76, 128, + 65, 68, 83, 128, 65, 82, 82, 79, 87, 72, 69, 65, 68, 128, 65, 82, 82, 79, + 87, 72, 69, 65, 196, 65, 82, 82, 79, 87, 45, 84, 65, 73, 76, 128, 65, 82, + 82, 73, 86, 73, 78, 71, 128, 65, 82, 82, 73, 86, 69, 128, 65, 82, 82, 65, + 89, 128, 65, 82, 80, 69, 71, 71, 73, 65, 84, 207, 65, 82, 79, 85, 83, 73, + 78, 199, 65, 82, 79, 85, 82, 193, 65, 82, 79, 85, 78, 68, 45, 80, 82, 79, + 70, 73, 76, 69, 128, 65, 82, 79, 85, 78, 196, 65, 82, 77, 89, 128, 65, + 82, 77, 79, 85, 82, 128, 65, 82, 205, 65, 82, 76, 65, 85, 199, 65, 82, + 75, 84, 73, 75, 207, 65, 82, 75, 65, 66, 128, 65, 82, 75, 65, 65, 78, 85, + 128, 65, 82, 73, 83, 84, 69, 82, 65, 128, 65, 82, 73, 83, 84, 69, 82, + 193, 65, 82, 73, 69, 83, 128, 65, 82, 71, 79, 84, 69, 82, 73, 128, 65, + 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 65, 82, 71, 73, 128, + 65, 82, 69, 80, 65, 128, 65, 82, 69, 65, 128, 65, 82, 68, 72, 65, 86, 73, + 83, 65, 82, 71, 65, 128, 65, 82, 68, 72, 65, 67, 65, 78, 68, 82, 65, 128, + 65, 82, 67, 72, 65, 73, 79, 78, 128, 65, 82, 67, 72, 65, 73, 79, 206, 65, + 82, 67, 72, 65, 73, 195, 65, 82, 67, 200, 65, 82, 67, 128, 65, 82, 195, + 65, 82, 65, 77, 65, 73, 195, 65, 82, 65, 69, 65, 69, 128, 65, 82, 65, 69, + 65, 45, 85, 128, 65, 82, 65, 69, 65, 45, 73, 128, 65, 82, 65, 69, 65, 45, + 69, 79, 128, 65, 82, 65, 69, 65, 45, 69, 128, 65, 82, 65, 69, 65, 45, 65, + 128, 65, 82, 65, 68, 128, 65, 82, 65, 196, 65, 82, 65, 66, 73, 67, 45, + 73, 78, 68, 73, 195, 65, 82, 65, 66, 73, 65, 206, 65, 82, 45, 82, 65, 72, + 77, 65, 206, 65, 82, 45, 82, 65, 72, 69, 69, 77, 128, 65, 81, 85, 65, 82, + 73, 85, 83, 128, 65, 81, 85, 65, 70, 79, 82, 84, 73, 83, 128, 65, 81, 85, + 193, 65, 80, 85, 206, 65, 80, 82, 73, 76, 128, 65, 80, 80, 82, 79, 88, + 73, 77, 65, 84, 69, 76, 217, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, + 128, 65, 80, 80, 82, 79, 65, 67, 72, 69, 211, 65, 80, 80, 82, 79, 65, 67, + 72, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 65, 80, 80, 76, + 73, 67, 65, 84, 73, 79, 206, 65, 80, 79, 84, 72, 69, 83, 128, 65, 80, 79, + 84, 72, 69, 77, 65, 128, 65, 80, 79, 83, 84, 82, 79, 80, 72, 69, 128, 65, + 80, 79, 83, 84, 82, 79, 70, 79, 83, 128, 65, 80, 79, 83, 84, 82, 79, 70, + 79, 211, 65, 80, 79, 83, 84, 82, 79, 70, 79, 201, 65, 80, 79, 68, 69, 88, + 73, 65, 128, 65, 80, 79, 68, 69, 82, 77, 193, 65, 80, 76, 79, 85, 78, + 128, 65, 80, 76, 201, 65, 80, 204, 65, 80, 73, 78, 128, 65, 80, 69, 83, + 207, 65, 80, 67, 128, 65, 80, 65, 82, 84, 128, 65, 80, 65, 65, 84, 79, + 128, 65, 79, 85, 128, 65, 79, 82, 128, 65, 78, 85, 83, 86, 65, 82, 65, + 89, 65, 128, 65, 78, 85, 83, 86, 65, 82, 65, 128, 65, 78, 85, 83, 86, 65, + 82, 193, 65, 78, 85, 68, 65, 84, 84, 65, 128, 65, 78, 85, 68, 65, 84, 84, + 193, 65, 78, 84, 73, 82, 69, 83, 84, 82, 73, 67, 84, 73, 79, 78, 128, 65, + 78, 84, 73, 77, 79, 78, 89, 45, 50, 128, 65, 78, 84, 73, 77, 79, 78, 89, + 128, 65, 78, 84, 73, 77, 79, 78, 217, 65, 78, 84, 73, 77, 79, 78, 73, 65, + 84, 69, 128, 65, 78, 84, 73, 75, 69, 78, 79, 77, 65, 128, 65, 78, 84, 73, + 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, 65, 128, 65, 78, 84, 73, 70, 79, + 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, 83, 69, 45, + 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, + 83, 69, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, 83, 197, 65, 78, + 84, 69, 78, 78, 65, 128, 65, 78, 84, 69, 78, 78, 193, 65, 78, 84, 65, 82, + 71, 79, 77, 85, 75, 72, 65, 128, 65, 78, 83, 85, 218, 65, 78, 83, 72, 69, + 128, 65, 78, 80, 69, 65, 128, 65, 78, 207, 65, 78, 78, 85, 73, 84, 217, + 65, 78, 78, 79, 84, 65, 84, 73, 79, 206, 65, 78, 78, 65, 65, 85, 128, 65, + 78, 75, 72, 128, 65, 78, 74, 73, 128, 65, 78, 72, 85, 128, 65, 78, 71, + 85, 76, 65, 82, 128, 65, 78, 71, 85, 73, 83, 72, 69, 196, 65, 78, 71, 83, + 84, 82, 79, 205, 65, 78, 71, 82, 217, 65, 78, 71, 76, 69, 68, 128, 65, + 78, 71, 76, 69, 196, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, 128, 65, 78, + 71, 69, 210, 65, 78, 71, 69, 76, 128, 65, 78, 71, 69, 68, 128, 65, 78, + 68, 65, 80, 128, 65, 78, 67, 79, 82, 65, 128, 65, 78, 67, 72, 79, 82, + 128, 65, 78, 65, 84, 82, 73, 67, 72, 73, 83, 77, 65, 128, 65, 78, 65, 80, + 128, 65, 77, 80, 83, 128, 65, 77, 80, 72, 79, 82, 65, 128, 65, 77, 80, + 69, 82, 83, 65, 78, 68, 128, 65, 77, 80, 69, 82, 83, 65, 78, 196, 65, 77, + 79, 85, 78, 212, 65, 77, 69, 82, 73, 67, 65, 83, 128, 65, 77, 69, 82, 73, + 67, 65, 206, 65, 77, 66, 85, 76, 65, 78, 67, 69, 128, 65, 77, 66, 193, + 65, 77, 66, 128, 65, 77, 65, 82, 128, 65, 77, 65, 210, 65, 77, 65, 76, + 71, 65, 77, 65, 84, 73, 79, 206, 65, 77, 65, 76, 71, 65, 77, 128, 65, 76, + 86, 69, 79, 76, 65, 210, 65, 76, 85, 77, 128, 65, 76, 84, 69, 82, 78, 65, + 84, 73, 86, 197, 65, 76, 84, 69, 82, 78, 65, 84, 73, 79, 206, 65, 76, 84, + 69, 82, 78, 65, 84, 73, 78, 71, 128, 65, 76, 84, 69, 82, 78, 65, 84, 73, + 78, 199, 65, 76, 84, 69, 82, 78, 65, 84, 69, 128, 65, 76, 84, 69, 82, 78, + 65, 84, 197, 65, 76, 84, 65, 128, 65, 76, 80, 72, 65, 128, 65, 76, 80, + 72, 193, 65, 76, 80, 65, 80, 82, 65, 78, 65, 128, 65, 76, 80, 65, 80, 82, + 65, 65, 78, 193, 65, 76, 80, 65, 128, 65, 76, 77, 79, 83, 212, 65, 76, + 77, 128, 65, 76, 76, 79, 128, 65, 76, 76, 73, 65, 78, 67, 69, 128, 65, + 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 75, 65, 76, 73, 45, 50, 128, + 65, 76, 75, 65, 76, 73, 128, 65, 76, 73, 71, 78, 69, 196, 65, 76, 73, 70, + 85, 128, 65, 76, 73, 69, 78, 128, 65, 76, 73, 69, 206, 65, 76, 71, 73, + 218, 65, 76, 70, 65, 128, 65, 76, 69, 85, 212, 65, 76, 69, 82, 84, 128, + 65, 76, 69, 80, 72, 128, 65, 76, 69, 77, 66, 73, 67, 128, 65, 76, 69, 70, + 128, 65, 76, 66, 65, 78, 73, 65, 206, 65, 76, 65, 89, 72, 69, 128, 65, + 76, 65, 89, 72, 197, 65, 76, 65, 82, 205, 65, 76, 65, 80, 72, 128, 65, + 76, 45, 76, 65, 75, 85, 78, 65, 128, 65, 75, 84, 73, 69, 83, 69, 76, 83, + 75, 65, 66, 128, 65, 75, 83, 65, 128, 65, 75, 72, 77, 73, 77, 73, 195, + 65, 75, 66, 65, 210, 65, 75, 65, 82, 65, 128, 65, 75, 65, 82, 193, 65, + 73, 89, 65, 78, 78, 65, 128, 65, 73, 86, 73, 76, 73, 203, 65, 73, 84, 79, + 206, 65, 73, 82, 80, 76, 65, 78, 69, 128, 65, 73, 82, 80, 76, 65, 78, + 197, 65, 73, 78, 213, 65, 73, 78, 78, 128, 65, 73, 76, 77, 128, 65, 73, + 75, 65, 82, 65, 128, 65, 73, 72, 86, 85, 83, 128, 65, 72, 83, 68, 65, + 128, 65, 72, 83, 65, 128, 65, 72, 79, 205, 65, 72, 65, 78, 199, 65, 72, + 65, 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 85, 78, 71, 128, 65, + 71, 79, 71, 201, 65, 71, 71, 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, 71, + 71, 82, 65, 86, 65, 84, 69, 196, 65, 71, 65, 73, 78, 83, 212, 65, 71, 65, + 73, 78, 128, 65, 70, 84, 69, 210, 65, 70, 83, 65, 65, 81, 128, 65, 70, + 82, 73, 67, 65, 206, 65, 70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, + 68, 128, 65, 70, 71, 72, 65, 78, 201, 65, 70, 70, 82, 73, 67, 65, 84, 73, + 79, 206, 65, 70, 70, 73, 216, 65, 69, 89, 65, 78, 78, 65, 128, 65, 69, + 89, 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, 67, + 128, 65, 69, 83, 128, 65, 69, 82, 73, 65, 204, 65, 69, 82, 128, 65, 69, + 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 76, 128, 65, 69, 75, 128, + 65, 69, 71, 69, 65, 206, 65, 69, 71, 128, 65, 69, 69, 89, 65, 78, 78, 65, + 128, 65, 69, 69, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, + 69, 68, 128, 65, 69, 66, 128, 65, 68, 86, 65, 78, 84, 65, 71, 69, 128, + 65, 68, 86, 65, 78, 67, 69, 128, 65, 68, 77, 73, 83, 83, 73, 79, 206, 65, + 68, 69, 71, 128, 65, 68, 69, 199, 65, 68, 68, 82, 69, 83, 83, 69, 196, + 65, 68, 68, 82, 69, 83, 211, 65, 68, 68, 65, 75, 128, 65, 68, 65, 203, + 65, 67, 85, 84, 69, 45, 77, 65, 67, 82, 79, 78, 128, 65, 67, 85, 84, 69, + 45, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 128, 65, 67, 85, 84, 197, + 65, 67, 84, 85, 65, 76, 76, 217, 65, 67, 84, 73, 86, 65, 84, 197, 65, 67, + 82, 79, 80, 72, 79, 78, 73, 195, 65, 67, 75, 78, 79, 87, 76, 69, 68, 71, + 69, 128, 65, 67, 67, 85, 77, 85, 76, 65, 84, 73, 79, 78, 128, 65, 67, 67, + 79, 85, 78, 212, 65, 67, 67, 79, 77, 77, 79, 68, 65, 84, 73, 79, 78, 128, + 65, 67, 67, 69, 80, 84, 128, 65, 67, 67, 69, 78, 84, 45, 83, 84, 65, 67, + 67, 65, 84, 79, 128, 65, 67, 67, 69, 78, 84, 128, 65, 67, 67, 69, 78, + 212, 65, 67, 65, 68, 69, 77, 217, 65, 66, 89, 83, 77, 65, 204, 65, 66, + 85, 78, 68, 65, 78, 67, 69, 128, 65, 66, 75, 72, 65, 83, 73, 65, 206, 65, + 66, 66, 82, 69, 86, 73, 65, 84, 73, 79, 206, 65, 66, 65, 70, 73, 76, 73, + 128, 65, 66, 178, 65, 66, 49, 57, 49, 128, 65, 66, 49, 56, 56, 128, 65, + 66, 49, 56, 48, 128, 65, 66, 49, 55, 49, 128, 65, 66, 49, 54, 52, 128, + 65, 66, 49, 51, 49, 66, 128, 65, 66, 49, 51, 49, 65, 128, 65, 66, 49, 50, + 51, 128, 65, 66, 49, 50, 50, 128, 65, 66, 49, 50, 48, 128, 65, 66, 49, + 49, 56, 128, 65, 66, 48, 56, 55, 128, 65, 66, 48, 56, 54, 128, 65, 66, + 48, 56, 53, 128, 65, 66, 48, 56, 50, 128, 65, 66, 48, 56, 49, 128, 65, + 66, 48, 56, 48, 128, 65, 66, 48, 55, 57, 128, 65, 66, 48, 55, 56, 128, + 65, 66, 48, 55, 55, 128, 65, 66, 48, 55, 54, 128, 65, 66, 48, 55, 52, + 128, 65, 66, 48, 55, 51, 128, 65, 66, 48, 55, 48, 128, 65, 66, 48, 54, + 57, 128, 65, 66, 48, 54, 55, 128, 65, 66, 48, 54, 54, 128, 65, 66, 48, + 54, 53, 128, 65, 66, 48, 54, 49, 128, 65, 66, 48, 54, 48, 128, 65, 66, + 48, 53, 57, 128, 65, 66, 48, 53, 56, 128, 65, 66, 48, 53, 55, 128, 65, + 66, 48, 53, 54, 128, 65, 66, 48, 53, 53, 128, 65, 66, 48, 53, 52, 128, + 65, 66, 48, 53, 51, 128, 65, 66, 48, 53, 49, 128, 65, 66, 48, 53, 48, + 128, 65, 66, 48, 52, 57, 128, 65, 66, 48, 52, 56, 128, 65, 66, 48, 52, + 55, 128, 65, 66, 48, 52, 54, 128, 65, 66, 48, 52, 53, 128, 65, 66, 48, + 52, 52, 128, 65, 66, 48, 52, 49, 128, 65, 66, 48, 52, 48, 128, 65, 66, + 48, 51, 57, 128, 65, 66, 48, 51, 56, 128, 65, 66, 48, 51, 55, 128, 65, + 66, 48, 51, 52, 128, 65, 66, 48, 51, 49, 128, 65, 66, 48, 51, 48, 128, + 65, 66, 48, 50, 57, 128, 65, 66, 48, 50, 56, 128, 65, 66, 48, 50, 55, + 128, 65, 66, 48, 50, 54, 128, 65, 66, 48, 50, 52, 128, 65, 66, 48, 50, + 51, 77, 128, 65, 66, 48, 50, 51, 128, 65, 66, 48, 50, 50, 77, 128, 65, + 66, 48, 50, 50, 70, 128, 65, 66, 48, 50, 50, 128, 65, 66, 48, 50, 49, 77, + 128, 65, 66, 48, 50, 49, 70, 128, 65, 66, 48, 50, 49, 128, 65, 66, 48, + 50, 48, 128, 65, 66, 48, 49, 55, 128, 65, 66, 48, 49, 54, 128, 65, 66, + 48, 49, 51, 128, 65, 66, 48, 49, 49, 128, 65, 66, 48, 49, 48, 128, 65, + 66, 48, 48, 57, 128, 65, 66, 48, 48, 56, 128, 65, 66, 48, 48, 55, 128, + 65, 66, 48, 48, 54, 128, 65, 66, 48, 48, 53, 128, 65, 66, 48, 48, 52, + 128, 65, 66, 48, 48, 51, 128, 65, 66, 48, 48, 50, 128, 65, 66, 48, 48, + 49, 128, 65, 65, 89, 73, 78, 128, 65, 65, 89, 65, 78, 78, 65, 128, 65, + 65, 89, 128, 65, 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128, 65, 65, + 66, 65, 65, 70, 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65, 48, 51, + 49, 128, 65, 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65, 65, 48, + 50, 56, 128, 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128, 65, 65, + 48, 50, 53, 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51, 128, 65, + 65, 48, 50, 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50, 48, 128, + 65, 65, 48, 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48, 49, 55, + 128, 65, 65, 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65, 48, 49, + 52, 128, 65, 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65, 65, 48, + 49, 49, 128, 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128, 65, 65, + 48, 48, 56, 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, 65, + 128, 65, 65, 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, 48, + 53, 128, 65, 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, 48, + 48, 50, 128, 65, 65, 48, 48, 49, 128, 65, 56, 48, 55, 128, 65, 56, 48, + 54, 128, 65, 56, 48, 53, 128, 65, 56, 48, 52, 128, 65, 56, 48, 51, 128, + 65, 56, 48, 50, 128, 65, 56, 48, 49, 128, 65, 56, 48, 48, 128, 65, 55, + 51, 178, 65, 55, 50, 182, 65, 55, 49, 183, 65, 55, 49, 181, 65, 55, 49, + 180, 65, 55, 49, 179, 65, 55, 49, 178, 65, 55, 49, 177, 65, 55, 49, 176, + 65, 55, 48, 57, 45, 182, 65, 55, 48, 57, 45, 180, 65, 55, 48, 57, 45, + 179, 65, 55, 48, 57, 45, 178, 65, 55, 48, 185, 65, 55, 48, 184, 65, 55, + 48, 183, 65, 55, 48, 182, 65, 55, 48, 181, 65, 55, 48, 180, 65, 55, 48, + 179, 65, 55, 48, 178, 65, 55, 48, 177, 65, 54, 54, 52, 128, 65, 54, 54, + 51, 128, 65, 54, 54, 50, 128, 65, 54, 54, 49, 128, 65, 54, 54, 48, 128, + 65, 54, 53, 57, 128, 65, 54, 53, 56, 128, 65, 54, 53, 55, 128, 65, 54, + 53, 54, 128, 65, 54, 53, 53, 128, 65, 54, 53, 52, 128, 65, 54, 53, 51, + 128, 65, 54, 53, 50, 128, 65, 54, 53, 49, 128, 65, 54, 52, 57, 128, 65, + 54, 52, 56, 128, 65, 54, 52, 54, 128, 65, 54, 52, 53, 128, 65, 54, 52, + 52, 128, 65, 54, 52, 51, 128, 65, 54, 52, 50, 128, 65, 54, 52, 48, 128, + 65, 54, 51, 56, 128, 65, 54, 51, 55, 128, 65, 54, 51, 52, 128, 65, 54, + 50, 57, 128, 65, 54, 50, 56, 128, 65, 54, 50, 55, 128, 65, 54, 50, 54, + 128, 65, 54, 50, 52, 128, 65, 54, 50, 51, 128, 65, 54, 50, 50, 128, 65, + 54, 50, 49, 128, 65, 54, 50, 48, 128, 65, 54, 49, 57, 128, 65, 54, 49, + 56, 128, 65, 54, 49, 55, 128, 65, 54, 49, 54, 128, 65, 54, 49, 53, 128, + 65, 54, 49, 52, 128, 65, 54, 49, 51, 128, 65, 54, 49, 50, 128, 65, 54, + 49, 49, 128, 65, 54, 49, 48, 128, 65, 54, 48, 57, 128, 65, 54, 48, 56, + 128, 65, 54, 48, 54, 128, 65, 54, 48, 52, 128, 65, 54, 48, 51, 128, 65, + 54, 48, 50, 128, 65, 54, 48, 49, 128, 65, 54, 48, 48, 128, 65, 53, 57, + 56, 128, 65, 53, 57, 54, 128, 65, 53, 57, 53, 128, 65, 53, 57, 52, 128, + 65, 53, 57, 50, 128, 65, 53, 57, 49, 128, 65, 53, 56, 57, 128, 65, 53, + 56, 56, 128, 65, 53, 56, 55, 128, 65, 53, 56, 54, 128, 65, 53, 56, 53, + 128, 65, 53, 56, 52, 128, 65, 53, 56, 51, 128, 65, 53, 56, 50, 128, 65, + 53, 56, 49, 128, 65, 53, 56, 48, 128, 65, 53, 55, 57, 128, 65, 53, 55, + 56, 128, 65, 53, 55, 55, 128, 65, 53, 55, 54, 128, 65, 53, 55, 53, 128, + 65, 53, 55, 52, 128, 65, 53, 55, 51, 128, 65, 53, 55, 50, 128, 65, 53, + 55, 49, 128, 65, 53, 55, 48, 128, 65, 53, 54, 57, 128, 65, 53, 54, 56, + 128, 65, 53, 54, 54, 128, 65, 53, 54, 53, 128, 65, 53, 54, 52, 128, 65, + 53, 54, 51, 128, 65, 53, 53, 57, 128, 65, 53, 53, 55, 128, 65, 53, 53, + 54, 128, 65, 53, 53, 53, 128, 65, 53, 53, 52, 128, 65, 53, 53, 51, 128, + 65, 53, 53, 50, 128, 65, 53, 53, 49, 128, 65, 53, 53, 48, 128, 65, 53, + 52, 57, 128, 65, 53, 52, 56, 128, 65, 53, 52, 55, 128, 65, 53, 52, 53, + 128, 65, 53, 52, 50, 128, 65, 53, 52, 49, 128, 65, 53, 52, 48, 128, 65, + 53, 51, 57, 128, 65, 53, 51, 56, 128, 65, 53, 51, 55, 128, 65, 53, 51, + 54, 128, 65, 53, 51, 53, 128, 65, 53, 51, 52, 128, 65, 53, 51, 50, 128, + 65, 53, 51, 49, 128, 65, 53, 51, 48, 128, 65, 53, 50, 57, 128, 65, 53, + 50, 56, 128, 65, 53, 50, 55, 128, 65, 53, 50, 54, 128, 65, 53, 50, 53, + 128, 65, 53, 50, 52, 128, 65, 53, 50, 51, 128, 65, 53, 50, 50, 128, 65, + 53, 50, 49, 128, 65, 53, 50, 48, 128, 65, 53, 49, 57, 128, 65, 53, 49, + 56, 128, 65, 53, 49, 55, 128, 65, 53, 49, 54, 128, 65, 53, 49, 53, 128, + 65, 53, 49, 52, 128, 65, 53, 49, 51, 128, 65, 53, 49, 50, 128, 65, 53, + 49, 49, 128, 65, 53, 49, 48, 128, 65, 53, 48, 57, 128, 65, 53, 48, 56, + 128, 65, 53, 48, 55, 128, 65, 53, 48, 54, 128, 65, 53, 48, 53, 128, 65, + 53, 48, 52, 128, 65, 53, 48, 51, 128, 65, 53, 48, 50, 128, 65, 53, 48, + 49, 128, 65, 52, 57, 55, 128, 65, 52, 57, 54, 128, 65, 52, 57, 53, 128, + 65, 52, 57, 52, 128, 65, 52, 57, 51, 128, 65, 52, 57, 50, 128, 65, 52, + 57, 49, 128, 65, 52, 57, 48, 128, 65, 52, 56, 57, 128, 65, 52, 56, 56, + 128, 65, 52, 56, 55, 128, 65, 52, 56, 54, 128, 65, 52, 56, 53, 128, 65, + 52, 56, 52, 128, 65, 52, 56, 51, 128, 65, 52, 56, 50, 128, 65, 52, 56, + 49, 128, 65, 52, 56, 48, 128, 65, 52, 55, 57, 128, 65, 52, 55, 56, 128, + 65, 52, 55, 55, 128, 65, 52, 55, 54, 128, 65, 52, 55, 53, 128, 65, 52, + 55, 52, 128, 65, 52, 55, 51, 128, 65, 52, 55, 50, 128, 65, 52, 55, 49, + 128, 65, 52, 55, 48, 128, 65, 52, 54, 57, 128, 65, 52, 54, 56, 128, 65, + 52, 54, 55, 128, 65, 52, 54, 54, 128, 65, 52, 54, 53, 128, 65, 52, 54, + 52, 128, 65, 52, 54, 51, 128, 65, 52, 54, 50, 128, 65, 52, 54, 49, 128, + 65, 52, 54, 48, 128, 65, 52, 53, 57, 128, 65, 52, 53, 56, 128, 65, 52, + 53, 55, 65, 128, 65, 52, 53, 55, 128, 65, 52, 53, 54, 128, 65, 52, 53, + 53, 128, 65, 52, 53, 52, 128, 65, 52, 53, 51, 128, 65, 52, 53, 50, 128, + 65, 52, 53, 49, 128, 65, 52, 53, 48, 65, 128, 65, 52, 53, 48, 128, 65, + 52, 52, 57, 128, 65, 52, 52, 56, 128, 65, 52, 52, 55, 128, 65, 52, 52, + 54, 128, 65, 52, 52, 53, 128, 65, 52, 52, 52, 128, 65, 52, 52, 51, 128, + 65, 52, 52, 50, 128, 65, 52, 52, 49, 128, 65, 52, 52, 48, 128, 65, 52, + 51, 57, 128, 65, 52, 51, 56, 128, 65, 52, 51, 55, 128, 65, 52, 51, 54, + 128, 65, 52, 51, 53, 128, 65, 52, 51, 52, 128, 65, 52, 51, 51, 128, 65, + 52, 51, 50, 128, 65, 52, 51, 49, 128, 65, 52, 51, 48, 128, 65, 52, 50, + 57, 128, 65, 52, 50, 56, 128, 65, 52, 50, 55, 128, 65, 52, 50, 54, 128, + 65, 52, 50, 53, 128, 65, 52, 50, 52, 128, 65, 52, 50, 51, 128, 65, 52, + 50, 50, 128, 65, 52, 50, 49, 128, 65, 52, 50, 48, 128, 65, 52, 49, 57, + 128, 65, 52, 49, 56, 45, 86, 65, 83, 128, 65, 52, 49, 56, 128, 65, 52, + 49, 55, 45, 86, 65, 83, 128, 65, 52, 49, 55, 128, 65, 52, 49, 54, 45, 86, + 65, 83, 128, 65, 52, 49, 54, 128, 65, 52, 49, 53, 45, 86, 65, 83, 128, + 65, 52, 49, 53, 128, 65, 52, 49, 52, 45, 86, 65, 83, 128, 65, 52, 49, 52, + 128, 65, 52, 49, 51, 45, 86, 65, 83, 128, 65, 52, 49, 51, 128, 65, 52, + 49, 50, 45, 86, 65, 83, 128, 65, 52, 49, 50, 128, 65, 52, 49, 49, 45, 86, + 65, 83, 128, 65, 52, 49, 49, 128, 65, 52, 49, 48, 193, 65, 52, 49, 48, + 45, 86, 65, 83, 128, 65, 52, 49, 176, 65, 52, 48, 57, 45, 86, 65, 83, + 128, 65, 52, 48, 57, 128, 65, 52, 48, 56, 45, 86, 65, 83, 128, 65, 52, + 48, 56, 128, 65, 52, 48, 55, 45, 86, 65, 83, 128, 65, 52, 48, 55, 128, + 65, 52, 48, 54, 45, 86, 65, 83, 128, 65, 52, 48, 54, 128, 65, 52, 48, 53, + 45, 86, 65, 83, 128, 65, 52, 48, 53, 128, 65, 52, 48, 52, 45, 86, 65, 83, + 128, 65, 52, 48, 52, 128, 65, 52, 48, 51, 45, 86, 65, 83, 128, 65, 52, + 48, 51, 128, 65, 52, 48, 50, 45, 86, 65, 83, 128, 65, 52, 48, 50, 128, + 65, 52, 48, 49, 45, 86, 65, 83, 128, 65, 52, 48, 49, 128, 65, 52, 48, 48, + 45, 86, 65, 83, 128, 65, 52, 48, 48, 128, 65, 51, 57, 57, 128, 65, 51, + 57, 56, 128, 65, 51, 57, 55, 128, 65, 51, 57, 54, 128, 65, 51, 57, 53, + 128, 65, 51, 57, 52, 128, 65, 51, 57, 179, 65, 51, 57, 50, 128, 65, 51, + 57, 49, 128, 65, 51, 57, 48, 128, 65, 51, 56, 57, 128, 65, 51, 56, 56, + 128, 65, 51, 56, 55, 128, 65, 51, 56, 54, 65, 128, 65, 51, 56, 54, 128, + 65, 51, 56, 53, 128, 65, 51, 56, 52, 128, 65, 51, 56, 51, 65, 128, 65, + 51, 56, 179, 65, 51, 56, 50, 128, 65, 51, 56, 49, 65, 128, 65, 51, 56, + 49, 128, 65, 51, 56, 48, 128, 65, 51, 55, 57, 128, 65, 51, 55, 56, 128, + 65, 51, 55, 55, 128, 65, 51, 55, 54, 128, 65, 51, 55, 53, 128, 65, 51, + 55, 52, 128, 65, 51, 55, 51, 128, 65, 51, 55, 50, 128, 65, 51, 55, 49, + 65, 128, 65, 51, 55, 49, 128, 65, 51, 55, 48, 128, 65, 51, 54, 57, 128, + 65, 51, 54, 56, 65, 128, 65, 51, 54, 56, 128, 65, 51, 54, 55, 128, 65, + 51, 54, 54, 128, 65, 51, 54, 53, 128, 65, 51, 54, 52, 65, 128, 65, 51, + 54, 52, 128, 65, 51, 54, 51, 128, 65, 51, 54, 50, 128, 65, 51, 54, 49, + 128, 65, 51, 54, 48, 128, 65, 51, 53, 57, 65, 128, 65, 51, 53, 57, 128, + 65, 51, 53, 56, 128, 65, 51, 53, 55, 128, 65, 51, 53, 54, 128, 65, 51, + 53, 53, 128, 65, 51, 53, 52, 128, 65, 51, 53, 51, 128, 65, 51, 53, 50, + 128, 65, 51, 53, 49, 128, 65, 51, 53, 48, 128, 65, 51, 52, 57, 128, 65, + 51, 52, 56, 128, 65, 51, 52, 55, 128, 65, 51, 52, 54, 128, 65, 51, 52, + 53, 128, 65, 51, 52, 52, 128, 65, 51, 52, 51, 128, 65, 51, 52, 50, 128, + 65, 51, 52, 49, 128, 65, 51, 52, 48, 128, 65, 51, 51, 57, 128, 65, 51, + 51, 56, 128, 65, 51, 51, 55, 128, 65, 51, 51, 54, 67, 128, 65, 51, 51, + 54, 66, 128, 65, 51, 51, 54, 65, 128, 65, 51, 51, 54, 128, 65, 51, 51, + 53, 128, 65, 51, 51, 52, 128, 65, 51, 51, 51, 128, 65, 51, 51, 50, 67, + 128, 65, 51, 51, 50, 66, 128, 65, 51, 51, 50, 65, 128, 65, 51, 51, 50, + 128, 65, 51, 51, 49, 128, 65, 51, 51, 48, 128, 65, 51, 50, 57, 65, 128, + 65, 51, 50, 57, 128, 65, 51, 50, 56, 128, 65, 51, 50, 55, 128, 65, 51, + 50, 54, 128, 65, 51, 50, 53, 128, 65, 51, 50, 52, 128, 65, 51, 50, 51, + 128, 65, 51, 50, 50, 128, 65, 51, 50, 49, 128, 65, 51, 50, 48, 128, 65, + 51, 49, 57, 128, 65, 51, 49, 56, 128, 65, 51, 49, 55, 128, 65, 51, 49, + 54, 128, 65, 51, 49, 53, 128, 65, 51, 49, 52, 128, 65, 51, 49, 51, 67, + 128, 65, 51, 49, 51, 66, 128, 65, 51, 49, 51, 65, 128, 65, 51, 49, 51, + 128, 65, 51, 49, 50, 128, 65, 51, 49, 49, 128, 65, 51, 49, 48, 128, 65, + 51, 48, 57, 67, 128, 65, 51, 48, 57, 66, 128, 65, 51, 48, 57, 65, 128, + 65, 51, 48, 57, 128, 65, 51, 48, 56, 128, 65, 51, 48, 55, 128, 65, 51, + 48, 54, 128, 65, 51, 48, 53, 128, 65, 51, 48, 52, 128, 65, 51, 48, 51, + 128, 65, 51, 48, 50, 128, 65, 51, 48, 49, 128, 65, 51, 48, 48, 128, 65, + 50, 57, 57, 65, 128, 65, 50, 57, 57, 128, 65, 50, 57, 56, 128, 65, 50, + 57, 55, 128, 65, 50, 57, 54, 128, 65, 50, 57, 53, 128, 65, 50, 57, 52, + 65, 128, 65, 50, 57, 52, 128, 65, 50, 57, 51, 128, 65, 50, 57, 50, 128, + 65, 50, 57, 49, 128, 65, 50, 57, 48, 128, 65, 50, 56, 57, 65, 128, 65, + 50, 56, 57, 128, 65, 50, 56, 56, 128, 65, 50, 56, 55, 128, 65, 50, 56, + 54, 128, 65, 50, 56, 53, 128, 65, 50, 56, 52, 128, 65, 50, 56, 51, 128, + 65, 50, 56, 50, 128, 65, 50, 56, 49, 128, 65, 50, 56, 48, 128, 65, 50, + 55, 57, 128, 65, 50, 55, 56, 128, 65, 50, 55, 55, 128, 65, 50, 55, 54, + 128, 65, 50, 55, 53, 128, 65, 50, 55, 52, 128, 65, 50, 55, 51, 128, 65, + 50, 55, 50, 128, 65, 50, 55, 49, 128, 65, 50, 55, 48, 128, 65, 50, 54, + 57, 128, 65, 50, 54, 56, 128, 65, 50, 54, 55, 65, 128, 65, 50, 54, 55, + 128, 65, 50, 54, 54, 128, 65, 50, 54, 53, 128, 65, 50, 54, 52, 128, 65, + 50, 54, 51, 128, 65, 50, 54, 50, 128, 65, 50, 54, 49, 128, 65, 50, 54, + 48, 128, 65, 50, 53, 57, 128, 65, 50, 53, 56, 128, 65, 50, 53, 55, 128, + 65, 50, 53, 54, 128, 65, 50, 53, 53, 128, 65, 50, 53, 52, 128, 65, 50, + 53, 51, 128, 65, 50, 53, 50, 128, 65, 50, 53, 49, 128, 65, 50, 53, 48, + 128, 65, 50, 52, 57, 128, 65, 50, 52, 56, 128, 65, 50, 52, 55, 128, 65, + 50, 52, 54, 128, 65, 50, 52, 53, 128, 65, 50, 52, 52, 128, 65, 50, 52, + 51, 128, 65, 50, 52, 50, 128, 65, 50, 52, 49, 128, 65, 50, 52, 48, 128, + 65, 50, 51, 57, 128, 65, 50, 51, 56, 128, 65, 50, 51, 55, 128, 65, 50, + 51, 54, 128, 65, 50, 51, 53, 128, 65, 50, 51, 52, 128, 65, 50, 51, 51, + 128, 65, 50, 51, 50, 128, 65, 50, 51, 49, 128, 65, 50, 51, 48, 128, 65, + 50, 50, 57, 128, 65, 50, 50, 56, 128, 65, 50, 50, 55, 65, 128, 65, 50, + 50, 55, 128, 65, 50, 50, 54, 128, 65, 50, 50, 53, 128, 65, 50, 50, 52, + 128, 65, 50, 50, 51, 128, 65, 50, 50, 50, 128, 65, 50, 50, 49, 128, 65, + 50, 50, 48, 128, 65, 50, 49, 57, 128, 65, 50, 49, 56, 128, 65, 50, 49, + 55, 128, 65, 50, 49, 54, 65, 128, 65, 50, 49, 54, 128, 65, 50, 49, 53, + 65, 128, 65, 50, 49, 53, 128, 65, 50, 49, 52, 128, 65, 50, 49, 51, 128, + 65, 50, 49, 50, 128, 65, 50, 49, 49, 128, 65, 50, 49, 48, 128, 65, 50, + 48, 57, 65, 128, 65, 50, 48, 57, 128, 65, 50, 48, 56, 128, 65, 50, 48, + 55, 65, 128, 65, 50, 48, 55, 128, 65, 50, 48, 54, 128, 65, 50, 48, 53, + 128, 65, 50, 48, 52, 128, 65, 50, 48, 51, 128, 65, 50, 48, 50, 66, 128, + 65, 50, 48, 50, 65, 128, 65, 50, 48, 50, 128, 65, 50, 48, 49, 128, 65, + 50, 48, 48, 128, 65, 49, 57, 57, 128, 65, 49, 57, 56, 128, 65, 49, 57, + 55, 128, 65, 49, 57, 54, 128, 65, 49, 57, 53, 128, 65, 49, 57, 52, 128, + 65, 49, 57, 51, 128, 65, 49, 57, 50, 128, 65, 49, 57, 49, 128, 65, 49, + 57, 48, 128, 65, 49, 56, 57, 128, 65, 49, 56, 56, 128, 65, 49, 56, 55, + 128, 65, 49, 56, 54, 128, 65, 49, 56, 53, 128, 65, 49, 56, 52, 128, 65, + 49, 56, 51, 128, 65, 49, 56, 50, 128, 65, 49, 56, 49, 128, 65, 49, 56, + 48, 128, 65, 49, 55, 57, 128, 65, 49, 55, 56, 128, 65, 49, 55, 55, 128, + 65, 49, 55, 54, 128, 65, 49, 55, 53, 128, 65, 49, 55, 52, 128, 65, 49, + 55, 51, 128, 65, 49, 55, 50, 128, 65, 49, 55, 49, 128, 65, 49, 55, 48, + 128, 65, 49, 54, 57, 128, 65, 49, 54, 56, 128, 65, 49, 54, 55, 128, 65, + 49, 54, 54, 128, 65, 49, 54, 53, 128, 65, 49, 54, 52, 128, 65, 49, 54, + 51, 128, 65, 49, 54, 50, 128, 65, 49, 54, 49, 128, 65, 49, 54, 48, 128, + 65, 49, 53, 57, 128, 65, 49, 53, 56, 128, 65, 49, 53, 55, 128, 65, 49, + 53, 54, 128, 65, 49, 53, 53, 128, 65, 49, 53, 52, 128, 65, 49, 53, 51, + 128, 65, 49, 53, 50, 128, 65, 49, 53, 49, 128, 65, 49, 53, 48, 128, 65, + 49, 52, 57, 128, 65, 49, 52, 56, 128, 65, 49, 52, 55, 128, 65, 49, 52, + 54, 128, 65, 49, 52, 53, 128, 65, 49, 52, 52, 128, 65, 49, 52, 51, 128, + 65, 49, 52, 50, 128, 65, 49, 52, 49, 128, 65, 49, 52, 48, 128, 65, 49, + 51, 57, 128, 65, 49, 51, 56, 128, 65, 49, 51, 55, 128, 65, 49, 51, 54, + 128, 65, 49, 51, 53, 65, 128, 65, 49, 51, 53, 128, 65, 49, 51, 52, 128, + 65, 49, 51, 51, 128, 65, 49, 51, 50, 128, 65, 49, 51, 49, 67, 128, 65, + 49, 51, 49, 128, 65, 49, 51, 48, 128, 65, 49, 50, 57, 128, 65, 49, 50, + 56, 128, 65, 49, 50, 55, 128, 65, 49, 50, 54, 128, 65, 49, 50, 53, 65, + 128, 65, 49, 50, 53, 128, 65, 49, 50, 52, 128, 65, 49, 50, 51, 128, 65, + 49, 50, 50, 128, 65, 49, 50, 49, 128, 65, 49, 50, 48, 66, 128, 65, 49, + 50, 48, 128, 65, 49, 49, 57, 128, 65, 49, 49, 56, 128, 65, 49, 49, 55, + 128, 65, 49, 49, 54, 128, 65, 49, 49, 53, 65, 128, 65, 49, 49, 53, 128, + 65, 49, 49, 52, 128, 65, 49, 49, 51, 128, 65, 49, 49, 50, 128, 65, 49, + 49, 49, 128, 65, 49, 49, 48, 66, 128, 65, 49, 49, 48, 65, 128, 65, 49, + 49, 48, 128, 65, 49, 48, 57, 128, 65, 49, 48, 56, 128, 65, 49, 48, 55, + 67, 128, 65, 49, 48, 55, 66, 128, 65, 49, 48, 55, 65, 128, 65, 49, 48, + 55, 128, 65, 49, 48, 54, 128, 65, 49, 48, 53, 66, 128, 65, 49, 48, 53, + 65, 128, 65, 49, 48, 53, 128, 65, 49, 48, 52, 67, 128, 65, 49, 48, 52, + 66, 128, 65, 49, 48, 52, 65, 128, 65, 49, 48, 52, 128, 65, 49, 48, 51, + 128, 65, 49, 48, 50, 65, 128, 65, 49, 48, 50, 128, 65, 49, 48, 49, 65, + 128, 65, 49, 48, 49, 128, 65, 49, 48, 48, 65, 128, 65, 49, 48, 48, 45, + 49, 48, 50, 128, 65, 49, 48, 48, 128, 65, 48, 57, 57, 128, 65, 48, 57, + 56, 65, 128, 65, 48, 57, 56, 128, 65, 48, 57, 55, 65, 128, 65, 48, 57, + 55, 128, 65, 48, 57, 54, 128, 65, 48, 57, 53, 128, 65, 48, 57, 52, 128, + 65, 48, 57, 51, 128, 65, 48, 57, 50, 128, 65, 48, 57, 49, 128, 65, 48, + 57, 48, 128, 65, 48, 56, 57, 128, 65, 48, 56, 56, 128, 65, 48, 56, 55, + 128, 65, 48, 56, 54, 128, 65, 48, 56, 53, 128, 65, 48, 56, 52, 128, 65, + 48, 56, 51, 128, 65, 48, 56, 50, 128, 65, 48, 56, 49, 128, 65, 48, 56, + 48, 128, 65, 48, 55, 57, 128, 65, 48, 55, 56, 128, 65, 48, 55, 55, 128, + 65, 48, 55, 54, 128, 65, 48, 55, 53, 128, 65, 48, 55, 52, 128, 65, 48, + 55, 51, 128, 65, 48, 55, 50, 128, 65, 48, 55, 49, 128, 65, 48, 55, 48, + 128, 65, 48, 54, 57, 128, 65, 48, 54, 56, 128, 65, 48, 54, 55, 128, 65, + 48, 54, 54, 67, 128, 65, 48, 54, 54, 66, 128, 65, 48, 54, 54, 65, 128, + 65, 48, 54, 54, 128, 65, 48, 54, 53, 128, 65, 48, 54, 52, 128, 65, 48, + 54, 51, 128, 65, 48, 54, 50, 128, 65, 48, 54, 49, 128, 65, 48, 54, 48, + 128, 65, 48, 53, 57, 128, 65, 48, 53, 56, 128, 65, 48, 53, 55, 128, 65, + 48, 53, 54, 128, 65, 48, 53, 53, 128, 65, 48, 53, 52, 128, 65, 48, 53, + 51, 128, 65, 48, 53, 50, 128, 65, 48, 53, 49, 128, 65, 48, 53, 48, 128, + 65, 48, 52, 57, 128, 65, 48, 52, 56, 128, 65, 48, 52, 55, 128, 65, 48, + 52, 54, 66, 128, 65, 48, 52, 54, 65, 128, 65, 48, 52, 54, 128, 65, 48, + 52, 53, 65, 128, 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, 52, + 51, 65, 128, 65, 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, 52, + 50, 128, 65, 48, 52, 49, 65, 128, 65, 48, 52, 49, 128, 65, 48, 52, 48, + 65, 128, 65, 48, 52, 48, 128, 65, 48, 51, 57, 65, 128, 65, 48, 51, 57, + 128, 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, 65, 48, 51, 54, 128, 65, + 48, 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, 51, 51, 128, 65, 48, 51, + 50, 65, 128, 65, 48, 50, 56, 66, 128, 65, 48, 50, 54, 65, 128, 65, 48, + 49, 55, 65, 128, 65, 48, 49, 52, 65, 128, 65, 48, 49, 48, 65, 128, 65, + 48, 48, 54, 66, 128, 65, 48, 48, 54, 65, 128, 65, 48, 48, 53, 65, 128, + 65, 45, 69, 85, 128, 45, 85, 205, 45, 80, 72, 82, 85, 128, 45, 75, 72, + 89, 85, 196, 45, 75, 72, 89, 73, 76, 128, 45, 68, 90, 85, 196, 45, 67, + 72, 65, 210, 45, 67, 72, 65, 76, 128, }; static unsigned int lexicon_offset[] = { - 0, 0, 6, 10, 14, 22, 27, 34, 39, 45, 47, 50, 62, 70, 80, 89, 102, 108, - 113, 118, 126, 135, 140, 145, 148, 152, 158, 164, 169, 177, 182, 189, - 197, 198, 201, 209, 215, 224, 231, 241, 248, 253, 256, 261, 149, 267, - 273, 276, 280, 285, 291, 297, 302, 308, 313, 322, 328, 335, 342, 351, - 356, 361, 369, 371, 372, 380, 388, 395, 398, 404, 411, 416, 418, 425, - 427, 306, 429, 431, 436, 443, 451, 455, 461, 466, 471, 476, 483, 493, - 496, 503, 513, 522, 529, 538, 545, 549, 557, 560, 573, 580, 584, 593, - 597, 601, 607, 611, 615, 616, 625, 633, 638, 646, 651, 657, 665, 668, - 675, 684, 692, 695, 698, 700, 706, 714, 721, 724, 734, 738, 742, 753, - 758, 762, 766, 773, 780, 784, 788, 782, 794, 798, 803, 806, 810, 816, - 821, 830, 838, 843, 610, 543, 848, 851, 857, 861, 867, 874, 877, 886, - 895, 902, 915, 919, 927, 936, 942, 950, 957, 967, 974, 979, 985, 993, - 997, 1000, 21, 1009, 1018, 1026, 1030, 1035, 1038, 1047, 1052, 1054, - 1061, 1065, 1068, 1071, 1078, 1083, 1087, 1090, 1094, 1102, 1108, 1118, - 1124, 1131, 1135, 1143, 1146, 1151, 1157, 1163, 1167, 1174, 1179, 1184, - 1190, 1195, 1200, 1205, 1209, 1214, 1220, 1225, 1230, 1234, 1240, 1245, - 1250, 1255, 1259, 1264, 1269, 1274, 1280, 1286, 1292, 1297, 1301, 1306, - 1311, 1316, 1320, 1325, 1330, 1335, 1340, 1175, 1180, 1185, 1191, 1196, - 1344, 1206, 1350, 1355, 1360, 1367, 1371, 1374, 1383, 1210, 1387, 1215, - 1221, 1226, 1391, 1396, 1401, 1405, 1409, 1415, 1419, 1231, 1422, 1241, - 1427, 1431, 1246, 1437, 1251, 1441, 1445, 1256, 1449, 1454, 1458, 1461, - 1465, 1260, 1265, 1470, 1270, 1476, 1482, 1488, 1494, 1275, 1287, 1293, - 1498, 1502, 1506, 1509, 1298, 1513, 1515, 1520, 1525, 1531, 1536, 1541, - 1545, 1550, 1555, 1560, 1565, 1571, 1576, 1581, 1587, 1593, 1598, 1602, - 1607, 1612, 1617, 1622, 1627, 1631, 1639, 1644, 1648, 1653, 1658, 1663, - 1668, 1672, 1675, 1682, 1687, 1692, 1697, 1702, 1708, 1713, 1717, 1302, - 1720, 1725, 1730, 1307, 1734, 1738, 1745, 1312, 1752, 1317, 1756, 1758, - 1763, 1769, 1321, 1774, 1783, 1326, 1788, 1794, 1799, 1331, 1804, 1809, - 1812, 1817, 1821, 1825, 1829, 1832, 1836, 1336, 1341, 1841, 1843, 1849, - 1855, 1861, 1867, 1873, 1879, 1885, 1891, 1896, 1902, 1908, 1914, 1920, - 1926, 1932, 1938, 1944, 1950, 1955, 1960, 1965, 1970, 1975, 1980, 1985, - 1990, 1995, 2000, 2006, 2011, 2017, 2022, 2028, 2034, 2039, 2045, 2051, - 2057, 2063, 2068, 2073, 2075, 2076, 2080, 2084, 2089, 2093, 2097, 2101, - 2106, 2110, 2113, 2118, 2122, 2127, 2131, 2135, 2140, 2144, 2147, 2151, - 2157, 2171, 2175, 2179, 2183, 2186, 2191, 2195, 2199, 2202, 2206, 2211, - 2216, 2221, 2226, 2230, 2234, 2238, 2242, 2247, 2251, 2256, 2260, 2265, - 2271, 2278, 2284, 2289, 2294, 2299, 2305, 2310, 2316, 2321, 2324, 2326, - 1192, 2330, 2337, 2345, 2355, 2364, 2378, 2382, 2386, 2391, 2404, 2412, - 2416, 2421, 2425, 2428, 2432, 2436, 2441, 2446, 2451, 2455, 2458, 2462, - 2469, 2476, 2482, 2487, 2492, 2498, 2504, 2509, 2512, 1760, 2514, 2520, - 2524, 2529, 2533, 2537, 1678, 1771, 2542, 2546, 2549, 2554, 2559, 2564, - 2569, 2573, 2580, 2585, 2588, 2595, 2601, 2605, 2609, 2613, 2618, 2625, - 2630, 2635, 2642, 2648, 2654, 2660, 2674, 2691, 2706, 2721, 2730, 2735, - 2739, 2744, 2749, 2753, 2765, 2772, 2778, 2274, 2784, 2791, 2797, 2801, - 2804, 2811, 2817, 2822, 2826, 2831, 2835, 2839, 2098, 2843, 2848, 2853, - 2857, 2862, 2870, 2874, 2878, 2882, 2886, 2891, 2896, 2901, 2905, 2910, - 2915, 2919, 2924, 2928, 2931, 2935, 2939, 2947, 2952, 2956, 2960, 2966, - 2975, 2979, 2983, 2989, 2994, 3001, 3005, 3015, 3019, 3023, 3028, 3032, - 3037, 3043, 3048, 3052, 3056, 3060, 2472, 3068, 3073, 3079, 3084, 3088, - 3093, 3098, 3102, 3108, 3113, 2102, 3119, 3125, 3130, 3135, 3140, 3145, - 3150, 3155, 3160, 3165, 3170, 3176, 3181, 1207, 101, 3187, 3191, 3195, - 3199, 3204, 3208, 3212, 3218, 3223, 3227, 3231, 3236, 3241, 3245, 3250, - 3254, 3257, 3261, 3266, 3270, 3275, 3279, 3282, 3286, 3290, 3295, 3299, - 3302, 3315, 3319, 3323, 3327, 3332, 3336, 3340, 3343, 3347, 3351, 3356, - 3360, 3365, 3370, 3375, 3379, 3384, 3387, 3390, 3395, 3401, 3405, 3409, - 3412, 3417, 3421, 3426, 3430, 3434, 3437, 3443, 3448, 3453, 3459, 3464, - 3469, 3475, 3481, 3486, 3491, 3496, 3501, 1063, 559, 3504, 3507, 3512, - 3516, 3520, 3524, 3528, 3531, 3535, 3540, 3545, 3549, 3554, 3558, 3563, - 3567, 3571, 3575, 3581, 3587, 3590, 3593, 3599, 3606, 3613, 3619, 3626, - 3631, 3635, 3639, 3646, 3651, 3658, 3663, 3667, 3677, 3681, 3685, 3690, - 3695, 3705, 2114, 3710, 3714, 3717, 3723, 3728, 3734, 3740, 3745, 3752, - 3756, 3760, 612, 693, 1368, 3764, 3771, 3778, 3784, 3789, 3796, 3803, - 3809, 3815, 3820, 3824, 3830, 3837, 3842, 3846, 2123, 3850, 3858, 679, - 3864, 3875, 3879, 3889, 2128, 3895, 3900, 3915, 3921, 3928, 3938, 3944, - 3949, 3955, 3961, 3964, 3967, 3971, 3976, 3983, 3988, 3992, 3996, 4000, - 4004, 4009, 4015, 4026, 4030, 3262, 4035, 4047, 4055, 4059, 4064, 1547, - 4071, 4074, 4077, 4081, 4084, 4090, 4094, 4108, 4112, 4115, 4119, 4125, - 4131, 4136, 4140, 4144, 4150, 4161, 4167, 4172, 4178, 4182, 4190, 4202, - 4212, 4218, 4223, 4232, 4240, 4247, 4251, 4257, 4266, 4275, 4279, 4284, - 4289, 4293, 4301, 4305, 4310, 4314, 4320, 2136, 1384, 4326, 4331, 4337, - 4342, 4347, 4352, 4357, 4362, 4367, 4373, 4378, 4384, 4389, 4394, 4399, - 4405, 4410, 4415, 4420, 4425, 4431, 4436, 4442, 4447, 4452, 4457, 4462, - 4467, 4472, 4478, 4483, 4488, 271, 301, 4493, 4499, 4503, 4507, 4512, - 4516, 4520, 4523, 4527, 4531, 4535, 4539, 4543, 4548, 4552, 4556, 4562, - 4323, 4567, 4571, 4574, 4579, 4584, 4589, 4594, 4599, 4604, 4609, 4614, - 4619, 4624, 4628, 4633, 4638, 4643, 4648, 4653, 4658, 4663, 4668, 4673, - 4678, 4682, 4687, 4692, 4697, 4702, 4707, 4712, 4717, 4722, 4727, 4732, - 4736, 4741, 4746, 4751, 4756, 4761, 4766, 4771, 4776, 4781, 4786, 4790, - 4795, 4800, 4805, 4810, 4815, 4820, 4825, 4830, 4835, 4840, 4844, 4849, - 4854, 4859, 4864, 4869, 4874, 4879, 4884, 4889, 4894, 4898, 4903, 4908, - 4913, 4918, 4923, 4928, 4933, 4938, 4943, 4948, 4952, 4957, 4962, 4967, - 4972, 4978, 4984, 4990, 4996, 5002, 5008, 5014, 5019, 5025, 5031, 5037, - 5043, 5049, 5055, 5061, 5067, 5073, 5079, 5084, 5090, 5096, 5102, 5108, - 5114, 5120, 5126, 5132, 5138, 5144, 5149, 5155, 5161, 5167, 5173, 5179, - 5185, 5191, 5197, 5203, 5209, 5214, 5220, 5226, 5232, 5238, 5244, 5250, - 5256, 5262, 5268, 5274, 5279, 5285, 5291, 5297, 5303, 5309, 5315, 5321, - 5327, 5333, 5339, 5344, 5348, 5354, 5360, 5366, 5372, 5378, 5384, 5390, - 5396, 5402, 5408, 5413, 5419, 5425, 5431, 5437, 5443, 5449, 5455, 5461, - 5467, 5473, 5478, 5484, 5490, 5496, 5502, 5508, 5514, 5520, 5526, 5532, - 5538, 5543, 5549, 5555, 5561, 5567, 5573, 5579, 5585, 5591, 5597, 5603, - 5608, 5614, 5620, 5626, 5632, 5638, 5644, 5650, 5656, 5662, 5668, 5673, - 5679, 5685, 5691, 5697, 5703, 5709, 5715, 5721, 5727, 5733, 5738, 5744, - 5750, 5756, 5762, 5768, 5774, 5780, 5786, 5792, 5798, 5803, 5809, 5815, - 5821, 5827, 5833, 5839, 5845, 5851, 5857, 5863, 5868, 5874, 5880, 5886, - 5892, 5898, 5904, 5910, 5916, 5922, 5928, 5933, 5939, 5945, 5951, 5957, - 5963, 5969, 5975, 5981, 5987, 5993, 5998, 6002, 6005, 6012, 6016, 6029, - 6033, 6037, 6041, 6044, 6048, 6053, 6057, 6061, 6067, 6074, 6082, 6089, - 6093, 6101, 6110, 6116, 6128, 6133, 6136, 6141, 6145, 6155, 6163, 6171, - 6177, 6181, 6191, 6201, 6209, 6216, 6223, 6229, 6235, 6242, 6246, 6253, - 6263, 6273, 6281, 6288, 6293, 6297, 6301, 6309, 6313, 6318, 6325, 6333, - 6338, 6342, 6347, 6351, 6358, 6363, 6377, 6382, 6387, 6394, 3517, 6403, - 6407, 6412, 6416, 6420, 6423, 6428, 6433, 6442, 6448, 6454, 6460, 6464, - 6475, 6485, 6500, 6515, 6530, 6545, 6560, 6575, 6590, 6605, 6620, 6635, - 6650, 6665, 6680, 6695, 6710, 6725, 6740, 6755, 6770, 6785, 6800, 6815, - 6830, 6845, 6860, 6875, 6890, 6905, 6920, 6935, 6950, 6965, 6980, 6995, - 7010, 7025, 7040, 7055, 7070, 7085, 7100, 7115, 7130, 7145, 7160, 7175, - 7190, 7205, 7220, 7229, 7238, 7243, 7249, 7259, 7263, 7267, 7272, 7277, - 7285, 7289, 7292, 7296, 3010, 7299, 7304, 305, 474, 7310, 7318, 7322, - 7326, 7329, 7333, 7339, 7343, 7351, 7357, 7362, 7369, 7377, 7384, 7390, - 7395, 7402, 7408, 7416, 7420, 7425, 7437, 7448, 7455, 7459, 7463, 7467, - 7470, 7476, 3287, 7480, 7486, 7491, 7496, 7501, 7507, 7512, 7517, 7522, - 7527, 7533, 7538, 7543, 7549, 7554, 7560, 7565, 7571, 7576, 7582, 7587, - 7592, 7597, 7602, 7607, 7613, 7618, 7623, 7628, 7634, 7640, 7646, 7652, - 7658, 7664, 7670, 7676, 7682, 7688, 7694, 7700, 7705, 7710, 7715, 7720, - 7725, 7730, 7735, 7740, 7746, 7752, 7757, 7763, 7769, 7775, 7780, 7785, - 7790, 7795, 7801, 7807, 7812, 7817, 7822, 7827, 7832, 7838, 7843, 7849, - 7855, 7861, 7867, 7873, 7879, 7885, 7891, 7897, 2145, 7328, 7902, 7906, - 7910, 7913, 7920, 7923, 7927, 7935, 7940, 7945, 7936, 7950, 2172, 7954, - 7960, 7966, 7971, 7976, 7983, 7991, 7996, 8000, 8003, 8007, 8013, 8019, - 8023, 2180, 595, 8026, 8030, 8035, 8041, 8046, 8050, 8053, 8057, 8063, - 8068, 8072, 8079, 8083, 8087, 8091, 800, 872, 8094, 8102, 8109, 8115, - 8122, 8130, 8137, 8144, 8149, 8161, 1227, 1392, 1397, 8172, 1402, 8176, - 8180, 8189, 8197, 8206, 8212, 8217, 8221, 8227, 8232, 2726, 8239, 8243, - 8252, 8261, 8270, 8279, 8284, 8289, 8300, 8312, 8317, 8325, 2231, 8329, - 8331, 8336, 8340, 8349, 8357, 1406, 138, 3559, 3564, 8363, 8367, 8376, - 8382, 8387, 8390, 8399, 3568, 2718, 8405, 8413, 8417, 8421, 8425, 2248, - 8429, 8434, 8441, 8447, 8453, 8456, 8458, 8461, 8469, 8477, 8485, 8488, - 8493, 2261, 8498, 7947, 8501, 8503, 8508, 8513, 8518, 8523, 8528, 8533, - 8538, 8543, 8548, 8553, 8559, 8564, 8569, 8574, 8580, 8585, 8590, 8595, - 8600, 8605, 8610, 8616, 8621, 8626, 8631, 8636, 8641, 8646, 8651, 8656, - 8661, 8666, 8671, 8676, 8681, 8686, 8691, 8696, 8701, 8707, 8713, 8718, - 8723, 8728, 8733, 8738, 2272, 2279, 2285, 8743, 8751, 8757, 8765, 2311, - 2317, 8773, 8777, 8782, 8786, 8790, 8794, 8799, 8803, 8808, 8812, 8815, - 8818, 8824, 8830, 8836, 8842, 8848, 8854, 8860, 8864, 8868, 8872, 8876, - 8881, 8885, 8890, 8894, 8900, 8905, 8912, 8923, 8931, 8941, 8947, 8954, - 8959, 8963, 8974, 8987, 8998, 9011, 9022, 9034, 9046, 9058, 9071, 9084, - 9091, 9097, 9111, 9118, 9124, 9128, 9133, 9137, 9144, 9152, 9156, 9162, - 9166, 9172, 9182, 9186, 9191, 9196, 9203, 9209, 8117, 9219, 9223, 9230, - 9236, 9243, 871, 9247, 9251, 9256, 9261, 9266, 9270, 9276, 9284, 9290, - 9294, 9300, 9310, 9314, 9320, 9325, 9329, 9333, 9339, 9345, 2168, 9350, - 9352, 9357, 9365, 9374, 9378, 9384, 9389, 9394, 9399, 9404, 9410, 9415, - 9420, 4146, 9425, 9430, 9434, 9440, 9445, 9451, 9456, 9461, 9467, 9472, - 9379, 9478, 9482, 9489, 9495, 9500, 9504, 6373, 9509, 9518, 9523, 9528, - 8437, 8444, 9533, 2888, 9537, 9542, 9547, 9552, 9390, 9556, 9561, 9566, - 9395, 9570, 9400, 9575, 9582, 9589, 9595, 9602, 9608, 9614, 9619, 9626, - 9631, 9636, 9641, 9647, 9405, 9411, 9653, 9659, 9664, 9669, 9677, 9416, - 9682, 1028, 9685, 9693, 9699, 9705, 9714, 9722, 9730, 9738, 9746, 9754, - 9762, 9770, 9778, 9787, 9796, 9804, 9813, 9822, 9831, 9840, 9849, 9858, - 9867, 9876, 9885, 9894, 9902, 9907, 9913, 9921, 9928, 9943, 9960, 9979, - 9988, 9996, 10011, 10022, 10032, 10042, 10050, 10056, 10068, 10077, - 10085, 10092, 10099, 10105, 10110, 10120, 10128, 10138, 10145, 10155, - 10165, 10175, 10183, 10190, 10199, 10209, 10223, 10238, 10247, 10255, - 10260, 10264, 10273, 10279, 10284, 10294, 10304, 10314, 10319, 10323, - 10332, 10337, 10347, 10358, 10371, 10379, 10392, 10404, 10412, 10417, - 10421, 10427, 10432, 10440, 10448, 10455, 10460, 10468, 10478, 10484, - 10488, 10491, 10495, 10501, 10505, 10513, 10522, 10527, 10531, 10535, - 10543, 10551, 10560, 10568, 10574, 10578, 10585, 10596, 10600, 10603, - 10609, 9421, 10614, 10620, 10627, 10633, 10638, 10645, 10652, 10659, - 10666, 10673, 10680, 10687, 10694, 10699, 9956, 10704, 10710, 10717, - 10724, 10729, 10736, 10745, 10749, 10761, 8475, 10765, 10768, 10772, - 10776, 10780, 10784, 10790, 10796, 10801, 10807, 10812, 10817, 10823, - 10828, 10833, 9199, 10838, 10842, 10846, 10850, 10855, 10860, 10865, - 10873, 10879, 10883, 10887, 10894, 10899, 10907, 10914, 10919, 10923, - 10926, 10932, 10939, 10943, 10946, 10951, 10955, 4185, 10961, 10970, 36, - 10978, 10984, 10989, 10994, 9214, 11000, 11006, 11011, 11015, 11018, - 11033, 11052, 11064, 11077, 11090, 11103, 11117, 11130, 11145, 11152, - 9426, 11158, 11172, 11177, 11183, 11188, 11196, 11201, 8248, 11206, - 11209, 11217, 11224, 11229, 11233, 11239, 2893, 1133, 11243, 11247, - 11253, 11259, 11264, 11270, 11275, 9435, 11281, 11287, 11292, 11297, - 11305, 11311, 11324, 11332, 11339, 9441, 11345, 11353, 11361, 11368, - 11381, 11393, 11403, 11411, 11418, 11425, 11435, 11444, 11453, 11461, - 11468, 11473, 11479, 9446, 11484, 11490, 11495, 11500, 9452, 11505, - 11508, 11515, 11521, 11534, 8916, 11545, 11551, 11560, 11568, 11575, - 11581, 11592, 11598, 3780, 11603, 11608, 11025, 11614, 11621, 11626, - 9457, 11632, 11637, 11644, 11650, 11656, 11661, 11669, 11677, 11684, - 11688, 11700, 11714, 11724, 11729, 11733, 11744, 11750, 11755, 11760, - 9462, 11764, 9468, 11769, 11772, 11777, 11789, 11796, 11801, 11805, - 11813, 11818, 11822, 11827, 11834, 11840, 9473, 9380, 11847, 2898, 8, - 11854, 11859, 11863, 11867, 11873, 11881, 11891, 11896, 11901, 11908, - 11915, 11919, 11930, 11940, 11949, 11958, 11970, 11975, 11979, 11987, - 12001, 12005, 12008, 12016, 12023, 12031, 12035, 12046, 12050, 12057, - 12062, 12066, 12072, 12077, 12082, 12086, 12092, 12097, 12108, 12112, - 12115, 12121, 12126, 12132, 12138, 12145, 12156, 12166, 12176, 12185, - 12192, 12201, 12205, 9483, 9490, 9496, 9501, 12211, 12217, 12223, 9505, - 12229, 12232, 12239, 12244, 12259, 12275, 12290, 12298, 12304, 12309, - 864, 354, 12314, 12322, 12329, 12335, 12340, 12345, 9510, 12347, 12351, - 12356, 12360, 12370, 12375, 12379, 12388, 12392, 12395, 12402, 9519, - 12407, 12410, 12418, 12425, 12433, 12437, 12441, 12448, 12457, 12464, - 12460, 12471, 12475, 12481, 12485, 12489, 12493, 12499, 12509, 12517, - 12524, 12528, 12536, 12540, 12547, 12551, 12556, 12560, 12567, 12573, - 12581, 12587, 12592, 12602, 12607, 12612, 12616, 12624, 4041, 12632, - 12637, 9524, 12641, 12645, 12648, 12656, 12663, 12667, 6173, 12671, - 12676, 12680, 12691, 12701, 12706, 12712, 12716, 12719, 12727, 12732, - 12737, 12744, 12749, 9529, 12754, 12758, 12765, 1722, 6331, 12770, 12775, - 12780, 12785, 12791, 12796, 12802, 12807, 12812, 12817, 12822, 12827, - 12832, 12837, 12842, 12847, 12852, 12857, 12862, 12867, 12872, 12877, - 12882, 12888, 12893, 12898, 12903, 12908, 12913, 12919, 12924, 12929, - 12935, 12940, 12946, 12951, 12957, 12962, 12967, 12972, 12977, 12983, - 12988, 12993, 12998, 836, 117, 13006, 13010, 13015, 13020, 13024, 13028, - 13032, 13037, 13041, 13046, 13050, 13053, 13057, 13061, 13067, 13072, - 13082, 13088, 13096, 13102, 13106, 13110, 13117, 13125, 13134, 13145, - 13152, 13159, 13163, 13172, 13181, 13189, 13198, 13207, 13216, 13225, - 13235, 13245, 13255, 13265, 13275, 13284, 13294, 13304, 13314, 13324, - 13334, 13344, 13354, 13363, 13373, 13383, 13393, 13403, 13413, 13423, - 13432, 13442, 13452, 13462, 13472, 13482, 13492, 13502, 13512, 13522, - 13531, 13541, 13551, 13561, 13571, 13581, 13591, 13601, 13611, 13621, - 13631, 13640, 1236, 13646, 13649, 13653, 13658, 13665, 13671, 13676, - 13680, 13685, 13694, 13702, 13707, 13711, 13715, 13721, 13726, 13732, - 9538, 13737, 13742, 13751, 9548, 13756, 13759, 13765, 13773, 9553, 13780, - 13784, 13788, 13793, 13797, 13807, 13813, 13819, 13824, 13833, 13841, - 13848, 13855, 13860, 13867, 13872, 13876, 13879, 13890, 13900, 13909, - 13917, 13928, 13940, 13950, 13955, 13959, 13964, 13969, 13973, 13979, - 13987, 13994, 14005, 14010, 14020, 14029, 14033, 14036, 14043, 14053, - 14062, 14069, 14073, 14080, 14086, 14091, 14096, 14100, 14109, 14114, - 14118, 14124, 14128, 14133, 14137, 14146, 14154, 14162, 14169, 14177, - 14189, 14200, 14210, 14217, 14223, 14232, 14243, 14252, 14264, 14276, - 14288, 14298, 14307, 14316, 14324, 14331, 14340, 14348, 14352, 14357, - 14363, 14369, 14374, 14379, 7968, 14383, 14385, 14389, 14394, 14400, - 14406, 14415, 14419, 14425, 14433, 14440, 14449, 14458, 14467, 14476, - 14485, 14494, 14503, 14512, 14522, 14532, 14541, 14547, 14554, 14561, - 14567, 14581, 14588, 14596, 14605, 14611, 14620, 14629, 14640, 14650, - 14658, 14665, 14673, 14682, 14695, 14703, 14710, 14723, 14729, 14735, - 14745, 14754, 14763, 14768, 14772, 14778, 14784, 14789, 14796, 14803, - 9213, 14808, 14813, 14820, 14827, 14832, 14844, 13063, 14849, 14857, - 14863, 14868, 14876, 14884, 14891, 14899, 14905, 14913, 14921, 14927, - 14932, 14938, 14945, 14951, 14956, 14960, 14971, 14979, 14985, 14990, - 14997, 15006, 15012, 15017, 15025, 15034, 15048, 3985, 15052, 15057, - 15062, 15068, 15073, 15078, 15082, 15087, 15092, 15097, 7967, 15102, - 15107, 15112, 15117, 15122, 15126, 15131, 15136, 15141, 15146, 15152, - 15158, 15163, 15167, 15173, 15178, 15183, 15188, 9557, 15193, 15198, - 15203, 15208, 15213, 15230, 15248, 15260, 15273, 15290, 15306, 15323, - 15333, 15352, 15363, 15374, 15385, 15396, 15408, 15419, 15430, 15447, - 15458, 15469, 15474, 9562, 15479, 15483, 2401, 15487, 15490, 15496, - 15504, 15512, 15517, 15525, 15533, 15540, 15544, 15549, 15555, 15562, - 15570, 15577, 15589, 15597, 15602, 15608, 12253, 15614, 15623, 15631, - 15640, 15648, 15655, 15661, 15669, 15676, 15682, 15689, 15696, 15702, - 15708, 15717, 15725, 15735, 15742, 15748, 15756, 15762, 15770, 15778, - 15785, 15798, 15805, 15814, 15823, 15832, 15840, 15850, 15857, 15862, - 3671, 15869, 15874, 1352, 15878, 15103, 15882, 15888, 15892, 15900, - 15912, 15919, 15925, 15930, 15937, 15108, 15941, 15945, 15949, 15113, - 15953, 15118, 15957, 15964, 15969, 15973, 15980, 15984, 15992, 15999, - 16004, 16008, 16015, 16032, 16041, 16045, 16048, 16056, 16062, 16067, - 3749, 16071, 16073, 16081, 16088, 16098, 16110, 16115, 16119, 16125, - 16130, 16134, 16140, 16145, 16151, 16154, 16161, 16169, 16176, 16182, - 16188, 16193, 16200, 16206, 16211, 16218, 16222, 16228, 16232, 16239, - 16245, 16250, 16256, 16264, 16272, 16279, 16285, 16290, 16296, 16302, - 16310, 16318, 16324, 16330, 16335, 16342, 16347, 16351, 16357, 16362, - 16369, 16374, 16380, 16383, 16389, 16395, 16398, 16402, 16406, 16418, - 16424, 16429, 16436, 16442, 16448, 16459, 16469, 16478, 16486, 16493, - 16504, 16514, 16524, 16532, 16535, 15132, 16540, 16545, 15137, 15278, - 16553, 16566, 16581, 16592, 15295, 16610, 16623, 16636, 16647, 11040, - 16658, 16671, 16690, 16701, 16712, 16723, 2669, 16736, 16740, 16748, - 16756, 16771, 16786, 16797, 16804, 16810, 16818, 16822, 16828, 16831, - 16841, 16849, 16856, 16864, 16874, 16879, 16886, 16891, 16898, 16909, - 16919, 16925, 16930, 16935, 15142, 16939, 16945, 16951, 16956, 16961, - 16966, 16970, 15147, 15153, 16974, 15159, 16979, 16987, 16995, 17002, - 17011, 17018, 17022, 9401, 17026, 17028, 17033, 17038, 17044, 17049, - 17054, 17059, 17064, 17068, 17074, 17080, 17085, 17091, 17096, 17101, - 17105, 17111, 17116, 17121, 17126, 17131, 17137, 17142, 17147, 17153, - 17159, 17164, 17169, 17174, 17181, 17187, 17198, 17205, 17210, 17214, - 17218, 17221, 17229, 17234, 17241, 17248, 17254, 17259, 17264, 17269, - 17276, 17286, 17291, 17298, 17304, 17313, 17323, 17333, 17347, 17361, - 17375, 17389, 17404, 17419, 17436, 17454, 17467, 17473, 17478, 17483, - 17487, 17495, 17500, 17508, 17514, 17520, 17525, 17530, 17534, 17539, - 17543, 17548, 17552, 17563, 17569, 17574, 17579, 17586, 17591, 17595, - 17600, 17605, 17611, 17618, 15168, 17624, 17628, 17634, 17639, 17644, - 17648, 17654, 17659, 17664, 17671, 17676, 13809, 17680, 17685, 17689, - 17694, 17700, 17706, 17713, 17723, 17731, 17738, 17743, 17747, 17756, - 17764, 17771, 17778, 17784, 17790, 17795, 17800, 17806, 17811, 17817, - 17822, 17828, 17834, 17841, 17847, 17852, 17857, 9627, 17866, 17869, - 17877, 17883, 17888, 17893, 17903, 17910, 17916, 17921, 17926, 17932, - 17937, 17943, 17948, 17954, 17960, 17965, 17973, 17980, 17985, 17990, - 17996, 18001, 18005, 18014, 18025, 18032, 18037, 18042, 18048, 18053, - 18061, 18067, 18073, 18080, 18086, 18091, 18095, 18101, 18106, 18111, - 18116, 1423, 7992, 2912, 18120, 18124, 18128, 18132, 18136, 18140, 18143, - 18148, 18155, 18163, 15179, 18170, 18180, 18188, 18195, 18203, 18213, - 18222, 18235, 18240, 18245, 18253, 18260, 13905, 13914, 18267, 18277, - 18292, 18298, 18305, 18312, 18318, 18324, 18332, 18342, 18352, 15184, - 18361, 18367, 18373, 18381, 18389, 18394, 18403, 18411, 18423, 18433, - 18443, 18453, 18462, 18474, 18484, 18494, 18505, 18510, 18522, 18534, - 18546, 18558, 18570, 18582, 18594, 18606, 18618, 18630, 18641, 18653, - 18665, 18677, 18689, 18701, 18713, 18725, 18737, 18749, 18761, 18772, - 18784, 18796, 18808, 18820, 18832, 18844, 18856, 18868, 18880, 18892, - 18903, 18915, 18927, 18939, 18951, 18963, 18975, 18987, 18999, 19011, - 19023, 19034, 19046, 19058, 19070, 19082, 19094, 19106, 19118, 19130, - 19142, 19154, 19165, 19177, 19189, 19201, 19213, 19225, 19237, 19249, - 19261, 19273, 19285, 19296, 19308, 19320, 19332, 19344, 19356, 19368, - 19380, 19392, 19404, 19416, 19427, 19439, 19451, 19463, 19475, 19488, - 19501, 19514, 19527, 19540, 19553, 19566, 19578, 19591, 19604, 19617, - 19630, 19643, 19656, 19669, 19682, 19695, 19708, 19720, 19733, 19746, - 19759, 19772, 19785, 19798, 19811, 19824, 19837, 19850, 19862, 19875, - 19888, 19901, 19914, 19927, 19940, 19953, 19966, 19979, 19992, 20004, - 20017, 20030, 20043, 20056, 20069, 20082, 20095, 20108, 20121, 20134, - 20146, 20159, 20172, 20185, 20198, 20211, 20224, 20237, 20250, 20263, - 20276, 20288, 20299, 20312, 20325, 20338, 20351, 20364, 20377, 20390, - 20403, 20416, 20429, 20441, 20454, 20467, 20480, 20493, 20506, 20519, - 20532, 20545, 20558, 20571, 20583, 20596, 20609, 20622, 20635, 20648, - 20661, 20674, 20687, 20700, 20713, 20725, 20738, 20751, 20764, 20777, - 20790, 20803, 20816, 20829, 20842, 20855, 20867, 20880, 20893, 20906, - 20919, 20932, 20945, 20958, 20971, 20984, 20997, 21009, 21022, 21035, - 21048, 21061, 21074, 21087, 21100, 21113, 21126, 21139, 21151, 21164, - 21177, 21190, 21203, 21216, 21229, 21242, 21255, 21268, 21281, 21293, - 21306, 21319, 21332, 21345, 21358, 21371, 21384, 21397, 21410, 21423, - 21435, 21448, 21461, 21474, 21487, 21500, 21513, 21526, 21539, 21552, - 21565, 21577, 21590, 21603, 21616, 21629, 21642, 21655, 21668, 21681, - 21694, 21707, 21719, 21730, 21739, 21747, 21755, 21762, 21768, 21772, - 21778, 21784, 21792, 21797, 21803, 21808, 21812, 21821, 9406, 21832, - 21839, 21847, 21854, 21861, 11528, 21868, 21875, 21884, 21889, 21894, - 8020, 21901, 21906, 21909, 21914, 21922, 21929, 21936, 21943, 21949, - 21958, 21967, 21973, 21982, 21986, 21992, 21997, 22007, 22014, 22020, - 22028, 22034, 22041, 22051, 22060, 22064, 22071, 22075, 22080, 22086, - 22094, 22098, 22108, 15194, 22117, 22123, 22127, 22136, 22146, 15199, - 22152, 22159, 22170, 22178, 22188, 22197, 22205, 9178, 22213, 22218, - 22224, 22229, 22233, 22237, 22241, 10124, 22246, 22254, 22261, 22270, - 22277, 22284, 22290, 11448, 22297, 22303, 22307, 22313, 22320, 22326, - 22334, 22340, 22347, 22353, 22359, 22368, 22372, 22380, 22389, 22396, - 22401, 22405, 22416, 22421, 22426, 22431, 22444, 8203, 22448, 22454, - 22462, 22466, 22473, 22482, 22487, 15470, 22495, 22499, 22511, 22516, - 22520, 22523, 22529, 22535, 22541, 22546, 22550, 22553, 22564, 22569, - 9678, 22576, 22581, 1242, 9683, 22586, 22591, 22596, 22601, 22606, 22611, - 22616, 22621, 22626, 22631, 22636, 22641, 22647, 22652, 22657, 22662, - 22667, 22672, 22677, 22682, 22687, 22692, 22698, 22704, 22709, 22714, - 22719, 22724, 22729, 22734, 22739, 22744, 22749, 22755, 22760, 22765, - 22770, 22776, 22782, 22787, 22792, 22797, 22802, 22807, 22812, 22817, - 22822, 22828, 22833, 22838, 22843, 22848, 22854, 22859, 22864, 22868, - 134, 22876, 22880, 22884, 22888, 22893, 22897, 13815, 2327, 22901, 22906, - 22910, 22915, 22919, 22924, 22928, 22934, 22939, 22943, 22947, 22955, - 22959, 22963, 22968, 22973, 22977, 22983, 22988, 22992, 22997, 23002, - 23006, 23013, 23020, 23027, 23031, 23035, 23040, 23044, 23047, 23053, - 23066, 23071, 23080, 23085, 9903, 23090, 23095, 23098, 2732, 2737, 23102, - 23108, 23114, 7413, 23119, 23124, 23129, 23135, 23140, 14636, 23145, - 23150, 23155, 23160, 23166, 23171, 23176, 23182, 23187, 23191, 23196, - 23201, 23206, 23211, 23215, 23220, 23224, 23229, 23234, 23239, 23244, - 23248, 23253, 23257, 23262, 23267, 23272, 23277, 2921, 23192, 23281, - 23289, 23296, 10218, 23308, 23316, 23197, 23323, 23328, 23336, 23202, - 23341, 23346, 23354, 23359, 23207, 23364, 23372, 23377, 23381, 23387, - 23396, 23404, 23408, 23411, 23418, 23422, 23426, 23432, 23439, 23444, - 9205, 1727, 1732, 23448, 23454, 23460, 23465, 23469, 23473, 23477, 23481, - 23485, 23489, 23493, 23497, 23500, 23506, 23513, 23521, 23527, 23533, - 23538, 23543, 23547, 23552, 14556, 14563, 23559, 23571, 23574, 23581, - 17250, 23588, 23596, 23607, 23616, 23629, 23639, 23653, 23665, 23679, - 23692, 23704, 23714, 23726, 23732, 23747, 23771, 23789, 23808, 23821, - 23835, 23853, 23869, 23886, 23904, 23915, 23934, 23951, 23971, 23989, - 24001, 24015, 24029, 24041, 24058, 24077, 24095, 24107, 24125, 24144, - 15338, 24157, 24177, 24189, 11071, 24201, 24206, 24211, 24216, 24222, - 24227, 24231, 24238, 24244, 2418, 24248, 24254, 24258, 24261, 24265, - 24268, 24276, 24282, 23225, 24286, 24295, 24306, 24312, 24318, 24333, - 24342, 24350, 24357, 24362, 24366, 24373, 24379, 24388, 24396, 24403, - 24413, 24422, 24432, 24437, 24446, 24455, 24466, 24477, 4103, 24487, - 24491, 24501, 24509, 24519, 24530, 24535, 24545, 24553, 24560, 24566, - 24573, 24578, 23235, 24582, 24591, 24595, 24598, 24603, 24611, 24618, - 24627, 24635, 24643, 24653, 24662, 24668, 24674, 24678, 23240, 23245, - 24682, 24692, 24702, 24712, 24720, 24727, 24737, 24745, 24753, 24759, - 24767, 812, 24776, 15529, 577, 24790, 24799, 24807, 24818, 24829, 24839, - 24848, 24860, 24869, 24878, 24885, 24891, 24900, 24909, 24917, 24927, - 24935, 24943, 9644, 24949, 24952, 24956, 24961, 24966, 24970, 10333, - 23258, 23263, 24978, 24984, 24990, 24995, 25000, 25004, 25012, 25018, - 25024, 25028, 3627, 25036, 25041, 25046, 25050, 25054, 10413, 25061, - 25069, 25083, 25090, 25096, 10422, 10428, 25104, 25112, 25119, 25124, - 25129, 23268, 25135, 25146, 25150, 25155, 2621, 25160, 25171, 25177, - 25182, 25186, 25190, 25193, 25200, 25207, 25213, 25220, 25226, 25230, - 23273, 25235, 25239, 25243, 1428, 8385, 25248, 25253, 25258, 25263, - 25268, 25273, 25278, 25283, 25288, 25293, 25298, 25303, 25308, 25313, - 25319, 25324, 25329, 25334, 25339, 25344, 25349, 25355, 25360, 25365, - 25370, 25375, 25380, 25385, 25390, 25396, 25402, 25407, 25413, 25418, - 25423, 5, 25429, 25433, 25437, 25441, 25446, 25450, 25454, 25458, 25462, - 25467, 25471, 25476, 25480, 25483, 25487, 25492, 25496, 25501, 25505, - 25509, 25513, 25518, 25522, 25526, 25536, 25541, 25545, 25549, 25554, - 25559, 25568, 25573, 25578, 25582, 25586, 25599, 25611, 25620, 25629, - 25634, 25640, 25645, 25649, 25653, 25663, 25672, 25680, 25686, 25691, - 25695, 25702, 25712, 25721, 25729, 25737, 25744, 25752, 25761, 25770, - 25778, 25788, 25793, 25797, 25801, 25804, 25806, 25810, 25814, 25819, - 25824, 25828, 25832, 25835, 25839, 25842, 25846, 25849, 25852, 25856, - 25862, 25866, 25870, 25874, 25879, 25884, 25889, 25893, 25896, 25901, - 25907, 25912, 25918, 25923, 25927, 25933, 25937, 25941, 25946, 25950, - 25955, 25960, 25964, 25968, 25975, 25979, 25982, 25986, 25990, 25996, - 26002, 26006, 26010, 26015, 26022, 26028, 26032, 26041, 26045, 26049, - 26052, 26058, 26063, 26069, 1472, 1791, 26074, 26079, 26084, 26089, - 26094, 26099, 26104, 2155, 2201, 26109, 26112, 26116, 26120, 26125, - 26129, 15541, 26133, 26138, 26143, 26147, 26150, 26155, 26159, 26164, - 26168, 15545, 26173, 26176, 26179, 26183, 26188, 26192, 26205, 26209, - 26212, 26220, 26229, 26236, 26241, 26247, 26253, 26261, 26268, 26275, - 26279, 26283, 26287, 26292, 26297, 26301, 26309, 26314, 26326, 26337, - 26342, 26346, 26350, 26356, 26359, 26364, 26369, 26373, 26377, 26380, - 26386, 8123, 2331, 26390, 26395, 26411, 9950, 26431, 26440, 26456, 26460, - 26467, 26470, 26476, 26486, 26492, 26501, 26516, 26528, 26539, 26547, - 26556, 26562, 26571, 26581, 26591, 26602, 26613, 26623, 26632, 26639, - 26648, 26656, 26663, 26671, 26678, 26685, 26698, 26705, 26713, 26720, - 26726, 26731, 26740, 26746, 26751, 26759, 26766, 24511, 26778, 26790, - 26804, 26812, 26819, 26831, 26840, 26849, 26857, 26865, 26873, 26880, - 26889, 26897, 26907, 26916, 26926, 26935, 26944, 26952, 26957, 26961, - 26964, 26968, 26972, 26976, 26980, 26984, 26990, 26996, 27004, 15590, - 27011, 27016, 27023, 27029, 27036, 15598, 27043, 27046, 27058, 27066, - 27072, 27077, 27081, 10363, 27092, 27100, 27110, 27119, 27126, 27130, - 15609, 27133, 27140, 27144, 27150, 27153, 27160, 27166, 27173, 27179, - 27183, 27188, 27192, 27201, 27208, 27214, 8164, 27221, 27229, 27236, - 27242, 27247, 27253, 27259, 27267, 27273, 27277, 27280, 27282, 26969, - 27291, 27297, 27303, 27313, 27318, 27325, 27331, 27336, 27341, 27346, - 27350, 27355, 27362, 27368, 27377, 27381, 27388, 27394, 27403, 27409, - 27414, 27420, 27425, 27432, 27443, 27448, 27452, 27462, 27468, 27472, - 27477, 27487, 27496, 27500, 27507, 27515, 27522, 27528, 27533, 27541, - 27548, 27553, 27560, 27572, 27581, 27585, 13746, 27593, 27603, 27607, - 26216, 27618, 27623, 27627, 27634, 27641, 22979, 26894, 27646, 27650, - 27653, 23921, 27658, 27672, 27688, 27706, 27725, 27742, 27760, 23940, - 27777, 27797, 23957, 27809, 27821, 16597, 27833, 23977, 27847, 27859, - 11084, 27873, 27878, 27883, 27888, 27894, 27900, 27906, 27910, 27918, - 27925, 27930, 27940, 27946, 10707, 27952, 27954, 27959, 27967, 27971, - 27358, 27977, 27984, 12170, 12180, 27991, 28001, 28006, 28010, 28013, - 28019, 28027, 28039, 28049, 28065, 28078, 28092, 16615, 28106, 28113, - 28117, 28120, 28125, 28129, 28136, 28143, 28153, 28158, 28163, 28168, - 28176, 28184, 28189, 28198, 28203, 3329, 28207, 28210, 28213, 28218, - 28225, 28230, 28246, 28254, 28262, 9718, 28270, 28275, 28279, 28285, - 28290, 28296, 28299, 28305, 28317, 28325, 28332, 28338, 28345, 28356, - 28370, 28383, 28389, 28398, 28404, 28413, 28425, 28436, 28446, 28455, - 28464, 28472, 28483, 8146, 28490, 28497, 28503, 28508, 28514, 28521, - 28531, 28541, 28550, 28556, 28563, 28568, 28576, 28583, 28591, 28599, - 28611, 6438, 28618, 28621, 28630, 28638, 28644, 28650, 28655, 28659, - 28662, 28668, 28675, 28680, 28685, 28690, 28694, 28706, 28717, 28726, - 28734, 15757, 28739, 28745, 28751, 12163, 8862, 28756, 28760, 28764, - 28767, 28770, 28776, 28784, 28792, 28796, 28800, 28805, 28808, 28817, - 28821, 28824, 28832, 28843, 28847, 28853, 28859, 28863, 28869, 28877, - 28899, 28923, 28932, 28939, 28946, 28952, 28960, 28966, 28971, 28982, - 29000, 29007, 29015, 29019, 29024, 29033, 29046, 29054, 29066, 29077, - 29088, 29098, 29112, 29121, 29129, 29141, 9967, 29152, 29163, 29175, - 29185, 29194, 29199, 29203, 29211, 29222, 29232, 29237, 29241, 29244, - 29247, 29255, 29263, 29272, 29282, 29291, 29297, 29311, 2683, 29333, - 29344, 29353, 29363, 29375, 29384, 29393, 29403, 29411, 29419, 29428, - 29433, 29444, 29449, 29460, 29464, 29474, 29483, 29491, 29501, 29511, - 29519, 29528, 29535, 29543, 29550, 29559, 29568, 29572, 29580, 29587, - 29595, 29602, 29613, 29628, 29635, 29641, 29651, 29660, 29666, 29677, - 29681, 29688, 29692, 29698, 14758, 29704, 29708, 29713, 29720, 29724, - 29728, 29736, 29744, 29750, 29759, 29766, 29771, 29776, 29786, 24580, - 29790, 29793, 29798, 29803, 29808, 29813, 29818, 29823, 29828, 29833, - 29839, 29844, 29849, 29855, 1198, 699, 29860, 29869, 2379, 29876, 29881, - 29885, 29891, 1247, 558, 270, 29896, 29905, 29913, 29922, 29930, 29941, - 29949, 29958, 29966, 10502, 29970, 29978, 29986, 29991, 15558, 29997, - 30003, 30009, 6034, 30014, 30018, 30024, 30028, 30035, 1438, 30041, - 30048, 1347, 6042, 30052, 30062, 30070, 30076, 30085, 30093, 30099, - 30107, 30114, 11720, 30120, 30127, 30132, 30139, 1479, 199, 2154, 30145, - 30151, 30158, 30169, 30180, 30188, 30195, 30205, 30214, 30222, 30231, - 30238, 30245, 30258, 30265, 30271, 30282, 30301, 1252, 30305, 30310, - 30318, 3686, 30322, 30327, 30331, 30335, 1442, 25833, 30345, 30349, - 30354, 30358, 3595, 30364, 30372, 30379, 30390, 30398, 30406, 3687, 320, - 30411, 30419, 30427, 30434, 30440, 30445, 2223, 11251, 30452, 30458, - 27184, 27438, 30464, 542, 106, 30468, 30472, 30478, 635, 9593, 30483, - 30490, 30496, 30500, 1624, 30503, 30507, 16005, 30510, 30515, 30522, - 30528, 30533, 30541, 30548, 30554, 23361, 30558, 30562, 3757, 17541, - 30566, 30571, 30575, 30578, 30586, 30594, 30599, 30607, 30610, 30617, - 30627, 30639, 30644, 30648, 30656, 30663, 30669, 30676, 30683, 30686, - 30690, 30694, 1446, 30704, 30706, 30711, 30717, 30723, 30728, 30733, - 30738, 30743, 30748, 30753, 30758, 30763, 30768, 30773, 30778, 30783, - 30788, 30793, 30799, 30805, 30811, 30817, 30822, 30827, 30832, 30838, - 30843, 30848, 30853, 30859, 30864, 30870, 30875, 30880, 30885, 30890, - 30896, 30901, 30907, 30912, 30917, 30922, 30927, 30933, 30938, 30944, - 30949, 30954, 30959, 30964, 30969, 30974, 30979, 30984, 30989, 30995, - 31001, 31007, 31012, 31017, 31022, 31027, 31033, 31039, 31045, 31051, - 31057, 31063, 31068, 31074, 31079, 31084, 31089, 31094, 31100, 2463, - 31105, 2470, 2477, 2774, 31110, 2483, 2493, 31116, 31120, 31125, 31130, - 31136, 31141, 31146, 31150, 31155, 31161, 31166, 31171, 31176, 31182, - 31187, 31191, 31195, 31200, 31205, 31210, 31215, 31220, 31226, 31232, - 31237, 31241, 31246, 31252, 31256, 31261, 31266, 31271, 31276, 31280, - 31283, 31288, 31293, 31298, 31303, 31308, 31314, 31320, 31325, 31330, - 31335, 31339, 31344, 31349, 31354, 31359, 31364, 31369, 31373, 31378, - 31383, 31388, 31392, 31396, 31400, 31405, 31413, 31418, 31423, 31429, - 31435, 31441, 31446, 31450, 31453, 31458, 31463, 31467, 31472, 31477, - 31481, 31486, 31490, 31493, 31498, 3853, 18248, 31503, 31508, 31513, - 31521, 22273, 30045, 9273, 31526, 31531, 31535, 31540, 31544, 31548, - 31553, 31557, 31560, 31563, 31567, 31572, 31576, 31584, 31588, 31591, - 31596, 31600, 31604, 31609, 31614, 31618, 31624, 31629, 31634, 31641, - 31648, 31652, 31655, 31661, 31670, 31677, 31685, 31692, 31696, 31701, - 31705, 31709, 31715, 31721, 31725, 31731, 31736, 31741, 31745, 31752, - 31758, 31764, 31770, 31776, 31783, 31789, 31795, 31801, 31807, 31813, - 31819, 31825, 31832, 31838, 31845, 31851, 31857, 31863, 31869, 31875, - 31881, 31887, 31893, 31899, 12059, 31905, 31911, 31916, 31921, 31926, - 31929, 31935, 31943, 31948, 31952, 31957, 31963, 31972, 31978, 31983, - 31988, 31993, 31997, 32002, 32007, 32012, 32017, 32022, 32029, 32036, - 32042, 32048, 32053, 17191, 32060, 32066, 32073, 32079, 32085, 32090, - 32098, 32103, 10117, 32107, 32112, 32117, 32123, 32128, 32133, 32137, - 32142, 32147, 32153, 32158, 32163, 32168, 32172, 32177, 32182, 32186, - 32191, 32196, 32200, 32205, 32209, 32214, 32219, 32224, 32228, 32233, - 32237, 32241, 16111, 32246, 32255, 32261, 32267, 32276, 32284, 32293, - 32301, 32306, 32310, 32317, 32323, 32331, 32335, 32338, 32343, 32352, - 32360, 32378, 32384, 1478, 32390, 32393, 32397, 23455, 23461, 32403, - 32407, 32418, 32429, 32440, 32452, 32456, 32463, 32470, 32475, 32479, - 6079, 855, 22272, 32487, 32492, 32496, 32501, 32505, 32511, 32516, 32522, - 32527, 32533, 32538, 32544, 32549, 32555, 32561, 32567, 32572, 32528, - 32534, 32576, 32581, 32587, 32592, 32598, 32603, 32609, 32614, 32539, - 10957, 32618, 32550, 32556, 32562, 2866, 3509, 32624, 32627, 32632, - 32638, 32644, 32650, 32657, 32663, 32669, 32675, 32681, 32687, 32693, - 32699, 32705, 32711, 32717, 32723, 32729, 32736, 32742, 32748, 32754, - 32760, 32766, 32769, 32774, 32777, 32784, 32789, 32797, 32802, 32807, - 32813, 32818, 32823, 32827, 32832, 32838, 32843, 32849, 32854, 32860, - 32865, 32871, 32877, 32881, 32886, 32891, 32896, 32901, 32905, 32910, - 32915, 32920, 32926, 32932, 32938, 32944, 32949, 32953, 32956, 32962, - 32968, 32977, 32985, 32992, 32997, 33001, 33005, 33010, 15959, 33015, - 33023, 33029, 3805, 1357, 33034, 33038, 8213, 33044, 33050, 33057, 8222, - 33061, 33067, 33074, 33080, 33089, 33097, 33109, 33113, 33120, 33126, - 33131, 33135, 33139, 33142, 33151, 33159, 32529, 33164, 33174, 33184, - 33194, 33200, 33205, 33215, 33220, 33233, 33247, 33258, 33270, 33282, - 33296, 33309, 33321, 33333, 15379, 33347, 33352, 33357, 33361, 33365, - 33369, 1780, 28434, 33373, 33378, 32577, 33383, 33386, 33391, 33396, - 33401, 33407, 33413, 10622, 33418, 33424, 33431, 16549, 33437, 33442, - 33447, 33451, 33456, 33461, 32582, 33466, 33471, 33476, 33482, 32588, - 33487, 33490, 33497, 33505, 33511, 33517, 33523, 33534, 33539, 33546, - 33553, 33560, 33568, 33577, 33586, 33592, 33598, 33606, 32593, 33611, - 33617, 33623, 32599, 33628, 33633, 33641, 33649, 33655, 33662, 33668, - 33675, 33682, 33688, 33696, 33706, 33713, 33719, 33724, 33730, 33735, - 33740, 33747, 33756, 33764, 33769, 33775, 33782, 33790, 33796, 33801, - 33807, 33816, 33823, 29277, 33829, 33833, 33838, 33847, 33852, 33857, - 33862, 13092, 33870, 33875, 33880, 33885, 33889, 33894, 33899, 33906, - 33911, 33916, 33921, 32604, 22209, 33927, 2539, 222, 33930, 33933, 33937, - 33941, 33951, 33959, 33966, 33970, 33977, 33984, 33993, 33997, 34000, - 34006, 34014, 34022, 34026, 34030, 34033, 34039, 34046, 34050, 34054, - 34061, 34069, 32540, 34076, 34084, 10682, 598, 349, 34096, 34101, 34106, - 34112, 34117, 34122, 3826, 34127, 34130, 34135, 34140, 34145, 34150, - 34155, 34162, 23567, 34167, 34172, 34177, 34182, 34187, 34193, 34198, - 34204, 32780, 34210, 34215, 34221, 34227, 34237, 34242, 34247, 34251, - 34256, 34261, 34266, 34271, 34284, 34289, 23312, 17621, 3839, 34293, - 34299, 34304, 34309, 34315, 34320, 34325, 34329, 34334, 34339, 34345, - 34350, 34355, 1362, 34359, 34364, 34369, 34374, 34378, 34383, 34388, - 34393, 34399, 34405, 34410, 34414, 34418, 34423, 34428, 34433, 34437, - 34445, 34449, 34455, 34459, 34466, 17400, 32551, 34472, 34479, 34487, - 34494, 34500, 34513, 34525, 34530, 34536, 34540, 2793, 34544, 34548, - 34041, 34557, 34568, 34573, 29340, 34578, 34583, 34587, 34592, 23466, - 34596, 34600, 34605, 32557, 22299, 34609, 34614, 34620, 34625, 34629, - 34633, 34636, 34640, 34646, 34655, 34666, 34678, 32563, 34683, 34686, - 34690, 34694, 378, 34699, 34704, 34709, 34714, 34719, 34724, 34730, - 34735, 34740, 34746, 34751, 34757, 34762, 34768, 34773, 34778, 34783, - 34788, 34793, 34798, 34803, 34808, 34814, 34819, 34824, 34829, 34834, - 34839, 34844, 34849, 34855, 34861, 34866, 34871, 34876, 34881, 34886, - 34891, 34896, 34901, 34906, 34911, 34916, 34921, 34926, 34931, 34936, - 34941, 34946, 34951, 34957, 311, 13, 34962, 34966, 34970, 34978, 34982, - 34986, 34989, 34992, 34994, 34999, 35003, 35008, 35012, 35017, 35021, - 35026, 35030, 35033, 35035, 35039, 35044, 35048, 35059, 35062, 35064, - 35068, 35080, 35089, 35093, 35097, 35103, 35108, 35117, 35123, 35128, - 35133, 35137, 35141, 35146, 35153, 35158, 35164, 35169, 35173, 35180, - 26902, 26912, 35184, 35189, 35194, 35199, 35206, 35210, 35217, 35223, - 8332, 35227, 35236, 35244, 35259, 35273, 35281, 35292, 35301, 35306, - 7431, 35316, 35321, 35326, 35330, 35333, 35338, 35342, 35347, 35351, - 35358, 35363, 35368, 35373, 9159, 35383, 35385, 35388, 35391, 35395, - 35401, 35405, 35410, 35415, 35421, 35426, 35432, 35437, 35447, 35456, - 35464, 35469, 35475, 35480, 35489, 35500, 35505, 35512, 35516, 35524, - 35531, 35544, 35552, 35556, 35566, 35571, 35575, 35583, 35591, 35596, - 35600, 35604, 35613, 35619, 35624, 35632, 35642, 35651, 35660, 35669, - 35680, 35688, 35699, 35708, 35715, 35721, 35726, 35737, 35742, 35746, - 35749, 35753, 35761, 35767, 35771, 35779, 35785, 35792, 35798, 35803, - 35809, 2438, 35813, 35815, 35820, 35825, 35830, 35833, 35835, 35839, - 35842, 35849, 35853, 10376, 35857, 35863, 35873, 35878, 35884, 35888, - 35893, 35906, 27308, 35912, 35921, 35930, 18427, 35937, 35946, 33180, - 35954, 35959, 35963, 35972, 35980, 35987, 35992, 35996, 36001, 36009, - 36013, 36021, 36027, 36033, 36038, 36042, 36045, 36050, 36063, 36079, - 24047, 36096, 36108, 36125, 36137, 36151, 24064, 24083, 36163, 36175, - 2700, 36189, 36194, 36199, 36204, 36208, 36215, 36227, 36233, 36242, - 36245, 36256, 36267, 36272, 33603, 792, 36276, 36280, 36284, 36287, - 36292, 36297, 36303, 36308, 36313, 36319, 36325, 36330, 36334, 36339, - 36344, 36349, 36353, 36356, 36362, 36367, 36372, 36377, 36381, 36386, - 36392, 36400, 27565, 36405, 36410, 36417, 36423, 36429, 36434, 36442, - 23576, 36449, 36454, 36459, 36464, 36468, 36471, 36476, 36480, 36484, - 36491, 36497, 36503, 36509, 36516, 36521, 36527, 35586, 36531, 36535, - 36540, 36553, 36558, 36564, 36572, 36579, 36587, 36597, 36603, 36609, - 36615, 36619, 36628, 36636, 36643, 36648, 36653, 10980, 36658, 36666, - 36673, 36679, 36689, 36694, 36700, 36708, 3719, 36715, 36721, 36728, - 3725, 36732, 36737, 36748, 36755, 36761, 36770, 36774, 4155, 36777, - 36784, 36790, 36796, 36804, 36814, 30435, 36821, 36829, 36835, 36840, - 36846, 36851, 36855, 27156, 36861, 36868, 36874, 36883, 36890, 24764, - 36896, 36901, 36905, 36913, 36921, 10082, 6065, 36928, 36932, 36934, - 36938, 36943, 36945, 36950, 36956, 36961, 36966, 36973, 34158, 36979, - 36984, 36988, 36993, 36997, 37006, 37010, 37016, 37023, 37029, 37036, - 37041, 37050, 37055, 37059, 37064, 37071, 37079, 37087, 37092, 22355, - 37096, 37099, 37103, 37107, 37111, 37114, 37116, 37121, 37129, 37133, - 37142, 37149, 37153, 37157, 37165, 37172, 37182, 37186, 37190, 37198, - 37206, 37212, 37217, 37226, 14064, 37232, 37241, 37246, 37253, 37260, - 37268, 37276, 37284, 37289, 37296, 37303, 37310, 37317, 37324, 37329, - 37335, 37352, 37360, 37370, 37378, 37385, 392, 37389, 37395, 37399, - 37404, 35297, 37410, 37413, 37417, 37428, 37436, 3730, 37444, 37450, - 37456, 37466, 37475, 37485, 37492, 37498, 37503, 3736, 3742, 37512, - 37519, 37527, 37532, 37536, 37543, 37551, 37558, 37564, 37573, 37583, - 37589, 37597, 37606, 37613, 37621, 37628, 23037, 37632, 37639, 37645, - 37655, 37664, 37672, 37683, 37687, 37697, 37703, 37710, 37718, 37727, - 37736, 37746, 37757, 37764, 37769, 37776, 3064, 37784, 37790, 37795, - 37801, 37807, 37812, 37825, 37838, 37851, 37858, 37864, 37872, 37880, - 37885, 37889, 1452, 37893, 37897, 37901, 37905, 37909, 37913, 37917, - 37921, 37925, 37929, 37933, 37937, 37941, 37945, 37949, 37953, 37957, - 37961, 37965, 37969, 37973, 37977, 37981, 37985, 37989, 37993, 37997, - 38001, 38005, 38009, 38013, 38017, 38021, 38025, 38029, 38033, 38037, - 38041, 38045, 38049, 38053, 38057, 38061, 38065, 38069, 38073, 38077, - 38081, 38085, 38089, 38093, 38097, 38101, 38105, 38109, 38113, 38117, - 38121, 38125, 38129, 38133, 38137, 38141, 38145, 38149, 38153, 38157, - 38161, 38165, 38169, 38173, 38177, 38181, 38185, 38189, 38193, 38197, - 38201, 38205, 38209, 38213, 38217, 38221, 38225, 38229, 38233, 38237, - 38241, 38245, 38249, 38253, 38257, 38261, 38265, 38269, 38273, 38277, - 38281, 38285, 38289, 38293, 38297, 38301, 38305, 38309, 38313, 38317, - 38321, 38325, 38329, 38333, 38337, 38341, 38345, 38349, 38353, 38357, - 38361, 38365, 38369, 38373, 38377, 38381, 38385, 38389, 38393, 38397, - 38401, 38405, 38409, 38413, 38417, 38421, 38425, 38429, 38433, 38437, - 38441, 38445, 38449, 38453, 38457, 38461, 38465, 38469, 38473, 38477, - 38481, 38485, 38489, 38493, 38497, 38501, 38505, 38510, 38514, 38519, - 38523, 38528, 38532, 38537, 38541, 38547, 38552, 38556, 38561, 38565, - 38570, 38574, 38579, 38583, 38588, 38592, 38597, 38601, 38606, 38610, - 38616, 38622, 38627, 38631, 38636, 38640, 38646, 38651, 38655, 38660, - 38664, 38669, 38673, 38679, 38684, 38688, 38693, 38697, 38702, 38706, - 38711, 38715, 38721, 38726, 38730, 38735, 38739, 38745, 38750, 38754, - 38759, 38763, 38768, 38772, 38777, 38781, 38786, 38790, 38796, 38801, - 38805, 38811, 38816, 38820, 38826, 38831, 38835, 38840, 38844, 38849, - 38853, 38859, 38865, 38871, 38877, 38883, 38889, 38895, 38901, 38906, - 38910, 38915, 38919, 38925, 38930, 38934, 38939, 38943, 38948, 38952, - 38957, 38961, 38966, 38970, 38975, 38979, 38984, 38988, 38994, 38999, - 39003, 39008, 39012, 39018, 39024, 39029, 111, 88, 39033, 39035, 39039, - 39043, 39047, 39052, 39056, 39060, 10003, 39065, 39071, 1741, 6472, - 39077, 39080, 39085, 39089, 39094, 39098, 39102, 39107, 10769, 39111, - 39115, 39119, 594, 39123, 16207, 39128, 39132, 39137, 39142, 39147, - 39151, 39158, 27332, 39164, 39167, 39171, 39176, 39182, 39186, 39194, - 39200, 39205, 39209, 39212, 39216, 39222, 39226, 39230, 3560, 3565, - 30642, 39233, 39237, 39241, 39245, 39249, 39257, 39264, 39268, 39275, - 39280, 39294, 39301, 39312, 324, 39317, 39321, 39327, 39339, 39345, - 39351, 30679, 39355, 39361, 39370, 39374, 39378, 39383, 39389, 39394, - 39398, 39403, 39407, 39411, 39418, 39424, 39429, 39444, 39459, 39474, - 39490, 39508, 10719, 39522, 39529, 39533, 39536, 39545, 39550, 39554, - 39562, 35537, 39570, 39574, 39584, 39595, 30612, 39608, 39612, 39621, - 39629, 10270, 15723, 39633, 23478, 39636, 31580, 39641, 10269, 39646, - 39652, 39657, 39663, 39668, 39674, 39679, 39685, 39690, 39696, 39702, - 39708, 39713, 39669, 39675, 39680, 39686, 39691, 39697, 39703, 8345, - 4006, 39717, 39725, 39729, 39732, 39736, 39741, 39746, 39752, 39758, - 39763, 39767, 39771, 27168, 39775, 39779, 39783, 39789, 39793, 29217, - 9296, 39802, 39809, 39815, 39819, 12562, 39826, 39832, 39837, 39844, - 39851, 39858, 29917, 8257, 39865, 39872, 39879, 39885, 39890, 39897, - 39908, 39914, 39919, 39924, 39929, 39936, 39670, 39940, 39950, 39959, - 39970, 39976, 39983, 39988, 39993, 39998, 40003, 40008, 40012, 40016, - 40022, 40030, 2334, 955, 10785, 10797, 10802, 10808, 40039, 10813, 10818, - 10824, 40044, 40054, 40058, 10829, 40063, 17814, 40066, 40071, 40075, - 36237, 40086, 40091, 40098, 40105, 40109, 40112, 40120, 10732, 40127, - 40130, 40136, 40146, 6106, 40155, 40161, 40165, 40173, 40177, 40187, - 40193, 40198, 40209, 40215, 40221, 40226, 40232, 40238, 40244, 40249, - 40252, 40259, 40265, 40269, 40274, 40281, 40288, 40292, 40295, 40305, - 40318, 40327, 40336, 40347, 40360, 40372, 40383, 40392, 40403, 40408, - 40417, 40422, 10834, 40428, 40435, 40443, 40448, 40452, 40459, 40466, - 3958, 20, 40470, 40475, 17668, 40479, 40482, 40485, 29397, 40489, 29926, - 40497, 40501, 40505, 40508, 40514, 40520, 32628, 40525, 40533, 40539, - 40546, 29380, 40550, 29583, 40554, 40563, 40569, 40575, 40580, 40584, - 29945, 40590, 40593, 40601, 40609, 27410, 40615, 40619, 40624, 40631, - 40637, 40642, 40647, 40651, 40657, 40662, 40668, 4208, 883, 40675, 40679, - 40682, 16093, 40694, 40705, 37602, 40710, 40713, 40720, 40724, 40730, - 40734, 40740, 40745, 40751, 40756, 40761, 40765, 40769, 40774, 40779, - 40789, 40795, 40808, 40814, 40820, 40826, 40833, 40838, 40844, 40849, - 17559, 1455, 771, 40854, 40857, 40860, 40863, 32712, 32718, 40866, 32724, - 32737, 32743, 32749, 40872, 32755, 32761, 40878, 40884, 26, 40892, 40899, - 40903, 40907, 40915, 33492, 40919, 40923, 40930, 40935, 40939, 40944, - 40950, 40955, 40961, 40966, 40970, 40974, 40978, 40983, 40987, 40992, - 40996, 41000, 41007, 41012, 41016, 41020, 41025, 41029, 41034, 41038, - 41042, 41047, 41053, 16343, 16348, 41058, 41062, 41065, 41069, 41073, - 22166, 41078, 41082, 41088, 41095, 41100, 41110, 41115, 41123, 41127, - 41130, 33507, 41134, 4261, 41139, 41144, 41148, 41153, 41157, 41162, - 14082, 41173, 41177, 41180, 41184, 41189, 41193, 41198, 41203, 41207, - 41211, 41215, 41218, 41222, 8364, 14098, 41225, 41228, 41234, 41239, - 41245, 41250, 41256, 41261, 41267, 41272, 41278, 41284, 41290, 41295, - 41299, 41303, 41312, 41328, 41344, 41354, 29287, 41361, 41365, 41370, - 41375, 41379, 41383, 37731, 41389, 41394, 41398, 41405, 41410, 41415, - 41419, 41423, 41429, 28237, 41433, 22450, 41438, 41445, 41453, 41459, - 41466, 41474, 41480, 41484, 41489, 41495, 41503, 41508, 41512, 41521, - 9984, 41529, 41533, 41541, 41548, 41553, 41558, 41563, 41567, 41570, - 41574, 41577, 41581, 41588, 41593, 41597, 41603, 27643, 32775, 41607, - 41613, 41620, 41626, 41632, 41637, 41640, 41642, 41649, 41656, 41662, - 41666, 41669, 41673, 41677, 41681, 41686, 41690, 41694, 41697, 41701, - 41715, 24113, 41734, 41747, 41760, 41773, 24131, 41788, 11045, 41803, - 41809, 41813, 41817, 41821, 41825, 41832, 41837, 41841, 41848, 41854, - 41859, 41865, 41875, 41887, 41898, 41903, 41910, 41914, 41918, 41921, - 16751, 3799, 41929, 16370, 41942, 41949, 41953, 41957, 41962, 41967, - 41973, 41977, 41981, 41984, 41989, 41993, 41998, 7957, 16381, 42003, - 42007, 42013, 42022, 42027, 42036, 42043, 37579, 42049, 42054, 42058, - 42063, 42070, 42076, 42080, 42083, 42087, 42092, 15344, 42099, 42106, - 42110, 42113, 42118, 42123, 42129, 42134, 42139, 42143, 42148, 42158, - 42163, 42169, 42174, 42180, 42185, 42191, 42201, 42206, 42211, 42215, - 42220, 7433, 7445, 42225, 42228, 42235, 42241, 42250, 35711, 35718, - 42258, 42262, 42266, 33555, 42274, 42285, 42293, 37779, 42300, 42305, - 42310, 42321, 42328, 42339, 33579, 22456, 42347, 834, 42352, 14429, - 42358, 29371, 42364, 42369, 42379, 42388, 42395, 42401, 42405, 42408, - 42415, 42421, 42428, 42434, 42444, 42452, 42458, 42464, 42469, 42473, - 42480, 42485, 42491, 42498, 42504, 41682, 42509, 42513, 526, 14545, - 42519, 42524, 42527, 42533, 42541, 1379, 42546, 42550, 42555, 42560, - 42565, 42572, 42576, 42581, 42587, 42591, 32785, 42596, 42601, 42610, - 42617, 42627, 42633, 29415, 42650, 42659, 42667, 42673, 42678, 42685, - 42691, 42699, 42708, 42716, 42720, 42725, 42733, 30360, 33588, 42739, - 42758, 16676, 42772, 42788, 42802, 42808, 42813, 42818, 42823, 42829, - 33594, 42834, 42837, 42844, 42849, 42853, 376, 2971, 42860, 42865, 42870, - 28595, 42688, 42874, 42879, 42887, 42891, 42894, 42899, 42905, 42911, - 42916, 42920, 29470, 42923, 42928, 42932, 42935, 42940, 42944, 42949, - 42954, 42958, 42963, 42967, 42971, 42975, 22162, 22173, 42980, 42985, - 42991, 42996, 28194, 43001, 43005, 22259, 16932, 43008, 43013, 43018, - 43023, 43028, 43033, 43038, 43043, 469, 49, 32798, 32803, 32808, 32814, - 32819, 32824, 43048, 32828, 43052, 43056, 43060, 32833, 32839, 43074, - 32850, 32855, 43082, 43087, 32861, 43092, 43097, 43102, 43107, 43113, - 43119, 43125, 32878, 43138, 43147, 43153, 32882, 43157, 32887, 43162, - 32892, 32897, 43165, 43170, 43174, 32433, 43180, 14310, 43187, 43192, - 32902, 43196, 43201, 43206, 43211, 43215, 43220, 43225, 43231, 43236, - 43241, 43247, 43253, 43258, 43262, 43267, 43272, 43277, 43281, 43286, - 43291, 43296, 43302, 43308, 43314, 43319, 43323, 43328, 43332, 32906, - 32911, 32916, 43336, 43340, 43344, 32921, 32927, 32933, 32945, 43356, - 27205, 43360, 43365, 43369, 43374, 43381, 43386, 43391, 43396, 43400, - 43404, 43414, 43419, 43424, 43428, 43432, 43435, 43443, 32993, 43448, - 1462, 43454, 43459, 43465, 43473, 43482, 43486, 43490, 43498, 43504, - 43512, 43528, 43532, 43536, 43541, 43547, 43562, 33030, 1749, 12742, - 43566, 1358, 1373, 43578, 43586, 43593, 43598, 43605, 43610, 9674, 1062, - 2525, 10861, 43617, 9572, 43622, 43625, 43634, 1266, 43639, 41838, 43646, - 43655, 43660, 43664, 43672, 23534, 2577, 43679, 11301, 43689, 43695, - 2352, 2362, 43704, 43713, 43723, 43734, 3352, 35874, 43739, 10920, 3936, - 17597, 1271, 43743, 43751, 43758, 43763, 43767, 43771, 24981, 42094, - 10947, 43779, 43788, 43797, 43805, 43812, 43823, 43828, 43841, 43854, - 43866, 43878, 43890, 43901, 43914, 43925, 43936, 43946, 43954, 43962, - 43974, 43986, 43997, 44006, 44014, 44021, 44033, 44040, 44046, 44055, - 44062, 44075, 44080, 44090, 44095, 44101, 44106, 39816, 44110, 44117, - 44121, 44128, 44136, 2538, 44143, 44154, 44164, 44173, 44181, 44191, - 44199, 44209, 44218, 44223, 44229, 44235, 44240, 3838, 44251, 44261, - 44270, 44279, 44287, 44297, 44305, 44314, 44319, 44324, 44329, 1679, 37, - 44337, 44345, 44356, 44367, 17244, 44377, 44381, 44388, 44394, 44399, - 44403, 44414, 44424, 44433, 44444, 17641, 17646, 44449, 44458, 44463, - 44473, 44478, 44486, 44494, 44501, 44507, 1641, 251, 44511, 44517, 44522, - 44525, 2124, 41954, 44533, 44537, 44540, 1495, 44546, 14707, 1276, 44551, - 44564, 44578, 2663, 44596, 44608, 44620, 2677, 2694, 44634, 44647, 2709, - 44661, 44673, 2724, 44687, 1282, 1288, 1294, 11207, 44692, 44697, 44702, - 44706, 44721, 44736, 44751, 44766, 44781, 44796, 44811, 44826, 44841, - 44856, 44871, 44886, 44901, 44916, 44931, 44946, 44961, 44976, 44991, - 45006, 45021, 45036, 45051, 45066, 45081, 45096, 45111, 45126, 45141, - 45156, 45171, 45186, 45201, 45216, 45231, 45246, 45261, 45276, 45291, - 45306, 45321, 45336, 45351, 45366, 45381, 45396, 45411, 45426, 45441, - 45456, 45471, 45486, 45501, 45516, 45531, 45546, 45561, 45576, 45591, - 45606, 45621, 45636, 45651, 45666, 45681, 45696, 45711, 45726, 45741, - 45756, 45771, 45786, 45801, 45816, 45831, 45846, 45861, 45876, 45891, - 45906, 45921, 45936, 45951, 45966, 45981, 45996, 46011, 46026, 46041, - 46056, 46071, 46086, 46101, 46116, 46131, 46146, 46161, 46176, 46191, - 46206, 46221, 46236, 46251, 46266, 46281, 46296, 46311, 46326, 46341, - 46356, 46371, 46386, 46401, 46416, 46431, 46446, 46461, 46476, 46491, - 46506, 46521, 46536, 46551, 46566, 46581, 46596, 46611, 46626, 46641, - 46656, 46671, 46686, 46701, 46716, 46731, 46746, 46761, 46776, 46791, - 46806, 46821, 46836, 46851, 46866, 46881, 46896, 46911, 46926, 46941, - 46956, 46971, 46986, 47001, 47016, 47031, 47046, 47061, 47076, 47091, - 47106, 47121, 47136, 47151, 47166, 47181, 47196, 47211, 47226, 47241, - 47256, 47271, 47286, 47301, 47316, 47331, 47346, 47361, 47376, 47391, - 47406, 47421, 47436, 47451, 47466, 47481, 47496, 47511, 47526, 47541, - 47556, 47571, 47586, 47601, 47616, 47631, 47646, 47661, 47676, 47691, - 47706, 47721, 47736, 47751, 47766, 47781, 47796, 47811, 47826, 47841, - 47856, 47871, 47886, 47901, 47916, 47931, 47946, 47961, 47976, 47991, - 48006, 48021, 48036, 48051, 48066, 48081, 48096, 48111, 48126, 48141, - 48156, 48171, 48186, 48201, 48216, 48231, 48246, 48261, 48276, 48291, - 48306, 48321, 48336, 48351, 48366, 48381, 48396, 48411, 48426, 48441, - 48456, 48471, 48486, 48501, 48516, 48531, 48546, 48561, 48576, 48591, - 48606, 48621, 48636, 48651, 48666, 48681, 48696, 48711, 48726, 48741, - 48756, 48771, 48786, 48801, 48816, 48831, 48846, 48861, 48876, 48891, - 48906, 48921, 48936, 48951, 48966, 48981, 48996, 49011, 49026, 49041, - 49056, 49071, 49086, 49101, 49116, 49131, 49146, 49161, 49176, 49191, - 49206, 49221, 49236, 49251, 49266, 49281, 49296, 49311, 49326, 49341, - 49356, 49371, 49386, 49401, 49416, 49431, 49446, 49461, 49476, 49491, - 49506, 49521, 49536, 49551, 49566, 49581, 49596, 49611, 49626, 49641, - 49656, 49671, 49686, 49701, 49716, 49731, 49746, 49761, 49776, 49791, - 49806, 49821, 49836, 49851, 49866, 49881, 49896, 49911, 49926, 49941, - 49956, 49971, 49986, 50001, 50016, 50031, 50046, 50061, 50076, 50091, - 50106, 50121, 50136, 50151, 50166, 50181, 50196, 50211, 50226, 50241, - 50256, 50271, 50286, 50301, 50316, 50331, 50346, 50361, 50376, 50391, - 50406, 50421, 50436, 50451, 50466, 50481, 50496, 50511, 50526, 50541, - 50556, 50571, 50586, 50601, 50616, 50631, 50646, 50661, 50676, 50691, - 50706, 50721, 50736, 50751, 50766, 50781, 50796, 50811, 50826, 50841, - 50856, 50871, 50886, 50901, 50916, 50931, 50946, 50961, 50976, 50991, - 51006, 51021, 51036, 51051, 51066, 51081, 51096, 51111, 51126, 51141, - 51156, 51171, 51186, 51201, 51216, 51231, 51246, 51261, 51276, 51291, - 51306, 51321, 51336, 51351, 51366, 51381, 51396, 51411, 51426, 51441, - 51456, 51471, 51486, 51501, 51516, 51531, 51546, 51561, 51576, 51591, - 51606, 51621, 51636, 51651, 51666, 51681, 51696, 51711, 51726, 51741, - 51756, 51771, 51786, 51801, 51816, 51831, 51846, 51861, 51876, 51891, - 51906, 51921, 51936, 51951, 51966, 51981, 51996, 52011, 52026, 52041, - 52056, 52071, 52086, 52101, 52116, 52131, 52146, 52161, 52176, 52191, - 52206, 52221, 52236, 52251, 52266, 52281, 52296, 52311, 52326, 52341, - 52356, 52371, 52386, 52401, 52416, 52431, 52446, 52461, 52476, 52491, - 52506, 52522, 52538, 52554, 52570, 52586, 52602, 52618, 52634, 52650, - 52666, 52682, 52698, 52714, 52730, 52746, 52762, 52778, 52794, 52810, - 52826, 52842, 52858, 52874, 52890, 52906, 52922, 52938, 52954, 52970, - 52986, 53002, 53018, 53034, 53050, 53066, 53082, 53098, 53114, 53130, - 53146, 53162, 53178, 53194, 53210, 53226, 53242, 53258, 53274, 53290, - 53306, 53322, 53338, 53354, 53370, 53386, 53402, 53418, 53434, 53450, - 53466, 53482, 53498, 53514, 53530, 53546, 53562, 53578, 53594, 53610, - 53626, 53642, 53658, 53674, 53690, 53706, 53722, 53738, 53754, 53770, - 53786, 53802, 53818, 53834, 53850, 53866, 53882, 53898, 53914, 53930, - 53946, 53962, 53978, 53994, 54010, 54026, 54042, 54058, 54074, 54090, - 54106, 54122, 54138, 54154, 54170, 54186, 54202, 54218, 54234, 54250, - 54266, 54282, 54298, 54314, 54330, 54346, 54362, 54378, 54394, 54410, - 54426, 54442, 54458, 54474, 54490, 54506, 54522, 54538, 54554, 54570, - 54586, 54602, 54618, 54634, 54650, 54666, 54682, 54698, 54714, 54730, - 54746, 54762, 54778, 54794, 54810, 54826, 54842, 54858, 54874, 54890, - 54906, 54922, 54938, 54954, 54970, 54986, 55002, 55018, 55034, 55050, - 55066, 55082, 55098, 55114, 55130, 55146, 55162, 55178, 55194, 55210, - 55226, 55242, 55258, 55274, 55290, 55306, 55322, 55338, 55354, 55370, - 55386, 55402, 55418, 55434, 55450, 55466, 55482, 55498, 55514, 55530, - 55546, 55562, 55578, 55594, 55610, 55626, 55642, 55658, 55674, 55690, - 55706, 55722, 55738, 55754, 55770, 55786, 55802, 55818, 55834, 55850, - 55866, 55882, 55898, 55914, 55930, 55946, 55962, 55978, 55994, 56010, - 56026, 56042, 56058, 56074, 56090, 56106, 56122, 56138, 56154, 56170, - 56186, 56202, 56218, 56234, 56250, 56266, 56282, 56298, 56314, 56330, - 56346, 56362, 56378, 56394, 56410, 56426, 56442, 56458, 56474, 56490, - 56506, 56522, 56538, 56554, 56570, 56586, 56602, 56618, 56634, 56650, - 56666, 56682, 56698, 56714, 56730, 56746, 56762, 56778, 56794, 56810, - 56826, 56842, 56858, 56874, 56890, 56906, 56922, 56938, 56954, 56970, - 56986, 57002, 57018, 57034, 57050, 57066, 57082, 57098, 57114, 57130, - 57146, 57162, 57178, 57194, 57210, 57226, 57242, 57258, 57274, 57290, - 57306, 57322, 57338, 57354, 57370, 57386, 57402, 57418, 57434, 57450, - 57466, 57482, 57498, 57514, 57530, 57546, 57562, 57578, 57594, 57610, - 57626, 57642, 57658, 57674, 57690, 57706, 57722, 57738, 57754, 57770, - 57786, 57802, 57818, 57834, 57850, 57866, 57882, 57898, 57914, 57930, - 57946, 57962, 57978, 57994, 58010, 58026, 58042, 58058, 58074, 58090, - 58106, 58122, 58138, 58154, 58170, 58186, 58202, 58218, 58234, 58250, - 58266, 58282, 58298, 58314, 58330, 58346, 58362, 58378, 58394, 58410, - 58426, 58442, 58458, 58474, 58490, 58506, 58522, 58538, 58554, 58570, - 58586, 58602, 58618, 58634, 58650, 58666, 58682, 58698, 58714, 58730, - 58746, 58762, 58778, 58794, 58810, 58826, 58842, 58858, 58874, 58890, - 58906, 58922, 58938, 58954, 58970, 58986, 59002, 59018, 59034, 59050, - 59066, 59082, 59098, 59114, 59130, 59146, 59162, 59178, 59194, 59210, - 59226, 59242, 59258, 59274, 59290, 59306, 59322, 59338, 59354, 59370, - 59386, 59402, 59418, 59434, 59450, 59466, 59482, 59498, 59514, 59530, - 59546, 59562, 59578, 59594, 59610, 59626, 59642, 59658, 59674, 59690, - 59706, 59722, 59738, 59754, 59770, 59786, 59802, 59818, 59834, 59850, - 59866, 59882, 59898, 59914, 59930, 59946, 59962, 59978, 59994, 60010, - 60026, 60042, 60058, 60074, 60090, 60106, 60122, 60138, 60154, 60170, - 60186, 60202, 60218, 60234, 60250, 60266, 60282, 60298, 60314, 60330, - 60346, 60362, 60378, 60394, 60410, 60426, 60442, 60458, 60474, 60490, - 60506, 60522, 60538, 60554, 60570, 60586, 60602, 60618, 60634, 60650, - 60666, 60682, 60698, 60714, 60730, 60746, 60762, 60778, 60794, 60810, - 60826, 60842, 60858, 60874, 60890, 60906, 60922, 60938, 60954, 60970, - 60986, 61002, 61018, 61034, 61050, 61066, 61082, 61098, 61114, 61130, - 61146, 61162, 61178, 61193, 17673, 61202, 61207, 61213, 61219, 61229, - 61237, 15704, 16287, 10445, 61250, 1503, 1507, 61258, 3890, 28713, 7387, - 61264, 61269, 61274, 61279, 61284, 61290, 61295, 61301, 61306, 61312, - 61317, 61322, 61327, 61332, 61338, 61343, 61348, 61353, 61358, 61363, - 61368, 61373, 61379, 61384, 61390, 61397, 2581, 61402, 61408, 8753, - 61412, 61417, 61424, 61432, 46, 61436, 61442, 61447, 61452, 61456, 61461, - 61465, 61469, 11244, 61473, 61483, 61496, 61507, 61520, 61527, 61533, - 61538, 61544, 61550, 61556, 61561, 61566, 61571, 61576, 61580, 61585, - 61590, 61595, 61601, 61607, 61613, 61618, 61622, 61627, 61632, 61636, - 61641, 61646, 61651, 61655, 11260, 11271, 11276, 1546, 61659, 61665, - 1551, 61670, 61673, 17122, 61678, 61684, 61689, 1582, 61695, 1588, 1594, - 11306, 61700, 61709, 61717, 61724, 61728, 61734, 61739, 32466, 61744, - 61751, 61756, 61760, 61764, 61773, 1599, 17219, 61778, 61782, 17230, - 1105, 61786, 61793, 61798, 61802, 17260, 1603, 39964, 61805, 61810, - 61820, 61829, 61834, 61838, 61844, 1608, 42055, 61849, 61858, 61864, - 61869, 61874, 11474, 11480, 61880, 61892, 61909, 61926, 61943, 61960, - 61977, 61994, 62011, 62028, 62045, 62062, 62079, 62096, 62113, 62130, - 62147, 62164, 62181, 62198, 62215, 62232, 62249, 62266, 62283, 62300, - 62317, 62334, 62351, 62368, 62385, 62402, 62419, 62436, 62453, 62470, - 62487, 62504, 62521, 62538, 62555, 62572, 62589, 62606, 62623, 62640, - 62657, 62674, 62691, 62708, 62725, 62736, 62741, 1613, 62745, 62750, - 62756, 62761, 62766, 9591, 1618, 62772, 62781, 29029, 62786, 62797, - 11491, 62807, 62812, 62818, 62823, 62830, 62836, 62841, 1623, 17535, - 62846, 11501, 1628, 11506, 62852, 62857, 62863, 62868, 62873, 62878, - 62883, 62888, 62893, 62898, 62903, 62909, 62915, 62921, 62926, 62930, - 62935, 62940, 62944, 62949, 62954, 62959, 62964, 62968, 62973, 62979, - 62984, 62989, 62993, 62998, 63003, 63009, 63014, 63019, 63025, 63031, - 63036, 63040, 63045, 63050, 63055, 63059, 63064, 63069, 63074, 63080, - 63086, 63091, 63095, 63099, 63104, 63109, 63114, 30504, 63118, 63123, - 63128, 63134, 63139, 63144, 63148, 63153, 63158, 63164, 63169, 63174, - 63180, 63186, 63191, 63195, 63200, 63205, 63209, 63214, 63219, 63224, - 63230, 63236, 63241, 63245, 63250, 63255, 63259, 63264, 63269, 63274, - 63279, 63283, 63286, 63289, 63294, 33147, 63299, 63307, 17601, 3774, - 11604, 63313, 63323, 63338, 63346, 11609, 63357, 63362, 63373, 63385, - 63397, 63409, 2715, 63421, 63426, 63438, 63442, 63448, 63454, 63459, - 1645, 16826, 63468, 63473, 42114, 63477, 63481, 63486, 63490, 17681, - 63495, 63498, 63503, 63511, 63519, 1649, 11645, 11651, 1654, 63527, - 63534, 63539, 63548, 63558, 63565, 63570, 63575, 1659, 63582, 63587, - 17796, 63591, 63596, 63603, 63609, 63613, 63624, 63634, 17818, 9485, - 9492, 63641, 1664, 63646, 63652, 63660, 63667, 63673, 63680, 63692, - 63698, 63703, 63715, 63726, 63735, 63745, 3869, 32271, 32280, 17858, - 1669, 1673, 63753, 63764, 63769, 1683, 63777, 63782, 63787, 17917, 63799, - 63802, 63808, 63813, 63821, 1688, 63826, 63831, 63839, 63847, 63854, - 63863, 63871, 63880, 1693, 63884, 1698, 22330, 63889, 63896, 17991, - 63904, 63910, 63915, 63923, 63930, 63938, 17309, 63943, 11797, 63952, - 63958, 63963, 63970, 63977, 63983, 16991, 63993, 63999, 64004, 64015, - 64020, 64028, 11814, 11819, 64036, 64042, 64046, 64054, 3934, 18038, - 42207, 64059, 64065, 64070, 64078, 64085, 12723, 64090, 64096, 1709, - 64101, 64104, 1172, 64110, 64115, 64120, 64126, 64131, 64136, 64141, - 64146, 64151, 64156, 1718, 9, 64162, 64166, 64171, 64175, 64179, 64183, - 33387, 64188, 24277, 64193, 64198, 64202, 64205, 64209, 64213, 64218, - 64222, 64227, 64231, 64237, 36288, 36293, 36298, 64240, 64247, 64253, - 64261, 41891, 64271, 36304, 33651, 33402, 33408, 36320, 33414, 64276, - 64281, 33684, 64285, 64288, 64292, 64299, 64302, 64307, 64312, 64316, - 64320, 64323, 64333, 64345, 64352, 64358, 33419, 64365, 35149, 64368, - 8770, 940, 64371, 64375, 64380, 3812, 64384, 64387, 14343, 64394, 64401, - 64414, 64422, 64431, 64440, 64445, 64455, 64468, 64480, 64487, 64492, - 64501, 64514, 37819, 64532, 64537, 64544, 64550, 746, 64555, 64563, - 64570, 28536, 710, 64576, 64582, 64592, 64598, 64603, 33438, 6185, 33452, - 64607, 64617, 64622, 64632, 64647, 64653, 64659, 33462, 64664, 32583, - 64668, 64673, 64680, 64685, 64689, 64694, 17861, 64701, 64706, 64710, - 6226, 33488, 64714, 64720, 310, 64730, 64737, 64744, 64749, 64758, 61814, - 64764, 64772, 64776, 64780, 64784, 64788, 64793, 64797, 64803, 64811, - 64816, 64821, 64826, 64830, 64835, 64839, 64843, 64849, 64855, 64860, - 64864, 64869, 33612, 64873, 33618, 33624, 64878, 64884, 64891, 64896, - 64900, 32600, 17528, 64903, 64907, 64912, 64919, 64925, 64929, 64934, - 41583, 64940, 64944, 64951, 64955, 64960, 64966, 64972, 64978, 64990, - 64999, 65009, 65015, 65022, 65027, 65032, 65036, 65039, 65045, 65052, - 65057, 65062, 65069, 65076, 65083, 65089, 65094, 65099, 65107, 33629, - 2443, 65112, 65117, 65123, 65128, 65134, 65139, 65144, 65149, 65155, - 33650, 65160, 65166, 65172, 65178, 33720, 65183, 65188, 65193, 33731, - 65198, 65203, 65208, 65214, 65220, 33736, 65225, 65230, 65235, 33791, - 33797, 65240, 65245, 33802, 33824, 29278, 33830, 33834, 65250, 12467, - 65254, 65262, 65268, 65276, 65283, 65289, 65299, 65305, 65312, 11179, - 33848, 65318, 65331, 65340, 65346, 65355, 65361, 24587, 65368, 65375, - 65385, 65388, 33792, 65393, 65400, 65405, 65409, 65413, 65418, 65422, - 6306, 65427, 65432, 65437, 36382, 36387, 65441, 36401, 65446, 36406, - 65451, 65457, 36418, 36424, 36430, 65462, 65468, 23577, 65479, 65482, - 65494, 65502, 33871, 65506, 65515, 65525, 65534, 33881, 65539, 65546, - 65555, 65561, 65569, 65576, 6277, 4559, 65581, 33803, 65587, 65590, - 65596, 65603, 65608, 65613, 24497, 65617, 65623, 65629, 65634, 65639, - 65643, 65649, 65655, 35055, 953, 37469, 39196, 39202, 33912, 33917, - 65660, 65664, 65668, 65671, 65684, 65690, 65694, 65697, 65702, 35376, - 65706, 32605, 22280, 65712, 6206, 6214, 9322, 65715, 65720, 65725, 65730, - 65735, 65740, 65745, 65750, 65755, 65760, 65766, 65771, 65776, 65782, - 65787, 65792, 65797, 65802, 65807, 65812, 65818, 65823, 65829, 65834, - 65839, 65844, 65849, 65854, 65859, 65864, 65869, 65874, 65879, 65885, - 65890, 65895, 65900, 65905, 65910, 65915, 65921, 65926, 65931, 65936, - 65941, 65946, 65951, 65956, 65961, 65966, 65972, 65977, 65982, 65987, - 65992, 65998, 66004, 66009, 66015, 66020, 66025, 66030, 66035, 66040, - 1496, 223, 66045, 66049, 66053, 66057, 26272, 66061, 66065, 66070, 66074, - 66079, 66083, 66088, 66093, 66098, 66102, 66106, 66111, 66115, 14076, - 66120, 66124, 66131, 66141, 16024, 66150, 66159, 66163, 66168, 66173, - 66177, 66181, 26066, 3054, 66185, 66191, 18309, 66195, 66204, 66212, - 66218, 66230, 66242, 66246, 66251, 66255, 66261, 66267, 66272, 66282, - 66292, 66298, 66303, 66307, 66313, 66318, 66325, 66331, 66336, 66345, - 66354, 66362, 16412, 66366, 66375, 66383, 66395, 66406, 66417, 66426, - 66430, 66439, 66447, 66457, 66465, 66471, 66476, 66482, 66487, 66498, 85, - 32410, 66504, 27482, 27492, 66510, 66517, 66523, 66527, 66537, 66548, - 66556, 66565, 66570, 66575, 66580, 66584, 66588, 18263, 66596, 66600, - 66606, 66616, 66623, 66629, 66635, 36481, 66639, 66641, 66644, 66650, - 66654, 66664, 66670, 66677, 66684, 14013, 66692, 66698, 66707, 66716, - 66722, 66728, 66734, 66739, 66746, 66753, 66759, 66767, 66780, 66789, - 66798, 66803, 66807, 66813, 66819, 66826, 66833, 66840, 66847, 66854, - 66859, 66863, 66867, 66870, 66880, 66884, 66896, 66905, 66909, 66914, - 66918, 66924, 66929, 66936, 66945, 66953, 66961, 66966, 66970, 66975, - 66980, 66990, 66998, 67003, 67007, 67011, 67017, 67025, 67032, 67044, - 67052, 67063, 67069, 67079, 67085, 67089, 67096, 67102, 67107, 67111, - 67115, 67119, 67128, 67137, 67146, 67152, 67158, 67164, 67169, 67176, - 67182, 67190, 67197, 13156, 67203, 67209, 67213, 15009, 67217, 67222, - 67232, 67241, 67247, 67253, 67261, 67268, 67272, 67276, 67282, 67290, - 67297, 67303, 67314, 67318, 67322, 67326, 67329, 67335, 67340, 67345, - 67349, 67353, 67362, 67370, 67377, 67383, 67390, 25152, 41635, 67395, - 67403, 67407, 67411, 67414, 67422, 67429, 67435, 67444, 67452, 67458, - 67463, 67467, 67472, 67476, 67480, 67485, 67494, 67498, 67505, 39305, - 67509, 67515, 67519, 67527, 67533, 67538, 67549, 67557, 67563, 23720, - 67572, 67579, 67586, 67593, 67600, 67607, 44881, 13851, 67614, 67621, - 67626, 36517, 6404, 67632, 67637, 67642, 67648, 67654, 67660, 67665, - 67670, 67675, 67680, 67686, 67691, 67697, 67702, 67708, 67713, 67718, - 67723, 67728, 67733, 67738, 67743, 67749, 67754, 67760, 67765, 67770, - 67775, 67780, 67785, 67790, 67796, 67801, 67806, 67811, 67816, 67821, - 67826, 67831, 67836, 67841, 67846, 67852, 67857, 67862, 67867, 67872, - 67877, 67882, 67887, 67892, 67898, 67903, 67908, 67913, 67918, 67923, - 67928, 67933, 67938, 67943, 67948, 67953, 67958, 67964, 1839, 240, 40067, - 67969, 67972, 67977, 67981, 67984, 3391, 67989, 67994, 66957, 68005, - 68015, 68022, 68031, 68047, 68056, 68066, 68076, 68085, 68093, 68107, - 68115, 68119, 68122, 68129, 68135, 68146, 68158, 68169, 68178, 68185, - 1277, 24386, 68195, 2610, 68199, 68208, 1119, 18236, 21794, 68216, 68224, - 68238, 68251, 68255, 68260, 68265, 68270, 68276, 68282, 68287, 8762, - 68292, 68296, 68304, 11646, 68309, 68315, 68324, 68332, 1721, 11658, 835, - 6340, 68336, 68345, 68355, 2400, 28271, 68364, 68370, 17773, 28286, - 68376, 4104, 12032, 68382, 68389, 63759, 68393, 68397, 68403, 68408, - 68413, 4128, 180, 14917, 68418, 68430, 68434, 68440, 29049, 68444, 12020, - 2750, 4, 68449, 68459, 68470, 68476, 68487, 68494, 68500, 68506, 68514, - 68521, 68527, 68537, 68547, 68557, 68566, 24574, 1289, 68571, 68575, - 68579, 68585, 68589, 2773, 2779, 8759, 2275, 68593, 68597, 68606, 68614, - 68625, 68633, 68641, 68647, 68652, 68663, 68674, 68682, 68688, 10179, - 68693, 68701, 68705, 68709, 68714, 68718, 68730, 29456, 15977, 68737, - 68747, 68753, 68759, 10281, 68769, 68780, 68790, 68799, 68803, 68810, - 1121, 2603, 68820, 68825, 68833, 68841, 68852, 68859, 68873, 14846, 453, - 68883, 68887, 68895, 68904, 68912, 68918, 68932, 68939, 68945, 68954, - 68961, 68971, 68979, 68986, 68994, 69001, 3941, 143, 69009, 69020, 69024, - 69036, 69042, 12202, 167, 69047, 69052, 69056, 69063, 69069, 69077, - 69084, 9065, 69091, 69100, 69108, 4010, 69121, 4027, 69125, 2823, 494, - 69130, 69143, 69148, 1838, 736, 69152, 4031, 69160, 69166, 69170, 813, - 69180, 69189, 69194, 15738, 15745, 48243, 69198, 4056, 3951, 13734, - 69206, 69213, 69218, 24638, 69222, 69229, 69235, 69240, 69245, 15758, - 161, 69250, 69262, 69268, 69276, 2840, 1753, 69284, 69286, 69291, 69296, - 69301, 69307, 69312, 69317, 69322, 69327, 69332, 69337, 69343, 69348, - 69353, 69358, 69363, 69368, 69373, 69378, 69383, 69389, 69394, 69399, - 69404, 69410, 69415, 69421, 69426, 69431, 69436, 69441, 69446, 69451, - 69456, 69462, 69467, 69473, 69478, 69483, 69488, 69493, 69498, 69503, - 69508, 69513, 69519, 69525, 69530, 69535, 69541, 69546, 69550, 69554, - 69559, 69565, 69569, 69575, 69580, 69585, 69591, 69596, 69600, 69605, - 69610, 69614, 69617, 69619, 69623, 69626, 69631, 69635, 69640, 69644, - 69648, 69652, 69661, 69665, 34097, 69668, 34102, 69675, 69680, 34107, - 69689, 69698, 34113, 69703, 34118, 69712, 69717, 12234, 69721, 69726, - 69731, 34123, 69735, 43115, 69739, 69742, 69746, 8430, 69752, 69757, - 69761, 3827, 34128, 69764, 69768, 69771, 69776, 69780, 69786, 69794, - 69807, 69816, 69822, 69827, 69833, 69837, 69843, 69851, 69856, 69860, - 69867, 69873, 69881, 69890, 69898, 34131, 69905, 69915, 69928, 69933, - 69938, 69942, 69951, 69957, 69964, 69975, 69987, 69994, 70003, 70012, - 70021, 70028, 70034, 70041, 70049, 70056, 70064, 70073, 70081, 70088, - 70096, 70105, 70113, 70122, 70132, 70141, 70149, 70156, 70164, 70173, - 70181, 70190, 70200, 70209, 70217, 70226, 70236, 70245, 70255, 70266, - 70276, 70285, 70293, 70300, 70308, 70317, 70325, 70334, 70344, 70353, - 70361, 70370, 70380, 70389, 70399, 70410, 70420, 70429, 70437, 70446, - 70456, 70465, 70475, 70486, 70496, 70505, 70515, 70526, 70536, 70547, - 70559, 70570, 70580, 70589, 70597, 70604, 70612, 70621, 70629, 70638, - 70648, 70657, 70665, 70674, 70684, 70693, 70703, 70714, 70724, 70733, - 70741, 70750, 70760, 70769, 70779, 70790, 70800, 70809, 70819, 70830, - 70840, 70851, 70863, 70874, 70884, 70893, 70901, 70910, 70920, 70929, - 70939, 70950, 70960, 70969, 70979, 70990, 71000, 71011, 71023, 71034, - 71044, 71053, 71063, 71074, 71084, 71095, 71107, 71118, 71128, 71139, - 71151, 71162, 71174, 71187, 71199, 71210, 71220, 71229, 71237, 71244, - 71252, 71261, 71269, 71278, 71288, 71297, 71305, 71314, 71324, 71333, - 71343, 71354, 71364, 71373, 71381, 71390, 71400, 71409, 71419, 71430, - 71440, 71449, 71459, 71470, 71480, 71491, 71503, 71514, 71524, 71533, - 71541, 71550, 71560, 71569, 71579, 71590, 71600, 71609, 71619, 71630, - 71640, 71651, 71663, 71674, 71684, 71693, 71703, 71714, 71724, 71735, - 71747, 71758, 71768, 71779, 71791, 71802, 71814, 71827, 71839, 71850, - 71860, 71869, 71877, 71886, 71896, 71905, 71915, 71926, 71936, 71945, - 71955, 71966, 71976, 71987, 71999, 72010, 72020, 72029, 72039, 72050, - 72060, 72071, 72083, 72094, 72104, 72115, 72127, 72138, 72150, 72163, - 72175, 72186, 72196, 72205, 72215, 72226, 72236, 72247, 72259, 72270, - 72280, 72291, 72303, 72314, 72326, 72339, 72351, 72362, 72372, 72383, - 72395, 72406, 72418, 72431, 72443, 72454, 72466, 72479, 72491, 72504, - 72518, 72531, 72543, 72554, 72564, 72573, 72581, 72588, 72593, 8266, - 72600, 34141, 72605, 72610, 34146, 72616, 21902, 34151, 72621, 72627, - 72635, 72641, 72647, 72654, 72661, 72666, 72670, 72674, 72677, 72681, - 72690, 72699, 72707, 72713, 72725, 72736, 72740, 3116, 8241, 72745, - 72748, 72750, 72754, 72758, 72762, 72768, 72773, 27136, 72778, 72782, - 72785, 72790, 72794, 72801, 72807, 72811, 6360, 72815, 34168, 72820, - 72827, 72836, 72844, 72855, 72863, 72872, 72880, 72887, 72894, 72900, - 72911, 34173, 72916, 72927, 72939, 72947, 72958, 72967, 72978, 72983, - 72991, 2576, 72996, 35941, 73009, 73013, 73025, 73033, 73038, 73046, - 18437, 73057, 73063, 73070, 73078, 73084, 34183, 73089, 4050, 61233, - 73096, 73099, 73107, 73120, 73133, 73146, 73159, 73166, 73177, 73186, - 44698, 44703, 73191, 73195, 73203, 73210, 73219, 73227, 73233, 73242, - 73250, 73258, 73262, 73271, 73280, 73290, 73303, 73316, 73326, 34188, - 73332, 73339, 73345, 73351, 34194, 73356, 73359, 73363, 73371, 73380, - 44436, 73388, 73397, 73405, 73412, 73420, 73430, 73439, 73448, 73457, - 73465, 73476, 73491, 73501, 9656, 22572, 73510, 73515, 73520, 73524, - 73529, 73533, 73538, 73544, 73549, 73554, 73560, 73565, 73570, 22537, - 73575, 73582, 73590, 73598, 73606, 73611, 73618, 73625, 73630, 2253, - 73634, 73638, 73646, 73654, 34211, 73660, 73666, 73678, 73684, 73691, - 73695, 73702, 73707, 73714, 73720, 73727, 73738, 73748, 73758, 73770, - 73776, 73784, 73794, 73804, 34238, 73813, 73822, 73828, 73840, 73851, - 73858, 73863, 73867, 73875, 73881, 73886, 73891, 73898, 73906, 73918, - 73928, 73937, 73946, 73953, 35794, 24953, 73959, 73964, 73968, 73972, - 73977, 73985, 73991, 74002, 74015, 74020, 74027, 34243, 74032, 74044, - 74053, 74061, 74071, 74082, 74095, 74102, 74111, 74120, 74128, 74133, - 74139, 1485, 74144, 74149, 74154, 74159, 74165, 74170, 74175, 74181, - 74187, 74192, 74196, 74201, 74206, 74211, 61769, 74216, 74221, 74226, - 74231, 74237, 74243, 74248, 74252, 74257, 74262, 74267, 74273, 74278, - 74284, 74289, 74294, 74299, 74304, 74308, 74314, 74319, 74328, 74333, - 74338, 74343, 74348, 74352, 74359, 74365, 4316, 18083, 3081, 74370, - 74374, 74379, 74383, 74387, 74391, 48498, 74395, 74320, 74397, 74407, - 34252, 74410, 74415, 74424, 74430, 6329, 34257, 74434, 74440, 74445, - 74451, 74456, 74460, 74467, 74472, 74482, 74491, 74495, 74501, 74507, - 74513, 74517, 74525, 74532, 74540, 74548, 34262, 74555, 74558, 74565, - 74571, 74576, 74580, 74586, 74593, 74598, 74602, 74611, 74619, 74625, - 74630, 34267, 74637, 74644, 74650, 74655, 74661, 74668, 74674, 22293, - 28736, 74680, 74685, 74691, 74695, 74707, 74353, 74360, 22469, 74717, - 74722, 74729, 74735, 74742, 74748, 74759, 74764, 74772, 9361, 74777, - 74780, 74786, 74790, 74794, 74797, 74803, 34010, 4317, 1059, 14130, - 74810, 74816, 74822, 74828, 74834, 74840, 74846, 74852, 74858, 74863, - 74868, 74873, 74878, 74883, 74888, 74893, 74898, 74903, 74908, 74913, - 74918, 74923, 74929, 74934, 74939, 74945, 74950, 74955, 74961, 74967, - 74973, 74979, 74985, 74991, 74997, 75003, 75009, 75014, 75019, 75025, - 75030, 75035, 75041, 75046, 75051, 75056, 75061, 75066, 75071, 75076, - 75081, 75086, 75091, 75096, 75101, 75107, 75112, 75117, 75122, 75128, - 75133, 75138, 75143, 75148, 75154, 75159, 75164, 75169, 75174, 75179, - 75184, 75189, 75194, 75199, 75204, 75209, 75214, 75219, 75224, 75229, - 75234, 75239, 75244, 75249, 75255, 75260, 75265, 75270, 75275, 75280, - 75285, 75290, 1871, 147, 75295, 75299, 75303, 75308, 75316, 75320, 75327, - 75335, 75339, 75352, 75360, 75365, 75370, 27545, 75374, 75379, 75383, - 75388, 75392, 75400, 75404, 21910, 75409, 75413, 64050, 75417, 75420, - 75428, 75436, 75444, 75449, 75454, 75461, 75467, 75473, 75478, 75485, - 75490, 75498, 68243, 75505, 75510, 75515, 75519, 12301, 75523, 75528, - 75533, 75537, 75540, 75546, 75550, 75560, 75569, 75573, 75576, 75580, - 75587, 75600, 75606, 75614, 75623, 75634, 75645, 75656, 75667, 75676, - 75682, 75691, 75699, 75709, 75722, 75729, 75740, 75746, 75751, 75756, - 75762, 75768, 75778, 75787, 74034, 75795, 75801, 75809, 75815, 75822, - 75830, 75833, 75837, 75841, 75844, 75850, 75856, 75864, 75876, 75888, - 75895, 75900, 75904, 75915, 75923, 75930, 75942, 75950, 75958, 75965, - 75971, 75981, 75990, 75995, 76005, 76014, 43728, 76021, 76025, 76030, - 76038, 76045, 76051, 76055, 76065, 76076, 76084, 76091, 76103, 76115, - 76124, 72999, 76131, 76141, 76152, 76166, 76174, 76184, 76191, 76199, - 76212, 76224, 76233, 76241, 76251, 76262, 76274, 76283, 76293, 76300, - 76309, 76324, 76332, 76342, 76351, 76359, 76372, 61203, 76387, 76397, - 76406, 76418, 76428, 76440, 76451, 76462, 76473, 76483, 76494, 76502, - 76508, 76518, 76526, 76532, 30400, 76537, 76543, 76548, 76555, 10193, - 18457, 76561, 76570, 76575, 76579, 76586, 76592, 76597, 76602, 76610, - 76618, 76622, 76625, 76628, 76630, 76637, 76643, 76654, 76659, 76663, - 76670, 76676, 76681, 76689, 68782, 68792, 76695, 76702, 76712, 11166, - 76719, 76724, 30611, 76733, 76738, 76745, 76755, 76763, 76771, 76780, - 76786, 76792, 76799, 76806, 76811, 76815, 76823, 76828, 76833, 76842, - 76850, 76857, 76862, 76866, 76875, 76881, 76884, 76888, 76897, 76907, - 75347, 76916, 76924, 76928, 76934, 76945, 76955, 18466, 76966, 76974, - 76982, 18478, 76989, 76993, 77002, 77009, 77012, 28614, 77015, 77019, - 77024, 77041, 77053, 11124, 77065, 77070, 77075, 77080, 21983, 77084, - 77089, 77094, 77100, 77105, 6008, 77110, 21987, 77115, 77120, 77126, - 77133, 77138, 77143, 77149, 77155, 77161, 77166, 77172, 77176, 77190, - 77198, 77206, 77212, 77217, 77224, 77234, 77243, 77248, 77253, 77258, - 77266, 77271, 77277, 77282, 77291, 62848, 77296, 77299, 77317, 77336, - 77349, 77363, 77379, 77386, 77393, 77402, 77409, 77415, 77422, 77427, - 77433, 77439, 77447, 77453, 77458, 77463, 77479, 11137, 77493, 77500, - 77508, 77514, 77518, 77521, 77526, 77531, 77538, 77543, 77552, 77557, - 77563, 77569, 77578, 77587, 77592, 77596, 77604, 77613, 12330, 77622, - 77630, 77636, 77641, 77648, 77654, 12341, 77659, 77662, 77667, 34294, - 77677, 77686, 77691, 77697, 77702, 77710, 77717, 77728, 77738, 77743, - 77751, 68171, 77756, 77762, 77767, 77774, 77783, 77791, 77797, 77803, - 77810, 77816, 77820, 17879, 3090, 77825, 77829, 77833, 77839, 77848, - 77854, 77861, 77865, 77886, 77908, 77924, 77941, 77960, 77969, 77979, - 77987, 77994, 78001, 78007, 28486, 78021, 78025, 78031, 78039, 78051, - 78057, 78065, 78070, 78075, 78079, 78087, 78094, 78098, 78104, 78110, - 78115, 3674, 44898, 78121, 78125, 78129, 78133, 78138, 78143, 78148, - 78154, 78160, 78166, 78173, 78179, 78186, 78192, 78198, 78203, 78209, - 78214, 78218, 78223, 78227, 78232, 44913, 78236, 78241, 78249, 78253, - 78258, 78265, 78274, 78280, 78289, 78293, 78300, 78304, 78307, 78314, - 78320, 78329, 78339, 78344, 78348, 78356, 78365, 78369, 78377, 78383, - 78388, 78393, 78399, 78405, 78410, 78414, 78420, 78425, 78429, 78432, - 78437, 78445, 78455, 78461, 78466, 78476, 42231, 78484, 78496, 78500, - 78506, 78518, 78529, 78536, 78542, 78549, 78556, 78568, 78575, 78581, - 22061, 78585, 78593, 78599, 78606, 78612, 78618, 78624, 78629, 78634, - 78639, 78648, 78656, 78667, 7225, 78672, 17328, 78678, 78682, 78686, - 78690, 78698, 78707, 78711, 78718, 78727, 78735, 78748, 78754, 78228, - 31495, 78759, 78761, 78766, 78771, 78776, 78781, 78786, 78791, 78796, - 78801, 78806, 78811, 78816, 78821, 78826, 78831, 78837, 78842, 78847, - 78852, 78857, 78862, 78867, 78872, 78877, 78883, 78889, 78895, 78900, - 78905, 78917, 78922, 1877, 44, 78927, 78932, 34300, 78936, 34305, 34310, - 34316, 34321, 78940, 34326, 23088, 78962, 78966, 78970, 78975, 78979, - 34330, 78983, 78991, 78998, 34335, 79004, 79007, 79012, 79016, 79025, - 10018, 79033, 34340, 22950, 79036, 79040, 1411, 79045, 34351, 79048, - 79053, 26921, 26931, 36957, 79058, 79063, 79068, 79073, 79079, 79084, - 79093, 79098, 79107, 79115, 79122, 79128, 79133, 79138, 79143, 79153, - 79162, 79170, 79175, 79183, 79187, 79195, 79199, 79206, 79214, 34159, - 39922, 79221, 79227, 79232, 79237, 12703, 29671, 79242, 79247, 79254, - 79260, 79265, 79273, 79283, 79293, 79299, 79304, 79310, 18488, 79317, - 37832, 79330, 79335, 79341, 32482, 79354, 79360, 79364, 79373, 79380, - 79386, 79394, 79403, 79410, 79416, 79419, 79423, 79427, 27062, 79431, - 79438, 79444, 79452, 79457, 25100, 79463, 79466, 79474, 79481, 79489, - 79502, 79516, 79523, 79529, 79536, 79542, 34365, 79546, 79553, 79561, - 79569, 79575, 34370, 79583, 79589, 79594, 79604, 79610, 79619, 32288, - 36388, 79627, 79632, 79637, 79641, 79646, 79650, 79658, 15730, 42244, - 79663, 79668, 34375, 65407, 79672, 79677, 79681, 79688, 79697, 79705, - 79711, 79716, 79722, 79729, 79735, 79740, 79745, 79756, 79765, 79777, - 79792, 34642, 79798, 17447, 34379, 79802, 79809, 25216, 79815, 79822, - 79831, 79838, 79847, 79853, 79858, 79866, 79872, 34389, 79877, 79886, - 78524, 79895, 79902, 79908, 79914, 79923, 79933, 79941, 79948, 79952, - 34394, 79955, 34400, 34406, 79960, 79968, 79976, 79986, 79995, 80003, - 80010, 80020, 34411, 80024, 80026, 80030, 80035, 80039, 80043, 80049, - 80054, 80058, 80069, 80074, 80079, 3095, 80083, 80090, 80094, 80103, - 80111, 80118, 80123, 80128, 65458, 80132, 80135, 80141, 80149, 80155, - 80159, 80164, 80171, 80176, 80180, 80186, 36419, 80191, 80194, 80199, - 80203, 80208, 80215, 80220, 80224, 40816, 80232, 26940, 26949, 80238, - 80244, 80250, 80255, 80259, 80262, 80272, 80281, 80286, 80292, 80299, - 80305, 80309, 80317, 80322, 36425, 75542, 80326, 80334, 80340, 80347, - 80352, 80356, 80361, 61419, 80367, 36431, 80372, 80377, 80381, 80386, - 80391, 80396, 80400, 80405, 80410, 80416, 80421, 80426, 80432, 80438, - 80443, 80447, 80452, 80457, 80462, 80466, 25215, 80471, 80476, 80482, - 80488, 80494, 80499, 80503, 80508, 80513, 80518, 80522, 80527, 80532, - 80537, 80542, 45168, 80546, 34419, 80554, 80558, 80566, 80574, 80585, - 80590, 80594, 23428, 80599, 80605, 80610, 80620, 80627, 80632, 80640, - 80649, 80654, 80658, 80663, 80671, 80679, 80686, 68424, 80692, 80700, - 80707, 80718, 80724, 80730, 34429, 80733, 80740, 80748, 80753, 42447, - 80757, 80762, 80769, 80774, 9239, 80778, 80786, 80793, 80800, 80809, - 80816, 80822, 80836, 10473, 80844, 80850, 80854, 80857, 80865, 80872, - 80877, 80890, 80897, 80901, 80906, 80913, 80918, 63934, 80923, 80926, - 80933, 80939, 80943, 80951, 80960, 80970, 80980, 80989, 81000, 81008, - 81019, 81024, 81028, 81033, 81037, 37088, 81045, 22356, 37097, 81050, - 81055, 81060, 81065, 81070, 81075, 81080, 81084, 81089, 81094, 81099, - 81104, 81109, 81114, 81118, 81123, 81128, 81132, 81136, 81140, 81144, - 81149, 81154, 81158, 81163, 81167, 81171, 81176, 81181, 81186, 81191, - 81195, 81200, 81205, 81209, 81214, 81219, 81224, 81229, 81234, 81239, - 81244, 81249, 81254, 81259, 81264, 81269, 81274, 81279, 81284, 81289, - 81294, 81299, 81304, 81309, 81313, 81318, 81323, 81328, 81333, 81338, - 81343, 81348, 81353, 81358, 81363, 81368, 81372, 81377, 81381, 81386, - 81391, 81396, 81401, 81406, 81411, 81416, 81421, 81426, 81430, 81434, - 81439, 81444, 81448, 81453, 81458, 81462, 81467, 81472, 81477, 81482, - 81486, 81491, 81496, 81500, 81505, 81509, 81513, 81517, 81521, 81526, - 81530, 81534, 81538, 81542, 81546, 81550, 81554, 81558, 81562, 81567, - 81572, 81577, 81582, 81587, 81592, 81597, 81602, 81607, 81612, 81616, - 81620, 81624, 81628, 81632, 81636, 81641, 81645, 81650, 81654, 81659, - 81664, 81668, 81672, 81677, 81681, 81685, 81689, 81693, 81697, 81701, - 81705, 81709, 81713, 81717, 81721, 81725, 81729, 81733, 81738, 81743, - 81747, 81751, 81755, 81759, 81763, 81767, 81772, 81776, 81780, 81784, - 81788, 81792, 81796, 81801, 81805, 81810, 81814, 81818, 81822, 81826, - 81830, 81834, 81838, 81842, 81846, 81850, 81854, 81859, 81863, 81867, - 81871, 81875, 81879, 81883, 81887, 81891, 81895, 81899, 81903, 81908, - 81912, 81916, 81921, 81926, 81930, 81934, 81938, 81942, 81946, 81950, - 81954, 81958, 81963, 81967, 81972, 81976, 81981, 81985, 81990, 81994, - 82000, 82005, 82009, 82014, 82018, 82023, 82027, 82032, 82036, 82041, - 1504, 82045, 2854, 1759, 1677, 82049, 82053, 2863, 82057, 1380, 82062, - 1322, 82066, 2875, 82070, 82077, 82084, 82098, 2879, 7327, 82107, 82115, - 82122, 82133, 82142, 82149, 82161, 82174, 82187, 82198, 82203, 82210, - 82222, 82226, 2883, 12408, 82236, 82241, 82250, 82260, 82265, 2887, - 82273, 82277, 82282, 82289, 82295, 82303, 82315, 1327, 13735, 82325, - 82329, 82335, 82349, 82361, 82373, 82383, 82392, 82401, 82410, 82418, - 82429, 82437, 4203, 82447, 82458, 82467, 82473, 82488, 82495, 82501, - 82506, 37227, 82511, 2911, 13739, 82515, 82522, 9177, 82531, 2916, 33887, - 82537, 63675, 82544, 82550, 82561, 82567, 82574, 82580, 82588, 82595, - 82601, 82611, 82620, 82631, 82640, 82647, 82653, 82663, 82671, 82677, - 82692, 82698, 82703, 82710, 82713, 82719, 82726, 82732, 82740, 82749, - 82757, 82763, 82772, 44438, 82786, 82791, 82797, 15536, 82802, 82815, - 82827, 82836, 82844, 82851, 82855, 82859, 82862, 82869, 82876, 82884, - 82892, 82901, 82909, 15463, 82917, 82922, 82926, 82938, 82945, 82954, - 781, 82964, 82973, 82984, 2932, 82988, 82992, 82998, 83011, 83023, 83033, - 83042, 83054, 27597, 83065, 83073, 83082, 83093, 83104, 83114, 83124, - 83133, 83141, 11944, 83148, 83152, 83155, 83160, 83165, 83169, 83175, - 1332, 83182, 83186, 12490, 83190, 83201, 83210, 83218, 83227, 83235, - 83251, 83262, 83271, 83279, 83291, 83302, 83318, 83328, 83349, 83363, - 83376, 83384, 83391, 7373, 83404, 83409, 83415, 6078, 83421, 83424, - 83431, 83441, 8395, 83448, 83453, 83458, 83463, 83471, 83480, 83488, - 10241, 10250, 83493, 83504, 83509, 83515, 2948, 1160, 83521, 11449, - 83527, 83534, 83541, 83554, 2262, 68, 83559, 83564, 83574, 83583, 83589, - 83598, 83606, 83616, 83620, 83625, 83629, 83641, 2976, 83649, 83657, - 83662, 83673, 83684, 83693, 22397, 83698, 83704, 83709, 83719, 83729, - 83734, 83740, 83744, 83749, 83758, 22409, 83762, 4280, 24, 83767, 83776, - 83783, 83790, 83796, 83802, 954, 83807, 83812, 64016, 83817, 83822, - 83828, 83834, 83842, 83847, 83855, 83862, 83868, 83873, 40700, 44332, - 83879, 2980, 32, 83889, 83902, 83907, 83915, 83920, 83926, 3002, 29639, - 83931, 83939, 83946, 83951, 83960, 61661, 65078, 83968, 83972, 1704, - 1818, 83977, 83982, 83989, 1822, 254, 83996, 84002, 3024, 84007, 84012, - 84019, 1826, 84024, 84030, 84035, 84047, 6305, 84057, 1833, 84063, 84068, - 84075, 84082, 84097, 84104, 84115, 84120, 84128, 2638, 84132, 84144, - 84149, 84153, 84159, 29455, 2267, 84163, 84174, 84178, 84182, 84188, - 84192, 84201, 84205, 84216, 84220, 2313, 33704, 84224, 84234, 3115, - 84242, 9661, 84251, 84256, 84260, 84269, 84276, 84282, 3085, 18093, - 84286, 84299, 84317, 84322, 84330, 84338, 84348, 10480, 13852, 84360, - 84373, 84380, 84394, 84401, 84417, 84424, 84430, 22441, 13100, 84437, - 84444, 84454, 84463, 45167, 84475, 45302, 84483, 84486, 84492, 84498, - 84504, 84510, 84516, 84523, 84530, 84536, 84542, 84548, 84554, 84560, - 84566, 84572, 84578, 84584, 84590, 84596, 84602, 84608, 84614, 84620, - 84626, 84632, 84638, 84644, 84650, 84656, 84662, 84668, 84674, 84680, - 84686, 84692, 84698, 84704, 84710, 84716, 84722, 84728, 84734, 84740, - 84746, 84752, 84758, 84764, 84770, 84776, 84782, 84788, 84794, 84800, - 84806, 84812, 84818, 84824, 84830, 84836, 84843, 84849, 84856, 84863, - 84869, 84876, 84883, 84889, 84895, 84901, 84907, 84913, 84919, 84925, - 84931, 84937, 84943, 84949, 84955, 84961, 84967, 84973, 3099, 9634, - 84979, 84985, 84993, 84997, 82285, 3103, 85001, 22174, 12733, 3885, - 85005, 3109, 85009, 85019, 85025, 85031, 85037, 85043, 85049, 85055, - 85061, 85067, 85073, 85079, 85085, 85091, 85097, 85103, 85109, 85115, - 85121, 85127, 85133, 85139, 85145, 85151, 85157, 85163, 85169, 85176, - 85183, 85189, 85195, 85201, 85207, 85213, 85219, 1337, 85225, 85230, - 85235, 85240, 85245, 85250, 85255, 85260, 85265, 85269, 85273, 85277, - 85281, 85285, 85289, 85293, 85297, 85301, 85307, 85313, 85319, 85325, - 85329, 85333, 85337, 85341, 85345, 85349, 85353, 85357, 85361, 85366, - 85371, 85376, 85381, 85386, 85391, 85396, 85401, 85406, 85411, 85416, - 85421, 85426, 85431, 85436, 85441, 85446, 85451, 85456, 85461, 85466, - 85471, 85476, 85481, 85486, 85491, 85496, 85501, 85506, 85511, 85516, - 85521, 85526, 85531, 85536, 85541, 85546, 85551, 85556, 85561, 85566, - 85571, 85576, 85581, 85586, 85591, 85596, 85601, 85606, 85611, 85616, - 85621, 85626, 85631, 85636, 85641, 85646, 85651, 85656, 85661, 85666, - 85671, 85676, 85681, 85686, 85691, 85696, 85701, 85706, 85711, 85716, - 85721, 85726, 85731, 85736, 85741, 85746, 85751, 85756, 85761, 85766, - 85771, 85776, 85781, 85786, 85791, 85796, 85801, 85806, 85811, 85816, - 85821, 85826, 85831, 85836, 85841, 85846, 85851, 85856, 85861, 85866, - 85871, 85876, 85881, 85886, 85891, 85896, 85901, 85906, 85911, 85916, - 85921, 85926, 85931, 85936, 85941, 85946, 85951, 85956, 85961, 85966, - 85971, 85976, 85981, 85986, 85991, 85996, 86001, 86006, 86011, 86016, - 86021, 86030, 86039, 86048, 86057, 86066, 86075, 86084, 86093, 86102, - 86111, 86120, 86129, 86138, 86147, 86156, 86165, 86174, 86183, 86192, - 86197, 86202, 86207, 86212, 86217, 86222, 86227, 86232, 86237, 86242, - 86247, 86252, 86257, 86262, 86267, 86272, 86277, 86282, 86287, 86292, - 86297, 86302, 86307, 86312, 86317, 86322, 86327, 86332, 86337, 86342, - 86347, 86352, 86357, 86362, 86367, 86372, 86377, 86382, 86387, 86392, - 86397, 86402, 86407, 86412, 86417, 86422, 86427, 86432, 86437, 86442, - 86447, 86452, 86457, 86462, 86467, 86472, 86477, 86482, 86488, 86494, - 86500, 86505, 86510, 86515, 86521, 86527, 86533, 86538, 86543, 86548, - 86553, 86558, 86563, 86568, 16922, 12755, 86573, 86579, 86585, 86594, - 86599, 86604, 86609, 86614, 86619, 86624, 86629, 86634, 86639, 86644, - 86649, 86654, 86659, 86664, 86669, 86674, 86679, 86684, 86689, 86694, - 86699, 86704, 86709, 86714, 86719, 86725, 86730, 86735, 86741, 86746, - 86752, 86757, 86762, 86768, 86773, 86778, 86783, 86788, 86793, 86798, - 86803, 86808, 85020, 85026, 85032, 85038, 86814, 85044, 85050, 85056, - 85062, 85068, 85074, 85080, 85086, 85092, 85098, 85104, 86820, 85110, - 85116, 85122, 86826, 85128, 85134, 85140, 85146, 85152, 85158, 85164, - 85184, 86832, 86838, 85190, 86844, 85196, 85202, 85208, 85214, 85220, - 3126, 3131, 86850, 86855, 86858, 86864, 86870, 86877, 86882, 86887, 2318, + 0, 0, 6, 10, 14, 22, 27, 34, 44, 49, 58, 64, 66, 69, 81, 89, 102, 108, + 113, 118, 126, 135, 146, 151, 156, 161, 164, 168, 177, 183, 189, 194, + 201, 209, 217, 218, 221, 229, 165, 235, 244, 251, 261, 267, 274, 279, + 282, 287, 293, 296, 300, 305, 311, 317, 322, 327, 333, 339, 348, 355, + 362, 371, 376, 381, 383, 391, 399, 400, 408, 410, 417, 420, 426, 433, + 331, 438, 440, 442, 449, 451, 456, 464, 471, 476, 480, 486, 491, 501, + 506, 513, 516, 524, 528, 538, 545, 554, 561, 570, 577, 580, 584, 592, + 598, 611, 618, 622, 626, 627, 636, 640, 649, 655, 659, 661, 666, 674, + 678, 686, 691, 694, 700, 703, 707, 712, 720, 723, 730, 735, 744, 753, + 761, 769, 773, 779, 787, 794, 797, 807, 811, 815, 826, 833, 840, 844, + 848, 854, 842, 863, 869, 874, 879, 883, 886, 889, 894, 903, 911, 916, + 658, 575, 921, 924, 930, 934, 938, 947, 953, 960, 969, 976, 989, 994, + 998, 1006, 1009, 1015, 1021, 1030, 1037, 1045, 1052, 1062, 1069, 1077, + 1086, 1090, 1093, 1100, 21, 1104, 1113, 1121, 1128, 1131, 1136, 1138, + 1142, 1151, 1156, 1159, 1165, 1172, 1175, 1180, 1185, 1191, 1196, 1201, + 1206, 1210, 1215, 1221, 1226, 1231, 1235, 1241, 1246, 1251, 1256, 1260, + 1265, 1270, 1275, 1281, 1287, 1293, 1298, 1302, 1307, 1312, 1317, 1321, + 1326, 1331, 1336, 1341, 1176, 1181, 1186, 1192, 1197, 1345, 1207, 1351, + 1356, 1361, 1368, 1372, 1375, 1384, 1211, 1388, 1216, 1222, 1227, 1392, + 1397, 1402, 1406, 1410, 1416, 1420, 1232, 1423, 1425, 1242, 1430, 1434, + 1247, 1440, 1252, 1444, 1448, 1257, 1452, 1457, 1461, 1464, 1468, 1261, + 1266, 1473, 1479, 1271, 1491, 1497, 1503, 1509, 1276, 1288, 1294, 1513, + 1517, 1521, 1524, 1299, 1528, 1530, 1535, 1540, 1546, 1551, 1556, 1560, + 1565, 1570, 1575, 1580, 1586, 1591, 1596, 1602, 1608, 1613, 1617, 1622, + 1627, 1632, 1637, 1642, 1646, 1654, 1659, 1663, 1668, 1673, 1678, 1683, + 1687, 1690, 1697, 1702, 1707, 1712, 1717, 1723, 1728, 1732, 1303, 1735, + 1740, 1745, 1308, 1749, 1753, 1760, 1313, 1767, 1318, 1771, 1773, 1778, + 1784, 1322, 1789, 1798, 1327, 1803, 1809, 1814, 1332, 1819, 1824, 1827, + 1832, 1836, 1840, 1844, 1847, 1851, 1337, 1856, 1342, 1860, 1862, 1868, + 1874, 1880, 1886, 1892, 1898, 1904, 1910, 1915, 1921, 1927, 1933, 1939, + 1945, 1951, 1957, 1963, 1969, 1974, 1979, 1984, 1989, 1994, 1999, 2004, + 2009, 2014, 2019, 2025, 2030, 2036, 2041, 2047, 2053, 2058, 2064, 2070, + 2076, 2082, 2087, 2092, 2094, 2095, 2099, 2103, 2108, 2112, 2116, 2120, + 2125, 2129, 2132, 2137, 2141, 2146, 2150, 2154, 2159, 2163, 2166, 2170, + 2176, 2190, 2194, 2198, 2202, 2205, 2210, 2214, 2218, 2221, 2225, 2230, + 2235, 2240, 2245, 2249, 2253, 2257, 2261, 2266, 2270, 2275, 2279, 2284, + 2290, 2297, 2303, 2308, 2313, 2318, 2324, 2329, 2335, 2340, 2343, 2345, + 1193, 2349, 2356, 2364, 2374, 2383, 2397, 2401, 2405, 2410, 2423, 2431, + 2435, 2440, 2444, 2447, 2451, 2455, 2460, 2465, 2470, 2474, 2477, 2481, + 2488, 2495, 2501, 2506, 2511, 2517, 2523, 2528, 2531, 1775, 2533, 2539, + 2543, 2548, 2552, 2556, 1693, 1786, 2561, 2565, 2568, 2573, 2578, 2583, + 2588, 2592, 2599, 2604, 2607, 2614, 2620, 2624, 2628, 2632, 2637, 2644, + 2649, 2654, 2661, 2667, 2673, 2679, 2693, 2710, 2725, 2740, 2749, 2754, + 2758, 2763, 2768, 2772, 2784, 2791, 2797, 2293, 2803, 2810, 2816, 2820, + 2823, 2830, 2836, 2841, 2845, 2850, 2854, 2858, 2117, 2862, 2867, 2872, + 2876, 2881, 2889, 2893, 2898, 2902, 2906, 2910, 2915, 2920, 2925, 2929, + 2934, 2939, 2943, 2948, 2952, 2955, 2959, 2963, 2971, 2976, 2980, 2984, + 2990, 2999, 3003, 3007, 3013, 3018, 3025, 3029, 3039, 3043, 3047, 3052, + 3056, 3061, 3067, 3072, 3076, 3080, 3084, 2491, 3092, 3097, 3103, 3108, + 3112, 3117, 3122, 3126, 3132, 3137, 2121, 3143, 3149, 3154, 3159, 3164, + 3169, 3174, 3179, 3184, 3189, 3194, 3200, 3205, 1208, 101, 3211, 3215, + 3219, 3223, 3228, 3232, 3236, 3242, 3247, 3251, 3255, 3260, 3265, 3269, + 3274, 3278, 3281, 3285, 3290, 3294, 3299, 3303, 3306, 3310, 3314, 3319, + 3323, 3326, 3339, 3343, 3347, 3351, 3356, 3360, 3364, 3367, 3371, 3375, + 3380, 3384, 3389, 3394, 3399, 3403, 3408, 3411, 3414, 3419, 3425, 3429, + 3433, 3436, 3441, 3445, 3450, 3454, 3458, 3461, 3467, 3472, 3477, 3483, + 3488, 3493, 3499, 3505, 3510, 3515, 3520, 3525, 1140, 579, 3528, 3531, + 3536, 3540, 3544, 3548, 3552, 3555, 3559, 3564, 3569, 3573, 3578, 3582, + 3587, 3591, 3595, 3599, 3605, 3611, 3614, 3617, 139, 3623, 3628, 3637, + 3645, 3654, 3661, 3667, 3674, 3679, 3683, 3687, 3695, 3702, 3707, 3714, + 3719, 3723, 3733, 3737, 3741, 3746, 3751, 3761, 2133, 3766, 3770, 3773, + 3779, 3784, 3790, 3796, 3801, 3808, 3812, 3816, 637, 701, 1369, 3820, + 3827, 3834, 3840, 3845, 3852, 3859, 3864, 3870, 3876, 3881, 3885, 3891, + 3898, 3903, 3907, 2142, 3911, 3919, 3925, 3933, 739, 3939, 3947, 3958, + 3962, 3972, 2147, 3978, 3983, 3998, 4004, 4011, 4021, 4027, 4032, 4038, + 4044, 4047, 4050, 4054, 4059, 4066, 4071, 4075, 4079, 4083, 4087, 4092, + 4098, 4109, 4113, 3286, 4118, 4130, 4136, 4144, 4148, 4153, 1562, 4160, + 4163, 4166, 4170, 4173, 4179, 4183, 4197, 4201, 4204, 4208, 4214, 4220, + 4225, 4229, 4233, 4239, 4250, 4256, 4261, 4267, 4271, 4279, 4291, 4301, + 4307, 4312, 4321, 4329, 4336, 4342, 4346, 4352, 4361, 4370, 4374, 4383, + 4388, 4392, 4397, 4401, 4409, 4415, 4419, 4424, 4428, 4434, 2155, 1385, + 4440, 4445, 4451, 4456, 4461, 4466, 4471, 4476, 4481, 4487, 4492, 4498, + 4503, 4508, 4513, 4519, 4524, 4529, 4534, 4539, 4545, 4550, 4556, 4561, + 4566, 4571, 4576, 4581, 4586, 4592, 4597, 4602, 291, 321, 4607, 4613, + 4617, 4621, 4626, 4630, 4634, 4637, 4641, 4645, 4649, 4653, 4657, 4662, + 4666, 4670, 4676, 4437, 4681, 4685, 4688, 4693, 4698, 4703, 4708, 4713, + 4718, 4723, 4728, 4733, 4738, 4742, 4747, 4752, 4757, 4762, 4767, 4772, + 4777, 4782, 4787, 4792, 4796, 4801, 4806, 4811, 4816, 4821, 4826, 4831, + 4836, 4841, 4846, 4850, 4855, 4860, 4865, 4870, 4875, 4880, 4885, 4890, + 4895, 4900, 4904, 4909, 4914, 4919, 4924, 4929, 4934, 4939, 4944, 4949, + 4954, 4958, 4963, 4968, 4973, 4978, 4983, 4988, 4993, 4998, 5003, 5008, + 5012, 5017, 5022, 5027, 5032, 5037, 5042, 5047, 5052, 5057, 5062, 5066, + 5071, 5076, 5081, 5086, 5092, 5098, 5104, 5110, 5116, 5122, 5128, 5133, + 5139, 5145, 5151, 5157, 5163, 5169, 5175, 5181, 5187, 5193, 5198, 5204, + 5210, 5216, 5222, 5228, 5234, 5240, 5246, 5252, 5258, 5263, 5269, 5275, + 5281, 5287, 5293, 5299, 5305, 5311, 5317, 5323, 5328, 5334, 5340, 5346, + 5352, 5358, 5364, 5370, 5376, 5382, 5388, 5393, 5399, 5405, 5411, 5417, + 5423, 5429, 5435, 5441, 5447, 5453, 5458, 5462, 5468, 5474, 5480, 5486, + 5492, 5498, 5504, 5510, 5516, 5522, 5527, 5533, 5539, 5545, 5551, 5557, + 5563, 5569, 5575, 5581, 5587, 5592, 5598, 5604, 5610, 5616, 5622, 5628, + 5634, 5640, 5646, 5652, 5657, 5663, 5669, 5675, 5681, 5687, 5693, 5699, + 5705, 5711, 5717, 5722, 5728, 5734, 5740, 5746, 5752, 5758, 5764, 5770, + 5776, 5782, 5787, 5793, 5799, 5805, 5811, 5817, 5823, 5829, 5835, 5841, + 5847, 5852, 5858, 5864, 5870, 5876, 5882, 5888, 5894, 5900, 5906, 5912, + 5917, 5923, 5929, 5935, 5941, 5947, 5953, 5959, 5965, 5971, 5977, 5982, + 5988, 5994, 6000, 6006, 6012, 6018, 6024, 6030, 6036, 6042, 6047, 6053, + 6059, 6065, 6071, 6077, 6083, 6089, 6095, 6101, 6107, 6112, 6116, 6119, + 6126, 6130, 6143, 6147, 6151, 6155, 6158, 6162, 6167, 6171, 6175, 6181, + 6188, 6199, 6207, 6214, 6218, 6226, 6235, 6241, 6253, 6258, 6261, 6266, + 6270, 6280, 6288, 6296, 6302, 6306, 6316, 6326, 6334, 6341, 6348, 6354, + 6360, 6367, 6371, 6378, 6388, 6398, 6406, 6413, 6418, 6422, 6426, 6434, + 6438, 6443, 6450, 6458, 6463, 6467, 6472, 6476, 6483, 6488, 6502, 6507, + 6512, 6519, 3541, 6528, 6532, 6537, 6541, 6545, 6548, 6553, 6558, 6567, + 6573, 6579, 6585, 6589, 6600, 6610, 6625, 6640, 6655, 6670, 6685, 6700, + 6715, 6730, 6745, 6760, 6775, 6790, 6805, 6820, 6835, 6850, 6865, 6880, + 6895, 6910, 6925, 6940, 6955, 6970, 6985, 7000, 7015, 7030, 7045, 7060, + 7075, 7090, 7105, 7120, 7135, 7150, 7165, 7180, 7195, 7210, 7225, 7240, + 7255, 7270, 7285, 7300, 7315, 7330, 7345, 7354, 7363, 7368, 7374, 7384, + 7388, 7392, 7397, 7402, 7410, 7414, 7417, 7421, 3034, 7424, 7429, 330, + 504, 7435, 7443, 7447, 7451, 7454, 7458, 7464, 7468, 7476, 7482, 7487, + 7494, 7502, 7509, 7515, 7520, 7527, 7533, 7541, 7545, 7550, 7562, 7573, + 7580, 7584, 7588, 7592, 7595, 7601, 3311, 7605, 7611, 7616, 7621, 7626, + 7632, 7637, 7642, 7647, 7652, 7658, 7663, 7668, 7674, 7679, 7685, 7690, + 7696, 7701, 7707, 7712, 7717, 7722, 7727, 7732, 7738, 7743, 7748, 7753, + 7759, 7765, 7771, 7777, 7783, 7789, 7795, 7801, 7807, 7813, 7819, 7825, + 7830, 7835, 7840, 7845, 7850, 7855, 7860, 7865, 7871, 7877, 7882, 7888, + 7894, 7900, 7905, 7910, 7915, 7920, 7926, 7932, 7937, 7942, 7947, 7952, + 7957, 7963, 7968, 7974, 7980, 7986, 7992, 7998, 8004, 8010, 8016, 8022, + 2164, 7453, 8027, 8031, 8035, 8038, 8045, 8048, 8052, 8060, 8065, 8070, + 8061, 8075, 2191, 8079, 8085, 8091, 8096, 8101, 8108, 8116, 8121, 8125, + 8128, 8132, 8138, 8144, 8148, 2199, 526, 8151, 8155, 8160, 8166, 8171, + 8175, 8178, 8182, 8188, 8193, 8197, 8204, 8208, 8212, 8216, 876, 958, + 8219, 8227, 8234, 8240, 8247, 8255, 8262, 8273, 8280, 8286, 8291, 8303, + 1228, 1393, 1398, 8314, 1403, 8318, 8322, 8331, 8339, 8343, 8352, 8358, + 8363, 8367, 8373, 8378, 8385, 2745, 8392, 8396, 8405, 8414, 8423, 8432, + 8438, 8443, 8448, 8459, 8471, 8476, 8484, 2250, 8488, 8490, 8495, 8499, + 8508, 8516, 1407, 159, 3583, 3588, 8522, 8526, 8535, 8541, 8546, 8549, + 8558, 3592, 2737, 8564, 8572, 8576, 8580, 8584, 2267, 8588, 8593, 8600, + 8606, 8612, 8615, 8617, 8620, 8628, 8636, 8644, 8647, 8652, 2280, 8657, + 8072, 8660, 8662, 8667, 8672, 8677, 8682, 8687, 8692, 8697, 8702, 8707, + 8712, 8718, 8723, 8728, 8733, 8739, 8744, 8749, 8754, 8759, 8764, 8769, + 8775, 8780, 8785, 8790, 8795, 8800, 8805, 8810, 8815, 8820, 8825, 8830, + 8835, 8840, 8845, 8850, 8855, 8860, 8866, 8872, 8877, 8882, 8887, 8892, + 8897, 2291, 2298, 2304, 8902, 8910, 8916, 8924, 2330, 2336, 8932, 8936, + 8941, 8945, 8949, 8953, 8958, 8962, 8967, 8971, 8974, 8977, 8983, 8990, + 8996, 9003, 9009, 9016, 9022, 9029, 9035, 9041, 9050, 9056, 9060, 9064, + 9068, 9072, 9077, 9081, 9086, 9090, 9096, 9101, 9108, 9119, 9127, 9137, + 9143, 9153, 9162, 9169, 9174, 9178, 9189, 9202, 9213, 9226, 9237, 9249, + 9261, 9273, 9286, 9299, 9306, 9312, 9326, 9333, 9339, 9348, 9356, 9360, + 9365, 9369, 9376, 9384, 9388, 9394, 9398, 9404, 9414, 9418, 9423, 9428, + 9435, 9441, 9451, 8242, 9457, 9461, 9468, 9474, 9481, 9488, 957, 9492, + 9496, 9501, 9506, 9511, 9515, 9521, 9529, 9535, 9539, 9542, 9548, 9558, + 9562, 9568, 9573, 9577, 9581, 9587, 9593, 2187, 9598, 9600, 9605, 9613, + 9622, 9626, 9632, 9637, 9642, 9647, 9652, 9658, 9663, 9668, 4235, 9673, + 9678, 9682, 9688, 9693, 9699, 9704, 9709, 9715, 9720, 9627, 9726, 9730, + 9737, 9743, 9748, 9752, 6498, 9757, 9766, 9771, 9776, 8596, 8603, 9781, + 2912, 9785, 9790, 9795, 9800, 9638, 9804, 9809, 9814, 9643, 9818, 9648, + 9823, 9830, 9837, 9843, 9850, 9856, 9862, 9867, 9874, 9879, 9884, 9889, + 9895, 9653, 9659, 9901, 9907, 9912, 9917, 9925, 9664, 9930, 1102, 9933, + 9941, 9947, 9953, 9962, 9970, 9978, 9986, 9994, 10002, 10010, 10018, + 10026, 10035, 10044, 10052, 10061, 10070, 10079, 10088, 10097, 10106, + 10115, 10124, 10133, 10142, 10150, 10155, 10161, 10169, 10176, 10191, + 10208, 10227, 10236, 10244, 10259, 10270, 10280, 10290, 10298, 10304, + 10316, 10325, 10333, 10340, 10347, 10354, 10360, 10365, 10375, 10383, + 10393, 10400, 10410, 10420, 10430, 10438, 10445, 10454, 10464, 10478, + 10493, 10502, 10510, 10515, 10519, 10528, 10534, 10539, 10549, 10559, + 10569, 10574, 10578, 10587, 10592, 10608, 10625, 10635, 10646, 10659, + 10667, 10680, 10692, 10700, 10705, 10709, 10715, 10720, 10728, 10736, + 10743, 10748, 10756, 10766, 10772, 10776, 10779, 10783, 10789, 10796, + 10800, 10808, 10817, 10825, 10832, 10837, 10842, 10846, 10850, 10858, + 10873, 10889, 10895, 10903, 10912, 10920, 10926, 10930, 10937, 10948, + 10952, 10955, 10961, 9669, 10966, 10972, 10979, 10985, 10990, 10997, + 11004, 11011, 11018, 11025, 11032, 11039, 11046, 11051, 10204, 11056, + 11062, 11069, 11076, 11081, 11088, 11097, 11101, 11113, 8634, 11117, + 11120, 11124, 11128, 11132, 11136, 11142, 11148, 11153, 11159, 11164, + 11169, 11175, 11180, 11185, 9431, 11190, 11194, 11198, 11202, 11207, + 11212, 11217, 11225, 11231, 11236, 11240, 11244, 11251, 11256, 11264, + 11271, 11276, 11280, 11283, 11289, 11296, 11300, 11303, 11308, 11312, + 4274, 11318, 11327, 46, 11335, 11341, 11346, 11351, 11359, 11366, 11371, + 9446, 11377, 11383, 11388, 11392, 11395, 11410, 11429, 11441, 11454, + 11467, 11480, 11494, 11507, 11522, 11529, 9674, 11535, 11549, 11554, + 11560, 11565, 11573, 11578, 8401, 11583, 11586, 11594, 11601, 11606, + 11610, 11616, 2917, 10278, 11620, 11624, 11630, 11636, 11641, 11647, + 11652, 9683, 11658, 11664, 11669, 11674, 11682, 11688, 11701, 11709, + 11716, 11722, 9689, 11728, 11736, 11744, 11751, 11764, 11777, 11789, + 11799, 11807, 11814, 11826, 11833, 11843, 11852, 11861, 11869, 11876, + 11881, 11887, 9694, 11892, 11898, 11903, 11908, 9700, 11913, 11916, + 11923, 11929, 11942, 9112, 11953, 11959, 11968, 11976, 11983, 11989, + 12000, 12006, 12011, 3836, 12019, 12024, 11402, 12030, 12037, 12042, + 9705, 12048, 12053, 12060, 12066, 12072, 12077, 12085, 12093, 12100, + 12104, 12116, 12130, 12140, 12145, 12149, 12160, 12166, 12171, 12176, + 9710, 12180, 9716, 12185, 12188, 12193, 12205, 12212, 12217, 12221, + 12229, 12234, 12238, 12243, 12247, 12254, 12260, 9721, 9628, 12267, 2922, + 12, 12274, 12279, 12283, 12287, 12293, 12301, 12311, 12316, 12321, 12328, + 12335, 12339, 12350, 12360, 12369, 12378, 12390, 12395, 12399, 12407, + 12421, 12425, 12428, 12436, 12443, 12451, 12455, 12466, 12470, 12477, + 12482, 12486, 12492, 12497, 12503, 12508, 12513, 12517, 12523, 12528, + 12539, 12543, 12546, 12552, 12557, 12563, 12569, 12576, 12587, 12597, + 12607, 12616, 12623, 12632, 12636, 9731, 9738, 9744, 9749, 12642, 12648, + 12654, 12659, 12665, 9753, 12671, 12674, 12681, 12686, 12701, 12717, + 12732, 12740, 12746, 12751, 950, 374, 12756, 12764, 12771, 12777, 12782, + 12787, 9758, 12789, 12793, 12798, 12802, 12812, 12817, 12821, 12830, + 12834, 12837, 12844, 9767, 12849, 12852, 12860, 12867, 12875, 12879, + 12883, 12890, 12899, 12906, 12902, 12913, 12917, 12923, 12927, 12931, + 12935, 12941, 12951, 12959, 12966, 12970, 12978, 12982, 12989, 12993, + 12998, 13002, 13009, 13015, 13023, 13029, 13034, 13044, 13049, 13054, + 13058, 13062, 13070, 4124, 13078, 13083, 9772, 13087, 13091, 13094, + 13102, 13109, 13113, 6298, 13117, 13122, 13127, 13131, 13142, 13152, + 13157, 13163, 13168, 13172, 13175, 13183, 13188, 13193, 13200, 13205, + 9777, 13210, 13214, 13221, 1737, 6456, 13226, 13231, 13236, 13241, 13247, + 13252, 13258, 13263, 13268, 13273, 13278, 13283, 13288, 13293, 13298, + 13303, 13308, 13313, 13318, 13323, 13328, 13333, 13338, 13344, 13349, + 13354, 13359, 13364, 13369, 13375, 13380, 13385, 13391, 13396, 13402, + 13407, 13413, 13418, 13423, 13428, 13433, 13439, 13444, 13449, 13454, + 909, 112, 13462, 13466, 13471, 13476, 13480, 13484, 13488, 13493, 13497, + 13502, 13506, 13509, 13513, 13517, 13523, 13528, 13538, 13544, 13552, + 13558, 13562, 13566, 13573, 13581, 13590, 13601, 13611, 13618, 13625, + 13629, 13638, 13647, 13655, 13664, 13673, 13682, 13691, 13701, 13711, + 13721, 13731, 13741, 13750, 13760, 13770, 13780, 13790, 13800, 13810, + 13820, 13829, 13839, 13849, 13859, 13869, 13879, 13889, 13898, 13908, + 13918, 13928, 13938, 13948, 13958, 13968, 13978, 13988, 13997, 14007, + 14017, 14027, 14037, 14047, 14057, 14067, 14077, 14087, 14097, 14106, + 1237, 14112, 14115, 14119, 14124, 14131, 14137, 14142, 14146, 14151, + 14160, 14168, 14173, 14177, 14181, 14187, 14192, 14198, 9786, 14203, + 14208, 14217, 9796, 14222, 14225, 14231, 14239, 9801, 14246, 14250, + 14254, 14259, 14263, 14273, 14279, 14285, 14290, 14299, 14307, 14314, + 14321, 14326, 14333, 14338, 14342, 14345, 14356, 14366, 14375, 14383, + 14394, 14406, 14416, 14421, 14425, 14430, 14435, 14439, 14445, 14453, + 14460, 14471, 14476, 14486, 14495, 14499, 14502, 14509, 14519, 14528, + 14535, 14539, 14546, 14552, 14557, 14562, 14566, 14575, 14580, 14584, + 14590, 14594, 14599, 14603, 14610, 14617, 14621, 14630, 14638, 14646, + 14653, 14661, 14673, 14684, 14694, 14701, 14707, 14716, 14727, 14736, + 14748, 14760, 14772, 14782, 14791, 14800, 14808, 14815, 14824, 14832, + 14836, 14841, 14847, 14853, 14858, 14863, 8093, 14867, 14869, 14873, + 14878, 14884, 14890, 14899, 14903, 14909, 14917, 14924, 14933, 14942, + 14951, 14960, 14969, 14978, 14987, 14996, 15006, 15016, 15025, 15031, + 15038, 15045, 15051, 15065, 15071, 15078, 15086, 15095, 15103, 15109, + 15118, 15127, 15138, 15148, 15156, 15163, 15171, 15180, 15193, 15202, + 15210, 15217, 15230, 15236, 15242, 15252, 15261, 15270, 15275, 15279, + 15285, 15291, 15296, 15303, 15310, 9445, 15315, 15320, 15327, 15335, + 15340, 15347, 15352, 15364, 13519, 15369, 15377, 15383, 15388, 15396, + 15404, 15411, 15419, 15425, 15433, 15441, 15447, 15452, 15458, 15465, + 15471, 15476, 15480, 15491, 15499, 15505, 15510, 15517, 15526, 15532, + 15537, 15545, 15554, 15568, 4068, 15572, 15577, 15582, 15588, 15593, + 15598, 15602, 15607, 15612, 15617, 8092, 15622, 15627, 15632, 15637, + 15642, 15646, 15651, 15656, 15661, 15666, 15672, 15678, 15683, 15687, + 15693, 15698, 15703, 15708, 9805, 15713, 15718, 15723, 15728, 15733, + 15750, 15768, 15780, 15793, 15810, 15826, 15843, 15853, 15872, 15883, + 15894, 15905, 15916, 15928, 15939, 15950, 15967, 15978, 15989, 15994, + 9810, 15999, 16003, 2420, 16007, 16010, 16016, 16024, 16032, 16041, + 16048, 16053, 16061, 16069, 16076, 16080, 16085, 16091, 16098, 16106, + 16113, 16125, 16132, 16138, 16146, 16151, 16157, 12695, 16163, 16172, + 16178, 16183, 16191, 16200, 16208, 16215, 16221, 16229, 16236, 16242, + 16248, 16255, 16262, 16268, 16274, 16283, 16291, 16301, 16308, 16314, + 16322, 16328, 16336, 16344, 16351, 16364, 16371, 16380, 16389, 16398, + 16406, 16416, 16423, 16428, 3727, 16435, 16440, 1353, 16444, 15623, + 16448, 16454, 16458, 16466, 16478, 16483, 16490, 16496, 16501, 16508, + 15628, 16512, 16516, 16520, 15633, 16524, 15638, 16528, 16535, 16540, + 16544, 16551, 16555, 16563, 16570, 16575, 16579, 16586, 16603, 16612, + 16616, 16619, 16627, 16633, 16638, 3805, 16642, 16644, 16652, 16659, + 16669, 16681, 16686, 16690, 16696, 16701, 16705, 16711, 16716, 16722, + 16725, 16732, 16740, 16747, 16753, 16758, 16764, 16769, 16776, 16782, + 16787, 16794, 16799, 16803, 16809, 16813, 16820, 16826, 16831, 16837, + 16845, 16853, 16860, 16866, 16871, 16877, 16883, 16891, 16899, 16905, + 16911, 16916, 16923, 16928, 16932, 16938, 16943, 16950, 16955, 16961, + 16964, 16970, 16976, 16979, 16983, 16987, 16999, 17005, 17010, 17017, + 17023, 17029, 17040, 17050, 17059, 17067, 17074, 17085, 17095, 17105, + 17113, 17116, 15652, 17121, 17126, 15657, 15798, 17134, 17147, 17162, + 17173, 15815, 17191, 17204, 17217, 17228, 11417, 17239, 17252, 17271, + 17282, 17293, 17304, 2688, 17317, 17321, 17329, 17340, 17348, 17363, + 17378, 17389, 17396, 17402, 17410, 17414, 17420, 17423, 17436, 17448, + 17458, 17466, 17473, 17481, 17491, 17496, 17503, 17508, 17515, 17526, + 17536, 17542, 17547, 17552, 15662, 17556, 17562, 17568, 17573, 17578, + 17583, 17587, 15667, 15673, 17591, 15679, 17596, 17604, 17609, 17613, + 17621, 17630, 17637, 17641, 9649, 17645, 17647, 17652, 17657, 17663, + 17668, 17673, 17678, 17683, 17687, 17693, 17699, 17704, 17710, 17715, + 17720, 17724, 17730, 17735, 17740, 17745, 17757, 17762, 17768, 17773, + 17778, 17784, 17790, 17795, 17800, 17805, 17812, 17818, 17829, 17836, + 17841, 17845, 17849, 17852, 17860, 17865, 17872, 17879, 17885, 17890, + 17895, 17900, 17907, 17917, 17925, 17930, 17937, 17943, 17952, 17962, + 17972, 17986, 18000, 18014, 18028, 18043, 18058, 18075, 18093, 18106, + 18112, 18117, 18122, 18126, 18134, 18139, 18147, 18153, 18159, 18164, + 18169, 18173, 18178, 18182, 18187, 18191, 18202, 18208, 18213, 18218, + 18225, 18230, 18234, 3690, 18239, 18245, 18252, 15688, 18258, 18262, + 18268, 18273, 18278, 18282, 18288, 18293, 18298, 18305, 18310, 14275, + 18314, 18319, 18323, 18328, 18334, 18340, 18347, 18357, 18365, 18372, + 18377, 18381, 18390, 18398, 18405, 18412, 18418, 18423, 18429, 18434, + 18439, 18445, 18450, 18456, 18461, 18467, 18473, 18480, 18486, 18491, + 18496, 9875, 18505, 18508, 18516, 18522, 18527, 18532, 18542, 18549, + 18555, 18560, 18565, 18571, 18576, 18582, 18587, 18593, 18599, 18604, + 18612, 18619, 18624, 18629, 18635, 18640, 18644, 18653, 18664, 18671, + 18679, 18686, 18691, 18696, 18702, 18707, 18715, 18721, 18727, 18734, + 18740, 18745, 18749, 18755, 18760, 18765, 18769, 18774, 1426, 8117, 2936, + 18778, 18782, 18786, 18790, 18794, 18798, 18801, 18806, 18813, 18821, + 15699, 18828, 18838, 18846, 18853, 18861, 18871, 18880, 9220, 18893, + 18898, 18903, 18911, 18918, 14371, 14380, 18925, 18935, 18950, 18956, + 18963, 18970, 18976, 18982, 18993, 19001, 19009, 19019, 19029, 15704, + 19038, 19044, 19050, 19058, 19066, 19071, 19080, 19088, 19100, 19110, + 19120, 19130, 19139, 19151, 19161, 19171, 19182, 19187, 19199, 19211, + 19223, 19235, 19247, 19259, 19271, 19283, 19295, 19307, 19318, 19330, + 19342, 19354, 19366, 19378, 19390, 19402, 19414, 19426, 19438, 19449, + 19461, 19473, 19485, 19497, 19509, 19521, 19533, 19545, 19557, 19569, + 19580, 19592, 19604, 19616, 19628, 19640, 19652, 19664, 19676, 19688, + 19700, 19711, 19723, 19735, 19747, 19759, 19771, 19783, 19795, 19807, + 19819, 19831, 19842, 19854, 19866, 19878, 19890, 19902, 19914, 19926, + 19938, 19950, 19962, 19973, 19985, 19997, 20009, 20021, 20033, 20045, + 20057, 20069, 20081, 20093, 20104, 20116, 20128, 20140, 20152, 20165, + 20178, 20191, 20204, 20217, 20230, 20243, 20255, 20268, 20281, 20294, + 20307, 20320, 20333, 20346, 20359, 20372, 20385, 20397, 20410, 20423, + 20436, 20449, 20462, 20475, 20488, 20501, 20514, 20527, 20539, 20552, + 20565, 20578, 20591, 20604, 20617, 20630, 20643, 20656, 20669, 20681, + 20694, 20707, 20720, 20733, 20746, 20759, 20772, 20785, 20798, 20811, + 20823, 20836, 20849, 20862, 20875, 20888, 20901, 20914, 20927, 20940, + 20953, 20965, 20976, 20989, 21002, 21015, 21028, 21041, 21054, 21067, + 21080, 21093, 21106, 21118, 21131, 21144, 21157, 21170, 21183, 21196, + 21209, 21222, 21235, 21248, 21260, 21273, 21286, 21299, 21312, 21325, + 21338, 21351, 21364, 21377, 21390, 21402, 21415, 21428, 21441, 21454, + 21467, 21480, 21493, 21506, 21519, 21532, 21544, 21557, 21570, 21583, + 21596, 21609, 21622, 21635, 21648, 21661, 21674, 21686, 21699, 21712, + 21725, 21738, 21751, 21764, 21777, 21790, 21803, 21816, 21828, 21841, + 21854, 21867, 21880, 21893, 21906, 21919, 21932, 21945, 21958, 21970, + 21983, 21996, 22009, 22022, 22035, 22048, 22061, 22074, 22087, 22100, + 22112, 22125, 22138, 22151, 22164, 22177, 22190, 22203, 22216, 22229, + 22242, 22254, 22267, 22280, 22293, 22306, 22319, 22332, 22345, 22358, + 22371, 22384, 22396, 22407, 22416, 22424, 22432, 22439, 22445, 22449, + 22455, 22461, 22469, 22474, 22480, 22485, 22489, 22498, 9654, 22509, + 22516, 22524, 22531, 22538, 11936, 22545, 22552, 22561, 22566, 22571, + 8145, 22578, 22583, 22586, 22591, 22599, 22606, 22613, 22620, 22626, + 22635, 22644, 22653, 22659, 22668, 22672, 22678, 22683, 22693, 22700, + 22706, 22714, 22720, 22727, 22737, 22746, 22750, 22757, 22761, 22766, + 22772, 22780, 22784, 22794, 15714, 22803, 22809, 22813, 22822, 22832, + 15719, 22838, 22845, 22856, 22864, 22874, 22883, 22891, 9410, 22899, + 22904, 22910, 22915, 22919, 22923, 22927, 10379, 22932, 22940, 22947, + 22956, 22963, 22970, 22976, 11856, 22983, 22989, 22993, 22999, 23006, + 23012, 23020, 23026, 23033, 23039, 23045, 23054, 23058, 23066, 23075, + 23082, 23087, 23091, 23102, 23107, 23112, 23117, 23130, 8349, 23134, + 23140, 23145, 23153, 23157, 23164, 23173, 23178, 15990, 23186, 23190, + 23202, 23207, 23211, 23214, 23220, 23226, 23232, 23237, 23241, 23244, + 23255, 23260, 9926, 23267, 23272, 1243, 9931, 23277, 23282, 23287, 23292, + 23297, 23302, 23307, 23312, 23317, 23322, 23327, 23332, 23338, 23343, + 23348, 23353, 23358, 23363, 23368, 23373, 23378, 23383, 23389, 23395, + 23400, 23405, 23410, 23415, 23420, 23425, 23430, 23435, 23440, 23446, + 23451, 23456, 23461, 23467, 23473, 23478, 23483, 23488, 23493, 23498, + 23503, 23508, 23513, 23519, 23524, 23529, 23534, 23539, 23545, 23550, + 23555, 23559, 134, 23567, 23571, 23575, 23579, 23584, 23588, 14281, 2346, + 23592, 23597, 23601, 23606, 23610, 23615, 23619, 23625, 23630, 23634, + 23638, 23646, 23650, 23654, 23659, 23664, 23668, 23674, 23679, 23683, + 23688, 23693, 23697, 23704, 23711, 23718, 23722, 23726, 23731, 23735, + 23738, 23744, 23757, 23762, 23768, 23777, 23782, 10151, 23787, 23796, + 23801, 23804, 2751, 2756, 23808, 23814, 23820, 7538, 23825, 23830, 23835, + 23841, 23846, 15134, 23851, 23856, 23861, 23866, 23872, 23877, 23882, + 23888, 23893, 23897, 23902, 23907, 23912, 23917, 23922, 23926, 23931, + 23935, 23940, 23945, 23950, 23955, 23959, 23964, 23968, 23973, 23978, + 23983, 23898, 2945, 23903, 23988, 23996, 24003, 10473, 24015, 24023, + 24033, 24051, 24070, 24079, 24087, 23908, 24094, 24099, 24107, 23913, + 24112, 24117, 24125, 24130, 23918, 24135, 24143, 24148, 24152, 24159, + 24165, 24174, 24182, 24186, 24189, 24196, 24200, 24204, 24209, 24215, + 24222, 24227, 9437, 1742, 1747, 24231, 24237, 24243, 24248, 24252, 24256, + 24260, 24264, 24268, 24272, 24276, 24280, 24283, 24289, 24296, 24304, + 24310, 24316, 24321, 24326, 24332, 24336, 24341, 15040, 15047, 24348, + 24360, 24363, 24370, 24374, 17881, 24381, 24389, 24400, 24409, 24422, + 24432, 24446, 24458, 24472, 24485, 24497, 24507, 24519, 24525, 24540, + 24564, 24582, 24601, 24614, 24628, 24646, 24662, 24679, 24697, 24708, + 24727, 24744, 24764, 24782, 24794, 24808, 24822, 24834, 24851, 24870, + 24888, 24900, 24918, 24937, 15858, 24950, 24970, 24982, 11448, 24994, + 24999, 25004, 25009, 25015, 25020, 25024, 25031, 25037, 2437, 25041, + 25047, 25051, 25054, 25058, 25061, 25069, 25075, 23936, 25079, 25088, + 25099, 25105, 25111, 25126, 25135, 25143, 25150, 25155, 25159, 25166, + 25172, 25181, 25189, 25196, 25206, 25215, 25225, 25230, 25239, 25248, + 25259, 25270, 4192, 25280, 25284, 25294, 25302, 25312, 25323, 25328, + 25338, 25346, 25353, 25359, 25366, 25371, 23946, 25375, 25384, 25388, + 25391, 25396, 25404, 25411, 25420, 25428, 25436, 25444, 25454, 25463, + 25469, 25475, 25479, 23951, 23956, 25483, 25493, 25503, 25513, 25521, + 25528, 25538, 25546, 25554, 25560, 25568, 865, 25577, 16065, 615, 25591, + 25600, 25608, 25619, 25630, 25640, 25649, 25661, 25670, 25679, 25686, + 25692, 25702, 25711, 25720, 25728, 25738, 25746, 25754, 9892, 25760, + 25763, 25767, 25772, 25777, 25781, 10588, 23969, 23974, 25789, 25795, + 25801, 25806, 25811, 25815, 25823, 25829, 25835, 25839, 3675, 25847, + 25852, 25857, 25861, 25865, 10701, 25872, 25880, 25894, 25901, 25907, + 10710, 10716, 25915, 25923, 25930, 25935, 25940, 23979, 25946, 25957, + 25961, 25966, 2640, 25971, 25982, 25988, 25993, 25997, 26001, 26004, + 26011, 26018, 26024, 26031, 26037, 26041, 23984, 26046, 26050, 26054, + 1431, 8544, 26059, 26064, 26069, 26074, 26079, 26084, 26089, 26094, + 26099, 26104, 26109, 26114, 26119, 26124, 26130, 26135, 26140, 26145, + 26150, 26155, 26160, 26166, 26171, 26176, 26181, 26186, 26191, 26196, + 26201, 26207, 26213, 26218, 26224, 26229, 26234, 5, 26240, 26244, 26248, + 26252, 26257, 26261, 26265, 26269, 26273, 26278, 26282, 26287, 26291, + 26294, 26298, 26303, 26307, 26312, 26316, 26320, 26324, 26329, 26333, + 26337, 26347, 26352, 26356, 26360, 26365, 26370, 26379, 26384, 26389, + 26393, 26397, 26410, 26422, 26431, 26440, 26445, 26451, 26456, 26460, + 26464, 26474, 26483, 26491, 26497, 26502, 26506, 26513, 26523, 26532, + 26540, 11770, 26548, 26556, 26565, 26574, 26582, 26592, 26597, 26601, + 26605, 26608, 26610, 26614, 26618, 26623, 26628, 26632, 26636, 26639, + 26643, 26646, 26650, 26653, 26656, 26660, 26666, 26670, 26674, 26678, + 26683, 26688, 26693, 26697, 26700, 26705, 26711, 26716, 26722, 26727, + 26731, 26737, 26741, 26745, 26750, 26754, 26759, 26764, 26768, 26772, + 26779, 26783, 26786, 26790, 26794, 26800, 26806, 26810, 26814, 26819, + 26826, 26832, 26836, 26845, 26849, 26853, 26856, 26862, 26867, 26873, + 1475, 1806, 26878, 26883, 26888, 26893, 26898, 26903, 26908, 2174, 2220, + 26913, 26916, 26920, 26924, 26929, 26933, 16077, 26937, 26942, 26947, + 26951, 26954, 26959, 26963, 26968, 26972, 16081, 26977, 26980, 26983, + 26987, 26992, 26996, 27009, 27013, 27016, 27024, 27033, 27040, 27045, + 27051, 27057, 27065, 27072, 27079, 27083, 27087, 27091, 27096, 27101, + 27105, 27113, 27118, 27130, 27141, 27146, 27150, 27157, 27161, 27166, + 27172, 27175, 27180, 27185, 27189, 27193, 27196, 27202, 8248, 2350, + 27206, 27211, 27227, 10198, 27247, 27256, 27272, 27276, 27283, 27286, + 27292, 27302, 27308, 27317, 27332, 27344, 27355, 27363, 27372, 27378, + 27387, 27397, 27407, 27418, 27429, 27439, 27448, 27455, 27464, 27472, + 27479, 27487, 27494, 27501, 27514, 27521, 27529, 27536, 27542, 27547, + 27556, 27562, 27567, 27575, 27582, 27589, 25304, 27601, 27613, 27627, + 27635, 27642, 27654, 27663, 27672, 27680, 27688, 27696, 27703, 27709, + 27718, 27726, 27736, 27745, 27755, 27764, 27773, 27781, 27786, 27790, + 27793, 27797, 27801, 27805, 27809, 27813, 27819, 27825, 27833, 16139, + 27840, 27845, 27852, 27858, 27865, 16147, 27872, 27875, 27887, 27895, + 27901, 27906, 27910, 27921, 10651, 27931, 27939, 27949, 27958, 27965, + 27972, 27980, 27984, 16158, 27987, 27994, 27998, 28004, 28007, 28014, + 28020, 28027, 28033, 28037, 28042, 28046, 28055, 28062, 28068, 8306, + 28075, 28083, 28090, 28096, 28101, 28107, 28113, 28121, 28127, 28131, + 28134, 28136, 27798, 28145, 28151, 28157, 28167, 28172, 28179, 28185, + 28190, 28195, 28200, 28204, 28209, 28216, 28222, 28231, 28235, 28242, + 28248, 28257, 4378, 28263, 28269, 28274, 28281, 28292, 28297, 28301, + 28311, 28317, 28321, 28326, 28336, 28345, 28349, 28356, 28364, 28371, + 28377, 28382, 28390, 28397, 28402, 28409, 28421, 28430, 28434, 14212, + 28442, 28452, 28456, 27020, 28467, 28472, 28476, 28483, 28490, 23670, + 27723, 28495, 28499, 28502, 24714, 28507, 28521, 28537, 28555, 28574, + 28591, 28609, 24733, 28626, 28646, 24750, 28658, 28670, 17178, 28682, + 24770, 28696, 28708, 11461, 28722, 28727, 28732, 28737, 28743, 28749, + 28755, 28759, 28767, 28774, 28779, 28789, 28795, 11059, 28801, 28803, + 28808, 28816, 28820, 28212, 28826, 28833, 12601, 12611, 28840, 28850, + 28855, 28859, 28862, 28868, 28876, 28888, 28898, 28914, 28927, 28941, + 17196, 28955, 28962, 28966, 28969, 28974, 28978, 28985, 28992, 28999, + 29009, 29014, 29019, 29024, 29032, 29040, 29045, 29054, 29059, 3353, + 29063, 29066, 29069, 29074, 29081, 29086, 29102, 29110, 29118, 9966, + 29126, 29131, 29135, 29141, 29146, 29152, 29155, 29161, 29173, 29181, + 29188, 29194, 29201, 29212, 29226, 29239, 29245, 29254, 29260, 29269, + 29281, 29292, 29302, 29311, 29320, 29328, 29339, 8288, 29346, 29353, + 29359, 29364, 29370, 29377, 29387, 29397, 29406, 29412, 29419, 29424, + 29432, 29439, 29447, 29455, 29467, 6563, 995, 29474, 29483, 29491, 29497, + 29503, 29508, 29512, 29515, 29521, 29528, 29533, 29538, 29543, 29547, + 29559, 29570, 29579, 29587, 16323, 29592, 29597, 29603, 29609, 12594, + 9058, 29614, 29618, 29622, 29625, 29628, 29634, 29642, 29650, 29654, + 29658, 29663, 29666, 29675, 29679, 29682, 29690, 29701, 29705, 29711, + 29717, 29721, 29727, 29735, 29757, 29781, 29790, 29797, 29804, 29810, + 29818, 29824, 29829, 29840, 29858, 29865, 29873, 29877, 29882, 29891, + 29904, 29912, 29924, 29935, 29946, 29956, 29970, 29979, 29987, 29999, + 10215, 30010, 30021, 30033, 30043, 30052, 30057, 30061, 30069, 30080, + 30090, 30095, 30099, 30102, 30105, 30113, 30121, 30130, 30140, 30149, + 30155, 30169, 2702, 30191, 30202, 30211, 30221, 30233, 30242, 30251, + 30261, 30269, 30277, 30286, 30291, 30302, 30307, 30318, 30322, 30332, + 30341, 30349, 30359, 30369, 30377, 30386, 30393, 30401, 30408, 30417, + 30426, 30430, 30438, 30445, 30453, 30460, 30471, 30486, 30493, 30499, + 30509, 30518, 30524, 30535, 30539, 30546, 30550, 30556, 15265, 30562, + 30566, 30571, 30577, 30584, 30588, 30592, 30600, 30608, 30614, 30623, + 30630, 30635, 30640, 30650, 25373, 30654, 30657, 30662, 30667, 30672, + 30677, 30682, 30687, 30692, 30697, 30703, 30708, 30713, 30719, 1199, 660, + 30724, 30733, 2398, 30740, 30745, 30749, 30755, 1248, 578, 290, 30760, + 30769, 30777, 30786, 30794, 30805, 30813, 30822, 30830, 30835, 10797, + 30839, 30847, 30855, 30860, 16094, 3824, 30866, 30872, 30878, 6148, + 30883, 30887, 30893, 30897, 30903, 30908, 30915, 1441, 30921, 30928, + 1348, 6156, 30932, 30942, 30950, 30956, 30966, 30975, 30983, 30989, + 30997, 31004, 12136, 31010, 31017, 31022, 31029, 1494, 219, 2173, 31035, + 31041, 31048, 31059, 31070, 31078, 31085, 31095, 31104, 31112, 31121, + 31128, 31135, 31148, 31155, 31161, 31172, 31191, 1253, 31196, 31201, + 31209, 3742, 31213, 31218, 31222, 31226, 1445, 26637, 31236, 31240, + 31245, 31249, 3619, 31255, 31263, 31270, 31281, 31289, 31297, 3743, 346, + 31302, 31310, 31318, 31325, 31331, 31336, 2242, 11628, 31343, 31349, + 28038, 28287, 31355, 574, 106, 31359, 31363, 31369, 663, 9841, 31374, + 31381, 31387, 31391, 1639, 31394, 31398, 16576, 31401, 31406, 31413, + 31419, 31424, 31432, 31439, 31445, 24132, 31449, 31453, 31457, 3813, + 18180, 31461, 31466, 31470, 31473, 31481, 31489, 31494, 31502, 31505, + 31512, 31522, 31534, 31539, 31543, 31551, 31558, 31564, 31571, 31578, + 31581, 31585, 31589, 1449, 31599, 31601, 31606, 31612, 31618, 31623, + 31628, 31633, 31638, 31643, 31648, 31653, 31658, 31663, 31668, 31673, + 31678, 31683, 31688, 31694, 31700, 31706, 31712, 31717, 31722, 31727, + 31733, 31738, 31743, 31748, 31754, 31759, 31765, 31770, 31775, 31780, + 31785, 31791, 31796, 31802, 31807, 31812, 31817, 31822, 31828, 31833, + 31839, 31844, 31849, 31854, 31859, 31864, 31869, 31874, 31879, 31884, + 31890, 31896, 31902, 31907, 31912, 31917, 31922, 31928, 31934, 31940, + 31946, 31952, 31958, 31963, 31969, 31974, 31979, 31984, 31989, 31995, + 2482, 32000, 2489, 2496, 2793, 32005, 2502, 2512, 32011, 32015, 32020, + 32025, 32031, 32036, 32041, 32045, 32050, 32056, 32061, 32066, 32071, + 32077, 32082, 32086, 32090, 32095, 32100, 32105, 32110, 32115, 32121, + 32127, 32132, 32136, 32141, 32147, 32151, 32156, 32161, 32166, 32171, + 32175, 32178, 32183, 32188, 32193, 32198, 32203, 32209, 32215, 32220, + 32225, 32230, 32234, 32239, 32244, 32249, 32254, 32259, 32264, 32268, + 32273, 32278, 32283, 32287, 32291, 32295, 32300, 32308, 32313, 32318, + 32324, 32330, 32336, 32341, 32345, 32348, 32353, 32358, 32362, 32367, + 32372, 32376, 32381, 32385, 32388, 32393, 3914, 18906, 32398, 32403, + 32408, 32416, 22959, 30925, 9518, 32421, 32426, 32430, 32435, 32439, + 32443, 32448, 32452, 32455, 32458, 32462, 32467, 32471, 32479, 32483, + 32486, 32491, 32495, 32499, 32504, 32509, 32513, 32519, 32524, 32529, + 32536, 32543, 32547, 32550, 32556, 32565, 32572, 32580, 32587, 32591, + 32596, 32600, 32604, 32610, 32616, 32620, 32626, 32631, 32636, 32640, + 32647, 32653, 32659, 32665, 32671, 32678, 32684, 32690, 32696, 32702, + 32708, 32714, 32720, 32727, 32733, 32740, 32746, 32752, 32758, 32764, + 32770, 32776, 32782, 32788, 32794, 12479, 32800, 32806, 32811, 32816, + 32821, 32824, 32830, 32838, 32843, 32847, 32852, 32858, 32867, 32873, + 32878, 32883, 32888, 32892, 32897, 32902, 32907, 32912, 32917, 32924, + 32931, 32937, 32943, 32948, 17822, 32955, 32961, 32968, 32974, 32980, + 32985, 32993, 32998, 10372, 33002, 33007, 33012, 33018, 33023, 33028, + 33032, 33037, 33042, 33048, 33053, 33058, 33063, 33067, 33072, 33077, + 33081, 33086, 33091, 33095, 33100, 33104, 33109, 33114, 33119, 33123, + 33128, 33132, 33136, 16682, 33141, 33150, 33156, 33162, 33171, 33179, + 33188, 33196, 33201, 33205, 33212, 33218, 33226, 33230, 33233, 33238, + 33242, 33251, 33259, 33277, 33283, 1493, 33289, 33292, 33296, 24238, + 24244, 33302, 33306, 33317, 33328, 33339, 33351, 33355, 33362, 33369, + 33374, 33378, 6204, 928, 22958, 33386, 33391, 33395, 33400, 33404, 33410, + 33415, 33421, 33426, 33432, 33437, 33443, 33448, 33454, 33460, 33466, + 33471, 33427, 33433, 33475, 33480, 33486, 33491, 33497, 33502, 33508, + 33513, 33438, 11314, 33517, 33449, 33455, 33461, 2885, 3533, 33523, + 33526, 33531, 33537, 33543, 33549, 33556, 33562, 33568, 33574, 33580, + 33586, 33592, 33598, 33604, 33610, 33616, 33622, 33628, 33635, 33641, + 33647, 33653, 33659, 33665, 33668, 33673, 33676, 33683, 33688, 33696, + 33701, 33706, 33712, 33717, 33722, 33726, 33731, 33737, 33742, 33748, + 33753, 33759, 33764, 33770, 33776, 33780, 33785, 33790, 33795, 33800, + 33804, 33809, 33814, 33819, 33825, 33831, 33837, 33843, 33848, 33852, + 33855, 33861, 33867, 33876, 33884, 33891, 33896, 33900, 33904, 33909, + 16530, 33914, 33922, 33928, 3866, 1358, 33933, 33937, 8359, 33943, 33949, + 33956, 8368, 33960, 33966, 33973, 33979, 33988, 33996, 9244, 34008, + 34012, 34019, 34025, 34030, 34034, 34038, 34041, 34051, 34060, 34068, + 33428, 34073, 34083, 34093, 34103, 34109, 34114, 34124, 34129, 34142, + 34156, 34167, 34179, 34191, 34205, 34218, 34230, 34242, 15899, 34256, + 34261, 34266, 34270, 34274, 34278, 1795, 29290, 34282, 34287, 33476, + 34292, 34295, 34300, 34305, 34310, 34316, 34322, 10974, 34327, 34333, + 34340, 17130, 34346, 34351, 34356, 34360, 34365, 34370, 33481, 34375, + 34380, 34385, 34391, 33487, 34396, 34399, 34406, 34414, 34420, 34426, + 34432, 34443, 34448, 34455, 34462, 34469, 34477, 34486, 34495, 34501, + 34507, 34515, 33492, 34520, 34526, 34532, 33498, 34537, 34542, 34550, + 34558, 34564, 34571, 34577, 34584, 34591, 34597, 34605, 34615, 34622, + 34628, 34633, 34639, 34644, 34649, 34656, 34665, 34673, 34678, 34684, + 34691, 34699, 34705, 34710, 34716, 34725, 34732, 30135, 34738, 34742, + 34747, 34756, 34761, 34766, 34771, 13548, 34779, 34784, 34789, 34794, + 34798, 34803, 34808, 34815, 34820, 34825, 34830, 33503, 22895, 34836, + 2558, 144, 34839, 34842, 34846, 34850, 34860, 34868, 34875, 34879, 34882, + 34890, 34897, 34904, 34913, 34917, 34920, 34926, 34930, 34938, 34946, + 34950, 34954, 34957, 34963, 34970, 34974, 34978, 34985, 34993, 33439, + 35000, 35008, 35013, 11034, 623, 369, 35025, 35030, 35035, 35041, 35046, + 35051, 3887, 35056, 35059, 35064, 35069, 35074, 35079, 35084, 35091, + 24356, 35096, 35101, 35106, 35111, 35116, 35122, 35127, 35133, 33679, + 35139, 35144, 35150, 35156, 35166, 35171, 35176, 35180, 35185, 35190, + 35195, 35200, 35213, 35218, 24019, 18255, 3900, 35222, 35228, 35233, + 35238, 35244, 35249, 35254, 35258, 35263, 35268, 35274, 35279, 35284, + 1363, 35288, 35293, 35298, 35303, 35307, 35312, 35317, 35322, 35328, + 35334, 35339, 35343, 35347, 35352, 35357, 35362, 35366, 35374, 35378, + 35384, 35388, 35395, 18039, 33450, 35401, 35408, 35416, 35423, 35429, + 35442, 35454, 35459, 35465, 35469, 2812, 35473, 35477, 34965, 35486, + 35497, 35502, 30198, 35507, 35512, 35516, 35521, 24249, 35525, 35529, + 35534, 33456, 22985, 35538, 35543, 35549, 35554, 35558, 35562, 35565, + 35569, 35575, 35584, 35595, 35607, 33462, 35612, 35615, 35619, 35623, + 406, 35628, 35633, 35638, 35643, 35648, 35653, 35659, 35664, 35669, + 35675, 35680, 35686, 35691, 35697, 35702, 35707, 35712, 35717, 35722, + 35727, 35732, 35737, 35743, 35748, 35753, 35758, 35763, 35768, 35773, + 35778, 35784, 35790, 35795, 35800, 35805, 35810, 35815, 35820, 35825, + 35830, 35835, 35840, 35845, 35850, 35855, 35860, 35865, 35870, 35875, + 35880, 35886, 325, 9, 35891, 35895, 35899, 35907, 35911, 35915, 35918, + 35921, 35923, 35928, 35932, 35937, 35941, 35946, 35950, 35955, 35959, + 35962, 35964, 35968, 35973, 35977, 35988, 35991, 35993, 35997, 36009, + 36018, 36022, 36026, 36032, 36037, 36046, 36052, 36057, 36062, 36066, + 36070, 36075, 36082, 36087, 36093, 36098, 36102, 36109, 27731, 27741, + 36113, 36118, 36123, 36128, 36135, 36139, 36146, 36152, 8491, 36156, + 36165, 36173, 36188, 36202, 36211, 36219, 36230, 36239, 36244, 36251, + 7556, 36261, 36266, 36271, 36275, 36278, 36283, 36287, 36292, 36296, + 36303, 36308, 36313, 36318, 9391, 36328, 36330, 36333, 36336, 36340, + 36346, 36350, 36355, 36360, 36378, 36392, 36411, 36428, 36437, 36445, + 36450, 36455, 1486, 36461, 36467, 36472, 36482, 36491, 36499, 36504, + 36510, 36515, 36524, 36535, 36540, 36547, 36551, 36558, 36566, 36573, + 36586, 36594, 36598, 36608, 36613, 36617, 36625, 36633, 36638, 36642, + 36646, 36655, 36661, 36666, 36674, 36684, 36693, 36702, 36711, 36722, + 36730, 36741, 36750, 36757, 36763, 36768, 36779, 36790, 36795, 36799, + 36802, 36806, 36814, 36820, 36831, 36842, 36853, 36864, 36875, 36886, + 36897, 36908, 36920, 36932, 36944, 36956, 36968, 36980, 36992, 36996, + 37004, 37010, 37017, 37023, 37028, 37034, 2457, 37038, 37040, 37045, + 37050, 37055, 37058, 37060, 37064, 37067, 37074, 37078, 10664, 37082, + 37088, 37098, 37103, 37109, 37113, 37118, 37131, 28162, 37137, 37146, + 37155, 19104, 37162, 37171, 34089, 37179, 37184, 37188, 37197, 37205, + 37212, 37217, 37221, 37226, 37234, 37238, 37246, 37252, 37258, 37263, + 37267, 37270, 37275, 37288, 37304, 24840, 37321, 37333, 37350, 37362, + 37376, 24857, 24876, 37388, 37400, 2719, 37414, 37419, 37424, 37429, + 37433, 37440, 37452, 37459, 37468, 37471, 37482, 37493, 37498, 34512, + 852, 37502, 37506, 37510, 37513, 37518, 37523, 37529, 37534, 37539, + 37545, 37551, 37556, 37560, 37565, 37570, 37575, 37579, 37582, 37588, + 37593, 37598, 37603, 37607, 37612, 37618, 37626, 28414, 37631, 37636, + 37643, 37649, 37655, 37660, 37668, 24365, 37675, 37680, 37685, 37690, + 37694, 37697, 37702, 37706, 37710, 37717, 37723, 37729, 37735, 37742, + 37747, 37753, 36628, 37757, 37761, 37766, 37779, 37784, 37790, 37798, + 37805, 37813, 37823, 37829, 37835, 37841, 37845, 37854, 37862, 37869, + 37874, 37879, 11337, 37884, 37891, 37897, 37907, 37912, 37918, 37926, + 3775, 37933, 37940, 37946, 37953, 3781, 37957, 37962, 37973, 37980, + 37986, 37995, 37999, 4244, 38002, 38009, 38015, 38021, 38029, 38039, + 31326, 38046, 38054, 38060, 38065, 38071, 38076, 38080, 28010, 38086, + 38093, 38099, 38108, 38115, 25565, 38121, 38126, 38130, 38138, 38146, + 10330, 6179, 38153, 38157, 38159, 38163, 38168, 38170, 38175, 38181, + 38186, 38191, 38198, 35087, 38204, 38209, 38213, 38218, 38222, 38231, + 38235, 38241, 38248, 38254, 38261, 38266, 38275, 38280, 38284, 38289, + 38296, 38304, 38312, 38317, 23041, 38321, 38324, 38328, 38332, 11725, + 872, 38336, 38341, 38349, 38353, 38362, 38369, 38373, 38377, 38385, + 38392, 38402, 38406, 38410, 38418, 38426, 38432, 38437, 38446, 14530, + 38452, 38461, 38466, 38473, 38480, 38488, 38496, 38504, 38509, 38516, + 38523, 38530, 38537, 38544, 38549, 38555, 38572, 38580, 38590, 38598, + 38605, 414, 38609, 38615, 38619, 38624, 36235, 38630, 38633, 38637, + 38648, 38656, 3786, 38664, 38670, 38676, 38686, 38695, 38705, 38712, + 38718, 38723, 3792, 3798, 38732, 38739, 38747, 38752, 38756, 38763, + 38771, 38778, 38784, 38793, 38803, 38809, 38817, 38826, 38833, 38841, + 38848, 23728, 38852, 38859, 38865, 38875, 38884, 38892, 38903, 38907, + 38917, 38923, 38930, 38938, 38947, 38956, 38966, 38977, 38984, 38989, + 38996, 3088, 39004, 39010, 39015, 39021, 39027, 39032, 39045, 39058, + 39071, 39078, 39084, 39092, 39100, 39105, 39109, 1455, 39113, 39117, + 39121, 39125, 39129, 39133, 39137, 39141, 39145, 39149, 39153, 39157, + 39161, 39165, 39169, 39173, 39177, 39181, 39185, 39189, 39193, 39197, + 39201, 39205, 39209, 39213, 39217, 39221, 39225, 39229, 39233, 39237, + 39241, 39245, 39249, 39253, 39257, 39261, 39265, 39269, 39273, 39277, + 39281, 39285, 39289, 39293, 39297, 39301, 39305, 39309, 39313, 39317, + 39321, 39325, 39329, 39333, 39337, 39341, 39345, 39349, 39353, 39357, + 39361, 39365, 39369, 39373, 39377, 39381, 39385, 39389, 39393, 39397, + 39401, 39405, 39409, 39413, 39417, 39421, 39425, 39429, 39433, 39437, + 39441, 39445, 39449, 39453, 39457, 39461, 39465, 39469, 39473, 39477, + 39481, 39485, 39489, 39493, 39497, 39501, 39505, 39509, 39513, 39517, + 39521, 39525, 39529, 39533, 39537, 39541, 39545, 39549, 39553, 39557, + 39561, 39565, 39569, 39573, 39577, 39581, 39585, 39589, 39593, 39597, + 39601, 39605, 39609, 39613, 39617, 39621, 39625, 39629, 39633, 39637, + 39641, 39645, 39649, 39653, 39657, 39661, 39665, 39669, 39673, 39677, + 39681, 39685, 39689, 39693, 39697, 39701, 39705, 39709, 39713, 39717, + 39721, 39725, 39730, 39734, 39739, 39743, 39748, 39752, 39757, 39761, + 39767, 39772, 39776, 39781, 39785, 39790, 39794, 39799, 39803, 39808, + 39812, 39817, 39821, 39826, 39830, 39836, 39842, 39847, 39851, 39856, + 39860, 39866, 39871, 39875, 39880, 39884, 39889, 39893, 39899, 39904, + 39908, 39913, 39917, 39922, 39926, 39931, 39935, 39941, 39946, 39950, + 39955, 39959, 39965, 39970, 39974, 39979, 39983, 39988, 39992, 39997, + 40001, 40006, 40010, 40016, 40021, 40025, 40031, 40036, 40040, 40046, + 40051, 40055, 40060, 40064, 40069, 40073, 40079, 40085, 40091, 40097, + 40103, 40109, 40115, 40121, 40126, 40130, 40135, 40139, 40145, 40150, + 40154, 40159, 40163, 40168, 40172, 40177, 40181, 40186, 40190, 40195, + 40199, 40204, 40208, 40214, 40219, 40223, 40228, 40232, 40238, 40244, + 40249, 116, 57, 40253, 40255, 40259, 40263, 40267, 40272, 40276, 40280, + 10251, 40285, 40291, 1756, 6597, 40297, 40300, 40305, 40309, 40314, + 40318, 40322, 40327, 11121, 40331, 40335, 40339, 525, 40343, 16783, + 40348, 40352, 40357, 40362, 40367, 40371, 40378, 28186, 40384, 40387, + 40391, 40396, 40402, 40406, 40409, 40417, 40423, 40428, 40432, 40435, + 40439, 40445, 40449, 40453, 3584, 3589, 31537, 40456, 40460, 40464, + 40468, 40472, 40480, 40487, 40491, 14480, 40498, 40503, 40517, 40524, + 40535, 335, 40540, 40544, 40550, 40562, 40568, 40574, 31574, 40578, + 40584, 40593, 40597, 40601, 40606, 40612, 40617, 40621, 40626, 40630, + 40634, 40641, 40647, 40652, 40667, 40682, 40697, 40713, 40731, 11071, + 40745, 40752, 40756, 40759, 40768, 40773, 40777, 40785, 17333, 40793, + 40797, 40807, 40818, 31507, 40831, 40835, 40844, 40862, 40881, 40889, + 10525, 11234, 40893, 24261, 40896, 32475, 40901, 10524, 40906, 40912, + 40917, 40923, 40928, 40934, 40939, 40945, 40950, 40956, 40962, 40968, + 40973, 40929, 40935, 40940, 40946, 40951, 40957, 40963, 8504, 4089, + 40977, 40985, 40989, 40992, 40996, 41001, 41006, 41013, 41019, 41025, + 41030, 16174, 41034, 28022, 41038, 41042, 41046, 41052, 41056, 30075, + 41065, 9544, 41069, 9937, 41072, 41079, 41085, 41089, 13004, 41096, + 41102, 41107, 41114, 41121, 41128, 30781, 8410, 41135, 41142, 41149, + 41155, 41160, 41167, 41178, 41184, 41189, 41194, 41199, 41203, 41208, + 41215, 40930, 41219, 41229, 41238, 41249, 41255, 41263, 41270, 41275, + 41280, 41285, 41290, 41295, 41299, 41303, 41310, 41316, 41324, 2353, + 1050, 11137, 11149, 11154, 11160, 41333, 11165, 11170, 11176, 41338, + 41348, 41352, 11181, 41357, 18453, 41360, 41365, 41369, 37463, 41380, + 41385, 41392, 41399, 41403, 41406, 41414, 11084, 41421, 41424, 41430, + 41440, 6231, 41449, 41455, 41459, 41467, 41471, 41481, 41487, 41492, + 41503, 41512, 41521, 41530, 41539, 41548, 41557, 41566, 41572, 41578, + 41583, 41589, 41595, 41601, 41606, 41609, 41616, 41622, 41626, 41631, + 41638, 41645, 41649, 41652, 41662, 41675, 41684, 41693, 41704, 41717, + 41729, 41740, 41749, 41760, 41765, 41774, 41779, 11186, 41785, 41792, + 41800, 41805, 41809, 41816, 41823, 4041, 20, 41827, 41832, 18302, 41836, + 41839, 41842, 30255, 41846, 30790, 41854, 41858, 41862, 41865, 41871, + 41877, 33527, 41882, 41890, 41896, 41903, 30238, 41907, 30441, 41911, + 41920, 41924, 41932, 41938, 41944, 41949, 41953, 30809, 41959, 41962, + 41970, 41978, 4379, 41984, 41988, 41993, 42000, 42006, 42011, 42016, + 42020, 42026, 42031, 42037, 4297, 944, 42044, 42048, 42051, 16664, 42063, + 42071, 42079, 42087, 42095, 42102, 42110, 42118, 42125, 42133, 42141, + 42149, 42157, 42165, 42173, 42181, 42189, 42197, 42205, 42213, 42220, + 42228, 42236, 42244, 42252, 42260, 42268, 42276, 42284, 42292, 42300, + 42308, 42316, 42324, 42332, 42340, 42348, 42356, 42364, 42372, 42379, + 42387, 42394, 42402, 42410, 42418, 42426, 42434, 42442, 42450, 42458, + 42469, 23764, 42474, 42477, 42484, 42488, 42494, 42498, 42504, 42509, + 42515, 42520, 42525, 42529, 42533, 42538, 42543, 42553, 42559, 42572, + 42578, 42584, 42590, 42597, 42602, 42608, 42613, 18198, 1458, 831, 42618, + 42621, 42624, 42627, 33611, 33617, 42630, 33623, 33636, 33642, 33648, + 42636, 33654, 33660, 42642, 42648, 26, 42656, 42663, 42667, 42671, 42679, + 34401, 42683, 42687, 42694, 42699, 42703, 42708, 42714, 42719, 42725, + 42730, 42734, 42738, 42742, 42747, 42751, 42756, 42760, 42764, 42771, + 42776, 42780, 42784, 42789, 42793, 42798, 42802, 42806, 42811, 42817, + 16924, 16929, 42822, 42826, 42829, 42833, 42837, 22852, 42842, 42846, + 42852, 42859, 42865, 42870, 42880, 42885, 42893, 42897, 42900, 34416, + 42904, 4356, 42909, 42914, 42918, 42923, 42927, 42932, 14548, 42943, + 42947, 42950, 42954, 42959, 42963, 42968, 42973, 42977, 42981, 42985, + 42988, 42992, 8523, 14564, 42995, 42998, 43004, 43009, 43015, 43020, + 43026, 43031, 43037, 43042, 43048, 43054, 43060, 43065, 43069, 43073, + 43082, 43098, 43114, 43124, 30145, 43131, 43135, 43140, 43145, 43149, + 43153, 38951, 43159, 43164, 43168, 43175, 43180, 43185, 43189, 43193, + 43199, 29093, 43203, 23136, 43208, 43215, 43223, 43229, 43236, 43244, + 43250, 43254, 43259, 43265, 43273, 43278, 43282, 43291, 10232, 43299, + 43303, 43311, 43318, 43323, 43328, 43333, 43337, 43340, 43344, 43347, + 43351, 43358, 43363, 43367, 43373, 28492, 33674, 43377, 43386, 43394, + 43400, 43407, 43413, 43419, 43424, 43427, 43429, 43436, 43443, 43449, + 43453, 43456, 43460, 43464, 43468, 43473, 43477, 43481, 43484, 43488, + 43502, 24906, 43521, 43534, 43547, 43560, 24924, 43575, 11422, 43590, + 43596, 43600, 43604, 43608, 43612, 43619, 43624, 43628, 43635, 43641, + 43646, 43652, 43662, 43674, 43685, 43690, 43697, 43701, 43705, 43708, + 17343, 3855, 43716, 16951, 43729, 43736, 43743, 43747, 43751, 43756, + 43762, 43767, 43773, 43777, 43781, 43784, 43789, 43793, 43798, 8082, + 16962, 43803, 43807, 43813, 43822, 43827, 43836, 43843, 38799, 43849, + 43854, 43858, 43863, 43870, 43876, 43880, 43883, 43887, 43892, 15864, + 43899, 43906, 43910, 43913, 43918, 43923, 43929, 43934, 43939, 43943, + 43948, 43958, 43963, 43969, 43974, 43980, 43985, 43991, 44001, 44006, + 44011, 44015, 44020, 7558, 7570, 44025, 44028, 44035, 44041, 44050, 9477, + 36760, 44058, 44062, 44066, 34464, 44074, 44085, 44093, 38999, 44100, + 44105, 44110, 44121, 44128, 44139, 34488, 23147, 44147, 907, 44152, + 14913, 44158, 30229, 44164, 44169, 44179, 44188, 44195, 44201, 44205, + 44208, 44215, 44221, 44228, 44234, 44244, 44252, 44258, 44264, 44269, + 44273, 44280, 44285, 44291, 44298, 44304, 43469, 44309, 44313, 558, + 15029, 44319, 44324, 44327, 44333, 44341, 1380, 44346, 44350, 44355, + 44360, 44365, 44372, 44376, 44381, 44387, 44391, 33684, 44396, 44401, + 44410, 44417, 44427, 44433, 30273, 44450, 44459, 44467, 44473, 44478, + 44485, 44491, 44499, 44508, 44516, 44520, 44525, 44533, 31251, 34497, + 44539, 44558, 17257, 44572, 44588, 44602, 44608, 44613, 44618, 44623, + 44629, 34503, 44634, 44637, 44644, 44649, 44653, 404, 2995, 44660, 44665, + 44670, 29451, 44488, 44674, 44679, 44687, 44691, 44694, 44699, 44705, + 44711, 44716, 44720, 30328, 44723, 44728, 44732, 44735, 44740, 44744, + 44749, 44754, 44758, 44763, 44767, 44771, 44775, 22848, 22859, 44780, + 44785, 44791, 44796, 44802, 29050, 44807, 44811, 22945, 17549, 44814, + 44819, 44824, 44829, 44834, 44839, 44844, 44849, 474, 68, 33697, 33702, + 33707, 33713, 33718, 33723, 44854, 33727, 44858, 44862, 44866, 33732, + 33738, 44880, 33749, 33754, 44888, 44893, 33760, 44898, 44903, 44908, + 44913, 44919, 44925, 44931, 33777, 44944, 44953, 44959, 33781, 44963, + 33786, 44968, 33791, 33796, 44971, 44976, 44980, 44986, 33332, 44993, + 14794, 45000, 45005, 33801, 45009, 45014, 45019, 45024, 45028, 45033, + 45038, 45044, 45049, 45054, 45060, 45066, 45071, 45075, 45080, 45085, + 45090, 45094, 45099, 45104, 45109, 45115, 45121, 45127, 45132, 45136, + 45141, 45145, 33805, 33810, 33815, 45149, 45153, 45157, 33820, 33826, + 33832, 33844, 45169, 28059, 45173, 45178, 45182, 45187, 45194, 45199, + 45204, 45209, 45213, 45217, 45227, 45232, 45237, 45241, 45245, 45248, + 45256, 33892, 45261, 1465, 45267, 45272, 45278, 45286, 45290, 45299, + 45303, 45307, 45315, 45321, 45329, 45345, 45349, 45353, 45357, 45362, + 45368, 45383, 33929, 1764, 13198, 45387, 1359, 1374, 45399, 45407, 45414, + 45419, 45426, 45431, 9922, 1139, 2544, 11213, 45438, 9820, 45443, 45446, + 45455, 1267, 45460, 43625, 45467, 45476, 45481, 45485, 45493, 24317, + 2596, 45500, 11678, 45510, 45516, 2371, 2381, 45525, 45534, 45544, 45555, + 3376, 37099, 45560, 11277, 4019, 18236, 1272, 45564, 45572, 45579, 45584, + 45588, 45592, 25792, 43894, 11304, 45600, 45609, 45618, 45626, 45633, + 45644, 45649, 45662, 45675, 45687, 45699, 45711, 45722, 45735, 45746, + 45757, 45767, 45775, 45783, 45795, 45807, 45818, 45827, 45835, 45842, + 45854, 45861, 45867, 45876, 45883, 45896, 45901, 45911, 45916, 45922, + 45927, 41086, 45931, 45938, 45942, 45949, 45957, 45964, 2557, 45971, + 45982, 45992, 46001, 46009, 46019, 46027, 46037, 46046, 46051, 46057, + 46063, 3899, 46074, 46084, 46093, 46102, 46110, 46120, 46128, 46137, + 46142, 46147, 46152, 1694, 47, 46160, 46168, 46179, 46190, 17875, 46200, + 46204, 46211, 46217, 46222, 46226, 46237, 46247, 46256, 46267, 18275, + 18280, 46272, 46281, 46286, 46296, 46301, 46309, 46317, 46324, 46330, + 1656, 277, 46334, 46340, 46345, 46348, 2143, 43748, 46356, 46360, 46363, + 1510, 46369, 15214, 1277, 46374, 46387, 46401, 2682, 46419, 46431, 46443, + 2696, 2713, 46457, 46470, 2728, 46484, 46496, 2743, 46510, 1283, 1289, + 1295, 11584, 46515, 46520, 46525, 46529, 46544, 46559, 46574, 46589, + 46604, 46619, 46634, 46649, 46664, 46679, 46694, 46709, 46724, 46739, + 46754, 46769, 46784, 46799, 46814, 46829, 46844, 46859, 46874, 46889, + 46904, 46919, 46934, 46949, 46964, 46979, 46994, 47009, 47024, 47039, + 47054, 47069, 47084, 47099, 47114, 47129, 47144, 47159, 47174, 47189, + 47204, 47219, 47234, 47249, 47264, 47279, 47294, 47309, 47324, 47339, + 47354, 47369, 47384, 47399, 47414, 47429, 47444, 47459, 47474, 47489, + 47504, 47519, 47534, 47549, 47564, 47579, 47594, 47609, 47624, 47639, + 47654, 47669, 47684, 47699, 47714, 47729, 47744, 47759, 47774, 47789, + 47804, 47819, 47834, 47849, 47864, 47879, 47894, 47909, 47924, 47939, + 47954, 47969, 47984, 47999, 48014, 48029, 48044, 48059, 48074, 48089, + 48104, 48119, 48134, 48149, 48164, 48179, 48194, 48209, 48224, 48239, + 48254, 48269, 48284, 48299, 48314, 48329, 48344, 48359, 48374, 48389, + 48404, 48419, 48434, 48449, 48464, 48479, 48494, 48509, 48524, 48539, + 48554, 48569, 48584, 48599, 48614, 48629, 48644, 48659, 48674, 48689, + 48704, 48719, 48734, 48749, 48764, 48779, 48794, 48809, 48824, 48839, + 48854, 48869, 48884, 48899, 48914, 48929, 48944, 48959, 48974, 48989, + 49004, 49019, 49034, 49049, 49064, 49079, 49094, 49109, 49124, 49139, + 49154, 49169, 49184, 49199, 49214, 49229, 49244, 49259, 49274, 49289, + 49304, 49319, 49334, 49349, 49364, 49379, 49394, 49409, 49424, 49439, + 49454, 49469, 49484, 49499, 49514, 49529, 49544, 49559, 49574, 49589, + 49604, 49619, 49634, 49649, 49664, 49679, 49694, 49709, 49724, 49739, + 49754, 49769, 49784, 49799, 49814, 49829, 49844, 49859, 49874, 49889, + 49904, 49919, 49934, 49949, 49964, 49979, 49994, 50009, 50024, 50039, + 50054, 50069, 50084, 50099, 50114, 50129, 50144, 50159, 50174, 50189, + 50204, 50219, 50234, 50249, 50264, 50279, 50294, 50309, 50324, 50339, + 50354, 50369, 50384, 50399, 50414, 50429, 50444, 50459, 50474, 50489, + 50504, 50519, 50534, 50549, 50564, 50579, 50594, 50609, 50624, 50639, + 50654, 50669, 50684, 50699, 50714, 50729, 50744, 50759, 50774, 50789, + 50804, 50819, 50834, 50849, 50864, 50879, 50894, 50909, 50924, 50939, + 50954, 50969, 50984, 50999, 51014, 51029, 51044, 51059, 51074, 51089, + 51104, 51119, 51134, 51149, 51164, 51179, 51194, 51209, 51224, 51239, + 51254, 51269, 51284, 51299, 51314, 51329, 51344, 51359, 51374, 51389, + 51404, 51419, 51434, 51449, 51464, 51479, 51494, 51509, 51524, 51539, + 51554, 51569, 51584, 51599, 51614, 51629, 51644, 51659, 51674, 51689, + 51704, 51719, 51734, 51749, 51764, 51779, 51794, 51809, 51824, 51839, + 51854, 51869, 51884, 51899, 51914, 51929, 51944, 51959, 51974, 51989, + 52004, 52019, 52034, 52049, 52064, 52079, 52094, 52109, 52124, 52139, + 52154, 52169, 52184, 52199, 52214, 52229, 52244, 52259, 52274, 52289, + 52304, 52319, 52334, 52349, 52364, 52379, 52394, 52409, 52424, 52439, + 52454, 52469, 52484, 52499, 52514, 52529, 52544, 52559, 52574, 52589, + 52604, 52619, 52634, 52649, 52664, 52679, 52694, 52709, 52724, 52739, + 52754, 52769, 52784, 52799, 52814, 52829, 52844, 52859, 52874, 52889, + 52904, 52919, 52934, 52949, 52964, 52979, 52994, 53009, 53024, 53039, + 53054, 53069, 53084, 53099, 53114, 53129, 53144, 53159, 53174, 53189, + 53204, 53219, 53234, 53249, 53264, 53279, 53294, 53309, 53324, 53339, + 53354, 53369, 53384, 53399, 53414, 53429, 53444, 53459, 53474, 53489, + 53504, 53519, 53534, 53549, 53564, 53579, 53594, 53609, 53624, 53639, + 53654, 53669, 53684, 53699, 53714, 53729, 53744, 53759, 53774, 53789, + 53804, 53819, 53834, 53849, 53864, 53879, 53894, 53909, 53924, 53939, + 53954, 53969, 53984, 53999, 54014, 54029, 54044, 54059, 54074, 54089, + 54104, 54119, 54134, 54149, 54164, 54179, 54194, 54209, 54224, 54239, + 54254, 54269, 54284, 54299, 54314, 54329, 54345, 54361, 54377, 54393, + 54409, 54425, 54441, 54457, 54473, 54489, 54505, 54521, 54537, 54553, + 54569, 54585, 54601, 54617, 54633, 54649, 54665, 54681, 54697, 54713, + 54729, 54745, 54761, 54777, 54793, 54809, 54825, 54841, 54857, 54873, + 54889, 54905, 54921, 54937, 54953, 54969, 54985, 55001, 55017, 55033, + 55049, 55065, 55081, 55097, 55113, 55129, 55145, 55161, 55177, 55193, + 55209, 55225, 55241, 55257, 55273, 55289, 55305, 55321, 55337, 55353, + 55369, 55385, 55401, 55417, 55433, 55449, 55465, 55481, 55497, 55513, + 55529, 55545, 55561, 55577, 55593, 55609, 55625, 55641, 55657, 55673, + 55689, 55705, 55721, 55737, 55753, 55769, 55785, 55801, 55817, 55833, + 55849, 55865, 55881, 55897, 55913, 55929, 55945, 55961, 55977, 55993, + 56009, 56025, 56041, 56057, 56073, 56089, 56105, 56121, 56137, 56153, + 56169, 56185, 56201, 56217, 56233, 56249, 56265, 56281, 56297, 56313, + 56329, 56345, 56361, 56377, 56393, 56409, 56425, 56441, 56457, 56473, + 56489, 56505, 56521, 56537, 56553, 56569, 56585, 56601, 56617, 56633, + 56649, 56665, 56681, 56697, 56713, 56729, 56745, 56761, 56777, 56793, + 56809, 56825, 56841, 56857, 56873, 56889, 56905, 56921, 56937, 56953, + 56969, 56985, 57001, 57017, 57033, 57049, 57065, 57081, 57097, 57113, + 57129, 57145, 57161, 57177, 57193, 57209, 57225, 57241, 57257, 57273, + 57289, 57305, 57321, 57337, 57353, 57369, 57385, 57401, 57417, 57433, + 57449, 57465, 57481, 57497, 57513, 57529, 57545, 57561, 57577, 57593, + 57609, 57625, 57641, 57657, 57673, 57689, 57705, 57721, 57737, 57753, + 57769, 57785, 57801, 57817, 57833, 57849, 57865, 57881, 57897, 57913, + 57929, 57945, 57961, 57977, 57993, 58009, 58025, 58041, 58057, 58073, + 58089, 58105, 58121, 58137, 58153, 58169, 58185, 58201, 58217, 58233, + 58249, 58265, 58281, 58297, 58313, 58329, 58345, 58361, 58377, 58393, + 58409, 58425, 58441, 58457, 58473, 58489, 58505, 58521, 58537, 58553, + 58569, 58585, 58601, 58617, 58633, 58649, 58665, 58681, 58697, 58713, + 58729, 58745, 58761, 58777, 58793, 58809, 58825, 58841, 58857, 58873, + 58889, 58905, 58921, 58937, 58953, 58969, 58985, 59001, 59017, 59033, + 59049, 59065, 59081, 59097, 59113, 59129, 59145, 59161, 59177, 59193, + 59209, 59225, 59241, 59257, 59273, 59289, 59305, 59321, 59337, 59353, + 59369, 59385, 59401, 59417, 59433, 59449, 59465, 59481, 59497, 59513, + 59529, 59545, 59561, 59577, 59593, 59609, 59625, 59641, 59657, 59673, + 59689, 59705, 59721, 59737, 59753, 59769, 59785, 59801, 59817, 59833, + 59849, 59865, 59881, 59897, 59913, 59929, 59945, 59961, 59977, 59993, + 60009, 60025, 60041, 60057, 60073, 60089, 60105, 60121, 60137, 60153, + 60169, 60185, 60201, 60217, 60233, 60249, 60265, 60281, 60297, 60313, + 60329, 60345, 60361, 60377, 60393, 60409, 60425, 60441, 60457, 60473, + 60489, 60505, 60521, 60537, 60553, 60569, 60585, 60601, 60617, 60633, + 60649, 60665, 60681, 60697, 60713, 60729, 60745, 60761, 60777, 60793, + 60809, 60825, 60841, 60857, 60873, 60889, 60905, 60921, 60937, 60953, + 60969, 60985, 61001, 61017, 61033, 61049, 61065, 61081, 61097, 61113, + 61129, 61145, 61161, 61177, 61193, 61209, 61225, 61241, 61257, 61273, + 61289, 61305, 61321, 61337, 61353, 61369, 61385, 61401, 61417, 61433, + 61449, 61465, 61481, 61497, 61513, 61529, 61545, 61561, 61577, 61593, + 61609, 61625, 61641, 61657, 61673, 61689, 61705, 61721, 61737, 61753, + 61769, 61785, 61801, 61817, 61833, 61849, 61865, 61881, 61897, 61913, + 61929, 61945, 61961, 61977, 61993, 62009, 62025, 62041, 62057, 62073, + 62089, 62105, 62121, 62137, 62153, 62169, 62185, 62201, 62217, 62233, + 62249, 62265, 62281, 62297, 62313, 62329, 62345, 62361, 62377, 62393, + 62409, 62425, 62441, 62457, 62473, 62489, 62505, 62521, 62537, 62553, + 62569, 62585, 62601, 62617, 62633, 62649, 62665, 62681, 62697, 62713, + 62729, 62745, 62761, 62777, 62793, 62809, 62825, 62841, 62857, 62873, + 62889, 62905, 62921, 62937, 62953, 62969, 62985, 63001, 63016, 18307, + 63025, 63030, 63036, 63042, 63052, 63060, 16270, 16868, 10733, 63073, + 1518, 1522, 63081, 3973, 29566, 7512, 63087, 63092, 63097, 63102, 63107, + 63113, 63118, 63124, 63129, 63135, 63140, 63145, 63150, 63155, 63161, + 63166, 63171, 63176, 63181, 63186, 63191, 63196, 63202, 63207, 63213, + 63220, 2600, 63225, 63231, 8912, 63235, 63240, 63247, 63255, 65, 63259, + 63265, 63270, 63275, 63279, 63284, 63288, 63292, 11621, 63296, 63306, + 63319, 63330, 63343, 63350, 63356, 63364, 63369, 63375, 63381, 63387, + 63392, 63397, 63402, 63407, 63411, 63416, 63421, 63426, 63432, 63438, + 63444, 63449, 63453, 63458, 63463, 63467, 63472, 63477, 63482, 63486, + 11637, 11648, 11653, 1561, 63490, 63496, 1566, 63501, 63504, 17741, + 63509, 63515, 63520, 1597, 63526, 1603, 1609, 11683, 63531, 63540, 63548, + 63555, 63559, 63563, 63569, 63574, 33365, 63579, 63586, 63593, 63598, + 63602, 63606, 63615, 1614, 17850, 63620, 63624, 17861, 1162, 63628, + 63635, 63640, 63644, 17891, 1618, 41243, 63647, 63652, 63662, 63671, + 63676, 63680, 63686, 1623, 43855, 63691, 63700, 63706, 63711, 63716, + 11882, 11888, 63722, 63734, 63751, 63768, 63785, 63802, 63819, 63836, + 63853, 63870, 63887, 63904, 63921, 63938, 63955, 63972, 63989, 64006, + 64023, 64040, 64057, 64074, 64091, 64108, 64125, 64142, 64159, 64176, + 64193, 64210, 64227, 64244, 64261, 64278, 64295, 64312, 64329, 64346, + 64363, 64380, 64397, 64414, 64431, 64448, 64465, 64482, 64499, 64516, + 64533, 64550, 64567, 64578, 64588, 64593, 1628, 64597, 64602, 64608, + 64613, 64618, 64625, 9839, 1633, 64631, 64640, 29887, 64645, 64656, + 11899, 64666, 64671, 64677, 64682, 64689, 64695, 64700, 1638, 18174, + 64705, 64711, 11909, 1643, 11914, 64717, 64722, 64728, 64733, 64738, + 64743, 64748, 64753, 64758, 64763, 64768, 64774, 64780, 64786, 64791, + 64795, 64800, 64805, 64809, 64814, 64819, 64824, 64829, 64833, 64838, + 64844, 64849, 64854, 64858, 64863, 64868, 64874, 64879, 64884, 64890, + 64896, 64901, 64905, 64910, 64915, 64920, 64924, 64929, 64934, 64939, + 64945, 64951, 64956, 64960, 64964, 64969, 64974, 64979, 31395, 64983, + 64988, 64993, 64999, 65004, 65009, 65013, 65018, 65023, 65029, 65034, + 65039, 65045, 65051, 65056, 65060, 65065, 65070, 65074, 65079, 65084, + 65089, 65095, 65101, 65106, 65110, 65115, 65120, 65124, 65129, 65134, + 65139, 65144, 65148, 65151, 65154, 65159, 65164, 34056, 65171, 65179, + 3691, 29837, 65185, 65192, 65198, 3830, 12020, 65204, 65214, 65229, + 65237, 12025, 65248, 65253, 65264, 65276, 65288, 65300, 2734, 65312, + 65317, 65329, 65333, 65339, 65345, 65350, 1660, 17418, 65359, 65364, + 43914, 65368, 65372, 65377, 65381, 18315, 65386, 65389, 65394, 65402, + 65410, 1664, 12061, 12067, 1669, 65418, 65425, 65430, 65439, 65449, + 65456, 65461, 65466, 1674, 65473, 65478, 18435, 65482, 65487, 65494, + 65500, 65504, 65515, 65525, 65532, 18457, 9733, 9740, 4022, 4028, 65539, + 1679, 65544, 65550, 65558, 65565, 65571, 65578, 65590, 65596, 65601, + 65613, 65624, 65633, 65643, 3952, 65651, 33166, 33175, 18497, 1684, 1688, + 65664, 65675, 65680, 1698, 65688, 65693, 65698, 18556, 65710, 65713, + 65719, 65725, 65730, 65738, 1703, 65743, 65748, 65756, 65764, 65771, + 65780, 65788, 65797, 1708, 65801, 1713, 23016, 65806, 65813, 18630, + 65821, 65827, 65832, 65840, 65847, 65855, 65865, 65874, 65884, 65893, + 65904, 65914, 65924, 65933, 65943, 65957, 65970, 65979, 65987, 65997, + 66006, 66018, 66029, 66040, 66050, 17948, 66055, 12213, 66064, 66070, + 66075, 66082, 66089, 66095, 17617, 66105, 66111, 66116, 66127, 66132, + 66140, 12230, 12235, 66148, 66154, 66158, 66166, 4017, 18692, 44007, + 66171, 66177, 66182, 66190, 66197, 13179, 66202, 66208, 1724, 66213, + 66216, 1438, 66222, 66227, 66232, 66238, 66243, 66248, 66253, 66258, + 66263, 66268, 1733, 13, 66274, 66278, 66283, 66287, 66291, 66295, 34296, + 66300, 25070, 66305, 66310, 66314, 66317, 66321, 66325, 66330, 66334, + 66339, 66343, 66349, 37514, 37519, 37524, 66352, 66359, 66365, 66373, + 43678, 66383, 37530, 34560, 34311, 34317, 37546, 34323, 66388, 66393, + 34593, 66397, 66400, 66404, 66412, 66419, 66422, 66427, 66432, 66436, + 66440, 66443, 66453, 66465, 66472, 66478, 34328, 66485, 36078, 66488, + 8929, 1019, 66491, 66495, 66500, 3873, 66504, 66507, 14827, 66514, 66521, + 66534, 66542, 66551, 66560, 66565, 66575, 66588, 66600, 66607, 66612, + 66621, 66634, 39039, 66652, 66657, 66664, 66670, 66675, 819, 66680, + 66688, 66695, 66702, 29392, 783, 66708, 66714, 66724, 66732, 66738, + 66743, 34347, 6310, 34361, 66747, 66757, 66762, 66772, 66787, 66793, + 66799, 34371, 66804, 33482, 66808, 66813, 66820, 66825, 66829, 66834, + 18500, 66841, 66846, 66850, 6351, 34397, 66854, 66860, 324, 66870, 66877, + 66884, 66889, 66898, 63656, 66904, 66912, 66916, 66920, 66924, 66928, + 66933, 66937, 66943, 66951, 66956, 66961, 66966, 66970, 66975, 66979, + 66983, 66989, 66995, 67000, 67004, 67009, 34521, 67013, 34527, 34533, + 67018, 67024, 67031, 67036, 67040, 33499, 18167, 67043, 67047, 67052, + 67059, 67065, 67069, 67074, 43353, 67080, 67084, 67091, 67095, 67100, + 67106, 67112, 67118, 67130, 67139, 67149, 67155, 67162, 67167, 67172, + 67176, 67179, 67185, 67192, 67197, 67202, 67209, 67216, 67223, 67229, + 67234, 67239, 67247, 34538, 2462, 67252, 67257, 67263, 67268, 67274, + 67279, 67284, 67289, 67295, 34559, 67300, 67306, 67312, 67318, 34629, + 67323, 67328, 67333, 34640, 67338, 67343, 67348, 67354, 67360, 34645, + 67365, 67370, 67375, 34700, 34706, 67380, 67385, 34711, 34733, 30136, + 34739, 34743, 67390, 12909, 67394, 67402, 67408, 67416, 67423, 67429, + 67439, 67445, 67452, 11556, 34757, 67458, 67471, 67480, 67486, 67495, + 67501, 25380, 67508, 67515, 67525, 67528, 34701, 67533, 67540, 67545, + 67549, 67553, 67558, 67562, 4133, 67567, 67572, 67577, 37608, 37613, + 67581, 37627, 67586, 37632, 67591, 67597, 37644, 37650, 37656, 67602, + 67608, 24366, 67619, 67622, 67634, 67642, 34780, 67646, 67655, 67665, + 67674, 34790, 67679, 67686, 67695, 67701, 67709, 67716, 6402, 4673, + 67721, 34712, 67727, 67730, 67736, 67743, 67748, 67753, 25290, 67757, + 67763, 67769, 67774, 67779, 67783, 67789, 67795, 35984, 1048, 38689, + 40419, 40425, 34821, 34826, 67800, 67804, 67808, 67811, 67824, 67830, + 67834, 67837, 67842, 36321, 67846, 33504, 22966, 67852, 6331, 6339, 9570, + 67855, 67860, 67865, 67870, 67875, 67880, 67885, 67890, 67895, 67900, + 67906, 67911, 67916, 67922, 67927, 67932, 67937, 67942, 67947, 67952, + 67958, 67963, 67969, 67974, 67979, 67984, 67989, 67994, 67999, 68004, + 68009, 68014, 68019, 68025, 68030, 68035, 68040, 68045, 68050, 68055, + 68061, 68066, 68071, 68076, 68081, 68086, 68091, 68096, 68101, 68106, + 68112, 68117, 68122, 68127, 68132, 68138, 68144, 68149, 68155, 68160, + 68165, 68170, 68175, 68180, 1511, 145, 68185, 68189, 68193, 68197, 27076, + 68201, 68205, 68210, 68214, 68219, 68223, 68228, 68233, 68238, 68242, + 68246, 68251, 68255, 14542, 68260, 68264, 68271, 68281, 16595, 68290, + 68299, 68303, 68308, 68313, 68317, 68321, 26870, 3078, 68325, 68331, + 18967, 68335, 68344, 68352, 68358, 68363, 68375, 68387, 68392, 68396, + 68401, 68405, 68411, 68417, 68422, 68432, 68442, 68448, 68453, 68457, + 68463, 68468, 68475, 68481, 68486, 68495, 68504, 68512, 16993, 68516, + 68525, 68533, 68545, 68556, 68567, 68576, 68580, 68589, 68597, 68607, + 68615, 68622, 68628, 68633, 68639, 68644, 68655, 54, 33309, 68661, 28331, + 28341, 68667, 68675, 68682, 68688, 68692, 68702, 68713, 68721, 68730, + 68735, 68740, 68745, 68749, 68753, 18921, 68761, 68765, 68771, 68781, + 68788, 68794, 68800, 37707, 68804, 68806, 68809, 68815, 68819, 68830, + 68840, 68846, 68853, 68860, 14479, 68868, 68874, 68883, 68892, 68898, + 10615, 68904, 68910, 68915, 68920, 68927, 68932, 68939, 68945, 68950, + 68958, 68971, 68980, 65919, 65929, 68989, 68995, 69001, 69008, 69015, + 69022, 69029, 69036, 69041, 69045, 69049, 69052, 69062, 69066, 69078, + 69087, 69091, 69102, 69107, 69111, 65938, 69117, 69124, 69133, 69141, + 69149, 69154, 69158, 69163, 69168, 69178, 69186, 69191, 69195, 69199, + 69205, 69213, 69220, 69232, 69240, 69251, 69258, 69264, 69274, 69280, + 69284, 69291, 69297, 69302, 69306, 69310, 69314, 69323, 69332, 69341, + 69347, 69353, 69359, 69364, 69371, 69377, 69385, 69392, 69398, 13622, + 69403, 69409, 69413, 15529, 69417, 69422, 69432, 69441, 69447, 69453, + 69461, 69468, 69472, 69476, 69482, 69490, 69497, 69503, 69514, 69518, + 69522, 69526, 69529, 69535, 69540, 69545, 69549, 69553, 69562, 69570, + 69577, 69583, 69590, 25963, 43422, 69595, 69603, 69607, 69611, 69614, + 69622, 69629, 69635, 69644, 69652, 69658, 69663, 69667, 69672, 69677, + 69681, 69685, 69689, 69694, 69703, 69707, 69714, 40528, 69718, 69724, + 69728, 69736, 69742, 69747, 69758, 69766, 69772, 69781, 24513, 69789, + 69796, 69803, 69810, 69817, 69824, 46704, 14317, 69831, 69838, 69843, + 37743, 6529, 69849, 69854, 69859, 69865, 69871, 69877, 69882, 69887, + 69892, 69897, 69903, 69908, 69914, 69919, 69925, 69930, 69935, 69940, + 69945, 69950, 69955, 69960, 69966, 69971, 69977, 69982, 69987, 69992, + 69997, 70002, 70007, 70013, 70018, 70023, 70028, 70033, 70038, 70043, + 70048, 70053, 70058, 70063, 70069, 70074, 70079, 70084, 70089, 70094, + 70099, 70104, 70109, 70115, 70120, 70125, 70130, 70135, 70140, 70145, + 70150, 70155, 70160, 70165, 70170, 70175, 70181, 1854, 260, 70186, 41361, + 70190, 70193, 70198, 70202, 70205, 3415, 70210, 70215, 70219, 70228, + 70239, 70256, 70274, 69145, 70282, 70285, 70295, 70302, 70311, 70327, + 70336, 70346, 70351, 70361, 70370, 70378, 70392, 70400, 70404, 70407, + 70414, 70420, 70431, 70438, 70450, 70461, 70472, 70481, 70488, 1278, 710, + 70498, 2629, 70502, 70507, 70516, 9221, 18894, 22471, 70524, 70532, + 70546, 70559, 70563, 70568, 70573, 70578, 70584, 70590, 70595, 8921, + 16623, 70600, 70604, 70612, 12062, 70617, 70623, 70632, 70640, 1736, + 12074, 908, 6465, 70644, 70648, 70657, 70667, 2419, 29127, 70676, 70682, + 18407, 29142, 70688, 4193, 12452, 70694, 70701, 65670, 70705, 70709, + 70715, 70720, 70725, 3634, 154, 15437, 70730, 70742, 70746, 70752, 70757, + 29907, 70761, 12440, 2769, 4, 70766, 70776, 70787, 70793, 70804, 70811, + 70817, 70823, 70831, 70838, 70844, 70854, 70864, 70874, 70883, 25367, + 1290, 70888, 70892, 70896, 70902, 70906, 2792, 2798, 8918, 2294, 70910, + 70914, 70923, 70931, 70942, 70950, 70958, 70964, 70969, 70980, 70991, + 70999, 71005, 71010, 10434, 71020, 71028, 71032, 71036, 71041, 71045, + 71057, 30314, 16548, 71064, 71074, 71080, 71086, 10536, 71096, 71107, + 71118, 71128, 71137, 71141, 71148, 1750, 996, 71158, 71163, 71171, 65483, + 71179, 71184, 71195, 71202, 71216, 15366, 478, 71226, 71230, 71234, + 71242, 71251, 71259, 71265, 71279, 71286, 71292, 71301, 71308, 71318, + 71326, 71333, 71341, 71348, 4024, 149, 71356, 71367, 71371, 71383, 71389, + 12633, 192, 71394, 9871, 71399, 71403, 71410, 71416, 71424, 71431, 9280, + 71438, 71447, 71455, 4093, 71468, 4110, 71472, 2842, 514, 71477, 71490, + 71494, 71499, 2847, 1853, 809, 71503, 4114, 71511, 71517, 71521, 866, + 71531, 71540, 71545, 3651, 71549, 16304, 16311, 50066, 71553, 4145, 4034, + 14200, 71561, 71568, 71573, 25431, 71577, 71584, 71590, 71595, 71600, + 16324, 186, 71605, 71617, 71623, 71631, 2859, 1768, 71639, 71641, 71646, + 71651, 71656, 71662, 71667, 71672, 71677, 71682, 71687, 71692, 71698, + 71703, 71708, 71713, 71718, 71723, 71728, 71733, 71738, 71744, 71749, + 71754, 71759, 71765, 71770, 71776, 71781, 71786, 71791, 71796, 71801, + 71806, 71811, 71817, 71822, 71828, 71833, 71838, 71843, 71848, 71853, + 71858, 71863, 71868, 71874, 71880, 71885, 71890, 71896, 71901, 71905, + 71909, 71914, 71920, 71924, 71930, 71935, 71940, 71946, 71951, 71955, + 71960, 71965, 71969, 71972, 71974, 71978, 71981, 71988, 71993, 71997, + 72002, 72006, 72010, 72014, 72023, 72027, 35026, 72030, 35031, 72037, + 72042, 35036, 72051, 72060, 35042, 72065, 35047, 72074, 72079, 12676, + 72083, 72088, 72093, 35052, 72097, 44921, 72101, 72104, 72108, 8589, + 72114, 72117, 72122, 72126, 3888, 35057, 72129, 72133, 72136, 72141, + 72145, 72151, 72159, 72172, 72181, 72187, 72192, 72198, 72202, 72208, + 72214, 72222, 72227, 72231, 72238, 72244, 72252, 72261, 72269, 35060, + 72276, 72286, 72299, 72304, 72309, 72313, 72322, 72328, 72335, 72346, + 72358, 72365, 72374, 72383, 72392, 72399, 72405, 72412, 72420, 72427, + 72435, 72444, 72452, 72459, 72467, 72476, 72484, 72493, 72503, 72512, + 72520, 72527, 72535, 72544, 72552, 72561, 72571, 72580, 72588, 72597, + 72607, 72616, 72626, 72637, 72647, 72656, 72664, 72671, 72679, 72688, + 72696, 72705, 72715, 72724, 72732, 72741, 72751, 72760, 72770, 72781, + 72791, 72800, 72808, 72817, 72827, 72836, 72846, 72857, 72867, 72876, + 72886, 72897, 72907, 72918, 72930, 72941, 72951, 72960, 72968, 72975, + 72983, 72992, 73000, 73009, 73019, 73028, 73036, 73045, 73055, 73064, + 73074, 73085, 73095, 73104, 73112, 73121, 73131, 73140, 73150, 73161, + 73171, 73180, 73190, 73201, 73211, 73222, 73234, 73245, 73255, 73264, + 73272, 73281, 73291, 73300, 73310, 73321, 73331, 73340, 73350, 73361, + 73371, 73382, 73394, 73405, 73415, 73424, 73434, 73445, 73455, 73466, + 73478, 73489, 73499, 73510, 73522, 73533, 73545, 73558, 73570, 73581, + 73591, 73600, 73608, 73615, 73623, 73632, 73640, 73649, 73659, 73668, + 73676, 73685, 73695, 73704, 73714, 73725, 73735, 73744, 73752, 73761, + 73771, 73780, 73790, 73801, 73811, 73820, 73830, 73841, 73851, 73862, + 73874, 73885, 73895, 73904, 73912, 73921, 73931, 73940, 73950, 73961, + 73971, 73980, 73990, 74001, 74011, 74022, 74034, 74045, 74055, 74064, + 74074, 74085, 74095, 74106, 74118, 74129, 74139, 74150, 74162, 74173, + 74185, 74198, 74210, 74221, 74231, 74240, 74248, 74257, 74267, 74276, + 74286, 74297, 74307, 74316, 74326, 74337, 74347, 74358, 74370, 74381, + 74391, 74400, 74410, 74421, 74431, 74442, 74454, 74465, 74475, 74486, + 74498, 74509, 74521, 74534, 74546, 74557, 74567, 74576, 74586, 74597, + 74607, 74618, 74630, 74641, 74651, 74662, 74674, 74685, 74697, 74710, + 74722, 74733, 74743, 74754, 74766, 74777, 74789, 74802, 74814, 74825, + 74837, 74850, 74862, 74875, 74889, 74902, 74914, 74925, 74935, 74944, + 74952, 74959, 74964, 8419, 74971, 35070, 74976, 74981, 35075, 74987, + 22579, 35080, 74992, 74998, 75006, 75012, 75018, 75025, 75032, 75037, + 75041, 75045, 75048, 75052, 75061, 75070, 75078, 75084, 75096, 75107, + 75111, 3140, 8394, 75116, 75119, 75121, 75125, 75129, 75133, 75139, + 75144, 27990, 75149, 75153, 75156, 75161, 75165, 75172, 75178, 75182, + 6485, 75186, 35097, 75191, 75198, 75207, 75215, 75226, 75234, 75243, + 75251, 75258, 75265, 75271, 75282, 35102, 75287, 75298, 75310, 75318, + 75329, 75338, 75349, 75354, 75362, 2595, 75367, 37166, 75380, 75384, + 75396, 75404, 75409, 75417, 75428, 19114, 75437, 75443, 75450, 75458, + 75464, 35112, 75469, 4139, 63056, 75476, 75479, 75487, 75500, 75513, + 75526, 75539, 75546, 75557, 75566, 75571, 46521, 46526, 75575, 75579, + 75587, 75594, 75603, 75611, 75617, 75626, 75634, 75641, 75649, 75653, + 75662, 75671, 75681, 75694, 75707, 75717, 35117, 75723, 75730, 75736, + 75742, 35123, 75747, 75750, 75754, 75762, 75771, 46259, 75779, 75788, + 75796, 75803, 75811, 75821, 75830, 75839, 36420, 75848, 75859, 75874, + 75884, 9904, 23263, 75893, 75898, 75903, 75907, 75912, 75916, 75921, + 75927, 75932, 75937, 75943, 75948, 75953, 23228, 75958, 75965, 75973, + 75981, 75989, 75994, 76001, 76008, 76013, 2272, 76017, 76021, 76029, + 76037, 35140, 76043, 76049, 76061, 76067, 76074, 76078, 76085, 76090, + 76097, 76103, 76110, 76121, 76131, 76141, 76153, 76159, 76167, 76173, + 76183, 76193, 35167, 76202, 76211, 76217, 76229, 76240, 76247, 76252, + 76256, 76264, 76270, 76275, 76280, 76287, 76295, 76307, 76317, 76326, + 76335, 76342, 37019, 25764, 76348, 76353, 76357, 76361, 76366, 76374, + 76380, 76391, 76404, 76409, 76416, 35172, 76421, 76433, 76442, 76450, + 76460, 76471, 76484, 76491, 76500, 76509, 76517, 76522, 76528, 1500, + 76533, 76538, 76543, 76548, 76554, 76559, 76564, 76570, 76576, 76581, + 76585, 76590, 76595, 76600, 63611, 76605, 76610, 76615, 76620, 76626, + 76632, 76637, 76641, 76646, 76651, 76656, 76662, 76667, 76673, 76678, + 76683, 76688, 76693, 76697, 76703, 76708, 76717, 76722, 76727, 76732, + 76737, 76741, 76748, 76754, 4430, 18737, 3105, 76759, 76763, 76768, + 76772, 76776, 76780, 50321, 76784, 76709, 76786, 76796, 35181, 76799, + 76804, 76813, 76819, 6454, 35186, 76823, 76829, 76834, 76840, 76845, + 76849, 76856, 76861, 76871, 76880, 76884, 76890, 76896, 76902, 76906, + 76914, 76921, 76929, 76937, 35191, 76944, 76947, 76954, 76960, 76965, + 76969, 76975, 76982, 76987, 76991, 77000, 77008, 77014, 77019, 35196, + 77026, 77038, 77045, 77051, 77056, 77062, 77069, 77075, 22979, 29589, + 77081, 77086, 77092, 77096, 77108, 76742, 76749, 23160, 77118, 77123, + 77130, 77136, 77143, 77149, 77160, 77165, 77173, 9609, 77178, 77181, + 77187, 77191, 77195, 77198, 77204, 34934, 4431, 1067, 14596, 77211, + 77217, 77223, 77229, 77235, 77241, 77247, 77253, 77259, 77264, 77269, + 77274, 77279, 77284, 77289, 77294, 77299, 77304, 77309, 77314, 77319, + 77324, 77330, 77335, 77340, 77346, 77351, 77356, 77362, 77368, 77374, + 77380, 77386, 77392, 77398, 77404, 77410, 77415, 77420, 77426, 77431, + 77436, 77442, 77447, 77452, 77457, 77462, 77467, 77472, 77477, 77482, + 77487, 77492, 77497, 77502, 77508, 77513, 77518, 77523, 77529, 77534, + 77539, 77544, 77549, 77555, 77560, 77565, 77570, 77575, 77580, 77585, + 77590, 77595, 77600, 77605, 77610, 77615, 77620, 77625, 77630, 77635, + 77640, 77645, 77650, 77656, 77661, 77666, 77671, 77676, 77681, 77686, + 77691, 1890, 163, 77696, 77700, 77704, 77709, 77717, 77721, 77728, 77736, + 77740, 77753, 77761, 77766, 77771, 28394, 77775, 77780, 77784, 77789, + 77793, 77801, 77805, 22587, 77810, 77814, 66162, 77818, 77821, 77829, + 77837, 77845, 77850, 77855, 77862, 77869, 77875, 77881, 77886, 77891, + 77899, 70551, 77906, 65948, 77911, 77916, 77920, 77927, 65975, 12743, + 77933, 77938, 77943, 77947, 77950, 77956, 77960, 77970, 77979, 77983, + 77986, 77990, 77997, 78010, 78016, 78024, 78033, 78044, 78055, 78066, + 78077, 78086, 78092, 78101, 78109, 78119, 78132, 78140, 78147, 78158, + 78164, 78169, 78174, 78180, 78186, 78196, 78203, 78213, 78222, 76423, + 78230, 78236, 78244, 78250, 78257, 78265, 78270, 78273, 78277, 78281, + 78284, 78290, 78296, 78304, 78316, 78328, 78335, 78340, 78344, 78355, + 78363, 78370, 78382, 78390, 78398, 78405, 78411, 78416, 78426, 78435, + 78440, 78450, 78459, 45549, 78466, 78470, 78475, 78483, 78490, 78496, + 78500, 78510, 78521, 78529, 78536, 78548, 78560, 78569, 75370, 78576, + 78586, 78598, 78609, 78623, 78631, 78641, 78648, 78656, 78669, 78681, + 78690, 78698, 78708, 78719, 78731, 78740, 78750, 78760, 78769, 78776, + 78785, 78800, 78808, 78818, 78827, 78835, 78848, 63026, 78863, 78873, + 78882, 78894, 78904, 78916, 78927, 78938, 78949, 78959, 78970, 78978, + 78984, 78994, 79002, 79008, 31291, 79013, 79019, 79028, 79040, 79045, + 79052, 10448, 19134, 79058, 79067, 79072, 79076, 79083, 79089, 79094, + 79099, 79107, 79115, 13119, 79119, 79122, 79124, 79131, 79137, 79148, + 79153, 79157, 79164, 79170, 79175, 79183, 71120, 71130, 79189, 79196, + 79206, 11543, 79213, 79218, 31506, 79227, 79232, 79239, 79249, 79257, + 79265, 79274, 79280, 79286, 79293, 79300, 79305, 79309, 79317, 65992, + 79322, 79331, 79339, 79346, 79351, 79355, 79364, 79370, 79373, 79377, + 79386, 79396, 77748, 79405, 79409, 79417, 79421, 79427, 79438, 79448, + 19143, 79459, 79468, 79476, 79484, 79491, 66011, 9147, 79499, 79503, + 79512, 79519, 79522, 29470, 79525, 79529, 79534, 79551, 79563, 11501, + 79575, 79580, 79585, 79590, 22669, 79594, 79599, 79604, 79610, 79615, + 6122, 79620, 22673, 79625, 79630, 79636, 79643, 79648, 79653, 79659, + 79665, 79671, 79676, 79682, 79686, 79700, 79708, 79716, 79722, 79727, + 79734, 79744, 79753, 79758, 79763, 79768, 79776, 79781, 79787, 79792, + 79801, 64713, 79806, 79809, 79827, 79846, 79859, 79873, 79889, 79896, + 79903, 79912, 79919, 79925, 79932, 79937, 79943, 79949, 79957, 79963, + 79968, 79973, 79989, 11514, 80003, 80010, 80018, 80024, 80028, 80031, + 80036, 80041, 80048, 80053, 80062, 80068, 80073, 80079, 80085, 80094, + 80103, 80108, 80112, 80120, 80129, 12772, 80138, 80144, 80152, 80158, + 80164, 80170, 80175, 80182, 80188, 12783, 80193, 80196, 80201, 35223, + 80211, 80220, 80225, 80231, 80236, 80244, 80251, 80262, 80272, 80277, + 80285, 70474, 80290, 80296, 80301, 80308, 80317, 80325, 80329, 80335, + 80341, 80348, 80354, 80358, 18518, 3114, 80363, 80367, 80371, 80377, + 80386, 80392, 80399, 80403, 80424, 80446, 80462, 80479, 80498, 80507, + 80517, 80525, 80532, 80539, 80545, 29342, 80559, 80563, 80569, 80577, + 80589, 80595, 80603, 80610, 80615, 80620, 80624, 80632, 80639, 80643, + 80649, 80655, 80660, 3730, 46721, 80666, 80670, 80674, 80678, 80683, + 80688, 80693, 80699, 80705, 80711, 80718, 80724, 80731, 80737, 80743, + 80748, 80754, 80759, 80763, 80768, 80772, 80777, 46736, 80781, 80786, + 80794, 80798, 80803, 80810, 80819, 80825, 80834, 80838, 80845, 80849, + 80852, 80859, 80865, 80874, 80884, 80889, 80893, 80901, 80910, 80914, + 80922, 80928, 80933, 80938, 80944, 80950, 80955, 80959, 80965, 80970, + 80974, 80978, 80981, 80986, 80994, 81004, 81010, 81015, 81025, 44031, + 81033, 81045, 81049, 81055, 81067, 81078, 81085, 81091, 81098, 81105, + 81117, 81124, 81130, 22747, 81134, 81142, 81148, 81155, 81161, 81167, + 81173, 81178, 81183, 81188, 81197, 81205, 81216, 7350, 81221, 17967, + 81227, 81231, 81235, 81239, 81247, 81256, 81260, 81267, 81276, 81284, + 81297, 81303, 80773, 32390, 81308, 81310, 81315, 81320, 81325, 81330, + 81335, 81340, 81345, 81350, 81355, 81360, 81365, 81370, 81375, 81380, + 81386, 81391, 81396, 81401, 81406, 81411, 81416, 81421, 81426, 81432, + 81438, 81444, 81449, 81454, 81466, 81471, 1896, 63, 81476, 81481, 35229, + 81485, 35234, 35239, 35245, 35250, 81489, 35255, 23785, 81511, 81515, + 81519, 81524, 81528, 35259, 81532, 81540, 81547, 35264, 81553, 81556, + 81561, 81565, 81574, 10266, 81582, 35269, 23641, 81585, 81589, 81597, + 1412, 81602, 35280, 81605, 81610, 27750, 27760, 38182, 81615, 81620, + 81625, 81630, 81636, 81641, 81650, 81655, 81664, 81672, 81679, 81685, + 81690, 81695, 81700, 81710, 81719, 81727, 81732, 81740, 81744, 81752, + 81756, 81763, 81771, 35088, 41192, 81778, 81784, 81789, 81794, 13154, + 30529, 81799, 81804, 81811, 81817, 81822, 81830, 81840, 81850, 81856, + 81861, 81867, 19165, 81874, 39052, 81887, 81892, 81898, 33381, 81911, + 81917, 81921, 81930, 81939, 81946, 81952, 81960, 81969, 81976, 81982, + 81985, 81989, 81993, 27891, 81997, 82004, 82010, 82018, 82023, 82027, + 25911, 82033, 82036, 82044, 82051, 82059, 82072, 82086, 82093, 82099, + 82106, 82112, 35294, 82116, 82123, 82131, 82139, 82145, 35299, 82153, + 82159, 82164, 82174, 82180, 82189, 33183, 37614, 82197, 82202, 82207, + 82211, 82216, 82220, 82228, 82233, 16296, 44044, 82237, 82242, 35304, + 67547, 82246, 82251, 82255, 82262, 82271, 82275, 82283, 82289, 82294, + 82300, 82305, 82312, 82318, 82323, 82328, 82339, 82348, 82360, 82375, + 35571, 82381, 18086, 35308, 82385, 82392, 82398, 26027, 82402, 82409, + 82418, 82425, 82434, 82440, 82445, 82453, 82459, 35318, 82464, 82473, + 81073, 82482, 82489, 82495, 82501, 82510, 82520, 82528, 82535, 82539, + 35323, 82542, 35329, 35335, 82547, 82555, 82563, 82573, 82582, 82590, + 82597, 82607, 35340, 82611, 82613, 82617, 82622, 82626, 82630, 82636, + 82641, 82645, 82656, 82661, 82666, 3119, 82670, 82677, 82681, 82690, + 82698, 82705, 82710, 82715, 67598, 82719, 82722, 82728, 82736, 82742, + 82746, 82751, 82758, 82763, 82768, 82772, 82778, 82783, 37645, 82787, + 82790, 82795, 82799, 82804, 82811, 82816, 82820, 42580, 82828, 27769, + 27778, 82834, 82840, 82846, 82851, 82855, 82858, 82868, 82877, 82882, + 82888, 82895, 82901, 82905, 82913, 82918, 37651, 77952, 82922, 82930, + 82936, 82943, 82948, 82952, 82957, 63242, 82963, 82969, 37657, 82974, + 82979, 82983, 82988, 82993, 82998, 83002, 83007, 83012, 83018, 83023, + 83028, 83034, 83040, 83045, 83049, 83054, 83059, 83064, 83068, 26026, + 83073, 83078, 83084, 83090, 83096, 83101, 83105, 83110, 83115, 83120, + 83124, 83129, 83134, 83139, 83144, 46991, 83148, 35348, 83156, 83160, + 83168, 83176, 83187, 83192, 83196, 24211, 75473, 83201, 83207, 83212, + 83222, 83229, 83234, 83242, 83251, 83256, 83260, 83265, 83273, 83281, + 83288, 70736, 83294, 83302, 83309, 83320, 83326, 83332, 35358, 83335, + 83342, 83350, 83355, 44247, 83359, 83364, 83371, 83376, 9484, 83380, + 83388, 83395, 83402, 83411, 83418, 83424, 83438, 6194, 83446, 83452, + 83456, 83459, 83467, 83474, 83479, 83492, 83499, 83505, 83509, 83514, + 83521, 83526, 65851, 83531, 83534, 83543, 83550, 83556, 83560, 83563, + 83571, 83580, 83590, 83600, 83609, 83620, 83628, 83639, 83644, 83648, + 83653, 83657, 38313, 83665, 23042, 38322, 83670, 83675, 83680, 83685, + 83690, 83695, 83700, 83704, 83709, 83714, 83719, 83724, 83729, 83734, + 83738, 83743, 83748, 83752, 83756, 83760, 83764, 83769, 83774, 83778, + 83783, 83787, 83791, 83796, 83801, 83806, 83811, 83815, 83820, 83825, + 83829, 83834, 83839, 83844, 83849, 83854, 83859, 83864, 83869, 83874, + 83879, 83884, 83889, 83894, 83899, 83904, 83909, 83914, 83919, 83924, + 83929, 83933, 83938, 83943, 83948, 83953, 83958, 83963, 83968, 83973, + 83978, 83983, 83988, 83992, 83997, 84001, 84006, 84011, 84016, 84021, + 84026, 84031, 84036, 84041, 84046, 84050, 84054, 84059, 84064, 84068, + 84073, 84078, 84082, 84087, 84092, 84097, 84102, 84106, 84111, 84116, + 84120, 84125, 84129, 84133, 84137, 84141, 84146, 84150, 84154, 84158, + 84162, 84166, 84170, 84174, 84178, 84182, 84187, 84192, 84197, 84202, + 84207, 84212, 84217, 84222, 84227, 84232, 84236, 84240, 84244, 84248, + 84252, 84256, 84261, 84265, 84270, 84274, 84279, 84284, 84288, 84292, + 84297, 84301, 84305, 84309, 84313, 84317, 84321, 84325, 84329, 84333, + 84337, 84341, 84345, 84349, 84353, 84358, 84363, 84367, 84371, 84375, + 84379, 84383, 84387, 84392, 84396, 84400, 84404, 84408, 84412, 84416, + 84421, 84425, 84430, 84434, 84438, 84442, 84446, 84450, 84454, 84458, + 84462, 84466, 84470, 84474, 84479, 84483, 84487, 84491, 84495, 84499, + 84503, 84507, 84511, 84515, 84519, 84523, 84528, 84532, 84536, 84541, + 84546, 84550, 84554, 84558, 84562, 84566, 84570, 84574, 84578, 84583, + 84587, 84592, 84596, 84601, 84605, 84610, 84614, 84620, 84625, 84629, + 84634, 84638, 84643, 84647, 84652, 84656, 84661, 1519, 84665, 2873, 1774, + 1692, 27705, 84669, 2882, 84673, 1381, 84678, 1323, 84682, 84686, 2899, + 84690, 84697, 84704, 84718, 2903, 7452, 84727, 84735, 84742, 84753, + 84762, 84769, 84781, 84794, 84807, 84818, 84823, 84830, 84842, 84846, + 2907, 12850, 84856, 84861, 84870, 84880, 84885, 2911, 84893, 84897, + 84902, 84909, 84915, 84923, 84935, 1328, 14201, 84945, 84949, 84955, + 84969, 84981, 84993, 85003, 85012, 85021, 85030, 85038, 85049, 85057, + 4292, 85067, 85078, 85087, 85093, 85108, 85115, 85121, 85126, 38447, + 85131, 2935, 14205, 85135, 85142, 9409, 85151, 2940, 34796, 85157, 65573, + 85164, 85170, 85181, 85187, 85194, 85200, 85208, 85215, 85221, 85232, + 85242, 85251, 85262, 85271, 85278, 85284, 85294, 85302, 85308, 85323, + 85329, 85334, 85341, 85344, 85350, 85357, 85363, 85371, 85380, 85388, + 85394, 85403, 46261, 85417, 85422, 85428, 16072, 85433, 85446, 85458, + 85467, 85475, 85482, 85486, 85490, 85493, 85500, 85507, 85515, 85523, + 85532, 85540, 15983, 85548, 85553, 85557, 85569, 85576, 85585, 841, + 85595, 85604, 85615, 2956, 85619, 85623, 85629, 85642, 85654, 85664, + 85673, 85685, 28446, 85696, 85704, 85713, 85724, 85735, 85745, 85755, + 85764, 85772, 12364, 85779, 85783, 85786, 85791, 85796, 85800, 85806, + 1333, 85813, 85817, 12932, 85821, 85832, 85841, 85849, 85858, 85866, + 85882, 85893, 85902, 85910, 85922, 85933, 85949, 85959, 85980, 85994, + 86007, 86015, 86022, 7498, 86035, 86040, 86046, 6203, 86052, 86055, + 86062, 86072, 8554, 86079, 86084, 86089, 86094, 86102, 86111, 86119, + 86124, 86131, 10496, 10505, 86137, 86148, 86153, 86159, 2972, 2977, + 86165, 11857, 86171, 86178, 86185, 86198, 2281, 87, 86203, 86208, 86216, + 86226, 86235, 86241, 86250, 86258, 86268, 86272, 86276, 86281, 86285, + 86297, 3000, 86305, 86313, 86318, 86329, 86340, 86352, 86363, 86373, + 86382, 23083, 86387, 86393, 86398, 86408, 86418, 86423, 86429, 86433, + 86438, 86447, 23095, 86451, 4384, 24, 86456, 86465, 86472, 86479, 86485, + 86491, 1049, 86496, 86501, 66128, 86506, 86511, 86517, 86523, 86531, + 86536, 86544, 86551, 86557, 86562, 42464, 46155, 86568, 3004, 32, 86578, + 86591, 86596, 86604, 86609, 86615, 3026, 30497, 86620, 86628, 86635, + 86640, 86649, 63492, 4018, 67218, 86657, 86661, 1719, 1833, 86666, 86671, + 86678, 1837, 280, 86685, 86691, 86696, 3048, 86700, 86705, 86712, 1841, + 86717, 86723, 86728, 86740, 6430, 86750, 86757, 1848, 86763, 86768, + 86775, 86782, 86797, 86804, 86815, 86820, 86828, 2657, 86832, 86844, + 86849, 86853, 86859, 30313, 2286, 86863, 86874, 86878, 86882, 86888, + 86892, 86901, 86905, 86916, 86920, 2332, 34613, 86924, 86934, 3139, + 86942, 9909, 86951, 86956, 86960, 86969, 86976, 86982, 3109, 16136, + 86986, 86999, 87017, 87022, 87030, 87038, 87048, 10768, 14318, 87060, + 87073, 87080, 87094, 87101, 87117, 87124, 87130, 23127, 13556, 87137, + 87144, 87154, 87163, 46990, 87175, 47125, 87183, 87186, 87192, 87198, + 87204, 87210, 87216, 87223, 87230, 87236, 87242, 87248, 87254, 87260, + 87266, 87272, 87278, 87284, 87290, 87296, 87302, 87308, 87314, 87320, + 87326, 87332, 87338, 87344, 87350, 87356, 87362, 87368, 87374, 87380, + 87386, 87392, 87398, 87404, 87410, 87416, 87422, 87428, 87434, 87440, + 87446, 87452, 87458, 87464, 87470, 87476, 87482, 87488, 87494, 87500, + 87506, 87512, 87518, 87524, 87530, 87536, 87543, 87549, 87556, 87563, + 87569, 87576, 87583, 87589, 87595, 87601, 87607, 87613, 87619, 87625, + 87631, 87637, 87643, 87649, 87655, 87661, 87667, 87673, 3123, 9882, + 87679, 87685, 87693, 87697, 84905, 3127, 87701, 22860, 13189, 3968, + 87705, 3133, 87709, 87719, 87725, 87731, 87737, 87743, 87749, 87755, + 87761, 87767, 87773, 87779, 87785, 87791, 87797, 87803, 87809, 87815, + 87821, 87827, 87833, 87839, 87845, 87851, 87857, 87863, 87869, 87876, + 87883, 87889, 87895, 87901, 87907, 87913, 87919, 1338, 87925, 87930, + 87935, 87940, 87945, 87950, 87955, 87960, 87965, 87969, 87973, 87977, + 87981, 87985, 87989, 87993, 87997, 88001, 88007, 88013, 88019, 88025, + 88029, 88033, 88037, 88041, 88045, 88049, 88053, 88057, 88061, 88066, + 88071, 88076, 88081, 88086, 88091, 88096, 88101, 88106, 88111, 88116, + 88121, 88126, 88131, 88136, 88141, 88146, 88151, 88156, 88161, 88166, + 88171, 88176, 88181, 88186, 88191, 88196, 88201, 88206, 88211, 88216, + 88221, 88226, 88231, 88236, 88241, 88246, 88251, 88256, 88261, 88266, + 88271, 88276, 88281, 88286, 88291, 88296, 88301, 88306, 88311, 88316, + 88321, 88326, 88331, 88336, 88341, 88346, 88351, 88356, 88361, 88366, + 88371, 88376, 88381, 88386, 88391, 88396, 88401, 88406, 88411, 88416, + 88421, 88426, 88431, 88436, 88441, 88446, 88451, 88456, 88461, 88466, + 88471, 88476, 88481, 88486, 88491, 88496, 88501, 88506, 88511, 88516, + 88521, 88526, 88531, 88536, 88541, 88546, 88551, 88556, 88561, 88566, + 88571, 88576, 88581, 88586, 88591, 88596, 88601, 88606, 88611, 88616, + 88621, 88626, 88631, 88636, 88641, 88646, 88651, 88656, 88661, 88666, + 88671, 88676, 88681, 88686, 88691, 88696, 88701, 88706, 88711, 88716, + 88721, 88726, 88731, 88736, 88741, 88746, 88751, 88756, 88761, 88766, + 88771, 88776, 88781, 88786, 88791, 88796, 88801, 88806, 88811, 88816, + 88821, 88826, 88831, 88836, 88841, 88846, 88851, 88856, 88861, 88866, + 88871, 88876, 88881, 88886, 88891, 88896, 88901, 88906, 88911, 88916, + 88921, 88926, 88931, 88936, 88941, 88946, 88951, 88957, 88962, 88967, + 88972, 88977, 88982, 88987, 88992, 88998, 89003, 89008, 89013, 89018, + 89023, 89028, 89033, 89038, 89043, 89048, 89053, 89058, 89063, 89068, + 89073, 89078, 89083, 89088, 89093, 89098, 89103, 89108, 89113, 89118, + 89123, 89128, 89133, 89138, 89143, 89148, 89153, 89158, 89167, 89172, + 89181, 89186, 89195, 89200, 89209, 89214, 89223, 89228, 89237, 89242, + 89251, 89256, 89265, 89270, 89275, 89284, 89288, 89297, 89302, 89311, + 89316, 89325, 89330, 89339, 89344, 89353, 89358, 89367, 89372, 89381, + 89386, 89395, 89400, 89409, 89414, 89423, 89428, 89433, 89438, 89443, + 89448, 89453, 89458, 89462, 89467, 89472, 89477, 89482, 89487, 89492, + 89498, 89503, 89508, 89513, 89519, 89523, 89528, 89534, 89539, 89544, + 89549, 89554, 89559, 89564, 89569, 89574, 89579, 89584, 89590, 89595, + 89600, 89605, 89611, 89616, 89621, 89626, 89631, 89637, 89642, 89647, + 89652, 89657, 89662, 89668, 89673, 89678, 89683, 89688, 89693, 89698, + 89703, 89708, 89713, 89718, 89723, 89728, 89733, 89738, 89743, 89748, + 89753, 89758, 89763, 89768, 89773, 89778, 89783, 89789, 89795, 89801, + 89806, 89811, 89816, 89821, 89827, 89833, 89839, 89844, 89849, 89854, + 89860, 89865, 89870, 89875, 89880, 89885, 89890, 89895, 89900, 89905, + 89910, 89915, 89920, 89925, 89930, 89935, 89940, 89946, 89952, 89958, + 89963, 89968, 89973, 89978, 89984, 89990, 89996, 90001, 90006, 90011, + 90016, 90021, 90026, 90031, 90036, 90041, 17539, 90046, 90052, 90057, + 90062, 90067, 90072, 90077, 90083, 90088, 90093, 90098, 90103, 90108, + 90114, 90119, 90124, 90129, 90134, 90139, 90144, 90149, 90154, 90159, + 90164, 90169, 90174, 90179, 90184, 90189, 90194, 90199, 90204, 90209, + 90214, 90219, 90224, 90230, 90235, 90240, 90245, 90250, 90255, 90260, + 90265, 90270, 90275, 90280, 90285, 90290, 90295, 90300, 90305, 90310, + 90315, 90320, 90325, 90330, 90335, 90340, 90345, 90350, 90355, 90360, + 90365, 90370, 90375, 90380, 90385, 90390, 90395, 90400, 90405, 90410, + 90415, 90420, 90425, 90430, 90436, 90441, 90446, 90451, 90456, 90461, + 90466, 90471, 90476, 90481, 90486, 90491, 90497, 90502, 90508, 90513, + 90518, 90523, 90528, 90533, 90538, 90544, 90549, 90554, 90560, 90565, + 90570, 90575, 90580, 90585, 90591, 90597, 90602, 90607, 13211, 90612, + 90617, 90622, 90627, 90632, 90637, 90642, 90647, 90652, 90657, 90662, + 90667, 90672, 90677, 90682, 90687, 90692, 90697, 90702, 90707, 90712, + 90717, 90722, 90727, 90732, 90737, 90742, 90747, 90752, 90757, 90762, + 90767, 90772, 90777, 90782, 90787, 90792, 90797, 90802, 90807, 90812, + 90817, 90822, 90827, 90832, 90837, 90842, 90847, 90852, 90857, 90862, + 90867, 90872, 90877, 90882, 90887, 90892, 90897, 90902, 90907, 90912, + 90917, 90922, 90927, 90932, 90938, 90943, 90948, 90953, 90958, 90964, + 90969, 90974, 90979, 90984, 90989, 90994, 91000, 91005, 91010, 91015, + 91020, 91025, 91031, 91036, 91041, 91046, 91051, 91056, 91062, 91067, + 91072, 91077, 91082, 91087, 91093, 91099, 91104, 91109, 91114, 91120, + 91126, 91132, 91137, 91142, 91148, 91154, 91159, 91165, 91171, 91177, + 91182, 91187, 91193, 91198, 91204, 91209, 91215, 91224, 91229, 91234, + 91240, 91245, 91251, 91256, 91261, 91266, 91271, 91276, 91281, 91286, + 91291, 91296, 91301, 91306, 91311, 91316, 91321, 91326, 91331, 91336, + 91341, 91346, 91351, 91356, 91361, 91366, 91371, 91376, 91381, 91386, + 91391, 91396, 91401, 91406, 91412, 91418, 91424, 91429, 91434, 91439, + 91444, 91449, 91454, 91459, 91464, 91469, 91474, 91479, 91484, 91489, + 91494, 91499, 91504, 91509, 91514, 91519, 91524, 91530, 91536, 91541, + 91547, 91552, 91557, 91563, 91568, 91574, 91579, 91585, 91590, 91596, + 91601, 91607, 91612, 91617, 91622, 91627, 91632, 91637, 91642, 87720, + 87726, 87732, 87738, 91648, 87744, 87750, 91654, 87756, 87762, 87768, + 87774, 87780, 87786, 87792, 87798, 87804, 91660, 87810, 87816, 87822, + 91666, 87828, 87834, 87840, 87846, 91672, 87852, 87858, 87864, 87884, + 91678, 91684, 87890, 91690, 87896, 87902, 87908, 87914, 87920, 3150, + 3155, 91696, 91701, 91704, 91710, 91716, 91723, 91728, 91733, 2337, }; /* code->name phrasebook */ #define phrasebook_shift 8 -#define phrasebook_short 204 +#define phrasebook_short 201 static unsigned char phrasebook[] = { - 0, 214, 153, 242, 168, 83, 219, 180, 83, 43, 53, 245, 35, 53, 221, 131, - 53, 252, 125, 252, 53, 47, 221, 216, 48, 221, 216, 251, 209, 101, 53, - 247, 155, 237, 238, 241, 82, 213, 251, 214, 180, 18, 205, 85, 18, 102, - 18, 105, 18, 142, 18, 139, 18, 168, 18, 184, 18, 195, 18, 193, 18, 200, - 247, 162, 216, 52, 230, 10, 53, 242, 242, 53, 239, 230, 53, 219, 196, 83, - 247, 153, 251, 199, 7, 6, 1, 62, 7, 6, 1, 251, 150, 7, 6, 1, 249, 34, 7, - 6, 1, 246, 240, 7, 6, 1, 75, 7, 6, 1, 242, 139, 7, 6, 1, 241, 55, 7, 6, - 1, 239, 155, 7, 6, 1, 74, 7, 6, 1, 232, 203, 7, 6, 1, 232, 76, 7, 6, 1, - 149, 7, 6, 1, 229, 28, 7, 6, 1, 226, 33, 7, 6, 1, 76, 7, 6, 1, 222, 67, - 7, 6, 1, 220, 27, 7, 6, 1, 137, 7, 6, 1, 182, 7, 6, 1, 213, 10, 7, 6, 1, - 71, 7, 6, 1, 209, 148, 7, 6, 1, 207, 129, 7, 6, 1, 206, 195, 7, 6, 1, - 206, 123, 7, 6, 1, 205, 159, 47, 49, 145, 218, 225, 214, 180, 48, 49, - 145, 247, 228, 253, 21, 114, 229, 205, 239, 237, 253, 21, 7, 5, 1, 62, 7, - 5, 1, 251, 150, 7, 5, 1, 249, 34, 7, 5, 1, 246, 240, 7, 5, 1, 75, 7, 5, - 1, 242, 139, 7, 5, 1, 241, 55, 7, 5, 1, 239, 155, 7, 5, 1, 74, 7, 5, 1, - 232, 203, 7, 5, 1, 232, 76, 7, 5, 1, 149, 7, 5, 1, 229, 28, 7, 5, 1, 226, - 33, 7, 5, 1, 76, 7, 5, 1, 222, 67, 7, 5, 1, 220, 27, 7, 5, 1, 137, 7, 5, - 1, 182, 7, 5, 1, 213, 10, 7, 5, 1, 71, 7, 5, 1, 209, 148, 7, 5, 1, 207, - 129, 7, 5, 1, 206, 195, 7, 5, 1, 206, 123, 7, 5, 1, 205, 159, 47, 247, - 26, 145, 79, 229, 205, 48, 247, 26, 145, 211, 180, 224, 66, 214, 153, - 233, 2, 242, 168, 83, 248, 131, 53, 220, 165, 53, 247, 25, 53, 206, 43, - 53, 249, 111, 134, 217, 77, 53, 245, 166, 247, 94, 53, 242, 9, 222, 118, - 233, 49, 230, 41, 50, 252, 109, 219, 180, 83, 224, 43, 53, 214, 187, 237, - 239, 219, 23, 53, 228, 13, 245, 245, 53, 220, 217, 53, 213, 139, 105, - 213, 139, 142, 253, 9, 253, 21, 226, 252, 53, 221, 12, 53, 226, 247, 245, - 23, 248, 141, 213, 139, 102, 227, 179, 222, 118, 233, 49, 218, 162, 50, - 252, 109, 219, 180, 83, 207, 146, 241, 116, 119, 219, 204, 207, 146, 241, - 116, 119, 239, 121, 207, 146, 241, 116, 129, 219, 202, 233, 2, 219, 196, - 83, 7, 6, 1, 32, 2, 239, 236, 7, 6, 1, 32, 2, 153, 7, 6, 1, 32, 2, 247, - 227, 7, 6, 1, 32, 2, 211, 180, 7, 6, 1, 32, 2, 245, 166, 7, 6, 1, 32, 2, - 218, 149, 52, 7, 6, 1, 252, 248, 7, 6, 1, 249, 35, 2, 248, 141, 7, 6, 1, - 174, 2, 239, 236, 7, 6, 1, 174, 2, 153, 7, 6, 1, 174, 2, 247, 227, 7, 6, - 1, 174, 2, 245, 166, 7, 6, 1, 237, 225, 2, 239, 236, 7, 6, 1, 237, 225, - 2, 153, 7, 6, 1, 237, 225, 2, 247, 227, 7, 6, 1, 237, 225, 2, 245, 166, - 7, 6, 1, 242, 196, 7, 6, 1, 226, 34, 2, 211, 180, 7, 6, 1, 148, 2, 239, - 236, 7, 6, 1, 148, 2, 153, 7, 6, 1, 148, 2, 247, 227, 7, 6, 1, 148, 2, - 211, 180, 7, 6, 1, 148, 2, 245, 166, 226, 94, 53, 7, 6, 1, 148, 2, 91, 7, - 6, 1, 106, 2, 239, 236, 7, 6, 1, 106, 2, 153, 7, 6, 1, 106, 2, 247, 227, - 7, 6, 1, 106, 2, 245, 166, 7, 6, 1, 206, 124, 2, 153, 7, 6, 1, 211, 246, - 7, 5, 1, 215, 228, 182, 7, 5, 1, 32, 2, 239, 236, 7, 5, 1, 32, 2, 153, 7, - 5, 1, 32, 2, 247, 227, 7, 5, 1, 32, 2, 211, 180, 7, 5, 1, 32, 2, 245, - 166, 7, 5, 1, 32, 2, 218, 149, 52, 7, 5, 1, 252, 248, 7, 5, 1, 249, 35, - 2, 248, 141, 7, 5, 1, 174, 2, 239, 236, 7, 5, 1, 174, 2, 153, 7, 5, 1, - 174, 2, 247, 227, 7, 5, 1, 174, 2, 245, 166, 7, 5, 1, 237, 225, 2, 239, - 236, 7, 5, 1, 237, 225, 2, 153, 7, 5, 1, 237, 225, 2, 247, 227, 7, 5, 1, - 237, 225, 2, 245, 166, 7, 5, 1, 242, 196, 7, 5, 1, 226, 34, 2, 211, 180, - 7, 5, 1, 148, 2, 239, 236, 7, 5, 1, 148, 2, 153, 7, 5, 1, 148, 2, 247, - 227, 7, 5, 1, 148, 2, 211, 180, 7, 5, 1, 148, 2, 245, 166, 245, 75, 53, - 7, 5, 1, 148, 2, 91, 7, 5, 1, 106, 2, 239, 236, 7, 5, 1, 106, 2, 153, 7, - 5, 1, 106, 2, 247, 227, 7, 5, 1, 106, 2, 245, 166, 7, 5, 1, 206, 124, 2, - 153, 7, 5, 1, 211, 246, 7, 5, 1, 206, 124, 2, 245, 166, 7, 6, 1, 32, 2, - 228, 13, 7, 5, 1, 32, 2, 228, 13, 7, 6, 1, 32, 2, 249, 122, 7, 5, 1, 32, - 2, 249, 122, 7, 6, 1, 32, 2, 222, 196, 7, 5, 1, 32, 2, 222, 196, 7, 6, 1, - 249, 35, 2, 153, 7, 5, 1, 249, 35, 2, 153, 7, 6, 1, 249, 35, 2, 247, 227, - 7, 5, 1, 249, 35, 2, 247, 227, 7, 6, 1, 249, 35, 2, 67, 52, 7, 5, 1, 249, - 35, 2, 67, 52, 7, 6, 1, 249, 35, 2, 248, 195, 7, 5, 1, 249, 35, 2, 248, - 195, 7, 6, 1, 246, 241, 2, 248, 195, 7, 5, 1, 246, 241, 2, 248, 195, 7, - 6, 1, 246, 241, 2, 91, 7, 5, 1, 246, 241, 2, 91, 7, 6, 1, 174, 2, 228, - 13, 7, 5, 1, 174, 2, 228, 13, 7, 6, 1, 174, 2, 249, 122, 7, 5, 1, 174, 2, - 249, 122, 7, 6, 1, 174, 2, 67, 52, 7, 5, 1, 174, 2, 67, 52, 7, 6, 1, 174, - 2, 222, 196, 7, 5, 1, 174, 2, 222, 196, 7, 6, 1, 174, 2, 248, 195, 7, 5, - 1, 174, 2, 248, 195, 7, 6, 1, 241, 56, 2, 247, 227, 7, 5, 1, 241, 56, 2, - 247, 227, 7, 6, 1, 241, 56, 2, 249, 122, 7, 5, 1, 241, 56, 2, 249, 122, - 7, 6, 1, 241, 56, 2, 67, 52, 7, 5, 1, 241, 56, 2, 67, 52, 7, 6, 1, 241, - 56, 2, 248, 141, 7, 5, 1, 241, 56, 2, 248, 141, 7, 6, 1, 239, 156, 2, - 247, 227, 7, 5, 1, 239, 156, 2, 247, 227, 7, 6, 1, 239, 156, 2, 91, 7, 5, - 1, 239, 156, 2, 91, 7, 6, 1, 237, 225, 2, 211, 180, 7, 5, 1, 237, 225, 2, - 211, 180, 7, 6, 1, 237, 225, 2, 228, 13, 7, 5, 1, 237, 225, 2, 228, 13, - 7, 6, 1, 237, 225, 2, 249, 122, 7, 5, 1, 237, 225, 2, 249, 122, 7, 6, 1, - 237, 225, 2, 222, 196, 7, 5, 1, 237, 225, 2, 222, 196, 7, 6, 1, 237, 225, - 2, 67, 52, 7, 5, 1, 245, 22, 74, 7, 6, 28, 233, 100, 7, 5, 28, 233, 100, - 7, 6, 1, 232, 204, 2, 247, 227, 7, 5, 1, 232, 204, 2, 247, 227, 7, 6, 1, - 232, 77, 2, 248, 141, 7, 5, 1, 232, 77, 2, 248, 141, 7, 5, 1, 231, 2, 7, - 6, 1, 230, 159, 2, 153, 7, 5, 1, 230, 159, 2, 153, 7, 6, 1, 230, 159, 2, - 248, 141, 7, 5, 1, 230, 159, 2, 248, 141, 7, 6, 1, 230, 159, 2, 248, 195, - 7, 5, 1, 230, 159, 2, 248, 195, 7, 6, 1, 230, 159, 2, 226, 247, 245, 23, - 7, 5, 1, 230, 159, 2, 226, 247, 245, 23, 7, 6, 1, 230, 159, 2, 91, 7, 5, - 1, 230, 159, 2, 91, 7, 6, 1, 226, 34, 2, 153, 7, 5, 1, 226, 34, 2, 153, - 7, 6, 1, 226, 34, 2, 248, 141, 7, 5, 1, 226, 34, 2, 248, 141, 7, 6, 1, - 226, 34, 2, 248, 195, 7, 5, 1, 226, 34, 2, 248, 195, 7, 5, 1, 226, 34, - 220, 141, 249, 46, 252, 53, 7, 6, 1, 243, 28, 7, 5, 1, 243, 28, 7, 6, 1, - 148, 2, 228, 13, 7, 5, 1, 148, 2, 228, 13, 7, 6, 1, 148, 2, 249, 122, 7, - 5, 1, 148, 2, 249, 122, 7, 6, 1, 148, 2, 50, 153, 7, 5, 1, 148, 2, 50, - 153, 7, 6, 28, 222, 206, 7, 5, 28, 222, 206, 7, 6, 1, 219, 150, 2, 153, - 7, 5, 1, 219, 150, 2, 153, 7, 6, 1, 219, 150, 2, 248, 141, 7, 5, 1, 219, - 150, 2, 248, 141, 7, 6, 1, 219, 150, 2, 248, 195, 7, 5, 1, 219, 150, 2, - 248, 195, 7, 6, 1, 218, 1, 2, 153, 7, 5, 1, 218, 1, 2, 153, 7, 6, 1, 218, - 1, 2, 247, 227, 7, 5, 1, 218, 1, 2, 247, 227, 7, 6, 1, 218, 1, 2, 248, - 141, 7, 5, 1, 218, 1, 2, 248, 141, 7, 6, 1, 218, 1, 2, 248, 195, 7, 5, 1, - 218, 1, 2, 248, 195, 7, 6, 1, 213, 11, 2, 248, 141, 7, 5, 1, 213, 11, 2, - 248, 141, 7, 6, 1, 213, 11, 2, 248, 195, 7, 5, 1, 213, 11, 2, 248, 195, - 7, 6, 1, 213, 11, 2, 91, 7, 5, 1, 213, 11, 2, 91, 7, 6, 1, 106, 2, 211, - 180, 7, 5, 1, 106, 2, 211, 180, 7, 6, 1, 106, 2, 228, 13, 7, 5, 1, 106, - 2, 228, 13, 7, 6, 1, 106, 2, 249, 122, 7, 5, 1, 106, 2, 249, 122, 7, 6, - 1, 106, 2, 218, 149, 52, 7, 5, 1, 106, 2, 218, 149, 52, 7, 6, 1, 106, 2, - 50, 153, 7, 5, 1, 106, 2, 50, 153, 7, 6, 1, 106, 2, 222, 196, 7, 5, 1, - 106, 2, 222, 196, 7, 6, 1, 207, 130, 2, 247, 227, 7, 5, 1, 207, 130, 2, - 247, 227, 7, 6, 1, 206, 124, 2, 247, 227, 7, 5, 1, 206, 124, 2, 247, 227, - 7, 6, 1, 206, 124, 2, 245, 166, 7, 6, 1, 205, 160, 2, 153, 7, 5, 1, 205, - 160, 2, 153, 7, 6, 1, 205, 160, 2, 67, 52, 7, 5, 1, 205, 160, 2, 67, 52, - 7, 6, 1, 205, 160, 2, 248, 195, 7, 5, 1, 205, 160, 2, 248, 195, 7, 5, 1, - 152, 182, 7, 5, 1, 63, 2, 91, 7, 6, 1, 63, 2, 109, 7, 6, 1, 63, 2, 211, - 99, 7, 5, 1, 63, 2, 211, 99, 7, 6, 1, 135, 184, 7, 5, 1, 135, 184, 7, 6, - 1, 222, 142, 76, 7, 6, 1, 249, 35, 2, 109, 7, 5, 1, 249, 35, 2, 109, 7, - 6, 1, 252, 223, 246, 240, 7, 6, 1, 246, 241, 2, 109, 7, 6, 1, 246, 241, - 2, 211, 99, 7, 5, 1, 246, 241, 2, 211, 99, 7, 5, 1, 201, 245, 227, 7, 6, - 1, 218, 224, 75, 7, 6, 1, 217, 100, 7, 6, 1, 222, 142, 75, 7, 6, 1, 242, - 140, 2, 109, 7, 5, 1, 242, 140, 2, 109, 7, 6, 1, 241, 56, 2, 109, 7, 6, - 1, 240, 215, 7, 5, 1, 238, 17, 7, 6, 1, 232, 249, 7, 6, 1, 237, 225, 2, - 91, 7, 6, 1, 232, 77, 2, 109, 7, 5, 1, 232, 77, 2, 109, 7, 5, 1, 230, - 159, 2, 134, 7, 5, 1, 230, 104, 2, 91, 7, 6, 1, 201, 229, 28, 7, 6, 1, - 226, 34, 2, 47, 109, 7, 5, 1, 226, 34, 2, 152, 48, 230, 34, 7, 6, 1, 148, - 2, 226, 247, 211, 180, 7, 6, 1, 148, 2, 238, 69, 7, 5, 1, 148, 2, 238, - 69, 7, 6, 1, 222, 191, 7, 5, 1, 222, 191, 7, 6, 1, 222, 68, 2, 109, 7, 5, - 1, 222, 68, 2, 109, 7, 1, 205, 216, 7, 6, 1, 135, 105, 7, 5, 1, 135, 105, - 7, 6, 1, 242, 215, 7, 1, 218, 224, 242, 216, 229, 111, 7, 5, 1, 213, 11, - 2, 222, 26, 109, 7, 6, 1, 213, 11, 2, 109, 7, 5, 1, 213, 11, 2, 109, 7, - 6, 1, 213, 11, 2, 218, 230, 109, 7, 6, 1, 106, 2, 238, 69, 7, 5, 1, 106, - 2, 238, 69, 7, 6, 1, 209, 200, 7, 6, 1, 209, 149, 2, 109, 7, 6, 1, 206, - 124, 2, 109, 7, 5, 1, 206, 124, 2, 109, 7, 6, 1, 205, 160, 2, 91, 7, 5, - 1, 205, 160, 2, 91, 7, 6, 1, 242, 141, 7, 6, 1, 242, 142, 218, 223, 7, 5, - 1, 242, 142, 218, 223, 7, 5, 1, 242, 142, 2, 212, 191, 7, 1, 118, 2, 91, - 7, 6, 1, 135, 168, 7, 5, 1, 135, 168, 7, 1, 233, 2, 240, 25, 213, 252, 2, - 91, 7, 1, 206, 198, 7, 1, 245, 220, 247, 203, 7, 1, 230, 78, 247, 203, 7, - 1, 252, 137, 247, 203, 7, 1, 218, 230, 247, 203, 7, 6, 1, 243, 198, 2, - 248, 195, 7, 6, 1, 246, 241, 2, 5, 1, 205, 160, 2, 248, 195, 7, 5, 1, - 243, 198, 2, 248, 195, 7, 6, 1, 229, 176, 7, 6, 1, 230, 159, 2, 5, 1, - 232, 203, 7, 5, 1, 229, 176, 7, 6, 1, 224, 181, 7, 6, 1, 226, 34, 2, 5, - 1, 232, 203, 7, 5, 1, 224, 181, 7, 6, 1, 32, 2, 248, 195, 7, 5, 1, 32, 2, - 248, 195, 7, 6, 1, 237, 225, 2, 248, 195, 7, 5, 1, 237, 225, 2, 248, 195, - 7, 6, 1, 148, 2, 248, 195, 7, 5, 1, 148, 2, 248, 195, 7, 6, 1, 106, 2, - 248, 195, 7, 5, 1, 106, 2, 248, 195, 7, 6, 1, 106, 2, 245, 167, 23, 228, - 13, 7, 5, 1, 106, 2, 245, 167, 23, 228, 13, 7, 6, 1, 106, 2, 245, 167, - 23, 153, 7, 5, 1, 106, 2, 245, 167, 23, 153, 7, 6, 1, 106, 2, 245, 167, - 23, 248, 195, 7, 5, 1, 106, 2, 245, 167, 23, 248, 195, 7, 6, 1, 106, 2, - 245, 167, 23, 239, 236, 7, 5, 1, 106, 2, 245, 167, 23, 239, 236, 7, 5, 1, - 201, 75, 7, 6, 1, 32, 2, 245, 167, 23, 228, 13, 7, 5, 1, 32, 2, 245, 167, - 23, 228, 13, 7, 6, 1, 32, 2, 67, 84, 23, 228, 13, 7, 5, 1, 32, 2, 67, 84, - 23, 228, 13, 7, 6, 1, 252, 249, 2, 228, 13, 7, 5, 1, 252, 249, 2, 228, - 13, 7, 6, 1, 241, 56, 2, 91, 7, 5, 1, 241, 56, 2, 91, 7, 6, 1, 241, 56, - 2, 248, 195, 7, 5, 1, 241, 56, 2, 248, 195, 7, 6, 1, 232, 77, 2, 248, - 195, 7, 5, 1, 232, 77, 2, 248, 195, 7, 6, 1, 148, 2, 222, 196, 7, 5, 1, - 148, 2, 222, 196, 7, 6, 1, 148, 2, 222, 197, 23, 228, 13, 7, 5, 1, 148, - 2, 222, 197, 23, 228, 13, 7, 6, 1, 242, 142, 2, 248, 195, 7, 5, 1, 242, - 142, 2, 248, 195, 7, 5, 1, 232, 204, 2, 248, 195, 7, 6, 1, 243, 197, 7, - 6, 1, 246, 241, 2, 5, 1, 205, 159, 7, 5, 1, 243, 197, 7, 6, 1, 241, 56, - 2, 153, 7, 5, 1, 241, 56, 2, 153, 7, 6, 1, 238, 14, 7, 6, 1, 206, 198, 7, - 6, 1, 226, 34, 2, 239, 236, 7, 5, 1, 226, 34, 2, 239, 236, 7, 6, 1, 32, - 2, 218, 149, 84, 23, 153, 7, 5, 1, 32, 2, 218, 149, 84, 23, 153, 7, 6, 1, - 252, 249, 2, 153, 7, 5, 1, 252, 249, 2, 153, 7, 6, 1, 148, 2, 213, 225, - 23, 153, 7, 5, 1, 148, 2, 213, 225, 23, 153, 7, 6, 1, 32, 2, 50, 239, - 236, 7, 5, 1, 32, 2, 50, 239, 236, 7, 6, 1, 32, 2, 233, 2, 249, 122, 7, - 5, 1, 32, 2, 233, 2, 249, 122, 7, 6, 1, 174, 2, 50, 239, 236, 7, 5, 1, - 174, 2, 50, 239, 236, 7, 6, 1, 174, 2, 233, 2, 249, 122, 7, 5, 1, 174, 2, - 233, 2, 249, 122, 7, 6, 1, 237, 225, 2, 50, 239, 236, 7, 5, 1, 237, 225, - 2, 50, 239, 236, 7, 6, 1, 237, 225, 2, 233, 2, 249, 122, 7, 5, 1, 237, - 225, 2, 233, 2, 249, 122, 7, 6, 1, 148, 2, 50, 239, 236, 7, 5, 1, 148, 2, - 50, 239, 236, 7, 6, 1, 148, 2, 233, 2, 249, 122, 7, 5, 1, 148, 2, 233, 2, - 249, 122, 7, 6, 1, 219, 150, 2, 50, 239, 236, 7, 5, 1, 219, 150, 2, 50, - 239, 236, 7, 6, 1, 219, 150, 2, 233, 2, 249, 122, 7, 5, 1, 219, 150, 2, - 233, 2, 249, 122, 7, 6, 1, 106, 2, 50, 239, 236, 7, 5, 1, 106, 2, 50, - 239, 236, 7, 6, 1, 106, 2, 233, 2, 249, 122, 7, 5, 1, 106, 2, 233, 2, - 249, 122, 7, 6, 1, 218, 1, 2, 247, 156, 55, 7, 5, 1, 218, 1, 2, 247, 156, - 55, 7, 6, 1, 213, 11, 2, 247, 156, 55, 7, 5, 1, 213, 11, 2, 247, 156, 55, - 7, 6, 1, 205, 234, 7, 5, 1, 205, 234, 7, 6, 1, 239, 156, 2, 248, 195, 7, - 5, 1, 239, 156, 2, 248, 195, 7, 6, 1, 226, 34, 2, 152, 48, 230, 34, 7, 5, - 1, 246, 241, 2, 247, 27, 7, 6, 1, 222, 97, 7, 5, 1, 222, 97, 7, 6, 1, - 205, 160, 2, 109, 7, 5, 1, 205, 160, 2, 109, 7, 6, 1, 32, 2, 67, 52, 7, - 5, 1, 32, 2, 67, 52, 7, 6, 1, 174, 2, 248, 141, 7, 5, 1, 174, 2, 248, - 141, 7, 6, 1, 148, 2, 245, 167, 23, 228, 13, 7, 5, 1, 148, 2, 245, 167, - 23, 228, 13, 7, 6, 1, 148, 2, 211, 181, 23, 228, 13, 7, 5, 1, 148, 2, - 211, 181, 23, 228, 13, 7, 6, 1, 148, 2, 67, 52, 7, 5, 1, 148, 2, 67, 52, - 7, 6, 1, 148, 2, 67, 84, 23, 228, 13, 7, 5, 1, 148, 2, 67, 84, 23, 228, - 13, 7, 6, 1, 206, 124, 2, 228, 13, 7, 5, 1, 206, 124, 2, 228, 13, 7, 5, - 1, 230, 159, 2, 247, 27, 7, 5, 1, 226, 34, 2, 247, 27, 7, 5, 1, 213, 11, - 2, 247, 27, 7, 5, 1, 245, 22, 232, 203, 7, 5, 1, 246, 64, 245, 127, 7, 5, - 1, 219, 215, 245, 127, 7, 6, 1, 32, 2, 91, 7, 6, 1, 249, 35, 2, 91, 7, 5, - 1, 249, 35, 2, 91, 7, 6, 1, 230, 159, 2, 134, 7, 6, 1, 213, 11, 2, 245, - 163, 91, 7, 5, 1, 218, 1, 2, 213, 109, 212, 191, 7, 5, 1, 205, 160, 2, - 213, 109, 212, 191, 7, 6, 1, 240, 25, 213, 251, 7, 5, 1, 240, 25, 213, - 251, 7, 6, 1, 63, 2, 91, 7, 6, 1, 106, 134, 7, 6, 1, 201, 209, 148, 7, 6, - 1, 174, 2, 91, 7, 5, 1, 174, 2, 91, 7, 6, 1, 232, 204, 2, 91, 7, 5, 1, - 232, 204, 2, 91, 7, 6, 1, 5, 220, 28, 2, 238, 130, 212, 191, 7, 5, 1, - 220, 28, 2, 238, 130, 212, 191, 7, 6, 1, 219, 150, 2, 91, 7, 5, 1, 219, - 150, 2, 91, 7, 6, 1, 206, 124, 2, 91, 7, 5, 1, 206, 124, 2, 91, 7, 5, 1, - 201, 62, 7, 5, 1, 252, 144, 7, 5, 1, 201, 252, 144, 7, 5, 1, 63, 2, 109, - 7, 5, 1, 222, 142, 76, 7, 5, 1, 249, 35, 2, 247, 27, 7, 5, 1, 246, 241, - 2, 212, 191, 7, 5, 1, 246, 241, 2, 109, 7, 5, 1, 218, 224, 75, 7, 5, 1, - 217, 100, 7, 5, 1, 217, 101, 2, 109, 7, 5, 1, 222, 142, 75, 7, 5, 1, 218, - 224, 222, 142, 75, 7, 5, 1, 218, 224, 222, 142, 174, 2, 109, 7, 5, 1, - 247, 192, 218, 224, 222, 142, 75, 7, 5, 1, 245, 22, 232, 204, 2, 91, 7, - 5, 1, 241, 56, 2, 109, 7, 5, 1, 121, 241, 55, 7, 1, 5, 6, 241, 55, 7, 5, - 1, 240, 215, 7, 5, 1, 219, 75, 238, 69, 7, 5, 1, 201, 239, 155, 7, 5, 1, - 239, 156, 2, 109, 7, 5, 1, 239, 40, 2, 109, 7, 5, 1, 237, 225, 2, 91, 7, - 5, 1, 232, 249, 7, 1, 5, 6, 74, 7, 5, 1, 230, 159, 2, 226, 247, 211, 180, - 7, 5, 1, 230, 159, 2, 250, 24, 7, 5, 1, 230, 159, 2, 218, 230, 109, 7, 5, - 1, 229, 251, 7, 5, 1, 201, 229, 28, 7, 5, 1, 201, 229, 29, 2, 152, 230, - 34, 7, 5, 1, 229, 29, 2, 109, 7, 5, 1, 226, 34, 2, 47, 109, 7, 5, 1, 226, - 34, 2, 218, 230, 109, 7, 1, 5, 6, 226, 33, 7, 5, 1, 250, 123, 76, 7, 1, - 5, 6, 222, 206, 7, 5, 1, 247, 192, 222, 170, 7, 5, 1, 221, 78, 7, 5, 1, - 201, 137, 7, 5, 1, 201, 219, 150, 2, 152, 230, 34, 7, 5, 1, 201, 219, - 150, 2, 109, 7, 5, 1, 219, 150, 2, 152, 230, 34, 7, 5, 1, 219, 150, 2, - 212, 191, 7, 5, 1, 219, 150, 2, 241, 210, 7, 5, 1, 218, 224, 219, 150, 2, - 241, 210, 7, 1, 5, 6, 137, 7, 1, 5, 6, 233, 2, 137, 7, 5, 1, 218, 1, 2, - 109, 7, 5, 1, 242, 215, 7, 5, 1, 245, 22, 232, 204, 2, 213, 225, 23, 109, - 7, 5, 1, 214, 104, 218, 224, 242, 215, 7, 5, 1, 242, 216, 2, 247, 27, 7, - 5, 1, 201, 213, 10, 7, 5, 1, 213, 11, 2, 218, 230, 109, 7, 5, 1, 106, - 134, 7, 5, 1, 209, 200, 7, 5, 1, 209, 149, 2, 109, 7, 5, 1, 201, 209, - 148, 7, 5, 1, 201, 207, 129, 7, 5, 1, 201, 206, 123, 7, 1, 5, 6, 206, - 123, 7, 5, 1, 205, 160, 2, 218, 230, 109, 7, 5, 1, 205, 160, 2, 247, 27, - 7, 5, 1, 242, 141, 7, 5, 1, 242, 142, 2, 247, 27, 7, 1, 240, 25, 213, - 251, 7, 1, 221, 84, 208, 170, 241, 104, 7, 1, 233, 2, 240, 25, 213, 251, - 7, 1, 213, 232, 249, 34, 7, 1, 249, 228, 247, 203, 7, 1, 5, 6, 251, 150, - 7, 5, 1, 247, 192, 222, 142, 75, 7, 1, 5, 6, 241, 56, 2, 109, 7, 1, 5, 6, - 239, 155, 7, 5, 1, 232, 204, 2, 247, 56, 7, 5, 1, 201, 232, 76, 7, 1, 5, - 6, 149, 7, 5, 1, 220, 28, 2, 109, 7, 1, 240, 25, 213, 252, 2, 91, 7, 1, - 218, 224, 240, 25, 213, 252, 2, 91, 7, 5, 1, 243, 198, 245, 127, 7, 5, 1, - 245, 194, 245, 127, 7, 5, 1, 243, 198, 245, 128, 2, 247, 27, 7, 5, 1, - 210, 245, 245, 127, 7, 5, 1, 212, 85, 245, 127, 7, 5, 1, 212, 138, 245, - 128, 2, 247, 27, 7, 5, 1, 242, 7, 245, 127, 7, 5, 1, 229, 83, 245, 127, - 7, 5, 1, 229, 30, 245, 127, 7, 1, 249, 228, 221, 130, 7, 1, 249, 236, - 221, 130, 7, 5, 1, 201, 239, 156, 2, 241, 210, 7, 5, 1, 201, 239, 156, 2, - 241, 211, 23, 212, 191, 65, 1, 5, 239, 155, 65, 1, 5, 239, 156, 2, 109, - 65, 1, 5, 232, 203, 65, 1, 5, 137, 65, 1, 5, 201, 137, 65, 1, 5, 201, - 219, 150, 2, 109, 65, 1, 5, 6, 233, 2, 137, 65, 1, 5, 207, 129, 65, 1, 5, - 206, 123, 65, 1, 220, 127, 65, 1, 50, 220, 127, 65, 1, 201, 247, 155, 65, - 1, 252, 53, 65, 1, 218, 224, 247, 155, 65, 1, 48, 160, 218, 148, 65, 1, - 47, 160, 218, 148, 65, 1, 240, 25, 213, 251, 65, 1, 218, 224, 240, 25, - 213, 251, 65, 1, 47, 251, 243, 65, 1, 48, 251, 243, 65, 1, 120, 251, 243, - 65, 1, 130, 251, 243, 65, 1, 247, 228, 253, 21, 248, 195, 65, 1, 79, 229, - 205, 65, 1, 228, 13, 65, 1, 253, 9, 253, 21, 65, 1, 239, 237, 253, 21, - 65, 1, 114, 79, 229, 205, 65, 1, 114, 228, 13, 65, 1, 114, 239, 237, 253, - 21, 65, 1, 114, 253, 9, 253, 21, 65, 1, 211, 48, 247, 162, 65, 1, 160, - 211, 48, 247, 162, 65, 1, 248, 127, 48, 160, 218, 148, 65, 1, 248, 127, - 47, 160, 218, 148, 65, 1, 120, 212, 201, 65, 1, 130, 212, 201, 65, 1, - 101, 53, 65, 1, 226, 202, 53, 249, 122, 67, 52, 218, 149, 52, 222, 196, - 5, 211, 180, 50, 253, 9, 253, 21, 65, 1, 218, 209, 109, 65, 1, 247, 60, - 253, 21, 65, 1, 5, 240, 215, 65, 1, 5, 149, 65, 1, 5, 182, 65, 1, 5, 206, - 195, 65, 1, 5, 218, 224, 240, 25, 213, 251, 65, 1, 242, 156, 135, 134, - 65, 1, 127, 135, 134, 65, 1, 226, 249, 135, 134, 65, 1, 114, 135, 134, - 65, 1, 242, 155, 135, 134, 65, 1, 206, 1, 245, 217, 135, 83, 65, 1, 206, - 76, 245, 217, 135, 83, 65, 1, 208, 168, 65, 1, 209, 230, 65, 1, 50, 252, - 53, 65, 1, 114, 130, 251, 243, 65, 1, 114, 120, 251, 243, 65, 1, 114, 47, - 251, 243, 65, 1, 114, 48, 251, 243, 65, 1, 114, 218, 148, 65, 1, 226, - 247, 239, 237, 253, 21, 65, 1, 226, 247, 50, 239, 237, 253, 21, 65, 1, - 226, 247, 50, 253, 9, 253, 21, 65, 1, 114, 211, 180, 65, 1, 219, 81, 247, - 162, 65, 1, 250, 42, 127, 211, 118, 65, 1, 243, 34, 127, 211, 118, 65, 1, - 250, 42, 114, 211, 118, 65, 1, 243, 34, 114, 211, 118, 65, 1, 215, 205, - 65, 1, 222, 142, 215, 205, 65, 1, 114, 47, 45, 36, 239, 237, 253, 21, 36, - 253, 9, 253, 21, 36, 247, 228, 253, 21, 36, 211, 180, 36, 228, 13, 36, - 222, 81, 36, 249, 122, 36, 67, 52, 36, 245, 166, 36, 238, 130, 52, 36, - 218, 149, 52, 36, 50, 253, 9, 253, 21, 36, 248, 195, 36, 79, 229, 206, - 52, 36, 50, 79, 229, 206, 52, 36, 50, 239, 237, 253, 21, 36, 248, 217, - 36, 233, 2, 249, 122, 36, 201, 247, 156, 52, 36, 247, 156, 52, 36, 218, - 224, 247, 156, 52, 36, 247, 156, 84, 218, 167, 36, 239, 237, 253, 22, 55, - 36, 253, 9, 253, 22, 55, 36, 47, 212, 202, 55, 36, 48, 212, 202, 55, 36, - 47, 252, 109, 52, 36, 238, 69, 36, 47, 160, 218, 149, 55, 36, 120, 212, - 202, 55, 36, 130, 212, 202, 55, 36, 101, 3, 55, 36, 226, 202, 3, 55, 36, - 222, 24, 238, 130, 55, 36, 218, 230, 238, 130, 55, 36, 67, 55, 36, 245, - 167, 55, 36, 218, 149, 55, 36, 247, 156, 55, 36, 248, 141, 36, 222, 196, - 36, 79, 229, 206, 55, 36, 249, 116, 55, 36, 233, 2, 50, 252, 20, 55, 36, - 248, 196, 55, 36, 247, 228, 253, 22, 55, 36, 249, 123, 55, 36, 233, 2, - 249, 123, 55, 36, 211, 181, 55, 36, 228, 14, 55, 36, 114, 229, 205, 36, - 50, 114, 229, 205, 36, 211, 181, 222, 82, 36, 215, 144, 213, 225, 222, - 82, 36, 152, 213, 225, 222, 82, 36, 215, 144, 214, 181, 222, 82, 36, 152, - 214, 181, 222, 82, 36, 48, 160, 218, 149, 55, 36, 233, 2, 249, 116, 55, - 36, 49, 55, 36, 217, 85, 55, 36, 206, 196, 52, 36, 79, 211, 180, 36, 50, - 222, 81, 36, 239, 237, 135, 83, 36, 253, 9, 135, 83, 36, 27, 221, 124, - 36, 27, 231, 23, 36, 27, 245, 160, 211, 106, 36, 27, 205, 221, 36, 249, - 116, 52, 36, 242, 242, 3, 55, 36, 50, 79, 229, 206, 55, 36, 47, 252, 109, - 55, 36, 224, 43, 211, 181, 52, 36, 238, 136, 52, 36, 252, 149, 146, 211, - 130, 52, 36, 47, 48, 51, 55, 36, 167, 51, 55, 36, 239, 242, 232, 117, 36, - 48, 251, 244, 52, 36, 47, 160, 218, 149, 52, 36, 242, 4, 36, 206, 196, - 55, 36, 47, 251, 244, 55, 36, 48, 251, 244, 55, 36, 48, 251, 244, 23, - 120, 251, 244, 55, 36, 48, 160, 218, 149, 52, 36, 67, 84, 218, 167, 36, - 251, 210, 55, 36, 50, 218, 149, 55, 36, 205, 31, 52, 36, 50, 249, 123, - 55, 36, 50, 249, 122, 36, 50, 228, 13, 36, 50, 228, 14, 55, 36, 50, 211, - 180, 36, 50, 233, 2, 249, 122, 36, 50, 86, 51, 55, 36, 7, 5, 1, 62, 36, - 7, 5, 1, 75, 36, 7, 5, 1, 74, 36, 7, 5, 1, 76, 36, 7, 5, 1, 71, 36, 7, 5, - 1, 249, 34, 36, 7, 5, 1, 246, 240, 36, 7, 5, 1, 239, 155, 36, 7, 5, 1, - 229, 28, 36, 7, 5, 1, 137, 36, 7, 5, 1, 213, 10, 36, 7, 5, 1, 209, 148, - 36, 7, 5, 1, 206, 195, 27, 6, 1, 239, 28, 27, 5, 1, 239, 28, 27, 6, 1, - 252, 19, 217, 154, 27, 5, 1, 252, 19, 217, 154, 27, 223, 177, 53, 27, - 229, 92, 223, 177, 53, 27, 6, 1, 222, 10, 245, 134, 27, 5, 1, 222, 10, - 245, 134, 27, 205, 221, 27, 5, 218, 224, 229, 64, 215, 64, 93, 27, 5, - 244, 21, 229, 64, 215, 64, 93, 27, 5, 218, 224, 244, 21, 229, 64, 215, - 64, 93, 27, 219, 196, 83, 27, 6, 1, 205, 227, 27, 211, 106, 27, 245, 160, - 211, 106, 27, 6, 1, 252, 145, 2, 211, 106, 27, 252, 96, 212, 109, 27, 6, - 1, 242, 245, 2, 211, 106, 27, 6, 1, 242, 202, 2, 211, 106, 27, 6, 1, 232, - 250, 2, 211, 106, 27, 6, 1, 222, 169, 2, 211, 106, 27, 6, 1, 209, 201, 2, - 211, 106, 27, 6, 1, 222, 171, 2, 211, 106, 27, 5, 1, 232, 250, 2, 245, - 160, 23, 211, 106, 27, 6, 1, 252, 144, 27, 6, 1, 250, 8, 27, 6, 1, 240, - 215, 27, 6, 1, 245, 227, 27, 6, 1, 242, 244, 27, 6, 1, 205, 84, 27, 6, 1, - 242, 201, 27, 6, 1, 212, 23, 27, 6, 1, 232, 249, 27, 6, 1, 232, 14, 27, - 6, 1, 230, 102, 27, 6, 1, 226, 114, 27, 6, 1, 223, 217, 27, 6, 1, 206, - 169, 27, 6, 1, 222, 168, 27, 6, 1, 221, 53, 27, 6, 1, 218, 210, 27, 6, 1, - 215, 63, 27, 6, 1, 212, 151, 27, 6, 1, 209, 200, 27, 6, 1, 221, 78, 27, - 6, 1, 248, 58, 27, 6, 1, 220, 93, 27, 6, 1, 222, 170, 27, 6, 1, 232, 250, - 2, 245, 159, 27, 6, 1, 209, 201, 2, 245, 159, 27, 5, 1, 252, 145, 2, 211, - 106, 27, 5, 1, 242, 245, 2, 211, 106, 27, 5, 1, 242, 202, 2, 211, 106, - 27, 5, 1, 232, 250, 2, 211, 106, 27, 5, 1, 209, 201, 2, 245, 160, 23, - 211, 106, 27, 5, 1, 252, 144, 27, 5, 1, 250, 8, 27, 5, 1, 240, 215, 27, - 5, 1, 245, 227, 27, 5, 1, 242, 244, 27, 5, 1, 205, 84, 27, 5, 1, 242, - 201, 27, 5, 1, 212, 23, 27, 5, 1, 232, 249, 27, 5, 1, 232, 14, 27, 5, 1, - 230, 102, 27, 5, 1, 226, 114, 27, 5, 1, 223, 217, 27, 5, 1, 206, 169, 27, - 5, 1, 222, 168, 27, 5, 1, 221, 53, 27, 5, 1, 218, 210, 27, 5, 1, 42, 215, - 63, 27, 5, 1, 215, 63, 27, 5, 1, 212, 151, 27, 5, 1, 209, 200, 27, 5, 1, - 221, 78, 27, 5, 1, 248, 58, 27, 5, 1, 220, 93, 27, 5, 1, 222, 170, 27, 5, - 1, 232, 250, 2, 245, 159, 27, 5, 1, 209, 201, 2, 245, 159, 27, 5, 1, 222, - 169, 2, 211, 106, 27, 5, 1, 209, 201, 2, 211, 106, 27, 5, 1, 222, 171, 2, - 211, 106, 27, 6, 232, 42, 93, 27, 250, 9, 93, 27, 212, 24, 93, 27, 209, - 201, 2, 238, 130, 93, 27, 209, 201, 2, 253, 9, 23, 238, 130, 93, 27, 209, - 201, 2, 245, 167, 23, 238, 130, 93, 27, 221, 79, 93, 27, 221, 54, 93, 27, - 232, 42, 93, 27, 1, 252, 19, 231, 27, 27, 5, 1, 252, 19, 231, 27, 27, 1, - 214, 5, 27, 5, 1, 214, 5, 27, 1, 245, 134, 27, 5, 1, 245, 134, 27, 1, - 231, 27, 27, 5, 1, 231, 27, 27, 1, 217, 154, 27, 5, 1, 217, 154, 81, 6, - 1, 215, 206, 81, 5, 1, 215, 206, 81, 6, 1, 242, 13, 81, 5, 1, 242, 13, - 81, 6, 1, 231, 150, 81, 5, 1, 231, 150, 81, 6, 1, 238, 122, 81, 5, 1, - 238, 122, 81, 6, 1, 240, 210, 81, 5, 1, 240, 210, 81, 6, 1, 215, 173, 81, - 5, 1, 215, 173, 81, 6, 1, 245, 242, 81, 5, 1, 245, 242, 27, 232, 15, 93, - 27, 218, 211, 93, 27, 229, 64, 215, 64, 93, 27, 1, 205, 227, 27, 6, 212, - 24, 93, 27, 229, 64, 242, 245, 93, 27, 218, 224, 229, 64, 242, 245, 93, - 27, 6, 1, 215, 158, 27, 5, 1, 215, 158, 27, 6, 229, 64, 215, 64, 93, 27, - 6, 1, 217, 151, 27, 5, 1, 217, 151, 27, 218, 211, 2, 213, 225, 93, 27, 6, - 218, 224, 229, 64, 215, 64, 93, 27, 6, 244, 21, 229, 64, 215, 64, 93, 27, - 6, 218, 224, 244, 21, 229, 64, 215, 64, 93, 34, 6, 1, 233, 130, 2, 239, - 236, 34, 6, 1, 232, 253, 34, 6, 1, 245, 68, 34, 6, 1, 240, 32, 34, 6, 1, - 209, 246, 233, 129, 34, 6, 1, 243, 193, 34, 6, 1, 249, 44, 74, 34, 6, 1, - 206, 11, 34, 6, 1, 232, 182, 34, 6, 1, 229, 175, 34, 6, 1, 224, 173, 34, - 6, 1, 210, 231, 34, 6, 1, 231, 74, 34, 6, 1, 237, 225, 2, 239, 236, 34, - 6, 1, 215, 144, 71, 34, 6, 1, 243, 189, 34, 6, 1, 62, 34, 6, 1, 250, 61, - 34, 6, 1, 209, 39, 34, 6, 1, 240, 85, 34, 6, 1, 246, 9, 34, 6, 1, 233, - 129, 34, 6, 1, 205, 72, 34, 6, 1, 205, 93, 34, 6, 1, 74, 34, 6, 1, 215, - 144, 74, 34, 6, 1, 172, 34, 6, 1, 243, 68, 34, 6, 1, 243, 50, 34, 6, 1, - 243, 41, 34, 6, 1, 76, 34, 6, 1, 221, 174, 34, 6, 1, 242, 235, 34, 6, 1, - 242, 225, 34, 6, 1, 212, 131, 34, 6, 1, 71, 34, 6, 1, 243, 97, 34, 6, 1, - 155, 34, 6, 1, 210, 237, 34, 6, 1, 248, 82, 34, 6, 1, 216, 2, 34, 6, 1, - 215, 217, 34, 6, 1, 239, 94, 53, 34, 6, 1, 206, 30, 34, 6, 1, 214, 187, - 53, 34, 6, 1, 75, 34, 6, 1, 205, 213, 34, 6, 1, 190, 34, 5, 1, 62, 34, 5, - 1, 250, 61, 34, 5, 1, 209, 39, 34, 5, 1, 240, 85, 34, 5, 1, 246, 9, 34, - 5, 1, 233, 129, 34, 5, 1, 205, 72, 34, 5, 1, 205, 93, 34, 5, 1, 74, 34, - 5, 1, 215, 144, 74, 34, 5, 1, 172, 34, 5, 1, 243, 68, 34, 5, 1, 243, 50, - 34, 5, 1, 243, 41, 34, 5, 1, 76, 34, 5, 1, 221, 174, 34, 5, 1, 242, 235, - 34, 5, 1, 242, 225, 34, 5, 1, 212, 131, 34, 5, 1, 71, 34, 5, 1, 243, 97, - 34, 5, 1, 155, 34, 5, 1, 210, 237, 34, 5, 1, 248, 82, 34, 5, 1, 216, 2, - 34, 5, 1, 215, 217, 34, 5, 1, 239, 94, 53, 34, 5, 1, 206, 30, 34, 5, 1, - 214, 187, 53, 34, 5, 1, 75, 34, 5, 1, 205, 213, 34, 5, 1, 190, 34, 5, 1, - 233, 130, 2, 239, 236, 34, 5, 1, 232, 253, 34, 5, 1, 245, 68, 34, 5, 1, - 240, 32, 34, 5, 1, 209, 246, 233, 129, 34, 5, 1, 243, 193, 34, 5, 1, 249, - 44, 74, 34, 5, 1, 206, 11, 34, 5, 1, 232, 182, 34, 5, 1, 229, 175, 34, 5, - 1, 224, 173, 34, 5, 1, 210, 231, 34, 5, 1, 231, 74, 34, 5, 1, 237, 225, - 2, 239, 236, 34, 5, 1, 215, 144, 71, 34, 5, 1, 243, 189, 34, 6, 1, 222, - 170, 34, 5, 1, 222, 170, 34, 6, 1, 206, 65, 34, 5, 1, 206, 65, 34, 6, 1, - 232, 247, 75, 34, 5, 1, 232, 247, 75, 34, 6, 1, 229, 180, 205, 183, 34, - 5, 1, 229, 180, 205, 183, 34, 6, 1, 232, 247, 229, 180, 205, 183, 34, 5, - 1, 232, 247, 229, 180, 205, 183, 34, 6, 1, 249, 231, 205, 183, 34, 5, 1, - 249, 231, 205, 183, 34, 6, 1, 232, 247, 249, 231, 205, 183, 34, 5, 1, - 232, 247, 249, 231, 205, 183, 34, 6, 1, 230, 252, 34, 5, 1, 230, 252, 34, - 6, 1, 220, 93, 34, 5, 1, 220, 93, 34, 6, 1, 241, 205, 34, 5, 1, 241, 205, - 34, 6, 1, 232, 205, 34, 5, 1, 232, 205, 34, 6, 1, 232, 206, 2, 50, 239, - 237, 253, 21, 34, 5, 1, 232, 206, 2, 50, 239, 237, 253, 21, 34, 6, 1, - 209, 249, 34, 5, 1, 209, 249, 34, 6, 1, 218, 95, 222, 170, 34, 5, 1, 218, - 95, 222, 170, 34, 6, 1, 222, 171, 2, 211, 154, 34, 5, 1, 222, 171, 2, - 211, 154, 34, 6, 1, 222, 103, 34, 5, 1, 222, 103, 34, 6, 1, 231, 27, 34, - 5, 1, 231, 27, 34, 211, 241, 53, 36, 34, 211, 154, 36, 34, 222, 25, 36, - 34, 246, 76, 220, 213, 36, 34, 220, 87, 220, 213, 36, 34, 220, 197, 36, - 34, 238, 30, 211, 241, 53, 36, 34, 226, 213, 53, 34, 6, 1, 215, 144, 237, - 225, 2, 212, 191, 34, 5, 1, 215, 144, 237, 225, 2, 212, 191, 34, 6, 1, - 216, 48, 53, 34, 5, 1, 216, 48, 53, 34, 6, 1, 242, 236, 2, 211, 207, 34, - 5, 1, 242, 236, 2, 211, 207, 34, 6, 1, 240, 86, 2, 209, 199, 34, 5, 1, - 240, 86, 2, 209, 199, 34, 6, 1, 240, 86, 2, 91, 34, 5, 1, 240, 86, 2, 91, - 34, 6, 1, 240, 86, 2, 226, 247, 109, 34, 5, 1, 240, 86, 2, 226, 247, 109, - 34, 6, 1, 205, 73, 2, 245, 211, 34, 5, 1, 205, 73, 2, 245, 211, 34, 6, 1, - 205, 94, 2, 245, 211, 34, 5, 1, 205, 94, 2, 245, 211, 34, 6, 1, 232, 66, - 2, 245, 211, 34, 5, 1, 232, 66, 2, 245, 211, 34, 6, 1, 232, 66, 2, 79, - 91, 34, 5, 1, 232, 66, 2, 79, 91, 34, 6, 1, 232, 66, 2, 91, 34, 5, 1, - 232, 66, 2, 91, 34, 6, 1, 250, 112, 172, 34, 5, 1, 250, 112, 172, 34, 6, - 1, 243, 42, 2, 245, 211, 34, 5, 1, 243, 42, 2, 245, 211, 34, 6, 28, 243, - 42, 240, 85, 34, 5, 28, 243, 42, 240, 85, 34, 6, 1, 221, 175, 2, 226, - 247, 109, 34, 5, 1, 221, 175, 2, 226, 247, 109, 34, 6, 1, 253, 28, 155, - 34, 5, 1, 253, 28, 155, 34, 6, 1, 242, 226, 2, 245, 211, 34, 5, 1, 242, - 226, 2, 245, 211, 34, 6, 1, 212, 132, 2, 245, 211, 34, 5, 1, 212, 132, 2, - 245, 211, 34, 6, 1, 213, 243, 71, 34, 5, 1, 213, 243, 71, 34, 6, 1, 213, - 243, 106, 2, 91, 34, 5, 1, 213, 243, 106, 2, 91, 34, 6, 1, 239, 144, 2, - 245, 211, 34, 5, 1, 239, 144, 2, 245, 211, 34, 6, 28, 212, 132, 210, 237, - 34, 5, 28, 212, 132, 210, 237, 34, 6, 1, 248, 83, 2, 245, 211, 34, 5, 1, - 248, 83, 2, 245, 211, 34, 6, 1, 248, 83, 2, 79, 91, 34, 5, 1, 248, 83, 2, - 79, 91, 34, 6, 1, 215, 184, 34, 5, 1, 215, 184, 34, 6, 1, 253, 28, 248, - 82, 34, 5, 1, 253, 28, 248, 82, 34, 6, 1, 253, 28, 248, 83, 2, 245, 211, - 34, 5, 1, 253, 28, 248, 83, 2, 245, 211, 34, 1, 222, 17, 34, 6, 1, 205, - 73, 2, 249, 122, 34, 5, 1, 205, 73, 2, 249, 122, 34, 6, 1, 232, 66, 2, - 109, 34, 5, 1, 232, 66, 2, 109, 34, 6, 1, 243, 69, 2, 212, 191, 34, 5, 1, - 243, 69, 2, 212, 191, 34, 6, 1, 243, 42, 2, 109, 34, 5, 1, 243, 42, 2, - 109, 34, 6, 1, 243, 42, 2, 212, 191, 34, 5, 1, 243, 42, 2, 212, 191, 34, - 6, 1, 231, 161, 248, 82, 34, 5, 1, 231, 161, 248, 82, 34, 6, 1, 243, 51, - 2, 212, 191, 34, 5, 1, 243, 51, 2, 212, 191, 34, 5, 1, 222, 17, 34, 6, 1, - 32, 2, 249, 122, 34, 5, 1, 32, 2, 249, 122, 34, 6, 1, 32, 2, 245, 166, - 34, 5, 1, 32, 2, 245, 166, 34, 6, 28, 32, 233, 129, 34, 5, 28, 32, 233, - 129, 34, 6, 1, 233, 130, 2, 249, 122, 34, 5, 1, 233, 130, 2, 249, 122, - 34, 6, 1, 217, 100, 34, 5, 1, 217, 100, 34, 6, 1, 217, 101, 2, 245, 166, - 34, 5, 1, 217, 101, 2, 245, 166, 34, 6, 1, 205, 73, 2, 245, 166, 34, 5, - 1, 205, 73, 2, 245, 166, 34, 6, 1, 205, 94, 2, 245, 166, 34, 5, 1, 205, - 94, 2, 245, 166, 34, 6, 1, 253, 28, 243, 193, 34, 5, 1, 253, 28, 243, - 193, 34, 6, 1, 237, 225, 2, 228, 13, 34, 5, 1, 237, 225, 2, 228, 13, 34, - 6, 1, 237, 225, 2, 245, 166, 34, 5, 1, 237, 225, 2, 245, 166, 34, 6, 1, - 148, 2, 245, 166, 34, 5, 1, 148, 2, 245, 166, 34, 6, 1, 250, 123, 76, 34, - 5, 1, 250, 123, 76, 34, 6, 1, 250, 123, 148, 2, 245, 166, 34, 5, 1, 250, - 123, 148, 2, 245, 166, 34, 6, 1, 174, 2, 245, 166, 34, 5, 1, 174, 2, 245, - 166, 34, 6, 1, 106, 2, 228, 13, 34, 5, 1, 106, 2, 228, 13, 34, 6, 1, 106, - 2, 245, 166, 34, 5, 1, 106, 2, 245, 166, 34, 6, 1, 106, 2, 50, 153, 34, - 5, 1, 106, 2, 50, 153, 34, 6, 1, 248, 83, 2, 245, 166, 34, 5, 1, 248, 83, - 2, 245, 166, 34, 6, 1, 240, 86, 2, 245, 211, 34, 5, 1, 240, 86, 2, 245, - 211, 34, 6, 1, 206, 31, 2, 245, 166, 34, 5, 1, 206, 31, 2, 245, 166, 34, - 6, 1, 240, 86, 2, 213, 225, 23, 109, 34, 5, 1, 240, 86, 2, 213, 225, 23, - 109, 34, 6, 1, 239, 144, 2, 109, 34, 5, 1, 239, 144, 2, 109, 34, 6, 1, - 239, 144, 2, 91, 34, 5, 1, 239, 144, 2, 91, 34, 6, 1, 231, 37, 246, 9, - 34, 5, 1, 231, 37, 246, 9, 34, 6, 1, 231, 37, 245, 68, 34, 5, 1, 231, 37, - 245, 68, 34, 6, 1, 231, 37, 205, 23, 34, 5, 1, 231, 37, 205, 23, 34, 6, - 1, 231, 37, 243, 185, 34, 5, 1, 231, 37, 243, 185, 34, 6, 1, 231, 37, - 229, 175, 34, 5, 1, 231, 37, 229, 175, 34, 6, 1, 231, 37, 224, 173, 34, - 5, 1, 231, 37, 224, 173, 34, 6, 1, 231, 37, 214, 249, 34, 5, 1, 231, 37, - 214, 249, 34, 6, 1, 231, 37, 211, 148, 34, 5, 1, 231, 37, 211, 148, 34, - 6, 1, 218, 224, 205, 93, 34, 5, 1, 218, 224, 205, 93, 34, 6, 1, 243, 69, - 2, 109, 34, 5, 1, 243, 69, 2, 109, 34, 6, 1, 229, 248, 34, 5, 1, 229, - 248, 34, 6, 1, 218, 212, 34, 5, 1, 218, 212, 34, 6, 1, 206, 98, 34, 5, 1, - 206, 98, 34, 6, 1, 220, 19, 34, 5, 1, 220, 19, 34, 6, 1, 207, 51, 34, 5, - 1, 207, 51, 34, 6, 1, 252, 168, 172, 34, 5, 1, 252, 168, 172, 34, 6, 1, - 243, 69, 2, 226, 247, 109, 34, 5, 1, 243, 69, 2, 226, 247, 109, 34, 6, 1, - 243, 42, 2, 226, 247, 109, 34, 5, 1, 243, 42, 2, 226, 247, 109, 34, 6, 1, - 221, 175, 2, 245, 211, 34, 5, 1, 221, 175, 2, 245, 211, 34, 6, 1, 215, - 185, 2, 245, 211, 34, 5, 1, 215, 185, 2, 245, 211, 34, 6, 1, 243, 42, 2, - 47, 109, 34, 5, 1, 243, 42, 2, 47, 109, 34, 6, 1, 243, 178, 34, 5, 1, - 243, 178, 34, 6, 1, 246, 58, 34, 5, 1, 246, 58, 34, 6, 1, 243, 69, 2, - 245, 211, 34, 5, 1, 243, 69, 2, 245, 211, 164, 6, 1, 251, 156, 164, 6, 1, - 250, 22, 164, 6, 1, 240, 49, 164, 6, 1, 246, 145, 164, 6, 1, 243, 108, - 164, 6, 1, 205, 116, 164, 6, 1, 243, 92, 164, 6, 1, 242, 203, 164, 6, 1, - 124, 164, 6, 1, 205, 72, 164, 6, 1, 233, 38, 164, 6, 1, 229, 178, 164, 6, - 1, 206, 173, 164, 6, 1, 249, 1, 164, 6, 1, 231, 203, 164, 6, 1, 238, 149, - 164, 6, 1, 232, 200, 164, 6, 1, 240, 96, 164, 6, 1, 248, 75, 164, 6, 1, - 227, 83, 164, 6, 1, 206, 11, 164, 6, 1, 224, 29, 164, 6, 1, 216, 2, 164, - 6, 1, 208, 173, 164, 6, 1, 248, 110, 164, 6, 1, 221, 157, 164, 6, 1, 232, - 165, 164, 6, 1, 219, 113, 164, 6, 1, 217, 64, 164, 6, 1, 208, 218, 164, - 6, 1, 211, 151, 164, 6, 1, 219, 16, 164, 6, 1, 247, 174, 164, 6, 1, 205, - 252, 164, 6, 1, 220, 244, 164, 6, 1, 231, 214, 164, 6, 1, 222, 194, 164, - 6, 1, 242, 15, 164, 65, 1, 47, 160, 218, 148, 164, 252, 53, 164, 243, 45, - 83, 164, 242, 168, 83, 164, 247, 155, 164, 219, 196, 83, 164, 253, 29, - 83, 164, 5, 1, 251, 156, 164, 5, 1, 250, 22, 164, 5, 1, 240, 49, 164, 5, - 1, 246, 145, 164, 5, 1, 243, 108, 164, 5, 1, 205, 116, 164, 5, 1, 243, - 92, 164, 5, 1, 242, 203, 164, 5, 1, 124, 164, 5, 1, 205, 72, 164, 5, 1, - 233, 38, 164, 5, 1, 229, 178, 164, 5, 1, 206, 173, 164, 5, 1, 249, 1, - 164, 5, 1, 231, 203, 164, 5, 1, 238, 149, 164, 5, 1, 232, 200, 164, 5, 1, - 240, 96, 164, 5, 1, 248, 75, 164, 5, 1, 227, 83, 164, 5, 1, 206, 11, 164, - 5, 1, 224, 29, 164, 5, 1, 216, 2, 164, 5, 1, 208, 173, 164, 5, 1, 248, - 110, 164, 5, 1, 221, 157, 164, 5, 1, 232, 165, 164, 5, 1, 219, 113, 164, - 5, 1, 217, 64, 164, 5, 1, 208, 218, 164, 5, 1, 211, 151, 164, 5, 1, 219, - 16, 164, 5, 1, 247, 174, 164, 5, 1, 205, 252, 164, 5, 1, 220, 244, 164, - 5, 1, 231, 214, 164, 5, 1, 222, 194, 164, 5, 1, 242, 15, 164, 5, 28, 243, - 109, 205, 252, 164, 241, 82, 213, 251, 164, 237, 239, 218, 166, 164, 242, - 199, 53, 230, 45, 164, 242, 199, 53, 164, 243, 254, 53, 103, 253, 22, - 242, 194, 103, 253, 22, 217, 65, 103, 253, 22, 215, 240, 103, 253, 22, - 205, 104, 220, 2, 103, 253, 22, 205, 104, 240, 234, 103, 253, 22, 211, - 165, 103, 253, 22, 218, 221, 103, 253, 22, 205, 102, 103, 253, 22, 221, - 201, 103, 253, 22, 206, 23, 103, 253, 22, 212, 63, 103, 253, 22, 240, - 147, 103, 253, 22, 240, 148, 226, 78, 103, 253, 22, 240, 145, 103, 253, - 22, 220, 3, 221, 230, 103, 253, 22, 212, 104, 240, 163, 103, 253, 22, - 221, 180, 103, 253, 22, 251, 193, 239, 136, 103, 253, 22, 226, 88, 103, - 253, 22, 227, 244, 103, 253, 22, 227, 73, 103, 253, 22, 227, 74, 231, - 215, 103, 253, 22, 246, 85, 103, 253, 22, 220, 14, 103, 253, 22, 212, - 104, 219, 253, 103, 253, 22, 206, 33, 250, 23, 205, 233, 103, 253, 22, - 222, 177, 103, 253, 22, 233, 88, 103, 253, 22, 245, 243, 103, 253, 22, - 205, 29, 103, 141, 227, 174, 247, 233, 103, 220, 205, 215, 187, 103, 220, - 205, 239, 85, 217, 65, 103, 220, 205, 239, 85, 221, 194, 103, 220, 205, - 239, 85, 220, 7, 103, 220, 205, 238, 244, 103, 220, 205, 210, 234, 103, - 220, 205, 217, 65, 103, 220, 205, 221, 194, 103, 220, 205, 220, 7, 103, - 220, 205, 238, 142, 103, 220, 205, 238, 143, 239, 87, 33, 209, 43, 103, - 220, 205, 219, 200, 103, 220, 205, 246, 131, 222, 123, 227, 204, 103, - 220, 205, 227, 62, 103, 220, 72, 227, 201, 103, 220, 205, 219, 93, 103, - 220, 72, 221, 203, 103, 220, 205, 215, 172, 245, 23, 103, 220, 205, 215, - 45, 245, 23, 103, 220, 72, 214, 188, 221, 196, 103, 141, 209, 203, 245, - 23, 103, 141, 229, 92, 245, 23, 103, 220, 72, 223, 174, 239, 135, 103, - 220, 205, 220, 8, 220, 2, 103, 1, 252, 172, 103, 1, 250, 10, 103, 1, 240, - 47, 103, 1, 246, 111, 103, 1, 239, 71, 103, 1, 209, 43, 103, 1, 205, 96, - 103, 1, 239, 29, 103, 1, 212, 80, 103, 1, 205, 236, 103, 1, 42, 232, 45, - 103, 1, 232, 45, 103, 1, 230, 98, 103, 1, 42, 227, 90, 103, 1, 227, 90, - 103, 1, 42, 223, 173, 103, 1, 223, 173, 103, 1, 217, 157, 103, 1, 251, - 154, 103, 1, 42, 221, 174, 103, 1, 221, 174, 103, 1, 42, 210, 238, 103, - 1, 210, 238, 103, 1, 219, 223, 103, 1, 218, 242, 103, 1, 215, 171, 103, - 1, 212, 147, 103, 28, 206, 9, 50, 209, 43, 103, 28, 206, 9, 209, 44, 205, - 236, 103, 28, 206, 9, 50, 205, 236, 103, 220, 72, 240, 147, 103, 220, 72, - 240, 145, 8, 43, 53, 8, 3, 217, 150, 8, 241, 146, 227, 187, 8, 3, 217, - 187, 8, 3, 217, 153, 8, 43, 141, 52, 252, 33, 247, 36, 218, 103, 252, 33, - 241, 118, 218, 103, 8, 219, 58, 252, 33, 221, 132, 226, 215, 53, 252, 33, - 221, 132, 212, 99, 211, 243, 53, 252, 225, 53, 8, 247, 155, 8, 246, 72, - 216, 39, 8, 220, 207, 209, 24, 53, 8, 3, 226, 194, 8, 3, 217, 167, 252, - 175, 207, 75, 8, 3, 252, 175, 251, 214, 8, 3, 219, 91, 252, 174, 8, 3, - 219, 99, 252, 154, 252, 103, 8, 3, 212, 184, 8, 5, 127, 212, 194, 8, 5, - 127, 28, 126, 2, 230, 107, 2, 206, 47, 8, 5, 127, 205, 108, 8, 5, 242, - 39, 8, 5, 246, 106, 8, 5, 231, 252, 8, 216, 52, 8, 1, 83, 8, 211, 36, 67, - 220, 72, 83, 8, 219, 196, 83, 8, 1, 232, 0, 206, 47, 8, 1, 239, 111, 8, - 1, 126, 2, 228, 9, 52, 8, 1, 126, 2, 239, 112, 52, 8, 1, 207, 60, 2, 239, - 112, 52, 8, 1, 126, 2, 239, 112, 55, 8, 1, 87, 2, 239, 112, 52, 8, 1, - 252, 172, 8, 1, 250, 38, 8, 1, 212, 116, 227, 197, 8, 1, 212, 115, 8, 1, - 212, 37, 8, 1, 232, 179, 8, 1, 239, 132, 8, 1, 231, 163, 8, 1, 246, 117, - 8, 1, 212, 49, 8, 1, 219, 16, 8, 1, 205, 108, 8, 1, 217, 70, 8, 1, 215, - 210, 8, 1, 217, 191, 8, 1, 246, 140, 8, 1, 212, 194, 8, 1, 205, 111, 8, - 1, 252, 200, 8, 1, 240, 94, 8, 1, 231, 213, 2, 118, 177, 52, 8, 1, 231, - 213, 2, 129, 177, 55, 8, 1, 242, 42, 87, 2, 233, 2, 209, 148, 8, 1, 242, - 42, 87, 2, 118, 177, 52, 8, 1, 242, 42, 87, 2, 129, 177, 52, 8, 212, 153, - 8, 1, 242, 15, 8, 1, 220, 12, 8, 1, 232, 45, 8, 1, 230, 106, 8, 1, 227, - 104, 8, 1, 224, 54, 8, 1, 239, 50, 8, 1, 207, 59, 8, 1, 126, 227, 228, 8, - 1, 206, 47, 8, 242, 37, 8, 246, 104, 8, 231, 250, 8, 242, 39, 8, 246, - 106, 8, 231, 252, 8, 215, 249, 8, 213, 162, 8, 228, 7, 52, 8, 239, 112, - 52, 8, 239, 112, 55, 8, 213, 183, 252, 172, 8, 233, 2, 246, 106, 8, 141, - 224, 55, 240, 65, 8, 204, 251, 8, 22, 3, 5, 209, 149, 52, 8, 22, 3, 233, - 2, 5, 209, 149, 52, 8, 22, 3, 67, 55, 8, 218, 224, 246, 106, 8, 242, 40, - 2, 118, 245, 21, 8, 207, 61, 239, 112, 55, 252, 33, 18, 205, 85, 252, 33, - 18, 102, 252, 33, 18, 105, 252, 33, 18, 142, 252, 33, 18, 139, 252, 33, - 18, 168, 252, 33, 18, 184, 252, 33, 18, 195, 252, 33, 18, 193, 252, 33, - 18, 200, 8, 221, 131, 53, 8, 246, 2, 216, 39, 8, 211, 241, 216, 39, 8, - 241, 204, 220, 203, 214, 26, 8, 1, 245, 22, 250, 38, 8, 1, 245, 22, 220, - 12, 8, 1, 213, 139, 252, 172, 8, 1, 126, 207, 76, 8, 1, 126, 2, 207, 61, - 239, 112, 52, 8, 1, 126, 2, 207, 61, 239, 112, 55, 8, 1, 127, 239, 111, - 8, 1, 127, 239, 112, 252, 172, 8, 1, 127, 239, 112, 207, 59, 8, 1, 106, - 2, 239, 112, 52, 8, 1, 127, 239, 112, 206, 47, 8, 1, 210, 200, 8, 1, 210, - 198, 8, 1, 250, 48, 8, 1, 212, 116, 2, 218, 148, 8, 1, 212, 116, 2, 129, - 177, 84, 244, 6, 8, 1, 221, 157, 8, 1, 212, 113, 8, 1, 250, 36, 8, 1, - 140, 2, 239, 112, 52, 8, 1, 140, 2, 118, 177, 79, 52, 8, 1, 223, 131, 8, - 1, 243, 201, 8, 1, 140, 2, 129, 177, 52, 8, 1, 212, 135, 8, 1, 212, 133, - 8, 1, 246, 49, 8, 1, 246, 118, 2, 218, 148, 8, 1, 246, 118, 2, 67, 55, 8, - 1, 246, 118, 2, 67, 250, 26, 23, 5, 212, 194, 8, 1, 246, 124, 8, 1, 246, - 51, 8, 1, 243, 229, 8, 1, 246, 118, 2, 129, 177, 84, 244, 6, 8, 1, 246, - 118, 2, 241, 125, 177, 52, 8, 1, 218, 81, 8, 1, 219, 17, 2, 5, 209, 148, - 8, 1, 219, 17, 2, 218, 148, 8, 1, 219, 17, 2, 67, 55, 8, 1, 219, 17, 2, - 5, 209, 149, 55, 8, 1, 219, 17, 2, 67, 250, 26, 23, 67, 52, 8, 1, 219, - 17, 2, 118, 177, 52, 8, 1, 232, 176, 8, 1, 219, 17, 2, 241, 125, 177, 52, - 8, 1, 217, 71, 2, 67, 250, 26, 23, 67, 52, 8, 1, 217, 71, 2, 129, 177, - 55, 8, 1, 217, 71, 2, 129, 177, 250, 26, 23, 129, 177, 52, 8, 1, 217, - 192, 2, 118, 177, 55, 8, 1, 217, 192, 2, 129, 177, 52, 8, 1, 212, 195, 2, - 129, 177, 52, 8, 1, 252, 201, 2, 129, 177, 52, 8, 1, 245, 22, 242, 15, 8, - 1, 242, 16, 2, 67, 226, 122, 55, 8, 1, 242, 16, 2, 67, 55, 8, 1, 209, 32, - 8, 1, 242, 16, 2, 129, 177, 55, 8, 1, 221, 155, 8, 1, 220, 13, 2, 67, 52, - 8, 1, 220, 13, 2, 129, 177, 52, 8, 1, 231, 212, 8, 1, 213, 109, 232, 45, - 8, 1, 232, 46, 2, 218, 148, 8, 1, 232, 46, 2, 67, 52, 8, 1, 225, 79, 8, - 1, 232, 46, 2, 129, 177, 55, 8, 1, 240, 231, 8, 1, 240, 232, 2, 218, 148, - 8, 1, 225, 0, 8, 1, 240, 232, 2, 118, 177, 55, 8, 1, 239, 200, 8, 1, 240, - 232, 2, 129, 177, 52, 8, 1, 230, 107, 2, 5, 209, 148, 8, 1, 230, 107, 2, - 67, 52, 8, 1, 230, 107, 2, 129, 177, 52, 8, 1, 230, 107, 2, 129, 177, 55, - 8, 1, 224, 55, 2, 67, 55, 8, 1, 224, 55, 240, 65, 8, 1, 218, 127, 8, 1, - 224, 55, 2, 218, 148, 8, 1, 224, 55, 2, 129, 177, 52, 8, 1, 239, 51, 245, - 47, 8, 1, 212, 136, 2, 67, 52, 8, 1, 239, 51, 2, 87, 52, 8, 1, 239, 51, - 240, 16, 8, 1, 239, 51, 240, 17, 2, 239, 112, 52, 8, 1, 212, 116, 227, - 198, 240, 16, 8, 1, 207, 60, 2, 218, 148, 8, 1, 231, 101, 222, 206, 8, 1, - 222, 206, 8, 1, 71, 8, 1, 205, 213, 8, 1, 231, 101, 205, 213, 8, 1, 207, - 60, 2, 118, 177, 52, 8, 1, 209, 39, 8, 1, 242, 42, 206, 47, 8, 1, 87, 2, - 212, 191, 8, 1, 87, 2, 5, 209, 148, 8, 1, 207, 60, 2, 67, 52, 8, 1, 75, - 8, 1, 87, 2, 129, 177, 55, 8, 1, 87, 250, 121, 8, 1, 87, 250, 122, 2, - 239, 112, 52, 8, 241, 82, 213, 251, 8, 1, 252, 248, 8, 5, 127, 28, 217, - 192, 2, 230, 107, 2, 126, 227, 228, 8, 5, 127, 28, 220, 13, 2, 230, 107, - 2, 126, 227, 228, 8, 5, 127, 80, 78, 17, 8, 5, 127, 230, 107, 252, 172, - 8, 5, 127, 232, 179, 8, 5, 127, 129, 245, 21, 8, 5, 127, 217, 70, 8, 243, - 34, 73, 251, 158, 8, 214, 22, 73, 218, 48, 243, 69, 238, 240, 8, 5, 127, - 218, 93, 205, 85, 8, 5, 127, 209, 202, 219, 36, 205, 85, 8, 5, 127, 245, - 22, 239, 69, 73, 231, 163, 8, 5, 127, 80, 61, 17, 8, 5, 114, 217, 70, 8, - 5, 127, 228, 8, 8, 5, 207, 59, 8, 5, 206, 47, 8, 5, 127, 206, 47, 8, 5, - 127, 224, 54, 8, 220, 239, 73, 217, 177, 8, 243, 43, 248, 129, 114, 213, - 251, 8, 243, 43, 248, 129, 127, 213, 251, 8, 218, 93, 127, 213, 252, 2, - 241, 233, 248, 128, 8, 5, 114, 227, 104, 8, 1, 246, 118, 2, 233, 2, 209, - 148, 8, 1, 219, 17, 2, 233, 2, 209, 148, 242, 159, 252, 33, 18, 205, 85, - 242, 159, 252, 33, 18, 102, 242, 159, 252, 33, 18, 105, 242, 159, 252, - 33, 18, 142, 242, 159, 252, 33, 18, 139, 242, 159, 252, 33, 18, 168, 242, - 159, 252, 33, 18, 184, 242, 159, 252, 33, 18, 195, 242, 159, 252, 33, 18, - 193, 242, 159, 252, 33, 18, 200, 8, 1, 215, 211, 2, 67, 55, 8, 1, 246, - 141, 2, 67, 55, 8, 1, 240, 95, 2, 67, 55, 8, 3, 215, 44, 252, 125, 8, 3, - 215, 44, 220, 172, 227, 83, 8, 1, 239, 51, 2, 233, 2, 209, 148, 213, 30, - 243, 34, 73, 221, 228, 213, 30, 213, 135, 241, 82, 213, 251, 213, 30, - 213, 185, 241, 82, 213, 251, 213, 30, 213, 135, 247, 162, 213, 30, 213, - 185, 247, 162, 213, 30, 194, 247, 162, 213, 30, 247, 163, 214, 246, 230, - 46, 213, 30, 247, 163, 214, 246, 218, 167, 213, 30, 213, 135, 247, 163, - 214, 246, 230, 46, 213, 30, 213, 185, 247, 163, 214, 246, 218, 167, 213, - 30, 247, 111, 213, 30, 239, 92, 222, 224, 213, 30, 239, 92, 227, 60, 213, - 30, 239, 92, 251, 211, 213, 30, 253, 29, 83, 213, 30, 1, 252, 177, 213, - 30, 1, 213, 139, 252, 177, 213, 30, 1, 250, 7, 213, 30, 1, 240, 221, 213, - 30, 1, 240, 222, 240, 199, 213, 30, 1, 246, 114, 213, 30, 1, 245, 22, - 246, 115, 218, 143, 213, 30, 1, 239, 71, 213, 30, 1, 207, 59, 213, 30, 1, - 205, 108, 213, 30, 1, 239, 27, 213, 30, 1, 212, 76, 213, 30, 1, 212, 77, - 240, 199, 213, 30, 1, 205, 200, 213, 30, 1, 205, 201, 239, 71, 213, 30, - 1, 232, 17, 213, 30, 1, 230, 105, 213, 30, 1, 226, 211, 213, 30, 1, 223, - 173, 213, 30, 1, 216, 45, 213, 30, 1, 42, 216, 45, 213, 30, 1, 75, 213, - 30, 1, 221, 174, 213, 30, 1, 218, 224, 221, 174, 213, 30, 1, 217, 189, - 213, 30, 1, 220, 6, 213, 30, 1, 218, 143, 213, 30, 1, 215, 171, 213, 30, - 1, 212, 145, 213, 30, 1, 221, 116, 249, 250, 213, 30, 1, 221, 116, 240, - 92, 213, 30, 1, 221, 116, 245, 187, 213, 30, 220, 83, 52, 213, 30, 220, - 83, 55, 213, 30, 220, 83, 244, 20, 213, 30, 205, 13, 52, 213, 30, 205, - 13, 55, 213, 30, 205, 13, 244, 20, 213, 30, 219, 54, 52, 213, 30, 219, - 54, 55, 213, 30, 244, 21, 205, 20, 238, 121, 213, 30, 244, 21, 205, 20, - 252, 104, 213, 30, 239, 74, 52, 213, 30, 239, 74, 55, 213, 30, 239, 73, - 244, 20, 213, 30, 242, 219, 52, 213, 30, 242, 219, 55, 213, 30, 218, 16, - 213, 30, 242, 9, 245, 23, 213, 30, 219, 174, 213, 30, 218, 43, 213, 30, - 118, 79, 177, 52, 213, 30, 118, 79, 177, 55, 213, 30, 129, 177, 52, 213, - 30, 129, 177, 55, 213, 30, 222, 222, 229, 206, 52, 213, 30, 222, 222, - 229, 206, 55, 213, 30, 226, 64, 213, 30, 250, 120, 213, 30, 1, 214, 184, - 205, 79, 213, 30, 1, 214, 184, 231, 156, 213, 30, 1, 214, 184, 242, 28, - 8, 1, 250, 39, 2, 129, 177, 238, 71, 55, 8, 1, 250, 39, 2, 67, 250, 26, - 23, 129, 177, 52, 8, 1, 250, 39, 2, 129, 177, 220, 201, 167, 55, 8, 1, - 250, 39, 2, 129, 177, 220, 201, 167, 250, 26, 23, 118, 177, 52, 8, 1, - 250, 39, 2, 118, 177, 250, 26, 23, 67, 52, 8, 1, 250, 39, 2, 233, 2, 5, - 209, 149, 55, 8, 1, 250, 39, 2, 5, 209, 148, 8, 1, 140, 2, 118, 177, 52, - 8, 1, 140, 2, 129, 177, 220, 201, 167, 55, 8, 1, 246, 118, 2, 118, 177, - 208, 228, 250, 26, 23, 5, 212, 194, 8, 1, 246, 118, 2, 233, 2, 5, 209, - 149, 55, 8, 1, 219, 17, 2, 91, 8, 1, 217, 71, 2, 241, 125, 177, 52, 8, 1, - 252, 201, 2, 118, 177, 52, 8, 1, 252, 201, 2, 129, 177, 220, 201, 173, - 52, 8, 1, 252, 201, 2, 118, 177, 208, 228, 52, 8, 1, 242, 16, 2, 118, - 177, 55, 8, 1, 242, 16, 2, 129, 177, 220, 201, 167, 55, 8, 1, 231, 213, - 2, 67, 52, 8, 1, 231, 213, 2, 129, 177, 52, 8, 1, 231, 213, 2, 129, 177, - 220, 201, 167, 55, 8, 1, 80, 2, 67, 52, 8, 1, 80, 2, 67, 55, 8, 1, 224, - 55, 2, 118, 177, 55, 8, 1, 224, 55, 2, 5, 212, 194, 8, 1, 224, 55, 2, 5, - 209, 148, 8, 1, 230, 107, 2, 134, 8, 1, 219, 17, 2, 118, 177, 208, 228, - 52, 8, 1, 219, 17, 2, 239, 112, 52, 8, 1, 217, 71, 2, 118, 177, 208, 228, - 52, 8, 1, 140, 2, 5, 8, 1, 212, 195, 55, 8, 1, 140, 2, 5, 8, 1, 212, 195, - 23, 118, 245, 21, 8, 1, 217, 71, 2, 5, 8, 1, 212, 195, 23, 118, 245, 21, - 8, 1, 219, 17, 2, 5, 8, 1, 212, 195, 23, 118, 245, 21, 8, 1, 140, 2, 5, - 8, 1, 212, 195, 52, 8, 1, 126, 2, 242, 159, 252, 33, 18, 118, 52, 8, 1, - 126, 2, 242, 159, 252, 33, 18, 129, 52, 8, 1, 242, 42, 87, 2, 242, 159, - 252, 33, 18, 118, 52, 8, 1, 242, 42, 87, 2, 242, 159, 252, 33, 18, 129, - 52, 8, 1, 242, 42, 87, 2, 242, 159, 252, 33, 18, 241, 125, 55, 8, 1, 207, - 60, 2, 242, 159, 252, 33, 18, 118, 52, 8, 1, 207, 60, 2, 242, 159, 252, - 33, 18, 129, 52, 8, 1, 87, 250, 122, 2, 242, 159, 252, 33, 18, 118, 52, - 8, 1, 87, 250, 122, 2, 242, 159, 252, 33, 18, 129, 52, 8, 1, 140, 2, 242, - 159, 252, 33, 18, 241, 125, 55, 8, 1, 217, 71, 2, 242, 159, 252, 33, 18, - 241, 125, 52, 8, 1, 217, 71, 2, 233, 2, 209, 148, 8, 1, 232, 46, 2, 118, - 177, 52, 212, 53, 1, 239, 141, 212, 53, 1, 215, 220, 212, 53, 1, 224, 53, - 212, 53, 1, 219, 109, 212, 53, 1, 250, 181, 212, 53, 1, 229, 245, 212, - 53, 1, 232, 60, 212, 53, 1, 252, 161, 212, 53, 1, 209, 68, 212, 53, 1, - 227, 103, 212, 53, 1, 242, 71, 212, 53, 1, 245, 190, 212, 53, 1, 212, 55, - 212, 53, 1, 230, 137, 212, 53, 1, 240, 240, 212, 53, 1, 240, 22, 212, 53, - 1, 217, 69, 212, 53, 1, 246, 70, 212, 53, 1, 205, 99, 212, 53, 1, 212, - 146, 212, 53, 1, 206, 109, 212, 53, 1, 221, 187, 212, 53, 1, 232, 186, - 212, 53, 1, 248, 85, 212, 53, 1, 210, 207, 212, 53, 1, 239, 19, 212, 53, - 1, 231, 166, 212, 53, 1, 212, 54, 212, 53, 1, 205, 115, 212, 53, 1, 215, - 209, 212, 53, 1, 217, 195, 212, 53, 1, 246, 143, 212, 53, 1, 124, 212, - 53, 1, 205, 19, 212, 53, 1, 252, 197, 212, 53, 1, 240, 93, 212, 53, 1, - 220, 16, 212, 53, 1, 207, 94, 212, 53, 253, 31, 212, 53, 253, 129, 212, - 53, 237, 184, 212, 53, 243, 103, 212, 53, 210, 11, 212, 53, 222, 151, - 212, 53, 243, 111, 212, 53, 242, 151, 212, 53, 222, 221, 212, 53, 222, - 229, 212, 53, 213, 162, 212, 53, 1, 225, 232, 224, 131, 18, 205, 85, 224, - 131, 18, 102, 224, 131, 18, 105, 224, 131, 18, 142, 224, 131, 18, 139, - 224, 131, 18, 168, 224, 131, 18, 184, 224, 131, 18, 195, 224, 131, 18, - 193, 224, 131, 18, 200, 224, 131, 1, 62, 224, 131, 1, 243, 104, 224, 131, - 1, 74, 224, 131, 1, 75, 224, 131, 1, 71, 224, 131, 1, 222, 152, 224, 131, - 1, 76, 224, 131, 1, 246, 132, 224, 131, 1, 226, 33, 224, 131, 1, 250, - 183, 224, 131, 1, 179, 224, 131, 1, 212, 219, 224, 131, 1, 232, 200, 224, - 131, 1, 248, 110, 224, 131, 1, 246, 145, 224, 131, 1, 219, 113, 224, 131, - 1, 218, 89, 224, 131, 1, 217, 199, 224, 131, 1, 240, 187, 224, 131, 1, - 242, 73, 224, 131, 1, 172, 224, 131, 1, 230, 141, 224, 131, 1, 225, 237, - 206, 246, 224, 131, 1, 185, 224, 131, 1, 223, 144, 224, 131, 1, 199, 224, - 131, 1, 155, 224, 131, 1, 207, 96, 224, 131, 1, 190, 224, 131, 1, 223, - 145, 206, 246, 224, 131, 1, 232, 115, 232, 200, 224, 131, 1, 232, 115, - 248, 110, 224, 131, 1, 232, 115, 219, 113, 224, 131, 36, 215, 144, 127, - 211, 118, 224, 131, 36, 215, 144, 114, 211, 118, 224, 131, 36, 215, 144, - 218, 142, 211, 118, 224, 131, 36, 152, 245, 210, 211, 118, 224, 131, 36, - 152, 127, 211, 118, 224, 131, 36, 152, 114, 211, 118, 224, 131, 36, 152, - 218, 142, 211, 118, 224, 131, 36, 225, 197, 83, 224, 131, 36, 50, 67, 52, - 224, 131, 127, 135, 252, 53, 224, 131, 114, 135, 252, 53, 224, 131, 16, - 222, 153, 245, 223, 224, 131, 16, 240, 186, 224, 131, 247, 155, 224, 131, - 242, 168, 83, 224, 131, 230, 112, 217, 160, 1, 252, 179, 217, 160, 1, - 249, 209, 217, 160, 1, 240, 220, 217, 160, 1, 246, 116, 217, 160, 1, 232, - 211, 217, 160, 1, 250, 181, 217, 160, 1, 205, 88, 217, 160, 1, 232, 220, - 217, 160, 1, 211, 156, 217, 160, 1, 205, 182, 217, 160, 1, 232, 61, 217, - 160, 1, 230, 134, 217, 160, 1, 226, 211, 217, 160, 1, 223, 173, 217, 160, - 1, 215, 42, 217, 160, 1, 233, 68, 217, 160, 1, 241, 250, 217, 160, 1, - 210, 241, 217, 160, 1, 219, 193, 217, 160, 1, 218, 143, 217, 160, 1, 215, - 237, 217, 160, 1, 212, 214, 217, 160, 141, 233, 68, 217, 160, 141, 233, - 67, 217, 160, 141, 222, 217, 217, 160, 141, 246, 130, 217, 160, 65, 1, - 242, 249, 205, 182, 217, 160, 141, 242, 249, 205, 182, 217, 160, 22, 3, - 152, 75, 217, 160, 22, 3, 75, 217, 160, 22, 3, 222, 80, 253, 164, 217, - 160, 22, 3, 152, 253, 164, 217, 160, 22, 3, 253, 164, 217, 160, 22, 3, - 222, 80, 62, 217, 160, 22, 3, 152, 62, 217, 160, 22, 3, 62, 217, 160, 65, - 1, 215, 144, 62, 217, 160, 22, 3, 215, 144, 62, 217, 160, 22, 3, 152, 71, - 217, 160, 22, 3, 71, 217, 160, 65, 1, 74, 217, 160, 22, 3, 152, 74, 217, - 160, 22, 3, 74, 217, 160, 22, 3, 76, 217, 160, 22, 3, 213, 162, 217, 160, - 141, 225, 94, 217, 160, 220, 72, 225, 94, 217, 160, 220, 72, 252, 222, - 217, 160, 220, 72, 252, 113, 217, 160, 220, 72, 250, 101, 217, 160, 220, - 72, 251, 194, 217, 160, 220, 72, 215, 159, 217, 160, 253, 29, 83, 217, - 160, 220, 72, 227, 93, 219, 229, 217, 160, 220, 72, 205, 27, 217, 160, - 220, 72, 219, 229, 217, 160, 220, 72, 205, 114, 217, 160, 220, 72, 210, - 140, 217, 160, 220, 72, 252, 4, 217, 160, 220, 72, 214, 188, 227, 176, - 217, 160, 220, 72, 252, 99, 227, 217, 1, 239, 118, 227, 217, 1, 253, 115, - 227, 217, 1, 252, 220, 227, 217, 1, 253, 5, 227, 217, 1, 252, 213, 227, - 217, 1, 209, 168, 227, 217, 1, 251, 152, 227, 217, 1, 232, 220, 227, 217, - 1, 251, 191, 227, 217, 1, 252, 184, 227, 217, 1, 252, 189, 227, 217, 1, - 252, 181, 227, 217, 1, 252, 136, 227, 217, 1, 252, 122, 227, 217, 1, 251, - 231, 227, 217, 1, 233, 68, 227, 217, 1, 252, 68, 227, 217, 1, 251, 201, - 227, 217, 1, 252, 41, 227, 217, 1, 252, 37, 227, 217, 1, 251, 225, 227, - 217, 1, 251, 199, 227, 217, 1, 243, 214, 227, 217, 1, 232, 53, 227, 217, - 1, 252, 200, 227, 217, 252, 226, 83, 227, 217, 208, 171, 83, 227, 217, - 240, 159, 83, 227, 217, 220, 71, 8, 1, 250, 39, 2, 5, 209, 149, 55, 8, 1, - 250, 39, 2, 239, 112, 52, 8, 1, 171, 2, 118, 177, 52, 8, 1, 212, 195, 2, - 118, 177, 52, 8, 1, 242, 16, 2, 67, 250, 26, 23, 129, 177, 52, 8, 1, 220, - 13, 2, 67, 55, 8, 1, 230, 107, 2, 50, 134, 8, 1, 80, 2, 129, 177, 52, 8, - 1, 87, 2, 118, 177, 250, 26, 23, 239, 112, 52, 8, 1, 87, 2, 118, 177, - 250, 26, 23, 67, 52, 8, 1, 219, 17, 2, 229, 111, 8, 1, 207, 60, 2, 67, - 206, 254, 8, 1, 218, 113, 206, 47, 8, 1, 114, 252, 172, 8, 1, 246, 118, - 2, 129, 177, 55, 8, 1, 217, 192, 2, 129, 177, 55, 8, 1, 240, 232, 2, 233, - 2, 91, 8, 1, 213, 243, 207, 59, 8, 1, 205, 109, 2, 233, 2, 209, 149, 52, - 8, 247, 26, 242, 39, 8, 247, 26, 246, 106, 8, 247, 26, 231, 252, 8, 247, - 26, 242, 37, 8, 247, 26, 246, 104, 8, 247, 26, 231, 250, 8, 135, 119, 67, - 52, 8, 135, 118, 177, 52, 8, 135, 229, 112, 52, 8, 135, 119, 67, 55, 8, - 135, 118, 177, 55, 8, 135, 229, 112, 55, 8, 222, 142, 242, 37, 8, 222, - 142, 246, 104, 8, 222, 142, 231, 250, 8, 5, 127, 207, 59, 8, 242, 40, 2, - 218, 148, 8, 242, 40, 2, 67, 52, 8, 231, 253, 2, 67, 55, 8, 47, 251, 244, - 52, 8, 48, 251, 244, 52, 8, 47, 251, 244, 55, 8, 48, 251, 244, 55, 8, 50, - 48, 251, 244, 52, 8, 50, 48, 251, 244, 84, 2, 245, 23, 8, 48, 251, 244, - 84, 2, 245, 23, 8, 246, 107, 2, 245, 23, 8, 141, 215, 73, 224, 55, 240, - 65, 89, 3, 233, 2, 248, 217, 89, 3, 248, 217, 89, 3, 252, 73, 89, 3, 208, - 183, 89, 1, 215, 144, 62, 89, 1, 62, 89, 1, 253, 164, 89, 1, 74, 89, 1, - 233, 102, 89, 1, 71, 89, 1, 209, 162, 89, 1, 115, 137, 89, 1, 115, 149, - 89, 1, 248, 220, 75, 89, 1, 215, 144, 75, 89, 1, 75, 89, 1, 252, 205, 89, - 1, 248, 220, 76, 89, 1, 215, 144, 76, 89, 1, 76, 89, 1, 251, 184, 89, 1, - 172, 89, 1, 231, 167, 89, 1, 240, 244, 89, 1, 240, 99, 89, 1, 225, 77, - 89, 1, 249, 1, 89, 1, 248, 110, 89, 1, 232, 200, 89, 1, 232, 170, 89, 1, - 223, 144, 89, 1, 210, 208, 89, 1, 210, 196, 89, 1, 246, 54, 89, 1, 246, - 38, 89, 1, 224, 103, 89, 1, 212, 219, 89, 1, 212, 56, 89, 1, 246, 145, - 89, 1, 245, 192, 89, 1, 199, 89, 1, 224, 85, 89, 1, 179, 89, 1, 221, 93, - 89, 1, 250, 183, 89, 1, 250, 0, 89, 1, 185, 89, 1, 190, 89, 1, 219, 113, - 89, 1, 218, 89, 89, 1, 230, 141, 89, 1, 229, 172, 89, 1, 229, 163, 89, 1, - 209, 70, 89, 1, 216, 2, 89, 1, 214, 96, 89, 1, 217, 199, 89, 1, 155, 89, - 22, 3, 222, 206, 89, 22, 3, 222, 150, 89, 3, 223, 184, 89, 3, 251, 167, - 89, 22, 3, 253, 164, 89, 22, 3, 74, 89, 22, 3, 233, 102, 89, 22, 3, 71, - 89, 22, 3, 209, 162, 89, 22, 3, 115, 137, 89, 22, 3, 115, 218, 90, 89, - 22, 3, 248, 220, 75, 89, 22, 3, 215, 144, 75, 89, 22, 3, 75, 89, 22, 3, - 252, 205, 89, 22, 3, 248, 220, 76, 89, 22, 3, 215, 144, 76, 89, 22, 3, - 76, 89, 22, 3, 251, 184, 89, 3, 208, 188, 89, 22, 3, 220, 120, 75, 89, - 22, 3, 251, 163, 89, 222, 173, 89, 213, 233, 3, 210, 5, 89, 213, 233, 3, - 252, 75, 89, 239, 237, 253, 21, 89, 253, 9, 253, 21, 89, 22, 3, 248, 220, - 152, 75, 89, 22, 3, 210, 3, 89, 22, 3, 209, 161, 89, 1, 220, 19, 89, 1, - 231, 148, 89, 1, 240, 74, 89, 1, 205, 116, 89, 1, 246, 43, 89, 1, 218, - 212, 89, 1, 242, 73, 89, 1, 205, 168, 89, 1, 115, 218, 90, 89, 1, 115, - 229, 173, 89, 22, 3, 115, 149, 89, 22, 3, 115, 229, 173, 89, 246, 100, - 89, 50, 246, 100, 89, 18, 205, 85, 89, 18, 102, 89, 18, 105, 89, 18, 142, - 89, 18, 139, 89, 18, 168, 89, 18, 184, 89, 18, 195, 89, 18, 193, 89, 18, - 200, 89, 253, 29, 53, 89, 3, 127, 214, 152, 245, 23, 89, 1, 248, 220, 62, - 89, 1, 222, 206, 89, 1, 222, 150, 89, 1, 251, 163, 89, 1, 210, 3, 89, 1, - 209, 161, 89, 1, 227, 181, 246, 54, 89, 1, 205, 81, 89, 1, 77, 190, 89, - 1, 240, 135, 89, 1, 232, 150, 89, 1, 240, 25, 213, 251, 89, 1, 246, 44, - 89, 1, 250, 97, 165, 252, 102, 165, 3, 248, 217, 165, 3, 252, 73, 165, 3, - 208, 183, 165, 1, 62, 165, 1, 253, 164, 165, 1, 74, 165, 1, 233, 102, - 165, 1, 71, 165, 1, 209, 162, 165, 1, 115, 137, 165, 1, 115, 149, 165, 1, - 75, 165, 1, 252, 205, 165, 1, 76, 165, 1, 251, 184, 165, 1, 172, 165, 1, - 231, 167, 165, 1, 240, 244, 165, 1, 240, 99, 165, 1, 225, 77, 165, 1, - 249, 1, 165, 1, 248, 110, 165, 1, 232, 200, 165, 1, 232, 170, 165, 1, - 223, 144, 165, 1, 210, 208, 165, 1, 210, 196, 165, 1, 246, 54, 165, 1, - 246, 38, 165, 1, 224, 103, 165, 1, 212, 219, 165, 1, 212, 56, 165, 1, - 246, 145, 165, 1, 245, 192, 165, 1, 199, 165, 1, 179, 165, 1, 221, 93, - 165, 1, 250, 183, 165, 1, 250, 0, 165, 1, 185, 165, 1, 190, 165, 1, 219, - 113, 165, 1, 230, 141, 165, 1, 216, 2, 165, 1, 214, 96, 165, 1, 217, 199, - 165, 1, 155, 165, 3, 223, 184, 165, 3, 251, 167, 165, 22, 3, 253, 164, - 165, 22, 3, 74, 165, 22, 3, 233, 102, 165, 22, 3, 71, 165, 22, 3, 209, - 162, 165, 22, 3, 115, 137, 165, 22, 3, 115, 218, 90, 165, 22, 3, 75, 165, - 22, 3, 252, 205, 165, 22, 3, 76, 165, 22, 3, 251, 184, 165, 3, 208, 188, - 165, 1, 231, 158, 212, 219, 165, 251, 185, 230, 20, 83, 165, 1, 218, 89, - 165, 1, 218, 212, 165, 1, 205, 168, 165, 1, 115, 218, 90, 165, 1, 115, - 229, 173, 165, 22, 3, 115, 149, 165, 22, 3, 115, 229, 173, 165, 18, 205, - 85, 165, 18, 102, 165, 18, 105, 165, 18, 142, 165, 18, 139, 165, 18, 168, - 165, 18, 184, 165, 18, 195, 165, 18, 193, 165, 18, 200, 165, 1, 219, 114, - 2, 226, 247, 245, 162, 165, 1, 219, 114, 2, 229, 92, 245, 162, 165, 218, - 27, 83, 165, 218, 27, 53, 165, 247, 25, 223, 176, 102, 165, 247, 25, 223, - 176, 105, 165, 247, 25, 223, 176, 142, 165, 247, 25, 223, 176, 139, 165, - 247, 25, 223, 176, 119, 230, 11, 212, 47, 212, 42, 245, 221, 165, 247, - 25, 245, 222, 215, 4, 165, 232, 221, 165, 240, 211, 83, 239, 182, 3, 253, - 4, 249, 224, 239, 182, 3, 249, 224, 239, 182, 3, 208, 183, 239, 182, 1, - 62, 239, 182, 1, 253, 164, 239, 182, 1, 74, 239, 182, 1, 233, 102, 239, - 182, 1, 71, 239, 182, 1, 209, 162, 239, 182, 1, 243, 104, 239, 182, 1, - 252, 205, 239, 182, 1, 222, 152, 239, 182, 1, 251, 184, 239, 182, 1, 172, - 239, 182, 1, 231, 167, 239, 182, 1, 240, 244, 239, 182, 1, 240, 99, 239, - 182, 1, 225, 77, 239, 182, 1, 249, 1, 239, 182, 1, 248, 110, 239, 182, 1, - 232, 200, 239, 182, 1, 232, 170, 239, 182, 1, 223, 144, 239, 182, 1, 210, - 208, 239, 182, 1, 210, 196, 239, 182, 1, 246, 54, 239, 182, 1, 246, 38, - 239, 182, 1, 224, 103, 239, 182, 1, 212, 219, 239, 182, 1, 212, 56, 239, - 182, 1, 246, 145, 239, 182, 1, 245, 192, 239, 182, 1, 199, 239, 182, 1, - 179, 239, 182, 1, 221, 93, 239, 182, 1, 250, 183, 239, 182, 1, 250, 0, - 239, 182, 1, 185, 239, 182, 1, 190, 239, 182, 1, 219, 113, 239, 182, 1, - 230, 141, 239, 182, 1, 229, 172, 239, 182, 1, 209, 70, 239, 182, 1, 216, - 2, 239, 182, 1, 217, 199, 239, 182, 1, 155, 239, 182, 3, 223, 184, 239, - 182, 22, 3, 253, 164, 239, 182, 22, 3, 74, 239, 182, 22, 3, 233, 102, - 239, 182, 22, 3, 71, 239, 182, 22, 3, 209, 162, 239, 182, 22, 3, 243, - 104, 239, 182, 22, 3, 252, 205, 239, 182, 22, 3, 222, 152, 239, 182, 22, - 3, 251, 184, 239, 182, 3, 208, 188, 239, 182, 3, 210, 7, 239, 182, 1, - 231, 148, 239, 182, 1, 240, 74, 239, 182, 1, 205, 116, 239, 182, 1, 218, - 89, 239, 182, 1, 242, 73, 239, 182, 18, 205, 85, 239, 182, 18, 102, 239, - 182, 18, 105, 239, 182, 18, 142, 239, 182, 18, 139, 239, 182, 18, 168, - 239, 182, 18, 184, 239, 182, 18, 195, 239, 182, 18, 193, 239, 182, 18, - 200, 239, 182, 211, 164, 239, 182, 253, 3, 239, 182, 232, 241, 239, 182, - 209, 190, 239, 182, 243, 76, 222, 157, 239, 182, 3, 206, 84, 198, 3, 248, - 217, 198, 3, 252, 73, 198, 3, 208, 183, 198, 1, 62, 198, 1, 253, 164, - 198, 1, 74, 198, 1, 233, 102, 198, 1, 71, 198, 1, 209, 162, 198, 1, 115, - 137, 198, 1, 115, 149, 198, 22, 248, 220, 75, 198, 1, 75, 198, 1, 252, - 205, 198, 22, 248, 220, 76, 198, 1, 76, 198, 1, 251, 184, 198, 1, 172, - 198, 1, 231, 167, 198, 1, 240, 244, 198, 1, 240, 99, 198, 1, 225, 77, - 198, 1, 249, 1, 198, 1, 248, 110, 198, 1, 232, 200, 198, 1, 232, 170, - 198, 1, 223, 144, 198, 1, 210, 208, 198, 1, 210, 196, 198, 1, 246, 54, - 198, 1, 246, 38, 198, 1, 224, 103, 198, 1, 212, 219, 198, 1, 212, 56, - 198, 1, 246, 145, 198, 1, 245, 192, 198, 1, 199, 198, 1, 179, 198, 1, - 221, 93, 198, 1, 250, 183, 198, 1, 250, 0, 198, 1, 185, 198, 1, 190, 198, - 1, 219, 113, 198, 1, 230, 141, 198, 1, 229, 172, 198, 1, 209, 70, 198, 1, - 216, 2, 198, 1, 214, 96, 198, 1, 217, 199, 198, 1, 155, 198, 3, 223, 184, - 198, 3, 251, 167, 198, 22, 3, 253, 164, 198, 22, 3, 74, 198, 22, 3, 233, - 102, 198, 22, 3, 71, 198, 22, 3, 209, 162, 198, 22, 3, 115, 137, 198, 22, - 3, 115, 218, 90, 198, 22, 3, 248, 220, 75, 198, 22, 3, 75, 198, 22, 3, - 252, 205, 198, 22, 3, 248, 220, 76, 198, 22, 3, 76, 198, 22, 3, 251, 184, - 198, 3, 208, 188, 198, 222, 173, 198, 1, 115, 218, 90, 198, 1, 115, 229, - 173, 198, 22, 3, 115, 149, 198, 22, 3, 115, 229, 173, 198, 18, 205, 85, - 198, 18, 102, 198, 18, 105, 198, 18, 142, 198, 18, 139, 198, 18, 168, - 198, 18, 184, 198, 18, 195, 198, 18, 193, 198, 18, 200, 198, 253, 29, 53, - 198, 218, 27, 53, 178, 3, 248, 217, 178, 3, 252, 73, 178, 3, 208, 183, - 178, 1, 62, 178, 1, 253, 164, 178, 1, 74, 178, 1, 233, 102, 178, 1, 71, - 178, 1, 209, 162, 178, 1, 115, 137, 178, 1, 115, 149, 178, 1, 75, 178, 1, - 252, 205, 178, 1, 76, 178, 1, 251, 184, 178, 1, 172, 178, 1, 231, 167, - 178, 1, 240, 244, 178, 1, 240, 99, 178, 1, 225, 77, 178, 1, 249, 1, 178, - 1, 248, 110, 178, 1, 232, 200, 178, 1, 232, 170, 178, 1, 223, 144, 178, - 1, 210, 208, 178, 1, 210, 196, 178, 1, 246, 54, 178, 1, 246, 38, 178, 1, - 224, 103, 178, 1, 212, 219, 178, 1, 212, 56, 178, 1, 246, 145, 178, 1, - 245, 192, 178, 1, 199, 178, 1, 179, 178, 1, 221, 93, 178, 1, 250, 183, - 178, 1, 250, 0, 178, 1, 185, 178, 1, 190, 178, 1, 219, 113, 178, 1, 230, - 141, 178, 1, 229, 172, 178, 1, 209, 70, 178, 1, 216, 2, 178, 1, 214, 96, - 178, 1, 217, 199, 178, 1, 155, 178, 3, 223, 184, 178, 3, 251, 167, 178, - 22, 3, 253, 164, 178, 22, 3, 74, 178, 22, 3, 233, 102, 178, 22, 3, 71, - 178, 22, 3, 209, 162, 178, 22, 3, 115, 137, 178, 22, 3, 115, 218, 90, - 178, 22, 3, 75, 178, 22, 3, 252, 205, 178, 22, 3, 76, 178, 22, 3, 251, - 184, 178, 3, 208, 188, 178, 252, 206, 230, 20, 83, 178, 251, 185, 230, - 20, 83, 178, 1, 218, 89, 178, 1, 218, 212, 178, 1, 205, 168, 178, 1, 115, - 218, 90, 178, 1, 115, 229, 173, 178, 22, 3, 115, 149, 178, 22, 3, 115, - 229, 173, 178, 18, 205, 85, 178, 18, 102, 178, 18, 105, 178, 18, 142, - 178, 18, 139, 178, 18, 168, 178, 18, 184, 178, 18, 195, 178, 18, 193, - 178, 18, 200, 178, 232, 221, 178, 1, 207, 96, 178, 241, 116, 119, 219, - 204, 178, 241, 116, 119, 239, 121, 178, 241, 116, 129, 219, 202, 178, - 241, 116, 119, 215, 2, 178, 241, 116, 119, 243, 83, 178, 241, 116, 129, - 215, 1, 40, 3, 252, 73, 40, 3, 208, 183, 40, 1, 62, 40, 1, 253, 164, 40, - 1, 74, 40, 1, 233, 102, 40, 1, 71, 40, 1, 209, 162, 40, 1, 75, 40, 1, - 243, 104, 40, 1, 252, 205, 40, 1, 76, 40, 1, 222, 152, 40, 1, 251, 184, - 40, 1, 172, 40, 1, 225, 77, 40, 1, 249, 1, 40, 1, 232, 200, 40, 1, 223, - 144, 40, 1, 210, 208, 40, 1, 224, 103, 40, 1, 212, 219, 40, 1, 199, 40, - 1, 224, 85, 40, 1, 179, 40, 1, 185, 40, 1, 190, 40, 1, 219, 113, 40, 1, - 218, 89, 40, 1, 230, 141, 40, 1, 229, 172, 40, 1, 229, 163, 40, 1, 209, - 70, 40, 1, 216, 2, 40, 1, 214, 96, 40, 1, 217, 199, 40, 1, 155, 40, 22, - 3, 253, 164, 40, 22, 3, 74, 40, 22, 3, 233, 102, 40, 22, 3, 71, 40, 22, - 3, 209, 162, 40, 22, 3, 75, 40, 22, 3, 243, 104, 40, 22, 3, 252, 205, 40, - 22, 3, 76, 40, 22, 3, 222, 152, 40, 22, 3, 251, 184, 40, 3, 208, 188, 40, - 222, 173, 40, 251, 185, 230, 20, 83, 40, 18, 205, 85, 40, 18, 102, 40, - 18, 105, 40, 18, 142, 40, 18, 139, 40, 18, 168, 40, 18, 184, 40, 18, 195, - 40, 18, 193, 40, 18, 200, 40, 43, 212, 98, 40, 43, 119, 238, 29, 40, 43, - 119, 211, 242, 40, 246, 67, 53, 40, 226, 153, 53, 40, 206, 50, 53, 40, - 246, 6, 53, 40, 247, 68, 53, 40, 251, 232, 84, 53, 40, 218, 27, 53, 40, - 43, 53, 163, 3, 36, 248, 218, 52, 163, 3, 248, 217, 163, 3, 252, 73, 163, - 3, 208, 183, 163, 1, 62, 163, 1, 253, 164, 163, 1, 74, 163, 1, 233, 102, - 163, 1, 71, 163, 1, 209, 162, 163, 1, 115, 137, 163, 1, 115, 149, 163, 1, - 75, 163, 1, 243, 104, 163, 1, 252, 205, 163, 1, 76, 163, 1, 222, 152, - 163, 1, 251, 184, 163, 1, 172, 163, 1, 231, 167, 163, 1, 240, 244, 163, - 1, 240, 99, 163, 1, 225, 77, 163, 1, 249, 1, 163, 1, 248, 110, 163, 1, - 232, 200, 163, 1, 232, 170, 163, 1, 223, 144, 163, 1, 210, 208, 163, 1, - 210, 196, 163, 1, 246, 54, 163, 1, 246, 38, 163, 1, 224, 103, 163, 1, - 212, 219, 163, 1, 212, 56, 163, 1, 246, 145, 163, 1, 245, 192, 163, 1, - 199, 163, 1, 179, 163, 1, 221, 93, 163, 1, 250, 183, 163, 1, 250, 0, 163, - 1, 185, 163, 1, 190, 163, 1, 219, 113, 163, 1, 218, 89, 163, 1, 230, 141, - 163, 1, 229, 172, 163, 1, 229, 163, 163, 1, 209, 70, 163, 1, 216, 2, 163, - 1, 214, 96, 163, 1, 217, 199, 163, 1, 155, 163, 3, 251, 167, 163, 22, 3, - 253, 164, 163, 22, 3, 74, 163, 22, 3, 233, 102, 163, 22, 3, 71, 163, 22, - 3, 209, 162, 163, 22, 3, 115, 137, 163, 22, 3, 115, 218, 90, 163, 22, 3, - 75, 163, 22, 3, 243, 104, 163, 22, 3, 252, 205, 163, 22, 3, 76, 163, 22, - 3, 222, 152, 163, 22, 3, 251, 184, 163, 3, 208, 188, 163, 230, 20, 83, - 163, 252, 206, 230, 20, 83, 163, 1, 210, 243, 163, 1, 243, 196, 163, 1, - 115, 218, 90, 163, 1, 115, 229, 173, 163, 22, 3, 115, 149, 163, 22, 3, - 115, 229, 173, 163, 18, 205, 85, 163, 18, 102, 163, 18, 105, 163, 18, - 142, 163, 18, 139, 163, 18, 168, 163, 18, 184, 163, 18, 195, 163, 18, - 193, 163, 18, 200, 163, 241, 116, 18, 205, 86, 33, 222, 210, 220, 160, - 73, 139, 163, 241, 116, 18, 119, 33, 222, 210, 220, 160, 73, 139, 163, - 241, 116, 18, 118, 33, 222, 210, 220, 160, 73, 139, 163, 241, 116, 18, - 129, 33, 222, 210, 220, 160, 73, 139, 163, 241, 116, 18, 119, 33, 242, - 179, 220, 160, 73, 139, 163, 241, 116, 18, 118, 33, 242, 179, 220, 160, - 73, 139, 163, 241, 116, 18, 129, 33, 242, 179, 220, 160, 73, 139, 163, 3, - 210, 134, 183, 3, 248, 217, 183, 3, 252, 73, 183, 3, 208, 183, 183, 1, - 62, 183, 1, 253, 164, 183, 1, 74, 183, 1, 233, 102, 183, 1, 71, 183, 1, - 209, 162, 183, 1, 115, 137, 183, 1, 115, 149, 183, 1, 75, 183, 1, 243, - 104, 183, 1, 252, 205, 183, 1, 76, 183, 1, 222, 152, 183, 1, 251, 184, - 183, 1, 172, 183, 1, 231, 167, 183, 1, 240, 244, 183, 1, 240, 99, 183, 1, - 225, 77, 183, 1, 249, 1, 183, 1, 248, 110, 183, 1, 232, 200, 183, 1, 232, - 170, 183, 1, 223, 144, 183, 1, 210, 208, 183, 1, 210, 196, 183, 1, 246, - 54, 183, 1, 246, 38, 183, 1, 224, 103, 183, 1, 212, 219, 183, 1, 212, 56, - 183, 1, 246, 145, 183, 1, 245, 192, 183, 1, 199, 183, 1, 179, 183, 1, - 221, 93, 183, 1, 250, 183, 183, 1, 250, 0, 183, 1, 185, 183, 1, 190, 183, - 1, 219, 113, 183, 1, 218, 89, 183, 1, 230, 141, 183, 1, 229, 172, 183, 1, - 209, 70, 183, 1, 216, 2, 183, 1, 214, 96, 183, 1, 217, 199, 183, 1, 155, - 183, 3, 223, 184, 183, 3, 251, 167, 183, 22, 3, 253, 164, 183, 22, 3, 74, - 183, 22, 3, 233, 102, 183, 22, 3, 71, 183, 22, 3, 209, 162, 183, 22, 3, - 115, 137, 183, 22, 3, 115, 218, 90, 183, 22, 3, 75, 183, 22, 3, 243, 104, - 183, 22, 3, 252, 205, 183, 22, 3, 76, 183, 22, 3, 222, 152, 183, 22, 3, - 251, 184, 183, 3, 208, 188, 183, 230, 20, 83, 183, 252, 206, 230, 20, 83, - 183, 1, 242, 73, 183, 1, 115, 218, 90, 183, 1, 115, 229, 173, 183, 22, 3, - 115, 149, 183, 22, 3, 115, 229, 173, 183, 18, 205, 85, 183, 18, 102, 183, - 18, 105, 183, 18, 142, 183, 18, 139, 183, 18, 168, 183, 18, 184, 183, 18, - 195, 183, 18, 193, 183, 18, 200, 183, 3, 232, 156, 183, 3, 209, 204, 156, - 3, 248, 217, 156, 3, 252, 73, 156, 3, 208, 183, 156, 1, 62, 156, 1, 253, - 164, 156, 1, 74, 156, 1, 233, 102, 156, 1, 71, 156, 1, 209, 162, 156, 1, - 115, 137, 156, 1, 115, 149, 156, 1, 75, 156, 1, 243, 104, 156, 1, 252, - 205, 156, 1, 76, 156, 1, 222, 152, 156, 1, 251, 184, 156, 1, 172, 156, 1, - 231, 167, 156, 1, 240, 244, 156, 1, 240, 99, 156, 1, 225, 77, 156, 1, - 249, 1, 156, 1, 248, 110, 156, 1, 232, 200, 156, 1, 232, 170, 156, 1, - 223, 144, 156, 1, 210, 208, 156, 1, 210, 196, 156, 1, 246, 54, 156, 1, - 246, 38, 156, 1, 224, 103, 156, 1, 212, 219, 156, 1, 212, 56, 156, 1, - 246, 145, 156, 1, 245, 192, 156, 1, 199, 156, 1, 224, 85, 156, 1, 179, - 156, 1, 221, 93, 156, 1, 250, 183, 156, 1, 250, 0, 156, 1, 185, 156, 1, - 190, 156, 1, 219, 113, 156, 1, 218, 89, 156, 1, 230, 141, 156, 1, 229, - 172, 156, 1, 229, 163, 156, 1, 209, 70, 156, 1, 216, 2, 156, 1, 214, 96, - 156, 1, 217, 199, 156, 1, 155, 156, 1, 210, 177, 156, 3, 251, 167, 156, - 22, 3, 253, 164, 156, 22, 3, 74, 156, 22, 3, 233, 102, 156, 22, 3, 71, - 156, 22, 3, 209, 162, 156, 22, 3, 115, 137, 156, 22, 3, 115, 218, 90, - 156, 22, 3, 75, 156, 22, 3, 243, 104, 156, 22, 3, 252, 205, 156, 22, 3, - 76, 156, 22, 3, 222, 152, 156, 22, 3, 251, 184, 156, 3, 208, 188, 156, 1, - 67, 218, 248, 156, 251, 185, 230, 20, 83, 156, 1, 115, 218, 90, 156, 1, - 115, 229, 173, 156, 22, 3, 115, 149, 156, 22, 3, 115, 229, 173, 156, 18, - 205, 85, 156, 18, 102, 156, 18, 105, 156, 18, 142, 156, 18, 139, 156, 18, - 168, 156, 18, 184, 156, 18, 195, 156, 18, 193, 156, 18, 200, 156, 43, - 212, 98, 156, 43, 119, 238, 29, 156, 43, 119, 211, 242, 156, 241, 116, - 119, 219, 204, 156, 241, 116, 119, 239, 121, 156, 241, 116, 129, 219, - 202, 156, 246, 72, 83, 156, 1, 248, 47, 224, 104, 156, 1, 248, 47, 226, - 33, 156, 1, 248, 47, 218, 90, 156, 1, 248, 47, 149, 156, 1, 248, 47, 229, - 173, 156, 1, 248, 47, 232, 76, 132, 3, 252, 72, 132, 3, 208, 182, 132, 1, - 251, 157, 132, 1, 253, 118, 132, 1, 252, 228, 132, 1, 252, 243, 132, 1, - 232, 210, 132, 1, 233, 101, 132, 1, 209, 153, 132, 1, 209, 156, 132, 1, - 232, 236, 132, 1, 232, 237, 132, 1, 233, 87, 132, 1, 233, 89, 132, 1, - 242, 152, 132, 1, 243, 99, 132, 1, 252, 191, 132, 1, 222, 70, 132, 1, - 222, 145, 132, 1, 251, 170, 132, 1, 252, 147, 231, 229, 132, 1, 227, 246, - 231, 229, 132, 1, 252, 147, 240, 190, 132, 1, 227, 246, 240, 190, 132, 1, - 232, 22, 225, 229, 132, 1, 217, 143, 240, 190, 132, 1, 252, 147, 248, - 174, 132, 1, 227, 246, 248, 174, 132, 1, 252, 147, 232, 185, 132, 1, 227, - 246, 232, 185, 132, 1, 212, 212, 225, 229, 132, 1, 212, 212, 217, 142, - 225, 230, 132, 1, 217, 143, 232, 185, 132, 1, 252, 147, 210, 204, 132, 1, - 227, 246, 210, 204, 132, 1, 252, 147, 246, 45, 132, 1, 227, 246, 246, 45, - 132, 1, 226, 61, 225, 184, 132, 1, 217, 143, 246, 45, 132, 1, 252, 147, - 212, 139, 132, 1, 227, 246, 212, 139, 132, 1, 252, 147, 246, 65, 132, 1, - 227, 246, 246, 65, 132, 1, 246, 96, 225, 184, 132, 1, 217, 143, 246, 65, - 132, 1, 252, 147, 221, 182, 132, 1, 227, 246, 221, 182, 132, 1, 252, 147, - 250, 99, 132, 1, 227, 246, 250, 99, 132, 1, 227, 161, 132, 1, 252, 131, - 250, 99, 132, 1, 206, 57, 132, 1, 219, 57, 132, 1, 246, 96, 230, 67, 132, - 1, 209, 41, 132, 1, 212, 212, 217, 115, 132, 1, 226, 61, 217, 115, 132, - 1, 246, 96, 217, 115, 132, 1, 239, 75, 132, 1, 226, 61, 230, 67, 132, 1, - 242, 30, 132, 3, 252, 180, 132, 22, 3, 252, 238, 132, 22, 3, 231, 192, - 252, 245, 132, 22, 3, 245, 135, 252, 245, 132, 22, 3, 231, 192, 232, 233, - 132, 22, 3, 245, 135, 232, 233, 132, 22, 3, 231, 192, 222, 50, 132, 22, - 3, 245, 135, 222, 50, 132, 22, 3, 240, 233, 132, 22, 3, 231, 38, 132, 22, - 3, 245, 135, 231, 38, 132, 22, 3, 231, 40, 245, 240, 132, 22, 3, 231, 39, - 239, 142, 252, 238, 132, 22, 3, 231, 39, 239, 142, 245, 135, 252, 238, - 132, 22, 3, 231, 39, 239, 142, 240, 189, 132, 22, 3, 240, 189, 132, 229, - 183, 18, 205, 85, 132, 229, 183, 18, 102, 132, 229, 183, 18, 105, 132, - 229, 183, 18, 142, 132, 229, 183, 18, 139, 132, 229, 183, 18, 168, 132, - 229, 183, 18, 184, 132, 229, 183, 18, 195, 132, 229, 183, 18, 193, 132, - 229, 183, 18, 200, 132, 22, 3, 245, 135, 240, 233, 132, 22, 3, 245, 135, - 240, 189, 132, 220, 72, 230, 221, 189, 157, 231, 54, 232, 41, 189, 157, - 231, 139, 231, 162, 189, 157, 231, 139, 231, 131, 189, 157, 231, 139, - 231, 126, 189, 157, 231, 139, 231, 135, 189, 157, 231, 139, 219, 78, 189, - 157, 225, 3, 224, 246, 189, 157, 248, 33, 248, 100, 189, 157, 248, 33, - 248, 43, 189, 157, 248, 33, 248, 99, 189, 157, 214, 194, 214, 193, 189, - 157, 248, 33, 248, 29, 189, 157, 205, 248, 205, 255, 189, 157, 245, 52, - 248, 107, 189, 157, 211, 130, 221, 193, 189, 157, 211, 254, 212, 46, 189, - 157, 211, 254, 225, 206, 189, 157, 211, 254, 221, 56, 189, 157, 224, 68, - 225, 101, 189, 157, 245, 52, 245, 241, 189, 157, 211, 130, 212, 167, 189, - 157, 211, 254, 211, 225, 189, 157, 211, 254, 212, 52, 189, 157, 211, 254, - 211, 249, 189, 157, 224, 68, 223, 217, 189, 157, 249, 185, 250, 154, 189, - 157, 220, 212, 220, 240, 189, 157, 221, 67, 221, 58, 189, 157, 241, 163, - 242, 73, 189, 157, 221, 67, 221, 86, 189, 157, 241, 163, 242, 47, 189, - 157, 221, 67, 217, 155, 189, 157, 226, 182, 185, 189, 157, 205, 248, 206, - 85, 189, 157, 218, 125, 218, 49, 189, 157, 218, 50, 189, 157, 229, 145, - 229, 198, 189, 157, 229, 81, 189, 157, 206, 251, 207, 91, 189, 157, 214, - 194, 217, 170, 189, 157, 214, 194, 218, 23, 189, 157, 214, 194, 213, 202, - 189, 157, 238, 150, 238, 245, 189, 157, 229, 145, 248, 13, 189, 157, 148, - 252, 114, 189, 157, 238, 150, 224, 63, 189, 157, 222, 28, 189, 157, 217, - 137, 62, 189, 157, 227, 240, 239, 109, 189, 157, 217, 137, 253, 164, 189, - 157, 217, 137, 252, 136, 189, 157, 217, 137, 74, 189, 157, 217, 137, 233, - 102, 189, 157, 217, 137, 210, 3, 189, 157, 217, 137, 210, 1, 189, 157, - 217, 137, 71, 189, 157, 217, 137, 209, 162, 189, 157, 221, 69, 189, 247, - 25, 16, 250, 155, 189, 157, 217, 137, 75, 189, 157, 217, 137, 252, 248, - 189, 157, 217, 137, 76, 189, 157, 217, 137, 252, 206, 227, 234, 189, 157, - 217, 137, 252, 206, 227, 235, 189, 157, 230, 110, 189, 157, 227, 231, - 189, 157, 227, 232, 189, 157, 227, 240, 243, 75, 189, 157, 227, 240, 211, - 253, 189, 157, 227, 240, 211, 54, 189, 157, 227, 240, 248, 87, 189, 157, - 212, 44, 189, 157, 224, 202, 189, 157, 206, 79, 189, 157, 241, 153, 189, - 18, 205, 85, 189, 18, 102, 189, 18, 105, 189, 18, 142, 189, 18, 139, 189, - 18, 168, 189, 18, 184, 189, 18, 195, 189, 18, 193, 189, 18, 200, 189, - 157, 252, 110, 189, 157, 231, 136, 230, 90, 1, 231, 53, 230, 90, 1, 231, - 139, 213, 151, 230, 90, 1, 231, 139, 212, 176, 230, 90, 1, 225, 2, 230, - 90, 1, 247, 174, 230, 90, 1, 214, 194, 212, 176, 230, 90, 1, 223, 110, - 230, 90, 1, 245, 51, 230, 90, 1, 124, 230, 90, 1, 211, 254, 213, 151, - 230, 90, 1, 211, 254, 212, 176, 230, 90, 1, 224, 67, 230, 90, 1, 249, - 184, 230, 90, 1, 220, 211, 230, 90, 1, 221, 67, 213, 151, 230, 90, 1, - 241, 163, 212, 176, 230, 90, 1, 221, 67, 212, 176, 230, 90, 1, 241, 163, - 213, 151, 230, 90, 1, 226, 181, 230, 90, 1, 205, 247, 230, 90, 1, 229, - 145, 229, 198, 230, 90, 1, 229, 145, 229, 109, 230, 90, 1, 206, 250, 230, - 90, 1, 214, 194, 213, 151, 230, 90, 1, 238, 150, 213, 151, 230, 90, 1, - 76, 230, 90, 1, 238, 150, 212, 176, 230, 90, 243, 54, 230, 90, 22, 3, 62, - 230, 90, 22, 3, 227, 240, 232, 27, 230, 90, 22, 3, 253, 164, 230, 90, 22, - 3, 252, 136, 230, 90, 22, 3, 74, 230, 90, 22, 3, 233, 102, 230, 90, 22, - 3, 206, 123, 230, 90, 22, 3, 205, 169, 230, 90, 22, 3, 71, 230, 90, 22, - 3, 209, 162, 230, 90, 22, 3, 227, 240, 231, 36, 230, 90, 216, 47, 3, 229, - 144, 230, 90, 216, 47, 3, 223, 110, 230, 90, 22, 3, 75, 230, 90, 22, 3, - 243, 90, 230, 90, 22, 3, 76, 230, 90, 22, 3, 251, 159, 230, 90, 22, 3, - 252, 205, 230, 90, 231, 54, 230, 141, 230, 90, 135, 227, 240, 243, 75, - 230, 90, 135, 227, 240, 211, 253, 230, 90, 135, 227, 240, 211, 211, 230, - 90, 135, 227, 240, 248, 182, 230, 90, 248, 223, 83, 230, 90, 224, 211, - 230, 90, 18, 205, 85, 230, 90, 18, 102, 230, 90, 18, 105, 230, 90, 18, - 142, 230, 90, 18, 139, 230, 90, 18, 168, 230, 90, 18, 184, 230, 90, 18, - 195, 230, 90, 18, 193, 230, 90, 18, 200, 230, 90, 238, 150, 224, 67, 230, - 90, 238, 150, 226, 181, 230, 90, 1, 231, 140, 240, 19, 230, 90, 1, 231, - 140, 223, 110, 72, 4, 222, 173, 72, 141, 239, 215, 206, 3, 227, 16, 210, - 249, 62, 72, 141, 239, 215, 206, 3, 227, 16, 254, 254, 218, 129, 250, 63, - 185, 72, 141, 239, 215, 206, 3, 227, 16, 254, 254, 239, 215, 210, 229, - 185, 72, 141, 78, 206, 3, 227, 16, 227, 121, 185, 72, 141, 247, 188, 206, - 3, 227, 16, 216, 9, 185, 72, 141, 248, 200, 206, 3, 227, 16, 221, 57, - 215, 252, 185, 72, 141, 206, 3, 227, 16, 210, 229, 215, 252, 185, 72, - 141, 217, 113, 215, 251, 72, 141, 249, 104, 206, 3, 227, 15, 72, 141, - 249, 204, 215, 154, 206, 3, 227, 15, 72, 141, 233, 6, 210, 228, 72, 141, - 245, 234, 210, 229, 249, 103, 72, 141, 215, 251, 72, 141, 223, 115, 215, - 251, 72, 141, 210, 229, 215, 251, 72, 141, 223, 115, 210, 229, 215, 251, - 72, 141, 218, 151, 248, 71, 214, 110, 215, 251, 72, 141, 218, 216, 239, - 246, 215, 251, 72, 141, 248, 200, 255, 2, 218, 54, 227, 120, 152, 248, - 226, 72, 141, 239, 215, 210, 228, 72, 229, 132, 3, 248, 108, 218, 53, 72, - 229, 132, 3, 229, 246, 218, 53, 72, 251, 205, 3, 216, 5, 240, 173, 255, - 3, 218, 53, 72, 251, 205, 3, 255, 0, 179, 72, 251, 205, 3, 217, 87, 210, - 223, 72, 3, 219, 53, 245, 65, 240, 172, 72, 3, 219, 53, 245, 65, 240, 21, - 72, 3, 219, 53, 245, 65, 239, 216, 72, 3, 219, 53, 225, 225, 240, 172, - 72, 3, 219, 53, 225, 225, 240, 21, 72, 3, 219, 53, 245, 65, 219, 53, 225, - 224, 72, 18, 205, 85, 72, 18, 102, 72, 18, 105, 72, 18, 142, 72, 18, 139, - 72, 18, 168, 72, 18, 184, 72, 18, 195, 72, 18, 193, 72, 18, 200, 72, 18, - 160, 102, 72, 18, 160, 105, 72, 18, 160, 142, 72, 18, 160, 139, 72, 18, - 160, 168, 72, 18, 160, 184, 72, 18, 160, 195, 72, 18, 160, 193, 72, 18, - 160, 200, 72, 18, 160, 205, 85, 72, 141, 249, 106, 218, 53, 72, 141, 225, - 68, 249, 36, 223, 126, 205, 21, 72, 141, 248, 200, 255, 2, 218, 54, 249, - 37, 226, 225, 248, 226, 72, 141, 225, 68, 249, 36, 216, 6, 218, 53, 72, - 141, 248, 83, 227, 15, 72, 141, 210, 244, 254, 255, 72, 141, 239, 198, - 218, 54, 239, 158, 72, 141, 239, 198, 218, 54, 239, 164, 72, 141, 252, - 115, 231, 157, 239, 158, 72, 141, 252, 115, 231, 157, 239, 164, 72, 3, - 206, 71, 210, 227, 72, 3, 227, 200, 210, 227, 72, 1, 172, 72, 1, 231, - 167, 72, 1, 240, 244, 72, 1, 240, 99, 72, 1, 225, 77, 72, 1, 249, 1, 72, - 1, 248, 110, 72, 1, 232, 200, 72, 1, 223, 144, 72, 1, 210, 208, 72, 1, - 210, 196, 72, 1, 246, 54, 72, 1, 246, 38, 72, 1, 224, 103, 72, 1, 212, - 219, 72, 1, 212, 56, 72, 1, 246, 145, 72, 1, 245, 192, 72, 1, 199, 72, 1, - 179, 72, 1, 221, 93, 72, 1, 250, 183, 72, 1, 250, 0, 72, 1, 185, 72, 1, - 210, 243, 72, 1, 210, 233, 72, 1, 243, 196, 72, 1, 243, 190, 72, 1, 207, - 96, 72, 1, 205, 81, 72, 1, 205, 116, 72, 1, 255, 5, 72, 1, 190, 72, 1, - 219, 113, 72, 1, 230, 141, 72, 1, 216, 2, 72, 1, 214, 96, 72, 1, 217, - 199, 72, 1, 155, 72, 1, 62, 72, 1, 230, 250, 72, 1, 241, 200, 219, 113, - 72, 1, 231, 72, 72, 1, 218, 89, 72, 22, 3, 253, 164, 72, 22, 3, 74, 72, - 22, 3, 233, 102, 72, 22, 3, 71, 72, 22, 3, 209, 162, 72, 22, 3, 115, 137, - 72, 22, 3, 115, 218, 90, 72, 22, 3, 115, 149, 72, 22, 3, 115, 229, 173, - 72, 22, 3, 75, 72, 22, 3, 243, 104, 72, 22, 3, 76, 72, 22, 3, 222, 152, - 72, 3, 218, 135, 213, 204, 225, 78, 218, 124, 72, 3, 218, 129, 250, 62, - 72, 22, 3, 218, 224, 74, 72, 22, 3, 218, 224, 233, 102, 72, 3, 223, 126, - 205, 22, 225, 233, 246, 145, 72, 3, 214, 207, 230, 60, 72, 141, 239, 123, - 72, 141, 222, 16, 72, 3, 230, 63, 218, 53, 72, 3, 206, 76, 218, 53, 72, - 3, 230, 64, 210, 244, 248, 226, 72, 3, 227, 123, 248, 226, 72, 3, 239, - 219, 248, 227, 218, 214, 72, 3, 239, 219, 227, 113, 218, 214, 72, 3, 233, - 2, 227, 123, 248, 226, 72, 213, 191, 3, 230, 64, 210, 244, 248, 226, 72, - 213, 191, 3, 227, 123, 248, 226, 72, 213, 191, 3, 233, 2, 227, 123, 248, - 226, 72, 213, 191, 1, 172, 72, 213, 191, 1, 231, 167, 72, 213, 191, 1, - 240, 244, 72, 213, 191, 1, 240, 99, 72, 213, 191, 1, 225, 77, 72, 213, - 191, 1, 249, 1, 72, 213, 191, 1, 248, 110, 72, 213, 191, 1, 232, 200, 72, - 213, 191, 1, 223, 144, 72, 213, 191, 1, 210, 208, 72, 213, 191, 1, 210, - 196, 72, 213, 191, 1, 246, 54, 72, 213, 191, 1, 246, 38, 72, 213, 191, 1, - 224, 103, 72, 213, 191, 1, 212, 219, 72, 213, 191, 1, 212, 56, 72, 213, - 191, 1, 246, 145, 72, 213, 191, 1, 245, 192, 72, 213, 191, 1, 199, 72, - 213, 191, 1, 179, 72, 213, 191, 1, 221, 93, 72, 213, 191, 1, 250, 183, - 72, 213, 191, 1, 250, 0, 72, 213, 191, 1, 185, 72, 213, 191, 1, 210, 243, - 72, 213, 191, 1, 210, 233, 72, 213, 191, 1, 243, 196, 72, 213, 191, 1, - 243, 190, 72, 213, 191, 1, 207, 96, 72, 213, 191, 1, 205, 81, 72, 213, - 191, 1, 205, 116, 72, 213, 191, 1, 255, 5, 72, 213, 191, 1, 190, 72, 213, - 191, 1, 219, 113, 72, 213, 191, 1, 230, 141, 72, 213, 191, 1, 216, 2, 72, - 213, 191, 1, 214, 96, 72, 213, 191, 1, 217, 199, 72, 213, 191, 1, 155, - 72, 213, 191, 1, 62, 72, 213, 191, 1, 230, 250, 72, 213, 191, 1, 241, - 200, 207, 96, 72, 213, 191, 1, 241, 200, 190, 72, 213, 191, 1, 241, 200, - 219, 113, 72, 230, 237, 218, 51, 231, 167, 72, 230, 237, 218, 51, 231, - 168, 249, 37, 226, 225, 248, 226, 72, 248, 214, 3, 77, 250, 55, 72, 248, - 214, 3, 147, 250, 55, 72, 248, 214, 3, 248, 215, 212, 129, 72, 248, 214, - 3, 217, 112, 255, 4, 72, 16, 243, 250, 249, 101, 72, 16, 219, 52, 218, - 136, 72, 16, 222, 39, 240, 171, 72, 16, 219, 52, 218, 137, 218, 216, 239, - 245, 72, 16, 221, 57, 179, 72, 16, 224, 51, 249, 101, 72, 16, 224, 51, - 249, 102, 223, 115, 255, 1, 72, 16, 224, 51, 249, 102, 239, 217, 255, 1, - 72, 16, 224, 51, 249, 102, 249, 37, 255, 1, 72, 3, 219, 53, 225, 225, - 219, 53, 245, 64, 72, 3, 219, 53, 225, 225, 239, 216, 72, 141, 249, 105, - 215, 154, 240, 62, 227, 16, 218, 215, 72, 141, 226, 183, 206, 3, 240, 62, - 227, 16, 218, 215, 72, 141, 223, 115, 210, 228, 72, 141, 78, 249, 128, - 218, 126, 206, 3, 227, 16, 227, 121, 185, 72, 141, 247, 188, 249, 128, - 218, 126, 206, 3, 227, 16, 216, 9, 185, 218, 166, 213, 114, 53, 230, 45, - 213, 114, 53, 218, 166, 213, 114, 3, 2, 245, 21, 230, 45, 213, 114, 3, 2, - 245, 21, 72, 141, 230, 55, 227, 124, 218, 53, 72, 141, 211, 76, 227, 124, - 218, 53, 66, 1, 172, 66, 1, 231, 167, 66, 1, 240, 244, 66, 1, 240, 99, - 66, 1, 225, 77, 66, 1, 249, 1, 66, 1, 248, 110, 66, 1, 232, 200, 66, 1, - 232, 170, 66, 1, 223, 144, 66, 1, 224, 69, 66, 1, 210, 208, 66, 1, 210, - 196, 66, 1, 246, 54, 66, 1, 246, 38, 66, 1, 224, 103, 66, 1, 212, 219, - 66, 1, 212, 56, 66, 1, 246, 145, 66, 1, 245, 192, 66, 1, 199, 66, 1, 179, - 66, 1, 221, 93, 66, 1, 250, 183, 66, 1, 250, 0, 66, 1, 185, 66, 1, 190, - 66, 1, 219, 113, 66, 1, 230, 141, 66, 1, 207, 96, 66, 1, 217, 199, 66, 1, - 155, 66, 1, 229, 172, 66, 1, 62, 66, 1, 215, 238, 62, 66, 1, 74, 66, 1, - 233, 102, 66, 1, 71, 66, 1, 209, 162, 66, 1, 75, 66, 1, 226, 169, 75, 66, - 1, 76, 66, 1, 251, 184, 66, 22, 3, 212, 178, 253, 164, 66, 22, 3, 253, - 164, 66, 22, 3, 74, 66, 22, 3, 233, 102, 66, 22, 3, 71, 66, 22, 3, 209, - 162, 66, 22, 3, 75, 66, 22, 3, 252, 205, 66, 22, 3, 226, 169, 233, 102, - 66, 22, 3, 226, 169, 76, 66, 22, 3, 174, 52, 66, 3, 252, 73, 66, 3, 67, - 55, 66, 3, 208, 183, 66, 3, 208, 188, 66, 3, 251, 229, 66, 107, 3, 169, - 190, 66, 107, 3, 169, 219, 113, 66, 107, 3, 169, 207, 96, 66, 107, 3, - 169, 155, 66, 1, 239, 232, 217, 199, 66, 18, 205, 85, 66, 18, 102, 66, - 18, 105, 66, 18, 142, 66, 18, 139, 66, 18, 168, 66, 18, 184, 66, 18, 195, - 66, 18, 193, 66, 18, 200, 66, 3, 229, 180, 217, 76, 66, 3, 217, 76, 66, - 16, 229, 141, 66, 16, 247, 149, 66, 16, 252, 224, 66, 16, 240, 154, 66, - 1, 216, 2, 66, 1, 214, 96, 66, 1, 115, 137, 66, 1, 115, 218, 90, 66, 1, - 115, 149, 66, 1, 115, 229, 173, 66, 22, 3, 115, 137, 66, 22, 3, 115, 218, - 90, 66, 22, 3, 115, 149, 66, 22, 3, 115, 229, 173, 66, 1, 226, 169, 225, - 77, 66, 1, 226, 169, 232, 170, 66, 1, 226, 169, 250, 97, 66, 1, 226, 169, - 250, 92, 66, 107, 3, 226, 169, 169, 199, 66, 107, 3, 226, 169, 169, 185, - 66, 107, 3, 226, 169, 169, 230, 141, 66, 1, 216, 8, 232, 4, 216, 2, 66, - 22, 3, 216, 8, 232, 4, 242, 192, 66, 135, 141, 216, 8, 232, 4, 239, 82, - 66, 135, 141, 216, 8, 232, 4, 231, 225, 221, 66, 66, 1, 207, 34, 220, 39, - 232, 4, 212, 56, 66, 1, 207, 34, 220, 39, 232, 4, 220, 45, 66, 22, 3, - 207, 34, 220, 39, 232, 4, 242, 192, 66, 22, 3, 207, 34, 220, 39, 232, 4, - 210, 3, 66, 3, 207, 34, 220, 39, 232, 4, 211, 117, 66, 3, 207, 34, 220, - 39, 232, 4, 211, 116, 66, 3, 207, 34, 220, 39, 232, 4, 211, 115, 66, 3, - 207, 34, 220, 39, 232, 4, 211, 114, 66, 3, 207, 34, 220, 39, 232, 4, 211, - 113, 66, 1, 243, 115, 220, 39, 232, 4, 224, 103, 66, 1, 243, 115, 220, - 39, 232, 4, 205, 176, 66, 1, 243, 115, 220, 39, 232, 4, 240, 64, 66, 22, - 3, 240, 166, 232, 4, 74, 66, 22, 3, 231, 230, 222, 206, 66, 22, 3, 231, - 230, 71, 66, 22, 3, 231, 230, 243, 104, 66, 1, 215, 238, 172, 66, 1, 215, - 238, 231, 167, 66, 1, 215, 238, 240, 244, 66, 1, 215, 238, 249, 1, 66, 1, - 215, 238, 205, 116, 66, 1, 215, 238, 223, 144, 66, 1, 215, 238, 246, 145, - 66, 1, 215, 238, 199, 66, 1, 215, 238, 221, 93, 66, 1, 215, 238, 242, 73, - 66, 1, 215, 238, 250, 183, 66, 1, 215, 238, 212, 56, 66, 1, 215, 238, - 155, 66, 107, 3, 215, 238, 169, 207, 96, 66, 22, 3, 215, 238, 253, 164, - 66, 22, 3, 215, 238, 75, 66, 22, 3, 215, 238, 174, 52, 66, 22, 3, 215, - 238, 42, 206, 123, 66, 3, 215, 238, 211, 116, 66, 3, 215, 238, 211, 115, - 66, 3, 215, 238, 211, 113, 66, 3, 215, 238, 211, 112, 66, 3, 215, 238, - 247, 82, 211, 116, 66, 3, 215, 238, 247, 82, 211, 115, 66, 3, 215, 238, - 247, 82, 243, 44, 211, 118, 66, 1, 218, 37, 222, 23, 242, 73, 66, 3, 218, - 37, 222, 23, 211, 113, 66, 215, 238, 18, 205, 85, 66, 215, 238, 18, 102, - 66, 215, 238, 18, 105, 66, 215, 238, 18, 142, 66, 215, 238, 18, 139, 66, - 215, 238, 18, 168, 66, 215, 238, 18, 184, 66, 215, 238, 18, 195, 66, 215, - 238, 18, 193, 66, 215, 238, 18, 200, 66, 3, 231, 160, 211, 117, 66, 3, - 231, 160, 211, 115, 66, 22, 3, 252, 193, 62, 66, 22, 3, 252, 193, 252, - 205, 66, 16, 215, 238, 102, 66, 16, 215, 238, 242, 167, 108, 6, 1, 252, - 122, 108, 6, 1, 250, 140, 108, 6, 1, 240, 214, 108, 6, 1, 245, 31, 108, - 6, 1, 243, 41, 108, 6, 1, 208, 197, 108, 6, 1, 205, 88, 108, 6, 1, 212, - 174, 108, 6, 1, 233, 68, 108, 6, 1, 232, 27, 108, 6, 1, 230, 82, 108, 6, - 1, 227, 221, 108, 6, 1, 225, 200, 108, 6, 1, 222, 165, 108, 6, 1, 221, - 231, 108, 6, 1, 205, 77, 108, 6, 1, 219, 95, 108, 6, 1, 217, 151, 108, 6, - 1, 212, 162, 108, 6, 1, 209, 234, 108, 6, 1, 221, 85, 108, 6, 1, 231, - 155, 108, 6, 1, 240, 90, 108, 6, 1, 220, 4, 108, 6, 1, 215, 171, 108, 6, - 1, 248, 45, 108, 6, 1, 248, 226, 108, 6, 1, 232, 154, 108, 6, 1, 247, - 240, 108, 6, 1, 248, 95, 108, 6, 1, 206, 179, 108, 6, 1, 232, 167, 108, - 6, 1, 239, 138, 108, 6, 1, 239, 71, 108, 6, 1, 239, 6, 108, 6, 1, 207, - 51, 108, 6, 1, 239, 95, 108, 6, 1, 238, 146, 108, 6, 1, 205, 249, 108, 6, - 1, 252, 237, 108, 1, 252, 122, 108, 1, 250, 140, 108, 1, 240, 214, 108, - 1, 245, 31, 108, 1, 243, 41, 108, 1, 208, 197, 108, 1, 205, 88, 108, 1, - 212, 174, 108, 1, 233, 68, 108, 1, 232, 27, 108, 1, 230, 82, 108, 1, 227, - 221, 108, 1, 225, 200, 108, 1, 222, 165, 108, 1, 221, 231, 108, 1, 205, - 77, 108, 1, 219, 95, 108, 1, 217, 151, 108, 1, 212, 162, 108, 1, 209, - 234, 108, 1, 221, 85, 108, 1, 231, 155, 108, 1, 240, 90, 108, 1, 220, 4, - 108, 1, 215, 171, 108, 1, 248, 45, 108, 1, 248, 226, 108, 1, 232, 154, - 108, 1, 247, 240, 108, 1, 248, 95, 108, 1, 206, 179, 108, 1, 232, 167, - 108, 1, 239, 138, 108, 1, 239, 71, 108, 1, 239, 6, 108, 1, 207, 51, 108, - 1, 239, 95, 108, 1, 238, 146, 108, 1, 241, 250, 108, 1, 205, 249, 108, 1, - 243, 56, 108, 1, 201, 240, 214, 108, 1, 252, 200, 108, 221, 229, 216, 39, - 65, 1, 108, 225, 200, 108, 1, 252, 237, 108, 1, 239, 94, 53, 108, 1, 230, - 132, 53, 25, 113, 231, 84, 25, 113, 214, 88, 25, 113, 224, 223, 25, 113, - 211, 193, 25, 113, 214, 77, 25, 113, 218, 198, 25, 113, 226, 240, 25, - 113, 221, 39, 25, 113, 214, 85, 25, 113, 215, 33, 25, 113, 214, 82, 25, - 113, 233, 125, 25, 113, 247, 246, 25, 113, 214, 92, 25, 113, 248, 54, 25, - 113, 231, 143, 25, 113, 212, 15, 25, 113, 221, 76, 25, 113, 239, 3, 25, - 113, 224, 219, 25, 113, 214, 86, 25, 113, 224, 213, 25, 113, 224, 217, - 25, 113, 211, 190, 25, 113, 218, 186, 25, 113, 214, 84, 25, 113, 218, - 196, 25, 113, 232, 10, 25, 113, 226, 233, 25, 113, 232, 13, 25, 113, 221, - 34, 25, 113, 221, 32, 25, 113, 221, 20, 25, 113, 221, 28, 25, 113, 221, - 26, 25, 113, 221, 23, 25, 113, 221, 25, 25, 113, 221, 22, 25, 113, 221, - 27, 25, 113, 221, 37, 25, 113, 221, 38, 25, 113, 221, 21, 25, 113, 221, - 31, 25, 113, 232, 11, 25, 113, 232, 9, 25, 113, 215, 26, 25, 113, 215, - 24, 25, 113, 215, 16, 25, 113, 215, 19, 25, 113, 215, 25, 25, 113, 215, - 21, 25, 113, 215, 20, 25, 113, 215, 18, 25, 113, 215, 29, 25, 113, 215, - 31, 25, 113, 215, 32, 25, 113, 215, 27, 25, 113, 215, 17, 25, 113, 215, - 22, 25, 113, 215, 30, 25, 113, 248, 36, 25, 113, 248, 34, 25, 113, 248, - 121, 25, 113, 248, 119, 25, 113, 221, 247, 25, 113, 233, 120, 25, 113, - 233, 111, 25, 113, 233, 119, 25, 113, 233, 116, 25, 113, 233, 114, 25, - 113, 233, 118, 25, 113, 214, 89, 25, 113, 233, 123, 25, 113, 233, 124, - 25, 113, 233, 112, 25, 113, 233, 117, 25, 113, 206, 29, 25, 113, 247, - 245, 25, 113, 248, 37, 25, 113, 248, 35, 25, 113, 248, 122, 25, 113, 248, - 120, 25, 113, 248, 52, 25, 113, 248, 53, 25, 113, 248, 38, 25, 113, 248, - 123, 25, 113, 221, 74, 25, 113, 232, 12, 25, 113, 214, 90, 25, 113, 206, - 35, 25, 113, 231, 75, 25, 113, 224, 215, 25, 113, 224, 221, 25, 113, 224, - 220, 25, 113, 211, 187, 25, 113, 241, 232, 25, 162, 241, 232, 25, 162, - 62, 25, 162, 252, 248, 25, 162, 190, 25, 162, 206, 98, 25, 162, 243, 6, - 25, 162, 75, 25, 162, 206, 39, 25, 162, 206, 52, 25, 162, 76, 25, 162, - 207, 96, 25, 162, 207, 92, 25, 162, 222, 206, 25, 162, 205, 247, 25, 162, - 71, 25, 162, 207, 38, 25, 162, 207, 51, 25, 162, 207, 20, 25, 162, 205, - 213, 25, 162, 242, 192, 25, 162, 206, 11, 25, 162, 74, 25, 162, 254, 252, - 25, 162, 254, 251, 25, 162, 206, 112, 25, 162, 206, 110, 25, 162, 243, 4, - 25, 162, 243, 3, 25, 162, 243, 5, 25, 162, 206, 38, 25, 162, 206, 37, 25, - 162, 223, 58, 25, 162, 223, 59, 25, 162, 223, 52, 25, 162, 223, 57, 25, - 162, 223, 55, 25, 162, 205, 241, 25, 162, 205, 240, 25, 162, 205, 239, - 25, 162, 205, 242, 25, 162, 205, 243, 25, 162, 210, 76, 25, 162, 210, 75, - 25, 162, 210, 73, 25, 162, 210, 69, 25, 162, 210, 70, 25, 162, 205, 212, - 25, 162, 205, 209, 25, 162, 205, 210, 25, 162, 205, 204, 25, 162, 205, - 205, 25, 162, 205, 206, 25, 162, 205, 208, 25, 162, 242, 186, 25, 162, - 242, 188, 25, 162, 206, 10, 25, 162, 237, 224, 25, 162, 237, 216, 25, - 162, 237, 219, 25, 162, 237, 217, 25, 162, 237, 221, 25, 162, 237, 223, - 25, 162, 252, 30, 25, 162, 252, 27, 25, 162, 252, 25, 25, 162, 252, 26, - 25, 162, 214, 93, 25, 162, 254, 253, 25, 162, 206, 111, 25, 162, 206, 36, - 25, 162, 223, 54, 25, 162, 223, 53, 25, 100, 231, 84, 25, 100, 214, 88, - 25, 100, 231, 77, 25, 100, 224, 223, 25, 100, 224, 221, 25, 100, 224, - 220, 25, 100, 211, 193, 25, 100, 218, 198, 25, 100, 218, 193, 25, 100, - 218, 190, 25, 100, 218, 183, 25, 100, 218, 178, 25, 100, 218, 173, 25, - 100, 218, 184, 25, 100, 218, 196, 25, 100, 226, 240, 25, 100, 221, 39, - 25, 100, 221, 28, 25, 100, 215, 33, 25, 100, 214, 82, 25, 100, 233, 125, - 25, 100, 247, 246, 25, 100, 248, 54, 25, 100, 231, 143, 25, 100, 212, 15, - 25, 100, 221, 76, 25, 100, 239, 3, 25, 100, 231, 78, 25, 100, 231, 76, - 25, 100, 224, 219, 25, 100, 224, 213, 25, 100, 224, 215, 25, 100, 224, - 218, 25, 100, 224, 214, 25, 100, 211, 190, 25, 100, 211, 187, 25, 100, - 218, 191, 25, 100, 218, 186, 25, 100, 218, 172, 25, 100, 218, 171, 25, - 100, 214, 84, 25, 100, 218, 188, 25, 100, 218, 187, 25, 100, 218, 180, - 25, 100, 218, 182, 25, 100, 218, 195, 25, 100, 218, 175, 25, 100, 218, - 185, 25, 100, 218, 194, 25, 100, 218, 170, 25, 100, 226, 236, 25, 100, - 226, 231, 25, 100, 226, 233, 25, 100, 226, 230, 25, 100, 226, 228, 25, - 100, 226, 234, 25, 100, 226, 239, 25, 100, 226, 237, 25, 100, 232, 13, - 25, 100, 221, 30, 25, 100, 221, 31, 25, 100, 221, 36, 25, 100, 232, 11, - 25, 100, 215, 26, 25, 100, 215, 16, 25, 100, 215, 19, 25, 100, 215, 21, - 25, 100, 221, 247, 25, 100, 233, 120, 25, 100, 233, 113, 25, 100, 214, - 89, 25, 100, 233, 121, 25, 100, 206, 29, 25, 100, 206, 25, 25, 100, 206, - 26, 25, 100, 221, 74, 25, 100, 232, 12, 25, 100, 239, 1, 25, 100, 238, - 255, 25, 100, 239, 2, 25, 100, 239, 0, 25, 100, 206, 35, 25, 100, 231, - 80, 25, 100, 231, 79, 25, 100, 231, 83, 25, 100, 231, 81, 25, 100, 231, - 82, 25, 100, 214, 86, 31, 4, 155, 31, 4, 238, 42, 31, 4, 239, 11, 31, 4, - 239, 141, 31, 4, 239, 53, 31, 4, 239, 71, 31, 4, 238, 149, 31, 4, 238, - 148, 31, 4, 230, 141, 31, 4, 229, 81, 31, 4, 229, 235, 31, 4, 230, 140, - 31, 4, 230, 50, 31, 4, 230, 58, 31, 4, 229, 144, 31, 4, 229, 50, 31, 4, - 239, 20, 31, 4, 239, 14, 31, 4, 239, 16, 31, 4, 239, 19, 31, 4, 239, 17, - 31, 4, 239, 18, 31, 4, 239, 15, 31, 4, 239, 13, 31, 4, 185, 31, 4, 226, - 114, 31, 4, 226, 254, 31, 4, 228, 18, 31, 4, 227, 107, 31, 4, 227, 119, - 31, 4, 226, 181, 31, 4, 226, 50, 31, 4, 213, 21, 31, 4, 213, 15, 31, 4, - 213, 17, 31, 4, 213, 20, 31, 4, 213, 18, 31, 4, 213, 19, 31, 4, 213, 16, - 31, 4, 213, 14, 31, 4, 219, 113, 31, 4, 218, 50, 31, 4, 218, 208, 31, 4, - 219, 109, 31, 4, 219, 29, 31, 4, 219, 51, 31, 4, 218, 124, 31, 4, 218, - 18, 31, 4, 217, 199, 31, 4, 213, 203, 31, 4, 215, 80, 31, 4, 217, 196, - 31, 4, 217, 74, 31, 4, 217, 86, 31, 4, 214, 193, 31, 4, 213, 112, 31, 4, - 216, 2, 31, 4, 215, 116, 31, 4, 215, 183, 31, 4, 215, 254, 31, 4, 215, - 212, 31, 4, 215, 214, 31, 4, 215, 158, 31, 4, 215, 98, 31, 4, 220, 19, - 31, 4, 219, 214, 31, 4, 219, 237, 31, 4, 220, 18, 31, 4, 219, 254, 31, 4, - 219, 255, 31, 4, 219, 226, 31, 4, 219, 225, 31, 4, 219, 168, 31, 4, 219, - 164, 31, 4, 219, 167, 31, 4, 219, 165, 31, 4, 219, 166, 31, 4, 219, 251, - 31, 4, 219, 243, 31, 4, 219, 246, 31, 4, 219, 250, 31, 4, 219, 247, 31, - 4, 219, 248, 31, 4, 219, 245, 31, 4, 219, 242, 31, 4, 219, 238, 31, 4, - 219, 241, 31, 4, 219, 239, 31, 4, 219, 240, 31, 4, 250, 183, 31, 4, 249, - 101, 31, 4, 249, 244, 31, 4, 250, 181, 31, 4, 250, 50, 31, 4, 250, 61, - 31, 4, 249, 184, 31, 4, 249, 51, 31, 4, 209, 70, 31, 4, 207, 148, 31, 4, - 208, 214, 31, 4, 209, 69, 31, 4, 209, 34, 31, 4, 209, 39, 31, 4, 208, - 173, 31, 4, 207, 139, 31, 4, 212, 219, 31, 4, 210, 170, 31, 4, 211, 211, - 31, 4, 212, 215, 31, 4, 212, 120, 31, 4, 212, 131, 31, 4, 124, 31, 4, - 210, 130, 31, 4, 249, 1, 31, 4, 247, 40, 31, 4, 247, 251, 31, 4, 249, 0, - 31, 4, 248, 140, 31, 4, 248, 148, 31, 4, 247, 174, 31, 4, 247, 7, 31, 4, - 206, 181, 31, 4, 206, 151, 31, 4, 206, 169, 31, 4, 206, 180, 31, 4, 206, - 174, 31, 4, 206, 175, 31, 4, 206, 159, 31, 4, 206, 158, 31, 4, 206, 145, - 31, 4, 206, 141, 31, 4, 206, 144, 31, 4, 206, 142, 31, 4, 206, 143, 31, - 4, 199, 31, 4, 223, 217, 31, 4, 224, 230, 31, 4, 225, 232, 31, 4, 225, - 106, 31, 4, 225, 110, 31, 4, 224, 67, 31, 4, 223, 153, 31, 4, 223, 144, - 31, 4, 223, 103, 31, 4, 223, 125, 31, 4, 223, 143, 31, 4, 223, 133, 31, - 4, 223, 134, 31, 4, 223, 110, 31, 4, 223, 93, 31, 4, 240, 25, 62, 31, 4, - 240, 25, 71, 31, 4, 240, 25, 74, 31, 4, 240, 25, 253, 164, 31, 4, 240, - 25, 243, 104, 31, 4, 240, 25, 75, 31, 4, 240, 25, 76, 31, 4, 240, 25, - 207, 96, 31, 4, 172, 31, 4, 230, 236, 31, 4, 231, 123, 31, 4, 232, 63, - 31, 4, 231, 221, 31, 4, 231, 224, 31, 4, 231, 53, 31, 4, 231, 52, 31, 4, - 230, 195, 31, 4, 230, 188, 31, 4, 230, 194, 31, 4, 230, 189, 31, 4, 230, - 190, 31, 4, 230, 181, 31, 4, 230, 175, 31, 4, 230, 177, 31, 4, 230, 180, - 31, 4, 230, 178, 31, 4, 230, 179, 31, 4, 230, 176, 31, 4, 230, 174, 31, - 4, 230, 170, 31, 4, 230, 173, 31, 4, 230, 171, 31, 4, 230, 172, 31, 4, - 207, 96, 31, 4, 206, 216, 31, 4, 207, 20, 31, 4, 207, 95, 31, 4, 207, 45, - 31, 4, 207, 51, 31, 4, 206, 250, 31, 4, 206, 249, 31, 4, 221, 84, 62, 31, - 4, 221, 84, 71, 31, 4, 221, 84, 74, 31, 4, 221, 84, 253, 164, 31, 4, 221, - 84, 243, 104, 31, 4, 221, 84, 75, 31, 4, 221, 84, 76, 31, 4, 205, 116, - 31, 4, 205, 9, 31, 4, 205, 40, 31, 4, 205, 115, 31, 4, 205, 91, 31, 4, - 205, 93, 31, 4, 205, 19, 31, 4, 204, 252, 31, 4, 205, 81, 31, 4, 205, 58, - 31, 4, 205, 67, 31, 4, 205, 80, 31, 4, 205, 71, 31, 4, 205, 72, 31, 4, - 205, 64, 31, 4, 205, 49, 31, 4, 190, 31, 4, 205, 213, 31, 4, 206, 11, 31, - 4, 206, 109, 31, 4, 206, 49, 31, 4, 206, 52, 31, 4, 205, 247, 31, 4, 205, - 238, 31, 4, 246, 145, 31, 4, 243, 237, 31, 4, 245, 168, 31, 4, 246, 144, - 31, 4, 245, 251, 31, 4, 246, 9, 31, 4, 245, 51, 31, 4, 243, 206, 31, 4, - 246, 54, 31, 4, 246, 19, 31, 4, 246, 31, 31, 4, 246, 53, 31, 4, 246, 41, - 31, 4, 246, 42, 31, 4, 246, 24, 31, 4, 246, 10, 31, 4, 232, 200, 31, 4, - 232, 104, 31, 4, 232, 162, 31, 4, 232, 199, 31, 4, 232, 180, 31, 4, 232, - 182, 31, 4, 232, 122, 31, 4, 232, 84, 31, 4, 240, 244, 31, 4, 239, 213, - 31, 4, 240, 61, 31, 4, 240, 241, 31, 4, 240, 162, 31, 4, 240, 170, 31, 4, - 240, 19, 31, 4, 240, 18, 31, 4, 239, 174, 31, 4, 239, 170, 31, 4, 239, - 173, 31, 4, 239, 171, 31, 4, 239, 172, 31, 4, 240, 135, 31, 4, 240, 115, - 31, 4, 240, 125, 31, 4, 240, 134, 31, 4, 240, 129, 31, 4, 240, 130, 31, - 4, 240, 119, 31, 4, 240, 104, 31, 4, 212, 56, 31, 4, 211, 230, 31, 4, - 212, 19, 31, 4, 212, 55, 31, 4, 212, 39, 31, 4, 212, 41, 31, 4, 211, 253, - 31, 4, 211, 222, 31, 4, 248, 110, 31, 4, 248, 14, 31, 4, 248, 58, 31, 4, - 248, 109, 31, 4, 248, 78, 31, 4, 248, 82, 31, 4, 248, 32, 31, 4, 248, 3, - 31, 4, 221, 93, 31, 4, 221, 59, 31, 4, 221, 78, 31, 4, 221, 92, 31, 4, - 221, 80, 31, 4, 221, 81, 31, 4, 221, 66, 31, 4, 221, 55, 31, 4, 210, 243, - 31, 4, 210, 216, 31, 4, 210, 222, 31, 4, 210, 242, 31, 4, 210, 236, 31, - 4, 210, 237, 31, 4, 210, 220, 31, 4, 210, 214, 31, 4, 210, 85, 31, 4, - 210, 77, 31, 4, 210, 81, 31, 4, 210, 84, 31, 4, 210, 82, 31, 4, 210, 83, - 31, 4, 210, 79, 31, 4, 210, 78, 31, 4, 242, 73, 31, 4, 241, 88, 31, 4, - 241, 250, 31, 4, 242, 72, 31, 4, 242, 21, 31, 4, 242, 28, 31, 4, 241, - 162, 31, 4, 241, 66, 31, 4, 179, 31, 4, 220, 82, 31, 4, 221, 53, 31, 4, - 222, 51, 31, 4, 221, 164, 31, 4, 221, 174, 31, 4, 220, 211, 31, 4, 220, - 45, 31, 4, 218, 8, 31, 4, 226, 39, 31, 4, 241, 60, 31, 36, 240, 159, 23, - 22, 230, 20, 83, 31, 36, 22, 230, 20, 83, 31, 36, 240, 159, 83, 31, 217, - 77, 83, 31, 206, 231, 31, 241, 82, 213, 251, 31, 247, 155, 31, 216, 52, - 31, 247, 162, 31, 220, 136, 247, 162, 31, 219, 196, 83, 31, 221, 229, - 216, 39, 31, 18, 102, 31, 18, 105, 31, 18, 142, 31, 18, 139, 31, 18, 168, - 31, 18, 184, 31, 18, 195, 31, 18, 193, 31, 18, 200, 31, 43, 212, 98, 31, - 43, 210, 123, 31, 43, 212, 3, 31, 43, 241, 130, 31, 43, 241, 243, 31, 43, - 214, 252, 31, 43, 216, 17, 31, 43, 243, 79, 31, 43, 224, 190, 31, 43, - 238, 29, 31, 43, 212, 99, 211, 242, 31, 4, 217, 82, 226, 50, 31, 4, 226, - 46, 31, 4, 226, 47, 31, 4, 226, 48, 31, 4, 217, 82, 249, 51, 31, 4, 249, - 48, 31, 4, 249, 49, 31, 4, 249, 50, 31, 4, 217, 82, 241, 66, 31, 4, 241, - 62, 31, 4, 241, 63, 31, 4, 241, 64, 31, 4, 217, 82, 220, 45, 31, 4, 220, - 41, 31, 4, 220, 42, 31, 4, 220, 43, 31, 211, 119, 141, 205, 250, 31, 211, - 119, 141, 245, 213, 31, 211, 119, 141, 218, 153, 31, 211, 119, 141, 215, - 144, 218, 153, 31, 211, 119, 141, 245, 142, 31, 211, 119, 141, 231, 202, - 31, 211, 119, 141, 248, 40, 31, 211, 119, 141, 239, 8, 31, 211, 119, 141, - 245, 212, 31, 211, 119, 141, 230, 208, 192, 1, 62, 192, 1, 75, 192, 1, - 74, 192, 1, 76, 192, 1, 71, 192, 1, 209, 148, 192, 1, 240, 244, 192, 1, - 172, 192, 1, 240, 170, 192, 1, 240, 61, 192, 1, 240, 19, 192, 1, 239, - 213, 192, 1, 239, 176, 192, 1, 155, 192, 1, 239, 71, 192, 1, 239, 11, - 192, 1, 238, 149, 192, 1, 238, 42, 192, 1, 238, 17, 192, 1, 230, 141, - 192, 1, 230, 58, 192, 1, 229, 235, 192, 1, 229, 144, 192, 1, 229, 81, - 192, 1, 229, 51, 192, 1, 185, 192, 1, 227, 119, 192, 1, 226, 254, 192, 1, - 226, 181, 192, 1, 226, 114, 192, 1, 199, 192, 1, 238, 173, 192, 1, 225, - 219, 192, 1, 225, 110, 192, 1, 224, 230, 192, 1, 224, 67, 192, 1, 223, - 217, 192, 1, 223, 155, 192, 1, 219, 213, 192, 1, 219, 199, 192, 1, 219, - 192, 192, 1, 219, 183, 192, 1, 219, 172, 192, 1, 219, 170, 192, 1, 217, - 199, 192, 1, 182, 192, 1, 217, 86, 192, 1, 215, 80, 192, 1, 214, 193, - 192, 1, 213, 203, 192, 1, 213, 117, 192, 1, 246, 145, 192, 1, 212, 219, - 192, 1, 246, 9, 192, 1, 212, 131, 192, 1, 245, 168, 192, 1, 211, 211, - 192, 1, 245, 51, 192, 1, 243, 237, 192, 1, 243, 209, 192, 1, 245, 62, - 192, 1, 211, 147, 192, 1, 211, 146, 192, 1, 211, 135, 192, 1, 211, 134, - 192, 1, 211, 133, 192, 1, 211, 132, 192, 1, 210, 243, 192, 1, 210, 237, - 192, 1, 210, 222, 192, 1, 210, 220, 192, 1, 210, 216, 192, 1, 210, 215, - 192, 1, 207, 96, 192, 1, 207, 51, 192, 1, 207, 20, 192, 1, 206, 250, 192, - 1, 206, 216, 192, 1, 206, 203, 192, 1, 190, 192, 1, 206, 52, 192, 1, 206, - 11, 192, 1, 205, 247, 192, 1, 205, 213, 192, 1, 205, 177, 19, 20, 237, - 239, 19, 20, 75, 19, 20, 253, 128, 19, 20, 74, 19, 20, 233, 102, 19, 20, - 76, 19, 20, 222, 152, 19, 20, 206, 122, 222, 152, 19, 20, 85, 243, 104, - 19, 20, 85, 74, 19, 20, 62, 19, 20, 253, 164, 19, 20, 207, 51, 19, 20, - 180, 207, 51, 19, 20, 207, 20, 19, 20, 180, 207, 20, 19, 20, 207, 12, 19, - 20, 180, 207, 12, 19, 20, 206, 250, 19, 20, 180, 206, 250, 19, 20, 206, - 238, 19, 20, 180, 206, 238, 19, 20, 225, 194, 206, 238, 19, 20, 207, 96, - 19, 20, 180, 207, 96, 19, 20, 207, 95, 19, 20, 180, 207, 95, 19, 20, 225, - 194, 207, 95, 19, 20, 252, 205, 19, 20, 206, 122, 207, 129, 19, 20, 240, - 25, 213, 251, 19, 20, 42, 153, 19, 20, 42, 239, 236, 19, 20, 42, 249, - 154, 160, 218, 148, 19, 20, 42, 211, 102, 160, 218, 148, 19, 20, 42, 48, - 160, 218, 148, 19, 20, 42, 218, 148, 19, 20, 42, 50, 153, 19, 20, 42, 50, - 215, 144, 79, 213, 212, 19, 20, 42, 226, 247, 245, 23, 19, 20, 42, 215, - 144, 194, 91, 19, 20, 42, 220, 218, 19, 20, 42, 130, 212, 201, 19, 20, - 243, 41, 19, 20, 233, 68, 19, 20, 222, 165, 19, 20, 252, 122, 19, 20, - 221, 174, 19, 20, 222, 49, 19, 20, 221, 53, 19, 20, 221, 15, 19, 20, 220, - 211, 19, 20, 220, 187, 19, 20, 206, 122, 220, 187, 19, 20, 85, 239, 53, - 19, 20, 85, 239, 11, 19, 20, 179, 19, 20, 222, 51, 19, 20, 220, 43, 19, - 20, 180, 220, 43, 19, 20, 220, 41, 19, 20, 180, 220, 41, 19, 20, 220, 40, - 19, 20, 180, 220, 40, 19, 20, 220, 38, 19, 20, 180, 220, 38, 19, 20, 220, - 37, 19, 20, 180, 220, 37, 19, 20, 220, 45, 19, 20, 180, 220, 45, 19, 20, - 220, 44, 19, 20, 180, 220, 44, 19, 20, 206, 122, 220, 44, 19, 20, 222, - 67, 19, 20, 180, 222, 67, 19, 20, 85, 239, 155, 19, 20, 212, 131, 19, 20, - 212, 213, 19, 20, 211, 211, 19, 20, 211, 195, 19, 20, 124, 19, 20, 211, - 105, 19, 20, 206, 122, 211, 105, 19, 20, 85, 245, 251, 19, 20, 85, 245, - 168, 19, 20, 212, 219, 19, 20, 212, 215, 19, 20, 210, 128, 19, 20, 180, - 210, 128, 19, 20, 210, 112, 19, 20, 180, 210, 112, 19, 20, 210, 111, 19, - 20, 180, 210, 111, 19, 20, 105, 19, 20, 180, 105, 19, 20, 210, 104, 19, - 20, 180, 210, 104, 19, 20, 210, 130, 19, 20, 180, 210, 130, 19, 20, 210, - 129, 19, 20, 180, 210, 129, 19, 20, 225, 194, 210, 129, 19, 20, 213, 10, - 19, 20, 210, 203, 19, 20, 210, 187, 19, 20, 210, 185, 19, 20, 210, 208, - 19, 20, 231, 224, 19, 20, 232, 59, 19, 20, 231, 123, 19, 20, 231, 111, - 19, 20, 231, 53, 19, 20, 231, 33, 19, 20, 206, 122, 231, 33, 19, 20, 172, - 19, 20, 232, 63, 19, 20, 230, 190, 19, 20, 180, 230, 190, 19, 20, 230, - 188, 19, 20, 180, 230, 188, 19, 20, 230, 187, 19, 20, 180, 230, 187, 19, - 20, 230, 185, 19, 20, 180, 230, 185, 19, 20, 230, 184, 19, 20, 180, 230, - 184, 19, 20, 230, 195, 19, 20, 180, 230, 195, 19, 20, 230, 194, 19, 20, - 180, 230, 194, 19, 20, 225, 194, 230, 194, 19, 20, 232, 76, 19, 20, 230, - 196, 19, 20, 214, 162, 231, 214, 19, 20, 214, 162, 231, 112, 19, 20, 214, - 162, 231, 47, 19, 20, 214, 162, 232, 43, 19, 20, 248, 148, 19, 20, 248, - 255, 19, 20, 247, 251, 19, 20, 247, 241, 19, 20, 247, 174, 19, 20, 247, - 105, 19, 20, 206, 122, 247, 105, 19, 20, 249, 1, 19, 20, 249, 0, 19, 20, - 247, 5, 19, 20, 180, 247, 5, 19, 20, 247, 3, 19, 20, 180, 247, 3, 19, 20, - 247, 2, 19, 20, 180, 247, 2, 19, 20, 247, 1, 19, 20, 180, 247, 1, 19, 20, - 247, 0, 19, 20, 180, 247, 0, 19, 20, 247, 7, 19, 20, 180, 247, 7, 19, 20, - 247, 6, 19, 20, 180, 247, 6, 19, 20, 225, 194, 247, 6, 19, 20, 249, 34, - 19, 20, 217, 114, 212, 58, 19, 20, 227, 119, 19, 20, 228, 17, 19, 20, - 226, 254, 19, 20, 226, 224, 19, 20, 226, 181, 19, 20, 226, 150, 19, 20, - 206, 122, 226, 150, 19, 20, 185, 19, 20, 228, 18, 19, 20, 226, 48, 19, - 20, 180, 226, 48, 19, 20, 226, 46, 19, 20, 180, 226, 46, 19, 20, 226, 45, - 19, 20, 180, 226, 45, 19, 20, 226, 44, 19, 20, 180, 226, 44, 19, 20, 226, - 43, 19, 20, 180, 226, 43, 19, 20, 226, 50, 19, 20, 180, 226, 50, 19, 20, - 226, 49, 19, 20, 180, 226, 49, 19, 20, 225, 194, 226, 49, 19, 20, 229, - 28, 19, 20, 180, 229, 28, 19, 20, 227, 2, 19, 20, 251, 198, 229, 28, 19, - 20, 217, 114, 229, 28, 19, 20, 225, 110, 19, 20, 225, 231, 19, 20, 224, - 230, 19, 20, 224, 205, 19, 20, 224, 67, 19, 20, 224, 56, 19, 20, 206, - 122, 224, 56, 19, 20, 199, 19, 20, 225, 232, 19, 20, 223, 151, 19, 20, - 180, 223, 151, 19, 20, 223, 153, 19, 20, 180, 223, 153, 19, 20, 223, 152, - 19, 20, 180, 223, 152, 19, 20, 225, 194, 223, 152, 19, 20, 226, 33, 19, - 20, 85, 225, 79, 19, 20, 224, 235, 19, 20, 230, 58, 19, 20, 230, 139, 19, - 20, 229, 235, 19, 20, 229, 219, 19, 20, 229, 144, 19, 20, 229, 115, 19, - 20, 206, 122, 229, 115, 19, 20, 230, 141, 19, 20, 230, 140, 19, 20, 229, - 48, 19, 20, 180, 229, 48, 19, 20, 229, 47, 19, 20, 180, 229, 47, 19, 20, - 229, 46, 19, 20, 180, 229, 46, 19, 20, 229, 45, 19, 20, 180, 229, 45, 19, - 20, 229, 44, 19, 20, 180, 229, 44, 19, 20, 229, 50, 19, 20, 180, 229, 50, - 19, 20, 229, 49, 19, 20, 180, 229, 49, 19, 20, 149, 19, 20, 180, 149, 19, - 20, 169, 149, 19, 20, 217, 86, 19, 20, 217, 194, 19, 20, 215, 80, 19, 20, - 215, 61, 19, 20, 214, 193, 19, 20, 214, 174, 19, 20, 206, 122, 214, 174, - 19, 20, 217, 199, 19, 20, 217, 196, 19, 20, 213, 108, 19, 20, 180, 213, - 108, 19, 20, 213, 102, 19, 20, 180, 213, 102, 19, 20, 213, 101, 19, 20, - 180, 213, 101, 19, 20, 213, 97, 19, 20, 180, 213, 97, 19, 20, 213, 96, - 19, 20, 180, 213, 96, 19, 20, 213, 112, 19, 20, 180, 213, 112, 19, 20, - 213, 111, 19, 20, 180, 213, 111, 19, 20, 225, 194, 213, 111, 19, 20, 182, - 19, 20, 251, 198, 182, 19, 20, 213, 113, 19, 20, 249, 199, 182, 19, 20, - 226, 143, 214, 248, 19, 20, 225, 194, 214, 239, 19, 20, 225, 194, 217, - 255, 19, 20, 225, 194, 214, 109, 19, 20, 225, 194, 213, 206, 19, 20, 225, - 194, 214, 238, 19, 20, 225, 194, 217, 89, 19, 20, 215, 214, 19, 20, 215, - 183, 19, 20, 215, 178, 19, 20, 215, 158, 19, 20, 215, 152, 19, 20, 216, - 2, 19, 20, 215, 254, 19, 20, 215, 95, 19, 20, 180, 215, 95, 19, 20, 215, - 94, 19, 20, 180, 215, 94, 19, 20, 215, 93, 19, 20, 180, 215, 93, 19, 20, - 215, 92, 19, 20, 180, 215, 92, 19, 20, 215, 91, 19, 20, 180, 215, 91, 19, - 20, 215, 98, 19, 20, 180, 215, 98, 19, 20, 215, 97, 19, 20, 180, 215, 97, - 19, 20, 216, 4, 19, 20, 206, 52, 19, 20, 206, 107, 19, 20, 206, 11, 19, - 20, 206, 2, 19, 20, 205, 247, 19, 20, 205, 232, 19, 20, 206, 122, 205, - 232, 19, 20, 190, 19, 20, 206, 109, 19, 20, 205, 174, 19, 20, 180, 205, - 174, 19, 20, 205, 173, 19, 20, 180, 205, 173, 19, 20, 205, 172, 19, 20, - 180, 205, 172, 19, 20, 205, 171, 19, 20, 180, 205, 171, 19, 20, 205, 170, - 19, 20, 180, 205, 170, 19, 20, 205, 176, 19, 20, 180, 205, 176, 19, 20, - 205, 175, 19, 20, 180, 205, 175, 19, 20, 225, 194, 205, 175, 19, 20, 206, - 123, 19, 20, 249, 242, 206, 123, 19, 20, 180, 206, 123, 19, 20, 217, 114, - 206, 11, 19, 20, 219, 51, 19, 20, 219, 149, 219, 51, 19, 20, 180, 230, - 58, 19, 20, 219, 108, 19, 20, 218, 208, 19, 20, 218, 154, 19, 20, 218, - 124, 19, 20, 218, 107, 19, 20, 180, 229, 144, 19, 20, 219, 113, 19, 20, - 219, 109, 19, 20, 180, 230, 141, 19, 20, 218, 17, 19, 20, 180, 218, 17, - 19, 20, 137, 19, 20, 180, 137, 19, 20, 169, 137, 19, 20, 242, 28, 19, 20, - 242, 70, 19, 20, 241, 250, 19, 20, 241, 237, 19, 20, 241, 162, 19, 20, - 241, 151, 19, 20, 242, 73, 19, 20, 242, 72, 19, 20, 241, 65, 19, 20, 180, - 241, 65, 19, 20, 242, 139, 19, 20, 212, 41, 19, 20, 226, 31, 212, 41, 19, - 20, 212, 19, 19, 20, 226, 31, 212, 19, 19, 20, 212, 13, 19, 20, 226, 31, - 212, 13, 19, 20, 211, 253, 19, 20, 211, 248, 19, 20, 212, 56, 19, 20, - 212, 55, 19, 20, 211, 221, 19, 20, 180, 211, 221, 19, 20, 212, 58, 19, - 20, 210, 194, 19, 20, 210, 192, 19, 20, 210, 191, 19, 20, 210, 196, 19, - 20, 210, 197, 19, 20, 210, 98, 19, 20, 210, 97, 19, 20, 210, 96, 19, 20, - 210, 100, 19, 20, 223, 172, 239, 71, 19, 20, 223, 172, 239, 11, 19, 20, - 223, 172, 238, 247, 19, 20, 223, 172, 238, 149, 19, 20, 223, 172, 238, - 131, 19, 20, 223, 172, 155, 19, 20, 223, 172, 239, 141, 19, 20, 223, 172, - 239, 155, 19, 20, 223, 171, 239, 155, 19, 20, 238, 239, 19, 20, 220, 15, - 19, 20, 219, 237, 19, 20, 219, 232, 19, 20, 219, 226, 19, 20, 219, 221, - 19, 20, 220, 19, 19, 20, 220, 18, 19, 20, 220, 27, 19, 20, 211, 143, 19, - 20, 211, 141, 19, 20, 211, 140, 19, 20, 211, 144, 19, 20, 180, 219, 51, - 19, 20, 180, 218, 208, 19, 20, 180, 218, 124, 19, 20, 180, 219, 113, 19, - 20, 225, 75, 19, 20, 225, 25, 19, 20, 225, 21, 19, 20, 225, 2, 19, 20, - 224, 253, 19, 20, 225, 77, 19, 20, 225, 76, 19, 20, 225, 79, 19, 20, 224, - 96, 19, 20, 217, 114, 215, 214, 19, 20, 217, 114, 215, 183, 19, 20, 217, - 114, 215, 158, 19, 20, 217, 114, 216, 2, 19, 20, 206, 236, 212, 41, 19, - 20, 206, 236, 212, 19, 19, 20, 206, 236, 211, 253, 19, 20, 206, 236, 212, - 56, 19, 20, 206, 236, 212, 58, 19, 20, 229, 242, 19, 20, 229, 241, 19, - 20, 229, 240, 19, 20, 229, 239, 19, 20, 229, 248, 19, 20, 229, 247, 19, - 20, 229, 249, 19, 20, 212, 57, 212, 41, 19, 20, 212, 57, 212, 19, 19, 20, - 212, 57, 212, 13, 19, 20, 212, 57, 211, 253, 19, 20, 212, 57, 211, 248, - 19, 20, 212, 57, 212, 56, 19, 20, 212, 57, 212, 55, 19, 20, 212, 57, 212, - 58, 19, 20, 252, 192, 251, 150, 19, 20, 249, 199, 75, 19, 20, 249, 199, - 74, 19, 20, 249, 199, 76, 19, 20, 249, 199, 62, 19, 20, 249, 199, 207, - 51, 19, 20, 249, 199, 207, 20, 19, 20, 249, 199, 206, 250, 19, 20, 249, - 199, 207, 96, 19, 20, 249, 199, 225, 110, 19, 20, 249, 199, 224, 230, 19, - 20, 249, 199, 224, 67, 19, 20, 249, 199, 199, 19, 20, 249, 199, 231, 224, - 19, 20, 249, 199, 231, 123, 19, 20, 249, 199, 231, 53, 19, 20, 249, 199, - 172, 19, 20, 217, 114, 239, 71, 19, 20, 217, 114, 239, 11, 19, 20, 217, - 114, 238, 149, 19, 20, 217, 114, 155, 19, 20, 85, 240, 67, 19, 20, 85, - 240, 71, 19, 20, 85, 240, 85, 19, 20, 85, 240, 84, 19, 20, 85, 240, 73, - 19, 20, 85, 240, 99, 19, 20, 85, 218, 50, 19, 20, 85, 218, 124, 19, 20, - 85, 219, 51, 19, 20, 85, 219, 29, 19, 20, 85, 218, 208, 19, 20, 85, 219, - 113, 19, 20, 85, 206, 216, 19, 20, 85, 206, 250, 19, 20, 85, 207, 51, 19, - 20, 85, 207, 45, 19, 20, 85, 207, 20, 19, 20, 85, 207, 96, 19, 20, 85, - 238, 9, 19, 20, 85, 238, 10, 19, 20, 85, 238, 13, 19, 20, 85, 238, 12, - 19, 20, 85, 238, 11, 19, 20, 85, 238, 16, 19, 20, 85, 211, 230, 19, 20, - 85, 211, 253, 19, 20, 85, 212, 41, 19, 20, 85, 212, 39, 19, 20, 85, 212, - 19, 19, 20, 85, 212, 56, 19, 20, 85, 210, 175, 19, 20, 85, 210, 185, 19, - 20, 85, 210, 203, 19, 20, 85, 210, 202, 19, 20, 85, 210, 187, 19, 20, 85, - 210, 208, 19, 20, 85, 220, 82, 19, 20, 85, 220, 211, 19, 20, 85, 221, - 174, 19, 20, 85, 221, 164, 19, 20, 85, 221, 53, 19, 20, 85, 179, 19, 20, - 85, 222, 67, 19, 20, 85, 239, 213, 19, 20, 85, 240, 19, 19, 20, 85, 240, - 170, 19, 20, 85, 240, 162, 19, 20, 85, 240, 61, 19, 20, 85, 240, 244, 19, - 20, 85, 231, 132, 19, 20, 85, 231, 138, 19, 20, 85, 231, 152, 19, 20, 85, - 231, 151, 19, 20, 85, 231, 145, 19, 20, 85, 231, 167, 19, 20, 85, 231, - 67, 19, 20, 85, 231, 68, 19, 20, 85, 231, 71, 19, 20, 85, 231, 70, 19, - 20, 85, 231, 69, 19, 20, 85, 231, 72, 19, 20, 85, 231, 73, 19, 20, 85, - 223, 217, 19, 20, 85, 224, 67, 19, 20, 85, 225, 110, 19, 20, 85, 225, - 106, 19, 20, 85, 224, 230, 19, 20, 85, 199, 19, 20, 85, 226, 114, 19, 20, - 85, 226, 181, 19, 20, 85, 227, 119, 19, 20, 85, 227, 107, 19, 20, 85, - 226, 254, 19, 20, 85, 185, 19, 20, 85, 205, 213, 19, 20, 85, 205, 247, - 19, 20, 85, 206, 52, 19, 20, 85, 206, 49, 19, 20, 85, 206, 11, 19, 20, - 85, 190, 19, 20, 85, 232, 104, 19, 20, 217, 114, 232, 104, 19, 20, 85, - 232, 122, 19, 20, 85, 232, 182, 19, 20, 85, 232, 180, 19, 20, 85, 232, - 162, 19, 20, 217, 114, 232, 162, 19, 20, 85, 232, 200, 19, 20, 85, 232, - 135, 19, 20, 85, 232, 139, 19, 20, 85, 232, 149, 19, 20, 85, 232, 148, - 19, 20, 85, 232, 147, 19, 20, 85, 232, 150, 19, 20, 85, 229, 81, 19, 20, - 85, 229, 144, 19, 20, 85, 230, 58, 19, 20, 85, 230, 50, 19, 20, 85, 229, - 235, 19, 20, 85, 230, 141, 19, 20, 85, 245, 55, 19, 20, 85, 245, 56, 19, - 20, 85, 245, 61, 19, 20, 85, 245, 60, 19, 20, 85, 245, 57, 19, 20, 85, - 245, 62, 19, 20, 85, 229, 238, 19, 20, 85, 229, 240, 19, 20, 85, 229, - 244, 19, 20, 85, 229, 243, 19, 20, 85, 229, 242, 19, 20, 85, 229, 248, - 19, 20, 85, 211, 138, 19, 20, 85, 211, 140, 19, 20, 85, 211, 143, 19, 20, - 85, 211, 142, 19, 20, 85, 211, 141, 19, 20, 85, 211, 144, 19, 20, 85, - 211, 133, 19, 20, 85, 211, 134, 19, 20, 85, 211, 146, 19, 20, 85, 211, - 145, 19, 20, 85, 211, 135, 19, 20, 85, 211, 147, 19, 20, 85, 205, 9, 19, - 20, 85, 205, 19, 19, 20, 85, 205, 93, 19, 20, 85, 205, 91, 19, 20, 85, - 205, 40, 19, 20, 85, 205, 116, 19, 20, 85, 205, 159, 19, 20, 85, 78, 205, - 159, 19, 20, 85, 243, 183, 19, 20, 85, 243, 184, 19, 20, 85, 243, 193, - 19, 20, 85, 243, 192, 19, 20, 85, 243, 187, 19, 20, 85, 243, 196, 19, 20, - 85, 213, 203, 19, 20, 85, 214, 193, 19, 20, 85, 217, 86, 19, 20, 85, 217, - 74, 19, 20, 85, 215, 80, 19, 20, 85, 217, 199, 19, 20, 85, 215, 116, 19, - 20, 85, 215, 158, 19, 20, 85, 215, 214, 19, 20, 85, 215, 212, 19, 20, 85, - 215, 183, 19, 20, 85, 216, 2, 19, 20, 85, 216, 4, 19, 20, 85, 210, 216, - 19, 20, 85, 210, 220, 19, 20, 85, 210, 237, 19, 20, 85, 210, 236, 19, 20, - 85, 210, 222, 19, 20, 85, 210, 243, 19, 20, 85, 248, 14, 19, 20, 85, 248, - 32, 19, 20, 85, 248, 82, 19, 20, 85, 248, 78, 19, 20, 85, 248, 58, 19, - 20, 85, 248, 110, 19, 20, 85, 210, 178, 19, 20, 85, 210, 179, 19, 20, 85, - 210, 182, 19, 20, 85, 210, 181, 19, 20, 85, 210, 180, 19, 20, 85, 210, - 183, 19, 20, 248, 59, 53, 19, 20, 241, 82, 213, 251, 19, 20, 220, 11, 19, - 20, 225, 73, 19, 20, 224, 93, 19, 20, 224, 92, 19, 20, 224, 91, 19, 20, - 224, 90, 19, 20, 224, 95, 19, 20, 224, 94, 19, 20, 206, 236, 211, 219, - 19, 20, 206, 236, 211, 218, 19, 20, 206, 236, 211, 217, 19, 20, 206, 236, - 211, 216, 19, 20, 206, 236, 211, 215, 19, 20, 206, 236, 211, 222, 19, 20, - 206, 236, 211, 221, 19, 20, 206, 236, 42, 212, 58, 19, 20, 249, 199, 207, - 129, 222, 198, 214, 154, 83, 222, 198, 1, 250, 32, 222, 198, 1, 229, 68, - 222, 198, 1, 242, 25, 222, 198, 1, 217, 179, 222, 198, 1, 224, 188, 222, - 198, 1, 210, 15, 222, 198, 1, 246, 119, 222, 198, 1, 211, 170, 222, 198, - 1, 247, 165, 222, 198, 1, 248, 136, 222, 198, 1, 226, 101, 222, 198, 1, - 240, 0, 222, 198, 1, 225, 63, 222, 198, 1, 213, 244, 222, 198, 1, 218, - 44, 222, 198, 1, 252, 202, 222, 198, 1, 222, 156, 222, 198, 1, 209, 194, - 222, 198, 1, 243, 128, 222, 198, 1, 232, 252, 222, 198, 1, 243, 129, 222, - 198, 1, 222, 122, 222, 198, 1, 209, 250, 222, 198, 1, 233, 108, 222, 198, - 1, 243, 126, 222, 198, 1, 221, 154, 222, 198, 242, 24, 83, 222, 198, 218, - 224, 242, 24, 83, 181, 1, 242, 14, 242, 6, 242, 29, 242, 139, 181, 1, - 209, 148, 181, 1, 209, 179, 209, 195, 71, 181, 1, 205, 216, 181, 1, 206, - 123, 181, 1, 207, 129, 181, 1, 211, 224, 211, 223, 211, 246, 181, 1, 242, - 196, 181, 1, 252, 92, 62, 181, 1, 222, 107, 76, 181, 1, 253, 25, 62, 181, - 1, 252, 232, 181, 1, 229, 121, 76, 181, 1, 215, 137, 76, 181, 1, 76, 181, - 1, 222, 206, 181, 1, 222, 165, 181, 1, 219, 88, 219, 101, 219, 14, 137, - 181, 1, 231, 239, 181, 1, 248, 132, 181, 1, 231, 240, 232, 76, 181, 1, - 241, 55, 181, 1, 243, 28, 181, 1, 240, 165, 239, 161, 241, 55, 181, 1, - 240, 204, 181, 1, 206, 208, 206, 199, 207, 129, 181, 1, 239, 133, 239, - 155, 181, 1, 239, 137, 239, 155, 181, 1, 229, 123, 239, 155, 181, 1, 215, - 140, 239, 155, 181, 1, 225, 189, 223, 135, 225, 190, 226, 33, 181, 1, - 215, 138, 226, 33, 181, 1, 244, 18, 181, 1, 232, 231, 232, 235, 232, 222, - 74, 181, 1, 75, 181, 1, 232, 173, 232, 203, 181, 1, 240, 149, 181, 1, - 229, 124, 252, 248, 181, 1, 215, 142, 62, 181, 1, 232, 214, 243, 2, 181, - 1, 221, 111, 221, 136, 222, 67, 181, 1, 252, 165, 243, 0, 181, 1, 214, - 159, 182, 181, 1, 215, 65, 229, 120, 182, 181, 1, 215, 136, 182, 181, 1, - 249, 34, 181, 1, 205, 159, 181, 1, 211, 152, 211, 163, 210, 87, 213, 10, - 181, 1, 215, 135, 213, 10, 181, 1, 246, 240, 181, 1, 250, 13, 250, 16, - 249, 205, 251, 150, 181, 1, 215, 141, 251, 150, 181, 1, 244, 17, 181, 1, - 222, 136, 181, 1, 243, 91, 243, 93, 75, 181, 1, 227, 212, 227, 222, 229, - 28, 181, 1, 229, 122, 229, 28, 181, 1, 215, 139, 229, 28, 181, 1, 230, - 73, 230, 119, 229, 131, 149, 181, 1, 244, 19, 181, 1, 233, 41, 181, 1, - 233, 42, 181, 1, 246, 133, 246, 139, 246, 240, 181, 1, 222, 101, 242, - 195, 76, 181, 1, 243, 124, 181, 1, 232, 251, 181, 1, 247, 4, 181, 1, 248, - 240, 181, 1, 248, 147, 181, 1, 214, 31, 181, 1, 229, 119, 181, 1, 215, - 134, 181, 1, 237, 180, 181, 1, 220, 27, 181, 1, 206, 195, 181, 215, 41, - 220, 71, 181, 226, 95, 220, 71, 181, 247, 60, 220, 71, 181, 252, 1, 93, - 181, 210, 132, 93, 181, 250, 30, 93, 181, 1, 232, 76, 181, 1, 216, 4, - 181, 1, 222, 152, 181, 1, 241, 109, 248, 186, 222, 106, 181, 1, 241, 109, - 248, 186, 232, 234, 181, 1, 241, 109, 248, 186, 243, 92, 181, 1, 241, - 109, 248, 186, 253, 24, 181, 1, 241, 109, 248, 186, 252, 232, 212, 197, - 1, 62, 212, 197, 1, 74, 212, 197, 1, 71, 212, 197, 1, 172, 212, 197, 1, - 240, 244, 212, 197, 1, 225, 77, 212, 197, 1, 212, 219, 212, 197, 1, 246, - 145, 212, 197, 1, 199, 212, 197, 1, 179, 212, 197, 1, 250, 183, 212, 197, - 1, 185, 212, 197, 1, 190, 212, 197, 1, 230, 141, 212, 197, 1, 207, 96, - 212, 197, 1, 217, 199, 212, 197, 1, 155, 212, 197, 22, 3, 74, 212, 197, - 22, 3, 71, 212, 197, 3, 208, 188, 239, 99, 1, 62, 239, 99, 1, 74, 239, - 99, 1, 71, 239, 99, 1, 172, 239, 99, 1, 240, 244, 239, 99, 1, 225, 77, - 239, 99, 1, 212, 219, 239, 99, 1, 246, 145, 239, 99, 1, 199, 239, 99, 1, - 179, 239, 99, 1, 250, 183, 239, 99, 1, 185, 239, 99, 1, 190, 239, 99, 1, - 219, 113, 239, 99, 1, 230, 141, 239, 99, 1, 207, 96, 239, 99, 1, 217, - 199, 239, 99, 1, 155, 239, 99, 22, 3, 74, 239, 99, 22, 3, 71, 239, 99, 3, - 222, 8, 221, 71, 215, 41, 220, 71, 221, 71, 50, 220, 71, 249, 93, 1, 62, - 249, 93, 1, 74, 249, 93, 1, 71, 249, 93, 1, 172, 249, 93, 1, 240, 244, - 249, 93, 1, 225, 77, 249, 93, 1, 212, 219, 249, 93, 1, 246, 145, 249, 93, - 1, 199, 249, 93, 1, 179, 249, 93, 1, 250, 183, 249, 93, 1, 185, 249, 93, - 1, 190, 249, 93, 1, 219, 113, 249, 93, 1, 230, 141, 249, 93, 1, 207, 96, - 249, 93, 1, 217, 199, 249, 93, 1, 155, 249, 93, 22, 3, 74, 249, 93, 22, - 3, 71, 212, 196, 1, 62, 212, 196, 1, 74, 212, 196, 1, 71, 212, 196, 1, - 172, 212, 196, 1, 240, 244, 212, 196, 1, 225, 77, 212, 196, 1, 212, 219, - 212, 196, 1, 246, 145, 212, 196, 1, 199, 212, 196, 1, 179, 212, 196, 1, - 250, 183, 212, 196, 1, 185, 212, 196, 1, 190, 212, 196, 1, 230, 141, 212, - 196, 1, 207, 96, 212, 196, 1, 217, 199, 212, 196, 22, 3, 74, 212, 196, - 22, 3, 71, 82, 1, 172, 82, 1, 231, 167, 82, 1, 231, 53, 82, 1, 231, 138, - 82, 1, 225, 2, 82, 1, 249, 1, 82, 1, 248, 110, 82, 1, 247, 174, 82, 1, - 248, 32, 82, 1, 223, 110, 82, 1, 246, 145, 82, 1, 210, 196, 82, 1, 245, - 51, 82, 1, 210, 191, 82, 1, 224, 73, 82, 1, 212, 219, 82, 1, 212, 56, 82, - 1, 124, 82, 1, 211, 253, 82, 1, 224, 67, 82, 1, 250, 183, 82, 1, 221, 93, - 82, 1, 220, 211, 82, 1, 221, 66, 82, 1, 226, 181, 82, 1, 205, 247, 82, 1, - 218, 124, 82, 1, 229, 144, 82, 1, 208, 173, 82, 1, 216, 2, 82, 1, 214, - 56, 82, 1, 217, 199, 82, 1, 155, 82, 1, 230, 141, 82, 1, 220, 19, 82, - 233, 55, 22, 220, 5, 82, 233, 55, 22, 220, 18, 82, 233, 55, 22, 219, 237, - 82, 233, 55, 22, 219, 232, 82, 233, 55, 22, 219, 214, 82, 233, 55, 22, - 219, 184, 82, 233, 55, 22, 219, 172, 82, 233, 55, 22, 219, 171, 82, 233, - 55, 22, 218, 9, 82, 233, 55, 22, 218, 2, 82, 233, 55, 22, 229, 42, 82, - 233, 55, 22, 229, 31, 82, 233, 55, 22, 219, 255, 82, 233, 55, 22, 220, - 11, 82, 233, 55, 22, 219, 222, 210, 95, 102, 82, 233, 55, 22, 219, 222, - 210, 95, 105, 82, 233, 55, 22, 220, 1, 82, 22, 233, 40, 252, 41, 82, 22, - 233, 40, 253, 164, 82, 22, 3, 253, 164, 82, 22, 3, 74, 82, 22, 3, 233, - 102, 82, 22, 3, 206, 123, 82, 22, 3, 205, 169, 82, 22, 3, 71, 82, 22, 3, - 209, 162, 82, 22, 3, 210, 18, 82, 22, 3, 222, 206, 82, 22, 3, 190, 82, - 22, 3, 233, 129, 82, 22, 3, 75, 82, 22, 3, 252, 248, 82, 22, 3, 252, 205, - 82, 22, 3, 222, 152, 82, 22, 3, 251, 184, 82, 3, 224, 203, 82, 3, 219, - 49, 82, 3, 205, 180, 82, 3, 226, 60, 82, 3, 211, 39, 82, 3, 250, 131, 82, - 3, 218, 119, 82, 3, 211, 128, 82, 3, 232, 34, 82, 3, 252, 207, 82, 3, - 217, 152, 217, 145, 82, 3, 208, 185, 82, 3, 247, 168, 82, 3, 250, 104, - 82, 3, 231, 159, 82, 3, 250, 126, 82, 3, 248, 229, 221, 16, 230, 201, 82, - 3, 230, 27, 211, 105, 82, 3, 250, 2, 82, 3, 221, 68, 226, 111, 82, 3, - 231, 31, 82, 247, 25, 16, 218, 200, 82, 3, 251, 166, 82, 3, 251, 187, 82, - 18, 205, 85, 82, 18, 102, 82, 18, 105, 82, 18, 142, 82, 18, 139, 82, 18, - 168, 82, 18, 184, 82, 18, 195, 82, 18, 193, 82, 18, 200, 82, 16, 230, 27, - 251, 189, 214, 177, 82, 16, 230, 27, 251, 189, 226, 80, 82, 16, 230, 27, - 251, 189, 221, 15, 82, 16, 230, 27, 251, 189, 250, 33, 82, 16, 230, 27, - 251, 189, 249, 73, 82, 16, 230, 27, 251, 189, 220, 152, 82, 16, 230, 27, - 251, 189, 220, 146, 82, 16, 230, 27, 251, 189, 220, 144, 82, 16, 230, 27, - 251, 189, 220, 150, 82, 16, 230, 27, 251, 189, 220, 148, 90, 249, 217, - 90, 243, 54, 90, 247, 155, 90, 241, 82, 213, 251, 90, 247, 162, 90, 241, - 125, 245, 21, 90, 211, 127, 214, 187, 237, 239, 90, 215, 78, 4, 249, 150, - 227, 187, 90, 227, 218, 247, 155, 90, 227, 218, 241, 82, 213, 251, 90, - 224, 186, 90, 241, 108, 54, 217, 60, 102, 90, 241, 108, 54, 217, 60, 105, - 90, 241, 108, 54, 217, 60, 142, 90, 22, 216, 39, 90, 18, 205, 85, 90, 18, - 102, 90, 18, 105, 90, 18, 142, 90, 18, 139, 90, 18, 168, 90, 18, 184, 90, - 18, 195, 90, 18, 193, 90, 18, 200, 90, 1, 62, 90, 1, 75, 90, 1, 74, 90, - 1, 76, 90, 1, 71, 90, 1, 222, 206, 90, 1, 210, 3, 90, 1, 243, 104, 90, 1, - 199, 90, 1, 252, 114, 90, 1, 250, 183, 90, 1, 179, 90, 1, 220, 19, 90, 1, - 240, 244, 90, 1, 185, 90, 1, 230, 141, 90, 1, 217, 199, 90, 1, 216, 2, - 90, 1, 212, 219, 90, 1, 246, 145, 90, 1, 248, 110, 90, 1, 232, 200, 90, - 1, 190, 90, 1, 219, 113, 90, 1, 207, 96, 90, 1, 242, 73, 90, 1, 172, 90, - 1, 231, 167, 90, 1, 210, 243, 90, 1, 205, 116, 90, 1, 239, 141, 90, 1, - 205, 12, 90, 1, 229, 248, 90, 1, 205, 67, 90, 1, 248, 58, 90, 1, 211, - 127, 152, 22, 53, 90, 1, 211, 127, 75, 90, 1, 211, 127, 74, 90, 1, 211, - 127, 76, 90, 1, 211, 127, 71, 90, 1, 211, 127, 222, 206, 90, 1, 211, 127, - 210, 3, 90, 1, 211, 127, 252, 114, 90, 1, 211, 127, 250, 183, 90, 1, 211, - 127, 179, 90, 1, 211, 127, 220, 19, 90, 1, 211, 127, 240, 244, 90, 1, - 211, 127, 185, 90, 1, 211, 127, 212, 219, 90, 1, 211, 127, 246, 145, 90, - 1, 211, 127, 248, 110, 90, 1, 211, 127, 232, 200, 90, 1, 211, 127, 210, - 243, 90, 1, 211, 127, 190, 90, 1, 211, 127, 207, 96, 90, 1, 211, 127, - 172, 90, 1, 211, 127, 240, 241, 90, 1, 211, 127, 239, 141, 90, 1, 211, - 127, 232, 161, 90, 1, 211, 127, 224, 228, 90, 1, 211, 127, 243, 196, 90, - 1, 215, 78, 75, 90, 1, 215, 78, 74, 90, 1, 215, 78, 232, 211, 90, 1, 215, - 78, 210, 3, 90, 1, 215, 78, 71, 90, 1, 215, 78, 252, 114, 90, 1, 215, 78, - 172, 90, 1, 215, 78, 240, 244, 90, 1, 215, 78, 155, 90, 1, 215, 78, 179, - 90, 1, 215, 78, 216, 2, 90, 1, 215, 78, 212, 219, 90, 1, 215, 78, 246, - 145, 90, 1, 215, 78, 232, 200, 90, 1, 215, 78, 242, 73, 90, 1, 215, 78, - 240, 241, 90, 1, 215, 78, 239, 141, 90, 1, 215, 78, 210, 243, 90, 1, 215, - 78, 205, 116, 90, 1, 215, 78, 219, 109, 90, 1, 215, 78, 248, 110, 90, 1, - 215, 78, 205, 81, 90, 1, 227, 218, 74, 90, 1, 227, 218, 172, 90, 1, 227, - 218, 219, 113, 90, 1, 227, 218, 242, 73, 90, 1, 227, 218, 205, 81, 90, 1, - 252, 164, 240, 224, 252, 74, 102, 90, 1, 252, 164, 240, 224, 208, 184, - 102, 90, 1, 252, 164, 240, 224, 246, 108, 90, 1, 252, 164, 240, 224, 210, - 13, 90, 1, 252, 164, 240, 224, 233, 2, 210, 13, 90, 1, 252, 164, 240, - 224, 250, 143, 90, 1, 252, 164, 240, 224, 129, 250, 143, 90, 1, 252, 164, - 240, 224, 62, 90, 1, 252, 164, 240, 224, 74, 90, 1, 252, 164, 240, 224, - 172, 90, 1, 252, 164, 240, 224, 225, 77, 90, 1, 252, 164, 240, 224, 249, - 1, 90, 1, 252, 164, 240, 224, 210, 208, 90, 1, 252, 164, 240, 224, 210, - 196, 90, 1, 252, 164, 240, 224, 246, 54, 90, 1, 252, 164, 240, 224, 224, - 103, 90, 1, 252, 164, 240, 224, 212, 219, 90, 1, 252, 164, 240, 224, 246, - 145, 90, 1, 252, 164, 240, 224, 179, 90, 1, 252, 164, 240, 224, 221, 93, - 90, 1, 252, 164, 240, 224, 214, 96, 90, 1, 252, 164, 240, 224, 205, 81, - 90, 1, 252, 164, 240, 224, 205, 116, 90, 1, 252, 164, 240, 224, 252, 213, - 90, 1, 211, 127, 252, 164, 240, 224, 212, 219, 90, 1, 211, 127, 252, 164, - 240, 224, 205, 81, 90, 1, 227, 218, 252, 164, 240, 224, 240, 99, 90, 1, - 227, 218, 252, 164, 240, 224, 225, 77, 90, 1, 227, 218, 252, 164, 240, - 224, 249, 1, 90, 1, 227, 218, 252, 164, 240, 224, 232, 170, 90, 1, 227, - 218, 252, 164, 240, 224, 210, 208, 90, 1, 227, 218, 252, 164, 240, 224, - 246, 38, 90, 1, 227, 218, 252, 164, 240, 224, 212, 219, 90, 1, 227, 218, - 252, 164, 240, 224, 245, 192, 90, 1, 227, 218, 252, 164, 240, 224, 214, - 96, 90, 1, 227, 218, 252, 164, 240, 224, 246, 254, 90, 1, 227, 218, 252, - 164, 240, 224, 205, 81, 90, 1, 227, 218, 252, 164, 240, 224, 205, 116, - 90, 1, 252, 164, 240, 224, 160, 71, 90, 1, 252, 164, 240, 224, 160, 190, - 90, 1, 227, 218, 252, 164, 240, 224, 250, 0, 90, 1, 252, 164, 240, 224, - 246, 134, 90, 1, 227, 218, 252, 164, 240, 224, 229, 248, 19, 20, 222, 71, - 19, 20, 251, 159, 19, 20, 253, 119, 19, 20, 207, 54, 19, 20, 220, 158, - 19, 20, 221, 183, 19, 20, 220, 36, 19, 20, 212, 140, 19, 20, 231, 231, - 19, 20, 230, 192, 19, 20, 227, 162, 19, 20, 224, 26, 19, 20, 225, 185, - 19, 20, 230, 68, 19, 20, 214, 157, 19, 20, 217, 116, 19, 20, 215, 124, - 19, 20, 215, 218, 19, 20, 215, 90, 19, 20, 205, 222, 19, 20, 206, 58, 19, - 20, 219, 58, 19, 20, 223, 150, 19, 20, 222, 187, 223, 150, 19, 20, 223, - 149, 19, 20, 222, 187, 223, 149, 19, 20, 223, 148, 19, 20, 222, 187, 223, - 148, 19, 20, 223, 147, 19, 20, 222, 187, 223, 147, 19, 20, 218, 14, 19, - 20, 218, 13, 19, 20, 218, 12, 19, 20, 218, 11, 19, 20, 218, 10, 19, 20, - 218, 18, 19, 20, 222, 187, 222, 67, 19, 20, 222, 187, 213, 10, 19, 20, - 222, 187, 232, 76, 19, 20, 222, 187, 249, 34, 19, 20, 222, 187, 229, 28, - 19, 20, 222, 187, 226, 33, 19, 20, 222, 187, 182, 19, 20, 222, 187, 216, - 4, 19, 20, 243, 115, 207, 129, 19, 20, 207, 34, 207, 129, 19, 20, 42, 5, - 218, 148, 19, 20, 42, 219, 81, 245, 23, 19, 20, 219, 149, 218, 15, 19, - 20, 180, 229, 115, 19, 20, 180, 230, 140, 19, 20, 211, 220, 19, 20, 211, - 222, 19, 20, 210, 188, 19, 20, 210, 190, 19, 20, 210, 195, 19, 20, 211, - 137, 19, 20, 211, 139, 19, 20, 217, 114, 215, 95, 19, 20, 217, 114, 215, - 152, 19, 20, 217, 114, 238, 131, 19, 20, 85, 239, 169, 19, 20, 85, 245, - 225, 240, 162, 19, 20, 85, 240, 241, 19, 20, 85, 239, 174, 19, 20, 217, - 114, 232, 86, 19, 20, 85, 232, 84, 19, 20, 250, 53, 245, 225, 149, 19, - 20, 250, 53, 245, 225, 137, 19, 20, 85, 245, 220, 182, 229, 215, 208, - 154, 230, 5, 229, 215, 1, 172, 229, 215, 1, 231, 167, 229, 215, 1, 240, - 244, 229, 215, 1, 240, 99, 229, 215, 1, 225, 77, 229, 215, 1, 249, 1, - 229, 215, 1, 248, 110, 229, 215, 1, 232, 200, 229, 215, 1, 232, 170, 229, - 215, 1, 206, 77, 229, 215, 1, 212, 219, 229, 215, 1, 212, 56, 229, 215, - 1, 246, 145, 229, 215, 1, 245, 192, 229, 215, 1, 199, 229, 215, 1, 179, - 229, 215, 1, 221, 93, 229, 215, 1, 250, 183, 229, 215, 1, 250, 0, 229, - 215, 1, 185, 229, 215, 1, 190, 229, 215, 1, 219, 113, 229, 215, 1, 230, - 141, 229, 215, 1, 207, 96, 229, 215, 1, 216, 2, 229, 215, 1, 214, 96, - 229, 215, 1, 217, 199, 229, 215, 1, 155, 229, 215, 1, 239, 165, 229, 215, - 1, 211, 83, 229, 215, 22, 3, 62, 229, 215, 22, 3, 74, 229, 215, 22, 3, - 71, 229, 215, 22, 3, 243, 104, 229, 215, 22, 3, 252, 205, 229, 215, 22, - 3, 222, 152, 229, 215, 22, 3, 251, 184, 229, 215, 22, 3, 75, 229, 215, - 22, 3, 76, 229, 215, 213, 191, 1, 190, 229, 215, 213, 191, 1, 219, 113, - 229, 215, 213, 191, 1, 207, 96, 229, 215, 5, 1, 172, 229, 215, 5, 1, 225, - 77, 229, 215, 5, 1, 252, 73, 229, 215, 5, 1, 212, 219, 229, 215, 5, 1, - 199, 229, 215, 5, 1, 179, 229, 215, 5, 1, 185, 229, 215, 5, 1, 219, 113, - 229, 215, 5, 1, 230, 141, 229, 215, 3, 226, 99, 229, 215, 3, 231, 209, - 229, 215, 3, 217, 197, 229, 215, 3, 229, 115, 229, 215, 242, 168, 83, - 229, 215, 219, 196, 83, 229, 215, 18, 205, 85, 229, 215, 18, 102, 229, - 215, 18, 105, 229, 215, 18, 142, 229, 215, 18, 139, 229, 215, 18, 168, - 229, 215, 18, 184, 229, 215, 18, 195, 229, 215, 18, 193, 229, 215, 18, - 200, 41, 230, 59, 1, 172, 41, 230, 59, 1, 206, 181, 41, 230, 59, 1, 225, - 77, 41, 230, 59, 1, 210, 243, 41, 230, 59, 1, 217, 199, 41, 230, 59, 1, - 190, 41, 230, 59, 1, 212, 219, 41, 230, 59, 1, 212, 56, 41, 230, 59, 1, - 230, 141, 41, 230, 59, 1, 179, 41, 230, 59, 1, 221, 93, 41, 230, 59, 1, - 185, 41, 230, 59, 1, 242, 73, 41, 230, 59, 1, 209, 70, 41, 230, 59, 1, - 155, 41, 230, 59, 1, 220, 19, 41, 230, 59, 1, 231, 167, 41, 230, 59, 1, - 210, 233, 41, 230, 59, 1, 199, 41, 230, 59, 1, 62, 41, 230, 59, 1, 74, - 41, 230, 59, 1, 243, 104, 41, 230, 59, 1, 243, 92, 41, 230, 59, 1, 71, - 41, 230, 59, 1, 222, 152, 41, 230, 59, 1, 76, 41, 230, 59, 1, 210, 3, 41, - 230, 59, 1, 75, 41, 230, 59, 1, 251, 182, 41, 230, 59, 1, 252, 205, 41, - 230, 59, 1, 211, 116, 41, 230, 59, 1, 211, 115, 41, 230, 59, 1, 211, 114, - 41, 230, 59, 1, 211, 113, 41, 230, 59, 1, 211, 112, 186, 41, 229, 75, 1, - 127, 220, 19, 186, 41, 229, 75, 1, 114, 220, 19, 186, 41, 229, 75, 1, - 127, 172, 186, 41, 229, 75, 1, 127, 206, 181, 186, 41, 229, 75, 1, 127, - 225, 77, 186, 41, 229, 75, 1, 114, 172, 186, 41, 229, 75, 1, 114, 206, - 181, 186, 41, 229, 75, 1, 114, 225, 77, 186, 41, 229, 75, 1, 127, 210, - 243, 186, 41, 229, 75, 1, 127, 217, 199, 186, 41, 229, 75, 1, 127, 190, - 186, 41, 229, 75, 1, 114, 210, 243, 186, 41, 229, 75, 1, 114, 217, 199, - 186, 41, 229, 75, 1, 114, 190, 186, 41, 229, 75, 1, 127, 212, 219, 186, - 41, 229, 75, 1, 127, 212, 56, 186, 41, 229, 75, 1, 127, 199, 186, 41, - 229, 75, 1, 114, 212, 219, 186, 41, 229, 75, 1, 114, 212, 56, 186, 41, - 229, 75, 1, 114, 199, 186, 41, 229, 75, 1, 127, 179, 186, 41, 229, 75, 1, - 127, 221, 93, 186, 41, 229, 75, 1, 127, 185, 186, 41, 229, 75, 1, 114, - 179, 186, 41, 229, 75, 1, 114, 221, 93, 186, 41, 229, 75, 1, 114, 185, - 186, 41, 229, 75, 1, 127, 242, 73, 186, 41, 229, 75, 1, 127, 209, 70, - 186, 41, 229, 75, 1, 127, 230, 141, 186, 41, 229, 75, 1, 114, 242, 73, - 186, 41, 229, 75, 1, 114, 209, 70, 186, 41, 229, 75, 1, 114, 230, 141, - 186, 41, 229, 75, 1, 127, 155, 186, 41, 229, 75, 1, 127, 246, 145, 186, - 41, 229, 75, 1, 127, 250, 183, 186, 41, 229, 75, 1, 114, 155, 186, 41, - 229, 75, 1, 114, 246, 145, 186, 41, 229, 75, 1, 114, 250, 183, 186, 41, - 229, 75, 1, 127, 230, 197, 186, 41, 229, 75, 1, 127, 206, 148, 186, 41, - 229, 75, 1, 114, 230, 197, 186, 41, 229, 75, 1, 114, 206, 148, 186, 41, - 229, 75, 1, 127, 213, 202, 186, 41, 229, 75, 1, 114, 213, 202, 186, 41, - 229, 75, 22, 3, 22, 215, 132, 186, 41, 229, 75, 22, 3, 253, 164, 186, 41, - 229, 75, 22, 3, 233, 102, 186, 41, 229, 75, 22, 3, 71, 186, 41, 229, 75, - 22, 3, 209, 162, 186, 41, 229, 75, 22, 3, 75, 186, 41, 229, 75, 22, 3, - 252, 248, 186, 41, 229, 75, 22, 3, 76, 186, 41, 229, 75, 22, 3, 222, 230, - 186, 41, 229, 75, 22, 3, 210, 3, 186, 41, 229, 75, 22, 3, 251, 159, 186, - 41, 229, 75, 22, 3, 253, 119, 186, 41, 229, 75, 22, 3, 209, 154, 186, 41, - 229, 75, 22, 3, 222, 71, 186, 41, 229, 75, 22, 3, 222, 227, 186, 41, 229, - 75, 22, 3, 209, 255, 186, 41, 229, 75, 22, 3, 232, 211, 186, 41, 229, 75, - 1, 42, 209, 148, 186, 41, 229, 75, 1, 42, 225, 79, 186, 41, 229, 75, 1, - 42, 226, 33, 186, 41, 229, 75, 1, 42, 229, 28, 186, 41, 229, 75, 1, 42, - 232, 76, 186, 41, 229, 75, 1, 42, 246, 240, 186, 41, 229, 75, 1, 42, 251, - 150, 186, 41, 229, 75, 135, 227, 191, 186, 41, 229, 75, 135, 227, 190, - 186, 41, 229, 75, 18, 205, 85, 186, 41, 229, 75, 18, 102, 186, 41, 229, - 75, 18, 105, 186, 41, 229, 75, 18, 142, 186, 41, 229, 75, 18, 139, 186, - 41, 229, 75, 18, 168, 186, 41, 229, 75, 18, 184, 186, 41, 229, 75, 18, - 195, 186, 41, 229, 75, 18, 193, 186, 41, 229, 75, 18, 200, 186, 41, 229, - 75, 99, 18, 102, 186, 41, 229, 75, 3, 230, 125, 186, 41, 229, 75, 3, 230, - 124, 82, 16, 221, 191, 82, 16, 226, 81, 231, 49, 82, 16, 221, 16, 231, - 49, 82, 16, 250, 34, 231, 49, 82, 16, 249, 74, 231, 49, 82, 16, 220, 153, - 231, 49, 82, 16, 220, 147, 231, 49, 82, 16, 220, 145, 231, 49, 82, 16, - 220, 151, 231, 49, 82, 16, 220, 149, 231, 49, 82, 16, 246, 95, 231, 49, - 82, 16, 246, 91, 231, 49, 82, 16, 246, 90, 231, 49, 82, 16, 246, 93, 231, - 49, 82, 16, 246, 92, 231, 49, 82, 16, 246, 89, 231, 49, 82, 16, 210, 137, - 82, 16, 226, 81, 218, 118, 82, 16, 221, 16, 218, 118, 82, 16, 250, 34, - 218, 118, 82, 16, 249, 74, 218, 118, 82, 16, 220, 153, 218, 118, 82, 16, - 220, 147, 218, 118, 82, 16, 220, 145, 218, 118, 82, 16, 220, 151, 218, - 118, 82, 16, 220, 149, 218, 118, 82, 16, 246, 95, 218, 118, 82, 16, 246, - 91, 218, 118, 82, 16, 246, 90, 218, 118, 82, 16, 246, 93, 218, 118, 82, - 16, 246, 92, 218, 118, 82, 16, 246, 89, 218, 118, 249, 94, 1, 172, 249, - 94, 1, 240, 244, 249, 94, 1, 225, 77, 249, 94, 1, 225, 20, 249, 94, 1, - 179, 249, 94, 1, 250, 183, 249, 94, 1, 185, 249, 94, 1, 226, 118, 249, - 94, 1, 212, 219, 249, 94, 1, 246, 145, 249, 94, 1, 199, 249, 94, 1, 224, - 24, 249, 94, 1, 249, 1, 249, 94, 1, 232, 200, 249, 94, 1, 223, 144, 249, - 94, 1, 223, 136, 249, 94, 1, 190, 249, 94, 1, 219, 113, 249, 94, 1, 230, - 141, 249, 94, 1, 209, 70, 249, 94, 1, 217, 199, 249, 94, 1, 62, 249, 94, - 1, 155, 249, 94, 22, 3, 74, 249, 94, 22, 3, 71, 249, 94, 22, 3, 75, 249, - 94, 22, 3, 76, 249, 94, 22, 3, 252, 248, 249, 94, 222, 20, 249, 94, 243, - 34, 73, 217, 76, 41, 99, 1, 127, 172, 41, 99, 1, 127, 231, 167, 41, 99, - 1, 127, 230, 181, 41, 99, 1, 114, 172, 41, 99, 1, 114, 230, 181, 41, 99, - 1, 114, 231, 167, 41, 99, 1, 225, 77, 41, 99, 1, 127, 249, 1, 41, 99, 1, - 127, 248, 110, 41, 99, 1, 114, 249, 1, 41, 99, 1, 114, 217, 199, 41, 99, - 1, 114, 248, 110, 41, 99, 1, 223, 144, 41, 99, 1, 219, 64, 41, 99, 1, - 127, 219, 62, 41, 99, 1, 246, 145, 41, 99, 1, 114, 219, 62, 41, 99, 1, - 219, 73, 41, 99, 1, 127, 212, 219, 41, 99, 1, 127, 212, 56, 41, 99, 1, - 114, 212, 219, 41, 99, 1, 114, 212, 56, 41, 99, 1, 199, 41, 99, 1, 250, - 183, 41, 99, 1, 127, 179, 41, 99, 1, 127, 221, 93, 41, 99, 1, 127, 242, - 73, 41, 99, 1, 114, 179, 41, 99, 1, 114, 242, 73, 41, 99, 1, 114, 221, - 93, 41, 99, 1, 185, 41, 99, 1, 114, 190, 41, 99, 1, 127, 190, 41, 99, 1, - 219, 113, 41, 99, 1, 218, 46, 41, 99, 1, 230, 141, 41, 99, 1, 229, 74, - 41, 99, 1, 207, 96, 41, 99, 1, 127, 216, 2, 41, 99, 1, 127, 214, 96, 41, - 99, 1, 127, 217, 199, 41, 99, 1, 127, 155, 41, 99, 1, 229, 172, 41, 99, - 1, 62, 41, 99, 1, 114, 155, 41, 99, 1, 74, 41, 99, 1, 233, 102, 41, 99, - 1, 71, 41, 99, 1, 209, 162, 41, 99, 1, 243, 104, 41, 99, 1, 222, 152, 41, - 99, 1, 230, 125, 41, 99, 1, 239, 232, 217, 199, 41, 99, 107, 3, 169, 219, - 113, 41, 99, 107, 3, 169, 230, 141, 41, 99, 107, 3, 230, 142, 212, 172, - 230, 114, 41, 99, 3, 227, 240, 232, 24, 230, 114, 41, 99, 107, 3, 42, - 225, 77, 41, 99, 107, 3, 114, 179, 41, 99, 107, 3, 127, 219, 63, 222, - 123, 114, 179, 41, 99, 107, 3, 185, 41, 99, 107, 3, 250, 183, 41, 99, - 107, 3, 217, 199, 41, 99, 3, 217, 174, 41, 99, 22, 3, 62, 41, 99, 22, 3, - 227, 240, 217, 133, 41, 99, 22, 3, 253, 164, 41, 99, 22, 3, 212, 178, - 253, 164, 41, 99, 22, 3, 74, 41, 99, 22, 3, 233, 102, 41, 99, 22, 3, 210, - 3, 41, 99, 22, 3, 209, 161, 41, 99, 22, 3, 71, 41, 99, 22, 3, 209, 162, - 41, 99, 22, 3, 76, 41, 99, 22, 3, 222, 231, 55, 41, 99, 22, 3, 222, 71, - 41, 99, 22, 3, 75, 41, 99, 22, 3, 252, 248, 41, 99, 22, 3, 222, 152, 41, - 99, 22, 3, 252, 205, 41, 99, 22, 3, 99, 252, 205, 41, 99, 22, 3, 222, - 231, 52, 41, 99, 3, 227, 240, 232, 23, 41, 99, 3, 211, 117, 41, 99, 3, - 211, 116, 41, 99, 3, 231, 128, 211, 115, 41, 99, 3, 231, 128, 211, 114, - 41, 99, 3, 231, 128, 211, 113, 41, 99, 3, 219, 114, 239, 140, 41, 99, 3, - 227, 240, 217, 161, 41, 99, 3, 231, 127, 232, 6, 41, 99, 36, 247, 43, - 245, 23, 41, 99, 238, 123, 18, 205, 85, 41, 99, 238, 123, 18, 102, 41, - 99, 238, 123, 18, 105, 41, 99, 238, 123, 18, 142, 41, 99, 238, 123, 18, - 139, 41, 99, 238, 123, 18, 168, 41, 99, 238, 123, 18, 184, 41, 99, 238, - 123, 18, 195, 41, 99, 238, 123, 18, 193, 41, 99, 238, 123, 18, 200, 41, - 99, 99, 18, 205, 85, 41, 99, 99, 18, 102, 41, 99, 99, 18, 105, 41, 99, - 99, 18, 142, 41, 99, 99, 18, 139, 41, 99, 99, 18, 168, 41, 99, 99, 18, - 184, 41, 99, 99, 18, 195, 41, 99, 99, 18, 193, 41, 99, 99, 18, 200, 41, - 99, 3, 207, 19, 41, 99, 3, 207, 18, 41, 99, 3, 217, 120, 41, 99, 3, 231, - 198, 41, 99, 3, 238, 52, 41, 99, 3, 245, 37, 41, 99, 3, 218, 224, 218, - 97, 219, 73, 41, 99, 3, 227, 240, 206, 78, 41, 99, 3, 232, 58, 41, 99, 3, - 232, 57, 41, 99, 3, 217, 128, 41, 99, 3, 217, 127, 41, 99, 3, 239, 101, - 41, 99, 3, 248, 254, 36, 244, 13, 247, 228, 253, 21, 36, 245, 165, 36, - 233, 45, 36, 173, 45, 36, 211, 36, 245, 23, 36, 206, 194, 55, 36, 207, - 14, 229, 206, 55, 36, 222, 142, 141, 55, 36, 50, 222, 142, 141, 55, 36, - 147, 248, 130, 213, 225, 55, 36, 213, 211, 248, 130, 213, 225, 55, 36, - 221, 218, 52, 36, 50, 221, 218, 52, 36, 221, 218, 55, 36, 221, 218, 222, - 82, 117, 3, 209, 244, 218, 202, 117, 3, 209, 244, 248, 219, 117, 3, 248, - 144, 117, 3, 213, 131, 117, 3, 249, 214, 117, 1, 252, 187, 117, 1, 252, - 188, 212, 122, 117, 1, 233, 98, 117, 1, 233, 99, 212, 122, 117, 1, 209, - 247, 117, 1, 209, 248, 212, 122, 117, 1, 219, 114, 218, 254, 117, 1, 219, - 114, 218, 255, 212, 122, 117, 1, 230, 142, 230, 21, 117, 1, 230, 142, - 230, 22, 212, 122, 117, 1, 243, 73, 117, 1, 252, 203, 117, 1, 222, 183, - 117, 1, 222, 184, 212, 122, 117, 1, 172, 117, 1, 232, 66, 227, 243, 117, - 1, 240, 244, 117, 1, 240, 245, 240, 5, 117, 1, 225, 77, 117, 1, 249, 1, - 117, 1, 249, 2, 230, 128, 117, 1, 232, 200, 117, 1, 232, 201, 232, 174, - 117, 1, 223, 144, 117, 1, 212, 220, 230, 77, 117, 1, 212, 220, 226, 76, - 227, 243, 117, 1, 246, 146, 226, 76, 252, 146, 117, 1, 246, 146, 226, 76, - 227, 243, 117, 1, 225, 237, 219, 76, 117, 1, 212, 219, 117, 1, 212, 220, - 212, 144, 117, 1, 246, 145, 117, 1, 246, 146, 228, 6, 117, 1, 199, 117, - 1, 179, 117, 1, 222, 52, 232, 18, 117, 1, 250, 183, 117, 1, 250, 184, - 231, 210, 117, 1, 185, 117, 1, 190, 117, 1, 219, 113, 117, 1, 230, 141, - 117, 1, 207, 96, 117, 1, 217, 200, 217, 184, 117, 1, 217, 200, 217, 140, - 117, 1, 217, 199, 117, 1, 155, 117, 3, 218, 245, 117, 22, 3, 212, 122, - 117, 22, 3, 209, 243, 117, 22, 3, 209, 244, 217, 136, 117, 22, 3, 213, - 164, 117, 22, 3, 213, 165, 233, 90, 117, 22, 3, 219, 114, 218, 254, 117, - 22, 3, 219, 114, 218, 255, 212, 122, 117, 22, 3, 230, 142, 230, 21, 117, - 22, 3, 230, 142, 230, 22, 212, 122, 117, 22, 3, 212, 179, 117, 22, 3, - 212, 180, 218, 254, 117, 22, 3, 212, 180, 212, 122, 117, 22, 3, 212, 180, - 218, 255, 212, 122, 117, 22, 3, 221, 134, 117, 22, 3, 221, 135, 212, 122, - 117, 253, 0, 252, 255, 117, 1, 232, 46, 217, 135, 117, 1, 231, 134, 217, - 135, 117, 1, 210, 80, 217, 135, 117, 1, 243, 98, 217, 135, 117, 1, 209, - 40, 217, 135, 117, 1, 205, 107, 217, 135, 117, 1, 251, 202, 217, 135, - 117, 18, 205, 85, 117, 18, 102, 117, 18, 105, 117, 18, 142, 117, 18, 139, - 117, 18, 168, 117, 18, 184, 117, 18, 195, 117, 18, 193, 117, 18, 200, - 117, 221, 244, 117, 222, 14, 117, 207, 7, 117, 248, 197, 222, 7, 117, - 248, 197, 215, 58, 117, 248, 197, 221, 215, 117, 222, 13, 117, 30, 16, - 245, 29, 117, 30, 16, 245, 224, 117, 30, 16, 243, 223, 117, 30, 16, 246, - 98, 117, 30, 16, 246, 99, 213, 131, 117, 30, 16, 245, 112, 117, 30, 16, - 246, 138, 117, 30, 16, 245, 201, 117, 30, 16, 246, 120, 117, 30, 16, 246, - 99, 240, 164, 117, 30, 16, 36, 212, 117, 117, 30, 16, 36, 243, 32, 117, - 30, 16, 36, 231, 205, 117, 30, 16, 36, 231, 207, 117, 30, 16, 36, 232, - 178, 117, 30, 16, 36, 231, 206, 2, 232, 178, 117, 30, 16, 36, 231, 208, - 2, 232, 178, 117, 30, 16, 36, 250, 20, 117, 30, 16, 36, 240, 9, 117, 30, - 16, 218, 165, 222, 142, 243, 233, 117, 30, 16, 218, 165, 222, 142, 246, - 136, 117, 30, 16, 218, 165, 247, 192, 210, 162, 117, 30, 16, 218, 165, - 247, 192, 212, 187, 117, 30, 16, 230, 44, 222, 142, 222, 2, 117, 30, 16, - 230, 44, 222, 142, 220, 70, 117, 30, 16, 230, 44, 247, 192, 220, 236, - 117, 30, 16, 230, 44, 247, 192, 220, 222, 117, 30, 16, 230, 44, 222, 142, - 221, 5, 213, 153, 3, 221, 241, 213, 153, 3, 221, 254, 213, 153, 3, 221, - 250, 213, 153, 1, 62, 213, 153, 1, 74, 213, 153, 1, 71, 213, 153, 1, 252, - 248, 213, 153, 1, 76, 213, 153, 1, 75, 213, 153, 1, 242, 192, 213, 153, - 1, 172, 213, 153, 1, 220, 19, 213, 153, 1, 240, 244, 213, 153, 1, 225, - 77, 213, 153, 1, 249, 1, 213, 153, 1, 232, 200, 213, 153, 1, 205, 116, - 213, 153, 1, 223, 144, 213, 153, 1, 212, 219, 213, 153, 1, 246, 145, 213, - 153, 1, 199, 213, 153, 1, 179, 213, 153, 1, 242, 73, 213, 153, 1, 209, - 70, 213, 153, 1, 250, 183, 213, 153, 1, 185, 213, 153, 1, 190, 213, 153, - 1, 219, 113, 213, 153, 1, 230, 141, 213, 153, 1, 207, 96, 213, 153, 1, - 217, 199, 213, 153, 1, 206, 181, 213, 153, 1, 155, 213, 153, 107, 3, 222, - 11, 213, 153, 107, 3, 221, 243, 213, 153, 107, 3, 221, 240, 213, 153, 22, - 3, 222, 1, 213, 153, 22, 3, 221, 239, 213, 153, 22, 3, 222, 5, 213, 153, - 22, 3, 221, 249, 213, 153, 22, 3, 222, 12, 213, 153, 22, 3, 222, 3, 213, - 153, 3, 222, 15, 213, 153, 3, 208, 188, 213, 153, 107, 3, 221, 204, 185, - 213, 153, 107, 3, 221, 204, 207, 96, 213, 153, 1, 231, 167, 213, 153, 1, - 213, 90, 213, 153, 18, 205, 85, 213, 153, 18, 102, 213, 153, 18, 105, - 213, 153, 18, 142, 213, 153, 18, 139, 213, 153, 18, 168, 213, 153, 18, - 184, 213, 153, 18, 195, 213, 153, 18, 193, 213, 153, 18, 200, 213, 153, - 251, 167, 213, 153, 1, 218, 227, 213, 153, 1, 230, 2, 213, 153, 1, 250, - 0, 213, 153, 1, 42, 232, 76, 213, 153, 1, 42, 229, 28, 250, 107, 1, 62, - 250, 107, 1, 215, 50, 62, 250, 107, 1, 155, 250, 107, 1, 215, 50, 155, - 250, 107, 1, 227, 216, 155, 250, 107, 1, 250, 183, 250, 107, 1, 232, 3, - 250, 183, 250, 107, 1, 179, 250, 107, 1, 215, 50, 179, 250, 107, 1, 199, - 250, 107, 1, 227, 216, 199, 250, 107, 1, 207, 96, 250, 107, 1, 215, 50, - 207, 96, 250, 107, 1, 222, 27, 207, 96, 250, 107, 1, 240, 244, 250, 107, - 1, 215, 50, 240, 244, 250, 107, 1, 232, 200, 250, 107, 1, 246, 145, 250, - 107, 1, 219, 113, 250, 107, 1, 215, 50, 219, 113, 250, 107, 1, 185, 250, - 107, 1, 215, 50, 185, 250, 107, 1, 214, 161, 212, 219, 250, 107, 1, 224, - 46, 212, 219, 250, 107, 1, 217, 199, 250, 107, 1, 215, 50, 217, 199, 250, - 107, 1, 227, 216, 217, 199, 250, 107, 1, 190, 250, 107, 1, 215, 50, 190, - 250, 107, 1, 225, 77, 250, 107, 1, 230, 141, 250, 107, 1, 215, 50, 230, - 141, 250, 107, 1, 223, 144, 250, 107, 1, 249, 1, 250, 107, 1, 225, 151, - 250, 107, 1, 227, 153, 250, 107, 1, 74, 250, 107, 1, 71, 250, 107, 3, - 211, 121, 250, 107, 22, 3, 75, 250, 107, 22, 3, 222, 27, 75, 250, 107, - 22, 3, 243, 104, 250, 107, 22, 3, 74, 250, 107, 22, 3, 232, 3, 74, 250, - 107, 22, 3, 76, 250, 107, 22, 3, 232, 3, 76, 250, 107, 22, 3, 71, 250, - 107, 22, 3, 106, 33, 215, 50, 217, 199, 250, 107, 107, 3, 225, 79, 250, - 107, 107, 3, 239, 155, 250, 107, 221, 252, 250, 107, 221, 248, 250, 107, - 16, 249, 222, 225, 237, 227, 61, 250, 107, 16, 249, 222, 221, 8, 250, - 107, 16, 249, 222, 232, 101, 250, 107, 16, 249, 222, 221, 252, 230, 12, - 1, 172, 230, 12, 1, 231, 65, 230, 12, 1, 231, 167, 230, 12, 1, 240, 244, - 230, 12, 1, 240, 31, 230, 12, 1, 225, 77, 230, 12, 1, 249, 1, 230, 12, 1, - 248, 110, 230, 12, 1, 232, 200, 230, 12, 1, 223, 144, 230, 12, 1, 212, - 219, 230, 12, 1, 212, 56, 230, 12, 1, 246, 145, 230, 12, 1, 199, 230, 12, - 1, 179, 230, 12, 1, 220, 240, 230, 12, 1, 221, 93, 230, 12, 1, 242, 73, - 230, 12, 1, 241, 198, 230, 12, 1, 250, 183, 230, 12, 1, 249, 203, 230, - 12, 1, 185, 230, 12, 1, 226, 188, 230, 12, 1, 210, 243, 230, 12, 1, 210, - 233, 230, 12, 1, 243, 196, 230, 12, 1, 190, 230, 12, 1, 219, 113, 230, - 12, 1, 230, 141, 230, 12, 1, 155, 230, 12, 1, 238, 237, 230, 12, 1, 209, - 70, 230, 12, 1, 217, 199, 230, 12, 1, 216, 2, 230, 12, 1, 207, 96, 230, - 12, 1, 62, 230, 12, 213, 191, 1, 190, 230, 12, 213, 191, 1, 219, 113, - 230, 12, 22, 3, 253, 164, 230, 12, 22, 3, 74, 230, 12, 22, 3, 76, 230, - 12, 22, 3, 222, 152, 230, 12, 22, 3, 71, 230, 12, 22, 3, 209, 162, 230, - 12, 22, 3, 75, 230, 12, 107, 3, 232, 76, 230, 12, 107, 3, 229, 28, 230, - 12, 107, 3, 149, 230, 12, 107, 3, 226, 33, 230, 12, 107, 3, 222, 67, 230, - 12, 107, 3, 137, 230, 12, 107, 3, 213, 10, 230, 12, 107, 3, 223, 118, - 230, 12, 107, 3, 232, 23, 230, 12, 3, 219, 74, 230, 12, 3, 223, 184, 230, - 12, 220, 72, 212, 217, 230, 12, 220, 72, 223, 129, 211, 214, 212, 217, - 230, 12, 220, 72, 248, 117, 230, 12, 220, 72, 210, 225, 248, 117, 230, - 12, 220, 72, 210, 224, 230, 12, 18, 205, 85, 230, 12, 18, 102, 230, 12, - 18, 105, 230, 12, 18, 142, 230, 12, 18, 139, 230, 12, 18, 168, 230, 12, - 18, 184, 230, 12, 18, 195, 230, 12, 18, 193, 230, 12, 18, 200, 230, 12, - 1, 210, 208, 230, 12, 1, 210, 196, 230, 12, 1, 246, 54, 222, 181, 248, - 51, 18, 205, 85, 222, 181, 248, 51, 18, 102, 222, 181, 248, 51, 18, 105, - 222, 181, 248, 51, 18, 142, 222, 181, 248, 51, 18, 139, 222, 181, 248, - 51, 18, 168, 222, 181, 248, 51, 18, 184, 222, 181, 248, 51, 18, 195, 222, - 181, 248, 51, 18, 193, 222, 181, 248, 51, 18, 200, 222, 181, 248, 51, 1, - 230, 141, 222, 181, 248, 51, 1, 251, 199, 222, 181, 248, 51, 1, 252, 220, - 222, 181, 248, 51, 1, 252, 114, 222, 181, 248, 51, 1, 252, 181, 222, 181, - 248, 51, 1, 230, 140, 222, 181, 248, 51, 1, 253, 126, 222, 181, 248, 51, - 1, 253, 127, 222, 181, 248, 51, 1, 253, 125, 222, 181, 248, 51, 1, 253, - 120, 222, 181, 248, 51, 1, 229, 235, 222, 181, 248, 51, 1, 232, 234, 222, - 181, 248, 51, 1, 233, 103, 222, 181, 248, 51, 1, 232, 255, 222, 181, 248, - 51, 1, 232, 243, 222, 181, 248, 51, 1, 229, 81, 222, 181, 248, 51, 1, - 210, 10, 222, 181, 248, 51, 1, 210, 8, 222, 181, 248, 51, 1, 209, 211, - 222, 181, 248, 51, 1, 209, 154, 222, 181, 248, 51, 1, 230, 58, 222, 181, - 248, 51, 1, 242, 253, 222, 181, 248, 51, 1, 243, 107, 222, 181, 248, 51, - 1, 243, 41, 222, 181, 248, 51, 1, 242, 229, 222, 181, 248, 51, 1, 229, - 144, 222, 181, 248, 51, 1, 222, 100, 222, 181, 248, 51, 1, 222, 226, 222, - 181, 248, 51, 1, 222, 88, 222, 181, 248, 51, 1, 222, 194, 222, 181, 248, - 51, 226, 115, 210, 173, 222, 181, 248, 51, 240, 239, 210, 174, 222, 181, - 248, 51, 226, 113, 210, 174, 222, 181, 248, 51, 219, 12, 222, 181, 248, - 51, 221, 91, 222, 181, 248, 51, 252, 212, 222, 181, 248, 51, 220, 72, - 226, 109, 222, 181, 248, 51, 220, 72, 50, 226, 109, 213, 153, 220, 72, - 249, 222, 213, 124, 213, 153, 220, 72, 249, 222, 221, 253, 213, 153, 220, - 72, 249, 222, 220, 60, 213, 153, 220, 72, 249, 222, 248, 242, 213, 153, - 220, 72, 249, 222, 230, 3, 217, 132, 213, 153, 220, 72, 249, 222, 232, - 66, 217, 132, 213, 153, 220, 72, 249, 222, 246, 146, 217, 132, 213, 153, - 220, 72, 249, 222, 250, 184, 217, 132, 209, 36, 135, 232, 1, 209, 36, - 135, 215, 229, 209, 36, 135, 220, 135, 209, 36, 3, 224, 206, 209, 36, 3, - 206, 86, 226, 245, 213, 115, 209, 36, 135, 206, 86, 252, 217, 233, 55, - 213, 115, 209, 36, 135, 206, 86, 233, 55, 213, 115, 209, 36, 135, 206, - 86, 231, 245, 233, 55, 213, 115, 209, 36, 135, 248, 220, 55, 209, 36, - 135, 206, 86, 231, 245, 233, 55, 213, 116, 217, 102, 209, 36, 135, 50, - 213, 115, 209, 36, 135, 211, 36, 213, 115, 209, 36, 135, 231, 245, 252, - 75, 209, 36, 135, 67, 55, 209, 36, 135, 118, 177, 55, 209, 36, 135, 129, - 177, 55, 209, 36, 135, 218, 155, 232, 0, 233, 55, 213, 115, 209, 36, 135, - 251, 197, 233, 55, 213, 115, 209, 36, 3, 208, 184, 213, 115, 209, 36, 3, - 208, 184, 210, 5, 209, 36, 3, 218, 224, 208, 184, 210, 5, 209, 36, 3, - 208, 184, 252, 75, 209, 36, 3, 218, 224, 208, 184, 252, 75, 209, 36, 3, - 208, 184, 210, 6, 2, 212, 191, 209, 36, 3, 208, 184, 252, 76, 2, 212, - 191, 209, 36, 3, 252, 74, 252, 90, 209, 36, 3, 252, 74, 250, 156, 209, - 36, 3, 252, 74, 209, 61, 209, 36, 3, 252, 74, 209, 62, 2, 212, 191, 209, - 36, 3, 211, 157, 209, 36, 3, 239, 23, 152, 252, 73, 209, 36, 3, 152, 252, - 73, 209, 36, 3, 218, 52, 152, 252, 73, 209, 36, 3, 252, 74, 210, 12, 226, - 100, 209, 36, 3, 252, 15, 209, 36, 3, 218, 97, 252, 15, 209, 36, 135, - 248, 220, 52, 209, 36, 3, 232, 156, 209, 36, 3, 209, 204, 209, 36, 135, - 218, 149, 52, 209, 36, 135, 50, 218, 149, 52, 7, 1, 5, 6, 62, 7, 1, 5, 6, - 252, 248, 7, 5, 1, 201, 252, 248, 7, 1, 5, 6, 250, 123, 251, 150, 7, 1, - 5, 6, 249, 34, 7, 1, 5, 6, 246, 240, 7, 1, 5, 6, 242, 196, 7, 1, 5, 6, - 75, 7, 5, 1, 201, 222, 142, 75, 7, 5, 1, 201, 74, 7, 1, 5, 6, 232, 203, - 7, 1, 5, 6, 232, 76, 7, 1, 5, 6, 230, 159, 2, 91, 7, 1, 5, 6, 229, 28, 7, - 1, 5, 6, 218, 224, 226, 33, 7, 1, 5, 6, 76, 7, 1, 5, 6, 222, 142, 76, 7, - 5, 1, 215, 73, 76, 7, 5, 1, 215, 73, 222, 142, 76, 7, 5, 1, 215, 73, 148, - 2, 91, 7, 5, 1, 201, 222, 206, 7, 1, 5, 6, 222, 97, 7, 5, 1, 211, 102, - 160, 76, 7, 5, 1, 249, 154, 160, 76, 7, 1, 5, 6, 222, 67, 7, 1, 5, 6, - 218, 224, 137, 7, 1, 5, 6, 201, 137, 7, 1, 5, 6, 213, 10, 7, 1, 5, 6, 71, - 7, 5, 1, 215, 73, 71, 7, 5, 1, 215, 73, 245, 164, 71, 7, 5, 1, 215, 73, - 201, 229, 28, 7, 1, 5, 6, 209, 148, 7, 1, 5, 6, 207, 129, 7, 1, 5, 6, - 205, 159, 7, 1, 5, 6, 242, 141, 7, 1, 208, 170, 230, 83, 214, 126, 7, 1, - 252, 200, 27, 1, 5, 6, 240, 215, 27, 1, 5, 6, 230, 102, 27, 1, 5, 6, 221, - 53, 27, 1, 5, 6, 218, 210, 27, 1, 5, 6, 220, 93, 34, 1, 5, 6, 243, 68, - 65, 1, 6, 62, 65, 1, 6, 252, 248, 65, 1, 6, 251, 150, 65, 1, 6, 250, 123, - 251, 150, 65, 1, 6, 246, 240, 65, 1, 6, 75, 65, 1, 6, 218, 224, 75, 65, - 1, 6, 241, 55, 65, 1, 6, 239, 155, 65, 1, 6, 74, 65, 1, 6, 232, 203, 65, - 1, 6, 232, 76, 65, 1, 6, 149, 65, 1, 6, 229, 28, 65, 1, 6, 226, 33, 65, - 1, 6, 218, 224, 226, 33, 65, 1, 6, 76, 65, 1, 6, 222, 97, 65, 1, 6, 222, - 67, 65, 1, 6, 137, 65, 1, 6, 213, 10, 65, 1, 6, 71, 65, 1, 6, 207, 129, - 65, 1, 5, 62, 65, 1, 5, 201, 62, 65, 1, 5, 252, 144, 65, 1, 5, 201, 252, - 248, 65, 1, 5, 251, 150, 65, 1, 5, 246, 240, 65, 1, 5, 75, 65, 1, 5, 217, - 100, 65, 1, 5, 222, 142, 75, 65, 1, 5, 201, 222, 142, 75, 65, 1, 5, 241, - 55, 65, 1, 5, 201, 74, 65, 1, 5, 232, 76, 65, 1, 5, 229, 28, 65, 1, 5, - 243, 28, 65, 1, 5, 76, 65, 1, 5, 222, 142, 76, 65, 1, 5, 211, 102, 160, - 76, 65, 1, 5, 249, 154, 160, 76, 65, 1, 5, 222, 67, 65, 1, 5, 213, 10, - 65, 1, 5, 71, 65, 1, 5, 215, 73, 71, 65, 1, 5, 201, 229, 28, 65, 1, 5, - 209, 148, 65, 1, 5, 252, 200, 65, 1, 5, 250, 8, 65, 1, 5, 27, 240, 215, - 65, 1, 5, 245, 227, 65, 1, 5, 27, 221, 78, 65, 1, 5, 248, 58, 7, 213, - 183, 5, 1, 74, 7, 213, 183, 5, 1, 137, 7, 213, 183, 5, 1, 71, 7, 213, - 183, 5, 1, 209, 148, 27, 213, 183, 5, 1, 250, 8, 27, 213, 183, 5, 1, 240, - 215, 27, 213, 183, 5, 1, 218, 210, 27, 213, 183, 5, 1, 221, 78, 27, 213, - 183, 5, 1, 248, 58, 7, 5, 1, 210, 3, 7, 5, 1, 63, 2, 226, 247, 211, 180, - 7, 5, 1, 246, 241, 2, 226, 247, 211, 180, 7, 5, 1, 242, 140, 2, 226, 247, - 211, 180, 7, 5, 1, 229, 29, 2, 226, 247, 211, 180, 7, 5, 1, 226, 34, 2, - 226, 247, 211, 180, 7, 5, 1, 222, 68, 2, 226, 247, 211, 180, 7, 5, 1, - 219, 150, 2, 226, 247, 211, 180, 7, 5, 1, 219, 150, 2, 241, 211, 23, 226, - 247, 211, 180, 7, 5, 1, 218, 1, 2, 226, 247, 211, 180, 7, 5, 1, 213, 11, - 2, 226, 247, 211, 180, 7, 5, 1, 205, 160, 2, 226, 247, 211, 180, 7, 5, 1, - 201, 241, 55, 65, 1, 34, 243, 41, 7, 5, 1, 233, 23, 241, 55, 7, 5, 1, - 212, 59, 2, 213, 229, 7, 5, 6, 1, 237, 225, 2, 91, 7, 5, 1, 232, 250, 2, - 91, 7, 5, 1, 222, 68, 2, 91, 7, 5, 6, 1, 106, 2, 91, 7, 5, 1, 209, 201, - 2, 91, 7, 5, 1, 63, 2, 222, 26, 109, 7, 5, 1, 246, 241, 2, 222, 26, 109, - 7, 5, 1, 242, 140, 2, 222, 26, 109, 7, 5, 1, 241, 56, 2, 222, 26, 109, 7, - 5, 1, 232, 77, 2, 222, 26, 109, 7, 5, 1, 230, 159, 2, 222, 26, 109, 7, 5, - 1, 229, 29, 2, 222, 26, 109, 7, 5, 1, 226, 34, 2, 222, 26, 109, 7, 5, 1, - 222, 68, 2, 222, 26, 109, 7, 5, 1, 219, 150, 2, 222, 26, 109, 7, 5, 1, - 218, 1, 2, 222, 26, 109, 7, 5, 1, 242, 216, 2, 222, 26, 109, 7, 5, 1, - 209, 149, 2, 222, 26, 109, 7, 5, 1, 206, 196, 2, 222, 26, 109, 7, 5, 1, - 205, 160, 2, 222, 26, 109, 7, 5, 1, 32, 2, 218, 230, 109, 7, 5, 1, 252, - 145, 2, 218, 230, 109, 7, 5, 1, 246, 241, 2, 238, 130, 23, 212, 191, 7, - 5, 1, 174, 2, 218, 230, 109, 7, 5, 1, 222, 142, 174, 2, 218, 230, 109, 7, - 5, 1, 218, 224, 222, 142, 174, 2, 218, 230, 109, 7, 5, 1, 217, 101, 2, - 218, 230, 109, 7, 5, 1, 237, 225, 2, 218, 230, 109, 7, 5, 1, 222, 142, - 148, 2, 218, 230, 109, 7, 5, 1, 242, 216, 2, 218, 230, 109, 7, 5, 1, 106, - 2, 218, 230, 109, 7, 5, 1, 242, 142, 2, 218, 230, 109, 65, 1, 5, 201, - 252, 144, 65, 1, 5, 249, 34, 65, 1, 5, 249, 35, 2, 247, 27, 65, 1, 5, - 242, 196, 65, 1, 5, 218, 224, 222, 142, 75, 65, 1, 5, 242, 139, 65, 1, 5, - 245, 22, 232, 204, 2, 91, 65, 1, 5, 121, 241, 55, 65, 1, 5, 201, 239, - 155, 65, 1, 5, 237, 225, 2, 91, 65, 1, 5, 232, 249, 65, 1, 5, 6, 74, 65, - 1, 5, 6, 237, 225, 2, 91, 65, 1, 5, 232, 204, 2, 247, 56, 65, 1, 5, 230, - 159, 2, 218, 230, 109, 65, 1, 5, 230, 159, 2, 222, 26, 109, 65, 1, 5, 6, - 149, 65, 1, 5, 229, 29, 2, 109, 65, 1, 5, 201, 229, 29, 2, 152, 230, 34, - 65, 1, 5, 226, 34, 2, 47, 109, 65, 1, 5, 226, 34, 2, 218, 230, 109, 65, - 1, 5, 6, 226, 33, 65, 1, 5, 250, 123, 76, 65, 1, 5, 221, 78, 65, 1, 5, - 218, 1, 2, 109, 65, 1, 5, 242, 215, 65, 1, 5, 213, 11, 2, 222, 26, 109, - 65, 1, 5, 106, 134, 65, 1, 5, 209, 200, 65, 1, 5, 6, 71, 65, 1, 5, 209, - 149, 2, 109, 65, 1, 5, 201, 209, 148, 65, 1, 5, 205, 159, 65, 1, 5, 205, - 160, 2, 218, 230, 109, 65, 1, 5, 205, 160, 2, 247, 27, 65, 1, 5, 242, - 141, 65, 1, 5, 212, 23, 36, 244, 21, 239, 237, 253, 21, 36, 244, 21, 253, - 9, 253, 21, 36, 214, 205, 55, 36, 213, 122, 83, 36, 228, 12, 36, 239, - 234, 36, 228, 10, 36, 253, 7, 36, 239, 235, 36, 253, 8, 36, 7, 5, 1, 219, - 150, 55, 36, 249, 121, 36, 228, 11, 36, 50, 247, 228, 52, 36, 222, 197, - 52, 36, 205, 31, 55, 36, 232, 235, 55, 36, 209, 195, 52, 36, 209, 178, - 52, 36, 7, 5, 1, 241, 185, 222, 142, 32, 52, 36, 7, 5, 1, 252, 248, 36, - 7, 5, 1, 252, 71, 36, 7, 5, 1, 251, 168, 36, 7, 5, 1, 249, 35, 248, 141, - 36, 7, 5, 1, 233, 23, 246, 240, 36, 7, 5, 1, 242, 196, 36, 7, 5, 1, 241, - 55, 36, 7, 1, 5, 6, 241, 55, 36, 7, 5, 1, 232, 76, 36, 7, 5, 1, 149, 36, - 7, 1, 5, 6, 149, 36, 7, 1, 5, 6, 229, 28, 36, 7, 5, 1, 226, 33, 36, 7, 1, - 5, 6, 226, 33, 36, 7, 1, 5, 6, 137, 36, 7, 5, 1, 219, 150, 218, 96, 36, - 7, 5, 1, 182, 36, 7, 5, 1, 152, 182, 36, 7, 5, 1, 205, 159, 36, 7, 5, 1, - 252, 144, 36, 7, 5, 1, 251, 150, 36, 7, 5, 1, 250, 8, 36, 7, 5, 1, 217, - 100, 36, 7, 5, 1, 242, 139, 36, 7, 5, 1, 230, 159, 2, 50, 226, 247, 211, - 180, 36, 7, 5, 1, 148, 2, 147, 248, 130, 91, 36, 7, 5, 1, 222, 67, 36, 7, - 5, 1, 242, 215, 36, 7, 5, 1, 106, 2, 147, 248, 130, 91, 36, 7, 5, 1, 207, - 129, 36, 7, 5, 1, 32, 2, 245, 166, 36, 7, 5, 1, 148, 2, 245, 166, 36, 7, - 5, 1, 106, 2, 245, 166, 36, 120, 212, 202, 52, 36, 50, 233, 2, 249, 123, - 55, 36, 252, 149, 146, 211, 130, 55, 36, 47, 251, 244, 52, 36, 48, 251, - 244, 23, 130, 251, 244, 55, 7, 6, 1, 32, 2, 218, 149, 55, 7, 5, 1, 32, 2, - 218, 149, 55, 7, 6, 1, 63, 2, 67, 52, 7, 5, 1, 63, 2, 67, 52, 7, 6, 1, - 63, 2, 67, 55, 7, 5, 1, 63, 2, 67, 55, 7, 6, 1, 63, 2, 229, 206, 55, 7, - 5, 1, 63, 2, 229, 206, 55, 7, 6, 1, 249, 35, 2, 248, 142, 23, 153, 7, 5, - 1, 249, 35, 2, 248, 142, 23, 153, 7, 6, 1, 246, 241, 2, 67, 52, 7, 5, 1, - 246, 241, 2, 67, 52, 7, 6, 1, 246, 241, 2, 67, 55, 7, 5, 1, 246, 241, 2, - 67, 55, 7, 6, 1, 246, 241, 2, 229, 206, 55, 7, 5, 1, 246, 241, 2, 229, - 206, 55, 7, 6, 1, 246, 241, 2, 248, 141, 7, 5, 1, 246, 241, 2, 248, 141, - 7, 6, 1, 246, 241, 2, 247, 228, 55, 7, 5, 1, 246, 241, 2, 247, 228, 55, - 7, 6, 1, 174, 2, 228, 14, 23, 239, 236, 7, 5, 1, 174, 2, 228, 14, 23, - 239, 236, 7, 6, 1, 174, 2, 228, 14, 23, 153, 7, 5, 1, 174, 2, 228, 14, - 23, 153, 7, 6, 1, 174, 2, 247, 228, 55, 7, 5, 1, 174, 2, 247, 228, 55, 7, - 6, 1, 174, 2, 211, 181, 55, 7, 5, 1, 174, 2, 211, 181, 55, 7, 6, 1, 174, - 2, 248, 142, 23, 249, 122, 7, 5, 1, 174, 2, 248, 142, 23, 249, 122, 7, 6, - 1, 242, 140, 2, 67, 52, 7, 5, 1, 242, 140, 2, 67, 52, 7, 6, 1, 241, 56, - 2, 228, 13, 7, 5, 1, 241, 56, 2, 228, 13, 7, 6, 1, 239, 156, 2, 67, 52, - 7, 5, 1, 239, 156, 2, 67, 52, 7, 6, 1, 239, 156, 2, 67, 55, 7, 5, 1, 239, - 156, 2, 67, 55, 7, 6, 1, 239, 156, 2, 245, 166, 7, 5, 1, 239, 156, 2, - 245, 166, 7, 6, 1, 239, 156, 2, 248, 141, 7, 5, 1, 239, 156, 2, 248, 141, - 7, 6, 1, 239, 156, 2, 249, 123, 55, 7, 5, 1, 239, 156, 2, 249, 123, 55, - 7, 6, 1, 237, 225, 2, 211, 181, 55, 7, 5, 1, 237, 225, 2, 211, 181, 55, - 7, 6, 1, 237, 225, 2, 245, 167, 23, 153, 7, 5, 1, 237, 225, 2, 245, 167, - 23, 153, 7, 6, 1, 232, 77, 2, 153, 7, 5, 1, 232, 77, 2, 153, 7, 6, 1, - 232, 77, 2, 67, 55, 7, 5, 1, 232, 77, 2, 67, 55, 7, 6, 1, 232, 77, 2, - 229, 206, 55, 7, 5, 1, 232, 77, 2, 229, 206, 55, 7, 6, 1, 230, 159, 2, - 67, 55, 7, 5, 1, 230, 159, 2, 67, 55, 7, 6, 1, 230, 159, 2, 67, 250, 26, - 23, 228, 13, 7, 5, 1, 230, 159, 2, 67, 250, 26, 23, 228, 13, 7, 6, 1, - 230, 159, 2, 229, 206, 55, 7, 5, 1, 230, 159, 2, 229, 206, 55, 7, 6, 1, - 230, 159, 2, 247, 228, 55, 7, 5, 1, 230, 159, 2, 247, 228, 55, 7, 6, 1, - 229, 29, 2, 153, 7, 5, 1, 229, 29, 2, 153, 7, 6, 1, 229, 29, 2, 67, 52, - 7, 5, 1, 229, 29, 2, 67, 52, 7, 6, 1, 229, 29, 2, 67, 55, 7, 5, 1, 229, - 29, 2, 67, 55, 7, 6, 1, 226, 34, 2, 67, 52, 7, 5, 1, 226, 34, 2, 67, 52, - 7, 6, 1, 226, 34, 2, 67, 55, 7, 5, 1, 226, 34, 2, 67, 55, 7, 6, 1, 226, - 34, 2, 229, 206, 55, 7, 5, 1, 226, 34, 2, 229, 206, 55, 7, 6, 1, 226, 34, - 2, 247, 228, 55, 7, 5, 1, 226, 34, 2, 247, 228, 55, 7, 6, 1, 148, 2, 211, - 181, 23, 153, 7, 5, 1, 148, 2, 211, 181, 23, 153, 7, 6, 1, 148, 2, 211, - 181, 23, 245, 166, 7, 5, 1, 148, 2, 211, 181, 23, 245, 166, 7, 6, 1, 148, - 2, 228, 14, 23, 239, 236, 7, 5, 1, 148, 2, 228, 14, 23, 239, 236, 7, 6, - 1, 148, 2, 228, 14, 23, 153, 7, 5, 1, 148, 2, 228, 14, 23, 153, 7, 6, 1, - 222, 68, 2, 153, 7, 5, 1, 222, 68, 2, 153, 7, 6, 1, 222, 68, 2, 67, 52, - 7, 5, 1, 222, 68, 2, 67, 52, 7, 6, 1, 219, 150, 2, 67, 52, 7, 5, 1, 219, - 150, 2, 67, 52, 7, 6, 1, 219, 150, 2, 67, 55, 7, 5, 1, 219, 150, 2, 67, - 55, 7, 6, 1, 219, 150, 2, 67, 250, 26, 23, 228, 13, 7, 5, 1, 219, 150, 2, - 67, 250, 26, 23, 228, 13, 7, 6, 1, 219, 150, 2, 229, 206, 55, 7, 5, 1, - 219, 150, 2, 229, 206, 55, 7, 6, 1, 218, 1, 2, 67, 52, 7, 5, 1, 218, 1, - 2, 67, 52, 7, 6, 1, 218, 1, 2, 67, 55, 7, 5, 1, 218, 1, 2, 67, 55, 7, 6, - 1, 218, 1, 2, 253, 9, 23, 67, 52, 7, 5, 1, 218, 1, 2, 253, 9, 23, 67, 52, - 7, 6, 1, 218, 1, 2, 248, 196, 23, 67, 52, 7, 5, 1, 218, 1, 2, 248, 196, - 23, 67, 52, 7, 6, 1, 218, 1, 2, 67, 250, 26, 23, 67, 52, 7, 5, 1, 218, 1, - 2, 67, 250, 26, 23, 67, 52, 7, 6, 1, 213, 11, 2, 67, 52, 7, 5, 1, 213, - 11, 2, 67, 52, 7, 6, 1, 213, 11, 2, 67, 55, 7, 5, 1, 213, 11, 2, 67, 55, - 7, 6, 1, 213, 11, 2, 229, 206, 55, 7, 5, 1, 213, 11, 2, 229, 206, 55, 7, - 6, 1, 213, 11, 2, 247, 228, 55, 7, 5, 1, 213, 11, 2, 247, 228, 55, 7, 6, - 1, 106, 2, 245, 167, 55, 7, 5, 1, 106, 2, 245, 167, 55, 7, 6, 1, 106, 2, - 211, 181, 55, 7, 5, 1, 106, 2, 211, 181, 55, 7, 6, 1, 106, 2, 247, 228, - 55, 7, 5, 1, 106, 2, 247, 228, 55, 7, 6, 1, 106, 2, 211, 181, 23, 153, 7, - 5, 1, 106, 2, 211, 181, 23, 153, 7, 6, 1, 106, 2, 228, 14, 23, 245, 166, - 7, 5, 1, 106, 2, 228, 14, 23, 245, 166, 7, 6, 1, 209, 149, 2, 211, 180, - 7, 5, 1, 209, 149, 2, 211, 180, 7, 6, 1, 209, 149, 2, 67, 55, 7, 5, 1, - 209, 149, 2, 67, 55, 7, 6, 1, 207, 130, 2, 239, 236, 7, 5, 1, 207, 130, - 2, 239, 236, 7, 6, 1, 207, 130, 2, 153, 7, 5, 1, 207, 130, 2, 153, 7, 6, - 1, 207, 130, 2, 245, 166, 7, 5, 1, 207, 130, 2, 245, 166, 7, 6, 1, 207, - 130, 2, 67, 52, 7, 5, 1, 207, 130, 2, 67, 52, 7, 6, 1, 207, 130, 2, 67, - 55, 7, 5, 1, 207, 130, 2, 67, 55, 7, 6, 1, 206, 196, 2, 67, 52, 7, 5, 1, - 206, 196, 2, 67, 52, 7, 6, 1, 206, 196, 2, 245, 166, 7, 5, 1, 206, 196, - 2, 245, 166, 7, 6, 1, 206, 124, 2, 67, 52, 7, 5, 1, 206, 124, 2, 67, 52, - 7, 6, 1, 205, 160, 2, 247, 227, 7, 5, 1, 205, 160, 2, 247, 227, 7, 6, 1, - 205, 160, 2, 67, 55, 7, 5, 1, 205, 160, 2, 67, 55, 7, 6, 1, 205, 160, 2, - 229, 206, 55, 7, 5, 1, 205, 160, 2, 229, 206, 55, 7, 5, 1, 239, 156, 2, - 229, 206, 55, 7, 5, 1, 213, 11, 2, 245, 166, 7, 5, 1, 207, 130, 2, 218, - 149, 52, 7, 5, 1, 206, 124, 2, 218, 149, 52, 7, 5, 1, 32, 2, 48, 160, - 218, 148, 7, 5, 1, 152, 218, 1, 2, 67, 52, 7, 5, 1, 152, 218, 1, 2, 245, - 163, 91, 7, 5, 1, 152, 218, 1, 2, 127, 91, 7, 6, 1, 215, 228, 182, 7, 5, - 1, 245, 227, 7, 6, 1, 32, 2, 67, 55, 7, 5, 1, 32, 2, 67, 55, 7, 6, 1, 32, - 2, 238, 130, 52, 7, 5, 1, 32, 2, 238, 130, 52, 7, 6, 1, 32, 2, 247, 228, - 23, 153, 7, 5, 1, 32, 2, 247, 228, 23, 153, 7, 6, 1, 32, 2, 247, 228, 23, - 239, 236, 7, 5, 1, 32, 2, 247, 228, 23, 239, 236, 7, 6, 1, 32, 2, 247, - 228, 23, 238, 130, 52, 7, 5, 1, 32, 2, 247, 228, 23, 238, 130, 52, 7, 6, - 1, 32, 2, 247, 228, 23, 211, 180, 7, 5, 1, 32, 2, 247, 228, 23, 211, 180, - 7, 6, 1, 32, 2, 247, 228, 23, 67, 55, 7, 5, 1, 32, 2, 247, 228, 23, 67, - 55, 7, 6, 1, 32, 2, 249, 123, 23, 153, 7, 5, 1, 32, 2, 249, 123, 23, 153, - 7, 6, 1, 32, 2, 249, 123, 23, 239, 236, 7, 5, 1, 32, 2, 249, 123, 23, - 239, 236, 7, 6, 1, 32, 2, 249, 123, 23, 238, 130, 52, 7, 5, 1, 32, 2, - 249, 123, 23, 238, 130, 52, 7, 6, 1, 32, 2, 249, 123, 23, 211, 180, 7, 5, - 1, 32, 2, 249, 123, 23, 211, 180, 7, 6, 1, 32, 2, 249, 123, 23, 67, 55, - 7, 5, 1, 32, 2, 249, 123, 23, 67, 55, 7, 6, 1, 174, 2, 67, 55, 7, 5, 1, - 174, 2, 67, 55, 7, 6, 1, 174, 2, 238, 130, 52, 7, 5, 1, 174, 2, 238, 130, - 52, 7, 6, 1, 174, 2, 211, 180, 7, 5, 1, 174, 2, 211, 180, 7, 6, 1, 174, - 2, 247, 228, 23, 153, 7, 5, 1, 174, 2, 247, 228, 23, 153, 7, 6, 1, 174, - 2, 247, 228, 23, 239, 236, 7, 5, 1, 174, 2, 247, 228, 23, 239, 236, 7, 6, - 1, 174, 2, 247, 228, 23, 238, 130, 52, 7, 5, 1, 174, 2, 247, 228, 23, - 238, 130, 52, 7, 6, 1, 174, 2, 247, 228, 23, 211, 180, 7, 5, 1, 174, 2, - 247, 228, 23, 211, 180, 7, 6, 1, 174, 2, 247, 228, 23, 67, 55, 7, 5, 1, - 174, 2, 247, 228, 23, 67, 55, 7, 6, 1, 237, 225, 2, 238, 130, 52, 7, 5, - 1, 237, 225, 2, 238, 130, 52, 7, 6, 1, 237, 225, 2, 67, 55, 7, 5, 1, 237, - 225, 2, 67, 55, 7, 6, 1, 148, 2, 67, 55, 7, 5, 1, 148, 2, 67, 55, 7, 6, - 1, 148, 2, 238, 130, 52, 7, 5, 1, 148, 2, 238, 130, 52, 7, 6, 1, 148, 2, - 247, 228, 23, 153, 7, 5, 1, 148, 2, 247, 228, 23, 153, 7, 6, 1, 148, 2, - 247, 228, 23, 239, 236, 7, 5, 1, 148, 2, 247, 228, 23, 239, 236, 7, 6, 1, - 148, 2, 247, 228, 23, 238, 130, 52, 7, 5, 1, 148, 2, 247, 228, 23, 238, - 130, 52, 7, 6, 1, 148, 2, 247, 228, 23, 211, 180, 7, 5, 1, 148, 2, 247, - 228, 23, 211, 180, 7, 6, 1, 148, 2, 247, 228, 23, 67, 55, 7, 5, 1, 148, - 2, 247, 228, 23, 67, 55, 7, 6, 1, 148, 2, 238, 70, 23, 153, 7, 5, 1, 148, - 2, 238, 70, 23, 153, 7, 6, 1, 148, 2, 238, 70, 23, 239, 236, 7, 5, 1, - 148, 2, 238, 70, 23, 239, 236, 7, 6, 1, 148, 2, 238, 70, 23, 238, 130, - 52, 7, 5, 1, 148, 2, 238, 70, 23, 238, 130, 52, 7, 6, 1, 148, 2, 238, 70, - 23, 211, 180, 7, 5, 1, 148, 2, 238, 70, 23, 211, 180, 7, 6, 1, 148, 2, - 238, 70, 23, 67, 55, 7, 5, 1, 148, 2, 238, 70, 23, 67, 55, 7, 6, 1, 106, - 2, 67, 55, 7, 5, 1, 106, 2, 67, 55, 7, 6, 1, 106, 2, 238, 130, 52, 7, 5, - 1, 106, 2, 238, 130, 52, 7, 6, 1, 106, 2, 238, 70, 23, 153, 7, 5, 1, 106, - 2, 238, 70, 23, 153, 7, 6, 1, 106, 2, 238, 70, 23, 239, 236, 7, 5, 1, - 106, 2, 238, 70, 23, 239, 236, 7, 6, 1, 106, 2, 238, 70, 23, 238, 130, - 52, 7, 5, 1, 106, 2, 238, 70, 23, 238, 130, 52, 7, 6, 1, 106, 2, 238, 70, - 23, 211, 180, 7, 5, 1, 106, 2, 238, 70, 23, 211, 180, 7, 6, 1, 106, 2, - 238, 70, 23, 67, 55, 7, 5, 1, 106, 2, 238, 70, 23, 67, 55, 7, 6, 1, 206, - 124, 2, 239, 236, 7, 5, 1, 206, 124, 2, 239, 236, 7, 6, 1, 206, 124, 2, - 67, 55, 7, 5, 1, 206, 124, 2, 67, 55, 7, 6, 1, 206, 124, 2, 238, 130, 52, - 7, 5, 1, 206, 124, 2, 238, 130, 52, 7, 6, 1, 206, 124, 2, 211, 180, 7, 5, - 1, 206, 124, 2, 211, 180, 7, 6, 1, 226, 246, 229, 173, 7, 5, 1, 226, 246, - 229, 173, 7, 6, 1, 226, 246, 209, 148, 7, 5, 1, 226, 246, 209, 148, 7, 6, - 1, 206, 124, 2, 229, 111, 7, 5, 1, 206, 124, 2, 229, 111, 27, 5, 1, 252, - 145, 2, 220, 86, 27, 5, 1, 252, 145, 2, 246, 75, 27, 5, 1, 252, 145, 2, - 220, 87, 23, 209, 54, 27, 5, 1, 252, 145, 2, 246, 76, 23, 209, 54, 27, 5, - 1, 252, 145, 2, 220, 87, 23, 222, 72, 27, 5, 1, 252, 145, 2, 246, 76, 23, - 222, 72, 27, 5, 1, 252, 145, 2, 220, 87, 23, 221, 124, 27, 5, 1, 252, - 145, 2, 246, 76, 23, 221, 124, 27, 6, 1, 252, 145, 2, 220, 86, 27, 6, 1, - 252, 145, 2, 246, 75, 27, 6, 1, 252, 145, 2, 220, 87, 23, 209, 54, 27, 6, - 1, 252, 145, 2, 246, 76, 23, 209, 54, 27, 6, 1, 252, 145, 2, 220, 87, 23, - 222, 72, 27, 6, 1, 252, 145, 2, 246, 76, 23, 222, 72, 27, 6, 1, 252, 145, - 2, 220, 87, 23, 221, 124, 27, 6, 1, 252, 145, 2, 246, 76, 23, 221, 124, - 27, 5, 1, 242, 245, 2, 220, 86, 27, 5, 1, 242, 245, 2, 246, 75, 27, 5, 1, - 242, 245, 2, 220, 87, 23, 209, 54, 27, 5, 1, 242, 245, 2, 246, 76, 23, - 209, 54, 27, 5, 1, 242, 245, 2, 220, 87, 23, 222, 72, 27, 5, 1, 242, 245, - 2, 246, 76, 23, 222, 72, 27, 6, 1, 242, 245, 2, 220, 86, 27, 6, 1, 242, - 245, 2, 246, 75, 27, 6, 1, 242, 245, 2, 220, 87, 23, 209, 54, 27, 6, 1, - 242, 245, 2, 246, 76, 23, 209, 54, 27, 6, 1, 242, 245, 2, 220, 87, 23, - 222, 72, 27, 6, 1, 242, 245, 2, 246, 76, 23, 222, 72, 27, 5, 1, 242, 202, - 2, 220, 86, 27, 5, 1, 242, 202, 2, 246, 75, 27, 5, 1, 242, 202, 2, 220, - 87, 23, 209, 54, 27, 5, 1, 242, 202, 2, 246, 76, 23, 209, 54, 27, 5, 1, - 242, 202, 2, 220, 87, 23, 222, 72, 27, 5, 1, 242, 202, 2, 246, 76, 23, - 222, 72, 27, 5, 1, 242, 202, 2, 220, 87, 23, 221, 124, 27, 5, 1, 242, - 202, 2, 246, 76, 23, 221, 124, 27, 6, 1, 242, 202, 2, 220, 86, 27, 6, 1, - 242, 202, 2, 246, 75, 27, 6, 1, 242, 202, 2, 220, 87, 23, 209, 54, 27, 6, - 1, 242, 202, 2, 246, 76, 23, 209, 54, 27, 6, 1, 242, 202, 2, 220, 87, 23, - 222, 72, 27, 6, 1, 242, 202, 2, 246, 76, 23, 222, 72, 27, 6, 1, 242, 202, - 2, 220, 87, 23, 221, 124, 27, 6, 1, 242, 202, 2, 246, 76, 23, 221, 124, - 27, 5, 1, 232, 250, 2, 220, 86, 27, 5, 1, 232, 250, 2, 246, 75, 27, 5, 1, - 232, 250, 2, 220, 87, 23, 209, 54, 27, 5, 1, 232, 250, 2, 246, 76, 23, - 209, 54, 27, 5, 1, 232, 250, 2, 220, 87, 23, 222, 72, 27, 5, 1, 232, 250, - 2, 246, 76, 23, 222, 72, 27, 5, 1, 232, 250, 2, 220, 87, 23, 221, 124, - 27, 5, 1, 232, 250, 2, 246, 76, 23, 221, 124, 27, 6, 1, 232, 250, 2, 220, - 86, 27, 6, 1, 232, 250, 2, 246, 75, 27, 6, 1, 232, 250, 2, 220, 87, 23, - 209, 54, 27, 6, 1, 232, 250, 2, 246, 76, 23, 209, 54, 27, 6, 1, 232, 250, - 2, 220, 87, 23, 222, 72, 27, 6, 1, 232, 250, 2, 246, 76, 23, 222, 72, 27, - 6, 1, 232, 250, 2, 220, 87, 23, 221, 124, 27, 6, 1, 232, 250, 2, 246, 76, - 23, 221, 124, 27, 5, 1, 222, 169, 2, 220, 86, 27, 5, 1, 222, 169, 2, 246, - 75, 27, 5, 1, 222, 169, 2, 220, 87, 23, 209, 54, 27, 5, 1, 222, 169, 2, - 246, 76, 23, 209, 54, 27, 5, 1, 222, 169, 2, 220, 87, 23, 222, 72, 27, 5, - 1, 222, 169, 2, 246, 76, 23, 222, 72, 27, 6, 1, 222, 169, 2, 220, 86, 27, - 6, 1, 222, 169, 2, 246, 75, 27, 6, 1, 222, 169, 2, 220, 87, 23, 209, 54, - 27, 6, 1, 222, 169, 2, 246, 76, 23, 209, 54, 27, 6, 1, 222, 169, 2, 220, - 87, 23, 222, 72, 27, 6, 1, 222, 169, 2, 246, 76, 23, 222, 72, 27, 5, 1, - 209, 201, 2, 220, 86, 27, 5, 1, 209, 201, 2, 246, 75, 27, 5, 1, 209, 201, - 2, 220, 87, 23, 209, 54, 27, 5, 1, 209, 201, 2, 246, 76, 23, 209, 54, 27, - 5, 1, 209, 201, 2, 220, 87, 23, 222, 72, 27, 5, 1, 209, 201, 2, 246, 76, - 23, 222, 72, 27, 5, 1, 209, 201, 2, 220, 87, 23, 221, 124, 27, 5, 1, 209, - 201, 2, 246, 76, 23, 221, 124, 27, 6, 1, 209, 201, 2, 246, 75, 27, 6, 1, - 209, 201, 2, 246, 76, 23, 209, 54, 27, 6, 1, 209, 201, 2, 246, 76, 23, - 222, 72, 27, 6, 1, 209, 201, 2, 246, 76, 23, 221, 124, 27, 5, 1, 222, - 171, 2, 220, 86, 27, 5, 1, 222, 171, 2, 246, 75, 27, 5, 1, 222, 171, 2, - 220, 87, 23, 209, 54, 27, 5, 1, 222, 171, 2, 246, 76, 23, 209, 54, 27, 5, - 1, 222, 171, 2, 220, 87, 23, 222, 72, 27, 5, 1, 222, 171, 2, 246, 76, 23, - 222, 72, 27, 5, 1, 222, 171, 2, 220, 87, 23, 221, 124, 27, 5, 1, 222, - 171, 2, 246, 76, 23, 221, 124, 27, 6, 1, 222, 171, 2, 220, 86, 27, 6, 1, - 222, 171, 2, 246, 75, 27, 6, 1, 222, 171, 2, 220, 87, 23, 209, 54, 27, 6, - 1, 222, 171, 2, 246, 76, 23, 209, 54, 27, 6, 1, 222, 171, 2, 220, 87, 23, - 222, 72, 27, 6, 1, 222, 171, 2, 246, 76, 23, 222, 72, 27, 6, 1, 222, 171, - 2, 220, 87, 23, 221, 124, 27, 6, 1, 222, 171, 2, 246, 76, 23, 221, 124, - 27, 5, 1, 252, 145, 2, 209, 54, 27, 5, 1, 252, 145, 2, 222, 72, 27, 5, 1, - 242, 245, 2, 209, 54, 27, 5, 1, 242, 245, 2, 222, 72, 27, 5, 1, 242, 202, - 2, 209, 54, 27, 5, 1, 242, 202, 2, 222, 72, 27, 5, 1, 232, 250, 2, 209, - 54, 27, 5, 1, 232, 250, 2, 222, 72, 27, 5, 1, 222, 169, 2, 209, 54, 27, - 5, 1, 222, 169, 2, 222, 72, 27, 5, 1, 209, 201, 2, 209, 54, 27, 5, 1, - 209, 201, 2, 222, 72, 27, 5, 1, 222, 171, 2, 209, 54, 27, 5, 1, 222, 171, - 2, 222, 72, 27, 5, 1, 252, 145, 2, 220, 87, 23, 205, 221, 27, 5, 1, 252, - 145, 2, 246, 76, 23, 205, 221, 27, 5, 1, 252, 145, 2, 220, 87, 23, 209, - 55, 23, 205, 221, 27, 5, 1, 252, 145, 2, 246, 76, 23, 209, 55, 23, 205, - 221, 27, 5, 1, 252, 145, 2, 220, 87, 23, 222, 73, 23, 205, 221, 27, 5, 1, - 252, 145, 2, 246, 76, 23, 222, 73, 23, 205, 221, 27, 5, 1, 252, 145, 2, - 220, 87, 23, 221, 125, 23, 205, 221, 27, 5, 1, 252, 145, 2, 246, 76, 23, - 221, 125, 23, 205, 221, 27, 6, 1, 252, 145, 2, 220, 87, 23, 220, 100, 27, - 6, 1, 252, 145, 2, 246, 76, 23, 220, 100, 27, 6, 1, 252, 145, 2, 220, 87, - 23, 209, 55, 23, 220, 100, 27, 6, 1, 252, 145, 2, 246, 76, 23, 209, 55, - 23, 220, 100, 27, 6, 1, 252, 145, 2, 220, 87, 23, 222, 73, 23, 220, 100, - 27, 6, 1, 252, 145, 2, 246, 76, 23, 222, 73, 23, 220, 100, 27, 6, 1, 252, - 145, 2, 220, 87, 23, 221, 125, 23, 220, 100, 27, 6, 1, 252, 145, 2, 246, - 76, 23, 221, 125, 23, 220, 100, 27, 5, 1, 242, 202, 2, 220, 87, 23, 205, - 221, 27, 5, 1, 242, 202, 2, 246, 76, 23, 205, 221, 27, 5, 1, 242, 202, 2, - 220, 87, 23, 209, 55, 23, 205, 221, 27, 5, 1, 242, 202, 2, 246, 76, 23, - 209, 55, 23, 205, 221, 27, 5, 1, 242, 202, 2, 220, 87, 23, 222, 73, 23, - 205, 221, 27, 5, 1, 242, 202, 2, 246, 76, 23, 222, 73, 23, 205, 221, 27, - 5, 1, 242, 202, 2, 220, 87, 23, 221, 125, 23, 205, 221, 27, 5, 1, 242, - 202, 2, 246, 76, 23, 221, 125, 23, 205, 221, 27, 6, 1, 242, 202, 2, 220, - 87, 23, 220, 100, 27, 6, 1, 242, 202, 2, 246, 76, 23, 220, 100, 27, 6, 1, - 242, 202, 2, 220, 87, 23, 209, 55, 23, 220, 100, 27, 6, 1, 242, 202, 2, - 246, 76, 23, 209, 55, 23, 220, 100, 27, 6, 1, 242, 202, 2, 220, 87, 23, - 222, 73, 23, 220, 100, 27, 6, 1, 242, 202, 2, 246, 76, 23, 222, 73, 23, - 220, 100, 27, 6, 1, 242, 202, 2, 220, 87, 23, 221, 125, 23, 220, 100, 27, - 6, 1, 242, 202, 2, 246, 76, 23, 221, 125, 23, 220, 100, 27, 5, 1, 222, - 171, 2, 220, 87, 23, 205, 221, 27, 5, 1, 222, 171, 2, 246, 76, 23, 205, - 221, 27, 5, 1, 222, 171, 2, 220, 87, 23, 209, 55, 23, 205, 221, 27, 5, 1, - 222, 171, 2, 246, 76, 23, 209, 55, 23, 205, 221, 27, 5, 1, 222, 171, 2, - 220, 87, 23, 222, 73, 23, 205, 221, 27, 5, 1, 222, 171, 2, 246, 76, 23, - 222, 73, 23, 205, 221, 27, 5, 1, 222, 171, 2, 220, 87, 23, 221, 125, 23, - 205, 221, 27, 5, 1, 222, 171, 2, 246, 76, 23, 221, 125, 23, 205, 221, 27, - 6, 1, 222, 171, 2, 220, 87, 23, 220, 100, 27, 6, 1, 222, 171, 2, 246, 76, - 23, 220, 100, 27, 6, 1, 222, 171, 2, 220, 87, 23, 209, 55, 23, 220, 100, - 27, 6, 1, 222, 171, 2, 246, 76, 23, 209, 55, 23, 220, 100, 27, 6, 1, 222, - 171, 2, 220, 87, 23, 222, 73, 23, 220, 100, 27, 6, 1, 222, 171, 2, 246, - 76, 23, 222, 73, 23, 220, 100, 27, 6, 1, 222, 171, 2, 220, 87, 23, 221, - 125, 23, 220, 100, 27, 6, 1, 222, 171, 2, 246, 76, 23, 221, 125, 23, 220, - 100, 27, 5, 1, 252, 145, 2, 208, 152, 27, 5, 1, 252, 145, 2, 228, 13, 27, - 5, 1, 252, 145, 2, 209, 55, 23, 205, 221, 27, 5, 1, 252, 145, 2, 205, - 221, 27, 5, 1, 252, 145, 2, 222, 73, 23, 205, 221, 27, 5, 1, 252, 145, 2, - 221, 124, 27, 5, 1, 252, 145, 2, 221, 125, 23, 205, 221, 27, 6, 1, 252, - 145, 2, 208, 152, 27, 6, 1, 252, 145, 2, 228, 13, 27, 6, 1, 252, 145, 2, - 209, 54, 27, 6, 1, 252, 145, 2, 222, 72, 27, 6, 1, 252, 145, 2, 220, 100, - 27, 231, 23, 27, 220, 100, 27, 220, 86, 27, 221, 124, 27, 245, 160, 23, - 221, 124, 27, 5, 1, 242, 202, 2, 209, 55, 23, 205, 221, 27, 5, 1, 242, - 202, 2, 205, 221, 27, 5, 1, 242, 202, 2, 222, 73, 23, 205, 221, 27, 5, 1, - 242, 202, 2, 221, 124, 27, 5, 1, 242, 202, 2, 221, 125, 23, 205, 221, 27, - 6, 1, 242, 245, 2, 209, 54, 27, 6, 1, 242, 245, 2, 222, 72, 27, 6, 1, - 242, 202, 2, 209, 54, 27, 6, 1, 242, 202, 2, 222, 72, 27, 6, 1, 242, 202, - 2, 220, 100, 27, 220, 87, 23, 209, 54, 27, 220, 87, 23, 222, 72, 27, 220, - 87, 23, 221, 124, 27, 5, 1, 232, 250, 2, 208, 152, 27, 5, 1, 232, 250, 2, - 228, 13, 27, 5, 1, 232, 250, 2, 245, 160, 23, 209, 54, 27, 5, 1, 232, - 250, 2, 245, 160, 23, 222, 72, 27, 5, 1, 232, 250, 2, 221, 124, 27, 5, 1, - 232, 250, 2, 245, 160, 23, 221, 124, 27, 6, 1, 232, 250, 2, 208, 152, 27, - 6, 1, 232, 250, 2, 228, 13, 27, 6, 1, 232, 250, 2, 209, 54, 27, 6, 1, - 232, 250, 2, 222, 72, 27, 246, 76, 23, 209, 54, 27, 246, 76, 23, 222, 72, - 27, 246, 76, 23, 221, 124, 27, 5, 1, 209, 201, 2, 208, 152, 27, 5, 1, - 209, 201, 2, 228, 13, 27, 5, 1, 209, 201, 2, 245, 160, 23, 209, 54, 27, - 5, 1, 209, 201, 2, 245, 160, 23, 222, 72, 27, 5, 1, 218, 211, 2, 220, 86, - 27, 5, 1, 218, 211, 2, 246, 75, 27, 5, 1, 209, 201, 2, 221, 124, 27, 5, - 1, 209, 201, 2, 245, 160, 23, 221, 124, 27, 6, 1, 209, 201, 2, 208, 152, - 27, 6, 1, 209, 201, 2, 228, 13, 27, 6, 1, 209, 201, 2, 209, 54, 27, 6, 1, - 209, 201, 2, 222, 72, 27, 6, 1, 218, 211, 2, 246, 75, 27, 245, 160, 23, - 209, 54, 27, 245, 160, 23, 222, 72, 27, 209, 54, 27, 5, 1, 222, 171, 2, - 209, 55, 23, 205, 221, 27, 5, 1, 222, 171, 2, 205, 221, 27, 5, 1, 222, - 171, 2, 222, 73, 23, 205, 221, 27, 5, 1, 222, 171, 2, 221, 124, 27, 5, 1, - 222, 171, 2, 221, 125, 23, 205, 221, 27, 6, 1, 222, 169, 2, 209, 54, 27, - 6, 1, 222, 169, 2, 222, 72, 27, 6, 1, 222, 171, 2, 209, 54, 27, 6, 1, - 222, 171, 2, 222, 72, 27, 6, 1, 222, 171, 2, 220, 100, 27, 222, 72, 27, - 246, 75, 243, 42, 219, 211, 243, 51, 219, 211, 243, 42, 214, 153, 243, - 51, 214, 153, 211, 235, 214, 153, 241, 123, 214, 153, 215, 8, 214, 153, - 241, 241, 214, 153, 220, 72, 214, 153, 212, 12, 214, 153, 239, 130, 214, - 153, 205, 86, 207, 15, 214, 153, 205, 86, 207, 15, 224, 59, 205, 86, 207, - 15, 232, 117, 230, 37, 83, 218, 158, 83, 237, 239, 224, 60, 237, 239, - 241, 241, 246, 78, 243, 42, 246, 78, 243, 51, 246, 78, 194, 134, 50, 79, - 229, 205, 50, 114, 229, 205, 47, 215, 41, 219, 180, 83, 48, 215, 41, 219, - 180, 83, 215, 41, 229, 96, 219, 180, 83, 215, 41, 238, 249, 219, 180, 83, - 47, 50, 219, 180, 83, 48, 50, 219, 180, 83, 50, 229, 96, 219, 180, 83, - 50, 238, 249, 219, 180, 83, 246, 128, 50, 246, 128, 249, 85, 211, 48, - 249, 85, 119, 67, 230, 56, 118, 67, 230, 56, 194, 243, 54, 237, 237, 220, - 204, 229, 206, 216, 39, 221, 229, 216, 39, 230, 37, 243, 49, 218, 158, - 243, 49, 220, 184, 245, 103, 241, 134, 230, 37, 222, 79, 218, 158, 222, - 79, 225, 199, 224, 66, 214, 153, 221, 132, 226, 215, 53, 221, 132, 212, - 99, 211, 243, 53, 220, 127, 50, 220, 127, 211, 36, 220, 127, 218, 224, - 220, 127, 218, 224, 50, 220, 127, 218, 224, 211, 36, 220, 127, 248, 199, - 215, 41, 230, 41, 252, 109, 219, 180, 83, 215, 41, 218, 162, 252, 109, - 219, 180, 83, 219, 28, 83, 50, 242, 168, 83, 233, 10, 222, 81, 209, 223, - 157, 211, 203, 248, 200, 233, 27, 220, 204, 251, 207, 237, 240, 249, 85, - 241, 116, 214, 235, 47, 49, 249, 134, 2, 219, 190, 48, 49, 249, 134, 2, - 219, 190, 50, 219, 196, 83, 219, 196, 242, 168, 83, 242, 168, 219, 196, - 83, 211, 159, 3, 242, 203, 218, 224, 221, 12, 53, 60, 92, 249, 85, 60, - 86, 249, 85, 114, 251, 209, 218, 224, 216, 52, 247, 193, 209, 206, 118, - 251, 208, 252, 160, 208, 227, 247, 153, 226, 202, 53, 213, 93, 246, 78, - 233, 2, 209, 223, 241, 173, 220, 72, 83, 129, 67, 220, 71, 219, 207, 220, - 127, 241, 125, 67, 220, 71, 241, 204, 67, 220, 71, 118, 67, 220, 71, 241, - 125, 67, 83, 244, 21, 247, 59, 211, 47, 79, 241, 125, 245, 21, 227, 109, - 11, 214, 153, 206, 232, 232, 117, 241, 80, 252, 48, 233, 0, 211, 175, - 233, 0, 216, 39, 233, 0, 220, 218, 230, 37, 232, 226, 218, 158, 232, 226, - 241, 215, 213, 211, 232, 226, 220, 184, 245, 103, 232, 226, 233, 39, 213, - 41, 213, 110, 253, 11, 213, 41, 213, 110, 233, 39, 8, 241, 136, 215, 232, - 253, 11, 8, 241, 136, 215, 232, 225, 193, 18, 215, 233, 224, 62, 18, 215, - 233, 213, 139, 205, 85, 213, 139, 7, 5, 1, 74, 213, 139, 139, 213, 139, - 168, 213, 139, 184, 213, 139, 195, 213, 139, 193, 213, 139, 200, 213, - 139, 101, 53, 213, 139, 226, 201, 213, 139, 242, 242, 53, 213, 139, 47, - 221, 216, 213, 139, 48, 221, 216, 213, 139, 7, 5, 1, 226, 33, 213, 183, - 205, 85, 213, 183, 102, 213, 183, 105, 213, 183, 142, 213, 183, 139, 213, - 183, 168, 213, 183, 184, 213, 183, 195, 213, 183, 193, 213, 183, 200, - 213, 183, 101, 53, 213, 183, 226, 201, 213, 183, 242, 242, 53, 213, 183, - 47, 221, 216, 213, 183, 48, 221, 216, 7, 213, 183, 5, 1, 62, 7, 213, 183, - 5, 1, 75, 7, 213, 183, 5, 1, 76, 7, 213, 183, 5, 1, 206, 195, 7, 213, - 183, 5, 1, 217, 100, 7, 213, 183, 5, 1, 239, 155, 7, 213, 183, 5, 1, 232, - 76, 7, 213, 183, 5, 1, 149, 7, 213, 183, 5, 1, 229, 28, 7, 213, 183, 5, - 1, 226, 33, 7, 213, 183, 5, 1, 222, 67, 7, 213, 183, 5, 1, 182, 7, 213, - 183, 5, 1, 213, 10, 242, 183, 53, 247, 163, 53, 247, 45, 53, 241, 106, - 241, 110, 53, 229, 188, 53, 226, 216, 53, 225, 216, 53, 221, 109, 53, - 218, 27, 53, 206, 240, 53, 186, 215, 200, 53, 245, 30, 53, 242, 184, 53, - 231, 104, 53, 210, 163, 53, 244, 4, 53, 240, 146, 221, 143, 53, 221, 106, - 53, 239, 208, 53, 251, 174, 53, 238, 48, 53, 248, 143, 53, 229, 179, 211, - 88, 53, 214, 134, 53, 212, 96, 53, 233, 52, 218, 27, 53, 210, 146, 229, - 188, 53, 224, 49, 141, 53, 227, 219, 53, 218, 47, 53, 36, 47, 239, 90, - 52, 36, 48, 239, 90, 52, 36, 152, 79, 229, 206, 222, 82, 36, 215, 144, - 79, 229, 206, 222, 82, 36, 252, 87, 51, 52, 36, 247, 194, 51, 52, 36, 47, - 51, 52, 36, 48, 51, 52, 36, 218, 149, 222, 82, 36, 247, 194, 218, 149, - 222, 82, 36, 252, 87, 218, 149, 222, 82, 36, 129, 177, 52, 36, 241, 125, - 177, 52, 36, 243, 37, 247, 233, 36, 243, 37, 214, 107, 36, 243, 37, 245, - 156, 36, 243, 37, 247, 234, 250, 171, 36, 47, 48, 51, 52, 36, 243, 37, - 217, 93, 36, 243, 37, 231, 170, 36, 243, 37, 209, 198, 220, 201, 211, 51, - 36, 218, 225, 214, 181, 222, 82, 36, 50, 79, 213, 225, 222, 82, 36, 252, - 97, 93, 36, 211, 36, 209, 225, 36, 207, 17, 249, 116, 52, 36, 92, 51, - 222, 82, 36, 152, 50, 214, 181, 222, 82, 36, 86, 239, 90, 2, 138, 244, 6, - 36, 92, 239, 90, 2, 138, 244, 6, 36, 47, 51, 55, 36, 48, 51, 55, 36, 251, - 210, 52, 253, 17, 222, 203, 253, 1, 211, 130, 212, 42, 213, 192, 159, 6, - 249, 34, 245, 245, 248, 134, 248, 129, 229, 206, 93, 248, 201, 222, 203, - 248, 249, 209, 233, 242, 185, 247, 124, 217, 90, 245, 245, 242, 56, 121, - 5, 241, 55, 121, 6, 239, 155, 249, 200, 6, 239, 155, 159, 6, 239, 155, - 220, 235, 247, 124, 220, 235, 247, 125, 131, 118, 221, 53, 121, 6, 74, - 249, 200, 6, 74, 121, 6, 149, 121, 5, 149, 230, 159, 63, 250, 129, 93, - 159, 6, 226, 33, 223, 175, 53, 214, 165, 219, 40, 247, 93, 121, 6, 222, - 67, 159, 6, 222, 67, 159, 6, 220, 27, 121, 6, 137, 249, 200, 6, 137, 159, - 6, 137, 220, 133, 212, 185, 218, 237, 216, 33, 83, 212, 108, 53, 211, 79, - 141, 53, 209, 23, 159, 6, 205, 159, 222, 96, 53, 222, 193, 53, 233, 2, - 222, 193, 53, 249, 200, 6, 205, 159, 201, 27, 5, 1, 232, 249, 231, 211, - 53, 252, 106, 53, 121, 6, 251, 150, 249, 200, 6, 249, 34, 242, 207, 93, - 121, 5, 75, 121, 6, 75, 121, 6, 242, 139, 201, 6, 242, 139, 121, 6, 229, - 28, 121, 5, 76, 126, 93, 250, 11, 93, 240, 48, 93, 246, 112, 93, 233, 43, - 214, 163, 218, 97, 6, 220, 27, 242, 59, 53, 159, 5, 221, 53, 159, 5, 240, - 215, 159, 6, 240, 215, 159, 6, 221, 53, 159, 226, 32, 213, 157, 201, 38, - 6, 241, 55, 201, 38, 6, 149, 218, 224, 38, 6, 149, 201, 38, 6, 206, 123, - 159, 35, 6, 246, 240, 159, 35, 5, 246, 240, 159, 35, 5, 75, 159, 35, 5, - 74, 159, 35, 5, 232, 203, 220, 103, 229, 205, 201, 252, 125, 221, 132, - 53, 252, 183, 201, 5, 242, 139, 16, 33, 217, 160, 214, 163, 207, 146, - 241, 116, 119, 216, 19, 207, 146, 241, 116, 119, 224, 189, 207, 146, 241, - 116, 119, 212, 91, 207, 146, 241, 116, 119, 212, 10, 207, 146, 241, 116, - 118, 212, 7, 207, 146, 241, 116, 119, 241, 246, 207, 146, 241, 116, 118, - 241, 245, 207, 146, 241, 116, 129, 241, 245, 207, 146, 241, 116, 241, - 125, 241, 245, 207, 146, 241, 116, 119, 215, 0, 207, 146, 241, 116, 241, - 204, 214, 254, 207, 146, 241, 116, 119, 243, 83, 207, 146, 241, 116, 129, - 243, 81, 207, 146, 241, 116, 241, 204, 243, 81, 207, 146, 241, 116, 216, - 23, 243, 81, 241, 116, 223, 176, 102, 218, 109, 223, 177, 102, 218, 109, - 223, 177, 105, 218, 109, 223, 177, 142, 218, 109, 223, 177, 139, 218, - 109, 223, 177, 168, 218, 109, 223, 177, 184, 218, 109, 223, 177, 195, - 218, 109, 223, 177, 193, 218, 109, 223, 177, 200, 218, 109, 223, 177, - 212, 98, 218, 109, 223, 177, 243, 58, 218, 109, 223, 177, 210, 126, 218, - 109, 223, 177, 241, 243, 218, 109, 223, 177, 119, 238, 29, 218, 109, 223, - 177, 241, 204, 238, 29, 218, 109, 223, 177, 119, 211, 242, 5, 218, 109, - 223, 177, 102, 5, 218, 109, 223, 177, 105, 5, 218, 109, 223, 177, 142, 5, - 218, 109, 223, 177, 139, 5, 218, 109, 223, 177, 168, 5, 218, 109, 223, - 177, 184, 5, 218, 109, 223, 177, 195, 5, 218, 109, 223, 177, 193, 5, 218, - 109, 223, 177, 200, 5, 218, 109, 223, 177, 212, 98, 5, 218, 109, 223, - 177, 243, 58, 5, 218, 109, 223, 177, 210, 126, 5, 218, 109, 223, 177, - 241, 243, 5, 218, 109, 223, 177, 119, 238, 29, 5, 218, 109, 223, 177, - 241, 204, 238, 29, 5, 218, 109, 223, 177, 119, 211, 242, 218, 109, 223, - 177, 119, 211, 243, 249, 35, 246, 240, 218, 109, 223, 177, 241, 204, 211, - 242, 218, 109, 223, 177, 212, 99, 211, 242, 218, 109, 223, 177, 218, 224, - 119, 238, 29, 7, 5, 1, 218, 224, 249, 34, 218, 109, 223, 177, 215, 10, - 230, 79, 17, 218, 109, 223, 177, 241, 244, 243, 123, 17, 218, 109, 223, - 177, 241, 244, 211, 242, 218, 109, 223, 177, 119, 238, 30, 211, 242, 207, - 146, 241, 116, 205, 86, 212, 7, 92, 45, 167, 45, 86, 45, 173, 45, 47, 48, - 45, 120, 130, 45, 143, 207, 36, 45, 143, 243, 117, 45, 188, 243, 117, 45, - 188, 207, 36, 45, 92, 51, 2, 91, 86, 51, 2, 91, 92, 207, 65, 45, 86, 207, - 65, 45, 92, 118, 239, 67, 45, 167, 118, 239, 67, 45, 86, 118, 239, 67, - 45, 173, 118, 239, 67, 45, 92, 51, 2, 212, 191, 86, 51, 2, 212, 191, 92, - 51, 241, 98, 134, 167, 51, 241, 98, 134, 86, 51, 241, 98, 134, 173, 51, - 241, 98, 134, 120, 130, 51, 2, 250, 116, 92, 51, 2, 109, 86, 51, 2, 109, - 92, 51, 2, 229, 111, 86, 51, 2, 229, 111, 47, 48, 207, 65, 45, 47, 48, - 51, 2, 91, 173, 205, 31, 45, 167, 51, 2, 211, 167, 230, 36, 167, 51, 2, - 211, 167, 218, 156, 173, 51, 2, 211, 167, 230, 36, 173, 51, 2, 211, 167, - 218, 156, 86, 51, 2, 247, 92, 244, 6, 173, 51, 2, 247, 92, 230, 36, 252, - 87, 211, 102, 216, 55, 45, 247, 194, 211, 102, 216, 55, 45, 143, 207, 36, - 51, 211, 130, 152, 134, 92, 51, 211, 130, 250, 129, 131, 86, 51, 211, - 130, 134, 252, 87, 222, 142, 247, 234, 45, 247, 194, 222, 142, 247, 234, - 45, 92, 239, 90, 2, 138, 209, 196, 92, 239, 90, 2, 138, 244, 6, 167, 239, - 90, 2, 138, 218, 156, 167, 239, 90, 2, 138, 230, 36, 86, 239, 90, 2, 138, - 209, 196, 86, 239, 90, 2, 138, 244, 6, 173, 239, 90, 2, 138, 218, 156, - 173, 239, 90, 2, 138, 230, 36, 86, 51, 131, 92, 45, 167, 51, 92, 73, 173, - 45, 92, 51, 131, 86, 45, 92, 222, 30, 251, 241, 167, 222, 30, 251, 241, - 86, 222, 30, 251, 241, 173, 222, 30, 251, 241, 92, 239, 90, 131, 86, 239, - 89, 86, 239, 90, 131, 92, 239, 89, 92, 50, 51, 2, 91, 47, 48, 50, 51, 2, - 91, 86, 50, 51, 2, 91, 92, 50, 45, 167, 50, 45, 86, 50, 45, 173, 50, 45, - 47, 48, 50, 45, 120, 130, 50, 45, 143, 207, 36, 50, 45, 143, 243, 117, - 50, 45, 188, 243, 117, 50, 45, 188, 207, 36, 50, 45, 92, 211, 36, 45, 86, - 211, 36, 45, 92, 214, 103, 45, 86, 214, 103, 45, 167, 51, 2, 50, 91, 173, - 51, 2, 50, 91, 92, 246, 77, 45, 167, 246, 77, 45, 86, 246, 77, 45, 173, - 246, 77, 45, 92, 51, 211, 130, 134, 86, 51, 211, 130, 134, 92, 59, 45, - 167, 59, 45, 86, 59, 45, 173, 59, 45, 167, 59, 51, 241, 98, 134, 167, 59, - 51, 222, 166, 221, 167, 167, 59, 51, 222, 166, 221, 168, 2, 194, 134, - 167, 59, 51, 222, 166, 221, 168, 2, 79, 134, 167, 59, 50, 45, 167, 59, - 50, 51, 222, 166, 221, 167, 86, 59, 51, 241, 98, 207, 86, 143, 207, 36, - 51, 211, 130, 247, 91, 188, 243, 117, 51, 211, 130, 247, 91, 120, 130, - 59, 45, 48, 51, 2, 5, 247, 233, 173, 51, 92, 73, 167, 45, 129, 86, 251, - 241, 92, 51, 2, 79, 91, 86, 51, 2, 79, 91, 47, 48, 51, 2, 79, 91, 92, 51, - 2, 50, 79, 91, 86, 51, 2, 50, 79, 91, 47, 48, 51, 2, 50, 79, 91, 92, 222, - 140, 45, 86, 222, 140, 45, 47, 48, 222, 140, 45, 33, 252, 156, 247, 150, - 221, 209, 245, 140, 212, 32, 242, 164, 212, 32, 245, 42, 224, 43, 242, - 165, 243, 43, 216, 28, 233, 57, 225, 227, 243, 61, 222, 203, 224, 43, - 252, 123, 243, 61, 222, 203, 5, 243, 61, 222, 203, 247, 118, 251, 232, - 227, 87, 245, 42, 224, 43, 247, 120, 251, 232, 227, 87, 5, 247, 118, 251, - 232, 227, 87, 243, 34, 73, 220, 105, 226, 32, 220, 115, 226, 32, 247, 96, - 226, 32, 213, 157, 226, 202, 53, 226, 200, 53, 67, 220, 218, 245, 75, - 214, 235, 216, 29, 226, 201, 251, 210, 222, 132, 218, 149, 222, 132, 249, - 86, 222, 132, 49, 218, 103, 247, 36, 218, 103, 241, 118, 218, 103, 220, - 101, 124, 233, 45, 48, 252, 108, 252, 108, 227, 116, 252, 108, 214, 133, - 252, 108, 245, 77, 245, 42, 224, 43, 245, 81, 221, 222, 124, 224, 43, - 221, 222, 124, 229, 134, 252, 117, 229, 134, 222, 122, 233, 7, 209, 218, - 233, 21, 50, 233, 21, 211, 36, 233, 21, 247, 113, 233, 21, 213, 129, 233, - 21, 208, 163, 233, 21, 247, 194, 233, 21, 247, 194, 247, 113, 233, 21, - 252, 87, 247, 113, 233, 21, 212, 31, 250, 52, 219, 61, 220, 102, 67, 226, - 201, 242, 170, 240, 152, 220, 102, 238, 135, 211, 181, 222, 132, 218, - 224, 211, 180, 233, 2, 230, 65, 182, 215, 43, 207, 64, 206, 221, 220, - 115, 224, 43, 211, 180, 226, 202, 211, 180, 251, 203, 146, 124, 224, 43, - 251, 203, 146, 124, 252, 44, 146, 124, 252, 44, 249, 57, 224, 43, 253, - 10, 146, 124, 225, 103, 252, 44, 224, 51, 253, 10, 146, 124, 252, 149, - 146, 124, 224, 43, 252, 149, 146, 124, 252, 149, 146, 222, 123, 146, 124, - 211, 36, 211, 180, 252, 157, 146, 124, 242, 237, 124, 240, 151, 242, 237, - 124, 245, 141, 250, 5, 252, 46, 212, 42, 229, 213, 240, 151, 146, 124, - 252, 44, 146, 211, 130, 222, 123, 212, 42, 233, 84, 222, 203, 233, 84, - 73, 222, 123, 252, 44, 146, 124, 247, 163, 242, 241, 242, 242, 247, 162, - 218, 149, 233, 69, 146, 124, 218, 149, 146, 124, 247, 85, 124, 242, 206, - 242, 240, 124, 214, 27, 242, 241, 245, 228, 146, 124, 146, 211, 130, 249, - 46, 245, 246, 227, 116, 249, 45, 219, 194, 146, 124, 224, 43, 146, 124, - 237, 173, 124, 224, 43, 237, 173, 124, 213, 231, 242, 237, 124, 230, 10, - 222, 123, 146, 124, 239, 230, 222, 123, 146, 124, 230, 10, 131, 146, 124, - 239, 230, 131, 146, 124, 230, 10, 249, 57, 224, 43, 146, 124, 239, 230, - 249, 57, 224, 43, 146, 124, 226, 108, 230, 9, 226, 108, 239, 229, 250, 5, - 224, 43, 242, 237, 124, 224, 43, 230, 9, 224, 43, 239, 229, 225, 103, - 230, 10, 224, 51, 146, 124, 225, 103, 239, 230, 224, 51, 146, 124, 230, - 10, 222, 123, 242, 237, 124, 239, 230, 222, 123, 242, 237, 124, 225, 103, - 230, 10, 224, 51, 242, 237, 124, 225, 103, 239, 230, 224, 51, 242, 237, - 124, 230, 10, 222, 123, 239, 229, 239, 230, 222, 123, 230, 9, 225, 103, - 230, 10, 224, 51, 239, 229, 225, 103, 239, 230, 224, 51, 230, 9, 220, - 139, 213, 173, 220, 140, 222, 123, 146, 124, 213, 174, 222, 123, 146, - 124, 220, 140, 222, 123, 242, 237, 124, 213, 174, 222, 123, 242, 237, - 124, 245, 42, 224, 43, 220, 142, 245, 42, 224, 43, 213, 175, 213, 182, - 222, 203, 213, 138, 222, 203, 224, 43, 32, 213, 182, 222, 203, 224, 43, - 32, 213, 138, 222, 203, 213, 182, 73, 222, 123, 146, 124, 213, 138, 73, - 222, 123, 146, 124, 225, 103, 32, 213, 182, 73, 224, 51, 146, 124, 225, - 103, 32, 213, 138, 73, 224, 51, 146, 124, 213, 182, 73, 2, 224, 43, 146, - 124, 213, 138, 73, 2, 224, 43, 146, 124, 226, 91, 226, 92, 226, 93, 226, - 92, 209, 218, 49, 233, 84, 222, 203, 49, 222, 114, 222, 203, 49, 233, 84, - 73, 222, 123, 146, 124, 49, 222, 114, 73, 222, 123, 146, 124, 49, 248, - 213, 49, 247, 29, 39, 220, 218, 39, 226, 201, 39, 211, 175, 39, 245, 75, - 214, 235, 39, 67, 222, 132, 39, 218, 149, 222, 132, 39, 251, 210, 222, - 132, 39, 242, 241, 39, 246, 78, 98, 220, 218, 98, 226, 201, 98, 211, 175, - 98, 67, 222, 132, 48, 212, 201, 47, 212, 201, 130, 212, 201, 120, 212, - 201, 251, 213, 226, 176, 211, 16, 241, 141, 211, 36, 79, 250, 129, 48, - 210, 143, 50, 79, 250, 129, 50, 48, 210, 143, 245, 42, 224, 43, 220, 96, - 224, 43, 211, 16, 245, 42, 224, 43, 241, 142, 225, 105, 50, 79, 250, 129, - 50, 48, 210, 143, 220, 140, 209, 227, 219, 11, 213, 174, 209, 227, 219, - 11, 224, 48, 213, 195, 222, 203, 247, 118, 251, 232, 224, 48, 213, 194, - 224, 48, 213, 195, 73, 222, 123, 146, 124, 247, 118, 251, 232, 224, 48, - 213, 195, 222, 123, 146, 124, 222, 114, 222, 203, 233, 84, 222, 203, 226, - 97, 239, 32, 247, 129, 227, 168, 233, 18, 206, 155, 225, 207, 224, 50, - 48, 252, 109, 2, 252, 21, 48, 211, 51, 226, 32, 229, 134, 252, 117, 226, - 32, 229, 134, 222, 122, 226, 32, 233, 7, 226, 32, 209, 218, 245, 157, - 222, 132, 67, 222, 132, 214, 27, 222, 132, 245, 75, 211, 175, 249, 141, - 47, 224, 48, 242, 58, 216, 51, 220, 115, 48, 224, 48, 242, 58, 216, 51, - 220, 115, 47, 216, 51, 220, 115, 48, 216, 51, 220, 115, 218, 224, 211, - 181, 242, 241, 247, 26, 229, 134, 222, 122, 247, 26, 229, 134, 252, 117, - 50, 213, 181, 50, 213, 137, 50, 233, 7, 50, 209, 218, 220, 245, 146, 23, - 221, 222, 124, 230, 10, 2, 245, 23, 239, 230, 2, 245, 23, 208, 226, 226, - 108, 230, 9, 208, 226, 226, 108, 239, 229, 230, 10, 146, 211, 130, 222, - 123, 239, 229, 239, 230, 146, 211, 130, 222, 123, 230, 9, 146, 211, 130, - 222, 123, 230, 9, 146, 211, 130, 222, 123, 239, 229, 146, 211, 130, 222, - 123, 220, 139, 146, 211, 130, 222, 123, 213, 173, 245, 42, 224, 43, 220, - 143, 222, 123, 242, 243, 245, 42, 224, 43, 213, 176, 222, 123, 242, 243, - 224, 43, 49, 233, 84, 73, 222, 123, 146, 124, 224, 43, 49, 222, 114, 73, - 222, 123, 146, 124, 49, 233, 84, 73, 222, 123, 224, 43, 146, 124, 49, - 222, 114, 73, 222, 123, 224, 43, 146, 124, 230, 10, 249, 57, 224, 43, - 242, 237, 124, 239, 230, 249, 57, 224, 43, 242, 237, 124, 220, 140, 249, - 57, 224, 43, 242, 237, 124, 213, 174, 249, 57, 224, 43, 242, 237, 124, - 224, 43, 224, 48, 213, 195, 222, 203, 245, 42, 224, 43, 247, 120, 251, - 232, 224, 48, 213, 194, 224, 43, 224, 48, 213, 195, 73, 222, 123, 146, - 124, 245, 42, 224, 43, 247, 120, 251, 232, 224, 48, 213, 195, 222, 123, - 242, 243, 79, 243, 54, 226, 245, 194, 243, 54, 120, 48, 245, 163, 243, - 54, 130, 48, 245, 163, 243, 54, 243, 61, 73, 2, 152, 194, 91, 243, 61, - 73, 2, 79, 250, 129, 251, 200, 243, 34, 73, 194, 91, 5, 243, 61, 73, 2, - 79, 250, 129, 251, 200, 243, 34, 73, 194, 91, 243, 61, 73, 2, 67, 52, - 243, 61, 73, 2, 222, 86, 5, 243, 61, 73, 2, 222, 86, 243, 61, 73, 2, 209, - 226, 243, 61, 73, 2, 118, 194, 213, 212, 247, 118, 2, 152, 194, 91, 247, - 118, 2, 79, 250, 129, 251, 200, 243, 34, 73, 194, 91, 5, 247, 118, 2, 79, - 250, 129, 251, 200, 243, 34, 73, 194, 91, 247, 118, 2, 222, 86, 5, 247, - 118, 2, 222, 86, 205, 160, 224, 41, 250, 164, 227, 86, 245, 158, 53, 243, - 63, 45, 238, 54, 120, 251, 243, 130, 251, 243, 220, 109, 221, 112, 207, - 61, 229, 205, 47, 248, 137, 48, 248, 137, 47, 241, 178, 48, 241, 178, - 249, 154, 48, 247, 61, 249, 154, 47, 247, 61, 211, 102, 48, 247, 61, 211, - 102, 47, 247, 61, 218, 224, 224, 43, 53, 49, 229, 88, 252, 21, 217, 67, - 217, 75, 212, 108, 219, 41, 220, 178, 233, 49, 208, 202, 214, 107, 220, - 239, 73, 233, 17, 53, 201, 224, 43, 53, 207, 71, 238, 56, 211, 102, 47, - 247, 91, 211, 102, 48, 247, 91, 249, 154, 47, 247, 91, 249, 154, 48, 247, - 91, 211, 102, 160, 233, 21, 249, 154, 160, 233, 21, 241, 95, 214, 211, - 120, 251, 244, 250, 6, 118, 194, 250, 118, 222, 125, 231, 174, 242, 233, - 211, 130, 212, 42, 218, 167, 206, 196, 233, 69, 32, 219, 38, 249, 140, - 231, 172, 230, 41, 252, 109, 145, 218, 162, 252, 109, 145, 242, 233, 211, - 130, 212, 42, 230, 46, 250, 17, 218, 148, 246, 250, 252, 157, 251, 252, - 213, 40, 211, 90, 218, 32, 245, 122, 222, 115, 247, 131, 212, 164, 214, - 222, 247, 81, 247, 80, 252, 62, 241, 78, 16, 237, 222, 252, 62, 241, 78, - 16, 214, 101, 219, 211, 252, 62, 241, 78, 16, 219, 212, 242, 243, 252, - 62, 241, 78, 16, 219, 212, 245, 81, 252, 62, 241, 78, 16, 219, 212, 245, - 156, 252, 62, 241, 78, 16, 219, 212, 232, 110, 252, 62, 241, 78, 16, 219, - 212, 247, 233, 252, 62, 241, 78, 16, 247, 234, 214, 3, 252, 62, 241, 78, - 16, 247, 234, 232, 110, 252, 62, 241, 78, 16, 214, 236, 134, 252, 62, - 241, 78, 16, 250, 172, 134, 252, 62, 241, 78, 16, 219, 212, 214, 235, - 252, 62, 241, 78, 16, 219, 212, 250, 171, 252, 62, 241, 78, 16, 219, 212, - 230, 9, 252, 62, 241, 78, 16, 219, 212, 239, 229, 252, 62, 241, 78, 16, - 92, 209, 60, 252, 62, 241, 78, 16, 86, 209, 60, 252, 62, 241, 78, 16, - 219, 212, 92, 45, 252, 62, 241, 78, 16, 219, 212, 86, 45, 252, 62, 241, - 78, 16, 247, 234, 250, 171, 252, 62, 241, 78, 16, 130, 212, 202, 209, - 226, 252, 62, 241, 78, 16, 245, 228, 214, 3, 252, 62, 241, 78, 16, 219, - 212, 130, 248, 199, 252, 62, 241, 78, 16, 219, 212, 245, 227, 252, 62, - 241, 78, 16, 130, 212, 202, 232, 110, 252, 62, 241, 78, 16, 167, 209, 60, - 252, 62, 241, 78, 16, 219, 212, 167, 45, 252, 62, 241, 78, 16, 120, 212, - 202, 222, 86, 252, 62, 241, 78, 16, 245, 239, 214, 3, 252, 62, 241, 78, - 16, 219, 212, 120, 248, 199, 252, 62, 241, 78, 16, 219, 212, 245, 238, - 252, 62, 241, 78, 16, 120, 212, 202, 232, 110, 252, 62, 241, 78, 16, 173, - 209, 60, 252, 62, 241, 78, 16, 219, 212, 173, 45, 252, 62, 241, 78, 16, - 219, 179, 209, 226, 252, 62, 241, 78, 16, 245, 228, 209, 226, 252, 62, - 241, 78, 16, 245, 157, 209, 226, 252, 62, 241, 78, 16, 232, 111, 209, - 226, 252, 62, 241, 78, 16, 247, 234, 209, 226, 252, 62, 241, 78, 16, 120, - 215, 156, 232, 110, 252, 62, 241, 78, 16, 219, 179, 219, 211, 252, 62, - 241, 78, 16, 247, 234, 214, 26, 252, 62, 241, 78, 16, 219, 212, 247, 162, - 252, 62, 241, 78, 16, 120, 212, 202, 245, 166, 252, 62, 241, 78, 16, 245, - 239, 245, 166, 252, 62, 241, 78, 16, 214, 27, 245, 166, 252, 62, 241, 78, - 16, 232, 111, 245, 166, 252, 62, 241, 78, 16, 247, 234, 245, 166, 252, - 62, 241, 78, 16, 130, 215, 156, 214, 3, 252, 62, 241, 78, 16, 47, 215, - 156, 214, 3, 252, 62, 241, 78, 16, 211, 181, 245, 166, 252, 62, 241, 78, - 16, 239, 230, 245, 166, 252, 62, 241, 78, 16, 247, 156, 134, 252, 62, - 241, 78, 16, 245, 239, 211, 180, 252, 62, 241, 78, 16, 205, 30, 252, 62, - 241, 78, 16, 214, 4, 211, 180, 252, 62, 241, 78, 16, 216, 53, 209, 226, - 252, 62, 241, 78, 16, 219, 212, 224, 43, 242, 243, 252, 62, 241, 78, 16, - 219, 212, 219, 195, 252, 62, 241, 78, 16, 130, 248, 200, 211, 180, 252, - 62, 241, 78, 16, 120, 248, 200, 211, 180, 252, 62, 241, 78, 16, 232, 249, - 252, 62, 241, 78, 16, 218, 210, 252, 62, 241, 78, 16, 222, 170, 252, 62, - 241, 78, 16, 252, 145, 209, 226, 252, 62, 241, 78, 16, 242, 245, 209, - 226, 252, 62, 241, 78, 16, 232, 250, 209, 226, 252, 62, 241, 78, 16, 222, - 171, 209, 226, 252, 62, 241, 78, 16, 252, 144, 224, 43, 248, 81, 83, 48, - 252, 109, 2, 173, 205, 31, 45, 215, 127, 222, 142, 249, 140, 250, 29, 93, - 79, 229, 206, 2, 226, 247, 245, 23, 233, 27, 93, 247, 114, 209, 224, 93, - 245, 96, 209, 224, 93, 243, 45, 93, 247, 146, 93, 59, 49, 2, 248, 129, - 79, 229, 205, 243, 19, 93, 252, 139, 231, 175, 93, 239, 45, 93, 39, 194, - 250, 129, 2, 224, 40, 39, 211, 52, 244, 8, 249, 111, 247, 234, 2, 224, - 45, 45, 209, 222, 93, 226, 155, 93, 237, 235, 93, 222, 141, 239, 154, 93, - 222, 141, 230, 157, 93, 221, 199, 93, 221, 198, 93, 245, 104, 247, 24, - 16, 241, 136, 105, 214, 185, 93, 252, 62, 241, 78, 16, 219, 211, 246, 2, - 216, 40, 231, 175, 93, 220, 129, 222, 37, 225, 82, 222, 37, 220, 125, - 217, 94, 93, 247, 209, 217, 94, 93, 47, 221, 217, 209, 203, 109, 47, 221, - 217, 242, 157, 47, 221, 217, 229, 92, 109, 48, 221, 217, 209, 203, 109, - 48, 221, 217, 242, 157, 48, 221, 217, 229, 92, 109, 47, 49, 249, 134, - 209, 203, 247, 91, 47, 49, 249, 134, 242, 157, 47, 49, 249, 134, 229, 92, - 247, 91, 48, 49, 249, 134, 209, 203, 247, 91, 48, 49, 249, 134, 242, 157, - 48, 49, 249, 134, 229, 92, 247, 91, 47, 247, 26, 249, 134, 209, 203, 109, - 47, 247, 26, 249, 134, 226, 247, 221, 45, 47, 247, 26, 249, 134, 229, 92, - 109, 247, 26, 249, 134, 242, 157, 48, 247, 26, 249, 134, 209, 203, 109, - 48, 247, 26, 249, 134, 226, 247, 221, 45, 48, 247, 26, 249, 134, 229, 92, - 109, 233, 22, 242, 157, 194, 229, 206, 242, 157, 209, 203, 47, 222, 123, - 229, 92, 48, 247, 26, 249, 134, 217, 76, 209, 203, 48, 222, 123, 229, 92, - 47, 247, 26, 249, 134, 217, 76, 213, 158, 211, 101, 213, 158, 249, 153, - 211, 102, 49, 145, 249, 154, 49, 145, 249, 154, 49, 249, 134, 131, 211, - 102, 49, 145, 37, 16, 249, 153, 47, 79, 96, 229, 205, 48, 79, 96, 229, - 205, 194, 217, 110, 229, 204, 194, 217, 110, 229, 203, 194, 217, 110, - 229, 202, 194, 217, 110, 229, 201, 245, 219, 16, 147, 79, 23, 211, 102, - 218, 167, 245, 219, 16, 147, 79, 23, 249, 154, 218, 167, 245, 219, 16, - 147, 79, 2, 247, 233, 245, 219, 16, 147, 130, 23, 194, 2, 247, 233, 245, - 219, 16, 147, 120, 23, 194, 2, 247, 233, 245, 219, 16, 147, 79, 2, 211, - 51, 245, 219, 16, 147, 130, 23, 194, 2, 211, 51, 245, 219, 16, 147, 120, - 23, 194, 2, 211, 51, 245, 219, 16, 147, 79, 23, 207, 64, 245, 219, 16, - 147, 130, 23, 194, 2, 207, 64, 245, 219, 16, 147, 120, 23, 194, 2, 207, - 64, 245, 219, 16, 147, 130, 23, 238, 121, 245, 219, 16, 147, 120, 23, - 238, 121, 245, 219, 16, 147, 79, 23, 211, 102, 230, 46, 245, 219, 16, - 147, 79, 23, 249, 154, 230, 46, 49, 241, 148, 218, 229, 93, 243, 77, 93, - 79, 229, 206, 242, 157, 227, 57, 249, 122, 227, 57, 152, 131, 215, 143, - 227, 57, 215, 144, 131, 229, 125, 227, 57, 152, 131, 118, 215, 129, 227, - 57, 118, 215, 130, 131, 229, 125, 227, 57, 118, 215, 130, 232, 118, 227, - 57, 211, 33, 227, 57, 212, 72, 227, 57, 221, 138, 243, 121, 239, 222, - 241, 72, 211, 102, 221, 216, 249, 154, 221, 216, 211, 102, 247, 26, 145, - 249, 154, 247, 26, 145, 211, 102, 211, 93, 215, 204, 145, 249, 154, 211, - 93, 215, 204, 145, 59, 211, 65, 250, 17, 218, 149, 2, 247, 233, 213, 242, - 241, 186, 253, 25, 247, 23, 243, 62, 233, 7, 246, 2, 242, 161, 93, 60, - 218, 162, 50, 211, 51, 60, 230, 41, 50, 211, 51, 60, 209, 205, 50, 211, - 51, 60, 244, 7, 50, 211, 51, 60, 218, 162, 50, 211, 52, 2, 79, 134, 60, - 230, 41, 50, 211, 52, 2, 79, 134, 60, 218, 162, 211, 52, 2, 50, 79, 134, - 252, 176, 247, 195, 213, 248, 211, 176, 247, 195, 238, 57, 2, 241, 170, - 217, 149, 60, 227, 109, 230, 41, 211, 51, 60, 227, 109, 218, 162, 211, - 51, 60, 227, 109, 209, 205, 211, 51, 60, 227, 109, 244, 7, 211, 51, 50, - 79, 134, 60, 49, 33, 213, 251, 60, 247, 234, 33, 219, 42, 16, 33, 223, - 181, 16, 33, 214, 22, 73, 239, 66, 16, 33, 214, 22, 73, 212, 60, 16, 33, - 243, 34, 73, 212, 60, 16, 33, 243, 34, 73, 211, 69, 16, 33, 243, 21, 16, - 33, 253, 13, 16, 33, 250, 28, 16, 33, 250, 170, 16, 33, 194, 212, 203, - 16, 33, 229, 206, 242, 19, 16, 33, 79, 212, 203, 16, 33, 241, 136, 242, - 19, 16, 33, 248, 191, 218, 228, 16, 33, 215, 179, 222, 93, 16, 33, 215, - 179, 233, 68, 16, 33, 246, 73, 229, 196, 242, 217, 16, 33, 245, 199, 247, - 109, 102, 16, 33, 245, 199, 247, 109, 105, 16, 33, 245, 199, 247, 109, - 142, 16, 33, 245, 199, 247, 109, 139, 16, 33, 170, 253, 13, 16, 33, 213, - 36, 233, 131, 16, 33, 243, 34, 73, 211, 70, 249, 193, 16, 33, 248, 224, - 16, 33, 243, 34, 73, 227, 108, 16, 33, 213, 179, 16, 33, 242, 217, 16, - 33, 241, 236, 216, 39, 16, 33, 239, 221, 216, 39, 16, 33, 219, 43, 216, - 39, 16, 33, 209, 217, 216, 39, 16, 33, 214, 153, 16, 33, 245, 236, 249, - 196, 93, 222, 142, 249, 140, 16, 33, 225, 85, 16, 33, 245, 237, 241, 136, - 105, 16, 33, 213, 180, 241, 136, 105, 222, 215, 109, 222, 215, 248, 105, - 222, 215, 241, 139, 222, 215, 233, 2, 241, 139, 222, 215, 250, 25, 249, - 98, 222, 215, 249, 147, 211, 203, 222, 215, 249, 131, 250, 134, 237, 172, - 222, 215, 252, 127, 73, 248, 80, 222, 215, 246, 78, 222, 215, 247, 13, - 253, 17, 223, 179, 222, 215, 50, 250, 171, 39, 18, 102, 39, 18, 105, 39, - 18, 142, 39, 18, 139, 39, 18, 168, 39, 18, 184, 39, 18, 195, 39, 18, 193, - 39, 18, 200, 39, 43, 212, 98, 39, 43, 243, 58, 39, 43, 210, 126, 39, 43, - 212, 5, 39, 43, 241, 119, 39, 43, 241, 247, 39, 43, 215, 4, 39, 43, 216, - 20, 39, 43, 243, 85, 39, 43, 224, 192, 39, 43, 210, 123, 97, 18, 102, 97, - 18, 105, 97, 18, 142, 97, 18, 139, 97, 18, 168, 97, 18, 184, 97, 18, 195, - 97, 18, 193, 97, 18, 200, 97, 43, 212, 98, 97, 43, 243, 58, 97, 43, 210, - 126, 97, 43, 212, 5, 97, 43, 241, 119, 97, 43, 241, 247, 97, 43, 215, 4, - 97, 43, 216, 20, 97, 43, 243, 85, 97, 43, 224, 192, 97, 43, 210, 123, 18, - 119, 241, 82, 213, 251, 18, 118, 241, 82, 213, 251, 18, 129, 241, 82, - 213, 251, 18, 241, 125, 241, 82, 213, 251, 18, 241, 204, 241, 82, 213, - 251, 18, 215, 10, 241, 82, 213, 251, 18, 216, 23, 241, 82, 213, 251, 18, - 243, 88, 241, 82, 213, 251, 18, 224, 195, 241, 82, 213, 251, 43, 212, 99, - 241, 82, 213, 251, 43, 243, 59, 241, 82, 213, 251, 43, 210, 127, 241, 82, - 213, 251, 43, 212, 6, 241, 82, 213, 251, 43, 241, 120, 241, 82, 213, 251, - 43, 241, 248, 241, 82, 213, 251, 43, 215, 5, 241, 82, 213, 251, 43, 216, - 21, 241, 82, 213, 251, 43, 243, 86, 241, 82, 213, 251, 43, 224, 193, 241, - 82, 213, 251, 43, 210, 124, 241, 82, 213, 251, 97, 7, 5, 1, 62, 97, 7, 5, - 1, 251, 150, 97, 7, 5, 1, 249, 34, 97, 7, 5, 1, 246, 240, 97, 7, 5, 1, - 75, 97, 7, 5, 1, 242, 139, 97, 7, 5, 1, 241, 55, 97, 7, 5, 1, 239, 155, - 97, 7, 5, 1, 74, 97, 7, 5, 1, 232, 203, 97, 7, 5, 1, 232, 76, 97, 7, 5, - 1, 149, 97, 7, 5, 1, 229, 28, 97, 7, 5, 1, 226, 33, 97, 7, 5, 1, 76, 97, - 7, 5, 1, 222, 67, 97, 7, 5, 1, 220, 27, 97, 7, 5, 1, 137, 97, 7, 5, 1, - 182, 97, 7, 5, 1, 213, 10, 97, 7, 5, 1, 71, 97, 7, 5, 1, 209, 148, 97, 7, - 5, 1, 207, 129, 97, 7, 5, 1, 206, 195, 97, 7, 5, 1, 206, 123, 97, 7, 5, - 1, 205, 159, 39, 7, 6, 1, 62, 39, 7, 6, 1, 251, 150, 39, 7, 6, 1, 249, - 34, 39, 7, 6, 1, 246, 240, 39, 7, 6, 1, 75, 39, 7, 6, 1, 242, 139, 39, 7, - 6, 1, 241, 55, 39, 7, 6, 1, 239, 155, 39, 7, 6, 1, 74, 39, 7, 6, 1, 232, - 203, 39, 7, 6, 1, 232, 76, 39, 7, 6, 1, 149, 39, 7, 6, 1, 229, 28, 39, 7, - 6, 1, 226, 33, 39, 7, 6, 1, 76, 39, 7, 6, 1, 222, 67, 39, 7, 6, 1, 220, - 27, 39, 7, 6, 1, 137, 39, 7, 6, 1, 182, 39, 7, 6, 1, 213, 10, 39, 7, 6, - 1, 71, 39, 7, 6, 1, 209, 148, 39, 7, 6, 1, 207, 129, 39, 7, 6, 1, 206, - 195, 39, 7, 6, 1, 206, 123, 39, 7, 6, 1, 205, 159, 39, 7, 5, 1, 62, 39, - 7, 5, 1, 251, 150, 39, 7, 5, 1, 249, 34, 39, 7, 5, 1, 246, 240, 39, 7, 5, - 1, 75, 39, 7, 5, 1, 242, 139, 39, 7, 5, 1, 241, 55, 39, 7, 5, 1, 239, - 155, 39, 7, 5, 1, 74, 39, 7, 5, 1, 232, 203, 39, 7, 5, 1, 232, 76, 39, 7, - 5, 1, 149, 39, 7, 5, 1, 229, 28, 39, 7, 5, 1, 226, 33, 39, 7, 5, 1, 76, - 39, 7, 5, 1, 222, 67, 39, 7, 5, 1, 220, 27, 39, 7, 5, 1, 137, 39, 7, 5, - 1, 182, 39, 7, 5, 1, 213, 10, 39, 7, 5, 1, 71, 39, 7, 5, 1, 209, 148, 39, - 7, 5, 1, 207, 129, 39, 7, 5, 1, 206, 195, 39, 7, 5, 1, 206, 123, 39, 7, - 5, 1, 205, 159, 39, 18, 205, 85, 170, 39, 43, 243, 58, 170, 39, 43, 210, - 126, 170, 39, 43, 212, 5, 170, 39, 43, 241, 119, 170, 39, 43, 241, 247, - 170, 39, 43, 215, 4, 170, 39, 43, 216, 20, 170, 39, 43, 243, 85, 170, 39, - 43, 224, 192, 170, 39, 43, 210, 123, 50, 39, 18, 102, 50, 39, 18, 105, - 50, 39, 18, 142, 50, 39, 18, 139, 50, 39, 18, 168, 50, 39, 18, 184, 50, - 39, 18, 195, 50, 39, 18, 193, 50, 39, 18, 200, 50, 39, 43, 212, 98, 170, - 39, 18, 205, 85, 96, 110, 147, 238, 121, 96, 110, 77, 238, 121, 96, 110, - 147, 209, 22, 96, 110, 77, 209, 22, 96, 110, 147, 211, 36, 246, 79, 238, - 121, 96, 110, 77, 211, 36, 246, 79, 238, 121, 96, 110, 147, 211, 36, 246, - 79, 209, 22, 96, 110, 77, 211, 36, 246, 79, 209, 22, 96, 110, 147, 219, - 207, 246, 79, 238, 121, 96, 110, 77, 219, 207, 246, 79, 238, 121, 96, - 110, 147, 219, 207, 246, 79, 209, 22, 96, 110, 77, 219, 207, 246, 79, - 209, 22, 96, 110, 147, 130, 23, 218, 167, 96, 110, 130, 147, 23, 48, 239, - 54, 96, 110, 130, 77, 23, 48, 229, 223, 96, 110, 77, 130, 23, 218, 167, - 96, 110, 147, 130, 23, 230, 46, 96, 110, 130, 147, 23, 47, 239, 54, 96, - 110, 130, 77, 23, 47, 229, 223, 96, 110, 77, 130, 23, 230, 46, 96, 110, - 147, 120, 23, 218, 167, 96, 110, 120, 147, 23, 48, 239, 54, 96, 110, 120, - 77, 23, 48, 229, 223, 96, 110, 77, 120, 23, 218, 167, 96, 110, 147, 120, - 23, 230, 46, 96, 110, 120, 147, 23, 47, 239, 54, 96, 110, 120, 77, 23, - 47, 229, 223, 96, 110, 77, 120, 23, 230, 46, 96, 110, 147, 79, 23, 218, - 167, 96, 110, 79, 147, 23, 48, 239, 54, 96, 110, 120, 77, 23, 48, 130, - 229, 223, 96, 110, 130, 77, 23, 48, 120, 229, 223, 96, 110, 79, 77, 23, - 48, 229, 223, 96, 110, 130, 147, 23, 48, 120, 239, 54, 96, 110, 120, 147, - 23, 48, 130, 239, 54, 96, 110, 77, 79, 23, 218, 167, 96, 110, 147, 79, - 23, 230, 46, 96, 110, 79, 147, 23, 47, 239, 54, 96, 110, 120, 77, 23, 47, - 130, 229, 223, 96, 110, 130, 77, 23, 47, 120, 229, 223, 96, 110, 79, 77, - 23, 47, 229, 223, 96, 110, 130, 147, 23, 47, 120, 239, 54, 96, 110, 120, - 147, 23, 47, 130, 239, 54, 96, 110, 77, 79, 23, 230, 46, 96, 110, 147, - 130, 23, 238, 121, 96, 110, 47, 77, 23, 48, 130, 229, 223, 96, 110, 48, - 77, 23, 47, 130, 229, 223, 96, 110, 130, 147, 23, 194, 239, 54, 96, 110, - 130, 77, 23, 194, 229, 223, 96, 110, 48, 147, 23, 47, 130, 239, 54, 96, - 110, 47, 147, 23, 48, 130, 239, 54, 96, 110, 77, 130, 23, 238, 121, 96, - 110, 147, 120, 23, 238, 121, 96, 110, 47, 77, 23, 48, 120, 229, 223, 96, - 110, 48, 77, 23, 47, 120, 229, 223, 96, 110, 120, 147, 23, 194, 239, 54, - 96, 110, 120, 77, 23, 194, 229, 223, 96, 110, 48, 147, 23, 47, 120, 239, - 54, 96, 110, 47, 147, 23, 48, 120, 239, 54, 96, 110, 77, 120, 23, 238, - 121, 96, 110, 147, 79, 23, 238, 121, 96, 110, 47, 77, 23, 48, 79, 229, - 223, 96, 110, 48, 77, 23, 47, 79, 229, 223, 96, 110, 79, 147, 23, 194, - 239, 54, 96, 110, 120, 77, 23, 130, 194, 229, 223, 96, 110, 130, 77, 23, - 120, 194, 229, 223, 96, 110, 79, 77, 23, 194, 229, 223, 96, 110, 47, 120, - 77, 23, 48, 130, 229, 223, 96, 110, 48, 120, 77, 23, 47, 130, 229, 223, - 96, 110, 47, 130, 77, 23, 48, 120, 229, 223, 96, 110, 48, 130, 77, 23, - 47, 120, 229, 223, 96, 110, 130, 147, 23, 120, 194, 239, 54, 96, 110, - 120, 147, 23, 130, 194, 239, 54, 96, 110, 48, 147, 23, 47, 79, 239, 54, - 96, 110, 47, 147, 23, 48, 79, 239, 54, 96, 110, 77, 79, 23, 238, 121, 96, - 110, 147, 50, 246, 79, 238, 121, 96, 110, 77, 50, 246, 79, 238, 121, 96, - 110, 147, 50, 246, 79, 209, 22, 96, 110, 77, 50, 246, 79, 209, 22, 96, - 110, 50, 238, 121, 96, 110, 50, 209, 22, 96, 110, 130, 215, 41, 23, 48, - 244, 16, 96, 110, 130, 50, 23, 48, 215, 40, 96, 110, 50, 130, 23, 218, - 167, 96, 110, 130, 215, 41, 23, 47, 244, 16, 96, 110, 130, 50, 23, 47, - 215, 40, 96, 110, 50, 130, 23, 230, 46, 96, 110, 120, 215, 41, 23, 48, - 244, 16, 96, 110, 120, 50, 23, 48, 215, 40, 96, 110, 50, 120, 23, 218, - 167, 96, 110, 120, 215, 41, 23, 47, 244, 16, 96, 110, 120, 50, 23, 47, - 215, 40, 96, 110, 50, 120, 23, 230, 46, 96, 110, 79, 215, 41, 23, 48, - 244, 16, 96, 110, 79, 50, 23, 48, 215, 40, 96, 110, 50, 79, 23, 218, 167, - 96, 110, 79, 215, 41, 23, 47, 244, 16, 96, 110, 79, 50, 23, 47, 215, 40, - 96, 110, 50, 79, 23, 230, 46, 96, 110, 130, 215, 41, 23, 194, 244, 16, - 96, 110, 130, 50, 23, 194, 215, 40, 96, 110, 50, 130, 23, 238, 121, 96, - 110, 120, 215, 41, 23, 194, 244, 16, 96, 110, 120, 50, 23, 194, 215, 40, - 96, 110, 50, 120, 23, 238, 121, 96, 110, 79, 215, 41, 23, 194, 244, 16, - 96, 110, 79, 50, 23, 194, 215, 40, 96, 110, 50, 79, 23, 238, 121, 96, - 110, 147, 252, 22, 130, 23, 218, 167, 96, 110, 147, 252, 22, 130, 23, - 230, 46, 96, 110, 147, 252, 22, 120, 23, 230, 46, 96, 110, 147, 252, 22, - 120, 23, 218, 167, 96, 110, 147, 245, 163, 209, 203, 48, 211, 130, 229, - 92, 230, 46, 96, 110, 147, 245, 163, 209, 203, 47, 211, 130, 229, 92, - 218, 167, 96, 110, 147, 245, 163, 247, 59, 96, 110, 147, 230, 46, 96, - 110, 147, 209, 206, 96, 110, 147, 218, 167, 96, 110, 147, 244, 8, 96, - 110, 77, 230, 46, 96, 110, 77, 209, 206, 96, 110, 77, 218, 167, 96, 110, - 77, 244, 8, 96, 110, 147, 47, 23, 77, 218, 167, 96, 110, 147, 120, 23, - 77, 244, 8, 96, 110, 77, 47, 23, 147, 218, 167, 96, 110, 77, 120, 23, - 147, 244, 8, 209, 203, 160, 249, 193, 229, 92, 119, 243, 84, 249, 193, - 229, 92, 119, 219, 205, 249, 193, 229, 92, 129, 243, 82, 249, 193, 229, - 92, 160, 249, 193, 229, 92, 241, 204, 243, 82, 249, 193, 229, 92, 129, - 219, 203, 249, 193, 229, 92, 216, 23, 243, 82, 249, 193, 241, 82, 249, - 193, 47, 216, 23, 243, 82, 249, 193, 47, 129, 219, 203, 249, 193, 47, - 241, 204, 243, 82, 249, 193, 47, 160, 249, 193, 47, 129, 243, 82, 249, - 193, 47, 119, 219, 205, 249, 193, 47, 119, 243, 84, 249, 193, 48, 160, - 249, 193, 147, 215, 248, 227, 109, 215, 248, 246, 84, 215, 248, 209, 203, - 119, 243, 84, 249, 193, 48, 119, 243, 84, 249, 193, 219, 209, 229, 92, - 230, 46, 219, 209, 229, 92, 218, 167, 219, 209, 209, 203, 230, 46, 219, - 209, 209, 203, 47, 23, 229, 92, 47, 23, 229, 92, 218, 167, 219, 209, 209, - 203, 47, 23, 229, 92, 218, 167, 219, 209, 209, 203, 47, 23, 209, 203, 48, - 23, 229, 92, 230, 46, 219, 209, 209, 203, 47, 23, 209, 203, 48, 23, 229, - 92, 218, 167, 219, 209, 209, 203, 218, 167, 219, 209, 209, 203, 48, 23, - 229, 92, 230, 46, 219, 209, 209, 203, 48, 23, 229, 92, 47, 23, 229, 92, - 218, 167, 60, 214, 107, 59, 214, 107, 59, 49, 2, 218, 93, 247, 90, 59, - 49, 247, 119, 60, 5, 214, 107, 49, 2, 194, 241, 234, 49, 2, 79, 241, 234, - 49, 2, 222, 108, 247, 55, 241, 234, 49, 2, 209, 203, 47, 211, 130, 229, - 92, 48, 241, 234, 49, 2, 209, 203, 48, 211, 130, 229, 92, 47, 241, 234, - 49, 2, 245, 163, 247, 55, 241, 234, 60, 5, 214, 107, 59, 5, 214, 107, 60, - 219, 37, 59, 219, 37, 60, 79, 219, 37, 59, 79, 219, 37, 60, 221, 220, 59, - 221, 220, 60, 209, 205, 211, 51, 59, 209, 205, 211, 51, 60, 209, 205, 5, - 211, 51, 59, 209, 205, 5, 211, 51, 60, 218, 162, 211, 51, 59, 218, 162, - 211, 51, 60, 218, 162, 5, 211, 51, 59, 218, 162, 5, 211, 51, 60, 218, - 162, 220, 202, 59, 218, 162, 220, 202, 60, 244, 7, 211, 51, 59, 244, 7, - 211, 51, 60, 244, 7, 5, 211, 51, 59, 244, 7, 5, 211, 51, 60, 230, 41, - 211, 51, 59, 230, 41, 211, 51, 60, 230, 41, 5, 211, 51, 59, 230, 41, 5, - 211, 51, 60, 230, 41, 220, 202, 59, 230, 41, 220, 202, 60, 245, 156, 59, - 245, 156, 59, 245, 157, 247, 119, 60, 5, 245, 156, 241, 212, 229, 88, 59, - 247, 233, 244, 21, 247, 233, 247, 234, 2, 79, 241, 234, 249, 81, 60, 247, - 233, 247, 234, 2, 47, 160, 249, 202, 247, 234, 2, 48, 160, 249, 202, 247, - 234, 2, 229, 92, 160, 249, 202, 247, 234, 2, 209, 203, 160, 249, 202, - 247, 234, 2, 209, 203, 48, 219, 209, 249, 202, 247, 234, 2, 252, 157, - 249, 57, 209, 203, 47, 219, 209, 249, 202, 47, 160, 60, 247, 233, 48, - 160, 60, 247, 233, 233, 3, 249, 85, 233, 3, 59, 247, 233, 209, 203, 160, - 233, 3, 59, 247, 233, 229, 92, 160, 233, 3, 59, 247, 233, 209, 203, 47, - 219, 209, 247, 230, 252, 21, 209, 203, 48, 219, 209, 247, 230, 252, 21, - 229, 92, 48, 219, 209, 247, 230, 252, 21, 229, 92, 47, 219, 209, 247, - 230, 252, 21, 209, 203, 160, 247, 233, 229, 92, 160, 247, 233, 60, 229, - 92, 48, 211, 51, 60, 229, 92, 47, 211, 51, 60, 209, 203, 47, 211, 51, 60, - 209, 203, 48, 211, 51, 59, 249, 85, 49, 2, 47, 160, 249, 202, 49, 2, 48, - 160, 249, 202, 49, 2, 209, 203, 47, 245, 163, 160, 249, 202, 49, 2, 229, - 92, 48, 245, 163, 160, 249, 202, 59, 49, 2, 79, 249, 213, 229, 205, 59, - 209, 205, 211, 52, 2, 245, 23, 209, 205, 211, 52, 2, 47, 160, 249, 202, - 209, 205, 211, 52, 2, 48, 160, 249, 202, 230, 86, 247, 233, 59, 49, 2, - 209, 203, 47, 219, 208, 59, 49, 2, 229, 92, 47, 219, 208, 59, 49, 2, 229, - 92, 48, 219, 208, 59, 49, 2, 209, 203, 48, 219, 208, 59, 247, 234, 2, - 209, 203, 47, 219, 208, 59, 247, 234, 2, 229, 92, 47, 219, 208, 59, 247, - 234, 2, 229, 92, 48, 219, 208, 59, 247, 234, 2, 209, 203, 48, 219, 208, - 209, 203, 47, 211, 51, 209, 203, 48, 211, 51, 229, 92, 47, 211, 51, 59, - 227, 109, 214, 107, 60, 227, 109, 214, 107, 59, 227, 109, 5, 214, 107, - 60, 227, 109, 5, 214, 107, 229, 92, 48, 211, 51, 60, 213, 155, 2, 219, - 55, 247, 183, 209, 238, 214, 195, 247, 158, 60, 214, 26, 59, 214, 26, - 229, 220, 211, 226, 213, 154, 251, 228, 224, 64, 245, 210, 224, 64, 247, - 128, 222, 128, 60, 212, 107, 59, 212, 107, 250, 146, 249, 140, 250, 146, - 96, 2, 248, 80, 250, 146, 96, 2, 206, 195, 217, 162, 209, 239, 2, 219, - 84, 243, 243, 238, 63, 250, 4, 59, 215, 153, 221, 45, 60, 215, 153, 221, - 45, 215, 239, 218, 224, 218, 97, 241, 176, 239, 61, 249, 85, 60, 47, 220, - 201, 233, 53, 60, 48, 220, 201, 233, 53, 59, 47, 220, 201, 233, 53, 59, - 120, 220, 201, 233, 53, 59, 48, 220, 201, 233, 53, 59, 130, 220, 201, - 233, 53, 214, 241, 23, 247, 58, 248, 177, 53, 219, 96, 53, 249, 220, 53, - 248, 248, 252, 101, 222, 109, 247, 59, 248, 59, 218, 210, 247, 60, 73, - 229, 106, 247, 60, 73, 232, 172, 214, 27, 23, 247, 65, 242, 42, 93, 252, - 254, 215, 241, 239, 115, 23, 215, 77, 221, 173, 93, 206, 1, 206, 75, 211, - 41, 33, 239, 56, 211, 41, 33, 230, 111, 211, 41, 33, 241, 219, 211, 41, - 33, 211, 227, 211, 41, 33, 207, 9, 211, 41, 33, 207, 69, 211, 41, 33, - 226, 128, 211, 41, 33, 243, 120, 207, 27, 73, 245, 184, 59, 241, 94, 242, - 67, 59, 214, 210, 242, 67, 60, 214, 210, 242, 67, 59, 213, 155, 2, 219, - 55, 241, 215, 219, 205, 226, 144, 230, 81, 219, 205, 226, 144, 227, 78, - 242, 11, 53, 243, 120, 227, 226, 53, 232, 91, 217, 126, 209, 189, 225, - 95, 220, 215, 252, 7, 212, 149, 240, 158, 248, 222, 230, 15, 208, 186, - 229, 232, 217, 96, 217, 183, 248, 208, 252, 38, 220, 250, 59, 248, 65, - 231, 106, 59, 248, 65, 219, 197, 59, 248, 65, 218, 105, 59, 248, 65, 249, - 212, 59, 248, 65, 231, 56, 59, 248, 65, 221, 185, 60, 248, 65, 231, 106, - 60, 248, 65, 219, 197, 60, 248, 65, 218, 105, 60, 248, 65, 249, 212, 60, - 248, 65, 231, 56, 60, 248, 65, 221, 185, 60, 214, 151, 213, 167, 59, 239, - 61, 213, 167, 59, 245, 157, 213, 167, 60, 247, 181, 213, 167, 59, 214, - 151, 213, 167, 60, 239, 61, 213, 167, 60, 245, 157, 213, 167, 59, 247, - 181, 213, 167, 238, 63, 214, 112, 219, 205, 224, 37, 243, 84, 224, 37, - 250, 58, 243, 84, 224, 32, 250, 58, 215, 3, 224, 32, 226, 65, 241, 188, - 53, 226, 65, 225, 192, 53, 226, 65, 215, 228, 53, 207, 36, 213, 30, 247, - 59, 243, 117, 213, 30, 247, 59, 209, 214, 219, 33, 93, 219, 33, 16, 33, - 210, 94, 220, 232, 219, 33, 16, 33, 210, 93, 220, 232, 219, 33, 16, 33, - 210, 92, 220, 232, 219, 33, 16, 33, 210, 91, 220, 232, 219, 33, 16, 33, - 210, 90, 220, 232, 219, 33, 16, 33, 210, 89, 220, 232, 219, 33, 16, 33, - 210, 88, 220, 232, 219, 33, 16, 33, 240, 156, 227, 169, 60, 209, 214, - 219, 33, 93, 219, 34, 221, 235, 93, 221, 208, 221, 235, 93, 221, 123, - 221, 235, 53, 207, 25, 93, 245, 149, 242, 66, 245, 149, 242, 65, 245, - 149, 242, 64, 245, 149, 242, 63, 245, 149, 242, 62, 245, 149, 242, 61, - 59, 247, 234, 2, 67, 218, 167, 59, 247, 234, 2, 118, 245, 21, 60, 247, - 234, 2, 59, 67, 218, 167, 60, 247, 234, 2, 118, 59, 245, 21, 226, 160, - 33, 206, 75, 226, 160, 33, 206, 0, 245, 131, 33, 239, 231, 206, 75, 245, - 131, 33, 230, 8, 206, 0, 245, 131, 33, 230, 8, 206, 75, 245, 131, 33, - 239, 231, 206, 0, 59, 241, 196, 60, 241, 196, 239, 115, 23, 221, 49, 252, - 119, 247, 57, 213, 94, 214, 35, 73, 252, 231, 217, 111, 252, 171, 241, - 172, 240, 167, 214, 35, 73, 239, 34, 251, 192, 93, 241, 184, 222, 89, 59, - 214, 26, 129, 229, 200, 247, 106, 218, 167, 129, 229, 200, 247, 106, 230, - 46, 207, 80, 53, 127, 208, 164, 53, 244, 13, 242, 11, 53, 244, 13, 227, - 226, 53, 233, 13, 242, 11, 23, 227, 226, 53, 227, 226, 23, 242, 11, 53, - 227, 226, 2, 213, 225, 53, 227, 226, 2, 213, 225, 23, 227, 226, 23, 242, - 11, 53, 79, 227, 226, 2, 213, 225, 53, 194, 227, 226, 2, 213, 225, 53, - 227, 109, 59, 247, 233, 227, 109, 60, 247, 233, 227, 109, 5, 59, 247, - 233, 227, 185, 93, 245, 73, 93, 209, 212, 221, 207, 93, 247, 167, 241, - 77, 209, 185, 225, 89, 248, 114, 222, 21, 232, 97, 208, 224, 248, 39, 60, - 226, 145, 229, 217, 216, 13, 216, 49, 219, 187, 216, 31, 214, 190, 250, - 149, 250, 115, 98, 231, 174, 59, 243, 252, 227, 221, 59, 243, 252, 231, - 106, 60, 243, 252, 227, 221, 60, 243, 252, 231, 106, 214, 196, 206, 253, - 214, 199, 213, 155, 250, 35, 247, 183, 219, 83, 60, 214, 195, 211, 228, - 247, 184, 23, 219, 83, 201, 59, 215, 153, 221, 45, 201, 60, 215, 153, - 221, 45, 59, 245, 157, 233, 69, 214, 107, 247, 54, 230, 93, 245, 100, - 248, 204, 222, 131, 221, 49, 248, 205, 214, 226, 239, 44, 2, 59, 247, 59, - 39, 247, 54, 230, 93, 248, 106, 224, 68, 243, 13, 252, 141, 222, 160, 47, - 207, 55, 211, 77, 60, 210, 105, 47, 207, 55, 211, 77, 59, 210, 105, 47, - 207, 55, 211, 77, 60, 47, 230, 94, 227, 77, 59, 47, 230, 94, 227, 77, - 243, 248, 214, 218, 53, 77, 59, 244, 7, 211, 51, 47, 247, 192, 243, 13, - 98, 217, 162, 242, 50, 245, 163, 233, 69, 59, 247, 234, 233, 69, 60, 214, - 107, 60, 211, 17, 218, 235, 47, 243, 12, 218, 235, 47, 243, 11, 251, 204, - 16, 33, 209, 189, 77, 247, 234, 2, 213, 225, 23, 118, 177, 52, 221, 139, - 218, 164, 233, 15, 221, 139, 230, 43, 233, 15, 221, 139, 233, 2, 221, - 139, 60, 247, 60, 222, 166, 215, 180, 215, 168, 215, 120, 248, 6, 248, - 185, 238, 243, 215, 11, 240, 168, 206, 253, 238, 39, 240, 168, 2, 239, - 104, 227, 206, 16, 33, 229, 222, 226, 128, 209, 239, 222, 166, 239, 222, - 241, 126, 241, 197, 233, 69, 238, 140, 242, 2, 217, 178, 49, 241, 125, - 247, 90, 214, 244, 237, 182, 214, 247, 221, 115, 2, 250, 149, 212, 92, - 232, 189, 250, 134, 93, 239, 64, 239, 233, 93, 241, 85, 220, 73, 247, 30, - 222, 166, 60, 214, 107, 59, 241, 197, 2, 194, 226, 247, 60, 213, 226, 60, - 217, 188, 217, 98, 209, 203, 249, 197, 217, 98, 60, 217, 98, 229, 92, - 249, 197, 217, 98, 59, 217, 98, 59, 77, 248, 81, 83, 212, 108, 229, 142, - 53, 212, 165, 243, 247, 252, 194, 243, 8, 219, 81, 241, 208, 219, 81, - 239, 107, 208, 212, 239, 107, 206, 219, 239, 107, 229, 92, 48, 221, 149, - 221, 149, 209, 203, 48, 221, 149, 59, 224, 227, 60, 224, 227, 248, 81, - 83, 77, 248, 81, 83, 226, 94, 206, 195, 77, 226, 94, 206, 195, 250, 146, - 206, 195, 77, 250, 146, 206, 195, 222, 89, 27, 247, 59, 77, 27, 247, 59, - 222, 142, 248, 129, 247, 59, 77, 222, 142, 248, 129, 247, 59, 7, 247, 59, - 215, 246, 59, 7, 247, 59, 222, 89, 7, 247, 59, 227, 223, 247, 59, 214, - 27, 73, 246, 71, 241, 125, 212, 124, 251, 209, 241, 125, 250, 147, 251, - 209, 77, 241, 125, 250, 147, 251, 209, 241, 125, 247, 179, 251, 209, 60, - 241, 125, 220, 203, 214, 26, 59, 241, 125, 220, 203, 214, 26, 214, 146, - 213, 233, 222, 89, 59, 214, 26, 39, 59, 214, 26, 222, 142, 248, 129, 60, - 214, 26, 60, 248, 129, 59, 214, 26, 222, 89, 60, 214, 26, 77, 222, 89, - 60, 214, 26, 221, 4, 214, 26, 215, 246, 59, 214, 26, 77, 251, 209, 222, - 142, 248, 129, 251, 209, 243, 88, 214, 119, 251, 209, 243, 88, 220, 203, - 60, 214, 26, 243, 88, 220, 203, 221, 4, 214, 26, 215, 10, 220, 203, 60, - 214, 26, 243, 88, 220, 203, 219, 35, 60, 214, 26, 77, 243, 88, 220, 203, - 219, 35, 60, 214, 26, 210, 127, 220, 203, 60, 214, 26, 215, 5, 220, 203, - 251, 209, 212, 124, 251, 209, 222, 142, 248, 129, 212, 124, 251, 209, 77, - 212, 124, 251, 209, 215, 10, 221, 103, 60, 23, 59, 241, 175, 60, 241, - 175, 59, 241, 175, 243, 88, 221, 103, 222, 89, 60, 241, 175, 39, 222, - 142, 248, 129, 243, 88, 220, 203, 214, 26, 77, 212, 124, 221, 4, 251, - 209, 214, 197, 211, 197, 211, 44, 214, 197, 77, 248, 62, 214, 197, 214, - 148, 77, 214, 148, 250, 147, 251, 209, 243, 88, 212, 124, 220, 104, 251, - 209, 77, 243, 88, 212, 124, 220, 104, 251, 209, 247, 60, 83, 215, 246, - 59, 247, 233, 170, 98, 247, 60, 83, 229, 92, 48, 243, 245, 59, 214, 107, - 209, 203, 48, 243, 245, 59, 214, 107, 229, 92, 48, 215, 246, 59, 214, - 107, 209, 203, 48, 215, 246, 59, 214, 107, 60, 219, 196, 141, 222, 111, - 59, 219, 196, 141, 222, 111, 59, 242, 168, 141, 222, 111, 60, 245, 157, - 226, 202, 59, 206, 195, 77, 242, 168, 141, 93, 147, 79, 134, 227, 109, - 79, 134, 77, 79, 134, 77, 215, 41, 201, 247, 156, 219, 180, 141, 222, - 111, 77, 215, 41, 247, 156, 219, 180, 141, 222, 111, 77, 50, 201, 247, - 156, 219, 180, 141, 222, 111, 77, 50, 247, 156, 219, 180, 141, 222, 111, - 77, 114, 215, 41, 247, 156, 219, 180, 141, 222, 111, 77, 114, 50, 247, - 156, 219, 180, 141, 222, 111, 247, 18, 214, 10, 221, 229, 3, 222, 111, - 77, 242, 168, 141, 222, 111, 77, 239, 61, 242, 168, 141, 222, 111, 77, - 60, 239, 60, 218, 97, 77, 60, 239, 61, 249, 85, 241, 176, 239, 60, 218, - 97, 241, 176, 239, 61, 249, 85, 227, 109, 47, 221, 217, 222, 111, 227, - 109, 48, 221, 217, 222, 111, 227, 109, 241, 185, 47, 221, 217, 222, 111, - 227, 109, 241, 185, 48, 221, 217, 222, 111, 227, 109, 230, 41, 252, 109, - 249, 134, 222, 111, 227, 109, 218, 162, 252, 109, 249, 134, 222, 111, 77, - 230, 41, 252, 109, 219, 180, 141, 222, 111, 77, 218, 162, 252, 109, 219, - 180, 141, 222, 111, 77, 230, 41, 252, 109, 249, 134, 222, 111, 77, 218, - 162, 252, 109, 249, 134, 222, 111, 147, 47, 211, 93, 215, 204, 249, 134, - 222, 111, 147, 48, 211, 93, 215, 204, 249, 134, 222, 111, 227, 109, 47, - 247, 26, 249, 134, 222, 111, 227, 109, 48, 247, 26, 249, 134, 222, 111, - 245, 111, 170, 39, 18, 102, 245, 111, 170, 39, 18, 105, 245, 111, 170, - 39, 18, 142, 245, 111, 170, 39, 18, 139, 245, 111, 170, 39, 18, 168, 245, - 111, 170, 39, 18, 184, 245, 111, 170, 39, 18, 195, 245, 111, 170, 39, 18, - 193, 245, 111, 170, 39, 18, 200, 245, 111, 170, 39, 43, 212, 98, 245, - 111, 39, 38, 18, 102, 245, 111, 39, 38, 18, 105, 245, 111, 39, 38, 18, - 142, 245, 111, 39, 38, 18, 139, 245, 111, 39, 38, 18, 168, 245, 111, 39, - 38, 18, 184, 245, 111, 39, 38, 18, 195, 245, 111, 39, 38, 18, 193, 245, - 111, 39, 38, 18, 200, 245, 111, 39, 38, 43, 212, 98, 245, 111, 170, 39, - 38, 18, 102, 245, 111, 170, 39, 38, 18, 105, 245, 111, 170, 39, 38, 18, - 142, 245, 111, 170, 39, 38, 18, 139, 245, 111, 170, 39, 38, 18, 168, 245, - 111, 170, 39, 38, 18, 184, 245, 111, 170, 39, 38, 18, 195, 245, 111, 170, - 39, 38, 18, 193, 245, 111, 170, 39, 38, 18, 200, 245, 111, 170, 39, 38, - 43, 212, 98, 77, 207, 16, 86, 45, 77, 101, 53, 77, 226, 202, 53, 77, 245, - 75, 53, 77, 188, 243, 117, 45, 77, 86, 45, 77, 143, 243, 117, 45, 244, 1, - 220, 205, 86, 45, 77, 218, 94, 86, 45, 211, 50, 86, 45, 77, 211, 50, 86, - 45, 246, 77, 211, 50, 86, 45, 77, 246, 77, 211, 50, 86, 45, 60, 86, 45, - 211, 238, 211, 100, 86, 251, 243, 211, 238, 249, 152, 86, 251, 243, 60, - 86, 251, 243, 77, 60, 247, 18, 173, 23, 86, 45, 77, 60, 247, 18, 167, 23, - 86, 45, 214, 104, 60, 86, 45, 77, 247, 139, 60, 86, 45, 218, 161, 59, 86, - 45, 230, 40, 59, 86, 45, 250, 175, 215, 246, 59, 86, 45, 241, 96, 215, - 246, 59, 86, 45, 77, 229, 92, 218, 160, 59, 86, 45, 77, 209, 203, 218, - 160, 59, 86, 45, 224, 39, 229, 92, 218, 160, 59, 86, 45, 247, 26, 229, - 111, 224, 39, 209, 203, 218, 160, 59, 86, 45, 39, 77, 59, 86, 45, 207, - 22, 86, 45, 249, 201, 188, 243, 117, 45, 249, 201, 86, 45, 249, 201, 143, - 243, 117, 45, 77, 249, 201, 188, 243, 117, 45, 77, 249, 201, 86, 45, 77, - 249, 201, 143, 243, 117, 45, 212, 126, 86, 45, 77, 212, 125, 86, 45, 207, - 46, 86, 45, 77, 207, 46, 86, 45, 222, 137, 86, 45, 50, 247, 26, 229, 111, - 129, 245, 121, 252, 108, 59, 211, 52, 247, 119, 5, 59, 211, 51, 221, 118, - 222, 142, 213, 181, 222, 142, 213, 137, 47, 218, 0, 250, 164, 245, 233, - 48, 218, 0, 250, 164, 245, 233, 222, 123, 2, 67, 233, 25, 218, 225, 214, - 181, 220, 138, 213, 181, 213, 138, 220, 138, 214, 180, 79, 250, 129, 2, - 194, 91, 11, 218, 142, 245, 162, 152, 245, 74, 11, 242, 50, 245, 162, 98, - 229, 134, 252, 117, 98, 229, 134, 222, 122, 59, 245, 157, 2, 248, 127, - 245, 23, 23, 2, 245, 23, 243, 61, 73, 222, 135, 209, 196, 229, 92, 48, - 247, 92, 2, 245, 23, 209, 203, 47, 247, 92, 2, 245, 23, 47, 222, 91, 232, - 120, 48, 222, 91, 232, 120, 241, 82, 222, 91, 232, 120, 230, 86, 120, - 212, 201, 230, 86, 130, 212, 201, 47, 23, 48, 50, 210, 143, 47, 23, 48, - 212, 201, 47, 226, 97, 152, 48, 212, 201, 152, 47, 212, 201, 120, 212, - 202, 2, 247, 234, 52, 229, 89, 245, 80, 249, 46, 194, 218, 42, 59, 247, - 138, 245, 156, 59, 247, 138, 245, 157, 2, 92, 211, 207, 59, 247, 138, - 245, 157, 2, 86, 211, 207, 59, 49, 2, 92, 211, 207, 59, 49, 2, 86, 211, - 207, 11, 47, 59, 49, 145, 11, 48, 59, 49, 145, 11, 47, 252, 109, 145, 11, - 48, 252, 109, 145, 11, 47, 50, 252, 109, 145, 11, 48, 50, 252, 109, 145, - 11, 47, 59, 211, 93, 215, 204, 145, 11, 48, 59, 211, 93, 215, 204, 145, - 11, 47, 241, 185, 221, 216, 11, 48, 241, 185, 221, 216, 167, 219, 207, - 45, 173, 219, 207, 45, 252, 87, 240, 206, 247, 234, 45, 247, 194, 240, - 206, 247, 234, 45, 48, 51, 2, 39, 220, 218, 152, 92, 45, 152, 86, 45, - 152, 47, 48, 45, 152, 92, 50, 45, 152, 86, 50, 45, 152, 47, 48, 50, 45, - 152, 92, 51, 241, 98, 134, 152, 86, 51, 241, 98, 134, 152, 92, 50, 51, - 241, 98, 134, 152, 86, 50, 51, 241, 98, 134, 152, 86, 214, 103, 45, 56, - 57, 249, 195, 56, 57, 245, 20, 56, 57, 244, 148, 56, 57, 245, 19, 56, 57, - 244, 84, 56, 57, 244, 211, 56, 57, 244, 147, 56, 57, 245, 18, 56, 57, - 244, 52, 56, 57, 244, 179, 56, 57, 244, 115, 56, 57, 244, 242, 56, 57, - 244, 83, 56, 57, 244, 210, 56, 57, 244, 146, 56, 57, 245, 17, 56, 57, - 244, 36, 56, 57, 244, 163, 56, 57, 244, 99, 56, 57, 244, 226, 56, 57, - 244, 67, 56, 57, 244, 194, 56, 57, 244, 130, 56, 57, 245, 1, 56, 57, 244, - 51, 56, 57, 244, 178, 56, 57, 244, 114, 56, 57, 244, 241, 56, 57, 244, - 82, 56, 57, 244, 209, 56, 57, 244, 145, 56, 57, 245, 16, 56, 57, 244, 28, - 56, 57, 244, 155, 56, 57, 244, 91, 56, 57, 244, 218, 56, 57, 244, 59, 56, - 57, 244, 186, 56, 57, 244, 122, 56, 57, 244, 249, 56, 57, 244, 43, 56, - 57, 244, 170, 56, 57, 244, 106, 56, 57, 244, 233, 56, 57, 244, 74, 56, - 57, 244, 201, 56, 57, 244, 137, 56, 57, 245, 8, 56, 57, 244, 35, 56, 57, - 244, 162, 56, 57, 244, 98, 56, 57, 244, 225, 56, 57, 244, 66, 56, 57, - 244, 193, 56, 57, 244, 129, 56, 57, 245, 0, 56, 57, 244, 50, 56, 57, 244, - 177, 56, 57, 244, 113, 56, 57, 244, 240, 56, 57, 244, 81, 56, 57, 244, - 208, 56, 57, 244, 144, 56, 57, 245, 15, 56, 57, 244, 24, 56, 57, 244, - 151, 56, 57, 244, 87, 56, 57, 244, 214, 56, 57, 244, 55, 56, 57, 244, - 182, 56, 57, 244, 118, 56, 57, 244, 245, 56, 57, 244, 39, 56, 57, 244, - 166, 56, 57, 244, 102, 56, 57, 244, 229, 56, 57, 244, 70, 56, 57, 244, - 197, 56, 57, 244, 133, 56, 57, 245, 4, 56, 57, 244, 31, 56, 57, 244, 158, - 56, 57, 244, 94, 56, 57, 244, 221, 56, 57, 244, 62, 56, 57, 244, 189, 56, - 57, 244, 125, 56, 57, 244, 252, 56, 57, 244, 46, 56, 57, 244, 173, 56, - 57, 244, 109, 56, 57, 244, 236, 56, 57, 244, 77, 56, 57, 244, 204, 56, - 57, 244, 140, 56, 57, 245, 11, 56, 57, 244, 27, 56, 57, 244, 154, 56, 57, - 244, 90, 56, 57, 244, 217, 56, 57, 244, 58, 56, 57, 244, 185, 56, 57, - 244, 121, 56, 57, 244, 248, 56, 57, 244, 42, 56, 57, 244, 169, 56, 57, - 244, 105, 56, 57, 244, 232, 56, 57, 244, 73, 56, 57, 244, 200, 56, 57, - 244, 136, 56, 57, 245, 7, 56, 57, 244, 34, 56, 57, 244, 161, 56, 57, 244, - 97, 56, 57, 244, 224, 56, 57, 244, 65, 56, 57, 244, 192, 56, 57, 244, - 128, 56, 57, 244, 255, 56, 57, 244, 49, 56, 57, 244, 176, 56, 57, 244, - 112, 56, 57, 244, 239, 56, 57, 244, 80, 56, 57, 244, 207, 56, 57, 244, - 143, 56, 57, 245, 14, 56, 57, 244, 22, 56, 57, 244, 149, 56, 57, 244, 85, - 56, 57, 244, 212, 56, 57, 244, 53, 56, 57, 244, 180, 56, 57, 244, 116, - 56, 57, 244, 243, 56, 57, 244, 37, 56, 57, 244, 164, 56, 57, 244, 100, - 56, 57, 244, 227, 56, 57, 244, 68, 56, 57, 244, 195, 56, 57, 244, 131, - 56, 57, 245, 2, 56, 57, 244, 29, 56, 57, 244, 156, 56, 57, 244, 92, 56, - 57, 244, 219, 56, 57, 244, 60, 56, 57, 244, 187, 56, 57, 244, 123, 56, - 57, 244, 250, 56, 57, 244, 44, 56, 57, 244, 171, 56, 57, 244, 107, 56, - 57, 244, 234, 56, 57, 244, 75, 56, 57, 244, 202, 56, 57, 244, 138, 56, - 57, 245, 9, 56, 57, 244, 25, 56, 57, 244, 152, 56, 57, 244, 88, 56, 57, - 244, 215, 56, 57, 244, 56, 56, 57, 244, 183, 56, 57, 244, 119, 56, 57, - 244, 246, 56, 57, 244, 40, 56, 57, 244, 167, 56, 57, 244, 103, 56, 57, - 244, 230, 56, 57, 244, 71, 56, 57, 244, 198, 56, 57, 244, 134, 56, 57, - 245, 5, 56, 57, 244, 32, 56, 57, 244, 159, 56, 57, 244, 95, 56, 57, 244, - 222, 56, 57, 244, 63, 56, 57, 244, 190, 56, 57, 244, 126, 56, 57, 244, - 253, 56, 57, 244, 47, 56, 57, 244, 174, 56, 57, 244, 110, 56, 57, 244, - 237, 56, 57, 244, 78, 56, 57, 244, 205, 56, 57, 244, 141, 56, 57, 245, - 12, 56, 57, 244, 23, 56, 57, 244, 150, 56, 57, 244, 86, 56, 57, 244, 213, - 56, 57, 244, 54, 56, 57, 244, 181, 56, 57, 244, 117, 56, 57, 244, 244, - 56, 57, 244, 38, 56, 57, 244, 165, 56, 57, 244, 101, 56, 57, 244, 228, - 56, 57, 244, 69, 56, 57, 244, 196, 56, 57, 244, 132, 56, 57, 245, 3, 56, - 57, 244, 30, 56, 57, 244, 157, 56, 57, 244, 93, 56, 57, 244, 220, 56, 57, - 244, 61, 56, 57, 244, 188, 56, 57, 244, 124, 56, 57, 244, 251, 56, 57, - 244, 45, 56, 57, 244, 172, 56, 57, 244, 108, 56, 57, 244, 235, 56, 57, - 244, 76, 56, 57, 244, 203, 56, 57, 244, 139, 56, 57, 245, 10, 56, 57, - 244, 26, 56, 57, 244, 153, 56, 57, 244, 89, 56, 57, 244, 216, 56, 57, - 244, 57, 56, 57, 244, 184, 56, 57, 244, 120, 56, 57, 244, 247, 56, 57, - 244, 41, 56, 57, 244, 168, 56, 57, 244, 104, 56, 57, 244, 231, 56, 57, - 244, 72, 56, 57, 244, 199, 56, 57, 244, 135, 56, 57, 245, 6, 56, 57, 244, - 33, 56, 57, 244, 160, 56, 57, 244, 96, 56, 57, 244, 223, 56, 57, 244, 64, - 56, 57, 244, 191, 56, 57, 244, 127, 56, 57, 244, 254, 56, 57, 244, 48, - 56, 57, 244, 175, 56, 57, 244, 111, 56, 57, 244, 238, 56, 57, 244, 79, - 56, 57, 244, 206, 56, 57, 244, 142, 56, 57, 245, 13, 86, 210, 108, 51, 2, - 79, 91, 86, 210, 108, 51, 2, 50, 79, 91, 92, 50, 51, 2, 79, 91, 86, 50, - 51, 2, 79, 91, 47, 48, 50, 51, 2, 79, 91, 86, 210, 108, 51, 241, 98, 134, - 92, 50, 51, 241, 98, 134, 86, 50, 51, 241, 98, 134, 173, 51, 2, 194, 91, - 167, 51, 2, 194, 91, 167, 211, 36, 45, 173, 211, 36, 45, 92, 50, 246, 79, - 45, 86, 50, 246, 79, 45, 92, 211, 36, 246, 79, 45, 86, 211, 36, 246, 79, - 45, 86, 210, 108, 211, 36, 246, 79, 45, 86, 51, 2, 244, 21, 214, 9, 167, - 51, 211, 130, 134, 173, 51, 211, 130, 134, 86, 51, 2, 212, 192, 2, 79, - 91, 86, 51, 2, 212, 192, 2, 50, 79, 91, 86, 210, 108, 51, 2, 212, 191, - 86, 210, 108, 51, 2, 212, 192, 2, 79, 91, 86, 210, 108, 51, 2, 212, 192, - 2, 50, 79, 91, 92, 251, 245, 86, 251, 245, 92, 50, 251, 245, 86, 50, 251, - 245, 92, 51, 211, 130, 60, 245, 156, 86, 51, 211, 130, 60, 245, 156, 92, - 51, 241, 98, 250, 129, 211, 130, 60, 245, 156, 86, 51, 241, 98, 250, 129, - 211, 130, 60, 245, 156, 143, 207, 36, 23, 188, 243, 117, 45, 143, 243, - 117, 23, 188, 207, 36, 45, 143, 207, 36, 51, 2, 109, 143, 243, 117, 51, - 2, 109, 188, 243, 117, 51, 2, 109, 188, 207, 36, 51, 2, 109, 143, 207, - 36, 51, 23, 143, 243, 117, 45, 143, 243, 117, 51, 23, 188, 243, 117, 45, - 188, 243, 117, 51, 23, 188, 207, 36, 45, 188, 207, 36, 51, 23, 143, 207, - 36, 45, 218, 142, 245, 163, 247, 54, 242, 50, 245, 162, 242, 50, 245, - 163, 247, 54, 218, 142, 245, 162, 188, 243, 117, 51, 247, 54, 143, 243, - 117, 45, 143, 243, 117, 51, 247, 54, 188, 243, 117, 45, 242, 50, 245, - 163, 247, 54, 143, 243, 117, 45, 218, 142, 245, 163, 247, 54, 188, 243, - 117, 45, 143, 243, 117, 51, 247, 54, 143, 207, 36, 45, 143, 207, 36, 51, - 247, 54, 143, 243, 117, 45, 207, 65, 51, 220, 201, 245, 102, 218, 167, - 51, 220, 201, 86, 212, 33, 247, 17, 209, 196, 51, 220, 201, 86, 212, 33, - 247, 17, 244, 6, 51, 220, 201, 173, 212, 33, 247, 17, 230, 36, 51, 220, - 201, 173, 212, 33, 247, 17, 218, 156, 218, 159, 252, 22, 247, 194, 45, - 230, 39, 252, 22, 252, 87, 45, 211, 102, 252, 22, 252, 87, 45, 249, 154, - 252, 22, 252, 87, 45, 211, 102, 252, 22, 247, 194, 51, 2, 226, 201, 211, - 102, 252, 22, 252, 87, 51, 2, 220, 218, 229, 92, 48, 216, 54, 247, 194, - 45, 229, 92, 47, 216, 54, 252, 87, 45, 252, 87, 247, 192, 247, 234, 45, - 247, 194, 247, 192, 247, 234, 45, 86, 51, 84, 215, 144, 92, 45, 92, 51, - 84, 215, 144, 86, 45, 215, 144, 86, 51, 84, 92, 45, 86, 51, 2, 101, 55, - 92, 51, 2, 101, 55, 86, 51, 211, 233, 206, 195, 47, 48, 51, 211, 233, 5, - 247, 233, 167, 210, 108, 51, 241, 98, 5, 247, 233, 47, 138, 120, 48, 138, - 130, 239, 89, 47, 138, 130, 48, 138, 120, 239, 89, 120, 138, 48, 130, - 138, 47, 239, 89, 120, 138, 47, 130, 138, 48, 239, 89, 47, 138, 120, 48, - 138, 120, 239, 89, 120, 138, 48, 130, 138, 48, 239, 89, 47, 138, 130, 48, - 138, 130, 239, 89, 120, 138, 47, 130, 138, 47, 239, 89, 92, 239, 90, 2, - 138, 120, 211, 130, 134, 86, 239, 90, 2, 138, 120, 211, 130, 134, 167, - 239, 90, 2, 138, 48, 211, 130, 134, 173, 239, 90, 2, 138, 48, 211, 130, - 134, 92, 239, 90, 2, 138, 130, 211, 130, 134, 86, 239, 90, 2, 138, 130, - 211, 130, 134, 167, 239, 90, 2, 138, 47, 211, 130, 134, 173, 239, 90, 2, - 138, 47, 211, 130, 134, 92, 239, 90, 2, 138, 120, 241, 98, 134, 86, 239, - 90, 2, 138, 120, 241, 98, 134, 167, 239, 90, 2, 138, 48, 241, 98, 134, - 173, 239, 90, 2, 138, 48, 241, 98, 134, 92, 239, 90, 2, 138, 130, 241, - 98, 134, 86, 239, 90, 2, 138, 130, 241, 98, 134, 167, 239, 90, 2, 138, - 47, 241, 98, 134, 173, 239, 90, 2, 138, 47, 241, 98, 134, 92, 239, 90, 2, - 138, 120, 84, 92, 239, 90, 2, 138, 244, 8, 167, 239, 90, 2, 138, 47, 250, - 12, 167, 239, 90, 2, 138, 218, 167, 86, 239, 90, 2, 138, 120, 84, 86, - 239, 90, 2, 138, 244, 8, 173, 239, 90, 2, 138, 47, 250, 12, 173, 239, 90, - 2, 138, 218, 167, 92, 239, 90, 2, 138, 120, 84, 86, 239, 90, 2, 138, 209, - 206, 92, 239, 90, 2, 138, 130, 84, 86, 239, 90, 2, 138, 244, 8, 86, 239, - 90, 2, 138, 120, 84, 92, 239, 90, 2, 138, 209, 206, 86, 239, 90, 2, 138, - 130, 84, 92, 239, 90, 2, 138, 244, 8, 92, 239, 90, 2, 138, 120, 84, 152, - 246, 78, 92, 239, 90, 2, 138, 130, 250, 26, 152, 246, 78, 86, 239, 90, 2, - 138, 120, 84, 152, 246, 78, 86, 239, 90, 2, 138, 130, 250, 26, 152, 246, - 78, 167, 239, 90, 2, 138, 47, 250, 12, 173, 239, 90, 2, 138, 218, 167, - 173, 239, 90, 2, 138, 47, 250, 12, 167, 239, 90, 2, 138, 218, 167, 48, - 50, 51, 2, 218, 93, 239, 68, 242, 242, 3, 84, 86, 45, 211, 181, 222, 133, - 84, 86, 45, 92, 51, 84, 211, 181, 222, 132, 86, 51, 84, 211, 181, 222, - 132, 86, 51, 84, 252, 149, 146, 124, 230, 10, 84, 92, 45, 92, 51, 211, - 233, 230, 9, 239, 230, 84, 86, 45, 213, 182, 84, 86, 45, 92, 51, 211, - 233, 213, 181, 213, 138, 84, 92, 45, 47, 241, 214, 212, 191, 48, 241, - 214, 212, 191, 120, 241, 214, 212, 191, 130, 241, 214, 212, 191, 211, 36, - 79, 250, 129, 245, 233, 205, 160, 224, 41, 214, 116, 205, 160, 224, 41, - 210, 95, 247, 162, 47, 59, 247, 26, 145, 48, 59, 247, 26, 145, 47, 59, - 221, 216, 48, 59, 221, 216, 205, 160, 224, 41, 47, 233, 84, 145, 205, - 160, 224, 41, 48, 233, 84, 145, 205, 160, 224, 41, 47, 249, 223, 145, - 205, 160, 224, 41, 48, 249, 223, 145, 47, 49, 249, 134, 2, 209, 226, 48, - 49, 249, 134, 2, 209, 226, 47, 49, 249, 134, 2, 211, 208, 233, 69, 211, - 102, 247, 91, 48, 49, 249, 134, 2, 211, 208, 233, 69, 249, 154, 247, 91, - 47, 49, 249, 134, 2, 211, 208, 233, 69, 249, 154, 247, 91, 48, 49, 249, - 134, 2, 211, 208, 233, 69, 211, 102, 247, 91, 47, 252, 109, 249, 134, 2, - 245, 23, 48, 252, 109, 249, 134, 2, 245, 23, 47, 252, 22, 230, 10, 145, - 48, 252, 22, 239, 230, 145, 50, 47, 252, 22, 239, 230, 145, 50, 48, 252, - 22, 230, 10, 145, 47, 60, 211, 93, 215, 204, 145, 48, 60, 211, 93, 215, - 204, 145, 244, 21, 242, 8, 79, 205, 31, 229, 205, 227, 116, 252, 109, - 222, 135, 230, 46, 48, 252, 109, 209, 53, 2, 214, 107, 227, 116, 48, 252, - 109, 2, 245, 23, 252, 109, 2, 218, 1, 233, 25, 253, 9, 252, 108, 214, - 133, 252, 109, 222, 135, 230, 46, 214, 133, 252, 109, 222, 135, 209, 206, - 201, 252, 108, 218, 224, 252, 108, 252, 109, 2, 209, 226, 218, 224, 252, - 109, 2, 209, 226, 222, 222, 252, 109, 222, 135, 209, 206, 222, 222, 252, - 109, 222, 135, 244, 8, 227, 116, 252, 109, 2, 222, 142, 252, 0, 243, 31, - 233, 69, 51, 220, 201, 120, 23, 218, 167, 227, 116, 252, 109, 2, 222, - 142, 252, 0, 243, 31, 233, 69, 51, 220, 201, 120, 23, 230, 46, 227, 116, - 252, 109, 2, 222, 142, 252, 0, 243, 31, 233, 69, 51, 220, 201, 130, 23, - 218, 167, 227, 116, 252, 109, 2, 222, 142, 252, 0, 243, 31, 233, 69, 51, - 220, 201, 130, 23, 230, 46, 227, 116, 252, 109, 2, 222, 142, 252, 0, 243, - 31, 233, 69, 51, 220, 201, 48, 23, 209, 206, 227, 116, 252, 109, 2, 222, - 142, 252, 0, 243, 31, 233, 69, 51, 220, 201, 47, 23, 209, 206, 227, 116, - 252, 109, 2, 222, 142, 252, 0, 243, 31, 233, 69, 51, 220, 201, 48, 23, - 244, 8, 227, 116, 252, 109, 2, 222, 142, 252, 0, 243, 31, 233, 69, 51, - 220, 201, 47, 23, 244, 8, 218, 224, 243, 43, 216, 28, 243, 43, 216, 29, - 2, 222, 86, 243, 43, 216, 29, 2, 5, 247, 234, 52, 243, 43, 216, 29, 2, - 48, 51, 52, 243, 43, 216, 29, 2, 47, 51, 52, 247, 234, 2, 194, 134, 39, - 79, 134, 39, 221, 221, 39, 218, 225, 214, 180, 39, 221, 118, 247, 234, - 245, 80, 249, 46, 194, 250, 129, 23, 211, 102, 160, 245, 80, 249, 46, 79, - 134, 247, 234, 2, 213, 140, 206, 195, 39, 252, 85, 245, 75, 53, 120, 51, - 211, 233, 247, 233, 39, 59, 249, 85, 39, 249, 85, 39, 230, 9, 39, 239, - 229, 247, 234, 2, 5, 247, 234, 211, 130, 212, 42, 218, 167, 247, 234, 2, - 118, 194, 213, 213, 211, 130, 212, 42, 218, 167, 98, 218, 142, 245, 163, - 214, 235, 98, 242, 50, 245, 163, 214, 235, 98, 251, 209, 98, 5, 247, 233, - 98, 214, 107, 118, 232, 119, 214, 105, 211, 52, 2, 67, 52, 211, 52, 2, - 209, 226, 218, 1, 233, 69, 211, 51, 211, 52, 2, 216, 35, 251, 200, 249, - 153, 48, 211, 52, 84, 47, 211, 51, 47, 211, 52, 250, 12, 79, 134, 79, - 250, 129, 250, 12, 48, 211, 51, 249, 142, 2, 47, 160, 249, 202, 249, 142, - 2, 48, 160, 249, 202, 60, 249, 141, 29, 2, 47, 160, 249, 202, 29, 2, 48, - 160, 249, 202, 59, 238, 56, 60, 238, 56, 47, 207, 14, 242, 8, 48, 207, - 14, 242, 8, 47, 50, 207, 14, 242, 8, 48, 50, 207, 14, 242, 8, 233, 61, - 233, 45, 211, 204, 131, 233, 45, 233, 46, 225, 105, 2, 79, 134, 244, 15, - 226, 97, 49, 2, 247, 112, 222, 90, 233, 58, 251, 231, 215, 110, 220, 115, - 242, 242, 3, 23, 214, 237, 221, 221, 242, 242, 3, 23, 214, 237, 221, 222, - 2, 211, 181, 52, 237, 173, 211, 130, 23, 214, 237, 221, 221, 240, 28, - 214, 25, 212, 30, 244, 7, 211, 52, 2, 47, 160, 249, 202, 244, 7, 211, 52, - 2, 48, 160, 249, 202, 60, 245, 157, 2, 130, 45, 60, 229, 88, 59, 247, - 234, 2, 130, 45, 60, 247, 234, 2, 130, 45, 242, 228, 59, 214, 107, 242, - 228, 60, 214, 107, 242, 228, 59, 245, 156, 242, 228, 60, 245, 156, 242, - 228, 59, 247, 233, 242, 228, 60, 247, 233, 218, 41, 218, 225, 214, 181, - 222, 132, 214, 181, 2, 222, 86, 218, 225, 214, 181, 2, 194, 91, 249, 231, - 214, 180, 249, 231, 218, 225, 214, 180, 50, 220, 218, 211, 36, 220, 218, - 230, 41, 247, 18, 252, 109, 145, 218, 162, 247, 18, 252, 109, 145, 211, - 168, 226, 199, 226, 32, 39, 67, 222, 132, 226, 32, 39, 101, 222, 132, - 226, 32, 39, 29, 222, 132, 226, 32, 209, 219, 222, 133, 2, 245, 23, 226, - 32, 209, 219, 222, 133, 2, 220, 218, 226, 32, 49, 233, 8, 222, 132, 226, - 32, 49, 209, 219, 222, 132, 118, 229, 134, 23, 222, 132, 118, 229, 134, - 222, 123, 222, 132, 226, 32, 29, 222, 132, 226, 172, 118, 213, 160, 213, - 158, 2, 233, 21, 219, 207, 233, 22, 222, 132, 241, 222, 221, 211, 233, - 21, 233, 22, 2, 50, 91, 233, 22, 251, 165, 2, 214, 235, 247, 229, 241, - 79, 252, 87, 233, 19, 229, 206, 233, 20, 2, 219, 36, 221, 192, 251, 253, - 220, 195, 229, 206, 233, 20, 2, 216, 54, 221, 192, 251, 253, 220, 195, - 229, 206, 233, 20, 224, 43, 233, 63, 212, 42, 220, 195, 233, 22, 251, - 253, 32, 220, 205, 222, 132, 219, 201, 233, 22, 222, 132, 233, 22, 2, 92, - 51, 2, 109, 233, 22, 2, 29, 53, 233, 22, 2, 233, 7, 233, 22, 2, 209, 218, - 233, 22, 2, 222, 86, 233, 22, 2, 209, 226, 232, 120, 230, 86, 47, 211, - 52, 222, 132, 205, 160, 224, 41, 217, 106, 247, 145, 205, 160, 224, 41, - 217, 106, 221, 0, 205, 160, 224, 41, 217, 106, 220, 110, 101, 3, 2, 5, - 247, 234, 52, 101, 3, 2, 247, 228, 253, 22, 52, 101, 3, 2, 211, 181, 52, - 101, 3, 2, 67, 55, 101, 3, 2, 211, 181, 55, 101, 3, 2, 213, 183, 105, - 101, 3, 2, 60, 211, 51, 226, 202, 3, 2, 247, 156, 52, 226, 202, 3, 2, 67, - 55, 226, 202, 3, 2, 242, 50, 245, 21, 226, 202, 3, 2, 218, 142, 245, 21, - 101, 3, 233, 69, 47, 160, 247, 233, 101, 3, 233, 69, 48, 160, 247, 233, - 209, 38, 222, 123, 247, 60, 220, 115, 226, 94, 3, 2, 67, 52, 226, 94, 3, - 2, 209, 226, 216, 51, 220, 116, 2, 249, 154, 247, 191, 214, 213, 220, - 115, 226, 94, 3, 233, 69, 47, 160, 247, 233, 226, 94, 3, 233, 69, 48, - 160, 247, 233, 39, 226, 94, 3, 2, 247, 228, 253, 21, 226, 94, 3, 233, 69, - 50, 247, 233, 39, 245, 75, 53, 101, 3, 233, 69, 211, 51, 226, 202, 3, - 233, 69, 211, 51, 226, 94, 3, 233, 69, 211, 51, 233, 16, 220, 115, 218, - 157, 233, 16, 220, 115, 205, 160, 224, 41, 219, 10, 247, 145, 252, 134, - 222, 123, 247, 96, 233, 8, 2, 245, 23, 209, 219, 2, 226, 202, 53, 209, - 219, 2, 222, 86, 233, 8, 2, 222, 86, 233, 8, 2, 229, 134, 252, 117, 209, - 219, 2, 229, 134, 222, 122, 209, 219, 84, 233, 7, 233, 8, 84, 209, 218, - 209, 219, 84, 250, 129, 84, 233, 7, 233, 8, 84, 250, 129, 84, 209, 218, - 209, 219, 250, 12, 23, 232, 119, 2, 209, 218, 233, 8, 250, 12, 23, 232, - 119, 2, 233, 7, 247, 192, 209, 219, 2, 216, 34, 247, 192, 233, 8, 2, 216, - 34, 50, 49, 233, 7, 50, 49, 209, 218, 247, 192, 209, 219, 2, 216, 35, 23, - 214, 213, 220, 115, 229, 134, 23, 2, 67, 52, 229, 134, 222, 123, 2, 67, - 52, 50, 229, 134, 252, 117, 50, 229, 134, 222, 122, 118, 233, 9, 229, - 134, 252, 117, 118, 233, 9, 229, 134, 222, 122, 214, 221, 230, 86, 222, - 122, 214, 221, 230, 86, 252, 117, 229, 134, 222, 123, 222, 83, 229, 134, - 252, 117, 229, 134, 23, 2, 226, 247, 214, 9, 229, 134, 222, 123, 2, 226, - 247, 214, 9, 229, 134, 23, 2, 194, 246, 78, 229, 134, 222, 123, 2, 194, - 246, 78, 229, 134, 23, 2, 50, 222, 86, 229, 134, 23, 2, 209, 226, 229, - 134, 23, 2, 50, 209, 226, 5, 209, 35, 2, 209, 226, 229, 134, 222, 123, 2, - 50, 222, 86, 229, 134, 222, 123, 2, 50, 209, 226, 205, 160, 224, 41, 245, - 32, 252, 77, 205, 160, 224, 41, 219, 72, 252, 77, 242, 242, 3, 2, 67, 55, - 237, 173, 2, 67, 52, 211, 36, 194, 250, 129, 2, 50, 79, 91, 211, 36, 194, - 250, 129, 2, 211, 36, 79, 91, 211, 181, 222, 133, 2, 67, 52, 211, 181, - 222, 133, 2, 218, 142, 245, 21, 215, 48, 226, 202, 215, 47, 247, 132, 2, - 67, 52, 242, 242, 2, 251, 209, 252, 149, 146, 211, 130, 2, 247, 228, 253, - 21, 252, 44, 146, 222, 123, 146, 124, 242, 242, 3, 84, 101, 53, 101, 3, - 84, 242, 242, 53, 242, 242, 3, 84, 211, 181, 222, 132, 50, 247, 163, 242, - 243, 118, 247, 127, 242, 242, 215, 62, 129, 247, 127, 242, 242, 215, 62, - 242, 242, 3, 2, 118, 177, 84, 23, 118, 177, 55, 242, 237, 2, 241, 125, - 177, 52, 230, 10, 2, 247, 234, 233, 25, 239, 230, 2, 247, 234, 233, 25, - 230, 10, 2, 219, 196, 141, 52, 239, 230, 2, 219, 196, 141, 52, 230, 10, - 222, 123, 214, 237, 146, 124, 239, 230, 222, 123, 214, 237, 146, 124, - 230, 10, 222, 123, 214, 237, 146, 211, 130, 2, 67, 233, 25, 239, 230, - 222, 123, 214, 237, 146, 211, 130, 2, 67, 233, 25, 230, 10, 222, 123, - 214, 237, 146, 211, 130, 2, 67, 52, 239, 230, 222, 123, 214, 237, 146, - 211, 130, 2, 67, 52, 230, 10, 222, 123, 214, 237, 146, 211, 130, 2, 67, - 84, 218, 167, 239, 230, 222, 123, 214, 237, 146, 211, 130, 2, 67, 84, - 230, 46, 230, 10, 222, 123, 252, 45, 239, 230, 222, 123, 252, 45, 230, - 10, 23, 215, 39, 224, 43, 146, 124, 239, 230, 23, 215, 39, 224, 43, 146, - 124, 230, 10, 23, 224, 43, 252, 45, 239, 230, 23, 224, 43, 252, 45, 230, - 10, 84, 244, 14, 146, 84, 239, 229, 239, 230, 84, 244, 14, 146, 84, 230, - 9, 230, 10, 84, 215, 48, 222, 123, 242, 243, 239, 230, 84, 215, 48, 222, - 123, 242, 243, 230, 10, 84, 215, 48, 84, 239, 229, 239, 230, 84, 215, 48, - 84, 230, 9, 230, 10, 84, 239, 230, 84, 244, 14, 242, 243, 239, 230, 84, - 230, 10, 84, 244, 14, 242, 243, 230, 10, 84, 214, 237, 146, 84, 239, 230, - 84, 214, 237, 242, 243, 239, 230, 84, 214, 237, 146, 84, 230, 10, 84, - 214, 237, 242, 243, 214, 237, 146, 211, 130, 222, 123, 230, 9, 214, 237, - 146, 211, 130, 222, 123, 239, 229, 214, 237, 146, 211, 130, 222, 123, - 230, 10, 2, 67, 233, 25, 214, 237, 146, 211, 130, 222, 123, 239, 230, 2, - 67, 233, 25, 244, 14, 146, 211, 130, 222, 123, 230, 9, 244, 14, 146, 211, - 130, 222, 123, 239, 229, 244, 14, 214, 237, 146, 211, 130, 222, 123, 230, - 9, 244, 14, 214, 237, 146, 211, 130, 222, 123, 239, 229, 215, 48, 222, - 123, 230, 9, 215, 48, 222, 123, 239, 229, 215, 48, 84, 230, 10, 84, 242, - 242, 53, 215, 48, 84, 239, 230, 84, 242, 242, 53, 50, 225, 93, 230, 9, - 50, 225, 93, 239, 229, 50, 225, 93, 230, 10, 2, 209, 226, 239, 230, 222, - 83, 230, 9, 239, 230, 250, 12, 230, 9, 230, 10, 247, 192, 249, 46, 247, - 19, 239, 230, 247, 192, 249, 46, 247, 19, 230, 10, 247, 192, 249, 46, - 247, 20, 84, 214, 237, 242, 243, 239, 230, 247, 192, 249, 46, 247, 20, - 84, 214, 237, 242, 243, 214, 214, 212, 46, 230, 84, 212, 46, 214, 214, - 212, 47, 222, 123, 146, 124, 230, 84, 212, 47, 222, 123, 146, 124, 242, - 242, 3, 2, 249, 78, 52, 220, 140, 84, 215, 39, 242, 242, 53, 213, 174, - 84, 215, 39, 242, 242, 53, 220, 140, 84, 215, 39, 224, 43, 146, 124, 213, - 174, 84, 215, 39, 224, 43, 146, 124, 220, 140, 84, 242, 242, 53, 213, - 174, 84, 242, 242, 53, 220, 140, 84, 224, 43, 146, 124, 213, 174, 84, - 224, 43, 146, 124, 220, 140, 84, 252, 149, 146, 124, 213, 174, 84, 252, - 149, 146, 124, 220, 140, 84, 224, 43, 252, 149, 146, 124, 213, 174, 84, - 224, 43, 252, 149, 146, 124, 50, 220, 139, 50, 213, 173, 213, 182, 2, - 245, 23, 213, 138, 2, 245, 23, 213, 182, 2, 101, 3, 55, 213, 138, 2, 101, - 3, 55, 213, 182, 2, 226, 94, 3, 55, 213, 138, 2, 226, 94, 3, 55, 213, - 182, 73, 222, 123, 146, 211, 130, 2, 67, 52, 213, 138, 73, 222, 123, 146, - 211, 130, 2, 67, 52, 213, 182, 73, 84, 242, 242, 53, 213, 138, 73, 84, - 242, 242, 53, 213, 182, 73, 84, 211, 181, 222, 132, 213, 138, 73, 84, - 211, 181, 222, 132, 213, 182, 73, 84, 252, 149, 146, 124, 213, 138, 73, - 84, 252, 149, 146, 124, 213, 182, 73, 84, 224, 43, 146, 124, 213, 138, - 73, 84, 224, 43, 146, 124, 49, 47, 222, 142, 96, 222, 132, 49, 48, 222, - 142, 96, 222, 132, 247, 192, 213, 181, 247, 192, 213, 137, 247, 192, 213, - 182, 222, 123, 146, 124, 247, 192, 213, 138, 222, 123, 146, 124, 213, - 182, 84, 213, 137, 213, 138, 84, 213, 181, 213, 182, 84, 213, 181, 213, - 138, 84, 213, 137, 213, 138, 250, 12, 213, 181, 213, 138, 250, 12, 23, - 232, 119, 249, 46, 246, 79, 2, 213, 181, 243, 61, 73, 222, 135, 244, 6, - 220, 246, 2, 212, 121, 211, 101, 211, 66, 233, 7, 241, 137, 224, 57, 215, - 144, 47, 212, 201, 215, 144, 130, 212, 201, 215, 144, 120, 212, 201, 221, - 119, 2, 182, 79, 250, 129, 211, 36, 48, 210, 143, 50, 79, 250, 129, 47, - 210, 143, 79, 250, 129, 50, 47, 210, 143, 50, 79, 250, 129, 50, 47, 210, - 143, 152, 246, 79, 241, 98, 47, 227, 88, 73, 50, 209, 22, 215, 144, 130, - 212, 202, 2, 222, 86, 215, 144, 120, 212, 202, 2, 209, 226, 215, 144, - 120, 212, 202, 84, 215, 144, 130, 212, 201, 50, 130, 212, 201, 50, 120, - 212, 201, 50, 213, 225, 224, 43, 53, 218, 224, 50, 213, 225, 224, 43, 53, - 245, 42, 224, 43, 245, 82, 2, 218, 224, 225, 104, 214, 235, 79, 229, 206, - 2, 247, 234, 52, 79, 229, 206, 2, 247, 234, 55, 130, 212, 202, 2, 247, - 234, 55, 221, 222, 2, 194, 91, 221, 222, 2, 211, 181, 222, 132, 211, 36, - 79, 250, 129, 249, 225, 219, 11, 211, 36, 79, 250, 129, 2, 194, 91, 211, - 36, 247, 163, 222, 132, 211, 36, 225, 93, 230, 9, 211, 36, 225, 93, 239, - 229, 244, 14, 214, 237, 230, 10, 222, 123, 146, 124, 244, 14, 214, 237, - 239, 230, 222, 123, 146, 124, 211, 36, 214, 181, 249, 225, 219, 11, 230, - 86, 211, 36, 79, 250, 129, 222, 132, 50, 214, 181, 222, 132, 59, 79, 134, - 226, 32, 59, 79, 134, 143, 243, 117, 59, 45, 143, 207, 36, 59, 45, 188, - 243, 117, 59, 45, 188, 207, 36, 59, 45, 47, 48, 59, 45, 92, 60, 45, 167, - 60, 45, 173, 60, 45, 143, 243, 117, 60, 45, 143, 207, 36, 60, 45, 188, - 243, 117, 60, 45, 188, 207, 36, 60, 45, 47, 48, 60, 45, 120, 130, 60, 45, - 86, 51, 2, 211, 167, 244, 6, 86, 51, 2, 211, 167, 209, 196, 92, 51, 2, - 211, 167, 244, 6, 92, 51, 2, 211, 167, 209, 196, 49, 2, 211, 102, 160, - 249, 202, 49, 2, 249, 154, 160, 249, 202, 49, 2, 209, 203, 48, 245, 163, - 160, 249, 202, 49, 2, 229, 92, 47, 245, 163, 160, 249, 202, 245, 157, 2, - 47, 160, 249, 202, 245, 157, 2, 48, 160, 249, 202, 245, 157, 2, 211, 102, - 160, 249, 202, 245, 157, 2, 249, 154, 160, 249, 202, 244, 21, 214, 107, - 60, 230, 86, 214, 107, 59, 230, 86, 214, 107, 60, 208, 226, 5, 214, 107, - 59, 208, 226, 5, 214, 107, 60, 221, 140, 59, 221, 140, 59, 239, 25, 60, - 239, 25, 194, 60, 239, 25, 60, 230, 86, 247, 233, 60, 227, 109, 245, 156, - 59, 227, 109, 245, 156, 60, 227, 109, 229, 88, 59, 227, 109, 229, 88, 60, - 5, 245, 156, 60, 5, 229, 88, 59, 5, 229, 88, 60, 194, 243, 55, 59, 194, - 243, 55, 60, 79, 243, 55, 59, 79, 243, 55, 47, 51, 2, 5, 247, 233, 129, - 92, 251, 241, 47, 51, 2, 39, 220, 218, 152, 92, 214, 103, 45, 92, 210, - 108, 51, 2, 79, 91, 92, 210, 108, 51, 2, 50, 79, 91, 92, 210, 108, 51, - 241, 98, 134, 92, 210, 108, 211, 36, 246, 79, 45, 92, 51, 2, 244, 21, - 214, 9, 92, 51, 2, 212, 192, 2, 79, 91, 92, 51, 2, 212, 192, 2, 50, 79, - 91, 92, 210, 108, 51, 2, 212, 191, 92, 210, 108, 51, 2, 212, 192, 2, 79, - 91, 92, 210, 108, 51, 2, 212, 192, 2, 50, 79, 91, 92, 51, 211, 233, 206, - 195, 207, 65, 51, 220, 201, 245, 102, 230, 46, 242, 242, 3, 84, 92, 45, - 218, 225, 211, 181, 222, 133, 84, 92, 45, 92, 51, 84, 218, 225, 252, 149, - 146, 124, 86, 51, 211, 233, 239, 229, 86, 51, 211, 233, 213, 137, 92, - 219, 207, 45, 86, 219, 207, 45, 218, 225, 211, 181, 222, 133, 84, 86, 45, - 86, 51, 84, 218, 225, 252, 149, 146, 124, 211, 181, 222, 133, 84, 92, 45, - 92, 51, 84, 252, 149, 146, 124, 92, 51, 84, 218, 225, 211, 181, 222, 132, - 86, 51, 84, 218, 225, 211, 181, 222, 132, 173, 211, 50, 205, 31, 45, 215, - 144, 214, 237, 143, 45, 215, 144, 250, 173, 188, 45, 59, 227, 109, 214, - 26, 60, 5, 214, 26, 59, 5, 214, 26, 60, 218, 162, 221, 140, 59, 218, 162, - 221, 140, 77, 230, 86, 247, 233, 77, 222, 87, 2, 222, 87, 233, 25, 77, - 247, 234, 2, 247, 234, 233, 25, 77, 247, 233, 77, 39, 217, 162, 214, 237, - 143, 51, 2, 238, 129, 239, 68, 250, 173, 188, 51, 2, 238, 129, 212, 191, - 214, 237, 143, 51, 2, 194, 212, 191, 250, 173, 188, 51, 2, 194, 212, 191, - 250, 19, 51, 220, 201, 173, 212, 33, 143, 243, 116, 215, 144, 250, 19, - 51, 220, 201, 173, 212, 33, 143, 243, 116, 92, 211, 50, 45, 167, 211, 50, - 45, 86, 211, 50, 45, 173, 211, 50, 45, 47, 48, 211, 50, 45, 120, 130, - 211, 50, 45, 143, 207, 36, 211, 50, 45, 143, 243, 117, 211, 50, 45, 188, - 243, 117, 211, 50, 45, 188, 207, 36, 211, 50, 45, 92, 211, 50, 246, 77, - 45, 167, 211, 50, 246, 77, 45, 86, 211, 50, 246, 77, 45, 173, 211, 50, - 246, 77, 45, 247, 194, 211, 50, 222, 142, 247, 234, 45, 252, 87, 211, 50, - 222, 142, 247, 234, 45, 92, 211, 50, 51, 211, 130, 134, 167, 211, 50, 51, - 211, 130, 134, 86, 211, 50, 51, 211, 130, 134, 173, 211, 50, 51, 211, - 130, 134, 143, 207, 36, 211, 50, 51, 211, 130, 134, 143, 243, 117, 211, - 50, 51, 211, 130, 134, 188, 243, 117, 211, 50, 51, 211, 130, 134, 188, - 207, 36, 211, 50, 51, 211, 130, 134, 92, 211, 50, 51, 2, 50, 194, 91, - 167, 211, 50, 51, 2, 50, 194, 91, 86, 211, 50, 51, 2, 50, 194, 91, 173, - 211, 50, 51, 2, 50, 194, 91, 194, 212, 208, 231, 174, 79, 212, 208, 231, - 174, 92, 211, 50, 51, 131, 86, 211, 50, 45, 167, 211, 50, 51, 92, 73, - 173, 211, 50, 45, 86, 211, 50, 51, 131, 92, 211, 50, 45, 173, 211, 50, - 51, 92, 73, 167, 211, 50, 45, 92, 211, 50, 222, 30, 251, 241, 167, 211, - 50, 222, 30, 251, 241, 86, 211, 50, 222, 30, 251, 241, 173, 211, 50, 222, - 30, 251, 241, 92, 60, 39, 59, 45, 167, 60, 39, 59, 45, 86, 60, 39, 59, - 45, 173, 60, 39, 59, 45, 252, 87, 211, 50, 48, 210, 71, 45, 252, 87, 211, - 50, 249, 154, 210, 71, 45, 252, 87, 211, 50, 47, 210, 71, 45, 252, 87, - 211, 50, 211, 102, 210, 71, 45, 218, 229, 230, 46, 218, 229, 218, 167, - 225, 86, 230, 46, 225, 86, 218, 167, 241, 125, 247, 92, 251, 242, 247, - 231, 252, 86, 86, 60, 45, 211, 238, 211, 100, 92, 242, 238, 251, 243, - 211, 238, 218, 163, 167, 242, 238, 251, 243, 211, 238, 211, 100, 86, 242, - 238, 251, 243, 211, 238, 230, 42, 173, 242, 238, 251, 243, 60, 92, 242, - 238, 251, 243, 60, 167, 242, 238, 251, 243, 60, 86, 242, 238, 251, 243, - 60, 173, 242, 238, 251, 243, 173, 211, 50, 51, 2, 152, 211, 167, 230, 36, - 173, 211, 50, 51, 2, 152, 211, 167, 218, 156, 167, 211, 50, 51, 2, 152, - 211, 167, 230, 36, 167, 211, 50, 51, 2, 152, 211, 167, 218, 156, 92, 211, - 50, 51, 2, 152, 211, 167, 209, 196, 86, 211, 50, 51, 2, 152, 211, 167, - 209, 196, 92, 211, 50, 51, 2, 152, 211, 167, 244, 6, 86, 211, 50, 51, 2, - 152, 211, 167, 244, 6, 60, 247, 18, 173, 23, 92, 45, 60, 247, 18, 173, - 23, 86, 45, 60, 247, 18, 167, 23, 92, 45, 60, 247, 18, 167, 23, 86, 45, - 60, 247, 18, 92, 23, 167, 45, 60, 247, 18, 86, 23, 167, 45, 60, 247, 18, - 92, 23, 173, 45, 60, 247, 18, 86, 23, 173, 45, 218, 206, 51, 130, 230, - 46, 218, 206, 51, 130, 218, 167, 218, 206, 51, 120, 230, 46, 218, 206, - 51, 120, 218, 167, 218, 206, 51, 47, 209, 206, 218, 206, 51, 48, 209, - 206, 218, 206, 51, 47, 244, 8, 218, 206, 51, 48, 244, 8, 167, 59, 51, - 241, 98, 250, 129, 2, 194, 134, 120, 251, 244, 233, 69, 32, 219, 38, 249, - 140, 250, 146, 96, 2, 147, 206, 195, 39, 206, 195, 39, 24, 206, 195, 60, - 49, 248, 126, 60, 245, 157, 248, 126, 201, 60, 221, 140, 194, 60, 222, - 214, 60, 222, 214, 60, 227, 109, 209, 205, 211, 52, 248, 126, 60, 227, - 109, 244, 7, 211, 52, 248, 126, 60, 227, 109, 230, 41, 211, 52, 248, 126, - 60, 227, 109, 218, 162, 211, 52, 248, 126, 211, 102, 160, 60, 247, 233, - 249, 154, 160, 60, 247, 233, 147, 241, 125, 220, 203, 60, 247, 15, 218, - 97, 147, 241, 125, 220, 203, 60, 247, 15, 59, 241, 125, 220, 203, 247, - 15, 218, 97, 59, 241, 125, 220, 203, 247, 15, 49, 220, 178, 233, 49, 209, - 229, 53, 166, 6, 1, 251, 151, 166, 6, 1, 249, 89, 166, 6, 1, 209, 37, - 166, 6, 1, 240, 30, 166, 6, 1, 245, 46, 166, 6, 1, 206, 24, 166, 6, 1, - 205, 65, 166, 6, 1, 243, 191, 166, 6, 1, 205, 90, 166, 6, 1, 232, 207, - 166, 6, 1, 78, 232, 207, 166, 6, 1, 74, 166, 6, 1, 245, 66, 166, 6, 1, - 232, 33, 166, 6, 1, 229, 174, 166, 6, 1, 226, 37, 166, 6, 1, 225, 195, - 166, 6, 1, 222, 154, 166, 6, 1, 220, 198, 166, 6, 1, 218, 141, 166, 6, 1, - 214, 219, 166, 6, 1, 210, 131, 166, 6, 1, 209, 245, 166, 6, 1, 241, 101, - 166, 6, 1, 239, 31, 166, 6, 1, 222, 98, 166, 6, 1, 221, 174, 166, 6, 1, - 215, 119, 166, 6, 1, 210, 222, 166, 6, 1, 248, 20, 166, 6, 1, 216, 2, - 166, 6, 1, 206, 30, 166, 6, 1, 206, 32, 166, 6, 1, 206, 63, 166, 6, 1, - 214, 129, 155, 166, 6, 1, 205, 213, 166, 6, 1, 5, 205, 183, 166, 6, 1, 5, - 205, 184, 2, 212, 191, 166, 6, 1, 205, 247, 166, 6, 1, 232, 248, 5, 205, - 183, 166, 6, 1, 249, 231, 205, 183, 166, 6, 1, 232, 248, 249, 231, 205, - 183, 166, 6, 1, 241, 205, 166, 6, 1, 232, 205, 166, 6, 1, 215, 118, 166, - 6, 1, 211, 27, 62, 166, 6, 1, 230, 76, 226, 37, 166, 5, 1, 251, 151, 166, - 5, 1, 249, 89, 166, 5, 1, 209, 37, 166, 5, 1, 240, 30, 166, 5, 1, 245, - 46, 166, 5, 1, 206, 24, 166, 5, 1, 205, 65, 166, 5, 1, 243, 191, 166, 5, - 1, 205, 90, 166, 5, 1, 232, 207, 166, 5, 1, 78, 232, 207, 166, 5, 1, 74, - 166, 5, 1, 245, 66, 166, 5, 1, 232, 33, 166, 5, 1, 229, 174, 166, 5, 1, - 226, 37, 166, 5, 1, 225, 195, 166, 5, 1, 222, 154, 166, 5, 1, 220, 198, - 166, 5, 1, 218, 141, 166, 5, 1, 214, 219, 166, 5, 1, 210, 131, 166, 5, 1, - 209, 245, 166, 5, 1, 241, 101, 166, 5, 1, 239, 31, 166, 5, 1, 222, 98, - 166, 5, 1, 221, 174, 166, 5, 1, 215, 119, 166, 5, 1, 210, 222, 166, 5, 1, - 248, 20, 166, 5, 1, 216, 2, 166, 5, 1, 206, 30, 166, 5, 1, 206, 32, 166, - 5, 1, 206, 63, 166, 5, 1, 214, 129, 155, 166, 5, 1, 205, 213, 166, 5, 1, - 5, 205, 183, 166, 5, 1, 5, 205, 184, 2, 212, 191, 166, 5, 1, 205, 247, - 166, 5, 1, 232, 248, 5, 205, 183, 166, 5, 1, 249, 231, 205, 183, 166, 5, - 1, 232, 248, 249, 231, 205, 183, 166, 5, 1, 241, 205, 166, 5, 1, 232, - 205, 166, 5, 1, 215, 118, 166, 5, 1, 211, 27, 62, 166, 5, 1, 230, 76, - 226, 37, 7, 6, 1, 230, 159, 2, 50, 134, 7, 5, 1, 230, 159, 2, 50, 134, 7, - 6, 1, 230, 159, 2, 226, 247, 211, 180, 7, 6, 1, 222, 68, 2, 91, 7, 6, 1, - 219, 150, 2, 212, 191, 7, 5, 1, 32, 2, 91, 7, 5, 1, 213, 11, 2, 245, 163, - 91, 7, 6, 1, 239, 156, 2, 245, 211, 7, 5, 1, 239, 156, 2, 245, 211, 7, 6, - 1, 232, 77, 2, 245, 211, 7, 5, 1, 232, 77, 2, 245, 211, 7, 6, 1, 205, - 160, 2, 245, 211, 7, 5, 1, 205, 160, 2, 245, 211, 7, 6, 1, 252, 144, 7, - 6, 1, 229, 29, 2, 109, 7, 6, 1, 201, 62, 7, 6, 1, 201, 252, 144, 7, 5, 1, - 209, 149, 2, 48, 109, 7, 6, 1, 207, 130, 2, 109, 7, 5, 1, 207, 130, 2, - 109, 7, 5, 1, 209, 149, 2, 247, 27, 7, 6, 1, 160, 239, 155, 7, 5, 1, 160, - 239, 155, 7, 5, 1, 212, 189, 221, 78, 7, 5, 1, 174, 2, 224, 40, 7, 5, 1, - 201, 219, 150, 2, 212, 191, 7, 5, 1, 148, 2, 114, 218, 149, 233, 25, 7, - 1, 5, 6, 201, 75, 7, 213, 183, 5, 1, 232, 203, 65, 1, 6, 209, 148, 7, 6, - 1, 218, 1, 2, 213, 109, 212, 191, 7, 6, 1, 205, 160, 2, 213, 109, 212, - 191, 81, 6, 1, 252, 166, 81, 5, 1, 252, 166, 81, 6, 1, 208, 211, 81, 5, - 1, 208, 211, 81, 6, 1, 240, 215, 81, 5, 1, 240, 215, 81, 6, 1, 246, 113, - 81, 5, 1, 246, 113, 81, 6, 1, 243, 89, 81, 5, 1, 243, 89, 81, 6, 1, 214, - 167, 81, 5, 1, 214, 167, 81, 6, 1, 205, 100, 81, 5, 1, 205, 100, 81, 6, - 1, 239, 83, 81, 5, 1, 239, 83, 81, 6, 1, 212, 21, 81, 5, 1, 212, 21, 81, - 6, 1, 237, 187, 81, 5, 1, 237, 187, 81, 6, 1, 232, 19, 81, 5, 1, 232, 19, - 81, 6, 1, 230, 72, 81, 5, 1, 230, 72, 81, 6, 1, 226, 254, 81, 5, 1, 226, - 254, 81, 6, 1, 224, 230, 81, 5, 1, 224, 230, 81, 6, 1, 230, 252, 81, 5, - 1, 230, 252, 81, 6, 1, 76, 81, 5, 1, 76, 81, 6, 1, 221, 53, 81, 5, 1, - 221, 53, 81, 6, 1, 218, 124, 81, 5, 1, 218, 124, 81, 6, 1, 215, 51, 81, - 5, 1, 215, 51, 81, 6, 1, 212, 151, 81, 5, 1, 212, 151, 81, 6, 1, 210, 18, - 81, 5, 1, 210, 18, 81, 6, 1, 241, 250, 81, 5, 1, 241, 250, 81, 6, 1, 231, - 145, 81, 5, 1, 231, 145, 81, 6, 1, 220, 93, 81, 5, 1, 220, 93, 81, 6, 1, - 222, 146, 81, 5, 1, 222, 146, 81, 6, 1, 245, 161, 252, 172, 81, 5, 1, - 245, 161, 252, 172, 81, 6, 1, 44, 81, 252, 200, 81, 5, 1, 44, 81, 252, - 200, 81, 6, 1, 247, 43, 243, 89, 81, 5, 1, 247, 43, 243, 89, 81, 6, 1, - 245, 161, 232, 19, 81, 5, 1, 245, 161, 232, 19, 81, 6, 1, 245, 161, 224, - 230, 81, 5, 1, 245, 161, 224, 230, 81, 6, 1, 247, 43, 224, 230, 81, 5, 1, - 247, 43, 224, 230, 81, 6, 1, 44, 81, 222, 146, 81, 5, 1, 44, 81, 222, - 146, 81, 6, 1, 217, 154, 81, 5, 1, 217, 154, 81, 6, 1, 247, 57, 215, 206, - 81, 5, 1, 247, 57, 215, 206, 81, 6, 1, 44, 81, 215, 206, 81, 5, 1, 44, - 81, 215, 206, 81, 6, 1, 44, 81, 242, 215, 81, 5, 1, 44, 81, 242, 215, 81, - 6, 1, 252, 185, 231, 150, 81, 5, 1, 252, 185, 231, 150, 81, 6, 1, 245, - 161, 238, 122, 81, 5, 1, 245, 161, 238, 122, 81, 6, 1, 44, 81, 238, 122, - 81, 5, 1, 44, 81, 238, 122, 81, 6, 1, 44, 81, 155, 81, 5, 1, 44, 81, 155, - 81, 6, 1, 230, 158, 155, 81, 5, 1, 230, 158, 155, 81, 6, 1, 44, 81, 239, - 49, 81, 5, 1, 44, 81, 239, 49, 81, 6, 1, 44, 81, 239, 86, 81, 5, 1, 44, - 81, 239, 86, 81, 6, 1, 44, 81, 240, 210, 81, 5, 1, 44, 81, 240, 210, 81, - 6, 1, 44, 81, 245, 69, 81, 5, 1, 44, 81, 245, 69, 81, 6, 1, 44, 81, 215, - 173, 81, 5, 1, 44, 81, 215, 173, 81, 6, 1, 44, 223, 187, 215, 173, 81, 5, - 1, 44, 223, 187, 215, 173, 81, 6, 1, 44, 223, 187, 225, 25, 81, 5, 1, 44, - 223, 187, 225, 25, 81, 6, 1, 44, 223, 187, 223, 125, 81, 5, 1, 44, 223, - 187, 223, 125, 81, 6, 1, 44, 223, 187, 207, 66, 81, 5, 1, 44, 223, 187, - 207, 66, 81, 16, 232, 41, 81, 16, 226, 255, 218, 124, 81, 16, 221, 54, - 218, 124, 81, 16, 214, 17, 81, 16, 212, 152, 218, 124, 81, 16, 231, 146, - 218, 124, 81, 16, 215, 174, 215, 51, 81, 6, 1, 247, 43, 215, 206, 81, 5, - 1, 247, 43, 215, 206, 81, 6, 1, 247, 43, 240, 210, 81, 5, 1, 247, 43, - 240, 210, 81, 36, 224, 231, 52, 81, 36, 214, 123, 251, 217, 81, 36, 214, - 123, 230, 17, 81, 6, 1, 249, 178, 231, 150, 81, 5, 1, 249, 178, 231, 150, - 81, 44, 223, 187, 241, 82, 213, 251, 81, 44, 223, 187, 245, 104, 219, - 196, 83, 81, 44, 223, 187, 233, 48, 219, 196, 83, 81, 44, 223, 187, 209, - 24, 245, 79, 81, 241, 116, 119, 239, 121, 81, 241, 82, 213, 251, 81, 226, - 140, 245, 79, 108, 5, 1, 252, 122, 108, 5, 1, 250, 140, 108, 5, 1, 240, - 214, 108, 5, 1, 245, 31, 108, 5, 1, 243, 41, 108, 5, 1, 208, 197, 108, 5, - 1, 205, 88, 108, 5, 1, 212, 174, 108, 5, 1, 233, 68, 108, 5, 1, 232, 27, - 108, 5, 1, 230, 82, 108, 5, 1, 227, 221, 108, 5, 1, 225, 200, 108, 5, 1, - 222, 165, 108, 5, 1, 221, 231, 108, 5, 1, 205, 77, 108, 5, 1, 219, 95, - 108, 5, 1, 217, 151, 108, 5, 1, 212, 162, 108, 5, 1, 209, 234, 108, 5, 1, - 221, 85, 108, 5, 1, 231, 155, 108, 5, 1, 240, 90, 108, 5, 1, 220, 4, 108, - 5, 1, 215, 171, 108, 5, 1, 248, 45, 108, 5, 1, 248, 226, 108, 5, 1, 232, - 154, 108, 5, 1, 247, 240, 108, 5, 1, 248, 95, 108, 5, 1, 206, 179, 108, - 5, 1, 232, 167, 108, 5, 1, 239, 138, 108, 5, 1, 239, 71, 108, 5, 1, 239, - 6, 108, 5, 1, 207, 51, 108, 5, 1, 239, 95, 108, 5, 1, 238, 146, 108, 5, - 1, 205, 249, 108, 5, 1, 252, 237, 211, 200, 1, 190, 211, 200, 1, 206, - 105, 211, 200, 1, 206, 104, 211, 200, 1, 206, 94, 211, 200, 1, 206, 92, - 211, 200, 1, 250, 14, 253, 23, 206, 87, 211, 200, 1, 206, 87, 211, 200, - 1, 206, 102, 211, 200, 1, 206, 99, 211, 200, 1, 206, 101, 211, 200, 1, - 206, 100, 211, 200, 1, 206, 15, 211, 200, 1, 206, 96, 211, 200, 1, 206, - 85, 211, 200, 1, 210, 167, 206, 85, 211, 200, 1, 206, 82, 211, 200, 1, - 206, 90, 211, 200, 1, 250, 14, 253, 23, 206, 90, 211, 200, 1, 210, 167, - 206, 90, 211, 200, 1, 206, 89, 211, 200, 1, 206, 109, 211, 200, 1, 206, - 83, 211, 200, 1, 210, 167, 206, 83, 211, 200, 1, 206, 72, 211, 200, 1, - 210, 167, 206, 72, 211, 200, 1, 206, 11, 211, 200, 1, 206, 54, 211, 200, - 1, 252, 211, 206, 54, 211, 200, 1, 210, 167, 206, 54, 211, 200, 1, 206, - 81, 211, 200, 1, 206, 80, 211, 200, 1, 206, 77, 211, 200, 1, 210, 167, - 206, 91, 211, 200, 1, 210, 167, 206, 75, 211, 200, 1, 206, 73, 211, 200, - 1, 205, 213, 211, 200, 1, 206, 70, 211, 200, 1, 206, 69, 211, 200, 1, - 206, 93, 211, 200, 1, 210, 167, 206, 93, 211, 200, 1, 251, 155, 206, 93, - 211, 200, 1, 206, 68, 211, 200, 1, 206, 66, 211, 200, 1, 206, 67, 211, - 200, 1, 206, 65, 211, 200, 1, 206, 64, 211, 200, 1, 206, 103, 211, 200, - 1, 206, 62, 211, 200, 1, 206, 60, 211, 200, 1, 206, 59, 211, 200, 1, 206, - 58, 211, 200, 1, 206, 55, 211, 200, 1, 212, 143, 206, 55, 211, 200, 1, - 206, 53, 211, 200, 1, 206, 52, 211, 200, 1, 205, 247, 211, 200, 65, 1, - 230, 131, 83, 211, 200, 216, 40, 83, 211, 200, 107, 232, 117, 31, 4, 229, - 143, 31, 4, 226, 180, 31, 4, 218, 122, 31, 4, 214, 192, 31, 4, 215, 157, - 31, 4, 249, 183, 31, 4, 211, 129, 31, 4, 247, 173, 31, 4, 224, 65, 31, 4, - 223, 109, 31, 4, 240, 25, 222, 230, 31, 4, 205, 18, 31, 4, 245, 49, 31, - 4, 246, 23, 31, 4, 232, 121, 31, 4, 211, 252, 31, 4, 248, 31, 31, 4, 221, - 65, 31, 4, 220, 210, 31, 4, 240, 105, 31, 4, 240, 101, 31, 4, 240, 102, - 31, 4, 240, 103, 31, 4, 214, 96, 31, 4, 214, 51, 31, 4, 214, 64, 31, 4, - 214, 95, 31, 4, 214, 69, 31, 4, 214, 70, 31, 4, 214, 56, 31, 4, 248, 171, - 31, 4, 248, 150, 31, 4, 248, 152, 31, 4, 248, 170, 31, 4, 248, 168, 31, - 4, 248, 169, 31, 4, 248, 151, 31, 4, 204, 238, 31, 4, 204, 216, 31, 4, - 204, 229, 31, 4, 204, 237, 31, 4, 204, 232, 31, 4, 204, 233, 31, 4, 204, - 221, 31, 4, 248, 166, 31, 4, 248, 153, 31, 4, 248, 155, 31, 4, 248, 165, - 31, 4, 248, 163, 31, 4, 248, 164, 31, 4, 248, 154, 31, 4, 219, 162, 31, - 4, 219, 152, 31, 4, 219, 158, 31, 4, 219, 161, 31, 4, 219, 159, 31, 4, - 219, 160, 31, 4, 219, 157, 31, 4, 230, 169, 31, 4, 230, 161, 31, 4, 230, - 164, 31, 4, 230, 168, 31, 4, 230, 165, 31, 4, 230, 166, 31, 4, 230, 162, - 31, 4, 206, 139, 31, 4, 206, 126, 31, 4, 206, 134, 31, 4, 206, 138, 31, - 4, 206, 136, 31, 4, 206, 137, 31, 4, 206, 133, 31, 4, 239, 167, 31, 4, - 239, 157, 31, 4, 239, 160, 31, 4, 239, 166, 31, 4, 239, 162, 31, 4, 239, - 163, 31, 4, 239, 159, 36, 34, 1, 250, 61, 36, 34, 1, 209, 39, 36, 34, 1, - 240, 85, 36, 34, 1, 246, 9, 36, 34, 1, 205, 72, 36, 34, 1, 205, 93, 36, - 34, 1, 172, 36, 34, 1, 243, 68, 36, 34, 1, 243, 50, 36, 34, 1, 243, 41, - 36, 34, 1, 76, 36, 34, 1, 221, 174, 36, 34, 1, 242, 235, 36, 34, 1, 242, - 225, 36, 34, 1, 212, 131, 36, 34, 1, 155, 36, 34, 1, 210, 237, 36, 34, 1, - 248, 82, 36, 34, 1, 216, 2, 36, 34, 1, 215, 217, 36, 34, 1, 241, 205, 36, - 34, 1, 242, 221, 36, 34, 1, 62, 36, 34, 1, 233, 129, 36, 34, 1, 245, 67, - 36, 34, 1, 226, 158, 209, 249, 36, 34, 1, 206, 65, 36, 34, 1, 205, 213, - 36, 34, 1, 232, 247, 62, 36, 34, 1, 229, 180, 205, 183, 36, 34, 1, 249, - 231, 205, 183, 36, 34, 1, 232, 247, 249, 231, 205, 183, 48, 252, 109, - 213, 178, 227, 187, 48, 252, 109, 244, 21, 213, 178, 227, 187, 47, 213, - 178, 145, 48, 213, 178, 145, 47, 244, 21, 213, 178, 145, 48, 244, 21, - 213, 178, 145, 219, 81, 233, 12, 227, 187, 219, 81, 244, 21, 233, 12, - 227, 187, 244, 21, 211, 67, 227, 187, 47, 211, 67, 145, 48, 211, 67, 145, - 219, 81, 214, 107, 47, 219, 81, 222, 167, 145, 48, 219, 81, 222, 167, - 145, 243, 105, 247, 89, 221, 227, 241, 138, 221, 227, 218, 224, 241, 138, - 221, 227, 237, 236, 244, 21, 222, 225, 173, 252, 118, 167, 252, 118, 244, - 21, 218, 162, 252, 108, 50, 222, 222, 237, 239, 233, 2, 233, 10, 222, 19, - 249, 130, 237, 240, 2, 245, 166, 211, 181, 2, 218, 149, 52, 47, 114, 221, - 219, 145, 48, 114, 221, 219, 145, 211, 181, 2, 67, 52, 211, 181, 2, 67, - 55, 47, 79, 250, 129, 2, 219, 190, 48, 79, 250, 129, 2, 219, 190, 211, - 102, 47, 160, 145, 211, 102, 48, 160, 145, 249, 154, 47, 160, 145, 249, - 154, 48, 160, 145, 47, 215, 73, 106, 145, 48, 215, 73, 106, 145, 47, 50, - 221, 216, 48, 50, 221, 216, 118, 177, 131, 119, 67, 220, 71, 119, 67, - 131, 118, 177, 220, 71, 98, 241, 125, 67, 220, 71, 241, 204, 67, 83, 218, - 224, 219, 196, 83, 79, 211, 180, 218, 149, 220, 204, 206, 232, 216, 40, - 226, 247, 245, 23, 201, 247, 155, 219, 81, 245, 23, 219, 81, 247, 155, - 201, 216, 52, 246, 129, 2, 47, 239, 207, 246, 129, 2, 48, 239, 207, 201, - 246, 128, 211, 102, 160, 217, 77, 53, 210, 109, 246, 78, 211, 237, 246, - 78, 214, 8, 241, 82, 213, 251, 79, 215, 10, 245, 21, 207, 14, 79, 229, - 205, 248, 211, 50, 237, 239, 218, 224, 247, 155, 50, 229, 93, 219, 180, - 83, 10, 37, 218, 251, 10, 37, 247, 202, 10, 37, 217, 80, 102, 10, 37, - 217, 80, 105, 10, 37, 217, 80, 142, 10, 37, 221, 114, 10, 37, 249, 140, - 10, 37, 212, 206, 10, 37, 231, 59, 102, 10, 37, 231, 59, 105, 10, 37, - 245, 76, 10, 37, 217, 84, 10, 37, 5, 102, 10, 37, 5, 105, 10, 37, 230, - 101, 102, 10, 37, 230, 101, 105, 10, 37, 230, 101, 142, 10, 37, 230, 101, - 139, 10, 37, 214, 204, 10, 37, 211, 239, 10, 37, 214, 202, 102, 10, 37, - 214, 202, 105, 10, 37, 239, 61, 102, 10, 37, 239, 61, 105, 10, 37, 239, - 107, 10, 37, 219, 71, 10, 37, 248, 28, 10, 37, 213, 154, 10, 37, 226, - 144, 10, 37, 246, 7, 10, 37, 226, 136, 10, 37, 247, 220, 10, 37, 207, 70, - 102, 10, 37, 207, 70, 105, 10, 37, 241, 219, 10, 37, 221, 186, 102, 10, - 37, 221, 186, 105, 10, 37, 215, 46, 160, 211, 62, 210, 248, 10, 37, 247, - 75, 10, 37, 245, 40, 10, 37, 232, 195, 10, 37, 249, 177, 73, 247, 186, - 10, 37, 242, 150, 10, 37, 214, 125, 102, 10, 37, 214, 125, 105, 10, 37, - 250, 142, 10, 37, 215, 53, 10, 37, 249, 31, 215, 53, 10, 37, 225, 92, - 102, 10, 37, 225, 92, 105, 10, 37, 225, 92, 142, 10, 37, 225, 92, 139, - 10, 37, 227, 70, 10, 37, 215, 208, 10, 37, 219, 77, 10, 37, 242, 174, 10, - 37, 222, 179, 10, 37, 249, 109, 102, 10, 37, 249, 109, 105, 10, 37, 227, - 114, 10, 37, 226, 139, 10, 37, 239, 240, 102, 10, 37, 239, 240, 105, 10, - 37, 239, 240, 142, 10, 37, 211, 198, 10, 37, 247, 185, 10, 37, 207, 36, - 102, 10, 37, 207, 36, 105, 10, 37, 249, 31, 217, 74, 10, 37, 215, 46, - 238, 69, 10, 37, 238, 69, 10, 37, 249, 31, 214, 136, 10, 37, 249, 31, - 215, 203, 10, 37, 241, 148, 10, 37, 249, 31, 248, 189, 10, 37, 215, 46, - 207, 87, 10, 37, 207, 88, 102, 10, 37, 207, 88, 105, 10, 37, 247, 223, - 10, 37, 249, 31, 240, 11, 10, 37, 152, 102, 10, 37, 152, 105, 10, 37, - 249, 31, 229, 125, 10, 37, 249, 31, 240, 196, 10, 37, 226, 132, 102, 10, - 37, 226, 132, 105, 10, 37, 219, 83, 10, 37, 249, 186, 10, 37, 249, 31, - 212, 168, 230, 52, 10, 37, 249, 31, 230, 53, 10, 37, 249, 31, 207, 9, 10, - 37, 249, 31, 241, 166, 10, 37, 243, 114, 102, 10, 37, 243, 114, 105, 10, - 37, 243, 114, 142, 10, 37, 249, 31, 243, 113, 10, 37, 239, 68, 10, 37, - 249, 31, 238, 65, 10, 37, 249, 173, 10, 37, 240, 69, 10, 37, 249, 31, - 241, 213, 10, 37, 249, 31, 249, 218, 10, 37, 249, 31, 217, 165, 10, 37, - 215, 46, 207, 28, 10, 37, 215, 46, 206, 44, 10, 37, 249, 31, 241, 99, 10, - 37, 232, 202, 242, 178, 10, 37, 249, 31, 242, 178, 10, 37, 232, 202, 211, - 103, 10, 37, 249, 31, 211, 103, 10, 37, 232, 202, 243, 255, 10, 37, 249, - 31, 243, 255, 10, 37, 210, 141, 10, 37, 232, 202, 210, 141, 10, 37, 249, - 31, 210, 141, 68, 37, 102, 68, 37, 229, 205, 68, 37, 245, 23, 68, 37, - 214, 235, 68, 37, 217, 79, 68, 37, 109, 68, 37, 105, 68, 37, 229, 231, - 68, 37, 227, 221, 68, 37, 230, 31, 68, 37, 243, 18, 68, 37, 193, 68, 37, - 130, 249, 140, 68, 37, 247, 77, 68, 37, 237, 181, 68, 37, 212, 206, 68, - 37, 222, 142, 249, 140, 68, 37, 231, 58, 68, 37, 220, 161, 68, 37, 206, - 223, 68, 37, 214, 118, 68, 37, 48, 222, 142, 249, 140, 68, 37, 239, 7, - 243, 36, 68, 37, 212, 98, 68, 37, 245, 76, 68, 37, 217, 84, 68, 37, 247, - 202, 68, 37, 220, 117, 68, 37, 252, 219, 68, 37, 226, 123, 68, 37, 243, - 36, 68, 37, 243, 120, 68, 37, 217, 105, 68, 37, 240, 19, 68, 37, 240, 20, - 214, 217, 68, 37, 242, 177, 68, 37, 249, 230, 68, 37, 206, 244, 68, 37, - 248, 49, 68, 37, 218, 106, 68, 37, 233, 64, 68, 37, 214, 215, 68, 37, - 230, 100, 68, 37, 247, 87, 68, 37, 214, 111, 68, 37, 226, 128, 68, 37, - 218, 138, 68, 37, 206, 229, 68, 37, 222, 159, 68, 37, 210, 148, 68, 37, - 243, 239, 68, 37, 215, 144, 211, 239, 68, 37, 244, 21, 247, 202, 68, 37, - 152, 213, 230, 68, 37, 118, 239, 102, 68, 37, 215, 150, 68, 37, 249, 146, - 68, 37, 214, 201, 68, 37, 249, 113, 68, 37, 214, 7, 68, 37, 239, 60, 68, - 37, 239, 122, 68, 37, 245, 26, 68, 37, 239, 107, 68, 37, 249, 130, 68, - 37, 219, 71, 68, 37, 217, 92, 68, 37, 245, 106, 68, 37, 251, 160, 68, 37, - 214, 107, 68, 37, 224, 42, 68, 37, 213, 154, 68, 37, 217, 116, 68, 37, - 226, 144, 68, 37, 211, 61, 68, 37, 230, 127, 68, 37, 213, 251, 68, 37, - 246, 7, 68, 37, 207, 50, 68, 37, 245, 52, 224, 42, 68, 37, 247, 151, 68, - 37, 241, 75, 68, 37, 247, 214, 68, 37, 214, 12, 68, 37, 207, 69, 68, 37, - 241, 219, 68, 37, 247, 210, 68, 37, 242, 35, 68, 37, 50, 206, 195, 68, - 37, 160, 211, 62, 210, 248, 68, 37, 214, 228, 68, 37, 242, 45, 68, 37, - 247, 75, 68, 37, 245, 40, 68, 37, 220, 114, 68, 37, 232, 195, 68, 37, - 227, 92, 68, 37, 211, 179, 68, 37, 213, 104, 68, 37, 229, 225, 68, 37, - 209, 175, 68, 37, 241, 249, 68, 37, 249, 177, 73, 247, 186, 68, 37, 215, - 76, 68, 37, 244, 21, 212, 92, 68, 37, 207, 23, 68, 37, 214, 243, 68, 37, - 245, 94, 68, 37, 242, 150, 68, 37, 214, 139, 68, 37, 45, 68, 37, 213, - 253, 68, 37, 214, 124, 68, 37, 211, 82, 68, 37, 239, 247, 68, 37, 248, - 176, 68, 37, 214, 30, 68, 37, 250, 142, 68, 37, 218, 203, 68, 37, 215, - 53, 68, 37, 232, 188, 68, 37, 225, 91, 68, 37, 215, 208, 68, 37, 242, 23, - 68, 37, 222, 179, 68, 37, 252, 117, 68, 37, 220, 225, 68, 37, 243, 124, - 68, 37, 249, 108, 68, 37, 227, 114, 68, 37, 226, 203, 68, 37, 216, 58, - 68, 37, 251, 247, 68, 37, 226, 139, 68, 37, 211, 107, 68, 37, 222, 130, - 68, 37, 249, 180, 68, 37, 213, 249, 68, 37, 247, 161, 68, 37, 239, 239, - 68, 37, 211, 198, 68, 37, 233, 28, 68, 37, 249, 191, 68, 37, 207, 88, - 243, 36, 68, 37, 247, 185, 68, 37, 207, 35, 68, 37, 217, 74, 68, 37, 238, - 69, 68, 37, 214, 136, 68, 37, 209, 63, 68, 37, 250, 57, 68, 37, 221, 17, - 68, 37, 250, 165, 68, 37, 215, 203, 68, 37, 219, 31, 68, 37, 218, 35, 68, - 37, 241, 148, 68, 37, 249, 179, 68, 37, 248, 189, 68, 37, 249, 207, 68, - 37, 226, 141, 68, 37, 207, 87, 68, 37, 247, 223, 68, 37, 207, 5, 68, 37, - 245, 87, 68, 37, 208, 198, 68, 37, 240, 11, 68, 37, 229, 125, 68, 37, - 240, 196, 68, 37, 226, 131, 68, 37, 214, 234, 68, 37, 215, 144, 212, 190, - 249, 218, 68, 37, 219, 83, 68, 37, 249, 186, 68, 37, 206, 218, 68, 37, - 242, 67, 68, 37, 230, 52, 68, 37, 212, 168, 230, 52, 68, 37, 230, 48, 68, - 37, 214, 164, 68, 37, 230, 53, 68, 37, 207, 9, 68, 37, 241, 166, 68, 37, - 243, 113, 68, 37, 239, 68, 68, 37, 241, 114, 68, 37, 238, 65, 68, 37, - 249, 173, 68, 37, 212, 177, 68, 37, 239, 129, 68, 37, 241, 242, 68, 37, - 217, 193, 207, 5, 68, 37, 248, 178, 68, 37, 240, 69, 68, 37, 241, 213, - 68, 37, 249, 218, 68, 37, 217, 165, 68, 37, 245, 248, 68, 37, 207, 28, - 68, 37, 239, 42, 68, 37, 206, 44, 68, 37, 226, 214, 68, 37, 249, 202, 68, - 37, 243, 46, 68, 37, 241, 99, 68, 37, 211, 34, 68, 37, 243, 241, 68, 37, - 219, 65, 68, 37, 224, 44, 68, 37, 242, 178, 68, 37, 211, 103, 68, 37, - 243, 255, 68, 37, 210, 141, 68, 37, 241, 168, 128, 245, 209, 157, 47, - 211, 130, 218, 167, 128, 245, 209, 157, 84, 211, 130, 55, 128, 245, 209, - 157, 47, 211, 130, 226, 247, 23, 218, 167, 128, 245, 209, 157, 84, 211, - 130, 226, 247, 23, 55, 128, 245, 209, 157, 241, 82, 213, 126, 128, 245, - 209, 157, 213, 127, 241, 98, 52, 128, 245, 209, 157, 213, 127, 241, 98, - 55, 128, 245, 209, 157, 213, 127, 241, 98, 230, 46, 128, 245, 209, 157, - 213, 127, 241, 98, 209, 203, 230, 46, 128, 245, 209, 157, 213, 127, 241, - 98, 209, 203, 218, 167, 128, 245, 209, 157, 213, 127, 241, 98, 229, 92, - 230, 46, 128, 245, 209, 157, 222, 85, 128, 214, 153, 128, 247, 155, 128, - 241, 82, 213, 251, 245, 84, 83, 232, 189, 233, 47, 214, 29, 93, 128, 232, - 218, 83, 128, 247, 188, 83, 128, 43, 205, 85, 47, 252, 109, 145, 48, 252, - 109, 145, 47, 50, 252, 109, 145, 48, 50, 252, 109, 145, 47, 247, 92, 145, - 48, 247, 92, 145, 47, 59, 247, 92, 145, 48, 59, 247, 92, 145, 47, 60, - 230, 16, 145, 48, 60, 230, 16, 145, 220, 174, 83, 240, 138, 83, 47, 211, - 93, 215, 204, 145, 48, 211, 93, 215, 204, 145, 47, 59, 230, 16, 145, 48, - 59, 230, 16, 145, 47, 59, 211, 93, 215, 204, 145, 48, 59, 211, 93, 215, - 204, 145, 47, 59, 49, 145, 48, 59, 49, 145, 207, 65, 246, 78, 218, 224, - 50, 220, 128, 219, 180, 83, 50, 220, 128, 219, 180, 83, 114, 50, 220, - 128, 219, 180, 83, 220, 174, 141, 242, 67, 239, 100, 223, 177, 102, 239, - 100, 223, 177, 105, 239, 100, 223, 177, 142, 239, 100, 223, 177, 139, - 239, 100, 223, 177, 168, 239, 100, 223, 177, 184, 239, 100, 223, 177, - 195, 239, 100, 223, 177, 193, 239, 100, 223, 177, 200, 128, 229, 254, - 135, 83, 128, 218, 142, 135, 83, 128, 245, 217, 135, 83, 128, 243, 17, - 135, 83, 25, 215, 41, 67, 135, 83, 25, 50, 67, 135, 83, 207, 61, 246, 78, - 79, 232, 26, 218, 252, 83, 79, 232, 26, 218, 252, 2, 208, 170, 214, 165, - 83, 79, 232, 26, 218, 252, 141, 209, 203, 239, 121, 79, 232, 26, 218, - 252, 2, 208, 170, 214, 165, 141, 209, 203, 239, 121, 79, 232, 26, 218, - 252, 141, 229, 92, 239, 121, 39, 220, 174, 83, 128, 212, 110, 229, 206, - 242, 20, 216, 40, 93, 239, 100, 223, 177, 212, 98, 239, 100, 223, 177, - 210, 123, 239, 100, 223, 177, 212, 3, 79, 128, 232, 218, 83, 227, 171, - 83, 221, 211, 252, 140, 83, 128, 54, 233, 49, 128, 160, 241, 235, 214, - 153, 161, 1, 5, 62, 161, 1, 62, 161, 1, 5, 74, 161, 1, 74, 161, 1, 5, 71, - 161, 1, 71, 161, 1, 5, 75, 161, 1, 75, 161, 1, 5, 76, 161, 1, 76, 161, 1, - 172, 161, 1, 240, 244, 161, 1, 231, 123, 161, 1, 240, 61, 161, 1, 230, - 236, 161, 1, 239, 213, 161, 1, 231, 224, 161, 1, 240, 170, 161, 1, 231, - 53, 161, 1, 240, 19, 161, 1, 217, 199, 161, 1, 205, 116, 161, 1, 215, 80, - 161, 1, 205, 40, 161, 1, 213, 203, 161, 1, 205, 9, 161, 1, 217, 86, 161, - 1, 205, 93, 161, 1, 214, 193, 161, 1, 205, 19, 161, 1, 212, 219, 161, 1, - 246, 145, 161, 1, 211, 211, 161, 1, 245, 168, 161, 1, 5, 210, 170, 161, - 1, 210, 170, 161, 1, 243, 237, 161, 1, 212, 131, 161, 1, 246, 9, 161, 1, - 124, 161, 1, 245, 51, 161, 1, 199, 161, 1, 224, 230, 161, 1, 223, 217, - 161, 1, 225, 110, 161, 1, 224, 67, 161, 1, 155, 161, 1, 250, 183, 161, 1, - 179, 161, 1, 239, 11, 161, 1, 249, 244, 161, 1, 221, 53, 161, 1, 238, 42, - 161, 1, 249, 101, 161, 1, 220, 82, 161, 1, 239, 71, 161, 1, 250, 61, 161, - 1, 221, 174, 161, 1, 238, 149, 161, 1, 249, 184, 161, 1, 220, 211, 161, - 1, 185, 161, 1, 226, 254, 161, 1, 226, 114, 161, 1, 227, 119, 161, 1, - 226, 181, 161, 1, 5, 190, 161, 1, 190, 161, 1, 5, 205, 213, 161, 1, 205, - 213, 161, 1, 5, 205, 247, 161, 1, 205, 247, 161, 1, 219, 113, 161, 1, - 218, 208, 161, 1, 218, 50, 161, 1, 219, 51, 161, 1, 218, 124, 161, 1, 5, - 207, 96, 161, 1, 207, 96, 161, 1, 207, 20, 161, 1, 207, 51, 161, 1, 206, - 250, 161, 1, 226, 33, 161, 1, 207, 148, 161, 1, 5, 172, 161, 1, 5, 231, - 224, 36, 231, 248, 208, 170, 214, 165, 83, 36, 231, 248, 216, 57, 214, - 165, 83, 231, 248, 208, 170, 214, 165, 83, 231, 248, 216, 57, 214, 165, - 83, 161, 232, 218, 83, 161, 208, 170, 232, 218, 83, 161, 245, 128, 205, - 228, 231, 248, 50, 237, 239, 64, 1, 5, 62, 64, 1, 62, 64, 1, 5, 74, 64, - 1, 74, 64, 1, 5, 71, 64, 1, 71, 64, 1, 5, 75, 64, 1, 75, 64, 1, 5, 76, - 64, 1, 76, 64, 1, 172, 64, 1, 240, 244, 64, 1, 231, 123, 64, 1, 240, 61, - 64, 1, 230, 236, 64, 1, 239, 213, 64, 1, 231, 224, 64, 1, 240, 170, 64, - 1, 231, 53, 64, 1, 240, 19, 64, 1, 217, 199, 64, 1, 205, 116, 64, 1, 215, - 80, 64, 1, 205, 40, 64, 1, 213, 203, 64, 1, 205, 9, 64, 1, 217, 86, 64, - 1, 205, 93, 64, 1, 214, 193, 64, 1, 205, 19, 64, 1, 212, 219, 64, 1, 246, - 145, 64, 1, 211, 211, 64, 1, 245, 168, 64, 1, 5, 210, 170, 64, 1, 210, - 170, 64, 1, 243, 237, 64, 1, 212, 131, 64, 1, 246, 9, 64, 1, 124, 64, 1, - 245, 51, 64, 1, 199, 64, 1, 224, 230, 64, 1, 223, 217, 64, 1, 225, 110, - 64, 1, 224, 67, 64, 1, 155, 64, 1, 250, 183, 64, 1, 179, 64, 1, 239, 11, - 64, 1, 249, 244, 64, 1, 221, 53, 64, 1, 238, 42, 64, 1, 249, 101, 64, 1, - 220, 82, 64, 1, 239, 71, 64, 1, 250, 61, 64, 1, 221, 174, 64, 1, 238, - 149, 64, 1, 249, 184, 64, 1, 220, 211, 64, 1, 185, 64, 1, 226, 254, 64, - 1, 226, 114, 64, 1, 227, 119, 64, 1, 226, 181, 64, 1, 5, 190, 64, 1, 190, - 64, 1, 5, 205, 213, 64, 1, 205, 213, 64, 1, 5, 205, 247, 64, 1, 205, 247, - 64, 1, 219, 113, 64, 1, 218, 208, 64, 1, 218, 50, 64, 1, 219, 51, 64, 1, - 218, 124, 64, 1, 5, 207, 96, 64, 1, 207, 96, 64, 1, 207, 20, 64, 1, 207, - 51, 64, 1, 206, 250, 64, 1, 226, 33, 64, 1, 207, 148, 64, 1, 5, 172, 64, - 1, 5, 231, 224, 64, 1, 209, 70, 64, 1, 208, 214, 64, 1, 209, 39, 64, 1, - 208, 173, 64, 226, 247, 245, 23, 231, 248, 220, 106, 214, 165, 83, 64, - 232, 218, 83, 64, 208, 170, 232, 218, 83, 64, 245, 128, 231, 20, 249, - 163, 1, 251, 150, 249, 163, 1, 222, 67, 249, 163, 1, 229, 28, 249, 163, - 1, 242, 139, 249, 163, 1, 246, 240, 249, 163, 1, 213, 10, 249, 163, 1, - 226, 33, 249, 163, 1, 149, 249, 163, 1, 241, 55, 249, 163, 1, 232, 76, - 249, 163, 1, 239, 155, 249, 163, 1, 232, 203, 249, 163, 1, 220, 27, 249, - 163, 1, 206, 195, 249, 163, 1, 205, 82, 249, 163, 1, 248, 111, 249, 163, - 1, 216, 4, 249, 163, 1, 137, 249, 163, 1, 205, 159, 249, 163, 1, 249, 34, - 249, 163, 1, 182, 249, 163, 1, 62, 249, 163, 1, 76, 249, 163, 1, 75, 249, - 163, 1, 243, 92, 249, 163, 1, 252, 205, 249, 163, 1, 243, 90, 249, 163, - 1, 251, 184, 249, 163, 1, 222, 97, 249, 163, 1, 252, 122, 249, 163, 1, - 243, 41, 249, 163, 1, 252, 114, 249, 163, 1, 243, 28, 249, 163, 1, 242, - 235, 249, 163, 1, 74, 249, 163, 1, 71, 249, 163, 1, 232, 216, 249, 163, - 1, 209, 148, 249, 163, 1, 225, 79, 249, 163, 1, 240, 23, 249, 163, 1, - 233, 103, 25, 1, 231, 84, 25, 1, 214, 88, 25, 1, 231, 77, 25, 1, 224, - 223, 25, 1, 224, 221, 25, 1, 224, 220, 25, 1, 211, 193, 25, 1, 214, 77, - 25, 1, 218, 198, 25, 1, 218, 193, 25, 1, 218, 190, 25, 1, 218, 183, 25, - 1, 218, 178, 25, 1, 218, 173, 25, 1, 218, 184, 25, 1, 218, 196, 25, 1, - 226, 240, 25, 1, 221, 39, 25, 1, 214, 85, 25, 1, 221, 28, 25, 1, 215, 33, - 25, 1, 214, 82, 25, 1, 233, 125, 25, 1, 247, 246, 25, 1, 214, 92, 25, 1, - 248, 54, 25, 1, 231, 143, 25, 1, 212, 15, 25, 1, 221, 76, 25, 1, 239, 3, - 25, 1, 62, 25, 1, 252, 248, 25, 1, 190, 25, 1, 206, 98, 25, 1, 243, 6, - 25, 1, 75, 25, 1, 206, 39, 25, 1, 206, 52, 25, 1, 76, 25, 1, 207, 96, 25, - 1, 207, 92, 25, 1, 222, 206, 25, 1, 205, 247, 25, 1, 71, 25, 1, 207, 38, - 25, 1, 207, 51, 25, 1, 207, 20, 25, 1, 205, 213, 25, 1, 242, 192, 25, 1, - 206, 11, 25, 1, 74, 25, 241, 232, 25, 1, 214, 86, 25, 1, 224, 213, 25, 1, - 224, 215, 25, 1, 224, 218, 25, 1, 218, 191, 25, 1, 218, 172, 25, 1, 218, - 180, 25, 1, 218, 185, 25, 1, 218, 170, 25, 1, 226, 233, 25, 1, 226, 230, - 25, 1, 226, 234, 25, 1, 232, 13, 25, 1, 221, 34, 25, 1, 221, 20, 25, 1, - 221, 26, 25, 1, 221, 23, 25, 1, 221, 37, 25, 1, 221, 21, 25, 1, 232, 11, - 25, 1, 232, 9, 25, 1, 215, 26, 25, 1, 215, 24, 25, 1, 215, 16, 25, 1, - 215, 21, 25, 1, 215, 31, 25, 1, 221, 247, 25, 1, 214, 89, 25, 1, 206, 29, - 25, 1, 206, 25, 25, 1, 206, 26, 25, 1, 232, 12, 25, 1, 214, 90, 25, 1, - 206, 35, 25, 1, 205, 241, 25, 1, 205, 240, 25, 1, 205, 243, 25, 1, 205, - 204, 25, 1, 205, 205, 25, 1, 205, 208, 25, 1, 252, 30, 25, 1, 252, 24, - 128, 252, 98, 229, 194, 83, 128, 252, 98, 218, 225, 83, 128, 252, 98, - 119, 83, 128, 252, 98, 118, 83, 128, 252, 98, 129, 83, 128, 252, 98, 241, - 125, 83, 128, 252, 98, 211, 102, 83, 128, 252, 98, 226, 247, 83, 128, - 252, 98, 249, 154, 83, 128, 252, 98, 241, 215, 83, 128, 252, 98, 217, 80, - 83, 128, 252, 98, 212, 11, 83, 128, 252, 98, 241, 118, 83, 128, 252, 98, - 239, 57, 83, 128, 252, 98, 243, 121, 83, 128, 252, 98, 227, 222, 83, 249, - 163, 1, 249, 101, 249, 163, 1, 205, 40, 249, 163, 1, 232, 162, 249, 163, - 1, 239, 213, 249, 163, 1, 243, 104, 249, 163, 1, 243, 25, 249, 163, 1, - 222, 152, 249, 163, 1, 222, 156, 249, 163, 1, 232, 243, 249, 163, 1, 252, - 100, 249, 163, 1, 233, 35, 249, 163, 1, 209, 211, 249, 163, 1, 233, 85, - 249, 163, 1, 225, 57, 249, 163, 1, 252, 199, 249, 163, 1, 251, 179, 249, - 163, 1, 252, 136, 249, 163, 1, 222, 173, 249, 163, 1, 222, 158, 249, 163, - 1, 233, 32, 249, 163, 42, 1, 222, 67, 249, 163, 42, 1, 213, 10, 249, 163, - 42, 1, 232, 76, 249, 163, 42, 1, 239, 155, 249, 163, 1, 240, 100, 249, - 163, 1, 229, 249, 249, 163, 1, 204, 245, 10, 213, 225, 213, 10, 10, 213, - 225, 207, 31, 10, 213, 225, 206, 170, 10, 213, 225, 249, 47, 10, 213, - 225, 213, 113, 10, 213, 225, 237, 229, 10, 213, 225, 237, 233, 10, 213, - 225, 238, 51, 10, 213, 225, 237, 230, 10, 213, 225, 213, 13, 10, 213, - 225, 237, 232, 10, 213, 225, 237, 228, 10, 213, 225, 238, 49, 10, 213, - 225, 237, 231, 10, 213, 225, 237, 227, 10, 213, 225, 226, 33, 10, 213, - 225, 239, 155, 10, 213, 225, 182, 10, 213, 225, 222, 67, 10, 213, 225, - 214, 156, 10, 213, 225, 246, 240, 10, 213, 225, 237, 234, 10, 213, 225, - 239, 21, 10, 213, 225, 213, 22, 10, 213, 225, 213, 92, 10, 213, 225, 214, - 40, 10, 213, 225, 216, 10, 10, 213, 225, 221, 178, 10, 213, 225, 220, 29, - 10, 213, 225, 211, 131, 10, 213, 225, 213, 12, 10, 213, 225, 213, 103, - 10, 213, 225, 237, 241, 10, 213, 225, 237, 226, 10, 213, 225, 221, 95, - 10, 213, 225, 220, 27, 64, 1, 5, 230, 236, 64, 1, 5, 215, 80, 64, 1, 5, - 213, 203, 64, 1, 5, 124, 64, 1, 5, 223, 217, 64, 1, 5, 155, 64, 1, 5, - 239, 11, 64, 1, 5, 238, 42, 64, 1, 5, 239, 71, 64, 1, 5, 238, 149, 64, 1, - 5, 226, 114, 64, 1, 5, 219, 113, 64, 1, 5, 218, 208, 64, 1, 5, 218, 50, - 64, 1, 5, 219, 51, 64, 1, 5, 218, 124, 97, 25, 231, 84, 97, 25, 224, 223, - 97, 25, 211, 193, 97, 25, 218, 198, 97, 25, 226, 240, 97, 25, 221, 39, - 97, 25, 215, 33, 97, 25, 233, 125, 97, 25, 247, 246, 97, 25, 248, 54, 97, - 25, 231, 143, 97, 25, 212, 15, 97, 25, 221, 76, 97, 25, 239, 3, 97, 25, - 231, 85, 62, 97, 25, 224, 224, 62, 97, 25, 211, 194, 62, 97, 25, 218, - 199, 62, 97, 25, 226, 241, 62, 97, 25, 221, 40, 62, 97, 25, 215, 34, 62, - 97, 25, 233, 126, 62, 97, 25, 247, 247, 62, 97, 25, 248, 55, 62, 97, 25, - 231, 144, 62, 97, 25, 212, 16, 62, 97, 25, 221, 77, 62, 97, 25, 239, 4, - 62, 97, 25, 247, 247, 71, 97, 231, 24, 157, 222, 188, 97, 231, 24, 157, - 148, 238, 42, 97, 175, 102, 97, 175, 105, 97, 175, 142, 97, 175, 139, 97, - 175, 168, 97, 175, 184, 97, 175, 195, 97, 175, 193, 97, 175, 200, 97, - 175, 212, 98, 97, 175, 226, 144, 97, 175, 241, 219, 97, 175, 207, 69, 97, - 175, 206, 237, 97, 175, 227, 63, 97, 175, 243, 120, 97, 175, 213, 154, - 97, 175, 213, 254, 97, 175, 239, 78, 97, 175, 214, 189, 97, 175, 225, - 210, 97, 175, 214, 138, 97, 175, 241, 229, 97, 175, 247, 133, 97, 175, - 230, 130, 97, 175, 218, 246, 97, 175, 248, 236, 97, 175, 213, 207, 97, - 175, 213, 136, 97, 175, 243, 16, 97, 175, 218, 238, 97, 175, 252, 152, - 97, 175, 242, 1, 97, 175, 218, 236, 97, 175, 216, 58, 97, 175, 219, 50, - 39, 175, 219, 195, 39, 175, 231, 108, 39, 175, 217, 103, 39, 175, 231, - 20, 39, 43, 212, 99, 222, 166, 60, 214, 107, 39, 43, 210, 124, 222, 166, - 60, 214, 107, 39, 43, 212, 4, 222, 166, 60, 214, 107, 39, 43, 241, 131, - 222, 166, 60, 214, 107, 39, 43, 241, 244, 222, 166, 60, 214, 107, 39, 43, - 214, 253, 222, 166, 60, 214, 107, 39, 43, 216, 18, 222, 166, 60, 214, - 107, 39, 43, 243, 80, 222, 166, 60, 214, 107, 221, 207, 53, 39, 43, 210, - 124, 102, 39, 43, 210, 124, 105, 39, 43, 210, 124, 142, 39, 43, 210, 124, - 139, 39, 43, 210, 124, 168, 39, 43, 210, 124, 184, 39, 43, 210, 124, 195, - 39, 43, 210, 124, 193, 39, 43, 210, 124, 200, 39, 43, 212, 3, 39, 43, - 212, 4, 102, 39, 43, 212, 4, 105, 39, 43, 212, 4, 142, 39, 43, 212, 4, - 139, 39, 43, 212, 4, 168, 39, 25, 231, 84, 39, 25, 224, 223, 39, 25, 211, - 193, 39, 25, 218, 198, 39, 25, 226, 240, 39, 25, 221, 39, 39, 25, 215, - 33, 39, 25, 233, 125, 39, 25, 247, 246, 39, 25, 248, 54, 39, 25, 231, - 143, 39, 25, 212, 15, 39, 25, 221, 76, 39, 25, 239, 3, 39, 25, 231, 85, - 62, 39, 25, 224, 224, 62, 39, 25, 211, 194, 62, 39, 25, 218, 199, 62, 39, - 25, 226, 241, 62, 39, 25, 221, 40, 62, 39, 25, 215, 34, 62, 39, 25, 233, - 126, 62, 39, 25, 247, 247, 62, 39, 25, 248, 55, 62, 39, 25, 231, 144, 62, - 39, 25, 212, 16, 62, 39, 25, 221, 77, 62, 39, 25, 239, 4, 62, 39, 231, - 24, 157, 248, 101, 39, 231, 24, 157, 232, 100, 39, 25, 233, 126, 71, 231, - 24, 214, 29, 93, 39, 175, 102, 39, 175, 105, 39, 175, 142, 39, 175, 139, - 39, 175, 168, 39, 175, 184, 39, 175, 195, 39, 175, 193, 39, 175, 200, 39, - 175, 212, 98, 39, 175, 226, 144, 39, 175, 241, 219, 39, 175, 207, 69, 39, - 175, 206, 237, 39, 175, 227, 63, 39, 175, 243, 120, 39, 175, 213, 154, - 39, 175, 213, 254, 39, 175, 239, 78, 39, 175, 214, 189, 39, 175, 225, - 210, 39, 175, 214, 138, 39, 175, 241, 229, 39, 175, 247, 133, 39, 175, - 230, 130, 39, 175, 217, 78, 39, 175, 227, 225, 39, 175, 242, 10, 39, 175, - 213, 166, 39, 175, 242, 171, 39, 175, 220, 124, 39, 175, 251, 188, 39, - 175, 232, 219, 39, 175, 218, 236, 39, 175, 247, 95, 39, 175, 247, 86, 39, - 175, 238, 252, 39, 175, 248, 128, 39, 175, 229, 97, 39, 175, 230, 46, 39, - 175, 218, 167, 39, 175, 227, 110, 39, 175, 219, 7, 39, 175, 213, 207, 39, - 175, 213, 136, 39, 175, 243, 16, 39, 175, 218, 238, 39, 175, 252, 152, - 39, 175, 224, 209, 39, 43, 212, 4, 184, 39, 43, 212, 4, 195, 39, 43, 212, - 4, 193, 39, 43, 212, 4, 200, 39, 43, 241, 130, 39, 43, 241, 131, 102, 39, - 43, 241, 131, 105, 39, 43, 241, 131, 142, 39, 43, 241, 131, 139, 39, 43, - 241, 131, 168, 39, 43, 241, 131, 184, 39, 43, 241, 131, 195, 39, 43, 241, - 131, 193, 39, 43, 241, 131, 200, 39, 43, 241, 243, 128, 212, 110, 16, 33, - 232, 191, 128, 212, 110, 16, 33, 242, 22, 128, 212, 110, 16, 33, 227, - 193, 128, 212, 110, 16, 33, 252, 43, 128, 212, 110, 16, 33, 227, 162, - 128, 212, 110, 16, 33, 232, 98, 128, 212, 110, 16, 33, 232, 99, 128, 212, - 110, 16, 33, 251, 180, 128, 212, 110, 16, 33, 216, 38, 128, 212, 110, 16, - 33, 222, 212, 128, 212, 110, 16, 33, 224, 30, 128, 212, 110, 16, 33, 246, - 4, 49, 239, 21, 49, 242, 231, 49, 242, 180, 229, 211, 229, 234, 53, 39, - 64, 62, 39, 64, 74, 39, 64, 71, 39, 64, 75, 39, 64, 76, 39, 64, 172, 39, - 64, 231, 123, 39, 64, 230, 236, 39, 64, 231, 224, 39, 64, 231, 53, 39, - 64, 217, 199, 39, 64, 215, 80, 39, 64, 213, 203, 39, 64, 217, 86, 39, 64, - 214, 193, 39, 64, 212, 219, 39, 64, 211, 211, 39, 64, 210, 170, 39, 64, - 212, 131, 39, 64, 124, 39, 64, 199, 39, 64, 224, 230, 39, 64, 223, 217, - 39, 64, 225, 110, 39, 64, 224, 67, 39, 64, 155, 39, 64, 239, 11, 39, 64, - 238, 42, 39, 64, 239, 71, 39, 64, 238, 149, 39, 64, 185, 39, 64, 226, - 254, 39, 64, 226, 114, 39, 64, 227, 119, 39, 64, 226, 181, 39, 64, 190, - 39, 64, 205, 213, 39, 64, 205, 247, 39, 64, 219, 113, 39, 64, 218, 208, - 39, 64, 218, 50, 39, 64, 219, 51, 39, 64, 218, 124, 39, 64, 207, 96, 39, - 64, 207, 20, 39, 64, 207, 51, 39, 64, 206, 250, 49, 252, 67, 49, 251, - 233, 49, 252, 94, 49, 253, 122, 49, 233, 37, 49, 233, 5, 49, 209, 209, - 49, 242, 205, 49, 243, 101, 49, 222, 155, 49, 222, 148, 49, 232, 39, 49, - 232, 5, 49, 232, 2, 49, 240, 200, 49, 240, 209, 49, 240, 50, 49, 240, 46, - 49, 230, 160, 49, 240, 38, 49, 231, 100, 49, 231, 99, 49, 231, 98, 49, - 231, 97, 49, 239, 184, 49, 239, 183, 49, 230, 207, 49, 230, 209, 49, 231, - 217, 49, 231, 22, 49, 231, 30, 49, 217, 180, 49, 217, 144, 49, 215, 14, - 49, 216, 43, 49, 216, 42, 49, 246, 142, 49, 245, 205, 49, 245, 24, 49, - 211, 120, 49, 225, 205, 49, 224, 31, 49, 239, 126, 49, 222, 46, 49, 222, - 45, 49, 250, 180, 49, 221, 50, 49, 221, 13, 49, 221, 14, 49, 249, 215, - 49, 238, 40, 49, 238, 36, 49, 249, 60, 49, 238, 22, 49, 239, 47, 49, 221, - 105, 49, 221, 145, 49, 239, 30, 49, 221, 141, 49, 221, 159, 49, 250, 45, - 49, 220, 200, 49, 249, 159, 49, 238, 134, 49, 220, 188, 49, 238, 126, 49, - 238, 128, 49, 227, 237, 49, 227, 233, 49, 227, 242, 49, 227, 182, 49, - 227, 209, 49, 226, 220, 49, 226, 196, 49, 226, 195, 49, 227, 99, 49, 227, - 96, 49, 227, 100, 49, 206, 108, 49, 206, 106, 49, 205, 202, 49, 218, 140, - 49, 218, 144, 49, 218, 26, 49, 218, 20, 49, 219, 4, 49, 219, 1, 49, 207, - 67, 128, 212, 110, 16, 33, 238, 59, 205, 85, 128, 212, 110, 16, 33, 238, - 59, 102, 128, 212, 110, 16, 33, 238, 59, 105, 128, 212, 110, 16, 33, 238, - 59, 142, 128, 212, 110, 16, 33, 238, 59, 139, 128, 212, 110, 16, 33, 238, - 59, 168, 128, 212, 110, 16, 33, 238, 59, 184, 128, 212, 110, 16, 33, 238, - 59, 195, 128, 212, 110, 16, 33, 238, 59, 193, 128, 212, 110, 16, 33, 238, - 59, 200, 128, 212, 110, 16, 33, 238, 59, 212, 98, 128, 212, 110, 16, 33, - 238, 59, 243, 58, 128, 212, 110, 16, 33, 238, 59, 210, 126, 128, 212, - 110, 16, 33, 238, 59, 212, 5, 128, 212, 110, 16, 33, 238, 59, 241, 119, - 128, 212, 110, 16, 33, 238, 59, 241, 247, 128, 212, 110, 16, 33, 238, 59, - 215, 4, 128, 212, 110, 16, 33, 238, 59, 216, 20, 128, 212, 110, 16, 33, - 238, 59, 243, 85, 128, 212, 110, 16, 33, 238, 59, 224, 192, 128, 212, - 110, 16, 33, 238, 59, 210, 123, 128, 212, 110, 16, 33, 238, 59, 210, 117, - 128, 212, 110, 16, 33, 238, 59, 210, 113, 128, 212, 110, 16, 33, 238, 59, - 210, 114, 128, 212, 110, 16, 33, 238, 59, 210, 119, 49, 238, 50, 49, 246, - 145, 49, 251, 184, 49, 134, 49, 222, 88, 49, 221, 179, 49, 245, 53, 49, - 245, 54, 214, 106, 49, 245, 54, 247, 35, 49, 232, 216, 49, 242, 234, 225, - 211, 239, 48, 49, 242, 234, 225, 211, 213, 33, 49, 242, 234, 225, 211, - 212, 188, 49, 242, 234, 225, 211, 227, 95, 49, 247, 88, 49, 222, 52, 252, - 124, 49, 199, 49, 226, 115, 62, 49, 185, 49, 172, 49, 231, 227, 49, 227, - 158, 49, 240, 188, 49, 248, 241, 49, 231, 226, 49, 221, 96, 49, 225, 81, - 49, 226, 115, 242, 139, 49, 226, 115, 241, 55, 49, 227, 39, 49, 231, 169, - 49, 237, 234, 49, 231, 125, 49, 227, 0, 49, 240, 63, 49, 211, 213, 49, - 226, 115, 149, 49, 226, 189, 49, 245, 63, 49, 231, 66, 49, 241, 164, 49, - 224, 105, 49, 226, 115, 229, 28, 49, 226, 186, 49, 247, 175, 49, 231, 60, - 49, 226, 187, 214, 106, 49, 247, 176, 214, 106, 49, 229, 29, 214, 106, - 49, 231, 61, 214, 106, 49, 226, 187, 247, 35, 49, 247, 176, 247, 35, 49, - 229, 29, 247, 35, 49, 231, 61, 247, 35, 49, 229, 29, 131, 182, 49, 229, - 29, 131, 218, 1, 214, 106, 49, 179, 49, 231, 15, 49, 226, 118, 49, 239, - 251, 49, 219, 100, 49, 219, 101, 131, 182, 49, 219, 101, 131, 218, 1, - 214, 106, 49, 220, 95, 49, 223, 255, 49, 226, 115, 182, 49, 226, 116, 49, - 220, 47, 49, 223, 155, 49, 226, 115, 209, 148, 49, 226, 57, 49, 230, 198, - 49, 226, 58, 227, 99, 49, 220, 46, 49, 223, 154, 49, 226, 115, 207, 129, - 49, 226, 51, 49, 230, 196, 49, 226, 52, 227, 99, 49, 232, 77, 222, 192, - 49, 229, 29, 222, 192, 49, 252, 136, 49, 249, 136, 49, 248, 172, 49, 248, - 149, 49, 249, 35, 131, 231, 169, 49, 247, 174, 49, 246, 63, 49, 239, 168, - 49, 155, 49, 238, 51, 49, 233, 68, 49, 231, 73, 49, 231, 61, 248, 212, - 49, 230, 238, 49, 229, 147, 49, 229, 146, 49, 229, 135, 49, 229, 43, 49, - 227, 159, 214, 215, 49, 226, 219, 49, 226, 170, 49, 221, 94, 49, 220, - 214, 49, 220, 156, 49, 220, 154, 49, 214, 100, 49, 213, 117, 49, 207, 53, - 49, 209, 149, 131, 229, 28, 49, 32, 131, 229, 28, 128, 212, 110, 16, 33, - 246, 67, 102, 128, 212, 110, 16, 33, 246, 67, 105, 128, 212, 110, 16, 33, - 246, 67, 142, 128, 212, 110, 16, 33, 246, 67, 139, 128, 212, 110, 16, 33, - 246, 67, 168, 128, 212, 110, 16, 33, 246, 67, 184, 128, 212, 110, 16, 33, - 246, 67, 195, 128, 212, 110, 16, 33, 246, 67, 193, 128, 212, 110, 16, 33, - 246, 67, 200, 128, 212, 110, 16, 33, 246, 67, 212, 98, 128, 212, 110, 16, - 33, 246, 67, 243, 58, 128, 212, 110, 16, 33, 246, 67, 210, 126, 128, 212, - 110, 16, 33, 246, 67, 212, 5, 128, 212, 110, 16, 33, 246, 67, 241, 119, - 128, 212, 110, 16, 33, 246, 67, 241, 247, 128, 212, 110, 16, 33, 246, 67, - 215, 4, 128, 212, 110, 16, 33, 246, 67, 216, 20, 128, 212, 110, 16, 33, - 246, 67, 243, 85, 128, 212, 110, 16, 33, 246, 67, 224, 192, 128, 212, - 110, 16, 33, 246, 67, 210, 123, 128, 212, 110, 16, 33, 246, 67, 210, 117, - 128, 212, 110, 16, 33, 246, 67, 210, 113, 128, 212, 110, 16, 33, 246, 67, - 210, 114, 128, 212, 110, 16, 33, 246, 67, 210, 119, 128, 212, 110, 16, - 33, 246, 67, 210, 120, 128, 212, 110, 16, 33, 246, 67, 210, 115, 128, - 212, 110, 16, 33, 246, 67, 210, 116, 128, 212, 110, 16, 33, 246, 67, 210, - 122, 128, 212, 110, 16, 33, 246, 67, 210, 118, 128, 212, 110, 16, 33, - 246, 67, 212, 3, 128, 212, 110, 16, 33, 246, 67, 212, 2, 49, 240, 226, - 239, 24, 33, 212, 42, 247, 69, 239, 56, 239, 24, 33, 212, 42, 219, 44, - 243, 120, 239, 24, 33, 245, 138, 251, 200, 212, 42, 250, 40, 239, 24, 33, - 205, 226, 241, 156, 239, 24, 33, 207, 89, 239, 24, 33, 247, 136, 239, 24, - 33, 212, 42, 251, 254, 239, 24, 33, 238, 141, 211, 126, 239, 24, 33, 5, - 212, 175, 239, 24, 33, 211, 63, 239, 24, 33, 221, 172, 239, 24, 33, 214, - 28, 239, 24, 33, 242, 12, 239, 24, 33, 239, 232, 220, 177, 239, 24, 33, - 226, 174, 239, 24, 33, 243, 15, 239, 24, 33, 241, 157, 239, 24, 33, 206, - 230, 222, 166, 212, 42, 246, 5, 239, 24, 33, 252, 47, 239, 24, 33, 247, - 117, 239, 24, 33, 249, 208, 211, 232, 239, 24, 33, 239, 249, 239, 24, 33, - 214, 120, 252, 66, 239, 24, 33, 218, 228, 239, 24, 33, 233, 31, 239, 24, - 33, 239, 232, 212, 175, 239, 24, 33, 226, 124, 247, 90, 239, 24, 33, 239, - 232, 220, 134, 239, 24, 33, 212, 42, 253, 26, 207, 69, 239, 24, 33, 212, - 42, 247, 200, 241, 219, 239, 24, 33, 233, 44, 239, 24, 33, 243, 216, 239, - 24, 33, 218, 231, 239, 24, 33, 239, 232, 220, 161, 239, 24, 33, 220, 112, - 239, 24, 33, 246, 83, 73, 212, 42, 229, 223, 239, 24, 33, 212, 42, 242, - 48, 239, 24, 33, 222, 128, 239, 24, 33, 222, 218, 239, 24, 33, 245, 232, - 239, 24, 33, 245, 253, 239, 24, 33, 233, 59, 239, 24, 33, 249, 125, 239, - 24, 33, 247, 157, 211, 130, 227, 102, 239, 24, 33, 240, 195, 211, 126, - 239, 24, 33, 220, 56, 209, 197, 239, 24, 33, 222, 127, 239, 24, 33, 212, - 42, 207, 40, 239, 24, 33, 218, 219, 239, 24, 33, 212, 42, 248, 178, 239, - 24, 33, 212, 42, 251, 250, 211, 227, 239, 24, 33, 212, 42, 231, 218, 214, - 2, 226, 128, 239, 24, 33, 245, 200, 239, 24, 33, 212, 42, 227, 184, 227, - 238, 239, 24, 33, 253, 27, 239, 24, 33, 212, 42, 207, 84, 239, 24, 33, - 212, 42, 240, 153, 207, 9, 239, 24, 33, 212, 42, 232, 106, 230, 111, 239, - 24, 33, 245, 91, 239, 24, 33, 229, 212, 239, 24, 33, 233, 34, 210, 247, - 239, 24, 33, 5, 220, 134, 239, 24, 33, 252, 221, 247, 148, 239, 24, 33, - 250, 43, 247, 148, 9, 4, 232, 220, 9, 4, 232, 212, 9, 4, 74, 9, 4, 232, - 246, 9, 4, 233, 127, 9, 4, 233, 110, 9, 4, 233, 129, 9, 4, 233, 128, 9, - 4, 251, 199, 9, 4, 251, 161, 9, 4, 62, 9, 4, 252, 68, 9, 4, 209, 207, 9, - 4, 209, 210, 9, 4, 209, 208, 9, 4, 222, 103, 9, 4, 222, 76, 9, 4, 76, 9, - 4, 222, 143, 9, 4, 242, 172, 9, 4, 75, 9, 4, 206, 216, 9, 4, 249, 209, 9, - 4, 249, 206, 9, 4, 249, 244, 9, 4, 249, 219, 9, 4, 249, 233, 9, 4, 249, - 232, 9, 4, 249, 235, 9, 4, 249, 234, 9, 4, 250, 108, 9, 4, 250, 100, 9, - 4, 250, 183, 9, 4, 250, 130, 9, 4, 249, 71, 9, 4, 249, 75, 9, 4, 249, 72, - 9, 4, 249, 158, 9, 4, 249, 140, 9, 4, 249, 184, 9, 4, 249, 164, 9, 4, - 250, 3, 9, 4, 250, 61, 9, 4, 250, 15, 9, 4, 249, 56, 9, 4, 249, 52, 9, 4, - 249, 101, 9, 4, 249, 70, 9, 4, 249, 64, 9, 4, 249, 68, 9, 4, 249, 40, 9, - 4, 249, 38, 9, 4, 249, 45, 9, 4, 249, 43, 9, 4, 249, 41, 9, 4, 249, 42, - 9, 4, 220, 247, 9, 4, 220, 243, 9, 4, 221, 53, 9, 4, 221, 3, 9, 4, 221, - 19, 9, 4, 221, 46, 9, 4, 221, 42, 9, 4, 221, 195, 9, 4, 221, 184, 9, 4, - 179, 9, 4, 221, 236, 9, 4, 220, 66, 9, 4, 220, 68, 9, 4, 220, 67, 9, 4, - 220, 170, 9, 4, 220, 159, 9, 4, 220, 211, 9, 4, 220, 183, 9, 4, 220, 52, - 9, 4, 220, 48, 9, 4, 220, 82, 9, 4, 220, 65, 9, 4, 220, 57, 9, 4, 220, - 63, 9, 4, 220, 31, 9, 4, 220, 30, 9, 4, 220, 35, 9, 4, 220, 34, 9, 4, - 220, 32, 9, 4, 220, 33, 9, 4, 250, 82, 9, 4, 250, 81, 9, 4, 250, 88, 9, - 4, 250, 83, 9, 4, 250, 85, 9, 4, 250, 84, 9, 4, 250, 87, 9, 4, 250, 86, - 9, 4, 250, 94, 9, 4, 250, 93, 9, 4, 250, 97, 9, 4, 250, 95, 9, 4, 250, - 73, 9, 4, 250, 75, 9, 4, 250, 74, 9, 4, 250, 78, 9, 4, 250, 77, 9, 4, - 250, 80, 9, 4, 250, 79, 9, 4, 250, 89, 9, 4, 250, 92, 9, 4, 250, 90, 9, - 4, 250, 69, 9, 4, 250, 68, 9, 4, 250, 76, 9, 4, 250, 72, 9, 4, 250, 70, - 9, 4, 250, 71, 9, 4, 250, 65, 9, 4, 250, 64, 9, 4, 250, 67, 9, 4, 250, - 66, 9, 4, 225, 173, 9, 4, 225, 172, 9, 4, 225, 178, 9, 4, 225, 174, 9, 4, - 225, 175, 9, 4, 225, 177, 9, 4, 225, 176, 9, 4, 225, 181, 9, 4, 225, 180, - 9, 4, 225, 183, 9, 4, 225, 182, 9, 4, 225, 169, 9, 4, 225, 168, 9, 4, - 225, 171, 9, 4, 225, 170, 9, 4, 225, 162, 9, 4, 225, 161, 9, 4, 225, 166, - 9, 4, 225, 165, 9, 4, 225, 163, 9, 4, 225, 164, 9, 4, 225, 156, 9, 4, - 225, 155, 9, 4, 225, 160, 9, 4, 225, 159, 9, 4, 225, 157, 9, 4, 225, 158, - 9, 4, 238, 193, 9, 4, 238, 192, 9, 4, 238, 198, 9, 4, 238, 194, 9, 4, - 238, 195, 9, 4, 238, 197, 9, 4, 238, 196, 9, 4, 238, 201, 9, 4, 238, 200, - 9, 4, 238, 203, 9, 4, 238, 202, 9, 4, 238, 184, 9, 4, 238, 186, 9, 4, - 238, 185, 9, 4, 238, 189, 9, 4, 238, 188, 9, 4, 238, 191, 9, 4, 238, 190, - 9, 4, 238, 180, 9, 4, 238, 179, 9, 4, 238, 187, 9, 4, 238, 183, 9, 4, - 238, 181, 9, 4, 238, 182, 9, 4, 238, 174, 9, 4, 238, 178, 9, 4, 238, 177, - 9, 4, 238, 175, 9, 4, 238, 176, 9, 4, 226, 192, 9, 4, 226, 191, 9, 4, - 226, 254, 9, 4, 226, 198, 9, 4, 226, 226, 9, 4, 226, 244, 9, 4, 226, 242, - 9, 4, 227, 170, 9, 4, 227, 165, 9, 4, 185, 9, 4, 227, 205, 9, 4, 226, 83, - 9, 4, 226, 82, 9, 4, 226, 86, 9, 4, 226, 84, 9, 4, 226, 137, 9, 4, 226, - 120, 9, 4, 226, 181, 9, 4, 226, 142, 9, 4, 227, 50, 9, 4, 227, 119, 9, 4, - 226, 63, 9, 4, 226, 59, 9, 4, 226, 114, 9, 4, 226, 79, 9, 4, 226, 72, 9, - 4, 226, 77, 9, 4, 226, 36, 9, 4, 226, 35, 9, 4, 226, 41, 9, 4, 226, 38, - 9, 4, 241, 206, 9, 4, 241, 201, 9, 4, 241, 250, 9, 4, 241, 221, 9, 4, - 242, 41, 9, 4, 242, 32, 9, 4, 242, 73, 9, 4, 242, 44, 9, 4, 241, 117, 9, - 4, 241, 162, 9, 4, 241, 143, 9, 4, 241, 71, 9, 4, 241, 70, 9, 4, 241, 88, - 9, 4, 241, 76, 9, 4, 241, 74, 9, 4, 241, 75, 9, 4, 241, 58, 9, 4, 241, - 57, 9, 4, 241, 61, 9, 4, 241, 59, 9, 4, 208, 180, 9, 4, 208, 175, 9, 4, - 208, 214, 9, 4, 208, 189, 9, 4, 208, 203, 9, 4, 208, 200, 9, 4, 208, 206, - 9, 4, 208, 205, 9, 4, 209, 47, 9, 4, 209, 42, 9, 4, 209, 70, 9, 4, 209, - 59, 9, 4, 208, 157, 9, 4, 208, 153, 9, 4, 208, 173, 9, 4, 208, 159, 9, 4, - 208, 217, 9, 4, 209, 28, 9, 4, 207, 142, 9, 4, 207, 140, 9, 4, 207, 148, - 9, 4, 207, 145, 9, 4, 207, 143, 9, 4, 207, 144, 9, 4, 207, 133, 9, 4, - 207, 132, 9, 4, 207, 137, 9, 4, 207, 136, 9, 4, 207, 134, 9, 4, 207, 135, - 9, 4, 245, 85, 9, 4, 245, 72, 9, 4, 245, 168, 9, 4, 245, 110, 9, 4, 245, - 143, 9, 4, 245, 148, 9, 4, 245, 147, 9, 4, 246, 74, 9, 4, 246, 68, 9, 4, - 246, 145, 9, 4, 246, 94, 9, 4, 243, 221, 9, 4, 243, 222, 9, 4, 245, 23, - 9, 4, 244, 5, 9, 4, 245, 51, 9, 4, 245, 25, 9, 4, 245, 198, 9, 4, 246, 9, - 9, 4, 245, 218, 9, 4, 243, 212, 9, 4, 243, 210, 9, 4, 243, 237, 9, 4, - 243, 220, 9, 4, 243, 215, 9, 4, 243, 218, 9, 4, 211, 156, 9, 4, 211, 149, - 9, 4, 211, 211, 9, 4, 211, 166, 9, 4, 211, 201, 9, 4, 211, 203, 9, 4, - 211, 202, 9, 4, 212, 156, 9, 4, 212, 142, 9, 4, 212, 219, 9, 4, 212, 166, - 9, 4, 210, 153, 9, 4, 210, 152, 9, 4, 210, 155, 9, 4, 210, 154, 9, 4, - 211, 91, 9, 4, 211, 85, 9, 4, 124, 9, 4, 211, 101, 9, 4, 212, 62, 9, 4, - 212, 131, 9, 4, 212, 87, 9, 4, 210, 138, 9, 4, 210, 133, 9, 4, 210, 170, - 9, 4, 210, 151, 9, 4, 210, 139, 9, 4, 210, 149, 9, 4, 246, 26, 9, 4, 246, - 25, 9, 4, 246, 31, 9, 4, 246, 27, 9, 4, 246, 28, 9, 4, 246, 30, 9, 4, - 246, 29, 9, 4, 246, 47, 9, 4, 246, 46, 9, 4, 246, 54, 9, 4, 246, 48, 9, - 4, 246, 16, 9, 4, 246, 18, 9, 4, 246, 17, 9, 4, 246, 21, 9, 4, 246, 20, - 9, 4, 246, 24, 9, 4, 246, 22, 9, 4, 246, 39, 9, 4, 246, 42, 9, 4, 246, - 40, 9, 4, 246, 12, 9, 4, 246, 11, 9, 4, 246, 19, 9, 4, 246, 15, 9, 4, - 246, 13, 9, 4, 246, 14, 9, 4, 225, 129, 9, 4, 225, 128, 9, 4, 225, 136, - 9, 4, 225, 131, 9, 4, 225, 132, 9, 4, 225, 133, 9, 4, 225, 145, 9, 4, - 225, 144, 9, 4, 225, 151, 9, 4, 225, 146, 9, 4, 225, 121, 9, 4, 225, 120, - 9, 4, 225, 127, 9, 4, 225, 122, 9, 4, 225, 137, 9, 4, 225, 143, 9, 4, - 225, 141, 9, 4, 225, 113, 9, 4, 225, 112, 9, 4, 225, 118, 9, 4, 225, 116, - 9, 4, 225, 114, 9, 4, 225, 115, 9, 4, 238, 159, 9, 4, 238, 158, 9, 4, - 238, 165, 9, 4, 238, 160, 9, 4, 238, 162, 9, 4, 238, 161, 9, 4, 238, 164, - 9, 4, 238, 163, 9, 4, 238, 171, 9, 4, 238, 169, 9, 4, 238, 173, 9, 4, - 238, 172, 9, 4, 238, 152, 9, 4, 238, 153, 9, 4, 238, 156, 9, 4, 238, 155, - 9, 4, 238, 157, 9, 4, 238, 166, 9, 4, 238, 168, 9, 4, 238, 167, 9, 4, - 238, 151, 9, 4, 224, 184, 9, 4, 224, 182, 9, 4, 224, 230, 9, 4, 224, 187, - 9, 4, 224, 212, 9, 4, 224, 226, 9, 4, 224, 225, 9, 4, 225, 187, 9, 4, - 199, 9, 4, 225, 202, 9, 4, 223, 165, 9, 4, 223, 167, 9, 4, 223, 166, 9, - 4, 224, 42, 9, 4, 224, 27, 9, 4, 224, 67, 9, 4, 224, 52, 9, 4, 225, 83, - 9, 4, 225, 110, 9, 4, 225, 96, 9, 4, 223, 160, 9, 4, 223, 156, 9, 4, 223, - 217, 9, 4, 223, 164, 9, 4, 223, 162, 9, 4, 223, 163, 9, 4, 238, 224, 9, - 4, 238, 223, 9, 4, 238, 229, 9, 4, 238, 225, 9, 4, 238, 226, 9, 4, 238, - 228, 9, 4, 238, 227, 9, 4, 238, 235, 9, 4, 238, 233, 9, 4, 238, 237, 9, - 4, 238, 236, 9, 4, 238, 216, 9, 4, 238, 218, 9, 4, 238, 217, 9, 4, 238, - 220, 9, 4, 238, 222, 9, 4, 238, 221, 9, 4, 238, 230, 9, 4, 238, 232, 9, - 4, 238, 231, 9, 4, 238, 212, 9, 4, 238, 211, 9, 4, 238, 219, 9, 4, 238, - 215, 9, 4, 238, 213, 9, 4, 238, 214, 9, 4, 238, 206, 9, 4, 238, 205, 9, - 4, 238, 210, 9, 4, 238, 209, 9, 4, 238, 207, 9, 4, 238, 208, 9, 4, 229, - 184, 9, 4, 229, 177, 9, 4, 229, 235, 9, 4, 229, 193, 9, 4, 229, 227, 9, - 4, 229, 226, 9, 4, 229, 230, 9, 4, 229, 228, 9, 4, 230, 80, 9, 4, 230, - 69, 9, 4, 230, 141, 9, 4, 230, 89, 9, 4, 229, 60, 9, 4, 229, 59, 9, 4, - 229, 62, 9, 4, 229, 61, 9, 4, 229, 103, 9, 4, 229, 90, 9, 4, 229, 144, 9, - 4, 229, 108, 9, 4, 229, 252, 9, 4, 230, 58, 9, 4, 230, 13, 9, 4, 229, 54, - 9, 4, 229, 52, 9, 4, 229, 81, 9, 4, 229, 58, 9, 4, 229, 56, 9, 4, 229, - 57, 9, 4, 229, 33, 9, 4, 229, 32, 9, 4, 229, 42, 9, 4, 229, 36, 9, 4, - 229, 34, 9, 4, 229, 35, 9, 4, 240, 34, 9, 4, 240, 33, 9, 4, 240, 61, 9, - 4, 240, 45, 9, 4, 240, 53, 9, 4, 240, 52, 9, 4, 240, 55, 9, 4, 240, 54, - 9, 4, 240, 197, 9, 4, 240, 192, 9, 4, 240, 244, 9, 4, 240, 207, 9, 4, - 239, 189, 9, 4, 239, 188, 9, 4, 239, 191, 9, 4, 239, 190, 9, 4, 239, 254, - 9, 4, 239, 252, 9, 4, 240, 19, 9, 4, 240, 6, 9, 4, 240, 139, 9, 4, 240, - 137, 9, 4, 240, 170, 9, 4, 240, 150, 9, 4, 239, 178, 9, 4, 239, 177, 9, - 4, 239, 213, 9, 4, 239, 187, 9, 4, 239, 179, 9, 4, 239, 186, 9, 4, 231, - 89, 9, 4, 231, 86, 9, 4, 231, 123, 9, 4, 231, 103, 9, 4, 231, 113, 9, 4, - 231, 116, 9, 4, 231, 114, 9, 4, 231, 249, 9, 4, 231, 232, 9, 4, 172, 9, - 4, 232, 20, 9, 4, 230, 214, 9, 4, 230, 219, 9, 4, 230, 216, 9, 4, 231, - 21, 9, 4, 231, 16, 9, 4, 231, 53, 9, 4, 231, 28, 9, 4, 231, 193, 9, 4, - 231, 176, 9, 4, 231, 224, 9, 4, 231, 197, 9, 4, 230, 203, 9, 4, 230, 199, - 9, 4, 230, 236, 9, 4, 230, 213, 9, 4, 230, 206, 9, 4, 230, 210, 9, 4, - 240, 121, 9, 4, 240, 120, 9, 4, 240, 125, 9, 4, 240, 122, 9, 4, 240, 124, - 9, 4, 240, 123, 9, 4, 240, 132, 9, 4, 240, 131, 9, 4, 240, 135, 9, 4, - 240, 133, 9, 4, 240, 112, 9, 4, 240, 111, 9, 4, 240, 114, 9, 4, 240, 113, - 9, 4, 240, 117, 9, 4, 240, 116, 9, 4, 240, 119, 9, 4, 240, 118, 9, 4, - 240, 127, 9, 4, 240, 126, 9, 4, 240, 130, 9, 4, 240, 128, 9, 4, 240, 107, - 9, 4, 240, 106, 9, 4, 240, 115, 9, 4, 240, 110, 9, 4, 240, 108, 9, 4, - 240, 109, 9, 4, 227, 17, 9, 4, 227, 18, 9, 4, 227, 36, 9, 4, 227, 35, 9, - 4, 227, 38, 9, 4, 227, 37, 9, 4, 227, 8, 9, 4, 227, 10, 9, 4, 227, 9, 9, - 4, 227, 13, 9, 4, 227, 12, 9, 4, 227, 15, 9, 4, 227, 14, 9, 4, 227, 19, - 9, 4, 227, 21, 9, 4, 227, 20, 9, 4, 227, 4, 9, 4, 227, 3, 9, 4, 227, 11, - 9, 4, 227, 7, 9, 4, 227, 5, 9, 4, 227, 6, 9, 4, 237, 251, 9, 4, 237, 250, - 9, 4, 238, 1, 9, 4, 237, 252, 9, 4, 237, 254, 9, 4, 237, 253, 9, 4, 238, - 0, 9, 4, 237, 255, 9, 4, 238, 6, 9, 4, 238, 5, 9, 4, 238, 8, 9, 4, 238, - 7, 9, 4, 237, 243, 9, 4, 237, 242, 9, 4, 237, 245, 9, 4, 237, 244, 9, 4, - 237, 247, 9, 4, 237, 246, 9, 4, 237, 249, 9, 4, 237, 248, 9, 4, 238, 2, - 9, 4, 238, 4, 9, 4, 238, 3, 9, 4, 225, 22, 9, 4, 225, 24, 9, 4, 225, 23, - 9, 4, 225, 67, 9, 4, 225, 65, 9, 4, 225, 77, 9, 4, 225, 70, 9, 4, 224, - 240, 9, 4, 224, 239, 9, 4, 224, 241, 9, 4, 224, 250, 9, 4, 224, 247, 9, - 4, 225, 2, 9, 4, 224, 252, 9, 4, 225, 58, 9, 4, 225, 64, 9, 4, 225, 60, - 9, 4, 238, 242, 9, 4, 238, 253, 9, 4, 239, 6, 9, 4, 239, 86, 9, 4, 239, - 76, 9, 4, 155, 9, 4, 239, 97, 9, 4, 238, 24, 9, 4, 238, 23, 9, 4, 238, - 26, 9, 4, 238, 25, 9, 4, 238, 62, 9, 4, 238, 53, 9, 4, 238, 149, 9, 4, - 238, 124, 9, 4, 239, 26, 9, 4, 239, 71, 9, 4, 239, 38, 9, 4, 207, 72, 9, - 4, 207, 57, 9, 4, 207, 96, 9, 4, 207, 81, 9, 4, 206, 205, 9, 4, 206, 207, - 9, 4, 206, 206, 9, 4, 206, 224, 9, 4, 206, 250, 9, 4, 206, 233, 9, 4, - 207, 32, 9, 4, 207, 51, 9, 4, 207, 37, 9, 4, 205, 26, 9, 4, 205, 25, 9, - 4, 205, 40, 9, 4, 205, 28, 9, 4, 205, 33, 9, 4, 205, 35, 9, 4, 205, 34, - 9, 4, 205, 101, 9, 4, 205, 98, 9, 4, 205, 116, 9, 4, 205, 105, 9, 4, 205, - 2, 9, 4, 205, 4, 9, 4, 205, 3, 9, 4, 205, 15, 9, 4, 205, 14, 9, 4, 205, - 19, 9, 4, 205, 16, 9, 4, 205, 83, 9, 4, 205, 93, 9, 4, 205, 87, 9, 4, - 204, 254, 9, 4, 204, 253, 9, 4, 205, 9, 9, 4, 205, 1, 9, 4, 204, 255, 9, - 4, 205, 0, 9, 4, 204, 240, 9, 4, 204, 239, 9, 4, 204, 245, 9, 4, 204, - 243, 9, 4, 204, 241, 9, 4, 204, 242, 9, 4, 247, 225, 9, 4, 247, 219, 9, - 4, 247, 251, 9, 4, 247, 235, 9, 4, 247, 248, 9, 4, 247, 242, 9, 4, 247, - 250, 9, 4, 247, 249, 9, 4, 248, 183, 9, 4, 248, 175, 9, 4, 249, 1, 9, 4, - 248, 213, 9, 4, 247, 31, 9, 4, 247, 33, 9, 4, 247, 32, 9, 4, 247, 84, 9, - 4, 247, 74, 9, 4, 247, 174, 9, 4, 247, 100, 9, 4, 248, 113, 9, 4, 248, - 148, 9, 4, 248, 118, 9, 4, 247, 10, 9, 4, 247, 8, 9, 4, 247, 40, 9, 4, - 247, 29, 9, 4, 247, 16, 9, 4, 247, 28, 9, 4, 246, 243, 9, 4, 246, 242, 9, - 4, 246, 255, 9, 4, 246, 249, 9, 4, 246, 244, 9, 4, 246, 246, 9, 4, 204, - 223, 9, 4, 204, 222, 9, 4, 204, 229, 9, 4, 204, 224, 9, 4, 204, 226, 9, - 4, 204, 225, 9, 4, 204, 228, 9, 4, 204, 227, 9, 4, 204, 235, 9, 4, 204, - 234, 9, 4, 204, 238, 9, 4, 204, 236, 9, 4, 204, 219, 9, 4, 204, 221, 9, - 4, 204, 220, 9, 4, 204, 230, 9, 4, 204, 233, 9, 4, 204, 231, 9, 4, 204, - 212, 9, 4, 204, 216, 9, 4, 204, 215, 9, 4, 204, 213, 9, 4, 204, 214, 9, - 4, 204, 206, 9, 4, 204, 205, 9, 4, 204, 211, 9, 4, 204, 209, 9, 4, 204, - 207, 9, 4, 204, 208, 9, 4, 223, 78, 9, 4, 223, 77, 9, 4, 223, 83, 9, 4, - 223, 79, 9, 4, 223, 80, 9, 4, 223, 82, 9, 4, 223, 81, 9, 4, 223, 88, 9, - 4, 223, 87, 9, 4, 223, 91, 9, 4, 223, 90, 9, 4, 223, 71, 9, 4, 223, 72, - 9, 4, 223, 75, 9, 4, 223, 76, 9, 4, 223, 84, 9, 4, 223, 86, 9, 4, 223, - 66, 9, 4, 223, 74, 9, 4, 223, 70, 9, 4, 223, 67, 9, 4, 223, 68, 9, 4, - 223, 61, 9, 4, 223, 60, 9, 4, 223, 65, 9, 4, 223, 64, 9, 4, 223, 62, 9, - 4, 223, 63, 9, 4, 215, 12, 9, 4, 184, 9, 4, 215, 80, 9, 4, 215, 15, 9, 4, - 215, 69, 9, 4, 215, 72, 9, 4, 215, 70, 9, 4, 217, 133, 9, 4, 217, 119, 9, - 4, 217, 199, 9, 4, 217, 141, 9, 4, 213, 144, 9, 4, 213, 146, 9, 4, 213, - 145, 9, 4, 214, 168, 9, 4, 214, 158, 9, 4, 214, 193, 9, 4, 214, 172, 9, - 4, 216, 15, 9, 4, 217, 86, 9, 4, 216, 41, 9, 4, 213, 121, 9, 4, 213, 118, - 9, 4, 213, 203, 9, 4, 213, 143, 9, 4, 213, 125, 9, 4, 213, 133, 9, 4, - 213, 24, 9, 4, 213, 23, 9, 4, 213, 91, 9, 4, 213, 32, 9, 4, 213, 26, 9, - 4, 213, 31, 9, 4, 214, 58, 9, 4, 214, 57, 9, 4, 214, 64, 9, 4, 214, 59, - 9, 4, 214, 61, 9, 4, 214, 63, 9, 4, 214, 62, 9, 4, 214, 73, 9, 4, 214, - 71, 9, 4, 214, 96, 9, 4, 214, 74, 9, 4, 214, 53, 9, 4, 214, 52, 9, 4, - 214, 56, 9, 4, 214, 54, 9, 4, 214, 67, 9, 4, 214, 70, 9, 4, 214, 68, 9, - 4, 214, 49, 9, 4, 214, 47, 9, 4, 214, 51, 9, 4, 214, 50, 9, 4, 214, 42, - 9, 4, 214, 41, 9, 4, 214, 46, 9, 4, 214, 45, 9, 4, 214, 43, 9, 4, 214, - 44, 9, 4, 205, 76, 9, 4, 205, 75, 9, 4, 205, 81, 9, 4, 205, 78, 9, 4, - 205, 55, 9, 4, 205, 57, 9, 4, 205, 56, 9, 4, 205, 60, 9, 4, 205, 59, 9, - 4, 205, 64, 9, 4, 205, 61, 9, 4, 205, 69, 9, 4, 205, 68, 9, 4, 205, 72, - 9, 4, 205, 70, 9, 4, 205, 51, 9, 4, 205, 50, 9, 4, 205, 58, 9, 4, 205, - 54, 9, 4, 205, 52, 9, 4, 205, 53, 9, 4, 205, 43, 9, 4, 205, 42, 9, 4, - 205, 47, 9, 4, 205, 46, 9, 4, 205, 44, 9, 4, 205, 45, 9, 4, 248, 88, 9, - 4, 248, 84, 9, 4, 248, 110, 9, 4, 248, 97, 9, 4, 248, 10, 9, 4, 248, 9, - 9, 4, 248, 12, 9, 4, 248, 11, 9, 4, 248, 25, 9, 4, 248, 24, 9, 4, 248, - 32, 9, 4, 248, 27, 9, 4, 248, 63, 9, 4, 248, 61, 9, 4, 248, 82, 9, 4, - 248, 70, 9, 4, 248, 4, 9, 4, 248, 14, 9, 4, 248, 8, 9, 4, 248, 5, 9, 4, - 248, 7, 9, 4, 247, 253, 9, 4, 247, 252, 9, 4, 248, 1, 9, 4, 248, 0, 9, 4, - 247, 254, 9, 4, 247, 255, 9, 4, 218, 85, 9, 4, 218, 89, 9, 4, 218, 68, 9, - 4, 218, 69, 9, 4, 218, 72, 9, 4, 218, 71, 9, 4, 218, 75, 9, 4, 218, 73, - 9, 4, 218, 79, 9, 4, 218, 78, 9, 4, 218, 84, 9, 4, 218, 80, 9, 4, 218, - 64, 9, 4, 218, 62, 9, 4, 218, 70, 9, 4, 218, 67, 9, 4, 218, 65, 9, 4, - 218, 66, 9, 4, 218, 57, 9, 4, 218, 56, 9, 4, 218, 61, 9, 4, 218, 60, 9, - 4, 218, 58, 9, 4, 218, 59, 9, 4, 224, 22, 9, 4, 224, 21, 9, 4, 224, 24, - 9, 4, 224, 23, 9, 4, 224, 13, 9, 4, 224, 15, 9, 4, 224, 14, 9, 4, 224, - 17, 9, 4, 224, 16, 9, 4, 224, 20, 9, 4, 224, 19, 9, 4, 224, 7, 9, 4, 224, - 6, 9, 4, 224, 12, 9, 4, 224, 10, 9, 4, 224, 8, 9, 4, 224, 9, 9, 4, 224, - 1, 9, 4, 224, 0, 9, 4, 224, 5, 9, 4, 224, 4, 9, 4, 224, 2, 9, 4, 224, 3, - 9, 4, 215, 224, 9, 4, 215, 219, 9, 4, 216, 2, 9, 4, 215, 235, 9, 4, 215, - 105, 9, 4, 215, 107, 9, 4, 215, 106, 9, 4, 215, 128, 9, 4, 215, 125, 9, - 4, 215, 158, 9, 4, 215, 148, 9, 4, 215, 193, 9, 4, 215, 186, 9, 4, 215, - 214, 9, 4, 215, 201, 9, 4, 215, 101, 9, 4, 215, 99, 9, 4, 215, 116, 9, 4, - 215, 104, 9, 4, 215, 102, 9, 4, 215, 103, 9, 4, 215, 83, 9, 4, 215, 82, - 9, 4, 215, 89, 9, 4, 215, 86, 9, 4, 215, 84, 9, 4, 215, 85, 9, 4, 219, - 65, 9, 4, 219, 59, 9, 4, 219, 113, 9, 4, 219, 71, 9, 4, 218, 29, 9, 4, - 218, 31, 9, 4, 218, 30, 9, 4, 218, 98, 9, 4, 218, 91, 9, 4, 218, 124, 9, - 4, 218, 102, 9, 4, 218, 217, 9, 4, 219, 51, 9, 4, 219, 0, 9, 4, 218, 22, - 9, 4, 218, 19, 9, 4, 218, 50, 9, 4, 218, 28, 9, 4, 218, 24, 9, 4, 218, - 25, 9, 4, 218, 4, 9, 4, 218, 3, 9, 4, 218, 9, 9, 4, 218, 7, 9, 4, 218, 5, - 9, 4, 218, 6, 9, 4, 232, 152, 9, 4, 232, 151, 9, 4, 232, 162, 9, 4, 232, - 153, 9, 4, 232, 158, 9, 4, 232, 157, 9, 4, 232, 160, 9, 4, 232, 159, 9, - 4, 232, 94, 9, 4, 232, 93, 9, 4, 232, 96, 9, 4, 232, 95, 9, 4, 232, 110, - 9, 4, 232, 108, 9, 4, 232, 122, 9, 4, 232, 112, 9, 4, 232, 87, 9, 4, 232, - 85, 9, 4, 232, 104, 9, 4, 232, 92, 9, 4, 232, 89, 9, 4, 232, 90, 9, 4, - 232, 79, 9, 4, 232, 78, 9, 4, 232, 83, 9, 4, 232, 82, 9, 4, 232, 80, 9, - 4, 232, 81, 9, 4, 219, 230, 9, 4, 219, 228, 9, 4, 219, 237, 9, 4, 219, - 231, 9, 4, 219, 234, 9, 4, 219, 233, 9, 4, 219, 236, 9, 4, 219, 235, 9, - 4, 219, 181, 9, 4, 219, 178, 9, 4, 219, 183, 9, 4, 219, 182, 9, 4, 219, - 217, 9, 4, 219, 216, 9, 4, 219, 226, 9, 4, 219, 220, 9, 4, 219, 173, 9, - 4, 219, 169, 9, 4, 219, 214, 9, 4, 219, 177, 9, 4, 219, 175, 9, 4, 219, - 176, 9, 4, 219, 153, 9, 4, 219, 151, 9, 4, 219, 163, 9, 4, 219, 156, 9, - 4, 219, 154, 9, 4, 219, 155, 9, 4, 232, 141, 9, 4, 232, 140, 9, 4, 232, - 147, 9, 4, 232, 142, 9, 4, 232, 144, 9, 4, 232, 143, 9, 4, 232, 146, 9, - 4, 232, 145, 9, 4, 232, 132, 9, 4, 232, 134, 9, 4, 232, 133, 9, 4, 232, - 137, 9, 4, 232, 136, 9, 4, 232, 139, 9, 4, 232, 138, 9, 4, 232, 128, 9, - 4, 232, 127, 9, 4, 232, 135, 9, 4, 232, 131, 9, 4, 232, 129, 9, 4, 232, - 130, 9, 4, 232, 124, 9, 4, 232, 123, 9, 4, 232, 126, 9, 4, 232, 125, 9, - 4, 224, 157, 9, 4, 224, 156, 9, 4, 224, 164, 9, 4, 224, 158, 9, 4, 224, - 160, 9, 4, 224, 159, 9, 4, 224, 163, 9, 4, 224, 161, 9, 4, 224, 146, 9, - 4, 224, 147, 9, 4, 224, 152, 9, 4, 224, 151, 9, 4, 224, 155, 9, 4, 224, - 153, 9, 4, 224, 141, 9, 4, 224, 150, 9, 4, 224, 145, 9, 4, 224, 142, 9, - 4, 224, 143, 9, 4, 224, 136, 9, 4, 224, 135, 9, 4, 224, 140, 9, 4, 224, - 139, 9, 4, 224, 137, 9, 4, 224, 138, 9, 4, 223, 113, 9, 4, 223, 112, 9, - 4, 223, 125, 9, 4, 223, 117, 9, 4, 223, 122, 9, 4, 223, 121, 9, 4, 223, - 124, 9, 4, 223, 123, 9, 4, 223, 98, 9, 4, 223, 100, 9, 4, 223, 99, 9, 4, - 223, 105, 9, 4, 223, 104, 9, 4, 223, 110, 9, 4, 223, 106, 9, 4, 223, 96, - 9, 4, 223, 94, 9, 4, 223, 103, 9, 4, 223, 97, 9, 4, 206, 161, 9, 4, 206, - 160, 9, 4, 206, 169, 9, 4, 206, 163, 9, 4, 206, 165, 9, 4, 206, 164, 9, - 4, 206, 167, 9, 4, 206, 166, 9, 4, 206, 149, 9, 4, 206, 150, 9, 4, 206, - 154, 9, 4, 206, 153, 9, 4, 206, 159, 9, 4, 206, 157, 9, 4, 206, 127, 9, - 4, 206, 125, 9, 4, 206, 140, 9, 4, 206, 130, 9, 4, 206, 128, 9, 4, 206, - 129, 9, 4, 205, 253, 9, 4, 205, 251, 9, 4, 206, 11, 9, 4, 205, 254, 9, 4, - 206, 5, 9, 4, 206, 4, 9, 4, 206, 8, 9, 4, 206, 6, 9, 4, 205, 191, 9, 4, - 205, 190, 9, 4, 205, 194, 9, 4, 205, 192, 9, 4, 205, 227, 9, 4, 205, 223, - 9, 4, 205, 247, 9, 4, 205, 231, 9, 4, 205, 182, 9, 4, 205, 178, 9, 4, - 205, 213, 9, 4, 205, 189, 9, 4, 205, 185, 9, 4, 205, 186, 9, 4, 205, 162, - 9, 4, 205, 161, 9, 4, 205, 169, 9, 4, 205, 165, 9, 4, 205, 163, 9, 4, - 205, 164, 9, 37, 219, 217, 9, 37, 229, 235, 9, 37, 231, 89, 9, 37, 223, - 117, 9, 37, 246, 249, 9, 37, 214, 64, 9, 37, 240, 118, 9, 37, 240, 150, - 9, 37, 226, 254, 9, 37, 237, 251, 9, 37, 229, 35, 9, 37, 250, 69, 9, 37, - 226, 142, 9, 37, 205, 247, 9, 37, 220, 52, 9, 37, 237, 245, 9, 37, 212, - 156, 9, 37, 240, 244, 9, 37, 205, 1, 9, 37, 246, 243, 9, 37, 246, 14, 9, - 37, 249, 68, 9, 37, 240, 114, 9, 37, 223, 106, 9, 37, 210, 170, 9, 37, - 222, 143, 9, 37, 232, 128, 9, 37, 205, 15, 9, 37, 220, 31, 9, 37, 238, - 191, 9, 37, 205, 253, 9, 37, 207, 144, 9, 37, 215, 89, 9, 37, 209, 28, 9, - 37, 205, 116, 9, 37, 232, 122, 9, 37, 223, 70, 9, 37, 232, 126, 9, 37, - 239, 254, 9, 37, 232, 146, 9, 37, 206, 250, 9, 37, 243, 237, 9, 37, 215, - 103, 9, 37, 229, 230, 9, 37, 246, 255, 9, 37, 247, 32, 9, 37, 247, 235, - 9, 37, 237, 248, 9, 37, 215, 224, 9, 37, 205, 0, 9, 37, 215, 148, 9, 37, - 248, 82, 9, 37, 204, 226, 9, 37, 225, 177, 9, 37, 231, 224, 229, 185, 1, - 250, 183, 229, 185, 1, 179, 229, 185, 1, 221, 93, 229, 185, 1, 246, 145, - 229, 185, 1, 212, 219, 229, 185, 1, 212, 56, 229, 185, 1, 240, 244, 229, - 185, 1, 172, 229, 185, 1, 231, 167, 229, 185, 1, 232, 200, 229, 185, 1, - 249, 1, 229, 185, 1, 248, 110, 229, 185, 1, 243, 196, 229, 185, 1, 210, - 243, 229, 185, 1, 210, 233, 229, 185, 1, 185, 229, 185, 1, 199, 229, 185, - 1, 230, 141, 229, 185, 1, 217, 199, 229, 185, 1, 205, 81, 229, 185, 1, - 205, 116, 229, 185, 1, 225, 77, 229, 185, 1, 155, 229, 185, 1, 206, 181, - 229, 185, 1, 239, 20, 229, 185, 1, 242, 73, 229, 185, 1, 207, 96, 229, - 185, 1, 216, 2, 229, 185, 1, 190, 229, 185, 1, 240, 99, 229, 185, 1, 62, - 229, 185, 1, 252, 248, 229, 185, 1, 75, 229, 185, 1, 242, 192, 229, 185, - 1, 74, 229, 185, 1, 76, 229, 185, 1, 71, 229, 185, 1, 210, 3, 229, 185, - 1, 209, 253, 229, 185, 1, 222, 206, 229, 185, 1, 135, 226, 40, 211, 211, - 229, 185, 1, 135, 225, 237, 220, 211, 229, 185, 1, 135, 226, 40, 246, - 254, 229, 185, 1, 135, 226, 40, 249, 184, 229, 185, 1, 135, 226, 40, 199, - 229, 185, 1, 135, 226, 40, 232, 171, 229, 185, 220, 72, 247, 155, 229, - 185, 220, 72, 241, 82, 213, 251, 46, 4, 243, 104, 46, 4, 243, 100, 46, 4, - 239, 53, 46, 4, 207, 45, 46, 4, 207, 44, 46, 4, 221, 164, 46, 4, 249, - 251, 46, 4, 250, 50, 46, 4, 227, 145, 46, 4, 231, 10, 46, 4, 227, 30, 46, - 4, 240, 183, 46, 4, 242, 21, 46, 4, 209, 34, 46, 4, 212, 120, 46, 4, 212, - 39, 46, 4, 245, 182, 46, 4, 245, 179, 46, 4, 230, 50, 46, 4, 219, 29, 46, - 4, 245, 251, 46, 4, 225, 142, 46, 4, 217, 74, 46, 4, 215, 212, 46, 4, - 205, 91, 46, 4, 205, 71, 46, 4, 248, 140, 46, 4, 232, 180, 46, 4, 224, - 171, 46, 4, 206, 49, 46, 4, 231, 221, 46, 4, 225, 50, 46, 4, 240, 162, - 46, 4, 227, 107, 46, 4, 225, 106, 46, 4, 223, 133, 46, 4, 74, 46, 4, 233, - 68, 46, 4, 239, 11, 46, 4, 238, 246, 46, 4, 207, 20, 46, 4, 207, 11, 46, - 4, 221, 53, 46, 4, 249, 249, 46, 4, 249, 244, 46, 4, 227, 138, 46, 4, - 231, 7, 46, 4, 227, 27, 46, 4, 240, 179, 46, 4, 241, 250, 46, 4, 208, - 214, 46, 4, 211, 211, 46, 4, 212, 19, 46, 4, 245, 174, 46, 4, 245, 178, - 46, 4, 229, 235, 46, 4, 218, 208, 46, 4, 245, 168, 46, 4, 225, 136, 46, - 4, 215, 80, 46, 4, 215, 183, 46, 4, 205, 40, 46, 4, 205, 67, 46, 4, 247, - 251, 46, 4, 232, 162, 46, 4, 224, 164, 46, 4, 206, 11, 46, 4, 231, 123, - 46, 4, 225, 42, 46, 4, 240, 61, 46, 4, 226, 254, 46, 4, 224, 230, 46, 4, - 223, 125, 46, 4, 62, 46, 4, 252, 122, 46, 4, 225, 72, 46, 4, 155, 46, 4, - 239, 110, 46, 4, 207, 96, 46, 4, 207, 85, 46, 4, 179, 46, 4, 250, 0, 46, - 4, 250, 183, 46, 4, 227, 153, 46, 4, 231, 15, 46, 4, 231, 13, 46, 4, 227, - 34, 46, 4, 240, 187, 46, 4, 242, 73, 46, 4, 209, 70, 46, 4, 212, 219, 46, - 4, 212, 56, 46, 4, 245, 192, 46, 4, 245, 181, 46, 4, 230, 141, 46, 4, - 219, 113, 46, 4, 246, 145, 46, 4, 225, 151, 46, 4, 217, 199, 46, 4, 216, - 2, 46, 4, 205, 116, 46, 4, 205, 81, 46, 4, 249, 1, 46, 4, 232, 200, 46, - 4, 224, 180, 46, 4, 190, 46, 4, 172, 46, 4, 232, 27, 46, 4, 225, 56, 46, - 4, 240, 244, 46, 4, 185, 46, 4, 199, 46, 4, 223, 144, 46, 4, 222, 152, - 46, 4, 222, 147, 46, 4, 238, 131, 46, 4, 206, 238, 46, 4, 206, 234, 46, - 4, 220, 187, 46, 4, 249, 247, 46, 4, 249, 172, 46, 4, 227, 133, 46, 4, - 231, 5, 46, 4, 227, 23, 46, 4, 240, 175, 46, 4, 241, 151, 46, 4, 208, - 161, 46, 4, 211, 105, 46, 4, 211, 248, 46, 4, 245, 171, 46, 4, 245, 176, - 46, 4, 229, 115, 46, 4, 218, 107, 46, 4, 245, 28, 46, 4, 225, 123, 46, 4, - 214, 174, 46, 4, 215, 152, 46, 4, 205, 17, 46, 4, 205, 62, 46, 4, 247, - 105, 46, 4, 232, 113, 46, 4, 224, 154, 46, 4, 205, 232, 46, 4, 231, 33, - 46, 4, 225, 40, 46, 4, 240, 8, 46, 4, 226, 150, 46, 4, 224, 56, 46, 4, - 223, 107, 46, 4, 71, 46, 4, 209, 234, 46, 4, 238, 42, 46, 4, 238, 31, 46, - 4, 206, 216, 46, 4, 206, 209, 46, 4, 220, 82, 46, 4, 249, 246, 46, 4, - 249, 101, 46, 4, 227, 132, 46, 4, 231, 3, 46, 4, 227, 22, 46, 4, 240, - 174, 46, 4, 241, 88, 46, 4, 207, 148, 46, 4, 210, 170, 46, 4, 211, 230, - 46, 4, 245, 169, 46, 4, 245, 175, 46, 4, 229, 81, 46, 4, 218, 50, 46, 4, - 243, 237, 46, 4, 225, 118, 46, 4, 213, 203, 46, 4, 215, 116, 46, 4, 205, - 9, 46, 4, 205, 58, 46, 4, 247, 40, 46, 4, 232, 104, 46, 4, 224, 150, 46, - 4, 205, 213, 46, 4, 230, 236, 46, 4, 225, 39, 46, 4, 239, 213, 46, 4, - 226, 114, 46, 4, 223, 217, 46, 4, 223, 103, 46, 4, 76, 46, 4, 222, 165, - 46, 4, 224, 254, 46, 4, 238, 149, 46, 4, 238, 134, 46, 4, 206, 250, 46, - 4, 206, 239, 46, 4, 220, 211, 46, 4, 249, 248, 46, 4, 249, 184, 46, 4, - 227, 134, 46, 4, 231, 6, 46, 4, 227, 25, 46, 4, 240, 177, 46, 4, 240, - 176, 46, 4, 241, 162, 46, 4, 208, 173, 46, 4, 124, 46, 4, 211, 253, 46, - 4, 245, 172, 46, 4, 245, 177, 46, 4, 229, 144, 46, 4, 218, 124, 46, 4, - 245, 51, 46, 4, 225, 127, 46, 4, 214, 193, 46, 4, 215, 158, 46, 4, 205, - 19, 46, 4, 205, 64, 46, 4, 247, 174, 46, 4, 232, 122, 46, 4, 224, 155, - 46, 4, 205, 247, 46, 4, 231, 53, 46, 4, 225, 41, 46, 4, 240, 19, 46, 4, - 226, 181, 46, 4, 224, 67, 46, 4, 223, 110, 46, 4, 75, 46, 4, 243, 41, 46, - 4, 225, 61, 46, 4, 239, 71, 46, 4, 239, 41, 46, 4, 207, 51, 46, 4, 207, - 39, 46, 4, 221, 174, 46, 4, 249, 252, 46, 4, 250, 61, 46, 4, 227, 146, - 46, 4, 231, 11, 46, 4, 231, 9, 46, 4, 227, 31, 46, 4, 240, 184, 46, 4, - 240, 182, 46, 4, 242, 28, 46, 4, 209, 39, 46, 4, 212, 131, 46, 4, 212, - 41, 46, 4, 245, 183, 46, 4, 245, 180, 46, 4, 230, 58, 46, 4, 219, 51, 46, - 4, 246, 9, 46, 4, 225, 143, 46, 4, 217, 86, 46, 4, 215, 214, 46, 4, 205, - 93, 46, 4, 205, 72, 46, 4, 248, 148, 46, 4, 232, 182, 46, 4, 224, 173, - 46, 4, 206, 52, 46, 4, 231, 224, 46, 4, 225, 51, 46, 4, 225, 47, 46, 4, - 240, 170, 46, 4, 240, 157, 46, 4, 227, 119, 46, 4, 225, 110, 46, 4, 223, - 134, 46, 4, 225, 79, 46, 4, 230, 19, 46, 247, 155, 46, 241, 82, 213, 251, - 46, 219, 196, 83, 46, 4, 225, 126, 242, 73, 46, 4, 225, 126, 172, 46, 4, - 225, 126, 214, 174, 46, 16, 242, 17, 46, 16, 231, 219, 46, 16, 211, 171, - 46, 16, 224, 205, 46, 16, 250, 135, 46, 16, 242, 72, 46, 16, 212, 215, - 46, 16, 246, 98, 46, 16, 245, 27, 46, 16, 230, 220, 46, 16, 211, 109, 46, - 16, 245, 50, 46, 16, 232, 114, 46, 18, 205, 85, 46, 18, 102, 46, 18, 105, - 46, 18, 142, 46, 18, 139, 46, 18, 168, 46, 18, 184, 46, 18, 195, 46, 18, - 193, 46, 18, 200, 46, 4, 225, 126, 185, 46, 4, 225, 126, 245, 51, 34, 6, - 1, 205, 89, 34, 5, 1, 205, 89, 34, 6, 1, 243, 191, 34, 5, 1, 243, 191, - 34, 6, 1, 218, 224, 243, 193, 34, 5, 1, 218, 224, 243, 193, 34, 6, 1, - 232, 249, 34, 5, 1, 232, 249, 34, 6, 1, 245, 67, 34, 5, 1, 245, 67, 34, - 6, 1, 226, 158, 209, 249, 34, 5, 1, 226, 158, 209, 249, 34, 6, 1, 249, - 112, 222, 170, 34, 5, 1, 249, 112, 222, 170, 34, 6, 1, 225, 88, 206, 34, - 34, 5, 1, 225, 88, 206, 34, 34, 6, 1, 206, 31, 2, 250, 177, 206, 34, 34, - 5, 1, 206, 31, 2, 250, 177, 206, 34, 34, 6, 1, 232, 247, 206, 65, 34, 5, - 1, 232, 247, 206, 65, 34, 6, 1, 218, 224, 205, 213, 34, 5, 1, 218, 224, - 205, 213, 34, 6, 1, 232, 247, 62, 34, 5, 1, 232, 247, 62, 34, 6, 1, 247, - 192, 229, 180, 205, 183, 34, 5, 1, 247, 192, 229, 180, 205, 183, 34, 6, - 1, 249, 194, 205, 183, 34, 5, 1, 249, 194, 205, 183, 34, 6, 1, 232, 247, - 247, 192, 229, 180, 205, 183, 34, 5, 1, 232, 247, 247, 192, 229, 180, - 205, 183, 34, 6, 1, 205, 249, 34, 5, 1, 205, 249, 34, 6, 1, 218, 224, - 210, 237, 34, 5, 1, 218, 224, 210, 237, 34, 6, 1, 214, 187, 246, 9, 34, - 5, 1, 214, 187, 246, 9, 34, 6, 1, 214, 187, 243, 68, 34, 5, 1, 214, 187, - 243, 68, 34, 6, 1, 214, 187, 243, 50, 34, 5, 1, 214, 187, 243, 50, 34, 6, - 1, 226, 162, 76, 34, 5, 1, 226, 162, 76, 34, 6, 1, 249, 221, 76, 34, 5, - 1, 249, 221, 76, 34, 6, 1, 50, 226, 162, 76, 34, 5, 1, 50, 226, 162, 76, - 34, 1, 226, 96, 76, 36, 34, 207, 131, 36, 34, 212, 99, 226, 213, 53, 36, - 34, 238, 30, 226, 213, 53, 36, 34, 211, 243, 226, 213, 53, 214, 233, 251, - 209, 36, 34, 1, 209, 246, 233, 129, 36, 34, 1, 74, 36, 34, 1, 206, 11, - 36, 34, 1, 71, 36, 34, 1, 239, 94, 53, 36, 34, 1, 206, 30, 36, 34, 1, - 214, 187, 53, 36, 34, 1, 222, 170, 36, 34, 231, 236, 36, 34, 221, 181, - 34, 231, 236, 34, 221, 181, 34, 6, 1, 243, 205, 34, 5, 1, 243, 205, 34, - 6, 1, 243, 182, 34, 5, 1, 243, 182, 34, 6, 1, 205, 48, 34, 5, 1, 205, 48, - 34, 6, 1, 248, 164, 34, 5, 1, 248, 164, 34, 6, 1, 243, 179, 34, 5, 1, - 243, 179, 34, 6, 1, 212, 132, 2, 226, 247, 109, 34, 5, 1, 212, 132, 2, - 226, 247, 109, 34, 6, 1, 210, 128, 34, 5, 1, 210, 128, 34, 6, 1, 210, - 212, 34, 5, 1, 210, 212, 34, 6, 1, 210, 217, 34, 5, 1, 210, 217, 34, 6, - 1, 212, 137, 34, 5, 1, 212, 137, 34, 6, 1, 238, 13, 34, 5, 1, 238, 13, - 34, 6, 1, 215, 95, 34, 5, 1, 215, 95, 34, 6, 1, 50, 76, 34, 5, 1, 50, 76, - 34, 6, 1, 247, 57, 76, 34, 5, 1, 247, 57, 76, 65, 1, 34, 239, 94, 53, 65, - 1, 34, 214, 187, 53, 36, 34, 1, 232, 247, 75, 21, 1, 62, 21, 1, 172, 21, - 1, 71, 21, 1, 230, 236, 21, 1, 243, 104, 21, 1, 219, 29, 21, 1, 212, 200, - 21, 1, 76, 21, 1, 223, 125, 21, 1, 74, 21, 1, 230, 141, 21, 1, 179, 21, - 1, 218, 154, 21, 1, 218, 201, 21, 1, 230, 49, 21, 1, 227, 106, 21, 1, - 212, 215, 21, 1, 225, 149, 21, 1, 224, 178, 21, 1, 229, 28, 21, 1, 213, - 119, 21, 1, 226, 114, 21, 1, 215, 178, 21, 1, 215, 80, 21, 1, 215, 188, - 21, 1, 216, 24, 21, 1, 230, 165, 21, 1, 231, 193, 21, 1, 223, 188, 21, 1, - 223, 217, 21, 1, 224, 149, 21, 1, 205, 229, 21, 1, 215, 116, 21, 1, 205, - 187, 21, 1, 190, 21, 1, 223, 251, 21, 1, 231, 179, 21, 1, 221, 97, 21, 1, - 224, 171, 21, 1, 223, 232, 21, 1, 220, 75, 21, 1, 206, 213, 21, 1, 221, - 164, 21, 1, 242, 21, 21, 1, 218, 50, 21, 1, 229, 81, 21, 1, 226, 254, 21, - 1, 224, 230, 21, 1, 218, 226, 21, 1, 219, 95, 21, 1, 231, 203, 21, 1, - 225, 5, 21, 1, 225, 56, 21, 1, 225, 77, 21, 1, 215, 158, 21, 1, 220, 79, - 21, 1, 241, 88, 21, 1, 241, 155, 21, 1, 207, 96, 21, 1, 199, 21, 1, 229, - 235, 21, 1, 221, 53, 21, 1, 229, 107, 21, 1, 231, 53, 21, 1, 227, 143, - 21, 1, 219, 2, 21, 1, 227, 83, 21, 1, 185, 21, 1, 211, 211, 21, 1, 231, - 123, 21, 1, 226, 181, 21, 1, 227, 151, 21, 1, 212, 80, 21, 1, 231, 15, - 21, 1, 212, 98, 21, 1, 223, 219, 21, 1, 217, 159, 21, 1, 242, 69, 21, 1, - 231, 17, 21, 1, 231, 48, 21, 36, 141, 231, 26, 21, 36, 141, 210, 161, 21, - 224, 177, 21, 241, 82, 213, 251, 21, 247, 162, 21, 247, 155, 21, 216, 52, - 21, 219, 196, 83, 65, 1, 248, 44, 135, 206, 1, 221, 5, 65, 1, 248, 44, - 135, 206, 76, 221, 5, 65, 1, 248, 44, 135, 206, 1, 215, 236, 65, 1, 248, - 44, 135, 206, 76, 215, 236, 65, 1, 248, 44, 135, 206, 1, 219, 214, 65, 1, - 248, 44, 135, 206, 76, 219, 214, 65, 1, 248, 44, 135, 206, 1, 218, 50, - 65, 1, 248, 44, 135, 206, 76, 218, 50, 65, 1, 242, 156, 244, 21, 135, - 134, 65, 1, 127, 244, 21, 135, 134, 65, 1, 226, 249, 244, 21, 135, 134, - 65, 1, 114, 244, 21, 135, 134, 65, 1, 242, 155, 244, 21, 135, 134, 65, 1, - 242, 156, 244, 21, 230, 38, 135, 134, 65, 1, 127, 244, 21, 230, 38, 135, - 134, 65, 1, 226, 249, 244, 21, 230, 38, 135, 134, 65, 1, 114, 244, 21, - 230, 38, 135, 134, 65, 1, 242, 155, 244, 21, 230, 38, 135, 134, 65, 1, - 242, 156, 230, 38, 135, 134, 65, 1, 127, 230, 38, 135, 134, 65, 1, 226, - 249, 230, 38, 135, 134, 65, 1, 114, 230, 38, 135, 134, 65, 1, 242, 155, - 230, 38, 135, 134, 65, 1, 67, 79, 134, 65, 1, 67, 214, 235, 65, 1, 67, - 194, 134, 65, 1, 229, 92, 48, 247, 92, 252, 108, 65, 1, 219, 81, 120, 45, - 65, 1, 219, 81, 130, 45, 65, 1, 219, 81, 242, 168, 83, 65, 1, 219, 81, - 233, 2, 242, 168, 83, 65, 1, 114, 233, 2, 242, 168, 83, 65, 1, 213, 233, - 23, 127, 211, 118, 65, 1, 213, 233, 23, 114, 211, 118, 7, 6, 1, 243, 94, - 252, 172, 7, 5, 1, 243, 94, 252, 172, 7, 6, 1, 243, 94, 252, 200, 7, 5, - 1, 243, 94, 252, 200, 7, 6, 1, 239, 39, 7, 5, 1, 239, 39, 7, 6, 1, 210, - 86, 7, 5, 1, 210, 86, 7, 6, 1, 211, 55, 7, 5, 1, 211, 55, 7, 6, 1, 247, - 37, 7, 5, 1, 247, 37, 7, 6, 1, 247, 38, 2, 247, 155, 7, 5, 1, 247, 38, 2, - 247, 155, 7, 1, 5, 6, 242, 139, 7, 1, 5, 6, 182, 7, 6, 1, 253, 164, 7, 5, - 1, 253, 164, 7, 6, 1, 252, 71, 7, 5, 1, 252, 71, 7, 6, 1, 251, 184, 7, 5, - 1, 251, 184, 7, 6, 1, 251, 168, 7, 5, 1, 251, 168, 7, 6, 1, 251, 169, 2, - 194, 134, 7, 5, 1, 251, 169, 2, 194, 134, 7, 6, 1, 251, 159, 7, 5, 1, - 251, 159, 7, 6, 1, 218, 224, 249, 35, 2, 245, 23, 7, 5, 1, 218, 224, 249, - 35, 2, 245, 23, 7, 6, 1, 232, 77, 2, 91, 7, 5, 1, 232, 77, 2, 91, 7, 6, - 1, 232, 77, 2, 245, 163, 91, 7, 5, 1, 232, 77, 2, 245, 163, 91, 7, 6, 1, - 232, 77, 2, 213, 225, 23, 245, 163, 91, 7, 5, 1, 232, 77, 2, 213, 225, - 23, 245, 163, 91, 7, 6, 1, 249, 111, 149, 7, 5, 1, 249, 111, 149, 7, 6, - 1, 230, 159, 2, 127, 91, 7, 5, 1, 230, 159, 2, 127, 91, 7, 6, 1, 148, 2, - 152, 213, 225, 222, 82, 7, 5, 1, 148, 2, 152, 213, 225, 222, 82, 7, 6, 1, - 148, 2, 229, 111, 7, 5, 1, 148, 2, 229, 111, 7, 6, 1, 222, 152, 7, 5, 1, - 222, 152, 7, 6, 1, 222, 68, 2, 213, 225, 211, 233, 245, 211, 7, 5, 1, - 222, 68, 2, 213, 225, 211, 233, 245, 211, 7, 6, 1, 222, 68, 2, 241, 174, - 7, 5, 1, 222, 68, 2, 241, 174, 7, 6, 1, 222, 68, 2, 214, 102, 212, 191, - 7, 5, 1, 222, 68, 2, 214, 102, 212, 191, 7, 6, 1, 220, 28, 2, 213, 225, - 211, 233, 245, 211, 7, 5, 1, 220, 28, 2, 213, 225, 211, 233, 245, 211, 7, - 6, 1, 220, 28, 2, 245, 163, 91, 7, 5, 1, 220, 28, 2, 245, 163, 91, 7, 6, - 1, 219, 150, 218, 96, 7, 5, 1, 219, 150, 218, 96, 7, 6, 1, 218, 39, 218, - 96, 7, 5, 1, 218, 39, 218, 96, 7, 6, 1, 209, 149, 2, 245, 163, 91, 7, 5, - 1, 209, 149, 2, 245, 163, 91, 7, 6, 1, 207, 137, 7, 5, 1, 207, 137, 7, 6, - 1, 208, 181, 205, 159, 7, 5, 1, 208, 181, 205, 159, 7, 6, 1, 211, 247, 2, - 91, 7, 5, 1, 211, 247, 2, 91, 7, 6, 1, 211, 247, 2, 213, 225, 211, 233, - 245, 211, 7, 5, 1, 211, 247, 2, 213, 225, 211, 233, 245, 211, 7, 6, 1, - 209, 29, 7, 5, 1, 209, 29, 7, 6, 1, 242, 203, 7, 5, 1, 242, 203, 7, 6, 1, - 232, 234, 7, 5, 1, 232, 234, 7, 6, 1, 247, 140, 7, 5, 1, 247, 140, 65, 1, - 209, 177, 7, 5, 1, 243, 228, 7, 5, 1, 229, 65, 7, 5, 1, 226, 90, 7, 5, 1, - 223, 180, 7, 5, 1, 218, 38, 7, 1, 5, 6, 218, 38, 7, 5, 1, 210, 159, 7, 5, - 1, 209, 241, 7, 6, 1, 233, 23, 246, 240, 7, 5, 1, 233, 23, 246, 240, 7, - 6, 1, 233, 23, 242, 139, 7, 5, 1, 233, 23, 242, 139, 7, 6, 1, 233, 23, - 241, 55, 7, 6, 1, 201, 233, 23, 241, 55, 7, 5, 1, 201, 233, 23, 241, 55, - 7, 6, 1, 201, 149, 7, 5, 1, 201, 149, 7, 6, 1, 233, 23, 137, 7, 5, 1, - 233, 23, 137, 7, 6, 1, 233, 23, 182, 7, 5, 1, 233, 23, 182, 7, 6, 1, 233, - 23, 213, 10, 7, 5, 1, 233, 23, 213, 10, 65, 1, 114, 247, 228, 253, 21, - 65, 1, 247, 162, 65, 1, 215, 144, 242, 242, 53, 7, 6, 1, 217, 163, 7, 5, - 1, 217, 163, 7, 6, 1, 201, 239, 155, 7, 5, 1, 230, 159, 2, 218, 230, 238, - 130, 23, 250, 24, 7, 6, 1, 226, 34, 2, 245, 211, 7, 5, 1, 226, 34, 2, - 245, 211, 7, 6, 1, 249, 35, 2, 134, 7, 5, 1, 249, 35, 2, 134, 7, 5, 1, - 249, 35, 2, 222, 26, 109, 7, 5, 1, 239, 156, 2, 222, 26, 109, 7, 6, 1, - 63, 2, 241, 174, 7, 5, 1, 63, 2, 241, 174, 7, 6, 1, 242, 140, 2, 91, 7, - 5, 1, 242, 140, 2, 91, 7, 6, 1, 208, 166, 252, 248, 7, 5, 1, 208, 166, - 252, 248, 7, 6, 1, 208, 166, 222, 206, 7, 5, 1, 208, 166, 222, 206, 7, 6, - 1, 208, 166, 210, 3, 7, 5, 1, 208, 166, 210, 3, 7, 6, 1, 241, 56, 2, 222, - 222, 91, 7, 5, 1, 241, 56, 2, 222, 222, 91, 7, 6, 1, 232, 77, 2, 222, - 222, 91, 7, 5, 1, 232, 77, 2, 222, 222, 91, 7, 6, 1, 226, 34, 2, 222, - 222, 91, 7, 5, 1, 226, 34, 2, 222, 222, 91, 7, 6, 1, 219, 150, 2, 222, - 222, 91, 7, 5, 1, 219, 150, 2, 222, 222, 91, 7, 6, 1, 218, 1, 2, 222, - 222, 91, 7, 5, 1, 218, 1, 2, 222, 222, 91, 7, 6, 1, 239, 156, 2, 109, 7, - 6, 1, 218, 224, 222, 142, 75, 7, 6, 1, 121, 241, 55, 7, 6, 1, 230, 159, - 2, 250, 24, 7, 6, 1, 201, 232, 76, 7, 6, 1, 201, 213, 10, 7, 242, 247, 1, - 215, 73, 74, 65, 1, 6, 239, 156, 2, 91, 65, 1, 5, 28, 222, 206, 7, 1, 5, - 6, 201, 229, 28, 7, 242, 247, 1, 218, 224, 242, 139, 7, 242, 247, 1, 218, - 224, 222, 67, 7, 242, 247, 1, 233, 2, 229, 28, 7, 242, 247, 1, 237, 225, - 229, 117, 7, 242, 247, 1, 252, 19, 229, 28, 213, 89, 225, 220, 1, 62, - 213, 89, 225, 220, 1, 74, 213, 89, 225, 220, 3, 243, 207, 213, 89, 225, - 220, 1, 71, 213, 89, 225, 220, 1, 75, 213, 89, 225, 220, 1, 76, 213, 89, - 225, 220, 3, 239, 88, 213, 89, 225, 220, 1, 231, 53, 213, 89, 225, 220, - 1, 231, 138, 213, 89, 225, 220, 1, 240, 19, 213, 89, 225, 220, 1, 240, - 71, 213, 89, 225, 220, 3, 252, 73, 213, 89, 225, 220, 1, 247, 174, 213, - 89, 225, 220, 1, 248, 32, 213, 89, 225, 220, 1, 232, 122, 213, 89, 225, - 220, 1, 232, 164, 213, 89, 225, 220, 1, 210, 185, 213, 89, 225, 220, 1, - 210, 191, 213, 89, 225, 220, 1, 246, 24, 213, 89, 225, 220, 1, 246, 33, - 213, 89, 225, 220, 1, 124, 213, 89, 225, 220, 1, 211, 253, 213, 89, 225, - 220, 1, 245, 51, 213, 89, 225, 220, 1, 245, 172, 213, 89, 225, 220, 1, - 224, 67, 213, 89, 225, 220, 1, 220, 211, 213, 89, 225, 220, 1, 221, 66, - 213, 89, 225, 220, 1, 249, 184, 213, 89, 225, 220, 1, 249, 248, 213, 89, - 225, 220, 1, 226, 181, 213, 89, 225, 220, 1, 218, 124, 213, 89, 225, 220, - 1, 229, 144, 213, 89, 225, 220, 1, 218, 75, 213, 89, 225, 220, 1, 214, - 193, 213, 89, 225, 220, 1, 238, 149, 213, 89, 225, 220, 22, 3, 62, 213, - 89, 225, 220, 22, 3, 74, 213, 89, 225, 220, 22, 3, 71, 213, 89, 225, 220, - 22, 3, 75, 213, 89, 225, 220, 22, 3, 222, 152, 213, 89, 225, 220, 220, - 206, 227, 191, 213, 89, 225, 220, 220, 206, 227, 190, 213, 89, 225, 220, - 220, 206, 227, 189, 213, 89, 225, 220, 220, 206, 227, 188, 143, 233, 51, - 241, 116, 119, 219, 204, 143, 233, 51, 241, 116, 119, 239, 121, 143, 233, - 51, 241, 116, 129, 219, 202, 143, 233, 51, 241, 116, 119, 215, 2, 143, - 233, 51, 241, 116, 119, 243, 83, 143, 233, 51, 241, 116, 129, 215, 1, - 143, 233, 51, 219, 205, 83, 143, 233, 51, 220, 238, 83, 143, 233, 51, - 218, 27, 83, 143, 233, 51, 219, 206, 83, 221, 89, 1, 172, 221, 89, 1, - 231, 167, 221, 89, 1, 240, 244, 221, 89, 1, 225, 77, 221, 89, 1, 249, 1, - 221, 89, 1, 248, 110, 221, 89, 1, 232, 200, 221, 89, 1, 223, 144, 221, - 89, 1, 212, 219, 221, 89, 1, 212, 56, 221, 89, 1, 246, 145, 221, 89, 1, - 199, 221, 89, 1, 179, 221, 89, 1, 221, 93, 221, 89, 1, 250, 183, 221, 89, - 1, 185, 221, 89, 1, 210, 243, 221, 89, 1, 210, 233, 221, 89, 1, 243, 196, - 221, 89, 1, 207, 96, 221, 89, 1, 205, 81, 221, 89, 1, 205, 116, 221, 89, - 1, 5, 62, 221, 89, 1, 190, 221, 89, 1, 219, 113, 221, 89, 1, 230, 141, - 221, 89, 1, 216, 2, 221, 89, 1, 217, 199, 221, 89, 1, 155, 221, 89, 1, - 62, 221, 89, 1, 74, 221, 89, 1, 71, 221, 89, 1, 75, 221, 89, 1, 76, 221, - 89, 1, 220, 19, 221, 89, 1, 206, 181, 221, 89, 1, 242, 73, 221, 89, 1, - 240, 135, 221, 89, 1, 243, 104, 221, 89, 213, 191, 1, 207, 96, 221, 89, - 213, 191, 1, 190, 221, 89, 1, 210, 208, 221, 89, 1, 210, 196, 221, 89, 1, - 246, 54, 221, 89, 1, 224, 103, 221, 89, 1, 252, 141, 190, 221, 89, 1, - 208, 169, 216, 2, 221, 89, 1, 208, 170, 155, 221, 89, 1, 251, 216, 242, - 73, 221, 89, 213, 191, 1, 219, 113, 221, 89, 213, 141, 1, 219, 113, 221, - 89, 1, 248, 217, 221, 89, 215, 41, 239, 69, 83, 221, 89, 50, 239, 69, 83, - 221, 89, 141, 215, 251, 221, 89, 141, 50, 215, 251, 217, 123, 3, 252, 73, - 217, 123, 3, 208, 183, 217, 123, 1, 62, 217, 123, 1, 253, 164, 217, 123, - 1, 74, 217, 123, 1, 233, 102, 217, 123, 1, 71, 217, 123, 1, 209, 162, - 217, 123, 1, 115, 137, 217, 123, 1, 115, 218, 90, 217, 123, 1, 115, 149, - 217, 123, 1, 115, 229, 173, 217, 123, 1, 75, 217, 123, 1, 243, 104, 217, - 123, 1, 252, 205, 217, 123, 1, 76, 217, 123, 1, 222, 152, 217, 123, 1, - 251, 184, 217, 123, 1, 172, 217, 123, 1, 231, 167, 217, 123, 1, 240, 244, - 217, 123, 1, 240, 99, 217, 123, 1, 225, 77, 217, 123, 1, 249, 1, 217, - 123, 1, 248, 110, 217, 123, 1, 232, 200, 217, 123, 1, 232, 170, 217, 123, - 1, 223, 144, 217, 123, 1, 210, 208, 217, 123, 1, 210, 196, 217, 123, 1, - 246, 54, 217, 123, 1, 246, 38, 217, 123, 1, 224, 103, 217, 123, 1, 212, - 219, 217, 123, 1, 212, 56, 217, 123, 1, 246, 145, 217, 123, 1, 245, 192, - 217, 123, 1, 199, 217, 123, 1, 179, 217, 123, 1, 221, 93, 217, 123, 1, - 250, 183, 217, 123, 1, 250, 0, 217, 123, 1, 185, 217, 123, 1, 190, 217, - 123, 1, 219, 113, 217, 123, 1, 230, 141, 217, 123, 1, 209, 70, 217, 123, - 1, 216, 2, 217, 123, 1, 214, 96, 217, 123, 1, 217, 199, 217, 123, 1, 155, - 217, 123, 1, 229, 172, 217, 123, 107, 3, 239, 139, 217, 123, 22, 3, 253, - 164, 217, 123, 22, 3, 74, 217, 123, 22, 3, 233, 102, 217, 123, 22, 3, 71, - 217, 123, 22, 3, 209, 162, 217, 123, 22, 3, 115, 137, 217, 123, 22, 3, - 115, 218, 90, 217, 123, 22, 3, 115, 149, 217, 123, 22, 3, 115, 229, 173, - 217, 123, 22, 3, 75, 217, 123, 22, 3, 243, 104, 217, 123, 22, 3, 252, - 205, 217, 123, 22, 3, 76, 217, 123, 22, 3, 222, 152, 217, 123, 22, 3, - 251, 184, 217, 123, 3, 208, 188, 217, 123, 246, 100, 217, 123, 50, 246, - 100, 217, 123, 18, 205, 85, 217, 123, 18, 102, 217, 123, 18, 105, 217, - 123, 18, 142, 217, 123, 18, 139, 217, 123, 18, 168, 217, 123, 18, 184, - 217, 123, 18, 195, 217, 123, 18, 193, 217, 123, 18, 200, 36, 89, 18, 205, - 85, 36, 89, 18, 102, 36, 89, 18, 105, 36, 89, 18, 142, 36, 89, 18, 139, - 36, 89, 18, 168, 36, 89, 18, 184, 36, 89, 18, 195, 36, 89, 18, 193, 36, - 89, 18, 200, 36, 89, 1, 62, 36, 89, 1, 71, 36, 89, 1, 172, 36, 89, 1, - 199, 36, 89, 1, 179, 36, 89, 1, 219, 113, 36, 89, 1, 208, 214, 36, 89, 3, - 251, 167, 89, 3, 214, 152, 248, 217, 89, 3, 248, 218, 208, 188, 89, 3, - 50, 248, 218, 208, 188, 89, 3, 248, 218, 105, 89, 3, 248, 218, 142, 89, - 3, 248, 218, 251, 167, 89, 3, 220, 55, 89, 240, 208, 241, 232, 89, 248, - 199, 89, 239, 63, 231, 230, 229, 236, 18, 205, 85, 231, 230, 229, 236, - 18, 102, 231, 230, 229, 236, 18, 105, 231, 230, 229, 236, 18, 142, 231, - 230, 229, 236, 18, 139, 231, 230, 229, 236, 18, 168, 231, 230, 229, 236, - 18, 184, 231, 230, 229, 236, 18, 195, 231, 230, 229, 236, 18, 193, 231, - 230, 229, 236, 18, 200, 231, 230, 229, 236, 1, 172, 231, 230, 229, 236, - 1, 231, 167, 231, 230, 229, 236, 1, 240, 244, 231, 230, 229, 236, 1, 225, - 77, 231, 230, 229, 236, 1, 217, 199, 231, 230, 229, 236, 1, 216, 2, 231, - 230, 229, 236, 1, 205, 116, 231, 230, 229, 236, 1, 223, 144, 231, 230, - 229, 236, 1, 212, 219, 231, 230, 229, 236, 1, 238, 46, 231, 230, 229, - 236, 1, 199, 231, 230, 229, 236, 1, 179, 231, 230, 229, 236, 1, 221, 93, - 231, 230, 229, 236, 1, 185, 231, 230, 229, 236, 1, 246, 145, 231, 230, - 229, 236, 1, 250, 183, 231, 230, 229, 236, 1, 219, 113, 231, 230, 229, - 236, 1, 190, 231, 230, 229, 236, 1, 230, 141, 231, 230, 229, 236, 1, 207, - 96, 231, 230, 229, 236, 1, 212, 56, 231, 230, 229, 236, 1, 155, 231, 230, - 229, 236, 1, 209, 70, 231, 230, 229, 236, 1, 249, 1, 231, 230, 229, 236, - 1, 62, 231, 230, 229, 236, 1, 222, 206, 231, 230, 229, 236, 1, 74, 231, - 230, 229, 236, 1, 222, 152, 231, 230, 229, 236, 22, 210, 3, 231, 230, - 229, 236, 22, 75, 231, 230, 229, 236, 22, 71, 231, 230, 229, 236, 22, - 243, 104, 231, 230, 229, 236, 22, 76, 231, 230, 229, 236, 135, 220, 226, - 231, 230, 229, 236, 135, 248, 233, 231, 230, 229, 236, 135, 248, 234, - 220, 226, 231, 230, 229, 236, 3, 247, 3, 231, 230, 229, 236, 3, 215, 88, - 219, 13, 1, 172, 219, 13, 1, 240, 244, 219, 13, 1, 225, 77, 219, 13, 1, - 212, 219, 219, 13, 1, 246, 145, 219, 13, 1, 199, 219, 13, 1, 179, 219, - 13, 1, 250, 183, 219, 13, 1, 185, 219, 13, 1, 249, 1, 219, 13, 1, 232, - 200, 219, 13, 1, 223, 144, 219, 13, 1, 217, 199, 219, 13, 1, 219, 113, - 219, 13, 1, 230, 141, 219, 13, 1, 190, 219, 13, 1, 207, 96, 219, 13, 1, - 155, 219, 13, 1, 227, 153, 219, 13, 1, 225, 56, 219, 13, 1, 225, 151, - 219, 13, 1, 223, 111, 219, 13, 1, 62, 219, 13, 22, 3, 74, 219, 13, 22, 3, - 71, 219, 13, 22, 3, 75, 219, 13, 22, 3, 252, 205, 219, 13, 22, 3, 76, - 219, 13, 22, 3, 251, 184, 219, 13, 22, 3, 242, 192, 219, 13, 22, 3, 243, - 130, 219, 13, 107, 3, 225, 79, 219, 13, 107, 3, 226, 33, 219, 13, 107, 3, - 137, 219, 13, 107, 3, 239, 155, 219, 13, 208, 188, 219, 13, 217, 77, 83, - 25, 113, 211, 189, 25, 113, 211, 188, 25, 113, 211, 186, 25, 113, 211, - 191, 25, 113, 218, 193, 25, 113, 218, 177, 25, 113, 218, 172, 25, 113, - 218, 174, 25, 113, 218, 190, 25, 113, 218, 183, 25, 113, 218, 176, 25, - 113, 218, 195, 25, 113, 218, 178, 25, 113, 218, 197, 25, 113, 218, 194, - 25, 113, 226, 236, 25, 113, 226, 227, 25, 113, 226, 230, 25, 113, 221, - 24, 25, 113, 221, 35, 25, 113, 221, 36, 25, 113, 214, 80, 25, 113, 233, - 115, 25, 113, 233, 122, 25, 113, 214, 91, 25, 113, 214, 78, 25, 113, 221, - 75, 25, 113, 238, 254, 25, 113, 214, 75, 176, 3, 221, 242, 176, 3, 248, - 145, 176, 3, 230, 66, 176, 3, 207, 13, 176, 1, 62, 176, 1, 237, 225, 231, - 234, 176, 1, 74, 176, 1, 233, 102, 176, 1, 71, 176, 1, 222, 52, 248, 116, - 176, 1, 225, 78, 230, 25, 176, 1, 225, 78, 230, 26, 219, 66, 176, 1, 75, - 176, 1, 252, 205, 176, 1, 76, 176, 1, 172, 176, 1, 232, 66, 217, 135, - 176, 1, 232, 66, 226, 75, 176, 1, 240, 244, 176, 1, 240, 245, 226, 75, - 176, 1, 225, 77, 176, 1, 249, 1, 176, 1, 249, 2, 226, 75, 176, 1, 232, - 200, 176, 1, 223, 145, 226, 75, 176, 1, 232, 201, 227, 243, 176, 1, 223, - 144, 176, 1, 210, 208, 176, 1, 210, 209, 227, 243, 176, 1, 246, 54, 176, - 1, 246, 55, 227, 243, 176, 1, 225, 237, 226, 75, 176, 1, 212, 219, 176, - 1, 212, 220, 226, 75, 176, 1, 246, 145, 176, 1, 246, 146, 227, 243, 176, - 1, 199, 176, 1, 179, 176, 1, 222, 52, 226, 75, 176, 1, 250, 183, 176, 1, - 250, 184, 226, 75, 176, 1, 185, 176, 1, 190, 176, 1, 219, 113, 176, 1, - 219, 114, 252, 214, 176, 1, 230, 141, 176, 1, 207, 96, 176, 1, 217, 200, - 226, 75, 176, 1, 217, 200, 227, 243, 176, 1, 217, 199, 176, 1, 155, 176, - 3, 248, 146, 212, 101, 176, 22, 3, 212, 158, 176, 22, 3, 211, 123, 176, - 22, 3, 206, 210, 176, 22, 3, 206, 211, 227, 94, 176, 22, 3, 213, 164, - 176, 22, 3, 213, 165, 227, 82, 176, 22, 3, 212, 179, 176, 22, 3, 245, - 101, 226, 74, 176, 22, 3, 221, 134, 176, 107, 3, 231, 196, 176, 107, 3, - 221, 147, 176, 107, 3, 248, 242, 176, 221, 255, 176, 47, 218, 244, 176, - 48, 218, 244, 176, 222, 41, 252, 116, 176, 222, 41, 228, 5, 176, 222, 41, - 229, 69, 176, 222, 41, 207, 7, 176, 222, 41, 222, 0, 176, 222, 41, 229, - 197, 176, 222, 41, 229, 63, 176, 222, 41, 252, 255, 176, 222, 41, 253, 0, - 252, 255, 176, 222, 41, 220, 249, 176, 201, 222, 41, 220, 249, 176, 221, - 251, 176, 18, 205, 85, 176, 18, 102, 176, 18, 105, 176, 18, 142, 176, 18, - 139, 176, 18, 168, 176, 18, 184, 176, 18, 195, 176, 18, 193, 176, 18, - 200, 176, 222, 41, 211, 158, 210, 157, 176, 222, 41, 232, 230, 66, 1, - 215, 238, 240, 99, 66, 1, 215, 238, 248, 110, 66, 1, 215, 238, 232, 170, - 66, 1, 215, 238, 224, 103, 66, 1, 215, 238, 250, 0, 66, 3, 215, 238, 217, - 121, 66, 65, 1, 215, 238, 219, 30, 66, 1, 41, 230, 113, 223, 144, 66, 1, - 41, 230, 113, 242, 73, 66, 1, 41, 230, 113, 240, 244, 66, 1, 41, 230, - 113, 240, 99, 66, 1, 41, 230, 113, 232, 200, 66, 1, 41, 230, 113, 232, - 170, 66, 1, 41, 230, 113, 246, 54, 66, 1, 41, 230, 113, 246, 38, 66, 1, - 41, 230, 113, 224, 103, 66, 41, 230, 113, 18, 205, 85, 66, 41, 230, 113, - 18, 102, 66, 41, 230, 113, 18, 105, 66, 41, 230, 113, 18, 142, 66, 41, - 230, 113, 18, 139, 66, 41, 230, 113, 18, 168, 66, 41, 230, 113, 18, 184, - 66, 41, 230, 113, 18, 195, 66, 41, 230, 113, 18, 193, 66, 41, 230, 113, - 18, 200, 66, 1, 41, 230, 113, 229, 172, 66, 1, 41, 230, 113, 246, 145, - 66, 1, 41, 230, 113, 245, 192, 66, 1, 41, 230, 113, 250, 183, 66, 1, 41, - 230, 113, 250, 0, 203, 1, 62, 203, 1, 74, 203, 1, 71, 203, 1, 75, 203, 1, - 252, 205, 203, 1, 76, 203, 1, 172, 203, 1, 231, 167, 203, 1, 240, 244, - 203, 1, 240, 99, 203, 1, 224, 242, 203, 1, 225, 77, 203, 1, 248, 110, - 203, 1, 248, 60, 203, 1, 232, 200, 203, 1, 232, 170, 203, 1, 224, 232, - 203, 1, 224, 234, 203, 1, 224, 233, 203, 1, 212, 219, 203, 1, 212, 56, - 203, 1, 246, 145, 203, 1, 245, 192, 203, 1, 223, 186, 203, 1, 199, 203, - 1, 246, 54, 203, 1, 179, 203, 1, 220, 157, 203, 1, 221, 93, 203, 1, 250, - 183, 203, 1, 250, 0, 203, 1, 226, 106, 203, 1, 185, 203, 1, 250, 97, 203, - 1, 190, 203, 1, 219, 113, 203, 1, 230, 141, 203, 1, 209, 70, 203, 1, 214, - 96, 203, 1, 217, 199, 203, 1, 155, 203, 22, 3, 253, 164, 203, 22, 3, 74, - 203, 22, 3, 233, 102, 203, 22, 3, 243, 90, 203, 22, 3, 71, 203, 22, 3, - 222, 206, 203, 22, 3, 76, 203, 22, 3, 252, 205, 203, 22, 3, 251, 184, - 203, 22, 3, 210, 3, 203, 107, 3, 190, 203, 107, 3, 219, 113, 203, 107, 3, - 230, 141, 203, 107, 3, 207, 96, 203, 1, 42, 232, 76, 203, 1, 42, 241, 55, - 203, 1, 42, 225, 79, 203, 107, 3, 42, 225, 79, 203, 1, 42, 248, 111, 203, - 1, 42, 213, 10, 203, 1, 42, 226, 33, 203, 1, 42, 222, 67, 203, 1, 42, - 206, 123, 203, 1, 42, 137, 203, 1, 42, 149, 203, 1, 42, 214, 99, 203, - 107, 3, 42, 229, 28, 203, 107, 3, 42, 239, 155, 203, 18, 205, 85, 203, - 18, 102, 203, 18, 105, 203, 18, 142, 203, 18, 139, 203, 18, 168, 203, 18, - 184, 203, 18, 195, 203, 18, 193, 203, 18, 200, 203, 220, 72, 214, 127, - 203, 220, 72, 246, 100, 203, 220, 72, 50, 246, 100, 203, 220, 72, 211, - 36, 246, 100, 66, 1, 231, 160, 240, 244, 66, 1, 231, 160, 249, 1, 66, 1, - 231, 160, 248, 110, 66, 1, 231, 160, 232, 200, 66, 1, 231, 160, 232, 170, - 66, 1, 231, 160, 223, 144, 66, 1, 231, 160, 210, 208, 66, 1, 231, 160, - 210, 196, 66, 1, 231, 160, 246, 54, 66, 1, 231, 160, 246, 38, 66, 1, 231, - 160, 245, 192, 66, 1, 231, 160, 199, 66, 1, 231, 160, 217, 199, 66, 1, - 231, 160, 155, 66, 1, 231, 160, 239, 20, 66, 1, 231, 160, 242, 73, 66, - 65, 1, 231, 160, 219, 30, 66, 1, 231, 160, 206, 181, 66, 1, 231, 160, - 205, 116, 66, 1, 231, 160, 219, 113, 66, 229, 133, 231, 160, 222, 227, - 66, 229, 133, 231, 160, 219, 227, 66, 229, 133, 231, 160, 238, 204, 66, - 16, 252, 193, 242, 167, 66, 16, 252, 193, 102, 66, 16, 252, 193, 105, 66, - 1, 252, 193, 219, 113, 66, 3, 221, 238, 232, 4, 211, 118, 66, 3, 41, 230, - 113, 211, 116, 66, 3, 41, 230, 113, 211, 113, 66, 1, 215, 96, 222, 23, - 248, 110, 66, 1, 215, 96, 222, 23, 216, 2, 41, 208, 204, 1, 114, 231, 53, - 41, 208, 204, 1, 127, 231, 53, 41, 208, 204, 1, 114, 231, 138, 41, 208, - 204, 1, 127, 231, 138, 41, 208, 204, 1, 114, 231, 147, 41, 208, 204, 1, - 127, 231, 147, 41, 208, 204, 1, 114, 240, 19, 41, 208, 204, 1, 127, 240, - 19, 41, 208, 204, 1, 114, 225, 2, 41, 208, 204, 1, 127, 225, 2, 41, 208, - 204, 1, 114, 247, 174, 41, 208, 204, 1, 127, 247, 174, 41, 208, 204, 1, - 114, 248, 32, 41, 208, 204, 1, 127, 248, 32, 41, 208, 204, 1, 114, 214, - 193, 41, 208, 204, 1, 127, 214, 193, 41, 208, 204, 1, 114, 223, 110, 41, - 208, 204, 1, 127, 223, 110, 41, 208, 204, 1, 114, 245, 51, 41, 208, 204, - 1, 127, 245, 51, 41, 208, 204, 1, 114, 124, 41, 208, 204, 1, 127, 124, - 41, 208, 204, 1, 114, 211, 253, 41, 208, 204, 1, 127, 211, 253, 41, 208, - 204, 1, 114, 224, 67, 41, 208, 204, 1, 127, 224, 67, 41, 208, 204, 1, - 114, 249, 184, 41, 208, 204, 1, 127, 249, 184, 41, 208, 204, 1, 114, 220, - 211, 41, 208, 204, 1, 127, 220, 211, 41, 208, 204, 1, 114, 221, 66, 41, - 208, 204, 1, 127, 221, 66, 41, 208, 204, 1, 114, 241, 162, 41, 208, 204, - 1, 127, 241, 162, 41, 208, 204, 1, 114, 226, 181, 41, 208, 204, 1, 127, - 226, 181, 41, 208, 204, 1, 114, 205, 247, 41, 208, 204, 1, 127, 205, 247, - 41, 208, 204, 1, 114, 218, 124, 41, 208, 204, 1, 127, 218, 124, 41, 208, - 204, 1, 114, 229, 144, 41, 208, 204, 1, 127, 229, 144, 41, 208, 204, 1, - 114, 208, 173, 41, 208, 204, 1, 127, 208, 173, 41, 208, 204, 1, 114, 238, - 149, 41, 208, 204, 1, 127, 238, 149, 41, 208, 204, 1, 114, 76, 41, 208, - 204, 1, 127, 76, 41, 208, 204, 227, 240, 232, 23, 41, 208, 204, 22, 253, - 164, 41, 208, 204, 22, 74, 41, 208, 204, 22, 210, 3, 41, 208, 204, 22, - 71, 41, 208, 204, 22, 75, 41, 208, 204, 22, 76, 41, 208, 204, 227, 240, - 231, 141, 41, 208, 204, 22, 237, 190, 41, 208, 204, 22, 210, 2, 41, 208, - 204, 22, 210, 18, 41, 208, 204, 22, 251, 182, 41, 208, 204, 22, 251, 159, - 41, 208, 204, 22, 252, 122, 41, 208, 204, 22, 252, 136, 41, 208, 204, - 135, 227, 240, 243, 75, 41, 208, 204, 135, 227, 240, 223, 185, 41, 208, - 204, 135, 227, 240, 211, 253, 41, 208, 204, 135, 227, 240, 214, 176, 41, - 208, 204, 16, 231, 36, 41, 208, 204, 16, 223, 185, 41, 208, 204, 16, 217, - 161, 41, 208, 204, 16, 238, 150, 238, 145, 41, 208, 204, 16, 231, 46, - 231, 45, 227, 101, 227, 160, 1, 75, 227, 101, 227, 160, 1, 76, 227, 101, - 227, 160, 1, 248, 110, 227, 101, 227, 160, 1, 223, 144, 227, 101, 227, - 160, 1, 210, 208, 227, 101, 227, 160, 1, 210, 196, 227, 101, 227, 160, 1, - 246, 54, 227, 101, 227, 160, 1, 246, 38, 227, 101, 227, 160, 1, 224, 103, - 227, 101, 227, 160, 1, 216, 2, 227, 101, 227, 160, 1, 214, 96, 227, 101, - 227, 160, 22, 3, 233, 102, 227, 101, 227, 160, 22, 3, 209, 162, 227, 101, - 227, 160, 22, 3, 253, 128, 227, 101, 227, 160, 22, 3, 251, 184, 227, 101, - 227, 160, 22, 3, 253, 121, 227, 101, 227, 160, 248, 74, 227, 101, 227, - 160, 252, 210, 231, 130, 227, 101, 227, 160, 252, 102, 227, 101, 227, - 160, 4, 218, 249, 83, 227, 101, 227, 160, 206, 232, 218, 249, 83, 227, - 101, 227, 160, 22, 3, 208, 183, 227, 101, 227, 160, 208, 188, 31, 4, 210, - 189, 31, 4, 210, 192, 31, 4, 210, 195, 31, 4, 210, 193, 31, 4, 210, 194, - 31, 4, 210, 191, 31, 4, 246, 32, 31, 4, 246, 34, 31, 4, 246, 37, 31, 4, - 246, 35, 31, 4, 246, 36, 31, 4, 246, 33, 31, 4, 243, 183, 31, 4, 243, - 187, 31, 4, 243, 195, 31, 4, 243, 192, 31, 4, 243, 193, 31, 4, 243, 184, - 31, 4, 248, 162, 31, 4, 248, 156, 31, 4, 248, 158, 31, 4, 248, 161, 31, - 4, 248, 159, 31, 4, 248, 160, 31, 4, 248, 157, 31, 4, 250, 97, 31, 4, - 250, 76, 31, 4, 250, 88, 31, 4, 250, 96, 31, 4, 250, 91, 31, 4, 250, 92, - 31, 4, 250, 80, 7, 5, 1, 250, 123, 252, 144, 7, 5, 1, 32, 218, 222, 7, 5, - 1, 249, 198, 75, 7, 5, 1, 250, 123, 75, 7, 5, 1, 174, 2, 241, 174, 7, 5, - 1, 230, 18, 242, 139, 7, 5, 1, 121, 241, 56, 2, 247, 56, 7, 5, 1, 230, - 159, 2, 233, 2, 230, 65, 182, 7, 5, 1, 230, 159, 2, 50, 226, 247, 211, - 180, 7, 5, 1, 230, 159, 2, 226, 247, 218, 148, 7, 5, 1, 229, 29, 2, 247, - 56, 7, 5, 1, 226, 34, 2, 247, 56, 7, 5, 1, 243, 29, 2, 247, 56, 7, 5, 1, - 249, 198, 76, 7, 5, 1, 249, 198, 148, 2, 91, 7, 5, 1, 222, 142, 148, 2, - 91, 7, 5, 1, 233, 2, 222, 206, 7, 5, 1, 201, 222, 207, 2, 91, 7, 5, 1, - 201, 222, 207, 2, 194, 91, 7, 5, 1, 201, 148, 222, 138, 7, 5, 1, 201, - 148, 222, 139, 2, 91, 7, 5, 1, 214, 0, 137, 7, 1, 5, 6, 219, 150, 2, 48, - 230, 34, 7, 5, 1, 219, 150, 206, 253, 239, 105, 7, 5, 1, 50, 137, 7, 5, - 1, 219, 150, 2, 247, 56, 7, 5, 1, 50, 219, 150, 2, 247, 56, 7, 5, 1, 121, - 137, 7, 5, 1, 121, 219, 150, 2, 218, 148, 7, 5, 1, 250, 114, 242, 215, 7, - 5, 1, 106, 2, 215, 144, 48, 230, 34, 7, 5, 1, 106, 250, 129, 2, 215, 144, - 48, 230, 34, 7, 5, 1, 209, 252, 7, 5, 1, 201, 209, 252, 7, 5, 1, 106, 2, - 47, 109, 7, 5, 1, 248, 58, 7, 5, 1, 248, 59, 2, 114, 48, 218, 148, 7, 5, - 1, 248, 59, 2, 114, 47, 216, 36, 7, 5, 1, 206, 196, 2, 114, 48, 218, 148, - 7, 5, 1, 206, 196, 2, 152, 47, 230, 34, 7, 5, 1, 206, 196, 2, 152, 47, - 230, 35, 23, 114, 48, 218, 148, 7, 5, 1, 206, 196, 2, 152, 47, 230, 35, - 2, 216, 36, 7, 5, 1, 206, 124, 2, 215, 144, 48, 230, 34, 65, 249, 123, 2, - 233, 2, 249, 122, 65, 1, 5, 239, 39, 65, 1, 5, 230, 159, 2, 233, 2, 230, - 65, 182, 65, 1, 5, 230, 159, 2, 226, 247, 211, 180, 65, 1, 5, 106, 2, 47, - 109, 7, 5, 1, 233, 2, 252, 144, 27, 1, 5, 6, 222, 170, 227, 101, 227, - 160, 1, 231, 43, 227, 101, 227, 160, 1, 217, 161, 227, 101, 227, 160, 1, - 230, 114, 227, 101, 227, 160, 1, 226, 192, 227, 101, 227, 160, 1, 179, - 227, 101, 227, 160, 1, 199, 227, 101, 227, 160, 1, 248, 50, 227, 101, - 227, 160, 1, 211, 182, 227, 101, 227, 160, 1, 231, 133, 227, 101, 227, - 160, 1, 224, 248, 227, 101, 227, 160, 1, 211, 245, 227, 101, 227, 160, 1, - 207, 90, 227, 101, 227, 160, 1, 206, 75, 227, 101, 227, 160, 1, 238, 35, - 227, 101, 227, 160, 1, 209, 234, 227, 101, 227, 160, 1, 74, 227, 101, - 227, 160, 1, 221, 87, 227, 101, 227, 160, 1, 251, 195, 227, 101, 227, - 160, 1, 240, 12, 227, 101, 227, 160, 1, 232, 168, 227, 101, 227, 160, 1, - 219, 90, 227, 101, 227, 160, 1, 250, 183, 227, 101, 227, 160, 1, 232, - 154, 227, 101, 227, 160, 1, 245, 126, 227, 101, 227, 160, 1, 240, 68, - 227, 101, 227, 160, 1, 245, 170, 227, 101, 227, 160, 1, 249, 254, 227, - 101, 227, 160, 1, 231, 44, 229, 116, 227, 101, 227, 160, 1, 230, 115, - 229, 116, 227, 101, 227, 160, 1, 226, 193, 229, 116, 227, 101, 227, 160, - 1, 222, 52, 229, 116, 227, 101, 227, 160, 1, 225, 237, 229, 116, 227, - 101, 227, 160, 1, 211, 183, 229, 116, 227, 101, 227, 160, 1, 224, 249, - 229, 116, 227, 101, 227, 160, 1, 237, 225, 229, 116, 227, 101, 227, 160, - 22, 3, 222, 164, 227, 101, 227, 160, 22, 3, 233, 66, 227, 101, 227, 160, - 22, 3, 252, 121, 227, 101, 227, 160, 22, 3, 206, 41, 227, 101, 227, 160, - 22, 3, 214, 166, 227, 101, 227, 160, 22, 3, 209, 231, 227, 101, 227, 160, - 22, 3, 248, 72, 227, 101, 227, 160, 22, 3, 223, 170, 227, 101, 227, 160, - 248, 73, 227, 101, 227, 160, 229, 66, 232, 209, 227, 101, 227, 160, 252, - 42, 232, 209, 227, 101, 227, 160, 18, 205, 85, 227, 101, 227, 160, 18, - 102, 227, 101, 227, 160, 18, 105, 227, 101, 227, 160, 18, 142, 227, 101, - 227, 160, 18, 139, 227, 101, 227, 160, 18, 168, 227, 101, 227, 160, 18, - 184, 227, 101, 227, 160, 18, 195, 227, 101, 227, 160, 18, 193, 227, 101, - 227, 160, 18, 200, 25, 162, 223, 51, 25, 162, 223, 56, 25, 162, 205, 246, - 25, 162, 205, 245, 25, 162, 205, 244, 25, 162, 210, 68, 25, 162, 210, 72, - 25, 162, 205, 211, 25, 162, 205, 207, 25, 162, 242, 191, 25, 162, 242, - 189, 25, 162, 242, 190, 25, 162, 242, 187, 25, 162, 237, 215, 25, 162, - 237, 214, 25, 162, 237, 212, 25, 162, 237, 213, 25, 162, 237, 218, 25, - 162, 237, 211, 25, 162, 237, 210, 25, 162, 237, 220, 25, 162, 252, 29, - 25, 162, 252, 28, 25, 100, 224, 216, 25, 100, 224, 222, 25, 100, 214, 77, - 25, 100, 214, 76, 25, 100, 211, 188, 25, 100, 211, 186, 25, 100, 211, - 185, 25, 100, 211, 191, 25, 100, 211, 192, 25, 100, 211, 184, 25, 100, - 218, 177, 25, 100, 218, 192, 25, 100, 214, 83, 25, 100, 218, 189, 25, - 100, 218, 179, 25, 100, 218, 181, 25, 100, 218, 168, 25, 100, 218, 169, - 25, 100, 232, 10, 25, 100, 226, 235, 25, 100, 226, 229, 25, 100, 214, 87, - 25, 100, 226, 232, 25, 100, 226, 238, 25, 100, 221, 20, 25, 100, 221, 29, - 25, 100, 221, 33, 25, 100, 214, 85, 25, 100, 221, 23, 25, 100, 221, 37, - 25, 100, 221, 38, 25, 100, 215, 25, 25, 100, 215, 28, 25, 100, 214, 81, - 25, 100, 214, 79, 25, 100, 215, 23, 25, 100, 215, 31, 25, 100, 215, 32, - 25, 100, 215, 17, 25, 100, 215, 30, 25, 100, 221, 245, 25, 100, 221, 246, - 25, 100, 206, 27, 25, 100, 206, 28, 25, 100, 247, 244, 25, 100, 247, 243, - 25, 100, 214, 92, 25, 100, 221, 73, 25, 100, 221, 72, 10, 15, 235, 93, - 10, 15, 235, 92, 10, 15, 235, 91, 10, 15, 235, 90, 10, 15, 235, 89, 10, - 15, 235, 88, 10, 15, 235, 87, 10, 15, 235, 86, 10, 15, 235, 85, 10, 15, - 235, 84, 10, 15, 235, 83, 10, 15, 235, 82, 10, 15, 235, 81, 10, 15, 235, - 80, 10, 15, 235, 79, 10, 15, 235, 78, 10, 15, 235, 77, 10, 15, 235, 76, - 10, 15, 235, 75, 10, 15, 235, 74, 10, 15, 235, 73, 10, 15, 235, 72, 10, - 15, 235, 71, 10, 15, 235, 70, 10, 15, 235, 69, 10, 15, 235, 68, 10, 15, - 235, 67, 10, 15, 235, 66, 10, 15, 235, 65, 10, 15, 235, 64, 10, 15, 235, - 63, 10, 15, 235, 62, 10, 15, 235, 61, 10, 15, 235, 60, 10, 15, 235, 59, - 10, 15, 235, 58, 10, 15, 235, 57, 10, 15, 235, 56, 10, 15, 235, 55, 10, - 15, 235, 54, 10, 15, 235, 53, 10, 15, 235, 52, 10, 15, 235, 51, 10, 15, - 235, 50, 10, 15, 235, 49, 10, 15, 235, 48, 10, 15, 235, 47, 10, 15, 235, - 46, 10, 15, 235, 45, 10, 15, 235, 44, 10, 15, 235, 43, 10, 15, 235, 42, - 10, 15, 235, 41, 10, 15, 235, 40, 10, 15, 235, 39, 10, 15, 235, 38, 10, - 15, 235, 37, 10, 15, 235, 36, 10, 15, 235, 35, 10, 15, 235, 34, 10, 15, - 235, 33, 10, 15, 235, 32, 10, 15, 235, 31, 10, 15, 235, 30, 10, 15, 235, - 29, 10, 15, 235, 28, 10, 15, 235, 27, 10, 15, 235, 26, 10, 15, 235, 25, - 10, 15, 235, 24, 10, 15, 235, 23, 10, 15, 235, 22, 10, 15, 235, 21, 10, - 15, 235, 20, 10, 15, 235, 19, 10, 15, 235, 18, 10, 15, 235, 17, 10, 15, - 235, 16, 10, 15, 235, 15, 10, 15, 235, 14, 10, 15, 235, 13, 10, 15, 235, - 12, 10, 15, 235, 11, 10, 15, 235, 10, 10, 15, 235, 9, 10, 15, 235, 8, 10, - 15, 235, 7, 10, 15, 235, 6, 10, 15, 235, 5, 10, 15, 235, 4, 10, 15, 235, - 3, 10, 15, 235, 2, 10, 15, 235, 1, 10, 15, 235, 0, 10, 15, 234, 255, 10, - 15, 234, 254, 10, 15, 234, 253, 10, 15, 234, 252, 10, 15, 234, 251, 10, - 15, 234, 250, 10, 15, 234, 249, 10, 15, 234, 248, 10, 15, 234, 247, 10, - 15, 234, 246, 10, 15, 234, 245, 10, 15, 234, 244, 10, 15, 234, 243, 10, - 15, 234, 242, 10, 15, 234, 241, 10, 15, 234, 240, 10, 15, 234, 239, 10, - 15, 234, 238, 10, 15, 234, 237, 10, 15, 234, 236, 10, 15, 234, 235, 10, - 15, 234, 234, 10, 15, 234, 233, 10, 15, 234, 232, 10, 15, 234, 231, 10, - 15, 234, 230, 10, 15, 234, 229, 10, 15, 234, 228, 10, 15, 234, 227, 10, - 15, 234, 226, 10, 15, 234, 225, 10, 15, 234, 224, 10, 15, 234, 223, 10, - 15, 234, 222, 10, 15, 234, 221, 10, 15, 234, 220, 10, 15, 234, 219, 10, - 15, 234, 218, 10, 15, 234, 217, 10, 15, 234, 216, 10, 15, 234, 215, 10, - 15, 234, 214, 10, 15, 234, 213, 10, 15, 234, 212, 10, 15, 234, 211, 10, - 15, 234, 210, 10, 15, 234, 209, 10, 15, 234, 208, 10, 15, 234, 207, 10, - 15, 234, 206, 10, 15, 234, 205, 10, 15, 234, 204, 10, 15, 234, 203, 10, - 15, 234, 202, 10, 15, 234, 201, 10, 15, 234, 200, 10, 15, 234, 199, 10, - 15, 234, 198, 10, 15, 234, 197, 10, 15, 234, 196, 10, 15, 234, 195, 10, - 15, 234, 194, 10, 15, 234, 193, 10, 15, 234, 192, 10, 15, 234, 191, 10, - 15, 234, 190, 10, 15, 234, 189, 10, 15, 234, 188, 10, 15, 234, 187, 10, - 15, 234, 186, 10, 15, 234, 185, 10, 15, 234, 184, 10, 15, 234, 183, 10, - 15, 234, 182, 10, 15, 234, 181, 10, 15, 234, 180, 10, 15, 234, 179, 10, - 15, 234, 178, 10, 15, 234, 177, 10, 15, 234, 176, 10, 15, 234, 175, 10, - 15, 234, 174, 10, 15, 234, 173, 10, 15, 234, 172, 10, 15, 234, 171, 10, - 15, 234, 170, 10, 15, 234, 169, 10, 15, 234, 168, 10, 15, 234, 167, 10, - 15, 234, 166, 10, 15, 234, 165, 10, 15, 234, 164, 10, 15, 234, 163, 10, - 15, 234, 162, 10, 15, 234, 161, 10, 15, 234, 160, 10, 15, 234, 159, 10, - 15, 234, 158, 10, 15, 234, 157, 10, 15, 234, 156, 10, 15, 234, 155, 10, - 15, 234, 154, 10, 15, 234, 153, 10, 15, 234, 152, 10, 15, 234, 151, 10, - 15, 234, 150, 10, 15, 234, 149, 10, 15, 234, 148, 10, 15, 234, 147, 10, - 15, 234, 146, 10, 15, 234, 145, 10, 15, 234, 144, 10, 15, 234, 143, 10, - 15, 234, 142, 10, 15, 234, 141, 10, 15, 234, 140, 10, 15, 234, 139, 10, - 15, 234, 138, 10, 15, 234, 137, 10, 15, 234, 136, 10, 15, 234, 135, 10, - 15, 234, 134, 10, 15, 234, 133, 10, 15, 234, 132, 10, 15, 234, 131, 10, - 15, 234, 130, 10, 15, 234, 129, 10, 15, 234, 128, 10, 15, 234, 127, 10, - 15, 234, 126, 10, 15, 234, 125, 10, 15, 234, 124, 10, 15, 234, 123, 10, - 15, 234, 122, 10, 15, 234, 121, 10, 15, 234, 120, 10, 15, 234, 119, 10, - 15, 234, 118, 10, 15, 234, 117, 10, 15, 234, 116, 10, 15, 234, 115, 10, - 15, 234, 114, 10, 15, 234, 113, 10, 15, 234, 112, 10, 15, 234, 111, 10, - 15, 234, 110, 10, 15, 234, 109, 10, 15, 234, 108, 10, 15, 234, 107, 10, - 15, 234, 106, 10, 15, 234, 105, 10, 15, 234, 104, 10, 15, 234, 103, 10, - 15, 234, 102, 10, 15, 234, 101, 10, 15, 234, 100, 10, 15, 234, 99, 10, - 15, 234, 98, 10, 15, 234, 97, 10, 15, 234, 96, 10, 15, 234, 95, 10, 15, - 234, 94, 10, 15, 234, 93, 10, 15, 234, 92, 10, 15, 234, 91, 10, 15, 234, - 90, 10, 15, 234, 89, 10, 15, 234, 88, 10, 15, 234, 87, 10, 15, 234, 86, - 10, 15, 234, 85, 10, 15, 234, 84, 10, 15, 234, 83, 10, 15, 234, 82, 10, - 15, 234, 81, 10, 15, 234, 80, 10, 15, 234, 79, 10, 15, 234, 78, 10, 15, - 234, 77, 10, 15, 234, 76, 10, 15, 234, 75, 10, 15, 234, 74, 10, 15, 234, - 73, 10, 15, 234, 72, 10, 15, 234, 71, 10, 15, 234, 70, 10, 15, 234, 69, - 10, 15, 234, 68, 10, 15, 234, 67, 10, 15, 234, 66, 10, 15, 234, 65, 10, - 15, 234, 64, 10, 15, 234, 63, 10, 15, 234, 62, 10, 15, 234, 61, 10, 15, - 234, 60, 10, 15, 234, 59, 10, 15, 234, 58, 10, 15, 234, 57, 10, 15, 234, - 56, 10, 15, 234, 55, 10, 15, 234, 54, 10, 15, 234, 53, 10, 15, 234, 52, - 10, 15, 234, 51, 10, 15, 234, 50, 10, 15, 234, 49, 10, 15, 234, 48, 10, - 15, 234, 47, 10, 15, 234, 46, 10, 15, 234, 45, 10, 15, 234, 44, 10, 15, - 234, 43, 10, 15, 234, 42, 10, 15, 234, 41, 10, 15, 234, 40, 10, 15, 234, - 39, 10, 15, 234, 38, 10, 15, 234, 37, 10, 15, 234, 36, 10, 15, 234, 35, - 10, 15, 234, 34, 10, 15, 234, 33, 10, 15, 234, 32, 10, 15, 234, 31, 10, - 15, 234, 30, 10, 15, 234, 29, 10, 15, 234, 28, 10, 15, 234, 27, 10, 15, - 234, 26, 10, 15, 234, 25, 10, 15, 234, 24, 10, 15, 234, 23, 10, 15, 234, - 22, 10, 15, 234, 21, 10, 15, 234, 20, 10, 15, 234, 19, 10, 15, 234, 18, - 10, 15, 234, 17, 10, 15, 234, 16, 10, 15, 234, 15, 10, 15, 234, 14, 10, - 15, 234, 13, 10, 15, 234, 12, 10, 15, 234, 11, 10, 15, 234, 10, 10, 15, - 234, 9, 10, 15, 234, 8, 10, 15, 234, 7, 10, 15, 234, 6, 10, 15, 234, 5, - 10, 15, 234, 4, 10, 15, 234, 3, 10, 15, 234, 2, 10, 15, 234, 1, 10, 15, - 234, 0, 10, 15, 233, 255, 10, 15, 233, 254, 10, 15, 233, 253, 10, 15, - 233, 252, 10, 15, 233, 251, 10, 15, 233, 250, 10, 15, 233, 249, 10, 15, - 233, 248, 10, 15, 233, 247, 10, 15, 233, 246, 10, 15, 233, 245, 10, 15, - 233, 244, 10, 15, 233, 243, 10, 15, 233, 242, 10, 15, 233, 241, 10, 15, - 233, 240, 10, 15, 233, 239, 10, 15, 233, 238, 10, 15, 233, 237, 10, 15, - 233, 236, 10, 15, 233, 235, 10, 15, 233, 234, 10, 15, 233, 233, 10, 15, - 233, 232, 10, 15, 233, 231, 10, 15, 233, 230, 10, 15, 233, 229, 10, 15, - 233, 228, 10, 15, 233, 227, 10, 15, 233, 226, 10, 15, 233, 225, 10, 15, - 233, 224, 10, 15, 233, 223, 10, 15, 233, 222, 10, 15, 233, 221, 10, 15, - 233, 220, 10, 15, 233, 219, 10, 15, 233, 218, 10, 15, 233, 217, 10, 15, - 233, 216, 10, 15, 233, 215, 10, 15, 233, 214, 10, 15, 233, 213, 10, 15, - 233, 212, 10, 15, 233, 211, 10, 15, 233, 210, 10, 15, 233, 209, 10, 15, - 233, 208, 10, 15, 233, 207, 10, 15, 233, 206, 10, 15, 233, 205, 10, 15, - 233, 204, 10, 15, 233, 203, 10, 15, 233, 202, 10, 15, 233, 201, 10, 15, - 233, 200, 10, 15, 233, 199, 10, 15, 233, 198, 10, 15, 233, 197, 10, 15, - 233, 196, 10, 15, 233, 195, 10, 15, 233, 194, 10, 15, 233, 193, 10, 15, - 233, 192, 10, 15, 233, 191, 10, 15, 233, 190, 10, 15, 233, 189, 10, 15, - 233, 188, 10, 15, 233, 187, 10, 15, 233, 186, 10, 15, 233, 185, 10, 15, - 233, 184, 10, 15, 233, 183, 10, 15, 233, 182, 10, 15, 233, 181, 10, 15, - 233, 180, 10, 15, 233, 179, 10, 15, 233, 178, 10, 15, 233, 177, 10, 15, - 233, 176, 10, 15, 233, 175, 10, 15, 233, 174, 10, 15, 233, 173, 10, 15, - 233, 172, 10, 15, 233, 171, 10, 15, 233, 170, 10, 15, 233, 169, 10, 15, - 233, 168, 10, 15, 233, 167, 10, 15, 233, 166, 10, 15, 233, 165, 10, 15, - 233, 164, 10, 15, 233, 163, 10, 15, 233, 162, 10, 15, 233, 161, 10, 15, - 233, 160, 10, 15, 233, 159, 10, 15, 233, 158, 10, 15, 233, 157, 10, 15, - 233, 156, 10, 15, 233, 155, 10, 15, 233, 154, 10, 15, 233, 153, 10, 15, - 233, 152, 10, 15, 233, 151, 10, 15, 233, 150, 10, 15, 233, 149, 10, 15, - 233, 148, 10, 15, 233, 147, 10, 15, 233, 146, 10, 15, 233, 145, 10, 15, - 233, 144, 10, 15, 233, 143, 10, 15, 233, 142, 10, 15, 233, 141, 10, 15, - 233, 140, 10, 15, 233, 139, 10, 15, 233, 138, 10, 15, 233, 137, 10, 15, - 233, 136, 10, 15, 233, 135, 10, 15, 233, 134, 7, 5, 28, 241, 254, 7, 5, - 28, 241, 250, 7, 5, 28, 241, 199, 7, 5, 28, 241, 253, 7, 5, 28, 241, 252, - 7, 5, 28, 152, 218, 1, 213, 10, 7, 5, 28, 214, 40, 164, 5, 28, 227, 84, - 224, 29, 164, 5, 28, 227, 84, 243, 108, 164, 5, 28, 227, 84, 233, 38, - 164, 5, 28, 208, 219, 224, 29, 164, 5, 28, 227, 84, 206, 173, 103, 1, - 205, 237, 2, 238, 244, 103, 220, 205, 232, 103, 209, 51, 103, 28, 206, 9, - 205, 237, 205, 237, 221, 194, 103, 1, 252, 139, 251, 154, 103, 1, 207, - 17, 252, 172, 103, 1, 207, 17, 246, 111, 103, 1, 207, 17, 239, 71, 103, - 1, 207, 17, 232, 45, 103, 1, 207, 17, 230, 98, 103, 1, 207, 17, 42, 227, - 90, 103, 1, 207, 17, 218, 242, 103, 1, 207, 17, 212, 147, 103, 1, 252, - 139, 101, 53, 103, 1, 215, 172, 2, 215, 172, 245, 23, 103, 1, 215, 172, - 2, 215, 45, 245, 23, 103, 1, 215, 172, 2, 246, 131, 23, 215, 172, 245, - 23, 103, 1, 215, 172, 2, 246, 131, 23, 215, 45, 245, 23, 103, 1, 126, 2, - 221, 194, 103, 1, 126, 2, 220, 7, 103, 1, 126, 2, 227, 204, 103, 1, 250, - 11, 2, 246, 130, 103, 1, 240, 48, 2, 246, 130, 103, 1, 246, 112, 2, 246, - 130, 103, 1, 239, 72, 2, 227, 204, 103, 1, 209, 44, 2, 246, 130, 103, 1, - 205, 97, 2, 246, 130, 103, 1, 212, 81, 2, 246, 130, 103, 1, 205, 237, 2, - 246, 130, 103, 1, 42, 232, 46, 2, 246, 130, 103, 1, 232, 46, 2, 246, 130, - 103, 1, 230, 99, 2, 246, 130, 103, 1, 227, 91, 2, 246, 130, 103, 1, 223, - 174, 2, 246, 130, 103, 1, 217, 158, 2, 246, 130, 103, 1, 42, 221, 175, 2, - 246, 130, 103, 1, 221, 175, 2, 246, 130, 103, 1, 210, 239, 2, 246, 130, - 103, 1, 219, 224, 2, 246, 130, 103, 1, 218, 243, 2, 246, 130, 103, 1, - 215, 172, 2, 246, 130, 103, 1, 212, 148, 2, 246, 130, 103, 1, 209, 44, 2, - 238, 142, 103, 1, 250, 11, 2, 219, 93, 103, 1, 232, 46, 2, 219, 93, 103, - 1, 221, 175, 2, 219, 93, 103, 28, 126, 230, 98, 8, 1, 126, 207, 77, 61, - 17, 8, 1, 126, 207, 77, 42, 17, 8, 1, 250, 49, 61, 17, 8, 1, 250, 49, 42, - 17, 8, 1, 250, 49, 78, 17, 8, 1, 250, 49, 169, 17, 8, 1, 221, 158, 61, - 17, 8, 1, 221, 158, 42, 17, 8, 1, 221, 158, 78, 17, 8, 1, 221, 158, 169, - 17, 8, 1, 250, 37, 61, 17, 8, 1, 250, 37, 42, 17, 8, 1, 250, 37, 78, 17, - 8, 1, 250, 37, 169, 17, 8, 1, 210, 199, 61, 17, 8, 1, 210, 199, 42, 17, - 8, 1, 210, 199, 78, 17, 8, 1, 210, 199, 169, 17, 8, 1, 212, 114, 61, 17, - 8, 1, 212, 114, 42, 17, 8, 1, 212, 114, 78, 17, 8, 1, 212, 114, 169, 17, - 8, 1, 210, 201, 61, 17, 8, 1, 210, 201, 42, 17, 8, 1, 210, 201, 78, 17, - 8, 1, 210, 201, 169, 17, 8, 1, 209, 33, 61, 17, 8, 1, 209, 33, 42, 17, 8, - 1, 209, 33, 78, 17, 8, 1, 209, 33, 169, 17, 8, 1, 221, 156, 61, 17, 8, 1, - 221, 156, 42, 17, 8, 1, 221, 156, 78, 17, 8, 1, 221, 156, 169, 17, 8, 1, - 243, 202, 61, 17, 8, 1, 243, 202, 42, 17, 8, 1, 243, 202, 78, 17, 8, 1, - 243, 202, 169, 17, 8, 1, 223, 132, 61, 17, 8, 1, 223, 132, 42, 17, 8, 1, - 223, 132, 78, 17, 8, 1, 223, 132, 169, 17, 8, 1, 212, 136, 61, 17, 8, 1, - 212, 136, 42, 17, 8, 1, 212, 136, 78, 17, 8, 1, 212, 136, 169, 17, 8, 1, - 212, 134, 61, 17, 8, 1, 212, 134, 42, 17, 8, 1, 212, 134, 78, 17, 8, 1, - 212, 134, 169, 17, 8, 1, 246, 52, 61, 17, 8, 1, 246, 52, 42, 17, 8, 1, - 246, 125, 61, 17, 8, 1, 246, 125, 42, 17, 8, 1, 243, 230, 61, 17, 8, 1, - 243, 230, 42, 17, 8, 1, 246, 50, 61, 17, 8, 1, 246, 50, 42, 17, 8, 1, - 232, 177, 61, 17, 8, 1, 232, 177, 42, 17, 8, 1, 218, 82, 61, 17, 8, 1, - 218, 82, 42, 17, 8, 1, 231, 213, 61, 17, 8, 1, 231, 213, 42, 17, 8, 1, - 231, 213, 78, 17, 8, 1, 231, 213, 169, 17, 8, 1, 240, 232, 61, 17, 8, 1, - 240, 232, 42, 17, 8, 1, 240, 232, 78, 17, 8, 1, 240, 232, 169, 17, 8, 1, - 239, 201, 61, 17, 8, 1, 239, 201, 42, 17, 8, 1, 239, 201, 78, 17, 8, 1, - 239, 201, 169, 17, 8, 1, 225, 1, 61, 17, 8, 1, 225, 1, 42, 17, 8, 1, 225, - 1, 78, 17, 8, 1, 225, 1, 169, 17, 8, 1, 224, 55, 240, 66, 61, 17, 8, 1, - 224, 55, 240, 66, 42, 17, 8, 1, 218, 128, 61, 17, 8, 1, 218, 128, 42, 17, - 8, 1, 218, 128, 78, 17, 8, 1, 218, 128, 169, 17, 8, 1, 239, 51, 2, 87, - 84, 61, 17, 8, 1, 239, 51, 2, 87, 84, 42, 17, 8, 1, 239, 51, 240, 17, 61, - 17, 8, 1, 239, 51, 240, 17, 42, 17, 8, 1, 239, 51, 240, 17, 78, 17, 8, 1, - 239, 51, 240, 17, 169, 17, 8, 1, 239, 51, 245, 48, 61, 17, 8, 1, 239, 51, - 245, 48, 42, 17, 8, 1, 239, 51, 245, 48, 78, 17, 8, 1, 239, 51, 245, 48, - 169, 17, 8, 1, 87, 250, 122, 61, 17, 8, 1, 87, 250, 122, 42, 17, 8, 1, - 87, 250, 122, 2, 239, 112, 84, 61, 17, 8, 1, 87, 250, 122, 2, 239, 112, - 84, 42, 17, 8, 16, 67, 52, 8, 16, 67, 55, 8, 16, 118, 177, 52, 8, 16, - 118, 177, 55, 8, 16, 129, 177, 52, 8, 16, 129, 177, 55, 8, 16, 129, 177, - 220, 201, 173, 52, 8, 16, 129, 177, 220, 201, 173, 55, 8, 16, 241, 125, - 177, 52, 8, 16, 241, 125, 177, 55, 8, 16, 50, 79, 250, 129, 55, 8, 16, - 118, 177, 208, 228, 52, 8, 16, 118, 177, 208, 228, 55, 8, 16, 218, 148, - 8, 16, 5, 212, 195, 52, 8, 16, 5, 212, 195, 55, 8, 1, 225, 80, 61, 17, 8, - 1, 225, 80, 42, 17, 8, 1, 225, 80, 78, 17, 8, 1, 225, 80, 169, 17, 8, 1, - 106, 61, 17, 8, 1, 106, 42, 17, 8, 1, 222, 207, 61, 17, 8, 1, 222, 207, - 42, 17, 8, 1, 205, 214, 61, 17, 8, 1, 205, 214, 42, 17, 8, 1, 106, 2, - 239, 112, 84, 61, 17, 8, 1, 209, 40, 61, 17, 8, 1, 209, 40, 42, 17, 8, 1, - 231, 101, 222, 207, 61, 17, 8, 1, 231, 101, 222, 207, 42, 17, 8, 1, 231, - 101, 205, 214, 61, 17, 8, 1, 231, 101, 205, 214, 42, 17, 8, 1, 174, 61, - 17, 8, 1, 174, 42, 17, 8, 1, 174, 78, 17, 8, 1, 174, 169, 17, 8, 1, 209, - 251, 231, 228, 231, 101, 126, 227, 229, 78, 17, 8, 1, 209, 251, 231, 228, - 231, 101, 126, 227, 229, 169, 17, 8, 28, 87, 2, 239, 112, 84, 2, 126, 61, - 17, 8, 28, 87, 2, 239, 112, 84, 2, 126, 42, 17, 8, 28, 87, 2, 239, 112, - 84, 2, 252, 249, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, 252, 249, 42, 17, - 8, 28, 87, 2, 239, 112, 84, 2, 207, 60, 61, 17, 8, 28, 87, 2, 239, 112, - 84, 2, 207, 60, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, 106, 61, 17, 8, - 28, 87, 2, 239, 112, 84, 2, 106, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, - 222, 207, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, 222, 207, 42, 17, 8, 28, - 87, 2, 239, 112, 84, 2, 205, 214, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, - 205, 214, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, 174, 61, 17, 8, 28, 87, - 2, 239, 112, 84, 2, 174, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, 174, 78, - 17, 8, 28, 209, 251, 231, 101, 87, 2, 239, 112, 84, 2, 126, 227, 229, 61, - 17, 8, 28, 209, 251, 231, 101, 87, 2, 239, 112, 84, 2, 126, 227, 229, 42, - 17, 8, 28, 209, 251, 231, 101, 87, 2, 239, 112, 84, 2, 126, 227, 229, 78, - 17, 8, 1, 242, 42, 87, 61, 17, 8, 1, 242, 42, 87, 42, 17, 8, 1, 242, 42, - 87, 78, 17, 8, 1, 242, 42, 87, 169, 17, 8, 28, 87, 2, 239, 112, 84, 2, - 171, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, 140, 61, 17, 8, 28, 87, 2, - 239, 112, 84, 2, 80, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, 126, 227, - 229, 61, 17, 8, 28, 87, 2, 239, 112, 84, 2, 87, 61, 17, 8, 28, 250, 39, - 2, 171, 61, 17, 8, 28, 250, 39, 2, 140, 61, 17, 8, 28, 250, 39, 2, 231, - 164, 61, 17, 8, 28, 250, 39, 2, 80, 61, 17, 8, 28, 250, 39, 2, 126, 227, - 229, 61, 17, 8, 28, 250, 39, 2, 87, 61, 17, 8, 28, 212, 116, 2, 171, 61, - 17, 8, 28, 212, 116, 2, 140, 61, 17, 8, 28, 212, 116, 2, 231, 164, 61, - 17, 8, 28, 212, 116, 2, 80, 61, 17, 8, 28, 212, 116, 2, 126, 227, 229, - 61, 17, 8, 28, 212, 116, 2, 87, 61, 17, 8, 28, 212, 38, 2, 171, 61, 17, - 8, 28, 212, 38, 2, 80, 61, 17, 8, 28, 212, 38, 2, 126, 227, 229, 61, 17, - 8, 28, 212, 38, 2, 87, 61, 17, 8, 28, 171, 2, 140, 61, 17, 8, 28, 171, 2, - 80, 61, 17, 8, 28, 140, 2, 171, 61, 17, 8, 28, 140, 2, 80, 61, 17, 8, 28, - 231, 164, 2, 171, 61, 17, 8, 28, 231, 164, 2, 140, 61, 17, 8, 28, 231, - 164, 2, 80, 61, 17, 8, 28, 217, 71, 2, 171, 61, 17, 8, 28, 217, 71, 2, - 140, 61, 17, 8, 28, 217, 71, 2, 231, 164, 61, 17, 8, 28, 217, 71, 2, 80, - 61, 17, 8, 28, 217, 192, 2, 140, 61, 17, 8, 28, 217, 192, 2, 80, 61, 17, - 8, 28, 246, 141, 2, 171, 61, 17, 8, 28, 246, 141, 2, 140, 61, 17, 8, 28, - 246, 141, 2, 231, 164, 61, 17, 8, 28, 246, 141, 2, 80, 61, 17, 8, 28, - 212, 195, 2, 140, 61, 17, 8, 28, 212, 195, 2, 80, 61, 17, 8, 28, 205, - 112, 2, 80, 61, 17, 8, 28, 252, 201, 2, 171, 61, 17, 8, 28, 252, 201, 2, - 80, 61, 17, 8, 28, 240, 95, 2, 171, 61, 17, 8, 28, 240, 95, 2, 80, 61, - 17, 8, 28, 242, 16, 2, 171, 61, 17, 8, 28, 242, 16, 2, 140, 61, 17, 8, - 28, 242, 16, 2, 231, 164, 61, 17, 8, 28, 242, 16, 2, 80, 61, 17, 8, 28, - 242, 16, 2, 126, 227, 229, 61, 17, 8, 28, 242, 16, 2, 87, 61, 17, 8, 28, - 220, 13, 2, 140, 61, 17, 8, 28, 220, 13, 2, 80, 61, 17, 8, 28, 220, 13, - 2, 126, 227, 229, 61, 17, 8, 28, 220, 13, 2, 87, 61, 17, 8, 28, 232, 46, - 2, 126, 61, 17, 8, 28, 232, 46, 2, 171, 61, 17, 8, 28, 232, 46, 2, 140, - 61, 17, 8, 28, 232, 46, 2, 231, 164, 61, 17, 8, 28, 232, 46, 2, 230, 107, - 61, 17, 8, 28, 232, 46, 2, 80, 61, 17, 8, 28, 232, 46, 2, 126, 227, 229, - 61, 17, 8, 28, 232, 46, 2, 87, 61, 17, 8, 28, 230, 107, 2, 171, 61, 17, - 8, 28, 230, 107, 2, 140, 61, 17, 8, 28, 230, 107, 2, 231, 164, 61, 17, 8, - 28, 230, 107, 2, 80, 61, 17, 8, 28, 230, 107, 2, 126, 227, 229, 61, 17, - 8, 28, 230, 107, 2, 87, 61, 17, 8, 28, 80, 2, 171, 61, 17, 8, 28, 80, 2, - 140, 61, 17, 8, 28, 80, 2, 231, 164, 61, 17, 8, 28, 80, 2, 80, 61, 17, 8, - 28, 80, 2, 126, 227, 229, 61, 17, 8, 28, 80, 2, 87, 61, 17, 8, 28, 224, - 55, 2, 171, 61, 17, 8, 28, 224, 55, 2, 140, 61, 17, 8, 28, 224, 55, 2, - 231, 164, 61, 17, 8, 28, 224, 55, 2, 80, 61, 17, 8, 28, 224, 55, 2, 126, - 227, 229, 61, 17, 8, 28, 224, 55, 2, 87, 61, 17, 8, 28, 239, 51, 2, 171, - 61, 17, 8, 28, 239, 51, 2, 80, 61, 17, 8, 28, 239, 51, 2, 126, 227, 229, - 61, 17, 8, 28, 239, 51, 2, 87, 61, 17, 8, 28, 87, 2, 171, 61, 17, 8, 28, - 87, 2, 140, 61, 17, 8, 28, 87, 2, 231, 164, 61, 17, 8, 28, 87, 2, 80, 61, - 17, 8, 28, 87, 2, 126, 227, 229, 61, 17, 8, 28, 87, 2, 87, 61, 17, 8, 28, - 212, 50, 2, 213, 139, 126, 61, 17, 8, 28, 219, 17, 2, 213, 139, 126, 61, - 17, 8, 28, 126, 227, 229, 2, 213, 139, 126, 61, 17, 8, 28, 215, 250, 2, - 246, 105, 61, 17, 8, 28, 215, 250, 2, 231, 251, 61, 17, 8, 28, 215, 250, - 2, 242, 40, 61, 17, 8, 28, 215, 250, 2, 246, 107, 61, 17, 8, 28, 215, - 250, 2, 231, 253, 61, 17, 8, 28, 215, 250, 2, 213, 139, 126, 61, 17, 8, - 28, 87, 2, 239, 112, 84, 2, 219, 17, 42, 17, 8, 28, 87, 2, 239, 112, 84, - 2, 205, 109, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, 80, 42, 17, 8, 28, - 87, 2, 239, 112, 84, 2, 224, 55, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, - 126, 227, 229, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, 87, 42, 17, 8, 28, - 250, 39, 2, 219, 17, 42, 17, 8, 28, 250, 39, 2, 205, 109, 42, 17, 8, 28, - 250, 39, 2, 80, 42, 17, 8, 28, 250, 39, 2, 224, 55, 42, 17, 8, 28, 250, - 39, 2, 126, 227, 229, 42, 17, 8, 28, 250, 39, 2, 87, 42, 17, 8, 28, 212, - 116, 2, 219, 17, 42, 17, 8, 28, 212, 116, 2, 205, 109, 42, 17, 8, 28, - 212, 116, 2, 80, 42, 17, 8, 28, 212, 116, 2, 224, 55, 42, 17, 8, 28, 212, - 116, 2, 126, 227, 229, 42, 17, 8, 28, 212, 116, 2, 87, 42, 17, 8, 28, - 212, 38, 2, 219, 17, 42, 17, 8, 28, 212, 38, 2, 205, 109, 42, 17, 8, 28, - 212, 38, 2, 80, 42, 17, 8, 28, 212, 38, 2, 224, 55, 42, 17, 8, 28, 212, - 38, 2, 126, 227, 229, 42, 17, 8, 28, 212, 38, 2, 87, 42, 17, 8, 28, 242, - 16, 2, 126, 227, 229, 42, 17, 8, 28, 242, 16, 2, 87, 42, 17, 8, 28, 220, - 13, 2, 126, 227, 229, 42, 17, 8, 28, 220, 13, 2, 87, 42, 17, 8, 28, 232, - 46, 2, 126, 42, 17, 8, 28, 232, 46, 2, 230, 107, 42, 17, 8, 28, 232, 46, - 2, 80, 42, 17, 8, 28, 232, 46, 2, 126, 227, 229, 42, 17, 8, 28, 232, 46, - 2, 87, 42, 17, 8, 28, 230, 107, 2, 80, 42, 17, 8, 28, 230, 107, 2, 126, - 227, 229, 42, 17, 8, 28, 230, 107, 2, 87, 42, 17, 8, 28, 80, 2, 126, 42, - 17, 8, 28, 80, 2, 80, 42, 17, 8, 28, 224, 55, 2, 219, 17, 42, 17, 8, 28, - 224, 55, 2, 205, 109, 42, 17, 8, 28, 224, 55, 2, 80, 42, 17, 8, 28, 224, - 55, 2, 224, 55, 42, 17, 8, 28, 224, 55, 2, 126, 227, 229, 42, 17, 8, 28, - 224, 55, 2, 87, 42, 17, 8, 28, 126, 227, 229, 2, 213, 139, 126, 42, 17, - 8, 28, 87, 2, 219, 17, 42, 17, 8, 28, 87, 2, 205, 109, 42, 17, 8, 28, 87, - 2, 80, 42, 17, 8, 28, 87, 2, 224, 55, 42, 17, 8, 28, 87, 2, 126, 227, - 229, 42, 17, 8, 28, 87, 2, 87, 42, 17, 8, 28, 87, 2, 239, 112, 84, 2, - 171, 78, 17, 8, 28, 87, 2, 239, 112, 84, 2, 140, 78, 17, 8, 28, 87, 2, - 239, 112, 84, 2, 231, 164, 78, 17, 8, 28, 87, 2, 239, 112, 84, 2, 80, 78, - 17, 8, 28, 87, 2, 239, 112, 84, 2, 239, 51, 78, 17, 8, 28, 250, 39, 2, - 171, 78, 17, 8, 28, 250, 39, 2, 140, 78, 17, 8, 28, 250, 39, 2, 231, 164, - 78, 17, 8, 28, 250, 39, 2, 80, 78, 17, 8, 28, 250, 39, 2, 239, 51, 78, - 17, 8, 28, 212, 116, 2, 171, 78, 17, 8, 28, 212, 116, 2, 140, 78, 17, 8, - 28, 212, 116, 2, 231, 164, 78, 17, 8, 28, 212, 116, 2, 80, 78, 17, 8, 28, - 212, 116, 2, 239, 51, 78, 17, 8, 28, 212, 38, 2, 80, 78, 17, 8, 28, 171, - 2, 140, 78, 17, 8, 28, 171, 2, 80, 78, 17, 8, 28, 140, 2, 171, 78, 17, 8, - 28, 140, 2, 80, 78, 17, 8, 28, 231, 164, 2, 171, 78, 17, 8, 28, 231, 164, - 2, 80, 78, 17, 8, 28, 217, 71, 2, 171, 78, 17, 8, 28, 217, 71, 2, 140, - 78, 17, 8, 28, 217, 71, 2, 231, 164, 78, 17, 8, 28, 217, 71, 2, 80, 78, - 17, 8, 28, 217, 192, 2, 140, 78, 17, 8, 28, 217, 192, 2, 231, 164, 78, - 17, 8, 28, 217, 192, 2, 80, 78, 17, 8, 28, 246, 141, 2, 171, 78, 17, 8, - 28, 246, 141, 2, 140, 78, 17, 8, 28, 246, 141, 2, 231, 164, 78, 17, 8, - 28, 246, 141, 2, 80, 78, 17, 8, 28, 212, 195, 2, 140, 78, 17, 8, 28, 205, - 112, 2, 80, 78, 17, 8, 28, 252, 201, 2, 171, 78, 17, 8, 28, 252, 201, 2, - 80, 78, 17, 8, 28, 240, 95, 2, 171, 78, 17, 8, 28, 240, 95, 2, 80, 78, - 17, 8, 28, 242, 16, 2, 171, 78, 17, 8, 28, 242, 16, 2, 140, 78, 17, 8, - 28, 242, 16, 2, 231, 164, 78, 17, 8, 28, 242, 16, 2, 80, 78, 17, 8, 28, - 220, 13, 2, 140, 78, 17, 8, 28, 220, 13, 2, 80, 78, 17, 8, 28, 232, 46, - 2, 171, 78, 17, 8, 28, 232, 46, 2, 140, 78, 17, 8, 28, 232, 46, 2, 231, - 164, 78, 17, 8, 28, 232, 46, 2, 230, 107, 78, 17, 8, 28, 232, 46, 2, 80, - 78, 17, 8, 28, 230, 107, 2, 171, 78, 17, 8, 28, 230, 107, 2, 140, 78, 17, - 8, 28, 230, 107, 2, 231, 164, 78, 17, 8, 28, 230, 107, 2, 80, 78, 17, 8, - 28, 230, 107, 2, 239, 51, 78, 17, 8, 28, 80, 2, 171, 78, 17, 8, 28, 80, - 2, 140, 78, 17, 8, 28, 80, 2, 231, 164, 78, 17, 8, 28, 80, 2, 80, 78, 17, - 8, 28, 224, 55, 2, 171, 78, 17, 8, 28, 224, 55, 2, 140, 78, 17, 8, 28, - 224, 55, 2, 231, 164, 78, 17, 8, 28, 224, 55, 2, 80, 78, 17, 8, 28, 224, - 55, 2, 239, 51, 78, 17, 8, 28, 239, 51, 2, 171, 78, 17, 8, 28, 239, 51, - 2, 80, 78, 17, 8, 28, 239, 51, 2, 213, 139, 126, 78, 17, 8, 28, 87, 2, - 171, 78, 17, 8, 28, 87, 2, 140, 78, 17, 8, 28, 87, 2, 231, 164, 78, 17, - 8, 28, 87, 2, 80, 78, 17, 8, 28, 87, 2, 239, 51, 78, 17, 8, 28, 87, 2, - 239, 112, 84, 2, 80, 169, 17, 8, 28, 87, 2, 239, 112, 84, 2, 239, 51, - 169, 17, 8, 28, 250, 39, 2, 80, 169, 17, 8, 28, 250, 39, 2, 239, 51, 169, - 17, 8, 28, 212, 116, 2, 80, 169, 17, 8, 28, 212, 116, 2, 239, 51, 169, - 17, 8, 28, 212, 38, 2, 80, 169, 17, 8, 28, 212, 38, 2, 239, 51, 169, 17, - 8, 28, 217, 71, 2, 80, 169, 17, 8, 28, 217, 71, 2, 239, 51, 169, 17, 8, - 28, 215, 211, 2, 80, 169, 17, 8, 28, 215, 211, 2, 239, 51, 169, 17, 8, - 28, 232, 46, 2, 230, 107, 169, 17, 8, 28, 232, 46, 2, 80, 169, 17, 8, 28, - 230, 107, 2, 80, 169, 17, 8, 28, 224, 55, 2, 80, 169, 17, 8, 28, 224, 55, - 2, 239, 51, 169, 17, 8, 28, 87, 2, 80, 169, 17, 8, 28, 87, 2, 239, 51, - 169, 17, 8, 28, 215, 250, 2, 242, 40, 169, 17, 8, 28, 215, 250, 2, 246, - 107, 169, 17, 8, 28, 215, 250, 2, 231, 253, 169, 17, 8, 28, 212, 195, 2, - 126, 227, 229, 61, 17, 8, 28, 212, 195, 2, 87, 61, 17, 8, 28, 252, 201, - 2, 126, 227, 229, 61, 17, 8, 28, 252, 201, 2, 87, 61, 17, 8, 28, 240, 95, - 2, 126, 227, 229, 61, 17, 8, 28, 240, 95, 2, 87, 61, 17, 8, 28, 217, 71, - 2, 126, 227, 229, 61, 17, 8, 28, 217, 71, 2, 87, 61, 17, 8, 28, 215, 211, - 2, 126, 227, 229, 61, 17, 8, 28, 215, 211, 2, 87, 61, 17, 8, 28, 140, 2, - 126, 227, 229, 61, 17, 8, 28, 140, 2, 87, 61, 17, 8, 28, 171, 2, 126, - 227, 229, 61, 17, 8, 28, 171, 2, 87, 61, 17, 8, 28, 231, 164, 2, 126, - 227, 229, 61, 17, 8, 28, 231, 164, 2, 87, 61, 17, 8, 28, 217, 192, 2, - 126, 227, 229, 61, 17, 8, 28, 217, 192, 2, 87, 61, 17, 8, 28, 246, 141, - 2, 126, 227, 229, 61, 17, 8, 28, 246, 141, 2, 87, 61, 17, 8, 28, 215, - 211, 2, 171, 61, 17, 8, 28, 215, 211, 2, 140, 61, 17, 8, 28, 215, 211, 2, - 231, 164, 61, 17, 8, 28, 215, 211, 2, 80, 61, 17, 8, 28, 215, 211, 2, - 219, 17, 61, 17, 8, 28, 217, 71, 2, 219, 17, 61, 17, 8, 28, 217, 192, 2, - 219, 17, 61, 17, 8, 28, 246, 141, 2, 219, 17, 61, 17, 8, 28, 212, 195, 2, - 126, 227, 229, 42, 17, 8, 28, 212, 195, 2, 87, 42, 17, 8, 28, 252, 201, - 2, 126, 227, 229, 42, 17, 8, 28, 252, 201, 2, 87, 42, 17, 8, 28, 240, 95, - 2, 126, 227, 229, 42, 17, 8, 28, 240, 95, 2, 87, 42, 17, 8, 28, 217, 71, - 2, 126, 227, 229, 42, 17, 8, 28, 217, 71, 2, 87, 42, 17, 8, 28, 215, 211, - 2, 126, 227, 229, 42, 17, 8, 28, 215, 211, 2, 87, 42, 17, 8, 28, 140, 2, - 126, 227, 229, 42, 17, 8, 28, 140, 2, 87, 42, 17, 8, 28, 171, 2, 126, - 227, 229, 42, 17, 8, 28, 171, 2, 87, 42, 17, 8, 28, 231, 164, 2, 126, - 227, 229, 42, 17, 8, 28, 231, 164, 2, 87, 42, 17, 8, 28, 217, 192, 2, - 126, 227, 229, 42, 17, 8, 28, 217, 192, 2, 87, 42, 17, 8, 28, 246, 141, - 2, 126, 227, 229, 42, 17, 8, 28, 246, 141, 2, 87, 42, 17, 8, 28, 215, - 211, 2, 171, 42, 17, 8, 28, 215, 211, 2, 140, 42, 17, 8, 28, 215, 211, 2, - 231, 164, 42, 17, 8, 28, 215, 211, 2, 80, 42, 17, 8, 28, 215, 211, 2, - 219, 17, 42, 17, 8, 28, 217, 71, 2, 219, 17, 42, 17, 8, 28, 217, 192, 2, - 219, 17, 42, 17, 8, 28, 246, 141, 2, 219, 17, 42, 17, 8, 28, 215, 211, 2, - 171, 78, 17, 8, 28, 215, 211, 2, 140, 78, 17, 8, 28, 215, 211, 2, 231, - 164, 78, 17, 8, 28, 215, 211, 2, 80, 78, 17, 8, 28, 217, 71, 2, 239, 51, - 78, 17, 8, 28, 215, 211, 2, 239, 51, 78, 17, 8, 28, 212, 195, 2, 80, 78, - 17, 8, 28, 217, 71, 2, 171, 169, 17, 8, 28, 217, 71, 2, 140, 169, 17, 8, - 28, 217, 71, 2, 231, 164, 169, 17, 8, 28, 215, 211, 2, 171, 169, 17, 8, - 28, 215, 211, 2, 140, 169, 17, 8, 28, 215, 211, 2, 231, 164, 169, 17, 8, - 28, 212, 195, 2, 80, 169, 17, 8, 28, 205, 112, 2, 80, 169, 17, 8, 28, - 126, 2, 242, 38, 42, 17, 8, 28, 126, 2, 242, 38, 61, 17, 222, 110, 47, - 221, 216, 222, 110, 48, 221, 216, 8, 28, 212, 116, 2, 171, 2, 80, 78, 17, - 8, 28, 212, 116, 2, 140, 2, 171, 42, 17, 8, 28, 212, 116, 2, 140, 2, 171, - 78, 17, 8, 28, 212, 116, 2, 140, 2, 80, 78, 17, 8, 28, 212, 116, 2, 231, - 164, 2, 80, 78, 17, 8, 28, 212, 116, 2, 80, 2, 171, 78, 17, 8, 28, 212, - 116, 2, 80, 2, 140, 78, 17, 8, 28, 212, 116, 2, 80, 2, 231, 164, 78, 17, - 8, 28, 171, 2, 80, 2, 140, 42, 17, 8, 28, 171, 2, 80, 2, 140, 78, 17, 8, - 28, 140, 2, 80, 2, 87, 42, 17, 8, 28, 140, 2, 80, 2, 126, 227, 229, 42, - 17, 8, 28, 217, 71, 2, 140, 2, 171, 78, 17, 8, 28, 217, 71, 2, 171, 2, - 140, 78, 17, 8, 28, 217, 71, 2, 171, 2, 126, 227, 229, 42, 17, 8, 28, - 217, 71, 2, 80, 2, 140, 42, 17, 8, 28, 217, 71, 2, 80, 2, 140, 78, 17, 8, - 28, 217, 71, 2, 80, 2, 171, 78, 17, 8, 28, 217, 71, 2, 80, 2, 80, 42, 17, - 8, 28, 217, 71, 2, 80, 2, 80, 78, 17, 8, 28, 217, 192, 2, 140, 2, 140, - 42, 17, 8, 28, 217, 192, 2, 140, 2, 140, 78, 17, 8, 28, 217, 192, 2, 80, - 2, 80, 42, 17, 8, 28, 215, 211, 2, 140, 2, 80, 42, 17, 8, 28, 215, 211, - 2, 140, 2, 80, 78, 17, 8, 28, 215, 211, 2, 171, 2, 87, 42, 17, 8, 28, - 215, 211, 2, 80, 2, 231, 164, 42, 17, 8, 28, 215, 211, 2, 80, 2, 231, - 164, 78, 17, 8, 28, 215, 211, 2, 80, 2, 80, 42, 17, 8, 28, 215, 211, 2, - 80, 2, 80, 78, 17, 8, 28, 246, 141, 2, 140, 2, 126, 227, 229, 42, 17, 8, - 28, 246, 141, 2, 231, 164, 2, 80, 42, 17, 8, 28, 246, 141, 2, 231, 164, - 2, 80, 78, 17, 8, 28, 212, 195, 2, 80, 2, 140, 42, 17, 8, 28, 212, 195, - 2, 80, 2, 140, 78, 17, 8, 28, 212, 195, 2, 80, 2, 80, 78, 17, 8, 28, 212, - 195, 2, 80, 2, 87, 42, 17, 8, 28, 252, 201, 2, 171, 2, 80, 42, 17, 8, 28, - 252, 201, 2, 80, 2, 80, 42, 17, 8, 28, 252, 201, 2, 80, 2, 80, 78, 17, 8, - 28, 252, 201, 2, 80, 2, 126, 227, 229, 42, 17, 8, 28, 240, 95, 2, 80, 2, - 80, 42, 17, 8, 28, 240, 95, 2, 80, 2, 87, 42, 17, 8, 28, 240, 95, 2, 80, - 2, 126, 227, 229, 42, 17, 8, 28, 242, 16, 2, 231, 164, 2, 80, 42, 17, 8, - 28, 242, 16, 2, 231, 164, 2, 80, 78, 17, 8, 28, 220, 13, 2, 80, 2, 140, - 42, 17, 8, 28, 220, 13, 2, 80, 2, 80, 42, 17, 8, 28, 230, 107, 2, 140, 2, - 80, 42, 17, 8, 28, 230, 107, 2, 140, 2, 87, 42, 17, 8, 28, 230, 107, 2, - 140, 2, 126, 227, 229, 42, 17, 8, 28, 230, 107, 2, 171, 2, 171, 78, 17, - 8, 28, 230, 107, 2, 171, 2, 171, 42, 17, 8, 28, 230, 107, 2, 231, 164, 2, - 80, 42, 17, 8, 28, 230, 107, 2, 231, 164, 2, 80, 78, 17, 8, 28, 230, 107, - 2, 80, 2, 140, 42, 17, 8, 28, 230, 107, 2, 80, 2, 140, 78, 17, 8, 28, 80, - 2, 140, 2, 171, 78, 17, 8, 28, 80, 2, 140, 2, 80, 78, 17, 8, 28, 80, 2, - 140, 2, 87, 42, 17, 8, 28, 80, 2, 171, 2, 140, 78, 17, 8, 28, 80, 2, 171, - 2, 80, 78, 17, 8, 28, 80, 2, 231, 164, 2, 171, 78, 17, 8, 28, 80, 2, 231, - 164, 2, 80, 78, 17, 8, 28, 80, 2, 171, 2, 231, 164, 78, 17, 8, 28, 239, - 51, 2, 80, 2, 171, 78, 17, 8, 28, 239, 51, 2, 80, 2, 80, 78, 17, 8, 28, - 224, 55, 2, 140, 2, 80, 78, 17, 8, 28, 224, 55, 2, 140, 2, 126, 227, 229, - 42, 17, 8, 28, 224, 55, 2, 171, 2, 80, 42, 17, 8, 28, 224, 55, 2, 171, 2, - 80, 78, 17, 8, 28, 224, 55, 2, 171, 2, 126, 227, 229, 42, 17, 8, 28, 224, - 55, 2, 80, 2, 87, 42, 17, 8, 28, 224, 55, 2, 80, 2, 126, 227, 229, 42, - 17, 8, 28, 87, 2, 80, 2, 80, 42, 17, 8, 28, 87, 2, 80, 2, 80, 78, 17, 8, - 28, 250, 39, 2, 231, 164, 2, 87, 42, 17, 8, 28, 212, 116, 2, 171, 2, 87, - 42, 17, 8, 28, 212, 116, 2, 171, 2, 126, 227, 229, 42, 17, 8, 28, 212, - 116, 2, 231, 164, 2, 87, 42, 17, 8, 28, 212, 116, 2, 231, 164, 2, 126, - 227, 229, 42, 17, 8, 28, 212, 116, 2, 80, 2, 87, 42, 17, 8, 28, 212, 116, - 2, 80, 2, 126, 227, 229, 42, 17, 8, 28, 171, 2, 80, 2, 87, 42, 17, 8, 28, - 171, 2, 140, 2, 126, 227, 229, 42, 17, 8, 28, 171, 2, 80, 2, 126, 227, - 229, 42, 17, 8, 28, 217, 71, 2, 231, 164, 2, 126, 227, 229, 42, 17, 8, - 28, 217, 192, 2, 140, 2, 87, 42, 17, 8, 28, 215, 211, 2, 140, 2, 87, 42, - 17, 8, 28, 246, 141, 2, 140, 2, 87, 42, 17, 8, 28, 230, 107, 2, 171, 2, - 87, 42, 17, 8, 28, 230, 107, 2, 80, 2, 87, 42, 17, 8, 28, 87, 2, 140, 2, - 87, 42, 17, 8, 28, 87, 2, 171, 2, 87, 42, 17, 8, 28, 87, 2, 80, 2, 87, - 42, 17, 8, 28, 80, 2, 80, 2, 87, 42, 17, 8, 28, 220, 13, 2, 80, 2, 87, - 42, 17, 8, 28, 224, 55, 2, 140, 2, 87, 42, 17, 8, 28, 220, 13, 2, 80, 2, - 140, 78, 17, 8, 28, 230, 107, 2, 140, 2, 80, 78, 17, 8, 28, 252, 201, 2, - 80, 2, 87, 42, 17, 8, 28, 232, 46, 2, 80, 2, 87, 42, 17, 8, 28, 224, 55, - 2, 171, 2, 140, 78, 17, 8, 28, 80, 2, 231, 164, 2, 87, 42, 17, 8, 28, - 230, 107, 2, 171, 2, 80, 78, 17, 8, 28, 232, 46, 2, 80, 2, 80, 42, 17, 8, - 28, 230, 107, 2, 171, 2, 80, 42, 17, 8, 28, 224, 55, 2, 171, 2, 140, 42, - 17, 8, 28, 171, 2, 140, 2, 87, 42, 17, 8, 28, 140, 2, 171, 2, 87, 42, 17, - 8, 28, 80, 2, 171, 2, 87, 42, 17, 8, 28, 242, 16, 2, 80, 2, 87, 42, 17, - 8, 28, 250, 39, 2, 140, 2, 87, 42, 17, 8, 28, 232, 46, 2, 80, 2, 80, 78, - 17, 8, 28, 252, 201, 2, 171, 2, 80, 78, 17, 8, 28, 217, 192, 2, 80, 2, - 80, 78, 17, 8, 28, 217, 71, 2, 231, 164, 2, 87, 42, 17, 8, 28, 224, 55, - 2, 171, 2, 87, 42, 17, 8, 28, 217, 168, 209, 172, 251, 232, 231, 25, 213, - 252, 3, 61, 17, 8, 28, 220, 9, 209, 172, 251, 232, 231, 25, 213, 252, 3, - 61, 17, 8, 28, 252, 155, 61, 17, 8, 28, 252, 186, 61, 17, 8, 28, 226, - 171, 61, 17, 8, 28, 217, 169, 61, 17, 8, 28, 219, 67, 61, 17, 8, 28, 252, - 175, 61, 17, 8, 28, 207, 79, 61, 17, 8, 28, 217, 168, 61, 17, 8, 28, 217, - 167, 252, 175, 207, 78, 8, 28, 232, 192, 218, 207, 53, 8, 28, 249, 211, - 252, 35, 252, 36, 54, 217, 58, 54, 216, 203, 54, 216, 135, 54, 216, 124, - 54, 216, 113, 54, 216, 102, 54, 216, 91, 54, 216, 80, 54, 216, 69, 54, - 217, 57, 54, 217, 46, 54, 217, 35, 54, 217, 24, 54, 217, 13, 54, 217, 2, - 54, 216, 247, 220, 131, 241, 136, 33, 79, 247, 155, 220, 131, 241, 136, - 33, 79, 128, 247, 155, 220, 131, 241, 136, 33, 79, 128, 241, 82, 213, - 251, 220, 131, 241, 136, 33, 79, 247, 162, 220, 131, 241, 136, 33, 79, - 216, 52, 220, 131, 241, 136, 33, 79, 242, 168, 83, 220, 131, 241, 136, - 33, 79, 219, 196, 83, 220, 131, 241, 136, 33, 79, 47, 59, 230, 16, 145, - 220, 131, 241, 136, 33, 79, 48, 59, 230, 16, 249, 132, 220, 131, 241, - 136, 33, 79, 194, 243, 54, 36, 28, 47, 239, 121, 36, 28, 48, 239, 121, - 36, 50, 211, 181, 47, 239, 121, 36, 50, 211, 181, 48, 239, 121, 36, 228, - 14, 47, 239, 121, 36, 228, 14, 48, 239, 121, 36, 247, 130, 228, 13, 36, - 28, 47, 160, 55, 36, 28, 48, 160, 55, 36, 211, 181, 47, 160, 55, 36, 211, - 181, 48, 160, 55, 36, 228, 14, 47, 160, 55, 36, 228, 14, 48, 160, 55, 36, - 247, 130, 228, 14, 55, 220, 131, 241, 136, 33, 79, 118, 67, 230, 56, 220, - 131, 241, 136, 33, 79, 243, 51, 246, 78, 220, 131, 241, 136, 33, 79, 243, - 42, 246, 78, 220, 131, 241, 136, 33, 79, 114, 229, 205, 220, 131, 241, - 136, 33, 79, 207, 61, 114, 229, 205, 220, 131, 241, 136, 33, 79, 47, 221, - 216, 220, 131, 241, 136, 33, 79, 48, 221, 216, 220, 131, 241, 136, 33, - 79, 47, 247, 26, 145, 220, 131, 241, 136, 33, 79, 48, 247, 26, 145, 220, - 131, 241, 136, 33, 79, 47, 211, 93, 215, 204, 145, 220, 131, 241, 136, - 33, 79, 48, 211, 93, 215, 204, 145, 220, 131, 241, 136, 33, 79, 47, 60, - 230, 16, 145, 220, 131, 241, 136, 33, 79, 48, 60, 230, 16, 145, 220, 131, - 241, 136, 33, 79, 47, 50, 252, 109, 145, 220, 131, 241, 136, 33, 79, 48, - 50, 252, 109, 145, 220, 131, 241, 136, 33, 79, 47, 252, 109, 145, 220, - 131, 241, 136, 33, 79, 48, 252, 109, 145, 220, 131, 241, 136, 33, 79, 47, - 247, 92, 145, 220, 131, 241, 136, 33, 79, 48, 247, 92, 145, 220, 131, - 241, 136, 33, 79, 47, 59, 247, 92, 145, 220, 131, 241, 136, 33, 79, 48, - 59, 247, 92, 145, 216, 32, 245, 23, 59, 216, 32, 245, 23, 220, 131, 241, - 136, 33, 79, 47, 49, 145, 220, 131, 241, 136, 33, 79, 48, 49, 145, 246, - 77, 222, 81, 248, 125, 222, 81, 207, 61, 222, 81, 50, 207, 61, 222, 81, - 246, 77, 114, 229, 205, 248, 125, 114, 229, 205, 207, 61, 114, 229, 205, - 5, 247, 155, 5, 128, 247, 155, 5, 241, 82, 213, 251, 5, 216, 52, 5, 247, - 162, 5, 219, 196, 83, 5, 242, 168, 83, 5, 243, 51, 246, 78, 5, 47, 221, - 216, 5, 48, 221, 216, 5, 47, 247, 26, 145, 5, 48, 247, 26, 145, 5, 47, - 211, 93, 215, 204, 145, 5, 48, 211, 93, 215, 204, 145, 5, 43, 53, 5, 252, - 125, 5, 251, 209, 5, 101, 53, 5, 237, 238, 5, 230, 10, 53, 5, 239, 230, - 53, 5, 242, 242, 53, 5, 218, 225, 214, 180, 5, 245, 35, 53, 5, 221, 131, - 53, 5, 247, 153, 251, 199, 8, 242, 38, 61, 17, 8, 212, 154, 2, 242, 38, - 52, 8, 246, 105, 61, 17, 8, 212, 192, 241, 115, 8, 231, 251, 61, 17, 8, - 242, 40, 61, 17, 8, 242, 40, 169, 17, 8, 246, 107, 61, 17, 8, 246, 107, - 169, 17, 8, 231, 253, 61, 17, 8, 231, 253, 169, 17, 8, 215, 250, 61, 17, - 8, 215, 250, 169, 17, 8, 213, 163, 61, 17, 8, 213, 163, 169, 17, 8, 1, - 239, 112, 61, 17, 8, 1, 126, 2, 228, 9, 84, 61, 17, 8, 1, 126, 2, 228, 9, - 84, 42, 17, 8, 1, 126, 2, 239, 112, 84, 61, 17, 8, 1, 126, 2, 239, 112, - 84, 42, 17, 8, 1, 207, 60, 2, 239, 112, 84, 61, 17, 8, 1, 207, 60, 2, - 239, 112, 84, 42, 17, 8, 1, 126, 2, 239, 112, 250, 26, 61, 17, 8, 1, 126, - 2, 239, 112, 250, 26, 42, 17, 8, 1, 87, 2, 239, 112, 84, 61, 17, 8, 1, - 87, 2, 239, 112, 84, 42, 17, 8, 1, 87, 2, 239, 112, 84, 78, 17, 8, 1, 87, - 2, 239, 112, 84, 169, 17, 8, 1, 126, 61, 17, 8, 1, 126, 42, 17, 8, 1, - 250, 39, 61, 17, 8, 1, 250, 39, 42, 17, 8, 1, 250, 39, 78, 17, 8, 1, 250, - 39, 169, 17, 8, 1, 212, 116, 227, 198, 61, 17, 8, 1, 212, 116, 227, 198, - 42, 17, 8, 1, 212, 116, 61, 17, 8, 1, 212, 116, 42, 17, 8, 1, 212, 116, - 78, 17, 8, 1, 212, 116, 169, 17, 8, 1, 212, 38, 61, 17, 8, 1, 212, 38, - 42, 17, 8, 1, 212, 38, 78, 17, 8, 1, 212, 38, 169, 17, 8, 1, 171, 61, 17, - 8, 1, 171, 42, 17, 8, 1, 171, 78, 17, 8, 1, 171, 169, 17, 8, 1, 140, 61, - 17, 8, 1, 140, 42, 17, 8, 1, 140, 78, 17, 8, 1, 140, 169, 17, 8, 1, 231, - 164, 61, 17, 8, 1, 231, 164, 42, 17, 8, 1, 231, 164, 78, 17, 8, 1, 231, - 164, 169, 17, 8, 1, 246, 118, 61, 17, 8, 1, 246, 118, 42, 17, 8, 1, 212, - 50, 61, 17, 8, 1, 212, 50, 42, 17, 8, 1, 219, 17, 61, 17, 8, 1, 219, 17, - 42, 17, 8, 1, 205, 109, 61, 17, 8, 1, 205, 109, 42, 17, 8, 1, 217, 71, - 61, 17, 8, 1, 217, 71, 42, 17, 8, 1, 217, 71, 78, 17, 8, 1, 217, 71, 169, - 17, 8, 1, 215, 211, 61, 17, 8, 1, 215, 211, 42, 17, 8, 1, 215, 211, 78, - 17, 8, 1, 215, 211, 169, 17, 8, 1, 217, 192, 61, 17, 8, 1, 217, 192, 42, - 17, 8, 1, 217, 192, 78, 17, 8, 1, 217, 192, 169, 17, 8, 1, 246, 141, 61, - 17, 8, 1, 246, 141, 42, 17, 8, 1, 246, 141, 78, 17, 8, 1, 246, 141, 169, - 17, 8, 1, 212, 195, 61, 17, 8, 1, 212, 195, 42, 17, 8, 1, 212, 195, 78, - 17, 8, 1, 212, 195, 169, 17, 8, 1, 205, 112, 61, 17, 8, 1, 205, 112, 42, - 17, 8, 1, 205, 112, 78, 17, 8, 1, 205, 112, 169, 17, 8, 1, 252, 201, 61, - 17, 8, 1, 252, 201, 42, 17, 8, 1, 252, 201, 78, 17, 8, 1, 252, 201, 169, - 17, 8, 1, 240, 95, 61, 17, 8, 1, 240, 95, 42, 17, 8, 1, 240, 95, 78, 17, - 8, 1, 240, 95, 169, 17, 8, 1, 242, 16, 61, 17, 8, 1, 242, 16, 42, 17, 8, - 1, 242, 16, 78, 17, 8, 1, 242, 16, 169, 17, 8, 1, 220, 13, 61, 17, 8, 1, - 220, 13, 42, 17, 8, 1, 220, 13, 78, 17, 8, 1, 220, 13, 169, 17, 8, 1, - 232, 46, 61, 17, 8, 1, 232, 46, 42, 17, 8, 1, 232, 46, 78, 17, 8, 1, 232, - 46, 169, 17, 8, 1, 230, 107, 61, 17, 8, 1, 230, 107, 42, 17, 8, 1, 230, - 107, 78, 17, 8, 1, 230, 107, 169, 17, 8, 1, 80, 61, 17, 8, 1, 80, 42, 17, - 8, 1, 80, 78, 17, 8, 1, 80, 169, 17, 8, 1, 224, 55, 61, 17, 8, 1, 224, - 55, 42, 17, 8, 1, 224, 55, 78, 17, 8, 1, 224, 55, 169, 17, 8, 1, 239, 51, - 61, 17, 8, 1, 239, 51, 42, 17, 8, 1, 239, 51, 78, 17, 8, 1, 239, 51, 169, - 17, 8, 1, 207, 60, 61, 17, 8, 1, 207, 60, 42, 17, 8, 1, 126, 227, 229, - 61, 17, 8, 1, 126, 227, 229, 42, 17, 8, 1, 87, 61, 17, 8, 1, 87, 42, 17, - 8, 1, 87, 78, 17, 8, 1, 87, 169, 17, 8, 28, 230, 107, 2, 126, 2, 228, 9, - 84, 61, 17, 8, 28, 230, 107, 2, 126, 2, 228, 9, 84, 42, 17, 8, 28, 230, - 107, 2, 126, 2, 239, 112, 84, 61, 17, 8, 28, 230, 107, 2, 126, 2, 239, - 112, 84, 42, 17, 8, 28, 230, 107, 2, 126, 2, 239, 112, 250, 26, 61, 17, - 8, 28, 230, 107, 2, 126, 2, 239, 112, 250, 26, 42, 17, 8, 28, 230, 107, - 2, 126, 61, 17, 8, 28, 230, 107, 2, 126, 42, 17, 205, 86, 207, 15, 224, - 66, 214, 153, 144, 242, 168, 83, 144, 219, 180, 83, 144, 43, 53, 144, - 245, 35, 53, 144, 221, 131, 53, 144, 252, 125, 144, 252, 53, 144, 47, - 221, 216, 144, 48, 221, 216, 144, 251, 209, 144, 101, 53, 144, 247, 155, - 144, 237, 238, 144, 241, 82, 213, 251, 144, 214, 180, 144, 18, 205, 85, - 144, 18, 102, 144, 18, 105, 144, 18, 142, 144, 18, 139, 144, 18, 168, - 144, 18, 184, 144, 18, 195, 144, 18, 193, 144, 18, 200, 144, 247, 162, - 144, 216, 52, 144, 230, 10, 53, 144, 242, 242, 53, 144, 239, 230, 53, - 144, 219, 196, 83, 144, 247, 153, 251, 199, 144, 7, 6, 1, 62, 144, 7, 6, - 1, 251, 150, 144, 7, 6, 1, 249, 34, 144, 7, 6, 1, 246, 240, 144, 7, 6, 1, - 75, 144, 7, 6, 1, 242, 139, 144, 7, 6, 1, 241, 55, 144, 7, 6, 1, 239, - 155, 144, 7, 6, 1, 74, 144, 7, 6, 1, 232, 203, 144, 7, 6, 1, 232, 76, - 144, 7, 6, 1, 149, 144, 7, 6, 1, 229, 28, 144, 7, 6, 1, 226, 33, 144, 7, - 6, 1, 76, 144, 7, 6, 1, 222, 67, 144, 7, 6, 1, 220, 27, 144, 7, 6, 1, - 137, 144, 7, 6, 1, 182, 144, 7, 6, 1, 213, 10, 144, 7, 6, 1, 71, 144, 7, - 6, 1, 209, 148, 144, 7, 6, 1, 207, 129, 144, 7, 6, 1, 206, 195, 144, 7, - 6, 1, 206, 123, 144, 7, 6, 1, 205, 159, 144, 47, 49, 145, 144, 218, 225, - 214, 180, 144, 48, 49, 145, 144, 247, 228, 253, 21, 144, 114, 229, 205, - 144, 239, 237, 253, 21, 144, 7, 5, 1, 62, 144, 7, 5, 1, 251, 150, 144, 7, - 5, 1, 249, 34, 144, 7, 5, 1, 246, 240, 144, 7, 5, 1, 75, 144, 7, 5, 1, - 242, 139, 144, 7, 5, 1, 241, 55, 144, 7, 5, 1, 239, 155, 144, 7, 5, 1, - 74, 144, 7, 5, 1, 232, 203, 144, 7, 5, 1, 232, 76, 144, 7, 5, 1, 149, - 144, 7, 5, 1, 229, 28, 144, 7, 5, 1, 226, 33, 144, 7, 5, 1, 76, 144, 7, - 5, 1, 222, 67, 144, 7, 5, 1, 220, 27, 144, 7, 5, 1, 137, 144, 7, 5, 1, - 182, 144, 7, 5, 1, 213, 10, 144, 7, 5, 1, 71, 144, 7, 5, 1, 209, 148, - 144, 7, 5, 1, 207, 129, 144, 7, 5, 1, 206, 195, 144, 7, 5, 1, 206, 123, - 144, 7, 5, 1, 205, 159, 144, 47, 247, 26, 145, 144, 79, 229, 205, 144, - 48, 247, 26, 145, 144, 211, 180, 144, 47, 59, 221, 216, 144, 48, 59, 221, - 216, 116, 128, 241, 82, 213, 251, 116, 47, 247, 92, 145, 116, 48, 247, - 92, 145, 116, 128, 247, 155, 116, 64, 226, 247, 245, 23, 116, 64, 1, 206, - 250, 116, 64, 1, 5, 62, 116, 64, 1, 5, 74, 116, 64, 1, 5, 71, 116, 64, 1, - 5, 75, 116, 64, 1, 5, 76, 116, 64, 1, 5, 190, 116, 64, 1, 5, 205, 213, - 116, 64, 1, 5, 205, 247, 116, 64, 1, 5, 210, 170, 116, 231, 248, 220, - 106, 214, 165, 83, 116, 64, 1, 62, 116, 64, 1, 74, 116, 64, 1, 71, 116, - 64, 1, 75, 116, 64, 1, 76, 116, 64, 1, 172, 116, 64, 1, 231, 123, 116, - 64, 1, 230, 236, 116, 64, 1, 231, 224, 116, 64, 1, 231, 53, 116, 64, 1, - 217, 199, 116, 64, 1, 215, 80, 116, 64, 1, 213, 203, 116, 64, 1, 217, 86, - 116, 64, 1, 214, 193, 116, 64, 1, 212, 219, 116, 64, 1, 211, 211, 116, - 64, 1, 210, 170, 116, 64, 1, 212, 131, 116, 64, 1, 124, 116, 64, 1, 199, - 116, 64, 1, 224, 230, 116, 64, 1, 223, 217, 116, 64, 1, 225, 110, 116, - 64, 1, 224, 67, 116, 64, 1, 155, 116, 64, 1, 239, 11, 116, 64, 1, 238, - 42, 116, 64, 1, 239, 71, 116, 64, 1, 238, 149, 116, 64, 1, 185, 116, 64, - 1, 226, 254, 116, 64, 1, 226, 114, 116, 64, 1, 227, 119, 116, 64, 1, 226, - 181, 116, 64, 1, 190, 116, 64, 1, 205, 213, 116, 64, 1, 205, 247, 116, - 64, 1, 219, 113, 116, 64, 1, 218, 208, 116, 64, 1, 218, 50, 116, 64, 1, - 219, 51, 116, 64, 1, 218, 124, 116, 64, 1, 207, 96, 116, 64, 1, 226, 33, - 116, 64, 208, 170, 214, 165, 83, 116, 64, 216, 57, 214, 165, 83, 116, 25, - 241, 232, 116, 25, 1, 231, 84, 116, 25, 1, 214, 88, 116, 25, 1, 231, 77, - 116, 25, 1, 224, 223, 116, 25, 1, 224, 221, 116, 25, 1, 224, 220, 116, - 25, 1, 211, 193, 116, 25, 1, 214, 77, 116, 25, 1, 218, 198, 116, 25, 1, - 218, 193, 116, 25, 1, 218, 190, 116, 25, 1, 218, 183, 116, 25, 1, 218, - 178, 116, 25, 1, 218, 173, 116, 25, 1, 218, 184, 116, 25, 1, 218, 196, - 116, 25, 1, 226, 240, 116, 25, 1, 221, 39, 116, 25, 1, 214, 85, 116, 25, - 1, 221, 28, 116, 25, 1, 215, 33, 116, 25, 1, 214, 82, 116, 25, 1, 233, - 125, 116, 25, 1, 247, 246, 116, 25, 1, 214, 92, 116, 25, 1, 248, 54, 116, - 25, 1, 231, 143, 116, 25, 1, 212, 15, 116, 25, 1, 221, 76, 116, 25, 1, - 239, 3, 116, 25, 1, 62, 116, 25, 1, 252, 248, 116, 25, 1, 190, 116, 25, - 1, 206, 98, 116, 25, 1, 243, 6, 116, 25, 1, 75, 116, 25, 1, 206, 39, 116, - 25, 1, 206, 52, 116, 25, 1, 76, 116, 25, 1, 207, 96, 116, 25, 1, 207, 92, - 116, 25, 1, 222, 206, 116, 25, 1, 205, 247, 116, 25, 1, 71, 116, 25, 1, - 207, 38, 116, 25, 1, 207, 51, 116, 25, 1, 207, 20, 116, 25, 1, 205, 213, - 116, 25, 1, 242, 192, 116, 25, 1, 206, 11, 116, 25, 1, 74, 144, 248, 131, - 53, 144, 220, 165, 53, 144, 224, 43, 53, 144, 228, 13, 144, 249, 111, - 134, 144, 206, 43, 53, 144, 206, 240, 53, 116, 241, 133, 147, 209, 22, - 116, 92, 45, 116, 167, 45, 116, 86, 45, 116, 173, 45, 116, 60, 214, 107, - 116, 59, 247, 233, 233, 14, 252, 98, 252, 119, 233, 14, 252, 98, 216, 39, - 233, 14, 252, 98, 212, 86, 222, 223, 218, 247, 248, 94, 218, 247, 248, - 94, 26, 63, 4, 251, 134, 62, 26, 63, 4, 251, 103, 75, 26, 63, 4, 251, - 112, 74, 26, 63, 4, 251, 80, 76, 26, 63, 4, 251, 130, 71, 26, 63, 4, 251, - 149, 246, 145, 26, 63, 4, 251, 96, 246, 9, 26, 63, 4, 251, 136, 245, 168, - 26, 63, 4, 251, 126, 245, 51, 26, 63, 4, 251, 90, 243, 237, 26, 63, 4, - 251, 84, 232, 200, 26, 63, 4, 251, 95, 232, 182, 26, 63, 4, 251, 105, - 232, 122, 26, 63, 4, 251, 76, 232, 104, 26, 63, 4, 251, 64, 172, 26, 63, - 4, 251, 97, 231, 224, 26, 63, 4, 251, 74, 231, 123, 26, 63, 4, 251, 71, - 231, 53, 26, 63, 4, 251, 60, 230, 236, 26, 63, 4, 251, 61, 185, 26, 63, - 4, 251, 127, 227, 119, 26, 63, 4, 251, 68, 226, 254, 26, 63, 4, 251, 125, - 226, 181, 26, 63, 4, 251, 117, 226, 114, 26, 63, 4, 251, 138, 199, 26, - 63, 4, 251, 116, 225, 110, 26, 63, 4, 251, 110, 224, 230, 26, 63, 4, 251, - 89, 224, 67, 26, 63, 4, 251, 86, 223, 217, 26, 63, 4, 251, 145, 179, 26, - 63, 4, 251, 69, 221, 174, 26, 63, 4, 251, 102, 221, 53, 26, 63, 4, 251, - 129, 220, 211, 26, 63, 4, 251, 91, 220, 82, 26, 63, 4, 251, 124, 220, 19, - 26, 63, 4, 251, 63, 219, 255, 26, 63, 4, 251, 119, 219, 237, 26, 63, 4, - 251, 108, 219, 226, 26, 63, 4, 251, 81, 219, 113, 26, 63, 4, 251, 113, - 219, 51, 26, 63, 4, 251, 88, 218, 208, 26, 63, 4, 251, 147, 218, 124, 26, - 63, 4, 251, 114, 218, 50, 26, 63, 4, 251, 109, 217, 199, 26, 63, 4, 251, - 132, 217, 86, 26, 63, 4, 251, 100, 215, 80, 26, 63, 4, 251, 128, 214, - 193, 26, 63, 4, 251, 83, 213, 203, 26, 63, 4, 251, 82, 212, 219, 26, 63, - 4, 251, 143, 212, 131, 26, 63, 4, 251, 104, 211, 211, 26, 63, 4, 251, - 141, 124, 26, 63, 4, 251, 72, 210, 170, 26, 63, 4, 251, 87, 207, 96, 26, - 63, 4, 251, 66, 207, 51, 26, 63, 4, 251, 101, 207, 20, 26, 63, 4, 251, - 99, 206, 250, 26, 63, 4, 251, 123, 205, 116, 26, 63, 4, 251, 67, 205, 93, - 26, 63, 4, 251, 120, 205, 19, 26, 63, 4, 251, 115, 254, 166, 26, 63, 4, - 251, 98, 254, 165, 26, 63, 4, 251, 57, 251, 184, 26, 63, 4, 251, 70, 243, - 205, 26, 63, 4, 251, 53, 243, 204, 26, 63, 4, 251, 93, 223, 153, 26, 63, - 4, 251, 111, 220, 80, 26, 63, 4, 251, 79, 220, 84, 26, 63, 4, 251, 65, - 219, 111, 26, 63, 4, 251, 107, 219, 110, 26, 63, 4, 251, 73, 218, 123, - 26, 63, 4, 251, 75, 212, 216, 26, 63, 4, 251, 55, 210, 128, 26, 63, 4, - 251, 52, 105, 26, 63, 16, 251, 122, 26, 63, 16, 251, 121, 26, 63, 16, - 251, 118, 26, 63, 16, 251, 106, 26, 63, 16, 251, 94, 26, 63, 16, 251, 92, - 26, 63, 16, 251, 85, 26, 63, 16, 251, 78, 26, 63, 16, 251, 77, 26, 63, - 16, 251, 62, 26, 63, 16, 251, 59, 26, 63, 16, 251, 58, 26, 63, 16, 251, - 56, 26, 63, 16, 251, 54, 26, 63, 122, 251, 51, 227, 221, 26, 63, 122, - 251, 50, 206, 244, 26, 63, 122, 251, 49, 245, 248, 26, 63, 122, 251, 48, - 242, 239, 26, 63, 122, 251, 47, 227, 192, 26, 63, 122, 251, 46, 214, 33, - 26, 63, 122, 251, 45, 242, 174, 26, 63, 122, 251, 44, 219, 77, 26, 63, - 122, 251, 43, 215, 213, 26, 63, 122, 251, 42, 239, 70, 26, 63, 122, 251, - 41, 214, 160, 26, 63, 122, 251, 40, 249, 182, 26, 63, 122, 251, 39, 247, - 75, 26, 63, 122, 251, 38, 249, 87, 26, 63, 122, 251, 37, 207, 28, 26, 63, - 122, 251, 36, 250, 125, 26, 63, 122, 251, 35, 222, 175, 26, 63, 122, 251, - 34, 214, 132, 26, 63, 122, 251, 33, 246, 248, 26, 63, 226, 160, 251, 32, - 232, 16, 26, 63, 226, 160, 251, 31, 232, 25, 26, 63, 122, 251, 30, 222, - 189, 26, 63, 122, 251, 29, 207, 5, 26, 63, 122, 251, 28, 26, 63, 226, - 160, 251, 27, 252, 12, 26, 63, 226, 160, 251, 26, 227, 76, 26, 63, 122, - 251, 25, 249, 110, 26, 63, 122, 251, 24, 240, 11, 26, 63, 122, 251, 23, - 26, 63, 122, 251, 22, 206, 235, 26, 63, 122, 251, 21, 26, 63, 122, 251, - 20, 26, 63, 122, 251, 19, 238, 69, 26, 63, 122, 251, 18, 26, 63, 122, - 251, 17, 26, 63, 122, 251, 16, 26, 63, 226, 160, 251, 14, 210, 142, 26, - 63, 122, 251, 13, 26, 63, 122, 251, 12, 26, 63, 122, 251, 11, 247, 186, - 26, 63, 122, 251, 10, 26, 63, 122, 251, 9, 26, 63, 122, 251, 8, 240, 201, - 26, 63, 122, 251, 7, 251, 255, 26, 63, 122, 251, 6, 26, 63, 122, 251, 5, - 26, 63, 122, 251, 4, 26, 63, 122, 251, 3, 26, 63, 122, 251, 2, 26, 63, - 122, 251, 1, 26, 63, 122, 251, 0, 26, 63, 122, 250, 255, 26, 63, 122, - 250, 254, 26, 63, 122, 250, 253, 226, 152, 26, 63, 122, 250, 252, 26, 63, - 122, 250, 251, 211, 61, 26, 63, 122, 250, 250, 26, 63, 122, 250, 249, 26, - 63, 122, 250, 248, 26, 63, 122, 250, 247, 26, 63, 122, 250, 246, 26, 63, - 122, 250, 245, 26, 63, 122, 250, 244, 26, 63, 122, 250, 243, 26, 63, 122, - 250, 242, 26, 63, 122, 250, 241, 26, 63, 122, 250, 240, 26, 63, 122, 250, - 239, 239, 43, 26, 63, 122, 250, 218, 241, 144, 26, 63, 122, 250, 215, - 250, 103, 26, 63, 122, 250, 210, 214, 139, 26, 63, 122, 250, 209, 45, 26, - 63, 122, 250, 208, 26, 63, 122, 250, 207, 213, 95, 26, 63, 122, 250, 206, - 26, 63, 122, 250, 205, 26, 63, 122, 250, 204, 207, 24, 248, 91, 26, 63, - 122, 250, 203, 248, 91, 26, 63, 122, 250, 202, 248, 92, 241, 112, 26, 63, - 122, 250, 201, 207, 26, 26, 63, 122, 250, 200, 26, 63, 122, 250, 199, 26, - 63, 226, 160, 250, 198, 245, 105, 26, 63, 122, 250, 197, 26, 63, 122, - 250, 196, 26, 63, 122, 250, 194, 26, 63, 122, 250, 193, 26, 63, 122, 250, - 192, 26, 63, 122, 250, 191, 246, 81, 26, 63, 122, 250, 190, 26, 63, 122, - 250, 189, 26, 63, 122, 250, 188, 26, 63, 122, 250, 187, 26, 63, 122, 250, - 186, 26, 63, 122, 208, 225, 251, 15, 26, 63, 122, 208, 225, 250, 238, 26, - 63, 122, 208, 225, 250, 237, 26, 63, 122, 208, 225, 250, 236, 26, 63, - 122, 208, 225, 250, 235, 26, 63, 122, 208, 225, 250, 234, 26, 63, 122, - 208, 225, 250, 233, 26, 63, 122, 208, 225, 250, 232, 26, 63, 122, 208, - 225, 250, 231, 26, 63, 122, 208, 225, 250, 230, 26, 63, 122, 208, 225, - 250, 229, 26, 63, 122, 208, 225, 250, 228, 26, 63, 122, 208, 225, 250, - 227, 26, 63, 122, 208, 225, 250, 226, 26, 63, 122, 208, 225, 250, 225, - 26, 63, 122, 208, 225, 250, 224, 26, 63, 122, 208, 225, 250, 223, 26, 63, - 122, 208, 225, 250, 222, 26, 63, 122, 208, 225, 250, 221, 26, 63, 122, - 208, 225, 250, 220, 26, 63, 122, 208, 225, 250, 219, 26, 63, 122, 208, - 225, 250, 217, 26, 63, 122, 208, 225, 250, 216, 26, 63, 122, 208, 225, - 250, 214, 26, 63, 122, 208, 225, 250, 213, 26, 63, 122, 208, 225, 250, - 212, 26, 63, 122, 208, 225, 250, 211, 26, 63, 122, 208, 225, 250, 195, - 26, 63, 122, 208, 225, 250, 185, 252, 241, 206, 232, 216, 40, 229, 205, - 252, 241, 206, 232, 216, 40, 245, 23, 252, 241, 248, 81, 83, 252, 241, - 43, 102, 252, 241, 43, 105, 252, 241, 43, 142, 252, 241, 43, 139, 252, - 241, 43, 168, 252, 241, 43, 184, 252, 241, 43, 195, 252, 241, 43, 193, - 252, 241, 43, 200, 252, 241, 43, 212, 98, 252, 241, 43, 210, 123, 252, - 241, 43, 212, 3, 252, 241, 43, 241, 130, 252, 241, 43, 241, 243, 252, - 241, 43, 214, 252, 252, 241, 43, 216, 17, 252, 241, 43, 243, 79, 252, - 241, 43, 224, 190, 252, 241, 43, 119, 238, 29, 252, 241, 43, 118, 238, - 29, 252, 241, 43, 129, 238, 29, 252, 241, 43, 241, 125, 238, 29, 252, - 241, 43, 241, 204, 238, 29, 252, 241, 43, 215, 10, 238, 29, 252, 241, 43, - 216, 23, 238, 29, 252, 241, 43, 243, 88, 238, 29, 252, 241, 43, 224, 195, - 238, 29, 252, 241, 43, 119, 211, 242, 252, 241, 43, 118, 211, 242, 252, - 241, 43, 129, 211, 242, 252, 241, 43, 241, 125, 211, 242, 252, 241, 43, - 241, 204, 211, 242, 252, 241, 43, 215, 10, 211, 242, 252, 241, 43, 216, - 23, 211, 242, 252, 241, 43, 243, 88, 211, 242, 252, 241, 43, 224, 195, - 211, 242, 252, 241, 43, 212, 99, 211, 242, 252, 241, 43, 210, 124, 211, - 242, 252, 241, 43, 212, 4, 211, 242, 252, 241, 43, 241, 131, 211, 242, - 252, 241, 43, 241, 244, 211, 242, 252, 241, 43, 214, 253, 211, 242, 252, - 241, 43, 216, 18, 211, 242, 252, 241, 43, 243, 80, 211, 242, 252, 241, - 43, 224, 191, 211, 242, 252, 241, 207, 41, 250, 117, 209, 216, 252, 241, - 207, 41, 241, 215, 213, 177, 252, 241, 207, 41, 217, 80, 213, 177, 252, - 241, 207, 41, 212, 11, 213, 177, 252, 241, 207, 41, 241, 118, 213, 177, - 252, 241, 243, 240, 227, 118, 241, 215, 213, 177, 252, 241, 229, 189, - 227, 118, 241, 215, 213, 177, 252, 241, 227, 118, 217, 80, 213, 177, 252, - 241, 227, 118, 212, 11, 213, 177, 27, 253, 12, 251, 186, 119, 219, 204, - 27, 253, 12, 251, 186, 119, 239, 121, 27, 253, 12, 251, 186, 119, 244, 3, - 27, 253, 12, 251, 186, 168, 27, 253, 12, 251, 186, 241, 243, 27, 253, 12, - 251, 186, 241, 204, 238, 29, 27, 253, 12, 251, 186, 241, 204, 211, 242, - 27, 253, 12, 251, 186, 241, 244, 211, 242, 27, 253, 12, 251, 186, 241, - 204, 212, 181, 27, 253, 12, 251, 186, 212, 99, 212, 181, 27, 253, 12, - 251, 186, 241, 244, 212, 181, 27, 253, 12, 251, 186, 119, 238, 30, 212, - 181, 27, 253, 12, 251, 186, 241, 204, 238, 30, 212, 181, 27, 253, 12, - 251, 186, 119, 211, 243, 212, 181, 27, 253, 12, 251, 186, 241, 204, 211, - 243, 212, 181, 27, 253, 12, 251, 186, 241, 204, 214, 20, 27, 253, 12, - 251, 186, 212, 99, 214, 20, 27, 253, 12, 251, 186, 241, 244, 214, 20, 27, - 253, 12, 251, 186, 119, 238, 30, 214, 20, 27, 253, 12, 251, 186, 241, - 204, 238, 30, 214, 20, 27, 253, 12, 251, 186, 119, 211, 243, 214, 20, 27, - 253, 12, 251, 186, 212, 99, 211, 243, 214, 20, 27, 253, 12, 251, 186, - 241, 244, 211, 243, 214, 20, 27, 253, 12, 251, 186, 212, 99, 226, 184, - 27, 253, 12, 239, 37, 119, 220, 228, 27, 253, 12, 212, 25, 102, 27, 253, - 12, 239, 33, 102, 27, 253, 12, 242, 248, 105, 27, 253, 12, 212, 25, 105, - 27, 253, 12, 246, 245, 118, 244, 2, 27, 253, 12, 242, 248, 118, 244, 2, - 27, 253, 12, 211, 28, 168, 27, 253, 12, 211, 28, 212, 98, 27, 253, 12, - 211, 28, 212, 99, 252, 141, 17, 27, 253, 12, 239, 33, 212, 98, 27, 253, - 12, 227, 65, 212, 98, 27, 253, 12, 212, 25, 212, 98, 27, 253, 12, 212, - 25, 212, 3, 27, 253, 12, 211, 28, 241, 243, 27, 253, 12, 211, 28, 241, - 244, 252, 141, 17, 27, 253, 12, 239, 33, 241, 243, 27, 253, 12, 212, 25, - 241, 243, 27, 253, 12, 212, 25, 119, 238, 29, 27, 253, 12, 212, 25, 129, - 238, 29, 27, 253, 12, 242, 248, 241, 204, 238, 29, 27, 253, 12, 211, 28, - 241, 204, 238, 29, 27, 253, 12, 212, 25, 241, 204, 238, 29, 27, 253, 12, - 248, 187, 241, 204, 238, 29, 27, 253, 12, 225, 186, 241, 204, 238, 29, - 27, 253, 12, 212, 25, 119, 211, 242, 27, 253, 12, 212, 25, 241, 204, 211, - 242, 27, 253, 12, 245, 230, 241, 204, 226, 184, 27, 253, 12, 213, 240, - 241, 244, 226, 184, 27, 119, 160, 53, 27, 119, 160, 3, 252, 141, 17, 27, - 118, 212, 8, 53, 27, 129, 219, 203, 53, 27, 206, 50, 53, 27, 212, 182, - 53, 27, 244, 4, 53, 27, 222, 220, 53, 27, 118, 222, 219, 53, 27, 129, - 222, 219, 53, 27, 241, 125, 222, 219, 53, 27, 241, 204, 222, 219, 53, 27, - 227, 59, 53, 27, 230, 167, 250, 117, 53, 27, 229, 182, 53, 27, 222, 94, - 53, 27, 206, 172, 53, 27, 251, 237, 53, 27, 251, 251, 53, 27, 239, 244, - 53, 27, 210, 246, 250, 117, 53, 27, 205, 86, 53, 27, 119, 219, 205, 53, - 27, 215, 35, 53, 218, 109, 216, 14, 53, 218, 109, 209, 228, 53, 218, 109, - 216, 44, 53, 218, 109, 216, 12, 53, 218, 109, 245, 120, 216, 12, 53, 218, - 109, 215, 54, 53, 218, 109, 245, 226, 53, 218, 109, 219, 188, 53, 218, - 109, 216, 30, 53, 218, 109, 243, 219, 53, 218, 109, 251, 232, 53, 218, - 109, 248, 124, 53, 27, 16, 212, 152, 218, 210, 221, 88, 245, 98, 3, 221, - 166, 221, 88, 245, 98, 3, 220, 220, 239, 68, 221, 88, 245, 98, 3, 212, - 155, 239, 68, 221, 88, 245, 98, 3, 248, 207, 221, 88, 245, 98, 3, 248, - 49, 221, 88, 245, 98, 3, 206, 244, 221, 88, 245, 98, 3, 239, 43, 221, 88, - 245, 98, 3, 240, 193, 221, 88, 245, 98, 3, 211, 209, 221, 88, 245, 98, 3, - 45, 221, 88, 245, 98, 3, 249, 146, 221, 88, 245, 98, 3, 215, 180, 221, - 88, 245, 98, 3, 247, 180, 221, 88, 245, 98, 3, 227, 220, 221, 88, 245, - 98, 3, 227, 167, 221, 88, 245, 98, 3, 217, 121, 221, 88, 245, 98, 3, 229, - 231, 221, 88, 245, 98, 3, 249, 167, 221, 88, 245, 98, 3, 248, 192, 220, - 233, 221, 88, 245, 98, 3, 245, 36, 221, 88, 245, 98, 3, 247, 159, 221, - 88, 245, 98, 3, 214, 224, 221, 88, 245, 98, 3, 247, 160, 221, 88, 245, - 98, 3, 250, 47, 221, 88, 245, 98, 3, 215, 167, 221, 88, 245, 98, 3, 238, - 69, 221, 88, 245, 98, 3, 239, 9, 221, 88, 245, 98, 3, 249, 82, 230, 34, - 221, 88, 245, 98, 3, 248, 183, 221, 88, 245, 98, 3, 219, 77, 221, 88, - 245, 98, 3, 243, 127, 221, 88, 245, 98, 3, 244, 9, 221, 88, 245, 98, 3, - 210, 156, 221, 88, 245, 98, 3, 250, 50, 221, 88, 245, 98, 3, 220, 234, - 211, 61, 221, 88, 245, 98, 3, 208, 195, 221, 88, 245, 98, 3, 221, 232, - 221, 88, 245, 98, 3, 218, 100, 221, 88, 245, 98, 3, 229, 216, 221, 88, - 245, 98, 3, 222, 77, 250, 176, 221, 88, 245, 98, 3, 241, 168, 221, 88, - 245, 98, 3, 239, 238, 221, 88, 245, 98, 3, 213, 241, 221, 88, 245, 98, 3, - 5, 251, 160, 221, 88, 245, 98, 3, 207, 61, 250, 136, 221, 88, 245, 98, 3, - 36, 222, 222, 91, 229, 40, 1, 62, 229, 40, 1, 75, 229, 40, 1, 251, 150, - 229, 40, 1, 250, 1, 229, 40, 1, 241, 55, 229, 40, 1, 246, 240, 229, 40, - 1, 74, 229, 40, 1, 207, 129, 229, 40, 1, 205, 159, 229, 40, 1, 212, 58, - 229, 40, 1, 232, 203, 229, 40, 1, 232, 76, 229, 40, 1, 220, 27, 229, 40, - 1, 149, 229, 40, 1, 229, 28, 229, 40, 1, 226, 33, 229, 40, 1, 226, 186, - 229, 40, 1, 224, 104, 229, 40, 1, 71, 229, 40, 1, 222, 67, 229, 40, 1, - 231, 73, 229, 40, 1, 137, 229, 40, 1, 182, 229, 40, 1, 213, 10, 229, 40, - 1, 210, 211, 229, 40, 1, 252, 122, 229, 40, 1, 243, 41, 229, 40, 1, 239, - 155, 229, 40, 1, 206, 195, 248, 198, 1, 62, 248, 198, 1, 222, 53, 248, - 198, 1, 246, 240, 248, 198, 1, 149, 248, 198, 1, 209, 160, 248, 198, 1, - 137, 248, 198, 1, 230, 62, 248, 198, 1, 254, 166, 248, 198, 1, 220, 27, - 248, 198, 1, 251, 150, 248, 198, 1, 229, 28, 248, 198, 1, 76, 248, 198, - 1, 246, 147, 248, 198, 1, 213, 10, 248, 198, 1, 216, 4, 248, 198, 1, 216, - 3, 248, 198, 1, 182, 248, 198, 1, 249, 33, 248, 198, 1, 71, 248, 198, 1, - 224, 104, 248, 198, 1, 206, 195, 248, 198, 1, 226, 33, 248, 198, 1, 210, - 210, 248, 198, 1, 222, 67, 248, 198, 1, 214, 99, 248, 198, 1, 74, 248, - 198, 1, 75, 248, 198, 1, 209, 157, 248, 198, 1, 232, 76, 248, 198, 1, - 232, 67, 248, 198, 1, 225, 153, 248, 198, 1, 209, 162, 248, 198, 1, 241, - 55, 248, 198, 1, 240, 246, 248, 198, 1, 214, 40, 248, 198, 1, 214, 39, - 248, 198, 1, 225, 79, 248, 198, 1, 233, 102, 248, 198, 1, 249, 32, 248, - 198, 1, 210, 211, 248, 198, 1, 209, 159, 248, 198, 1, 218, 90, 248, 198, - 1, 227, 158, 248, 198, 1, 227, 157, 248, 198, 1, 227, 156, 248, 198, 1, - 227, 155, 248, 198, 1, 230, 61, 248, 198, 1, 243, 131, 248, 198, 1, 209, - 158, 81, 242, 251, 211, 241, 83, 81, 242, 251, 18, 102, 81, 242, 251, 18, - 105, 81, 242, 251, 18, 142, 81, 242, 251, 18, 139, 81, 242, 251, 18, 168, - 81, 242, 251, 18, 184, 81, 242, 251, 18, 195, 81, 242, 251, 18, 193, 81, - 242, 251, 18, 200, 81, 242, 251, 43, 212, 98, 81, 242, 251, 43, 210, 123, - 81, 242, 251, 43, 212, 3, 81, 242, 251, 43, 241, 130, 81, 242, 251, 43, - 241, 243, 81, 242, 251, 43, 214, 252, 81, 242, 251, 43, 216, 17, 81, 242, - 251, 43, 243, 79, 81, 242, 251, 43, 224, 190, 81, 242, 251, 43, 119, 238, - 29, 81, 242, 251, 43, 118, 238, 29, 81, 242, 251, 43, 129, 238, 29, 81, - 242, 251, 43, 241, 125, 238, 29, 81, 242, 251, 43, 241, 204, 238, 29, 81, - 242, 251, 43, 215, 10, 238, 29, 81, 242, 251, 43, 216, 23, 238, 29, 81, - 242, 251, 43, 243, 88, 238, 29, 81, 242, 251, 43, 224, 195, 238, 29, 44, - 35, 1, 62, 44, 35, 1, 250, 61, 44, 35, 1, 231, 224, 44, 35, 1, 246, 9, - 44, 35, 1, 75, 44, 35, 1, 209, 39, 44, 35, 1, 205, 93, 44, 35, 1, 239, - 71, 44, 35, 1, 212, 41, 44, 35, 1, 74, 44, 35, 1, 172, 44, 35, 1, 243, - 68, 44, 35, 1, 243, 50, 44, 35, 1, 243, 41, 44, 35, 1, 242, 215, 44, 35, - 1, 76, 44, 35, 1, 221, 174, 44, 35, 1, 215, 214, 44, 35, 1, 230, 236, 44, - 35, 1, 242, 235, 44, 35, 1, 242, 225, 44, 35, 1, 212, 131, 44, 35, 1, 71, - 44, 35, 1, 243, 71, 44, 35, 1, 221, 81, 44, 35, 1, 231, 152, 44, 35, 1, - 243, 97, 44, 35, 1, 242, 227, 44, 35, 1, 248, 82, 44, 35, 1, 233, 102, - 44, 35, 1, 209, 162, 44, 35, 1, 242, 208, 44, 35, 223, 177, 102, 44, 35, - 223, 177, 168, 44, 35, 223, 177, 212, 98, 44, 35, 223, 177, 241, 243, - 239, 253, 1, 252, 208, 239, 253, 1, 250, 153, 239, 253, 1, 240, 58, 239, - 253, 1, 246, 127, 239, 253, 1, 252, 204, 239, 253, 1, 220, 10, 239, 253, - 1, 232, 215, 239, 253, 1, 239, 134, 239, 253, 1, 211, 255, 239, 253, 1, - 243, 78, 239, 253, 1, 230, 204, 239, 253, 1, 230, 118, 239, 253, 1, 227, - 213, 239, 253, 1, 225, 188, 239, 253, 1, 232, 175, 239, 253, 1, 209, 180, - 239, 253, 1, 222, 29, 239, 253, 1, 224, 190, 239, 253, 1, 219, 89, 239, - 253, 1, 217, 124, 239, 253, 1, 212, 112, 239, 253, 1, 207, 3, 239, 253, - 1, 242, 54, 239, 253, 1, 233, 106, 239, 253, 1, 238, 14, 239, 253, 1, - 222, 102, 239, 253, 1, 224, 195, 238, 29, 44, 221, 122, 1, 252, 122, 44, - 221, 122, 1, 249, 68, 44, 221, 122, 1, 240, 228, 44, 221, 122, 1, 245, - 39, 44, 221, 122, 1, 75, 44, 221, 122, 1, 205, 63, 44, 221, 122, 1, 243, - 188, 44, 221, 122, 1, 205, 100, 44, 221, 122, 1, 243, 186, 44, 221, 122, - 1, 74, 44, 221, 122, 1, 231, 42, 44, 221, 122, 1, 230, 30, 44, 221, 122, - 1, 227, 81, 44, 221, 122, 1, 225, 99, 44, 221, 122, 1, 208, 160, 44, 221, - 122, 1, 221, 163, 44, 221, 122, 1, 219, 15, 44, 221, 122, 1, 215, 61, 44, - 221, 122, 1, 212, 193, 44, 221, 122, 1, 71, 44, 221, 122, 1, 248, 66, 44, - 221, 122, 1, 215, 151, 44, 221, 122, 1, 215, 216, 44, 221, 122, 1, 205, - 215, 44, 221, 122, 1, 206, 30, 44, 221, 122, 1, 76, 44, 221, 122, 1, 222, - 152, 44, 221, 122, 1, 243, 97, 44, 221, 122, 1, 155, 44, 221, 122, 1, - 210, 221, 44, 221, 122, 1, 209, 27, 44, 221, 122, 1, 206, 34, 44, 221, - 122, 1, 206, 32, 44, 221, 122, 1, 206, 65, 44, 221, 122, 1, 233, 129, 44, - 221, 122, 1, 205, 213, 44, 221, 122, 1, 190, 44, 221, 122, 1, 237, 190, - 36, 44, 221, 122, 1, 252, 122, 36, 44, 221, 122, 1, 245, 39, 36, 44, 221, - 122, 1, 205, 100, 36, 44, 221, 122, 1, 225, 99, 36, 44, 221, 122, 1, 215, - 61, 209, 254, 1, 252, 148, 209, 254, 1, 250, 8, 209, 254, 1, 240, 216, - 209, 254, 1, 231, 167, 209, 254, 1, 245, 227, 209, 254, 1, 238, 149, 209, - 254, 1, 206, 250, 209, 254, 1, 205, 84, 209, 254, 1, 238, 61, 209, 254, - 1, 212, 80, 209, 254, 1, 205, 236, 209, 254, 1, 232, 45, 209, 254, 1, - 215, 171, 209, 254, 1, 230, 102, 209, 254, 1, 227, 90, 209, 254, 1, 245, - 188, 209, 254, 1, 223, 173, 209, 254, 1, 205, 9, 209, 254, 1, 217, 156, - 209, 254, 1, 252, 200, 209, 254, 1, 220, 82, 209, 254, 1, 217, 190, 209, - 254, 1, 219, 219, 209, 254, 1, 219, 68, 209, 254, 1, 212, 45, 209, 254, - 1, 240, 94, 209, 254, 1, 124, 209, 254, 1, 74, 209, 254, 1, 71, 209, 254, - 1, 214, 51, 209, 254, 206, 232, 245, 79, 44, 221, 116, 3, 62, 44, 221, - 116, 3, 74, 44, 221, 116, 3, 71, 44, 221, 116, 3, 172, 44, 221, 116, 3, - 230, 236, 44, 221, 116, 3, 240, 244, 44, 221, 116, 3, 239, 213, 44, 221, - 116, 3, 206, 181, 44, 221, 116, 3, 249, 1, 44, 221, 116, 3, 232, 200, 44, - 221, 116, 3, 232, 162, 44, 221, 116, 3, 212, 219, 44, 221, 116, 3, 210, - 170, 44, 221, 116, 3, 246, 145, 44, 221, 116, 3, 245, 168, 44, 221, 116, - 3, 243, 237, 44, 221, 116, 3, 212, 56, 44, 221, 116, 3, 179, 44, 221, - 116, 3, 250, 183, 44, 221, 116, 3, 242, 73, 44, 221, 116, 3, 199, 44, - 221, 116, 3, 223, 217, 44, 221, 116, 3, 185, 44, 221, 116, 3, 226, 254, - 44, 221, 116, 3, 226, 114, 44, 221, 116, 3, 190, 44, 221, 116, 3, 209, - 70, 44, 221, 116, 3, 208, 214, 44, 221, 116, 3, 219, 113, 44, 221, 116, - 3, 218, 50, 44, 221, 116, 3, 230, 141, 44, 221, 116, 3, 217, 199, 44, - 221, 116, 3, 205, 116, 44, 221, 116, 3, 216, 2, 44, 221, 116, 3, 214, 96, - 44, 221, 116, 3, 155, 44, 221, 116, 3, 251, 178, 44, 221, 116, 3, 251, - 177, 44, 221, 116, 3, 251, 176, 44, 221, 116, 3, 206, 152, 44, 221, 116, - 3, 246, 123, 44, 221, 116, 3, 246, 122, 44, 221, 116, 3, 250, 161, 44, - 221, 116, 3, 249, 53, 44, 221, 116, 206, 232, 245, 79, 44, 221, 116, 43, - 102, 44, 221, 116, 43, 105, 44, 221, 116, 43, 212, 98, 44, 221, 116, 43, - 210, 123, 44, 221, 116, 43, 238, 29, 245, 208, 6, 1, 152, 74, 245, 208, - 6, 1, 152, 75, 245, 208, 6, 1, 152, 62, 245, 208, 6, 1, 152, 252, 213, - 245, 208, 6, 1, 152, 76, 245, 208, 6, 1, 152, 222, 152, 245, 208, 6, 1, - 215, 144, 74, 245, 208, 6, 1, 215, 144, 75, 245, 208, 6, 1, 215, 144, 62, - 245, 208, 6, 1, 215, 144, 252, 213, 245, 208, 6, 1, 215, 144, 76, 245, - 208, 6, 1, 215, 144, 222, 152, 245, 208, 6, 1, 251, 159, 245, 208, 6, 1, - 222, 78, 245, 208, 6, 1, 206, 216, 245, 208, 6, 1, 206, 49, 245, 208, 6, - 1, 239, 155, 245, 208, 6, 1, 221, 164, 245, 208, 6, 1, 250, 50, 245, 208, - 6, 1, 212, 120, 245, 208, 6, 1, 245, 251, 245, 208, 6, 1, 248, 78, 245, - 208, 6, 1, 232, 180, 245, 208, 6, 1, 231, 231, 245, 208, 6, 1, 240, 191, - 245, 208, 6, 1, 243, 97, 245, 208, 6, 1, 209, 34, 245, 208, 6, 1, 242, - 196, 245, 208, 6, 1, 212, 39, 245, 208, 6, 1, 242, 225, 245, 208, 6, 1, - 205, 91, 245, 208, 6, 1, 242, 215, 245, 208, 6, 1, 205, 71, 245, 208, 6, - 1, 242, 235, 245, 208, 6, 1, 243, 68, 245, 208, 6, 1, 243, 50, 245, 208, - 6, 1, 243, 41, 245, 208, 6, 1, 243, 28, 245, 208, 6, 1, 222, 191, 245, - 208, 6, 1, 242, 175, 245, 208, 5, 1, 152, 74, 245, 208, 5, 1, 152, 75, - 245, 208, 5, 1, 152, 62, 245, 208, 5, 1, 152, 252, 213, 245, 208, 5, 1, - 152, 76, 245, 208, 5, 1, 152, 222, 152, 245, 208, 5, 1, 215, 144, 74, - 245, 208, 5, 1, 215, 144, 75, 245, 208, 5, 1, 215, 144, 62, 245, 208, 5, - 1, 215, 144, 252, 213, 245, 208, 5, 1, 215, 144, 76, 245, 208, 5, 1, 215, - 144, 222, 152, 245, 208, 5, 1, 251, 159, 245, 208, 5, 1, 222, 78, 245, - 208, 5, 1, 206, 216, 245, 208, 5, 1, 206, 49, 245, 208, 5, 1, 239, 155, - 245, 208, 5, 1, 221, 164, 245, 208, 5, 1, 250, 50, 245, 208, 5, 1, 212, - 120, 245, 208, 5, 1, 245, 251, 245, 208, 5, 1, 248, 78, 245, 208, 5, 1, - 232, 180, 245, 208, 5, 1, 231, 231, 245, 208, 5, 1, 240, 191, 245, 208, - 5, 1, 243, 97, 245, 208, 5, 1, 209, 34, 245, 208, 5, 1, 242, 196, 245, - 208, 5, 1, 212, 39, 245, 208, 5, 1, 242, 225, 245, 208, 5, 1, 205, 91, - 245, 208, 5, 1, 242, 215, 245, 208, 5, 1, 205, 71, 245, 208, 5, 1, 242, - 235, 245, 208, 5, 1, 243, 68, 245, 208, 5, 1, 243, 50, 245, 208, 5, 1, - 243, 41, 245, 208, 5, 1, 243, 28, 245, 208, 5, 1, 222, 191, 245, 208, 5, - 1, 242, 175, 215, 221, 1, 221, 161, 215, 221, 1, 211, 91, 215, 221, 1, - 231, 119, 215, 221, 1, 242, 21, 215, 221, 1, 212, 14, 215, 221, 1, 214, - 193, 215, 221, 1, 213, 130, 215, 221, 1, 248, 6, 215, 221, 1, 206, 51, - 215, 221, 1, 238, 27, 215, 221, 1, 249, 243, 215, 221, 1, 246, 8, 215, - 221, 1, 240, 230, 215, 221, 1, 208, 155, 215, 221, 1, 212, 20, 215, 221, - 1, 205, 17, 215, 221, 1, 227, 117, 215, 221, 1, 232, 102, 215, 221, 1, - 206, 248, 215, 221, 1, 239, 143, 215, 221, 1, 229, 130, 215, 221, 1, 226, - 210, 215, 221, 1, 233, 109, 215, 221, 1, 243, 96, 215, 221, 1, 251, 225, - 215, 221, 1, 252, 252, 215, 221, 1, 222, 165, 215, 221, 1, 206, 235, 215, - 221, 1, 222, 93, 215, 221, 1, 252, 213, 215, 221, 1, 218, 121, 215, 221, - 1, 223, 173, 215, 221, 1, 243, 113, 215, 221, 1, 252, 218, 215, 221, 1, - 237, 181, 215, 221, 1, 209, 206, 215, 221, 1, 222, 228, 215, 221, 1, 222, - 144, 215, 221, 1, 222, 189, 215, 221, 1, 251, 162, 215, 221, 1, 252, 14, - 215, 221, 1, 222, 122, 215, 221, 1, 252, 196, 215, 221, 1, 242, 229, 215, - 221, 1, 251, 248, 215, 221, 1, 243, 124, 215, 221, 1, 237, 189, 215, 221, - 1, 206, 16, 222, 104, 1, 252, 172, 222, 104, 1, 250, 183, 222, 104, 1, - 212, 219, 222, 104, 1, 232, 200, 222, 104, 1, 206, 181, 222, 104, 1, 231, - 167, 222, 104, 1, 245, 250, 222, 104, 1, 219, 113, 222, 104, 1, 217, 199, - 222, 104, 1, 215, 177, 222, 104, 1, 245, 192, 222, 104, 1, 248, 173, 222, - 104, 1, 240, 244, 222, 104, 1, 242, 73, 222, 104, 1, 220, 17, 222, 104, - 1, 232, 61, 222, 104, 1, 230, 136, 222, 104, 1, 226, 223, 222, 104, 1, - 223, 157, 222, 104, 1, 207, 59, 222, 104, 1, 155, 222, 104, 1, 190, 222, - 104, 1, 62, 222, 104, 1, 75, 222, 104, 1, 74, 222, 104, 1, 76, 222, 104, - 1, 71, 222, 104, 1, 253, 164, 222, 104, 1, 243, 104, 222, 104, 1, 222, - 152, 222, 104, 18, 205, 85, 222, 104, 18, 102, 222, 104, 18, 105, 222, - 104, 18, 142, 222, 104, 18, 139, 222, 104, 18, 168, 222, 104, 18, 184, - 222, 104, 18, 195, 222, 104, 18, 193, 222, 104, 18, 200, 243, 64, 1, 62, - 243, 64, 1, 250, 61, 243, 64, 1, 248, 148, 243, 64, 1, 248, 82, 243, 64, - 1, 246, 9, 243, 64, 1, 225, 143, 243, 64, 1, 245, 183, 243, 64, 1, 243, - 90, 243, 64, 1, 75, 243, 64, 1, 242, 28, 243, 64, 1, 240, 170, 243, 64, - 1, 240, 32, 243, 64, 1, 239, 71, 243, 64, 1, 74, 243, 64, 1, 232, 182, - 243, 64, 1, 231, 224, 243, 64, 1, 230, 58, 243, 64, 1, 229, 168, 243, 64, - 1, 227, 119, 243, 64, 1, 225, 110, 243, 64, 1, 199, 243, 64, 1, 224, 173, - 243, 64, 1, 76, 243, 64, 1, 221, 174, 243, 64, 1, 219, 255, 243, 64, 1, - 219, 51, 243, 64, 1, 218, 84, 243, 64, 1, 217, 86, 243, 64, 1, 215, 214, - 243, 64, 1, 212, 131, 243, 64, 1, 212, 41, 243, 64, 1, 71, 243, 64, 1, - 209, 39, 243, 64, 1, 206, 175, 243, 64, 1, 206, 123, 243, 64, 1, 205, 93, - 243, 64, 1, 205, 72, 243, 64, 1, 240, 85, 243, 64, 1, 240, 91, 243, 64, - 1, 231, 152, 248, 180, 252, 173, 1, 252, 143, 248, 180, 252, 173, 1, 250, - 10, 248, 180, 252, 173, 1, 240, 49, 248, 180, 252, 173, 1, 246, 74, 248, - 180, 252, 173, 1, 243, 112, 248, 180, 252, 173, 1, 205, 103, 248, 180, - 252, 173, 1, 242, 147, 248, 180, 252, 173, 1, 205, 66, 248, 180, 252, - 173, 1, 212, 157, 248, 180, 252, 173, 1, 248, 110, 248, 180, 252, 173, 1, - 205, 224, 248, 180, 252, 173, 1, 205, 81, 248, 180, 252, 173, 1, 232, - 242, 248, 180, 252, 173, 1, 216, 2, 248, 180, 252, 173, 1, 230, 95, 248, - 180, 252, 173, 1, 232, 254, 248, 180, 252, 173, 1, 206, 171, 248, 180, - 252, 173, 1, 243, 203, 248, 180, 252, 173, 1, 248, 204, 248, 180, 252, - 173, 1, 232, 163, 248, 180, 252, 173, 1, 232, 7, 248, 180, 252, 173, 1, - 229, 37, 248, 180, 252, 173, 1, 239, 22, 248, 180, 252, 173, 1, 220, 0, - 248, 180, 252, 173, 1, 252, 70, 248, 180, 252, 173, 1, 248, 23, 248, 180, - 252, 173, 1, 248, 58, 248, 180, 252, 173, 1, 246, 252, 248, 180, 252, - 173, 1, 227, 202, 248, 180, 252, 173, 1, 220, 4, 248, 180, 252, 173, 1, - 224, 28, 248, 180, 252, 173, 1, 243, 181, 248, 180, 252, 173, 1, 215, - 242, 248, 180, 252, 173, 1, 232, 183, 248, 180, 252, 173, 1, 222, 165, - 248, 180, 252, 173, 1, 210, 99, 248, 180, 252, 173, 1, 242, 49, 248, 180, - 252, 173, 1, 243, 194, 248, 180, 252, 173, 1, 248, 88, 248, 180, 252, - 173, 1, 221, 150, 248, 180, 252, 173, 1, 240, 75, 248, 180, 252, 173, 1, - 219, 65, 248, 180, 252, 173, 1, 216, 11, 248, 180, 252, 173, 1, 208, 216, - 248, 180, 252, 173, 1, 211, 150, 248, 180, 252, 173, 1, 215, 124, 248, - 180, 252, 173, 1, 232, 213, 248, 180, 252, 173, 1, 246, 253, 248, 180, - 252, 173, 1, 248, 173, 248, 180, 252, 173, 1, 206, 56, 248, 180, 252, - 173, 1, 220, 244, 248, 180, 252, 173, 1, 231, 87, 248, 180, 252, 173, - 247, 224, 83, 26, 32, 3, 253, 114, 26, 32, 3, 253, 113, 26, 32, 3, 253, - 112, 26, 32, 3, 253, 111, 26, 32, 3, 253, 110, 26, 32, 3, 253, 109, 26, - 32, 3, 253, 108, 26, 32, 3, 253, 107, 26, 32, 3, 253, 106, 26, 32, 3, - 253, 105, 26, 32, 3, 253, 104, 26, 32, 3, 253, 103, 26, 32, 3, 253, 102, - 26, 32, 3, 253, 101, 26, 32, 3, 253, 100, 26, 32, 3, 253, 99, 26, 32, 3, - 253, 98, 26, 32, 3, 253, 97, 26, 32, 3, 253, 96, 26, 32, 3, 253, 95, 26, - 32, 3, 253, 94, 26, 32, 3, 253, 93, 26, 32, 3, 253, 92, 26, 32, 3, 253, - 91, 26, 32, 3, 253, 90, 26, 32, 3, 253, 89, 26, 32, 3, 253, 88, 26, 32, - 3, 254, 217, 26, 32, 3, 253, 87, 26, 32, 3, 253, 86, 26, 32, 3, 253, 85, - 26, 32, 3, 253, 84, 26, 32, 3, 253, 83, 26, 32, 3, 253, 82, 26, 32, 3, - 253, 81, 26, 32, 3, 253, 80, 26, 32, 3, 253, 79, 26, 32, 3, 253, 78, 26, - 32, 3, 253, 77, 26, 32, 3, 253, 76, 26, 32, 3, 253, 75, 26, 32, 3, 253, - 74, 26, 32, 3, 253, 73, 26, 32, 3, 253, 72, 26, 32, 3, 253, 71, 26, 32, - 3, 253, 70, 26, 32, 3, 253, 69, 26, 32, 3, 253, 68, 26, 32, 3, 253, 67, - 26, 32, 3, 253, 66, 26, 32, 3, 253, 65, 26, 32, 3, 253, 64, 26, 32, 3, - 253, 63, 26, 32, 3, 253, 62, 26, 32, 3, 253, 61, 26, 32, 3, 253, 60, 26, - 32, 3, 253, 59, 26, 32, 3, 253, 58, 26, 32, 3, 253, 57, 26, 32, 3, 253, - 56, 26, 32, 3, 253, 55, 26, 32, 3, 253, 54, 26, 32, 3, 253, 53, 26, 32, - 3, 253, 52, 26, 32, 3, 253, 51, 26, 32, 3, 253, 50, 26, 32, 3, 253, 49, - 26, 32, 3, 253, 48, 26, 32, 3, 253, 47, 26, 32, 3, 253, 46, 26, 32, 3, - 253, 45, 26, 32, 3, 254, 169, 26, 32, 3, 253, 44, 26, 32, 3, 253, 43, 26, - 32, 3, 254, 168, 26, 32, 3, 253, 42, 26, 32, 3, 253, 41, 26, 32, 3, 253, - 40, 26, 32, 3, 253, 39, 26, 32, 3, 254, 167, 26, 32, 3, 253, 38, 26, 32, - 3, 253, 37, 26, 32, 3, 253, 36, 26, 32, 3, 253, 35, 26, 32, 3, 253, 34, - 26, 32, 3, 254, 164, 26, 32, 3, 254, 163, 26, 32, 3, 254, 162, 26, 32, 3, - 254, 161, 26, 32, 3, 254, 160, 26, 32, 3, 254, 159, 26, 32, 3, 254, 158, - 26, 32, 3, 254, 157, 26, 32, 3, 254, 156, 26, 32, 3, 254, 155, 26, 32, 3, - 254, 154, 26, 32, 3, 254, 153, 26, 32, 3, 254, 152, 26, 32, 3, 254, 151, - 26, 32, 3, 254, 150, 26, 32, 3, 254, 149, 26, 32, 3, 254, 148, 26, 32, 3, - 254, 147, 26, 32, 3, 254, 146, 26, 32, 3, 254, 145, 26, 32, 3, 254, 144, - 26, 32, 3, 254, 143, 26, 32, 3, 254, 142, 26, 32, 3, 254, 141, 26, 32, 3, - 254, 140, 26, 32, 3, 254, 139, 26, 32, 3, 254, 138, 26, 32, 3, 254, 137, - 26, 32, 3, 254, 136, 26, 32, 3, 254, 135, 26, 32, 3, 254, 134, 26, 32, 3, - 254, 133, 26, 32, 3, 254, 132, 26, 32, 3, 254, 131, 26, 32, 3, 254, 130, - 26, 32, 3, 254, 129, 26, 32, 3, 254, 128, 26, 32, 3, 254, 127, 26, 32, 3, - 254, 126, 26, 32, 3, 254, 125, 26, 32, 3, 254, 124, 26, 32, 3, 254, 123, - 26, 32, 3, 254, 122, 26, 32, 3, 254, 121, 26, 32, 3, 254, 120, 26, 32, 3, - 254, 119, 26, 32, 3, 254, 118, 26, 32, 3, 254, 117, 26, 32, 3, 254, 116, - 26, 32, 3, 254, 115, 26, 32, 3, 254, 114, 26, 32, 3, 254, 113, 26, 32, 3, - 254, 112, 26, 32, 3, 254, 111, 26, 32, 3, 254, 110, 26, 32, 3, 254, 109, - 26, 32, 3, 254, 108, 26, 32, 3, 254, 107, 26, 32, 3, 254, 106, 26, 32, 3, - 254, 105, 26, 32, 3, 254, 104, 26, 32, 3, 254, 103, 26, 32, 3, 254, 102, - 26, 32, 3, 254, 101, 26, 32, 3, 254, 100, 26, 32, 3, 254, 99, 26, 32, 3, - 254, 98, 26, 32, 3, 254, 97, 26, 32, 3, 254, 96, 26, 32, 3, 254, 95, 26, - 32, 3, 254, 94, 26, 32, 3, 254, 93, 26, 32, 3, 254, 92, 26, 32, 3, 254, - 91, 26, 32, 3, 254, 90, 26, 32, 3, 254, 89, 26, 32, 3, 254, 88, 26, 32, - 3, 254, 87, 26, 32, 3, 254, 86, 26, 32, 3, 254, 85, 26, 32, 3, 254, 84, - 26, 32, 3, 254, 83, 26, 32, 3, 254, 82, 26, 32, 3, 254, 81, 26, 32, 3, - 254, 80, 26, 32, 3, 254, 79, 26, 32, 3, 254, 78, 26, 32, 3, 254, 77, 26, - 32, 3, 254, 76, 26, 32, 3, 254, 75, 26, 32, 3, 254, 74, 26, 32, 3, 254, - 73, 26, 32, 3, 254, 72, 26, 32, 3, 254, 71, 26, 32, 3, 254, 70, 26, 32, - 3, 254, 69, 26, 32, 3, 254, 68, 26, 32, 3, 254, 67, 26, 32, 3, 254, 66, - 26, 32, 3, 254, 65, 26, 32, 3, 254, 64, 26, 32, 3, 254, 63, 26, 32, 3, - 254, 62, 26, 32, 3, 254, 61, 26, 32, 3, 254, 60, 26, 32, 3, 254, 59, 26, - 32, 3, 254, 58, 26, 32, 3, 254, 57, 26, 32, 3, 254, 56, 26, 32, 3, 254, - 55, 26, 32, 3, 254, 54, 26, 32, 3, 254, 53, 26, 32, 3, 254, 52, 26, 32, - 3, 254, 51, 26, 32, 3, 254, 50, 26, 32, 3, 254, 49, 26, 32, 3, 254, 48, - 26, 32, 3, 254, 47, 26, 32, 3, 254, 46, 26, 32, 3, 254, 45, 26, 32, 3, - 254, 44, 26, 32, 3, 254, 43, 26, 32, 3, 254, 42, 26, 32, 3, 254, 41, 26, - 32, 3, 254, 40, 26, 32, 3, 254, 39, 26, 32, 3, 254, 38, 26, 32, 3, 254, - 37, 26, 32, 3, 254, 36, 26, 32, 3, 254, 35, 26, 32, 3, 254, 34, 26, 32, - 3, 254, 33, 26, 32, 3, 254, 32, 26, 32, 3, 254, 31, 26, 32, 3, 254, 30, - 26, 32, 3, 254, 29, 26, 32, 3, 254, 28, 26, 32, 3, 254, 27, 26, 32, 3, - 254, 26, 26, 32, 3, 254, 25, 26, 32, 3, 254, 24, 26, 32, 3, 254, 23, 26, - 32, 3, 254, 22, 26, 32, 3, 254, 21, 26, 32, 3, 254, 20, 26, 32, 3, 254, - 19, 26, 32, 3, 254, 18, 26, 32, 3, 254, 17, 26, 32, 3, 254, 16, 26, 32, - 3, 254, 15, 26, 32, 3, 254, 14, 26, 32, 3, 254, 13, 26, 32, 3, 254, 12, - 26, 32, 3, 254, 11, 26, 32, 3, 254, 10, 26, 32, 3, 254, 9, 26, 32, 3, - 254, 8, 26, 32, 3, 254, 7, 26, 32, 3, 254, 6, 26, 32, 3, 254, 5, 26, 32, - 3, 254, 4, 26, 32, 3, 254, 3, 26, 32, 3, 254, 2, 26, 32, 3, 254, 1, 26, - 32, 3, 254, 0, 26, 32, 3, 253, 255, 26, 32, 3, 253, 254, 26, 32, 3, 253, - 253, 26, 32, 3, 253, 252, 26, 32, 3, 253, 251, 26, 32, 3, 253, 250, 26, - 32, 3, 253, 249, 26, 32, 3, 253, 248, 26, 32, 3, 253, 247, 26, 32, 3, - 253, 246, 26, 32, 3, 253, 245, 26, 32, 3, 253, 244, 26, 32, 3, 253, 243, - 26, 32, 3, 253, 242, 26, 32, 3, 253, 241, 26, 32, 3, 253, 240, 26, 32, 3, - 253, 239, 26, 32, 3, 253, 238, 26, 32, 3, 253, 237, 26, 32, 3, 253, 236, - 26, 32, 3, 253, 235, 26, 32, 3, 253, 234, 26, 32, 3, 253, 233, 26, 32, 3, - 253, 232, 26, 32, 3, 253, 231, 26, 32, 3, 253, 230, 26, 32, 3, 253, 229, - 26, 32, 3, 253, 228, 26, 32, 3, 253, 227, 26, 32, 3, 253, 226, 26, 32, 3, - 253, 225, 26, 32, 3, 253, 224, 26, 32, 3, 253, 223, 26, 32, 3, 253, 222, - 26, 32, 3, 253, 221, 26, 32, 3, 253, 220, 26, 32, 3, 253, 219, 26, 32, 3, - 253, 218, 26, 32, 3, 253, 217, 26, 32, 3, 253, 216, 26, 32, 3, 253, 215, - 26, 32, 3, 253, 214, 26, 32, 3, 253, 213, 26, 32, 3, 253, 212, 26, 32, 3, - 253, 211, 26, 32, 3, 253, 210, 26, 32, 3, 253, 209, 26, 32, 3, 253, 208, - 26, 32, 3, 253, 207, 26, 32, 3, 253, 206, 26, 32, 3, 253, 205, 26, 32, 3, - 253, 204, 26, 32, 3, 253, 203, 26, 32, 3, 253, 202, 26, 32, 3, 253, 201, - 26, 32, 3, 253, 200, 26, 32, 3, 253, 199, 26, 32, 3, 253, 198, 26, 32, 3, - 253, 197, 26, 32, 3, 253, 196, 26, 32, 3, 253, 195, 26, 32, 3, 253, 194, - 62, 26, 32, 3, 253, 193, 251, 150, 26, 32, 3, 253, 192, 246, 240, 26, 32, - 3, 253, 191, 75, 26, 32, 3, 253, 190, 242, 139, 26, 32, 3, 253, 189, 239, - 155, 26, 32, 3, 253, 188, 232, 203, 26, 32, 3, 253, 187, 232, 76, 26, 32, - 3, 253, 186, 149, 26, 32, 3, 253, 185, 230, 146, 26, 32, 3, 253, 184, - 230, 145, 26, 32, 3, 253, 183, 230, 144, 26, 32, 3, 253, 182, 230, 143, - 26, 32, 3, 253, 181, 207, 129, 26, 32, 3, 253, 180, 206, 195, 26, 32, 3, - 253, 179, 206, 123, 26, 32, 3, 253, 178, 222, 170, 26, 32, 3, 253, 177, - 253, 30, 26, 32, 3, 253, 176, 250, 98, 26, 32, 3, 253, 175, 246, 56, 26, - 32, 3, 253, 174, 242, 146, 26, 32, 3, 253, 173, 232, 182, 26, 32, 3, 253, - 172, 26, 32, 3, 253, 171, 26, 32, 3, 253, 170, 26, 32, 3, 253, 169, 26, - 32, 3, 253, 168, 26, 32, 3, 253, 167, 26, 32, 3, 253, 166, 26, 32, 3, - 253, 165, 246, 247, 4, 62, 246, 247, 4, 75, 246, 247, 4, 74, 246, 247, 4, - 76, 246, 247, 4, 71, 246, 247, 4, 232, 200, 246, 247, 4, 232, 122, 246, - 247, 4, 172, 246, 247, 4, 231, 224, 246, 247, 4, 231, 123, 246, 247, 4, - 231, 53, 246, 247, 4, 230, 236, 246, 247, 4, 230, 141, 246, 247, 4, 230, - 58, 246, 247, 4, 229, 235, 246, 247, 4, 229, 144, 246, 247, 4, 229, 81, - 246, 247, 4, 185, 246, 247, 4, 227, 119, 246, 247, 4, 226, 254, 246, 247, - 4, 226, 181, 246, 247, 4, 226, 114, 246, 247, 4, 199, 246, 247, 4, 225, - 110, 246, 247, 4, 224, 230, 246, 247, 4, 224, 67, 246, 247, 4, 223, 217, - 246, 247, 4, 179, 246, 247, 4, 221, 174, 246, 247, 4, 221, 53, 246, 247, - 4, 220, 211, 246, 247, 4, 220, 82, 246, 247, 4, 219, 113, 246, 247, 4, - 219, 51, 246, 247, 4, 218, 208, 246, 247, 4, 218, 124, 246, 247, 4, 218, - 50, 246, 247, 4, 217, 199, 246, 247, 4, 217, 86, 246, 247, 4, 215, 80, - 246, 247, 4, 214, 193, 246, 247, 4, 213, 203, 246, 247, 4, 212, 219, 246, - 247, 4, 212, 131, 246, 247, 4, 211, 211, 246, 247, 4, 124, 246, 247, 4, - 210, 170, 246, 247, 4, 207, 96, 246, 247, 4, 207, 51, 246, 247, 4, 207, - 20, 246, 247, 4, 206, 250, 246, 247, 4, 206, 181, 246, 247, 4, 206, 175, - 246, 247, 4, 205, 116, 246, 247, 4, 205, 19, 233, 70, 252, 23, 1, 252, - 170, 233, 70, 252, 23, 1, 250, 7, 233, 70, 252, 23, 1, 240, 47, 233, 70, - 252, 23, 1, 246, 110, 233, 70, 252, 23, 1, 239, 71, 233, 70, 252, 23, 1, - 207, 59, 233, 70, 252, 23, 1, 205, 96, 233, 70, 252, 23, 1, 239, 27, 233, - 70, 252, 23, 1, 212, 76, 233, 70, 252, 23, 1, 205, 235, 233, 70, 252, 23, - 1, 232, 17, 233, 70, 252, 23, 1, 230, 97, 233, 70, 252, 23, 1, 227, 90, - 233, 70, 252, 23, 1, 223, 173, 233, 70, 252, 23, 1, 217, 157, 233, 70, - 252, 23, 1, 251, 154, 233, 70, 252, 23, 1, 221, 174, 233, 70, 252, 23, 1, - 217, 189, 233, 70, 252, 23, 1, 219, 218, 233, 70, 252, 23, 1, 218, 242, - 233, 70, 252, 23, 1, 215, 171, 233, 70, 252, 23, 1, 212, 145, 233, 70, - 252, 23, 217, 77, 53, 233, 70, 252, 23, 43, 102, 233, 70, 252, 23, 43, - 105, 233, 70, 252, 23, 43, 142, 233, 70, 252, 23, 43, 212, 98, 233, 70, - 252, 23, 43, 210, 123, 233, 70, 252, 23, 43, 119, 238, 29, 233, 70, 252, - 23, 43, 119, 211, 242, 233, 70, 252, 23, 43, 212, 99, 211, 242, 222, 18, - 1, 252, 170, 222, 18, 1, 250, 7, 222, 18, 1, 240, 47, 222, 18, 1, 246, - 110, 222, 18, 1, 239, 71, 222, 18, 1, 207, 59, 222, 18, 1, 205, 96, 222, - 18, 1, 239, 27, 222, 18, 1, 212, 76, 222, 18, 1, 205, 235, 222, 18, 1, - 232, 17, 222, 18, 1, 230, 97, 222, 18, 1, 227, 90, 222, 18, 1, 42, 223, - 173, 222, 18, 1, 223, 173, 222, 18, 1, 217, 157, 222, 18, 1, 251, 154, - 222, 18, 1, 221, 174, 222, 18, 1, 217, 189, 222, 18, 1, 219, 218, 222, - 18, 1, 218, 242, 222, 18, 1, 215, 171, 222, 18, 1, 212, 145, 222, 18, - 230, 41, 241, 183, 222, 18, 218, 162, 241, 183, 222, 18, 43, 102, 222, - 18, 43, 105, 222, 18, 43, 142, 222, 18, 43, 139, 222, 18, 43, 168, 222, - 18, 43, 212, 98, 222, 18, 43, 210, 123, 225, 228, 1, 42, 252, 170, 225, - 228, 1, 252, 170, 225, 228, 1, 42, 250, 7, 225, 228, 1, 250, 7, 225, 228, - 1, 240, 47, 225, 228, 1, 246, 110, 225, 228, 1, 42, 239, 71, 225, 228, 1, - 239, 71, 225, 228, 1, 207, 59, 225, 228, 1, 205, 96, 225, 228, 1, 239, - 27, 225, 228, 1, 212, 76, 225, 228, 1, 42, 205, 235, 225, 228, 1, 205, - 235, 225, 228, 1, 42, 232, 17, 225, 228, 1, 232, 17, 225, 228, 1, 42, - 230, 97, 225, 228, 1, 230, 97, 225, 228, 1, 42, 227, 90, 225, 228, 1, - 227, 90, 225, 228, 1, 42, 223, 173, 225, 228, 1, 223, 173, 225, 228, 1, - 217, 157, 225, 228, 1, 251, 154, 225, 228, 1, 221, 174, 225, 228, 1, 217, - 189, 225, 228, 1, 219, 218, 225, 228, 1, 218, 242, 225, 228, 1, 42, 215, - 171, 225, 228, 1, 215, 171, 225, 228, 1, 212, 145, 225, 228, 43, 102, - 225, 228, 43, 105, 225, 228, 43, 142, 225, 228, 43, 139, 225, 228, 247, - 46, 43, 139, 225, 228, 43, 168, 225, 228, 43, 212, 98, 225, 228, 43, 210, - 123, 225, 228, 43, 119, 238, 29, 221, 64, 1, 252, 167, 221, 64, 1, 250, - 10, 221, 64, 1, 240, 217, 221, 64, 1, 245, 229, 221, 64, 1, 239, 71, 221, - 64, 1, 207, 66, 221, 64, 1, 205, 110, 221, 64, 1, 239, 29, 221, 64, 1, - 212, 80, 221, 64, 1, 205, 236, 221, 64, 1, 232, 45, 221, 64, 1, 230, 103, - 221, 64, 1, 227, 90, 221, 64, 1, 223, 173, 221, 64, 1, 216, 46, 221, 64, - 1, 252, 200, 221, 64, 1, 221, 174, 221, 64, 1, 217, 190, 221, 64, 1, 219, - 223, 221, 64, 1, 218, 99, 221, 64, 1, 215, 171, 221, 64, 1, 212, 151, - 221, 64, 43, 102, 221, 64, 43, 212, 98, 221, 64, 43, 210, 123, 221, 64, - 43, 119, 238, 29, 221, 64, 43, 105, 221, 64, 43, 142, 221, 64, 206, 232, - 216, 39, 229, 39, 1, 62, 229, 39, 1, 251, 150, 229, 39, 1, 241, 55, 229, - 39, 1, 246, 240, 229, 39, 1, 75, 229, 39, 1, 209, 148, 229, 39, 1, 74, - 229, 39, 1, 206, 123, 229, 39, 1, 232, 76, 229, 39, 1, 149, 229, 39, 1, - 229, 28, 229, 39, 1, 226, 33, 229, 39, 1, 76, 229, 39, 1, 137, 229, 39, - 1, 214, 99, 229, 39, 1, 213, 10, 229, 39, 1, 71, 229, 39, 1, 242, 139, - 229, 39, 1, 220, 27, 229, 39, 1, 182, 229, 39, 1, 210, 211, 229, 39, 1, - 252, 122, 229, 39, 1, 243, 41, 229, 39, 1, 229, 42, 229, 39, 1, 224, 104, - 229, 39, 1, 249, 34, 229, 39, 211, 48, 83, 227, 72, 239, 5, 1, 62, 227, - 72, 239, 5, 1, 75, 227, 72, 239, 5, 1, 74, 227, 72, 239, 5, 1, 76, 227, - 72, 239, 5, 1, 190, 227, 72, 239, 5, 1, 207, 96, 227, 72, 239, 5, 1, 250, - 183, 227, 72, 239, 5, 1, 250, 182, 227, 72, 239, 5, 1, 179, 227, 72, 239, - 5, 1, 185, 227, 72, 239, 5, 1, 199, 227, 72, 239, 5, 1, 225, 236, 227, - 72, 239, 5, 1, 225, 110, 227, 72, 239, 5, 1, 225, 109, 227, 72, 239, 5, - 1, 219, 113, 227, 72, 239, 5, 1, 219, 112, 227, 72, 239, 5, 1, 230, 141, - 227, 72, 239, 5, 1, 231, 167, 227, 72, 239, 5, 1, 239, 20, 227, 72, 239, - 5, 1, 217, 199, 227, 72, 239, 5, 1, 217, 198, 227, 72, 239, 5, 1, 217, - 86, 227, 72, 239, 5, 1, 172, 227, 72, 239, 5, 1, 220, 19, 227, 72, 239, - 5, 1, 212, 219, 227, 72, 239, 5, 1, 212, 218, 227, 72, 239, 5, 1, 212, - 131, 227, 72, 239, 5, 1, 212, 130, 227, 72, 239, 5, 1, 124, 227, 72, 239, - 5, 1, 246, 145, 227, 72, 239, 5, 16, 208, 208, 227, 72, 239, 5, 16, 208, - 207, 227, 72, 247, 21, 1, 62, 227, 72, 247, 21, 1, 75, 227, 72, 247, 21, - 1, 74, 227, 72, 247, 21, 1, 76, 227, 72, 247, 21, 1, 190, 227, 72, 247, - 21, 1, 207, 96, 227, 72, 247, 21, 1, 250, 183, 227, 72, 247, 21, 1, 179, - 227, 72, 247, 21, 1, 185, 227, 72, 247, 21, 1, 199, 227, 72, 247, 21, 1, - 225, 110, 227, 72, 247, 21, 1, 219, 113, 227, 72, 247, 21, 1, 230, 141, - 227, 72, 247, 21, 1, 231, 167, 227, 72, 247, 21, 1, 239, 20, 227, 72, - 247, 21, 1, 217, 199, 227, 72, 247, 21, 1, 252, 19, 217, 199, 227, 72, - 247, 21, 1, 217, 86, 227, 72, 247, 21, 1, 172, 227, 72, 247, 21, 1, 220, - 19, 227, 72, 247, 21, 1, 212, 219, 227, 72, 247, 21, 1, 212, 131, 227, - 72, 247, 21, 1, 124, 227, 72, 247, 21, 1, 246, 145, 227, 72, 247, 21, - 229, 133, 218, 130, 227, 72, 247, 21, 229, 133, 233, 75, 231, 154, 1, 62, - 231, 154, 22, 3, 74, 231, 154, 22, 3, 71, 231, 154, 22, 3, 115, 137, 231, - 154, 22, 3, 75, 231, 154, 22, 3, 76, 231, 154, 22, 230, 20, 83, 231, 154, - 3, 50, 218, 149, 55, 231, 154, 3, 252, 73, 231, 154, 3, 208, 183, 231, - 154, 1, 172, 231, 154, 1, 231, 167, 231, 154, 1, 240, 244, 231, 154, 1, - 240, 99, 231, 154, 1, 249, 1, 231, 154, 1, 248, 110, 231, 154, 1, 232, - 200, 231, 154, 1, 223, 144, 231, 154, 1, 210, 208, 231, 154, 1, 210, 196, - 231, 154, 1, 246, 54, 231, 154, 1, 246, 38, 231, 154, 1, 224, 103, 231, - 154, 1, 212, 219, 231, 154, 1, 212, 56, 231, 154, 1, 246, 145, 231, 154, - 1, 245, 192, 231, 154, 1, 199, 231, 154, 1, 179, 231, 154, 1, 221, 93, - 231, 154, 1, 250, 183, 231, 154, 1, 250, 0, 231, 154, 1, 185, 231, 154, - 1, 190, 231, 154, 1, 219, 113, 231, 154, 1, 230, 141, 231, 154, 1, 209, - 70, 231, 154, 1, 216, 2, 231, 154, 1, 214, 96, 231, 154, 1, 217, 199, - 231, 154, 1, 205, 116, 231, 154, 1, 155, 231, 154, 1, 231, 72, 231, 154, - 1, 210, 176, 231, 154, 3, 250, 129, 52, 231, 154, 3, 248, 179, 231, 154, - 3, 67, 55, 231, 154, 208, 188, 231, 154, 18, 102, 231, 154, 18, 105, 231, - 154, 18, 142, 231, 154, 18, 139, 231, 154, 43, 212, 98, 231, 154, 43, - 210, 123, 231, 154, 43, 119, 238, 29, 231, 154, 43, 119, 211, 242, 231, - 154, 220, 72, 245, 23, 231, 154, 220, 72, 5, 247, 233, 231, 154, 220, 72, - 247, 233, 231, 154, 220, 72, 247, 66, 134, 231, 154, 220, 72, 227, 215, - 231, 154, 220, 72, 229, 102, 231, 154, 220, 72, 246, 100, 231, 154, 220, - 72, 50, 246, 100, 231, 154, 220, 72, 229, 199, 44, 188, 252, 34, 1, 239, - 71, 44, 188, 252, 34, 1, 230, 97, 44, 188, 252, 34, 1, 239, 27, 44, 188, - 252, 34, 1, 227, 90, 44, 188, 252, 34, 1, 219, 218, 44, 188, 252, 34, 1, - 207, 59, 44, 188, 252, 34, 1, 215, 171, 44, 188, 252, 34, 1, 218, 242, - 44, 188, 252, 34, 1, 250, 7, 44, 188, 252, 34, 1, 212, 145, 44, 188, 252, - 34, 1, 217, 133, 44, 188, 252, 34, 1, 232, 17, 44, 188, 252, 34, 1, 223, - 173, 44, 188, 252, 34, 1, 231, 149, 44, 188, 252, 34, 1, 217, 189, 44, - 188, 252, 34, 1, 217, 157, 44, 188, 252, 34, 1, 242, 28, 44, 188, 252, - 34, 1, 252, 172, 44, 188, 252, 34, 1, 251, 153, 44, 188, 252, 34, 1, 245, - 189, 44, 188, 252, 34, 1, 240, 47, 44, 188, 252, 34, 1, 246, 110, 44, - 188, 252, 34, 1, 240, 87, 44, 188, 252, 34, 1, 212, 76, 44, 188, 252, 34, - 1, 205, 95, 44, 188, 252, 34, 1, 245, 186, 44, 188, 252, 34, 1, 205, 235, - 44, 188, 252, 34, 1, 212, 43, 44, 188, 252, 34, 1, 212, 22, 44, 188, 252, - 34, 43, 102, 44, 188, 252, 34, 43, 241, 243, 44, 188, 252, 34, 133, 233, - 49, 44, 143, 252, 34, 1, 239, 50, 44, 143, 252, 34, 1, 230, 106, 44, 143, - 252, 34, 1, 239, 132, 44, 143, 252, 34, 1, 227, 104, 44, 143, 252, 34, 1, - 220, 12, 44, 143, 252, 34, 1, 207, 59, 44, 143, 252, 34, 1, 242, 223, 44, - 143, 252, 34, 1, 219, 16, 44, 143, 252, 34, 1, 250, 38, 44, 143, 252, 34, - 1, 212, 115, 44, 143, 252, 34, 1, 242, 224, 44, 143, 252, 34, 1, 232, 45, - 44, 143, 252, 34, 1, 224, 54, 44, 143, 252, 34, 1, 231, 163, 44, 143, - 252, 34, 1, 217, 191, 44, 143, 252, 34, 1, 242, 222, 44, 143, 252, 34, 1, - 242, 15, 44, 143, 252, 34, 1, 252, 172, 44, 143, 252, 34, 1, 252, 200, - 44, 143, 252, 34, 1, 246, 140, 44, 143, 252, 34, 1, 240, 161, 44, 143, - 252, 34, 1, 246, 117, 44, 143, 252, 34, 1, 240, 94, 44, 143, 252, 34, 1, - 212, 194, 44, 143, 252, 34, 1, 205, 108, 44, 143, 252, 34, 1, 212, 49, - 44, 143, 252, 34, 1, 206, 47, 44, 143, 252, 34, 1, 212, 37, 44, 143, 252, - 34, 1, 205, 111, 44, 143, 252, 34, 43, 102, 44, 143, 252, 34, 43, 212, - 98, 44, 143, 252, 34, 43, 210, 123, 227, 214, 1, 252, 170, 227, 214, 1, - 250, 7, 227, 214, 1, 249, 250, 227, 214, 1, 240, 47, 227, 214, 1, 240, - 72, 227, 214, 1, 246, 110, 227, 214, 1, 239, 71, 227, 214, 1, 207, 59, - 227, 214, 3, 210, 8, 227, 214, 1, 205, 96, 227, 214, 1, 205, 74, 227, - 214, 1, 232, 184, 227, 214, 1, 232, 166, 227, 214, 1, 239, 27, 227, 214, - 1, 212, 76, 227, 214, 1, 205, 235, 227, 214, 1, 232, 17, 227, 214, 1, - 206, 178, 227, 214, 1, 231, 156, 227, 214, 1, 230, 97, 227, 214, 1, 245, - 185, 227, 214, 1, 212, 48, 227, 214, 1, 227, 90, 227, 214, 1, 223, 173, - 227, 214, 1, 217, 157, 227, 214, 1, 251, 154, 227, 214, 1, 253, 117, 227, - 214, 1, 221, 174, 227, 214, 1, 242, 28, 227, 214, 1, 217, 189, 227, 214, - 1, 219, 218, 227, 214, 1, 206, 156, 227, 214, 1, 219, 244, 227, 214, 1, - 218, 242, 227, 214, 1, 215, 171, 227, 214, 1, 214, 65, 227, 214, 1, 212, - 145, 227, 214, 253, 29, 141, 52, 227, 214, 253, 29, 141, 55, 227, 214, - 43, 102, 227, 214, 43, 168, 227, 214, 43, 212, 98, 227, 214, 43, 210, - 123, 227, 214, 43, 119, 238, 29, 227, 214, 220, 72, 214, 26, 227, 214, - 220, 72, 241, 183, 227, 214, 220, 72, 50, 67, 206, 255, 245, 23, 227, - 214, 220, 72, 67, 206, 255, 245, 23, 227, 214, 220, 72, 245, 23, 227, - 214, 220, 72, 118, 245, 21, 227, 214, 220, 72, 229, 206, 241, 232, 251, - 164, 1, 62, 251, 164, 1, 253, 164, 251, 164, 1, 252, 71, 251, 164, 1, - 253, 123, 251, 164, 1, 252, 122, 251, 164, 1, 253, 124, 251, 164, 1, 252, - 248, 251, 164, 1, 252, 244, 251, 164, 1, 75, 251, 164, 1, 243, 104, 251, - 164, 1, 76, 251, 164, 1, 222, 152, 251, 164, 1, 74, 251, 164, 1, 233, - 102, 251, 164, 1, 71, 251, 164, 1, 209, 162, 251, 164, 1, 231, 224, 251, - 164, 1, 206, 175, 251, 164, 1, 206, 137, 251, 164, 1, 206, 147, 251, 164, - 1, 240, 170, 251, 164, 1, 240, 130, 251, 164, 1, 240, 85, 251, 164, 1, - 248, 148, 251, 164, 1, 232, 182, 251, 164, 1, 212, 131, 251, 164, 1, 212, - 41, 251, 164, 1, 246, 9, 251, 164, 1, 245, 183, 251, 164, 1, 210, 203, - 251, 164, 1, 221, 174, 251, 164, 1, 242, 28, 251, 164, 1, 250, 61, 251, - 164, 1, 249, 252, 251, 164, 1, 225, 64, 251, 164, 1, 224, 236, 251, 164, - 1, 224, 237, 251, 164, 1, 225, 110, 251, 164, 1, 223, 134, 251, 164, 1, - 224, 98, 251, 164, 1, 227, 119, 251, 164, 1, 238, 199, 251, 164, 1, 205, - 166, 251, 164, 1, 206, 52, 251, 164, 1, 209, 39, 251, 164, 1, 219, 51, - 251, 164, 1, 230, 58, 251, 164, 1, 217, 86, 251, 164, 1, 205, 93, 251, - 164, 1, 215, 214, 251, 164, 1, 205, 72, 251, 164, 1, 215, 87, 251, 164, - 1, 214, 66, 251, 164, 1, 239, 71, 251, 164, 253, 29, 83, 211, 169, 118, - 177, 131, 119, 67, 220, 71, 5, 118, 177, 131, 119, 67, 220, 71, 230, 86, - 118, 177, 131, 119, 67, 220, 71, 230, 86, 119, 67, 131, 118, 177, 220, - 71, 230, 86, 118, 218, 146, 131, 119, 218, 149, 220, 71, 230, 86, 119, - 218, 149, 131, 118, 218, 146, 220, 71, 233, 29, 221, 210, 1, 252, 170, - 233, 29, 221, 210, 1, 250, 7, 233, 29, 221, 210, 1, 240, 47, 233, 29, - 221, 210, 1, 246, 110, 233, 29, 221, 210, 1, 239, 71, 233, 29, 221, 210, - 1, 207, 59, 233, 29, 221, 210, 1, 205, 96, 233, 29, 221, 210, 1, 239, 27, - 233, 29, 221, 210, 1, 212, 76, 233, 29, 221, 210, 1, 205, 235, 233, 29, - 221, 210, 1, 232, 17, 233, 29, 221, 210, 1, 230, 97, 233, 29, 221, 210, - 1, 227, 90, 233, 29, 221, 210, 1, 223, 173, 233, 29, 221, 210, 1, 217, - 157, 233, 29, 221, 210, 1, 251, 154, 233, 29, 221, 210, 1, 221, 174, 233, - 29, 221, 210, 1, 217, 189, 233, 29, 221, 210, 1, 219, 218, 233, 29, 221, - 210, 1, 218, 242, 233, 29, 221, 210, 1, 215, 171, 233, 29, 221, 210, 1, - 212, 145, 233, 29, 221, 210, 43, 102, 233, 29, 221, 210, 43, 105, 233, - 29, 221, 210, 43, 142, 233, 29, 221, 210, 43, 139, 233, 29, 221, 210, 43, - 212, 98, 233, 29, 221, 210, 43, 210, 123, 233, 29, 221, 210, 43, 119, - 238, 29, 233, 29, 221, 210, 43, 119, 211, 242, 233, 29, 222, 33, 1, 252, - 170, 233, 29, 222, 33, 1, 250, 7, 233, 29, 222, 33, 1, 240, 47, 233, 29, - 222, 33, 1, 246, 110, 233, 29, 222, 33, 1, 239, 71, 233, 29, 222, 33, 1, - 207, 58, 233, 29, 222, 33, 1, 205, 96, 233, 29, 222, 33, 1, 239, 27, 233, - 29, 222, 33, 1, 212, 76, 233, 29, 222, 33, 1, 205, 235, 233, 29, 222, 33, - 1, 232, 17, 233, 29, 222, 33, 1, 230, 97, 233, 29, 222, 33, 1, 227, 89, - 233, 29, 222, 33, 1, 223, 173, 233, 29, 222, 33, 1, 217, 157, 233, 29, - 222, 33, 1, 221, 174, 233, 29, 222, 33, 1, 217, 189, 233, 29, 222, 33, 1, - 215, 171, 233, 29, 222, 33, 1, 212, 145, 233, 29, 222, 33, 43, 102, 233, - 29, 222, 33, 43, 105, 233, 29, 222, 33, 43, 142, 233, 29, 222, 33, 43, - 139, 233, 29, 222, 33, 43, 212, 98, 233, 29, 222, 33, 43, 210, 123, 233, - 29, 222, 33, 43, 119, 238, 29, 233, 29, 222, 33, 43, 119, 211, 242, 220, - 94, 222, 33, 1, 252, 170, 220, 94, 222, 33, 1, 250, 7, 220, 94, 222, 33, - 1, 240, 47, 220, 94, 222, 33, 1, 246, 110, 220, 94, 222, 33, 1, 239, 71, - 220, 94, 222, 33, 1, 207, 58, 220, 94, 222, 33, 1, 205, 96, 220, 94, 222, - 33, 1, 239, 27, 220, 94, 222, 33, 1, 205, 235, 220, 94, 222, 33, 1, 232, - 17, 220, 94, 222, 33, 1, 230, 97, 220, 94, 222, 33, 1, 227, 89, 220, 94, - 222, 33, 1, 223, 173, 220, 94, 222, 33, 1, 217, 157, 220, 94, 222, 33, 1, - 221, 174, 220, 94, 222, 33, 1, 217, 189, 220, 94, 222, 33, 1, 215, 171, - 220, 94, 222, 33, 1, 212, 145, 220, 94, 222, 33, 217, 77, 83, 220, 94, - 222, 33, 201, 217, 77, 83, 220, 94, 222, 33, 241, 125, 177, 2, 247, 59, - 220, 94, 222, 33, 241, 125, 177, 2, 245, 23, 220, 94, 222, 33, 43, 102, - 220, 94, 222, 33, 43, 105, 220, 94, 222, 33, 43, 142, 220, 94, 222, 33, - 43, 139, 220, 94, 222, 33, 43, 212, 98, 220, 94, 222, 33, 43, 210, 123, - 220, 94, 222, 33, 43, 119, 238, 29, 44, 210, 147, 1, 222, 113, 62, 44, - 210, 147, 1, 206, 40, 62, 44, 210, 147, 1, 206, 40, 252, 248, 44, 210, - 147, 1, 222, 113, 74, 44, 210, 147, 1, 206, 40, 74, 44, 210, 147, 1, 206, - 40, 75, 44, 210, 147, 1, 222, 113, 76, 44, 210, 147, 1, 222, 113, 222, - 206, 44, 210, 147, 1, 206, 40, 222, 206, 44, 210, 147, 1, 222, 113, 253, - 115, 44, 210, 147, 1, 206, 40, 253, 115, 44, 210, 147, 1, 222, 113, 252, - 247, 44, 210, 147, 1, 206, 40, 252, 247, 44, 210, 147, 1, 222, 113, 252, - 220, 44, 210, 147, 1, 206, 40, 252, 220, 44, 210, 147, 1, 222, 113, 252, - 242, 44, 210, 147, 1, 206, 40, 252, 242, 44, 210, 147, 1, 222, 113, 253, - 5, 44, 210, 147, 1, 206, 40, 253, 5, 44, 210, 147, 1, 222, 113, 252, 246, - 44, 210, 147, 1, 222, 113, 242, 145, 44, 210, 147, 1, 206, 40, 242, 145, - 44, 210, 147, 1, 222, 113, 251, 159, 44, 210, 147, 1, 206, 40, 251, 159, - 44, 210, 147, 1, 222, 113, 252, 229, 44, 210, 147, 1, 206, 40, 252, 229, - 44, 210, 147, 1, 222, 113, 252, 240, 44, 210, 147, 1, 206, 40, 252, 240, - 44, 210, 147, 1, 222, 113, 222, 205, 44, 210, 147, 1, 206, 40, 222, 205, - 44, 210, 147, 1, 222, 113, 252, 181, 44, 210, 147, 1, 206, 40, 252, 181, - 44, 210, 147, 1, 222, 113, 252, 239, 44, 210, 147, 1, 222, 113, 243, 52, - 44, 210, 147, 1, 222, 113, 243, 50, 44, 210, 147, 1, 222, 113, 252, 122, - 44, 210, 147, 1, 222, 113, 252, 237, 44, 210, 147, 1, 206, 40, 252, 237, - 44, 210, 147, 1, 222, 113, 243, 20, 44, 210, 147, 1, 206, 40, 243, 20, - 44, 210, 147, 1, 222, 113, 243, 38, 44, 210, 147, 1, 206, 40, 243, 38, - 44, 210, 147, 1, 222, 113, 243, 7, 44, 210, 147, 1, 206, 40, 243, 7, 44, - 210, 147, 1, 206, 40, 252, 114, 44, 210, 147, 1, 222, 113, 243, 28, 44, - 210, 147, 1, 206, 40, 252, 236, 44, 210, 147, 1, 222, 113, 242, 253, 44, - 210, 147, 1, 222, 113, 222, 143, 44, 210, 147, 1, 222, 113, 237, 183, 44, - 210, 147, 1, 222, 113, 243, 110, 44, 210, 147, 1, 206, 40, 243, 110, 44, - 210, 147, 1, 222, 113, 252, 41, 44, 210, 147, 1, 206, 40, 252, 41, 44, - 210, 147, 1, 222, 113, 232, 245, 44, 210, 147, 1, 206, 40, 232, 245, 44, - 210, 147, 1, 222, 113, 222, 124, 44, 210, 147, 1, 206, 40, 222, 124, 44, - 210, 147, 1, 222, 113, 252, 37, 44, 210, 147, 1, 206, 40, 252, 37, 44, - 210, 147, 1, 222, 113, 252, 235, 44, 210, 147, 1, 222, 113, 251, 231, 44, - 210, 147, 1, 222, 113, 252, 233, 44, 210, 147, 1, 222, 113, 251, 225, 44, - 210, 147, 1, 206, 40, 251, 225, 44, 210, 147, 1, 222, 113, 242, 215, 44, - 210, 147, 1, 206, 40, 242, 215, 44, 210, 147, 1, 222, 113, 251, 199, 44, - 210, 147, 1, 206, 40, 251, 199, 44, 210, 147, 1, 222, 113, 252, 230, 44, - 210, 147, 1, 206, 40, 252, 230, 44, 210, 147, 1, 222, 113, 222, 103, 44, - 210, 147, 1, 222, 113, 250, 113, 218, 36, 18, 102, 218, 36, 18, 105, 218, - 36, 18, 142, 218, 36, 18, 139, 218, 36, 18, 168, 218, 36, 18, 184, 218, - 36, 18, 195, 218, 36, 18, 193, 218, 36, 18, 200, 218, 36, 43, 212, 98, - 218, 36, 43, 210, 123, 218, 36, 43, 212, 3, 218, 36, 43, 241, 130, 218, - 36, 43, 241, 243, 218, 36, 43, 214, 252, 218, 36, 43, 216, 17, 218, 36, - 43, 243, 79, 218, 36, 43, 224, 190, 218, 36, 43, 119, 238, 29, 218, 36, - 43, 118, 238, 29, 218, 36, 43, 129, 238, 29, 218, 36, 43, 241, 125, 238, - 29, 218, 36, 43, 241, 204, 238, 29, 218, 36, 43, 215, 10, 238, 29, 218, - 36, 43, 216, 23, 238, 29, 218, 36, 43, 243, 88, 238, 29, 218, 36, 43, - 224, 195, 238, 29, 218, 36, 241, 116, 119, 239, 121, 218, 36, 241, 116, - 119, 219, 204, 218, 36, 241, 116, 119, 212, 10, 218, 36, 241, 116, 118, - 212, 7, 136, 3, 248, 217, 136, 3, 252, 73, 136, 3, 208, 183, 136, 3, 232, - 156, 136, 3, 209, 204, 136, 1, 62, 136, 1, 253, 164, 136, 1, 74, 136, 1, - 233, 102, 136, 1, 71, 136, 1, 209, 162, 136, 1, 115, 137, 136, 1, 115, - 218, 90, 136, 1, 115, 149, 136, 1, 115, 229, 173, 136, 1, 75, 136, 1, - 252, 205, 136, 1, 76, 136, 1, 251, 184, 136, 1, 172, 136, 1, 231, 167, - 136, 1, 240, 244, 136, 1, 240, 99, 136, 1, 225, 77, 136, 1, 249, 1, 136, - 1, 248, 110, 136, 1, 232, 200, 136, 1, 232, 170, 136, 1, 223, 144, 136, - 1, 210, 208, 136, 1, 210, 196, 136, 1, 246, 54, 136, 1, 246, 38, 136, 1, - 224, 103, 136, 1, 212, 219, 136, 1, 212, 56, 136, 1, 246, 145, 136, 1, - 245, 192, 136, 1, 199, 136, 1, 179, 136, 1, 221, 93, 136, 1, 250, 183, - 136, 1, 250, 0, 136, 1, 185, 136, 1, 190, 136, 1, 219, 113, 136, 1, 230, - 141, 136, 1, 209, 70, 136, 1, 216, 2, 136, 1, 214, 96, 136, 1, 217, 199, - 136, 1, 155, 136, 1, 229, 172, 136, 1, 44, 40, 229, 163, 136, 1, 44, 40, - 218, 89, 136, 1, 44, 40, 224, 85, 136, 22, 3, 253, 164, 136, 22, 3, 249, - 253, 253, 164, 136, 22, 3, 74, 136, 22, 3, 233, 102, 136, 22, 3, 71, 136, - 22, 3, 209, 162, 136, 22, 3, 115, 137, 136, 22, 3, 115, 218, 90, 136, 22, - 3, 115, 149, 136, 22, 3, 115, 229, 173, 136, 22, 3, 75, 136, 22, 3, 252, - 205, 136, 22, 3, 76, 136, 22, 3, 251, 184, 136, 208, 188, 136, 246, 100, - 136, 50, 246, 100, 136, 220, 72, 245, 23, 136, 220, 72, 50, 245, 23, 136, - 220, 72, 229, 205, 136, 220, 72, 247, 66, 134, 136, 220, 72, 229, 102, - 136, 43, 102, 136, 43, 105, 136, 43, 142, 136, 43, 139, 136, 43, 168, - 136, 43, 184, 136, 43, 195, 136, 43, 193, 136, 43, 200, 136, 43, 212, 98, - 136, 43, 210, 123, 136, 43, 212, 3, 136, 43, 241, 130, 136, 43, 241, 243, - 136, 43, 214, 252, 136, 43, 216, 17, 136, 43, 243, 79, 136, 43, 224, 190, - 136, 43, 119, 238, 29, 136, 43, 119, 211, 242, 136, 18, 205, 85, 136, 18, - 102, 136, 18, 105, 136, 18, 142, 136, 18, 139, 136, 18, 168, 136, 18, - 184, 136, 18, 195, 136, 18, 193, 136, 18, 200, 136, 43, 232, 117, 232, - 38, 3, 248, 217, 232, 38, 3, 252, 73, 232, 38, 3, 208, 183, 232, 38, 1, - 62, 232, 38, 1, 253, 164, 232, 38, 1, 74, 232, 38, 1, 233, 102, 232, 38, - 1, 71, 232, 38, 1, 209, 162, 232, 38, 1, 75, 232, 38, 1, 252, 205, 232, - 38, 1, 76, 232, 38, 1, 251, 184, 232, 38, 1, 172, 232, 38, 1, 231, 167, - 232, 38, 1, 240, 244, 232, 38, 1, 240, 99, 232, 38, 1, 225, 77, 232, 38, - 1, 249, 1, 232, 38, 1, 248, 110, 232, 38, 1, 232, 200, 232, 38, 1, 232, - 170, 232, 38, 1, 223, 144, 232, 38, 1, 210, 208, 232, 38, 1, 210, 196, - 232, 38, 1, 246, 54, 232, 38, 1, 246, 43, 232, 38, 1, 246, 38, 232, 38, - 1, 218, 212, 232, 38, 1, 224, 103, 232, 38, 1, 212, 219, 232, 38, 1, 212, - 56, 232, 38, 1, 246, 145, 232, 38, 1, 245, 192, 232, 38, 1, 199, 232, 38, - 1, 179, 232, 38, 1, 221, 93, 232, 38, 1, 250, 183, 232, 38, 1, 250, 0, - 232, 38, 1, 185, 232, 38, 1, 190, 232, 38, 1, 219, 113, 232, 38, 1, 230, - 141, 232, 38, 1, 209, 70, 232, 38, 1, 216, 2, 232, 38, 1, 214, 96, 232, - 38, 1, 217, 199, 232, 38, 1, 155, 232, 38, 22, 3, 253, 164, 232, 38, 22, - 3, 74, 232, 38, 22, 3, 233, 102, 232, 38, 22, 3, 71, 232, 38, 22, 3, 209, - 162, 232, 38, 22, 3, 75, 232, 38, 22, 3, 252, 205, 232, 38, 22, 3, 76, - 232, 38, 22, 3, 251, 184, 232, 38, 3, 208, 188, 232, 38, 3, 223, 184, - 232, 38, 253, 29, 53, 232, 38, 243, 10, 53, 232, 38, 43, 53, 232, 38, - 217, 77, 83, 232, 38, 50, 217, 77, 83, 232, 38, 246, 100, 232, 38, 50, - 246, 100, 214, 170, 214, 178, 1, 217, 182, 214, 170, 214, 178, 1, 212, - 194, 214, 170, 214, 178, 1, 250, 158, 214, 170, 214, 178, 1, 248, 246, - 214, 170, 214, 178, 1, 246, 126, 214, 170, 214, 178, 1, 240, 229, 214, - 170, 214, 178, 1, 227, 247, 214, 170, 214, 178, 1, 225, 74, 214, 170, - 214, 178, 1, 230, 117, 214, 170, 214, 178, 1, 225, 219, 214, 170, 214, - 178, 1, 209, 66, 214, 170, 214, 178, 1, 222, 34, 214, 170, 214, 178, 1, - 206, 90, 214, 170, 214, 178, 1, 219, 92, 214, 170, 214, 178, 1, 239, 132, - 214, 170, 214, 178, 1, 232, 43, 214, 170, 214, 178, 1, 232, 194, 214, - 170, 214, 178, 1, 223, 141, 214, 170, 214, 178, 1, 252, 213, 214, 170, - 214, 178, 1, 243, 102, 214, 170, 214, 178, 1, 233, 103, 214, 170, 214, - 178, 1, 209, 253, 214, 170, 214, 178, 1, 222, 194, 214, 170, 214, 178, 1, - 243, 92, 214, 170, 214, 178, 1, 228, 4, 214, 170, 214, 178, 18, 205, 85, - 214, 170, 214, 178, 18, 102, 214, 170, 214, 178, 18, 105, 214, 170, 214, - 178, 18, 142, 214, 170, 214, 178, 18, 139, 214, 170, 214, 178, 18, 168, - 214, 170, 214, 178, 18, 184, 214, 170, 214, 178, 18, 195, 214, 170, 214, - 178, 18, 193, 214, 170, 214, 178, 18, 200, 248, 104, 3, 248, 217, 248, - 104, 3, 252, 73, 248, 104, 3, 208, 183, 248, 104, 1, 253, 164, 248, 104, - 1, 74, 248, 104, 1, 71, 248, 104, 1, 75, 248, 104, 1, 232, 63, 248, 104, - 1, 231, 166, 248, 104, 1, 240, 241, 248, 104, 1, 240, 98, 248, 104, 1, - 225, 76, 248, 104, 1, 249, 0, 248, 104, 1, 248, 109, 248, 104, 1, 232, - 199, 248, 104, 1, 232, 169, 248, 104, 1, 223, 143, 248, 104, 1, 210, 207, - 248, 104, 1, 210, 195, 248, 104, 1, 246, 53, 248, 104, 1, 246, 37, 248, - 104, 1, 224, 102, 248, 104, 1, 212, 215, 248, 104, 1, 212, 55, 248, 104, - 1, 246, 144, 248, 104, 1, 245, 191, 248, 104, 1, 225, 232, 248, 104, 1, - 222, 51, 248, 104, 1, 221, 92, 248, 104, 1, 250, 181, 248, 104, 1, 249, - 255, 248, 104, 1, 228, 18, 248, 104, 1, 205, 167, 248, 104, 1, 206, 109, - 248, 104, 1, 219, 109, 248, 104, 1, 230, 140, 248, 104, 1, 207, 95, 248, - 104, 1, 217, 196, 248, 104, 1, 239, 141, 248, 104, 22, 3, 62, 248, 104, - 22, 3, 74, 248, 104, 22, 3, 233, 102, 248, 104, 22, 3, 71, 248, 104, 22, - 3, 209, 162, 248, 104, 22, 3, 75, 248, 104, 22, 3, 252, 205, 248, 104, - 22, 3, 76, 248, 104, 22, 3, 251, 184, 248, 104, 22, 3, 222, 191, 248, - 104, 148, 83, 248, 104, 251, 185, 83, 248, 104, 208, 188, 248, 104, 228, - 16, 248, 104, 18, 205, 85, 248, 104, 18, 102, 248, 104, 18, 105, 248, - 104, 18, 142, 248, 104, 18, 139, 248, 104, 18, 168, 248, 104, 18, 184, - 248, 104, 18, 195, 248, 104, 18, 193, 248, 104, 18, 200, 248, 104, 217, - 77, 83, 248, 104, 246, 100, 248, 104, 50, 246, 100, 248, 104, 219, 196, - 83, 227, 245, 1, 62, 227, 245, 1, 74, 227, 245, 1, 71, 227, 245, 1, 75, - 227, 245, 1, 76, 227, 245, 1, 172, 227, 245, 1, 231, 167, 227, 245, 1, - 240, 244, 227, 245, 1, 240, 99, 227, 245, 1, 249, 1, 227, 245, 1, 248, - 110, 227, 245, 1, 232, 200, 227, 245, 1, 232, 170, 227, 245, 1, 223, 144, - 227, 245, 1, 210, 208, 227, 245, 1, 210, 196, 227, 245, 1, 246, 54, 227, - 245, 1, 246, 38, 227, 245, 1, 224, 103, 227, 245, 1, 212, 219, 227, 245, - 1, 212, 56, 227, 245, 1, 246, 145, 227, 245, 1, 245, 192, 227, 245, 1, - 199, 227, 245, 1, 179, 227, 245, 1, 221, 93, 227, 245, 1, 250, 183, 227, - 245, 1, 250, 0, 227, 245, 1, 185, 227, 245, 1, 219, 113, 227, 245, 1, - 230, 141, 227, 245, 1, 209, 70, 227, 245, 1, 217, 199, 227, 245, 1, 155, - 227, 245, 1, 218, 89, 227, 245, 3, 223, 184, 227, 245, 253, 29, 53, 227, - 245, 217, 77, 83, 227, 245, 28, 215, 123, 196, 3, 248, 217, 196, 3, 252, - 73, 196, 3, 208, 183, 196, 1, 62, 196, 1, 253, 164, 196, 1, 74, 196, 1, - 233, 102, 196, 1, 71, 196, 1, 209, 162, 196, 1, 115, 137, 196, 1, 115, - 218, 90, 196, 1, 115, 149, 196, 1, 115, 229, 173, 196, 1, 75, 196, 1, - 252, 205, 196, 1, 76, 196, 1, 251, 184, 196, 1, 172, 196, 1, 231, 167, - 196, 1, 240, 244, 196, 1, 240, 99, 196, 1, 225, 77, 196, 1, 249, 1, 196, - 1, 248, 110, 196, 1, 232, 200, 196, 1, 232, 170, 196, 1, 223, 144, 196, - 1, 210, 208, 196, 1, 210, 196, 196, 1, 246, 54, 196, 1, 246, 38, 196, 1, - 224, 103, 196, 1, 212, 219, 196, 1, 212, 56, 196, 1, 246, 145, 196, 1, - 245, 192, 196, 1, 199, 196, 1, 179, 196, 1, 221, 93, 196, 1, 250, 183, - 196, 1, 250, 0, 196, 1, 185, 196, 1, 190, 196, 1, 219, 113, 196, 1, 230, - 141, 196, 1, 229, 172, 196, 1, 209, 70, 196, 1, 216, 2, 196, 1, 214, 96, - 196, 1, 217, 199, 196, 1, 155, 196, 22, 3, 253, 164, 196, 22, 3, 74, 196, - 22, 3, 233, 102, 196, 22, 3, 71, 196, 22, 3, 209, 162, 196, 22, 3, 115, - 137, 196, 22, 3, 115, 218, 90, 196, 22, 3, 115, 149, 196, 22, 3, 115, - 229, 173, 196, 22, 3, 75, 196, 22, 3, 252, 205, 196, 22, 3, 76, 196, 22, - 3, 251, 184, 196, 3, 208, 188, 196, 3, 251, 167, 196, 3, 232, 156, 196, - 3, 209, 204, 196, 222, 173, 196, 246, 100, 196, 50, 246, 100, 196, 253, - 29, 53, 196, 216, 39, 196, 213, 120, 83, 196, 18, 205, 85, 196, 18, 102, - 196, 18, 105, 196, 18, 142, 196, 18, 139, 196, 18, 168, 196, 18, 184, - 196, 18, 195, 196, 18, 193, 196, 18, 200, 196, 243, 74, 132, 252, 19, 18, - 102, 132, 252, 19, 18, 105, 132, 252, 19, 18, 142, 132, 252, 19, 18, 139, - 132, 252, 19, 18, 168, 132, 252, 19, 18, 184, 132, 252, 19, 18, 195, 132, - 252, 19, 18, 193, 132, 252, 19, 18, 200, 132, 252, 19, 43, 212, 98, 132, - 252, 19, 43, 210, 123, 132, 252, 19, 43, 212, 3, 132, 252, 19, 43, 241, - 130, 132, 252, 19, 43, 241, 243, 132, 252, 19, 43, 214, 252, 132, 252, - 19, 43, 216, 17, 132, 252, 19, 43, 243, 79, 132, 252, 19, 43, 224, 190, - 132, 252, 19, 43, 119, 238, 29, 132, 252, 19, 43, 119, 211, 242, 231, - 137, 1, 62, 231, 137, 1, 253, 164, 231, 137, 1, 74, 231, 137, 1, 71, 231, - 137, 1, 75, 231, 137, 1, 252, 205, 231, 137, 1, 76, 231, 137, 1, 251, - 184, 231, 137, 1, 172, 231, 137, 1, 231, 167, 231, 137, 1, 240, 244, 231, - 137, 1, 240, 135, 231, 137, 1, 240, 99, 231, 137, 1, 225, 77, 231, 137, - 1, 249, 1, 231, 137, 1, 248, 110, 231, 137, 1, 232, 200, 231, 137, 1, - 232, 150, 231, 137, 1, 223, 144, 231, 137, 1, 210, 208, 231, 137, 1, 210, - 196, 231, 137, 1, 246, 54, 231, 137, 1, 246, 38, 231, 137, 1, 224, 103, - 231, 137, 1, 212, 219, 231, 137, 1, 212, 56, 231, 137, 1, 246, 145, 231, - 137, 1, 246, 44, 231, 137, 1, 245, 192, 231, 137, 1, 199, 231, 137, 1, - 179, 231, 137, 1, 221, 93, 231, 137, 1, 250, 183, 231, 137, 1, 250, 97, - 231, 137, 1, 250, 0, 231, 137, 1, 185, 231, 137, 1, 190, 231, 137, 1, - 219, 113, 231, 137, 1, 230, 141, 231, 137, 1, 209, 70, 231, 137, 1, 217, - 199, 231, 137, 1, 155, 231, 137, 1, 229, 172, 231, 137, 22, 3, 253, 164, - 231, 137, 22, 3, 74, 231, 137, 22, 3, 233, 102, 231, 137, 22, 3, 71, 231, - 137, 22, 3, 75, 231, 137, 22, 3, 252, 205, 231, 137, 22, 3, 76, 231, 137, - 22, 3, 251, 184, 231, 137, 3, 252, 73, 231, 137, 3, 208, 188, 231, 137, - 3, 223, 184, 231, 137, 3, 215, 249, 231, 137, 246, 100, 231, 137, 50, - 246, 100, 231, 137, 206, 232, 216, 39, 231, 137, 217, 77, 83, 231, 137, - 50, 217, 77, 83, 231, 137, 253, 29, 53, 231, 129, 1, 62, 231, 129, 1, - 253, 164, 231, 129, 1, 74, 231, 129, 1, 233, 102, 231, 129, 1, 71, 231, - 129, 1, 209, 162, 231, 129, 1, 75, 231, 129, 1, 252, 205, 231, 129, 1, - 76, 231, 129, 1, 251, 184, 231, 129, 1, 172, 231, 129, 1, 231, 167, 231, - 129, 1, 240, 244, 231, 129, 1, 240, 135, 231, 129, 1, 240, 99, 231, 129, - 1, 225, 77, 231, 129, 1, 249, 1, 231, 129, 1, 248, 110, 231, 129, 1, 232, - 200, 231, 129, 1, 232, 150, 231, 129, 1, 232, 170, 231, 129, 1, 223, 144, - 231, 129, 1, 210, 208, 231, 129, 1, 210, 196, 231, 129, 1, 246, 54, 231, - 129, 1, 246, 44, 231, 129, 1, 218, 89, 231, 129, 1, 246, 38, 231, 129, 1, - 224, 103, 231, 129, 1, 212, 219, 231, 129, 1, 212, 56, 231, 129, 1, 246, - 145, 231, 129, 1, 245, 192, 231, 129, 1, 199, 231, 129, 1, 179, 231, 129, - 1, 221, 93, 231, 129, 1, 250, 183, 231, 129, 1, 250, 97, 231, 129, 1, - 250, 0, 231, 129, 1, 185, 231, 129, 1, 190, 231, 129, 1, 219, 113, 231, - 129, 1, 230, 141, 231, 129, 1, 209, 70, 231, 129, 1, 216, 2, 231, 129, 1, - 217, 199, 231, 129, 1, 155, 231, 129, 3, 252, 73, 231, 129, 22, 3, 253, - 164, 231, 129, 22, 3, 74, 231, 129, 22, 3, 233, 102, 231, 129, 22, 3, 71, - 231, 129, 22, 3, 209, 162, 231, 129, 22, 3, 75, 231, 129, 22, 3, 252, - 205, 231, 129, 22, 3, 76, 231, 129, 22, 3, 251, 184, 231, 129, 3, 223, - 184, 231, 129, 3, 208, 188, 231, 129, 18, 205, 85, 231, 129, 18, 102, - 231, 129, 18, 105, 231, 129, 18, 142, 231, 129, 18, 139, 231, 129, 18, - 168, 231, 129, 18, 184, 231, 129, 18, 195, 231, 129, 18, 193, 231, 129, - 18, 200, 204, 204, 3, 248, 217, 204, 204, 3, 252, 73, 204, 204, 3, 208, - 183, 204, 204, 1, 62, 204, 204, 1, 253, 164, 204, 204, 1, 74, 204, 204, - 1, 233, 102, 204, 204, 1, 71, 204, 204, 1, 209, 162, 204, 204, 1, 115, - 137, 204, 204, 1, 115, 149, 204, 204, 1, 243, 104, 204, 204, 1, 252, 205, - 204, 204, 1, 222, 152, 204, 204, 1, 251, 184, 204, 204, 1, 172, 204, 204, - 1, 231, 167, 204, 204, 1, 240, 244, 204, 204, 1, 240, 99, 204, 204, 1, - 225, 77, 204, 204, 1, 249, 1, 204, 204, 1, 248, 110, 204, 204, 1, 232, - 200, 204, 204, 1, 232, 170, 204, 204, 1, 223, 144, 204, 204, 1, 210, 208, - 204, 204, 1, 210, 196, 204, 204, 1, 246, 54, 204, 204, 1, 246, 38, 204, - 204, 1, 224, 103, 204, 204, 1, 212, 219, 204, 204, 1, 212, 56, 204, 204, - 1, 246, 145, 204, 204, 1, 245, 192, 204, 204, 1, 199, 204, 204, 1, 179, - 204, 204, 1, 221, 93, 204, 204, 1, 250, 183, 204, 204, 1, 250, 0, 204, - 204, 1, 185, 204, 204, 1, 190, 204, 204, 1, 219, 113, 204, 204, 1, 230, - 141, 204, 204, 1, 229, 172, 204, 204, 1, 209, 70, 204, 204, 1, 216, 2, - 204, 204, 1, 214, 96, 204, 204, 1, 217, 199, 204, 204, 1, 155, 204, 204, - 3, 223, 184, 204, 204, 3, 251, 167, 204, 204, 22, 3, 253, 164, 204, 204, - 22, 3, 74, 204, 204, 22, 3, 233, 102, 204, 204, 22, 3, 71, 204, 204, 22, - 3, 209, 162, 204, 204, 22, 3, 115, 137, 204, 204, 22, 3, 115, 218, 90, - 204, 204, 22, 3, 243, 104, 204, 204, 22, 3, 252, 205, 204, 204, 22, 3, - 222, 152, 204, 204, 22, 3, 251, 184, 204, 204, 3, 208, 188, 204, 204, - 251, 185, 230, 20, 83, 204, 204, 3, 220, 216, 204, 204, 1, 209, 36, 252, - 73, 204, 204, 1, 209, 36, 50, 252, 73, 204, 204, 1, 115, 218, 90, 204, - 204, 1, 115, 229, 173, 204, 204, 22, 3, 115, 149, 204, 204, 22, 3, 115, - 229, 173, 36, 204, 204, 18, 205, 85, 36, 204, 204, 18, 102, 36, 204, 204, - 18, 105, 36, 204, 204, 18, 142, 36, 204, 204, 18, 139, 36, 204, 204, 18, - 168, 36, 204, 204, 18, 184, 36, 204, 204, 1, 62, 36, 204, 204, 1, 172, - 36, 204, 204, 1, 199, 36, 204, 204, 1, 208, 214, 36, 204, 204, 1, 179, - 211, 160, 252, 102, 211, 160, 1, 62, 211, 160, 1, 253, 164, 211, 160, 1, - 74, 211, 160, 1, 233, 102, 211, 160, 1, 71, 211, 160, 1, 209, 162, 211, - 160, 1, 115, 137, 211, 160, 1, 115, 218, 90, 211, 160, 1, 115, 149, 211, - 160, 1, 115, 229, 173, 211, 160, 1, 75, 211, 160, 1, 252, 205, 211, 160, - 1, 76, 211, 160, 1, 251, 184, 211, 160, 1, 172, 211, 160, 1, 231, 167, - 211, 160, 1, 240, 244, 211, 160, 1, 240, 99, 211, 160, 1, 225, 77, 211, - 160, 1, 249, 1, 211, 160, 1, 248, 110, 211, 160, 1, 232, 200, 211, 160, - 1, 232, 170, 211, 160, 1, 223, 144, 211, 160, 1, 210, 208, 211, 160, 1, - 210, 196, 211, 160, 1, 246, 54, 211, 160, 1, 246, 38, 211, 160, 1, 224, - 103, 211, 160, 1, 212, 219, 211, 160, 1, 212, 56, 211, 160, 1, 246, 145, - 211, 160, 1, 245, 192, 211, 160, 1, 199, 211, 160, 1, 179, 211, 160, 1, - 221, 93, 211, 160, 1, 250, 183, 211, 160, 1, 250, 0, 211, 160, 1, 185, - 211, 160, 1, 190, 211, 160, 1, 219, 113, 211, 160, 1, 230, 141, 211, 160, - 1, 209, 70, 211, 160, 1, 216, 2, 211, 160, 1, 214, 96, 211, 160, 1, 217, - 199, 211, 160, 1, 155, 211, 160, 22, 3, 253, 164, 211, 160, 22, 3, 74, - 211, 160, 22, 3, 233, 102, 211, 160, 22, 3, 71, 211, 160, 22, 3, 209, - 162, 211, 160, 22, 3, 115, 137, 211, 160, 22, 3, 115, 218, 90, 211, 160, - 22, 3, 115, 149, 211, 160, 22, 3, 115, 229, 173, 211, 160, 22, 3, 75, - 211, 160, 22, 3, 215, 144, 75, 211, 160, 22, 3, 252, 205, 211, 160, 22, - 3, 76, 211, 160, 22, 3, 215, 144, 76, 211, 160, 22, 3, 251, 184, 211, - 160, 3, 248, 217, 211, 160, 3, 252, 73, 211, 160, 3, 208, 183, 211, 160, - 3, 208, 188, 211, 160, 3, 223, 184, 211, 160, 3, 251, 167, 211, 160, 239, - 175, 211, 160, 253, 29, 53, 211, 160, 222, 173, 211, 160, 18, 205, 85, - 211, 160, 18, 102, 211, 160, 18, 105, 211, 160, 18, 142, 211, 160, 18, - 139, 211, 160, 18, 168, 211, 160, 18, 184, 211, 160, 18, 195, 211, 160, - 18, 193, 211, 160, 18, 200, 215, 75, 1, 62, 215, 75, 1, 253, 164, 215, - 75, 1, 74, 215, 75, 1, 233, 102, 215, 75, 1, 71, 215, 75, 1, 209, 162, - 215, 75, 1, 115, 137, 215, 75, 1, 115, 218, 90, 215, 75, 1, 115, 149, - 215, 75, 1, 115, 229, 173, 215, 75, 1, 75, 215, 75, 1, 252, 205, 215, 75, - 1, 76, 215, 75, 1, 251, 184, 215, 75, 1, 172, 215, 75, 1, 231, 167, 215, - 75, 1, 240, 244, 215, 75, 1, 240, 99, 215, 75, 1, 225, 77, 215, 75, 1, - 249, 1, 215, 75, 1, 248, 110, 215, 75, 1, 232, 200, 215, 75, 1, 232, 170, - 215, 75, 1, 223, 144, 215, 75, 1, 210, 208, 215, 75, 1, 210, 196, 215, - 75, 1, 246, 54, 215, 75, 1, 246, 38, 215, 75, 1, 224, 103, 215, 75, 1, - 212, 219, 215, 75, 1, 212, 56, 215, 75, 1, 246, 145, 215, 75, 1, 245, - 192, 215, 75, 1, 199, 215, 75, 1, 179, 215, 75, 1, 221, 93, 215, 75, 1, - 250, 183, 215, 75, 1, 250, 0, 215, 75, 1, 185, 215, 75, 1, 190, 215, 75, - 1, 219, 113, 215, 75, 1, 230, 141, 215, 75, 1, 209, 70, 215, 75, 1, 216, - 2, 215, 75, 1, 214, 96, 215, 75, 1, 217, 199, 215, 75, 1, 155, 215, 75, - 22, 3, 253, 164, 215, 75, 22, 3, 74, 215, 75, 22, 3, 233, 102, 215, 75, - 22, 3, 71, 215, 75, 22, 3, 209, 162, 215, 75, 22, 3, 115, 137, 215, 75, - 22, 3, 115, 218, 90, 215, 75, 22, 3, 75, 215, 75, 22, 3, 252, 205, 215, - 75, 22, 3, 76, 215, 75, 22, 3, 251, 184, 215, 75, 3, 248, 217, 215, 75, - 3, 252, 73, 215, 75, 3, 208, 183, 215, 75, 3, 208, 188, 215, 75, 3, 223, - 184, 215, 75, 3, 215, 74, 215, 75, 246, 100, 215, 75, 50, 246, 100, 215, - 75, 216, 40, 245, 23, 215, 75, 216, 40, 134, 215, 75, 218, 249, 227, 191, - 215, 75, 218, 249, 227, 190, 215, 75, 218, 249, 227, 189, 215, 75, 243, - 34, 73, 212, 61, 83, 226, 173, 1, 62, 226, 173, 1, 253, 164, 226, 173, 1, - 74, 226, 173, 1, 233, 102, 226, 173, 1, 71, 226, 173, 1, 209, 162, 226, - 173, 1, 115, 137, 226, 173, 1, 115, 218, 90, 226, 173, 1, 115, 149, 226, - 173, 1, 115, 229, 173, 226, 173, 1, 75, 226, 173, 1, 252, 205, 226, 173, - 1, 76, 226, 173, 1, 251, 184, 226, 173, 1, 172, 226, 173, 1, 231, 167, - 226, 173, 1, 240, 244, 226, 173, 1, 240, 99, 226, 173, 1, 225, 77, 226, - 173, 1, 249, 1, 226, 173, 1, 248, 110, 226, 173, 1, 232, 200, 226, 173, - 1, 232, 170, 226, 173, 1, 223, 144, 226, 173, 1, 210, 208, 226, 173, 1, - 210, 196, 226, 173, 1, 246, 54, 226, 173, 1, 246, 38, 226, 173, 1, 224, - 103, 226, 173, 1, 212, 219, 226, 173, 1, 212, 56, 226, 173, 1, 246, 145, - 226, 173, 1, 245, 192, 226, 173, 1, 199, 226, 173, 1, 179, 226, 173, 1, - 221, 93, 226, 173, 1, 250, 183, 226, 173, 1, 250, 0, 226, 173, 1, 185, - 226, 173, 1, 190, 226, 173, 1, 219, 113, 226, 173, 1, 230, 141, 226, 173, - 1, 209, 70, 226, 173, 1, 216, 2, 226, 173, 1, 214, 96, 226, 173, 1, 217, - 199, 226, 173, 1, 155, 226, 173, 1, 229, 172, 226, 173, 22, 3, 253, 164, - 226, 173, 22, 3, 74, 226, 173, 22, 3, 233, 102, 226, 173, 22, 3, 71, 226, - 173, 22, 3, 209, 162, 226, 173, 22, 3, 115, 137, 226, 173, 22, 3, 115, - 218, 90, 226, 173, 22, 3, 115, 149, 226, 173, 22, 3, 115, 229, 173, 226, - 173, 22, 3, 75, 226, 173, 22, 3, 252, 205, 226, 173, 22, 3, 76, 226, 173, - 22, 3, 251, 184, 226, 173, 3, 252, 73, 226, 173, 3, 208, 183, 226, 173, - 3, 208, 188, 226, 173, 3, 252, 16, 226, 173, 246, 100, 226, 173, 50, 246, - 100, 226, 173, 253, 29, 53, 226, 173, 3, 238, 18, 226, 173, 18, 205, 85, - 226, 173, 18, 102, 226, 173, 18, 105, 226, 173, 18, 142, 226, 173, 18, - 139, 226, 173, 18, 168, 226, 173, 18, 184, 226, 173, 18, 195, 226, 173, - 18, 193, 226, 173, 18, 200, 212, 183, 1, 62, 212, 183, 1, 253, 164, 212, - 183, 1, 74, 212, 183, 1, 233, 102, 212, 183, 1, 71, 212, 183, 1, 209, - 162, 212, 183, 1, 75, 212, 183, 1, 252, 205, 212, 183, 1, 76, 212, 183, - 1, 251, 184, 212, 183, 1, 172, 212, 183, 1, 231, 167, 212, 183, 1, 240, - 244, 212, 183, 1, 240, 99, 212, 183, 1, 225, 77, 212, 183, 1, 249, 1, - 212, 183, 1, 248, 110, 212, 183, 1, 232, 200, 212, 183, 1, 232, 170, 212, - 183, 1, 223, 144, 212, 183, 1, 210, 208, 212, 183, 1, 210, 196, 212, 183, - 1, 246, 54, 212, 183, 1, 246, 38, 212, 183, 1, 224, 103, 212, 183, 1, - 212, 219, 212, 183, 1, 212, 56, 212, 183, 1, 246, 145, 212, 183, 1, 245, - 192, 212, 183, 1, 199, 212, 183, 1, 179, 212, 183, 1, 221, 93, 212, 183, - 1, 250, 183, 212, 183, 1, 250, 0, 212, 183, 1, 185, 212, 183, 1, 190, - 212, 183, 1, 219, 113, 212, 183, 1, 230, 141, 212, 183, 1, 209, 70, 212, - 183, 1, 216, 2, 212, 183, 1, 217, 199, 212, 183, 1, 155, 212, 183, 1, - 218, 89, 212, 183, 3, 252, 73, 212, 183, 3, 208, 183, 212, 183, 22, 3, - 253, 164, 212, 183, 22, 3, 74, 212, 183, 22, 3, 233, 102, 212, 183, 22, - 3, 71, 212, 183, 22, 3, 209, 162, 212, 183, 22, 3, 75, 212, 183, 22, 3, - 252, 205, 212, 183, 22, 3, 76, 212, 183, 22, 3, 251, 184, 212, 183, 3, - 208, 188, 212, 183, 3, 223, 184, 212, 183, 18, 205, 85, 212, 183, 18, - 102, 212, 183, 18, 105, 212, 183, 18, 142, 212, 183, 18, 139, 212, 183, - 18, 168, 212, 183, 18, 184, 212, 183, 18, 195, 212, 183, 18, 193, 212, - 183, 18, 200, 202, 197, 6, 1, 225, 76, 202, 197, 6, 1, 62, 202, 197, 6, - 1, 207, 20, 202, 197, 6, 1, 205, 213, 202, 197, 6, 1, 190, 202, 197, 6, - 1, 205, 247, 202, 197, 6, 1, 233, 102, 202, 197, 6, 1, 209, 162, 202, - 197, 6, 1, 75, 202, 197, 6, 1, 76, 202, 197, 6, 1, 252, 114, 202, 197, 6, - 1, 240, 244, 202, 197, 6, 1, 231, 53, 202, 197, 6, 1, 243, 7, 202, 197, - 6, 1, 205, 197, 202, 197, 6, 1, 210, 10, 202, 197, 6, 1, 243, 25, 202, - 197, 6, 1, 222, 209, 202, 197, 6, 1, 210, 203, 202, 197, 6, 1, 223, 170, - 202, 197, 6, 1, 246, 145, 202, 197, 6, 1, 251, 199, 202, 197, 6, 1, 252, - 136, 202, 197, 6, 1, 249, 101, 202, 197, 6, 1, 220, 82, 202, 197, 6, 1, - 238, 241, 202, 197, 6, 1, 238, 138, 202, 197, 6, 1, 238, 67, 202, 197, 6, - 1, 239, 95, 202, 197, 6, 1, 214, 48, 202, 197, 6, 1, 215, 61, 202, 197, - 6, 1, 208, 174, 202, 197, 5, 1, 225, 76, 202, 197, 5, 1, 62, 202, 197, 5, - 1, 207, 20, 202, 197, 5, 1, 205, 213, 202, 197, 5, 1, 190, 202, 197, 5, - 1, 205, 247, 202, 197, 5, 1, 233, 102, 202, 197, 5, 1, 209, 162, 202, - 197, 5, 1, 75, 202, 197, 5, 1, 76, 202, 197, 5, 1, 252, 114, 202, 197, 5, - 1, 240, 244, 202, 197, 5, 1, 231, 53, 202, 197, 5, 1, 243, 7, 202, 197, - 5, 1, 205, 197, 202, 197, 5, 1, 210, 10, 202, 197, 5, 1, 243, 25, 202, - 197, 5, 1, 222, 209, 202, 197, 5, 1, 210, 203, 202, 197, 5, 1, 223, 170, - 202, 197, 5, 1, 246, 145, 202, 197, 5, 1, 251, 199, 202, 197, 5, 1, 252, - 136, 202, 197, 5, 1, 249, 101, 202, 197, 5, 1, 220, 82, 202, 197, 5, 1, - 238, 241, 202, 197, 5, 1, 238, 138, 202, 197, 5, 1, 238, 67, 202, 197, 5, - 1, 239, 95, 202, 197, 5, 1, 214, 48, 202, 197, 5, 1, 215, 61, 202, 197, - 5, 1, 208, 174, 202, 197, 18, 205, 85, 202, 197, 18, 102, 202, 197, 18, - 105, 202, 197, 18, 142, 202, 197, 18, 139, 202, 197, 18, 168, 202, 197, - 18, 184, 202, 197, 18, 195, 202, 197, 18, 193, 202, 197, 18, 200, 202, - 197, 43, 212, 98, 202, 197, 43, 210, 123, 202, 197, 43, 212, 3, 202, 197, - 43, 241, 130, 202, 197, 43, 241, 243, 202, 197, 43, 214, 252, 202, 197, - 43, 216, 17, 202, 197, 43, 243, 79, 202, 197, 43, 224, 190, 202, 197, - 222, 173, 221, 189, 247, 238, 239, 81, 1, 179, 221, 189, 247, 238, 239, - 81, 1, 172, 221, 189, 247, 238, 239, 81, 1, 230, 141, 221, 189, 247, 238, - 239, 81, 1, 185, 221, 189, 247, 238, 239, 81, 1, 246, 145, 221, 189, 247, - 238, 239, 81, 1, 205, 116, 221, 189, 247, 238, 239, 81, 1, 209, 70, 221, - 189, 247, 238, 239, 81, 1, 225, 77, 221, 189, 247, 238, 239, 81, 1, 155, - 221, 189, 247, 238, 239, 81, 1, 240, 244, 221, 189, 247, 238, 239, 81, 1, - 231, 167, 221, 189, 247, 238, 239, 81, 1, 217, 199, 221, 189, 247, 238, - 239, 81, 1, 250, 183, 221, 189, 247, 238, 239, 81, 1, 249, 1, 221, 189, - 247, 238, 239, 81, 1, 212, 219, 221, 189, 247, 238, 239, 81, 1, 212, 56, - 221, 189, 247, 238, 239, 81, 1, 199, 221, 189, 247, 238, 239, 81, 1, 221, - 93, 221, 189, 247, 238, 239, 81, 1, 219, 113, 221, 189, 247, 238, 239, - 81, 1, 242, 73, 221, 189, 247, 238, 239, 81, 1, 248, 110, 221, 189, 247, - 238, 239, 81, 1, 62, 221, 189, 247, 238, 239, 81, 1, 75, 221, 189, 247, - 238, 239, 81, 1, 74, 221, 189, 247, 238, 239, 81, 1, 76, 221, 189, 247, - 238, 239, 81, 1, 71, 221, 189, 247, 238, 239, 81, 1, 210, 18, 221, 189, - 247, 238, 239, 81, 1, 237, 190, 221, 189, 247, 238, 239, 81, 1, 42, 222, - 67, 221, 189, 247, 238, 239, 81, 1, 42, 232, 76, 221, 189, 247, 238, 239, - 81, 1, 42, 213, 10, 221, 189, 247, 238, 239, 81, 1, 42, 229, 28, 221, - 189, 247, 238, 239, 81, 1, 42, 226, 33, 221, 189, 247, 238, 239, 81, 1, - 42, 149, 221, 189, 247, 238, 239, 81, 1, 42, 207, 129, 221, 189, 247, - 238, 239, 81, 1, 42, 225, 79, 221, 189, 247, 238, 239, 81, 1, 42, 206, - 123, 221, 189, 247, 238, 239, 81, 218, 142, 135, 229, 125, 221, 189, 247, - 238, 239, 81, 218, 142, 211, 118, 221, 189, 247, 238, 239, 81, 217, 147, - 240, 25, 213, 251, 221, 189, 247, 238, 239, 81, 218, 142, 135, 152, 241, - 230, 221, 189, 247, 238, 239, 81, 218, 142, 135, 241, 230, 221, 189, 247, - 238, 239, 81, 217, 147, 240, 25, 213, 252, 241, 230, 221, 189, 247, 238, - 239, 81, 217, 147, 135, 229, 125, 221, 189, 247, 238, 239, 81, 217, 147, - 211, 118, 221, 189, 247, 238, 239, 81, 217, 147, 135, 152, 241, 230, 221, - 189, 247, 238, 239, 81, 217, 147, 135, 241, 230, 221, 189, 247, 238, 239, - 81, 226, 248, 211, 118, 221, 189, 247, 238, 239, 81, 240, 25, 213, 252, - 209, 52, 221, 189, 247, 238, 239, 81, 226, 248, 135, 152, 241, 230, 221, - 189, 247, 238, 239, 81, 226, 248, 135, 241, 230, 221, 189, 247, 238, 239, - 81, 229, 95, 135, 229, 125, 221, 189, 247, 238, 239, 81, 229, 95, 211, - 118, 221, 189, 247, 238, 239, 81, 240, 25, 213, 251, 221, 189, 247, 238, - 239, 81, 229, 95, 135, 152, 241, 230, 221, 189, 247, 238, 239, 81, 229, - 95, 135, 241, 230, 221, 189, 247, 238, 239, 81, 240, 25, 213, 252, 241, - 230, 14, 3, 62, 14, 3, 32, 29, 62, 14, 3, 32, 29, 250, 167, 14, 3, 32, - 29, 240, 213, 212, 89, 14, 3, 32, 29, 155, 14, 3, 32, 29, 233, 104, 14, - 3, 32, 29, 230, 121, 239, 192, 14, 3, 32, 29, 226, 69, 14, 3, 32, 29, - 217, 185, 14, 3, 254, 166, 14, 3, 253, 115, 14, 3, 253, 116, 29, 251, - 223, 14, 3, 253, 116, 29, 243, 226, 239, 192, 14, 3, 253, 116, 29, 240, - 226, 14, 3, 253, 116, 29, 240, 213, 212, 89, 14, 3, 253, 116, 29, 155, - 14, 3, 253, 116, 29, 233, 105, 239, 192, 14, 3, 253, 116, 29, 233, 78, - 14, 3, 253, 116, 29, 230, 122, 14, 3, 253, 116, 29, 215, 199, 14, 3, 253, - 116, 29, 106, 101, 106, 101, 71, 14, 3, 253, 116, 239, 192, 14, 3, 253, - 32, 14, 3, 253, 33, 29, 250, 150, 14, 3, 253, 33, 29, 240, 213, 212, 89, - 14, 3, 253, 33, 29, 227, 120, 101, 243, 41, 14, 3, 253, 33, 29, 216, 0, - 14, 3, 253, 33, 29, 212, 186, 14, 3, 253, 5, 14, 3, 252, 189, 14, 3, 252, - 190, 29, 242, 230, 14, 3, 252, 190, 29, 215, 161, 101, 240, 35, 14, 3, - 252, 181, 14, 3, 252, 182, 29, 252, 181, 14, 3, 252, 182, 29, 245, 123, - 14, 3, 252, 182, 29, 240, 35, 14, 3, 252, 182, 29, 155, 14, 3, 252, 182, - 29, 232, 50, 14, 3, 252, 182, 29, 231, 123, 14, 3, 252, 182, 29, 215, - 214, 14, 3, 252, 182, 29, 209, 170, 14, 3, 252, 178, 14, 3, 252, 170, 14, - 3, 252, 132, 14, 3, 252, 133, 29, 215, 214, 14, 3, 252, 122, 14, 3, 252, - 123, 131, 252, 122, 14, 3, 252, 123, 129, 211, 175, 14, 3, 252, 123, 101, - 225, 223, 222, 129, 252, 123, 101, 225, 222, 14, 3, 252, 123, 101, 225, - 223, 214, 106, 14, 3, 252, 93, 14, 3, 252, 63, 14, 3, 252, 31, 14, 3, - 252, 32, 29, 230, 210, 14, 3, 252, 3, 14, 3, 251, 230, 14, 3, 251, 225, - 14, 3, 251, 226, 205, 36, 212, 89, 14, 3, 251, 226, 232, 54, 212, 89, 14, - 3, 251, 226, 131, 251, 226, 210, 165, 131, 210, 165, 210, 165, 131, 210, - 165, 221, 236, 14, 3, 251, 226, 131, 251, 226, 131, 251, 225, 14, 3, 251, - 226, 131, 251, 226, 131, 251, 226, 247, 54, 251, 226, 131, 251, 226, 131, - 251, 225, 14, 3, 251, 223, 14, 3, 251, 219, 14, 3, 250, 183, 14, 3, 250, - 167, 14, 3, 250, 162, 14, 3, 250, 157, 14, 3, 250, 151, 14, 3, 250, 152, - 131, 250, 151, 14, 3, 250, 150, 14, 3, 134, 14, 3, 250, 128, 14, 3, 249, - 244, 14, 3, 249, 245, 29, 62, 14, 3, 249, 245, 29, 240, 204, 14, 3, 249, - 245, 29, 233, 105, 239, 192, 14, 3, 249, 101, 14, 3, 249, 102, 131, 249, - 102, 253, 115, 14, 3, 249, 102, 131, 249, 102, 209, 234, 14, 3, 249, 102, - 247, 54, 249, 101, 14, 3, 249, 79, 14, 3, 249, 80, 131, 249, 79, 14, 3, - 249, 68, 14, 3, 249, 67, 14, 3, 246, 145, 14, 3, 246, 136, 14, 3, 246, - 137, 231, 94, 29, 32, 101, 227, 178, 14, 3, 246, 137, 231, 94, 29, 252, - 132, 14, 3, 246, 137, 231, 94, 29, 250, 150, 14, 3, 246, 137, 231, 94, - 29, 249, 244, 14, 3, 246, 137, 231, 94, 29, 240, 244, 14, 3, 246, 137, - 231, 94, 29, 240, 245, 101, 227, 178, 14, 3, 246, 137, 231, 94, 29, 240, - 61, 14, 3, 246, 137, 231, 94, 29, 240, 43, 14, 3, 246, 137, 231, 94, 29, - 239, 202, 14, 3, 246, 137, 231, 94, 29, 155, 14, 3, 246, 137, 231, 94, - 29, 232, 243, 14, 3, 246, 137, 231, 94, 29, 232, 244, 101, 229, 81, 14, - 3, 246, 137, 231, 94, 29, 232, 35, 14, 3, 246, 137, 231, 94, 29, 230, - 141, 14, 3, 246, 137, 231, 94, 29, 229, 81, 14, 3, 246, 137, 231, 94, 29, - 229, 82, 101, 227, 177, 14, 3, 246, 137, 231, 94, 29, 229, 65, 14, 3, - 246, 137, 231, 94, 29, 225, 110, 14, 3, 246, 137, 231, 94, 29, 221, 237, - 101, 221, 236, 14, 3, 246, 137, 231, 94, 29, 215, 80, 14, 3, 246, 137, - 231, 94, 29, 212, 186, 14, 3, 246, 137, 231, 94, 29, 210, 20, 101, 240, - 43, 14, 3, 246, 137, 231, 94, 29, 209, 170, 14, 3, 246, 109, 14, 3, 246, - 88, 14, 3, 246, 87, 14, 3, 246, 86, 14, 3, 245, 168, 14, 3, 245, 150, 14, - 3, 245, 124, 14, 3, 245, 125, 29, 215, 214, 14, 3, 245, 123, 14, 3, 245, - 113, 14, 3, 245, 114, 231, 255, 106, 239, 193, 245, 94, 14, 3, 245, 94, - 14, 3, 243, 237, 14, 3, 243, 238, 131, 243, 237, 14, 3, 243, 238, 239, - 192, 14, 3, 243, 238, 215, 196, 14, 3, 243, 235, 14, 3, 243, 236, 29, - 242, 212, 14, 3, 243, 234, 14, 3, 243, 233, 14, 3, 243, 232, 14, 3, 243, - 231, 14, 3, 243, 227, 14, 3, 243, 225, 14, 3, 243, 226, 239, 192, 14, 3, - 243, 226, 239, 193, 239, 192, 14, 3, 243, 224, 14, 3, 243, 217, 14, 3, - 75, 14, 3, 174, 29, 221, 236, 14, 3, 174, 131, 174, 223, 174, 131, 223, - 173, 14, 3, 243, 131, 14, 3, 243, 132, 29, 32, 101, 239, 144, 101, 246, - 145, 14, 3, 243, 132, 29, 240, 204, 14, 3, 243, 132, 29, 226, 254, 14, 3, - 243, 132, 29, 217, 172, 14, 3, 243, 132, 29, 215, 214, 14, 3, 243, 132, - 29, 71, 14, 3, 243, 106, 14, 3, 243, 95, 14, 3, 243, 68, 14, 3, 243, 41, - 14, 3, 243, 42, 29, 240, 212, 14, 3, 243, 42, 29, 240, 213, 212, 89, 14, - 3, 243, 42, 29, 227, 119, 14, 3, 243, 42, 247, 54, 243, 41, 14, 3, 243, - 42, 222, 129, 243, 41, 14, 3, 243, 42, 214, 106, 14, 3, 242, 232, 14, 3, - 242, 230, 14, 3, 242, 212, 14, 3, 242, 143, 14, 3, 242, 144, 29, 62, 14, - 3, 242, 144, 29, 32, 101, 230, 108, 14, 3, 242, 144, 29, 32, 101, 230, - 109, 29, 230, 108, 14, 3, 242, 144, 29, 252, 122, 14, 3, 242, 144, 29, - 250, 167, 14, 3, 242, 144, 29, 243, 226, 239, 192, 14, 3, 242, 144, 29, - 243, 226, 239, 193, 239, 192, 14, 3, 242, 144, 29, 155, 14, 3, 242, 144, - 29, 239, 144, 239, 192, 14, 3, 242, 144, 29, 233, 105, 239, 192, 14, 3, - 242, 144, 29, 231, 254, 14, 3, 242, 144, 29, 231, 255, 214, 106, 14, 3, - 242, 144, 29, 230, 234, 14, 3, 242, 144, 29, 230, 141, 14, 3, 242, 144, - 29, 230, 109, 29, 230, 108, 14, 3, 242, 144, 29, 229, 235, 14, 3, 242, - 144, 29, 229, 81, 14, 3, 242, 144, 29, 210, 19, 14, 3, 242, 144, 29, 210, - 8, 14, 3, 240, 244, 14, 3, 240, 245, 239, 192, 14, 3, 240, 242, 14, 3, - 240, 243, 29, 32, 101, 246, 146, 101, 155, 14, 3, 240, 243, 29, 32, 101, - 155, 14, 3, 240, 243, 29, 32, 101, 233, 104, 14, 3, 240, 243, 29, 253, - 33, 212, 90, 101, 212, 207, 14, 3, 240, 243, 29, 252, 122, 14, 3, 240, - 243, 29, 251, 225, 14, 3, 240, 243, 29, 251, 224, 101, 240, 226, 14, 3, - 240, 243, 29, 250, 167, 14, 3, 240, 243, 29, 250, 129, 101, 219, 113, 14, - 3, 240, 243, 29, 249, 68, 14, 3, 240, 243, 29, 249, 69, 101, 219, 113, - 14, 3, 240, 243, 29, 246, 145, 14, 3, 240, 243, 29, 245, 168, 14, 3, 240, - 243, 29, 245, 125, 29, 215, 214, 14, 3, 240, 243, 29, 243, 235, 14, 3, - 240, 243, 29, 243, 68, 14, 3, 240, 243, 29, 243, 69, 101, 230, 141, 14, - 3, 240, 243, 29, 243, 41, 14, 3, 240, 243, 29, 243, 42, 29, 240, 213, - 212, 89, 14, 3, 240, 243, 29, 240, 213, 212, 89, 14, 3, 240, 243, 29, - 240, 204, 14, 3, 240, 243, 29, 240, 61, 14, 3, 240, 243, 29, 240, 59, 14, - 3, 240, 243, 29, 240, 60, 101, 62, 14, 3, 240, 243, 29, 240, 44, 101, - 213, 203, 14, 3, 240, 243, 29, 239, 144, 101, 229, 82, 101, 242, 212, 14, - 3, 240, 243, 29, 239, 124, 14, 3, 240, 243, 29, 239, 125, 101, 230, 141, - 14, 3, 240, 243, 29, 239, 12, 101, 229, 235, 14, 3, 240, 243, 29, 238, - 37, 14, 3, 240, 243, 29, 233, 105, 239, 192, 14, 3, 240, 243, 29, 232, - 229, 101, 238, 43, 101, 251, 225, 14, 3, 240, 243, 29, 232, 35, 14, 3, - 240, 243, 29, 231, 254, 14, 3, 240, 243, 29, 231, 117, 14, 3, 240, 243, - 29, 231, 118, 101, 230, 108, 14, 3, 240, 243, 29, 230, 235, 101, 252, - 122, 14, 3, 240, 243, 29, 230, 141, 14, 3, 240, 243, 29, 227, 120, 101, - 243, 41, 14, 3, 240, 243, 29, 226, 254, 14, 3, 240, 243, 29, 223, 173, - 14, 3, 240, 243, 29, 223, 174, 131, 223, 173, 14, 3, 240, 243, 29, 179, - 14, 3, 240, 243, 29, 217, 172, 14, 3, 240, 243, 29, 217, 138, 14, 3, 240, - 243, 29, 215, 214, 14, 3, 240, 243, 29, 215, 215, 101, 210, 149, 14, 3, - 240, 243, 29, 215, 181, 14, 3, 240, 243, 29, 213, 160, 14, 3, 240, 243, - 29, 212, 186, 14, 3, 240, 243, 29, 71, 14, 3, 240, 243, 29, 210, 8, 14, - 3, 240, 243, 29, 210, 9, 101, 243, 237, 14, 3, 240, 243, 131, 240, 242, - 14, 3, 240, 237, 14, 3, 240, 238, 247, 54, 240, 237, 14, 3, 240, 235, 14, - 3, 240, 236, 131, 240, 236, 240, 205, 131, 240, 204, 14, 3, 240, 226, 14, - 3, 240, 227, 240, 236, 131, 240, 236, 240, 205, 131, 240, 204, 14, 3, - 240, 225, 14, 3, 240, 223, 14, 3, 240, 214, 14, 3, 240, 212, 14, 3, 240, - 213, 212, 89, 14, 3, 240, 213, 131, 240, 212, 14, 3, 240, 213, 247, 54, - 240, 212, 14, 3, 240, 204, 14, 3, 240, 203, 14, 3, 240, 198, 14, 3, 240, - 142, 14, 3, 240, 143, 29, 230, 210, 14, 3, 240, 61, 14, 3, 240, 62, 29, - 75, 14, 3, 240, 62, 29, 71, 14, 3, 240, 62, 247, 54, 240, 61, 14, 3, 240, - 59, 14, 3, 240, 60, 131, 240, 59, 14, 3, 240, 60, 247, 54, 240, 59, 14, - 3, 240, 56, 14, 3, 240, 43, 14, 3, 240, 44, 239, 192, 14, 3, 240, 41, 14, - 3, 240, 42, 29, 32, 101, 233, 104, 14, 3, 240, 42, 29, 240, 213, 212, 89, - 14, 3, 240, 42, 29, 233, 104, 14, 3, 240, 42, 29, 229, 82, 101, 233, 104, - 14, 3, 240, 42, 29, 179, 14, 3, 240, 37, 14, 3, 240, 35, 14, 3, 240, 36, - 247, 54, 240, 35, 14, 3, 240, 36, 29, 250, 167, 14, 3, 240, 36, 29, 212, - 186, 14, 3, 240, 36, 212, 89, 14, 3, 239, 213, 14, 3, 239, 214, 247, 54, - 239, 213, 14, 3, 239, 211, 14, 3, 239, 212, 29, 232, 35, 14, 3, 239, 212, - 29, 232, 36, 29, 233, 105, 239, 192, 14, 3, 239, 212, 29, 223, 173, 14, - 3, 239, 212, 29, 217, 173, 101, 210, 164, 14, 3, 239, 212, 239, 192, 14, - 3, 239, 202, 14, 3, 239, 203, 29, 32, 101, 230, 210, 14, 3, 239, 203, 29, - 230, 210, 14, 3, 239, 203, 131, 239, 203, 229, 72, 14, 3, 239, 196, 14, - 3, 239, 194, 14, 3, 239, 195, 29, 215, 214, 14, 3, 239, 186, 14, 3, 239, - 185, 14, 3, 239, 181, 14, 3, 239, 180, 14, 3, 155, 14, 3, 239, 144, 212, - 89, 14, 3, 239, 144, 239, 192, 14, 3, 239, 124, 14, 3, 239, 11, 14, 3, - 239, 12, 29, 251, 225, 14, 3, 239, 12, 29, 251, 223, 14, 3, 239, 12, 29, - 250, 167, 14, 3, 239, 12, 29, 245, 94, 14, 3, 239, 12, 29, 240, 235, 14, - 3, 239, 12, 29, 231, 109, 14, 3, 239, 12, 29, 223, 173, 14, 3, 239, 12, - 29, 215, 214, 14, 3, 239, 12, 29, 71, 14, 3, 238, 42, 14, 3, 238, 37, 14, - 3, 238, 38, 29, 252, 122, 14, 3, 238, 38, 29, 239, 124, 14, 3, 238, 38, - 29, 231, 254, 14, 3, 238, 38, 29, 229, 186, 14, 3, 238, 38, 29, 210, 8, - 14, 3, 238, 34, 14, 3, 74, 14, 3, 237, 225, 62, 14, 3, 237, 185, 14, 3, - 233, 132, 14, 3, 233, 133, 131, 233, 133, 249, 68, 14, 3, 233, 133, 131, - 233, 133, 214, 106, 14, 3, 233, 107, 14, 3, 233, 104, 14, 3, 233, 105, - 245, 150, 14, 3, 233, 105, 218, 208, 14, 3, 233, 105, 131, 233, 105, 215, - 165, 131, 215, 165, 210, 9, 131, 210, 8, 14, 3, 233, 105, 239, 192, 14, - 3, 233, 96, 14, 3, 233, 97, 29, 240, 213, 212, 89, 14, 3, 233, 95, 14, 3, - 233, 85, 14, 3, 233, 86, 29, 212, 186, 14, 3, 233, 86, 247, 54, 233, 85, - 14, 3, 233, 86, 222, 129, 233, 85, 14, 3, 233, 86, 214, 106, 14, 3, 233, - 78, 14, 3, 233, 68, 14, 3, 232, 243, 14, 3, 232, 228, 14, 3, 172, 14, 3, - 232, 66, 29, 62, 14, 3, 232, 66, 29, 253, 5, 14, 3, 232, 66, 29, 253, 6, - 101, 230, 234, 14, 3, 232, 66, 29, 251, 223, 14, 3, 232, 66, 29, 250, - 167, 14, 3, 232, 66, 29, 250, 150, 14, 3, 232, 66, 29, 134, 14, 3, 232, - 66, 29, 249, 244, 14, 3, 232, 66, 29, 242, 230, 14, 3, 232, 66, 29, 242, - 212, 14, 3, 232, 66, 29, 240, 244, 14, 3, 232, 66, 29, 240, 226, 14, 3, - 232, 66, 29, 240, 213, 212, 89, 14, 3, 232, 66, 29, 240, 204, 14, 3, 232, - 66, 29, 240, 205, 101, 216, 1, 101, 62, 14, 3, 232, 66, 29, 240, 61, 14, - 3, 232, 66, 29, 240, 43, 14, 3, 232, 66, 29, 240, 36, 101, 217, 138, 14, - 3, 232, 66, 29, 240, 36, 247, 54, 240, 35, 14, 3, 232, 66, 29, 239, 213, - 14, 3, 232, 66, 29, 239, 185, 14, 3, 232, 66, 29, 233, 104, 14, 3, 232, - 66, 29, 233, 85, 14, 3, 232, 66, 29, 232, 35, 14, 3, 232, 66, 29, 231, - 123, 14, 3, 232, 66, 29, 231, 117, 14, 3, 232, 66, 29, 229, 235, 14, 3, - 232, 66, 29, 229, 81, 14, 3, 232, 66, 29, 227, 119, 14, 3, 232, 66, 29, - 227, 120, 101, 243, 237, 14, 3, 232, 66, 29, 227, 120, 101, 240, 61, 14, - 3, 232, 66, 29, 227, 120, 101, 212, 131, 14, 3, 232, 66, 29, 226, 254, - 14, 3, 232, 66, 29, 226, 255, 101, 223, 168, 14, 3, 232, 66, 29, 225, - 110, 14, 3, 232, 66, 29, 223, 173, 14, 3, 232, 66, 29, 221, 53, 14, 3, - 232, 66, 29, 218, 50, 14, 3, 232, 66, 29, 217, 199, 14, 3, 232, 66, 29, - 217, 138, 14, 3, 232, 66, 29, 216, 2, 14, 3, 232, 66, 29, 215, 214, 14, - 3, 232, 66, 29, 215, 181, 14, 3, 232, 66, 29, 215, 116, 14, 3, 232, 66, - 29, 215, 68, 14, 3, 232, 66, 29, 213, 169, 14, 3, 232, 66, 29, 212, 162, - 14, 3, 232, 66, 29, 71, 14, 3, 232, 66, 29, 210, 19, 14, 3, 232, 66, 29, - 210, 8, 14, 3, 232, 66, 29, 209, 237, 29, 179, 14, 3, 232, 66, 29, 209, - 170, 14, 3, 232, 66, 29, 205, 40, 14, 3, 232, 64, 14, 3, 232, 65, 247, - 54, 232, 64, 14, 3, 232, 55, 14, 3, 232, 52, 14, 3, 232, 50, 14, 3, 232, - 49, 14, 3, 232, 47, 14, 3, 232, 48, 131, 232, 47, 14, 3, 232, 35, 14, 3, - 232, 36, 29, 233, 105, 239, 192, 14, 3, 232, 31, 14, 3, 232, 32, 29, 250, - 167, 14, 3, 232, 32, 247, 54, 232, 31, 14, 3, 232, 29, 14, 3, 232, 28, - 14, 3, 231, 254, 14, 3, 231, 255, 230, 123, 29, 106, 131, 230, 123, 29, - 71, 14, 3, 231, 255, 131, 231, 255, 230, 123, 29, 106, 131, 230, 123, 29, - 71, 14, 3, 231, 194, 14, 3, 231, 123, 14, 3, 231, 124, 29, 250, 167, 14, - 3, 231, 124, 29, 71, 14, 3, 231, 124, 29, 210, 8, 14, 3, 231, 117, 14, 3, - 231, 109, 14, 3, 231, 96, 14, 3, 231, 95, 14, 3, 231, 93, 14, 3, 231, 94, - 131, 231, 93, 14, 3, 230, 236, 14, 3, 230, 237, 131, 239, 12, 29, 251, - 224, 230, 237, 131, 239, 12, 29, 251, 223, 14, 3, 230, 234, 14, 3, 230, - 232, 14, 3, 230, 233, 209, 53, 17, 14, 3, 230, 231, 14, 3, 230, 223, 14, - 3, 230, 224, 239, 192, 14, 3, 230, 222, 14, 3, 230, 210, 14, 3, 230, 211, - 222, 129, 230, 210, 14, 3, 230, 205, 14, 3, 230, 183, 14, 3, 230, 141, - 14, 3, 230, 122, 14, 3, 230, 123, 29, 62, 14, 3, 230, 123, 29, 32, 101, - 246, 146, 101, 155, 14, 3, 230, 123, 29, 32, 101, 240, 204, 14, 3, 230, - 123, 29, 32, 101, 230, 108, 14, 3, 230, 123, 29, 252, 181, 14, 3, 230, - 123, 29, 252, 122, 14, 3, 230, 123, 29, 251, 226, 205, 36, 212, 89, 14, - 3, 230, 123, 29, 250, 167, 14, 3, 230, 123, 29, 249, 244, 14, 3, 230, - 123, 29, 246, 88, 14, 3, 230, 123, 29, 243, 41, 14, 3, 230, 123, 29, 240, - 244, 14, 3, 230, 123, 29, 240, 204, 14, 3, 230, 123, 29, 239, 202, 14, 3, - 230, 123, 29, 239, 203, 101, 239, 202, 14, 3, 230, 123, 29, 155, 14, 3, - 230, 123, 29, 239, 124, 14, 3, 230, 123, 29, 239, 12, 29, 223, 173, 14, - 3, 230, 123, 29, 233, 105, 239, 192, 14, 3, 230, 123, 29, 233, 85, 14, 3, - 230, 123, 29, 233, 86, 101, 155, 14, 3, 230, 123, 29, 233, 86, 101, 229, - 81, 14, 3, 230, 123, 29, 231, 123, 14, 3, 230, 123, 29, 231, 109, 14, 3, - 230, 123, 29, 230, 234, 14, 3, 230, 123, 29, 230, 223, 14, 3, 230, 123, - 29, 230, 224, 101, 239, 12, 101, 62, 14, 3, 230, 123, 29, 230, 122, 14, - 3, 230, 123, 29, 229, 186, 14, 3, 230, 123, 29, 229, 81, 14, 3, 230, 123, - 29, 229, 67, 14, 3, 230, 123, 29, 227, 119, 14, 3, 230, 123, 29, 227, - 120, 101, 243, 41, 14, 3, 230, 123, 29, 226, 69, 14, 3, 230, 123, 29, - 225, 110, 14, 3, 230, 123, 29, 215, 215, 101, 213, 160, 14, 3, 230, 123, - 29, 215, 161, 101, 240, 36, 101, 242, 230, 14, 3, 230, 123, 29, 215, 161, - 101, 240, 36, 212, 89, 14, 3, 230, 123, 29, 215, 114, 14, 3, 230, 123, - 29, 215, 115, 101, 215, 114, 14, 3, 230, 123, 29, 213, 160, 14, 3, 230, - 123, 29, 212, 198, 14, 3, 230, 123, 29, 212, 186, 14, 3, 230, 123, 29, - 212, 132, 101, 32, 101, 213, 204, 101, 199, 14, 3, 230, 123, 29, 71, 14, - 3, 230, 123, 29, 106, 101, 62, 14, 3, 230, 123, 29, 106, 101, 106, 101, - 71, 14, 3, 230, 123, 29, 210, 20, 101, 251, 225, 14, 3, 230, 123, 29, - 210, 8, 14, 3, 230, 123, 29, 209, 170, 14, 3, 230, 123, 214, 106, 14, 3, - 230, 120, 14, 3, 230, 121, 29, 215, 214, 14, 3, 230, 121, 29, 215, 215, - 101, 213, 160, 14, 3, 230, 121, 239, 192, 14, 3, 230, 121, 239, 193, 131, - 230, 121, 239, 193, 215, 214, 14, 3, 230, 116, 14, 3, 230, 108, 14, 3, - 230, 109, 29, 230, 108, 14, 3, 230, 106, 14, 3, 230, 107, 29, 230, 210, - 14, 3, 230, 107, 29, 230, 211, 101, 218, 50, 14, 3, 229, 235, 14, 3, 229, - 218, 14, 3, 229, 208, 14, 3, 229, 186, 14, 3, 229, 81, 14, 3, 229, 82, - 29, 250, 167, 14, 3, 229, 79, 14, 3, 229, 80, 29, 252, 181, 14, 3, 229, - 80, 29, 250, 167, 14, 3, 229, 80, 29, 242, 212, 14, 3, 229, 80, 29, 242, - 213, 212, 89, 14, 3, 229, 80, 29, 240, 213, 212, 89, 14, 3, 229, 80, 29, - 239, 12, 29, 250, 167, 14, 3, 229, 80, 29, 233, 85, 14, 3, 229, 80, 29, - 232, 52, 14, 3, 229, 80, 29, 232, 50, 14, 3, 229, 80, 29, 232, 51, 101, - 251, 225, 14, 3, 229, 80, 29, 231, 123, 14, 3, 229, 80, 29, 230, 142, - 101, 251, 225, 14, 3, 229, 80, 29, 230, 122, 14, 3, 229, 80, 29, 227, - 120, 101, 243, 41, 14, 3, 229, 80, 29, 225, 110, 14, 3, 229, 80, 29, 223, - 217, 14, 3, 229, 80, 29, 215, 81, 101, 251, 225, 14, 3, 229, 80, 29, 215, - 60, 101, 249, 101, 14, 3, 229, 80, 29, 210, 164, 14, 3, 229, 80, 212, 89, - 14, 3, 229, 80, 247, 54, 229, 79, 14, 3, 229, 80, 222, 129, 229, 79, 14, - 3, 229, 80, 214, 106, 14, 3, 229, 80, 215, 196, 14, 3, 229, 78, 14, 3, - 229, 72, 14, 3, 229, 73, 131, 229, 72, 14, 3, 229, 73, 222, 129, 229, 72, - 14, 3, 229, 73, 215, 196, 14, 3, 229, 70, 14, 3, 229, 67, 14, 3, 229, 65, - 14, 3, 229, 66, 131, 229, 65, 14, 3, 229, 66, 131, 229, 66, 240, 205, - 131, 240, 204, 14, 3, 185, 14, 3, 228, 20, 29, 212, 186, 14, 3, 228, 20, - 239, 192, 14, 3, 228, 19, 14, 3, 227, 247, 14, 3, 227, 199, 14, 3, 227, - 178, 14, 3, 227, 177, 14, 3, 227, 119, 14, 3, 227, 71, 14, 3, 226, 254, - 14, 3, 226, 209, 14, 3, 226, 114, 14, 3, 226, 115, 131, 226, 114, 14, 3, - 226, 103, 14, 3, 226, 104, 239, 192, 14, 3, 226, 87, 14, 3, 226, 73, 14, - 3, 226, 69, 14, 3, 226, 70, 29, 62, 14, 3, 226, 70, 29, 230, 210, 14, 3, - 226, 70, 29, 205, 116, 14, 3, 226, 70, 131, 226, 69, 14, 3, 226, 70, 131, - 226, 70, 29, 32, 101, 199, 14, 3, 226, 70, 247, 54, 226, 69, 14, 3, 226, - 67, 14, 3, 226, 68, 29, 62, 14, 3, 226, 68, 29, 32, 101, 245, 168, 14, 3, - 226, 68, 29, 245, 168, 14, 3, 226, 68, 239, 192, 14, 3, 199, 14, 3, 225, - 235, 14, 3, 225, 222, 14, 3, 225, 223, 233, 1, 14, 3, 225, 223, 29, 215, - 117, 212, 89, 14, 3, 225, 223, 222, 129, 225, 222, 14, 3, 225, 221, 14, - 3, 225, 214, 223, 159, 14, 3, 225, 213, 14, 3, 225, 212, 14, 3, 225, 110, - 14, 3, 225, 111, 29, 62, 14, 3, 225, 111, 29, 210, 8, 14, 3, 225, 111, - 215, 196, 14, 3, 224, 230, 14, 3, 224, 231, 29, 75, 14, 3, 224, 229, 14, - 3, 224, 200, 14, 3, 224, 201, 29, 240, 213, 212, 89, 14, 3, 224, 201, 29, - 240, 205, 101, 240, 213, 212, 89, 14, 3, 224, 196, 14, 3, 224, 197, 29, - 252, 122, 14, 3, 224, 197, 29, 251, 225, 14, 3, 224, 197, 29, 251, 226, - 101, 251, 225, 14, 3, 224, 197, 29, 239, 202, 14, 3, 224, 197, 29, 227, - 120, 101, 240, 213, 212, 89, 14, 3, 224, 197, 29, 225, 110, 14, 3, 224, - 197, 29, 223, 173, 14, 3, 224, 197, 29, 215, 214, 14, 3, 224, 197, 29, - 215, 215, 101, 32, 252, 122, 14, 3, 224, 197, 29, 215, 215, 101, 251, - 225, 14, 3, 224, 197, 29, 215, 215, 101, 251, 226, 101, 251, 225, 14, 3, - 224, 197, 29, 210, 20, 101, 251, 225, 14, 3, 224, 197, 29, 209, 170, 14, - 3, 224, 185, 14, 3, 223, 217, 14, 3, 223, 189, 14, 3, 223, 173, 14, 3, - 223, 174, 230, 121, 29, 240, 204, 14, 3, 223, 174, 230, 121, 29, 227, - 178, 14, 3, 223, 174, 230, 121, 29, 217, 172, 14, 3, 223, 174, 230, 121, - 29, 217, 173, 131, 223, 174, 230, 121, 29, 217, 172, 14, 3, 223, 174, - 230, 121, 29, 209, 170, 14, 3, 223, 174, 212, 89, 14, 3, 223, 174, 131, - 223, 173, 14, 3, 223, 174, 247, 54, 223, 173, 14, 3, 223, 174, 247, 54, - 223, 174, 230, 121, 131, 230, 120, 14, 3, 223, 168, 14, 3, 223, 169, 253, - 33, 29, 251, 219, 14, 3, 223, 169, 253, 33, 29, 249, 244, 14, 3, 223, - 169, 253, 33, 29, 243, 233, 14, 3, 223, 169, 253, 33, 29, 239, 202, 14, - 3, 223, 169, 253, 33, 29, 233, 105, 239, 192, 14, 3, 223, 169, 253, 33, - 29, 232, 50, 14, 3, 223, 169, 253, 33, 29, 230, 141, 14, 3, 223, 169, - 253, 33, 29, 225, 110, 14, 3, 223, 169, 253, 33, 29, 215, 57, 14, 3, 223, - 169, 253, 33, 29, 210, 19, 14, 3, 223, 169, 231, 94, 29, 249, 244, 14, 3, - 223, 169, 231, 94, 29, 249, 245, 71, 14, 3, 179, 14, 3, 222, 42, 14, 3, - 222, 6, 14, 3, 221, 236, 14, 3, 221, 107, 14, 3, 221, 53, 14, 3, 221, 54, - 29, 62, 14, 3, 221, 54, 29, 253, 115, 14, 3, 221, 54, 29, 249, 244, 14, - 3, 221, 54, 29, 249, 101, 14, 3, 221, 54, 29, 75, 14, 3, 221, 54, 29, 74, - 14, 3, 221, 54, 29, 237, 185, 14, 3, 221, 54, 29, 71, 14, 3, 221, 54, 29, - 210, 19, 14, 3, 221, 54, 247, 54, 221, 53, 14, 3, 220, 251, 14, 3, 220, - 252, 29, 232, 31, 14, 3, 220, 252, 29, 210, 8, 14, 3, 220, 252, 29, 205, - 116, 14, 3, 220, 252, 222, 129, 220, 251, 14, 3, 219, 113, 14, 3, 219, - 107, 14, 3, 218, 208, 14, 3, 218, 50, 14, 3, 217, 199, 14, 3, 217, 186, - 223, 159, 14, 3, 217, 185, 14, 3, 217, 186, 29, 62, 14, 3, 217, 186, 29, - 243, 237, 14, 3, 217, 186, 29, 243, 235, 14, 3, 217, 186, 29, 155, 14, 3, - 217, 186, 29, 232, 35, 14, 3, 217, 186, 29, 230, 210, 14, 3, 217, 186, - 29, 229, 65, 14, 3, 217, 186, 29, 226, 254, 14, 3, 217, 186, 29, 223, - 173, 14, 3, 217, 186, 29, 217, 172, 14, 3, 217, 186, 29, 215, 181, 14, 3, - 217, 186, 29, 212, 207, 14, 3, 217, 186, 29, 210, 19, 14, 3, 217, 186, - 29, 210, 14, 14, 3, 217, 186, 29, 209, 241, 14, 3, 217, 186, 29, 209, - 194, 14, 3, 217, 186, 29, 209, 170, 14, 3, 217, 186, 131, 217, 185, 14, - 3, 217, 186, 239, 192, 14, 3, 217, 172, 14, 3, 217, 173, 230, 123, 29, - 251, 223, 14, 3, 217, 146, 14, 3, 217, 138, 14, 3, 216, 2, 14, 3, 216, 0, - 14, 3, 216, 1, 29, 62, 14, 3, 216, 1, 29, 250, 167, 14, 3, 216, 1, 29, - 240, 35, 14, 3, 216, 1, 29, 225, 110, 14, 3, 216, 1, 29, 215, 114, 14, 3, - 216, 1, 29, 210, 149, 14, 3, 216, 1, 29, 71, 14, 3, 216, 1, 29, 106, 101, - 62, 14, 3, 215, 255, 14, 3, 215, 253, 14, 3, 215, 230, 14, 3, 215, 214, - 14, 3, 215, 215, 238, 42, 14, 3, 215, 215, 131, 215, 215, 240, 236, 131, - 240, 236, 240, 205, 131, 240, 204, 14, 3, 215, 215, 131, 215, 215, 212, - 208, 131, 212, 208, 240, 205, 131, 240, 204, 14, 3, 215, 207, 14, 3, 215, - 202, 14, 3, 215, 199, 14, 3, 215, 198, 14, 3, 215, 195, 14, 3, 215, 181, - 14, 3, 215, 182, 29, 62, 14, 3, 215, 182, 29, 233, 85, 14, 3, 215, 175, - 14, 3, 215, 176, 29, 62, 14, 3, 215, 176, 29, 250, 151, 14, 3, 215, 176, - 29, 249, 79, 14, 3, 215, 176, 29, 245, 113, 14, 3, 215, 176, 29, 240, - 204, 14, 3, 215, 176, 29, 233, 104, 14, 3, 215, 176, 29, 233, 105, 239, - 192, 14, 3, 215, 176, 29, 230, 205, 14, 3, 215, 176, 29, 229, 67, 14, 3, - 215, 176, 29, 226, 103, 14, 3, 215, 176, 29, 217, 172, 14, 3, 215, 169, - 14, 3, 215, 164, 14, 3, 215, 165, 212, 89, 14, 3, 215, 165, 131, 215, - 165, 249, 69, 131, 249, 68, 14, 3, 215, 160, 14, 3, 215, 116, 14, 3, 215, - 117, 131, 233, 2, 215, 116, 14, 3, 215, 114, 14, 3, 215, 113, 14, 3, 215, - 80, 14, 3, 215, 81, 239, 192, 14, 3, 215, 68, 14, 3, 215, 66, 14, 3, 215, - 67, 131, 215, 67, 215, 114, 14, 3, 215, 59, 14, 3, 215, 57, 14, 3, 213, - 203, 14, 3, 213, 204, 131, 213, 203, 14, 3, 213, 172, 14, 3, 213, 171, - 14, 3, 213, 169, 14, 3, 213, 160, 14, 3, 213, 159, 14, 3, 213, 133, 14, - 3, 213, 132, 14, 3, 212, 219, 14, 3, 212, 220, 251, 209, 14, 3, 212, 220, - 29, 239, 11, 14, 3, 212, 220, 29, 226, 254, 14, 3, 212, 220, 239, 192, - 14, 3, 212, 207, 14, 3, 212, 208, 131, 212, 208, 224, 231, 131, 224, 231, - 245, 95, 131, 245, 94, 14, 3, 212, 208, 214, 106, 14, 3, 212, 198, 14, 3, - 150, 29, 249, 244, 14, 3, 150, 29, 239, 202, 14, 3, 150, 29, 215, 214, - 14, 3, 150, 29, 215, 116, 14, 3, 150, 29, 210, 164, 14, 3, 150, 29, 210, - 8, 14, 3, 212, 186, 14, 3, 212, 162, 14, 3, 212, 131, 14, 3, 212, 132, - 239, 192, 14, 3, 211, 211, 14, 3, 211, 212, 212, 89, 14, 3, 211, 182, 14, - 3, 211, 162, 14, 3, 211, 163, 29, 212, 186, 14, 3, 211, 163, 131, 211, - 162, 14, 3, 211, 163, 131, 211, 163, 240, 236, 131, 240, 236, 240, 205, - 131, 240, 204, 14, 3, 210, 170, 14, 3, 210, 164, 14, 3, 210, 162, 14, 3, - 210, 159, 14, 3, 210, 149, 14, 3, 210, 150, 131, 210, 150, 205, 117, 131, - 205, 116, 14, 3, 71, 14, 3, 106, 239, 202, 14, 3, 106, 106, 71, 14, 3, - 106, 131, 106, 222, 52, 131, 222, 52, 240, 205, 131, 240, 204, 14, 3, - 106, 131, 106, 213, 134, 131, 213, 133, 14, 3, 106, 131, 106, 106, 218, - 224, 131, 106, 218, 223, 14, 3, 210, 19, 14, 3, 210, 14, 14, 3, 210, 8, - 14, 3, 210, 9, 230, 205, 14, 3, 210, 9, 29, 250, 167, 14, 3, 210, 9, 29, - 226, 254, 14, 3, 210, 9, 29, 106, 101, 106, 101, 71, 14, 3, 210, 9, 29, - 106, 101, 106, 101, 106, 239, 192, 14, 3, 210, 9, 239, 192, 14, 3, 210, - 9, 215, 196, 14, 3, 210, 9, 215, 197, 29, 250, 167, 14, 3, 210, 4, 14, 3, - 209, 241, 14, 3, 209, 242, 29, 230, 122, 14, 3, 209, 242, 29, 227, 120, - 101, 246, 145, 14, 3, 209, 242, 29, 216, 0, 14, 3, 209, 242, 29, 71, 14, - 3, 209, 240, 14, 3, 209, 236, 14, 3, 209, 237, 29, 231, 254, 14, 3, 209, - 237, 29, 179, 14, 3, 209, 234, 14, 3, 209, 235, 239, 192, 14, 3, 209, - 194, 14, 3, 209, 195, 247, 54, 209, 194, 14, 3, 209, 195, 215, 196, 14, - 3, 209, 192, 14, 3, 209, 193, 29, 32, 101, 155, 14, 3, 209, 193, 29, 32, - 101, 199, 14, 3, 209, 193, 29, 252, 181, 14, 3, 209, 193, 29, 155, 14, 3, - 209, 193, 29, 223, 173, 14, 3, 209, 193, 29, 210, 19, 14, 3, 209, 193, - 29, 210, 20, 101, 251, 225, 14, 3, 209, 193, 29, 210, 20, 101, 249, 244, - 14, 3, 209, 191, 14, 3, 209, 188, 14, 3, 209, 187, 14, 3, 209, 183, 14, - 3, 209, 184, 29, 62, 14, 3, 209, 184, 29, 251, 219, 14, 3, 209, 184, 29, - 134, 14, 3, 209, 184, 29, 243, 227, 14, 3, 209, 184, 29, 240, 244, 14, 3, - 209, 184, 29, 240, 226, 14, 3, 209, 184, 29, 240, 213, 212, 89, 14, 3, - 209, 184, 29, 240, 204, 14, 3, 209, 184, 29, 239, 213, 14, 3, 209, 184, - 29, 155, 14, 3, 209, 184, 29, 233, 104, 14, 3, 209, 184, 29, 233, 85, 14, - 3, 209, 184, 29, 232, 228, 14, 3, 209, 184, 29, 231, 123, 14, 3, 209, - 184, 29, 229, 65, 14, 3, 209, 184, 29, 226, 209, 14, 3, 209, 184, 29, - 179, 14, 3, 209, 184, 29, 215, 214, 14, 3, 209, 184, 29, 215, 66, 14, 3, - 209, 184, 29, 210, 170, 14, 3, 209, 184, 29, 106, 101, 239, 202, 14, 3, - 209, 184, 29, 210, 8, 14, 3, 209, 184, 29, 209, 181, 14, 3, 209, 181, 14, - 3, 209, 182, 29, 71, 14, 3, 209, 170, 14, 3, 209, 171, 29, 62, 14, 3, - 209, 171, 29, 230, 236, 14, 3, 209, 171, 29, 230, 210, 14, 3, 209, 171, - 29, 212, 186, 14, 3, 209, 166, 14, 3, 209, 169, 14, 3, 209, 167, 14, 3, - 209, 163, 14, 3, 209, 151, 14, 3, 209, 152, 29, 231, 254, 14, 3, 209, - 150, 14, 3, 205, 116, 14, 3, 205, 117, 212, 89, 14, 3, 205, 117, 98, 29, - 230, 210, 14, 3, 205, 113, 14, 3, 205, 106, 14, 3, 205, 92, 14, 3, 205, - 40, 14, 3, 205, 41, 131, 205, 40, 14, 3, 205, 39, 14, 3, 205, 37, 14, 3, - 205, 38, 232, 54, 212, 89, 14, 3, 205, 32, 14, 3, 205, 24, 14, 3, 205, 9, - 14, 3, 205, 7, 14, 3, 205, 8, 29, 62, 14, 3, 205, 6, 14, 3, 205, 5, 14, - 3, 232, 21, 243, 65, 14, 3, 253, 116, 29, 223, 173, 14, 3, 253, 33, 29, - 62, 14, 3, 252, 133, 29, 230, 225, 14, 3, 246, 137, 231, 94, 29, 210, 20, - 101, 227, 178, 14, 3, 246, 135, 14, 3, 245, 95, 101, 215, 116, 14, 3, - 243, 236, 29, 215, 214, 14, 3, 242, 144, 29, 239, 202, 14, 3, 242, 144, - 29, 215, 214, 14, 3, 240, 243, 29, 252, 123, 101, 232, 36, 101, 62, 14, - 3, 240, 243, 29, 251, 223, 14, 3, 240, 169, 14, 3, 240, 51, 14, 3, 238, - 21, 14, 3, 232, 66, 29, 252, 93, 14, 3, 232, 66, 29, 251, 222, 14, 3, - 232, 66, 29, 240, 35, 14, 3, 232, 66, 29, 239, 202, 14, 3, 232, 66, 29, - 239, 12, 29, 251, 223, 14, 3, 232, 66, 29, 229, 65, 14, 3, 232, 66, 29, - 179, 14, 3, 232, 66, 29, 215, 109, 14, 3, 232, 66, 29, 210, 170, 14, 3, - 232, 66, 29, 209, 192, 14, 3, 230, 123, 29, 240, 61, 14, 3, 229, 80, 215, - 197, 29, 250, 167, 14, 3, 229, 80, 29, 242, 213, 101, 230, 108, 14, 3, - 229, 80, 29, 215, 116, 14, 3, 227, 70, 14, 3, 226, 68, 29, 205, 116, 14, - 3, 225, 234, 14, 3, 224, 199, 14, 3, 224, 198, 14, 3, 224, 197, 29, 250, - 151, 14, 3, 224, 197, 29, 240, 61, 14, 3, 223, 190, 218, 97, 224, 191, - 245, 244, 14, 3, 221, 108, 251, 209, 14, 3, 220, 255, 14, 3, 217, 186, - 29, 233, 105, 239, 192, 14, 3, 211, 210, 14, 3, 209, 242, 29, 227, 119, - 14, 133, 3, 118, 251, 225, 14, 133, 3, 129, 251, 225, 14, 133, 3, 241, - 125, 251, 225, 14, 133, 3, 241, 204, 251, 225, 14, 133, 3, 215, 10, 251, - 225, 14, 133, 3, 216, 23, 251, 225, 14, 133, 3, 243, 88, 251, 225, 14, - 133, 3, 224, 195, 251, 225, 14, 133, 3, 129, 245, 94, 14, 133, 3, 241, - 125, 245, 94, 14, 133, 3, 241, 204, 245, 94, 14, 133, 3, 215, 10, 245, - 94, 14, 133, 3, 216, 23, 245, 94, 14, 133, 3, 243, 88, 245, 94, 14, 133, - 3, 224, 195, 245, 94, 14, 133, 3, 241, 125, 71, 14, 133, 3, 241, 204, 71, - 14, 133, 3, 215, 10, 71, 14, 133, 3, 216, 23, 71, 14, 133, 3, 243, 88, - 71, 14, 133, 3, 224, 195, 71, 14, 133, 3, 119, 240, 144, 14, 133, 3, 118, - 240, 144, 14, 133, 3, 129, 240, 144, 14, 133, 3, 241, 125, 240, 144, 14, - 133, 3, 241, 204, 240, 144, 14, 133, 3, 215, 10, 240, 144, 14, 133, 3, - 216, 23, 240, 144, 14, 133, 3, 243, 88, 240, 144, 14, 133, 3, 224, 195, - 240, 144, 14, 133, 3, 119, 240, 141, 14, 133, 3, 118, 240, 141, 14, 133, - 3, 129, 240, 141, 14, 133, 3, 241, 125, 240, 141, 14, 133, 3, 241, 204, - 240, 141, 14, 133, 3, 118, 215, 230, 14, 133, 3, 129, 215, 230, 14, 133, - 3, 129, 215, 231, 209, 53, 17, 14, 133, 3, 241, 125, 215, 230, 14, 133, - 3, 241, 204, 215, 230, 14, 133, 3, 215, 10, 215, 230, 14, 133, 3, 216, - 23, 215, 230, 14, 133, 3, 243, 88, 215, 230, 14, 133, 3, 224, 195, 215, - 230, 14, 133, 3, 119, 215, 225, 14, 133, 3, 118, 215, 225, 14, 133, 3, - 129, 215, 225, 14, 133, 3, 129, 215, 226, 209, 53, 17, 14, 133, 3, 241, - 125, 215, 225, 14, 133, 3, 241, 204, 215, 225, 14, 133, 3, 215, 231, 29, - 240, 227, 101, 245, 94, 14, 133, 3, 215, 231, 29, 240, 227, 101, 226, - 209, 14, 133, 3, 119, 249, 65, 14, 133, 3, 118, 249, 65, 14, 133, 3, 129, - 249, 65, 14, 133, 3, 129, 249, 66, 209, 53, 17, 14, 133, 3, 241, 125, - 249, 65, 14, 133, 3, 241, 204, 249, 65, 14, 133, 3, 129, 209, 53, 241, - 136, 242, 214, 14, 133, 3, 129, 209, 53, 241, 136, 242, 211, 14, 133, 3, - 241, 125, 209, 53, 241, 136, 229, 209, 14, 133, 3, 241, 125, 209, 53, - 241, 136, 229, 207, 14, 133, 3, 241, 125, 209, 53, 241, 136, 229, 210, - 62, 14, 133, 3, 241, 125, 209, 53, 241, 136, 229, 210, 251, 150, 14, 133, - 3, 215, 10, 209, 53, 241, 136, 251, 221, 14, 133, 3, 216, 23, 209, 53, - 241, 136, 233, 77, 14, 133, 3, 216, 23, 209, 53, 241, 136, 233, 79, 62, - 14, 133, 3, 216, 23, 209, 53, 241, 136, 233, 79, 251, 150, 14, 133, 3, - 243, 88, 209, 53, 241, 136, 209, 165, 14, 133, 3, 243, 88, 209, 53, 241, - 136, 209, 164, 14, 133, 3, 224, 195, 209, 53, 241, 136, 233, 93, 14, 133, - 3, 224, 195, 209, 53, 241, 136, 233, 92, 14, 133, 3, 224, 195, 209, 53, - 241, 136, 233, 91, 14, 133, 3, 224, 195, 209, 53, 241, 136, 233, 94, 62, - 14, 133, 3, 118, 251, 226, 212, 89, 14, 133, 3, 129, 251, 226, 212, 89, - 14, 133, 3, 241, 125, 251, 226, 212, 89, 14, 133, 3, 241, 204, 251, 226, - 212, 89, 14, 133, 3, 215, 10, 251, 226, 212, 89, 14, 133, 3, 119, 250, - 138, 14, 133, 3, 118, 250, 138, 14, 133, 3, 129, 250, 138, 14, 133, 3, - 241, 125, 250, 138, 14, 133, 3, 241, 125, 250, 139, 209, 53, 17, 14, 133, - 3, 241, 204, 250, 138, 14, 133, 3, 241, 204, 250, 139, 209, 53, 17, 14, - 133, 3, 224, 207, 14, 133, 3, 224, 208, 14, 133, 3, 119, 242, 210, 14, - 133, 3, 118, 242, 210, 14, 133, 3, 119, 212, 11, 245, 94, 14, 133, 3, - 118, 212, 8, 245, 94, 14, 133, 3, 241, 204, 214, 255, 245, 94, 14, 133, - 3, 119, 212, 11, 209, 53, 241, 136, 62, 14, 133, 3, 118, 212, 8, 209, 53, - 241, 136, 62, 14, 133, 3, 119, 243, 84, 251, 225, 14, 133, 3, 119, 219, - 205, 251, 225, 14, 133, 3, 44, 251, 212, 119, 215, 0, 14, 133, 3, 44, - 251, 212, 119, 219, 204, 14, 133, 3, 119, 219, 205, 239, 186, 14, 133, 3, - 119, 160, 239, 186, 14, 133, 3, 243, 66, 119, 212, 10, 14, 133, 3, 243, - 66, 118, 212, 7, 14, 133, 3, 243, 66, 241, 130, 14, 133, 3, 243, 66, 241, - 243, 14, 133, 3, 241, 125, 106, 209, 53, 17, 14, 133, 3, 241, 204, 106, - 209, 53, 17, 14, 133, 3, 215, 10, 106, 209, 53, 17, 14, 133, 3, 216, 23, - 106, 209, 53, 17, 14, 133, 3, 243, 88, 106, 209, 53, 17, 14, 133, 3, 224, - 195, 106, 209, 53, 17, 14, 220, 72, 3, 44, 251, 212, 206, 232, 245, 79, - 14, 220, 72, 3, 79, 247, 162, 14, 220, 72, 3, 245, 163, 247, 162, 14, - 220, 72, 3, 245, 163, 211, 47, 14, 220, 72, 3, 245, 163, 219, 210, 12, - 13, 254, 250, 12, 13, 254, 249, 12, 13, 254, 248, 12, 13, 254, 247, 12, - 13, 254, 246, 12, 13, 254, 245, 12, 13, 254, 244, 12, 13, 254, 243, 12, - 13, 254, 242, 12, 13, 254, 241, 12, 13, 254, 240, 12, 13, 254, 239, 12, - 13, 254, 238, 12, 13, 254, 237, 12, 13, 254, 236, 12, 13, 254, 235, 12, - 13, 254, 234, 12, 13, 254, 233, 12, 13, 254, 232, 12, 13, 254, 231, 12, - 13, 254, 230, 12, 13, 254, 229, 12, 13, 254, 228, 12, 13, 254, 227, 12, - 13, 254, 226, 12, 13, 254, 225, 12, 13, 254, 224, 12, 13, 254, 223, 12, - 13, 254, 222, 12, 13, 254, 221, 12, 13, 254, 220, 12, 13, 254, 219, 12, - 13, 254, 218, 12, 13, 254, 216, 12, 13, 254, 215, 12, 13, 254, 214, 12, - 13, 254, 213, 12, 13, 254, 212, 12, 13, 254, 211, 12, 13, 254, 210, 12, - 13, 254, 209, 12, 13, 254, 208, 12, 13, 254, 207, 12, 13, 254, 206, 12, - 13, 254, 205, 12, 13, 254, 204, 12, 13, 254, 203, 12, 13, 254, 202, 12, - 13, 254, 201, 12, 13, 254, 200, 12, 13, 254, 199, 12, 13, 254, 198, 12, - 13, 254, 197, 12, 13, 254, 196, 12, 13, 254, 195, 12, 13, 254, 194, 12, - 13, 254, 193, 12, 13, 254, 192, 12, 13, 254, 191, 12, 13, 254, 190, 12, - 13, 254, 189, 12, 13, 254, 188, 12, 13, 254, 187, 12, 13, 254, 186, 12, - 13, 254, 185, 12, 13, 254, 184, 12, 13, 254, 183, 12, 13, 254, 182, 12, - 13, 254, 181, 12, 13, 254, 180, 12, 13, 254, 179, 12, 13, 254, 178, 12, - 13, 254, 177, 12, 13, 254, 176, 12, 13, 254, 175, 12, 13, 254, 174, 12, - 13, 254, 173, 12, 13, 254, 172, 12, 13, 254, 171, 12, 13, 254, 170, 12, - 13, 251, 148, 12, 13, 251, 146, 12, 13, 251, 144, 12, 13, 251, 142, 12, - 13, 251, 140, 12, 13, 251, 139, 12, 13, 251, 137, 12, 13, 251, 135, 12, - 13, 251, 133, 12, 13, 251, 131, 12, 13, 249, 30, 12, 13, 249, 29, 12, 13, - 249, 28, 12, 13, 249, 27, 12, 13, 249, 26, 12, 13, 249, 25, 12, 13, 249, - 24, 12, 13, 249, 23, 12, 13, 249, 22, 12, 13, 249, 21, 12, 13, 249, 20, - 12, 13, 249, 19, 12, 13, 249, 18, 12, 13, 249, 17, 12, 13, 249, 16, 12, - 13, 249, 15, 12, 13, 249, 14, 12, 13, 249, 13, 12, 13, 249, 12, 12, 13, - 249, 11, 12, 13, 249, 10, 12, 13, 249, 9, 12, 13, 249, 8, 12, 13, 249, 7, - 12, 13, 249, 6, 12, 13, 249, 5, 12, 13, 249, 4, 12, 13, 249, 3, 12, 13, - 246, 239, 12, 13, 246, 238, 12, 13, 246, 237, 12, 13, 246, 236, 12, 13, - 246, 235, 12, 13, 246, 234, 12, 13, 246, 233, 12, 13, 246, 232, 12, 13, - 246, 231, 12, 13, 246, 230, 12, 13, 246, 229, 12, 13, 246, 228, 12, 13, - 246, 227, 12, 13, 246, 226, 12, 13, 246, 225, 12, 13, 246, 224, 12, 13, - 246, 223, 12, 13, 246, 222, 12, 13, 246, 221, 12, 13, 246, 220, 12, 13, - 246, 219, 12, 13, 246, 218, 12, 13, 246, 217, 12, 13, 246, 216, 12, 13, - 246, 215, 12, 13, 246, 214, 12, 13, 246, 213, 12, 13, 246, 212, 12, 13, - 246, 211, 12, 13, 246, 210, 12, 13, 246, 209, 12, 13, 246, 208, 12, 13, - 246, 207, 12, 13, 246, 206, 12, 13, 246, 205, 12, 13, 246, 204, 12, 13, - 246, 203, 12, 13, 246, 202, 12, 13, 246, 201, 12, 13, 246, 200, 12, 13, - 246, 199, 12, 13, 246, 198, 12, 13, 246, 197, 12, 13, 246, 196, 12, 13, - 246, 195, 12, 13, 246, 194, 12, 13, 246, 193, 12, 13, 246, 192, 12, 13, - 246, 191, 12, 13, 246, 190, 12, 13, 246, 189, 12, 13, 246, 188, 12, 13, - 246, 187, 12, 13, 246, 186, 12, 13, 246, 185, 12, 13, 246, 184, 12, 13, - 246, 183, 12, 13, 246, 182, 12, 13, 246, 181, 12, 13, 246, 180, 12, 13, - 246, 179, 12, 13, 246, 178, 12, 13, 246, 177, 12, 13, 246, 176, 12, 13, - 246, 175, 12, 13, 246, 174, 12, 13, 246, 173, 12, 13, 246, 172, 12, 13, - 246, 171, 12, 13, 246, 170, 12, 13, 246, 169, 12, 13, 246, 168, 12, 13, - 246, 167, 12, 13, 246, 166, 12, 13, 246, 165, 12, 13, 246, 164, 12, 13, - 246, 163, 12, 13, 246, 162, 12, 13, 246, 161, 12, 13, 246, 160, 12, 13, - 246, 159, 12, 13, 246, 158, 12, 13, 246, 157, 12, 13, 246, 156, 12, 13, - 246, 155, 12, 13, 246, 154, 12, 13, 246, 153, 12, 13, 246, 152, 12, 13, - 246, 151, 12, 13, 246, 150, 12, 13, 246, 149, 12, 13, 246, 148, 12, 13, - 243, 176, 12, 13, 243, 175, 12, 13, 243, 174, 12, 13, 243, 173, 12, 13, - 243, 172, 12, 13, 243, 171, 12, 13, 243, 170, 12, 13, 243, 169, 12, 13, - 243, 168, 12, 13, 243, 167, 12, 13, 243, 166, 12, 13, 243, 165, 12, 13, - 243, 164, 12, 13, 243, 163, 12, 13, 243, 162, 12, 13, 243, 161, 12, 13, - 243, 160, 12, 13, 243, 159, 12, 13, 243, 158, 12, 13, 243, 157, 12, 13, - 243, 156, 12, 13, 243, 155, 12, 13, 243, 154, 12, 13, 243, 153, 12, 13, - 243, 152, 12, 13, 243, 151, 12, 13, 243, 150, 12, 13, 243, 149, 12, 13, - 243, 148, 12, 13, 243, 147, 12, 13, 243, 146, 12, 13, 243, 145, 12, 13, - 243, 144, 12, 13, 243, 143, 12, 13, 243, 142, 12, 13, 243, 141, 12, 13, - 243, 140, 12, 13, 243, 139, 12, 13, 243, 138, 12, 13, 243, 137, 12, 13, - 243, 136, 12, 13, 243, 135, 12, 13, 243, 134, 12, 13, 243, 133, 12, 13, - 242, 138, 12, 13, 242, 137, 12, 13, 242, 136, 12, 13, 242, 135, 12, 13, - 242, 134, 12, 13, 242, 133, 12, 13, 242, 132, 12, 13, 242, 131, 12, 13, - 242, 130, 12, 13, 242, 129, 12, 13, 242, 128, 12, 13, 242, 127, 12, 13, - 242, 126, 12, 13, 242, 125, 12, 13, 242, 124, 12, 13, 242, 123, 12, 13, - 242, 122, 12, 13, 242, 121, 12, 13, 242, 120, 12, 13, 242, 119, 12, 13, - 242, 118, 12, 13, 242, 117, 12, 13, 242, 116, 12, 13, 242, 115, 12, 13, - 242, 114, 12, 13, 242, 113, 12, 13, 242, 112, 12, 13, 242, 111, 12, 13, - 242, 110, 12, 13, 242, 109, 12, 13, 242, 108, 12, 13, 242, 107, 12, 13, - 242, 106, 12, 13, 242, 105, 12, 13, 242, 104, 12, 13, 242, 103, 12, 13, - 242, 102, 12, 13, 242, 101, 12, 13, 242, 100, 12, 13, 242, 99, 12, 13, - 242, 98, 12, 13, 242, 97, 12, 13, 242, 96, 12, 13, 242, 95, 12, 13, 242, - 94, 12, 13, 242, 93, 12, 13, 242, 92, 12, 13, 242, 91, 12, 13, 242, 90, - 12, 13, 242, 89, 12, 13, 242, 88, 12, 13, 242, 87, 12, 13, 242, 86, 12, - 13, 242, 85, 12, 13, 242, 84, 12, 13, 242, 83, 12, 13, 242, 82, 12, 13, - 242, 81, 12, 13, 242, 80, 12, 13, 242, 79, 12, 13, 242, 78, 12, 13, 242, - 77, 12, 13, 242, 76, 12, 13, 242, 75, 12, 13, 242, 74, 12, 13, 241, 54, - 12, 13, 241, 53, 12, 13, 241, 52, 12, 13, 241, 51, 12, 13, 241, 50, 12, - 13, 241, 49, 12, 13, 241, 48, 12, 13, 241, 47, 12, 13, 241, 46, 12, 13, - 241, 45, 12, 13, 241, 44, 12, 13, 241, 43, 12, 13, 241, 42, 12, 13, 241, - 41, 12, 13, 241, 40, 12, 13, 241, 39, 12, 13, 241, 38, 12, 13, 241, 37, - 12, 13, 241, 36, 12, 13, 241, 35, 12, 13, 241, 34, 12, 13, 241, 33, 12, - 13, 241, 32, 12, 13, 241, 31, 12, 13, 241, 30, 12, 13, 241, 29, 12, 13, - 241, 28, 12, 13, 241, 27, 12, 13, 241, 26, 12, 13, 241, 25, 12, 13, 241, - 24, 12, 13, 241, 23, 12, 13, 241, 22, 12, 13, 241, 21, 12, 13, 241, 20, - 12, 13, 241, 19, 12, 13, 241, 18, 12, 13, 241, 17, 12, 13, 241, 16, 12, - 13, 241, 15, 12, 13, 241, 14, 12, 13, 241, 13, 12, 13, 241, 12, 12, 13, - 241, 11, 12, 13, 241, 10, 12, 13, 241, 9, 12, 13, 241, 8, 12, 13, 241, 7, - 12, 13, 241, 6, 12, 13, 241, 5, 12, 13, 241, 4, 12, 13, 241, 3, 12, 13, - 241, 2, 12, 13, 241, 1, 12, 13, 241, 0, 12, 13, 240, 255, 12, 13, 240, - 254, 12, 13, 240, 253, 12, 13, 240, 252, 12, 13, 240, 251, 12, 13, 240, - 250, 12, 13, 240, 249, 12, 13, 240, 248, 12, 13, 240, 247, 12, 13, 239, - 153, 12, 13, 239, 152, 12, 13, 239, 151, 12, 13, 239, 150, 12, 13, 239, - 149, 12, 13, 239, 148, 12, 13, 239, 147, 12, 13, 239, 146, 12, 13, 239, - 145, 12, 13, 237, 209, 12, 13, 237, 208, 12, 13, 237, 207, 12, 13, 237, - 206, 12, 13, 237, 205, 12, 13, 237, 204, 12, 13, 237, 203, 12, 13, 237, - 202, 12, 13, 237, 201, 12, 13, 237, 200, 12, 13, 237, 199, 12, 13, 237, - 198, 12, 13, 237, 197, 12, 13, 237, 196, 12, 13, 237, 195, 12, 13, 237, - 194, 12, 13, 237, 193, 12, 13, 237, 192, 12, 13, 237, 191, 12, 13, 232, - 75, 12, 13, 232, 74, 12, 13, 232, 73, 12, 13, 232, 72, 12, 13, 232, 71, - 12, 13, 232, 70, 12, 13, 232, 69, 12, 13, 232, 68, 12, 13, 230, 156, 12, - 13, 230, 155, 12, 13, 230, 154, 12, 13, 230, 153, 12, 13, 230, 152, 12, - 13, 230, 151, 12, 13, 230, 150, 12, 13, 230, 149, 12, 13, 230, 148, 12, - 13, 230, 147, 12, 13, 229, 26, 12, 13, 229, 25, 12, 13, 229, 24, 12, 13, - 229, 22, 12, 13, 229, 20, 12, 13, 229, 19, 12, 13, 229, 17, 12, 13, 229, - 15, 12, 13, 229, 13, 12, 13, 229, 11, 12, 13, 229, 9, 12, 13, 229, 7, 12, - 13, 229, 5, 12, 13, 229, 4, 12, 13, 229, 2, 12, 13, 229, 0, 12, 13, 228, - 255, 12, 13, 228, 254, 12, 13, 228, 253, 12, 13, 228, 252, 12, 13, 228, - 251, 12, 13, 228, 250, 12, 13, 228, 249, 12, 13, 228, 248, 12, 13, 228, - 246, 12, 13, 228, 244, 12, 13, 228, 242, 12, 13, 228, 241, 12, 13, 228, - 239, 12, 13, 228, 238, 12, 13, 228, 236, 12, 13, 228, 235, 12, 13, 228, - 233, 12, 13, 228, 231, 12, 13, 228, 229, 12, 13, 228, 227, 12, 13, 228, - 225, 12, 13, 228, 224, 12, 13, 228, 222, 12, 13, 228, 220, 12, 13, 228, - 219, 12, 13, 228, 217, 12, 13, 228, 215, 12, 13, 228, 213, 12, 13, 228, - 211, 12, 13, 228, 210, 12, 13, 228, 208, 12, 13, 228, 206, 12, 13, 228, - 204, 12, 13, 228, 203, 12, 13, 228, 201, 12, 13, 228, 199, 12, 13, 228, - 198, 12, 13, 228, 197, 12, 13, 228, 195, 12, 13, 228, 193, 12, 13, 228, - 191, 12, 13, 228, 189, 12, 13, 228, 187, 12, 13, 228, 185, 12, 13, 228, - 183, 12, 13, 228, 182, 12, 13, 228, 180, 12, 13, 228, 178, 12, 13, 228, - 176, 12, 13, 228, 174, 12, 13, 226, 30, 12, 13, 226, 29, 12, 13, 226, 28, - 12, 13, 226, 27, 12, 13, 226, 26, 12, 13, 226, 25, 12, 13, 226, 24, 12, - 13, 226, 23, 12, 13, 226, 22, 12, 13, 226, 21, 12, 13, 226, 20, 12, 13, - 226, 19, 12, 13, 226, 18, 12, 13, 226, 17, 12, 13, 226, 16, 12, 13, 226, - 15, 12, 13, 226, 14, 12, 13, 226, 13, 12, 13, 226, 12, 12, 13, 226, 11, - 12, 13, 226, 10, 12, 13, 226, 9, 12, 13, 226, 8, 12, 13, 226, 7, 12, 13, - 226, 6, 12, 13, 226, 5, 12, 13, 226, 4, 12, 13, 226, 3, 12, 13, 226, 2, - 12, 13, 226, 1, 12, 13, 226, 0, 12, 13, 225, 255, 12, 13, 225, 254, 12, - 13, 225, 253, 12, 13, 225, 252, 12, 13, 225, 251, 12, 13, 225, 250, 12, - 13, 225, 249, 12, 13, 225, 248, 12, 13, 225, 247, 12, 13, 225, 246, 12, - 13, 225, 245, 12, 13, 225, 244, 12, 13, 225, 243, 12, 13, 225, 242, 12, - 13, 225, 241, 12, 13, 225, 240, 12, 13, 225, 239, 12, 13, 225, 238, 12, - 13, 224, 128, 12, 13, 224, 127, 12, 13, 224, 126, 12, 13, 224, 125, 12, - 13, 224, 124, 12, 13, 224, 123, 12, 13, 224, 122, 12, 13, 224, 121, 12, - 13, 224, 120, 12, 13, 224, 119, 12, 13, 224, 118, 12, 13, 224, 117, 12, - 13, 224, 116, 12, 13, 224, 115, 12, 13, 224, 114, 12, 13, 224, 113, 12, - 13, 224, 112, 12, 13, 224, 111, 12, 13, 224, 110, 12, 13, 224, 109, 12, - 13, 224, 108, 12, 13, 224, 107, 12, 13, 223, 216, 12, 13, 223, 215, 12, - 13, 223, 214, 12, 13, 223, 213, 12, 13, 223, 212, 12, 13, 223, 211, 12, - 13, 223, 210, 12, 13, 223, 209, 12, 13, 223, 208, 12, 13, 223, 207, 12, - 13, 223, 206, 12, 13, 223, 205, 12, 13, 223, 204, 12, 13, 223, 203, 12, - 13, 223, 202, 12, 13, 223, 201, 12, 13, 223, 200, 12, 13, 223, 199, 12, - 13, 223, 198, 12, 13, 223, 197, 12, 13, 223, 196, 12, 13, 223, 195, 12, - 13, 223, 194, 12, 13, 223, 193, 12, 13, 223, 192, 12, 13, 223, 191, 12, - 13, 223, 50, 12, 13, 223, 49, 12, 13, 223, 48, 12, 13, 223, 47, 12, 13, - 223, 46, 12, 13, 223, 45, 12, 13, 223, 44, 12, 13, 223, 43, 12, 13, 223, - 42, 12, 13, 223, 41, 12, 13, 223, 40, 12, 13, 223, 39, 12, 13, 223, 38, - 12, 13, 223, 37, 12, 13, 223, 36, 12, 13, 223, 35, 12, 13, 223, 34, 12, - 13, 223, 33, 12, 13, 223, 32, 12, 13, 223, 31, 12, 13, 223, 30, 12, 13, - 223, 29, 12, 13, 223, 28, 12, 13, 223, 27, 12, 13, 223, 26, 12, 13, 223, - 25, 12, 13, 223, 24, 12, 13, 223, 23, 12, 13, 223, 22, 12, 13, 223, 21, - 12, 13, 223, 20, 12, 13, 223, 19, 12, 13, 223, 18, 12, 13, 223, 17, 12, - 13, 223, 16, 12, 13, 223, 15, 12, 13, 223, 14, 12, 13, 223, 13, 12, 13, - 223, 12, 12, 13, 223, 11, 12, 13, 223, 10, 12, 13, 223, 9, 12, 13, 223, - 8, 12, 13, 223, 7, 12, 13, 223, 6, 12, 13, 223, 5, 12, 13, 223, 4, 12, - 13, 223, 3, 12, 13, 223, 2, 12, 13, 223, 1, 12, 13, 223, 0, 12, 13, 222, - 255, 12, 13, 222, 254, 12, 13, 222, 253, 12, 13, 222, 252, 12, 13, 222, - 251, 12, 13, 222, 250, 12, 13, 222, 249, 12, 13, 222, 248, 12, 13, 222, - 247, 12, 13, 222, 246, 12, 13, 222, 245, 12, 13, 222, 244, 12, 13, 222, - 243, 12, 13, 222, 242, 12, 13, 222, 241, 12, 13, 222, 240, 12, 13, 222, - 239, 12, 13, 222, 238, 12, 13, 222, 237, 12, 13, 222, 236, 12, 13, 222, - 235, 12, 13, 222, 234, 12, 13, 222, 233, 12, 13, 222, 232, 12, 13, 222, - 66, 12, 13, 222, 65, 12, 13, 222, 64, 12, 13, 222, 63, 12, 13, 222, 62, - 12, 13, 222, 61, 12, 13, 222, 60, 12, 13, 222, 59, 12, 13, 222, 58, 12, - 13, 222, 57, 12, 13, 222, 56, 12, 13, 222, 55, 12, 13, 222, 54, 12, 13, - 220, 26, 12, 13, 220, 25, 12, 13, 220, 24, 12, 13, 220, 23, 12, 13, 220, - 22, 12, 13, 220, 21, 12, 13, 220, 20, 12, 13, 219, 148, 12, 13, 219, 147, - 12, 13, 219, 146, 12, 13, 219, 145, 12, 13, 219, 144, 12, 13, 219, 143, - 12, 13, 219, 142, 12, 13, 219, 141, 12, 13, 219, 140, 12, 13, 219, 139, - 12, 13, 219, 138, 12, 13, 219, 137, 12, 13, 219, 136, 12, 13, 219, 135, - 12, 13, 219, 134, 12, 13, 219, 133, 12, 13, 219, 132, 12, 13, 219, 131, - 12, 13, 219, 130, 12, 13, 219, 129, 12, 13, 219, 128, 12, 13, 219, 127, - 12, 13, 219, 126, 12, 13, 219, 125, 12, 13, 219, 124, 12, 13, 219, 123, - 12, 13, 219, 122, 12, 13, 219, 121, 12, 13, 219, 120, 12, 13, 219, 119, - 12, 13, 219, 118, 12, 13, 219, 117, 12, 13, 219, 116, 12, 13, 219, 115, - 12, 13, 217, 254, 12, 13, 217, 253, 12, 13, 217, 252, 12, 13, 217, 251, - 12, 13, 217, 250, 12, 13, 217, 249, 12, 13, 217, 248, 12, 13, 217, 247, - 12, 13, 217, 246, 12, 13, 217, 245, 12, 13, 217, 244, 12, 13, 217, 243, - 12, 13, 217, 242, 12, 13, 217, 241, 12, 13, 217, 240, 12, 13, 217, 239, - 12, 13, 217, 238, 12, 13, 217, 237, 12, 13, 217, 236, 12, 13, 217, 235, - 12, 13, 217, 234, 12, 13, 217, 233, 12, 13, 217, 232, 12, 13, 217, 231, - 12, 13, 217, 230, 12, 13, 217, 229, 12, 13, 217, 228, 12, 13, 217, 227, - 12, 13, 217, 226, 12, 13, 217, 225, 12, 13, 217, 224, 12, 13, 217, 223, - 12, 13, 217, 222, 12, 13, 217, 221, 12, 13, 217, 220, 12, 13, 217, 219, - 12, 13, 217, 218, 12, 13, 217, 217, 12, 13, 217, 216, 12, 13, 217, 215, - 12, 13, 217, 214, 12, 13, 217, 213, 12, 13, 217, 212, 12, 13, 217, 211, - 12, 13, 217, 210, 12, 13, 217, 209, 12, 13, 217, 208, 12, 13, 217, 207, - 12, 13, 217, 206, 12, 13, 217, 205, 12, 13, 217, 204, 12, 13, 217, 203, - 12, 13, 217, 202, 12, 13, 217, 201, 12, 13, 213, 8, 12, 13, 213, 7, 12, - 13, 213, 6, 12, 13, 213, 5, 12, 13, 213, 4, 12, 13, 213, 3, 12, 13, 213, - 2, 12, 13, 213, 1, 12, 13, 213, 0, 12, 13, 212, 255, 12, 13, 212, 254, - 12, 13, 212, 253, 12, 13, 212, 252, 12, 13, 212, 251, 12, 13, 212, 250, - 12, 13, 212, 249, 12, 13, 212, 248, 12, 13, 212, 247, 12, 13, 212, 246, - 12, 13, 212, 245, 12, 13, 212, 244, 12, 13, 212, 243, 12, 13, 212, 242, - 12, 13, 212, 241, 12, 13, 212, 240, 12, 13, 212, 239, 12, 13, 212, 238, - 12, 13, 212, 237, 12, 13, 212, 236, 12, 13, 212, 235, 12, 13, 212, 234, - 12, 13, 212, 233, 12, 13, 212, 232, 12, 13, 212, 231, 12, 13, 212, 230, - 12, 13, 212, 229, 12, 13, 212, 228, 12, 13, 212, 227, 12, 13, 212, 226, - 12, 13, 212, 225, 12, 13, 212, 224, 12, 13, 212, 223, 12, 13, 212, 222, - 12, 13, 212, 221, 12, 13, 210, 67, 12, 13, 210, 66, 12, 13, 210, 65, 12, - 13, 210, 64, 12, 13, 210, 63, 12, 13, 210, 62, 12, 13, 210, 61, 12, 13, - 210, 60, 12, 13, 210, 59, 12, 13, 210, 58, 12, 13, 210, 57, 12, 13, 210, - 56, 12, 13, 210, 55, 12, 13, 210, 54, 12, 13, 210, 53, 12, 13, 210, 52, - 12, 13, 210, 51, 12, 13, 210, 50, 12, 13, 210, 49, 12, 13, 210, 48, 12, - 13, 210, 47, 12, 13, 210, 46, 12, 13, 210, 45, 12, 13, 210, 44, 12, 13, - 210, 43, 12, 13, 210, 42, 12, 13, 210, 41, 12, 13, 210, 40, 12, 13, 210, - 39, 12, 13, 210, 38, 12, 13, 210, 37, 12, 13, 210, 36, 12, 13, 210, 35, - 12, 13, 210, 34, 12, 13, 210, 33, 12, 13, 210, 32, 12, 13, 210, 31, 12, - 13, 210, 30, 12, 13, 210, 29, 12, 13, 210, 28, 12, 13, 210, 27, 12, 13, - 210, 26, 12, 13, 210, 25, 12, 13, 210, 24, 12, 13, 210, 23, 12, 13, 210, - 22, 12, 13, 210, 21, 12, 13, 209, 147, 12, 13, 209, 146, 12, 13, 209, - 145, 12, 13, 209, 144, 12, 13, 209, 143, 12, 13, 209, 142, 12, 13, 209, - 141, 12, 13, 209, 140, 12, 13, 209, 139, 12, 13, 209, 138, 12, 13, 209, - 137, 12, 13, 209, 136, 12, 13, 209, 135, 12, 13, 209, 134, 12, 13, 209, - 133, 12, 13, 209, 132, 12, 13, 209, 131, 12, 13, 209, 130, 12, 13, 209, - 129, 12, 13, 209, 128, 12, 13, 209, 127, 12, 13, 209, 126, 12, 13, 209, - 125, 12, 13, 209, 124, 12, 13, 209, 123, 12, 13, 209, 122, 12, 13, 209, - 121, 12, 13, 209, 120, 12, 13, 209, 119, 12, 13, 209, 118, 12, 13, 209, - 117, 12, 13, 209, 116, 12, 13, 209, 115, 12, 13, 209, 114, 12, 13, 209, - 113, 12, 13, 209, 112, 12, 13, 209, 111, 12, 13, 209, 110, 12, 13, 209, - 109, 12, 13, 209, 108, 12, 13, 209, 107, 12, 13, 209, 106, 12, 13, 209, - 105, 12, 13, 209, 104, 12, 13, 209, 103, 12, 13, 209, 102, 12, 13, 209, - 101, 12, 13, 209, 100, 12, 13, 209, 99, 12, 13, 209, 98, 12, 13, 209, 97, - 12, 13, 209, 96, 12, 13, 209, 95, 12, 13, 209, 94, 12, 13, 209, 93, 12, - 13, 209, 92, 12, 13, 209, 91, 12, 13, 209, 90, 12, 13, 209, 89, 12, 13, - 209, 88, 12, 13, 209, 87, 12, 13, 209, 86, 12, 13, 209, 85, 12, 13, 209, - 84, 12, 13, 209, 83, 12, 13, 209, 82, 12, 13, 209, 81, 12, 13, 209, 80, - 12, 13, 209, 79, 12, 13, 209, 78, 12, 13, 209, 77, 12, 13, 209, 76, 12, - 13, 209, 75, 12, 13, 209, 74, 12, 13, 209, 73, 12, 13, 209, 72, 12, 13, - 209, 71, 12, 13, 207, 128, 12, 13, 207, 127, 12, 13, 207, 126, 12, 13, - 207, 125, 12, 13, 207, 124, 12, 13, 207, 123, 12, 13, 207, 122, 12, 13, - 207, 121, 12, 13, 207, 120, 12, 13, 207, 119, 12, 13, 207, 118, 12, 13, - 207, 117, 12, 13, 207, 116, 12, 13, 207, 115, 12, 13, 207, 114, 12, 13, - 207, 113, 12, 13, 207, 112, 12, 13, 207, 111, 12, 13, 207, 110, 12, 13, - 207, 109, 12, 13, 207, 108, 12, 13, 207, 107, 12, 13, 207, 106, 12, 13, - 207, 105, 12, 13, 207, 104, 12, 13, 207, 103, 12, 13, 207, 102, 12, 13, - 207, 101, 12, 13, 207, 100, 12, 13, 207, 99, 12, 13, 207, 98, 12, 13, - 207, 97, 12, 13, 206, 193, 12, 13, 206, 192, 12, 13, 206, 191, 12, 13, - 206, 190, 12, 13, 206, 189, 12, 13, 206, 188, 12, 13, 206, 187, 12, 13, - 206, 186, 12, 13, 206, 185, 12, 13, 206, 184, 12, 13, 206, 183, 12, 13, - 206, 182, 12, 13, 206, 121, 12, 13, 206, 120, 12, 13, 206, 119, 12, 13, - 206, 118, 12, 13, 206, 117, 12, 13, 206, 116, 12, 13, 206, 115, 12, 13, - 206, 114, 12, 13, 206, 113, 12, 13, 205, 158, 12, 13, 205, 157, 12, 13, - 205, 156, 12, 13, 205, 155, 12, 13, 205, 154, 12, 13, 205, 153, 12, 13, - 205, 152, 12, 13, 205, 151, 12, 13, 205, 150, 12, 13, 205, 149, 12, 13, - 205, 148, 12, 13, 205, 147, 12, 13, 205, 146, 12, 13, 205, 145, 12, 13, - 205, 144, 12, 13, 205, 143, 12, 13, 205, 142, 12, 13, 205, 141, 12, 13, - 205, 140, 12, 13, 205, 139, 12, 13, 205, 138, 12, 13, 205, 137, 12, 13, - 205, 136, 12, 13, 205, 135, 12, 13, 205, 134, 12, 13, 205, 133, 12, 13, - 205, 132, 12, 13, 205, 131, 12, 13, 205, 130, 12, 13, 205, 129, 12, 13, - 205, 128, 12, 13, 205, 127, 12, 13, 205, 126, 12, 13, 205, 125, 12, 13, - 205, 124, 12, 13, 205, 123, 12, 13, 205, 122, 12, 13, 205, 121, 12, 13, - 205, 120, 12, 13, 205, 119, 12, 13, 205, 118, 12, 13, 253, 163, 12, 13, - 253, 162, 12, 13, 253, 161, 12, 13, 253, 160, 12, 13, 253, 159, 12, 13, - 253, 158, 12, 13, 253, 157, 12, 13, 253, 156, 12, 13, 253, 155, 12, 13, - 253, 154, 12, 13, 253, 153, 12, 13, 253, 152, 12, 13, 253, 151, 12, 13, - 253, 150, 12, 13, 253, 149, 12, 13, 253, 148, 12, 13, 253, 147, 12, 13, - 253, 146, 12, 13, 253, 145, 12, 13, 253, 144, 12, 13, 253, 143, 12, 13, - 253, 142, 12, 13, 253, 141, 12, 13, 253, 140, 12, 13, 253, 139, 12, 13, - 253, 138, 12, 13, 253, 137, 12, 13, 253, 136, 12, 13, 253, 135, 12, 13, - 253, 134, 12, 13, 253, 133, 12, 13, 253, 132, 12, 13, 253, 131, 12, 13, - 253, 130, 21, 1, 187, 225, 10, 227, 40, 21, 1, 187, 240, 178, 241, 154, - 21, 1, 187, 220, 189, 227, 41, 221, 1, 21, 1, 187, 220, 189, 227, 41, - 221, 2, 21, 1, 187, 225, 233, 227, 40, 21, 1, 187, 215, 112, 21, 1, 187, - 211, 155, 227, 40, 21, 1, 187, 223, 92, 227, 40, 21, 1, 187, 215, 170, - 222, 52, 224, 164, 21, 1, 187, 220, 189, 222, 52, 224, 165, 221, 1, 21, - 1, 187, 220, 189, 222, 52, 224, 165, 221, 2, 21, 1, 187, 227, 255, 21, 1, - 187, 210, 171, 228, 0, 21, 1, 187, 225, 71, 21, 1, 187, 227, 252, 21, 1, - 187, 227, 210, 21, 1, 187, 226, 56, 21, 1, 187, 216, 25, 21, 1, 187, 223, - 224, 21, 1, 187, 231, 186, 21, 1, 187, 224, 132, 21, 1, 187, 213, 119, - 21, 1, 187, 225, 9, 21, 1, 187, 230, 88, 21, 1, 187, 230, 7, 230, 203, - 21, 1, 187, 223, 234, 227, 48, 21, 1, 187, 228, 3, 21, 1, 187, 221, 202, - 21, 1, 187, 240, 80, 21, 1, 187, 222, 9, 21, 1, 187, 226, 169, 225, 44, - 21, 1, 187, 223, 73, 227, 51, 21, 1, 187, 106, 205, 188, 225, 226, 21, 1, - 187, 240, 81, 21, 1, 187, 223, 234, 223, 235, 21, 1, 187, 215, 13, 21, 1, - 187, 227, 33, 21, 1, 187, 227, 54, 21, 1, 187, 226, 146, 21, 1, 187, 232, - 44, 21, 1, 187, 222, 52, 230, 47, 21, 1, 187, 225, 152, 230, 47, 21, 1, - 187, 221, 104, 21, 1, 187, 227, 253, 21, 1, 187, 224, 204, 21, 1, 187, - 220, 65, 21, 1, 187, 210, 168, 21, 1, 187, 229, 77, 21, 1, 187, 214, 175, - 21, 1, 187, 212, 65, 21, 1, 187, 227, 250, 21, 1, 187, 231, 193, 21, 1, - 187, 225, 148, 21, 1, 187, 230, 215, 21, 1, 187, 226, 147, 21, 1, 187, - 215, 108, 21, 1, 187, 229, 126, 21, 1, 187, 241, 216, 21, 1, 187, 218, - 110, 21, 1, 187, 231, 4, 21, 1, 187, 214, 171, 21, 1, 187, 227, 206, 221, - 43, 21, 1, 187, 215, 163, 21, 1, 187, 223, 233, 21, 1, 187, 215, 146, - 223, 244, 205, 196, 21, 1, 187, 223, 114, 226, 166, 21, 1, 187, 222, 47, - 21, 1, 187, 224, 134, 21, 1, 187, 209, 213, 21, 1, 187, 225, 47, 21, 1, - 187, 227, 249, 21, 1, 187, 224, 176, 21, 1, 187, 227, 148, 21, 1, 187, - 223, 128, 21, 1, 187, 212, 69, 21, 1, 187, 214, 168, 21, 1, 187, 222, 48, - 21, 1, 187, 223, 248, 21, 1, 187, 228, 1, 21, 1, 187, 223, 125, 21, 1, - 187, 232, 8, 21, 1, 187, 223, 251, 21, 1, 187, 209, 34, 21, 1, 187, 229, - 81, 21, 1, 187, 225, 101, 21, 1, 187, 225, 201, 21, 1, 187, 227, 147, 21, - 1, 221, 83, 223, 246, 21, 1, 221, 83, 210, 171, 227, 254, 21, 1, 221, 83, - 215, 71, 21, 1, 221, 83, 216, 29, 210, 170, 21, 1, 221, 83, 229, 128, - 223, 230, 21, 1, 221, 83, 227, 154, 228, 2, 21, 1, 221, 83, 231, 115, 21, - 1, 221, 83, 206, 18, 21, 1, 221, 83, 227, 149, 21, 1, 221, 83, 232, 30, - 21, 1, 221, 83, 221, 160, 21, 1, 221, 83, 206, 95, 230, 47, 21, 1, 221, - 83, 230, 107, 223, 244, 223, 139, 21, 1, 221, 83, 223, 227, 215, 189, 21, - 1, 221, 83, 225, 119, 224, 179, 21, 1, 221, 83, 240, 78, 21, 1, 221, 83, - 220, 247, 21, 1, 221, 83, 210, 171, 223, 242, 21, 1, 221, 83, 215, 194, - 224, 174, 21, 1, 221, 83, 215, 190, 21, 1, 221, 83, 227, 41, 212, 68, 21, - 1, 221, 83, 227, 136, 227, 150, 21, 1, 221, 83, 223, 126, 223, 230, 21, - 1, 221, 83, 231, 182, 21, 1, 221, 83, 240, 79, 21, 1, 221, 83, 231, 178, - 21, 1, 221, 83, 230, 135, 21, 1, 221, 83, 221, 205, 21, 1, 221, 83, 208, - 221, 21, 1, 221, 83, 225, 11, 226, 54, 21, 1, 221, 83, 225, 46, 227, 132, - 21, 1, 221, 83, 206, 214, 21, 1, 221, 83, 217, 175, 21, 1, 221, 83, 212, - 211, 21, 1, 221, 83, 227, 53, 21, 1, 221, 83, 225, 30, 21, 1, 221, 83, - 225, 31, 230, 85, 21, 1, 221, 83, 227, 43, 21, 1, 221, 83, 213, 170, 21, - 1, 221, 83, 227, 140, 21, 1, 221, 83, 226, 151, 21, 1, 221, 83, 223, 142, - 21, 1, 221, 83, 220, 69, 21, 1, 221, 83, 227, 52, 225, 48, 21, 1, 221, - 83, 241, 255, 21, 1, 221, 83, 227, 127, 21, 1, 221, 83, 242, 21, 21, 1, - 221, 83, 231, 190, 21, 1, 221, 83, 228, 20, 224, 168, 21, 1, 221, 83, - 228, 20, 224, 144, 21, 1, 221, 83, 230, 6, 21, 1, 221, 83, 225, 54, 21, - 1, 221, 83, 223, 253, 21, 1, 221, 83, 185, 21, 1, 221, 83, 231, 102, 21, - 1, 221, 83, 224, 255, 21, 1, 158, 225, 10, 228, 0, 21, 1, 158, 223, 91, - 21, 1, 158, 205, 196, 21, 1, 158, 207, 83, 21, 1, 158, 225, 47, 21, 1, - 158, 225, 140, 21, 1, 158, 225, 17, 21, 1, 158, 240, 88, 21, 1, 158, 227, - 144, 21, 1, 158, 240, 185, 21, 1, 158, 223, 116, 226, 190, 227, 55, 21, - 1, 158, 223, 222, 227, 135, 21, 1, 158, 227, 141, 21, 1, 158, 220, 253, - 21, 1, 158, 225, 125, 21, 1, 158, 227, 152, 248, 253, 21, 1, 158, 231, - 180, 21, 1, 158, 240, 89, 21, 1, 158, 231, 187, 21, 1, 158, 205, 214, - 226, 85, 21, 1, 158, 223, 85, 21, 1, 158, 227, 129, 21, 1, 158, 223, 252, - 21, 1, 158, 227, 135, 21, 1, 158, 206, 19, 21, 1, 158, 231, 12, 21, 1, - 158, 232, 63, 21, 1, 158, 216, 24, 21, 1, 158, 225, 134, 21, 1, 158, 212, - 209, 21, 1, 158, 224, 148, 21, 1, 158, 211, 155, 205, 199, 21, 1, 158, - 213, 198, 21, 1, 158, 225, 37, 223, 139, 21, 1, 158, 208, 220, 21, 1, - 158, 225, 204, 21, 1, 158, 228, 20, 231, 189, 21, 1, 158, 223, 235, 21, - 1, 158, 225, 32, 21, 1, 158, 230, 89, 21, 1, 158, 227, 137, 21, 1, 158, - 227, 32, 21, 1, 158, 223, 229, 21, 1, 158, 212, 64, 21, 1, 158, 225, 34, - 21, 1, 158, 241, 86, 21, 1, 158, 225, 139, 21, 1, 158, 223, 254, 21, 1, - 158, 223, 250, 21, 1, 158, 249, 77, 21, 1, 158, 208, 222, 21, 1, 158, - 227, 142, 21, 1, 158, 218, 50, 21, 1, 158, 224, 178, 21, 1, 158, 230, - 106, 21, 1, 158, 211, 153, 21, 1, 158, 223, 236, 224, 255, 21, 1, 158, - 224, 170, 21, 1, 158, 231, 193, 21, 1, 158, 225, 39, 21, 1, 158, 227, - 249, 21, 1, 158, 227, 130, 21, 1, 158, 229, 81, 21, 1, 158, 230, 203, 21, - 1, 158, 224, 176, 21, 1, 158, 224, 255, 21, 1, 158, 206, 204, 21, 1, 158, - 225, 35, 21, 1, 158, 223, 239, 21, 1, 158, 223, 231, 21, 1, 158, 230, - 217, 224, 134, 21, 1, 158, 223, 237, 21, 1, 158, 225, 147, 21, 1, 158, - 228, 20, 223, 242, 21, 1, 158, 206, 109, 21, 1, 158, 225, 146, 21, 1, - 158, 215, 111, 21, 1, 158, 216, 27, 21, 1, 158, 227, 138, 21, 1, 158, - 228, 0, 21, 1, 158, 227, 148, 21, 1, 158, 231, 181, 21, 1, 158, 227, 139, - 21, 1, 158, 231, 185, 21, 1, 158, 227, 152, 221, 48, 21, 1, 158, 205, - 179, 21, 1, 158, 224, 166, 21, 1, 158, 226, 243, 21, 1, 158, 226, 112, - 21, 1, 158, 215, 166, 21, 1, 158, 231, 204, 230, 70, 21, 1, 158, 231, - 204, 242, 34, 21, 1, 158, 225, 69, 21, 1, 158, 225, 201, 21, 1, 158, 229, - 190, 21, 1, 158, 221, 9, 21, 1, 158, 221, 150, 21, 1, 158, 212, 80, 21, - 1, 123, 227, 128, 21, 1, 123, 207, 81, 21, 1, 123, 224, 164, 21, 1, 123, - 227, 40, 21, 1, 123, 224, 162, 21, 1, 123, 229, 229, 21, 1, 123, 224, - 167, 21, 1, 123, 223, 249, 21, 1, 123, 225, 53, 21, 1, 123, 223, 139, 21, - 1, 123, 206, 215, 21, 1, 123, 225, 7, 21, 1, 123, 215, 212, 21, 1, 123, - 225, 18, 21, 1, 123, 231, 188, 21, 1, 123, 212, 66, 21, 1, 123, 215, 192, - 21, 1, 123, 224, 175, 21, 1, 123, 213, 170, 21, 1, 123, 231, 193, 21, 1, - 123, 206, 97, 21, 1, 123, 230, 218, 21, 1, 123, 217, 141, 21, 1, 123, - 227, 45, 21, 1, 123, 225, 138, 21, 1, 123, 227, 224, 21, 1, 123, 227, 51, - 21, 1, 123, 216, 26, 21, 1, 123, 206, 42, 21, 1, 123, 224, 169, 21, 1, - 123, 231, 184, 227, 131, 21, 1, 123, 225, 14, 21, 1, 123, 210, 170, 21, - 1, 123, 240, 98, 21, 1, 123, 225, 4, 21, 1, 123, 242, 0, 21, 1, 123, 225, - 142, 21, 1, 123, 227, 24, 21, 1, 123, 230, 0, 21, 1, 123, 225, 124, 21, - 1, 123, 226, 165, 21, 1, 123, 227, 28, 21, 1, 123, 220, 49, 21, 1, 123, - 227, 26, 21, 1, 123, 227, 42, 21, 1, 123, 229, 65, 21, 1, 123, 223, 241, - 21, 1, 123, 227, 151, 21, 1, 123, 230, 193, 21, 1, 123, 223, 128, 21, 1, - 123, 212, 69, 21, 1, 123, 214, 168, 21, 1, 123, 205, 179, 21, 1, 123, - 231, 185, 21, 1, 123, 219, 94, 21, 1, 123, 212, 119, 21, 1, 123, 225, 15, - 21, 1, 123, 227, 47, 21, 1, 123, 223, 240, 21, 1, 123, 231, 183, 21, 1, - 123, 221, 3, 21, 1, 123, 221, 98, 21, 1, 123, 223, 102, 21, 1, 123, 230, - 6, 21, 1, 123, 225, 54, 21, 1, 123, 227, 44, 21, 1, 123, 225, 27, 21, 1, - 123, 205, 193, 21, 1, 123, 221, 236, 21, 1, 123, 205, 192, 21, 1, 123, - 225, 147, 21, 1, 123, 223, 230, 21, 1, 123, 213, 200, 21, 1, 123, 230, - 222, 21, 1, 123, 225, 43, 21, 1, 123, 225, 12, 21, 1, 123, 210, 153, 21, - 1, 123, 227, 55, 21, 1, 123, 230, 212, 21, 1, 123, 223, 238, 21, 1, 123, - 212, 67, 21, 1, 123, 227, 251, 21, 1, 123, 225, 52, 21, 1, 123, 229, 255, - 21, 1, 123, 225, 33, 21, 1, 123, 223, 243, 21, 1, 123, 224, 148, 21, 1, - 123, 240, 82, 21, 1, 123, 230, 236, 21, 1, 123, 219, 3, 222, 179, 21, 1, - 123, 212, 200, 21, 1, 123, 211, 98, 21, 1, 123, 223, 125, 21, 1, 123, - 218, 154, 21, 1, 123, 230, 49, 21, 1, 123, 227, 106, 21, 1, 123, 229, 28, - 21, 1, 123, 213, 119, 21, 1, 123, 226, 114, 21, 1, 123, 215, 178, 21, 1, - 123, 215, 188, 21, 1, 123, 230, 165, 21, 1, 123, 223, 217, 21, 1, 123, - 215, 116, 21, 1, 123, 223, 232, 21, 1, 123, 221, 164, 21, 1, 123, 224, - 230, 21, 1, 123, 215, 145, 21, 1, 123, 220, 64, 21, 1, 123, 226, 54, 21, - 1, 123, 229, 107, 21, 1, 123, 219, 3, 226, 107, 21, 1, 123, 211, 211, 21, - 1, 123, 223, 219, 21, 1, 123, 227, 152, 195, 21, 1, 123, 217, 139, 21, 1, - 123, 242, 72, 21, 1, 88, 225, 146, 21, 1, 88, 211, 104, 21, 1, 88, 227, - 141, 21, 1, 88, 230, 89, 21, 1, 88, 208, 162, 21, 1, 88, 229, 113, 21, 1, - 88, 222, 51, 21, 1, 88, 214, 179, 21, 1, 88, 219, 69, 21, 1, 88, 223, - 245, 21, 1, 88, 225, 117, 21, 1, 88, 220, 79, 21, 1, 88, 212, 176, 21, 1, - 88, 225, 20, 21, 1, 88, 231, 8, 21, 1, 88, 206, 207, 21, 1, 88, 217, 74, - 21, 1, 88, 225, 44, 21, 1, 88, 222, 48, 21, 1, 88, 211, 105, 21, 1, 88, - 230, 216, 21, 1, 88, 229, 127, 21, 1, 88, 223, 248, 21, 1, 88, 224, 252, - 21, 1, 88, 228, 1, 21, 1, 88, 225, 13, 21, 1, 88, 224, 251, 21, 1, 88, - 223, 247, 21, 1, 88, 218, 152, 21, 1, 88, 224, 166, 21, 1, 88, 221, 162, - 21, 1, 88, 217, 196, 21, 1, 88, 225, 28, 21, 1, 88, 227, 34, 21, 1, 88, - 240, 76, 21, 1, 88, 225, 16, 21, 1, 88, 224, 177, 21, 1, 88, 227, 205, - 21, 1, 88, 229, 109, 21, 1, 88, 225, 49, 21, 1, 88, 225, 130, 21, 1, 88, - 212, 199, 223, 230, 21, 1, 88, 216, 28, 21, 1, 88, 220, 74, 21, 1, 88, - 225, 150, 214, 186, 21, 1, 88, 225, 36, 223, 139, 21, 1, 88, 206, 7, 21, - 1, 88, 240, 77, 21, 1, 88, 210, 169, 21, 1, 88, 206, 22, 21, 1, 88, 220, - 211, 21, 1, 88, 210, 158, 21, 1, 88, 231, 191, 21, 1, 88, 213, 199, 21, - 1, 88, 212, 68, 21, 1, 88, 208, 223, 21, 1, 88, 207, 33, 21, 1, 88, 230, - 138, 21, 1, 88, 220, 82, 21, 1, 88, 212, 210, 21, 1, 88, 240, 97, 21, 1, - 88, 225, 59, 21, 1, 88, 215, 191, 21, 1, 88, 227, 29, 21, 1, 88, 227, - 145, 21, 1, 88, 223, 89, 21, 1, 88, 224, 130, 21, 1, 88, 240, 181, 21, 1, - 88, 210, 159, 21, 1, 88, 230, 226, 21, 1, 88, 206, 73, 21, 1, 88, 223, - 126, 247, 208, 21, 1, 88, 205, 253, 21, 1, 88, 227, 46, 21, 1, 88, 225, - 135, 21, 1, 88, 221, 44, 21, 1, 88, 205, 198, 21, 1, 88, 230, 1, 21, 1, - 88, 241, 86, 21, 1, 88, 240, 180, 21, 1, 88, 225, 6, 21, 1, 88, 231, 193, - 21, 1, 88, 228, 4, 21, 1, 88, 225, 19, 21, 1, 88, 240, 83, 21, 1, 88, - 242, 73, 21, 1, 88, 223, 220, 21, 1, 88, 221, 99, 21, 1, 88, 206, 20, 21, - 1, 88, 225, 45, 21, 1, 88, 223, 126, 250, 5, 21, 1, 88, 223, 69, 21, 1, - 88, 220, 185, 21, 1, 88, 226, 243, 21, 1, 88, 241, 84, 21, 1, 88, 225, - 226, 21, 1, 88, 226, 112, 21, 1, 88, 240, 82, 21, 1, 88, 241, 89, 74, 21, - 1, 88, 226, 55, 21, 1, 88, 220, 78, 21, 1, 88, 225, 8, 21, 1, 88, 230, - 203, 21, 1, 88, 221, 41, 21, 1, 88, 223, 233, 21, 1, 88, 206, 21, 21, 1, - 88, 225, 29, 21, 1, 88, 222, 52, 221, 137, 21, 1, 88, 241, 89, 248, 236, - 21, 1, 88, 241, 155, 21, 1, 88, 224, 171, 21, 1, 88, 62, 21, 1, 88, 211, - 98, 21, 1, 88, 76, 21, 1, 88, 74, 21, 1, 88, 230, 87, 21, 1, 88, 222, 52, - 220, 219, 21, 1, 88, 212, 215, 21, 1, 88, 212, 163, 21, 1, 88, 225, 150, - 226, 42, 238, 54, 21, 1, 88, 215, 166, 21, 1, 88, 206, 17, 21, 1, 88, - 224, 245, 21, 1, 88, 205, 203, 21, 1, 88, 205, 230, 213, 99, 21, 1, 88, - 205, 230, 247, 77, 21, 1, 88, 205, 187, 21, 1, 88, 205, 195, 21, 1, 88, - 231, 179, 21, 1, 88, 221, 97, 21, 1, 88, 224, 172, 242, 246, 21, 1, 88, - 220, 75, 21, 1, 88, 206, 213, 21, 1, 88, 242, 21, 21, 1, 88, 209, 34, 21, - 1, 88, 229, 81, 21, 1, 88, 226, 254, 21, 1, 88, 218, 226, 21, 1, 88, 219, - 95, 21, 1, 88, 224, 244, 21, 1, 88, 225, 77, 21, 1, 88, 215, 158, 21, 1, - 88, 215, 145, 21, 1, 88, 241, 89, 219, 6, 21, 1, 88, 199, 21, 1, 88, 221, - 53, 21, 1, 88, 229, 107, 21, 1, 88, 231, 53, 21, 1, 88, 227, 83, 21, 1, - 88, 185, 21, 1, 88, 227, 202, 21, 1, 88, 212, 70, 21, 1, 88, 231, 123, - 21, 1, 88, 226, 168, 21, 1, 88, 212, 98, 21, 1, 88, 242, 43, 21, 1, 88, - 240, 70, 21, 1, 221, 82, 172, 21, 1, 221, 82, 71, 21, 1, 221, 82, 230, - 236, 21, 1, 221, 82, 243, 104, 21, 1, 221, 82, 219, 29, 21, 1, 221, 82, - 212, 200, 21, 1, 221, 82, 223, 125, 21, 1, 221, 82, 230, 141, 21, 1, 221, - 82, 218, 154, 21, 1, 221, 82, 218, 201, 21, 1, 221, 82, 227, 106, 21, 1, - 221, 82, 212, 215, 21, 1, 221, 82, 225, 149, 21, 1, 221, 82, 224, 178, - 21, 1, 221, 82, 229, 28, 21, 1, 221, 82, 213, 119, 21, 1, 221, 82, 215, - 178, 21, 1, 221, 82, 215, 80, 21, 1, 221, 82, 216, 24, 21, 1, 221, 82, - 230, 165, 21, 1, 221, 82, 231, 193, 21, 1, 221, 82, 223, 188, 21, 1, 221, - 82, 223, 217, 21, 1, 221, 82, 224, 149, 21, 1, 221, 82, 205, 229, 21, 1, - 221, 82, 215, 116, 21, 1, 221, 82, 190, 21, 1, 221, 82, 223, 251, 21, 1, - 221, 82, 221, 97, 21, 1, 221, 82, 223, 232, 21, 1, 221, 82, 206, 213, 21, - 1, 221, 82, 221, 164, 21, 1, 221, 82, 218, 50, 21, 1, 221, 82, 224, 230, - 21, 1, 221, 82, 218, 226, 21, 1, 221, 82, 231, 203, 21, 1, 221, 82, 225, - 5, 21, 1, 221, 82, 225, 56, 21, 1, 221, 82, 215, 158, 21, 1, 221, 82, - 220, 79, 21, 1, 221, 82, 241, 155, 21, 1, 221, 82, 207, 96, 21, 1, 221, - 82, 229, 235, 21, 1, 221, 82, 229, 107, 21, 1, 221, 82, 231, 53, 21, 1, - 221, 82, 227, 143, 21, 1, 221, 82, 219, 2, 21, 1, 221, 82, 185, 21, 1, - 221, 82, 226, 181, 21, 1, 221, 82, 227, 151, 21, 1, 221, 82, 212, 80, 21, - 1, 221, 82, 231, 15, 21, 1, 221, 82, 217, 159, 21, 1, 221, 82, 207, 147, - 226, 117, 1, 212, 219, 226, 117, 1, 225, 25, 226, 117, 1, 205, 247, 226, - 117, 1, 226, 211, 226, 117, 1, 250, 183, 226, 117, 1, 246, 145, 226, 117, - 1, 62, 226, 117, 1, 221, 78, 226, 117, 1, 231, 162, 226, 117, 1, 239, 98, - 226, 117, 1, 246, 121, 226, 117, 1, 248, 14, 226, 117, 1, 231, 223, 226, - 117, 1, 222, 180, 226, 117, 1, 228, 1, 226, 117, 1, 224, 199, 226, 117, - 1, 179, 226, 117, 1, 222, 152, 226, 117, 1, 76, 226, 117, 1, 218, 124, - 226, 117, 1, 215, 183, 226, 117, 1, 212, 40, 226, 117, 1, 243, 130, 226, - 117, 1, 207, 96, 226, 117, 1, 75, 226, 117, 1, 231, 53, 226, 117, 1, 230, - 95, 226, 117, 1, 230, 141, 226, 117, 1, 239, 131, 226, 117, 1, 218, 208, - 226, 117, 1, 212, 111, 226, 117, 18, 205, 85, 226, 117, 18, 102, 226, - 117, 18, 105, 226, 117, 18, 142, 226, 117, 18, 139, 226, 117, 18, 168, - 226, 117, 18, 184, 226, 117, 18, 195, 226, 117, 18, 193, 226, 117, 18, - 200, 226, 117, 246, 100, 226, 117, 50, 246, 100, 250, 110, 209, 67, 1, - 243, 24, 250, 110, 209, 67, 1, 172, 250, 110, 209, 67, 1, 217, 86, 250, - 110, 209, 67, 1, 242, 73, 250, 110, 209, 67, 1, 227, 146, 250, 110, 209, - 67, 1, 206, 8, 250, 110, 209, 67, 1, 240, 229, 250, 110, 209, 67, 1, 245, - 173, 250, 110, 209, 67, 1, 231, 14, 250, 110, 209, 67, 1, 232, 122, 250, - 110, 209, 67, 1, 238, 15, 250, 110, 209, 67, 1, 207, 96, 250, 110, 209, - 67, 1, 205, 19, 250, 110, 209, 67, 1, 240, 174, 250, 110, 209, 67, 1, - 245, 51, 250, 110, 209, 67, 1, 248, 148, 250, 110, 209, 67, 1, 209, 155, - 250, 110, 209, 67, 1, 124, 250, 110, 209, 67, 1, 250, 183, 250, 110, 209, - 67, 1, 207, 148, 250, 110, 209, 67, 1, 206, 46, 250, 110, 209, 67, 1, - 179, 250, 110, 209, 67, 1, 207, 93, 250, 110, 209, 67, 1, 62, 250, 110, - 209, 67, 1, 76, 250, 110, 209, 67, 1, 222, 152, 250, 110, 209, 67, 1, 71, - 250, 110, 209, 67, 1, 243, 104, 250, 110, 209, 67, 1, 75, 250, 110, 209, - 67, 1, 74, 250, 110, 209, 67, 36, 127, 211, 118, 250, 110, 209, 67, 36, - 114, 211, 118, 250, 110, 209, 67, 36, 226, 249, 211, 118, 250, 110, 209, - 67, 36, 229, 94, 211, 118, 250, 110, 209, 67, 36, 238, 250, 211, 118, - 250, 110, 209, 67, 241, 82, 213, 251, 112, 111, 22, 231, 220, 112, 111, - 22, 231, 216, 112, 111, 22, 231, 120, 112, 111, 22, 231, 88, 112, 111, - 22, 231, 241, 112, 111, 22, 231, 238, 112, 111, 22, 230, 227, 112, 111, - 22, 230, 200, 112, 111, 22, 231, 222, 112, 111, 22, 231, 177, 112, 111, - 22, 232, 40, 112, 111, 22, 232, 37, 112, 111, 22, 231, 32, 112, 111, 22, - 231, 29, 112, 111, 22, 231, 235, 112, 111, 22, 231, 233, 112, 111, 22, - 230, 229, 112, 111, 22, 230, 228, 112, 111, 22, 231, 50, 112, 111, 22, - 231, 18, 112, 111, 22, 231, 122, 112, 111, 22, 231, 121, 112, 111, 22, - 232, 55, 112, 111, 22, 231, 237, 112, 111, 22, 230, 191, 112, 111, 22, - 230, 182, 112, 111, 22, 232, 62, 112, 111, 22, 232, 56, 112, 111, 107, - 209, 45, 112, 111, 107, 223, 223, 112, 111, 107, 230, 75, 112, 111, 107, - 239, 80, 112, 111, 107, 224, 106, 112, 111, 107, 219, 60, 112, 111, 107, - 224, 133, 112, 111, 107, 219, 249, 112, 111, 107, 206, 61, 112, 111, 107, - 238, 234, 112, 111, 107, 227, 166, 112, 111, 107, 248, 86, 112, 111, 107, - 225, 154, 112, 111, 107, 238, 170, 112, 111, 107, 220, 227, 112, 111, - 107, 223, 228, 112, 111, 107, 225, 191, 112, 111, 107, 251, 184, 112, - 111, 107, 206, 177, 112, 111, 107, 248, 181, 112, 111, 141, 247, 239, - 210, 166, 112, 111, 141, 247, 239, 214, 193, 112, 111, 141, 247, 239, - 231, 195, 112, 111, 141, 247, 239, 231, 153, 112, 111, 141, 247, 239, - 213, 197, 112, 111, 141, 247, 239, 238, 137, 112, 111, 141, 247, 239, - 212, 150, 112, 111, 3, 208, 158, 211, 250, 112, 111, 3, 208, 158, 210, - 232, 248, 139, 112, 111, 3, 247, 239, 248, 77, 112, 111, 3, 208, 158, - 212, 18, 112, 111, 3, 208, 158, 242, 18, 112, 111, 3, 206, 135, 223, 218, - 112, 111, 3, 206, 135, 218, 210, 112, 111, 3, 206, 135, 211, 87, 112, - 111, 3, 206, 135, 242, 55, 112, 111, 3, 208, 158, 217, 68, 112, 111, 3, - 227, 105, 213, 201, 112, 111, 3, 208, 158, 224, 11, 112, 111, 3, 237, - 186, 206, 80, 112, 111, 3, 206, 176, 112, 111, 3, 247, 239, 210, 219, - 218, 114, 112, 111, 18, 205, 85, 112, 111, 18, 102, 112, 111, 18, 105, - 112, 111, 18, 142, 112, 111, 18, 139, 112, 111, 18, 168, 112, 111, 18, - 184, 112, 111, 18, 195, 112, 111, 18, 193, 112, 111, 18, 200, 112, 111, - 43, 212, 93, 112, 111, 43, 238, 28, 112, 111, 43, 212, 99, 211, 240, 112, - 111, 43, 226, 212, 112, 111, 43, 238, 30, 226, 212, 112, 111, 43, 212, - 99, 249, 226, 112, 111, 43, 211, 38, 112, 111, 3, 208, 158, 229, 76, 112, - 111, 3, 206, 132, 112, 111, 3, 238, 229, 112, 111, 3, 212, 9, 238, 229, - 112, 111, 3, 204, 250, 212, 51, 112, 111, 3, 238, 154, 112, 111, 3, 224, - 25, 112, 111, 3, 206, 168, 112, 111, 3, 223, 221, 112, 111, 3, 251, 168, - 112, 111, 3, 210, 103, 248, 138, 112, 111, 3, 227, 105, 210, 235, 112, - 111, 3, 212, 151, 112, 111, 3, 229, 104, 112, 111, 3, 226, 71, 112, 111, - 3, 247, 239, 239, 127, 229, 55, 223, 226, 223, 225, 112, 111, 3, 247, - 239, 247, 39, 210, 226, 112, 111, 3, 247, 239, 210, 101, 112, 111, 3, - 247, 239, 210, 102, 248, 2, 112, 111, 3, 247, 239, 220, 77, 246, 69, 112, - 111, 3, 247, 239, 224, 18, 211, 92, 112, 111, 247, 215, 3, 210, 230, 112, - 111, 247, 215, 3, 206, 48, 112, 111, 247, 215, 3, 229, 187, 112, 111, - 247, 215, 3, 230, 74, 112, 111, 247, 215, 3, 206, 131, 112, 111, 247, - 215, 3, 231, 33, 112, 111, 247, 215, 3, 239, 77, 112, 111, 247, 215, 3, - 226, 110, 112, 111, 247, 215, 3, 211, 251, 112, 111, 247, 215, 3, 210, - 240, 112, 111, 247, 215, 3, 221, 90, 112, 111, 247, 215, 3, 231, 165, - 112, 111, 247, 215, 3, 239, 117, 112, 111, 247, 215, 3, 209, 64, 112, - 111, 247, 215, 3, 242, 52, 112, 111, 247, 215, 3, 206, 87, 112, 111, 247, - 215, 3, 210, 213, 112, 111, 247, 215, 3, 230, 186, 112, 111, 247, 215, 3, - 207, 138, 104, 1, 179, 104, 1, 250, 183, 104, 1, 9, 179, 104, 1, 220, - 240, 104, 1, 185, 104, 1, 227, 1, 104, 1, 252, 19, 185, 104, 1, 242, 73, - 104, 1, 209, 70, 104, 1, 208, 215, 104, 1, 212, 219, 104, 1, 246, 145, - 104, 1, 9, 210, 208, 104, 1, 9, 212, 219, 104, 1, 210, 208, 104, 1, 246, - 54, 104, 1, 199, 104, 1, 224, 234, 104, 1, 9, 224, 103, 104, 1, 252, 19, - 199, 104, 1, 224, 103, 104, 1, 224, 89, 104, 1, 230, 141, 104, 1, 229, - 41, 104, 1, 229, 248, 104, 1, 229, 237, 104, 1, 211, 144, 104, 1, 245, - 59, 104, 1, 211, 136, 104, 1, 245, 58, 104, 1, 172, 104, 1, 240, 244, - 104, 1, 9, 172, 104, 1, 220, 19, 104, 1, 219, 252, 104, 1, 225, 77, 104, - 1, 225, 26, 104, 1, 252, 19, 225, 77, 104, 1, 155, 104, 1, 206, 181, 104, - 1, 240, 99, 104, 1, 240, 74, 104, 1, 210, 218, 104, 1, 243, 180, 104, 1, - 223, 144, 104, 1, 223, 127, 104, 1, 210, 233, 104, 1, 243, 190, 104, 1, - 9, 210, 233, 104, 1, 9, 243, 190, 104, 1, 219, 27, 210, 233, 104, 1, 216, - 2, 104, 1, 214, 96, 104, 1, 205, 81, 104, 1, 205, 10, 104, 1, 210, 243, - 104, 1, 243, 196, 104, 1, 9, 210, 243, 104, 1, 217, 199, 104, 1, 205, - 116, 104, 1, 205, 11, 104, 1, 204, 238, 104, 1, 204, 218, 104, 1, 252, - 19, 204, 238, 104, 1, 204, 210, 104, 1, 204, 217, 104, 1, 207, 96, 104, - 1, 252, 213, 104, 1, 239, 20, 104, 1, 225, 196, 104, 3, 251, 215, 104, 3, - 219, 27, 208, 168, 104, 3, 219, 27, 251, 215, 104, 22, 3, 62, 104, 22, 3, - 253, 164, 104, 22, 3, 252, 209, 104, 22, 3, 252, 122, 104, 22, 3, 252, - 114, 104, 22, 3, 76, 104, 22, 3, 222, 152, 104, 22, 3, 206, 250, 104, 22, - 3, 207, 129, 104, 22, 3, 75, 104, 22, 3, 243, 41, 104, 22, 3, 243, 28, - 104, 22, 3, 222, 204, 104, 22, 3, 74, 104, 22, 3, 237, 190, 104, 22, 3, - 237, 189, 104, 22, 3, 237, 188, 104, 22, 3, 232, 253, 104, 22, 3, 233, - 129, 104, 22, 3, 233, 102, 104, 22, 3, 232, 216, 104, 22, 3, 233, 42, - 104, 22, 3, 71, 104, 22, 3, 210, 18, 104, 22, 3, 210, 17, 104, 22, 3, - 210, 16, 104, 22, 3, 209, 162, 104, 22, 3, 210, 0, 104, 22, 3, 209, 221, - 104, 22, 3, 206, 123, 104, 22, 3, 206, 11, 104, 22, 3, 252, 248, 104, 22, - 3, 252, 244, 104, 22, 3, 242, 229, 104, 22, 3, 218, 93, 242, 229, 104, - 22, 3, 242, 235, 104, 22, 3, 218, 93, 242, 235, 104, 22, 3, 252, 205, - 104, 22, 3, 243, 90, 104, 22, 3, 251, 184, 104, 22, 3, 222, 97, 104, 22, - 3, 226, 33, 104, 22, 3, 225, 79, 104, 135, 218, 167, 104, 135, 211, 102, - 218, 167, 104, 135, 52, 104, 135, 55, 104, 1, 211, 116, 104, 1, 211, 115, - 104, 1, 211, 114, 104, 1, 211, 113, 104, 1, 211, 112, 104, 1, 211, 111, - 104, 1, 211, 110, 104, 1, 219, 27, 211, 117, 104, 1, 219, 27, 211, 116, - 104, 1, 219, 27, 211, 114, 104, 1, 219, 27, 211, 113, 104, 1, 219, 27, - 211, 112, 104, 1, 219, 27, 211, 110, 64, 1, 252, 19, 75, 161, 1, 252, 19, - 206, 52, 95, 1, 239, 155, 95, 1, 206, 195, 95, 1, 222, 67, 95, 1, 213, - 10, 95, 1, 242, 139, 95, 1, 232, 76, 95, 1, 149, 95, 1, 251, 150, 95, 1, - 246, 240, 95, 1, 209, 148, 95, 1, 241, 55, 95, 1, 137, 95, 1, 222, 68, - 226, 33, 95, 1, 246, 241, 182, 95, 1, 242, 140, 226, 33, 95, 1, 232, 77, - 229, 28, 95, 1, 219, 150, 182, 95, 1, 212, 58, 95, 1, 214, 223, 245, 193, - 95, 1, 245, 193, 95, 1, 231, 73, 95, 1, 214, 223, 232, 203, 95, 1, 238, - 238, 95, 1, 229, 249, 95, 1, 218, 213, 95, 1, 229, 28, 95, 1, 226, 33, - 95, 1, 232, 203, 95, 1, 182, 95, 1, 229, 29, 226, 33, 95, 1, 226, 34, - 229, 28, 95, 1, 232, 204, 229, 28, 95, 1, 218, 1, 232, 203, 95, 1, 229, - 29, 2, 245, 23, 95, 1, 226, 34, 2, 245, 23, 95, 1, 232, 204, 2, 245, 23, - 95, 1, 232, 204, 2, 177, 233, 26, 23, 52, 95, 1, 218, 1, 2, 245, 23, 95, - 1, 218, 1, 2, 67, 55, 95, 1, 229, 29, 182, 95, 1, 226, 34, 182, 95, 1, - 232, 204, 182, 95, 1, 218, 1, 182, 95, 1, 229, 29, 226, 34, 182, 95, 1, - 226, 34, 229, 29, 182, 95, 1, 232, 204, 229, 29, 182, 95, 1, 218, 1, 232, - 204, 182, 95, 1, 232, 204, 218, 1, 2, 245, 23, 95, 1, 232, 204, 226, 33, - 95, 1, 232, 204, 226, 34, 182, 95, 1, 218, 1, 213, 10, 95, 1, 218, 1, - 213, 11, 137, 95, 1, 218, 1, 222, 67, 95, 1, 218, 1, 222, 68, 137, 95, 1, - 213, 11, 182, 95, 1, 213, 11, 219, 150, 182, 95, 1, 207, 129, 95, 1, 207, - 30, 95, 1, 207, 130, 137, 95, 1, 218, 1, 226, 33, 95, 1, 218, 1, 229, 28, - 95, 1, 232, 77, 219, 150, 182, 95, 1, 241, 56, 219, 150, 182, 95, 1, 218, - 1, 232, 76, 95, 1, 218, 1, 232, 77, 137, 95, 1, 62, 95, 1, 214, 223, 222, - 78, 95, 1, 222, 230, 95, 1, 76, 95, 1, 252, 69, 95, 1, 74, 95, 1, 75, 95, - 1, 233, 129, 95, 1, 215, 144, 74, 95, 1, 209, 252, 95, 1, 243, 104, 95, - 1, 214, 223, 243, 92, 95, 1, 218, 108, 74, 95, 1, 214, 223, 243, 104, 95, - 1, 152, 74, 95, 1, 206, 52, 95, 1, 71, 95, 1, 242, 192, 95, 1, 206, 146, - 95, 1, 106, 226, 33, 95, 1, 152, 71, 95, 1, 218, 108, 71, 95, 1, 209, - 253, 95, 1, 214, 223, 71, 95, 1, 222, 149, 95, 1, 222, 78, 95, 1, 222, - 97, 95, 1, 207, 96, 95, 1, 206, 250, 95, 1, 207, 20, 95, 1, 207, 43, 95, - 1, 206, 225, 95, 1, 225, 198, 71, 95, 1, 225, 198, 76, 95, 1, 225, 198, - 74, 95, 1, 225, 198, 62, 95, 1, 221, 120, 252, 122, 95, 1, 221, 120, 252, - 136, 95, 1, 214, 223, 243, 41, 95, 1, 214, 223, 252, 122, 95, 1, 214, - 223, 222, 165, 95, 1, 115, 229, 28, 95, 252, 227, 47, 194, 217, 81, 95, - 252, 227, 226, 249, 194, 217, 81, 95, 252, 227, 48, 194, 217, 81, 95, - 252, 227, 114, 79, 217, 81, 95, 252, 227, 226, 249, 79, 217, 81, 95, 252, - 227, 127, 79, 217, 81, 95, 252, 227, 251, 190, 217, 81, 95, 252, 227, - 251, 190, 230, 37, 217, 81, 95, 252, 227, 251, 190, 212, 170, 95, 252, - 227, 251, 190, 212, 191, 95, 252, 227, 251, 190, 174, 109, 95, 252, 227, - 251, 190, 237, 225, 109, 95, 252, 227, 251, 190, 212, 171, 109, 95, 252, - 227, 127, 153, 95, 252, 227, 127, 211, 197, 153, 95, 252, 227, 127, 239, - 236, 95, 252, 227, 127, 152, 239, 236, 95, 252, 227, 127, 245, 23, 95, - 252, 227, 127, 247, 233, 95, 252, 227, 127, 229, 205, 95, 252, 227, 127, - 207, 64, 95, 252, 227, 127, 209, 22, 95, 252, 227, 114, 153, 95, 252, - 227, 114, 211, 197, 153, 95, 252, 227, 114, 239, 236, 95, 252, 227, 114, - 152, 239, 236, 95, 252, 227, 114, 245, 23, 95, 252, 227, 114, 247, 233, - 95, 252, 227, 114, 229, 205, 95, 252, 227, 114, 207, 64, 95, 252, 227, - 114, 209, 22, 95, 252, 227, 114, 45, 95, 3, 148, 2, 247, 59, 95, 212, 17, - 1, 217, 59, 95, 50, 83, 95, 220, 72, 248, 42, 241, 82, 213, 251, 215, - 131, 241, 135, 1, 222, 84, 215, 131, 241, 135, 247, 115, 222, 84, 215, - 131, 241, 135, 130, 214, 7, 215, 131, 241, 135, 120, 214, 7, 58, 30, 16, - 220, 86, 58, 30, 16, 246, 80, 58, 30, 16, 221, 124, 58, 30, 16, 222, 75, - 243, 72, 58, 30, 16, 222, 75, 245, 108, 58, 30, 16, 209, 57, 243, 72, 58, - 30, 16, 209, 57, 245, 108, 58, 30, 16, 231, 244, 58, 30, 16, 213, 27, 58, - 30, 16, 221, 223, 58, 30, 16, 205, 219, 58, 30, 16, 205, 220, 245, 108, - 58, 30, 16, 230, 253, 58, 30, 16, 252, 64, 243, 72, 58, 30, 16, 242, 163, - 243, 72, 58, 30, 16, 212, 109, 58, 30, 16, 231, 199, 58, 30, 16, 252, 54, - 58, 30, 16, 252, 55, 245, 108, 58, 30, 16, 213, 34, 58, 30, 16, 212, 0, - 58, 30, 16, 222, 176, 252, 17, 58, 30, 16, 240, 3, 252, 17, 58, 30, 16, - 220, 85, 58, 30, 16, 248, 102, 58, 30, 16, 209, 46, 58, 30, 16, 232, 225, - 252, 17, 58, 30, 16, 231, 201, 252, 17, 58, 30, 16, 231, 200, 252, 17, - 58, 30, 16, 217, 118, 58, 30, 16, 221, 213, 58, 30, 16, 214, 16, 252, 57, - 58, 30, 16, 222, 74, 252, 17, 58, 30, 16, 209, 56, 252, 17, 58, 30, 16, - 252, 58, 252, 17, 58, 30, 16, 252, 52, 58, 30, 16, 231, 63, 58, 30, 16, - 218, 220, 58, 30, 16, 221, 51, 252, 17, 58, 30, 16, 211, 173, 58, 30, 16, - 252, 120, 58, 30, 16, 217, 62, 58, 30, 16, 213, 37, 252, 17, 58, 30, 16, - 213, 37, 227, 64, 214, 14, 58, 30, 16, 222, 69, 252, 17, 58, 30, 16, 212, - 35, 58, 30, 16, 230, 24, 58, 30, 16, 243, 199, 58, 30, 16, 211, 53, 58, - 30, 16, 212, 82, 58, 30, 16, 231, 0, 58, 30, 16, 252, 64, 242, 163, 225, - 97, 58, 30, 16, 241, 90, 252, 17, 58, 30, 16, 233, 81, 58, 30, 16, 211, - 24, 252, 17, 58, 30, 16, 231, 247, 211, 23, 58, 30, 16, 221, 152, 58, 30, - 16, 220, 90, 58, 30, 16, 231, 34, 58, 30, 16, 248, 26, 252, 17, 58, 30, - 16, 219, 70, 58, 30, 16, 221, 226, 252, 17, 58, 30, 16, 221, 224, 252, - 17, 58, 30, 16, 237, 179, 58, 30, 16, 225, 208, 58, 30, 16, 221, 102, 58, - 30, 16, 231, 35, 252, 151, 58, 30, 16, 211, 24, 252, 151, 58, 30, 16, - 213, 245, 58, 30, 16, 239, 223, 58, 30, 16, 232, 225, 225, 97, 58, 30, - 16, 222, 176, 225, 97, 58, 30, 16, 222, 75, 225, 97, 58, 30, 16, 221, - 101, 58, 30, 16, 231, 19, 58, 30, 16, 221, 100, 58, 30, 16, 230, 255, 58, - 30, 16, 221, 153, 225, 97, 58, 30, 16, 231, 200, 225, 98, 252, 95, 58, - 30, 16, 231, 201, 225, 98, 252, 95, 58, 30, 16, 205, 217, 58, 30, 16, - 252, 55, 225, 97, 58, 30, 16, 252, 56, 213, 35, 225, 97, 58, 30, 16, 205, - 218, 58, 30, 16, 230, 254, 58, 30, 16, 243, 67, 58, 30, 16, 248, 103, 58, - 30, 16, 226, 221, 232, 224, 58, 30, 16, 209, 57, 225, 97, 58, 30, 16, - 221, 51, 225, 97, 58, 30, 16, 220, 91, 225, 97, 58, 30, 16, 222, 172, 58, - 30, 16, 252, 82, 58, 30, 16, 229, 38, 58, 30, 16, 221, 224, 225, 97, 58, - 30, 16, 221, 226, 225, 97, 58, 30, 16, 242, 197, 221, 225, 58, 30, 16, - 230, 163, 58, 30, 16, 252, 83, 58, 30, 16, 211, 24, 225, 97, 58, 30, 16, - 243, 70, 58, 30, 16, 213, 37, 225, 97, 58, 30, 16, 213, 28, 58, 30, 16, - 248, 26, 225, 97, 58, 30, 16, 242, 250, 58, 30, 16, 217, 63, 225, 97, 58, - 30, 16, 206, 162, 231, 63, 58, 30, 16, 211, 21, 58, 30, 16, 220, 92, 58, - 30, 16, 211, 25, 58, 30, 16, 211, 22, 58, 30, 16, 220, 89, 58, 30, 16, - 211, 20, 58, 30, 16, 220, 88, 58, 30, 16, 240, 2, 58, 30, 16, 252, 9, 58, - 30, 16, 242, 197, 252, 9, 58, 30, 16, 222, 69, 225, 97, 58, 30, 16, 212, - 34, 242, 209, 58, 30, 16, 212, 34, 242, 162, 58, 30, 16, 212, 36, 252, - 59, 58, 30, 16, 212, 28, 232, 42, 252, 51, 58, 30, 16, 231, 246, 58, 30, - 16, 243, 30, 58, 30, 16, 206, 14, 231, 243, 58, 30, 16, 206, 14, 252, 95, - 58, 30, 16, 214, 15, 58, 30, 16, 231, 64, 252, 95, 58, 30, 16, 245, 109, - 252, 17, 58, 30, 16, 231, 1, 252, 17, 58, 30, 16, 231, 1, 252, 151, 58, - 30, 16, 231, 1, 225, 97, 58, 30, 16, 252, 58, 225, 97, 58, 30, 16, 252, - 60, 58, 30, 16, 245, 108, 58, 30, 16, 211, 35, 58, 30, 16, 212, 73, 58, - 30, 16, 231, 23, 58, 30, 16, 230, 29, 243, 23, 248, 16, 58, 30, 16, 230, - 29, 243, 200, 248, 17, 58, 30, 16, 230, 29, 211, 37, 248, 17, 58, 30, 16, - 230, 29, 212, 84, 248, 17, 58, 30, 16, 230, 29, 233, 76, 248, 16, 58, 30, - 16, 240, 3, 225, 98, 252, 95, 58, 30, 16, 240, 3, 221, 214, 252, 5, 58, - 30, 16, 240, 3, 221, 214, 245, 197, 58, 30, 16, 245, 132, 58, 30, 16, - 245, 133, 221, 214, 252, 6, 231, 243, 58, 30, 16, 245, 133, 221, 214, - 252, 6, 252, 95, 58, 30, 16, 245, 133, 221, 214, 245, 197, 58, 30, 16, - 211, 42, 58, 30, 16, 252, 10, 58, 30, 16, 233, 83, 58, 30, 16, 245, 154, - 58, 30, 16, 252, 215, 220, 194, 252, 11, 58, 30, 16, 252, 215, 252, 8, - 58, 30, 16, 252, 215, 252, 11, 58, 30, 16, 252, 215, 227, 58, 58, 30, 16, - 252, 215, 227, 69, 58, 30, 16, 252, 215, 240, 4, 58, 30, 16, 252, 215, - 240, 1, 58, 30, 16, 252, 215, 220, 194, 240, 4, 58, 30, 16, 227, 183, - 220, 98, 237, 177, 58, 30, 16, 227, 183, 252, 153, 220, 98, 237, 177, 58, - 30, 16, 227, 183, 245, 196, 237, 177, 58, 30, 16, 227, 183, 252, 153, - 245, 196, 237, 177, 58, 30, 16, 227, 183, 211, 30, 237, 177, 58, 30, 16, - 227, 183, 211, 43, 58, 30, 16, 227, 183, 212, 78, 237, 177, 58, 30, 16, - 227, 183, 212, 78, 230, 33, 237, 177, 58, 30, 16, 227, 183, 230, 33, 237, - 177, 58, 30, 16, 227, 183, 220, 237, 237, 177, 58, 30, 16, 232, 232, 212, - 102, 237, 178, 58, 30, 16, 252, 56, 212, 102, 237, 178, 58, 30, 16, 242, - 46, 212, 75, 58, 30, 16, 242, 46, 226, 161, 58, 30, 16, 242, 46, 245, - 137, 58, 30, 16, 227, 183, 209, 50, 237, 177, 58, 30, 16, 227, 183, 220, - 97, 237, 177, 58, 30, 16, 227, 183, 220, 237, 212, 78, 237, 177, 58, 30, - 16, 239, 255, 226, 34, 252, 59, 58, 30, 16, 239, 255, 226, 34, 245, 107, - 58, 30, 16, 243, 39, 232, 42, 241, 90, 208, 156, 58, 30, 16, 233, 82, 58, - 30, 16, 233, 80, 58, 30, 16, 241, 90, 252, 18, 245, 195, 237, 176, 58, - 30, 16, 241, 90, 245, 152, 179, 58, 30, 16, 241, 90, 245, 152, 225, 208, - 58, 30, 16, 241, 90, 225, 203, 237, 177, 58, 30, 16, 241, 90, 245, 152, - 245, 168, 58, 30, 16, 241, 90, 214, 242, 245, 151, 245, 168, 58, 30, 16, - 241, 90, 245, 152, 231, 224, 58, 30, 16, 241, 90, 245, 152, 205, 19, 58, - 30, 16, 241, 90, 245, 152, 224, 231, 231, 243, 58, 30, 16, 241, 90, 245, - 152, 224, 231, 252, 95, 58, 30, 16, 241, 90, 227, 227, 248, 18, 245, 137, - 58, 30, 16, 241, 90, 227, 227, 248, 18, 226, 161, 58, 30, 16, 241, 251, - 214, 242, 248, 18, 209, 49, 58, 30, 16, 241, 90, 214, 242, 248, 18, 213, - 38, 58, 30, 16, 241, 90, 225, 100, 58, 30, 16, 248, 19, 204, 244, 58, 30, - 16, 248, 19, 231, 62, 58, 30, 16, 248, 19, 214, 144, 58, 30, 16, 241, 90, - 237, 225, 206, 13, 212, 79, 58, 30, 16, 241, 90, 243, 40, 252, 84, 58, - 30, 16, 206, 13, 211, 31, 58, 30, 16, 245, 145, 211, 31, 58, 30, 16, 245, - 145, 212, 79, 58, 30, 16, 245, 145, 252, 61, 243, 200, 245, 43, 58, 30, - 16, 245, 145, 226, 159, 212, 83, 245, 43, 58, 30, 16, 245, 145, 245, 129, - 242, 173, 245, 43, 58, 30, 16, 245, 145, 211, 40, 222, 182, 245, 43, 58, - 30, 16, 206, 13, 252, 61, 243, 200, 245, 43, 58, 30, 16, 206, 13, 226, - 159, 212, 83, 245, 43, 58, 30, 16, 206, 13, 245, 129, 242, 173, 245, 43, - 58, 30, 16, 206, 13, 211, 40, 222, 182, 245, 43, 58, 30, 16, 240, 155, - 245, 144, 58, 30, 16, 240, 155, 206, 12, 58, 30, 16, 245, 153, 252, 61, - 226, 222, 58, 30, 16, 245, 153, 252, 61, 227, 98, 58, 30, 16, 245, 153, - 245, 108, 58, 30, 16, 245, 153, 212, 26, 58, 30, 16, 215, 49, 212, 26, - 58, 30, 16, 215, 49, 212, 27, 245, 93, 58, 30, 16, 215, 49, 212, 27, 211, - 32, 58, 30, 16, 215, 49, 212, 27, 212, 71, 58, 30, 16, 215, 49, 251, 238, - 58, 30, 16, 215, 49, 251, 239, 245, 93, 58, 30, 16, 215, 49, 251, 239, - 211, 32, 58, 30, 16, 215, 49, 251, 239, 212, 71, 58, 30, 16, 245, 130, - 240, 136, 58, 30, 16, 245, 136, 222, 97, 58, 30, 16, 214, 5, 58, 30, 16, - 252, 2, 179, 58, 30, 16, 252, 2, 208, 156, 58, 30, 16, 252, 2, 240, 244, - 58, 30, 16, 252, 2, 245, 168, 58, 30, 16, 252, 2, 231, 224, 58, 30, 16, - 252, 2, 205, 19, 58, 30, 16, 252, 2, 224, 230, 58, 30, 16, 231, 200, 225, - 98, 227, 68, 58, 30, 16, 231, 201, 225, 98, 227, 68, 58, 30, 16, 231, - 200, 225, 98, 231, 243, 58, 30, 16, 231, 201, 225, 98, 231, 243, 58, 30, - 16, 231, 64, 231, 243, 58, 30, 16, 240, 3, 225, 98, 231, 243, 30, 16, - 215, 41, 250, 124, 30, 16, 50, 250, 124, 30, 16, 42, 250, 124, 30, 16, - 218, 225, 42, 250, 124, 30, 16, 246, 77, 250, 124, 30, 16, 215, 144, 250, - 124, 30, 16, 47, 218, 252, 53, 30, 16, 48, 218, 252, 53, 30, 16, 218, - 252, 245, 21, 30, 16, 246, 118, 217, 66, 30, 16, 246, 146, 248, 210, 30, - 16, 217, 66, 30, 16, 247, 170, 30, 16, 218, 250, 241, 240, 30, 16, 218, - 250, 241, 239, 30, 16, 218, 250, 241, 238, 30, 16, 242, 4, 30, 16, 242, - 5, 55, 30, 16, 249, 124, 83, 30, 16, 248, 247, 30, 16, 249, 135, 30, 16, - 145, 30, 16, 222, 162, 214, 34, 30, 16, 210, 107, 214, 34, 30, 16, 211, - 236, 214, 34, 30, 16, 241, 124, 214, 34, 30, 16, 241, 203, 214, 34, 30, - 16, 215, 9, 214, 34, 30, 16, 215, 7, 241, 105, 30, 16, 241, 122, 241, - 105, 30, 16, 241, 56, 247, 206, 30, 16, 241, 56, 247, 207, 222, 99, 252, - 142, 30, 16, 241, 56, 247, 207, 222, 99, 250, 109, 30, 16, 249, 35, 247, - 206, 30, 16, 242, 140, 247, 206, 30, 16, 242, 140, 247, 207, 222, 99, - 252, 142, 30, 16, 242, 140, 247, 207, 222, 99, 250, 109, 30, 16, 243, - 242, 247, 205, 30, 16, 243, 242, 247, 204, 30, 16, 226, 95, 227, 118, - 218, 236, 30, 16, 50, 215, 227, 30, 16, 50, 241, 187, 30, 16, 241, 188, - 209, 206, 30, 16, 241, 188, 244, 8, 30, 16, 225, 192, 209, 206, 30, 16, - 225, 192, 244, 8, 30, 16, 215, 228, 209, 206, 30, 16, 215, 228, 244, 8, - 30, 16, 219, 205, 135, 215, 227, 30, 16, 219, 205, 135, 241, 187, 30, 16, - 247, 152, 211, 177, 30, 16, 247, 11, 211, 177, 30, 16, 222, 99, 252, 142, - 30, 16, 222, 99, 250, 109, 30, 16, 219, 186, 252, 142, 30, 16, 219, 186, - 250, 109, 30, 16, 226, 98, 218, 236, 30, 16, 207, 21, 218, 236, 30, 16, - 160, 218, 236, 30, 16, 219, 205, 218, 236, 30, 16, 243, 84, 218, 236, 30, - 16, 215, 3, 218, 236, 30, 16, 212, 1, 218, 236, 30, 16, 214, 251, 218, - 236, 30, 16, 119, 238, 30, 210, 121, 218, 236, 30, 16, 206, 196, 224, 33, - 30, 16, 101, 224, 33, 30, 16, 247, 234, 206, 196, 224, 33, 30, 16, 49, - 224, 34, 207, 23, 30, 16, 49, 224, 34, 249, 202, 30, 16, 211, 52, 224, - 34, 120, 207, 23, 30, 16, 211, 52, 224, 34, 120, 249, 202, 30, 16, 211, - 52, 224, 34, 47, 207, 23, 30, 16, 211, 52, 224, 34, 47, 249, 202, 30, 16, - 211, 52, 224, 34, 48, 207, 23, 30, 16, 211, 52, 224, 34, 48, 249, 202, - 30, 16, 211, 52, 224, 34, 130, 207, 23, 30, 16, 211, 52, 224, 34, 130, - 249, 202, 30, 16, 211, 52, 224, 34, 120, 48, 207, 23, 30, 16, 211, 52, - 224, 34, 120, 48, 249, 202, 30, 16, 226, 145, 224, 34, 207, 23, 30, 16, - 226, 145, 224, 34, 249, 202, 30, 16, 211, 49, 224, 34, 130, 207, 23, 30, - 16, 211, 49, 224, 34, 130, 249, 202, 30, 16, 221, 217, 224, 33, 30, 16, - 208, 167, 224, 33, 30, 16, 224, 34, 249, 202, 30, 16, 223, 182, 224, 33, - 30, 16, 247, 177, 224, 34, 207, 23, 30, 16, 247, 177, 224, 34, 249, 202, - 30, 16, 249, 122, 30, 16, 207, 21, 224, 37, 30, 16, 160, 224, 37, 30, 16, - 219, 205, 224, 37, 30, 16, 243, 84, 224, 37, 30, 16, 215, 3, 224, 37, 30, - 16, 212, 1, 224, 37, 30, 16, 214, 251, 224, 37, 30, 16, 119, 238, 30, - 210, 121, 224, 37, 30, 16, 36, 214, 9, 30, 16, 36, 214, 114, 214, 9, 30, - 16, 36, 211, 60, 30, 16, 36, 211, 59, 30, 16, 36, 211, 58, 30, 16, 241, - 226, 211, 60, 30, 16, 241, 226, 211, 59, 30, 16, 241, 226, 211, 58, 30, - 16, 36, 251, 181, 245, 23, 30, 16, 36, 241, 195, 30, 16, 36, 241, 194, - 30, 16, 36, 241, 193, 30, 16, 36, 241, 192, 30, 16, 36, 241, 191, 30, 16, - 250, 42, 250, 59, 30, 16, 243, 34, 250, 59, 30, 16, 250, 42, 211, 203, - 30, 16, 243, 34, 211, 203, 30, 16, 250, 42, 214, 216, 30, 16, 243, 34, - 214, 216, 30, 16, 250, 42, 221, 60, 30, 16, 243, 34, 221, 60, 30, 16, 36, - 253, 21, 30, 16, 36, 214, 37, 30, 16, 36, 212, 88, 30, 16, 36, 214, 38, - 30, 16, 36, 227, 195, 30, 16, 36, 227, 194, 30, 16, 36, 253, 20, 30, 16, - 36, 229, 99, 30, 16, 251, 249, 209, 206, 30, 16, 251, 249, 244, 8, 30, - 16, 36, 245, 38, 30, 16, 36, 218, 145, 30, 16, 36, 241, 179, 30, 16, 36, - 214, 212, 30, 16, 36, 250, 21, 30, 16, 36, 50, 211, 107, 30, 16, 36, 211, - 36, 211, 107, 30, 16, 218, 150, 30, 16, 213, 193, 30, 16, 205, 159, 30, - 16, 221, 52, 30, 16, 227, 49, 30, 16, 241, 132, 30, 16, 247, 67, 30, 16, - 245, 252, 30, 16, 239, 250, 224, 38, 214, 235, 30, 16, 239, 250, 224, 38, - 224, 68, 214, 235, 30, 16, 211, 84, 30, 16, 210, 144, 30, 16, 233, 2, - 210, 144, 30, 16, 210, 145, 214, 235, 30, 16, 210, 145, 209, 206, 30, 16, - 222, 112, 213, 224, 30, 16, 222, 112, 213, 221, 30, 16, 222, 112, 213, - 220, 30, 16, 222, 112, 213, 219, 30, 16, 222, 112, 213, 218, 30, 16, 222, - 112, 213, 217, 30, 16, 222, 112, 213, 216, 30, 16, 222, 112, 213, 215, - 30, 16, 222, 112, 213, 214, 30, 16, 222, 112, 213, 223, 30, 16, 222, 112, - 213, 222, 30, 16, 239, 79, 30, 16, 225, 108, 30, 16, 243, 34, 73, 214, 1, - 30, 16, 245, 245, 214, 235, 30, 16, 36, 130, 249, 146, 30, 16, 36, 120, - 249, 146, 30, 16, 36, 239, 91, 30, 16, 36, 214, 203, 220, 241, 30, 16, - 221, 169, 83, 30, 16, 221, 169, 120, 83, 30, 16, 160, 221, 169, 83, 30, - 16, 240, 27, 209, 206, 30, 16, 240, 27, 244, 8, 30, 16, 2, 241, 225, 30, - 16, 246, 102, 30, 16, 246, 103, 252, 156, 30, 16, 227, 164, 30, 16, 229, - 117, 30, 16, 249, 119, 30, 16, 216, 56, 207, 23, 30, 16, 216, 56, 249, - 202, 30, 16, 226, 205, 30, 16, 226, 206, 249, 202, 30, 16, 216, 50, 207, - 23, 30, 16, 216, 50, 249, 202, 30, 16, 241, 73, 207, 23, 30, 16, 241, 73, - 249, 202, 30, 16, 229, 118, 221, 129, 218, 236, 30, 16, 229, 118, 233, - 73, 218, 236, 30, 16, 249, 120, 218, 236, 30, 16, 216, 56, 218, 236, 30, - 16, 226, 206, 218, 236, 30, 16, 216, 50, 218, 236, 30, 16, 212, 100, 221, - 127, 247, 34, 220, 107, 221, 128, 30, 16, 212, 100, 221, 127, 247, 34, - 220, 107, 233, 72, 30, 16, 212, 100, 221, 127, 247, 34, 220, 107, 221, - 129, 245, 118, 30, 16, 212, 100, 233, 71, 247, 34, 220, 107, 221, 128, - 30, 16, 212, 100, 233, 71, 247, 34, 220, 107, 233, 72, 30, 16, 212, 100, - 233, 71, 247, 34, 220, 107, 233, 73, 245, 118, 30, 16, 212, 100, 233, 71, - 247, 34, 220, 107, 233, 73, 245, 117, 30, 16, 212, 100, 233, 71, 247, 34, - 220, 107, 233, 73, 245, 116, 30, 16, 247, 62, 30, 16, 239, 226, 249, 35, - 247, 206, 30, 16, 239, 226, 242, 140, 247, 206, 30, 16, 49, 251, 150, 30, - 16, 208, 187, 30, 16, 220, 208, 30, 16, 247, 197, 30, 16, 217, 108, 30, - 16, 247, 201, 30, 16, 211, 95, 30, 16, 220, 180, 30, 16, 220, 181, 241, - 181, 30, 16, 217, 109, 241, 181, 30, 16, 211, 96, 218, 233, 30, 16, 221, - 110, 213, 184, 27, 208, 172, 224, 41, 213, 88, 27, 208, 172, 224, 41, - 213, 77, 27, 208, 172, 224, 41, 213, 67, 27, 208, 172, 224, 41, 213, 60, - 27, 208, 172, 224, 41, 213, 52, 27, 208, 172, 224, 41, 213, 46, 27, 208, - 172, 224, 41, 213, 45, 27, 208, 172, 224, 41, 213, 44, 27, 208, 172, 224, - 41, 213, 43, 27, 208, 172, 224, 41, 213, 87, 27, 208, 172, 224, 41, 213, - 86, 27, 208, 172, 224, 41, 213, 85, 27, 208, 172, 224, 41, 213, 84, 27, - 208, 172, 224, 41, 213, 83, 27, 208, 172, 224, 41, 213, 82, 27, 208, 172, - 224, 41, 213, 81, 27, 208, 172, 224, 41, 213, 80, 27, 208, 172, 224, 41, - 213, 79, 27, 208, 172, 224, 41, 213, 78, 27, 208, 172, 224, 41, 213, 76, - 27, 208, 172, 224, 41, 213, 75, 27, 208, 172, 224, 41, 213, 74, 27, 208, - 172, 224, 41, 213, 73, 27, 208, 172, 224, 41, 213, 72, 27, 208, 172, 224, - 41, 213, 51, 27, 208, 172, 224, 41, 213, 50, 27, 208, 172, 224, 41, 213, - 49, 27, 208, 172, 224, 41, 213, 48, 27, 208, 172, 224, 41, 213, 47, 27, - 233, 24, 224, 41, 213, 88, 27, 233, 24, 224, 41, 213, 77, 27, 233, 24, - 224, 41, 213, 60, 27, 233, 24, 224, 41, 213, 52, 27, 233, 24, 224, 41, - 213, 45, 27, 233, 24, 224, 41, 213, 44, 27, 233, 24, 224, 41, 213, 86, - 27, 233, 24, 224, 41, 213, 85, 27, 233, 24, 224, 41, 213, 84, 27, 233, - 24, 224, 41, 213, 83, 27, 233, 24, 224, 41, 213, 80, 27, 233, 24, 224, - 41, 213, 79, 27, 233, 24, 224, 41, 213, 78, 27, 233, 24, 224, 41, 213, - 73, 27, 233, 24, 224, 41, 213, 72, 27, 233, 24, 224, 41, 213, 71, 27, - 233, 24, 224, 41, 213, 70, 27, 233, 24, 224, 41, 213, 69, 27, 233, 24, - 224, 41, 213, 68, 27, 233, 24, 224, 41, 213, 66, 27, 233, 24, 224, 41, - 213, 65, 27, 233, 24, 224, 41, 213, 64, 27, 233, 24, 224, 41, 213, 63, - 27, 233, 24, 224, 41, 213, 62, 27, 233, 24, 224, 41, 213, 61, 27, 233, - 24, 224, 41, 213, 59, 27, 233, 24, 224, 41, 213, 58, 27, 233, 24, 224, - 41, 213, 57, 27, 233, 24, 224, 41, 213, 56, 27, 233, 24, 224, 41, 213, - 55, 27, 233, 24, 224, 41, 213, 54, 27, 233, 24, 224, 41, 213, 53, 27, - 233, 24, 224, 41, 213, 51, 27, 233, 24, 224, 41, 213, 50, 27, 233, 24, - 224, 41, 213, 49, 27, 233, 24, 224, 41, 213, 48, 27, 233, 24, 224, 41, - 213, 47, 36, 27, 30, 211, 33, 36, 27, 30, 212, 72, 36, 27, 30, 221, 138, - 27, 30, 230, 28, 226, 160, 33, 243, 120, 245, 131, 33, 239, 55, 243, 120, - 245, 131, 33, 238, 33, 243, 120, 245, 131, 33, 243, 119, 239, 56, 245, - 131, 33, 243, 119, 238, 32, 245, 131, 33, 243, 120, 212, 74, 33, 248, - 128, 212, 74, 33, 241, 82, 247, 233, 212, 74, 33, 226, 197, 212, 74, 33, - 250, 119, 212, 74, 33, 231, 218, 214, 215, 212, 74, 33, 247, 110, 212, - 74, 33, 251, 227, 212, 74, 33, 222, 128, 212, 74, 33, 249, 129, 222, 93, - 212, 74, 33, 245, 247, 222, 123, 245, 86, 212, 74, 33, 245, 83, 212, 74, - 33, 205, 225, 212, 74, 33, 233, 59, 212, 74, 33, 221, 148, 212, 74, 33, - 219, 50, 212, 74, 33, 247, 121, 212, 74, 33, 238, 141, 250, 176, 212, 74, - 33, 207, 89, 212, 74, 33, 241, 157, 212, 74, 33, 252, 251, 212, 74, 33, - 219, 9, 212, 74, 33, 218, 240, 212, 74, 33, 243, 118, 212, 74, 33, 232, - 107, 212, 74, 33, 247, 116, 212, 74, 33, 243, 33, 212, 74, 33, 243, 211, - 212, 74, 33, 248, 98, 212, 74, 33, 246, 1, 212, 74, 33, 24, 218, 239, - 212, 74, 33, 222, 43, 212, 74, 33, 230, 32, 212, 74, 33, 247, 190, 212, - 74, 33, 231, 105, 212, 74, 33, 240, 194, 212, 74, 33, 213, 234, 212, 74, - 33, 220, 61, 212, 74, 33, 241, 81, 212, 74, 33, 218, 241, 212, 74, 33, - 230, 71, 222, 123, 226, 177, 212, 74, 33, 218, 237, 212, 74, 33, 240, 13, - 211, 130, 227, 102, 212, 74, 33, 243, 35, 212, 74, 33, 213, 246, 212, 74, - 33, 239, 228, 212, 74, 33, 243, 26, 212, 74, 33, 221, 190, 212, 74, 33, - 218, 139, 212, 74, 33, 241, 180, 212, 74, 33, 209, 48, 222, 123, 207, 73, - 212, 74, 33, 247, 126, 212, 74, 33, 227, 117, 212, 74, 33, 242, 198, 212, - 74, 33, 209, 215, 212, 74, 33, 245, 119, 212, 74, 33, 247, 192, 226, 123, - 212, 74, 33, 239, 205, 212, 74, 33, 240, 195, 233, 68, 212, 74, 33, 227, - 172, 212, 74, 33, 253, 16, 212, 74, 33, 243, 48, 212, 74, 33, 244, 12, - 212, 74, 33, 207, 71, 212, 74, 33, 215, 36, 212, 74, 33, 233, 33, 212, - 74, 33, 245, 215, 212, 74, 33, 246, 82, 212, 74, 33, 245, 115, 212, 74, - 33, 242, 166, 212, 74, 33, 216, 16, 212, 74, 33, 213, 250, 212, 74, 33, - 239, 93, 212, 74, 33, 247, 148, 212, 74, 33, 247, 187, 212, 74, 33, 242, - 53, 212, 74, 33, 252, 216, 212, 74, 33, 247, 147, 212, 74, 33, 222, 166, - 212, 42, 209, 25, 212, 74, 33, 245, 139, 212, 74, 33, 230, 129, 212, 74, - 33, 241, 128, 247, 79, 218, 115, 209, 217, 18, 102, 247, 79, 218, 115, - 209, 217, 18, 105, 247, 79, 218, 115, 209, 217, 18, 142, 247, 79, 218, - 115, 209, 217, 18, 139, 247, 79, 218, 115, 209, 217, 18, 168, 247, 79, - 218, 115, 209, 217, 18, 184, 247, 79, 218, 115, 209, 217, 18, 195, 247, - 79, 218, 115, 209, 217, 18, 193, 247, 79, 218, 115, 209, 217, 18, 200, - 247, 79, 218, 115, 212, 94, 18, 102, 247, 79, 218, 115, 212, 94, 18, 105, - 247, 79, 218, 115, 212, 94, 18, 142, 247, 79, 218, 115, 212, 94, 18, 139, - 247, 79, 218, 115, 212, 94, 18, 168, 247, 79, 218, 115, 212, 94, 18, 184, - 247, 79, 218, 115, 212, 94, 18, 195, 247, 79, 218, 115, 212, 94, 18, 193, - 247, 79, 218, 115, 212, 94, 18, 200, 11, 24, 6, 62, 11, 24, 6, 251, 150, - 11, 24, 6, 249, 34, 11, 24, 6, 246, 240, 11, 24, 6, 75, 11, 24, 6, 242, - 139, 11, 24, 6, 241, 55, 11, 24, 6, 239, 155, 11, 24, 6, 74, 11, 24, 6, - 232, 203, 11, 24, 6, 232, 76, 11, 24, 6, 149, 11, 24, 6, 229, 28, 11, 24, - 6, 226, 33, 11, 24, 6, 76, 11, 24, 6, 222, 67, 11, 24, 6, 220, 27, 11, - 24, 6, 137, 11, 24, 6, 182, 11, 24, 6, 213, 10, 11, 24, 6, 71, 11, 24, 6, - 209, 148, 11, 24, 6, 207, 129, 11, 24, 6, 206, 195, 11, 24, 6, 206, 123, - 11, 24, 6, 205, 159, 11, 24, 5, 62, 11, 24, 5, 251, 150, 11, 24, 5, 249, - 34, 11, 24, 5, 246, 240, 11, 24, 5, 75, 11, 24, 5, 242, 139, 11, 24, 5, - 241, 55, 11, 24, 5, 239, 155, 11, 24, 5, 74, 11, 24, 5, 232, 203, 11, 24, - 5, 232, 76, 11, 24, 5, 149, 11, 24, 5, 229, 28, 11, 24, 5, 226, 33, 11, - 24, 5, 76, 11, 24, 5, 222, 67, 11, 24, 5, 220, 27, 11, 24, 5, 137, 11, - 24, 5, 182, 11, 24, 5, 213, 10, 11, 24, 5, 71, 11, 24, 5, 209, 148, 11, - 24, 5, 207, 129, 11, 24, 5, 206, 195, 11, 24, 5, 206, 123, 11, 24, 5, - 205, 159, 11, 35, 6, 62, 11, 35, 6, 251, 150, 11, 35, 6, 249, 34, 11, 35, - 6, 246, 240, 11, 35, 6, 75, 11, 35, 6, 242, 139, 11, 35, 6, 241, 55, 11, - 35, 6, 239, 155, 11, 35, 6, 74, 11, 35, 6, 232, 203, 11, 35, 6, 232, 76, - 11, 35, 6, 149, 11, 35, 6, 229, 28, 11, 35, 6, 226, 33, 11, 35, 6, 76, - 11, 35, 6, 222, 67, 11, 35, 6, 220, 27, 11, 35, 6, 137, 11, 35, 6, 182, - 11, 35, 6, 213, 10, 11, 35, 6, 71, 11, 35, 6, 209, 148, 11, 35, 6, 207, - 129, 11, 35, 6, 206, 195, 11, 35, 6, 206, 123, 11, 35, 6, 205, 159, 11, - 35, 5, 62, 11, 35, 5, 251, 150, 11, 35, 5, 249, 34, 11, 35, 5, 246, 240, - 11, 35, 5, 75, 11, 35, 5, 242, 139, 11, 35, 5, 241, 55, 11, 35, 5, 74, - 11, 35, 5, 232, 203, 11, 35, 5, 232, 76, 11, 35, 5, 149, 11, 35, 5, 229, - 28, 11, 35, 5, 226, 33, 11, 35, 5, 76, 11, 35, 5, 222, 67, 11, 35, 5, - 220, 27, 11, 35, 5, 137, 11, 35, 5, 182, 11, 35, 5, 213, 10, 11, 35, 5, - 71, 11, 35, 5, 209, 148, 11, 35, 5, 207, 129, 11, 35, 5, 206, 195, 11, - 35, 5, 206, 123, 11, 35, 5, 205, 159, 11, 24, 35, 6, 62, 11, 24, 35, 6, - 251, 150, 11, 24, 35, 6, 249, 34, 11, 24, 35, 6, 246, 240, 11, 24, 35, 6, - 75, 11, 24, 35, 6, 242, 139, 11, 24, 35, 6, 241, 55, 11, 24, 35, 6, 239, - 155, 11, 24, 35, 6, 74, 11, 24, 35, 6, 232, 203, 11, 24, 35, 6, 232, 76, - 11, 24, 35, 6, 149, 11, 24, 35, 6, 229, 28, 11, 24, 35, 6, 226, 33, 11, - 24, 35, 6, 76, 11, 24, 35, 6, 222, 67, 11, 24, 35, 6, 220, 27, 11, 24, - 35, 6, 137, 11, 24, 35, 6, 182, 11, 24, 35, 6, 213, 10, 11, 24, 35, 6, - 71, 11, 24, 35, 6, 209, 148, 11, 24, 35, 6, 207, 129, 11, 24, 35, 6, 206, - 195, 11, 24, 35, 6, 206, 123, 11, 24, 35, 6, 205, 159, 11, 24, 35, 5, 62, - 11, 24, 35, 5, 251, 150, 11, 24, 35, 5, 249, 34, 11, 24, 35, 5, 246, 240, - 11, 24, 35, 5, 75, 11, 24, 35, 5, 242, 139, 11, 24, 35, 5, 241, 55, 11, - 24, 35, 5, 239, 155, 11, 24, 35, 5, 74, 11, 24, 35, 5, 232, 203, 11, 24, - 35, 5, 232, 76, 11, 24, 35, 5, 149, 11, 24, 35, 5, 229, 28, 11, 24, 35, - 5, 226, 33, 11, 24, 35, 5, 76, 11, 24, 35, 5, 222, 67, 11, 24, 35, 5, - 220, 27, 11, 24, 35, 5, 137, 11, 24, 35, 5, 182, 11, 24, 35, 5, 213, 10, - 11, 24, 35, 5, 71, 11, 24, 35, 5, 209, 148, 11, 24, 35, 5, 207, 129, 11, - 24, 35, 5, 206, 195, 11, 24, 35, 5, 206, 123, 11, 24, 35, 5, 205, 159, - 11, 121, 6, 62, 11, 121, 6, 249, 34, 11, 121, 6, 246, 240, 11, 121, 6, - 241, 55, 11, 121, 6, 232, 203, 11, 121, 6, 232, 76, 11, 121, 6, 226, 33, - 11, 121, 6, 76, 11, 121, 6, 222, 67, 11, 121, 6, 220, 27, 11, 121, 6, - 182, 11, 121, 6, 213, 10, 11, 121, 6, 71, 11, 121, 6, 209, 148, 11, 121, - 6, 207, 129, 11, 121, 6, 206, 195, 11, 121, 6, 206, 123, 11, 121, 6, 205, - 159, 11, 121, 5, 62, 11, 121, 5, 251, 150, 11, 121, 5, 249, 34, 11, 121, - 5, 246, 240, 11, 121, 5, 242, 139, 11, 121, 5, 239, 155, 11, 121, 5, 74, - 11, 121, 5, 232, 203, 11, 121, 5, 232, 76, 11, 121, 5, 149, 11, 121, 5, - 229, 28, 11, 121, 5, 226, 33, 11, 121, 5, 222, 67, 11, 121, 5, 220, 27, - 11, 121, 5, 137, 11, 121, 5, 182, 11, 121, 5, 213, 10, 11, 121, 5, 71, - 11, 121, 5, 209, 148, 11, 121, 5, 207, 129, 11, 121, 5, 206, 195, 11, - 121, 5, 206, 123, 11, 121, 5, 205, 159, 11, 24, 121, 6, 62, 11, 24, 121, - 6, 251, 150, 11, 24, 121, 6, 249, 34, 11, 24, 121, 6, 246, 240, 11, 24, - 121, 6, 75, 11, 24, 121, 6, 242, 139, 11, 24, 121, 6, 241, 55, 11, 24, - 121, 6, 239, 155, 11, 24, 121, 6, 74, 11, 24, 121, 6, 232, 203, 11, 24, - 121, 6, 232, 76, 11, 24, 121, 6, 149, 11, 24, 121, 6, 229, 28, 11, 24, - 121, 6, 226, 33, 11, 24, 121, 6, 76, 11, 24, 121, 6, 222, 67, 11, 24, - 121, 6, 220, 27, 11, 24, 121, 6, 137, 11, 24, 121, 6, 182, 11, 24, 121, - 6, 213, 10, 11, 24, 121, 6, 71, 11, 24, 121, 6, 209, 148, 11, 24, 121, 6, - 207, 129, 11, 24, 121, 6, 206, 195, 11, 24, 121, 6, 206, 123, 11, 24, - 121, 6, 205, 159, 11, 24, 121, 5, 62, 11, 24, 121, 5, 251, 150, 11, 24, - 121, 5, 249, 34, 11, 24, 121, 5, 246, 240, 11, 24, 121, 5, 75, 11, 24, - 121, 5, 242, 139, 11, 24, 121, 5, 241, 55, 11, 24, 121, 5, 239, 155, 11, - 24, 121, 5, 74, 11, 24, 121, 5, 232, 203, 11, 24, 121, 5, 232, 76, 11, - 24, 121, 5, 149, 11, 24, 121, 5, 229, 28, 11, 24, 121, 5, 226, 33, 11, - 24, 121, 5, 76, 11, 24, 121, 5, 222, 67, 11, 24, 121, 5, 220, 27, 11, 24, - 121, 5, 137, 11, 24, 121, 5, 182, 11, 24, 121, 5, 213, 10, 11, 24, 121, - 5, 71, 11, 24, 121, 5, 209, 148, 11, 24, 121, 5, 207, 129, 11, 24, 121, - 5, 206, 195, 11, 24, 121, 5, 206, 123, 11, 24, 121, 5, 205, 159, 11, 154, - 6, 62, 11, 154, 6, 251, 150, 11, 154, 6, 246, 240, 11, 154, 6, 75, 11, - 154, 6, 242, 139, 11, 154, 6, 241, 55, 11, 154, 6, 232, 203, 11, 154, 6, - 232, 76, 11, 154, 6, 149, 11, 154, 6, 229, 28, 11, 154, 6, 226, 33, 11, - 154, 6, 76, 11, 154, 6, 222, 67, 11, 154, 6, 220, 27, 11, 154, 6, 182, - 11, 154, 6, 213, 10, 11, 154, 6, 71, 11, 154, 6, 209, 148, 11, 154, 6, - 207, 129, 11, 154, 6, 206, 195, 11, 154, 6, 206, 123, 11, 154, 5, 62, 11, - 154, 5, 251, 150, 11, 154, 5, 249, 34, 11, 154, 5, 246, 240, 11, 154, 5, - 75, 11, 154, 5, 242, 139, 11, 154, 5, 241, 55, 11, 154, 5, 239, 155, 11, - 154, 5, 74, 11, 154, 5, 232, 203, 11, 154, 5, 232, 76, 11, 154, 5, 149, - 11, 154, 5, 229, 28, 11, 154, 5, 226, 33, 11, 154, 5, 76, 11, 154, 5, - 222, 67, 11, 154, 5, 220, 27, 11, 154, 5, 137, 11, 154, 5, 182, 11, 154, - 5, 213, 10, 11, 154, 5, 71, 11, 154, 5, 209, 148, 11, 154, 5, 207, 129, - 11, 154, 5, 206, 195, 11, 154, 5, 206, 123, 11, 154, 5, 205, 159, 11, - 159, 6, 62, 11, 159, 6, 251, 150, 11, 159, 6, 246, 240, 11, 159, 6, 75, - 11, 159, 6, 242, 139, 11, 159, 6, 241, 55, 11, 159, 6, 74, 11, 159, 6, - 232, 203, 11, 159, 6, 232, 76, 11, 159, 6, 149, 11, 159, 6, 229, 28, 11, - 159, 6, 76, 11, 159, 6, 182, 11, 159, 6, 213, 10, 11, 159, 6, 71, 11, - 159, 6, 209, 148, 11, 159, 6, 207, 129, 11, 159, 6, 206, 195, 11, 159, 6, - 206, 123, 11, 159, 5, 62, 11, 159, 5, 251, 150, 11, 159, 5, 249, 34, 11, - 159, 5, 246, 240, 11, 159, 5, 75, 11, 159, 5, 242, 139, 11, 159, 5, 241, - 55, 11, 159, 5, 239, 155, 11, 159, 5, 74, 11, 159, 5, 232, 203, 11, 159, - 5, 232, 76, 11, 159, 5, 149, 11, 159, 5, 229, 28, 11, 159, 5, 226, 33, - 11, 159, 5, 76, 11, 159, 5, 222, 67, 11, 159, 5, 220, 27, 11, 159, 5, - 137, 11, 159, 5, 182, 11, 159, 5, 213, 10, 11, 159, 5, 71, 11, 159, 5, - 209, 148, 11, 159, 5, 207, 129, 11, 159, 5, 206, 195, 11, 159, 5, 206, - 123, 11, 159, 5, 205, 159, 11, 24, 154, 6, 62, 11, 24, 154, 6, 251, 150, - 11, 24, 154, 6, 249, 34, 11, 24, 154, 6, 246, 240, 11, 24, 154, 6, 75, - 11, 24, 154, 6, 242, 139, 11, 24, 154, 6, 241, 55, 11, 24, 154, 6, 239, - 155, 11, 24, 154, 6, 74, 11, 24, 154, 6, 232, 203, 11, 24, 154, 6, 232, - 76, 11, 24, 154, 6, 149, 11, 24, 154, 6, 229, 28, 11, 24, 154, 6, 226, - 33, 11, 24, 154, 6, 76, 11, 24, 154, 6, 222, 67, 11, 24, 154, 6, 220, 27, - 11, 24, 154, 6, 137, 11, 24, 154, 6, 182, 11, 24, 154, 6, 213, 10, 11, - 24, 154, 6, 71, 11, 24, 154, 6, 209, 148, 11, 24, 154, 6, 207, 129, 11, - 24, 154, 6, 206, 195, 11, 24, 154, 6, 206, 123, 11, 24, 154, 6, 205, 159, - 11, 24, 154, 5, 62, 11, 24, 154, 5, 251, 150, 11, 24, 154, 5, 249, 34, - 11, 24, 154, 5, 246, 240, 11, 24, 154, 5, 75, 11, 24, 154, 5, 242, 139, - 11, 24, 154, 5, 241, 55, 11, 24, 154, 5, 239, 155, 11, 24, 154, 5, 74, - 11, 24, 154, 5, 232, 203, 11, 24, 154, 5, 232, 76, 11, 24, 154, 5, 149, - 11, 24, 154, 5, 229, 28, 11, 24, 154, 5, 226, 33, 11, 24, 154, 5, 76, 11, - 24, 154, 5, 222, 67, 11, 24, 154, 5, 220, 27, 11, 24, 154, 5, 137, 11, - 24, 154, 5, 182, 11, 24, 154, 5, 213, 10, 11, 24, 154, 5, 71, 11, 24, - 154, 5, 209, 148, 11, 24, 154, 5, 207, 129, 11, 24, 154, 5, 206, 195, 11, - 24, 154, 5, 206, 123, 11, 24, 154, 5, 205, 159, 11, 38, 6, 62, 11, 38, 6, - 251, 150, 11, 38, 6, 249, 34, 11, 38, 6, 246, 240, 11, 38, 6, 75, 11, 38, - 6, 242, 139, 11, 38, 6, 241, 55, 11, 38, 6, 239, 155, 11, 38, 6, 74, 11, - 38, 6, 232, 203, 11, 38, 6, 232, 76, 11, 38, 6, 149, 11, 38, 6, 229, 28, - 11, 38, 6, 226, 33, 11, 38, 6, 76, 11, 38, 6, 222, 67, 11, 38, 6, 220, - 27, 11, 38, 6, 137, 11, 38, 6, 182, 11, 38, 6, 213, 10, 11, 38, 6, 71, - 11, 38, 6, 209, 148, 11, 38, 6, 207, 129, 11, 38, 6, 206, 195, 11, 38, 6, - 206, 123, 11, 38, 6, 205, 159, 11, 38, 5, 62, 11, 38, 5, 251, 150, 11, - 38, 5, 249, 34, 11, 38, 5, 246, 240, 11, 38, 5, 75, 11, 38, 5, 242, 139, - 11, 38, 5, 241, 55, 11, 38, 5, 239, 155, 11, 38, 5, 74, 11, 38, 5, 232, - 203, 11, 38, 5, 232, 76, 11, 38, 5, 149, 11, 38, 5, 229, 28, 11, 38, 5, - 226, 33, 11, 38, 5, 76, 11, 38, 5, 222, 67, 11, 38, 5, 220, 27, 11, 38, - 5, 137, 11, 38, 5, 182, 11, 38, 5, 213, 10, 11, 38, 5, 71, 11, 38, 5, - 209, 148, 11, 38, 5, 207, 129, 11, 38, 5, 206, 195, 11, 38, 5, 206, 123, - 11, 38, 5, 205, 159, 11, 38, 24, 6, 62, 11, 38, 24, 6, 251, 150, 11, 38, - 24, 6, 249, 34, 11, 38, 24, 6, 246, 240, 11, 38, 24, 6, 75, 11, 38, 24, - 6, 242, 139, 11, 38, 24, 6, 241, 55, 11, 38, 24, 6, 239, 155, 11, 38, 24, - 6, 74, 11, 38, 24, 6, 232, 203, 11, 38, 24, 6, 232, 76, 11, 38, 24, 6, - 149, 11, 38, 24, 6, 229, 28, 11, 38, 24, 6, 226, 33, 11, 38, 24, 6, 76, - 11, 38, 24, 6, 222, 67, 11, 38, 24, 6, 220, 27, 11, 38, 24, 6, 137, 11, - 38, 24, 6, 182, 11, 38, 24, 6, 213, 10, 11, 38, 24, 6, 71, 11, 38, 24, 6, - 209, 148, 11, 38, 24, 6, 207, 129, 11, 38, 24, 6, 206, 195, 11, 38, 24, - 6, 206, 123, 11, 38, 24, 6, 205, 159, 11, 38, 24, 5, 62, 11, 38, 24, 5, - 251, 150, 11, 38, 24, 5, 249, 34, 11, 38, 24, 5, 246, 240, 11, 38, 24, 5, - 75, 11, 38, 24, 5, 242, 139, 11, 38, 24, 5, 241, 55, 11, 38, 24, 5, 239, - 155, 11, 38, 24, 5, 74, 11, 38, 24, 5, 232, 203, 11, 38, 24, 5, 232, 76, - 11, 38, 24, 5, 149, 11, 38, 24, 5, 229, 28, 11, 38, 24, 5, 226, 33, 11, - 38, 24, 5, 76, 11, 38, 24, 5, 222, 67, 11, 38, 24, 5, 220, 27, 11, 38, - 24, 5, 137, 11, 38, 24, 5, 182, 11, 38, 24, 5, 213, 10, 11, 38, 24, 5, - 71, 11, 38, 24, 5, 209, 148, 11, 38, 24, 5, 207, 129, 11, 38, 24, 5, 206, - 195, 11, 38, 24, 5, 206, 123, 11, 38, 24, 5, 205, 159, 11, 38, 35, 6, 62, - 11, 38, 35, 6, 251, 150, 11, 38, 35, 6, 249, 34, 11, 38, 35, 6, 246, 240, - 11, 38, 35, 6, 75, 11, 38, 35, 6, 242, 139, 11, 38, 35, 6, 241, 55, 11, - 38, 35, 6, 239, 155, 11, 38, 35, 6, 74, 11, 38, 35, 6, 232, 203, 11, 38, - 35, 6, 232, 76, 11, 38, 35, 6, 149, 11, 38, 35, 6, 229, 28, 11, 38, 35, - 6, 226, 33, 11, 38, 35, 6, 76, 11, 38, 35, 6, 222, 67, 11, 38, 35, 6, - 220, 27, 11, 38, 35, 6, 137, 11, 38, 35, 6, 182, 11, 38, 35, 6, 213, 10, - 11, 38, 35, 6, 71, 11, 38, 35, 6, 209, 148, 11, 38, 35, 6, 207, 129, 11, - 38, 35, 6, 206, 195, 11, 38, 35, 6, 206, 123, 11, 38, 35, 6, 205, 159, - 11, 38, 35, 5, 62, 11, 38, 35, 5, 251, 150, 11, 38, 35, 5, 249, 34, 11, - 38, 35, 5, 246, 240, 11, 38, 35, 5, 75, 11, 38, 35, 5, 242, 139, 11, 38, - 35, 5, 241, 55, 11, 38, 35, 5, 239, 155, 11, 38, 35, 5, 74, 11, 38, 35, - 5, 232, 203, 11, 38, 35, 5, 232, 76, 11, 38, 35, 5, 149, 11, 38, 35, 5, - 229, 28, 11, 38, 35, 5, 226, 33, 11, 38, 35, 5, 76, 11, 38, 35, 5, 222, - 67, 11, 38, 35, 5, 220, 27, 11, 38, 35, 5, 137, 11, 38, 35, 5, 182, 11, - 38, 35, 5, 213, 10, 11, 38, 35, 5, 71, 11, 38, 35, 5, 209, 148, 11, 38, - 35, 5, 207, 129, 11, 38, 35, 5, 206, 195, 11, 38, 35, 5, 206, 123, 11, - 38, 35, 5, 205, 159, 11, 38, 24, 35, 6, 62, 11, 38, 24, 35, 6, 251, 150, - 11, 38, 24, 35, 6, 249, 34, 11, 38, 24, 35, 6, 246, 240, 11, 38, 24, 35, - 6, 75, 11, 38, 24, 35, 6, 242, 139, 11, 38, 24, 35, 6, 241, 55, 11, 38, - 24, 35, 6, 239, 155, 11, 38, 24, 35, 6, 74, 11, 38, 24, 35, 6, 232, 203, - 11, 38, 24, 35, 6, 232, 76, 11, 38, 24, 35, 6, 149, 11, 38, 24, 35, 6, - 229, 28, 11, 38, 24, 35, 6, 226, 33, 11, 38, 24, 35, 6, 76, 11, 38, 24, - 35, 6, 222, 67, 11, 38, 24, 35, 6, 220, 27, 11, 38, 24, 35, 6, 137, 11, - 38, 24, 35, 6, 182, 11, 38, 24, 35, 6, 213, 10, 11, 38, 24, 35, 6, 71, - 11, 38, 24, 35, 6, 209, 148, 11, 38, 24, 35, 6, 207, 129, 11, 38, 24, 35, - 6, 206, 195, 11, 38, 24, 35, 6, 206, 123, 11, 38, 24, 35, 6, 205, 159, - 11, 38, 24, 35, 5, 62, 11, 38, 24, 35, 5, 251, 150, 11, 38, 24, 35, 5, - 249, 34, 11, 38, 24, 35, 5, 246, 240, 11, 38, 24, 35, 5, 75, 11, 38, 24, - 35, 5, 242, 139, 11, 38, 24, 35, 5, 241, 55, 11, 38, 24, 35, 5, 239, 155, - 11, 38, 24, 35, 5, 74, 11, 38, 24, 35, 5, 232, 203, 11, 38, 24, 35, 5, - 232, 76, 11, 38, 24, 35, 5, 149, 11, 38, 24, 35, 5, 229, 28, 11, 38, 24, - 35, 5, 226, 33, 11, 38, 24, 35, 5, 76, 11, 38, 24, 35, 5, 222, 67, 11, - 38, 24, 35, 5, 220, 27, 11, 38, 24, 35, 5, 137, 11, 38, 24, 35, 5, 182, - 11, 38, 24, 35, 5, 213, 10, 11, 38, 24, 35, 5, 71, 11, 38, 24, 35, 5, - 209, 148, 11, 38, 24, 35, 5, 207, 129, 11, 38, 24, 35, 5, 206, 195, 11, - 38, 24, 35, 5, 206, 123, 11, 38, 24, 35, 5, 205, 159, 11, 226, 156, 6, - 62, 11, 226, 156, 6, 251, 150, 11, 226, 156, 6, 249, 34, 11, 226, 156, 6, - 246, 240, 11, 226, 156, 6, 75, 11, 226, 156, 6, 242, 139, 11, 226, 156, - 6, 241, 55, 11, 226, 156, 6, 239, 155, 11, 226, 156, 6, 74, 11, 226, 156, - 6, 232, 203, 11, 226, 156, 6, 232, 76, 11, 226, 156, 6, 149, 11, 226, - 156, 6, 229, 28, 11, 226, 156, 6, 226, 33, 11, 226, 156, 6, 76, 11, 226, - 156, 6, 222, 67, 11, 226, 156, 6, 220, 27, 11, 226, 156, 6, 137, 11, 226, - 156, 6, 182, 11, 226, 156, 6, 213, 10, 11, 226, 156, 6, 71, 11, 226, 156, - 6, 209, 148, 11, 226, 156, 6, 207, 129, 11, 226, 156, 6, 206, 195, 11, - 226, 156, 6, 206, 123, 11, 226, 156, 6, 205, 159, 11, 226, 156, 5, 62, - 11, 226, 156, 5, 251, 150, 11, 226, 156, 5, 249, 34, 11, 226, 156, 5, - 246, 240, 11, 226, 156, 5, 75, 11, 226, 156, 5, 242, 139, 11, 226, 156, - 5, 241, 55, 11, 226, 156, 5, 239, 155, 11, 226, 156, 5, 74, 11, 226, 156, - 5, 232, 203, 11, 226, 156, 5, 232, 76, 11, 226, 156, 5, 149, 11, 226, - 156, 5, 229, 28, 11, 226, 156, 5, 226, 33, 11, 226, 156, 5, 76, 11, 226, - 156, 5, 222, 67, 11, 226, 156, 5, 220, 27, 11, 226, 156, 5, 137, 11, 226, - 156, 5, 182, 11, 226, 156, 5, 213, 10, 11, 226, 156, 5, 71, 11, 226, 156, - 5, 209, 148, 11, 226, 156, 5, 207, 129, 11, 226, 156, 5, 206, 195, 11, - 226, 156, 5, 206, 123, 11, 226, 156, 5, 205, 159, 11, 35, 5, 245, 22, 74, - 11, 35, 5, 245, 22, 232, 203, 11, 24, 6, 252, 144, 11, 24, 6, 250, 8, 11, - 24, 6, 240, 215, 11, 24, 6, 245, 227, 11, 24, 6, 242, 244, 11, 24, 6, - 205, 84, 11, 24, 6, 242, 201, 11, 24, 6, 212, 23, 11, 24, 6, 232, 249, - 11, 24, 6, 232, 14, 11, 24, 6, 230, 102, 11, 24, 6, 226, 114, 11, 24, 6, - 223, 217, 11, 24, 6, 206, 169, 11, 24, 6, 222, 168, 11, 24, 6, 221, 53, - 11, 24, 6, 218, 210, 11, 24, 6, 212, 24, 93, 11, 24, 6, 215, 63, 11, 24, - 6, 212, 151, 11, 24, 6, 209, 200, 11, 24, 6, 221, 78, 11, 24, 6, 248, 58, - 11, 24, 6, 220, 93, 11, 24, 6, 222, 170, 11, 24, 225, 227, 11, 24, 5, - 252, 144, 11, 24, 5, 250, 8, 11, 24, 5, 240, 215, 11, 24, 5, 245, 227, - 11, 24, 5, 242, 244, 11, 24, 5, 205, 84, 11, 24, 5, 242, 201, 11, 24, 5, - 212, 23, 11, 24, 5, 232, 249, 11, 24, 5, 232, 14, 11, 24, 5, 230, 102, - 11, 24, 5, 226, 114, 11, 24, 5, 223, 217, 11, 24, 5, 206, 169, 11, 24, 5, - 222, 168, 11, 24, 5, 221, 53, 11, 24, 5, 218, 210, 11, 24, 5, 42, 215, - 63, 11, 24, 5, 215, 63, 11, 24, 5, 212, 151, 11, 24, 5, 209, 200, 11, 24, - 5, 221, 78, 11, 24, 5, 248, 58, 11, 24, 5, 220, 93, 11, 24, 5, 222, 170, - 11, 24, 221, 209, 245, 140, 11, 24, 242, 245, 93, 11, 24, 212, 24, 93, - 11, 24, 232, 15, 93, 11, 24, 221, 79, 93, 11, 24, 218, 211, 93, 11, 24, - 221, 54, 93, 11, 35, 6, 252, 144, 11, 35, 6, 250, 8, 11, 35, 6, 240, 215, - 11, 35, 6, 245, 227, 11, 35, 6, 242, 244, 11, 35, 6, 205, 84, 11, 35, 6, - 242, 201, 11, 35, 6, 212, 23, 11, 35, 6, 232, 249, 11, 35, 6, 232, 14, - 11, 35, 6, 230, 102, 11, 35, 6, 226, 114, 11, 35, 6, 223, 217, 11, 35, 6, - 206, 169, 11, 35, 6, 222, 168, 11, 35, 6, 221, 53, 11, 35, 6, 218, 210, - 11, 35, 6, 212, 24, 93, 11, 35, 6, 215, 63, 11, 35, 6, 212, 151, 11, 35, - 6, 209, 200, 11, 35, 6, 221, 78, 11, 35, 6, 248, 58, 11, 35, 6, 220, 93, - 11, 35, 6, 222, 170, 11, 35, 225, 227, 11, 35, 5, 252, 144, 11, 35, 5, - 250, 8, 11, 35, 5, 240, 215, 11, 35, 5, 245, 227, 11, 35, 5, 242, 244, - 11, 35, 5, 205, 84, 11, 35, 5, 242, 201, 11, 35, 5, 212, 23, 11, 35, 5, - 232, 249, 11, 35, 5, 232, 14, 11, 35, 5, 230, 102, 11, 35, 5, 226, 114, - 11, 35, 5, 223, 217, 11, 35, 5, 206, 169, 11, 35, 5, 222, 168, 11, 35, 5, - 221, 53, 11, 35, 5, 218, 210, 11, 35, 5, 42, 215, 63, 11, 35, 5, 215, 63, - 11, 35, 5, 212, 151, 11, 35, 5, 209, 200, 11, 35, 5, 221, 78, 11, 35, 5, - 248, 58, 11, 35, 5, 220, 93, 11, 35, 5, 222, 170, 11, 35, 221, 209, 245, - 140, 11, 35, 242, 245, 93, 11, 35, 212, 24, 93, 11, 35, 232, 15, 93, 11, - 35, 221, 79, 93, 11, 35, 218, 211, 93, 11, 35, 221, 54, 93, 11, 24, 35, - 6, 252, 144, 11, 24, 35, 6, 250, 8, 11, 24, 35, 6, 240, 215, 11, 24, 35, - 6, 245, 227, 11, 24, 35, 6, 242, 244, 11, 24, 35, 6, 205, 84, 11, 24, 35, - 6, 242, 201, 11, 24, 35, 6, 212, 23, 11, 24, 35, 6, 232, 249, 11, 24, 35, - 6, 232, 14, 11, 24, 35, 6, 230, 102, 11, 24, 35, 6, 226, 114, 11, 24, 35, - 6, 223, 217, 11, 24, 35, 6, 206, 169, 11, 24, 35, 6, 222, 168, 11, 24, - 35, 6, 221, 53, 11, 24, 35, 6, 218, 210, 11, 24, 35, 6, 212, 24, 93, 11, - 24, 35, 6, 215, 63, 11, 24, 35, 6, 212, 151, 11, 24, 35, 6, 209, 200, 11, - 24, 35, 6, 221, 78, 11, 24, 35, 6, 248, 58, 11, 24, 35, 6, 220, 93, 11, - 24, 35, 6, 222, 170, 11, 24, 35, 225, 227, 11, 24, 35, 5, 252, 144, 11, - 24, 35, 5, 250, 8, 11, 24, 35, 5, 240, 215, 11, 24, 35, 5, 245, 227, 11, - 24, 35, 5, 242, 244, 11, 24, 35, 5, 205, 84, 11, 24, 35, 5, 242, 201, 11, - 24, 35, 5, 212, 23, 11, 24, 35, 5, 232, 249, 11, 24, 35, 5, 232, 14, 11, - 24, 35, 5, 230, 102, 11, 24, 35, 5, 226, 114, 11, 24, 35, 5, 223, 217, - 11, 24, 35, 5, 206, 169, 11, 24, 35, 5, 222, 168, 11, 24, 35, 5, 221, 53, - 11, 24, 35, 5, 218, 210, 11, 24, 35, 5, 42, 215, 63, 11, 24, 35, 5, 215, - 63, 11, 24, 35, 5, 212, 151, 11, 24, 35, 5, 209, 200, 11, 24, 35, 5, 221, - 78, 11, 24, 35, 5, 248, 58, 11, 24, 35, 5, 220, 93, 11, 24, 35, 5, 222, - 170, 11, 24, 35, 221, 209, 245, 140, 11, 24, 35, 242, 245, 93, 11, 24, - 35, 212, 24, 93, 11, 24, 35, 232, 15, 93, 11, 24, 35, 221, 79, 93, 11, - 24, 35, 218, 211, 93, 11, 24, 35, 221, 54, 93, 11, 38, 24, 6, 252, 144, - 11, 38, 24, 6, 250, 8, 11, 38, 24, 6, 240, 215, 11, 38, 24, 6, 245, 227, - 11, 38, 24, 6, 242, 244, 11, 38, 24, 6, 205, 84, 11, 38, 24, 6, 242, 201, - 11, 38, 24, 6, 212, 23, 11, 38, 24, 6, 232, 249, 11, 38, 24, 6, 232, 14, - 11, 38, 24, 6, 230, 102, 11, 38, 24, 6, 226, 114, 11, 38, 24, 6, 223, - 217, 11, 38, 24, 6, 206, 169, 11, 38, 24, 6, 222, 168, 11, 38, 24, 6, - 221, 53, 11, 38, 24, 6, 218, 210, 11, 38, 24, 6, 212, 24, 93, 11, 38, 24, - 6, 215, 63, 11, 38, 24, 6, 212, 151, 11, 38, 24, 6, 209, 200, 11, 38, 24, - 6, 221, 78, 11, 38, 24, 6, 248, 58, 11, 38, 24, 6, 220, 93, 11, 38, 24, - 6, 222, 170, 11, 38, 24, 225, 227, 11, 38, 24, 5, 252, 144, 11, 38, 24, - 5, 250, 8, 11, 38, 24, 5, 240, 215, 11, 38, 24, 5, 245, 227, 11, 38, 24, - 5, 242, 244, 11, 38, 24, 5, 205, 84, 11, 38, 24, 5, 242, 201, 11, 38, 24, - 5, 212, 23, 11, 38, 24, 5, 232, 249, 11, 38, 24, 5, 232, 14, 11, 38, 24, - 5, 230, 102, 11, 38, 24, 5, 226, 114, 11, 38, 24, 5, 223, 217, 11, 38, - 24, 5, 206, 169, 11, 38, 24, 5, 222, 168, 11, 38, 24, 5, 221, 53, 11, 38, - 24, 5, 218, 210, 11, 38, 24, 5, 42, 215, 63, 11, 38, 24, 5, 215, 63, 11, - 38, 24, 5, 212, 151, 11, 38, 24, 5, 209, 200, 11, 38, 24, 5, 221, 78, 11, - 38, 24, 5, 248, 58, 11, 38, 24, 5, 220, 93, 11, 38, 24, 5, 222, 170, 11, - 38, 24, 221, 209, 245, 140, 11, 38, 24, 242, 245, 93, 11, 38, 24, 212, - 24, 93, 11, 38, 24, 232, 15, 93, 11, 38, 24, 221, 79, 93, 11, 38, 24, - 218, 211, 93, 11, 38, 24, 221, 54, 93, 11, 38, 24, 35, 6, 252, 144, 11, - 38, 24, 35, 6, 250, 8, 11, 38, 24, 35, 6, 240, 215, 11, 38, 24, 35, 6, - 245, 227, 11, 38, 24, 35, 6, 242, 244, 11, 38, 24, 35, 6, 205, 84, 11, - 38, 24, 35, 6, 242, 201, 11, 38, 24, 35, 6, 212, 23, 11, 38, 24, 35, 6, - 232, 249, 11, 38, 24, 35, 6, 232, 14, 11, 38, 24, 35, 6, 230, 102, 11, - 38, 24, 35, 6, 226, 114, 11, 38, 24, 35, 6, 223, 217, 11, 38, 24, 35, 6, - 206, 169, 11, 38, 24, 35, 6, 222, 168, 11, 38, 24, 35, 6, 221, 53, 11, - 38, 24, 35, 6, 218, 210, 11, 38, 24, 35, 6, 212, 24, 93, 11, 38, 24, 35, - 6, 215, 63, 11, 38, 24, 35, 6, 212, 151, 11, 38, 24, 35, 6, 209, 200, 11, - 38, 24, 35, 6, 221, 78, 11, 38, 24, 35, 6, 248, 58, 11, 38, 24, 35, 6, - 220, 93, 11, 38, 24, 35, 6, 222, 170, 11, 38, 24, 35, 225, 227, 11, 38, - 24, 35, 5, 252, 144, 11, 38, 24, 35, 5, 250, 8, 11, 38, 24, 35, 5, 240, - 215, 11, 38, 24, 35, 5, 245, 227, 11, 38, 24, 35, 5, 242, 244, 11, 38, - 24, 35, 5, 205, 84, 11, 38, 24, 35, 5, 242, 201, 11, 38, 24, 35, 5, 212, - 23, 11, 38, 24, 35, 5, 232, 249, 11, 38, 24, 35, 5, 232, 14, 11, 38, 24, - 35, 5, 230, 102, 11, 38, 24, 35, 5, 226, 114, 11, 38, 24, 35, 5, 223, - 217, 11, 38, 24, 35, 5, 206, 169, 11, 38, 24, 35, 5, 222, 168, 11, 38, - 24, 35, 5, 221, 53, 11, 38, 24, 35, 5, 218, 210, 11, 38, 24, 35, 5, 42, - 215, 63, 11, 38, 24, 35, 5, 215, 63, 11, 38, 24, 35, 5, 212, 151, 11, 38, - 24, 35, 5, 209, 200, 11, 38, 24, 35, 5, 221, 78, 11, 38, 24, 35, 5, 248, - 58, 11, 38, 24, 35, 5, 220, 93, 11, 38, 24, 35, 5, 222, 170, 11, 38, 24, - 35, 221, 209, 245, 140, 11, 38, 24, 35, 242, 245, 93, 11, 38, 24, 35, - 212, 24, 93, 11, 38, 24, 35, 232, 15, 93, 11, 38, 24, 35, 221, 79, 93, - 11, 38, 24, 35, 218, 211, 93, 11, 38, 24, 35, 221, 54, 93, 11, 24, 6, - 245, 134, 11, 24, 5, 245, 134, 11, 24, 18, 205, 85, 11, 24, 18, 102, 11, - 24, 18, 105, 11, 24, 18, 142, 11, 24, 18, 139, 11, 24, 18, 168, 11, 24, - 18, 184, 11, 24, 18, 195, 11, 24, 18, 193, 11, 24, 18, 200, 11, 159, 18, - 205, 85, 11, 159, 18, 102, 11, 159, 18, 105, 11, 159, 18, 142, 11, 159, - 18, 139, 11, 159, 18, 168, 11, 159, 18, 184, 11, 159, 18, 195, 11, 159, - 18, 193, 11, 159, 18, 200, 11, 38, 18, 205, 85, 11, 38, 18, 102, 11, 38, - 18, 105, 11, 38, 18, 142, 11, 38, 18, 139, 11, 38, 18, 168, 11, 38, 18, - 184, 11, 38, 18, 195, 11, 38, 18, 193, 11, 38, 18, 200, 11, 38, 24, 18, - 205, 85, 11, 38, 24, 18, 102, 11, 38, 24, 18, 105, 11, 38, 24, 18, 142, - 11, 38, 24, 18, 139, 11, 38, 24, 18, 168, 11, 38, 24, 18, 184, 11, 38, - 24, 18, 195, 11, 38, 24, 18, 193, 11, 38, 24, 18, 200, 11, 226, 156, 18, - 205, 85, 11, 226, 156, 18, 102, 11, 226, 156, 18, 105, 11, 226, 156, 18, - 142, 11, 226, 156, 18, 139, 11, 226, 156, 18, 168, 11, 226, 156, 18, 184, - 11, 226, 156, 18, 195, 11, 226, 156, 18, 193, 11, 226, 156, 18, 200, 70, - 69, 4, 229, 27, 231, 123, 70, 69, 4, 229, 23, 172, 70, 69, 4, 229, 21, - 230, 236, 70, 69, 4, 228, 153, 231, 221, 70, 69, 4, 228, 123, 231, 224, - 70, 69, 4, 228, 142, 231, 33, 70, 69, 4, 228, 170, 231, 53, 70, 69, 4, - 228, 39, 230, 230, 70, 69, 4, 229, 18, 207, 20, 70, 69, 4, 229, 16, 207, - 96, 70, 69, 4, 229, 14, 206, 216, 70, 69, 4, 228, 92, 207, 45, 70, 69, 4, - 228, 100, 207, 51, 70, 69, 4, 228, 104, 206, 238, 70, 69, 4, 228, 173, - 206, 250, 70, 69, 4, 228, 24, 206, 212, 70, 69, 4, 228, 75, 207, 43, 70, - 69, 4, 228, 157, 206, 200, 70, 69, 4, 228, 169, 206, 202, 70, 69, 4, 228, - 79, 206, 201, 70, 69, 4, 229, 12, 226, 209, 70, 69, 4, 229, 10, 227, 221, - 70, 69, 4, 229, 8, 226, 89, 70, 69, 4, 228, 159, 227, 83, 70, 69, 4, 228, - 124, 226, 168, 70, 69, 4, 228, 64, 226, 111, 70, 69, 4, 228, 29, 226, - 105, 70, 69, 4, 229, 6, 249, 244, 70, 69, 4, 229, 3, 250, 183, 70, 69, 4, - 229, 1, 249, 101, 70, 69, 4, 228, 68, 250, 50, 70, 69, 4, 228, 121, 250, - 61, 70, 69, 4, 228, 115, 249, 172, 70, 69, 4, 228, 80, 249, 184, 70, 69, - 4, 228, 247, 74, 70, 69, 4, 228, 245, 62, 70, 69, 4, 228, 243, 71, 70, - 69, 4, 228, 55, 243, 104, 70, 69, 4, 228, 118, 75, 70, 69, 4, 228, 53, - 222, 152, 70, 69, 4, 228, 71, 76, 70, 69, 4, 228, 81, 243, 90, 70, 69, 4, - 228, 87, 233, 68, 70, 69, 4, 228, 83, 233, 68, 70, 69, 4, 228, 23, 252, - 122, 70, 69, 4, 228, 40, 243, 41, 70, 69, 4, 228, 232, 215, 80, 70, 69, - 4, 228, 230, 217, 199, 70, 69, 4, 228, 228, 213, 203, 70, 69, 4, 228, 56, - 217, 74, 70, 69, 4, 228, 102, 217, 86, 70, 69, 4, 228, 82, 214, 174, 70, - 69, 4, 228, 139, 214, 193, 70, 69, 4, 228, 22, 215, 79, 70, 69, 4, 228, - 218, 229, 235, 70, 69, 4, 228, 216, 230, 141, 70, 69, 4, 228, 214, 229, - 81, 70, 69, 4, 228, 134, 230, 50, 70, 69, 4, 228, 145, 230, 58, 70, 69, - 4, 228, 164, 229, 115, 70, 69, 4, 228, 65, 229, 144, 70, 69, 4, 228, 108, - 152, 230, 58, 70, 69, 4, 228, 240, 245, 168, 70, 69, 4, 228, 237, 246, - 145, 70, 69, 4, 228, 234, 243, 237, 70, 69, 4, 228, 129, 245, 251, 70, - 69, 4, 228, 38, 245, 28, 70, 69, 4, 228, 37, 245, 51, 70, 69, 4, 228, - 226, 211, 211, 70, 69, 4, 228, 223, 212, 219, 70, 69, 4, 228, 221, 210, - 170, 70, 69, 4, 228, 127, 212, 120, 70, 69, 4, 228, 163, 212, 131, 70, - 69, 4, 228, 114, 211, 105, 70, 69, 4, 228, 149, 124, 70, 69, 4, 228, 212, - 232, 162, 70, 69, 4, 228, 209, 232, 200, 70, 69, 4, 228, 207, 232, 104, - 70, 69, 4, 228, 61, 232, 180, 70, 69, 4, 228, 105, 232, 182, 70, 69, 4, - 228, 58, 232, 113, 70, 69, 4, 228, 155, 232, 122, 70, 69, 4, 228, 43, - 152, 232, 122, 70, 69, 4, 228, 205, 206, 11, 70, 69, 4, 228, 202, 190, - 70, 69, 4, 228, 200, 205, 213, 70, 69, 4, 228, 109, 206, 49, 70, 69, 4, - 228, 138, 206, 52, 70, 69, 4, 228, 77, 205, 232, 70, 69, 4, 228, 97, 205, - 247, 70, 69, 4, 228, 196, 241, 250, 70, 69, 4, 228, 194, 242, 73, 70, 69, - 4, 228, 192, 241, 88, 70, 69, 4, 228, 140, 242, 21, 70, 69, 4, 228, 143, - 242, 28, 70, 69, 4, 228, 85, 241, 151, 70, 69, 4, 228, 130, 241, 162, 70, - 69, 4, 228, 21, 241, 87, 70, 69, 4, 228, 117, 242, 47, 70, 69, 4, 228, - 190, 224, 199, 70, 69, 4, 228, 188, 225, 209, 70, 69, 4, 228, 186, 223, - 173, 70, 69, 4, 228, 101, 225, 101, 70, 69, 4, 228, 49, 224, 61, 70, 69, - 4, 228, 42, 239, 11, 70, 69, 4, 228, 181, 155, 70, 69, 4, 228, 32, 238, - 42, 70, 69, 4, 228, 184, 239, 53, 70, 69, 4, 228, 122, 239, 71, 70, 69, - 4, 228, 179, 238, 131, 70, 69, 4, 228, 78, 238, 149, 70, 69, 4, 228, 135, - 239, 52, 70, 69, 4, 228, 90, 238, 125, 70, 69, 4, 228, 165, 238, 246, 70, - 69, 4, 228, 88, 239, 110, 70, 69, 4, 228, 131, 238, 31, 70, 69, 4, 228, - 166, 239, 41, 70, 69, 4, 228, 25, 238, 134, 70, 69, 4, 228, 172, 238, 41, - 70, 69, 4, 228, 128, 225, 42, 70, 69, 4, 228, 177, 225, 56, 70, 69, 4, - 228, 136, 225, 39, 70, 69, 4, 228, 103, 225, 50, 70, 69, 4, 228, 72, 225, - 51, 70, 69, 4, 228, 62, 225, 40, 70, 69, 4, 228, 98, 225, 41, 70, 69, 4, - 228, 59, 225, 55, 70, 69, 4, 228, 91, 225, 38, 70, 69, 4, 228, 132, 152, - 225, 51, 70, 69, 4, 228, 112, 152, 225, 40, 70, 69, 4, 228, 35, 152, 225, - 41, 70, 69, 4, 228, 63, 240, 61, 70, 69, 4, 228, 107, 240, 244, 70, 69, - 4, 228, 50, 239, 213, 70, 69, 4, 228, 28, 240, 162, 70, 69, 4, 228, 52, - 239, 199, 70, 69, 4, 228, 51, 239, 209, 70, 69, 4, 228, 34, 225, 61, 70, - 69, 4, 228, 161, 224, 254, 70, 69, 4, 228, 41, 224, 243, 70, 69, 4, 228, - 150, 221, 53, 70, 69, 4, 228, 119, 179, 70, 69, 4, 228, 168, 220, 82, 70, - 69, 4, 228, 137, 221, 164, 70, 69, 4, 228, 167, 221, 174, 70, 69, 4, 228, - 116, 220, 187, 70, 69, 4, 228, 152, 220, 211, 70, 69, 4, 228, 73, 227, - 138, 70, 69, 4, 228, 156, 227, 153, 70, 69, 4, 228, 96, 227, 132, 70, 69, - 4, 228, 171, 227, 145, 70, 69, 4, 228, 30, 227, 145, 70, 69, 4, 228, 146, - 227, 146, 70, 69, 4, 228, 46, 227, 133, 70, 69, 4, 228, 44, 227, 134, 70, - 69, 4, 228, 31, 227, 126, 70, 69, 4, 228, 57, 152, 227, 146, 70, 69, 4, - 228, 113, 152, 227, 133, 70, 69, 4, 228, 76, 152, 227, 134, 70, 69, 4, - 228, 86, 231, 7, 70, 69, 4, 228, 126, 231, 15, 70, 69, 4, 228, 144, 231, - 3, 70, 69, 4, 228, 175, 231, 10, 70, 69, 4, 228, 110, 231, 11, 70, 69, 4, - 228, 106, 231, 5, 70, 69, 4, 228, 60, 231, 6, 70, 69, 4, 228, 94, 240, - 179, 70, 69, 4, 228, 162, 240, 187, 70, 69, 4, 228, 70, 240, 174, 70, 69, - 4, 228, 125, 240, 183, 70, 69, 4, 228, 111, 240, 184, 70, 69, 4, 228, - 147, 240, 175, 70, 69, 4, 228, 148, 240, 177, 70, 69, 4, 228, 47, 219, - 113, 70, 69, 4, 228, 95, 225, 136, 70, 69, 4, 228, 89, 225, 151, 70, 69, - 4, 228, 93, 225, 118, 70, 69, 4, 228, 27, 225, 142, 70, 69, 4, 228, 99, - 225, 143, 70, 69, 4, 228, 151, 225, 123, 70, 69, 4, 228, 154, 225, 127, - 70, 69, 4, 228, 66, 224, 180, 70, 69, 4, 228, 26, 224, 150, 70, 69, 4, - 228, 69, 224, 171, 70, 69, 4, 228, 84, 224, 154, 70, 69, 4, 228, 36, 208, - 214, 70, 69, 4, 228, 33, 209, 70, 70, 69, 4, 228, 67, 207, 148, 70, 69, - 4, 228, 45, 209, 34, 70, 69, 4, 228, 133, 209, 39, 70, 69, 4, 228, 74, - 208, 161, 70, 69, 4, 228, 141, 208, 173, 70, 69, 4, 228, 54, 223, 119, - 70, 69, 4, 228, 160, 223, 138, 70, 69, 4, 228, 48, 223, 101, 70, 69, 4, - 228, 120, 223, 130, 70, 69, 4, 228, 158, 223, 108, 70, 69, 18, 102, 70, - 69, 18, 105, 70, 69, 18, 142, 70, 69, 18, 139, 70, 69, 18, 168, 70, 69, - 18, 184, 70, 69, 18, 195, 70, 69, 18, 193, 70, 69, 18, 200, 70, 69, 36, - 43, 212, 118, 70, 69, 36, 43, 212, 93, 70, 69, 36, 43, 238, 28, 70, 69, - 36, 43, 211, 240, 70, 69, 36, 43, 212, 99, 211, 240, 70, 69, 36, 43, 238, - 30, 211, 240, 70, 69, 36, 43, 226, 212, 8, 11, 252, 172, 8, 11, 250, 38, - 8, 11, 232, 179, 8, 11, 246, 117, 8, 11, 207, 59, 8, 11, 205, 108, 8, 11, - 239, 132, 8, 11, 212, 194, 8, 11, 206, 47, 8, 11, 232, 45, 8, 11, 230, - 106, 8, 11, 227, 104, 8, 11, 224, 54, 8, 11, 217, 70, 8, 11, 252, 200, 8, - 11, 242, 15, 8, 11, 217, 191, 8, 11, 220, 12, 8, 11, 219, 16, 8, 11, 215, - 210, 8, 11, 212, 115, 8, 11, 212, 37, 8, 11, 231, 163, 8, 11, 212, 49, 8, - 11, 246, 140, 8, 11, 205, 111, 8, 11, 240, 94, 8, 11, 245, 22, 250, 38, - 8, 11, 245, 22, 224, 54, 8, 11, 245, 22, 242, 15, 8, 11, 245, 22, 220, - 12, 8, 11, 78, 250, 38, 8, 11, 78, 232, 179, 8, 11, 78, 239, 50, 8, 11, - 78, 239, 132, 8, 11, 78, 206, 47, 8, 11, 78, 232, 45, 8, 11, 78, 230, - 106, 8, 11, 78, 227, 104, 8, 11, 78, 224, 54, 8, 11, 78, 217, 70, 8, 11, - 78, 252, 200, 8, 11, 78, 242, 15, 8, 11, 78, 217, 191, 8, 11, 78, 220, - 12, 8, 11, 78, 215, 210, 8, 11, 78, 212, 115, 8, 11, 78, 212, 37, 8, 11, - 78, 231, 163, 8, 11, 78, 246, 140, 8, 11, 78, 240, 94, 8, 11, 212, 190, - 232, 179, 8, 11, 212, 190, 239, 132, 8, 11, 212, 190, 206, 47, 8, 11, - 212, 190, 230, 106, 8, 11, 212, 190, 224, 54, 8, 11, 212, 190, 217, 70, - 8, 11, 212, 190, 252, 200, 8, 11, 212, 190, 217, 191, 8, 11, 212, 190, - 220, 12, 8, 11, 212, 190, 215, 210, 8, 11, 212, 190, 231, 163, 8, 11, - 212, 190, 246, 140, 8, 11, 212, 190, 240, 94, 8, 11, 212, 190, 245, 22, - 224, 54, 8, 11, 212, 190, 245, 22, 220, 12, 8, 11, 213, 232, 250, 38, 8, - 11, 213, 232, 232, 179, 8, 11, 213, 232, 239, 50, 8, 11, 213, 232, 239, - 132, 8, 11, 213, 232, 212, 194, 8, 11, 213, 232, 206, 47, 8, 11, 213, - 232, 232, 45, 8, 11, 213, 232, 227, 104, 8, 11, 213, 232, 224, 54, 8, 11, - 213, 232, 217, 70, 8, 11, 213, 232, 252, 200, 8, 11, 213, 232, 242, 15, - 8, 11, 213, 232, 217, 191, 8, 11, 213, 232, 220, 12, 8, 11, 213, 232, - 215, 210, 8, 11, 213, 232, 212, 115, 8, 11, 213, 232, 212, 37, 8, 11, - 213, 232, 231, 163, 8, 11, 213, 232, 246, 140, 8, 11, 213, 232, 205, 111, - 8, 11, 213, 232, 240, 94, 8, 11, 213, 232, 245, 22, 250, 38, 8, 11, 213, - 232, 245, 22, 242, 15, 8, 11, 229, 110, 252, 172, 8, 11, 229, 110, 250, - 38, 8, 11, 229, 110, 232, 179, 8, 11, 229, 110, 246, 117, 8, 11, 229, - 110, 239, 50, 8, 11, 229, 110, 207, 59, 8, 11, 229, 110, 205, 108, 8, 11, - 229, 110, 239, 132, 8, 11, 229, 110, 212, 194, 8, 11, 229, 110, 206, 47, - 8, 11, 229, 110, 230, 106, 8, 11, 229, 110, 227, 104, 8, 11, 229, 110, - 224, 54, 8, 11, 229, 110, 217, 70, 8, 11, 229, 110, 252, 200, 8, 11, 229, - 110, 242, 15, 8, 11, 229, 110, 217, 191, 8, 11, 229, 110, 220, 12, 8, 11, - 229, 110, 219, 16, 8, 11, 229, 110, 215, 210, 8, 11, 229, 110, 212, 115, - 8, 11, 229, 110, 212, 37, 8, 11, 229, 110, 231, 163, 8, 11, 229, 110, - 212, 49, 8, 11, 229, 110, 246, 140, 8, 11, 229, 110, 205, 111, 8, 11, - 229, 110, 240, 94, 8, 11, 159, 250, 38, 8, 11, 159, 232, 179, 8, 11, 159, - 246, 117, 8, 11, 159, 207, 59, 8, 11, 159, 205, 108, 8, 11, 159, 239, - 132, 8, 11, 159, 212, 194, 8, 11, 159, 206, 47, 8, 11, 159, 230, 106, 8, - 11, 159, 227, 104, 8, 11, 159, 224, 54, 8, 11, 159, 217, 70, 8, 11, 159, - 252, 200, 8, 11, 159, 242, 15, 8, 11, 159, 217, 191, 8, 11, 159, 220, 12, - 8, 11, 159, 219, 16, 8, 11, 159, 215, 210, 8, 11, 159, 212, 115, 8, 11, - 159, 212, 37, 8, 11, 159, 231, 163, 8, 11, 159, 212, 49, 8, 11, 159, 246, - 140, 8, 11, 159, 205, 111, 8, 11, 159, 240, 94, 8, 11, 222, 133, 80, 2, - 140, 2, 212, 153, 8, 11, 222, 133, 140, 2, 246, 117, 227, 241, 94, 243, - 117, 207, 9, 227, 241, 94, 188, 207, 9, 227, 241, 94, 207, 36, 207, 9, - 227, 241, 94, 143, 207, 9, 227, 241, 94, 219, 32, 243, 255, 227, 241, 94, - 239, 227, 243, 255, 227, 241, 94, 59, 243, 255, 227, 241, 94, 119, 73, - 248, 93, 227, 241, 94, 118, 73, 248, 93, 227, 241, 94, 129, 73, 248, 93, - 227, 241, 94, 241, 125, 73, 248, 93, 227, 241, 94, 241, 204, 73, 248, 93, - 227, 241, 94, 215, 10, 73, 248, 93, 227, 241, 94, 216, 23, 73, 248, 93, - 227, 241, 94, 243, 88, 73, 248, 93, 227, 241, 94, 224, 195, 73, 248, 93, - 227, 241, 94, 119, 73, 250, 141, 227, 241, 94, 118, 73, 250, 141, 227, - 241, 94, 129, 73, 250, 141, 227, 241, 94, 241, 125, 73, 250, 141, 227, - 241, 94, 241, 204, 73, 250, 141, 227, 241, 94, 215, 10, 73, 250, 141, - 227, 241, 94, 216, 23, 73, 250, 141, 227, 241, 94, 243, 88, 73, 250, 141, - 227, 241, 94, 224, 195, 73, 250, 141, 227, 241, 94, 119, 73, 247, 232, - 227, 241, 94, 118, 73, 247, 232, 227, 241, 94, 129, 73, 247, 232, 227, - 241, 94, 241, 125, 73, 247, 232, 227, 241, 94, 241, 204, 73, 247, 232, - 227, 241, 94, 215, 10, 73, 247, 232, 227, 241, 94, 216, 23, 73, 247, 232, - 227, 241, 94, 243, 88, 73, 247, 232, 227, 241, 94, 224, 195, 73, 247, - 232, 227, 241, 94, 220, 221, 227, 241, 94, 222, 120, 227, 241, 94, 250, - 142, 227, 241, 94, 248, 15, 227, 241, 94, 214, 113, 227, 241, 94, 213, - 156, 227, 241, 94, 251, 171, 227, 241, 94, 207, 1, 227, 241, 94, 232, - 116, 227, 241, 94, 250, 176, 151, 94, 194, 250, 176, 151, 94, 238, 120, - 151, 94, 238, 119, 151, 94, 238, 118, 151, 94, 238, 117, 151, 94, 238, - 116, 151, 94, 238, 115, 151, 94, 238, 114, 151, 94, 238, 113, 151, 94, - 238, 112, 151, 94, 238, 111, 151, 94, 238, 110, 151, 94, 238, 109, 151, - 94, 238, 108, 151, 94, 238, 107, 151, 94, 238, 106, 151, 94, 238, 105, - 151, 94, 238, 104, 151, 94, 238, 103, 151, 94, 238, 102, 151, 94, 238, - 101, 151, 94, 238, 100, 151, 94, 238, 99, 151, 94, 238, 98, 151, 94, 238, - 97, 151, 94, 238, 96, 151, 94, 238, 95, 151, 94, 238, 94, 151, 94, 238, - 93, 151, 94, 238, 92, 151, 94, 238, 91, 151, 94, 238, 90, 151, 94, 238, - 89, 151, 94, 238, 88, 151, 94, 238, 87, 151, 94, 238, 86, 151, 94, 238, - 85, 151, 94, 238, 84, 151, 94, 238, 83, 151, 94, 238, 82, 151, 94, 238, - 81, 151, 94, 238, 80, 151, 94, 238, 79, 151, 94, 238, 78, 151, 94, 238, - 77, 151, 94, 238, 76, 151, 94, 238, 75, 151, 94, 238, 74, 151, 94, 238, - 73, 151, 94, 238, 72, 151, 94, 79, 250, 176, 151, 94, 209, 21, 151, 94, - 209, 20, 151, 94, 209, 19, 151, 94, 209, 18, 151, 94, 209, 17, 151, 94, - 209, 16, 151, 94, 209, 15, 151, 94, 209, 14, 151, 94, 209, 13, 151, 94, - 209, 12, 151, 94, 209, 11, 151, 94, 209, 10, 151, 94, 209, 9, 151, 94, - 209, 8, 151, 94, 209, 7, 151, 94, 209, 6, 151, 94, 209, 5, 151, 94, 209, - 4, 151, 94, 209, 3, 151, 94, 209, 2, 151, 94, 209, 1, 151, 94, 209, 0, - 151, 94, 208, 255, 151, 94, 208, 254, 151, 94, 208, 253, 151, 94, 208, - 252, 151, 94, 208, 251, 151, 94, 208, 250, 151, 94, 208, 249, 151, 94, - 208, 248, 151, 94, 208, 247, 151, 94, 208, 246, 151, 94, 208, 245, 151, - 94, 208, 244, 151, 94, 208, 243, 151, 94, 208, 242, 151, 94, 208, 241, - 151, 94, 208, 240, 151, 94, 208, 239, 151, 94, 208, 238, 151, 94, 208, - 237, 151, 94, 208, 236, 151, 94, 208, 235, 151, 94, 208, 234, 151, 94, - 208, 233, 151, 94, 208, 232, 151, 94, 208, 231, 151, 94, 208, 230, 151, - 94, 208, 229, 220, 230, 191, 250, 176, 220, 230, 191, 253, 15, 73, 214, - 150, 220, 230, 191, 118, 73, 214, 150, 220, 230, 191, 129, 73, 214, 150, - 220, 230, 191, 241, 125, 73, 214, 150, 220, 230, 191, 241, 204, 73, 214, - 150, 220, 230, 191, 215, 10, 73, 214, 150, 220, 230, 191, 216, 23, 73, - 214, 150, 220, 230, 191, 243, 88, 73, 214, 150, 220, 230, 191, 224, 195, - 73, 214, 150, 220, 230, 191, 212, 99, 73, 214, 150, 220, 230, 191, 232, - 198, 73, 214, 150, 220, 230, 191, 231, 57, 73, 214, 150, 220, 230, 191, - 219, 198, 73, 214, 150, 220, 230, 191, 231, 107, 73, 214, 150, 220, 230, - 191, 253, 15, 73, 239, 58, 220, 230, 191, 118, 73, 239, 58, 220, 230, - 191, 129, 73, 239, 58, 220, 230, 191, 241, 125, 73, 239, 58, 220, 230, - 191, 241, 204, 73, 239, 58, 220, 230, 191, 215, 10, 73, 239, 58, 220, - 230, 191, 216, 23, 73, 239, 58, 220, 230, 191, 243, 88, 73, 239, 58, 220, - 230, 191, 224, 195, 73, 239, 58, 220, 230, 191, 212, 99, 73, 239, 58, - 220, 230, 191, 232, 198, 73, 239, 58, 220, 230, 191, 231, 57, 73, 239, - 58, 220, 230, 191, 219, 198, 73, 239, 58, 220, 230, 191, 231, 107, 73, - 239, 58, 220, 230, 191, 219, 32, 232, 116, 220, 230, 191, 253, 15, 73, - 245, 155, 220, 230, 191, 118, 73, 245, 155, 220, 230, 191, 129, 73, 245, - 155, 220, 230, 191, 241, 125, 73, 245, 155, 220, 230, 191, 241, 204, 73, - 245, 155, 220, 230, 191, 215, 10, 73, 245, 155, 220, 230, 191, 216, 23, - 73, 245, 155, 220, 230, 191, 243, 88, 73, 245, 155, 220, 230, 191, 224, - 195, 73, 245, 155, 220, 230, 191, 212, 99, 73, 245, 155, 220, 230, 191, - 232, 198, 73, 245, 155, 220, 230, 191, 231, 57, 73, 245, 155, 220, 230, - 191, 219, 198, 73, 245, 155, 220, 230, 191, 231, 107, 73, 245, 155, 220, - 230, 191, 60, 232, 116, 220, 230, 191, 253, 15, 73, 247, 178, 220, 230, - 191, 118, 73, 247, 178, 220, 230, 191, 129, 73, 247, 178, 220, 230, 191, - 241, 125, 73, 247, 178, 220, 230, 191, 241, 204, 73, 247, 178, 220, 230, - 191, 215, 10, 73, 247, 178, 220, 230, 191, 216, 23, 73, 247, 178, 220, - 230, 191, 243, 88, 73, 247, 178, 220, 230, 191, 224, 195, 73, 247, 178, - 220, 230, 191, 212, 99, 73, 247, 178, 220, 230, 191, 232, 198, 73, 247, - 178, 220, 230, 191, 231, 57, 73, 247, 178, 220, 230, 191, 219, 198, 73, - 247, 178, 220, 230, 191, 231, 107, 73, 247, 178, 220, 230, 191, 59, 232, - 116, 220, 230, 191, 241, 149, 220, 230, 191, 211, 15, 220, 230, 191, 211, - 4, 220, 230, 191, 211, 1, 220, 230, 191, 211, 0, 220, 230, 191, 210, 255, - 220, 230, 191, 210, 254, 220, 230, 191, 210, 253, 220, 230, 191, 210, - 252, 220, 230, 191, 210, 251, 220, 230, 191, 211, 14, 220, 230, 191, 211, - 13, 220, 230, 191, 211, 12, 220, 230, 191, 211, 11, 220, 230, 191, 211, - 10, 220, 230, 191, 211, 9, 220, 230, 191, 211, 8, 220, 230, 191, 211, 7, - 220, 230, 191, 211, 6, 220, 230, 191, 211, 5, 220, 230, 191, 211, 3, 220, - 230, 191, 211, 2, 18, 205, 86, 241, 82, 213, 251, 18, 205, 86, 247, 155, - 18, 119, 247, 155, 18, 118, 247, 155, 18, 129, 247, 155, 18, 241, 125, - 247, 155, 18, 241, 204, 247, 155, 18, 215, 10, 247, 155, 18, 216, 23, - 247, 155, 18, 243, 88, 247, 155, 18, 224, 195, 247, 155, 245, 111, 39, - 38, 18, 205, 85, 245, 111, 170, 39, 38, 18, 205, 85, 97, 7, 6, 1, 62, 97, - 7, 6, 1, 251, 150, 97, 7, 6, 1, 249, 34, 97, 7, 6, 1, 246, 240, 97, 7, 6, - 1, 75, 97, 7, 6, 1, 242, 139, 97, 7, 6, 1, 241, 55, 97, 7, 6, 1, 239, - 155, 97, 7, 6, 1, 74, 97, 7, 6, 1, 232, 203, 97, 7, 6, 1, 232, 76, 97, 7, - 6, 1, 149, 97, 7, 6, 1, 229, 28, 97, 7, 6, 1, 226, 33, 97, 7, 6, 1, 76, - 97, 7, 6, 1, 222, 67, 97, 7, 6, 1, 220, 27, 97, 7, 6, 1, 137, 97, 7, 6, - 1, 182, 97, 7, 6, 1, 213, 10, 97, 7, 6, 1, 71, 97, 7, 6, 1, 209, 148, 97, - 7, 6, 1, 207, 129, 97, 7, 6, 1, 206, 195, 97, 7, 6, 1, 206, 123, 97, 7, - 6, 1, 205, 159, 211, 93, 215, 204, 249, 133, 7, 6, 1, 182, 39, 35, 7, 6, - 1, 249, 34, 39, 35, 7, 6, 1, 137, 39, 248, 149, 39, 206, 197, 98, 7, 6, - 1, 62, 98, 7, 6, 1, 251, 150, 98, 7, 6, 1, 249, 34, 98, 7, 6, 1, 246, - 240, 98, 7, 6, 1, 75, 98, 7, 6, 1, 242, 139, 98, 7, 6, 1, 241, 55, 98, 7, - 6, 1, 239, 155, 98, 7, 6, 1, 74, 98, 7, 6, 1, 232, 203, 98, 7, 6, 1, 232, - 76, 98, 7, 6, 1, 149, 98, 7, 6, 1, 229, 28, 98, 7, 6, 1, 226, 33, 98, 7, - 6, 1, 76, 98, 7, 6, 1, 222, 67, 98, 7, 6, 1, 220, 27, 98, 7, 6, 1, 137, - 98, 7, 6, 1, 182, 98, 7, 6, 1, 213, 10, 98, 7, 6, 1, 71, 98, 7, 6, 1, - 209, 148, 98, 7, 6, 1, 207, 129, 98, 7, 6, 1, 206, 195, 98, 7, 6, 1, 206, - 123, 98, 7, 6, 1, 205, 159, 98, 238, 17, 98, 226, 57, 98, 217, 88, 98, - 214, 99, 98, 220, 155, 98, 207, 52, 170, 39, 7, 6, 1, 62, 170, 39, 7, 6, - 1, 251, 150, 170, 39, 7, 6, 1, 249, 34, 170, 39, 7, 6, 1, 246, 240, 170, - 39, 7, 6, 1, 75, 170, 39, 7, 6, 1, 242, 139, 170, 39, 7, 6, 1, 241, 55, - 170, 39, 7, 6, 1, 239, 155, 170, 39, 7, 6, 1, 74, 170, 39, 7, 6, 1, 232, - 203, 170, 39, 7, 6, 1, 232, 76, 170, 39, 7, 6, 1, 149, 170, 39, 7, 6, 1, - 229, 28, 170, 39, 7, 6, 1, 226, 33, 170, 39, 7, 6, 1, 76, 170, 39, 7, 6, - 1, 222, 67, 170, 39, 7, 6, 1, 220, 27, 170, 39, 7, 6, 1, 137, 170, 39, 7, - 6, 1, 182, 170, 39, 7, 6, 1, 213, 10, 170, 39, 7, 6, 1, 71, 170, 39, 7, - 6, 1, 209, 148, 170, 39, 7, 6, 1, 207, 129, 170, 39, 7, 6, 1, 206, 195, - 170, 39, 7, 6, 1, 206, 123, 170, 39, 7, 6, 1, 205, 159, 219, 81, 227, - 125, 53, 219, 81, 227, 122, 53, 170, 98, 7, 6, 1, 62, 170, 98, 7, 6, 1, - 251, 150, 170, 98, 7, 6, 1, 249, 34, 170, 98, 7, 6, 1, 246, 240, 170, 98, - 7, 6, 1, 75, 170, 98, 7, 6, 1, 242, 139, 170, 98, 7, 6, 1, 241, 55, 170, - 98, 7, 6, 1, 239, 155, 170, 98, 7, 6, 1, 74, 170, 98, 7, 6, 1, 232, 203, - 170, 98, 7, 6, 1, 232, 76, 170, 98, 7, 6, 1, 149, 170, 98, 7, 6, 1, 229, - 28, 170, 98, 7, 6, 1, 226, 33, 170, 98, 7, 6, 1, 76, 170, 98, 7, 6, 1, - 222, 67, 170, 98, 7, 6, 1, 220, 27, 170, 98, 7, 6, 1, 137, 170, 98, 7, 6, - 1, 182, 170, 98, 7, 6, 1, 213, 10, 170, 98, 7, 6, 1, 71, 170, 98, 7, 6, - 1, 209, 148, 170, 98, 7, 6, 1, 207, 129, 170, 98, 7, 6, 1, 206, 195, 170, - 98, 7, 6, 1, 206, 123, 170, 98, 7, 6, 1, 205, 159, 247, 57, 170, 98, 7, - 6, 1, 222, 67, 170, 98, 237, 183, 170, 98, 179, 170, 98, 217, 199, 170, - 98, 253, 115, 170, 98, 207, 52, 49, 245, 70, 98, 247, 218, 98, 247, 101, - 98, 241, 107, 98, 237, 174, 98, 225, 87, 98, 225, 79, 98, 222, 185, 98, - 214, 169, 98, 120, 2, 242, 168, 83, 98, 208, 151, 219, 24, 233, 50, 16, - 1, 62, 219, 24, 233, 50, 16, 1, 251, 150, 219, 24, 233, 50, 16, 1, 249, - 34, 219, 24, 233, 50, 16, 1, 246, 240, 219, 24, 233, 50, 16, 1, 75, 219, - 24, 233, 50, 16, 1, 242, 139, 219, 24, 233, 50, 16, 1, 241, 55, 219, 24, - 233, 50, 16, 1, 239, 155, 219, 24, 233, 50, 16, 1, 74, 219, 24, 233, 50, - 16, 1, 232, 203, 219, 24, 233, 50, 16, 1, 232, 76, 219, 24, 233, 50, 16, - 1, 149, 219, 24, 233, 50, 16, 1, 229, 28, 219, 24, 233, 50, 16, 1, 226, - 33, 219, 24, 233, 50, 16, 1, 76, 219, 24, 233, 50, 16, 1, 222, 67, 219, - 24, 233, 50, 16, 1, 220, 27, 219, 24, 233, 50, 16, 1, 137, 219, 24, 233, - 50, 16, 1, 182, 219, 24, 233, 50, 16, 1, 213, 10, 219, 24, 233, 50, 16, - 1, 71, 219, 24, 233, 50, 16, 1, 209, 148, 219, 24, 233, 50, 16, 1, 207, - 129, 219, 24, 233, 50, 16, 1, 206, 195, 219, 24, 233, 50, 16, 1, 206, - 123, 219, 24, 233, 50, 16, 1, 205, 159, 49, 161, 238, 144, 98, 64, 231, - 41, 98, 64, 217, 199, 98, 10, 209, 220, 235, 119, 98, 10, 209, 220, 235, - 123, 98, 10, 209, 220, 235, 131, 98, 64, 246, 9, 98, 10, 209, 220, 235, - 138, 98, 10, 209, 220, 235, 125, 98, 10, 209, 220, 235, 97, 98, 10, 209, - 220, 235, 124, 98, 10, 209, 220, 235, 137, 98, 10, 209, 220, 235, 111, - 98, 10, 209, 220, 235, 104, 98, 10, 209, 220, 235, 113, 98, 10, 209, 220, - 235, 134, 98, 10, 209, 220, 235, 120, 98, 10, 209, 220, 235, 136, 98, 10, - 209, 220, 235, 112, 98, 10, 209, 220, 235, 135, 98, 10, 209, 220, 235, - 98, 98, 10, 209, 220, 235, 103, 98, 10, 209, 220, 235, 96, 98, 10, 209, - 220, 235, 126, 98, 10, 209, 220, 235, 128, 98, 10, 209, 220, 235, 106, - 98, 10, 209, 220, 235, 117, 98, 10, 209, 220, 235, 115, 98, 10, 209, 220, - 235, 141, 98, 10, 209, 220, 235, 140, 98, 10, 209, 220, 235, 94, 98, 10, - 209, 220, 235, 121, 98, 10, 209, 220, 235, 139, 98, 10, 209, 220, 235, - 130, 98, 10, 209, 220, 235, 116, 98, 10, 209, 220, 235, 95, 98, 10, 209, - 220, 235, 118, 98, 10, 209, 220, 235, 100, 98, 10, 209, 220, 235, 99, 98, - 10, 209, 220, 235, 129, 98, 10, 209, 220, 235, 107, 98, 10, 209, 220, - 235, 109, 98, 10, 209, 220, 235, 110, 98, 10, 209, 220, 235, 102, 98, 10, - 209, 220, 235, 133, 98, 10, 209, 220, 235, 127, 211, 93, 215, 204, 249, - 133, 10, 209, 220, 235, 108, 211, 93, 215, 204, 249, 133, 10, 209, 220, - 235, 140, 211, 93, 215, 204, 249, 133, 10, 209, 220, 235, 138, 211, 93, - 215, 204, 249, 133, 10, 209, 220, 235, 122, 211, 93, 215, 204, 249, 133, - 10, 209, 220, 235, 105, 211, 93, 215, 204, 249, 133, 10, 209, 220, 235, - 118, 211, 93, 215, 204, 249, 133, 10, 209, 220, 235, 101, 211, 93, 215, - 204, 249, 133, 10, 209, 220, 235, 132, 211, 93, 215, 204, 249, 133, 10, - 209, 220, 235, 114, 39, 175, 252, 250, 39, 175, 253, 19, 246, 251, 241, - 160, 247, 192, 209, 238, 224, 210, 2, 214, 23, 213, 149, 131, 226, 127, - 213, 148, 247, 222, 251, 200, 243, 213, 213, 147, 131, 249, 90, 219, 82, - 249, 116, 251, 200, 224, 209, 207, 70, 207, 64, 208, 165, 226, 217, 207, - 54, 243, 121, 240, 26, 242, 182, 243, 121, 240, 26, 252, 128, 243, 121, - 240, 26, 251, 218, 240, 26, 2, 227, 75, 186, 226, 145, 93, 207, 56, 247, - 66, 226, 145, 93, 241, 215, 219, 205, 226, 145, 93, 207, 56, 240, 57, - 226, 145, 93, 241, 82, 226, 145, 93, 207, 82, 240, 57, 226, 145, 93, 230, - 81, 219, 205, 226, 145, 93, 207, 82, 247, 66, 226, 145, 93, 247, 66, 226, - 144, 186, 226, 145, 2, 242, 67, 241, 215, 219, 205, 226, 145, 2, 242, 67, - 230, 81, 219, 205, 226, 145, 2, 242, 67, 241, 82, 226, 145, 2, 242, 67, - 213, 155, 2, 242, 67, 240, 24, 214, 26, 215, 149, 214, 26, 212, 29, 60, - 243, 244, 59, 213, 154, 59, 213, 155, 2, 5, 247, 183, 59, 213, 155, 250, - 35, 247, 183, 59, 213, 155, 250, 35, 247, 184, 2, 219, 83, 247, 184, 2, - 219, 83, 247, 184, 2, 214, 199, 247, 184, 2, 229, 220, 247, 184, 2, 211, - 94, 241, 161, 207, 10, 249, 188, 242, 67, 248, 64, 217, 72, 242, 176, - 211, 61, 246, 3, 211, 61, 222, 19, 211, 61, 248, 250, 238, 63, 221, 133, - 210, 160, 248, 67, 249, 190, 218, 101, 239, 10, 213, 152, 249, 190, 243, - 125, 73, 227, 230, 243, 125, 73, 218, 203, 239, 36, 241, 125, 230, 54, - 247, 182, 227, 203, 230, 53, 242, 51, 230, 53, 230, 54, 241, 167, 233, - 69, 207, 9, 226, 66, 211, 122, 251, 183, 239, 243, 227, 92, 207, 68, 212, - 169, 230, 23, 250, 137, 221, 6, 219, 32, 252, 50, 239, 227, 252, 50, 221, - 170, 221, 171, 248, 68, 213, 236, 239, 116, 214, 229, 73, 220, 242, 227, - 115, 222, 166, 249, 173, 220, 166, 230, 34, 218, 204, 247, 72, 218, 204, - 250, 149, 247, 104, 218, 203, 247, 22, 23, 218, 203, 214, 11, 249, 144, - 214, 149, 249, 127, 241, 106, 241, 102, 218, 120, 213, 105, 220, 168, - 246, 97, 222, 208, 213, 123, 241, 103, 215, 121, 241, 214, 248, 244, 2, - 213, 98, 245, 204, 214, 187, 237, 182, 247, 70, 215, 222, 237, 181, 237, - 182, 247, 70, 244, 11, 247, 103, 248, 30, 134, 248, 216, 229, 129, 247, - 14, 238, 133, 220, 170, 215, 133, 250, 18, 249, 140, 220, 171, 73, 241, - 150, 247, 102, 241, 140, 23, 231, 58, 212, 128, 206, 253, 239, 105, 217, - 176, 249, 156, 23, 247, 29, 207, 6, 240, 29, 247, 171, 240, 29, 211, 18, - 243, 249, 250, 46, 226, 103, 247, 199, 250, 46, 226, 102, 250, 179, 249, - 155, 241, 140, 23, 231, 59, 2, 220, 231, 218, 205, 206, 222, 220, 132, - 249, 216, 248, 243, 232, 197, 248, 22, 211, 61, 242, 36, 248, 21, 241, - 217, 241, 218, 214, 147, 250, 148, 221, 206, 220, 182, 247, 137, 250, - 149, 212, 173, 211, 61, 247, 57, 241, 190, 221, 7, 246, 0, 232, 189, 245, - 34, 248, 193, 213, 235, 207, 10, 248, 46, 226, 145, 208, 201, 248, 115, - 217, 104, 217, 131, 239, 248, 248, 213, 239, 61, 2, 211, 167, 222, 166, - 212, 42, 230, 46, 249, 149, 73, 241, 171, 226, 218, 227, 112, 219, 5, - 218, 205, 30, 231, 173, 2, 232, 196, 213, 208, 226, 251, 229, 254, 214, - 227, 247, 109, 231, 55, 250, 58, 251, 228, 30, 224, 32, 250, 58, 245, - 210, 30, 224, 32, 241, 231, 241, 111, 252, 253, 211, 205, 248, 194, 238, - 65, 242, 3, 207, 26, 218, 111, 247, 172, 241, 209, 220, 196, 23, 241, - 213, 226, 251, 226, 121, 248, 230, 247, 237, 239, 65, 251, 235, 222, 22, - 211, 102, 239, 86, 247, 226, 212, 92, 211, 206, 247, 213, 249, 181, 221, - 126, 251, 234, 208, 210, 240, 218, 245, 104, 238, 242, 214, 220, 228, 15, - 249, 227, 240, 219, 245, 148, 249, 143, 241, 173, 220, 230, 248, 202, 30, - 224, 37, 226, 95, 30, 224, 32, 217, 117, 239, 197, 30, 231, 172, 210, - 250, 208, 190, 30, 217, 97, 218, 33, 215, 162, 2, 217, 134, 212, 95, 219, - 102, 23, 250, 149, 214, 245, 23, 214, 245, 249, 166, 250, 111, 23, 238, - 127, 248, 69, 241, 196, 214, 198, 218, 34, 213, 128, 214, 117, 227, 112, - 211, 19, 238, 66, 219, 103, 252, 129, 241, 147, 218, 45, 241, 147, 213, - 100, 207, 41, 229, 224, 240, 10, 219, 104, 226, 134, 219, 104, 248, 204, - 214, 200, 248, 209, 226, 128, 248, 228, 250, 60, 2, 209, 238, 249, 92, - 247, 122, 238, 55, 249, 90, 247, 221, 245, 214, 238, 55, 249, 91, 247, - 211, 249, 91, 245, 206, 245, 207, 232, 227, 225, 193, 221, 212, 214, 36, - 238, 55, 249, 91, 238, 55, 2, 240, 202, 222, 201, 249, 91, 232, 189, 220, - 176, 222, 200, 242, 181, 220, 176, 222, 200, 238, 64, 250, 133, 251, 173, - 212, 103, 228, 15, 238, 60, 229, 98, 238, 60, 247, 107, 213, 247, 217, - 103, 245, 216, 213, 247, 242, 57, 232, 208, 230, 91, 232, 189, 248, 185, - 242, 181, 248, 185, 59, 221, 144, 60, 221, 144, 207, 62, 59, 241, 196, - 207, 62, 60, 241, 196, 218, 100, 60, 218, 100, 230, 133, 219, 65, 226, - 125, 222, 76, 207, 70, 249, 96, 247, 75, 211, 198, 230, 14, 219, 105, - 248, 183, 243, 255, 247, 64, 207, 29, 214, 206, 214, 204, 238, 65, 219, - 77, 240, 15, 215, 208, 226, 163, 218, 104, 248, 56, 245, 40, 221, 17, - 249, 182, 243, 60, 222, 211, 214, 128, 215, 203, 249, 95, 252, 91, 238, - 132, 230, 126, 250, 44, 241, 213, 211, 18, 241, 213, 249, 189, 210, 141, - 239, 84, 248, 57, 250, 179, 248, 57, 241, 97, 250, 179, 248, 57, 249, - 218, 221, 146, 231, 51, 220, 186, 243, 246, 248, 232, 250, 168, 248, 232, - 245, 33, 226, 126, 242, 67, 247, 76, 242, 67, 211, 199, 242, 67, 219, - 106, 242, 67, 248, 184, 242, 67, 244, 0, 242, 67, 214, 115, 207, 29, 238, - 66, 242, 67, 226, 164, 242, 67, 245, 41, 242, 67, 221, 18, 242, 67, 241, - 100, 242, 67, 239, 113, 242, 67, 206, 247, 242, 67, 250, 56, 242, 67, - 222, 4, 242, 67, 221, 18, 224, 44, 221, 186, 220, 121, 248, 41, 242, 148, - 242, 150, 243, 124, 224, 44, 226, 123, 211, 107, 59, 120, 220, 201, 250, - 174, 233, 53, 59, 130, 220, 201, 250, 174, 233, 53, 59, 47, 220, 201, - 250, 174, 233, 53, 59, 48, 220, 201, 250, 174, 233, 53, 241, 207, 239, - 108, 53, 207, 62, 239, 108, 53, 222, 186, 239, 108, 53, 211, 229, 120, - 53, 211, 229, 130, 53, 247, 212, 239, 103, 53, 222, 142, 239, 103, 53, - 247, 52, 206, 243, 239, 86, 242, 149, 225, 107, 213, 9, 232, 181, 243, - 251, 231, 110, 249, 229, 206, 243, 247, 185, 220, 58, 239, 106, 220, 167, - 227, 211, 215, 155, 251, 196, 215, 155, 238, 251, 215, 155, 206, 243, - 217, 148, 206, 243, 249, 165, 241, 145, 249, 59, 233, 69, 215, 55, 249, - 58, 233, 69, 215, 55, 249, 139, 240, 40, 227, 221, 206, 244, 242, 48, - 227, 222, 23, 206, 245, 238, 141, 239, 102, 118, 227, 84, 238, 141, 239, - 102, 118, 206, 242, 238, 141, 239, 102, 220, 193, 222, 199, 206, 245, 2, - 249, 76, 243, 122, 249, 117, 2, 209, 30, 221, 115, 2, 249, 192, 239, 129, - 227, 222, 2, 239, 210, 221, 54, 227, 207, 227, 222, 2, 210, 148, 222, - 178, 227, 221, 222, 178, 206, 244, 250, 178, 247, 123, 206, 228, 220, - 126, 232, 189, 222, 195, 232, 189, 240, 14, 240, 69, 250, 179, 252, 112, - 242, 154, 252, 162, 252, 163, 226, 154, 233, 74, 214, 240, 233, 43, 245, - 203, 221, 114, 239, 204, 246, 101, 229, 191, 225, 217, 220, 192, 242, 68, - 227, 173, 239, 128, 250, 127, 220, 195, 213, 29, 221, 10, 231, 92, 83, - 229, 98, 230, 5, 218, 148, 240, 160, 213, 253, 231, 91, 249, 148, 247, - 78, 2, 239, 60, 207, 47, 250, 54, 239, 60, 249, 111, 239, 60, 118, 239, - 58, 214, 145, 239, 60, 239, 220, 239, 60, 239, 61, 2, 45, 249, 187, 239, - 60, 239, 227, 239, 60, 206, 45, 239, 60, 220, 59, 239, 60, 239, 61, 2, - 218, 205, 218, 218, 239, 58, 239, 61, 246, 0, 245, 157, 215, 234, 2, 32, - 67, 233, 25, 243, 63, 147, 249, 88, 252, 111, 93, 249, 174, 214, 232, 93, - 247, 164, 93, 214, 122, 213, 107, 93, 243, 244, 246, 79, 93, 221, 11, 73, - 220, 187, 241, 182, 249, 241, 245, 71, 93, 214, 137, 250, 148, 211, 244, - 250, 148, 59, 241, 172, 238, 30, 220, 199, 93, 226, 167, 250, 163, 247, - 25, 242, 169, 77, 245, 35, 53, 247, 68, 248, 203, 250, 132, 2, 206, 43, - 53, 250, 132, 2, 245, 35, 53, 250, 132, 2, 242, 184, 53, 250, 132, 2, - 220, 165, 53, 226, 167, 2, 207, 4, 248, 90, 2, 167, 211, 57, 23, 206, 43, - 53, 217, 83, 221, 113, 247, 142, 249, 115, 226, 207, 241, 177, 245, 92, - 222, 126, 245, 97, 243, 208, 241, 236, 241, 158, 222, 142, 241, 236, 241, - 158, 222, 38, 2, 247, 27, 222, 38, 242, 60, 209, 206, 248, 237, 212, 127, - 248, 237, 191, 233, 53, 248, 90, 2, 167, 211, 56, 248, 90, 2, 173, 211, - 56, 250, 129, 248, 89, 247, 198, 220, 54, 218, 95, 220, 54, 221, 234, - 213, 243, 218, 40, 211, 48, 218, 40, 249, 170, 212, 205, 230, 51, 224, - 35, 224, 36, 2, 245, 255, 247, 77, 247, 192, 249, 171, 222, 142, 249, - 171, 239, 227, 249, 171, 249, 187, 249, 171, 222, 121, 249, 171, 249, - 168, 225, 211, 250, 166, 217, 91, 227, 85, 212, 108, 219, 45, 222, 36, - 242, 33, 228, 15, 217, 130, 252, 88, 220, 76, 253, 2, 229, 100, 248, 76, - 227, 97, 222, 92, 211, 64, 233, 65, 211, 64, 222, 44, 243, 177, 93, 233, - 62, 243, 8, 243, 9, 2, 173, 51, 52, 247, 192, 227, 236, 2, 229, 91, 241, - 196, 247, 192, 227, 236, 2, 219, 81, 241, 196, 222, 142, 227, 236, 2, - 219, 81, 241, 196, 222, 142, 227, 236, 2, 229, 91, 241, 196, 220, 173, - 220, 174, 238, 69, 225, 84, 226, 179, 221, 62, 226, 179, 221, 63, 2, 86, - 51, 251, 200, 230, 46, 208, 213, 226, 178, 226, 179, 221, 63, 222, 202, - 224, 68, 226, 179, 221, 61, 252, 89, 2, 250, 118, 248, 230, 248, 231, 2, - 241, 189, 208, 210, 248, 230, 212, 105, 219, 97, 208, 209, 241, 231, 220, - 108, 220, 179, 214, 6, 210, 110, 86, 251, 241, 247, 194, 86, 23, 92, 222, - 142, 247, 234, 251, 241, 247, 194, 86, 23, 92, 222, 142, 247, 234, 251, - 242, 2, 39, 119, 222, 82, 247, 194, 173, 23, 167, 222, 142, 247, 234, - 251, 241, 252, 87, 173, 23, 167, 222, 142, 247, 234, 251, 241, 114, 249, - 114, 93, 127, 249, 114, 93, 214, 142, 2, 248, 223, 91, 214, 141, 214, - 142, 2, 119, 214, 165, 207, 64, 214, 142, 2, 129, 214, 165, 207, 63, 250, - 102, 243, 63, 220, 223, 230, 41, 227, 248, 240, 29, 218, 162, 227, 248, - 240, 29, 229, 140, 2, 233, 36, 221, 150, 247, 192, 229, 140, 2, 231, 174, - 231, 174, 229, 139, 222, 142, 229, 139, 250, 28, 250, 29, 2, 248, 223, - 91, 249, 169, 229, 196, 93, 219, 98, 249, 54, 250, 177, 2, 92, 51, 52, - 243, 34, 2, 92, 51, 52, 222, 166, 2, 242, 168, 141, 2, 47, 48, 51, 52, - 214, 173, 2, 86, 51, 52, 211, 102, 2, 167, 51, 52, 224, 68, 119, 209, - 227, 243, 86, 93, 231, 171, 212, 98, 233, 30, 16, 33, 7, 6, 230, 4, 233, - 30, 16, 33, 7, 5, 230, 4, 233, 30, 16, 33, 223, 178, 233, 30, 16, 33, - 213, 42, 233, 30, 16, 33, 7, 230, 4, 241, 219, 243, 63, 211, 97, 206, - 220, 239, 114, 223, 161, 23, 249, 176, 238, 147, 220, 248, 226, 250, 212, - 106, 247, 42, 250, 149, 215, 10, 220, 203, 214, 27, 2, 226, 247, 245, 23, - 232, 189, 16, 33, 250, 41, 211, 46, 243, 47, 60, 49, 249, 54, 59, 49, - 249, 54, 230, 86, 219, 32, 247, 233, 230, 86, 249, 187, 247, 233, 230, - 86, 222, 121, 245, 156, 230, 86, 249, 187, 245, 156, 5, 222, 121, 245, - 156, 5, 249, 187, 245, 156, 209, 205, 219, 32, 211, 51, 244, 7, 219, 32, - 211, 51, 209, 205, 5, 219, 32, 211, 51, 244, 7, 5, 219, 32, 211, 51, 229, - 92, 48, 215, 246, 59, 247, 233, 209, 203, 48, 215, 246, 59, 247, 233, 39, - 247, 60, 220, 190, 247, 60, 220, 191, 2, 239, 120, 55, 247, 60, 220, 190, - 224, 39, 47, 216, 55, 2, 129, 245, 21, 224, 39, 48, 216, 55, 2, 129, 245, - 21, 16, 33, 227, 186, 248, 96, 59, 7, 247, 59, 77, 7, 247, 59, 248, 133, - 247, 59, 222, 174, 93, 244, 10, 73, 221, 172, 247, 196, 242, 68, 119, - 222, 216, 247, 196, 242, 68, 118, 222, 216, 247, 196, 242, 68, 129, 222, - 216, 247, 196, 242, 68, 241, 125, 222, 216, 247, 196, 242, 68, 241, 204, - 222, 216, 247, 196, 242, 68, 215, 10, 222, 216, 247, 196, 242, 68, 216, - 23, 222, 216, 247, 196, 242, 68, 243, 88, 222, 216, 247, 196, 242, 68, - 224, 195, 222, 216, 247, 196, 242, 68, 212, 99, 222, 216, 247, 196, 242, - 68, 243, 59, 222, 216, 247, 196, 242, 68, 210, 127, 222, 216, 247, 196, - 242, 68, 222, 161, 247, 196, 242, 68, 210, 106, 247, 196, 242, 68, 211, - 234, 247, 196, 242, 68, 241, 121, 247, 196, 242, 68, 241, 202, 247, 196, - 242, 68, 215, 6, 247, 196, 242, 68, 216, 22, 247, 196, 242, 68, 243, 87, - 247, 196, 242, 68, 224, 194, 247, 196, 242, 68, 212, 97, 247, 196, 242, - 68, 243, 57, 247, 196, 242, 68, 210, 125, 48, 214, 141, 48, 214, 142, 2, - 119, 214, 165, 207, 64, 48, 214, 142, 2, 129, 214, 165, 207, 63, 249, 83, - 249, 84, 2, 214, 165, 207, 63, 218, 147, 250, 28, 249, 171, 248, 221, - 227, 208, 247, 195, 60, 214, 241, 23, 247, 58, 224, 68, 220, 254, 238, - 140, 227, 222, 233, 69, 249, 61, 213, 168, 229, 253, 214, 230, 222, 123, - 214, 108, 246, 84, 213, 150, 214, 130, 214, 131, 207, 48, 232, 105, 47, - 239, 108, 212, 108, 219, 45, 212, 108, 219, 46, 2, 222, 37, 48, 239, 108, - 212, 108, 219, 45, 59, 211, 89, 212, 107, 60, 211, 89, 212, 107, 212, - 108, 222, 166, 211, 102, 73, 226, 175, 247, 216, 226, 179, 221, 62, 250, - 177, 73, 243, 8, 214, 32, 243, 8, 243, 9, 2, 229, 220, 241, 165, 243, 8, - 221, 151, 131, 214, 32, 243, 8, 229, 195, 221, 233, 60, 220, 54, 229, 92, - 47, 221, 149, 229, 92, 47, 250, 144, 221, 150, 229, 92, 47, 241, 127, - 221, 150, 229, 92, 47, 222, 31, 229, 92, 47, 247, 71, 47, 206, 219, 239, - 107, 201, 222, 186, 239, 108, 53, 219, 81, 239, 108, 2, 241, 224, 214, - 121, 218, 224, 219, 81, 239, 108, 2, 241, 224, 214, 121, 218, 224, 211, - 229, 120, 53, 218, 224, 211, 229, 130, 53, 218, 224, 208, 212, 239, 107, - 218, 224, 239, 108, 2, 226, 247, 241, 228, 242, 158, 219, 81, 239, 108, - 2, 221, 211, 250, 6, 226, 247, 23, 218, 149, 241, 223, 59, 130, 220, 201, - 47, 239, 108, 233, 53, 215, 73, 59, 47, 220, 201, 233, 53, 215, 73, 59, - 48, 220, 201, 233, 53, 215, 73, 60, 47, 220, 201, 233, 53, 215, 73, 60, - 48, 220, 201, 233, 53, 60, 47, 220, 201, 250, 174, 233, 53, 60, 48, 220, - 201, 250, 174, 233, 53, 215, 73, 59, 120, 220, 201, 233, 53, 215, 73, 59, - 130, 220, 201, 233, 53, 215, 73, 60, 120, 220, 201, 233, 53, 215, 73, 60, - 130, 220, 201, 233, 53, 60, 120, 220, 201, 250, 174, 233, 53, 60, 130, - 220, 201, 250, 174, 233, 53, 245, 202, 247, 142, 231, 173, 23, 226, 125, - 129, 225, 90, 247, 141, 220, 122, 220, 209, 248, 239, 60, 239, 94, 215, - 204, 241, 177, 245, 92, 59, 239, 94, 215, 204, 241, 177, 245, 92, 214, - 187, 215, 204, 241, 177, 245, 92, 212, 165, 248, 188, 207, 0, 231, 172, - 119, 249, 55, 226, 125, 118, 249, 55, 226, 125, 129, 249, 55, 226, 125, - 211, 81, 44, 221, 113, 247, 142, 239, 94, 245, 92, 217, 93, 220, 123, - 237, 175, 242, 33, 237, 175, 222, 126, 245, 98, 237, 175, 245, 45, 2, - 212, 60, 245, 45, 2, 212, 61, 23, 221, 47, 245, 45, 2, 221, 47, 241, 113, - 2, 221, 47, 241, 113, 2, 211, 178, 241, 113, 2, 252, 123, 206, 195, 60, - 241, 158, 241, 158, 222, 142, 241, 158, 191, 233, 54, 245, 78, 191, 241, - 236, 249, 140, 241, 236, 248, 252, 243, 43, 224, 37, 243, 43, 224, 38, - 222, 37, 243, 43, 224, 38, 222, 42, 224, 37, 224, 38, 222, 37, 224, 38, - 222, 42, 243, 43, 245, 44, 243, 43, 222, 37, 243, 43, 222, 35, 245, 44, - 222, 37, 222, 35, 207, 74, 214, 128, 224, 38, 222, 42, 214, 128, 248, - 238, 222, 42, 245, 202, 207, 8, 226, 204, 227, 163, 222, 84, 247, 194, - 48, 23, 47, 216, 55, 251, 241, 248, 223, 206, 195, 233, 60, 241, 152, - 214, 250, 93, 245, 254, 241, 152, 214, 250, 93, 247, 143, 44, 231, 174, - 218, 112, 225, 84, 222, 38, 2, 39, 212, 60, 213, 255, 248, 89, 246, 129, - 231, 58, 229, 192, 214, 140, 239, 69, 233, 69, 215, 55, 129, 219, 56, 52, - 129, 219, 56, 55, 129, 219, 56, 230, 46, 129, 219, 56, 218, 167, 47, 214, - 137, 249, 100, 48, 214, 137, 249, 100, 118, 214, 137, 249, 99, 129, 214, - 137, 249, 99, 47, 211, 244, 249, 100, 48, 211, 244, 249, 100, 47, 252, - 111, 249, 100, 48, 252, 111, 249, 100, 226, 149, 249, 100, 229, 221, 226, - 149, 249, 100, 229, 221, 226, 148, 250, 146, 96, 2, 250, 145, 250, 146, - 121, 206, 195, 250, 146, 96, 2, 121, 206, 195, 250, 146, 24, 121, 206, - 195, 250, 146, 96, 2, 24, 121, 206, 195, 147, 248, 81, 83, 250, 146, 96, - 2, 24, 248, 80, 206, 227, 227, 205, 226, 130, 241, 83, 211, 124, 211, 86, - 214, 18, 73, 229, 233, 215, 56, 73, 232, 190, 226, 119, 239, 224, 242, - 67, 239, 224, 242, 68, 2, 214, 210, 242, 148, 242, 68, 2, 212, 123, 73, - 232, 107, 214, 210, 242, 68, 2, 222, 142, 226, 123, 214, 210, 242, 68, 2, - 222, 142, 226, 124, 23, 214, 210, 242, 148, 214, 210, 242, 68, 2, 222, - 142, 226, 124, 23, 247, 166, 213, 106, 214, 210, 242, 68, 2, 222, 142, - 226, 124, 23, 211, 196, 242, 148, 214, 210, 242, 68, 2, 239, 119, 214, - 210, 242, 68, 2, 238, 68, 207, 2, 242, 67, 214, 210, 242, 68, 2, 214, - 210, 242, 148, 242, 68, 217, 122, 245, 235, 241, 150, 219, 8, 242, 67, - 214, 210, 242, 68, 2, 239, 59, 242, 148, 214, 210, 242, 68, 2, 213, 150, - 214, 209, 242, 67, 225, 88, 242, 67, 242, 160, 242, 67, 209, 232, 242, - 67, 242, 68, 2, 247, 166, 213, 106, 221, 142, 242, 67, 247, 134, 242, 67, - 247, 135, 242, 67, 231, 90, 242, 67, 242, 68, 211, 231, 32, 231, 91, 231, - 90, 242, 68, 2, 214, 210, 242, 148, 231, 90, 242, 68, 2, 247, 192, 242, - 148, 242, 68, 2, 213, 209, 211, 107, 242, 68, 2, 213, 209, 211, 108, 23, - 207, 2, 242, 150, 242, 68, 2, 213, 209, 211, 108, 23, 211, 196, 242, 148, - 245, 99, 242, 67, 206, 226, 242, 67, 252, 107, 242, 67, 220, 164, 242, - 67, 247, 44, 242, 67, 221, 117, 242, 67, 242, 68, 2, 229, 114, 73, 211, - 29, 245, 99, 249, 57, 219, 8, 242, 67, 241, 94, 242, 68, 2, 222, 142, - 226, 123, 252, 105, 242, 67, 242, 26, 242, 67, 207, 49, 242, 67, 214, - 231, 242, 67, 211, 161, 242, 67, 239, 225, 242, 67, 229, 101, 247, 44, - 242, 67, 242, 68, 2, 222, 142, 226, 123, 238, 20, 242, 67, 242, 68, 2, - 222, 142, 226, 124, 23, 247, 166, 213, 106, 242, 68, 217, 95, 233, 69, - 242, 27, 251, 206, 242, 67, 241, 169, 242, 67, 214, 232, 242, 67, 245, - 71, 242, 67, 242, 68, 206, 253, 226, 123, 242, 68, 2, 227, 111, 227, 175, - 239, 224, 248, 184, 242, 68, 2, 214, 210, 242, 148, 248, 184, 242, 68, 2, - 212, 123, 73, 232, 107, 214, 210, 248, 184, 242, 68, 2, 222, 142, 226, - 123, 214, 210, 248, 184, 242, 68, 2, 239, 59, 242, 148, 248, 184, 242, - 68, 2, 206, 217, 214, 211, 231, 90, 248, 184, 242, 68, 2, 247, 192, 242, - 148, 220, 164, 248, 184, 242, 67, 247, 44, 248, 184, 242, 67, 207, 49, - 248, 184, 242, 67, 214, 225, 241, 94, 242, 67, 214, 225, 214, 210, 242, - 67, 242, 68, 2, 224, 68, 240, 7, 240, 140, 242, 68, 2, 222, 186, 240, - 140, 221, 115, 249, 145, 245, 249, 217, 73, 226, 163, 239, 62, 226, 163, - 214, 143, 226, 163, 239, 96, 221, 115, 219, 80, 119, 239, 107, 221, 115, - 219, 80, 249, 157, 239, 103, 233, 69, 248, 135, 221, 115, 241, 93, 221, - 115, 2, 220, 164, 242, 67, 221, 115, 2, 241, 159, 239, 102, 143, 207, 36, - 220, 201, 230, 53, 188, 207, 36, 220, 201, 230, 53, 143, 243, 117, 220, - 201, 230, 53, 188, 243, 117, 220, 201, 230, 53, 201, 143, 207, 36, 220, - 201, 230, 53, 201, 188, 207, 36, 220, 201, 230, 53, 201, 143, 243, 117, - 220, 201, 230, 53, 201, 188, 243, 117, 220, 201, 230, 53, 143, 207, 36, - 220, 201, 208, 196, 230, 53, 188, 207, 36, 220, 201, 208, 196, 230, 53, - 143, 243, 117, 220, 201, 208, 196, 230, 53, 188, 243, 117, 220, 201, 208, - 196, 230, 53, 77, 143, 207, 36, 220, 201, 208, 196, 230, 53, 77, 188, - 207, 36, 220, 201, 208, 196, 230, 53, 77, 143, 243, 117, 220, 201, 208, - 196, 230, 53, 77, 188, 243, 117, 220, 201, 208, 196, 230, 53, 143, 207, - 36, 220, 201, 249, 97, 188, 207, 36, 220, 201, 249, 97, 143, 243, 117, - 220, 201, 249, 97, 188, 243, 117, 220, 201, 249, 97, 77, 143, 207, 36, - 220, 201, 249, 97, 77, 188, 207, 36, 220, 201, 249, 97, 77, 143, 243, - 117, 220, 201, 249, 97, 77, 188, 243, 117, 220, 201, 249, 97, 238, 139, - 219, 189, 49, 222, 111, 238, 139, 219, 189, 49, 222, 112, 233, 69, 60, - 214, 107, 214, 182, 219, 189, 49, 222, 111, 214, 182, 219, 189, 49, 222, - 112, 233, 69, 60, 214, 107, 92, 218, 116, 167, 218, 116, 86, 218, 116, - 173, 218, 116, 121, 28, 242, 204, 222, 111, 77, 121, 28, 242, 204, 222, - 111, 28, 222, 142, 242, 204, 222, 111, 77, 28, 222, 142, 242, 204, 222, - 111, 77, 252, 126, 222, 111, 213, 109, 252, 126, 222, 111, 38, 77, 50, - 201, 247, 156, 219, 180, 141, 222, 111, 38, 77, 50, 247, 156, 219, 180, - 141, 222, 111, 38, 77, 114, 50, 247, 156, 219, 180, 141, 222, 111, 77, - 233, 11, 222, 111, 38, 233, 11, 222, 111, 77, 38, 233, 11, 222, 111, 208, - 226, 77, 214, 180, 208, 226, 77, 218, 225, 214, 180, 248, 79, 249, 181, - 218, 225, 248, 79, 249, 181, 218, 116, 239, 46, 214, 13, 229, 137, 219, - 86, 248, 204, 238, 248, 211, 74, 238, 248, 211, 75, 2, 249, 86, 224, 44, - 211, 74, 227, 56, 147, 219, 87, 214, 19, 211, 72, 211, 73, 248, 204, 249, - 62, 222, 163, 249, 62, 211, 26, 249, 63, 213, 251, 226, 208, 252, 130, - 241, 220, 243, 27, 220, 193, 248, 204, 222, 163, 220, 193, 248, 204, 212, - 141, 222, 163, 212, 141, 251, 172, 222, 163, 251, 172, 219, 39, 209, 31, - 245, 231, 211, 17, 251, 236, 229, 105, 211, 80, 226, 157, 226, 129, 219, - 85, 213, 122, 219, 85, 226, 129, 248, 251, 252, 234, 211, 71, 215, 167, - 218, 92, 214, 135, 194, 211, 78, 229, 223, 79, 211, 78, 229, 223, 247, - 123, 53, 220, 193, 248, 190, 218, 218, 229, 223, 211, 48, 241, 197, 222, - 166, 220, 175, 245, 26, 224, 68, 243, 14, 53, 214, 208, 93, 224, 68, 214, - 208, 93, 220, 53, 229, 181, 233, 69, 232, 217, 220, 239, 93, 245, 52, - 224, 43, 229, 181, 93, 220, 169, 207, 70, 93, 224, 58, 207, 70, 93, 249, - 240, 224, 68, 249, 239, 249, 238, 226, 129, 249, 238, 221, 166, 224, 68, - 221, 165, 248, 48, 247, 53, 227, 80, 93, 206, 241, 93, 218, 234, 250, - 179, 93, 211, 125, 207, 70, 247, 189, 215, 126, 250, 105, 250, 103, 221, - 197, 247, 108, 247, 12, 250, 160, 247, 217, 47, 229, 71, 211, 52, 2, 218, - 93, 247, 90, 220, 111, 53, 39, 233, 43, 214, 163, 249, 138, 93, 240, 39, - 93, 247, 83, 23, 230, 96, 214, 232, 253, 18, 215, 147, 250, 159, 250, 27, - 250, 28, 250, 51, 239, 115, 23, 206, 220, 215, 180, 222, 190, 243, 241, - 226, 133, 219, 86, 211, 82, 226, 135, 249, 180, 209, 205, 226, 218, 252, - 194, 209, 205, 252, 194, 209, 205, 5, 252, 194, 5, 252, 194, 224, 47, - 252, 194, 252, 195, 245, 215, 252, 195, 251, 246, 217, 129, 222, 163, - 241, 220, 243, 27, 245, 146, 229, 137, 221, 200, 215, 167, 125, 16, 33, - 219, 185, 125, 16, 33, 252, 196, 125, 16, 33, 241, 219, 125, 16, 33, 243, - 120, 125, 16, 33, 207, 69, 125, 16, 33, 252, 39, 125, 16, 33, 252, 40, - 219, 26, 125, 16, 33, 252, 40, 219, 25, 125, 16, 33, 252, 40, 208, 179, - 125, 16, 33, 252, 40, 208, 178, 125, 16, 33, 208, 193, 125, 16, 33, 208, - 192, 125, 16, 33, 208, 191, 125, 16, 33, 213, 161, 125, 16, 33, 221, 70, - 213, 161, 125, 16, 33, 60, 213, 161, 125, 16, 33, 227, 79, 213, 189, 125, - 16, 33, 227, 79, 213, 188, 125, 16, 33, 227, 79, 213, 187, 125, 16, 33, - 247, 236, 125, 16, 33, 217, 165, 125, 16, 33, 224, 183, 125, 16, 33, 208, - 177, 125, 16, 33, 208, 176, 125, 16, 33, 218, 117, 217, 165, 125, 16, 33, - 218, 117, 217, 164, 125, 16, 33, 240, 11, 125, 16, 33, 215, 52, 125, 16, - 33, 232, 240, 222, 117, 125, 16, 33, 232, 240, 222, 116, 125, 16, 33, - 247, 63, 73, 232, 239, 125, 16, 33, 219, 22, 73, 232, 239, 125, 16, 33, - 247, 99, 222, 117, 125, 16, 33, 232, 238, 222, 117, 125, 16, 33, 213, - 190, 73, 247, 98, 125, 16, 33, 247, 63, 73, 247, 98, 125, 16, 33, 247, - 63, 73, 247, 97, 125, 16, 33, 247, 99, 252, 81, 125, 16, 33, 217, 166, - 73, 247, 99, 252, 81, 125, 16, 33, 213, 190, 73, 217, 166, 73, 247, 98, - 125, 16, 33, 209, 26, 125, 16, 33, 211, 174, 222, 117, 125, 16, 33, 230, - 57, 222, 117, 125, 16, 33, 252, 80, 222, 117, 125, 16, 33, 213, 190, 73, - 252, 79, 125, 16, 33, 217, 166, 73, 252, 79, 125, 16, 33, 213, 190, 73, - 217, 166, 73, 252, 79, 125, 16, 33, 208, 194, 73, 252, 79, 125, 16, 33, - 219, 22, 73, 252, 79, 125, 16, 33, 219, 22, 73, 252, 78, 125, 16, 33, - 219, 21, 125, 16, 33, 219, 20, 125, 16, 33, 219, 19, 125, 16, 33, 219, - 18, 125, 16, 33, 252, 159, 125, 16, 33, 252, 158, 125, 16, 33, 227, 196, - 125, 16, 33, 217, 171, 125, 16, 33, 251, 240, 125, 16, 33, 219, 48, 125, - 16, 33, 219, 47, 125, 16, 33, 251, 175, 125, 16, 33, 249, 210, 222, 117, - 125, 16, 33, 212, 160, 125, 16, 33, 212, 159, 125, 16, 33, 219, 191, 229, - 214, 125, 16, 33, 249, 162, 125, 16, 33, 249, 161, 125, 16, 33, 249, 160, - 125, 16, 33, 252, 138, 125, 16, 33, 222, 189, 125, 16, 33, 214, 124, 125, - 16, 33, 211, 172, 125, 16, 33, 239, 194, 125, 16, 33, 207, 57, 125, 16, - 33, 220, 163, 125, 16, 33, 248, 235, 125, 16, 33, 210, 136, 125, 16, 33, - 248, 206, 226, 138, 125, 16, 33, 217, 107, 73, 232, 109, 125, 16, 33, - 248, 248, 125, 16, 33, 211, 45, 125, 16, 33, 214, 24, 211, 45, 125, 16, - 33, 229, 136, 125, 16, 33, 214, 191, 125, 16, 33, 209, 186, 125, 16, 33, - 238, 66, 243, 223, 125, 16, 33, 251, 220, 125, 16, 33, 220, 171, 251, - 220, 125, 16, 33, 249, 118, 125, 16, 33, 220, 162, 249, 118, 125, 16, 33, - 252, 135, 125, 16, 33, 213, 239, 213, 142, 213, 238, 125, 16, 33, 213, - 239, 213, 142, 213, 237, 125, 16, 33, 213, 186, 125, 16, 33, 220, 137, - 125, 16, 33, 245, 88, 125, 16, 33, 245, 90, 125, 16, 33, 245, 89, 125, - 16, 33, 220, 62, 125, 16, 33, 220, 51, 125, 16, 33, 247, 51, 125, 16, 33, - 247, 50, 125, 16, 33, 247, 49, 125, 16, 33, 247, 48, 125, 16, 33, 247, - 47, 125, 16, 33, 252, 171, 125, 16, 33, 250, 106, 73, 227, 180, 125, 16, - 33, 250, 106, 73, 209, 58, 125, 16, 33, 218, 232, 125, 16, 33, 238, 58, - 125, 16, 33, 224, 209, 125, 16, 33, 246, 66, 125, 16, 33, 226, 152, 125, - 16, 33, 160, 243, 253, 125, 16, 33, 160, 222, 95, 60, 230, 41, 232, 223, - 48, 211, 51, 60, 209, 205, 232, 223, 48, 211, 51, 60, 218, 162, 232, 223, - 48, 211, 51, 60, 244, 7, 232, 223, 48, 211, 51, 60, 214, 225, 5, 247, - 233, 227, 109, 24, 59, 247, 233, 24, 59, 247, 233, 77, 59, 247, 233, 208, - 226, 77, 59, 247, 233, 242, 153, 77, 59, 247, 233, 59, 247, 234, 247, - 119, 60, 5, 247, 233, 218, 95, 212, 161, 60, 211, 169, 214, 107, 60, 214, - 225, 5, 214, 107, 147, 59, 214, 107, 227, 109, 59, 214, 107, 24, 59, 214, - 107, 77, 59, 214, 107, 208, 226, 77, 59, 214, 107, 242, 153, 77, 59, 214, - 107, 59, 49, 247, 119, 60, 208, 226, 5, 214, 107, 59, 49, 247, 119, 60, - 227, 109, 214, 107, 49, 212, 161, 60, 211, 169, 245, 156, 60, 208, 226, - 5, 245, 156, 60, 227, 109, 5, 245, 156, 59, 245, 157, 247, 119, 60, 208, - 226, 5, 245, 156, 59, 245, 157, 247, 119, 60, 227, 109, 245, 156, 245, - 157, 212, 161, 60, 211, 169, 229, 88, 60, 208, 226, 5, 229, 88, 60, 227, - 109, 5, 229, 88, 59, 229, 89, 247, 119, 60, 5, 229, 88, 212, 12, 27, 247, - 59, 147, 27, 247, 59, 227, 109, 27, 247, 59, 24, 27, 247, 59, 208, 226, - 24, 27, 247, 59, 208, 226, 77, 27, 247, 59, 242, 153, 77, 27, 247, 59, - 212, 12, 217, 162, 147, 217, 162, 227, 109, 217, 162, 24, 217, 162, 77, - 217, 162, 208, 226, 77, 217, 162, 242, 153, 77, 217, 162, 147, 241, 204, - 214, 119, 251, 209, 227, 109, 241, 204, 214, 119, 251, 209, 24, 241, 204, - 214, 119, 251, 209, 77, 241, 204, 214, 119, 251, 209, 208, 226, 77, 241, - 204, 214, 119, 251, 209, 242, 153, 77, 241, 204, 214, 119, 251, 209, 147, - 215, 10, 214, 119, 251, 209, 227, 109, 215, 10, 214, 119, 251, 209, 24, - 215, 10, 214, 119, 251, 209, 77, 215, 10, 214, 119, 251, 209, 208, 226, - 77, 215, 10, 214, 119, 251, 209, 242, 153, 77, 215, 10, 214, 119, 251, - 209, 147, 243, 88, 214, 119, 251, 209, 227, 109, 243, 88, 214, 119, 251, - 209, 24, 243, 88, 214, 119, 251, 209, 77, 243, 88, 214, 119, 251, 209, - 208, 226, 77, 243, 88, 214, 119, 251, 209, 147, 129, 220, 203, 60, 214, - 26, 227, 109, 129, 220, 203, 60, 214, 26, 129, 220, 203, 60, 214, 26, - 227, 109, 129, 220, 203, 221, 4, 214, 26, 147, 241, 125, 220, 203, 60, - 214, 26, 227, 109, 241, 125, 220, 203, 60, 214, 26, 241, 125, 220, 203, - 60, 214, 26, 227, 109, 241, 125, 220, 203, 221, 4, 214, 26, 218, 225, - 147, 241, 125, 220, 203, 221, 4, 214, 26, 147, 241, 204, 220, 203, 60, - 214, 26, 77, 241, 204, 220, 203, 60, 214, 26, 227, 109, 215, 10, 220, - 203, 60, 214, 26, 77, 215, 10, 220, 203, 60, 214, 26, 215, 10, 220, 203, - 221, 4, 214, 26, 227, 109, 243, 88, 220, 203, 60, 214, 26, 77, 243, 88, - 220, 203, 60, 214, 26, 208, 226, 77, 243, 88, 220, 203, 60, 214, 26, 77, - 243, 88, 220, 203, 221, 4, 214, 26, 147, 210, 127, 220, 203, 60, 214, 26, - 77, 210, 127, 220, 203, 60, 214, 26, 77, 210, 127, 220, 203, 221, 4, 214, - 26, 92, 51, 2, 5, 211, 52, 251, 243, 167, 51, 2, 5, 211, 52, 251, 243, - 86, 51, 2, 5, 211, 52, 251, 243, 173, 51, 2, 5, 211, 52, 251, 243, 92, - 51, 2, 227, 109, 211, 52, 251, 243, 167, 51, 2, 227, 109, 211, 52, 251, - 243, 86, 51, 2, 227, 109, 211, 52, 251, 243, 173, 51, 2, 227, 109, 211, - 52, 251, 243, 92, 51, 2, 230, 86, 211, 52, 251, 243, 167, 51, 2, 230, 86, - 211, 52, 251, 243, 86, 51, 2, 230, 86, 211, 52, 251, 243, 173, 51, 2, - 230, 86, 211, 52, 251, 243, 92, 51, 2, 5, 242, 238, 251, 243, 167, 51, 2, - 5, 242, 238, 251, 243, 86, 51, 2, 5, 242, 238, 251, 243, 173, 51, 2, 5, - 242, 238, 251, 243, 92, 51, 2, 242, 238, 251, 243, 167, 51, 2, 242, 238, - 251, 243, 86, 51, 2, 242, 238, 251, 243, 173, 51, 2, 242, 238, 251, 243, - 77, 92, 51, 2, 242, 238, 251, 243, 77, 167, 51, 2, 242, 238, 251, 243, - 77, 86, 51, 2, 242, 238, 251, 243, 77, 173, 51, 2, 242, 238, 251, 243, - 77, 92, 51, 2, 230, 86, 242, 238, 251, 243, 77, 167, 51, 2, 230, 86, 242, - 238, 251, 243, 77, 86, 51, 2, 230, 86, 242, 238, 251, 243, 77, 173, 51, - 2, 230, 86, 242, 238, 251, 243, 92, 211, 50, 51, 2, 225, 199, 215, 244, - 167, 211, 50, 51, 2, 225, 199, 215, 244, 86, 211, 50, 51, 2, 225, 199, - 215, 244, 173, 211, 50, 51, 2, 225, 199, 215, 244, 92, 211, 50, 51, 2, - 227, 109, 215, 244, 167, 211, 50, 51, 2, 227, 109, 215, 244, 86, 211, 50, - 51, 2, 227, 109, 215, 244, 173, 211, 50, 51, 2, 227, 109, 215, 244, 92, - 211, 50, 51, 2, 24, 215, 244, 167, 211, 50, 51, 2, 24, 215, 244, 86, 211, - 50, 51, 2, 24, 215, 244, 173, 211, 50, 51, 2, 24, 215, 244, 92, 211, 50, - 51, 2, 77, 215, 244, 167, 211, 50, 51, 2, 77, 215, 244, 86, 211, 50, 51, - 2, 77, 215, 244, 173, 211, 50, 51, 2, 77, 215, 244, 92, 211, 50, 51, 2, - 208, 226, 77, 215, 244, 167, 211, 50, 51, 2, 208, 226, 77, 215, 244, 86, - 211, 50, 51, 2, 208, 226, 77, 215, 244, 173, 211, 50, 51, 2, 208, 226, - 77, 215, 244, 92, 241, 227, 45, 167, 241, 227, 45, 86, 241, 227, 45, 173, - 241, 227, 45, 92, 98, 45, 167, 98, 45, 86, 98, 45, 173, 98, 45, 92, 247, - 144, 45, 167, 247, 144, 45, 86, 247, 144, 45, 173, 247, 144, 45, 92, 77, - 247, 144, 45, 167, 77, 247, 144, 45, 86, 77, 247, 144, 45, 173, 77, 247, - 144, 45, 92, 77, 45, 167, 77, 45, 86, 77, 45, 173, 77, 45, 92, 38, 45, - 167, 38, 45, 86, 38, 45, 173, 38, 45, 143, 207, 36, 38, 45, 143, 243, - 117, 38, 45, 188, 243, 117, 38, 45, 188, 207, 36, 38, 45, 47, 48, 38, 45, - 120, 130, 38, 45, 207, 16, 92, 147, 138, 45, 207, 16, 167, 147, 138, 45, - 207, 16, 86, 147, 138, 45, 207, 16, 173, 147, 138, 45, 207, 16, 143, 207, - 36, 147, 138, 45, 207, 16, 143, 243, 117, 147, 138, 45, 207, 16, 188, - 243, 117, 147, 138, 45, 207, 16, 188, 207, 36, 147, 138, 45, 207, 16, 92, - 138, 45, 207, 16, 167, 138, 45, 207, 16, 86, 138, 45, 207, 16, 173, 138, - 45, 207, 16, 143, 207, 36, 138, 45, 207, 16, 143, 243, 117, 138, 45, 207, - 16, 188, 243, 117, 138, 45, 207, 16, 188, 207, 36, 138, 45, 207, 16, 92, - 227, 109, 138, 45, 207, 16, 167, 227, 109, 138, 45, 207, 16, 86, 227, - 109, 138, 45, 207, 16, 173, 227, 109, 138, 45, 207, 16, 143, 207, 36, - 227, 109, 138, 45, 207, 16, 143, 243, 117, 227, 109, 138, 45, 207, 16, - 188, 243, 117, 227, 109, 138, 45, 207, 16, 188, 207, 36, 227, 109, 138, - 45, 207, 16, 92, 77, 138, 45, 207, 16, 167, 77, 138, 45, 207, 16, 86, 77, - 138, 45, 207, 16, 173, 77, 138, 45, 207, 16, 143, 207, 36, 77, 138, 45, - 207, 16, 143, 243, 117, 77, 138, 45, 207, 16, 188, 243, 117, 77, 138, 45, - 207, 16, 188, 207, 36, 77, 138, 45, 207, 16, 92, 208, 226, 77, 138, 45, - 207, 16, 167, 208, 226, 77, 138, 45, 207, 16, 86, 208, 226, 77, 138, 45, - 207, 16, 173, 208, 226, 77, 138, 45, 207, 16, 143, 207, 36, 208, 226, 77, - 138, 45, 207, 16, 143, 243, 117, 208, 226, 77, 138, 45, 207, 16, 188, - 243, 117, 208, 226, 77, 138, 45, 207, 16, 188, 207, 36, 208, 226, 77, - 138, 45, 92, 211, 52, 251, 243, 167, 211, 52, 251, 243, 86, 211, 52, 251, - 243, 173, 211, 52, 251, 243, 92, 59, 51, 206, 255, 211, 52, 251, 243, - 167, 59, 51, 206, 255, 211, 52, 251, 243, 86, 59, 51, 206, 255, 211, 52, - 251, 243, 173, 59, 51, 206, 255, 211, 52, 251, 243, 92, 51, 2, 224, 39, - 212, 191, 167, 51, 2, 224, 39, 212, 191, 86, 51, 2, 224, 39, 212, 191, - 173, 51, 2, 224, 39, 212, 191, 77, 51, 215, 245, 207, 15, 102, 77, 51, - 215, 245, 207, 15, 118, 212, 7, 77, 51, 215, 245, 207, 15, 119, 239, 121, - 77, 51, 215, 245, 207, 15, 119, 212, 10, 92, 249, 151, 59, 45, 86, 249, - 154, 215, 247, 59, 45, 92, 211, 102, 215, 247, 59, 45, 86, 211, 102, 215, - 247, 59, 45, 92, 230, 40, 59, 45, 86, 218, 161, 59, 45, 92, 218, 161, 59, - 45, 86, 230, 40, 59, 45, 92, 250, 175, 215, 246, 59, 45, 86, 250, 175, - 215, 246, 59, 45, 92, 241, 96, 215, 246, 59, 45, 86, 241, 96, 215, 246, - 59, 45, 59, 51, 215, 245, 207, 15, 102, 59, 51, 215, 245, 207, 15, 118, - 212, 7, 10, 15, 237, 171, 10, 15, 237, 170, 10, 15, 237, 169, 10, 15, - 237, 168, 10, 15, 237, 167, 10, 15, 237, 166, 10, 15, 237, 165, 10, 15, - 237, 164, 10, 15, 237, 163, 10, 15, 237, 162, 10, 15, 237, 161, 10, 15, - 237, 160, 10, 15, 237, 159, 10, 15, 237, 158, 10, 15, 237, 157, 10, 15, - 237, 156, 10, 15, 237, 155, 10, 15, 237, 154, 10, 15, 237, 153, 10, 15, - 237, 152, 10, 15, 237, 151, 10, 15, 237, 150, 10, 15, 237, 149, 10, 15, - 237, 148, 10, 15, 237, 147, 10, 15, 237, 146, 10, 15, 237, 145, 10, 15, - 237, 144, 10, 15, 237, 143, 10, 15, 237, 142, 10, 15, 237, 141, 10, 15, - 237, 140, 10, 15, 237, 139, 10, 15, 237, 138, 10, 15, 237, 137, 10, 15, - 237, 136, 10, 15, 237, 135, 10, 15, 237, 134, 10, 15, 237, 133, 10, 15, - 237, 132, 10, 15, 237, 131, 10, 15, 237, 130, 10, 15, 237, 129, 10, 15, - 237, 128, 10, 15, 237, 127, 10, 15, 237, 126, 10, 15, 237, 125, 10, 15, - 237, 124, 10, 15, 237, 123, 10, 15, 237, 122, 10, 15, 237, 121, 10, 15, - 237, 120, 10, 15, 237, 119, 10, 15, 237, 118, 10, 15, 237, 117, 10, 15, - 237, 116, 10, 15, 237, 115, 10, 15, 237, 114, 10, 15, 237, 113, 10, 15, - 237, 112, 10, 15, 237, 111, 10, 15, 237, 110, 10, 15, 237, 109, 10, 15, - 237, 108, 10, 15, 237, 107, 10, 15, 237, 106, 10, 15, 237, 105, 10, 15, - 237, 104, 10, 15, 237, 103, 10, 15, 237, 102, 10, 15, 237, 101, 10, 15, - 237, 100, 10, 15, 237, 99, 10, 15, 237, 98, 10, 15, 237, 97, 10, 15, 237, - 96, 10, 15, 237, 95, 10, 15, 237, 94, 10, 15, 237, 93, 10, 15, 237, 92, - 10, 15, 237, 91, 10, 15, 237, 90, 10, 15, 237, 89, 10, 15, 237, 88, 10, - 15, 237, 87, 10, 15, 237, 86, 10, 15, 237, 85, 10, 15, 237, 84, 10, 15, - 237, 83, 10, 15, 237, 82, 10, 15, 237, 81, 10, 15, 237, 80, 10, 15, 237, - 79, 10, 15, 237, 78, 10, 15, 237, 77, 10, 15, 237, 76, 10, 15, 237, 75, - 10, 15, 237, 74, 10, 15, 237, 73, 10, 15, 237, 72, 10, 15, 237, 71, 10, - 15, 237, 70, 10, 15, 237, 69, 10, 15, 237, 68, 10, 15, 237, 67, 10, 15, - 237, 66, 10, 15, 237, 65, 10, 15, 237, 64, 10, 15, 237, 63, 10, 15, 237, - 62, 10, 15, 237, 61, 10, 15, 237, 60, 10, 15, 237, 59, 10, 15, 237, 58, - 10, 15, 237, 57, 10, 15, 237, 56, 10, 15, 237, 55, 10, 15, 237, 54, 10, - 15, 237, 53, 10, 15, 237, 52, 10, 15, 237, 51, 10, 15, 237, 50, 10, 15, - 237, 49, 10, 15, 237, 48, 10, 15, 237, 47, 10, 15, 237, 46, 10, 15, 237, - 45, 10, 15, 237, 44, 10, 15, 237, 43, 10, 15, 237, 42, 10, 15, 237, 41, - 10, 15, 237, 40, 10, 15, 237, 39, 10, 15, 237, 38, 10, 15, 237, 37, 10, - 15, 237, 36, 10, 15, 237, 35, 10, 15, 237, 34, 10, 15, 237, 33, 10, 15, - 237, 32, 10, 15, 237, 31, 10, 15, 237, 30, 10, 15, 237, 29, 10, 15, 237, - 28, 10, 15, 237, 27, 10, 15, 237, 26, 10, 15, 237, 25, 10, 15, 237, 24, - 10, 15, 237, 23, 10, 15, 237, 22, 10, 15, 237, 21, 10, 15, 237, 20, 10, - 15, 237, 19, 10, 15, 237, 18, 10, 15, 237, 17, 10, 15, 237, 16, 10, 15, - 237, 15, 10, 15, 237, 14, 10, 15, 237, 13, 10, 15, 237, 12, 10, 15, 237, - 11, 10, 15, 237, 10, 10, 15, 237, 9, 10, 15, 237, 8, 10, 15, 237, 7, 10, - 15, 237, 6, 10, 15, 237, 5, 10, 15, 237, 4, 10, 15, 237, 3, 10, 15, 237, - 2, 10, 15, 237, 1, 10, 15, 237, 0, 10, 15, 236, 255, 10, 15, 236, 254, - 10, 15, 236, 253, 10, 15, 236, 252, 10, 15, 236, 251, 10, 15, 236, 250, - 10, 15, 236, 249, 10, 15, 236, 248, 10, 15, 236, 247, 10, 15, 236, 246, - 10, 15, 236, 245, 10, 15, 236, 244, 10, 15, 236, 243, 10, 15, 236, 242, - 10, 15, 236, 241, 10, 15, 236, 240, 10, 15, 236, 239, 10, 15, 236, 238, - 10, 15, 236, 237, 10, 15, 236, 236, 10, 15, 236, 235, 10, 15, 236, 234, - 10, 15, 236, 233, 10, 15, 236, 232, 10, 15, 236, 231, 10, 15, 236, 230, - 10, 15, 236, 229, 10, 15, 236, 228, 10, 15, 236, 227, 10, 15, 236, 226, - 10, 15, 236, 225, 10, 15, 236, 224, 10, 15, 236, 223, 10, 15, 236, 222, - 10, 15, 236, 221, 10, 15, 236, 220, 10, 15, 236, 219, 10, 15, 236, 218, - 10, 15, 236, 217, 10, 15, 236, 216, 10, 15, 236, 215, 10, 15, 236, 214, - 10, 15, 236, 213, 10, 15, 236, 212, 10, 15, 236, 211, 10, 15, 236, 210, - 10, 15, 236, 209, 10, 15, 236, 208, 10, 15, 236, 207, 10, 15, 236, 206, - 10, 15, 236, 205, 10, 15, 236, 204, 10, 15, 236, 203, 10, 15, 236, 202, - 10, 15, 236, 201, 10, 15, 236, 200, 10, 15, 236, 199, 10, 15, 236, 198, - 10, 15, 236, 197, 10, 15, 236, 196, 10, 15, 236, 195, 10, 15, 236, 194, - 10, 15, 236, 193, 10, 15, 236, 192, 10, 15, 236, 191, 10, 15, 236, 190, - 10, 15, 236, 189, 10, 15, 236, 188, 10, 15, 236, 187, 10, 15, 236, 186, - 10, 15, 236, 185, 10, 15, 236, 184, 10, 15, 236, 183, 10, 15, 236, 182, - 10, 15, 236, 181, 10, 15, 236, 180, 10, 15, 236, 179, 10, 15, 236, 178, - 10, 15, 236, 177, 10, 15, 236, 176, 10, 15, 236, 175, 10, 15, 236, 174, - 10, 15, 236, 173, 10, 15, 236, 172, 10, 15, 236, 171, 10, 15, 236, 170, - 10, 15, 236, 169, 10, 15, 236, 168, 10, 15, 236, 167, 10, 15, 236, 166, - 10, 15, 236, 165, 10, 15, 236, 164, 10, 15, 236, 163, 10, 15, 236, 162, - 10, 15, 236, 161, 10, 15, 236, 160, 10, 15, 236, 159, 10, 15, 236, 158, - 10, 15, 236, 157, 10, 15, 236, 156, 10, 15, 236, 155, 10, 15, 236, 154, - 10, 15, 236, 153, 10, 15, 236, 152, 10, 15, 236, 151, 10, 15, 236, 150, - 10, 15, 236, 149, 10, 15, 236, 148, 10, 15, 236, 147, 10, 15, 236, 146, - 10, 15, 236, 145, 10, 15, 236, 144, 10, 15, 236, 143, 10, 15, 236, 142, - 10, 15, 236, 141, 10, 15, 236, 140, 10, 15, 236, 139, 10, 15, 236, 138, - 10, 15, 236, 137, 10, 15, 236, 136, 10, 15, 236, 135, 10, 15, 236, 134, - 10, 15, 236, 133, 10, 15, 236, 132, 10, 15, 236, 131, 10, 15, 236, 130, - 10, 15, 236, 129, 10, 15, 236, 128, 10, 15, 236, 127, 10, 15, 236, 126, - 10, 15, 236, 125, 10, 15, 236, 124, 10, 15, 236, 123, 10, 15, 236, 122, - 10, 15, 236, 121, 10, 15, 236, 120, 10, 15, 236, 119, 10, 15, 236, 118, - 10, 15, 236, 117, 10, 15, 236, 116, 10, 15, 236, 115, 10, 15, 236, 114, - 10, 15, 236, 113, 10, 15, 236, 112, 10, 15, 236, 111, 10, 15, 236, 110, - 10, 15, 236, 109, 10, 15, 236, 108, 10, 15, 236, 107, 10, 15, 236, 106, - 10, 15, 236, 105, 10, 15, 236, 104, 10, 15, 236, 103, 10, 15, 236, 102, - 10, 15, 236, 101, 10, 15, 236, 100, 10, 15, 236, 99, 10, 15, 236, 98, 10, - 15, 236, 97, 10, 15, 236, 96, 10, 15, 236, 95, 10, 15, 236, 94, 10, 15, - 236, 93, 10, 15, 236, 92, 10, 15, 236, 91, 10, 15, 236, 90, 10, 15, 236, - 89, 10, 15, 236, 88, 10, 15, 236, 87, 10, 15, 236, 86, 10, 15, 236, 85, - 10, 15, 236, 84, 10, 15, 236, 83, 10, 15, 236, 82, 10, 15, 236, 81, 10, - 15, 236, 80, 10, 15, 236, 79, 10, 15, 236, 78, 10, 15, 236, 77, 10, 15, - 236, 76, 10, 15, 236, 75, 10, 15, 236, 74, 10, 15, 236, 73, 10, 15, 236, - 72, 10, 15, 236, 71, 10, 15, 236, 70, 10, 15, 236, 69, 10, 15, 236, 68, - 10, 15, 236, 67, 10, 15, 236, 66, 10, 15, 236, 65, 10, 15, 236, 64, 10, - 15, 236, 63, 10, 15, 236, 62, 10, 15, 236, 61, 10, 15, 236, 60, 10, 15, - 236, 59, 10, 15, 236, 58, 10, 15, 236, 57, 10, 15, 236, 56, 10, 15, 236, - 55, 10, 15, 236, 54, 10, 15, 236, 53, 10, 15, 236, 52, 10, 15, 236, 51, - 10, 15, 236, 50, 10, 15, 236, 49, 10, 15, 236, 48, 10, 15, 236, 47, 10, - 15, 236, 46, 10, 15, 236, 45, 10, 15, 236, 44, 10, 15, 236, 43, 10, 15, - 236, 42, 10, 15, 236, 41, 10, 15, 236, 40, 10, 15, 236, 39, 10, 15, 236, - 38, 10, 15, 236, 37, 10, 15, 236, 36, 10, 15, 236, 35, 10, 15, 236, 34, - 10, 15, 236, 33, 10, 15, 236, 32, 10, 15, 236, 31, 10, 15, 236, 30, 10, - 15, 236, 29, 10, 15, 236, 28, 10, 15, 236, 27, 10, 15, 236, 26, 10, 15, - 236, 25, 10, 15, 236, 24, 10, 15, 236, 23, 10, 15, 236, 22, 10, 15, 236, - 21, 10, 15, 236, 20, 10, 15, 236, 19, 10, 15, 236, 18, 10, 15, 236, 17, - 10, 15, 236, 16, 10, 15, 236, 15, 10, 15, 236, 14, 10, 15, 236, 13, 10, - 15, 236, 12, 10, 15, 236, 11, 10, 15, 236, 10, 10, 15, 236, 9, 10, 15, - 236, 8, 10, 15, 236, 7, 10, 15, 236, 6, 10, 15, 236, 5, 10, 15, 236, 4, - 10, 15, 236, 3, 10, 15, 236, 2, 10, 15, 236, 1, 10, 15, 236, 0, 10, 15, - 235, 255, 10, 15, 235, 254, 10, 15, 235, 253, 10, 15, 235, 252, 10, 15, - 235, 251, 10, 15, 235, 250, 10, 15, 235, 249, 10, 15, 235, 248, 10, 15, - 235, 247, 10, 15, 235, 246, 10, 15, 235, 245, 10, 15, 235, 244, 10, 15, - 235, 243, 10, 15, 235, 242, 10, 15, 235, 241, 10, 15, 235, 240, 10, 15, - 235, 239, 10, 15, 235, 238, 10, 15, 235, 237, 10, 15, 235, 236, 10, 15, - 235, 235, 10, 15, 235, 234, 10, 15, 235, 233, 10, 15, 235, 232, 10, 15, - 235, 231, 10, 15, 235, 230, 10, 15, 235, 229, 10, 15, 235, 228, 10, 15, - 235, 227, 10, 15, 235, 226, 10, 15, 235, 225, 10, 15, 235, 224, 10, 15, - 235, 223, 10, 15, 235, 222, 10, 15, 235, 221, 10, 15, 235, 220, 10, 15, - 235, 219, 10, 15, 235, 218, 10, 15, 235, 217, 10, 15, 235, 216, 10, 15, - 235, 215, 10, 15, 235, 214, 10, 15, 235, 213, 10, 15, 235, 212, 10, 15, - 235, 211, 10, 15, 235, 210, 10, 15, 235, 209, 10, 15, 235, 208, 10, 15, - 235, 207, 10, 15, 235, 206, 10, 15, 235, 205, 10, 15, 235, 204, 10, 15, - 235, 203, 10, 15, 235, 202, 10, 15, 235, 201, 10, 15, 235, 200, 10, 15, - 235, 199, 10, 15, 235, 198, 10, 15, 235, 197, 10, 15, 235, 196, 10, 15, - 235, 195, 10, 15, 235, 194, 10, 15, 235, 193, 10, 15, 235, 192, 10, 15, - 235, 191, 10, 15, 235, 190, 10, 15, 235, 189, 10, 15, 235, 188, 10, 15, - 235, 187, 10, 15, 235, 186, 10, 15, 235, 185, 10, 15, 235, 184, 10, 15, - 235, 183, 10, 15, 235, 182, 10, 15, 235, 181, 10, 15, 235, 180, 10, 15, - 235, 179, 10, 15, 235, 178, 10, 15, 235, 177, 10, 15, 235, 176, 10, 15, - 235, 175, 10, 15, 235, 174, 10, 15, 235, 173, 10, 15, 235, 172, 10, 15, - 235, 171, 10, 15, 235, 170, 10, 15, 235, 169, 10, 15, 235, 168, 10, 15, - 235, 167, 10, 15, 235, 166, 10, 15, 235, 165, 10, 15, 235, 164, 10, 15, - 235, 163, 10, 15, 235, 162, 10, 15, 235, 161, 10, 15, 235, 160, 10, 15, - 235, 159, 10, 15, 235, 158, 10, 15, 235, 157, 10, 15, 235, 156, 10, 15, - 235, 155, 10, 15, 235, 154, 10, 15, 235, 153, 10, 15, 235, 152, 10, 15, - 235, 151, 10, 15, 235, 150, 10, 15, 235, 149, 10, 15, 235, 148, 10, 15, - 235, 147, 10, 15, 235, 146, 10, 15, 235, 145, 10, 15, 235, 144, 10, 15, - 235, 143, 10, 15, 235, 142, 230, 92, 212, 198, 150, 214, 153, 150, 242, - 168, 83, 150, 219, 180, 83, 150, 43, 53, 150, 245, 35, 53, 150, 221, 131, - 53, 150, 252, 125, 150, 252, 53, 150, 47, 221, 216, 150, 48, 221, 216, - 150, 251, 209, 150, 101, 53, 150, 247, 155, 150, 237, 238, 150, 241, 82, - 213, 251, 150, 214, 180, 150, 18, 205, 85, 150, 18, 102, 150, 18, 105, - 150, 18, 142, 150, 18, 139, 150, 18, 168, 150, 18, 184, 150, 18, 195, - 150, 18, 193, 150, 18, 200, 150, 247, 162, 150, 216, 52, 150, 230, 10, - 53, 150, 242, 242, 53, 150, 239, 230, 53, 150, 219, 196, 83, 150, 247, - 153, 251, 199, 150, 7, 6, 1, 62, 150, 7, 6, 1, 251, 150, 150, 7, 6, 1, - 249, 34, 150, 7, 6, 1, 246, 240, 150, 7, 6, 1, 75, 150, 7, 6, 1, 242, - 139, 150, 7, 6, 1, 241, 55, 150, 7, 6, 1, 239, 155, 150, 7, 6, 1, 74, - 150, 7, 6, 1, 232, 203, 150, 7, 6, 1, 232, 76, 150, 7, 6, 1, 149, 150, 7, - 6, 1, 229, 28, 150, 7, 6, 1, 226, 33, 150, 7, 6, 1, 76, 150, 7, 6, 1, - 222, 67, 150, 7, 6, 1, 220, 27, 150, 7, 6, 1, 137, 150, 7, 6, 1, 182, - 150, 7, 6, 1, 213, 10, 150, 7, 6, 1, 71, 150, 7, 6, 1, 209, 148, 150, 7, - 6, 1, 207, 129, 150, 7, 6, 1, 206, 195, 150, 7, 6, 1, 206, 123, 150, 7, - 6, 1, 205, 159, 150, 47, 49, 145, 150, 218, 225, 214, 180, 150, 48, 49, - 145, 150, 247, 228, 253, 21, 150, 114, 229, 205, 150, 239, 237, 253, 21, - 150, 7, 5, 1, 62, 150, 7, 5, 1, 251, 150, 150, 7, 5, 1, 249, 34, 150, 7, - 5, 1, 246, 240, 150, 7, 5, 1, 75, 150, 7, 5, 1, 242, 139, 150, 7, 5, 1, - 241, 55, 150, 7, 5, 1, 239, 155, 150, 7, 5, 1, 74, 150, 7, 5, 1, 232, - 203, 150, 7, 5, 1, 232, 76, 150, 7, 5, 1, 149, 150, 7, 5, 1, 229, 28, - 150, 7, 5, 1, 226, 33, 150, 7, 5, 1, 76, 150, 7, 5, 1, 222, 67, 150, 7, - 5, 1, 220, 27, 150, 7, 5, 1, 137, 150, 7, 5, 1, 182, 150, 7, 5, 1, 213, - 10, 150, 7, 5, 1, 71, 150, 7, 5, 1, 209, 148, 150, 7, 5, 1, 207, 129, - 150, 7, 5, 1, 206, 195, 150, 7, 5, 1, 206, 123, 150, 7, 5, 1, 205, 159, - 150, 47, 247, 26, 145, 150, 79, 229, 205, 150, 48, 247, 26, 145, 150, - 211, 180, 248, 225, 212, 198, 54, 216, 236, 54, 216, 225, 54, 216, 214, - 54, 216, 202, 54, 216, 191, 54, 216, 180, 54, 216, 169, 54, 216, 158, 54, - 216, 147, 54, 216, 139, 54, 216, 138, 54, 216, 137, 54, 216, 136, 54, - 216, 134, 54, 216, 133, 54, 216, 132, 54, 216, 131, 54, 216, 130, 54, - 216, 129, 54, 216, 128, 54, 216, 127, 54, 216, 126, 54, 216, 125, 54, - 216, 123, 54, 216, 122, 54, 216, 121, 54, 216, 120, 54, 216, 119, 54, - 216, 118, 54, 216, 117, 54, 216, 116, 54, 216, 115, 54, 216, 114, 54, - 216, 112, 54, 216, 111, 54, 216, 110, 54, 216, 109, 54, 216, 108, 54, - 216, 107, 54, 216, 106, 54, 216, 105, 54, 216, 104, 54, 216, 103, 54, - 216, 101, 54, 216, 100, 54, 216, 99, 54, 216, 98, 54, 216, 97, 54, 216, - 96, 54, 216, 95, 54, 216, 94, 54, 216, 93, 54, 216, 92, 54, 216, 90, 54, - 216, 89, 54, 216, 88, 54, 216, 87, 54, 216, 86, 54, 216, 85, 54, 216, 84, - 54, 216, 83, 54, 216, 82, 54, 216, 81, 54, 216, 79, 54, 216, 78, 54, 216, - 77, 54, 216, 76, 54, 216, 75, 54, 216, 74, 54, 216, 73, 54, 216, 72, 54, - 216, 71, 54, 216, 70, 54, 216, 68, 54, 216, 67, 54, 216, 66, 54, 216, 65, - 54, 216, 64, 54, 216, 63, 54, 216, 62, 54, 216, 61, 54, 216, 60, 54, 216, - 59, 54, 217, 56, 54, 217, 55, 54, 217, 54, 54, 217, 53, 54, 217, 52, 54, - 217, 51, 54, 217, 50, 54, 217, 49, 54, 217, 48, 54, 217, 47, 54, 217, 45, - 54, 217, 44, 54, 217, 43, 54, 217, 42, 54, 217, 41, 54, 217, 40, 54, 217, - 39, 54, 217, 38, 54, 217, 37, 54, 217, 36, 54, 217, 34, 54, 217, 33, 54, - 217, 32, 54, 217, 31, 54, 217, 30, 54, 217, 29, 54, 217, 28, 54, 217, 27, - 54, 217, 26, 54, 217, 25, 54, 217, 23, 54, 217, 22, 54, 217, 21, 54, 217, - 20, 54, 217, 19, 54, 217, 18, 54, 217, 17, 54, 217, 16, 54, 217, 15, 54, - 217, 14, 54, 217, 12, 54, 217, 11, 54, 217, 10, 54, 217, 9, 54, 217, 8, - 54, 217, 7, 54, 217, 6, 54, 217, 5, 54, 217, 4, 54, 217, 3, 54, 217, 1, - 54, 217, 0, 54, 216, 255, 54, 216, 254, 54, 216, 253, 54, 216, 252, 54, - 216, 251, 54, 216, 250, 54, 216, 249, 54, 216, 248, 54, 216, 246, 54, - 216, 245, 54, 216, 244, 54, 216, 243, 54, 216, 242, 54, 216, 241, 54, - 216, 240, 54, 216, 239, 54, 216, 238, 54, 216, 237, 54, 216, 235, 54, - 216, 234, 54, 216, 233, 54, 216, 232, 54, 216, 231, 54, 216, 230, 54, - 216, 229, 54, 216, 228, 54, 216, 227, 54, 216, 226, 54, 216, 224, 54, - 216, 223, 54, 216, 222, 54, 216, 221, 54, 216, 220, 54, 216, 219, 54, - 216, 218, 54, 216, 217, 54, 216, 216, 54, 216, 215, 54, 216, 213, 54, - 216, 212, 54, 216, 211, 54, 216, 210, 54, 216, 209, 54, 216, 208, 54, - 216, 207, 54, 216, 206, 54, 216, 205, 54, 216, 204, 54, 216, 201, 54, - 216, 200, 54, 216, 199, 54, 216, 198, 54, 216, 197, 54, 216, 196, 54, - 216, 195, 54, 216, 194, 54, 216, 193, 54, 216, 192, 54, 216, 190, 54, - 216, 189, 54, 216, 188, 54, 216, 187, 54, 216, 186, 54, 216, 185, 54, - 216, 184, 54, 216, 183, 54, 216, 182, 54, 216, 181, 54, 216, 179, 54, - 216, 178, 54, 216, 177, 54, 216, 176, 54, 216, 175, 54, 216, 174, 54, - 216, 173, 54, 216, 172, 54, 216, 171, 54, 216, 170, 54, 216, 168, 54, - 216, 167, 54, 216, 166, 54, 216, 165, 54, 216, 164, 54, 216, 163, 54, - 216, 162, 54, 216, 161, 54, 216, 160, 54, 216, 159, 54, 216, 157, 54, - 216, 156, 54, 216, 155, 54, 216, 154, 54, 216, 153, 54, 216, 152, 54, - 216, 151, 54, 216, 150, 54, 216, 149, 54, 216, 148, 54, 216, 146, 54, - 216, 145, 54, 216, 144, 54, 216, 143, 54, 216, 142, 54, 216, 141, 54, - 216, 140, 223, 181, 223, 183, 214, 22, 73, 239, 66, 214, 183, 214, 22, - 73, 212, 60, 213, 205, 243, 34, 73, 212, 60, 242, 193, 243, 34, 73, 211, - 69, 242, 254, 243, 21, 243, 22, 253, 13, 253, 14, 252, 169, 250, 31, 250, - 170, 249, 107, 157, 212, 203, 194, 212, 203, 238, 47, 212, 207, 229, 206, - 242, 19, 186, 229, 205, 243, 34, 73, 229, 205, 229, 250, 224, 129, 243, - 1, 229, 206, 212, 203, 79, 212, 203, 207, 150, 241, 136, 242, 19, 241, - 254, 248, 191, 218, 228, 247, 73, 215, 179, 222, 93, 229, 138, 102, 214, - 193, 215, 179, 233, 68, 229, 138, 205, 85, 215, 80, 246, 73, 229, 196, - 242, 217, 245, 61, 245, 199, 247, 109, 102, 246, 62, 245, 199, 247, 109, - 105, 246, 61, 245, 199, 247, 109, 142, 246, 60, 245, 199, 247, 109, 139, - 246, 59, 170, 253, 13, 225, 215, 213, 36, 233, 131, 213, 39, 243, 34, 73, - 211, 70, 249, 193, 242, 200, 248, 224, 248, 226, 243, 34, 73, 227, 108, - 242, 255, 213, 179, 213, 196, 242, 217, 242, 218, 233, 43, 216, 40, 139, - 241, 236, 216, 39, 241, 92, 233, 43, 216, 40, 142, 239, 221, 216, 39, - 239, 218, 233, 43, 216, 40, 105, 219, 43, 216, 39, 218, 55, 233, 43, 216, - 40, 102, 209, 217, 216, 39, 209, 177, 214, 156, 245, 236, 245, 238, 222, - 40, 248, 94, 222, 42, 127, 222, 213, 220, 130, 238, 124, 249, 126, 221, - 121, 239, 35, 249, 137, 224, 68, 249, 126, 239, 35, 225, 179, 233, 53, - 233, 56, 225, 82, 229, 205, 225, 102, 214, 22, 73, 217, 61, 252, 13, 214, - 96, 243, 34, 73, 217, 61, 252, 13, 242, 220, 157, 212, 204, 216, 28, 194, - 212, 204, 216, 28, 238, 44, 157, 212, 204, 2, 232, 88, 194, 212, 204, 2, - 232, 88, 238, 45, 229, 206, 212, 204, 216, 28, 79, 212, 204, 216, 28, - 207, 149, 221, 209, 229, 206, 241, 129, 221, 209, 229, 206, 244, 8, 220, - 229, 221, 209, 229, 206, 250, 169, 221, 209, 229, 206, 209, 206, 220, - 224, 218, 225, 229, 206, 242, 19, 218, 225, 233, 53, 218, 208, 215, 41, - 215, 179, 105, 215, 38, 214, 98, 215, 41, 215, 179, 142, 215, 37, 214, - 97, 245, 199, 247, 109, 213, 227, 246, 57, 220, 118, 209, 176, 102, 220, - 118, 209, 174, 220, 81, 220, 118, 209, 176, 105, 220, 118, 209, 173, 220, - 80, 216, 29, 211, 68, 214, 21, 213, 210, 248, 225, 248, 94, 248, 167, - 227, 67, 207, 89, 226, 51, 214, 22, 73, 239, 206, 252, 13, 214, 22, 73, - 220, 99, 252, 13, 214, 155, 243, 34, 73, 239, 206, 252, 13, 243, 34, 73, - 220, 99, 252, 13, 242, 252, 214, 22, 73, 213, 227, 214, 169, 215, 41, - 239, 241, 157, 233, 4, 216, 7, 215, 41, 157, 233, 4, 217, 99, 247, 109, - 216, 37, 233, 4, 247, 41, 213, 228, 212, 86, 214, 40, 222, 134, 213, 25, - 247, 154, 222, 105, 220, 119, 227, 66, 220, 214, 252, 49, 220, 113, 247, - 154, 252, 65, 225, 167, 215, 89, 7, 6, 1, 240, 99, 7, 5, 1, 240, 99, 248, - 112, 252, 150, 213, 30, 213, 185, 247, 163, 214, 246, 230, 46, 183, 1, - 229, 163, 230, 90, 1, 241, 163, 241, 154, 230, 90, 1, 241, 163, 242, 31, - 230, 90, 1, 218, 124, 230, 90, 1, 229, 144, 72, 141, 249, 204, 215, 154, - 240, 62, 227, 16, 218, 215, 241, 69, 241, 68, 241, 67, 226, 53, 204, 246, - 204, 247, 204, 249, 229, 85, 218, 132, 229, 87, 218, 134, 221, 177, 229, - 84, 218, 131, 224, 99, 226, 185, 206, 252, 229, 86, 218, 133, 241, 91, - 221, 176, 207, 42, 243, 53, 241, 79, 226, 253, 222, 166, 209, 178, 93, - 226, 253, 246, 79, 93, 9, 4, 232, 218, 83, 220, 131, 241, 136, 33, 79, - 48, 59, 230, 16, 145, 208, 150, 208, 39, 207, 227, 207, 216, 207, 205, - 207, 194, 207, 183, 207, 172, 207, 161, 208, 149, 208, 138, 208, 127, - 208, 116, 208, 105, 208, 94, 208, 83, 249, 39, 222, 119, 83, 249, 175, - 204, 248, 14, 3, 223, 190, 212, 89, 14, 3, 223, 190, 131, 223, 190, 249, - 69, 131, 249, 68, 58, 30, 16, 241, 90, 214, 242, 248, 18, 209, 49, 208, - 72, 208, 61, 208, 50, 208, 38, 208, 27, 208, 16, 208, 5, 207, 250, 207, - 239, 207, 231, 207, 230, 207, 229, 207, 228, 207, 226, 207, 225, 207, - 224, 207, 223, 207, 222, 207, 221, 207, 220, 207, 219, 207, 218, 207, - 217, 207, 215, 207, 214, 207, 213, 207, 212, 207, 211, 207, 210, 207, - 209, 207, 208, 207, 207, 207, 206, 207, 204, 207, 203, 207, 202, 207, - 201, 207, 200, 207, 199, 207, 198, 207, 197, 207, 196, 207, 195, 207, - 193, 207, 192, 207, 191, 207, 190, 207, 189, 207, 188, 207, 187, 207, - 186, 207, 185, 207, 184, 207, 182, 207, 181, 207, 180, 207, 179, 207, - 178, 207, 177, 207, 176, 207, 175, 207, 174, 207, 173, 207, 171, 207, - 170, 207, 169, 207, 168, 207, 167, 207, 166, 207, 165, 207, 164, 207, - 163, 207, 162, 207, 160, 207, 159, 207, 158, 207, 157, 207, 156, 207, - 155, 207, 154, 207, 153, 207, 152, 207, 151, 208, 148, 208, 147, 208, - 146, 208, 145, 208, 144, 208, 143, 208, 142, 208, 141, 208, 140, 208, - 139, 208, 137, 208, 136, 208, 135, 208, 134, 208, 133, 208, 132, 208, - 131, 208, 130, 208, 129, 208, 128, 208, 126, 208, 125, 208, 124, 208, - 123, 208, 122, 208, 121, 208, 120, 208, 119, 208, 118, 208, 117, 208, - 115, 208, 114, 208, 113, 208, 112, 208, 111, 208, 110, 208, 109, 208, - 108, 208, 107, 208, 106, 208, 104, 208, 103, 208, 102, 208, 101, 208, - 100, 208, 99, 208, 98, 208, 97, 208, 96, 208, 95, 208, 93, 208, 92, 208, - 91, 208, 90, 208, 89, 208, 88, 208, 87, 208, 86, 208, 85, 208, 84, 208, - 82, 208, 81, 208, 80, 208, 79, 208, 78, 208, 77, 208, 76, 208, 75, 208, - 74, 208, 73, 208, 71, 208, 70, 208, 69, 208, 68, 208, 67, 208, 66, 208, - 65, 208, 64, 208, 63, 208, 62, 208, 60, 208, 59, 208, 58, 208, 57, 208, - 56, 208, 55, 208, 54, 208, 53, 208, 52, 208, 51, 208, 49, 208, 48, 208, - 47, 208, 46, 208, 45, 208, 44, 208, 43, 208, 42, 208, 41, 208, 40, 208, - 37, 208, 36, 208, 35, 208, 34, 208, 33, 208, 32, 208, 31, 208, 30, 208, - 29, 208, 28, 208, 26, 208, 25, 208, 24, 208, 23, 208, 22, 208, 21, 208, - 20, 208, 19, 208, 18, 208, 17, 208, 15, 208, 14, 208, 13, 208, 12, 208, - 11, 208, 10, 208, 9, 208, 8, 208, 7, 208, 6, 208, 4, 208, 3, 208, 2, 208, - 1, 208, 0, 207, 255, 207, 254, 207, 253, 207, 252, 207, 251, 207, 249, - 207, 248, 207, 247, 207, 246, 207, 245, 207, 244, 207, 243, 207, 242, - 207, 241, 207, 240, 207, 238, 207, 237, 207, 236, 207, 235, 207, 234, - 207, 233, 207, 232, 7, 6, 1, 32, 2, 228, 14, 23, 239, 236, 7, 5, 1, 32, - 2, 228, 14, 23, 239, 236, 7, 6, 1, 174, 2, 79, 229, 206, 55, 7, 5, 1, - 174, 2, 79, 229, 206, 55, 7, 6, 1, 174, 2, 79, 229, 206, 250, 26, 23, - 239, 236, 7, 5, 1, 174, 2, 79, 229, 206, 250, 26, 23, 239, 236, 7, 6, 1, - 174, 2, 79, 229, 206, 250, 26, 23, 153, 7, 5, 1, 174, 2, 79, 229, 206, - 250, 26, 23, 153, 7, 6, 1, 174, 2, 247, 228, 23, 228, 13, 7, 5, 1, 174, - 2, 247, 228, 23, 228, 13, 7, 6, 1, 174, 2, 247, 228, 23, 248, 195, 7, 5, - 1, 174, 2, 247, 228, 23, 248, 195, 7, 6, 1, 237, 225, 2, 228, 14, 23, - 239, 236, 7, 5, 1, 237, 225, 2, 228, 14, 23, 239, 236, 7, 5, 1, 237, 225, - 2, 67, 84, 23, 153, 7, 5, 1, 225, 80, 2, 211, 181, 52, 7, 6, 1, 148, 2, - 79, 229, 206, 55, 7, 5, 1, 148, 2, 79, 229, 206, 55, 7, 6, 1, 148, 2, 79, - 229, 206, 250, 26, 23, 239, 236, 7, 5, 1, 148, 2, 79, 229, 206, 250, 26, - 23, 239, 236, 7, 6, 1, 148, 2, 79, 229, 206, 250, 26, 23, 153, 7, 5, 1, - 148, 2, 79, 229, 206, 250, 26, 23, 153, 7, 6, 1, 218, 1, 2, 79, 229, 206, - 55, 7, 5, 1, 218, 1, 2, 79, 229, 206, 55, 7, 6, 1, 106, 2, 228, 14, 23, - 239, 236, 7, 5, 1, 106, 2, 228, 14, 23, 239, 236, 7, 6, 1, 32, 2, 222, - 197, 23, 153, 7, 5, 1, 32, 2, 222, 197, 23, 153, 7, 6, 1, 32, 2, 222, - 197, 23, 211, 180, 7, 5, 1, 32, 2, 222, 197, 23, 211, 180, 7, 6, 1, 174, - 2, 222, 197, 23, 153, 7, 5, 1, 174, 2, 222, 197, 23, 153, 7, 6, 1, 174, - 2, 222, 197, 23, 211, 180, 7, 5, 1, 174, 2, 222, 197, 23, 211, 180, 7, 6, - 1, 174, 2, 67, 84, 23, 153, 7, 5, 1, 174, 2, 67, 84, 23, 153, 7, 6, 1, - 174, 2, 67, 84, 23, 211, 180, 7, 5, 1, 174, 2, 67, 84, 23, 211, 180, 7, - 5, 1, 237, 225, 2, 67, 84, 23, 239, 236, 7, 5, 1, 237, 225, 2, 67, 84, - 23, 211, 180, 7, 6, 1, 237, 225, 2, 222, 197, 23, 153, 7, 5, 1, 237, 225, - 2, 222, 197, 23, 67, 84, 23, 153, 7, 6, 1, 237, 225, 2, 222, 197, 23, - 211, 180, 7, 5, 1, 237, 225, 2, 222, 197, 23, 67, 84, 23, 211, 180, 7, 6, - 1, 232, 204, 2, 211, 180, 7, 5, 1, 232, 204, 2, 67, 84, 23, 211, 180, 7, - 6, 1, 230, 159, 2, 211, 180, 7, 5, 1, 230, 159, 2, 211, 180, 7, 6, 1, - 229, 29, 2, 211, 180, 7, 5, 1, 229, 29, 2, 211, 180, 7, 6, 1, 219, 150, - 2, 211, 180, 7, 5, 1, 219, 150, 2, 211, 180, 7, 6, 1, 106, 2, 222, 197, - 23, 153, 7, 5, 1, 106, 2, 222, 197, 23, 153, 7, 6, 1, 106, 2, 222, 197, - 23, 211, 180, 7, 5, 1, 106, 2, 222, 197, 23, 211, 180, 7, 6, 1, 106, 2, - 228, 14, 23, 153, 7, 5, 1, 106, 2, 228, 14, 23, 153, 7, 6, 1, 106, 2, - 228, 14, 23, 211, 180, 7, 5, 1, 106, 2, 228, 14, 23, 211, 180, 7, 5, 1, - 252, 249, 2, 239, 236, 7, 5, 1, 222, 142, 148, 2, 239, 236, 7, 5, 1, 222, - 142, 148, 2, 153, 7, 5, 1, 201, 209, 149, 2, 239, 236, 7, 5, 1, 201, 209, - 149, 2, 153, 7, 5, 1, 217, 101, 2, 239, 236, 7, 5, 1, 217, 101, 2, 153, - 7, 5, 1, 238, 129, 217, 101, 2, 239, 236, 7, 5, 1, 238, 129, 217, 101, 2, - 153, 8, 216, 37, 87, 2, 239, 112, 84, 2, 252, 172, 8, 216, 37, 87, 2, - 239, 112, 84, 2, 207, 59, 8, 216, 37, 87, 2, 239, 112, 84, 2, 126, 227, - 228, 8, 216, 37, 87, 2, 239, 112, 84, 2, 222, 206, 8, 216, 37, 87, 2, - 239, 112, 84, 2, 71, 8, 216, 37, 87, 2, 239, 112, 84, 2, 205, 213, 8, - 216, 37, 87, 2, 239, 112, 84, 2, 75, 8, 216, 37, 87, 2, 239, 112, 84, 2, - 252, 248, 8, 216, 37, 224, 55, 2, 231, 212, 165, 1, 231, 142, 40, 107, - 232, 76, 40, 107, 225, 79, 40, 107, 249, 34, 40, 107, 223, 146, 40, 107, - 210, 211, 40, 107, 224, 104, 40, 107, 213, 10, 40, 107, 226, 33, 40, 107, - 222, 67, 40, 107, 229, 28, 40, 107, 206, 123, 40, 107, 137, 40, 107, 149, - 40, 107, 209, 148, 40, 107, 229, 164, 40, 107, 229, 173, 40, 107, 218, - 90, 40, 107, 224, 86, 40, 107, 232, 203, 40, 107, 216, 4, 40, 107, 214, - 99, 40, 107, 182, 40, 107, 239, 155, 40, 107, 230, 251, 40, 4, 232, 63, - 40, 4, 231, 123, 40, 4, 231, 111, 40, 4, 230, 236, 40, 4, 230, 202, 40, - 4, 231, 224, 40, 4, 231, 221, 40, 4, 232, 41, 40, 4, 231, 53, 40, 4, 231, - 33, 40, 4, 231, 242, 40, 4, 225, 76, 40, 4, 225, 25, 40, 4, 225, 21, 40, - 4, 224, 246, 40, 4, 224, 238, 40, 4, 225, 64, 40, 4, 225, 62, 40, 4, 225, - 73, 40, 4, 225, 2, 40, 4, 224, 253, 40, 4, 225, 66, 40, 4, 249, 0, 40, 4, - 247, 251, 40, 4, 247, 241, 40, 4, 247, 40, 40, 4, 247, 9, 40, 4, 248, - 148, 40, 4, 248, 140, 40, 4, 248, 245, 40, 4, 247, 174, 40, 4, 247, 105, - 40, 4, 248, 181, 40, 4, 223, 143, 40, 4, 223, 125, 40, 4, 223, 120, 40, - 4, 223, 103, 40, 4, 223, 95, 40, 4, 223, 134, 40, 4, 223, 133, 40, 4, - 223, 140, 40, 4, 223, 110, 40, 4, 223, 107, 40, 4, 223, 137, 40, 4, 210, - 207, 40, 4, 210, 187, 40, 4, 210, 186, 40, 4, 210, 175, 40, 4, 210, 172, - 40, 4, 210, 203, 40, 4, 210, 202, 40, 4, 210, 206, 40, 4, 210, 185, 40, - 4, 210, 184, 40, 4, 210, 205, 40, 4, 224, 102, 40, 4, 224, 88, 40, 4, - 224, 87, 40, 4, 224, 71, 40, 4, 224, 70, 40, 4, 224, 98, 40, 4, 224, 97, - 40, 4, 224, 101, 40, 4, 224, 73, 40, 4, 224, 72, 40, 4, 224, 100, 40, 4, - 212, 215, 40, 4, 211, 211, 40, 4, 211, 195, 40, 4, 210, 170, 40, 4, 210, - 135, 40, 4, 212, 131, 40, 4, 212, 120, 40, 4, 212, 193, 40, 4, 124, 40, - 4, 211, 105, 40, 4, 212, 151, 40, 4, 225, 232, 40, 4, 224, 230, 40, 4, - 224, 205, 40, 4, 223, 217, 40, 4, 223, 158, 40, 4, 225, 110, 40, 4, 225, - 106, 40, 4, 225, 218, 40, 4, 224, 67, 40, 4, 224, 56, 40, 4, 225, 191, - 40, 4, 222, 51, 40, 4, 221, 53, 40, 4, 221, 15, 40, 4, 220, 82, 40, 4, - 220, 50, 40, 4, 221, 174, 40, 4, 221, 164, 40, 4, 222, 32, 40, 4, 220, - 211, 40, 4, 220, 187, 40, 4, 221, 188, 40, 4, 228, 18, 40, 4, 226, 254, - 40, 4, 226, 224, 40, 4, 226, 114, 40, 4, 226, 62, 40, 4, 227, 119, 40, 4, - 227, 107, 40, 4, 227, 239, 40, 4, 226, 181, 40, 4, 226, 150, 40, 4, 227, - 166, 40, 4, 206, 109, 40, 4, 206, 11, 40, 4, 206, 2, 40, 4, 205, 213, 40, - 4, 205, 181, 40, 4, 206, 52, 40, 4, 206, 49, 40, 4, 206, 88, 40, 4, 205, - 247, 40, 4, 205, 232, 40, 4, 206, 61, 40, 4, 219, 109, 40, 4, 218, 208, - 40, 4, 218, 154, 40, 4, 218, 50, 40, 4, 218, 21, 40, 4, 219, 51, 40, 4, - 219, 29, 40, 4, 219, 90, 40, 4, 218, 124, 40, 4, 218, 107, 40, 4, 219, - 60, 40, 4, 230, 140, 40, 4, 229, 235, 40, 4, 229, 219, 40, 4, 229, 81, - 40, 4, 229, 53, 40, 4, 230, 58, 40, 4, 230, 50, 40, 4, 230, 114, 40, 4, - 229, 144, 40, 4, 229, 115, 40, 4, 230, 75, 40, 4, 209, 69, 40, 4, 208, - 214, 40, 4, 208, 199, 40, 4, 207, 148, 40, 4, 207, 141, 40, 4, 209, 39, - 40, 4, 209, 34, 40, 4, 209, 65, 40, 4, 208, 173, 40, 4, 208, 161, 40, 4, - 209, 45, 40, 4, 229, 162, 40, 4, 229, 157, 40, 4, 229, 156, 40, 4, 229, - 153, 40, 4, 229, 152, 40, 4, 229, 159, 40, 4, 229, 158, 40, 4, 229, 161, - 40, 4, 229, 155, 40, 4, 229, 154, 40, 4, 229, 160, 40, 4, 229, 171, 40, - 4, 229, 166, 40, 4, 229, 165, 40, 4, 229, 149, 40, 4, 229, 148, 40, 4, - 229, 168, 40, 4, 229, 167, 40, 4, 229, 170, 40, 4, 229, 151, 40, 4, 229, - 150, 40, 4, 229, 169, 40, 4, 218, 88, 40, 4, 218, 77, 40, 4, 218, 76, 40, - 4, 218, 70, 40, 4, 218, 63, 40, 4, 218, 84, 40, 4, 218, 83, 40, 4, 218, - 87, 40, 4, 218, 75, 40, 4, 218, 74, 40, 4, 218, 86, 40, 4, 224, 84, 40, - 4, 224, 79, 40, 4, 224, 78, 40, 4, 224, 75, 40, 4, 224, 74, 40, 4, 224, - 81, 40, 4, 224, 80, 40, 4, 224, 83, 40, 4, 224, 77, 40, 4, 224, 76, 40, - 4, 224, 82, 40, 4, 232, 199, 40, 4, 232, 162, 40, 4, 232, 155, 40, 4, - 232, 104, 40, 4, 232, 86, 40, 4, 232, 182, 40, 4, 232, 180, 40, 4, 232, - 193, 40, 4, 232, 122, 40, 4, 232, 113, 40, 4, 232, 187, 40, 4, 215, 254, - 40, 4, 215, 183, 40, 4, 215, 178, 40, 4, 215, 116, 40, 4, 215, 100, 40, - 4, 215, 214, 40, 4, 215, 212, 40, 4, 215, 243, 40, 4, 215, 158, 40, 4, - 215, 152, 40, 4, 215, 223, 40, 4, 214, 95, 40, 4, 214, 64, 40, 4, 214, - 60, 40, 4, 214, 51, 40, 4, 214, 48, 40, 4, 214, 70, 40, 4, 214, 69, 40, - 4, 214, 94, 40, 4, 214, 56, 40, 4, 214, 55, 40, 4, 214, 72, 40, 4, 217, - 196, 40, 4, 215, 80, 40, 4, 215, 61, 40, 4, 213, 203, 40, 4, 213, 119, - 40, 4, 217, 86, 40, 4, 217, 74, 40, 4, 217, 181, 40, 4, 214, 193, 40, 4, - 214, 174, 40, 4, 217, 125, 40, 4, 239, 141, 40, 4, 239, 11, 40, 4, 238, - 247, 40, 4, 238, 42, 40, 4, 238, 19, 40, 4, 239, 71, 40, 4, 239, 53, 40, - 4, 239, 131, 40, 4, 238, 149, 40, 4, 238, 131, 40, 4, 239, 80, 40, 4, - 230, 250, 40, 4, 230, 249, 40, 4, 230, 244, 40, 4, 230, 243, 40, 4, 230, - 240, 40, 4, 230, 239, 40, 4, 230, 246, 40, 4, 230, 245, 40, 4, 230, 248, - 40, 4, 230, 242, 40, 4, 230, 241, 40, 4, 230, 247, 40, 4, 215, 122, 132, - 107, 3, 206, 74, 132, 107, 3, 219, 79, 132, 107, 3, 218, 253, 108, 1, - 210, 74, 82, 107, 3, 247, 169, 172, 82, 107, 3, 247, 169, 231, 167, 82, - 107, 3, 247, 169, 231, 53, 82, 107, 3, 247, 169, 231, 138, 82, 107, 3, - 247, 169, 225, 2, 82, 107, 3, 247, 169, 249, 1, 82, 107, 3, 247, 169, - 248, 110, 82, 107, 3, 247, 169, 247, 174, 82, 107, 3, 247, 169, 248, 32, - 82, 107, 3, 247, 169, 223, 110, 82, 107, 3, 247, 169, 246, 145, 82, 107, - 3, 247, 169, 210, 196, 82, 107, 3, 247, 169, 245, 51, 82, 107, 3, 247, - 169, 210, 191, 82, 107, 3, 247, 169, 199, 82, 107, 3, 247, 169, 212, 219, - 82, 107, 3, 247, 169, 212, 56, 82, 107, 3, 247, 169, 124, 82, 107, 3, - 247, 169, 211, 253, 82, 107, 3, 247, 169, 224, 67, 82, 107, 3, 247, 169, - 250, 183, 82, 107, 3, 247, 169, 221, 93, 82, 107, 3, 247, 169, 220, 211, - 82, 107, 3, 247, 169, 221, 66, 82, 107, 3, 247, 169, 226, 181, 82, 107, - 3, 247, 169, 205, 247, 82, 107, 3, 247, 169, 218, 124, 82, 107, 3, 247, - 169, 229, 144, 82, 107, 3, 247, 169, 208, 173, 82, 107, 3, 247, 169, 216, - 2, 82, 107, 3, 247, 169, 214, 96, 82, 107, 3, 247, 169, 217, 199, 82, - 107, 3, 247, 169, 155, 82, 107, 3, 247, 169, 230, 141, 82, 22, 3, 247, - 169, 220, 19, 82, 233, 55, 22, 3, 247, 169, 219, 214, 82, 233, 55, 22, 3, - 247, 169, 218, 9, 82, 233, 55, 22, 3, 247, 169, 218, 2, 82, 233, 55, 22, - 3, 247, 169, 219, 255, 82, 22, 3, 222, 173, 82, 22, 3, 253, 125, 161, 1, - 249, 237, 225, 77, 161, 1, 249, 237, 225, 25, 161, 1, 249, 237, 224, 246, - 161, 1, 249, 237, 225, 64, 161, 1, 249, 237, 225, 2, 64, 1, 249, 237, - 225, 77, 64, 1, 249, 237, 225, 25, 64, 1, 249, 237, 224, 246, 64, 1, 249, - 237, 225, 64, 64, 1, 249, 237, 225, 2, 64, 1, 252, 198, 248, 148, 64, 1, - 252, 198, 210, 170, 64, 1, 252, 198, 124, 64, 1, 252, 198, 222, 67, 65, - 1, 242, 156, 242, 155, 247, 113, 135, 134, 65, 1, 242, 155, 242, 156, - 247, 113, 135, 134, + 0, 211, 228, 240, 212, 82, 217, 31, 82, 42, 54, 243, 97, 54, 218, 246, + 54, 250, 235, 250, 160, 49, 219, 76, 50, 219, 76, 250, 59, 91, 54, 245, + 233, 235, 219, 239, 102, 211, 61, 212, 0, 17, 202, 84, 17, 105, 17, 108, + 17, 147, 17, 149, 17, 170, 17, 195, 17, 213, 111, 17, 199, 17, 222, 63, + 245, 242, 213, 143, 227, 179, 54, 241, 35, 54, 237, 247, 54, 217, 47, 82, + 245, 231, 250, 49, 8, 6, 1, 63, 8, 6, 1, 249, 255, 8, 6, 1, 247, 125, 8, + 6, 1, 245, 51, 8, 6, 1, 74, 8, 6, 1, 240, 174, 8, 6, 1, 239, 75, 8, 6, 1, + 237, 171, 8, 6, 1, 75, 8, 6, 1, 230, 184, 8, 6, 1, 230, 54, 8, 6, 1, 159, + 8, 6, 1, 226, 185, 8, 6, 1, 223, 163, 8, 6, 1, 78, 8, 6, 1, 219, 184, 8, + 6, 1, 217, 134, 8, 6, 1, 146, 8, 6, 1, 194, 8, 6, 1, 210, 69, 8, 6, 1, + 68, 8, 6, 1, 206, 164, 8, 6, 1, 204, 144, 8, 6, 1, 203, 196, 8, 6, 1, + 203, 124, 8, 6, 1, 202, 159, 49, 51, 155, 216, 74, 212, 0, 50, 51, 155, + 246, 53, 251, 138, 124, 227, 114, 237, 254, 251, 138, 8, 5, 1, 63, 8, 5, + 1, 249, 255, 8, 5, 1, 247, 125, 8, 5, 1, 245, 51, 8, 5, 1, 74, 8, 5, 1, + 240, 174, 8, 5, 1, 239, 75, 8, 5, 1, 237, 171, 8, 5, 1, 75, 8, 5, 1, 230, + 184, 8, 5, 1, 230, 54, 8, 5, 1, 159, 8, 5, 1, 226, 185, 8, 5, 1, 223, + 163, 8, 5, 1, 78, 8, 5, 1, 219, 184, 8, 5, 1, 217, 134, 8, 5, 1, 146, 8, + 5, 1, 194, 8, 5, 1, 210, 69, 8, 5, 1, 68, 8, 5, 1, 206, 164, 8, 5, 1, + 204, 144, 8, 5, 1, 203, 196, 8, 5, 1, 203, 124, 8, 5, 1, 202, 159, 49, + 245, 93, 155, 80, 227, 114, 50, 245, 93, 155, 208, 227, 221, 190, 211, + 228, 230, 239, 240, 212, 82, 246, 220, 54, 218, 20, 54, 245, 92, 54, 203, + 43, 54, 247, 203, 142, 214, 168, 54, 243, 231, 245, 169, 54, 240, 41, + 219, 240, 231, 31, 227, 217, 52, 250, 218, 217, 31, 82, 221, 166, 54, + 212, 7, 235, 220, 216, 129, 54, 225, 170, 244, 55, 54, 218, 75, 54, 210, + 199, 108, 210, 199, 147, 251, 126, 251, 138, 224, 153, 54, 218, 126, 54, + 101, 243, 85, 246, 231, 210, 199, 105, 225, 80, 219, 240, 231, 31, 216, + 11, 52, 250, 218, 217, 31, 82, 204, 161, 239, 138, 118, 217, 55, 204, + 161, 239, 138, 118, 237, 137, 204, 161, 239, 138, 126, 217, 53, 230, 239, + 217, 47, 82, 8, 6, 1, 34, 3, 237, 253, 8, 6, 1, 34, 3, 165, 8, 6, 1, 34, + 3, 246, 52, 8, 6, 1, 34, 3, 208, 227, 8, 6, 1, 34, 3, 243, 231, 8, 6, 1, + 34, 3, 215, 253, 55, 8, 6, 1, 251, 109, 8, 6, 1, 247, 126, 3, 246, 231, + 8, 6, 1, 188, 3, 237, 253, 8, 6, 1, 188, 3, 165, 8, 6, 1, 188, 3, 246, + 52, 8, 6, 1, 188, 3, 243, 231, 8, 6, 1, 235, 206, 3, 237, 253, 8, 6, 1, + 235, 206, 3, 165, 8, 6, 1, 235, 206, 3, 246, 52, 8, 6, 1, 235, 206, 3, + 243, 231, 8, 6, 1, 240, 243, 8, 6, 1, 223, 164, 3, 208, 227, 8, 6, 1, + 158, 3, 237, 253, 8, 6, 1, 158, 3, 165, 8, 6, 1, 158, 3, 246, 52, 8, 6, + 1, 158, 3, 208, 227, 8, 6, 1, 158, 3, 243, 231, 223, 224, 54, 8, 6, 1, + 158, 3, 95, 8, 6, 1, 106, 3, 237, 253, 8, 6, 1, 106, 3, 165, 8, 6, 1, + 106, 3, 246, 52, 8, 6, 1, 106, 3, 243, 231, 8, 6, 1, 203, 125, 3, 165, 8, + 6, 1, 209, 40, 8, 5, 1, 213, 57, 194, 8, 5, 1, 34, 3, 237, 253, 8, 5, 1, + 34, 3, 165, 8, 5, 1, 34, 3, 246, 52, 8, 5, 1, 34, 3, 208, 227, 8, 5, 1, + 34, 3, 243, 231, 8, 5, 1, 34, 3, 215, 253, 55, 8, 5, 1, 251, 109, 8, 5, + 1, 247, 126, 3, 246, 231, 8, 5, 1, 188, 3, 237, 253, 8, 5, 1, 188, 3, + 165, 8, 5, 1, 188, 3, 246, 52, 8, 5, 1, 188, 3, 243, 231, 8, 5, 1, 235, + 206, 3, 237, 253, 8, 5, 1, 235, 206, 3, 165, 8, 5, 1, 235, 206, 3, 246, + 52, 8, 5, 1, 235, 206, 3, 243, 231, 8, 5, 1, 240, 243, 8, 5, 1, 223, 164, + 3, 208, 227, 8, 5, 1, 158, 3, 237, 253, 8, 5, 1, 158, 3, 165, 8, 5, 1, + 158, 3, 246, 52, 8, 5, 1, 158, 3, 208, 227, 8, 5, 1, 158, 3, 243, 231, + 243, 137, 54, 8, 5, 1, 158, 3, 95, 8, 5, 1, 106, 3, 237, 253, 8, 5, 1, + 106, 3, 165, 8, 5, 1, 106, 3, 246, 52, 8, 5, 1, 106, 3, 243, 231, 8, 5, + 1, 203, 125, 3, 165, 8, 5, 1, 209, 40, 8, 5, 1, 203, 125, 3, 243, 231, 8, + 6, 1, 34, 3, 225, 170, 8, 5, 1, 34, 3, 225, 170, 8, 6, 1, 34, 3, 247, + 214, 8, 5, 1, 34, 3, 247, 214, 8, 6, 1, 34, 3, 220, 62, 8, 5, 1, 34, 3, + 220, 62, 8, 6, 1, 247, 126, 3, 165, 8, 5, 1, 247, 126, 3, 165, 8, 6, 1, + 247, 126, 3, 246, 52, 8, 5, 1, 247, 126, 3, 246, 52, 8, 6, 1, 247, 126, + 3, 70, 55, 8, 5, 1, 247, 126, 3, 70, 55, 8, 6, 1, 247, 126, 3, 247, 29, + 8, 5, 1, 247, 126, 3, 247, 29, 8, 6, 1, 245, 52, 3, 247, 29, 8, 5, 1, + 245, 52, 3, 247, 29, 8, 6, 1, 245, 52, 3, 95, 8, 5, 1, 245, 52, 3, 95, 8, + 6, 1, 188, 3, 225, 170, 8, 5, 1, 188, 3, 225, 170, 8, 6, 1, 188, 3, 247, + 214, 8, 5, 1, 188, 3, 247, 214, 8, 6, 1, 188, 3, 70, 55, 8, 5, 1, 188, 3, + 70, 55, 8, 6, 1, 188, 3, 220, 62, 8, 5, 1, 188, 3, 220, 62, 8, 6, 1, 188, + 3, 247, 29, 8, 5, 1, 188, 3, 247, 29, 8, 6, 1, 239, 76, 3, 246, 52, 8, 5, + 1, 239, 76, 3, 246, 52, 8, 6, 1, 239, 76, 3, 247, 214, 8, 5, 1, 239, 76, + 3, 247, 214, 8, 6, 1, 239, 76, 3, 70, 55, 8, 5, 1, 239, 76, 3, 70, 55, 8, + 6, 1, 239, 76, 3, 246, 231, 8, 5, 1, 239, 76, 3, 246, 231, 8, 6, 1, 237, + 172, 3, 246, 52, 8, 5, 1, 237, 172, 3, 246, 52, 8, 6, 1, 237, 172, 3, 95, + 8, 5, 1, 237, 172, 3, 95, 8, 6, 1, 235, 206, 3, 208, 227, 8, 5, 1, 235, + 206, 3, 208, 227, 8, 6, 1, 235, 206, 3, 225, 170, 8, 5, 1, 235, 206, 3, + 225, 170, 8, 6, 1, 235, 206, 3, 247, 214, 8, 5, 1, 235, 206, 3, 247, 214, + 8, 6, 1, 235, 206, 3, 220, 62, 8, 5, 1, 235, 206, 3, 220, 62, 8, 6, 1, + 235, 206, 3, 70, 55, 8, 5, 1, 243, 84, 75, 8, 6, 32, 231, 81, 8, 5, 32, + 231, 81, 8, 6, 1, 230, 185, 3, 246, 52, 8, 5, 1, 230, 185, 3, 246, 52, 8, + 6, 1, 230, 55, 3, 246, 231, 8, 5, 1, 230, 55, 3, 246, 231, 8, 5, 1, 228, + 231, 8, 6, 1, 228, 131, 3, 165, 8, 5, 1, 228, 131, 3, 165, 8, 6, 1, 228, + 131, 3, 246, 231, 8, 5, 1, 228, 131, 3, 246, 231, 8, 6, 1, 228, 131, 3, + 247, 29, 8, 5, 1, 228, 131, 3, 247, 29, 8, 6, 1, 228, 131, 3, 101, 243, + 85, 8, 5, 1, 228, 131, 3, 101, 243, 85, 8, 6, 1, 228, 131, 3, 95, 8, 5, + 1, 228, 131, 3, 95, 8, 6, 1, 223, 164, 3, 165, 8, 5, 1, 223, 164, 3, 165, + 8, 6, 1, 223, 164, 3, 246, 231, 8, 5, 1, 223, 164, 3, 246, 231, 8, 6, 1, + 223, 164, 3, 247, 29, 8, 5, 1, 223, 164, 3, 247, 29, 8, 5, 1, 223, 164, + 217, 251, 247, 137, 250, 160, 8, 6, 1, 241, 78, 8, 5, 1, 241, 78, 8, 6, + 1, 158, 3, 225, 170, 8, 5, 1, 158, 3, 225, 170, 8, 6, 1, 158, 3, 247, + 214, 8, 5, 1, 158, 3, 247, 214, 8, 6, 1, 158, 3, 52, 165, 8, 5, 1, 158, + 3, 52, 165, 8, 6, 32, 220, 73, 8, 5, 32, 220, 73, 8, 6, 1, 217, 1, 3, + 165, 8, 5, 1, 217, 1, 3, 165, 8, 6, 1, 217, 1, 3, 246, 231, 8, 5, 1, 217, + 1, 3, 246, 231, 8, 6, 1, 217, 1, 3, 247, 29, 8, 5, 1, 217, 1, 3, 247, 29, + 8, 6, 1, 215, 94, 3, 165, 8, 5, 1, 215, 94, 3, 165, 8, 6, 1, 215, 94, 3, + 246, 52, 8, 5, 1, 215, 94, 3, 246, 52, 8, 6, 1, 215, 94, 3, 246, 231, 8, + 5, 1, 215, 94, 3, 246, 231, 8, 6, 1, 215, 94, 3, 247, 29, 8, 5, 1, 215, + 94, 3, 247, 29, 8, 6, 1, 210, 70, 3, 246, 231, 8, 5, 1, 210, 70, 3, 246, + 231, 8, 6, 1, 210, 70, 3, 247, 29, 8, 5, 1, 210, 70, 3, 247, 29, 8, 6, 1, + 210, 70, 3, 95, 8, 5, 1, 210, 70, 3, 95, 8, 6, 1, 106, 3, 208, 227, 8, 5, + 1, 106, 3, 208, 227, 8, 6, 1, 106, 3, 225, 170, 8, 5, 1, 106, 3, 225, + 170, 8, 6, 1, 106, 3, 247, 214, 8, 5, 1, 106, 3, 247, 214, 8, 6, 1, 106, + 3, 215, 253, 55, 8, 5, 1, 106, 3, 215, 253, 55, 8, 6, 1, 106, 3, 52, 165, + 8, 5, 1, 106, 3, 52, 165, 8, 6, 1, 106, 3, 220, 62, 8, 5, 1, 106, 3, 220, + 62, 8, 6, 1, 204, 145, 3, 246, 52, 8, 5, 1, 204, 145, 3, 246, 52, 8, 6, + 1, 203, 125, 3, 246, 52, 8, 5, 1, 203, 125, 3, 246, 52, 8, 6, 1, 203, + 125, 3, 243, 231, 8, 6, 1, 202, 160, 3, 165, 8, 5, 1, 202, 160, 3, 165, + 8, 6, 1, 202, 160, 3, 70, 55, 8, 5, 1, 202, 160, 3, 70, 55, 8, 6, 1, 202, + 160, 3, 247, 29, 8, 5, 1, 202, 160, 3, 247, 29, 8, 5, 1, 163, 194, 8, 5, + 1, 66, 3, 95, 8, 6, 1, 66, 3, 113, 8, 6, 1, 66, 3, 208, 142, 8, 5, 1, 66, + 3, 208, 142, 8, 6, 1, 143, 195, 8, 5, 1, 143, 195, 8, 6, 1, 171, 78, 8, + 6, 1, 247, 126, 3, 113, 8, 5, 1, 247, 126, 3, 113, 8, 6, 1, 251, 84, 245, + 51, 8, 6, 1, 245, 52, 3, 113, 8, 6, 1, 245, 52, 3, 208, 142, 8, 5, 1, + 245, 52, 3, 208, 142, 8, 5, 1, 207, 174, 244, 37, 8, 6, 1, 216, 73, 74, + 8, 6, 1, 214, 192, 8, 6, 1, 171, 74, 8, 6, 1, 240, 175, 3, 113, 8, 5, 1, + 240, 175, 3, 113, 8, 6, 1, 239, 76, 3, 113, 8, 6, 1, 238, 235, 8, 5, 1, + 235, 255, 8, 6, 1, 230, 230, 8, 6, 1, 235, 206, 3, 95, 8, 6, 1, 230, 55, + 3, 113, 8, 5, 1, 230, 55, 3, 113, 8, 5, 1, 228, 131, 3, 142, 8, 5, 1, + 228, 26, 3, 95, 8, 6, 1, 207, 174, 226, 185, 8, 6, 1, 223, 164, 3, 49, + 113, 8, 5, 1, 223, 164, 3, 163, 50, 227, 210, 8, 6, 1, 158, 3, 101, 208, + 227, 8, 6, 1, 158, 3, 236, 53, 8, 5, 1, 158, 3, 236, 53, 8, 6, 1, 220, + 57, 8, 5, 1, 220, 57, 8, 6, 1, 219, 185, 3, 113, 8, 5, 1, 219, 185, 3, + 113, 8, 1, 202, 216, 8, 6, 1, 143, 108, 8, 5, 1, 143, 108, 8, 6, 1, 241, + 7, 8, 1, 216, 73, 241, 8, 227, 14, 8, 5, 1, 210, 70, 3, 219, 142, 113, 8, + 6, 1, 210, 70, 3, 113, 8, 5, 1, 210, 70, 3, 113, 8, 6, 1, 210, 70, 3, + 216, 79, 113, 8, 6, 1, 106, 3, 236, 53, 8, 5, 1, 106, 3, 236, 53, 8, 6, + 1, 206, 216, 8, 6, 1, 206, 165, 3, 113, 8, 6, 1, 203, 125, 3, 113, 8, 5, + 1, 203, 125, 3, 113, 8, 6, 1, 202, 160, 3, 95, 8, 5, 1, 202, 160, 3, 95, + 8, 6, 1, 240, 177, 8, 6, 1, 240, 178, 216, 72, 8, 5, 1, 240, 178, 216, + 72, 8, 5, 1, 240, 178, 3, 209, 248, 8, 1, 120, 3, 95, 8, 6, 1, 143, 170, + 8, 5, 1, 143, 170, 8, 1, 230, 239, 238, 45, 211, 62, 3, 95, 8, 1, 203, + 199, 8, 1, 244, 30, 246, 27, 8, 1, 227, 254, 246, 27, 8, 1, 250, 248, + 246, 27, 8, 1, 216, 79, 246, 27, 8, 6, 1, 242, 1, 3, 247, 29, 8, 6, 1, + 245, 52, 3, 5, 1, 202, 160, 3, 247, 29, 8, 5, 1, 242, 1, 3, 247, 29, 8, + 6, 1, 227, 81, 8, 6, 1, 228, 131, 3, 5, 1, 230, 184, 8, 5, 1, 227, 81, 8, + 6, 1, 222, 49, 8, 6, 1, 223, 164, 3, 5, 1, 230, 184, 8, 5, 1, 222, 49, 8, + 6, 1, 34, 3, 247, 29, 8, 5, 1, 34, 3, 247, 29, 8, 6, 1, 235, 206, 3, 247, + 29, 8, 5, 1, 235, 206, 3, 247, 29, 8, 6, 1, 158, 3, 247, 29, 8, 5, 1, + 158, 3, 247, 29, 8, 6, 1, 106, 3, 247, 29, 8, 5, 1, 106, 3, 247, 29, 8, + 6, 1, 106, 3, 243, 232, 25, 225, 170, 8, 5, 1, 106, 3, 243, 232, 25, 225, + 170, 8, 6, 1, 106, 3, 243, 232, 25, 165, 8, 5, 1, 106, 3, 243, 232, 25, + 165, 8, 6, 1, 106, 3, 243, 232, 25, 247, 29, 8, 5, 1, 106, 3, 243, 232, + 25, 247, 29, 8, 6, 1, 106, 3, 243, 232, 25, 237, 253, 8, 5, 1, 106, 3, + 243, 232, 25, 237, 253, 8, 5, 1, 207, 174, 74, 8, 6, 1, 34, 3, 243, 232, + 25, 225, 170, 8, 5, 1, 34, 3, 243, 232, 25, 225, 170, 8, 6, 1, 34, 3, 70, + 87, 25, 225, 170, 8, 5, 1, 34, 3, 70, 87, 25, 225, 170, 8, 6, 1, 251, + 110, 3, 225, 170, 8, 5, 1, 251, 110, 3, 225, 170, 8, 6, 1, 239, 76, 3, + 95, 8, 5, 1, 239, 76, 3, 95, 8, 6, 1, 239, 76, 3, 247, 29, 8, 5, 1, 239, + 76, 3, 247, 29, 8, 6, 1, 230, 55, 3, 247, 29, 8, 5, 1, 230, 55, 3, 247, + 29, 8, 6, 1, 158, 3, 220, 62, 8, 5, 1, 158, 3, 220, 62, 8, 6, 1, 158, 3, + 220, 63, 25, 225, 170, 8, 5, 1, 158, 3, 220, 63, 25, 225, 170, 8, 6, 1, + 240, 178, 3, 247, 29, 8, 5, 1, 240, 178, 3, 247, 29, 8, 5, 1, 230, 185, + 3, 247, 29, 8, 6, 1, 242, 0, 8, 6, 1, 245, 52, 3, 5, 1, 202, 159, 8, 5, + 1, 242, 0, 8, 6, 1, 239, 76, 3, 165, 8, 5, 1, 239, 76, 3, 165, 8, 6, 1, + 235, 252, 8, 6, 1, 203, 199, 8, 6, 1, 223, 164, 3, 237, 253, 8, 5, 1, + 223, 164, 3, 237, 253, 8, 6, 1, 34, 3, 215, 253, 87, 25, 165, 8, 5, 1, + 34, 3, 215, 253, 87, 25, 165, 8, 6, 1, 251, 110, 3, 165, 8, 5, 1, 251, + 110, 3, 165, 8, 6, 1, 158, 3, 211, 32, 25, 165, 8, 5, 1, 158, 3, 211, 32, + 25, 165, 8, 6, 1, 34, 3, 52, 237, 253, 8, 5, 1, 34, 3, 52, 237, 253, 8, + 6, 1, 34, 3, 230, 239, 247, 214, 8, 5, 1, 34, 3, 230, 239, 247, 214, 8, + 6, 1, 188, 3, 52, 237, 253, 8, 5, 1, 188, 3, 52, 237, 253, 8, 6, 1, 188, + 3, 230, 239, 247, 214, 8, 5, 1, 188, 3, 230, 239, 247, 214, 8, 6, 1, 235, + 206, 3, 52, 237, 253, 8, 5, 1, 235, 206, 3, 52, 237, 253, 8, 6, 1, 235, + 206, 3, 230, 239, 247, 214, 8, 5, 1, 235, 206, 3, 230, 239, 247, 214, 8, + 6, 1, 158, 3, 52, 237, 253, 8, 5, 1, 158, 3, 52, 237, 253, 8, 6, 1, 158, + 3, 230, 239, 247, 214, 8, 5, 1, 158, 3, 230, 239, 247, 214, 8, 6, 1, 217, + 1, 3, 52, 237, 253, 8, 5, 1, 217, 1, 3, 52, 237, 253, 8, 6, 1, 217, 1, 3, + 230, 239, 247, 214, 8, 5, 1, 217, 1, 3, 230, 239, 247, 214, 8, 6, 1, 106, + 3, 52, 237, 253, 8, 5, 1, 106, 3, 52, 237, 253, 8, 6, 1, 106, 3, 230, + 239, 247, 214, 8, 5, 1, 106, 3, 230, 239, 247, 214, 8, 6, 1, 215, 94, 3, + 245, 234, 56, 8, 5, 1, 215, 94, 3, 245, 234, 56, 8, 6, 1, 210, 70, 3, + 245, 234, 56, 8, 5, 1, 210, 70, 3, 245, 234, 56, 8, 6, 1, 202, 234, 8, 5, + 1, 202, 234, 8, 6, 1, 237, 172, 3, 247, 29, 8, 5, 1, 237, 172, 3, 247, + 29, 8, 6, 1, 223, 164, 3, 163, 50, 227, 210, 8, 5, 1, 245, 52, 3, 245, + 95, 8, 6, 1, 219, 216, 8, 5, 1, 219, 216, 8, 6, 1, 202, 160, 3, 113, 8, + 5, 1, 202, 160, 3, 113, 8, 6, 1, 34, 3, 70, 55, 8, 5, 1, 34, 3, 70, 55, + 8, 6, 1, 188, 3, 246, 231, 8, 5, 1, 188, 3, 246, 231, 8, 6, 1, 158, 3, + 243, 232, 25, 225, 170, 8, 5, 1, 158, 3, 243, 232, 25, 225, 170, 8, 6, 1, + 158, 3, 208, 228, 25, 225, 170, 8, 5, 1, 158, 3, 208, 228, 25, 225, 170, + 8, 6, 1, 158, 3, 70, 55, 8, 5, 1, 158, 3, 70, 55, 8, 6, 1, 158, 3, 70, + 87, 25, 225, 170, 8, 5, 1, 158, 3, 70, 87, 25, 225, 170, 8, 6, 1, 203, + 125, 3, 225, 170, 8, 5, 1, 203, 125, 3, 225, 170, 8, 5, 1, 228, 131, 3, + 245, 95, 8, 5, 1, 223, 164, 3, 245, 95, 8, 5, 1, 210, 70, 3, 245, 95, 8, + 5, 1, 243, 84, 230, 184, 8, 5, 1, 244, 130, 243, 191, 8, 5, 1, 217, 66, + 243, 191, 8, 6, 1, 34, 3, 95, 8, 6, 1, 247, 126, 3, 95, 8, 5, 1, 247, + 126, 3, 95, 8, 6, 1, 228, 131, 3, 142, 8, 6, 1, 210, 70, 3, 243, 228, 95, + 8, 5, 1, 215, 94, 3, 210, 169, 209, 248, 8, 5, 1, 202, 160, 3, 210, 169, + 209, 248, 8, 6, 1, 238, 45, 211, 61, 8, 5, 1, 238, 45, 211, 61, 8, 6, 1, + 66, 3, 95, 8, 6, 1, 106, 142, 8, 6, 1, 207, 174, 206, 164, 8, 6, 1, 188, + 3, 95, 8, 5, 1, 188, 3, 95, 8, 6, 1, 230, 185, 3, 95, 8, 5, 1, 230, 185, + 3, 95, 8, 6, 1, 5, 217, 135, 3, 236, 116, 209, 248, 8, 5, 1, 217, 135, 3, + 236, 116, 209, 248, 8, 6, 1, 217, 1, 3, 95, 8, 5, 1, 217, 1, 3, 95, 8, 6, + 1, 203, 125, 3, 95, 8, 5, 1, 203, 125, 3, 95, 8, 5, 1, 207, 174, 63, 8, + 5, 1, 251, 2, 8, 5, 1, 207, 174, 251, 2, 8, 5, 1, 66, 3, 113, 8, 5, 1, + 171, 78, 8, 5, 1, 247, 126, 3, 245, 95, 8, 5, 1, 245, 52, 3, 209, 248, 8, + 5, 1, 245, 52, 3, 113, 8, 5, 1, 216, 73, 74, 8, 5, 1, 214, 192, 8, 5, 1, + 214, 193, 3, 113, 8, 5, 1, 171, 74, 8, 5, 1, 216, 73, 171, 74, 8, 5, 1, + 216, 73, 171, 188, 3, 113, 8, 5, 1, 246, 16, 216, 73, 171, 74, 8, 5, 1, + 243, 84, 230, 185, 3, 95, 8, 5, 1, 239, 76, 3, 113, 8, 5, 1, 132, 239, + 75, 8, 1, 5, 6, 239, 75, 8, 5, 1, 238, 235, 8, 5, 1, 216, 182, 236, 53, + 8, 5, 1, 207, 174, 237, 171, 8, 5, 1, 237, 172, 3, 113, 8, 5, 1, 237, 32, + 3, 113, 8, 5, 1, 235, 206, 3, 95, 8, 5, 1, 230, 230, 8, 1, 5, 6, 75, 8, + 5, 1, 228, 131, 3, 101, 208, 227, 8, 5, 1, 228, 131, 3, 248, 124, 8, 5, + 1, 228, 131, 3, 216, 79, 113, 8, 5, 1, 227, 164, 8, 5, 1, 207, 174, 226, + 185, 8, 5, 1, 207, 174, 226, 186, 3, 163, 227, 210, 8, 5, 1, 226, 186, 3, + 113, 8, 5, 1, 223, 164, 3, 49, 113, 8, 5, 1, 223, 164, 3, 216, 79, 113, + 8, 1, 5, 6, 223, 163, 8, 5, 1, 248, 225, 78, 8, 1, 5, 6, 220, 73, 8, 5, + 1, 246, 16, 220, 36, 8, 5, 1, 218, 192, 8, 5, 1, 207, 174, 146, 8, 5, 1, + 207, 174, 217, 1, 3, 163, 227, 210, 8, 5, 1, 207, 174, 217, 1, 3, 113, 8, + 5, 1, 217, 1, 3, 163, 227, 210, 8, 5, 1, 217, 1, 3, 209, 248, 8, 5, 1, + 217, 1, 3, 239, 240, 8, 5, 1, 216, 73, 217, 1, 3, 239, 240, 8, 1, 5, 6, + 146, 8, 1, 5, 6, 230, 239, 146, 8, 5, 1, 215, 94, 3, 113, 8, 5, 1, 241, + 7, 8, 5, 1, 243, 84, 230, 185, 3, 211, 32, 25, 113, 8, 5, 1, 211, 174, + 216, 73, 241, 7, 8, 5, 1, 241, 8, 3, 245, 95, 8, 5, 1, 207, 174, 210, 69, + 8, 5, 1, 210, 70, 3, 216, 79, 113, 8, 5, 1, 106, 142, 8, 5, 1, 206, 216, + 8, 5, 1, 206, 165, 3, 113, 8, 5, 1, 207, 174, 206, 164, 8, 5, 1, 207, + 174, 204, 144, 8, 5, 1, 207, 174, 203, 124, 8, 1, 5, 6, 203, 124, 8, 5, + 1, 202, 160, 3, 216, 79, 113, 8, 5, 1, 202, 160, 3, 245, 95, 8, 5, 1, + 240, 177, 8, 5, 1, 240, 178, 3, 245, 95, 8, 1, 238, 45, 211, 61, 8, 1, + 218, 199, 205, 186, 239, 126, 8, 1, 230, 239, 238, 45, 211, 61, 8, 1, + 211, 40, 247, 125, 8, 1, 248, 70, 246, 27, 8, 1, 5, 6, 249, 255, 8, 5, 1, + 246, 16, 171, 74, 8, 1, 5, 6, 239, 76, 3, 113, 8, 1, 5, 6, 237, 171, 8, + 5, 1, 230, 185, 3, 245, 126, 8, 5, 1, 207, 174, 230, 54, 8, 1, 5, 6, 159, + 8, 5, 1, 217, 135, 3, 113, 8, 1, 238, 45, 211, 62, 3, 95, 8, 1, 216, 73, + 238, 45, 211, 62, 3, 95, 8, 5, 1, 242, 1, 243, 191, 8, 5, 1, 244, 3, 243, + 191, 8, 5, 1, 242, 1, 243, 192, 3, 245, 95, 8, 5, 1, 208, 22, 243, 191, + 8, 5, 1, 209, 137, 243, 191, 8, 5, 1, 209, 194, 243, 192, 3, 245, 95, 8, + 5, 1, 240, 39, 243, 191, 8, 5, 1, 226, 241, 243, 191, 8, 5, 1, 226, 187, + 243, 191, 8, 1, 248, 70, 218, 245, 8, 1, 248, 78, 218, 245, 8, 5, 1, 207, + 174, 237, 172, 3, 239, 240, 8, 5, 1, 207, 174, 237, 172, 3, 239, 241, 25, + 209, 248, 65, 1, 5, 237, 171, 65, 1, 5, 237, 172, 3, 113, 65, 1, 5, 230, + 184, 65, 1, 5, 146, 65, 1, 5, 207, 174, 146, 65, 1, 5, 207, 174, 217, 1, + 3, 113, 65, 1, 5, 6, 230, 239, 146, 65, 1, 5, 204, 144, 65, 1, 5, 203, + 124, 65, 1, 217, 236, 65, 1, 52, 217, 236, 65, 1, 207, 174, 245, 233, 65, + 1, 250, 160, 65, 1, 216, 73, 245, 233, 65, 1, 50, 162, 215, 252, 65, 1, + 49, 162, 215, 252, 65, 1, 238, 45, 211, 61, 65, 1, 216, 73, 238, 45, 211, + 61, 65, 1, 49, 250, 94, 65, 1, 50, 250, 94, 65, 1, 112, 250, 94, 65, 1, + 121, 250, 94, 65, 1, 246, 53, 251, 138, 247, 29, 65, 1, 80, 227, 114, 65, + 1, 225, 170, 65, 1, 251, 126, 251, 138, 65, 1, 237, 254, 251, 138, 65, 1, + 124, 80, 227, 114, 65, 1, 124, 225, 170, 65, 1, 124, 237, 254, 251, 138, + 65, 1, 124, 251, 126, 251, 138, 65, 1, 208, 82, 245, 242, 65, 1, 162, + 208, 82, 245, 242, 65, 1, 246, 216, 50, 162, 215, 252, 65, 1, 246, 216, + 49, 162, 215, 252, 65, 1, 112, 210, 3, 65, 1, 121, 210, 3, 65, 1, 91, 54, + 65, 1, 224, 103, 54, 247, 214, 70, 55, 215, 253, 55, 220, 62, 5, 208, + 227, 52, 251, 126, 251, 138, 65, 1, 216, 58, 113, 65, 1, 245, 131, 251, + 138, 65, 1, 5, 238, 235, 65, 1, 5, 159, 65, 1, 5, 194, 65, 1, 5, 203, + 196, 65, 1, 5, 216, 73, 238, 45, 211, 61, 65, 1, 240, 198, 143, 142, 65, + 1, 138, 143, 142, 65, 1, 224, 150, 143, 142, 65, 1, 124, 143, 142, 65, 1, + 240, 197, 143, 142, 65, 1, 203, 1, 244, 27, 143, 82, 65, 1, 203, 77, 244, + 27, 143, 82, 65, 1, 205, 184, 65, 1, 206, 251, 65, 1, 52, 250, 160, 65, + 1, 124, 121, 250, 94, 65, 1, 124, 112, 250, 94, 65, 1, 124, 49, 250, 94, + 65, 1, 124, 50, 250, 94, 65, 1, 124, 215, 252, 65, 1, 101, 237, 254, 251, + 138, 65, 1, 101, 52, 237, 254, 251, 138, 65, 1, 101, 52, 251, 126, 251, + 138, 65, 1, 124, 208, 227, 65, 1, 216, 188, 245, 242, 65, 1, 248, 142, + 138, 208, 161, 65, 1, 241, 84, 138, 208, 161, 65, 1, 248, 142, 124, 208, + 161, 65, 1, 241, 84, 124, 208, 161, 65, 1, 213, 34, 65, 1, 171, 213, 34, + 65, 1, 124, 49, 47, 39, 237, 254, 251, 138, 39, 251, 126, 251, 138, 39, + 246, 53, 251, 138, 39, 208, 227, 39, 225, 170, 39, 219, 198, 39, 247, + 214, 39, 70, 55, 39, 243, 231, 39, 236, 116, 55, 39, 215, 253, 55, 39, + 52, 251, 126, 251, 138, 39, 247, 29, 39, 80, 227, 115, 55, 39, 52, 80, + 227, 115, 55, 39, 52, 237, 254, 251, 138, 39, 247, 52, 39, 230, 239, 247, + 214, 39, 207, 174, 245, 234, 55, 39, 245, 234, 55, 39, 216, 73, 245, 234, + 55, 39, 245, 234, 87, 216, 16, 39, 237, 254, 251, 139, 56, 39, 251, 126, + 251, 139, 56, 39, 49, 210, 4, 56, 39, 50, 210, 4, 56, 39, 49, 250, 218, + 55, 39, 236, 53, 39, 49, 162, 215, 253, 56, 39, 112, 210, 4, 56, 39, 121, + 210, 4, 56, 39, 91, 2, 56, 39, 224, 103, 2, 56, 39, 219, 140, 236, 116, + 56, 39, 216, 79, 236, 116, 56, 39, 70, 56, 39, 243, 232, 56, 39, 215, + 253, 56, 39, 245, 234, 56, 39, 246, 231, 39, 220, 62, 39, 80, 227, 115, + 56, 39, 247, 208, 56, 39, 230, 239, 52, 250, 127, 56, 39, 247, 30, 56, + 39, 246, 53, 251, 139, 56, 39, 247, 215, 56, 39, 230, 239, 247, 215, 56, + 39, 208, 228, 56, 39, 225, 171, 56, 39, 124, 227, 114, 39, 52, 124, 227, + 114, 39, 208, 228, 219, 199, 39, 212, 228, 211, 32, 219, 199, 39, 163, + 211, 32, 219, 199, 39, 212, 228, 212, 1, 219, 199, 39, 163, 212, 1, 219, + 199, 39, 50, 162, 215, 253, 56, 39, 230, 239, 247, 208, 56, 39, 51, 56, + 39, 214, 176, 56, 39, 203, 197, 55, 39, 80, 208, 227, 39, 52, 219, 198, + 39, 237, 254, 143, 82, 39, 251, 126, 143, 82, 39, 30, 218, 239, 39, 30, + 228, 252, 39, 30, 243, 225, 208, 149, 39, 30, 202, 221, 39, 247, 208, 55, + 39, 241, 35, 2, 56, 39, 52, 80, 227, 115, 56, 39, 49, 250, 218, 56, 39, + 221, 166, 208, 228, 55, 39, 236, 122, 55, 39, 251, 7, 156, 208, 173, 55, + 39, 49, 50, 53, 56, 39, 177, 53, 56, 39, 238, 4, 230, 96, 39, 50, 250, + 95, 55, 39, 49, 162, 215, 253, 55, 39, 240, 36, 39, 203, 197, 56, 39, 49, + 250, 95, 56, 39, 50, 250, 95, 56, 39, 50, 250, 95, 25, 112, 250, 95, 56, + 39, 50, 162, 215, 253, 55, 39, 70, 87, 216, 16, 39, 250, 60, 56, 39, 52, + 215, 253, 56, 39, 202, 30, 55, 39, 52, 247, 215, 56, 39, 52, 247, 214, + 39, 52, 225, 170, 39, 52, 225, 171, 56, 39, 52, 208, 227, 39, 52, 230, + 239, 247, 214, 39, 52, 86, 53, 56, 39, 8, 5, 1, 63, 39, 8, 5, 1, 74, 39, + 8, 5, 1, 75, 39, 8, 5, 1, 78, 39, 8, 5, 1, 68, 39, 8, 5, 1, 247, 125, 39, + 8, 5, 1, 245, 51, 39, 8, 5, 1, 237, 171, 39, 8, 5, 1, 226, 185, 39, 8, 5, + 1, 146, 39, 8, 5, 1, 210, 69, 39, 8, 5, 1, 206, 164, 39, 8, 5, 1, 203, + 196, 30, 6, 1, 237, 20, 30, 5, 1, 237, 20, 30, 6, 1, 250, 126, 214, 246, + 30, 5, 1, 250, 126, 214, 246, 30, 221, 44, 54, 30, 226, 251, 221, 44, 54, + 30, 6, 1, 219, 126, 243, 199, 30, 5, 1, 219, 126, 243, 199, 30, 202, 221, + 30, 5, 216, 73, 226, 221, 212, 145, 97, 30, 5, 242, 83, 226, 221, 212, + 145, 97, 30, 5, 216, 73, 242, 83, 226, 221, 212, 145, 97, 30, 217, 47, + 82, 30, 6, 1, 202, 227, 30, 208, 149, 30, 243, 225, 208, 149, 30, 6, 1, + 251, 3, 3, 208, 149, 30, 250, 203, 209, 163, 30, 6, 1, 241, 38, 3, 208, + 149, 30, 6, 1, 240, 249, 3, 208, 149, 30, 6, 1, 230, 231, 3, 208, 149, + 30, 6, 1, 220, 35, 3, 208, 149, 30, 6, 1, 206, 217, 3, 208, 149, 30, 6, + 1, 220, 37, 3, 208, 149, 30, 5, 1, 230, 231, 3, 243, 225, 25, 208, 149, + 30, 6, 1, 251, 2, 30, 6, 1, 248, 106, 30, 6, 1, 238, 235, 30, 6, 1, 244, + 37, 30, 6, 1, 241, 37, 30, 6, 1, 202, 83, 30, 6, 1, 240, 248, 30, 6, 1, + 209, 74, 30, 6, 1, 230, 230, 30, 6, 1, 229, 247, 30, 6, 1, 228, 24, 30, + 6, 1, 223, 246, 30, 6, 1, 221, 84, 30, 6, 1, 203, 170, 30, 6, 1, 220, 34, + 30, 6, 1, 218, 167, 30, 6, 1, 216, 59, 30, 6, 1, 212, 144, 30, 6, 1, 209, + 207, 30, 6, 1, 206, 216, 30, 6, 1, 218, 192, 30, 6, 1, 246, 142, 30, 6, + 1, 217, 202, 30, 6, 1, 220, 36, 30, 6, 1, 230, 231, 3, 243, 224, 30, 6, + 1, 206, 217, 3, 243, 224, 30, 5, 1, 251, 3, 3, 208, 149, 30, 5, 1, 241, + 38, 3, 208, 149, 30, 5, 1, 240, 249, 3, 208, 149, 30, 5, 1, 230, 231, 3, + 208, 149, 30, 5, 1, 206, 217, 3, 243, 225, 25, 208, 149, 30, 5, 1, 251, + 2, 30, 5, 1, 248, 106, 30, 5, 1, 238, 235, 30, 5, 1, 244, 37, 30, 5, 1, + 241, 37, 30, 5, 1, 202, 83, 30, 5, 1, 240, 248, 30, 5, 1, 209, 74, 30, 5, + 1, 230, 230, 30, 5, 1, 229, 247, 30, 5, 1, 228, 24, 30, 5, 1, 223, 246, + 30, 5, 1, 221, 84, 30, 5, 1, 203, 170, 30, 5, 1, 220, 34, 30, 5, 1, 218, + 167, 30, 5, 1, 216, 59, 30, 5, 1, 46, 212, 144, 30, 5, 1, 212, 144, 30, + 5, 1, 209, 207, 30, 5, 1, 206, 216, 30, 5, 1, 218, 192, 30, 5, 1, 246, + 142, 30, 5, 1, 217, 202, 30, 5, 1, 220, 36, 30, 5, 1, 230, 231, 3, 243, + 224, 30, 5, 1, 206, 217, 3, 243, 224, 30, 5, 1, 220, 35, 3, 208, 149, 30, + 5, 1, 206, 217, 3, 208, 149, 30, 5, 1, 220, 37, 3, 208, 149, 30, 6, 230, + 19, 97, 30, 248, 107, 97, 30, 209, 75, 97, 30, 206, 217, 3, 236, 116, 97, + 30, 206, 217, 3, 251, 126, 25, 236, 116, 97, 30, 206, 217, 3, 243, 232, + 25, 236, 116, 97, 30, 218, 193, 97, 30, 218, 168, 97, 30, 230, 19, 97, + 30, 1, 250, 126, 229, 0, 30, 5, 1, 250, 126, 229, 0, 30, 1, 211, 71, 30, + 5, 1, 211, 71, 30, 1, 243, 199, 30, 5, 1, 243, 199, 30, 1, 229, 0, 30, 5, + 1, 229, 0, 30, 1, 214, 246, 30, 5, 1, 214, 246, 84, 6, 1, 213, 35, 84, 5, + 1, 213, 35, 84, 6, 1, 240, 45, 84, 5, 1, 240, 45, 84, 6, 1, 229, 127, 84, + 5, 1, 229, 127, 84, 6, 1, 236, 107, 84, 5, 1, 236, 107, 84, 6, 1, 238, + 230, 84, 5, 1, 238, 230, 84, 6, 1, 213, 1, 84, 5, 1, 213, 1, 84, 6, 1, + 244, 52, 84, 5, 1, 244, 52, 30, 229, 248, 97, 30, 216, 60, 97, 30, 226, + 221, 212, 145, 97, 30, 1, 202, 227, 30, 6, 209, 75, 97, 30, 226, 221, + 241, 38, 97, 30, 216, 73, 226, 221, 241, 38, 97, 30, 6, 1, 212, 242, 30, + 5, 1, 212, 242, 30, 6, 226, 221, 212, 145, 97, 30, 6, 1, 214, 243, 30, 5, + 1, 214, 243, 30, 216, 60, 3, 211, 32, 97, 30, 6, 216, 73, 226, 221, 212, + 145, 97, 30, 6, 242, 83, 226, 221, 212, 145, 97, 30, 6, 216, 73, 242, 83, + 226, 221, 212, 145, 97, 36, 6, 1, 231, 111, 3, 237, 253, 36, 6, 1, 230, + 234, 36, 6, 1, 243, 130, 36, 6, 1, 238, 52, 36, 6, 1, 207, 11, 231, 110, + 36, 6, 1, 241, 252, 36, 6, 1, 247, 135, 75, 36, 6, 1, 203, 11, 36, 6, 1, + 230, 161, 36, 6, 1, 227, 80, 36, 6, 1, 222, 41, 36, 6, 1, 208, 8, 36, 6, + 1, 229, 49, 36, 6, 1, 235, 206, 3, 237, 253, 36, 6, 1, 212, 228, 68, 36, + 6, 1, 241, 248, 36, 6, 1, 63, 36, 6, 1, 248, 162, 36, 6, 1, 206, 55, 36, + 6, 1, 238, 105, 36, 6, 1, 244, 75, 36, 6, 1, 231, 110, 36, 6, 1, 202, 71, + 36, 6, 1, 202, 92, 36, 6, 1, 75, 36, 6, 1, 212, 228, 75, 36, 6, 1, 173, + 36, 6, 1, 241, 122, 36, 6, 1, 241, 103, 36, 6, 1, 241, 92, 36, 6, 1, 78, + 36, 6, 1, 219, 34, 36, 6, 1, 241, 28, 36, 6, 1, 241, 17, 36, 6, 1, 209, + 187, 36, 6, 1, 68, 36, 6, 1, 241, 154, 36, 6, 1, 152, 36, 6, 1, 208, 14, + 36, 6, 1, 246, 170, 36, 6, 1, 213, 90, 36, 6, 1, 213, 46, 36, 6, 1, 237, + 91, 54, 36, 6, 1, 203, 30, 36, 6, 1, 212, 7, 54, 36, 6, 1, 74, 36, 6, 1, + 202, 213, 36, 6, 1, 198, 36, 5, 1, 63, 36, 5, 1, 248, 162, 36, 5, 1, 206, + 55, 36, 5, 1, 238, 105, 36, 5, 1, 244, 75, 36, 5, 1, 231, 110, 36, 5, 1, + 202, 71, 36, 5, 1, 202, 92, 36, 5, 1, 75, 36, 5, 1, 212, 228, 75, 36, 5, + 1, 173, 36, 5, 1, 241, 122, 36, 5, 1, 241, 103, 36, 5, 1, 241, 92, 36, 5, + 1, 78, 36, 5, 1, 219, 34, 36, 5, 1, 241, 28, 36, 5, 1, 241, 17, 36, 5, 1, + 209, 187, 36, 5, 1, 68, 36, 5, 1, 241, 154, 36, 5, 1, 152, 36, 5, 1, 208, + 14, 36, 5, 1, 246, 170, 36, 5, 1, 213, 90, 36, 5, 1, 213, 46, 36, 5, 1, + 237, 91, 54, 36, 5, 1, 203, 30, 36, 5, 1, 212, 7, 54, 36, 5, 1, 74, 36, + 5, 1, 202, 213, 36, 5, 1, 198, 36, 5, 1, 231, 111, 3, 237, 253, 36, 5, 1, + 230, 234, 36, 5, 1, 243, 130, 36, 5, 1, 238, 52, 36, 5, 1, 207, 11, 231, + 110, 36, 5, 1, 241, 252, 36, 5, 1, 247, 135, 75, 36, 5, 1, 203, 11, 36, + 5, 1, 230, 161, 36, 5, 1, 227, 80, 36, 5, 1, 222, 41, 36, 5, 1, 208, 8, + 36, 5, 1, 229, 49, 36, 5, 1, 235, 206, 3, 237, 253, 36, 5, 1, 212, 228, + 68, 36, 5, 1, 241, 248, 36, 6, 1, 220, 36, 36, 5, 1, 220, 36, 36, 6, 1, + 203, 66, 36, 5, 1, 203, 66, 36, 6, 1, 230, 228, 74, 36, 5, 1, 230, 228, + 74, 36, 6, 1, 227, 86, 202, 183, 36, 5, 1, 227, 86, 202, 183, 36, 6, 1, + 230, 228, 227, 86, 202, 183, 36, 5, 1, 230, 228, 227, 86, 202, 183, 36, + 6, 1, 248, 73, 202, 183, 36, 5, 1, 248, 73, 202, 183, 36, 6, 1, 230, 228, + 248, 73, 202, 183, 36, 5, 1, 230, 228, 248, 73, 202, 183, 36, 6, 1, 228, + 225, 36, 5, 1, 228, 225, 36, 6, 1, 217, 202, 36, 5, 1, 217, 202, 36, 6, + 1, 239, 235, 36, 5, 1, 239, 235, 36, 6, 1, 230, 186, 36, 5, 1, 230, 186, + 36, 6, 1, 230, 187, 3, 52, 237, 254, 251, 138, 36, 5, 1, 230, 187, 3, 52, + 237, 254, 251, 138, 36, 6, 1, 207, 14, 36, 5, 1, 207, 14, 36, 6, 1, 215, + 191, 220, 36, 36, 5, 1, 215, 191, 220, 36, 36, 6, 1, 220, 37, 3, 208, + 197, 36, 5, 1, 220, 37, 3, 208, 197, 36, 6, 1, 219, 224, 36, 5, 1, 219, + 224, 36, 6, 1, 229, 0, 36, 5, 1, 229, 0, 36, 209, 35, 54, 39, 36, 208, + 197, 39, 36, 219, 141, 39, 36, 244, 142, 218, 71, 39, 36, 217, 196, 218, + 71, 39, 36, 218, 55, 39, 36, 236, 12, 209, 35, 54, 39, 36, 224, 114, 54, + 36, 6, 1, 212, 228, 235, 206, 3, 209, 248, 36, 5, 1, 212, 228, 235, 206, + 3, 209, 248, 36, 6, 1, 213, 139, 54, 36, 5, 1, 213, 139, 54, 36, 6, 1, + 241, 29, 3, 208, 254, 36, 5, 1, 241, 29, 3, 208, 254, 36, 6, 1, 238, 106, + 3, 206, 215, 36, 5, 1, 238, 106, 3, 206, 215, 36, 6, 1, 238, 106, 3, 95, + 36, 5, 1, 238, 106, 3, 95, 36, 6, 1, 238, 106, 3, 101, 113, 36, 5, 1, + 238, 106, 3, 101, 113, 36, 6, 1, 202, 72, 3, 244, 20, 36, 5, 1, 202, 72, + 3, 244, 20, 36, 6, 1, 202, 93, 3, 244, 20, 36, 5, 1, 202, 93, 3, 244, 20, + 36, 6, 1, 230, 44, 3, 244, 20, 36, 5, 1, 230, 44, 3, 244, 20, 36, 6, 1, + 230, 44, 3, 80, 95, 36, 5, 1, 230, 44, 3, 80, 95, 36, 6, 1, 230, 44, 3, + 95, 36, 5, 1, 230, 44, 3, 95, 36, 6, 1, 248, 214, 173, 36, 5, 1, 248, + 214, 173, 36, 6, 1, 241, 93, 3, 244, 20, 36, 5, 1, 241, 93, 3, 244, 20, + 36, 6, 32, 241, 93, 238, 105, 36, 5, 32, 241, 93, 238, 105, 36, 6, 1, + 219, 35, 3, 101, 113, 36, 5, 1, 219, 35, 3, 101, 113, 36, 6, 1, 251, 145, + 152, 36, 5, 1, 251, 145, 152, 36, 6, 1, 241, 18, 3, 244, 20, 36, 5, 1, + 241, 18, 3, 244, 20, 36, 6, 1, 209, 188, 3, 244, 20, 36, 5, 1, 209, 188, + 3, 244, 20, 36, 6, 1, 211, 53, 68, 36, 5, 1, 211, 53, 68, 36, 6, 1, 211, + 53, 106, 3, 95, 36, 5, 1, 211, 53, 106, 3, 95, 36, 6, 1, 237, 160, 3, + 244, 20, 36, 5, 1, 237, 160, 3, 244, 20, 36, 6, 32, 209, 188, 208, 14, + 36, 5, 32, 209, 188, 208, 14, 36, 6, 1, 246, 171, 3, 244, 20, 36, 5, 1, + 246, 171, 3, 244, 20, 36, 6, 1, 246, 171, 3, 80, 95, 36, 5, 1, 246, 171, + 3, 80, 95, 36, 6, 1, 213, 12, 36, 5, 1, 213, 12, 36, 6, 1, 251, 145, 246, + 170, 36, 5, 1, 251, 145, 246, 170, 36, 6, 1, 251, 145, 246, 171, 3, 244, + 20, 36, 5, 1, 251, 145, 246, 171, 3, 244, 20, 36, 1, 219, 133, 36, 6, 1, + 202, 72, 3, 247, 214, 36, 5, 1, 202, 72, 3, 247, 214, 36, 6, 1, 230, 44, + 3, 113, 36, 5, 1, 230, 44, 3, 113, 36, 6, 1, 241, 123, 3, 209, 248, 36, + 5, 1, 241, 123, 3, 209, 248, 36, 6, 1, 241, 93, 3, 113, 36, 5, 1, 241, + 93, 3, 113, 36, 6, 1, 241, 93, 3, 209, 248, 36, 5, 1, 241, 93, 3, 209, + 248, 36, 6, 1, 229, 138, 246, 170, 36, 5, 1, 229, 138, 246, 170, 36, 6, + 1, 241, 104, 3, 209, 248, 36, 5, 1, 241, 104, 3, 209, 248, 36, 5, 1, 219, + 133, 36, 6, 1, 34, 3, 247, 214, 36, 5, 1, 34, 3, 247, 214, 36, 6, 1, 34, + 3, 243, 231, 36, 5, 1, 34, 3, 243, 231, 36, 6, 32, 34, 231, 110, 36, 5, + 32, 34, 231, 110, 36, 6, 1, 231, 111, 3, 247, 214, 36, 5, 1, 231, 111, 3, + 247, 214, 36, 6, 1, 214, 192, 36, 5, 1, 214, 192, 36, 6, 1, 214, 193, 3, + 243, 231, 36, 5, 1, 214, 193, 3, 243, 231, 36, 6, 1, 202, 72, 3, 243, + 231, 36, 5, 1, 202, 72, 3, 243, 231, 36, 6, 1, 202, 93, 3, 243, 231, 36, + 5, 1, 202, 93, 3, 243, 231, 36, 6, 1, 251, 145, 241, 252, 36, 5, 1, 251, + 145, 241, 252, 36, 6, 1, 235, 206, 3, 225, 170, 36, 5, 1, 235, 206, 3, + 225, 170, 36, 6, 1, 235, 206, 3, 243, 231, 36, 5, 1, 235, 206, 3, 243, + 231, 36, 6, 1, 158, 3, 243, 231, 36, 5, 1, 158, 3, 243, 231, 36, 6, 1, + 248, 225, 78, 36, 5, 1, 248, 225, 78, 36, 6, 1, 248, 225, 158, 3, 243, + 231, 36, 5, 1, 248, 225, 158, 3, 243, 231, 36, 6, 1, 188, 3, 243, 231, + 36, 5, 1, 188, 3, 243, 231, 36, 6, 1, 106, 3, 225, 170, 36, 5, 1, 106, 3, + 225, 170, 36, 6, 1, 106, 3, 243, 231, 36, 5, 1, 106, 3, 243, 231, 36, 6, + 1, 106, 3, 52, 165, 36, 5, 1, 106, 3, 52, 165, 36, 6, 1, 246, 171, 3, + 243, 231, 36, 5, 1, 246, 171, 3, 243, 231, 36, 6, 1, 238, 106, 3, 244, + 20, 36, 5, 1, 238, 106, 3, 244, 20, 36, 6, 1, 203, 31, 3, 243, 231, 36, + 5, 1, 203, 31, 3, 243, 231, 36, 6, 1, 238, 106, 3, 211, 32, 25, 113, 36, + 5, 1, 238, 106, 3, 211, 32, 25, 113, 36, 6, 1, 237, 160, 3, 113, 36, 5, + 1, 237, 160, 3, 113, 36, 6, 1, 237, 160, 3, 95, 36, 5, 1, 237, 160, 3, + 95, 36, 6, 1, 229, 10, 244, 75, 36, 5, 1, 229, 10, 244, 75, 36, 6, 1, + 229, 10, 243, 130, 36, 5, 1, 229, 10, 243, 130, 36, 6, 1, 229, 10, 202, + 21, 36, 5, 1, 229, 10, 202, 21, 36, 6, 1, 229, 10, 241, 244, 36, 5, 1, + 229, 10, 241, 244, 36, 6, 1, 229, 10, 227, 80, 36, 5, 1, 229, 10, 227, + 80, 36, 6, 1, 229, 10, 222, 41, 36, 5, 1, 229, 10, 222, 41, 36, 6, 1, + 229, 10, 212, 71, 36, 5, 1, 229, 10, 212, 71, 36, 6, 1, 229, 10, 208, + 191, 36, 5, 1, 229, 10, 208, 191, 36, 6, 1, 216, 73, 202, 92, 36, 5, 1, + 216, 73, 202, 92, 36, 6, 1, 241, 123, 3, 113, 36, 5, 1, 241, 123, 3, 113, + 36, 6, 1, 227, 161, 36, 5, 1, 227, 161, 36, 6, 1, 216, 61, 36, 5, 1, 216, + 61, 36, 6, 1, 203, 99, 36, 5, 1, 203, 99, 36, 6, 1, 217, 126, 36, 5, 1, + 217, 126, 36, 6, 1, 204, 62, 36, 5, 1, 204, 62, 36, 6, 1, 251, 26, 173, + 36, 5, 1, 251, 26, 173, 36, 6, 1, 241, 123, 3, 101, 113, 36, 5, 1, 241, + 123, 3, 101, 113, 36, 6, 1, 241, 93, 3, 101, 113, 36, 5, 1, 241, 93, 3, + 101, 113, 36, 6, 1, 219, 35, 3, 244, 20, 36, 5, 1, 219, 35, 3, 244, 20, + 36, 6, 1, 213, 13, 3, 244, 20, 36, 5, 1, 213, 13, 3, 244, 20, 36, 6, 1, + 241, 93, 3, 49, 113, 36, 5, 1, 241, 93, 3, 49, 113, 36, 6, 1, 241, 237, + 36, 5, 1, 241, 237, 36, 6, 1, 244, 124, 36, 5, 1, 244, 124, 36, 6, 1, + 241, 123, 3, 244, 20, 36, 5, 1, 241, 123, 3, 244, 20, 178, 6, 1, 250, 5, + 178, 6, 1, 248, 122, 178, 6, 1, 238, 69, 178, 6, 1, 244, 212, 178, 6, 1, + 241, 167, 178, 6, 1, 202, 116, 178, 6, 1, 241, 147, 178, 6, 1, 240, 250, + 178, 6, 1, 135, 178, 6, 1, 202, 71, 178, 6, 1, 231, 19, 178, 6, 1, 227, + 83, 178, 6, 1, 203, 174, 178, 6, 1, 247, 92, 178, 6, 1, 229, 180, 178, 6, + 1, 236, 136, 178, 6, 1, 230, 181, 178, 6, 1, 238, 116, 178, 6, 1, 246, + 160, 178, 6, 1, 224, 240, 178, 6, 1, 203, 11, 178, 6, 1, 221, 152, 178, + 6, 1, 213, 90, 178, 6, 1, 205, 189, 178, 6, 1, 246, 199, 178, 6, 1, 219, + 16, 178, 6, 1, 230, 144, 178, 6, 1, 216, 220, 178, 6, 1, 214, 155, 178, + 6, 1, 205, 234, 178, 6, 1, 208, 194, 178, 6, 1, 216, 122, 178, 6, 1, 245, + 254, 178, 6, 1, 202, 252, 178, 6, 1, 218, 102, 178, 6, 1, 229, 191, 178, + 6, 1, 220, 60, 178, 6, 1, 240, 47, 178, 65, 1, 49, 162, 215, 252, 178, + 250, 160, 178, 241, 96, 82, 178, 240, 212, 82, 178, 245, 233, 178, 217, + 47, 82, 178, 251, 146, 82, 178, 5, 1, 250, 5, 178, 5, 1, 248, 122, 178, + 5, 1, 238, 69, 178, 5, 1, 244, 212, 178, 5, 1, 241, 167, 178, 5, 1, 202, + 116, 178, 5, 1, 241, 147, 178, 5, 1, 240, 250, 178, 5, 1, 135, 178, 5, 1, + 202, 71, 178, 5, 1, 231, 19, 178, 5, 1, 227, 83, 178, 5, 1, 203, 174, + 178, 5, 1, 247, 92, 178, 5, 1, 229, 180, 178, 5, 1, 236, 136, 178, 5, 1, + 230, 181, 178, 5, 1, 238, 116, 178, 5, 1, 246, 160, 178, 5, 1, 224, 240, + 178, 5, 1, 203, 11, 178, 5, 1, 221, 152, 178, 5, 1, 213, 90, 178, 5, 1, + 205, 189, 178, 5, 1, 246, 199, 178, 5, 1, 219, 16, 178, 5, 1, 230, 144, + 178, 5, 1, 216, 220, 178, 5, 1, 214, 155, 178, 5, 1, 205, 234, 178, 5, 1, + 208, 194, 178, 5, 1, 216, 122, 178, 5, 1, 245, 254, 178, 5, 1, 202, 252, + 178, 5, 1, 218, 102, 178, 5, 1, 229, 191, 178, 5, 1, 220, 60, 178, 5, 1, + 240, 47, 178, 5, 32, 241, 168, 202, 252, 178, 239, 102, 211, 61, 178, + 235, 220, 216, 15, 178, 240, 246, 54, 227, 221, 178, 240, 246, 54, 178, + 242, 60, 54, 110, 251, 139, 240, 241, 110, 251, 139, 214, 156, 110, 251, + 139, 213, 69, 110, 251, 139, 202, 103, 217, 109, 110, 251, 139, 202, 103, + 238, 254, 110, 251, 139, 208, 209, 110, 251, 139, 216, 70, 110, 251, 139, + 202, 101, 110, 251, 139, 219, 61, 110, 251, 139, 203, 23, 110, 251, 139, + 209, 115, 110, 251, 139, 238, 167, 110, 251, 139, 238, 168, 223, 208, + 110, 251, 139, 238, 165, 110, 251, 139, 217, 110, 219, 90, 110, 251, 139, + 209, 158, 238, 183, 110, 251, 139, 219, 40, 110, 251, 139, 250, 43, 237, + 152, 110, 251, 139, 223, 218, 110, 251, 139, 225, 145, 110, 251, 139, + 224, 229, 110, 251, 139, 224, 230, 229, 192, 110, 251, 139, 244, 151, + 110, 251, 139, 217, 121, 110, 251, 139, 209, 158, 217, 104, 110, 251, + 139, 203, 33, 248, 123, 202, 233, 110, 251, 139, 220, 43, 110, 251, 139, + 231, 69, 110, 251, 139, 244, 53, 110, 251, 139, 202, 28, 110, 131, 225, + 75, 246, 61, 110, 218, 63, 213, 15, 110, 218, 63, 237, 82, 214, 156, 110, + 218, 63, 237, 82, 219, 54, 110, 218, 63, 237, 82, 217, 114, 110, 218, 63, + 236, 232, 110, 218, 63, 208, 11, 110, 218, 63, 214, 156, 110, 218, 63, + 219, 54, 110, 218, 63, 217, 114, 110, 218, 63, 236, 128, 110, 218, 63, + 236, 129, 237, 84, 35, 206, 59, 110, 218, 63, 217, 51, 110, 218, 63, 244, + 198, 219, 245, 225, 105, 110, 218, 63, 224, 219, 110, 217, 179, 225, 102, + 110, 218, 63, 216, 200, 110, 217, 179, 219, 63, 110, 218, 63, 213, 0, + 243, 85, 110, 218, 63, 212, 124, 243, 85, 110, 217, 179, 212, 8, 219, 56, + 110, 131, 206, 221, 243, 85, 110, 131, 226, 251, 243, 85, 110, 217, 179, + 221, 41, 237, 151, 110, 218, 63, 217, 115, 217, 109, 110, 1, 251, 30, + 110, 1, 248, 108, 110, 1, 238, 67, 110, 1, 244, 178, 110, 1, 237, 67, + 110, 1, 206, 59, 110, 1, 202, 95, 110, 1, 237, 21, 110, 1, 209, 132, 110, + 1, 202, 236, 110, 1, 46, 230, 22, 110, 1, 230, 22, 110, 1, 228, 20, 110, + 1, 46, 224, 247, 110, 1, 224, 247, 110, 1, 46, 221, 40, 110, 1, 221, 40, + 110, 1, 214, 249, 110, 1, 250, 3, 110, 1, 46, 219, 34, 110, 1, 219, 34, + 110, 1, 46, 208, 15, 110, 1, 208, 15, 110, 1, 217, 74, 110, 1, 216, 91, + 110, 1, 212, 255, 110, 1, 209, 203, 110, 32, 203, 9, 52, 206, 59, 110, + 32, 203, 9, 206, 60, 202, 236, 110, 32, 203, 9, 52, 202, 236, 110, 217, + 179, 238, 167, 110, 217, 179, 238, 165, 10, 42, 54, 10, 2, 214, 242, 10, + 239, 170, 225, 88, 10, 2, 215, 24, 10, 2, 214, 245, 10, 42, 131, 55, 250, + 140, 245, 106, 215, 204, 250, 140, 239, 140, 215, 204, 10, 216, 165, 250, + 140, 218, 247, 224, 116, 54, 250, 140, 218, 247, 209, 153, 209, 37, 54, + 251, 86, 54, 10, 245, 233, 10, 244, 138, 213, 130, 10, 218, 65, 206, 40, + 54, 10, 2, 224, 95, 10, 2, 215, 3, 251, 33, 204, 86, 10, 2, 251, 33, 250, + 64, 10, 2, 216, 198, 251, 32, 10, 2, 216, 206, 251, 12, 250, 210, 10, 2, + 209, 240, 10, 5, 138, 209, 251, 10, 5, 138, 32, 137, 3, 228, 29, 3, 203, + 47, 10, 5, 138, 202, 107, 10, 5, 240, 71, 10, 5, 244, 172, 10, 5, 229, + 229, 10, 213, 143, 10, 1, 82, 10, 208, 70, 70, 217, 179, 82, 10, 217, 47, + 82, 10, 1, 229, 233, 203, 47, 10, 1, 237, 127, 10, 1, 137, 3, 225, 166, + 55, 10, 1, 137, 3, 237, 128, 55, 10, 1, 204, 71, 3, 237, 128, 55, 10, 1, + 137, 3, 237, 128, 56, 10, 1, 89, 3, 237, 128, 55, 10, 1, 251, 30, 10, 1, + 248, 138, 10, 1, 209, 170, 225, 98, 10, 1, 209, 169, 10, 1, 209, 88, 10, + 1, 230, 158, 10, 1, 237, 148, 10, 1, 229, 140, 10, 1, 244, 184, 10, 1, + 209, 100, 10, 1, 216, 122, 10, 1, 202, 107, 10, 1, 214, 161, 10, 1, 213, + 39, 10, 1, 215, 28, 10, 1, 244, 207, 10, 1, 209, 251, 10, 1, 202, 110, + 10, 1, 251, 59, 10, 1, 238, 114, 10, 1, 229, 190, 3, 120, 187, 55, 10, 1, + 229, 190, 3, 126, 187, 56, 10, 1, 240, 75, 89, 3, 230, 239, 206, 164, 10, + 1, 240, 75, 89, 3, 120, 187, 55, 10, 1, 240, 75, 89, 3, 126, 187, 55, 10, + 209, 209, 10, 1, 240, 47, 10, 1, 217, 119, 10, 1, 230, 22, 10, 1, 228, + 28, 10, 1, 225, 5, 10, 1, 221, 178, 10, 1, 237, 43, 10, 1, 204, 70, 10, + 1, 137, 225, 129, 10, 1, 203, 47, 10, 240, 69, 10, 244, 170, 10, 229, + 227, 10, 240, 71, 10, 244, 172, 10, 229, 229, 10, 213, 80, 10, 210, 222, + 10, 225, 164, 55, 10, 237, 128, 55, 10, 237, 128, 56, 10, 210, 246, 251, + 30, 10, 230, 239, 244, 172, 10, 131, 221, 179, 238, 85, 10, 201, 248, 10, + 22, 2, 5, 206, 165, 55, 10, 22, 2, 230, 239, 5, 206, 165, 55, 10, 22, 2, + 70, 56, 10, 216, 73, 244, 172, 10, 240, 72, 3, 120, 243, 83, 10, 204, 72, + 237, 128, 56, 250, 140, 17, 202, 84, 250, 140, 17, 105, 250, 140, 17, + 108, 250, 140, 17, 147, 250, 140, 17, 149, 250, 140, 17, 170, 250, 140, + 17, 195, 250, 140, 17, 213, 111, 250, 140, 17, 199, 250, 140, 17, 222, + 63, 10, 218, 246, 54, 10, 244, 68, 213, 130, 10, 209, 35, 213, 130, 10, + 239, 233, 218, 61, 211, 94, 10, 1, 243, 84, 248, 138, 10, 1, 243, 84, + 217, 119, 10, 1, 210, 199, 251, 30, 10, 1, 137, 204, 87, 10, 1, 137, 3, + 204, 72, 237, 128, 55, 10, 1, 137, 3, 204, 72, 237, 128, 56, 10, 1, 138, + 237, 127, 10, 1, 138, 237, 128, 251, 30, 10, 1, 138, 237, 128, 204, 70, + 10, 1, 106, 3, 237, 128, 55, 10, 1, 138, 237, 128, 203, 47, 10, 1, 207, + 233, 10, 1, 207, 231, 10, 1, 248, 148, 10, 1, 209, 170, 3, 215, 252, 10, + 1, 209, 170, 3, 126, 187, 87, 242, 68, 10, 1, 219, 16, 10, 1, 209, 167, + 10, 1, 248, 136, 10, 1, 151, 3, 237, 128, 55, 10, 1, 151, 3, 120, 187, + 80, 55, 10, 1, 220, 254, 10, 1, 242, 5, 10, 1, 151, 3, 126, 187, 55, 10, + 1, 209, 191, 10, 1, 209, 189, 10, 1, 244, 115, 10, 1, 244, 185, 3, 215, + 252, 10, 1, 244, 185, 3, 70, 56, 10, 1, 244, 185, 3, 70, 248, 126, 25, 5, + 209, 251, 10, 1, 244, 191, 10, 1, 244, 117, 10, 1, 242, 33, 10, 1, 244, + 185, 3, 126, 187, 87, 242, 68, 10, 1, 244, 185, 3, 239, 147, 187, 55, 10, + 1, 215, 177, 10, 1, 216, 123, 3, 5, 206, 164, 10, 1, 216, 123, 3, 215, + 252, 10, 1, 216, 123, 3, 70, 56, 10, 1, 216, 123, 3, 5, 206, 165, 56, 10, + 1, 216, 123, 3, 70, 248, 126, 25, 70, 55, 10, 1, 216, 123, 3, 120, 187, + 55, 10, 1, 230, 155, 10, 1, 216, 123, 3, 239, 147, 187, 55, 10, 1, 214, + 162, 3, 70, 248, 126, 25, 70, 55, 10, 1, 214, 162, 3, 126, 187, 56, 10, + 1, 214, 162, 3, 126, 187, 248, 126, 25, 126, 187, 55, 10, 1, 215, 29, 3, + 120, 187, 56, 10, 1, 215, 29, 3, 126, 187, 55, 10, 1, 209, 252, 3, 126, + 187, 55, 10, 1, 251, 60, 3, 126, 187, 55, 10, 1, 243, 84, 240, 47, 10, 1, + 240, 48, 3, 70, 224, 5, 56, 10, 1, 240, 48, 3, 70, 56, 10, 1, 206, 48, + 10, 1, 240, 48, 3, 126, 187, 56, 10, 1, 219, 14, 10, 1, 217, 120, 3, 70, + 55, 10, 1, 217, 120, 3, 126, 187, 55, 10, 1, 229, 189, 10, 1, 210, 169, + 230, 22, 10, 1, 230, 23, 3, 215, 252, 10, 1, 230, 23, 3, 70, 55, 10, 1, + 222, 205, 10, 1, 230, 23, 3, 126, 187, 56, 10, 1, 238, 251, 10, 1, 238, + 252, 3, 215, 252, 10, 1, 222, 126, 10, 1, 238, 252, 3, 120, 187, 56, 10, + 1, 237, 217, 10, 1, 238, 252, 3, 126, 187, 55, 10, 1, 228, 29, 3, 5, 206, + 164, 10, 1, 228, 29, 3, 70, 55, 10, 1, 228, 29, 3, 126, 187, 55, 10, 1, + 228, 29, 3, 126, 187, 56, 10, 1, 221, 179, 3, 70, 56, 10, 1, 221, 179, + 238, 85, 10, 1, 215, 230, 10, 1, 221, 179, 3, 215, 252, 10, 1, 221, 179, + 3, 126, 187, 55, 10, 1, 237, 44, 243, 109, 10, 1, 209, 192, 3, 70, 55, + 10, 1, 237, 44, 3, 89, 55, 10, 1, 237, 44, 238, 36, 10, 1, 237, 44, 238, + 37, 3, 237, 128, 55, 10, 1, 209, 170, 225, 99, 238, 36, 10, 1, 204, 71, + 3, 215, 252, 10, 1, 229, 76, 220, 73, 10, 1, 220, 73, 10, 1, 68, 10, 1, + 202, 213, 10, 1, 229, 76, 202, 213, 10, 1, 204, 71, 3, 120, 187, 55, 10, + 1, 206, 55, 10, 1, 240, 75, 203, 47, 10, 1, 89, 3, 209, 248, 10, 1, 89, + 3, 5, 206, 164, 10, 1, 204, 71, 3, 70, 55, 10, 1, 74, 10, 1, 89, 3, 126, + 187, 56, 10, 1, 89, 248, 223, 10, 1, 89, 248, 224, 3, 237, 128, 55, 10, + 239, 102, 211, 61, 10, 1, 251, 109, 10, 5, 138, 32, 215, 29, 3, 228, 29, + 3, 137, 225, 129, 10, 5, 138, 32, 217, 120, 3, 228, 29, 3, 137, 225, 129, + 10, 5, 138, 83, 81, 18, 10, 5, 138, 228, 29, 251, 30, 10, 5, 138, 230, + 158, 10, 5, 138, 126, 243, 83, 10, 5, 138, 214, 161, 10, 241, 84, 76, + 250, 7, 10, 211, 90, 76, 215, 143, 241, 123, 236, 227, 10, 5, 138, 215, + 189, 202, 84, 10, 5, 138, 206, 219, 216, 142, 202, 84, 10, 5, 138, 243, + 84, 237, 65, 76, 229, 140, 10, 5, 138, 83, 64, 18, 10, 5, 124, 214, 161, + 10, 5, 138, 225, 165, 10, 5, 204, 70, 10, 5, 203, 47, 10, 5, 138, 203, + 47, 10, 5, 138, 221, 178, 10, 218, 97, 76, 215, 14, 10, 241, 94, 246, + 218, 124, 211, 61, 10, 241, 94, 246, 218, 138, 211, 61, 10, 215, 189, + 138, 211, 62, 3, 240, 8, 246, 217, 10, 5, 124, 225, 5, 10, 1, 244, 185, + 3, 230, 239, 206, 164, 10, 1, 216, 123, 3, 230, 239, 206, 164, 240, 202, + 250, 140, 17, 202, 84, 240, 202, 250, 140, 17, 105, 240, 202, 250, 140, + 17, 108, 240, 202, 250, 140, 17, 147, 240, 202, 250, 140, 17, 149, 240, + 202, 250, 140, 17, 170, 240, 202, 250, 140, 17, 195, 240, 202, 250, 140, + 17, 213, 111, 240, 202, 250, 140, 17, 199, 240, 202, 250, 140, 17, 222, + 63, 10, 1, 213, 40, 3, 70, 56, 10, 1, 244, 208, 3, 70, 56, 10, 1, 238, + 115, 3, 70, 56, 10, 2, 212, 123, 250, 235, 10, 2, 212, 123, 218, 27, 224, + 240, 10, 1, 237, 44, 3, 230, 239, 206, 164, 210, 89, 241, 84, 76, 219, + 88, 210, 89, 210, 195, 239, 102, 211, 61, 210, 89, 210, 248, 239, 102, + 211, 61, 210, 89, 210, 195, 245, 242, 210, 89, 210, 248, 245, 242, 210, + 89, 236, 106, 245, 242, 210, 89, 245, 243, 212, 68, 227, 222, 210, 89, + 245, 243, 212, 68, 216, 16, 210, 89, 210, 195, 245, 243, 212, 68, 227, + 222, 210, 89, 210, 248, 245, 243, 212, 68, 216, 16, 210, 89, 245, 186, + 210, 89, 237, 89, 220, 91, 210, 89, 237, 89, 224, 217, 210, 89, 237, 89, + 250, 61, 210, 89, 251, 146, 82, 210, 89, 1, 251, 35, 210, 89, 1, 210, + 199, 251, 35, 210, 89, 1, 248, 105, 210, 89, 1, 238, 241, 210, 89, 1, + 238, 242, 238, 219, 210, 89, 1, 244, 181, 210, 89, 1, 243, 84, 244, 182, + 215, 246, 210, 89, 1, 237, 67, 210, 89, 1, 204, 70, 210, 89, 1, 202, 107, + 210, 89, 1, 237, 19, 210, 89, 1, 209, 128, 210, 89, 1, 209, 129, 238, + 219, 210, 89, 1, 202, 200, 210, 89, 1, 202, 201, 237, 67, 210, 89, 1, + 229, 250, 210, 89, 1, 228, 27, 210, 89, 1, 224, 112, 210, 89, 1, 221, 40, + 210, 89, 1, 213, 136, 210, 89, 1, 46, 213, 136, 210, 89, 1, 74, 210, 89, + 1, 219, 34, 210, 89, 1, 216, 73, 219, 34, 210, 89, 1, 215, 26, 210, 89, + 1, 217, 113, 210, 89, 1, 215, 246, 210, 89, 1, 212, 255, 210, 89, 1, 209, + 201, 210, 89, 1, 218, 231, 248, 92, 210, 89, 1, 218, 231, 238, 112, 210, + 89, 1, 218, 231, 243, 252, 210, 89, 217, 192, 55, 210, 89, 217, 192, 56, + 210, 89, 217, 192, 242, 82, 210, 89, 202, 11, 55, 210, 89, 202, 11, 56, + 210, 89, 202, 11, 242, 82, 210, 89, 216, 161, 55, 210, 89, 216, 161, 56, + 210, 89, 242, 83, 202, 18, 236, 105, 210, 89, 242, 83, 202, 18, 250, 211, + 210, 89, 237, 70, 55, 210, 89, 237, 70, 56, 210, 89, 237, 69, 242, 82, + 210, 89, 241, 11, 55, 210, 89, 241, 11, 56, 210, 89, 215, 109, 210, 89, + 240, 41, 243, 85, 210, 89, 217, 25, 210, 89, 215, 137, 210, 89, 120, 80, + 187, 55, 210, 89, 120, 80, 187, 56, 210, 89, 126, 187, 55, 210, 89, 126, + 187, 56, 210, 89, 220, 89, 227, 115, 55, 210, 89, 220, 89, 227, 115, 56, + 210, 89, 223, 194, 210, 89, 248, 222, 210, 89, 1, 212, 4, 202, 78, 210, + 89, 1, 212, 4, 229, 133, 210, 89, 1, 212, 4, 240, 60, 10, 1, 248, 139, 3, + 126, 187, 236, 55, 56, 10, 1, 248, 139, 3, 70, 248, 126, 25, 126, 187, + 55, 10, 1, 248, 139, 3, 126, 187, 218, 59, 177, 56, 10, 1, 248, 139, 3, + 126, 187, 218, 59, 177, 248, 126, 25, 120, 187, 55, 10, 1, 248, 139, 3, + 120, 187, 248, 126, 25, 70, 55, 10, 1, 248, 139, 3, 230, 239, 5, 206, + 165, 56, 10, 1, 248, 139, 3, 5, 206, 164, 10, 1, 151, 3, 120, 187, 55, + 10, 1, 151, 3, 126, 187, 218, 59, 177, 56, 10, 1, 244, 185, 3, 120, 187, + 205, 244, 248, 126, 25, 5, 209, 251, 10, 1, 244, 185, 3, 230, 239, 5, + 206, 165, 56, 10, 1, 216, 123, 3, 95, 10, 1, 214, 162, 3, 239, 147, 187, + 55, 10, 1, 251, 60, 3, 120, 187, 55, 10, 1, 251, 60, 3, 126, 187, 218, + 59, 183, 55, 10, 1, 251, 60, 3, 120, 187, 205, 244, 55, 10, 1, 240, 48, + 3, 120, 187, 56, 10, 1, 240, 48, 3, 126, 187, 218, 59, 177, 56, 10, 1, + 229, 190, 3, 70, 55, 10, 1, 229, 190, 3, 126, 187, 55, 10, 1, 229, 190, + 3, 126, 187, 218, 59, 177, 56, 10, 1, 83, 3, 70, 55, 10, 1, 83, 3, 70, + 56, 10, 1, 221, 179, 3, 120, 187, 56, 10, 1, 221, 179, 3, 5, 209, 251, + 10, 1, 221, 179, 3, 5, 206, 164, 10, 1, 228, 29, 3, 142, 10, 1, 216, 123, + 3, 120, 187, 205, 244, 55, 10, 1, 216, 123, 3, 237, 128, 55, 10, 1, 214, + 162, 3, 120, 187, 205, 244, 55, 10, 1, 151, 3, 5, 10, 1, 209, 252, 56, + 10, 1, 151, 3, 5, 10, 1, 209, 252, 25, 120, 243, 83, 10, 1, 214, 162, 3, + 5, 10, 1, 209, 252, 25, 120, 243, 83, 10, 1, 216, 123, 3, 5, 10, 1, 209, + 252, 25, 120, 243, 83, 10, 1, 151, 3, 5, 10, 1, 209, 252, 55, 10, 1, 137, + 3, 240, 202, 250, 140, 17, 120, 55, 10, 1, 137, 3, 240, 202, 250, 140, + 17, 126, 55, 10, 1, 240, 75, 89, 3, 240, 202, 250, 140, 17, 120, 55, 10, + 1, 240, 75, 89, 3, 240, 202, 250, 140, 17, 126, 55, 10, 1, 240, 75, 89, + 3, 240, 202, 250, 140, 17, 239, 147, 56, 10, 1, 204, 71, 3, 240, 202, + 250, 140, 17, 120, 55, 10, 1, 204, 71, 3, 240, 202, 250, 140, 17, 126, + 55, 10, 1, 89, 248, 224, 3, 240, 202, 250, 140, 17, 120, 55, 10, 1, 89, + 248, 224, 3, 240, 202, 250, 140, 17, 126, 55, 10, 1, 151, 3, 240, 202, + 250, 140, 17, 239, 147, 56, 10, 1, 214, 162, 3, 240, 202, 250, 140, 17, + 239, 147, 55, 10, 1, 214, 162, 3, 230, 239, 206, 164, 10, 1, 230, 23, 3, + 120, 187, 55, 209, 105, 1, 237, 157, 209, 105, 1, 213, 49, 209, 105, 1, + 221, 177, 209, 105, 1, 216, 216, 209, 105, 1, 249, 30, 209, 105, 1, 227, + 158, 209, 105, 1, 230, 37, 209, 105, 1, 251, 19, 209, 105, 1, 206, 84, + 209, 105, 1, 225, 4, 209, 105, 1, 240, 106, 209, 105, 1, 243, 255, 209, + 105, 1, 209, 107, 209, 105, 1, 228, 109, 209, 105, 1, 239, 4, 209, 105, + 1, 238, 42, 209, 105, 1, 214, 160, 209, 105, 1, 244, 136, 209, 105, 1, + 202, 98, 209, 105, 1, 209, 202, 209, 105, 1, 203, 110, 209, 105, 1, 219, + 47, 209, 105, 1, 230, 166, 209, 105, 1, 246, 173, 209, 105, 1, 207, 240, + 209, 105, 1, 237, 11, 209, 105, 1, 229, 143, 209, 105, 1, 209, 106, 209, + 105, 1, 202, 114, 209, 105, 1, 213, 38, 209, 105, 1, 215, 32, 209, 105, + 1, 244, 210, 209, 105, 1, 135, 209, 105, 1, 202, 17, 209, 105, 1, 251, + 56, 209, 105, 1, 238, 113, 209, 105, 1, 217, 123, 209, 105, 1, 204, 109, + 209, 105, 251, 148, 209, 105, 251, 246, 209, 105, 235, 165, 209, 105, + 241, 160, 209, 105, 207, 32, 209, 105, 220, 17, 209, 105, 241, 170, 209, + 105, 240, 193, 209, 105, 220, 88, 209, 105, 220, 96, 209, 105, 210, 222, + 209, 105, 1, 223, 106, 221, 255, 17, 202, 84, 221, 255, 17, 105, 221, + 255, 17, 108, 221, 255, 17, 147, 221, 255, 17, 149, 221, 255, 17, 170, + 221, 255, 17, 195, 221, 255, 17, 213, 111, 221, 255, 17, 199, 221, 255, + 17, 222, 63, 221, 255, 1, 63, 221, 255, 1, 241, 161, 221, 255, 1, 75, + 221, 255, 1, 74, 221, 255, 1, 68, 221, 255, 1, 220, 18, 221, 255, 1, 78, + 221, 255, 1, 244, 199, 221, 255, 1, 223, 163, 221, 255, 1, 249, 32, 221, + 255, 1, 185, 221, 255, 1, 210, 22, 221, 255, 1, 230, 181, 221, 255, 1, + 246, 199, 221, 255, 1, 244, 212, 221, 255, 1, 216, 220, 221, 255, 1, 215, + 185, 221, 255, 1, 215, 36, 221, 255, 1, 238, 207, 221, 255, 1, 240, 108, + 221, 255, 1, 173, 221, 255, 1, 228, 113, 221, 255, 1, 223, 111, 203, 252, + 221, 255, 1, 192, 221, 255, 1, 221, 11, 221, 255, 1, 201, 201, 221, 255, + 1, 152, 221, 255, 1, 204, 111, 221, 255, 1, 198, 221, 255, 1, 221, 12, + 203, 252, 221, 255, 1, 230, 93, 230, 181, 221, 255, 1, 230, 93, 246, 199, + 221, 255, 1, 230, 93, 216, 220, 221, 255, 39, 212, 228, 138, 208, 161, + 221, 255, 39, 212, 228, 124, 208, 161, 221, 255, 39, 212, 228, 215, 245, + 208, 161, 221, 255, 39, 163, 244, 19, 208, 161, 221, 255, 39, 163, 138, + 208, 161, 221, 255, 39, 163, 124, 208, 161, 221, 255, 39, 163, 215, 245, + 208, 161, 221, 255, 39, 223, 71, 82, 221, 255, 39, 52, 70, 55, 221, 255, + 138, 143, 250, 160, 221, 255, 124, 143, 250, 160, 221, 255, 16, 220, 19, + 244, 33, 221, 255, 16, 238, 206, 221, 255, 245, 233, 221, 255, 240, 212, + 82, 221, 255, 228, 84, 214, 252, 1, 251, 37, 214, 252, 1, 248, 51, 214, + 252, 1, 238, 240, 214, 252, 1, 244, 183, 214, 252, 1, 230, 192, 214, 252, + 1, 249, 30, 214, 252, 1, 202, 87, 214, 252, 1, 230, 201, 214, 252, 1, + 208, 200, 214, 252, 1, 202, 182, 214, 252, 1, 230, 38, 214, 252, 1, 228, + 106, 214, 252, 1, 224, 112, 214, 252, 1, 221, 40, 214, 252, 1, 212, 121, + 214, 252, 1, 231, 49, 214, 252, 1, 240, 26, 214, 252, 1, 208, 18, 214, + 252, 1, 217, 44, 214, 252, 1, 215, 246, 214, 252, 1, 213, 66, 214, 252, + 1, 210, 17, 214, 252, 131, 231, 49, 214, 252, 131, 231, 48, 214, 252, + 131, 220, 84, 214, 252, 131, 244, 197, 214, 252, 65, 1, 241, 42, 202, + 182, 214, 252, 131, 241, 42, 202, 182, 214, 252, 22, 2, 163, 74, 214, + 252, 22, 2, 74, 214, 252, 22, 2, 219, 197, 252, 25, 214, 252, 22, 2, 163, + 252, 25, 214, 252, 22, 2, 252, 25, 214, 252, 22, 2, 219, 197, 63, 214, + 252, 22, 2, 163, 63, 214, 252, 22, 2, 63, 214, 252, 65, 1, 212, 228, 63, + 214, 252, 22, 2, 212, 228, 63, 214, 252, 22, 2, 163, 68, 214, 252, 22, 2, + 68, 214, 252, 65, 1, 75, 214, 252, 22, 2, 163, 75, 214, 252, 22, 2, 75, + 214, 252, 22, 2, 78, 214, 252, 22, 2, 210, 222, 214, 252, 131, 222, 223, + 214, 252, 217, 179, 222, 223, 214, 252, 217, 179, 251, 83, 214, 252, 217, + 179, 250, 222, 214, 252, 217, 179, 248, 202, 214, 252, 217, 179, 250, 44, + 214, 252, 217, 179, 212, 243, 214, 252, 251, 146, 82, 214, 252, 217, 179, + 224, 250, 217, 80, 214, 252, 217, 179, 202, 25, 214, 252, 217, 179, 217, + 80, 214, 252, 217, 179, 202, 113, 214, 252, 217, 179, 207, 170, 214, 252, + 217, 179, 250, 111, 214, 252, 217, 179, 212, 8, 225, 77, 214, 252, 217, + 179, 250, 206, 225, 118, 1, 237, 134, 225, 118, 1, 251, 232, 225, 118, 1, + 251, 81, 225, 118, 1, 251, 122, 225, 118, 1, 251, 73, 225, 118, 1, 206, + 184, 225, 118, 1, 250, 1, 225, 118, 1, 230, 201, 225, 118, 1, 250, 41, + 225, 118, 1, 251, 42, 225, 118, 1, 251, 47, 225, 118, 1, 251, 39, 225, + 118, 1, 250, 247, 225, 118, 1, 250, 231, 225, 118, 1, 250, 81, 225, 118, + 1, 231, 49, 225, 118, 1, 250, 175, 225, 118, 1, 250, 51, 225, 118, 1, + 250, 148, 225, 118, 1, 250, 144, 225, 118, 1, 250, 75, 225, 118, 1, 250, + 49, 225, 118, 1, 242, 18, 225, 118, 1, 230, 30, 225, 118, 1, 251, 59, + 225, 118, 251, 87, 82, 225, 118, 205, 187, 82, 225, 118, 238, 179, 82, + 225, 118, 217, 178, 10, 1, 248, 139, 3, 5, 206, 165, 56, 10, 1, 248, 139, + 3, 237, 128, 55, 10, 1, 184, 3, 120, 187, 55, 10, 1, 209, 252, 3, 120, + 187, 55, 10, 1, 240, 48, 3, 70, 248, 126, 25, 126, 187, 55, 10, 1, 217, + 120, 3, 70, 56, 10, 1, 228, 29, 3, 52, 142, 10, 1, 83, 3, 126, 187, 55, + 10, 1, 89, 3, 120, 187, 248, 126, 25, 237, 128, 55, 10, 1, 89, 3, 120, + 187, 248, 126, 25, 70, 55, 10, 1, 216, 123, 3, 227, 14, 10, 1, 204, 71, + 3, 70, 204, 4, 10, 1, 215, 215, 203, 47, 10, 1, 124, 251, 30, 10, 1, 244, + 185, 3, 126, 187, 56, 10, 1, 215, 29, 3, 126, 187, 56, 10, 1, 238, 252, + 3, 230, 239, 95, 10, 1, 211, 53, 204, 70, 10, 1, 202, 108, 3, 230, 239, + 206, 165, 55, 10, 1, 251, 60, 3, 126, 187, 56, 10, 1, 230, 23, 3, 70, 56, + 10, 207, 174, 244, 173, 56, 10, 245, 93, 240, 71, 10, 245, 93, 244, 172, + 10, 245, 93, 229, 229, 10, 245, 93, 240, 69, 10, 245, 93, 244, 170, 10, + 245, 93, 229, 227, 10, 143, 118, 70, 55, 10, 143, 120, 187, 55, 10, 143, + 227, 15, 55, 10, 143, 118, 70, 56, 10, 143, 120, 187, 56, 10, 143, 227, + 15, 56, 10, 171, 240, 69, 10, 171, 244, 170, 10, 171, 229, 227, 10, 5, + 138, 204, 70, 10, 240, 72, 3, 215, 252, 10, 240, 72, 3, 70, 55, 10, 229, + 230, 3, 70, 56, 10, 49, 250, 95, 55, 10, 50, 250, 95, 55, 10, 49, 250, + 95, 56, 10, 50, 250, 95, 56, 10, 52, 50, 250, 95, 55, 10, 52, 50, 250, + 95, 87, 3, 243, 85, 10, 50, 250, 95, 87, 3, 243, 85, 10, 244, 173, 3, + 243, 85, 10, 131, 212, 154, 221, 179, 238, 85, 92, 2, 230, 239, 247, 52, + 92, 2, 247, 52, 92, 2, 250, 180, 92, 2, 205, 199, 92, 1, 212, 228, 63, + 92, 1, 63, 92, 1, 252, 25, 92, 1, 75, 92, 1, 231, 83, 92, 1, 68, 92, 1, + 206, 178, 92, 1, 125, 146, 92, 1, 125, 159, 92, 1, 247, 55, 74, 92, 1, + 212, 228, 74, 92, 1, 74, 92, 1, 251, 64, 92, 1, 247, 55, 78, 92, 1, 212, + 228, 78, 92, 1, 78, 92, 1, 250, 34, 92, 1, 173, 92, 1, 229, 144, 92, 1, + 239, 8, 92, 1, 238, 119, 92, 1, 222, 203, 92, 1, 247, 92, 92, 1, 246, + 199, 92, 1, 230, 181, 92, 1, 230, 149, 92, 1, 221, 11, 92, 1, 207, 241, + 92, 1, 207, 229, 92, 1, 244, 120, 92, 1, 244, 104, 92, 1, 221, 227, 92, + 1, 210, 22, 92, 1, 209, 108, 92, 1, 244, 212, 92, 1, 244, 1, 92, 1, 201, + 201, 92, 1, 221, 209, 92, 1, 185, 92, 1, 218, 208, 92, 1, 249, 32, 92, 1, + 248, 98, 92, 1, 192, 92, 1, 198, 92, 1, 216, 220, 92, 1, 215, 185, 92, 1, + 228, 113, 92, 1, 227, 77, 92, 1, 227, 68, 92, 1, 206, 86, 92, 1, 213, 90, + 92, 1, 211, 164, 92, 1, 215, 36, 92, 1, 152, 92, 22, 2, 220, 73, 92, 22, + 2, 220, 16, 92, 2, 221, 51, 92, 2, 250, 17, 92, 22, 2, 252, 25, 92, 22, + 2, 75, 92, 22, 2, 231, 83, 92, 22, 2, 68, 92, 22, 2, 206, 178, 92, 22, 2, + 125, 146, 92, 22, 2, 125, 215, 186, 92, 22, 2, 247, 55, 74, 92, 22, 2, + 212, 228, 74, 92, 22, 2, 74, 92, 22, 2, 251, 64, 92, 22, 2, 247, 55, 78, + 92, 22, 2, 212, 228, 78, 92, 22, 2, 78, 92, 22, 2, 250, 34, 92, 2, 205, + 204, 92, 22, 2, 217, 229, 74, 92, 22, 2, 250, 13, 92, 220, 39, 92, 211, + 42, 2, 207, 26, 92, 211, 42, 2, 250, 182, 92, 237, 254, 251, 138, 92, + 251, 126, 251, 138, 92, 22, 2, 247, 55, 163, 74, 92, 22, 2, 207, 24, 92, + 22, 2, 206, 177, 92, 1, 217, 126, 92, 1, 229, 125, 92, 1, 238, 94, 92, 1, + 202, 116, 92, 1, 244, 109, 92, 1, 216, 61, 92, 1, 240, 108, 92, 1, 202, + 168, 92, 1, 125, 215, 186, 92, 1, 125, 227, 78, 92, 22, 2, 125, 159, 92, + 22, 2, 125, 227, 78, 92, 244, 166, 92, 52, 244, 166, 92, 17, 202, 84, 92, + 17, 105, 92, 17, 108, 92, 17, 147, 92, 17, 149, 92, 17, 170, 92, 17, 195, + 92, 17, 213, 111, 92, 17, 199, 92, 17, 222, 63, 92, 251, 146, 54, 92, 2, + 138, 211, 227, 243, 85, 92, 1, 247, 55, 63, 92, 1, 220, 73, 92, 1, 220, + 16, 92, 1, 250, 13, 92, 1, 207, 24, 92, 1, 206, 177, 92, 1, 225, 82, 244, + 120, 92, 1, 202, 80, 92, 1, 79, 198, 92, 1, 238, 155, 92, 1, 230, 129, + 92, 1, 238, 45, 211, 61, 92, 1, 244, 110, 92, 1, 248, 198, 179, 250, 209, + 179, 2, 247, 52, 179, 2, 250, 180, 179, 2, 205, 199, 179, 1, 63, 179, 1, + 252, 25, 179, 1, 75, 179, 1, 231, 83, 179, 1, 68, 179, 1, 206, 178, 179, + 1, 125, 146, 179, 1, 125, 159, 179, 1, 74, 179, 1, 251, 64, 179, 1, 78, + 179, 1, 250, 34, 179, 1, 173, 179, 1, 229, 144, 179, 1, 239, 8, 179, 1, + 238, 119, 179, 1, 222, 203, 179, 1, 247, 92, 179, 1, 246, 199, 179, 1, + 230, 181, 179, 1, 230, 149, 179, 1, 221, 11, 179, 1, 207, 241, 179, 1, + 207, 229, 179, 1, 244, 120, 179, 1, 244, 104, 179, 1, 221, 227, 179, 1, + 210, 22, 179, 1, 209, 108, 179, 1, 244, 212, 179, 1, 244, 1, 179, 1, 201, + 201, 179, 1, 185, 179, 1, 218, 208, 179, 1, 249, 32, 179, 1, 248, 98, + 179, 1, 192, 179, 1, 198, 179, 1, 216, 220, 179, 1, 228, 113, 179, 1, + 213, 90, 179, 1, 211, 164, 179, 1, 215, 36, 179, 1, 152, 179, 2, 221, 51, + 179, 2, 250, 17, 179, 22, 2, 252, 25, 179, 22, 2, 75, 179, 22, 2, 231, + 83, 179, 22, 2, 68, 179, 22, 2, 206, 178, 179, 22, 2, 125, 146, 179, 22, + 2, 125, 215, 186, 179, 22, 2, 74, 179, 22, 2, 251, 64, 179, 22, 2, 78, + 179, 22, 2, 250, 34, 179, 2, 205, 204, 179, 1, 229, 135, 210, 22, 179, + 250, 35, 227, 196, 82, 179, 1, 215, 185, 179, 1, 216, 61, 179, 1, 202, + 168, 179, 1, 125, 215, 186, 179, 1, 125, 227, 78, 179, 22, 2, 125, 159, + 179, 22, 2, 125, 227, 78, 179, 17, 202, 84, 179, 17, 105, 179, 17, 108, + 179, 17, 147, 179, 17, 149, 179, 17, 170, 179, 17, 195, 179, 17, 213, + 111, 179, 17, 199, 179, 17, 222, 63, 179, 1, 216, 221, 3, 101, 243, 227, + 179, 1, 216, 221, 3, 226, 251, 243, 227, 179, 215, 120, 82, 179, 215, + 120, 54, 179, 245, 92, 221, 43, 105, 179, 245, 92, 221, 43, 108, 179, + 245, 92, 221, 43, 147, 179, 245, 92, 221, 43, 149, 179, 245, 92, 221, 43, + 118, 227, 180, 209, 98, 209, 93, 244, 31, 179, 245, 92, 244, 32, 212, 82, + 179, 230, 202, 179, 238, 231, 82, 237, 198, 2, 251, 121, 248, 66, 237, + 198, 2, 248, 66, 237, 198, 2, 205, 199, 237, 198, 1, 63, 237, 198, 1, + 252, 25, 237, 198, 1, 75, 237, 198, 1, 231, 83, 237, 198, 1, 68, 237, + 198, 1, 206, 178, 237, 198, 1, 241, 161, 237, 198, 1, 251, 64, 237, 198, + 1, 220, 18, 237, 198, 1, 250, 34, 237, 198, 1, 173, 237, 198, 1, 229, + 144, 237, 198, 1, 239, 8, 237, 198, 1, 238, 119, 237, 198, 1, 222, 203, + 237, 198, 1, 247, 92, 237, 198, 1, 246, 199, 237, 198, 1, 230, 181, 237, + 198, 1, 230, 149, 237, 198, 1, 221, 11, 237, 198, 1, 207, 241, 237, 198, + 1, 207, 229, 237, 198, 1, 244, 120, 237, 198, 1, 244, 104, 237, 198, 1, + 221, 227, 237, 198, 1, 210, 22, 237, 198, 1, 209, 108, 237, 198, 1, 244, + 212, 237, 198, 1, 244, 1, 237, 198, 1, 201, 201, 237, 198, 1, 185, 237, + 198, 1, 218, 208, 237, 198, 1, 249, 32, 237, 198, 1, 248, 98, 237, 198, + 1, 192, 237, 198, 1, 198, 237, 198, 1, 216, 220, 237, 198, 1, 228, 113, + 237, 198, 1, 227, 77, 237, 198, 1, 206, 86, 237, 198, 1, 213, 90, 237, + 198, 1, 215, 36, 237, 198, 1, 152, 237, 198, 2, 221, 51, 237, 198, 22, 2, + 252, 25, 237, 198, 22, 2, 75, 237, 198, 22, 2, 231, 83, 237, 198, 22, 2, + 68, 237, 198, 22, 2, 206, 178, 237, 198, 22, 2, 241, 161, 237, 198, 22, + 2, 251, 64, 237, 198, 22, 2, 220, 18, 237, 198, 22, 2, 250, 34, 237, 198, + 2, 205, 204, 237, 198, 2, 207, 28, 237, 198, 1, 229, 125, 237, 198, 1, + 238, 94, 237, 198, 1, 202, 116, 237, 198, 1, 215, 185, 237, 198, 1, 240, + 108, 237, 198, 17, 202, 84, 237, 198, 17, 105, 237, 198, 17, 108, 237, + 198, 17, 147, 237, 198, 17, 149, 237, 198, 17, 170, 237, 198, 17, 195, + 237, 198, 17, 213, 111, 237, 198, 17, 199, 237, 198, 17, 222, 63, 237, + 198, 208, 208, 237, 198, 251, 120, 237, 198, 230, 222, 237, 198, 206, + 206, 237, 198, 241, 130, 220, 23, 237, 198, 2, 203, 85, 237, 213, 2, 247, + 52, 237, 213, 2, 250, 180, 237, 213, 2, 205, 199, 237, 213, 1, 63, 237, + 213, 1, 252, 25, 237, 213, 1, 75, 237, 213, 1, 231, 83, 237, 213, 1, 68, + 237, 213, 1, 206, 178, 237, 213, 1, 125, 146, 237, 213, 1, 125, 159, 237, + 213, 22, 247, 55, 74, 237, 213, 1, 74, 237, 213, 1, 251, 64, 237, 213, + 22, 247, 55, 78, 237, 213, 1, 78, 237, 213, 1, 250, 34, 237, 213, 1, 173, + 237, 213, 1, 229, 144, 237, 213, 1, 239, 8, 237, 213, 1, 238, 119, 237, + 213, 1, 222, 203, 237, 213, 1, 247, 92, 237, 213, 1, 246, 199, 237, 213, + 1, 230, 181, 237, 213, 1, 230, 149, 237, 213, 1, 221, 11, 237, 213, 1, + 207, 241, 237, 213, 1, 207, 229, 237, 213, 1, 244, 120, 237, 213, 1, 244, + 104, 237, 213, 1, 221, 227, 237, 213, 1, 210, 22, 237, 213, 1, 209, 108, + 237, 213, 1, 244, 212, 237, 213, 1, 244, 1, 237, 213, 1, 201, 201, 237, + 213, 1, 185, 237, 213, 1, 218, 208, 237, 213, 1, 249, 32, 237, 213, 1, + 248, 98, 237, 213, 1, 192, 237, 213, 1, 198, 237, 213, 1, 216, 220, 237, + 213, 1, 228, 113, 237, 213, 1, 227, 77, 237, 213, 1, 206, 86, 237, 213, + 1, 213, 90, 237, 213, 1, 211, 164, 237, 213, 1, 215, 36, 237, 213, 1, + 152, 237, 213, 2, 221, 51, 237, 213, 2, 250, 17, 237, 213, 22, 2, 252, + 25, 237, 213, 22, 2, 75, 237, 213, 22, 2, 231, 83, 237, 213, 22, 2, 68, + 237, 213, 22, 2, 206, 178, 237, 213, 22, 2, 125, 146, 237, 213, 22, 2, + 125, 215, 186, 237, 213, 22, 2, 247, 55, 74, 237, 213, 22, 2, 74, 237, + 213, 22, 2, 251, 64, 237, 213, 22, 2, 247, 55, 78, 237, 213, 22, 2, 78, + 237, 213, 22, 2, 250, 34, 237, 213, 2, 205, 204, 237, 213, 220, 39, 237, + 213, 1, 125, 215, 186, 237, 213, 1, 125, 227, 78, 237, 213, 22, 2, 125, + 159, 237, 213, 22, 2, 125, 227, 78, 237, 213, 17, 202, 84, 237, 213, 17, + 105, 237, 213, 17, 108, 237, 213, 17, 147, 237, 213, 17, 149, 237, 213, + 17, 170, 237, 213, 17, 195, 237, 213, 17, 213, 111, 237, 213, 17, 199, + 237, 213, 17, 222, 63, 237, 213, 251, 146, 54, 237, 213, 215, 120, 54, + 237, 213, 1, 202, 80, 193, 2, 247, 52, 193, 2, 250, 180, 193, 2, 205, + 199, 193, 1, 63, 193, 1, 252, 25, 193, 1, 75, 193, 1, 231, 83, 193, 1, + 68, 193, 1, 206, 178, 193, 1, 125, 146, 193, 1, 125, 159, 193, 1, 74, + 193, 1, 251, 64, 193, 1, 78, 193, 1, 250, 34, 193, 1, 173, 193, 1, 229, + 144, 193, 1, 239, 8, 193, 1, 238, 119, 193, 1, 222, 203, 193, 1, 247, 92, + 193, 1, 246, 199, 193, 1, 230, 181, 193, 1, 230, 149, 193, 1, 221, 11, + 193, 1, 207, 241, 193, 1, 207, 229, 193, 1, 244, 120, 193, 1, 244, 104, + 193, 1, 221, 227, 193, 1, 210, 22, 193, 1, 209, 108, 193, 1, 244, 212, + 193, 1, 244, 1, 193, 1, 201, 201, 193, 1, 185, 193, 1, 218, 208, 193, 1, + 249, 32, 193, 1, 248, 98, 193, 1, 192, 193, 1, 198, 193, 1, 216, 220, + 193, 1, 228, 113, 193, 1, 227, 77, 193, 1, 206, 86, 193, 1, 213, 90, 193, + 1, 211, 164, 193, 1, 215, 36, 193, 1, 152, 193, 2, 221, 51, 193, 2, 250, + 17, 193, 22, 2, 252, 25, 193, 22, 2, 75, 193, 22, 2, 231, 83, 193, 22, 2, + 68, 193, 22, 2, 206, 178, 193, 22, 2, 125, 146, 193, 22, 2, 125, 215, + 186, 193, 22, 2, 74, 193, 22, 2, 251, 64, 193, 22, 2, 78, 193, 22, 2, + 250, 34, 193, 2, 205, 204, 193, 251, 65, 227, 196, 82, 193, 250, 35, 227, + 196, 82, 193, 1, 215, 185, 193, 1, 216, 61, 193, 1, 202, 168, 193, 1, + 125, 215, 186, 193, 1, 125, 227, 78, 193, 22, 2, 125, 159, 193, 22, 2, + 125, 227, 78, 193, 17, 202, 84, 193, 17, 105, 193, 17, 108, 193, 17, 147, + 193, 17, 149, 193, 17, 170, 193, 17, 195, 193, 17, 213, 111, 193, 17, + 199, 193, 17, 222, 63, 193, 230, 202, 193, 1, 204, 111, 193, 239, 138, + 118, 217, 55, 193, 239, 138, 118, 237, 137, 193, 239, 138, 126, 217, 53, + 193, 239, 138, 118, 212, 80, 193, 239, 138, 118, 241, 138, 193, 239, 138, + 126, 212, 79, 44, 2, 250, 180, 44, 2, 205, 199, 44, 1, 63, 44, 1, 252, + 25, 44, 1, 75, 44, 1, 231, 83, 44, 1, 68, 44, 1, 206, 178, 44, 1, 74, 44, + 1, 241, 161, 44, 1, 251, 64, 44, 1, 78, 44, 1, 220, 18, 44, 1, 250, 34, + 44, 1, 173, 44, 1, 222, 203, 44, 1, 247, 92, 44, 1, 230, 181, 44, 1, 221, + 11, 44, 1, 207, 241, 44, 1, 221, 227, 44, 1, 210, 22, 44, 1, 201, 201, + 44, 1, 221, 209, 44, 1, 185, 44, 1, 192, 44, 1, 198, 44, 1, 216, 220, 44, + 1, 215, 185, 44, 1, 228, 113, 44, 1, 227, 77, 44, 1, 227, 68, 44, 1, 206, + 86, 44, 1, 213, 90, 44, 1, 211, 164, 44, 1, 215, 36, 44, 1, 152, 44, 22, + 2, 252, 25, 44, 22, 2, 75, 44, 22, 2, 231, 83, 44, 22, 2, 68, 44, 22, 2, + 206, 178, 44, 22, 2, 74, 44, 22, 2, 241, 161, 44, 22, 2, 251, 64, 44, 22, + 2, 78, 44, 22, 2, 220, 18, 44, 22, 2, 250, 34, 44, 2, 205, 204, 44, 220, + 39, 44, 250, 35, 227, 196, 82, 44, 17, 202, 84, 44, 17, 105, 44, 17, 108, + 44, 17, 147, 44, 17, 149, 44, 17, 170, 44, 17, 195, 44, 17, 213, 111, 44, + 17, 199, 44, 17, 222, 63, 44, 42, 209, 152, 44, 42, 118, 236, 11, 44, 42, + 118, 209, 36, 44, 244, 133, 54, 44, 224, 38, 54, 44, 203, 50, 54, 44, + 244, 72, 54, 44, 245, 141, 54, 44, 250, 82, 87, 54, 44, 215, 120, 54, 44, + 42, 54, 175, 2, 39, 247, 53, 55, 175, 2, 247, 52, 175, 2, 250, 180, 175, + 2, 205, 199, 175, 1, 63, 175, 1, 252, 25, 175, 1, 75, 175, 1, 231, 83, + 175, 1, 68, 175, 1, 206, 178, 175, 1, 125, 146, 175, 1, 125, 159, 175, 1, + 74, 175, 1, 241, 161, 175, 1, 251, 64, 175, 1, 78, 175, 1, 220, 18, 175, + 1, 250, 34, 175, 1, 173, 175, 1, 229, 144, 175, 1, 239, 8, 175, 1, 238, + 119, 175, 1, 222, 203, 175, 1, 247, 92, 175, 1, 246, 199, 175, 1, 230, + 181, 175, 1, 230, 149, 175, 1, 221, 11, 175, 1, 207, 241, 175, 1, 207, + 229, 175, 1, 244, 120, 175, 1, 244, 104, 175, 1, 221, 227, 175, 1, 210, + 22, 175, 1, 209, 108, 175, 1, 244, 212, 175, 1, 244, 1, 175, 1, 201, 201, + 175, 1, 185, 175, 1, 218, 208, 175, 1, 249, 32, 175, 1, 248, 98, 175, 1, + 192, 175, 1, 198, 175, 1, 216, 220, 175, 1, 215, 185, 175, 1, 228, 113, + 175, 1, 227, 77, 175, 1, 227, 68, 175, 1, 206, 86, 175, 1, 213, 90, 175, + 1, 211, 164, 175, 1, 215, 36, 175, 1, 152, 175, 2, 250, 17, 175, 22, 2, + 252, 25, 175, 22, 2, 75, 175, 22, 2, 231, 83, 175, 22, 2, 68, 175, 22, 2, + 206, 178, 175, 22, 2, 125, 146, 175, 22, 2, 125, 215, 186, 175, 22, 2, + 74, 175, 22, 2, 241, 161, 175, 22, 2, 251, 64, 175, 22, 2, 78, 175, 22, + 2, 220, 18, 175, 22, 2, 250, 34, 175, 2, 205, 204, 175, 227, 196, 82, + 175, 251, 65, 227, 196, 82, 175, 1, 208, 20, 175, 1, 241, 255, 175, 1, + 215, 166, 175, 1, 125, 215, 186, 175, 1, 125, 227, 78, 175, 22, 2, 125, + 159, 175, 22, 2, 125, 227, 78, 175, 17, 202, 84, 175, 17, 105, 175, 17, + 108, 175, 17, 147, 175, 17, 149, 175, 17, 170, 175, 17, 195, 175, 17, + 213, 111, 175, 17, 199, 175, 17, 222, 63, 175, 239, 138, 17, 202, 85, 35, + 220, 77, 218, 15, 76, 149, 175, 239, 138, 17, 118, 35, 220, 77, 218, 15, + 76, 149, 175, 239, 138, 17, 120, 35, 220, 77, 218, 15, 76, 149, 175, 239, + 138, 17, 126, 35, 220, 77, 218, 15, 76, 149, 175, 239, 138, 17, 118, 35, + 240, 225, 218, 15, 76, 149, 175, 239, 138, 17, 120, 35, 240, 225, 218, + 15, 76, 149, 175, 239, 138, 17, 126, 35, 240, 225, 218, 15, 76, 149, 175, + 2, 207, 164, 200, 2, 247, 52, 200, 2, 250, 180, 200, 2, 205, 199, 200, 1, + 63, 200, 1, 252, 25, 200, 1, 75, 200, 1, 231, 83, 200, 1, 68, 200, 1, + 206, 178, 200, 1, 125, 146, 200, 1, 125, 159, 200, 1, 74, 200, 1, 241, + 161, 200, 1, 251, 64, 200, 1, 78, 200, 1, 220, 18, 200, 1, 250, 34, 200, + 1, 173, 200, 1, 229, 144, 200, 1, 239, 8, 200, 1, 238, 119, 200, 1, 222, + 203, 200, 1, 247, 92, 200, 1, 246, 199, 200, 1, 230, 181, 200, 1, 230, + 149, 200, 1, 221, 11, 200, 1, 207, 241, 200, 1, 207, 229, 200, 1, 244, + 120, 200, 1, 244, 104, 200, 1, 221, 227, 200, 1, 210, 22, 200, 1, 209, + 108, 200, 1, 244, 212, 200, 1, 244, 1, 200, 1, 201, 201, 200, 1, 185, + 200, 1, 218, 208, 200, 1, 249, 32, 200, 1, 248, 98, 200, 1, 192, 200, 1, + 198, 200, 1, 216, 220, 200, 1, 215, 185, 200, 1, 228, 113, 200, 1, 227, + 77, 200, 1, 206, 86, 200, 1, 213, 90, 200, 1, 211, 164, 200, 1, 215, 36, + 200, 1, 152, 200, 2, 221, 51, 200, 2, 250, 17, 200, 22, 2, 252, 25, 200, + 22, 2, 75, 200, 22, 2, 231, 83, 200, 22, 2, 68, 200, 22, 2, 206, 178, + 200, 22, 2, 125, 146, 200, 22, 2, 125, 215, 186, 200, 22, 2, 74, 200, 22, + 2, 241, 161, 200, 22, 2, 251, 64, 200, 22, 2, 78, 200, 22, 2, 220, 18, + 200, 22, 2, 250, 34, 200, 2, 205, 204, 200, 227, 196, 82, 200, 251, 65, + 227, 196, 82, 200, 1, 240, 108, 200, 1, 125, 215, 186, 200, 1, 125, 227, + 78, 200, 22, 2, 125, 159, 200, 22, 2, 125, 227, 78, 200, 17, 202, 84, + 200, 17, 105, 200, 17, 108, 200, 17, 147, 200, 17, 149, 200, 17, 170, + 200, 17, 195, 200, 17, 213, 111, 200, 17, 199, 200, 17, 222, 63, 200, 2, + 230, 135, 200, 2, 206, 222, 164, 2, 247, 52, 164, 2, 250, 180, 164, 2, + 205, 199, 164, 1, 63, 164, 1, 252, 25, 164, 1, 75, 164, 1, 231, 83, 164, + 1, 68, 164, 1, 206, 178, 164, 1, 125, 146, 164, 1, 125, 159, 164, 1, 74, + 164, 1, 241, 161, 164, 1, 251, 64, 164, 1, 78, 164, 1, 220, 18, 164, 1, + 250, 34, 164, 1, 173, 164, 1, 229, 144, 164, 1, 239, 8, 164, 1, 238, 119, + 164, 1, 222, 203, 164, 1, 247, 92, 164, 1, 246, 199, 164, 1, 230, 181, + 164, 1, 230, 149, 164, 1, 221, 11, 164, 1, 207, 241, 164, 1, 207, 229, + 164, 1, 244, 120, 164, 1, 244, 104, 164, 1, 221, 227, 164, 1, 210, 22, + 164, 1, 209, 108, 164, 1, 244, 212, 164, 1, 244, 1, 164, 1, 201, 201, + 164, 1, 221, 209, 164, 1, 185, 164, 1, 218, 208, 164, 1, 249, 32, 164, 1, + 248, 98, 164, 1, 192, 164, 1, 198, 164, 1, 216, 220, 164, 1, 215, 185, + 164, 1, 228, 113, 164, 1, 227, 77, 164, 1, 227, 68, 164, 1, 206, 86, 164, + 1, 213, 90, 164, 1, 211, 164, 164, 1, 215, 36, 164, 1, 152, 164, 1, 207, + 210, 164, 2, 250, 17, 164, 22, 2, 252, 25, 164, 22, 2, 75, 164, 22, 2, + 231, 83, 164, 22, 2, 68, 164, 22, 2, 206, 178, 164, 22, 2, 125, 146, 164, + 22, 2, 125, 215, 186, 164, 22, 2, 74, 164, 22, 2, 241, 161, 164, 22, 2, + 251, 64, 164, 22, 2, 78, 164, 22, 2, 220, 18, 164, 22, 2, 250, 34, 164, + 2, 205, 204, 164, 1, 70, 216, 97, 164, 250, 35, 227, 196, 82, 164, 1, + 250, 126, 231, 83, 164, 1, 125, 215, 186, 164, 1, 125, 227, 78, 164, 22, + 2, 125, 159, 164, 22, 2, 125, 227, 78, 164, 17, 202, 84, 164, 17, 105, + 164, 17, 108, 164, 17, 147, 164, 17, 149, 164, 17, 170, 164, 17, 195, + 164, 17, 213, 111, 164, 17, 199, 164, 17, 222, 63, 164, 42, 209, 152, + 164, 42, 118, 236, 11, 164, 42, 118, 209, 36, 164, 239, 138, 118, 217, + 55, 164, 239, 138, 118, 237, 137, 164, 239, 138, 126, 217, 53, 164, 244, + 138, 82, 164, 1, 246, 131, 221, 228, 164, 1, 246, 131, 223, 163, 164, 1, + 246, 131, 215, 186, 164, 1, 246, 131, 159, 164, 1, 246, 131, 227, 78, + 164, 1, 246, 131, 230, 54, 140, 2, 250, 179, 140, 2, 205, 198, 140, 1, + 250, 6, 140, 1, 251, 235, 140, 1, 251, 89, 140, 1, 251, 104, 140, 1, 230, + 191, 140, 1, 231, 82, 140, 1, 206, 169, 140, 1, 206, 172, 140, 1, 230, + 217, 140, 1, 230, 218, 140, 1, 231, 68, 140, 1, 231, 70, 140, 1, 240, + 194, 140, 1, 241, 156, 140, 1, 251, 49, 140, 1, 219, 187, 140, 1, 220, + 11, 140, 1, 250, 20, 140, 1, 251, 5, 229, 206, 140, 1, 225, 147, 229, + 206, 140, 1, 251, 5, 238, 210, 140, 1, 225, 147, 238, 210, 140, 1, 229, + 255, 223, 103, 140, 1, 214, 235, 238, 210, 140, 1, 251, 5, 247, 8, 140, + 1, 225, 147, 247, 8, 140, 1, 251, 5, 230, 164, 140, 1, 225, 147, 230, + 164, 140, 1, 210, 15, 223, 103, 140, 1, 210, 15, 214, 234, 223, 104, 140, + 1, 214, 235, 230, 164, 140, 1, 251, 5, 207, 237, 140, 1, 225, 147, 207, + 237, 140, 1, 251, 5, 244, 111, 140, 1, 225, 147, 244, 111, 140, 1, 223, + 191, 223, 58, 140, 1, 214, 235, 244, 111, 140, 1, 251, 5, 209, 195, 140, + 1, 225, 147, 209, 195, 140, 1, 251, 5, 244, 131, 140, 1, 225, 147, 244, + 131, 140, 1, 244, 162, 223, 58, 140, 1, 214, 235, 244, 131, 140, 1, 251, + 5, 219, 42, 140, 1, 225, 147, 219, 42, 140, 1, 251, 5, 248, 200, 140, 1, + 225, 147, 248, 200, 140, 1, 225, 62, 140, 1, 250, 241, 248, 200, 140, 1, + 203, 57, 140, 1, 216, 164, 140, 1, 244, 162, 227, 243, 140, 1, 206, 57, + 140, 1, 210, 15, 214, 207, 140, 1, 223, 191, 214, 207, 140, 1, 244, 162, + 214, 207, 140, 1, 237, 71, 140, 1, 223, 191, 227, 243, 140, 1, 240, 62, + 140, 2, 251, 38, 140, 22, 2, 251, 99, 140, 22, 2, 229, 169, 251, 106, + 140, 22, 2, 243, 200, 251, 106, 140, 22, 2, 229, 169, 230, 214, 140, 22, + 2, 243, 200, 230, 214, 140, 22, 2, 229, 169, 219, 167, 140, 22, 2, 243, + 200, 219, 167, 140, 22, 2, 238, 253, 140, 22, 2, 229, 11, 140, 22, 2, + 243, 200, 229, 11, 140, 22, 2, 229, 13, 244, 50, 140, 22, 2, 229, 12, + 237, 158, 251, 99, 140, 22, 2, 229, 12, 237, 158, 243, 200, 251, 99, 140, + 22, 2, 229, 12, 237, 158, 238, 209, 140, 22, 2, 238, 209, 140, 227, 89, + 17, 202, 84, 140, 227, 89, 17, 105, 140, 227, 89, 17, 108, 140, 227, 89, + 17, 147, 140, 227, 89, 17, 149, 140, 227, 89, 17, 170, 140, 227, 89, 17, + 195, 140, 227, 89, 17, 213, 111, 140, 227, 89, 17, 199, 140, 227, 89, 17, + 222, 63, 140, 22, 2, 243, 200, 238, 253, 140, 22, 2, 243, 200, 238, 209, + 140, 217, 179, 228, 194, 209, 103, 167, 229, 27, 230, 18, 209, 103, 167, + 229, 116, 229, 139, 209, 103, 167, 229, 116, 229, 108, 209, 103, 167, + 229, 116, 229, 103, 209, 103, 167, 229, 116, 229, 112, 209, 103, 167, + 229, 116, 216, 185, 209, 103, 167, 222, 129, 222, 116, 209, 103, 167, + 246, 117, 246, 188, 209, 103, 167, 246, 117, 246, 127, 209, 103, 167, + 246, 117, 246, 187, 209, 103, 167, 212, 14, 212, 13, 209, 103, 167, 246, + 117, 246, 113, 209, 103, 167, 202, 248, 202, 255, 209, 103, 167, 243, + 114, 246, 196, 209, 103, 167, 208, 173, 219, 53, 209, 103, 167, 209, 48, + 209, 97, 209, 103, 167, 209, 48, 223, 80, 209, 103, 167, 209, 48, 218, + 170, 209, 103, 167, 221, 192, 222, 230, 209, 103, 167, 243, 114, 244, 51, + 209, 103, 167, 208, 173, 209, 223, 209, 103, 167, 209, 48, 209, 16, 209, + 103, 167, 209, 48, 209, 104, 209, 103, 167, 209, 48, 209, 43, 209, 103, + 167, 221, 192, 221, 84, 209, 103, 167, 248, 24, 249, 0, 209, 103, 167, + 218, 70, 218, 98, 209, 103, 167, 218, 181, 218, 172, 209, 103, 167, 239, + 187, 240, 108, 209, 103, 167, 218, 181, 218, 201, 209, 103, 167, 239, + 187, 240, 81, 209, 103, 167, 218, 181, 214, 247, 209, 103, 167, 224, 83, + 192, 209, 103, 167, 202, 248, 203, 86, 209, 103, 167, 215, 228, 215, 144, + 209, 103, 167, 215, 145, 209, 103, 167, 227, 50, 227, 107, 209, 103, 167, + 226, 239, 209, 103, 167, 204, 1, 204, 106, 209, 103, 167, 212, 14, 215, + 6, 209, 103, 167, 212, 14, 215, 116, 209, 103, 167, 212, 14, 211, 9, 209, + 103, 167, 236, 137, 236, 233, 209, 103, 167, 227, 50, 246, 97, 209, 103, + 167, 158, 250, 223, 209, 103, 167, 236, 137, 221, 187, 209, 103, 167, + 219, 144, 209, 103, 167, 214, 229, 63, 209, 103, 167, 225, 141, 237, 125, + 209, 103, 167, 214, 229, 252, 25, 209, 103, 167, 214, 229, 250, 247, 209, + 103, 167, 214, 229, 75, 209, 103, 167, 214, 229, 231, 83, 209, 103, 167, + 214, 229, 207, 24, 209, 103, 167, 214, 229, 207, 22, 209, 103, 167, 214, + 229, 68, 209, 103, 167, 214, 229, 206, 178, 209, 103, 167, 218, 183, 209, + 103, 245, 92, 16, 249, 1, 209, 103, 167, 214, 229, 74, 209, 103, 167, + 214, 229, 251, 109, 209, 103, 167, 214, 229, 78, 209, 103, 167, 214, 229, + 251, 65, 225, 135, 209, 103, 167, 214, 229, 251, 65, 225, 136, 209, 103, + 167, 228, 32, 209, 103, 167, 225, 132, 209, 103, 167, 225, 133, 209, 103, + 167, 225, 141, 241, 129, 209, 103, 167, 225, 141, 209, 47, 209, 103, 167, + 225, 141, 208, 88, 209, 103, 167, 225, 141, 246, 175, 209, 103, 167, 209, + 95, 209, 103, 167, 222, 72, 209, 103, 167, 203, 80, 209, 103, 167, 239, + 177, 209, 103, 17, 202, 84, 209, 103, 17, 105, 209, 103, 17, 108, 209, + 103, 17, 147, 209, 103, 17, 149, 209, 103, 17, 170, 209, 103, 17, 195, + 209, 103, 17, 213, 111, 209, 103, 17, 199, 209, 103, 17, 222, 63, 209, + 103, 167, 250, 219, 209, 103, 167, 229, 113, 228, 12, 1, 229, 26, 228, + 12, 1, 229, 116, 210, 211, 228, 12, 1, 229, 116, 209, 232, 228, 12, 1, + 222, 128, 228, 12, 1, 245, 254, 228, 12, 1, 212, 14, 209, 232, 228, 12, + 1, 220, 233, 228, 12, 1, 243, 113, 228, 12, 1, 135, 228, 12, 1, 209, 48, + 210, 211, 228, 12, 1, 209, 48, 209, 232, 228, 12, 1, 221, 191, 228, 12, + 1, 248, 23, 228, 12, 1, 218, 69, 228, 12, 1, 218, 181, 210, 211, 228, 12, + 1, 239, 187, 209, 232, 228, 12, 1, 218, 181, 209, 232, 228, 12, 1, 239, + 187, 210, 211, 228, 12, 1, 224, 82, 228, 12, 1, 202, 247, 228, 12, 1, + 227, 50, 227, 107, 228, 12, 1, 227, 50, 227, 12, 228, 12, 1, 204, 0, 228, + 12, 1, 212, 14, 210, 211, 228, 12, 1, 236, 137, 210, 211, 228, 12, 1, 78, + 228, 12, 1, 236, 137, 209, 232, 228, 12, 241, 108, 228, 12, 22, 2, 63, + 228, 12, 22, 2, 225, 141, 230, 4, 228, 12, 22, 2, 252, 25, 228, 12, 22, + 2, 250, 247, 228, 12, 22, 2, 75, 228, 12, 22, 2, 231, 83, 228, 12, 22, 2, + 203, 124, 228, 12, 22, 2, 202, 169, 228, 12, 22, 2, 68, 228, 12, 22, 2, + 206, 178, 228, 12, 22, 2, 225, 141, 229, 9, 228, 12, 213, 138, 2, 227, + 49, 228, 12, 213, 138, 2, 220, 233, 228, 12, 22, 2, 74, 228, 12, 22, 2, + 241, 145, 228, 12, 22, 2, 78, 228, 12, 22, 2, 250, 8, 228, 12, 22, 2, + 251, 64, 228, 12, 229, 27, 228, 113, 228, 12, 143, 225, 141, 241, 129, + 228, 12, 143, 225, 141, 209, 47, 228, 12, 143, 225, 141, 209, 2, 228, 12, + 143, 225, 141, 247, 16, 228, 12, 247, 58, 82, 228, 12, 222, 81, 228, 12, + 17, 202, 84, 228, 12, 17, 105, 228, 12, 17, 108, 228, 12, 17, 147, 228, + 12, 17, 149, 228, 12, 17, 170, 228, 12, 17, 195, 228, 12, 17, 213, 111, + 228, 12, 17, 199, 228, 12, 17, 222, 63, 228, 12, 236, 137, 221, 191, 228, + 12, 236, 137, 224, 82, 228, 12, 1, 229, 117, 238, 39, 228, 12, 1, 229, + 117, 220, 233, 77, 4, 220, 39, 77, 131, 237, 232, 203, 3, 224, 173, 208, + 26, 63, 77, 131, 237, 232, 203, 3, 224, 173, 255, 22, 215, 232, 248, 164, + 192, 77, 131, 237, 232, 203, 3, 224, 173, 255, 22, 237, 232, 208, 6, 192, + 77, 131, 81, 203, 3, 224, 173, 225, 22, 192, 77, 131, 246, 12, 203, 3, + 224, 173, 213, 97, 192, 77, 131, 247, 34, 203, 3, 224, 173, 218, 171, + 213, 83, 192, 77, 131, 203, 3, 224, 173, 208, 6, 213, 83, 192, 77, 131, + 214, 205, 213, 82, 77, 131, 247, 196, 203, 3, 224, 172, 77, 131, 248, 45, + 212, 238, 203, 3, 224, 172, 77, 131, 230, 243, 208, 5, 77, 131, 244, 44, + 208, 6, 247, 195, 77, 131, 213, 82, 77, 131, 220, 238, 213, 82, 77, 131, + 208, 6, 213, 82, 77, 131, 220, 238, 208, 6, 213, 82, 77, 131, 215, 255, + 246, 156, 211, 180, 213, 82, 77, 131, 216, 65, 238, 9, 213, 82, 77, 131, + 247, 34, 255, 26, 215, 149, 225, 21, 163, 247, 61, 77, 131, 237, 232, + 208, 5, 77, 227, 35, 2, 246, 197, 215, 148, 77, 227, 35, 2, 227, 159, + 215, 148, 77, 250, 55, 2, 213, 93, 238, 193, 255, 27, 215, 148, 77, 250, + 55, 2, 255, 24, 185, 77, 250, 55, 2, 214, 178, 208, 0, 77, 2, 216, 160, + 243, 127, 238, 192, 77, 2, 216, 160, 243, 127, 238, 41, 77, 2, 216, 160, + 243, 127, 237, 233, 77, 2, 216, 160, 223, 99, 238, 192, 77, 2, 216, 160, + 223, 99, 238, 41, 77, 2, 216, 160, 243, 127, 216, 160, 223, 98, 77, 17, + 202, 84, 77, 17, 105, 77, 17, 108, 77, 17, 147, 77, 17, 149, 77, 17, 170, + 77, 17, 195, 77, 17, 213, 111, 77, 17, 199, 77, 17, 222, 63, 77, 17, 162, + 105, 77, 17, 162, 108, 77, 17, 162, 147, 77, 17, 162, 149, 77, 17, 162, + 170, 77, 17, 162, 195, 77, 17, 162, 213, 111, 77, 17, 162, 199, 77, 17, + 162, 222, 63, 77, 17, 162, 202, 84, 77, 131, 247, 198, 215, 148, 77, 131, + 222, 194, 247, 127, 220, 249, 202, 19, 77, 131, 247, 34, 255, 26, 215, + 149, 247, 128, 224, 126, 247, 61, 77, 131, 222, 194, 247, 127, 213, 94, + 215, 148, 77, 131, 246, 171, 224, 172, 77, 131, 208, 21, 255, 23, 77, + 131, 237, 215, 215, 149, 237, 174, 77, 131, 237, 215, 215, 149, 237, 180, + 77, 131, 250, 224, 229, 134, 237, 174, 77, 131, 250, 224, 229, 134, 237, + 180, 77, 2, 203, 72, 208, 4, 77, 2, 225, 101, 208, 4, 77, 1, 173, 77, 1, + 229, 144, 77, 1, 239, 8, 77, 1, 238, 119, 77, 1, 222, 203, 77, 1, 247, + 92, 77, 1, 246, 199, 77, 1, 230, 181, 77, 1, 221, 11, 77, 1, 207, 241, + 77, 1, 207, 229, 77, 1, 244, 120, 77, 1, 244, 104, 77, 1, 221, 227, 77, + 1, 210, 22, 77, 1, 209, 108, 77, 1, 244, 212, 77, 1, 244, 1, 77, 1, 201, + 201, 77, 1, 185, 77, 1, 218, 208, 77, 1, 249, 32, 77, 1, 248, 98, 77, 1, + 192, 77, 1, 208, 20, 77, 1, 208, 10, 77, 1, 241, 255, 77, 1, 241, 249, + 77, 1, 204, 111, 77, 1, 202, 80, 77, 1, 202, 116, 77, 1, 255, 29, 77, 1, + 198, 77, 1, 216, 220, 77, 1, 228, 113, 77, 1, 213, 90, 77, 1, 211, 164, + 77, 1, 215, 36, 77, 1, 152, 77, 1, 63, 77, 1, 228, 223, 77, 1, 239, 229, + 216, 220, 77, 1, 229, 47, 77, 1, 215, 185, 77, 22, 2, 252, 25, 77, 22, 2, + 75, 77, 22, 2, 231, 83, 77, 22, 2, 68, 77, 22, 2, 206, 178, 77, 22, 2, + 125, 146, 77, 22, 2, 125, 215, 186, 77, 22, 2, 125, 159, 77, 22, 2, 125, + 227, 78, 77, 22, 2, 74, 77, 22, 2, 241, 161, 77, 22, 2, 78, 77, 22, 2, + 220, 18, 77, 2, 215, 238, 211, 11, 222, 204, 215, 227, 77, 2, 215, 232, + 248, 163, 77, 22, 2, 216, 73, 75, 77, 22, 2, 216, 73, 231, 83, 77, 2, + 220, 249, 202, 20, 223, 107, 244, 212, 77, 2, 212, 27, 227, 236, 77, 131, + 237, 139, 77, 131, 219, 132, 77, 2, 227, 239, 215, 148, 77, 2, 203, 77, + 215, 148, 77, 2, 227, 240, 208, 21, 247, 61, 77, 2, 225, 24, 247, 61, 77, + 2, 237, 236, 247, 62, 216, 63, 77, 2, 237, 236, 225, 14, 216, 63, 77, 2, + 230, 239, 225, 24, 247, 61, 77, 210, 254, 2, 227, 240, 208, 21, 247, 61, + 77, 210, 254, 2, 225, 24, 247, 61, 77, 210, 254, 2, 230, 239, 225, 24, + 247, 61, 77, 210, 254, 1, 173, 77, 210, 254, 1, 229, 144, 77, 210, 254, + 1, 239, 8, 77, 210, 254, 1, 238, 119, 77, 210, 254, 1, 222, 203, 77, 210, + 254, 1, 247, 92, 77, 210, 254, 1, 246, 199, 77, 210, 254, 1, 230, 181, + 77, 210, 254, 1, 221, 11, 77, 210, 254, 1, 207, 241, 77, 210, 254, 1, + 207, 229, 77, 210, 254, 1, 244, 120, 77, 210, 254, 1, 244, 104, 77, 210, + 254, 1, 221, 227, 77, 210, 254, 1, 210, 22, 77, 210, 254, 1, 209, 108, + 77, 210, 254, 1, 244, 212, 77, 210, 254, 1, 244, 1, 77, 210, 254, 1, 201, + 201, 77, 210, 254, 1, 185, 77, 210, 254, 1, 218, 208, 77, 210, 254, 1, + 249, 32, 77, 210, 254, 1, 248, 98, 77, 210, 254, 1, 192, 77, 210, 254, 1, + 208, 20, 77, 210, 254, 1, 208, 10, 77, 210, 254, 1, 241, 255, 77, 210, + 254, 1, 241, 249, 77, 210, 254, 1, 204, 111, 77, 210, 254, 1, 202, 80, + 77, 210, 254, 1, 202, 116, 77, 210, 254, 1, 255, 29, 77, 210, 254, 1, + 198, 77, 210, 254, 1, 216, 220, 77, 210, 254, 1, 228, 113, 77, 210, 254, + 1, 213, 90, 77, 210, 254, 1, 211, 164, 77, 210, 254, 1, 215, 36, 77, 210, + 254, 1, 152, 77, 210, 254, 1, 63, 77, 210, 254, 1, 228, 223, 77, 210, + 254, 1, 239, 229, 204, 111, 77, 210, 254, 1, 239, 229, 198, 77, 210, 254, + 1, 239, 229, 216, 220, 77, 228, 210, 215, 146, 229, 144, 77, 228, 210, + 215, 146, 229, 145, 247, 128, 224, 126, 247, 61, 77, 247, 49, 2, 79, 248, + 155, 77, 247, 49, 2, 157, 248, 155, 77, 247, 49, 2, 247, 50, 209, 185, + 77, 247, 49, 2, 214, 204, 255, 28, 77, 16, 242, 55, 247, 193, 77, 16, + 216, 159, 215, 239, 77, 16, 219, 155, 238, 191, 77, 16, 216, 159, 215, + 240, 216, 65, 238, 8, 77, 16, 218, 171, 185, 77, 16, 221, 175, 247, 193, + 77, 16, 221, 175, 247, 194, 220, 238, 255, 25, 77, 16, 221, 175, 247, + 194, 237, 234, 255, 25, 77, 16, 221, 175, 247, 194, 247, 128, 255, 25, + 77, 2, 216, 160, 223, 99, 216, 160, 243, 126, 77, 2, 216, 160, 223, 99, + 237, 233, 77, 131, 247, 197, 212, 238, 238, 82, 224, 173, 216, 64, 77, + 131, 224, 84, 203, 3, 238, 82, 224, 173, 216, 64, 77, 131, 220, 238, 208, + 5, 77, 131, 81, 247, 220, 215, 229, 203, 3, 224, 173, 225, 22, 192, 77, + 131, 246, 12, 247, 220, 215, 229, 203, 3, 224, 173, 213, 97, 192, 216, + 15, 210, 174, 54, 227, 221, 210, 174, 54, 216, 15, 210, 174, 2, 3, 243, + 83, 227, 221, 210, 174, 2, 3, 243, 83, 77, 131, 227, 231, 225, 25, 215, + 148, 77, 131, 208, 112, 225, 25, 215, 148, 69, 1, 173, 69, 1, 229, 144, + 69, 1, 239, 8, 69, 1, 238, 119, 69, 1, 222, 203, 69, 1, 247, 92, 69, 1, + 246, 199, 69, 1, 230, 181, 69, 1, 230, 149, 69, 1, 221, 11, 69, 1, 221, + 193, 69, 1, 207, 241, 69, 1, 207, 229, 69, 1, 244, 120, 69, 1, 244, 104, + 69, 1, 221, 227, 69, 1, 210, 22, 69, 1, 209, 108, 69, 1, 244, 212, 69, 1, + 244, 1, 69, 1, 201, 201, 69, 1, 185, 69, 1, 218, 208, 69, 1, 249, 32, 69, + 1, 248, 98, 69, 1, 192, 69, 1, 198, 69, 1, 216, 220, 69, 1, 228, 113, 69, + 1, 204, 111, 69, 1, 215, 36, 69, 1, 152, 69, 1, 227, 77, 69, 1, 63, 69, + 1, 213, 67, 63, 69, 1, 75, 69, 1, 231, 83, 69, 1, 68, 69, 1, 206, 178, + 69, 1, 74, 69, 1, 224, 55, 74, 69, 1, 78, 69, 1, 250, 34, 69, 22, 2, 209, + 234, 252, 25, 69, 22, 2, 252, 25, 69, 22, 2, 75, 69, 22, 2, 231, 83, 69, + 22, 2, 68, 69, 22, 2, 206, 178, 69, 22, 2, 74, 69, 22, 2, 251, 64, 69, + 22, 2, 224, 55, 231, 83, 69, 22, 2, 224, 55, 78, 69, 22, 2, 188, 55, 69, + 2, 250, 180, 69, 2, 70, 56, 69, 2, 205, 199, 69, 2, 205, 204, 69, 2, 250, + 79, 69, 109, 2, 174, 198, 69, 109, 2, 174, 216, 220, 69, 109, 2, 174, + 204, 111, 69, 109, 2, 174, 152, 69, 1, 237, 249, 215, 36, 69, 17, 202, + 84, 69, 17, 105, 69, 17, 108, 69, 17, 147, 69, 17, 149, 69, 17, 170, 69, + 17, 195, 69, 17, 213, 111, 69, 17, 199, 69, 17, 222, 63, 69, 2, 227, 86, + 214, 167, 69, 2, 214, 167, 69, 16, 227, 44, 69, 16, 245, 227, 69, 16, + 251, 85, 69, 16, 238, 174, 69, 1, 213, 90, 69, 1, 211, 164, 69, 1, 125, + 146, 69, 1, 125, 215, 186, 69, 1, 125, 159, 69, 1, 125, 227, 78, 69, 22, + 2, 125, 146, 69, 22, 2, 125, 215, 186, 69, 22, 2, 125, 159, 69, 22, 2, + 125, 227, 78, 69, 1, 224, 55, 222, 203, 69, 1, 224, 55, 230, 149, 69, 1, + 224, 55, 248, 198, 69, 1, 224, 55, 248, 193, 69, 109, 2, 224, 55, 174, + 201, 201, 69, 109, 2, 224, 55, 174, 192, 69, 109, 2, 224, 55, 174, 228, + 113, 69, 1, 213, 96, 229, 237, 213, 90, 69, 22, 2, 213, 96, 229, 237, + 240, 238, 69, 143, 131, 213, 96, 229, 237, 237, 79, 69, 143, 131, 213, + 96, 229, 237, 229, 202, 218, 180, 69, 1, 204, 44, 217, 146, 229, 237, + 209, 108, 69, 1, 204, 44, 217, 146, 229, 237, 217, 152, 69, 22, 2, 204, + 44, 217, 146, 229, 237, 240, 238, 69, 22, 2, 204, 44, 217, 146, 229, 237, + 207, 24, 69, 2, 204, 44, 217, 146, 229, 237, 208, 160, 69, 2, 204, 44, + 217, 146, 229, 237, 208, 159, 69, 2, 204, 44, 217, 146, 229, 237, 208, + 158, 69, 2, 204, 44, 217, 146, 229, 237, 208, 157, 69, 2, 204, 44, 217, + 146, 229, 237, 208, 156, 69, 1, 241, 174, 217, 146, 229, 237, 221, 227, + 69, 1, 241, 174, 217, 146, 229, 237, 202, 176, 69, 1, 241, 174, 217, 146, + 229, 237, 238, 84, 69, 22, 2, 238, 186, 229, 237, 75, 69, 22, 2, 229, + 207, 220, 73, 69, 22, 2, 229, 207, 68, 69, 22, 2, 229, 207, 241, 161, 69, + 1, 213, 67, 173, 69, 1, 213, 67, 229, 144, 69, 1, 213, 67, 239, 8, 69, 1, + 213, 67, 247, 92, 69, 1, 213, 67, 202, 116, 69, 1, 213, 67, 221, 11, 69, + 1, 213, 67, 244, 212, 69, 1, 213, 67, 201, 201, 69, 1, 213, 67, 218, 208, + 69, 1, 213, 67, 240, 108, 69, 1, 213, 67, 249, 32, 69, 1, 213, 67, 209, + 108, 69, 1, 213, 67, 152, 69, 109, 2, 213, 67, 174, 204, 111, 69, 22, 2, + 213, 67, 252, 25, 69, 22, 2, 213, 67, 74, 69, 22, 2, 213, 67, 188, 55, + 69, 22, 2, 213, 67, 46, 203, 124, 69, 2, 213, 67, 208, 159, 69, 2, 213, + 67, 208, 158, 69, 2, 213, 67, 208, 156, 69, 2, 213, 67, 208, 155, 69, 2, + 213, 67, 245, 156, 208, 159, 69, 2, 213, 67, 245, 156, 208, 158, 69, 2, + 213, 67, 245, 156, 241, 95, 208, 161, 69, 1, 215, 130, 219, 139, 240, + 108, 69, 2, 215, 130, 219, 139, 208, 156, 69, 213, 67, 17, 202, 84, 69, + 213, 67, 17, 105, 69, 213, 67, 17, 108, 69, 213, 67, 17, 147, 69, 213, + 67, 17, 149, 69, 213, 67, 17, 170, 69, 213, 67, 17, 195, 69, 213, 67, 17, + 213, 111, 69, 213, 67, 17, 199, 69, 213, 67, 17, 222, 63, 69, 2, 229, + 137, 208, 160, 69, 2, 229, 137, 208, 158, 69, 22, 2, 251, 51, 63, 69, 22, + 2, 251, 51, 251, 64, 69, 16, 213, 67, 105, 69, 16, 213, 67, 240, 211, + 114, 6, 1, 250, 231, 114, 6, 1, 248, 242, 114, 6, 1, 238, 234, 114, 6, 1, + 243, 93, 114, 6, 1, 241, 92, 114, 6, 1, 205, 213, 114, 6, 1, 202, 87, + 114, 6, 1, 209, 230, 114, 6, 1, 231, 49, 114, 6, 1, 230, 4, 114, 6, 1, + 228, 2, 114, 6, 1, 225, 122, 114, 6, 1, 223, 74, 114, 6, 1, 220, 31, 114, + 6, 1, 219, 91, 114, 6, 1, 202, 76, 114, 6, 1, 216, 202, 114, 6, 1, 214, + 243, 114, 6, 1, 209, 218, 114, 6, 1, 206, 255, 114, 6, 1, 218, 200, 114, + 6, 1, 229, 132, 114, 6, 1, 238, 110, 114, 6, 1, 217, 111, 114, 6, 1, 212, + 255, 114, 6, 1, 246, 129, 114, 6, 1, 247, 61, 114, 6, 1, 230, 133, 114, + 6, 1, 246, 68, 114, 6, 1, 246, 183, 114, 6, 1, 203, 180, 114, 6, 1, 230, + 146, 114, 6, 1, 237, 154, 114, 6, 1, 237, 67, 114, 6, 1, 236, 254, 114, + 6, 1, 204, 62, 114, 6, 1, 237, 92, 114, 6, 1, 236, 132, 114, 6, 1, 202, + 249, 114, 6, 1, 251, 98, 114, 1, 250, 231, 114, 1, 248, 242, 114, 1, 238, + 234, 114, 1, 243, 93, 114, 1, 241, 92, 114, 1, 205, 213, 114, 1, 202, 87, + 114, 1, 209, 230, 114, 1, 231, 49, 114, 1, 230, 4, 114, 1, 228, 2, 114, + 1, 225, 122, 114, 1, 223, 74, 114, 1, 220, 31, 114, 1, 219, 91, 114, 1, + 202, 76, 114, 1, 216, 202, 114, 1, 214, 243, 114, 1, 209, 218, 114, 1, + 206, 255, 114, 1, 218, 200, 114, 1, 229, 132, 114, 1, 238, 110, 114, 1, + 217, 111, 114, 1, 212, 255, 114, 1, 246, 129, 114, 1, 247, 61, 114, 1, + 230, 133, 114, 1, 246, 68, 114, 1, 246, 183, 114, 1, 203, 180, 114, 1, + 230, 146, 114, 1, 237, 154, 114, 1, 237, 67, 114, 1, 236, 254, 114, 1, + 204, 62, 114, 1, 237, 92, 114, 1, 236, 132, 114, 1, 240, 26, 114, 1, 202, + 249, 114, 1, 241, 110, 114, 1, 207, 174, 238, 234, 114, 1, 251, 59, 114, + 219, 89, 213, 130, 65, 1, 114, 223, 74, 114, 1, 251, 98, 114, 1, 237, 91, + 54, 114, 1, 228, 104, 54, 28, 123, 229, 59, 28, 123, 211, 156, 28, 123, + 222, 93, 28, 123, 208, 240, 28, 123, 211, 145, 28, 123, 216, 47, 28, 123, + 224, 141, 28, 123, 218, 153, 28, 123, 211, 153, 28, 123, 212, 111, 28, + 123, 211, 150, 28, 123, 231, 106, 28, 123, 246, 74, 28, 123, 211, 160, + 28, 123, 246, 138, 28, 123, 229, 120, 28, 123, 209, 66, 28, 123, 218, + 190, 28, 123, 236, 251, 28, 123, 222, 89, 28, 123, 211, 154, 28, 123, + 222, 83, 28, 123, 222, 87, 28, 123, 208, 237, 28, 123, 216, 35, 28, 123, + 211, 152, 28, 123, 216, 45, 28, 123, 229, 243, 28, 123, 224, 134, 28, + 123, 229, 246, 28, 123, 218, 148, 28, 123, 218, 146, 28, 123, 218, 134, + 28, 123, 218, 142, 28, 123, 218, 140, 28, 123, 218, 137, 28, 123, 218, + 139, 28, 123, 218, 136, 28, 123, 218, 141, 28, 123, 218, 151, 28, 123, + 218, 152, 28, 123, 218, 135, 28, 123, 218, 145, 28, 123, 229, 244, 28, + 123, 229, 242, 28, 123, 212, 104, 28, 123, 212, 102, 28, 123, 212, 94, + 28, 123, 212, 97, 28, 123, 212, 103, 28, 123, 212, 99, 28, 123, 212, 98, + 28, 123, 212, 96, 28, 123, 212, 107, 28, 123, 212, 109, 28, 123, 212, + 110, 28, 123, 212, 105, 28, 123, 212, 95, 28, 123, 212, 100, 28, 123, + 212, 108, 28, 123, 246, 120, 28, 123, 246, 118, 28, 123, 246, 210, 28, + 123, 246, 208, 28, 123, 219, 107, 28, 123, 231, 101, 28, 123, 231, 92, + 28, 123, 231, 100, 28, 123, 231, 97, 28, 123, 231, 95, 28, 123, 231, 99, + 28, 123, 211, 157, 28, 123, 231, 104, 28, 123, 231, 105, 28, 123, 231, + 93, 28, 123, 231, 98, 28, 123, 203, 29, 28, 123, 246, 73, 28, 123, 246, + 121, 28, 123, 246, 119, 28, 123, 246, 211, 28, 123, 246, 209, 28, 123, + 246, 136, 28, 123, 246, 137, 28, 123, 246, 122, 28, 123, 246, 212, 28, + 123, 218, 188, 28, 123, 229, 245, 28, 123, 211, 158, 28, 123, 203, 35, + 28, 123, 229, 50, 28, 123, 222, 85, 28, 123, 222, 91, 28, 123, 222, 90, + 28, 123, 208, 234, 28, 123, 240, 7, 28, 176, 240, 7, 28, 176, 63, 28, + 176, 251, 109, 28, 176, 198, 28, 176, 203, 99, 28, 176, 241, 55, 28, 176, + 74, 28, 176, 203, 39, 28, 176, 203, 52, 28, 176, 78, 28, 176, 204, 111, + 28, 176, 204, 107, 28, 176, 220, 73, 28, 176, 202, 247, 28, 176, 68, 28, + 176, 204, 48, 28, 176, 204, 62, 28, 176, 204, 30, 28, 176, 202, 213, 28, + 176, 240, 238, 28, 176, 203, 11, 28, 176, 75, 28, 176, 255, 20, 28, 176, + 255, 19, 28, 176, 203, 113, 28, 176, 203, 111, 28, 176, 241, 53, 28, 176, + 241, 52, 28, 176, 241, 54, 28, 176, 203, 38, 28, 176, 203, 37, 28, 176, + 220, 181, 28, 176, 220, 182, 28, 176, 220, 175, 28, 176, 220, 180, 28, + 176, 220, 178, 28, 176, 202, 241, 28, 176, 202, 240, 28, 176, 202, 239, + 28, 176, 202, 242, 28, 176, 202, 243, 28, 176, 207, 97, 28, 176, 207, 96, + 28, 176, 207, 94, 28, 176, 207, 90, 28, 176, 207, 91, 28, 176, 202, 212, + 28, 176, 202, 209, 28, 176, 202, 210, 28, 176, 202, 204, 28, 176, 202, + 205, 28, 176, 202, 206, 28, 176, 202, 208, 28, 176, 240, 232, 28, 176, + 240, 234, 28, 176, 203, 10, 28, 176, 235, 205, 28, 176, 235, 197, 28, + 176, 235, 200, 28, 176, 235, 198, 28, 176, 235, 202, 28, 176, 235, 204, + 28, 176, 250, 137, 28, 176, 250, 134, 28, 176, 250, 132, 28, 176, 250, + 133, 28, 176, 211, 161, 28, 176, 255, 21, 28, 176, 203, 112, 28, 176, + 203, 36, 28, 176, 220, 177, 28, 176, 220, 176, 28, 107, 229, 59, 28, 107, + 211, 156, 28, 107, 229, 52, 28, 107, 222, 93, 28, 107, 222, 91, 28, 107, + 222, 90, 28, 107, 208, 240, 28, 107, 216, 47, 28, 107, 216, 42, 28, 107, + 216, 39, 28, 107, 216, 32, 28, 107, 216, 27, 28, 107, 216, 22, 28, 107, + 216, 33, 28, 107, 216, 45, 28, 107, 224, 141, 28, 107, 218, 153, 28, 107, + 218, 142, 28, 107, 212, 111, 28, 107, 211, 150, 28, 107, 231, 106, 28, + 107, 246, 74, 28, 107, 246, 138, 28, 107, 229, 120, 28, 107, 209, 66, 28, + 107, 218, 190, 28, 107, 236, 251, 28, 107, 229, 53, 28, 107, 229, 51, 28, + 107, 222, 89, 28, 107, 222, 83, 28, 107, 222, 85, 28, 107, 222, 88, 28, + 107, 222, 84, 28, 107, 208, 237, 28, 107, 208, 234, 28, 107, 216, 40, 28, + 107, 216, 35, 28, 107, 216, 21, 28, 107, 216, 20, 28, 107, 211, 152, 28, + 107, 216, 37, 28, 107, 216, 36, 28, 107, 216, 29, 28, 107, 216, 31, 28, + 107, 216, 44, 28, 107, 216, 24, 28, 107, 216, 34, 28, 107, 216, 43, 28, + 107, 216, 19, 28, 107, 224, 137, 28, 107, 224, 132, 28, 107, 224, 134, + 28, 107, 224, 131, 28, 107, 224, 129, 28, 107, 224, 135, 28, 107, 224, + 140, 28, 107, 224, 138, 28, 107, 229, 246, 28, 107, 218, 144, 28, 107, + 218, 145, 28, 107, 218, 150, 28, 107, 229, 244, 28, 107, 212, 104, 28, + 107, 212, 94, 28, 107, 212, 97, 28, 107, 212, 99, 28, 107, 219, 107, 28, + 107, 231, 101, 28, 107, 231, 94, 28, 107, 211, 157, 28, 107, 231, 102, + 28, 107, 203, 29, 28, 107, 203, 25, 28, 107, 203, 26, 28, 107, 218, 188, + 28, 107, 229, 245, 28, 107, 236, 249, 28, 107, 236, 247, 28, 107, 236, + 250, 28, 107, 236, 248, 28, 107, 203, 35, 28, 107, 229, 55, 28, 107, 229, + 54, 28, 107, 229, 58, 28, 107, 229, 56, 28, 107, 229, 57, 28, 107, 211, + 154, 33, 4, 152, 33, 4, 236, 26, 33, 4, 237, 3, 33, 4, 237, 157, 33, 4, + 237, 48, 33, 4, 237, 67, 33, 4, 236, 136, 33, 4, 236, 135, 33, 4, 228, + 113, 33, 4, 226, 239, 33, 4, 227, 148, 33, 4, 228, 112, 33, 4, 227, 226, + 33, 4, 227, 234, 33, 4, 227, 49, 33, 4, 226, 207, 33, 4, 237, 12, 33, 4, + 237, 6, 33, 4, 237, 8, 33, 4, 237, 11, 33, 4, 237, 9, 33, 4, 237, 10, 33, + 4, 237, 7, 33, 4, 237, 5, 33, 4, 192, 33, 4, 223, 246, 33, 4, 224, 155, + 33, 4, 225, 175, 33, 4, 225, 8, 33, 4, 225, 20, 33, 4, 224, 82, 33, 4, + 223, 180, 33, 4, 210, 80, 33, 4, 210, 74, 33, 4, 210, 76, 33, 4, 210, 79, + 33, 4, 210, 77, 33, 4, 210, 78, 33, 4, 210, 75, 33, 4, 210, 73, 33, 4, + 216, 220, 33, 4, 215, 145, 33, 4, 216, 57, 33, 4, 216, 216, 33, 4, 216, + 135, 33, 4, 216, 158, 33, 4, 215, 227, 33, 4, 215, 111, 33, 4, 215, 36, + 33, 4, 211, 10, 33, 4, 212, 162, 33, 4, 215, 33, 33, 4, 214, 165, 33, 4, + 214, 177, 33, 4, 212, 13, 33, 4, 210, 172, 33, 4, 213, 90, 33, 4, 212, + 199, 33, 4, 213, 11, 33, 4, 213, 85, 33, 4, 213, 41, 33, 4, 213, 43, 33, + 4, 212, 242, 33, 4, 212, 180, 33, 4, 217, 126, 33, 4, 217, 65, 33, 4, + 217, 88, 33, 4, 217, 125, 33, 4, 217, 105, 33, 4, 217, 106, 33, 4, 217, + 77, 33, 4, 217, 76, 33, 4, 217, 19, 33, 4, 217, 15, 33, 4, 217, 18, 33, + 4, 217, 16, 33, 4, 217, 17, 33, 4, 217, 102, 33, 4, 217, 94, 33, 4, 217, + 97, 33, 4, 217, 101, 33, 4, 217, 98, 33, 4, 217, 99, 33, 4, 217, 96, 33, + 4, 217, 93, 33, 4, 217, 89, 33, 4, 217, 92, 33, 4, 217, 90, 33, 4, 217, + 91, 33, 4, 249, 32, 33, 4, 247, 193, 33, 4, 248, 86, 33, 4, 249, 30, 33, + 4, 248, 150, 33, 4, 248, 162, 33, 4, 248, 23, 33, 4, 247, 142, 33, 4, + 206, 86, 33, 4, 204, 163, 33, 4, 205, 230, 33, 4, 206, 85, 33, 4, 206, + 50, 33, 4, 206, 55, 33, 4, 205, 189, 33, 4, 204, 154, 33, 4, 210, 22, 33, + 4, 207, 203, 33, 4, 209, 2, 33, 4, 210, 18, 33, 4, 209, 176, 33, 4, 209, + 187, 33, 4, 135, 33, 4, 207, 160, 33, 4, 247, 92, 33, 4, 245, 110, 33, 4, + 246, 79, 33, 4, 247, 91, 33, 4, 246, 230, 33, 4, 246, 238, 33, 4, 245, + 254, 33, 4, 245, 74, 33, 4, 203, 182, 33, 4, 203, 152, 33, 4, 203, 170, + 33, 4, 203, 181, 33, 4, 203, 175, 33, 4, 203, 176, 33, 4, 203, 160, 33, + 4, 203, 159, 33, 4, 203, 146, 33, 4, 203, 142, 33, 4, 203, 145, 33, 4, + 203, 143, 33, 4, 203, 144, 33, 4, 201, 201, 33, 4, 221, 84, 33, 4, 222, + 100, 33, 4, 223, 106, 33, 4, 222, 235, 33, 4, 222, 240, 33, 4, 221, 191, + 33, 4, 221, 20, 33, 4, 221, 11, 33, 4, 220, 226, 33, 4, 220, 248, 33, 4, + 221, 10, 33, 4, 221, 0, 33, 4, 221, 1, 33, 4, 220, 233, 33, 4, 220, 216, + 33, 4, 238, 45, 63, 33, 4, 238, 45, 68, 33, 4, 238, 45, 75, 33, 4, 238, + 45, 252, 25, 33, 4, 238, 45, 241, 161, 33, 4, 238, 45, 74, 33, 4, 238, + 45, 78, 33, 4, 238, 45, 204, 111, 33, 4, 173, 33, 4, 228, 209, 33, 4, + 229, 100, 33, 4, 230, 41, 33, 4, 229, 198, 33, 4, 229, 201, 33, 4, 229, + 26, 33, 4, 229, 25, 33, 4, 228, 167, 33, 4, 228, 160, 33, 4, 228, 166, + 33, 4, 228, 161, 33, 4, 228, 162, 33, 4, 228, 153, 33, 4, 228, 147, 33, + 4, 228, 149, 33, 4, 228, 152, 33, 4, 228, 150, 33, 4, 228, 151, 33, 4, + 228, 148, 33, 4, 228, 146, 33, 4, 228, 142, 33, 4, 228, 145, 33, 4, 228, + 143, 33, 4, 228, 144, 33, 4, 204, 111, 33, 4, 203, 217, 33, 4, 204, 30, + 33, 4, 204, 110, 33, 4, 204, 55, 33, 4, 204, 62, 33, 4, 204, 0, 33, 4, + 203, 255, 33, 4, 218, 199, 63, 33, 4, 218, 199, 68, 33, 4, 218, 199, 75, + 33, 4, 218, 199, 252, 25, 33, 4, 218, 199, 241, 161, 33, 4, 218, 199, 74, + 33, 4, 218, 199, 78, 33, 4, 202, 116, 33, 4, 202, 6, 33, 4, 202, 39, 33, + 4, 202, 114, 33, 4, 202, 90, 33, 4, 202, 92, 33, 4, 202, 17, 33, 4, 201, + 249, 33, 4, 202, 80, 33, 4, 202, 57, 33, 4, 202, 66, 33, 4, 202, 79, 33, + 4, 202, 70, 33, 4, 202, 71, 33, 4, 202, 63, 33, 4, 202, 48, 33, 4, 198, + 33, 4, 202, 213, 33, 4, 203, 11, 33, 4, 203, 110, 33, 4, 203, 49, 33, 4, + 203, 52, 33, 4, 202, 247, 33, 4, 202, 238, 33, 4, 244, 212, 33, 4, 242, + 42, 33, 4, 243, 233, 33, 4, 244, 211, 33, 4, 244, 61, 33, 4, 244, 75, 33, + 4, 243, 113, 33, 4, 242, 10, 33, 4, 244, 120, 33, 4, 244, 85, 33, 4, 244, + 97, 33, 4, 244, 119, 33, 4, 244, 107, 33, 4, 244, 108, 33, 4, 244, 90, + 33, 4, 244, 76, 33, 4, 230, 181, 33, 4, 230, 82, 33, 4, 230, 141, 33, 4, + 230, 180, 33, 4, 230, 159, 33, 4, 230, 161, 33, 4, 230, 101, 33, 4, 230, + 62, 33, 4, 239, 8, 33, 4, 237, 230, 33, 4, 238, 81, 33, 4, 239, 5, 33, 4, + 238, 182, 33, 4, 238, 190, 33, 4, 238, 39, 33, 4, 238, 38, 33, 4, 237, + 190, 33, 4, 237, 186, 33, 4, 237, 189, 33, 4, 237, 187, 33, 4, 237, 188, + 33, 4, 238, 155, 33, 4, 238, 135, 33, 4, 238, 145, 33, 4, 238, 154, 33, + 4, 238, 149, 33, 4, 238, 150, 33, 4, 238, 139, 33, 4, 238, 124, 33, 4, + 209, 108, 33, 4, 209, 22, 33, 4, 209, 70, 33, 4, 209, 107, 33, 4, 209, + 90, 33, 4, 209, 92, 33, 4, 209, 47, 33, 4, 209, 13, 33, 4, 246, 199, 33, + 4, 246, 98, 33, 4, 246, 142, 33, 4, 246, 198, 33, 4, 246, 166, 33, 4, + 246, 170, 33, 4, 246, 116, 33, 4, 246, 87, 33, 4, 218, 208, 33, 4, 218, + 173, 33, 4, 218, 192, 33, 4, 218, 207, 33, 4, 218, 194, 33, 4, 218, 195, + 33, 4, 218, 180, 33, 4, 218, 169, 33, 4, 208, 20, 33, 4, 207, 249, 33, 4, + 207, 255, 33, 4, 208, 19, 33, 4, 208, 13, 33, 4, 208, 14, 33, 4, 207, + 253, 33, 4, 207, 247, 33, 4, 207, 106, 33, 4, 207, 98, 33, 4, 207, 102, + 33, 4, 207, 105, 33, 4, 207, 103, 33, 4, 207, 104, 33, 4, 207, 100, 33, + 4, 207, 99, 33, 4, 240, 108, 33, 4, 239, 108, 33, 4, 240, 26, 33, 4, 240, + 107, 33, 4, 240, 53, 33, 4, 240, 60, 33, 4, 239, 186, 33, 4, 239, 86, 33, + 4, 185, 33, 4, 217, 191, 33, 4, 218, 167, 33, 4, 219, 168, 33, 4, 219, + 23, 33, 4, 219, 34, 33, 4, 218, 69, 33, 4, 217, 152, 33, 4, 215, 101, 33, + 4, 223, 169, 33, 4, 239, 80, 33, 39, 238, 179, 25, 22, 227, 196, 82, 33, + 39, 22, 227, 196, 82, 33, 39, 238, 179, 82, 33, 214, 168, 82, 33, 203, + 237, 33, 239, 102, 211, 61, 33, 245, 233, 33, 213, 143, 33, 245, 242, 33, + 217, 246, 245, 242, 33, 217, 47, 82, 33, 219, 89, 213, 130, 33, 17, 105, + 33, 17, 108, 33, 17, 147, 33, 17, 149, 33, 17, 170, 33, 17, 195, 33, 17, + 213, 111, 33, 17, 199, 33, 17, 222, 63, 33, 42, 209, 152, 33, 42, 207, + 151, 33, 42, 209, 53, 33, 42, 239, 153, 33, 42, 240, 18, 33, 42, 212, 74, + 33, 42, 213, 105, 33, 42, 241, 134, 33, 42, 222, 58, 33, 42, 236, 11, 33, + 42, 209, 153, 209, 36, 33, 4, 214, 173, 223, 180, 33, 4, 223, 176, 33, 4, + 223, 177, 33, 4, 223, 178, 33, 4, 214, 173, 247, 142, 33, 4, 247, 139, + 33, 4, 247, 140, 33, 4, 247, 141, 33, 4, 214, 173, 239, 86, 33, 4, 239, + 82, 33, 4, 239, 83, 33, 4, 239, 84, 33, 4, 214, 173, 217, 152, 33, 4, + 217, 148, 33, 4, 217, 149, 33, 4, 217, 150, 33, 208, 162, 131, 202, 250, + 33, 208, 162, 131, 244, 22, 33, 208, 162, 131, 216, 2, 33, 208, 162, 131, + 212, 228, 216, 2, 33, 208, 162, 131, 243, 207, 33, 208, 162, 131, 229, + 179, 33, 208, 162, 131, 246, 124, 33, 208, 162, 131, 237, 0, 33, 208, + 162, 131, 244, 21, 33, 208, 162, 131, 228, 181, 90, 1, 63, 90, 1, 74, 90, + 1, 75, 90, 1, 78, 90, 1, 68, 90, 1, 206, 164, 90, 1, 239, 8, 90, 1, 173, + 90, 1, 238, 190, 90, 1, 238, 81, 90, 1, 238, 39, 90, 1, 237, 230, 90, 1, + 237, 192, 90, 1, 152, 90, 1, 237, 67, 90, 1, 237, 3, 90, 1, 236, 136, 90, + 1, 236, 26, 90, 1, 235, 255, 90, 1, 228, 113, 90, 1, 227, 234, 90, 1, + 227, 148, 90, 1, 227, 49, 90, 1, 226, 239, 90, 1, 226, 208, 90, 1, 192, + 90, 1, 225, 20, 90, 1, 224, 155, 90, 1, 224, 82, 90, 1, 223, 246, 90, 1, + 201, 201, 90, 1, 236, 160, 90, 1, 223, 93, 90, 1, 222, 240, 90, 1, 222, + 100, 90, 1, 221, 191, 90, 1, 221, 84, 90, 1, 221, 22, 90, 1, 217, 64, 90, + 1, 217, 50, 90, 1, 217, 43, 90, 1, 217, 34, 90, 1, 217, 23, 90, 1, 217, + 21, 90, 1, 215, 36, 90, 1, 194, 90, 1, 214, 177, 90, 1, 212, 162, 90, 1, + 212, 13, 90, 1, 211, 10, 90, 1, 210, 177, 90, 1, 244, 212, 90, 1, 210, + 22, 90, 1, 244, 75, 90, 1, 209, 187, 90, 1, 243, 233, 90, 1, 209, 2, 90, + 1, 243, 113, 90, 1, 242, 42, 90, 1, 242, 13, 90, 1, 243, 124, 90, 1, 208, + 190, 90, 1, 208, 189, 90, 1, 208, 178, 90, 1, 208, 177, 90, 1, 208, 176, + 90, 1, 208, 175, 90, 1, 208, 20, 90, 1, 208, 14, 90, 1, 207, 255, 90, 1, + 207, 253, 90, 1, 207, 249, 90, 1, 207, 248, 90, 1, 204, 111, 90, 1, 204, + 62, 90, 1, 204, 30, 90, 1, 204, 0, 90, 1, 203, 217, 90, 1, 203, 204, 90, + 1, 198, 90, 1, 203, 52, 90, 1, 203, 11, 90, 1, 202, 247, 90, 1, 202, 213, + 90, 1, 202, 177, 90, 1, 223, 187, 90, 5, 1, 203, 52, 90, 5, 1, 203, 11, + 90, 5, 1, 202, 247, 90, 5, 1, 202, 213, 90, 5, 1, 202, 177, 90, 5, 1, + 223, 187, 19, 20, 235, 220, 19, 20, 74, 19, 20, 251, 245, 19, 20, 75, 19, + 20, 231, 83, 19, 20, 78, 19, 20, 220, 18, 19, 20, 203, 123, 220, 18, 19, + 20, 88, 241, 161, 19, 20, 88, 75, 19, 20, 63, 19, 20, 252, 25, 19, 20, + 204, 62, 19, 20, 196, 204, 62, 19, 20, 204, 30, 19, 20, 196, 204, 30, 19, + 20, 204, 19, 19, 20, 196, 204, 19, 19, 20, 204, 0, 19, 20, 196, 204, 0, + 19, 20, 203, 244, 19, 20, 196, 203, 244, 19, 20, 223, 68, 203, 244, 19, + 20, 204, 111, 19, 20, 196, 204, 111, 19, 20, 204, 110, 19, 20, 196, 204, + 110, 19, 20, 223, 68, 204, 110, 19, 20, 251, 64, 19, 20, 203, 123, 204, + 144, 19, 20, 238, 45, 211, 61, 19, 20, 46, 165, 19, 20, 46, 237, 253, 19, + 20, 46, 247, 248, 162, 215, 252, 19, 20, 46, 208, 145, 162, 215, 252, 19, + 20, 46, 50, 162, 215, 252, 19, 20, 46, 215, 252, 19, 20, 46, 52, 165, 19, + 20, 46, 52, 212, 228, 80, 211, 19, 19, 20, 46, 101, 243, 85, 19, 20, 46, + 212, 228, 236, 106, 95, 19, 20, 46, 218, 76, 19, 20, 46, 121, 210, 3, 19, + 20, 241, 92, 19, 20, 231, 49, 19, 20, 220, 31, 19, 20, 250, 231, 19, 20, + 219, 34, 19, 20, 219, 166, 19, 20, 218, 167, 19, 20, 218, 129, 19, 20, + 218, 69, 19, 20, 218, 45, 19, 20, 203, 123, 218, 45, 19, 20, 88, 237, 48, + 19, 20, 88, 237, 3, 19, 20, 185, 19, 20, 219, 168, 19, 20, 217, 150, 19, + 20, 196, 217, 150, 19, 20, 217, 148, 19, 20, 196, 217, 148, 19, 20, 217, + 147, 19, 20, 196, 217, 147, 19, 20, 217, 145, 19, 20, 196, 217, 145, 19, + 20, 217, 144, 19, 20, 196, 217, 144, 19, 20, 217, 152, 19, 20, 196, 217, + 152, 19, 20, 217, 151, 19, 20, 196, 217, 151, 19, 20, 203, 123, 217, 151, + 19, 20, 219, 184, 19, 20, 196, 219, 184, 19, 20, 88, 237, 171, 19, 20, + 209, 187, 19, 20, 210, 16, 19, 20, 209, 2, 19, 20, 208, 242, 19, 20, 135, + 19, 20, 208, 148, 19, 20, 203, 123, 208, 148, 19, 20, 88, 244, 61, 19, + 20, 88, 243, 233, 19, 20, 210, 22, 19, 20, 210, 18, 19, 20, 207, 158, 19, + 20, 196, 207, 158, 19, 20, 207, 140, 19, 20, 196, 207, 140, 19, 20, 207, + 139, 19, 20, 196, 207, 139, 19, 20, 108, 19, 20, 196, 108, 19, 20, 207, + 130, 19, 20, 196, 207, 130, 19, 20, 207, 160, 19, 20, 196, 207, 160, 19, + 20, 207, 159, 19, 20, 196, 207, 159, 19, 20, 223, 68, 207, 159, 19, 20, + 210, 69, 19, 20, 207, 236, 19, 20, 207, 220, 19, 20, 207, 218, 19, 20, + 207, 241, 19, 20, 229, 201, 19, 20, 230, 36, 19, 20, 229, 100, 19, 20, + 229, 87, 19, 20, 229, 26, 19, 20, 229, 6, 19, 20, 203, 123, 229, 6, 19, + 20, 173, 19, 20, 230, 41, 19, 20, 228, 162, 19, 20, 196, 228, 162, 19, + 20, 228, 160, 19, 20, 196, 228, 160, 19, 20, 228, 159, 19, 20, 196, 228, + 159, 19, 20, 228, 157, 19, 20, 196, 228, 157, 19, 20, 228, 156, 19, 20, + 196, 228, 156, 19, 20, 228, 167, 19, 20, 196, 228, 167, 19, 20, 228, 166, + 19, 20, 196, 228, 166, 19, 20, 223, 68, 228, 166, 19, 20, 230, 54, 19, + 20, 228, 168, 19, 20, 211, 237, 229, 191, 19, 20, 211, 237, 229, 88, 19, + 20, 211, 237, 229, 20, 19, 20, 211, 237, 230, 20, 19, 20, 246, 238, 19, + 20, 247, 90, 19, 20, 246, 79, 19, 20, 246, 69, 19, 20, 245, 254, 19, 20, + 245, 180, 19, 20, 203, 123, 245, 180, 19, 20, 247, 92, 19, 20, 247, 91, + 19, 20, 245, 72, 19, 20, 196, 245, 72, 19, 20, 245, 70, 19, 20, 196, 245, + 70, 19, 20, 245, 69, 19, 20, 196, 245, 69, 19, 20, 245, 68, 19, 20, 196, + 245, 68, 19, 20, 245, 67, 19, 20, 196, 245, 67, 19, 20, 245, 74, 19, 20, + 196, 245, 74, 19, 20, 245, 73, 19, 20, 196, 245, 73, 19, 20, 223, 68, + 245, 73, 19, 20, 247, 125, 19, 20, 214, 206, 209, 110, 19, 20, 225, 20, + 19, 20, 225, 174, 19, 20, 224, 155, 19, 20, 224, 125, 19, 20, 224, 82, + 19, 20, 224, 35, 19, 20, 203, 123, 224, 35, 19, 20, 192, 19, 20, 225, + 175, 19, 20, 223, 178, 19, 20, 196, 223, 178, 19, 20, 223, 176, 19, 20, + 196, 223, 176, 19, 20, 223, 175, 19, 20, 196, 223, 175, 19, 20, 223, 174, + 19, 20, 196, 223, 174, 19, 20, 223, 173, 19, 20, 196, 223, 173, 19, 20, + 223, 180, 19, 20, 196, 223, 180, 19, 20, 223, 179, 19, 20, 196, 223, 179, + 19, 20, 223, 68, 223, 179, 19, 20, 226, 185, 19, 20, 196, 226, 185, 19, + 20, 224, 159, 19, 20, 250, 48, 226, 185, 19, 20, 214, 206, 226, 185, 19, + 20, 222, 240, 19, 20, 223, 105, 19, 20, 222, 100, 19, 20, 222, 75, 19, + 20, 221, 191, 19, 20, 221, 180, 19, 20, 203, 123, 221, 180, 19, 20, 201, + 201, 19, 20, 223, 106, 19, 20, 221, 18, 19, 20, 196, 221, 18, 19, 20, + 221, 20, 19, 20, 196, 221, 20, 19, 20, 221, 19, 19, 20, 196, 221, 19, 19, + 20, 223, 68, 221, 19, 19, 20, 223, 163, 19, 20, 88, 222, 205, 19, 20, + 222, 105, 19, 20, 227, 234, 19, 20, 228, 111, 19, 20, 227, 148, 19, 20, + 227, 130, 19, 20, 227, 49, 19, 20, 227, 18, 19, 20, 203, 123, 227, 18, + 19, 20, 228, 113, 19, 20, 228, 112, 19, 20, 226, 205, 19, 20, 196, 226, + 205, 19, 20, 226, 204, 19, 20, 196, 226, 204, 19, 20, 226, 203, 19, 20, + 196, 226, 203, 19, 20, 226, 202, 19, 20, 196, 226, 202, 19, 20, 226, 201, + 19, 20, 196, 226, 201, 19, 20, 226, 207, 19, 20, 196, 226, 207, 19, 20, + 226, 206, 19, 20, 196, 226, 206, 19, 20, 159, 19, 20, 196, 159, 19, 20, + 174, 159, 19, 20, 214, 177, 19, 20, 215, 31, 19, 20, 212, 162, 19, 20, + 212, 142, 19, 20, 212, 13, 19, 20, 211, 250, 19, 20, 203, 123, 211, 250, + 19, 20, 215, 36, 19, 20, 215, 33, 19, 20, 210, 168, 19, 20, 196, 210, + 168, 19, 20, 210, 162, 19, 20, 196, 210, 162, 19, 20, 210, 161, 19, 20, + 196, 210, 161, 19, 20, 210, 157, 19, 20, 196, 210, 157, 19, 20, 210, 156, + 19, 20, 196, 210, 156, 19, 20, 210, 172, 19, 20, 196, 210, 172, 19, 20, + 210, 171, 19, 20, 196, 210, 171, 19, 20, 223, 68, 210, 171, 19, 20, 194, + 19, 20, 250, 48, 194, 19, 20, 210, 173, 19, 20, 248, 40, 194, 19, 20, + 224, 28, 212, 70, 19, 20, 223, 68, 212, 61, 19, 20, 223, 68, 215, 92, 19, + 20, 223, 68, 211, 179, 19, 20, 223, 68, 211, 13, 19, 20, 223, 68, 212, + 60, 19, 20, 223, 68, 214, 180, 19, 20, 213, 43, 19, 20, 213, 11, 19, 20, + 213, 6, 19, 20, 212, 242, 19, 20, 212, 236, 19, 20, 213, 90, 19, 20, 213, + 85, 19, 20, 212, 177, 19, 20, 196, 212, 177, 19, 20, 212, 176, 19, 20, + 196, 212, 176, 19, 20, 212, 175, 19, 20, 196, 212, 175, 19, 20, 212, 174, + 19, 20, 196, 212, 174, 19, 20, 212, 173, 19, 20, 196, 212, 173, 19, 20, + 212, 180, 19, 20, 196, 212, 180, 19, 20, 212, 179, 19, 20, 196, 212, 179, + 19, 20, 213, 92, 19, 20, 203, 52, 19, 20, 203, 108, 19, 20, 203, 11, 19, + 20, 203, 2, 19, 20, 202, 247, 19, 20, 202, 232, 19, 20, 203, 123, 202, + 232, 19, 20, 198, 19, 20, 203, 110, 19, 20, 202, 174, 19, 20, 196, 202, + 174, 19, 20, 202, 173, 19, 20, 196, 202, 173, 19, 20, 202, 172, 19, 20, + 196, 202, 172, 19, 20, 202, 171, 19, 20, 196, 202, 171, 19, 20, 202, 170, + 19, 20, 196, 202, 170, 19, 20, 202, 176, 19, 20, 196, 202, 176, 19, 20, + 202, 175, 19, 20, 196, 202, 175, 19, 20, 223, 68, 202, 175, 19, 20, 203, + 124, 19, 20, 248, 84, 203, 124, 19, 20, 196, 203, 124, 19, 20, 214, 206, + 203, 11, 19, 20, 216, 158, 19, 20, 217, 0, 216, 158, 19, 20, 196, 227, + 234, 19, 20, 216, 215, 19, 20, 216, 57, 19, 20, 216, 3, 19, 20, 215, 227, + 19, 20, 215, 208, 19, 20, 196, 227, 49, 19, 20, 216, 220, 19, 20, 216, + 216, 19, 20, 196, 228, 113, 19, 20, 215, 110, 19, 20, 196, 215, 110, 19, + 20, 146, 19, 20, 196, 146, 19, 20, 174, 146, 19, 20, 240, 60, 19, 20, + 240, 105, 19, 20, 240, 26, 19, 20, 240, 12, 19, 20, 239, 186, 19, 20, + 239, 175, 19, 20, 240, 108, 19, 20, 240, 107, 19, 20, 239, 85, 19, 20, + 196, 239, 85, 19, 20, 240, 174, 19, 20, 209, 92, 19, 20, 223, 161, 209, + 92, 19, 20, 209, 70, 19, 20, 223, 161, 209, 70, 19, 20, 209, 64, 19, 20, + 223, 161, 209, 64, 19, 20, 209, 47, 19, 20, 209, 42, 19, 20, 209, 108, + 19, 20, 209, 107, 19, 20, 209, 12, 19, 20, 196, 209, 12, 19, 20, 209, + 110, 19, 20, 207, 227, 19, 20, 207, 225, 19, 20, 207, 224, 19, 20, 207, + 229, 19, 20, 207, 230, 19, 20, 207, 124, 19, 20, 207, 123, 19, 20, 207, + 122, 19, 20, 207, 126, 19, 20, 221, 39, 237, 67, 19, 20, 221, 39, 237, 3, + 19, 20, 221, 39, 236, 239, 19, 20, 221, 39, 236, 136, 19, 20, 221, 39, + 236, 117, 19, 20, 221, 39, 152, 19, 20, 221, 39, 237, 157, 19, 20, 221, + 39, 237, 171, 19, 20, 221, 38, 237, 171, 19, 20, 236, 226, 19, 20, 217, + 122, 19, 20, 217, 88, 19, 20, 217, 83, 19, 20, 217, 77, 19, 20, 217, 72, + 19, 20, 217, 126, 19, 20, 217, 125, 19, 20, 217, 134, 19, 20, 208, 186, + 19, 20, 208, 184, 19, 20, 208, 183, 19, 20, 208, 187, 19, 20, 196, 216, + 158, 19, 20, 196, 216, 57, 19, 20, 196, 215, 227, 19, 20, 196, 216, 220, + 19, 20, 222, 201, 19, 20, 222, 151, 19, 20, 222, 147, 19, 20, 222, 128, + 19, 20, 222, 123, 19, 20, 222, 203, 19, 20, 222, 202, 19, 20, 222, 205, + 19, 20, 221, 220, 19, 20, 214, 206, 213, 43, 19, 20, 214, 206, 213, 11, + 19, 20, 214, 206, 212, 242, 19, 20, 214, 206, 213, 90, 19, 20, 203, 242, + 209, 92, 19, 20, 203, 242, 209, 70, 19, 20, 203, 242, 209, 47, 19, 20, + 203, 242, 209, 108, 19, 20, 203, 242, 209, 110, 19, 20, 227, 155, 19, 20, + 227, 154, 19, 20, 227, 153, 19, 20, 227, 152, 19, 20, 227, 161, 19, 20, + 227, 160, 19, 20, 227, 162, 19, 20, 209, 109, 209, 92, 19, 20, 209, 109, + 209, 70, 19, 20, 209, 109, 209, 64, 19, 20, 209, 109, 209, 47, 19, 20, + 209, 109, 209, 42, 19, 20, 209, 109, 209, 108, 19, 20, 209, 109, 209, + 107, 19, 20, 209, 109, 209, 110, 19, 20, 251, 50, 249, 255, 19, 20, 248, + 40, 74, 19, 20, 248, 40, 75, 19, 20, 248, 40, 78, 19, 20, 248, 40, 63, + 19, 20, 248, 40, 204, 62, 19, 20, 248, 40, 204, 30, 19, 20, 248, 40, 204, + 0, 19, 20, 248, 40, 204, 111, 19, 20, 248, 40, 222, 240, 19, 20, 248, 40, + 222, 100, 19, 20, 248, 40, 221, 191, 19, 20, 248, 40, 201, 201, 19, 20, + 248, 40, 229, 201, 19, 20, 248, 40, 229, 100, 19, 20, 248, 40, 229, 26, + 19, 20, 248, 40, 173, 19, 20, 214, 206, 237, 67, 19, 20, 214, 206, 237, + 3, 19, 20, 214, 206, 236, 136, 19, 20, 214, 206, 152, 19, 20, 88, 238, + 87, 19, 20, 88, 238, 91, 19, 20, 88, 238, 105, 19, 20, 88, 238, 104, 19, + 20, 88, 238, 93, 19, 20, 88, 238, 119, 19, 20, 88, 215, 145, 19, 20, 88, + 215, 227, 19, 20, 88, 216, 158, 19, 20, 88, 216, 135, 19, 20, 88, 216, + 57, 19, 20, 88, 216, 220, 19, 20, 88, 203, 217, 19, 20, 88, 204, 0, 19, + 20, 88, 204, 62, 19, 20, 88, 204, 55, 19, 20, 88, 204, 30, 19, 20, 88, + 204, 111, 19, 20, 88, 235, 247, 19, 20, 88, 235, 248, 19, 20, 88, 235, + 251, 19, 20, 88, 235, 250, 19, 20, 88, 235, 249, 19, 20, 88, 235, 254, + 19, 20, 88, 209, 22, 19, 20, 88, 209, 47, 19, 20, 88, 209, 92, 19, 20, + 88, 209, 90, 19, 20, 88, 209, 70, 19, 20, 88, 209, 108, 19, 20, 88, 207, + 208, 19, 20, 88, 207, 218, 19, 20, 88, 207, 236, 19, 20, 88, 207, 235, + 19, 20, 88, 207, 220, 19, 20, 88, 207, 241, 19, 20, 88, 217, 191, 19, 20, + 88, 218, 69, 19, 20, 88, 219, 34, 19, 20, 88, 219, 23, 19, 20, 88, 218, + 167, 19, 20, 88, 185, 19, 20, 88, 219, 184, 19, 20, 88, 237, 230, 19, 20, + 88, 238, 39, 19, 20, 88, 238, 190, 19, 20, 88, 238, 182, 19, 20, 88, 238, + 81, 19, 20, 88, 239, 8, 19, 20, 88, 229, 109, 19, 20, 88, 229, 115, 19, + 20, 88, 229, 129, 19, 20, 88, 229, 128, 19, 20, 88, 229, 122, 19, 20, 88, + 229, 144, 19, 20, 88, 229, 42, 19, 20, 88, 229, 43, 19, 20, 88, 229, 46, + 19, 20, 88, 229, 45, 19, 20, 88, 229, 44, 19, 20, 88, 229, 47, 19, 20, + 88, 229, 48, 19, 20, 88, 221, 84, 19, 20, 88, 221, 191, 19, 20, 88, 222, + 240, 19, 20, 88, 222, 235, 19, 20, 88, 222, 100, 19, 20, 88, 201, 201, + 19, 20, 88, 223, 246, 19, 20, 88, 224, 82, 19, 20, 88, 225, 20, 19, 20, + 88, 225, 8, 19, 20, 88, 224, 155, 19, 20, 88, 192, 19, 20, 88, 202, 213, + 19, 20, 88, 202, 247, 19, 20, 88, 203, 52, 19, 20, 88, 203, 49, 19, 20, + 88, 203, 11, 19, 20, 88, 198, 19, 20, 88, 230, 82, 19, 20, 214, 206, 230, + 82, 19, 20, 88, 230, 101, 19, 20, 88, 230, 161, 19, 20, 88, 230, 159, 19, + 20, 88, 230, 141, 19, 20, 214, 206, 230, 141, 19, 20, 88, 230, 181, 19, + 20, 88, 230, 114, 19, 20, 88, 230, 118, 19, 20, 88, 230, 128, 19, 20, 88, + 230, 127, 19, 20, 88, 230, 126, 19, 20, 88, 230, 129, 19, 20, 88, 226, + 239, 19, 20, 88, 227, 49, 19, 20, 88, 227, 234, 19, 20, 88, 227, 226, 19, + 20, 88, 227, 148, 19, 20, 88, 228, 113, 19, 20, 88, 243, 117, 19, 20, 88, + 243, 118, 19, 20, 88, 243, 123, 19, 20, 88, 243, 122, 19, 20, 88, 243, + 119, 19, 20, 88, 243, 124, 19, 20, 88, 227, 151, 19, 20, 88, 227, 153, + 19, 20, 88, 227, 157, 19, 20, 88, 227, 156, 19, 20, 88, 227, 155, 19, 20, + 88, 227, 161, 19, 20, 88, 208, 181, 19, 20, 88, 208, 183, 19, 20, 88, + 208, 186, 19, 20, 88, 208, 185, 19, 20, 88, 208, 184, 19, 20, 88, 208, + 187, 19, 20, 88, 208, 176, 19, 20, 88, 208, 177, 19, 20, 88, 208, 189, + 19, 20, 88, 208, 188, 19, 20, 88, 208, 178, 19, 20, 88, 208, 190, 19, 20, + 88, 202, 6, 19, 20, 88, 202, 17, 19, 20, 88, 202, 92, 19, 20, 88, 202, + 90, 19, 20, 88, 202, 39, 19, 20, 88, 202, 116, 19, 20, 88, 202, 159, 19, + 20, 88, 81, 202, 159, 19, 20, 88, 241, 242, 19, 20, 88, 241, 243, 19, 20, + 88, 241, 252, 19, 20, 88, 241, 251, 19, 20, 88, 241, 246, 19, 20, 88, + 241, 255, 19, 20, 88, 211, 10, 19, 20, 88, 212, 13, 19, 20, 88, 214, 177, + 19, 20, 88, 214, 165, 19, 20, 88, 212, 162, 19, 20, 88, 215, 36, 19, 20, + 88, 212, 199, 19, 20, 88, 212, 242, 19, 20, 88, 213, 43, 19, 20, 88, 213, + 41, 19, 20, 88, 213, 11, 19, 20, 88, 213, 90, 19, 20, 88, 213, 92, 19, + 20, 88, 207, 249, 19, 20, 88, 207, 253, 19, 20, 88, 208, 14, 19, 20, 88, + 208, 13, 19, 20, 88, 207, 255, 19, 20, 88, 208, 20, 19, 20, 88, 246, 98, + 19, 20, 88, 246, 116, 19, 20, 88, 246, 170, 19, 20, 88, 246, 166, 19, 20, + 88, 246, 142, 19, 20, 88, 246, 199, 19, 20, 88, 207, 211, 19, 20, 88, + 207, 212, 19, 20, 88, 207, 215, 19, 20, 88, 207, 214, 19, 20, 88, 207, + 213, 19, 20, 88, 207, 216, 19, 20, 246, 143, 54, 19, 20, 239, 102, 211, + 61, 19, 20, 217, 118, 19, 20, 222, 199, 19, 20, 221, 217, 19, 20, 221, + 216, 19, 20, 221, 215, 19, 20, 221, 214, 19, 20, 221, 219, 19, 20, 221, + 218, 19, 20, 203, 242, 209, 10, 19, 20, 203, 242, 209, 9, 19, 20, 203, + 242, 209, 8, 19, 20, 203, 242, 209, 7, 19, 20, 203, 242, 209, 6, 19, 20, + 203, 242, 209, 13, 19, 20, 203, 242, 209, 12, 19, 20, 203, 242, 46, 209, + 110, 19, 20, 248, 40, 204, 144, 220, 64, 211, 229, 82, 220, 64, 1, 248, + 132, 220, 64, 1, 226, 225, 220, 64, 1, 240, 57, 220, 64, 1, 215, 16, 220, + 64, 1, 222, 56, 220, 64, 1, 207, 36, 220, 64, 1, 244, 186, 220, 64, 1, + 208, 214, 220, 64, 1, 245, 245, 220, 64, 1, 246, 225, 220, 64, 1, 223, + 233, 220, 64, 1, 238, 20, 220, 64, 1, 222, 189, 220, 64, 1, 211, 54, 220, + 64, 1, 215, 138, 220, 64, 1, 251, 61, 220, 64, 1, 220, 22, 220, 64, 1, + 206, 210, 220, 64, 1, 241, 187, 220, 64, 1, 230, 233, 220, 64, 1, 241, + 188, 220, 64, 1, 219, 244, 220, 64, 1, 207, 15, 220, 64, 1, 231, 89, 220, + 64, 1, 241, 185, 220, 64, 1, 219, 13, 220, 64, 240, 56, 82, 220, 64, 216, + 73, 240, 56, 82, 197, 1, 240, 46, 240, 38, 240, 61, 240, 174, 197, 1, + 206, 164, 197, 1, 206, 195, 206, 211, 68, 197, 1, 202, 216, 197, 1, 203, + 124, 197, 1, 204, 144, 197, 1, 209, 15, 209, 14, 209, 40, 197, 1, 240, + 243, 197, 1, 250, 199, 63, 197, 1, 219, 228, 78, 197, 1, 251, 142, 63, + 197, 1, 251, 93, 197, 1, 227, 24, 78, 197, 1, 212, 221, 78, 197, 1, 78, + 197, 1, 220, 73, 197, 1, 220, 31, 197, 1, 216, 195, 216, 208, 216, 120, + 146, 197, 1, 229, 216, 197, 1, 246, 221, 197, 1, 229, 217, 230, 54, 197, + 1, 239, 75, 197, 1, 241, 78, 197, 1, 238, 185, 237, 177, 239, 75, 197, 1, + 238, 224, 197, 1, 203, 209, 203, 200, 204, 144, 197, 1, 237, 149, 237, + 171, 197, 1, 237, 153, 237, 171, 197, 1, 227, 26, 237, 171, 197, 1, 212, + 224, 237, 171, 197, 1, 223, 63, 221, 2, 223, 64, 223, 163, 197, 1, 212, + 222, 223, 163, 197, 1, 242, 80, 197, 1, 230, 212, 230, 216, 230, 203, 75, + 197, 1, 74, 197, 1, 230, 152, 230, 184, 197, 1, 238, 169, 197, 1, 227, + 27, 251, 109, 197, 1, 212, 226, 63, 197, 1, 230, 195, 241, 51, 197, 1, + 218, 226, 218, 251, 219, 184, 197, 1, 251, 23, 241, 49, 197, 1, 211, 234, + 194, 197, 1, 212, 146, 227, 23, 194, 197, 1, 212, 220, 194, 197, 1, 247, + 125, 197, 1, 202, 159, 197, 1, 208, 195, 208, 207, 207, 108, 210, 69, + 197, 1, 212, 219, 210, 69, 197, 1, 245, 51, 197, 1, 248, 111, 248, 114, + 248, 46, 249, 255, 197, 1, 212, 225, 249, 255, 197, 1, 242, 79, 197, 1, + 220, 2, 197, 1, 241, 146, 241, 148, 74, 197, 1, 225, 113, 225, 123, 226, + 185, 197, 1, 227, 25, 226, 185, 197, 1, 212, 223, 226, 185, 197, 1, 227, + 249, 228, 91, 227, 34, 159, 197, 1, 242, 81, 197, 1, 231, 23, 197, 1, + 231, 24, 197, 1, 244, 200, 244, 206, 245, 51, 197, 1, 219, 222, 240, 242, + 78, 197, 1, 241, 183, 197, 1, 230, 232, 197, 1, 245, 71, 197, 1, 247, 75, + 197, 1, 246, 237, 197, 1, 211, 99, 197, 1, 227, 22, 197, 1, 212, 218, + 197, 1, 235, 161, 197, 1, 217, 134, 197, 1, 203, 196, 197, 212, 120, 217, + 178, 197, 223, 226, 217, 178, 197, 245, 131, 217, 178, 197, 250, 108, 97, + 197, 207, 162, 97, 197, 248, 130, 97, 197, 1, 230, 54, 197, 1, 213, 92, + 197, 1, 220, 18, 197, 1, 239, 131, 247, 20, 219, 227, 197, 1, 239, 131, + 247, 20, 230, 215, 197, 1, 239, 131, 247, 20, 241, 147, 197, 1, 239, 131, + 247, 20, 251, 141, 197, 1, 239, 131, 247, 20, 251, 93, 209, 254, 1, 63, + 209, 254, 1, 75, 209, 254, 1, 68, 209, 254, 1, 173, 209, 254, 1, 239, 8, + 209, 254, 1, 222, 203, 209, 254, 1, 210, 22, 209, 254, 1, 244, 212, 209, + 254, 1, 201, 201, 209, 254, 1, 185, 209, 254, 1, 249, 32, 209, 254, 1, + 192, 209, 254, 1, 198, 209, 254, 1, 228, 113, 209, 254, 1, 204, 111, 209, + 254, 1, 215, 36, 209, 254, 1, 152, 209, 254, 22, 2, 75, 209, 254, 22, 2, + 68, 209, 254, 2, 205, 204, 237, 96, 1, 63, 237, 96, 1, 75, 237, 96, 1, + 68, 237, 96, 1, 173, 237, 96, 1, 239, 8, 237, 96, 1, 222, 203, 237, 96, + 1, 210, 22, 237, 96, 1, 244, 212, 237, 96, 1, 201, 201, 237, 96, 1, 185, + 237, 96, 1, 249, 32, 237, 96, 1, 192, 237, 96, 1, 198, 237, 96, 1, 216, + 220, 237, 96, 1, 228, 113, 237, 96, 1, 204, 111, 237, 96, 1, 215, 36, + 237, 96, 1, 152, 237, 96, 22, 2, 75, 237, 96, 22, 2, 68, 237, 96, 2, 219, + 124, 218, 185, 212, 120, 217, 178, 218, 185, 52, 217, 178, 247, 185, 1, + 63, 247, 185, 1, 75, 247, 185, 1, 68, 247, 185, 1, 173, 247, 185, 1, 239, + 8, 247, 185, 1, 222, 203, 247, 185, 1, 210, 22, 247, 185, 1, 244, 212, + 247, 185, 1, 201, 201, 247, 185, 1, 185, 247, 185, 1, 249, 32, 247, 185, + 1, 192, 247, 185, 1, 198, 247, 185, 1, 216, 220, 247, 185, 1, 228, 113, + 247, 185, 1, 204, 111, 247, 185, 1, 215, 36, 247, 185, 1, 152, 247, 185, + 22, 2, 75, 247, 185, 22, 2, 68, 209, 253, 1, 63, 209, 253, 1, 75, 209, + 253, 1, 68, 209, 253, 1, 173, 209, 253, 1, 239, 8, 209, 253, 1, 222, 203, + 209, 253, 1, 210, 22, 209, 253, 1, 244, 212, 209, 253, 1, 201, 201, 209, + 253, 1, 185, 209, 253, 1, 249, 32, 209, 253, 1, 192, 209, 253, 1, 198, + 209, 253, 1, 228, 113, 209, 253, 1, 204, 111, 209, 253, 1, 215, 36, 209, + 253, 22, 2, 75, 209, 253, 22, 2, 68, 85, 1, 173, 85, 1, 229, 144, 85, 1, + 229, 26, 85, 1, 229, 115, 85, 1, 222, 128, 85, 1, 247, 92, 85, 1, 246, + 199, 85, 1, 245, 254, 85, 1, 246, 116, 85, 1, 220, 233, 85, 1, 244, 212, + 85, 1, 207, 229, 85, 1, 243, 113, 85, 1, 207, 224, 85, 1, 221, 197, 85, + 1, 210, 22, 85, 1, 209, 108, 85, 1, 135, 85, 1, 209, 47, 85, 1, 221, 191, + 85, 1, 249, 32, 85, 1, 218, 208, 85, 1, 218, 69, 85, 1, 218, 180, 85, 1, + 224, 82, 85, 1, 202, 247, 85, 1, 215, 227, 85, 1, 227, 49, 85, 1, 205, + 189, 85, 1, 213, 90, 85, 1, 211, 124, 85, 1, 215, 36, 85, 1, 152, 85, 1, + 228, 113, 85, 1, 217, 126, 85, 231, 36, 22, 217, 112, 85, 231, 36, 22, + 217, 125, 85, 231, 36, 22, 217, 88, 85, 231, 36, 22, 217, 83, 85, 231, + 36, 22, 217, 65, 85, 231, 36, 22, 217, 35, 85, 231, 36, 22, 217, 23, 85, + 231, 36, 22, 217, 22, 85, 231, 36, 22, 215, 102, 85, 231, 36, 22, 215, + 95, 85, 231, 36, 22, 226, 199, 85, 231, 36, 22, 226, 188, 85, 231, 36, + 22, 217, 106, 85, 231, 36, 22, 217, 118, 85, 231, 36, 22, 217, 73, 207, + 121, 105, 85, 231, 36, 22, 217, 73, 207, 121, 108, 85, 231, 36, 22, 217, + 108, 85, 22, 231, 21, 250, 148, 85, 22, 231, 21, 252, 25, 85, 22, 2, 252, + 25, 85, 22, 2, 75, 85, 22, 2, 231, 83, 85, 22, 2, 203, 124, 85, 22, 2, + 202, 169, 85, 22, 2, 68, 85, 22, 2, 206, 178, 85, 22, 2, 207, 39, 85, 22, + 2, 220, 73, 85, 22, 2, 198, 85, 22, 2, 231, 110, 85, 22, 2, 74, 85, 22, + 2, 251, 109, 85, 22, 2, 251, 64, 85, 22, 2, 220, 18, 85, 22, 2, 250, 34, + 85, 2, 222, 73, 85, 2, 216, 156, 85, 2, 202, 180, 85, 2, 223, 190, 85, 2, + 208, 73, 85, 2, 248, 233, 85, 2, 215, 222, 85, 2, 208, 171, 85, 2, 230, + 11, 85, 2, 251, 66, 85, 2, 214, 244, 214, 237, 85, 2, 205, 201, 85, 2, + 245, 248, 85, 2, 248, 205, 85, 2, 229, 136, 85, 2, 248, 228, 85, 2, 247, + 64, 218, 130, 228, 173, 85, 2, 227, 203, 208, 148, 85, 2, 248, 100, 85, + 2, 218, 182, 223, 243, 85, 2, 229, 4, 85, 245, 92, 16, 216, 49, 85, 2, + 250, 16, 85, 2, 250, 37, 85, 17, 202, 84, 85, 17, 105, 85, 17, 108, 85, + 17, 147, 85, 17, 149, 85, 17, 170, 85, 17, 195, 85, 17, 213, 111, 85, 17, + 199, 85, 17, 222, 63, 85, 16, 227, 203, 250, 39, 211, 253, 85, 16, 227, + 203, 250, 39, 223, 210, 85, 16, 227, 203, 250, 39, 218, 129, 85, 16, 227, + 203, 250, 39, 248, 133, 85, 16, 227, 203, 250, 39, 247, 165, 85, 16, 227, + 203, 250, 39, 218, 7, 85, 16, 227, 203, 250, 39, 218, 1, 85, 16, 227, + 203, 250, 39, 217, 255, 85, 16, 227, 203, 250, 39, 218, 5, 85, 16, 227, + 203, 250, 39, 218, 3, 94, 248, 59, 94, 241, 108, 94, 245, 233, 94, 239, + 102, 211, 61, 94, 245, 242, 94, 239, 147, 243, 83, 94, 208, 170, 212, 7, + 235, 220, 94, 212, 160, 4, 247, 244, 225, 88, 94, 225, 119, 245, 233, 94, + 225, 119, 239, 102, 211, 61, 94, 222, 54, 94, 239, 130, 57, 214, 151, + 105, 94, 239, 130, 57, 214, 151, 108, 94, 239, 130, 57, 214, 151, 147, + 94, 22, 213, 130, 94, 17, 202, 84, 94, 17, 105, 94, 17, 108, 94, 17, 147, + 94, 17, 149, 94, 17, 170, 94, 17, 195, 94, 17, 213, 111, 94, 17, 199, 94, + 17, 222, 63, 94, 1, 63, 94, 1, 74, 94, 1, 75, 94, 1, 78, 94, 1, 68, 94, + 1, 220, 73, 94, 1, 207, 24, 94, 1, 241, 161, 94, 1, 201, 201, 94, 1, 250, + 223, 94, 1, 249, 32, 94, 1, 185, 94, 1, 217, 126, 94, 1, 239, 8, 94, 1, + 192, 94, 1, 228, 113, 94, 1, 215, 36, 94, 1, 213, 90, 94, 1, 210, 22, 94, + 1, 244, 212, 94, 1, 246, 199, 94, 1, 230, 181, 94, 1, 198, 94, 1, 216, + 220, 94, 1, 204, 111, 94, 1, 240, 108, 94, 1, 173, 94, 1, 229, 144, 94, + 1, 208, 20, 94, 1, 202, 116, 94, 1, 237, 157, 94, 1, 202, 10, 94, 1, 227, + 161, 94, 1, 202, 66, 94, 1, 246, 142, 94, 1, 208, 170, 163, 22, 54, 94, + 1, 208, 170, 74, 94, 1, 208, 170, 75, 94, 1, 208, 170, 78, 94, 1, 208, + 170, 68, 94, 1, 208, 170, 220, 73, 94, 1, 208, 170, 207, 24, 94, 1, 208, + 170, 250, 223, 94, 1, 208, 170, 249, 32, 94, 1, 208, 170, 185, 94, 1, + 208, 170, 217, 126, 94, 1, 208, 170, 239, 8, 94, 1, 208, 170, 192, 94, 1, + 208, 170, 210, 22, 94, 1, 208, 170, 244, 212, 94, 1, 208, 170, 246, 199, + 94, 1, 208, 170, 230, 181, 94, 1, 208, 170, 208, 20, 94, 1, 208, 170, + 198, 94, 1, 208, 170, 204, 111, 94, 1, 208, 170, 173, 94, 1, 208, 170, + 239, 5, 94, 1, 208, 170, 237, 157, 94, 1, 208, 170, 230, 140, 94, 1, 208, + 170, 222, 98, 94, 1, 208, 170, 241, 255, 94, 1, 212, 160, 74, 94, 1, 212, + 160, 75, 94, 1, 212, 160, 230, 192, 94, 1, 212, 160, 207, 24, 94, 1, 212, + 160, 68, 94, 1, 212, 160, 250, 223, 94, 1, 212, 160, 173, 94, 1, 212, + 160, 239, 8, 94, 1, 212, 160, 152, 94, 1, 212, 160, 185, 94, 1, 212, 160, + 213, 90, 94, 1, 212, 160, 210, 22, 94, 1, 212, 160, 244, 212, 94, 1, 212, + 160, 230, 181, 94, 1, 212, 160, 240, 108, 94, 1, 212, 160, 239, 5, 94, 1, + 212, 160, 237, 157, 94, 1, 212, 160, 208, 20, 94, 1, 212, 160, 202, 116, + 94, 1, 212, 160, 216, 216, 94, 1, 212, 160, 246, 199, 94, 1, 212, 160, + 202, 80, 94, 1, 225, 119, 75, 94, 1, 225, 119, 173, 94, 1, 225, 119, 216, + 220, 94, 1, 225, 119, 240, 108, 94, 1, 225, 119, 202, 80, 94, 1, 251, 22, + 238, 244, 250, 181, 105, 94, 1, 251, 22, 238, 244, 205, 200, 105, 94, 1, + 251, 22, 238, 244, 244, 174, 94, 1, 251, 22, 238, 244, 207, 34, 94, 1, + 251, 22, 238, 244, 230, 239, 207, 34, 94, 1, 251, 22, 238, 244, 248, 245, + 94, 1, 251, 22, 238, 244, 126, 248, 245, 94, 1, 251, 22, 238, 244, 63, + 94, 1, 251, 22, 238, 244, 75, 94, 1, 251, 22, 238, 244, 173, 94, 1, 251, + 22, 238, 244, 222, 203, 94, 1, 251, 22, 238, 244, 247, 92, 94, 1, 251, + 22, 238, 244, 207, 241, 94, 1, 251, 22, 238, 244, 207, 229, 94, 1, 251, + 22, 238, 244, 244, 120, 94, 1, 251, 22, 238, 244, 221, 227, 94, 1, 251, + 22, 238, 244, 210, 22, 94, 1, 251, 22, 238, 244, 244, 212, 94, 1, 251, + 22, 238, 244, 185, 94, 1, 251, 22, 238, 244, 218, 208, 94, 1, 251, 22, + 238, 244, 211, 164, 94, 1, 251, 22, 238, 244, 202, 80, 94, 1, 251, 22, + 238, 244, 202, 116, 94, 1, 251, 22, 238, 244, 251, 73, 94, 1, 208, 170, + 251, 22, 238, 244, 210, 22, 94, 1, 208, 170, 251, 22, 238, 244, 202, 80, + 94, 1, 225, 119, 251, 22, 238, 244, 238, 119, 94, 1, 225, 119, 251, 22, + 238, 244, 222, 203, 94, 1, 225, 119, 251, 22, 238, 244, 247, 92, 94, 1, + 225, 119, 251, 22, 238, 244, 230, 149, 94, 1, 225, 119, 251, 22, 238, + 244, 207, 241, 94, 1, 225, 119, 251, 22, 238, 244, 244, 104, 94, 1, 225, + 119, 251, 22, 238, 244, 210, 22, 94, 1, 225, 119, 251, 22, 238, 244, 244, + 1, 94, 1, 225, 119, 251, 22, 238, 244, 211, 164, 94, 1, 225, 119, 251, + 22, 238, 244, 245, 65, 94, 1, 225, 119, 251, 22, 238, 244, 202, 80, 94, + 1, 225, 119, 251, 22, 238, 244, 202, 116, 94, 1, 251, 22, 238, 244, 162, + 68, 94, 1, 251, 22, 238, 244, 162, 198, 94, 1, 225, 119, 251, 22, 238, + 244, 248, 98, 94, 1, 251, 22, 238, 244, 244, 201, 94, 1, 225, 119, 251, + 22, 238, 244, 227, 161, 19, 20, 219, 188, 19, 20, 250, 8, 19, 20, 251, + 236, 19, 20, 204, 65, 19, 20, 218, 13, 19, 20, 219, 43, 19, 20, 217, 143, + 19, 20, 209, 196, 19, 20, 229, 208, 19, 20, 228, 164, 19, 20, 225, 63, + 19, 20, 221, 149, 19, 20, 223, 59, 19, 20, 227, 244, 19, 20, 211, 232, + 19, 20, 214, 208, 19, 20, 212, 207, 19, 20, 213, 47, 19, 20, 212, 172, + 19, 20, 202, 222, 19, 20, 203, 58, 19, 20, 216, 165, 19, 20, 221, 17, 19, + 20, 220, 53, 221, 17, 19, 20, 221, 16, 19, 20, 220, 53, 221, 16, 19, 20, + 221, 15, 19, 20, 220, 53, 221, 15, 19, 20, 221, 14, 19, 20, 220, 53, 221, + 14, 19, 20, 215, 107, 19, 20, 215, 106, 19, 20, 215, 105, 19, 20, 215, + 104, 19, 20, 215, 103, 19, 20, 215, 111, 19, 20, 220, 53, 219, 184, 19, + 20, 220, 53, 210, 69, 19, 20, 220, 53, 230, 54, 19, 20, 220, 53, 247, + 125, 19, 20, 220, 53, 226, 185, 19, 20, 220, 53, 223, 163, 19, 20, 220, + 53, 194, 19, 20, 220, 53, 213, 92, 19, 20, 241, 174, 204, 144, 19, 20, + 204, 44, 204, 144, 19, 20, 46, 5, 215, 252, 19, 20, 46, 216, 188, 243, + 85, 19, 20, 217, 0, 215, 108, 19, 20, 196, 227, 18, 19, 20, 196, 228, + 112, 19, 20, 209, 11, 19, 20, 209, 13, 19, 20, 207, 221, 19, 20, 207, + 223, 19, 20, 207, 228, 19, 20, 208, 180, 19, 20, 208, 182, 19, 20, 214, + 206, 212, 177, 19, 20, 214, 206, 212, 236, 19, 20, 214, 206, 236, 117, + 19, 20, 88, 237, 185, 19, 20, 88, 244, 35, 238, 182, 19, 20, 88, 239, 5, + 19, 20, 88, 237, 190, 19, 20, 214, 206, 230, 64, 19, 20, 88, 230, 62, 19, + 20, 248, 153, 244, 35, 159, 19, 20, 248, 153, 244, 35, 146, 19, 20, 88, + 244, 30, 194, 227, 124, 205, 169, 227, 174, 227, 124, 1, 173, 227, 124, + 1, 229, 144, 227, 124, 1, 239, 8, 227, 124, 1, 238, 119, 227, 124, 1, + 222, 203, 227, 124, 1, 247, 92, 227, 124, 1, 246, 199, 227, 124, 1, 230, + 181, 227, 124, 1, 230, 149, 227, 124, 1, 203, 78, 227, 124, 1, 210, 22, + 227, 124, 1, 209, 108, 227, 124, 1, 244, 212, 227, 124, 1, 244, 1, 227, + 124, 1, 201, 201, 227, 124, 1, 185, 227, 124, 1, 218, 208, 227, 124, 1, + 249, 32, 227, 124, 1, 248, 98, 227, 124, 1, 192, 227, 124, 1, 198, 227, + 124, 1, 216, 220, 227, 124, 1, 228, 113, 227, 124, 1, 204, 111, 227, 124, + 1, 213, 90, 227, 124, 1, 211, 164, 227, 124, 1, 215, 36, 227, 124, 1, + 152, 227, 124, 1, 237, 181, 227, 124, 1, 208, 119, 227, 124, 22, 2, 63, + 227, 124, 22, 2, 75, 227, 124, 22, 2, 68, 227, 124, 22, 2, 241, 161, 227, + 124, 22, 2, 251, 64, 227, 124, 22, 2, 220, 18, 227, 124, 22, 2, 250, 34, + 227, 124, 22, 2, 74, 227, 124, 22, 2, 78, 227, 124, 210, 254, 1, 198, + 227, 124, 210, 254, 1, 216, 220, 227, 124, 210, 254, 1, 204, 111, 227, + 124, 5, 1, 173, 227, 124, 5, 1, 222, 203, 227, 124, 5, 1, 250, 180, 227, + 124, 5, 1, 210, 22, 227, 124, 5, 1, 201, 201, 227, 124, 5, 1, 185, 227, + 124, 5, 1, 192, 227, 124, 5, 1, 216, 220, 227, 124, 5, 1, 228, 113, 227, + 124, 2, 223, 231, 227, 124, 2, 229, 186, 227, 124, 2, 215, 34, 227, 124, + 2, 227, 18, 227, 124, 240, 212, 82, 227, 124, 217, 47, 82, 227, 124, 17, + 202, 84, 227, 124, 17, 105, 227, 124, 17, 108, 227, 124, 17, 147, 227, + 124, 17, 149, 227, 124, 17, 170, 227, 124, 17, 195, 227, 124, 17, 213, + 111, 227, 124, 17, 199, 227, 124, 17, 222, 63, 45, 227, 235, 1, 173, 45, + 227, 235, 1, 203, 182, 45, 227, 235, 1, 222, 203, 45, 227, 235, 1, 208, + 20, 45, 227, 235, 1, 215, 36, 45, 227, 235, 1, 198, 45, 227, 235, 1, 210, + 22, 45, 227, 235, 1, 209, 108, 45, 227, 235, 1, 228, 113, 45, 227, 235, + 1, 185, 45, 227, 235, 1, 218, 208, 45, 227, 235, 1, 192, 45, 227, 235, 1, + 240, 108, 45, 227, 235, 1, 206, 86, 45, 227, 235, 1, 152, 45, 227, 235, + 1, 217, 126, 45, 227, 235, 1, 229, 144, 45, 227, 235, 1, 208, 10, 45, + 227, 235, 1, 201, 201, 45, 227, 235, 1, 63, 45, 227, 235, 1, 75, 45, 227, + 235, 1, 241, 161, 45, 227, 235, 1, 241, 147, 45, 227, 235, 1, 68, 45, + 227, 235, 1, 220, 18, 45, 227, 235, 1, 78, 45, 227, 235, 1, 207, 24, 45, + 227, 235, 1, 74, 45, 227, 235, 1, 250, 32, 45, 227, 235, 1, 251, 64, 45, + 227, 235, 1, 208, 159, 45, 227, 235, 1, 208, 158, 45, 227, 235, 1, 208, + 157, 45, 227, 235, 1, 208, 156, 45, 227, 235, 1, 208, 155, 222, 214, 45, + 226, 233, 1, 138, 217, 126, 222, 214, 45, 226, 233, 1, 124, 217, 126, + 222, 214, 45, 226, 233, 1, 138, 173, 222, 214, 45, 226, 233, 1, 138, 203, + 182, 222, 214, 45, 226, 233, 1, 138, 222, 203, 222, 214, 45, 226, 233, 1, + 124, 173, 222, 214, 45, 226, 233, 1, 124, 203, 182, 222, 214, 45, 226, + 233, 1, 124, 222, 203, 222, 214, 45, 226, 233, 1, 138, 208, 20, 222, 214, + 45, 226, 233, 1, 138, 215, 36, 222, 214, 45, 226, 233, 1, 138, 198, 222, + 214, 45, 226, 233, 1, 124, 208, 20, 222, 214, 45, 226, 233, 1, 124, 215, + 36, 222, 214, 45, 226, 233, 1, 124, 198, 222, 214, 45, 226, 233, 1, 138, + 210, 22, 222, 214, 45, 226, 233, 1, 138, 209, 108, 222, 214, 45, 226, + 233, 1, 138, 201, 201, 222, 214, 45, 226, 233, 1, 124, 210, 22, 222, 214, + 45, 226, 233, 1, 124, 209, 108, 222, 214, 45, 226, 233, 1, 124, 201, 201, + 222, 214, 45, 226, 233, 1, 138, 185, 222, 214, 45, 226, 233, 1, 138, 218, + 208, 222, 214, 45, 226, 233, 1, 138, 192, 222, 214, 45, 226, 233, 1, 124, + 185, 222, 214, 45, 226, 233, 1, 124, 218, 208, 222, 214, 45, 226, 233, 1, + 124, 192, 222, 214, 45, 226, 233, 1, 138, 240, 108, 222, 214, 45, 226, + 233, 1, 138, 206, 86, 222, 214, 45, 226, 233, 1, 138, 228, 113, 222, 214, + 45, 226, 233, 1, 124, 240, 108, 222, 214, 45, 226, 233, 1, 124, 206, 86, + 222, 214, 45, 226, 233, 1, 124, 228, 113, 222, 214, 45, 226, 233, 1, 138, + 152, 222, 214, 45, 226, 233, 1, 138, 244, 212, 222, 214, 45, 226, 233, 1, + 138, 249, 32, 222, 214, 45, 226, 233, 1, 124, 152, 222, 214, 45, 226, + 233, 1, 124, 244, 212, 222, 214, 45, 226, 233, 1, 124, 249, 32, 222, 214, + 45, 226, 233, 1, 138, 228, 169, 222, 214, 45, 226, 233, 1, 138, 203, 149, + 222, 214, 45, 226, 233, 1, 124, 228, 169, 222, 214, 45, 226, 233, 1, 124, + 203, 149, 222, 214, 45, 226, 233, 1, 138, 211, 9, 222, 214, 45, 226, 233, + 1, 124, 211, 9, 222, 214, 45, 226, 233, 22, 2, 22, 212, 216, 222, 214, + 45, 226, 233, 22, 2, 252, 25, 222, 214, 45, 226, 233, 22, 2, 231, 83, + 222, 214, 45, 226, 233, 22, 2, 68, 222, 214, 45, 226, 233, 22, 2, 206, + 178, 222, 214, 45, 226, 233, 22, 2, 74, 222, 214, 45, 226, 233, 22, 2, + 251, 109, 222, 214, 45, 226, 233, 22, 2, 78, 222, 214, 45, 226, 233, 22, + 2, 220, 97, 222, 214, 45, 226, 233, 22, 2, 207, 24, 222, 214, 45, 226, + 233, 22, 2, 250, 8, 222, 214, 45, 226, 233, 22, 2, 251, 236, 222, 214, + 45, 226, 233, 22, 2, 206, 170, 222, 214, 45, 226, 233, 22, 2, 219, 188, + 222, 214, 45, 226, 233, 22, 2, 220, 94, 222, 214, 45, 226, 233, 22, 2, + 207, 20, 222, 214, 45, 226, 233, 22, 2, 230, 192, 222, 214, 45, 226, 233, + 1, 46, 206, 164, 222, 214, 45, 226, 233, 1, 46, 222, 205, 222, 214, 45, + 226, 233, 1, 46, 223, 163, 222, 214, 45, 226, 233, 1, 46, 226, 185, 222, + 214, 45, 226, 233, 1, 46, 230, 54, 222, 214, 45, 226, 233, 1, 46, 245, + 51, 222, 214, 45, 226, 233, 1, 46, 249, 255, 222, 214, 45, 226, 233, 143, + 225, 92, 222, 214, 45, 226, 233, 143, 225, 91, 222, 214, 45, 226, 233, + 17, 202, 84, 222, 214, 45, 226, 233, 17, 105, 222, 214, 45, 226, 233, 17, + 108, 222, 214, 45, 226, 233, 17, 147, 222, 214, 45, 226, 233, 17, 149, + 222, 214, 45, 226, 233, 17, 170, 222, 214, 45, 226, 233, 17, 195, 222, + 214, 45, 226, 233, 17, 213, 111, 222, 214, 45, 226, 233, 17, 199, 222, + 214, 45, 226, 233, 17, 222, 63, 222, 214, 45, 226, 233, 104, 17, 105, + 222, 214, 45, 226, 233, 2, 228, 97, 222, 214, 45, 226, 233, 2, 228, 96, + 85, 16, 219, 51, 85, 16, 223, 211, 229, 22, 85, 16, 218, 130, 229, 22, + 85, 16, 248, 134, 229, 22, 85, 16, 247, 166, 229, 22, 85, 16, 218, 8, + 229, 22, 85, 16, 218, 2, 229, 22, 85, 16, 218, 0, 229, 22, 85, 16, 218, + 6, 229, 22, 85, 16, 218, 4, 229, 22, 85, 16, 244, 161, 229, 22, 85, 16, + 244, 157, 229, 22, 85, 16, 244, 156, 229, 22, 85, 16, 244, 159, 229, 22, + 85, 16, 244, 158, 229, 22, 85, 16, 244, 155, 229, 22, 85, 16, 207, 167, + 85, 16, 223, 211, 215, 220, 85, 16, 218, 130, 215, 220, 85, 16, 248, 134, + 215, 220, 85, 16, 247, 166, 215, 220, 85, 16, 218, 8, 215, 220, 85, 16, + 218, 2, 215, 220, 85, 16, 218, 0, 215, 220, 85, 16, 218, 6, 215, 220, 85, + 16, 218, 4, 215, 220, 85, 16, 244, 161, 215, 220, 85, 16, 244, 157, 215, + 220, 85, 16, 244, 156, 215, 220, 85, 16, 244, 159, 215, 220, 85, 16, 244, + 158, 215, 220, 85, 16, 244, 155, 215, 220, 247, 186, 1, 173, 247, 186, 1, + 239, 8, 247, 186, 1, 222, 203, 247, 186, 1, 222, 146, 247, 186, 1, 185, + 247, 186, 1, 249, 32, 247, 186, 1, 192, 247, 186, 1, 223, 250, 247, 186, + 1, 210, 22, 247, 186, 1, 244, 212, 247, 186, 1, 201, 201, 247, 186, 1, + 221, 147, 247, 186, 1, 247, 92, 247, 186, 1, 230, 181, 247, 186, 1, 221, + 11, 247, 186, 1, 221, 3, 247, 186, 1, 198, 247, 186, 1, 216, 220, 247, + 186, 1, 228, 113, 247, 186, 1, 206, 86, 247, 186, 1, 215, 36, 247, 186, + 1, 63, 247, 186, 1, 152, 247, 186, 22, 2, 75, 247, 186, 22, 2, 68, 247, + 186, 22, 2, 74, 247, 186, 22, 2, 78, 247, 186, 22, 2, 251, 109, 247, 186, + 219, 136, 247, 186, 241, 84, 76, 214, 167, 45, 104, 1, 138, 173, 45, 104, + 1, 138, 229, 144, 45, 104, 1, 138, 228, 153, 45, 104, 1, 124, 173, 45, + 104, 1, 124, 228, 153, 45, 104, 1, 124, 229, 144, 45, 104, 1, 222, 203, + 45, 104, 1, 138, 247, 92, 45, 104, 1, 138, 246, 199, 45, 104, 1, 124, + 247, 92, 45, 104, 1, 124, 215, 36, 45, 104, 1, 124, 246, 199, 45, 104, 1, + 221, 11, 45, 104, 1, 216, 171, 45, 104, 1, 138, 216, 169, 45, 104, 1, + 244, 212, 45, 104, 1, 124, 216, 169, 45, 104, 1, 216, 180, 45, 104, 1, + 138, 210, 22, 45, 104, 1, 138, 209, 108, 45, 104, 1, 124, 210, 22, 45, + 104, 1, 124, 209, 108, 45, 104, 1, 201, 201, 45, 104, 1, 249, 32, 45, + 104, 1, 138, 185, 45, 104, 1, 138, 218, 208, 45, 104, 1, 138, 240, 108, + 45, 104, 1, 124, 185, 45, 104, 1, 124, 240, 108, 45, 104, 1, 124, 218, + 208, 45, 104, 1, 192, 45, 104, 1, 124, 198, 45, 104, 1, 138, 198, 45, + 104, 1, 216, 220, 45, 104, 1, 215, 140, 45, 104, 1, 228, 113, 45, 104, 1, + 226, 232, 45, 104, 1, 204, 111, 45, 104, 1, 138, 213, 90, 45, 104, 1, + 138, 211, 164, 45, 104, 1, 138, 215, 36, 45, 104, 1, 138, 152, 45, 104, + 1, 227, 77, 45, 104, 1, 63, 45, 104, 1, 124, 152, 45, 104, 1, 75, 45, + 104, 1, 231, 83, 45, 104, 1, 68, 45, 104, 1, 206, 178, 45, 104, 1, 241, + 161, 45, 104, 1, 220, 18, 45, 104, 1, 228, 97, 45, 104, 1, 237, 249, 215, + 36, 45, 104, 109, 2, 174, 216, 220, 45, 104, 109, 2, 174, 228, 113, 45, + 104, 109, 2, 228, 114, 209, 228, 228, 86, 45, 104, 2, 225, 141, 230, 1, + 228, 86, 45, 104, 109, 2, 46, 222, 203, 45, 104, 109, 2, 124, 185, 45, + 104, 109, 2, 138, 216, 170, 219, 245, 124, 185, 45, 104, 109, 2, 192, 45, + 104, 109, 2, 249, 32, 45, 104, 109, 2, 215, 36, 45, 104, 2, 215, 10, 45, + 104, 22, 2, 63, 45, 104, 22, 2, 225, 141, 214, 225, 45, 104, 22, 2, 252, + 25, 45, 104, 22, 2, 209, 234, 252, 25, 45, 104, 22, 2, 75, 45, 104, 22, + 2, 231, 83, 45, 104, 22, 2, 207, 24, 45, 104, 22, 2, 206, 177, 45, 104, + 22, 2, 68, 45, 104, 22, 2, 206, 178, 45, 104, 22, 2, 78, 45, 104, 22, 2, + 220, 98, 56, 45, 104, 22, 2, 219, 188, 45, 104, 22, 2, 74, 45, 104, 22, + 2, 251, 109, 45, 104, 22, 2, 220, 18, 45, 104, 22, 2, 251, 64, 45, 104, + 22, 2, 104, 251, 64, 45, 104, 22, 2, 220, 98, 55, 45, 104, 2, 225, 141, + 230, 0, 45, 104, 2, 208, 160, 45, 104, 2, 208, 159, 45, 104, 2, 229, 105, + 208, 158, 45, 104, 2, 229, 105, 208, 157, 45, 104, 2, 229, 105, 208, 156, + 45, 104, 2, 216, 221, 237, 156, 45, 104, 2, 225, 141, 214, 253, 45, 104, + 2, 229, 104, 229, 239, 45, 104, 39, 245, 113, 243, 85, 45, 104, 236, 108, + 17, 202, 84, 45, 104, 236, 108, 17, 105, 45, 104, 236, 108, 17, 108, 45, + 104, 236, 108, 17, 147, 45, 104, 236, 108, 17, 149, 45, 104, 236, 108, + 17, 170, 45, 104, 236, 108, 17, 195, 45, 104, 236, 108, 17, 213, 111, 45, + 104, 236, 108, 17, 199, 45, 104, 236, 108, 17, 222, 63, 45, 104, 104, 17, + 202, 84, 45, 104, 104, 17, 105, 45, 104, 104, 17, 108, 45, 104, 104, 17, + 147, 45, 104, 104, 17, 149, 45, 104, 104, 17, 170, 45, 104, 104, 17, 195, + 45, 104, 104, 17, 213, 111, 45, 104, 104, 17, 199, 45, 104, 104, 17, 222, + 63, 45, 104, 2, 204, 29, 45, 104, 2, 204, 28, 45, 104, 2, 214, 212, 45, + 104, 2, 229, 175, 45, 104, 2, 236, 36, 45, 104, 2, 243, 99, 45, 104, 2, + 216, 73, 215, 198, 216, 180, 45, 104, 2, 225, 141, 203, 79, 45, 104, 2, + 230, 35, 45, 104, 2, 230, 34, 45, 104, 2, 214, 220, 45, 104, 2, 214, 219, + 45, 104, 2, 237, 98, 45, 104, 2, 247, 89, 39, 242, 75, 246, 53, 251, 138, + 39, 243, 230, 39, 231, 27, 39, 183, 47, 39, 208, 70, 243, 85, 39, 203, + 195, 56, 39, 204, 21, 227, 115, 56, 39, 171, 131, 56, 39, 52, 171, 131, + 56, 39, 157, 246, 219, 211, 32, 56, 39, 211, 18, 246, 219, 211, 32, 56, + 39, 219, 78, 55, 39, 52, 219, 78, 55, 39, 219, 78, 56, 39, 219, 78, 219, + 199, 130, 2, 207, 9, 216, 51, 130, 2, 207, 9, 247, 54, 130, 2, 246, 234, + 130, 2, 210, 191, 130, 2, 248, 56, 130, 1, 251, 45, 130, 1, 251, 46, 209, + 178, 130, 1, 231, 79, 130, 1, 231, 80, 209, 178, 130, 1, 207, 12, 130, 1, + 207, 13, 209, 178, 130, 1, 216, 221, 216, 103, 130, 1, 216, 221, 216, + 104, 209, 178, 130, 1, 228, 114, 227, 197, 130, 1, 228, 114, 227, 198, + 209, 178, 130, 1, 241, 127, 130, 1, 251, 62, 130, 1, 220, 49, 130, 1, + 220, 50, 209, 178, 130, 1, 173, 130, 1, 230, 44, 225, 144, 130, 1, 239, + 8, 130, 1, 239, 9, 238, 25, 130, 1, 222, 203, 130, 1, 247, 92, 130, 1, + 247, 93, 228, 100, 130, 1, 230, 181, 130, 1, 230, 182, 230, 153, 130, 1, + 221, 11, 130, 1, 210, 23, 227, 253, 130, 1, 210, 23, 223, 206, 225, 144, + 130, 1, 244, 213, 223, 206, 251, 4, 130, 1, 244, 213, 223, 206, 225, 144, + 130, 1, 223, 111, 216, 183, 130, 1, 210, 22, 130, 1, 210, 23, 209, 200, + 130, 1, 244, 212, 130, 1, 244, 213, 225, 163, 130, 1, 201, 201, 130, 1, + 185, 130, 1, 219, 169, 229, 251, 130, 1, 249, 32, 130, 1, 249, 33, 229, + 187, 130, 1, 192, 130, 1, 198, 130, 1, 216, 220, 130, 1, 228, 113, 130, + 1, 204, 111, 130, 1, 215, 37, 215, 21, 130, 1, 215, 37, 214, 232, 130, 1, + 215, 36, 130, 1, 152, 130, 2, 216, 94, 130, 22, 2, 209, 178, 130, 22, 2, + 207, 8, 130, 22, 2, 207, 9, 214, 228, 130, 22, 2, 210, 224, 130, 22, 2, + 210, 225, 231, 71, 130, 22, 2, 216, 221, 216, 103, 130, 22, 2, 216, 221, + 216, 104, 209, 178, 130, 22, 2, 228, 114, 227, 197, 130, 22, 2, 228, 114, + 227, 198, 209, 178, 130, 22, 2, 209, 235, 130, 22, 2, 209, 236, 216, 103, + 130, 22, 2, 209, 236, 209, 178, 130, 22, 2, 209, 236, 216, 104, 209, 178, + 130, 22, 2, 218, 249, 130, 22, 2, 218, 250, 209, 178, 130, 251, 117, 251, + 116, 130, 1, 230, 23, 214, 227, 130, 1, 229, 111, 214, 227, 130, 1, 207, + 101, 214, 227, 130, 1, 241, 155, 214, 227, 130, 1, 206, 56, 214, 227, + 130, 1, 202, 106, 214, 227, 130, 1, 250, 52, 214, 227, 130, 17, 202, 84, + 130, 17, 105, 130, 17, 108, 130, 17, 147, 130, 17, 149, 130, 17, 170, + 130, 17, 195, 130, 17, 213, 111, 130, 17, 199, 130, 17, 222, 63, 130, + 219, 104, 130, 219, 130, 130, 204, 14, 130, 247, 31, 219, 123, 130, 247, + 31, 212, 139, 130, 247, 31, 219, 75, 130, 219, 129, 130, 31, 16, 243, 91, + 130, 31, 16, 244, 34, 130, 31, 16, 242, 27, 130, 31, 16, 244, 164, 130, + 31, 16, 244, 165, 210, 191, 130, 31, 16, 243, 175, 130, 31, 16, 244, 205, + 130, 31, 16, 244, 10, 130, 31, 16, 244, 187, 130, 31, 16, 244, 165, 238, + 184, 130, 31, 16, 39, 209, 171, 130, 31, 16, 39, 241, 82, 130, 31, 16, + 39, 229, 182, 130, 31, 16, 39, 229, 184, 130, 31, 16, 39, 230, 157, 130, + 31, 16, 39, 229, 183, 3, 230, 157, 130, 31, 16, 39, 229, 185, 3, 230, + 157, 130, 31, 16, 39, 248, 119, 130, 31, 16, 39, 238, 29, 130, 31, 16, + 216, 14, 171, 242, 37, 130, 31, 16, 216, 14, 171, 244, 203, 130, 31, 16, + 216, 14, 246, 16, 207, 195, 130, 31, 16, 216, 14, 246, 16, 209, 244, 130, + 31, 16, 227, 220, 171, 219, 118, 130, 31, 16, 227, 220, 171, 217, 177, + 130, 31, 16, 227, 220, 246, 16, 218, 94, 130, 31, 16, 227, 220, 246, 16, + 218, 80, 130, 31, 16, 227, 220, 171, 218, 119, 210, 213, 2, 219, 101, + 210, 213, 2, 219, 114, 210, 213, 2, 219, 110, 210, 213, 1, 63, 210, 213, + 1, 75, 210, 213, 1, 68, 210, 213, 1, 251, 109, 210, 213, 1, 78, 210, 213, + 1, 74, 210, 213, 1, 240, 238, 210, 213, 1, 173, 210, 213, 1, 217, 126, + 210, 213, 1, 239, 8, 210, 213, 1, 222, 203, 210, 213, 1, 247, 92, 210, + 213, 1, 230, 181, 210, 213, 1, 202, 116, 210, 213, 1, 221, 11, 210, 213, + 1, 210, 22, 210, 213, 1, 244, 212, 210, 213, 1, 201, 201, 210, 213, 1, + 185, 210, 213, 1, 240, 108, 210, 213, 1, 206, 86, 210, 213, 1, 249, 32, + 210, 213, 1, 192, 210, 213, 1, 198, 210, 213, 1, 216, 220, 210, 213, 1, + 228, 113, 210, 213, 1, 204, 111, 210, 213, 1, 215, 36, 210, 213, 1, 203, + 182, 210, 213, 1, 152, 210, 213, 109, 2, 219, 127, 210, 213, 109, 2, 219, + 103, 210, 213, 109, 2, 219, 100, 210, 213, 22, 2, 219, 117, 210, 213, 22, + 2, 219, 99, 210, 213, 22, 2, 219, 121, 210, 213, 22, 2, 219, 109, 210, + 213, 22, 2, 219, 128, 210, 213, 22, 2, 219, 119, 210, 213, 2, 219, 131, + 210, 213, 2, 205, 204, 210, 213, 109, 2, 219, 64, 192, 210, 213, 109, 2, + 219, 64, 204, 111, 210, 213, 1, 229, 144, 210, 213, 1, 210, 150, 210, + 213, 17, 202, 84, 210, 213, 17, 105, 210, 213, 17, 108, 210, 213, 17, + 147, 210, 213, 17, 149, 210, 213, 17, 170, 210, 213, 17, 195, 210, 213, + 17, 213, 111, 210, 213, 17, 199, 210, 213, 17, 222, 63, 210, 213, 250, + 17, 210, 213, 1, 216, 76, 210, 213, 1, 227, 171, 210, 213, 1, 248, 98, + 210, 213, 1, 46, 230, 54, 210, 213, 1, 46, 226, 185, 248, 208, 1, 63, + 248, 208, 1, 212, 131, 63, 248, 208, 1, 152, 248, 208, 1, 212, 131, 152, + 248, 208, 1, 225, 117, 152, 248, 208, 1, 249, 32, 248, 208, 1, 229, 236, + 249, 32, 248, 208, 1, 185, 248, 208, 1, 212, 131, 185, 248, 208, 1, 201, + 201, 248, 208, 1, 225, 117, 201, 201, 248, 208, 1, 204, 111, 248, 208, 1, + 212, 131, 204, 111, 248, 208, 1, 219, 143, 204, 111, 248, 208, 1, 239, 8, + 248, 208, 1, 212, 131, 239, 8, 248, 208, 1, 230, 181, 248, 208, 1, 244, + 212, 248, 208, 1, 216, 220, 248, 208, 1, 212, 131, 216, 220, 248, 208, 1, + 192, 248, 208, 1, 212, 131, 192, 248, 208, 1, 211, 236, 210, 22, 248, + 208, 1, 221, 170, 210, 22, 248, 208, 1, 215, 36, 248, 208, 1, 212, 131, + 215, 36, 248, 208, 1, 225, 117, 215, 36, 248, 208, 1, 198, 248, 208, 1, + 212, 131, 198, 248, 208, 1, 222, 203, 248, 208, 1, 228, 113, 248, 208, 1, + 212, 131, 228, 113, 248, 208, 1, 221, 11, 248, 208, 1, 247, 92, 248, 208, + 1, 223, 25, 248, 208, 1, 225, 54, 248, 208, 1, 75, 248, 208, 1, 68, 248, + 208, 2, 208, 164, 248, 208, 22, 2, 74, 248, 208, 22, 2, 219, 143, 74, + 248, 208, 22, 2, 241, 161, 248, 208, 22, 2, 75, 248, 208, 22, 2, 229, + 236, 75, 248, 208, 22, 2, 78, 248, 208, 22, 2, 229, 236, 78, 248, 208, + 22, 2, 68, 248, 208, 22, 2, 106, 35, 212, 131, 215, 36, 248, 208, 109, 2, + 222, 205, 248, 208, 109, 2, 237, 171, 248, 208, 219, 112, 248, 208, 219, + 108, 248, 208, 16, 248, 64, 223, 111, 224, 218, 248, 208, 16, 248, 64, + 218, 122, 248, 208, 16, 248, 64, 230, 79, 248, 208, 16, 248, 64, 219, + 112, 227, 181, 1, 173, 227, 181, 1, 229, 40, 227, 181, 1, 229, 144, 227, + 181, 1, 239, 8, 227, 181, 1, 238, 51, 227, 181, 1, 222, 203, 227, 181, 1, + 247, 92, 227, 181, 1, 246, 199, 227, 181, 1, 230, 181, 227, 181, 1, 221, + 11, 227, 181, 1, 210, 22, 227, 181, 1, 209, 108, 227, 181, 1, 244, 212, + 227, 181, 1, 201, 201, 227, 181, 1, 185, 227, 181, 1, 218, 98, 227, 181, + 1, 218, 208, 227, 181, 1, 240, 108, 227, 181, 1, 239, 227, 227, 181, 1, + 249, 32, 227, 181, 1, 248, 44, 227, 181, 1, 192, 227, 181, 1, 224, 89, + 227, 181, 1, 208, 20, 227, 181, 1, 208, 10, 227, 181, 1, 241, 255, 227, + 181, 1, 198, 227, 181, 1, 216, 220, 227, 181, 1, 228, 113, 227, 181, 1, + 152, 227, 181, 1, 236, 224, 227, 181, 1, 206, 86, 227, 181, 1, 215, 36, + 227, 181, 1, 213, 90, 227, 181, 1, 204, 111, 227, 181, 1, 63, 227, 181, + 210, 254, 1, 198, 227, 181, 210, 254, 1, 216, 220, 227, 181, 22, 2, 252, + 25, 227, 181, 22, 2, 75, 227, 181, 22, 2, 78, 227, 181, 22, 2, 220, 18, + 227, 181, 22, 2, 68, 227, 181, 22, 2, 206, 178, 227, 181, 22, 2, 74, 227, + 181, 109, 2, 230, 54, 227, 181, 109, 2, 226, 185, 227, 181, 109, 2, 159, + 227, 181, 109, 2, 223, 163, 227, 181, 109, 2, 219, 184, 227, 181, 109, 2, + 146, 227, 181, 109, 2, 210, 69, 227, 181, 109, 2, 220, 241, 227, 181, + 109, 2, 230, 0, 227, 181, 2, 216, 181, 227, 181, 2, 221, 51, 227, 181, + 217, 179, 210, 20, 227, 181, 217, 179, 220, 252, 209, 5, 210, 20, 227, + 181, 217, 179, 246, 206, 227, 181, 217, 179, 208, 2, 246, 206, 227, 181, + 217, 179, 208, 1, 227, 181, 17, 202, 84, 227, 181, 17, 105, 227, 181, 17, + 108, 227, 181, 17, 147, 227, 181, 17, 149, 227, 181, 17, 170, 227, 181, + 17, 195, 227, 181, 17, 213, 111, 227, 181, 17, 199, 227, 181, 17, 222, + 63, 227, 181, 1, 207, 241, 227, 181, 1, 207, 229, 227, 181, 1, 244, 120, + 220, 47, 246, 135, 17, 202, 84, 220, 47, 246, 135, 17, 105, 220, 47, 246, + 135, 17, 108, 220, 47, 246, 135, 17, 147, 220, 47, 246, 135, 17, 149, + 220, 47, 246, 135, 17, 170, 220, 47, 246, 135, 17, 195, 220, 47, 246, + 135, 17, 213, 111, 220, 47, 246, 135, 17, 199, 220, 47, 246, 135, 17, + 222, 63, 220, 47, 246, 135, 1, 228, 113, 220, 47, 246, 135, 1, 250, 49, + 220, 47, 246, 135, 1, 251, 81, 220, 47, 246, 135, 1, 250, 223, 220, 47, + 246, 135, 1, 251, 39, 220, 47, 246, 135, 1, 228, 112, 220, 47, 246, 135, + 1, 251, 243, 220, 47, 246, 135, 1, 251, 244, 220, 47, 246, 135, 1, 251, + 242, 220, 47, 246, 135, 1, 251, 237, 220, 47, 246, 135, 1, 227, 148, 220, + 47, 246, 135, 1, 230, 215, 220, 47, 246, 135, 1, 231, 84, 220, 47, 246, + 135, 1, 230, 236, 220, 47, 246, 135, 1, 230, 224, 220, 47, 246, 135, 1, + 226, 239, 220, 47, 246, 135, 1, 207, 31, 220, 47, 246, 135, 1, 207, 29, + 220, 47, 246, 135, 1, 206, 229, 220, 47, 246, 135, 1, 206, 170, 220, 47, + 246, 135, 1, 227, 234, 220, 47, 246, 135, 1, 241, 46, 220, 47, 246, 135, + 1, 241, 164, 220, 47, 246, 135, 1, 241, 92, 220, 47, 246, 135, 1, 241, + 21, 220, 47, 246, 135, 1, 227, 49, 220, 47, 246, 135, 1, 219, 219, 220, + 47, 246, 135, 1, 220, 93, 220, 47, 246, 135, 1, 219, 206, 220, 47, 246, + 135, 1, 220, 60, 220, 47, 246, 135, 223, 247, 207, 206, 220, 47, 246, + 135, 239, 3, 207, 207, 220, 47, 246, 135, 223, 245, 207, 207, 220, 47, + 246, 135, 216, 118, 220, 47, 246, 135, 218, 206, 220, 47, 246, 135, 251, + 72, 220, 47, 246, 135, 217, 179, 223, 241, 220, 47, 246, 135, 217, 179, + 52, 223, 241, 210, 213, 217, 179, 248, 64, 210, 184, 210, 213, 217, 179, + 248, 64, 219, 113, 210, 213, 217, 179, 248, 64, 217, 167, 210, 213, 217, + 179, 248, 64, 247, 77, 210, 213, 217, 179, 248, 64, 227, 172, 214, 224, + 210, 213, 217, 179, 248, 64, 230, 44, 214, 224, 210, 213, 217, 179, 248, + 64, 244, 213, 214, 224, 210, 213, 217, 179, 248, 64, 249, 33, 214, 224, + 206, 52, 143, 229, 234, 206, 52, 143, 213, 58, 206, 52, 143, 217, 245, + 206, 52, 2, 222, 76, 206, 52, 2, 203, 87, 224, 146, 210, 175, 206, 52, + 143, 203, 87, 251, 77, 231, 36, 210, 175, 206, 52, 143, 203, 87, 231, 36, + 210, 175, 206, 52, 143, 203, 87, 229, 222, 231, 36, 210, 175, 206, 52, + 143, 247, 55, 56, 206, 52, 143, 203, 87, 229, 222, 231, 36, 210, 176, + 214, 194, 206, 52, 143, 52, 210, 175, 206, 52, 143, 208, 70, 210, 175, + 206, 52, 143, 229, 222, 250, 182, 206, 52, 143, 70, 56, 206, 52, 143, + 120, 187, 56, 206, 52, 143, 126, 187, 56, 206, 52, 143, 216, 4, 229, 233, + 231, 36, 210, 175, 206, 52, 143, 250, 47, 231, 36, 210, 175, 206, 52, 2, + 205, 200, 210, 175, 206, 52, 2, 205, 200, 207, 26, 206, 52, 2, 216, 73, + 205, 200, 207, 26, 206, 52, 2, 205, 200, 250, 182, 206, 52, 2, 216, 73, + 205, 200, 250, 182, 206, 52, 2, 205, 200, 207, 27, 3, 209, 248, 206, 52, + 2, 205, 200, 250, 183, 3, 209, 248, 206, 52, 2, 250, 181, 250, 197, 206, + 52, 2, 250, 181, 249, 2, 206, 52, 2, 250, 181, 206, 77, 206, 52, 2, 250, + 181, 206, 78, 3, 209, 248, 206, 52, 2, 208, 201, 206, 52, 2, 237, 15, + 163, 250, 180, 206, 52, 2, 163, 250, 180, 206, 52, 2, 215, 147, 163, 250, + 180, 206, 52, 2, 250, 181, 207, 33, 223, 232, 206, 52, 2, 250, 122, 206, + 52, 2, 215, 198, 250, 122, 206, 52, 143, 247, 55, 55, 206, 52, 2, 230, + 135, 206, 52, 2, 206, 222, 206, 52, 143, 215, 253, 55, 206, 52, 143, 52, + 215, 253, 55, 8, 1, 5, 6, 63, 8, 1, 5, 6, 251, 109, 8, 5, 1, 207, 174, + 251, 109, 8, 1, 5, 6, 248, 225, 249, 255, 8, 1, 5, 6, 247, 125, 8, 1, 5, + 6, 245, 51, 8, 1, 5, 6, 240, 243, 8, 1, 5, 6, 74, 8, 5, 1, 207, 174, 171, + 74, 8, 5, 1, 207, 174, 75, 8, 1, 5, 6, 230, 184, 8, 1, 5, 6, 230, 54, 8, + 1, 5, 6, 228, 131, 3, 95, 8, 1, 5, 6, 226, 185, 8, 1, 5, 6, 216, 73, 223, + 163, 8, 1, 5, 6, 78, 8, 1, 5, 6, 171, 78, 8, 5, 1, 212, 154, 78, 8, 5, 1, + 212, 154, 171, 78, 8, 5, 1, 212, 154, 158, 3, 95, 8, 5, 1, 207, 174, 220, + 73, 8, 1, 5, 6, 219, 216, 8, 5, 1, 208, 145, 162, 78, 8, 5, 1, 247, 248, + 162, 78, 8, 1, 5, 6, 219, 184, 8, 1, 5, 6, 216, 73, 146, 8, 1, 5, 6, 207, + 174, 146, 8, 1, 5, 6, 210, 69, 8, 1, 5, 6, 68, 8, 5, 1, 212, 154, 68, 8, + 5, 1, 212, 154, 243, 229, 68, 8, 5, 1, 212, 154, 207, 174, 226, 185, 8, + 1, 5, 6, 206, 164, 8, 1, 5, 6, 204, 144, 8, 1, 5, 6, 202, 159, 8, 1, 5, + 6, 240, 177, 8, 1, 205, 186, 228, 3, 211, 200, 8, 1, 251, 59, 30, 1, 5, + 6, 238, 235, 30, 1, 5, 6, 228, 24, 30, 1, 5, 6, 218, 167, 30, 1, 5, 6, + 216, 59, 30, 1, 5, 6, 217, 202, 36, 1, 5, 6, 241, 122, 65, 1, 6, 63, 65, + 1, 6, 251, 109, 65, 1, 6, 249, 255, 65, 1, 6, 248, 225, 249, 255, 65, 1, + 6, 245, 51, 65, 1, 6, 74, 65, 1, 6, 216, 73, 74, 65, 1, 6, 239, 75, 65, + 1, 6, 237, 171, 65, 1, 6, 75, 65, 1, 6, 230, 184, 65, 1, 6, 230, 54, 65, + 1, 6, 159, 65, 1, 6, 226, 185, 65, 1, 6, 223, 163, 65, 1, 6, 216, 73, + 223, 163, 65, 1, 6, 78, 65, 1, 6, 219, 216, 65, 1, 6, 219, 184, 65, 1, 6, + 146, 65, 1, 6, 210, 69, 65, 1, 6, 68, 65, 1, 6, 204, 144, 65, 1, 5, 63, + 65, 1, 5, 207, 174, 63, 65, 1, 5, 251, 2, 65, 1, 5, 207, 174, 251, 109, + 65, 1, 5, 249, 255, 65, 1, 5, 245, 51, 65, 1, 5, 74, 65, 1, 5, 214, 192, + 65, 1, 5, 171, 74, 65, 1, 5, 207, 174, 171, 74, 65, 1, 5, 239, 75, 65, 1, + 5, 207, 174, 75, 65, 1, 5, 230, 54, 65, 1, 5, 226, 185, 65, 1, 5, 241, + 78, 65, 1, 5, 78, 65, 1, 5, 171, 78, 65, 1, 5, 208, 145, 162, 78, 65, 1, + 5, 247, 248, 162, 78, 65, 1, 5, 219, 184, 65, 1, 5, 210, 69, 65, 1, 5, + 68, 65, 1, 5, 212, 154, 68, 65, 1, 5, 207, 174, 226, 185, 65, 1, 5, 206, + 164, 65, 1, 5, 251, 59, 65, 1, 5, 248, 106, 65, 1, 5, 30, 238, 235, 65, + 1, 5, 244, 37, 65, 1, 5, 30, 218, 192, 65, 1, 5, 246, 142, 8, 210, 246, + 5, 1, 75, 8, 210, 246, 5, 1, 146, 8, 210, 246, 5, 1, 68, 8, 210, 246, 5, + 1, 206, 164, 30, 210, 246, 5, 1, 248, 106, 30, 210, 246, 5, 1, 238, 235, + 30, 210, 246, 5, 1, 216, 59, 30, 210, 246, 5, 1, 218, 192, 30, 210, 246, + 5, 1, 246, 142, 8, 5, 1, 207, 24, 8, 5, 1, 66, 3, 101, 208, 227, 8, 5, 1, + 245, 52, 3, 101, 208, 227, 8, 5, 1, 240, 175, 3, 101, 208, 227, 8, 5, 1, + 226, 186, 3, 101, 208, 227, 8, 5, 1, 223, 164, 3, 101, 208, 227, 8, 5, 1, + 219, 185, 3, 101, 208, 227, 8, 5, 1, 217, 1, 3, 101, 208, 227, 8, 5, 1, + 217, 1, 3, 239, 241, 25, 101, 208, 227, 8, 5, 1, 215, 94, 3, 101, 208, + 227, 8, 5, 1, 210, 70, 3, 101, 208, 227, 8, 5, 1, 202, 160, 3, 101, 208, + 227, 8, 5, 1, 207, 174, 239, 75, 65, 1, 36, 241, 92, 8, 5, 1, 231, 4, + 239, 75, 8, 5, 1, 209, 111, 3, 211, 36, 8, 5, 6, 1, 235, 206, 3, 95, 8, + 5, 1, 230, 231, 3, 95, 8, 5, 1, 219, 185, 3, 95, 8, 5, 6, 1, 106, 3, 95, + 8, 5, 1, 206, 217, 3, 95, 8, 5, 1, 66, 3, 219, 142, 113, 8, 5, 1, 245, + 52, 3, 219, 142, 113, 8, 5, 1, 240, 175, 3, 219, 142, 113, 8, 5, 1, 239, + 76, 3, 219, 142, 113, 8, 5, 1, 230, 55, 3, 219, 142, 113, 8, 5, 1, 228, + 131, 3, 219, 142, 113, 8, 5, 1, 226, 186, 3, 219, 142, 113, 8, 5, 1, 223, + 164, 3, 219, 142, 113, 8, 5, 1, 219, 185, 3, 219, 142, 113, 8, 5, 1, 217, + 1, 3, 219, 142, 113, 8, 5, 1, 215, 94, 3, 219, 142, 113, 8, 5, 1, 241, 8, + 3, 219, 142, 113, 8, 5, 1, 206, 165, 3, 219, 142, 113, 8, 5, 1, 203, 197, + 3, 219, 142, 113, 8, 5, 1, 202, 160, 3, 219, 142, 113, 8, 5, 1, 34, 3, + 216, 79, 113, 8, 5, 1, 251, 3, 3, 216, 79, 113, 8, 5, 1, 245, 52, 3, 236, + 116, 25, 209, 248, 8, 5, 1, 188, 3, 216, 79, 113, 8, 5, 1, 171, 188, 3, + 216, 79, 113, 8, 5, 1, 216, 73, 171, 188, 3, 216, 79, 113, 8, 5, 1, 214, + 193, 3, 216, 79, 113, 8, 5, 1, 235, 206, 3, 216, 79, 113, 8, 5, 1, 171, + 158, 3, 216, 79, 113, 8, 5, 1, 241, 8, 3, 216, 79, 113, 8, 5, 1, 106, 3, + 216, 79, 113, 8, 5, 1, 240, 178, 3, 216, 79, 113, 65, 1, 5, 207, 174, + 251, 2, 65, 1, 5, 247, 125, 65, 1, 5, 247, 126, 3, 245, 95, 65, 1, 5, + 240, 243, 65, 1, 5, 216, 73, 171, 74, 65, 1, 5, 240, 174, 65, 1, 5, 243, + 84, 230, 185, 3, 95, 65, 1, 5, 132, 239, 75, 65, 1, 5, 207, 174, 237, + 171, 65, 1, 5, 235, 206, 3, 95, 65, 1, 5, 230, 230, 65, 1, 5, 6, 75, 65, + 1, 5, 6, 235, 206, 3, 95, 65, 1, 5, 230, 185, 3, 245, 126, 65, 1, 5, 228, + 131, 3, 216, 79, 113, 65, 1, 5, 228, 131, 3, 219, 142, 113, 65, 1, 5, 6, + 159, 65, 1, 5, 226, 186, 3, 113, 65, 1, 5, 207, 174, 226, 186, 3, 163, + 227, 210, 65, 1, 5, 223, 164, 3, 49, 113, 65, 1, 5, 223, 164, 3, 216, 79, + 113, 65, 1, 5, 6, 223, 163, 65, 1, 5, 248, 225, 78, 65, 1, 5, 218, 192, + 65, 1, 5, 215, 94, 3, 113, 65, 1, 5, 241, 7, 65, 1, 5, 210, 70, 3, 219, + 142, 113, 65, 1, 5, 106, 142, 65, 1, 5, 206, 216, 65, 1, 5, 6, 68, 65, 1, + 5, 206, 165, 3, 113, 65, 1, 5, 207, 174, 206, 164, 65, 1, 5, 202, 159, + 65, 1, 5, 202, 160, 3, 216, 79, 113, 65, 1, 5, 202, 160, 3, 245, 95, 65, + 1, 5, 240, 177, 65, 1, 5, 209, 74, 39, 242, 83, 237, 254, 251, 138, 39, + 242, 83, 251, 126, 251, 138, 39, 212, 25, 56, 39, 210, 182, 82, 39, 225, + 169, 39, 237, 251, 39, 225, 167, 39, 251, 124, 39, 237, 252, 39, 251, + 125, 39, 8, 5, 1, 217, 1, 56, 39, 247, 213, 39, 225, 168, 39, 52, 246, + 53, 55, 39, 220, 63, 55, 39, 202, 30, 56, 39, 230, 216, 56, 39, 206, 211, + 55, 39, 206, 194, 55, 39, 8, 5, 1, 239, 214, 171, 34, 55, 39, 8, 5, 1, + 251, 109, 39, 8, 5, 1, 250, 178, 39, 8, 5, 1, 250, 18, 39, 8, 5, 1, 247, + 126, 246, 231, 39, 8, 5, 1, 231, 4, 245, 51, 39, 8, 5, 1, 240, 243, 39, + 8, 5, 1, 239, 75, 39, 8, 1, 5, 6, 239, 75, 39, 8, 5, 1, 230, 54, 39, 8, + 5, 1, 159, 39, 8, 1, 5, 6, 159, 39, 8, 1, 5, 6, 226, 185, 39, 8, 5, 1, + 223, 163, 39, 8, 1, 5, 6, 223, 163, 39, 8, 1, 5, 6, 146, 39, 8, 5, 1, + 217, 1, 215, 192, 39, 8, 5, 1, 194, 39, 8, 5, 1, 163, 194, 39, 8, 5, 1, + 202, 159, 39, 8, 5, 1, 251, 2, 39, 8, 5, 1, 249, 255, 39, 8, 5, 1, 248, + 106, 39, 8, 5, 1, 214, 192, 39, 8, 5, 1, 240, 174, 39, 8, 5, 1, 228, 131, + 3, 52, 101, 208, 227, 39, 8, 5, 1, 158, 3, 157, 246, 219, 95, 39, 8, 5, + 1, 219, 184, 39, 8, 5, 1, 241, 7, 39, 8, 5, 1, 106, 3, 157, 246, 219, 95, + 39, 8, 5, 1, 204, 144, 39, 8, 5, 1, 34, 3, 243, 231, 39, 8, 5, 1, 158, 3, + 243, 231, 39, 8, 5, 1, 106, 3, 243, 231, 39, 112, 210, 4, 55, 39, 52, + 230, 239, 247, 215, 56, 39, 251, 7, 156, 208, 173, 56, 39, 49, 250, 95, + 55, 39, 50, 250, 95, 25, 121, 250, 95, 56, 8, 6, 1, 34, 3, 215, 253, 56, + 8, 5, 1, 34, 3, 215, 253, 56, 8, 6, 1, 66, 3, 70, 55, 8, 5, 1, 66, 3, 70, + 55, 8, 6, 1, 66, 3, 70, 56, 8, 5, 1, 66, 3, 70, 56, 8, 6, 1, 66, 3, 227, + 115, 56, 8, 5, 1, 66, 3, 227, 115, 56, 8, 6, 1, 247, 126, 3, 246, 232, + 25, 165, 8, 5, 1, 247, 126, 3, 246, 232, 25, 165, 8, 6, 1, 245, 52, 3, + 70, 55, 8, 5, 1, 245, 52, 3, 70, 55, 8, 6, 1, 245, 52, 3, 70, 56, 8, 5, + 1, 245, 52, 3, 70, 56, 8, 6, 1, 245, 52, 3, 227, 115, 56, 8, 5, 1, 245, + 52, 3, 227, 115, 56, 8, 6, 1, 245, 52, 3, 246, 231, 8, 5, 1, 245, 52, 3, + 246, 231, 8, 6, 1, 245, 52, 3, 246, 53, 56, 8, 5, 1, 245, 52, 3, 246, 53, + 56, 8, 6, 1, 188, 3, 225, 171, 25, 237, 253, 8, 5, 1, 188, 3, 225, 171, + 25, 237, 253, 8, 6, 1, 188, 3, 225, 171, 25, 165, 8, 5, 1, 188, 3, 225, + 171, 25, 165, 8, 6, 1, 188, 3, 246, 53, 56, 8, 5, 1, 188, 3, 246, 53, 56, + 8, 6, 1, 188, 3, 208, 228, 56, 8, 5, 1, 188, 3, 208, 228, 56, 8, 6, 1, + 188, 3, 246, 232, 25, 247, 214, 8, 5, 1, 188, 3, 246, 232, 25, 247, 214, + 8, 6, 1, 240, 175, 3, 70, 55, 8, 5, 1, 240, 175, 3, 70, 55, 8, 6, 1, 239, + 76, 3, 225, 170, 8, 5, 1, 239, 76, 3, 225, 170, 8, 6, 1, 237, 172, 3, 70, + 55, 8, 5, 1, 237, 172, 3, 70, 55, 8, 6, 1, 237, 172, 3, 70, 56, 8, 5, 1, + 237, 172, 3, 70, 56, 8, 6, 1, 237, 172, 3, 243, 231, 8, 5, 1, 237, 172, + 3, 243, 231, 8, 6, 1, 237, 172, 3, 246, 231, 8, 5, 1, 237, 172, 3, 246, + 231, 8, 6, 1, 237, 172, 3, 247, 215, 56, 8, 5, 1, 237, 172, 3, 247, 215, + 56, 8, 6, 1, 235, 206, 3, 208, 228, 56, 8, 5, 1, 235, 206, 3, 208, 228, + 56, 8, 6, 1, 235, 206, 3, 243, 232, 25, 165, 8, 5, 1, 235, 206, 3, 243, + 232, 25, 165, 8, 6, 1, 230, 55, 3, 165, 8, 5, 1, 230, 55, 3, 165, 8, 6, + 1, 230, 55, 3, 70, 56, 8, 5, 1, 230, 55, 3, 70, 56, 8, 6, 1, 230, 55, 3, + 227, 115, 56, 8, 5, 1, 230, 55, 3, 227, 115, 56, 8, 6, 1, 228, 131, 3, + 70, 56, 8, 5, 1, 228, 131, 3, 70, 56, 8, 6, 1, 228, 131, 3, 70, 248, 126, + 25, 225, 170, 8, 5, 1, 228, 131, 3, 70, 248, 126, 25, 225, 170, 8, 6, 1, + 228, 131, 3, 227, 115, 56, 8, 5, 1, 228, 131, 3, 227, 115, 56, 8, 6, 1, + 228, 131, 3, 246, 53, 56, 8, 5, 1, 228, 131, 3, 246, 53, 56, 8, 6, 1, + 226, 186, 3, 165, 8, 5, 1, 226, 186, 3, 165, 8, 6, 1, 226, 186, 3, 70, + 55, 8, 5, 1, 226, 186, 3, 70, 55, 8, 6, 1, 226, 186, 3, 70, 56, 8, 5, 1, + 226, 186, 3, 70, 56, 8, 6, 1, 223, 164, 3, 70, 55, 8, 5, 1, 223, 164, 3, + 70, 55, 8, 6, 1, 223, 164, 3, 70, 56, 8, 5, 1, 223, 164, 3, 70, 56, 8, 6, + 1, 223, 164, 3, 227, 115, 56, 8, 5, 1, 223, 164, 3, 227, 115, 56, 8, 6, + 1, 223, 164, 3, 246, 53, 56, 8, 5, 1, 223, 164, 3, 246, 53, 56, 8, 6, 1, + 158, 3, 208, 228, 25, 165, 8, 5, 1, 158, 3, 208, 228, 25, 165, 8, 6, 1, + 158, 3, 208, 228, 25, 243, 231, 8, 5, 1, 158, 3, 208, 228, 25, 243, 231, + 8, 6, 1, 158, 3, 225, 171, 25, 237, 253, 8, 5, 1, 158, 3, 225, 171, 25, + 237, 253, 8, 6, 1, 158, 3, 225, 171, 25, 165, 8, 5, 1, 158, 3, 225, 171, + 25, 165, 8, 6, 1, 219, 185, 3, 165, 8, 5, 1, 219, 185, 3, 165, 8, 6, 1, + 219, 185, 3, 70, 55, 8, 5, 1, 219, 185, 3, 70, 55, 8, 6, 1, 217, 1, 3, + 70, 55, 8, 5, 1, 217, 1, 3, 70, 55, 8, 6, 1, 217, 1, 3, 70, 56, 8, 5, 1, + 217, 1, 3, 70, 56, 8, 6, 1, 217, 1, 3, 70, 248, 126, 25, 225, 170, 8, 5, + 1, 217, 1, 3, 70, 248, 126, 25, 225, 170, 8, 6, 1, 217, 1, 3, 227, 115, + 56, 8, 5, 1, 217, 1, 3, 227, 115, 56, 8, 6, 1, 215, 94, 3, 70, 55, 8, 5, + 1, 215, 94, 3, 70, 55, 8, 6, 1, 215, 94, 3, 70, 56, 8, 5, 1, 215, 94, 3, + 70, 56, 8, 6, 1, 215, 94, 3, 251, 126, 25, 70, 55, 8, 5, 1, 215, 94, 3, + 251, 126, 25, 70, 55, 8, 6, 1, 215, 94, 3, 247, 30, 25, 70, 55, 8, 5, 1, + 215, 94, 3, 247, 30, 25, 70, 55, 8, 6, 1, 215, 94, 3, 70, 248, 126, 25, + 70, 55, 8, 5, 1, 215, 94, 3, 70, 248, 126, 25, 70, 55, 8, 6, 1, 210, 70, + 3, 70, 55, 8, 5, 1, 210, 70, 3, 70, 55, 8, 6, 1, 210, 70, 3, 70, 56, 8, + 5, 1, 210, 70, 3, 70, 56, 8, 6, 1, 210, 70, 3, 227, 115, 56, 8, 5, 1, + 210, 70, 3, 227, 115, 56, 8, 6, 1, 210, 70, 3, 246, 53, 56, 8, 5, 1, 210, + 70, 3, 246, 53, 56, 8, 6, 1, 106, 3, 243, 232, 56, 8, 5, 1, 106, 3, 243, + 232, 56, 8, 6, 1, 106, 3, 208, 228, 56, 8, 5, 1, 106, 3, 208, 228, 56, 8, + 6, 1, 106, 3, 246, 53, 56, 8, 5, 1, 106, 3, 246, 53, 56, 8, 6, 1, 106, 3, + 208, 228, 25, 165, 8, 5, 1, 106, 3, 208, 228, 25, 165, 8, 6, 1, 106, 3, + 225, 171, 25, 243, 231, 8, 5, 1, 106, 3, 225, 171, 25, 243, 231, 8, 6, 1, + 206, 165, 3, 208, 227, 8, 5, 1, 206, 165, 3, 208, 227, 8, 6, 1, 206, 165, + 3, 70, 56, 8, 5, 1, 206, 165, 3, 70, 56, 8, 6, 1, 204, 145, 3, 237, 253, + 8, 5, 1, 204, 145, 3, 237, 253, 8, 6, 1, 204, 145, 3, 165, 8, 5, 1, 204, + 145, 3, 165, 8, 6, 1, 204, 145, 3, 243, 231, 8, 5, 1, 204, 145, 3, 243, + 231, 8, 6, 1, 204, 145, 3, 70, 55, 8, 5, 1, 204, 145, 3, 70, 55, 8, 6, 1, + 204, 145, 3, 70, 56, 8, 5, 1, 204, 145, 3, 70, 56, 8, 6, 1, 203, 197, 3, + 70, 55, 8, 5, 1, 203, 197, 3, 70, 55, 8, 6, 1, 203, 197, 3, 243, 231, 8, + 5, 1, 203, 197, 3, 243, 231, 8, 6, 1, 203, 125, 3, 70, 55, 8, 5, 1, 203, + 125, 3, 70, 55, 8, 6, 1, 202, 160, 3, 246, 52, 8, 5, 1, 202, 160, 3, 246, + 52, 8, 6, 1, 202, 160, 3, 70, 56, 8, 5, 1, 202, 160, 3, 70, 56, 8, 6, 1, + 202, 160, 3, 227, 115, 56, 8, 5, 1, 202, 160, 3, 227, 115, 56, 8, 5, 1, + 237, 172, 3, 227, 115, 56, 8, 5, 1, 210, 70, 3, 243, 231, 8, 5, 1, 204, + 145, 3, 215, 253, 55, 8, 5, 1, 203, 125, 3, 215, 253, 55, 8, 5, 1, 34, 3, + 50, 162, 215, 252, 8, 5, 1, 163, 215, 94, 3, 70, 55, 8, 5, 1, 163, 215, + 94, 3, 243, 228, 95, 8, 5, 1, 163, 215, 94, 3, 138, 95, 8, 6, 1, 213, 57, + 194, 8, 5, 1, 244, 37, 8, 6, 1, 34, 3, 70, 56, 8, 5, 1, 34, 3, 70, 56, 8, + 6, 1, 34, 3, 236, 116, 55, 8, 5, 1, 34, 3, 236, 116, 55, 8, 6, 1, 34, 3, + 246, 53, 25, 165, 8, 5, 1, 34, 3, 246, 53, 25, 165, 8, 6, 1, 34, 3, 246, + 53, 25, 237, 253, 8, 5, 1, 34, 3, 246, 53, 25, 237, 253, 8, 6, 1, 34, 3, + 246, 53, 25, 236, 116, 55, 8, 5, 1, 34, 3, 246, 53, 25, 236, 116, 55, 8, + 6, 1, 34, 3, 246, 53, 25, 208, 227, 8, 5, 1, 34, 3, 246, 53, 25, 208, + 227, 8, 6, 1, 34, 3, 246, 53, 25, 70, 56, 8, 5, 1, 34, 3, 246, 53, 25, + 70, 56, 8, 6, 1, 34, 3, 247, 215, 25, 165, 8, 5, 1, 34, 3, 247, 215, 25, + 165, 8, 6, 1, 34, 3, 247, 215, 25, 237, 253, 8, 5, 1, 34, 3, 247, 215, + 25, 237, 253, 8, 6, 1, 34, 3, 247, 215, 25, 236, 116, 55, 8, 5, 1, 34, 3, + 247, 215, 25, 236, 116, 55, 8, 6, 1, 34, 3, 247, 215, 25, 208, 227, 8, 5, + 1, 34, 3, 247, 215, 25, 208, 227, 8, 6, 1, 34, 3, 247, 215, 25, 70, 56, + 8, 5, 1, 34, 3, 247, 215, 25, 70, 56, 8, 6, 1, 188, 3, 70, 56, 8, 5, 1, + 188, 3, 70, 56, 8, 6, 1, 188, 3, 236, 116, 55, 8, 5, 1, 188, 3, 236, 116, + 55, 8, 6, 1, 188, 3, 208, 227, 8, 5, 1, 188, 3, 208, 227, 8, 6, 1, 188, + 3, 246, 53, 25, 165, 8, 5, 1, 188, 3, 246, 53, 25, 165, 8, 6, 1, 188, 3, + 246, 53, 25, 237, 253, 8, 5, 1, 188, 3, 246, 53, 25, 237, 253, 8, 6, 1, + 188, 3, 246, 53, 25, 236, 116, 55, 8, 5, 1, 188, 3, 246, 53, 25, 236, + 116, 55, 8, 6, 1, 188, 3, 246, 53, 25, 208, 227, 8, 5, 1, 188, 3, 246, + 53, 25, 208, 227, 8, 6, 1, 188, 3, 246, 53, 25, 70, 56, 8, 5, 1, 188, 3, + 246, 53, 25, 70, 56, 8, 6, 1, 235, 206, 3, 236, 116, 55, 8, 5, 1, 235, + 206, 3, 236, 116, 55, 8, 6, 1, 235, 206, 3, 70, 56, 8, 5, 1, 235, 206, 3, + 70, 56, 8, 6, 1, 158, 3, 70, 56, 8, 5, 1, 158, 3, 70, 56, 8, 6, 1, 158, + 3, 236, 116, 55, 8, 5, 1, 158, 3, 236, 116, 55, 8, 6, 1, 158, 3, 246, 53, + 25, 165, 8, 5, 1, 158, 3, 246, 53, 25, 165, 8, 6, 1, 158, 3, 246, 53, 25, + 237, 253, 8, 5, 1, 158, 3, 246, 53, 25, 237, 253, 8, 6, 1, 158, 3, 246, + 53, 25, 236, 116, 55, 8, 5, 1, 158, 3, 246, 53, 25, 236, 116, 55, 8, 6, + 1, 158, 3, 246, 53, 25, 208, 227, 8, 5, 1, 158, 3, 246, 53, 25, 208, 227, + 8, 6, 1, 158, 3, 246, 53, 25, 70, 56, 8, 5, 1, 158, 3, 246, 53, 25, 70, + 56, 8, 6, 1, 158, 3, 236, 54, 25, 165, 8, 5, 1, 158, 3, 236, 54, 25, 165, + 8, 6, 1, 158, 3, 236, 54, 25, 237, 253, 8, 5, 1, 158, 3, 236, 54, 25, + 237, 253, 8, 6, 1, 158, 3, 236, 54, 25, 236, 116, 55, 8, 5, 1, 158, 3, + 236, 54, 25, 236, 116, 55, 8, 6, 1, 158, 3, 236, 54, 25, 208, 227, 8, 5, + 1, 158, 3, 236, 54, 25, 208, 227, 8, 6, 1, 158, 3, 236, 54, 25, 70, 56, + 8, 5, 1, 158, 3, 236, 54, 25, 70, 56, 8, 6, 1, 106, 3, 70, 56, 8, 5, 1, + 106, 3, 70, 56, 8, 6, 1, 106, 3, 236, 116, 55, 8, 5, 1, 106, 3, 236, 116, + 55, 8, 6, 1, 106, 3, 236, 54, 25, 165, 8, 5, 1, 106, 3, 236, 54, 25, 165, + 8, 6, 1, 106, 3, 236, 54, 25, 237, 253, 8, 5, 1, 106, 3, 236, 54, 25, + 237, 253, 8, 6, 1, 106, 3, 236, 54, 25, 236, 116, 55, 8, 5, 1, 106, 3, + 236, 54, 25, 236, 116, 55, 8, 6, 1, 106, 3, 236, 54, 25, 208, 227, 8, 5, + 1, 106, 3, 236, 54, 25, 208, 227, 8, 6, 1, 106, 3, 236, 54, 25, 70, 56, + 8, 5, 1, 106, 3, 236, 54, 25, 70, 56, 8, 6, 1, 203, 125, 3, 237, 253, 8, + 5, 1, 203, 125, 3, 237, 253, 8, 6, 1, 203, 125, 3, 70, 56, 8, 5, 1, 203, + 125, 3, 70, 56, 8, 6, 1, 203, 125, 3, 236, 116, 55, 8, 5, 1, 203, 125, 3, + 236, 116, 55, 8, 6, 1, 203, 125, 3, 208, 227, 8, 5, 1, 203, 125, 3, 208, + 227, 8, 6, 1, 224, 147, 227, 78, 8, 5, 1, 224, 147, 227, 78, 8, 6, 1, + 224, 147, 206, 164, 8, 5, 1, 224, 147, 206, 164, 8, 6, 1, 203, 125, 3, + 227, 14, 8, 5, 1, 203, 125, 3, 227, 14, 30, 5, 1, 251, 3, 3, 217, 195, + 30, 5, 1, 251, 3, 3, 244, 141, 30, 5, 1, 251, 3, 3, 217, 196, 25, 206, + 70, 30, 5, 1, 251, 3, 3, 244, 142, 25, 206, 70, 30, 5, 1, 251, 3, 3, 217, + 196, 25, 219, 189, 30, 5, 1, 251, 3, 3, 244, 142, 25, 219, 189, 30, 5, 1, + 251, 3, 3, 217, 196, 25, 218, 239, 30, 5, 1, 251, 3, 3, 244, 142, 25, + 218, 239, 30, 6, 1, 251, 3, 3, 217, 195, 30, 6, 1, 251, 3, 3, 244, 141, + 30, 6, 1, 251, 3, 3, 217, 196, 25, 206, 70, 30, 6, 1, 251, 3, 3, 244, + 142, 25, 206, 70, 30, 6, 1, 251, 3, 3, 217, 196, 25, 219, 189, 30, 6, 1, + 251, 3, 3, 244, 142, 25, 219, 189, 30, 6, 1, 251, 3, 3, 217, 196, 25, + 218, 239, 30, 6, 1, 251, 3, 3, 244, 142, 25, 218, 239, 30, 5, 1, 241, 38, + 3, 217, 195, 30, 5, 1, 241, 38, 3, 244, 141, 30, 5, 1, 241, 38, 3, 217, + 196, 25, 206, 70, 30, 5, 1, 241, 38, 3, 244, 142, 25, 206, 70, 30, 5, 1, + 241, 38, 3, 217, 196, 25, 219, 189, 30, 5, 1, 241, 38, 3, 244, 142, 25, + 219, 189, 30, 6, 1, 241, 38, 3, 217, 195, 30, 6, 1, 241, 38, 3, 244, 141, + 30, 6, 1, 241, 38, 3, 217, 196, 25, 206, 70, 30, 6, 1, 241, 38, 3, 244, + 142, 25, 206, 70, 30, 6, 1, 241, 38, 3, 217, 196, 25, 219, 189, 30, 6, 1, + 241, 38, 3, 244, 142, 25, 219, 189, 30, 5, 1, 240, 249, 3, 217, 195, 30, + 5, 1, 240, 249, 3, 244, 141, 30, 5, 1, 240, 249, 3, 217, 196, 25, 206, + 70, 30, 5, 1, 240, 249, 3, 244, 142, 25, 206, 70, 30, 5, 1, 240, 249, 3, + 217, 196, 25, 219, 189, 30, 5, 1, 240, 249, 3, 244, 142, 25, 219, 189, + 30, 5, 1, 240, 249, 3, 217, 196, 25, 218, 239, 30, 5, 1, 240, 249, 3, + 244, 142, 25, 218, 239, 30, 6, 1, 240, 249, 3, 217, 195, 30, 6, 1, 240, + 249, 3, 244, 141, 30, 6, 1, 240, 249, 3, 217, 196, 25, 206, 70, 30, 6, 1, + 240, 249, 3, 244, 142, 25, 206, 70, 30, 6, 1, 240, 249, 3, 217, 196, 25, + 219, 189, 30, 6, 1, 240, 249, 3, 244, 142, 25, 219, 189, 30, 6, 1, 240, + 249, 3, 217, 196, 25, 218, 239, 30, 6, 1, 240, 249, 3, 244, 142, 25, 218, + 239, 30, 5, 1, 230, 231, 3, 217, 195, 30, 5, 1, 230, 231, 3, 244, 141, + 30, 5, 1, 230, 231, 3, 217, 196, 25, 206, 70, 30, 5, 1, 230, 231, 3, 244, + 142, 25, 206, 70, 30, 5, 1, 230, 231, 3, 217, 196, 25, 219, 189, 30, 5, + 1, 230, 231, 3, 244, 142, 25, 219, 189, 30, 5, 1, 230, 231, 3, 217, 196, + 25, 218, 239, 30, 5, 1, 230, 231, 3, 244, 142, 25, 218, 239, 30, 6, 1, + 230, 231, 3, 217, 195, 30, 6, 1, 230, 231, 3, 244, 141, 30, 6, 1, 230, + 231, 3, 217, 196, 25, 206, 70, 30, 6, 1, 230, 231, 3, 244, 142, 25, 206, + 70, 30, 6, 1, 230, 231, 3, 217, 196, 25, 219, 189, 30, 6, 1, 230, 231, 3, + 244, 142, 25, 219, 189, 30, 6, 1, 230, 231, 3, 217, 196, 25, 218, 239, + 30, 6, 1, 230, 231, 3, 244, 142, 25, 218, 239, 30, 5, 1, 220, 35, 3, 217, + 195, 30, 5, 1, 220, 35, 3, 244, 141, 30, 5, 1, 220, 35, 3, 217, 196, 25, + 206, 70, 30, 5, 1, 220, 35, 3, 244, 142, 25, 206, 70, 30, 5, 1, 220, 35, + 3, 217, 196, 25, 219, 189, 30, 5, 1, 220, 35, 3, 244, 142, 25, 219, 189, + 30, 6, 1, 220, 35, 3, 217, 195, 30, 6, 1, 220, 35, 3, 244, 141, 30, 6, 1, + 220, 35, 3, 217, 196, 25, 206, 70, 30, 6, 1, 220, 35, 3, 244, 142, 25, + 206, 70, 30, 6, 1, 220, 35, 3, 217, 196, 25, 219, 189, 30, 6, 1, 220, 35, + 3, 244, 142, 25, 219, 189, 30, 5, 1, 206, 217, 3, 217, 195, 30, 5, 1, + 206, 217, 3, 244, 141, 30, 5, 1, 206, 217, 3, 217, 196, 25, 206, 70, 30, + 5, 1, 206, 217, 3, 244, 142, 25, 206, 70, 30, 5, 1, 206, 217, 3, 217, + 196, 25, 219, 189, 30, 5, 1, 206, 217, 3, 244, 142, 25, 219, 189, 30, 5, + 1, 206, 217, 3, 217, 196, 25, 218, 239, 30, 5, 1, 206, 217, 3, 244, 142, + 25, 218, 239, 30, 6, 1, 206, 217, 3, 244, 141, 30, 6, 1, 206, 217, 3, + 244, 142, 25, 206, 70, 30, 6, 1, 206, 217, 3, 244, 142, 25, 219, 189, 30, + 6, 1, 206, 217, 3, 244, 142, 25, 218, 239, 30, 5, 1, 220, 37, 3, 217, + 195, 30, 5, 1, 220, 37, 3, 244, 141, 30, 5, 1, 220, 37, 3, 217, 196, 25, + 206, 70, 30, 5, 1, 220, 37, 3, 244, 142, 25, 206, 70, 30, 5, 1, 220, 37, + 3, 217, 196, 25, 219, 189, 30, 5, 1, 220, 37, 3, 244, 142, 25, 219, 189, + 30, 5, 1, 220, 37, 3, 217, 196, 25, 218, 239, 30, 5, 1, 220, 37, 3, 244, + 142, 25, 218, 239, 30, 6, 1, 220, 37, 3, 217, 195, 30, 6, 1, 220, 37, 3, + 244, 141, 30, 6, 1, 220, 37, 3, 217, 196, 25, 206, 70, 30, 6, 1, 220, 37, + 3, 244, 142, 25, 206, 70, 30, 6, 1, 220, 37, 3, 217, 196, 25, 219, 189, + 30, 6, 1, 220, 37, 3, 244, 142, 25, 219, 189, 30, 6, 1, 220, 37, 3, 217, + 196, 25, 218, 239, 30, 6, 1, 220, 37, 3, 244, 142, 25, 218, 239, 30, 5, + 1, 251, 3, 3, 206, 70, 30, 5, 1, 251, 3, 3, 219, 189, 30, 5, 1, 241, 38, + 3, 206, 70, 30, 5, 1, 241, 38, 3, 219, 189, 30, 5, 1, 240, 249, 3, 206, + 70, 30, 5, 1, 240, 249, 3, 219, 189, 30, 5, 1, 230, 231, 3, 206, 70, 30, + 5, 1, 230, 231, 3, 219, 189, 30, 5, 1, 220, 35, 3, 206, 70, 30, 5, 1, + 220, 35, 3, 219, 189, 30, 5, 1, 206, 217, 3, 206, 70, 30, 5, 1, 206, 217, + 3, 219, 189, 30, 5, 1, 220, 37, 3, 206, 70, 30, 5, 1, 220, 37, 3, 219, + 189, 30, 5, 1, 251, 3, 3, 217, 196, 25, 202, 221, 30, 5, 1, 251, 3, 3, + 244, 142, 25, 202, 221, 30, 5, 1, 251, 3, 3, 217, 196, 25, 206, 71, 25, + 202, 221, 30, 5, 1, 251, 3, 3, 244, 142, 25, 206, 71, 25, 202, 221, 30, + 5, 1, 251, 3, 3, 217, 196, 25, 219, 190, 25, 202, 221, 30, 5, 1, 251, 3, + 3, 244, 142, 25, 219, 190, 25, 202, 221, 30, 5, 1, 251, 3, 3, 217, 196, + 25, 218, 240, 25, 202, 221, 30, 5, 1, 251, 3, 3, 244, 142, 25, 218, 240, + 25, 202, 221, 30, 6, 1, 251, 3, 3, 217, 196, 25, 217, 209, 30, 6, 1, 251, + 3, 3, 244, 142, 25, 217, 209, 30, 6, 1, 251, 3, 3, 217, 196, 25, 206, 71, + 25, 217, 209, 30, 6, 1, 251, 3, 3, 244, 142, 25, 206, 71, 25, 217, 209, + 30, 6, 1, 251, 3, 3, 217, 196, 25, 219, 190, 25, 217, 209, 30, 6, 1, 251, + 3, 3, 244, 142, 25, 219, 190, 25, 217, 209, 30, 6, 1, 251, 3, 3, 217, + 196, 25, 218, 240, 25, 217, 209, 30, 6, 1, 251, 3, 3, 244, 142, 25, 218, + 240, 25, 217, 209, 30, 5, 1, 240, 249, 3, 217, 196, 25, 202, 221, 30, 5, + 1, 240, 249, 3, 244, 142, 25, 202, 221, 30, 5, 1, 240, 249, 3, 217, 196, + 25, 206, 71, 25, 202, 221, 30, 5, 1, 240, 249, 3, 244, 142, 25, 206, 71, + 25, 202, 221, 30, 5, 1, 240, 249, 3, 217, 196, 25, 219, 190, 25, 202, + 221, 30, 5, 1, 240, 249, 3, 244, 142, 25, 219, 190, 25, 202, 221, 30, 5, + 1, 240, 249, 3, 217, 196, 25, 218, 240, 25, 202, 221, 30, 5, 1, 240, 249, + 3, 244, 142, 25, 218, 240, 25, 202, 221, 30, 6, 1, 240, 249, 3, 217, 196, + 25, 217, 209, 30, 6, 1, 240, 249, 3, 244, 142, 25, 217, 209, 30, 6, 1, + 240, 249, 3, 217, 196, 25, 206, 71, 25, 217, 209, 30, 6, 1, 240, 249, 3, + 244, 142, 25, 206, 71, 25, 217, 209, 30, 6, 1, 240, 249, 3, 217, 196, 25, + 219, 190, 25, 217, 209, 30, 6, 1, 240, 249, 3, 244, 142, 25, 219, 190, + 25, 217, 209, 30, 6, 1, 240, 249, 3, 217, 196, 25, 218, 240, 25, 217, + 209, 30, 6, 1, 240, 249, 3, 244, 142, 25, 218, 240, 25, 217, 209, 30, 5, + 1, 220, 37, 3, 217, 196, 25, 202, 221, 30, 5, 1, 220, 37, 3, 244, 142, + 25, 202, 221, 30, 5, 1, 220, 37, 3, 217, 196, 25, 206, 71, 25, 202, 221, + 30, 5, 1, 220, 37, 3, 244, 142, 25, 206, 71, 25, 202, 221, 30, 5, 1, 220, + 37, 3, 217, 196, 25, 219, 190, 25, 202, 221, 30, 5, 1, 220, 37, 3, 244, + 142, 25, 219, 190, 25, 202, 221, 30, 5, 1, 220, 37, 3, 217, 196, 25, 218, + 240, 25, 202, 221, 30, 5, 1, 220, 37, 3, 244, 142, 25, 218, 240, 25, 202, + 221, 30, 6, 1, 220, 37, 3, 217, 196, 25, 217, 209, 30, 6, 1, 220, 37, 3, + 244, 142, 25, 217, 209, 30, 6, 1, 220, 37, 3, 217, 196, 25, 206, 71, 25, + 217, 209, 30, 6, 1, 220, 37, 3, 244, 142, 25, 206, 71, 25, 217, 209, 30, + 6, 1, 220, 37, 3, 217, 196, 25, 219, 190, 25, 217, 209, 30, 6, 1, 220, + 37, 3, 244, 142, 25, 219, 190, 25, 217, 209, 30, 6, 1, 220, 37, 3, 217, + 196, 25, 218, 240, 25, 217, 209, 30, 6, 1, 220, 37, 3, 244, 142, 25, 218, + 240, 25, 217, 209, 30, 5, 1, 251, 3, 3, 205, 167, 30, 5, 1, 251, 3, 3, + 225, 170, 30, 5, 1, 251, 3, 3, 206, 71, 25, 202, 221, 30, 5, 1, 251, 3, + 3, 202, 221, 30, 5, 1, 251, 3, 3, 219, 190, 25, 202, 221, 30, 5, 1, 251, + 3, 3, 218, 239, 30, 5, 1, 251, 3, 3, 218, 240, 25, 202, 221, 30, 6, 1, + 251, 3, 3, 205, 167, 30, 6, 1, 251, 3, 3, 225, 170, 30, 6, 1, 251, 3, 3, + 206, 70, 30, 6, 1, 251, 3, 3, 219, 189, 30, 6, 1, 251, 3, 3, 217, 209, + 30, 228, 252, 30, 217, 209, 30, 217, 195, 30, 218, 239, 30, 243, 225, 25, + 218, 239, 30, 5, 1, 240, 249, 3, 206, 71, 25, 202, 221, 30, 5, 1, 240, + 249, 3, 202, 221, 30, 5, 1, 240, 249, 3, 219, 190, 25, 202, 221, 30, 5, + 1, 240, 249, 3, 218, 239, 30, 5, 1, 240, 249, 3, 218, 240, 25, 202, 221, + 30, 6, 1, 241, 38, 3, 206, 70, 30, 6, 1, 241, 38, 3, 219, 189, 30, 6, 1, + 240, 249, 3, 206, 70, 30, 6, 1, 240, 249, 3, 219, 189, 30, 6, 1, 240, + 249, 3, 217, 209, 30, 217, 196, 25, 206, 70, 30, 217, 196, 25, 219, 189, + 30, 217, 196, 25, 218, 239, 30, 5, 1, 230, 231, 3, 205, 167, 30, 5, 1, + 230, 231, 3, 225, 170, 30, 5, 1, 230, 231, 3, 243, 225, 25, 206, 70, 30, + 5, 1, 230, 231, 3, 243, 225, 25, 219, 189, 30, 5, 1, 230, 231, 3, 218, + 239, 30, 5, 1, 230, 231, 3, 243, 225, 25, 218, 239, 30, 6, 1, 230, 231, + 3, 205, 167, 30, 6, 1, 230, 231, 3, 225, 170, 30, 6, 1, 230, 231, 3, 206, + 70, 30, 6, 1, 230, 231, 3, 219, 189, 30, 244, 142, 25, 206, 70, 30, 244, + 142, 25, 219, 189, 30, 244, 142, 25, 218, 239, 30, 5, 1, 206, 217, 3, + 205, 167, 30, 5, 1, 206, 217, 3, 225, 170, 30, 5, 1, 206, 217, 3, 243, + 225, 25, 206, 70, 30, 5, 1, 206, 217, 3, 243, 225, 25, 219, 189, 30, 5, + 1, 216, 60, 3, 217, 195, 30, 5, 1, 216, 60, 3, 244, 141, 30, 5, 1, 206, + 217, 3, 218, 239, 30, 5, 1, 206, 217, 3, 243, 225, 25, 218, 239, 30, 6, + 1, 206, 217, 3, 205, 167, 30, 6, 1, 206, 217, 3, 225, 170, 30, 6, 1, 206, + 217, 3, 206, 70, 30, 6, 1, 206, 217, 3, 219, 189, 30, 6, 1, 216, 60, 3, + 244, 141, 30, 243, 225, 25, 206, 70, 30, 243, 225, 25, 219, 189, 30, 206, + 70, 30, 5, 1, 220, 37, 3, 206, 71, 25, 202, 221, 30, 5, 1, 220, 37, 3, + 202, 221, 30, 5, 1, 220, 37, 3, 219, 190, 25, 202, 221, 30, 5, 1, 220, + 37, 3, 218, 239, 30, 5, 1, 220, 37, 3, 218, 240, 25, 202, 221, 30, 6, 1, + 220, 35, 3, 206, 70, 30, 6, 1, 220, 35, 3, 219, 189, 30, 6, 1, 220, 37, + 3, 206, 70, 30, 6, 1, 220, 37, 3, 219, 189, 30, 6, 1, 220, 37, 3, 217, + 209, 30, 219, 189, 30, 244, 141, 241, 93, 217, 62, 241, 104, 217, 62, + 241, 93, 211, 228, 241, 104, 211, 228, 209, 28, 211, 228, 239, 145, 211, + 228, 212, 86, 211, 228, 240, 16, 211, 228, 217, 179, 211, 228, 209, 63, + 211, 228, 237, 146, 211, 228, 202, 85, 204, 24, 211, 228, 202, 85, 204, + 24, 221, 183, 202, 85, 204, 24, 230, 96, 227, 213, 82, 216, 7, 82, 235, + 220, 221, 184, 235, 220, 240, 16, 244, 144, 241, 93, 244, 144, 241, 104, + 244, 144, 236, 106, 142, 52, 80, 227, 114, 52, 124, 227, 114, 49, 212, + 120, 217, 31, 82, 50, 212, 120, 217, 31, 82, 212, 120, 226, 255, 217, 31, + 82, 212, 120, 236, 241, 217, 31, 82, 49, 52, 217, 31, 82, 50, 52, 217, + 31, 82, 52, 226, 255, 217, 31, 82, 52, 236, 241, 217, 31, 82, 244, 195, + 52, 244, 195, 247, 177, 208, 82, 247, 177, 118, 70, 227, 232, 120, 70, + 227, 232, 236, 106, 241, 108, 235, 218, 218, 62, 227, 115, 213, 130, 219, + 89, 213, 130, 227, 213, 241, 102, 216, 7, 241, 102, 218, 42, 243, 165, + 239, 157, 227, 213, 219, 196, 216, 7, 219, 196, 223, 73, 221, 190, 211, + 228, 218, 247, 224, 116, 54, 218, 247, 209, 153, 209, 37, 54, 217, 236, + 52, 217, 236, 208, 70, 217, 236, 216, 73, 217, 236, 216, 73, 52, 217, + 236, 216, 73, 208, 70, 217, 236, 247, 33, 212, 120, 227, 217, 250, 218, + 217, 31, 82, 212, 120, 216, 11, 250, 218, 217, 31, 82, 216, 134, 82, 52, + 240, 212, 82, 230, 247, 219, 198, 206, 243, 167, 208, 250, 247, 34, 231, + 8, 218, 62, 250, 57, 235, 221, 247, 177, 239, 138, 212, 57, 49, 51, 247, + 227, 3, 217, 41, 50, 51, 247, 227, 3, 217, 41, 52, 217, 47, 82, 217, 47, + 240, 212, 82, 240, 212, 217, 47, 82, 208, 203, 2, 240, 250, 216, 73, 218, + 126, 54, 62, 96, 247, 177, 62, 86, 247, 177, 124, 250, 59, 216, 73, 213, + 143, 246, 17, 206, 224, 120, 250, 58, 251, 18, 205, 243, 245, 231, 224, + 103, 54, 210, 153, 244, 144, 230, 239, 206, 243, 239, 198, 217, 179, 82, + 126, 70, 217, 178, 217, 58, 217, 236, 239, 147, 70, 217, 178, 239, 233, + 70, 217, 178, 120, 70, 217, 178, 239, 147, 70, 82, 242, 83, 245, 130, + 208, 81, 80, 239, 147, 243, 83, 225, 10, 13, 211, 228, 203, 238, 230, 96, + 239, 100, 250, 155, 230, 237, 208, 219, 230, 237, 213, 130, 230, 237, + 218, 76, 227, 213, 230, 207, 216, 7, 230, 207, 239, 245, 211, 18, 230, + 207, 218, 42, 243, 165, 230, 207, 231, 20, 210, 101, 210, 170, 251, 128, + 210, 101, 210, 170, 231, 20, 10, 239, 159, 213, 61, 251, 128, 10, 239, + 159, 213, 61, 223, 67, 17, 213, 62, 221, 186, 17, 213, 62, 210, 199, 202, + 84, 210, 199, 8, 5, 1, 75, 210, 199, 149, 210, 199, 170, 210, 199, 195, + 210, 199, 213, 111, 210, 199, 199, 210, 199, 222, 63, 210, 199, 91, 54, + 210, 199, 224, 102, 210, 199, 241, 35, 54, 210, 199, 49, 219, 76, 210, + 199, 50, 219, 76, 210, 199, 8, 5, 1, 223, 163, 210, 246, 202, 84, 210, + 246, 105, 210, 246, 108, 210, 246, 147, 210, 246, 149, 210, 246, 170, + 210, 246, 195, 210, 246, 213, 111, 210, 246, 199, 210, 246, 222, 63, 210, + 246, 91, 54, 210, 246, 224, 102, 210, 246, 241, 35, 54, 210, 246, 49, + 219, 76, 210, 246, 50, 219, 76, 8, 210, 246, 5, 1, 63, 8, 210, 246, 5, 1, + 74, 8, 210, 246, 5, 1, 78, 8, 210, 246, 5, 1, 203, 196, 8, 210, 246, 5, + 1, 214, 192, 8, 210, 246, 5, 1, 237, 171, 8, 210, 246, 5, 1, 230, 54, 8, + 210, 246, 5, 1, 159, 8, 210, 246, 5, 1, 226, 185, 8, 210, 246, 5, 1, 223, + 163, 8, 210, 246, 5, 1, 219, 184, 8, 210, 246, 5, 1, 194, 8, 210, 246, 5, + 1, 210, 69, 240, 229, 54, 245, 243, 54, 245, 115, 54, 239, 128, 239, 132, + 54, 227, 94, 54, 224, 117, 54, 223, 90, 54, 218, 224, 54, 215, 120, 54, + 203, 246, 54, 222, 214, 213, 29, 54, 243, 92, 54, 240, 230, 54, 229, 79, + 54, 207, 196, 54, 242, 66, 54, 238, 166, 219, 2, 54, 218, 221, 54, 237, + 225, 54, 250, 24, 54, 236, 32, 54, 246, 233, 54, 227, 84, 208, 125, 54, + 211, 209, 54, 209, 150, 54, 231, 34, 215, 120, 54, 207, 177, 227, 94, 54, + 221, 173, 131, 54, 225, 120, 54, 215, 142, 54, 228, 4, 54, 39, 49, 237, + 87, 55, 39, 50, 237, 87, 55, 39, 163, 80, 227, 115, 219, 199, 39, 212, + 228, 80, 227, 115, 219, 199, 39, 250, 194, 53, 55, 39, 246, 18, 53, 55, + 39, 49, 53, 55, 39, 50, 53, 55, 39, 215, 253, 219, 199, 39, 246, 18, 215, + 253, 219, 199, 39, 250, 194, 215, 253, 219, 199, 39, 126, 187, 55, 39, + 239, 147, 187, 55, 39, 241, 88, 246, 61, 39, 241, 88, 211, 177, 39, 241, + 88, 243, 221, 39, 241, 88, 246, 62, 249, 20, 39, 49, 50, 53, 55, 39, 241, + 88, 214, 184, 39, 241, 88, 229, 147, 39, 241, 88, 206, 214, 218, 59, 208, + 85, 39, 216, 74, 212, 1, 219, 199, 39, 52, 80, 211, 32, 219, 199, 39, + 250, 204, 97, 39, 208, 70, 206, 245, 39, 204, 27, 247, 208, 55, 39, 96, + 53, 219, 199, 39, 163, 52, 212, 1, 219, 199, 39, 86, 237, 87, 3, 150, + 242, 68, 39, 96, 237, 87, 3, 150, 242, 68, 39, 49, 53, 56, 39, 50, 53, + 56, 39, 250, 60, 55, 251, 134, 220, 69, 251, 118, 208, 173, 209, 93, 210, + 255, 169, 6, 247, 125, 244, 55, 246, 223, 246, 218, 227, 115, 97, 247, + 35, 220, 69, 247, 84, 206, 254, 240, 231, 245, 200, 214, 181, 244, 55, + 240, 90, 132, 5, 239, 75, 132, 6, 237, 171, 248, 41, 6, 237, 171, 169, 6, + 237, 171, 218, 93, 245, 200, 218, 93, 245, 201, 115, 120, 218, 167, 132, + 6, 75, 248, 41, 6, 75, 132, 6, 159, 132, 5, 159, 228, 131, 66, 248, 231, + 97, 169, 6, 223, 163, 221, 42, 54, 211, 241, 216, 146, 245, 168, 132, 6, + 219, 184, 169, 6, 219, 184, 169, 6, 217, 134, 132, 6, 146, 248, 41, 6, + 146, 169, 6, 146, 217, 243, 209, 241, 216, 86, 213, 122, 82, 209, 162, + 54, 208, 115, 131, 54, 206, 39, 169, 6, 202, 159, 219, 215, 54, 220, 59, + 54, 230, 239, 220, 59, 54, 248, 41, 6, 202, 159, 207, 174, 30, 5, 1, 230, + 230, 229, 188, 54, 250, 213, 54, 132, 6, 249, 255, 248, 41, 6, 247, 125, + 240, 255, 97, 132, 5, 74, 132, 6, 74, 132, 6, 240, 174, 207, 174, 6, 240, + 174, 132, 6, 226, 185, 132, 5, 78, 137, 97, 248, 109, 97, 238, 68, 97, + 244, 179, 97, 231, 25, 211, 239, 215, 198, 6, 217, 134, 240, 93, 54, 169, + 5, 218, 167, 169, 5, 238, 235, 169, 6, 238, 235, 169, 6, 218, 167, 169, + 223, 162, 210, 217, 207, 174, 41, 6, 239, 75, 207, 174, 41, 6, 159, 216, + 73, 41, 6, 159, 207, 174, 41, 6, 203, 124, 169, 37, 6, 245, 51, 169, 37, + 5, 245, 51, 169, 37, 5, 74, 169, 37, 5, 75, 169, 37, 5, 230, 184, 217, + 212, 227, 114, 207, 174, 250, 235, 218, 247, 54, 251, 41, 207, 174, 5, + 240, 174, 16, 35, 214, 252, 211, 239, 204, 161, 239, 138, 118, 213, 107, + 204, 161, 239, 138, 118, 222, 57, 204, 161, 239, 138, 118, 209, 143, 204, + 161, 239, 138, 118, 209, 60, 204, 161, 239, 138, 120, 209, 57, 204, 161, + 239, 138, 118, 240, 21, 204, 161, 239, 138, 120, 240, 20, 204, 161, 239, + 138, 126, 240, 20, 204, 161, 239, 138, 239, 147, 240, 20, 204, 161, 239, + 138, 118, 212, 78, 204, 161, 239, 138, 239, 233, 212, 76, 204, 161, 239, + 138, 118, 241, 138, 204, 161, 239, 138, 126, 241, 136, 204, 161, 239, + 138, 239, 233, 241, 136, 204, 161, 239, 138, 213, 112, 241, 136, 239, + 138, 221, 43, 105, 215, 210, 221, 44, 105, 215, 210, 221, 44, 108, 215, + 210, 221, 44, 147, 215, 210, 221, 44, 149, 215, 210, 221, 44, 170, 215, + 210, 221, 44, 195, 215, 210, 221, 44, 213, 111, 215, 210, 221, 44, 199, + 215, 210, 221, 44, 222, 63, 215, 210, 221, 44, 209, 152, 215, 210, 221, + 44, 241, 112, 215, 210, 221, 44, 207, 154, 215, 210, 221, 44, 240, 18, + 215, 210, 221, 44, 118, 236, 11, 215, 210, 221, 44, 239, 233, 236, 11, + 215, 210, 221, 44, 118, 209, 36, 5, 215, 210, 221, 44, 105, 5, 215, 210, + 221, 44, 108, 5, 215, 210, 221, 44, 147, 5, 215, 210, 221, 44, 149, 5, + 215, 210, 221, 44, 170, 5, 215, 210, 221, 44, 195, 5, 215, 210, 221, 44, + 213, 111, 5, 215, 210, 221, 44, 199, 5, 215, 210, 221, 44, 222, 63, 5, + 215, 210, 221, 44, 209, 152, 5, 215, 210, 221, 44, 241, 112, 5, 215, 210, + 221, 44, 207, 154, 5, 215, 210, 221, 44, 240, 18, 5, 215, 210, 221, 44, + 118, 236, 11, 5, 215, 210, 221, 44, 239, 233, 236, 11, 5, 215, 210, 221, + 44, 118, 209, 36, 215, 210, 221, 44, 118, 209, 37, 247, 126, 245, 51, + 215, 210, 221, 44, 239, 233, 209, 36, 215, 210, 221, 44, 209, 153, 209, + 36, 215, 210, 221, 44, 216, 73, 118, 236, 11, 8, 5, 1, 216, 73, 247, 125, + 215, 210, 221, 44, 212, 88, 227, 255, 18, 215, 210, 221, 44, 240, 19, + 241, 182, 18, 215, 210, 221, 44, 240, 19, 209, 36, 215, 210, 221, 44, + 118, 236, 12, 209, 36, 204, 161, 239, 138, 202, 85, 209, 57, 207, 174, + 17, 108, 207, 174, 17, 147, 96, 47, 177, 47, 86, 47, 183, 47, 49, 50, 47, + 112, 121, 47, 153, 204, 46, 47, 153, 241, 176, 47, 211, 238, 241, 176, + 47, 211, 238, 204, 46, 47, 96, 53, 3, 95, 86, 53, 3, 95, 96, 204, 76, 47, + 86, 204, 76, 47, 96, 120, 237, 62, 47, 177, 120, 237, 62, 47, 86, 120, + 237, 62, 47, 183, 120, 237, 62, 47, 96, 53, 3, 209, 248, 86, 53, 3, 209, + 248, 96, 53, 239, 120, 142, 177, 53, 239, 120, 142, 86, 53, 239, 120, + 142, 183, 53, 239, 120, 142, 112, 121, 53, 3, 248, 218, 96, 53, 3, 113, + 86, 53, 3, 113, 96, 53, 3, 227, 14, 86, 53, 3, 227, 14, 49, 50, 204, 76, + 47, 49, 50, 53, 3, 95, 183, 202, 30, 47, 177, 53, 3, 208, 211, 227, 212, + 177, 53, 3, 208, 211, 216, 5, 183, 53, 3, 208, 211, 227, 212, 183, 53, 3, + 208, 211, 216, 5, 86, 53, 3, 245, 166, 242, 68, 183, 53, 3, 245, 166, + 227, 212, 250, 194, 208, 145, 213, 146, 47, 246, 18, 208, 145, 213, 146, + 47, 153, 204, 46, 53, 208, 173, 163, 142, 96, 53, 208, 173, 248, 231, + 115, 86, 53, 208, 173, 142, 250, 194, 171, 246, 62, 47, 246, 18, 171, + 246, 62, 47, 96, 237, 87, 3, 150, 206, 212, 96, 237, 87, 3, 150, 242, 68, + 177, 237, 87, 3, 150, 216, 5, 177, 237, 87, 3, 150, 227, 212, 86, 237, + 87, 3, 150, 206, 212, 86, 237, 87, 3, 150, 242, 68, 183, 237, 87, 3, 150, + 216, 5, 183, 237, 87, 3, 150, 227, 212, 86, 53, 115, 96, 47, 177, 53, 96, + 76, 183, 47, 96, 53, 115, 86, 47, 96, 219, 146, 250, 91, 177, 219, 146, + 250, 91, 86, 219, 146, 250, 91, 183, 219, 146, 250, 91, 96, 237, 87, 115, + 86, 237, 86, 86, 237, 87, 115, 96, 237, 86, 96, 52, 53, 3, 95, 49, 50, + 52, 53, 3, 95, 86, 52, 53, 3, 95, 96, 52, 47, 177, 52, 47, 86, 52, 47, + 183, 52, 47, 49, 50, 52, 47, 112, 121, 52, 47, 153, 204, 46, 52, 47, 153, + 241, 176, 52, 47, 211, 238, 241, 176, 52, 47, 211, 238, 204, 46, 52, 47, + 96, 208, 70, 47, 86, 208, 70, 47, 96, 211, 171, 47, 86, 211, 171, 47, + 177, 53, 3, 52, 95, 183, 53, 3, 52, 95, 96, 244, 143, 47, 177, 244, 143, + 47, 86, 244, 143, 47, 183, 244, 143, 47, 96, 53, 208, 173, 142, 86, 53, + 208, 173, 142, 96, 61, 47, 177, 61, 47, 86, 61, 47, 183, 61, 47, 177, 61, + 53, 239, 120, 142, 177, 61, 53, 220, 32, 219, 26, 177, 61, 53, 220, 32, + 219, 27, 3, 236, 106, 142, 177, 61, 53, 220, 32, 219, 27, 3, 80, 142, + 177, 61, 52, 47, 177, 61, 52, 53, 220, 32, 219, 26, 86, 61, 53, 239, 120, + 204, 99, 153, 204, 46, 53, 208, 173, 245, 165, 211, 238, 241, 176, 53, + 208, 173, 245, 165, 112, 121, 61, 47, 50, 53, 3, 5, 246, 61, 183, 53, 96, + 76, 177, 47, 126, 86, 250, 91, 96, 53, 3, 80, 95, 86, 53, 3, 80, 95, 49, + 50, 53, 3, 80, 95, 96, 53, 3, 52, 80, 95, 86, 53, 3, 52, 80, 95, 49, 50, + 53, 3, 52, 80, 95, 96, 220, 6, 47, 86, 220, 6, 47, 49, 50, 220, 6, 47, + 35, 251, 14, 245, 228, 219, 69, 243, 205, 209, 83, 240, 207, 209, 83, + 243, 104, 221, 166, 240, 208, 241, 94, 213, 117, 231, 38, 223, 101, 241, + 115, 220, 69, 221, 166, 250, 232, 241, 115, 220, 69, 5, 241, 115, 220, + 69, 245, 194, 250, 82, 224, 244, 243, 104, 221, 166, 245, 196, 250, 82, + 224, 244, 5, 245, 194, 250, 82, 224, 244, 241, 84, 76, 217, 214, 223, + 162, 217, 224, 223, 162, 245, 171, 223, 162, 210, 217, 224, 103, 54, 224, + 101, 54, 70, 218, 76, 243, 137, 212, 57, 213, 118, 224, 102, 250, 60, + 219, 254, 215, 253, 219, 254, 247, 178, 219, 254, 51, 215, 204, 245, 106, + 215, 204, 239, 140, 215, 204, 217, 210, 135, 231, 27, 50, 250, 217, 250, + 217, 225, 17, 250, 217, 211, 208, 250, 217, 243, 139, 243, 104, 221, 166, + 243, 143, 219, 82, 135, 221, 166, 219, 82, 135, 227, 37, 250, 226, 227, + 37, 219, 244, 230, 244, 206, 237, 231, 2, 52, 231, 2, 208, 70, 231, 2, + 245, 188, 231, 2, 210, 189, 231, 2, 205, 178, 231, 2, 246, 18, 231, 2, + 246, 18, 245, 188, 231, 2, 250, 194, 245, 188, 231, 2, 209, 82, 248, 152, + 216, 168, 217, 211, 70, 224, 102, 240, 215, 238, 172, 217, 211, 236, 121, + 208, 228, 219, 254, 216, 73, 208, 227, 230, 239, 227, 241, 194, 212, 122, + 204, 75, 203, 226, 217, 224, 221, 166, 208, 227, 224, 103, 208, 227, 250, + 53, 156, 135, 221, 166, 250, 53, 156, 135, 250, 151, 156, 135, 250, 151, + 247, 148, 221, 166, 251, 127, 156, 135, 222, 232, 250, 151, 221, 175, + 251, 127, 156, 135, 251, 7, 156, 135, 221, 166, 251, 7, 156, 135, 251, 7, + 156, 219, 245, 156, 135, 208, 70, 208, 227, 251, 15, 156, 135, 241, 30, + 135, 238, 171, 241, 30, 135, 243, 206, 248, 103, 250, 153, 209, 93, 227, + 122, 238, 171, 156, 135, 250, 151, 156, 208, 173, 219, 245, 209, 93, 231, + 65, 220, 69, 231, 65, 76, 219, 245, 250, 151, 156, 135, 245, 243, 241, + 34, 241, 35, 245, 242, 215, 253, 231, 50, 156, 135, 215, 253, 156, 135, + 245, 159, 135, 240, 254, 241, 33, 135, 211, 95, 241, 34, 244, 38, 156, + 135, 156, 208, 173, 247, 137, 244, 56, 225, 17, 247, 136, 217, 45, 156, + 135, 221, 166, 156, 135, 235, 154, 135, 221, 166, 235, 154, 135, 211, 39, + 241, 30, 135, 227, 179, 219, 245, 156, 135, 237, 247, 219, 245, 156, 135, + 227, 179, 115, 156, 135, 237, 247, 115, 156, 135, 227, 179, 247, 148, + 221, 166, 156, 135, 237, 247, 247, 148, 221, 166, 156, 135, 223, 240, + 227, 178, 223, 240, 237, 246, 248, 103, 221, 166, 241, 30, 135, 221, 166, + 227, 178, 221, 166, 237, 246, 222, 232, 227, 179, 221, 175, 156, 135, + 222, 232, 237, 247, 221, 175, 156, 135, 227, 179, 219, 245, 241, 30, 135, + 237, 247, 219, 245, 241, 30, 135, 222, 232, 227, 179, 221, 175, 241, 30, + 135, 222, 232, 237, 247, 221, 175, 241, 30, 135, 227, 179, 219, 245, 237, + 246, 237, 247, 219, 245, 227, 178, 222, 232, 227, 179, 221, 175, 237, + 246, 222, 232, 237, 247, 221, 175, 227, 178, 217, 249, 210, 236, 217, + 250, 219, 245, 156, 135, 210, 237, 219, 245, 156, 135, 217, 250, 219, + 245, 241, 30, 135, 210, 237, 219, 245, 241, 30, 135, 243, 104, 221, 166, + 217, 252, 243, 104, 221, 166, 210, 238, 210, 245, 220, 69, 210, 198, 220, + 69, 221, 166, 34, 210, 245, 220, 69, 221, 166, 34, 210, 198, 220, 69, + 210, 245, 76, 219, 245, 156, 135, 210, 198, 76, 219, 245, 156, 135, 222, + 232, 34, 210, 245, 76, 221, 175, 156, 135, 222, 232, 34, 210, 198, 76, + 221, 175, 156, 135, 210, 245, 76, 3, 221, 166, 156, 135, 210, 198, 76, 3, + 221, 166, 156, 135, 223, 221, 223, 222, 223, 223, 223, 222, 206, 237, 51, + 231, 65, 220, 69, 51, 219, 236, 220, 69, 51, 231, 65, 76, 219, 245, 156, + 135, 51, 219, 236, 76, 219, 245, 156, 135, 51, 247, 48, 51, 245, 99, 43, + 218, 76, 43, 224, 102, 43, 208, 219, 43, 243, 137, 212, 57, 43, 70, 219, + 254, 43, 215, 253, 219, 254, 43, 250, 60, 219, 254, 43, 241, 34, 43, 244, + 144, 103, 218, 76, 103, 224, 102, 103, 208, 219, 103, 70, 219, 254, 50, + 210, 3, 49, 210, 3, 121, 210, 3, 112, 210, 3, 250, 63, 224, 77, 208, 49, + 239, 165, 208, 70, 80, 248, 231, 50, 207, 173, 52, 80, 248, 231, 52, 50, + 207, 173, 243, 104, 221, 166, 217, 205, 221, 166, 208, 49, 243, 104, 221, + 166, 239, 166, 222, 234, 52, 80, 248, 231, 52, 50, 207, 173, 217, 250, + 206, 248, 216, 117, 210, 237, 206, 248, 216, 117, 221, 172, 211, 2, 220, + 69, 245, 194, 250, 82, 221, 172, 211, 1, 221, 172, 211, 2, 76, 219, 245, + 156, 135, 245, 194, 250, 82, 221, 172, 211, 2, 219, 245, 156, 135, 219, + 236, 220, 69, 231, 65, 220, 69, 223, 228, 237, 24, 245, 205, 225, 69, + 230, 255, 203, 156, 223, 81, 221, 174, 50, 250, 218, 3, 250, 128, 50, + 208, 85, 223, 162, 227, 37, 250, 226, 223, 162, 227, 37, 219, 244, 223, + 162, 230, 244, 223, 162, 206, 237, 243, 222, 219, 254, 70, 219, 254, 211, + 95, 219, 254, 243, 137, 208, 219, 247, 234, 49, 221, 172, 240, 92, 213, + 142, 217, 224, 50, 221, 172, 240, 92, 213, 142, 217, 224, 49, 213, 142, + 217, 224, 50, 213, 142, 217, 224, 216, 73, 208, 228, 241, 34, 245, 93, + 227, 37, 219, 244, 245, 93, 227, 37, 250, 226, 52, 210, 244, 52, 210, + 197, 52, 230, 244, 52, 206, 237, 218, 103, 156, 25, 219, 82, 135, 227, + 179, 3, 243, 85, 237, 247, 3, 243, 85, 205, 242, 223, 240, 227, 178, 205, + 242, 223, 240, 237, 246, 227, 179, 156, 208, 173, 219, 245, 237, 246, + 237, 247, 156, 208, 173, 219, 245, 227, 178, 156, 208, 173, 219, 245, + 227, 178, 156, 208, 173, 219, 245, 237, 246, 156, 208, 173, 219, 245, + 217, 249, 156, 208, 173, 219, 245, 210, 236, 243, 104, 221, 166, 217, + 253, 219, 245, 241, 36, 243, 104, 221, 166, 210, 239, 219, 245, 241, 36, + 221, 166, 51, 231, 65, 76, 219, 245, 156, 135, 221, 166, 51, 219, 236, + 76, 219, 245, 156, 135, 51, 231, 65, 76, 219, 245, 221, 166, 156, 135, + 51, 219, 236, 76, 219, 245, 221, 166, 156, 135, 227, 179, 247, 148, 221, + 166, 241, 30, 135, 237, 247, 247, 148, 221, 166, 241, 30, 135, 217, 250, + 247, 148, 221, 166, 241, 30, 135, 210, 237, 247, 148, 221, 166, 241, 30, + 135, 221, 166, 221, 172, 211, 2, 220, 69, 243, 104, 221, 166, 245, 196, + 250, 82, 221, 172, 211, 1, 221, 166, 221, 172, 211, 2, 76, 219, 245, 156, + 135, 243, 104, 221, 166, 245, 196, 250, 82, 221, 172, 211, 2, 219, 245, + 241, 36, 80, 241, 108, 224, 146, 236, 106, 241, 108, 112, 50, 243, 228, + 241, 108, 121, 50, 243, 228, 241, 108, 241, 115, 76, 3, 163, 236, 106, + 95, 241, 115, 76, 3, 80, 248, 231, 250, 50, 241, 84, 76, 236, 106, 95, 5, + 241, 115, 76, 3, 80, 248, 231, 250, 50, 241, 84, 76, 236, 106, 95, 241, + 115, 76, 3, 70, 55, 241, 115, 76, 3, 219, 203, 5, 241, 115, 76, 3, 219, + 203, 241, 115, 76, 3, 206, 246, 241, 115, 76, 3, 120, 236, 106, 211, 19, + 245, 194, 3, 163, 236, 106, 95, 245, 194, 3, 80, 248, 231, 250, 50, 241, + 84, 76, 236, 106, 95, 5, 245, 194, 3, 80, 248, 231, 250, 50, 241, 84, 76, + 236, 106, 95, 245, 194, 3, 219, 203, 5, 245, 194, 3, 219, 203, 202, 160, + 221, 164, 249, 11, 224, 243, 243, 223, 54, 241, 117, 47, 236, 38, 112, + 250, 94, 121, 250, 94, 217, 218, 218, 227, 204, 72, 227, 114, 49, 246, + 226, 50, 246, 226, 49, 239, 204, 50, 239, 204, 247, 248, 50, 245, 132, + 247, 248, 49, 245, 132, 208, 145, 50, 245, 132, 208, 145, 49, 245, 132, + 216, 73, 221, 166, 54, 51, 226, 246, 250, 128, 214, 158, 214, 166, 209, + 162, 216, 147, 218, 34, 231, 31, 205, 218, 211, 177, 218, 97, 76, 230, + 254, 54, 207, 174, 221, 166, 54, 204, 82, 236, 40, 208, 145, 49, 245, + 165, 208, 145, 50, 245, 165, 247, 248, 49, 245, 165, 247, 248, 50, 245, + 165, 208, 145, 162, 231, 2, 247, 248, 162, 231, 2, 239, 115, 212, 31, + 112, 250, 95, 248, 104, 120, 236, 106, 248, 220, 219, 247, 229, 151, 241, + 26, 208, 173, 209, 93, 216, 16, 203, 197, 231, 50, 34, 216, 144, 247, + 233, 229, 149, 227, 217, 250, 218, 155, 216, 11, 250, 218, 155, 241, 26, + 208, 173, 209, 93, 227, 222, 248, 115, 215, 252, 245, 61, 251, 15, 250, + 103, 210, 100, 208, 130, 215, 125, 243, 185, 219, 237, 245, 209, 209, + 220, 212, 44, 245, 155, 245, 154, 250, 169, 239, 98, 16, 235, 203, 250, + 169, 239, 98, 16, 211, 169, 217, 62, 250, 169, 239, 98, 16, 217, 63, 241, + 36, 250, 169, 239, 98, 16, 217, 63, 243, 143, 250, 169, 239, 98, 16, 217, + 63, 243, 221, 250, 169, 239, 98, 16, 217, 63, 230, 88, 250, 169, 239, 98, + 16, 217, 63, 246, 61, 250, 169, 239, 98, 16, 246, 62, 211, 69, 250, 169, + 239, 98, 16, 246, 62, 230, 88, 250, 169, 239, 98, 16, 212, 58, 142, 250, + 169, 239, 98, 16, 249, 21, 142, 250, 169, 239, 98, 16, 217, 63, 212, 57, + 250, 169, 239, 98, 16, 217, 63, 249, 20, 250, 169, 239, 98, 16, 217, 63, + 227, 178, 250, 169, 239, 98, 16, 217, 63, 237, 246, 250, 169, 239, 98, + 16, 96, 206, 76, 250, 169, 239, 98, 16, 86, 206, 76, 250, 169, 239, 98, + 16, 217, 63, 96, 47, 250, 169, 239, 98, 16, 217, 63, 86, 47, 250, 169, + 239, 98, 16, 246, 62, 249, 20, 250, 169, 239, 98, 16, 121, 210, 4, 206, + 246, 250, 169, 239, 98, 16, 244, 38, 211, 69, 250, 169, 239, 98, 16, 217, + 63, 121, 247, 33, 250, 169, 239, 98, 16, 217, 63, 244, 37, 250, 169, 239, + 98, 16, 121, 210, 4, 230, 88, 250, 169, 239, 98, 16, 177, 206, 76, 250, + 169, 239, 98, 16, 217, 63, 177, 47, 250, 169, 239, 98, 16, 112, 210, 4, + 219, 203, 250, 169, 239, 98, 16, 244, 49, 211, 69, 250, 169, 239, 98, 16, + 217, 63, 112, 247, 33, 250, 169, 239, 98, 16, 217, 63, 244, 48, 250, 169, + 239, 98, 16, 112, 210, 4, 230, 88, 250, 169, 239, 98, 16, 183, 206, 76, + 250, 169, 239, 98, 16, 217, 63, 183, 47, 250, 169, 239, 98, 16, 217, 30, + 206, 246, 250, 169, 239, 98, 16, 244, 38, 206, 246, 250, 169, 239, 98, + 16, 243, 222, 206, 246, 250, 169, 239, 98, 16, 230, 89, 206, 246, 250, + 169, 239, 98, 16, 246, 62, 206, 246, 250, 169, 239, 98, 16, 112, 212, + 240, 230, 88, 250, 169, 239, 98, 16, 217, 30, 217, 62, 250, 169, 239, 98, + 16, 246, 62, 211, 94, 250, 169, 239, 98, 16, 217, 63, 245, 242, 250, 169, + 239, 98, 16, 112, 210, 4, 243, 231, 250, 169, 239, 98, 16, 244, 49, 243, + 231, 250, 169, 239, 98, 16, 211, 95, 243, 231, 250, 169, 239, 98, 16, + 230, 89, 243, 231, 250, 169, 239, 98, 16, 246, 62, 243, 231, 250, 169, + 239, 98, 16, 121, 212, 240, 211, 69, 250, 169, 239, 98, 16, 49, 212, 240, + 211, 69, 250, 169, 239, 98, 16, 208, 228, 243, 231, 250, 169, 239, 98, + 16, 237, 247, 243, 231, 250, 169, 239, 98, 16, 245, 234, 142, 250, 169, + 239, 98, 16, 244, 49, 208, 227, 250, 169, 239, 98, 16, 202, 29, 250, 169, + 239, 98, 16, 211, 70, 208, 227, 250, 169, 239, 98, 16, 213, 144, 206, + 246, 250, 169, 239, 98, 16, 217, 63, 221, 166, 241, 36, 250, 169, 239, + 98, 16, 217, 63, 217, 46, 250, 169, 239, 98, 16, 121, 247, 34, 208, 227, + 250, 169, 239, 98, 16, 112, 247, 34, 208, 227, 250, 169, 239, 98, 16, + 230, 230, 250, 169, 239, 98, 16, 216, 59, 250, 169, 239, 98, 16, 220, 36, + 250, 169, 239, 98, 16, 251, 3, 206, 246, 250, 169, 239, 98, 16, 241, 38, + 206, 246, 250, 169, 239, 98, 16, 230, 231, 206, 246, 250, 169, 239, 98, + 16, 220, 37, 206, 246, 250, 169, 239, 98, 16, 251, 2, 221, 166, 246, 169, + 82, 50, 250, 218, 3, 183, 202, 30, 47, 212, 210, 171, 247, 233, 248, 129, + 97, 80, 227, 115, 3, 101, 243, 85, 231, 8, 97, 245, 189, 206, 244, 97, + 243, 158, 206, 244, 97, 241, 96, 97, 245, 224, 97, 61, 51, 3, 246, 218, + 80, 227, 114, 241, 68, 97, 250, 250, 229, 152, 97, 237, 37, 97, 43, 236, + 106, 248, 231, 3, 221, 163, 43, 208, 86, 242, 70, 247, 203, 246, 62, 3, + 221, 169, 47, 206, 242, 97, 224, 40, 97, 235, 216, 97, 220, 7, 237, 170, + 97, 220, 7, 228, 129, 97, 219, 59, 97, 219, 58, 97, 243, 167, 245, 91, + 16, 239, 159, 108, 212, 5, 97, 250, 169, 239, 98, 16, 217, 62, 244, 68, + 213, 131, 229, 152, 97, 217, 238, 219, 153, 222, 208, 219, 153, 217, 234, + 214, 185, 97, 246, 33, 214, 185, 97, 49, 219, 77, 206, 221, 113, 49, 219, + 77, 240, 200, 49, 219, 77, 226, 251, 113, 50, 219, 77, 206, 221, 113, 50, + 219, 77, 240, 200, 50, 219, 77, 226, 251, 113, 49, 51, 247, 227, 206, + 221, 245, 165, 49, 51, 247, 227, 240, 200, 49, 51, 247, 227, 226, 251, + 245, 165, 50, 51, 247, 227, 206, 221, 245, 165, 50, 51, 247, 227, 240, + 200, 50, 51, 247, 227, 226, 251, 245, 165, 49, 245, 93, 247, 227, 206, + 221, 113, 49, 245, 93, 247, 227, 101, 218, 159, 49, 245, 93, 247, 227, + 226, 251, 113, 245, 93, 247, 227, 240, 200, 50, 245, 93, 247, 227, 206, + 221, 113, 50, 245, 93, 247, 227, 101, 218, 159, 50, 245, 93, 247, 227, + 226, 251, 113, 231, 3, 240, 200, 236, 106, 227, 115, 240, 200, 206, 221, + 49, 219, 245, 226, 251, 50, 245, 93, 247, 227, 214, 167, 206, 221, 50, + 219, 245, 226, 251, 49, 245, 93, 247, 227, 214, 167, 210, 218, 208, 144, + 210, 218, 247, 247, 208, 145, 51, 155, 247, 248, 51, 155, 247, 248, 51, + 247, 227, 115, 208, 145, 51, 155, 40, 16, 247, 247, 49, 80, 98, 227, 114, + 50, 80, 98, 227, 114, 236, 106, 214, 202, 227, 113, 236, 106, 214, 202, + 227, 112, 236, 106, 214, 202, 227, 111, 236, 106, 214, 202, 227, 110, + 244, 29, 16, 157, 80, 25, 208, 145, 216, 16, 244, 29, 16, 157, 80, 25, + 247, 248, 216, 16, 244, 29, 16, 157, 80, 3, 246, 61, 244, 29, 16, 157, + 121, 25, 236, 106, 3, 246, 61, 244, 29, 16, 157, 112, 25, 236, 106, 3, + 246, 61, 244, 29, 16, 157, 80, 3, 208, 85, 244, 29, 16, 157, 121, 25, + 236, 106, 3, 208, 85, 244, 29, 16, 157, 112, 25, 236, 106, 3, 208, 85, + 244, 29, 16, 157, 80, 25, 204, 75, 244, 29, 16, 157, 121, 25, 236, 106, + 3, 204, 75, 244, 29, 16, 157, 112, 25, 236, 106, 3, 204, 75, 244, 29, 16, + 157, 121, 25, 236, 105, 244, 29, 16, 157, 112, 25, 236, 105, 244, 29, 16, + 157, 80, 25, 208, 145, 227, 222, 244, 29, 16, 157, 80, 25, 247, 248, 227, + 222, 51, 239, 172, 216, 78, 97, 241, 131, 97, 80, 227, 115, 240, 200, + 224, 214, 247, 214, 224, 214, 163, 115, 212, 227, 224, 214, 212, 228, + 115, 227, 28, 224, 214, 163, 115, 120, 212, 213, 224, 214, 120, 212, 214, + 115, 227, 28, 224, 214, 120, 212, 214, 230, 97, 224, 214, 208, 66, 224, + 214, 209, 124, 224, 214, 218, 253, 241, 180, 237, 239, 239, 92, 208, 145, + 219, 76, 247, 248, 219, 76, 208, 145, 245, 93, 155, 247, 248, 245, 93, + 155, 208, 145, 208, 133, 213, 33, 155, 247, 248, 208, 133, 213, 33, 155, + 61, 208, 101, 248, 115, 215, 253, 3, 246, 61, 211, 51, 239, 215, 251, + 142, 245, 90, 241, 116, 230, 244, 244, 68, 240, 204, 97, 62, 216, 11, 52, + 208, 85, 62, 227, 217, 52, 208, 85, 62, 206, 223, 52, 208, 85, 62, 242, + 69, 52, 208, 85, 62, 216, 11, 52, 208, 86, 3, 80, 142, 62, 227, 217, 52, + 208, 86, 3, 80, 142, 62, 216, 11, 208, 86, 3, 52, 80, 142, 251, 34, 246, + 19, 211, 58, 208, 220, 246, 19, 236, 41, 3, 239, 195, 214, 241, 62, 225, + 10, 227, 217, 208, 85, 62, 225, 10, 216, 11, 208, 85, 62, 225, 10, 206, + 223, 208, 85, 62, 225, 10, 242, 69, 208, 85, 52, 80, 142, 62, 51, 35, + 211, 61, 62, 246, 62, 35, 216, 148, 16, 35, 221, 48, 16, 35, 211, 90, 76, + 237, 61, 16, 35, 211, 90, 76, 209, 112, 16, 35, 241, 84, 76, 209, 112, + 16, 35, 241, 84, 76, 208, 105, 16, 35, 241, 71, 16, 35, 251, 130, 16, 35, + 248, 128, 16, 35, 249, 19, 16, 35, 236, 106, 210, 5, 16, 35, 227, 115, + 240, 51, 16, 35, 80, 210, 5, 16, 35, 239, 159, 240, 51, 16, 35, 247, 25, + 216, 77, 16, 35, 213, 7, 219, 211, 16, 35, 213, 7, 231, 49, 16, 35, 244, + 139, 227, 105, 241, 9, 16, 35, 244, 8, 245, 184, 105, 16, 35, 244, 8, + 245, 184, 108, 16, 35, 244, 8, 245, 184, 147, 16, 35, 244, 8, 245, 184, + 149, 16, 35, 182, 251, 130, 16, 35, 210, 95, 231, 112, 16, 35, 241, 84, + 76, 208, 106, 248, 33, 16, 35, 247, 59, 16, 35, 241, 84, 76, 225, 9, 16, + 35, 210, 242, 16, 35, 241, 9, 16, 35, 240, 11, 213, 130, 16, 35, 237, + 238, 213, 130, 16, 35, 216, 149, 213, 130, 16, 35, 206, 236, 213, 130, + 16, 35, 211, 228, 16, 35, 244, 46, 248, 37, 97, 171, 247, 233, 16, 35, + 222, 211, 16, 35, 244, 47, 239, 159, 108, 16, 35, 210, 243, 239, 159, + 108, 220, 82, 113, 220, 82, 246, 194, 220, 82, 239, 162, 220, 82, 230, + 239, 239, 162, 220, 82, 248, 125, 247, 190, 220, 82, 247, 241, 208, 250, + 220, 82, 247, 224, 248, 236, 235, 153, 220, 82, 250, 237, 76, 246, 168, + 220, 82, 244, 144, 220, 82, 245, 80, 251, 134, 221, 46, 220, 82, 52, 249, + 20, 43, 17, 105, 43, 17, 108, 43, 17, 147, 43, 17, 149, 43, 17, 170, 43, + 17, 195, 43, 17, 213, 111, 43, 17, 199, 43, 17, 222, 63, 43, 42, 209, + 152, 43, 42, 241, 112, 43, 42, 207, 154, 43, 42, 209, 55, 43, 42, 239, + 141, 43, 42, 240, 22, 43, 42, 212, 82, 43, 42, 213, 108, 43, 42, 241, + 140, 43, 42, 222, 60, 43, 42, 207, 151, 102, 17, 105, 102, 17, 108, 102, + 17, 147, 102, 17, 149, 102, 17, 170, 102, 17, 195, 102, 17, 213, 111, + 102, 17, 199, 102, 17, 222, 63, 102, 42, 209, 152, 102, 42, 241, 112, + 102, 42, 207, 154, 102, 42, 209, 55, 102, 42, 239, 141, 102, 42, 240, 22, + 102, 42, 212, 82, 102, 42, 213, 108, 102, 42, 241, 140, 102, 42, 222, 60, + 102, 42, 207, 151, 17, 118, 239, 102, 211, 61, 17, 120, 239, 102, 211, + 61, 17, 126, 239, 102, 211, 61, 17, 239, 147, 239, 102, 211, 61, 17, 239, + 233, 239, 102, 211, 61, 17, 212, 88, 239, 102, 211, 61, 17, 213, 112, + 239, 102, 211, 61, 17, 241, 143, 239, 102, 211, 61, 17, 222, 64, 239, + 102, 211, 61, 42, 209, 153, 239, 102, 211, 61, 42, 241, 113, 239, 102, + 211, 61, 42, 207, 155, 239, 102, 211, 61, 42, 209, 56, 239, 102, 211, 61, + 42, 239, 142, 239, 102, 211, 61, 42, 240, 23, 239, 102, 211, 61, 42, 212, + 83, 239, 102, 211, 61, 42, 213, 109, 239, 102, 211, 61, 42, 241, 141, + 239, 102, 211, 61, 42, 222, 61, 239, 102, 211, 61, 42, 207, 152, 239, + 102, 211, 61, 102, 8, 5, 1, 63, 102, 8, 5, 1, 249, 255, 102, 8, 5, 1, + 247, 125, 102, 8, 5, 1, 245, 51, 102, 8, 5, 1, 74, 102, 8, 5, 1, 240, + 174, 102, 8, 5, 1, 239, 75, 102, 8, 5, 1, 237, 171, 102, 8, 5, 1, 75, + 102, 8, 5, 1, 230, 184, 102, 8, 5, 1, 230, 54, 102, 8, 5, 1, 159, 102, 8, + 5, 1, 226, 185, 102, 8, 5, 1, 223, 163, 102, 8, 5, 1, 78, 102, 8, 5, 1, + 219, 184, 102, 8, 5, 1, 217, 134, 102, 8, 5, 1, 146, 102, 8, 5, 1, 194, + 102, 8, 5, 1, 210, 69, 102, 8, 5, 1, 68, 102, 8, 5, 1, 206, 164, 102, 8, + 5, 1, 204, 144, 102, 8, 5, 1, 203, 196, 102, 8, 5, 1, 203, 124, 102, 8, + 5, 1, 202, 159, 43, 8, 6, 1, 63, 43, 8, 6, 1, 249, 255, 43, 8, 6, 1, 247, + 125, 43, 8, 6, 1, 245, 51, 43, 8, 6, 1, 74, 43, 8, 6, 1, 240, 174, 43, 8, + 6, 1, 239, 75, 43, 8, 6, 1, 237, 171, 43, 8, 6, 1, 75, 43, 8, 6, 1, 230, + 184, 43, 8, 6, 1, 230, 54, 43, 8, 6, 1, 159, 43, 8, 6, 1, 226, 185, 43, + 8, 6, 1, 223, 163, 43, 8, 6, 1, 78, 43, 8, 6, 1, 219, 184, 43, 8, 6, 1, + 217, 134, 43, 8, 6, 1, 146, 43, 8, 6, 1, 194, 43, 8, 6, 1, 210, 69, 43, + 8, 6, 1, 68, 43, 8, 6, 1, 206, 164, 43, 8, 6, 1, 204, 144, 43, 8, 6, 1, + 203, 196, 43, 8, 6, 1, 203, 124, 43, 8, 6, 1, 202, 159, 43, 8, 5, 1, 63, + 43, 8, 5, 1, 249, 255, 43, 8, 5, 1, 247, 125, 43, 8, 5, 1, 245, 51, 43, + 8, 5, 1, 74, 43, 8, 5, 1, 240, 174, 43, 8, 5, 1, 239, 75, 43, 8, 5, 1, + 237, 171, 43, 8, 5, 1, 75, 43, 8, 5, 1, 230, 184, 43, 8, 5, 1, 230, 54, + 43, 8, 5, 1, 159, 43, 8, 5, 1, 226, 185, 43, 8, 5, 1, 223, 163, 43, 8, 5, + 1, 78, 43, 8, 5, 1, 219, 184, 43, 8, 5, 1, 217, 134, 43, 8, 5, 1, 146, + 43, 8, 5, 1, 194, 43, 8, 5, 1, 210, 69, 43, 8, 5, 1, 68, 43, 8, 5, 1, + 206, 164, 43, 8, 5, 1, 204, 144, 43, 8, 5, 1, 203, 196, 43, 8, 5, 1, 203, + 124, 43, 8, 5, 1, 202, 159, 43, 17, 202, 84, 182, 43, 42, 241, 112, 182, + 43, 42, 207, 154, 182, 43, 42, 209, 55, 182, 43, 42, 239, 141, 182, 43, + 42, 240, 22, 182, 43, 42, 212, 82, 182, 43, 42, 213, 108, 182, 43, 42, + 241, 140, 182, 43, 42, 222, 60, 182, 43, 42, 207, 151, 52, 43, 17, 105, + 52, 43, 17, 108, 52, 43, 17, 147, 52, 43, 17, 149, 52, 43, 17, 170, 52, + 43, 17, 195, 52, 43, 17, 213, 111, 52, 43, 17, 199, 52, 43, 17, 222, 63, + 52, 43, 42, 209, 152, 182, 43, 17, 202, 84, 98, 116, 157, 236, 105, 98, + 116, 79, 236, 105, 98, 116, 157, 206, 38, 98, 116, 79, 206, 38, 98, 116, + 157, 208, 70, 244, 145, 236, 105, 98, 116, 79, 208, 70, 244, 145, 236, + 105, 98, 116, 157, 208, 70, 244, 145, 206, 38, 98, 116, 79, 208, 70, 244, + 145, 206, 38, 98, 116, 157, 217, 58, 244, 145, 236, 105, 98, 116, 79, + 217, 58, 244, 145, 236, 105, 98, 116, 157, 217, 58, 244, 145, 206, 38, + 98, 116, 79, 217, 58, 244, 145, 206, 38, 98, 116, 157, 121, 25, 216, 16, + 98, 116, 121, 157, 25, 50, 237, 49, 98, 116, 121, 79, 25, 50, 227, 134, + 98, 116, 79, 121, 25, 216, 16, 98, 116, 157, 121, 25, 227, 222, 98, 116, + 121, 157, 25, 49, 237, 49, 98, 116, 121, 79, 25, 49, 227, 134, 98, 116, + 79, 121, 25, 227, 222, 98, 116, 157, 112, 25, 216, 16, 98, 116, 112, 157, + 25, 50, 237, 49, 98, 116, 112, 79, 25, 50, 227, 134, 98, 116, 79, 112, + 25, 216, 16, 98, 116, 157, 112, 25, 227, 222, 98, 116, 112, 157, 25, 49, + 237, 49, 98, 116, 112, 79, 25, 49, 227, 134, 98, 116, 79, 112, 25, 227, + 222, 98, 116, 157, 80, 25, 216, 16, 98, 116, 80, 157, 25, 50, 237, 49, + 98, 116, 112, 79, 25, 50, 121, 227, 134, 98, 116, 121, 79, 25, 50, 112, + 227, 134, 98, 116, 80, 79, 25, 50, 227, 134, 98, 116, 121, 157, 25, 50, + 112, 237, 49, 98, 116, 112, 157, 25, 50, 121, 237, 49, 98, 116, 79, 80, + 25, 216, 16, 98, 116, 157, 80, 25, 227, 222, 98, 116, 80, 157, 25, 49, + 237, 49, 98, 116, 112, 79, 25, 49, 121, 227, 134, 98, 116, 121, 79, 25, + 49, 112, 227, 134, 98, 116, 80, 79, 25, 49, 227, 134, 98, 116, 121, 157, + 25, 49, 112, 237, 49, 98, 116, 112, 157, 25, 49, 121, 237, 49, 98, 116, + 79, 80, 25, 227, 222, 98, 116, 157, 121, 25, 236, 105, 98, 116, 49, 79, + 25, 50, 121, 227, 134, 98, 116, 50, 79, 25, 49, 121, 227, 134, 98, 116, + 121, 157, 25, 236, 106, 237, 49, 98, 116, 121, 79, 25, 236, 106, 227, + 134, 98, 116, 50, 157, 25, 49, 121, 237, 49, 98, 116, 49, 157, 25, 50, + 121, 237, 49, 98, 116, 79, 121, 25, 236, 105, 98, 116, 157, 112, 25, 236, + 105, 98, 116, 49, 79, 25, 50, 112, 227, 134, 98, 116, 50, 79, 25, 49, + 112, 227, 134, 98, 116, 112, 157, 25, 236, 106, 237, 49, 98, 116, 112, + 79, 25, 236, 106, 227, 134, 98, 116, 50, 157, 25, 49, 112, 237, 49, 98, + 116, 49, 157, 25, 50, 112, 237, 49, 98, 116, 79, 112, 25, 236, 105, 98, + 116, 157, 80, 25, 236, 105, 98, 116, 49, 79, 25, 50, 80, 227, 134, 98, + 116, 50, 79, 25, 49, 80, 227, 134, 98, 116, 80, 157, 25, 236, 106, 237, + 49, 98, 116, 112, 79, 25, 121, 236, 106, 227, 134, 98, 116, 121, 79, 25, + 112, 236, 106, 227, 134, 98, 116, 80, 79, 25, 236, 106, 227, 134, 98, + 116, 49, 112, 79, 25, 50, 121, 227, 134, 98, 116, 50, 112, 79, 25, 49, + 121, 227, 134, 98, 116, 49, 121, 79, 25, 50, 112, 227, 134, 98, 116, 50, + 121, 79, 25, 49, 112, 227, 134, 98, 116, 121, 157, 25, 112, 236, 106, + 237, 49, 98, 116, 112, 157, 25, 121, 236, 106, 237, 49, 98, 116, 50, 157, + 25, 49, 80, 237, 49, 98, 116, 49, 157, 25, 50, 80, 237, 49, 98, 116, 79, + 80, 25, 236, 105, 98, 116, 157, 52, 244, 145, 236, 105, 98, 116, 79, 52, + 244, 145, 236, 105, 98, 116, 157, 52, 244, 145, 206, 38, 98, 116, 79, 52, + 244, 145, 206, 38, 98, 116, 52, 236, 105, 98, 116, 52, 206, 38, 98, 116, + 121, 212, 120, 25, 50, 242, 78, 98, 116, 121, 52, 25, 50, 212, 119, 98, + 116, 52, 121, 25, 216, 16, 98, 116, 121, 212, 120, 25, 49, 242, 78, 98, + 116, 121, 52, 25, 49, 212, 119, 98, 116, 52, 121, 25, 227, 222, 98, 116, + 112, 212, 120, 25, 50, 242, 78, 98, 116, 112, 52, 25, 50, 212, 119, 98, + 116, 52, 112, 25, 216, 16, 98, 116, 112, 212, 120, 25, 49, 242, 78, 98, + 116, 112, 52, 25, 49, 212, 119, 98, 116, 52, 112, 25, 227, 222, 98, 116, + 80, 212, 120, 25, 50, 242, 78, 98, 116, 80, 52, 25, 50, 212, 119, 98, + 116, 52, 80, 25, 216, 16, 98, 116, 80, 212, 120, 25, 49, 242, 78, 98, + 116, 80, 52, 25, 49, 212, 119, 98, 116, 52, 80, 25, 227, 222, 98, 116, + 121, 212, 120, 25, 236, 106, 242, 78, 98, 116, 121, 52, 25, 236, 106, + 212, 119, 98, 116, 52, 121, 25, 236, 105, 98, 116, 112, 212, 120, 25, + 236, 106, 242, 78, 98, 116, 112, 52, 25, 236, 106, 212, 119, 98, 116, 52, + 112, 25, 236, 105, 98, 116, 80, 212, 120, 25, 236, 106, 242, 78, 98, 116, + 80, 52, 25, 236, 106, 212, 119, 98, 116, 52, 80, 25, 236, 105, 98, 116, + 157, 250, 129, 121, 25, 216, 16, 98, 116, 157, 250, 129, 121, 25, 227, + 222, 98, 116, 157, 250, 129, 112, 25, 227, 222, 98, 116, 157, 250, 129, + 112, 25, 216, 16, 98, 116, 157, 243, 228, 206, 221, 50, 208, 173, 226, + 251, 227, 222, 98, 116, 157, 243, 228, 206, 221, 49, 208, 173, 226, 251, + 216, 16, 98, 116, 157, 243, 228, 245, 130, 98, 116, 157, 227, 222, 98, + 116, 157, 206, 224, 98, 116, 157, 216, 16, 98, 116, 157, 242, 70, 98, + 116, 79, 227, 222, 98, 116, 79, 206, 224, 98, 116, 79, 216, 16, 98, 116, + 79, 242, 70, 98, 116, 157, 49, 25, 79, 216, 16, 98, 116, 157, 112, 25, + 79, 242, 70, 98, 116, 79, 49, 25, 157, 216, 16, 98, 116, 79, 112, 25, + 157, 242, 70, 206, 221, 162, 248, 33, 226, 251, 118, 241, 139, 248, 33, + 226, 251, 118, 217, 56, 248, 33, 226, 251, 126, 241, 137, 248, 33, 226, + 251, 162, 248, 33, 226, 251, 239, 233, 241, 137, 248, 33, 226, 251, 126, + 217, 54, 248, 33, 226, 251, 213, 112, 241, 137, 248, 33, 239, 102, 248, + 33, 49, 213, 112, 241, 137, 248, 33, 49, 126, 217, 54, 248, 33, 49, 239, + 233, 241, 137, 248, 33, 49, 162, 248, 33, 49, 126, 241, 137, 248, 33, 49, + 118, 217, 56, 248, 33, 49, 118, 241, 139, 248, 33, 50, 162, 248, 33, 157, + 213, 79, 225, 10, 213, 79, 244, 150, 213, 79, 206, 221, 118, 241, 139, + 248, 33, 50, 118, 241, 139, 248, 33, 217, 60, 226, 251, 227, 222, 217, + 60, 226, 251, 216, 16, 217, 60, 206, 221, 227, 222, 217, 60, 206, 221, + 49, 25, 226, 251, 49, 25, 226, 251, 216, 16, 217, 60, 206, 221, 49, 25, + 226, 251, 216, 16, 217, 60, 206, 221, 49, 25, 206, 221, 50, 25, 226, 251, + 227, 222, 217, 60, 206, 221, 49, 25, 206, 221, 50, 25, 226, 251, 216, 16, + 217, 60, 206, 221, 216, 16, 217, 60, 206, 221, 50, 25, 226, 251, 227, + 222, 217, 60, 206, 221, 50, 25, 226, 251, 49, 25, 226, 251, 216, 16, 62, + 211, 177, 61, 211, 177, 61, 51, 3, 215, 189, 245, 164, 61, 51, 245, 195, + 62, 5, 211, 177, 51, 3, 236, 106, 240, 9, 51, 3, 80, 240, 9, 51, 3, 219, + 229, 245, 125, 240, 9, 51, 3, 206, 221, 49, 208, 173, 226, 251, 50, 240, + 9, 51, 3, 206, 221, 50, 208, 173, 226, 251, 49, 240, 9, 51, 3, 243, 228, + 245, 125, 240, 9, 62, 5, 211, 177, 61, 5, 211, 177, 62, 216, 143, 61, + 216, 143, 62, 80, 216, 143, 61, 80, 216, 143, 62, 219, 80, 61, 219, 80, + 62, 206, 223, 208, 85, 61, 206, 223, 208, 85, 62, 206, 223, 5, 208, 85, + 61, 206, 223, 5, 208, 85, 62, 216, 11, 208, 85, 61, 216, 11, 208, 85, 62, + 216, 11, 5, 208, 85, 61, 216, 11, 5, 208, 85, 62, 216, 11, 218, 60, 61, + 216, 11, 218, 60, 62, 242, 69, 208, 85, 61, 242, 69, 208, 85, 62, 242, + 69, 5, 208, 85, 61, 242, 69, 5, 208, 85, 62, 227, 217, 208, 85, 61, 227, + 217, 208, 85, 62, 227, 217, 5, 208, 85, 61, 227, 217, 5, 208, 85, 62, + 227, 217, 218, 60, 61, 227, 217, 218, 60, 62, 243, 221, 61, 243, 221, 61, + 243, 222, 245, 195, 62, 5, 243, 221, 239, 242, 226, 246, 61, 246, 61, + 242, 83, 246, 61, 246, 62, 3, 80, 240, 9, 247, 173, 62, 246, 61, 246, 62, + 3, 49, 162, 248, 43, 246, 62, 3, 50, 162, 248, 43, 246, 62, 3, 226, 251, + 162, 248, 43, 246, 62, 3, 206, 221, 162, 248, 43, 246, 62, 3, 206, 221, + 50, 217, 60, 248, 43, 246, 62, 3, 251, 15, 247, 148, 206, 221, 49, 217, + 60, 248, 43, 49, 162, 62, 246, 61, 50, 162, 62, 246, 61, 230, 240, 247, + 177, 230, 240, 61, 246, 61, 206, 221, 162, 230, 240, 61, 246, 61, 226, + 251, 162, 230, 240, 61, 246, 61, 206, 221, 49, 217, 60, 246, 55, 250, + 128, 206, 221, 50, 217, 60, 246, 55, 250, 128, 226, 251, 50, 217, 60, + 246, 55, 250, 128, 226, 251, 49, 217, 60, 246, 55, 250, 128, 206, 221, + 162, 246, 61, 226, 251, 162, 246, 61, 62, 226, 251, 50, 208, 85, 62, 226, + 251, 49, 208, 85, 62, 206, 221, 49, 208, 85, 62, 206, 221, 50, 208, 85, + 61, 247, 177, 51, 3, 49, 162, 248, 43, 51, 3, 50, 162, 248, 43, 51, 3, + 206, 221, 49, 243, 228, 162, 248, 43, 51, 3, 226, 251, 50, 243, 228, 162, + 248, 43, 61, 51, 3, 80, 248, 55, 227, 114, 61, 206, 223, 208, 86, 3, 243, + 85, 206, 223, 208, 86, 3, 49, 162, 248, 43, 206, 223, 208, 86, 3, 50, + 162, 248, 43, 228, 8, 246, 61, 61, 51, 3, 206, 221, 49, 217, 59, 61, 51, + 3, 226, 251, 49, 217, 59, 61, 51, 3, 226, 251, 50, 217, 59, 61, 51, 3, + 206, 221, 50, 217, 59, 61, 246, 62, 3, 206, 221, 49, 217, 59, 61, 246, + 62, 3, 226, 251, 49, 217, 59, 61, 246, 62, 3, 226, 251, 50, 217, 59, 61, + 246, 62, 3, 206, 221, 50, 217, 59, 206, 221, 49, 208, 85, 206, 221, 50, + 208, 85, 226, 251, 49, 208, 85, 61, 225, 10, 211, 177, 62, 225, 10, 211, + 177, 61, 225, 10, 5, 211, 177, 62, 225, 10, 5, 211, 177, 226, 251, 50, + 208, 85, 62, 210, 215, 3, 216, 162, 246, 7, 207, 3, 212, 15, 245, 236, + 62, 211, 94, 61, 211, 94, 227, 131, 209, 17, 210, 214, 250, 78, 221, 188, + 244, 19, 221, 188, 245, 204, 219, 250, 62, 209, 161, 61, 209, 161, 248, + 248, 247, 233, 248, 248, 98, 3, 246, 168, 248, 248, 98, 3, 203, 196, 214, + 254, 207, 4, 3, 216, 191, 242, 48, 236, 47, 248, 102, 61, 212, 237, 218, + 159, 62, 212, 237, 218, 159, 213, 68, 216, 73, 215, 198, 239, 201, 237, + 56, 247, 177, 62, 49, 218, 59, 231, 35, 62, 50, 218, 59, 231, 35, 61, 49, + 218, 59, 231, 35, 61, 112, 218, 59, 231, 35, 61, 50, 218, 59, 231, 35, + 61, 121, 218, 59, 231, 35, 212, 63, 25, 245, 129, 247, 11, 54, 216, 203, + 54, 248, 62, 54, 247, 83, 250, 208, 219, 230, 245, 130, 246, 143, 216, + 59, 245, 131, 76, 227, 9, 245, 131, 76, 230, 151, 211, 95, 25, 245, 138, + 240, 75, 97, 251, 115, 213, 70, 237, 131, 25, 212, 159, 219, 33, 97, 203, + 1, 203, 76, 208, 75, 35, 237, 51, 208, 75, 35, 228, 33, 208, 75, 35, 239, + 249, 208, 75, 35, 209, 18, 208, 75, 35, 204, 16, 208, 75, 35, 204, 80, + 208, 75, 35, 224, 12, 208, 75, 35, 241, 179, 204, 37, 76, 243, 249, 61, + 239, 114, 240, 102, 61, 212, 30, 240, 102, 62, 212, 30, 240, 102, 61, + 210, 215, 3, 216, 162, 239, 245, 217, 56, 224, 29, 228, 1, 217, 56, 224, + 29, 224, 234, 240, 43, 54, 241, 179, 225, 127, 54, 230, 69, 214, 218, + 206, 205, 222, 224, 218, 73, 250, 114, 209, 205, 238, 178, 247, 57, 227, + 184, 205, 202, 227, 145, 214, 187, 215, 20, 247, 43, 250, 145, 218, 108, + 61, 246, 150, 229, 81, 61, 246, 150, 217, 48, 61, 246, 150, 215, 206, 61, + 246, 150, 248, 54, 61, 246, 150, 229, 31, 61, 246, 150, 219, 45, 62, 246, + 150, 229, 81, 62, 246, 150, 217, 48, 62, 246, 150, 215, 206, 62, 246, + 150, 248, 54, 62, 246, 150, 229, 31, 62, 246, 150, 219, 45, 62, 211, 226, + 210, 227, 61, 237, 56, 210, 227, 61, 243, 222, 210, 227, 62, 246, 5, 210, + 227, 61, 211, 226, 210, 227, 62, 237, 56, 210, 227, 62, 243, 222, 210, + 227, 61, 246, 5, 210, 227, 236, 47, 211, 182, 217, 56, 221, 160, 241, + 139, 221, 160, 248, 158, 241, 139, 221, 155, 248, 158, 212, 81, 221, 155, + 223, 195, 239, 217, 54, 223, 195, 223, 66, 54, 223, 195, 213, 57, 54, + 204, 46, 210, 89, 245, 130, 241, 176, 210, 89, 245, 130, 206, 233, 216, + 139, 97, 216, 139, 16, 35, 207, 120, 218, 90, 216, 139, 16, 35, 207, 118, + 218, 90, 216, 139, 16, 35, 207, 117, 218, 90, 216, 139, 16, 35, 207, 115, + 218, 90, 216, 139, 16, 35, 207, 113, 218, 90, 216, 139, 16, 35, 207, 111, + 218, 90, 216, 139, 16, 35, 207, 109, 218, 90, 216, 139, 16, 35, 238, 176, + 225, 70, 62, 206, 233, 216, 139, 97, 216, 140, 219, 95, 97, 219, 68, 219, + 95, 97, 218, 238, 219, 95, 54, 204, 35, 97, 243, 214, 240, 101, 243, 214, + 240, 100, 243, 214, 240, 99, 243, 214, 240, 98, 243, 214, 240, 97, 243, + 214, 240, 96, 61, 246, 62, 3, 70, 216, 16, 61, 246, 62, 3, 120, 243, 83, + 62, 246, 62, 3, 61, 70, 216, 16, 62, 246, 62, 3, 120, 61, 243, 83, 224, + 45, 35, 203, 76, 224, 45, 35, 203, 0, 243, 195, 35, 237, 248, 203, 76, + 243, 195, 35, 227, 177, 203, 0, 243, 195, 35, 227, 177, 203, 76, 243, + 195, 35, 237, 248, 203, 0, 61, 239, 225, 62, 239, 225, 237, 131, 25, 218, + 163, 250, 228, 245, 128, 210, 154, 211, 103, 76, 251, 92, 214, 203, 251, + 29, 239, 197, 238, 187, 211, 103, 76, 237, 26, 250, 42, 97, 239, 213, + 219, 207, 61, 211, 94, 126, 227, 109, 245, 181, 216, 16, 126, 227, 109, + 245, 181, 227, 222, 204, 91, 54, 138, 205, 179, 54, 242, 75, 240, 43, 54, + 242, 75, 225, 127, 54, 230, 250, 240, 43, 25, 225, 127, 54, 225, 127, 25, + 240, 43, 54, 225, 127, 3, 211, 32, 54, 225, 127, 3, 211, 32, 25, 225, + 127, 25, 240, 43, 54, 80, 225, 127, 3, 211, 32, 54, 236, 106, 225, 127, + 3, 211, 32, 54, 225, 10, 61, 246, 61, 225, 10, 62, 246, 61, 225, 10, 5, + 61, 246, 61, 225, 86, 97, 243, 135, 97, 206, 230, 219, 67, 97, 245, 247, + 239, 97, 206, 201, 222, 217, 246, 203, 219, 137, 230, 75, 205, 240, 246, + 123, 62, 224, 30, 227, 128, 213, 101, 213, 140, 217, 38, 213, 120, 212, + 10, 248, 251, 248, 217, 103, 229, 151, 61, 242, 58, 225, 122, 61, 242, + 58, 229, 81, 62, 242, 58, 225, 122, 62, 242, 58, 229, 81, 212, 16, 204, + 3, 212, 19, 210, 215, 248, 135, 246, 7, 216, 190, 62, 212, 15, 209, 19, + 246, 8, 25, 216, 190, 207, 174, 61, 212, 237, 218, 159, 207, 174, 62, + 212, 237, 218, 159, 61, 243, 222, 231, 50, 211, 177, 245, 124, 228, 15, + 243, 162, 247, 39, 219, 253, 218, 163, 247, 40, 212, 48, 237, 36, 3, 61, + 245, 130, 43, 245, 124, 228, 15, 246, 195, 221, 192, 241, 62, 250, 255, + 220, 26, 49, 204, 66, 208, 113, 62, 207, 131, 49, 204, 66, 208, 113, 61, + 207, 131, 49, 204, 66, 208, 113, 62, 49, 228, 16, 224, 233, 61, 49, 228, + 16, 224, 233, 242, 53, 212, 40, 54, 79, 61, 242, 69, 208, 85, 49, 246, + 16, 241, 62, 103, 214, 254, 240, 84, 243, 228, 231, 50, 61, 246, 62, 231, + 50, 62, 211, 177, 62, 208, 50, 216, 84, 49, 241, 61, 216, 84, 49, 241, + 60, 250, 54, 16, 35, 206, 205, 79, 246, 62, 3, 211, 32, 25, 120, 187, 55, + 218, 254, 216, 13, 230, 252, 218, 254, 227, 219, 230, 252, 218, 254, 230, + 239, 218, 254, 62, 245, 131, 220, 32, 213, 8, 212, 252, 212, 203, 246, + 90, 247, 19, 236, 231, 212, 89, 238, 188, 204, 3, 236, 23, 238, 188, 3, + 237, 101, 225, 107, 16, 35, 227, 133, 224, 12, 207, 4, 220, 32, 237, 239, + 239, 148, 239, 226, 231, 50, 236, 126, 240, 34, 215, 15, 51, 239, 147, + 245, 164, 212, 66, 235, 163, 212, 69, 218, 230, 3, 248, 251, 209, 144, + 230, 169, 248, 236, 97, 237, 59, 237, 250, 97, 239, 105, 217, 180, 245, + 100, 220, 32, 62, 211, 177, 61, 239, 226, 3, 236, 106, 101, 62, 211, 33, + 62, 215, 25, 214, 190, 206, 221, 248, 38, 214, 190, 62, 214, 190, 226, + 251, 248, 38, 214, 190, 61, 214, 190, 61, 79, 246, 169, 82, 209, 162, + 227, 47, 54, 209, 221, 242, 52, 251, 52, 241, 57, 216, 188, 239, 238, + 216, 188, 237, 123, 205, 228, 237, 123, 203, 220, 237, 123, 226, 251, 50, + 219, 8, 219, 8, 206, 221, 50, 219, 8, 61, 222, 97, 62, 222, 97, 246, 169, + 82, 79, 246, 169, 82, 223, 224, 203, 196, 79, 223, 224, 203, 196, 248, + 248, 203, 196, 79, 248, 248, 203, 196, 219, 207, 30, 245, 130, 79, 30, + 245, 130, 171, 246, 218, 245, 130, 79, 171, 246, 218, 245, 130, 8, 245, + 130, 213, 77, 61, 8, 245, 130, 219, 207, 8, 245, 130, 225, 124, 245, 130, + 211, 95, 76, 244, 137, 239, 147, 209, 180, 250, 59, 239, 147, 248, 249, + 250, 59, 79, 239, 147, 248, 249, 250, 59, 239, 147, 246, 3, 250, 59, 62, + 239, 147, 218, 61, 211, 94, 61, 239, 147, 218, 61, 211, 94, 211, 221, + 211, 42, 219, 207, 61, 211, 94, 43, 61, 211, 94, 171, 246, 218, 62, 211, + 94, 62, 246, 218, 61, 211, 94, 219, 207, 62, 211, 94, 79, 219, 207, 62, + 211, 94, 218, 118, 211, 94, 213, 77, 61, 211, 94, 79, 250, 59, 171, 246, + 218, 250, 59, 241, 143, 211, 191, 250, 59, 241, 143, 218, 61, 62, 211, + 94, 241, 143, 218, 61, 218, 118, 211, 94, 212, 88, 218, 61, 62, 211, 94, + 241, 143, 218, 61, 216, 141, 62, 211, 94, 79, 241, 143, 218, 61, 216, + 141, 62, 211, 94, 207, 155, 218, 61, 62, 211, 94, 212, 83, 218, 61, 250, + 59, 209, 180, 250, 59, 171, 246, 218, 209, 180, 250, 59, 79, 209, 180, + 250, 59, 212, 88, 218, 218, 62, 25, 61, 239, 200, 62, 239, 200, 61, 239, + 200, 241, 143, 218, 218, 219, 207, 62, 239, 200, 43, 171, 246, 218, 241, + 143, 218, 61, 211, 94, 79, 209, 180, 218, 118, 250, 59, 212, 17, 208, + 244, 208, 78, 212, 17, 79, 246, 146, 212, 17, 211, 223, 79, 211, 223, + 248, 249, 250, 59, 241, 143, 209, 180, 217, 213, 250, 59, 79, 241, 143, + 209, 180, 217, 213, 250, 59, 245, 131, 82, 213, 77, 61, 246, 61, 182, + 103, 245, 131, 82, 226, 251, 50, 242, 50, 61, 211, 177, 206, 221, 50, + 242, 50, 61, 211, 177, 226, 251, 50, 213, 77, 61, 211, 177, 206, 221, 50, + 213, 77, 61, 211, 177, 62, 217, 47, 131, 219, 233, 61, 217, 47, 131, 219, + 233, 61, 240, 212, 131, 219, 233, 62, 243, 222, 224, 103, 61, 203, 196, + 79, 240, 212, 131, 97, 157, 80, 142, 225, 10, 80, 142, 79, 80, 142, 79, + 212, 120, 207, 174, 245, 234, 217, 31, 131, 219, 233, 79, 212, 120, 245, + 234, 217, 31, 131, 219, 233, 79, 52, 207, 174, 245, 234, 217, 31, 131, + 219, 233, 79, 52, 245, 234, 217, 31, 131, 219, 233, 79, 124, 212, 120, + 245, 234, 217, 31, 131, 219, 233, 79, 124, 52, 245, 234, 217, 31, 131, + 219, 233, 245, 86, 211, 78, 219, 89, 2, 219, 233, 79, 240, 212, 131, 219, + 233, 79, 237, 56, 240, 212, 131, 219, 233, 79, 62, 237, 55, 215, 198, 79, + 62, 237, 56, 247, 177, 239, 201, 237, 55, 215, 198, 239, 201, 237, 56, + 247, 177, 225, 10, 49, 219, 77, 219, 233, 225, 10, 50, 219, 77, 219, 233, + 225, 10, 239, 214, 49, 219, 77, 219, 233, 225, 10, 239, 214, 50, 219, 77, + 219, 233, 225, 10, 227, 217, 250, 218, 247, 227, 219, 233, 225, 10, 216, + 11, 250, 218, 247, 227, 219, 233, 79, 227, 217, 250, 218, 217, 31, 131, + 219, 233, 79, 216, 11, 250, 218, 217, 31, 131, 219, 233, 79, 227, 217, + 250, 218, 247, 227, 219, 233, 79, 216, 11, 250, 218, 247, 227, 219, 233, + 157, 49, 208, 133, 213, 33, 247, 227, 219, 233, 157, 50, 208, 133, 213, + 33, 247, 227, 219, 233, 225, 10, 49, 245, 93, 247, 227, 219, 233, 225, + 10, 50, 245, 93, 247, 227, 219, 233, 243, 174, 182, 43, 17, 105, 243, + 174, 182, 43, 17, 108, 243, 174, 182, 43, 17, 147, 243, 174, 182, 43, 17, + 149, 243, 174, 182, 43, 17, 170, 243, 174, 182, 43, 17, 195, 243, 174, + 182, 43, 17, 213, 111, 243, 174, 182, 43, 17, 199, 243, 174, 182, 43, 17, + 222, 63, 243, 174, 182, 43, 42, 209, 152, 243, 174, 43, 41, 17, 105, 243, + 174, 43, 41, 17, 108, 243, 174, 43, 41, 17, 147, 243, 174, 43, 41, 17, + 149, 243, 174, 43, 41, 17, 170, 243, 174, 43, 41, 17, 195, 243, 174, 43, + 41, 17, 213, 111, 243, 174, 43, 41, 17, 199, 243, 174, 43, 41, 17, 222, + 63, 243, 174, 43, 41, 42, 209, 152, 243, 174, 182, 43, 41, 17, 105, 243, + 174, 182, 43, 41, 17, 108, 243, 174, 182, 43, 41, 17, 147, 243, 174, 182, + 43, 41, 17, 149, 243, 174, 182, 43, 41, 17, 170, 243, 174, 182, 43, 41, + 17, 195, 243, 174, 182, 43, 41, 17, 213, 111, 243, 174, 182, 43, 41, 17, + 199, 243, 174, 182, 43, 41, 17, 222, 63, 243, 174, 182, 43, 41, 42, 209, + 152, 79, 204, 26, 86, 47, 79, 91, 54, 79, 224, 103, 54, 79, 243, 137, 54, + 79, 211, 238, 241, 176, 47, 79, 86, 47, 79, 153, 241, 176, 47, 242, 63, + 218, 63, 86, 47, 79, 215, 190, 86, 47, 208, 84, 86, 47, 79, 208, 84, 86, + 47, 244, 143, 208, 84, 86, 47, 79, 244, 143, 208, 84, 86, 47, 62, 86, 47, + 209, 31, 208, 143, 86, 250, 94, 209, 31, 247, 246, 86, 250, 94, 62, 86, + 250, 94, 79, 62, 245, 86, 183, 25, 86, 47, 79, 62, 245, 86, 177, 25, 86, + 47, 211, 174, 62, 86, 47, 79, 245, 217, 62, 86, 47, 216, 10, 61, 86, 47, + 227, 216, 61, 86, 47, 249, 24, 213, 77, 61, 86, 47, 239, 117, 213, 77, + 61, 86, 47, 79, 226, 251, 216, 9, 61, 86, 47, 79, 206, 221, 216, 9, 61, + 86, 47, 221, 162, 226, 251, 216, 9, 61, 86, 47, 245, 93, 227, 14, 221, + 162, 206, 221, 216, 9, 61, 86, 47, 43, 79, 61, 86, 47, 204, 32, 86, 47, + 248, 42, 211, 238, 241, 176, 47, 248, 42, 86, 47, 248, 42, 153, 241, 176, + 47, 79, 248, 42, 211, 238, 241, 176, 47, 79, 248, 42, 86, 47, 79, 248, + 42, 153, 241, 176, 47, 209, 182, 86, 47, 79, 209, 181, 86, 47, 204, 56, + 86, 47, 79, 204, 56, 86, 47, 220, 3, 86, 47, 52, 245, 93, 227, 14, 126, + 243, 184, 250, 217, 61, 208, 86, 245, 195, 5, 61, 208, 85, 218, 233, 171, + 210, 244, 171, 210, 197, 49, 215, 93, 249, 11, 244, 43, 50, 215, 93, 249, + 11, 244, 43, 219, 245, 3, 70, 231, 6, 216, 74, 212, 1, 217, 248, 210, + 244, 210, 198, 217, 248, 212, 0, 80, 248, 231, 3, 236, 106, 95, 13, 215, + 245, 243, 227, 163, 243, 136, 13, 240, 84, 243, 227, 103, 227, 37, 250, + 226, 103, 227, 37, 219, 244, 61, 243, 222, 3, 246, 216, 243, 85, 25, 3, + 243, 85, 241, 115, 76, 220, 1, 206, 212, 226, 251, 50, 245, 166, 3, 243, + 85, 206, 221, 49, 245, 166, 3, 243, 85, 49, 219, 209, 230, 99, 50, 219, + 209, 230, 99, 239, 102, 219, 209, 230, 99, 228, 8, 112, 210, 3, 228, 8, + 121, 210, 3, 49, 25, 50, 52, 207, 173, 49, 25, 50, 210, 3, 49, 223, 228, + 163, 50, 210, 3, 163, 49, 210, 3, 112, 210, 4, 3, 246, 62, 55, 226, 247, + 243, 142, 247, 137, 236, 106, 215, 135, 61, 245, 216, 243, 221, 61, 245, + 216, 243, 222, 3, 96, 208, 254, 61, 245, 216, 243, 222, 3, 86, 208, 254, + 61, 51, 3, 96, 208, 254, 61, 51, 3, 86, 208, 254, 13, 49, 61, 51, 155, + 13, 50, 61, 51, 155, 13, 49, 250, 218, 155, 13, 50, 250, 218, 155, 13, + 49, 52, 250, 218, 155, 13, 50, 52, 250, 218, 155, 13, 49, 61, 208, 133, + 213, 33, 155, 13, 50, 61, 208, 133, 213, 33, 155, 13, 49, 239, 214, 219, + 76, 13, 50, 239, 214, 219, 76, 177, 217, 58, 47, 183, 217, 58, 47, 250, + 194, 238, 226, 246, 62, 47, 246, 18, 238, 226, 246, 62, 47, 50, 53, 3, + 43, 218, 76, 163, 96, 47, 163, 86, 47, 163, 49, 50, 47, 163, 96, 52, 47, + 163, 86, 52, 47, 163, 49, 50, 52, 47, 163, 96, 53, 239, 120, 142, 163, + 86, 53, 239, 120, 142, 163, 96, 52, 53, 239, 120, 142, 163, 86, 52, 53, + 239, 120, 142, 163, 86, 211, 171, 47, 58, 59, 248, 36, 58, 59, 243, 82, + 58, 59, 242, 210, 58, 59, 243, 81, 58, 59, 242, 146, 58, 59, 243, 17, 58, + 59, 242, 209, 58, 59, 243, 80, 58, 59, 242, 114, 58, 59, 242, 241, 58, + 59, 242, 177, 58, 59, 243, 48, 58, 59, 242, 145, 58, 59, 243, 16, 58, 59, + 242, 208, 58, 59, 243, 79, 58, 59, 242, 98, 58, 59, 242, 225, 58, 59, + 242, 161, 58, 59, 243, 32, 58, 59, 242, 129, 58, 59, 243, 0, 58, 59, 242, + 192, 58, 59, 243, 63, 58, 59, 242, 113, 58, 59, 242, 240, 58, 59, 242, + 176, 58, 59, 243, 47, 58, 59, 242, 144, 58, 59, 243, 15, 58, 59, 242, + 207, 58, 59, 243, 78, 58, 59, 242, 90, 58, 59, 242, 217, 58, 59, 242, + 153, 58, 59, 243, 24, 58, 59, 242, 121, 58, 59, 242, 248, 58, 59, 242, + 184, 58, 59, 243, 55, 58, 59, 242, 105, 58, 59, 242, 232, 58, 59, 242, + 168, 58, 59, 243, 39, 58, 59, 242, 136, 58, 59, 243, 7, 58, 59, 242, 199, + 58, 59, 243, 70, 58, 59, 242, 97, 58, 59, 242, 224, 58, 59, 242, 160, 58, + 59, 243, 31, 58, 59, 242, 128, 58, 59, 242, 255, 58, 59, 242, 191, 58, + 59, 243, 62, 58, 59, 242, 112, 58, 59, 242, 239, 58, 59, 242, 175, 58, + 59, 243, 46, 58, 59, 242, 143, 58, 59, 243, 14, 58, 59, 242, 206, 58, 59, + 243, 77, 58, 59, 242, 86, 58, 59, 242, 213, 58, 59, 242, 149, 58, 59, + 243, 20, 58, 59, 242, 117, 58, 59, 242, 244, 58, 59, 242, 180, 58, 59, + 243, 51, 58, 59, 242, 101, 58, 59, 242, 228, 58, 59, 242, 164, 58, 59, + 243, 35, 58, 59, 242, 132, 58, 59, 243, 3, 58, 59, 242, 195, 58, 59, 243, + 66, 58, 59, 242, 93, 58, 59, 242, 220, 58, 59, 242, 156, 58, 59, 243, 27, + 58, 59, 242, 124, 58, 59, 242, 251, 58, 59, 242, 187, 58, 59, 243, 58, + 58, 59, 242, 108, 58, 59, 242, 235, 58, 59, 242, 171, 58, 59, 243, 42, + 58, 59, 242, 139, 58, 59, 243, 10, 58, 59, 242, 202, 58, 59, 243, 73, 58, + 59, 242, 89, 58, 59, 242, 216, 58, 59, 242, 152, 58, 59, 243, 23, 58, 59, + 242, 120, 58, 59, 242, 247, 58, 59, 242, 183, 58, 59, 243, 54, 58, 59, + 242, 104, 58, 59, 242, 231, 58, 59, 242, 167, 58, 59, 243, 38, 58, 59, + 242, 135, 58, 59, 243, 6, 58, 59, 242, 198, 58, 59, 243, 69, 58, 59, 242, + 96, 58, 59, 242, 223, 58, 59, 242, 159, 58, 59, 243, 30, 58, 59, 242, + 127, 58, 59, 242, 254, 58, 59, 242, 190, 58, 59, 243, 61, 58, 59, 242, + 111, 58, 59, 242, 238, 58, 59, 242, 174, 58, 59, 243, 45, 58, 59, 242, + 142, 58, 59, 243, 13, 58, 59, 242, 205, 58, 59, 243, 76, 58, 59, 242, 84, + 58, 59, 242, 211, 58, 59, 242, 147, 58, 59, 243, 18, 58, 59, 242, 115, + 58, 59, 242, 242, 58, 59, 242, 178, 58, 59, 243, 49, 58, 59, 242, 99, 58, + 59, 242, 226, 58, 59, 242, 162, 58, 59, 243, 33, 58, 59, 242, 130, 58, + 59, 243, 1, 58, 59, 242, 193, 58, 59, 243, 64, 58, 59, 242, 91, 58, 59, + 242, 218, 58, 59, 242, 154, 58, 59, 243, 25, 58, 59, 242, 122, 58, 59, + 242, 249, 58, 59, 242, 185, 58, 59, 243, 56, 58, 59, 242, 106, 58, 59, + 242, 233, 58, 59, 242, 169, 58, 59, 243, 40, 58, 59, 242, 137, 58, 59, + 243, 8, 58, 59, 242, 200, 58, 59, 243, 71, 58, 59, 242, 87, 58, 59, 242, + 214, 58, 59, 242, 150, 58, 59, 243, 21, 58, 59, 242, 118, 58, 59, 242, + 245, 58, 59, 242, 181, 58, 59, 243, 52, 58, 59, 242, 102, 58, 59, 242, + 229, 58, 59, 242, 165, 58, 59, 243, 36, 58, 59, 242, 133, 58, 59, 243, 4, + 58, 59, 242, 196, 58, 59, 243, 67, 58, 59, 242, 94, 58, 59, 242, 221, 58, + 59, 242, 157, 58, 59, 243, 28, 58, 59, 242, 125, 58, 59, 242, 252, 58, + 59, 242, 188, 58, 59, 243, 59, 58, 59, 242, 109, 58, 59, 242, 236, 58, + 59, 242, 172, 58, 59, 243, 43, 58, 59, 242, 140, 58, 59, 243, 11, 58, 59, + 242, 203, 58, 59, 243, 74, 58, 59, 242, 85, 58, 59, 242, 212, 58, 59, + 242, 148, 58, 59, 243, 19, 58, 59, 242, 116, 58, 59, 242, 243, 58, 59, + 242, 179, 58, 59, 243, 50, 58, 59, 242, 100, 58, 59, 242, 227, 58, 59, + 242, 163, 58, 59, 243, 34, 58, 59, 242, 131, 58, 59, 243, 2, 58, 59, 242, + 194, 58, 59, 243, 65, 58, 59, 242, 92, 58, 59, 242, 219, 58, 59, 242, + 155, 58, 59, 243, 26, 58, 59, 242, 123, 58, 59, 242, 250, 58, 59, 242, + 186, 58, 59, 243, 57, 58, 59, 242, 107, 58, 59, 242, 234, 58, 59, 242, + 170, 58, 59, 243, 41, 58, 59, 242, 138, 58, 59, 243, 9, 58, 59, 242, 201, + 58, 59, 243, 72, 58, 59, 242, 88, 58, 59, 242, 215, 58, 59, 242, 151, 58, + 59, 243, 22, 58, 59, 242, 119, 58, 59, 242, 246, 58, 59, 242, 182, 58, + 59, 243, 53, 58, 59, 242, 103, 58, 59, 242, 230, 58, 59, 242, 166, 58, + 59, 243, 37, 58, 59, 242, 134, 58, 59, 243, 5, 58, 59, 242, 197, 58, 59, + 243, 68, 58, 59, 242, 95, 58, 59, 242, 222, 58, 59, 242, 158, 58, 59, + 243, 29, 58, 59, 242, 126, 58, 59, 242, 253, 58, 59, 242, 189, 58, 59, + 243, 60, 58, 59, 242, 110, 58, 59, 242, 237, 58, 59, 242, 173, 58, 59, + 243, 44, 58, 59, 242, 141, 58, 59, 243, 12, 58, 59, 242, 204, 58, 59, + 243, 75, 86, 207, 134, 53, 3, 80, 95, 86, 207, 134, 53, 3, 52, 80, 95, + 96, 52, 53, 3, 80, 95, 86, 52, 53, 3, 80, 95, 49, 50, 52, 53, 3, 80, 95, + 86, 207, 134, 53, 239, 120, 142, 96, 52, 53, 239, 120, 142, 86, 52, 53, + 239, 120, 142, 183, 53, 3, 236, 106, 95, 177, 53, 3, 236, 106, 95, 177, + 208, 70, 47, 183, 208, 70, 47, 96, 52, 244, 145, 47, 86, 52, 244, 145, + 47, 96, 208, 70, 244, 145, 47, 86, 208, 70, 244, 145, 47, 86, 207, 134, + 208, 70, 244, 145, 47, 86, 53, 3, 242, 83, 211, 77, 177, 53, 208, 173, + 142, 183, 53, 208, 173, 142, 86, 53, 3, 209, 249, 3, 80, 95, 86, 53, 3, + 209, 249, 3, 52, 80, 95, 86, 207, 134, 53, 3, 209, 248, 86, 207, 134, 53, + 3, 209, 249, 3, 80, 95, 86, 207, 134, 53, 3, 209, 249, 3, 52, 80, 95, 96, + 250, 96, 86, 250, 96, 96, 52, 250, 96, 86, 52, 250, 96, 96, 53, 208, 173, + 62, 243, 221, 86, 53, 208, 173, 62, 243, 221, 96, 53, 239, 120, 248, 231, + 208, 173, 62, 243, 221, 86, 53, 239, 120, 248, 231, 208, 173, 62, 243, + 221, 153, 204, 46, 25, 211, 238, 241, 176, 47, 153, 241, 176, 25, 211, + 238, 204, 46, 47, 153, 204, 46, 53, 3, 113, 153, 241, 176, 53, 3, 113, + 211, 238, 241, 176, 53, 3, 113, 211, 238, 204, 46, 53, 3, 113, 153, 204, + 46, 53, 25, 153, 241, 176, 47, 153, 241, 176, 53, 25, 211, 238, 241, 176, + 47, 211, 238, 241, 176, 53, 25, 211, 238, 204, 46, 47, 211, 238, 204, 46, + 53, 25, 153, 204, 46, 47, 215, 245, 243, 228, 245, 124, 240, 84, 243, + 227, 240, 84, 243, 228, 245, 124, 215, 245, 243, 227, 211, 238, 241, 176, + 53, 245, 124, 153, 241, 176, 47, 153, 241, 176, 53, 245, 124, 211, 238, + 241, 176, 47, 240, 84, 243, 228, 245, 124, 153, 241, 176, 47, 215, 245, + 243, 228, 245, 124, 211, 238, 241, 176, 47, 153, 241, 176, 53, 245, 124, + 153, 204, 46, 47, 153, 204, 46, 53, 245, 124, 153, 241, 176, 47, 204, 76, + 53, 218, 59, 243, 164, 216, 16, 53, 218, 59, 86, 209, 84, 245, 84, 206, + 212, 53, 218, 59, 86, 209, 84, 245, 84, 242, 68, 53, 218, 59, 183, 209, + 84, 245, 84, 227, 212, 53, 218, 59, 183, 209, 84, 245, 84, 216, 5, 216, + 8, 250, 129, 246, 18, 47, 227, 215, 250, 129, 250, 194, 47, 208, 145, + 250, 129, 250, 194, 47, 247, 248, 250, 129, 250, 194, 47, 208, 145, 250, + 129, 246, 18, 53, 3, 224, 102, 208, 145, 250, 129, 250, 194, 53, 3, 218, + 76, 226, 251, 50, 213, 145, 246, 18, 47, 226, 251, 49, 213, 145, 250, + 194, 47, 250, 194, 246, 16, 246, 62, 47, 246, 18, 246, 16, 246, 62, 47, + 86, 53, 87, 212, 228, 96, 47, 96, 53, 87, 212, 228, 86, 47, 212, 228, 86, + 53, 87, 96, 47, 86, 53, 3, 91, 56, 96, 53, 3, 91, 56, 86, 53, 209, 25, + 203, 196, 49, 50, 53, 209, 25, 5, 246, 61, 177, 207, 134, 53, 239, 120, + 5, 246, 61, 49, 150, 112, 50, 150, 121, 237, 86, 49, 150, 121, 50, 150, + 112, 237, 86, 112, 150, 50, 121, 150, 49, 237, 86, 112, 150, 49, 121, + 150, 50, 237, 86, 49, 150, 112, 50, 150, 112, 237, 86, 112, 150, 50, 121, + 150, 50, 237, 86, 49, 150, 121, 50, 150, 121, 237, 86, 112, 150, 49, 121, + 150, 49, 237, 86, 96, 237, 87, 3, 150, 112, 208, 173, 142, 86, 237, 87, + 3, 150, 112, 208, 173, 142, 177, 237, 87, 3, 150, 50, 208, 173, 142, 183, + 237, 87, 3, 150, 50, 208, 173, 142, 96, 237, 87, 3, 150, 121, 208, 173, + 142, 86, 237, 87, 3, 150, 121, 208, 173, 142, 177, 237, 87, 3, 150, 49, + 208, 173, 142, 183, 237, 87, 3, 150, 49, 208, 173, 142, 96, 237, 87, 3, + 150, 112, 239, 120, 142, 86, 237, 87, 3, 150, 112, 239, 120, 142, 177, + 237, 87, 3, 150, 50, 239, 120, 142, 183, 237, 87, 3, 150, 50, 239, 120, + 142, 96, 237, 87, 3, 150, 121, 239, 120, 142, 86, 237, 87, 3, 150, 121, + 239, 120, 142, 177, 237, 87, 3, 150, 49, 239, 120, 142, 183, 237, 87, 3, + 150, 49, 239, 120, 142, 96, 237, 87, 3, 150, 112, 87, 96, 237, 87, 3, + 150, 242, 70, 177, 237, 87, 3, 150, 49, 248, 110, 177, 237, 87, 3, 150, + 216, 16, 86, 237, 87, 3, 150, 112, 87, 86, 237, 87, 3, 150, 242, 70, 183, + 237, 87, 3, 150, 49, 248, 110, 183, 237, 87, 3, 150, 216, 16, 96, 237, + 87, 3, 150, 112, 87, 86, 237, 87, 3, 150, 206, 224, 96, 237, 87, 3, 150, + 121, 87, 86, 237, 87, 3, 150, 242, 70, 86, 237, 87, 3, 150, 112, 87, 96, + 237, 87, 3, 150, 206, 224, 86, 237, 87, 3, 150, 121, 87, 96, 237, 87, 3, + 150, 242, 70, 96, 237, 87, 3, 150, 112, 87, 163, 244, 144, 96, 237, 87, + 3, 150, 121, 248, 126, 163, 244, 144, 86, 237, 87, 3, 150, 112, 87, 163, + 244, 144, 86, 237, 87, 3, 150, 121, 248, 126, 163, 244, 144, 177, 237, + 87, 3, 150, 49, 248, 110, 183, 237, 87, 3, 150, 216, 16, 183, 237, 87, 3, + 150, 49, 248, 110, 177, 237, 87, 3, 150, 216, 16, 50, 52, 53, 3, 215, + 189, 237, 64, 241, 35, 2, 87, 86, 47, 208, 228, 219, 255, 87, 86, 47, 96, + 53, 87, 208, 228, 219, 254, 86, 53, 87, 208, 228, 219, 254, 86, 53, 87, + 251, 7, 156, 135, 227, 179, 87, 96, 47, 96, 53, 209, 25, 227, 178, 237, + 247, 87, 86, 47, 210, 245, 87, 86, 47, 96, 53, 209, 25, 210, 244, 210, + 198, 87, 96, 47, 49, 239, 244, 209, 248, 50, 239, 244, 209, 248, 112, + 239, 244, 209, 248, 121, 239, 244, 209, 248, 208, 70, 80, 248, 231, 244, + 43, 202, 160, 221, 164, 211, 188, 202, 160, 221, 164, 207, 121, 245, 242, + 49, 61, 245, 93, 155, 50, 61, 245, 93, 155, 49, 61, 219, 76, 50, 61, 219, + 76, 202, 160, 221, 164, 49, 231, 65, 155, 202, 160, 221, 164, 50, 231, + 65, 155, 202, 160, 221, 164, 49, 248, 65, 155, 202, 160, 221, 164, 50, + 248, 65, 155, 49, 51, 247, 227, 3, 206, 246, 50, 51, 247, 227, 3, 206, + 246, 49, 51, 247, 227, 3, 208, 255, 231, 50, 208, 145, 245, 165, 50, 51, + 247, 227, 3, 208, 255, 231, 50, 247, 248, 245, 165, 49, 51, 247, 227, 3, + 208, 255, 231, 50, 247, 248, 245, 165, 50, 51, 247, 227, 3, 208, 255, + 231, 50, 208, 145, 245, 165, 49, 250, 218, 247, 227, 3, 243, 85, 50, 250, + 218, 247, 227, 3, 243, 85, 49, 250, 129, 227, 179, 155, 50, 250, 129, + 237, 247, 155, 52, 49, 250, 129, 237, 247, 155, 52, 50, 250, 129, 227, + 179, 155, 49, 62, 208, 133, 213, 33, 155, 50, 62, 208, 133, 213, 33, 155, + 242, 83, 240, 40, 80, 202, 30, 227, 114, 225, 17, 250, 218, 220, 1, 227, + 222, 50, 250, 218, 206, 69, 3, 211, 177, 225, 17, 50, 250, 218, 3, 243, + 85, 250, 218, 3, 215, 94, 231, 6, 251, 126, 250, 217, 211, 208, 250, 218, + 220, 1, 227, 222, 211, 208, 250, 218, 220, 1, 206, 224, 207, 174, 250, + 217, 216, 73, 250, 217, 250, 218, 3, 206, 246, 216, 73, 250, 218, 3, 206, + 246, 220, 89, 250, 218, 220, 1, 206, 224, 220, 89, 250, 218, 220, 1, 242, + 70, 225, 17, 250, 218, 3, 171, 250, 107, 241, 81, 231, 50, 53, 218, 59, + 112, 25, 216, 16, 225, 17, 250, 218, 3, 171, 250, 107, 241, 81, 231, 50, + 53, 218, 59, 112, 25, 227, 222, 225, 17, 250, 218, 3, 171, 250, 107, 241, + 81, 231, 50, 53, 218, 59, 121, 25, 216, 16, 225, 17, 250, 218, 3, 171, + 250, 107, 241, 81, 231, 50, 53, 218, 59, 121, 25, 227, 222, 225, 17, 250, + 218, 3, 171, 250, 107, 241, 81, 231, 50, 53, 218, 59, 50, 25, 206, 224, + 225, 17, 250, 218, 3, 171, 250, 107, 241, 81, 231, 50, 53, 218, 59, 49, + 25, 206, 224, 225, 17, 250, 218, 3, 171, 250, 107, 241, 81, 231, 50, 53, + 218, 59, 50, 25, 242, 70, 225, 17, 250, 218, 3, 171, 250, 107, 241, 81, + 231, 50, 53, 218, 59, 49, 25, 242, 70, 216, 73, 241, 94, 213, 117, 241, + 94, 213, 118, 3, 219, 203, 241, 94, 213, 118, 3, 5, 246, 62, 55, 241, 94, + 213, 118, 3, 50, 53, 55, 241, 94, 213, 118, 3, 49, 53, 55, 246, 62, 3, + 236, 106, 142, 43, 80, 142, 43, 219, 81, 43, 216, 74, 212, 0, 43, 218, + 233, 246, 62, 243, 142, 247, 137, 236, 106, 248, 231, 25, 208, 145, 162, + 243, 142, 247, 137, 80, 142, 246, 62, 3, 210, 200, 203, 196, 43, 250, + 192, 243, 137, 54, 112, 53, 209, 25, 246, 61, 43, 61, 247, 177, 43, 247, + 177, 43, 227, 178, 43, 237, 246, 246, 62, 3, 5, 246, 62, 208, 173, 209, + 93, 216, 16, 246, 62, 3, 120, 236, 106, 211, 20, 208, 173, 209, 93, 216, + 16, 103, 215, 245, 243, 228, 212, 57, 103, 240, 84, 243, 228, 212, 57, + 103, 250, 59, 103, 5, 246, 61, 103, 211, 177, 120, 230, 98, 211, 175, + 208, 86, 3, 70, 55, 208, 86, 3, 206, 246, 215, 94, 231, 50, 208, 85, 208, + 86, 3, 213, 124, 250, 50, 247, 247, 50, 208, 86, 87, 49, 208, 85, 49, + 208, 86, 248, 110, 80, 142, 80, 248, 231, 248, 110, 50, 208, 85, 247, + 235, 3, 49, 162, 248, 43, 247, 235, 3, 50, 162, 248, 43, 62, 247, 234, + 23, 3, 49, 162, 248, 43, 23, 3, 50, 162, 248, 43, 61, 236, 40, 62, 236, + 40, 49, 204, 21, 240, 40, 50, 204, 21, 240, 40, 49, 52, 204, 21, 240, 40, + 50, 52, 204, 21, 240, 40, 231, 42, 231, 27, 208, 251, 115, 231, 27, 231, + 28, 222, 234, 3, 80, 142, 242, 77, 223, 228, 51, 3, 245, 187, 219, 208, + 231, 39, 250, 81, 212, 193, 217, 224, 241, 35, 2, 25, 212, 59, 219, 81, + 241, 35, 2, 25, 212, 59, 219, 82, 3, 208, 228, 55, 235, 154, 208, 173, + 25, 212, 59, 219, 81, 238, 48, 211, 93, 209, 81, 242, 69, 208, 86, 3, 49, + 162, 248, 43, 242, 69, 208, 86, 3, 50, 162, 248, 43, 62, 243, 222, 3, + 121, 47, 62, 226, 246, 61, 246, 62, 3, 121, 47, 62, 246, 62, 3, 121, 47, + 241, 20, 61, 211, 177, 241, 20, 62, 211, 177, 241, 20, 61, 243, 221, 241, + 20, 62, 243, 221, 241, 20, 61, 246, 61, 241, 20, 62, 246, 61, 215, 134, + 216, 74, 212, 1, 219, 254, 212, 1, 3, 219, 203, 216, 74, 212, 1, 3, 236, + 106, 95, 248, 73, 212, 0, 248, 73, 216, 74, 212, 0, 52, 218, 76, 208, 70, + 218, 76, 227, 217, 245, 86, 250, 218, 155, 216, 11, 245, 86, 250, 218, + 155, 208, 212, 224, 100, 223, 162, 43, 70, 219, 254, 223, 162, 43, 91, + 219, 254, 223, 162, 43, 23, 219, 254, 223, 162, 206, 238, 219, 255, 3, + 243, 85, 223, 162, 206, 238, 219, 255, 3, 218, 76, 223, 162, 51, 230, + 245, 219, 254, 223, 162, 51, 206, 238, 219, 254, 120, 227, 37, 25, 219, + 254, 120, 227, 37, 219, 245, 219, 254, 223, 162, 23, 219, 254, 224, 58, + 120, 210, 220, 210, 218, 3, 231, 2, 217, 58, 231, 3, 219, 254, 239, 252, + 219, 71, 231, 2, 231, 3, 3, 52, 95, 231, 3, 250, 15, 3, 212, 57, 246, 54, + 239, 99, 250, 194, 231, 0, 227, 115, 231, 1, 3, 216, 142, 219, 52, 250, + 104, 218, 53, 227, 115, 231, 1, 3, 213, 145, 219, 52, 250, 104, 218, 53, + 227, 115, 231, 1, 221, 166, 231, 44, 209, 93, 218, 53, 231, 3, 250, 104, + 34, 218, 63, 219, 254, 217, 52, 231, 3, 219, 254, 231, 3, 3, 96, 53, 3, + 113, 231, 3, 3, 23, 54, 231, 3, 3, 230, 244, 231, 3, 3, 206, 237, 231, 3, + 3, 219, 203, 231, 3, 3, 206, 246, 230, 99, 228, 8, 49, 208, 86, 219, 254, + 202, 160, 221, 164, 214, 198, 245, 223, 202, 160, 221, 164, 214, 198, + 218, 114, 202, 160, 221, 164, 214, 198, 217, 219, 91, 2, 3, 5, 246, 62, + 55, 91, 2, 3, 246, 53, 251, 139, 55, 91, 2, 3, 208, 228, 55, 91, 2, 3, + 70, 56, 91, 2, 3, 208, 228, 56, 91, 2, 3, 210, 246, 108, 91, 2, 3, 62, + 208, 85, 224, 103, 2, 3, 245, 234, 55, 224, 103, 2, 3, 70, 56, 224, 103, + 2, 3, 240, 84, 243, 83, 224, 103, 2, 3, 215, 245, 243, 83, 91, 2, 231, + 50, 49, 162, 246, 61, 91, 2, 231, 50, 50, 162, 246, 61, 206, 54, 219, + 245, 245, 131, 217, 224, 223, 224, 2, 3, 70, 55, 223, 224, 2, 3, 206, + 246, 213, 142, 217, 225, 3, 247, 248, 246, 15, 212, 34, 217, 224, 223, + 224, 2, 231, 50, 49, 162, 246, 61, 223, 224, 2, 231, 50, 50, 162, 246, + 61, 43, 223, 224, 2, 3, 246, 53, 251, 138, 223, 224, 2, 231, 50, 52, 246, + 61, 43, 243, 137, 54, 91, 2, 231, 50, 208, 85, 224, 103, 2, 231, 50, 208, + 85, 223, 224, 2, 231, 50, 208, 85, 230, 253, 217, 224, 216, 6, 230, 253, + 217, 224, 202, 160, 221, 164, 216, 116, 245, 223, 250, 245, 219, 245, + 245, 171, 230, 245, 3, 243, 85, 206, 238, 3, 224, 103, 54, 206, 238, 3, + 219, 203, 230, 245, 3, 219, 203, 230, 245, 3, 227, 37, 250, 226, 206, + 238, 3, 227, 37, 219, 244, 206, 238, 87, 230, 244, 230, 245, 87, 206, + 237, 206, 238, 87, 248, 231, 87, 230, 244, 230, 245, 87, 248, 231, 87, + 206, 237, 206, 238, 248, 110, 25, 230, 98, 3, 206, 237, 230, 245, 248, + 110, 25, 230, 98, 3, 230, 244, 246, 16, 206, 238, 3, 213, 123, 246, 16, + 230, 245, 3, 213, 123, 52, 51, 230, 244, 52, 51, 206, 237, 246, 16, 206, + 238, 3, 213, 124, 25, 212, 34, 217, 224, 227, 37, 25, 3, 70, 55, 227, 37, + 219, 245, 3, 70, 55, 52, 227, 37, 250, 226, 52, 227, 37, 219, 244, 120, + 230, 246, 227, 37, 250, 226, 120, 230, 246, 227, 37, 219, 244, 212, 43, + 228, 8, 219, 244, 212, 43, 228, 8, 250, 226, 227, 37, 219, 245, 219, 200, + 227, 37, 250, 226, 227, 37, 25, 3, 101, 211, 77, 227, 37, 219, 245, 3, + 101, 211, 77, 227, 37, 25, 3, 236, 106, 244, 144, 227, 37, 219, 245, 3, + 236, 106, 244, 144, 227, 37, 25, 3, 52, 219, 203, 227, 37, 25, 3, 206, + 246, 227, 37, 25, 3, 52, 206, 246, 5, 206, 51, 3, 206, 246, 227, 37, 219, + 245, 3, 52, 219, 203, 227, 37, 219, 245, 3, 52, 206, 246, 202, 160, 221, + 164, 243, 94, 250, 184, 202, 160, 221, 164, 216, 179, 250, 184, 241, 35, + 2, 3, 70, 56, 235, 154, 3, 70, 55, 208, 70, 236, 106, 248, 231, 3, 52, + 80, 95, 208, 70, 236, 106, 248, 231, 3, 208, 70, 80, 95, 208, 228, 219, + 255, 3, 70, 55, 208, 228, 219, 255, 3, 215, 245, 243, 83, 212, 129, 224, + 103, 212, 128, 245, 210, 3, 70, 55, 241, 35, 3, 250, 59, 251, 7, 156, + 208, 173, 3, 246, 53, 251, 138, 250, 151, 156, 219, 245, 156, 135, 241, + 35, 2, 87, 91, 54, 91, 2, 87, 241, 35, 54, 241, 35, 2, 87, 208, 228, 219, + 254, 52, 245, 243, 241, 36, 120, 245, 203, 241, 35, 212, 143, 126, 245, + 203, 241, 35, 212, 143, 241, 35, 2, 3, 120, 187, 87, 25, 120, 187, 56, + 241, 30, 3, 239, 147, 187, 55, 227, 179, 3, 246, 62, 231, 6, 237, 247, 3, + 246, 62, 231, 6, 227, 179, 3, 217, 47, 131, 55, 237, 247, 3, 217, 47, + 131, 55, 227, 179, 219, 245, 212, 59, 156, 135, 237, 247, 219, 245, 212, + 59, 156, 135, 227, 179, 219, 245, 212, 59, 156, 208, 173, 3, 70, 231, 6, + 237, 247, 219, 245, 212, 59, 156, 208, 173, 3, 70, 231, 6, 227, 179, 219, + 245, 212, 59, 156, 208, 173, 3, 70, 55, 237, 247, 219, 245, 212, 59, 156, + 208, 173, 3, 70, 55, 227, 179, 219, 245, 212, 59, 156, 208, 173, 3, 70, + 87, 216, 16, 237, 247, 219, 245, 212, 59, 156, 208, 173, 3, 70, 87, 227, + 222, 227, 179, 219, 245, 250, 152, 237, 247, 219, 245, 250, 152, 227, + 179, 25, 212, 118, 221, 166, 156, 135, 237, 247, 25, 212, 118, 221, 166, + 156, 135, 227, 179, 25, 221, 166, 250, 152, 237, 247, 25, 221, 166, 250, + 152, 227, 179, 87, 242, 76, 156, 87, 237, 246, 237, 247, 87, 242, 76, + 156, 87, 227, 178, 227, 179, 87, 212, 129, 219, 245, 241, 36, 237, 247, + 87, 212, 129, 219, 245, 241, 36, 227, 179, 87, 212, 129, 87, 237, 246, + 237, 247, 87, 212, 129, 87, 227, 178, 227, 179, 87, 237, 247, 87, 242, + 76, 241, 36, 237, 247, 87, 227, 179, 87, 242, 76, 241, 36, 227, 179, 87, + 212, 59, 156, 87, 237, 247, 87, 212, 59, 241, 36, 237, 247, 87, 212, 59, + 156, 87, 227, 179, 87, 212, 59, 241, 36, 212, 59, 156, 208, 173, 219, + 245, 227, 178, 212, 59, 156, 208, 173, 219, 245, 237, 246, 212, 59, 156, + 208, 173, 219, 245, 227, 179, 3, 70, 231, 6, 212, 59, 156, 208, 173, 219, + 245, 237, 247, 3, 70, 231, 6, 242, 76, 156, 208, 173, 219, 245, 227, 178, + 242, 76, 156, 208, 173, 219, 245, 237, 246, 242, 76, 212, 59, 156, 208, + 173, 219, 245, 227, 178, 242, 76, 212, 59, 156, 208, 173, 219, 245, 237, + 246, 212, 129, 219, 245, 227, 178, 212, 129, 219, 245, 237, 246, 212, + 129, 87, 227, 179, 87, 241, 35, 54, 212, 129, 87, 237, 247, 87, 241, 35, + 54, 52, 222, 221, 227, 178, 52, 222, 221, 237, 246, 52, 222, 221, 227, + 179, 3, 206, 246, 237, 247, 219, 200, 227, 178, 237, 247, 248, 110, 227, + 178, 227, 179, 246, 16, 247, 137, 245, 87, 237, 247, 246, 16, 247, 137, + 245, 87, 227, 179, 246, 16, 247, 137, 245, 88, 87, 212, 59, 241, 36, 237, + 247, 246, 16, 247, 137, 245, 88, 87, 212, 59, 241, 36, 212, 35, 209, 97, + 228, 6, 209, 97, 212, 35, 209, 98, 219, 245, 156, 135, 228, 6, 209, 98, + 219, 245, 156, 135, 241, 35, 2, 3, 247, 170, 55, 217, 250, 87, 212, 118, + 241, 35, 54, 210, 237, 87, 212, 118, 241, 35, 54, 217, 250, 87, 212, 118, + 221, 166, 156, 135, 210, 237, 87, 212, 118, 221, 166, 156, 135, 217, 250, + 87, 241, 35, 54, 210, 237, 87, 241, 35, 54, 217, 250, 87, 221, 166, 156, + 135, 210, 237, 87, 221, 166, 156, 135, 217, 250, 87, 251, 7, 156, 135, + 210, 237, 87, 251, 7, 156, 135, 217, 250, 87, 221, 166, 251, 7, 156, 135, + 210, 237, 87, 221, 166, 251, 7, 156, 135, 52, 217, 249, 52, 210, 236, + 210, 245, 3, 243, 85, 210, 198, 3, 243, 85, 210, 245, 3, 91, 2, 56, 210, + 198, 3, 91, 2, 56, 210, 245, 3, 223, 224, 2, 56, 210, 198, 3, 223, 224, + 2, 56, 210, 245, 76, 219, 245, 156, 208, 173, 3, 70, 55, 210, 198, 76, + 219, 245, 156, 208, 173, 3, 70, 55, 210, 245, 76, 87, 241, 35, 54, 210, + 198, 76, 87, 241, 35, 54, 210, 245, 76, 87, 208, 228, 219, 254, 210, 198, + 76, 87, 208, 228, 219, 254, 210, 245, 76, 87, 251, 7, 156, 135, 210, 198, + 76, 87, 251, 7, 156, 135, 210, 245, 76, 87, 221, 166, 156, 135, 210, 198, + 76, 87, 221, 166, 156, 135, 51, 49, 171, 98, 219, 254, 51, 50, 171, 98, + 219, 254, 246, 16, 210, 244, 246, 16, 210, 197, 246, 16, 210, 245, 219, + 245, 156, 135, 246, 16, 210, 198, 219, 245, 156, 135, 210, 245, 87, 210, + 197, 210, 198, 87, 210, 244, 210, 245, 87, 210, 244, 210, 198, 87, 210, + 197, 210, 198, 248, 110, 210, 244, 210, 198, 248, 110, 25, 230, 98, 247, + 137, 244, 145, 3, 210, 244, 241, 115, 76, 220, 1, 242, 68, 218, 104, 3, + 209, 177, 208, 144, 208, 102, 230, 244, 239, 160, 221, 181, 212, 228, 49, + 210, 3, 212, 228, 121, 210, 3, 212, 228, 112, 210, 3, 218, 234, 3, 194, + 80, 248, 231, 208, 70, 50, 207, 173, 52, 80, 248, 231, 49, 207, 173, 80, + 248, 231, 52, 49, 207, 173, 52, 80, 248, 231, 52, 49, 207, 173, 163, 244, + 145, 239, 120, 49, 224, 245, 76, 52, 206, 38, 212, 228, 121, 210, 4, 3, + 219, 203, 212, 228, 112, 210, 4, 3, 206, 246, 212, 228, 112, 210, 4, 87, + 212, 228, 121, 210, 3, 52, 121, 210, 3, 52, 112, 210, 3, 52, 211, 32, + 221, 166, 54, 216, 73, 52, 211, 32, 221, 166, 54, 243, 104, 221, 166, + 243, 144, 3, 216, 73, 222, 233, 212, 57, 80, 227, 115, 3, 246, 62, 55, + 80, 227, 115, 3, 246, 62, 56, 121, 210, 4, 3, 246, 62, 56, 219, 82, 3, + 236, 106, 95, 219, 82, 3, 208, 228, 219, 254, 208, 70, 80, 248, 231, 248, + 67, 216, 117, 208, 70, 80, 248, 231, 3, 236, 106, 95, 208, 70, 245, 243, + 219, 254, 208, 70, 222, 221, 227, 178, 208, 70, 222, 221, 237, 246, 242, + 76, 212, 59, 227, 179, 219, 245, 156, 135, 242, 76, 212, 59, 237, 247, + 219, 245, 156, 135, 208, 70, 212, 1, 248, 67, 216, 117, 228, 8, 208, 70, + 80, 248, 231, 219, 254, 52, 212, 1, 219, 254, 61, 80, 142, 223, 162, 61, + 80, 142, 153, 241, 176, 61, 47, 153, 204, 46, 61, 47, 211, 238, 241, 176, + 61, 47, 211, 238, 204, 46, 61, 47, 49, 50, 61, 47, 96, 62, 47, 177, 62, + 47, 183, 62, 47, 153, 241, 176, 62, 47, 153, 204, 46, 62, 47, 211, 238, + 241, 176, 62, 47, 211, 238, 204, 46, 62, 47, 49, 50, 62, 47, 112, 121, + 62, 47, 86, 53, 3, 208, 211, 242, 68, 86, 53, 3, 208, 211, 206, 212, 96, + 53, 3, 208, 211, 242, 68, 96, 53, 3, 208, 211, 206, 212, 51, 3, 208, 145, + 162, 248, 43, 51, 3, 247, 248, 162, 248, 43, 51, 3, 206, 221, 50, 243, + 228, 162, 248, 43, 51, 3, 226, 251, 49, 243, 228, 162, 248, 43, 243, 222, + 3, 49, 162, 248, 43, 243, 222, 3, 50, 162, 248, 43, 243, 222, 3, 208, + 145, 162, 248, 43, 243, 222, 3, 247, 248, 162, 248, 43, 242, 83, 211, + 177, 62, 228, 8, 211, 177, 61, 228, 8, 211, 177, 62, 205, 242, 5, 211, + 177, 61, 205, 242, 5, 211, 177, 62, 218, 255, 61, 218, 255, 61, 237, 17, + 62, 237, 17, 236, 106, 62, 237, 17, 62, 228, 8, 246, 61, 62, 225, 10, + 243, 221, 61, 225, 10, 243, 221, 62, 225, 10, 226, 246, 61, 225, 10, 226, + 246, 62, 5, 243, 221, 62, 5, 226, 246, 61, 5, 226, 246, 62, 236, 106, + 241, 109, 61, 236, 106, 241, 109, 62, 80, 241, 109, 61, 80, 241, 109, 49, + 53, 3, 5, 246, 61, 126, 96, 250, 91, 49, 53, 3, 43, 218, 76, 163, 96, + 211, 171, 47, 96, 207, 134, 53, 3, 80, 95, 96, 207, 134, 53, 3, 52, 80, + 95, 96, 207, 134, 53, 239, 120, 142, 96, 207, 134, 208, 70, 244, 145, 47, + 96, 53, 3, 242, 83, 211, 77, 96, 53, 3, 209, 249, 3, 80, 95, 96, 53, 3, + 209, 249, 3, 52, 80, 95, 96, 207, 134, 53, 3, 209, 248, 96, 207, 134, 53, + 3, 209, 249, 3, 80, 95, 96, 207, 134, 53, 3, 209, 249, 3, 52, 80, 95, 96, + 53, 209, 25, 203, 196, 204, 76, 53, 218, 59, 243, 164, 227, 222, 241, 35, + 2, 87, 96, 47, 216, 74, 208, 228, 219, 255, 87, 96, 47, 96, 53, 87, 216, + 74, 251, 7, 156, 135, 86, 53, 209, 25, 237, 246, 86, 53, 209, 25, 210, + 197, 96, 217, 58, 47, 86, 217, 58, 47, 216, 74, 208, 228, 219, 255, 87, + 86, 47, 86, 53, 87, 216, 74, 251, 7, 156, 135, 208, 228, 219, 255, 87, + 96, 47, 96, 53, 87, 251, 7, 156, 135, 96, 53, 87, 216, 74, 208, 228, 219, + 254, 86, 53, 87, 216, 74, 208, 228, 219, 254, 183, 208, 84, 202, 30, 47, + 212, 228, 212, 59, 153, 47, 212, 228, 249, 22, 211, 238, 47, 61, 225, 10, + 211, 94, 62, 5, 211, 94, 61, 5, 211, 94, 62, 216, 11, 218, 255, 61, 216, + 11, 218, 255, 79, 228, 8, 246, 61, 79, 219, 205, 3, 219, 205, 231, 6, 79, + 246, 62, 3, 246, 62, 231, 6, 79, 246, 61, 79, 43, 214, 254, 212, 59, 153, + 53, 3, 236, 115, 237, 64, 249, 22, 211, 238, 53, 3, 236, 115, 209, 248, + 212, 59, 153, 53, 3, 236, 106, 209, 248, 249, 22, 211, 238, 53, 3, 236, + 106, 209, 248, 248, 118, 53, 218, 59, 183, 209, 84, 153, 241, 175, 212, + 228, 248, 118, 53, 218, 59, 183, 209, 84, 153, 241, 175, 96, 208, 84, 47, + 177, 208, 84, 47, 86, 208, 84, 47, 183, 208, 84, 47, 49, 50, 208, 84, 47, + 112, 121, 208, 84, 47, 153, 204, 46, 208, 84, 47, 153, 241, 176, 208, 84, + 47, 211, 238, 241, 176, 208, 84, 47, 211, 238, 204, 46, 208, 84, 47, 96, + 208, 84, 244, 143, 47, 177, 208, 84, 244, 143, 47, 86, 208, 84, 244, 143, + 47, 183, 208, 84, 244, 143, 47, 246, 18, 208, 84, 171, 246, 62, 47, 250, + 194, 208, 84, 171, 246, 62, 47, 96, 208, 84, 53, 208, 173, 142, 177, 208, + 84, 53, 208, 173, 142, 86, 208, 84, 53, 208, 173, 142, 183, 208, 84, 53, + 208, 173, 142, 153, 204, 46, 208, 84, 53, 208, 173, 142, 153, 241, 176, + 208, 84, 53, 208, 173, 142, 211, 238, 241, 176, 208, 84, 53, 208, 173, + 142, 211, 238, 204, 46, 208, 84, 53, 208, 173, 142, 96, 208, 84, 53, 3, + 52, 236, 106, 95, 177, 208, 84, 53, 3, 52, 236, 106, 95, 86, 208, 84, 53, + 3, 52, 236, 106, 95, 183, 208, 84, 53, 3, 52, 236, 106, 95, 236, 106, + 210, 11, 229, 151, 80, 210, 11, 229, 151, 96, 208, 84, 53, 115, 86, 208, + 84, 47, 177, 208, 84, 53, 96, 76, 183, 208, 84, 47, 86, 208, 84, 53, 115, + 96, 208, 84, 47, 183, 208, 84, 53, 96, 76, 177, 208, 84, 47, 96, 208, 84, + 219, 146, 250, 91, 177, 208, 84, 219, 146, 250, 91, 86, 208, 84, 219, + 146, 250, 91, 183, 208, 84, 219, 146, 250, 91, 96, 62, 43, 61, 47, 177, + 62, 43, 61, 47, 86, 62, 43, 61, 47, 183, 62, 43, 61, 47, 250, 194, 208, + 84, 50, 207, 92, 47, 250, 194, 208, 84, 247, 248, 207, 92, 47, 250, 194, + 208, 84, 49, 207, 92, 47, 250, 194, 208, 84, 208, 145, 207, 92, 47, 216, + 78, 227, 222, 216, 78, 216, 16, 222, 212, 227, 222, 222, 212, 216, 16, + 239, 147, 245, 166, 250, 92, 246, 57, 250, 193, 86, 62, 47, 209, 31, 208, + 143, 96, 241, 31, 250, 94, 209, 31, 216, 12, 177, 241, 31, 250, 94, 209, + 31, 208, 143, 86, 241, 31, 250, 94, 209, 31, 227, 218, 183, 241, 31, 250, + 94, 62, 96, 241, 31, 250, 94, 62, 177, 241, 31, 250, 94, 62, 86, 241, 31, + 250, 94, 62, 183, 241, 31, 250, 94, 183, 208, 84, 53, 3, 163, 208, 211, + 227, 212, 183, 208, 84, 53, 3, 163, 208, 211, 216, 5, 177, 208, 84, 53, + 3, 163, 208, 211, 227, 212, 177, 208, 84, 53, 3, 163, 208, 211, 216, 5, + 96, 208, 84, 53, 3, 163, 208, 211, 206, 212, 86, 208, 84, 53, 3, 163, + 208, 211, 206, 212, 96, 208, 84, 53, 3, 163, 208, 211, 242, 68, 86, 208, + 84, 53, 3, 163, 208, 211, 242, 68, 62, 245, 86, 183, 25, 96, 47, 62, 245, + 86, 183, 25, 86, 47, 62, 245, 86, 177, 25, 96, 47, 62, 245, 86, 177, 25, + 86, 47, 62, 245, 86, 96, 25, 177, 47, 62, 245, 86, 86, 25, 177, 47, 62, + 245, 86, 96, 25, 183, 47, 62, 245, 86, 86, 25, 183, 47, 216, 55, 53, 121, + 227, 222, 216, 55, 53, 121, 216, 16, 216, 55, 53, 112, 227, 222, 216, 55, + 53, 112, 216, 16, 216, 55, 53, 49, 206, 224, 216, 55, 53, 50, 206, 224, + 216, 55, 53, 49, 242, 70, 216, 55, 53, 50, 242, 70, 177, 61, 53, 239, + 120, 248, 231, 3, 236, 106, 142, 112, 250, 95, 231, 50, 34, 216, 144, + 247, 233, 248, 248, 98, 3, 157, 203, 196, 43, 203, 196, 43, 26, 203, 196, + 62, 51, 246, 215, 62, 243, 222, 246, 215, 207, 174, 62, 218, 255, 236, + 106, 62, 220, 81, 62, 220, 81, 62, 225, 10, 206, 223, 208, 86, 246, 215, + 62, 225, 10, 242, 69, 208, 86, 246, 215, 62, 225, 10, 227, 217, 208, 86, + 246, 215, 62, 225, 10, 216, 11, 208, 86, 246, 215, 208, 145, 162, 62, + 246, 61, 247, 248, 162, 62, 246, 61, 157, 239, 147, 218, 61, 62, 245, 82, + 215, 198, 157, 239, 147, 218, 61, 62, 245, 82, 61, 239, 147, 218, 61, + 245, 82, 215, 198, 61, 239, 147, 218, 61, 245, 82, 51, 218, 34, 231, 31, + 206, 250, 54, 96, 207, 134, 53, 3, 208, 86, 250, 93, 177, 207, 134, 53, + 3, 208, 86, 250, 93, 86, 207, 134, 53, 3, 208, 86, 250, 93, 183, 207, + 134, 53, 3, 208, 86, 250, 93, 180, 6, 1, 250, 0, 180, 6, 1, 247, 181, + 180, 6, 1, 206, 53, 180, 6, 1, 238, 50, 180, 6, 1, 243, 108, 180, 6, 1, + 203, 24, 180, 6, 1, 202, 64, 180, 6, 1, 241, 250, 180, 6, 1, 202, 89, + 180, 6, 1, 230, 188, 180, 6, 1, 81, 230, 188, 180, 6, 1, 75, 180, 6, 1, + 243, 128, 180, 6, 1, 230, 10, 180, 6, 1, 227, 79, 180, 6, 1, 223, 167, + 180, 6, 1, 223, 69, 180, 6, 1, 220, 20, 180, 6, 1, 218, 56, 180, 6, 1, + 215, 244, 180, 6, 1, 212, 41, 180, 6, 1, 207, 161, 180, 6, 1, 207, 10, + 180, 6, 1, 239, 123, 180, 6, 1, 237, 23, 180, 6, 1, 219, 217, 180, 6, 1, + 219, 34, 180, 6, 1, 212, 202, 180, 6, 1, 207, 255, 180, 6, 1, 246, 104, + 180, 6, 1, 213, 90, 180, 6, 1, 203, 30, 180, 6, 1, 203, 32, 180, 6, 1, + 203, 64, 180, 6, 1, 211, 204, 152, 180, 6, 1, 202, 213, 180, 6, 1, 5, + 202, 183, 180, 6, 1, 5, 202, 184, 3, 209, 248, 180, 6, 1, 202, 247, 180, + 6, 1, 230, 229, 5, 202, 183, 180, 6, 1, 248, 73, 202, 183, 180, 6, 1, + 230, 229, 248, 73, 202, 183, 180, 6, 1, 239, 235, 180, 6, 1, 230, 186, + 180, 6, 1, 212, 201, 180, 6, 1, 208, 60, 63, 180, 6, 1, 227, 252, 223, + 167, 180, 5, 1, 250, 0, 180, 5, 1, 247, 181, 180, 5, 1, 206, 53, 180, 5, + 1, 238, 50, 180, 5, 1, 243, 108, 180, 5, 1, 203, 24, 180, 5, 1, 202, 64, + 180, 5, 1, 241, 250, 180, 5, 1, 202, 89, 180, 5, 1, 230, 188, 180, 5, 1, + 81, 230, 188, 180, 5, 1, 75, 180, 5, 1, 243, 128, 180, 5, 1, 230, 10, + 180, 5, 1, 227, 79, 180, 5, 1, 223, 167, 180, 5, 1, 223, 69, 180, 5, 1, + 220, 20, 180, 5, 1, 218, 56, 180, 5, 1, 215, 244, 180, 5, 1, 212, 41, + 180, 5, 1, 207, 161, 180, 5, 1, 207, 10, 180, 5, 1, 239, 123, 180, 5, 1, + 237, 23, 180, 5, 1, 219, 217, 180, 5, 1, 219, 34, 180, 5, 1, 212, 202, + 180, 5, 1, 207, 255, 180, 5, 1, 246, 104, 180, 5, 1, 213, 90, 180, 5, 1, + 203, 30, 180, 5, 1, 203, 32, 180, 5, 1, 203, 64, 180, 5, 1, 211, 204, + 152, 180, 5, 1, 202, 213, 180, 5, 1, 5, 202, 183, 180, 5, 1, 5, 202, 184, + 3, 209, 248, 180, 5, 1, 202, 247, 180, 5, 1, 230, 229, 5, 202, 183, 180, + 5, 1, 248, 73, 202, 183, 180, 5, 1, 230, 229, 248, 73, 202, 183, 180, 5, + 1, 239, 235, 180, 5, 1, 230, 186, 180, 5, 1, 212, 201, 180, 5, 1, 208, + 60, 63, 180, 5, 1, 227, 252, 223, 167, 8, 6, 1, 228, 131, 3, 52, 142, 8, + 5, 1, 228, 131, 3, 52, 142, 8, 6, 1, 228, 131, 3, 101, 208, 227, 8, 6, 1, + 219, 185, 3, 95, 8, 6, 1, 217, 1, 3, 209, 248, 8, 5, 1, 34, 3, 95, 8, 5, + 1, 210, 70, 3, 243, 228, 95, 8, 6, 1, 237, 172, 3, 244, 20, 8, 5, 1, 237, + 172, 3, 244, 20, 8, 6, 1, 230, 55, 3, 244, 20, 8, 5, 1, 230, 55, 3, 244, + 20, 8, 6, 1, 202, 160, 3, 244, 20, 8, 5, 1, 202, 160, 3, 244, 20, 8, 6, + 1, 251, 2, 8, 6, 1, 226, 186, 3, 113, 8, 6, 1, 207, 174, 63, 8, 6, 1, + 207, 174, 251, 2, 8, 5, 1, 206, 165, 3, 50, 113, 8, 6, 1, 204, 145, 3, + 113, 8, 5, 1, 204, 145, 3, 113, 8, 5, 1, 206, 165, 3, 245, 95, 8, 6, 1, + 162, 237, 171, 8, 5, 1, 162, 237, 171, 8, 5, 1, 209, 246, 218, 192, 8, 5, + 1, 188, 3, 221, 163, 8, 5, 1, 207, 174, 217, 1, 3, 209, 248, 8, 5, 1, + 158, 3, 124, 215, 253, 231, 6, 8, 1, 5, 6, 207, 174, 74, 8, 210, 246, 5, + 1, 230, 184, 65, 1, 6, 206, 164, 8, 6, 1, 215, 94, 3, 210, 169, 209, 248, + 8, 6, 1, 202, 160, 3, 210, 169, 209, 248, 84, 6, 1, 251, 24, 84, 5, 1, + 251, 24, 84, 6, 1, 205, 227, 84, 5, 1, 205, 227, 84, 6, 1, 238, 235, 84, + 5, 1, 238, 235, 84, 6, 1, 244, 180, 84, 5, 1, 244, 180, 84, 6, 1, 241, + 144, 84, 5, 1, 241, 144, 84, 6, 1, 211, 243, 84, 5, 1, 211, 243, 84, 6, + 1, 202, 99, 84, 5, 1, 202, 99, 84, 6, 1, 237, 80, 84, 5, 1, 237, 80, 84, + 6, 1, 209, 72, 84, 5, 1, 209, 72, 84, 6, 1, 235, 168, 84, 5, 1, 235, 168, + 84, 6, 1, 229, 252, 84, 5, 1, 229, 252, 84, 6, 1, 227, 248, 84, 5, 1, + 227, 248, 84, 6, 1, 224, 155, 84, 5, 1, 224, 155, 84, 6, 1, 222, 100, 84, + 5, 1, 222, 100, 84, 6, 1, 228, 225, 84, 5, 1, 228, 225, 84, 6, 1, 78, 84, + 5, 1, 78, 84, 6, 1, 218, 167, 84, 5, 1, 218, 167, 84, 6, 1, 215, 227, 84, + 5, 1, 215, 227, 84, 6, 1, 212, 132, 84, 5, 1, 212, 132, 84, 6, 1, 209, + 207, 84, 5, 1, 209, 207, 84, 6, 1, 207, 39, 84, 5, 1, 207, 39, 84, 6, 1, + 240, 26, 84, 5, 1, 240, 26, 84, 6, 1, 229, 122, 84, 5, 1, 229, 122, 84, + 6, 1, 217, 202, 84, 5, 1, 217, 202, 84, 6, 1, 220, 12, 84, 5, 1, 220, 12, + 84, 6, 1, 243, 226, 251, 30, 84, 5, 1, 243, 226, 251, 30, 84, 6, 1, 38, + 84, 251, 59, 84, 5, 1, 38, 84, 251, 59, 84, 6, 1, 245, 113, 241, 144, 84, + 5, 1, 245, 113, 241, 144, 84, 6, 1, 243, 226, 229, 252, 84, 5, 1, 243, + 226, 229, 252, 84, 6, 1, 243, 226, 222, 100, 84, 5, 1, 243, 226, 222, + 100, 84, 6, 1, 245, 113, 222, 100, 84, 5, 1, 245, 113, 222, 100, 84, 6, + 1, 38, 84, 220, 12, 84, 5, 1, 38, 84, 220, 12, 84, 6, 1, 214, 246, 84, 5, + 1, 214, 246, 84, 6, 1, 245, 128, 213, 35, 84, 5, 1, 245, 128, 213, 35, + 84, 6, 1, 38, 84, 213, 35, 84, 5, 1, 38, 84, 213, 35, 84, 6, 1, 38, 84, + 241, 7, 84, 5, 1, 38, 84, 241, 7, 84, 6, 1, 251, 43, 229, 127, 84, 5, 1, + 251, 43, 229, 127, 84, 6, 1, 243, 226, 236, 107, 84, 5, 1, 243, 226, 236, + 107, 84, 6, 1, 38, 84, 236, 107, 84, 5, 1, 38, 84, 236, 107, 84, 6, 1, + 38, 84, 152, 84, 5, 1, 38, 84, 152, 84, 6, 1, 228, 130, 152, 84, 5, 1, + 228, 130, 152, 84, 6, 1, 38, 84, 237, 42, 84, 5, 1, 38, 84, 237, 42, 84, + 6, 1, 38, 84, 237, 83, 84, 5, 1, 38, 84, 237, 83, 84, 6, 1, 38, 84, 238, + 230, 84, 5, 1, 38, 84, 238, 230, 84, 6, 1, 38, 84, 243, 131, 84, 5, 1, + 38, 84, 243, 131, 84, 6, 1, 38, 84, 213, 1, 84, 5, 1, 38, 84, 213, 1, 84, + 6, 1, 38, 221, 54, 213, 1, 84, 5, 1, 38, 221, 54, 213, 1, 84, 6, 1, 38, + 221, 54, 222, 151, 84, 5, 1, 38, 221, 54, 222, 151, 84, 6, 1, 38, 221, + 54, 220, 248, 84, 5, 1, 38, 221, 54, 220, 248, 84, 6, 1, 38, 221, 54, + 204, 77, 84, 5, 1, 38, 221, 54, 204, 77, 84, 16, 230, 18, 84, 16, 224, + 156, 215, 227, 84, 16, 218, 168, 215, 227, 84, 16, 211, 85, 84, 16, 209, + 208, 215, 227, 84, 16, 229, 123, 215, 227, 84, 16, 213, 2, 212, 132, 84, + 6, 1, 245, 113, 213, 35, 84, 5, 1, 245, 113, 213, 35, 84, 6, 1, 245, 113, + 238, 230, 84, 5, 1, 245, 113, 238, 230, 84, 39, 222, 101, 55, 84, 39, + 211, 197, 250, 67, 84, 39, 211, 197, 227, 186, 84, 6, 1, 248, 16, 229, + 127, 84, 5, 1, 248, 16, 229, 127, 84, 38, 221, 54, 239, 102, 211, 61, 84, + 38, 221, 54, 243, 167, 217, 47, 82, 84, 38, 221, 54, 231, 30, 217, 47, + 82, 84, 38, 221, 54, 206, 40, 243, 141, 84, 239, 138, 118, 237, 137, 84, + 239, 102, 211, 61, 84, 224, 25, 243, 141, 114, 5, 1, 250, 231, 114, 5, 1, + 248, 242, 114, 5, 1, 238, 234, 114, 5, 1, 243, 93, 114, 5, 1, 241, 92, + 114, 5, 1, 205, 213, 114, 5, 1, 202, 87, 114, 5, 1, 209, 230, 114, 5, 1, + 231, 49, 114, 5, 1, 230, 4, 114, 5, 1, 228, 2, 114, 5, 1, 225, 122, 114, + 5, 1, 223, 74, 114, 5, 1, 220, 31, 114, 5, 1, 219, 91, 114, 5, 1, 202, + 76, 114, 5, 1, 216, 202, 114, 5, 1, 214, 243, 114, 5, 1, 209, 218, 114, + 5, 1, 206, 255, 114, 5, 1, 218, 200, 114, 5, 1, 229, 132, 114, 5, 1, 238, + 110, 114, 5, 1, 217, 111, 114, 5, 1, 212, 255, 114, 5, 1, 246, 129, 114, + 5, 1, 247, 61, 114, 5, 1, 230, 133, 114, 5, 1, 246, 68, 114, 5, 1, 246, + 183, 114, 5, 1, 203, 180, 114, 5, 1, 230, 146, 114, 5, 1, 237, 154, 114, + 5, 1, 237, 67, 114, 5, 1, 236, 254, 114, 5, 1, 204, 62, 114, 5, 1, 237, + 92, 114, 5, 1, 236, 132, 114, 5, 1, 202, 249, 114, 5, 1, 251, 98, 208, + 247, 1, 198, 208, 247, 1, 203, 106, 208, 247, 1, 203, 105, 208, 247, 1, + 203, 95, 208, 247, 1, 203, 93, 208, 247, 1, 248, 112, 251, 140, 203, 88, + 208, 247, 1, 203, 88, 208, 247, 1, 203, 103, 208, 247, 1, 203, 100, 208, + 247, 1, 203, 102, 208, 247, 1, 203, 101, 208, 247, 1, 203, 15, 208, 247, + 1, 203, 97, 208, 247, 1, 203, 86, 208, 247, 1, 207, 200, 203, 86, 208, + 247, 1, 203, 83, 208, 247, 1, 203, 91, 208, 247, 1, 248, 112, 251, 140, + 203, 91, 208, 247, 1, 207, 200, 203, 91, 208, 247, 1, 203, 90, 208, 247, + 1, 203, 110, 208, 247, 1, 203, 84, 208, 247, 1, 207, 200, 203, 84, 208, + 247, 1, 203, 73, 208, 247, 1, 207, 200, 203, 73, 208, 247, 1, 203, 11, + 208, 247, 1, 203, 54, 208, 247, 1, 251, 71, 203, 54, 208, 247, 1, 207, + 200, 203, 54, 208, 247, 1, 203, 82, 208, 247, 1, 203, 81, 208, 247, 1, + 203, 78, 208, 247, 1, 207, 200, 203, 92, 208, 247, 1, 207, 200, 203, 76, + 208, 247, 1, 203, 74, 208, 247, 1, 202, 213, 208, 247, 1, 203, 71, 208, + 247, 1, 203, 70, 208, 247, 1, 203, 94, 208, 247, 1, 207, 200, 203, 94, + 208, 247, 1, 250, 4, 203, 94, 208, 247, 1, 203, 69, 208, 247, 1, 203, 67, + 208, 247, 1, 203, 68, 208, 247, 1, 203, 66, 208, 247, 1, 203, 65, 208, + 247, 1, 203, 104, 208, 247, 1, 203, 63, 208, 247, 1, 203, 61, 208, 247, + 1, 203, 60, 208, 247, 1, 203, 58, 208, 247, 1, 203, 55, 208, 247, 1, 209, + 199, 203, 55, 208, 247, 1, 203, 53, 208, 247, 1, 203, 52, 208, 247, 1, + 202, 247, 208, 247, 65, 1, 228, 103, 82, 208, 247, 213, 131, 82, 208, + 247, 109, 230, 96, 33, 4, 227, 48, 33, 4, 224, 81, 33, 4, 215, 225, 33, + 4, 212, 12, 33, 4, 212, 241, 33, 4, 248, 22, 33, 4, 208, 172, 33, 4, 245, + 253, 33, 4, 221, 189, 33, 4, 220, 232, 33, 4, 238, 45, 220, 97, 33, 4, + 202, 16, 33, 4, 243, 111, 33, 4, 244, 89, 33, 4, 230, 100, 33, 4, 209, + 46, 33, 4, 246, 115, 33, 4, 218, 179, 33, 4, 218, 68, 33, 4, 238, 125, + 33, 4, 238, 121, 33, 4, 238, 122, 33, 4, 238, 123, 33, 4, 211, 164, 33, + 4, 211, 119, 33, 4, 211, 132, 33, 4, 211, 163, 33, 4, 211, 137, 33, 4, + 211, 138, 33, 4, 211, 124, 33, 4, 247, 5, 33, 4, 246, 240, 33, 4, 246, + 242, 33, 4, 247, 4, 33, 4, 247, 2, 33, 4, 247, 3, 33, 4, 246, 241, 33, 4, + 201, 235, 33, 4, 201, 213, 33, 4, 201, 226, 33, 4, 201, 234, 33, 4, 201, + 229, 33, 4, 201, 230, 33, 4, 201, 218, 33, 4, 247, 0, 33, 4, 246, 243, + 33, 4, 246, 245, 33, 4, 246, 255, 33, 4, 246, 253, 33, 4, 246, 254, 33, + 4, 246, 244, 33, 4, 217, 13, 33, 4, 217, 3, 33, 4, 217, 9, 33, 4, 217, + 12, 33, 4, 217, 10, 33, 4, 217, 11, 33, 4, 217, 8, 33, 4, 228, 141, 33, + 4, 228, 133, 33, 4, 228, 136, 33, 4, 228, 140, 33, 4, 228, 137, 33, 4, + 228, 138, 33, 4, 228, 134, 33, 4, 203, 140, 33, 4, 203, 127, 33, 4, 203, + 135, 33, 4, 203, 139, 33, 4, 203, 137, 33, 4, 203, 138, 33, 4, 203, 134, + 33, 4, 237, 183, 33, 4, 237, 173, 33, 4, 237, 176, 33, 4, 237, 182, 33, + 4, 237, 178, 33, 4, 237, 179, 33, 4, 237, 175, 39, 36, 1, 248, 162, 39, + 36, 1, 206, 55, 39, 36, 1, 238, 105, 39, 36, 1, 244, 75, 39, 36, 1, 202, + 71, 39, 36, 1, 202, 92, 39, 36, 1, 173, 39, 36, 1, 241, 122, 39, 36, 1, + 241, 103, 39, 36, 1, 241, 92, 39, 36, 1, 78, 39, 36, 1, 219, 34, 39, 36, + 1, 241, 28, 39, 36, 1, 241, 17, 39, 36, 1, 209, 187, 39, 36, 1, 152, 39, + 36, 1, 208, 14, 39, 36, 1, 246, 170, 39, 36, 1, 213, 90, 39, 36, 1, 213, + 46, 39, 36, 1, 239, 235, 39, 36, 1, 241, 13, 39, 36, 1, 63, 39, 36, 1, + 231, 110, 39, 36, 1, 243, 129, 39, 36, 1, 224, 43, 207, 14, 39, 36, 1, + 203, 66, 39, 36, 1, 202, 213, 39, 36, 1, 230, 228, 63, 39, 36, 1, 227, + 86, 202, 183, 39, 36, 1, 248, 73, 202, 183, 39, 36, 1, 230, 228, 248, 73, + 202, 183, 50, 250, 218, 210, 241, 225, 88, 50, 250, 218, 242, 83, 210, + 241, 225, 88, 49, 210, 241, 155, 50, 210, 241, 155, 49, 242, 83, 210, + 241, 155, 50, 242, 83, 210, 241, 155, 216, 188, 230, 249, 225, 88, 216, + 188, 242, 83, 230, 249, 225, 88, 242, 83, 208, 103, 225, 88, 49, 208, + 103, 155, 50, 208, 103, 155, 216, 188, 211, 177, 49, 216, 188, 220, 33, + 155, 50, 216, 188, 220, 33, 155, 241, 162, 245, 163, 219, 87, 239, 161, + 219, 87, 216, 73, 239, 161, 219, 87, 235, 217, 242, 83, 220, 92, 183, + 250, 227, 177, 250, 227, 242, 83, 216, 11, 250, 217, 52, 220, 89, 235, + 220, 230, 239, 230, 247, 219, 135, 247, 223, 235, 221, 3, 243, 231, 208, + 228, 3, 215, 253, 55, 49, 124, 219, 79, 155, 50, 124, 219, 79, 155, 208, + 228, 3, 70, 55, 208, 228, 3, 70, 56, 49, 80, 248, 231, 3, 217, 41, 50, + 80, 248, 231, 3, 217, 41, 208, 145, 49, 162, 155, 208, 145, 50, 162, 155, + 247, 248, 49, 162, 155, 247, 248, 50, 162, 155, 49, 212, 154, 106, 155, + 50, 212, 154, 106, 155, 49, 52, 219, 76, 50, 52, 219, 76, 120, 187, 115, + 118, 70, 217, 178, 118, 70, 115, 120, 187, 217, 178, 103, 239, 147, 70, + 217, 178, 239, 233, 70, 82, 216, 73, 217, 47, 82, 80, 208, 227, 215, 253, + 218, 62, 203, 238, 213, 131, 101, 243, 85, 207, 174, 245, 233, 216, 188, + 243, 85, 216, 188, 245, 233, 207, 174, 213, 143, 244, 196, 3, 49, 237, + 224, 244, 196, 3, 50, 237, 224, 207, 174, 244, 195, 208, 145, 162, 214, + 168, 54, 207, 135, 244, 144, 209, 30, 244, 144, 211, 76, 239, 102, 211, + 61, 80, 212, 88, 243, 83, 204, 21, 80, 227, 114, 247, 46, 52, 235, 220, + 216, 73, 245, 233, 52, 226, 252, 217, 31, 82, 12, 40, 216, 100, 12, 40, + 246, 26, 12, 40, 214, 171, 105, 12, 40, 214, 171, 108, 12, 40, 214, 171, + 147, 12, 40, 218, 229, 12, 40, 247, 233, 12, 40, 210, 8, 12, 40, 229, 34, + 105, 12, 40, 229, 34, 108, 12, 40, 243, 138, 12, 40, 214, 175, 12, 40, 5, + 105, 12, 40, 5, 108, 12, 40, 228, 23, 105, 12, 40, 228, 23, 108, 12, 40, + 228, 23, 147, 12, 40, 228, 23, 149, 12, 40, 212, 24, 12, 40, 209, 33, 12, + 40, 212, 22, 105, 12, 40, 212, 22, 108, 12, 40, 237, 56, 105, 12, 40, + 237, 56, 108, 12, 40, 237, 123, 12, 40, 216, 178, 12, 40, 246, 112, 12, + 40, 210, 214, 12, 40, 224, 29, 12, 40, 244, 73, 12, 40, 224, 20, 12, 40, + 246, 44, 12, 40, 204, 81, 105, 12, 40, 204, 81, 108, 12, 40, 239, 249, + 12, 40, 219, 46, 105, 12, 40, 219, 46, 108, 12, 40, 212, 127, 162, 208, + 96, 208, 25, 12, 40, 245, 149, 12, 40, 243, 102, 12, 40, 230, 176, 12, + 40, 248, 15, 76, 246, 10, 12, 40, 240, 191, 12, 40, 211, 199, 105, 12, + 40, 211, 199, 108, 12, 40, 248, 244, 12, 40, 212, 134, 12, 40, 247, 122, + 212, 134, 12, 40, 222, 220, 105, 12, 40, 222, 220, 108, 12, 40, 222, 220, + 147, 12, 40, 222, 220, 149, 12, 40, 224, 227, 12, 40, 213, 37, 12, 40, + 216, 184, 12, 40, 240, 219, 12, 40, 220, 45, 12, 40, 247, 201, 105, 12, + 40, 247, 201, 108, 12, 40, 225, 15, 12, 40, 224, 24, 12, 40, 238, 1, 105, + 12, 40, 238, 1, 108, 12, 40, 238, 1, 147, 12, 40, 208, 245, 12, 40, 246, + 9, 12, 40, 204, 46, 105, 12, 40, 204, 46, 108, 12, 40, 247, 122, 214, + 165, 12, 40, 212, 127, 236, 53, 12, 40, 236, 53, 12, 40, 247, 122, 211, + 211, 12, 40, 247, 122, 213, 32, 12, 40, 239, 172, 12, 40, 247, 122, 247, + 23, 12, 40, 212, 127, 204, 101, 12, 40, 204, 102, 105, 12, 40, 204, 102, + 108, 12, 40, 246, 47, 12, 40, 247, 122, 238, 31, 12, 40, 163, 105, 12, + 40, 163, 108, 12, 40, 247, 122, 227, 28, 12, 40, 247, 122, 238, 216, 12, + 40, 224, 16, 105, 12, 40, 224, 16, 108, 12, 40, 216, 190, 12, 40, 248, + 25, 12, 40, 247, 122, 209, 224, 227, 228, 12, 40, 247, 122, 227, 229, 12, + 40, 247, 122, 204, 16, 12, 40, 247, 122, 239, 190, 12, 40, 241, 173, 105, + 12, 40, 241, 173, 108, 12, 40, 241, 173, 147, 12, 40, 247, 122, 241, 172, + 12, 40, 237, 64, 12, 40, 247, 122, 236, 49, 12, 40, 248, 11, 12, 40, 238, + 89, 12, 40, 247, 122, 239, 243, 12, 40, 247, 122, 248, 60, 12, 40, 247, + 122, 215, 1, 12, 40, 212, 127, 204, 38, 12, 40, 212, 127, 203, 44, 12, + 40, 247, 122, 239, 121, 12, 40, 230, 183, 240, 224, 12, 40, 247, 122, + 240, 224, 12, 40, 230, 183, 208, 146, 12, 40, 247, 122, 208, 146, 12, 40, + 230, 183, 242, 61, 12, 40, 247, 122, 242, 61, 12, 40, 207, 171, 12, 40, + 230, 183, 207, 171, 12, 40, 247, 122, 207, 171, 71, 40, 105, 71, 40, 227, + 114, 71, 40, 243, 85, 71, 40, 212, 57, 71, 40, 214, 170, 71, 40, 113, 71, + 40, 108, 71, 40, 227, 143, 71, 40, 225, 122, 71, 40, 227, 207, 71, 40, + 241, 67, 71, 40, 199, 71, 40, 121, 247, 233, 71, 40, 245, 151, 71, 40, + 235, 162, 71, 40, 210, 8, 71, 40, 171, 247, 233, 71, 40, 229, 33, 71, 40, + 218, 16, 71, 40, 203, 228, 71, 40, 211, 190, 71, 40, 50, 171, 247, 233, + 71, 40, 236, 255, 241, 87, 71, 40, 209, 152, 71, 40, 243, 138, 71, 40, + 214, 175, 71, 40, 246, 26, 71, 40, 217, 226, 71, 40, 251, 80, 71, 40, + 224, 7, 71, 40, 241, 87, 71, 40, 241, 179, 71, 40, 214, 197, 71, 40, 238, + 39, 71, 40, 238, 40, 212, 38, 71, 40, 240, 223, 71, 40, 248, 72, 71, 40, + 203, 250, 71, 40, 246, 133, 71, 40, 215, 207, 71, 40, 231, 45, 71, 40, + 212, 36, 71, 40, 228, 22, 71, 40, 245, 161, 71, 40, 211, 181, 71, 40, + 224, 12, 71, 40, 215, 241, 71, 40, 203, 235, 71, 40, 220, 25, 71, 40, + 207, 180, 71, 40, 242, 44, 71, 40, 212, 228, 209, 33, 71, 40, 242, 83, + 246, 26, 71, 40, 163, 211, 38, 71, 40, 120, 237, 99, 71, 40, 212, 234, + 71, 40, 247, 240, 71, 40, 212, 21, 71, 40, 247, 205, 71, 40, 211, 75, 71, + 40, 237, 55, 71, 40, 237, 138, 71, 40, 243, 88, 71, 40, 237, 123, 71, 40, + 247, 223, 71, 40, 216, 178, 71, 40, 214, 183, 71, 40, 243, 169, 71, 40, + 250, 9, 71, 40, 211, 177, 71, 40, 221, 165, 71, 40, 210, 214, 71, 40, + 214, 208, 71, 40, 224, 29, 71, 40, 208, 95, 71, 40, 228, 99, 71, 40, 211, + 61, 71, 40, 244, 73, 71, 40, 204, 61, 71, 40, 243, 114, 221, 165, 71, 40, + 245, 229, 71, 40, 239, 95, 71, 40, 246, 38, 71, 40, 211, 80, 71, 40, 204, + 80, 71, 40, 239, 249, 71, 40, 246, 34, 71, 40, 240, 67, 71, 40, 52, 203, + 196, 71, 40, 162, 208, 96, 208, 25, 71, 40, 212, 50, 71, 40, 240, 79, 71, + 40, 245, 149, 71, 40, 243, 102, 71, 40, 217, 223, 71, 40, 230, 176, 71, + 40, 224, 249, 71, 40, 208, 226, 71, 40, 210, 164, 71, 40, 227, 137, 71, + 40, 206, 191, 71, 40, 240, 24, 71, 40, 248, 15, 76, 246, 10, 71, 40, 212, + 158, 71, 40, 242, 83, 209, 144, 71, 40, 204, 33, 71, 40, 212, 65, 71, 40, + 243, 156, 71, 40, 240, 191, 71, 40, 211, 214, 71, 40, 47, 71, 40, 211, + 63, 71, 40, 211, 198, 71, 40, 208, 118, 71, 40, 238, 10, 71, 40, 247, 10, + 71, 40, 211, 98, 71, 40, 248, 244, 71, 40, 216, 52, 71, 40, 212, 134, 71, + 40, 230, 168, 71, 40, 222, 219, 71, 40, 213, 37, 71, 40, 240, 55, 71, 40, + 220, 45, 71, 40, 250, 226, 71, 40, 218, 83, 71, 40, 241, 183, 71, 40, + 247, 200, 71, 40, 225, 15, 71, 40, 224, 104, 71, 40, 213, 149, 71, 40, + 250, 98, 71, 40, 224, 24, 71, 40, 208, 150, 71, 40, 219, 252, 71, 40, + 248, 19, 71, 40, 211, 59, 71, 40, 245, 241, 71, 40, 238, 0, 71, 40, 208, + 245, 71, 40, 231, 9, 71, 40, 248, 31, 71, 40, 204, 102, 241, 87, 71, 40, + 246, 9, 71, 40, 204, 45, 71, 40, 214, 165, 71, 40, 236, 53, 71, 40, 211, + 211, 71, 40, 206, 79, 71, 40, 248, 157, 71, 40, 218, 131, 71, 40, 249, + 13, 71, 40, 213, 32, 71, 40, 216, 137, 71, 40, 215, 128, 71, 40, 239, + 172, 71, 40, 248, 17, 71, 40, 247, 23, 71, 40, 248, 48, 71, 40, 224, 26, + 71, 40, 204, 101, 71, 40, 246, 47, 71, 40, 204, 12, 71, 40, 243, 149, 71, + 40, 205, 214, 71, 40, 238, 31, 71, 40, 227, 28, 71, 40, 238, 216, 71, 40, + 224, 15, 71, 40, 212, 56, 71, 40, 212, 228, 209, 247, 248, 60, 71, 40, + 216, 190, 71, 40, 248, 25, 71, 40, 203, 219, 71, 40, 240, 102, 71, 40, + 227, 228, 71, 40, 209, 224, 227, 228, 71, 40, 227, 224, 71, 40, 211, 240, + 71, 40, 227, 229, 71, 40, 204, 16, 71, 40, 239, 190, 71, 40, 241, 172, + 71, 40, 237, 64, 71, 40, 239, 136, 71, 40, 236, 49, 71, 40, 248, 11, 71, + 40, 209, 233, 71, 40, 237, 145, 71, 40, 240, 17, 71, 40, 215, 30, 204, + 12, 71, 40, 247, 12, 71, 40, 238, 89, 71, 40, 239, 243, 71, 40, 248, 60, + 71, 40, 215, 1, 71, 40, 244, 58, 71, 40, 204, 38, 71, 40, 237, 34, 71, + 40, 203, 44, 71, 40, 224, 115, 71, 40, 248, 43, 71, 40, 241, 99, 71, 40, + 239, 121, 71, 40, 208, 67, 71, 40, 242, 46, 71, 40, 216, 172, 71, 40, + 221, 167, 71, 40, 240, 224, 71, 40, 208, 146, 71, 40, 242, 61, 71, 40, + 207, 171, 71, 40, 239, 193, 139, 244, 18, 167, 49, 208, 173, 216, 16, + 139, 244, 18, 167, 87, 208, 173, 56, 139, 244, 18, 167, 49, 208, 173, + 101, 25, 216, 16, 139, 244, 18, 167, 87, 208, 173, 101, 25, 56, 139, 244, + 18, 167, 239, 102, 210, 186, 139, 244, 18, 167, 210, 187, 239, 120, 55, + 139, 244, 18, 167, 210, 187, 239, 120, 56, 139, 244, 18, 167, 210, 187, + 239, 120, 227, 222, 139, 244, 18, 167, 210, 187, 239, 120, 206, 221, 227, + 222, 139, 244, 18, 167, 210, 187, 239, 120, 206, 221, 216, 16, 139, 244, + 18, 167, 210, 187, 239, 120, 226, 251, 227, 222, 139, 244, 18, 167, 219, + 202, 139, 211, 228, 139, 245, 233, 139, 239, 102, 211, 61, 243, 146, 82, + 230, 169, 231, 29, 211, 97, 97, 139, 230, 199, 82, 139, 246, 12, 82, 139, + 42, 202, 84, 49, 250, 218, 155, 50, 250, 218, 155, 49, 52, 250, 218, 155, + 50, 52, 250, 218, 155, 49, 245, 166, 155, 50, 245, 166, 155, 49, 61, 245, + 166, 155, 50, 61, 245, 166, 155, 49, 62, 227, 185, 155, 50, 62, 227, 185, + 155, 218, 29, 82, 238, 158, 82, 49, 208, 133, 213, 33, 155, 50, 208, 133, + 213, 33, 155, 49, 61, 227, 185, 155, 50, 61, 227, 185, 155, 49, 61, 208, + 133, 213, 33, 155, 50, 61, 208, 133, 213, 33, 155, 49, 61, 51, 155, 50, + 61, 51, 155, 204, 76, 244, 144, 216, 73, 52, 217, 237, 217, 31, 82, 52, + 217, 237, 217, 31, 82, 124, 52, 217, 237, 217, 31, 82, 218, 29, 131, 240, + 102, 237, 97, 221, 44, 105, 237, 97, 221, 44, 108, 237, 97, 221, 44, 147, + 237, 97, 221, 44, 149, 237, 97, 221, 44, 170, 237, 97, 221, 44, 195, 237, + 97, 221, 44, 213, 111, 237, 97, 221, 44, 199, 237, 97, 221, 44, 222, 63, + 139, 227, 167, 143, 82, 139, 215, 245, 143, 82, 139, 244, 27, 143, 82, + 139, 241, 66, 143, 82, 28, 212, 120, 70, 143, 82, 28, 52, 70, 143, 82, + 204, 72, 244, 144, 80, 230, 3, 216, 101, 82, 80, 230, 3, 216, 101, 3, + 205, 186, 211, 241, 82, 80, 230, 3, 216, 101, 131, 206, 221, 237, 137, + 80, 230, 3, 216, 101, 3, 205, 186, 211, 241, 131, 206, 221, 237, 137, 80, + 230, 3, 216, 101, 131, 226, 251, 237, 137, 43, 218, 29, 82, 139, 209, + 164, 227, 115, 240, 52, 213, 131, 97, 237, 97, 221, 44, 209, 152, 237, + 97, 221, 44, 207, 151, 237, 97, 221, 44, 209, 53, 80, 139, 230, 199, 82, + 225, 72, 82, 219, 71, 250, 251, 82, 139, 57, 231, 31, 139, 162, 240, 10, + 211, 228, 172, 1, 5, 63, 172, 1, 63, 172, 1, 5, 75, 172, 1, 75, 172, 1, + 5, 68, 172, 1, 68, 172, 1, 5, 74, 172, 1, 74, 172, 1, 5, 78, 172, 1, 78, + 172, 1, 173, 172, 1, 239, 8, 172, 1, 229, 100, 172, 1, 238, 81, 172, 1, + 228, 209, 172, 1, 237, 230, 172, 1, 229, 201, 172, 1, 238, 190, 172, 1, + 229, 26, 172, 1, 238, 39, 172, 1, 215, 36, 172, 1, 202, 116, 172, 1, 212, + 162, 172, 1, 202, 39, 172, 1, 211, 10, 172, 1, 202, 6, 172, 1, 214, 177, + 172, 1, 202, 92, 172, 1, 212, 13, 172, 1, 202, 17, 172, 1, 210, 22, 172, + 1, 244, 212, 172, 1, 209, 2, 172, 1, 243, 233, 172, 1, 5, 207, 203, 172, + 1, 207, 203, 172, 1, 242, 42, 172, 1, 209, 187, 172, 1, 244, 75, 172, 1, + 135, 172, 1, 243, 113, 172, 1, 201, 201, 172, 1, 222, 100, 172, 1, 221, + 84, 172, 1, 222, 240, 172, 1, 221, 191, 172, 1, 152, 172, 1, 249, 32, + 172, 1, 185, 172, 1, 237, 3, 172, 1, 248, 86, 172, 1, 218, 167, 172, 1, + 236, 26, 172, 1, 247, 193, 172, 1, 217, 191, 172, 1, 237, 67, 172, 1, + 248, 162, 172, 1, 219, 34, 172, 1, 236, 136, 172, 1, 248, 23, 172, 1, + 218, 69, 172, 1, 192, 172, 1, 224, 155, 172, 1, 223, 246, 172, 1, 225, + 20, 172, 1, 224, 82, 172, 1, 5, 198, 172, 1, 198, 172, 1, 5, 202, 213, + 172, 1, 202, 213, 172, 1, 5, 202, 247, 172, 1, 202, 247, 172, 1, 216, + 220, 172, 1, 216, 57, 172, 1, 215, 145, 172, 1, 216, 158, 172, 1, 215, + 227, 172, 1, 5, 204, 111, 172, 1, 204, 111, 172, 1, 204, 30, 172, 1, 204, + 62, 172, 1, 204, 0, 172, 1, 223, 163, 172, 1, 204, 163, 172, 1, 5, 173, + 172, 1, 5, 229, 201, 39, 229, 225, 205, 186, 211, 241, 82, 39, 229, 225, + 213, 148, 211, 241, 82, 229, 225, 205, 186, 211, 241, 82, 229, 225, 213, + 148, 211, 241, 82, 172, 230, 199, 82, 172, 205, 186, 230, 199, 82, 172, + 243, 192, 202, 228, 229, 225, 52, 235, 220, 67, 1, 5, 63, 67, 1, 63, 67, + 1, 5, 75, 67, 1, 75, 67, 1, 5, 68, 67, 1, 68, 67, 1, 5, 74, 67, 1, 74, + 67, 1, 5, 78, 67, 1, 78, 67, 1, 173, 67, 1, 239, 8, 67, 1, 229, 100, 67, + 1, 238, 81, 67, 1, 228, 209, 67, 1, 237, 230, 67, 1, 229, 201, 67, 1, + 238, 190, 67, 1, 229, 26, 67, 1, 238, 39, 67, 1, 215, 36, 67, 1, 202, + 116, 67, 1, 212, 162, 67, 1, 202, 39, 67, 1, 211, 10, 67, 1, 202, 6, 67, + 1, 214, 177, 67, 1, 202, 92, 67, 1, 212, 13, 67, 1, 202, 17, 67, 1, 210, + 22, 67, 1, 244, 212, 67, 1, 209, 2, 67, 1, 243, 233, 67, 1, 5, 207, 203, + 67, 1, 207, 203, 67, 1, 242, 42, 67, 1, 209, 187, 67, 1, 244, 75, 67, 1, + 135, 67, 1, 243, 113, 67, 1, 201, 201, 67, 1, 222, 100, 67, 1, 221, 84, + 67, 1, 222, 240, 67, 1, 221, 191, 67, 1, 152, 67, 1, 249, 32, 67, 1, 185, + 67, 1, 237, 3, 67, 1, 248, 86, 67, 1, 218, 167, 67, 1, 236, 26, 67, 1, + 247, 193, 67, 1, 217, 191, 67, 1, 237, 67, 67, 1, 248, 162, 67, 1, 219, + 34, 67, 1, 236, 136, 67, 1, 248, 23, 67, 1, 218, 69, 67, 1, 192, 67, 1, + 224, 155, 67, 1, 223, 246, 67, 1, 225, 20, 67, 1, 224, 82, 67, 1, 5, 198, + 67, 1, 198, 67, 1, 5, 202, 213, 67, 1, 202, 213, 67, 1, 5, 202, 247, 67, + 1, 202, 247, 67, 1, 216, 220, 67, 1, 216, 57, 67, 1, 215, 145, 67, 1, + 216, 158, 67, 1, 215, 227, 67, 1, 5, 204, 111, 67, 1, 204, 111, 67, 1, + 204, 30, 67, 1, 204, 62, 67, 1, 204, 0, 67, 1, 223, 163, 67, 1, 204, 163, + 67, 1, 5, 173, 67, 1, 5, 229, 201, 67, 1, 206, 86, 67, 1, 205, 230, 67, + 1, 206, 55, 67, 1, 205, 189, 67, 101, 243, 85, 229, 225, 217, 215, 211, + 241, 82, 67, 230, 199, 82, 67, 205, 186, 230, 199, 82, 67, 243, 192, 228, + 249, 248, 1, 1, 249, 255, 248, 1, 1, 219, 184, 248, 1, 1, 226, 185, 248, + 1, 1, 240, 174, 248, 1, 1, 245, 51, 248, 1, 1, 210, 69, 248, 1, 1, 223, + 163, 248, 1, 1, 159, 248, 1, 1, 239, 75, 248, 1, 1, 230, 54, 248, 1, 1, + 237, 171, 248, 1, 1, 230, 184, 248, 1, 1, 217, 134, 248, 1, 1, 203, 196, + 248, 1, 1, 202, 81, 248, 1, 1, 246, 200, 248, 1, 1, 213, 92, 248, 1, 1, + 146, 248, 1, 1, 202, 159, 248, 1, 1, 247, 125, 248, 1, 1, 194, 248, 1, 1, + 63, 248, 1, 1, 78, 248, 1, 1, 74, 248, 1, 1, 241, 147, 248, 1, 1, 251, + 64, 248, 1, 1, 241, 145, 248, 1, 1, 250, 34, 248, 1, 1, 219, 216, 248, 1, + 1, 250, 231, 248, 1, 1, 241, 92, 248, 1, 1, 250, 223, 248, 1, 1, 241, 78, + 248, 1, 1, 241, 28, 248, 1, 1, 75, 248, 1, 1, 68, 248, 1, 1, 230, 197, + 248, 1, 1, 206, 164, 248, 1, 1, 222, 205, 248, 1, 1, 238, 43, 248, 1, 1, + 231, 84, 28, 1, 229, 59, 28, 1, 211, 156, 28, 1, 229, 52, 28, 1, 222, 93, + 28, 1, 222, 91, 28, 1, 222, 90, 28, 1, 208, 240, 28, 1, 211, 145, 28, 1, + 216, 47, 28, 1, 216, 42, 28, 1, 216, 39, 28, 1, 216, 32, 28, 1, 216, 27, + 28, 1, 216, 22, 28, 1, 216, 33, 28, 1, 216, 45, 28, 1, 224, 141, 28, 1, + 218, 153, 28, 1, 211, 153, 28, 1, 218, 142, 28, 1, 212, 111, 28, 1, 211, + 150, 28, 1, 231, 106, 28, 1, 246, 74, 28, 1, 211, 160, 28, 1, 246, 138, + 28, 1, 229, 120, 28, 1, 209, 66, 28, 1, 218, 190, 28, 1, 236, 251, 28, 1, + 63, 28, 1, 251, 109, 28, 1, 198, 28, 1, 203, 99, 28, 1, 241, 55, 28, 1, + 74, 28, 1, 203, 39, 28, 1, 203, 52, 28, 1, 78, 28, 1, 204, 111, 28, 1, + 204, 107, 28, 1, 220, 73, 28, 1, 202, 247, 28, 1, 68, 28, 1, 204, 48, 28, + 1, 204, 62, 28, 1, 204, 30, 28, 1, 202, 213, 28, 1, 240, 238, 28, 1, 203, + 11, 28, 1, 75, 28, 240, 7, 28, 1, 211, 154, 28, 1, 222, 83, 28, 1, 222, + 85, 28, 1, 222, 88, 28, 1, 216, 40, 28, 1, 216, 21, 28, 1, 216, 29, 28, + 1, 216, 34, 28, 1, 216, 19, 28, 1, 224, 134, 28, 1, 224, 131, 28, 1, 224, + 135, 28, 1, 229, 246, 28, 1, 218, 148, 28, 1, 218, 134, 28, 1, 218, 140, + 28, 1, 218, 137, 28, 1, 218, 151, 28, 1, 218, 135, 28, 1, 229, 244, 28, + 1, 229, 242, 28, 1, 212, 104, 28, 1, 212, 102, 28, 1, 212, 94, 28, 1, + 212, 99, 28, 1, 212, 109, 28, 1, 219, 107, 28, 1, 211, 157, 28, 1, 203, + 29, 28, 1, 203, 25, 28, 1, 203, 26, 28, 1, 229, 245, 28, 1, 211, 158, 28, + 1, 203, 35, 28, 1, 202, 241, 28, 1, 202, 240, 28, 1, 202, 243, 28, 1, + 202, 204, 28, 1, 202, 205, 28, 1, 202, 208, 28, 1, 250, 137, 28, 1, 250, + 131, 139, 250, 205, 227, 103, 82, 139, 250, 205, 216, 74, 82, 139, 250, + 205, 118, 82, 139, 250, 205, 120, 82, 139, 250, 205, 126, 82, 139, 250, + 205, 239, 147, 82, 139, 250, 205, 208, 145, 82, 139, 250, 205, 101, 82, + 139, 250, 205, 247, 248, 82, 139, 250, 205, 239, 245, 82, 139, 250, 205, + 214, 171, 82, 139, 250, 205, 209, 61, 82, 139, 250, 205, 239, 140, 82, + 139, 250, 205, 237, 52, 82, 139, 250, 205, 241, 180, 82, 139, 250, 205, + 225, 123, 82, 248, 1, 1, 247, 193, 248, 1, 1, 202, 39, 248, 1, 1, 230, + 141, 248, 1, 1, 237, 230, 248, 1, 1, 241, 161, 248, 1, 1, 241, 75, 248, + 1, 1, 220, 18, 248, 1, 1, 220, 22, 248, 1, 1, 230, 224, 248, 1, 1, 250, + 207, 248, 1, 1, 231, 16, 248, 1, 1, 206, 229, 248, 1, 1, 231, 66, 248, 1, + 1, 222, 183, 248, 1, 1, 251, 58, 248, 1, 1, 250, 29, 248, 1, 1, 250, 247, + 248, 1, 1, 220, 39, 248, 1, 1, 220, 24, 248, 1, 1, 231, 13, 248, 1, 46, + 1, 219, 184, 248, 1, 46, 1, 210, 69, 248, 1, 46, 1, 230, 54, 248, 1, 46, + 1, 237, 171, 248, 1, 1, 238, 120, 248, 1, 1, 227, 162, 248, 1, 1, 201, + 242, 12, 211, 32, 210, 69, 12, 211, 32, 204, 41, 12, 211, 32, 203, 171, + 12, 211, 32, 247, 138, 12, 211, 32, 210, 173, 12, 211, 32, 235, 210, 12, + 211, 32, 235, 214, 12, 211, 32, 236, 35, 12, 211, 32, 235, 211, 12, 211, + 32, 210, 72, 12, 211, 32, 235, 213, 12, 211, 32, 235, 209, 12, 211, 32, + 236, 33, 12, 211, 32, 235, 212, 12, 211, 32, 235, 208, 12, 211, 32, 223, + 163, 12, 211, 32, 237, 171, 12, 211, 32, 194, 12, 211, 32, 219, 184, 12, + 211, 32, 211, 231, 12, 211, 32, 245, 51, 12, 211, 32, 235, 215, 12, 211, + 32, 237, 13, 12, 211, 32, 210, 81, 12, 211, 32, 210, 152, 12, 211, 32, + 211, 108, 12, 211, 32, 213, 98, 12, 211, 32, 219, 38, 12, 211, 32, 217, + 136, 12, 211, 32, 208, 174, 12, 211, 32, 210, 71, 12, 211, 32, 210, 163, + 12, 211, 32, 235, 223, 12, 211, 32, 235, 207, 12, 211, 32, 218, 210, 12, + 211, 32, 217, 134, 67, 1, 5, 228, 209, 67, 1, 5, 212, 162, 67, 1, 5, 211, + 10, 67, 1, 5, 135, 67, 1, 5, 221, 84, 67, 1, 5, 152, 67, 1, 5, 237, 3, + 67, 1, 5, 236, 26, 67, 1, 5, 237, 67, 67, 1, 5, 236, 136, 67, 1, 5, 223, + 246, 67, 1, 5, 216, 220, 67, 1, 5, 216, 57, 67, 1, 5, 215, 145, 67, 1, 5, + 216, 158, 67, 1, 5, 215, 227, 102, 28, 229, 59, 102, 28, 222, 93, 102, + 28, 208, 240, 102, 28, 216, 47, 102, 28, 224, 141, 102, 28, 218, 153, + 102, 28, 212, 111, 102, 28, 231, 106, 102, 28, 246, 74, 102, 28, 246, + 138, 102, 28, 229, 120, 102, 28, 209, 66, 102, 28, 218, 190, 102, 28, + 236, 251, 102, 28, 229, 60, 63, 102, 28, 222, 94, 63, 102, 28, 208, 241, + 63, 102, 28, 216, 48, 63, 102, 28, 224, 142, 63, 102, 28, 218, 154, 63, + 102, 28, 212, 112, 63, 102, 28, 231, 107, 63, 102, 28, 246, 75, 63, 102, + 28, 246, 139, 63, 102, 28, 229, 121, 63, 102, 28, 209, 67, 63, 102, 28, + 218, 191, 63, 102, 28, 236, 252, 63, 102, 28, 246, 75, 68, 102, 228, 253, + 167, 220, 54, 102, 228, 253, 167, 158, 236, 26, 102, 189, 105, 102, 189, + 108, 102, 189, 147, 102, 189, 149, 102, 189, 170, 102, 189, 195, 102, + 189, 213, 111, 102, 189, 199, 102, 189, 222, 63, 102, 189, 209, 152, 102, + 189, 224, 29, 102, 189, 239, 249, 102, 189, 204, 80, 102, 189, 203, 243, + 102, 189, 224, 220, 102, 189, 241, 179, 102, 189, 210, 214, 102, 189, + 211, 64, 102, 189, 237, 74, 102, 189, 212, 9, 102, 189, 223, 84, 102, + 189, 211, 213, 102, 189, 240, 4, 102, 189, 245, 211, 102, 189, 228, 102, + 102, 189, 216, 95, 102, 189, 247, 71, 102, 189, 211, 14, 102, 189, 210, + 196, 102, 189, 241, 65, 102, 189, 216, 87, 102, 189, 251, 10, 102, 189, + 240, 33, 102, 189, 216, 85, 102, 189, 213, 149, 102, 189, 216, 157, 43, + 189, 217, 46, 43, 189, 229, 83, 43, 189, 214, 195, 43, 189, 228, 249, 43, + 42, 209, 153, 220, 32, 62, 211, 177, 43, 42, 207, 152, 220, 32, 62, 211, + 177, 43, 42, 209, 54, 220, 32, 62, 211, 177, 43, 42, 239, 154, 220, 32, + 62, 211, 177, 43, 42, 240, 19, 220, 32, 62, 211, 177, 43, 42, 212, 75, + 220, 32, 62, 211, 177, 43, 42, 213, 106, 220, 32, 62, 211, 177, 43, 42, + 241, 135, 220, 32, 62, 211, 177, 219, 67, 54, 43, 42, 207, 152, 105, 43, + 42, 207, 152, 108, 43, 42, 207, 152, 147, 43, 42, 207, 152, 149, 43, 42, + 207, 152, 170, 43, 42, 207, 152, 195, 43, 42, 207, 152, 213, 111, 43, 42, + 207, 152, 199, 43, 42, 207, 152, 222, 63, 43, 42, 209, 53, 43, 42, 209, + 54, 105, 43, 42, 209, 54, 108, 43, 42, 209, 54, 147, 43, 42, 209, 54, + 149, 43, 42, 209, 54, 170, 43, 28, 229, 59, 43, 28, 222, 93, 43, 28, 208, + 240, 43, 28, 216, 47, 43, 28, 224, 141, 43, 28, 218, 153, 43, 28, 212, + 111, 43, 28, 231, 106, 43, 28, 246, 74, 43, 28, 246, 138, 43, 28, 229, + 120, 43, 28, 209, 66, 43, 28, 218, 190, 43, 28, 236, 251, 43, 28, 229, + 60, 63, 43, 28, 222, 94, 63, 43, 28, 208, 241, 63, 43, 28, 216, 48, 63, + 43, 28, 224, 142, 63, 43, 28, 218, 154, 63, 43, 28, 212, 112, 63, 43, 28, + 231, 107, 63, 43, 28, 246, 75, 63, 43, 28, 246, 139, 63, 43, 28, 229, + 121, 63, 43, 28, 209, 67, 63, 43, 28, 218, 191, 63, 43, 28, 236, 252, 63, + 43, 228, 253, 167, 246, 189, 43, 228, 253, 167, 230, 78, 43, 28, 231, + 107, 68, 228, 253, 211, 97, 97, 43, 189, 105, 43, 189, 108, 43, 189, 147, + 43, 189, 149, 43, 189, 170, 43, 189, 195, 43, 189, 213, 111, 43, 189, + 199, 43, 189, 222, 63, 43, 189, 209, 152, 43, 189, 224, 29, 43, 189, 239, + 249, 43, 189, 204, 80, 43, 189, 203, 243, 43, 189, 224, 220, 43, 189, + 241, 179, 43, 189, 210, 214, 43, 189, 211, 64, 43, 189, 237, 74, 43, 189, + 212, 9, 43, 189, 223, 84, 43, 189, 211, 213, 43, 189, 240, 4, 43, 189, + 245, 211, 43, 189, 228, 102, 43, 189, 214, 169, 43, 189, 225, 126, 43, + 189, 240, 42, 43, 189, 210, 226, 43, 189, 240, 216, 43, 189, 217, 233, + 43, 189, 250, 38, 43, 189, 230, 200, 43, 189, 216, 85, 43, 189, 245, 170, + 43, 189, 245, 160, 43, 189, 236, 244, 43, 189, 246, 217, 43, 189, 227, 0, + 43, 189, 227, 222, 43, 189, 216, 16, 43, 189, 225, 11, 43, 189, 216, 112, + 43, 189, 211, 14, 43, 189, 210, 196, 43, 189, 241, 65, 43, 189, 216, 87, + 43, 189, 251, 10, 43, 189, 222, 79, 43, 42, 209, 54, 195, 43, 42, 209, + 54, 213, 111, 43, 42, 209, 54, 199, 43, 42, 209, 54, 222, 63, 43, 42, + 239, 153, 43, 42, 239, 154, 105, 43, 42, 239, 154, 108, 43, 42, 239, 154, + 147, 43, 42, 239, 154, 149, 43, 42, 239, 154, 170, 43, 42, 239, 154, 195, + 43, 42, 239, 154, 213, 111, 43, 42, 239, 154, 199, 43, 42, 239, 154, 222, + 63, 43, 42, 240, 18, 139, 209, 164, 16, 35, 230, 171, 139, 209, 164, 16, + 35, 240, 54, 139, 209, 164, 16, 35, 225, 94, 139, 209, 164, 16, 35, 250, + 150, 139, 209, 164, 16, 35, 225, 63, 139, 209, 164, 16, 35, 230, 76, 139, + 209, 164, 16, 35, 230, 77, 139, 209, 164, 16, 35, 250, 30, 139, 209, 164, + 16, 35, 213, 129, 139, 209, 164, 16, 35, 220, 79, 139, 209, 164, 16, 35, + 221, 153, 139, 209, 164, 16, 35, 244, 70, 51, 237, 13, 51, 241, 24, 51, + 240, 226, 227, 120, 227, 147, 54, 43, 67, 63, 43, 67, 75, 43, 67, 68, 43, + 67, 74, 43, 67, 78, 43, 67, 173, 43, 67, 229, 100, 43, 67, 228, 209, 43, + 67, 229, 201, 43, 67, 229, 26, 43, 67, 215, 36, 43, 67, 212, 162, 43, 67, + 211, 10, 43, 67, 214, 177, 43, 67, 212, 13, 43, 67, 210, 22, 43, 67, 209, + 2, 43, 67, 207, 203, 43, 67, 209, 187, 43, 67, 135, 43, 67, 201, 201, 43, + 67, 222, 100, 43, 67, 221, 84, 43, 67, 222, 240, 43, 67, 221, 191, 43, + 67, 152, 43, 67, 237, 3, 43, 67, 236, 26, 43, 67, 237, 67, 43, 67, 236, + 136, 43, 67, 192, 43, 67, 224, 155, 43, 67, 223, 246, 43, 67, 225, 20, + 43, 67, 224, 82, 43, 67, 198, 43, 67, 202, 213, 43, 67, 202, 247, 43, 67, + 216, 220, 43, 67, 216, 57, 43, 67, 215, 145, 43, 67, 216, 158, 43, 67, + 215, 227, 43, 67, 204, 111, 43, 67, 204, 30, 43, 67, 204, 62, 43, 67, + 204, 0, 51, 250, 174, 51, 250, 83, 51, 250, 201, 51, 251, 239, 51, 231, + 18, 51, 230, 242, 51, 206, 227, 51, 240, 253, 51, 241, 158, 51, 220, 21, + 51, 220, 14, 51, 230, 16, 51, 229, 238, 51, 229, 235, 51, 238, 220, 51, + 238, 229, 51, 238, 70, 51, 238, 66, 51, 228, 132, 51, 238, 58, 51, 229, + 75, 51, 229, 74, 51, 229, 73, 51, 229, 72, 51, 237, 200, 51, 237, 199, + 51, 228, 180, 51, 228, 182, 51, 229, 194, 51, 228, 251, 51, 229, 3, 51, + 215, 17, 51, 214, 236, 51, 212, 92, 51, 213, 134, 51, 213, 133, 51, 244, + 209, 51, 244, 14, 51, 243, 86, 51, 208, 163, 51, 223, 79, 51, 221, 154, + 51, 237, 142, 51, 219, 163, 51, 219, 162, 51, 249, 29, 51, 218, 164, 51, + 218, 127, 51, 218, 128, 51, 248, 57, 51, 236, 24, 51, 236, 19, 51, 247, + 151, 51, 236, 4, 51, 237, 39, 51, 218, 220, 51, 219, 4, 51, 237, 22, 51, + 219, 0, 51, 219, 18, 51, 248, 145, 51, 218, 58, 51, 247, 253, 51, 236, + 120, 51, 218, 46, 51, 236, 111, 51, 236, 113, 51, 225, 138, 51, 225, 134, + 51, 225, 143, 51, 225, 83, 51, 225, 110, 51, 224, 121, 51, 224, 97, 51, + 224, 96, 51, 225, 0, 51, 224, 253, 51, 225, 1, 51, 203, 109, 51, 203, + 107, 51, 202, 202, 51, 215, 243, 51, 215, 247, 51, 215, 119, 51, 215, + 113, 51, 216, 109, 51, 216, 106, 51, 204, 78, 139, 209, 164, 16, 35, 236, + 43, 202, 84, 139, 209, 164, 16, 35, 236, 43, 105, 139, 209, 164, 16, 35, + 236, 43, 108, 139, 209, 164, 16, 35, 236, 43, 147, 139, 209, 164, 16, 35, + 236, 43, 149, 139, 209, 164, 16, 35, 236, 43, 170, 139, 209, 164, 16, 35, + 236, 43, 195, 139, 209, 164, 16, 35, 236, 43, 213, 111, 139, 209, 164, + 16, 35, 236, 43, 199, 139, 209, 164, 16, 35, 236, 43, 222, 63, 139, 209, + 164, 16, 35, 236, 43, 209, 152, 139, 209, 164, 16, 35, 236, 43, 241, 112, + 139, 209, 164, 16, 35, 236, 43, 207, 154, 139, 209, 164, 16, 35, 236, 43, + 209, 55, 139, 209, 164, 16, 35, 236, 43, 239, 141, 139, 209, 164, 16, 35, + 236, 43, 240, 22, 139, 209, 164, 16, 35, 236, 43, 212, 82, 139, 209, 164, + 16, 35, 236, 43, 213, 108, 139, 209, 164, 16, 35, 236, 43, 241, 140, 139, + 209, 164, 16, 35, 236, 43, 222, 60, 139, 209, 164, 16, 35, 236, 43, 207, + 151, 139, 209, 164, 16, 35, 236, 43, 207, 145, 139, 209, 164, 16, 35, + 236, 43, 207, 141, 139, 209, 164, 16, 35, 236, 43, 207, 142, 139, 209, + 164, 16, 35, 236, 43, 207, 147, 51, 236, 34, 51, 244, 212, 51, 250, 34, + 51, 142, 51, 219, 206, 51, 219, 39, 51, 243, 115, 51, 243, 116, 211, 176, + 51, 243, 116, 245, 105, 51, 230, 197, 51, 241, 27, 223, 85, 237, 40, 51, + 241, 27, 223, 85, 210, 92, 51, 241, 27, 223, 85, 209, 245, 51, 241, 27, + 223, 85, 224, 252, 51, 245, 162, 51, 219, 169, 250, 233, 51, 201, 201, + 51, 223, 247, 63, 51, 192, 51, 173, 51, 229, 204, 51, 225, 59, 51, 238, + 208, 51, 247, 76, 51, 229, 203, 51, 218, 211, 51, 222, 207, 51, 223, 247, + 240, 174, 51, 223, 247, 239, 75, 51, 224, 196, 51, 229, 146, 51, 235, + 215, 51, 229, 102, 51, 224, 157, 51, 238, 83, 51, 209, 4, 51, 223, 247, + 159, 51, 224, 90, 51, 243, 125, 51, 229, 41, 51, 239, 188, 51, 221, 229, + 51, 223, 247, 226, 185, 51, 224, 87, 51, 245, 255, 51, 229, 35, 51, 224, + 88, 211, 176, 51, 246, 0, 211, 176, 51, 226, 186, 211, 176, 51, 229, 36, + 211, 176, 51, 224, 88, 245, 105, 51, 246, 0, 245, 105, 51, 226, 186, 245, + 105, 51, 229, 36, 245, 105, 51, 226, 186, 115, 194, 51, 226, 186, 115, + 215, 94, 211, 176, 51, 185, 51, 228, 244, 51, 223, 250, 51, 238, 15, 51, + 216, 207, 51, 216, 208, 115, 194, 51, 216, 208, 115, 215, 94, 211, 176, + 51, 217, 204, 51, 221, 122, 51, 223, 247, 194, 51, 223, 248, 51, 217, + 154, 51, 221, 22, 51, 223, 247, 206, 164, 51, 223, 187, 51, 228, 170, 51, + 223, 188, 225, 0, 51, 217, 153, 51, 221, 21, 51, 223, 247, 204, 144, 51, + 223, 181, 51, 228, 168, 51, 223, 182, 225, 0, 51, 230, 55, 220, 58, 51, + 226, 186, 220, 58, 51, 250, 247, 51, 247, 229, 51, 247, 6, 51, 246, 239, + 51, 247, 126, 115, 229, 146, 51, 245, 254, 51, 244, 129, 51, 237, 184, + 51, 152, 51, 236, 35, 51, 231, 49, 51, 229, 48, 51, 229, 36, 247, 47, 51, + 228, 211, 51, 227, 52, 51, 227, 51, 51, 227, 38, 51, 226, 200, 51, 225, + 60, 212, 36, 51, 224, 120, 51, 224, 56, 51, 218, 209, 51, 218, 72, 51, + 218, 11, 51, 218, 9, 51, 211, 168, 51, 210, 177, 51, 204, 64, 51, 206, + 165, 115, 226, 185, 51, 34, 115, 226, 185, 139, 209, 164, 16, 35, 244, + 133, 105, 139, 209, 164, 16, 35, 244, 133, 108, 139, 209, 164, 16, 35, + 244, 133, 147, 139, 209, 164, 16, 35, 244, 133, 149, 139, 209, 164, 16, + 35, 244, 133, 170, 139, 209, 164, 16, 35, 244, 133, 195, 139, 209, 164, + 16, 35, 244, 133, 213, 111, 139, 209, 164, 16, 35, 244, 133, 199, 139, + 209, 164, 16, 35, 244, 133, 222, 63, 139, 209, 164, 16, 35, 244, 133, + 209, 152, 139, 209, 164, 16, 35, 244, 133, 241, 112, 139, 209, 164, 16, + 35, 244, 133, 207, 154, 139, 209, 164, 16, 35, 244, 133, 209, 55, 139, + 209, 164, 16, 35, 244, 133, 239, 141, 139, 209, 164, 16, 35, 244, 133, + 240, 22, 139, 209, 164, 16, 35, 244, 133, 212, 82, 139, 209, 164, 16, 35, + 244, 133, 213, 108, 139, 209, 164, 16, 35, 244, 133, 241, 140, 139, 209, + 164, 16, 35, 244, 133, 222, 60, 139, 209, 164, 16, 35, 244, 133, 207, + 151, 139, 209, 164, 16, 35, 244, 133, 207, 145, 139, 209, 164, 16, 35, + 244, 133, 207, 141, 139, 209, 164, 16, 35, 244, 133, 207, 142, 139, 209, + 164, 16, 35, 244, 133, 207, 147, 139, 209, 164, 16, 35, 244, 133, 207, + 148, 139, 209, 164, 16, 35, 244, 133, 207, 143, 139, 209, 164, 16, 35, + 244, 133, 207, 144, 139, 209, 164, 16, 35, 244, 133, 207, 150, 139, 209, + 164, 16, 35, 244, 133, 207, 146, 139, 209, 164, 16, 35, 244, 133, 209, + 53, 139, 209, 164, 16, 35, 244, 133, 209, 52, 51, 238, 246, 237, 16, 35, + 209, 93, 245, 142, 237, 51, 237, 16, 35, 209, 93, 216, 151, 241, 179, + 237, 16, 35, 243, 203, 250, 50, 209, 93, 248, 140, 237, 16, 35, 202, 226, + 239, 180, 237, 16, 35, 204, 103, 237, 16, 35, 245, 214, 237, 16, 35, 209, + 93, 250, 105, 237, 16, 35, 236, 127, 208, 169, 237, 16, 35, 5, 209, 231, + 237, 16, 35, 208, 97, 237, 16, 35, 219, 32, 237, 16, 35, 211, 96, 237, + 16, 35, 240, 44, 237, 16, 35, 237, 249, 218, 32, 237, 16, 35, 224, 75, + 237, 16, 35, 241, 64, 237, 16, 35, 239, 181, 237, 16, 35, 203, 236, 220, + 32, 209, 93, 244, 71, 237, 16, 35, 250, 154, 237, 16, 35, 245, 193, 237, + 16, 35, 248, 49, 209, 24, 237, 16, 35, 238, 13, 237, 16, 35, 211, 192, + 250, 173, 237, 16, 35, 216, 77, 237, 16, 35, 231, 12, 237, 16, 35, 237, + 249, 209, 231, 237, 16, 35, 224, 8, 245, 164, 237, 16, 35, 237, 249, 217, + 244, 237, 16, 35, 209, 93, 251, 143, 204, 80, 237, 16, 35, 209, 93, 246, + 24, 239, 249, 237, 16, 35, 231, 26, 237, 16, 35, 242, 20, 237, 16, 35, + 216, 80, 237, 16, 35, 237, 249, 218, 16, 237, 16, 35, 217, 221, 237, 16, + 35, 244, 149, 76, 209, 93, 227, 134, 237, 16, 35, 209, 93, 240, 82, 237, + 16, 35, 219, 250, 237, 16, 35, 220, 85, 237, 16, 35, 244, 42, 237, 16, + 35, 244, 63, 237, 16, 35, 231, 40, 237, 16, 35, 247, 217, 237, 16, 35, + 245, 235, 208, 173, 225, 3, 237, 16, 35, 238, 215, 208, 169, 237, 16, 35, + 217, 163, 206, 213, 237, 16, 35, 219, 249, 237, 16, 35, 209, 93, 204, 50, + 237, 16, 35, 216, 68, 237, 16, 35, 209, 93, 247, 12, 237, 16, 35, 209, + 93, 250, 101, 209, 18, 237, 16, 35, 209, 93, 229, 195, 211, 68, 224, 12, + 237, 16, 35, 244, 9, 237, 16, 35, 209, 93, 225, 85, 225, 139, 237, 16, + 35, 251, 144, 237, 16, 35, 209, 93, 204, 96, 237, 16, 35, 209, 93, 238, + 173, 204, 16, 237, 16, 35, 209, 93, 230, 84, 228, 33, 237, 16, 35, 243, + 153, 237, 16, 35, 227, 121, 237, 16, 35, 231, 15, 208, 24, 237, 16, 35, + 5, 217, 244, 237, 16, 35, 251, 82, 245, 226, 237, 16, 35, 248, 143, 245, + 226, 11, 4, 230, 201, 11, 4, 230, 193, 11, 4, 75, 11, 4, 230, 227, 11, 4, + 231, 108, 11, 4, 231, 91, 11, 4, 231, 110, 11, 4, 231, 109, 11, 4, 250, + 49, 11, 4, 250, 10, 11, 4, 63, 11, 4, 250, 175, 11, 4, 206, 225, 11, 4, + 206, 228, 11, 4, 206, 226, 11, 4, 219, 224, 11, 4, 219, 193, 11, 4, 78, + 11, 4, 220, 9, 11, 4, 240, 217, 11, 4, 74, 11, 4, 203, 217, 11, 4, 248, + 51, 11, 4, 248, 47, 11, 4, 248, 86, 11, 4, 248, 61, 11, 4, 248, 75, 11, + 4, 248, 74, 11, 4, 248, 77, 11, 4, 248, 76, 11, 4, 248, 209, 11, 4, 248, + 201, 11, 4, 249, 32, 11, 4, 248, 232, 11, 4, 247, 163, 11, 4, 247, 167, + 11, 4, 247, 164, 11, 4, 247, 252, 11, 4, 247, 233, 11, 4, 248, 23, 11, 4, + 248, 2, 11, 4, 248, 101, 11, 4, 248, 162, 11, 4, 248, 113, 11, 4, 247, + 147, 11, 4, 247, 143, 11, 4, 247, 193, 11, 4, 247, 162, 11, 4, 247, 155, + 11, 4, 247, 160, 11, 4, 247, 131, 11, 4, 247, 129, 11, 4, 247, 136, 11, + 4, 247, 134, 11, 4, 247, 132, 11, 4, 247, 133, 11, 4, 218, 105, 11, 4, + 218, 101, 11, 4, 218, 167, 11, 4, 218, 117, 11, 4, 218, 133, 11, 4, 218, + 160, 11, 4, 218, 156, 11, 4, 219, 55, 11, 4, 219, 44, 11, 4, 185, 11, 4, + 219, 96, 11, 4, 217, 173, 11, 4, 217, 175, 11, 4, 217, 174, 11, 4, 218, + 25, 11, 4, 218, 14, 11, 4, 218, 69, 11, 4, 218, 41, 11, 4, 217, 159, 11, + 4, 217, 155, 11, 4, 217, 191, 11, 4, 217, 172, 11, 4, 217, 164, 11, 4, + 217, 170, 11, 4, 217, 138, 11, 4, 217, 137, 11, 4, 217, 142, 11, 4, 217, + 141, 11, 4, 217, 139, 11, 4, 217, 140, 11, 4, 248, 183, 11, 4, 248, 182, + 11, 4, 248, 189, 11, 4, 248, 184, 11, 4, 248, 186, 11, 4, 248, 185, 11, + 4, 248, 188, 11, 4, 248, 187, 11, 4, 248, 195, 11, 4, 248, 194, 11, 4, + 248, 198, 11, 4, 248, 196, 11, 4, 248, 174, 11, 4, 248, 176, 11, 4, 248, + 175, 11, 4, 248, 179, 11, 4, 248, 178, 11, 4, 248, 181, 11, 4, 248, 180, + 11, 4, 248, 190, 11, 4, 248, 193, 11, 4, 248, 191, 11, 4, 248, 170, 11, + 4, 248, 169, 11, 4, 248, 177, 11, 4, 248, 173, 11, 4, 248, 171, 11, 4, + 248, 172, 11, 4, 248, 166, 11, 4, 248, 165, 11, 4, 248, 168, 11, 4, 248, + 167, 11, 4, 223, 47, 11, 4, 223, 46, 11, 4, 223, 52, 11, 4, 223, 48, 11, + 4, 223, 49, 11, 4, 223, 51, 11, 4, 223, 50, 11, 4, 223, 55, 11, 4, 223, + 54, 11, 4, 223, 57, 11, 4, 223, 56, 11, 4, 223, 43, 11, 4, 223, 42, 11, + 4, 223, 45, 11, 4, 223, 44, 11, 4, 223, 36, 11, 4, 223, 35, 11, 4, 223, + 40, 11, 4, 223, 39, 11, 4, 223, 37, 11, 4, 223, 38, 11, 4, 223, 30, 11, + 4, 223, 29, 11, 4, 223, 34, 11, 4, 223, 33, 11, 4, 223, 31, 11, 4, 223, + 32, 11, 4, 236, 180, 11, 4, 236, 179, 11, 4, 236, 185, 11, 4, 236, 181, + 11, 4, 236, 182, 11, 4, 236, 184, 11, 4, 236, 183, 11, 4, 236, 188, 11, + 4, 236, 187, 11, 4, 236, 190, 11, 4, 236, 189, 11, 4, 236, 171, 11, 4, + 236, 173, 11, 4, 236, 172, 11, 4, 236, 176, 11, 4, 236, 175, 11, 4, 236, + 178, 11, 4, 236, 177, 11, 4, 236, 167, 11, 4, 236, 166, 11, 4, 236, 174, + 11, 4, 236, 170, 11, 4, 236, 168, 11, 4, 236, 169, 11, 4, 236, 161, 11, + 4, 236, 165, 11, 4, 236, 164, 11, 4, 236, 162, 11, 4, 236, 163, 11, 4, + 224, 93, 11, 4, 224, 92, 11, 4, 224, 155, 11, 4, 224, 99, 11, 4, 224, + 127, 11, 4, 224, 145, 11, 4, 224, 143, 11, 4, 225, 71, 11, 4, 225, 66, + 11, 4, 192, 11, 4, 225, 106, 11, 4, 223, 213, 11, 4, 223, 212, 11, 4, + 223, 216, 11, 4, 223, 214, 11, 4, 224, 21, 11, 4, 223, 252, 11, 4, 224, + 82, 11, 4, 224, 27, 11, 4, 224, 207, 11, 4, 225, 20, 11, 4, 223, 193, 11, + 4, 223, 189, 11, 4, 223, 246, 11, 4, 223, 209, 11, 4, 223, 202, 11, 4, + 223, 207, 11, 4, 223, 166, 11, 4, 223, 165, 11, 4, 223, 171, 11, 4, 223, + 168, 11, 4, 239, 236, 11, 4, 239, 230, 11, 4, 240, 26, 11, 4, 239, 251, + 11, 4, 240, 73, 11, 4, 240, 64, 11, 4, 240, 108, 11, 4, 240, 78, 11, 4, + 239, 139, 11, 4, 239, 186, 11, 4, 239, 167, 11, 4, 239, 91, 11, 4, 239, + 90, 11, 4, 239, 108, 11, 4, 239, 96, 11, 4, 239, 94, 11, 4, 239, 95, 11, + 4, 239, 78, 11, 4, 239, 77, 11, 4, 239, 81, 11, 4, 239, 79, 11, 4, 205, + 196, 11, 4, 205, 191, 11, 4, 205, 230, 11, 4, 205, 205, 11, 4, 205, 219, + 11, 4, 205, 216, 11, 4, 205, 222, 11, 4, 205, 221, 11, 4, 206, 63, 11, 4, + 206, 58, 11, 4, 206, 86, 11, 4, 206, 75, 11, 4, 205, 172, 11, 4, 205, + 168, 11, 4, 205, 189, 11, 4, 205, 174, 11, 4, 205, 233, 11, 4, 206, 44, + 11, 4, 204, 157, 11, 4, 204, 155, 11, 4, 204, 163, 11, 4, 204, 160, 11, + 4, 204, 158, 11, 4, 204, 159, 11, 4, 204, 148, 11, 4, 204, 147, 11, 4, + 204, 152, 11, 4, 204, 151, 11, 4, 204, 149, 11, 4, 204, 150, 11, 4, 243, + 147, 11, 4, 243, 134, 11, 4, 243, 233, 11, 4, 243, 173, 11, 4, 243, 208, + 11, 4, 243, 213, 11, 4, 243, 212, 11, 4, 244, 140, 11, 4, 244, 134, 11, + 4, 244, 212, 11, 4, 244, 160, 11, 4, 242, 25, 11, 4, 242, 26, 11, 4, 243, + 85, 11, 4, 242, 67, 11, 4, 243, 113, 11, 4, 243, 87, 11, 4, 244, 7, 11, + 4, 244, 75, 11, 4, 244, 28, 11, 4, 242, 16, 11, 4, 242, 14, 11, 4, 242, + 42, 11, 4, 242, 24, 11, 4, 242, 19, 11, 4, 242, 22, 11, 4, 208, 200, 11, + 4, 208, 192, 11, 4, 209, 2, 11, 4, 208, 210, 11, 4, 208, 248, 11, 4, 208, + 250, 11, 4, 208, 249, 11, 4, 209, 212, 11, 4, 209, 198, 11, 4, 210, 22, + 11, 4, 209, 222, 11, 4, 207, 185, 11, 4, 207, 184, 11, 4, 207, 187, 11, + 4, 207, 186, 11, 4, 208, 131, 11, 4, 208, 121, 11, 4, 135, 11, 4, 208, + 144, 11, 4, 209, 114, 11, 4, 209, 187, 11, 4, 209, 139, 11, 4, 207, 168, + 11, 4, 207, 163, 11, 4, 207, 203, 11, 4, 207, 183, 11, 4, 207, 169, 11, + 4, 207, 181, 11, 4, 244, 92, 11, 4, 244, 91, 11, 4, 244, 97, 11, 4, 244, + 93, 11, 4, 244, 94, 11, 4, 244, 96, 11, 4, 244, 95, 11, 4, 244, 113, 11, + 4, 244, 112, 11, 4, 244, 120, 11, 4, 244, 114, 11, 4, 244, 82, 11, 4, + 244, 84, 11, 4, 244, 83, 11, 4, 244, 87, 11, 4, 244, 86, 11, 4, 244, 90, + 11, 4, 244, 88, 11, 4, 244, 105, 11, 4, 244, 108, 11, 4, 244, 106, 11, 4, + 244, 78, 11, 4, 244, 77, 11, 4, 244, 85, 11, 4, 244, 81, 11, 4, 244, 79, + 11, 4, 244, 80, 11, 4, 223, 3, 11, 4, 223, 2, 11, 4, 223, 10, 11, 4, 223, + 5, 11, 4, 223, 6, 11, 4, 223, 7, 11, 4, 223, 19, 11, 4, 223, 18, 11, 4, + 223, 25, 11, 4, 223, 20, 11, 4, 222, 251, 11, 4, 222, 250, 11, 4, 223, 1, + 11, 4, 222, 252, 11, 4, 223, 11, 11, 4, 223, 17, 11, 4, 223, 15, 11, 4, + 222, 243, 11, 4, 222, 242, 11, 4, 222, 248, 11, 4, 222, 246, 11, 4, 222, + 244, 11, 4, 222, 245, 11, 4, 236, 146, 11, 4, 236, 145, 11, 4, 236, 152, + 11, 4, 236, 147, 11, 4, 236, 149, 11, 4, 236, 148, 11, 4, 236, 151, 11, + 4, 236, 150, 11, 4, 236, 158, 11, 4, 236, 156, 11, 4, 236, 160, 11, 4, + 236, 159, 11, 4, 236, 139, 11, 4, 236, 140, 11, 4, 236, 143, 11, 4, 236, + 142, 11, 4, 236, 144, 11, 4, 236, 153, 11, 4, 236, 155, 11, 4, 236, 154, + 11, 4, 236, 138, 11, 4, 222, 52, 11, 4, 222, 50, 11, 4, 222, 100, 11, 4, + 222, 55, 11, 4, 222, 82, 11, 4, 222, 96, 11, 4, 222, 95, 11, 4, 223, 61, + 11, 4, 201, 201, 11, 4, 223, 76, 11, 4, 221, 32, 11, 4, 221, 34, 11, 4, + 221, 33, 11, 4, 221, 165, 11, 4, 221, 150, 11, 4, 221, 191, 11, 4, 221, + 176, 11, 4, 222, 209, 11, 4, 222, 240, 11, 4, 222, 225, 11, 4, 221, 27, + 11, 4, 221, 23, 11, 4, 221, 84, 11, 4, 221, 31, 11, 4, 221, 29, 11, 4, + 221, 30, 11, 4, 236, 211, 11, 4, 236, 210, 11, 4, 236, 216, 11, 4, 236, + 212, 11, 4, 236, 213, 11, 4, 236, 215, 11, 4, 236, 214, 11, 4, 236, 222, + 11, 4, 236, 220, 11, 4, 236, 224, 11, 4, 236, 223, 11, 4, 236, 203, 11, + 4, 236, 205, 11, 4, 236, 204, 11, 4, 236, 207, 11, 4, 236, 209, 11, 4, + 236, 208, 11, 4, 236, 217, 11, 4, 236, 219, 11, 4, 236, 218, 11, 4, 236, + 199, 11, 4, 236, 198, 11, 4, 236, 206, 11, 4, 236, 202, 11, 4, 236, 200, + 11, 4, 236, 201, 11, 4, 236, 193, 11, 4, 236, 192, 11, 4, 236, 197, 11, + 4, 236, 196, 11, 4, 236, 194, 11, 4, 236, 195, 11, 4, 227, 90, 11, 4, + 227, 82, 11, 4, 227, 148, 11, 4, 227, 100, 11, 4, 227, 139, 11, 4, 227, + 138, 11, 4, 227, 142, 11, 4, 227, 140, 11, 4, 228, 0, 11, 4, 227, 245, + 11, 4, 228, 113, 11, 4, 228, 11, 11, 4, 226, 217, 11, 4, 226, 216, 11, 4, + 226, 219, 11, 4, 226, 218, 11, 4, 227, 6, 11, 4, 226, 248, 11, 4, 227, + 49, 11, 4, 227, 11, 11, 4, 227, 165, 11, 4, 227, 234, 11, 4, 227, 182, + 11, 4, 226, 211, 11, 4, 226, 209, 11, 4, 226, 239, 11, 4, 226, 215, 11, + 4, 226, 213, 11, 4, 226, 214, 11, 4, 226, 190, 11, 4, 226, 189, 11, 4, + 226, 199, 11, 4, 226, 193, 11, 4, 226, 191, 11, 4, 226, 192, 11, 4, 238, + 54, 11, 4, 238, 53, 11, 4, 238, 81, 11, 4, 238, 65, 11, 4, 238, 73, 11, + 4, 238, 72, 11, 4, 238, 75, 11, 4, 238, 74, 11, 4, 238, 217, 11, 4, 238, + 212, 11, 4, 239, 8, 11, 4, 238, 227, 11, 4, 237, 205, 11, 4, 237, 204, + 11, 4, 237, 207, 11, 4, 237, 206, 11, 4, 238, 18, 11, 4, 238, 16, 11, 4, + 238, 39, 11, 4, 238, 26, 11, 4, 238, 159, 11, 4, 238, 157, 11, 4, 238, + 190, 11, 4, 238, 170, 11, 4, 237, 194, 11, 4, 237, 193, 11, 4, 237, 230, + 11, 4, 237, 203, 11, 4, 237, 195, 11, 4, 237, 202, 11, 4, 229, 64, 11, 4, + 229, 61, 11, 4, 229, 100, 11, 4, 229, 78, 11, 4, 229, 89, 11, 4, 229, 93, + 11, 4, 229, 91, 11, 4, 229, 226, 11, 4, 229, 209, 11, 4, 173, 11, 4, 229, + 253, 11, 4, 228, 187, 11, 4, 228, 192, 11, 4, 228, 189, 11, 4, 228, 250, + 11, 4, 228, 245, 11, 4, 229, 26, 11, 4, 229, 1, 11, 4, 229, 170, 11, 4, + 229, 153, 11, 4, 229, 201, 11, 4, 229, 174, 11, 4, 228, 175, 11, 4, 228, + 171, 11, 4, 228, 209, 11, 4, 228, 186, 11, 4, 228, 179, 11, 4, 228, 183, + 11, 4, 238, 141, 11, 4, 238, 140, 11, 4, 238, 145, 11, 4, 238, 142, 11, + 4, 238, 144, 11, 4, 238, 143, 11, 4, 238, 152, 11, 4, 238, 151, 11, 4, + 238, 155, 11, 4, 238, 153, 11, 4, 238, 132, 11, 4, 238, 131, 11, 4, 238, + 134, 11, 4, 238, 133, 11, 4, 238, 137, 11, 4, 238, 136, 11, 4, 238, 139, + 11, 4, 238, 138, 11, 4, 238, 147, 11, 4, 238, 146, 11, 4, 238, 150, 11, + 4, 238, 148, 11, 4, 238, 127, 11, 4, 238, 126, 11, 4, 238, 135, 11, 4, + 238, 130, 11, 4, 238, 128, 11, 4, 238, 129, 11, 4, 224, 174, 11, 4, 224, + 175, 11, 4, 224, 193, 11, 4, 224, 192, 11, 4, 224, 195, 11, 4, 224, 194, + 11, 4, 224, 165, 11, 4, 224, 167, 11, 4, 224, 166, 11, 4, 224, 170, 11, + 4, 224, 169, 11, 4, 224, 172, 11, 4, 224, 171, 11, 4, 224, 176, 11, 4, + 224, 178, 11, 4, 224, 177, 11, 4, 224, 161, 11, 4, 224, 160, 11, 4, 224, + 168, 11, 4, 224, 164, 11, 4, 224, 162, 11, 4, 224, 163, 11, 4, 235, 233, + 11, 4, 235, 232, 11, 4, 235, 239, 11, 4, 235, 234, 11, 4, 235, 236, 11, + 4, 235, 235, 11, 4, 235, 238, 11, 4, 235, 237, 11, 4, 235, 244, 11, 4, + 235, 243, 11, 4, 235, 246, 11, 4, 235, 245, 11, 4, 235, 225, 11, 4, 235, + 224, 11, 4, 235, 227, 11, 4, 235, 226, 11, 4, 235, 229, 11, 4, 235, 228, + 11, 4, 235, 231, 11, 4, 235, 230, 11, 4, 235, 240, 11, 4, 235, 242, 11, + 4, 235, 241, 11, 4, 222, 148, 11, 4, 222, 150, 11, 4, 222, 149, 11, 4, + 222, 193, 11, 4, 222, 191, 11, 4, 222, 203, 11, 4, 222, 196, 11, 4, 222, + 110, 11, 4, 222, 109, 11, 4, 222, 111, 11, 4, 222, 120, 11, 4, 222, 117, + 11, 4, 222, 128, 11, 4, 222, 122, 11, 4, 222, 184, 11, 4, 222, 190, 11, + 4, 222, 186, 11, 4, 236, 230, 11, 4, 236, 245, 11, 4, 236, 254, 11, 4, + 237, 83, 11, 4, 237, 72, 11, 4, 152, 11, 4, 237, 94, 11, 4, 236, 6, 11, + 4, 236, 5, 11, 4, 236, 8, 11, 4, 236, 7, 11, 4, 236, 46, 11, 4, 236, 37, + 11, 4, 236, 136, 11, 4, 236, 109, 11, 4, 237, 18, 11, 4, 237, 67, 11, 4, + 237, 30, 11, 4, 204, 83, 11, 4, 204, 68, 11, 4, 204, 111, 11, 4, 204, 93, + 11, 4, 203, 206, 11, 4, 203, 208, 11, 4, 203, 207, 11, 4, 203, 229, 11, + 4, 204, 0, 11, 4, 203, 239, 11, 4, 204, 42, 11, 4, 204, 62, 11, 4, 204, + 47, 11, 4, 202, 24, 11, 4, 202, 23, 11, 4, 202, 39, 11, 4, 202, 27, 11, + 4, 202, 32, 11, 4, 202, 34, 11, 4, 202, 33, 11, 4, 202, 100, 11, 4, 202, + 97, 11, 4, 202, 116, 11, 4, 202, 104, 11, 4, 201, 255, 11, 4, 202, 1, 11, + 4, 202, 0, 11, 4, 202, 13, 11, 4, 202, 12, 11, 4, 202, 17, 11, 4, 202, + 14, 11, 4, 202, 82, 11, 4, 202, 92, 11, 4, 202, 86, 11, 4, 201, 251, 11, + 4, 201, 250, 11, 4, 202, 6, 11, 4, 201, 254, 11, 4, 201, 252, 11, 4, 201, + 253, 11, 4, 201, 237, 11, 4, 201, 236, 11, 4, 201, 242, 11, 4, 201, 240, + 11, 4, 201, 238, 11, 4, 201, 239, 11, 4, 246, 50, 11, 4, 246, 43, 11, 4, + 246, 79, 11, 4, 246, 63, 11, 4, 246, 76, 11, 4, 246, 70, 11, 4, 246, 78, + 11, 4, 246, 77, 11, 4, 247, 17, 11, 4, 247, 9, 11, 4, 247, 92, 11, 4, + 247, 48, 11, 4, 245, 101, 11, 4, 245, 103, 11, 4, 245, 102, 11, 4, 245, + 158, 11, 4, 245, 148, 11, 4, 245, 254, 11, 4, 245, 175, 11, 4, 246, 202, + 11, 4, 246, 238, 11, 4, 246, 207, 11, 4, 245, 77, 11, 4, 245, 75, 11, 4, + 245, 110, 11, 4, 245, 99, 11, 4, 245, 83, 11, 4, 245, 96, 11, 4, 245, 54, + 11, 4, 245, 53, 11, 4, 245, 66, 11, 4, 245, 60, 11, 4, 245, 55, 11, 4, + 245, 57, 11, 4, 201, 220, 11, 4, 201, 219, 11, 4, 201, 226, 11, 4, 201, + 221, 11, 4, 201, 223, 11, 4, 201, 222, 11, 4, 201, 225, 11, 4, 201, 224, + 11, 4, 201, 232, 11, 4, 201, 231, 11, 4, 201, 235, 11, 4, 201, 233, 11, + 4, 201, 216, 11, 4, 201, 218, 11, 4, 201, 217, 11, 4, 201, 227, 11, 4, + 201, 230, 11, 4, 201, 228, 11, 4, 201, 209, 11, 4, 201, 213, 11, 4, 201, + 212, 11, 4, 201, 210, 11, 4, 201, 211, 11, 4, 201, 203, 11, 4, 201, 202, + 11, 4, 201, 208, 11, 4, 201, 206, 11, 4, 201, 204, 11, 4, 201, 205, 11, + 4, 220, 201, 11, 4, 220, 200, 11, 4, 220, 206, 11, 4, 220, 202, 11, 4, + 220, 203, 11, 4, 220, 205, 11, 4, 220, 204, 11, 4, 220, 211, 11, 4, 220, + 210, 11, 4, 220, 214, 11, 4, 220, 213, 11, 4, 220, 194, 11, 4, 220, 195, + 11, 4, 220, 198, 11, 4, 220, 199, 11, 4, 220, 207, 11, 4, 220, 209, 11, + 4, 220, 189, 11, 4, 220, 197, 11, 4, 220, 193, 11, 4, 220, 190, 11, 4, + 220, 191, 11, 4, 220, 184, 11, 4, 220, 183, 11, 4, 220, 188, 11, 4, 220, + 187, 11, 4, 220, 185, 11, 4, 220, 186, 11, 4, 212, 90, 11, 4, 195, 11, 4, + 212, 162, 11, 4, 212, 93, 11, 4, 212, 150, 11, 4, 212, 153, 11, 4, 212, + 151, 11, 4, 214, 225, 11, 4, 214, 211, 11, 4, 215, 36, 11, 4, 214, 233, + 11, 4, 210, 204, 11, 4, 210, 206, 11, 4, 210, 205, 11, 4, 211, 244, 11, + 4, 211, 233, 11, 4, 212, 13, 11, 4, 211, 248, 11, 4, 213, 103, 11, 4, + 214, 177, 11, 4, 213, 132, 11, 4, 210, 181, 11, 4, 210, 178, 11, 4, 211, + 10, 11, 4, 210, 203, 11, 4, 210, 185, 11, 4, 210, 193, 11, 4, 210, 83, + 11, 4, 210, 82, 11, 4, 210, 151, 11, 4, 210, 91, 11, 4, 210, 85, 11, 4, + 210, 90, 11, 4, 211, 126, 11, 4, 211, 125, 11, 4, 211, 132, 11, 4, 211, + 127, 11, 4, 211, 129, 11, 4, 211, 131, 11, 4, 211, 130, 11, 4, 211, 141, + 11, 4, 211, 139, 11, 4, 211, 164, 11, 4, 211, 142, 11, 4, 211, 121, 11, + 4, 211, 120, 11, 4, 211, 124, 11, 4, 211, 122, 11, 4, 211, 135, 11, 4, + 211, 138, 11, 4, 211, 136, 11, 4, 211, 117, 11, 4, 211, 115, 11, 4, 211, + 119, 11, 4, 211, 118, 11, 4, 211, 110, 11, 4, 211, 109, 11, 4, 211, 114, + 11, 4, 211, 113, 11, 4, 211, 111, 11, 4, 211, 112, 11, 4, 202, 75, 11, 4, + 202, 74, 11, 4, 202, 80, 11, 4, 202, 77, 11, 4, 202, 54, 11, 4, 202, 56, + 11, 4, 202, 55, 11, 4, 202, 59, 11, 4, 202, 58, 11, 4, 202, 63, 11, 4, + 202, 60, 11, 4, 202, 68, 11, 4, 202, 67, 11, 4, 202, 71, 11, 4, 202, 69, + 11, 4, 202, 50, 11, 4, 202, 49, 11, 4, 202, 57, 11, 4, 202, 53, 11, 4, + 202, 51, 11, 4, 202, 52, 11, 4, 202, 42, 11, 4, 202, 41, 11, 4, 202, 46, + 11, 4, 202, 45, 11, 4, 202, 43, 11, 4, 202, 44, 11, 4, 246, 176, 11, 4, + 246, 172, 11, 4, 246, 199, 11, 4, 246, 185, 11, 4, 246, 94, 11, 4, 246, + 93, 11, 4, 246, 96, 11, 4, 246, 95, 11, 4, 246, 109, 11, 4, 246, 108, 11, + 4, 246, 116, 11, 4, 246, 111, 11, 4, 246, 147, 11, 4, 246, 145, 11, 4, + 246, 170, 11, 4, 246, 155, 11, 4, 246, 88, 11, 4, 246, 98, 11, 4, 246, + 92, 11, 4, 246, 89, 11, 4, 246, 91, 11, 4, 246, 81, 11, 4, 246, 80, 11, + 4, 246, 85, 11, 4, 246, 84, 11, 4, 246, 82, 11, 4, 246, 83, 11, 4, 215, + 181, 11, 4, 215, 185, 11, 4, 215, 163, 11, 4, 215, 164, 11, 4, 215, 168, + 11, 4, 215, 167, 11, 4, 215, 171, 11, 4, 215, 169, 11, 4, 215, 175, 11, + 4, 215, 174, 11, 4, 215, 180, 11, 4, 215, 176, 11, 4, 215, 159, 11, 4, + 215, 157, 11, 4, 215, 165, 11, 4, 215, 162, 11, 4, 215, 160, 11, 4, 215, + 161, 11, 4, 215, 152, 11, 4, 215, 151, 11, 4, 215, 156, 11, 4, 215, 155, + 11, 4, 215, 153, 11, 4, 215, 154, 11, 4, 221, 145, 11, 4, 221, 144, 11, + 4, 221, 147, 11, 4, 221, 146, 11, 4, 221, 136, 11, 4, 221, 138, 11, 4, + 221, 137, 11, 4, 221, 140, 11, 4, 221, 139, 11, 4, 221, 143, 11, 4, 221, + 142, 11, 4, 221, 130, 11, 4, 221, 129, 11, 4, 221, 135, 11, 4, 221, 133, + 11, 4, 221, 131, 11, 4, 221, 132, 11, 4, 221, 124, 11, 4, 221, 123, 11, + 4, 221, 128, 11, 4, 221, 127, 11, 4, 221, 125, 11, 4, 221, 126, 11, 4, + 213, 53, 11, 4, 213, 48, 11, 4, 213, 90, 11, 4, 213, 64, 11, 4, 212, 188, + 11, 4, 212, 190, 11, 4, 212, 189, 11, 4, 212, 212, 11, 4, 212, 208, 11, + 4, 212, 242, 11, 4, 212, 232, 11, 4, 213, 21, 11, 4, 213, 14, 11, 4, 213, + 43, 11, 4, 213, 30, 11, 4, 212, 184, 11, 4, 212, 181, 11, 4, 212, 199, + 11, 4, 212, 187, 11, 4, 212, 185, 11, 4, 212, 186, 11, 4, 212, 165, 11, + 4, 212, 164, 11, 4, 212, 171, 11, 4, 212, 168, 11, 4, 212, 166, 11, 4, + 212, 167, 11, 4, 216, 172, 11, 4, 216, 166, 11, 4, 216, 220, 11, 4, 216, + 178, 11, 4, 215, 122, 11, 4, 215, 124, 11, 4, 215, 123, 11, 4, 215, 199, + 11, 4, 215, 187, 11, 4, 215, 227, 11, 4, 215, 203, 11, 4, 216, 66, 11, 4, + 216, 158, 11, 4, 216, 105, 11, 4, 215, 115, 11, 4, 215, 112, 11, 4, 215, + 145, 11, 4, 215, 121, 11, 4, 215, 117, 11, 4, 215, 118, 11, 4, 215, 97, + 11, 4, 215, 96, 11, 4, 215, 102, 11, 4, 215, 100, 11, 4, 215, 98, 11, 4, + 215, 99, 11, 4, 230, 131, 11, 4, 230, 130, 11, 4, 230, 141, 11, 4, 230, + 132, 11, 4, 230, 137, 11, 4, 230, 136, 11, 4, 230, 139, 11, 4, 230, 138, + 11, 4, 230, 72, 11, 4, 230, 71, 11, 4, 230, 74, 11, 4, 230, 73, 11, 4, + 230, 88, 11, 4, 230, 86, 11, 4, 230, 101, 11, 4, 230, 90, 11, 4, 230, 65, + 11, 4, 230, 63, 11, 4, 230, 82, 11, 4, 230, 70, 11, 4, 230, 67, 11, 4, + 230, 68, 11, 4, 230, 57, 11, 4, 230, 56, 11, 4, 230, 61, 11, 4, 230, 60, + 11, 4, 230, 58, 11, 4, 230, 59, 11, 4, 217, 81, 11, 4, 217, 79, 11, 4, + 217, 88, 11, 4, 217, 82, 11, 4, 217, 85, 11, 4, 217, 84, 11, 4, 217, 87, + 11, 4, 217, 86, 11, 4, 217, 32, 11, 4, 217, 29, 11, 4, 217, 34, 11, 4, + 217, 33, 11, 4, 217, 68, 11, 4, 217, 67, 11, 4, 217, 77, 11, 4, 217, 71, + 11, 4, 217, 24, 11, 4, 217, 20, 11, 4, 217, 65, 11, 4, 217, 28, 11, 4, + 217, 26, 11, 4, 217, 27, 11, 4, 217, 4, 11, 4, 217, 2, 11, 4, 217, 14, + 11, 4, 217, 7, 11, 4, 217, 5, 11, 4, 217, 6, 11, 4, 230, 120, 11, 4, 230, + 119, 11, 4, 230, 126, 11, 4, 230, 121, 11, 4, 230, 123, 11, 4, 230, 122, + 11, 4, 230, 125, 11, 4, 230, 124, 11, 4, 230, 111, 11, 4, 230, 113, 11, + 4, 230, 112, 11, 4, 230, 116, 11, 4, 230, 115, 11, 4, 230, 118, 11, 4, + 230, 117, 11, 4, 230, 107, 11, 4, 230, 106, 11, 4, 230, 114, 11, 4, 230, + 110, 11, 4, 230, 108, 11, 4, 230, 109, 11, 4, 230, 103, 11, 4, 230, 102, + 11, 4, 230, 105, 11, 4, 230, 104, 11, 4, 222, 25, 11, 4, 222, 24, 11, 4, + 222, 32, 11, 4, 222, 26, 11, 4, 222, 28, 11, 4, 222, 27, 11, 4, 222, 31, + 11, 4, 222, 29, 11, 4, 222, 14, 11, 4, 222, 15, 11, 4, 222, 20, 11, 4, + 222, 19, 11, 4, 222, 23, 11, 4, 222, 21, 11, 4, 222, 9, 11, 4, 222, 18, + 11, 4, 222, 13, 11, 4, 222, 10, 11, 4, 222, 11, 11, 4, 222, 4, 11, 4, + 222, 3, 11, 4, 222, 8, 11, 4, 222, 7, 11, 4, 222, 5, 11, 4, 222, 6, 11, + 4, 220, 236, 11, 4, 220, 235, 11, 4, 220, 248, 11, 4, 220, 240, 11, 4, + 220, 245, 11, 4, 220, 244, 11, 4, 220, 247, 11, 4, 220, 246, 11, 4, 220, + 221, 11, 4, 220, 223, 11, 4, 220, 222, 11, 4, 220, 228, 11, 4, 220, 227, + 11, 4, 220, 233, 11, 4, 220, 229, 11, 4, 220, 219, 11, 4, 220, 217, 11, + 4, 220, 226, 11, 4, 220, 220, 11, 4, 203, 162, 11, 4, 203, 161, 11, 4, + 203, 170, 11, 4, 203, 164, 11, 4, 203, 166, 11, 4, 203, 165, 11, 4, 203, + 168, 11, 4, 203, 167, 11, 4, 203, 150, 11, 4, 203, 151, 11, 4, 203, 155, + 11, 4, 203, 154, 11, 4, 203, 160, 11, 4, 203, 158, 11, 4, 203, 128, 11, + 4, 203, 126, 11, 4, 203, 141, 11, 4, 203, 131, 11, 4, 203, 129, 11, 4, + 203, 130, 11, 4, 202, 253, 11, 4, 202, 251, 11, 4, 203, 11, 11, 4, 202, + 254, 11, 4, 203, 5, 11, 4, 203, 4, 11, 4, 203, 8, 11, 4, 203, 6, 11, 4, + 202, 191, 11, 4, 202, 190, 11, 4, 202, 194, 11, 4, 202, 192, 11, 4, 202, + 227, 11, 4, 202, 223, 11, 4, 202, 247, 11, 4, 202, 231, 11, 4, 202, 182, + 11, 4, 202, 178, 11, 4, 202, 213, 11, 4, 202, 189, 11, 4, 202, 185, 11, + 4, 202, 186, 11, 4, 202, 162, 11, 4, 202, 161, 11, 4, 202, 169, 11, 4, + 202, 165, 11, 4, 202, 163, 11, 4, 202, 164, 11, 40, 217, 68, 11, 40, 227, + 148, 11, 40, 229, 64, 11, 40, 220, 240, 11, 40, 245, 60, 11, 40, 211, + 132, 11, 40, 238, 138, 11, 40, 238, 170, 11, 40, 224, 155, 11, 40, 235, + 233, 11, 40, 226, 192, 11, 40, 248, 170, 11, 40, 224, 27, 11, 40, 202, + 247, 11, 40, 217, 159, 11, 40, 235, 227, 11, 40, 209, 212, 11, 40, 239, + 8, 11, 40, 201, 254, 11, 40, 245, 54, 11, 40, 244, 80, 11, 40, 247, 160, + 11, 40, 238, 134, 11, 40, 220, 229, 11, 40, 207, 203, 11, 40, 220, 9, 11, + 40, 230, 107, 11, 40, 202, 13, 11, 40, 217, 138, 11, 40, 236, 178, 11, + 40, 202, 253, 11, 40, 204, 159, 11, 40, 212, 171, 11, 40, 206, 44, 11, + 40, 202, 116, 11, 40, 230, 101, 11, 40, 220, 193, 11, 40, 230, 105, 11, + 40, 238, 18, 11, 40, 230, 125, 11, 40, 204, 0, 11, 40, 242, 42, 11, 40, + 212, 186, 11, 40, 227, 142, 11, 40, 245, 66, 11, 40, 245, 102, 11, 40, + 246, 63, 11, 40, 235, 230, 11, 40, 213, 53, 11, 40, 201, 253, 11, 40, + 212, 232, 11, 40, 246, 170, 11, 40, 201, 223, 11, 40, 223, 51, 11, 40, + 229, 201, 227, 91, 1, 249, 32, 227, 91, 1, 185, 227, 91, 1, 218, 208, + 227, 91, 1, 244, 212, 227, 91, 1, 210, 22, 227, 91, 1, 209, 108, 227, 91, + 1, 239, 8, 227, 91, 1, 173, 227, 91, 1, 229, 144, 227, 91, 1, 230, 181, + 227, 91, 1, 247, 92, 227, 91, 1, 246, 199, 227, 91, 1, 241, 255, 227, 91, + 1, 208, 20, 227, 91, 1, 208, 10, 227, 91, 1, 192, 227, 91, 1, 201, 201, + 227, 91, 1, 228, 113, 227, 91, 1, 215, 36, 227, 91, 1, 202, 80, 227, 91, + 1, 202, 116, 227, 91, 1, 222, 203, 227, 91, 1, 152, 227, 91, 1, 203, 182, + 227, 91, 1, 237, 12, 227, 91, 1, 240, 108, 227, 91, 1, 204, 111, 227, 91, + 1, 213, 90, 227, 91, 1, 198, 227, 91, 1, 238, 119, 227, 91, 1, 63, 227, + 91, 1, 251, 109, 227, 91, 1, 74, 227, 91, 1, 240, 238, 227, 91, 1, 75, + 227, 91, 1, 78, 227, 91, 1, 68, 227, 91, 1, 207, 24, 227, 91, 1, 207, 18, + 227, 91, 1, 220, 73, 227, 91, 1, 143, 223, 170, 209, 2, 227, 91, 1, 143, + 223, 111, 218, 69, 227, 91, 1, 143, 223, 170, 245, 65, 227, 91, 1, 143, + 223, 170, 248, 23, 227, 91, 1, 143, 223, 170, 201, 201, 227, 91, 1, 143, + 223, 170, 230, 150, 227, 91, 217, 179, 245, 233, 227, 91, 217, 179, 239, + 102, 211, 61, 48, 4, 241, 161, 48, 4, 241, 157, 48, 4, 237, 48, 48, 4, + 204, 55, 48, 4, 204, 54, 48, 4, 219, 23, 48, 4, 248, 93, 48, 4, 248, 150, + 48, 4, 225, 46, 48, 4, 228, 239, 48, 4, 224, 187, 48, 4, 238, 203, 48, 4, + 240, 53, 48, 4, 206, 50, 48, 4, 209, 176, 48, 4, 209, 90, 48, 4, 243, + 247, 48, 4, 243, 244, 48, 4, 227, 226, 48, 4, 216, 135, 48, 4, 244, 61, + 48, 4, 223, 16, 48, 4, 214, 165, 48, 4, 213, 41, 48, 4, 202, 90, 48, 4, + 202, 70, 48, 4, 246, 230, 48, 4, 230, 159, 48, 4, 222, 39, 48, 4, 203, + 49, 48, 4, 229, 198, 48, 4, 222, 176, 48, 4, 238, 182, 48, 4, 225, 8, 48, + 4, 222, 235, 48, 4, 221, 0, 48, 4, 75, 48, 4, 231, 49, 48, 4, 237, 3, 48, + 4, 236, 238, 48, 4, 204, 30, 48, 4, 204, 18, 48, 4, 218, 167, 48, 4, 248, + 91, 48, 4, 248, 86, 48, 4, 225, 39, 48, 4, 228, 236, 48, 4, 224, 184, 48, + 4, 238, 199, 48, 4, 240, 26, 48, 4, 205, 230, 48, 4, 209, 2, 48, 4, 209, + 70, 48, 4, 243, 239, 48, 4, 243, 243, 48, 4, 227, 148, 48, 4, 216, 57, + 48, 4, 243, 233, 48, 4, 223, 10, 48, 4, 212, 162, 48, 4, 213, 11, 48, 4, + 202, 39, 48, 4, 202, 66, 48, 4, 246, 79, 48, 4, 230, 141, 48, 4, 222, 32, + 48, 4, 203, 11, 48, 4, 229, 100, 48, 4, 222, 168, 48, 4, 238, 81, 48, 4, + 224, 155, 48, 4, 222, 100, 48, 4, 220, 248, 48, 4, 63, 48, 4, 250, 231, + 48, 4, 222, 198, 48, 4, 152, 48, 4, 237, 126, 48, 4, 204, 111, 48, 4, + 204, 97, 48, 4, 185, 48, 4, 248, 98, 48, 4, 249, 32, 48, 4, 225, 54, 48, + 4, 228, 244, 48, 4, 228, 242, 48, 4, 224, 191, 48, 4, 238, 207, 48, 4, + 240, 108, 48, 4, 206, 86, 48, 4, 210, 22, 48, 4, 209, 108, 48, 4, 244, 1, + 48, 4, 243, 246, 48, 4, 228, 113, 48, 4, 216, 220, 48, 4, 244, 212, 48, + 4, 223, 25, 48, 4, 215, 36, 48, 4, 213, 90, 48, 4, 202, 116, 48, 4, 202, + 80, 48, 4, 247, 92, 48, 4, 230, 181, 48, 4, 222, 48, 48, 4, 198, 48, 4, + 173, 48, 4, 230, 4, 48, 4, 222, 182, 48, 4, 239, 8, 48, 4, 192, 48, 4, + 201, 201, 48, 4, 221, 11, 48, 4, 220, 18, 48, 4, 220, 13, 48, 4, 236, + 117, 48, 4, 203, 244, 48, 4, 203, 240, 48, 4, 218, 45, 48, 4, 248, 89, + 48, 4, 248, 10, 48, 4, 225, 34, 48, 4, 228, 234, 48, 4, 224, 180, 48, 4, + 238, 195, 48, 4, 239, 175, 48, 4, 205, 176, 48, 4, 208, 148, 48, 4, 209, + 42, 48, 4, 243, 236, 48, 4, 243, 241, 48, 4, 227, 18, 48, 4, 215, 208, + 48, 4, 243, 90, 48, 4, 222, 253, 48, 4, 211, 250, 48, 4, 212, 236, 48, 4, + 202, 15, 48, 4, 202, 61, 48, 4, 245, 180, 48, 4, 230, 91, 48, 4, 222, 22, + 48, 4, 202, 232, 48, 4, 229, 6, 48, 4, 222, 166, 48, 4, 238, 28, 48, 4, + 224, 35, 48, 4, 221, 180, 48, 4, 220, 230, 48, 4, 68, 48, 4, 206, 255, + 48, 4, 236, 26, 48, 4, 236, 13, 48, 4, 203, 217, 48, 4, 203, 210, 48, 4, + 217, 191, 48, 4, 248, 88, 48, 4, 247, 193, 48, 4, 225, 33, 48, 4, 228, + 232, 48, 4, 224, 179, 48, 4, 238, 194, 48, 4, 239, 108, 48, 4, 204, 163, + 48, 4, 207, 203, 48, 4, 209, 22, 48, 4, 243, 234, 48, 4, 243, 240, 48, 4, + 226, 239, 48, 4, 215, 145, 48, 4, 242, 42, 48, 4, 222, 248, 48, 4, 211, + 10, 48, 4, 212, 199, 48, 4, 202, 6, 48, 4, 202, 57, 48, 4, 245, 110, 48, + 4, 230, 82, 48, 4, 222, 18, 48, 4, 202, 213, 48, 4, 228, 209, 48, 4, 222, + 165, 48, 4, 237, 230, 48, 4, 223, 246, 48, 4, 221, 84, 48, 4, 220, 226, + 48, 4, 78, 48, 4, 220, 31, 48, 4, 222, 124, 48, 4, 236, 136, 48, 4, 236, + 120, 48, 4, 204, 0, 48, 4, 203, 245, 48, 4, 218, 69, 48, 4, 248, 90, 48, + 4, 248, 23, 48, 4, 225, 35, 48, 4, 228, 235, 48, 4, 224, 182, 48, 4, 238, + 197, 48, 4, 238, 196, 48, 4, 239, 186, 48, 4, 205, 189, 48, 4, 135, 48, + 4, 209, 47, 48, 4, 243, 237, 48, 4, 243, 242, 48, 4, 227, 49, 48, 4, 215, + 227, 48, 4, 243, 113, 48, 4, 223, 1, 48, 4, 212, 13, 48, 4, 212, 242, 48, + 4, 202, 17, 48, 4, 202, 63, 48, 4, 245, 254, 48, 4, 230, 101, 48, 4, 222, + 23, 48, 4, 202, 247, 48, 4, 229, 26, 48, 4, 222, 167, 48, 4, 238, 39, 48, + 4, 224, 82, 48, 4, 221, 191, 48, 4, 220, 233, 48, 4, 74, 48, 4, 241, 92, + 48, 4, 222, 187, 48, 4, 237, 67, 48, 4, 237, 33, 48, 4, 204, 62, 48, 4, + 204, 49, 48, 4, 219, 34, 48, 4, 248, 94, 48, 4, 248, 162, 48, 4, 225, 47, + 48, 4, 228, 240, 48, 4, 228, 238, 48, 4, 224, 188, 48, 4, 238, 204, 48, + 4, 238, 202, 48, 4, 240, 60, 48, 4, 206, 55, 48, 4, 209, 187, 48, 4, 209, + 92, 48, 4, 243, 248, 48, 4, 243, 245, 48, 4, 227, 234, 48, 4, 216, 158, + 48, 4, 244, 75, 48, 4, 223, 17, 48, 4, 214, 177, 48, 4, 213, 43, 48, 4, + 202, 92, 48, 4, 202, 71, 48, 4, 246, 238, 48, 4, 230, 161, 48, 4, 222, + 41, 48, 4, 203, 52, 48, 4, 229, 201, 48, 4, 222, 177, 48, 4, 222, 173, + 48, 4, 238, 190, 48, 4, 238, 177, 48, 4, 225, 20, 48, 4, 222, 240, 48, 4, + 221, 1, 48, 4, 222, 205, 48, 4, 227, 188, 48, 245, 233, 48, 239, 102, + 211, 61, 48, 217, 47, 82, 48, 4, 223, 0, 240, 108, 48, 4, 223, 0, 173, + 48, 4, 223, 0, 211, 250, 48, 16, 240, 49, 48, 16, 229, 196, 48, 16, 208, + 215, 48, 16, 222, 75, 48, 16, 248, 237, 48, 16, 240, 107, 48, 16, 210, + 18, 48, 16, 244, 164, 48, 16, 243, 89, 48, 16, 228, 193, 48, 16, 208, + 152, 48, 16, 243, 112, 48, 16, 230, 92, 48, 17, 202, 84, 48, 17, 105, 48, + 17, 108, 48, 17, 147, 48, 17, 149, 48, 17, 170, 48, 17, 195, 48, 17, 213, + 111, 48, 17, 199, 48, 17, 222, 63, 48, 4, 223, 0, 192, 48, 4, 223, 0, + 243, 113, 36, 6, 1, 202, 88, 36, 5, 1, 202, 88, 36, 6, 1, 241, 250, 36, + 5, 1, 241, 250, 36, 6, 1, 216, 73, 241, 252, 36, 5, 1, 216, 73, 241, 252, + 36, 6, 1, 230, 230, 36, 5, 1, 230, 230, 36, 6, 1, 243, 129, 36, 5, 1, + 243, 129, 36, 6, 1, 224, 43, 207, 14, 36, 5, 1, 224, 43, 207, 14, 36, 6, + 1, 247, 204, 220, 36, 36, 5, 1, 247, 204, 220, 36, 36, 6, 1, 222, 216, + 203, 34, 36, 5, 1, 222, 216, 203, 34, 36, 6, 1, 203, 31, 3, 249, 26, 203, + 34, 36, 5, 1, 203, 31, 3, 249, 26, 203, 34, 36, 6, 1, 230, 228, 203, 66, + 36, 5, 1, 230, 228, 203, 66, 36, 6, 1, 216, 73, 202, 213, 36, 5, 1, 216, + 73, 202, 213, 36, 6, 1, 230, 228, 63, 36, 5, 1, 230, 228, 63, 36, 6, 1, + 246, 16, 227, 86, 202, 183, 36, 5, 1, 246, 16, 227, 86, 202, 183, 36, 6, + 1, 248, 35, 202, 183, 36, 5, 1, 248, 35, 202, 183, 36, 6, 1, 230, 228, + 246, 16, 227, 86, 202, 183, 36, 5, 1, 230, 228, 246, 16, 227, 86, 202, + 183, 36, 6, 1, 202, 249, 36, 5, 1, 202, 249, 36, 6, 1, 216, 73, 208, 14, + 36, 5, 1, 216, 73, 208, 14, 36, 6, 1, 212, 7, 244, 75, 36, 5, 1, 212, 7, + 244, 75, 36, 6, 1, 212, 7, 241, 122, 36, 5, 1, 212, 7, 241, 122, 36, 6, + 1, 212, 7, 241, 103, 36, 5, 1, 212, 7, 241, 103, 36, 6, 1, 224, 47, 78, + 36, 5, 1, 224, 47, 78, 36, 6, 1, 248, 63, 78, 36, 5, 1, 248, 63, 78, 36, + 6, 1, 52, 224, 47, 78, 36, 5, 1, 52, 224, 47, 78, 36, 1, 223, 227, 78, + 39, 36, 204, 146, 39, 36, 209, 153, 224, 114, 54, 39, 36, 236, 12, 224, + 114, 54, 39, 36, 209, 37, 224, 114, 54, 212, 55, 250, 59, 39, 36, 1, 207, + 11, 231, 110, 39, 36, 1, 75, 39, 36, 1, 203, 11, 39, 36, 1, 68, 39, 36, + 1, 237, 91, 54, 39, 36, 1, 203, 30, 39, 36, 1, 212, 7, 54, 39, 36, 1, + 220, 36, 39, 36, 229, 213, 39, 36, 219, 41, 36, 229, 213, 36, 219, 41, + 36, 6, 1, 242, 9, 36, 5, 1, 242, 9, 36, 6, 1, 241, 241, 36, 5, 1, 241, + 241, 36, 6, 1, 202, 47, 36, 5, 1, 202, 47, 36, 6, 1, 246, 254, 36, 5, 1, + 246, 254, 36, 6, 1, 241, 238, 36, 5, 1, 241, 238, 36, 6, 1, 209, 188, 3, + 101, 113, 36, 5, 1, 209, 188, 3, 101, 113, 36, 6, 1, 207, 158, 36, 5, 1, + 207, 158, 36, 6, 1, 207, 245, 36, 5, 1, 207, 245, 36, 6, 1, 207, 250, 36, + 5, 1, 207, 250, 36, 6, 1, 209, 193, 36, 5, 1, 209, 193, 36, 6, 1, 235, + 251, 36, 5, 1, 235, 251, 36, 6, 1, 212, 177, 36, 5, 1, 212, 177, 36, 6, + 1, 52, 78, 36, 5, 1, 52, 78, 36, 6, 1, 245, 128, 78, 36, 5, 1, 245, 128, + 78, 65, 1, 36, 237, 91, 54, 65, 1, 36, 212, 7, 54, 39, 36, 1, 241, 154, + 39, 36, 1, 230, 228, 74, 24, 1, 63, 24, 1, 173, 24, 1, 68, 24, 1, 228, + 209, 24, 1, 241, 161, 24, 1, 216, 135, 24, 1, 210, 1, 24, 1, 78, 24, 1, + 220, 248, 24, 1, 75, 24, 1, 228, 113, 24, 1, 185, 24, 1, 216, 3, 24, 1, + 216, 50, 24, 1, 227, 225, 24, 1, 225, 7, 24, 1, 210, 18, 24, 1, 223, 23, + 24, 1, 222, 46, 24, 1, 226, 185, 24, 1, 210, 179, 24, 1, 223, 246, 24, 1, + 213, 6, 24, 1, 212, 162, 24, 1, 213, 16, 24, 1, 213, 113, 24, 1, 228, + 137, 24, 1, 229, 170, 24, 1, 221, 55, 24, 1, 221, 84, 24, 1, 222, 17, 24, + 1, 202, 229, 24, 1, 212, 199, 24, 1, 202, 187, 24, 1, 198, 24, 1, 221, + 118, 24, 1, 229, 156, 24, 1, 218, 212, 24, 1, 222, 39, 24, 1, 221, 99, + 24, 1, 217, 183, 24, 1, 203, 214, 24, 1, 219, 23, 24, 1, 240, 53, 24, 1, + 215, 145, 24, 1, 226, 239, 24, 1, 224, 155, 24, 1, 222, 100, 24, 1, 216, + 75, 24, 1, 216, 202, 24, 1, 229, 180, 24, 1, 222, 131, 24, 1, 222, 182, + 24, 1, 222, 203, 24, 1, 212, 242, 24, 1, 217, 188, 24, 1, 239, 108, 24, + 1, 239, 179, 24, 1, 204, 111, 24, 1, 201, 201, 24, 1, 227, 148, 24, 1, + 218, 167, 24, 1, 227, 10, 24, 1, 229, 26, 24, 1, 225, 44, 24, 1, 216, + 107, 24, 1, 224, 240, 24, 1, 192, 24, 1, 209, 2, 24, 1, 229, 100, 24, 1, + 224, 82, 24, 1, 225, 52, 24, 1, 209, 132, 24, 1, 228, 244, 24, 1, 209, + 152, 24, 1, 221, 86, 24, 1, 214, 251, 24, 1, 240, 104, 24, 1, 228, 246, + 24, 1, 229, 21, 24, 39, 131, 228, 255, 24, 39, 131, 207, 194, 24, 222, + 45, 24, 239, 102, 211, 61, 24, 245, 242, 24, 245, 233, 24, 213, 143, 24, + 217, 47, 82, 65, 1, 246, 128, 143, 203, 1, 218, 119, 65, 1, 246, 128, + 143, 203, 77, 218, 119, 65, 1, 246, 128, 143, 203, 1, 213, 65, 65, 1, + 246, 128, 143, 203, 77, 213, 65, 65, 1, 246, 128, 143, 203, 1, 217, 65, + 65, 1, 246, 128, 143, 203, 77, 217, 65, 65, 1, 246, 128, 143, 203, 1, + 215, 145, 65, 1, 246, 128, 143, 203, 77, 215, 145, 65, 1, 240, 198, 242, + 83, 143, 142, 65, 1, 138, 242, 83, 143, 142, 65, 1, 224, 150, 242, 83, + 143, 142, 65, 1, 124, 242, 83, 143, 142, 65, 1, 240, 197, 242, 83, 143, + 142, 65, 1, 240, 198, 242, 83, 227, 214, 143, 142, 65, 1, 138, 242, 83, + 227, 214, 143, 142, 65, 1, 224, 150, 242, 83, 227, 214, 143, 142, 65, 1, + 124, 242, 83, 227, 214, 143, 142, 65, 1, 240, 197, 242, 83, 227, 214, + 143, 142, 65, 1, 240, 198, 227, 214, 143, 142, 65, 1, 138, 227, 214, 143, + 142, 65, 1, 224, 150, 227, 214, 143, 142, 65, 1, 124, 227, 214, 143, 142, + 65, 1, 240, 197, 227, 214, 143, 142, 65, 1, 70, 80, 142, 65, 1, 70, 212, + 57, 65, 1, 70, 236, 106, 142, 65, 1, 226, 251, 50, 245, 166, 250, 217, + 65, 1, 216, 188, 112, 47, 65, 1, 216, 188, 121, 47, 65, 1, 216, 188, 240, + 212, 82, 65, 1, 216, 188, 230, 239, 240, 212, 82, 65, 1, 124, 230, 239, + 240, 212, 82, 65, 1, 211, 42, 25, 138, 208, 161, 65, 1, 211, 42, 25, 124, + 208, 161, 8, 6, 1, 241, 149, 251, 30, 8, 5, 1, 241, 149, 251, 30, 8, 6, + 1, 241, 149, 251, 59, 8, 5, 1, 241, 149, 251, 59, 8, 6, 1, 237, 31, 8, 5, + 1, 237, 31, 8, 6, 1, 207, 107, 8, 5, 1, 207, 107, 8, 6, 1, 208, 89, 8, 5, + 1, 208, 89, 8, 6, 1, 245, 107, 8, 5, 1, 245, 107, 8, 6, 1, 245, 108, 3, + 245, 233, 8, 5, 1, 245, 108, 3, 245, 233, 8, 1, 5, 6, 240, 174, 8, 1, 5, + 6, 194, 8, 6, 1, 252, 25, 8, 5, 1, 252, 25, 8, 6, 1, 250, 178, 8, 5, 1, + 250, 178, 8, 6, 1, 250, 34, 8, 5, 1, 250, 34, 8, 6, 1, 250, 18, 8, 5, 1, + 250, 18, 8, 6, 1, 250, 19, 3, 236, 106, 142, 8, 5, 1, 250, 19, 3, 236, + 106, 142, 8, 6, 1, 250, 8, 8, 5, 1, 250, 8, 8, 6, 1, 216, 73, 247, 126, + 3, 243, 85, 8, 5, 1, 216, 73, 247, 126, 3, 243, 85, 8, 6, 1, 230, 55, 3, + 95, 8, 5, 1, 230, 55, 3, 95, 8, 6, 1, 230, 55, 3, 243, 228, 95, 8, 5, 1, + 230, 55, 3, 243, 228, 95, 8, 6, 1, 230, 55, 3, 211, 32, 25, 243, 228, 95, + 8, 5, 1, 230, 55, 3, 211, 32, 25, 243, 228, 95, 8, 6, 1, 247, 203, 159, + 8, 5, 1, 247, 203, 159, 8, 6, 1, 228, 131, 3, 138, 95, 8, 5, 1, 228, 131, + 3, 138, 95, 8, 6, 1, 158, 3, 163, 211, 32, 219, 199, 8, 5, 1, 158, 3, + 163, 211, 32, 219, 199, 8, 6, 1, 158, 3, 227, 14, 8, 5, 1, 158, 3, 227, + 14, 8, 6, 1, 220, 18, 8, 5, 1, 220, 18, 8, 6, 1, 219, 185, 3, 211, 32, + 209, 25, 244, 20, 8, 5, 1, 219, 185, 3, 211, 32, 209, 25, 244, 20, 8, 6, + 1, 219, 185, 3, 239, 199, 8, 5, 1, 219, 185, 3, 239, 199, 8, 6, 1, 219, + 185, 3, 211, 170, 209, 248, 8, 5, 1, 219, 185, 3, 211, 170, 209, 248, 8, + 6, 1, 217, 135, 3, 211, 32, 209, 25, 244, 20, 8, 5, 1, 217, 135, 3, 211, + 32, 209, 25, 244, 20, 8, 6, 1, 217, 135, 3, 243, 228, 95, 8, 5, 1, 217, + 135, 3, 243, 228, 95, 8, 6, 1, 217, 1, 215, 192, 8, 5, 1, 217, 1, 215, + 192, 8, 6, 1, 215, 132, 215, 192, 8, 5, 1, 215, 132, 215, 192, 8, 6, 1, + 206, 165, 3, 243, 228, 95, 8, 5, 1, 206, 165, 3, 243, 228, 95, 8, 6, 1, + 204, 152, 8, 5, 1, 204, 152, 8, 6, 1, 205, 197, 202, 159, 8, 5, 1, 205, + 197, 202, 159, 8, 6, 1, 209, 41, 3, 95, 8, 5, 1, 209, 41, 3, 95, 8, 6, 1, + 209, 41, 3, 211, 32, 209, 25, 244, 20, 8, 5, 1, 209, 41, 3, 211, 32, 209, + 25, 244, 20, 8, 6, 1, 206, 45, 8, 5, 1, 206, 45, 8, 6, 1, 240, 250, 8, 5, + 1, 240, 250, 8, 6, 1, 230, 215, 8, 5, 1, 230, 215, 8, 6, 1, 245, 218, 8, + 5, 1, 245, 218, 65, 1, 206, 193, 8, 5, 1, 242, 32, 8, 5, 1, 226, 222, 8, + 5, 1, 223, 220, 8, 5, 1, 221, 47, 8, 5, 1, 215, 131, 8, 1, 5, 6, 215, + 131, 8, 5, 1, 207, 191, 8, 5, 1, 207, 6, 8, 6, 1, 231, 4, 245, 51, 8, 5, + 1, 231, 4, 245, 51, 8, 6, 1, 231, 4, 240, 174, 8, 5, 1, 231, 4, 240, 174, + 8, 6, 1, 231, 4, 239, 75, 8, 6, 1, 207, 174, 231, 4, 239, 75, 8, 5, 1, + 207, 174, 231, 4, 239, 75, 8, 6, 1, 207, 174, 159, 8, 5, 1, 207, 174, + 159, 8, 6, 1, 231, 4, 146, 8, 5, 1, 231, 4, 146, 8, 6, 1, 231, 4, 194, 8, + 5, 1, 231, 4, 194, 8, 6, 1, 231, 4, 210, 69, 8, 5, 1, 231, 4, 210, 69, + 65, 1, 124, 246, 53, 251, 138, 65, 1, 245, 242, 65, 1, 212, 228, 241, 35, + 54, 8, 6, 1, 214, 255, 8, 5, 1, 214, 255, 8, 6, 1, 207, 174, 237, 171, 8, + 5, 1, 228, 131, 3, 216, 79, 236, 116, 25, 248, 124, 8, 1, 212, 114, 243, + 85, 8, 6, 1, 223, 164, 3, 244, 20, 8, 5, 1, 223, 164, 3, 244, 20, 8, 6, + 1, 247, 126, 3, 142, 8, 5, 1, 247, 126, 3, 142, 8, 5, 1, 247, 126, 3, + 219, 142, 113, 8, 5, 1, 237, 172, 3, 219, 142, 113, 8, 6, 1, 66, 3, 239, + 199, 8, 5, 1, 66, 3, 239, 199, 8, 6, 1, 240, 175, 3, 95, 8, 5, 1, 240, + 175, 3, 95, 8, 6, 1, 205, 182, 251, 109, 8, 5, 1, 205, 182, 251, 109, 8, + 6, 1, 205, 182, 220, 73, 8, 5, 1, 205, 182, 220, 73, 8, 6, 1, 205, 182, + 207, 24, 8, 5, 1, 205, 182, 207, 24, 8, 6, 1, 239, 76, 3, 220, 89, 95, 8, + 5, 1, 239, 76, 3, 220, 89, 95, 8, 6, 1, 230, 55, 3, 220, 89, 95, 8, 5, 1, + 230, 55, 3, 220, 89, 95, 8, 6, 1, 223, 164, 3, 220, 89, 95, 8, 5, 1, 223, + 164, 3, 220, 89, 95, 8, 6, 1, 217, 1, 3, 220, 89, 95, 8, 5, 1, 217, 1, 3, + 220, 89, 95, 8, 6, 1, 215, 94, 3, 220, 89, 95, 8, 5, 1, 215, 94, 3, 220, + 89, 95, 8, 6, 1, 237, 172, 3, 113, 8, 6, 1, 216, 73, 171, 74, 8, 6, 1, + 132, 239, 75, 8, 6, 1, 228, 131, 3, 248, 124, 8, 6, 1, 207, 174, 230, 54, + 8, 6, 1, 207, 174, 210, 69, 8, 6, 1, 230, 185, 3, 245, 126, 8, 6, 1, 246, + 142, 8, 6, 1, 248, 106, 8, 5, 1, 248, 106, 8, 6, 1, 220, 36, 8, 5, 1, + 220, 36, 8, 241, 40, 1, 212, 154, 75, 65, 1, 6, 237, 172, 3, 95, 65, 1, + 5, 32, 220, 73, 8, 1, 5, 6, 207, 174, 226, 185, 8, 241, 40, 1, 216, 73, + 240, 174, 8, 241, 40, 1, 216, 73, 219, 184, 8, 241, 40, 1, 230, 239, 226, + 185, 8, 241, 40, 1, 235, 206, 227, 20, 8, 241, 40, 1, 250, 126, 226, 185, + 210, 149, 223, 94, 1, 63, 210, 149, 223, 94, 1, 75, 210, 149, 223, 94, 2, + 242, 11, 210, 149, 223, 94, 1, 68, 210, 149, 223, 94, 1, 74, 210, 149, + 223, 94, 1, 78, 210, 149, 223, 94, 2, 237, 85, 210, 149, 223, 94, 1, 229, + 26, 210, 149, 223, 94, 1, 229, 115, 210, 149, 223, 94, 1, 238, 39, 210, + 149, 223, 94, 1, 238, 91, 210, 149, 223, 94, 2, 250, 180, 210, 149, 223, + 94, 1, 245, 254, 210, 149, 223, 94, 1, 246, 116, 210, 149, 223, 94, 1, + 230, 101, 210, 149, 223, 94, 1, 230, 143, 210, 149, 223, 94, 1, 207, 218, + 210, 149, 223, 94, 1, 207, 224, 210, 149, 223, 94, 1, 244, 90, 210, 149, + 223, 94, 1, 244, 99, 210, 149, 223, 94, 1, 135, 210, 149, 223, 94, 1, + 209, 47, 210, 149, 223, 94, 1, 243, 113, 210, 149, 223, 94, 1, 243, 237, + 210, 149, 223, 94, 1, 221, 191, 210, 149, 223, 94, 1, 218, 69, 210, 149, + 223, 94, 1, 218, 180, 210, 149, 223, 94, 1, 248, 23, 210, 149, 223, 94, + 1, 248, 90, 210, 149, 223, 94, 1, 224, 82, 210, 149, 223, 94, 1, 215, + 227, 210, 149, 223, 94, 1, 227, 49, 210, 149, 223, 94, 1, 215, 171, 210, + 149, 223, 94, 1, 212, 13, 210, 149, 223, 94, 1, 236, 136, 210, 149, 223, + 94, 22, 2, 63, 210, 149, 223, 94, 22, 2, 75, 210, 149, 223, 94, 22, 2, + 68, 210, 149, 223, 94, 22, 2, 74, 210, 149, 223, 94, 22, 2, 220, 18, 210, + 149, 223, 94, 218, 64, 225, 92, 210, 149, 223, 94, 218, 64, 225, 91, 210, + 149, 223, 94, 218, 64, 225, 90, 210, 149, 223, 94, 218, 64, 225, 89, 153, + 231, 33, 239, 138, 118, 217, 55, 153, 231, 33, 239, 138, 118, 237, 137, + 153, 231, 33, 239, 138, 126, 217, 53, 153, 231, 33, 239, 138, 118, 212, + 80, 153, 231, 33, 239, 138, 118, 241, 138, 153, 231, 33, 239, 138, 126, + 212, 79, 153, 231, 33, 217, 56, 82, 153, 231, 33, 218, 96, 82, 153, 231, + 33, 215, 120, 82, 153, 231, 33, 217, 57, 82, 218, 204, 1, 173, 218, 204, + 1, 229, 144, 218, 204, 1, 239, 8, 218, 204, 1, 222, 203, 218, 204, 1, + 247, 92, 218, 204, 1, 246, 199, 218, 204, 1, 230, 181, 218, 204, 1, 221, + 11, 218, 204, 1, 210, 22, 218, 204, 1, 209, 108, 218, 204, 1, 244, 212, + 218, 204, 1, 201, 201, 218, 204, 1, 185, 218, 204, 1, 218, 208, 218, 204, + 1, 249, 32, 218, 204, 1, 192, 218, 204, 1, 208, 20, 218, 204, 1, 208, 10, + 218, 204, 1, 241, 255, 218, 204, 1, 204, 111, 218, 204, 1, 202, 80, 218, + 204, 1, 202, 116, 218, 204, 1, 5, 63, 218, 204, 1, 198, 218, 204, 1, 216, + 220, 218, 204, 1, 228, 113, 218, 204, 1, 213, 90, 218, 204, 1, 215, 36, + 218, 204, 1, 152, 218, 204, 1, 63, 218, 204, 1, 75, 218, 204, 1, 68, 218, + 204, 1, 74, 218, 204, 1, 78, 218, 204, 1, 217, 126, 218, 204, 1, 203, + 182, 218, 204, 1, 240, 108, 218, 204, 1, 238, 155, 218, 204, 1, 241, 161, + 218, 204, 210, 254, 1, 204, 111, 218, 204, 210, 254, 1, 198, 218, 204, 1, + 207, 241, 218, 204, 1, 207, 229, 218, 204, 1, 244, 120, 218, 204, 1, 221, + 227, 218, 204, 1, 250, 255, 198, 218, 204, 1, 205, 185, 213, 90, 218, + 204, 1, 205, 186, 152, 218, 204, 1, 250, 66, 240, 108, 218, 204, 210, + 254, 1, 216, 220, 218, 204, 210, 201, 1, 216, 220, 218, 204, 1, 247, 52, + 218, 204, 212, 120, 237, 65, 82, 218, 204, 52, 237, 65, 82, 218, 204, + 131, 213, 82, 218, 204, 131, 52, 213, 82, 214, 215, 2, 250, 180, 214, + 215, 2, 205, 199, 214, 215, 1, 63, 214, 215, 1, 252, 25, 214, 215, 1, 75, + 214, 215, 1, 231, 83, 214, 215, 1, 68, 214, 215, 1, 206, 178, 214, 215, + 1, 125, 146, 214, 215, 1, 125, 215, 186, 214, 215, 1, 125, 159, 214, 215, + 1, 125, 227, 78, 214, 215, 1, 74, 214, 215, 1, 241, 161, 214, 215, 1, + 251, 64, 214, 215, 1, 78, 214, 215, 1, 220, 18, 214, 215, 1, 250, 34, + 214, 215, 1, 173, 214, 215, 1, 229, 144, 214, 215, 1, 239, 8, 214, 215, + 1, 238, 119, 214, 215, 1, 222, 203, 214, 215, 1, 247, 92, 214, 215, 1, + 246, 199, 214, 215, 1, 230, 181, 214, 215, 1, 230, 149, 214, 215, 1, 221, + 11, 214, 215, 1, 207, 241, 214, 215, 1, 207, 229, 214, 215, 1, 244, 120, + 214, 215, 1, 244, 104, 214, 215, 1, 221, 227, 214, 215, 1, 210, 22, 214, + 215, 1, 209, 108, 214, 215, 1, 244, 212, 214, 215, 1, 244, 1, 214, 215, + 1, 201, 201, 214, 215, 1, 185, 214, 215, 1, 218, 208, 214, 215, 1, 249, + 32, 214, 215, 1, 248, 98, 214, 215, 1, 192, 214, 215, 1, 198, 214, 215, + 1, 216, 220, 214, 215, 1, 228, 113, 214, 215, 1, 206, 86, 214, 215, 1, + 213, 90, 214, 215, 1, 211, 164, 214, 215, 1, 215, 36, 214, 215, 1, 152, + 214, 215, 1, 227, 77, 214, 215, 109, 2, 237, 155, 214, 215, 22, 2, 252, + 25, 214, 215, 22, 2, 75, 214, 215, 22, 2, 231, 83, 214, 215, 22, 2, 68, + 214, 215, 22, 2, 206, 178, 214, 215, 22, 2, 125, 146, 214, 215, 22, 2, + 125, 215, 186, 214, 215, 22, 2, 125, 159, 214, 215, 22, 2, 125, 227, 78, + 214, 215, 22, 2, 74, 214, 215, 22, 2, 241, 161, 214, 215, 22, 2, 251, 64, + 214, 215, 22, 2, 78, 214, 215, 22, 2, 220, 18, 214, 215, 22, 2, 250, 34, + 214, 215, 2, 205, 204, 214, 215, 244, 166, 214, 215, 52, 244, 166, 214, + 215, 17, 202, 84, 214, 215, 17, 105, 214, 215, 17, 108, 214, 215, 17, + 147, 214, 215, 17, 149, 214, 215, 17, 170, 214, 215, 17, 195, 214, 215, + 17, 213, 111, 214, 215, 17, 199, 214, 215, 17, 222, 63, 39, 92, 17, 202, + 84, 39, 92, 17, 105, 39, 92, 17, 108, 39, 92, 17, 147, 39, 92, 17, 149, + 39, 92, 17, 170, 39, 92, 17, 195, 39, 92, 17, 213, 111, 39, 92, 17, 199, + 39, 92, 17, 222, 63, 39, 92, 1, 63, 39, 92, 1, 68, 39, 92, 1, 173, 39, + 92, 1, 201, 201, 39, 92, 1, 185, 39, 92, 1, 216, 220, 39, 92, 1, 205, + 230, 39, 92, 2, 250, 17, 92, 2, 211, 227, 247, 52, 92, 2, 247, 53, 205, + 204, 92, 2, 52, 247, 53, 205, 204, 92, 2, 247, 53, 108, 92, 2, 247, 53, + 147, 92, 2, 247, 53, 250, 17, 92, 2, 217, 162, 92, 238, 228, 240, 7, 92, + 247, 33, 92, 237, 58, 92, 2, 212, 157, 92, 230, 173, 220, 39, 229, 207, + 227, 149, 17, 202, 84, 229, 207, 227, 149, 17, 105, 229, 207, 227, 149, + 17, 108, 229, 207, 227, 149, 17, 147, 229, 207, 227, 149, 17, 149, 229, + 207, 227, 149, 17, 170, 229, 207, 227, 149, 17, 195, 229, 207, 227, 149, + 17, 213, 111, 229, 207, 227, 149, 17, 199, 229, 207, 227, 149, 17, 222, + 63, 229, 207, 227, 149, 1, 173, 229, 207, 227, 149, 1, 229, 144, 229, + 207, 227, 149, 1, 239, 8, 229, 207, 227, 149, 1, 222, 203, 229, 207, 227, + 149, 1, 215, 36, 229, 207, 227, 149, 1, 213, 90, 229, 207, 227, 149, 1, + 202, 116, 229, 207, 227, 149, 1, 221, 11, 229, 207, 227, 149, 1, 210, 22, + 229, 207, 227, 149, 1, 236, 30, 229, 207, 227, 149, 1, 201, 201, 229, + 207, 227, 149, 1, 185, 229, 207, 227, 149, 1, 218, 208, 229, 207, 227, + 149, 1, 192, 229, 207, 227, 149, 1, 244, 212, 229, 207, 227, 149, 1, 249, + 32, 229, 207, 227, 149, 1, 216, 220, 229, 207, 227, 149, 1, 198, 229, + 207, 227, 149, 1, 228, 113, 229, 207, 227, 149, 1, 204, 111, 229, 207, + 227, 149, 1, 209, 108, 229, 207, 227, 149, 1, 152, 229, 207, 227, 149, 1, + 206, 86, 229, 207, 227, 149, 1, 247, 92, 229, 207, 227, 149, 1, 63, 229, + 207, 227, 149, 1, 220, 73, 229, 207, 227, 149, 1, 75, 229, 207, 227, 149, + 1, 220, 18, 229, 207, 227, 149, 22, 207, 24, 229, 207, 227, 149, 22, 74, + 229, 207, 227, 149, 22, 68, 229, 207, 227, 149, 22, 241, 161, 229, 207, + 227, 149, 22, 78, 229, 207, 227, 149, 143, 218, 84, 229, 207, 227, 149, + 143, 247, 68, 229, 207, 227, 149, 143, 247, 69, 218, 84, 229, 207, 227, + 149, 2, 245, 70, 229, 207, 227, 149, 2, 212, 170, 216, 119, 1, 173, 216, + 119, 1, 239, 8, 216, 119, 1, 222, 203, 216, 119, 1, 210, 22, 216, 119, 1, + 244, 212, 216, 119, 1, 201, 201, 216, 119, 1, 185, 216, 119, 1, 249, 32, + 216, 119, 1, 192, 216, 119, 1, 247, 92, 216, 119, 1, 230, 181, 216, 119, + 1, 221, 11, 216, 119, 1, 215, 36, 216, 119, 1, 216, 220, 216, 119, 1, + 228, 113, 216, 119, 1, 198, 216, 119, 1, 204, 111, 216, 119, 1, 152, 216, + 119, 1, 225, 54, 216, 119, 1, 222, 182, 216, 119, 1, 223, 25, 216, 119, + 1, 220, 234, 216, 119, 1, 63, 216, 119, 22, 2, 75, 216, 119, 22, 2, 68, + 216, 119, 22, 2, 74, 216, 119, 22, 2, 251, 64, 216, 119, 22, 2, 78, 216, + 119, 22, 2, 250, 34, 216, 119, 22, 2, 240, 238, 216, 119, 22, 2, 241, + 189, 216, 119, 109, 2, 222, 205, 216, 119, 109, 2, 223, 163, 216, 119, + 109, 2, 146, 216, 119, 109, 2, 237, 171, 216, 119, 205, 204, 216, 119, + 214, 168, 82, 28, 123, 208, 236, 28, 123, 208, 235, 28, 123, 208, 233, + 28, 123, 208, 238, 28, 123, 216, 42, 28, 123, 216, 26, 28, 123, 216, 21, + 28, 123, 216, 23, 28, 123, 216, 39, 28, 123, 216, 32, 28, 123, 216, 25, + 28, 123, 216, 44, 28, 123, 216, 27, 28, 123, 216, 46, 28, 123, 216, 43, + 28, 123, 224, 137, 28, 123, 224, 128, 28, 123, 224, 131, 28, 123, 218, + 138, 28, 123, 218, 149, 28, 123, 218, 150, 28, 123, 211, 148, 28, 123, + 231, 96, 28, 123, 231, 103, 28, 123, 211, 159, 28, 123, 211, 146, 28, + 123, 218, 189, 28, 123, 236, 246, 28, 123, 211, 143, 190, 2, 219, 102, + 190, 2, 246, 235, 190, 2, 227, 242, 190, 2, 204, 20, 190, 1, 63, 190, 1, + 235, 206, 229, 211, 190, 1, 75, 190, 1, 231, 83, 190, 1, 68, 190, 1, 219, + 169, 246, 205, 190, 1, 222, 204, 227, 201, 190, 1, 222, 204, 227, 202, + 216, 173, 190, 1, 74, 190, 1, 251, 64, 190, 1, 78, 190, 1, 173, 190, 1, + 230, 44, 214, 227, 190, 1, 230, 44, 223, 205, 190, 1, 239, 8, 190, 1, + 239, 9, 223, 205, 190, 1, 222, 203, 190, 1, 247, 92, 190, 1, 247, 93, + 223, 205, 190, 1, 230, 181, 190, 1, 221, 12, 223, 205, 190, 1, 230, 182, + 225, 144, 190, 1, 221, 11, 190, 1, 207, 241, 190, 1, 207, 242, 225, 144, + 190, 1, 244, 120, 190, 1, 244, 121, 225, 144, 190, 1, 223, 111, 223, 205, + 190, 1, 210, 22, 190, 1, 210, 23, 223, 205, 190, 1, 244, 212, 190, 1, + 244, 213, 225, 144, 190, 1, 201, 201, 190, 1, 185, 190, 1, 219, 169, 223, + 205, 190, 1, 249, 32, 190, 1, 249, 33, 223, 205, 190, 1, 192, 190, 1, + 198, 190, 1, 216, 220, 190, 1, 216, 221, 251, 74, 190, 1, 228, 113, 190, + 1, 204, 111, 190, 1, 215, 37, 223, 205, 190, 1, 215, 37, 225, 144, 190, + 1, 215, 36, 190, 1, 152, 190, 2, 246, 236, 209, 155, 190, 22, 2, 209, + 214, 190, 22, 2, 208, 166, 190, 22, 2, 203, 211, 190, 22, 2, 203, 212, + 224, 251, 190, 22, 2, 210, 224, 190, 22, 2, 210, 225, 224, 239, 190, 22, + 2, 209, 235, 190, 22, 2, 243, 163, 223, 204, 190, 22, 2, 218, 249, 190, + 109, 2, 229, 173, 190, 109, 2, 219, 6, 190, 109, 2, 247, 77, 190, 219, + 115, 190, 49, 216, 93, 190, 50, 216, 93, 190, 219, 158, 250, 225, 190, + 219, 158, 225, 162, 190, 219, 158, 226, 226, 190, 219, 158, 204, 14, 190, + 219, 158, 219, 116, 190, 219, 158, 227, 106, 190, 219, 158, 226, 220, + 190, 219, 158, 251, 116, 190, 219, 158, 251, 117, 251, 116, 190, 219, + 158, 218, 107, 190, 207, 174, 219, 158, 218, 107, 190, 219, 111, 190, 17, + 202, 84, 190, 17, 105, 190, 17, 108, 190, 17, 147, 190, 17, 149, 190, 17, + 170, 190, 17, 195, 190, 17, 213, 111, 190, 17, 199, 190, 17, 222, 63, + 190, 219, 158, 208, 202, 207, 189, 190, 219, 158, 230, 211, 69, 1, 213, + 67, 238, 119, 69, 1, 213, 67, 246, 199, 69, 1, 213, 67, 230, 149, 69, 1, + 213, 67, 221, 227, 69, 1, 213, 67, 248, 98, 69, 2, 213, 67, 214, 213, 69, + 65, 1, 213, 67, 216, 136, 69, 1, 45, 228, 85, 221, 11, 69, 1, 45, 228, + 85, 240, 108, 69, 1, 45, 228, 85, 239, 8, 69, 1, 45, 228, 85, 238, 119, + 69, 1, 45, 228, 85, 230, 181, 69, 1, 45, 228, 85, 230, 149, 69, 1, 45, + 228, 85, 244, 120, 69, 1, 45, 228, 85, 244, 104, 69, 1, 45, 228, 85, 221, + 227, 69, 45, 228, 85, 17, 202, 84, 69, 45, 228, 85, 17, 105, 69, 45, 228, + 85, 17, 108, 69, 45, 228, 85, 17, 147, 69, 45, 228, 85, 17, 149, 69, 45, + 228, 85, 17, 170, 69, 45, 228, 85, 17, 195, 69, 45, 228, 85, 17, 213, + 111, 69, 45, 228, 85, 17, 199, 69, 45, 228, 85, 17, 222, 63, 69, 1, 45, + 228, 85, 227, 77, 69, 1, 45, 228, 85, 244, 212, 69, 1, 45, 228, 85, 244, + 1, 69, 1, 45, 228, 85, 249, 32, 69, 1, 45, 228, 85, 248, 98, 246, 192, 1, + 63, 246, 192, 1, 75, 246, 192, 1, 68, 246, 192, 1, 74, 246, 192, 1, 251, + 64, 246, 192, 1, 78, 246, 192, 1, 173, 246, 192, 1, 229, 144, 246, 192, + 1, 239, 8, 246, 192, 1, 238, 119, 246, 192, 1, 222, 112, 246, 192, 1, + 222, 203, 246, 192, 1, 246, 199, 246, 192, 1, 246, 144, 246, 192, 1, 230, + 181, 246, 192, 1, 230, 149, 246, 192, 1, 222, 102, 246, 192, 1, 222, 104, + 246, 192, 1, 222, 103, 246, 192, 1, 210, 22, 246, 192, 1, 209, 108, 246, + 192, 1, 244, 212, 246, 192, 1, 244, 1, 246, 192, 1, 221, 53, 246, 192, 1, + 201, 201, 246, 192, 1, 244, 120, 246, 192, 1, 185, 246, 192, 1, 218, 12, + 246, 192, 1, 218, 208, 246, 192, 1, 249, 32, 246, 192, 1, 248, 98, 246, + 192, 1, 223, 238, 246, 192, 1, 192, 246, 192, 1, 248, 198, 246, 192, 1, + 198, 246, 192, 1, 216, 220, 246, 192, 1, 228, 113, 246, 192, 1, 206, 86, + 246, 192, 1, 211, 164, 246, 192, 1, 215, 36, 246, 192, 1, 152, 246, 192, + 22, 2, 252, 25, 246, 192, 22, 2, 75, 246, 192, 22, 2, 231, 83, 246, 192, + 22, 2, 241, 145, 246, 192, 22, 2, 68, 246, 192, 22, 2, 220, 73, 246, 192, + 22, 2, 78, 246, 192, 22, 2, 251, 64, 246, 192, 22, 2, 250, 34, 246, 192, + 22, 2, 207, 24, 246, 192, 109, 2, 198, 246, 192, 109, 2, 216, 220, 246, + 192, 109, 2, 228, 113, 246, 192, 109, 2, 204, 111, 246, 192, 1, 46, 230, + 54, 246, 192, 1, 46, 239, 75, 246, 192, 1, 46, 222, 205, 246, 192, 109, + 2, 46, 222, 205, 246, 192, 1, 46, 246, 200, 246, 192, 1, 46, 210, 69, + 246, 192, 1, 46, 223, 163, 246, 192, 1, 46, 219, 184, 246, 192, 1, 46, + 203, 124, 246, 192, 1, 46, 146, 246, 192, 1, 46, 159, 246, 192, 1, 46, + 211, 167, 246, 192, 109, 2, 46, 226, 185, 246, 192, 109, 2, 46, 237, 171, + 246, 192, 17, 202, 84, 246, 192, 17, 105, 246, 192, 17, 108, 246, 192, + 17, 147, 246, 192, 17, 149, 246, 192, 17, 170, 246, 192, 17, 195, 246, + 192, 17, 213, 111, 246, 192, 17, 199, 246, 192, 17, 222, 63, 246, 192, + 217, 179, 211, 201, 246, 192, 217, 179, 244, 166, 246, 192, 217, 179, 52, + 244, 166, 246, 192, 217, 179, 208, 70, 244, 166, 69, 1, 229, 137, 239, 8, + 69, 1, 229, 137, 247, 92, 69, 1, 229, 137, 246, 199, 69, 1, 229, 137, + 230, 181, 69, 1, 229, 137, 230, 149, 69, 1, 229, 137, 221, 11, 69, 1, + 229, 137, 207, 241, 69, 1, 229, 137, 207, 229, 69, 1, 229, 137, 244, 120, + 69, 1, 229, 137, 244, 104, 69, 1, 229, 137, 244, 1, 69, 1, 229, 137, 201, + 201, 69, 1, 229, 137, 215, 36, 69, 1, 229, 137, 152, 69, 1, 229, 137, + 237, 12, 69, 1, 229, 137, 240, 108, 69, 65, 1, 229, 137, 216, 136, 69, 1, + 229, 137, 203, 182, 69, 1, 229, 137, 202, 116, 69, 1, 229, 137, 216, 220, + 69, 227, 36, 229, 137, 220, 94, 69, 227, 36, 229, 137, 217, 78, 69, 227, + 36, 229, 137, 236, 191, 69, 16, 251, 51, 240, 211, 69, 16, 251, 51, 105, + 69, 16, 251, 51, 108, 69, 1, 251, 51, 216, 220, 69, 2, 219, 98, 229, 237, + 208, 161, 69, 2, 45, 228, 85, 208, 159, 69, 2, 45, 228, 85, 208, 156, 69, + 1, 212, 178, 219, 139, 246, 199, 69, 1, 212, 178, 219, 139, 213, 90, 45, + 205, 220, 1, 124, 229, 26, 45, 205, 220, 1, 138, 229, 26, 45, 205, 220, + 1, 124, 229, 115, 45, 205, 220, 1, 138, 229, 115, 45, 205, 220, 1, 124, + 229, 124, 45, 205, 220, 1, 138, 229, 124, 45, 205, 220, 1, 124, 238, 39, + 45, 205, 220, 1, 138, 238, 39, 45, 205, 220, 1, 124, 222, 128, 45, 205, + 220, 1, 138, 222, 128, 45, 205, 220, 1, 124, 245, 254, 45, 205, 220, 1, + 138, 245, 254, 45, 205, 220, 1, 124, 246, 116, 45, 205, 220, 1, 138, 246, + 116, 45, 205, 220, 1, 124, 212, 13, 45, 205, 220, 1, 138, 212, 13, 45, + 205, 220, 1, 124, 220, 233, 45, 205, 220, 1, 138, 220, 233, 45, 205, 220, + 1, 124, 243, 113, 45, 205, 220, 1, 138, 243, 113, 45, 205, 220, 1, 124, + 135, 45, 205, 220, 1, 138, 135, 45, 205, 220, 1, 124, 209, 47, 45, 205, + 220, 1, 138, 209, 47, 45, 205, 220, 1, 124, 221, 191, 45, 205, 220, 1, + 138, 221, 191, 45, 205, 220, 1, 124, 248, 23, 45, 205, 220, 1, 138, 248, + 23, 45, 205, 220, 1, 124, 218, 69, 45, 205, 220, 1, 138, 218, 69, 45, + 205, 220, 1, 124, 218, 180, 45, 205, 220, 1, 138, 218, 180, 45, 205, 220, + 1, 124, 239, 186, 45, 205, 220, 1, 138, 239, 186, 45, 205, 220, 1, 124, + 224, 82, 45, 205, 220, 1, 138, 224, 82, 45, 205, 220, 1, 124, 202, 247, + 45, 205, 220, 1, 138, 202, 247, 45, 205, 220, 1, 124, 215, 227, 45, 205, + 220, 1, 138, 215, 227, 45, 205, 220, 1, 124, 227, 49, 45, 205, 220, 1, + 138, 227, 49, 45, 205, 220, 1, 124, 205, 189, 45, 205, 220, 1, 138, 205, + 189, 45, 205, 220, 1, 124, 236, 136, 45, 205, 220, 1, 138, 236, 136, 45, + 205, 220, 1, 124, 78, 45, 205, 220, 1, 138, 78, 45, 205, 220, 225, 141, + 230, 0, 45, 205, 220, 22, 252, 25, 45, 205, 220, 22, 75, 45, 205, 220, + 22, 207, 24, 45, 205, 220, 22, 68, 45, 205, 220, 22, 74, 45, 205, 220, + 22, 78, 45, 205, 220, 225, 141, 229, 118, 45, 205, 220, 22, 235, 171, 45, + 205, 220, 22, 207, 23, 45, 205, 220, 22, 207, 39, 45, 205, 220, 22, 250, + 32, 45, 205, 220, 22, 250, 8, 45, 205, 220, 22, 250, 231, 45, 205, 220, + 22, 250, 247, 45, 205, 220, 143, 225, 141, 241, 129, 45, 205, 220, 143, + 225, 141, 221, 52, 45, 205, 220, 143, 225, 141, 209, 47, 45, 205, 220, + 143, 225, 141, 211, 252, 45, 205, 220, 16, 229, 9, 45, 205, 220, 16, 221, + 52, 45, 205, 220, 16, 214, 253, 45, 205, 220, 16, 236, 137, 236, 131, 45, + 205, 220, 16, 229, 19, 229, 18, 225, 2, 225, 61, 1, 74, 225, 2, 225, 61, + 1, 78, 225, 2, 225, 61, 1, 246, 199, 225, 2, 225, 61, 1, 221, 11, 225, 2, + 225, 61, 1, 207, 241, 225, 2, 225, 61, 1, 207, 229, 225, 2, 225, 61, 1, + 244, 120, 225, 2, 225, 61, 1, 244, 104, 225, 2, 225, 61, 1, 221, 227, + 225, 2, 225, 61, 1, 213, 90, 225, 2, 225, 61, 1, 211, 164, 225, 2, 225, + 61, 22, 2, 231, 83, 225, 2, 225, 61, 22, 2, 206, 178, 225, 2, 225, 61, + 22, 2, 251, 245, 225, 2, 225, 61, 22, 2, 250, 34, 225, 2, 225, 61, 22, 2, + 251, 238, 225, 2, 225, 61, 246, 159, 225, 2, 225, 61, 251, 70, 229, 107, + 225, 2, 225, 61, 250, 209, 225, 2, 225, 61, 4, 216, 98, 82, 225, 2, 225, + 61, 203, 238, 216, 98, 82, 225, 2, 225, 61, 22, 2, 205, 199, 225, 2, 225, + 61, 205, 204, 33, 4, 207, 222, 33, 4, 207, 225, 33, 4, 207, 228, 33, 4, + 207, 226, 33, 4, 207, 227, 33, 4, 207, 224, 33, 4, 244, 98, 33, 4, 244, + 100, 33, 4, 244, 103, 33, 4, 244, 101, 33, 4, 244, 102, 33, 4, 244, 99, + 33, 4, 241, 242, 33, 4, 241, 246, 33, 4, 241, 254, 33, 4, 241, 251, 33, + 4, 241, 252, 33, 4, 241, 243, 33, 4, 246, 252, 33, 4, 246, 246, 33, 4, + 246, 248, 33, 4, 246, 251, 33, 4, 246, 249, 33, 4, 246, 250, 33, 4, 246, + 247, 33, 4, 248, 198, 33, 4, 248, 177, 33, 4, 248, 189, 33, 4, 248, 197, + 33, 4, 248, 192, 33, 4, 248, 193, 33, 4, 248, 181, 8, 5, 1, 248, 225, + 251, 2, 8, 5, 1, 34, 216, 71, 8, 5, 1, 248, 39, 74, 8, 5, 1, 248, 225, + 74, 8, 5, 1, 188, 3, 239, 199, 8, 5, 1, 227, 187, 240, 174, 8, 5, 1, 132, + 239, 76, 3, 245, 126, 8, 5, 1, 228, 131, 3, 230, 239, 227, 241, 194, 8, + 5, 1, 228, 131, 3, 52, 101, 208, 227, 8, 5, 1, 228, 131, 3, 101, 215, + 252, 8, 5, 1, 226, 186, 3, 245, 126, 8, 5, 1, 223, 164, 3, 245, 126, 8, + 5, 1, 241, 79, 3, 245, 126, 8, 5, 1, 248, 39, 78, 8, 5, 1, 248, 39, 158, + 3, 95, 8, 5, 1, 171, 158, 3, 95, 8, 5, 1, 230, 239, 220, 73, 8, 5, 1, + 207, 174, 220, 74, 3, 95, 8, 5, 1, 207, 174, 220, 74, 3, 236, 106, 95, 8, + 5, 1, 207, 174, 158, 220, 4, 8, 5, 1, 207, 174, 158, 220, 5, 3, 95, 8, 5, + 1, 211, 66, 146, 8, 1, 5, 6, 217, 1, 3, 50, 227, 210, 8, 5, 1, 217, 1, + 204, 3, 237, 102, 8, 5, 1, 52, 146, 8, 5, 1, 217, 1, 3, 245, 126, 8, 5, + 1, 52, 217, 1, 3, 245, 126, 8, 5, 1, 132, 146, 8, 5, 1, 132, 217, 1, 3, + 215, 252, 8, 5, 1, 248, 216, 241, 7, 8, 5, 1, 106, 3, 212, 228, 50, 227, + 210, 8, 5, 1, 106, 248, 231, 3, 212, 228, 50, 227, 210, 8, 5, 1, 207, 17, + 8, 5, 1, 207, 174, 207, 17, 8, 5, 1, 106, 3, 49, 113, 8, 5, 1, 246, 142, + 8, 5, 1, 246, 143, 3, 124, 50, 215, 252, 8, 5, 1, 246, 143, 3, 124, 49, + 213, 125, 8, 5, 1, 203, 197, 3, 124, 50, 215, 252, 8, 5, 1, 203, 197, 3, + 163, 49, 227, 210, 8, 5, 1, 203, 197, 3, 163, 49, 227, 211, 25, 124, 50, + 215, 252, 8, 5, 1, 203, 197, 3, 163, 49, 227, 211, 3, 213, 125, 8, 5, 1, + 203, 125, 3, 212, 228, 50, 227, 210, 65, 247, 215, 3, 230, 239, 247, 214, + 65, 1, 5, 237, 31, 65, 1, 5, 228, 131, 3, 230, 239, 227, 241, 194, 65, 1, + 5, 228, 131, 3, 101, 208, 227, 65, 1, 5, 106, 3, 49, 113, 8, 5, 1, 215, + 11, 203, 66, 8, 5, 1, 230, 228, 74, 8, 5, 1, 171, 220, 73, 8, 5, 1, 206, + 228, 8, 5, 1, 230, 239, 251, 2, 30, 1, 5, 6, 220, 36, 90, 5, 1, 63, 90, + 5, 1, 74, 90, 5, 1, 75, 90, 5, 1, 78, 90, 5, 1, 68, 90, 5, 1, 206, 164, + 90, 5, 1, 239, 8, 90, 5, 1, 173, 90, 5, 1, 238, 190, 90, 5, 1, 238, 81, + 90, 5, 1, 238, 39, 90, 5, 1, 237, 230, 90, 5, 1, 237, 192, 90, 5, 1, 152, + 90, 5, 1, 237, 67, 90, 5, 1, 237, 3, 90, 5, 1, 236, 136, 90, 5, 1, 236, + 26, 90, 5, 1, 235, 255, 90, 5, 1, 228, 113, 90, 5, 1, 227, 234, 90, 5, 1, + 227, 148, 90, 5, 1, 227, 49, 90, 5, 1, 226, 239, 90, 5, 1, 226, 208, 90, + 5, 1, 192, 90, 5, 1, 225, 20, 90, 5, 1, 224, 155, 90, 5, 1, 224, 82, 90, + 5, 1, 223, 246, 90, 5, 1, 201, 201, 90, 5, 1, 236, 160, 90, 5, 1, 223, + 93, 90, 5, 1, 222, 240, 90, 5, 1, 222, 100, 90, 5, 1, 221, 191, 90, 5, 1, + 221, 84, 90, 5, 1, 221, 22, 90, 5, 1, 217, 64, 90, 5, 1, 217, 50, 90, 5, + 1, 217, 43, 90, 5, 1, 217, 34, 90, 5, 1, 217, 23, 90, 5, 1, 217, 21, 90, + 5, 1, 215, 36, 90, 5, 1, 194, 90, 5, 1, 214, 177, 90, 5, 1, 212, 162, 90, + 5, 1, 212, 13, 90, 5, 1, 211, 10, 90, 5, 1, 210, 177, 90, 5, 1, 244, 212, + 90, 5, 1, 210, 22, 90, 5, 1, 244, 75, 90, 5, 1, 209, 187, 90, 5, 1, 243, + 233, 90, 5, 1, 209, 2, 90, 5, 1, 243, 113, 90, 5, 1, 242, 42, 90, 5, 1, + 242, 13, 90, 5, 1, 243, 124, 90, 5, 1, 208, 190, 90, 5, 1, 208, 189, 90, + 5, 1, 208, 178, 90, 5, 1, 208, 177, 90, 5, 1, 208, 176, 90, 5, 1, 208, + 175, 90, 5, 1, 208, 20, 90, 5, 1, 208, 14, 90, 5, 1, 207, 255, 90, 5, 1, + 207, 253, 90, 5, 1, 207, 249, 90, 5, 1, 207, 248, 90, 5, 1, 204, 111, 90, + 5, 1, 204, 62, 90, 5, 1, 204, 30, 90, 5, 1, 204, 0, 90, 5, 1, 203, 217, + 90, 5, 1, 203, 204, 90, 5, 1, 198, 225, 2, 225, 61, 1, 229, 16, 225, 2, + 225, 61, 1, 214, 253, 225, 2, 225, 61, 1, 228, 86, 225, 2, 225, 61, 1, + 224, 93, 225, 2, 225, 61, 1, 185, 225, 2, 225, 61, 1, 201, 201, 225, 2, + 225, 61, 1, 246, 134, 225, 2, 225, 61, 1, 208, 229, 225, 2, 225, 61, 1, + 229, 110, 225, 2, 225, 61, 1, 222, 118, 225, 2, 225, 61, 1, 209, 39, 225, + 2, 225, 61, 1, 204, 105, 225, 2, 225, 61, 1, 203, 76, 225, 2, 225, 61, 1, + 236, 18, 225, 2, 225, 61, 1, 206, 255, 225, 2, 225, 61, 1, 75, 225, 2, + 225, 61, 1, 218, 202, 225, 2, 225, 61, 1, 250, 45, 225, 2, 225, 61, 1, + 238, 32, 225, 2, 225, 61, 1, 230, 147, 225, 2, 225, 61, 1, 216, 197, 225, + 2, 225, 61, 1, 249, 32, 225, 2, 225, 61, 1, 230, 133, 225, 2, 225, 61, 1, + 243, 190, 225, 2, 225, 61, 1, 238, 88, 225, 2, 225, 61, 1, 243, 235, 225, + 2, 225, 61, 1, 248, 96, 225, 2, 225, 61, 1, 229, 17, 227, 19, 225, 2, + 225, 61, 1, 228, 87, 227, 19, 225, 2, 225, 61, 1, 224, 94, 227, 19, 225, + 2, 225, 61, 1, 219, 169, 227, 19, 225, 2, 225, 61, 1, 223, 111, 227, 19, + 225, 2, 225, 61, 1, 208, 230, 227, 19, 225, 2, 225, 61, 1, 222, 119, 227, + 19, 225, 2, 225, 61, 1, 235, 206, 227, 19, 225, 2, 225, 61, 22, 2, 220, + 30, 225, 2, 225, 61, 22, 2, 231, 47, 225, 2, 225, 61, 22, 2, 250, 230, + 225, 2, 225, 61, 22, 2, 203, 41, 225, 2, 225, 61, 22, 2, 211, 242, 225, + 2, 225, 61, 22, 2, 206, 252, 225, 2, 225, 61, 22, 2, 246, 157, 225, 2, + 225, 61, 22, 2, 221, 37, 225, 2, 225, 61, 246, 158, 225, 2, 225, 61, 226, + 223, 230, 190, 225, 2, 225, 61, 250, 149, 230, 190, 225, 2, 225, 61, 17, + 202, 84, 225, 2, 225, 61, 17, 105, 225, 2, 225, 61, 17, 108, 225, 2, 225, + 61, 17, 147, 225, 2, 225, 61, 17, 149, 225, 2, 225, 61, 17, 170, 225, 2, + 225, 61, 17, 195, 225, 2, 225, 61, 17, 213, 111, 225, 2, 225, 61, 17, + 199, 225, 2, 225, 61, 17, 222, 63, 28, 176, 220, 174, 28, 176, 220, 179, + 28, 176, 202, 246, 28, 176, 202, 245, 28, 176, 202, 244, 28, 176, 207, + 89, 28, 176, 207, 93, 28, 176, 202, 211, 28, 176, 202, 207, 28, 176, 240, + 237, 28, 176, 240, 235, 28, 176, 240, 236, 28, 176, 240, 233, 28, 176, + 235, 196, 28, 176, 235, 195, 28, 176, 235, 193, 28, 176, 235, 194, 28, + 176, 235, 199, 28, 176, 235, 192, 28, 176, 235, 191, 28, 176, 235, 201, + 28, 176, 250, 136, 28, 176, 250, 135, 28, 107, 222, 86, 28, 107, 222, 92, + 28, 107, 211, 145, 28, 107, 211, 144, 28, 107, 208, 235, 28, 107, 208, + 233, 28, 107, 208, 232, 28, 107, 208, 238, 28, 107, 208, 239, 28, 107, + 208, 231, 28, 107, 216, 26, 28, 107, 216, 41, 28, 107, 211, 151, 28, 107, + 216, 38, 28, 107, 216, 28, 28, 107, 216, 30, 28, 107, 216, 17, 28, 107, + 216, 18, 28, 107, 229, 243, 28, 107, 224, 136, 28, 107, 224, 130, 28, + 107, 211, 155, 28, 107, 224, 133, 28, 107, 224, 139, 28, 107, 218, 134, + 28, 107, 218, 143, 28, 107, 218, 147, 28, 107, 211, 153, 28, 107, 218, + 137, 28, 107, 218, 151, 28, 107, 218, 152, 28, 107, 212, 103, 28, 107, + 212, 106, 28, 107, 211, 149, 28, 107, 211, 147, 28, 107, 212, 101, 28, + 107, 212, 109, 28, 107, 212, 110, 28, 107, 212, 95, 28, 107, 212, 108, + 28, 107, 219, 105, 28, 107, 219, 106, 28, 107, 203, 27, 28, 107, 203, 28, + 28, 107, 246, 72, 28, 107, 246, 71, 28, 107, 211, 160, 28, 107, 218, 187, + 28, 107, 218, 186, 12, 15, 233, 74, 12, 15, 233, 73, 12, 15, 233, 72, 12, + 15, 233, 71, 12, 15, 233, 70, 12, 15, 233, 69, 12, 15, 233, 68, 12, 15, + 233, 67, 12, 15, 233, 66, 12, 15, 233, 65, 12, 15, 233, 64, 12, 15, 233, + 63, 12, 15, 233, 62, 12, 15, 233, 61, 12, 15, 233, 60, 12, 15, 233, 59, + 12, 15, 233, 58, 12, 15, 233, 57, 12, 15, 233, 56, 12, 15, 233, 55, 12, + 15, 233, 54, 12, 15, 233, 53, 12, 15, 233, 52, 12, 15, 233, 51, 12, 15, + 233, 50, 12, 15, 233, 49, 12, 15, 233, 48, 12, 15, 233, 47, 12, 15, 233, + 46, 12, 15, 233, 45, 12, 15, 233, 44, 12, 15, 233, 43, 12, 15, 233, 42, + 12, 15, 233, 41, 12, 15, 233, 40, 12, 15, 233, 39, 12, 15, 233, 38, 12, + 15, 233, 37, 12, 15, 233, 36, 12, 15, 233, 35, 12, 15, 233, 34, 12, 15, + 233, 33, 12, 15, 233, 32, 12, 15, 233, 31, 12, 15, 233, 30, 12, 15, 233, + 29, 12, 15, 233, 28, 12, 15, 233, 27, 12, 15, 233, 26, 12, 15, 233, 25, + 12, 15, 233, 24, 12, 15, 233, 23, 12, 15, 233, 22, 12, 15, 233, 21, 12, + 15, 233, 20, 12, 15, 233, 19, 12, 15, 233, 18, 12, 15, 233, 17, 12, 15, + 233, 16, 12, 15, 233, 15, 12, 15, 233, 14, 12, 15, 233, 13, 12, 15, 233, + 12, 12, 15, 233, 11, 12, 15, 233, 10, 12, 15, 233, 9, 12, 15, 233, 8, 12, + 15, 233, 7, 12, 15, 233, 6, 12, 15, 233, 5, 12, 15, 233, 4, 12, 15, 233, + 3, 12, 15, 233, 2, 12, 15, 233, 1, 12, 15, 233, 0, 12, 15, 232, 255, 12, + 15, 232, 254, 12, 15, 232, 253, 12, 15, 232, 252, 12, 15, 232, 251, 12, + 15, 232, 250, 12, 15, 232, 249, 12, 15, 232, 248, 12, 15, 232, 247, 12, + 15, 232, 246, 12, 15, 232, 245, 12, 15, 232, 244, 12, 15, 232, 243, 12, + 15, 232, 242, 12, 15, 232, 241, 12, 15, 232, 240, 12, 15, 232, 239, 12, + 15, 232, 238, 12, 15, 232, 237, 12, 15, 232, 236, 12, 15, 232, 235, 12, + 15, 232, 234, 12, 15, 232, 233, 12, 15, 232, 232, 12, 15, 232, 231, 12, + 15, 232, 230, 12, 15, 232, 229, 12, 15, 232, 228, 12, 15, 232, 227, 12, + 15, 232, 226, 12, 15, 232, 225, 12, 15, 232, 224, 12, 15, 232, 223, 12, + 15, 232, 222, 12, 15, 232, 221, 12, 15, 232, 220, 12, 15, 232, 219, 12, + 15, 232, 218, 12, 15, 232, 217, 12, 15, 232, 216, 12, 15, 232, 215, 12, + 15, 232, 214, 12, 15, 232, 213, 12, 15, 232, 212, 12, 15, 232, 211, 12, + 15, 232, 210, 12, 15, 232, 209, 12, 15, 232, 208, 12, 15, 232, 207, 12, + 15, 232, 206, 12, 15, 232, 205, 12, 15, 232, 204, 12, 15, 232, 203, 12, + 15, 232, 202, 12, 15, 232, 201, 12, 15, 232, 200, 12, 15, 232, 199, 12, + 15, 232, 198, 12, 15, 232, 197, 12, 15, 232, 196, 12, 15, 232, 195, 12, + 15, 232, 194, 12, 15, 232, 193, 12, 15, 232, 192, 12, 15, 232, 191, 12, + 15, 232, 190, 12, 15, 232, 189, 12, 15, 232, 188, 12, 15, 232, 187, 12, + 15, 232, 186, 12, 15, 232, 185, 12, 15, 232, 184, 12, 15, 232, 183, 12, + 15, 232, 182, 12, 15, 232, 181, 12, 15, 232, 180, 12, 15, 232, 179, 12, + 15, 232, 178, 12, 15, 232, 177, 12, 15, 232, 176, 12, 15, 232, 175, 12, + 15, 232, 174, 12, 15, 232, 173, 12, 15, 232, 172, 12, 15, 232, 171, 12, + 15, 232, 170, 12, 15, 232, 169, 12, 15, 232, 168, 12, 15, 232, 167, 12, + 15, 232, 166, 12, 15, 232, 165, 12, 15, 232, 164, 12, 15, 232, 163, 12, + 15, 232, 162, 12, 15, 232, 161, 12, 15, 232, 160, 12, 15, 232, 159, 12, + 15, 232, 158, 12, 15, 232, 157, 12, 15, 232, 156, 12, 15, 232, 155, 12, + 15, 232, 154, 12, 15, 232, 153, 12, 15, 232, 152, 12, 15, 232, 151, 12, + 15, 232, 150, 12, 15, 232, 149, 12, 15, 232, 148, 12, 15, 232, 147, 12, + 15, 232, 146, 12, 15, 232, 145, 12, 15, 232, 144, 12, 15, 232, 143, 12, + 15, 232, 142, 12, 15, 232, 141, 12, 15, 232, 140, 12, 15, 232, 139, 12, + 15, 232, 138, 12, 15, 232, 137, 12, 15, 232, 136, 12, 15, 232, 135, 12, + 15, 232, 134, 12, 15, 232, 133, 12, 15, 232, 132, 12, 15, 232, 131, 12, + 15, 232, 130, 12, 15, 232, 129, 12, 15, 232, 128, 12, 15, 232, 127, 12, + 15, 232, 126, 12, 15, 232, 125, 12, 15, 232, 124, 12, 15, 232, 123, 12, + 15, 232, 122, 12, 15, 232, 121, 12, 15, 232, 120, 12, 15, 232, 119, 12, + 15, 232, 118, 12, 15, 232, 117, 12, 15, 232, 116, 12, 15, 232, 115, 12, + 15, 232, 114, 12, 15, 232, 113, 12, 15, 232, 112, 12, 15, 232, 111, 12, + 15, 232, 110, 12, 15, 232, 109, 12, 15, 232, 108, 12, 15, 232, 107, 12, + 15, 232, 106, 12, 15, 232, 105, 12, 15, 232, 104, 12, 15, 232, 103, 12, + 15, 232, 102, 12, 15, 232, 101, 12, 15, 232, 100, 12, 15, 232, 99, 12, + 15, 232, 98, 12, 15, 232, 97, 12, 15, 232, 96, 12, 15, 232, 95, 12, 15, + 232, 94, 12, 15, 232, 93, 12, 15, 232, 92, 12, 15, 232, 91, 12, 15, 232, + 90, 12, 15, 232, 89, 12, 15, 232, 88, 12, 15, 232, 87, 12, 15, 232, 86, + 12, 15, 232, 85, 12, 15, 232, 84, 12, 15, 232, 83, 12, 15, 232, 82, 12, + 15, 232, 81, 12, 15, 232, 80, 12, 15, 232, 79, 12, 15, 232, 78, 12, 15, + 232, 77, 12, 15, 232, 76, 12, 15, 232, 75, 12, 15, 232, 74, 12, 15, 232, + 73, 12, 15, 232, 72, 12, 15, 232, 71, 12, 15, 232, 70, 12, 15, 232, 69, + 12, 15, 232, 68, 12, 15, 232, 67, 12, 15, 232, 66, 12, 15, 232, 65, 12, + 15, 232, 64, 12, 15, 232, 63, 12, 15, 232, 62, 12, 15, 232, 61, 12, 15, + 232, 60, 12, 15, 232, 59, 12, 15, 232, 58, 12, 15, 232, 57, 12, 15, 232, + 56, 12, 15, 232, 55, 12, 15, 232, 54, 12, 15, 232, 53, 12, 15, 232, 52, + 12, 15, 232, 51, 12, 15, 232, 50, 12, 15, 232, 49, 12, 15, 232, 48, 12, + 15, 232, 47, 12, 15, 232, 46, 12, 15, 232, 45, 12, 15, 232, 44, 12, 15, + 232, 43, 12, 15, 232, 42, 12, 15, 232, 41, 12, 15, 232, 40, 12, 15, 232, + 39, 12, 15, 232, 38, 12, 15, 232, 37, 12, 15, 232, 36, 12, 15, 232, 35, + 12, 15, 232, 34, 12, 15, 232, 33, 12, 15, 232, 32, 12, 15, 232, 31, 12, + 15, 232, 30, 12, 15, 232, 29, 12, 15, 232, 28, 12, 15, 232, 27, 12, 15, + 232, 26, 12, 15, 232, 25, 12, 15, 232, 24, 12, 15, 232, 23, 12, 15, 232, + 22, 12, 15, 232, 21, 12, 15, 232, 20, 12, 15, 232, 19, 12, 15, 232, 18, + 12, 15, 232, 17, 12, 15, 232, 16, 12, 15, 232, 15, 12, 15, 232, 14, 12, + 15, 232, 13, 12, 15, 232, 12, 12, 15, 232, 11, 12, 15, 232, 10, 12, 15, + 232, 9, 12, 15, 232, 8, 12, 15, 232, 7, 12, 15, 232, 6, 12, 15, 232, 5, + 12, 15, 232, 4, 12, 15, 232, 3, 12, 15, 232, 2, 12, 15, 232, 1, 12, 15, + 232, 0, 12, 15, 231, 255, 12, 15, 231, 254, 12, 15, 231, 253, 12, 15, + 231, 252, 12, 15, 231, 251, 12, 15, 231, 250, 12, 15, 231, 249, 12, 15, + 231, 248, 12, 15, 231, 247, 12, 15, 231, 246, 12, 15, 231, 245, 12, 15, + 231, 244, 12, 15, 231, 243, 12, 15, 231, 242, 12, 15, 231, 241, 12, 15, + 231, 240, 12, 15, 231, 239, 12, 15, 231, 238, 12, 15, 231, 237, 12, 15, + 231, 236, 12, 15, 231, 235, 12, 15, 231, 234, 12, 15, 231, 233, 12, 15, + 231, 232, 12, 15, 231, 231, 12, 15, 231, 230, 12, 15, 231, 229, 12, 15, + 231, 228, 12, 15, 231, 227, 12, 15, 231, 226, 12, 15, 231, 225, 12, 15, + 231, 224, 12, 15, 231, 223, 12, 15, 231, 222, 12, 15, 231, 221, 12, 15, + 231, 220, 12, 15, 231, 219, 12, 15, 231, 218, 12, 15, 231, 217, 12, 15, + 231, 216, 12, 15, 231, 215, 12, 15, 231, 214, 12, 15, 231, 213, 12, 15, + 231, 212, 12, 15, 231, 211, 12, 15, 231, 210, 12, 15, 231, 209, 12, 15, + 231, 208, 12, 15, 231, 207, 12, 15, 231, 206, 12, 15, 231, 205, 12, 15, + 231, 204, 12, 15, 231, 203, 12, 15, 231, 202, 12, 15, 231, 201, 12, 15, + 231, 200, 12, 15, 231, 199, 12, 15, 231, 198, 12, 15, 231, 197, 12, 15, + 231, 196, 12, 15, 231, 195, 12, 15, 231, 194, 12, 15, 231, 193, 12, 15, + 231, 192, 12, 15, 231, 191, 12, 15, 231, 190, 12, 15, 231, 189, 12, 15, + 231, 188, 12, 15, 231, 187, 12, 15, 231, 186, 12, 15, 231, 185, 12, 15, + 231, 184, 12, 15, 231, 183, 12, 15, 231, 182, 12, 15, 231, 181, 12, 15, + 231, 180, 12, 15, 231, 179, 12, 15, 231, 178, 12, 15, 231, 177, 12, 15, + 231, 176, 12, 15, 231, 175, 12, 15, 231, 174, 12, 15, 231, 173, 12, 15, + 231, 172, 12, 15, 231, 171, 12, 15, 231, 170, 12, 15, 231, 169, 12, 15, + 231, 168, 12, 15, 231, 167, 12, 15, 231, 166, 12, 15, 231, 165, 12, 15, + 231, 164, 12, 15, 231, 163, 12, 15, 231, 162, 12, 15, 231, 161, 12, 15, + 231, 160, 12, 15, 231, 159, 12, 15, 231, 158, 12, 15, 231, 157, 12, 15, + 231, 156, 12, 15, 231, 155, 12, 15, 231, 154, 12, 15, 231, 153, 12, 15, + 231, 152, 12, 15, 231, 151, 12, 15, 231, 150, 12, 15, 231, 149, 12, 15, + 231, 148, 12, 15, 231, 147, 12, 15, 231, 146, 12, 15, 231, 145, 12, 15, + 231, 144, 12, 15, 231, 143, 12, 15, 231, 142, 12, 15, 231, 141, 12, 15, + 231, 140, 12, 15, 231, 139, 12, 15, 231, 138, 12, 15, 231, 137, 12, 15, + 231, 136, 12, 15, 231, 135, 12, 15, 231, 134, 12, 15, 231, 133, 12, 15, + 231, 132, 12, 15, 231, 131, 12, 15, 231, 130, 12, 15, 231, 129, 12, 15, + 231, 128, 12, 15, 231, 127, 12, 15, 231, 126, 12, 15, 231, 125, 12, 15, + 231, 124, 12, 15, 231, 123, 12, 15, 231, 122, 12, 15, 231, 121, 12, 15, + 231, 120, 12, 15, 231, 119, 12, 15, 231, 118, 12, 15, 231, 117, 12, 15, + 231, 116, 12, 15, 231, 115, 8, 5, 32, 240, 30, 8, 5, 32, 240, 26, 8, 5, + 32, 239, 228, 8, 5, 32, 240, 29, 8, 5, 32, 240, 28, 8, 5, 32, 163, 215, + 94, 210, 69, 8, 5, 32, 211, 108, 178, 5, 32, 224, 241, 221, 152, 178, 5, + 32, 224, 241, 241, 167, 178, 5, 32, 224, 241, 231, 19, 178, 5, 32, 205, + 235, 221, 152, 178, 5, 32, 224, 241, 203, 174, 110, 1, 202, 237, 3, 236, + 232, 110, 218, 63, 230, 81, 206, 67, 110, 32, 203, 9, 202, 237, 202, 237, + 219, 54, 110, 1, 250, 250, 250, 3, 110, 1, 204, 27, 251, 30, 110, 1, 204, + 27, 244, 178, 110, 1, 204, 27, 237, 67, 110, 1, 204, 27, 230, 22, 110, 1, + 204, 27, 228, 20, 110, 1, 204, 27, 46, 224, 247, 110, 1, 204, 27, 216, + 91, 110, 1, 204, 27, 209, 203, 110, 1, 250, 250, 91, 54, 110, 1, 213, 0, + 3, 213, 0, 243, 85, 110, 1, 213, 0, 3, 212, 124, 243, 85, 110, 1, 213, 0, + 3, 244, 198, 25, 213, 0, 243, 85, 110, 1, 213, 0, 3, 244, 198, 25, 212, + 124, 243, 85, 110, 1, 137, 3, 219, 54, 110, 1, 137, 3, 217, 114, 110, 1, + 137, 3, 225, 105, 110, 1, 248, 109, 3, 244, 197, 110, 1, 238, 68, 3, 244, + 197, 110, 1, 244, 179, 3, 244, 197, 110, 1, 237, 68, 3, 225, 105, 110, 1, + 206, 60, 3, 244, 197, 110, 1, 202, 96, 3, 244, 197, 110, 1, 209, 133, 3, + 244, 197, 110, 1, 202, 237, 3, 244, 197, 110, 1, 46, 230, 23, 3, 244, + 197, 110, 1, 230, 23, 3, 244, 197, 110, 1, 228, 21, 3, 244, 197, 110, 1, + 224, 248, 3, 244, 197, 110, 1, 221, 41, 3, 244, 197, 110, 1, 214, 250, 3, + 244, 197, 110, 1, 46, 219, 35, 3, 244, 197, 110, 1, 219, 35, 3, 244, 197, + 110, 1, 208, 16, 3, 244, 197, 110, 1, 217, 75, 3, 244, 197, 110, 1, 216, + 92, 3, 244, 197, 110, 1, 213, 0, 3, 244, 197, 110, 1, 209, 204, 3, 244, + 197, 110, 1, 206, 60, 3, 236, 128, 110, 1, 248, 109, 3, 216, 200, 110, 1, + 230, 23, 3, 216, 200, 110, 1, 219, 35, 3, 216, 200, 110, 32, 137, 228, + 20, 10, 1, 137, 204, 88, 64, 18, 10, 1, 137, 204, 88, 46, 18, 10, 1, 248, + 149, 64, 18, 10, 1, 248, 149, 46, 18, 10, 1, 248, 149, 81, 18, 10, 1, + 248, 149, 174, 18, 10, 1, 219, 17, 64, 18, 10, 1, 219, 17, 46, 18, 10, 1, + 219, 17, 81, 18, 10, 1, 219, 17, 174, 18, 10, 1, 248, 137, 64, 18, 10, 1, + 248, 137, 46, 18, 10, 1, 248, 137, 81, 18, 10, 1, 248, 137, 174, 18, 10, + 1, 207, 232, 64, 18, 10, 1, 207, 232, 46, 18, 10, 1, 207, 232, 81, 18, + 10, 1, 207, 232, 174, 18, 10, 1, 209, 168, 64, 18, 10, 1, 209, 168, 46, + 18, 10, 1, 209, 168, 81, 18, 10, 1, 209, 168, 174, 18, 10, 1, 207, 234, + 64, 18, 10, 1, 207, 234, 46, 18, 10, 1, 207, 234, 81, 18, 10, 1, 207, + 234, 174, 18, 10, 1, 206, 49, 64, 18, 10, 1, 206, 49, 46, 18, 10, 1, 206, + 49, 81, 18, 10, 1, 206, 49, 174, 18, 10, 1, 219, 15, 64, 18, 10, 1, 219, + 15, 46, 18, 10, 1, 219, 15, 81, 18, 10, 1, 219, 15, 174, 18, 10, 1, 242, + 6, 64, 18, 10, 1, 242, 6, 46, 18, 10, 1, 242, 6, 81, 18, 10, 1, 242, 6, + 174, 18, 10, 1, 220, 255, 64, 18, 10, 1, 220, 255, 46, 18, 10, 1, 220, + 255, 81, 18, 10, 1, 220, 255, 174, 18, 10, 1, 209, 192, 64, 18, 10, 1, + 209, 192, 46, 18, 10, 1, 209, 192, 81, 18, 10, 1, 209, 192, 174, 18, 10, + 1, 209, 190, 64, 18, 10, 1, 209, 190, 46, 18, 10, 1, 209, 190, 81, 18, + 10, 1, 209, 190, 174, 18, 10, 1, 244, 118, 64, 18, 10, 1, 244, 118, 46, + 18, 10, 1, 244, 192, 64, 18, 10, 1, 244, 192, 46, 18, 10, 1, 242, 34, 64, + 18, 10, 1, 242, 34, 46, 18, 10, 1, 244, 116, 64, 18, 10, 1, 244, 116, 46, + 18, 10, 1, 230, 156, 64, 18, 10, 1, 230, 156, 46, 18, 10, 1, 215, 178, + 64, 18, 10, 1, 215, 178, 46, 18, 10, 1, 229, 190, 64, 18, 10, 1, 229, + 190, 46, 18, 10, 1, 229, 190, 81, 18, 10, 1, 229, 190, 174, 18, 10, 1, + 238, 252, 64, 18, 10, 1, 238, 252, 46, 18, 10, 1, 238, 252, 81, 18, 10, + 1, 238, 252, 174, 18, 10, 1, 237, 218, 64, 18, 10, 1, 237, 218, 46, 18, + 10, 1, 237, 218, 81, 18, 10, 1, 237, 218, 174, 18, 10, 1, 222, 127, 64, + 18, 10, 1, 222, 127, 46, 18, 10, 1, 222, 127, 81, 18, 10, 1, 222, 127, + 174, 18, 10, 1, 221, 179, 238, 86, 64, 18, 10, 1, 221, 179, 238, 86, 46, + 18, 10, 1, 215, 231, 64, 18, 10, 1, 215, 231, 46, 18, 10, 1, 215, 231, + 81, 18, 10, 1, 215, 231, 174, 18, 10, 1, 237, 44, 3, 89, 87, 64, 18, 10, + 1, 237, 44, 3, 89, 87, 46, 18, 10, 1, 237, 44, 238, 37, 64, 18, 10, 1, + 237, 44, 238, 37, 46, 18, 10, 1, 237, 44, 238, 37, 81, 18, 10, 1, 237, + 44, 238, 37, 174, 18, 10, 1, 237, 44, 243, 110, 64, 18, 10, 1, 237, 44, + 243, 110, 46, 18, 10, 1, 237, 44, 243, 110, 81, 18, 10, 1, 237, 44, 243, + 110, 174, 18, 10, 1, 89, 248, 224, 64, 18, 10, 1, 89, 248, 224, 46, 18, + 10, 1, 89, 248, 224, 3, 237, 128, 87, 64, 18, 10, 1, 89, 248, 224, 3, + 237, 128, 87, 46, 18, 10, 16, 70, 55, 10, 16, 70, 56, 10, 16, 120, 187, + 55, 10, 16, 120, 187, 56, 10, 16, 126, 187, 55, 10, 16, 126, 187, 56, 10, + 16, 126, 187, 218, 59, 183, 55, 10, 16, 126, 187, 218, 59, 183, 56, 10, + 16, 239, 147, 187, 55, 10, 16, 239, 147, 187, 56, 10, 16, 52, 80, 248, + 231, 56, 10, 16, 120, 187, 205, 244, 55, 10, 16, 120, 187, 205, 244, 56, + 10, 16, 215, 252, 10, 16, 5, 209, 252, 55, 10, 16, 5, 209, 252, 56, 10, + 1, 222, 206, 64, 18, 10, 1, 222, 206, 46, 18, 10, 1, 222, 206, 81, 18, + 10, 1, 222, 206, 174, 18, 10, 1, 106, 64, 18, 10, 1, 106, 46, 18, 10, 1, + 220, 74, 64, 18, 10, 1, 220, 74, 46, 18, 10, 1, 202, 214, 64, 18, 10, 1, + 202, 214, 46, 18, 10, 1, 106, 3, 237, 128, 87, 64, 18, 10, 1, 206, 56, + 64, 18, 10, 1, 206, 56, 46, 18, 10, 1, 229, 76, 220, 74, 64, 18, 10, 1, + 229, 76, 220, 74, 46, 18, 10, 1, 229, 76, 202, 214, 64, 18, 10, 1, 229, + 76, 202, 214, 46, 18, 10, 1, 188, 64, 18, 10, 1, 188, 46, 18, 10, 1, 188, + 81, 18, 10, 1, 188, 174, 18, 10, 1, 207, 16, 229, 205, 229, 76, 137, 225, + 130, 81, 18, 10, 1, 207, 16, 229, 205, 229, 76, 137, 225, 130, 174, 18, + 10, 32, 89, 3, 237, 128, 87, 3, 137, 64, 18, 10, 32, 89, 3, 237, 128, 87, + 3, 137, 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, 251, 110, 64, 18, 10, 32, + 89, 3, 237, 128, 87, 3, 251, 110, 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, + 204, 71, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 204, 71, 46, 18, 10, 32, + 89, 3, 237, 128, 87, 3, 106, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 106, + 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, 220, 74, 64, 18, 10, 32, 89, 3, + 237, 128, 87, 3, 220, 74, 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, 202, + 214, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 202, 214, 46, 18, 10, 32, + 89, 3, 237, 128, 87, 3, 188, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 188, + 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, 188, 81, 18, 10, 32, 207, 16, + 229, 76, 89, 3, 237, 128, 87, 3, 137, 225, 130, 64, 18, 10, 32, 207, 16, + 229, 76, 89, 3, 237, 128, 87, 3, 137, 225, 130, 46, 18, 10, 32, 207, 16, + 229, 76, 89, 3, 237, 128, 87, 3, 137, 225, 130, 81, 18, 10, 1, 240, 75, + 89, 64, 18, 10, 1, 240, 75, 89, 46, 18, 10, 1, 240, 75, 89, 81, 18, 10, + 1, 240, 75, 89, 174, 18, 10, 32, 89, 3, 237, 128, 87, 3, 184, 64, 18, 10, + 32, 89, 3, 237, 128, 87, 3, 151, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, + 83, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 137, 225, 130, 64, 18, 10, + 32, 89, 3, 237, 128, 87, 3, 89, 64, 18, 10, 32, 248, 139, 3, 184, 64, 18, + 10, 32, 248, 139, 3, 151, 64, 18, 10, 32, 248, 139, 3, 229, 141, 64, 18, + 10, 32, 248, 139, 3, 83, 64, 18, 10, 32, 248, 139, 3, 137, 225, 130, 64, + 18, 10, 32, 248, 139, 3, 89, 64, 18, 10, 32, 209, 170, 3, 184, 64, 18, + 10, 32, 209, 170, 3, 151, 64, 18, 10, 32, 209, 170, 3, 229, 141, 64, 18, + 10, 32, 209, 170, 3, 83, 64, 18, 10, 32, 209, 170, 3, 137, 225, 130, 64, + 18, 10, 32, 209, 170, 3, 89, 64, 18, 10, 32, 209, 89, 3, 184, 64, 18, 10, + 32, 209, 89, 3, 83, 64, 18, 10, 32, 209, 89, 3, 137, 225, 130, 64, 18, + 10, 32, 209, 89, 3, 89, 64, 18, 10, 32, 184, 3, 151, 64, 18, 10, 32, 184, + 3, 83, 64, 18, 10, 32, 151, 3, 184, 64, 18, 10, 32, 151, 3, 83, 64, 18, + 10, 32, 229, 141, 3, 184, 64, 18, 10, 32, 229, 141, 3, 151, 64, 18, 10, + 32, 229, 141, 3, 83, 64, 18, 10, 32, 214, 162, 3, 184, 64, 18, 10, 32, + 214, 162, 3, 151, 64, 18, 10, 32, 214, 162, 3, 229, 141, 64, 18, 10, 32, + 214, 162, 3, 83, 64, 18, 10, 32, 215, 29, 3, 151, 64, 18, 10, 32, 215, + 29, 3, 83, 64, 18, 10, 32, 244, 208, 3, 184, 64, 18, 10, 32, 244, 208, 3, + 151, 64, 18, 10, 32, 244, 208, 3, 229, 141, 64, 18, 10, 32, 244, 208, 3, + 83, 64, 18, 10, 32, 209, 252, 3, 151, 64, 18, 10, 32, 209, 252, 3, 83, + 64, 18, 10, 32, 202, 111, 3, 83, 64, 18, 10, 32, 251, 60, 3, 184, 64, 18, + 10, 32, 251, 60, 3, 83, 64, 18, 10, 32, 238, 115, 3, 184, 64, 18, 10, 32, + 238, 115, 3, 83, 64, 18, 10, 32, 240, 48, 3, 184, 64, 18, 10, 32, 240, + 48, 3, 151, 64, 18, 10, 32, 240, 48, 3, 229, 141, 64, 18, 10, 32, 240, + 48, 3, 83, 64, 18, 10, 32, 240, 48, 3, 137, 225, 130, 64, 18, 10, 32, + 240, 48, 3, 89, 64, 18, 10, 32, 217, 120, 3, 151, 64, 18, 10, 32, 217, + 120, 3, 83, 64, 18, 10, 32, 217, 120, 3, 137, 225, 130, 64, 18, 10, 32, + 217, 120, 3, 89, 64, 18, 10, 32, 230, 23, 3, 137, 64, 18, 10, 32, 230, + 23, 3, 184, 64, 18, 10, 32, 230, 23, 3, 151, 64, 18, 10, 32, 230, 23, 3, + 229, 141, 64, 18, 10, 32, 230, 23, 3, 228, 29, 64, 18, 10, 32, 230, 23, + 3, 83, 64, 18, 10, 32, 230, 23, 3, 137, 225, 130, 64, 18, 10, 32, 230, + 23, 3, 89, 64, 18, 10, 32, 228, 29, 3, 184, 64, 18, 10, 32, 228, 29, 3, + 151, 64, 18, 10, 32, 228, 29, 3, 229, 141, 64, 18, 10, 32, 228, 29, 3, + 83, 64, 18, 10, 32, 228, 29, 3, 137, 225, 130, 64, 18, 10, 32, 228, 29, + 3, 89, 64, 18, 10, 32, 83, 3, 184, 64, 18, 10, 32, 83, 3, 151, 64, 18, + 10, 32, 83, 3, 229, 141, 64, 18, 10, 32, 83, 3, 83, 64, 18, 10, 32, 83, + 3, 137, 225, 130, 64, 18, 10, 32, 83, 3, 89, 64, 18, 10, 32, 221, 179, 3, + 184, 64, 18, 10, 32, 221, 179, 3, 151, 64, 18, 10, 32, 221, 179, 3, 229, + 141, 64, 18, 10, 32, 221, 179, 3, 83, 64, 18, 10, 32, 221, 179, 3, 137, + 225, 130, 64, 18, 10, 32, 221, 179, 3, 89, 64, 18, 10, 32, 237, 44, 3, + 184, 64, 18, 10, 32, 237, 44, 3, 83, 64, 18, 10, 32, 237, 44, 3, 137, + 225, 130, 64, 18, 10, 32, 237, 44, 3, 89, 64, 18, 10, 32, 89, 3, 184, 64, + 18, 10, 32, 89, 3, 151, 64, 18, 10, 32, 89, 3, 229, 141, 64, 18, 10, 32, + 89, 3, 83, 64, 18, 10, 32, 89, 3, 137, 225, 130, 64, 18, 10, 32, 89, 3, + 89, 64, 18, 10, 32, 209, 101, 3, 210, 199, 137, 64, 18, 10, 32, 216, 123, + 3, 210, 199, 137, 64, 18, 10, 32, 137, 225, 130, 3, 210, 199, 137, 64, + 18, 10, 32, 213, 81, 3, 244, 171, 64, 18, 10, 32, 213, 81, 3, 229, 228, + 64, 18, 10, 32, 213, 81, 3, 240, 72, 64, 18, 10, 32, 213, 81, 3, 244, + 173, 64, 18, 10, 32, 213, 81, 3, 229, 230, 64, 18, 10, 32, 213, 81, 3, + 210, 199, 137, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 216, 123, 46, 18, + 10, 32, 89, 3, 237, 128, 87, 3, 202, 108, 46, 18, 10, 32, 89, 3, 237, + 128, 87, 3, 83, 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, 221, 179, 46, 18, + 10, 32, 89, 3, 237, 128, 87, 3, 137, 225, 130, 46, 18, 10, 32, 89, 3, + 237, 128, 87, 3, 89, 46, 18, 10, 32, 248, 139, 3, 216, 123, 46, 18, 10, + 32, 248, 139, 3, 202, 108, 46, 18, 10, 32, 248, 139, 3, 83, 46, 18, 10, + 32, 248, 139, 3, 221, 179, 46, 18, 10, 32, 248, 139, 3, 137, 225, 130, + 46, 18, 10, 32, 248, 139, 3, 89, 46, 18, 10, 32, 209, 170, 3, 216, 123, + 46, 18, 10, 32, 209, 170, 3, 202, 108, 46, 18, 10, 32, 209, 170, 3, 83, + 46, 18, 10, 32, 209, 170, 3, 221, 179, 46, 18, 10, 32, 209, 170, 3, 137, + 225, 130, 46, 18, 10, 32, 209, 170, 3, 89, 46, 18, 10, 32, 209, 89, 3, + 216, 123, 46, 18, 10, 32, 209, 89, 3, 202, 108, 46, 18, 10, 32, 209, 89, + 3, 83, 46, 18, 10, 32, 209, 89, 3, 221, 179, 46, 18, 10, 32, 209, 89, 3, + 137, 225, 130, 46, 18, 10, 32, 209, 89, 3, 89, 46, 18, 10, 32, 240, 48, + 3, 137, 225, 130, 46, 18, 10, 32, 240, 48, 3, 89, 46, 18, 10, 32, 217, + 120, 3, 137, 225, 130, 46, 18, 10, 32, 217, 120, 3, 89, 46, 18, 10, 32, + 230, 23, 3, 137, 46, 18, 10, 32, 230, 23, 3, 228, 29, 46, 18, 10, 32, + 230, 23, 3, 83, 46, 18, 10, 32, 230, 23, 3, 137, 225, 130, 46, 18, 10, + 32, 230, 23, 3, 89, 46, 18, 10, 32, 228, 29, 3, 83, 46, 18, 10, 32, 228, + 29, 3, 137, 225, 130, 46, 18, 10, 32, 228, 29, 3, 89, 46, 18, 10, 32, 83, + 3, 137, 46, 18, 10, 32, 83, 3, 83, 46, 18, 10, 32, 221, 179, 3, 216, 123, + 46, 18, 10, 32, 221, 179, 3, 202, 108, 46, 18, 10, 32, 221, 179, 3, 83, + 46, 18, 10, 32, 221, 179, 3, 221, 179, 46, 18, 10, 32, 221, 179, 3, 137, + 225, 130, 46, 18, 10, 32, 221, 179, 3, 89, 46, 18, 10, 32, 137, 225, 130, + 3, 210, 199, 137, 46, 18, 10, 32, 89, 3, 216, 123, 46, 18, 10, 32, 89, 3, + 202, 108, 46, 18, 10, 32, 89, 3, 83, 46, 18, 10, 32, 89, 3, 221, 179, 46, + 18, 10, 32, 89, 3, 137, 225, 130, 46, 18, 10, 32, 89, 3, 89, 46, 18, 10, + 32, 89, 3, 237, 128, 87, 3, 184, 81, 18, 10, 32, 89, 3, 237, 128, 87, 3, + 151, 81, 18, 10, 32, 89, 3, 237, 128, 87, 3, 229, 141, 81, 18, 10, 32, + 89, 3, 237, 128, 87, 3, 83, 81, 18, 10, 32, 89, 3, 237, 128, 87, 3, 237, + 44, 81, 18, 10, 32, 248, 139, 3, 184, 81, 18, 10, 32, 248, 139, 3, 151, + 81, 18, 10, 32, 248, 139, 3, 229, 141, 81, 18, 10, 32, 248, 139, 3, 83, + 81, 18, 10, 32, 248, 139, 3, 237, 44, 81, 18, 10, 32, 209, 170, 3, 184, + 81, 18, 10, 32, 209, 170, 3, 151, 81, 18, 10, 32, 209, 170, 3, 229, 141, + 81, 18, 10, 32, 209, 170, 3, 83, 81, 18, 10, 32, 209, 170, 3, 237, 44, + 81, 18, 10, 32, 209, 89, 3, 83, 81, 18, 10, 32, 184, 3, 151, 81, 18, 10, + 32, 184, 3, 83, 81, 18, 10, 32, 151, 3, 184, 81, 18, 10, 32, 151, 3, 83, + 81, 18, 10, 32, 229, 141, 3, 184, 81, 18, 10, 32, 229, 141, 3, 83, 81, + 18, 10, 32, 214, 162, 3, 184, 81, 18, 10, 32, 214, 162, 3, 151, 81, 18, + 10, 32, 214, 162, 3, 229, 141, 81, 18, 10, 32, 214, 162, 3, 83, 81, 18, + 10, 32, 215, 29, 3, 151, 81, 18, 10, 32, 215, 29, 3, 229, 141, 81, 18, + 10, 32, 215, 29, 3, 83, 81, 18, 10, 32, 244, 208, 3, 184, 81, 18, 10, 32, + 244, 208, 3, 151, 81, 18, 10, 32, 244, 208, 3, 229, 141, 81, 18, 10, 32, + 244, 208, 3, 83, 81, 18, 10, 32, 209, 252, 3, 151, 81, 18, 10, 32, 202, + 111, 3, 83, 81, 18, 10, 32, 251, 60, 3, 184, 81, 18, 10, 32, 251, 60, 3, + 83, 81, 18, 10, 32, 238, 115, 3, 184, 81, 18, 10, 32, 238, 115, 3, 83, + 81, 18, 10, 32, 240, 48, 3, 184, 81, 18, 10, 32, 240, 48, 3, 151, 81, 18, + 10, 32, 240, 48, 3, 229, 141, 81, 18, 10, 32, 240, 48, 3, 83, 81, 18, 10, + 32, 217, 120, 3, 151, 81, 18, 10, 32, 217, 120, 3, 83, 81, 18, 10, 32, + 230, 23, 3, 184, 81, 18, 10, 32, 230, 23, 3, 151, 81, 18, 10, 32, 230, + 23, 3, 229, 141, 81, 18, 10, 32, 230, 23, 3, 228, 29, 81, 18, 10, 32, + 230, 23, 3, 83, 81, 18, 10, 32, 228, 29, 3, 184, 81, 18, 10, 32, 228, 29, + 3, 151, 81, 18, 10, 32, 228, 29, 3, 229, 141, 81, 18, 10, 32, 228, 29, 3, + 83, 81, 18, 10, 32, 228, 29, 3, 237, 44, 81, 18, 10, 32, 83, 3, 184, 81, + 18, 10, 32, 83, 3, 151, 81, 18, 10, 32, 83, 3, 229, 141, 81, 18, 10, 32, + 83, 3, 83, 81, 18, 10, 32, 221, 179, 3, 184, 81, 18, 10, 32, 221, 179, 3, + 151, 81, 18, 10, 32, 221, 179, 3, 229, 141, 81, 18, 10, 32, 221, 179, 3, + 83, 81, 18, 10, 32, 221, 179, 3, 237, 44, 81, 18, 10, 32, 237, 44, 3, + 184, 81, 18, 10, 32, 237, 44, 3, 83, 81, 18, 10, 32, 237, 44, 3, 210, + 199, 137, 81, 18, 10, 32, 89, 3, 184, 81, 18, 10, 32, 89, 3, 151, 81, 18, + 10, 32, 89, 3, 229, 141, 81, 18, 10, 32, 89, 3, 83, 81, 18, 10, 32, 89, + 3, 237, 44, 81, 18, 10, 32, 89, 3, 237, 128, 87, 3, 83, 174, 18, 10, 32, + 89, 3, 237, 128, 87, 3, 237, 44, 174, 18, 10, 32, 248, 139, 3, 83, 174, + 18, 10, 32, 248, 139, 3, 237, 44, 174, 18, 10, 32, 209, 170, 3, 83, 174, + 18, 10, 32, 209, 170, 3, 237, 44, 174, 18, 10, 32, 209, 89, 3, 83, 174, + 18, 10, 32, 209, 89, 3, 237, 44, 174, 18, 10, 32, 214, 162, 3, 83, 174, + 18, 10, 32, 214, 162, 3, 237, 44, 174, 18, 10, 32, 213, 40, 3, 83, 174, + 18, 10, 32, 213, 40, 3, 237, 44, 174, 18, 10, 32, 230, 23, 3, 228, 29, + 174, 18, 10, 32, 230, 23, 3, 83, 174, 18, 10, 32, 228, 29, 3, 83, 174, + 18, 10, 32, 221, 179, 3, 83, 174, 18, 10, 32, 221, 179, 3, 237, 44, 174, + 18, 10, 32, 89, 3, 83, 174, 18, 10, 32, 89, 3, 237, 44, 174, 18, 10, 32, + 213, 81, 3, 240, 72, 174, 18, 10, 32, 213, 81, 3, 244, 173, 174, 18, 10, + 32, 213, 81, 3, 229, 230, 174, 18, 10, 32, 209, 252, 3, 137, 225, 130, + 64, 18, 10, 32, 209, 252, 3, 89, 64, 18, 10, 32, 251, 60, 3, 137, 225, + 130, 64, 18, 10, 32, 251, 60, 3, 89, 64, 18, 10, 32, 238, 115, 3, 137, + 225, 130, 64, 18, 10, 32, 238, 115, 3, 89, 64, 18, 10, 32, 214, 162, 3, + 137, 225, 130, 64, 18, 10, 32, 214, 162, 3, 89, 64, 18, 10, 32, 213, 40, + 3, 137, 225, 130, 64, 18, 10, 32, 213, 40, 3, 89, 64, 18, 10, 32, 151, 3, + 137, 225, 130, 64, 18, 10, 32, 151, 3, 89, 64, 18, 10, 32, 184, 3, 137, + 225, 130, 64, 18, 10, 32, 184, 3, 89, 64, 18, 10, 32, 229, 141, 3, 137, + 225, 130, 64, 18, 10, 32, 229, 141, 3, 89, 64, 18, 10, 32, 215, 29, 3, + 137, 225, 130, 64, 18, 10, 32, 215, 29, 3, 89, 64, 18, 10, 32, 244, 208, + 3, 137, 225, 130, 64, 18, 10, 32, 244, 208, 3, 89, 64, 18, 10, 32, 213, + 40, 3, 184, 64, 18, 10, 32, 213, 40, 3, 151, 64, 18, 10, 32, 213, 40, 3, + 229, 141, 64, 18, 10, 32, 213, 40, 3, 83, 64, 18, 10, 32, 213, 40, 3, + 216, 123, 64, 18, 10, 32, 214, 162, 3, 216, 123, 64, 18, 10, 32, 215, 29, + 3, 216, 123, 64, 18, 10, 32, 244, 208, 3, 216, 123, 64, 18, 10, 32, 209, + 252, 3, 137, 225, 130, 46, 18, 10, 32, 209, 252, 3, 89, 46, 18, 10, 32, + 251, 60, 3, 137, 225, 130, 46, 18, 10, 32, 251, 60, 3, 89, 46, 18, 10, + 32, 238, 115, 3, 137, 225, 130, 46, 18, 10, 32, 238, 115, 3, 89, 46, 18, + 10, 32, 214, 162, 3, 137, 225, 130, 46, 18, 10, 32, 214, 162, 3, 89, 46, + 18, 10, 32, 213, 40, 3, 137, 225, 130, 46, 18, 10, 32, 213, 40, 3, 89, + 46, 18, 10, 32, 151, 3, 137, 225, 130, 46, 18, 10, 32, 151, 3, 89, 46, + 18, 10, 32, 184, 3, 137, 225, 130, 46, 18, 10, 32, 184, 3, 89, 46, 18, + 10, 32, 229, 141, 3, 137, 225, 130, 46, 18, 10, 32, 229, 141, 3, 89, 46, + 18, 10, 32, 215, 29, 3, 137, 225, 130, 46, 18, 10, 32, 215, 29, 3, 89, + 46, 18, 10, 32, 244, 208, 3, 137, 225, 130, 46, 18, 10, 32, 244, 208, 3, + 89, 46, 18, 10, 32, 213, 40, 3, 184, 46, 18, 10, 32, 213, 40, 3, 151, 46, + 18, 10, 32, 213, 40, 3, 229, 141, 46, 18, 10, 32, 213, 40, 3, 83, 46, 18, + 10, 32, 213, 40, 3, 216, 123, 46, 18, 10, 32, 214, 162, 3, 216, 123, 46, + 18, 10, 32, 215, 29, 3, 216, 123, 46, 18, 10, 32, 244, 208, 3, 216, 123, + 46, 18, 10, 32, 213, 40, 3, 184, 81, 18, 10, 32, 213, 40, 3, 151, 81, 18, + 10, 32, 213, 40, 3, 229, 141, 81, 18, 10, 32, 213, 40, 3, 83, 81, 18, 10, + 32, 214, 162, 3, 237, 44, 81, 18, 10, 32, 213, 40, 3, 237, 44, 81, 18, + 10, 32, 209, 252, 3, 83, 81, 18, 10, 32, 214, 162, 3, 184, 174, 18, 10, + 32, 214, 162, 3, 151, 174, 18, 10, 32, 214, 162, 3, 229, 141, 174, 18, + 10, 32, 213, 40, 3, 184, 174, 18, 10, 32, 213, 40, 3, 151, 174, 18, 10, + 32, 213, 40, 3, 229, 141, 174, 18, 10, 32, 209, 252, 3, 83, 174, 18, 10, + 32, 202, 111, 3, 83, 174, 18, 10, 32, 137, 3, 240, 70, 46, 18, 10, 32, + 137, 3, 240, 70, 64, 18, 219, 231, 49, 219, 76, 219, 231, 50, 219, 76, + 10, 32, 209, 170, 3, 184, 3, 83, 81, 18, 10, 32, 209, 170, 3, 151, 3, + 184, 46, 18, 10, 32, 209, 170, 3, 151, 3, 184, 81, 18, 10, 32, 209, 170, + 3, 151, 3, 83, 81, 18, 10, 32, 209, 170, 3, 229, 141, 3, 83, 81, 18, 10, + 32, 209, 170, 3, 83, 3, 184, 81, 18, 10, 32, 209, 170, 3, 83, 3, 151, 81, + 18, 10, 32, 209, 170, 3, 83, 3, 229, 141, 81, 18, 10, 32, 184, 3, 83, 3, + 151, 46, 18, 10, 32, 184, 3, 83, 3, 151, 81, 18, 10, 32, 151, 3, 83, 3, + 89, 46, 18, 10, 32, 151, 3, 83, 3, 137, 225, 130, 46, 18, 10, 32, 214, + 162, 3, 151, 3, 184, 81, 18, 10, 32, 214, 162, 3, 184, 3, 151, 81, 18, + 10, 32, 214, 162, 3, 184, 3, 137, 225, 130, 46, 18, 10, 32, 214, 162, 3, + 83, 3, 151, 46, 18, 10, 32, 214, 162, 3, 83, 3, 151, 81, 18, 10, 32, 214, + 162, 3, 83, 3, 184, 81, 18, 10, 32, 214, 162, 3, 83, 3, 83, 46, 18, 10, + 32, 214, 162, 3, 83, 3, 83, 81, 18, 10, 32, 215, 29, 3, 151, 3, 151, 46, + 18, 10, 32, 215, 29, 3, 151, 3, 151, 81, 18, 10, 32, 215, 29, 3, 83, 3, + 83, 46, 18, 10, 32, 213, 40, 3, 151, 3, 83, 46, 18, 10, 32, 213, 40, 3, + 151, 3, 83, 81, 18, 10, 32, 213, 40, 3, 184, 3, 89, 46, 18, 10, 32, 213, + 40, 3, 83, 3, 229, 141, 46, 18, 10, 32, 213, 40, 3, 83, 3, 229, 141, 81, + 18, 10, 32, 213, 40, 3, 83, 3, 83, 46, 18, 10, 32, 213, 40, 3, 83, 3, 83, + 81, 18, 10, 32, 244, 208, 3, 151, 3, 137, 225, 130, 46, 18, 10, 32, 244, + 208, 3, 229, 141, 3, 83, 46, 18, 10, 32, 244, 208, 3, 229, 141, 3, 83, + 81, 18, 10, 32, 209, 252, 3, 83, 3, 151, 46, 18, 10, 32, 209, 252, 3, 83, + 3, 151, 81, 18, 10, 32, 209, 252, 3, 83, 3, 83, 81, 18, 10, 32, 209, 252, + 3, 83, 3, 89, 46, 18, 10, 32, 251, 60, 3, 184, 3, 83, 46, 18, 10, 32, + 251, 60, 3, 83, 3, 83, 46, 18, 10, 32, 251, 60, 3, 83, 3, 83, 81, 18, 10, + 32, 251, 60, 3, 83, 3, 137, 225, 130, 46, 18, 10, 32, 238, 115, 3, 83, 3, + 83, 46, 18, 10, 32, 238, 115, 3, 83, 3, 89, 46, 18, 10, 32, 238, 115, 3, + 83, 3, 137, 225, 130, 46, 18, 10, 32, 240, 48, 3, 229, 141, 3, 83, 46, + 18, 10, 32, 240, 48, 3, 229, 141, 3, 83, 81, 18, 10, 32, 217, 120, 3, 83, + 3, 151, 46, 18, 10, 32, 217, 120, 3, 83, 3, 83, 46, 18, 10, 32, 228, 29, + 3, 151, 3, 83, 46, 18, 10, 32, 228, 29, 3, 151, 3, 89, 46, 18, 10, 32, + 228, 29, 3, 151, 3, 137, 225, 130, 46, 18, 10, 32, 228, 29, 3, 184, 3, + 184, 81, 18, 10, 32, 228, 29, 3, 184, 3, 184, 46, 18, 10, 32, 228, 29, 3, + 229, 141, 3, 83, 46, 18, 10, 32, 228, 29, 3, 229, 141, 3, 83, 81, 18, 10, + 32, 228, 29, 3, 83, 3, 151, 46, 18, 10, 32, 228, 29, 3, 83, 3, 151, 81, + 18, 10, 32, 83, 3, 151, 3, 184, 81, 18, 10, 32, 83, 3, 151, 3, 83, 81, + 18, 10, 32, 83, 3, 151, 3, 89, 46, 18, 10, 32, 83, 3, 184, 3, 151, 81, + 18, 10, 32, 83, 3, 184, 3, 83, 81, 18, 10, 32, 83, 3, 229, 141, 3, 184, + 81, 18, 10, 32, 83, 3, 229, 141, 3, 83, 81, 18, 10, 32, 83, 3, 184, 3, + 229, 141, 81, 18, 10, 32, 237, 44, 3, 83, 3, 184, 81, 18, 10, 32, 237, + 44, 3, 83, 3, 83, 81, 18, 10, 32, 221, 179, 3, 151, 3, 83, 81, 18, 10, + 32, 221, 179, 3, 151, 3, 137, 225, 130, 46, 18, 10, 32, 221, 179, 3, 184, + 3, 83, 46, 18, 10, 32, 221, 179, 3, 184, 3, 83, 81, 18, 10, 32, 221, 179, + 3, 184, 3, 137, 225, 130, 46, 18, 10, 32, 221, 179, 3, 83, 3, 89, 46, 18, + 10, 32, 221, 179, 3, 83, 3, 137, 225, 130, 46, 18, 10, 32, 89, 3, 83, 3, + 83, 46, 18, 10, 32, 89, 3, 83, 3, 83, 81, 18, 10, 32, 248, 139, 3, 229, + 141, 3, 89, 46, 18, 10, 32, 209, 170, 3, 184, 3, 89, 46, 18, 10, 32, 209, + 170, 3, 184, 3, 137, 225, 130, 46, 18, 10, 32, 209, 170, 3, 229, 141, 3, + 89, 46, 18, 10, 32, 209, 170, 3, 229, 141, 3, 137, 225, 130, 46, 18, 10, + 32, 209, 170, 3, 83, 3, 89, 46, 18, 10, 32, 209, 170, 3, 83, 3, 137, 225, + 130, 46, 18, 10, 32, 184, 3, 83, 3, 89, 46, 18, 10, 32, 184, 3, 151, 3, + 137, 225, 130, 46, 18, 10, 32, 184, 3, 83, 3, 137, 225, 130, 46, 18, 10, + 32, 214, 162, 3, 229, 141, 3, 137, 225, 130, 46, 18, 10, 32, 215, 29, 3, + 151, 3, 89, 46, 18, 10, 32, 213, 40, 3, 151, 3, 89, 46, 18, 10, 32, 244, + 208, 3, 151, 3, 89, 46, 18, 10, 32, 228, 29, 3, 184, 3, 89, 46, 18, 10, + 32, 228, 29, 3, 83, 3, 89, 46, 18, 10, 32, 89, 3, 151, 3, 89, 46, 18, 10, + 32, 89, 3, 184, 3, 89, 46, 18, 10, 32, 89, 3, 83, 3, 89, 46, 18, 10, 32, + 83, 3, 83, 3, 89, 46, 18, 10, 32, 217, 120, 3, 83, 3, 89, 46, 18, 10, 32, + 221, 179, 3, 151, 3, 89, 46, 18, 10, 32, 217, 120, 3, 83, 3, 151, 81, 18, + 10, 32, 228, 29, 3, 151, 3, 83, 81, 18, 10, 32, 251, 60, 3, 83, 3, 89, + 46, 18, 10, 32, 230, 23, 3, 83, 3, 89, 46, 18, 10, 32, 221, 179, 3, 184, + 3, 151, 81, 18, 10, 32, 83, 3, 229, 141, 3, 89, 46, 18, 10, 32, 228, 29, + 3, 184, 3, 83, 81, 18, 10, 32, 230, 23, 3, 83, 3, 83, 46, 18, 10, 32, + 228, 29, 3, 184, 3, 83, 46, 18, 10, 32, 221, 179, 3, 184, 3, 151, 46, 18, + 10, 32, 184, 3, 151, 3, 89, 46, 18, 10, 32, 151, 3, 184, 3, 89, 46, 18, + 10, 32, 83, 3, 184, 3, 89, 46, 18, 10, 32, 240, 48, 3, 83, 3, 89, 46, 18, + 10, 32, 248, 139, 3, 151, 3, 89, 46, 18, 10, 32, 230, 23, 3, 83, 3, 83, + 81, 18, 10, 32, 251, 60, 3, 184, 3, 83, 81, 18, 10, 32, 215, 29, 3, 83, + 3, 83, 81, 18, 10, 32, 214, 162, 3, 229, 141, 3, 89, 46, 18, 10, 32, 221, + 179, 3, 184, 3, 89, 46, 18, 10, 32, 215, 4, 206, 188, 250, 82, 228, 254, + 211, 62, 2, 64, 18, 10, 32, 217, 116, 206, 188, 250, 82, 228, 254, 211, + 62, 2, 64, 18, 10, 32, 251, 13, 64, 18, 10, 32, 251, 44, 64, 18, 10, 32, + 224, 57, 64, 18, 10, 32, 215, 5, 64, 18, 10, 32, 216, 174, 64, 18, 10, + 32, 251, 33, 64, 18, 10, 32, 204, 90, 64, 18, 10, 32, 215, 4, 64, 18, 10, + 32, 215, 3, 251, 33, 204, 89, 10, 32, 230, 172, 216, 56, 54, 10, 32, 248, + 53, 250, 142, 250, 143, 57, 214, 149, 57, 214, 38, 57, 213, 226, 57, 213, + 215, 57, 213, 204, 57, 213, 193, 57, 213, 182, 57, 213, 171, 57, 213, + 160, 57, 214, 148, 57, 214, 137, 57, 214, 126, 57, 214, 115, 57, 214, + 104, 57, 214, 93, 57, 214, 82, 217, 241, 239, 159, 35, 80, 245, 233, 217, + 241, 239, 159, 35, 80, 139, 245, 233, 217, 241, 239, 159, 35, 80, 139, + 239, 102, 211, 61, 217, 241, 239, 159, 35, 80, 245, 242, 217, 241, 239, + 159, 35, 80, 213, 143, 217, 241, 239, 159, 35, 80, 240, 212, 82, 217, + 241, 239, 159, 35, 80, 217, 47, 82, 217, 241, 239, 159, 35, 80, 49, 61, + 227, 185, 155, 217, 241, 239, 159, 35, 80, 50, 61, 227, 185, 247, 225, + 217, 241, 239, 159, 35, 80, 236, 106, 241, 108, 39, 32, 49, 237, 137, 39, + 32, 50, 237, 137, 39, 52, 208, 228, 49, 237, 137, 39, 52, 208, 228, 50, + 237, 137, 39, 225, 171, 49, 237, 137, 39, 225, 171, 50, 237, 137, 39, + 245, 206, 225, 170, 39, 32, 49, 162, 56, 39, 32, 50, 162, 56, 39, 208, + 228, 49, 162, 56, 39, 208, 228, 50, 162, 56, 39, 225, 171, 49, 162, 56, + 39, 225, 171, 50, 162, 56, 39, 245, 206, 225, 171, 56, 39, 36, 208, 198, + 49, 237, 137, 39, 36, 208, 198, 50, 237, 137, 217, 241, 239, 159, 35, 80, + 120, 70, 227, 232, 217, 241, 239, 159, 35, 80, 241, 104, 244, 144, 217, + 241, 239, 159, 35, 80, 241, 93, 244, 144, 217, 241, 239, 159, 35, 80, + 124, 227, 114, 217, 241, 239, 159, 35, 80, 204, 72, 124, 227, 114, 217, + 241, 239, 159, 35, 80, 49, 219, 76, 217, 241, 239, 159, 35, 80, 50, 219, + 76, 217, 241, 239, 159, 35, 80, 49, 245, 93, 155, 217, 241, 239, 159, 35, + 80, 50, 245, 93, 155, 217, 241, 239, 159, 35, 80, 49, 208, 133, 213, 33, + 155, 217, 241, 239, 159, 35, 80, 50, 208, 133, 213, 33, 155, 217, 241, + 239, 159, 35, 80, 49, 62, 227, 185, 155, 217, 241, 239, 159, 35, 80, 50, + 62, 227, 185, 155, 217, 241, 239, 159, 35, 80, 49, 52, 250, 218, 155, + 217, 241, 239, 159, 35, 80, 50, 52, 250, 218, 155, 217, 241, 239, 159, + 35, 80, 49, 250, 218, 155, 217, 241, 239, 159, 35, 80, 50, 250, 218, 155, + 217, 241, 239, 159, 35, 80, 49, 245, 166, 155, 217, 241, 239, 159, 35, + 80, 50, 245, 166, 155, 217, 241, 239, 159, 35, 80, 49, 61, 245, 166, 155, + 217, 241, 239, 159, 35, 80, 50, 61, 245, 166, 155, 213, 121, 243, 85, 61, + 213, 121, 243, 85, 217, 241, 239, 159, 35, 80, 49, 51, 155, 217, 241, + 239, 159, 35, 80, 50, 51, 155, 244, 143, 219, 198, 246, 214, 219, 198, + 204, 72, 219, 198, 52, 204, 72, 219, 198, 244, 143, 124, 227, 114, 246, + 214, 124, 227, 114, 204, 72, 124, 227, 114, 5, 245, 233, 5, 139, 245, + 233, 5, 239, 102, 211, 61, 5, 213, 143, 5, 245, 242, 5, 217, 47, 82, 5, + 240, 212, 82, 5, 241, 104, 244, 144, 5, 49, 219, 76, 5, 50, 219, 76, 5, + 49, 245, 93, 155, 5, 50, 245, 93, 155, 5, 49, 208, 133, 213, 33, 155, 5, + 50, 208, 133, 213, 33, 155, 5, 42, 54, 5, 250, 235, 5, 250, 59, 5, 91, + 54, 5, 235, 219, 5, 227, 179, 54, 5, 237, 247, 54, 5, 241, 35, 54, 5, + 216, 74, 212, 0, 5, 243, 97, 54, 5, 218, 246, 54, 5, 245, 231, 250, 49, + 10, 240, 70, 64, 18, 10, 209, 210, 3, 240, 70, 55, 10, 244, 171, 64, 18, + 10, 209, 249, 239, 137, 10, 229, 228, 64, 18, 10, 240, 72, 64, 18, 10, + 240, 72, 174, 18, 10, 244, 173, 64, 18, 10, 244, 173, 174, 18, 10, 229, + 230, 64, 18, 10, 229, 230, 174, 18, 10, 213, 81, 64, 18, 10, 213, 81, + 174, 18, 10, 210, 223, 64, 18, 10, 210, 223, 174, 18, 10, 1, 237, 128, + 64, 18, 10, 1, 137, 3, 225, 166, 87, 64, 18, 10, 1, 137, 3, 225, 166, 87, + 46, 18, 10, 1, 137, 3, 237, 128, 87, 64, 18, 10, 1, 137, 3, 237, 128, 87, + 46, 18, 10, 1, 204, 71, 3, 237, 128, 87, 64, 18, 10, 1, 204, 71, 3, 237, + 128, 87, 46, 18, 10, 1, 137, 3, 237, 128, 248, 126, 64, 18, 10, 1, 137, + 3, 237, 128, 248, 126, 46, 18, 10, 1, 89, 3, 237, 128, 87, 64, 18, 10, 1, + 89, 3, 237, 128, 87, 46, 18, 10, 1, 89, 3, 237, 128, 87, 81, 18, 10, 1, + 89, 3, 237, 128, 87, 174, 18, 10, 1, 137, 64, 18, 10, 1, 137, 46, 18, 10, + 1, 248, 139, 64, 18, 10, 1, 248, 139, 46, 18, 10, 1, 248, 139, 81, 18, + 10, 1, 248, 139, 174, 18, 10, 1, 209, 170, 225, 99, 64, 18, 10, 1, 209, + 170, 225, 99, 46, 18, 10, 1, 209, 170, 64, 18, 10, 1, 209, 170, 46, 18, + 10, 1, 209, 170, 81, 18, 10, 1, 209, 170, 174, 18, 10, 1, 209, 89, 64, + 18, 10, 1, 209, 89, 46, 18, 10, 1, 209, 89, 81, 18, 10, 1, 209, 89, 174, + 18, 10, 1, 184, 64, 18, 10, 1, 184, 46, 18, 10, 1, 184, 81, 18, 10, 1, + 184, 174, 18, 10, 1, 151, 64, 18, 10, 1, 151, 46, 18, 10, 1, 151, 81, 18, + 10, 1, 151, 174, 18, 10, 1, 229, 141, 64, 18, 10, 1, 229, 141, 46, 18, + 10, 1, 229, 141, 81, 18, 10, 1, 229, 141, 174, 18, 10, 1, 244, 185, 64, + 18, 10, 1, 244, 185, 46, 18, 10, 1, 209, 101, 64, 18, 10, 1, 209, 101, + 46, 18, 10, 1, 216, 123, 64, 18, 10, 1, 216, 123, 46, 18, 10, 1, 202, + 108, 64, 18, 10, 1, 202, 108, 46, 18, 10, 1, 214, 162, 64, 18, 10, 1, + 214, 162, 46, 18, 10, 1, 214, 162, 81, 18, 10, 1, 214, 162, 174, 18, 10, + 1, 213, 40, 64, 18, 10, 1, 213, 40, 46, 18, 10, 1, 213, 40, 81, 18, 10, + 1, 213, 40, 174, 18, 10, 1, 215, 29, 64, 18, 10, 1, 215, 29, 46, 18, 10, + 1, 215, 29, 81, 18, 10, 1, 215, 29, 174, 18, 10, 1, 244, 208, 64, 18, 10, + 1, 244, 208, 46, 18, 10, 1, 244, 208, 81, 18, 10, 1, 244, 208, 174, 18, + 10, 1, 209, 252, 64, 18, 10, 1, 209, 252, 46, 18, 10, 1, 209, 252, 81, + 18, 10, 1, 209, 252, 174, 18, 10, 1, 202, 111, 64, 18, 10, 1, 202, 111, + 46, 18, 10, 1, 202, 111, 81, 18, 10, 1, 202, 111, 174, 18, 10, 1, 251, + 60, 64, 18, 10, 1, 251, 60, 46, 18, 10, 1, 251, 60, 81, 18, 10, 1, 251, + 60, 174, 18, 10, 1, 238, 115, 64, 18, 10, 1, 238, 115, 46, 18, 10, 1, + 238, 115, 81, 18, 10, 1, 238, 115, 174, 18, 10, 1, 240, 48, 64, 18, 10, + 1, 240, 48, 46, 18, 10, 1, 240, 48, 81, 18, 10, 1, 240, 48, 174, 18, 10, + 1, 217, 120, 64, 18, 10, 1, 217, 120, 46, 18, 10, 1, 217, 120, 81, 18, + 10, 1, 217, 120, 174, 18, 10, 1, 230, 23, 64, 18, 10, 1, 230, 23, 46, 18, + 10, 1, 230, 23, 81, 18, 10, 1, 230, 23, 174, 18, 10, 1, 228, 29, 64, 18, + 10, 1, 228, 29, 46, 18, 10, 1, 228, 29, 81, 18, 10, 1, 228, 29, 174, 18, + 10, 1, 83, 64, 18, 10, 1, 83, 46, 18, 10, 1, 83, 81, 18, 10, 1, 83, 174, + 18, 10, 1, 221, 179, 64, 18, 10, 1, 221, 179, 46, 18, 10, 1, 221, 179, + 81, 18, 10, 1, 221, 179, 174, 18, 10, 1, 237, 44, 64, 18, 10, 1, 237, 44, + 46, 18, 10, 1, 237, 44, 81, 18, 10, 1, 237, 44, 174, 18, 10, 1, 204, 71, + 64, 18, 10, 1, 204, 71, 46, 18, 10, 1, 137, 225, 130, 64, 18, 10, 1, 137, + 225, 130, 46, 18, 10, 1, 89, 64, 18, 10, 1, 89, 46, 18, 10, 1, 89, 81, + 18, 10, 1, 89, 174, 18, 10, 32, 228, 29, 3, 137, 3, 225, 166, 87, 64, 18, + 10, 32, 228, 29, 3, 137, 3, 225, 166, 87, 46, 18, 10, 32, 228, 29, 3, + 137, 3, 237, 128, 87, 64, 18, 10, 32, 228, 29, 3, 137, 3, 237, 128, 87, + 46, 18, 10, 32, 228, 29, 3, 137, 3, 237, 128, 248, 126, 64, 18, 10, 32, + 228, 29, 3, 137, 3, 237, 128, 248, 126, 46, 18, 10, 32, 228, 29, 3, 137, + 64, 18, 10, 32, 228, 29, 3, 137, 46, 18, 202, 85, 204, 24, 221, 190, 211, + 228, 154, 240, 212, 82, 154, 217, 31, 82, 154, 42, 54, 154, 243, 97, 54, + 154, 218, 246, 54, 154, 250, 235, 154, 250, 160, 154, 49, 219, 76, 154, + 50, 219, 76, 154, 250, 59, 154, 91, 54, 154, 245, 233, 154, 235, 219, + 154, 239, 102, 211, 61, 154, 212, 0, 154, 17, 202, 84, 154, 17, 105, 154, + 17, 108, 154, 17, 147, 154, 17, 149, 154, 17, 170, 154, 17, 195, 154, 17, + 213, 111, 154, 17, 199, 154, 17, 222, 63, 154, 245, 242, 154, 213, 143, + 154, 227, 179, 54, 154, 241, 35, 54, 154, 237, 247, 54, 154, 217, 47, 82, + 154, 245, 231, 250, 49, 154, 8, 6, 1, 63, 154, 8, 6, 1, 249, 255, 154, 8, + 6, 1, 247, 125, 154, 8, 6, 1, 245, 51, 154, 8, 6, 1, 74, 154, 8, 6, 1, + 240, 174, 154, 8, 6, 1, 239, 75, 154, 8, 6, 1, 237, 171, 154, 8, 6, 1, + 75, 154, 8, 6, 1, 230, 184, 154, 8, 6, 1, 230, 54, 154, 8, 6, 1, 159, + 154, 8, 6, 1, 226, 185, 154, 8, 6, 1, 223, 163, 154, 8, 6, 1, 78, 154, 8, + 6, 1, 219, 184, 154, 8, 6, 1, 217, 134, 154, 8, 6, 1, 146, 154, 8, 6, 1, + 194, 154, 8, 6, 1, 210, 69, 154, 8, 6, 1, 68, 154, 8, 6, 1, 206, 164, + 154, 8, 6, 1, 204, 144, 154, 8, 6, 1, 203, 196, 154, 8, 6, 1, 203, 124, + 154, 8, 6, 1, 202, 159, 154, 49, 51, 155, 154, 216, 74, 212, 0, 154, 50, + 51, 155, 154, 246, 53, 251, 138, 154, 124, 227, 114, 154, 237, 254, 251, + 138, 154, 8, 5, 1, 63, 154, 8, 5, 1, 249, 255, 154, 8, 5, 1, 247, 125, + 154, 8, 5, 1, 245, 51, 154, 8, 5, 1, 74, 154, 8, 5, 1, 240, 174, 154, 8, + 5, 1, 239, 75, 154, 8, 5, 1, 237, 171, 154, 8, 5, 1, 75, 154, 8, 5, 1, + 230, 184, 154, 8, 5, 1, 230, 54, 154, 8, 5, 1, 159, 154, 8, 5, 1, 226, + 185, 154, 8, 5, 1, 223, 163, 154, 8, 5, 1, 78, 154, 8, 5, 1, 219, 184, + 154, 8, 5, 1, 217, 134, 154, 8, 5, 1, 146, 154, 8, 5, 1, 194, 154, 8, 5, + 1, 210, 69, 154, 8, 5, 1, 68, 154, 8, 5, 1, 206, 164, 154, 8, 5, 1, 204, + 144, 154, 8, 5, 1, 203, 196, 154, 8, 5, 1, 203, 124, 154, 8, 5, 1, 202, + 159, 154, 49, 245, 93, 155, 154, 80, 227, 114, 154, 50, 245, 93, 155, + 154, 208, 227, 154, 49, 61, 219, 76, 154, 50, 61, 219, 76, 127, 139, 239, + 102, 211, 61, 127, 49, 245, 166, 155, 127, 50, 245, 166, 155, 127, 139, + 245, 233, 127, 67, 101, 243, 85, 127, 67, 1, 204, 0, 127, 67, 1, 5, 63, + 127, 67, 1, 5, 75, 127, 67, 1, 5, 68, 127, 67, 1, 5, 74, 127, 67, 1, 5, + 78, 127, 67, 1, 5, 198, 127, 67, 1, 5, 202, 213, 127, 67, 1, 5, 202, 247, + 127, 67, 1, 5, 207, 203, 127, 229, 225, 217, 215, 211, 241, 82, 127, 67, + 1, 63, 127, 67, 1, 75, 127, 67, 1, 68, 127, 67, 1, 74, 127, 67, 1, 78, + 127, 67, 1, 173, 127, 67, 1, 229, 100, 127, 67, 1, 228, 209, 127, 67, 1, + 229, 201, 127, 67, 1, 229, 26, 127, 67, 1, 215, 36, 127, 67, 1, 212, 162, + 127, 67, 1, 211, 10, 127, 67, 1, 214, 177, 127, 67, 1, 212, 13, 127, 67, + 1, 210, 22, 127, 67, 1, 209, 2, 127, 67, 1, 207, 203, 127, 67, 1, 209, + 187, 127, 67, 1, 135, 127, 67, 1, 201, 201, 127, 67, 1, 222, 100, 127, + 67, 1, 221, 84, 127, 67, 1, 222, 240, 127, 67, 1, 221, 191, 127, 67, 1, + 152, 127, 67, 1, 237, 3, 127, 67, 1, 236, 26, 127, 67, 1, 237, 67, 127, + 67, 1, 236, 136, 127, 67, 1, 192, 127, 67, 1, 224, 155, 127, 67, 1, 223, + 246, 127, 67, 1, 225, 20, 127, 67, 1, 224, 82, 127, 67, 1, 198, 127, 67, + 1, 202, 213, 127, 67, 1, 202, 247, 127, 67, 1, 216, 220, 127, 67, 1, 216, + 57, 127, 67, 1, 215, 145, 127, 67, 1, 216, 158, 127, 67, 1, 215, 227, + 127, 67, 1, 204, 111, 127, 67, 1, 223, 163, 127, 67, 205, 186, 211, 241, + 82, 127, 67, 213, 148, 211, 241, 82, 127, 28, 240, 7, 127, 28, 1, 229, + 59, 127, 28, 1, 211, 156, 127, 28, 1, 229, 52, 127, 28, 1, 222, 93, 127, + 28, 1, 222, 91, 127, 28, 1, 222, 90, 127, 28, 1, 208, 240, 127, 28, 1, + 211, 145, 127, 28, 1, 216, 47, 127, 28, 1, 216, 42, 127, 28, 1, 216, 39, + 127, 28, 1, 216, 32, 127, 28, 1, 216, 27, 127, 28, 1, 216, 22, 127, 28, + 1, 216, 33, 127, 28, 1, 216, 45, 127, 28, 1, 224, 141, 127, 28, 1, 218, + 153, 127, 28, 1, 211, 153, 127, 28, 1, 218, 142, 127, 28, 1, 212, 111, + 127, 28, 1, 211, 150, 127, 28, 1, 231, 106, 127, 28, 1, 246, 74, 127, 28, + 1, 211, 160, 127, 28, 1, 246, 138, 127, 28, 1, 229, 120, 127, 28, 1, 209, + 66, 127, 28, 1, 218, 190, 127, 28, 1, 236, 251, 127, 28, 1, 63, 127, 28, + 1, 251, 109, 127, 28, 1, 198, 127, 28, 1, 203, 99, 127, 28, 1, 241, 55, + 127, 28, 1, 74, 127, 28, 1, 203, 39, 127, 28, 1, 203, 52, 127, 28, 1, 78, + 127, 28, 1, 204, 111, 127, 28, 1, 204, 107, 127, 28, 1, 220, 73, 127, 28, + 1, 202, 247, 127, 28, 1, 68, 127, 28, 1, 204, 48, 127, 28, 1, 204, 62, + 127, 28, 1, 204, 30, 127, 28, 1, 202, 213, 127, 28, 1, 240, 238, 127, 28, + 1, 203, 11, 127, 28, 1, 75, 154, 246, 220, 54, 154, 218, 20, 54, 154, + 221, 166, 54, 154, 225, 170, 154, 247, 203, 142, 154, 203, 43, 54, 154, + 203, 246, 54, 127, 239, 156, 157, 206, 38, 127, 96, 47, 127, 177, 47, + 127, 86, 47, 127, 183, 47, 127, 62, 211, 177, 127, 61, 246, 61, 230, 251, + 250, 205, 250, 228, 230, 251, 250, 205, 213, 130, 230, 251, 250, 205, + 209, 138, 220, 90, 216, 96, 246, 182, 216, 96, 246, 182, 29, 66, 4, 249, + 239, 63, 29, 66, 4, 249, 208, 74, 29, 66, 4, 249, 217, 75, 29, 66, 4, + 249, 185, 78, 29, 66, 4, 249, 235, 68, 29, 66, 4, 249, 254, 244, 212, 29, + 66, 4, 249, 201, 244, 75, 29, 66, 4, 249, 241, 243, 233, 29, 66, 4, 249, + 231, 243, 113, 29, 66, 4, 249, 195, 242, 42, 29, 66, 4, 249, 189, 230, + 181, 29, 66, 4, 249, 200, 230, 161, 29, 66, 4, 249, 210, 230, 101, 29, + 66, 4, 249, 181, 230, 82, 29, 66, 4, 249, 169, 173, 29, 66, 4, 249, 202, + 229, 201, 29, 66, 4, 249, 179, 229, 100, 29, 66, 4, 249, 176, 229, 26, + 29, 66, 4, 249, 165, 228, 209, 29, 66, 4, 249, 166, 192, 29, 66, 4, 249, + 232, 225, 20, 29, 66, 4, 249, 173, 224, 155, 29, 66, 4, 249, 230, 224, + 82, 29, 66, 4, 249, 222, 223, 246, 29, 66, 4, 249, 243, 201, 201, 29, 66, + 4, 249, 221, 222, 240, 29, 66, 4, 249, 215, 222, 100, 29, 66, 4, 249, + 194, 221, 191, 29, 66, 4, 249, 191, 221, 84, 29, 66, 4, 249, 250, 185, + 29, 66, 4, 249, 174, 219, 34, 29, 66, 4, 249, 207, 218, 167, 29, 66, 4, + 249, 234, 218, 69, 29, 66, 4, 249, 196, 217, 191, 29, 66, 4, 249, 229, + 217, 126, 29, 66, 4, 249, 168, 217, 106, 29, 66, 4, 249, 224, 217, 88, + 29, 66, 4, 249, 213, 217, 77, 29, 66, 4, 249, 186, 216, 220, 29, 66, 4, + 249, 218, 216, 158, 29, 66, 4, 249, 193, 216, 57, 29, 66, 4, 249, 252, + 215, 227, 29, 66, 4, 249, 219, 215, 145, 29, 66, 4, 249, 214, 215, 36, + 29, 66, 4, 249, 237, 214, 177, 29, 66, 4, 249, 205, 212, 162, 29, 66, 4, + 249, 233, 212, 13, 29, 66, 4, 249, 188, 211, 10, 29, 66, 4, 249, 187, + 210, 22, 29, 66, 4, 249, 248, 209, 187, 29, 66, 4, 249, 209, 209, 2, 29, + 66, 4, 249, 246, 135, 29, 66, 4, 249, 177, 207, 203, 29, 66, 4, 249, 192, + 204, 111, 29, 66, 4, 249, 171, 204, 62, 29, 66, 4, 249, 206, 204, 30, 29, + 66, 4, 249, 204, 204, 0, 29, 66, 4, 249, 228, 202, 116, 29, 66, 4, 249, + 172, 202, 92, 29, 66, 4, 249, 225, 202, 17, 29, 66, 4, 249, 220, 254, 34, + 29, 66, 4, 249, 203, 253, 178, 29, 66, 4, 249, 162, 250, 34, 29, 66, 4, + 249, 175, 242, 9, 29, 66, 4, 249, 158, 242, 8, 29, 66, 4, 249, 198, 221, + 20, 29, 66, 4, 249, 216, 217, 189, 29, 66, 4, 249, 184, 217, 193, 29, 66, + 4, 249, 170, 216, 218, 29, 66, 4, 249, 212, 216, 217, 29, 66, 4, 249, + 178, 215, 226, 29, 66, 4, 249, 180, 210, 19, 29, 66, 4, 249, 160, 207, + 158, 29, 66, 4, 249, 157, 108, 29, 66, 16, 249, 227, 29, 66, 16, 249, + 226, 29, 66, 16, 249, 223, 29, 66, 16, 249, 211, 29, 66, 16, 249, 199, + 29, 66, 16, 249, 197, 29, 66, 16, 249, 190, 29, 66, 16, 249, 183, 29, 66, + 16, 249, 182, 29, 66, 16, 249, 167, 29, 66, 16, 249, 164, 29, 66, 16, + 249, 163, 29, 66, 16, 249, 161, 29, 66, 16, 249, 159, 29, 66, 133, 249, + 156, 225, 122, 29, 66, 133, 249, 155, 203, 250, 29, 66, 133, 249, 154, + 244, 58, 29, 66, 133, 249, 153, 241, 32, 29, 66, 133, 249, 152, 225, 93, + 29, 66, 133, 249, 151, 211, 101, 29, 66, 133, 249, 150, 240, 219, 29, 66, + 133, 249, 149, 216, 184, 29, 66, 133, 249, 148, 213, 42, 29, 66, 133, + 249, 147, 237, 66, 29, 66, 133, 249, 146, 211, 235, 29, 66, 133, 249, + 145, 248, 21, 29, 66, 133, 249, 144, 245, 149, 29, 66, 133, 249, 143, + 247, 179, 29, 66, 133, 249, 142, 204, 38, 29, 66, 133, 249, 141, 248, + 227, 29, 66, 133, 249, 140, 220, 41, 29, 66, 133, 249, 139, 211, 207, 29, + 66, 133, 249, 138, 245, 59, 29, 66, 224, 45, 249, 137, 229, 249, 29, 66, + 224, 45, 249, 136, 230, 2, 29, 66, 133, 249, 135, 220, 55, 29, 66, 133, + 249, 134, 204, 12, 29, 66, 133, 249, 133, 29, 66, 224, 45, 249, 132, 250, + 119, 29, 66, 224, 45, 249, 131, 224, 232, 29, 66, 133, 249, 130, 247, + 202, 29, 66, 133, 249, 129, 238, 31, 29, 66, 133, 249, 128, 29, 66, 133, + 249, 127, 203, 241, 29, 66, 133, 249, 126, 29, 66, 133, 249, 125, 29, 66, + 133, 249, 124, 236, 53, 29, 66, 133, 249, 123, 29, 66, 133, 249, 122, 29, + 66, 133, 249, 121, 29, 66, 224, 45, 249, 119, 207, 172, 29, 66, 133, 249, + 118, 29, 66, 133, 249, 117, 29, 66, 133, 249, 116, 246, 10, 29, 66, 133, + 249, 115, 29, 66, 133, 249, 114, 29, 66, 133, 249, 113, 238, 221, 29, 66, + 133, 249, 112, 250, 106, 29, 66, 133, 249, 111, 29, 66, 133, 249, 110, + 29, 66, 133, 249, 109, 29, 66, 133, 249, 108, 29, 66, 133, 249, 107, 29, + 66, 133, 249, 106, 29, 66, 133, 249, 105, 29, 66, 133, 249, 104, 29, 66, + 133, 249, 103, 29, 66, 133, 249, 102, 224, 37, 29, 66, 133, 249, 101, 29, + 66, 133, 249, 100, 208, 95, 29, 66, 133, 249, 99, 29, 66, 133, 249, 98, + 29, 66, 133, 249, 97, 29, 66, 133, 249, 96, 29, 66, 133, 249, 95, 29, 66, + 133, 249, 94, 29, 66, 133, 249, 93, 29, 66, 133, 249, 92, 29, 66, 133, + 249, 91, 29, 66, 133, 249, 90, 29, 66, 133, 249, 89, 29, 66, 133, 249, + 88, 237, 35, 29, 66, 133, 249, 67, 239, 168, 29, 66, 133, 249, 64, 248, + 204, 29, 66, 133, 249, 59, 211, 214, 29, 66, 133, 249, 58, 47, 29, 66, + 133, 249, 57, 29, 66, 133, 249, 56, 210, 155, 29, 66, 133, 249, 55, 29, + 66, 133, 249, 54, 29, 66, 133, 249, 53, 204, 34, 246, 179, 29, 66, 133, + 249, 52, 246, 179, 29, 66, 133, 249, 51, 246, 180, 239, 134, 29, 66, 133, + 249, 50, 204, 36, 29, 66, 133, 249, 49, 29, 66, 133, 249, 48, 29, 66, + 224, 45, 249, 47, 243, 168, 29, 66, 133, 249, 46, 29, 66, 133, 249, 45, + 29, 66, 133, 249, 43, 29, 66, 133, 249, 42, 29, 66, 133, 249, 41, 29, 66, + 133, 249, 40, 244, 147, 29, 66, 133, 249, 39, 29, 66, 133, 249, 38, 29, + 66, 133, 249, 37, 29, 66, 133, 249, 36, 29, 66, 133, 249, 35, 29, 66, + 133, 205, 241, 249, 120, 29, 66, 133, 205, 241, 249, 87, 29, 66, 133, + 205, 241, 249, 86, 29, 66, 133, 205, 241, 249, 85, 29, 66, 133, 205, 241, + 249, 84, 29, 66, 133, 205, 241, 249, 83, 29, 66, 133, 205, 241, 249, 82, + 29, 66, 133, 205, 241, 249, 81, 29, 66, 133, 205, 241, 249, 80, 29, 66, + 133, 205, 241, 249, 79, 29, 66, 133, 205, 241, 249, 78, 29, 66, 133, 205, + 241, 249, 77, 29, 66, 133, 205, 241, 249, 76, 29, 66, 133, 205, 241, 249, + 75, 29, 66, 133, 205, 241, 249, 74, 29, 66, 133, 205, 241, 249, 73, 29, + 66, 133, 205, 241, 249, 72, 29, 66, 133, 205, 241, 249, 71, 29, 66, 133, + 205, 241, 249, 70, 29, 66, 133, 205, 241, 249, 69, 29, 66, 133, 205, 241, + 249, 68, 29, 66, 133, 205, 241, 249, 66, 29, 66, 133, 205, 241, 249, 65, + 29, 66, 133, 205, 241, 249, 63, 29, 66, 133, 205, 241, 249, 62, 29, 66, + 133, 205, 241, 249, 61, 29, 66, 133, 205, 241, 249, 60, 29, 66, 133, 205, + 241, 249, 44, 29, 66, 133, 205, 241, 249, 34, 251, 102, 203, 238, 213, + 131, 227, 114, 251, 102, 203, 238, 213, 131, 243, 85, 251, 102, 246, 169, + 82, 251, 102, 42, 105, 251, 102, 42, 108, 251, 102, 42, 147, 251, 102, + 42, 149, 251, 102, 42, 170, 251, 102, 42, 195, 251, 102, 42, 213, 111, + 251, 102, 42, 199, 251, 102, 42, 222, 63, 251, 102, 42, 209, 152, 251, + 102, 42, 207, 151, 251, 102, 42, 209, 53, 251, 102, 42, 239, 153, 251, + 102, 42, 240, 18, 251, 102, 42, 212, 74, 251, 102, 42, 213, 105, 251, + 102, 42, 241, 134, 251, 102, 42, 222, 58, 251, 102, 42, 118, 236, 11, + 251, 102, 42, 120, 236, 11, 251, 102, 42, 126, 236, 11, 251, 102, 42, + 239, 147, 236, 11, 251, 102, 42, 239, 233, 236, 11, 251, 102, 42, 212, + 88, 236, 11, 251, 102, 42, 213, 112, 236, 11, 251, 102, 42, 241, 143, + 236, 11, 251, 102, 42, 222, 64, 236, 11, 251, 102, 42, 118, 209, 36, 251, + 102, 42, 120, 209, 36, 251, 102, 42, 126, 209, 36, 251, 102, 42, 239, + 147, 209, 36, 251, 102, 42, 239, 233, 209, 36, 251, 102, 42, 212, 88, + 209, 36, 251, 102, 42, 213, 112, 209, 36, 251, 102, 42, 241, 143, 209, + 36, 251, 102, 42, 222, 64, 209, 36, 251, 102, 42, 209, 153, 209, 36, 251, + 102, 42, 207, 152, 209, 36, 251, 102, 42, 209, 54, 209, 36, 251, 102, 42, + 239, 154, 209, 36, 251, 102, 42, 240, 19, 209, 36, 251, 102, 42, 212, 75, + 209, 36, 251, 102, 42, 213, 106, 209, 36, 251, 102, 42, 241, 135, 209, + 36, 251, 102, 42, 222, 59, 209, 36, 251, 102, 204, 51, 248, 219, 206, + 235, 251, 102, 204, 51, 239, 245, 210, 240, 251, 102, 204, 51, 214, 171, + 210, 240, 251, 102, 204, 51, 209, 61, 210, 240, 251, 102, 204, 51, 239, + 140, 210, 240, 251, 102, 242, 45, 225, 19, 239, 245, 210, 240, 251, 102, + 227, 95, 225, 19, 239, 245, 210, 240, 251, 102, 225, 19, 214, 171, 210, + 240, 251, 102, 225, 19, 209, 61, 210, 240, 30, 251, 129, 250, 36, 118, + 217, 55, 30, 251, 129, 250, 36, 118, 237, 137, 30, 251, 129, 250, 36, + 118, 242, 65, 30, 251, 129, 250, 36, 170, 30, 251, 129, 250, 36, 240, 18, + 30, 251, 129, 250, 36, 239, 233, 236, 11, 30, 251, 129, 250, 36, 239, + 233, 209, 36, 30, 251, 129, 250, 36, 240, 19, 209, 36, 30, 251, 129, 250, + 36, 239, 233, 209, 237, 30, 251, 129, 250, 36, 209, 153, 209, 237, 30, + 251, 129, 250, 36, 240, 19, 209, 237, 30, 251, 129, 250, 36, 118, 236, + 12, 209, 237, 30, 251, 129, 250, 36, 239, 233, 236, 12, 209, 237, 30, + 251, 129, 250, 36, 118, 209, 37, 209, 237, 30, 251, 129, 250, 36, 239, + 233, 209, 37, 209, 237, 30, 251, 129, 250, 36, 239, 233, 211, 88, 30, + 251, 129, 250, 36, 209, 153, 211, 88, 30, 251, 129, 250, 36, 240, 19, + 211, 88, 30, 251, 129, 250, 36, 118, 236, 12, 211, 88, 30, 251, 129, 250, + 36, 239, 233, 236, 12, 211, 88, 30, 251, 129, 250, 36, 118, 209, 37, 211, + 88, 30, 251, 129, 250, 36, 209, 153, 209, 37, 211, 88, 30, 251, 129, 250, + 36, 240, 19, 209, 37, 211, 88, 30, 251, 129, 250, 36, 209, 153, 224, 85, + 30, 251, 129, 237, 29, 118, 218, 86, 30, 251, 129, 209, 76, 105, 30, 251, + 129, 237, 25, 105, 30, 251, 129, 241, 41, 108, 30, 251, 129, 209, 76, + 108, 30, 251, 129, 245, 56, 120, 242, 64, 30, 251, 129, 241, 41, 120, + 242, 64, 30, 251, 129, 208, 61, 170, 30, 251, 129, 208, 61, 209, 152, 30, + 251, 129, 208, 61, 209, 153, 250, 255, 18, 30, 251, 129, 237, 25, 209, + 152, 30, 251, 129, 224, 222, 209, 152, 30, 251, 129, 209, 76, 209, 152, + 30, 251, 129, 209, 76, 209, 53, 30, 251, 129, 208, 61, 240, 18, 30, 251, + 129, 208, 61, 240, 19, 250, 255, 18, 30, 251, 129, 237, 25, 240, 18, 30, + 251, 129, 209, 76, 240, 18, 30, 251, 129, 209, 76, 118, 236, 11, 30, 251, + 129, 209, 76, 126, 236, 11, 30, 251, 129, 241, 41, 239, 233, 236, 11, 30, + 251, 129, 208, 61, 239, 233, 236, 11, 30, 251, 129, 209, 76, 239, 233, + 236, 11, 30, 251, 129, 247, 21, 239, 233, 236, 11, 30, 251, 129, 223, 60, + 239, 233, 236, 11, 30, 251, 129, 209, 76, 118, 209, 36, 30, 251, 129, + 209, 76, 239, 233, 209, 36, 30, 251, 129, 244, 40, 239, 233, 224, 85, 30, + 251, 129, 211, 49, 240, 19, 224, 85, 30, 118, 162, 54, 30, 118, 162, 2, + 250, 255, 18, 30, 120, 209, 58, 54, 30, 126, 217, 54, 54, 30, 203, 50, + 54, 30, 209, 238, 54, 30, 242, 66, 54, 30, 220, 87, 54, 30, 120, 220, 86, + 54, 30, 126, 220, 86, 54, 30, 239, 147, 220, 86, 54, 30, 239, 233, 220, + 86, 54, 30, 224, 216, 54, 30, 228, 139, 248, 219, 54, 30, 227, 88, 54, + 30, 219, 213, 54, 30, 203, 173, 54, 30, 250, 87, 54, 30, 250, 102, 54, + 30, 238, 7, 54, 30, 208, 23, 248, 219, 54, 30, 202, 85, 54, 30, 118, 217, + 56, 54, 30, 212, 113, 54, 215, 210, 213, 102, 54, 215, 210, 206, 249, 54, + 215, 210, 213, 135, 54, 215, 210, 213, 100, 54, 215, 210, 243, 183, 213, + 100, 54, 215, 210, 212, 135, 54, 215, 210, 244, 36, 54, 215, 210, 217, + 39, 54, 215, 210, 213, 119, 54, 215, 210, 242, 23, 54, 215, 210, 250, 82, + 54, 215, 210, 246, 213, 54, 30, 16, 209, 208, 216, 59, 218, 203, 243, + 160, 2, 219, 25, 218, 203, 243, 160, 2, 218, 78, 237, 64, 218, 203, 243, + 160, 2, 209, 211, 237, 64, 218, 203, 243, 160, 2, 247, 42, 218, 203, 243, + 160, 2, 246, 133, 218, 203, 243, 160, 2, 203, 250, 218, 203, 243, 160, 2, + 237, 35, 218, 203, 243, 160, 2, 238, 213, 218, 203, 243, 160, 2, 209, 0, + 218, 203, 243, 160, 2, 47, 218, 203, 243, 160, 2, 247, 240, 218, 203, + 243, 160, 2, 213, 8, 218, 203, 243, 160, 2, 246, 4, 218, 203, 243, 160, + 2, 225, 121, 218, 203, 243, 160, 2, 225, 68, 218, 203, 243, 160, 2, 214, + 213, 218, 203, 243, 160, 2, 227, 143, 218, 203, 243, 160, 2, 248, 5, 218, + 203, 243, 160, 2, 247, 26, 218, 91, 218, 203, 243, 160, 2, 243, 98, 218, + 203, 243, 160, 2, 245, 239, 218, 203, 243, 160, 2, 212, 46, 218, 203, + 243, 160, 2, 245, 240, 218, 203, 243, 160, 2, 248, 147, 218, 203, 243, + 160, 2, 212, 251, 218, 203, 243, 160, 2, 236, 53, 218, 203, 243, 160, 2, + 237, 1, 218, 203, 243, 160, 2, 247, 174, 227, 210, 218, 203, 243, 160, 2, + 247, 17, 218, 203, 243, 160, 2, 216, 184, 218, 203, 243, 160, 2, 241, + 186, 218, 203, 243, 160, 2, 242, 71, 218, 203, 243, 160, 2, 207, 188, + 218, 203, 243, 160, 2, 248, 150, 218, 203, 243, 160, 2, 218, 92, 208, 95, + 218, 203, 243, 160, 2, 205, 211, 218, 203, 243, 160, 2, 219, 92, 218, + 203, 243, 160, 2, 215, 201, 218, 203, 243, 160, 2, 227, 127, 218, 203, + 243, 160, 2, 219, 194, 249, 25, 218, 203, 243, 160, 2, 239, 193, 218, + 203, 243, 160, 2, 237, 255, 218, 203, 243, 160, 2, 211, 50, 218, 203, + 243, 160, 2, 5, 250, 9, 218, 203, 243, 160, 2, 204, 72, 248, 238, 218, + 203, 243, 160, 2, 39, 220, 89, 95, 226, 197, 1, 63, 226, 197, 1, 74, 226, + 197, 1, 249, 255, 226, 197, 1, 248, 99, 226, 197, 1, 239, 75, 226, 197, + 1, 245, 51, 226, 197, 1, 75, 226, 197, 1, 204, 144, 226, 197, 1, 202, + 159, 226, 197, 1, 209, 110, 226, 197, 1, 230, 184, 226, 197, 1, 230, 54, + 226, 197, 1, 217, 134, 226, 197, 1, 159, 226, 197, 1, 226, 185, 226, 197, + 1, 223, 163, 226, 197, 1, 224, 87, 226, 197, 1, 221, 228, 226, 197, 1, + 68, 226, 197, 1, 219, 184, 226, 197, 1, 229, 48, 226, 197, 1, 146, 226, + 197, 1, 194, 226, 197, 1, 210, 69, 226, 197, 1, 207, 244, 226, 197, 1, + 250, 231, 226, 197, 1, 241, 92, 226, 197, 1, 237, 171, 226, 197, 1, 203, + 196, 247, 32, 1, 63, 247, 32, 1, 219, 170, 247, 32, 1, 245, 51, 247, 32, + 1, 159, 247, 32, 1, 206, 176, 247, 32, 1, 146, 247, 32, 1, 227, 238, 247, + 32, 1, 254, 34, 247, 32, 1, 217, 134, 247, 32, 1, 249, 255, 247, 32, 1, + 226, 185, 247, 32, 1, 78, 247, 32, 1, 244, 214, 247, 32, 1, 210, 69, 247, + 32, 1, 213, 92, 247, 32, 1, 213, 91, 247, 32, 1, 194, 247, 32, 1, 247, + 124, 247, 32, 1, 68, 247, 32, 1, 221, 228, 247, 32, 1, 203, 196, 247, 32, + 1, 223, 163, 247, 32, 1, 207, 243, 247, 32, 1, 219, 184, 247, 32, 1, 211, + 167, 247, 32, 1, 75, 247, 32, 1, 74, 247, 32, 1, 206, 173, 247, 32, 1, + 230, 54, 247, 32, 1, 230, 45, 247, 32, 1, 223, 27, 247, 32, 1, 206, 178, + 247, 32, 1, 239, 75, 247, 32, 1, 239, 10, 247, 32, 1, 211, 108, 247, 32, + 1, 211, 107, 247, 32, 1, 222, 205, 247, 32, 1, 231, 83, 247, 32, 1, 247, + 123, 247, 32, 1, 207, 244, 247, 32, 1, 206, 175, 247, 32, 1, 215, 186, + 247, 32, 1, 225, 59, 247, 32, 1, 225, 58, 247, 32, 1, 225, 57, 247, 32, + 1, 225, 56, 247, 32, 1, 227, 237, 247, 32, 1, 241, 190, 247, 32, 1, 206, + 174, 84, 241, 44, 209, 35, 82, 84, 241, 44, 17, 105, 84, 241, 44, 17, + 108, 84, 241, 44, 17, 147, 84, 241, 44, 17, 149, 84, 241, 44, 17, 170, + 84, 241, 44, 17, 195, 84, 241, 44, 17, 213, 111, 84, 241, 44, 17, 199, + 84, 241, 44, 17, 222, 63, 84, 241, 44, 42, 209, 152, 84, 241, 44, 42, + 207, 151, 84, 241, 44, 42, 209, 53, 84, 241, 44, 42, 239, 153, 84, 241, + 44, 42, 240, 18, 84, 241, 44, 42, 212, 74, 84, 241, 44, 42, 213, 105, 84, + 241, 44, 42, 241, 134, 84, 241, 44, 42, 222, 58, 84, 241, 44, 42, 118, + 236, 11, 84, 241, 44, 42, 120, 236, 11, 84, 241, 44, 42, 126, 236, 11, + 84, 241, 44, 42, 239, 147, 236, 11, 84, 241, 44, 42, 239, 233, 236, 11, + 84, 241, 44, 42, 212, 88, 236, 11, 84, 241, 44, 42, 213, 112, 236, 11, + 84, 241, 44, 42, 241, 143, 236, 11, 84, 241, 44, 42, 222, 64, 236, 11, + 38, 37, 1, 63, 38, 37, 1, 248, 162, 38, 37, 1, 229, 201, 38, 37, 1, 244, + 75, 38, 37, 1, 74, 38, 37, 1, 206, 55, 38, 37, 1, 202, 92, 38, 37, 1, + 237, 67, 38, 37, 1, 209, 92, 38, 37, 1, 75, 38, 37, 1, 173, 38, 37, 1, + 241, 122, 38, 37, 1, 241, 103, 38, 37, 1, 241, 92, 38, 37, 1, 241, 7, 38, + 37, 1, 78, 38, 37, 1, 219, 34, 38, 37, 1, 213, 43, 38, 37, 1, 228, 209, + 38, 37, 1, 241, 28, 38, 37, 1, 241, 17, 38, 37, 1, 209, 187, 38, 37, 1, + 68, 38, 37, 1, 241, 125, 38, 37, 1, 218, 195, 38, 37, 1, 229, 129, 38, + 37, 1, 241, 154, 38, 37, 1, 241, 19, 38, 37, 1, 246, 170, 38, 37, 1, 231, + 83, 38, 37, 1, 206, 178, 38, 37, 1, 241, 0, 38, 37, 221, 44, 105, 38, 37, + 221, 44, 170, 38, 37, 221, 44, 209, 152, 38, 37, 221, 44, 240, 18, 238, + 17, 1, 251, 67, 238, 17, 1, 248, 255, 238, 17, 1, 238, 78, 238, 17, 1, + 244, 194, 238, 17, 1, 251, 63, 238, 17, 1, 217, 117, 238, 17, 1, 230, + 196, 238, 17, 1, 237, 150, 238, 17, 1, 209, 49, 238, 17, 1, 241, 133, + 238, 17, 1, 228, 176, 238, 17, 1, 228, 90, 238, 17, 1, 225, 114, 238, 17, + 1, 223, 62, 238, 17, 1, 230, 154, 238, 17, 1, 206, 196, 238, 17, 1, 219, + 145, 238, 17, 1, 222, 58, 238, 17, 1, 216, 196, 238, 17, 1, 214, 216, + 238, 17, 1, 209, 166, 238, 17, 1, 204, 10, 238, 17, 1, 240, 88, 238, 17, + 1, 231, 87, 238, 17, 1, 235, 252, 238, 17, 1, 219, 223, 238, 17, 1, 222, + 64, 236, 11, 38, 218, 237, 1, 250, 231, 38, 218, 237, 1, 247, 160, 38, + 218, 237, 1, 238, 248, 38, 218, 237, 1, 243, 101, 38, 218, 237, 1, 74, + 38, 218, 237, 1, 202, 62, 38, 218, 237, 1, 241, 247, 38, 218, 237, 1, + 202, 99, 38, 218, 237, 1, 241, 245, 38, 218, 237, 1, 75, 38, 218, 237, 1, + 229, 15, 38, 218, 237, 1, 227, 206, 38, 218, 237, 1, 224, 238, 38, 218, + 237, 1, 222, 228, 38, 218, 237, 1, 205, 175, 38, 218, 237, 1, 219, 22, + 38, 218, 237, 1, 216, 121, 38, 218, 237, 1, 212, 142, 38, 218, 237, 1, + 209, 250, 38, 218, 237, 1, 68, 38, 218, 237, 1, 246, 151, 38, 218, 237, + 1, 212, 235, 38, 218, 237, 1, 213, 45, 38, 218, 237, 1, 202, 215, 38, + 218, 237, 1, 203, 30, 38, 218, 237, 1, 78, 38, 218, 237, 1, 220, 18, 38, + 218, 237, 1, 241, 154, 38, 218, 237, 1, 152, 38, 218, 237, 1, 207, 254, + 38, 218, 237, 1, 206, 43, 38, 218, 237, 1, 203, 34, 38, 218, 237, 1, 203, + 32, 38, 218, 237, 1, 203, 66, 38, 218, 237, 1, 231, 110, 38, 218, 237, 1, + 202, 213, 38, 218, 237, 1, 198, 38, 218, 237, 1, 235, 171, 39, 38, 218, + 237, 1, 250, 231, 39, 38, 218, 237, 1, 243, 101, 39, 38, 218, 237, 1, + 202, 99, 39, 38, 218, 237, 1, 222, 228, 39, 38, 218, 237, 1, 212, 142, + 207, 19, 1, 251, 6, 207, 19, 1, 248, 106, 207, 19, 1, 238, 236, 207, 19, + 1, 229, 144, 207, 19, 1, 244, 37, 207, 19, 1, 236, 136, 207, 19, 1, 204, + 0, 207, 19, 1, 202, 83, 207, 19, 1, 236, 45, 207, 19, 1, 209, 132, 207, + 19, 1, 202, 236, 207, 19, 1, 230, 22, 207, 19, 1, 212, 255, 207, 19, 1, + 228, 24, 207, 19, 1, 224, 247, 207, 19, 1, 243, 253, 207, 19, 1, 221, 40, + 207, 19, 1, 202, 6, 207, 19, 1, 214, 248, 207, 19, 1, 251, 59, 207, 19, + 1, 217, 191, 207, 19, 1, 215, 27, 207, 19, 1, 217, 70, 207, 19, 1, 216, + 175, 207, 19, 1, 209, 96, 207, 19, 1, 238, 114, 207, 19, 1, 135, 207, 19, + 1, 75, 207, 19, 1, 68, 207, 19, 1, 211, 119, 207, 19, 203, 238, 243, 141, + 38, 218, 231, 2, 63, 38, 218, 231, 2, 75, 38, 218, 231, 2, 68, 38, 218, + 231, 2, 173, 38, 218, 231, 2, 228, 209, 38, 218, 231, 2, 239, 8, 38, 218, + 231, 2, 237, 230, 38, 218, 231, 2, 203, 182, 38, 218, 231, 2, 247, 92, + 38, 218, 231, 2, 230, 181, 38, 218, 231, 2, 230, 141, 38, 218, 231, 2, + 210, 22, 38, 218, 231, 2, 207, 203, 38, 218, 231, 2, 244, 212, 38, 218, + 231, 2, 243, 233, 38, 218, 231, 2, 242, 42, 38, 218, 231, 2, 209, 108, + 38, 218, 231, 2, 185, 38, 218, 231, 2, 249, 32, 38, 218, 231, 2, 240, + 108, 38, 218, 231, 2, 201, 201, 38, 218, 231, 2, 221, 84, 38, 218, 231, + 2, 192, 38, 218, 231, 2, 224, 155, 38, 218, 231, 2, 223, 246, 38, 218, + 231, 2, 198, 38, 218, 231, 2, 206, 86, 38, 218, 231, 2, 205, 230, 38, + 218, 231, 2, 216, 220, 38, 218, 231, 2, 215, 145, 38, 218, 231, 2, 228, + 113, 38, 218, 231, 2, 215, 36, 38, 218, 231, 2, 202, 116, 38, 218, 231, + 2, 213, 90, 38, 218, 231, 2, 211, 164, 38, 218, 231, 2, 152, 38, 218, + 231, 2, 250, 28, 38, 218, 231, 2, 250, 27, 38, 218, 231, 2, 250, 26, 38, + 218, 231, 2, 203, 153, 38, 218, 231, 2, 244, 190, 38, 218, 231, 2, 244, + 189, 38, 218, 231, 2, 249, 8, 38, 218, 231, 2, 247, 144, 38, 218, 231, + 203, 238, 243, 141, 38, 218, 231, 42, 105, 38, 218, 231, 42, 108, 38, + 218, 231, 42, 209, 152, 38, 218, 231, 42, 207, 151, 38, 218, 231, 42, + 236, 11, 244, 17, 6, 1, 163, 75, 244, 17, 6, 1, 163, 74, 244, 17, 6, 1, + 163, 63, 244, 17, 6, 1, 163, 251, 73, 244, 17, 6, 1, 163, 78, 244, 17, 6, + 1, 163, 220, 18, 244, 17, 6, 1, 212, 228, 75, 244, 17, 6, 1, 212, 228, + 74, 244, 17, 6, 1, 212, 228, 63, 244, 17, 6, 1, 212, 228, 251, 73, 244, + 17, 6, 1, 212, 228, 78, 244, 17, 6, 1, 212, 228, 220, 18, 244, 17, 6, 1, + 250, 8, 244, 17, 6, 1, 219, 195, 244, 17, 6, 1, 203, 217, 244, 17, 6, 1, + 203, 49, 244, 17, 6, 1, 237, 171, 244, 17, 6, 1, 219, 23, 244, 17, 6, 1, + 248, 150, 244, 17, 6, 1, 209, 176, 244, 17, 6, 1, 244, 61, 244, 17, 6, 1, + 246, 166, 244, 17, 6, 1, 230, 159, 244, 17, 6, 1, 229, 208, 244, 17, 6, + 1, 238, 211, 244, 17, 6, 1, 241, 154, 244, 17, 6, 1, 206, 50, 244, 17, 6, + 1, 240, 243, 244, 17, 6, 1, 209, 90, 244, 17, 6, 1, 241, 17, 244, 17, 6, + 1, 202, 90, 244, 17, 6, 1, 241, 7, 244, 17, 6, 1, 202, 70, 244, 17, 6, 1, + 241, 28, 244, 17, 6, 1, 241, 122, 244, 17, 6, 1, 241, 103, 244, 17, 6, 1, + 241, 92, 244, 17, 6, 1, 241, 78, 244, 17, 6, 1, 220, 57, 244, 17, 6, 1, + 240, 220, 244, 17, 5, 1, 163, 75, 244, 17, 5, 1, 163, 74, 244, 17, 5, 1, + 163, 63, 244, 17, 5, 1, 163, 251, 73, 244, 17, 5, 1, 163, 78, 244, 17, 5, + 1, 163, 220, 18, 244, 17, 5, 1, 212, 228, 75, 244, 17, 5, 1, 212, 228, + 74, 244, 17, 5, 1, 212, 228, 63, 244, 17, 5, 1, 212, 228, 251, 73, 244, + 17, 5, 1, 212, 228, 78, 244, 17, 5, 1, 212, 228, 220, 18, 244, 17, 5, 1, + 250, 8, 244, 17, 5, 1, 219, 195, 244, 17, 5, 1, 203, 217, 244, 17, 5, 1, + 203, 49, 244, 17, 5, 1, 237, 171, 244, 17, 5, 1, 219, 23, 244, 17, 5, 1, + 248, 150, 244, 17, 5, 1, 209, 176, 244, 17, 5, 1, 244, 61, 244, 17, 5, 1, + 246, 166, 244, 17, 5, 1, 230, 159, 244, 17, 5, 1, 229, 208, 244, 17, 5, + 1, 238, 211, 244, 17, 5, 1, 241, 154, 244, 17, 5, 1, 206, 50, 244, 17, 5, + 1, 240, 243, 244, 17, 5, 1, 209, 90, 244, 17, 5, 1, 241, 17, 244, 17, 5, + 1, 202, 90, 244, 17, 5, 1, 241, 7, 244, 17, 5, 1, 202, 70, 244, 17, 5, 1, + 241, 28, 244, 17, 5, 1, 241, 122, 244, 17, 5, 1, 241, 103, 244, 17, 5, 1, + 241, 92, 244, 17, 5, 1, 241, 78, 244, 17, 5, 1, 220, 57, 244, 17, 5, 1, + 240, 220, 213, 50, 1, 219, 20, 213, 50, 1, 208, 131, 213, 50, 1, 229, 96, + 213, 50, 1, 240, 53, 213, 50, 1, 209, 65, 213, 50, 1, 212, 13, 213, 50, + 1, 210, 190, 213, 50, 1, 246, 90, 213, 50, 1, 203, 51, 213, 50, 1, 236, + 9, 213, 50, 1, 248, 85, 213, 50, 1, 244, 74, 213, 50, 1, 238, 250, 213, + 50, 1, 205, 170, 213, 50, 1, 209, 71, 213, 50, 1, 202, 15, 213, 50, 1, + 225, 18, 213, 50, 1, 230, 80, 213, 50, 1, 203, 254, 213, 50, 1, 237, 159, + 213, 50, 1, 227, 33, 213, 50, 1, 224, 111, 213, 50, 1, 231, 90, 213, 50, + 1, 241, 152, 213, 50, 1, 250, 75, 213, 50, 1, 251, 113, 213, 50, 1, 220, + 31, 213, 50, 1, 203, 241, 213, 50, 1, 219, 211, 213, 50, 1, 251, 73, 213, + 50, 1, 215, 224, 213, 50, 1, 221, 40, 213, 50, 1, 241, 172, 213, 50, 1, + 251, 78, 213, 50, 1, 235, 162, 213, 50, 1, 206, 224, 213, 50, 1, 220, 95, + 213, 50, 1, 220, 10, 213, 50, 1, 220, 55, 213, 50, 1, 250, 11, 213, 50, + 1, 250, 121, 213, 50, 1, 219, 244, 213, 50, 1, 251, 54, 213, 50, 1, 241, + 21, 213, 50, 1, 250, 99, 213, 50, 1, 241, 183, 213, 50, 1, 235, 170, 213, + 50, 1, 203, 16, 219, 225, 1, 251, 30, 219, 225, 1, 249, 32, 219, 225, 1, + 210, 22, 219, 225, 1, 230, 181, 219, 225, 1, 203, 182, 219, 225, 1, 229, + 144, 219, 225, 1, 244, 60, 219, 225, 1, 216, 220, 219, 225, 1, 215, 36, + 219, 225, 1, 213, 5, 219, 225, 1, 244, 1, 219, 225, 1, 247, 7, 219, 225, + 1, 239, 8, 219, 225, 1, 240, 108, 219, 225, 1, 217, 124, 219, 225, 1, + 230, 38, 219, 225, 1, 228, 108, 219, 225, 1, 224, 124, 219, 225, 1, 221, + 24, 219, 225, 1, 204, 70, 219, 225, 1, 152, 219, 225, 1, 198, 219, 225, + 1, 63, 219, 225, 1, 74, 219, 225, 1, 75, 219, 225, 1, 78, 219, 225, 1, + 68, 219, 225, 1, 252, 25, 219, 225, 1, 241, 161, 219, 225, 1, 220, 18, + 219, 225, 17, 202, 84, 219, 225, 17, 105, 219, 225, 17, 108, 219, 225, + 17, 147, 219, 225, 17, 149, 219, 225, 17, 170, 219, 225, 17, 195, 219, + 225, 17, 213, 111, 219, 225, 17, 199, 219, 225, 17, 222, 63, 241, 118, 1, + 63, 241, 118, 1, 248, 162, 241, 118, 1, 246, 238, 241, 118, 1, 246, 170, + 241, 118, 1, 244, 75, 241, 118, 1, 223, 17, 241, 118, 1, 243, 248, 241, + 118, 1, 241, 145, 241, 118, 1, 74, 241, 118, 1, 240, 60, 241, 118, 1, + 238, 190, 241, 118, 1, 238, 52, 241, 118, 1, 237, 67, 241, 118, 1, 75, + 241, 118, 1, 230, 161, 241, 118, 1, 229, 201, 241, 118, 1, 227, 234, 241, + 118, 1, 227, 73, 241, 118, 1, 225, 20, 241, 118, 1, 222, 240, 241, 118, + 1, 201, 201, 241, 118, 1, 222, 41, 241, 118, 1, 78, 241, 118, 1, 219, 34, + 241, 118, 1, 217, 106, 241, 118, 1, 216, 158, 241, 118, 1, 215, 180, 241, + 118, 1, 214, 177, 241, 118, 1, 213, 43, 241, 118, 1, 209, 187, 241, 118, + 1, 209, 92, 241, 118, 1, 68, 241, 118, 1, 206, 55, 241, 118, 1, 203, 176, + 241, 118, 1, 203, 124, 241, 118, 1, 202, 92, 241, 118, 1, 202, 71, 241, + 118, 1, 238, 105, 241, 118, 1, 238, 111, 241, 118, 1, 229, 129, 247, 14, + 251, 31, 1, 251, 1, 247, 14, 251, 31, 1, 248, 108, 247, 14, 251, 31, 1, + 238, 69, 247, 14, 251, 31, 1, 244, 140, 247, 14, 251, 31, 1, 241, 171, + 247, 14, 251, 31, 1, 202, 102, 247, 14, 251, 31, 1, 240, 183, 247, 14, + 251, 31, 1, 202, 65, 247, 14, 251, 31, 1, 209, 213, 247, 14, 251, 31, 1, + 246, 199, 247, 14, 251, 31, 1, 202, 224, 247, 14, 251, 31, 1, 202, 80, + 247, 14, 251, 31, 1, 230, 223, 247, 14, 251, 31, 1, 213, 90, 247, 14, + 251, 31, 1, 228, 17, 247, 14, 251, 31, 1, 230, 235, 247, 14, 251, 31, 1, + 203, 172, 247, 14, 251, 31, 1, 242, 7, 247, 14, 251, 31, 1, 247, 39, 247, + 14, 251, 31, 1, 230, 142, 247, 14, 251, 31, 1, 229, 240, 247, 14, 251, + 31, 1, 226, 194, 247, 14, 251, 31, 1, 237, 14, 247, 14, 251, 31, 1, 217, + 107, 247, 14, 251, 31, 1, 250, 177, 247, 14, 251, 31, 1, 246, 107, 247, + 14, 251, 31, 1, 246, 142, 247, 14, 251, 31, 1, 245, 63, 247, 14, 251, 31, + 1, 225, 103, 247, 14, 251, 31, 1, 217, 111, 247, 14, 251, 31, 1, 221, + 151, 247, 14, 251, 31, 1, 241, 240, 247, 14, 251, 31, 1, 213, 73, 247, + 14, 251, 31, 1, 230, 162, 247, 14, 251, 31, 1, 220, 31, 247, 14, 251, 31, + 1, 207, 125, 247, 14, 251, 31, 1, 240, 83, 247, 14, 251, 31, 1, 241, 253, + 247, 14, 251, 31, 1, 246, 176, 247, 14, 251, 31, 1, 219, 9, 247, 14, 251, + 31, 1, 238, 95, 247, 14, 251, 31, 1, 216, 172, 247, 14, 251, 31, 1, 213, + 99, 247, 14, 251, 31, 1, 205, 232, 247, 14, 251, 31, 1, 208, 193, 247, + 14, 251, 31, 1, 212, 207, 247, 14, 251, 31, 1, 230, 194, 247, 14, 251, + 31, 1, 245, 64, 247, 14, 251, 31, 1, 247, 7, 247, 14, 251, 31, 1, 203, + 56, 247, 14, 251, 31, 1, 218, 102, 247, 14, 251, 31, 1, 229, 62, 247, 14, + 251, 31, 246, 49, 82, 29, 34, 2, 251, 231, 29, 34, 2, 251, 230, 29, 34, + 2, 251, 229, 29, 34, 2, 251, 228, 29, 34, 2, 251, 227, 29, 34, 2, 251, + 226, 29, 34, 2, 251, 225, 29, 34, 2, 251, 224, 29, 34, 2, 251, 223, 29, + 34, 2, 251, 222, 29, 34, 2, 251, 221, 29, 34, 2, 251, 220, 29, 34, 2, + 251, 219, 29, 34, 2, 251, 218, 29, 34, 2, 251, 217, 29, 34, 2, 251, 216, + 29, 34, 2, 251, 215, 29, 34, 2, 251, 214, 29, 34, 2, 251, 213, 29, 34, 2, + 251, 212, 29, 34, 2, 251, 211, 29, 34, 2, 251, 210, 29, 34, 2, 251, 209, + 29, 34, 2, 251, 208, 29, 34, 2, 251, 207, 29, 34, 2, 251, 206, 29, 34, 2, + 251, 205, 29, 34, 2, 254, 239, 29, 34, 2, 251, 204, 29, 34, 2, 251, 203, + 29, 34, 2, 251, 202, 29, 34, 2, 251, 201, 29, 34, 2, 251, 200, 29, 34, 2, + 251, 199, 29, 34, 2, 251, 198, 29, 34, 2, 251, 197, 29, 34, 2, 251, 196, + 29, 34, 2, 251, 195, 29, 34, 2, 251, 194, 29, 34, 2, 251, 193, 29, 34, 2, + 251, 192, 29, 34, 2, 251, 191, 29, 34, 2, 251, 190, 29, 34, 2, 251, 189, + 29, 34, 2, 251, 188, 29, 34, 2, 251, 187, 29, 34, 2, 251, 186, 29, 34, 2, + 251, 185, 29, 34, 2, 251, 184, 29, 34, 2, 251, 183, 29, 34, 2, 251, 182, + 29, 34, 2, 251, 181, 29, 34, 2, 251, 180, 29, 34, 2, 251, 179, 29, 34, 2, + 251, 178, 29, 34, 2, 251, 177, 29, 34, 2, 251, 176, 29, 34, 2, 251, 175, + 29, 34, 2, 251, 174, 29, 34, 2, 251, 173, 29, 34, 2, 251, 172, 29, 34, 2, + 251, 171, 29, 34, 2, 251, 170, 29, 34, 2, 251, 169, 29, 34, 2, 251, 168, + 29, 34, 2, 251, 167, 29, 34, 2, 251, 166, 29, 34, 2, 251, 165, 29, 34, 2, + 251, 164, 29, 34, 2, 251, 163, 29, 34, 2, 251, 162, 29, 34, 2, 254, 152, + 29, 34, 2, 251, 161, 29, 34, 2, 251, 160, 29, 34, 2, 254, 117, 29, 34, 2, + 251, 159, 29, 34, 2, 251, 158, 29, 34, 2, 251, 157, 29, 34, 2, 251, 156, + 29, 34, 2, 254, 104, 29, 34, 2, 251, 155, 29, 34, 2, 251, 154, 29, 34, 2, + 251, 153, 29, 34, 2, 251, 152, 29, 34, 2, 251, 151, 29, 34, 2, 253, 176, + 29, 34, 2, 253, 175, 29, 34, 2, 253, 174, 29, 34, 2, 253, 173, 29, 34, 2, + 253, 172, 29, 34, 2, 253, 171, 29, 34, 2, 253, 170, 29, 34, 2, 253, 169, + 29, 34, 2, 253, 167, 29, 34, 2, 253, 166, 29, 34, 2, 253, 165, 29, 34, 2, + 253, 164, 29, 34, 2, 253, 163, 29, 34, 2, 253, 162, 29, 34, 2, 253, 160, + 29, 34, 2, 253, 159, 29, 34, 2, 253, 158, 29, 34, 2, 253, 157, 29, 34, 2, + 253, 156, 29, 34, 2, 253, 155, 29, 34, 2, 253, 154, 29, 34, 2, 253, 153, + 29, 34, 2, 253, 152, 29, 34, 2, 253, 151, 29, 34, 2, 253, 150, 29, 34, 2, + 253, 149, 29, 34, 2, 253, 148, 29, 34, 2, 253, 147, 29, 34, 2, 253, 146, + 29, 34, 2, 253, 145, 29, 34, 2, 253, 144, 29, 34, 2, 253, 143, 29, 34, 2, + 253, 142, 29, 34, 2, 253, 140, 29, 34, 2, 253, 139, 29, 34, 2, 253, 138, + 29, 34, 2, 253, 134, 29, 34, 2, 253, 133, 29, 34, 2, 253, 132, 29, 34, 2, + 253, 131, 29, 34, 2, 253, 127, 29, 34, 2, 253, 126, 29, 34, 2, 253, 125, + 29, 34, 2, 253, 124, 29, 34, 2, 253, 123, 29, 34, 2, 253, 122, 29, 34, 2, + 253, 121, 29, 34, 2, 253, 120, 29, 34, 2, 253, 119, 29, 34, 2, 253, 118, + 29, 34, 2, 253, 117, 29, 34, 2, 253, 116, 29, 34, 2, 253, 115, 29, 34, 2, + 253, 114, 29, 34, 2, 253, 113, 29, 34, 2, 253, 112, 29, 34, 2, 253, 111, + 29, 34, 2, 253, 110, 29, 34, 2, 253, 109, 29, 34, 2, 253, 108, 29, 34, 2, + 253, 107, 29, 34, 2, 253, 106, 29, 34, 2, 253, 105, 29, 34, 2, 253, 103, + 29, 34, 2, 253, 102, 29, 34, 2, 253, 101, 29, 34, 2, 253, 100, 29, 34, 2, + 253, 99, 29, 34, 2, 253, 97, 29, 34, 2, 253, 96, 29, 34, 2, 253, 95, 29, + 34, 2, 253, 94, 29, 34, 2, 253, 92, 29, 34, 2, 253, 91, 29, 34, 2, 253, + 90, 29, 34, 2, 253, 56, 29, 34, 2, 253, 54, 29, 34, 2, 253, 52, 29, 34, + 2, 253, 50, 29, 34, 2, 253, 48, 29, 34, 2, 253, 46, 29, 34, 2, 253, 44, + 29, 34, 2, 253, 42, 29, 34, 2, 253, 40, 29, 34, 2, 253, 38, 29, 34, 2, + 253, 36, 29, 34, 2, 253, 33, 29, 34, 2, 253, 31, 29, 34, 2, 253, 29, 29, + 34, 2, 253, 27, 29, 34, 2, 253, 25, 29, 34, 2, 253, 23, 29, 34, 2, 253, + 21, 29, 34, 2, 253, 19, 29, 34, 2, 252, 193, 29, 34, 2, 252, 192, 29, 34, + 2, 252, 191, 29, 34, 2, 252, 190, 29, 34, 2, 252, 189, 29, 34, 2, 252, + 188, 29, 34, 2, 252, 186, 29, 34, 2, 252, 185, 29, 34, 2, 252, 184, 29, + 34, 2, 252, 183, 29, 34, 2, 252, 182, 29, 34, 2, 252, 181, 29, 34, 2, + 252, 179, 29, 34, 2, 252, 178, 29, 34, 2, 252, 174, 29, 34, 2, 252, 173, + 29, 34, 2, 252, 171, 29, 34, 2, 252, 170, 29, 34, 2, 252, 169, 29, 34, 2, + 252, 168, 29, 34, 2, 252, 167, 29, 34, 2, 252, 166, 29, 34, 2, 252, 165, + 29, 34, 2, 252, 164, 29, 34, 2, 252, 163, 29, 34, 2, 252, 162, 29, 34, 2, + 252, 161, 29, 34, 2, 252, 160, 29, 34, 2, 252, 159, 29, 34, 2, 252, 158, + 29, 34, 2, 252, 157, 29, 34, 2, 252, 156, 29, 34, 2, 252, 155, 29, 34, 2, + 252, 154, 29, 34, 2, 252, 153, 29, 34, 2, 252, 152, 29, 34, 2, 252, 151, + 29, 34, 2, 252, 150, 29, 34, 2, 252, 149, 29, 34, 2, 252, 148, 29, 34, 2, + 252, 147, 29, 34, 2, 252, 146, 29, 34, 2, 252, 145, 29, 34, 2, 252, 144, + 29, 34, 2, 252, 143, 29, 34, 2, 252, 142, 29, 34, 2, 252, 141, 29, 34, 2, + 252, 140, 29, 34, 2, 252, 139, 29, 34, 2, 252, 138, 29, 34, 2, 252, 137, + 29, 34, 2, 252, 136, 29, 34, 2, 252, 135, 29, 34, 2, 252, 134, 29, 34, 2, + 252, 133, 29, 34, 2, 252, 132, 29, 34, 2, 252, 131, 29, 34, 2, 252, 130, + 29, 34, 2, 252, 129, 29, 34, 2, 252, 128, 29, 34, 2, 252, 127, 29, 34, 2, + 252, 126, 29, 34, 2, 252, 125, 29, 34, 2, 252, 124, 29, 34, 2, 252, 123, + 29, 34, 2, 252, 122, 29, 34, 2, 252, 121, 29, 34, 2, 252, 120, 29, 34, 2, + 252, 119, 29, 34, 2, 252, 118, 29, 34, 2, 252, 117, 29, 34, 2, 252, 116, + 29, 34, 2, 252, 115, 29, 34, 2, 252, 114, 29, 34, 2, 252, 113, 29, 34, 2, + 252, 112, 29, 34, 2, 252, 111, 29, 34, 2, 252, 110, 29, 34, 2, 252, 109, + 29, 34, 2, 252, 108, 29, 34, 2, 252, 107, 29, 34, 2, 252, 106, 29, 34, 2, + 252, 105, 29, 34, 2, 252, 104, 29, 34, 2, 252, 103, 29, 34, 2, 252, 102, + 29, 34, 2, 252, 101, 29, 34, 2, 252, 100, 29, 34, 2, 252, 99, 29, 34, 2, + 252, 98, 29, 34, 2, 252, 97, 29, 34, 2, 252, 96, 29, 34, 2, 252, 95, 29, + 34, 2, 252, 94, 29, 34, 2, 252, 93, 29, 34, 2, 252, 92, 29, 34, 2, 252, + 91, 29, 34, 2, 252, 90, 29, 34, 2, 252, 89, 29, 34, 2, 252, 88, 29, 34, + 2, 252, 87, 29, 34, 2, 252, 86, 29, 34, 2, 252, 85, 29, 34, 2, 252, 84, + 29, 34, 2, 252, 83, 29, 34, 2, 252, 82, 29, 34, 2, 252, 81, 29, 34, 2, + 252, 80, 29, 34, 2, 252, 79, 29, 34, 2, 252, 78, 29, 34, 2, 252, 77, 29, + 34, 2, 252, 76, 29, 34, 2, 252, 75, 29, 34, 2, 252, 74, 29, 34, 2, 252, + 73, 29, 34, 2, 252, 72, 29, 34, 2, 252, 71, 29, 34, 2, 252, 70, 29, 34, + 2, 252, 69, 29, 34, 2, 252, 68, 29, 34, 2, 252, 67, 29, 34, 2, 252, 66, + 29, 34, 2, 252, 65, 29, 34, 2, 252, 64, 29, 34, 2, 252, 63, 29, 34, 2, + 252, 62, 29, 34, 2, 252, 61, 29, 34, 2, 252, 60, 29, 34, 2, 252, 59, 29, + 34, 2, 252, 58, 29, 34, 2, 252, 57, 29, 34, 2, 252, 56, 29, 34, 2, 252, + 55, 63, 29, 34, 2, 252, 54, 249, 255, 29, 34, 2, 252, 53, 245, 51, 29, + 34, 2, 252, 52, 74, 29, 34, 2, 252, 51, 240, 174, 29, 34, 2, 252, 50, + 237, 171, 29, 34, 2, 252, 49, 230, 184, 29, 34, 2, 252, 48, 230, 54, 29, + 34, 2, 252, 47, 159, 29, 34, 2, 252, 46, 228, 118, 29, 34, 2, 252, 45, + 228, 117, 29, 34, 2, 252, 44, 228, 116, 29, 34, 2, 252, 43, 228, 115, 29, + 34, 2, 252, 42, 204, 144, 29, 34, 2, 252, 41, 203, 196, 29, 34, 2, 252, + 40, 203, 124, 29, 34, 2, 252, 39, 220, 36, 29, 34, 2, 252, 38, 251, 147, + 29, 34, 2, 252, 37, 248, 199, 29, 34, 2, 252, 36, 244, 122, 29, 34, 2, + 252, 35, 240, 182, 29, 34, 2, 252, 34, 230, 161, 29, 34, 2, 252, 33, 29, + 34, 2, 252, 32, 29, 34, 2, 252, 31, 29, 34, 2, 252, 30, 29, 34, 2, 252, + 29, 29, 34, 2, 252, 28, 29, 34, 2, 252, 27, 29, 34, 2, 252, 26, 245, 58, + 4, 63, 245, 58, 4, 74, 245, 58, 4, 75, 245, 58, 4, 78, 245, 58, 4, 68, + 245, 58, 4, 230, 181, 245, 58, 4, 230, 101, 245, 58, 4, 173, 245, 58, 4, + 229, 201, 245, 58, 4, 229, 100, 245, 58, 4, 229, 26, 245, 58, 4, 228, + 209, 245, 58, 4, 228, 113, 245, 58, 4, 227, 234, 245, 58, 4, 227, 148, + 245, 58, 4, 227, 49, 245, 58, 4, 226, 239, 245, 58, 4, 192, 245, 58, 4, + 225, 20, 245, 58, 4, 224, 155, 245, 58, 4, 224, 82, 245, 58, 4, 223, 246, + 245, 58, 4, 201, 201, 245, 58, 4, 222, 240, 245, 58, 4, 222, 100, 245, + 58, 4, 221, 191, 245, 58, 4, 221, 84, 245, 58, 4, 185, 245, 58, 4, 219, + 34, 245, 58, 4, 218, 167, 245, 58, 4, 218, 69, 245, 58, 4, 217, 191, 245, + 58, 4, 216, 220, 245, 58, 4, 216, 158, 245, 58, 4, 216, 57, 245, 58, 4, + 215, 227, 245, 58, 4, 215, 145, 245, 58, 4, 215, 36, 245, 58, 4, 214, + 177, 245, 58, 4, 212, 162, 245, 58, 4, 212, 13, 245, 58, 4, 211, 10, 245, + 58, 4, 210, 22, 245, 58, 4, 209, 187, 245, 58, 4, 209, 2, 245, 58, 4, + 135, 245, 58, 4, 207, 203, 245, 58, 4, 204, 111, 245, 58, 4, 204, 62, + 245, 58, 4, 204, 30, 245, 58, 4, 204, 0, 245, 58, 4, 203, 182, 245, 58, + 4, 203, 176, 245, 58, 4, 202, 116, 245, 58, 4, 202, 17, 231, 51, 250, + 130, 1, 251, 28, 231, 51, 250, 130, 1, 248, 105, 231, 51, 250, 130, 1, + 238, 67, 231, 51, 250, 130, 1, 244, 177, 231, 51, 250, 130, 1, 237, 67, + 231, 51, 250, 130, 1, 204, 70, 231, 51, 250, 130, 1, 202, 95, 231, 51, + 250, 130, 1, 237, 19, 231, 51, 250, 130, 1, 209, 128, 231, 51, 250, 130, + 1, 202, 235, 231, 51, 250, 130, 1, 229, 250, 231, 51, 250, 130, 1, 228, + 19, 231, 51, 250, 130, 1, 224, 247, 231, 51, 250, 130, 1, 221, 40, 231, + 51, 250, 130, 1, 214, 249, 231, 51, 250, 130, 1, 250, 3, 231, 51, 250, + 130, 1, 219, 34, 231, 51, 250, 130, 1, 215, 26, 231, 51, 250, 130, 1, + 217, 69, 231, 51, 250, 130, 1, 216, 91, 231, 51, 250, 130, 1, 212, 255, + 231, 51, 250, 130, 1, 209, 201, 231, 51, 250, 130, 214, 168, 54, 231, 51, + 250, 130, 42, 105, 231, 51, 250, 130, 42, 108, 231, 51, 250, 130, 42, + 147, 231, 51, 250, 130, 42, 209, 152, 231, 51, 250, 130, 42, 207, 151, + 231, 51, 250, 130, 42, 118, 236, 11, 231, 51, 250, 130, 42, 118, 209, 36, + 231, 51, 250, 130, 42, 209, 153, 209, 36, 219, 134, 1, 251, 28, 219, 134, + 1, 248, 105, 219, 134, 1, 238, 67, 219, 134, 1, 244, 177, 219, 134, 1, + 237, 67, 219, 134, 1, 204, 70, 219, 134, 1, 202, 95, 219, 134, 1, 237, + 19, 219, 134, 1, 209, 128, 219, 134, 1, 202, 235, 219, 134, 1, 229, 250, + 219, 134, 1, 228, 19, 219, 134, 1, 224, 247, 219, 134, 1, 46, 221, 40, + 219, 134, 1, 221, 40, 219, 134, 1, 214, 249, 219, 134, 1, 250, 3, 219, + 134, 1, 219, 34, 219, 134, 1, 215, 26, 219, 134, 1, 217, 69, 219, 134, 1, + 216, 91, 219, 134, 1, 212, 255, 219, 134, 1, 209, 201, 219, 134, 227, + 217, 239, 212, 219, 134, 216, 11, 239, 212, 219, 134, 42, 105, 219, 134, + 42, 108, 219, 134, 42, 147, 219, 134, 42, 149, 219, 134, 42, 170, 219, + 134, 42, 209, 152, 219, 134, 42, 207, 151, 223, 102, 1, 46, 251, 28, 223, + 102, 1, 251, 28, 223, 102, 1, 46, 248, 105, 223, 102, 1, 248, 105, 223, + 102, 1, 238, 67, 223, 102, 1, 244, 177, 223, 102, 1, 46, 237, 67, 223, + 102, 1, 237, 67, 223, 102, 1, 204, 70, 223, 102, 1, 202, 95, 223, 102, 1, + 237, 19, 223, 102, 1, 209, 128, 223, 102, 1, 46, 202, 235, 223, 102, 1, + 202, 235, 223, 102, 1, 46, 229, 250, 223, 102, 1, 229, 250, 223, 102, 1, + 46, 228, 19, 223, 102, 1, 228, 19, 223, 102, 1, 46, 224, 247, 223, 102, + 1, 224, 247, 223, 102, 1, 46, 221, 40, 223, 102, 1, 221, 40, 223, 102, 1, + 214, 249, 223, 102, 1, 250, 3, 223, 102, 1, 219, 34, 223, 102, 1, 215, + 26, 223, 102, 1, 217, 69, 223, 102, 1, 216, 91, 223, 102, 1, 46, 212, + 255, 223, 102, 1, 212, 255, 223, 102, 1, 209, 201, 223, 102, 42, 105, + 223, 102, 42, 108, 223, 102, 42, 147, 223, 102, 42, 149, 223, 102, 245, + 116, 42, 149, 223, 102, 42, 170, 223, 102, 42, 209, 152, 223, 102, 42, + 207, 151, 223, 102, 42, 118, 236, 11, 237, 78, 1, 251, 28, 237, 78, 1, + 248, 105, 237, 78, 1, 238, 67, 237, 78, 1, 244, 176, 237, 78, 1, 237, 67, + 237, 78, 1, 204, 70, 237, 78, 1, 202, 94, 237, 78, 1, 237, 19, 237, 78, + 1, 209, 128, 237, 78, 1, 202, 235, 237, 78, 1, 229, 250, 237, 78, 1, 228, + 19, 237, 78, 1, 224, 247, 237, 78, 1, 221, 40, 237, 78, 1, 214, 249, 237, + 78, 1, 250, 2, 237, 78, 1, 219, 34, 237, 78, 1, 215, 26, 237, 78, 1, 217, + 69, 237, 78, 1, 212, 255, 237, 78, 1, 209, 201, 237, 78, 42, 105, 237, + 78, 42, 170, 237, 78, 42, 209, 152, 237, 78, 42, 207, 151, 237, 78, 42, + 118, 236, 11, 218, 178, 1, 251, 25, 218, 178, 1, 248, 108, 218, 178, 1, + 238, 237, 218, 178, 1, 244, 39, 218, 178, 1, 237, 67, 218, 178, 1, 204, + 77, 218, 178, 1, 202, 109, 218, 178, 1, 237, 21, 218, 178, 1, 209, 132, + 218, 178, 1, 202, 236, 218, 178, 1, 230, 22, 218, 178, 1, 228, 25, 218, + 178, 1, 224, 247, 218, 178, 1, 221, 40, 218, 178, 1, 213, 137, 218, 178, + 1, 251, 59, 218, 178, 1, 219, 34, 218, 178, 1, 215, 27, 218, 178, 1, 217, + 74, 218, 178, 1, 215, 200, 218, 178, 1, 212, 255, 218, 178, 1, 209, 207, + 218, 178, 42, 105, 218, 178, 42, 209, 152, 218, 178, 42, 207, 151, 218, + 178, 42, 118, 236, 11, 218, 178, 42, 108, 218, 178, 42, 147, 218, 178, + 203, 238, 213, 130, 226, 196, 1, 63, 226, 196, 1, 249, 255, 226, 196, 1, + 239, 75, 226, 196, 1, 245, 51, 226, 196, 1, 74, 226, 196, 1, 206, 164, + 226, 196, 1, 75, 226, 196, 1, 203, 124, 226, 196, 1, 230, 54, 226, 196, + 1, 159, 226, 196, 1, 226, 185, 226, 196, 1, 223, 163, 226, 196, 1, 78, + 226, 196, 1, 146, 226, 196, 1, 211, 167, 226, 196, 1, 210, 69, 226, 196, + 1, 68, 226, 196, 1, 240, 174, 226, 196, 1, 217, 134, 226, 196, 1, 194, + 226, 196, 1, 207, 244, 226, 196, 1, 250, 231, 226, 196, 1, 241, 92, 226, + 196, 1, 226, 199, 226, 196, 1, 221, 228, 226, 196, 1, 247, 125, 226, 196, + 208, 82, 82, 129, 236, 253, 1, 63, 129, 236, 253, 1, 74, 129, 236, 253, + 1, 75, 129, 236, 253, 1, 78, 129, 236, 253, 1, 198, 129, 236, 253, 1, + 204, 111, 129, 236, 253, 1, 249, 32, 129, 236, 253, 1, 249, 31, 129, 236, + 253, 1, 185, 129, 236, 253, 1, 192, 129, 236, 253, 1, 201, 201, 129, 236, + 253, 1, 223, 110, 129, 236, 253, 1, 222, 240, 129, 236, 253, 1, 222, 239, + 129, 236, 253, 1, 216, 220, 129, 236, 253, 1, 216, 219, 129, 236, 253, 1, + 228, 113, 129, 236, 253, 1, 229, 144, 129, 236, 253, 1, 237, 12, 129, + 236, 253, 1, 215, 36, 129, 236, 253, 1, 215, 35, 129, 236, 253, 1, 214, + 177, 129, 236, 253, 1, 173, 129, 236, 253, 1, 217, 126, 129, 236, 253, 1, + 210, 22, 129, 236, 253, 1, 210, 21, 129, 236, 253, 1, 209, 187, 129, 236, + 253, 1, 209, 186, 129, 236, 253, 1, 135, 129, 236, 253, 1, 244, 212, 129, + 236, 253, 16, 205, 224, 129, 236, 253, 16, 205, 223, 129, 191, 1, 63, + 129, 191, 1, 74, 129, 191, 1, 75, 129, 191, 1, 78, 129, 191, 1, 198, 129, + 191, 1, 204, 111, 129, 191, 1, 249, 32, 129, 191, 1, 185, 129, 191, 1, + 192, 129, 191, 1, 201, 201, 129, 191, 1, 222, 240, 129, 191, 1, 216, 220, + 129, 191, 1, 228, 113, 129, 191, 1, 229, 144, 129, 191, 1, 237, 12, 129, + 191, 1, 215, 36, 129, 191, 1, 250, 126, 215, 36, 129, 191, 1, 214, 177, + 129, 191, 1, 173, 129, 191, 1, 217, 126, 129, 191, 1, 210, 22, 129, 191, + 1, 209, 187, 129, 191, 1, 135, 129, 191, 1, 244, 212, 129, 191, 239, 138, + 241, 113, 207, 156, 129, 191, 239, 138, 118, 237, 137, 129, 191, 227, 36, + 215, 233, 129, 191, 227, 36, 231, 56, 129, 191, 42, 105, 129, 191, 42, + 108, 129, 191, 42, 147, 129, 191, 42, 149, 129, 191, 42, 170, 129, 191, + 42, 195, 129, 191, 42, 213, 111, 129, 191, 42, 199, 129, 191, 42, 222, + 63, 129, 191, 42, 209, 152, 129, 191, 42, 207, 151, 129, 191, 42, 209, + 53, 129, 191, 42, 239, 153, 129, 191, 42, 240, 18, 129, 191, 42, 212, 74, + 129, 191, 42, 213, 105, 129, 191, 42, 118, 236, 11, 129, 191, 42, 120, + 236, 11, 129, 191, 42, 126, 236, 11, 129, 191, 42, 239, 147, 236, 11, + 129, 191, 42, 239, 233, 236, 11, 129, 191, 42, 212, 88, 236, 11, 129, + 191, 42, 213, 112, 236, 11, 129, 191, 42, 241, 143, 236, 11, 129, 191, + 42, 222, 64, 236, 11, 129, 191, 42, 118, 209, 36, 129, 191, 42, 120, 209, + 36, 129, 191, 42, 126, 209, 36, 129, 191, 42, 239, 147, 209, 36, 129, + 191, 42, 239, 233, 209, 36, 129, 191, 42, 212, 88, 209, 36, 129, 191, 42, + 213, 112, 209, 36, 129, 191, 42, 241, 143, 209, 36, 129, 191, 42, 222, + 64, 209, 36, 129, 191, 42, 209, 153, 209, 36, 129, 191, 42, 207, 152, + 209, 36, 129, 191, 42, 209, 54, 209, 36, 129, 191, 42, 239, 154, 209, 36, + 129, 191, 42, 240, 19, 209, 36, 129, 191, 42, 212, 75, 209, 36, 129, 191, + 42, 213, 106, 209, 36, 129, 191, 42, 241, 135, 209, 36, 129, 191, 42, + 222, 59, 209, 36, 129, 191, 42, 118, 236, 12, 209, 36, 129, 191, 42, 120, + 236, 12, 209, 36, 129, 191, 42, 126, 236, 12, 209, 36, 129, 191, 42, 239, + 147, 236, 12, 209, 36, 129, 191, 42, 239, 233, 236, 12, 209, 36, 129, + 191, 42, 212, 88, 236, 12, 209, 36, 129, 191, 42, 213, 112, 236, 12, 209, + 36, 129, 191, 42, 241, 143, 236, 12, 209, 36, 129, 191, 42, 222, 64, 236, + 12, 209, 36, 129, 191, 239, 138, 118, 207, 157, 129, 191, 239, 138, 120, + 207, 156, 129, 191, 239, 138, 126, 207, 156, 129, 191, 239, 138, 239, + 147, 207, 156, 129, 191, 239, 138, 239, 233, 207, 156, 129, 191, 239, + 138, 212, 88, 207, 156, 129, 191, 239, 138, 213, 112, 207, 156, 129, 191, + 239, 138, 241, 143, 207, 156, 129, 191, 239, 138, 222, 64, 207, 156, 129, + 191, 239, 138, 209, 153, 207, 156, 229, 131, 1, 63, 229, 131, 22, 2, 75, + 229, 131, 22, 2, 68, 229, 131, 22, 2, 125, 146, 229, 131, 22, 2, 74, 229, + 131, 22, 2, 78, 229, 131, 22, 227, 196, 82, 229, 131, 2, 52, 215, 253, + 56, 229, 131, 2, 250, 180, 229, 131, 2, 205, 199, 229, 131, 1, 173, 229, + 131, 1, 229, 144, 229, 131, 1, 239, 8, 229, 131, 1, 238, 119, 229, 131, + 1, 247, 92, 229, 131, 1, 246, 199, 229, 131, 1, 230, 181, 229, 131, 1, + 221, 11, 229, 131, 1, 207, 241, 229, 131, 1, 207, 229, 229, 131, 1, 244, + 120, 229, 131, 1, 244, 104, 229, 131, 1, 221, 227, 229, 131, 1, 210, 22, + 229, 131, 1, 209, 108, 229, 131, 1, 244, 212, 229, 131, 1, 244, 1, 229, + 131, 1, 201, 201, 229, 131, 1, 185, 229, 131, 1, 218, 208, 229, 131, 1, + 249, 32, 229, 131, 1, 248, 98, 229, 131, 1, 192, 229, 131, 1, 198, 229, + 131, 1, 216, 220, 229, 131, 1, 228, 113, 229, 131, 1, 206, 86, 229, 131, + 1, 213, 90, 229, 131, 1, 211, 164, 229, 131, 1, 215, 36, 229, 131, 1, + 202, 116, 229, 131, 1, 152, 229, 131, 1, 229, 47, 229, 131, 1, 207, 209, + 229, 131, 2, 248, 231, 55, 229, 131, 2, 247, 13, 229, 131, 2, 70, 56, + 229, 131, 205, 204, 229, 131, 17, 105, 229, 131, 17, 108, 229, 131, 17, + 147, 229, 131, 17, 149, 229, 131, 42, 209, 152, 229, 131, 42, 207, 151, + 229, 131, 42, 118, 236, 11, 229, 131, 42, 118, 209, 36, 229, 131, 217, + 179, 243, 85, 229, 131, 217, 179, 5, 246, 61, 229, 131, 217, 179, 246, + 61, 229, 131, 217, 179, 245, 139, 142, 229, 131, 217, 179, 225, 116, 229, + 131, 217, 179, 227, 5, 229, 131, 217, 179, 244, 166, 229, 131, 217, 179, + 52, 244, 166, 229, 131, 217, 179, 227, 108, 38, 211, 238, 250, 141, 1, + 237, 67, 38, 211, 238, 250, 141, 1, 228, 19, 38, 211, 238, 250, 141, 1, + 237, 19, 38, 211, 238, 250, 141, 1, 224, 247, 38, 211, 238, 250, 141, 1, + 217, 69, 38, 211, 238, 250, 141, 1, 204, 70, 38, 211, 238, 250, 141, 1, + 212, 255, 38, 211, 238, 250, 141, 1, 216, 91, 38, 211, 238, 250, 141, 1, + 248, 105, 38, 211, 238, 250, 141, 1, 209, 201, 38, 211, 238, 250, 141, 1, + 214, 225, 38, 211, 238, 250, 141, 1, 229, 250, 38, 211, 238, 250, 141, 1, + 221, 40, 38, 211, 238, 250, 141, 1, 229, 126, 38, 211, 238, 250, 141, 1, + 215, 26, 38, 211, 238, 250, 141, 1, 214, 249, 38, 211, 238, 250, 141, 1, + 240, 60, 38, 211, 238, 250, 141, 1, 251, 30, 38, 211, 238, 250, 141, 1, + 250, 2, 38, 211, 238, 250, 141, 1, 243, 254, 38, 211, 238, 250, 141, 1, + 238, 67, 38, 211, 238, 250, 141, 1, 244, 177, 38, 211, 238, 250, 141, 1, + 238, 107, 38, 211, 238, 250, 141, 1, 209, 128, 38, 211, 238, 250, 141, 1, + 202, 94, 38, 211, 238, 250, 141, 1, 243, 251, 38, 211, 238, 250, 141, 1, + 202, 235, 38, 211, 238, 250, 141, 1, 209, 94, 38, 211, 238, 250, 141, 1, + 209, 73, 38, 211, 238, 250, 141, 42, 105, 38, 211, 238, 250, 141, 42, + 240, 18, 38, 211, 238, 250, 141, 141, 231, 31, 38, 153, 250, 141, 1, 237, + 43, 38, 153, 250, 141, 1, 228, 28, 38, 153, 250, 141, 1, 237, 148, 38, + 153, 250, 141, 1, 225, 5, 38, 153, 250, 141, 1, 217, 119, 38, 153, 250, + 141, 1, 204, 70, 38, 153, 250, 141, 1, 241, 15, 38, 153, 250, 141, 1, + 216, 122, 38, 153, 250, 141, 1, 248, 138, 38, 153, 250, 141, 1, 209, 169, + 38, 153, 250, 141, 1, 241, 16, 38, 153, 250, 141, 1, 230, 22, 38, 153, + 250, 141, 1, 221, 178, 38, 153, 250, 141, 1, 229, 140, 38, 153, 250, 141, + 1, 215, 28, 38, 153, 250, 141, 1, 241, 14, 38, 153, 250, 141, 1, 240, 47, + 38, 153, 250, 141, 1, 251, 30, 38, 153, 250, 141, 1, 251, 59, 38, 153, + 250, 141, 1, 244, 207, 38, 153, 250, 141, 1, 238, 181, 38, 153, 250, 141, + 1, 244, 184, 38, 153, 250, 141, 1, 238, 114, 38, 153, 250, 141, 1, 209, + 251, 38, 153, 250, 141, 1, 202, 107, 38, 153, 250, 141, 1, 209, 100, 38, + 153, 250, 141, 1, 203, 47, 38, 153, 250, 141, 1, 209, 88, 38, 153, 250, + 141, 1, 202, 110, 38, 153, 250, 141, 42, 105, 38, 153, 250, 141, 42, 209, + 152, 38, 153, 250, 141, 42, 207, 151, 225, 115, 1, 251, 28, 225, 115, 1, + 248, 105, 225, 115, 1, 248, 92, 225, 115, 1, 238, 67, 225, 115, 1, 238, + 92, 225, 115, 1, 244, 177, 225, 115, 1, 237, 67, 225, 115, 1, 204, 70, + 225, 115, 2, 207, 29, 225, 115, 1, 202, 95, 225, 115, 1, 202, 73, 225, + 115, 1, 230, 163, 225, 115, 1, 230, 145, 225, 115, 1, 237, 19, 225, 115, + 1, 209, 128, 225, 115, 1, 202, 235, 225, 115, 1, 229, 250, 225, 115, 1, + 203, 179, 225, 115, 1, 229, 133, 225, 115, 1, 228, 19, 225, 115, 1, 243, + 250, 225, 115, 1, 209, 99, 225, 115, 1, 224, 247, 225, 115, 1, 221, 40, + 225, 115, 1, 214, 249, 225, 115, 1, 250, 3, 225, 115, 1, 251, 234, 225, + 115, 1, 219, 34, 225, 115, 1, 240, 60, 225, 115, 1, 215, 26, 225, 115, 1, + 217, 69, 225, 115, 1, 203, 157, 225, 115, 1, 217, 95, 225, 115, 1, 216, + 91, 225, 115, 1, 212, 255, 225, 115, 1, 211, 133, 225, 115, 1, 209, 201, + 225, 115, 251, 146, 131, 55, 225, 115, 251, 146, 131, 56, 225, 115, 42, + 105, 225, 115, 42, 170, 225, 115, 42, 209, 152, 225, 115, 42, 207, 151, + 225, 115, 42, 118, 236, 11, 225, 115, 217, 179, 211, 94, 225, 115, 217, + 179, 239, 212, 225, 115, 217, 179, 52, 70, 204, 5, 243, 85, 225, 115, + 217, 179, 70, 204, 5, 243, 85, 225, 115, 217, 179, 243, 85, 225, 115, + 217, 179, 120, 243, 83, 225, 115, 217, 179, 227, 115, 240, 7, 250, 14, 1, + 63, 250, 14, 1, 252, 25, 250, 14, 1, 250, 178, 250, 14, 1, 251, 240, 250, + 14, 1, 250, 231, 250, 14, 1, 251, 241, 250, 14, 1, 251, 109, 250, 14, 1, + 251, 105, 250, 14, 1, 74, 250, 14, 1, 241, 161, 250, 14, 1, 78, 250, 14, + 1, 220, 18, 250, 14, 1, 75, 250, 14, 1, 231, 83, 250, 14, 1, 68, 250, 14, + 1, 206, 178, 250, 14, 1, 229, 201, 250, 14, 1, 203, 176, 250, 14, 1, 203, + 138, 250, 14, 1, 203, 148, 250, 14, 1, 238, 190, 250, 14, 1, 238, 150, + 250, 14, 1, 238, 105, 250, 14, 1, 246, 238, 250, 14, 1, 230, 161, 250, + 14, 1, 209, 187, 250, 14, 1, 209, 92, 250, 14, 1, 244, 75, 250, 14, 1, + 243, 248, 250, 14, 1, 207, 236, 250, 14, 1, 219, 34, 250, 14, 1, 240, 60, + 250, 14, 1, 248, 162, 250, 14, 1, 248, 94, 250, 14, 1, 222, 190, 250, 14, + 1, 222, 106, 250, 14, 1, 222, 107, 250, 14, 1, 222, 240, 250, 14, 1, 221, + 1, 250, 14, 1, 221, 222, 250, 14, 1, 225, 20, 250, 14, 1, 236, 186, 250, + 14, 1, 202, 166, 250, 14, 1, 203, 52, 250, 14, 1, 206, 55, 250, 14, 1, + 216, 158, 250, 14, 1, 227, 234, 250, 14, 1, 214, 177, 250, 14, 1, 202, + 92, 250, 14, 1, 213, 43, 250, 14, 1, 202, 71, 250, 14, 1, 212, 169, 250, + 14, 1, 211, 134, 250, 14, 1, 237, 67, 250, 14, 251, 146, 82, 208, 213, + 120, 187, 115, 118, 70, 217, 178, 5, 120, 187, 115, 118, 70, 217, 178, + 228, 8, 120, 187, 115, 118, 70, 217, 178, 228, 8, 118, 70, 115, 120, 187, + 217, 178, 228, 8, 120, 215, 250, 115, 118, 215, 253, 217, 178, 228, 8, + 118, 215, 253, 115, 120, 215, 250, 217, 178, 231, 10, 219, 70, 1, 251, + 28, 231, 10, 219, 70, 1, 248, 105, 231, 10, 219, 70, 1, 238, 67, 231, 10, + 219, 70, 1, 244, 177, 231, 10, 219, 70, 1, 237, 67, 231, 10, 219, 70, 1, + 204, 70, 231, 10, 219, 70, 1, 202, 95, 231, 10, 219, 70, 1, 237, 19, 231, + 10, 219, 70, 1, 209, 128, 231, 10, 219, 70, 1, 202, 235, 231, 10, 219, + 70, 1, 229, 250, 231, 10, 219, 70, 1, 228, 19, 231, 10, 219, 70, 1, 224, + 247, 231, 10, 219, 70, 1, 221, 40, 231, 10, 219, 70, 1, 214, 249, 231, + 10, 219, 70, 1, 250, 3, 231, 10, 219, 70, 1, 219, 34, 231, 10, 219, 70, + 1, 215, 26, 231, 10, 219, 70, 1, 217, 69, 231, 10, 219, 70, 1, 216, 91, + 231, 10, 219, 70, 1, 212, 255, 231, 10, 219, 70, 1, 209, 201, 231, 10, + 219, 70, 42, 105, 231, 10, 219, 70, 42, 108, 231, 10, 219, 70, 42, 147, + 231, 10, 219, 70, 42, 149, 231, 10, 219, 70, 42, 209, 152, 231, 10, 219, + 70, 42, 207, 151, 231, 10, 219, 70, 42, 118, 236, 11, 231, 10, 219, 70, + 42, 118, 209, 36, 231, 10, 219, 149, 1, 251, 28, 231, 10, 219, 149, 1, + 248, 105, 231, 10, 219, 149, 1, 238, 67, 231, 10, 219, 149, 1, 244, 177, + 231, 10, 219, 149, 1, 237, 67, 231, 10, 219, 149, 1, 204, 69, 231, 10, + 219, 149, 1, 202, 95, 231, 10, 219, 149, 1, 237, 19, 231, 10, 219, 149, + 1, 209, 128, 231, 10, 219, 149, 1, 202, 235, 231, 10, 219, 149, 1, 229, + 250, 231, 10, 219, 149, 1, 228, 19, 231, 10, 219, 149, 1, 224, 246, 231, + 10, 219, 149, 1, 221, 40, 231, 10, 219, 149, 1, 214, 249, 231, 10, 219, + 149, 1, 219, 34, 231, 10, 219, 149, 1, 215, 26, 231, 10, 219, 149, 1, + 212, 255, 231, 10, 219, 149, 1, 209, 201, 231, 10, 219, 149, 42, 105, + 231, 10, 219, 149, 42, 108, 231, 10, 219, 149, 42, 147, 231, 10, 219, + 149, 42, 149, 231, 10, 219, 149, 42, 209, 152, 231, 10, 219, 149, 42, + 207, 151, 231, 10, 219, 149, 42, 118, 236, 11, 231, 10, 219, 149, 42, + 118, 209, 36, 217, 203, 219, 149, 1, 251, 28, 217, 203, 219, 149, 1, 248, + 105, 217, 203, 219, 149, 1, 238, 67, 217, 203, 219, 149, 1, 244, 177, + 217, 203, 219, 149, 1, 237, 67, 217, 203, 219, 149, 1, 204, 69, 217, 203, + 219, 149, 1, 202, 95, 217, 203, 219, 149, 1, 237, 19, 217, 203, 219, 149, + 1, 202, 235, 217, 203, 219, 149, 1, 229, 250, 217, 203, 219, 149, 1, 228, + 19, 217, 203, 219, 149, 1, 224, 246, 217, 203, 219, 149, 1, 221, 40, 217, + 203, 219, 149, 1, 214, 249, 217, 203, 219, 149, 1, 219, 34, 217, 203, + 219, 149, 1, 215, 26, 217, 203, 219, 149, 1, 212, 255, 217, 203, 219, + 149, 1, 209, 201, 217, 203, 219, 149, 214, 168, 82, 217, 203, 219, 149, + 207, 174, 214, 168, 82, 217, 203, 219, 149, 239, 147, 187, 3, 245, 130, + 217, 203, 219, 149, 239, 147, 187, 3, 243, 85, 217, 203, 219, 149, 42, + 105, 217, 203, 219, 149, 42, 108, 217, 203, 219, 149, 42, 147, 217, 203, + 219, 149, 42, 149, 217, 203, 219, 149, 42, 209, 152, 217, 203, 219, 149, + 42, 207, 151, 217, 203, 219, 149, 42, 118, 236, 11, 38, 207, 178, 1, 219, + 235, 63, 38, 207, 178, 1, 203, 40, 63, 38, 207, 178, 1, 203, 40, 251, + 109, 38, 207, 178, 1, 219, 235, 75, 38, 207, 178, 1, 203, 40, 75, 38, + 207, 178, 1, 203, 40, 74, 38, 207, 178, 1, 219, 235, 78, 38, 207, 178, 1, + 219, 235, 220, 73, 38, 207, 178, 1, 203, 40, 220, 73, 38, 207, 178, 1, + 219, 235, 251, 232, 38, 207, 178, 1, 203, 40, 251, 232, 38, 207, 178, 1, + 219, 235, 251, 108, 38, 207, 178, 1, 203, 40, 251, 108, 38, 207, 178, 1, + 219, 235, 251, 81, 38, 207, 178, 1, 203, 40, 251, 81, 38, 207, 178, 1, + 219, 235, 251, 103, 38, 207, 178, 1, 203, 40, 251, 103, 38, 207, 178, 1, + 219, 235, 251, 122, 38, 207, 178, 1, 203, 40, 251, 122, 38, 207, 178, 1, + 219, 235, 251, 107, 38, 207, 178, 1, 219, 235, 240, 181, 38, 207, 178, 1, + 203, 40, 240, 181, 38, 207, 178, 1, 219, 235, 250, 8, 38, 207, 178, 1, + 203, 40, 250, 8, 38, 207, 178, 1, 219, 235, 251, 90, 38, 207, 178, 1, + 203, 40, 251, 90, 38, 207, 178, 1, 219, 235, 251, 101, 38, 207, 178, 1, + 203, 40, 251, 101, 38, 207, 178, 1, 219, 235, 220, 71, 38, 207, 178, 1, + 203, 40, 220, 71, 38, 207, 178, 1, 219, 235, 251, 39, 38, 207, 178, 1, + 203, 40, 251, 39, 38, 207, 178, 1, 219, 235, 251, 100, 38, 207, 178, 1, + 219, 235, 241, 106, 38, 207, 178, 1, 219, 235, 241, 103, 38, 207, 178, 1, + 219, 235, 250, 231, 38, 207, 178, 1, 219, 235, 251, 98, 38, 207, 178, 1, + 203, 40, 251, 98, 38, 207, 178, 1, 219, 235, 241, 70, 38, 207, 178, 1, + 203, 40, 241, 70, 38, 207, 178, 1, 219, 235, 241, 89, 38, 207, 178, 1, + 203, 40, 241, 89, 38, 207, 178, 1, 219, 235, 241, 56, 38, 207, 178, 1, + 203, 40, 241, 56, 38, 207, 178, 1, 203, 40, 250, 223, 38, 207, 178, 1, + 219, 235, 241, 78, 38, 207, 178, 1, 203, 40, 251, 97, 38, 207, 178, 1, + 219, 235, 241, 46, 38, 207, 178, 1, 219, 235, 220, 9, 38, 207, 178, 1, + 219, 235, 235, 164, 38, 207, 178, 1, 219, 235, 241, 169, 38, 207, 178, 1, + 203, 40, 241, 169, 38, 207, 178, 1, 219, 235, 250, 148, 38, 207, 178, 1, + 203, 40, 250, 148, 38, 207, 178, 1, 219, 235, 230, 226, 38, 207, 178, 1, + 203, 40, 230, 226, 38, 207, 178, 1, 219, 235, 219, 246, 38, 207, 178, 1, + 203, 40, 219, 246, 38, 207, 178, 1, 219, 235, 250, 144, 38, 207, 178, 1, + 203, 40, 250, 144, 38, 207, 178, 1, 219, 235, 251, 96, 38, 207, 178, 1, + 219, 235, 250, 81, 38, 207, 178, 1, 219, 235, 251, 94, 38, 207, 178, 1, + 219, 235, 250, 75, 38, 207, 178, 1, 203, 40, 250, 75, 38, 207, 178, 1, + 219, 235, 241, 7, 38, 207, 178, 1, 203, 40, 241, 7, 38, 207, 178, 1, 219, + 235, 250, 49, 38, 207, 178, 1, 203, 40, 250, 49, 38, 207, 178, 1, 219, + 235, 251, 91, 38, 207, 178, 1, 203, 40, 251, 91, 38, 207, 178, 1, 219, + 235, 219, 224, 38, 207, 178, 1, 219, 235, 248, 215, 38, 145, 6, 1, 63, + 38, 145, 6, 1, 252, 25, 38, 145, 6, 1, 241, 171, 38, 145, 6, 1, 250, 242, + 38, 145, 6, 1, 241, 169, 38, 145, 6, 1, 241, 89, 38, 145, 6, 1, 241, 166, + 38, 145, 6, 1, 241, 165, 38, 145, 6, 1, 250, 226, 38, 145, 6, 1, 74, 38, + 145, 6, 1, 246, 17, 74, 38, 145, 6, 1, 241, 161, 38, 145, 6, 1, 241, 154, + 38, 145, 6, 1, 241, 153, 38, 145, 6, 1, 241, 150, 38, 145, 6, 1, 241, + 147, 38, 145, 6, 1, 75, 38, 145, 6, 1, 231, 83, 38, 145, 6, 1, 241, 132, + 38, 145, 6, 1, 241, 129, 38, 145, 6, 1, 251, 47, 38, 145, 6, 1, 206, 232, + 38, 145, 6, 1, 241, 122, 38, 145, 6, 1, 241, 105, 38, 145, 6, 1, 241, + 103, 38, 145, 6, 1, 241, 92, 38, 145, 6, 1, 241, 56, 38, 145, 6, 1, 78, + 38, 145, 6, 1, 220, 18, 38, 145, 6, 1, 222, 71, 220, 73, 38, 145, 6, 1, + 215, 141, 220, 73, 38, 145, 6, 1, 220, 72, 38, 145, 6, 1, 241, 46, 38, + 145, 6, 1, 241, 97, 38, 145, 6, 1, 241, 28, 38, 145, 6, 1, 212, 228, 241, + 28, 38, 145, 6, 1, 241, 17, 38, 145, 6, 1, 240, 252, 38, 145, 6, 1, 240, + 250, 38, 145, 6, 1, 241, 70, 38, 145, 6, 1, 240, 239, 38, 145, 6, 1, 241, + 167, 38, 145, 6, 1, 68, 38, 145, 6, 1, 206, 178, 38, 145, 6, 1, 222, 71, + 207, 24, 38, 145, 6, 1, 215, 141, 207, 24, 38, 145, 6, 1, 240, 226, 38, + 145, 6, 1, 240, 181, 38, 145, 6, 1, 240, 176, 38, 145, 6, 1, 241, 69, 54, + 38, 145, 6, 1, 206, 193, 38, 145, 5, 1, 63, 38, 145, 5, 1, 252, 25, 38, + 145, 5, 1, 241, 171, 38, 145, 5, 1, 250, 242, 38, 145, 5, 1, 241, 169, + 38, 145, 5, 1, 241, 89, 38, 145, 5, 1, 241, 166, 38, 145, 5, 1, 241, 165, + 38, 145, 5, 1, 250, 226, 38, 145, 5, 1, 74, 38, 145, 5, 1, 246, 17, 74, + 38, 145, 5, 1, 241, 161, 38, 145, 5, 1, 241, 154, 38, 145, 5, 1, 241, + 153, 38, 145, 5, 1, 241, 150, 38, 145, 5, 1, 241, 147, 38, 145, 5, 1, 75, + 38, 145, 5, 1, 231, 83, 38, 145, 5, 1, 241, 132, 38, 145, 5, 1, 241, 129, + 38, 145, 5, 1, 251, 47, 38, 145, 5, 1, 206, 232, 38, 145, 5, 1, 241, 122, + 38, 145, 5, 1, 241, 105, 38, 145, 5, 1, 241, 103, 38, 145, 5, 1, 241, 92, + 38, 145, 5, 1, 241, 56, 38, 145, 5, 1, 78, 38, 145, 5, 1, 220, 18, 38, + 145, 5, 1, 222, 71, 220, 73, 38, 145, 5, 1, 215, 141, 220, 73, 38, 145, + 5, 1, 220, 72, 38, 145, 5, 1, 241, 46, 38, 145, 5, 1, 241, 97, 38, 145, + 5, 1, 241, 28, 38, 145, 5, 1, 212, 228, 241, 28, 38, 145, 5, 1, 241, 17, + 38, 145, 5, 1, 240, 252, 38, 145, 5, 1, 240, 250, 38, 145, 5, 1, 241, 70, + 38, 145, 5, 1, 240, 239, 38, 145, 5, 1, 241, 167, 38, 145, 5, 1, 68, 38, + 145, 5, 1, 206, 178, 38, 145, 5, 1, 222, 71, 207, 24, 38, 145, 5, 1, 215, + 141, 207, 24, 38, 145, 5, 1, 240, 226, 38, 145, 5, 1, 240, 181, 38, 145, + 5, 1, 240, 176, 38, 145, 5, 1, 241, 69, 54, 38, 145, 5, 1, 206, 193, 38, + 145, 42, 105, 38, 145, 42, 170, 38, 145, 42, 209, 152, 38, 145, 42, 240, + 18, 38, 145, 42, 118, 236, 11, 38, 145, 42, 118, 209, 36, 215, 129, 17, + 105, 215, 129, 17, 108, 215, 129, 17, 147, 215, 129, 17, 149, 215, 129, + 17, 170, 215, 129, 17, 195, 215, 129, 17, 213, 111, 215, 129, 17, 199, + 215, 129, 17, 222, 63, 215, 129, 42, 209, 152, 215, 129, 42, 207, 151, + 215, 129, 42, 209, 53, 215, 129, 42, 239, 153, 215, 129, 42, 240, 18, + 215, 129, 42, 212, 74, 215, 129, 42, 213, 105, 215, 129, 42, 241, 134, + 215, 129, 42, 222, 58, 215, 129, 42, 118, 236, 11, 215, 129, 42, 120, + 236, 11, 215, 129, 42, 126, 236, 11, 215, 129, 42, 239, 147, 236, 11, + 215, 129, 42, 239, 233, 236, 11, 215, 129, 42, 212, 88, 236, 11, 215, + 129, 42, 213, 112, 236, 11, 215, 129, 42, 241, 143, 236, 11, 215, 129, + 42, 222, 64, 236, 11, 215, 129, 239, 138, 118, 237, 137, 215, 129, 239, + 138, 118, 217, 55, 215, 129, 239, 138, 118, 209, 60, 215, 129, 239, 138, + 120, 209, 57, 144, 2, 247, 52, 144, 2, 250, 180, 144, 2, 205, 199, 144, + 2, 230, 135, 144, 2, 206, 222, 144, 1, 63, 144, 1, 252, 25, 144, 1, 75, + 144, 1, 231, 83, 144, 1, 68, 144, 1, 206, 178, 144, 1, 125, 146, 144, 1, + 125, 215, 186, 144, 1, 125, 159, 144, 1, 125, 227, 78, 144, 1, 74, 144, + 1, 251, 64, 144, 1, 78, 144, 1, 250, 34, 144, 1, 173, 144, 1, 229, 144, + 144, 1, 239, 8, 144, 1, 238, 119, 144, 1, 222, 203, 144, 1, 247, 92, 144, + 1, 246, 199, 144, 1, 230, 181, 144, 1, 230, 149, 144, 1, 221, 11, 144, 1, + 207, 241, 144, 1, 207, 229, 144, 1, 244, 120, 144, 1, 244, 104, 144, 1, + 221, 227, 144, 1, 210, 22, 144, 1, 209, 108, 144, 1, 244, 212, 144, 1, + 244, 1, 144, 1, 201, 201, 144, 1, 185, 144, 1, 218, 208, 144, 1, 249, 32, + 144, 1, 248, 98, 144, 1, 192, 144, 1, 198, 144, 1, 216, 220, 144, 1, 228, + 113, 144, 1, 206, 86, 144, 1, 213, 90, 144, 1, 211, 164, 144, 1, 215, 36, + 144, 1, 152, 144, 1, 227, 77, 144, 1, 38, 44, 227, 68, 144, 1, 38, 44, + 215, 185, 144, 1, 38, 44, 221, 209, 144, 22, 2, 252, 25, 144, 22, 2, 248, + 95, 252, 25, 144, 22, 2, 75, 144, 22, 2, 231, 83, 144, 22, 2, 68, 144, + 22, 2, 206, 178, 144, 22, 2, 125, 146, 144, 22, 2, 125, 215, 186, 144, + 22, 2, 125, 159, 144, 22, 2, 125, 227, 78, 144, 22, 2, 74, 144, 22, 2, + 251, 64, 144, 22, 2, 78, 144, 22, 2, 250, 34, 144, 205, 204, 144, 244, + 166, 144, 52, 244, 166, 144, 217, 179, 243, 85, 144, 217, 179, 52, 243, + 85, 144, 217, 179, 227, 114, 144, 217, 179, 245, 139, 142, 144, 217, 179, + 227, 5, 144, 42, 105, 144, 42, 108, 144, 42, 147, 144, 42, 149, 144, 42, + 170, 144, 42, 195, 144, 42, 213, 111, 144, 42, 199, 144, 42, 222, 63, + 144, 42, 209, 152, 144, 42, 207, 151, 144, 42, 209, 53, 144, 42, 239, + 153, 144, 42, 240, 18, 144, 42, 212, 74, 144, 42, 213, 105, 144, 42, 241, + 134, 144, 42, 222, 58, 144, 42, 118, 236, 11, 144, 42, 118, 209, 36, 144, + 17, 202, 84, 144, 17, 105, 144, 17, 108, 144, 17, 147, 144, 17, 149, 144, + 17, 170, 144, 17, 195, 144, 17, 213, 111, 144, 17, 199, 144, 17, 222, 63, + 144, 42, 230, 96, 230, 15, 2, 247, 52, 230, 15, 2, 250, 180, 230, 15, 2, + 205, 199, 230, 15, 1, 63, 230, 15, 1, 252, 25, 230, 15, 1, 75, 230, 15, + 1, 231, 83, 230, 15, 1, 68, 230, 15, 1, 206, 178, 230, 15, 1, 74, 230, + 15, 1, 251, 64, 230, 15, 1, 78, 230, 15, 1, 250, 34, 230, 15, 1, 173, + 230, 15, 1, 229, 144, 230, 15, 1, 239, 8, 230, 15, 1, 238, 119, 230, 15, + 1, 222, 203, 230, 15, 1, 247, 92, 230, 15, 1, 246, 199, 230, 15, 1, 230, + 181, 230, 15, 1, 230, 149, 230, 15, 1, 221, 11, 230, 15, 1, 207, 241, + 230, 15, 1, 207, 229, 230, 15, 1, 244, 120, 230, 15, 1, 244, 109, 230, + 15, 1, 244, 104, 230, 15, 1, 216, 61, 230, 15, 1, 221, 227, 230, 15, 1, + 210, 22, 230, 15, 1, 209, 108, 230, 15, 1, 244, 212, 230, 15, 1, 244, 1, + 230, 15, 1, 201, 201, 230, 15, 1, 185, 230, 15, 1, 218, 208, 230, 15, 1, + 249, 32, 230, 15, 1, 248, 98, 230, 15, 1, 192, 230, 15, 1, 198, 230, 15, + 1, 216, 220, 230, 15, 1, 228, 113, 230, 15, 1, 206, 86, 230, 15, 1, 213, + 90, 230, 15, 1, 211, 164, 230, 15, 1, 215, 36, 230, 15, 1, 152, 230, 15, + 22, 2, 252, 25, 230, 15, 22, 2, 75, 230, 15, 22, 2, 231, 83, 230, 15, 22, + 2, 68, 230, 15, 22, 2, 206, 178, 230, 15, 22, 2, 74, 230, 15, 22, 2, 251, + 64, 230, 15, 22, 2, 78, 230, 15, 22, 2, 250, 34, 230, 15, 2, 205, 204, + 230, 15, 2, 221, 51, 230, 15, 251, 146, 54, 230, 15, 241, 59, 54, 230, + 15, 42, 54, 230, 15, 214, 168, 82, 230, 15, 52, 214, 168, 82, 230, 15, + 244, 166, 230, 15, 52, 244, 166, 211, 246, 211, 254, 1, 215, 19, 211, + 246, 211, 254, 1, 209, 251, 211, 246, 211, 254, 1, 249, 5, 211, 246, 211, + 254, 1, 247, 81, 211, 246, 211, 254, 1, 244, 193, 211, 246, 211, 254, 1, + 238, 249, 211, 246, 211, 254, 1, 225, 148, 211, 246, 211, 254, 1, 222, + 200, 211, 246, 211, 254, 1, 228, 89, 211, 246, 211, 254, 1, 223, 93, 211, + 246, 211, 254, 1, 206, 82, 211, 246, 211, 254, 1, 219, 150, 211, 246, + 211, 254, 1, 203, 91, 211, 246, 211, 254, 1, 216, 199, 211, 246, 211, + 254, 1, 237, 148, 211, 246, 211, 254, 1, 230, 20, 211, 246, 211, 254, 1, + 230, 175, 211, 246, 211, 254, 1, 221, 8, 211, 246, 211, 254, 1, 251, 73, + 211, 246, 211, 254, 1, 241, 159, 211, 246, 211, 254, 1, 231, 84, 211, + 246, 211, 254, 1, 207, 18, 211, 246, 211, 254, 1, 220, 60, 211, 246, 211, + 254, 1, 241, 147, 211, 246, 211, 254, 1, 225, 161, 211, 246, 211, 254, + 17, 202, 84, 211, 246, 211, 254, 17, 105, 211, 246, 211, 254, 17, 108, + 211, 246, 211, 254, 17, 147, 211, 246, 211, 254, 17, 149, 211, 246, 211, + 254, 17, 170, 211, 246, 211, 254, 17, 195, 211, 246, 211, 254, 17, 213, + 111, 211, 246, 211, 254, 17, 199, 211, 246, 211, 254, 17, 222, 63, 246, + 193, 2, 247, 52, 246, 193, 2, 250, 180, 246, 193, 2, 205, 199, 246, 193, + 1, 252, 25, 246, 193, 1, 75, 246, 193, 1, 68, 246, 193, 1, 74, 246, 193, + 1, 230, 41, 246, 193, 1, 229, 143, 246, 193, 1, 239, 5, 246, 193, 1, 238, + 118, 246, 193, 1, 222, 202, 246, 193, 1, 247, 91, 246, 193, 1, 246, 198, + 246, 193, 1, 230, 180, 246, 193, 1, 230, 148, 246, 193, 1, 221, 10, 246, + 193, 1, 207, 240, 246, 193, 1, 207, 228, 246, 193, 1, 244, 119, 246, 193, + 1, 244, 103, 246, 193, 1, 221, 226, 246, 193, 1, 210, 18, 246, 193, 1, + 209, 107, 246, 193, 1, 244, 211, 246, 193, 1, 244, 0, 246, 193, 1, 223, + 106, 246, 193, 1, 219, 168, 246, 193, 1, 218, 207, 246, 193, 1, 249, 30, + 246, 193, 1, 248, 97, 246, 193, 1, 225, 175, 246, 193, 1, 202, 167, 246, + 193, 1, 203, 110, 246, 193, 1, 216, 216, 246, 193, 1, 228, 112, 246, 193, + 1, 204, 110, 246, 193, 1, 215, 33, 246, 193, 1, 237, 157, 246, 193, 22, + 2, 63, 246, 193, 22, 2, 75, 246, 193, 22, 2, 231, 83, 246, 193, 22, 2, + 68, 246, 193, 22, 2, 206, 178, 246, 193, 22, 2, 74, 246, 193, 22, 2, 251, + 64, 246, 193, 22, 2, 78, 246, 193, 22, 2, 250, 34, 246, 193, 22, 2, 220, + 57, 246, 193, 158, 82, 246, 193, 250, 35, 82, 246, 193, 205, 204, 246, + 193, 225, 173, 246, 193, 17, 202, 84, 246, 193, 17, 105, 246, 193, 17, + 108, 246, 193, 17, 147, 246, 193, 17, 149, 246, 193, 17, 170, 246, 193, + 17, 195, 246, 193, 17, 213, 111, 246, 193, 17, 199, 246, 193, 17, 222, + 63, 246, 193, 214, 168, 82, 246, 193, 244, 166, 246, 193, 52, 244, 166, + 246, 193, 217, 47, 82, 225, 146, 1, 63, 225, 146, 1, 75, 225, 146, 1, 68, + 225, 146, 1, 74, 225, 146, 1, 78, 225, 146, 1, 173, 225, 146, 1, 229, + 144, 225, 146, 1, 239, 8, 225, 146, 1, 238, 119, 225, 146, 1, 247, 92, + 225, 146, 1, 246, 199, 225, 146, 1, 230, 181, 225, 146, 1, 230, 149, 225, + 146, 1, 221, 11, 225, 146, 1, 207, 241, 225, 146, 1, 207, 229, 225, 146, + 1, 244, 120, 225, 146, 1, 244, 104, 225, 146, 1, 221, 227, 225, 146, 1, + 210, 22, 225, 146, 1, 209, 108, 225, 146, 1, 244, 212, 225, 146, 1, 244, + 1, 225, 146, 1, 201, 201, 225, 146, 1, 185, 225, 146, 1, 218, 208, 225, + 146, 1, 249, 32, 225, 146, 1, 248, 98, 225, 146, 1, 192, 225, 146, 1, + 216, 220, 225, 146, 1, 228, 113, 225, 146, 1, 206, 86, 225, 146, 1, 215, + 36, 225, 146, 1, 152, 225, 146, 1, 215, 185, 225, 146, 2, 221, 51, 225, + 146, 251, 146, 54, 225, 146, 214, 168, 82, 225, 146, 32, 212, 206, 181, + 2, 247, 52, 181, 2, 250, 180, 181, 2, 205, 199, 181, 1, 63, 181, 1, 252, + 25, 181, 1, 75, 181, 1, 231, 83, 181, 1, 68, 181, 1, 206, 178, 181, 1, + 125, 146, 181, 1, 125, 215, 186, 181, 1, 125, 159, 181, 1, 125, 227, 78, + 181, 1, 74, 181, 1, 251, 64, 181, 1, 78, 181, 1, 250, 34, 181, 1, 173, + 181, 1, 229, 144, 181, 1, 239, 8, 181, 1, 238, 119, 181, 1, 222, 203, + 181, 1, 247, 92, 181, 1, 246, 199, 181, 1, 230, 181, 181, 1, 230, 149, + 181, 1, 221, 11, 181, 1, 207, 241, 181, 1, 207, 229, 181, 1, 244, 120, + 181, 1, 244, 104, 181, 1, 221, 227, 181, 1, 210, 22, 181, 1, 209, 108, + 181, 1, 244, 212, 181, 1, 244, 1, 181, 1, 201, 201, 181, 1, 185, 181, 1, + 218, 208, 181, 1, 249, 32, 181, 1, 248, 98, 181, 1, 192, 181, 1, 198, + 181, 1, 216, 220, 181, 1, 228, 113, 181, 1, 227, 77, 181, 1, 206, 86, + 181, 1, 213, 90, 181, 1, 211, 164, 181, 1, 215, 36, 181, 1, 152, 181, 22, + 2, 252, 25, 181, 22, 2, 75, 181, 22, 2, 231, 83, 181, 22, 2, 68, 181, 22, + 2, 206, 178, 181, 22, 2, 125, 146, 181, 22, 2, 125, 215, 186, 181, 22, 2, + 125, 159, 181, 22, 2, 125, 227, 78, 181, 22, 2, 74, 181, 22, 2, 251, 64, + 181, 22, 2, 78, 181, 22, 2, 250, 34, 181, 2, 205, 204, 181, 2, 250, 17, + 181, 2, 230, 135, 181, 2, 206, 222, 181, 220, 39, 181, 244, 166, 181, 52, + 244, 166, 181, 251, 146, 54, 181, 213, 130, 181, 214, 239, 82, 181, 2, + 221, 51, 181, 22, 65, 82, 181, 240, 199, 212, 228, 22, 82, 181, 210, 180, + 82, 181, 17, 202, 84, 181, 17, 105, 181, 17, 108, 181, 17, 147, 181, 17, + 149, 181, 17, 170, 181, 17, 195, 181, 17, 213, 111, 181, 17, 199, 181, + 17, 222, 63, 181, 241, 128, 181, 2, 212, 157, 181, 237, 58, 181, 245, + 191, 54, 181, 214, 168, 225, 92, 181, 214, 168, 225, 91, 140, 250, 126, + 17, 105, 140, 250, 126, 17, 108, 140, 250, 126, 17, 147, 140, 250, 126, + 17, 149, 140, 250, 126, 17, 170, 140, 250, 126, 17, 195, 140, 250, 126, + 17, 213, 111, 140, 250, 126, 17, 199, 140, 250, 126, 17, 222, 63, 140, + 250, 126, 42, 209, 152, 140, 250, 126, 42, 207, 151, 140, 250, 126, 42, + 209, 53, 140, 250, 126, 42, 239, 153, 140, 250, 126, 42, 240, 18, 140, + 250, 126, 42, 212, 74, 140, 250, 126, 42, 213, 105, 140, 250, 126, 42, + 241, 134, 140, 250, 126, 42, 222, 58, 140, 250, 126, 42, 118, 236, 11, + 140, 250, 126, 42, 118, 209, 36, 229, 114, 1, 63, 229, 114, 1, 252, 25, + 229, 114, 1, 75, 229, 114, 1, 68, 229, 114, 1, 74, 229, 114, 1, 251, 64, + 229, 114, 1, 78, 229, 114, 1, 250, 34, 229, 114, 1, 173, 229, 114, 1, + 229, 144, 229, 114, 1, 239, 8, 229, 114, 1, 238, 155, 229, 114, 1, 238, + 119, 229, 114, 1, 222, 203, 229, 114, 1, 247, 92, 229, 114, 1, 246, 199, + 229, 114, 1, 230, 181, 229, 114, 1, 230, 129, 229, 114, 1, 221, 11, 229, + 114, 1, 207, 241, 229, 114, 1, 207, 229, 229, 114, 1, 244, 120, 229, 114, + 1, 244, 104, 229, 114, 1, 221, 227, 229, 114, 1, 210, 22, 229, 114, 1, + 209, 108, 229, 114, 1, 244, 212, 229, 114, 1, 244, 110, 229, 114, 1, 244, + 1, 229, 114, 1, 201, 201, 229, 114, 1, 185, 229, 114, 1, 218, 208, 229, + 114, 1, 249, 32, 229, 114, 1, 248, 198, 229, 114, 1, 248, 98, 229, 114, + 1, 192, 229, 114, 1, 198, 229, 114, 1, 216, 220, 229, 114, 1, 228, 113, + 229, 114, 1, 206, 86, 229, 114, 1, 215, 36, 229, 114, 1, 152, 229, 114, + 1, 227, 77, 229, 114, 22, 2, 252, 25, 229, 114, 22, 2, 75, 229, 114, 22, + 2, 231, 83, 229, 114, 22, 2, 68, 229, 114, 22, 2, 74, 229, 114, 22, 2, + 251, 64, 229, 114, 22, 2, 78, 229, 114, 22, 2, 250, 34, 229, 114, 2, 250, + 180, 229, 114, 2, 205, 204, 229, 114, 2, 221, 51, 229, 114, 2, 213, 80, + 229, 114, 244, 166, 229, 114, 52, 244, 166, 229, 114, 203, 238, 213, 130, + 229, 114, 214, 168, 82, 229, 114, 52, 214, 168, 82, 229, 114, 251, 146, + 54, 223, 230, 1, 63, 223, 230, 1, 75, 223, 230, 1, 68, 223, 230, 1, 74, + 223, 230, 1, 173, 223, 230, 1, 229, 144, 223, 230, 1, 239, 8, 223, 230, + 1, 238, 119, 223, 230, 1, 247, 92, 223, 230, 1, 246, 199, 223, 230, 1, + 230, 181, 223, 230, 1, 230, 129, 223, 230, 1, 221, 11, 223, 230, 1, 207, + 241, 223, 230, 1, 207, 229, 223, 230, 1, 244, 120, 223, 230, 1, 244, 110, + 223, 230, 1, 244, 104, 223, 230, 1, 221, 227, 223, 230, 1, 210, 22, 223, + 230, 1, 209, 108, 223, 230, 1, 244, 212, 223, 230, 1, 244, 1, 223, 230, + 1, 201, 201, 223, 230, 1, 185, 223, 230, 1, 218, 208, 223, 230, 1, 249, + 32, 223, 230, 1, 248, 98, 223, 230, 1, 192, 223, 230, 1, 198, 223, 230, + 1, 216, 220, 223, 230, 1, 228, 113, 223, 230, 1, 206, 86, 223, 230, 1, + 215, 36, 223, 230, 1, 152, 223, 230, 1, 215, 185, 223, 230, 1, 216, 61, + 223, 230, 214, 168, 82, 229, 106, 1, 63, 229, 106, 1, 252, 25, 229, 106, + 1, 75, 229, 106, 1, 231, 83, 229, 106, 1, 68, 229, 106, 1, 206, 178, 229, + 106, 1, 74, 229, 106, 1, 251, 64, 229, 106, 1, 78, 229, 106, 1, 250, 34, + 229, 106, 1, 173, 229, 106, 1, 229, 144, 229, 106, 1, 239, 8, 229, 106, + 1, 238, 155, 229, 106, 1, 238, 119, 229, 106, 1, 222, 203, 229, 106, 1, + 247, 92, 229, 106, 1, 246, 199, 229, 106, 1, 230, 181, 229, 106, 1, 230, + 129, 229, 106, 1, 230, 149, 229, 106, 1, 221, 11, 229, 106, 1, 207, 241, + 229, 106, 1, 207, 229, 229, 106, 1, 244, 120, 229, 106, 1, 244, 110, 229, + 106, 1, 215, 185, 229, 106, 1, 244, 104, 229, 106, 1, 221, 227, 229, 106, + 1, 210, 22, 229, 106, 1, 209, 108, 229, 106, 1, 244, 212, 229, 106, 1, + 244, 1, 229, 106, 1, 201, 201, 229, 106, 1, 185, 229, 106, 1, 218, 208, + 229, 106, 1, 249, 32, 229, 106, 1, 248, 198, 229, 106, 1, 248, 98, 229, + 106, 1, 192, 229, 106, 1, 198, 229, 106, 1, 216, 220, 229, 106, 1, 228, + 113, 229, 106, 1, 206, 86, 229, 106, 1, 213, 90, 229, 106, 1, 215, 36, + 229, 106, 1, 152, 229, 106, 2, 250, 180, 229, 106, 22, 2, 252, 25, 229, + 106, 22, 2, 75, 229, 106, 22, 2, 231, 83, 229, 106, 22, 2, 68, 229, 106, + 22, 2, 206, 178, 229, 106, 22, 2, 74, 229, 106, 22, 2, 251, 64, 229, 106, + 22, 2, 78, 229, 106, 22, 2, 250, 34, 229, 106, 2, 221, 51, 229, 106, 2, + 205, 204, 229, 106, 17, 202, 84, 229, 106, 17, 105, 229, 106, 17, 108, + 229, 106, 17, 147, 229, 106, 17, 149, 229, 106, 17, 170, 229, 106, 17, + 195, 229, 106, 17, 213, 111, 229, 106, 17, 199, 229, 106, 17, 222, 63, + 238, 6, 2, 39, 250, 181, 55, 238, 6, 2, 247, 52, 238, 6, 2, 250, 180, + 238, 6, 2, 205, 199, 238, 6, 1, 63, 238, 6, 1, 252, 25, 238, 6, 1, 75, + 238, 6, 1, 231, 83, 238, 6, 1, 68, 238, 6, 1, 206, 178, 238, 6, 1, 125, + 146, 238, 6, 1, 125, 159, 238, 6, 1, 241, 161, 238, 6, 1, 251, 64, 238, + 6, 1, 220, 18, 238, 6, 1, 250, 34, 238, 6, 1, 173, 238, 6, 1, 229, 144, + 238, 6, 1, 239, 8, 238, 6, 1, 238, 119, 238, 6, 1, 222, 203, 238, 6, 1, + 247, 92, 238, 6, 1, 246, 199, 238, 6, 1, 230, 181, 238, 6, 1, 230, 149, + 238, 6, 1, 221, 11, 238, 6, 1, 207, 241, 238, 6, 1, 207, 229, 238, 6, 1, + 244, 120, 238, 6, 1, 244, 104, 238, 6, 1, 221, 227, 238, 6, 1, 210, 22, + 238, 6, 1, 209, 108, 238, 6, 1, 244, 212, 238, 6, 1, 244, 1, 238, 6, 1, + 201, 201, 238, 6, 1, 185, 238, 6, 1, 218, 208, 238, 6, 1, 249, 32, 238, + 6, 1, 248, 98, 238, 6, 1, 192, 238, 6, 1, 198, 238, 6, 1, 216, 220, 238, + 6, 1, 228, 113, 238, 6, 1, 227, 77, 238, 6, 1, 206, 86, 238, 6, 1, 213, + 90, 238, 6, 1, 211, 164, 238, 6, 1, 215, 36, 238, 6, 1, 152, 238, 6, 2, + 221, 51, 238, 6, 2, 250, 17, 238, 6, 22, 2, 252, 25, 238, 6, 22, 2, 75, + 238, 6, 22, 2, 231, 83, 238, 6, 22, 2, 68, 238, 6, 22, 2, 206, 178, 238, + 6, 22, 2, 125, 146, 238, 6, 22, 2, 125, 215, 186, 238, 6, 22, 2, 241, + 161, 238, 6, 22, 2, 251, 64, 238, 6, 22, 2, 220, 18, 238, 6, 22, 2, 250, + 34, 238, 6, 2, 205, 204, 238, 6, 220, 39, 238, 6, 250, 35, 227, 196, 82, + 238, 6, 2, 218, 74, 238, 6, 1, 206, 52, 250, 180, 238, 6, 1, 206, 52, 52, + 250, 180, 238, 6, 1, 125, 215, 186, 238, 6, 1, 125, 227, 78, 238, 6, 22, + 2, 125, 159, 238, 6, 22, 2, 125, 227, 78, 39, 238, 6, 17, 202, 84, 39, + 238, 6, 17, 105, 39, 238, 6, 17, 108, 39, 238, 6, 17, 147, 39, 238, 6, + 17, 149, 39, 238, 6, 17, 170, 39, 238, 6, 17, 195, 39, 238, 6, 1, 63, 39, + 238, 6, 1, 173, 39, 238, 6, 1, 201, 201, 39, 238, 6, 1, 205, 230, 39, + 238, 6, 1, 185, 208, 204, 250, 209, 208, 204, 1, 63, 208, 204, 1, 252, + 25, 208, 204, 1, 75, 208, 204, 1, 231, 83, 208, 204, 1, 68, 208, 204, 1, + 206, 178, 208, 204, 1, 125, 146, 208, 204, 1, 125, 215, 186, 208, 204, 1, + 125, 159, 208, 204, 1, 125, 227, 78, 208, 204, 1, 74, 208, 204, 1, 251, + 64, 208, 204, 1, 78, 208, 204, 1, 250, 34, 208, 204, 1, 173, 208, 204, 1, + 229, 144, 208, 204, 1, 239, 8, 208, 204, 1, 238, 119, 208, 204, 1, 222, + 203, 208, 204, 1, 247, 92, 208, 204, 1, 246, 199, 208, 204, 1, 230, 181, + 208, 204, 1, 230, 149, 208, 204, 1, 221, 11, 208, 204, 1, 207, 241, 208, + 204, 1, 207, 229, 208, 204, 1, 244, 120, 208, 204, 1, 244, 104, 208, 204, + 1, 221, 227, 208, 204, 1, 210, 22, 208, 204, 1, 209, 108, 208, 204, 1, + 244, 212, 208, 204, 1, 244, 1, 208, 204, 1, 201, 201, 208, 204, 1, 185, + 208, 204, 1, 218, 208, 208, 204, 1, 249, 32, 208, 204, 1, 248, 98, 208, + 204, 1, 192, 208, 204, 1, 198, 208, 204, 1, 216, 220, 208, 204, 1, 228, + 113, 208, 204, 1, 206, 86, 208, 204, 1, 213, 90, 208, 204, 1, 211, 164, + 208, 204, 1, 215, 36, 208, 204, 1, 152, 208, 204, 22, 2, 252, 25, 208, + 204, 22, 2, 75, 208, 204, 22, 2, 231, 83, 208, 204, 22, 2, 68, 208, 204, + 22, 2, 206, 178, 208, 204, 22, 2, 125, 146, 208, 204, 22, 2, 125, 215, + 186, 208, 204, 22, 2, 125, 159, 208, 204, 22, 2, 125, 227, 78, 208, 204, + 22, 2, 74, 208, 204, 22, 2, 212, 228, 74, 208, 204, 22, 2, 251, 64, 208, + 204, 22, 2, 78, 208, 204, 22, 2, 212, 228, 78, 208, 204, 22, 2, 250, 34, + 208, 204, 2, 247, 52, 208, 204, 2, 250, 180, 208, 204, 2, 205, 199, 208, + 204, 2, 205, 204, 208, 204, 2, 221, 51, 208, 204, 2, 250, 17, 208, 204, + 237, 191, 208, 204, 251, 146, 54, 208, 204, 220, 39, 208, 204, 17, 202, + 84, 208, 204, 17, 105, 208, 204, 17, 108, 208, 204, 17, 147, 208, 204, + 17, 149, 208, 204, 17, 170, 208, 204, 17, 195, 208, 204, 17, 213, 111, + 208, 204, 17, 199, 208, 204, 17, 222, 63, 186, 1, 63, 186, 1, 252, 25, + 186, 1, 75, 186, 1, 231, 83, 186, 1, 68, 186, 1, 206, 178, 186, 1, 125, + 146, 186, 1, 125, 215, 186, 186, 1, 125, 159, 186, 1, 125, 227, 78, 186, + 1, 74, 186, 1, 251, 64, 186, 1, 78, 186, 1, 250, 34, 186, 1, 173, 186, 1, + 229, 144, 186, 1, 239, 8, 186, 1, 238, 119, 186, 1, 222, 203, 186, 1, + 247, 92, 186, 1, 246, 199, 186, 1, 230, 181, 186, 1, 230, 149, 186, 1, + 221, 11, 186, 1, 207, 241, 186, 1, 207, 229, 186, 1, 244, 120, 186, 1, + 244, 104, 186, 1, 221, 227, 186, 1, 210, 22, 186, 1, 209, 108, 186, 1, + 244, 212, 186, 1, 244, 1, 186, 1, 201, 201, 186, 1, 185, 186, 1, 218, + 208, 186, 1, 249, 32, 186, 1, 248, 98, 186, 1, 192, 186, 1, 198, 186, 1, + 216, 220, 186, 1, 228, 113, 186, 1, 206, 86, 186, 1, 213, 90, 186, 1, + 211, 164, 186, 1, 215, 36, 186, 1, 152, 186, 22, 2, 252, 25, 186, 22, 2, + 75, 186, 22, 2, 231, 83, 186, 22, 2, 68, 186, 22, 2, 206, 178, 186, 22, + 2, 125, 146, 186, 22, 2, 125, 215, 186, 186, 22, 2, 74, 186, 22, 2, 251, + 64, 186, 22, 2, 78, 186, 22, 2, 250, 34, 186, 2, 247, 52, 186, 2, 250, + 180, 186, 2, 205, 199, 186, 2, 205, 204, 186, 2, 221, 51, 186, 2, 212, + 157, 186, 244, 166, 186, 52, 244, 166, 186, 213, 131, 243, 85, 186, 213, + 131, 142, 186, 216, 98, 225, 92, 186, 216, 98, 225, 91, 186, 216, 98, + 225, 90, 186, 241, 84, 76, 209, 113, 82, 186, 214, 168, 131, 3, 208, 80, + 25, 207, 92, 219, 232, 186, 214, 168, 131, 3, 208, 80, 25, 242, 83, 245, + 137, 186, 214, 168, 131, 3, 216, 163, 25, 242, 83, 245, 137, 186, 214, + 168, 131, 3, 216, 163, 25, 242, 83, 52, 245, 137, 186, 214, 168, 131, 3, + 216, 163, 25, 242, 83, 208, 70, 245, 137, 186, 214, 168, 131, 52, 215, + 252, 186, 214, 168, 131, 52, 215, 253, 3, 216, 162, 186, 214, 168, 131, + 3, 52, 245, 137, 186, 214, 168, 131, 3, 208, 70, 245, 137, 186, 214, 168, + 131, 3, 217, 58, 245, 137, 186, 214, 168, 131, 3, 213, 128, 245, 137, + 186, 214, 168, 131, 3, 246, 59, 25, 216, 162, 186, 214, 168, 131, 3, 246, + 59, 25, 120, 241, 86, 186, 214, 168, 131, 3, 246, 59, 25, 239, 147, 241, + 86, 186, 1, 209, 32, 250, 255, 75, 186, 1, 207, 136, 250, 255, 75, 186, + 1, 207, 136, 250, 255, 231, 83, 186, 1, 250, 255, 68, 186, 22, 2, 250, + 255, 68, 186, 22, 2, 250, 255, 206, 178, 224, 74, 1, 63, 224, 74, 1, 252, + 25, 224, 74, 1, 75, 224, 74, 1, 231, 83, 224, 74, 1, 68, 224, 74, 1, 206, + 178, 224, 74, 1, 125, 146, 224, 74, 1, 125, 215, 186, 224, 74, 1, 125, + 159, 224, 74, 1, 125, 227, 78, 224, 74, 1, 74, 224, 74, 1, 251, 64, 224, + 74, 1, 78, 224, 74, 1, 250, 34, 224, 74, 1, 173, 224, 74, 1, 229, 144, + 224, 74, 1, 239, 8, 224, 74, 1, 238, 119, 224, 74, 1, 222, 203, 224, 74, + 1, 247, 92, 224, 74, 1, 246, 199, 224, 74, 1, 230, 181, 224, 74, 1, 230, + 149, 224, 74, 1, 221, 11, 224, 74, 1, 207, 241, 224, 74, 1, 207, 229, + 224, 74, 1, 244, 120, 224, 74, 1, 244, 104, 224, 74, 1, 221, 227, 224, + 74, 1, 210, 22, 224, 74, 1, 209, 108, 224, 74, 1, 244, 212, 224, 74, 1, + 244, 1, 224, 74, 1, 201, 201, 224, 74, 1, 185, 224, 74, 1, 218, 208, 224, + 74, 1, 249, 32, 224, 74, 1, 248, 98, 224, 74, 1, 192, 224, 74, 1, 198, + 224, 74, 1, 216, 220, 224, 74, 1, 228, 113, 224, 74, 1, 206, 86, 224, 74, + 1, 213, 90, 224, 74, 1, 211, 164, 224, 74, 1, 215, 36, 224, 74, 1, 152, + 224, 74, 1, 227, 77, 224, 74, 22, 2, 252, 25, 224, 74, 22, 2, 75, 224, + 74, 22, 2, 231, 83, 224, 74, 22, 2, 68, 224, 74, 22, 2, 206, 178, 224, + 74, 22, 2, 125, 146, 224, 74, 22, 2, 125, 215, 186, 224, 74, 22, 2, 125, + 159, 224, 74, 22, 2, 125, 227, 78, 224, 74, 22, 2, 74, 224, 74, 22, 2, + 251, 64, 224, 74, 22, 2, 78, 224, 74, 22, 2, 250, 34, 224, 74, 2, 250, + 180, 224, 74, 2, 205, 199, 224, 74, 2, 205, 204, 224, 74, 2, 250, 123, + 224, 74, 244, 166, 224, 74, 52, 244, 166, 224, 74, 251, 146, 54, 224, 74, + 2, 236, 0, 224, 74, 17, 202, 84, 224, 74, 17, 105, 224, 74, 17, 108, 224, + 74, 17, 147, 224, 74, 17, 149, 224, 74, 17, 170, 224, 74, 17, 195, 224, + 74, 17, 213, 111, 224, 74, 17, 199, 224, 74, 17, 222, 63, 209, 239, 1, + 63, 209, 239, 1, 252, 25, 209, 239, 1, 75, 209, 239, 1, 231, 83, 209, + 239, 1, 68, 209, 239, 1, 206, 178, 209, 239, 1, 74, 209, 239, 1, 251, 64, + 209, 239, 1, 78, 209, 239, 1, 250, 34, 209, 239, 1, 173, 209, 239, 1, + 229, 144, 209, 239, 1, 239, 8, 209, 239, 1, 238, 119, 209, 239, 1, 222, + 203, 209, 239, 1, 247, 92, 209, 239, 1, 246, 199, 209, 239, 1, 230, 181, + 209, 239, 1, 230, 149, 209, 239, 1, 221, 11, 209, 239, 1, 207, 241, 209, + 239, 1, 207, 229, 209, 239, 1, 244, 120, 209, 239, 1, 244, 104, 209, 239, + 1, 221, 227, 209, 239, 1, 210, 22, 209, 239, 1, 209, 108, 209, 239, 1, + 244, 212, 209, 239, 1, 244, 1, 209, 239, 1, 201, 201, 209, 239, 1, 185, + 209, 239, 1, 218, 208, 209, 239, 1, 249, 32, 209, 239, 1, 248, 98, 209, + 239, 1, 192, 209, 239, 1, 198, 209, 239, 1, 216, 220, 209, 239, 1, 228, + 113, 209, 239, 1, 206, 86, 209, 239, 1, 213, 90, 209, 239, 1, 215, 36, + 209, 239, 1, 152, 209, 239, 1, 215, 185, 209, 239, 2, 250, 180, 209, 239, + 2, 205, 199, 209, 239, 22, 2, 252, 25, 209, 239, 22, 2, 75, 209, 239, 22, + 2, 231, 83, 209, 239, 22, 2, 68, 209, 239, 22, 2, 206, 178, 209, 239, 22, + 2, 74, 209, 239, 22, 2, 251, 64, 209, 239, 22, 2, 78, 209, 239, 22, 2, + 250, 34, 209, 239, 2, 205, 204, 209, 239, 2, 221, 51, 209, 239, 17, 202, + 84, 209, 239, 17, 105, 209, 239, 17, 108, 209, 239, 17, 147, 209, 239, + 17, 149, 209, 239, 17, 170, 209, 239, 17, 195, 209, 239, 17, 213, 111, + 209, 239, 17, 199, 209, 239, 17, 222, 63, 251, 68, 1, 173, 251, 68, 1, + 229, 144, 251, 68, 1, 222, 203, 251, 68, 1, 201, 201, 251, 68, 1, 210, + 22, 251, 68, 1, 250, 255, 210, 22, 251, 68, 1, 185, 251, 68, 1, 218, 208, + 251, 68, 1, 249, 32, 251, 68, 1, 192, 251, 68, 1, 230, 181, 251, 68, 1, + 246, 199, 251, 68, 1, 209, 108, 251, 68, 1, 216, 220, 251, 68, 1, 228, + 113, 251, 68, 1, 215, 36, 251, 68, 1, 221, 11, 251, 68, 1, 152, 251, 68, + 1, 63, 251, 68, 1, 244, 212, 251, 68, 1, 244, 1, 251, 68, 1, 239, 8, 251, + 68, 1, 250, 255, 239, 8, 251, 68, 1, 238, 119, 251, 68, 1, 248, 98, 251, + 68, 1, 230, 149, 251, 68, 109, 2, 174, 228, 113, 251, 68, 109, 2, 174, + 216, 220, 251, 68, 109, 2, 174, 227, 135, 216, 220, 251, 68, 22, 2, 63, + 251, 68, 22, 2, 252, 25, 251, 68, 22, 2, 75, 251, 68, 22, 2, 231, 83, + 251, 68, 22, 2, 68, 251, 68, 22, 2, 206, 178, 251, 68, 22, 2, 74, 251, + 68, 22, 2, 250, 13, 251, 68, 22, 2, 78, 251, 68, 22, 2, 251, 64, 251, 68, + 22, 2, 250, 247, 251, 68, 2, 229, 86, 251, 68, 17, 202, 84, 251, 68, 17, + 105, 251, 68, 17, 108, 251, 68, 17, 147, 251, 68, 17, 149, 251, 68, 17, + 170, 251, 68, 17, 195, 251, 68, 17, 213, 111, 251, 68, 17, 199, 251, 68, + 17, 222, 63, 251, 68, 42, 209, 152, 251, 68, 42, 207, 151, 251, 68, 2, 5, + 214, 167, 251, 68, 2, 214, 167, 251, 68, 2, 215, 136, 251, 68, 16, 205, + 230, 204, 92, 246, 48, 6, 1, 222, 202, 204, 92, 246, 48, 6, 1, 63, 204, + 92, 246, 48, 6, 1, 204, 30, 204, 92, 246, 48, 6, 1, 202, 213, 204, 92, + 246, 48, 6, 1, 198, 204, 92, 246, 48, 6, 1, 202, 247, 204, 92, 246, 48, + 6, 1, 231, 83, 204, 92, 246, 48, 6, 1, 206, 178, 204, 92, 246, 48, 6, 1, + 74, 204, 92, 246, 48, 6, 1, 78, 204, 92, 246, 48, 6, 1, 250, 223, 204, + 92, 246, 48, 6, 1, 239, 8, 204, 92, 246, 48, 6, 1, 229, 26, 204, 92, 246, + 48, 6, 1, 241, 56, 204, 92, 246, 48, 6, 1, 202, 197, 204, 92, 246, 48, 6, + 1, 207, 31, 204, 92, 246, 48, 6, 1, 241, 75, 204, 92, 246, 48, 6, 1, 220, + 76, 204, 92, 246, 48, 6, 1, 207, 236, 204, 92, 246, 48, 6, 1, 221, 37, + 204, 92, 246, 48, 6, 1, 244, 212, 204, 92, 246, 48, 6, 1, 250, 49, 204, + 92, 246, 48, 6, 1, 250, 247, 204, 92, 246, 48, 6, 1, 247, 193, 204, 92, + 246, 48, 6, 1, 217, 191, 204, 92, 246, 48, 6, 1, 236, 228, 204, 92, 246, + 48, 6, 1, 236, 124, 204, 92, 246, 48, 6, 1, 236, 51, 204, 92, 246, 48, 6, + 1, 237, 92, 204, 92, 246, 48, 6, 1, 211, 116, 204, 92, 246, 48, 6, 1, + 212, 142, 204, 92, 246, 48, 6, 1, 205, 190, 204, 92, 246, 48, 5, 1, 222, + 202, 204, 92, 246, 48, 5, 1, 63, 204, 92, 246, 48, 5, 1, 204, 30, 204, + 92, 246, 48, 5, 1, 202, 213, 204, 92, 246, 48, 5, 1, 198, 204, 92, 246, + 48, 5, 1, 202, 247, 204, 92, 246, 48, 5, 1, 231, 83, 204, 92, 246, 48, 5, + 1, 206, 178, 204, 92, 246, 48, 5, 1, 74, 204, 92, 246, 48, 5, 1, 78, 204, + 92, 246, 48, 5, 1, 250, 223, 204, 92, 246, 48, 5, 1, 239, 8, 204, 92, + 246, 48, 5, 1, 229, 26, 204, 92, 246, 48, 5, 1, 241, 56, 204, 92, 246, + 48, 5, 1, 202, 197, 204, 92, 246, 48, 5, 1, 207, 31, 204, 92, 246, 48, 5, + 1, 241, 75, 204, 92, 246, 48, 5, 1, 220, 76, 204, 92, 246, 48, 5, 1, 207, + 236, 204, 92, 246, 48, 5, 1, 221, 37, 204, 92, 246, 48, 5, 1, 244, 212, + 204, 92, 246, 48, 5, 1, 250, 49, 204, 92, 246, 48, 5, 1, 250, 247, 204, + 92, 246, 48, 5, 1, 247, 193, 204, 92, 246, 48, 5, 1, 217, 191, 204, 92, + 246, 48, 5, 1, 236, 228, 204, 92, 246, 48, 5, 1, 236, 124, 204, 92, 246, + 48, 5, 1, 236, 51, 204, 92, 246, 48, 5, 1, 237, 92, 204, 92, 246, 48, 5, + 1, 211, 116, 204, 92, 246, 48, 5, 1, 212, 142, 204, 92, 246, 48, 5, 1, + 205, 190, 204, 92, 246, 48, 17, 202, 84, 204, 92, 246, 48, 17, 105, 204, + 92, 246, 48, 17, 108, 204, 92, 246, 48, 17, 147, 204, 92, 246, 48, 17, + 149, 204, 92, 246, 48, 17, 170, 204, 92, 246, 48, 17, 195, 204, 92, 246, + 48, 17, 213, 111, 204, 92, 246, 48, 17, 199, 204, 92, 246, 48, 17, 222, + 63, 204, 92, 246, 48, 42, 209, 152, 204, 92, 246, 48, 42, 207, 151, 204, + 92, 246, 48, 42, 209, 53, 204, 92, 246, 48, 42, 239, 153, 204, 92, 246, + 48, 42, 240, 18, 204, 92, 246, 48, 42, 212, 74, 204, 92, 246, 48, 42, + 213, 105, 204, 92, 246, 48, 42, 241, 134, 204, 92, 246, 48, 42, 222, 58, + 204, 92, 246, 48, 220, 39, 219, 49, 246, 66, 237, 77, 1, 185, 219, 49, + 246, 66, 237, 77, 1, 173, 219, 49, 246, 66, 237, 77, 1, 228, 113, 219, + 49, 246, 66, 237, 77, 1, 192, 219, 49, 246, 66, 237, 77, 1, 244, 212, + 219, 49, 246, 66, 237, 77, 1, 202, 116, 219, 49, 246, 66, 237, 77, 1, + 206, 86, 219, 49, 246, 66, 237, 77, 1, 222, 203, 219, 49, 246, 66, 237, + 77, 1, 152, 219, 49, 246, 66, 237, 77, 1, 239, 8, 219, 49, 246, 66, 237, + 77, 1, 229, 144, 219, 49, 246, 66, 237, 77, 1, 215, 36, 219, 49, 246, 66, + 237, 77, 1, 249, 32, 219, 49, 246, 66, 237, 77, 1, 247, 92, 219, 49, 246, + 66, 237, 77, 1, 210, 22, 219, 49, 246, 66, 237, 77, 1, 209, 108, 219, 49, + 246, 66, 237, 77, 1, 201, 201, 219, 49, 246, 66, 237, 77, 1, 218, 208, + 219, 49, 246, 66, 237, 77, 1, 216, 220, 219, 49, 246, 66, 237, 77, 1, + 240, 108, 219, 49, 246, 66, 237, 77, 1, 246, 199, 219, 49, 246, 66, 237, + 77, 1, 63, 219, 49, 246, 66, 237, 77, 1, 74, 219, 49, 246, 66, 237, 77, + 1, 75, 219, 49, 246, 66, 237, 77, 1, 78, 219, 49, 246, 66, 237, 77, 1, + 68, 219, 49, 246, 66, 237, 77, 1, 207, 39, 219, 49, 246, 66, 237, 77, 1, + 235, 171, 219, 49, 246, 66, 237, 77, 1, 46, 219, 184, 219, 49, 246, 66, + 237, 77, 1, 46, 230, 54, 219, 49, 246, 66, 237, 77, 1, 46, 210, 69, 219, + 49, 246, 66, 237, 77, 1, 46, 226, 185, 219, 49, 246, 66, 237, 77, 1, 46, + 223, 163, 219, 49, 246, 66, 237, 77, 1, 46, 159, 219, 49, 246, 66, 237, + 77, 1, 46, 204, 144, 219, 49, 246, 66, 237, 77, 1, 46, 222, 205, 219, 49, + 246, 66, 237, 77, 1, 46, 203, 124, 219, 49, 246, 66, 237, 77, 215, 245, + 143, 227, 28, 219, 49, 246, 66, 237, 77, 215, 245, 208, 161, 219, 49, + 246, 66, 237, 77, 214, 239, 238, 45, 211, 61, 219, 49, 246, 66, 237, 77, + 215, 245, 143, 163, 240, 5, 219, 49, 246, 66, 237, 77, 215, 245, 143, + 240, 5, 219, 49, 246, 66, 237, 77, 214, 239, 238, 45, 211, 62, 240, 5, + 219, 49, 246, 66, 237, 77, 214, 239, 143, 227, 28, 219, 49, 246, 66, 237, + 77, 214, 239, 208, 161, 219, 49, 246, 66, 237, 77, 214, 239, 143, 163, + 240, 5, 219, 49, 246, 66, 237, 77, 214, 239, 143, 240, 5, 219, 49, 246, + 66, 237, 77, 224, 149, 208, 161, 219, 49, 246, 66, 237, 77, 238, 45, 211, + 62, 206, 68, 219, 49, 246, 66, 237, 77, 224, 149, 143, 163, 240, 5, 219, + 49, 246, 66, 237, 77, 224, 149, 143, 240, 5, 219, 49, 246, 66, 237, 77, + 226, 254, 143, 227, 28, 219, 49, 246, 66, 237, 77, 226, 254, 208, 161, + 219, 49, 246, 66, 237, 77, 238, 45, 211, 61, 219, 49, 246, 66, 237, 77, + 226, 254, 143, 163, 240, 5, 219, 49, 246, 66, 237, 77, 226, 254, 143, + 240, 5, 219, 49, 246, 66, 237, 77, 238, 45, 211, 62, 240, 5, 9, 2, 63, 9, + 2, 34, 23, 63, 9, 2, 34, 23, 249, 15, 9, 2, 34, 23, 238, 233, 209, 141, + 9, 2, 34, 23, 152, 9, 2, 34, 23, 231, 85, 9, 2, 34, 23, 228, 93, 237, + 208, 9, 2, 34, 23, 223, 199, 9, 2, 34, 23, 215, 22, 9, 2, 254, 34, 9, 2, + 251, 232, 9, 2, 251, 233, 23, 250, 73, 9, 2, 251, 233, 23, 242, 30, 237, + 208, 9, 2, 251, 233, 23, 238, 246, 9, 2, 251, 233, 23, 238, 233, 209, + 141, 9, 2, 251, 233, 23, 152, 9, 2, 251, 233, 23, 231, 86, 237, 208, 9, + 2, 251, 233, 23, 231, 59, 9, 2, 251, 233, 23, 228, 94, 9, 2, 251, 233, + 23, 213, 27, 9, 2, 251, 233, 23, 106, 91, 106, 91, 68, 9, 2, 251, 233, + 237, 208, 9, 2, 251, 149, 9, 2, 251, 150, 23, 248, 252, 9, 2, 251, 150, + 23, 238, 233, 209, 141, 9, 2, 251, 150, 23, 225, 21, 91, 241, 92, 9, 2, + 251, 150, 23, 213, 88, 9, 2, 251, 150, 23, 209, 242, 9, 2, 251, 122, 9, + 2, 251, 47, 9, 2, 251, 48, 23, 241, 22, 9, 2, 251, 48, 23, 212, 245, 91, + 238, 55, 9, 2, 251, 39, 9, 2, 251, 40, 23, 251, 39, 9, 2, 251, 40, 23, + 243, 186, 9, 2, 251, 40, 23, 238, 55, 9, 2, 251, 40, 23, 152, 9, 2, 251, + 40, 23, 230, 27, 9, 2, 251, 40, 23, 229, 100, 9, 2, 251, 40, 23, 213, 43, + 9, 2, 251, 40, 23, 206, 186, 9, 2, 251, 36, 9, 2, 251, 28, 9, 2, 250, + 243, 9, 2, 250, 244, 23, 213, 43, 9, 2, 250, 231, 9, 2, 250, 232, 115, + 250, 231, 9, 2, 250, 232, 126, 208, 219, 9, 2, 250, 232, 91, 223, 97, + 219, 251, 250, 232, 91, 223, 96, 9, 2, 250, 232, 91, 223, 97, 211, 176, + 9, 2, 250, 200, 9, 2, 250, 170, 9, 2, 250, 138, 9, 2, 250, 139, 23, 228, + 183, 9, 2, 250, 110, 9, 2, 250, 80, 9, 2, 250, 75, 9, 2, 250, 76, 202, + 35, 209, 141, 9, 2, 250, 76, 230, 31, 209, 141, 9, 2, 250, 76, 115, 250, + 76, 207, 198, 115, 207, 198, 207, 198, 115, 207, 198, 219, 96, 9, 2, 250, + 76, 115, 250, 76, 115, 250, 75, 9, 2, 250, 76, 115, 250, 76, 115, 250, + 76, 245, 124, 250, 76, 115, 250, 76, 115, 250, 75, 9, 2, 250, 73, 9, 2, + 250, 69, 9, 2, 249, 32, 9, 2, 249, 15, 9, 2, 249, 9, 9, 2, 249, 3, 9, 2, + 248, 253, 9, 2, 248, 254, 115, 248, 253, 9, 2, 248, 252, 9, 2, 142, 9, 2, + 248, 230, 9, 2, 248, 86, 9, 2, 248, 87, 23, 63, 9, 2, 248, 87, 23, 238, + 224, 9, 2, 248, 87, 23, 231, 86, 237, 208, 9, 2, 247, 193, 9, 2, 247, + 194, 115, 247, 194, 251, 232, 9, 2, 247, 194, 115, 247, 194, 206, 255, 9, + 2, 247, 194, 245, 124, 247, 193, 9, 2, 247, 171, 9, 2, 247, 172, 115, + 247, 171, 9, 2, 247, 160, 9, 2, 247, 159, 9, 2, 244, 212, 9, 2, 244, 203, + 9, 2, 244, 204, 229, 69, 23, 34, 91, 225, 79, 9, 2, 244, 204, 229, 69, + 23, 250, 243, 9, 2, 244, 204, 229, 69, 23, 248, 252, 9, 2, 244, 204, 229, + 69, 23, 248, 86, 9, 2, 244, 204, 229, 69, 23, 239, 8, 9, 2, 244, 204, + 229, 69, 23, 239, 9, 91, 225, 79, 9, 2, 244, 204, 229, 69, 23, 238, 81, + 9, 2, 244, 204, 229, 69, 23, 238, 63, 9, 2, 244, 204, 229, 69, 23, 237, + 219, 9, 2, 244, 204, 229, 69, 23, 152, 9, 2, 244, 204, 229, 69, 23, 230, + 224, 9, 2, 244, 204, 229, 69, 23, 230, 225, 91, 226, 239, 9, 2, 244, 204, + 229, 69, 23, 230, 12, 9, 2, 244, 204, 229, 69, 23, 228, 113, 9, 2, 244, + 204, 229, 69, 23, 226, 239, 9, 2, 244, 204, 229, 69, 23, 226, 240, 91, + 225, 78, 9, 2, 244, 204, 229, 69, 23, 226, 222, 9, 2, 244, 204, 229, 69, + 23, 222, 240, 9, 2, 244, 204, 229, 69, 23, 219, 97, 91, 219, 96, 9, 2, + 244, 204, 229, 69, 23, 212, 162, 9, 2, 244, 204, 229, 69, 23, 209, 242, + 9, 2, 244, 204, 229, 69, 23, 207, 41, 91, 238, 63, 9, 2, 244, 204, 229, + 69, 23, 206, 186, 9, 2, 244, 175, 9, 2, 244, 154, 9, 2, 244, 153, 9, 2, + 244, 152, 9, 2, 243, 233, 9, 2, 243, 215, 9, 2, 243, 188, 9, 2, 243, 189, + 23, 213, 43, 9, 2, 243, 186, 9, 2, 243, 176, 9, 2, 243, 177, 229, 232, + 106, 237, 209, 243, 156, 9, 2, 243, 156, 9, 2, 242, 42, 9, 2, 242, 43, + 115, 242, 42, 9, 2, 242, 43, 237, 208, 9, 2, 242, 43, 213, 24, 9, 2, 242, + 40, 9, 2, 242, 41, 23, 241, 4, 9, 2, 242, 39, 9, 2, 242, 37, 9, 2, 242, + 36, 9, 2, 242, 35, 9, 2, 242, 31, 9, 2, 242, 29, 9, 2, 242, 30, 237, 208, + 9, 2, 242, 30, 237, 209, 237, 208, 9, 2, 242, 28, 9, 2, 242, 21, 9, 2, + 74, 9, 2, 188, 23, 219, 96, 9, 2, 188, 115, 188, 221, 41, 115, 221, 40, + 9, 2, 241, 190, 9, 2, 241, 191, 23, 34, 91, 237, 160, 91, 244, 212, 9, 2, + 241, 191, 23, 238, 224, 9, 2, 241, 191, 23, 224, 155, 9, 2, 241, 191, 23, + 215, 8, 9, 2, 241, 191, 23, 213, 43, 9, 2, 241, 191, 23, 68, 9, 2, 241, + 163, 9, 2, 241, 151, 9, 2, 241, 122, 9, 2, 241, 92, 9, 2, 241, 93, 23, + 238, 232, 9, 2, 241, 93, 23, 238, 233, 209, 141, 9, 2, 241, 93, 23, 225, + 20, 9, 2, 241, 93, 245, 124, 241, 92, 9, 2, 241, 93, 219, 251, 241, 92, + 9, 2, 241, 93, 211, 176, 9, 2, 241, 25, 9, 2, 241, 22, 9, 2, 241, 4, 9, + 2, 240, 179, 9, 2, 240, 180, 23, 63, 9, 2, 240, 180, 23, 34, 91, 228, 30, + 9, 2, 240, 180, 23, 34, 91, 228, 31, 23, 228, 30, 9, 2, 240, 180, 23, + 250, 231, 9, 2, 240, 180, 23, 249, 15, 9, 2, 240, 180, 23, 242, 30, 237, + 208, 9, 2, 240, 180, 23, 242, 30, 237, 209, 237, 208, 9, 2, 240, 180, 23, + 152, 9, 2, 240, 180, 23, 237, 160, 237, 208, 9, 2, 240, 180, 23, 231, 86, + 237, 208, 9, 2, 240, 180, 23, 229, 231, 9, 2, 240, 180, 23, 229, 232, + 211, 176, 9, 2, 240, 180, 23, 228, 207, 9, 2, 240, 180, 23, 228, 113, 9, + 2, 240, 180, 23, 228, 31, 23, 228, 30, 9, 2, 240, 180, 23, 227, 148, 9, + 2, 240, 180, 23, 226, 239, 9, 2, 240, 180, 23, 207, 40, 9, 2, 240, 180, + 23, 207, 29, 9, 2, 239, 8, 9, 2, 239, 9, 237, 208, 9, 2, 239, 6, 9, 2, + 239, 7, 23, 34, 91, 244, 213, 91, 152, 9, 2, 239, 7, 23, 34, 91, 152, 9, + 2, 239, 7, 23, 34, 91, 231, 85, 9, 2, 239, 7, 23, 251, 150, 209, 142, 91, + 210, 10, 9, 2, 239, 7, 23, 250, 231, 9, 2, 239, 7, 23, 250, 75, 9, 2, + 239, 7, 23, 250, 74, 91, 238, 246, 9, 2, 239, 7, 23, 249, 15, 9, 2, 239, + 7, 23, 248, 231, 91, 216, 220, 9, 2, 239, 7, 23, 247, 160, 9, 2, 239, 7, + 23, 247, 161, 91, 216, 220, 9, 2, 239, 7, 23, 244, 212, 9, 2, 239, 7, 23, + 243, 233, 9, 2, 239, 7, 23, 243, 189, 23, 213, 43, 9, 2, 239, 7, 23, 242, + 40, 9, 2, 239, 7, 23, 241, 122, 9, 2, 239, 7, 23, 241, 123, 91, 228, 113, + 9, 2, 239, 7, 23, 241, 92, 9, 2, 239, 7, 23, 241, 93, 23, 238, 233, 209, + 141, 9, 2, 239, 7, 23, 238, 233, 209, 141, 9, 2, 239, 7, 23, 238, 224, 9, + 2, 239, 7, 23, 238, 81, 9, 2, 239, 7, 23, 238, 79, 9, 2, 239, 7, 23, 238, + 80, 91, 63, 9, 2, 239, 7, 23, 238, 64, 91, 211, 10, 9, 2, 239, 7, 23, + 237, 160, 91, 226, 240, 91, 241, 4, 9, 2, 239, 7, 23, 237, 140, 9, 2, + 239, 7, 23, 237, 141, 91, 228, 113, 9, 2, 239, 7, 23, 237, 4, 91, 227, + 148, 9, 2, 239, 7, 23, 236, 21, 9, 2, 239, 7, 23, 231, 86, 237, 208, 9, + 2, 239, 7, 23, 230, 210, 91, 236, 27, 91, 250, 75, 9, 2, 239, 7, 23, 230, + 12, 9, 2, 239, 7, 23, 229, 231, 9, 2, 239, 7, 23, 229, 94, 9, 2, 239, 7, + 23, 229, 95, 91, 228, 30, 9, 2, 239, 7, 23, 228, 208, 91, 250, 231, 9, 2, + 239, 7, 23, 228, 113, 9, 2, 239, 7, 23, 225, 21, 91, 241, 92, 9, 2, 239, + 7, 23, 224, 155, 9, 2, 239, 7, 23, 221, 40, 9, 2, 239, 7, 23, 221, 41, + 115, 221, 40, 9, 2, 239, 7, 23, 185, 9, 2, 239, 7, 23, 215, 8, 9, 2, 239, + 7, 23, 214, 230, 9, 2, 239, 7, 23, 213, 43, 9, 2, 239, 7, 23, 213, 44, + 91, 207, 181, 9, 2, 239, 7, 23, 213, 9, 9, 2, 239, 7, 23, 210, 220, 9, 2, + 239, 7, 23, 209, 242, 9, 2, 239, 7, 23, 68, 9, 2, 239, 7, 23, 207, 29, 9, + 2, 239, 7, 23, 207, 30, 91, 242, 42, 9, 2, 239, 7, 115, 239, 6, 9, 2, + 239, 1, 9, 2, 239, 2, 245, 124, 239, 1, 9, 2, 238, 255, 9, 2, 239, 0, + 115, 239, 0, 238, 225, 115, 238, 224, 9, 2, 238, 246, 9, 2, 238, 247, + 239, 0, 115, 239, 0, 238, 225, 115, 238, 224, 9, 2, 238, 245, 9, 2, 238, + 243, 9, 2, 238, 234, 9, 2, 238, 232, 9, 2, 238, 233, 209, 141, 9, 2, 238, + 233, 115, 238, 232, 9, 2, 238, 233, 245, 124, 238, 232, 9, 2, 238, 224, + 9, 2, 238, 223, 9, 2, 238, 218, 9, 2, 238, 162, 9, 2, 238, 163, 23, 228, + 183, 9, 2, 238, 81, 9, 2, 238, 82, 23, 74, 9, 2, 238, 82, 23, 68, 9, 2, + 238, 82, 245, 124, 238, 81, 9, 2, 238, 79, 9, 2, 238, 80, 115, 238, 79, + 9, 2, 238, 80, 245, 124, 238, 79, 9, 2, 238, 76, 9, 2, 238, 63, 9, 2, + 238, 64, 237, 208, 9, 2, 238, 61, 9, 2, 238, 62, 23, 34, 91, 231, 85, 9, + 2, 238, 62, 23, 238, 233, 209, 141, 9, 2, 238, 62, 23, 231, 85, 9, 2, + 238, 62, 23, 226, 240, 91, 231, 85, 9, 2, 238, 62, 23, 185, 9, 2, 238, + 57, 9, 2, 238, 55, 9, 2, 238, 56, 245, 124, 238, 55, 9, 2, 238, 56, 23, + 249, 15, 9, 2, 238, 56, 23, 209, 242, 9, 2, 238, 56, 209, 141, 9, 2, 237, + 230, 9, 2, 237, 231, 245, 124, 237, 230, 9, 2, 237, 228, 9, 2, 237, 229, + 23, 230, 12, 9, 2, 237, 229, 23, 230, 13, 23, 231, 86, 237, 208, 9, 2, + 237, 229, 23, 221, 40, 9, 2, 237, 229, 23, 215, 9, 91, 207, 197, 9, 2, + 237, 229, 237, 208, 9, 2, 237, 219, 9, 2, 237, 220, 23, 34, 91, 228, 183, + 9, 2, 237, 220, 23, 228, 183, 9, 2, 237, 220, 115, 237, 220, 226, 230, 9, + 2, 237, 212, 9, 2, 237, 210, 9, 2, 237, 211, 23, 213, 43, 9, 2, 237, 202, + 9, 2, 237, 201, 9, 2, 237, 197, 9, 2, 237, 196, 9, 2, 152, 9, 2, 237, + 160, 209, 141, 9, 2, 237, 160, 237, 208, 9, 2, 237, 140, 9, 2, 237, 3, 9, + 2, 237, 4, 23, 250, 75, 9, 2, 237, 4, 23, 250, 73, 9, 2, 237, 4, 23, 249, + 15, 9, 2, 237, 4, 23, 243, 156, 9, 2, 237, 4, 23, 238, 255, 9, 2, 237, 4, + 23, 229, 84, 9, 2, 237, 4, 23, 221, 40, 9, 2, 237, 4, 23, 213, 43, 9, 2, + 237, 4, 23, 68, 9, 2, 236, 26, 9, 2, 236, 21, 9, 2, 236, 22, 23, 250, + 231, 9, 2, 236, 22, 23, 237, 140, 9, 2, 236, 22, 23, 229, 231, 9, 2, 236, + 22, 23, 227, 92, 9, 2, 236, 22, 23, 207, 29, 9, 2, 236, 17, 9, 2, 75, 9, + 2, 235, 206, 63, 9, 2, 235, 166, 9, 2, 231, 113, 9, 2, 231, 114, 115, + 231, 114, 247, 160, 9, 2, 231, 114, 115, 231, 114, 211, 176, 9, 2, 231, + 88, 9, 2, 231, 85, 9, 2, 231, 86, 243, 215, 9, 2, 231, 86, 216, 57, 9, 2, + 231, 86, 115, 231, 86, 212, 249, 115, 212, 249, 207, 30, 115, 207, 29, 9, + 2, 231, 86, 237, 208, 9, 2, 231, 77, 9, 2, 231, 78, 23, 238, 233, 209, + 141, 9, 2, 231, 76, 9, 2, 231, 66, 9, 2, 231, 67, 23, 209, 242, 9, 2, + 231, 67, 245, 124, 231, 66, 9, 2, 231, 67, 219, 251, 231, 66, 9, 2, 231, + 67, 211, 176, 9, 2, 231, 59, 9, 2, 231, 49, 9, 2, 230, 224, 9, 2, 230, + 209, 9, 2, 173, 9, 2, 230, 44, 23, 63, 9, 2, 230, 44, 23, 251, 122, 9, 2, + 230, 44, 23, 251, 123, 91, 228, 207, 9, 2, 230, 44, 23, 250, 73, 9, 2, + 230, 44, 23, 249, 15, 9, 2, 230, 44, 23, 248, 252, 9, 2, 230, 44, 23, + 142, 9, 2, 230, 44, 23, 248, 86, 9, 2, 230, 44, 23, 241, 22, 9, 2, 230, + 44, 23, 241, 4, 9, 2, 230, 44, 23, 239, 8, 9, 2, 230, 44, 23, 238, 246, + 9, 2, 230, 44, 23, 238, 233, 209, 141, 9, 2, 230, 44, 23, 238, 224, 9, 2, + 230, 44, 23, 238, 225, 91, 213, 89, 91, 63, 9, 2, 230, 44, 23, 238, 81, + 9, 2, 230, 44, 23, 238, 63, 9, 2, 230, 44, 23, 238, 56, 91, 214, 230, 9, + 2, 230, 44, 23, 238, 56, 245, 124, 238, 55, 9, 2, 230, 44, 23, 237, 230, + 9, 2, 230, 44, 23, 237, 201, 9, 2, 230, 44, 23, 231, 85, 9, 2, 230, 44, + 23, 231, 66, 9, 2, 230, 44, 23, 230, 12, 9, 2, 230, 44, 23, 229, 100, 9, + 2, 230, 44, 23, 229, 94, 9, 2, 230, 44, 23, 227, 148, 9, 2, 230, 44, 23, + 226, 239, 9, 2, 230, 44, 23, 225, 20, 9, 2, 230, 44, 23, 225, 21, 91, + 242, 42, 9, 2, 230, 44, 23, 225, 21, 91, 238, 81, 9, 2, 230, 44, 23, 225, + 21, 91, 209, 187, 9, 2, 230, 44, 23, 224, 155, 9, 2, 230, 44, 23, 224, + 156, 91, 221, 35, 9, 2, 230, 44, 23, 222, 240, 9, 2, 230, 44, 23, 221, + 40, 9, 2, 230, 44, 23, 218, 167, 9, 2, 230, 44, 23, 215, 145, 9, 2, 230, + 44, 23, 215, 36, 9, 2, 230, 44, 23, 214, 230, 9, 2, 230, 44, 23, 213, 90, + 9, 2, 230, 44, 23, 213, 43, 9, 2, 230, 44, 23, 213, 9, 9, 2, 230, 44, 23, + 212, 199, 9, 2, 230, 44, 23, 212, 149, 9, 2, 230, 44, 23, 210, 229, 9, 2, + 230, 44, 23, 209, 218, 9, 2, 230, 44, 23, 68, 9, 2, 230, 44, 23, 207, 40, + 9, 2, 230, 44, 23, 207, 29, 9, 2, 230, 44, 23, 207, 2, 23, 185, 9, 2, + 230, 44, 23, 206, 186, 9, 2, 230, 44, 23, 202, 39, 9, 2, 230, 42, 9, 2, + 230, 43, 245, 124, 230, 42, 9, 2, 230, 32, 9, 2, 230, 29, 9, 2, 230, 27, + 9, 2, 230, 26, 9, 2, 230, 24, 9, 2, 230, 25, 115, 230, 24, 9, 2, 230, 12, + 9, 2, 230, 13, 23, 231, 86, 237, 208, 9, 2, 230, 8, 9, 2, 230, 9, 23, + 249, 15, 9, 2, 230, 9, 245, 124, 230, 8, 9, 2, 230, 6, 9, 2, 230, 5, 9, + 2, 229, 231, 9, 2, 229, 232, 228, 95, 23, 106, 115, 228, 95, 23, 68, 9, + 2, 229, 232, 115, 229, 232, 228, 95, 23, 106, 115, 228, 95, 23, 68, 9, 2, + 229, 171, 9, 2, 229, 100, 9, 2, 229, 101, 23, 249, 15, 9, 2, 229, 101, + 23, 68, 9, 2, 229, 101, 23, 207, 29, 9, 2, 229, 94, 9, 2, 229, 84, 9, 2, + 229, 71, 9, 2, 229, 70, 9, 2, 229, 68, 9, 2, 229, 69, 115, 229, 68, 9, 2, + 228, 209, 9, 2, 228, 210, 115, 237, 4, 23, 250, 74, 228, 210, 115, 237, + 4, 23, 250, 73, 9, 2, 228, 207, 9, 2, 228, 205, 9, 2, 228, 206, 206, 69, + 18, 9, 2, 228, 204, 9, 2, 228, 196, 9, 2, 228, 197, 237, 208, 9, 2, 228, + 195, 9, 2, 228, 183, 9, 2, 228, 184, 219, 251, 228, 183, 9, 2, 228, 177, + 9, 2, 228, 155, 9, 2, 228, 113, 9, 2, 228, 94, 9, 2, 228, 95, 23, 63, 9, + 2, 228, 95, 23, 34, 91, 244, 213, 91, 152, 9, 2, 228, 95, 23, 34, 91, + 238, 224, 9, 2, 228, 95, 23, 34, 91, 228, 30, 9, 2, 228, 95, 23, 251, 39, + 9, 2, 228, 95, 23, 250, 231, 9, 2, 228, 95, 23, 250, 76, 202, 35, 209, + 141, 9, 2, 228, 95, 23, 249, 15, 9, 2, 228, 95, 23, 248, 86, 9, 2, 228, + 95, 23, 244, 154, 9, 2, 228, 95, 23, 241, 92, 9, 2, 228, 95, 23, 239, 8, + 9, 2, 228, 95, 23, 238, 224, 9, 2, 228, 95, 23, 237, 219, 9, 2, 228, 95, + 23, 237, 220, 91, 237, 219, 9, 2, 228, 95, 23, 152, 9, 2, 228, 95, 23, + 237, 140, 9, 2, 228, 95, 23, 237, 4, 23, 221, 40, 9, 2, 228, 95, 23, 231, + 86, 237, 208, 9, 2, 228, 95, 23, 231, 66, 9, 2, 228, 95, 23, 231, 67, 91, + 152, 9, 2, 228, 95, 23, 231, 67, 91, 226, 239, 9, 2, 228, 95, 23, 229, + 100, 9, 2, 228, 95, 23, 229, 84, 9, 2, 228, 95, 23, 228, 207, 9, 2, 228, + 95, 23, 228, 196, 9, 2, 228, 95, 23, 228, 197, 91, 237, 4, 91, 63, 9, 2, + 228, 95, 23, 228, 94, 9, 2, 228, 95, 23, 227, 92, 9, 2, 228, 95, 23, 226, + 239, 9, 2, 228, 95, 23, 226, 224, 9, 2, 228, 95, 23, 225, 20, 9, 2, 228, + 95, 23, 225, 21, 91, 241, 92, 9, 2, 228, 95, 23, 223, 199, 9, 2, 228, 95, + 23, 222, 240, 9, 2, 228, 95, 23, 213, 44, 91, 210, 220, 9, 2, 228, 95, + 23, 212, 245, 91, 238, 56, 91, 241, 22, 9, 2, 228, 95, 23, 212, 245, 91, + 238, 56, 209, 141, 9, 2, 228, 95, 23, 212, 197, 9, 2, 228, 95, 23, 212, + 198, 91, 212, 197, 9, 2, 228, 95, 23, 210, 220, 9, 2, 228, 95, 23, 209, + 255, 9, 2, 228, 95, 23, 209, 242, 9, 2, 228, 95, 23, 209, 188, 91, 34, + 91, 211, 11, 91, 201, 201, 9, 2, 228, 95, 23, 68, 9, 2, 228, 95, 23, 106, + 91, 63, 9, 2, 228, 95, 23, 106, 91, 106, 91, 68, 9, 2, 228, 95, 23, 207, + 41, 91, 250, 75, 9, 2, 228, 95, 23, 207, 29, 9, 2, 228, 95, 23, 206, 186, + 9, 2, 228, 95, 211, 176, 9, 2, 228, 92, 9, 2, 228, 93, 23, 213, 43, 9, 2, + 228, 93, 23, 213, 44, 91, 210, 220, 9, 2, 228, 93, 237, 208, 9, 2, 228, + 93, 237, 209, 115, 228, 93, 237, 209, 213, 43, 9, 2, 228, 88, 9, 2, 228, + 30, 9, 2, 228, 31, 23, 228, 30, 9, 2, 228, 28, 9, 2, 228, 29, 23, 228, + 183, 9, 2, 228, 29, 23, 228, 184, 91, 215, 145, 9, 2, 227, 148, 9, 2, + 227, 129, 9, 2, 227, 117, 9, 2, 227, 92, 9, 2, 226, 239, 9, 2, 226, 240, + 23, 249, 15, 9, 2, 226, 237, 9, 2, 226, 238, 23, 251, 39, 9, 2, 226, 238, + 23, 249, 15, 9, 2, 226, 238, 23, 241, 4, 9, 2, 226, 238, 23, 241, 5, 209, + 141, 9, 2, 226, 238, 23, 238, 233, 209, 141, 9, 2, 226, 238, 23, 237, 4, + 23, 249, 15, 9, 2, 226, 238, 23, 231, 66, 9, 2, 226, 238, 23, 230, 29, 9, + 2, 226, 238, 23, 230, 27, 9, 2, 226, 238, 23, 230, 28, 91, 250, 75, 9, 2, + 226, 238, 23, 229, 100, 9, 2, 226, 238, 23, 228, 114, 91, 250, 75, 9, 2, + 226, 238, 23, 228, 94, 9, 2, 226, 238, 23, 225, 21, 91, 241, 92, 9, 2, + 226, 238, 23, 222, 240, 9, 2, 226, 238, 23, 221, 84, 9, 2, 226, 238, 23, + 212, 163, 91, 250, 75, 9, 2, 226, 238, 23, 212, 141, 91, 247, 193, 9, 2, + 226, 238, 23, 207, 197, 9, 2, 226, 238, 209, 141, 9, 2, 226, 238, 245, + 124, 226, 237, 9, 2, 226, 238, 219, 251, 226, 237, 9, 2, 226, 238, 211, + 176, 9, 2, 226, 238, 213, 24, 9, 2, 226, 236, 9, 2, 226, 230, 9, 2, 226, + 231, 115, 226, 230, 9, 2, 226, 231, 219, 251, 226, 230, 9, 2, 226, 231, + 213, 24, 9, 2, 226, 227, 9, 2, 226, 224, 9, 2, 226, 222, 9, 2, 226, 223, + 115, 226, 222, 9, 2, 226, 223, 115, 226, 223, 238, 225, 115, 238, 224, 9, + 2, 192, 9, 2, 225, 177, 23, 209, 242, 9, 2, 225, 177, 237, 208, 9, 2, + 225, 176, 9, 2, 225, 148, 9, 2, 225, 100, 9, 2, 225, 79, 9, 2, 225, 78, + 9, 2, 225, 20, 9, 2, 224, 228, 9, 2, 224, 155, 9, 2, 224, 110, 9, 2, 223, + 246, 9, 2, 223, 247, 115, 223, 246, 9, 2, 223, 235, 9, 2, 223, 236, 237, + 208, 9, 2, 223, 217, 9, 2, 223, 203, 9, 2, 223, 199, 9, 2, 223, 200, 23, + 63, 9, 2, 223, 200, 23, 228, 183, 9, 2, 223, 200, 23, 202, 116, 9, 2, + 223, 200, 115, 223, 199, 9, 2, 223, 200, 115, 223, 200, 23, 34, 91, 201, + 201, 9, 2, 223, 200, 245, 124, 223, 199, 9, 2, 223, 197, 9, 2, 223, 198, + 23, 63, 9, 2, 223, 198, 23, 34, 91, 243, 233, 9, 2, 223, 198, 23, 243, + 233, 9, 2, 223, 198, 237, 208, 9, 2, 201, 201, 9, 2, 223, 109, 9, 2, 223, + 96, 9, 2, 223, 97, 230, 238, 9, 2, 223, 97, 23, 212, 200, 209, 141, 9, 2, + 223, 97, 219, 251, 223, 96, 9, 2, 223, 95, 9, 2, 223, 88, 221, 26, 9, 2, + 223, 87, 9, 2, 223, 86, 9, 2, 222, 240, 9, 2, 222, 241, 23, 63, 9, 2, + 222, 241, 23, 207, 29, 9, 2, 222, 241, 213, 24, 9, 2, 222, 100, 9, 2, + 222, 101, 23, 74, 9, 2, 222, 99, 9, 2, 222, 69, 9, 2, 222, 70, 23, 238, + 233, 209, 141, 9, 2, 222, 70, 23, 238, 225, 91, 238, 233, 209, 141, 9, 2, + 222, 65, 9, 2, 222, 66, 23, 250, 231, 9, 2, 222, 66, 23, 250, 75, 9, 2, + 222, 66, 23, 250, 76, 91, 250, 75, 9, 2, 222, 66, 23, 237, 219, 9, 2, + 222, 66, 23, 225, 21, 91, 238, 233, 209, 141, 9, 2, 222, 66, 23, 222, + 240, 9, 2, 222, 66, 23, 221, 40, 9, 2, 222, 66, 23, 213, 43, 9, 2, 222, + 66, 23, 213, 44, 91, 34, 250, 231, 9, 2, 222, 66, 23, 213, 44, 91, 250, + 75, 9, 2, 222, 66, 23, 213, 44, 91, 250, 76, 91, 250, 75, 9, 2, 222, 66, + 23, 207, 41, 91, 250, 75, 9, 2, 222, 66, 23, 206, 186, 9, 2, 222, 53, 9, + 2, 221, 84, 9, 2, 221, 56, 9, 2, 221, 40, 9, 2, 221, 41, 228, 93, 23, + 238, 224, 9, 2, 221, 41, 228, 93, 23, 225, 79, 9, 2, 221, 41, 228, 93, + 23, 215, 8, 9, 2, 221, 41, 228, 93, 23, 215, 9, 115, 221, 41, 228, 93, + 23, 215, 8, 9, 2, 221, 41, 228, 93, 23, 206, 186, 9, 2, 221, 41, 209, + 141, 9, 2, 221, 41, 115, 221, 40, 9, 2, 221, 41, 245, 124, 221, 40, 9, 2, + 221, 41, 245, 124, 221, 41, 228, 93, 115, 228, 92, 9, 2, 221, 35, 9, 2, + 221, 36, 251, 150, 23, 250, 69, 9, 2, 221, 36, 251, 150, 23, 248, 86, 9, + 2, 221, 36, 251, 150, 23, 242, 37, 9, 2, 221, 36, 251, 150, 23, 237, 219, + 9, 2, 221, 36, 251, 150, 23, 231, 86, 237, 208, 9, 2, 221, 36, 251, 150, + 23, 230, 27, 9, 2, 221, 36, 251, 150, 23, 228, 113, 9, 2, 221, 36, 251, + 150, 23, 222, 240, 9, 2, 221, 36, 251, 150, 23, 212, 138, 9, 2, 221, 36, + 251, 150, 23, 207, 40, 9, 2, 221, 36, 229, 69, 23, 248, 86, 9, 2, 221, + 36, 229, 69, 23, 248, 87, 68, 9, 2, 185, 9, 2, 219, 159, 9, 2, 219, 122, + 9, 2, 219, 96, 9, 2, 218, 222, 9, 2, 218, 167, 9, 2, 218, 168, 23, 63, 9, + 2, 218, 168, 23, 251, 232, 9, 2, 218, 168, 23, 248, 86, 9, 2, 218, 168, + 23, 247, 193, 9, 2, 218, 168, 23, 74, 9, 2, 218, 168, 23, 75, 9, 2, 218, + 168, 23, 235, 166, 9, 2, 218, 168, 23, 68, 9, 2, 218, 168, 23, 207, 40, + 9, 2, 218, 168, 245, 124, 218, 167, 9, 2, 218, 109, 9, 2, 218, 110, 23, + 230, 8, 9, 2, 218, 110, 23, 207, 29, 9, 2, 218, 110, 23, 202, 116, 9, 2, + 218, 110, 219, 251, 218, 109, 9, 2, 216, 220, 9, 2, 216, 214, 9, 2, 216, + 57, 9, 2, 215, 145, 9, 2, 215, 36, 9, 2, 215, 23, 221, 26, 9, 2, 215, 22, + 9, 2, 215, 23, 23, 63, 9, 2, 215, 23, 23, 242, 42, 9, 2, 215, 23, 23, + 242, 40, 9, 2, 215, 23, 23, 152, 9, 2, 215, 23, 23, 230, 12, 9, 2, 215, + 23, 23, 228, 183, 9, 2, 215, 23, 23, 226, 222, 9, 2, 215, 23, 23, 224, + 155, 9, 2, 215, 23, 23, 221, 40, 9, 2, 215, 23, 23, 215, 8, 9, 2, 215, + 23, 23, 213, 9, 9, 2, 215, 23, 23, 210, 10, 9, 2, 215, 23, 23, 207, 40, + 9, 2, 215, 23, 23, 207, 35, 9, 2, 215, 23, 23, 207, 6, 9, 2, 215, 23, 23, + 206, 210, 9, 2, 215, 23, 23, 206, 186, 9, 2, 215, 23, 115, 215, 22, 9, 2, + 215, 23, 237, 208, 9, 2, 215, 8, 9, 2, 215, 9, 228, 95, 23, 250, 73, 9, + 2, 214, 238, 9, 2, 214, 230, 9, 2, 213, 90, 9, 2, 213, 88, 9, 2, 213, 89, + 23, 63, 9, 2, 213, 89, 23, 249, 15, 9, 2, 213, 89, 23, 238, 55, 9, 2, + 213, 89, 23, 222, 240, 9, 2, 213, 89, 23, 212, 197, 9, 2, 213, 89, 23, + 207, 181, 9, 2, 213, 89, 23, 68, 9, 2, 213, 89, 23, 106, 91, 63, 9, 2, + 213, 86, 9, 2, 213, 84, 9, 2, 213, 59, 9, 2, 213, 43, 9, 2, 213, 44, 236, + 26, 9, 2, 213, 44, 115, 213, 44, 239, 0, 115, 239, 0, 238, 225, 115, 238, + 224, 9, 2, 213, 44, 115, 213, 44, 210, 11, 115, 210, 11, 238, 225, 115, + 238, 224, 9, 2, 213, 36, 9, 2, 213, 31, 9, 2, 213, 27, 9, 2, 213, 26, 9, + 2, 213, 23, 9, 2, 213, 9, 9, 2, 213, 10, 23, 63, 9, 2, 213, 10, 23, 231, + 66, 9, 2, 213, 3, 9, 2, 213, 4, 23, 63, 9, 2, 213, 4, 23, 248, 253, 9, 2, + 213, 4, 23, 247, 171, 9, 2, 213, 4, 23, 243, 176, 9, 2, 213, 4, 23, 238, + 224, 9, 2, 213, 4, 23, 231, 85, 9, 2, 213, 4, 23, 231, 86, 237, 208, 9, + 2, 213, 4, 23, 228, 177, 9, 2, 213, 4, 23, 226, 224, 9, 2, 213, 4, 23, + 223, 235, 9, 2, 213, 4, 23, 215, 8, 9, 2, 212, 253, 9, 2, 212, 248, 9, 2, + 212, 249, 209, 141, 9, 2, 212, 249, 115, 212, 249, 247, 161, 115, 247, + 160, 9, 2, 212, 244, 9, 2, 212, 199, 9, 2, 212, 200, 115, 230, 239, 212, + 199, 9, 2, 212, 197, 9, 2, 212, 196, 9, 2, 212, 162, 9, 2, 212, 163, 237, + 208, 9, 2, 212, 149, 9, 2, 212, 147, 9, 2, 212, 148, 115, 212, 148, 212, + 197, 9, 2, 212, 140, 9, 2, 212, 138, 9, 2, 211, 10, 9, 2, 211, 11, 115, + 211, 10, 9, 2, 210, 232, 9, 2, 210, 231, 9, 2, 210, 229, 9, 2, 210, 220, + 9, 2, 210, 219, 9, 2, 210, 193, 9, 2, 210, 192, 9, 2, 210, 22, 9, 2, 210, + 23, 250, 59, 9, 2, 210, 23, 23, 237, 3, 9, 2, 210, 23, 23, 224, 155, 9, + 2, 210, 23, 237, 208, 9, 2, 210, 10, 9, 2, 210, 11, 115, 210, 11, 222, + 101, 115, 222, 101, 243, 157, 115, 243, 156, 9, 2, 210, 11, 211, 176, 9, + 2, 209, 255, 9, 2, 160, 23, 248, 86, 9, 2, 160, 23, 237, 219, 9, 2, 160, + 23, 213, 43, 9, 2, 160, 23, 212, 199, 9, 2, 160, 23, 207, 197, 9, 2, 160, + 23, 207, 29, 9, 2, 209, 242, 9, 2, 209, 218, 9, 2, 209, 187, 9, 2, 209, + 188, 237, 208, 9, 2, 209, 2, 9, 2, 209, 3, 209, 141, 9, 2, 208, 229, 9, + 2, 208, 206, 9, 2, 208, 207, 23, 209, 242, 9, 2, 208, 207, 115, 208, 206, + 9, 2, 208, 207, 115, 208, 207, 239, 0, 115, 239, 0, 238, 225, 115, 238, + 224, 9, 2, 207, 203, 9, 2, 207, 197, 9, 2, 207, 195, 9, 2, 207, 191, 9, + 2, 207, 181, 9, 2, 207, 182, 115, 207, 182, 202, 117, 115, 202, 116, 9, + 2, 68, 9, 2, 106, 237, 219, 9, 2, 106, 106, 68, 9, 2, 106, 115, 106, 219, + 169, 115, 219, 169, 238, 225, 115, 238, 224, 9, 2, 106, 115, 106, 210, + 194, 115, 210, 193, 9, 2, 106, 115, 106, 106, 216, 73, 115, 106, 216, 72, + 9, 2, 207, 40, 9, 2, 207, 35, 9, 2, 207, 29, 9, 2, 207, 30, 228, 177, 9, + 2, 207, 30, 23, 249, 15, 9, 2, 207, 30, 23, 224, 155, 9, 2, 207, 30, 23, + 106, 91, 106, 91, 68, 9, 2, 207, 30, 23, 106, 91, 106, 91, 106, 237, 208, + 9, 2, 207, 30, 237, 208, 9, 2, 207, 30, 213, 24, 9, 2, 207, 30, 213, 25, + 23, 249, 15, 9, 2, 207, 25, 9, 2, 207, 6, 9, 2, 207, 7, 23, 228, 94, 9, + 2, 207, 7, 23, 225, 21, 91, 244, 212, 9, 2, 207, 7, 23, 213, 88, 9, 2, + 207, 7, 23, 68, 9, 2, 207, 5, 9, 2, 207, 1, 9, 2, 207, 2, 23, 229, 231, + 9, 2, 207, 2, 23, 185, 9, 2, 206, 255, 9, 2, 207, 0, 237, 208, 9, 2, 206, + 210, 9, 2, 206, 211, 245, 124, 206, 210, 9, 2, 206, 211, 213, 24, 9, 2, + 206, 208, 9, 2, 206, 209, 23, 34, 91, 152, 9, 2, 206, 209, 23, 34, 91, + 201, 201, 9, 2, 206, 209, 23, 251, 39, 9, 2, 206, 209, 23, 152, 9, 2, + 206, 209, 23, 221, 40, 9, 2, 206, 209, 23, 207, 40, 9, 2, 206, 209, 23, + 207, 41, 91, 250, 75, 9, 2, 206, 209, 23, 207, 41, 91, 248, 86, 9, 2, + 206, 207, 9, 2, 206, 204, 9, 2, 206, 203, 9, 2, 206, 199, 9, 2, 206, 200, + 23, 63, 9, 2, 206, 200, 23, 250, 69, 9, 2, 206, 200, 23, 142, 9, 2, 206, + 200, 23, 242, 31, 9, 2, 206, 200, 23, 239, 8, 9, 2, 206, 200, 23, 238, + 246, 9, 2, 206, 200, 23, 238, 233, 209, 141, 9, 2, 206, 200, 23, 238, + 224, 9, 2, 206, 200, 23, 237, 230, 9, 2, 206, 200, 23, 152, 9, 2, 206, + 200, 23, 231, 85, 9, 2, 206, 200, 23, 231, 66, 9, 2, 206, 200, 23, 230, + 209, 9, 2, 206, 200, 23, 229, 100, 9, 2, 206, 200, 23, 226, 222, 9, 2, + 206, 200, 23, 224, 110, 9, 2, 206, 200, 23, 185, 9, 2, 206, 200, 23, 213, + 43, 9, 2, 206, 200, 23, 212, 147, 9, 2, 206, 200, 23, 207, 203, 9, 2, + 206, 200, 23, 106, 91, 237, 219, 9, 2, 206, 200, 23, 207, 29, 9, 2, 206, + 200, 23, 206, 197, 9, 2, 206, 197, 9, 2, 206, 198, 23, 68, 9, 2, 206, + 186, 9, 2, 206, 187, 23, 63, 9, 2, 206, 187, 23, 228, 209, 9, 2, 206, + 187, 23, 228, 183, 9, 2, 206, 187, 23, 209, 242, 9, 2, 206, 182, 9, 2, + 206, 185, 9, 2, 206, 183, 9, 2, 206, 179, 9, 2, 206, 167, 9, 2, 206, 168, + 23, 229, 231, 9, 2, 206, 166, 9, 2, 202, 116, 9, 2, 202, 117, 209, 141, + 9, 2, 202, 117, 103, 23, 228, 183, 9, 2, 202, 112, 9, 2, 202, 105, 9, 2, + 202, 91, 9, 2, 202, 39, 9, 2, 202, 40, 115, 202, 39, 9, 2, 202, 38, 9, 2, + 202, 36, 9, 2, 202, 37, 230, 31, 209, 141, 9, 2, 202, 31, 9, 2, 202, 22, + 9, 2, 202, 6, 9, 2, 202, 4, 9, 2, 202, 5, 23, 63, 9, 2, 202, 3, 9, 2, + 202, 2, 9, 2, 229, 254, 241, 119, 9, 2, 251, 233, 23, 221, 40, 9, 2, 251, + 150, 23, 63, 9, 2, 250, 244, 23, 228, 198, 9, 2, 244, 204, 229, 69, 23, + 207, 41, 91, 225, 79, 9, 2, 244, 202, 9, 2, 243, 157, 91, 212, 199, 9, 2, + 242, 41, 23, 213, 43, 9, 2, 240, 180, 23, 237, 219, 9, 2, 240, 180, 23, + 213, 43, 9, 2, 239, 7, 23, 250, 232, 91, 230, 13, 91, 63, 9, 2, 239, 7, + 23, 250, 73, 9, 2, 238, 189, 9, 2, 238, 71, 9, 2, 236, 3, 9, 2, 230, 44, + 23, 250, 200, 9, 2, 230, 44, 23, 250, 72, 9, 2, 230, 44, 23, 238, 55, 9, + 2, 230, 44, 23, 237, 219, 9, 2, 230, 44, 23, 237, 4, 23, 250, 73, 9, 2, + 230, 44, 23, 226, 222, 9, 2, 230, 44, 23, 185, 9, 2, 230, 44, 23, 212, + 192, 9, 2, 230, 44, 23, 207, 203, 9, 2, 230, 44, 23, 206, 208, 9, 2, 228, + 95, 23, 238, 81, 9, 2, 226, 238, 213, 25, 23, 249, 15, 9, 2, 226, 238, + 23, 241, 5, 91, 228, 30, 9, 2, 226, 238, 23, 212, 199, 9, 2, 224, 227, 9, + 2, 223, 198, 23, 202, 116, 9, 2, 223, 108, 9, 2, 222, 68, 9, 2, 222, 67, + 9, 2, 222, 66, 23, 248, 253, 9, 2, 222, 66, 23, 238, 81, 9, 2, 221, 57, + 215, 198, 222, 59, 244, 54, 9, 2, 218, 223, 250, 59, 9, 2, 218, 113, 9, + 2, 215, 23, 23, 231, 86, 237, 208, 9, 2, 209, 1, 9, 2, 207, 7, 23, 225, + 20, 9, 2, 106, 68, 9, 141, 2, 120, 250, 75, 9, 141, 2, 126, 250, 75, 9, + 141, 2, 239, 147, 250, 75, 9, 141, 2, 239, 233, 250, 75, 9, 141, 2, 212, + 88, 250, 75, 9, 141, 2, 213, 112, 250, 75, 9, 141, 2, 241, 143, 250, 75, + 9, 141, 2, 222, 64, 250, 75, 9, 141, 2, 126, 243, 156, 9, 141, 2, 239, + 147, 243, 156, 9, 141, 2, 239, 233, 243, 156, 9, 141, 2, 212, 88, 243, + 156, 9, 141, 2, 213, 112, 243, 156, 9, 141, 2, 241, 143, 243, 156, 9, + 141, 2, 222, 64, 243, 156, 9, 141, 2, 239, 147, 68, 9, 141, 2, 239, 233, + 68, 9, 141, 2, 212, 88, 68, 9, 141, 2, 213, 112, 68, 9, 141, 2, 241, 143, + 68, 9, 141, 2, 222, 64, 68, 9, 141, 2, 118, 238, 164, 9, 141, 2, 120, + 238, 164, 9, 141, 2, 126, 238, 164, 9, 141, 2, 239, 147, 238, 164, 9, + 141, 2, 239, 233, 238, 164, 9, 141, 2, 212, 88, 238, 164, 9, 141, 2, 213, + 112, 238, 164, 9, 141, 2, 241, 143, 238, 164, 9, 141, 2, 222, 64, 238, + 164, 9, 141, 2, 118, 238, 161, 9, 141, 2, 120, 238, 161, 9, 141, 2, 126, + 238, 161, 9, 141, 2, 239, 147, 238, 161, 9, 141, 2, 239, 233, 238, 161, + 9, 141, 2, 120, 213, 59, 9, 141, 2, 126, 213, 59, 9, 141, 2, 126, 213, + 60, 206, 69, 18, 9, 141, 2, 239, 147, 213, 59, 9, 141, 2, 239, 233, 213, + 59, 9, 141, 2, 212, 88, 213, 59, 9, 141, 2, 213, 112, 213, 59, 9, 141, 2, + 241, 143, 213, 59, 9, 141, 2, 222, 64, 213, 59, 9, 141, 2, 118, 213, 54, + 9, 141, 2, 120, 213, 54, 9, 141, 2, 126, 213, 54, 9, 141, 2, 126, 213, + 55, 206, 69, 18, 9, 141, 2, 239, 147, 213, 54, 9, 141, 2, 239, 233, 213, + 54, 9, 141, 2, 213, 60, 23, 238, 247, 91, 243, 156, 9, 141, 2, 213, 60, + 23, 238, 247, 91, 224, 110, 9, 141, 2, 118, 247, 156, 9, 141, 2, 120, + 247, 156, 9, 141, 2, 126, 247, 156, 9, 141, 2, 126, 247, 157, 206, 69, + 18, 9, 141, 2, 239, 147, 247, 156, 9, 141, 2, 239, 233, 247, 156, 9, 141, + 2, 126, 206, 69, 239, 159, 241, 6, 9, 141, 2, 126, 206, 69, 239, 159, + 241, 3, 9, 141, 2, 239, 147, 206, 69, 239, 159, 227, 118, 9, 141, 2, 239, + 147, 206, 69, 239, 159, 227, 116, 9, 141, 2, 239, 147, 206, 69, 239, 159, + 227, 119, 63, 9, 141, 2, 239, 147, 206, 69, 239, 159, 227, 119, 249, 255, + 9, 141, 2, 212, 88, 206, 69, 239, 159, 250, 71, 9, 141, 2, 213, 112, 206, + 69, 239, 159, 231, 58, 9, 141, 2, 213, 112, 206, 69, 239, 159, 231, 60, + 63, 9, 141, 2, 213, 112, 206, 69, 239, 159, 231, 60, 249, 255, 9, 141, 2, + 241, 143, 206, 69, 239, 159, 206, 181, 9, 141, 2, 241, 143, 206, 69, 239, + 159, 206, 180, 9, 141, 2, 222, 64, 206, 69, 239, 159, 231, 74, 9, 141, 2, + 222, 64, 206, 69, 239, 159, 231, 73, 9, 141, 2, 222, 64, 206, 69, 239, + 159, 231, 72, 9, 141, 2, 222, 64, 206, 69, 239, 159, 231, 75, 63, 9, 141, + 2, 120, 250, 76, 209, 141, 9, 141, 2, 126, 250, 76, 209, 141, 9, 141, 2, + 239, 147, 250, 76, 209, 141, 9, 141, 2, 239, 233, 250, 76, 209, 141, 9, + 141, 2, 212, 88, 250, 76, 209, 141, 9, 141, 2, 118, 248, 240, 9, 141, 2, + 120, 248, 240, 9, 141, 2, 126, 248, 240, 9, 141, 2, 239, 147, 248, 240, + 9, 141, 2, 239, 147, 248, 241, 206, 69, 18, 9, 141, 2, 239, 233, 248, + 240, 9, 141, 2, 239, 233, 248, 241, 206, 69, 18, 9, 141, 2, 222, 77, 9, + 141, 2, 222, 78, 9, 141, 2, 118, 241, 2, 9, 141, 2, 120, 241, 2, 9, 141, + 2, 118, 209, 61, 243, 156, 9, 141, 2, 120, 209, 58, 243, 156, 9, 141, 2, + 239, 233, 212, 77, 243, 156, 9, 141, 2, 118, 209, 61, 206, 69, 239, 159, + 63, 9, 141, 2, 120, 209, 58, 206, 69, 239, 159, 63, 9, 141, 2, 118, 241, + 139, 250, 75, 9, 141, 2, 118, 217, 56, 250, 75, 9, 141, 2, 38, 250, 62, + 118, 212, 78, 9, 141, 2, 38, 250, 62, 118, 217, 55, 9, 141, 2, 118, 217, + 56, 237, 202, 9, 141, 2, 118, 162, 237, 202, 9, 141, 2, 241, 120, 118, + 209, 60, 9, 141, 2, 241, 120, 120, 209, 57, 9, 141, 2, 241, 120, 239, + 153, 9, 141, 2, 241, 120, 240, 18, 9, 141, 2, 239, 147, 106, 206, 69, 18, + 9, 141, 2, 239, 233, 106, 206, 69, 18, 9, 141, 2, 212, 88, 106, 206, 69, + 18, 9, 141, 2, 213, 112, 106, 206, 69, 18, 9, 141, 2, 241, 143, 106, 206, + 69, 18, 9, 141, 2, 222, 64, 106, 206, 69, 18, 9, 217, 179, 2, 38, 250, + 62, 203, 238, 243, 141, 9, 217, 179, 2, 80, 245, 242, 9, 217, 179, 2, + 243, 228, 245, 242, 9, 217, 179, 2, 243, 228, 208, 81, 9, 217, 179, 2, + 243, 228, 217, 61, 9, 2, 251, 233, 23, 221, 41, 209, 141, 9, 2, 251, 233, + 23, 212, 197, 9, 2, 251, 123, 23, 241, 4, 9, 2, 249, 16, 23, 243, 157, + 209, 141, 9, 2, 249, 4, 23, 251, 149, 9, 2, 249, 4, 23, 222, 100, 9, 2, + 249, 4, 23, 202, 116, 9, 2, 247, 194, 115, 247, 194, 23, 223, 109, 9, 2, + 244, 213, 23, 209, 242, 9, 2, 244, 204, 23, 228, 183, 9, 2, 243, 189, 23, + 231, 85, 9, 2, 243, 189, 23, 106, 106, 68, 9, 2, 243, 187, 23, 207, 29, + 9, 2, 242, 38, 23, 250, 200, 9, 2, 242, 38, 23, 250, 75, 9, 2, 242, 38, + 23, 250, 76, 250, 50, 227, 222, 9, 2, 242, 38, 23, 243, 176, 9, 2, 242, + 38, 23, 242, 31, 9, 2, 242, 38, 23, 241, 22, 9, 2, 242, 38, 23, 239, 8, + 9, 2, 242, 38, 23, 238, 81, 9, 2, 242, 38, 23, 238, 64, 237, 208, 9, 2, + 242, 38, 23, 238, 55, 9, 2, 242, 38, 23, 152, 9, 2, 242, 38, 23, 237, 3, + 9, 2, 242, 38, 23, 231, 86, 237, 208, 9, 2, 242, 38, 23, 229, 231, 9, 2, + 242, 38, 23, 228, 183, 9, 2, 242, 38, 23, 228, 177, 9, 2, 242, 38, 23, + 228, 178, 91, 229, 231, 9, 2, 242, 38, 23, 228, 82, 9, 2, 242, 38, 23, + 228, 28, 9, 2, 242, 38, 23, 228, 29, 23, 228, 183, 9, 2, 242, 38, 23, + 226, 228, 91, 238, 55, 9, 2, 242, 38, 23, 225, 79, 9, 2, 242, 38, 23, + 224, 228, 9, 2, 242, 38, 23, 224, 155, 9, 2, 242, 38, 23, 222, 100, 9, 2, + 242, 38, 23, 218, 167, 9, 2, 242, 38, 23, 213, 43, 9, 2, 242, 38, 23, + 212, 163, 237, 208, 9, 2, 241, 191, 23, 228, 183, 9, 2, 241, 191, 23, + 219, 96, 9, 2, 241, 23, 203, 196, 9, 2, 241, 5, 245, 124, 241, 4, 9, 2, + 240, 180, 213, 25, 23, 250, 75, 9, 2, 240, 180, 213, 25, 23, 237, 3, 9, + 2, 240, 180, 213, 25, 23, 231, 86, 237, 208, 9, 2, 240, 180, 213, 25, 23, + 228, 113, 9, 2, 240, 180, 213, 25, 23, 228, 30, 9, 2, 240, 180, 213, 25, + 23, 225, 20, 9, 2, 240, 180, 213, 25, 23, 224, 228, 9, 2, 240, 180, 213, + 25, 23, 211, 10, 9, 2, 240, 180, 23, 211, 10, 9, 2, 239, 7, 23, 249, 3, + 9, 2, 239, 7, 23, 243, 189, 237, 208, 9, 2, 239, 7, 23, 242, 38, 23, 231, + 86, 237, 208, 9, 2, 239, 7, 23, 242, 38, 23, 229, 231, 9, 2, 239, 7, 23, + 241, 25, 9, 2, 239, 7, 23, 239, 8, 9, 2, 239, 7, 23, 238, 225, 91, 243, + 233, 9, 2, 239, 7, 23, 238, 225, 91, 222, 240, 9, 2, 239, 7, 23, 237, + 160, 91, 63, 9, 2, 239, 7, 23, 228, 178, 91, 229, 231, 9, 2, 239, 7, 23, + 228, 28, 9, 2, 239, 7, 23, 228, 29, 23, 228, 183, 9, 2, 239, 7, 23, 226, + 227, 9, 2, 239, 7, 23, 223, 199, 9, 2, 239, 7, 23, 222, 240, 9, 2, 239, + 7, 23, 222, 241, 91, 241, 190, 9, 2, 239, 7, 23, 222, 241, 91, 238, 81, + 9, 2, 239, 7, 23, 213, 3, 9, 2, 239, 7, 23, 202, 22, 9, 2, 239, 2, 215, + 198, 222, 59, 244, 54, 9, 2, 238, 163, 23, 68, 9, 2, 238, 56, 23, 238, + 56, 245, 124, 238, 55, 9, 2, 237, 229, 23, 231, 86, 237, 208, 9, 2, 237, + 220, 91, 238, 56, 23, 209, 242, 9, 2, 237, 160, 209, 142, 237, 208, 9, 2, + 237, 4, 23, 250, 76, 115, 237, 4, 23, 250, 75, 9, 2, 230, 44, 23, 247, + 193, 9, 2, 230, 44, 23, 173, 9, 2, 230, 44, 23, 106, 106, 68, 9, 2, 230, + 44, 23, 206, 210, 9, 2, 228, 95, 23, 202, 7, 115, 202, 6, 9, 2, 228, 83, + 9, 2, 228, 81, 9, 2, 228, 80, 9, 2, 228, 79, 9, 2, 228, 78, 9, 2, 228, + 77, 9, 2, 228, 76, 9, 2, 228, 75, 115, 228, 75, 237, 208, 9, 2, 228, 74, + 9, 2, 228, 73, 115, 228, 72, 9, 2, 228, 71, 9, 2, 228, 70, 9, 2, 228, 69, + 9, 2, 228, 68, 9, 2, 228, 67, 9, 2, 228, 66, 9, 2, 228, 65, 9, 2, 228, + 64, 9, 2, 228, 63, 9, 2, 228, 62, 9, 2, 228, 61, 9, 2, 228, 60, 9, 2, + 228, 59, 9, 2, 228, 58, 9, 2, 228, 57, 9, 2, 228, 56, 9, 2, 228, 55, 9, + 2, 228, 54, 9, 2, 228, 52, 9, 2, 228, 53, 23, 237, 230, 9, 2, 228, 53, + 23, 231, 85, 9, 2, 228, 53, 23, 219, 97, 91, 226, 236, 9, 2, 228, 53, 23, + 219, 97, 91, 219, 97, 91, 226, 236, 9, 2, 228, 53, 23, 207, 41, 91, 249, + 32, 9, 2, 228, 51, 9, 2, 228, 50, 9, 2, 228, 49, 9, 2, 228, 48, 9, 2, + 228, 47, 9, 2, 228, 46, 9, 2, 228, 45, 9, 2, 228, 44, 9, 2, 228, 43, 9, + 2, 228, 42, 9, 2, 228, 40, 9, 2, 228, 41, 23, 250, 75, 9, 2, 228, 41, 23, + 249, 15, 9, 2, 228, 41, 23, 242, 30, 237, 209, 237, 208, 9, 2, 228, 41, + 23, 228, 207, 9, 2, 228, 41, 23, 228, 113, 9, 2, 228, 41, 23, 209, 218, + 9, 2, 228, 41, 23, 209, 187, 9, 2, 228, 41, 23, 207, 40, 9, 2, 228, 41, + 23, 207, 29, 9, 2, 228, 41, 23, 206, 197, 9, 2, 228, 39, 9, 2, 228, 37, + 9, 2, 228, 38, 23, 242, 40, 9, 2, 228, 38, 23, 239, 8, 9, 2, 228, 38, 23, + 231, 85, 9, 2, 228, 38, 23, 231, 86, 237, 208, 9, 2, 228, 38, 23, 222, + 100, 9, 2, 228, 38, 23, 219, 97, 91, 219, 97, 91, 226, 236, 9, 2, 228, + 38, 23, 213, 28, 91, 229, 100, 9, 2, 228, 38, 23, 207, 29, 9, 2, 228, 38, + 23, 206, 197, 9, 2, 228, 35, 9, 2, 228, 34, 9, 2, 226, 238, 237, 209, 23, + 250, 75, 9, 2, 226, 238, 23, 243, 156, 9, 2, 226, 238, 23, 237, 140, 9, + 2, 226, 238, 23, 219, 96, 9, 2, 226, 238, 23, 219, 97, 91, 219, 97, 91, + 226, 236, 9, 2, 226, 238, 23, 209, 242, 9, 2, 224, 156, 91, 202, 115, 9, + 2, 223, 200, 115, 223, 200, 23, 239, 8, 9, 2, 223, 200, 115, 223, 200, + 23, 230, 12, 9, 2, 222, 66, 23, 243, 189, 237, 208, 9, 2, 222, 66, 23, + 238, 55, 9, 2, 222, 66, 23, 237, 212, 9, 2, 222, 66, 23, 237, 3, 9, 2, + 222, 66, 23, 229, 171, 9, 2, 222, 66, 23, 228, 78, 9, 2, 222, 66, 23, + 225, 79, 9, 2, 222, 66, 23, 219, 97, 91, 219, 96, 9, 2, 222, 66, 23, 68, + 9, 2, 222, 66, 23, 106, 91, 68, 9, 2, 222, 66, 23, 206, 197, 9, 2, 215, + 23, 237, 209, 23, 152, 9, 2, 215, 23, 23, 241, 92, 9, 2, 215, 23, 23, + 213, 44, 250, 50, 227, 222, 9, 2, 215, 23, 23, 209, 242, 9, 2, 213, 87, + 209, 141, 9, 2, 213, 44, 115, 213, 43, 9, 2, 213, 44, 91, 236, 21, 9, 2, + 213, 44, 91, 223, 86, 9, 2, 213, 44, 91, 214, 230, 9, 2, 212, 198, 91, + 242, 38, 23, 222, 100, 9, 2, 212, 198, 91, 241, 191, 23, 250, 231, 9, 2, + 212, 163, 23, 209, 242, 9, 2, 209, 243, 91, 215, 22, 9, 2, 207, 192, 23, + 238, 233, 209, 141, 9, 2, 207, 192, 23, 126, 243, 156, 9, 2, 206, 209, + 230, 238, 9, 2, 206, 209, 23, 207, 29, 9, 2, 206, 200, 23, 244, 153, 9, + 2, 206, 200, 23, 228, 36, 9, 2, 206, 200, 23, 226, 236, 9, 2, 202, 115, + 9, 2, 202, 7, 115, 202, 7, 91, 214, 230, 9, 2, 202, 5, 23, 126, 243, 157, + 209, 141, 14, 7, 255, 18, 14, 7, 255, 17, 14, 7, 255, 16, 14, 7, 255, 15, + 14, 7, 255, 14, 14, 7, 255, 13, 14, 7, 255, 12, 14, 7, 255, 11, 14, 7, + 255, 10, 14, 7, 255, 9, 14, 7, 255, 8, 14, 7, 255, 7, 14, 7, 255, 6, 14, + 7, 255, 4, 14, 7, 255, 3, 14, 7, 255, 2, 14, 7, 255, 1, 14, 7, 255, 0, + 14, 7, 254, 255, 14, 7, 254, 254, 14, 7, 254, 253, 14, 7, 254, 252, 14, + 7, 254, 251, 14, 7, 254, 250, 14, 7, 254, 249, 14, 7, 254, 248, 14, 7, + 254, 247, 14, 7, 254, 246, 14, 7, 254, 245, 14, 7, 254, 244, 14, 7, 254, + 243, 14, 7, 254, 241, 14, 7, 254, 240, 14, 7, 254, 238, 14, 7, 254, 237, + 14, 7, 254, 236, 14, 7, 254, 235, 14, 7, 254, 234, 14, 7, 254, 233, 14, + 7, 254, 232, 14, 7, 254, 231, 14, 7, 254, 230, 14, 7, 254, 229, 14, 7, + 254, 228, 14, 7, 254, 227, 14, 7, 254, 225, 14, 7, 254, 224, 14, 7, 254, + 223, 14, 7, 254, 221, 14, 7, 254, 220, 14, 7, 254, 219, 14, 7, 254, 218, + 14, 7, 254, 217, 14, 7, 254, 216, 14, 7, 254, 215, 14, 7, 254, 214, 14, + 7, 254, 211, 14, 7, 254, 210, 14, 7, 254, 209, 14, 7, 254, 208, 14, 7, + 254, 207, 14, 7, 254, 206, 14, 7, 254, 205, 14, 7, 254, 204, 14, 7, 254, + 203, 14, 7, 254, 202, 14, 7, 254, 201, 14, 7, 254, 200, 14, 7, 254, 199, + 14, 7, 254, 198, 14, 7, 254, 197, 14, 7, 254, 196, 14, 7, 254, 195, 14, + 7, 254, 194, 14, 7, 254, 193, 14, 7, 254, 192, 14, 7, 254, 188, 14, 7, + 254, 187, 14, 7, 254, 186, 14, 7, 254, 185, 14, 7, 249, 253, 14, 7, 249, + 251, 14, 7, 249, 249, 14, 7, 249, 247, 14, 7, 249, 245, 14, 7, 249, 244, + 14, 7, 249, 242, 14, 7, 249, 240, 14, 7, 249, 238, 14, 7, 249, 236, 14, + 7, 247, 121, 14, 7, 247, 120, 14, 7, 247, 119, 14, 7, 247, 118, 14, 7, + 247, 117, 14, 7, 247, 116, 14, 7, 247, 115, 14, 7, 247, 114, 14, 7, 247, + 113, 14, 7, 247, 112, 14, 7, 247, 111, 14, 7, 247, 110, 14, 7, 247, 109, + 14, 7, 247, 108, 14, 7, 247, 107, 14, 7, 247, 106, 14, 7, 247, 105, 14, + 7, 247, 104, 14, 7, 247, 103, 14, 7, 247, 102, 14, 7, 247, 101, 14, 7, + 247, 100, 14, 7, 247, 99, 14, 7, 247, 98, 14, 7, 247, 97, 14, 7, 247, 96, + 14, 7, 247, 95, 14, 7, 247, 94, 14, 7, 245, 50, 14, 7, 245, 49, 14, 7, + 245, 48, 14, 7, 245, 47, 14, 7, 245, 46, 14, 7, 245, 45, 14, 7, 245, 44, + 14, 7, 245, 43, 14, 7, 245, 42, 14, 7, 245, 41, 14, 7, 245, 40, 14, 7, + 245, 39, 14, 7, 245, 38, 14, 7, 245, 37, 14, 7, 245, 36, 14, 7, 245, 35, + 14, 7, 245, 34, 14, 7, 245, 33, 14, 7, 245, 32, 14, 7, 245, 31, 14, 7, + 245, 30, 14, 7, 245, 29, 14, 7, 245, 28, 14, 7, 245, 27, 14, 7, 245, 26, + 14, 7, 245, 25, 14, 7, 245, 24, 14, 7, 245, 23, 14, 7, 245, 22, 14, 7, + 245, 21, 14, 7, 245, 20, 14, 7, 245, 19, 14, 7, 245, 18, 14, 7, 245, 17, + 14, 7, 245, 16, 14, 7, 245, 15, 14, 7, 245, 14, 14, 7, 245, 13, 14, 7, + 245, 12, 14, 7, 245, 11, 14, 7, 245, 10, 14, 7, 245, 9, 14, 7, 245, 8, + 14, 7, 245, 7, 14, 7, 245, 6, 14, 7, 245, 5, 14, 7, 245, 4, 14, 7, 245, + 3, 14, 7, 245, 2, 14, 7, 245, 1, 14, 7, 245, 0, 14, 7, 244, 255, 14, 7, + 244, 254, 14, 7, 244, 253, 14, 7, 244, 252, 14, 7, 244, 251, 14, 7, 244, + 250, 14, 7, 244, 249, 14, 7, 244, 248, 14, 7, 244, 247, 14, 7, 244, 246, + 14, 7, 244, 245, 14, 7, 244, 244, 14, 7, 244, 243, 14, 7, 244, 242, 14, + 7, 244, 241, 14, 7, 244, 240, 14, 7, 244, 239, 14, 7, 244, 238, 14, 7, + 244, 237, 14, 7, 244, 236, 14, 7, 244, 235, 14, 7, 244, 234, 14, 7, 244, + 233, 14, 7, 244, 232, 14, 7, 244, 231, 14, 7, 244, 230, 14, 7, 244, 229, + 14, 7, 244, 228, 14, 7, 244, 227, 14, 7, 244, 226, 14, 7, 244, 225, 14, + 7, 244, 224, 14, 7, 244, 223, 14, 7, 244, 222, 14, 7, 244, 221, 14, 7, + 244, 220, 14, 7, 244, 219, 14, 7, 244, 218, 14, 7, 244, 217, 14, 7, 244, + 216, 14, 7, 244, 215, 14, 7, 241, 235, 14, 7, 241, 234, 14, 7, 241, 233, + 14, 7, 241, 232, 14, 7, 241, 231, 14, 7, 241, 230, 14, 7, 241, 229, 14, + 7, 241, 228, 14, 7, 241, 227, 14, 7, 241, 226, 14, 7, 241, 225, 14, 7, + 241, 224, 14, 7, 241, 223, 14, 7, 241, 222, 14, 7, 241, 221, 14, 7, 241, + 220, 14, 7, 241, 219, 14, 7, 241, 218, 14, 7, 241, 217, 14, 7, 241, 216, + 14, 7, 241, 215, 14, 7, 241, 214, 14, 7, 241, 213, 14, 7, 241, 212, 14, + 7, 241, 211, 14, 7, 241, 210, 14, 7, 241, 209, 14, 7, 241, 208, 14, 7, + 241, 207, 14, 7, 241, 206, 14, 7, 241, 205, 14, 7, 241, 204, 14, 7, 241, + 203, 14, 7, 241, 202, 14, 7, 241, 201, 14, 7, 241, 200, 14, 7, 241, 199, + 14, 7, 241, 198, 14, 7, 241, 197, 14, 7, 241, 196, 14, 7, 241, 195, 14, + 7, 241, 194, 14, 7, 241, 193, 14, 7, 241, 192, 14, 7, 240, 173, 14, 7, + 240, 172, 14, 7, 240, 171, 14, 7, 240, 170, 14, 7, 240, 169, 14, 7, 240, + 168, 14, 7, 240, 167, 14, 7, 240, 166, 14, 7, 240, 165, 14, 7, 240, 164, + 14, 7, 240, 163, 14, 7, 240, 162, 14, 7, 240, 161, 14, 7, 240, 160, 14, + 7, 240, 159, 14, 7, 240, 158, 14, 7, 240, 157, 14, 7, 240, 156, 14, 7, + 240, 155, 14, 7, 240, 154, 14, 7, 240, 153, 14, 7, 240, 152, 14, 7, 240, + 151, 14, 7, 240, 150, 14, 7, 240, 149, 14, 7, 240, 148, 14, 7, 240, 147, + 14, 7, 240, 146, 14, 7, 240, 145, 14, 7, 240, 144, 14, 7, 240, 143, 14, + 7, 240, 142, 14, 7, 240, 141, 14, 7, 240, 140, 14, 7, 240, 139, 14, 7, + 240, 138, 14, 7, 240, 137, 14, 7, 240, 136, 14, 7, 240, 135, 14, 7, 240, + 134, 14, 7, 240, 133, 14, 7, 240, 132, 14, 7, 240, 131, 14, 7, 240, 130, + 14, 7, 240, 129, 14, 7, 240, 128, 14, 7, 240, 127, 14, 7, 240, 126, 14, + 7, 240, 125, 14, 7, 240, 124, 14, 7, 240, 123, 14, 7, 240, 122, 14, 7, + 240, 121, 14, 7, 240, 120, 14, 7, 240, 119, 14, 7, 240, 118, 14, 7, 240, + 117, 14, 7, 240, 116, 14, 7, 240, 115, 14, 7, 240, 114, 14, 7, 240, 113, + 14, 7, 240, 112, 14, 7, 240, 111, 14, 7, 240, 110, 14, 7, 240, 109, 14, + 7, 239, 74, 14, 7, 239, 73, 14, 7, 239, 72, 14, 7, 239, 71, 14, 7, 239, + 70, 14, 7, 239, 69, 14, 7, 239, 68, 14, 7, 239, 67, 14, 7, 239, 66, 14, + 7, 239, 65, 14, 7, 239, 64, 14, 7, 239, 63, 14, 7, 239, 62, 14, 7, 239, + 61, 14, 7, 239, 60, 14, 7, 239, 59, 14, 7, 239, 58, 14, 7, 239, 57, 14, + 7, 239, 56, 14, 7, 239, 55, 14, 7, 239, 54, 14, 7, 239, 53, 14, 7, 239, + 52, 14, 7, 239, 51, 14, 7, 239, 50, 14, 7, 239, 49, 14, 7, 239, 48, 14, + 7, 239, 47, 14, 7, 239, 46, 14, 7, 239, 45, 14, 7, 239, 44, 14, 7, 239, + 43, 14, 7, 239, 42, 14, 7, 239, 41, 14, 7, 239, 40, 14, 7, 239, 39, 14, + 7, 239, 38, 14, 7, 239, 37, 14, 7, 239, 36, 14, 7, 239, 35, 14, 7, 239, + 34, 14, 7, 239, 33, 14, 7, 239, 32, 14, 7, 239, 31, 14, 7, 239, 30, 14, + 7, 239, 29, 14, 7, 239, 28, 14, 7, 239, 27, 14, 7, 239, 26, 14, 7, 239, + 25, 14, 7, 239, 24, 14, 7, 239, 23, 14, 7, 239, 22, 14, 7, 239, 21, 14, + 7, 239, 20, 14, 7, 239, 19, 14, 7, 239, 18, 14, 7, 239, 17, 14, 7, 239, + 16, 14, 7, 239, 15, 14, 7, 239, 14, 14, 7, 239, 13, 14, 7, 239, 12, 14, + 7, 239, 11, 14, 7, 237, 169, 14, 7, 237, 168, 14, 7, 237, 167, 14, 7, + 237, 166, 14, 7, 237, 165, 14, 7, 237, 164, 14, 7, 237, 163, 14, 7, 237, + 162, 14, 7, 237, 161, 14, 7, 235, 190, 14, 7, 235, 189, 14, 7, 235, 188, + 14, 7, 235, 187, 14, 7, 235, 186, 14, 7, 235, 185, 14, 7, 235, 184, 14, + 7, 235, 183, 14, 7, 235, 182, 14, 7, 235, 181, 14, 7, 235, 180, 14, 7, + 235, 179, 14, 7, 235, 178, 14, 7, 235, 177, 14, 7, 235, 176, 14, 7, 235, + 175, 14, 7, 235, 174, 14, 7, 235, 173, 14, 7, 235, 172, 14, 7, 230, 53, + 14, 7, 230, 52, 14, 7, 230, 51, 14, 7, 230, 50, 14, 7, 230, 49, 14, 7, + 230, 48, 14, 7, 230, 47, 14, 7, 230, 46, 14, 7, 228, 128, 14, 7, 228, + 127, 14, 7, 228, 126, 14, 7, 228, 125, 14, 7, 228, 124, 14, 7, 228, 123, + 14, 7, 228, 122, 14, 7, 228, 121, 14, 7, 228, 120, 14, 7, 228, 119, 14, + 7, 226, 183, 14, 7, 226, 182, 14, 7, 226, 181, 14, 7, 226, 179, 14, 7, + 226, 177, 14, 7, 226, 176, 14, 7, 226, 174, 14, 7, 226, 172, 14, 7, 226, + 170, 14, 7, 226, 168, 14, 7, 226, 166, 14, 7, 226, 164, 14, 7, 226, 162, + 14, 7, 226, 161, 14, 7, 226, 159, 14, 7, 226, 157, 14, 7, 226, 156, 14, + 7, 226, 155, 14, 7, 226, 154, 14, 7, 226, 153, 14, 7, 226, 152, 14, 7, + 226, 151, 14, 7, 226, 150, 14, 7, 226, 149, 14, 7, 226, 147, 14, 7, 226, + 145, 14, 7, 226, 143, 14, 7, 226, 142, 14, 7, 226, 140, 14, 7, 226, 139, + 14, 7, 226, 137, 14, 7, 226, 136, 14, 7, 226, 134, 14, 7, 226, 132, 14, + 7, 226, 130, 14, 7, 226, 128, 14, 7, 226, 126, 14, 7, 226, 125, 14, 7, + 226, 123, 14, 7, 226, 121, 14, 7, 226, 120, 14, 7, 226, 118, 14, 7, 226, + 116, 14, 7, 226, 114, 14, 7, 226, 112, 14, 7, 226, 111, 14, 7, 226, 109, + 14, 7, 226, 107, 14, 7, 226, 105, 14, 7, 226, 104, 14, 7, 226, 102, 14, + 7, 226, 100, 14, 7, 226, 99, 14, 7, 226, 98, 14, 7, 226, 96, 14, 7, 226, + 94, 14, 7, 226, 92, 14, 7, 226, 90, 14, 7, 226, 88, 14, 7, 226, 86, 14, + 7, 226, 84, 14, 7, 226, 83, 14, 7, 226, 81, 14, 7, 226, 79, 14, 7, 226, + 77, 14, 7, 226, 75, 14, 7, 223, 160, 14, 7, 223, 159, 14, 7, 223, 158, + 14, 7, 223, 157, 14, 7, 223, 156, 14, 7, 223, 155, 14, 7, 223, 154, 14, + 7, 223, 153, 14, 7, 223, 152, 14, 7, 223, 151, 14, 7, 223, 150, 14, 7, + 223, 149, 14, 7, 223, 148, 14, 7, 223, 147, 14, 7, 223, 146, 14, 7, 223, + 145, 14, 7, 223, 144, 14, 7, 223, 143, 14, 7, 223, 142, 14, 7, 223, 141, + 14, 7, 223, 140, 14, 7, 223, 139, 14, 7, 223, 138, 14, 7, 223, 137, 14, + 7, 223, 136, 14, 7, 223, 135, 14, 7, 223, 134, 14, 7, 223, 133, 14, 7, + 223, 132, 14, 7, 223, 131, 14, 7, 223, 130, 14, 7, 223, 129, 14, 7, 223, + 128, 14, 7, 223, 127, 14, 7, 223, 126, 14, 7, 223, 125, 14, 7, 223, 124, + 14, 7, 223, 123, 14, 7, 223, 122, 14, 7, 223, 121, 14, 7, 223, 120, 14, + 7, 223, 119, 14, 7, 223, 118, 14, 7, 223, 117, 14, 7, 223, 116, 14, 7, + 223, 115, 14, 7, 223, 114, 14, 7, 223, 113, 14, 7, 223, 112, 14, 7, 221, + 252, 14, 7, 221, 251, 14, 7, 221, 250, 14, 7, 221, 249, 14, 7, 221, 248, + 14, 7, 221, 247, 14, 7, 221, 246, 14, 7, 221, 245, 14, 7, 221, 244, 14, + 7, 221, 243, 14, 7, 221, 242, 14, 7, 221, 241, 14, 7, 221, 240, 14, 7, + 221, 239, 14, 7, 221, 238, 14, 7, 221, 237, 14, 7, 221, 236, 14, 7, 221, + 235, 14, 7, 221, 234, 14, 7, 221, 233, 14, 7, 221, 232, 14, 7, 221, 231, + 14, 7, 221, 83, 14, 7, 221, 82, 14, 7, 221, 81, 14, 7, 221, 80, 14, 7, + 221, 79, 14, 7, 221, 78, 14, 7, 221, 77, 14, 7, 221, 76, 14, 7, 221, 75, + 14, 7, 221, 74, 14, 7, 221, 73, 14, 7, 221, 72, 14, 7, 221, 71, 14, 7, + 221, 70, 14, 7, 221, 69, 14, 7, 221, 68, 14, 7, 221, 67, 14, 7, 221, 66, + 14, 7, 221, 65, 14, 7, 221, 64, 14, 7, 221, 63, 14, 7, 221, 62, 14, 7, + 221, 61, 14, 7, 221, 60, 14, 7, 221, 59, 14, 7, 221, 58, 14, 7, 220, 173, + 14, 7, 220, 172, 14, 7, 220, 171, 14, 7, 220, 170, 14, 7, 220, 169, 14, + 7, 220, 168, 14, 7, 220, 167, 14, 7, 220, 166, 14, 7, 220, 165, 14, 7, + 220, 164, 14, 7, 220, 163, 14, 7, 220, 162, 14, 7, 220, 161, 14, 7, 220, + 160, 14, 7, 220, 159, 14, 7, 220, 158, 14, 7, 220, 157, 14, 7, 220, 156, + 14, 7, 220, 155, 14, 7, 220, 154, 14, 7, 220, 153, 14, 7, 220, 152, 14, + 7, 220, 151, 14, 7, 220, 150, 14, 7, 220, 149, 14, 7, 220, 148, 14, 7, + 220, 147, 14, 7, 220, 146, 14, 7, 220, 145, 14, 7, 220, 144, 14, 7, 220, + 143, 14, 7, 220, 142, 14, 7, 220, 141, 14, 7, 220, 140, 14, 7, 220, 139, + 14, 7, 220, 138, 14, 7, 220, 137, 14, 7, 220, 136, 14, 7, 220, 135, 14, + 7, 220, 134, 14, 7, 220, 133, 14, 7, 220, 132, 14, 7, 220, 131, 14, 7, + 220, 130, 14, 7, 220, 129, 14, 7, 220, 128, 14, 7, 220, 127, 14, 7, 220, + 126, 14, 7, 220, 125, 14, 7, 220, 124, 14, 7, 220, 123, 14, 7, 220, 122, + 14, 7, 220, 121, 14, 7, 220, 120, 14, 7, 220, 119, 14, 7, 220, 118, 14, + 7, 220, 117, 14, 7, 220, 116, 14, 7, 220, 115, 14, 7, 220, 114, 14, 7, + 220, 113, 14, 7, 220, 112, 14, 7, 220, 111, 14, 7, 220, 110, 14, 7, 220, + 109, 14, 7, 220, 108, 14, 7, 220, 107, 14, 7, 220, 106, 14, 7, 220, 105, + 14, 7, 220, 104, 14, 7, 220, 103, 14, 7, 220, 102, 14, 7, 220, 101, 14, + 7, 220, 100, 14, 7, 220, 99, 14, 7, 219, 183, 14, 7, 219, 182, 14, 7, + 219, 181, 14, 7, 219, 180, 14, 7, 219, 179, 14, 7, 219, 178, 14, 7, 219, + 177, 14, 7, 219, 176, 14, 7, 219, 175, 14, 7, 219, 174, 14, 7, 219, 173, + 14, 7, 219, 172, 14, 7, 219, 171, 14, 7, 217, 133, 14, 7, 217, 132, 14, + 7, 217, 131, 14, 7, 217, 130, 14, 7, 217, 129, 14, 7, 217, 128, 14, 7, + 217, 127, 14, 7, 216, 255, 14, 7, 216, 254, 14, 7, 216, 253, 14, 7, 216, + 252, 14, 7, 216, 251, 14, 7, 216, 250, 14, 7, 216, 249, 14, 7, 216, 248, + 14, 7, 216, 247, 14, 7, 216, 246, 14, 7, 216, 245, 14, 7, 216, 244, 14, + 7, 216, 243, 14, 7, 216, 242, 14, 7, 216, 241, 14, 7, 216, 240, 14, 7, + 216, 239, 14, 7, 216, 238, 14, 7, 216, 237, 14, 7, 216, 236, 14, 7, 216, + 235, 14, 7, 216, 234, 14, 7, 216, 233, 14, 7, 216, 232, 14, 7, 216, 231, + 14, 7, 216, 230, 14, 7, 216, 229, 14, 7, 216, 228, 14, 7, 216, 227, 14, + 7, 216, 226, 14, 7, 216, 225, 14, 7, 216, 224, 14, 7, 216, 223, 14, 7, + 216, 222, 14, 7, 215, 91, 14, 7, 215, 90, 14, 7, 215, 89, 14, 7, 215, 88, + 14, 7, 215, 87, 14, 7, 215, 86, 14, 7, 215, 85, 14, 7, 215, 84, 14, 7, + 215, 83, 14, 7, 215, 82, 14, 7, 215, 81, 14, 7, 215, 80, 14, 7, 215, 79, + 14, 7, 215, 78, 14, 7, 215, 77, 14, 7, 215, 76, 14, 7, 215, 75, 14, 7, + 215, 74, 14, 7, 215, 73, 14, 7, 215, 72, 14, 7, 215, 71, 14, 7, 215, 70, + 14, 7, 215, 69, 14, 7, 215, 68, 14, 7, 215, 67, 14, 7, 215, 66, 14, 7, + 215, 65, 14, 7, 215, 64, 14, 7, 215, 63, 14, 7, 215, 62, 14, 7, 215, 61, + 14, 7, 215, 60, 14, 7, 215, 59, 14, 7, 215, 58, 14, 7, 215, 57, 14, 7, + 215, 56, 14, 7, 215, 55, 14, 7, 215, 54, 14, 7, 215, 53, 14, 7, 215, 52, + 14, 7, 215, 51, 14, 7, 215, 50, 14, 7, 215, 49, 14, 7, 215, 48, 14, 7, + 215, 47, 14, 7, 215, 46, 14, 7, 215, 45, 14, 7, 215, 44, 14, 7, 215, 43, + 14, 7, 215, 42, 14, 7, 215, 41, 14, 7, 215, 40, 14, 7, 215, 39, 14, 7, + 215, 38, 14, 7, 210, 67, 14, 7, 210, 66, 14, 7, 210, 65, 14, 7, 210, 64, + 14, 7, 210, 63, 14, 7, 210, 62, 14, 7, 210, 61, 14, 7, 210, 60, 14, 7, + 210, 59, 14, 7, 210, 58, 14, 7, 210, 57, 14, 7, 210, 56, 14, 7, 210, 55, + 14, 7, 210, 54, 14, 7, 210, 53, 14, 7, 210, 52, 14, 7, 210, 51, 14, 7, + 210, 50, 14, 7, 210, 49, 14, 7, 210, 48, 14, 7, 210, 47, 14, 7, 210, 46, + 14, 7, 210, 45, 14, 7, 210, 44, 14, 7, 210, 43, 14, 7, 210, 42, 14, 7, + 210, 41, 14, 7, 210, 40, 14, 7, 210, 39, 14, 7, 210, 38, 14, 7, 210, 37, + 14, 7, 210, 36, 14, 7, 210, 35, 14, 7, 210, 34, 14, 7, 210, 33, 14, 7, + 210, 32, 14, 7, 210, 31, 14, 7, 210, 30, 14, 7, 210, 29, 14, 7, 210, 28, + 14, 7, 210, 27, 14, 7, 210, 26, 14, 7, 210, 25, 14, 7, 210, 24, 14, 7, + 207, 88, 14, 7, 207, 87, 14, 7, 207, 86, 14, 7, 207, 85, 14, 7, 207, 84, + 14, 7, 207, 83, 14, 7, 207, 82, 14, 7, 207, 81, 14, 7, 207, 80, 14, 7, + 207, 79, 14, 7, 207, 78, 14, 7, 207, 77, 14, 7, 207, 76, 14, 7, 207, 75, + 14, 7, 207, 74, 14, 7, 207, 73, 14, 7, 207, 72, 14, 7, 207, 71, 14, 7, + 207, 70, 14, 7, 207, 69, 14, 7, 207, 68, 14, 7, 207, 67, 14, 7, 207, 66, + 14, 7, 207, 65, 14, 7, 207, 64, 14, 7, 207, 63, 14, 7, 207, 62, 14, 7, + 207, 61, 14, 7, 207, 60, 14, 7, 207, 59, 14, 7, 207, 58, 14, 7, 207, 57, + 14, 7, 207, 56, 14, 7, 207, 55, 14, 7, 207, 54, 14, 7, 207, 53, 14, 7, + 207, 52, 14, 7, 207, 51, 14, 7, 207, 50, 14, 7, 207, 49, 14, 7, 207, 48, + 14, 7, 207, 47, 14, 7, 207, 46, 14, 7, 207, 45, 14, 7, 207, 44, 14, 7, + 207, 43, 14, 7, 207, 42, 14, 7, 206, 163, 14, 7, 206, 162, 14, 7, 206, + 161, 14, 7, 206, 160, 14, 7, 206, 159, 14, 7, 206, 158, 14, 7, 206, 157, + 14, 7, 206, 156, 14, 7, 206, 155, 14, 7, 206, 154, 14, 7, 206, 153, 14, + 7, 206, 152, 14, 7, 206, 151, 14, 7, 206, 150, 14, 7, 206, 149, 14, 7, + 206, 148, 14, 7, 206, 147, 14, 7, 206, 146, 14, 7, 206, 145, 14, 7, 206, + 144, 14, 7, 206, 143, 14, 7, 206, 142, 14, 7, 206, 141, 14, 7, 206, 140, + 14, 7, 206, 139, 14, 7, 206, 138, 14, 7, 206, 137, 14, 7, 206, 136, 14, + 7, 206, 135, 14, 7, 206, 134, 14, 7, 206, 133, 14, 7, 206, 132, 14, 7, + 206, 131, 14, 7, 206, 130, 14, 7, 206, 129, 14, 7, 206, 128, 14, 7, 206, + 127, 14, 7, 206, 126, 14, 7, 206, 125, 14, 7, 206, 124, 14, 7, 206, 123, + 14, 7, 206, 122, 14, 7, 206, 121, 14, 7, 206, 120, 14, 7, 206, 119, 14, + 7, 206, 118, 14, 7, 206, 117, 14, 7, 206, 116, 14, 7, 206, 115, 14, 7, + 206, 114, 14, 7, 206, 113, 14, 7, 206, 112, 14, 7, 206, 111, 14, 7, 206, + 110, 14, 7, 206, 109, 14, 7, 206, 108, 14, 7, 206, 107, 14, 7, 206, 106, + 14, 7, 206, 105, 14, 7, 206, 104, 14, 7, 206, 103, 14, 7, 206, 102, 14, + 7, 206, 101, 14, 7, 206, 100, 14, 7, 206, 99, 14, 7, 206, 98, 14, 7, 206, + 97, 14, 7, 206, 96, 14, 7, 206, 95, 14, 7, 206, 94, 14, 7, 206, 93, 14, + 7, 206, 92, 14, 7, 206, 91, 14, 7, 206, 90, 14, 7, 206, 89, 14, 7, 206, + 88, 14, 7, 206, 87, 14, 7, 204, 143, 14, 7, 204, 142, 14, 7, 204, 141, + 14, 7, 204, 140, 14, 7, 204, 139, 14, 7, 204, 138, 14, 7, 204, 137, 14, + 7, 204, 136, 14, 7, 204, 135, 14, 7, 204, 134, 14, 7, 204, 133, 14, 7, + 204, 132, 14, 7, 204, 131, 14, 7, 204, 130, 14, 7, 204, 129, 14, 7, 204, + 128, 14, 7, 204, 127, 14, 7, 204, 126, 14, 7, 204, 125, 14, 7, 204, 124, + 14, 7, 204, 123, 14, 7, 204, 122, 14, 7, 204, 121, 14, 7, 204, 120, 14, + 7, 204, 119, 14, 7, 204, 118, 14, 7, 204, 117, 14, 7, 204, 116, 14, 7, + 204, 115, 14, 7, 204, 114, 14, 7, 204, 113, 14, 7, 204, 112, 14, 7, 203, + 194, 14, 7, 203, 193, 14, 7, 203, 192, 14, 7, 203, 191, 14, 7, 203, 190, + 14, 7, 203, 189, 14, 7, 203, 188, 14, 7, 203, 187, 14, 7, 203, 186, 14, + 7, 203, 185, 14, 7, 203, 184, 14, 7, 203, 183, 14, 7, 203, 122, 14, 7, + 203, 121, 14, 7, 203, 120, 14, 7, 203, 119, 14, 7, 203, 118, 14, 7, 203, + 117, 14, 7, 203, 116, 14, 7, 203, 115, 14, 7, 203, 114, 14, 7, 202, 158, + 14, 7, 202, 157, 14, 7, 202, 156, 14, 7, 202, 155, 14, 7, 202, 154, 14, + 7, 202, 153, 14, 7, 202, 152, 14, 7, 202, 151, 14, 7, 202, 150, 14, 7, + 202, 149, 14, 7, 202, 148, 14, 7, 202, 147, 14, 7, 202, 146, 14, 7, 202, + 145, 14, 7, 202, 144, 14, 7, 202, 143, 14, 7, 202, 142, 14, 7, 202, 141, + 14, 7, 202, 140, 14, 7, 202, 139, 14, 7, 202, 138, 14, 7, 202, 137, 14, + 7, 202, 136, 14, 7, 202, 135, 14, 7, 202, 134, 14, 7, 202, 133, 14, 7, + 202, 132, 14, 7, 202, 131, 14, 7, 202, 130, 14, 7, 202, 129, 14, 7, 202, + 128, 14, 7, 202, 127, 14, 7, 202, 126, 14, 7, 202, 125, 14, 7, 202, 124, + 14, 7, 202, 123, 14, 7, 202, 122, 14, 7, 202, 121, 14, 7, 202, 120, 14, + 7, 202, 119, 14, 7, 202, 118, 14, 7, 252, 24, 14, 7, 252, 23, 14, 7, 252, + 22, 14, 7, 252, 21, 14, 7, 252, 20, 14, 7, 252, 19, 14, 7, 252, 18, 14, + 7, 252, 17, 14, 7, 252, 16, 14, 7, 252, 15, 14, 7, 252, 14, 14, 7, 252, + 13, 14, 7, 252, 12, 14, 7, 252, 11, 14, 7, 252, 10, 14, 7, 252, 9, 14, 7, + 252, 8, 14, 7, 252, 7, 14, 7, 252, 6, 14, 7, 252, 5, 14, 7, 252, 4, 14, + 7, 252, 3, 14, 7, 252, 2, 14, 7, 252, 1, 14, 7, 252, 0, 14, 7, 251, 255, + 14, 7, 251, 254, 14, 7, 251, 253, 14, 7, 251, 252, 14, 7, 251, 251, 14, + 7, 251, 250, 14, 7, 251, 249, 14, 7, 251, 248, 14, 7, 251, 247, 27, 7, + 255, 18, 27, 7, 255, 17, 27, 7, 255, 16, 27, 7, 255, 15, 27, 7, 255, 14, + 27, 7, 255, 12, 27, 7, 255, 9, 27, 7, 255, 8, 27, 7, 255, 7, 27, 7, 255, + 6, 27, 7, 255, 5, 27, 7, 255, 4, 27, 7, 255, 3, 27, 7, 255, 2, 27, 7, + 255, 1, 27, 7, 254, 255, 27, 7, 254, 254, 27, 7, 254, 253, 27, 7, 254, + 251, 27, 7, 254, 250, 27, 7, 254, 249, 27, 7, 254, 248, 27, 7, 254, 247, + 27, 7, 254, 246, 27, 7, 254, 245, 27, 7, 254, 244, 27, 7, 254, 243, 27, + 7, 254, 242, 27, 7, 254, 241, 27, 7, 254, 240, 27, 7, 254, 238, 27, 7, + 254, 237, 27, 7, 254, 236, 27, 7, 254, 235, 27, 7, 254, 233, 27, 7, 254, + 232, 27, 7, 254, 231, 27, 7, 254, 230, 27, 7, 254, 229, 27, 7, 254, 228, + 27, 7, 254, 227, 27, 7, 254, 226, 27, 7, 254, 225, 27, 7, 254, 223, 27, + 7, 254, 222, 27, 7, 254, 221, 27, 7, 254, 219, 27, 7, 254, 217, 27, 7, + 254, 216, 27, 7, 254, 215, 27, 7, 254, 214, 27, 7, 254, 213, 27, 7, 254, + 212, 27, 7, 254, 211, 27, 7, 254, 210, 27, 7, 254, 209, 27, 7, 254, 208, + 27, 7, 254, 207, 27, 7, 254, 206, 27, 7, 254, 205, 27, 7, 254, 204, 27, + 7, 254, 203, 27, 7, 254, 202, 27, 7, 254, 201, 27, 7, 254, 200, 27, 7, + 254, 199, 27, 7, 254, 198, 27, 7, 254, 197, 27, 7, 254, 196, 27, 7, 254, + 195, 27, 7, 254, 194, 27, 7, 254, 193, 27, 7, 254, 192, 27, 7, 254, 191, + 27, 7, 254, 190, 27, 7, 254, 189, 27, 7, 254, 188, 27, 7, 254, 187, 27, + 7, 254, 186, 27, 7, 254, 185, 27, 7, 254, 184, 27, 7, 254, 183, 27, 7, + 254, 182, 27, 7, 254, 181, 27, 7, 254, 180, 27, 7, 254, 179, 27, 7, 254, + 178, 27, 7, 254, 177, 27, 7, 254, 176, 27, 7, 254, 175, 27, 7, 254, 174, + 27, 7, 254, 173, 27, 7, 254, 172, 27, 7, 254, 171, 27, 7, 254, 170, 27, + 7, 254, 169, 27, 7, 254, 168, 27, 7, 254, 167, 27, 7, 254, 166, 27, 7, + 254, 165, 27, 7, 254, 164, 27, 7, 254, 163, 27, 7, 254, 162, 27, 7, 254, + 161, 27, 7, 254, 160, 27, 7, 254, 159, 27, 7, 254, 158, 27, 7, 254, 157, + 27, 7, 254, 156, 27, 7, 254, 155, 27, 7, 254, 154, 27, 7, 254, 153, 27, + 7, 254, 151, 27, 7, 254, 150, 27, 7, 254, 149, 27, 7, 254, 148, 27, 7, + 254, 147, 27, 7, 254, 146, 27, 7, 254, 145, 27, 7, 254, 144, 27, 7, 254, + 143, 27, 7, 254, 142, 27, 7, 254, 141, 27, 7, 254, 140, 27, 7, 254, 139, + 27, 7, 254, 138, 27, 7, 254, 137, 27, 7, 254, 136, 27, 7, 254, 135, 27, + 7, 254, 134, 27, 7, 254, 133, 27, 7, 254, 132, 27, 7, 254, 131, 27, 7, + 254, 130, 27, 7, 254, 129, 27, 7, 254, 128, 27, 7, 254, 127, 27, 7, 254, + 126, 27, 7, 254, 125, 27, 7, 254, 124, 27, 7, 254, 123, 27, 7, 254, 122, + 27, 7, 254, 121, 27, 7, 254, 120, 27, 7, 254, 119, 27, 7, 254, 118, 27, + 7, 254, 116, 27, 7, 254, 115, 27, 7, 254, 114, 27, 7, 254, 113, 27, 7, + 254, 112, 27, 7, 254, 111, 27, 7, 254, 110, 27, 7, 254, 109, 27, 7, 254, + 108, 27, 7, 254, 107, 27, 7, 254, 106, 27, 7, 254, 105, 27, 7, 254, 103, + 27, 7, 254, 102, 27, 7, 254, 101, 27, 7, 254, 100, 27, 7, 254, 99, 27, 7, + 254, 98, 27, 7, 254, 97, 27, 7, 254, 96, 27, 7, 254, 95, 27, 7, 254, 94, + 27, 7, 254, 93, 27, 7, 254, 92, 27, 7, 254, 91, 27, 7, 254, 90, 27, 7, + 254, 89, 27, 7, 254, 88, 27, 7, 254, 87, 27, 7, 254, 86, 27, 7, 254, 85, + 27, 7, 254, 84, 27, 7, 254, 83, 27, 7, 254, 82, 27, 7, 254, 81, 27, 7, + 254, 80, 27, 7, 254, 79, 27, 7, 254, 78, 27, 7, 254, 77, 27, 7, 254, 76, + 27, 7, 254, 75, 27, 7, 254, 74, 27, 7, 254, 73, 27, 7, 254, 72, 27, 7, + 254, 71, 27, 7, 254, 70, 27, 7, 254, 69, 27, 7, 254, 68, 27, 7, 254, 67, + 27, 7, 254, 66, 27, 7, 254, 65, 27, 7, 254, 64, 27, 7, 254, 63, 27, 7, + 254, 62, 27, 7, 254, 61, 27, 7, 254, 60, 27, 7, 254, 59, 27, 7, 254, 58, + 27, 7, 254, 57, 27, 7, 254, 56, 27, 7, 254, 55, 27, 7, 254, 54, 27, 7, + 254, 53, 27, 7, 254, 52, 27, 7, 254, 51, 27, 7, 254, 50, 27, 7, 254, 49, + 27, 7, 254, 48, 27, 7, 254, 47, 27, 7, 254, 46, 27, 7, 254, 45, 27, 7, + 254, 44, 27, 7, 254, 43, 27, 7, 254, 42, 27, 7, 254, 41, 27, 7, 254, 40, + 27, 7, 254, 39, 27, 7, 254, 38, 27, 7, 254, 37, 27, 7, 254, 36, 27, 7, + 254, 35, 27, 7, 254, 33, 27, 7, 254, 32, 27, 7, 254, 31, 27, 7, 254, 30, + 27, 7, 254, 29, 27, 7, 254, 28, 27, 7, 254, 27, 27, 7, 254, 26, 27, 7, + 254, 25, 27, 7, 254, 24, 27, 7, 254, 23, 27, 7, 254, 22, 27, 7, 254, 21, + 27, 7, 254, 20, 27, 7, 254, 19, 27, 7, 254, 18, 27, 7, 254, 17, 27, 7, + 254, 16, 27, 7, 254, 15, 27, 7, 254, 14, 27, 7, 254, 13, 27, 7, 254, 12, + 27, 7, 254, 11, 27, 7, 254, 10, 27, 7, 254, 9, 27, 7, 254, 8, 27, 7, 254, + 7, 27, 7, 254, 6, 27, 7, 254, 5, 27, 7, 254, 4, 27, 7, 254, 3, 27, 7, + 254, 2, 27, 7, 254, 1, 27, 7, 254, 0, 27, 7, 253, 255, 27, 7, 253, 254, + 27, 7, 253, 253, 27, 7, 253, 252, 27, 7, 253, 251, 27, 7, 253, 250, 27, + 7, 253, 249, 27, 7, 253, 248, 27, 7, 253, 247, 27, 7, 253, 246, 27, 7, + 253, 245, 27, 7, 253, 244, 27, 7, 253, 243, 27, 7, 253, 242, 27, 7, 253, + 241, 27, 7, 253, 240, 27, 7, 253, 239, 27, 7, 253, 238, 27, 7, 253, 237, + 27, 7, 253, 236, 27, 7, 253, 235, 27, 7, 253, 234, 27, 7, 253, 233, 27, + 7, 253, 232, 27, 7, 253, 231, 27, 7, 253, 230, 27, 7, 253, 229, 27, 7, + 253, 228, 27, 7, 253, 227, 27, 7, 253, 226, 27, 7, 253, 225, 27, 7, 253, + 224, 27, 7, 253, 223, 27, 7, 253, 222, 27, 7, 253, 221, 27, 7, 253, 220, + 27, 7, 253, 219, 27, 7, 253, 218, 27, 7, 253, 217, 27, 7, 253, 216, 27, + 7, 253, 215, 27, 7, 253, 214, 27, 7, 253, 213, 27, 7, 253, 212, 27, 7, + 253, 211, 27, 7, 253, 210, 27, 7, 253, 209, 27, 7, 253, 208, 27, 7, 253, + 207, 27, 7, 253, 206, 27, 7, 253, 205, 27, 7, 253, 204, 27, 7, 253, 203, + 27, 7, 253, 202, 27, 7, 253, 201, 27, 7, 253, 200, 27, 7, 253, 199, 27, + 7, 253, 198, 27, 7, 253, 197, 27, 7, 253, 196, 27, 7, 253, 195, 27, 7, + 253, 194, 27, 7, 253, 193, 27, 7, 253, 192, 27, 7, 253, 191, 27, 7, 253, + 190, 27, 7, 253, 189, 27, 7, 253, 188, 27, 7, 253, 187, 27, 7, 253, 186, + 27, 7, 253, 185, 27, 7, 253, 184, 27, 7, 253, 183, 27, 7, 253, 182, 27, + 7, 253, 181, 27, 7, 253, 180, 27, 7, 253, 179, 27, 7, 253, 177, 27, 7, + 253, 176, 27, 7, 253, 175, 27, 7, 253, 174, 27, 7, 253, 173, 27, 7, 253, + 172, 27, 7, 253, 171, 27, 7, 253, 170, 27, 7, 253, 169, 27, 7, 253, 168, + 27, 7, 253, 167, 27, 7, 253, 164, 27, 7, 253, 163, 27, 7, 253, 162, 27, + 7, 253, 161, 27, 7, 253, 157, 27, 7, 253, 156, 27, 7, 253, 155, 27, 7, + 253, 154, 27, 7, 253, 153, 27, 7, 253, 152, 27, 7, 253, 151, 27, 7, 253, + 150, 27, 7, 253, 149, 27, 7, 253, 148, 27, 7, 253, 147, 27, 7, 253, 146, + 27, 7, 253, 145, 27, 7, 253, 144, 27, 7, 253, 143, 27, 7, 253, 142, 27, + 7, 253, 141, 27, 7, 253, 140, 27, 7, 253, 139, 27, 7, 253, 137, 27, 7, + 253, 136, 27, 7, 253, 135, 27, 7, 253, 134, 27, 7, 253, 133, 27, 7, 253, + 132, 27, 7, 253, 131, 27, 7, 253, 130, 27, 7, 253, 129, 27, 7, 253, 128, + 27, 7, 253, 127, 27, 7, 253, 126, 27, 7, 253, 125, 27, 7, 253, 124, 27, + 7, 253, 123, 27, 7, 253, 122, 27, 7, 253, 121, 27, 7, 253, 120, 27, 7, + 253, 119, 27, 7, 253, 118, 27, 7, 253, 117, 27, 7, 253, 116, 27, 7, 253, + 115, 27, 7, 253, 114, 27, 7, 253, 113, 27, 7, 253, 112, 27, 7, 253, 111, + 27, 7, 253, 110, 27, 7, 253, 109, 27, 7, 253, 108, 27, 7, 253, 107, 27, + 7, 253, 106, 27, 7, 253, 105, 27, 7, 253, 104, 27, 7, 253, 103, 27, 7, + 253, 102, 27, 7, 253, 101, 27, 7, 253, 100, 27, 7, 253, 99, 27, 7, 253, + 98, 27, 7, 253, 97, 27, 7, 253, 96, 27, 7, 253, 95, 27, 7, 253, 94, 27, + 7, 253, 93, 27, 7, 253, 92, 27, 7, 253, 91, 27, 7, 253, 90, 27, 7, 253, + 89, 27, 7, 253, 88, 27, 7, 253, 87, 27, 7, 253, 86, 27, 7, 253, 85, 27, + 7, 253, 84, 27, 7, 253, 83, 27, 7, 253, 82, 27, 7, 253, 81, 27, 7, 253, + 80, 27, 7, 253, 79, 27, 7, 253, 78, 27, 7, 253, 77, 27, 7, 253, 76, 216, + 221, 219, 245, 216, 57, 27, 7, 253, 75, 27, 7, 253, 74, 27, 7, 253, 73, + 27, 7, 253, 72, 27, 7, 253, 71, 27, 7, 253, 70, 27, 7, 253, 69, 27, 7, + 253, 68, 27, 7, 253, 67, 27, 7, 253, 66, 27, 7, 253, 65, 27, 7, 253, 64, + 199, 27, 7, 253, 63, 27, 7, 253, 62, 27, 7, 253, 61, 27, 7, 253, 60, 27, + 7, 253, 59, 27, 7, 253, 58, 27, 7, 253, 57, 27, 7, 253, 55, 27, 7, 253, + 53, 27, 7, 253, 51, 27, 7, 253, 49, 27, 7, 253, 47, 27, 7, 253, 45, 27, + 7, 253, 43, 27, 7, 253, 41, 27, 7, 253, 39, 27, 7, 253, 37, 248, 142, + 227, 36, 82, 27, 7, 253, 35, 241, 84, 227, 36, 82, 27, 7, 253, 34, 27, 7, + 253, 32, 27, 7, 253, 30, 27, 7, 253, 28, 27, 7, 253, 26, 27, 7, 253, 24, + 27, 7, 253, 22, 27, 7, 253, 20, 27, 7, 253, 18, 27, 7, 253, 17, 27, 7, + 253, 16, 27, 7, 253, 15, 27, 7, 253, 14, 27, 7, 253, 13, 27, 7, 253, 12, + 27, 7, 253, 11, 27, 7, 253, 10, 27, 7, 253, 9, 27, 7, 253, 8, 27, 7, 253, + 7, 27, 7, 253, 6, 27, 7, 253, 5, 27, 7, 253, 4, 27, 7, 253, 3, 27, 7, + 253, 2, 27, 7, 253, 1, 27, 7, 253, 0, 27, 7, 252, 255, 27, 7, 252, 254, + 27, 7, 252, 253, 27, 7, 252, 252, 27, 7, 252, 251, 27, 7, 252, 250, 27, + 7, 252, 249, 27, 7, 252, 248, 27, 7, 252, 247, 27, 7, 252, 246, 27, 7, + 252, 245, 27, 7, 252, 244, 27, 7, 252, 243, 27, 7, 252, 242, 27, 7, 252, + 241, 27, 7, 252, 240, 27, 7, 252, 239, 27, 7, 252, 238, 27, 7, 252, 237, + 27, 7, 252, 236, 27, 7, 252, 235, 27, 7, 252, 234, 27, 7, 252, 233, 27, + 7, 252, 232, 27, 7, 252, 231, 27, 7, 252, 230, 27, 7, 252, 229, 27, 7, + 252, 228, 27, 7, 252, 227, 27, 7, 252, 226, 27, 7, 252, 225, 27, 7, 252, + 224, 27, 7, 252, 223, 27, 7, 252, 222, 27, 7, 252, 221, 27, 7, 252, 220, + 27, 7, 252, 219, 27, 7, 252, 218, 27, 7, 252, 217, 27, 7, 252, 216, 27, + 7, 252, 215, 27, 7, 252, 214, 27, 7, 252, 213, 27, 7, 252, 212, 27, 7, + 252, 211, 27, 7, 252, 210, 27, 7, 252, 209, 27, 7, 252, 208, 27, 7, 252, + 207, 27, 7, 252, 206, 27, 7, 252, 205, 27, 7, 252, 204, 27, 7, 252, 203, + 27, 7, 252, 202, 27, 7, 252, 201, 27, 7, 252, 200, 27, 7, 252, 199, 27, + 7, 252, 198, 27, 7, 252, 197, 27, 7, 252, 196, 27, 7, 252, 195, 27, 7, + 252, 194, 27, 7, 252, 193, 27, 7, 252, 192, 27, 7, 252, 191, 27, 7, 252, + 190, 27, 7, 252, 189, 27, 7, 252, 188, 27, 7, 252, 187, 27, 7, 252, 186, + 27, 7, 252, 185, 27, 7, 252, 184, 27, 7, 252, 183, 27, 7, 252, 182, 27, + 7, 252, 181, 27, 7, 252, 180, 27, 7, 252, 179, 27, 7, 252, 178, 27, 7, + 252, 177, 27, 7, 252, 176, 27, 7, 252, 175, 27, 7, 252, 174, 27, 7, 252, + 173, 27, 7, 252, 172, 27, 7, 252, 171, 27, 7, 252, 170, 27, 7, 252, 169, + 27, 7, 252, 168, 27, 7, 252, 167, 27, 7, 252, 166, 27, 7, 252, 165, 27, + 7, 252, 164, 24, 1, 218, 198, 222, 136, 224, 197, 24, 1, 218, 198, 238, + 198, 239, 178, 24, 1, 218, 198, 218, 47, 224, 198, 218, 115, 24, 1, 218, + 198, 218, 47, 224, 198, 218, 116, 24, 1, 218, 198, 223, 107, 224, 197, + 24, 1, 218, 198, 212, 195, 24, 1, 218, 198, 208, 199, 224, 197, 24, 1, + 218, 198, 220, 215, 224, 197, 24, 1, 218, 198, 212, 254, 219, 169, 222, + 32, 24, 1, 218, 198, 218, 47, 219, 169, 222, 33, 218, 115, 24, 1, 218, + 198, 218, 47, 219, 169, 222, 33, 218, 116, 24, 1, 218, 198, 225, 156, 24, + 1, 218, 198, 207, 204, 225, 157, 24, 1, 218, 198, 222, 197, 24, 1, 218, + 198, 225, 153, 24, 1, 218, 198, 225, 111, 24, 1, 218, 198, 223, 186, 24, + 1, 218, 198, 213, 114, 24, 1, 218, 198, 221, 91, 24, 1, 218, 198, 229, + 163, 24, 1, 218, 198, 222, 0, 24, 1, 218, 198, 210, 179, 24, 1, 218, 198, + 222, 135, 24, 1, 218, 198, 228, 10, 24, 1, 218, 198, 227, 176, 228, 175, + 24, 1, 218, 198, 221, 101, 224, 205, 24, 1, 218, 198, 225, 160, 24, 1, + 218, 198, 219, 62, 24, 1, 218, 198, 238, 100, 24, 1, 218, 198, 219, 125, + 24, 1, 218, 198, 224, 55, 222, 170, 24, 1, 218, 198, 220, 196, 224, 208, + 24, 1, 218, 198, 106, 202, 188, 223, 100, 24, 1, 218, 198, 238, 101, 24, + 1, 218, 198, 221, 101, 221, 102, 24, 1, 218, 198, 212, 91, 24, 1, 218, + 198, 224, 190, 24, 1, 218, 198, 224, 211, 24, 1, 218, 198, 224, 31, 24, + 1, 218, 198, 230, 21, 24, 1, 218, 198, 219, 169, 227, 223, 24, 1, 218, + 198, 223, 26, 227, 223, 24, 1, 218, 198, 218, 219, 24, 1, 218, 198, 225, + 154, 24, 1, 218, 198, 222, 74, 24, 1, 218, 198, 217, 172, 24, 1, 218, + 198, 207, 201, 24, 1, 218, 198, 226, 235, 24, 1, 218, 198, 211, 251, 24, + 1, 218, 198, 209, 117, 24, 1, 218, 198, 225, 151, 24, 1, 218, 198, 229, + 170, 24, 1, 218, 198, 223, 22, 24, 1, 218, 198, 228, 188, 24, 1, 218, + 198, 224, 32, 24, 1, 218, 198, 212, 191, 24, 1, 218, 198, 227, 29, 24, 1, + 218, 198, 239, 246, 24, 1, 218, 198, 215, 211, 24, 1, 218, 198, 228, 233, + 24, 1, 218, 198, 211, 247, 24, 1, 218, 198, 225, 107, 218, 157, 24, 1, + 218, 198, 212, 247, 24, 1, 218, 198, 221, 100, 24, 1, 218, 198, 212, 230, + 221, 111, 202, 196, 24, 1, 218, 198, 220, 237, 224, 51, 24, 1, 218, 198, + 219, 164, 24, 1, 218, 198, 222, 2, 24, 1, 218, 198, 206, 231, 24, 1, 218, + 198, 222, 173, 24, 1, 218, 198, 225, 150, 24, 1, 218, 198, 222, 44, 24, + 1, 218, 198, 225, 49, 24, 1, 218, 198, 220, 251, 24, 1, 218, 198, 209, + 121, 24, 1, 218, 198, 211, 244, 24, 1, 218, 198, 219, 165, 24, 1, 218, + 198, 221, 115, 24, 1, 218, 198, 225, 158, 24, 1, 218, 198, 220, 248, 24, + 1, 218, 198, 229, 241, 24, 1, 218, 198, 221, 118, 24, 1, 218, 198, 206, + 50, 24, 1, 218, 198, 226, 239, 24, 1, 218, 198, 222, 230, 24, 1, 218, + 198, 223, 75, 24, 1, 218, 198, 225, 48, 24, 1, 218, 197, 221, 113, 24, 1, + 218, 197, 207, 204, 225, 155, 24, 1, 218, 197, 212, 152, 24, 1, 218, 197, + 213, 118, 207, 203, 24, 1, 218, 197, 227, 31, 221, 97, 24, 1, 218, 197, + 225, 55, 225, 159, 24, 1, 218, 197, 229, 92, 24, 1, 218, 197, 203, 18, + 24, 1, 218, 197, 225, 50, 24, 1, 218, 197, 230, 7, 24, 1, 218, 197, 219, + 19, 24, 1, 218, 197, 203, 96, 227, 223, 24, 1, 218, 197, 228, 29, 221, + 111, 221, 6, 24, 1, 218, 197, 221, 94, 213, 17, 24, 1, 218, 197, 222, + 249, 222, 47, 24, 1, 218, 197, 238, 98, 24, 1, 218, 197, 218, 105, 24, 1, + 218, 197, 207, 204, 221, 109, 24, 1, 218, 197, 213, 22, 222, 42, 24, 1, + 218, 197, 213, 18, 24, 1, 218, 197, 224, 198, 209, 120, 24, 1, 218, 197, + 225, 37, 225, 51, 24, 1, 218, 197, 220, 249, 221, 97, 24, 1, 218, 197, + 229, 159, 24, 1, 218, 197, 238, 99, 24, 1, 218, 197, 229, 155, 24, 1, + 218, 197, 228, 107, 24, 1, 218, 197, 219, 65, 24, 1, 218, 197, 205, 237, + 24, 1, 218, 197, 222, 137, 223, 184, 24, 1, 218, 197, 222, 172, 225, 33, + 24, 1, 218, 197, 203, 215, 24, 1, 218, 197, 215, 12, 24, 1, 218, 197, + 210, 14, 24, 1, 218, 197, 224, 210, 24, 1, 218, 197, 222, 156, 24, 1, + 218, 197, 222, 157, 228, 7, 24, 1, 218, 197, 224, 200, 24, 1, 218, 197, + 210, 230, 24, 1, 218, 197, 225, 41, 24, 1, 218, 197, 224, 36, 24, 1, 218, + 197, 221, 9, 24, 1, 218, 197, 217, 176, 24, 1, 218, 197, 224, 209, 222, + 174, 24, 1, 218, 197, 240, 31, 24, 1, 218, 197, 225, 28, 24, 1, 218, 197, + 240, 53, 24, 1, 218, 197, 229, 167, 24, 1, 218, 197, 225, 177, 222, 36, + 24, 1, 218, 197, 225, 177, 222, 12, 24, 1, 218, 197, 227, 175, 24, 1, + 218, 197, 222, 180, 24, 1, 218, 197, 221, 120, 24, 1, 218, 197, 192, 24, + 1, 218, 197, 229, 77, 24, 1, 218, 197, 222, 125, 24, 1, 168, 222, 136, + 225, 157, 24, 1, 168, 220, 214, 24, 1, 168, 202, 196, 24, 1, 168, 204, + 95, 24, 1, 168, 222, 173, 24, 1, 168, 223, 14, 24, 1, 168, 222, 143, 24, + 1, 168, 238, 108, 24, 1, 168, 225, 45, 24, 1, 168, 238, 205, 24, 1, 168, + 220, 239, 224, 91, 224, 212, 24, 1, 168, 221, 89, 225, 36, 24, 1, 168, + 225, 42, 24, 1, 168, 218, 111, 24, 1, 168, 222, 255, 24, 1, 168, 225, 53, + 247, 88, 24, 1, 168, 229, 157, 24, 1, 168, 238, 109, 24, 1, 168, 229, + 164, 24, 1, 168, 202, 214, 223, 215, 24, 1, 168, 220, 208, 24, 1, 168, + 225, 30, 24, 1, 168, 221, 119, 24, 1, 168, 225, 36, 24, 1, 168, 203, 19, + 24, 1, 168, 228, 241, 24, 1, 168, 230, 41, 24, 1, 168, 213, 113, 24, 1, + 168, 223, 8, 24, 1, 168, 210, 12, 24, 1, 168, 222, 16, 24, 1, 168, 208, + 199, 202, 199, 24, 1, 168, 211, 5, 24, 1, 168, 222, 163, 221, 6, 24, 1, + 168, 205, 236, 24, 1, 168, 223, 78, 24, 1, 168, 225, 177, 229, 166, 24, + 1, 168, 221, 102, 24, 1, 168, 222, 158, 24, 1, 168, 228, 11, 24, 1, 168, + 225, 38, 24, 1, 168, 224, 189, 24, 1, 168, 221, 96, 24, 1, 168, 209, 116, + 24, 1, 168, 222, 160, 24, 1, 168, 239, 106, 24, 1, 168, 223, 13, 24, 1, + 168, 221, 121, 24, 1, 168, 221, 117, 24, 1, 168, 247, 169, 24, 1, 168, + 205, 238, 24, 1, 168, 225, 43, 24, 1, 168, 215, 145, 24, 1, 168, 222, 46, + 24, 1, 168, 228, 28, 24, 1, 168, 208, 196, 24, 1, 168, 221, 103, 222, + 125, 24, 1, 168, 222, 38, 24, 1, 168, 229, 170, 24, 1, 168, 222, 165, 24, + 1, 168, 225, 150, 24, 1, 168, 225, 31, 24, 1, 168, 226, 239, 24, 1, 168, + 228, 175, 24, 1, 168, 222, 44, 24, 1, 168, 222, 125, 24, 1, 168, 203, + 205, 24, 1, 168, 222, 161, 24, 1, 168, 221, 106, 24, 1, 168, 221, 98, 24, + 1, 168, 228, 190, 222, 2, 24, 1, 168, 221, 104, 24, 1, 168, 223, 21, 24, + 1, 168, 225, 177, 221, 109, 24, 1, 168, 203, 110, 24, 1, 168, 223, 20, + 24, 1, 168, 212, 194, 24, 1, 168, 213, 116, 24, 1, 168, 225, 39, 24, 1, + 168, 225, 157, 24, 1, 168, 225, 49, 24, 1, 168, 229, 158, 24, 1, 168, + 225, 40, 24, 1, 168, 229, 162, 24, 1, 168, 225, 53, 218, 162, 24, 1, 168, + 202, 179, 24, 1, 168, 222, 34, 24, 1, 168, 224, 144, 24, 1, 168, 223, + 244, 24, 1, 168, 212, 250, 24, 1, 168, 229, 181, 227, 246, 24, 1, 168, + 229, 181, 240, 66, 24, 1, 168, 222, 195, 24, 1, 168, 223, 75, 24, 1, 168, + 227, 96, 24, 1, 168, 218, 123, 24, 1, 168, 219, 9, 24, 1, 168, 209, 132, + 24, 1, 134, 225, 29, 24, 1, 134, 204, 93, 24, 1, 134, 222, 32, 24, 1, + 134, 224, 197, 24, 1, 134, 222, 30, 24, 1, 134, 227, 141, 24, 1, 134, + 222, 35, 24, 1, 134, 221, 116, 24, 1, 134, 222, 179, 24, 1, 134, 221, 6, + 24, 1, 134, 203, 216, 24, 1, 134, 222, 133, 24, 1, 134, 213, 41, 24, 1, + 134, 222, 144, 24, 1, 134, 229, 165, 24, 1, 134, 209, 118, 24, 1, 134, + 213, 20, 24, 1, 134, 222, 43, 24, 1, 134, 210, 230, 24, 1, 134, 229, 170, + 24, 1, 134, 203, 98, 24, 1, 134, 228, 191, 24, 1, 134, 214, 233, 24, 1, + 134, 224, 202, 24, 1, 134, 223, 12, 24, 1, 134, 225, 125, 24, 1, 134, + 224, 208, 24, 1, 134, 213, 115, 24, 1, 134, 203, 42, 24, 1, 134, 222, 37, + 24, 1, 134, 229, 161, 225, 32, 24, 1, 134, 222, 140, 24, 1, 134, 207, + 203, 24, 1, 134, 238, 118, 24, 1, 134, 222, 130, 24, 1, 134, 240, 32, 24, + 1, 134, 223, 16, 24, 1, 134, 224, 181, 24, 1, 134, 227, 169, 24, 1, 134, + 222, 254, 24, 1, 134, 224, 50, 24, 1, 134, 224, 185, 24, 1, 134, 217, + 156, 24, 1, 134, 224, 183, 24, 1, 134, 224, 199, 24, 1, 134, 226, 222, + 24, 1, 134, 221, 108, 24, 1, 134, 225, 52, 24, 1, 134, 228, 165, 24, 1, + 134, 220, 251, 24, 1, 134, 209, 121, 24, 1, 134, 211, 244, 24, 1, 134, + 202, 179, 24, 1, 134, 229, 162, 24, 1, 134, 216, 201, 24, 1, 134, 209, + 175, 24, 1, 134, 222, 141, 24, 1, 134, 224, 204, 24, 1, 134, 221, 107, + 24, 1, 134, 229, 160, 24, 1, 134, 218, 117, 24, 1, 134, 218, 213, 24, 1, + 134, 220, 225, 24, 1, 134, 227, 175, 24, 1, 134, 222, 180, 24, 1, 134, + 224, 201, 24, 1, 134, 222, 153, 24, 1, 134, 202, 193, 24, 1, 134, 219, + 96, 24, 1, 134, 202, 192, 24, 1, 134, 223, 21, 24, 1, 134, 221, 97, 24, + 1, 134, 211, 7, 24, 1, 134, 228, 195, 24, 1, 134, 222, 169, 24, 1, 134, + 222, 138, 24, 1, 134, 207, 185, 24, 1, 134, 224, 212, 24, 1, 134, 228, + 185, 24, 1, 134, 221, 105, 24, 1, 134, 209, 119, 24, 1, 134, 225, 152, + 24, 1, 134, 222, 178, 24, 1, 134, 227, 168, 24, 1, 134, 222, 159, 24, 1, + 134, 221, 110, 24, 1, 134, 222, 16, 24, 1, 134, 238, 102, 24, 1, 134, + 228, 209, 24, 1, 134, 216, 108, 220, 45, 24, 1, 134, 210, 1, 24, 1, 134, + 208, 141, 24, 1, 134, 220, 248, 24, 1, 134, 216, 3, 24, 1, 134, 227, 225, + 24, 1, 134, 225, 7, 24, 1, 134, 226, 185, 24, 1, 134, 210, 179, 24, 1, + 134, 223, 246, 24, 1, 134, 213, 6, 24, 1, 134, 213, 16, 24, 1, 134, 228, + 137, 24, 1, 134, 221, 84, 24, 1, 134, 212, 199, 24, 1, 134, 221, 99, 24, + 1, 134, 219, 23, 24, 1, 134, 222, 100, 24, 1, 134, 212, 229, 24, 1, 134, + 217, 171, 24, 1, 134, 223, 184, 24, 1, 134, 227, 10, 24, 1, 134, 216, + 108, 223, 239, 24, 1, 134, 209, 2, 24, 1, 134, 221, 86, 24, 1, 134, 225, + 53, 213, 111, 24, 1, 134, 214, 231, 24, 1, 134, 240, 107, 24, 1, 93, 223, + 20, 24, 1, 93, 208, 147, 24, 1, 93, 225, 42, 24, 1, 93, 228, 11, 24, 1, + 93, 205, 177, 24, 1, 93, 227, 16, 24, 1, 93, 219, 168, 24, 1, 93, 211, + 255, 24, 1, 93, 216, 176, 24, 1, 93, 221, 112, 24, 1, 93, 222, 247, 24, + 1, 93, 217, 188, 24, 1, 93, 209, 232, 24, 1, 93, 222, 146, 24, 1, 93, + 228, 237, 24, 1, 93, 203, 208, 24, 1, 93, 214, 165, 24, 1, 93, 222, 170, + 24, 1, 93, 219, 165, 24, 1, 93, 208, 148, 24, 1, 93, 228, 189, 24, 1, 93, + 227, 30, 24, 1, 93, 221, 115, 24, 1, 93, 222, 122, 24, 1, 93, 225, 158, + 24, 1, 93, 222, 139, 24, 1, 93, 222, 121, 24, 1, 93, 221, 114, 24, 1, 93, + 216, 0, 24, 1, 93, 222, 34, 24, 1, 93, 219, 21, 24, 1, 93, 215, 33, 24, + 1, 93, 222, 154, 24, 1, 93, 224, 191, 24, 1, 93, 238, 96, 24, 1, 93, 222, + 142, 24, 1, 93, 222, 45, 24, 1, 93, 225, 106, 24, 1, 93, 227, 12, 24, 1, + 93, 222, 175, 24, 1, 93, 223, 4, 24, 1, 93, 210, 0, 221, 97, 24, 1, 93, + 213, 117, 24, 1, 93, 217, 181, 24, 1, 93, 223, 24, 212, 6, 24, 1, 93, + 222, 162, 221, 6, 24, 1, 93, 203, 7, 24, 1, 93, 238, 97, 24, 1, 93, 207, + 202, 24, 1, 93, 203, 22, 24, 1, 93, 218, 69, 24, 1, 93, 207, 190, 24, 1, + 93, 229, 168, 24, 1, 93, 211, 6, 24, 1, 93, 209, 120, 24, 1, 93, 205, + 239, 24, 1, 93, 204, 43, 24, 1, 93, 228, 110, 24, 1, 93, 217, 191, 24, 1, + 93, 210, 13, 24, 1, 93, 238, 117, 24, 1, 93, 222, 185, 24, 1, 93, 213, + 19, 24, 1, 93, 224, 186, 24, 1, 93, 225, 46, 24, 1, 93, 220, 212, 24, 1, + 93, 221, 254, 24, 1, 93, 238, 201, 24, 1, 93, 207, 191, 24, 1, 93, 228, + 199, 24, 1, 93, 203, 74, 24, 1, 93, 220, 249, 246, 32, 24, 1, 93, 202, + 253, 24, 1, 93, 224, 203, 24, 1, 93, 223, 9, 24, 1, 93, 218, 158, 24, 1, + 93, 202, 198, 24, 1, 93, 227, 170, 24, 1, 93, 239, 106, 24, 1, 93, 238, + 200, 24, 1, 93, 222, 132, 24, 1, 93, 229, 170, 24, 1, 93, 225, 161, 24, + 1, 93, 222, 145, 24, 1, 93, 238, 103, 24, 1, 93, 240, 108, 24, 1, 93, + 221, 87, 24, 1, 93, 218, 214, 24, 1, 93, 203, 20, 24, 1, 93, 222, 171, + 24, 1, 93, 220, 249, 248, 103, 24, 1, 93, 220, 192, 24, 1, 93, 218, 43, + 24, 1, 93, 224, 144, 24, 1, 93, 239, 104, 24, 1, 93, 223, 100, 24, 1, 93, + 223, 244, 24, 1, 93, 238, 102, 24, 1, 93, 239, 109, 75, 24, 1, 93, 223, + 185, 24, 1, 93, 217, 187, 24, 1, 93, 222, 134, 24, 1, 93, 228, 175, 24, + 1, 93, 218, 155, 24, 1, 93, 221, 100, 24, 1, 93, 203, 21, 24, 1, 93, 222, + 155, 24, 1, 93, 219, 169, 218, 252, 24, 1, 93, 239, 109, 247, 71, 24, 1, + 93, 239, 179, 24, 1, 93, 222, 39, 24, 1, 93, 63, 24, 1, 93, 208, 141, 24, + 1, 93, 78, 24, 1, 93, 75, 24, 1, 93, 228, 9, 24, 1, 93, 219, 169, 218, + 77, 24, 1, 93, 210, 18, 24, 1, 93, 209, 219, 24, 1, 93, 223, 24, 223, + 172, 236, 38, 24, 1, 93, 212, 250, 24, 1, 93, 203, 17, 24, 1, 93, 222, + 115, 24, 1, 93, 202, 203, 24, 1, 93, 202, 230, 210, 159, 24, 1, 93, 202, + 230, 245, 151, 24, 1, 93, 202, 187, 24, 1, 93, 202, 195, 24, 1, 93, 229, + 156, 24, 1, 93, 218, 212, 24, 1, 93, 222, 40, 241, 39, 24, 1, 93, 217, + 183, 24, 1, 93, 203, 214, 24, 1, 93, 240, 53, 24, 1, 93, 206, 50, 24, 1, + 93, 226, 239, 24, 1, 93, 224, 155, 24, 1, 93, 216, 75, 24, 1, 93, 216, + 202, 24, 1, 93, 222, 114, 24, 1, 93, 222, 203, 24, 1, 93, 212, 242, 24, + 1, 93, 212, 229, 24, 1, 93, 239, 109, 216, 111, 24, 1, 93, 201, 201, 24, + 1, 93, 218, 167, 24, 1, 93, 227, 10, 24, 1, 93, 229, 26, 24, 1, 93, 224, + 240, 24, 1, 93, 192, 24, 1, 93, 225, 103, 24, 1, 93, 209, 122, 24, 1, 93, + 229, 100, 24, 1, 93, 224, 54, 24, 1, 93, 209, 152, 24, 1, 93, 240, 77, + 24, 1, 93, 238, 90, 24, 1, 218, 196, 173, 24, 1, 218, 196, 68, 24, 1, + 218, 196, 228, 209, 24, 1, 218, 196, 241, 161, 24, 1, 218, 196, 216, 135, + 24, 1, 218, 196, 210, 1, 24, 1, 218, 196, 220, 248, 24, 1, 218, 196, 228, + 113, 24, 1, 218, 196, 216, 3, 24, 1, 218, 196, 216, 50, 24, 1, 218, 196, + 225, 7, 24, 1, 218, 196, 210, 18, 24, 1, 218, 196, 223, 23, 24, 1, 218, + 196, 222, 46, 24, 1, 218, 196, 226, 185, 24, 1, 218, 196, 210, 179, 24, + 1, 218, 196, 213, 6, 24, 1, 218, 196, 212, 162, 24, 1, 218, 196, 213, + 113, 24, 1, 218, 196, 228, 137, 24, 1, 218, 196, 229, 170, 24, 1, 218, + 196, 221, 55, 24, 1, 218, 196, 221, 84, 24, 1, 218, 196, 222, 17, 24, 1, + 218, 196, 202, 229, 24, 1, 218, 196, 212, 199, 24, 1, 218, 196, 198, 24, + 1, 218, 196, 221, 118, 24, 1, 218, 196, 218, 212, 24, 1, 218, 196, 221, + 99, 24, 1, 218, 196, 203, 214, 24, 1, 218, 196, 219, 23, 24, 1, 218, 196, + 215, 145, 24, 1, 218, 196, 222, 100, 24, 1, 218, 196, 216, 75, 24, 1, + 218, 196, 229, 180, 24, 1, 218, 196, 222, 131, 24, 1, 218, 196, 222, 182, + 24, 1, 218, 196, 212, 242, 24, 1, 218, 196, 217, 188, 24, 1, 218, 196, + 239, 179, 24, 1, 218, 196, 204, 111, 24, 1, 218, 196, 227, 148, 24, 1, + 218, 196, 227, 10, 24, 1, 218, 196, 229, 26, 24, 1, 218, 196, 225, 44, + 24, 1, 218, 196, 216, 107, 24, 1, 218, 196, 192, 24, 1, 218, 196, 224, + 82, 24, 1, 218, 196, 225, 52, 24, 1, 218, 196, 209, 132, 24, 1, 218, 196, + 228, 244, 24, 1, 218, 196, 214, 251, 24, 1, 218, 196, 204, 162, 223, 249, + 1, 210, 22, 223, 249, 1, 222, 151, 223, 249, 1, 202, 247, 223, 249, 1, + 224, 112, 223, 249, 1, 249, 32, 223, 249, 1, 244, 212, 223, 249, 1, 63, + 223, 249, 1, 218, 192, 223, 249, 1, 229, 139, 223, 249, 1, 237, 95, 223, + 249, 1, 244, 188, 223, 249, 1, 246, 98, 223, 249, 1, 229, 200, 223, 249, + 1, 220, 46, 223, 249, 1, 225, 158, 223, 249, 1, 222, 68, 223, 249, 1, + 185, 223, 249, 1, 220, 18, 223, 249, 1, 78, 223, 249, 1, 215, 227, 223, + 249, 1, 213, 11, 223, 249, 1, 209, 91, 223, 249, 1, 241, 189, 223, 249, + 1, 204, 111, 223, 249, 1, 74, 223, 249, 1, 229, 26, 223, 249, 1, 228, 17, + 223, 249, 1, 228, 113, 223, 249, 1, 237, 147, 223, 249, 1, 216, 57, 223, + 249, 1, 209, 165, 223, 249, 17, 202, 84, 223, 249, 17, 105, 223, 249, 17, + 108, 223, 249, 17, 147, 223, 249, 17, 149, 223, 249, 17, 170, 223, 249, + 17, 195, 223, 249, 17, 213, 111, 223, 249, 17, 199, 223, 249, 17, 222, + 63, 223, 249, 244, 166, 223, 249, 52, 244, 166, 248, 212, 206, 83, 1, + 241, 74, 248, 212, 206, 83, 1, 173, 248, 212, 206, 83, 1, 214, 177, 248, + 212, 206, 83, 1, 240, 108, 248, 212, 206, 83, 1, 225, 47, 248, 212, 206, + 83, 1, 203, 8, 248, 212, 206, 83, 1, 238, 249, 248, 212, 206, 83, 1, 243, + 238, 248, 212, 206, 83, 1, 228, 243, 248, 212, 206, 83, 1, 230, 101, 248, + 212, 206, 83, 1, 235, 253, 248, 212, 206, 83, 1, 204, 111, 248, 212, 206, + 83, 1, 202, 17, 248, 212, 206, 83, 1, 238, 194, 248, 212, 206, 83, 1, + 243, 113, 248, 212, 206, 83, 1, 246, 238, 248, 212, 206, 83, 1, 206, 171, + 248, 212, 206, 83, 1, 135, 248, 212, 206, 83, 1, 249, 32, 248, 212, 206, + 83, 1, 204, 163, 248, 212, 206, 83, 1, 203, 46, 248, 212, 206, 83, 1, + 185, 248, 212, 206, 83, 1, 204, 108, 248, 212, 206, 83, 1, 63, 248, 212, + 206, 83, 1, 78, 248, 212, 206, 83, 1, 220, 18, 248, 212, 206, 83, 1, 68, + 248, 212, 206, 83, 1, 241, 161, 248, 212, 206, 83, 1, 74, 248, 212, 206, + 83, 1, 75, 248, 212, 206, 83, 39, 138, 208, 161, 248, 212, 206, 83, 39, + 124, 208, 161, 248, 212, 206, 83, 39, 224, 150, 208, 161, 248, 212, 206, + 83, 39, 226, 253, 208, 161, 248, 212, 206, 83, 39, 236, 242, 208, 161, + 248, 212, 206, 83, 239, 102, 211, 61, 119, 117, 22, 229, 197, 119, 117, + 22, 229, 193, 119, 117, 22, 229, 97, 119, 117, 22, 229, 63, 119, 117, 22, + 229, 218, 119, 117, 22, 229, 215, 119, 117, 22, 228, 200, 119, 117, 22, + 228, 172, 119, 117, 22, 229, 199, 119, 117, 22, 229, 154, 119, 117, 22, + 230, 17, 119, 117, 22, 230, 14, 119, 117, 22, 229, 5, 119, 117, 22, 229, + 2, 119, 117, 22, 229, 212, 119, 117, 22, 229, 210, 119, 117, 22, 228, + 202, 119, 117, 22, 228, 201, 119, 117, 22, 229, 23, 119, 117, 22, 228, + 247, 119, 117, 22, 229, 99, 119, 117, 22, 229, 98, 119, 117, 22, 230, 32, + 119, 117, 22, 229, 214, 119, 117, 22, 228, 163, 119, 117, 22, 228, 154, + 119, 117, 22, 230, 40, 119, 117, 22, 230, 33, 119, 117, 109, 206, 61, + 119, 117, 109, 221, 90, 119, 117, 109, 227, 251, 119, 117, 109, 237, 76, + 119, 117, 109, 221, 230, 119, 117, 109, 216, 167, 119, 117, 109, 222, 1, + 119, 117, 109, 217, 100, 119, 117, 109, 203, 62, 119, 117, 109, 236, 221, + 119, 117, 109, 225, 67, 119, 117, 109, 246, 174, 119, 117, 109, 223, 28, + 119, 117, 109, 236, 157, 119, 117, 109, 218, 85, 119, 117, 109, 221, 95, + 119, 117, 109, 223, 65, 119, 117, 109, 250, 34, 119, 117, 109, 203, 178, + 119, 117, 109, 247, 15, 119, 117, 131, 246, 67, 207, 199, 119, 117, 131, + 246, 67, 212, 13, 119, 117, 131, 246, 67, 229, 172, 119, 117, 131, 246, + 67, 229, 130, 119, 117, 131, 246, 67, 211, 4, 119, 117, 131, 246, 67, + 236, 123, 119, 117, 131, 246, 67, 209, 206, 119, 117, 2, 205, 173, 209, + 44, 119, 117, 2, 205, 173, 208, 9, 246, 229, 119, 117, 2, 246, 67, 246, + 163, 119, 117, 2, 205, 173, 209, 69, 119, 117, 2, 205, 173, 240, 50, 119, + 117, 2, 203, 136, 221, 85, 119, 117, 2, 203, 136, 216, 59, 119, 117, 2, + 203, 136, 208, 124, 119, 117, 2, 203, 136, 240, 89, 119, 117, 2, 205, + 173, 214, 159, 119, 117, 2, 225, 6, 211, 8, 119, 117, 2, 205, 173, 221, + 134, 119, 117, 2, 235, 167, 203, 81, 119, 117, 2, 203, 177, 119, 117, 2, + 246, 67, 207, 252, 215, 216, 119, 117, 17, 202, 84, 119, 117, 17, 105, + 119, 117, 17, 108, 119, 117, 17, 147, 119, 117, 17, 149, 119, 117, 17, + 170, 119, 117, 17, 195, 119, 117, 17, 213, 111, 119, 117, 17, 199, 119, + 117, 17, 222, 63, 119, 117, 42, 209, 147, 119, 117, 42, 236, 10, 119, + 117, 42, 209, 153, 209, 34, 119, 117, 42, 224, 113, 119, 117, 42, 236, + 12, 224, 113, 119, 117, 42, 209, 153, 248, 68, 119, 117, 42, 208, 72, + 119, 117, 2, 205, 173, 226, 234, 119, 117, 2, 203, 133, 119, 117, 2, 236, + 216, 119, 117, 2, 209, 59, 236, 216, 119, 117, 2, 201, 247, 209, 102, + 119, 117, 2, 236, 141, 119, 117, 2, 221, 148, 119, 117, 2, 203, 169, 119, + 117, 2, 221, 88, 119, 117, 2, 250, 18, 119, 117, 2, 207, 129, 246, 228, + 119, 117, 2, 225, 6, 208, 12, 119, 117, 2, 209, 207, 119, 117, 2, 227, 7, + 119, 117, 2, 223, 201, 119, 117, 2, 246, 67, 237, 143, 226, 212, 221, 93, + 221, 92, 119, 117, 2, 246, 67, 245, 109, 208, 3, 119, 117, 2, 246, 67, + 207, 127, 119, 117, 2, 246, 67, 207, 128, 246, 86, 119, 117, 2, 246, 67, + 217, 186, 244, 135, 119, 117, 2, 246, 67, 221, 141, 208, 132, 119, 117, + 246, 39, 2, 208, 7, 119, 117, 246, 39, 2, 203, 48, 119, 117, 246, 39, 2, + 227, 93, 119, 117, 246, 39, 2, 227, 250, 119, 117, 246, 39, 2, 203, 132, + 119, 117, 246, 39, 2, 229, 6, 119, 117, 246, 39, 2, 237, 73, 119, 117, + 246, 39, 2, 223, 242, 119, 117, 246, 39, 2, 209, 45, 119, 117, 246, 39, + 2, 208, 17, 119, 117, 246, 39, 2, 218, 205, 119, 117, 246, 39, 2, 229, + 142, 119, 117, 246, 39, 2, 237, 133, 119, 117, 246, 39, 2, 206, 80, 119, + 117, 246, 39, 2, 240, 86, 119, 117, 246, 39, 2, 203, 88, 119, 117, 246, + 39, 2, 207, 246, 119, 117, 246, 39, 2, 228, 158, 119, 117, 246, 39, 2, + 204, 153, 111, 1, 185, 111, 1, 249, 32, 111, 1, 11, 185, 111, 1, 218, 98, + 111, 1, 192, 111, 1, 224, 158, 111, 1, 250, 126, 192, 111, 1, 240, 108, + 111, 1, 206, 86, 111, 1, 205, 231, 111, 1, 210, 22, 111, 1, 244, 212, + 111, 1, 11, 207, 241, 111, 1, 11, 210, 22, 111, 1, 207, 241, 111, 1, 244, + 120, 111, 1, 201, 201, 111, 1, 222, 104, 111, 1, 11, 221, 227, 111, 1, + 250, 126, 201, 201, 111, 1, 221, 227, 111, 1, 221, 213, 111, 1, 228, 113, + 111, 1, 226, 198, 111, 1, 227, 161, 111, 1, 227, 150, 111, 1, 208, 187, + 111, 1, 243, 121, 111, 1, 208, 179, 111, 1, 243, 120, 111, 1, 173, 111, + 1, 239, 8, 111, 1, 11, 173, 111, 1, 217, 126, 111, 1, 217, 103, 111, 1, + 222, 203, 111, 1, 222, 152, 111, 1, 250, 126, 222, 203, 111, 1, 152, 111, + 1, 203, 182, 111, 1, 238, 119, 111, 1, 238, 94, 111, 1, 207, 251, 111, 1, + 241, 239, 111, 1, 221, 11, 111, 1, 220, 250, 111, 1, 208, 10, 111, 1, + 241, 249, 111, 1, 11, 208, 10, 111, 1, 11, 241, 249, 111, 1, 216, 133, + 208, 10, 111, 1, 213, 90, 111, 1, 211, 164, 111, 1, 202, 80, 111, 1, 202, + 8, 111, 1, 208, 20, 111, 1, 241, 255, 111, 1, 11, 208, 20, 111, 1, 215, + 36, 111, 1, 202, 116, 111, 1, 202, 9, 111, 1, 201, 235, 111, 1, 201, 215, + 111, 1, 250, 126, 201, 235, 111, 1, 201, 207, 111, 1, 201, 214, 111, 1, + 204, 111, 111, 1, 251, 73, 111, 1, 237, 12, 111, 1, 223, 70, 111, 2, 250, + 65, 111, 2, 216, 133, 205, 184, 111, 2, 216, 133, 250, 65, 111, 22, 2, + 63, 111, 22, 2, 252, 25, 111, 22, 2, 251, 69, 111, 22, 2, 250, 231, 111, + 22, 2, 250, 223, 111, 22, 2, 78, 111, 22, 2, 220, 18, 111, 22, 2, 204, 0, + 111, 22, 2, 204, 144, 111, 22, 2, 74, 111, 22, 2, 241, 92, 111, 22, 2, + 241, 78, 111, 22, 2, 220, 70, 111, 22, 2, 75, 111, 22, 2, 235, 171, 111, + 22, 2, 235, 170, 111, 22, 2, 235, 169, 111, 22, 2, 230, 234, 111, 22, 2, + 231, 110, 111, 22, 2, 231, 83, 111, 22, 2, 230, 197, 111, 22, 2, 231, 24, + 111, 22, 2, 68, 111, 22, 2, 207, 39, 111, 22, 2, 207, 38, 111, 22, 2, + 207, 37, 111, 22, 2, 206, 178, 111, 22, 2, 207, 21, 111, 22, 2, 206, 241, + 111, 22, 2, 203, 124, 111, 22, 2, 203, 11, 111, 22, 2, 251, 109, 111, 22, + 2, 251, 105, 111, 22, 2, 241, 21, 111, 22, 2, 215, 189, 241, 21, 111, 22, + 2, 241, 28, 111, 22, 2, 215, 189, 241, 28, 111, 22, 2, 251, 64, 111, 22, + 2, 241, 145, 111, 22, 2, 250, 34, 111, 22, 2, 219, 216, 111, 22, 2, 223, + 163, 111, 22, 2, 222, 205, 111, 143, 216, 16, 111, 143, 208, 145, 216, + 16, 111, 143, 55, 111, 143, 56, 111, 1, 208, 159, 111, 1, 208, 158, 111, + 1, 208, 157, 111, 1, 208, 156, 111, 1, 208, 155, 111, 1, 208, 154, 111, + 1, 208, 153, 111, 1, 216, 133, 208, 160, 111, 1, 216, 133, 208, 159, 111, + 1, 216, 133, 208, 157, 111, 1, 216, 133, 208, 156, 111, 1, 216, 133, 208, + 155, 111, 1, 216, 133, 208, 153, 67, 1, 250, 126, 74, 172, 1, 250, 126, + 203, 52, 100, 1, 237, 171, 100, 1, 203, 196, 100, 1, 219, 184, 100, 1, + 210, 69, 100, 1, 240, 174, 100, 1, 230, 54, 100, 1, 159, 100, 1, 249, + 255, 100, 1, 245, 51, 100, 1, 206, 164, 100, 1, 239, 75, 100, 1, 146, + 100, 1, 219, 185, 223, 163, 100, 1, 245, 52, 194, 100, 1, 240, 175, 223, + 163, 100, 1, 230, 55, 226, 185, 100, 1, 217, 1, 194, 100, 1, 209, 110, + 100, 1, 212, 45, 244, 2, 100, 1, 244, 2, 100, 1, 229, 48, 100, 1, 212, + 45, 230, 184, 100, 1, 236, 225, 100, 1, 227, 162, 100, 1, 216, 62, 100, + 1, 226, 185, 100, 1, 223, 163, 100, 1, 230, 184, 100, 1, 194, 100, 1, + 226, 186, 223, 163, 100, 1, 223, 164, 226, 185, 100, 1, 230, 185, 226, + 185, 100, 1, 215, 94, 230, 184, 100, 1, 226, 186, 3, 243, 85, 100, 1, + 223, 164, 3, 243, 85, 100, 1, 230, 185, 3, 243, 85, 100, 1, 230, 185, 3, + 187, 231, 7, 25, 55, 100, 1, 215, 94, 3, 243, 85, 100, 1, 215, 94, 3, 70, + 56, 100, 1, 226, 186, 194, 100, 1, 223, 164, 194, 100, 1, 230, 185, 194, + 100, 1, 215, 94, 194, 100, 1, 226, 186, 223, 164, 194, 100, 1, 223, 164, + 226, 186, 194, 100, 1, 230, 185, 226, 186, 194, 100, 1, 215, 94, 230, + 185, 194, 100, 1, 230, 185, 215, 94, 3, 243, 85, 100, 1, 230, 185, 223, + 163, 100, 1, 230, 185, 223, 164, 194, 100, 1, 215, 94, 210, 69, 100, 1, + 215, 94, 210, 70, 146, 100, 1, 215, 94, 219, 184, 100, 1, 215, 94, 219, + 185, 146, 100, 1, 210, 70, 194, 100, 1, 210, 70, 217, 1, 194, 100, 1, + 204, 144, 100, 1, 204, 40, 100, 1, 204, 145, 146, 100, 1, 215, 94, 223, + 163, 100, 1, 215, 94, 226, 185, 100, 1, 230, 55, 217, 1, 194, 100, 1, + 239, 76, 217, 1, 194, 100, 1, 215, 94, 230, 54, 100, 1, 215, 94, 230, 55, + 146, 100, 1, 63, 100, 1, 212, 45, 219, 195, 100, 1, 220, 97, 100, 1, 78, + 100, 1, 250, 176, 100, 1, 75, 100, 1, 74, 100, 1, 231, 110, 100, 1, 212, + 228, 75, 100, 1, 207, 17, 100, 1, 241, 161, 100, 1, 212, 45, 241, 147, + 100, 1, 215, 209, 75, 100, 1, 212, 45, 241, 161, 100, 1, 163, 75, 100, 1, + 203, 52, 100, 1, 68, 100, 1, 240, 238, 100, 1, 203, 147, 100, 1, 106, + 223, 163, 100, 1, 163, 68, 100, 1, 215, 209, 68, 100, 1, 207, 18, 100, 1, + 212, 45, 68, 100, 1, 220, 15, 100, 1, 219, 195, 100, 1, 219, 216, 100, 1, + 204, 111, 100, 1, 204, 0, 100, 1, 204, 30, 100, 1, 204, 53, 100, 1, 203, + 230, 100, 1, 223, 72, 68, 100, 1, 223, 72, 78, 100, 1, 223, 72, 75, 100, + 1, 223, 72, 63, 100, 1, 218, 235, 250, 231, 100, 1, 218, 235, 250, 247, + 100, 1, 212, 45, 241, 92, 100, 1, 212, 45, 250, 231, 100, 1, 212, 45, + 220, 31, 100, 1, 125, 226, 185, 100, 251, 88, 49, 236, 106, 214, 172, + 100, 251, 88, 224, 150, 236, 106, 214, 172, 100, 251, 88, 50, 236, 106, + 214, 172, 100, 251, 88, 124, 80, 214, 172, 100, 251, 88, 224, 150, 80, + 214, 172, 100, 251, 88, 138, 80, 214, 172, 100, 251, 88, 250, 40, 214, + 172, 100, 251, 88, 250, 40, 227, 213, 214, 172, 100, 251, 88, 250, 40, + 209, 226, 100, 251, 88, 250, 40, 209, 248, 100, 251, 88, 250, 40, 188, + 113, 100, 251, 88, 250, 40, 235, 206, 113, 100, 251, 88, 250, 40, 209, + 227, 113, 100, 251, 88, 138, 165, 100, 251, 88, 138, 208, 244, 165, 100, + 251, 88, 138, 237, 253, 100, 251, 88, 138, 163, 237, 253, 100, 251, 88, + 138, 243, 85, 100, 251, 88, 138, 246, 61, 100, 251, 88, 138, 227, 114, + 100, 251, 88, 138, 204, 75, 100, 251, 88, 138, 206, 38, 100, 251, 88, + 124, 165, 100, 251, 88, 124, 208, 244, 165, 100, 251, 88, 124, 237, 253, + 100, 251, 88, 124, 163, 237, 253, 100, 251, 88, 124, 243, 85, 100, 251, + 88, 124, 246, 61, 100, 251, 88, 124, 227, 114, 100, 251, 88, 124, 204, + 75, 100, 251, 88, 124, 206, 38, 100, 251, 88, 124, 47, 100, 2, 158, 3, + 245, 130, 100, 209, 68, 1, 214, 150, 100, 52, 82, 100, 217, 179, 246, + 126, 239, 102, 211, 61, 212, 215, 239, 158, 1, 219, 201, 212, 215, 239, + 158, 245, 190, 219, 201, 212, 215, 239, 158, 121, 211, 75, 212, 215, 239, + 158, 112, 211, 75, 60, 31, 16, 217, 195, 60, 31, 16, 244, 146, 60, 31, + 16, 218, 239, 60, 31, 16, 219, 192, 241, 126, 60, 31, 16, 219, 192, 243, + 171, 60, 31, 16, 206, 73, 241, 126, 60, 31, 16, 206, 73, 243, 171, 60, + 31, 16, 229, 221, 60, 31, 16, 210, 86, 60, 31, 16, 219, 83, 60, 31, 16, + 202, 219, 60, 31, 16, 202, 220, 243, 171, 60, 31, 16, 228, 226, 60, 31, + 16, 250, 171, 241, 126, 60, 31, 16, 240, 206, 241, 126, 60, 31, 16, 209, + 163, 60, 31, 16, 229, 176, 60, 31, 16, 250, 161, 60, 31, 16, 250, 162, + 243, 171, 60, 31, 16, 210, 93, 60, 31, 16, 209, 50, 60, 31, 16, 220, 42, + 250, 124, 60, 31, 16, 238, 23, 250, 124, 60, 31, 16, 217, 194, 60, 31, + 16, 246, 190, 60, 31, 16, 206, 62, 60, 31, 16, 230, 206, 250, 124, 60, + 31, 16, 229, 178, 250, 124, 60, 31, 16, 229, 177, 250, 124, 60, 31, 16, + 214, 210, 60, 31, 16, 219, 73, 60, 31, 16, 211, 84, 250, 164, 60, 31, 16, + 219, 191, 250, 124, 60, 31, 16, 206, 72, 250, 124, 60, 31, 16, 250, 165, + 250, 124, 60, 31, 16, 250, 159, 60, 31, 16, 229, 38, 60, 31, 16, 216, 69, + 60, 31, 16, 218, 165, 250, 124, 60, 31, 16, 208, 217, 60, 31, 16, 250, + 229, 60, 31, 16, 214, 153, 60, 31, 16, 210, 97, 250, 124, 60, 31, 16, + 210, 97, 224, 221, 211, 82, 60, 31, 16, 219, 186, 250, 124, 60, 31, 16, + 209, 86, 60, 31, 16, 227, 200, 60, 31, 16, 242, 2, 60, 31, 16, 208, 87, + 60, 31, 16, 209, 134, 60, 31, 16, 228, 229, 60, 31, 16, 250, 171, 240, + 206, 222, 226, 60, 31, 16, 239, 110, 250, 124, 60, 31, 16, 231, 62, 60, + 31, 16, 208, 57, 250, 124, 60, 31, 16, 229, 224, 208, 56, 60, 31, 16, + 219, 11, 60, 31, 16, 217, 199, 60, 31, 16, 229, 7, 60, 31, 16, 246, 110, + 250, 124, 60, 31, 16, 216, 177, 60, 31, 16, 219, 86, 250, 124, 60, 31, + 16, 219, 84, 250, 124, 60, 31, 16, 235, 160, 60, 31, 16, 223, 82, 60, 31, + 16, 218, 217, 60, 31, 16, 229, 8, 251, 9, 60, 31, 16, 208, 57, 251, 9, + 60, 31, 16, 211, 55, 60, 31, 16, 237, 240, 60, 31, 16, 230, 206, 222, + 226, 60, 31, 16, 220, 42, 222, 226, 60, 31, 16, 219, 192, 222, 226, 60, + 31, 16, 218, 216, 60, 31, 16, 228, 248, 60, 31, 16, 218, 215, 60, 31, 16, + 228, 228, 60, 31, 16, 219, 12, 222, 226, 60, 31, 16, 229, 177, 222, 227, + 250, 202, 60, 31, 16, 229, 178, 222, 227, 250, 202, 60, 31, 16, 202, 217, + 60, 31, 16, 250, 162, 222, 226, 60, 31, 16, 250, 163, 210, 94, 222, 226, + 60, 31, 16, 202, 218, 60, 31, 16, 228, 227, 60, 31, 16, 241, 121, 60, 31, + 16, 246, 191, 60, 31, 16, 224, 122, 230, 205, 60, 31, 16, 206, 73, 222, + 226, 60, 31, 16, 218, 165, 222, 226, 60, 31, 16, 217, 200, 222, 226, 60, + 31, 16, 220, 38, 60, 31, 16, 250, 189, 60, 31, 16, 226, 195, 60, 31, 16, + 219, 84, 222, 226, 60, 31, 16, 219, 86, 222, 226, 60, 31, 16, 240, 244, + 219, 85, 60, 31, 16, 228, 135, 60, 31, 16, 250, 190, 60, 31, 16, 208, 57, + 222, 226, 60, 31, 16, 241, 124, 60, 31, 16, 210, 97, 222, 226, 60, 31, + 16, 210, 87, 60, 31, 16, 246, 110, 222, 226, 60, 31, 16, 241, 43, 60, 31, + 16, 214, 154, 222, 226, 60, 31, 16, 203, 163, 229, 38, 60, 31, 16, 208, + 54, 60, 31, 16, 217, 201, 60, 31, 16, 208, 58, 60, 31, 16, 208, 55, 60, + 31, 16, 217, 198, 60, 31, 16, 208, 53, 60, 31, 16, 217, 197, 60, 31, 16, + 238, 22, 60, 31, 16, 250, 116, 60, 31, 16, 240, 244, 250, 116, 60, 31, + 16, 219, 186, 222, 226, 60, 31, 16, 209, 85, 241, 1, 60, 31, 16, 209, 85, + 240, 205, 60, 31, 16, 209, 87, 250, 166, 60, 31, 16, 209, 79, 230, 19, + 250, 158, 60, 31, 16, 229, 223, 60, 31, 16, 241, 80, 60, 31, 16, 203, 14, + 229, 220, 60, 31, 16, 203, 14, 250, 202, 60, 31, 16, 211, 83, 60, 31, 16, + 229, 39, 250, 202, 60, 31, 16, 243, 172, 250, 124, 60, 31, 16, 228, 230, + 250, 124, 60, 31, 16, 228, 230, 251, 9, 60, 31, 16, 228, 230, 222, 226, + 60, 31, 16, 250, 165, 222, 226, 60, 31, 16, 250, 167, 60, 31, 16, 243, + 171, 60, 31, 16, 208, 68, 60, 31, 16, 209, 125, 60, 31, 16, 228, 252, 60, + 31, 16, 227, 205, 241, 73, 246, 100, 60, 31, 16, 227, 205, 242, 3, 246, + 101, 60, 31, 16, 227, 205, 208, 71, 246, 101, 60, 31, 16, 227, 205, 209, + 136, 246, 101, 60, 31, 16, 227, 205, 231, 57, 246, 100, 60, 31, 16, 238, + 23, 222, 227, 250, 202, 60, 31, 16, 238, 23, 219, 74, 250, 112, 60, 31, + 16, 238, 23, 219, 74, 244, 6, 60, 31, 16, 243, 196, 60, 31, 16, 243, 197, + 219, 74, 250, 113, 229, 220, 60, 31, 16, 243, 197, 219, 74, 250, 113, + 250, 202, 60, 31, 16, 243, 197, 219, 74, 244, 6, 60, 31, 16, 208, 76, 60, + 31, 16, 250, 117, 60, 31, 16, 231, 64, 60, 31, 16, 243, 219, 60, 31, 16, + 251, 75, 218, 52, 250, 118, 60, 31, 16, 251, 75, 250, 115, 60, 31, 16, + 251, 75, 250, 118, 60, 31, 16, 251, 75, 224, 215, 60, 31, 16, 251, 75, + 224, 226, 60, 31, 16, 251, 75, 238, 24, 60, 31, 16, 251, 75, 238, 21, 60, + 31, 16, 251, 75, 218, 52, 238, 24, 60, 31, 16, 225, 84, 217, 207, 235, + 158, 60, 31, 16, 225, 84, 251, 11, 217, 207, 235, 158, 60, 31, 16, 225, + 84, 244, 5, 235, 158, 60, 31, 16, 225, 84, 251, 11, 244, 5, 235, 158, 60, + 31, 16, 225, 84, 208, 63, 235, 158, 60, 31, 16, 225, 84, 208, 77, 60, 31, + 16, 225, 84, 209, 130, 235, 158, 60, 31, 16, 225, 84, 209, 130, 227, 209, + 235, 158, 60, 31, 16, 225, 84, 227, 209, 235, 158, 60, 31, 16, 225, 84, + 218, 95, 235, 158, 60, 31, 16, 230, 213, 209, 156, 235, 159, 60, 31, 16, + 250, 163, 209, 156, 235, 159, 60, 31, 16, 240, 80, 209, 127, 60, 31, 16, + 240, 80, 224, 46, 60, 31, 16, 240, 80, 243, 202, 60, 31, 16, 225, 84, + 206, 66, 235, 158, 60, 31, 16, 225, 84, 217, 206, 235, 158, 60, 31, 16, + 225, 84, 218, 95, 209, 130, 235, 158, 60, 31, 16, 238, 19, 223, 164, 250, + 166, 60, 31, 16, 238, 19, 223, 164, 243, 170, 60, 31, 16, 241, 90, 230, + 19, 239, 110, 205, 171, 60, 31, 16, 231, 63, 60, 31, 16, 231, 61, 60, 31, + 16, 239, 110, 250, 125, 244, 4, 235, 157, 60, 31, 16, 239, 110, 243, 217, + 185, 60, 31, 16, 239, 110, 243, 217, 223, 82, 60, 31, 16, 239, 110, 223, + 77, 235, 158, 60, 31, 16, 239, 110, 243, 217, 243, 233, 60, 31, 16, 239, + 110, 212, 64, 243, 216, 243, 233, 60, 31, 16, 239, 110, 243, 217, 229, + 201, 60, 31, 16, 239, 110, 243, 217, 202, 17, 60, 31, 16, 239, 110, 243, + 217, 222, 101, 229, 220, 60, 31, 16, 239, 110, 243, 217, 222, 101, 250, + 202, 60, 31, 16, 239, 110, 225, 128, 246, 102, 243, 202, 60, 31, 16, 239, + 110, 225, 128, 246, 102, 224, 46, 60, 31, 16, 240, 27, 212, 64, 246, 102, + 206, 65, 60, 31, 16, 239, 110, 212, 64, 246, 102, 210, 98, 60, 31, 16, + 239, 110, 222, 229, 60, 31, 16, 246, 103, 201, 241, 60, 31, 16, 246, 103, + 229, 37, 60, 31, 16, 246, 103, 211, 219, 60, 31, 16, 239, 110, 235, 206, + 203, 13, 209, 131, 60, 31, 16, 239, 110, 241, 91, 250, 191, 60, 31, 16, + 203, 13, 208, 64, 60, 31, 16, 243, 210, 208, 64, 60, 31, 16, 243, 210, + 209, 131, 60, 31, 16, 243, 210, 250, 168, 242, 3, 243, 105, 60, 31, 16, + 243, 210, 224, 44, 209, 135, 243, 105, 60, 31, 16, 243, 210, 243, 193, + 240, 218, 243, 105, 60, 31, 16, 243, 210, 208, 74, 220, 48, 243, 105, 60, + 31, 16, 203, 13, 250, 168, 242, 3, 243, 105, 60, 31, 16, 203, 13, 224, + 44, 209, 135, 243, 105, 60, 31, 16, 203, 13, 243, 193, 240, 218, 243, + 105, 60, 31, 16, 203, 13, 208, 74, 220, 48, 243, 105, 60, 31, 16, 238, + 175, 243, 209, 60, 31, 16, 238, 175, 203, 12, 60, 31, 16, 243, 218, 250, + 168, 224, 123, 60, 31, 16, 243, 218, 250, 168, 224, 255, 60, 31, 16, 243, + 218, 243, 171, 60, 31, 16, 243, 218, 209, 77, 60, 31, 16, 212, 130, 209, + 77, 60, 31, 16, 212, 130, 209, 78, 243, 155, 60, 31, 16, 212, 130, 209, + 78, 208, 65, 60, 31, 16, 212, 130, 209, 78, 209, 123, 60, 31, 16, 212, + 130, 250, 88, 60, 31, 16, 212, 130, 250, 89, 243, 155, 60, 31, 16, 212, + 130, 250, 89, 208, 65, 60, 31, 16, 212, 130, 250, 89, 209, 123, 60, 31, + 16, 243, 194, 238, 156, 60, 31, 16, 243, 201, 219, 216, 60, 31, 16, 211, + 71, 60, 31, 16, 250, 109, 185, 60, 31, 16, 250, 109, 205, 171, 60, 31, + 16, 250, 109, 239, 8, 60, 31, 16, 250, 109, 243, 233, 60, 31, 16, 250, + 109, 229, 201, 60, 31, 16, 250, 109, 202, 17, 60, 31, 16, 250, 109, 222, + 100, 60, 31, 16, 229, 177, 222, 227, 224, 225, 60, 31, 16, 229, 178, 222, + 227, 224, 225, 60, 31, 16, 229, 177, 222, 227, 229, 220, 60, 31, 16, 229, + 178, 222, 227, 229, 220, 60, 31, 16, 229, 39, 229, 220, 60, 31, 16, 238, + 23, 222, 227, 229, 220, 31, 16, 212, 120, 248, 226, 31, 16, 52, 248, 226, + 31, 16, 46, 248, 226, 31, 16, 216, 74, 46, 248, 226, 31, 16, 244, 143, + 248, 226, 31, 16, 212, 228, 248, 226, 31, 16, 49, 216, 101, 54, 31, 16, + 50, 216, 101, 54, 31, 16, 216, 101, 243, 83, 31, 16, 244, 185, 214, 157, + 31, 16, 244, 213, 247, 45, 31, 16, 214, 157, 31, 16, 245, 250, 31, 16, + 216, 99, 240, 15, 31, 16, 216, 99, 240, 14, 31, 16, 216, 99, 240, 13, 31, + 16, 240, 36, 31, 16, 240, 37, 56, 31, 16, 247, 216, 82, 31, 16, 247, 82, + 31, 16, 247, 228, 31, 16, 155, 31, 16, 220, 28, 211, 102, 31, 16, 207, + 133, 211, 102, 31, 16, 209, 29, 211, 102, 31, 16, 239, 146, 211, 102, 31, + 16, 239, 232, 211, 102, 31, 16, 212, 87, 211, 102, 31, 16, 212, 85, 239, + 127, 31, 16, 239, 144, 239, 127, 31, 16, 239, 76, 246, 30, 31, 16, 239, + 76, 246, 31, 219, 218, 251, 0, 31, 16, 239, 76, 246, 31, 219, 218, 248, + 211, 31, 16, 247, 126, 246, 30, 31, 16, 240, 175, 246, 30, 31, 16, 240, + 175, 246, 31, 219, 218, 251, 0, 31, 16, 240, 175, 246, 31, 219, 218, 248, + 211, 31, 16, 242, 47, 246, 29, 31, 16, 242, 47, 246, 28, 31, 16, 223, + 226, 225, 19, 216, 85, 31, 16, 52, 213, 56, 31, 16, 52, 239, 216, 31, 16, + 239, 217, 206, 224, 31, 16, 239, 217, 242, 70, 31, 16, 223, 66, 206, 224, + 31, 16, 223, 66, 242, 70, 31, 16, 213, 57, 206, 224, 31, 16, 213, 57, + 242, 70, 31, 16, 217, 56, 143, 213, 56, 31, 16, 217, 56, 143, 239, 216, + 31, 16, 245, 230, 208, 221, 31, 16, 245, 78, 208, 221, 31, 16, 219, 218, + 251, 0, 31, 16, 219, 218, 248, 211, 31, 16, 217, 37, 251, 0, 31, 16, 217, + 37, 248, 211, 31, 16, 223, 229, 216, 85, 31, 16, 204, 31, 216, 85, 31, + 16, 162, 216, 85, 31, 16, 217, 56, 216, 85, 31, 16, 241, 139, 216, 85, + 31, 16, 212, 81, 216, 85, 31, 16, 209, 51, 216, 85, 31, 16, 212, 73, 216, + 85, 31, 16, 118, 236, 12, 207, 149, 216, 85, 31, 16, 203, 197, 221, 156, + 31, 16, 91, 221, 156, 31, 16, 246, 62, 203, 197, 221, 156, 31, 16, 51, + 221, 157, 204, 33, 31, 16, 51, 221, 157, 248, 43, 31, 16, 208, 86, 221, + 157, 112, 204, 33, 31, 16, 208, 86, 221, 157, 112, 248, 43, 31, 16, 208, + 86, 221, 157, 49, 204, 33, 31, 16, 208, 86, 221, 157, 49, 248, 43, 31, + 16, 208, 86, 221, 157, 50, 204, 33, 31, 16, 208, 86, 221, 157, 50, 248, + 43, 31, 16, 208, 86, 221, 157, 121, 204, 33, 31, 16, 208, 86, 221, 157, + 121, 248, 43, 31, 16, 208, 86, 221, 157, 112, 50, 204, 33, 31, 16, 208, + 86, 221, 157, 112, 50, 248, 43, 31, 16, 224, 30, 221, 157, 204, 33, 31, + 16, 224, 30, 221, 157, 248, 43, 31, 16, 208, 83, 221, 157, 121, 204, 33, + 31, 16, 208, 83, 221, 157, 121, 248, 43, 31, 16, 219, 77, 221, 156, 31, + 16, 205, 183, 221, 156, 31, 16, 221, 157, 248, 43, 31, 16, 221, 49, 221, + 156, 31, 16, 246, 1, 221, 157, 204, 33, 31, 16, 246, 1, 221, 157, 248, + 43, 31, 16, 247, 214, 31, 16, 204, 31, 221, 160, 31, 16, 162, 221, 160, + 31, 16, 217, 56, 221, 160, 31, 16, 241, 139, 221, 160, 31, 16, 212, 81, + 221, 160, 31, 16, 209, 51, 221, 160, 31, 16, 212, 73, 221, 160, 31, 16, + 118, 236, 12, 207, 149, 221, 160, 31, 16, 39, 211, 77, 31, 16, 39, 211, + 184, 211, 77, 31, 16, 39, 208, 94, 31, 16, 39, 208, 93, 31, 16, 39, 208, + 92, 31, 16, 240, 0, 208, 94, 31, 16, 240, 0, 208, 93, 31, 16, 240, 0, + 208, 92, 31, 16, 39, 250, 31, 243, 85, 31, 16, 39, 239, 224, 31, 16, 39, + 239, 223, 31, 16, 39, 239, 222, 31, 16, 39, 239, 221, 31, 16, 39, 239, + 220, 31, 16, 248, 142, 248, 159, 31, 16, 241, 84, 248, 159, 31, 16, 248, + 142, 208, 250, 31, 16, 241, 84, 208, 250, 31, 16, 248, 142, 212, 37, 31, + 16, 241, 84, 212, 37, 31, 16, 248, 142, 218, 174, 31, 16, 241, 84, 218, + 174, 31, 16, 39, 251, 138, 31, 16, 39, 211, 105, 31, 16, 39, 209, 140, + 31, 16, 39, 211, 106, 31, 16, 39, 225, 96, 31, 16, 39, 225, 95, 31, 16, + 39, 251, 137, 31, 16, 39, 227, 2, 31, 16, 250, 100, 206, 224, 31, 16, + 250, 100, 242, 70, 31, 16, 39, 243, 100, 31, 16, 39, 215, 249, 31, 16, + 39, 239, 206, 31, 16, 39, 212, 33, 31, 16, 39, 248, 120, 31, 16, 39, 52, + 208, 150, 31, 16, 39, 208, 70, 208, 150, 31, 16, 215, 254, 31, 16, 211, + 0, 31, 16, 202, 159, 31, 16, 218, 166, 31, 16, 224, 206, 31, 16, 239, + 155, 31, 16, 245, 140, 31, 16, 244, 62, 31, 16, 238, 14, 221, 161, 212, + 57, 31, 16, 238, 14, 221, 161, 221, 192, 212, 57, 31, 16, 208, 120, 31, + 16, 207, 175, 31, 16, 230, 239, 207, 175, 31, 16, 207, 176, 212, 57, 31, + 16, 207, 176, 206, 224, 31, 16, 219, 234, 211, 31, 31, 16, 219, 234, 211, + 28, 31, 16, 219, 234, 211, 27, 31, 16, 219, 234, 211, 26, 31, 16, 219, + 234, 211, 25, 31, 16, 219, 234, 211, 24, 31, 16, 219, 234, 211, 23, 31, + 16, 219, 234, 211, 22, 31, 16, 219, 234, 211, 21, 31, 16, 219, 234, 211, + 30, 31, 16, 219, 234, 211, 29, 31, 16, 237, 75, 31, 16, 222, 238, 31, 16, + 241, 84, 76, 211, 67, 31, 16, 244, 55, 212, 57, 31, 16, 39, 121, 247, + 240, 31, 16, 39, 112, 247, 240, 31, 16, 39, 237, 88, 31, 16, 39, 212, 23, + 218, 99, 31, 16, 219, 28, 82, 31, 16, 219, 28, 112, 82, 31, 16, 162, 219, + 28, 82, 31, 16, 238, 47, 206, 224, 31, 16, 238, 47, 242, 70, 31, 16, 3, + 239, 255, 31, 16, 244, 168, 31, 16, 244, 169, 251, 14, 31, 16, 225, 65, + 31, 16, 227, 20, 31, 16, 247, 211, 31, 16, 213, 147, 204, 33, 31, 16, + 213, 147, 248, 43, 31, 16, 224, 106, 31, 16, 224, 107, 248, 43, 31, 16, + 213, 141, 204, 33, 31, 16, 213, 141, 248, 43, 31, 16, 239, 93, 204, 33, + 31, 16, 239, 93, 248, 43, 31, 16, 227, 21, 218, 244, 216, 85, 31, 16, + 227, 21, 231, 54, 216, 85, 31, 16, 247, 212, 216, 85, 31, 16, 213, 147, + 216, 85, 31, 16, 224, 107, 216, 85, 31, 16, 213, 141, 216, 85, 31, 16, + 209, 154, 218, 242, 245, 104, 217, 216, 218, 243, 31, 16, 209, 154, 218, + 242, 245, 104, 217, 216, 231, 53, 31, 16, 209, 154, 218, 242, 245, 104, + 217, 216, 218, 244, 243, 181, 31, 16, 209, 154, 231, 52, 245, 104, 217, + 216, 218, 243, 31, 16, 209, 154, 231, 52, 245, 104, 217, 216, 231, 53, + 31, 16, 209, 154, 231, 52, 245, 104, 217, 216, 231, 54, 243, 181, 31, 16, + 209, 154, 231, 52, 245, 104, 217, 216, 231, 54, 243, 180, 31, 16, 209, + 154, 231, 52, 245, 104, 217, 216, 231, 54, 243, 179, 31, 16, 245, 133, + 31, 16, 237, 243, 247, 126, 246, 30, 31, 16, 237, 243, 240, 175, 246, 30, + 31, 16, 51, 249, 255, 31, 16, 205, 203, 31, 16, 218, 66, 31, 16, 246, 21, + 31, 16, 214, 200, 31, 16, 246, 25, 31, 16, 208, 138, 31, 16, 218, 36, 31, + 16, 218, 37, 239, 209, 31, 16, 214, 201, 239, 209, 31, 16, 208, 139, 216, + 82, 31, 16, 218, 225, 210, 247, 31, 16, 229, 90, 247, 126, 246, 30, 31, + 16, 229, 90, 241, 84, 76, 218, 159, 31, 16, 229, 90, 46, 221, 160, 31, + 16, 229, 90, 216, 150, 82, 31, 16, 229, 90, 204, 31, 221, 160, 31, 16, + 229, 90, 162, 221, 160, 31, 16, 229, 90, 217, 56, 221, 161, 211, 78, 242, + 70, 31, 16, 229, 90, 217, 56, 221, 161, 211, 78, 206, 224, 31, 16, 229, + 90, 241, 139, 221, 161, 211, 78, 242, 70, 31, 16, 229, 90, 241, 139, 221, + 161, 211, 78, 206, 224, 31, 16, 229, 90, 239, 217, 54, 30, 205, 188, 221, + 164, 210, 148, 30, 205, 188, 221, 164, 210, 137, 30, 205, 188, 221, 164, + 210, 127, 30, 205, 188, 221, 164, 210, 120, 30, 205, 188, 221, 164, 210, + 112, 30, 205, 188, 221, 164, 210, 106, 30, 205, 188, 221, 164, 210, 105, + 30, 205, 188, 221, 164, 210, 104, 30, 205, 188, 221, 164, 210, 103, 30, + 205, 188, 221, 164, 210, 147, 30, 205, 188, 221, 164, 210, 146, 30, 205, + 188, 221, 164, 210, 145, 30, 205, 188, 221, 164, 210, 144, 30, 205, 188, + 221, 164, 210, 143, 30, 205, 188, 221, 164, 210, 142, 30, 205, 188, 221, + 164, 210, 141, 30, 205, 188, 221, 164, 210, 140, 30, 205, 188, 221, 164, + 210, 139, 30, 205, 188, 221, 164, 210, 138, 30, 205, 188, 221, 164, 210, + 136, 30, 205, 188, 221, 164, 210, 135, 30, 205, 188, 221, 164, 210, 134, + 30, 205, 188, 221, 164, 210, 133, 30, 205, 188, 221, 164, 210, 132, 30, + 205, 188, 221, 164, 210, 111, 30, 205, 188, 221, 164, 210, 110, 30, 205, + 188, 221, 164, 210, 109, 30, 205, 188, 221, 164, 210, 108, 30, 205, 188, + 221, 164, 210, 107, 30, 231, 5, 221, 164, 210, 148, 30, 231, 5, 221, 164, + 210, 137, 30, 231, 5, 221, 164, 210, 120, 30, 231, 5, 221, 164, 210, 112, + 30, 231, 5, 221, 164, 210, 105, 30, 231, 5, 221, 164, 210, 104, 30, 231, + 5, 221, 164, 210, 146, 30, 231, 5, 221, 164, 210, 145, 30, 231, 5, 221, + 164, 210, 144, 30, 231, 5, 221, 164, 210, 143, 30, 231, 5, 221, 164, 210, + 140, 30, 231, 5, 221, 164, 210, 139, 30, 231, 5, 221, 164, 210, 138, 30, + 231, 5, 221, 164, 210, 133, 30, 231, 5, 221, 164, 210, 132, 30, 231, 5, + 221, 164, 210, 131, 30, 231, 5, 221, 164, 210, 130, 30, 231, 5, 221, 164, + 210, 129, 30, 231, 5, 221, 164, 210, 128, 30, 231, 5, 221, 164, 210, 126, + 30, 231, 5, 221, 164, 210, 125, 30, 231, 5, 221, 164, 210, 124, 30, 231, + 5, 221, 164, 210, 123, 30, 231, 5, 221, 164, 210, 122, 30, 231, 5, 221, + 164, 210, 121, 30, 231, 5, 221, 164, 210, 119, 30, 231, 5, 221, 164, 210, + 118, 30, 231, 5, 221, 164, 210, 117, 30, 231, 5, 221, 164, 210, 116, 30, + 231, 5, 221, 164, 210, 115, 30, 231, 5, 221, 164, 210, 114, 30, 231, 5, + 221, 164, 210, 113, 30, 231, 5, 221, 164, 210, 111, 30, 231, 5, 221, 164, + 210, 110, 30, 231, 5, 221, 164, 210, 109, 30, 231, 5, 221, 164, 210, 108, + 30, 231, 5, 221, 164, 210, 107, 39, 30, 31, 208, 66, 39, 30, 31, 209, + 124, 39, 30, 31, 218, 253, 30, 31, 227, 204, 224, 45, 35, 241, 179, 243, + 195, 35, 237, 50, 241, 179, 243, 195, 35, 236, 16, 241, 179, 243, 195, + 35, 241, 178, 237, 51, 243, 195, 35, 241, 178, 236, 15, 243, 195, 35, + 241, 179, 209, 126, 35, 246, 217, 209, 126, 35, 239, 102, 246, 61, 209, + 126, 35, 224, 98, 209, 126, 35, 248, 221, 209, 126, 35, 229, 195, 212, + 36, 209, 126, 35, 245, 185, 209, 126, 35, 250, 77, 209, 126, 35, 219, + 250, 209, 126, 35, 247, 221, 219, 211, 209, 126, 35, 244, 57, 219, 245, + 243, 148, 209, 126, 35, 243, 145, 209, 126, 35, 202, 225, 209, 126, 35, + 231, 40, 209, 126, 35, 219, 7, 209, 126, 35, 216, 157, 209, 126, 35, 245, + 197, 209, 126, 35, 236, 127, 249, 25, 209, 126, 35, 204, 103, 209, 126, + 35, 239, 181, 209, 126, 35, 251, 112, 209, 126, 35, 216, 114, 209, 126, + 35, 216, 89, 209, 126, 35, 241, 177, 209, 126, 35, 230, 85, 209, 126, 35, + 245, 192, 209, 126, 35, 241, 83, 209, 126, 35, 242, 15, 209, 126, 35, + 246, 186, 209, 126, 35, 244, 67, 209, 126, 35, 26, 216, 88, 209, 126, 35, + 219, 160, 209, 126, 35, 227, 208, 209, 126, 35, 246, 14, 209, 126, 35, + 229, 80, 209, 126, 35, 238, 214, 209, 126, 35, 211, 43, 209, 126, 35, + 217, 168, 209, 126, 35, 239, 101, 209, 126, 35, 216, 90, 209, 126, 35, + 227, 247, 219, 245, 224, 78, 209, 126, 35, 216, 86, 209, 126, 35, 238, + 33, 208, 173, 225, 3, 209, 126, 35, 241, 85, 209, 126, 35, 211, 56, 209, + 126, 35, 237, 245, 209, 126, 35, 241, 76, 209, 126, 35, 219, 50, 209, + 126, 35, 215, 242, 209, 126, 35, 239, 207, 209, 126, 35, 206, 64, 219, + 245, 204, 84, 209, 126, 35, 245, 202, 209, 126, 35, 225, 18, 209, 126, + 35, 240, 245, 209, 126, 35, 206, 234, 209, 126, 35, 243, 182, 209, 126, + 35, 246, 16, 224, 7, 209, 126, 35, 237, 222, 209, 126, 35, 238, 215, 231, + 49, 209, 126, 35, 225, 73, 209, 126, 35, 251, 133, 209, 126, 35, 241, + 101, 209, 126, 35, 242, 74, 209, 126, 35, 204, 82, 209, 126, 35, 212, + 115, 209, 126, 35, 231, 14, 209, 126, 35, 244, 25, 209, 126, 35, 244, + 148, 209, 126, 35, 243, 178, 209, 126, 35, 240, 209, 209, 126, 35, 213, + 104, 209, 126, 35, 211, 60, 209, 126, 35, 237, 90, 209, 126, 35, 245, + 226, 209, 126, 35, 246, 11, 209, 126, 35, 240, 87, 209, 126, 35, 251, 76, + 209, 126, 35, 245, 225, 209, 126, 35, 220, 32, 209, 93, 206, 41, 209, + 126, 35, 243, 204, 209, 126, 35, 228, 101, 209, 126, 35, 239, 150, 245, + 153, 215, 217, 206, 236, 17, 105, 245, 153, 215, 217, 206, 236, 17, 108, + 245, 153, 215, 217, 206, 236, 17, 147, 245, 153, 215, 217, 206, 236, 17, + 149, 245, 153, 215, 217, 206, 236, 17, 170, 245, 153, 215, 217, 206, 236, + 17, 195, 245, 153, 215, 217, 206, 236, 17, 213, 111, 245, 153, 215, 217, + 206, 236, 17, 199, 245, 153, 215, 217, 206, 236, 17, 222, 63, 245, 153, + 215, 217, 209, 148, 17, 105, 245, 153, 215, 217, 209, 148, 17, 108, 245, + 153, 215, 217, 209, 148, 17, 147, 245, 153, 215, 217, 209, 148, 17, 149, + 245, 153, 215, 217, 209, 148, 17, 170, 245, 153, 215, 217, 209, 148, 17, + 195, 245, 153, 215, 217, 209, 148, 17, 213, 111, 245, 153, 215, 217, 209, + 148, 17, 199, 245, 153, 215, 217, 209, 148, 17, 222, 63, 13, 26, 6, 63, + 13, 26, 6, 249, 255, 13, 26, 6, 247, 125, 13, 26, 6, 245, 51, 13, 26, 6, + 74, 13, 26, 6, 240, 174, 13, 26, 6, 239, 75, 13, 26, 6, 237, 171, 13, 26, + 6, 75, 13, 26, 6, 230, 184, 13, 26, 6, 230, 54, 13, 26, 6, 159, 13, 26, + 6, 226, 185, 13, 26, 6, 223, 163, 13, 26, 6, 78, 13, 26, 6, 219, 184, 13, + 26, 6, 217, 134, 13, 26, 6, 146, 13, 26, 6, 194, 13, 26, 6, 210, 69, 13, + 26, 6, 68, 13, 26, 6, 206, 164, 13, 26, 6, 204, 144, 13, 26, 6, 203, 196, + 13, 26, 6, 203, 124, 13, 26, 6, 202, 159, 13, 26, 5, 63, 13, 26, 5, 249, + 255, 13, 26, 5, 247, 125, 13, 26, 5, 245, 51, 13, 26, 5, 74, 13, 26, 5, + 240, 174, 13, 26, 5, 239, 75, 13, 26, 5, 237, 171, 13, 26, 5, 75, 13, 26, + 5, 230, 184, 13, 26, 5, 230, 54, 13, 26, 5, 159, 13, 26, 5, 226, 185, 13, + 26, 5, 223, 163, 13, 26, 5, 78, 13, 26, 5, 219, 184, 13, 26, 5, 217, 134, + 13, 26, 5, 146, 13, 26, 5, 194, 13, 26, 5, 210, 69, 13, 26, 5, 68, 13, + 26, 5, 206, 164, 13, 26, 5, 204, 144, 13, 26, 5, 203, 196, 13, 26, 5, + 203, 124, 13, 26, 5, 202, 159, 13, 37, 6, 63, 13, 37, 6, 249, 255, 13, + 37, 6, 247, 125, 13, 37, 6, 245, 51, 13, 37, 6, 74, 13, 37, 6, 240, 174, + 13, 37, 6, 239, 75, 13, 37, 6, 237, 171, 13, 37, 6, 75, 13, 37, 6, 230, + 184, 13, 37, 6, 230, 54, 13, 37, 6, 159, 13, 37, 6, 226, 185, 13, 37, 6, + 223, 163, 13, 37, 6, 78, 13, 37, 6, 219, 184, 13, 37, 6, 217, 134, 13, + 37, 6, 146, 13, 37, 6, 194, 13, 37, 6, 210, 69, 13, 37, 6, 68, 13, 37, 6, + 206, 164, 13, 37, 6, 204, 144, 13, 37, 6, 203, 196, 13, 37, 6, 203, 124, + 13, 37, 6, 202, 159, 13, 37, 5, 63, 13, 37, 5, 249, 255, 13, 37, 5, 247, + 125, 13, 37, 5, 245, 51, 13, 37, 5, 74, 13, 37, 5, 240, 174, 13, 37, 5, + 239, 75, 13, 37, 5, 75, 13, 37, 5, 230, 184, 13, 37, 5, 230, 54, 13, 37, + 5, 159, 13, 37, 5, 226, 185, 13, 37, 5, 223, 163, 13, 37, 5, 78, 13, 37, + 5, 219, 184, 13, 37, 5, 217, 134, 13, 37, 5, 146, 13, 37, 5, 194, 13, 37, + 5, 210, 69, 13, 37, 5, 68, 13, 37, 5, 206, 164, 13, 37, 5, 204, 144, 13, + 37, 5, 203, 196, 13, 37, 5, 203, 124, 13, 37, 5, 202, 159, 13, 26, 37, 6, + 63, 13, 26, 37, 6, 249, 255, 13, 26, 37, 6, 247, 125, 13, 26, 37, 6, 245, + 51, 13, 26, 37, 6, 74, 13, 26, 37, 6, 240, 174, 13, 26, 37, 6, 239, 75, + 13, 26, 37, 6, 237, 171, 13, 26, 37, 6, 75, 13, 26, 37, 6, 230, 184, 13, + 26, 37, 6, 230, 54, 13, 26, 37, 6, 159, 13, 26, 37, 6, 226, 185, 13, 26, + 37, 6, 223, 163, 13, 26, 37, 6, 78, 13, 26, 37, 6, 219, 184, 13, 26, 37, + 6, 217, 134, 13, 26, 37, 6, 146, 13, 26, 37, 6, 194, 13, 26, 37, 6, 210, + 69, 13, 26, 37, 6, 68, 13, 26, 37, 6, 206, 164, 13, 26, 37, 6, 204, 144, + 13, 26, 37, 6, 203, 196, 13, 26, 37, 6, 203, 124, 13, 26, 37, 6, 202, + 159, 13, 26, 37, 5, 63, 13, 26, 37, 5, 249, 255, 13, 26, 37, 5, 247, 125, + 13, 26, 37, 5, 245, 51, 13, 26, 37, 5, 74, 13, 26, 37, 5, 240, 174, 13, + 26, 37, 5, 239, 75, 13, 26, 37, 5, 237, 171, 13, 26, 37, 5, 75, 13, 26, + 37, 5, 230, 184, 13, 26, 37, 5, 230, 54, 13, 26, 37, 5, 159, 13, 26, 37, + 5, 226, 185, 13, 26, 37, 5, 223, 163, 13, 26, 37, 5, 78, 13, 26, 37, 5, + 219, 184, 13, 26, 37, 5, 217, 134, 13, 26, 37, 5, 146, 13, 26, 37, 5, + 194, 13, 26, 37, 5, 210, 69, 13, 26, 37, 5, 68, 13, 26, 37, 5, 206, 164, + 13, 26, 37, 5, 204, 144, 13, 26, 37, 5, 203, 196, 13, 26, 37, 5, 203, + 124, 13, 26, 37, 5, 202, 159, 13, 132, 6, 63, 13, 132, 6, 247, 125, 13, + 132, 6, 245, 51, 13, 132, 6, 239, 75, 13, 132, 6, 230, 184, 13, 132, 6, + 230, 54, 13, 132, 6, 223, 163, 13, 132, 6, 78, 13, 132, 6, 219, 184, 13, + 132, 6, 217, 134, 13, 132, 6, 194, 13, 132, 6, 210, 69, 13, 132, 6, 68, + 13, 132, 6, 206, 164, 13, 132, 6, 204, 144, 13, 132, 6, 203, 196, 13, + 132, 6, 203, 124, 13, 132, 6, 202, 159, 13, 132, 5, 63, 13, 132, 5, 249, + 255, 13, 132, 5, 247, 125, 13, 132, 5, 245, 51, 13, 132, 5, 240, 174, 13, + 132, 5, 237, 171, 13, 132, 5, 75, 13, 132, 5, 230, 184, 13, 132, 5, 230, + 54, 13, 132, 5, 159, 13, 132, 5, 226, 185, 13, 132, 5, 223, 163, 13, 132, + 5, 219, 184, 13, 132, 5, 217, 134, 13, 132, 5, 146, 13, 132, 5, 194, 13, + 132, 5, 210, 69, 13, 132, 5, 68, 13, 132, 5, 206, 164, 13, 132, 5, 204, + 144, 13, 132, 5, 203, 196, 13, 132, 5, 203, 124, 13, 132, 5, 202, 159, + 13, 26, 132, 6, 63, 13, 26, 132, 6, 249, 255, 13, 26, 132, 6, 247, 125, + 13, 26, 132, 6, 245, 51, 13, 26, 132, 6, 74, 13, 26, 132, 6, 240, 174, + 13, 26, 132, 6, 239, 75, 13, 26, 132, 6, 237, 171, 13, 26, 132, 6, 75, + 13, 26, 132, 6, 230, 184, 13, 26, 132, 6, 230, 54, 13, 26, 132, 6, 159, + 13, 26, 132, 6, 226, 185, 13, 26, 132, 6, 223, 163, 13, 26, 132, 6, 78, + 13, 26, 132, 6, 219, 184, 13, 26, 132, 6, 217, 134, 13, 26, 132, 6, 146, + 13, 26, 132, 6, 194, 13, 26, 132, 6, 210, 69, 13, 26, 132, 6, 68, 13, 26, + 132, 6, 206, 164, 13, 26, 132, 6, 204, 144, 13, 26, 132, 6, 203, 196, 13, + 26, 132, 6, 203, 124, 13, 26, 132, 6, 202, 159, 13, 26, 132, 5, 63, 13, + 26, 132, 5, 249, 255, 13, 26, 132, 5, 247, 125, 13, 26, 132, 5, 245, 51, + 13, 26, 132, 5, 74, 13, 26, 132, 5, 240, 174, 13, 26, 132, 5, 239, 75, + 13, 26, 132, 5, 237, 171, 13, 26, 132, 5, 75, 13, 26, 132, 5, 230, 184, + 13, 26, 132, 5, 230, 54, 13, 26, 132, 5, 159, 13, 26, 132, 5, 226, 185, + 13, 26, 132, 5, 223, 163, 13, 26, 132, 5, 78, 13, 26, 132, 5, 219, 184, + 13, 26, 132, 5, 217, 134, 13, 26, 132, 5, 146, 13, 26, 132, 5, 194, 13, + 26, 132, 5, 210, 69, 13, 26, 132, 5, 68, 13, 26, 132, 5, 206, 164, 13, + 26, 132, 5, 204, 144, 13, 26, 132, 5, 203, 196, 13, 26, 132, 5, 203, 124, + 13, 26, 132, 5, 202, 159, 13, 166, 6, 63, 13, 166, 6, 249, 255, 13, 166, + 6, 245, 51, 13, 166, 6, 74, 13, 166, 6, 240, 174, 13, 166, 6, 239, 75, + 13, 166, 6, 230, 184, 13, 166, 6, 230, 54, 13, 166, 6, 159, 13, 166, 6, + 226, 185, 13, 166, 6, 223, 163, 13, 166, 6, 78, 13, 166, 6, 219, 184, 13, + 166, 6, 217, 134, 13, 166, 6, 194, 13, 166, 6, 210, 69, 13, 166, 6, 68, + 13, 166, 6, 206, 164, 13, 166, 6, 204, 144, 13, 166, 6, 203, 196, 13, + 166, 6, 203, 124, 13, 166, 5, 63, 13, 166, 5, 249, 255, 13, 166, 5, 247, + 125, 13, 166, 5, 245, 51, 13, 166, 5, 74, 13, 166, 5, 240, 174, 13, 166, + 5, 239, 75, 13, 166, 5, 237, 171, 13, 166, 5, 75, 13, 166, 5, 230, 184, + 13, 166, 5, 230, 54, 13, 166, 5, 159, 13, 166, 5, 226, 185, 13, 166, 5, + 223, 163, 13, 166, 5, 78, 13, 166, 5, 219, 184, 13, 166, 5, 217, 134, 13, + 166, 5, 146, 13, 166, 5, 194, 13, 166, 5, 210, 69, 13, 166, 5, 68, 13, + 166, 5, 206, 164, 13, 166, 5, 204, 144, 13, 166, 5, 203, 196, 13, 166, 5, + 203, 124, 13, 166, 5, 202, 159, 13, 169, 6, 63, 13, 169, 6, 249, 255, 13, + 169, 6, 245, 51, 13, 169, 6, 74, 13, 169, 6, 240, 174, 13, 169, 6, 239, + 75, 13, 169, 6, 75, 13, 169, 6, 230, 184, 13, 169, 6, 230, 54, 13, 169, + 6, 159, 13, 169, 6, 226, 185, 13, 169, 6, 78, 13, 169, 6, 194, 13, 169, + 6, 210, 69, 13, 169, 6, 68, 13, 169, 6, 206, 164, 13, 169, 6, 204, 144, + 13, 169, 6, 203, 196, 13, 169, 6, 203, 124, 13, 169, 5, 63, 13, 169, 5, + 249, 255, 13, 169, 5, 247, 125, 13, 169, 5, 245, 51, 13, 169, 5, 74, 13, + 169, 5, 240, 174, 13, 169, 5, 239, 75, 13, 169, 5, 237, 171, 13, 169, 5, + 75, 13, 169, 5, 230, 184, 13, 169, 5, 230, 54, 13, 169, 5, 159, 13, 169, + 5, 226, 185, 13, 169, 5, 223, 163, 13, 169, 5, 78, 13, 169, 5, 219, 184, + 13, 169, 5, 217, 134, 13, 169, 5, 146, 13, 169, 5, 194, 13, 169, 5, 210, + 69, 13, 169, 5, 68, 13, 169, 5, 206, 164, 13, 169, 5, 204, 144, 13, 169, + 5, 203, 196, 13, 169, 5, 203, 124, 13, 169, 5, 202, 159, 13, 26, 166, 6, + 63, 13, 26, 166, 6, 249, 255, 13, 26, 166, 6, 247, 125, 13, 26, 166, 6, + 245, 51, 13, 26, 166, 6, 74, 13, 26, 166, 6, 240, 174, 13, 26, 166, 6, + 239, 75, 13, 26, 166, 6, 237, 171, 13, 26, 166, 6, 75, 13, 26, 166, 6, + 230, 184, 13, 26, 166, 6, 230, 54, 13, 26, 166, 6, 159, 13, 26, 166, 6, + 226, 185, 13, 26, 166, 6, 223, 163, 13, 26, 166, 6, 78, 13, 26, 166, 6, + 219, 184, 13, 26, 166, 6, 217, 134, 13, 26, 166, 6, 146, 13, 26, 166, 6, + 194, 13, 26, 166, 6, 210, 69, 13, 26, 166, 6, 68, 13, 26, 166, 6, 206, + 164, 13, 26, 166, 6, 204, 144, 13, 26, 166, 6, 203, 196, 13, 26, 166, 6, + 203, 124, 13, 26, 166, 6, 202, 159, 13, 26, 166, 5, 63, 13, 26, 166, 5, + 249, 255, 13, 26, 166, 5, 247, 125, 13, 26, 166, 5, 245, 51, 13, 26, 166, + 5, 74, 13, 26, 166, 5, 240, 174, 13, 26, 166, 5, 239, 75, 13, 26, 166, 5, + 237, 171, 13, 26, 166, 5, 75, 13, 26, 166, 5, 230, 184, 13, 26, 166, 5, + 230, 54, 13, 26, 166, 5, 159, 13, 26, 166, 5, 226, 185, 13, 26, 166, 5, + 223, 163, 13, 26, 166, 5, 78, 13, 26, 166, 5, 219, 184, 13, 26, 166, 5, + 217, 134, 13, 26, 166, 5, 146, 13, 26, 166, 5, 194, 13, 26, 166, 5, 210, + 69, 13, 26, 166, 5, 68, 13, 26, 166, 5, 206, 164, 13, 26, 166, 5, 204, + 144, 13, 26, 166, 5, 203, 196, 13, 26, 166, 5, 203, 124, 13, 26, 166, 5, + 202, 159, 13, 41, 6, 63, 13, 41, 6, 249, 255, 13, 41, 6, 247, 125, 13, + 41, 6, 245, 51, 13, 41, 6, 74, 13, 41, 6, 240, 174, 13, 41, 6, 239, 75, + 13, 41, 6, 237, 171, 13, 41, 6, 75, 13, 41, 6, 230, 184, 13, 41, 6, 230, + 54, 13, 41, 6, 159, 13, 41, 6, 226, 185, 13, 41, 6, 223, 163, 13, 41, 6, + 78, 13, 41, 6, 219, 184, 13, 41, 6, 217, 134, 13, 41, 6, 146, 13, 41, 6, + 194, 13, 41, 6, 210, 69, 13, 41, 6, 68, 13, 41, 6, 206, 164, 13, 41, 6, + 204, 144, 13, 41, 6, 203, 196, 13, 41, 6, 203, 124, 13, 41, 6, 202, 159, + 13, 41, 5, 63, 13, 41, 5, 249, 255, 13, 41, 5, 247, 125, 13, 41, 5, 245, + 51, 13, 41, 5, 74, 13, 41, 5, 240, 174, 13, 41, 5, 239, 75, 13, 41, 5, + 237, 171, 13, 41, 5, 75, 13, 41, 5, 230, 184, 13, 41, 5, 230, 54, 13, 41, + 5, 159, 13, 41, 5, 226, 185, 13, 41, 5, 223, 163, 13, 41, 5, 78, 13, 41, + 5, 219, 184, 13, 41, 5, 217, 134, 13, 41, 5, 146, 13, 41, 5, 194, 13, 41, + 5, 210, 69, 13, 41, 5, 68, 13, 41, 5, 206, 164, 13, 41, 5, 204, 144, 13, + 41, 5, 203, 196, 13, 41, 5, 203, 124, 13, 41, 5, 202, 159, 13, 41, 26, 6, + 63, 13, 41, 26, 6, 249, 255, 13, 41, 26, 6, 247, 125, 13, 41, 26, 6, 245, + 51, 13, 41, 26, 6, 74, 13, 41, 26, 6, 240, 174, 13, 41, 26, 6, 239, 75, + 13, 41, 26, 6, 237, 171, 13, 41, 26, 6, 75, 13, 41, 26, 6, 230, 184, 13, + 41, 26, 6, 230, 54, 13, 41, 26, 6, 159, 13, 41, 26, 6, 226, 185, 13, 41, + 26, 6, 223, 163, 13, 41, 26, 6, 78, 13, 41, 26, 6, 219, 184, 13, 41, 26, + 6, 217, 134, 13, 41, 26, 6, 146, 13, 41, 26, 6, 194, 13, 41, 26, 6, 210, + 69, 13, 41, 26, 6, 68, 13, 41, 26, 6, 206, 164, 13, 41, 26, 6, 204, 144, + 13, 41, 26, 6, 203, 196, 13, 41, 26, 6, 203, 124, 13, 41, 26, 6, 202, + 159, 13, 41, 26, 5, 63, 13, 41, 26, 5, 249, 255, 13, 41, 26, 5, 247, 125, + 13, 41, 26, 5, 245, 51, 13, 41, 26, 5, 74, 13, 41, 26, 5, 240, 174, 13, + 41, 26, 5, 239, 75, 13, 41, 26, 5, 237, 171, 13, 41, 26, 5, 75, 13, 41, + 26, 5, 230, 184, 13, 41, 26, 5, 230, 54, 13, 41, 26, 5, 159, 13, 41, 26, + 5, 226, 185, 13, 41, 26, 5, 223, 163, 13, 41, 26, 5, 78, 13, 41, 26, 5, + 219, 184, 13, 41, 26, 5, 217, 134, 13, 41, 26, 5, 146, 13, 41, 26, 5, + 194, 13, 41, 26, 5, 210, 69, 13, 41, 26, 5, 68, 13, 41, 26, 5, 206, 164, + 13, 41, 26, 5, 204, 144, 13, 41, 26, 5, 203, 196, 13, 41, 26, 5, 203, + 124, 13, 41, 26, 5, 202, 159, 13, 41, 37, 6, 63, 13, 41, 37, 6, 249, 255, + 13, 41, 37, 6, 247, 125, 13, 41, 37, 6, 245, 51, 13, 41, 37, 6, 74, 13, + 41, 37, 6, 240, 174, 13, 41, 37, 6, 239, 75, 13, 41, 37, 6, 237, 171, 13, + 41, 37, 6, 75, 13, 41, 37, 6, 230, 184, 13, 41, 37, 6, 230, 54, 13, 41, + 37, 6, 159, 13, 41, 37, 6, 226, 185, 13, 41, 37, 6, 223, 163, 13, 41, 37, + 6, 78, 13, 41, 37, 6, 219, 184, 13, 41, 37, 6, 217, 134, 13, 41, 37, 6, + 146, 13, 41, 37, 6, 194, 13, 41, 37, 6, 210, 69, 13, 41, 37, 6, 68, 13, + 41, 37, 6, 206, 164, 13, 41, 37, 6, 204, 144, 13, 41, 37, 6, 203, 196, + 13, 41, 37, 6, 203, 124, 13, 41, 37, 6, 202, 159, 13, 41, 37, 5, 63, 13, + 41, 37, 5, 249, 255, 13, 41, 37, 5, 247, 125, 13, 41, 37, 5, 245, 51, 13, + 41, 37, 5, 74, 13, 41, 37, 5, 240, 174, 13, 41, 37, 5, 239, 75, 13, 41, + 37, 5, 237, 171, 13, 41, 37, 5, 75, 13, 41, 37, 5, 230, 184, 13, 41, 37, + 5, 230, 54, 13, 41, 37, 5, 159, 13, 41, 37, 5, 226, 185, 13, 41, 37, 5, + 223, 163, 13, 41, 37, 5, 78, 13, 41, 37, 5, 219, 184, 13, 41, 37, 5, 217, + 134, 13, 41, 37, 5, 146, 13, 41, 37, 5, 194, 13, 41, 37, 5, 210, 69, 13, + 41, 37, 5, 68, 13, 41, 37, 5, 206, 164, 13, 41, 37, 5, 204, 144, 13, 41, + 37, 5, 203, 196, 13, 41, 37, 5, 203, 124, 13, 41, 37, 5, 202, 159, 13, + 41, 26, 37, 6, 63, 13, 41, 26, 37, 6, 249, 255, 13, 41, 26, 37, 6, 247, + 125, 13, 41, 26, 37, 6, 245, 51, 13, 41, 26, 37, 6, 74, 13, 41, 26, 37, + 6, 240, 174, 13, 41, 26, 37, 6, 239, 75, 13, 41, 26, 37, 6, 237, 171, 13, + 41, 26, 37, 6, 75, 13, 41, 26, 37, 6, 230, 184, 13, 41, 26, 37, 6, 230, + 54, 13, 41, 26, 37, 6, 159, 13, 41, 26, 37, 6, 226, 185, 13, 41, 26, 37, + 6, 223, 163, 13, 41, 26, 37, 6, 78, 13, 41, 26, 37, 6, 219, 184, 13, 41, + 26, 37, 6, 217, 134, 13, 41, 26, 37, 6, 146, 13, 41, 26, 37, 6, 194, 13, + 41, 26, 37, 6, 210, 69, 13, 41, 26, 37, 6, 68, 13, 41, 26, 37, 6, 206, + 164, 13, 41, 26, 37, 6, 204, 144, 13, 41, 26, 37, 6, 203, 196, 13, 41, + 26, 37, 6, 203, 124, 13, 41, 26, 37, 6, 202, 159, 13, 41, 26, 37, 5, 63, + 13, 41, 26, 37, 5, 249, 255, 13, 41, 26, 37, 5, 247, 125, 13, 41, 26, 37, + 5, 245, 51, 13, 41, 26, 37, 5, 74, 13, 41, 26, 37, 5, 240, 174, 13, 41, + 26, 37, 5, 239, 75, 13, 41, 26, 37, 5, 237, 171, 13, 41, 26, 37, 5, 75, + 13, 41, 26, 37, 5, 230, 184, 13, 41, 26, 37, 5, 230, 54, 13, 41, 26, 37, + 5, 159, 13, 41, 26, 37, 5, 226, 185, 13, 41, 26, 37, 5, 223, 163, 13, 41, + 26, 37, 5, 78, 13, 41, 26, 37, 5, 219, 184, 13, 41, 26, 37, 5, 217, 134, + 13, 41, 26, 37, 5, 146, 13, 41, 26, 37, 5, 194, 13, 41, 26, 37, 5, 210, + 69, 13, 41, 26, 37, 5, 68, 13, 41, 26, 37, 5, 206, 164, 13, 41, 26, 37, + 5, 204, 144, 13, 41, 26, 37, 5, 203, 196, 13, 41, 26, 37, 5, 203, 124, + 13, 41, 26, 37, 5, 202, 159, 13, 224, 41, 6, 63, 13, 224, 41, 6, 249, + 255, 13, 224, 41, 6, 247, 125, 13, 224, 41, 6, 245, 51, 13, 224, 41, 6, + 74, 13, 224, 41, 6, 240, 174, 13, 224, 41, 6, 239, 75, 13, 224, 41, 6, + 237, 171, 13, 224, 41, 6, 75, 13, 224, 41, 6, 230, 184, 13, 224, 41, 6, + 230, 54, 13, 224, 41, 6, 159, 13, 224, 41, 6, 226, 185, 13, 224, 41, 6, + 223, 163, 13, 224, 41, 6, 78, 13, 224, 41, 6, 219, 184, 13, 224, 41, 6, + 217, 134, 13, 224, 41, 6, 146, 13, 224, 41, 6, 194, 13, 224, 41, 6, 210, + 69, 13, 224, 41, 6, 68, 13, 224, 41, 6, 206, 164, 13, 224, 41, 6, 204, + 144, 13, 224, 41, 6, 203, 196, 13, 224, 41, 6, 203, 124, 13, 224, 41, 6, + 202, 159, 13, 224, 41, 5, 63, 13, 224, 41, 5, 249, 255, 13, 224, 41, 5, + 247, 125, 13, 224, 41, 5, 245, 51, 13, 224, 41, 5, 74, 13, 224, 41, 5, + 240, 174, 13, 224, 41, 5, 239, 75, 13, 224, 41, 5, 237, 171, 13, 224, 41, + 5, 75, 13, 224, 41, 5, 230, 184, 13, 224, 41, 5, 230, 54, 13, 224, 41, 5, + 159, 13, 224, 41, 5, 226, 185, 13, 224, 41, 5, 223, 163, 13, 224, 41, 5, + 78, 13, 224, 41, 5, 219, 184, 13, 224, 41, 5, 217, 134, 13, 224, 41, 5, + 146, 13, 224, 41, 5, 194, 13, 224, 41, 5, 210, 69, 13, 224, 41, 5, 68, + 13, 224, 41, 5, 206, 164, 13, 224, 41, 5, 204, 144, 13, 224, 41, 5, 203, + 196, 13, 224, 41, 5, 203, 124, 13, 224, 41, 5, 202, 159, 13, 37, 5, 243, + 84, 75, 13, 37, 5, 243, 84, 230, 184, 13, 26, 6, 251, 2, 13, 26, 6, 248, + 106, 13, 26, 6, 238, 235, 13, 26, 6, 244, 37, 13, 26, 6, 241, 37, 13, 26, + 6, 202, 83, 13, 26, 6, 240, 248, 13, 26, 6, 209, 74, 13, 26, 6, 230, 230, + 13, 26, 6, 229, 247, 13, 26, 6, 228, 24, 13, 26, 6, 223, 246, 13, 26, 6, + 221, 84, 13, 26, 6, 203, 170, 13, 26, 6, 220, 34, 13, 26, 6, 218, 167, + 13, 26, 6, 216, 59, 13, 26, 6, 209, 75, 97, 13, 26, 6, 212, 144, 13, 26, + 6, 209, 207, 13, 26, 6, 206, 216, 13, 26, 6, 218, 192, 13, 26, 6, 246, + 142, 13, 26, 6, 217, 202, 13, 26, 6, 220, 36, 13, 26, 223, 101, 13, 26, + 5, 251, 2, 13, 26, 5, 248, 106, 13, 26, 5, 238, 235, 13, 26, 5, 244, 37, + 13, 26, 5, 241, 37, 13, 26, 5, 202, 83, 13, 26, 5, 240, 248, 13, 26, 5, + 209, 74, 13, 26, 5, 230, 230, 13, 26, 5, 229, 247, 13, 26, 5, 228, 24, + 13, 26, 5, 223, 246, 13, 26, 5, 221, 84, 13, 26, 5, 203, 170, 13, 26, 5, + 220, 34, 13, 26, 5, 218, 167, 13, 26, 5, 216, 59, 13, 26, 5, 46, 212, + 144, 13, 26, 5, 212, 144, 13, 26, 5, 209, 207, 13, 26, 5, 206, 216, 13, + 26, 5, 218, 192, 13, 26, 5, 246, 142, 13, 26, 5, 217, 202, 13, 26, 5, + 220, 36, 13, 26, 219, 69, 243, 205, 13, 26, 241, 38, 97, 13, 26, 209, 75, + 97, 13, 26, 229, 248, 97, 13, 26, 218, 193, 97, 13, 26, 216, 60, 97, 13, + 26, 218, 168, 97, 13, 37, 6, 251, 2, 13, 37, 6, 248, 106, 13, 37, 6, 238, + 235, 13, 37, 6, 244, 37, 13, 37, 6, 241, 37, 13, 37, 6, 202, 83, 13, 37, + 6, 240, 248, 13, 37, 6, 209, 74, 13, 37, 6, 230, 230, 13, 37, 6, 229, + 247, 13, 37, 6, 228, 24, 13, 37, 6, 223, 246, 13, 37, 6, 221, 84, 13, 37, + 6, 203, 170, 13, 37, 6, 220, 34, 13, 37, 6, 218, 167, 13, 37, 6, 216, 59, + 13, 37, 6, 209, 75, 97, 13, 37, 6, 212, 144, 13, 37, 6, 209, 207, 13, 37, + 6, 206, 216, 13, 37, 6, 218, 192, 13, 37, 6, 246, 142, 13, 37, 6, 217, + 202, 13, 37, 6, 220, 36, 13, 37, 223, 101, 13, 37, 5, 251, 2, 13, 37, 5, + 248, 106, 13, 37, 5, 238, 235, 13, 37, 5, 244, 37, 13, 37, 5, 241, 37, + 13, 37, 5, 202, 83, 13, 37, 5, 240, 248, 13, 37, 5, 209, 74, 13, 37, 5, + 230, 230, 13, 37, 5, 229, 247, 13, 37, 5, 228, 24, 13, 37, 5, 223, 246, + 13, 37, 5, 221, 84, 13, 37, 5, 203, 170, 13, 37, 5, 220, 34, 13, 37, 5, + 218, 167, 13, 37, 5, 216, 59, 13, 37, 5, 46, 212, 144, 13, 37, 5, 212, + 144, 13, 37, 5, 209, 207, 13, 37, 5, 206, 216, 13, 37, 5, 218, 192, 13, + 37, 5, 246, 142, 13, 37, 5, 217, 202, 13, 37, 5, 220, 36, 13, 37, 219, + 69, 243, 205, 13, 37, 241, 38, 97, 13, 37, 209, 75, 97, 13, 37, 229, 248, + 97, 13, 37, 218, 193, 97, 13, 37, 216, 60, 97, 13, 37, 218, 168, 97, 13, + 26, 37, 6, 251, 2, 13, 26, 37, 6, 248, 106, 13, 26, 37, 6, 238, 235, 13, + 26, 37, 6, 244, 37, 13, 26, 37, 6, 241, 37, 13, 26, 37, 6, 202, 83, 13, + 26, 37, 6, 240, 248, 13, 26, 37, 6, 209, 74, 13, 26, 37, 6, 230, 230, 13, + 26, 37, 6, 229, 247, 13, 26, 37, 6, 228, 24, 13, 26, 37, 6, 223, 246, 13, + 26, 37, 6, 221, 84, 13, 26, 37, 6, 203, 170, 13, 26, 37, 6, 220, 34, 13, + 26, 37, 6, 218, 167, 13, 26, 37, 6, 216, 59, 13, 26, 37, 6, 209, 75, 97, + 13, 26, 37, 6, 212, 144, 13, 26, 37, 6, 209, 207, 13, 26, 37, 6, 206, + 216, 13, 26, 37, 6, 218, 192, 13, 26, 37, 6, 246, 142, 13, 26, 37, 6, + 217, 202, 13, 26, 37, 6, 220, 36, 13, 26, 37, 223, 101, 13, 26, 37, 5, + 251, 2, 13, 26, 37, 5, 248, 106, 13, 26, 37, 5, 238, 235, 13, 26, 37, 5, + 244, 37, 13, 26, 37, 5, 241, 37, 13, 26, 37, 5, 202, 83, 13, 26, 37, 5, + 240, 248, 13, 26, 37, 5, 209, 74, 13, 26, 37, 5, 230, 230, 13, 26, 37, 5, + 229, 247, 13, 26, 37, 5, 228, 24, 13, 26, 37, 5, 223, 246, 13, 26, 37, 5, + 221, 84, 13, 26, 37, 5, 203, 170, 13, 26, 37, 5, 220, 34, 13, 26, 37, 5, + 218, 167, 13, 26, 37, 5, 216, 59, 13, 26, 37, 5, 46, 212, 144, 13, 26, + 37, 5, 212, 144, 13, 26, 37, 5, 209, 207, 13, 26, 37, 5, 206, 216, 13, + 26, 37, 5, 218, 192, 13, 26, 37, 5, 246, 142, 13, 26, 37, 5, 217, 202, + 13, 26, 37, 5, 220, 36, 13, 26, 37, 219, 69, 243, 205, 13, 26, 37, 241, + 38, 97, 13, 26, 37, 209, 75, 97, 13, 26, 37, 229, 248, 97, 13, 26, 37, + 218, 193, 97, 13, 26, 37, 216, 60, 97, 13, 26, 37, 218, 168, 97, 13, 41, + 26, 6, 251, 2, 13, 41, 26, 6, 248, 106, 13, 41, 26, 6, 238, 235, 13, 41, + 26, 6, 244, 37, 13, 41, 26, 6, 241, 37, 13, 41, 26, 6, 202, 83, 13, 41, + 26, 6, 240, 248, 13, 41, 26, 6, 209, 74, 13, 41, 26, 6, 230, 230, 13, 41, + 26, 6, 229, 247, 13, 41, 26, 6, 228, 24, 13, 41, 26, 6, 223, 246, 13, 41, + 26, 6, 221, 84, 13, 41, 26, 6, 203, 170, 13, 41, 26, 6, 220, 34, 13, 41, + 26, 6, 218, 167, 13, 41, 26, 6, 216, 59, 13, 41, 26, 6, 209, 75, 97, 13, + 41, 26, 6, 212, 144, 13, 41, 26, 6, 209, 207, 13, 41, 26, 6, 206, 216, + 13, 41, 26, 6, 218, 192, 13, 41, 26, 6, 246, 142, 13, 41, 26, 6, 217, + 202, 13, 41, 26, 6, 220, 36, 13, 41, 26, 223, 101, 13, 41, 26, 5, 251, 2, + 13, 41, 26, 5, 248, 106, 13, 41, 26, 5, 238, 235, 13, 41, 26, 5, 244, 37, + 13, 41, 26, 5, 241, 37, 13, 41, 26, 5, 202, 83, 13, 41, 26, 5, 240, 248, + 13, 41, 26, 5, 209, 74, 13, 41, 26, 5, 230, 230, 13, 41, 26, 5, 229, 247, + 13, 41, 26, 5, 228, 24, 13, 41, 26, 5, 223, 246, 13, 41, 26, 5, 221, 84, + 13, 41, 26, 5, 203, 170, 13, 41, 26, 5, 220, 34, 13, 41, 26, 5, 218, 167, + 13, 41, 26, 5, 216, 59, 13, 41, 26, 5, 46, 212, 144, 13, 41, 26, 5, 212, + 144, 13, 41, 26, 5, 209, 207, 13, 41, 26, 5, 206, 216, 13, 41, 26, 5, + 218, 192, 13, 41, 26, 5, 246, 142, 13, 41, 26, 5, 217, 202, 13, 41, 26, + 5, 220, 36, 13, 41, 26, 219, 69, 243, 205, 13, 41, 26, 241, 38, 97, 13, + 41, 26, 209, 75, 97, 13, 41, 26, 229, 248, 97, 13, 41, 26, 218, 193, 97, + 13, 41, 26, 216, 60, 97, 13, 41, 26, 218, 168, 97, 13, 41, 26, 37, 6, + 251, 2, 13, 41, 26, 37, 6, 248, 106, 13, 41, 26, 37, 6, 238, 235, 13, 41, + 26, 37, 6, 244, 37, 13, 41, 26, 37, 6, 241, 37, 13, 41, 26, 37, 6, 202, + 83, 13, 41, 26, 37, 6, 240, 248, 13, 41, 26, 37, 6, 209, 74, 13, 41, 26, + 37, 6, 230, 230, 13, 41, 26, 37, 6, 229, 247, 13, 41, 26, 37, 6, 228, 24, + 13, 41, 26, 37, 6, 223, 246, 13, 41, 26, 37, 6, 221, 84, 13, 41, 26, 37, + 6, 203, 170, 13, 41, 26, 37, 6, 220, 34, 13, 41, 26, 37, 6, 218, 167, 13, + 41, 26, 37, 6, 216, 59, 13, 41, 26, 37, 6, 209, 75, 97, 13, 41, 26, 37, + 6, 212, 144, 13, 41, 26, 37, 6, 209, 207, 13, 41, 26, 37, 6, 206, 216, + 13, 41, 26, 37, 6, 218, 192, 13, 41, 26, 37, 6, 246, 142, 13, 41, 26, 37, + 6, 217, 202, 13, 41, 26, 37, 6, 220, 36, 13, 41, 26, 37, 223, 101, 13, + 41, 26, 37, 5, 251, 2, 13, 41, 26, 37, 5, 248, 106, 13, 41, 26, 37, 5, + 238, 235, 13, 41, 26, 37, 5, 244, 37, 13, 41, 26, 37, 5, 241, 37, 13, 41, + 26, 37, 5, 202, 83, 13, 41, 26, 37, 5, 240, 248, 13, 41, 26, 37, 5, 209, + 74, 13, 41, 26, 37, 5, 230, 230, 13, 41, 26, 37, 5, 229, 247, 13, 41, 26, + 37, 5, 228, 24, 13, 41, 26, 37, 5, 223, 246, 13, 41, 26, 37, 5, 221, 84, + 13, 41, 26, 37, 5, 203, 170, 13, 41, 26, 37, 5, 220, 34, 13, 41, 26, 37, + 5, 218, 167, 13, 41, 26, 37, 5, 216, 59, 13, 41, 26, 37, 5, 46, 212, 144, + 13, 41, 26, 37, 5, 212, 144, 13, 41, 26, 37, 5, 209, 207, 13, 41, 26, 37, + 5, 206, 216, 13, 41, 26, 37, 5, 218, 192, 13, 41, 26, 37, 5, 246, 142, + 13, 41, 26, 37, 5, 217, 202, 13, 41, 26, 37, 5, 220, 36, 13, 41, 26, 37, + 219, 69, 243, 205, 13, 41, 26, 37, 241, 38, 97, 13, 41, 26, 37, 209, 75, + 97, 13, 41, 26, 37, 229, 248, 97, 13, 41, 26, 37, 218, 193, 97, 13, 41, + 26, 37, 216, 60, 97, 13, 41, 26, 37, 218, 168, 97, 13, 26, 6, 243, 199, + 13, 26, 5, 243, 199, 13, 26, 17, 202, 84, 13, 26, 17, 105, 13, 26, 17, + 108, 13, 26, 17, 147, 13, 26, 17, 149, 13, 26, 17, 170, 13, 26, 17, 195, + 13, 26, 17, 213, 111, 13, 26, 17, 199, 13, 26, 17, 222, 63, 13, 169, 17, + 202, 84, 13, 169, 17, 105, 13, 169, 17, 108, 13, 169, 17, 147, 13, 169, + 17, 149, 13, 169, 17, 170, 13, 169, 17, 195, 13, 169, 17, 213, 111, 13, + 169, 17, 199, 13, 169, 17, 222, 63, 13, 41, 17, 202, 84, 13, 41, 17, 105, + 13, 41, 17, 108, 13, 41, 17, 147, 13, 41, 17, 149, 13, 41, 17, 170, 13, + 41, 17, 195, 13, 41, 17, 213, 111, 13, 41, 17, 199, 13, 41, 17, 222, 63, + 13, 41, 26, 17, 202, 84, 13, 41, 26, 17, 105, 13, 41, 26, 17, 108, 13, + 41, 26, 17, 147, 13, 41, 26, 17, 149, 13, 41, 26, 17, 170, 13, 41, 26, + 17, 195, 13, 41, 26, 17, 213, 111, 13, 41, 26, 17, 199, 13, 41, 26, 17, + 222, 63, 13, 224, 41, 17, 202, 84, 13, 224, 41, 17, 105, 13, 224, 41, 17, + 108, 13, 224, 41, 17, 147, 13, 224, 41, 17, 149, 13, 224, 41, 17, 170, + 13, 224, 41, 17, 195, 13, 224, 41, 17, 213, 111, 13, 224, 41, 17, 199, + 13, 224, 41, 17, 222, 63, 21, 128, 231, 35, 21, 237, 120, 231, 35, 21, + 237, 116, 231, 35, 21, 237, 105, 231, 35, 21, 237, 109, 231, 35, 21, 237, + 122, 231, 35, 21, 128, 122, 248, 117, 21, 237, 120, 122, 248, 117, 21, + 128, 148, 206, 248, 122, 248, 117, 21, 128, 122, 216, 188, 229, 29, 21, + 128, 122, 245, 97, 21, 128, 122, 236, 235, 21, 128, 122, 236, 236, 227, + 0, 21, 237, 120, 122, 236, 237, 21, 128, 122, 224, 148, 21, 237, 120, + 122, 224, 148, 21, 128, 122, 101, 248, 117, 21, 128, 122, 101, 216, 188, + 229, 28, 21, 128, 122, 101, 236, 235, 21, 128, 122, 112, 101, 236, 235, + 21, 128, 122, 236, 236, 101, 206, 224, 21, 128, 122, 101, 245, 207, 21, + 128, 122, 101, 245, 208, 122, 248, 117, 21, 128, 122, 101, 245, 208, 101, + 248, 117, 21, 128, 122, 101, 245, 208, 245, 97, 21, 128, 122, 101, 245, + 208, 236, 235, 21, 128, 122, 101, 245, 127, 21, 237, 120, 122, 101, 245, + 127, 21, 128, 101, 248, 118, 115, 231, 35, 21, 128, 122, 248, 118, 115, + 224, 148, 21, 128, 122, 101, 209, 21, 21, 237, 120, 122, 101, 209, 21, + 21, 128, 122, 101, 211, 53, 148, 248, 117, 21, 128, 122, 101, 248, 118, + 148, 211, 52, 21, 128, 122, 101, 148, 248, 117, 21, 128, 122, 101, 236, + 236, 211, 186, 148, 212, 155, 21, 128, 122, 112, 101, 236, 236, 148, 212, + 155, 21, 128, 122, 112, 101, 236, 236, 148, 245, 207, 21, 128, 122, 236, + 236, 101, 112, 148, 212, 155, 21, 128, 122, 101, 112, 211, 186, 148, 239, + 151, 21, 128, 122, 101, 148, 245, 97, 21, 128, 122, 101, 148, 246, 60, + 21, 128, 122, 101, 148, 236, 114, 21, 128, 122, 101, 148, 236, 235, 21, + 128, 148, 248, 104, 122, 101, 211, 52, 21, 128, 122, 101, 245, 208, 148, + 212, 155, 21, 128, 122, 101, 245, 208, 148, 212, 156, 245, 207, 21, 128, + 122, 101, 245, 208, 148, 212, 156, 248, 117, 21, 128, 101, 148, 236, 115, + 122, 206, 224, 21, 128, 122, 148, 236, 115, 101, 206, 224, 21, 128, 122, + 101, 245, 208, 236, 236, 148, 212, 155, 21, 128, 122, 101, 245, 128, 148, + 212, 155, 21, 128, 122, 101, 245, 208, 148, 239, 151, 21, 128, 122, 101, + 245, 208, 245, 98, 148, 239, 151, 21, 128, 101, 148, 245, 98, 122, 206, + 224, 21, 128, 122, 148, 245, 98, 101, 206, 224, 21, 128, 101, 148, 43, + 122, 206, 224, 21, 128, 101, 148, 43, 122, 236, 235, 21, 128, 122, 148, + 250, 216, 219, 212, 101, 206, 224, 21, 128, 122, 148, 250, 216, 231, 50, + 101, 206, 224, 21, 128, 122, 148, 43, 101, 206, 224, 21, 128, 122, 101, + 148, 245, 208, 236, 235, 21, 128, 122, 101, 148, 250, 216, 219, 211, 21, + 128, 122, 101, 148, 250, 215, 21, 128, 101, 148, 250, 216, 219, 212, 122, + 206, 224, 21, 128, 101, 148, 250, 216, 219, 212, 122, 245, 127, 21, 128, + 101, 148, 250, 216, 122, 206, 224, 21, 128, 122, 148, 236, 115, 101, 236, + 235, 21, 237, 111, 239, 147, 239, 253, 21, 237, 111, 239, 147, 239, 254, + 248, 117, 21, 237, 111, 239, 147, 239, 254, 236, 235, 21, 237, 111, 239, + 147, 239, 254, 245, 207, 21, 237, 111, 239, 147, 239, 254, 245, 208, 211, + 193, 21, 237, 118, 239, 147, 239, 254, 245, 207, 21, 128, 239, 147, 239, + 254, 245, 208, 248, 117, 21, 237, 109, 239, 147, 239, 254, 245, 207, 21, + 237, 111, 239, 233, 239, 254, 211, 185, 21, 237, 111, 237, 46, 239, 233, + 239, 254, 211, 185, 21, 237, 111, 239, 233, 239, 254, 211, 186, 239, 147, + 248, 117, 21, 237, 111, 237, 46, 239, 233, 239, 254, 211, 186, 239, 147, + 248, 117, 21, 237, 111, 239, 233, 239, 254, 211, 186, 248, 117, 21, 237, + 111, 237, 46, 239, 233, 239, 254, 211, 186, 248, 117, 21, 237, 111, 239, + 233, 239, 254, 211, 186, 148, 239, 151, 21, 237, 116, 239, 233, 239, 254, + 211, 185, 21, 237, 116, 239, 233, 239, 254, 211, 186, 220, 8, 21, 237, + 109, 239, 233, 239, 254, 211, 186, 220, 8, 21, 237, 105, 239, 233, 239, + 254, 211, 185, 21, 237, 111, 239, 233, 239, 254, 211, 186, 236, 235, 21, + 237, 111, 239, 233, 239, 254, 211, 186, 236, 236, 148, 212, 155, 21, 237, + 111, 239, 233, 239, 254, 211, 186, 236, 236, 221, 192, 209, 21, 21, 237, + 110, 21, 237, 111, 248, 104, 219, 135, 240, 94, 21, 237, 111, 237, 45, + 21, 237, 111, 148, 212, 155, 21, 237, 111, 237, 46, 148, 212, 155, 21, + 237, 111, 148, 248, 117, 21, 237, 111, 148, 239, 151, 21, 237, 111, 211, + 194, 122, 148, 212, 155, 21, 237, 111, 211, 194, 246, 217, 21, 237, 111, + 211, 194, 246, 218, 148, 212, 155, 21, 237, 111, 211, 194, 246, 218, 148, + 212, 156, 248, 117, 21, 237, 111, 211, 194, 227, 85, 21, 237, 117, 21, + 237, 118, 148, 212, 155, 21, 237, 118, 221, 192, 209, 21, 21, 237, 118, + 148, 239, 151, 21, 237, 107, 245, 94, 21, 237, 106, 21, 237, 116, 220, 8, + 21, 237, 115, 21, 237, 116, 171, 148, 212, 155, 21, 237, 116, 148, 212, + 155, 21, 237, 116, 171, 221, 192, 209, 21, 21, 237, 116, 221, 192, 209, + 21, 21, 237, 116, 171, 148, 239, 151, 21, 237, 116, 148, 239, 151, 21, + 237, 114, 220, 8, 21, 237, 113, 21, 237, 119, 21, 237, 104, 21, 237, 105, + 148, 212, 155, 21, 237, 105, 221, 192, 209, 21, 21, 237, 105, 148, 239, + 151, 21, 237, 109, 220, 8, 21, 237, 109, 171, 148, 239, 151, 21, 237, + 108, 21, 237, 109, 212, 36, 21, 237, 109, 171, 148, 212, 155, 21, 237, + 109, 148, 212, 155, 21, 237, 109, 171, 221, 192, 209, 21, 21, 237, 109, + 221, 192, 209, 21, 21, 237, 109, 148, 212, 156, 208, 127, 231, 35, 21, + 237, 109, 148, 248, 104, 101, 215, 252, 21, 237, 121, 21, 128, 122, 101, + 215, 252, 21, 237, 120, 122, 101, 215, 252, 21, 237, 109, 122, 101, 215, + 252, 21, 237, 122, 122, 101, 215, 252, 21, 237, 109, 227, 85, 21, 128, + 122, 101, 215, 253, 248, 117, 21, 128, 122, 101, 215, 253, 245, 207, 21, + 237, 109, 122, 101, 215, 253, 245, 207, 21, 128, 227, 86, 242, 70, 21, + 128, 227, 86, 121, 215, 248, 211, 52, 21, 128, 227, 86, 121, 215, 248, + 245, 85, 21, 128, 227, 86, 121, 219, 220, 246, 60, 21, 128, 227, 86, 206, + 224, 21, 128, 148, 206, 248, 227, 86, 206, 224, 21, 237, 120, 227, 86, + 206, 224, 21, 237, 105, 227, 86, 206, 224, 21, 237, 122, 227, 86, 206, + 224, 21, 128, 227, 86, 216, 188, 229, 29, 21, 128, 227, 86, 248, 117, 21, + 128, 227, 86, 208, 128, 209, 21, 21, 128, 227, 86, 209, 21, 21, 237, 109, + 227, 86, 209, 21, 21, 128, 227, 86, 122, 209, 21, 21, 237, 109, 227, 86, + 122, 209, 21, 21, 237, 122, 227, 86, 122, 148, 122, 148, 219, 211, 21, + 237, 122, 227, 86, 122, 148, 122, 209, 21, 21, 128, 227, 86, 231, 35, 21, + 237, 120, 227, 86, 231, 35, 21, 237, 109, 227, 86, 231, 35, 21, 237, 122, + 227, 86, 231, 35, 21, 128, 122, 101, 227, 85, 21, 237, 120, 122, 101, + 227, 85, 21, 237, 109, 122, 101, 227, 85, 21, 237, 109, 215, 252, 21, + 237, 122, 122, 101, 227, 85, 21, 128, 122, 101, 245, 131, 227, 85, 21, + 237, 120, 122, 101, 245, 131, 227, 85, 21, 128, 215, 253, 242, 70, 21, + 237, 109, 215, 253, 121, 122, 148, 236, 116, 224, 148, 21, 237, 122, 215, + 253, 121, 101, 148, 122, 245, 130, 21, 128, 215, 253, 206, 224, 21, 128, + 215, 253, 216, 188, 229, 29, 21, 128, 215, 253, 227, 85, 21, 237, 120, + 215, 253, 227, 85, 21, 237, 105, 215, 253, 227, 85, 21, 237, 122, 215, + 253, 227, 85, 21, 128, 215, 253, 224, 148, 21, 128, 215, 253, 101, 245, + 207, 21, 128, 215, 253, 101, 216, 188, 229, 28, 21, 128, 215, 253, 231, + 35, 21, 128, 215, 253, 209, 21, 21, 237, 107, 215, 253, 209, 21, 21, 128, + 122, 215, 253, 227, 85, 21, 237, 120, 122, 215, 253, 227, 85, 21, 237, + 114, 122, 215, 253, 227, 86, 220, 31, 21, 237, 107, 122, 215, 253, 227, + 86, 219, 211, 21, 237, 107, 122, 215, 253, 227, 86, 231, 49, 21, 237, + 107, 122, 215, 253, 227, 86, 206, 247, 21, 237, 116, 122, 215, 253, 227, + 85, 21, 237, 109, 122, 215, 253, 227, 85, 21, 237, 122, 122, 215, 253, + 227, 86, 219, 211, 21, 237, 122, 122, 215, 253, 227, 85, 21, 128, 101, + 242, 70, 21, 237, 109, 224, 148, 21, 128, 101, 206, 224, 21, 237, 120, + 101, 206, 224, 21, 128, 101, 216, 188, 229, 29, 21, 128, 101, 112, 148, + 212, 155, 21, 237, 107, 101, 209, 21, 21, 128, 101, 148, 227, 85, 21, + 128, 101, 227, 85, 21, 128, 101, 215, 253, 227, 85, 21, 237, 120, 101, + 215, 253, 227, 85, 21, 237, 114, 101, 215, 253, 227, 86, 220, 31, 21, + 237, 116, 101, 215, 253, 227, 85, 21, 237, 109, 101, 215, 253, 227, 85, + 21, 237, 122, 101, 215, 253, 227, 86, 219, 211, 21, 237, 122, 101, 215, + 253, 227, 86, 231, 49, 21, 237, 122, 101, 215, 253, 227, 85, 21, 237, + 120, 101, 215, 253, 227, 86, 248, 117, 21, 237, 118, 101, 215, 253, 227, + 86, 245, 207, 21, 237, 118, 101, 215, 253, 227, 86, 245, 208, 212, 155, + 21, 237, 107, 101, 215, 253, 227, 86, 245, 208, 219, 211, 21, 237, 107, + 101, 215, 253, 227, 86, 245, 208, 231, 49, 21, 237, 107, 101, 215, 253, + 227, 86, 245, 207, 21, 237, 109, 122, 236, 235, 21, 128, 122, 148, 212, + 155, 21, 237, 109, 122, 148, 212, 155, 21, 128, 122, 148, 212, 156, 148, + 243, 227, 21, 128, 122, 148, 212, 156, 148, 245, 207, 21, 128, 122, 148, + 212, 156, 148, 248, 117, 21, 128, 122, 148, 212, 156, 122, 248, 117, 21, + 128, 122, 148, 212, 156, 247, 251, 248, 117, 21, 128, 122, 148, 212, 156, + 122, 236, 237, 21, 128, 122, 148, 239, 152, 122, 211, 52, 21, 128, 122, + 148, 239, 152, 122, 248, 117, 21, 128, 122, 148, 113, 21, 128, 122, 148, + 245, 94, 21, 128, 122, 148, 245, 88, 148, 231, 6, 21, 237, 118, 122, 148, + 245, 88, 148, 231, 6, 21, 128, 122, 148, 245, 88, 148, 206, 247, 21, 128, + 122, 148, 246, 61, 21, 237, 116, 122, 209, 21, 21, 237, 116, 122, 148, + 220, 8, 21, 237, 109, 122, 148, 220, 8, 21, 237, 109, 122, 148, 228, 7, + 21, 237, 109, 122, 209, 21, 21, 237, 109, 122, 148, 212, 36, 21, 237, + 122, 122, 148, 219, 211, 21, 237, 122, 122, 148, 231, 49, 21, 237, 122, + 122, 209, 21, 21, 128, 209, 21, 21, 128, 148, 237, 45, 21, 128, 148, 212, + 156, 243, 227, 21, 128, 148, 212, 156, 245, 207, 21, 128, 148, 212, 156, + 248, 117, 21, 128, 148, 239, 151, 21, 128, 148, 248, 104, 122, 224, 148, + 21, 128, 148, 248, 104, 101, 215, 252, 21, 128, 148, 248, 104, 215, 253, + 227, 85, 21, 128, 148, 206, 248, 120, 239, 253, 21, 128, 148, 115, 120, + 239, 253, 21, 128, 148, 206, 248, 126, 239, 253, 21, 128, 148, 206, 248, + 239, 147, 239, 253, 21, 128, 148, 115, 239, 147, 216, 188, 229, 28, 21, + 237, 112, 21, 128, 237, 45, 21, 208, 129, 212, 119, 21, 208, 129, 223, + 225, 21, 208, 129, 248, 103, 21, 238, 2, 212, 119, 21, 238, 2, 223, 225, + 21, 238, 2, 248, 103, 21, 211, 37, 212, 119, 21, 211, 37, 223, 225, 21, + 211, 37, 248, 103, 21, 247, 201, 212, 119, 21, 247, 201, 223, 225, 21, + 247, 201, 248, 103, 21, 215, 143, 212, 119, 21, 215, 143, 223, 225, 21, + 215, 143, 248, 103, 21, 210, 189, 210, 102, 21, 210, 189, 248, 103, 21, + 211, 173, 228, 8, 212, 119, 21, 211, 173, 5, 212, 119, 21, 211, 173, 228, + 8, 223, 225, 21, 211, 173, 5, 223, 225, 21, 211, 173, 213, 126, 21, 239, + 208, 228, 8, 212, 119, 21, 239, 208, 5, 212, 119, 21, 239, 208, 228, 8, + 223, 225, 21, 239, 208, 5, 223, 225, 21, 239, 208, 213, 126, 21, 211, + 173, 239, 208, 250, 252, 21, 224, 0, 112, 121, 228, 7, 21, 224, 0, 112, + 121, 212, 36, 21, 224, 0, 112, 213, 126, 21, 224, 0, 121, 213, 126, 21, + 224, 0, 112, 121, 250, 253, 228, 7, 21, 224, 0, 112, 121, 250, 253, 212, + 36, 21, 224, 0, 212, 156, 208, 173, 212, 156, 214, 190, 21, 223, 255, + 240, 3, 245, 197, 21, 224, 1, 240, 3, 245, 197, 21, 223, 255, 212, 120, + 211, 53, 212, 36, 21, 223, 255, 212, 120, 211, 53, 225, 9, 21, 223, 255, + 212, 120, 211, 53, 228, 7, 21, 223, 255, 212, 120, 211, 53, 228, 5, 21, + 223, 255, 212, 120, 203, 221, 239, 211, 21, 223, 255, 52, 211, 52, 21, + 223, 255, 52, 203, 221, 239, 211, 21, 223, 255, 52, 250, 252, 21, 223, + 255, 52, 250, 253, 203, 221, 239, 211, 21, 223, 255, 245, 130, 21, 223, + 255, 208, 70, 211, 53, 224, 3, 21, 223, 255, 208, 70, 203, 221, 239, 211, + 21, 223, 255, 208, 70, 250, 252, 21, 223, 255, 208, 70, 250, 253, 203, + 221, 239, 211, 21, 223, 255, 248, 121, 212, 36, 21, 223, 255, 248, 121, + 225, 9, 21, 223, 255, 248, 121, 228, 7, 21, 223, 255, 245, 166, 212, 36, + 21, 223, 255, 245, 166, 225, 9, 21, 223, 255, 245, 166, 228, 7, 21, 223, + 255, 245, 166, 215, 196, 21, 223, 255, 246, 169, 212, 36, 21, 223, 255, + 246, 169, 225, 9, 21, 223, 255, 246, 169, 228, 7, 21, 223, 255, 98, 212, + 36, 21, 223, 255, 98, 225, 9, 21, 223, 255, 98, 228, 7, 21, 223, 255, + 202, 30, 212, 36, 21, 223, 255, 202, 30, 225, 9, 21, 223, 255, 202, 30, + 228, 7, 21, 223, 255, 219, 30, 212, 36, 21, 223, 255, 219, 30, 225, 9, + 21, 223, 255, 219, 30, 228, 7, 21, 208, 99, 215, 194, 212, 119, 21, 208, + 99, 215, 194, 242, 78, 21, 208, 99, 215, 194, 250, 252, 21, 208, 99, 215, + 195, 212, 119, 21, 208, 99, 215, 195, 242, 78, 21, 208, 99, 215, 195, + 250, 252, 21, 208, 99, 213, 71, 21, 208, 99, 250, 107, 211, 202, 212, + 119, 21, 208, 99, 250, 107, 211, 202, 242, 78, 21, 208, 99, 250, 107, + 211, 202, 208, 69, 21, 224, 2, 250, 12, 212, 36, 21, 224, 2, 250, 12, + 225, 9, 21, 224, 2, 250, 12, 228, 7, 21, 224, 2, 250, 12, 228, 5, 21, + 224, 2, 208, 123, 212, 36, 21, 224, 2, 208, 123, 225, 9, 21, 224, 2, 208, + 123, 228, 7, 21, 224, 2, 208, 123, 228, 5, 21, 224, 2, 248, 104, 250, 12, + 212, 36, 21, 224, 2, 248, 104, 250, 12, 225, 9, 21, 224, 2, 248, 104, + 250, 12, 228, 7, 21, 224, 2, 248, 104, 250, 12, 228, 5, 21, 224, 2, 248, + 104, 208, 123, 212, 36, 21, 224, 2, 248, 104, 208, 123, 225, 9, 21, 224, + 2, 248, 104, 208, 123, 228, 7, 21, 224, 2, 248, 104, 208, 123, 228, 5, + 21, 224, 1, 212, 120, 211, 53, 212, 36, 21, 224, 1, 212, 120, 211, 53, + 225, 9, 21, 224, 1, 212, 120, 211, 53, 228, 7, 21, 224, 1, 212, 120, 211, + 53, 228, 5, 21, 224, 1, 212, 120, 203, 221, 239, 211, 21, 224, 1, 52, + 211, 52, 21, 224, 1, 52, 203, 221, 239, 211, 21, 224, 1, 52, 250, 252, + 21, 224, 1, 52, 250, 253, 203, 221, 239, 211, 21, 224, 1, 245, 130, 21, + 224, 1, 208, 70, 211, 53, 224, 3, 21, 224, 1, 208, 70, 203, 221, 239, + 211, 21, 224, 1, 208, 70, 250, 253, 224, 3, 21, 224, 1, 208, 70, 250, + 253, 203, 221, 239, 211, 21, 224, 1, 248, 120, 21, 224, 1, 245, 166, 212, + 36, 21, 224, 1, 245, 166, 225, 9, 21, 224, 1, 245, 166, 228, 7, 21, 224, + 1, 246, 168, 21, 224, 1, 98, 212, 36, 21, 224, 1, 98, 225, 9, 21, 224, 1, + 98, 228, 7, 21, 224, 1, 202, 30, 212, 36, 21, 224, 1, 202, 30, 225, 9, + 21, 224, 1, 202, 30, 228, 7, 21, 224, 1, 219, 30, 212, 36, 21, 224, 1, + 219, 30, 225, 9, 21, 224, 1, 219, 30, 228, 7, 21, 208, 100, 215, 195, + 212, 119, 21, 208, 100, 215, 195, 242, 78, 21, 208, 100, 215, 195, 250, + 252, 21, 208, 100, 215, 194, 212, 119, 21, 208, 100, 215, 194, 242, 78, + 21, 208, 100, 215, 194, 250, 252, 21, 208, 100, 213, 71, 21, 223, 255, + 245, 88, 217, 56, 212, 36, 21, 223, 255, 245, 88, 217, 56, 225, 9, 21, + 223, 255, 245, 88, 217, 56, 228, 7, 21, 223, 255, 245, 88, 217, 56, 228, + 5, 21, 223, 255, 245, 88, 237, 136, 212, 36, 21, 223, 255, 245, 88, 237, + 136, 225, 9, 21, 223, 255, 245, 88, 237, 136, 228, 7, 21, 223, 255, 245, + 88, 237, 136, 228, 5, 21, 223, 255, 245, 88, 209, 27, 246, 62, 212, 36, + 21, 223, 255, 245, 88, 209, 27, 246, 62, 225, 9, 21, 223, 255, 236, 14, + 212, 36, 21, 223, 255, 236, 14, 225, 9, 21, 223, 255, 236, 14, 228, 7, + 21, 223, 255, 227, 15, 212, 36, 21, 223, 255, 227, 15, 225, 9, 21, 223, + 255, 227, 15, 228, 7, 21, 223, 255, 227, 15, 5, 242, 78, 21, 223, 255, + 204, 76, 245, 88, 52, 212, 36, 21, 223, 255, 204, 76, 245, 88, 52, 225, + 9, 21, 223, 255, 204, 76, 245, 88, 52, 228, 7, 21, 223, 255, 204, 76, + 245, 88, 208, 70, 212, 36, 21, 223, 255, 204, 76, 245, 88, 208, 70, 225, + 9, 21, 223, 255, 204, 76, 245, 88, 208, 70, 228, 7, 21, 223, 255, 245, + 88, 209, 84, 211, 52, 21, 223, 255, 245, 86, 245, 131, 212, 36, 21, 223, + 255, 245, 86, 245, 131, 225, 9, 21, 215, 194, 212, 119, 21, 215, 194, + 242, 78, 21, 215, 194, 250, 254, 21, 223, 255, 213, 71, 21, 223, 255, + 245, 88, 236, 229, 239, 119, 204, 99, 21, 223, 255, 236, 14, 236, 229, + 239, 119, 204, 99, 21, 223, 255, 227, 15, 236, 229, 239, 119, 204, 99, + 21, 223, 255, 204, 76, 236, 229, 239, 119, 204, 99, 21, 215, 194, 212, + 120, 236, 229, 239, 119, 204, 99, 21, 215, 194, 52, 236, 229, 239, 119, + 204, 99, 21, 215, 194, 250, 253, 236, 229, 239, 119, 204, 99, 21, 223, + 255, 245, 88, 236, 229, 246, 149, 21, 223, 255, 236, 14, 236, 229, 246, + 149, 21, 223, 255, 227, 15, 236, 229, 246, 149, 21, 223, 255, 204, 76, + 236, 229, 246, 149, 21, 215, 194, 212, 120, 236, 229, 246, 149, 21, 215, + 194, 52, 236, 229, 246, 149, 21, 215, 194, 250, 253, 236, 229, 246, 149, + 21, 223, 255, 204, 76, 243, 228, 219, 52, 212, 36, 21, 223, 255, 204, 76, + 243, 228, 219, 52, 225, 9, 21, 223, 255, 204, 76, 243, 228, 219, 52, 228, + 7, 21, 224, 1, 245, 88, 236, 229, 246, 227, 212, 36, 21, 224, 1, 245, 88, + 236, 229, 246, 227, 228, 7, 21, 224, 1, 236, 14, 236, 229, 246, 227, 5, + 242, 78, 21, 224, 1, 236, 14, 236, 229, 246, 227, 228, 8, 242, 78, 21, + 224, 1, 236, 14, 236, 229, 246, 227, 5, 208, 69, 21, 224, 1, 236, 14, + 236, 229, 246, 227, 228, 8, 208, 69, 21, 224, 1, 227, 15, 236, 229, 246, + 227, 5, 212, 119, 21, 224, 1, 227, 15, 236, 229, 246, 227, 228, 8, 212, + 119, 21, 224, 1, 227, 15, 236, 229, 246, 227, 5, 242, 78, 21, 224, 1, + 227, 15, 236, 229, 246, 227, 228, 8, 242, 78, 21, 224, 1, 204, 76, 236, + 229, 246, 227, 212, 36, 21, 224, 1, 204, 76, 236, 229, 246, 227, 228, 7, + 21, 215, 195, 212, 120, 236, 229, 246, 226, 21, 215, 195, 52, 236, 229, + 246, 226, 21, 215, 195, 250, 253, 236, 229, 246, 226, 21, 224, 1, 245, + 88, 236, 229, 239, 205, 212, 36, 21, 224, 1, 245, 88, 236, 229, 239, 205, + 228, 7, 21, 224, 1, 236, 14, 236, 229, 239, 205, 5, 242, 78, 21, 224, 1, + 236, 14, 236, 229, 239, 205, 228, 8, 242, 78, 21, 224, 1, 236, 14, 236, + 229, 239, 205, 208, 70, 5, 208, 69, 21, 224, 1, 236, 14, 236, 229, 239, + 205, 208, 70, 228, 8, 208, 69, 21, 224, 1, 227, 15, 236, 229, 239, 205, + 5, 212, 119, 21, 224, 1, 227, 15, 236, 229, 239, 205, 228, 8, 212, 119, + 21, 224, 1, 227, 15, 236, 229, 239, 205, 5, 242, 78, 21, 224, 1, 227, 15, + 236, 229, 239, 205, 228, 8, 242, 78, 21, 224, 1, 204, 76, 236, 229, 239, + 205, 212, 36, 21, 224, 1, 204, 76, 236, 229, 239, 205, 228, 7, 21, 215, + 195, 212, 120, 236, 229, 239, 204, 21, 215, 195, 52, 236, 229, 239, 204, + 21, 215, 195, 250, 253, 236, 229, 239, 204, 21, 224, 1, 245, 88, 212, 36, + 21, 224, 1, 245, 88, 225, 9, 21, 224, 1, 245, 88, 228, 7, 21, 224, 1, + 245, 88, 228, 5, 21, 224, 1, 245, 88, 245, 237, 21, 224, 1, 236, 14, 212, + 36, 21, 224, 1, 227, 15, 212, 36, 21, 224, 1, 204, 76, 212, 24, 21, 224, + 1, 204, 76, 212, 36, 21, 224, 1, 204, 76, 228, 7, 21, 215, 195, 212, 119, + 21, 215, 195, 242, 78, 21, 215, 195, 250, 252, 21, 224, 1, 213, 72, 219, + 81, 21, 223, 255, 250, 107, 246, 62, 5, 212, 119, 21, 223, 255, 250, 107, + 246, 62, 225, 10, 212, 119, 21, 223, 255, 250, 107, 246, 62, 5, 242, 78, + 21, 223, 255, 250, 107, 246, 62, 225, 10, 242, 78, 21, 224, 1, 250, 107, + 246, 62, 236, 229, 204, 100, 5, 212, 119, 21, 224, 1, 250, 107, 246, 62, + 236, 229, 204, 100, 225, 10, 212, 119, 21, 224, 1, 250, 107, 246, 62, + 236, 229, 204, 100, 228, 8, 212, 119, 21, 224, 1, 250, 107, 246, 62, 236, + 229, 204, 100, 5, 242, 78, 21, 224, 1, 250, 107, 246, 62, 236, 229, 204, + 100, 225, 10, 242, 78, 21, 224, 1, 250, 107, 246, 62, 236, 229, 204, 100, + 228, 8, 242, 78, 21, 223, 255, 203, 221, 246, 62, 239, 119, 212, 119, 21, + 223, 255, 203, 221, 246, 62, 239, 119, 242, 78, 21, 224, 1, 203, 221, + 246, 62, 236, 229, 204, 100, 212, 119, 21, 224, 1, 203, 221, 246, 62, + 236, 229, 204, 100, 242, 78, 21, 223, 255, 240, 3, 246, 59, 212, 119, 21, + 223, 255, 240, 3, 246, 59, 242, 78, 21, 224, 1, 240, 3, 246, 59, 236, + 229, 204, 100, 212, 119, 21, 224, 1, 240, 3, 246, 59, 236, 229, 204, 100, + 242, 78, 21, 242, 4, 250, 95, 212, 36, 21, 242, 4, 250, 95, 228, 7, 21, + 242, 4, 240, 74, 21, 242, 4, 212, 39, 21, 242, 4, 209, 145, 21, 242, 4, + 216, 115, 21, 242, 4, 212, 125, 21, 242, 4, 212, 126, 250, 252, 21, 242, + 4, 240, 221, 219, 221, 208, 221, 21, 242, 4, 238, 12, 21, 237, 64, 21, + 237, 65, 216, 1, 21, 237, 65, 223, 255, 211, 52, 21, 237, 65, 223, 255, + 208, 224, 21, 237, 65, 224, 1, 211, 52, 21, 237, 65, 223, 255, 245, 87, + 21, 237, 65, 224, 1, 245, 87, 21, 237, 65, 224, 4, 246, 61, 21, 240, 103, + 243, 166, 218, 34, 221, 168, 239, 152, 208, 222, 21, 240, 103, 243, 166, + 218, 34, 221, 168, 112, 219, 245, 242, 70, 21, 240, 103, 243, 166, 218, + 34, 221, 168, 112, 219, 245, 121, 208, 222, 21, 240, 190, 211, 53, 206, + 224, 21, 240, 190, 211, 53, 222, 215, 21, 240, 190, 211, 53, 242, 70, 21, + 242, 57, 240, 190, 222, 216, 242, 70, 21, 242, 57, 240, 190, 121, 222, + 215, 21, 242, 57, 240, 190, 112, 222, 215, 21, 242, 57, 240, 190, 222, + 216, 206, 224, 21, 239, 164, 222, 215, 21, 239, 164, 245, 197, 21, 239, + 164, 203, 224, 21, 240, 185, 220, 8, 21, 240, 185, 211, 172, 21, 240, + 185, 246, 15, 21, 240, 192, 248, 34, 212, 119, 21, 240, 192, 248, 34, + 223, 225, 21, 240, 185, 162, 220, 8, 21, 240, 185, 204, 27, 220, 8, 21, + 240, 185, 162, 246, 15, 21, 240, 185, 204, 25, 224, 3, 21, 240, 192, 204, + 9, 21, 240, 186, 206, 224, 21, 240, 186, 242, 70, 21, 240, 186, 239, 191, + 21, 240, 188, 211, 52, 21, 240, 188, 211, 53, 242, 78, 21, 240, 188, 211, + 53, 250, 252, 21, 240, 189, 211, 52, 21, 240, 189, 211, 53, 242, 78, 21, + 240, 189, 211, 53, 250, 252, 21, 240, 188, 245, 85, 21, 240, 189, 245, + 85, 21, 240, 188, 246, 56, 21, 246, 164, 217, 182, 21, 246, 164, 222, + 215, 21, 246, 164, 210, 234, 21, 209, 146, 246, 164, 236, 244, 21, 209, + 146, 246, 164, 224, 148, 21, 209, 146, 246, 164, 227, 0, 21, 241, 181, + 21, 221, 168, 222, 215, 21, 221, 168, 245, 197, 21, 221, 168, 203, 222, + 21, 221, 168, 204, 22, 21, 251, 55, 248, 27, 219, 211, 21, 251, 55, 210, + 233, 231, 49, 21, 251, 55, 248, 29, 5, 215, 193, 21, 251, 55, 210, 235, + 5, 215, 193, 21, 247, 216, 231, 22, 21, 247, 216, 240, 210, 21, 224, 8, + 246, 16, 222, 215, 21, 224, 8, 246, 16, 239, 151, 21, 224, 8, 246, 16, + 245, 197, 21, 224, 8, 212, 31, 21, 224, 8, 212, 32, 203, 224, 21, 224, 8, + 212, 32, 220, 8, 21, 224, 8, 239, 115, 21, 224, 8, 239, 116, 203, 224, + 21, 224, 8, 239, 116, 220, 8, 21, 224, 8, 171, 246, 61, 21, 224, 8, 171, + 239, 151, 21, 224, 8, 171, 203, 224, 21, 224, 8, 171, 219, 204, 21, 224, + 8, 171, 219, 205, 203, 224, 21, 224, 8, 171, 219, 205, 203, 59, 21, 224, + 8, 171, 216, 143, 21, 224, 8, 171, 216, 144, 203, 224, 21, 224, 8, 171, + 216, 144, 203, 59, 21, 224, 8, 229, 66, 21, 224, 8, 229, 67, 239, 151, + 21, 224, 8, 229, 67, 203, 224, 21, 224, 8, 209, 145, 21, 224, 8, 209, + 146, 239, 151, 21, 224, 8, 209, 146, 210, 234, 21, 227, 99, 217, 239, + 208, 169, 21, 227, 101, 226, 251, 115, 206, 220, 21, 227, 101, 206, 221, + 115, 226, 250, 21, 224, 8, 245, 164, 21, 224, 8, 203, 223, 212, 119, 21, + 224, 8, 203, 223, 242, 78, 21, 208, 151, 211, 72, 219, 212, 240, 76, 21, + 208, 151, 227, 144, 227, 98, 21, 208, 151, 208, 211, 248, 104, 227, 98, + 21, 208, 151, 208, 211, 208, 127, 231, 7, 224, 7, 21, 208, 151, 231, 7, + 224, 8, 216, 115, 21, 208, 151, 223, 254, 251, 79, 246, 165, 21, 208, + 151, 246, 218, 211, 72, 219, 211, 21, 208, 151, 246, 218, 231, 7, 224, 7, + 21, 209, 172, 21, 209, 173, 224, 3, 21, 209, 173, 220, 32, 208, 150, 21, + 209, 173, 220, 32, 208, 151, 224, 3, 21, 209, 173, 220, 32, 227, 98, 21, + 209, 173, 220, 32, 227, 99, 224, 3, 21, 209, 173, 248, 50, 227, 98, 21, + 223, 255, 230, 165, 21, 224, 1, 230, 165, 21, 222, 237, 21, 237, 145, 21, + 240, 213, 21, 212, 211, 236, 234, 211, 203, 21, 212, 211, 236, 234, 218, + 33, 21, 204, 98, 212, 211, 236, 234, 224, 6, 21, 239, 203, 212, 211, 236, + 234, 224, 6, 21, 212, 211, 208, 223, 239, 120, 204, 104, 21, 208, 134, + 211, 53, 211, 41, 21, 208, 134, 245, 86, 248, 120, 21, 208, 135, 207, + 137, 21, 206, 221, 248, 18, 208, 223, 239, 120, 236, 234, 230, 95, 21, + 227, 126, 245, 238, 21, 227, 126, 227, 195, 21, 227, 126, 227, 194, 21, + 227, 126, 227, 193, 21, 227, 126, 227, 192, 21, 227, 126, 227, 191, 21, + 227, 126, 227, 190, 21, 227, 126, 227, 189, 21, 240, 2, 21, 227, 45, 211, + 228, 21, 227, 46, 211, 228, 21, 227, 47, 237, 41, 21, 227, 47, 204, 23, + 21, 227, 47, 244, 24, 21, 227, 47, 237, 65, 222, 237, 21, 227, 47, 208, + 136, 21, 227, 47, 227, 125, 243, 198, 21, 245, 233, 21, 239, 102, 211, + 61, 21, 213, 143, 21, 245, 242, 21, 219, 76, 21, 240, 10, 224, 66, 21, + 240, 10, 224, 65, 21, 240, 10, 224, 64, 21, 240, 10, 224, 63, 21, 240, + 10, 224, 62, 21, 215, 197, 224, 66, 21, 215, 197, 224, 65, 21, 215, 197, + 224, 64, 21, 215, 197, 224, 63, 21, 215, 197, 224, 62, 21, 215, 197, 224, + 61, 21, 215, 197, 224, 60, 21, 215, 197, 224, 59, 21, 215, 197, 224, 73, + 21, 215, 197, 224, 72, 21, 215, 197, 224, 71, 21, 215, 197, 224, 70, 21, + 215, 197, 224, 69, 21, 215, 197, 224, 68, 21, 215, 197, 224, 67, 73, 72, + 4, 226, 184, 229, 100, 73, 72, 4, 226, 180, 173, 73, 72, 4, 226, 178, + 228, 209, 73, 72, 4, 226, 54, 229, 198, 73, 72, 4, 226, 24, 229, 201, 73, + 72, 4, 226, 43, 229, 6, 73, 72, 4, 226, 71, 229, 26, 73, 72, 4, 225, 196, + 228, 203, 73, 72, 4, 226, 175, 204, 30, 73, 72, 4, 226, 173, 204, 111, + 73, 72, 4, 226, 171, 203, 217, 73, 72, 4, 225, 249, 204, 55, 73, 72, 4, + 226, 1, 204, 62, 73, 72, 4, 226, 5, 203, 244, 73, 72, 4, 226, 74, 204, 0, + 73, 72, 4, 225, 181, 203, 213, 73, 72, 4, 225, 232, 204, 53, 73, 72, 4, + 226, 58, 203, 201, 73, 72, 4, 226, 70, 203, 203, 73, 72, 4, 225, 236, + 203, 202, 73, 72, 4, 226, 169, 224, 110, 73, 72, 4, 226, 167, 225, 122, + 73, 72, 4, 226, 165, 223, 219, 73, 72, 4, 226, 60, 224, 240, 73, 72, 4, + 226, 25, 224, 54, 73, 72, 4, 225, 221, 223, 243, 73, 72, 4, 225, 186, + 223, 237, 73, 72, 4, 226, 163, 248, 86, 73, 72, 4, 226, 160, 249, 32, 73, + 72, 4, 226, 158, 247, 193, 73, 72, 4, 225, 225, 248, 150, 73, 72, 4, 226, + 22, 248, 162, 73, 72, 4, 226, 16, 248, 10, 73, 72, 4, 225, 237, 248, 23, + 73, 72, 4, 226, 148, 75, 73, 72, 4, 226, 146, 63, 73, 72, 4, 226, 144, + 68, 73, 72, 4, 225, 212, 241, 161, 73, 72, 4, 226, 19, 74, 73, 72, 4, + 225, 210, 220, 18, 73, 72, 4, 225, 228, 78, 73, 72, 4, 225, 238, 241, + 145, 73, 72, 4, 225, 244, 231, 49, 73, 72, 4, 225, 240, 231, 49, 73, 72, + 4, 225, 180, 250, 231, 73, 72, 4, 225, 197, 241, 92, 73, 72, 4, 226, 133, + 212, 162, 73, 72, 4, 226, 131, 215, 36, 73, 72, 4, 226, 129, 211, 10, 73, + 72, 4, 225, 213, 214, 165, 73, 72, 4, 226, 3, 214, 177, 73, 72, 4, 225, + 239, 211, 250, 73, 72, 4, 226, 40, 212, 13, 73, 72, 4, 225, 179, 212, + 161, 73, 72, 4, 226, 119, 227, 148, 73, 72, 4, 226, 117, 228, 113, 73, + 72, 4, 226, 115, 226, 239, 73, 72, 4, 226, 35, 227, 226, 73, 72, 4, 226, + 46, 227, 234, 73, 72, 4, 226, 65, 227, 18, 73, 72, 4, 225, 222, 227, 49, + 73, 72, 4, 226, 9, 163, 227, 234, 73, 72, 4, 226, 141, 243, 233, 73, 72, + 4, 226, 138, 244, 212, 73, 72, 4, 226, 135, 242, 42, 73, 72, 4, 226, 30, + 244, 61, 73, 72, 4, 225, 195, 243, 90, 73, 72, 4, 225, 194, 243, 113, 73, + 72, 4, 226, 127, 209, 2, 73, 72, 4, 226, 124, 210, 22, 73, 72, 4, 226, + 122, 207, 203, 73, 72, 4, 226, 28, 209, 176, 73, 72, 4, 226, 64, 209, + 187, 73, 72, 4, 226, 15, 208, 148, 73, 72, 4, 226, 50, 135, 73, 72, 4, + 226, 113, 230, 141, 73, 72, 4, 226, 110, 230, 181, 73, 72, 4, 226, 108, + 230, 82, 73, 72, 4, 225, 218, 230, 159, 73, 72, 4, 226, 6, 230, 161, 73, + 72, 4, 225, 215, 230, 91, 73, 72, 4, 226, 56, 230, 101, 73, 72, 4, 225, + 200, 163, 230, 101, 73, 72, 4, 226, 106, 203, 11, 73, 72, 4, 226, 103, + 198, 73, 72, 4, 226, 101, 202, 213, 73, 72, 4, 226, 10, 203, 49, 73, 72, + 4, 226, 39, 203, 52, 73, 72, 4, 225, 234, 202, 232, 73, 72, 4, 225, 254, + 202, 247, 73, 72, 4, 226, 97, 240, 26, 73, 72, 4, 226, 95, 240, 108, 73, + 72, 4, 226, 93, 239, 108, 73, 72, 4, 226, 41, 240, 53, 73, 72, 4, 226, + 44, 240, 60, 73, 72, 4, 225, 242, 239, 175, 73, 72, 4, 226, 31, 239, 186, + 73, 72, 4, 225, 178, 239, 107, 73, 72, 4, 226, 18, 240, 81, 73, 72, 4, + 226, 91, 222, 68, 73, 72, 4, 226, 89, 223, 83, 73, 72, 4, 226, 87, 221, + 40, 73, 72, 4, 226, 2, 222, 230, 73, 72, 4, 225, 206, 221, 185, 73, 72, + 4, 225, 199, 237, 3, 73, 72, 4, 226, 82, 152, 73, 72, 4, 225, 189, 236, + 26, 73, 72, 4, 226, 85, 237, 48, 73, 72, 4, 226, 23, 237, 67, 73, 72, 4, + 226, 80, 236, 117, 73, 72, 4, 225, 235, 236, 136, 73, 72, 4, 226, 36, + 237, 47, 73, 72, 4, 225, 247, 236, 110, 73, 72, 4, 226, 66, 236, 238, 73, + 72, 4, 225, 245, 237, 126, 73, 72, 4, 226, 32, 236, 13, 73, 72, 4, 226, + 67, 237, 33, 73, 72, 4, 225, 182, 236, 120, 73, 72, 4, 226, 73, 236, 25, + 73, 72, 4, 226, 29, 222, 168, 73, 72, 4, 226, 78, 222, 182, 73, 72, 4, + 226, 37, 222, 165, 73, 72, 4, 226, 4, 222, 176, 73, 72, 4, 225, 229, 222, + 177, 73, 72, 4, 225, 219, 222, 166, 73, 72, 4, 225, 255, 222, 167, 73, + 72, 4, 225, 216, 222, 181, 73, 72, 4, 225, 248, 222, 164, 73, 72, 4, 226, + 33, 163, 222, 177, 73, 72, 4, 226, 13, 163, 222, 166, 73, 72, 4, 225, + 192, 163, 222, 167, 73, 72, 4, 225, 220, 238, 81, 73, 72, 4, 226, 8, 239, + 8, 73, 72, 4, 225, 207, 237, 230, 73, 72, 4, 225, 185, 238, 182, 73, 72, + 4, 225, 209, 237, 216, 73, 72, 4, 225, 208, 237, 226, 73, 72, 4, 225, + 191, 222, 187, 73, 72, 4, 226, 62, 222, 124, 73, 72, 4, 225, 198, 222, + 113, 73, 72, 4, 226, 51, 218, 167, 73, 72, 4, 226, 20, 185, 73, 72, 4, + 226, 69, 217, 191, 73, 72, 4, 226, 38, 219, 23, 73, 72, 4, 226, 68, 219, + 34, 73, 72, 4, 226, 17, 218, 45, 73, 72, 4, 226, 53, 218, 69, 73, 72, 4, + 225, 230, 225, 39, 73, 72, 4, 226, 57, 225, 54, 73, 72, 4, 225, 253, 225, + 33, 73, 72, 4, 226, 72, 225, 46, 73, 72, 4, 225, 187, 225, 46, 73, 72, 4, + 226, 47, 225, 47, 73, 72, 4, 225, 203, 225, 34, 73, 72, 4, 225, 201, 225, + 35, 73, 72, 4, 225, 188, 225, 27, 73, 72, 4, 225, 214, 163, 225, 47, 73, + 72, 4, 226, 14, 163, 225, 34, 73, 72, 4, 225, 233, 163, 225, 35, 73, 72, + 4, 225, 243, 228, 236, 73, 72, 4, 226, 27, 228, 244, 73, 72, 4, 226, 45, + 228, 232, 73, 72, 4, 226, 76, 228, 239, 73, 72, 4, 226, 11, 228, 240, 73, + 72, 4, 226, 7, 228, 234, 73, 72, 4, 225, 217, 228, 235, 73, 72, 4, 225, + 251, 238, 199, 73, 72, 4, 226, 63, 238, 207, 73, 72, 4, 225, 227, 238, + 194, 73, 72, 4, 226, 26, 238, 203, 73, 72, 4, 226, 12, 238, 204, 73, 72, + 4, 226, 48, 238, 195, 73, 72, 4, 226, 49, 238, 197, 73, 72, 4, 225, 204, + 216, 220, 73, 72, 4, 225, 252, 223, 10, 73, 72, 4, 225, 246, 223, 25, 73, + 72, 4, 225, 250, 222, 248, 73, 72, 4, 225, 184, 223, 16, 73, 72, 4, 226, + 0, 223, 17, 73, 72, 4, 226, 52, 222, 253, 73, 72, 4, 226, 55, 223, 1, 73, + 72, 4, 225, 223, 222, 48, 73, 72, 4, 225, 183, 222, 18, 73, 72, 4, 225, + 226, 222, 39, 73, 72, 4, 225, 241, 222, 22, 73, 72, 4, 225, 193, 205, + 230, 73, 72, 4, 225, 190, 206, 86, 73, 72, 4, 225, 224, 204, 163, 73, 72, + 4, 225, 202, 206, 50, 73, 72, 4, 226, 34, 206, 55, 73, 72, 4, 225, 231, + 205, 176, 73, 72, 4, 226, 42, 205, 189, 73, 72, 4, 225, 211, 220, 242, + 73, 72, 4, 226, 61, 221, 5, 73, 72, 4, 225, 205, 220, 224, 73, 72, 4, + 226, 21, 220, 253, 73, 72, 4, 226, 59, 220, 231, 73, 72, 17, 105, 73, 72, + 17, 108, 73, 72, 17, 147, 73, 72, 17, 149, 73, 72, 17, 170, 73, 72, 17, + 195, 73, 72, 17, 213, 111, 73, 72, 17, 199, 73, 72, 17, 222, 63, 73, 72, + 39, 42, 209, 174, 73, 72, 39, 42, 209, 147, 73, 72, 39, 42, 236, 10, 73, + 72, 39, 42, 209, 34, 73, 72, 39, 42, 209, 153, 209, 34, 73, 72, 39, 42, + 236, 12, 209, 34, 73, 72, 39, 42, 224, 113, 10, 13, 251, 30, 10, 13, 248, + 138, 10, 13, 230, 158, 10, 13, 244, 184, 10, 13, 204, 70, 10, 13, 202, + 107, 10, 13, 237, 148, 10, 13, 209, 251, 10, 13, 203, 47, 10, 13, 230, + 22, 10, 13, 228, 28, 10, 13, 225, 5, 10, 13, 221, 178, 10, 13, 214, 161, + 10, 13, 251, 59, 10, 13, 240, 47, 10, 13, 215, 28, 10, 13, 217, 119, 10, + 13, 216, 122, 10, 13, 213, 39, 10, 13, 209, 169, 10, 13, 209, 88, 10, 13, + 229, 140, 10, 13, 209, 100, 10, 13, 244, 207, 10, 13, 202, 110, 10, 13, + 238, 114, 10, 13, 243, 84, 248, 138, 10, 13, 243, 84, 221, 178, 10, 13, + 243, 84, 240, 47, 10, 13, 243, 84, 217, 119, 10, 13, 81, 248, 138, 10, + 13, 81, 230, 158, 10, 13, 81, 237, 43, 10, 13, 81, 237, 148, 10, 13, 81, + 203, 47, 10, 13, 81, 230, 22, 10, 13, 81, 228, 28, 10, 13, 81, 225, 5, + 10, 13, 81, 221, 178, 10, 13, 81, 214, 161, 10, 13, 81, 251, 59, 10, 13, + 81, 240, 47, 10, 13, 81, 215, 28, 10, 13, 81, 217, 119, 10, 13, 81, 213, + 39, 10, 13, 81, 209, 169, 10, 13, 81, 209, 88, 10, 13, 81, 229, 140, 10, + 13, 81, 244, 207, 10, 13, 81, 238, 114, 10, 13, 209, 247, 230, 158, 10, + 13, 209, 247, 237, 148, 10, 13, 209, 247, 203, 47, 10, 13, 209, 247, 228, + 28, 10, 13, 209, 247, 221, 178, 10, 13, 209, 247, 214, 161, 10, 13, 209, + 247, 251, 59, 10, 13, 209, 247, 215, 28, 10, 13, 209, 247, 217, 119, 10, + 13, 209, 247, 213, 39, 10, 13, 209, 247, 229, 140, 10, 13, 209, 247, 244, + 207, 10, 13, 209, 247, 238, 114, 10, 13, 209, 247, 243, 84, 221, 178, 10, + 13, 209, 247, 243, 84, 217, 119, 10, 13, 211, 40, 248, 138, 10, 13, 211, + 40, 230, 158, 10, 13, 211, 40, 237, 43, 10, 13, 211, 40, 237, 148, 10, + 13, 211, 40, 209, 251, 10, 13, 211, 40, 203, 47, 10, 13, 211, 40, 230, + 22, 10, 13, 211, 40, 225, 5, 10, 13, 211, 40, 221, 178, 10, 13, 211, 40, + 214, 161, 10, 13, 211, 40, 251, 59, 10, 13, 211, 40, 240, 47, 10, 13, + 211, 40, 215, 28, 10, 13, 211, 40, 217, 119, 10, 13, 211, 40, 213, 39, + 10, 13, 211, 40, 209, 169, 10, 13, 211, 40, 209, 88, 10, 13, 211, 40, + 229, 140, 10, 13, 211, 40, 244, 207, 10, 13, 211, 40, 202, 110, 10, 13, + 211, 40, 238, 114, 10, 13, 211, 40, 243, 84, 248, 138, 10, 13, 211, 40, + 243, 84, 240, 47, 10, 13, 227, 13, 251, 30, 10, 13, 227, 13, 248, 138, + 10, 13, 227, 13, 230, 158, 10, 13, 227, 13, 244, 184, 10, 13, 227, 13, + 237, 43, 10, 13, 227, 13, 204, 70, 10, 13, 227, 13, 202, 107, 10, 13, + 227, 13, 237, 148, 10, 13, 227, 13, 209, 251, 10, 13, 227, 13, 203, 47, + 10, 13, 227, 13, 228, 28, 10, 13, 227, 13, 225, 5, 10, 13, 227, 13, 221, + 178, 10, 13, 227, 13, 214, 161, 10, 13, 227, 13, 251, 59, 10, 13, 227, + 13, 240, 47, 10, 13, 227, 13, 215, 28, 10, 13, 227, 13, 217, 119, 10, 13, + 227, 13, 216, 122, 10, 13, 227, 13, 213, 39, 10, 13, 227, 13, 209, 169, + 10, 13, 227, 13, 209, 88, 10, 13, 227, 13, 229, 140, 10, 13, 227, 13, + 209, 100, 10, 13, 227, 13, 244, 207, 10, 13, 227, 13, 202, 110, 10, 13, + 227, 13, 238, 114, 10, 13, 169, 248, 138, 10, 13, 169, 230, 158, 10, 13, + 169, 244, 184, 10, 13, 169, 204, 70, 10, 13, 169, 202, 107, 10, 13, 169, + 237, 148, 10, 13, 169, 209, 251, 10, 13, 169, 203, 47, 10, 13, 169, 228, + 28, 10, 13, 169, 225, 5, 10, 13, 169, 221, 178, 10, 13, 169, 214, 161, + 10, 13, 169, 251, 59, 10, 13, 169, 240, 47, 10, 13, 169, 215, 28, 10, 13, + 169, 217, 119, 10, 13, 169, 216, 122, 10, 13, 169, 213, 39, 10, 13, 169, + 209, 169, 10, 13, 169, 209, 88, 10, 13, 169, 229, 140, 10, 13, 169, 209, + 100, 10, 13, 169, 244, 207, 10, 13, 169, 202, 110, 10, 13, 169, 238, 114, + 10, 13, 219, 255, 83, 3, 151, 3, 209, 209, 10, 13, 219, 255, 151, 3, 244, + 184, 225, 142, 99, 241, 176, 204, 16, 225, 142, 99, 211, 238, 204, 16, + 225, 142, 99, 204, 46, 204, 16, 225, 142, 99, 153, 204, 16, 225, 142, 99, + 216, 138, 242, 61, 225, 142, 99, 237, 244, 242, 61, 225, 142, 99, 61, + 242, 61, 225, 142, 99, 118, 76, 246, 181, 225, 142, 99, 120, 76, 246, + 181, 225, 142, 99, 126, 76, 246, 181, 225, 142, 99, 239, 147, 76, 246, + 181, 225, 142, 99, 239, 233, 76, 246, 181, 225, 142, 99, 212, 88, 76, + 246, 181, 225, 142, 99, 213, 112, 76, 246, 181, 225, 142, 99, 241, 143, + 76, 246, 181, 225, 142, 99, 222, 64, 76, 246, 181, 225, 142, 99, 118, 76, + 248, 243, 225, 142, 99, 120, 76, 248, 243, 225, 142, 99, 126, 76, 248, + 243, 225, 142, 99, 239, 147, 76, 248, 243, 225, 142, 99, 239, 233, 76, + 248, 243, 225, 142, 99, 212, 88, 76, 248, 243, 225, 142, 99, 213, 112, + 76, 248, 243, 225, 142, 99, 241, 143, 76, 248, 243, 225, 142, 99, 222, + 64, 76, 248, 243, 225, 142, 99, 118, 76, 246, 58, 225, 142, 99, 120, 76, + 246, 58, 225, 142, 99, 126, 76, 246, 58, 225, 142, 99, 239, 147, 76, 246, + 58, 225, 142, 99, 239, 233, 76, 246, 58, 225, 142, 99, 212, 88, 76, 246, + 58, 225, 142, 99, 213, 112, 76, 246, 58, 225, 142, 99, 241, 143, 76, 246, + 58, 225, 142, 99, 222, 64, 76, 246, 58, 225, 142, 99, 218, 79, 225, 142, + 99, 219, 242, 225, 142, 99, 248, 244, 225, 142, 99, 246, 99, 225, 142, + 99, 211, 183, 225, 142, 99, 210, 216, 225, 142, 99, 250, 21, 225, 142, + 99, 204, 7, 225, 142, 99, 230, 94, 225, 142, 99, 249, 25, 161, 99, 236, + 106, 249, 25, 161, 99, 236, 104, 161, 99, 236, 103, 161, 99, 236, 102, + 161, 99, 236, 101, 161, 99, 236, 100, 161, 99, 236, 99, 161, 99, 236, 98, + 161, 99, 236, 97, 161, 99, 236, 96, 161, 99, 236, 95, 161, 99, 236, 94, + 161, 99, 236, 93, 161, 99, 236, 92, 161, 99, 236, 91, 161, 99, 236, 90, + 161, 99, 236, 89, 161, 99, 236, 88, 161, 99, 236, 87, 161, 99, 236, 86, + 161, 99, 236, 85, 161, 99, 236, 84, 161, 99, 236, 83, 161, 99, 236, 82, + 161, 99, 236, 81, 161, 99, 236, 80, 161, 99, 236, 79, 161, 99, 236, 78, + 161, 99, 236, 77, 161, 99, 236, 76, 161, 99, 236, 75, 161, 99, 236, 74, + 161, 99, 236, 73, 161, 99, 236, 72, 161, 99, 236, 71, 161, 99, 236, 70, + 161, 99, 236, 69, 161, 99, 236, 68, 161, 99, 236, 67, 161, 99, 236, 66, + 161, 99, 236, 65, 161, 99, 236, 64, 161, 99, 236, 63, 161, 99, 236, 62, + 161, 99, 236, 61, 161, 99, 236, 60, 161, 99, 236, 59, 161, 99, 236, 58, + 161, 99, 236, 57, 161, 99, 236, 56, 161, 99, 80, 249, 25, 161, 99, 206, + 37, 161, 99, 206, 36, 161, 99, 206, 35, 161, 99, 206, 34, 161, 99, 206, + 33, 161, 99, 206, 32, 161, 99, 206, 31, 161, 99, 206, 30, 161, 99, 206, + 29, 161, 99, 206, 28, 161, 99, 206, 27, 161, 99, 206, 26, 161, 99, 206, + 25, 161, 99, 206, 24, 161, 99, 206, 23, 161, 99, 206, 22, 161, 99, 206, + 21, 161, 99, 206, 20, 161, 99, 206, 19, 161, 99, 206, 18, 161, 99, 206, + 17, 161, 99, 206, 16, 161, 99, 206, 15, 161, 99, 206, 14, 161, 99, 206, + 13, 161, 99, 206, 12, 161, 99, 206, 11, 161, 99, 206, 10, 161, 99, 206, + 9, 161, 99, 206, 8, 161, 99, 206, 7, 161, 99, 206, 6, 161, 99, 206, 5, + 161, 99, 206, 4, 161, 99, 206, 3, 161, 99, 206, 2, 161, 99, 206, 1, 161, + 99, 206, 0, 161, 99, 205, 255, 161, 99, 205, 254, 161, 99, 205, 253, 161, + 99, 205, 252, 161, 99, 205, 251, 161, 99, 205, 250, 161, 99, 205, 249, + 161, 99, 205, 248, 161, 99, 205, 247, 161, 99, 205, 246, 161, 99, 205, + 245, 218, 88, 247, 38, 249, 25, 218, 88, 247, 38, 251, 132, 76, 211, 225, + 218, 88, 247, 38, 120, 76, 211, 225, 218, 88, 247, 38, 126, 76, 211, 225, + 218, 88, 247, 38, 239, 147, 76, 211, 225, 218, 88, 247, 38, 239, 233, 76, + 211, 225, 218, 88, 247, 38, 212, 88, 76, 211, 225, 218, 88, 247, 38, 213, + 112, 76, 211, 225, 218, 88, 247, 38, 241, 143, 76, 211, 225, 218, 88, + 247, 38, 222, 64, 76, 211, 225, 218, 88, 247, 38, 209, 153, 76, 211, 225, + 218, 88, 247, 38, 230, 179, 76, 211, 225, 218, 88, 247, 38, 229, 32, 76, + 211, 225, 218, 88, 247, 38, 217, 49, 76, 211, 225, 218, 88, 247, 38, 229, + 82, 76, 211, 225, 218, 88, 247, 38, 251, 132, 76, 237, 53, 218, 88, 247, + 38, 120, 76, 237, 53, 218, 88, 247, 38, 126, 76, 237, 53, 218, 88, 247, + 38, 239, 147, 76, 237, 53, 218, 88, 247, 38, 239, 233, 76, 237, 53, 218, + 88, 247, 38, 212, 88, 76, 237, 53, 218, 88, 247, 38, 213, 112, 76, 237, + 53, 218, 88, 247, 38, 241, 143, 76, 237, 53, 218, 88, 247, 38, 222, 64, + 76, 237, 53, 218, 88, 247, 38, 209, 153, 76, 237, 53, 218, 88, 247, 38, + 230, 179, 76, 237, 53, 218, 88, 247, 38, 229, 32, 76, 237, 53, 218, 88, + 247, 38, 217, 49, 76, 237, 53, 218, 88, 247, 38, 229, 82, 76, 237, 53, + 218, 88, 247, 38, 216, 138, 230, 94, 218, 88, 247, 38, 251, 132, 76, 243, + 220, 218, 88, 247, 38, 120, 76, 243, 220, 218, 88, 247, 38, 126, 76, 243, + 220, 218, 88, 247, 38, 239, 147, 76, 243, 220, 218, 88, 247, 38, 239, + 233, 76, 243, 220, 218, 88, 247, 38, 212, 88, 76, 243, 220, 218, 88, 247, + 38, 213, 112, 76, 243, 220, 218, 88, 247, 38, 241, 143, 76, 243, 220, + 218, 88, 247, 38, 222, 64, 76, 243, 220, 218, 88, 247, 38, 209, 153, 76, + 243, 220, 218, 88, 247, 38, 230, 179, 76, 243, 220, 218, 88, 247, 38, + 229, 32, 76, 243, 220, 218, 88, 247, 38, 217, 49, 76, 243, 220, 218, 88, + 247, 38, 229, 82, 76, 243, 220, 218, 88, 247, 38, 62, 230, 94, 218, 88, + 247, 38, 251, 132, 76, 246, 2, 218, 88, 247, 38, 120, 76, 246, 2, 218, + 88, 247, 38, 126, 76, 246, 2, 218, 88, 247, 38, 239, 147, 76, 246, 2, + 218, 88, 247, 38, 239, 233, 76, 246, 2, 218, 88, 247, 38, 212, 88, 76, + 246, 2, 218, 88, 247, 38, 213, 112, 76, 246, 2, 218, 88, 247, 38, 241, + 143, 76, 246, 2, 218, 88, 247, 38, 222, 64, 76, 246, 2, 218, 88, 247, 38, + 209, 153, 76, 246, 2, 218, 88, 247, 38, 230, 179, 76, 246, 2, 218, 88, + 247, 38, 229, 32, 76, 246, 2, 218, 88, 247, 38, 217, 49, 76, 246, 2, 218, + 88, 247, 38, 229, 82, 76, 246, 2, 218, 88, 247, 38, 61, 230, 94, 218, 88, + 247, 38, 239, 173, 218, 88, 247, 38, 208, 48, 218, 88, 247, 38, 208, 37, + 218, 88, 247, 38, 208, 34, 218, 88, 247, 38, 208, 33, 218, 88, 247, 38, + 208, 32, 218, 88, 247, 38, 208, 31, 218, 88, 247, 38, 208, 30, 218, 88, + 247, 38, 208, 29, 218, 88, 247, 38, 208, 28, 218, 88, 247, 38, 208, 47, + 218, 88, 247, 38, 208, 46, 218, 88, 247, 38, 208, 45, 218, 88, 247, 38, + 208, 44, 218, 88, 247, 38, 208, 43, 218, 88, 247, 38, 208, 42, 218, 88, + 247, 38, 208, 41, 218, 88, 247, 38, 208, 40, 218, 88, 247, 38, 208, 39, + 218, 88, 247, 38, 208, 38, 218, 88, 247, 38, 208, 36, 218, 88, 247, 38, + 208, 35, 17, 202, 85, 239, 102, 211, 61, 17, 202, 85, 245, 233, 17, 118, + 245, 233, 17, 120, 245, 233, 17, 126, 245, 233, 17, 239, 147, 245, 233, + 17, 239, 233, 245, 233, 17, 212, 88, 245, 233, 17, 213, 112, 245, 233, + 17, 241, 143, 245, 233, 17, 222, 64, 245, 233, 243, 174, 43, 41, 17, 202, + 84, 243, 174, 182, 43, 41, 17, 202, 84, 102, 8, 6, 1, 63, 102, 8, 6, 1, + 249, 255, 102, 8, 6, 1, 247, 125, 102, 8, 6, 1, 245, 51, 102, 8, 6, 1, + 74, 102, 8, 6, 1, 240, 174, 102, 8, 6, 1, 239, 75, 102, 8, 6, 1, 237, + 171, 102, 8, 6, 1, 75, 102, 8, 6, 1, 230, 184, 102, 8, 6, 1, 230, 54, + 102, 8, 6, 1, 159, 102, 8, 6, 1, 226, 185, 102, 8, 6, 1, 223, 163, 102, + 8, 6, 1, 78, 102, 8, 6, 1, 219, 184, 102, 8, 6, 1, 217, 134, 102, 8, 6, + 1, 146, 102, 8, 6, 1, 194, 102, 8, 6, 1, 210, 69, 102, 8, 6, 1, 68, 102, + 8, 6, 1, 206, 164, 102, 8, 6, 1, 204, 144, 102, 8, 6, 1, 203, 196, 102, + 8, 6, 1, 203, 124, 102, 8, 6, 1, 202, 159, 208, 133, 213, 33, 247, 226, + 8, 6, 1, 194, 43, 37, 8, 6, 1, 247, 125, 43, 37, 8, 6, 1, 146, 43, 246, + 239, 43, 203, 198, 103, 8, 6, 1, 63, 103, 8, 6, 1, 249, 255, 103, 8, 6, + 1, 247, 125, 103, 8, 6, 1, 245, 51, 103, 8, 6, 1, 74, 103, 8, 6, 1, 240, + 174, 103, 8, 6, 1, 239, 75, 103, 8, 6, 1, 237, 171, 103, 8, 6, 1, 75, + 103, 8, 6, 1, 230, 184, 103, 8, 6, 1, 230, 54, 103, 8, 6, 1, 159, 103, 8, + 6, 1, 226, 185, 103, 8, 6, 1, 223, 163, 103, 8, 6, 1, 78, 103, 8, 6, 1, + 219, 184, 103, 8, 6, 1, 217, 134, 103, 8, 6, 1, 146, 103, 8, 6, 1, 194, + 103, 8, 6, 1, 210, 69, 103, 8, 6, 1, 68, 103, 8, 6, 1, 206, 164, 103, 8, + 6, 1, 204, 144, 103, 8, 6, 1, 203, 196, 103, 8, 6, 1, 203, 124, 103, 8, + 6, 1, 202, 159, 103, 235, 255, 103, 223, 187, 103, 214, 179, 103, 211, + 167, 103, 218, 10, 103, 204, 63, 182, 43, 8, 6, 1, 63, 182, 43, 8, 6, 1, + 249, 255, 182, 43, 8, 6, 1, 247, 125, 182, 43, 8, 6, 1, 245, 51, 182, 43, + 8, 6, 1, 74, 182, 43, 8, 6, 1, 240, 174, 182, 43, 8, 6, 1, 239, 75, 182, + 43, 8, 6, 1, 237, 171, 182, 43, 8, 6, 1, 75, 182, 43, 8, 6, 1, 230, 184, + 182, 43, 8, 6, 1, 230, 54, 182, 43, 8, 6, 1, 159, 182, 43, 8, 6, 1, 226, + 185, 182, 43, 8, 6, 1, 223, 163, 182, 43, 8, 6, 1, 78, 182, 43, 8, 6, 1, + 219, 184, 182, 43, 8, 6, 1, 217, 134, 182, 43, 8, 6, 1, 146, 182, 43, 8, + 6, 1, 194, 182, 43, 8, 6, 1, 210, 69, 182, 43, 8, 6, 1, 68, 182, 43, 8, + 6, 1, 206, 164, 182, 43, 8, 6, 1, 204, 144, 182, 43, 8, 6, 1, 203, 196, + 182, 43, 8, 6, 1, 203, 124, 182, 43, 8, 6, 1, 202, 159, 216, 188, 225, + 26, 54, 216, 188, 225, 23, 54, 182, 103, 8, 6, 1, 63, 182, 103, 8, 6, 1, + 249, 255, 182, 103, 8, 6, 1, 247, 125, 182, 103, 8, 6, 1, 245, 51, 182, + 103, 8, 6, 1, 74, 182, 103, 8, 6, 1, 240, 174, 182, 103, 8, 6, 1, 239, + 75, 182, 103, 8, 6, 1, 237, 171, 182, 103, 8, 6, 1, 75, 182, 103, 8, 6, + 1, 230, 184, 182, 103, 8, 6, 1, 230, 54, 182, 103, 8, 6, 1, 159, 182, + 103, 8, 6, 1, 226, 185, 182, 103, 8, 6, 1, 223, 163, 182, 103, 8, 6, 1, + 78, 182, 103, 8, 6, 1, 219, 184, 182, 103, 8, 6, 1, 217, 134, 182, 103, + 8, 6, 1, 146, 182, 103, 8, 6, 1, 194, 182, 103, 8, 6, 1, 210, 69, 182, + 103, 8, 6, 1, 68, 182, 103, 8, 6, 1, 206, 164, 182, 103, 8, 6, 1, 204, + 144, 182, 103, 8, 6, 1, 203, 196, 182, 103, 8, 6, 1, 203, 124, 182, 103, + 8, 6, 1, 202, 159, 245, 128, 182, 103, 8, 6, 1, 219, 184, 182, 103, 235, + 164, 182, 103, 185, 182, 103, 215, 36, 182, 103, 251, 232, 182, 103, 204, + 63, 51, 243, 132, 103, 246, 42, 103, 245, 176, 103, 239, 129, 103, 235, + 155, 103, 222, 213, 103, 222, 205, 103, 220, 51, 103, 211, 245, 103, 112, + 3, 240, 212, 82, 103, 205, 166, 216, 130, 231, 32, 16, 1, 63, 216, 130, + 231, 32, 16, 1, 249, 255, 216, 130, 231, 32, 16, 1, 247, 125, 216, 130, + 231, 32, 16, 1, 245, 51, 216, 130, 231, 32, 16, 1, 74, 216, 130, 231, 32, + 16, 1, 240, 174, 216, 130, 231, 32, 16, 1, 239, 75, 216, 130, 231, 32, + 16, 1, 237, 171, 216, 130, 231, 32, 16, 1, 75, 216, 130, 231, 32, 16, 1, + 230, 184, 216, 130, 231, 32, 16, 1, 230, 54, 216, 130, 231, 32, 16, 1, + 159, 216, 130, 231, 32, 16, 1, 226, 185, 216, 130, 231, 32, 16, 1, 223, + 163, 216, 130, 231, 32, 16, 1, 78, 216, 130, 231, 32, 16, 1, 219, 184, + 216, 130, 231, 32, 16, 1, 217, 134, 216, 130, 231, 32, 16, 1, 146, 216, + 130, 231, 32, 16, 1, 194, 216, 130, 231, 32, 16, 1, 210, 69, 216, 130, + 231, 32, 16, 1, 68, 216, 130, 231, 32, 16, 1, 206, 164, 216, 130, 231, + 32, 16, 1, 204, 144, 216, 130, 231, 32, 16, 1, 203, 196, 216, 130, 231, + 32, 16, 1, 203, 124, 216, 130, 231, 32, 16, 1, 202, 159, 51, 172, 236, + 130, 103, 67, 229, 14, 103, 67, 215, 36, 103, 12, 206, 239, 233, 100, + 103, 12, 206, 239, 233, 104, 103, 12, 206, 239, 233, 112, 103, 67, 244, + 75, 103, 12, 206, 239, 233, 119, 103, 12, 206, 239, 233, 106, 103, 12, + 206, 239, 233, 78, 103, 12, 206, 239, 233, 105, 103, 12, 206, 239, 233, + 118, 103, 12, 206, 239, 233, 92, 103, 12, 206, 239, 233, 85, 103, 12, + 206, 239, 233, 94, 103, 12, 206, 239, 233, 115, 103, 12, 206, 239, 233, + 101, 103, 12, 206, 239, 233, 117, 103, 12, 206, 239, 233, 93, 103, 12, + 206, 239, 233, 116, 103, 12, 206, 239, 233, 79, 103, 12, 206, 239, 233, + 84, 103, 12, 206, 239, 233, 77, 103, 12, 206, 239, 233, 107, 103, 12, + 206, 239, 233, 109, 103, 12, 206, 239, 233, 87, 103, 12, 206, 239, 233, + 98, 103, 12, 206, 239, 233, 96, 103, 12, 206, 239, 233, 122, 103, 12, + 206, 239, 233, 121, 103, 12, 206, 239, 233, 75, 103, 12, 206, 239, 233, + 102, 103, 12, 206, 239, 233, 120, 103, 12, 206, 239, 233, 111, 103, 12, + 206, 239, 233, 97, 103, 12, 206, 239, 233, 76, 103, 12, 206, 239, 233, + 99, 103, 12, 206, 239, 233, 81, 103, 12, 206, 239, 233, 80, 103, 12, 206, + 239, 233, 110, 103, 12, 206, 239, 233, 88, 103, 12, 206, 239, 233, 90, + 103, 12, 206, 239, 233, 91, 103, 12, 206, 239, 233, 83, 103, 12, 206, + 239, 233, 114, 103, 12, 206, 239, 233, 108, 208, 133, 213, 33, 247, 226, + 12, 206, 239, 233, 89, 208, 133, 213, 33, 247, 226, 12, 206, 239, 233, + 121, 208, 133, 213, 33, 247, 226, 12, 206, 239, 233, 119, 208, 133, 213, + 33, 247, 226, 12, 206, 239, 233, 103, 208, 133, 213, 33, 247, 226, 12, + 206, 239, 233, 86, 208, 133, 213, 33, 247, 226, 12, 206, 239, 233, 99, + 208, 133, 213, 33, 247, 226, 12, 206, 239, 233, 82, 208, 133, 213, 33, + 247, 226, 12, 206, 239, 233, 113, 208, 133, 213, 33, 247, 226, 12, 206, + 239, 233, 95, 43, 189, 251, 111, 43, 189, 251, 136, 245, 62, 239, 184, + 246, 16, 207, 3, 222, 80, 3, 211, 91, 210, 209, 115, 224, 11, 210, 208, + 246, 46, 250, 50, 242, 17, 210, 207, 115, 247, 182, 216, 189, 247, 208, + 250, 50, 222, 79, 204, 81, 204, 75, 205, 181, 224, 118, 204, 65, 241, + 180, 238, 46, 240, 228, 241, 180, 238, 46, 250, 238, 241, 180, 238, 46, + 250, 68, 238, 46, 3, 224, 231, 222, 214, 224, 30, 97, 204, 67, 245, 139, + 224, 30, 97, 239, 245, 217, 56, 224, 30, 97, 204, 67, 238, 77, 224, 30, + 97, 239, 102, 224, 30, 97, 204, 94, 238, 77, 224, 30, 97, 228, 1, 217, + 56, 224, 30, 97, 204, 94, 245, 139, 224, 30, 97, 245, 139, 224, 29, 222, + 214, 224, 30, 3, 240, 102, 239, 245, 217, 56, 224, 30, 3, 240, 102, 228, + 1, 217, 56, 224, 30, 3, 240, 102, 239, 102, 224, 30, 3, 240, 102, 210, + 215, 3, 240, 102, 238, 44, 211, 94, 212, 233, 211, 94, 209, 80, 62, 242, + 49, 61, 210, 214, 61, 210, 215, 3, 5, 246, 7, 61, 210, 215, 248, 135, + 246, 7, 61, 210, 215, 248, 135, 246, 8, 3, 216, 190, 246, 8, 3, 216, 190, + 246, 8, 3, 212, 19, 246, 8, 3, 227, 131, 246, 8, 3, 208, 137, 239, 185, + 204, 17, 248, 27, 240, 102, 236, 47, 243, 102, 210, 2, 247, 158, 246, + 148, 214, 163, 240, 222, 208, 95, 244, 69, 208, 95, 219, 135, 208, 95, + 247, 85, 236, 47, 218, 248, 207, 193, 246, 152, 248, 30, 215, 202, 237, + 2, 210, 212, 248, 30, 241, 184, 76, 225, 131, 241, 184, 76, 216, 52, 237, + 28, 239, 147, 227, 230, 246, 6, 225, 104, 227, 229, 240, 85, 227, 229, + 227, 230, 239, 192, 231, 50, 204, 16, 223, 196, 208, 165, 250, 33, 238, + 5, 224, 249, 204, 79, 209, 225, 227, 199, 248, 239, 218, 120, 216, 138, + 250, 157, 237, 244, 250, 157, 219, 29, 219, 31, 246, 153, 211, 45, 237, + 132, 212, 51, 76, 218, 100, 225, 16, 220, 32, 248, 11, 218, 21, 227, 210, + 216, 53, 245, 145, 216, 53, 248, 251, 245, 179, 216, 52, 245, 89, 25, + 216, 52, 211, 79, 247, 237, 211, 224, 247, 219, 239, 128, 239, 124, 215, + 223, 210, 165, 218, 23, 244, 163, 220, 75, 210, 183, 239, 125, 212, 204, + 239, 244, 247, 79, 3, 210, 158, 244, 13, 212, 7, 235, 163, 245, 143, 213, + 51, 235, 162, 235, 163, 245, 143, 242, 73, 245, 178, 246, 114, 142, 247, + 51, 227, 32, 245, 81, 236, 119, 218, 25, 212, 217, 248, 116, 247, 233, + 218, 26, 76, 239, 174, 245, 177, 239, 163, 25, 229, 33, 209, 184, 204, 3, + 237, 102, 215, 13, 247, 250, 25, 245, 99, 204, 13, 238, 49, 245, 251, + 238, 49, 208, 51, 242, 54, 248, 146, 223, 235, 246, 23, 248, 146, 223, + 234, 249, 28, 247, 249, 239, 163, 25, 229, 34, 3, 218, 89, 247, 250, 3, + 218, 38, 245, 167, 218, 40, 216, 54, 203, 227, 217, 242, 248, 58, 247, + 78, 230, 178, 246, 106, 208, 95, 240, 68, 246, 105, 239, 247, 239, 248, + 211, 222, 248, 250, 219, 66, 218, 39, 245, 215, 248, 251, 209, 229, 208, + 95, 245, 128, 239, 219, 218, 121, 244, 66, 230, 169, 243, 96, 247, 27, + 211, 44, 204, 17, 246, 130, 224, 30, 205, 217, 246, 204, 214, 196, 214, + 223, 238, 11, 247, 48, 237, 56, 3, 208, 211, 220, 32, 209, 93, 227, 222, + 247, 243, 76, 239, 196, 224, 119, 225, 13, 216, 110, 216, 54, 31, 229, + 150, 3, 230, 177, 211, 15, 224, 152, 227, 167, 212, 49, 245, 184, 229, + 30, 248, 158, 250, 78, 31, 221, 155, 248, 158, 244, 19, 31, 221, 155, + 240, 6, 239, 133, 251, 114, 208, 252, 247, 28, 236, 49, 240, 35, 204, 36, + 215, 213, 245, 252, 239, 239, 218, 54, 25, 239, 243, 224, 152, 223, 253, + 247, 65, 246, 65, 237, 60, 250, 85, 219, 138, 208, 145, 237, 83, 246, 51, + 209, 144, 208, 253, 246, 37, 248, 20, 218, 241, 250, 84, 205, 226, 238, + 238, 243, 167, 236, 230, 212, 42, 225, 172, 248, 69, 238, 239, 243, 213, + 247, 236, 239, 198, 218, 88, 247, 36, 31, 221, 160, 223, 226, 31, 221, + 155, 214, 209, 237, 214, 31, 229, 149, 208, 27, 205, 206, 31, 214, 189, + 215, 126, 212, 246, 3, 214, 226, 209, 149, 216, 209, 25, 248, 251, 212, + 67, 25, 212, 67, 248, 4, 248, 213, 25, 236, 112, 246, 154, 239, 225, 212, + 18, 215, 127, 210, 188, 211, 189, 225, 13, 208, 52, 236, 50, 216, 210, + 250, 239, 239, 171, 215, 139, 239, 171, 210, 160, 204, 51, 227, 136, 238, + 30, 216, 211, 224, 18, 216, 211, 247, 39, 245, 136, 248, 210, 25, 248, + 251, 205, 180, 240, 25, 236, 133, 211, 73, 25, 248, 251, 235, 163, 236, + 133, 211, 73, 25, 217, 184, 210, 9, 209, 149, 219, 156, 25, 248, 251, + 212, 20, 247, 44, 224, 12, 247, 63, 248, 161, 3, 207, 3, 247, 184, 245, + 198, 236, 39, 247, 182, 246, 45, 244, 23, 236, 39, 247, 183, 246, 35, + 247, 183, 244, 15, 244, 16, 230, 208, 223, 67, 219, 72, 211, 104, 236, + 39, 247, 183, 236, 39, 3, 238, 222, 220, 67, 247, 183, 230, 169, 218, 31, + 220, 66, 240, 227, 218, 31, 220, 66, 236, 48, 248, 235, 250, 23, 209, + 157, 225, 172, 236, 44, 227, 1, 236, 44, 245, 182, 211, 57, 214, 195, + 244, 26, 211, 57, 240, 91, 230, 189, 228, 13, 230, 169, 247, 19, 240, + 227, 247, 19, 61, 219, 3, 62, 219, 3, 204, 73, 61, 239, 225, 204, 73, 62, + 239, 225, 215, 201, 62, 215, 201, 228, 105, 249, 12, 216, 209, 25, 212, + 183, 247, 241, 25, 47, 250, 234, 241, 98, 65, 239, 234, 207, 119, 241, + 98, 65, 239, 234, 207, 116, 241, 98, 65, 239, 234, 207, 114, 241, 98, 65, + 239, 234, 207, 112, 241, 98, 65, 239, 234, 207, 110, 216, 172, 224, 9, + 219, 193, 204, 81, 247, 188, 245, 149, 208, 245, 227, 183, 216, 212, 247, + 17, 242, 61, 245, 135, 204, 39, 212, 26, 212, 24, 236, 49, 216, 184, 238, + 35, 213, 37, 224, 48, 215, 205, 246, 140, 243, 102, 218, 131, 248, 21, + 241, 114, 220, 78, 211, 202, 213, 32, 247, 187, 250, 198, 236, 118, 228, + 98, 248, 144, 239, 243, 208, 51, 239, 243, 248, 28, 207, 171, 237, 81, + 246, 141, 249, 28, 246, 141, 239, 118, 249, 28, 246, 141, 248, 60, 219, + 5, 229, 24, 218, 44, 242, 51, 247, 67, 249, 17, 247, 67, 243, 95, 224, + 10, 240, 102, 245, 150, 240, 102, 208, 246, 240, 102, 216, 213, 240, 102, + 247, 18, 240, 102, 242, 62, 240, 102, 211, 187, 204, 39, 236, 50, 240, + 102, 224, 49, 240, 102, 243, 103, 240, 102, 218, 132, 240, 102, 239, 122, + 240, 102, 237, 129, 240, 102, 203, 253, 240, 102, 248, 156, 240, 102, + 219, 120, 240, 102, 218, 132, 221, 167, 219, 46, 217, 230, 246, 125, 240, + 184, 240, 191, 241, 183, 221, 167, 224, 7, 208, 150, 61, 112, 218, 59, + 249, 23, 231, 35, 61, 121, 218, 59, 249, 23, 231, 35, 61, 49, 218, 59, + 249, 23, 231, 35, 61, 50, 218, 59, 249, 23, 231, 35, 239, 237, 237, 124, + 54, 204, 73, 237, 124, 54, 220, 52, 237, 124, 54, 209, 20, 112, 54, 209, + 20, 121, 54, 246, 36, 237, 100, 54, 171, 237, 100, 54, 245, 122, 203, + 249, 237, 83, 240, 187, 222, 236, 210, 68, 230, 160, 242, 56, 229, 85, + 248, 71, 203, 249, 246, 9, 217, 165, 237, 103, 218, 22, 225, 112, 212, + 239, 250, 46, 212, 239, 236, 243, 212, 239, 203, 249, 214, 240, 203, 249, + 248, 3, 239, 169, 247, 150, 231, 50, 212, 136, 247, 149, 231, 50, 212, + 136, 247, 232, 238, 60, 225, 122, 203, 250, 240, 82, 225, 123, 25, 203, + 251, 236, 127, 237, 99, 120, 224, 241, 236, 127, 237, 99, 120, 203, 248, + 236, 127, 237, 99, 218, 51, 220, 65, 203, 251, 3, 247, 168, 241, 181, + 247, 209, 3, 206, 46, 218, 230, 3, 248, 32, 237, 145, 225, 123, 3, 237, + 227, 218, 168, 225, 108, 225, 123, 3, 207, 180, 220, 44, 225, 122, 220, + 44, 203, 250, 249, 27, 245, 199, 203, 234, 217, 235, 230, 169, 220, 61, + 230, 169, 238, 34, 238, 89, 249, 28, 250, 221, 240, 196, 251, 20, 251, + 21, 224, 39, 231, 55, 212, 62, 231, 25, 244, 12, 218, 229, 237, 221, 244, + 167, 227, 97, 223, 91, 218, 50, 240, 103, 225, 74, 237, 144, 248, 229, + 218, 53, 210, 88, 218, 124, 229, 67, 82, 227, 1, 227, 174, 215, 252, 238, + 180, 211, 63, 229, 66, 247, 242, 245, 152, 3, 237, 55, 204, 58, 248, 154, + 237, 55, 247, 203, 237, 55, 120, 237, 53, 211, 220, 237, 55, 237, 237, + 237, 55, 237, 56, 3, 47, 248, 26, 237, 55, 237, 244, 237, 55, 203, 45, + 237, 55, 217, 166, 237, 55, 237, 56, 3, 216, 54, 216, 67, 237, 53, 237, + 56, 244, 66, 243, 222, 213, 63, 3, 34, 70, 231, 6, 241, 117, 157, 247, + 180, 250, 220, 97, 248, 12, 212, 54, 97, 245, 244, 97, 211, 196, 210, + 167, 97, 242, 49, 244, 145, 97, 218, 125, 76, 218, 45, 239, 210, 248, 83, + 243, 133, 97, 211, 212, 248, 250, 209, 38, 248, 250, 61, 239, 197, 236, + 12, 218, 57, 97, 224, 53, 249, 10, 245, 92, 240, 214, 79, 243, 97, 54, + 245, 141, 247, 37, 248, 234, 3, 203, 43, 54, 248, 234, 3, 243, 97, 54, + 248, 234, 3, 240, 230, 54, 248, 234, 3, 218, 20, 54, 224, 53, 3, 204, 11, + 246, 178, 3, 177, 208, 91, 25, 203, 43, 54, 214, 174, 218, 228, 245, 220, + 247, 207, 224, 108, 239, 202, 243, 154, 219, 248, 243, 159, 242, 12, 240, + 11, 239, 182, 171, 240, 11, 239, 182, 219, 154, 3, 245, 95, 219, 154, + 240, 95, 206, 224, 247, 72, 209, 183, 247, 72, 247, 38, 231, 35, 246, + 178, 3, 177, 208, 90, 246, 178, 3, 183, 208, 90, 248, 231, 246, 177, 246, + 22, 217, 161, 215, 191, 217, 161, 219, 94, 211, 53, 215, 133, 208, 82, + 215, 133, 248, 8, 210, 7, 227, 227, 221, 158, 221, 159, 3, 244, 65, 245, + 151, 246, 16, 248, 9, 171, 248, 9, 237, 244, 248, 9, 248, 26, 248, 9, + 219, 243, 248, 9, 248, 6, 223, 85, 249, 14, 214, 182, 224, 242, 209, 162, + 216, 152, 219, 152, 240, 65, 225, 172, 214, 222, 250, 195, 217, 185, 251, + 119, 227, 3, 246, 162, 224, 254, 219, 210, 208, 98, 231, 46, 208, 98, + 219, 161, 241, 236, 97, 231, 43, 241, 57, 241, 58, 3, 183, 53, 55, 246, + 16, 225, 137, 3, 226, 249, 239, 225, 246, 16, 225, 137, 3, 216, 188, 239, + 225, 171, 225, 137, 3, 216, 188, 239, 225, 171, 225, 137, 3, 226, 249, + 239, 225, 218, 28, 218, 29, 236, 53, 222, 210, 224, 80, 218, 176, 224, + 80, 218, 177, 3, 86, 53, 250, 50, 227, 222, 205, 229, 224, 79, 224, 80, + 218, 177, 220, 68, 221, 192, 224, 80, 218, 175, 250, 196, 3, 248, 220, + 247, 65, 247, 66, 3, 239, 218, 205, 226, 247, 65, 209, 159, 216, 204, + 205, 225, 240, 6, 217, 217, 218, 35, 211, 74, 217, 254, 248, 160, 207, + 138, 86, 250, 91, 246, 18, 86, 25, 96, 171, 246, 62, 250, 91, 246, 18, + 86, 25, 96, 171, 246, 62, 250, 92, 3, 43, 118, 219, 199, 246, 18, 183, + 25, 177, 171, 246, 62, 250, 91, 250, 194, 183, 25, 177, 171, 246, 62, + 250, 91, 124, 247, 206, 97, 138, 247, 206, 97, 211, 217, 3, 247, 58, 95, + 211, 216, 211, 217, 3, 118, 211, 241, 204, 75, 211, 217, 3, 126, 211, + 241, 204, 74, 248, 203, 241, 117, 218, 81, 227, 217, 225, 149, 238, 49, + 216, 11, 225, 149, 238, 49, 227, 43, 3, 231, 17, 219, 9, 246, 16, 227, + 43, 3, 229, 151, 229, 151, 227, 42, 171, 227, 42, 248, 128, 248, 129, 3, + 247, 58, 95, 248, 7, 227, 105, 97, 216, 205, 247, 145, 249, 26, 3, 96, + 53, 55, 241, 84, 3, 96, 53, 55, 220, 32, 3, 240, 212, 131, 3, 49, 50, 53, + 55, 211, 249, 3, 86, 53, 55, 208, 145, 3, 177, 53, 55, 221, 192, 118, + 206, 248, 241, 141, 97, 229, 148, 209, 152, 231, 11, 16, 35, 8, 6, 227, + 173, 231, 11, 16, 35, 8, 5, 227, 173, 231, 11, 16, 35, 221, 45, 231, 11, + 16, 35, 210, 102, 231, 11, 16, 35, 8, 227, 173, 239, 249, 241, 117, 208, + 140, 203, 225, 237, 130, 221, 28, 25, 248, 14, 236, 134, 218, 106, 224, + 151, 209, 160, 245, 112, 248, 251, 212, 88, 218, 61, 211, 95, 3, 101, + 243, 85, 230, 169, 16, 35, 248, 141, 208, 80, 241, 100, 62, 51, 247, 145, + 61, 51, 247, 145, 228, 8, 216, 138, 246, 61, 228, 8, 248, 26, 246, 61, + 228, 8, 219, 243, 243, 221, 228, 8, 248, 26, 243, 221, 5, 219, 243, 243, + 221, 5, 248, 26, 243, 221, 206, 223, 216, 138, 208, 85, 242, 69, 216, + 138, 208, 85, 206, 223, 5, 216, 138, 208, 85, 242, 69, 5, 216, 138, 208, + 85, 226, 251, 50, 213, 77, 61, 246, 61, 206, 221, 50, 213, 77, 61, 246, + 61, 43, 245, 131, 218, 48, 245, 131, 218, 49, 3, 237, 136, 56, 245, 131, + 218, 48, 221, 162, 49, 213, 146, 3, 126, 243, 83, 221, 162, 50, 213, 146, + 3, 126, 243, 83, 16, 35, 225, 87, 246, 184, 61, 8, 245, 130, 79, 8, 245, + 130, 246, 222, 245, 130, 220, 40, 97, 242, 72, 76, 219, 32, 230, 39, 224, + 22, 210, 96, 224, 237, 3, 222, 64, 247, 222, 247, 238, 76, 235, 222, 246, + 20, 240, 103, 118, 220, 83, 246, 20, 240, 103, 120, 220, 83, 246, 20, + 240, 103, 126, 220, 83, 246, 20, 240, 103, 239, 147, 220, 83, 246, 20, + 240, 103, 239, 233, 220, 83, 246, 20, 240, 103, 212, 88, 220, 83, 246, + 20, 240, 103, 213, 112, 220, 83, 246, 20, 240, 103, 241, 143, 220, 83, + 246, 20, 240, 103, 222, 64, 220, 83, 246, 20, 240, 103, 209, 153, 220, + 83, 246, 20, 240, 103, 241, 113, 220, 83, 246, 20, 240, 103, 207, 155, + 220, 83, 246, 20, 240, 103, 220, 27, 246, 20, 240, 103, 207, 132, 246, + 20, 240, 103, 209, 26, 246, 20, 240, 103, 239, 143, 246, 20, 240, 103, + 239, 231, 246, 20, 240, 103, 212, 84, 246, 20, 240, 103, 213, 110, 246, + 20, 240, 103, 241, 142, 246, 20, 240, 103, 222, 62, 246, 20, 240, 103, + 209, 151, 246, 20, 240, 103, 241, 111, 246, 20, 240, 103, 207, 153, 50, + 211, 216, 50, 211, 217, 3, 118, 211, 241, 204, 75, 50, 211, 217, 3, 126, + 211, 241, 204, 74, 247, 175, 247, 176, 3, 211, 241, 204, 74, 215, 251, + 248, 128, 248, 9, 247, 56, 225, 109, 246, 19, 62, 212, 63, 25, 245, 129, + 221, 192, 218, 112, 236, 126, 225, 123, 231, 50, 247, 152, 210, 228, 227, + 166, 212, 52, 219, 245, 211, 178, 244, 150, 210, 210, 211, 205, 211, 206, + 204, 59, 230, 83, 49, 237, 124, 209, 162, 216, 152, 209, 162, 216, 153, + 3, 219, 153, 50, 237, 124, 209, 162, 216, 152, 61, 208, 126, 209, 161, + 62, 208, 126, 209, 161, 209, 162, 220, 32, 208, 145, 76, 224, 76, 246, + 40, 224, 80, 218, 176, 249, 26, 76, 241, 57, 211, 100, 241, 57, 241, 58, + 3, 227, 131, 239, 189, 241, 57, 219, 10, 115, 211, 100, 241, 57, 227, + 104, 219, 93, 62, 217, 161, 226, 251, 49, 219, 8, 226, 251, 49, 248, 246, + 219, 9, 226, 251, 49, 239, 149, 219, 9, 226, 251, 49, 219, 147, 226, 251, + 49, 245, 144, 49, 203, 220, 237, 123, 207, 174, 220, 52, 237, 124, 54, + 216, 188, 237, 124, 3, 239, 254, 211, 195, 216, 73, 216, 188, 237, 124, + 3, 239, 254, 211, 195, 216, 73, 209, 20, 112, 54, 216, 73, 209, 20, 121, + 54, 216, 73, 205, 228, 237, 123, 216, 73, 237, 124, 3, 101, 240, 3, 240, + 201, 216, 188, 237, 124, 3, 219, 71, 248, 104, 101, 25, 215, 253, 239, + 253, 61, 121, 218, 59, 49, 237, 124, 231, 35, 212, 154, 61, 49, 218, 59, + 231, 35, 212, 154, 61, 50, 218, 59, 231, 35, 212, 154, 62, 49, 218, 59, + 231, 35, 212, 154, 62, 50, 218, 59, 231, 35, 62, 49, 218, 59, 249, 23, + 231, 35, 62, 50, 218, 59, 249, 23, 231, 35, 212, 154, 61, 112, 218, 59, + 231, 35, 212, 154, 61, 121, 218, 59, 231, 35, 212, 154, 62, 112, 218, 59, + 231, 35, 212, 154, 62, 121, 218, 59, 231, 35, 62, 112, 218, 59, 249, 23, + 231, 35, 62, 121, 218, 59, 249, 23, 231, 35, 244, 11, 245, 220, 229, 150, + 25, 224, 9, 126, 222, 218, 245, 219, 217, 231, 218, 67, 247, 74, 62, 237, + 91, 213, 33, 239, 202, 243, 154, 61, 237, 91, 213, 33, 239, 202, 243, + 154, 212, 7, 213, 33, 239, 202, 243, 154, 209, 221, 247, 22, 204, 6, 229, + 149, 118, 247, 146, 224, 9, 120, 247, 146, 224, 9, 126, 247, 146, 224, 9, + 208, 117, 38, 218, 228, 245, 220, 237, 91, 243, 154, 214, 184, 217, 232, + 235, 156, 240, 65, 235, 156, 219, 248, 243, 160, 235, 156, 243, 107, 3, + 209, 112, 243, 107, 3, 209, 113, 25, 218, 161, 243, 107, 3, 218, 161, + 239, 135, 3, 218, 161, 239, 135, 3, 208, 225, 239, 135, 3, 250, 232, 203, + 196, 62, 239, 182, 239, 182, 171, 239, 182, 247, 38, 122, 243, 140, 247, + 38, 240, 11, 247, 233, 240, 11, 247, 87, 241, 94, 221, 160, 241, 94, 221, + 161, 219, 153, 241, 94, 221, 161, 219, 159, 221, 160, 221, 161, 219, 153, + 221, 161, 219, 159, 241, 94, 243, 106, 241, 94, 219, 153, 241, 94, 219, + 151, 243, 106, 219, 153, 219, 151, 204, 85, 211, 202, 221, 161, 219, 159, + 211, 202, 247, 73, 219, 159, 244, 11, 204, 15, 224, 105, 225, 64, 219, + 201, 246, 18, 50, 25, 49, 213, 146, 250, 91, 247, 58, 203, 196, 231, 41, + 239, 176, 212, 72, 97, 244, 64, 239, 176, 212, 72, 97, 245, 221, 38, 229, + 151, 215, 214, 222, 210, 219, 154, 3, 43, 209, 112, 211, 65, 246, 177, + 244, 196, 229, 33, 227, 98, 211, 215, 237, 65, 231, 50, 212, 136, 126, + 216, 163, 55, 126, 216, 163, 56, 126, 216, 163, 227, 222, 126, 216, 163, + 216, 16, 49, 211, 212, 247, 192, 50, 211, 212, 247, 192, 120, 211, 212, + 247, 191, 126, 211, 212, 247, 191, 49, 209, 38, 247, 192, 50, 209, 38, + 247, 192, 49, 250, 220, 247, 192, 50, 250, 220, 247, 192, 224, 34, 247, + 192, 227, 132, 224, 34, 247, 192, 227, 132, 224, 33, 248, 248, 98, 3, + 248, 247, 248, 248, 132, 203, 196, 248, 248, 98, 3, 132, 203, 196, 248, + 248, 26, 132, 203, 196, 248, 248, 98, 3, 26, 132, 203, 196, 157, 246, + 169, 82, 248, 248, 98, 3, 26, 246, 168, 203, 233, 225, 106, 224, 14, 239, + 103, 208, 167, 208, 122, 211, 86, 76, 227, 146, 212, 137, 76, 230, 170, + 223, 251, 237, 241, 240, 102, 237, 241, 240, 103, 3, 212, 30, 240, 184, + 240, 103, 3, 209, 179, 76, 230, 85, 212, 30, 240, 103, 3, 171, 224, 7, + 212, 30, 240, 103, 3, 171, 224, 8, 25, 212, 30, 240, 184, 212, 30, 240, + 103, 3, 171, 224, 8, 25, 245, 246, 210, 166, 212, 30, 240, 103, 3, 171, + 224, 8, 25, 208, 243, 240, 184, 212, 30, 240, 103, 3, 237, 135, 212, 30, + 240, 103, 3, 236, 52, 204, 8, 240, 102, 212, 30, 240, 103, 3, 212, 30, + 240, 184, 240, 103, 214, 214, 244, 45, 239, 174, 216, 113, 240, 102, 212, + 30, 240, 103, 3, 237, 54, 240, 184, 212, 30, 240, 103, 3, 210, 210, 212, + 29, 240, 102, 222, 216, 240, 102, 240, 203, 240, 102, 206, 253, 240, 102, + 240, 103, 3, 245, 246, 210, 166, 219, 1, 240, 102, 245, 212, 240, 102, + 245, 213, 240, 102, 229, 65, 240, 102, 240, 103, 209, 23, 34, 229, 66, + 229, 65, 240, 103, 3, 212, 30, 240, 184, 229, 65, 240, 103, 3, 246, 16, + 240, 184, 240, 103, 3, 211, 16, 208, 150, 240, 103, 3, 211, 16, 208, 151, + 25, 204, 8, 240, 191, 240, 103, 3, 211, 16, 208, 151, 25, 208, 243, 240, + 184, 243, 161, 240, 102, 203, 232, 240, 102, 250, 214, 240, 102, 218, 19, + 240, 102, 245, 114, 240, 102, 218, 232, 240, 102, 240, 103, 3, 227, 17, + 76, 208, 62, 243, 161, 247, 148, 216, 113, 240, 102, 239, 114, 240, 103, + 3, 171, 224, 7, 250, 212, 240, 102, 240, 58, 240, 102, 204, 60, 240, 102, + 212, 53, 240, 102, 208, 205, 240, 102, 237, 242, 240, 102, 227, 4, 245, + 114, 240, 102, 240, 103, 3, 171, 224, 7, 236, 2, 240, 102, 240, 103, 3, + 171, 224, 8, 25, 245, 246, 210, 166, 240, 103, 214, 186, 231, 50, 240, + 59, 250, 56, 240, 102, 239, 194, 240, 102, 212, 54, 240, 102, 243, 133, + 240, 102, 240, 103, 204, 3, 224, 7, 240, 103, 3, 225, 12, 225, 76, 237, + 241, 247, 18, 240, 103, 3, 212, 30, 240, 184, 247, 18, 240, 103, 3, 209, + 179, 76, 230, 85, 212, 30, 247, 18, 240, 103, 3, 171, 224, 7, 212, 30, + 247, 18, 240, 103, 3, 237, 54, 240, 184, 247, 18, 240, 103, 3, 203, 218, + 212, 31, 229, 65, 247, 18, 240, 103, 3, 246, 16, 240, 184, 218, 19, 247, + 18, 240, 102, 245, 114, 247, 18, 240, 102, 204, 60, 247, 18, 240, 102, + 212, 47, 239, 114, 240, 102, 212, 47, 212, 30, 240, 102, 206, 218, 240, + 102, 240, 103, 3, 215, 212, 240, 184, 240, 103, 3, 221, 192, 238, 27, + 238, 160, 240, 103, 3, 220, 52, 238, 160, 218, 230, 247, 239, 244, 59, + 214, 164, 224, 48, 237, 57, 224, 48, 211, 218, 224, 48, 237, 93, 218, + 230, 216, 187, 118, 237, 123, 218, 230, 216, 187, 247, 251, 237, 100, + 231, 50, 246, 224, 218, 230, 239, 113, 218, 230, 3, 218, 19, 240, 102, + 218, 230, 3, 239, 183, 237, 99, 153, 204, 46, 218, 59, 227, 229, 211, + 238, 204, 46, 218, 59, 227, 229, 153, 241, 176, 218, 59, 227, 229, 211, + 238, 241, 176, 218, 59, 227, 229, 207, 174, 153, 204, 46, 218, 59, 227, + 229, 207, 174, 211, 238, 204, 46, 218, 59, 227, 229, 207, 174, 153, 241, + 176, 218, 59, 227, 229, 207, 174, 211, 238, 241, 176, 218, 59, 227, 229, + 153, 204, 46, 218, 59, 205, 212, 227, 229, 211, 238, 204, 46, 218, 59, + 205, 212, 227, 229, 153, 241, 176, 218, 59, 205, 212, 227, 229, 211, 238, + 241, 176, 218, 59, 205, 212, 227, 229, 79, 153, 204, 46, 218, 59, 205, + 212, 227, 229, 79, 211, 238, 204, 46, 218, 59, 205, 212, 227, 229, 79, + 153, 241, 176, 218, 59, 205, 212, 227, 229, 79, 211, 238, 241, 176, 218, + 59, 205, 212, 227, 229, 153, 204, 46, 218, 59, 247, 189, 211, 238, 204, + 46, 218, 59, 247, 189, 153, 241, 176, 218, 59, 247, 189, 211, 238, 241, + 176, 218, 59, 247, 189, 79, 153, 204, 46, 218, 59, 247, 189, 79, 211, + 238, 204, 46, 218, 59, 247, 189, 79, 153, 241, 176, 218, 59, 247, 189, + 79, 211, 238, 241, 176, 218, 59, 247, 189, 236, 125, 217, 40, 51, 219, + 233, 236, 125, 217, 40, 51, 219, 234, 231, 50, 62, 211, 177, 212, 2, 217, + 40, 51, 219, 233, 212, 2, 217, 40, 51, 219, 234, 231, 50, 62, 211, 177, + 96, 215, 218, 177, 215, 218, 86, 215, 218, 183, 215, 218, 132, 32, 240, + 251, 219, 233, 79, 132, 32, 240, 251, 219, 233, 32, 171, 240, 251, 219, + 233, 79, 32, 171, 240, 251, 219, 233, 79, 250, 236, 219, 233, 210, 169, + 250, 236, 219, 233, 41, 79, 52, 207, 174, 245, 234, 217, 31, 131, 219, + 233, 41, 79, 52, 245, 234, 217, 31, 131, 219, 233, 41, 79, 124, 52, 245, + 234, 217, 31, 131, 219, 233, 79, 230, 248, 219, 233, 41, 230, 248, 219, + 233, 79, 41, 230, 248, 219, 233, 205, 242, 79, 212, 0, 205, 242, 79, 216, + 74, 212, 0, 246, 167, 248, 20, 216, 74, 246, 167, 248, 20, 215, 218, 237, + 38, 211, 81, 227, 40, 216, 193, 247, 39, 236, 240, 208, 110, 236, 240, + 208, 111, 3, 247, 178, 221, 167, 208, 110, 224, 213, 157, 216, 194, 211, + 87, 208, 108, 208, 109, 247, 39, 247, 153, 220, 29, 247, 153, 208, 59, + 247, 154, 211, 61, 224, 109, 250, 240, 239, 250, 241, 77, 218, 51, 247, + 39, 220, 29, 218, 51, 247, 39, 209, 197, 220, 29, 209, 197, 250, 22, 220, + 29, 250, 22, 216, 145, 206, 47, 244, 41, 208, 50, 250, 86, 227, 8, 208, + 116, 224, 42, 224, 13, 216, 192, 210, 182, 216, 192, 224, 13, 247, 86, + 251, 95, 208, 107, 212, 251, 215, 188, 211, 210, 236, 106, 208, 114, 227, + 134, 80, 208, 114, 227, 134, 245, 199, 54, 218, 51, 247, 24, 216, 67, + 227, 134, 208, 82, 239, 226, 220, 32, 218, 30, 243, 88, 221, 192, 241, + 63, 54, 212, 28, 97, 221, 192, 212, 28, 97, 217, 160, 227, 87, 231, 50, + 230, 198, 218, 97, 97, 243, 114, 221, 166, 227, 87, 97, 218, 24, 204, 81, + 97, 221, 182, 204, 81, 97, 248, 82, 221, 192, 248, 81, 248, 80, 224, 13, + 248, 80, 219, 25, 221, 192, 219, 24, 246, 132, 245, 123, 224, 236, 97, + 203, 247, 97, 216, 83, 249, 28, 97, 208, 168, 204, 81, 246, 13, 212, 209, + 248, 206, 248, 204, 219, 57, 245, 183, 245, 79, 249, 7, 246, 41, 49, 226, + 229, 208, 86, 3, 215, 189, 245, 164, 217, 220, 54, 43, 231, 25, 211, 239, + 247, 231, 97, 238, 59, 97, 245, 157, 25, 228, 18, 212, 54, 251, 135, 212, + 231, 249, 6, 248, 127, 248, 128, 248, 151, 218, 97, 76, 203, 231, 237, + 131, 25, 203, 225, 213, 8, 220, 56, 242, 46, 224, 17, 216, 193, 208, 118, + 224, 19, 248, 19, 206, 223, 224, 119, 251, 52, 206, 223, 251, 52, 206, + 223, 5, 251, 52, 5, 251, 52, 221, 171, 251, 52, 251, 53, 244, 25, 251, + 53, 250, 97, 214, 221, 220, 29, 239, 250, 241, 77, 243, 211, 227, 40, + 219, 60, 212, 251, 136, 16, 35, 217, 36, 136, 16, 35, 251, 54, 136, 16, + 35, 239, 249, 136, 16, 35, 241, 179, 136, 16, 35, 204, 80, 136, 16, 35, + 250, 146, 136, 16, 35, 250, 147, 216, 132, 136, 16, 35, 250, 147, 216, + 131, 136, 16, 35, 250, 147, 205, 195, 136, 16, 35, 250, 147, 205, 194, + 136, 16, 35, 205, 209, 136, 16, 35, 205, 208, 136, 16, 35, 205, 207, 136, + 16, 35, 210, 221, 136, 16, 35, 218, 184, 210, 221, 136, 16, 35, 62, 210, + 221, 136, 16, 35, 224, 235, 210, 252, 136, 16, 35, 224, 235, 210, 251, + 136, 16, 35, 224, 235, 210, 250, 136, 16, 35, 246, 64, 136, 16, 35, 215, + 1, 136, 16, 35, 222, 51, 136, 16, 35, 205, 193, 136, 16, 35, 205, 192, + 136, 16, 35, 215, 219, 215, 1, 136, 16, 35, 215, 219, 215, 0, 136, 16, + 35, 238, 31, 136, 16, 35, 212, 133, 136, 16, 35, 230, 221, 219, 239, 136, + 16, 35, 230, 221, 219, 238, 136, 16, 35, 245, 134, 76, 230, 220, 136, 16, + 35, 216, 128, 76, 230, 220, 136, 16, 35, 245, 174, 219, 239, 136, 16, 35, + 230, 219, 219, 239, 136, 16, 35, 210, 253, 76, 245, 173, 136, 16, 35, + 245, 134, 76, 245, 173, 136, 16, 35, 245, 134, 76, 245, 172, 136, 16, 35, + 245, 174, 250, 188, 136, 16, 35, 215, 2, 76, 245, 174, 250, 188, 136, 16, + 35, 210, 253, 76, 215, 2, 76, 245, 173, 136, 16, 35, 206, 42, 136, 16, + 35, 208, 218, 219, 239, 136, 16, 35, 227, 233, 219, 239, 136, 16, 35, + 250, 187, 219, 239, 136, 16, 35, 210, 253, 76, 250, 186, 136, 16, 35, + 215, 2, 76, 250, 186, 136, 16, 35, 210, 253, 76, 215, 2, 76, 250, 186, + 136, 16, 35, 205, 210, 76, 250, 186, 136, 16, 35, 216, 128, 76, 250, 186, + 136, 16, 35, 216, 128, 76, 250, 185, 136, 16, 35, 216, 127, 136, 16, 35, + 216, 126, 136, 16, 35, 216, 125, 136, 16, 35, 216, 124, 136, 16, 35, 251, + 17, 136, 16, 35, 251, 16, 136, 16, 35, 225, 97, 136, 16, 35, 215, 7, 136, + 16, 35, 250, 90, 136, 16, 35, 216, 155, 136, 16, 35, 216, 154, 136, 16, + 35, 250, 25, 136, 16, 35, 248, 52, 219, 239, 136, 16, 35, 209, 216, 136, + 16, 35, 209, 215, 136, 16, 35, 217, 42, 227, 123, 136, 16, 35, 248, 0, + 136, 16, 35, 247, 255, 136, 16, 35, 247, 254, 136, 16, 35, 250, 249, 136, + 16, 35, 220, 55, 136, 16, 35, 211, 198, 136, 16, 35, 208, 216, 136, 16, + 35, 237, 210, 136, 16, 35, 204, 68, 136, 16, 35, 218, 18, 136, 16, 35, + 247, 70, 136, 16, 35, 207, 166, 136, 16, 35, 247, 41, 224, 23, 136, 16, + 35, 214, 199, 76, 230, 87, 136, 16, 35, 247, 83, 136, 16, 35, 208, 79, + 136, 16, 35, 211, 92, 208, 79, 136, 16, 35, 227, 39, 136, 16, 35, 212, + 11, 136, 16, 35, 206, 202, 136, 16, 35, 236, 50, 242, 27, 136, 16, 35, + 250, 70, 136, 16, 35, 218, 26, 250, 70, 136, 16, 35, 247, 210, 136, 16, + 35, 218, 17, 247, 210, 136, 16, 35, 250, 246, 136, 16, 35, 211, 48, 210, + 202, 211, 47, 136, 16, 35, 211, 48, 210, 202, 211, 46, 136, 16, 35, 210, + 249, 136, 16, 35, 217, 247, 136, 16, 35, 243, 150, 136, 16, 35, 243, 152, + 136, 16, 35, 243, 151, 136, 16, 35, 217, 169, 136, 16, 35, 217, 158, 136, + 16, 35, 245, 121, 136, 16, 35, 245, 120, 136, 16, 35, 245, 119, 136, 16, + 35, 245, 118, 136, 16, 35, 245, 117, 136, 16, 35, 251, 29, 136, 16, 35, + 248, 207, 76, 225, 81, 136, 16, 35, 248, 207, 76, 206, 74, 136, 16, 35, + 216, 81, 136, 16, 35, 236, 42, 136, 16, 35, 222, 79, 136, 16, 35, 244, + 132, 136, 16, 35, 224, 37, 136, 16, 35, 162, 242, 59, 136, 16, 35, 162, + 219, 214, 62, 227, 217, 230, 204, 50, 208, 85, 62, 206, 223, 230, 204, + 50, 208, 85, 62, 216, 11, 230, 204, 50, 208, 85, 62, 242, 69, 230, 204, + 50, 208, 85, 62, 212, 47, 5, 246, 61, 225, 10, 26, 61, 246, 61, 26, 61, + 246, 61, 79, 61, 246, 61, 205, 242, 79, 61, 246, 61, 240, 195, 79, 61, + 246, 61, 61, 246, 62, 245, 195, 62, 5, 246, 61, 215, 191, 209, 217, 62, + 208, 213, 211, 177, 62, 212, 47, 5, 211, 177, 157, 61, 211, 177, 225, 10, + 61, 211, 177, 26, 61, 211, 177, 79, 61, 211, 177, 205, 242, 79, 61, 211, + 177, 240, 195, 79, 61, 211, 177, 61, 51, 245, 195, 62, 205, 242, 5, 211, + 177, 61, 51, 245, 195, 62, 225, 10, 211, 177, 51, 209, 217, 62, 208, 213, + 243, 221, 62, 205, 242, 5, 243, 221, 62, 225, 10, 5, 243, 221, 61, 243, + 222, 245, 195, 62, 205, 242, 5, 243, 221, 61, 243, 222, 245, 195, 62, + 225, 10, 243, 221, 243, 222, 209, 217, 62, 208, 213, 226, 246, 62, 205, + 242, 5, 226, 246, 62, 225, 10, 5, 226, 246, 61, 226, 247, 245, 195, 62, + 5, 226, 246, 209, 63, 30, 245, 130, 157, 30, 245, 130, 225, 10, 30, 245, + 130, 26, 30, 245, 130, 205, 242, 26, 30, 245, 130, 205, 242, 79, 30, 245, + 130, 240, 195, 79, 30, 245, 130, 209, 63, 214, 254, 157, 214, 254, 225, + 10, 214, 254, 26, 214, 254, 79, 214, 254, 205, 242, 79, 214, 254, 240, + 195, 79, 214, 254, 157, 239, 233, 211, 191, 250, 59, 225, 10, 239, 233, + 211, 191, 250, 59, 26, 239, 233, 211, 191, 250, 59, 79, 239, 233, 211, + 191, 250, 59, 205, 242, 79, 239, 233, 211, 191, 250, 59, 240, 195, 79, + 239, 233, 211, 191, 250, 59, 157, 212, 88, 211, 191, 250, 59, 225, 10, + 212, 88, 211, 191, 250, 59, 26, 212, 88, 211, 191, 250, 59, 79, 212, 88, + 211, 191, 250, 59, 205, 242, 79, 212, 88, 211, 191, 250, 59, 240, 195, + 79, 212, 88, 211, 191, 250, 59, 157, 241, 143, 211, 191, 250, 59, 225, + 10, 241, 143, 211, 191, 250, 59, 26, 241, 143, 211, 191, 250, 59, 79, + 241, 143, 211, 191, 250, 59, 205, 242, 79, 241, 143, 211, 191, 250, 59, + 157, 126, 218, 61, 62, 211, 94, 225, 10, 126, 218, 61, 62, 211, 94, 126, + 218, 61, 62, 211, 94, 225, 10, 126, 218, 61, 218, 118, 211, 94, 157, 239, + 147, 218, 61, 62, 211, 94, 225, 10, 239, 147, 218, 61, 62, 211, 94, 239, + 147, 218, 61, 62, 211, 94, 225, 10, 239, 147, 218, 61, 218, 118, 211, 94, + 216, 74, 157, 239, 147, 218, 61, 218, 118, 211, 94, 157, 239, 233, 218, + 61, 62, 211, 94, 79, 239, 233, 218, 61, 62, 211, 94, 225, 10, 212, 88, + 218, 61, 62, 211, 94, 79, 212, 88, 218, 61, 62, 211, 94, 212, 88, 218, + 61, 218, 118, 211, 94, 225, 10, 241, 143, 218, 61, 62, 211, 94, 79, 241, + 143, 218, 61, 62, 211, 94, 205, 242, 79, 241, 143, 218, 61, 62, 211, 94, + 79, 241, 143, 218, 61, 218, 118, 211, 94, 157, 207, 155, 218, 61, 62, + 211, 94, 79, 207, 155, 218, 61, 62, 211, 94, 79, 207, 155, 218, 61, 218, + 118, 211, 94, 96, 53, 3, 5, 208, 86, 250, 94, 177, 53, 3, 5, 208, 86, + 250, 94, 86, 53, 3, 5, 208, 86, 250, 94, 183, 53, 3, 5, 208, 86, 250, 94, + 96, 53, 3, 225, 10, 208, 86, 250, 94, 177, 53, 3, 225, 10, 208, 86, 250, + 94, 86, 53, 3, 225, 10, 208, 86, 250, 94, 183, 53, 3, 225, 10, 208, 86, + 250, 94, 96, 53, 3, 228, 8, 208, 86, 250, 94, 177, 53, 3, 228, 8, 208, + 86, 250, 94, 86, 53, 3, 228, 8, 208, 86, 250, 94, 183, 53, 3, 228, 8, + 208, 86, 250, 94, 96, 53, 3, 5, 241, 31, 250, 94, 177, 53, 3, 5, 241, 31, + 250, 94, 86, 53, 3, 5, 241, 31, 250, 94, 183, 53, 3, 5, 241, 31, 250, 94, + 96, 53, 3, 241, 31, 250, 94, 177, 53, 3, 241, 31, 250, 94, 86, 53, 3, + 241, 31, 250, 94, 183, 53, 3, 241, 31, 250, 94, 79, 96, 53, 3, 241, 31, + 250, 94, 79, 177, 53, 3, 241, 31, 250, 94, 79, 86, 53, 3, 241, 31, 250, + 94, 79, 183, 53, 3, 241, 31, 250, 94, 79, 96, 53, 3, 228, 8, 241, 31, + 250, 94, 79, 177, 53, 3, 228, 8, 241, 31, 250, 94, 79, 86, 53, 3, 228, 8, + 241, 31, 250, 94, 79, 183, 53, 3, 228, 8, 241, 31, 250, 94, 96, 208, 84, + 53, 3, 223, 73, 213, 75, 177, 208, 84, 53, 3, 223, 73, 213, 75, 86, 208, + 84, 53, 3, 223, 73, 213, 75, 183, 208, 84, 53, 3, 223, 73, 213, 75, 96, + 208, 84, 53, 3, 225, 10, 213, 75, 177, 208, 84, 53, 3, 225, 10, 213, 75, + 86, 208, 84, 53, 3, 225, 10, 213, 75, 183, 208, 84, 53, 3, 225, 10, 213, + 75, 96, 208, 84, 53, 3, 26, 213, 75, 177, 208, 84, 53, 3, 26, 213, 75, + 86, 208, 84, 53, 3, 26, 213, 75, 183, 208, 84, 53, 3, 26, 213, 75, 96, + 208, 84, 53, 3, 79, 213, 75, 177, 208, 84, 53, 3, 79, 213, 75, 86, 208, + 84, 53, 3, 79, 213, 75, 183, 208, 84, 53, 3, 79, 213, 75, 96, 208, 84, + 53, 3, 205, 242, 79, 213, 75, 177, 208, 84, 53, 3, 205, 242, 79, 213, 75, + 86, 208, 84, 53, 3, 205, 242, 79, 213, 75, 183, 208, 84, 53, 3, 205, 242, + 79, 213, 75, 96, 240, 1, 47, 177, 240, 1, 47, 86, 240, 1, 47, 183, 240, + 1, 47, 96, 103, 47, 177, 103, 47, 86, 103, 47, 183, 103, 47, 96, 245, + 222, 47, 177, 245, 222, 47, 86, 245, 222, 47, 183, 245, 222, 47, 96, 79, + 245, 222, 47, 177, 79, 245, 222, 47, 86, 79, 245, 222, 47, 183, 79, 245, + 222, 47, 96, 79, 47, 177, 79, 47, 86, 79, 47, 183, 79, 47, 96, 41, 47, + 177, 41, 47, 86, 41, 47, 183, 41, 47, 153, 204, 46, 41, 47, 153, 241, + 176, 41, 47, 211, 238, 241, 176, 41, 47, 211, 238, 204, 46, 41, 47, 49, + 50, 41, 47, 112, 121, 41, 47, 204, 26, 96, 157, 150, 47, 204, 26, 177, + 157, 150, 47, 204, 26, 86, 157, 150, 47, 204, 26, 183, 157, 150, 47, 204, + 26, 153, 204, 46, 157, 150, 47, 204, 26, 153, 241, 176, 157, 150, 47, + 204, 26, 211, 238, 241, 176, 157, 150, 47, 204, 26, 211, 238, 204, 46, + 157, 150, 47, 204, 26, 96, 150, 47, 204, 26, 177, 150, 47, 204, 26, 86, + 150, 47, 204, 26, 183, 150, 47, 204, 26, 153, 204, 46, 150, 47, 204, 26, + 153, 241, 176, 150, 47, 204, 26, 211, 238, 241, 176, 150, 47, 204, 26, + 211, 238, 204, 46, 150, 47, 204, 26, 96, 225, 10, 150, 47, 204, 26, 177, + 225, 10, 150, 47, 204, 26, 86, 225, 10, 150, 47, 204, 26, 183, 225, 10, + 150, 47, 204, 26, 153, 204, 46, 225, 10, 150, 47, 204, 26, 153, 241, 176, + 225, 10, 150, 47, 204, 26, 211, 238, 241, 176, 225, 10, 150, 47, 204, 26, + 211, 238, 204, 46, 225, 10, 150, 47, 204, 26, 96, 79, 150, 47, 204, 26, + 177, 79, 150, 47, 204, 26, 86, 79, 150, 47, 204, 26, 183, 79, 150, 47, + 204, 26, 153, 204, 46, 79, 150, 47, 204, 26, 153, 241, 176, 79, 150, 47, + 204, 26, 211, 238, 241, 176, 79, 150, 47, 204, 26, 211, 238, 204, 46, 79, + 150, 47, 204, 26, 96, 205, 242, 79, 150, 47, 204, 26, 177, 205, 242, 79, + 150, 47, 204, 26, 86, 205, 242, 79, 150, 47, 204, 26, 183, 205, 242, 79, + 150, 47, 204, 26, 153, 204, 46, 205, 242, 79, 150, 47, 204, 26, 153, 241, + 176, 205, 242, 79, 150, 47, 204, 26, 211, 238, 241, 176, 205, 242, 79, + 150, 47, 204, 26, 211, 238, 204, 46, 205, 242, 79, 150, 47, 96, 208, 86, + 250, 94, 177, 208, 86, 250, 94, 86, 208, 86, 250, 94, 183, 208, 86, 250, + 94, 96, 61, 53, 204, 5, 208, 86, 250, 94, 177, 61, 53, 204, 5, 208, 86, + 250, 94, 86, 61, 53, 204, 5, 208, 86, 250, 94, 183, 61, 53, 204, 5, 208, + 86, 250, 94, 96, 53, 3, 221, 162, 209, 248, 177, 53, 3, 221, 162, 209, + 248, 86, 53, 3, 221, 162, 209, 248, 183, 53, 3, 221, 162, 209, 248, 79, + 53, 213, 76, 204, 24, 105, 79, 53, 213, 76, 204, 24, 120, 209, 57, 79, + 53, 213, 76, 204, 24, 118, 237, 137, 79, 53, 213, 76, 204, 24, 118, 209, + 60, 96, 247, 245, 61, 47, 86, 247, 248, 213, 78, 61, 47, 96, 208, 145, + 213, 78, 61, 47, 86, 208, 145, 213, 78, 61, 47, 96, 227, 216, 61, 47, 86, + 216, 10, 61, 47, 96, 216, 10, 61, 47, 86, 227, 216, 61, 47, 96, 249, 24, + 213, 77, 61, 47, 86, 249, 24, 213, 77, 61, 47, 96, 239, 117, 213, 77, 61, + 47, 86, 239, 117, 213, 77, 61, 47, 61, 53, 213, 76, 204, 24, 105, 61, 53, + 213, 76, 204, 24, 120, 209, 57, 202, 26, 240, 102, 224, 52, 240, 102, + 240, 103, 3, 209, 80, 222, 222, 240, 102, 209, 62, 240, 102, 240, 103, 3, + 237, 63, 215, 221, 240, 102, 236, 20, 240, 102, 2, 76, 209, 93, 236, 52, + 245, 146, 227, 102, 240, 102, 214, 188, 207, 179, 206, 240, 240, 102, + 246, 161, 204, 57, 12, 15, 235, 152, 12, 15, 235, 151, 12, 15, 235, 150, + 12, 15, 235, 149, 12, 15, 235, 148, 12, 15, 235, 147, 12, 15, 235, 146, + 12, 15, 235, 145, 12, 15, 235, 144, 12, 15, 235, 143, 12, 15, 235, 142, + 12, 15, 235, 141, 12, 15, 235, 140, 12, 15, 235, 139, 12, 15, 235, 138, + 12, 15, 235, 137, 12, 15, 235, 136, 12, 15, 235, 135, 12, 15, 235, 134, + 12, 15, 235, 133, 12, 15, 235, 132, 12, 15, 235, 131, 12, 15, 235, 130, + 12, 15, 235, 129, 12, 15, 235, 128, 12, 15, 235, 127, 12, 15, 235, 126, + 12, 15, 235, 125, 12, 15, 235, 124, 12, 15, 235, 123, 12, 15, 235, 122, + 12, 15, 235, 121, 12, 15, 235, 120, 12, 15, 235, 119, 12, 15, 235, 118, + 12, 15, 235, 117, 12, 15, 235, 116, 12, 15, 235, 115, 12, 15, 235, 114, + 12, 15, 235, 113, 12, 15, 235, 112, 12, 15, 235, 111, 12, 15, 235, 110, + 12, 15, 235, 109, 12, 15, 235, 108, 12, 15, 235, 107, 12, 15, 235, 106, + 12, 15, 235, 105, 12, 15, 235, 104, 12, 15, 235, 103, 12, 15, 235, 102, + 12, 15, 235, 101, 12, 15, 235, 100, 12, 15, 235, 99, 12, 15, 235, 98, 12, + 15, 235, 97, 12, 15, 235, 96, 12, 15, 235, 95, 12, 15, 235, 94, 12, 15, + 235, 93, 12, 15, 235, 92, 12, 15, 235, 91, 12, 15, 235, 90, 12, 15, 235, + 89, 12, 15, 235, 88, 12, 15, 235, 87, 12, 15, 235, 86, 12, 15, 235, 85, + 12, 15, 235, 84, 12, 15, 235, 83, 12, 15, 235, 82, 12, 15, 235, 81, 12, + 15, 235, 80, 12, 15, 235, 79, 12, 15, 235, 78, 12, 15, 235, 77, 12, 15, + 235, 76, 12, 15, 235, 75, 12, 15, 235, 74, 12, 15, 235, 73, 12, 15, 235, + 72, 12, 15, 235, 71, 12, 15, 235, 70, 12, 15, 235, 69, 12, 15, 235, 68, + 12, 15, 235, 67, 12, 15, 235, 66, 12, 15, 235, 65, 12, 15, 235, 64, 12, + 15, 235, 63, 12, 15, 235, 62, 12, 15, 235, 61, 12, 15, 235, 60, 12, 15, + 235, 59, 12, 15, 235, 58, 12, 15, 235, 57, 12, 15, 235, 56, 12, 15, 235, + 55, 12, 15, 235, 54, 12, 15, 235, 53, 12, 15, 235, 52, 12, 15, 235, 51, + 12, 15, 235, 50, 12, 15, 235, 49, 12, 15, 235, 48, 12, 15, 235, 47, 12, + 15, 235, 46, 12, 15, 235, 45, 12, 15, 235, 44, 12, 15, 235, 43, 12, 15, + 235, 42, 12, 15, 235, 41, 12, 15, 235, 40, 12, 15, 235, 39, 12, 15, 235, + 38, 12, 15, 235, 37, 12, 15, 235, 36, 12, 15, 235, 35, 12, 15, 235, 34, + 12, 15, 235, 33, 12, 15, 235, 32, 12, 15, 235, 31, 12, 15, 235, 30, 12, + 15, 235, 29, 12, 15, 235, 28, 12, 15, 235, 27, 12, 15, 235, 26, 12, 15, + 235, 25, 12, 15, 235, 24, 12, 15, 235, 23, 12, 15, 235, 22, 12, 15, 235, + 21, 12, 15, 235, 20, 12, 15, 235, 19, 12, 15, 235, 18, 12, 15, 235, 17, + 12, 15, 235, 16, 12, 15, 235, 15, 12, 15, 235, 14, 12, 15, 235, 13, 12, + 15, 235, 12, 12, 15, 235, 11, 12, 15, 235, 10, 12, 15, 235, 9, 12, 15, + 235, 8, 12, 15, 235, 7, 12, 15, 235, 6, 12, 15, 235, 5, 12, 15, 235, 4, + 12, 15, 235, 3, 12, 15, 235, 2, 12, 15, 235, 1, 12, 15, 235, 0, 12, 15, + 234, 255, 12, 15, 234, 254, 12, 15, 234, 253, 12, 15, 234, 252, 12, 15, + 234, 251, 12, 15, 234, 250, 12, 15, 234, 249, 12, 15, 234, 248, 12, 15, + 234, 247, 12, 15, 234, 246, 12, 15, 234, 245, 12, 15, 234, 244, 12, 15, + 234, 243, 12, 15, 234, 242, 12, 15, 234, 241, 12, 15, 234, 240, 12, 15, + 234, 239, 12, 15, 234, 238, 12, 15, 234, 237, 12, 15, 234, 236, 12, 15, + 234, 235, 12, 15, 234, 234, 12, 15, 234, 233, 12, 15, 234, 232, 12, 15, + 234, 231, 12, 15, 234, 230, 12, 15, 234, 229, 12, 15, 234, 228, 12, 15, + 234, 227, 12, 15, 234, 226, 12, 15, 234, 225, 12, 15, 234, 224, 12, 15, + 234, 223, 12, 15, 234, 222, 12, 15, 234, 221, 12, 15, 234, 220, 12, 15, + 234, 219, 12, 15, 234, 218, 12, 15, 234, 217, 12, 15, 234, 216, 12, 15, + 234, 215, 12, 15, 234, 214, 12, 15, 234, 213, 12, 15, 234, 212, 12, 15, + 234, 211, 12, 15, 234, 210, 12, 15, 234, 209, 12, 15, 234, 208, 12, 15, + 234, 207, 12, 15, 234, 206, 12, 15, 234, 205, 12, 15, 234, 204, 12, 15, + 234, 203, 12, 15, 234, 202, 12, 15, 234, 201, 12, 15, 234, 200, 12, 15, + 234, 199, 12, 15, 234, 198, 12, 15, 234, 197, 12, 15, 234, 196, 12, 15, + 234, 195, 12, 15, 234, 194, 12, 15, 234, 193, 12, 15, 234, 192, 12, 15, + 234, 191, 12, 15, 234, 190, 12, 15, 234, 189, 12, 15, 234, 188, 12, 15, + 234, 187, 12, 15, 234, 186, 12, 15, 234, 185, 12, 15, 234, 184, 12, 15, + 234, 183, 12, 15, 234, 182, 12, 15, 234, 181, 12, 15, 234, 180, 12, 15, + 234, 179, 12, 15, 234, 178, 12, 15, 234, 177, 12, 15, 234, 176, 12, 15, + 234, 175, 12, 15, 234, 174, 12, 15, 234, 173, 12, 15, 234, 172, 12, 15, + 234, 171, 12, 15, 234, 170, 12, 15, 234, 169, 12, 15, 234, 168, 12, 15, + 234, 167, 12, 15, 234, 166, 12, 15, 234, 165, 12, 15, 234, 164, 12, 15, + 234, 163, 12, 15, 234, 162, 12, 15, 234, 161, 12, 15, 234, 160, 12, 15, + 234, 159, 12, 15, 234, 158, 12, 15, 234, 157, 12, 15, 234, 156, 12, 15, + 234, 155, 12, 15, 234, 154, 12, 15, 234, 153, 12, 15, 234, 152, 12, 15, + 234, 151, 12, 15, 234, 150, 12, 15, 234, 149, 12, 15, 234, 148, 12, 15, + 234, 147, 12, 15, 234, 146, 12, 15, 234, 145, 12, 15, 234, 144, 12, 15, + 234, 143, 12, 15, 234, 142, 12, 15, 234, 141, 12, 15, 234, 140, 12, 15, + 234, 139, 12, 15, 234, 138, 12, 15, 234, 137, 12, 15, 234, 136, 12, 15, + 234, 135, 12, 15, 234, 134, 12, 15, 234, 133, 12, 15, 234, 132, 12, 15, + 234, 131, 12, 15, 234, 130, 12, 15, 234, 129, 12, 15, 234, 128, 12, 15, + 234, 127, 12, 15, 234, 126, 12, 15, 234, 125, 12, 15, 234, 124, 12, 15, + 234, 123, 12, 15, 234, 122, 12, 15, 234, 121, 12, 15, 234, 120, 12, 15, + 234, 119, 12, 15, 234, 118, 12, 15, 234, 117, 12, 15, 234, 116, 12, 15, + 234, 115, 12, 15, 234, 114, 12, 15, 234, 113, 12, 15, 234, 112, 12, 15, + 234, 111, 12, 15, 234, 110, 12, 15, 234, 109, 12, 15, 234, 108, 12, 15, + 234, 107, 12, 15, 234, 106, 12, 15, 234, 105, 12, 15, 234, 104, 12, 15, + 234, 103, 12, 15, 234, 102, 12, 15, 234, 101, 12, 15, 234, 100, 12, 15, + 234, 99, 12, 15, 234, 98, 12, 15, 234, 97, 12, 15, 234, 96, 12, 15, 234, + 95, 12, 15, 234, 94, 12, 15, 234, 93, 12, 15, 234, 92, 12, 15, 234, 91, + 12, 15, 234, 90, 12, 15, 234, 89, 12, 15, 234, 88, 12, 15, 234, 87, 12, + 15, 234, 86, 12, 15, 234, 85, 12, 15, 234, 84, 12, 15, 234, 83, 12, 15, + 234, 82, 12, 15, 234, 81, 12, 15, 234, 80, 12, 15, 234, 79, 12, 15, 234, + 78, 12, 15, 234, 77, 12, 15, 234, 76, 12, 15, 234, 75, 12, 15, 234, 74, + 12, 15, 234, 73, 12, 15, 234, 72, 12, 15, 234, 71, 12, 15, 234, 70, 12, + 15, 234, 69, 12, 15, 234, 68, 12, 15, 234, 67, 12, 15, 234, 66, 12, 15, + 234, 65, 12, 15, 234, 64, 12, 15, 234, 63, 12, 15, 234, 62, 12, 15, 234, + 61, 12, 15, 234, 60, 12, 15, 234, 59, 12, 15, 234, 58, 12, 15, 234, 57, + 12, 15, 234, 56, 12, 15, 234, 55, 12, 15, 234, 54, 12, 15, 234, 53, 12, + 15, 234, 52, 12, 15, 234, 51, 12, 15, 234, 50, 12, 15, 234, 49, 12, 15, + 234, 48, 12, 15, 234, 47, 12, 15, 234, 46, 12, 15, 234, 45, 12, 15, 234, + 44, 12, 15, 234, 43, 12, 15, 234, 42, 12, 15, 234, 41, 12, 15, 234, 40, + 12, 15, 234, 39, 12, 15, 234, 38, 12, 15, 234, 37, 12, 15, 234, 36, 12, + 15, 234, 35, 12, 15, 234, 34, 12, 15, 234, 33, 12, 15, 234, 32, 12, 15, + 234, 31, 12, 15, 234, 30, 12, 15, 234, 29, 12, 15, 234, 28, 12, 15, 234, + 27, 12, 15, 234, 26, 12, 15, 234, 25, 12, 15, 234, 24, 12, 15, 234, 23, + 12, 15, 234, 22, 12, 15, 234, 21, 12, 15, 234, 20, 12, 15, 234, 19, 12, + 15, 234, 18, 12, 15, 234, 17, 12, 15, 234, 16, 12, 15, 234, 15, 12, 15, + 234, 14, 12, 15, 234, 13, 12, 15, 234, 12, 12, 15, 234, 11, 12, 15, 234, + 10, 12, 15, 234, 9, 12, 15, 234, 8, 12, 15, 234, 7, 12, 15, 234, 6, 12, + 15, 234, 5, 12, 15, 234, 4, 12, 15, 234, 3, 12, 15, 234, 2, 12, 15, 234, + 1, 12, 15, 234, 0, 12, 15, 233, 255, 12, 15, 233, 254, 12, 15, 233, 253, + 12, 15, 233, 252, 12, 15, 233, 251, 12, 15, 233, 250, 12, 15, 233, 249, + 12, 15, 233, 248, 12, 15, 233, 247, 12, 15, 233, 246, 12, 15, 233, 245, + 12, 15, 233, 244, 12, 15, 233, 243, 12, 15, 233, 242, 12, 15, 233, 241, + 12, 15, 233, 240, 12, 15, 233, 239, 12, 15, 233, 238, 12, 15, 233, 237, + 12, 15, 233, 236, 12, 15, 233, 235, 12, 15, 233, 234, 12, 15, 233, 233, + 12, 15, 233, 232, 12, 15, 233, 231, 12, 15, 233, 230, 12, 15, 233, 229, + 12, 15, 233, 228, 12, 15, 233, 227, 12, 15, 233, 226, 12, 15, 233, 225, + 12, 15, 233, 224, 12, 15, 233, 223, 12, 15, 233, 222, 12, 15, 233, 221, + 12, 15, 233, 220, 12, 15, 233, 219, 12, 15, 233, 218, 12, 15, 233, 217, + 12, 15, 233, 216, 12, 15, 233, 215, 12, 15, 233, 214, 12, 15, 233, 213, + 12, 15, 233, 212, 12, 15, 233, 211, 12, 15, 233, 210, 12, 15, 233, 209, + 12, 15, 233, 208, 12, 15, 233, 207, 12, 15, 233, 206, 12, 15, 233, 205, + 12, 15, 233, 204, 12, 15, 233, 203, 12, 15, 233, 202, 12, 15, 233, 201, + 12, 15, 233, 200, 12, 15, 233, 199, 12, 15, 233, 198, 12, 15, 233, 197, + 12, 15, 233, 196, 12, 15, 233, 195, 12, 15, 233, 194, 12, 15, 233, 193, + 12, 15, 233, 192, 12, 15, 233, 191, 12, 15, 233, 190, 12, 15, 233, 189, + 12, 15, 233, 188, 12, 15, 233, 187, 12, 15, 233, 186, 12, 15, 233, 185, + 12, 15, 233, 184, 12, 15, 233, 183, 12, 15, 233, 182, 12, 15, 233, 181, + 12, 15, 233, 180, 12, 15, 233, 179, 12, 15, 233, 178, 12, 15, 233, 177, + 12, 15, 233, 176, 12, 15, 233, 175, 12, 15, 233, 174, 12, 15, 233, 173, + 12, 15, 233, 172, 12, 15, 233, 171, 12, 15, 233, 170, 12, 15, 233, 169, + 12, 15, 233, 168, 12, 15, 233, 167, 12, 15, 233, 166, 12, 15, 233, 165, + 12, 15, 233, 164, 12, 15, 233, 163, 12, 15, 233, 162, 12, 15, 233, 161, + 12, 15, 233, 160, 12, 15, 233, 159, 12, 15, 233, 158, 12, 15, 233, 157, + 12, 15, 233, 156, 12, 15, 233, 155, 12, 15, 233, 154, 12, 15, 233, 153, + 12, 15, 233, 152, 12, 15, 233, 151, 12, 15, 233, 150, 12, 15, 233, 149, + 12, 15, 233, 148, 12, 15, 233, 147, 12, 15, 233, 146, 12, 15, 233, 145, + 12, 15, 233, 144, 12, 15, 233, 143, 12, 15, 233, 142, 12, 15, 233, 141, + 12, 15, 233, 140, 12, 15, 233, 139, 12, 15, 233, 138, 12, 15, 233, 137, + 12, 15, 233, 136, 12, 15, 233, 135, 12, 15, 233, 134, 12, 15, 233, 133, + 12, 15, 233, 132, 12, 15, 233, 131, 12, 15, 233, 130, 12, 15, 233, 129, + 12, 15, 233, 128, 12, 15, 233, 127, 12, 15, 233, 126, 12, 15, 233, 125, + 12, 15, 233, 124, 12, 15, 233, 123, 228, 14, 209, 255, 160, 211, 228, + 160, 240, 212, 82, 160, 217, 31, 82, 160, 42, 54, 160, 243, 97, 54, 160, + 218, 246, 54, 160, 250, 235, 160, 250, 160, 160, 49, 219, 76, 160, 50, + 219, 76, 160, 250, 59, 160, 91, 54, 160, 245, 233, 160, 235, 219, 160, + 239, 102, 211, 61, 160, 212, 0, 160, 17, 202, 84, 160, 17, 105, 160, 17, + 108, 160, 17, 147, 160, 17, 149, 160, 17, 170, 160, 17, 195, 160, 17, + 213, 111, 160, 17, 199, 160, 17, 222, 63, 160, 245, 242, 160, 213, 143, + 160, 227, 179, 54, 160, 241, 35, 54, 160, 237, 247, 54, 160, 217, 47, 82, + 160, 245, 231, 250, 49, 160, 8, 6, 1, 63, 160, 8, 6, 1, 249, 255, 160, 8, + 6, 1, 247, 125, 160, 8, 6, 1, 245, 51, 160, 8, 6, 1, 74, 160, 8, 6, 1, + 240, 174, 160, 8, 6, 1, 239, 75, 160, 8, 6, 1, 237, 171, 160, 8, 6, 1, + 75, 160, 8, 6, 1, 230, 184, 160, 8, 6, 1, 230, 54, 160, 8, 6, 1, 159, + 160, 8, 6, 1, 226, 185, 160, 8, 6, 1, 223, 163, 160, 8, 6, 1, 78, 160, 8, + 6, 1, 219, 184, 160, 8, 6, 1, 217, 134, 160, 8, 6, 1, 146, 160, 8, 6, 1, + 194, 160, 8, 6, 1, 210, 69, 160, 8, 6, 1, 68, 160, 8, 6, 1, 206, 164, + 160, 8, 6, 1, 204, 144, 160, 8, 6, 1, 203, 196, 160, 8, 6, 1, 203, 124, + 160, 8, 6, 1, 202, 159, 160, 49, 51, 155, 160, 216, 74, 212, 0, 160, 50, + 51, 155, 160, 246, 53, 251, 138, 160, 124, 227, 114, 160, 237, 254, 251, + 138, 160, 8, 5, 1, 63, 160, 8, 5, 1, 249, 255, 160, 8, 5, 1, 247, 125, + 160, 8, 5, 1, 245, 51, 160, 8, 5, 1, 74, 160, 8, 5, 1, 240, 174, 160, 8, + 5, 1, 239, 75, 160, 8, 5, 1, 237, 171, 160, 8, 5, 1, 75, 160, 8, 5, 1, + 230, 184, 160, 8, 5, 1, 230, 54, 160, 8, 5, 1, 159, 160, 8, 5, 1, 226, + 185, 160, 8, 5, 1, 223, 163, 160, 8, 5, 1, 78, 160, 8, 5, 1, 219, 184, + 160, 8, 5, 1, 217, 134, 160, 8, 5, 1, 146, 160, 8, 5, 1, 194, 160, 8, 5, + 1, 210, 69, 160, 8, 5, 1, 68, 160, 8, 5, 1, 206, 164, 160, 8, 5, 1, 204, + 144, 160, 8, 5, 1, 203, 196, 160, 8, 5, 1, 203, 124, 160, 8, 5, 1, 202, + 159, 160, 49, 245, 93, 155, 160, 80, 227, 114, 160, 50, 245, 93, 155, + 160, 208, 227, 247, 60, 209, 255, 57, 214, 71, 57, 214, 60, 57, 214, 49, + 57, 214, 37, 57, 214, 26, 57, 214, 15, 57, 214, 4, 57, 213, 249, 57, 213, + 238, 57, 213, 230, 57, 213, 229, 57, 213, 228, 57, 213, 227, 57, 213, + 225, 57, 213, 224, 57, 213, 223, 57, 213, 222, 57, 213, 221, 57, 213, + 220, 57, 213, 219, 57, 213, 218, 57, 213, 217, 57, 213, 216, 57, 213, + 214, 57, 213, 213, 57, 213, 212, 57, 213, 211, 57, 213, 210, 57, 213, + 209, 57, 213, 208, 57, 213, 207, 57, 213, 206, 57, 213, 205, 57, 213, + 203, 57, 213, 202, 57, 213, 201, 57, 213, 200, 57, 213, 199, 57, 213, + 198, 57, 213, 197, 57, 213, 196, 57, 213, 195, 57, 213, 194, 57, 213, + 192, 57, 213, 191, 57, 213, 190, 57, 213, 189, 57, 213, 188, 57, 213, + 187, 57, 213, 186, 57, 213, 185, 57, 213, 184, 57, 213, 183, 57, 213, + 181, 57, 213, 180, 57, 213, 179, 57, 213, 178, 57, 213, 177, 57, 213, + 176, 57, 213, 175, 57, 213, 174, 57, 213, 173, 57, 213, 172, 57, 213, + 170, 57, 213, 169, 57, 213, 168, 57, 213, 167, 57, 213, 166, 57, 213, + 165, 57, 213, 164, 57, 213, 163, 57, 213, 162, 57, 213, 161, 57, 213, + 159, 57, 213, 158, 57, 213, 157, 57, 213, 156, 57, 213, 155, 57, 213, + 154, 57, 213, 153, 57, 213, 152, 57, 213, 151, 57, 213, 150, 57, 214, + 147, 57, 214, 146, 57, 214, 145, 57, 214, 144, 57, 214, 143, 57, 214, + 142, 57, 214, 141, 57, 214, 140, 57, 214, 139, 57, 214, 138, 57, 214, + 136, 57, 214, 135, 57, 214, 134, 57, 214, 133, 57, 214, 132, 57, 214, + 131, 57, 214, 130, 57, 214, 129, 57, 214, 128, 57, 214, 127, 57, 214, + 125, 57, 214, 124, 57, 214, 123, 57, 214, 122, 57, 214, 121, 57, 214, + 120, 57, 214, 119, 57, 214, 118, 57, 214, 117, 57, 214, 116, 57, 214, + 114, 57, 214, 113, 57, 214, 112, 57, 214, 111, 57, 214, 110, 57, 214, + 109, 57, 214, 108, 57, 214, 107, 57, 214, 106, 57, 214, 105, 57, 214, + 103, 57, 214, 102, 57, 214, 101, 57, 214, 100, 57, 214, 99, 57, 214, 98, + 57, 214, 97, 57, 214, 96, 57, 214, 95, 57, 214, 94, 57, 214, 92, 57, 214, + 91, 57, 214, 90, 57, 214, 89, 57, 214, 88, 57, 214, 87, 57, 214, 86, 57, + 214, 85, 57, 214, 84, 57, 214, 83, 57, 214, 81, 57, 214, 80, 57, 214, 79, + 57, 214, 78, 57, 214, 77, 57, 214, 76, 57, 214, 75, 57, 214, 74, 57, 214, + 73, 57, 214, 72, 57, 214, 70, 57, 214, 69, 57, 214, 68, 57, 214, 67, 57, + 214, 66, 57, 214, 65, 57, 214, 64, 57, 214, 63, 57, 214, 62, 57, 214, 61, + 57, 214, 59, 57, 214, 58, 57, 214, 57, 57, 214, 56, 57, 214, 55, 57, 214, + 54, 57, 214, 53, 57, 214, 52, 57, 214, 51, 57, 214, 50, 57, 214, 48, 57, + 214, 47, 57, 214, 46, 57, 214, 45, 57, 214, 44, 57, 214, 43, 57, 214, 42, + 57, 214, 41, 57, 214, 40, 57, 214, 39, 57, 214, 36, 57, 214, 35, 57, 214, + 34, 57, 214, 33, 57, 214, 32, 57, 214, 31, 57, 214, 30, 57, 214, 29, 57, + 214, 28, 57, 214, 27, 57, 214, 25, 57, 214, 24, 57, 214, 23, 57, 214, 22, + 57, 214, 21, 57, 214, 20, 57, 214, 19, 57, 214, 18, 57, 214, 17, 57, 214, + 16, 57, 214, 14, 57, 214, 13, 57, 214, 12, 57, 214, 11, 57, 214, 10, 57, + 214, 9, 57, 214, 8, 57, 214, 7, 57, 214, 6, 57, 214, 5, 57, 214, 3, 57, + 214, 2, 57, 214, 1, 57, 214, 0, 57, 213, 255, 57, 213, 254, 57, 213, 253, + 57, 213, 252, 57, 213, 251, 57, 213, 250, 57, 213, 248, 57, 213, 247, 57, + 213, 246, 57, 213, 245, 57, 213, 244, 57, 213, 243, 57, 213, 242, 57, + 213, 241, 57, 213, 240, 57, 213, 239, 57, 213, 237, 57, 213, 236, 57, + 213, 235, 57, 213, 234, 57, 213, 233, 57, 213, 232, 57, 213, 231, 221, + 48, 221, 50, 211, 90, 76, 237, 61, 212, 3, 211, 90, 76, 209, 112, 211, + 12, 241, 84, 76, 209, 112, 240, 240, 241, 84, 76, 208, 105, 241, 47, 241, + 71, 241, 72, 251, 130, 251, 131, 251, 27, 248, 131, 249, 19, 247, 199, + 167, 210, 5, 236, 106, 210, 5, 236, 31, 210, 10, 227, 115, 240, 51, 222, + 214, 227, 114, 241, 84, 76, 227, 114, 227, 163, 221, 253, 241, 50, 227, + 115, 210, 5, 80, 210, 5, 204, 165, 239, 159, 240, 51, 240, 30, 247, 25, + 216, 77, 245, 147, 213, 7, 219, 211, 227, 41, 105, 212, 13, 213, 7, 231, + 49, 227, 41, 202, 84, 212, 162, 244, 139, 227, 105, 241, 9, 243, 123, + 244, 8, 245, 184, 105, 244, 128, 244, 8, 245, 184, 108, 244, 127, 244, 8, + 245, 184, 147, 244, 126, 244, 8, 245, 184, 149, 244, 125, 182, 251, 130, + 223, 89, 210, 95, 231, 112, 210, 99, 241, 84, 76, 208, 106, 248, 33, 240, + 247, 247, 59, 247, 61, 241, 84, 76, 225, 9, 241, 48, 210, 242, 211, 3, + 241, 9, 241, 10, 231, 25, 213, 131, 149, 240, 11, 213, 130, 239, 112, + 231, 25, 213, 131, 147, 237, 238, 213, 130, 237, 235, 231, 25, 213, 131, + 108, 216, 149, 213, 130, 215, 150, 231, 25, 213, 131, 105, 206, 236, 213, + 130, 206, 193, 211, 231, 244, 46, 244, 48, 219, 157, 246, 182, 219, 159, + 138, 220, 80, 217, 240, 236, 109, 247, 218, 218, 236, 237, 27, 247, 230, + 221, 192, 247, 218, 237, 27, 223, 53, 231, 35, 231, 37, 222, 208, 227, + 114, 222, 231, 211, 90, 76, 214, 152, 250, 120, 211, 164, 241, 84, 76, + 214, 152, 250, 120, 241, 12, 167, 210, 6, 213, 117, 236, 106, 210, 6, + 213, 117, 236, 28, 167, 210, 6, 3, 230, 66, 236, 106, 210, 6, 3, 230, 66, + 236, 29, 227, 115, 210, 6, 213, 117, 80, 210, 6, 213, 117, 204, 164, 219, + 69, 227, 115, 239, 151, 219, 69, 227, 115, 242, 70, 218, 87, 219, 69, + 227, 115, 249, 18, 219, 69, 227, 115, 206, 224, 218, 82, 216, 74, 227, + 115, 240, 51, 216, 74, 231, 35, 216, 57, 212, 120, 213, 7, 108, 212, 117, + 211, 166, 212, 120, 213, 7, 147, 212, 116, 211, 165, 244, 8, 245, 184, + 211, 34, 244, 123, 217, 227, 206, 192, 105, 217, 227, 206, 190, 217, 190, + 217, 227, 206, 192, 108, 217, 227, 206, 189, 217, 189, 213, 118, 208, + 104, 211, 89, 211, 17, 247, 60, 246, 182, 247, 1, 224, 224, 204, 103, + 223, 181, 211, 90, 76, 237, 223, 250, 120, 211, 90, 76, 217, 208, 250, + 120, 211, 230, 241, 84, 76, 237, 223, 250, 120, 241, 84, 76, 217, 208, + 250, 120, 241, 45, 211, 90, 76, 211, 34, 211, 245, 212, 120, 238, 3, 167, + 230, 241, 213, 95, 212, 120, 167, 230, 241, 214, 191, 245, 184, 213, 127, + 230, 241, 245, 111, 211, 35, 209, 138, 211, 108, 220, 0, 210, 84, 245, + 232, 219, 226, 217, 228, 224, 223, 218, 72, 250, 156, 217, 222, 245, 232, + 250, 172, 223, 41, 212, 171, 8, 6, 1, 238, 119, 8, 5, 1, 238, 119, 246, + 201, 251, 8, 210, 89, 210, 248, 245, 243, 212, 68, 227, 222, 200, 1, 227, + 68, 228, 12, 1, 239, 187, 239, 178, 228, 12, 1, 239, 187, 240, 63, 228, + 12, 1, 215, 227, 228, 12, 1, 227, 49, 77, 131, 248, 45, 212, 238, 238, + 82, 224, 173, 216, 64, 239, 89, 239, 88, 239, 87, 223, 183, 201, 243, + 201, 244, 201, 246, 226, 243, 215, 235, 226, 245, 215, 237, 219, 37, 226, + 242, 215, 234, 221, 223, 224, 86, 204, 2, 226, 244, 215, 236, 239, 111, + 219, 36, 204, 52, 241, 107, 239, 99, 224, 154, 220, 32, 206, 194, 97, + 224, 154, 244, 145, 97, 96, 208, 84, 53, 3, 52, 80, 95, 86, 208, 84, 53, + 3, 52, 80, 95, 11, 4, 230, 199, 82, 217, 241, 239, 159, 35, 80, 50, 61, + 227, 185, 155, 205, 165, 205, 54, 204, 242, 204, 231, 204, 220, 204, 209, + 204, 198, 204, 187, 204, 176, 205, 164, 205, 153, 205, 142, 205, 131, + 205, 120, 205, 109, 205, 98, 247, 130, 219, 241, 82, 248, 13, 201, 245, + 9, 2, 221, 57, 209, 141, 9, 2, 221, 57, 115, 221, 57, 247, 161, 115, 247, + 160, 60, 31, 16, 239, 110, 212, 64, 246, 102, 206, 65, 205, 87, 205, 76, + 205, 65, 205, 53, 205, 42, 205, 31, 205, 20, 205, 9, 204, 254, 204, 246, + 204, 245, 204, 244, 204, 243, 204, 241, 204, 240, 204, 239, 204, 238, + 204, 237, 204, 236, 204, 235, 204, 234, 204, 233, 204, 232, 204, 230, + 204, 229, 204, 228, 204, 227, 204, 226, 204, 225, 204, 224, 204, 223, + 204, 222, 204, 221, 204, 219, 204, 218, 204, 217, 204, 216, 204, 215, + 204, 214, 204, 213, 204, 212, 204, 211, 204, 210, 204, 208, 204, 207, + 204, 206, 204, 205, 204, 204, 204, 203, 204, 202, 204, 201, 204, 200, + 204, 199, 204, 197, 204, 196, 204, 195, 204, 194, 204, 193, 204, 192, + 204, 191, 204, 190, 204, 189, 204, 188, 204, 186, 204, 185, 204, 184, + 204, 183, 204, 182, 204, 181, 204, 180, 204, 179, 204, 178, 204, 177, + 204, 175, 204, 174, 204, 173, 204, 172, 204, 171, 204, 170, 204, 169, + 204, 168, 204, 167, 204, 166, 205, 163, 205, 162, 205, 161, 205, 160, + 205, 159, 205, 158, 205, 157, 205, 156, 205, 155, 205, 154, 205, 152, + 205, 151, 205, 150, 205, 149, 205, 148, 205, 147, 205, 146, 205, 145, + 205, 144, 205, 143, 205, 141, 205, 140, 205, 139, 205, 138, 205, 137, + 205, 136, 205, 135, 205, 134, 205, 133, 205, 132, 205, 130, 205, 129, + 205, 128, 205, 127, 205, 126, 205, 125, 205, 124, 205, 123, 205, 122, + 205, 121, 205, 119, 205, 118, 205, 117, 205, 116, 205, 115, 205, 114, + 205, 113, 205, 112, 205, 111, 205, 110, 205, 108, 205, 107, 205, 106, + 205, 105, 205, 104, 205, 103, 205, 102, 205, 101, 205, 100, 205, 99, 205, + 97, 205, 96, 205, 95, 205, 94, 205, 93, 205, 92, 205, 91, 205, 90, 205, + 89, 205, 88, 205, 86, 205, 85, 205, 84, 205, 83, 205, 82, 205, 81, 205, + 80, 205, 79, 205, 78, 205, 77, 205, 75, 205, 74, 205, 73, 205, 72, 205, + 71, 205, 70, 205, 69, 205, 68, 205, 67, 205, 66, 205, 64, 205, 63, 205, + 62, 205, 61, 205, 60, 205, 59, 205, 58, 205, 57, 205, 56, 205, 55, 205, + 52, 205, 51, 205, 50, 205, 49, 205, 48, 205, 47, 205, 46, 205, 45, 205, + 44, 205, 43, 205, 41, 205, 40, 205, 39, 205, 38, 205, 37, 205, 36, 205, + 35, 205, 34, 205, 33, 205, 32, 205, 30, 205, 29, 205, 28, 205, 27, 205, + 26, 205, 25, 205, 24, 205, 23, 205, 22, 205, 21, 205, 19, 205, 18, 205, + 17, 205, 16, 205, 15, 205, 14, 205, 13, 205, 12, 205, 11, 205, 10, 205, + 8, 205, 7, 205, 6, 205, 5, 205, 4, 205, 3, 205, 2, 205, 1, 205, 0, 204, + 255, 204, 253, 204, 252, 204, 251, 204, 250, 204, 249, 204, 248, 204, + 247, 8, 6, 1, 34, 3, 225, 171, 25, 237, 253, 8, 5, 1, 34, 3, 225, 171, + 25, 237, 253, 8, 6, 1, 188, 3, 80, 227, 115, 56, 8, 5, 1, 188, 3, 80, + 227, 115, 56, 8, 6, 1, 188, 3, 80, 227, 115, 248, 126, 25, 237, 253, 8, + 5, 1, 188, 3, 80, 227, 115, 248, 126, 25, 237, 253, 8, 6, 1, 188, 3, 80, + 227, 115, 248, 126, 25, 165, 8, 5, 1, 188, 3, 80, 227, 115, 248, 126, 25, + 165, 8, 6, 1, 188, 3, 246, 53, 25, 225, 170, 8, 5, 1, 188, 3, 246, 53, + 25, 225, 170, 8, 6, 1, 188, 3, 246, 53, 25, 247, 29, 8, 5, 1, 188, 3, + 246, 53, 25, 247, 29, 8, 6, 1, 235, 206, 3, 225, 171, 25, 237, 253, 8, 5, + 1, 235, 206, 3, 225, 171, 25, 237, 253, 8, 5, 1, 235, 206, 3, 70, 87, 25, + 165, 8, 5, 1, 222, 206, 3, 208, 228, 55, 8, 6, 1, 158, 3, 80, 227, 115, + 56, 8, 5, 1, 158, 3, 80, 227, 115, 56, 8, 6, 1, 158, 3, 80, 227, 115, + 248, 126, 25, 237, 253, 8, 5, 1, 158, 3, 80, 227, 115, 248, 126, 25, 237, + 253, 8, 6, 1, 158, 3, 80, 227, 115, 248, 126, 25, 165, 8, 5, 1, 158, 3, + 80, 227, 115, 248, 126, 25, 165, 8, 6, 1, 215, 94, 3, 80, 227, 115, 56, + 8, 5, 1, 215, 94, 3, 80, 227, 115, 56, 8, 6, 1, 106, 3, 225, 171, 25, + 237, 253, 8, 5, 1, 106, 3, 225, 171, 25, 237, 253, 8, 6, 1, 34, 3, 220, + 63, 25, 165, 8, 5, 1, 34, 3, 220, 63, 25, 165, 8, 6, 1, 34, 3, 220, 63, + 25, 208, 227, 8, 5, 1, 34, 3, 220, 63, 25, 208, 227, 8, 6, 1, 188, 3, + 220, 63, 25, 165, 8, 5, 1, 188, 3, 220, 63, 25, 165, 8, 6, 1, 188, 3, + 220, 63, 25, 208, 227, 8, 5, 1, 188, 3, 220, 63, 25, 208, 227, 8, 6, 1, + 188, 3, 70, 87, 25, 165, 8, 5, 1, 188, 3, 70, 87, 25, 165, 8, 6, 1, 188, + 3, 70, 87, 25, 208, 227, 8, 5, 1, 188, 3, 70, 87, 25, 208, 227, 8, 5, 1, + 235, 206, 3, 70, 87, 25, 237, 253, 8, 5, 1, 235, 206, 3, 70, 87, 25, 208, + 227, 8, 6, 1, 235, 206, 3, 220, 63, 25, 165, 8, 5, 1, 235, 206, 3, 220, + 63, 25, 70, 87, 25, 165, 8, 6, 1, 235, 206, 3, 220, 63, 25, 208, 227, 8, + 5, 1, 235, 206, 3, 220, 63, 25, 70, 87, 25, 208, 227, 8, 6, 1, 230, 185, + 3, 208, 227, 8, 5, 1, 230, 185, 3, 70, 87, 25, 208, 227, 8, 6, 1, 228, + 131, 3, 208, 227, 8, 5, 1, 228, 131, 3, 208, 227, 8, 6, 1, 226, 186, 3, + 208, 227, 8, 5, 1, 226, 186, 3, 208, 227, 8, 6, 1, 217, 1, 3, 208, 227, + 8, 5, 1, 217, 1, 3, 208, 227, 8, 6, 1, 106, 3, 220, 63, 25, 165, 8, 5, 1, + 106, 3, 220, 63, 25, 165, 8, 6, 1, 106, 3, 220, 63, 25, 208, 227, 8, 5, + 1, 106, 3, 220, 63, 25, 208, 227, 8, 6, 1, 106, 3, 225, 171, 25, 165, 8, + 5, 1, 106, 3, 225, 171, 25, 165, 8, 6, 1, 106, 3, 225, 171, 25, 208, 227, + 8, 5, 1, 106, 3, 225, 171, 25, 208, 227, 8, 5, 1, 251, 110, 3, 237, 253, + 8, 5, 1, 171, 158, 3, 237, 253, 8, 5, 1, 171, 158, 3, 165, 8, 5, 1, 207, + 174, 206, 165, 3, 237, 253, 8, 5, 1, 207, 174, 206, 165, 3, 165, 8, 5, 1, + 214, 193, 3, 237, 253, 8, 5, 1, 214, 193, 3, 165, 8, 5, 1, 236, 115, 214, + 193, 3, 237, 253, 8, 5, 1, 236, 115, 214, 193, 3, 165, 10, 213, 127, 89, + 3, 237, 128, 87, 3, 251, 30, 10, 213, 127, 89, 3, 237, 128, 87, 3, 204, + 70, 10, 213, 127, 89, 3, 237, 128, 87, 3, 137, 225, 129, 10, 213, 127, + 89, 3, 237, 128, 87, 3, 220, 73, 10, 213, 127, 89, 3, 237, 128, 87, 3, + 68, 10, 213, 127, 89, 3, 237, 128, 87, 3, 202, 213, 10, 213, 127, 89, 3, + 237, 128, 87, 3, 74, 10, 213, 127, 89, 3, 237, 128, 87, 3, 251, 109, 10, + 213, 127, 221, 179, 3, 229, 189, 179, 1, 229, 119, 44, 109, 230, 54, 44, + 109, 222, 205, 44, 109, 247, 125, 44, 109, 221, 13, 44, 109, 207, 244, + 44, 109, 221, 228, 44, 109, 210, 69, 44, 109, 223, 163, 44, 109, 219, + 184, 44, 109, 226, 185, 44, 109, 203, 124, 44, 109, 146, 44, 109, 159, + 44, 109, 206, 164, 44, 109, 227, 69, 44, 109, 227, 78, 44, 109, 215, 186, + 44, 109, 221, 210, 44, 109, 230, 184, 44, 109, 213, 92, 44, 109, 211, + 167, 44, 109, 194, 44, 109, 237, 171, 44, 109, 228, 224, 44, 4, 230, 41, + 44, 4, 229, 100, 44, 4, 229, 87, 44, 4, 228, 209, 44, 4, 228, 174, 44, 4, + 229, 201, 44, 4, 229, 198, 44, 4, 230, 18, 44, 4, 229, 26, 44, 4, 229, 6, + 44, 4, 229, 219, 44, 4, 222, 202, 44, 4, 222, 151, 44, 4, 222, 147, 44, + 4, 222, 116, 44, 4, 222, 108, 44, 4, 222, 190, 44, 4, 222, 188, 44, 4, + 222, 199, 44, 4, 222, 128, 44, 4, 222, 123, 44, 4, 222, 192, 44, 4, 247, + 91, 44, 4, 246, 79, 44, 4, 246, 69, 44, 4, 245, 110, 44, 4, 245, 76, 44, + 4, 246, 238, 44, 4, 246, 230, 44, 4, 247, 80, 44, 4, 245, 254, 44, 4, + 245, 180, 44, 4, 247, 15, 44, 4, 221, 10, 44, 4, 220, 248, 44, 4, 220, + 243, 44, 4, 220, 226, 44, 4, 220, 218, 44, 4, 221, 1, 44, 4, 221, 0, 44, + 4, 221, 7, 44, 4, 220, 233, 44, 4, 220, 230, 44, 4, 221, 4, 44, 4, 207, + 240, 44, 4, 207, 220, 44, 4, 207, 219, 44, 4, 207, 208, 44, 4, 207, 205, + 44, 4, 207, 236, 44, 4, 207, 235, 44, 4, 207, 239, 44, 4, 207, 218, 44, + 4, 207, 217, 44, 4, 207, 238, 44, 4, 221, 226, 44, 4, 221, 212, 44, 4, + 221, 211, 44, 4, 221, 195, 44, 4, 221, 194, 44, 4, 221, 222, 44, 4, 221, + 221, 44, 4, 221, 225, 44, 4, 221, 197, 44, 4, 221, 196, 44, 4, 221, 224, + 44, 4, 210, 18, 44, 4, 209, 2, 44, 4, 208, 242, 44, 4, 207, 203, 44, 4, + 207, 165, 44, 4, 209, 187, 44, 4, 209, 176, 44, 4, 209, 250, 44, 4, 135, + 44, 4, 208, 148, 44, 4, 209, 207, 44, 4, 223, 106, 44, 4, 222, 100, 44, + 4, 222, 75, 44, 4, 221, 84, 44, 4, 221, 25, 44, 4, 222, 240, 44, 4, 222, + 235, 44, 4, 223, 92, 44, 4, 221, 191, 44, 4, 221, 180, 44, 4, 223, 65, + 44, 4, 219, 168, 44, 4, 218, 167, 44, 4, 218, 129, 44, 4, 217, 191, 44, + 4, 217, 157, 44, 4, 219, 34, 44, 4, 219, 23, 44, 4, 219, 148, 44, 4, 218, + 69, 44, 4, 218, 45, 44, 4, 219, 48, 44, 4, 225, 175, 44, 4, 224, 155, 44, + 4, 224, 125, 44, 4, 223, 246, 44, 4, 223, 192, 44, 4, 225, 20, 44, 4, + 225, 8, 44, 4, 225, 140, 44, 4, 224, 82, 44, 4, 224, 35, 44, 4, 225, 67, + 44, 4, 203, 110, 44, 4, 203, 11, 44, 4, 203, 2, 44, 4, 202, 213, 44, 4, + 202, 181, 44, 4, 203, 52, 44, 4, 203, 49, 44, 4, 203, 89, 44, 4, 202, + 247, 44, 4, 202, 232, 44, 4, 203, 62, 44, 4, 216, 216, 44, 4, 216, 57, + 44, 4, 216, 3, 44, 4, 215, 145, 44, 4, 215, 114, 44, 4, 216, 158, 44, 4, + 216, 135, 44, 4, 216, 197, 44, 4, 215, 227, 44, 4, 215, 208, 44, 4, 216, + 167, 44, 4, 228, 112, 44, 4, 227, 148, 44, 4, 227, 130, 44, 4, 226, 239, + 44, 4, 226, 210, 44, 4, 227, 234, 44, 4, 227, 226, 44, 4, 228, 86, 44, 4, + 227, 49, 44, 4, 227, 18, 44, 4, 227, 251, 44, 4, 206, 85, 44, 4, 205, + 230, 44, 4, 205, 215, 44, 4, 204, 163, 44, 4, 204, 156, 44, 4, 206, 55, + 44, 4, 206, 50, 44, 4, 206, 81, 44, 4, 205, 189, 44, 4, 205, 176, 44, 4, + 206, 61, 44, 4, 227, 67, 44, 4, 227, 62, 44, 4, 227, 61, 44, 4, 227, 58, + 44, 4, 227, 57, 44, 4, 227, 64, 44, 4, 227, 63, 44, 4, 227, 66, 44, 4, + 227, 60, 44, 4, 227, 59, 44, 4, 227, 65, 44, 4, 227, 76, 44, 4, 227, 71, + 44, 4, 227, 70, 44, 4, 227, 54, 44, 4, 227, 53, 44, 4, 227, 73, 44, 4, + 227, 72, 44, 4, 227, 75, 44, 4, 227, 56, 44, 4, 227, 55, 44, 4, 227, 74, + 44, 4, 215, 184, 44, 4, 215, 173, 44, 4, 215, 172, 44, 4, 215, 165, 44, + 4, 215, 158, 44, 4, 215, 180, 44, 4, 215, 179, 44, 4, 215, 183, 44, 4, + 215, 171, 44, 4, 215, 170, 44, 4, 215, 182, 44, 4, 221, 208, 44, 4, 221, + 203, 44, 4, 221, 202, 44, 4, 221, 199, 44, 4, 221, 198, 44, 4, 221, 205, + 44, 4, 221, 204, 44, 4, 221, 207, 44, 4, 221, 201, 44, 4, 221, 200, 44, + 4, 221, 206, 44, 4, 230, 180, 44, 4, 230, 141, 44, 4, 230, 134, 44, 4, + 230, 82, 44, 4, 230, 64, 44, 4, 230, 161, 44, 4, 230, 159, 44, 4, 230, + 174, 44, 4, 230, 101, 44, 4, 230, 91, 44, 4, 230, 167, 44, 4, 213, 85, + 44, 4, 213, 11, 44, 4, 213, 6, 44, 4, 212, 199, 44, 4, 212, 182, 44, 4, + 213, 43, 44, 4, 213, 41, 44, 4, 213, 74, 44, 4, 212, 242, 44, 4, 212, + 236, 44, 4, 213, 52, 44, 4, 211, 163, 44, 4, 211, 132, 44, 4, 211, 128, + 44, 4, 211, 119, 44, 4, 211, 116, 44, 4, 211, 138, 44, 4, 211, 137, 44, + 4, 211, 162, 44, 4, 211, 124, 44, 4, 211, 123, 44, 4, 211, 140, 44, 4, + 215, 33, 44, 4, 212, 162, 44, 4, 212, 142, 44, 4, 211, 10, 44, 4, 210, + 179, 44, 4, 214, 177, 44, 4, 214, 165, 44, 4, 215, 18, 44, 4, 212, 13, + 44, 4, 211, 250, 44, 4, 214, 217, 44, 4, 237, 157, 44, 4, 237, 3, 44, 4, + 236, 239, 44, 4, 236, 26, 44, 4, 236, 1, 44, 4, 237, 67, 44, 4, 237, 48, + 44, 4, 237, 147, 44, 4, 236, 136, 44, 4, 236, 117, 44, 4, 237, 76, 44, 4, + 228, 223, 44, 4, 228, 222, 44, 4, 228, 217, 44, 4, 228, 216, 44, 4, 228, + 213, 44, 4, 228, 212, 44, 4, 228, 219, 44, 4, 228, 218, 44, 4, 228, 221, + 44, 4, 228, 215, 44, 4, 228, 214, 44, 4, 228, 220, 44, 4, 212, 205, 140, + 109, 2, 203, 75, 140, 109, 2, 216, 186, 140, 109, 2, 216, 102, 114, 1, + 207, 95, 85, 109, 2, 245, 249, 173, 85, 109, 2, 245, 249, 229, 144, 85, + 109, 2, 245, 249, 229, 26, 85, 109, 2, 245, 249, 229, 115, 85, 109, 2, + 245, 249, 222, 128, 85, 109, 2, 245, 249, 247, 92, 85, 109, 2, 245, 249, + 246, 199, 85, 109, 2, 245, 249, 245, 254, 85, 109, 2, 245, 249, 246, 116, + 85, 109, 2, 245, 249, 220, 233, 85, 109, 2, 245, 249, 244, 212, 85, 109, + 2, 245, 249, 207, 229, 85, 109, 2, 245, 249, 243, 113, 85, 109, 2, 245, + 249, 207, 224, 85, 109, 2, 245, 249, 201, 201, 85, 109, 2, 245, 249, 210, + 22, 85, 109, 2, 245, 249, 209, 108, 85, 109, 2, 245, 249, 135, 85, 109, + 2, 245, 249, 209, 47, 85, 109, 2, 245, 249, 221, 191, 85, 109, 2, 245, + 249, 249, 32, 85, 109, 2, 245, 249, 218, 208, 85, 109, 2, 245, 249, 218, + 69, 85, 109, 2, 245, 249, 218, 180, 85, 109, 2, 245, 249, 224, 82, 85, + 109, 2, 245, 249, 202, 247, 85, 109, 2, 245, 249, 215, 227, 85, 109, 2, + 245, 249, 227, 49, 85, 109, 2, 245, 249, 205, 189, 85, 109, 2, 245, 249, + 213, 90, 85, 109, 2, 245, 249, 211, 164, 85, 109, 2, 245, 249, 215, 36, + 85, 109, 2, 245, 249, 152, 85, 109, 2, 245, 249, 228, 113, 85, 22, 2, + 245, 249, 217, 126, 85, 231, 36, 22, 2, 245, 249, 217, 65, 85, 231, 36, + 22, 2, 245, 249, 215, 102, 85, 231, 36, 22, 2, 245, 249, 215, 95, 85, + 231, 36, 22, 2, 245, 249, 217, 106, 85, 22, 2, 220, 39, 85, 22, 2, 251, + 242, 172, 1, 248, 79, 222, 203, 172, 1, 248, 79, 222, 151, 172, 1, 248, + 79, 222, 116, 172, 1, 248, 79, 222, 190, 172, 1, 248, 79, 222, 128, 67, + 1, 248, 79, 222, 203, 67, 1, 248, 79, 222, 151, 67, 1, 248, 79, 222, 116, + 67, 1, 248, 79, 222, 190, 67, 1, 248, 79, 222, 128, 67, 1, 251, 57, 246, + 238, 67, 1, 251, 57, 207, 203, 67, 1, 251, 57, 135, 67, 1, 251, 57, 219, + 184, 65, 1, 240, 198, 240, 197, 245, 188, 143, 142, 65, 1, 240, 197, 240, + 198, 245, 188, 143, 142, }; static unsigned char phrasebook_offset1[] = { @@ -15407,21 +16533,20 @@ static unsigned char phrasebook_offset1[] = { 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 52, 87, 52, 88, - 89, 90, 91, 92, 93, 94, 52, 95, 52, 96, 52, 52, 52, 52, 52, 97, 98, 99, - 100, 101, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 102, 103, 104, 105, - 106, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 89, 90, 91, 92, 93, 94, 95, 96, 52, 97, 52, 52, 52, 52, 52, 98, 99, 100, + 101, 102, 103, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 104, 105, 106, + 107, 108, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 109, 110, 111, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 107, 108, - 109, 110, 52, 52, 52, 111, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 112, 113, 114, 115, 52, 52, 52, 116, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 112, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 113, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 114, 115, 116, 117, - 118, 119, 120, 121, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 122, 52, 52, 52, 52, 52, 123, 52, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 117, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 118, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 130, 52, 52, 52, 52, 52, 131, 52, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, @@ -15434,8 +16559,8 @@ static unsigned char phrasebook_offset1[] = { 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 133, 134, 135, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 142, 143, 144, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, @@ -15591,8 +16716,8 @@ static unsigned char phrasebook_offset1[] = { 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 136, 137, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 145, 146, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, @@ -15605,8 +16730,9 @@ static unsigned char phrasebook_offset1[] = { 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 138, 139, 140, 141, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 147, 148, 149, + 150, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, @@ -15634,114 +16760,114 @@ static unsigned char phrasebook_offset1[] = { 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, + 52, 52, 52, 52, 52, }; static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 9, 11, 14, 17, 19, 21, 24, 27, 29, 31, - 33, 35, 39, 41, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 69, 72, - 75, 78, 82, 86, 91, 96, 101, 105, 110, 115, 120, 124, 129, 134, 138, 143, - 148, 152, 157, 162, 166, 170, 175, 179, 184, 189, 194, 199, 204, 207, - 211, 214, 218, 221, 225, 229, 234, 239, 244, 248, 253, 258, 263, 267, - 272, 277, 281, 286, 291, 295, 300, 305, 309, 313, 318, 322, 327, 332, - 337, 342, 347, 351, 354, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 364, 369, - 372, 375, 378, 381, 384, 387, 389, 392, 398, 406, 409, 413, 416, 418, - 421, 424, 427, 430, 434, 437, 440, 444, 446, 449, 455, 463, 470, 477, - 484, 489, 496, 502, 509, 516, 523, 531, 536, 544, 551, 557, 564, 571, - 579, 586, 594, 602, 607, 615, 622, 628, 635, 642, 649, 652, 658, 665, - 671, 678, 685, 692, 697, 703, 710, 716, 723, 730, 737, 745, 750, 758, - 765, 771, 778, 785, 793, 800, 808, 816, 821, 829, 836, 842, 849, 856, - 863, 866, 872, 879, 885, 892, 899, 906, 911, 919, 926, 933, 940, 947, - 954, 961, 968, 975, 983, 991, 999, 1007, 1015, 1023, 1031, 1039, 1046, - 1053, 1060, 1067, 1074, 1081, 1088, 1095, 1102, 1109, 1116, 1123, 1131, - 1139, 1147, 1155, 1163, 1171, 1179, 1187, 1195, 1203, 1210, 1217, 1225, - 1233, 1241, 1249, 1257, 1265, 1273, 1281, 1289, 1295, 1300, 1305, 1313, - 1321, 1329, 1337, 1342, 1349, 1356, 1364, 1372, 1380, 1388, 1398, 1408, - 1415, 1422, 1429, 1436, 1444, 1452, 1460, 1468, 1479, 1484, 1489, 1496, - 1503, 1510, 1517, 1524, 1531, 1536, 1541, 1548, 1555, 1563, 1571, 1579, - 1587, 1594, 1601, 1609, 1617, 1625, 1633, 1641, 1649, 1657, 1665, 1673, - 1681, 1688, 1695, 1702, 1709, 1716, 1723, 1730, 1737, 1745, 1753, 1760, - 1767, 1774, 1781, 1789, 1797, 1805, 1813, 1821, 1828, 1835, 1843, 1851, - 1859, 1867, 1872, 1878, 1884, 1891, 1898, 1903, 1908, 1914, 1921, 1928, - 1935, 1942, 1950, 1958, 1964, 1970, 1975, 1981, 1988, 1995, 2002, 2007, - 2012, 2017, 2024, 2031, 2038, 2045, 2052, 2058, 2066, 2076, 2085, 2092, - 2099, 2104, 2109, 2116, 2123, 2127, 2132, 2137, 2142, 2150, 2159, 2166, - 2173, 2182, 2189, 2196, 2201, 2208, 2215, 2222, 2229, 2236, 2241, 2248, - 2255, 2263, 2268, 2273, 2278, 2288, 2292, 2298, 2304, 2310, 2316, 2324, - 2337, 2345, 2350, 2360, 2365, 2370, 2380, 2385, 2392, 2399, 2407, 2415, - 2422, 2429, 2436, 2443, 2453, 2463, 2472, 2481, 2491, 2501, 2511, 2521, - 2526, 2536, 2546, 2556, 2566, 2574, 2582, 2589, 2596, 2604, 2612, 2620, - 2628, 2635, 2642, 2652, 2662, 2670, 2678, 2686, 2691, 2701, 2706, 2713, - 2720, 2725, 2730, 2738, 2746, 2756, 2766, 2773, 2780, 2789, 2798, 2806, - 2814, 2823, 2832, 2840, 2848, 2857, 2866, 2875, 2884, 2894, 2904, 2912, - 2920, 2929, 2938, 2947, 2956, 2966, 2976, 2984, 2992, 3001, 3010, 3019, - 3028, 3037, 3046, 3051, 3056, 3064, 3072, 3082, 3090, 3095, 3100, 3107, - 3114, 3121, 3128, 3135, 3142, 3152, 3162, 3172, 3182, 3189, 3196, 3206, - 3216, 3224, 3232, 3240, 3248, 3256, 3263, 3270, 3277, 3283, 3290, 3297, - 3304, 3313, 3323, 3333, 3340, 3347, 3353, 3358, 3364, 3370, 3376, 3383, - 3390, 3401, 3411, 3418, 3425, 3432, 3439, 3444, 3449, 3455, 3461, 3467, - 3475, 3483, 3490, 3496, 3501, 3508, 3514, 3522, 3532, 3542, 3551, 3558, - 3564, 3570, 3575, 3582, 3588, 3595, 3602, 3609, 3614, 3619, 3629, 3637, - 3646, 3651, 3657, 3667, 3674, 3682, 3691, 3697, 3703, 3709, 3716, 3721, - 3726, 3736, 3744, 3753, 3761, 3769, 3779, 3784, 3791, 3798, 3803, 3815, - 3824, 3832, 3838, 3847, 3852, 3857, 3864, 3870, 3876, 3882, 3888, 3897, - 3905, 3910, 3918, 3924, 3932, 3940, 3946, 3952, 3958, 3966, 3974, 3980, - 3988, 3994, 3999, 4006, 4014, 4024, 4031, 4038, 4048, 4055, 4062, 4072, - 4079, 4086, 4093, 4099, 4105, 4114, 4126, 4131, 4138, 4143, 4147, 4152, - 4160, 4167, 4172, 4177, 4181, 4186, 4191, 4195, 4201, 4207, 4213, 4219, - 4227, 4232, 4237, 4242, 4247, 4253, 4255, 4260, 4264, 4270, 4276, 4282, - 4287, 4294, 4301, 4307, 4314, 4322, 4330, 4335, 4340, 4344, 4349, 4351, - 4353, 4356, 4358, 4361, 4366, 4371, 4377, 4382, 4386, 4390, 4395, 4404, - 4410, 4415, 4421, 4426, 4432, 4440, 4448, 4452, 4456, 4461, 4467, 4473, - 4479, 4485, 4490, 4498, 4507, 4516, 4521, 4527, 4534, 4541, 4548, 4555, - 4559, 4565, 4570, 4575, 4580, 4585, 4588, 4591, 4594, 4597, 4600, 4603, - 4607, 4611, 4617, 4620, 4625, 4631, 4637, 4640, 4645, 4650, 4654, 4660, - 4666, 4672, 4678, 4683, 4688, 4693, 4696, 4702, 4707, 4712, 4716, 4721, - 4727, 4733, 4736, 4740, 4744, 4748, 4751, 4754, 4759, 4763, 4770, 4774, - 4780, 4784, 4790, 4794, 4798, 4802, 4807, 4812, 4819, 4825, 4832, 4838, - 4844, 4850, 4853, 4857, 4861, 4865, 4869, 4874, 4879, 4883, 4887, 4893, - 4897, 4901, 4906, 4912, 4917, 4923, 4927, 4934, 4939, 4943, 4948, 4953, - 4959, 4962, 4966, 4971, 4976, 4985, 4991, 4996, 5000, 5005, 5009, 5014, - 5018, 5022, 5027, 5031, 5037, 5042, 5047, 5052, 5057, 5062, 5067, 5073, - 5079, 5085, 5091, 5096, 5102, 5108, 5114, 5119, 5124, 5131, 5138, 5142, - 5148, 5155, 0, 0, 5162, 5165, 5174, 5183, 5194, 5198, 0, 0, 0, 0, 5203, - 5206, 5211, 5219, 5224, 5232, 5240, 0, 5248, 0, 5256, 5264, 5272, 5283, - 5288, 5293, 5298, 5303, 5308, 5313, 5318, 5323, 5328, 5333, 5338, 5343, - 5348, 5353, 5358, 5363, 0, 5368, 5373, 5378, 5383, 5388, 5393, 5398, - 5403, 5411, 5419, 5427, 5435, 5443, 5451, 5462, 5467, 5472, 5477, 5482, - 5487, 5492, 5497, 5502, 5507, 5512, 5517, 5522, 5527, 5532, 5537, 5542, - 5547, 5553, 5558, 5563, 5568, 5573, 5578, 5583, 5588, 5596, 5604, 5612, - 5620, 5628, 5633, 5637, 5641, 5648, 5658, 5668, 5672, 5676, 5680, 5686, - 5693, 5697, 5702, 5706, 5711, 5715, 5720, 5724, 5729, 5734, 5739, 5744, - 5749, 5754, 5759, 5764, 5769, 5774, 5779, 5784, 5789, 5794, 5799, 5803, - 5807, 5813, 5817, 5822, 5828, 5836, 5841, 5846, 5853, 5858, 5863, 5870, - 5879, 5888, 5899, 5907, 5912, 5917, 5922, 5929, 5934, 5940, 5945, 5950, - 5955, 5960, 5965, 5970, 5978, 5984, 5989, 5993, 5998, 6003, 6008, 6013, - 6018, 6023, 6028, 6032, 6038, 6042, 6047, 6052, 6057, 6061, 6066, 6071, - 6076, 6081, 6085, 6090, 6094, 6099, 6104, 6109, 6114, 6120, 6125, 6131, - 6135, 6140, 6144, 6148, 6153, 6158, 6163, 6168, 6173, 6178, 6183, 6187, - 6193, 6197, 6202, 6207, 6212, 6216, 6221, 6226, 6231, 6236, 6240, 6245, - 6249, 6254, 6259, 6264, 6269, 6275, 6280, 6286, 6290, 6295, 6299, 6307, - 6312, 6317, 6322, 6329, 6334, 6340, 6345, 6350, 6355, 6360, 6365, 6370, - 6378, 6384, 6389, 6394, 6399, 6404, 6409, 6415, 6421, 6428, 6435, 6444, - 6453, 6460, 6467, 6476, 6485, 6490, 6495, 6500, 6505, 6510, 6515, 6520, - 6525, 6536, 6547, 6552, 6557, 6564, 6571, 6579, 6587, 6592, 6597, 6602, - 6607, 6611, 6615, 6619, 6625, 6631, 6635, 6642, 6647, 6657, 6667, 6673, - 6679, 6687, 6695, 6703, 6711, 6718, 6725, 6734, 6743, 6751, 6759, 6767, - 6775, 6783, 6791, 6799, 6807, 6814, 6821, 6827, 6833, 6841, 6849, 6856, - 6863, 6872, 6881, 6887, 6893, 6901, 6909, 6917, 6925, 6931, 6937, 6945, - 6953, 6961, 6969, 6976, 6983, 6991, 6999, 7007, 7015, 7020, 7025, 7032, - 7039, 7049, 7059, 7063, 7071, 7079, 7086, 7093, 7101, 7109, 7116, 7123, - 7131, 7139, 7146, 7153, 7161, 7169, 7174, 7181, 7188, 7195, 7202, 7208, - 7214, 7222, 7230, 7235, 7240, 7248, 7256, 7264, 7272, 7280, 7288, 7295, - 7302, 7310, 7318, 7326, 7334, 7341, 7348, 7354, 7360, 7369, 7378, 7385, - 7392, 7399, 7406, 7413, 7420, 7427, 7434, 7442, 7450, 7458, 7466, 7474, - 7482, 7492, 7502, 7509, 7516, 7523, 7530, 7537, 7544, 7551, 7558, 7565, - 7572, 7579, 7586, 7593, 7600, 7607, 7614, 7621, 7628, 7635, 7642, 7649, - 7656, 7663, 7670, 7675, 7680, 7685, 7690, 7695, 7700, 7705, 7710, 7715, - 7720, 7726, 7732, 7741, 7750, 7759, 7768, 7776, 7784, 7792, 7800, 7808, + 33, 35, 39, 41, 44, 46, 48, 50, 52, 54, 56, 59, 61, 64, 66, 68, 71, 74, + 77, 80, 84, 88, 93, 98, 103, 107, 112, 117, 122, 126, 131, 136, 140, 145, + 150, 154, 159, 164, 168, 172, 177, 181, 186, 191, 196, 201, 206, 209, + 213, 216, 220, 223, 227, 231, 236, 241, 246, 250, 255, 260, 265, 269, + 274, 279, 283, 288, 293, 297, 302, 307, 311, 315, 320, 324, 329, 334, + 339, 344, 349, 353, 356, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 366, 371, + 374, 377, 380, 383, 386, 389, 391, 394, 400, 408, 411, 415, 418, 420, + 423, 426, 429, 432, 436, 439, 442, 445, 447, 450, 456, 464, 471, 478, + 485, 490, 497, 503, 510, 517, 524, 532, 537, 545, 552, 558, 565, 572, + 580, 587, 595, 603, 608, 616, 623, 629, 636, 643, 650, 653, 659, 666, + 672, 679, 686, 693, 698, 704, 711, 717, 724, 731, 738, 746, 751, 759, + 766, 772, 779, 786, 794, 801, 809, 817, 822, 830, 837, 843, 850, 857, + 864, 867, 873, 880, 886, 893, 900, 907, 912, 920, 927, 934, 941, 948, + 955, 962, 969, 976, 984, 992, 1000, 1008, 1016, 1024, 1032, 1040, 1047, + 1054, 1061, 1068, 1075, 1082, 1089, 1096, 1103, 1110, 1117, 1124, 1132, + 1140, 1148, 1156, 1164, 1172, 1180, 1188, 1196, 1204, 1211, 1218, 1226, + 1234, 1242, 1250, 1258, 1266, 1274, 1282, 1290, 1296, 1301, 1306, 1314, + 1322, 1330, 1338, 1343, 1350, 1357, 1365, 1373, 1381, 1389, 1398, 1407, + 1414, 1421, 1428, 1435, 1443, 1451, 1459, 1467, 1478, 1483, 1488, 1495, + 1502, 1509, 1516, 1523, 1530, 1535, 1540, 1547, 1554, 1562, 1570, 1578, + 1586, 1593, 1600, 1608, 1616, 1624, 1632, 1640, 1648, 1656, 1664, 1672, + 1680, 1687, 1694, 1701, 1708, 1715, 1722, 1729, 1736, 1744, 1752, 1759, + 1766, 1773, 1780, 1788, 1796, 1804, 1812, 1820, 1827, 1834, 1842, 1850, + 1858, 1866, 1871, 1877, 1883, 1890, 1897, 1902, 1907, 1912, 1919, 1926, + 1933, 1940, 1948, 1956, 1963, 1969, 1974, 1979, 1986, 1993, 2000, 2005, + 2010, 2015, 2022, 2029, 2036, 2043, 2050, 2057, 2065, 2075, 2083, 2090, + 2097, 2102, 2107, 2114, 2121, 2125, 2130, 2135, 2140, 2148, 2157, 2164, + 2171, 2180, 2187, 2194, 2199, 2206, 2213, 2220, 2227, 2234, 2239, 2246, + 2253, 2261, 2266, 2271, 2276, 2286, 2290, 2296, 2302, 2308, 2314, 2322, + 2335, 2343, 2348, 2358, 2363, 2368, 2378, 2383, 2390, 2397, 2405, 2413, + 2420, 2427, 2434, 2441, 2451, 2461, 2470, 2479, 2489, 2499, 2509, 2519, + 2525, 2535, 2545, 2555, 2565, 2573, 2581, 2588, 2595, 2603, 2611, 2619, + 2627, 2634, 2641, 2651, 2661, 2669, 2677, 2685, 2690, 2700, 2705, 2712, + 2719, 2724, 2729, 2737, 2745, 2755, 2765, 2772, 2779, 2788, 2797, 2805, + 2813, 2822, 2831, 2839, 2847, 2856, 2865, 2874, 2883, 2893, 2903, 2911, + 2919, 2928, 2937, 2946, 2955, 2965, 2975, 2983, 2991, 3000, 3009, 3018, + 3027, 3036, 3045, 3050, 3055, 3063, 3071, 3081, 3089, 3094, 3099, 3106, + 3113, 3120, 3127, 3134, 3141, 3151, 3161, 3171, 3181, 3188, 3195, 3205, + 3215, 3223, 3231, 3239, 3247, 3255, 3262, 3269, 3276, 3282, 3289, 3296, + 3303, 3312, 3322, 3332, 3339, 3346, 3352, 3357, 3364, 3370, 3376, 3383, + 3390, 3401, 3411, 3418, 3425, 3432, 3439, 3445, 3450, 3457, 3463, 3468, + 3476, 3484, 3491, 3497, 3502, 3509, 3514, 3521, 3530, 3539, 3548, 3555, + 3561, 3567, 3572, 3579, 3586, 3593, 3600, 3607, 3612, 3617, 3626, 3634, + 3643, 3648, 3655, 3666, 3673, 3681, 3690, 3696, 3702, 3708, 3715, 3720, + 3726, 3737, 3746, 3755, 3763, 3771, 3781, 3786, 3793, 3800, 3805, 3817, + 3826, 3834, 3841, 3850, 3855, 3860, 3867, 3874, 3881, 3888, 3894, 3903, + 3911, 3916, 3924, 3930, 3938, 3946, 3952, 3958, 3964, 3971, 3979, 3985, + 3993, 4000, 4005, 4012, 4020, 4030, 4037, 4044, 4054, 4061, 4068, 4078, + 4085, 4092, 4099, 4105, 4111, 4121, 4134, 4139, 4146, 4151, 4155, 4161, + 4170, 4177, 4182, 4187, 4191, 4196, 4202, 4206, 4212, 4218, 4224, 4230, + 4238, 4243, 4248, 4253, 4258, 4264, 4266, 4271, 4275, 4281, 4287, 4293, + 4298, 4305, 4312, 4318, 4325, 4333, 4341, 4346, 4351, 4355, 4360, 4362, + 4364, 4367, 4369, 4372, 4377, 4382, 4388, 4393, 4397, 4401, 4406, 4415, + 4421, 4426, 4432, 4437, 4443, 4451, 4459, 4463, 4467, 4472, 4478, 4484, + 4490, 4496, 4501, 4508, 4516, 4524, 4529, 4535, 4542, 4549, 4556, 4563, + 4567, 4572, 4577, 4582, 4587, 4592, 4595, 4598, 4601, 4604, 4607, 4610, + 4614, 4618, 4624, 4627, 4632, 4638, 4644, 4647, 4652, 4658, 4662, 4668, + 4674, 4680, 4686, 4691, 4696, 4701, 4704, 4710, 4715, 4720, 4724, 4729, + 4735, 4741, 4744, 4748, 4752, 4756, 4759, 4762, 4767, 4771, 4778, 4782, + 4788, 4792, 4798, 4802, 4806, 4810, 4815, 4820, 4827, 4833, 4840, 4846, + 4852, 4858, 4861, 4865, 4869, 4873, 4877, 4882, 4887, 4891, 4895, 4901, + 4905, 4909, 4914, 4920, 4925, 4931, 4935, 4942, 4947, 4951, 4956, 4961, + 4967, 4970, 4974, 4979, 4984, 4993, 4999, 5004, 5008, 5013, 5017, 5022, + 5026, 5030, 5035, 5039, 5045, 5050, 5055, 5060, 5065, 5070, 5075, 5081, + 5087, 5093, 5099, 5104, 5110, 5116, 5122, 5127, 5132, 5139, 5146, 5150, + 5156, 5163, 0, 0, 5170, 5173, 5182, 5191, 5202, 5206, 0, 0, 0, 0, 5211, + 5214, 5219, 5227, 5232, 5240, 5248, 0, 5256, 0, 5264, 5272, 5280, 5291, + 5296, 5301, 5306, 5311, 5316, 5321, 5326, 5331, 5336, 5341, 5346, 5351, + 5356, 5361, 5366, 5371, 0, 5376, 5381, 5386, 5391, 5396, 5401, 5406, + 5411, 5419, 5427, 5435, 5443, 5451, 5459, 5470, 5475, 5480, 5485, 5490, + 5495, 5500, 5505, 5510, 5515, 5520, 5525, 5530, 5535, 5540, 5545, 5550, + 5555, 5561, 5566, 5571, 5576, 5581, 5586, 5591, 5596, 5604, 5612, 5620, + 5628, 5636, 5641, 5645, 5649, 5656, 5666, 5676, 5680, 5684, 5688, 5694, + 5701, 5705, 5710, 5714, 5719, 5723, 5728, 5732, 5737, 5742, 5747, 5752, + 5757, 5762, 5767, 5772, 5777, 5782, 5787, 5792, 5797, 5802, 5807, 5811, + 5815, 5821, 5825, 5830, 5836, 5844, 5849, 5854, 5861, 5866, 5871, 5878, + 5887, 5896, 5907, 5915, 5920, 5925, 5930, 5937, 5942, 5948, 5953, 5958, + 5963, 5968, 5973, 5978, 5986, 5992, 5997, 6001, 6006, 6011, 6016, 6021, + 6026, 6031, 6036, 6040, 6046, 6050, 6055, 6060, 6065, 6069, 6074, 6079, + 6084, 6089, 6093, 6098, 6102, 6107, 6112, 6117, 6122, 6128, 6133, 6139, + 6143, 6148, 6152, 6156, 6161, 6166, 6171, 6176, 6181, 6186, 6191, 6195, + 6201, 6205, 6210, 6215, 6220, 6224, 6229, 6234, 6239, 6244, 6248, 6253, + 6257, 6262, 6267, 6272, 6277, 6283, 6288, 6294, 6298, 6303, 6307, 6315, + 6320, 6325, 6330, 6337, 6342, 6348, 6353, 6358, 6363, 6368, 6373, 6378, + 6386, 6392, 6397, 6402, 6407, 6412, 6417, 6423, 6429, 6436, 6443, 6452, + 6461, 6468, 6475, 6484, 6493, 6498, 6503, 6508, 6513, 6518, 6523, 6528, + 6533, 6544, 6555, 6560, 6565, 6572, 6579, 6587, 6595, 6600, 6605, 6610, + 6615, 6619, 6623, 6627, 6633, 6639, 6643, 6650, 6655, 6665, 6675, 6681, + 6687, 6695, 6703, 6711, 6719, 6726, 6733, 6741, 6749, 6757, 6765, 6773, + 6781, 6789, 6797, 6805, 6813, 6820, 6827, 6833, 6839, 6847, 6855, 6862, + 6869, 6877, 6885, 6891, 6897, 6905, 6913, 6921, 6929, 6935, 6941, 6949, + 6957, 6965, 6973, 6980, 6987, 6995, 7003, 7011, 7019, 7024, 7029, 7036, + 7043, 7053, 7063, 7067, 7075, 7083, 7090, 7097, 7105, 7113, 7120, 7127, + 7135, 7143, 7150, 7157, 7165, 7173, 7178, 7185, 7192, 7199, 7206, 7212, + 7218, 7226, 7234, 7239, 7244, 7252, 7260, 7268, 7276, 7284, 7292, 7299, + 7306, 7314, 7322, 7330, 7338, 7345, 7352, 7358, 7364, 7373, 7382, 7389, + 7396, 7403, 7410, 7417, 7424, 7431, 7438, 7446, 7454, 7462, 7470, 7478, + 7486, 7496, 7506, 7513, 7520, 7527, 7534, 7541, 7548, 7555, 7562, 7569, + 7576, 7583, 7590, 7597, 7604, 7611, 7618, 7625, 7632, 7639, 7646, 7653, + 7660, 7667, 7674, 7679, 7684, 7689, 7694, 7699, 7704, 7709, 7714, 7719, + 7724, 7730, 7736, 7744, 7752, 7760, 7768, 7776, 7784, 7792, 7800, 7808, 7816, 7821, 7826, 7831, 7836, 7844, 0, 7852, 7857, 7862, 7867, 7872, 7877, 7882, 7887, 7892, 7896, 7901, 7906, 7911, 7916, 7921, 7926, 7931, 7936, 7941, 7946, 7951, 7956, 7961, 7966, 7971, 7976, 7981, 7986, 7991, @@ -15767,1088 +16893,1092 @@ static unsigned int phrasebook_offset2[] = { 9088, 9091, 9095, 9099, 9103, 9107, 9111, 9115, 9119, 9123, 9128, 9132, 9135, 9138, 9141, 9144, 9147, 9150, 9153, 9156, 9160, 9164, 9168, 9173, 9178, 9184, 9187, 9194, 9203, 9208, 9213, 9220, 9226, 9231, 9235, 9239, - 9243, 9247, 9251, 9255, 9259, 9263, 9267, 9271, 9276, 9281, 9288, 9294, - 9300, 9306, 9311, 9320, 9329, 9334, 9341, 9348, 9355, 9362, 9366, 9370, - 9374, 9381, 9391, 9395, 9399, 9403, 9410, 9418, 9422, 9426, 9433, 9437, - 9441, 9445, 9452, 9459, 9471, 9475, 9479, 9483, 9493, 9502, 9506, 9514, - 9521, 9528, 9537, 9548, 9556, 9560, 9569, 9580, 9588, 9601, 9609, 9617, - 9625, 9633, 9639, 9648, 9655, 9659, 9667, 9671, 9678, 9686, 9690, 9696, - 9703, 9710, 9714, 9722, 9726, 9733, 9737, 9745, 9749, 9757, 9765, 9772, - 9780, 9788, 9795, 9801, 9805, 9812, 9820, 9826, 9833, 9840, 9846, 9856, - 9864, 9871, 9877, 9881, 9884, 9888, 9894, 9902, 9906, 9912, 9918, 9925, - 9932, 9935, 9942, 9947, 9956, 9961, 9965, 9978, 9991, 9997, 10004, 10009, - 10015, 10020, 10026, 10036, 10043, 10052, 10062, 10068, 10073, 10078, - 10082, 10086, 10091, 10096, 10102, 10110, 10118, 10129, 10134, 10143, - 10152, 10159, 10165, 10171, 10177, 10183, 10189, 10195, 10201, 10207, - 10213, 10220, 10227, 10234, 10240, 10248, 10257, 10264, 10272, 10280, - 10286, 10292, 10297, 10305, 10313, 10323, 10333, 10337, 10343, 10349, 0, - 10355, 10360, 10365, 10372, 10377, 10382, 10389, 10394, 10403, 10408, - 10413, 10418, 10423, 10428, 10435, 10440, 10447, 10452, 10457, 10462, - 10467, 10472, 10478, 10482, 10487, 10494, 10499, 10504, 10509, 10514, - 10519, 10526, 10533, 10540, 10545, 10550, 10556, 10561, 10566, 10572, - 10577, 10582, 10590, 10598, 10603, 10608, 10614, 10619, 10624, 10628, - 10634, 10638, 10642, 10648, 10654, 10659, 10664, 10671, 10678, 10682, 0, - 0, 10686, 10693, 10700, 10707, 10717, 10729, 10740, 10756, 10768, 10779, - 10787, 10794, 10804, 10819, 10830, 10836, 10845, 10853, 10864, 10874, - 10882, 10893, 10900, 10908, 10919, 10925, 10931, 10939, 10947, 10955, - 10961, 10971, 10979, 10989, 10999, 11012, 11026, 11040, 11050, 11061, - 11072, 11085, 11098, 11112, 11124, 11136, 11149, 11162, 11174, 11187, - 11196, 11204, 11209, 11214, 11219, 11224, 11229, 11234, 11239, 11244, - 11249, 11254, 11259, 11264, 11269, 11274, 11279, 11284, 11289, 11294, - 11299, 11304, 11309, 11314, 11319, 11324, 11329, 11334, 11339, 11344, - 11349, 11354, 11359, 11364, 11368, 11373, 11378, 11383, 11388, 11393, - 11397, 11401, 11405, 11409, 11413, 11417, 11421, 11425, 11429, 11433, - 11437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11442, 11447, 11451, - 11455, 11459, 11463, 11467, 11471, 11475, 11479, 11483, 11487, 11492, - 11496, 11500, 11504, 11509, 11513, 11518, 11523, 11528, 11532, 11537, - 11542, 11547, 11552, 11557, 11562, 11567, 11572, 11577, 11581, 11586, - 11593, 11597, 11602, 11606, 11610, 11615, 11619, 11626, 11633, 11640, - 11647, 11655, 11663, 11672, 11680, 11687, 11694, 11702, 11708, 11714, - 11720, 11726, 11733, 11738, 11742, 11747, 0, 0, 0, 0, 0, 11751, 11756, - 11761, 11766, 11771, 11776, 11781, 11786, 11791, 11796, 11801, 11806, - 11811, 11816, 11821, 11826, 11831, 11836, 11841, 11846, 11851, 11856, - 11861, 11866, 11871, 11876, 11881, 11889, 11896, 11902, 11907, 11915, - 11922, 11928, 11935, 11941, 11946, 11953, 11960, 11966, 11971, 11976, - 11982, 11987, 11992, 11998, 0, 0, 12003, 12009, 12015, 12021, 12027, - 12033, 12039, 12044, 12052, 12058, 12064, 12070, 12076, 12082, 12090, 0, - 12096, 12101, 12106, 12111, 12116, 12121, 12126, 12131, 12136, 12141, - 12146, 12151, 12156, 12161, 12166, 12171, 12176, 12181, 12186, 12191, - 12196, 12201, 12206, 12211, 12216, 12221, 12226, 12231, 0, 0, 12236, 0, + 9243, 9247, 9251, 9255, 9260, 9264, 9269, 9273, 9278, 9283, 9290, 9296, + 9302, 9308, 9313, 9322, 9331, 9336, 9343, 9350, 9357, 9364, 9368, 9372, + 9376, 9383, 9393, 9397, 9401, 9405, 9412, 9420, 9424, 9428, 9435, 9439, + 9443, 9447, 9454, 9461, 9473, 9477, 9481, 9485, 9495, 9504, 9508, 9516, + 9523, 9530, 9539, 9550, 9558, 9562, 9571, 9582, 9590, 9603, 9611, 9619, + 9627, 9635, 9641, 9650, 9657, 9661, 9669, 9673, 9680, 9688, 9692, 9698, + 9705, 9712, 9716, 9724, 9728, 9735, 9739, 9747, 9751, 9759, 9767, 9774, + 9782, 9790, 9797, 9803, 9807, 9814, 9822, 9828, 9835, 9842, 9848, 9858, + 9866, 9873, 9879, 9883, 9886, 9890, 9896, 9904, 9908, 9914, 9920, 9927, + 9934, 9937, 9944, 9949, 9958, 9963, 9967, 9980, 9993, 9999, 10006, 10011, + 10017, 10022, 10028, 10038, 10045, 10054, 10064, 10070, 10075, 10080, + 10084, 10088, 10093, 10098, 10104, 10112, 10120, 10131, 10136, 10145, + 10154, 10161, 10167, 10173, 10179, 10185, 10191, 10197, 10204, 10210, + 10217, 10224, 10231, 10238, 10244, 10252, 10261, 10268, 10276, 10284, + 10290, 10296, 10302, 10310, 10318, 10328, 10338, 10342, 10348, 10354, 0, + 10360, 10365, 10370, 10377, 10382, 10387, 10394, 10399, 10408, 10413, + 10418, 10423, 10428, 10433, 10440, 10445, 10452, 10457, 10462, 10467, + 10472, 10477, 10483, 10487, 10492, 10499, 10504, 10509, 10514, 10519, + 10524, 10531, 10538, 10545, 10550, 10555, 10561, 10566, 10571, 10577, + 10582, 10587, 10595, 10603, 10608, 10613, 10619, 10624, 10629, 10633, + 10639, 10643, 10647, 10653, 10659, 10664, 10669, 10676, 10683, 10687, 0, + 0, 10691, 10698, 10705, 10712, 10722, 10734, 10745, 10761, 10773, 10784, + 10792, 10799, 10809, 10824, 10835, 10841, 10850, 10858, 10869, 10879, + 10887, 10898, 10905, 10913, 10924, 10930, 10936, 10944, 10952, 10960, + 10966, 10976, 10984, 10994, 11004, 11017, 11031, 11045, 11055, 11066, + 11077, 11090, 11103, 11117, 11129, 11141, 11154, 11167, 11179, 11192, + 11201, 11209, 11214, 11219, 11224, 11229, 11234, 11239, 11244, 11249, + 11254, 11259, 11264, 11269, 11274, 11279, 11284, 11289, 11294, 11299, + 11304, 11309, 11314, 11319, 11324, 11329, 11334, 11339, 11344, 11349, + 11354, 11359, 11364, 11369, 11373, 11378, 11383, 11388, 11393, 11398, + 11402, 11406, 11410, 11414, 11418, 11422, 11426, 11430, 11434, 11438, + 11442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11447, 11452, 11456, + 11460, 11464, 11468, 11472, 11476, 11481, 11485, 11490, 11494, 11499, + 11503, 11507, 11511, 11516, 11520, 11525, 11530, 11535, 11539, 11544, + 11549, 11554, 11559, 11564, 11569, 11574, 11579, 11584, 11588, 11593, + 11600, 11604, 11609, 11614, 11618, 11623, 11627, 11634, 11641, 11648, + 11655, 11663, 11671, 11680, 11688, 11695, 11702, 11710, 11716, 11722, + 11728, 11734, 11741, 11746, 11750, 11755, 0, 0, 0, 0, 0, 11759, 11764, + 11769, 11774, 11779, 11784, 11789, 11794, 11799, 11804, 11809, 11814, + 11819, 11824, 11829, 11834, 11839, 11844, 11849, 11854, 11859, 11864, + 11869, 11874, 11879, 11884, 11889, 11897, 11904, 11910, 11915, 11923, + 11930, 11936, 11943, 11949, 11954, 11961, 11968, 11974, 11979, 11984, + 11990, 11995, 12000, 12006, 0, 0, 12011, 12017, 12023, 12029, 12035, + 12041, 12047, 12052, 12060, 12066, 12072, 12078, 12084, 12090, 12098, 0, + 12104, 12109, 12114, 12119, 12124, 12129, 12134, 12139, 12144, 12149, + 12154, 12159, 12164, 12169, 12174, 12179, 12184, 12189, 12194, 12199, + 12204, 12209, 12214, 12219, 12224, 12229, 12234, 12239, 0, 0, 12244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12240, 12249, 12257, - 12264, 12272, 12284, 12291, 12298, 12305, 12317, 12328, 12335, 12343, - 12349, 12354, 12362, 12370, 12378, 12384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12248, 12257, 12265, + 12272, 12280, 12292, 12299, 12306, 12313, 12325, 12336, 12343, 12351, + 12357, 12362, 12370, 12378, 12386, 12392, 12402, 12410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12394, 12399, 12404, 12409, - 12414, 12419, 12424, 12429, 12434, 12439, 12444, 12449, 12454, 12459, - 12464, 12469, 12474, 12480, 12486, 12492, 12497, 12502, 12507, 12512, - 12518, 12527, 12535, 12541, 12549, 12555, 12559, 12563, 12567, 12572, - 12575, 12579, 12582, 12586, 12589, 12593, 12597, 12601, 12606, 12611, - 12614, 12618, 12623, 12628, 12631, 12635, 12638, 12642, 12646, 12650, - 12654, 12658, 12662, 12666, 12670, 12674, 12678, 12682, 12686, 12690, - 12694, 12698, 12702, 12706, 12710, 12713, 12717, 12720, 12724, 12728, - 12732, 12735, 12738, 12742, 12746, 12750, 12754, 12758, 12762, 12766, - 12770, 12774, 12777, 12782, 12787, 12791, 12795, 12800, 12804, 12809, - 12813, 12818, 12823, 12829, 12835, 12841, 12845, 12850, 12856, 12862, - 12866, 12871, 12875, 12881, 12886, 12889, 12895, 12901, 12906, 12911, - 12918, 12923, 12928, 12932, 12936, 12940, 12944, 12948, 12952, 12956, - 12960, 12965, 12970, 12975, 12981, 12984, 12988, 12992, 12995, 12998, - 13001, 13004, 13007, 13010, 13013, 13016, 13019, 13023, 13030, 13035, - 13039, 13043, 13047, 13051, 13055, 13061, 13065, 13069, 13073, 13077, - 13083, 13087, 13091, 13094, 13098, 13102, 0, 13106, 13109, 13113, 13116, - 13120, 13123, 13127, 13131, 0, 0, 13135, 13138, 0, 0, 13142, 13145, - 13149, 13152, 13156, 13160, 13164, 13168, 13172, 13176, 13180, 13184, - 13188, 13192, 13196, 13200, 13204, 13208, 13212, 13216, 13220, 13224, 0, - 13227, 13230, 13234, 13238, 13242, 13245, 13248, 0, 13252, 0, 0, 0, - 13256, 13260, 13264, 13268, 0, 0, 13271, 13275, 13279, 13284, 13288, - 13293, 13297, 13302, 13307, 0, 0, 13313, 13317, 0, 0, 13322, 13326, - 13331, 13335, 0, 0, 0, 0, 0, 0, 0, 0, 13341, 0, 0, 0, 0, 13347, 13351, 0, - 13355, 13359, 13364, 13369, 13374, 0, 0, 13380, 13384, 13387, 13390, - 13393, 13396, 13399, 13402, 13405, 13408, 13411, 13420, 13429, 13433, - 13437, 13443, 13449, 13455, 13461, 13475, 13482, 13485, 0, 0, 0, 0, 0, - 13489, 13496, 13501, 0, 13506, 13510, 13515, 13519, 13524, 13528, 0, 0, - 0, 0, 13533, 13538, 0, 0, 13543, 13548, 13553, 13557, 13562, 13567, - 13572, 13577, 13582, 13587, 13592, 13597, 13602, 13607, 13612, 13617, - 13622, 13627, 13632, 13637, 13642, 13647, 0, 13651, 13655, 13660, 13665, - 13670, 13674, 13678, 0, 13683, 13688, 0, 13693, 13698, 0, 13703, 13708, - 0, 0, 13712, 0, 13717, 13723, 13728, 13734, 13739, 0, 0, 0, 0, 13745, - 13751, 0, 0, 13757, 13763, 13769, 0, 0, 0, 13774, 0, 0, 0, 0, 0, 0, 0, - 13779, 13784, 13789, 13794, 0, 13799, 0, 0, 0, 0, 0, 0, 0, 13804, 13809, - 13813, 13817, 13821, 13825, 13829, 13833, 13837, 13841, 13845, 13849, - 13853, 13857, 13861, 13867, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13872, - 13876, 13880, 0, 13884, 13887, 13891, 13894, 13898, 13901, 13905, 13909, - 13913, 0, 13918, 13921, 13925, 0, 13930, 13933, 13937, 13940, 13944, - 13948, 13952, 13956, 13960, 13964, 13968, 13972, 13976, 13980, 13984, - 13988, 13992, 13996, 14000, 14004, 14008, 14012, 0, 14015, 14018, 14022, - 14026, 14030, 14033, 14036, 0, 14040, 14044, 0, 14048, 14052, 14056, - 14060, 14064, 0, 0, 14067, 14071, 14075, 14080, 14084, 14089, 14093, - 14098, 14103, 14109, 0, 14115, 14119, 14124, 0, 14130, 14134, 14139, 0, - 0, 14143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14146, 14151, - 14156, 14161, 0, 0, 14167, 14171, 14174, 14177, 14180, 14183, 14186, - 14189, 14192, 14195, 14198, 14202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 14206, 14210, 14214, 0, 14218, 14221, 14225, 14228, 14232, 14235, - 14239, 14243, 0, 0, 14247, 14250, 0, 0, 14254, 14257, 14261, 14264, - 14268, 14272, 14276, 14280, 14284, 14288, 14292, 14296, 14300, 14304, - 14308, 14312, 14316, 14320, 14324, 14328, 14332, 14336, 0, 14339, 14342, - 14346, 14350, 14354, 14357, 14360, 0, 14364, 14368, 0, 14372, 14376, - 14380, 14384, 14388, 0, 0, 14391, 14395, 14399, 14404, 14408, 14413, - 14417, 14422, 14427, 0, 0, 14433, 14437, 0, 0, 14442, 14446, 14451, 0, 0, - 0, 0, 0, 0, 0, 0, 14455, 14461, 0, 0, 0, 0, 14467, 14471, 0, 14475, - 14479, 14484, 14489, 14494, 0, 0, 14500, 14504, 14507, 14510, 14513, - 14516, 14519, 14522, 14525, 14528, 14531, 14534, 14538, 14544, 14550, - 14556, 14562, 14568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14574, 14578, 0, - 14582, 14585, 14589, 14592, 14596, 14599, 0, 0, 0, 14603, 14606, 14610, - 0, 14614, 14617, 14621, 14625, 0, 0, 0, 14628, 14632, 0, 14636, 0, 14640, - 14644, 0, 0, 0, 14648, 14652, 0, 0, 0, 14656, 14659, 14663, 0, 0, 0, - 14666, 14669, 14672, 14676, 14680, 14684, 14688, 14692, 14696, 14700, - 14704, 14708, 0, 0, 0, 0, 14711, 14716, 14720, 14725, 14729, 0, 0, 0, - 14734, 14738, 14743, 0, 14748, 14752, 14757, 14762, 0, 0, 14766, 0, 0, 0, - 0, 0, 0, 14769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14775, 14779, - 14782, 14785, 14788, 14791, 14794, 14797, 14800, 14803, 14806, 14810, - 14815, 14820, 14824, 14828, 14832, 14836, 14840, 14845, 14849, 0, 0, 0, - 0, 0, 14852, 14858, 14862, 14866, 0, 14870, 14873, 14877, 14880, 14884, - 14887, 14891, 14895, 0, 14899, 14902, 14906, 0, 14910, 14913, 14917, - 14921, 14924, 14928, 14932, 14936, 14940, 14944, 14948, 14952, 14956, - 14960, 14964, 14968, 14972, 14976, 14980, 14984, 14988, 14992, 14996, 0, - 14999, 15002, 15006, 15010, 15014, 15017, 15020, 15024, 15028, 15032, - 15036, 15040, 15044, 15048, 15052, 15056, 0, 0, 0, 15059, 15063, 15068, - 15072, 15077, 15081, 15086, 15091, 0, 15097, 15101, 15106, 0, 15111, - 15115, 15120, 15125, 0, 0, 0, 0, 0, 0, 0, 15129, 15133, 0, 15139, 15143, - 0, 0, 0, 0, 0, 0, 15147, 15152, 15157, 15162, 0, 0, 15168, 15172, 15175, - 15178, 15181, 15184, 15187, 15190, 15193, 15196, 0, 0, 0, 0, 0, 0, 0, 0, - 15199, 15212, 15224, 15236, 15248, 15260, 15272, 15284, 0, 15288, 15292, - 15296, 0, 15300, 15303, 15307, 15310, 15314, 15317, 15321, 15325, 0, - 15329, 15332, 15336, 0, 15340, 15343, 15347, 15351, 15354, 15358, 15362, - 15366, 15370, 15374, 15378, 15382, 15386, 15390, 15394, 15398, 15402, - 15406, 15410, 15414, 15418, 15422, 15426, 0, 15429, 15432, 15436, 15440, - 15444, 15447, 15450, 15454, 15458, 15462, 0, 15466, 15470, 15474, 15478, - 15482, 0, 0, 15485, 15489, 15493, 15498, 15502, 15507, 15511, 15516, - 15521, 0, 15527, 15531, 15536, 0, 15541, 15545, 15550, 15555, 0, 0, 0, 0, - 0, 0, 0, 15559, 15563, 0, 0, 0, 0, 0, 0, 0, 15569, 0, 15573, 15578, - 15583, 15588, 0, 0, 15594, 15598, 15601, 15604, 15607, 15610, 15613, - 15616, 15619, 15622, 0, 15625, 15629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15633, 15637, 15641, 0, 15645, 15648, 15652, 15655, 15659, 15662, - 15666, 15670, 0, 15674, 15677, 15681, 0, 15685, 15688, 15692, 15696, - 15699, 15703, 15707, 15711, 15715, 15719, 15723, 15727, 15731, 15735, - 15739, 15743, 15747, 15751, 15755, 15759, 15763, 15767, 15771, 15774, - 15778, 15781, 15785, 15789, 15793, 15796, 15799, 15803, 15807, 15811, - 15815, 15819, 15823, 15827, 15831, 15835, 15838, 0, 0, 15842, 15846, - 15851, 15855, 15860, 15864, 15869, 15874, 0, 15880, 15884, 15889, 0, - 15894, 15898, 15903, 15908, 15912, 0, 0, 0, 0, 0, 0, 0, 0, 15917, 0, 0, - 0, 0, 0, 0, 0, 0, 15923, 15928, 15933, 15938, 0, 0, 15944, 15948, 15951, - 15954, 15957, 15960, 15963, 15966, 15969, 15972, 15975, 15979, 15984, - 15989, 15995, 16001, 0, 0, 0, 16007, 16011, 16017, 16023, 16029, 16034, - 16040, 0, 0, 16046, 16050, 0, 16054, 16058, 16062, 16066, 16070, 16074, - 16078, 16082, 16086, 16090, 16094, 16098, 16102, 16106, 16110, 16114, - 16118, 16122, 0, 0, 0, 16126, 16132, 16138, 16144, 16150, 16156, 16162, - 16168, 16174, 16180, 16186, 16192, 16200, 16206, 16212, 16218, 16224, - 16230, 16236, 16242, 16248, 16254, 16260, 16266, 0, 16272, 16278, 16284, - 16290, 16296, 16302, 16306, 16312, 16316, 0, 16320, 0, 0, 16326, 16330, - 16336, 16342, 16348, 16352, 16358, 0, 0, 0, 16362, 0, 0, 0, 0, 16366, - 16371, 16378, 16385, 16392, 16399, 0, 16406, 0, 16413, 16418, 16423, - 16430, 16437, 16446, 16457, 16466, 0, 0, 0, 0, 0, 0, 16471, 16477, 16482, - 16487, 16492, 16497, 16502, 16507, 16512, 16517, 0, 0, 16522, 16529, - 16536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16541, 16547, 16553, 16559, - 16565, 16571, 16577, 16583, 16589, 16595, 16601, 16607, 16613, 16619, - 16625, 16631, 16637, 16643, 16649, 16655, 16661, 16667, 16673, 16679, - 16685, 16691, 16697, 16703, 16709, 16715, 16721, 16727, 16733, 16738, - 16744, 16750, 16754, 16760, 16764, 16770, 16776, 16782, 16788, 16794, - 16800, 16805, 16811, 16815, 16820, 16826, 16832, 16838, 16843, 16849, - 16855, 16861, 16866, 16872, 0, 0, 0, 0, 16876, 16882, 16887, 16893, - 16898, 16906, 16914, 16918, 16922, 16926, 16932, 16938, 16944, 16950, - 16954, 16958, 16962, 16966, 16970, 16973, 16976, 16979, 16982, 16985, - 16988, 16991, 16994, 16997, 17001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12417, 12423, 12428, + 12433, 12438, 12443, 12448, 12453, 12458, 12463, 12468, 12473, 12478, + 12483, 12487, 12491, 12495, 12500, 12506, 12512, 12518, 12523, 12528, + 12533, 12538, 12544, 12553, 12561, 12567, 12575, 12581, 12585, 12589, + 12593, 12598, 12601, 12605, 12608, 12612, 12615, 12619, 12623, 12627, + 12632, 12637, 12640, 12644, 12649, 12654, 12657, 12661, 12664, 12668, + 12672, 12676, 12680, 12684, 12688, 12692, 12696, 12700, 12704, 12708, + 12712, 12716, 12720, 12724, 12728, 12732, 12736, 12740, 12744, 12747, + 12751, 12755, 12759, 12762, 12765, 12769, 12773, 12777, 12781, 12785, + 12789, 12793, 12797, 12801, 12804, 12809, 12814, 12818, 12822, 12827, + 12831, 12836, 12840, 12845, 12850, 12856, 12862, 12868, 12872, 12877, + 12883, 12889, 12893, 12898, 12902, 12908, 12913, 12916, 12922, 12928, + 12933, 12938, 12945, 12950, 12955, 12959, 12963, 12967, 12971, 12975, + 12979, 12983, 12987, 12992, 12997, 13002, 13008, 13011, 13015, 13019, + 13022, 13025, 13028, 13031, 13034, 13037, 13041, 13044, 13048, 13052, + 13059, 13064, 13068, 13072, 13076, 13080, 13084, 13090, 13094, 13098, + 13102, 13106, 13112, 13116, 13120, 13123, 13127, 13131, 0, 13135, 13138, + 13142, 13145, 13149, 13152, 13156, 13160, 0, 0, 13164, 13167, 0, 0, + 13171, 13174, 13178, 13181, 13185, 13189, 13193, 13197, 13201, 13205, + 13209, 13213, 13217, 13221, 13225, 13229, 13233, 13237, 13241, 13245, + 13249, 13253, 0, 13257, 13260, 13264, 13268, 13272, 13275, 13278, 0, + 13282, 0, 0, 0, 13286, 13290, 13294, 13298, 0, 0, 13301, 13305, 13309, + 13314, 13318, 13323, 13327, 13332, 13337, 0, 0, 13343, 13347, 0, 0, + 13352, 13356, 13361, 13365, 0, 0, 0, 0, 0, 0, 0, 0, 13371, 0, 0, 0, 0, + 13377, 13381, 0, 13385, 13389, 13394, 13399, 13404, 0, 0, 13410, 13414, + 13417, 13420, 13423, 13426, 13429, 13432, 13436, 13439, 13443, 13451, + 13460, 13464, 13468, 13474, 13480, 13486, 13492, 13506, 13513, 13516, 0, + 0, 0, 0, 0, 13520, 13527, 13532, 0, 13537, 13541, 13546, 13550, 13555, + 13559, 0, 0, 0, 0, 13564, 13569, 0, 0, 13574, 13579, 13584, 13588, 13593, + 13598, 13603, 13608, 13613, 13618, 13623, 13628, 13633, 13638, 13643, + 13648, 13653, 13658, 13663, 13668, 13673, 13678, 0, 13683, 13687, 13692, + 13697, 13702, 13706, 13710, 0, 13715, 13720, 0, 13725, 13730, 0, 13735, + 13740, 0, 0, 13744, 0, 13749, 13755, 13760, 13766, 13771, 0, 0, 0, 0, + 13777, 13783, 0, 0, 13789, 13795, 13801, 0, 0, 0, 13806, 0, 0, 0, 0, 0, + 0, 0, 13811, 13816, 13821, 13826, 0, 13831, 0, 0, 0, 0, 0, 0, 0, 13836, + 13841, 13845, 13849, 13853, 13857, 13861, 13865, 13870, 13874, 13879, + 13883, 13887, 13891, 13895, 13901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 13906, 13911, 13916, 0, 13921, 13925, 13930, 13934, 13939, 13943, 13948, + 13953, 13958, 0, 13964, 13968, 13973, 0, 13979, 13983, 13988, 13992, + 13997, 14002, 14007, 14012, 14017, 14022, 14027, 14032, 14037, 14042, + 14047, 14052, 14057, 14062, 14067, 14072, 14077, 14082, 0, 14087, 14091, + 14096, 14101, 14106, 14110, 14114, 0, 14119, 14124, 0, 14129, 14134, + 14139, 14144, 14149, 0, 0, 14153, 14158, 14163, 14169, 14174, 14180, + 14185, 14191, 14197, 14204, 0, 14211, 14216, 14222, 0, 14229, 14234, + 14240, 0, 0, 14245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14249, + 14255, 14261, 14267, 0, 0, 14274, 14279, 14283, 14287, 14291, 14295, + 14299, 14303, 14308, 14312, 14317, 14322, 0, 0, 0, 0, 0, 0, 0, 14327, 0, + 0, 0, 0, 0, 0, 0, 14332, 14336, 14340, 0, 14344, 14347, 14351, 14354, + 14358, 14361, 14365, 14369, 0, 0, 14373, 14376, 0, 0, 14380, 14383, + 14387, 14390, 14394, 14398, 14402, 14406, 14410, 14414, 14418, 14422, + 14426, 14430, 14434, 14438, 14442, 14446, 14450, 14454, 14458, 14462, 0, + 14466, 14469, 14473, 14477, 14481, 14484, 14487, 0, 14491, 14495, 0, + 14499, 14503, 14507, 14511, 14515, 0, 0, 14518, 14522, 14526, 14531, + 14535, 14540, 14544, 14549, 14554, 0, 0, 14560, 14564, 0, 0, 14569, + 14573, 14578, 0, 0, 0, 0, 0, 0, 0, 0, 14582, 14588, 0, 0, 0, 0, 14594, + 14598, 0, 14602, 14606, 14611, 14616, 14621, 0, 0, 14627, 14631, 14634, + 14637, 14640, 14643, 14646, 14649, 14653, 14656, 14660, 14663, 14667, + 14673, 14679, 14685, 14691, 14697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14703, + 14707, 0, 14711, 14714, 14718, 14721, 14725, 14728, 0, 0, 0, 14732, + 14735, 14739, 0, 14743, 14746, 14750, 14754, 0, 0, 0, 14757, 14761, 0, + 14765, 0, 14769, 14773, 0, 0, 0, 14777, 14781, 0, 0, 0, 14785, 14789, + 14793, 0, 0, 0, 14796, 14799, 14802, 14806, 14810, 14814, 14818, 14822, + 14826, 14830, 14834, 14838, 0, 0, 0, 0, 14841, 14846, 14850, 14855, + 14859, 0, 0, 0, 14864, 14868, 14873, 0, 14878, 14882, 14887, 14892, 0, 0, + 14896, 0, 0, 0, 0, 0, 0, 14899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14905, 14909, 14912, 14915, 14918, 14921, 14924, 14927, 14931, 14934, + 14938, 14942, 14947, 14952, 14956, 14960, 14964, 14968, 14972, 14977, + 14981, 0, 0, 0, 0, 0, 14984, 14990, 14994, 14998, 0, 15002, 15005, 15009, + 15012, 15016, 15019, 15023, 15027, 0, 15031, 15034, 15038, 0, 15042, + 15045, 15049, 15053, 15056, 15060, 15064, 15068, 15072, 15076, 15080, + 15084, 15088, 15092, 15096, 15100, 15104, 15108, 15112, 15116, 15120, + 15124, 15128, 0, 15132, 15135, 15139, 15143, 15147, 15150, 15153, 15157, + 15161, 15165, 15169, 15173, 15177, 15181, 15185, 15189, 0, 0, 0, 15192, + 15196, 15201, 15205, 15210, 15214, 15219, 15224, 0, 15230, 15234, 15239, + 0, 15244, 15248, 15253, 15258, 0, 0, 0, 0, 0, 0, 0, 15262, 15266, 0, + 15272, 15276, 15280, 0, 0, 0, 0, 0, 15284, 15289, 15294, 15299, 0, 0, + 15305, 15309, 15312, 15315, 15318, 15321, 15324, 15327, 15331, 15334, 0, + 0, 0, 0, 0, 0, 0, 0, 15338, 15351, 15363, 15375, 15387, 15399, 15411, + 15423, 0, 15427, 15431, 15435, 0, 15439, 15442, 15446, 15449, 15453, + 15456, 15460, 15464, 0, 15468, 15471, 15475, 0, 15479, 15482, 15486, + 15490, 15493, 15497, 15501, 15505, 15509, 15513, 15517, 15521, 15525, + 15529, 15533, 15537, 15541, 15545, 15549, 15553, 15557, 15561, 15565, 0, + 15569, 15572, 15576, 15580, 15584, 15587, 15590, 15594, 15598, 15602, 0, + 15606, 15610, 15614, 15618, 15622, 0, 0, 15625, 15629, 15633, 15638, + 15642, 15647, 15651, 15656, 15661, 0, 15667, 15671, 15676, 0, 15681, + 15685, 15690, 15695, 0, 0, 0, 0, 0, 0, 0, 15699, 15703, 0, 0, 0, 0, 0, 0, + 0, 15709, 0, 15713, 15718, 15723, 15728, 0, 0, 15734, 15738, 15741, + 15744, 15747, 15750, 15753, 15756, 15760, 15763, 0, 15767, 15771, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15775, 15779, 15783, 0, 15787, 15790, + 15794, 15797, 15801, 15804, 15808, 15812, 0, 15816, 15819, 15823, 0, + 15827, 15830, 15834, 15838, 15841, 15845, 15849, 15853, 15857, 15861, + 15865, 15869, 15873, 15877, 15881, 15885, 15889, 15893, 15897, 15901, + 15905, 15909, 15913, 15917, 15921, 15924, 15928, 15932, 15936, 15939, + 15942, 15946, 15950, 15954, 15958, 15962, 15966, 15970, 15974, 15978, + 15981, 0, 0, 15985, 15989, 15994, 15998, 16003, 16007, 16012, 16017, 0, + 16023, 16027, 16032, 0, 16037, 16041, 16046, 16051, 16055, 0, 0, 0, 0, 0, + 0, 0, 0, 16060, 0, 0, 0, 0, 0, 0, 0, 16066, 16072, 16077, 16082, 16087, + 0, 0, 16093, 16097, 16100, 16103, 16106, 16109, 16112, 16115, 16119, + 16122, 16126, 16130, 16135, 16140, 16146, 16152, 0, 0, 0, 16158, 16162, + 16168, 16174, 16180, 16185, 16191, 0, 0, 16197, 16201, 0, 16205, 16209, + 16213, 16217, 16221, 16225, 16229, 16233, 16237, 16241, 16245, 16249, + 16253, 16257, 16261, 16265, 16269, 16273, 0, 0, 0, 16277, 16283, 16289, + 16295, 16301, 16307, 16313, 16319, 16325, 16331, 16337, 16343, 16351, + 16357, 16363, 16369, 16375, 16381, 16387, 16393, 16399, 16405, 16411, + 16417, 0, 16423, 16429, 16435, 16441, 16447, 16453, 16457, 16463, 16467, + 0, 16471, 0, 0, 16477, 16481, 16487, 16493, 16499, 16503, 16509, 0, 0, 0, + 16513, 0, 0, 0, 0, 16517, 16522, 16529, 16536, 16543, 16550, 0, 16557, 0, + 16564, 16569, 16574, 16581, 16588, 16597, 16608, 16617, 0, 0, 0, 0, 0, 0, + 16622, 16628, 16633, 16638, 16643, 16648, 16653, 16658, 16664, 16669, 0, + 0, 16675, 16682, 16689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16694, 16701, + 16708, 16715, 16722, 16729, 16736, 16743, 16750, 16757, 16764, 16771, + 16778, 16785, 16792, 16799, 16806, 16813, 16820, 16827, 16834, 16841, + 16848, 16855, 16862, 16869, 16876, 16883, 16890, 16897, 16904, 16911, + 16918, 16924, 16931, 16938, 16943, 16950, 16955, 16962, 16969, 16976, + 16983, 16990, 16997, 17003, 17010, 17015, 17021, 17028, 17035, 17042, + 17048, 17055, 17062, 17069, 17075, 17082, 0, 0, 0, 0, 17087, 17094, + 17100, 17107, 17113, 17122, 17131, 17136, 17141, 17146, 17153, 17160, + 17167, 17174, 17179, 17184, 17189, 17194, 17199, 17203, 17207, 17211, + 17215, 17219, 17223, 17228, 17232, 17237, 17242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17005, 17010, 0, 17017, 0, 0, 17024, 17029, 0, 17034, 0, 0, 17041, 0, 0, - 0, 0, 0, 0, 17046, 17051, 17055, 17062, 0, 17069, 17074, 17079, 17084, - 17091, 17098, 17105, 0, 17112, 17117, 17122, 0, 17129, 0, 17136, 0, 0, - 17141, 17148, 0, 17155, 17159, 17166, 17170, 17175, 17183, 17189, 17195, - 17200, 17206, 17212, 17218, 17223, 0, 17229, 17237, 17244, 0, 0, 17251, - 17256, 17262, 17267, 17273, 0, 17279, 0, 17285, 17292, 17299, 17306, - 17313, 17318, 0, 0, 17322, 17327, 17331, 17335, 17339, 17343, 17347, - 17351, 17355, 17359, 0, 0, 17363, 17369, 17375, 17382, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17247, 17252, 0, 17259, 0, 0, 17266, 17271, 0, 17276, 0, + 0, 17283, 0, 0, 0, 0, 0, 0, 17288, 17293, 17297, 17304, 0, 17311, 17316, + 17321, 17326, 17333, 17340, 17347, 0, 17354, 17359, 17364, 0, 17371, 0, + 17378, 0, 0, 17383, 17390, 0, 17397, 17401, 17408, 17412, 17417, 17425, + 17431, 17437, 17442, 17448, 17454, 17460, 17465, 0, 17471, 17479, 17486, + 0, 0, 17493, 17498, 17504, 17509, 17515, 0, 17521, 0, 17527, 17534, + 17541, 17548, 17555, 17560, 0, 0, 17564, 17569, 17573, 17577, 17581, + 17585, 17589, 17593, 17598, 17602, 0, 0, 17607, 17613, 17619, 17626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17389, 17393, 17404, 17419, 17434, 17444, 17455, 17468, 17479, - 17485, 17493, 17503, 17509, 17517, 17521, 17527, 17533, 17541, 17551, - 17559, 17572, 17578, 17586, 17594, 17606, 17613, 17621, 17629, 17637, - 17645, 17653, 17661, 17671, 17675, 17678, 17681, 17684, 17687, 17690, - 17693, 17696, 17699, 17702, 17706, 17710, 17714, 17718, 17722, 17726, - 17730, 17734, 17738, 17743, 17749, 17759, 17773, 17783, 17789, 17795, - 17803, 17811, 17819, 17827, 17833, 17839, 17842, 17846, 17850, 17854, - 17858, 17862, 17866, 0, 17870, 17874, 17878, 17882, 17886, 17890, 17894, - 17898, 17902, 17906, 17910, 17913, 17916, 17920, 17924, 17928, 17931, - 17935, 17939, 17943, 17947, 17951, 17955, 17959, 17963, 17966, 17970, - 17974, 17978, 17982, 17986, 17989, 17992, 17996, 18002, 18006, 0, 0, 0, - 0, 18010, 18015, 18019, 18024, 18028, 18033, 18038, 18044, 18049, 18055, - 18059, 18064, 18068, 18073, 18083, 18089, 18095, 18102, 18112, 18118, - 18122, 18126, 18132, 18138, 18146, 18152, 18160, 18168, 18176, 18186, - 18194, 18204, 18209, 18215, 18221, 18227, 18233, 18239, 18245, 0, 18251, - 18257, 18263, 18269, 18275, 18281, 18287, 18293, 18299, 18305, 18311, - 18316, 18321, 18327, 18333, 18339, 18344, 18350, 18356, 18362, 18368, - 18374, 18380, 18386, 18392, 18397, 18403, 18409, 18415, 18421, 18427, - 18432, 18437, 18443, 18451, 18458, 0, 18466, 18473, 18486, 18493, 18500, - 18508, 18516, 18522, 18528, 18534, 18544, 18549, 18555, 18565, 18575, 0, - 18585, 18595, 18603, 18615, 18627, 18633, 18647, 18662, 18667, 18672, - 18680, 18688, 18696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18704, 18707, - 18711, 18715, 18719, 18723, 18727, 18731, 18735, 18739, 18743, 18747, - 18751, 18755, 18759, 18763, 18767, 18771, 18775, 18779, 18783, 18786, - 18789, 18793, 18797, 18801, 18804, 18807, 18811, 18815, 18819, 18823, - 18826, 18830, 18833, 18838, 18841, 18845, 18848, 18852, 18855, 18860, - 18863, 18867, 18874, 18879, 18883, 18888, 18892, 18897, 18901, 18906, - 18913, 18919, 18924, 18928, 18932, 18936, 18940, 18944, 18949, 18955, - 18961, 18966, 18972, 18976, 18979, 18982, 18985, 18988, 18991, 18994, - 18997, 19000, 19003, 19009, 19013, 19017, 19021, 19025, 19029, 19033, - 19037, 19041, 19046, 19050, 19055, 19060, 19066, 19071, 19077, 19083, - 19089, 19095, 19101, 19108, 19115, 19123, 19131, 19140, 19149, 19160, - 19170, 19180, 19191, 19202, 19212, 19222, 19232, 19242, 19252, 19262, - 19272, 19282, 19290, 19297, 19303, 19310, 19315, 19321, 19327, 19333, - 19339, 19345, 19351, 19356, 19362, 19368, 19374, 19380, 19385, 19393, - 19400, 19406, 19413, 19421, 19427, 19433, 19439, 19445, 19453, 19461, - 19471, 19479, 19487, 19493, 19498, 19503, 19508, 19513, 19518, 19523, - 19528, 19533, 19538, 19544, 19550, 19556, 19563, 19568, 19574, 19579, - 19584, 19589, 19594, 19599, 19604, 19609, 19614, 19619, 19624, 19629, - 19634, 19639, 19644, 19649, 19654, 19659, 19664, 19669, 19674, 19679, - 19684, 19689, 19694, 19699, 19704, 19709, 19714, 19719, 19724, 19729, - 19734, 19739, 19744, 19749, 19754, 19759, 0, 19764, 0, 0, 0, 0, 0, 19769, - 0, 0, 19774, 19778, 19782, 19786, 19790, 19794, 19798, 19802, 19806, - 19810, 19814, 19818, 19822, 19826, 19830, 19834, 19838, 19842, 19846, - 19850, 19854, 19858, 19862, 19866, 19870, 19874, 19878, 19882, 19886, - 19890, 19894, 19898, 19902, 19906, 19910, 19914, 19918, 19922, 19926, - 19930, 19934, 19938, 19943, 19947, 19952, 19957, 19961, 19966, 19971, - 19975, 19979, 19983, 19987, 19991, 19995, 19999, 20003, 20007, 20011, - 20015, 20019, 20023, 20027, 20031, 20035, 20039, 20043, 20047, 20051, + 0, 0, 0, 0, 0, 0, 0, 17633, 17637, 17648, 17663, 17678, 17688, 17699, + 17712, 17723, 17729, 17737, 17747, 17753, 17761, 17765, 17771, 17777, + 17785, 17795, 17803, 17816, 17822, 17830, 17838, 17850, 17857, 17865, + 17873, 17881, 17889, 17897, 17905, 17915, 17919, 17922, 17925, 17928, + 17931, 17934, 17937, 17941, 17944, 17948, 17952, 17956, 17960, 17964, + 17968, 17972, 17977, 17981, 17986, 17991, 17997, 18007, 18021, 18031, + 18037, 18043, 18051, 18059, 18067, 18075, 18081, 18087, 18090, 18094, + 18098, 18102, 18106, 18110, 18114, 0, 18118, 18122, 18126, 18130, 18134, + 18138, 18142, 18146, 18150, 18154, 18158, 18162, 18165, 18169, 18173, + 18177, 18180, 18184, 18188, 18192, 18196, 18200, 18204, 18208, 18212, + 18215, 18219, 18223, 18227, 18231, 18235, 18238, 18241, 18245, 18251, + 18255, 0, 0, 0, 0, 18259, 18264, 18268, 18273, 18277, 18282, 18287, + 18293, 18298, 18304, 18308, 18313, 18317, 18322, 18332, 18338, 18344, + 18351, 18361, 18367, 18371, 18375, 18381, 18387, 18395, 18401, 18409, + 18417, 18425, 18435, 18443, 18453, 18458, 18464, 18470, 18476, 18482, + 18488, 18494, 0, 18500, 18506, 18512, 18518, 18524, 18530, 18536, 18542, + 18548, 18554, 18560, 18566, 18571, 18577, 18583, 18589, 18594, 18600, + 18606, 18612, 18618, 18624, 18630, 18636, 18642, 18647, 18653, 18659, + 18665, 18671, 18677, 18682, 18687, 18693, 18701, 18708, 0, 18716, 18723, + 18736, 18743, 18750, 18758, 18766, 18772, 18778, 18784, 18794, 18799, + 18805, 18815, 18825, 0, 18835, 18845, 18853, 18865, 18877, 18883, 18897, + 18912, 18917, 18922, 18930, 18938, 18946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 18954, 18957, 18961, 18965, 18969, 18973, 18977, 18981, 18985, + 18989, 18993, 18997, 19001, 19005, 19009, 19013, 19017, 19021, 19025, + 19029, 19033, 19037, 19040, 19044, 19048, 19052, 19055, 19058, 19062, + 19066, 19070, 19074, 19077, 19081, 19084, 19089, 19092, 19096, 19099, + 19103, 19106, 19111, 19114, 19118, 19125, 19130, 19134, 19139, 19143, + 19148, 19152, 19157, 19164, 19170, 19175, 19179, 19183, 19187, 19191, + 19195, 19200, 19206, 19212, 19217, 19223, 19227, 19230, 19233, 19236, + 19239, 19242, 19245, 19249, 19252, 19256, 19262, 19266, 19270, 19274, + 19278, 19282, 19286, 19290, 19294, 19299, 19303, 19308, 19313, 19319, + 19324, 19330, 19336, 19342, 19348, 19354, 19362, 19369, 19377, 19385, + 19394, 19403, 19414, 19424, 19434, 19445, 19456, 19466, 19476, 19486, + 19496, 19506, 19516, 19526, 19536, 19544, 19551, 19557, 19564, 19569, + 19575, 19581, 19587, 19593, 19599, 19605, 19611, 19617, 19623, 19629, + 19635, 19640, 19648, 19655, 19661, 19668, 19676, 19682, 19688, 19694, + 19700, 19708, 19716, 19726, 19734, 19742, 19748, 19753, 19758, 19763, + 19768, 19773, 19778, 19784, 19789, 19795, 19801, 19807, 19813, 19820, + 19825, 19831, 19836, 19841, 19846, 19851, 19856, 19861, 19866, 19871, + 19876, 19881, 19886, 19891, 19896, 19901, 19906, 19911, 19916, 19921, + 19926, 19931, 19936, 19941, 19946, 19951, 19956, 19961, 19966, 19971, + 19976, 19981, 19986, 19991, 19996, 20001, 20006, 20011, 20016, 0, 20021, + 0, 0, 0, 0, 0, 20026, 0, 0, 20031, 20035, 20039, 20043, 20047, 20051, 20055, 20059, 20063, 20067, 20071, 20075, 20079, 20083, 20087, 20091, 20095, 20099, 20103, 20107, 20111, 20115, 20119, 20123, 20127, 20131, 20135, 20139, 20143, 20147, 20151, 20155, 20159, 20163, 20167, 20171, - 20175, 20179, 20183, 20187, 20191, 20195, 20199, 20203, 20207, 20211, - 20215, 20219, 20223, 20227, 20231, 20235, 20239, 20243, 20247, 20251, - 20255, 20259, 20263, 20267, 20271, 20275, 20279, 20283, 20287, 20291, - 20295, 20299, 20303, 20307, 20311, 20315, 20319, 20323, 20327, 20331, - 20335, 20339, 20343, 20347, 20351, 20355, 20359, 20362, 20366, 20369, - 20373, 20377, 20380, 20384, 20388, 20391, 20395, 20399, 20403, 20407, - 20410, 20414, 20418, 20422, 20426, 20430, 20434, 20437, 20441, 20445, - 20449, 20453, 20457, 20461, 20465, 20469, 20473, 20477, 20481, 20485, - 20489, 20493, 20497, 20501, 20505, 20509, 20513, 20517, 20521, 20525, - 20529, 20533, 20537, 20541, 20545, 20549, 20553, 20557, 20561, 20565, - 20569, 20573, 20577, 20581, 20585, 20589, 20593, 20597, 20601, 20605, - 20609, 20613, 20617, 20621, 20625, 20629, 20633, 20637, 20641, 20645, - 20649, 20653, 20657, 20661, 20665, 20669, 20673, 20677, 20681, 20685, - 20689, 20693, 20697, 20701, 20705, 20709, 20713, 20717, 20721, 20725, - 20729, 20733, 20737, 20741, 20745, 20749, 20753, 20757, 20761, 20765, - 20769, 20773, 20777, 20781, 20785, 20789, 20793, 20797, 20801, 20805, - 20809, 20813, 20817, 20821, 20825, 20829, 20833, 20837, 20841, 20845, - 20849, 20853, 20857, 20861, 20865, 20869, 20873, 20877, 20881, 20885, - 20889, 20893, 20897, 20901, 20905, 20909, 20913, 20917, 20921, 20925, - 20929, 20933, 20937, 20941, 20945, 20949, 20953, 20957, 20961, 20965, - 20969, 20973, 20977, 20981, 20985, 20989, 20992, 20996, 21000, 21004, - 21008, 21012, 21016, 21020, 21024, 21028, 21032, 21036, 21040, 21044, - 21048, 21052, 21056, 21060, 21064, 21068, 21072, 21076, 21080, 21084, - 21087, 21091, 21095, 21099, 21103, 21107, 21111, 21115, 21119, 21123, - 21127, 21131, 21135, 21139, 21143, 21147, 21151, 21155, 21159, 21163, - 21167, 21171, 21175, 21179, 21183, 21187, 21191, 21195, 21199, 21203, - 21207, 21211, 21215, 21219, 21223, 21227, 21231, 21235, 21239, 21243, - 21247, 21251, 21255, 21259, 21263, 21267, 21271, 21275, 0, 21279, 21283, - 21287, 21291, 0, 0, 21295, 21299, 21303, 21307, 21311, 21315, 21319, 0, - 21323, 0, 21327, 21331, 21335, 21339, 0, 0, 21343, 21347, 21351, 21355, - 21359, 21363, 21367, 21371, 21375, 21379, 21383, 21387, 21391, 21395, - 21399, 21403, 21407, 21411, 21415, 21419, 21423, 21427, 21431, 21434, - 21438, 21442, 21446, 21450, 21454, 21458, 21462, 21466, 21470, 21474, - 21478, 21482, 21486, 21490, 21494, 21498, 21502, 0, 21506, 21510, 21514, - 21518, 0, 0, 21522, 21525, 21529, 21533, 21537, 21541, 21545, 21549, - 21553, 21557, 21561, 21565, 21569, 21573, 21577, 21581, 21585, 21590, - 21595, 21600, 21606, 21612, 21617, 21622, 21628, 21631, 21635, 21639, - 21643, 21647, 21651, 21655, 21659, 0, 21663, 21667, 21671, 21675, 0, 0, - 21679, 21683, 21687, 21691, 21695, 21699, 21703, 0, 21707, 0, 21711, - 21715, 21719, 21723, 0, 0, 21727, 21731, 21735, 21739, 21743, 21747, - 21751, 21755, 21759, 21764, 21769, 21774, 21780, 21786, 21791, 0, 21796, - 21800, 21804, 21808, 21812, 21816, 21820, 21824, 21828, 21832, 21836, - 21840, 21844, 21848, 21852, 21856, 21860, 21863, 21867, 21871, 21875, - 21879, 21883, 21887, 21891, 21895, 21899, 21903, 21907, 21911, 21915, - 21919, 21923, 21927, 21931, 21935, 21939, 21943, 21947, 21951, 21955, - 21959, 21963, 21967, 21971, 21975, 21979, 21983, 21987, 21991, 21995, - 21999, 22003, 22007, 22011, 22015, 22019, 0, 22023, 22027, 22031, 22035, - 0, 0, 22039, 22043, 22047, 22051, 22055, 22059, 22063, 22067, 22071, - 22075, 22079, 22083, 22087, 22091, 22095, 22099, 22103, 22107, 22111, - 22115, 22119, 22123, 22127, 22131, 22135, 22139, 22143, 22147, 22151, - 22155, 22159, 22163, 22167, 22171, 22175, 22179, 22183, 22187, 22191, - 22195, 22199, 22203, 22207, 22211, 22215, 22219, 22223, 22227, 22231, - 22235, 22239, 22243, 22247, 22251, 22255, 22259, 22263, 22266, 22270, - 22274, 22278, 22282, 22286, 22290, 22294, 22298, 22302, 0, 0, 22306, - 22315, 22321, 22326, 22330, 22333, 22338, 22341, 22344, 22347, 22352, - 22356, 22361, 22364, 22367, 22370, 22373, 22376, 22379, 22382, 22385, - 22388, 22392, 22396, 22400, 22404, 22408, 22412, 22416, 22420, 22424, - 22428, 0, 0, 0, 22434, 22440, 22444, 22448, 22452, 22458, 22462, 22466, - 22470, 22476, 22480, 22484, 22488, 22494, 22498, 22502, 22506, 22512, - 22518, 22524, 22532, 22538, 22544, 22550, 22556, 22562, 0, 0, 0, 0, 0, 0, - 22568, 22571, 22574, 22577, 22580, 22583, 22587, 22591, 22594, 22598, - 22602, 22606, 22610, 22614, 22617, 22621, 22625, 22629, 22633, 22637, - 22641, 22645, 22649, 22653, 22657, 22661, 22664, 22668, 22672, 22676, - 22680, 22683, 22687, 22691, 22695, 22699, 22703, 22707, 22711, 22715, - 22719, 22723, 22727, 22731, 22735, 22739, 22742, 22746, 22750, 22754, - 22758, 22762, 22766, 22770, 22774, 22778, 22782, 22786, 22790, 22794, - 22798, 22802, 22806, 22810, 22814, 22818, 22822, 22826, 22830, 22834, - 22838, 22842, 22846, 22850, 22854, 22858, 22862, 22866, 22870, 22874, - 22877, 22881, 22885, 22889, 22893, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 22897, 22901, 22904, 22908, 22911, 22915, 22918, 22922, 22928, 22933, - 22937, 22940, 22944, 22948, 22953, 22957, 22962, 22966, 22971, 22975, - 22980, 22984, 22989, 22995, 22999, 23004, 23008, 23013, 23019, 23023, - 23029, 23035, 23039, 23044, 23052, 23060, 23067, 23072, 23077, 23086, - 23093, 23100, 23105, 23111, 23115, 23119, 23123, 23127, 23131, 23135, - 23139, 23143, 23147, 23151, 23157, 23162, 23167, 23170, 23174, 23178, - 23183, 23187, 23192, 23196, 23201, 23205, 23210, 23214, 23219, 23223, - 23228, 23232, 23237, 23243, 23247, 23252, 23257, 23261, 23265, 23269, - 23273, 23276, 23280, 23286, 23291, 23296, 23300, 23304, 23308, 23313, - 23317, 23322, 23326, 23331, 23334, 23338, 23342, 23347, 23351, 23356, - 23360, 23365, 23371, 23375, 23379, 23383, 23387, 23391, 23395, 23399, - 23403, 23407, 23411, 23415, 23421, 23424, 23428, 23432, 23437, 23441, - 23446, 23450, 23455, 23459, 23464, 23468, 23473, 23477, 23482, 23486, - 23491, 23497, 23501, 23505, 23511, 23517, 23523, 23529, 23533, 23537, - 23541, 23545, 23549, 23553, 23559, 23563, 23567, 23571, 23576, 23580, - 23585, 23589, 23594, 23598, 23603, 23607, 23612, 23616, 23621, 23625, - 23630, 23636, 23640, 23646, 23650, 23654, 23658, 23662, 23666, 23670, - 23676, 23679, 23683, 23687, 23692, 23696, 23701, 23705, 23710, 23714, - 23719, 23723, 23728, 23732, 23737, 23741, 23746, 23752, 23756, 23761, - 23765, 23771, 23777, 23781, 23785, 23789, 23793, 23797, 23801, 23807, - 23810, 23814, 23818, 23823, 23827, 23832, 23836, 23841, 23847, 23851, - 23856, 23860, 23864, 23868, 23872, 23876, 23880, 23884, 23890, 23894, - 23898, 23902, 23907, 23911, 23916, 23920, 23925, 23929, 23934, 23938, - 23943, 23947, 23952, 23956, 23961, 23964, 23968, 23972, 23976, 23980, - 23984, 23988, 23992, 23996, 24002, 24006, 24010, 24014, 24019, 24023, - 24028, 24032, 24037, 24041, 24046, 24050, 24055, 24059, 24064, 24068, - 24073, 24079, 24082, 24087, 24091, 24096, 24102, 24108, 24114, 24120, - 24126, 24132, 24138, 24142, 24146, 24150, 24154, 24158, 24162, 24166, - 24170, 24175, 24179, 24184, 24188, 24193, 24197, 24202, 24206, 24211, - 24215, 24220, 24224, 24229, 24233, 24237, 24241, 24245, 24249, 24253, - 24257, 24263, 24266, 24270, 24274, 24279, 24283, 24288, 24292, 24297, - 24301, 24306, 24310, 24315, 24319, 24324, 24328, 24333, 24339, 24343, - 24349, 24354, 24360, 24364, 24370, 24375, 24379, 24383, 24387, 24391, - 24395, 24400, 24404, 24408, 24413, 24417, 24422, 24425, 24429, 24433, - 24437, 24441, 24445, 24449, 24453, 24457, 24461, 24465, 24469, 24474, - 24478, 24482, 24488, 24492, 24498, 24502, 24508, 24512, 24516, 24520, - 24524, 24528, 24533, 24537, 24541, 24545, 24549, 24553, 24557, 24561, - 24565, 24569, 24573, 24579, 24585, 24591, 24597, 24603, 24608, 24614, - 24620, 24626, 24630, 24634, 24638, 24642, 24646, 24650, 24654, 24658, - 24662, 24666, 24670, 24674, 24678, 24683, 24688, 24693, 24698, 24702, - 24706, 24710, 24714, 24718, 24722, 24726, 24730, 24734, 24740, 24746, - 24752, 24758, 24764, 24770, 24776, 24782, 24788, 24792, 24796, 24800, - 24804, 24808, 24812, 24816, 24822, 24828, 24834, 24840, 24846, 24852, - 24858, 24864, 24870, 24875, 24880, 24885, 24890, 24896, 24902, 24908, - 24914, 24920, 24926, 24932, 24937, 24943, 24949, 24955, 24960, 24966, - 24972, 24978, 24983, 24988, 24993, 24998, 25003, 25008, 25013, 25018, - 25023, 25028, 25033, 25038, 25043, 25048, 25053, 25058, 25063, 25068, - 25073, 25078, 25083, 25088, 25093, 25098, 25103, 25108, 25113, 25118, - 25123, 25128, 25133, 25138, 25143, 25148, 25153, 25158, 25163, 25168, - 25173, 25178, 25183, 25188, 25192, 25197, 25202, 25207, 25212, 25217, - 25222, 25227, 25232, 25237, 25242, 25247, 25252, 25257, 25262, 25267, - 25272, 25277, 25282, 25287, 25292, 25297, 25302, 25307, 25312, 25317, - 25321, 25326, 25331, 25336, 25341, 25346, 25350, 25355, 25360, 25365, - 25370, 25375, 25379, 25384, 25390, 25395, 25400, 25405, 25410, 25416, - 25421, 25426, 25431, 25436, 25441, 25446, 25451, 25456, 25461, 25466, - 25471, 25476, 25481, 25486, 25491, 25496, 25501, 25506, 25511, 25516, - 25521, 25526, 25531, 25536, 25541, 25546, 25551, 25556, 25561, 25566, - 25571, 25576, 25581, 25586, 25591, 25596, 25601, 25606, 25611, 25616, - 25621, 25626, 25631, 25636, 25642, 25647, 25652, 25657, 25662, 25667, - 25672, 25677, 25682, 25687, 25692, 25697, 25702, 25707, 25712, 25717, - 25722, 25727, 25732, 25737, 25742, 25747, 25752, 25757, 25762, 25767, - 25772, 25777, 25782, 25787, 25792, 25797, 25802, 25807, 25812, 25817, - 25822, 25827, 25832, 25838, 25842, 25846, 25850, 25854, 25858, 25862, - 25866, 25870, 25876, 25882, 25888, 25894, 25900, 25906, 25912, 25919, - 25925, 25930, 25935, 25940, 25945, 25950, 25955, 25960, 25965, 25970, - 25975, 25980, 25985, 25990, 25995, 26000, 26005, 26010, 26015, 26020, - 26025, 26030, 26035, 26040, 26045, 26050, 26055, 26060, 26065, 0, 0, 0, - 26072, 26082, 26086, 26093, 26097, 26101, 26105, 26113, 26117, 26122, - 26127, 26132, 26136, 26141, 26146, 26149, 26153, 26157, 26166, 26170, - 26174, 26180, 26184, 26188, 26196, 26200, 26208, 26214, 26220, 26226, - 26232, 26242, 26248, 26252, 26261, 26264, 26270, 26274, 26280, 26285, - 26291, 26299, 26305, 26310, 26317, 26322, 26326, 26330, 26340, 26346, - 26350, 26360, 26366, 26370, 26374, 26381, 26389, 26395, 26401, 26410, - 26414, 26418, 26422, 26430, 26437, 26441, 26445, 26449, 26453, 26457, - 26461, 26465, 26469, 26473, 26477, 26481, 26486, 26491, 26496, 26500, - 26504, 26508, 26512, 26516, 26520, 26528, 26536, 26544, 26552, 0, 0, 0, - 0, 0, 0, 0, 26560, 26564, 26568, 26572, 26576, 26581, 26586, 26591, - 26596, 26600, 26604, 26609, 26613, 0, 26617, 26622, 26627, 26632, 26636, - 26641, 26646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26651, 26655, 26659, - 26663, 26667, 26672, 26677, 26682, 26687, 26691, 26695, 26700, 26704, - 26708, 26713, 26718, 26723, 26728, 26732, 26737, 26742, 26747, 26753, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 26758, 26762, 26766, 26770, 26774, 26779, 26784, - 26789, 26794, 26798, 26802, 26807, 26811, 26815, 26820, 26825, 26830, - 26835, 26839, 26844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26849, 26853, - 26857, 26861, 26865, 26870, 26875, 26880, 26885, 26889, 26893, 26898, - 26902, 0, 26906, 26911, 26916, 0, 26921, 26926, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 26931, 26934, 26938, 26942, 26946, 26950, 26954, 26958, - 26962, 26966, 26970, 26974, 26978, 26982, 26986, 26990, 26994, 26998, - 27001, 27005, 27009, 27013, 27017, 27021, 27025, 27029, 27033, 27037, - 27041, 27045, 27049, 27053, 27057, 27060, 27064, 27068, 27074, 27080, - 27086, 27092, 27098, 27104, 27110, 27116, 27122, 27128, 27134, 27140, - 27146, 27152, 27161, 27170, 27176, 27182, 27188, 27193, 27197, 27202, - 27207, 27212, 27216, 27221, 27226, 27231, 27235, 27240, 27244, 27249, - 27254, 27259, 27264, 27268, 27272, 27276, 27280, 27284, 27288, 27292, - 27296, 27300, 27304, 27310, 27314, 27318, 27322, 27326, 27330, 27338, - 27344, 27348, 27354, 27358, 27364, 27368, 0, 0, 27372, 27376, 27379, - 27382, 27385, 27388, 27391, 27394, 27397, 27400, 0, 0, 0, 0, 0, 0, 27403, - 27411, 27419, 27427, 27435, 27443, 27451, 27459, 27467, 27475, 0, 0, 0, - 0, 0, 0, 27483, 27486, 27489, 27492, 27497, 27500, 27505, 27512, 27520, - 27525, 27532, 27535, 27542, 27549, 27556, 0, 27560, 27564, 27567, 27570, - 27573, 27576, 27579, 27582, 27585, 27588, 0, 0, 0, 0, 0, 0, 27591, 27594, - 27597, 27600, 27603, 27606, 27610, 27614, 27618, 27621, 27625, 27629, - 27632, 27636, 27640, 27643, 27647, 27651, 27655, 27659, 27663, 27667, - 27671, 27674, 27678, 27682, 27686, 27689, 27693, 27697, 27701, 27705, - 27709, 27713, 27717, 27721, 27728, 27733, 27738, 27743, 27748, 27754, - 27760, 27766, 27772, 27777, 27783, 27789, 27794, 27800, 27806, 27812, - 27818, 27824, 27829, 27835, 27840, 27846, 27852, 27858, 27864, 27870, - 27875, 27880, 27886, 27892, 27897, 27903, 27908, 27914, 27919, 27924, - 27930, 27936, 27942, 27948, 27954, 27960, 27966, 27972, 27978, 27984, - 27990, 27996, 28001, 28006, 28012, 28018, 0, 0, 0, 0, 0, 0, 0, 0, 28024, - 28033, 28042, 28050, 28058, 28068, 28076, 28085, 28092, 28099, 28106, - 28114, 28122, 28130, 28138, 28146, 28154, 28162, 28170, 28177, 28185, - 28193, 28201, 28209, 28217, 28227, 28237, 28247, 28257, 28267, 28277, - 28287, 28297, 28307, 28317, 28327, 28337, 28347, 28357, 28365, 28373, - 28383, 28391, 0, 0, 0, 0, 0, 28401, 28405, 28409, 28413, 28417, 28421, - 28425, 28429, 28433, 28437, 28441, 28445, 28449, 28453, 28457, 28461, - 28465, 28469, 28473, 28477, 28481, 28485, 28489, 28493, 28499, 28503, - 28509, 28513, 28519, 28523, 28529, 28533, 28537, 28541, 28545, 28549, - 28553, 28559, 28565, 28571, 28577, 28583, 28589, 28594, 28600, 28606, - 28612, 28618, 28625, 28631, 28636, 28641, 28645, 28649, 28653, 28657, - 28661, 28665, 28669, 28675, 28681, 28687, 28692, 28699, 28704, 28709, - 28715, 28720, 28727, 28734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28740, 28746, - 28750, 28755, 28760, 28765, 28770, 28775, 28780, 28785, 28790, 28795, - 28800, 28805, 28810, 28815, 28819, 28823, 28828, 28833, 28838, 28842, - 28846, 28851, 28856, 28861, 28866, 28871, 28876, 28880, 28885, 0, 28890, - 28895, 28900, 28905, 28911, 28917, 28923, 28929, 28934, 28939, 28945, - 28952, 0, 0, 0, 0, 28959, 28964, 28970, 28976, 28982, 28987, 28992, - 28997, 29003, 29009, 29014, 29019, 0, 0, 0, 0, 29024, 0, 0, 0, 29029, - 29034, 29039, 29044, 29048, 29052, 29056, 29060, 29064, 29068, 29072, - 29076, 29080, 29085, 29091, 29097, 29103, 29109, 29114, 29120, 29126, - 29132, 29137, 29143, 29148, 29154, 29160, 29165, 29171, 29177, 29183, - 29188, 29193, 29198, 29204, 29210, 29215, 29221, 29226, 29232, 29237, - 29243, 0, 0, 29249, 29255, 29261, 29267, 29273, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 29279, 29287, 29295, 29302, 29310, 29318, 29325, 29333, 29341, - 29349, 29357, 29364, 29372, 29380, 29387, 29395, 29403, 29410, 29418, - 29426, 29433, 29440, 29448, 29455, 29462, 29470, 29477, 29485, 29493, - 29501, 29509, 29517, 29525, 29532, 29540, 29548, 29555, 29563, 29571, - 29579, 29587, 29595, 29603, 29611, 0, 0, 0, 0, 29619, 29628, 29636, - 29644, 29651, 29659, 29666, 29674, 29681, 29689, 29697, 29705, 29713, - 29721, 29729, 29737, 29745, 29753, 29761, 29769, 29777, 29785, 29793, - 29801, 29809, 29816, 0, 0, 0, 0, 0, 0, 29823, 29830, 29836, 29842, 29848, - 29854, 29860, 29866, 29872, 29878, 29884, 0, 0, 0, 29891, 29898, 29905, - 29909, 29915, 29921, 29927, 29933, 29939, 29945, 29951, 29957, 29963, - 29969, 29975, 29981, 29987, 29993, 29999, 30003, 30009, 30015, 30021, - 30027, 30033, 30039, 30045, 30051, 30057, 30063, 30069, 30075, 30081, - 30087, 30093, 30097, 30102, 30107, 30112, 30116, 30121, 30125, 30130, - 30135, 30140, 30144, 30149, 30154, 30159, 30164, 30169, 30173, 30178, - 30183, 30188, 30193, 30197, 30201, 30206, 30211, 30216, 30221, 0, 0, - 30227, 30231, 30238, 30243, 30249, 30255, 30260, 30266, 30272, 30277, - 30283, 30289, 30295, 30301, 30307, 30312, 30317, 30323, 30328, 30334, - 30339, 30345, 30351, 30357, 30363, 30367, 30372, 30377, 30383, 30389, - 30394, 30400, 30406, 30410, 30415, 30420, 30425, 30430, 30435, 30440, - 30445, 30451, 30457, 30463, 30468, 30473, 30477, 30482, 30486, 30491, - 30495, 30500, 30505, 30510, 30515, 30522, 30529, 30536, 30546, 30555, - 30562, 30568, 30579, 30584, 30590, 0, 30596, 30601, 30606, 30614, 30620, - 30628, 30633, 30639, 30645, 30651, 30656, 30662, 30667, 30674, 30680, - 30685, 30691, 30697, 30703, 30710, 30717, 30724, 30729, 30734, 30741, - 30748, 30755, 30762, 30769, 0, 0, 30776, 30783, 30790, 30796, 30802, - 30808, 30814, 30820, 30826, 30832, 30838, 0, 0, 0, 0, 0, 0, 30844, 30850, - 30855, 30860, 30865, 30870, 30875, 30880, 30885, 30890, 0, 0, 0, 0, 0, 0, - 30895, 30900, 30905, 30910, 30915, 30920, 30925, 30934, 30941, 30946, - 30951, 30956, 30961, 30966, 0, 0, 30971, 30978, 30981, 30984, 30987, - 30992, 30996, 31002, 31007, 31013, 31020, 31028, 31032, 31037, 31041, 0, + 20175, 20179, 20183, 20187, 20191, 20195, 20201, 20205, 20210, 20215, + 20219, 20224, 20229, 20233, 20237, 20241, 20245, 20249, 20253, 20257, + 20261, 20265, 20269, 20273, 20277, 20281, 20285, 20289, 20293, 20297, + 20301, 20305, 20309, 20313, 20317, 20321, 20325, 20329, 20333, 20337, + 20341, 20345, 20349, 20353, 20357, 20361, 20365, 20369, 20373, 20377, + 20381, 20385, 20389, 20393, 20397, 20401, 20405, 20409, 20413, 20417, + 20421, 20425, 20429, 20433, 20437, 20441, 20445, 20449, 20453, 20457, + 20461, 20465, 20469, 20473, 20477, 20481, 20485, 20489, 20493, 20497, + 20501, 20505, 20509, 20513, 20517, 20521, 20525, 20529, 20533, 20537, + 20541, 20545, 20549, 20553, 20557, 20561, 20565, 20569, 20573, 20577, + 20581, 20585, 20589, 20593, 20597, 20601, 20605, 20609, 20613, 20617, + 20620, 20624, 20627, 20631, 20635, 20638, 20642, 20646, 20649, 20653, + 20657, 20661, 20665, 20668, 20672, 20676, 20680, 20684, 20688, 20692, + 20695, 20699, 20703, 20707, 20711, 20715, 20719, 20723, 20727, 20731, + 20735, 20739, 20743, 20747, 20751, 20755, 20759, 20763, 20767, 20771, + 20775, 20779, 20783, 20787, 20791, 20795, 20799, 20803, 20807, 20811, + 20815, 20819, 20823, 20827, 20831, 20835, 20839, 20843, 20847, 20851, + 20855, 20859, 20863, 20867, 20871, 20875, 20879, 20883, 20887, 20891, + 20895, 20899, 20903, 20907, 20911, 20915, 20919, 20923, 20927, 20931, + 20935, 20939, 20943, 20947, 20951, 20955, 20959, 20963, 20967, 20971, + 20975, 20979, 20983, 20987, 20991, 20995, 20999, 21003, 21007, 21011, + 21015, 21019, 21023, 21027, 21031, 21035, 21039, 21043, 21047, 21051, + 21055, 21059, 21063, 21067, 21071, 21075, 21079, 21083, 21087, 21091, + 21095, 21099, 21103, 21107, 21111, 21115, 21119, 21123, 21127, 21131, + 21135, 21139, 21143, 21147, 21151, 21155, 21159, 21163, 21167, 21171, + 21175, 21179, 21183, 21187, 21191, 21195, 21199, 21203, 21207, 21211, + 21215, 21219, 21223, 21227, 21231, 21235, 21239, 21243, 21247, 21250, + 21254, 21258, 21262, 21266, 21270, 21274, 21278, 21282, 21286, 21290, + 21294, 21298, 21302, 21306, 21310, 21314, 21318, 21322, 21326, 21330, + 21334, 21338, 21342, 21345, 21349, 21353, 21357, 21361, 21365, 21369, + 21373, 21377, 21381, 21385, 21389, 21393, 21397, 21401, 21405, 21409, + 21413, 21417, 21421, 21425, 21429, 21433, 21437, 21441, 21445, 21449, + 21453, 21457, 21461, 21465, 21469, 21473, 21477, 21481, 21485, 21489, + 21493, 21497, 21501, 21505, 21509, 21513, 21517, 21521, 21525, 21529, + 21533, 0, 21537, 21541, 21545, 21549, 0, 0, 21553, 21557, 21561, 21565, + 21569, 21573, 21577, 0, 21581, 0, 21585, 21589, 21593, 21597, 0, 0, + 21601, 21605, 21609, 21613, 21617, 21621, 21625, 21629, 21633, 21637, + 21641, 21645, 21649, 21653, 21657, 21661, 21665, 21669, 21673, 21677, + 21681, 21685, 21689, 21692, 21696, 21700, 21704, 21708, 21712, 21716, + 21720, 21724, 21728, 21732, 21736, 21740, 21744, 21748, 21752, 21756, + 21760, 0, 21764, 21768, 21772, 21776, 0, 0, 21780, 21784, 21788, 21792, + 21796, 21800, 21804, 21808, 21812, 21816, 21820, 21824, 21828, 21832, + 21836, 21840, 21844, 21849, 21854, 21859, 21865, 21871, 21876, 21881, + 21887, 21890, 21894, 21898, 21902, 21906, 21910, 21914, 21918, 0, 21922, + 21926, 21930, 21934, 0, 0, 21938, 21942, 21946, 21950, 21954, 21958, + 21962, 0, 21966, 0, 21970, 21974, 21978, 21982, 0, 0, 21986, 21990, + 21994, 21998, 22002, 22006, 22010, 22014, 22018, 22023, 22028, 22033, + 22039, 22045, 22050, 0, 22055, 22059, 22063, 22067, 22071, 22075, 22079, + 22083, 22087, 22091, 22095, 22099, 22103, 22107, 22111, 22115, 22119, + 22122, 22126, 22130, 22134, 22138, 22142, 22146, 22150, 22154, 22158, + 22162, 22166, 22170, 22174, 22178, 22182, 22186, 22190, 22194, 22198, + 22202, 22206, 22210, 22214, 22218, 22222, 22226, 22230, 22234, 22238, + 22242, 22246, 22250, 22254, 22258, 22262, 22266, 22270, 22274, 22278, 0, + 22282, 22286, 22290, 22294, 0, 0, 22298, 22302, 22306, 22310, 22314, + 22318, 22322, 22326, 22330, 22334, 22338, 22342, 22346, 22350, 22354, + 22358, 22362, 22366, 22370, 22374, 22378, 22382, 22386, 22390, 22394, + 22398, 22402, 22406, 22410, 22414, 22418, 22422, 22426, 22430, 22434, + 22438, 22442, 22446, 22450, 22454, 22458, 22462, 22466, 22470, 22474, + 22478, 22482, 22486, 22490, 22494, 22498, 22502, 22506, 22510, 22514, + 22518, 22522, 22525, 22529, 22533, 22537, 22541, 22545, 22549, 22553, + 22557, 22561, 0, 0, 22565, 22574, 22580, 22585, 22589, 22592, 22597, + 22600, 22603, 22606, 22611, 22615, 22620, 22623, 22626, 22629, 22632, + 22635, 22638, 22642, 22645, 22649, 22653, 22657, 22661, 22665, 22669, + 22673, 22677, 22681, 22685, 22689, 0, 0, 0, 22695, 22701, 22705, 22709, + 22713, 22719, 22723, 22727, 22731, 22737, 22741, 22745, 22749, 22755, + 22759, 22763, 22767, 22773, 22779, 22785, 22793, 22799, 22805, 22811, + 22817, 22823, 0, 0, 0, 0, 0, 0, 22829, 22832, 22835, 22838, 22841, 22844, + 22848, 22852, 22855, 22859, 22863, 22867, 22871, 22875, 22878, 22882, + 22886, 22890, 22894, 22898, 22902, 22906, 22910, 22914, 22918, 22922, + 22925, 22929, 22933, 22937, 22941, 22945, 22949, 22953, 22957, 22961, + 22965, 22969, 22973, 22977, 22981, 22985, 22989, 22993, 22997, 23001, + 23004, 23008, 23012, 23016, 23020, 23024, 23028, 23032, 23036, 23040, + 23044, 23048, 23052, 23056, 23060, 23064, 23068, 23072, 23076, 23080, + 23084, 23088, 23092, 23096, 23100, 23104, 23108, 23112, 23116, 23120, + 23124, 23128, 23132, 23136, 23139, 23143, 23147, 23151, 23155, 23159, 0, + 0, 23163, 23168, 23173, 23178, 23183, 23188, 0, 0, 23193, 23197, 23200, + 23204, 23207, 23211, 23214, 23218, 23224, 23229, 23233, 23236, 23240, + 23244, 23249, 23253, 23258, 23262, 23267, 23271, 23276, 23280, 23285, + 23291, 23295, 23300, 23304, 23309, 23315, 23319, 23325, 23331, 23335, + 23340, 23348, 23356, 23363, 23368, 23373, 23382, 23388, 23396, 23401, + 23407, 23411, 23415, 23419, 23423, 23427, 23431, 23435, 23439, 23443, + 23447, 23453, 23458, 23463, 23466, 23470, 23474, 23479, 23483, 23488, + 23492, 23497, 23501, 23506, 23510, 23515, 23519, 23524, 23528, 23533, + 23539, 23543, 23548, 23553, 23557, 23561, 23565, 23569, 23572, 23576, + 23582, 23587, 23592, 23596, 23600, 23604, 23609, 23613, 23618, 23622, + 23627, 23630, 23634, 23638, 23643, 23647, 23652, 23656, 23661, 23667, + 23671, 23675, 23679, 23683, 23687, 23691, 23695, 23699, 23703, 23707, + 23711, 23717, 23720, 23724, 23728, 23733, 23737, 23742, 23746, 23751, + 23755, 23760, 23764, 23769, 23773, 23778, 23782, 23787, 23793, 23797, + 23801, 23807, 23813, 23819, 23825, 23829, 23833, 23837, 23841, 23845, + 23849, 23855, 23859, 23863, 23867, 23872, 23876, 23881, 23885, 23890, + 23894, 23899, 23903, 23908, 23912, 23917, 23921, 23926, 23932, 23936, + 23942, 23946, 23950, 23954, 23958, 23962, 23966, 23972, 23975, 23979, + 23983, 23988, 23992, 23997, 24001, 24006, 24010, 24015, 24019, 24024, + 24028, 24033, 24037, 24042, 24048, 24052, 24057, 24061, 24067, 24073, + 24077, 24081, 24085, 24089, 24093, 24097, 24103, 24107, 24111, 24115, + 24120, 24124, 24129, 24133, 24138, 24144, 24148, 24153, 24157, 24161, + 24165, 24169, 24173, 24177, 24181, 24187, 24191, 24195, 24199, 24204, + 24208, 24213, 24217, 24222, 24226, 24231, 24235, 24240, 24244, 24249, + 24253, 24258, 24261, 24265, 24269, 24273, 24277, 24281, 24285, 24289, + 24293, 24299, 24303, 24307, 24311, 24316, 24320, 24325, 24329, 24334, + 24338, 24343, 24347, 24352, 24356, 24361, 24365, 24370, 24376, 24379, + 24384, 24388, 24393, 24399, 24405, 24411, 24417, 24423, 24429, 24435, + 24439, 24443, 24447, 24451, 24455, 24459, 24463, 24467, 24472, 24476, + 24481, 24485, 24490, 24494, 24499, 24503, 24508, 24512, 24517, 24521, + 24526, 24530, 24534, 24538, 24542, 24546, 24550, 24554, 24560, 24563, + 24567, 24571, 24576, 24580, 24585, 24589, 24594, 24598, 24603, 24607, + 24612, 24616, 24621, 24625, 24630, 24636, 24640, 24646, 24651, 24657, + 24661, 24667, 24672, 24676, 24680, 24684, 24688, 24692, 24697, 24701, + 24705, 24710, 24714, 24719, 24722, 24726, 24730, 24734, 24738, 24742, + 24746, 24750, 24754, 24758, 24762, 24766, 24771, 24775, 24779, 24785, + 24789, 24795, 24799, 24805, 24809, 24813, 24817, 24821, 24825, 24830, + 24834, 24838, 24842, 24846, 24850, 24854, 24858, 24862, 24866, 24870, + 24876, 24882, 24888, 24894, 24900, 24905, 24911, 24917, 24923, 24927, + 24931, 24935, 24939, 24943, 24947, 24951, 24955, 24959, 24963, 24967, + 24971, 24975, 24980, 24985, 24990, 24995, 24999, 25003, 25007, 25011, + 25015, 25019, 25023, 25027, 25031, 25037, 25043, 25049, 25055, 25061, + 25067, 25073, 25079, 25085, 25089, 25093, 25097, 25101, 25105, 25109, + 25113, 25119, 25125, 25131, 25137, 25143, 25149, 25155, 25161, 25167, + 25172, 25177, 25182, 25187, 25193, 25199, 25205, 25211, 25217, 25223, + 25229, 25235, 25241, 25247, 25253, 25258, 25264, 25270, 25276, 25281, + 25286, 25291, 25296, 25301, 25306, 25311, 25316, 25321, 25326, 25331, + 25336, 25341, 25346, 25351, 25356, 25361, 25366, 25371, 25376, 25381, + 25386, 25391, 25396, 25401, 25406, 25411, 25416, 25421, 25426, 25431, + 25436, 25441, 25446, 25451, 25456, 25461, 25466, 25471, 25476, 25481, + 25486, 25490, 25495, 25500, 25505, 25510, 25515, 25520, 25525, 25530, + 25535, 25540, 25545, 25550, 25555, 25560, 25565, 25570, 25575, 25580, + 25585, 25590, 25595, 25600, 25605, 25610, 25615, 25620, 25625, 25630, + 25635, 25640, 25645, 25649, 25654, 25659, 25664, 25669, 25674, 25678, + 25683, 25689, 25694, 25699, 25704, 25709, 25715, 25720, 25725, 25730, + 25735, 25740, 25745, 25750, 25755, 25760, 25765, 25770, 25775, 25780, + 25785, 25790, 25795, 25800, 25805, 25810, 25815, 25820, 25825, 25830, + 25835, 25840, 25845, 25850, 25855, 25860, 25865, 25870, 25875, 25880, + 25885, 25890, 25895, 25900, 25905, 25910, 25915, 25920, 25925, 25930, + 25935, 25941, 25946, 25951, 25956, 25961, 25966, 25971, 25976, 25981, + 25986, 25991, 25996, 26001, 26006, 26011, 26016, 26021, 26026, 26031, + 26036, 26041, 26046, 26051, 26056, 26061, 26066, 26071, 26076, 26081, + 26086, 26091, 26096, 26101, 26106, 26111, 26116, 26121, 26126, 26131, + 26137, 26141, 26145, 26149, 26153, 26157, 26161, 26165, 26169, 26175, + 26181, 26187, 26193, 26199, 26205, 26211, 26218, 26224, 26229, 26234, + 26239, 26244, 26249, 26254, 26259, 26264, 26269, 26274, 26279, 26284, + 26289, 26294, 26299, 26304, 26309, 26314, 26319, 26324, 26329, 26334, + 26339, 26344, 26349, 26354, 26359, 26364, 0, 0, 0, 26371, 26381, 26385, + 26392, 26396, 26400, 26404, 26412, 26416, 26421, 26426, 26431, 26435, + 26440, 26445, 26448, 26452, 26456, 26465, 26469, 26473, 26479, 26483, + 26487, 26495, 26499, 26507, 26513, 26519, 26525, 26531, 26541, 26547, + 26551, 26560, 26563, 26569, 26573, 26579, 26584, 26590, 26598, 26604, + 26609, 26616, 26621, 26625, 26629, 26639, 26645, 26649, 26659, 26665, + 26669, 26673, 26680, 26688, 26694, 26700, 26709, 26713, 26717, 26721, + 26729, 26736, 26740, 26744, 26748, 26752, 26756, 26760, 26764, 26768, + 26772, 26776, 26780, 26785, 26790, 26795, 26799, 26803, 26807, 26811, + 26815, 26819, 26827, 26835, 26843, 26851, 0, 0, 0, 0, 0, 0, 0, 26859, + 26863, 26867, 26871, 26875, 26880, 26885, 26890, 26895, 26900, 26904, + 26909, 26913, 0, 26917, 26922, 26927, 26932, 26936, 26941, 26946, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 26951, 26955, 26959, 26963, 26967, 26972, + 26977, 26982, 26987, 26992, 26996, 27001, 27005, 27009, 27014, 27019, + 27024, 27029, 27033, 27038, 27043, 27048, 27054, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 27059, 27063, 27067, 27071, 27075, 27080, 27085, 27090, 27095, 27100, + 27104, 27109, 27113, 27117, 27122, 27127, 27132, 27137, 27141, 27146, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27151, 27155, 27159, 27163, 27167, + 27172, 27177, 27182, 27187, 27192, 27196, 27201, 27205, 0, 27209, 27214, + 27219, 0, 27224, 27229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27234, 27237, + 27241, 27245, 27249, 27253, 27257, 27261, 27265, 27269, 27273, 27277, + 27281, 27285, 27289, 27293, 27297, 27301, 27304, 27308, 27312, 27316, + 27320, 27324, 27328, 27332, 27336, 27340, 27344, 27348, 27352, 27356, + 27360, 27363, 27367, 27371, 27377, 27383, 27389, 27395, 27401, 27407, + 27413, 27419, 27425, 27431, 27437, 27443, 27449, 27455, 27464, 27473, + 27479, 27485, 27491, 27496, 27500, 27505, 27510, 27515, 27519, 27524, + 27529, 27534, 27538, 27543, 27547, 27552, 27557, 27562, 27567, 27571, + 27575, 27579, 27583, 27587, 27591, 27595, 27599, 27603, 27607, 27613, + 27617, 27621, 27625, 27629, 27633, 27641, 27647, 27651, 27657, 27661, + 27667, 27671, 0, 0, 27675, 27679, 27682, 27685, 27688, 27691, 27694, + 27697, 27701, 27704, 0, 0, 0, 0, 0, 0, 27708, 27716, 27724, 27732, 27740, + 27748, 27756, 27764, 27772, 27780, 0, 0, 0, 0, 0, 0, 27788, 27791, 27794, + 27797, 27802, 27805, 27810, 27817, 27825, 27830, 27837, 27840, 27847, + 27854, 27861, 0, 27865, 27869, 27872, 27875, 27878, 27881, 27884, 27887, + 27891, 27894, 0, 0, 0, 0, 0, 0, 27898, 27901, 27904, 27907, 27910, 27913, + 27917, 27921, 27925, 27929, 27933, 27937, 27940, 27944, 27948, 27951, + 27955, 27959, 27963, 27967, 27971, 27975, 27979, 27982, 27986, 27990, + 27994, 27997, 28001, 28005, 28009, 28013, 28017, 28021, 28025, 28029, + 28036, 28041, 28046, 28051, 28056, 28062, 28068, 28074, 28080, 28085, + 28091, 28097, 28102, 28108, 28114, 28120, 28126, 28132, 28137, 28143, + 28148, 28154, 28160, 28166, 28172, 28178, 28183, 28188, 28194, 28200, + 28205, 28211, 28216, 28222, 28227, 28232, 28238, 28244, 28250, 28256, + 28262, 28268, 28274, 28280, 28286, 28292, 28298, 28304, 28309, 28314, + 28320, 28326, 0, 0, 0, 0, 0, 0, 0, 0, 28332, 28341, 28350, 28358, 28366, + 28376, 28384, 28393, 28400, 28407, 28414, 28422, 28430, 28438, 28446, + 28454, 28462, 28470, 28478, 28485, 28493, 28501, 28509, 28517, 28525, + 28535, 28545, 28555, 28565, 28575, 28585, 28595, 28605, 28615, 28625, + 28635, 28645, 28655, 28665, 28673, 28681, 28691, 28699, 0, 0, 0, 0, 0, + 28709, 28713, 28717, 28721, 28725, 28729, 28733, 28737, 28741, 28745, + 28749, 28753, 28757, 28761, 28765, 28769, 28773, 28777, 28781, 28785, + 28789, 28793, 28797, 28801, 28807, 28811, 28817, 28821, 28827, 28831, + 28837, 28841, 28845, 28849, 28853, 28857, 28861, 28867, 28873, 28879, + 28885, 28891, 28897, 28902, 28908, 28914, 28920, 28926, 28933, 28939, + 28944, 28949, 28953, 28957, 28961, 28965, 28969, 28973, 28977, 28983, + 28989, 28995, 29000, 29007, 29012, 29017, 29023, 29028, 29035, 29042, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 29048, 29054, 29058, 29063, 29068, 29073, + 29078, 29083, 29088, 29093, 29098, 29103, 29108, 29113, 29118, 29123, + 29128, 29132, 29137, 29142, 29147, 29151, 29155, 29160, 29165, 29170, + 29175, 29180, 29185, 29189, 29194, 0, 29199, 29204, 29209, 29214, 29220, + 29226, 29232, 29238, 29243, 29248, 29254, 29261, 0, 0, 0, 0, 29268, + 29273, 29279, 29285, 29291, 29297, 29302, 29307, 29313, 29319, 29324, + 29329, 0, 0, 0, 0, 29334, 0, 0, 0, 29339, 29344, 29349, 29354, 29358, + 29362, 29366, 29370, 29374, 29378, 29383, 29387, 29392, 29397, 29403, + 29409, 29415, 29421, 29426, 29432, 29438, 29444, 29449, 29455, 29460, + 29466, 29472, 29477, 29483, 29489, 29495, 29501, 29506, 29511, 29517, + 29523, 29528, 29534, 29539, 29545, 29550, 29556, 0, 0, 29562, 29568, + 29574, 29580, 29586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29592, 29601, + 29610, 29618, 29627, 29636, 29644, 29653, 29662, 29671, 29680, 29688, + 29697, 29706, 29714, 29723, 29732, 29741, 29750, 29759, 29768, 29776, + 29785, 29793, 29801, 29810, 29818, 29827, 29836, 29845, 29854, 29863, + 29872, 29880, 29889, 29898, 29906, 29915, 29924, 29933, 29942, 29951, + 29960, 29969, 0, 0, 0, 0, 29978, 29988, 29997, 30006, 30014, 30023, + 30031, 30040, 30048, 30057, 30066, 30075, 30084, 30093, 30102, 30111, + 30120, 30129, 30138, 30147, 30156, 30165, 30174, 30183, 30192, 30200, 0, + 0, 0, 0, 0, 0, 30208, 30216, 30223, 30230, 30237, 30244, 30251, 30258, + 30266, 30273, 30281, 0, 0, 0, 30289, 30297, 30305, 30309, 30315, 30321, + 30327, 30333, 30339, 30345, 30351, 30357, 30363, 30369, 30375, 30381, + 30387, 30393, 30399, 30403, 30409, 30415, 30421, 30427, 30433, 30439, + 30445, 30451, 30457, 30463, 30469, 30475, 30481, 30487, 30493, 30497, + 30502, 30507, 30512, 30516, 30521, 30525, 30530, 30535, 30540, 30545, + 30550, 30555, 30560, 30565, 30570, 30574, 30579, 30584, 30589, 30594, + 30598, 30602, 30607, 30612, 30617, 30622, 0, 0, 30628, 30632, 30639, + 30644, 30650, 30656, 30661, 30667, 30673, 30678, 30684, 30690, 30696, + 30702, 30708, 30713, 30718, 30724, 30729, 30735, 30740, 30746, 30752, + 30758, 30764, 30769, 30774, 30779, 30785, 30791, 30796, 30802, 30808, + 30812, 30817, 30822, 30827, 30832, 30837, 30842, 30847, 30853, 30859, + 30865, 30870, 30875, 30879, 30884, 30888, 30893, 30897, 30902, 30907, + 30912, 30917, 30924, 30931, 30938, 30948, 30957, 30964, 30970, 30981, + 30986, 30992, 0, 30998, 31003, 31008, 31016, 31022, 31030, 31035, 31041, + 31047, 31053, 31058, 31064, 31069, 31076, 31082, 31087, 31093, 31099, + 31105, 31112, 31119, 31126, 31131, 31136, 31143, 31150, 31157, 31164, + 31171, 0, 0, 31178, 31185, 31192, 31198, 31204, 31210, 31216, 31222, + 31228, 31235, 31241, 0, 0, 0, 0, 0, 0, 31248, 31254, 31259, 31264, 31269, + 31274, 31279, 31284, 31290, 31295, 0, 0, 0, 0, 0, 0, 31301, 31306, 31311, + 31316, 31321, 31326, 31331, 31340, 31347, 31352, 31357, 31362, 31367, + 31372, 0, 0, 31377, 31384, 31387, 31390, 31393, 31398, 31402, 31408, + 31412, 31417, 31424, 31432, 31436, 31441, 31445, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 31450, 31456, 31462, 31466, 31470, 31474, + 31478, 31484, 31488, 31494, 31498, 31504, 31510, 31518, 31524, 31532, + 31536, 31540, 31544, 31550, 31553, 31559, 31563, 31569, 31573, 31577, + 31583, 31587, 31593, 31597, 31603, 31611, 31619, 31627, 31633, 31637, + 31643, 31647, 31653, 31657, 31660, 31666, 31670, 31676, 31679, 31682, + 31686, 31690, 31694, 31700, 31706, 31710, 31713, 31717, 31722, 31727, + 31734, 31739, 31746, 31753, 31762, 31769, 31778, 31783, 31790, 31797, + 31806, 31811, 31818, 31823, 31829, 31835, 31841, 31847, 31853, 31859, 0, + 0, 0, 0, 31865, 31869, 31872, 31875, 31878, 31881, 31884, 31887, 31891, + 31894, 31898, 31901, 31904, 31907, 31912, 31917, 31922, 31925, 31930, + 31935, 31940, 31945, 31952, 31957, 31962, 31967, 31972, 31979, 31985, + 31991, 31997, 32003, 32009, 32018, 32027, 32033, 32039, 32047, 32055, + 32064, 32073, 32081, 32089, 32098, 32107, 0, 0, 0, 32115, 32120, 32125, + 32130, 32134, 32138, 32142, 32147, 32151, 32155, 32160, 32164, 32169, + 32174, 32179, 32184, 32189, 32194, 32199, 32204, 32209, 32214, 32218, + 32223, 32228, 32233, 32237, 32241, 32246, 32251, 32256, 32261, 32266, + 32270, 32276, 32282, 32288, 32294, 32300, 32306, 32312, 32318, 32324, + 32329, 32334, 32341, 32349, 32354, 32359, 32364, 32368, 32372, 32376, + 32380, 32384, 32388, 32393, 32397, 32402, 32406, 32411, 32416, 32421, + 32427, 32433, 32437, 32443, 32447, 32453, 32459, 32464, 32471, 32475, + 32481, 32486, 32493, 32498, 32505, 32512, 32517, 32524, 32529, 32534, + 32539, 32546, 32550, 32556, 32563, 32570, 32575, 32582, 32589, 32593, + 32599, 32604, 32609, 32616, 32621, 32626, 32631, 32636, 32640, 32644, + 32649, 32654, 32661, 32667, 32672, 32679, 32684, 32691, 32696, 32706, + 32712, 32718, 32722, 0, 0, 0, 0, 0, 0, 0, 0, 32726, 32735, 32742, 32749, + 32756, 32760, 32765, 32770, 32775, 32780, 32785, 32790, 32795, 32800, + 32805, 32810, 32815, 32820, 32825, 32829, 32834, 32839, 32844, 32849, + 32854, 32859, 32863, 32868, 32873, 32878, 32883, 32887, 32892, 32897, + 32901, 32906, 32911, 32916, 32921, 32926, 32930, 32936, 32943, 32949, + 32954, 32959, 32965, 32970, 32976, 32981, 32987, 32993, 32998, 33004, + 33010, 33015, 33021, 33027, 33033, 33038, 0, 0, 0, 33043, 33049, 33059, + 33065, 33073, 33079, 33084, 33088, 33092, 33096, 33100, 33104, 33108, + 33113, 33117, 0, 0, 0, 33122, 33127, 33132, 33137, 33144, 33150, 33156, + 33162, 33168, 33174, 33180, 33187, 33193, 33200, 33207, 33214, 33221, + 33228, 33235, 33242, 33249, 33256, 33263, 33270, 33277, 33284, 33291, + 33298, 33305, 33312, 33319, 33326, 33333, 33340, 33347, 33354, 33361, + 33368, 33375, 33382, 33389, 33396, 33403, 33410, 33418, 33426, 33434, + 33440, 33446, 33452, 33460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31046, 31052, 31058, - 31062, 31066, 31070, 31074, 31080, 31084, 31090, 31094, 31100, 31106, - 31114, 31120, 31128, 31132, 31136, 31140, 31146, 31149, 31155, 31159, - 31165, 31169, 31173, 31179, 31183, 31189, 31193, 31199, 31207, 31215, - 31223, 31229, 31233, 31239, 31243, 31249, 31252, 31255, 31261, 31265, - 31271, 31274, 31277, 31281, 31285, 31289, 31295, 31301, 31305, 31308, - 31312, 31317, 31322, 31329, 31334, 31341, 31348, 31357, 31364, 31373, - 31378, 31385, 31392, 31401, 31406, 31413, 31418, 31424, 31430, 31436, - 31442, 31448, 31454, 0, 0, 0, 0, 31460, 31464, 31467, 31470, 31473, - 31476, 31479, 31482, 31485, 31488, 31491, 31494, 31497, 31500, 31505, - 31510, 31515, 31518, 31523, 31528, 31533, 31538, 31545, 31550, 31555, - 31560, 31565, 31572, 31578, 31584, 31590, 31596, 31602, 31611, 31620, - 31626, 31632, 31641, 31650, 31659, 31668, 31677, 31686, 31695, 31704, 0, - 0, 0, 31713, 31718, 31723, 31728, 31732, 31736, 31740, 31745, 31749, - 31753, 31758, 31762, 31767, 31772, 31777, 31782, 31787, 31792, 31797, - 31802, 31807, 31811, 31815, 31820, 31825, 31830, 31834, 31838, 31843, - 31848, 31853, 31858, 31863, 31867, 31873, 31879, 31885, 31891, 31897, - 31903, 31909, 31915, 31921, 31926, 31931, 31938, 31946, 31951, 31956, - 31961, 31965, 31969, 31973, 31977, 31981, 31985, 31989, 31993, 31997, - 32001, 32006, 32011, 32016, 32022, 32028, 32032, 32038, 32042, 32048, - 32054, 32059, 32066, 32070, 32076, 32080, 32086, 32091, 32098, 32105, - 32110, 32117, 32122, 32127, 32132, 32139, 32143, 32149, 32156, 32163, - 32168, 32175, 32182, 32186, 32192, 32197, 32202, 32209, 32214, 32219, - 32224, 32229, 32233, 32237, 32242, 32247, 32254, 32260, 32265, 32272, - 32277, 32284, 32289, 32299, 32305, 32311, 32315, 0, 0, 0, 0, 0, 0, 0, 0, - 32319, 32328, 32335, 32342, 32349, 32353, 32358, 32363, 32368, 32373, - 32378, 32383, 32388, 32393, 32398, 32403, 32408, 32413, 32417, 32421, - 32426, 32431, 32436, 32441, 32446, 32451, 32455, 32460, 32465, 32470, - 32475, 32479, 32484, 32489, 32493, 32498, 32503, 32508, 32513, 32518, - 32522, 32528, 32535, 32541, 32546, 32551, 32557, 32562, 32568, 32573, - 32579, 32585, 32590, 32596, 32602, 32607, 32613, 32619, 32625, 32630, 0, - 0, 0, 32635, 32641, 32651, 32657, 32665, 32671, 32676, 32680, 32684, - 32688, 32692, 32696, 32700, 32704, 32708, 0, 0, 0, 32712, 32717, 32722, - 32727, 32734, 32740, 32746, 32752, 32758, 32764, 32770, 32776, 32782, - 32788, 32795, 32802, 32809, 32816, 32823, 32830, 32837, 32844, 32851, - 32858, 32865, 32872, 32879, 32886, 32893, 32900, 32907, 32914, 32921, - 32928, 32935, 32942, 32949, 32956, 32963, 32970, 32977, 32984, 32991, - 32998, 33006, 33014, 33022, 33028, 33034, 33040, 33048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 33469, 33477, 33485, 33493, 33501, 33511, 33521, 33531, 0, 0, 0, 0, 0, + 0, 0, 0, 33541, 33546, 33551, 33556, 33561, 33570, 33581, 33590, 33601, + 33607, 33620, 33626, 33633, 33640, 33645, 33651, 33657, 33668, 33677, + 33684, 33691, 33700, 33707, 33716, 33726, 33736, 33743, 33750, 33757, + 33767, 33772, 33780, 33786, 33794, 33803, 33808, 33815, 33821, 33826, 0, + 33831, 33837, 0, 0, 0, 0, 0, 0, 33844, 33849, 33855, 33862, 33870, 33876, + 33882, 33888, 33893, 33900, 33906, 33912, 33918, 33926, 33932, 33940, + 33945, 33951, 33957, 33964, 33972, 33979, 33985, 33992, 33999, 34005, + 34012, 34019, 34025, 34030, 34036, 34044, 34053, 34059, 34065, 34071, + 34077, 34085, 34089, 34095, 34101, 34107, 34113, 34119, 34125, 34129, + 34134, 34139, 34146, 34151, 34155, 34161, 34166, 34171, 34175, 34180, + 34185, 34189, 34194, 34199, 34206, 34210, 34215, 34220, 34224, 34229, + 34233, 34238, 34242, 34248, 34253, 34260, 34265, 34270, 34274, 34279, + 34284, 34291, 34296, 34302, 34307, 34312, 34317, 34321, 34326, 34333, + 34340, 34345, 34350, 34354, 34360, 34367, 34372, 34377, 34382, 34388, + 34393, 34399, 34404, 34410, 34416, 34422, 34429, 34436, 34443, 34450, + 34457, 34464, 34469, 34477, 34486, 34495, 34504, 34513, 34522, 34531, + 34543, 34552, 34561, 34570, 34577, 34582, 34589, 34597, 34605, 34612, + 34619, 34626, 34633, 34641, 34650, 34659, 34668, 34677, 34686, 34695, + 34704, 34713, 34722, 34731, 34740, 34749, 34758, 34767, 34775, 34784, + 34795, 34803, 34812, 34823, 34832, 34841, 34850, 34859, 34867, 34876, + 34883, 34888, 34896, 34901, 34908, 34913, 34922, 34928, 34935, 34942, + 34947, 34952, 34960, 34968, 34977, 34986, 34991, 34998, 35009, 35017, + 35026, 35032, 35038, 35043, 35050, 35055, 35064, 35069, 35074, 35079, + 35086, 35093, 35098, 35107, 35115, 35120, 35125, 35132, 35139, 35143, + 35147, 35150, 35153, 35156, 35159, 35162, 35165, 35172, 35175, 35178, + 35183, 35187, 35191, 35195, 35199, 35203, 35212, 35218, 35224, 35230, + 35238, 35246, 35252, 35258, 35265, 35271, 35276, 35282, 35289, 35295, + 35302, 35308, 35316, 35321, 35327, 35333, 35339, 35345, 35351, 35357, + 35363, 35374, 35384, 35390, 35396, 35406, 35412, 35420, 35428, 35436, 0, + 0, 0, 0, 0, 0, 35441, 35448, 35455, 35460, 35469, 35477, 35485, 35492, + 35499, 35506, 35513, 35521, 35529, 35539, 35549, 35557, 35565, 35573, + 35581, 35590, 35599, 35607, 35615, 35624, 35633, 35643, 35653, 35662, + 35671, 35679, 35687, 35695, 35703, 35713, 35723, 35731, 35739, 35747, + 35755, 35763, 35771, 35779, 35787, 35795, 35803, 35811, 35819, 35828, + 35837, 35846, 35855, 35865, 35875, 35882, 35889, 35897, 35905, 35914, + 35923, 35931, 35939, 35951, 35963, 35972, 35981, 35990, 35999, 36006, + 36013, 36021, 36029, 36037, 36045, 36053, 36061, 36069, 36077, 36086, + 36095, 36104, 36113, 36122, 36131, 36141, 36151, 36161, 36171, 36180, + 36189, 36196, 36203, 36211, 36219, 36227, 36235, 36243, 36251, 36263, + 36275, 36284, 36293, 36301, 36309, 36317, 36325, 36336, 36347, 36358, + 36369, 36381, 36393, 36401, 36409, 36417, 36425, 36434, 36443, 36452, + 36461, 36469, 36477, 36485, 36493, 36501, 36509, 36518, 36527, 36537, + 36547, 36555, 36563, 36571, 36579, 36587, 36595, 36602, 36609, 36617, + 36625, 36633, 36641, 36649, 36657, 36665, 36673, 36681, 36689, 36697, + 36705, 36713, 36721, 36729, 36737, 36746, 36755, 36764, 36772, 36781, + 36790, 36799, 36808, 36818, 36827, 36833, 36838, 36845, 36852, 36860, + 36868, 36877, 36886, 36896, 36906, 36917, 36928, 36938, 36948, 36958, + 36968, 36977, 36986, 36996, 37006, 37017, 37028, 37038, 37048, 37058, + 37068, 37075, 37082, 37090, 37098, 37105, 37112, 37121, 37130, 37140, + 37150, 37161, 37172, 37182, 37192, 37202, 37212, 37221, 37230, 37238, + 37246, 37253, 37260, 37268, 37276, 37285, 37294, 37304, 37314, 37325, + 37336, 37346, 37356, 37366, 37376, 37385, 37394, 37404, 37414, 37425, + 37436, 37446, 37456, 37466, 37476, 37483, 37490, 37498, 37506, 37515, + 37524, 37534, 37544, 37555, 37566, 37576, 37586, 37596, 37606, 37614, + 37622, 37630, 37638, 37647, 37656, 37664, 37672, 37679, 37686, 37693, + 37700, 37708, 37716, 37724, 37732, 37743, 37754, 37765, 37776, 37787, + 37798, 37806, 37814, 37825, 37836, 37847, 37858, 37869, 37880, 37888, + 37896, 37907, 37918, 37929, 0, 0, 37940, 37948, 37956, 37967, 37978, + 37989, 0, 0, 38000, 38008, 38016, 38027, 38038, 38049, 38060, 38071, + 38082, 38090, 38098, 38109, 38120, 38131, 38142, 38153, 38164, 38172, + 38180, 38191, 38202, 38213, 38224, 38235, 38246, 38254, 38262, 38273, + 38284, 38295, 38306, 38317, 38328, 38336, 38344, 38355, 38366, 38377, 0, + 0, 38388, 38396, 38404, 38415, 38426, 38437, 0, 0, 38448, 38456, 38464, + 38475, 38486, 38497, 38508, 38519, 0, 38530, 0, 38538, 0, 38549, 0, + 38560, 38571, 38579, 38587, 38598, 38609, 38620, 38631, 38642, 38653, + 38661, 38669, 38680, 38691, 38702, 38713, 38724, 38735, 38743, 38751, + 38759, 38767, 38775, 38783, 38791, 38799, 38807, 38815, 38823, 38831, + 38839, 0, 0, 38847, 38858, 38869, 38883, 38897, 38911, 38925, 38939, + 38953, 38964, 38975, 38989, 39003, 39017, 39031, 39045, 39059, 39070, + 39081, 39095, 39109, 39123, 39137, 39151, 39165, 39176, 39187, 39201, + 39215, 39229, 39243, 39257, 39271, 39282, 39293, 39307, 39321, 39335, + 39349, 39363, 39377, 39388, 39399, 39413, 39427, 39441, 39455, 39469, + 39483, 39491, 39499, 39510, 39518, 0, 39529, 39537, 39548, 39556, 39564, + 39572, 39580, 39588, 39591, 39594, 39597, 39600, 39606, 39617, 39625, 0, + 39636, 39644, 39655, 39663, 39671, 39679, 39687, 39695, 39701, 39707, + 39713, 39721, 39729, 39740, 0, 0, 39751, 39759, 39770, 39778, 39786, + 39794, 0, 39802, 39808, 39814, 39820, 39828, 39836, 39847, 39858, 39866, + 39874, 39882, 39893, 39901, 39909, 39917, 39925, 39933, 39939, 39945, 0, + 0, 39948, 39959, 39967, 0, 39978, 39986, 39997, 40005, 40013, 40021, + 40029, 40037, 40040, 0, 40043, 40047, 40051, 40055, 40059, 40063, 40067, + 40071, 40075, 40079, 40083, 40087, 40093, 40099, 40105, 40108, 40111, + 40113, 40117, 40121, 40125, 40129, 40132, 40136, 40140, 40146, 40152, + 40159, 40166, 40171, 40176, 40182, 40188, 40190, 40193, 40195, 40199, + 40203, 40207, 40211, 40215, 40219, 40223, 40227, 40231, 40237, 40241, + 40245, 40251, 40256, 40263, 40265, 40268, 40272, 40276, 40281, 40287, + 40289, 40298, 40307, 40310, 40314, 40316, 40318, 40320, 40323, 40329, + 40331, 40335, 40339, 40346, 40353, 40357, 40362, 40367, 40372, 40377, + 40381, 40385, 40388, 40392, 40396, 40403, 40408, 40412, 40416, 40421, + 40425, 40429, 40434, 40439, 40443, 40447, 40451, 40453, 40458, 40463, + 40467, 40471, 40475, 40479, 0, 40483, 40487, 40491, 40497, 40503, 40509, + 40515, 40522, 40529, 40534, 40539, 40543, 0, 0, 40549, 40552, 40555, + 40558, 40562, 40565, 40569, 40573, 40577, 40582, 40587, 40592, 40599, + 40603, 40606, 40609, 40612, 40615, 40618, 40621, 40625, 40628, 40632, + 40636, 40640, 40645, 40650, 0, 40655, 40661, 40667, 40673, 40680, 40687, + 40694, 40701, 40707, 40714, 40721, 40728, 40734, 0, 0, 0, 40741, 40744, + 40747, 40750, 40755, 40758, 40761, 40764, 40767, 40770, 40773, 40778, + 40781, 40784, 40787, 40790, 40793, 40798, 40801, 40804, 40807, 40810, + 40813, 40818, 40821, 40824, 40829, 40834, 40838, 40841, 40844, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40847, 40852, 40857, 40864, + 40872, 40877, 40882, 40886, 40890, 40895, 40902, 40909, 40913, 40918, + 40923, 40928, 40933, 40940, 40945, 40950, 40955, 40964, 40971, 40978, + 40982, 40987, 40993, 40998, 41005, 41013, 41021, 41025, 41029, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41033, 41037, 41045, 41049, 41053, + 41058, 41062, 41066, 41070, 41072, 41076, 41080, 41084, 41089, 41093, + 41097, 41105, 41108, 41112, 41115, 41118, 41124, 41128, 41131, 41137, + 41141, 41145, 41149, 41152, 41156, 41159, 41163, 41165, 41168, 41171, + 41175, 41177, 41181, 41184, 41187, 41192, 41197, 41204, 41207, 41210, + 41214, 41219, 41222, 41225, 41228, 41232, 41237, 41241, 41244, 41246, + 41249, 41252, 41255, 41259, 41264, 41267, 41271, 41275, 41279, 41283, + 41288, 41294, 41299, 41304, 41310, 41315, 41320, 41324, 41328, 41333, + 41337, 41341, 41344, 41346, 41351, 41357, 41364, 41371, 41378, 41385, + 41392, 41399, 41406, 41413, 41421, 41428, 41436, 41443, 41450, 41458, + 41466, 41471, 41476, 41481, 41486, 41491, 41496, 41501, 41507, 41512, + 41518, 41524, 41530, 41536, 41542, 41549, 41557, 41564, 41570, 41576, + 41582, 41588, 41594, 41600, 41607, 41613, 41620, 41627, 41634, 41641, + 41648, 41656, 41665, 41673, 41684, 41692, 41700, 41709, 41716, 41725, + 41734, 41742, 41751, 41759, 41763, 0, 0, 0, 0, 41767, 41769, 41771, + 41773, 41775, 41778, 41781, 41785, 41789, 41794, 41799, 41803, 41807, + 41811, 41815, 41820, 41825, 41830, 41835, 41840, 41845, 41850, 41855, + 41860, 41865, 41871, 41875, 41879, 41884, 41889, 41894, 41899, 41903, + 41910, 41917, 41924, 41931, 41938, 41945, 41952, 41959, 41967, 41979, + 41985, 41991, 41998, 42005, 42012, 42019, 42026, 42033, 42040, 42047, + 42052, 42058, 42063, 42068, 42073, 42078, 42083, 42090, 42097, 42102, + 42108, 42113, 42116, 42119, 42122, 42125, 42129, 42133, 42138, 42143, + 42149, 42155, 42159, 42163, 42167, 42171, 42176, 42181, 42185, 42189, + 42193, 42197, 42202, 42207, 42210, 42213, 42216, 42219, 42225, 42232, + 42243, 42253, 42257, 42265, 42272, 42280, 42289, 42293, 42299, 42305, + 42309, 42314, 42319, 42325, 42331, 42337, 42344, 42348, 42352, 42357, + 42360, 42362, 42366, 42370, 42378, 42382, 42384, 42386, 42390, 42398, + 42403, 42409, 42419, 42426, 42431, 42435, 42439, 42443, 42446, 42449, + 42452, 42456, 42460, 42464, 42468, 42472, 42475, 42479, 42483, 42486, + 42488, 42491, 42493, 42497, 42501, 42503, 42509, 42512, 42517, 42521, + 42525, 42527, 42529, 42531, 42534, 42538, 42542, 42546, 42550, 42554, + 42560, 42566, 42568, 42570, 42572, 42574, 42577, 42579, 42583, 42585, + 42589, 42593, 42598, 42602, 42606, 42610, 42614, 42618, 42624, 42628, + 42638, 42648, 42652, 42658, 42665, 42669, 42673, 42676, 42681, 42685, + 42691, 42695, 42708, 42717, 42721, 42725, 42731, 42735, 42738, 42740, + 42743, 42747, 42751, 42758, 42762, 42766, 42770, 42773, 42778, 42783, + 42789, 42795, 42800, 42805, 42813, 42821, 42825, 42829, 42831, 42836, + 42840, 42844, 42852, 42860, 42867, 42874, 42883, 42892, 42898, 42904, + 42912, 42920, 42922, 42924, 42930, 42936, 42943, 42950, 42956, 42962, + 42966, 42970, 42977, 42984, 42991, 42998, 43008, 43018, 43026, 43034, + 43036, 43040, 43044, 43049, 43054, 43062, 43070, 43073, 43076, 43079, + 43082, 43085, 43090, 43094, 43099, 43104, 43107, 43110, 43113, 43116, + 43119, 43123, 43126, 43129, 43132, 43135, 43137, 43139, 43141, 43143, + 43151, 43159, 43165, 43169, 43175, 43185, 43191, 43197, 43203, 43211, + 43220, 43232, 43236, 43240, 43242, 43248, 43250, 43252, 43254, 43256, + 43262, 43265, 43271, 43277, 43281, 43285, 43289, 43292, 43296, 43300, + 43302, 43311, 43320, 43325, 43330, 43336, 43342, 43348, 43351, 43354, + 43357, 43360, 43362, 43367, 43372, 43377, 43383, 43389, 43398, 43407, + 43414, 43421, 43428, 43435, 43445, 43455, 43465, 43475, 43485, 43495, + 43504, 43513, 43522, 43531, 43539, 43551, 43562, 43578, 43581, 43587, + 43593, 43599, 43607, 43622, 43638, 43644, 43650, 43657, 43663, 43672, + 43679, 43693, 43708, 43713, 43719, 43727, 43730, 43733, 43735, 43738, + 43741, 43743, 43745, 43749, 43752, 43755, 43758, 43761, 43766, 43771, + 43776, 43781, 43786, 43789, 43791, 43793, 43795, 43799, 43803, 43807, + 43813, 43818, 43820, 43822, 43827, 43832, 43837, 43842, 43847, 43852, + 43854, 43856, 43866, 43870, 43878, 43887, 43889, 43894, 43899, 43907, + 43911, 43913, 43917, 43919, 43923, 43927, 43931, 43933, 43935, 43937, + 43944, 43953, 43962, 43971, 43980, 43989, 43998, 44007, 44016, 44024, + 44032, 44041, 44050, 44059, 44068, 44076, 44084, 44093, 44102, 44111, + 44121, 44130, 44140, 44149, 44159, 44167, 44176, 44186, 44195, 44205, + 44214, 44224, 44232, 44241, 44250, 44259, 44268, 44277, 44286, 44296, + 44305, 44314, 44323, 44333, 44342, 44351, 44360, 44369, 44379, 44389, + 44398, 44407, 44415, 44424, 44431, 44440, 44449, 44460, 44469, 44479, + 44489, 44496, 44503, 44510, 44519, 44528, 44537, 44546, 44553, 44558, + 44566, 44571, 44574, 44581, 44584, 44589, 44594, 44597, 44600, 44608, + 44611, 44616, 44619, 44627, 44632, 44640, 44643, 44646, 44649, 44654, + 44659, 44662, 44665, 44673, 44676, 44683, 44690, 44694, 44698, 44703, + 44708, 44714, 44719, 44725, 44731, 44736, 44742, 44750, 44756, 44764, + 44772, 44778, 44786, 44794, 44802, 44810, 44816, 44824, 44832, 44840, + 44844, 44850, 44864, 44878, 44882, 44886, 44890, 44894, 44904, 44908, + 44913, 44918, 44924, 44930, 44936, 44942, 44952, 44962, 44970, 44981, + 44992, 45000, 45011, 45022, 45030, 45041, 45052, 45060, 45068, 45078, + 45088, 45091, 45094, 45097, 45102, 45106, 45112, 45119, 45126, 45134, + 45141, 45145, 45149, 45153, 45157, 45159, 45163, 45167, 45172, 45177, + 45184, 45191, 45194, 45201, 45203, 45205, 45209, 45213, 45218, 45224, + 45230, 45236, 45242, 45251, 45260, 45269, 45273, 45275, 45279, 45286, + 45293, 45300, 45307, 45314, 45317, 45322, 0, 0, 0, 0, 0, 45328, 45332, + 45339, 45346, 45353, 45360, 45364, 45368, 45372, 45376, 45382, 45388, + 45393, 45399, 45405, 45411, 45417, 45425, 45432, 45439, 45446, 45453, + 45458, 45464, 45473, 45477, 45484, 45488, 45492, 45498, 45504, 45510, + 45516, 45520, 45524, 45527, 45530, 45534, 45541, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45548, 45551, 45555, + 45559, 45565, 45571, 45577, 45585, 45592, 45596, 45604, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45609, 45612, 45615, 45618, + 45621, 45624, 45627, 45631, 45634, 45638, 45642, 45646, 45650, 45654, + 45658, 45662, 45666, 45670, 45674, 45678, 45682, 45685, 45688, 45691, + 45694, 45697, 45700, 45704, 45707, 45711, 45715, 45719, 45723, 45727, + 45731, 45735, 45739, 45743, 45747, 45751, 45755, 45761, 45767, 45773, + 45780, 45787, 45794, 45801, 45808, 45815, 45822, 45829, 45836, 45843, + 45850, 45857, 45864, 45871, 45878, 45885, 45892, 45897, 45903, 45909, + 45915, 45920, 45926, 45932, 45938, 45943, 45949, 45955, 45960, 45966, + 45972, 45977, 45983, 45989, 45994, 45999, 46005, 46010, 46016, 46022, + 46028, 46034, 46040, 46045, 46051, 46057, 46063, 46068, 46074, 46080, + 46086, 46091, 46097, 46103, 46108, 46114, 46120, 46125, 46131, 46137, + 46142, 46147, 46153, 46158, 46164, 46170, 46176, 46182, 46188, 46193, + 46199, 46205, 46211, 46216, 46222, 46228, 46234, 46239, 46245, 46251, + 46256, 46262, 46268, 46273, 46279, 46285, 46290, 46295, 46301, 46306, + 46312, 46318, 46324, 46330, 46336, 46340, 46345, 46350, 46355, 46360, + 46365, 46370, 46375, 46380, 46385, 46390, 46394, 46398, 46402, 46406, + 46410, 46414, 46419, 46423, 46428, 46433, 46438, 46443, 46448, 46453, + 46458, 46467, 46476, 46485, 46494, 46503, 46512, 46521, 46530, 46537, + 46545, 46553, 46560, 46567, 46575, 46583, 46590, 46597, 46605, 46613, + 46620, 46627, 46635, 46643, 46650, 46657, 46665, 46674, 46683, 46691, + 46700, 46709, 46716, 46723, 46731, 46740, 46749, 46757, 46766, 46775, + 46782, 46789, 46798, 46807, 46816, 46825, 46834, 46843, 46850, 46857, + 46866, 46875, 46884, 46893, 46902, 46911, 46918, 46925, 46934, 46943, + 46952, 46962, 46972, 46981, 46991, 47001, 47011, 47021, 47031, 47041, + 47050, 47059, 47066, 47074, 47082, 47090, 47098, 47103, 47108, 47117, + 47125, 47132, 47141, 47149, 47156, 47165, 47173, 47180, 47189, 47197, + 47204, 47213, 47221, 47228, 47237, 47245, 47252, 47262, 47271, 47278, + 47288, 47297, 47304, 47314, 47323, 47330, 47339, 47348, 47357, 47366, + 47380, 47394, 47401, 47406, 47411, 47416, 47421, 47426, 47431, 47436, + 47441, 47449, 47457, 47465, 47473, 47478, 47485, 47492, 47499, 47504, + 47512, 47519, 47527, 47531, 47538, 47544, 47551, 47555, 47561, 47567, + 47573, 47577, 47580, 47584, 47588, 47595, 47601, 47607, 47613, 47619, + 47633, 47643, 47657, 47671, 47677, 47687, 47701, 47704, 47707, 47714, + 47722, 47728, 47733, 47741, 47753, 47765, 47773, 47777, 47781, 47784, + 47787, 47791, 47795, 47798, 47801, 47806, 47811, 47817, 47823, 47828, + 47833, 47839, 47845, 47850, 47855, 47860, 47865, 47871, 47877, 47882, + 47887, 47893, 47899, 47904, 47909, 47912, 47915, 47924, 47926, 47928, + 47931, 47935, 47941, 47943, 47946, 47953, 47960, 47968, 47976, 47986, + 48000, 48005, 48010, 48014, 48019, 48027, 48035, 48044, 48053, 48062, + 48071, 48076, 48081, 48087, 48093, 48099, 48105, 48108, 48114, 48120, + 48130, 48140, 48148, 48156, 48165, 48174, 48178, 48186, 48194, 48202, + 48210, 48219, 48228, 48237, 48246, 48251, 48256, 48261, 48266, 48271, + 48277, 48283, 48288, 48294, 48296, 48298, 48300, 48302, 48305, 48308, + 48310, 48312, 48314, 48318, 48322, 48324, 48326, 48329, 48332, 48336, + 48342, 48348, 48350, 48357, 48361, 48366, 48371, 48373, 48383, 48389, + 48395, 48401, 48407, 48413, 48419, 48424, 48427, 48430, 48433, 48435, + 48437, 48441, 48445, 48450, 48455, 48460, 48463, 48467, 48472, 48475, + 48479, 48484, 48489, 48494, 48499, 48504, 48509, 48514, 48519, 48524, + 48529, 48534, 48539, 48545, 48551, 48557, 48559, 48562, 48564, 48567, + 48569, 48571, 48573, 48575, 48577, 48579, 48581, 48583, 48585, 48587, + 48589, 48591, 48593, 48595, 48597, 48599, 48601, 48606, 48611, 48616, + 48621, 48626, 48631, 48636, 48641, 48646, 48651, 48656, 48661, 48666, + 48671, 48676, 48681, 48686, 48691, 48696, 48701, 48705, 48709, 48713, + 48719, 48725, 48730, 48735, 48740, 48746, 48752, 48757, 48765, 48773, + 48781, 48789, 48797, 48805, 48813, 48821, 48827, 48832, 48837, 48842, + 48845, 48849, 48853, 48857, 48861, 48865, 48869, 48876, 48883, 48891, + 48899, 48904, 48909, 48916, 48923, 48930, 48937, 48940, 48943, 48948, + 48950, 48954, 48959, 48961, 48963, 48965, 48967, 48972, 48975, 48977, + 48982, 48989, 48996, 48999, 49003, 49008, 49013, 49021, 49027, 49033, + 49045, 49052, 49060, 49065, 49070, 49076, 49079, 49082, 49087, 49089, + 49093, 49095, 49097, 49099, 49101, 49103, 49105, 49110, 49112, 49114, + 49116, 49118, 49122, 49124, 49127, 49132, 49137, 49142, 49147, 49153, + 49159, 49161, 49164, 49171, 49178, 49185, 49192, 49196, 49200, 49202, + 49204, 49208, 49214, 49219, 49221, 49225, 49234, 49242, 49250, 49256, + 49262, 49267, 49273, 49278, 49281, 49295, 49298, 49303, 49308, 49314, + 49324, 49326, 49332, 49338, 49342, 49349, 49353, 49355, 49357, 49361, + 49367, 49372, 49378, 49380, 49386, 49388, 49394, 49396, 49398, 49403, + 49405, 49409, 49414, 49416, 49421, 49426, 49430, 49437, 49447, 49452, + 49458, 49461, 49467, 49470, 49475, 49480, 49484, 49486, 49488, 49492, + 49496, 49500, 49504, 49509, 49511, 49516, 49519, 49522, 49525, 49529, + 49533, 49538, 49542, 49547, 49552, 49556, 49561, 49567, 49570, 49576, + 49581, 49585, 49590, 49596, 49602, 49609, 49615, 49622, 49629, 49631, + 49638, 49642, 49648, 49654, 49659, 49665, 49669, 49674, 49677, 49682, + 49688, 49695, 49703, 49710, 49719, 49729, 49736, 49742, 49746, 49753, + 49758, 49767, 49770, 49773, 49782, 49792, 49799, 49801, 49807, 49812, + 49814, 49817, 49821, 49829, 49838, 49841, 49846, 49851, 49859, 49867, + 49875, 49883, 49889, 49895, 49901, 49909, 49914, 49917, 49921, 49924, + 49936, 49946, 49957, 49966, 49977, 49987, 49996, 50002, 50010, 50014, + 50022, 50026, 50034, 50041, 50048, 50057, 50066, 50076, 50086, 50096, + 50106, 50115, 50124, 50134, 50144, 50153, 50162, 50168, 50174, 50180, + 50186, 50192, 50198, 50205, 50211, 50218, 50225, 50231, 50237, 50243, + 50249, 50255, 50261, 50268, 50274, 50281, 50288, 50295, 50302, 50309, + 50316, 50323, 50330, 50338, 50345, 50353, 50361, 50366, 50369, 50373, + 50377, 50383, 50386, 50391, 50397, 50402, 50406, 50411, 50417, 50424, + 50427, 50434, 50441, 50445, 50453, 50461, 50466, 50472, 50477, 50482, + 50489, 50496, 50504, 50512, 50521, 50525, 50534, 50539, 50543, 50550, + 50554, 50560, 50568, 50573, 50580, 50584, 50589, 50593, 50598, 50602, + 50607, 50612, 50621, 50623, 50626, 50629, 50636, 50643, 50649, 50657, + 50663, 50670, 50675, 50678, 50683, 50688, 50693, 50701, 50705, 50712, + 50720, 50728, 50733, 50738, 50744, 50749, 50754, 50760, 50765, 50768, + 50772, 50776, 50783, 50793, 50798, 50807, 50816, 50822, 50828, 50833, + 50838, 50843, 50848, 50854, 50860, 50868, 50876, 50882, 50888, 50892, + 50896, 50903, 50910, 50916, 50919, 50922, 50926, 50930, 50934, 50939, + 50945, 50951, 50958, 50965, 50970, 50974, 50978, 50982, 50986, 50990, + 50994, 50998, 51002, 51006, 51010, 51014, 51018, 51022, 51026, 51030, + 51034, 51038, 51042, 51046, 51050, 51054, 51058, 51062, 51066, 51070, + 51074, 51078, 51082, 51086, 51090, 51094, 51098, 51102, 51106, 51110, + 51114, 51118, 51122, 51126, 51130, 51134, 51138, 51142, 51146, 51150, + 51154, 51158, 51162, 51166, 51170, 51174, 51178, 51182, 51186, 51190, + 51194, 51198, 51202, 51206, 51210, 51214, 51218, 51222, 51226, 51230, + 51234, 51238, 51242, 51246, 51250, 51254, 51258, 51262, 51266, 51270, + 51274, 51278, 51282, 51286, 51290, 51294, 51298, 51302, 51306, 51310, + 51314, 51318, 51322, 51326, 51330, 51334, 51338, 51342, 51346, 51350, + 51354, 51358, 51362, 51366, 51370, 51374, 51378, 51382, 51386, 51390, + 51394, 51398, 51402, 51406, 51410, 51414, 51418, 51422, 51426, 51430, + 51434, 51438, 51442, 51446, 51450, 51454, 51458, 51462, 51466, 51470, + 51474, 51478, 51482, 51486, 51490, 51494, 51498, 51502, 51506, 51510, + 51514, 51518, 51522, 51526, 51530, 51534, 51538, 51542, 51546, 51550, + 51554, 51558, 51562, 51566, 51570, 51574, 51578, 51582, 51586, 51590, + 51594, 51598, 51602, 51606, 51610, 51614, 51618, 51622, 51626, 51630, + 51634, 51638, 51642, 51646, 51650, 51654, 51658, 51662, 51666, 51670, + 51674, 51678, 51682, 51686, 51690, 51694, 51698, 51702, 51706, 51710, + 51714, 51718, 51722, 51726, 51730, 51734, 51738, 51742, 51746, 51750, + 51754, 51758, 51762, 51766, 51770, 51774, 51778, 51782, 51786, 51790, + 51794, 51798, 51802, 51806, 51810, 51814, 51818, 51822, 51826, 51830, + 51834, 51838, 51842, 51846, 51850, 51854, 51858, 51862, 51866, 51870, + 51874, 51878, 51882, 51886, 51890, 51894, 51898, 51902, 51906, 51910, + 51914, 51918, 51922, 51926, 51930, 51934, 51938, 51942, 51946, 51950, + 51954, 51958, 51962, 51966, 51970, 51974, 51978, 51982, 51986, 51990, + 51994, 52001, 52009, 52015, 52021, 52028, 52035, 52041, 52047, 52053, + 52059, 52063, 52067, 52072, 52077, 52083, 52089, 52097, 52104, 52109, + 52114, 52122, 52131, 52138, 52148, 52159, 52162, 52165, 52169, 52173, + 52180, 52187, 52198, 52209, 52218, 52227, 52233, 52239, 52246, 52253, + 52262, 52272, 52283, 52293, 52303, 52313, 52324, 52335, 52345, 52356, + 52366, 52376, 52385, 52395, 52405, 52415, 52425, 52432, 52439, 52446, + 52453, 52463, 52473, 52481, 52489, 52496, 52503, 52510, 52517, 52524, + 52529, 52534, 52540, 52548, 52557, 52565, 52573, 52581, 52589, 52597, + 52605, 52613, 52621, 52630, 52639, 52648, 52657, 52666, 52675, 52684, + 52693, 52702, 52711, 52720, 52729, 52738, 52747, 52756, 52765, 52779, + 52794, 52808, 52823, 52837, 52851, 52865, 52879, 52889, 52900, 52910, + 52921, 52936, 52951, 52959, 52965, 52972, 52979, 52986, 52993, 52998, + 53004, 53009, 53014, 53020, 53025, 53030, 53035, 53040, 53045, 53052, + 53058, 53066, 53071, 53076, 53080, 53084, 53092, 53100, 53108, 53116, + 53123, 53130, 53143, 53156, 53169, 53182, 53190, 53198, 53204, 53210, + 53217, 53224, 53231, 53238, 53242, 53247, 53255, 53263, 53271, 53278, + 53282, 53290, 53298, 53302, 53306, 53311, 53318, 53326, 53334, 53353, + 53372, 53391, 53410, 53429, 53448, 53467, 53486, 53492, 53499, 53508, + 53516, 53524, 53530, 53533, 53536, 53541, 53544, 53564, 53571, 53577, + 53583, 53587, 53590, 53593, 53596, 53608, 53622, 53629, 53636, 53639, + 53643, 53646, 53651, 53656, 53661, 53667, 53676, 53683, 53690, 53698, + 53705, 53712, 53715, 53721, 53727, 53730, 53733, 53738, 53743, 53749, + 53755, 53759, 53764, 53771, 53775, 53781, 53785, 53789, 53797, 53809, + 53818, 53822, 53824, 53833, 53842, 53848, 53851, 53857, 53863, 53868, + 53873, 53878, 53883, 53888, 53893, 53895, 53901, 53906, 53914, 53918, + 53924, 53927, 53931, 53938, 53945, 53947, 53949, 53955, 53961, 53967, + 53976, 53985, 53992, 53999, 54005, 54012, 54017, 54022, 54027, 54033, + 54039, 54044, 54051, 54055, 54059, 54072, 54085, 54097, 54106, 54112, + 54119, 54124, 54129, 54134, 54139, 54144, 54146, 54153, 54161, 54169, + 54177, 54184, 54192, 54198, 54203, 54209, 54215, 54221, 54228, 54234, + 54242, 54250, 54258, 54266, 54274, 54280, 54286, 54295, 54299, 54308, + 54317, 54326, 54334, 54338, 54344, 54351, 54358, 54362, 54368, 54376, + 54382, 54387, 54393, 54398, 54403, 54410, 54417, 54422, 54427, 54435, + 54443, 54453, 54463, 54470, 54477, 54481, 54485, 54497, 54503, 54510, + 54515, 54520, 54527, 54534, 54540, 54546, 54556, 54563, 54571, 54579, + 54588, 54595, 54601, 54608, 54614, 54622, 54630, 54638, 54646, 54652, + 54657, 54667, 54678, 54685, 54694, 54700, 54705, 54710, 54720, 54727, + 54733, 54739, 54747, 54752, 54759, 54766, 54777, 54784, 54791, 54798, + 54805, 54812, 54820, 54828, 54841, 54854, 54866, 54878, 54892, 54906, + 54912, 54918, 54927, 54936, 54943, 54950, 54959, 54968, 54977, 54986, + 54994, 55002, 55012, 55022, 55036, 55050, 55059, 55068, 55081, 55094, + 55103, 55112, 55123, 55134, 55140, 55146, 55155, 55164, 55169, 55174, + 55182, 55188, 55194, 55202, 55210, 55223, 55236, 55240, 55244, 55252, + 55260, 55267, 55275, 55283, 55292, 55301, 55307, 55313, 55320, 55327, + 55334, 55341, 55350, 55359, 55362, 55365, 55370, 55375, 55381, 55387, + 55394, 55401, 55412, 55423, 55430, 55437, 55445, 55453, 55461, 55469, + 55477, 55485, 55491, 55497, 55501, 55505, 55513, 55521, 55526, 55531, + 55536, 55541, 55547, 55561, 55568, 55575, 55579, 55581, 55583, 55588, + 55593, 55598, 55602, 55610, 55617, 55624, 55632, 55644, 55652, 55660, + 55671, 55675, 55679, 55685, 55693, 55706, 55713, 55720, 55727, 55733, + 55740, 55749, 55758, 55764, 55770, 55776, 55786, 55796, 55804, 55813, + 55818, 55821, 55826, 55831, 55836, 55842, 55848, 55852, 55855, 55858, + 55861, 55866, 55871, 55877, 55883, 55887, 55891, 55898, 55905, 55912, + 55919, 55926, 55933, 55943, 55953, 55960, 55967, 55975, 55983, 55987, + 55992, 55997, 56003, 56009, 56012, 56015, 56018, 56021, 56026, 56031, + 56036, 56041, 56046, 56051, 56055, 56059, 56063, 56068, 56073, 56077, + 56081, 56087, 56091, 56097, 56102, 56109, 56117, 56124, 56132, 56139, + 56147, 56156, 56163, 56173, 56184, 56190, 56199, 56205, 56214, 56223, + 56229, 56235, 56239, 56243, 56252, 56261, 56268, 56275, 56284, 56293, + 56299, 56305, 56312, 56317, 56321, 56325, 56330, 56335, 56340, 56348, + 56356, 56359, 56363, 56372, 56382, 56391, 56401, 56412, 56425, 56429, + 56433, 56437, 56441, 56446, 56451, 56457, 56463, 56470, 56477, 56483, + 56489, 56495, 56501, 56509, 56517, 56524, 56531, 56538, 0, 0, 56545, + 56554, 56563, 56573, 56583, 56592, 56601, 56610, 56619, 56625, 56630, + 56639, 56649, 56658, 56668, 56675, 56682, 56689, 56696, 56701, 56706, + 56711, 56716, 56724, 56733, 56741, 56750, 56754, 56758, 56762, 56766, + 56776, 0, 0, 56779, 56788, 56797, 56806, 56815, 56821, 56827, 56833, + 56839, 56849, 56859, 56869, 56879, 56889, 56899, 56909, 56919, 56926, + 56933, 56940, 56947, 56954, 56961, 56968, 56975, 56981, 56987, 56993, + 56999, 57005, 57011, 57017, 57023, 57034, 0, 0, 0, 57044, 57051, 57054, + 57058, 57062, 57067, 57072, 57077, 57080, 57089, 57098, 57107, 0, 57116, + 57122, 57128, 57136, 57146, 57153, 57162, 57167, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57170, 57179, + 57188, 57197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57206, + 57211, 57216, 57221, 57226, 57231, 57236, 57241, 57246, 57251, 57256, + 57262, 57266, 57271, 57276, 57281, 57286, 57291, 57296, 57301, 57306, + 57311, 57316, 57321, 57326, 57331, 57336, 57341, 57346, 57351, 57356, + 57361, 57366, 57371, 57376, 57382, 57387, 57393, 57402, 57407, 57415, + 57422, 57431, 57436, 57441, 57446, 57452, 0, 57459, 57464, 57469, 57474, + 57479, 57484, 57489, 57494, 57499, 57504, 57509, 57515, 57519, 57524, + 57529, 57534, 57539, 57544, 57549, 57554, 57559, 57564, 57569, 57574, + 57579, 57584, 57589, 57594, 57599, 57604, 57609, 57614, 57619, 57624, + 57629, 57635, 57640, 57646, 57655, 57660, 57668, 57675, 57684, 57689, + 57694, 57699, 57705, 0, 57712, 57720, 57728, 57737, 57744, 57752, 57758, + 57767, 57775, 57783, 57791, 57799, 57807, 57815, 57820, 57827, 57833, + 57840, 57848, 57855, 57862, 57870, 57876, 57882, 57889, 57896, 57906, + 57916, 57923, 57930, 57935, 57945, 57955, 57960, 57965, 57970, 57975, + 57980, 57985, 57990, 57995, 58000, 58005, 58010, 58015, 58020, 58025, + 58030, 58035, 58040, 58045, 58050, 58055, 58060, 58065, 58070, 58075, + 58080, 58085, 58090, 58095, 58100, 58105, 58109, 58113, 58118, 58123, + 58128, 58133, 58138, 58143, 58148, 58153, 58158, 58163, 58168, 58173, + 58178, 58183, 58188, 58193, 58198, 58203, 58210, 58217, 58224, 58231, + 58238, 58245, 58252, 58259, 58266, 58273, 58280, 58287, 58294, 58301, + 58306, 58311, 58318, 58325, 58332, 58339, 58346, 58353, 58360, 58367, + 58374, 58381, 58388, 58395, 58401, 58407, 58413, 58419, 58426, 58433, + 58440, 58447, 58454, 58461, 58468, 58475, 58482, 58489, 58497, 58505, + 58513, 58521, 58529, 58537, 58545, 58553, 58557, 58563, 58569, 58573, + 58579, 58585, 58591, 58598, 58605, 58612, 58619, 58624, 58630, 58636, + 58643, 0, 0, 0, 0, 0, 58650, 58658, 58667, 58676, 58684, 58690, 58695, + 58700, 58705, 58710, 58715, 58720, 58725, 58730, 58735, 58740, 58745, + 58750, 58755, 58760, 58765, 58770, 58775, 58780, 58785, 58790, 58795, + 58800, 58805, 58810, 58815, 58820, 58825, 58830, 58835, 58840, 58845, + 58850, 58855, 58860, 58865, 58870, 58875, 58880, 58885, 0, 58890, 0, 0, + 0, 0, 0, 58895, 0, 0, 58900, 58904, 58909, 58914, 58919, 58924, 58933, + 58938, 58943, 58948, 58953, 58958, 58963, 58968, 58973, 58980, 58985, + 58990, 58999, 59006, 59011, 59016, 59021, 59028, 59033, 59040, 59045, + 59050, 59057, 59064, 59069, 59074, 59079, 59086, 59093, 59098, 59103, + 59108, 59113, 59118, 59125, 59132, 59137, 59142, 59147, 59152, 59157, + 59162, 59167, 59172, 59177, 59182, 59187, 59194, 59199, 59204, 0, 0, 0, + 0, 0, 0, 0, 59209, 59216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 59221, 59226, 59230, 59234, 59238, 59242, 59246, 59250, 59254, 59258, + 59262, 59266, 59272, 59276, 59280, 59284, 59288, 59292, 59296, 59300, + 59304, 59308, 59312, 59316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59320, 59324, + 59328, 59332, 59336, 59340, 59344, 0, 59348, 59352, 59356, 59360, 59364, + 59368, 59372, 0, 59376, 59380, 59384, 59388, 59392, 59396, 59400, 0, + 59404, 59408, 59412, 59416, 59420, 59424, 59428, 0, 59432, 59436, 59440, + 59444, 59448, 59452, 59456, 0, 59460, 59464, 59468, 59472, 59476, 59480, + 59484, 0, 59488, 59492, 59496, 59500, 59504, 59508, 59512, 0, 59516, + 59520, 59524, 59528, 59532, 59536, 59540, 0, 59544, 59549, 59554, 59559, + 59564, 59569, 59574, 59578, 59583, 59588, 59593, 59597, 59602, 59607, + 59612, 59617, 59621, 59626, 59631, 59636, 59641, 59646, 59651, 59655, + 59660, 59665, 59672, 59677, 59682, 59688, 59695, 59702, 59711, 59718, + 59727, 59731, 59735, 59741, 59747, 59753, 59761, 59767, 59771, 59775, + 59779, 59785, 59791, 59795, 59797, 59801, 59807, 59809, 59813, 59816, + 59819, 59825, 59830, 59834, 59838, 59843, 59849, 59854, 59859, 59864, + 59869, 59876, 59883, 59888, 59893, 59898, 59903, 59908, 59913, 59917, + 59921, 59928, 59935, 59941, 59945, 59950, 59953, 59957, 59964, 59968, + 59972, 59976, 59980, 59986, 59992, 59996, 60002, 60006, 60010, 60016, + 60021, 60026, 60028, 60031, 60035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33057, 33065, 33073, 33081, 33089, 33099, - 33109, 33119, 0, 0, 0, 0, 0, 0, 0, 0, 33129, 33134, 33139, 33144, 33149, - 33158, 33169, 33178, 33189, 33195, 33208, 33214, 33221, 33228, 33233, - 33239, 33245, 33256, 33265, 33272, 33279, 33288, 33295, 33304, 33314, - 33324, 33331, 33338, 33345, 33355, 33360, 33368, 33374, 33382, 33391, - 33396, 33403, 33409, 33414, 0, 33419, 33425, 0, 0, 0, 0, 0, 0, 33432, - 33437, 33443, 33449, 33457, 33463, 33469, 33475, 33480, 33487, 33492, - 33498, 33504, 33512, 33518, 33526, 33531, 33538, 33544, 33552, 33560, - 33566, 33572, 33579, 33586, 33592, 33599, 33605, 33611, 33616, 33622, - 33630, 33638, 33644, 33650, 33656, 33662, 33670, 33674, 33680, 33686, - 33692, 33698, 33704, 33710, 33714, 33719, 33724, 33731, 33736, 33740, - 33746, 33751, 33756, 33760, 33765, 33770, 33774, 33779, 33784, 33791, - 33795, 33800, 33805, 33809, 33814, 33818, 33823, 33827, 33832, 33837, - 33843, 33848, 33853, 33857, 33862, 33868, 33875, 33880, 33885, 33890, - 33895, 33900, 33904, 33910, 33917, 33924, 33929, 33934, 33938, 33944, - 33950, 33955, 33960, 33965, 33971, 33976, 33982, 33987, 33993, 33999, - 34005, 34012, 34019, 34026, 34033, 34040, 34047, 34052, 34061, 34071, - 34081, 34091, 34101, 34111, 34121, 34134, 34144, 34154, 34164, 34170, - 34175, 34182, 34190, 34198, 34205, 34212, 34219, 34226, 34234, 34243, - 34252, 34261, 34270, 34279, 34288, 34297, 34306, 34315, 34324, 34333, - 34342, 34351, 34360, 34368, 34377, 34388, 34396, 34406, 34418, 34427, - 34436, 34446, 34455, 34463, 34472, 34478, 34483, 34491, 34496, 34504, - 34509, 34518, 34524, 34530, 34537, 34542, 34547, 34555, 34563, 34572, - 34581, 34586, 34593, 34603, 34611, 34620, 34626, 34632, 34637, 34644, - 34649, 34658, 34663, 34668, 34673, 34680, 34686, 34691, 34700, 34708, - 34713, 34718, 34725, 34732, 34736, 34740, 34743, 34746, 34749, 34752, - 34755, 34758, 34765, 34768, 34771, 34776, 34780, 34784, 34788, 34792, - 34796, 34806, 34812, 34818, 34824, 34832, 34840, 34846, 34852, 34859, - 34865, 34870, 34876, 34883, 34889, 34896, 34902, 34910, 34915, 34921, - 34927, 34933, 34939, 34945, 34951, 34957, 34969, 34979, 34985, 34991, - 35001, 35007, 35015, 35023, 35031, 0, 0, 0, 0, 0, 0, 35036, 35043, 35050, - 35055, 35064, 35072, 35080, 35087, 35094, 35101, 35108, 35116, 35124, - 35134, 35144, 35152, 35160, 35168, 35176, 35185, 35194, 35202, 35210, - 35219, 35228, 35238, 35248, 35257, 35266, 35274, 35282, 35290, 35298, - 35308, 35318, 35326, 35334, 35342, 35350, 35358, 35366, 35374, 35382, - 35390, 35398, 35406, 35414, 35423, 35432, 35441, 35450, 35460, 35470, - 35477, 35484, 35492, 35500, 35509, 35518, 35526, 35534, 35546, 35558, - 35567, 35576, 35585, 35594, 35601, 35608, 35616, 35624, 35632, 35640, - 35648, 35656, 35664, 35672, 35681, 35690, 35699, 35708, 35717, 35726, - 35736, 35746, 35756, 35766, 35775, 35784, 35791, 35798, 35806, 35814, - 35822, 35830, 35838, 35846, 35858, 35870, 35879, 35888, 35896, 35904, - 35912, 35920, 35931, 35942, 35953, 35964, 35976, 35988, 35996, 36004, - 36012, 36020, 36029, 36038, 36047, 36056, 36064, 36072, 36080, 36088, - 36096, 36104, 36113, 36122, 36132, 36142, 36150, 36158, 36166, 36174, - 36182, 36190, 36197, 36204, 36212, 36220, 36228, 36236, 36244, 36252, - 36260, 36268, 36276, 36284, 36292, 36300, 36308, 36316, 36324, 36332, - 36341, 36350, 36359, 36367, 36376, 36385, 36394, 36403, 36413, 36422, - 36428, 36433, 36440, 36447, 36455, 36463, 36472, 36481, 36491, 36501, - 36512, 36523, 36533, 36543, 36553, 36563, 36572, 36581, 36591, 36601, - 36612, 36623, 36633, 36643, 36653, 36663, 36670, 36677, 36685, 36693, - 36700, 36707, 36716, 36725, 36735, 36745, 36756, 36767, 36777, 36787, - 36797, 36807, 36816, 36825, 36833, 36841, 36848, 36855, 36863, 36871, - 36880, 36889, 36899, 36909, 36920, 36931, 36941, 36951, 36961, 36971, - 36980, 36989, 36999, 37009, 37020, 37031, 37041, 37051, 37061, 37071, - 37078, 37085, 37093, 37101, 37110, 37119, 37129, 37139, 37150, 37161, - 37171, 37181, 37191, 37201, 37209, 37217, 37225, 37233, 37242, 37251, - 37259, 37267, 37274, 37281, 37288, 37295, 37303, 37311, 37319, 37327, - 37338, 37349, 37360, 37371, 37382, 37393, 37401, 37409, 37420, 37431, - 37442, 37453, 37464, 37475, 37483, 37491, 37502, 37513, 37524, 0, 0, - 37535, 37543, 37551, 37562, 37573, 37584, 0, 0, 37595, 37603, 37611, - 37622, 37633, 37644, 37655, 37666, 37677, 37685, 37693, 37704, 37715, - 37726, 37737, 37748, 37759, 37767, 37775, 37786, 37797, 37808, 37819, - 37830, 37841, 37849, 37857, 37868, 37879, 37890, 37901, 37912, 37923, - 37931, 37939, 37950, 37961, 37972, 0, 0, 37983, 37991, 37999, 38010, - 38021, 38032, 0, 0, 38043, 38051, 38059, 38070, 38081, 38092, 38103, - 38114, 0, 38125, 0, 38133, 0, 38144, 0, 38155, 38166, 38174, 38182, - 38193, 38204, 38215, 38226, 38237, 38248, 38256, 38264, 38275, 38286, - 38297, 38308, 38319, 38330, 38338, 38346, 38354, 38362, 38370, 38378, - 38386, 38394, 38402, 38410, 38418, 38426, 38434, 0, 0, 38442, 38453, - 38464, 38478, 38492, 38506, 38520, 38534, 38548, 38559, 38570, 38584, - 38598, 38612, 38626, 38640, 38654, 38665, 38676, 38690, 38704, 38718, - 38732, 38746, 38760, 38771, 38782, 38796, 38810, 38824, 38838, 38852, - 38866, 38877, 38888, 38902, 38916, 38930, 38944, 38958, 38972, 38983, - 38994, 39008, 39022, 39036, 39050, 39064, 39078, 39086, 39094, 39105, - 39113, 0, 39124, 39132, 39143, 39151, 39159, 39167, 39175, 39183, 39186, - 39189, 39192, 39195, 39201, 39212, 39220, 0, 39231, 39239, 39250, 39258, - 39266, 39274, 39282, 39290, 39296, 39302, 39308, 39316, 39324, 39335, 0, - 0, 39346, 39354, 39365, 39373, 39381, 39389, 0, 39397, 39403, 39409, - 39415, 39423, 39431, 39442, 39453, 39461, 39469, 39477, 39488, 39496, - 39504, 39512, 39520, 39528, 39534, 39540, 0, 0, 39543, 39554, 39562, 0, - 39573, 39581, 39592, 39600, 39608, 39616, 39624, 39632, 39635, 0, 39638, - 39642, 39646, 39650, 39654, 39658, 39662, 39666, 39670, 39674, 39678, - 39682, 39688, 39694, 39700, 39703, 39706, 39708, 39712, 39716, 39720, - 39724, 39726, 39730, 39734, 39740, 39746, 39753, 39760, 39765, 39770, - 39776, 39782, 39784, 39787, 39789, 39793, 39797, 39801, 39804, 39808, - 39812, 39816, 39820, 39824, 39830, 39834, 39838, 39844, 39849, 39856, - 39858, 39861, 39865, 39869, 39874, 39880, 39882, 39891, 39900, 39903, - 39907, 39909, 39911, 39913, 39916, 39922, 39924, 39928, 39932, 39939, - 39946, 39950, 39955, 39960, 39965, 39970, 39974, 39978, 39981, 39985, - 39989, 39996, 40001, 40005, 40009, 40014, 40018, 40022, 40027, 40032, - 40036, 40040, 40044, 40046, 40051, 40056, 40060, 40064, 40068, 40072, 0, - 40076, 40080, 40084, 40090, 40096, 40102, 40108, 40115, 40122, 40127, - 40132, 40136, 0, 0, 40142, 40145, 40148, 40151, 40154, 40157, 40160, - 40164, 40168, 40173, 40178, 40183, 40190, 40194, 40197, 40200, 40203, - 40206, 40209, 40212, 40215, 40218, 40221, 40225, 40229, 40234, 40239, 0, - 40244, 40250, 40256, 40262, 40269, 40276, 40283, 40290, 40296, 40303, - 40310, 40317, 40323, 0, 0, 0, 40330, 40333, 40336, 40339, 40344, 40347, - 40350, 40353, 40356, 40359, 40362, 40366, 40369, 40372, 40375, 40378, - 40381, 40386, 40389, 40392, 40395, 40398, 40401, 40406, 40409, 40412, - 40417, 40422, 40426, 40429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 40432, 40437, 40442, 40449, 40457, 40462, 40467, 40471, 40475, - 40480, 40487, 40494, 40498, 40503, 40508, 40513, 40518, 40525, 40530, - 40535, 40540, 40549, 40556, 40563, 40567, 40572, 40578, 40583, 40590, - 40598, 40606, 40610, 40614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 40618, 40622, 40630, 40634, 40638, 40643, 40647, 40651, 40655, 40657, - 40661, 40665, 40669, 40674, 40678, 40682, 40690, 40693, 40697, 40700, - 40703, 40709, 40713, 40716, 40722, 40726, 40730, 40734, 40737, 40741, - 40744, 40748, 40750, 40753, 40756, 40760, 40762, 40766, 40769, 40772, - 40777, 40782, 40788, 40791, 40794, 40798, 40803, 40806, 40809, 40812, - 40816, 40820, 40824, 40827, 40829, 40832, 40835, 40838, 40842, 40847, - 40850, 40854, 40858, 40862, 40866, 40871, 40876, 40880, 40885, 40890, - 40895, 40900, 40904, 40908, 40913, 40917, 40920, 40923, 40925, 40929, - 40935, 40942, 40949, 40956, 40963, 40970, 40977, 40984, 40991, 40999, - 41006, 41014, 41021, 41028, 41036, 41044, 41049, 41054, 41059, 41064, - 41069, 41074, 41079, 41084, 41089, 41094, 41100, 41106, 41112, 41118, - 41125, 41133, 41140, 41146, 41152, 41158, 41164, 41170, 41176, 41182, - 41188, 41194, 41201, 41208, 41215, 41222, 41230, 41239, 41247, 41258, - 41266, 41274, 41283, 41290, 41299, 41308, 41316, 41325, 0, 0, 0, 0, 0, 0, - 41333, 41335, 41337, 41339, 41341, 41344, 41347, 41351, 41355, 41359, - 41363, 41367, 41371, 41375, 41379, 41384, 41389, 41394, 41399, 41404, - 41409, 41414, 41419, 41424, 41429, 41435, 41439, 41443, 41448, 41453, - 41458, 41463, 41467, 41474, 41481, 41488, 41495, 41502, 41509, 41516, - 41523, 41531, 41543, 41550, 41557, 41564, 41571, 41578, 41585, 41592, - 41599, 41606, 41613, 41618, 41624, 41629, 41634, 41639, 41644, 41649, - 41656, 41663, 41668, 41674, 41679, 41682, 41685, 41688, 41691, 41695, - 41699, 41704, 41709, 41714, 41719, 41723, 41727, 41731, 41735, 41740, - 41745, 41749, 41753, 41757, 41761, 41766, 41771, 41774, 41777, 41780, - 41783, 41789, 41796, 41806, 41816, 41820, 41828, 41835, 41843, 41851, - 41855, 41861, 41867, 41871, 41876, 41881, 41887, 41893, 41899, 41906, - 41910, 41914, 41919, 41922, 41924, 41928, 41932, 41940, 41944, 41946, - 41948, 41952, 41960, 41965, 41971, 41981, 41988, 41993, 41997, 42001, - 42005, 42008, 42011, 42014, 42018, 42022, 42026, 42030, 42034, 42037, - 42041, 42045, 42048, 42050, 42053, 42055, 42059, 42063, 42065, 42071, - 42074, 42079, 42083, 42087, 42089, 42091, 42093, 42096, 42100, 42104, - 42108, 42112, 42116, 42122, 42128, 42130, 42132, 42134, 42136, 42139, - 42141, 42145, 42147, 42151, 42155, 42160, 42164, 42168, 42172, 42176, - 42180, 42186, 42190, 42200, 42210, 42214, 42220, 42227, 42231, 42235, - 42238, 42243, 42247, 42253, 42257, 42270, 42279, 42283, 42287, 42293, - 42297, 42300, 42302, 42305, 42309, 42313, 42320, 42324, 42328, 42332, - 42335, 42340, 42345, 42351, 42357, 42362, 42367, 42375, 42383, 42387, - 42391, 42393, 42398, 42402, 42406, 42414, 42422, 42429, 42436, 42445, - 42454, 42460, 42466, 42474, 42482, 42484, 42486, 42492, 42498, 42505, - 42512, 42518, 42524, 42528, 42532, 42539, 42546, 42553, 42560, 42570, - 42580, 42588, 42596, 42598, 42602, 42606, 42611, 42616, 42624, 42632, - 42635, 42638, 42641, 42644, 42647, 42652, 42656, 42661, 42666, 42669, - 42672, 42675, 42678, 42681, 42685, 42688, 42691, 42694, 42697, 42699, - 42701, 42703, 42705, 42713, 42721, 42727, 42731, 42737, 42747, 42753, - 42759, 42765, 42773, 42782, 42794, 42798, 42802, 42804, 42810, 42812, - 42814, 42816, 42818, 42824, 42827, 42833, 42839, 42843, 42847, 42851, - 42854, 42858, 42862, 42864, 42873, 42882, 42887, 42892, 42898, 42904, - 42910, 42913, 42916, 42919, 42922, 42924, 42929, 42934, 42939, 42945, - 42951, 42960, 42969, 42976, 42983, 42990, 42997, 43007, 43017, 43027, - 43037, 43047, 43057, 43066, 43075, 43084, 43093, 43101, 43113, 43124, - 43140, 43143, 43148, 43154, 43160, 43167, 43181, 43196, 43202, 43208, - 43215, 43221, 43229, 43235, 43248, 43262, 43267, 43273, 43281, 43284, - 43287, 43289, 43292, 43295, 43297, 43299, 43303, 43306, 43309, 43312, - 43315, 43320, 43325, 43330, 43335, 43340, 43343, 43345, 43347, 43349, - 43353, 43357, 43361, 43367, 43371, 43373, 43375, 43380, 43385, 43390, - 43395, 43400, 43405, 43407, 43409, 43418, 43422, 43430, 43439, 43441, - 43446, 43451, 43459, 43463, 43465, 43469, 43471, 43475, 43479, 43483, - 43485, 43487, 43489, 43496, 43505, 43514, 43523, 43532, 43541, 43550, - 43559, 43568, 43576, 43584, 43593, 43602, 43611, 43620, 43628, 43636, - 43645, 43654, 43663, 43673, 43682, 43692, 43701, 43711, 43719, 43728, - 43738, 43747, 43757, 43766, 43776, 43784, 43793, 43802, 43811, 43820, - 43829, 43838, 43848, 43857, 43866, 43875, 43885, 43894, 43903, 43912, - 43921, 43931, 43941, 43950, 43959, 43967, 43976, 43983, 43992, 44001, - 44012, 44021, 44031, 44041, 44048, 44055, 44062, 44071, 44080, 44089, - 44098, 44105, 44110, 44118, 44124, 44127, 44135, 44138, 44143, 44148, - 44151, 44154, 44162, 44165, 44170, 44173, 44180, 44185, 44193, 44196, - 44199, 44202, 44207, 44212, 44215, 44218, 44226, 44229, 44236, 44243, - 44247, 44251, 44256, 44261, 44267, 44272, 44278, 44284, 44289, 44295, - 44303, 44309, 44317, 44325, 44331, 44339, 44347, 44356, 44364, 44370, - 44378, 44387, 44395, 44399, 44404, 44418, 44432, 44436, 44440, 44444, - 44448, 44458, 44462, 44467, 44472, 44477, 44482, 44487, 44492, 44502, - 44512, 44520, 44530, 44540, 44548, 44558, 44568, 44576, 44586, 44596, - 44604, 44612, 44622, 44632, 44635, 44638, 44641, 44646, 44650, 44656, - 44663, 44670, 44678, 44685, 44689, 44693, 44697, 44701, 44703, 44707, - 44711, 44716, 44721, 44728, 44735, 44738, 44745, 44747, 44749, 44753, - 44757, 44762, 44768, 44774, 44780, 44786, 44795, 44804, 44813, 44817, - 44819, 44823, 44830, 44837, 44844, 44851, 44858, 44861, 44866, 0, 0, 0, - 0, 0, 44872, 44876, 44883, 44890, 44897, 44904, 44908, 44912, 44916, - 44920, 44925, 44931, 44936, 44942, 44948, 44954, 44960, 44968, 44975, - 44982, 44989, 44996, 45001, 45007, 45016, 45020, 45027, 45031, 45035, - 45041, 45047, 45053, 45059, 45063, 45067, 45070, 45074, 45078, 45085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 45092, 45095, 45099, 45103, 45109, 45115, 45121, 45129, 45136, 45140, - 45148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 45153, 45156, 45159, 45162, 45165, 45168, 45171, 45174, 45177, 45180, - 45184, 45188, 45192, 45196, 45200, 45204, 45208, 45212, 45216, 45220, - 45224, 45227, 45230, 45233, 45236, 45239, 45242, 45245, 45248, 45251, - 45255, 45259, 45263, 45267, 45271, 45275, 45279, 45283, 45287, 45291, - 45295, 45301, 45307, 45313, 45320, 45327, 45334, 45341, 45348, 45355, - 45362, 45369, 45376, 45383, 45390, 45397, 45404, 45411, 45418, 45425, - 45432, 45437, 45443, 45449, 45455, 45460, 45466, 45472, 45478, 45483, - 45489, 45495, 45500, 45506, 45512, 45517, 45523, 45529, 45534, 45539, - 45545, 45550, 45556, 45562, 45568, 45574, 45580, 45585, 45591, 45597, - 45603, 45608, 45614, 45620, 45626, 45631, 45637, 45643, 45648, 45654, - 45660, 45665, 45671, 45677, 45682, 45687, 45693, 45698, 45704, 45710, - 45716, 45722, 45728, 45733, 45739, 45745, 45751, 45756, 45762, 45768, - 45774, 45779, 45785, 45791, 45796, 45802, 45808, 45813, 45819, 45825, - 45830, 45835, 45841, 45846, 45852, 45858, 45864, 45870, 45876, 45880, - 45885, 45890, 45895, 45900, 45905, 45910, 45915, 45920, 45925, 45930, - 45934, 45938, 45942, 45946, 45950, 45954, 45958, 45962, 45966, 45971, - 45976, 45981, 45986, 45991, 45996, 46005, 46014, 46023, 46032, 46041, - 46050, 46059, 46068, 46075, 46083, 46091, 46098, 46105, 46113, 46121, - 46128, 46135, 46143, 46151, 46158, 46165, 46173, 46181, 46188, 46195, - 46203, 46212, 46221, 46229, 46238, 46247, 46254, 46261, 46269, 46278, - 46287, 46295, 46304, 46313, 46320, 46327, 46336, 46345, 46353, 46361, - 46370, 46379, 46386, 46393, 46402, 46411, 46419, 46427, 46436, 46445, - 46452, 46459, 46468, 46477, 46485, 46494, 46503, 46511, 46521, 46531, - 46541, 46551, 46560, 46569, 46578, 46587, 46594, 46602, 46610, 46618, - 46626, 46631, 46636, 46645, 46653, 46660, 46669, 46677, 46684, 46693, - 46701, 46708, 46717, 46725, 46732, 46741, 46749, 46756, 46765, 46773, - 46780, 46789, 46797, 46804, 46813, 46821, 46828, 46837, 46845, 46852, - 46861, 46870, 46879, 46888, 46902, 46916, 46923, 46928, 46933, 46938, - 46943, 46948, 46953, 46958, 46963, 46971, 46979, 46987, 46995, 47000, - 47007, 47014, 47021, 47026, 47034, 47041, 47049, 47053, 47060, 47066, - 47073, 47077, 47083, 47089, 47095, 47099, 47102, 47106, 47110, 47117, - 47123, 47129, 47135, 47141, 47155, 47165, 47179, 47193, 47199, 47209, - 47223, 47226, 47229, 47236, 47244, 47249, 47254, 47262, 47274, 47286, - 47294, 47298, 47302, 47305, 47308, 47312, 47316, 47319, 47322, 47327, - 47332, 47338, 47344, 47349, 47354, 47360, 47366, 47371, 47376, 47381, - 47386, 47392, 47398, 47403, 47408, 47414, 47420, 47425, 47430, 47433, - 47436, 47445, 47447, 47449, 47452, 47456, 47462, 47464, 47467, 47474, - 47481, 47489, 47497, 47507, 47521, 47526, 47531, 47535, 47540, 47548, - 47556, 47565, 47574, 47583, 47592, 47597, 47602, 47608, 47614, 47620, - 47626, 47629, 47635, 47641, 47651, 47661, 47669, 47677, 47686, 47695, - 47699, 47707, 47715, 47723, 47731, 47740, 47749, 47758, 47767, 47772, - 47777, 47782, 47787, 47792, 47798, 47804, 47809, 47815, 47817, 47819, - 47821, 47823, 47826, 47829, 47831, 47833, 47835, 47839, 47843, 47845, - 47847, 47850, 47853, 47857, 47863, 47869, 47871, 47878, 47882, 47887, - 47892, 47894, 47904, 47910, 47916, 47922, 47928, 47934, 47940, 47945, - 47948, 47951, 47954, 47956, 47958, 47962, 47966, 47971, 47976, 47981, - 47984, 47988, 47993, 47996, 48000, 48005, 48010, 48015, 48020, 48025, - 48030, 48035, 48040, 48045, 48050, 48055, 48060, 48066, 48072, 48078, - 48080, 48083, 48085, 48088, 48090, 48092, 48094, 48096, 48098, 48100, - 48102, 48104, 48106, 48108, 48110, 48112, 48114, 48116, 48118, 48120, - 48122, 48127, 48132, 48137, 48142, 48147, 48152, 48157, 48162, 48167, - 48172, 48177, 48182, 48187, 48192, 48197, 48202, 48207, 48212, 48217, - 48222, 48226, 48230, 48234, 48240, 48246, 48251, 48256, 48261, 48267, - 48273, 48278, 48286, 48294, 48302, 48310, 48318, 48326, 48334, 48342, - 48348, 48353, 48358, 48363, 48366, 48370, 48374, 48378, 48382, 48386, - 48390, 48397, 48404, 48412, 48420, 48425, 48430, 48437, 48444, 48451, - 48458, 48461, 48464, 48469, 48471, 48475, 48480, 48482, 48484, 48486, - 48488, 48493, 48496, 48498, 48503, 48510, 48517, 48520, 48524, 48529, - 48534, 48542, 48548, 48554, 48566, 48573, 48580, 48585, 48590, 48596, - 48599, 48602, 48607, 48609, 48613, 48615, 48617, 48619, 48621, 48623, - 48625, 48630, 48632, 48634, 48636, 48638, 48642, 48644, 48647, 48652, - 48657, 48662, 48667, 48673, 48679, 48681, 48684, 48691, 48697, 48703, - 48710, 48714, 48718, 48720, 48722, 48726, 48732, 48737, 48739, 48743, - 48752, 48760, 48768, 48774, 48780, 48785, 48791, 48796, 48799, 48813, - 48816, 48821, 48826, 48832, 48842, 48844, 48850, 48856, 48860, 48867, - 48871, 48873, 48875, 48879, 48885, 48890, 48896, 48898, 48904, 48906, - 48912, 48914, 48916, 48921, 48923, 48927, 48932, 48934, 48939, 48944, - 48948, 48955, 48965, 48970, 48976, 48979, 48985, 48988, 48993, 48998, - 49002, 49004, 49006, 49010, 49014, 49018, 49022, 49027, 49029, 49034, - 49037, 49040, 49043, 49047, 49051, 49056, 49060, 49065, 49070, 49074, - 49080, 49087, 49090, 49096, 49101, 49105, 49110, 49116, 49122, 49129, - 49135, 49142, 49149, 49151, 49158, 49162, 49169, 49175, 49180, 49186, - 49190, 49195, 49198, 49204, 49210, 49217, 49225, 49232, 49241, 49251, - 49258, 49264, 49268, 49276, 49281, 49290, 49293, 49296, 49305, 49316, - 49323, 49325, 49331, 49336, 49338, 49341, 49345, 49353, 49362, 49365, - 49370, 49375, 49383, 49391, 49399, 49407, 49413, 49419, 49425, 49433, - 49438, 49441, 49445, 49448, 49459, 49469, 49479, 49488, 49499, 49509, - 49518, 49524, 49532, 49536, 49544, 49548, 49556, 49563, 49570, 49579, - 49588, 49598, 49608, 49618, 49628, 49637, 49646, 49656, 49666, 49675, - 49684, 49690, 49696, 49702, 49708, 49714, 49720, 49726, 49732, 49738, - 49745, 49751, 49757, 49763, 49769, 49775, 49781, 49787, 49793, 49799, - 49806, 49813, 49820, 49827, 49834, 49841, 49848, 49855, 49862, 49869, - 49877, 49882, 49885, 49889, 49893, 49898, 49901, 49906, 49912, 49917, - 49921, 49926, 49932, 49939, 49942, 49949, 49956, 49960, 49968, 49976, - 49981, 49987, 49992, 49997, 50004, 50011, 50019, 50027, 50036, 50040, - 50049, 50054, 50058, 50064, 50068, 50074, 50081, 50086, 50093, 50097, - 50102, 50106, 50111, 50115, 50120, 50125, 50134, 50136, 50140, 50144, - 50151, 50158, 50164, 50172, 50178, 50184, 50189, 50192, 50197, 50202, - 50207, 50215, 50219, 50226, 50234, 50242, 50247, 50252, 50258, 50263, - 50268, 50274, 50279, 50282, 50286, 50290, 50297, 50306, 50311, 50320, - 50329, 50335, 50341, 50346, 50351, 50356, 50361, 50367, 50373, 50381, - 50389, 50395, 50401, 50405, 50409, 50416, 50423, 50429, 50432, 50435, - 50439, 50443, 50447, 50452, 50458, 50464, 50471, 50478, 50483, 50487, - 50491, 50495, 50499, 50503, 50507, 50511, 50515, 50519, 50523, 50527, - 50531, 50535, 50539, 50543, 50547, 50551, 50555, 50559, 50563, 50567, - 50571, 50575, 50579, 50583, 50587, 50591, 50595, 50599, 50603, 50607, - 50611, 50615, 50619, 50623, 50627, 50631, 50635, 50639, 50643, 50647, - 50651, 50655, 50659, 50663, 50667, 50671, 50675, 50679, 50683, 50687, - 50691, 50695, 50699, 50703, 50707, 50711, 50715, 50719, 50723, 50727, - 50731, 50735, 50739, 50743, 50747, 50751, 50755, 50759, 50763, 50767, - 50771, 50775, 50779, 50783, 50787, 50791, 50795, 50799, 50803, 50807, - 50811, 50815, 50819, 50823, 50827, 50831, 50835, 50839, 50843, 50847, - 50851, 50855, 50859, 50863, 50867, 50871, 50875, 50879, 50883, 50887, - 50891, 50895, 50899, 50903, 50907, 50911, 50915, 50919, 50923, 50927, - 50931, 50935, 50939, 50943, 50947, 50951, 50955, 50959, 50963, 50967, - 50971, 50975, 50979, 50983, 50987, 50991, 50995, 50999, 51003, 51007, - 51011, 51015, 51019, 51023, 51027, 51031, 51035, 51039, 51043, 51047, - 51051, 51055, 51059, 51063, 51067, 51071, 51075, 51079, 51083, 51087, - 51091, 51095, 51099, 51103, 51107, 51111, 51115, 51119, 51123, 51127, - 51131, 51135, 51139, 51143, 51147, 51151, 51155, 51159, 51163, 51167, - 51171, 51175, 51179, 51183, 51187, 51191, 51195, 51199, 51203, 51207, - 51211, 51215, 51219, 51223, 51227, 51231, 51235, 51239, 51243, 51247, - 51251, 51255, 51259, 51263, 51267, 51271, 51275, 51279, 51283, 51287, - 51291, 51295, 51299, 51303, 51307, 51311, 51315, 51319, 51323, 51327, - 51331, 51335, 51339, 51343, 51347, 51351, 51355, 51359, 51363, 51367, - 51371, 51375, 51379, 51383, 51387, 51391, 51395, 51399, 51403, 51407, - 51411, 51415, 51419, 51423, 51427, 51431, 51435, 51439, 51443, 51447, - 51451, 51455, 51459, 51463, 51467, 51471, 51475, 51479, 51483, 51487, - 51491, 51495, 51499, 51503, 51507, 51514, 51522, 51528, 51534, 51541, - 51548, 51554, 51560, 51565, 51570, 51574, 51578, 51583, 51588, 51594, - 51600, 51608, 51615, 51620, 51625, 51633, 51642, 51649, 51659, 51670, - 51673, 51676, 51680, 51684, 51691, 51698, 51709, 51720, 51728, 51736, - 51742, 51748, 51754, 51760, 51769, 51778, 51787, 51796, 51806, 51816, - 51826, 51836, 51846, 51856, 51866, 51876, 51885, 51895, 51905, 51915, - 51925, 51932, 51939, 51946, 51953, 51963, 51973, 51981, 51989, 51996, - 52003, 52010, 52017, 52024, 52029, 52034, 52040, 52048, 52057, 52065, - 52073, 52081, 52089, 52097, 52105, 52113, 52121, 52130, 52139, 52148, - 52157, 52166, 52175, 52184, 52193, 52202, 52211, 52220, 52229, 52238, - 52247, 52256, 52265, 52279, 52294, 52308, 52323, 52337, 52351, 52365, - 52379, 52389, 52400, 52410, 52421, 52436, 52451, 52459, 52465, 52472, - 52479, 52486, 52493, 52498, 52504, 52509, 52514, 52520, 52525, 52530, - 52535, 52540, 52545, 52552, 52558, 52566, 52571, 52576, 52580, 52584, - 52592, 52600, 52608, 52616, 52623, 52630, 52643, 52656, 52669, 52682, - 52690, 52698, 52704, 52710, 52717, 52724, 52731, 52738, 52742, 52747, - 52755, 52763, 52771, 52778, 52782, 52790, 52798, 52801, 52805, 52810, - 52817, 52825, 52833, 52853, 52873, 52893, 52913, 52933, 52953, 52973, - 52993, 52999, 53006, 53015, 53023, 53031, 53036, 53039, 53042, 53047, - 53050, 53069, 53076, 53082, 53088, 53092, 53095, 53098, 53101, 53113, - 53126, 53133, 53140, 53143, 53147, 53150, 53155, 53160, 53165, 53171, - 53180, 53187, 53194, 53202, 53209, 53216, 53219, 53225, 53231, 53234, - 53237, 53242, 53247, 53253, 53259, 53263, 53268, 53275, 53279, 53285, - 53289, 53293, 53301, 53313, 53322, 53326, 53328, 53337, 53346, 53352, - 53355, 53361, 53367, 53372, 53377, 53382, 53387, 53392, 53397, 53399, - 53405, 53410, 53417, 53421, 53427, 53430, 53434, 53441, 53448, 53450, - 53452, 53458, 53464, 53470, 53479, 53488, 53495, 53502, 53508, 53515, - 53520, 53525, 53530, 53536, 53542, 53547, 53554, 53558, 53562, 53575, - 53588, 53600, 53609, 53615, 53622, 53627, 53632, 53637, 53642, 53647, - 53649, 53656, 53664, 53672, 53680, 53687, 53695, 53701, 53706, 53712, - 53718, 53724, 53731, 53737, 53745, 53753, 53761, 53769, 53777, 53783, - 53789, 53798, 53802, 53811, 53820, 53829, 53837, 53841, 53847, 53854, - 53861, 53865, 53871, 53879, 53885, 53890, 53896, 53901, 53906, 53913, - 53920, 53925, 53930, 53938, 53946, 53956, 53966, 53973, 53980, 53984, - 53988, 54000, 54006, 54013, 54018, 54023, 54030, 54037, 54043, 54049, - 54059, 54067, 54076, 54083, 54091, 54098, 54104, 54111, 54117, 54125, - 54133, 54141, 54149, 54155, 54160, 54169, 54179, 54186, 54195, 54201, - 54206, 54211, 54221, 54228, 54234, 54240, 54248, 54253, 54260, 54267, - 54278, 54285, 54292, 54299, 54306, 54313, 54321, 54329, 54342, 54355, - 54367, 54379, 54393, 54407, 54413, 54419, 54428, 54437, 54444, 54451, - 54460, 54469, 54478, 54487, 54495, 54503, 54513, 54523, 54537, 54551, - 54560, 54569, 54582, 54595, 54604, 54613, 54624, 54635, 54641, 54647, - 54656, 54665, 54670, 54675, 54683, 54689, 54695, 54703, 54711, 54724, - 54737, 54741, 54745, 54753, 54761, 54768, 54776, 54784, 54793, 54802, - 54808, 54814, 54821, 54828, 54835, 54842, 54851, 54860, 54863, 54866, - 54871, 54876, 54882, 54888, 54895, 54902, 54913, 54924, 54931, 54938, - 54946, 54954, 54962, 54970, 54978, 54986, 54993, 55000, 55004, 55008, - 55016, 55024, 55029, 55034, 55039, 55044, 55050, 55064, 55071, 55078, - 55082, 55084, 55086, 55091, 55096, 55101, 55105, 55113, 55120, 55127, - 55135, 55147, 55155, 55163, 55174, 55178, 55182, 55188, 55196, 55209, - 55216, 55223, 55230, 55235, 55242, 55251, 55259, 55265, 55271, 55277, - 55287, 55297, 55305, 55314, 55319, 55322, 55327, 55332, 55337, 55342, - 55347, 55351, 55354, 55357, 55360, 55365, 55370, 55375, 55380, 55384, - 55388, 55395, 55402, 55409, 55416, 55423, 55430, 55440, 55450, 55457, - 55464, 55472, 55480, 55484, 55489, 55494, 55500, 55506, 55509, 55512, - 55515, 55518, 55522, 55527, 55532, 55537, 55542, 55547, 55551, 55555, - 55559, 55563, 55567, 55571, 55575, 55581, 55585, 55591, 55596, 55603, - 55611, 55618, 55626, 55633, 55641, 55650, 55657, 55667, 55678, 55684, - 55693, 55699, 55708, 55717, 55723, 55729, 55733, 55737, 55746, 55755, - 55762, 55769, 55778, 55787, 55793, 55799, 55805, 55810, 55814, 55818, - 55823, 55828, 55833, 55841, 55849, 55852, 55856, 55865, 55874, 55882, - 55890, 55901, 55914, 55918, 55922, 55926, 55930, 55935, 55940, 55946, - 55952, 55958, 55964, 55970, 55976, 55982, 55988, 55997, 56006, 56013, - 56020, 56027, 0, 0, 56034, 56043, 56052, 56061, 56070, 56078, 56086, - 56094, 56102, 56107, 56112, 56121, 56131, 56140, 56150, 56157, 56164, - 56171, 56178, 56183, 56188, 56193, 56198, 56206, 56215, 56223, 56232, - 56236, 56240, 56244, 56248, 56258, 0, 0, 56261, 56270, 56279, 56288, - 56297, 56303, 56309, 56315, 56321, 56331, 56341, 56351, 56361, 56371, - 56381, 56391, 56401, 56408, 56415, 56422, 56429, 56436, 56443, 56450, - 56457, 56463, 56469, 56475, 56481, 56487, 56493, 56499, 56505, 56515, 0, - 0, 0, 56525, 56532, 56535, 56539, 56543, 56548, 56552, 56556, 56559, - 56568, 56577, 56586, 0, 56595, 56601, 56607, 56615, 56625, 56632, 56641, - 56646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 60041, 60045, 60049, 60054, 60059, 60064, 60068, 60072, 60076, 60081, + 60086, 60090, 60094, 60098, 60102, 60107, 60112, 60117, 60122, 60126, + 60130, 60135, 60140, 60145, 60150, 60154, 0, 60158, 60162, 60166, 60170, + 60174, 60178, 60182, 60187, 60192, 60196, 60201, 60206, 60215, 60219, + 60223, 60227, 60234, 60238, 60243, 60248, 60252, 60256, 60262, 60267, + 60272, 60277, 60282, 60286, 60290, 60294, 60298, 60302, 60307, 60312, + 60316, 60320, 60325, 60330, 60335, 60339, 60343, 60348, 60353, 60359, + 60365, 60369, 60375, 60381, 60385, 60391, 60397, 60402, 60407, 60411, + 60417, 60421, 60425, 60431, 60437, 60442, 60447, 60451, 60455, 60463, + 60469, 60475, 60481, 60486, 60491, 60496, 60502, 60506, 60512, 60516, + 60520, 60526, 60532, 60538, 60544, 60550, 60556, 60562, 60568, 60574, + 60580, 60586, 60592, 60596, 60602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 60608, 60611, 60615, 60619, 60623, 60627, 60630, 60633, 60637, 60641, + 60645, 60649, 60652, 60657, 60661, 60665, 60669, 60674, 60678, 60682, + 60686, 60690, 60696, 60702, 60706, 60710, 60714, 60718, 60722, 60726, + 60730, 60734, 60738, 60742, 60746, 60752, 60756, 60760, 60764, 60768, + 60772, 60776, 60780, 60784, 60788, 60792, 60796, 60800, 60804, 60808, + 60812, 60816, 60822, 60828, 60833, 60838, 60842, 60846, 60850, 60854, + 60858, 60862, 60866, 60870, 60874, 60878, 60882, 60886, 60890, 60894, + 60898, 60902, 60906, 60910, 60914, 60918, 60922, 60926, 60930, 60934, + 60940, 60944, 60948, 60952, 60956, 60960, 60964, 60968, 60972, 60977, + 60984, 60988, 60992, 60996, 61000, 61004, 61008, 61012, 61016, 61020, + 61024, 61028, 61032, 61039, 61043, 61049, 61053, 61057, 61061, 61065, + 61069, 61072, 61076, 61080, 61084, 61088, 61092, 61096, 61100, 61104, + 61108, 61112, 61116, 61120, 61124, 61128, 61132, 61136, 61140, 61144, + 61148, 61152, 61156, 61160, 61164, 61168, 61172, 61176, 61180, 61184, + 61188, 61192, 61196, 61200, 61206, 61210, 61214, 61218, 61222, 61226, + 61230, 61234, 61238, 61242, 61246, 61250, 61254, 61258, 61262, 61266, + 61270, 61274, 61278, 61282, 61286, 61290, 61294, 61298, 61302, 61306, + 61310, 61314, 61322, 61326, 61330, 61334, 61338, 61342, 61348, 61352, + 61356, 61360, 61364, 61368, 61372, 61376, 61380, 61384, 61388, 61392, + 61396, 61400, 61406, 61410, 61414, 61418, 61422, 61426, 61430, 61434, + 61438, 61442, 61446, 61450, 61454, 61458, 61462, 61466, 61470, 61474, + 61478, 61482, 61486, 61490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61494, 61503, 61511, 61522, 61532, + 61540, 61549, 61558, 61568, 61580, 61592, 61604, 0, 0, 0, 0, 61610, + 61613, 61616, 61621, 61624, 61631, 61635, 61639, 61643, 61647, 61651, + 61656, 61661, 61665, 61669, 61674, 61679, 61684, 61689, 61692, 61695, + 61701, 61707, 61712, 61717, 61724, 61731, 61735, 61739, 61743, 61751, + 61757, 61764, 61769, 61774, 61779, 61784, 61789, 61794, 61799, 61805, + 61810, 61816, 61821, 61826, 61831, 61836, 61842, 61847, 61851, 61857, + 61868, 61878, 61893, 61903, 61907, 61917, 61923, 61929, 61935, 61940, + 61943, 61948, 61952, 0, 61958, 61962, 61965, 61969, 61972, 61976, 61979, + 61983, 61986, 61990, 61993, 61996, 62000, 62004, 62008, 62012, 62016, + 62020, 62024, 62028, 62032, 62036, 62040, 62044, 62048, 62052, 62056, + 62060, 62064, 62068, 62072, 62076, 62080, 62084, 62088, 62093, 62097, + 62101, 62105, 62109, 62112, 62116, 62120, 62124, 62128, 62132, 62136, + 62139, 62143, 62146, 62150, 62154, 62158, 62162, 62166, 62170, 62174, + 62178, 62182, 62186, 62190, 62194, 62197, 62201, 62205, 62209, 62213, + 62217, 62220, 62225, 62229, 62234, 62238, 62242, 62246, 62250, 62254, + 62258, 62263, 62267, 62271, 62275, 62279, 62283, 62287, 62291, 0, 0, + 62296, 62304, 62312, 62319, 62326, 62330, 62336, 62341, 62346, 62350, + 62353, 62357, 62360, 62364, 62367, 62371, 62374, 62378, 62381, 62384, + 62388, 62392, 62396, 62400, 62404, 62408, 62412, 62416, 62420, 62424, + 62428, 62432, 62436, 62440, 62444, 62448, 62452, 62456, 62460, 62464, + 62468, 62472, 62476, 62481, 62485, 62489, 62493, 62497, 62500, 62504, + 62508, 62512, 62516, 62520, 62524, 62527, 62531, 62534, 62538, 62542, + 62546, 62550, 62554, 62558, 62562, 62566, 62570, 62574, 62578, 62582, + 62585, 62589, 62593, 62597, 62601, 62605, 62608, 62613, 62617, 62622, + 62626, 62630, 62634, 62638, 62642, 62646, 62651, 62655, 62659, 62663, + 62667, 62671, 62675, 62679, 62684, 62688, 62692, 62696, 62700, 62704, + 62711, 62715, 62721, 0, 0, 0, 0, 0, 62726, 62731, 62736, 62741, 62746, + 62751, 62756, 62761, 62765, 62770, 62775, 62780, 62785, 62790, 62795, + 62800, 62805, 62810, 62814, 62819, 62824, 62828, 62832, 62836, 62840, + 62845, 62850, 62855, 62860, 62865, 62870, 62875, 62880, 62885, 62890, + 62894, 62898, 62903, 62908, 62913, 62918, 0, 0, 0, 62923, 62927, 62931, + 62935, 62939, 62943, 62947, 62951, 62955, 62959, 62963, 62967, 62971, + 62975, 62979, 62983, 62987, 62991, 62995, 62999, 63003, 63007, 63011, + 63015, 63019, 63023, 63027, 63031, 63035, 63039, 63043, 63046, 63050, + 63053, 63057, 63061, 63064, 63068, 63072, 63075, 63079, 63083, 63087, + 63091, 63094, 63098, 63102, 63106, 63110, 63114, 63118, 63121, 63124, + 63128, 63132, 63136, 63140, 63144, 63148, 63152, 63156, 63160, 63164, + 63168, 63172, 63176, 63180, 63184, 63188, 63192, 63196, 63200, 63204, + 63208, 63212, 63216, 63220, 63224, 63228, 63232, 63236, 63240, 63244, + 63248, 63252, 63256, 63260, 63264, 63268, 63272, 63276, 63280, 63284, + 63288, 0, 63292, 63298, 63304, 63309, 63314, 63319, 63325, 63331, 63336, + 63342, 63348, 63354, 63360, 63366, 63372, 63378, 63384, 63389, 63394, + 63399, 63404, 63409, 63414, 63419, 63424, 63429, 63434, 63439, 63444, + 63449, 63454, 63459, 63464, 63469, 63474, 63479, 63484, 63490, 63496, + 63502, 63508, 63513, 63518, 0, 0, 0, 0, 0, 63523, 63528, 63533, 63538, + 63543, 63548, 63553, 63558, 63563, 63568, 63573, 63578, 63583, 63588, + 63593, 63598, 63603, 63608, 63612, 63617, 63622, 63627, 63632, 63637, + 63642, 63647, 63652, 63657, 63662, 63667, 63672, 63677, 63682, 63687, + 63692, 63697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63702, 63707, 63712, + 63717, 63721, 63726, 63730, 63735, 63740, 63745, 63750, 63755, 63760, + 63765, 63770, 63775, 63780, 63784, 63788, 63792, 63796, 63800, 63804, + 63808, 63812, 63816, 63820, 63824, 63828, 63832, 63836, 63841, 63846, + 63851, 63856, 63861, 63866, 63871, 63876, 63881, 63886, 63891, 63896, + 63901, 63906, 63911, 63917, 0, 63924, 63927, 63930, 63933, 63936, 63939, + 63942, 63946, 63949, 63953, 63957, 63961, 63965, 63969, 63973, 63977, + 63981, 63985, 63989, 63993, 63997, 64001, 64005, 64009, 64013, 64017, + 64021, 64025, 64029, 64033, 64037, 64041, 64045, 64049, 64053, 64057, + 64061, 64065, 64069, 64073, 64077, 64086, 64095, 64104, 64113, 64122, + 64131, 64140, 64149, 64152, 64157, 64162, 64167, 64172, 64177, 64182, + 64188, 64193, 64199, 64203, 64208, 64213, 64218, 64223, 64228, 64232, + 64236, 64240, 64244, 64248, 64252, 64256, 64260, 64264, 64268, 64272, + 64276, 64280, 64284, 64289, 64294, 64299, 64304, 64309, 64314, 64319, + 64324, 64329, 64334, 64339, 64344, 64349, 64354, 64360, 64366, 64371, + 64376, 64379, 64382, 64385, 64388, 64391, 64394, 64398, 64401, 64405, + 64409, 64413, 64417, 64421, 64425, 64429, 64433, 64437, 64441, 64445, + 64449, 64453, 64457, 64461, 64465, 64469, 64473, 64477, 64481, 64485, + 64489, 64493, 64497, 64501, 64505, 64509, 64513, 64517, 64521, 64525, + 64529, 64533, 64537, 64541, 64545, 64549, 64553, 64557, 64561, 64565, + 64570, 64576, 64581, 64587, 64591, 64596, 64601, 64606, 64611, 64616, + 64621, 64627, 64632, 64638, 64642, 64649, 64656, 64663, 64670, 64677, + 64684, 64691, 64698, 64705, 64712, 64719, 64726, 64729, 64732, 64735, + 64740, 64743, 64746, 64749, 64752, 64755, 64758, 64762, 64766, 64770, + 64774, 64778, 64782, 64786, 64790, 64794, 64798, 64802, 64806, 64810, + 64813, 64817, 64821, 64825, 64829, 64833, 64836, 64840, 64844, 64848, + 64852, 64855, 64859, 64863, 64867, 64871, 64874, 64878, 64882, 64886, + 64890, 64894, 64898, 64902, 64906, 64910, 64914, 0, 64918, 64921, 64924, + 64927, 64930, 64933, 64936, 64939, 64942, 64945, 64948, 64951, 64954, + 64957, 64960, 64963, 64966, 64969, 64972, 64975, 64978, 64981, 64984, + 64987, 64990, 64993, 64996, 64999, 65002, 65005, 65008, 65011, 65014, + 65017, 65020, 65023, 65026, 65029, 65032, 65035, 65038, 65041, 65044, + 65047, 65050, 65053, 65056, 65059, 65062, 65065, 65068, 65071, 65074, + 65077, 65080, 65083, 65086, 65089, 65092, 65095, 65098, 65101, 65104, + 65107, 65110, 65113, 65116, 65119, 65122, 65125, 65128, 65131, 65134, + 65137, 65140, 65143, 65146, 65149, 65152, 65155, 65158, 65161, 65164, + 65167, 65170, 65173, 65176, 65179, 65182, 65191, 65199, 65207, 65215, + 65223, 65231, 65239, 65248, 65256, 65265, 65274, 65283, 65292, 65301, + 65310, 65319, 65328, 65337, 65346, 65355, 65364, 65373, 65382, 65391, + 65400, 65403, 65406, 65409, 65411, 65414, 65417, 65420, 65425, 65430, + 65433, 65440, 65447, 65454, 65461, 65464, 65469, 65472, 65476, 65478, + 65480, 65483, 65486, 65489, 65492, 65495, 65498, 65501, 65506, 65511, + 65514, 65517, 65520, 65523, 65526, 65529, 65532, 65536, 65539, 65542, + 65545, 65548, 65551, 65556, 65559, 65562, 65565, 65570, 65575, 65580, + 65585, 65590, 65595, 65600, 65605, 65610, 65618, 65620, 65623, 65626, + 65629, 65632, 65637, 65645, 65648, 65651, 65655, 65658, 65661, 65664, + 65669, 65672, 65675, 65680, 65683, 65686, 65691, 65694, 65697, 65702, + 65707, 65712, 65715, 65718, 65721, 65724, 65730, 65733, 65736, 65739, + 65741, 65744, 65747, 65750, 65755, 65758, 65761, 65764, 65767, 65770, + 65775, 65778, 65781, 65784, 65787, 65790, 65793, 65796, 65799, 65802, + 65808, 65813, 65821, 65829, 65837, 65845, 65853, 65861, 65870, 65878, + 65887, 65896, 65905, 65914, 65923, 65932, 65941, 65950, 65959, 65968, + 65977, 65986, 65995, 66004, 66013, 66022, 66031, 66040, 66049, 66058, + 66067, 66076, 66085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 56649, 56654, 56659, 56664, 56669, 56674, 56679, 56684, 56689, 56694, - 56699, 56705, 56709, 56714, 56719, 56724, 56729, 56734, 56739, 56744, - 56749, 56754, 56759, 56764, 56769, 56774, 56779, 56784, 56789, 56794, - 56799, 56804, 56809, 56814, 56819, 56825, 56830, 56836, 56845, 56850, - 56858, 56865, 56874, 56879, 56884, 56889, 56895, 0, 56902, 56907, 56912, - 56917, 56922, 56927, 56932, 56937, 56942, 56947, 56952, 56958, 56962, - 56967, 56972, 56977, 56982, 56987, 56992, 56997, 57002, 57007, 57012, - 57017, 57022, 57027, 57032, 57037, 57042, 57047, 57052, 57057, 57062, - 57067, 57072, 57078, 57083, 57089, 57098, 57103, 57111, 57118, 57127, - 57132, 57137, 57142, 57148, 0, 57155, 57163, 57171, 57181, 57188, 57196, - 57202, 57211, 57219, 57227, 57235, 57243, 57251, 57259, 57264, 57271, - 57276, 57282, 57290, 57297, 57304, 57312, 57318, 57324, 57331, 57338, - 57347, 57357, 57363, 57370, 57375, 57385, 57395, 57400, 57405, 57410, - 57415, 57420, 57425, 57430, 57435, 57440, 57445, 57450, 57455, 57460, - 57465, 57470, 57475, 57480, 57485, 57490, 57495, 57500, 57505, 57510, - 57515, 57520, 57525, 57530, 57535, 57540, 57545, 57549, 57553, 57558, - 57563, 57568, 57573, 57578, 57583, 57588, 57593, 57598, 57603, 57608, - 57613, 57618, 57623, 57628, 57633, 57638, 57643, 57650, 57657, 57664, - 57671, 57678, 57685, 57692, 57699, 57706, 57713, 57720, 57727, 57734, - 57741, 57746, 57751, 57758, 57765, 57772, 57779, 57786, 57793, 57800, - 57807, 57814, 57821, 57828, 57835, 57841, 57847, 57853, 57859, 57866, - 57873, 57880, 57887, 57894, 57901, 57908, 57915, 57922, 57929, 57937, - 57945, 57953, 57961, 57969, 57977, 57985, 57993, 57997, 58003, 58009, - 58013, 58019, 58025, 58031, 58038, 58045, 58052, 58059, 58064, 58070, - 58076, 58083, 0, 0, 0, 0, 0, 58090, 58098, 58107, 58116, 58124, 58130, - 58135, 58140, 58145, 58150, 58155, 58160, 58165, 58170, 58175, 58180, - 58185, 58190, 58195, 58200, 58205, 58210, 58215, 58220, 58225, 58230, - 58235, 58240, 58245, 58250, 58255, 58260, 58265, 58270, 58275, 58280, - 58285, 58290, 58295, 58300, 58305, 58310, 58315, 58320, 58325, 0, 58330, - 0, 0, 0, 0, 0, 58335, 0, 0, 58340, 58344, 58349, 58354, 58359, 58364, - 58373, 58378, 58383, 58388, 58393, 58398, 58403, 58408, 58413, 58420, - 58425, 58430, 58439, 58446, 58451, 58456, 58461, 58468, 58473, 58480, - 58485, 58490, 58497, 58504, 58509, 58514, 58519, 58526, 58533, 58538, - 58543, 58548, 58553, 58558, 58565, 58572, 58577, 58582, 58587, 58592, - 58597, 58602, 58607, 58612, 58617, 58622, 58627, 58634, 58639, 58644, 0, - 0, 0, 0, 0, 0, 0, 58649, 58656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58661, 58666, 58670, 58674, 58678, 58682, 58686, 58690, 58694, 58698, - 58702, 58706, 58712, 58716, 58720, 58724, 58728, 58732, 58736, 58740, - 58744, 58748, 58752, 58756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58760, 58764, - 58768, 58772, 58776, 58780, 58784, 0, 58788, 58792, 58796, 58800, 58804, - 58808, 58812, 0, 58816, 58820, 58824, 58828, 58832, 58836, 58840, 0, - 58844, 58848, 58852, 58856, 58860, 58864, 58868, 0, 58872, 58876, 58880, - 58884, 58888, 58892, 58896, 0, 58900, 58904, 58908, 58912, 58916, 58920, - 58924, 0, 58928, 58932, 58936, 58940, 58944, 58948, 58952, 0, 58956, - 58960, 58964, 58968, 58972, 58976, 58980, 0, 58984, 58989, 58994, 58999, - 59004, 59009, 59014, 59018, 59023, 59028, 59033, 59037, 59042, 59047, - 59052, 59057, 59061, 59066, 59071, 59076, 59081, 59086, 59091, 59095, - 59100, 59105, 59112, 59117, 59122, 59128, 59135, 59142, 59151, 59158, - 59167, 59171, 59175, 59181, 59187, 59193, 59201, 59207, 59211, 59215, - 59219, 59225, 59231, 59235, 59237, 59241, 59247, 59249, 59253, 59256, - 59259, 59265, 59270, 59274, 59278, 59283, 59289, 59294, 59299, 59304, - 59309, 59316, 59323, 59328, 59333, 59338, 59343, 59348, 59353, 59357, - 59361, 59368, 59375, 59381, 59385, 59390, 59393, 59397, 59405, 59408, - 59412, 59416, 59419, 59425, 59431, 59434, 59440, 59444, 59448, 59454, - 59459, 59464, 59466, 59469, 59473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 59479, 59483, 59487, 59492, 59497, 59502, 59506, 59510, 59514, 59519, - 59524, 59528, 59532, 59536, 59540, 59545, 59550, 59555, 59560, 59564, - 59568, 59573, 59578, 59583, 59588, 59592, 0, 59596, 59600, 59604, 59608, - 59612, 59616, 59620, 59625, 59630, 59634, 59639, 59644, 59653, 59657, - 59661, 59665, 59672, 59676, 59681, 59686, 59690, 59694, 59700, 59705, - 59710, 59715, 59720, 59724, 59728, 59732, 59736, 59740, 59745, 59750, - 59754, 59758, 59763, 59768, 59773, 59777, 59781, 59786, 59791, 59797, - 59803, 59807, 59813, 59819, 59823, 59829, 59835, 59840, 59845, 59849, - 59855, 59859, 59863, 59869, 59875, 59880, 59885, 59889, 59893, 59901, - 59907, 59913, 59919, 59924, 59929, 59934, 59940, 59944, 59950, 59954, - 59958, 59964, 59970, 59976, 59982, 59988, 59994, 60000, 60006, 60012, - 60018, 60024, 60030, 60034, 60040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 60046, 60049, 60053, 60057, 60061, 60065, 60068, 60071, 60075, 60079, - 60083, 60087, 60090, 60095, 60099, 60103, 60107, 60113, 60117, 60121, - 60125, 60129, 60136, 60142, 60146, 60150, 60154, 60158, 60162, 60166, - 60170, 60174, 60178, 60182, 60186, 60192, 60196, 60200, 60204, 60208, - 60212, 60216, 60220, 60224, 60228, 60232, 60236, 60240, 60244, 60248, - 60252, 60256, 60262, 60268, 60273, 60278, 60282, 60286, 60290, 60294, - 60298, 60302, 60306, 60310, 60314, 60318, 60322, 60326, 60330, 60334, - 60338, 60342, 60346, 60350, 60354, 60358, 60362, 60366, 60370, 60374, - 60380, 60384, 60388, 60392, 60396, 60400, 60404, 60408, 60412, 60417, - 60424, 60428, 60432, 60436, 60440, 60444, 60448, 60452, 60456, 60460, - 60464, 60468, 60472, 60479, 60483, 60489, 60493, 60497, 60501, 60505, - 60509, 60512, 60516, 60520, 60524, 60528, 60532, 60536, 60540, 60544, - 60548, 60552, 60556, 60560, 60564, 60568, 60572, 60576, 60580, 60584, - 60588, 60592, 60596, 60600, 60604, 60608, 60612, 60616, 60620, 60624, - 60628, 60632, 60636, 60640, 60646, 60650, 60654, 60658, 60662, 60666, - 60670, 60674, 60678, 60682, 60686, 60690, 60694, 60698, 60702, 60706, - 60710, 60714, 60718, 60722, 60726, 60730, 60734, 60738, 60742, 60746, - 60750, 60754, 60762, 60766, 60770, 60774, 60778, 60782, 60788, 60792, - 60796, 60800, 60804, 60808, 60812, 60816, 60820, 60824, 60828, 60832, - 60836, 60840, 60846, 60850, 60854, 60858, 60862, 60866, 60870, 60874, - 60878, 60882, 60886, 60890, 60894, 60898, 60902, 60906, 60910, 60914, - 60918, 60922, 60926, 60930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60934, 60943, 60951, 60963, 60974, - 60982, 60991, 61000, 61010, 61022, 61034, 61046, 0, 0, 0, 0, 61052, - 61055, 61058, 61063, 61066, 61073, 61077, 61081, 61085, 61089, 61093, - 61098, 61103, 61107, 61111, 61116, 61121, 61126, 61131, 61134, 61137, - 61143, 61149, 61154, 61159, 61166, 61173, 61177, 61181, 61185, 61193, - 61199, 61206, 61211, 61216, 61221, 61226, 61231, 61236, 61241, 61246, - 61251, 61256, 61261, 61266, 61271, 61276, 61282, 61287, 61291, 61297, - 61308, 61318, 61333, 61343, 61347, 61357, 61363, 61369, 61375, 61380, - 61383, 61388, 61392, 0, 61398, 61402, 61405, 61409, 61412, 61416, 61419, - 61423, 61426, 61430, 61433, 61436, 61440, 61444, 61448, 61452, 61456, - 61460, 61464, 61468, 61472, 61476, 61480, 61484, 61488, 61492, 61496, - 61500, 61504, 61508, 61512, 61516, 61520, 61524, 61528, 61533, 61537, - 61541, 61545, 61549, 61552, 61556, 61559, 61563, 61567, 61571, 61575, - 61578, 61582, 61585, 61589, 61593, 61597, 61601, 61605, 61609, 61613, - 61617, 61621, 61625, 61629, 61633, 61636, 61640, 61644, 61648, 61652, - 61656, 61659, 61664, 61668, 61673, 61677, 61681, 61685, 61689, 61693, - 61697, 61702, 61706, 61710, 61714, 61718, 61722, 61726, 61730, 0, 0, - 61735, 61743, 61751, 61758, 61765, 61769, 61775, 61780, 61785, 61789, - 61792, 61796, 61799, 61803, 61806, 61810, 61813, 61817, 61820, 61823, - 61827, 61831, 61835, 61839, 61843, 61847, 61851, 61855, 61859, 61863, - 61867, 61871, 61875, 61879, 61883, 61887, 61891, 61895, 61899, 61903, - 61907, 61911, 61915, 61920, 61924, 61928, 61932, 61936, 61939, 61943, - 61946, 61950, 61954, 61958, 61962, 61965, 61969, 61972, 61976, 61980, - 61984, 61988, 61992, 61996, 62000, 62004, 62008, 62012, 62016, 62020, - 62023, 62027, 62031, 62035, 62039, 62043, 62046, 62051, 62055, 62060, - 62064, 62068, 62072, 62076, 62080, 62084, 62089, 62093, 62097, 62101, - 62105, 62109, 62113, 62117, 62122, 62126, 62130, 62134, 62138, 62143, - 62150, 62154, 62160, 0, 0, 0, 0, 0, 62165, 62170, 62175, 62180, 62185, - 62190, 62195, 62200, 62204, 62209, 62214, 62219, 62224, 62229, 62234, - 62239, 62244, 62249, 62253, 62258, 62263, 62267, 62271, 62275, 62279, - 62284, 62289, 62294, 62299, 62304, 62309, 62314, 62319, 62324, 62329, - 62333, 62337, 62342, 62347, 62352, 62357, 0, 0, 0, 62362, 62366, 62370, - 62374, 62378, 62382, 62386, 62390, 62394, 62398, 62402, 62406, 62410, - 62414, 62418, 62422, 62426, 62430, 62434, 62438, 62442, 62446, 62450, - 62454, 62458, 62462, 62466, 62470, 62474, 62478, 62482, 62485, 62489, - 62492, 62496, 62500, 62503, 62507, 62511, 62514, 62518, 62522, 62526, - 62530, 62533, 62537, 62541, 62545, 62549, 62553, 62557, 62560, 62563, - 62567, 62571, 62575, 62579, 62583, 62587, 62591, 62595, 62599, 62603, - 62607, 62611, 62615, 62619, 62623, 62627, 62631, 62635, 62639, 62643, - 62647, 62651, 62655, 62659, 62663, 62667, 62671, 62675, 62679, 62683, - 62687, 62691, 62695, 62699, 62703, 62707, 62711, 62715, 62719, 62723, - 62727, 0, 62731, 62737, 62743, 62748, 62753, 62758, 62764, 62770, 62776, - 62782, 62788, 62794, 62800, 62806, 62812, 62818, 62824, 62829, 62834, - 62839, 62844, 62849, 62854, 62859, 62864, 62869, 62874, 62879, 62884, - 62889, 62894, 62899, 62904, 62909, 62914, 62919, 62924, 62930, 62936, - 62942, 62948, 62953, 62958, 0, 0, 0, 0, 0, 62963, 62968, 62973, 62978, - 62983, 62988, 62993, 62998, 63003, 63008, 63013, 63018, 63023, 63028, - 63033, 63038, 63043, 63048, 63052, 63057, 63062, 63067, 63072, 63077, - 63082, 63087, 63092, 63097, 63102, 63107, 63112, 63117, 63122, 63127, - 63132, 63137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63142, 63147, 63152, - 63157, 63161, 63166, 63170, 63175, 63180, 63185, 63190, 63195, 63200, - 63205, 63210, 63215, 63220, 63224, 63228, 63232, 63236, 63240, 63244, - 63248, 63252, 63256, 63260, 63264, 63268, 63272, 63276, 63281, 63286, - 63291, 63296, 63301, 63306, 63311, 63316, 63321, 63326, 63331, 63336, - 63341, 63346, 63351, 63357, 0, 63364, 63367, 63370, 63373, 63376, 63379, - 63382, 63385, 63388, 63391, 63395, 63399, 63403, 63407, 63411, 63415, - 63419, 63423, 63427, 63431, 63435, 63439, 63443, 63447, 63451, 63455, - 63459, 63463, 63467, 63471, 63475, 63479, 63483, 63487, 63491, 63495, - 63499, 63503, 63507, 63511, 63515, 63524, 63533, 63542, 63551, 63560, - 63569, 63578, 63587, 63590, 63595, 63600, 63605, 63610, 63615, 63620, - 63625, 63630, 63635, 63639, 63644, 63649, 63654, 63659, 63664, 63668, - 63672, 63676, 63680, 63684, 63688, 63692, 63696, 63700, 63704, 63708, - 63712, 63716, 63720, 63725, 63730, 63735, 63740, 63745, 63750, 63755, - 63760, 63765, 63770, 63775, 63780, 63785, 63790, 63796, 63802, 63807, - 63812, 63815, 63818, 63821, 63824, 63827, 63830, 63833, 63836, 63839, - 63843, 63847, 63851, 63855, 63859, 63863, 63867, 63871, 63875, 63879, - 63883, 63887, 63891, 63895, 63899, 63903, 63907, 63911, 63915, 63919, - 63923, 63927, 63931, 63935, 63939, 63943, 63947, 63951, 63955, 63959, - 63963, 63967, 63971, 63975, 63979, 63983, 63987, 63991, 63995, 63999, - 64004, 64009, 64014, 64019, 64023, 64028, 64033, 64038, 64043, 64048, - 64053, 64058, 64063, 64068, 64072, 64079, 64086, 64093, 64100, 64107, - 64114, 64121, 64128, 64135, 64142, 64149, 64156, 64159, 64162, 64165, - 64170, 64173, 64176, 64179, 64182, 64185, 64188, 64192, 64196, 64200, - 64204, 64208, 64212, 64216, 64220, 64224, 64228, 64232, 64236, 64240, - 64243, 64246, 64250, 64254, 64258, 64262, 64265, 64269, 64273, 64277, - 64281, 64284, 64288, 64292, 64296, 64300, 64303, 64307, 64311, 64315, - 64319, 64323, 64327, 64331, 64335, 64339, 64343, 0, 64347, 64350, 64353, - 64356, 64359, 64362, 64365, 64368, 64371, 64374, 64377, 64380, 64383, - 64386, 64389, 64392, 64395, 64398, 64401, 64404, 64407, 64410, 64413, - 64416, 64419, 64422, 64425, 64428, 64431, 64434, 64437, 64440, 64443, - 64446, 64449, 64452, 64455, 64458, 64461, 64464, 64467, 64470, 64473, - 64476, 64479, 64482, 64485, 64488, 64491, 64494, 64497, 64500, 64503, - 64506, 64509, 64512, 64515, 64518, 64521, 64524, 64527, 64530, 64533, - 64536, 64539, 64542, 64545, 64548, 64551, 64554, 64557, 64560, 64563, - 64566, 64569, 64572, 64575, 64578, 64581, 64584, 64587, 64590, 64593, - 64596, 64599, 64602, 64605, 64608, 64611, 64620, 64628, 64636, 64644, - 64652, 64660, 64668, 64676, 64684, 64692, 64701, 64710, 64719, 64728, - 64737, 64746, 64755, 64764, 64773, 64782, 64791, 64800, 64809, 64818, - 64827, 64830, 64833, 64836, 64838, 64841, 64844, 64847, 64852, 64857, - 64860, 64867, 64874, 64881, 64888, 64891, 64896, 64898, 64902, 64904, - 64906, 64909, 64912, 64915, 64918, 64921, 64924, 64927, 64932, 64937, - 64940, 64943, 64946, 64949, 64952, 64955, 64958, 64962, 64965, 64968, - 64971, 64974, 64977, 64982, 64985, 64988, 64991, 64996, 65001, 65006, - 65011, 65016, 65021, 65026, 65031, 65036, 65044, 65046, 65049, 65052, - 65055, 65058, 65063, 65071, 65074, 65077, 65081, 65084, 65087, 65090, - 65095, 65098, 65101, 65106, 65109, 65112, 65117, 65120, 65123, 65128, - 65133, 65138, 65141, 65144, 65147, 65150, 65156, 65159, 65162, 65165, - 65167, 65170, 65173, 65176, 65181, 65184, 65187, 65190, 65193, 65196, - 65201, 65204, 65207, 65210, 65213, 65216, 65219, 65222, 65225, 65228, - 65234, 65239, 65247, 65255, 65263, 65271, 65279, 65287, 65295, 65303, - 65311, 65320, 65329, 65338, 65347, 65356, 65365, 65374, 65383, 65392, - 65401, 65410, 65419, 65428, 65437, 65446, 65455, 65464, 65473, 65482, - 65491, 65500, 65509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16863,836 +17993,931 @@ static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66088, 66097, 66106, 66117, 66124, 66129, 66134, 66141, 66148, 66154, + 66159, 66164, 66169, 66174, 66181, 66186, 66191, 66196, 66207, 66212, + 66217, 66224, 66229, 66236, 66241, 66246, 66253, 66260, 66267, 66276, + 66285, 66290, 66295, 66300, 66307, 66312, 66322, 66329, 66334, 66339, + 66344, 66349, 66354, 66359, 66368, 66375, 66382, 66387, 66394, 66399, + 66406, 66415, 66426, 66431, 66440, 66445, 66452, 66461, 66470, 66475, + 66480, 66487, 66493, 66500, 66507, 66511, 66515, 66518, 66522, 66526, + 66530, 66534, 66538, 66542, 66546, 66549, 66553, 66557, 66561, 66565, + 66569, 66573, 66576, 66580, 66584, 66587, 66591, 66595, 66599, 66603, + 66607, 66611, 66615, 66619, 66623, 66627, 66631, 66635, 66639, 66643, + 66647, 66651, 66655, 66659, 66663, 66667, 66671, 66675, 66679, 66683, + 66687, 66691, 66695, 66699, 66703, 66707, 66711, 66715, 66719, 66723, + 66727, 66731, 66735, 66739, 66743, 66747, 66751, 66755, 66759, 66763, + 66766, 66770, 66774, 66778, 66782, 66786, 66790, 66794, 66798, 66802, + 66806, 66810, 66814, 66818, 66822, 66826, 66830, 66834, 66838, 66842, + 66846, 66850, 66854, 66858, 66862, 66866, 66870, 66874, 66878, 66882, + 66886, 66890, 66894, 66898, 66902, 66906, 66910, 66914, 66918, 66922, + 66926, 66930, 66934, 66938, 66942, 66946, 66950, 66954, 66958, 66962, + 66966, 66970, 66974, 66978, 66982, 66986, 66990, 66994, 66998, 67002, + 67006, 67010, 67014, 67018, 67022, 67026, 67030, 67034, 67038, 67042, + 67046, 67050, 67054, 67058, 67062, 67066, 67070, 67074, 67078, 67082, + 67086, 67090, 67094, 67098, 67102, 67106, 67110, 67114, 67118, 67122, + 67126, 67130, 67134, 67138, 67142, 67146, 67150, 67154, 67158, 67162, + 67166, 67170, 67174, 67178, 67182, 67186, 67190, 67194, 67198, 67202, + 67206, 67210, 67214, 67218, 67222, 67226, 67230, 67234, 67237, 67241, + 67245, 67249, 67253, 67257, 67261, 67265, 67269, 67273, 67277, 67281, + 67285, 67289, 67293, 67297, 67301, 67305, 67309, 67313, 67317, 67321, + 67325, 67329, 67333, 67337, 67341, 67345, 67349, 67353, 67357, 67361, + 67365, 67369, 67373, 67377, 67381, 67385, 67389, 67393, 67397, 67401, + 67405, 67409, 67413, 67417, 67421, 67425, 67429, 67433, 67437, 67441, + 67445, 67449, 67453, 67457, 67461, 67465, 67469, 67473, 67477, 67481, + 67485, 67489, 67493, 67497, 67501, 67505, 67509, 67513, 67517, 67521, + 67525, 67529, 67533, 67537, 67541, 67545, 67549, 67553, 67557, 67561, + 67565, 67569, 67573, 67577, 67581, 67585, 67589, 67593, 67597, 67601, + 67605, 67609, 67613, 67617, 67621, 67625, 67629, 67633, 67637, 67641, + 67645, 67649, 67653, 67657, 67661, 67665, 67669, 67673, 67677, 67681, + 67685, 67689, 67693, 67697, 67700, 67704, 67708, 67712, 67716, 67720, + 67724, 67728, 67732, 67736, 67740, 67744, 67748, 67752, 67756, 67760, + 67764, 67768, 67772, 67776, 67780, 67784, 67788, 67792, 67796, 67800, + 67804, 67808, 67812, 67816, 67820, 67824, 67828, 67832, 67836, 67840, + 67844, 67848, 67852, 67856, 67860, 67864, 67868, 67872, 67876, 67880, + 67884, 67888, 67892, 67896, 67900, 67904, 67908, 67912, 67916, 67920, + 67924, 67928, 67932, 67936, 67940, 67944, 67948, 67952, 67956, 67960, + 67964, 67968, 67972, 67976, 67980, 67984, 67988, 67992, 67996, 68000, + 68004, 68008, 68012, 68016, 68020, 68024, 68028, 68032, 68036, 68040, + 68044, 68048, 68052, 68056, 68060, 68064, 68068, 68072, 68076, 68080, + 68084, 68088, 68092, 68096, 68100, 68104, 68108, 68112, 68116, 68120, + 68124, 68128, 68132, 68136, 68140, 68144, 68148, 68152, 68156, 68160, + 68164, 68168, 68172, 68176, 68180, 68184, 68188, 68192, 68196, 68200, + 68204, 68208, 68212, 68216, 68220, 68224, 68228, 68232, 68236, 68240, + 68244, 68248, 68252, 68256, 68260, 68264, 68268, 68272, 68276, 68280, + 68284, 68288, 68292, 68296, 68300, 68304, 68308, 68312, 68316, 68320, + 68324, 68328, 68332, 68336, 68340, 68344, 68348, 68352, 68356, 68360, + 68364, 68368, 68372, 68376, 68380, 68384, 68388, 68392, 68396, 68400, + 68404, 68408, 68412, 68416, 68420, 68424, 68428, 68432, 68436, 68440, + 68444, 68448, 68452, 68456, 68460, 68464, 68468, 68472, 68476, 68480, + 68484, 68488, 68492, 68496, 68500, 68504, 68508, 68512, 68516, 68520, + 68524, 68528, 68532, 68536, 68540, 68544, 68548, 68552, 68555, 68559, + 68563, 68567, 68571, 68575, 68579, 68583, 68587, 68591, 68595, 68599, + 68603, 68607, 68611, 68615, 68619, 68623, 68627, 68631, 68635, 68639, + 68643, 68647, 68651, 68655, 68659, 68663, 68667, 68671, 68675, 68679, + 68683, 68687, 68691, 68695, 68699, 68703, 68707, 68711, 68715, 68719, + 68723, 68727, 68731, 68735, 68739, 68743, 68747, 68751, 68755, 68759, + 68763, 68767, 68771, 68775, 68779, 68783, 68787, 68791, 68795, 68799, + 68803, 68807, 68811, 68815, 68819, 68823, 68827, 68831, 68835, 68839, + 68843, 68847, 68851, 68855, 68859, 68863, 68867, 68871, 68875, 68879, + 68883, 68887, 68891, 68895, 68899, 68903, 68907, 68911, 68915, 68919, + 68923, 68927, 68931, 68935, 68939, 68943, 68947, 68951, 68955, 68959, + 68963, 68967, 68971, 68975, 68979, 68983, 68987, 68991, 68995, 68999, + 69003, 69007, 69010, 69014, 69018, 69022, 69026, 69030, 69034, 69038, + 69042, 69046, 69050, 69054, 69058, 69062, 69066, 69070, 69074, 69078, + 69082, 69086, 69090, 69094, 69098, 69102, 69106, 69110, 69114, 69118, + 69122, 69126, 69130, 69134, 69138, 69142, 69146, 69150, 69154, 69158, + 69162, 69166, 69170, 69174, 69178, 69182, 69186, 69190, 69194, 69198, + 69202, 69206, 69210, 69214, 69218, 69222, 69226, 69230, 69234, 69238, + 69242, 69246, 69250, 69254, 69258, 69262, 69266, 69270, 69274, 69278, + 69282, 69286, 69290, 69294, 69298, 69302, 69306, 69310, 69314, 69318, + 69322, 69326, 69330, 69334, 69338, 69342, 69346, 69350, 69354, 69358, + 69362, 69366, 69370, 69374, 69378, 69382, 69386, 69390, 69394, 69398, + 69402, 69406, 69410, 69414, 69418, 69422, 69426, 69430, 69434, 69438, + 69442, 69446, 69450, 69454, 69458, 69462, 69466, 69470, 69474, 69478, + 69482, 69486, 69490, 69494, 69498, 69502, 69506, 69510, 69514, 69518, + 69522, 69526, 69530, 69534, 69538, 69542, 69546, 69550, 69554, 69558, + 69562, 69566, 69570, 69574, 69578, 69582, 69586, 69590, 69594, 69598, + 69602, 69606, 69610, 69613, 69617, 69621, 69625, 69629, 69633, 69637, + 69641, 69645, 69649, 69653, 69657, 69661, 69665, 69669, 69673, 69677, + 69681, 69685, 69689, 69693, 69697, 69701, 69705, 69709, 69713, 69717, + 69721, 69725, 69729, 69733, 69737, 69741, 69745, 69749, 69753, 69757, + 69761, 69765, 69769, 69773, 69777, 69781, 69785, 69789, 69793, 69797, + 69801, 69805, 69809, 69813, 69817, 69821, 69825, 69829, 69833, 69837, + 69841, 69845, 69849, 69853, 69857, 69861, 69865, 69869, 69873, 69877, + 69881, 69885, 69889, 69893, 69897, 69901, 69905, 69909, 69913, 69917, + 69921, 69925, 69929, 69933, 69937, 69941, 69945, 69949, 69953, 69957, + 69961, 69965, 69969, 69973, 69977, 69981, 69985, 69989, 69993, 69997, + 70001, 70005, 70009, 70013, 70017, 70021, 70025, 70029, 70033, 70037, + 70041, 70045, 70049, 70053, 70057, 70061, 70065, 70069, 70073, 70077, + 70081, 70085, 70089, 70093, 70097, 70101, 70105, 70109, 70113, 70117, + 70121, 70125, 70129, 70133, 70137, 70141, 70145, 70149, 70153, 70157, + 70161, 70165, 70169, 70173, 70177, 70181, 70185, 70189, 70193, 70197, + 70201, 70205, 70209, 70213, 70217, 70221, 70225, 70229, 70233, 70237, + 70241, 70245, 70249, 70253, 70257, 70261, 70265, 70269, 70273, 70277, + 70281, 70285, 70289, 70293, 70297, 70301, 70305, 70309, 70313, 70317, + 70321, 70325, 70329, 70333, 70337, 70341, 70345, 70349, 70353, 70357, + 70361, 70365, 70369, 70373, 70377, 70381, 70385, 70389, 70393, 70397, + 70401, 70405, 70409, 70413, 70417, 70421, 70425, 70429, 70433, 70437, + 70441, 70445, 70449, 70453, 70457, 70461, 70465, 70469, 70473, 70477, + 70481, 70485, 70489, 70493, 70497, 70501, 70505, 70509, 70513, 70517, + 70521, 70525, 70529, 70533, 70537, 70541, 70545, 70549, 70553, 70557, + 70561, 70565, 70569, 70573, 70577, 70581, 70585, 70589, 70593, 70597, + 70601, 70605, 70609, 70613, 70617, 70621, 70625, 70629, 70633, 70637, + 70641, 70645, 70649, 70653, 70657, 70661, 70665, 70669, 70673, 70677, + 70681, 70685, 70689, 70693, 70697, 70701, 70705, 70709, 70713, 70717, + 70721, 70725, 70729, 70733, 70737, 70741, 70745, 70749, 70753, 70757, + 70761, 70765, 70769, 70773, 70777, 70781, 70785, 70789, 70793, 70797, + 70801, 70805, 70809, 70813, 70817, 70821, 70825, 70829, 70833, 70837, + 70841, 70845, 70849, 70853, 70857, 70861, 70865, 70869, 70873, 70877, + 70881, 70885, 70889, 70893, 70897, 70901, 70905, 70909, 70913, 70917, + 70921, 70925, 70929, 70933, 70937, 70941, 70945, 70949, 70953, 70957, + 70961, 70965, 70969, 70973, 70977, 70981, 70985, 70989, 70993, 70997, + 71001, 71005, 71009, 71013, 71017, 71021, 71025, 71029, 71033, 71037, + 71041, 71045, 71049, 71053, 71057, 71061, 71065, 71069, 71073, 71077, + 71081, 71085, 71089, 71093, 71097, 71101, 71105, 71109, 71113, 71117, + 71121, 71125, 71129, 71133, 71137, 71141, 71145, 71149, 71153, 0, 0, 0, + 71157, 71161, 71165, 71169, 71173, 71177, 71181, 71185, 71189, 71193, + 71197, 71201, 71205, 71209, 71213, 71217, 71221, 71225, 71229, 71233, + 71237, 71241, 71245, 71249, 71253, 71257, 71261, 71265, 71269, 71273, + 71277, 71281, 71285, 71289, 71293, 71297, 71301, 71305, 71309, 71313, + 71317, 71321, 71325, 71329, 71333, 71337, 71341, 71345, 71349, 71353, + 71357, 71361, 71365, 71369, 71373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71377, + 71382, 71386, 71391, 71396, 71401, 71406, 71411, 71415, 71420, 71425, + 71430, 71435, 71440, 71445, 71450, 71454, 71459, 71464, 71469, 71474, + 71479, 71484, 71488, 71493, 71498, 71503, 71508, 71513, 71517, 71522, + 71526, 71531, 71535, 71540, 71544, 71548, 71552, 71557, 71562, 71567, + 71575, 71583, 71591, 71599, 71607, 71615, 71621, 71629, 71633, 71637, + 71641, 71645, 71649, 71653, 71657, 71661, 71665, 71669, 71673, 71677, + 71681, 71685, 71689, 71693, 71697, 71701, 71705, 71709, 71713, 71717, + 71721, 71725, 71729, 71733, 71737, 71741, 71745, 71749, 71753, 71757, + 71761, 71765, 71769, 71773, 71776, 71780, 71784, 71788, 71792, 71796, + 71800, 71804, 71808, 71812, 71816, 71820, 71824, 71828, 71832, 71836, + 71840, 71844, 71848, 71852, 71856, 71860, 71864, 71868, 71872, 71876, + 71880, 71884, 71888, 71892, 71896, 71900, 71904, 71908, 71912, 71916, + 71920, 71923, 71927, 71931, 71934, 71938, 71942, 71946, 71949, 71953, + 71957, 71961, 71965, 71969, 71973, 71977, 71981, 71985, 71989, 71993, + 71997, 72001, 72005, 72009, 72013, 72017, 72021, 72025, 72029, 72033, + 72037, 72041, 72045, 72048, 72051, 72055, 72059, 72063, 72066, 72070, + 72074, 72078, 72082, 72086, 72090, 72094, 72098, 72102, 72106, 72110, + 72114, 72118, 72122, 72126, 72130, 72134, 72138, 72142, 72146, 72150, + 72154, 72158, 72162, 72166, 72170, 72174, 72178, 72182, 72186, 72190, + 72194, 72198, 72202, 72206, 72210, 72214, 72218, 72221, 72225, 72229, + 72233, 72237, 72241, 72245, 72249, 72253, 72257, 72261, 72265, 72269, + 72273, 72277, 72281, 72285, 72289, 72293, 72297, 72301, 72305, 72309, + 72313, 72317, 72321, 72325, 72329, 72333, 72337, 72341, 72345, 72349, + 72353, 72357, 72361, 72365, 72368, 72372, 72376, 72380, 72384, 72388, + 72392, 72396, 72400, 72404, 72408, 72412, 72416, 72420, 72424, 72428, + 72432, 72435, 72439, 72443, 72447, 72451, 72455, 72459, 72463, 72467, + 72471, 72475, 72479, 72483, 72487, 72491, 72495, 72499, 72503, 72507, + 72511, 72515, 72519, 72522, 72526, 72530, 72534, 72538, 72542, 72546, + 72550, 72554, 72558, 72562, 72566, 72570, 72574, 72578, 72582, 72586, + 72590, 72594, 72598, 72602, 72606, 72610, 72614, 72618, 72622, 72626, + 72630, 72634, 72638, 72642, 72646, 72650, 72654, 72658, 72662, 72666, + 72670, 72674, 72678, 72682, 72686, 72690, 72694, 72697, 72702, 72706, + 72712, 72717, 72723, 72727, 72731, 72735, 72739, 72743, 72747, 72751, + 72755, 72759, 72763, 72767, 72771, 72775, 72779, 72782, 72785, 72788, + 72791, 72794, 72797, 72801, 72804, 72808, 72813, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72819, 72824, 72829, 72834, 72839, + 72846, 72853, 72858, 72863, 72868, 72873, 72880, 72887, 72894, 72901, + 72908, 72915, 72925, 72935, 72942, 72949, 72956, 72963, 72969, 72975, + 72984, 72993, 73000, 73007, 73018, 73029, 73034, 73039, 73046, 73053, + 73060, 73067, 73074, 73081, 73088, 73095, 73101, 73107, 73113, 73119, + 73126, 73133, 73138, 73142, 73149, 73156, 73163, 73167, 73174, 73178, + 73183, 73187, 73193, 73198, 73204, 73209, 73213, 73217, 73220, 73223, + 73228, 73233, 73238, 73243, 73248, 73253, 73258, 73263, 73268, 73273, + 73281, 73289, 73294, 73299, 73304, 73309, 73314, 73319, 73324, 73329, + 73334, 73339, 73344, 73349, 73354, 73359, 73365, 73371, 73377, 73383, + 73388, 73394, 73397, 73400, 73403, 73407, 73411, 73415, 73419, 73422, + 73426, 73429, 73433, 73436, 73440, 73444, 73448, 73452, 73456, 73460, + 73464, 73468, 73472, 73476, 73480, 73484, 73488, 73492, 73496, 73500, + 73504, 73508, 73512, 73516, 73520, 73524, 73527, 73531, 73535, 73539, + 73543, 73547, 73551, 73555, 73559, 73563, 73567, 73571, 73575, 73579, + 73583, 73587, 73591, 73595, 73599, 73603, 73607, 73611, 73615, 73619, + 73623, 73627, 73631, 73635, 73639, 73643, 73647, 73651, 73655, 73658, + 73662, 73666, 73670, 73674, 73678, 73682, 73686, 73690, 73694, 73698, + 73702, 73706, 73711, 73716, 73719, 73724, 73727, 73730, 73733, 0, 0, 0, + 0, 0, 0, 0, 0, 73737, 73746, 73755, 73764, 73773, 73782, 73791, 73800, + 73809, 73817, 73824, 73832, 73839, 73847, 73857, 73866, 73876, 73885, + 73895, 73903, 73910, 73918, 73925, 73933, 73938, 73943, 73949, 73958, + 73964, 73970, 73977, 73986, 73994, 74002, 74010, 74017, 74024, 74031, + 74038, 74043, 74048, 74053, 74058, 74063, 74068, 74073, 74078, 74086, + 74094, 74100, 74105, 74110, 74115, 74120, 74125, 74130, 74135, 74140, + 74145, 74154, 74163, 74168, 74173, 74183, 74193, 74200, 74207, 74216, + 74225, 74237, 74249, 74255, 74261, 74269, 74277, 74287, 74297, 74304, + 74311, 74316, 74321, 74333, 74345, 74353, 74361, 74371, 74381, 74393, + 74405, 74414, 74423, 74430, 74437, 74444, 74451, 74460, 74469, 74474, + 74479, 74486, 74493, 74500, 74507, 74519, 74531, 74536, 74541, 74546, + 74551, 74556, 74561, 74566, 74571, 74575, 74580, 74585, 74590, 74595, + 74600, 74606, 74611, 74616, 74623, 74630, 74637, 74644, 74651, 74660, + 74669, 74675, 74681, 74687, 74693, 74699, 74705, 74712, 74719, 74726, + 74730, 74737, 74742, 74747, 74754, 74767, 74773, 74781, 74789, 74796, + 74803, 74812, 74821, 74828, 74835, 74842, 74849, 74856, 74863, 74870, + 74877, 74884, 74891, 74900, 74909, 74918, 74927, 74936, 74945, 74954, + 74963, 74972, 74981, 74988, 74995, 75001, 0, 0, 75009, 75016, 75023, + 75031, 75036, 75041, 75046, 75051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 75056, 75063, 75070, 75076, 75084, 75092, 75100, 75108, 75116, + 75124, 75130, 75136, 75143, 75149, 75155, 75161, 75168, 75175, 75182, + 75189, 75196, 75203, 75210, 75217, 75224, 75231, 75238, 75245, 75252, + 75259, 75265, 75272, 75279, 75286, 75293, 75300, 75307, 75314, 75321, + 75328, 75335, 75342, 75349, 75356, 75363, 75370, 75377, 75384, 75391, + 75399, 75407, 75415, 75423, 0, 0, 0, 0, 75431, 75439, 75447, 75455, + 75463, 75471, 75479, 75485, 75491, 75497, 0, 0, 0, 0, 0, 0, 75503, 75507, + 75512, 75517, 75522, 75527, 75532, 75537, 75542, 75547, 75552, 75557, + 75562, 75566, 75571, 75576, 75580, 75585, 75590, 75595, 75600, 75605, + 75610, 75615, 75619, 75624, 75629, 75634, 75639, 75643, 75647, 75651, + 75655, 75659, 75663, 75668, 75673, 75678, 75683, 75688, 75695, 75701, + 75706, 75711, 75716, 75721, 75727, 75734, 75740, 75747, 75754, 75761, + 75766, 75773, 75779, 75784, 0, 0, 0, 0, 0, 0, 0, 0, 75790, 75795, 75800, + 75804, 75809, 75813, 75818, 75822, 75827, 75832, 75838, 75843, 75849, + 75853, 75858, 75863, 75867, 75872, 75877, 75881, 75886, 75891, 75896, + 75901, 75906, 75911, 75916, 75921, 75926, 75931, 75936, 75941, 75946, + 75951, 75956, 75961, 75966, 75971, 75976, 75980, 75985, 75990, 75995, + 75999, 76003, 76008, 76013, 76018, 76023, 76028, 76033, 76037, 76042, + 76048, 76054, 76059, 76065, 76070, 76076, 76082, 76089, 76095, 76102, + 76107, 76113, 76119, 76124, 76130, 76136, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76141, 76145, 76150, 76155, 76159, 76163, 76167, 76171, 76175, 76179, + 76184, 76188, 0, 0, 0, 0, 0, 0, 76193, 76198, 76202, 76206, 76210, 76214, + 76218, 76222, 76227, 76231, 76236, 76240, 76244, 76248, 76253, 76257, + 76262, 76267, 76272, 76278, 76284, 76291, 76296, 76301, 76307, 76311, + 76316, 76319, 76322, 76326, 0, 0, 76331, 76338, 76344, 76350, 76356, + 76362, 76368, 76374, 76381, 76387, 76394, 76400, 76407, 76414, 76421, + 76428, 76435, 76442, 76449, 76456, 76463, 76470, 76476, 76483, 76489, + 76496, 76503, 76510, 76516, 76523, 76530, 76537, 76543, 76550, 76557, + 76563, 76570, 76576, 76583, 76590, 76596, 76602, 76609, 76615, 76622, + 76629, 76638, 76645, 76652, 76656, 76661, 76666, 76671, 76676, 76681, + 76685, 76690, 76694, 76699, 76704, 76709, 76714, 76719, 76724, 76728, + 76733, 76737, 76742, 76747, 76752, 76757, 76761, 76766, 76771, 76776, + 76782, 76787, 76793, 76799, 76805, 76811, 76817, 76822, 76828, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 76832, 76837, 76841, 76845, 76849, 76853, 76857, + 76861, 76865, 76869, 76873, 76877, 76881, 76885, 76889, 76893, 76897, + 76901, 76905, 76909, 76913, 76917, 76921, 76925, 76929, 76933, 76937, + 76941, 76945, 76949, 0, 0, 0, 76953, 76957, 76961, 76965, 76969, 76972, + 76978, 76981, 76985, 76988, 76994, 77000, 77008, 77011, 77015, 77018, + 77021, 77027, 77033, 77037, 77043, 77047, 77051, 77057, 77061, 77067, + 77073, 77077, 77081, 77087, 77091, 77097, 77103, 77107, 77113, 77117, + 77123, 77127, 77130, 77136, 77140, 77146, 77149, 77152, 77156, 77162, + 77166, 77170, 77176, 77182, 77186, 77189, 77195, 77200, 77205, 77210, + 77217, 77222, 77229, 77234, 77241, 77246, 77251, 77256, 77261, 77264, + 77268, 77272, 77277, 77282, 77287, 77292, 77297, 77302, 77307, 77312, + 77319, 77324, 0, 77331, 77334, 77338, 77341, 77344, 77347, 77350, 77353, + 77356, 77360, 77363, 0, 0, 0, 0, 77367, 77374, 77379, 77385, 77391, + 77397, 77403, 77409, 77415, 77422, 77429, 77436, 77443, 77450, 77457, + 77464, 77471, 77478, 77485, 77492, 77498, 77504, 77510, 77516, 77522, + 77528, 77535, 77541, 77548, 77555, 77562, 77569, 77576, 0, 77583, 77587, + 77591, 77595, 77599, 77604, 77608, 77612, 77617, 77622, 77627, 77632, + 77637, 77642, 77647, 77652, 77657, 77662, 77667, 77672, 77677, 77682, + 77687, 77692, 77697, 77702, 77707, 77711, 77716, 77721, 77726, 77731, + 77736, 77740, 77745, 77749, 77754, 77759, 77764, 77769, 77774, 77778, + 77784, 77789, 77795, 77801, 77806, 77812, 77817, 77823, 77829, 77835, + 77840, 77846, 77852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77858, 77864, 77870, + 77876, 77883, 77889, 77895, 77901, 77907, 77913, 77918, 77923, 77929, + 77936, 0, 0, 77943, 77948, 77952, 77956, 77960, 77964, 77968, 77972, + 77977, 77981, 0, 0, 77986, 77992, 77998, 78005, 78013, 78019, 78025, + 78031, 78037, 78043, 78049, 78055, 78061, 78067, 78073, 78079, 78085, + 78091, 78096, 78102, 78108, 78115, 78121, 78127, 78133, 78140, 78147, + 78154, 78160, 78165, 78170, 78176, 78184, 78191, 78198, 78206, 78214, + 78221, 78228, 78235, 78242, 78249, 78256, 78263, 78270, 78277, 78284, + 78291, 78298, 78305, 78312, 78319, 78326, 78333, 78340, 78347, 78354, + 78360, 78366, 78373, 78380, 78387, 78394, 78401, 78408, 78415, 78422, + 78429, 78436, 78443, 78450, 78457, 78464, 78471, 78478, 78485, 78492, + 78499, 78506, 78513, 78520, 78527, 78534, 78540, 78546, 78553, 78559, + 78564, 78570, 78575, 78580, 78585, 78592, 78598, 78604, 78610, 78616, + 78622, 78628, 78634, 78642, 78650, 78658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78666, 78672, 78678, 78684, + 78692, 78700, 78706, 78712, 78719, 78726, 78733, 78740, 78747, 78754, + 78761, 78768, 78775, 78783, 78791, 78799, 78807, 78815, 78821, 78829, + 78835, 78843, 78852, 78860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78866, 78870, + 78874, 78878, 78882, 78886, 0, 0, 78890, 78894, 78898, 78902, 78906, + 78910, 0, 0, 78914, 78918, 78922, 78926, 78930, 78934, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 78938, 78942, 78946, 78950, 78954, 78958, 78962, 0, 78966, + 78970, 78974, 78978, 78982, 78986, 78990, 0, 78994, 79001, 79007, 79013, + 79019, 79026, 79033, 79042, 79053, 79063, 79072, 79080, 79088, 79096, + 79102, 79110, 79117, 79124, 79133, 79144, 79152, 79162, 79168, 79178, + 79187, 79192, 79200, 79209, 79214, 79223, 79230, 79240, 79252, 79257, + 79264, 79271, 79276, 79286, 79296, 79306, 79316, 79331, 79344, 79355, + 79363, 79368, 79379, 79388, 79395, 79402, 79408, 79414, 79419, 79426, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 79432, 79436, 79440, 79444, 79448, 79452, + 79457, 79462, 79466, 79471, 79476, 79481, 79486, 79491, 79495, 79500, + 79505, 79510, 79515, 79520, 79525, 79530, 79535, 79540, 79545, 79550, + 79554, 79559, 79564, 79569, 79574, 79579, 79584, 79589, 79594, 79599, + 79604, 79609, 79614, 79619, 79624, 79629, 79634, 79639, 79644, 79649, + 79653, 79658, 79663, 79668, 79673, 79678, 79683, 79688, 79693, 79698, + 79703, 79708, 79713, 79718, 79723, 79728, 79733, 79738, 79743, 79748, + 79753, 79758, 79763, 79768, 79773, 79778, 79783, 79788, 79793, 79798, + 79803, 79808, 79813, 79818, 79822, 79829, 79836, 79843, 79850, 79856, + 79863, 79870, 79877, 79884, 79891, 79898, 79905, 79912, 79919, 79926, + 79932, 79939, 79946, 79953, 79960, 79967, 79974, 79981, 79988, 79995, + 80002, 80009, 80018, 80027, 80036, 80045, 80054, 80063, 80072, 80081, + 80089, 80097, 80105, 80113, 80121, 80129, 80137, 80145, 80151, 80159, 0, + 0, 80167, 80174, 80180, 80186, 80192, 80198, 80204, 80210, 80217, 80223, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65512, 65521, 65530, 65541, 65548, 65553, 65558, 65565, 65572, 65578, - 65583, 65588, 65593, 65598, 65605, 65610, 65615, 65620, 65631, 65636, - 65641, 65648, 65653, 65660, 65665, 65670, 65677, 65684, 65691, 65700, - 65709, 65714, 65719, 65724, 65731, 65736, 65746, 65753, 65758, 65763, - 65768, 65773, 65778, 65783, 65792, 65799, 65806, 65811, 65818, 65823, - 65830, 65839, 65850, 65855, 65864, 65869, 65876, 65885, 65894, 65899, - 65904, 65911, 65917, 65924, 65931, 65935, 65939, 65942, 65946, 65950, - 65954, 65958, 65962, 65966, 65970, 65973, 65977, 65981, 65985, 65989, - 65993, 65997, 66000, 66004, 66008, 66011, 66015, 66019, 66023, 66027, - 66031, 66035, 66039, 66043, 66047, 66051, 66055, 66059, 66063, 66067, - 66071, 66075, 66079, 66083, 66087, 66091, 66095, 66099, 66103, 66107, - 66111, 66115, 66119, 66123, 66127, 66131, 66135, 66139, 66143, 66147, - 66151, 66155, 66159, 66163, 66167, 66171, 66175, 66179, 66183, 66187, - 66190, 66194, 66198, 66202, 66206, 66210, 66214, 66218, 66222, 66226, - 66230, 66234, 66238, 66242, 66246, 66250, 66254, 66258, 66262, 66266, - 66270, 66274, 66278, 66282, 66286, 66290, 66294, 66298, 66302, 66306, - 66310, 66314, 66318, 66322, 66326, 66330, 66334, 66338, 66342, 66346, - 66350, 66354, 66358, 66362, 66366, 66370, 66374, 66378, 66382, 66386, - 66390, 66394, 66398, 66402, 66406, 66410, 66414, 66418, 66422, 66426, - 66430, 66434, 66438, 66442, 66446, 66450, 66454, 66458, 66462, 66466, - 66470, 66474, 66478, 66482, 66486, 66490, 66494, 66498, 66502, 66506, - 66510, 66514, 66518, 66522, 66526, 66530, 66534, 66538, 66542, 66546, - 66550, 66554, 66558, 66562, 66566, 66570, 66574, 66578, 66582, 66586, - 66590, 66594, 66598, 66602, 66606, 66610, 66614, 66618, 66622, 66626, - 66630, 66634, 66638, 66642, 66646, 66650, 66654, 66658, 66661, 66665, - 66669, 66673, 66677, 66681, 66685, 66689, 66693, 66697, 66701, 66705, - 66709, 66713, 66717, 66721, 66725, 66729, 66733, 66737, 66741, 66745, - 66749, 66753, 66757, 66761, 66765, 66769, 66773, 66777, 66781, 66785, - 66789, 66793, 66797, 66801, 66805, 66809, 66813, 66817, 66821, 66825, - 66829, 66833, 66837, 66841, 66845, 66849, 66853, 66857, 66861, 66865, - 66869, 66873, 66877, 66881, 66885, 66889, 66893, 66897, 66901, 66905, - 66909, 66913, 66917, 66921, 66925, 66929, 66933, 66937, 66941, 66945, - 66949, 66953, 66957, 66961, 66965, 66969, 66973, 66977, 66981, 66985, - 66989, 66993, 66997, 67001, 67005, 67009, 67013, 67017, 67021, 67025, - 67029, 67033, 67037, 67041, 67045, 67049, 67053, 67057, 67061, 67065, - 67069, 67073, 67077, 67081, 67085, 67089, 67093, 67097, 67101, 67105, - 67109, 67113, 67117, 67121, 67124, 67128, 67132, 67136, 67140, 67144, - 67148, 67152, 67156, 67160, 67164, 67168, 67172, 67176, 67180, 67184, - 67188, 67192, 67196, 67200, 67204, 67208, 67212, 67216, 67220, 67224, - 67228, 67232, 67236, 67240, 67244, 67248, 67252, 67256, 67260, 67264, - 67268, 67272, 67276, 67280, 67284, 67288, 67292, 67296, 67300, 67304, - 67308, 67312, 67316, 67320, 67324, 67328, 67332, 67336, 67340, 67344, - 67348, 67352, 67356, 67360, 67364, 67368, 67372, 67376, 67380, 67384, - 67388, 67392, 67396, 67400, 67404, 67408, 67412, 67416, 67420, 67424, - 67428, 67432, 67436, 67440, 67444, 67448, 67452, 67456, 67460, 67464, - 67468, 67472, 67476, 67480, 67483, 67487, 67491, 67495, 67499, 67503, - 67507, 67511, 67515, 67519, 67523, 67527, 67531, 67535, 67539, 67543, - 67547, 67551, 67555, 67559, 67563, 67567, 67571, 67575, 67579, 67583, - 67587, 67591, 67595, 67599, 67603, 67607, 67611, 67615, 67619, 67623, - 67627, 67631, 67635, 67639, 67643, 67647, 67651, 67655, 67659, 67663, - 67667, 67671, 67675, 67679, 67683, 67687, 67691, 67695, 67699, 67703, - 67707, 67711, 67715, 67719, 67723, 67727, 67731, 67735, 67739, 67743, - 67747, 67751, 67755, 67759, 67763, 67767, 67771, 67775, 67779, 67783, - 67787, 67791, 67795, 67799, 67803, 67807, 67811, 67815, 67819, 67823, - 67827, 67831, 67835, 67839, 67843, 67847, 67851, 67855, 67859, 67863, - 67867, 67871, 67875, 67879, 67883, 67887, 67891, 67895, 67899, 67903, - 67907, 67911, 67915, 67919, 67923, 67927, 67931, 67935, 67939, 67943, - 67947, 67951, 67955, 67959, 67963, 67967, 67971, 67975, 67978, 67982, - 67986, 67990, 67994, 67998, 68002, 68006, 68010, 68014, 68018, 68022, - 68026, 68030, 68034, 68038, 68042, 68046, 68050, 68054, 68058, 68062, - 68066, 68070, 68074, 68078, 68082, 68086, 68090, 68094, 68098, 68102, - 68106, 68110, 68114, 68118, 68122, 68126, 68130, 68134, 68138, 68142, - 68146, 68150, 68154, 68158, 68162, 68166, 68170, 68174, 68178, 68182, - 68186, 68190, 68194, 68198, 68202, 68206, 68210, 68214, 68218, 68222, - 68226, 68230, 68234, 68238, 68242, 68246, 68250, 68254, 68258, 68262, - 68266, 68270, 68274, 68278, 68282, 68286, 68290, 68294, 68298, 68302, - 68306, 68310, 68314, 68318, 68322, 68326, 68330, 68334, 68338, 68342, - 68346, 68350, 68354, 68358, 68362, 68366, 68370, 68374, 68378, 68382, - 68386, 68390, 68394, 68398, 68402, 68406, 68410, 68414, 68418, 68422, - 68426, 68430, 68433, 68437, 68441, 68445, 68449, 68453, 68457, 68461, - 68465, 68469, 68473, 68477, 68481, 68485, 68489, 68493, 68497, 68501, - 68505, 68509, 68513, 68517, 68521, 68525, 68529, 68533, 68537, 68541, - 68545, 68549, 68553, 68557, 68561, 68565, 68569, 68573, 68577, 68581, - 68585, 68589, 68593, 68597, 68601, 68605, 68609, 68613, 68617, 68621, - 68625, 68629, 68633, 68637, 68641, 68645, 68649, 68653, 68657, 68661, - 68665, 68669, 68673, 68677, 68681, 68685, 68689, 68693, 68697, 68701, - 68705, 68709, 68713, 68717, 68721, 68725, 68729, 68733, 68737, 68741, - 68745, 68749, 68753, 68757, 68761, 68765, 68769, 68773, 68777, 68781, - 68785, 68789, 68793, 68797, 68801, 68805, 68809, 68813, 68817, 68821, - 68825, 68829, 68833, 68837, 68841, 68845, 68849, 68853, 68857, 68861, - 68865, 68869, 68873, 68877, 68881, 68885, 68889, 68893, 68897, 68901, - 68905, 68909, 68913, 68917, 68921, 68925, 68929, 68933, 68937, 68941, - 68945, 68949, 68953, 68957, 68961, 68965, 68969, 68973, 68977, 68981, - 68985, 68989, 68993, 68997, 69001, 69005, 69009, 69013, 69017, 69021, - 69025, 69029, 69033, 69036, 69040, 69044, 69048, 69052, 69056, 69060, - 69064, 69068, 69072, 69076, 69080, 69084, 69088, 69092, 69096, 69100, - 69104, 69108, 69112, 69116, 69120, 69124, 69128, 69132, 69136, 69140, - 69144, 69148, 69152, 69156, 69160, 69164, 69168, 69172, 69176, 69180, - 69184, 69188, 69192, 69196, 69200, 69204, 69208, 69212, 69216, 69220, - 69224, 69228, 69232, 69236, 69240, 69244, 69248, 69252, 69256, 69260, - 69264, 69268, 69272, 69276, 69280, 69284, 69288, 69292, 69296, 69300, - 69304, 69308, 69312, 69316, 69320, 69324, 69328, 69332, 69336, 69340, - 69344, 69348, 69352, 69356, 69360, 69364, 69368, 69372, 69376, 69380, - 69384, 69388, 69392, 69396, 69400, 69404, 69408, 69412, 69416, 69420, - 69424, 69428, 69432, 69436, 69440, 69444, 69448, 69452, 69456, 69460, - 69464, 69468, 69472, 69476, 69480, 69484, 69488, 69492, 69496, 69500, - 69504, 69508, 69512, 69516, 69520, 69524, 69528, 69532, 69536, 69540, - 69544, 69548, 69552, 69556, 69560, 69564, 69568, 69572, 69576, 69580, - 69584, 69588, 69592, 69596, 69600, 69604, 69608, 69612, 69616, 69620, - 69624, 69628, 69632, 69636, 69640, 69644, 69648, 69652, 69656, 69660, - 69664, 69668, 69672, 69676, 69680, 69684, 69688, 69692, 69696, 69700, - 69704, 69708, 69712, 69716, 69720, 69724, 69728, 69732, 69736, 69740, - 69744, 69748, 69752, 69756, 69760, 69764, 69768, 69772, 69776, 69780, - 69784, 69788, 69792, 69796, 69800, 69804, 69808, 69812, 69816, 69820, - 69824, 69828, 69832, 69836, 69840, 69844, 69848, 69852, 69856, 69860, - 69864, 69868, 69872, 69876, 69880, 69884, 69888, 69892, 69896, 69900, - 69904, 69908, 69912, 69916, 69920, 69924, 69928, 69932, 69936, 69940, - 69944, 69948, 69952, 69956, 69960, 69964, 69968, 69972, 69976, 69980, - 69984, 69988, 69992, 69996, 70000, 70004, 70008, 70012, 70016, 70020, - 70024, 70028, 70032, 70036, 70040, 70044, 70048, 70052, 70056, 70060, - 70064, 70068, 70072, 70076, 70080, 70084, 70088, 70092, 70096, 70100, - 70104, 70108, 70112, 70116, 70120, 70124, 70128, 70132, 70136, 70140, - 70144, 70148, 70152, 70156, 70160, 70164, 70168, 70172, 70176, 70180, - 70184, 70188, 70192, 70196, 70200, 70204, 70208, 70212, 70216, 70220, - 70224, 70228, 70232, 70236, 70240, 70244, 70248, 70252, 70256, 70260, - 70264, 70268, 70272, 70276, 70280, 70284, 70288, 70292, 70296, 70300, - 70304, 70308, 70312, 70316, 70320, 70324, 70328, 70332, 70336, 70340, - 70344, 70348, 70352, 70356, 70360, 70364, 70368, 70372, 70376, 70380, - 70384, 70388, 70392, 70396, 70400, 70404, 70408, 70412, 70416, 70420, - 70424, 70428, 70432, 70436, 70440, 70444, 70448, 70452, 70456, 70460, - 70464, 70468, 70472, 70476, 70480, 70484, 70488, 70492, 70496, 70500, - 70504, 70508, 70512, 70516, 70520, 70524, 70528, 70532, 70536, 70540, - 70544, 70548, 70552, 70556, 70560, 70564, 70568, 70572, 70576, 0, 0, 0, - 70580, 70584, 70588, 70592, 70596, 70600, 70604, 70608, 70612, 70616, - 70620, 70624, 70628, 70632, 70636, 70640, 70644, 70648, 70652, 70656, - 70660, 70664, 70668, 70672, 70676, 70680, 70684, 70688, 70692, 70696, - 70700, 70704, 70708, 70712, 70716, 70720, 70724, 70728, 70732, 70736, - 70740, 70744, 70748, 70752, 70756, 70760, 70764, 70768, 70772, 70776, - 70780, 70784, 70788, 70792, 70796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70800, - 70805, 70809, 70814, 70819, 70824, 70829, 70834, 70838, 70843, 70848, - 70853, 70858, 70863, 70868, 70873, 70877, 70881, 70886, 70891, 70896, - 70901, 70906, 70910, 70915, 70920, 70925, 70930, 70935, 70939, 70944, - 70948, 70953, 70957, 70962, 70966, 70970, 70974, 70979, 70984, 70989, - 70997, 71005, 71013, 71021, 71028, 71036, 71042, 71050, 71054, 71058, - 71062, 71066, 71070, 71074, 71078, 71082, 71086, 71090, 71094, 71098, - 71102, 71106, 71110, 71114, 71118, 71122, 71126, 71130, 71134, 71138, - 71142, 71146, 71150, 71154, 71158, 71162, 71166, 71170, 71174, 71178, - 71182, 71186, 71190, 71194, 71197, 71201, 71205, 71209, 71213, 71217, - 71221, 71225, 71229, 71233, 71237, 71241, 71245, 71249, 71253, 71257, - 71261, 71265, 71269, 71273, 71277, 71281, 71285, 71289, 71293, 71297, - 71301, 71305, 71309, 71313, 71317, 71321, 71325, 71329, 71333, 71337, - 71341, 71344, 71348, 71352, 71355, 71359, 71363, 71367, 71370, 71374, - 71378, 71382, 71386, 71390, 71394, 71398, 71402, 71406, 71410, 71414, - 71418, 71422, 71426, 71430, 71434, 71438, 71442, 71446, 71450, 71454, - 71458, 71462, 71466, 71469, 71472, 71476, 71480, 71484, 71487, 71490, - 71494, 71498, 71502, 71506, 71510, 71514, 71518, 71522, 71526, 71530, - 71534, 71538, 71542, 71546, 71550, 71554, 71558, 71562, 71566, 71570, - 71574, 71578, 71582, 71586, 71590, 71594, 71598, 71602, 71606, 71610, - 71614, 71618, 71622, 71626, 71630, 71634, 71638, 71641, 71645, 71649, - 71653, 71657, 71661, 71665, 71669, 71673, 71677, 71681, 71685, 71689, - 71693, 71697, 71701, 71705, 71709, 71713, 71717, 71721, 71725, 71729, - 71733, 71737, 71741, 71745, 71749, 71753, 71757, 71761, 71765, 71769, - 71773, 71777, 71781, 71785, 71788, 71792, 71796, 71800, 71804, 71808, - 71812, 71816, 71820, 71824, 71828, 71832, 71836, 71840, 71844, 71848, - 71852, 71855, 71859, 71863, 71867, 71871, 71875, 71879, 71883, 71887, - 71891, 71895, 71899, 71903, 71907, 71911, 71915, 71919, 71923, 71927, - 71931, 71935, 71939, 71942, 71946, 71950, 71954, 71958, 71962, 71966, - 71970, 71974, 71978, 71982, 71986, 71990, 71994, 71998, 72002, 72006, - 72010, 72014, 72018, 72022, 72026, 72030, 72034, 72038, 72042, 72046, - 72050, 72054, 72058, 72062, 72066, 72070, 72074, 72078, 72082, 72086, - 72090, 72094, 72098, 72102, 72106, 72110, 72114, 72117, 72122, 72126, - 72132, 72137, 72143, 72147, 72151, 72155, 72159, 72163, 72167, 72171, - 72175, 72179, 72183, 72187, 72191, 72195, 72199, 72202, 72205, 72208, - 72211, 72214, 72217, 72220, 72223, 72226, 72231, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72237, 72242, 72247, 72252, 72257, - 72264, 72271, 72276, 72281, 72286, 72291, 72298, 72305, 72312, 72319, - 72326, 72333, 72343, 72353, 72360, 72367, 72374, 72381, 72387, 72393, - 72402, 72411, 72418, 72425, 72436, 72447, 72452, 72457, 72464, 72471, - 72478, 72485, 72492, 72499, 72506, 72513, 72519, 72525, 72531, 72537, - 72544, 72551, 72556, 72560, 72567, 72574, 72581, 72585, 72592, 72596, - 72601, 72605, 72611, 72616, 72622, 72627, 72631, 72635, 72638, 72641, - 72646, 72651, 72656, 72661, 72666, 72671, 72676, 72681, 72686, 72691, - 72700, 72709, 72714, 72719, 72724, 72729, 72734, 72739, 72744, 72749, - 72754, 72759, 72764, 72769, 72774, 72779, 72785, 72791, 72797, 0, 72803, - 72809, 72812, 72815, 72818, 72822, 72826, 72830, 72834, 72837, 72841, - 72844, 72848, 72851, 72855, 72859, 72863, 72867, 72871, 72875, 72879, - 72883, 72887, 72891, 72895, 72899, 72903, 72907, 72911, 72915, 72919, - 72923, 72927, 72931, 72935, 72939, 72942, 72946, 72950, 72954, 72958, - 72962, 72966, 72970, 72974, 72978, 72982, 72986, 72990, 72994, 72998, - 73002, 73006, 73010, 73014, 73018, 73022, 73026, 73030, 73034, 73038, - 73041, 73045, 73049, 73053, 73057, 73061, 73065, 73069, 73072, 73076, - 73080, 73084, 73088, 73092, 73096, 73100, 73104, 73108, 73112, 73116, - 73120, 73125, 73130, 73133, 73138, 73141, 73144, 73147, 0, 0, 0, 0, 0, 0, - 0, 0, 73151, 73160, 73169, 73178, 73187, 73196, 73205, 73214, 73223, - 73231, 73238, 73246, 73253, 73261, 73271, 73280, 73290, 73299, 73309, - 73317, 73324, 73332, 73339, 73347, 73352, 73357, 73362, 73371, 73377, - 73383, 73390, 73399, 73407, 73415, 73423, 73430, 73437, 73444, 73451, - 73456, 73461, 73466, 73471, 73476, 73481, 73486, 73491, 73499, 73507, - 73513, 73518, 73523, 73528, 73533, 73538, 73543, 73548, 73553, 73558, - 73566, 73574, 73579, 73584, 73594, 73604, 73611, 73618, 73627, 73636, - 73648, 73660, 73666, 73672, 73680, 73688, 73698, 73708, 73715, 73722, - 73727, 73732, 73744, 73756, 73764, 73772, 73782, 73792, 73804, 73816, - 73825, 73834, 73841, 73848, 73855, 73862, 73871, 73880, 73885, 73890, - 73897, 73904, 73911, 73918, 73930, 73942, 73947, 73952, 73957, 73962, - 73967, 73972, 73977, 73982, 73986, 73991, 73996, 74001, 74006, 74011, - 74017, 74022, 74027, 74034, 74041, 74048, 74055, 74062, 74070, 74078, - 74083, 74088, 74094, 74100, 74106, 74112, 74119, 74126, 74133, 74137, - 74144, 74149, 74154, 74160, 0, 74173, 74181, 74189, 74196, 74203, 74212, - 74221, 74228, 74235, 74242, 74249, 74256, 74263, 74270, 74277, 74284, - 74291, 74300, 74309, 74318, 74327, 74336, 74345, 74354, 74363, 74372, - 74381, 74388, 74396, 74402, 0, 0, 74410, 74416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74422, 74429, 74436, 74442, 74449, - 74457, 74465, 74473, 74481, 74489, 74495, 74501, 74508, 74514, 74520, - 74526, 74533, 74540, 74547, 74554, 74561, 74568, 74575, 74582, 74589, - 74596, 74603, 74610, 74617, 74624, 74630, 74637, 74644, 74651, 74658, - 74665, 74672, 74679, 74686, 74693, 74700, 74707, 74714, 74721, 74728, - 74735, 74742, 74749, 74756, 74764, 74772, 74780, 74788, 0, 0, 0, 0, - 74796, 74804, 74812, 74820, 74828, 74836, 74844, 74850, 74856, 74862, 0, - 0, 0, 0, 0, 0, 74868, 74872, 74877, 74882, 74887, 74892, 74897, 74902, - 74907, 74912, 74917, 74922, 74926, 74930, 74935, 74940, 74944, 74949, - 74954, 74959, 74964, 74969, 74974, 74979, 74983, 74988, 74993, 74998, - 75003, 75007, 75011, 75015, 75019, 75023, 75027, 75032, 75037, 75042, - 75047, 75052, 75059, 75065, 75070, 75075, 75080, 75085, 75091, 75098, - 75104, 75111, 75118, 75125, 75130, 75137, 75143, 75148, 0, 0, 0, 0, 0, 0, - 0, 0, 75154, 75159, 75164, 75168, 75173, 75177, 75182, 75186, 75191, - 75196, 75202, 75207, 75213, 75217, 75222, 75227, 75231, 75236, 75241, - 75245, 75250, 75255, 75260, 75265, 75270, 75275, 75280, 75285, 75290, - 75295, 75300, 75305, 75310, 75315, 75320, 75325, 75330, 75335, 75339, - 75343, 75348, 75353, 75358, 75362, 75366, 75371, 75376, 75381, 75386, - 75391, 75396, 75400, 75405, 75411, 75417, 75422, 75428, 75433, 75439, - 75445, 75452, 75458, 75465, 75470, 75476, 75482, 75487, 75493, 75499, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 75504, 75508, 75513, 75518, 75522, 75526, 75530, - 75534, 75538, 75542, 75546, 75550, 0, 0, 0, 0, 0, 0, 75554, 75559, 75563, - 75567, 75571, 75575, 75579, 75583, 75587, 75591, 75595, 75599, 75603, - 75607, 75611, 75615, 75620, 75625, 75630, 75636, 75642, 75649, 75654, - 75659, 75665, 75669, 75674, 75677, 0, 0, 0, 0, 75680, 75687, 75693, - 75699, 75705, 75711, 75717, 75723, 75729, 75735, 75741, 75747, 75754, - 75761, 75768, 75775, 75782, 75789, 75796, 75803, 75810, 75816, 75822, - 75829, 75835, 75842, 75849, 75856, 75862, 75869, 75876, 75883, 75889, - 75896, 75903, 75909, 75916, 75922, 75929, 75936, 75942, 75948, 75955, - 75961, 75968, 75975, 75984, 75991, 75998, 76002, 76007, 76012, 76017, - 76022, 76026, 76030, 76035, 76039, 76044, 76049, 76054, 76059, 76064, - 76069, 76073, 76078, 76082, 76087, 76092, 76097, 76102, 76106, 76111, - 76116, 76121, 76127, 76132, 76138, 76144, 76150, 76156, 76162, 76167, - 76173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76177, 76182, 76186, 76190, - 76194, 76198, 76202, 76206, 76210, 76214, 76218, 76222, 76226, 76230, - 76234, 76238, 76242, 76246, 76250, 76254, 76258, 76262, 76266, 76270, - 76274, 76278, 76282, 76286, 76290, 76294, 0, 0, 0, 76298, 76302, 76306, - 76310, 76314, 76317, 76323, 76326, 76330, 76333, 76339, 76345, 76353, - 76356, 76360, 76363, 76366, 76372, 76378, 76382, 76388, 76392, 76396, - 76402, 76406, 76412, 76418, 76422, 76426, 76432, 76436, 76442, 76448, - 76452, 76458, 76462, 76468, 76471, 76474, 76480, 76484, 76490, 76493, - 76496, 76500, 76506, 76510, 76514, 76520, 76526, 76530, 76533, 76539, - 76544, 76549, 76554, 76561, 76566, 76573, 76578, 76585, 76590, 76595, - 76600, 76605, 76608, 76612, 76616, 76621, 76626, 76631, 76636, 76641, - 76646, 76651, 76656, 76663, 76668, 0, 76674, 76677, 76681, 76684, 76687, - 76690, 76693, 76696, 76699, 76702, 76705, 0, 0, 0, 0, 76708, 76715, - 76720, 76726, 76732, 76738, 76744, 76750, 76756, 76763, 76770, 76777, - 76784, 76791, 76798, 76805, 76812, 76819, 76826, 76833, 76839, 76845, - 76851, 76857, 76863, 76869, 76875, 76881, 76887, 76894, 76901, 76908, - 76915, 0, 76922, 76925, 76928, 76931, 76934, 76938, 76941, 76944, 76948, - 76952, 76956, 76960, 76964, 76968, 76972, 76976, 76980, 76984, 76988, - 76992, 76996, 77000, 77004, 77008, 77012, 77015, 77019, 77022, 77026, - 77030, 77034, 77038, 77042, 77045, 77049, 77052, 77056, 77060, 77064, - 77068, 77072, 77075, 77080, 77084, 77089, 77094, 77098, 77103, 77107, - 77112, 77117, 77122, 77126, 77131, 77136, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77141, 77146, 77151, 77156, 77162, 77167, 77172, 77177, 77182, 77187, - 77191, 77195, 77200, 77206, 0, 0, 77212, 77216, 77219, 77222, 77225, - 77228, 77231, 77234, 77237, 77240, 0, 0, 77243, 77248, 77253, 77259, - 77266, 77272, 77278, 77284, 77290, 77296, 77302, 77308, 77314, 77320, - 77326, 77332, 77337, 77343, 77348, 77354, 77360, 77367, 77373, 77379, - 77385, 77392, 77399, 77406, 77412, 77417, 77422, 77428, 77436, 77443, - 77450, 77458, 77466, 77473, 77480, 77487, 77494, 77501, 77508, 77515, - 77522, 77529, 77536, 77543, 77550, 77557, 77564, 77571, 77578, 77585, - 77592, 77599, 77606, 77612, 77618, 77625, 77632, 77639, 77646, 77653, - 77660, 77667, 77674, 77681, 77688, 77695, 77702, 77709, 77716, 77723, - 77730, 77737, 77744, 77751, 77758, 77765, 77772, 77779, 77786, 77792, - 77798, 77805, 77811, 77816, 77822, 77827, 77832, 77837, 77844, 77850, - 77856, 77862, 77868, 77874, 77880, 77886, 77894, 77902, 77910, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77918, - 77924, 77930, 77936, 77944, 77952, 77958, 77964, 77971, 77978, 77985, - 77992, 77999, 78006, 78013, 78020, 78027, 78035, 78043, 78051, 78059, - 78067, 78073, 78081, 78087, 78095, 78104, 78112, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 78118, 78122, 78126, 78130, 78134, 78138, 0, 0, 78142, 78146, - 78150, 78154, 78158, 78162, 0, 0, 78166, 78170, 78174, 78178, 78182, - 78186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78190, 78194, 78198, 78202, 78206, - 78210, 78214, 0, 78218, 78222, 78226, 78230, 78234, 78238, 78242, 0, - 78246, 78253, 78259, 78265, 78271, 78278, 78285, 78294, 78305, 78316, - 78326, 78334, 78342, 78350, 78356, 78364, 78372, 78379, 78387, 78396, - 78403, 78412, 78418, 78428, 78437, 78442, 78450, 78459, 78464, 78473, - 78480, 78490, 78502, 78507, 78513, 78520, 78525, 78535, 78545, 78555, - 78565, 78580, 78593, 78604, 78612, 78617, 78628, 78638, 0, 0, 0, 0, - 78645, 78652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80230, 80234, 80238, 80242, + 80246, 80250, 80254, 80258, 80262, 80266, 80270, 80274, 80278, 80282, + 80286, 80290, 80294, 80298, 80302, 80306, 80310, 80314, 80318, 0, 0, 0, + 0, 80322, 80326, 80330, 80334, 80338, 80342, 80346, 80350, 80354, 80358, + 80362, 80366, 80370, 80374, 80378, 80382, 80386, 80390, 80394, 80398, + 80402, 80406, 80410, 80414, 80418, 80422, 80426, 80430, 80434, 80438, + 80442, 80446, 80450, 80454, 80458, 80462, 80466, 80470, 80474, 80478, + 80482, 80486, 80490, 80494, 80498, 80502, 80506, 80510, 80514, 0, 0, 0, + 0, 80518, 80522, 80526, 80530, 80534, 80538, 80542, 80546, 80550, 80554, + 80558, 80562, 80566, 80570, 80574, 80578, 80582, 80586, 80590, 80594, + 80598, 80602, 80606, 80610, 80614, 80618, 80622, 80626, 80630, 80634, + 80638, 80642, 80646, 80650, 80654, 80658, 80662, 80666, 80670, 80674, + 80678, 80682, 80686, 80690, 80694, 80698, 80702, 80706, 80710, 80714, + 80718, 80722, 80726, 80730, 80734, 80738, 80742, 80746, 80750, 80754, + 80758, 80762, 80766, 80770, 80774, 80778, 80782, 80786, 80790, 80794, + 80798, 80802, 80806, 80810, 80814, 80818, 80822, 80826, 80830, 80834, + 80838, 80842, 80846, 80850, 80854, 80858, 80862, 80866, 80870, 80874, + 80878, 80882, 80886, 80890, 80894, 80898, 80902, 80906, 80910, 80914, + 80918, 80922, 80926, 80930, 80934, 80938, 80942, 80946, 80950, 80954, + 80958, 80962, 80966, 80970, 80974, 80978, 80982, 80986, 80990, 80994, + 80998, 81002, 81006, 81010, 81014, 81018, 81022, 81026, 81030, 81034, + 81038, 81042, 81046, 81050, 81054, 81058, 81062, 81066, 81070, 81074, + 81078, 81082, 81086, 81090, 81094, 81098, 81102, 81106, 81110, 81114, + 81118, 81122, 81126, 81130, 81134, 81138, 81142, 81146, 81150, 81154, + 81158, 81162, 81166, 81170, 81174, 81178, 81182, 81186, 81190, 81194, + 81198, 81202, 81206, 81210, 81214, 81218, 81222, 81226, 81230, 81234, + 81238, 81242, 81246, 81250, 81254, 81258, 81262, 81266, 81270, 81274, + 81278, 81282, 81286, 81290, 81294, 81298, 81302, 81306, 81310, 81314, + 81318, 81322, 81326, 81330, 81334, 81338, 81342, 81346, 81350, 81354, + 81358, 81362, 81366, 81370, 81374, 81378, 81382, 81386, 81390, 81394, + 81398, 81402, 81406, 81410, 81414, 81418, 81422, 81426, 81430, 81434, + 81438, 81442, 81446, 81450, 81454, 81458, 81462, 81466, 81470, 81474, + 81478, 81482, 81486, 81490, 81494, 81498, 81502, 81506, 81510, 81514, + 81518, 81522, 81526, 81530, 81534, 81538, 81542, 81546, 81550, 81554, + 81558, 81562, 81566, 81570, 81574, 81578, 81582, 81586, 81590, 81594, + 81598, 81602, 81606, 81610, 81614, 81618, 81622, 81626, 81630, 81634, + 81638, 81642, 81646, 81650, 81654, 81658, 81662, 81666, 81670, 81674, + 81678, 81682, 81686, 81690, 81694, 81698, 81702, 81706, 81710, 81714, + 81718, 81722, 81726, 81730, 81734, 81738, 81742, 81746, 81750, 81754, + 81758, 81762, 81766, 81770, 81774, 81778, 81782, 81786, 81790, 81794, + 81798, 81802, 81806, 81810, 81814, 81818, 81822, 81826, 81830, 81834, + 81838, 81842, 81846, 81850, 81854, 81858, 81862, 81866, 81870, 81874, + 81878, 81882, 81886, 81890, 81894, 81898, 81902, 81906, 81910, 81914, + 81918, 81922, 81926, 81930, 81934, 81938, 81942, 81946, 81950, 81954, + 81958, 81962, 81966, 81970, 81974, 81978, 0, 0, 81982, 81986, 81990, + 81994, 81998, 82002, 82006, 82010, 82014, 82018, 82022, 82026, 82030, + 82034, 82038, 82042, 82046, 82050, 82054, 82058, 82062, 82066, 82070, + 82074, 82078, 82082, 82086, 82090, 82094, 82098, 82102, 82106, 82110, + 82114, 82118, 82122, 82126, 82130, 82134, 82138, 82142, 82146, 82150, + 82154, 82158, 82162, 82166, 82170, 82174, 82178, 82182, 82186, 82190, + 82194, 82198, 82202, 82206, 82210, 82214, 82218, 82222, 82226, 82230, + 82234, 82238, 82242, 82246, 82250, 82254, 82258, 82262, 82266, 82270, + 82274, 82278, 82282, 82286, 82290, 82294, 82298, 82302, 82306, 82310, + 82314, 82318, 82322, 82326, 82330, 82334, 82338, 82342, 82346, 82350, + 82354, 82358, 82362, 82366, 82370, 82374, 82378, 82382, 82386, 82390, + 82394, 82398, 82402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82406, + 82411, 82416, 82421, 82426, 82431, 82439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 82444, 82451, 82458, 82465, 82472, 0, 0, 0, 0, 0, 82479, 82486, + 82493, 82503, 82509, 82515, 82521, 82527, 82533, 82539, 82546, 82552, + 82558, 82564, 82573, 82582, 82594, 82606, 82612, 82618, 82624, 82631, + 82638, 82645, 82652, 82659, 0, 82666, 82673, 82680, 82688, 82695, 0, + 82702, 0, 82709, 82716, 0, 82723, 82731, 0, 82738, 82745, 82752, 82759, + 82766, 82773, 82780, 82787, 82794, 82801, 82806, 82813, 82820, 82826, + 82832, 82838, 82844, 82850, 82856, 82862, 82868, 82874, 82880, 82886, + 82892, 82898, 82904, 82910, 82916, 82922, 82928, 82934, 82940, 82946, + 82952, 82958, 82964, 82970, 82976, 82982, 82988, 82994, 83000, 83006, + 83012, 83018, 83024, 83030, 83036, 83042, 83048, 83054, 83060, 83066, + 83072, 83078, 83084, 83090, 83096, 83102, 83108, 83114, 83120, 83126, + 83132, 83138, 83144, 83150, 83156, 83162, 83168, 83174, 83180, 83186, + 83192, 83198, 83204, 83210, 83216, 83222, 83228, 83234, 83240, 83246, + 83252, 83258, 83264, 83270, 83276, 83284, 83292, 83298, 83304, 83310, + 83316, 83325, 83334, 83342, 83350, 83358, 83366, 83374, 83382, 83390, + 83398, 83405, 83412, 83423, 83434, 83438, 83442, 83447, 83452, 83457, + 83462, 83470, 83478, 83484, 83490, 83497, 83504, 83511, 83515, 83521, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83527, 83533, 83539, + 83545, 83551, 83556, 83561, 83567, 83573, 83579, 83585, 83594, 83600, + 83606, 83614, 83622, 83630, 83638, 83643, 83648, 83653, 83658, 83671, + 83684, 83695, 83706, 83718, 83730, 83742, 83754, 83765, 83776, 83788, + 83800, 83812, 83824, 83835, 83846, 83857, 83874, 83891, 83908, 83915, + 83922, 83929, 83936, 83947, 83958, 83969, 83982, 83993, 84001, 84009, + 84018, 84026, 84036, 84044, 84052, 84060, 84069, 84077, 84087, 84095, + 84103, 84111, 84121, 84129, 84136, 84143, 84150, 84157, 84165, 84173, + 84181, 84189, 84197, 84206, 84214, 84222, 84230, 84238, 84246, 84255, + 84263, 84271, 84279, 84287, 84295, 84303, 84311, 84319, 84327, 84335, + 84344, 84352, 84362, 84370, 84378, 84386, 84396, 84404, 84412, 84420, + 84428, 84437, 84446, 84454, 84464, 84472, 84480, 84488, 84497, 84505, + 84515, 84523, 84530, 84537, 84545, 84552, 84561, 84568, 84576, 84584, + 84593, 84601, 84611, 84619, 84627, 84635, 84645, 84653, 84660, 84667, + 84675, 84682, 84691, 84698, 84708, 84718, 84729, 84738, 84747, 84756, + 84765, 84774, 84784, 84796, 84808, 84819, 84831, 84844, 84855, 84864, + 84873, 84881, 84890, 84900, 84908, 84917, 84926, 84934, 84943, 84953, + 84961, 84970, 84979, 84987, 84996, 85006, 85014, 85024, 85032, 85042, + 85050, 85058, 85067, 85075, 85085, 85093, 85101, 85111, 85119, 85126, + 85133, 85142, 85151, 85159, 85168, 85178, 85186, 85197, 85205, 85213, + 85220, 85228, 85237, 85244, 85255, 85266, 85278, 85289, 85301, 85309, + 85317, 85326, 85334, 85343, 85351, 85359, 85368, 85376, 85385, 85393, + 85400, 85407, 85414, 85421, 85429, 85437, 85445, 85453, 85462, 85470, + 85478, 85487, 85495, 85503, 85511, 85520, 85528, 85536, 85544, 85552, + 85560, 85568, 85576, 85584, 85592, 85601, 85609, 85617, 85625, 85633, + 85641, 85650, 85659, 85667, 85675, 85683, 85692, 85700, 85709, 85716, + 85723, 85731, 85738, 85746, 85754, 85763, 85771, 85780, 85788, 85796, + 85806, 85813, 85820, 85828, 85835, 85843, 85854, 85866, 85874, 85883, + 85891, 85900, 85908, 85917, 85925, 85934, 85942, 85951, 85960, 85968, + 85976, 85984, 85993, 86000, 86008, 86017, 86026, 86035, 86045, 86053, + 86063, 86071, 86081, 86089, 86099, 86107, 86117, 86125, 86134, 86141, + 86150, 86157, 86167, 86175, 86185, 86193, 86203, 86211, 86219, 86227, + 86236, 86244, 86253, 86262, 86271, 86280, 86290, 86298, 86308, 86316, + 86326, 86334, 86344, 86352, 86362, 86370, 86379, 86386, 86395, 86402, + 86412, 86420, 86430, 86438, 86448, 86456, 86464, 86472, 86481, 86489, + 86498, 86507, 86516, 86525, 86533, 86541, 86550, 86558, 86567, 86576, + 86584, 86592, 86600, 86609, 86617, 86625, 86634, 86642, 86650, 86658, + 86666, 86671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86676, + 86686, 86696, 86706, 86716, 86727, 86737, 86747, 86758, 86767, 86776, + 86785, 86796, 86806, 86816, 86828, 86838, 86848, 86858, 86868, 86878, + 86888, 86898, 86908, 86918, 86928, 86938, 86949, 86960, 86970, 86980, + 86992, 87003, 87014, 87024, 87034, 87044, 87054, 87064, 87074, 87084, + 87096, 87106, 87116, 87128, 87139, 87150, 87160, 87170, 87180, 87190, + 87202, 87212, 87222, 87233, 87244, 87254, 87264, 87273, 87282, 87291, + 87300, 87309, 87319, 0, 0, 87329, 87339, 87349, 87359, 87369, 87381, + 87391, 87401, 87413, 87423, 87435, 87444, 87453, 87464, 87474, 87486, + 87497, 87510, 87520, 87532, 87541, 87552, 87563, 87576, 87586, 87596, + 87606, 87616, 87626, 87635, 87644, 87653, 87662, 87672, 87682, 87692, + 87702, 87712, 87722, 87732, 87742, 87752, 87762, 87772, 87782, 87791, + 87800, 87809, 87819, 87829, 87839, 87849, 87859, 87870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78658, - 78665, 78672, 78679, 78686, 78692, 78698, 78705, 78712, 78719, 78726, - 78733, 78740, 78747, 78754, 78761, 78767, 78774, 78781, 78788, 78795, - 78802, 78809, 78816, 78823, 78830, 78837, 78844, 78853, 78862, 78871, - 78880, 78889, 78898, 78907, 78916, 78924, 78932, 78940, 78948, 78956, - 78964, 78972, 78980, 78986, 78994, 0, 0, 79002, 79009, 79015, 79021, - 79027, 79033, 79039, 79045, 79051, 79057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87880, 87895, 87910, 87916, 87922, 87928, + 87934, 87940, 87946, 87952, 87958, 87966, 87970, 87973, 0, 0, 87981, + 87984, 87987, 87990, 87993, 87996, 87999, 88002, 88005, 88008, 88011, + 88014, 88017, 88020, 88023, 88026, 88029, 88037, 88046, 88057, 88065, + 88073, 88082, 88091, 88102, 88114, 0, 0, 0, 0, 0, 0, 88124, 88129, 88134, + 88141, 88148, 88154, 88160, 88165, 88170, 88175, 88181, 88187, 88193, + 88199, 88205, 88212, 88219, 88229, 88239, 88249, 88258, 88269, 88278, + 88287, 88297, 88307, 88319, 88331, 88342, 88353, 88364, 88375, 88385, + 88395, 88405, 88415, 88426, 88437, 88441, 88446, 88455, 88464, 88468, + 88472, 88476, 88481, 88486, 88491, 88496, 88499, 88503, 0, 88508, 88511, + 88514, 88518, 88522, 88527, 88531, 88535, 88540, 88545, 88552, 88559, + 88562, 88565, 88568, 88571, 88574, 88578, 88582, 0, 88586, 88591, 88595, + 88599, 0, 0, 0, 0, 88604, 88609, 88616, 88621, 88626, 0, 88631, 88636, + 88641, 88646, 88651, 88656, 88661, 88666, 88671, 88676, 88681, 88687, + 88696, 88705, 88714, 88723, 88733, 88743, 88753, 88763, 88772, 88781, + 88790, 88799, 88804, 88809, 88815, 88821, 88827, 88833, 88841, 88849, + 88855, 88861, 88867, 88873, 88879, 88885, 88891, 88897, 88902, 88907, + 88912, 88917, 88922, 88927, 88932, 88937, 88943, 88949, 88955, 88961, + 88967, 88973, 88979, 88985, 88991, 88997, 89003, 89009, 89015, 89021, + 89027, 89033, 89039, 89045, 89051, 89057, 89063, 89069, 89075, 89081, + 89087, 89093, 89099, 89105, 89111, 89117, 89123, 89129, 89135, 89141, + 89147, 89153, 89159, 89165, 89171, 89177, 89183, 89189, 89195, 89201, + 89207, 89213, 89219, 89225, 89231, 89237, 89243, 89249, 89255, 89261, + 89267, 89273, 89279, 89285, 89291, 89297, 89302, 89307, 89312, 89317, + 89323, 89329, 89335, 89341, 89347, 89353, 89359, 89365, 89371, 89377, + 89384, 89391, 89396, 89401, 89406, 89411, 89423, 89435, 89447, 89459, + 89472, 89485, 89493, 0, 0, 89501, 0, 89509, 89513, 89517, 89520, 89524, + 89528, 89531, 89534, 89538, 89542, 89545, 89548, 89551, 89554, 89559, + 89562, 89566, 89569, 89572, 89575, 89578, 89581, 89584, 89588, 89591, + 89595, 89598, 89601, 89605, 89609, 89613, 89617, 89622, 89627, 89633, + 89639, 89645, 89650, 89656, 89662, 89668, 89673, 89679, 89685, 89690, + 89696, 89702, 89707, 89713, 89719, 89724, 89729, 89735, 89740, 89746, + 89752, 89758, 89764, 89770, 89774, 89779, 89783, 89788, 89792, 89797, + 89802, 89808, 89814, 89820, 89825, 89831, 89837, 89843, 89848, 89854, + 89860, 89865, 89871, 89877, 89882, 89888, 89894, 89899, 89904, 89910, + 89915, 89921, 89927, 89933, 89939, 89945, 89950, 89954, 89959, 89962, + 89967, 89972, 89978, 89983, 89988, 89992, 89997, 90002, 90007, 90012, + 90017, 90022, 90027, 90032, 90038, 90044, 90050, 90058, 90062, 90066, + 90070, 90074, 90078, 90082, 90087, 90092, 90097, 90102, 90107, 90112, + 90117, 90122, 90127, 90132, 90137, 90142, 90147, 90151, 90156, 90161, + 90166, 90171, 90176, 90180, 90185, 90190, 90195, 90200, 90204, 90209, + 90214, 90219, 90224, 90228, 90233, 90238, 90243, 90248, 90253, 90258, + 90263, 90268, 90273, 90280, 90287, 90291, 90296, 90301, 90306, 90311, + 90316, 90321, 90326, 90331, 90336, 90341, 90346, 90351, 90356, 90361, + 90366, 90371, 90376, 90381, 90386, 90391, 90396, 90401, 90406, 90411, + 90416, 90421, 90426, 90431, 90436, 0, 0, 0, 90441, 90445, 90450, 90454, + 90459, 90464, 0, 0, 90468, 90473, 90478, 90482, 90487, 90492, 0, 0, + 90497, 90502, 90506, 90511, 90516, 90521, 0, 0, 90526, 90531, 90536, 0, + 0, 0, 90540, 90544, 90548, 90552, 90555, 90559, 90563, 0, 90567, 90573, + 90576, 90579, 90582, 90585, 90589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90593, + 90599, 90605, 90611, 90617, 0, 0, 90621, 90627, 90633, 90639, 90645, + 90651, 90658, 90665, 90672, 90679, 90686, 90693, 0, 90700, 90707, 90714, + 90720, 90727, 90734, 90741, 90748, 90754, 90761, 90768, 90775, 90782, + 90789, 90796, 90803, 90810, 90817, 90823, 90830, 90837, 90844, 90851, + 90858, 90865, 90872, 0, 90879, 90886, 90893, 90900, 90907, 90914, 90921, + 90928, 90935, 90942, 90949, 90956, 90963, 90970, 90976, 90983, 90990, + 90997, 91004, 0, 91011, 91018, 0, 91025, 91032, 91039, 91046, 91053, + 91060, 91067, 91074, 91081, 91088, 91095, 91102, 91109, 91116, 91123, 0, + 0, 91129, 91134, 91139, 91144, 91149, 91154, 91159, 91164, 91169, 91174, + 91179, 91184, 91189, 91194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91199, 91206, + 91213, 91220, 91227, 91234, 91241, 91248, 91255, 91262, 91269, 91276, + 91283, 91290, 91297, 91304, 91311, 91318, 91325, 91332, 91340, 91348, + 91355, 91362, 91367, 91375, 91383, 91390, 91397, 91402, 91409, 91414, + 91419, 91426, 91431, 91436, 91441, 91449, 91454, 91459, 91466, 91471, + 91476, 91483, 91490, 91495, 91500, 91505, 91510, 91515, 91520, 91525, + 91530, 91535, 91542, 91547, 91554, 91559, 91564, 91569, 91574, 91579, + 91584, 91589, 91594, 91599, 91604, 91609, 91616, 91623, 91630, 91637, + 91643, 91648, 91655, 91660, 91665, 91674, 91681, 91690, 91697, 91702, + 91707, 91715, 91720, 91725, 91730, 91735, 91740, 91747, 91752, 91757, + 91762, 91767, 91772, 91779, 91786, 91793, 91800, 91807, 91814, 91821, + 91828, 91835, 91842, 91849, 91856, 91863, 91870, 91877, 91884, 91891, + 91898, 91905, 91912, 91919, 91926, 91933, 91940, 91947, 91954, 91961, + 91968, 0, 0, 0, 0, 0, 91975, 91983, 91991, 0, 0, 0, 0, 91996, 92000, + 92004, 92008, 92012, 92016, 92020, 92025, 92029, 92034, 92039, 92044, + 92049, 92054, 92059, 92064, 92069, 92074, 92079, 92085, 92091, 92097, + 92104, 92111, 92118, 92125, 92132, 92139, 92145, 92151, 92157, 92164, + 92171, 92178, 92185, 92192, 92199, 92206, 92213, 92220, 92227, 92234, + 92241, 92248, 92255, 0, 0, 0, 92262, 92270, 92278, 92286, 92294, 92302, + 92312, 92322, 92330, 92338, 92346, 92354, 92362, 92368, 92375, 92384, + 92393, 92402, 92411, 92420, 92429, 92439, 92450, 92460, 92471, 92480, + 92489, 92498, 92508, 92519, 92529, 92540, 92551, 92560, 92568, 92574, + 92580, 92586, 92592, 92600, 92608, 92614, 92621, 92631, 92638, 92645, + 92652, 92659, 92666, 92676, 92683, 92690, 92698, 92706, 92715, 92724, + 92733, 92742, 92751, 92759, 92768, 92777, 92786, 92790, 92797, 92802, + 92807, 92811, 92815, 92819, 92823, 92828, 92833, 92839, 92845, 92849, + 92855, 92859, 92863, 92867, 92871, 92875, 92879, 92885, 92889, 92894, 0, + 0, 0, 92898, 92903, 92908, 92913, 92918, 92925, 92930, 92935, 92940, + 92945, 92950, 92955, 0, 0, 0, 0, 92960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92966, 92973, 92982, 92991, 92998, + 93005, 93012, 93019, 93026, 93033, 93039, 93046, 93053, 93060, 93067, + 93074, 93081, 93088, 93095, 93104, 93111, 93118, 93125, 93132, 93139, + 93146, 93153, 93160, 93169, 93176, 93183, 93190, 93197, 93204, 93211, + 93220, 93227, 93234, 93241, 93248, 93257, 93264, 93271, 93278, 93286, + 93295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93304, 93308, 93312, 93317, 93322, + 93327, 93332, 93336, 93341, 93346, 93351, 93356, 93361, 93366, 93370, + 93375, 93380, 93385, 93390, 93394, 93399, 93404, 93408, 93412, 93417, + 93422, 93427, 93432, 93437, 0, 0, 0, 93442, 93446, 93451, 93456, 93460, + 93465, 93469, 93474, 93479, 93484, 93489, 93494, 93498, 93503, 93508, + 93513, 93518, 93522, 93527, 93531, 93536, 93541, 93546, 93551, 93556, + 93561, 93565, 93569, 93574, 93579, 93584, 93589, 93594, 93599, 93604, + 93609, 93614, 93619, 93624, 93629, 93634, 93639, 93644, 93649, 93654, + 93659, 93664, 93669, 93674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 93679, 93685, 93690, 93695, 93700, 93705, 93710, 93715, 93721, 93726, + 93732, 93738, 93744, 93750, 93756, 93762, 93768, 93774, 93780, 93786, + 93793, 93800, 93807, 93815, 93823, 93831, 93839, 93847, 0, 0, 0, 0, + 93855, 93859, 93864, 93869, 93874, 93878, 93883, 93888, 93893, 93898, + 93902, 93906, 93911, 93916, 93921, 93926, 93930, 93935, 93940, 93945, + 93950, 93955, 93960, 93964, 93969, 93974, 93979, 93984, 93989, 93994, + 93999, 94004, 94009, 94014, 94019, 94025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 94031, 94036, 94041, 94046, 94051, 94056, 94061, 94066, 94071, + 94076, 94081, 94086, 94091, 94096, 94101, 94106, 94111, 94116, 94121, + 94126, 94131, 94136, 94141, 94146, 94151, 94156, 94161, 0, 0, 0, 0, 0, + 94168, 94174, 94180, 94186, 94192, 94197, 94203, 94209, 94215, 94221, + 94226, 94232, 94238, 94244, 94250, 94256, 94262, 94268, 94274, 94280, + 94285, 94291, 94297, 94303, 94309, 94315, 94320, 94326, 94332, 94337, + 94343, 94349, 94355, 94361, 94367, 94373, 94379, 94384, 94390, 94397, + 94404, 94411, 94418, 0, 0, 0, 0, 0, 94425, 94430, 94435, 94440, 94445, + 94450, 94455, 94460, 94465, 94470, 94475, 94480, 94485, 94490, 94495, + 94500, 94505, 94510, 94515, 94520, 94525, 94530, 94535, 94540, 94545, + 94550, 94555, 94559, 94563, 94567, 0, 94572, 94578, 94583, 94588, 94593, + 94598, 94604, 94610, 94616, 94622, 94628, 94634, 94640, 94646, 94652, + 94658, 94664, 94670, 94676, 94681, 94687, 94693, 94699, 94705, 94710, + 94716, 94722, 94727, 94733, 94739, 94745, 94751, 94757, 94763, 94769, + 94775, 94781, 0, 0, 0, 0, 94786, 94792, 94798, 94804, 94810, 94816, + 94822, 94828, 94834, 94841, 94846, 94851, 94857, 94863, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94869, 94875, 94881, 94887, 94894, + 94900, 94907, 94914, 94921, 94928, 94936, 94943, 94951, 94957, 94963, + 94969, 94975, 94981, 94987, 94993, 94999, 95005, 95011, 95017, 95023, + 95029, 95035, 95041, 95047, 95053, 95059, 95065, 95071, 95077, 95083, + 95089, 95095, 95101, 95107, 95113, 95119, 95125, 95131, 95137, 95144, + 95150, 95157, 95164, 95171, 95178, 95186, 95193, 95201, 95207, 95213, + 95219, 95225, 95231, 95237, 95243, 95249, 95255, 95261, 95267, 95273, + 95279, 95285, 95291, 95297, 95303, 95309, 95315, 95321, 95327, 95333, + 95339, 95345, 95351, 95357, 95363, 95369, 95374, 95379, 95384, 95389, + 95394, 95399, 95404, 95409, 95414, 95419, 95424, 95429, 95434, 95439, + 95444, 95449, 95454, 95459, 95464, 95469, 95474, 95479, 95484, 95489, + 95494, 95499, 95504, 95509, 95514, 95519, 95524, 95529, 95534, 95539, + 95544, 95549, 95554, 95559, 95564, 95569, 95574, 95579, 95584, 95589, + 95594, 95599, 95604, 95609, 95614, 95619, 95624, 95629, 95634, 95639, + 95644, 95649, 95654, 95659, 95664, 95669, 95674, 95679, 95684, 95689, + 95694, 95699, 95704, 95709, 95713, 95717, 95721, 95725, 95729, 95733, + 95737, 95742, 95747, 0, 0, 95752, 95757, 95761, 95765, 95769, 95773, + 95777, 95781, 95786, 95790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 95795, 95799, 95804, 95809, 95814, 95819, 95824, 95829, 95834, 95838, + 95843, 95848, 95853, 95858, 95862, 95867, 95872, 95877, 95882, 95887, + 95892, 95897, 95902, 95906, 95911, 95916, 95921, 95926, 95931, 95936, + 95941, 95946, 95950, 95955, 95960, 95965, 95970, 95975, 95980, 95985, 0, + 0, 0, 0, 0, 0, 0, 0, 95990, 95997, 96004, 96011, 96018, 96025, 96032, + 96039, 96046, 96053, 96060, 96067, 96074, 96081, 96088, 96095, 96102, + 96109, 96116, 96123, 96130, 96137, 96144, 96151, 96158, 96165, 96172, + 96179, 96186, 96193, 96200, 96207, 96214, 96221, 96228, 96235, 96242, + 96249, 96256, 96263, 96270, 96277, 96284, 96291, 96298, 96305, 96312, + 96319, 96326, 96333, 96340, 96347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 79063, 79067, 79071, 79075, 79079, 79083, 79087, 79091, - 79095, 79099, 79103, 79107, 79111, 79115, 79119, 79123, 79127, 79131, - 79135, 79139, 79143, 79147, 79151, 0, 0, 0, 0, 79155, 79159, 79163, - 79167, 79171, 79175, 79179, 79183, 79187, 79191, 79195, 79199, 79203, - 79207, 79211, 79215, 79219, 79223, 79227, 79231, 79235, 79239, 79243, - 79247, 79251, 79255, 79259, 79263, 79267, 79271, 79275, 79279, 79283, - 79287, 79291, 79295, 79299, 79303, 79307, 79311, 79315, 79319, 79323, - 79327, 79331, 79335, 79339, 79343, 79347, 0, 0, 0, 0, 79351, 79355, - 79359, 79363, 79367, 79371, 79375, 79379, 79383, 79387, 79391, 79395, - 79399, 79403, 79407, 79411, 79415, 79419, 79423, 79427, 79431, 79435, - 79439, 79443, 79447, 79451, 79455, 79459, 79463, 79467, 79471, 79475, - 79479, 79483, 79487, 79491, 79495, 79499, 79503, 79507, 79511, 79515, - 79519, 79523, 79527, 79531, 79535, 79539, 79543, 79547, 79551, 79555, - 79559, 79563, 79567, 79571, 79575, 79579, 79583, 79587, 79591, 79595, - 79599, 79603, 79607, 79611, 79615, 79619, 79623, 79627, 79631, 79635, - 79639, 79643, 79647, 79651, 79655, 79659, 79663, 79667, 79671, 79675, - 79679, 79683, 79687, 79691, 79695, 79699, 79703, 79707, 79711, 79715, - 79719, 79723, 79727, 79731, 79735, 79739, 79743, 79747, 79751, 79755, - 79759, 79763, 79767, 79771, 79775, 79779, 79783, 79787, 79791, 79795, - 79799, 79803, 79807, 79811, 79815, 79819, 79823, 79827, 79831, 79835, - 79839, 79843, 79847, 79851, 79855, 79859, 79863, 79867, 79871, 79875, - 79879, 79883, 79887, 79891, 79895, 79899, 79903, 79907, 79911, 79915, - 79919, 79923, 79927, 79931, 79935, 79939, 79943, 79947, 79951, 79955, - 79959, 79963, 79967, 79971, 79975, 79979, 79983, 79987, 79991, 79995, - 79999, 80003, 80007, 80011, 80015, 80019, 80023, 80027, 80031, 80035, - 80039, 80043, 80047, 80051, 80055, 80059, 80063, 80067, 80071, 80075, - 80079, 80083, 80087, 80091, 80095, 80099, 80103, 80107, 80111, 80115, - 80119, 80123, 80127, 80131, 80135, 80139, 80143, 80147, 80151, 80155, - 80159, 80163, 80167, 80171, 80175, 80179, 80183, 80187, 80191, 80195, - 80199, 80203, 80207, 80211, 80215, 80219, 80223, 80227, 80231, 80235, - 80239, 80243, 80247, 80251, 80255, 80259, 80263, 80267, 80271, 80275, - 80279, 80283, 80287, 80291, 80295, 80299, 80303, 80307, 80311, 80315, - 80319, 80323, 80327, 80331, 80335, 80339, 80343, 80347, 80351, 80355, - 80359, 80363, 80367, 80371, 80375, 80379, 80383, 80387, 80391, 80395, - 80399, 80403, 80407, 80411, 80415, 80419, 80423, 80427, 80431, 80435, - 80439, 80443, 80447, 80451, 80455, 80459, 80463, 80467, 80471, 80475, - 80479, 80483, 80487, 80491, 80495, 80499, 80503, 80507, 80511, 80515, - 80519, 80523, 80527, 80531, 80535, 80539, 80543, 80547, 80551, 80555, - 80559, 80563, 80567, 80571, 80575, 80579, 80583, 80587, 80591, 80595, - 80599, 80603, 80607, 80611, 80615, 80619, 80623, 80627, 80631, 80635, - 80639, 80643, 80647, 80651, 80655, 80659, 80663, 80667, 80671, 80675, - 80679, 80683, 80687, 80691, 80695, 80699, 80703, 80707, 80711, 80715, - 80719, 80723, 80727, 80731, 80735, 80739, 80743, 80747, 80751, 80755, - 80759, 80763, 80767, 80771, 80775, 80779, 80783, 80787, 80791, 80795, - 80799, 80803, 80807, 80811, 0, 0, 80815, 80819, 80823, 80827, 80831, - 80835, 80839, 80843, 80847, 80851, 80855, 80859, 80863, 80867, 80871, - 80875, 80879, 80883, 80887, 80891, 80895, 80899, 80903, 80907, 80911, - 80915, 80919, 80923, 80927, 80931, 80935, 80939, 80943, 80947, 80951, - 80955, 80959, 80963, 80967, 80971, 80975, 80979, 80983, 80987, 80991, - 80995, 80999, 81003, 81007, 81011, 81015, 81019, 81023, 81027, 81031, - 81035, 81039, 81043, 81047, 81051, 81055, 81059, 81063, 81067, 81071, - 81075, 81079, 81083, 81087, 81091, 81095, 81099, 81103, 81107, 81111, - 81115, 81119, 81123, 81127, 81131, 81135, 81139, 81143, 81147, 81151, - 81155, 81159, 81163, 81167, 81171, 81175, 81179, 81183, 81187, 81191, - 81195, 81199, 81203, 81207, 81211, 81215, 81219, 81223, 81227, 81231, - 81235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81239, 81244, 81249, - 81254, 81259, 81264, 81272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81277, - 81284, 81291, 81298, 81305, 0, 0, 0, 0, 0, 81312, 81319, 81326, 81336, - 81342, 81348, 81354, 81360, 81366, 81372, 81379, 81385, 81391, 81397, - 81406, 81415, 81427, 81439, 81445, 81451, 81457, 81464, 81471, 81478, - 81485, 81492, 0, 81499, 81506, 81513, 81521, 81528, 0, 81535, 0, 81542, - 81549, 0, 81556, 81564, 0, 81571, 81578, 81585, 81592, 81599, 81606, - 81613, 81620, 81627, 81634, 81639, 81646, 81653, 81659, 81665, 81671, - 81677, 81683, 81689, 81695, 81701, 81707, 81713, 81719, 81725, 81731, - 81737, 81743, 81749, 81755, 81761, 81767, 81773, 81779, 81785, 81791, - 81797, 81803, 81809, 81815, 81821, 81827, 81833, 81839, 81845, 81851, - 81857, 81863, 81869, 81875, 81881, 81887, 81893, 81899, 81905, 81911, - 81917, 81923, 81929, 81935, 81941, 81947, 81953, 81959, 81965, 81971, - 81977, 81983, 81989, 81995, 82001, 82007, 82013, 82019, 82025, 82031, - 82037, 82043, 82049, 82055, 82061, 82067, 82073, 82079, 82085, 82091, - 82097, 82103, 82109, 82117, 82125, 82131, 82137, 82143, 82149, 82158, - 82167, 82175, 82183, 82191, 82199, 82207, 82215, 82223, 82231, 82238, - 82245, 82256, 82267, 82271, 82275, 82280, 82285, 82290, 82295, 82303, - 82311, 82317, 82323, 82330, 82337, 82344, 82348, 82354, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82360, 82366, 82372, 82378, 82384, - 82389, 82394, 82400, 82406, 82412, 82418, 82427, 82433, 82439, 82447, - 82455, 82463, 82471, 82476, 82481, 82486, 82491, 82504, 82517, 82528, - 82539, 82551, 82563, 82575, 82587, 82598, 82609, 82621, 82633, 82645, - 82657, 82668, 82679, 82690, 82707, 82724, 82741, 82748, 82755, 82762, - 82769, 82780, 82791, 82802, 82815, 82826, 82834, 82842, 82851, 82859, - 82869, 82877, 82885, 82893, 82902, 82910, 82920, 82928, 82936, 82944, - 82954, 82962, 82969, 82976, 82983, 82990, 82998, 83006, 83014, 83022, - 83030, 83039, 83047, 83055, 83063, 83071, 83079, 83088, 83096, 83104, - 83112, 83120, 83128, 83136, 83144, 83152, 83160, 83168, 83177, 83185, - 83195, 83203, 83211, 83219, 83229, 83237, 83245, 83253, 83261, 83270, - 83279, 83287, 83297, 83305, 83313, 83321, 83330, 83338, 83348, 83356, - 83363, 83370, 83378, 83385, 83394, 83401, 83409, 83417, 83426, 83434, - 83444, 83452, 83460, 83468, 83478, 83486, 83493, 83500, 83508, 83515, - 83524, 83531, 83541, 83551, 83562, 83571, 83580, 83589, 83598, 83607, - 83617, 83629, 83641, 83652, 83664, 83677, 83688, 83697, 83706, 83714, - 83723, 83733, 83741, 83750, 83759, 83767, 83776, 83786, 83794, 83803, - 83812, 83820, 83829, 83839, 83847, 83857, 83865, 83875, 83883, 83891, - 83900, 83908, 83918, 83926, 83934, 83944, 83952, 83959, 83966, 83975, - 83984, 83992, 84001, 84011, 84019, 84030, 84038, 84046, 84053, 84061, - 84070, 84077, 84088, 84099, 84111, 84122, 84134, 84142, 84150, 84159, - 84167, 84176, 84184, 84192, 84201, 84209, 84218, 84226, 84233, 84240, - 84247, 84254, 84262, 84270, 84278, 84286, 84295, 84303, 84311, 84320, - 84328, 84336, 84344, 84353, 84361, 84369, 84377, 84385, 84393, 84401, - 84409, 84417, 84425, 84434, 84442, 84450, 84458, 84466, 84474, 84483, - 84492, 84500, 84508, 84516, 84525, 84533, 84542, 84549, 84556, 84564, - 84571, 84579, 84587, 84596, 84604, 84613, 84621, 84629, 84639, 84646, - 84653, 84661, 84668, 84676, 84687, 84699, 84707, 84716, 84724, 84733, - 84741, 84750, 84758, 84767, 84775, 84784, 84793, 84801, 84809, 84817, - 84826, 84833, 84841, 84850, 84859, 84868, 84878, 84886, 84896, 84904, - 84914, 84922, 84932, 84940, 84950, 84958, 84967, 84974, 84983, 84990, - 85000, 85008, 85018, 85026, 85036, 85044, 85052, 85060, 85069, 85077, - 85086, 85095, 85104, 85113, 85123, 85131, 85141, 85149, 85159, 85167, - 85177, 85185, 85195, 85203, 85212, 85219, 85228, 85235, 85245, 85253, - 85263, 85271, 85281, 85289, 85297, 85305, 85314, 85322, 85331, 85340, - 85349, 85358, 85366, 85374, 85383, 85391, 85400, 85409, 85417, 85425, - 85433, 85442, 85450, 85458, 85467, 85475, 85483, 85491, 85499, 85504, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85509, 85519, 85529, 85539, - 85549, 85560, 85570, 85580, 85591, 85600, 85609, 85618, 85629, 85639, - 85649, 85661, 85671, 85681, 85691, 85701, 85711, 85721, 85731, 85741, - 85751, 85761, 85771, 85782, 85793, 85803, 85813, 85825, 85836, 85847, - 85857, 85867, 85877, 85887, 85897, 85907, 85917, 85929, 85939, 85949, - 85961, 85972, 85983, 85993, 86003, 86013, 86023, 86035, 86045, 86055, - 86066, 86077, 86087, 86097, 86106, 86115, 86124, 86133, 86142, 86152, 0, - 0, 86162, 86172, 86182, 86192, 86202, 86214, 86224, 86234, 86246, 86256, - 86268, 86277, 86286, 86297, 86307, 86319, 86330, 86343, 86353, 86365, - 86374, 86385, 86396, 86409, 86419, 86429, 86439, 86449, 86459, 86468, - 86477, 86486, 86495, 86505, 86515, 86525, 86535, 86545, 86555, 86565, - 86575, 86585, 86595, 86605, 86615, 86624, 86633, 86642, 86652, 86662, - 86672, 86682, 86692, 86703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 86713, 86728, 86743, 86749, 86755, 86761, 86767, 86773, 86779, 86785, - 86791, 86799, 86803, 86806, 0, 0, 86814, 86817, 86820, 86823, 86826, - 86829, 86832, 86835, 86838, 86841, 86844, 86847, 86850, 86853, 86856, - 86859, 86862, 86870, 86879, 86890, 86898, 86906, 86915, 86924, 86935, - 86947, 0, 0, 0, 0, 0, 0, 86956, 86961, 86966, 86973, 86980, 86986, 86992, - 86997, 87002, 87007, 87013, 87019, 87025, 87031, 0, 0, 87037, 87047, - 87057, 87067, 87076, 87087, 87096, 87105, 87115, 87125, 87137, 87149, - 87160, 87171, 87182, 87193, 87203, 87213, 87223, 87233, 87244, 87255, - 87259, 87264, 87273, 87282, 87286, 87290, 87294, 87299, 87304, 87309, - 87314, 87317, 87321, 0, 87326, 87329, 87332, 87336, 87340, 87345, 87349, - 87353, 87358, 87363, 87370, 87377, 87380, 87383, 87386, 87389, 87392, - 87396, 87400, 0, 87404, 87409, 87413, 87417, 0, 0, 0, 0, 87422, 87427, - 87434, 87439, 87444, 0, 87449, 87454, 87459, 87464, 87469, 87474, 87479, - 87484, 87489, 87494, 87499, 87505, 87514, 87523, 87532, 87541, 87551, - 87561, 87571, 87581, 87590, 87599, 87608, 87617, 87622, 87627, 87633, - 87639, 87645, 87651, 87659, 87667, 87673, 87679, 87685, 87691, 87697, - 87703, 87709, 87715, 87720, 87725, 87730, 87735, 87740, 87745, 87750, - 87755, 87761, 87767, 87773, 87779, 87785, 87791, 87797, 87803, 87809, - 87815, 87821, 87827, 87833, 87839, 87845, 87851, 87857, 87863, 87869, - 87875, 87881, 87887, 87893, 87899, 87905, 87911, 87917, 87923, 87929, - 87935, 87941, 87947, 87953, 87959, 87965, 87971, 87977, 87983, 87989, - 87995, 88001, 88007, 88013, 88019, 88025, 88031, 88037, 88043, 88049, - 88055, 88061, 88067, 88073, 88079, 88085, 88091, 88097, 88103, 88109, - 88115, 88120, 88125, 88130, 88135, 88141, 88147, 88153, 88159, 88165, - 88171, 88177, 88183, 88189, 88195, 88202, 88209, 88214, 88219, 88224, - 88229, 88241, 88253, 88265, 88277, 88290, 88303, 88311, 0, 0, 88319, 0, - 88327, 88331, 88335, 88338, 88342, 88346, 88349, 88352, 88356, 88360, - 88363, 88366, 88369, 88372, 88377, 88380, 88384, 88387, 88390, 88393, - 88396, 88399, 88402, 88405, 88408, 88411, 88414, 88417, 88421, 88425, - 88429, 88433, 88438, 88443, 88449, 88455, 88461, 88466, 88472, 88478, - 88484, 88489, 88495, 88501, 88506, 88512, 88518, 88523, 88529, 88535, - 88540, 88545, 88551, 88556, 88562, 88568, 88574, 88580, 88586, 88590, - 88595, 88599, 88604, 88608, 88613, 88618, 88624, 88630, 88636, 88641, - 88647, 88653, 88659, 88664, 88670, 88676, 88681, 88687, 88693, 88698, - 88704, 88710, 88715, 88720, 88726, 88731, 88737, 88743, 88749, 88755, - 88761, 88766, 88770, 88775, 88778, 88783, 88788, 88794, 88799, 88804, - 88808, 88814, 88819, 88824, 88829, 88834, 88839, 88844, 88849, 88855, - 88861, 88867, 88875, 88879, 88883, 88887, 88891, 88895, 88899, 88904, - 88909, 88914, 88919, 88924, 88929, 88934, 88939, 88944, 88949, 88954, - 88959, 88964, 88968, 88972, 88977, 88982, 88987, 88992, 88996, 89001, - 89006, 89011, 89016, 89020, 89025, 89030, 89035, 89040, 89044, 89049, - 89054, 89059, 89064, 89069, 89074, 89079, 89084, 89089, 89096, 89103, - 89107, 89112, 89117, 89122, 89127, 89132, 89137, 89142, 89147, 89152, - 89157, 89162, 89167, 89172, 89177, 89182, 89187, 89192, 89197, 89202, - 89207, 89212, 89217, 89222, 89227, 89232, 89237, 89242, 89247, 89252, 0, - 0, 0, 89257, 89261, 89266, 89270, 89275, 89280, 0, 0, 89284, 89289, - 89294, 89298, 89303, 89308, 0, 0, 89313, 89318, 89322, 89327, 89332, - 89337, 0, 0, 89342, 89347, 89352, 0, 0, 0, 89356, 89360, 89364, 89368, - 89371, 89375, 89379, 0, 89383, 89389, 89392, 89395, 89398, 89401, 89405, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89409, 89415, 89421, 89427, 89433, 0, 0, - 89437, 89443, 89449, 89455, 89461, 89467, 89474, 89481, 89488, 89495, - 89502, 89509, 0, 89516, 89523, 89530, 89536, 89543, 89550, 89557, 89564, - 89570, 89577, 89584, 89591, 89598, 89604, 89611, 89618, 89625, 89632, - 89638, 89645, 89652, 89659, 89666, 89673, 89680, 89687, 0, 89694, 89701, - 89708, 89715, 89722, 89729, 89736, 89743, 89750, 89757, 89764, 89771, - 89778, 89785, 89791, 89798, 89805, 89812, 89819, 0, 89826, 89833, 0, - 89840, 89847, 89854, 89861, 89868, 89875, 89882, 89889, 89896, 89903, - 89910, 89917, 89924, 89931, 89938, 0, 0, 89944, 89949, 89954, 89959, - 89964, 89969, 89974, 89979, 89984, 89989, 89994, 89999, 90004, 90009, 0, + 0, 0, 96361, 96366, 96371, 96376, 96381, 96386, 96391, 96396, 96401, + 96406, 96411, 96416, 96421, 96426, 96431, 96436, 96441, 96446, 96451, + 96456, 96461, 96466, 96471, 96476, 96481, 96486, 96491, 96496, 96501, + 96506, 96511, 96516, 96521, 96526, 96531, 96536, 96541, 96546, 96551, + 96556, 96561, 96566, 96571, 96576, 96581, 96586, 96591, 96596, 96601, + 96606, 96611, 96616, 96621, 96626, 96631, 96636, 96641, 96646, 96651, + 96656, 96661, 96666, 96671, 96676, 96681, 96686, 96691, 96696, 96701, + 96706, 96711, 96716, 96721, 96726, 96731, 96736, 96741, 96746, 96751, + 96756, 96761, 96766, 96771, 96776, 96781, 96786, 96791, 96796, 96801, + 96806, 96811, 96816, 96821, 96826, 96831, 96836, 96841, 96846, 96851, + 96856, 96861, 96866, 96871, 96876, 96881, 96886, 96891, 96896, 96901, + 96906, 96911, 96916, 96921, 96926, 96931, 96936, 96941, 96946, 96951, + 96956, 96961, 96966, 96971, 96976, 96981, 96986, 96991, 96996, 97001, + 97006, 97011, 97016, 97021, 97026, 97031, 97036, 97041, 97046, 97051, + 97056, 97061, 97066, 97071, 97076, 97081, 97086, 97091, 97096, 97101, + 97106, 97111, 97116, 97121, 97126, 97131, 97136, 97141, 97146, 97151, + 97156, 97161, 97166, 97171, 97176, 97181, 97186, 97191, 97196, 97201, + 97206, 97211, 97216, 97221, 97226, 97231, 97236, 97241, 97246, 97251, + 97256, 97261, 97266, 97271, 97276, 97281, 97286, 97291, 97296, 97301, + 97306, 97311, 97316, 97321, 97326, 97331, 97336, 97341, 97346, 97351, + 97356, 97361, 97366, 97371, 97376, 97381, 97386, 97391, 97396, 97401, + 97406, 97411, 97416, 97421, 97426, 97431, 97436, 97441, 97446, 97451, + 97456, 97461, 97466, 97471, 97476, 97481, 97486, 97491, 97496, 97501, + 97506, 97511, 97516, 97521, 97526, 97531, 97536, 97541, 97546, 97551, + 97556, 97561, 97566, 97571, 97576, 97581, 97586, 97591, 97596, 97601, + 97606, 97611, 97616, 97621, 97626, 97631, 97636, 97641, 97646, 97651, + 97656, 97661, 97666, 97671, 97676, 97681, 97686, 97691, 97696, 97701, + 97706, 97711, 97716, 97721, 97726, 97731, 97736, 97741, 97746, 97751, + 97756, 97761, 97766, 97771, 97776, 97781, 97786, 97791, 97796, 97801, + 97806, 97811, 97816, 97821, 97826, 97831, 97836, 97841, 97846, 97851, + 97856, 97861, 97866, 97871, 97876, 97881, 97886, 97891, 97896, 97901, + 97906, 97911, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97916, 97922, 97929, 97936, + 97942, 97949, 97956, 97963, 97970, 97976, 97983, 97990, 97997, 98004, + 98011, 98018, 98025, 98032, 98039, 98046, 98053, 98060, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 98067, 98072, 98077, 98082, 98087, 98092, 98097, 98102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90014, 90021, 90028, 90035, 90042, 90049, - 90056, 90063, 90070, 90077, 90084, 90091, 90098, 90105, 90112, 90119, - 90126, 90133, 90140, 90147, 90155, 90163, 90170, 90177, 90182, 90190, - 90198, 90205, 90212, 90217, 90224, 90229, 90234, 90241, 90246, 90251, - 90256, 90264, 90269, 90274, 90281, 90286, 90291, 90298, 90305, 90310, - 90315, 90320, 90325, 90330, 90335, 90340, 90345, 90350, 90357, 90362, - 90369, 90374, 90379, 90384, 90389, 90394, 90399, 90404, 90409, 90414, - 90419, 90424, 90431, 90438, 90445, 90452, 90458, 90463, 90470, 90475, - 90480, 90489, 90496, 90505, 90512, 90517, 90522, 90530, 90535, 90540, - 90545, 90550, 90555, 90562, 90567, 90572, 90577, 90582, 90587, 90594, - 90601, 90608, 90615, 90622, 90629, 90636, 90643, 90650, 90657, 90664, - 90671, 90678, 90685, 90692, 90699, 90706, 90713, 90720, 90727, 90734, - 90741, 90748, 90755, 90762, 90769, 90776, 90783, 0, 0, 0, 0, 0, 90790, - 90798, 90806, 0, 0, 0, 0, 90811, 90815, 90819, 90823, 90827, 90831, - 90835, 90839, 90843, 90847, 90852, 90857, 90862, 90867, 90872, 90877, - 90882, 90887, 90892, 90898, 90904, 90910, 90917, 90924, 90931, 90938, - 90945, 90952, 90958, 90964, 90970, 90977, 90984, 90991, 90998, 91005, - 91012, 91019, 91026, 91033, 91040, 91047, 91054, 91061, 91068, 0, 0, 0, - 91075, 91083, 91091, 91099, 91107, 91115, 91125, 91135, 91143, 91151, - 91159, 91167, 91175, 91181, 91188, 91197, 91206, 91215, 91224, 91233, - 91242, 91252, 91263, 91273, 91284, 91293, 91302, 91311, 91321, 91332, - 91342, 91353, 91364, 91373, 91381, 91387, 91393, 91399, 91405, 91413, - 91421, 91427, 91434, 91444, 91451, 91458, 91465, 91472, 91479, 91489, - 91496, 91503, 91511, 91519, 91528, 91537, 91546, 91555, 91564, 91572, - 91581, 91590, 91599, 91603, 91610, 91615, 91620, 91624, 91628, 91632, - 91636, 91641, 91646, 91652, 91658, 91662, 91668, 91672, 91676, 91680, - 91684, 91688, 91692, 91698, 91702, 91707, 0, 0, 0, 91711, 91716, 91721, - 91726, 91731, 91738, 91743, 91748, 91753, 91758, 91763, 91768, 0, 0, 0, - 0, 91773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 91779, 91786, 91795, 91804, 91811, 91818, 91825, 91832, 91839, - 91846, 91852, 91859, 91866, 91873, 91880, 91887, 91894, 91901, 91908, - 91917, 91924, 91931, 91938, 91945, 91952, 91959, 91966, 91973, 91982, - 91989, 91996, 92003, 92010, 92017, 92024, 92033, 92040, 92047, 92054, - 92061, 92070, 92077, 92084, 92091, 92099, 92108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 98107, 98111, 98115, 98119, 98123, 98127, 0, 0, 98132, + 0, 98137, 98141, 98146, 98151, 98156, 98161, 98166, 98171, 98176, 98181, + 98186, 98190, 98195, 98200, 98205, 98210, 98215, 98220, 98225, 98230, + 98235, 98239, 98244, 98249, 98254, 98259, 98264, 98269, 98274, 98279, + 98284, 98289, 98294, 98299, 98304, 98309, 98314, 98319, 98324, 98328, + 98333, 98338, 98343, 98348, 0, 98353, 98358, 0, 0, 0, 98363, 0, 0, 98368, + 98373, 98380, 98387, 98394, 98401, 98408, 98415, 98422, 98429, 98436, + 98443, 98450, 98457, 98464, 98471, 98478, 98485, 98492, 98499, 98506, + 98513, 98520, 0, 98527, 98534, 98540, 98546, 98552, 98559, 98566, 98574, + 98582, 98591, 98596, 98601, 98606, 98611, 98616, 98621, 98626, 98631, + 98636, 98641, 98646, 98651, 98656, 98662, 98667, 98672, 98677, 98682, + 98687, 98692, 98697, 98702, 98707, 98713, 98719, 98723, 98727, 98731, + 98735, 98739, 98744, 98749, 98755, 98760, 98766, 98771, 98776, 98781, + 98787, 98792, 98797, 98802, 98807, 98812, 98818, 98823, 98829, 98834, + 98840, 98845, 98851, 98856, 98862, 98867, 98872, 98877, 98882, 98887, + 98892, 98897, 98903, 98908, 0, 0, 0, 0, 0, 0, 0, 0, 98913, 98917, 98921, + 98925, 98929, 98935, 98939, 98944, 98949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 92117, 92121, 92125, 92130, 92135, 92140, 92145, 92149, 92154, - 92159, 92164, 92169, 92174, 92179, 92183, 92188, 92193, 92198, 92203, - 92207, 92212, 92217, 92221, 92225, 92230, 92235, 92240, 92245, 92250, 0, - 0, 0, 92255, 92259, 92264, 92269, 92273, 92278, 92282, 92287, 92292, - 92297, 92302, 92307, 92311, 92316, 92321, 92326, 92331, 92335, 92340, - 92344, 92349, 92354, 92359, 92364, 92369, 92374, 92378, 92382, 92387, - 92392, 92397, 92402, 92407, 92412, 92417, 92422, 92427, 92432, 92437, - 92442, 92447, 92452, 92457, 92462, 92467, 92472, 92477, 92482, 92487, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92492, 92498, 92503, 92508, - 92513, 92518, 92523, 92528, 92533, 92538, 92543, 92549, 92555, 92561, - 92567, 92573, 92579, 92585, 92591, 92597, 92604, 92611, 92618, 92626, - 92634, 92642, 92650, 92658, 0, 0, 0, 0, 92666, 92670, 92675, 92680, - 92685, 92689, 92694, 92699, 92704, 92709, 92713, 92717, 92722, 92727, - 92732, 92737, 92741, 92746, 92751, 92756, 92761, 92766, 92771, 92775, - 92780, 92785, 92790, 92795, 92800, 92805, 92810, 92815, 92820, 92825, - 92830, 92836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92842, 92847, 92852, - 92857, 92862, 92867, 92872, 92877, 92882, 92887, 92892, 92897, 92902, - 92907, 92912, 92917, 92922, 92927, 92932, 92937, 92942, 92947, 92952, - 92957, 92962, 92967, 92972, 0, 0, 0, 0, 0, 92979, 92985, 92991, 92997, - 93003, 93008, 93014, 93020, 93026, 93032, 93037, 93043, 93049, 93055, - 93061, 93067, 93073, 93079, 93085, 93091, 93096, 93102, 93108, 93114, - 93120, 93126, 93131, 93137, 93143, 93148, 93154, 93160, 93166, 93172, - 93178, 93184, 93190, 93195, 93201, 93208, 93215, 93222, 93229, 0, 0, 0, - 0, 0, 93236, 93241, 93246, 93251, 93256, 93261, 93266, 93271, 93276, - 93281, 93286, 93291, 93296, 93301, 93306, 93311, 93316, 93321, 93326, - 93331, 93336, 93341, 93346, 93351, 93356, 93361, 93366, 93370, 93374, - 93378, 0, 93383, 93389, 93394, 93399, 93404, 93409, 93415, 93421, 93427, - 93433, 93439, 93445, 93451, 93457, 93463, 93469, 93475, 93481, 93487, - 93492, 93498, 93504, 93509, 93515, 93520, 93526, 93532, 93537, 93543, - 93549, 93555, 93561, 93567, 93573, 93579, 93585, 93591, 0, 0, 0, 0, - 93596, 93602, 93608, 93614, 93620, 93626, 93632, 93638, 93644, 93651, - 93656, 93661, 93667, 93673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98955, 98960, 98965, 98970, + 98975, 98980, 98985, 98990, 98995, 99000, 99005, 99010, 99015, 99020, + 99025, 99030, 99035, 99040, 99045, 0, 99050, 99055, 0, 0, 0, 0, 0, 99060, + 99064, 99068, 99073, 99078, 99084, 99089, 99094, 99099, 99104, 99109, + 99114, 99119, 99124, 99129, 99134, 99139, 99144, 99149, 99154, 99159, + 99164, 99169, 99174, 99179, 99184, 99189, 99194, 99198, 99203, 99208, + 99214, 99218, 0, 0, 0, 99222, 99228, 99232, 99237, 99242, 99247, 99251, + 99256, 99260, 99265, 99270, 99274, 99279, 99284, 99288, 99292, 99297, + 99302, 99306, 99311, 99316, 99320, 99325, 99330, 99335, 99340, 99345, 0, + 0, 0, 0, 0, 99350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 93679, 93685, 93691, 93697, 93704, 93710, 93717, 93724, 93731, - 93738, 93746, 93753, 93761, 93767, 93773, 93779, 93785, 93791, 93797, - 93803, 93809, 93815, 93821, 93827, 93833, 93839, 93845, 93851, 93857, - 93863, 93869, 93875, 93881, 93887, 93893, 93899, 93905, 93911, 93917, - 93923, 93929, 93935, 93941, 93947, 93954, 93960, 93967, 93974, 93981, - 93988, 93996, 94003, 94011, 94017, 94023, 94029, 94035, 94041, 94047, - 94053, 94059, 94065, 94071, 94077, 94083, 94089, 94095, 94101, 94107, - 94113, 94119, 94125, 94131, 94137, 94143, 94149, 94155, 94161, 94167, - 94173, 94179, 94184, 94189, 94194, 94199, 94204, 94209, 94214, 94219, - 94224, 94229, 94234, 94239, 94244, 94249, 94254, 94259, 94264, 94269, - 94274, 94279, 94284, 94289, 94294, 94299, 94304, 94309, 94314, 94319, - 94324, 94329, 94334, 94339, 94344, 94349, 94354, 94359, 94364, 94369, - 94374, 94379, 94384, 94389, 94394, 94399, 94404, 94409, 94414, 94419, - 94424, 94429, 94434, 94439, 94444, 94449, 94454, 94459, 94464, 94469, - 94474, 94479, 94484, 94489, 94494, 94499, 94504, 94509, 94514, 94519, - 94523, 94527, 94531, 94535, 94539, 94543, 94547, 94552, 94557, 0, 0, - 94562, 94567, 94571, 94575, 94579, 94583, 94587, 94591, 94595, 94599, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99355, + 99360, 99365, 99370, 99375, 99380, 99386, 99392, 99398, 99403, 99408, + 99414, 99420, 99426, 99432, 99438, 99444, 99450, 99456, 99462, 99468, + 99474, 99480, 99485, 99491, 99497, 99503, 99509, 99515, 99520, 99526, + 99532, 99538, 99542, 99546, 99550, 99554, 99558, 99563, 99568, 99572, + 99576, 99581, 99586, 99591, 99596, 99601, 99606, 99611, 99618, 99623, + 99627, 99632, 99637, 99642, 99646, 0, 0, 0, 0, 99651, 99659, 99666, + 99672, 99678, 99682, 99686, 99690, 99694, 99698, 99702, 99707, 99711, + 99716, 99721, 99726, 99731, 99736, 99741, 99746, 0, 0, 99751, 99757, + 99763, 99769, 99776, 99783, 99790, 99797, 99804, 99811, 99817, 99823, + 99829, 99836, 99843, 99850, 99857, 99864, 99871, 99878, 99885, 99892, + 99899, 99906, 99913, 99920, 99927, 99934, 99942, 99950, 99958, 99967, + 99976, 99985, 99994, 100003, 100012, 100019, 100026, 100033, 100041, + 100049, 100057, 100065, 100073, 100081, 100089, 100093, 100098, 100103, + 0, 100109, 100114, 0, 0, 0, 0, 0, 100119, 100125, 100132, 100137, 100142, + 100146, 100151, 100156, 0, 100161, 100166, 100171, 0, 100176, 100181, + 100186, 100191, 100196, 100201, 100206, 100211, 100216, 100221, 100226, + 100231, 100235, 100240, 100245, 100250, 100254, 100258, 100263, 100268, + 100273, 100278, 100283, 100288, 100293, 100297, 100302, 0, 0, 0, 0, + 100307, 100313, 100318, 0, 0, 0, 0, 100323, 100327, 100331, 100335, + 100339, 100343, 100348, 100353, 100359, 0, 0, 0, 0, 0, 0, 0, 0, 100365, + 100371, 100378, 100384, 100391, 100397, 100403, 100409, 100416, 0, 0, 0, + 0, 0, 0, 0, 100422, 100430, 100438, 100446, 100454, 100462, 100470, + 100478, 100486, 100494, 100502, 100510, 100518, 100526, 100534, 100542, + 100550, 100558, 100566, 100574, 100582, 100590, 100598, 100606, 100614, + 100622, 100630, 100638, 100646, 100654, 100661, 100669, 100677, 100684, + 100691, 100698, 100705, 100712, 100719, 100726, 100733, 100740, 100747, + 100754, 100761, 100768, 100775, 100782, 100789, 100796, 100803, 100810, + 100817, 100824, 100831, 100838, 100845, 100852, 100859, 100866, 100873, + 100880, 100886, 100893, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100900, 100905, 100910, + 100915, 100920, 100925, 100930, 100935, 100940, 100945, 100950, 100955, + 100960, 100965, 100970, 100975, 100980, 100985, 100990, 100995, 101000, + 101005, 101010, 101015, 101020, 101025, 101030, 101035, 101040, 101045, + 101050, 101055, 101060, 101065, 101070, 101075, 101080, 101085, 101091, + 0, 0, 0, 0, 101097, 101101, 101105, 101110, 101115, 101121, 101127, + 101133, 101143, 101152, 101158, 101165, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 101173, 101177, 101182, 101187, 101192, 101197, 101202, 101207, 101212, + 101216, 101221, 101225, 101230, 101234, 101239, 101243, 101248, 101253, + 101258, 101263, 101268, 101273, 101278, 101283, 101288, 101293, 101298, + 101303, 101308, 101313, 101318, 101323, 101328, 101333, 101338, 101343, + 101348, 101353, 101358, 101363, 101368, 101373, 101378, 101383, 101388, + 101393, 101398, 101403, 101408, 101413, 101418, 101423, 101428, 101433, + 0, 0, 0, 101438, 101443, 101452, 101460, 101469, 101478, 101489, 101500, + 101507, 101514, 101521, 101528, 101535, 101542, 101549, 101556, 101563, + 101570, 101577, 101584, 101591, 101598, 101605, 101612, 101619, 101626, + 101633, 101640, 101647, 0, 0, 101654, 101660, 101666, 101672, 101678, + 101685, 101692, 101700, 101708, 101715, 101722, 101729, 101736, 101743, + 101750, 101757, 101764, 101771, 101778, 101785, 101792, 101799, 101806, + 101813, 101820, 101827, 101834, 0, 0, 0, 0, 0, 101841, 101847, 101853, + 101859, 101865, 101872, 101879, 101887, 101895, 101902, 101909, 101916, + 101923, 101930, 101937, 101944, 101951, 101958, 101965, 101972, 101979, + 101986, 101993, 102000, 102007, 102014, 0, 0, 0, 0, 0, 0, 0, 102021, + 102028, 102037, 102047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102057, + 102063, 102069, 102075, 102081, 102088, 102095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94603, 94607, 94612, 94617, 94622, - 94627, 94632, 94637, 94642, 94646, 94651, 94656, 94661, 94666, 94670, - 94675, 94680, 94685, 94690, 94695, 94700, 94704, 94709, 94713, 94718, - 94723, 94728, 94733, 94738, 94743, 94748, 94753, 94757, 94762, 94767, - 94772, 94777, 94782, 94787, 94792, 0, 0, 0, 0, 0, 0, 0, 0, 94797, 94804, - 94811, 94818, 94825, 94832, 94839, 94846, 94853, 94860, 94867, 94874, - 94881, 94888, 94895, 94902, 94909, 94916, 94923, 94930, 94937, 94944, - 94951, 94958, 94965, 94972, 94979, 94986, 94993, 95000, 95007, 95014, - 95021, 95028, 95035, 95042, 95049, 95056, 95063, 95070, 95077, 95084, - 95091, 95098, 95105, 95112, 95119, 95126, 95133, 95140, 95147, 95154, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 102103, 102110, 102117, 102125, 102132, 102139, 102146, 102153, 102161, + 102169, 102177, 102185, 102193, 102201, 102209, 102217, 102225, 102233, + 102241, 102249, 102257, 102265, 102273, 102281, 102289, 102297, 102305, + 102313, 102321, 102329, 102337, 102345, 102353, 102361, 102369, 102377, + 102385, 102393, 102401, 102409, 102417, 102425, 102433, 102441, 102449, + 102457, 102465, 102473, 102481, 102489, 102497, 102505, 102513, 102521, + 102529, 102537, 102545, 102553, 102561, 102569, 102577, 102585, 102593, + 102601, 102609, 102617, 102625, 102633, 102641, 102649, 102657, 102665, + 102673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 102681, 102686, 102692, 102698, 102704, + 102710, 102716, 102722, 102728, 102734, 102739, 102746, 102752, 102758, + 102764, 102770, 102776, 102781, 102787, 102793, 102799, 102805, 102811, + 102817, 102823, 102829, 102835, 102841, 102846, 102852, 102860, 102868, + 102874, 102880, 102886, 102892, 102900, 102906, 102912, 102918, 102924, + 102930, 102936, 102941, 102947, 102955, 102963, 102969, 102975, 102981, + 102988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102994, 102999, 103005, + 103011, 103017, 103023, 103029, 103035, 103041, 103047, 103052, 103059, + 103065, 103071, 103077, 103083, 103089, 103094, 103100, 103106, 103112, + 103118, 103124, 103130, 103136, 103142, 103148, 103154, 103159, 103165, + 103173, 103181, 103187, 103193, 103199, 103205, 103213, 103219, 103225, + 103231, 103237, 103243, 103249, 103254, 103260, 103268, 103276, 103282, + 103288, 103294, 103301, 0, 0, 0, 0, 0, 0, 0, 103307, 103311, 103315, + 103320, 103325, 103331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 103337, 103341, 103345, 103349, 103353, 103357, + 103361, 103366, 103370, 103375, 103380, 103385, 103390, 103395, 103400, + 103405, 103410, 103415, 103420, 103426, 103432, 103438, 103445, 103452, + 103459, 103466, 103473, 103480, 103487, 103494, 103501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95168, 95173, 95178, 95183, 95188, - 95193, 95198, 95203, 95208, 95213, 95218, 95223, 95228, 95233, 95238, - 95243, 95248, 95253, 95258, 95263, 95268, 95273, 95278, 95283, 95288, - 95293, 95298, 95303, 95308, 95313, 95318, 95323, 95328, 95333, 95338, - 95343, 95348, 95353, 95358, 95363, 95368, 95373, 95378, 95383, 95388, - 95393, 95398, 95403, 95408, 95413, 95418, 95423, 95428, 95433, 95438, - 95443, 95448, 95453, 95458, 95463, 95468, 95473, 95478, 95483, 95488, - 95493, 95498, 95503, 95508, 95513, 95518, 95523, 95528, 95533, 95538, - 95543, 95548, 95553, 95558, 95563, 95568, 95573, 95578, 95583, 95588, - 95593, 95598, 95603, 95608, 95613, 95618, 95623, 95628, 95633, 95638, - 95643, 95648, 95653, 95658, 95663, 95668, 95673, 95678, 95683, 95688, - 95693, 95698, 95703, 95708, 95713, 95718, 95723, 95728, 95733, 95738, - 95743, 95748, 95753, 95758, 95763, 95768, 95773, 95778, 95783, 95788, - 95793, 95798, 95803, 95808, 95813, 95818, 95823, 95828, 95833, 95838, - 95843, 95848, 95853, 95858, 95863, 95868, 95873, 95878, 95883, 95888, - 95893, 95898, 95903, 95908, 95913, 95918, 95923, 95928, 95933, 95938, - 95943, 95948, 95953, 95958, 95963, 95968, 95973, 95978, 95983, 95988, - 95993, 95998, 96003, 96008, 96013, 96018, 96023, 96028, 96033, 96038, - 96043, 96048, 96053, 96058, 96063, 96068, 96073, 96078, 96083, 96088, - 96093, 96098, 96103, 96108, 96113, 96118, 96123, 96128, 96133, 96138, - 96143, 96148, 96153, 96158, 96163, 96168, 96173, 96178, 96183, 96188, - 96193, 96198, 96203, 96208, 96213, 96218, 96223, 96228, 96233, 96238, - 96243, 96248, 96253, 96258, 96263, 96268, 96273, 96278, 96283, 96288, - 96293, 96298, 96303, 96308, 96313, 96318, 96323, 96328, 96333, 96338, - 96343, 96348, 96353, 96358, 96363, 96368, 96373, 96378, 96383, 96388, - 96393, 96398, 96403, 96408, 96413, 96418, 96423, 96428, 96433, 96438, - 96443, 96448, 96453, 96458, 96463, 96468, 96473, 96478, 96483, 96488, - 96493, 96498, 96503, 96508, 96513, 96518, 96523, 96528, 96533, 96538, - 96543, 96548, 96553, 96558, 96563, 96568, 96573, 96578, 96583, 96588, - 96593, 96598, 96603, 96608, 96613, 96618, 96623, 96628, 96633, 96638, - 96643, 96648, 96653, 96658, 96663, 96668, 96673, 96678, 96683, 96688, - 96693, 96698, 96703, 96708, 96713, 96718, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96723, 96729, 96736, 96743, 96749, 96756, 96763, 96770, 96777, 96783, - 96790, 96797, 96804, 96811, 96818, 96825, 96832, 96839, 96846, 96853, - 96860, 96867, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96874, 96879, 96884, 96889, - 96894, 96899, 96904, 96909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 103508, 103512, 103516, 103520, 103524, 103528, 103531, 103535, + 103538, 103542, 103545, 103549, 103553, 103558, 103562, 103567, 103570, + 103574, 103577, 103581, 103584, 103588, 103592, 103596, 103600, 103604, + 103608, 103612, 103616, 103620, 103624, 103628, 103632, 103636, 103640, + 103644, 103648, 103652, 103656, 103660, 103663, 103667, 103671, 103675, + 103678, 103681, 103685, 103689, 103693, 103697, 103701, 103705, 103708, + 103712, 103718, 103724, 103730, 103735, 103742, 103746, 103751, 103755, + 103760, 103765, 103771, 103776, 103782, 103786, 103791, 103795, 103800, + 103803, 103806, 103810, 103815, 103821, 103826, 103832, 0, 0, 0, 0, + 103837, 103840, 103843, 103846, 103849, 103852, 103855, 103859, 103862, + 103866, 103870, 103874, 103878, 103882, 103886, 103890, 103894, 103898, + 103902, 103907, 103912, 103916, 103919, 103922, 103925, 103928, 103931, + 103934, 103938, 103941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 103945, 103949, 103954, 103959, 103964, 103968, 103973, 103977, 103982, + 103986, 103991, 103995, 104000, 104004, 104009, 104013, 104018, 104023, + 104028, 104033, 104038, 104043, 104048, 104053, 104058, 104063, 104068, + 104073, 104078, 104083, 104088, 104093, 104098, 104103, 104108, 104113, + 104118, 104122, 104127, 104132, 104137, 104141, 104145, 104150, 104155, + 104160, 104165, 104170, 104175, 104179, 104185, 104190, 104196, 104201, + 104207, 104212, 104218, 104223, 104229, 104234, 104239, 104244, 104249, + 104253, 104258, 104264, 104268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 104273, 104280, 104287, 104294, 104301, 104308, 104315, 104322, 104329, + 104336, 104343, 104350, 104357, 104364, 104371, 104378, 104385, 104392, + 104399, 104406, 104413, 104420, 104427, 104434, 104441, 0, 0, 0, 0, 0, 0, + 0, 104448, 104455, 104461, 104467, 104473, 104479, 104485, 104491, + 104498, 104504, 0, 0, 0, 0, 0, 0, 104511, 104516, 104521, 104526, 104531, + 104535, 104539, 104543, 104548, 104553, 104558, 104563, 104568, 104573, + 104578, 104583, 104588, 104593, 104598, 104603, 104608, 104613, 104618, + 104623, 104628, 104633, 104638, 104643, 104648, 104653, 104658, 104663, + 104668, 104673, 104678, 104683, 104688, 104693, 104698, 104703, 104708, + 104713, 104719, 104724, 104730, 104735, 104741, 104746, 104752, 104758, + 104762, 104767, 104771, 0, 104775, 104780, 104784, 104788, 104792, + 104796, 104800, 104804, 104809, 104813, 104818, 104823, 104827, 104832, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104837, 104841, 104845, 104849, + 104853, 104857, 104861, 104866, 104871, 104876, 104881, 104886, 104891, + 104896, 104901, 104906, 104911, 104916, 104921, 104926, 104931, 104936, + 104941, 104946, 104951, 104955, 104960, 104965, 104970, 104974, 104979, + 104984, 104989, 104994, 104998, 105003, 105008, 105013, 105018, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 105023, 105027, 105031, 105035, 105038, 105042, 105045, + 105049, 105052, 105056, 105060, 105065, 105069, 105074, 105077, 105081, + 105084, 105088, 105091, 105095, 105099, 105103, 105107, 105111, 105115, + 105119, 105123, 105127, 105131, 105135, 105139, 105143, 105147, 105151, + 105155, 105159, 105163, 105167, 105170, 105174, 105178, 105182, 105185, + 105188, 105192, 105196, 105200, 105204, 105208, 105212, 105216, 105219, + 105224, 105228, 105233, 105237, 105242, 105247, 105253, 105258, 105264, + 105268, 105273, 105277, 105282, 105286, 105290, 105294, 105298, 105301, + 105304, 105308, 105312, 105315, 105319, 105323, 105327, 105334, 0, 0, + 105338, 105342, 105345, 105348, 105351, 105354, 105357, 105360, 105364, + 105367, 105371, 105374, 105378, 105381, 105385, 105390, 0, 105395, + 105400, 105405, 105410, 105415, 105420, 105425, 105431, 105436, 105442, + 105448, 105454, 105460, 105466, 105472, 105478, 105484, 105490, 105496, + 105503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105510, 105514, 105519, 105523, + 105527, 105531, 105536, 105540, 105545, 105549, 105554, 105559, 105564, + 105569, 105574, 105579, 105584, 105589, 0, 105594, 105599, 105604, + 105609, 105614, 105619, 105624, 105629, 105634, 105639, 105644, 105649, + 105654, 105658, 105663, 105668, 105673, 105678, 105682, 105686, 105691, + 105696, 105701, 105706, 105710, 105715, 105721, 105726, 105732, 105737, + 105742, 105748, 105753, 105759, 105764, 105769, 105774, 105779, 105783, + 105788, 105794, 105799, 105805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96914, 96918, 96922, - 96926, 96930, 96934, 0, 0, 96939, 0, 96944, 96948, 96953, 96958, 96963, - 96968, 96973, 96978, 96983, 96988, 96993, 96997, 97002, 97007, 97012, - 97017, 97021, 97026, 97031, 97036, 97041, 97045, 97050, 97055, 97060, - 97065, 97070, 97075, 97080, 97085, 97090, 97095, 97100, 97105, 97110, - 97115, 97120, 97125, 97130, 97134, 97139, 97144, 97149, 97154, 0, 97159, - 97164, 0, 0, 0, 97169, 0, 0, 97174, 97179, 97186, 97193, 97200, 97207, - 97214, 97221, 97228, 97235, 97242, 97249, 97256, 97263, 97270, 97277, - 97284, 97291, 97298, 97305, 97312, 97319, 97326, 0, 97333, 97340, 97346, - 97352, 97358, 97365, 97372, 97380, 97388, 97397, 97402, 97407, 97412, - 97417, 97422, 97427, 97432, 97437, 97442, 97447, 97452, 97457, 97462, - 97468, 97473, 97478, 97483, 97488, 97493, 97498, 97503, 97508, 97513, - 97519, 97525, 97529, 97533, 97537, 97541, 97545, 97550, 97555, 97561, - 97566, 97572, 97577, 97582, 97587, 97593, 97598, 97603, 97608, 97613, - 97618, 97624, 97629, 97635, 97640, 97646, 97651, 97657, 97662, 97668, - 97673, 97678, 97683, 97688, 97693, 97698, 97703, 97709, 97714, 0, 0, 0, - 0, 0, 0, 0, 0, 97719, 97723, 97727, 97731, 97735, 97741, 97745, 97750, - 97755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 105810, 105814, 105818, 105822, 105826, 105830, 105835, 0, + 105840, 0, 105845, 105850, 105855, 105860, 0, 105865, 105870, 105875, + 105880, 105885, 105890, 105895, 105900, 105905, 105910, 105915, 105920, + 105925, 105929, 105934, 0, 105939, 105944, 105948, 105952, 105957, + 105962, 105967, 105972, 105976, 105981, 105986, 0, 0, 0, 0, 0, 0, 105991, + 105995, 106000, 106004, 106009, 106013, 106018, 106022, 106027, 106031, + 106036, 106040, 106045, 106050, 106055, 106060, 106065, 106070, 106075, + 106080, 106085, 106090, 106095, 106100, 106105, 106110, 106115, 106120, + 106125, 106130, 106135, 106140, 106145, 106150, 106155, 106159, 106164, + 106169, 106174, 106179, 106183, 106187, 106192, 106197, 106202, 106207, + 106212, 106216, 106221, 106227, 106232, 106238, 106243, 106249, 106254, + 106260, 106265, 106271, 106276, 0, 0, 0, 0, 0, 106281, 106286, 106290, + 106294, 106298, 106302, 106306, 106310, 106315, 106319, 0, 0, 0, 0, 0, 0, + 106324, 106331, 106336, 106341, 0, 106346, 106350, 106355, 106359, + 106364, 106368, 106373, 106378, 0, 0, 106383, 106388, 0, 0, 106393, + 106398, 106403, 106407, 106412, 106417, 106422, 106427, 106432, 106437, + 106442, 106447, 106452, 106457, 106462, 106467, 106472, 106477, 106482, + 106487, 106492, 106497, 0, 106502, 106506, 106511, 106516, 106521, + 106525, 106529, 0, 106534, 106539, 0, 106544, 106549, 106554, 106559, + 106564, 0, 0, 106568, 106573, 106578, 106584, 106589, 106595, 106600, + 106606, 106612, 0, 0, 106619, 106625, 0, 0, 106631, 106637, 106643, 0, 0, + 106648, 0, 0, 0, 0, 0, 0, 106652, 0, 0, 0, 0, 0, 106659, 106664, 106671, + 106679, 106685, 106691, 106697, 0, 0, 106704, 106710, 106715, 106720, + 106725, 106730, 106735, 0, 0, 0, 106740, 106745, 106750, 106756, 106762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97761, 97766, 97771, 97776, 97781, 97786, - 97791, 97796, 97801, 97806, 97811, 97816, 97821, 97826, 97831, 97836, - 97841, 97846, 97851, 97856, 97861, 97866, 97871, 97875, 97880, 97885, - 97891, 97895, 0, 0, 0, 97899, 97905, 97909, 97914, 97919, 97924, 97928, - 97933, 97937, 97942, 97947, 97951, 97956, 97961, 97965, 97969, 97974, - 97979, 97983, 97988, 97993, 97997, 98002, 98007, 98012, 98017, 98022, 0, - 0, 0, 0, 0, 98027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98032, - 98038, 98044, 98050, 98056, 98062, 98069, 98076, 98083, 98089, 98095, - 98101, 98108, 98115, 98122, 98129, 98136, 98143, 98150, 98157, 98164, - 98171, 98178, 98184, 98191, 98198, 98205, 98212, 98219, 98225, 98232, - 98239, 98246, 98252, 98258, 98264, 98270, 98276, 98283, 98290, 98296, - 98302, 98308, 98315, 98322, 98329, 98336, 98343, 98350, 98359, 98366, - 98372, 98379, 98386, 98393, 98399, 0, 0, 0, 0, 0, 0, 98406, 98414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98422, 98426, 98431, 98436, 0, - 98442, 98447, 0, 0, 0, 0, 0, 98452, 98458, 98465, 98470, 98475, 98479, - 98484, 98489, 0, 98494, 98499, 98504, 0, 98509, 98514, 98519, 98524, - 98529, 98534, 98539, 98544, 98549, 98554, 98559, 98563, 98567, 98572, - 98577, 98582, 98586, 98590, 98595, 98600, 98605, 98610, 98615, 98620, - 98625, 98629, 98634, 0, 0, 0, 0, 98639, 98645, 98650, 0, 0, 0, 0, 98655, - 98659, 98663, 98667, 98671, 98675, 98680, 98685, 98691, 0, 0, 0, 0, 0, 0, - 0, 0, 98697, 98703, 98710, 98716, 98723, 98729, 98735, 98741, 98748, 0, - 0, 0, 0, 0, 0, 0, 98754, 98761, 98768, 98775, 98782, 98789, 98796, 98803, - 98810, 98817, 98824, 98831, 98838, 98845, 98852, 98859, 98866, 98873, - 98880, 98887, 98894, 98901, 98908, 98915, 98922, 98929, 98936, 98943, - 98950, 98957, 98963, 98970, 98977, 98984, 98991, 98998, 99005, 99012, - 99019, 99026, 99033, 99040, 99047, 99054, 99061, 99068, 99075, 99082, - 99089, 99096, 99103, 99110, 99117, 99124, 99131, 99138, 99145, 99152, - 99159, 99166, 99173, 99180, 99186, 99193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99200, - 99205, 99210, 99215, 99220, 99225, 99230, 99235, 99240, 99245, 99250, - 99255, 99260, 99265, 99270, 99275, 99280, 99285, 99290, 99295, 99300, - 99305, 99310, 99315, 99320, 99325, 99330, 99335, 99340, 99345, 99350, - 99355, 99360, 99365, 99370, 99375, 99380, 99385, 99391, 0, 0, 0, 0, - 99397, 99401, 99405, 99410, 99415, 99421, 99427, 99433, 99443, 99452, - 99458, 99465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99473, 99477, 99482, 99487, - 99492, 99497, 99502, 99507, 99512, 99516, 99521, 99525, 99530, 99534, - 99539, 99543, 99548, 99553, 99558, 99563, 99568, 99573, 99578, 99583, - 99588, 99593, 99598, 99603, 99608, 99613, 99618, 99623, 99628, 99633, - 99638, 99643, 99648, 99653, 99658, 99663, 99668, 99673, 99678, 99683, - 99688, 99693, 99698, 99703, 99708, 99713, 99718, 99723, 99728, 99733, 0, - 0, 0, 99738, 99743, 99752, 99760, 99769, 99778, 99789, 99800, 99807, - 99814, 99821, 99828, 99835, 99842, 99849, 99856, 99863, 99870, 99877, - 99884, 99891, 99898, 99905, 99912, 99919, 99926, 99933, 99940, 99947, 0, - 0, 99954, 99960, 99966, 99972, 99978, 99985, 99992, 100000, 100008, - 100015, 100022, 100029, 100036, 100043, 100050, 100057, 100064, 100071, - 100078, 100085, 100092, 100099, 100106, 100113, 100120, 100127, 100134, - 0, 0, 0, 0, 0, 100141, 100147, 100153, 100159, 100165, 100172, 100179, - 100187, 100195, 100202, 100209, 100216, 100223, 100230, 100237, 100244, - 100251, 100258, 100265, 100272, 100279, 100286, 100293, 100300, 100307, - 100314, 0, 0, 0, 0, 0, 0, 0, 100321, 100328, 100336, 100346, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 100356, 100362, 100368, 100374, 100380, 100387, - 100394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100402, 100409, 100416, 100424, 100431, - 100438, 100445, 100452, 100460, 100468, 100476, 100484, 100492, 100500, - 100508, 100516, 100524, 100532, 100540, 100548, 100556, 100564, 100572, - 100580, 100588, 100596, 100604, 100612, 100620, 100628, 100636, 100644, - 100652, 100660, 100668, 100676, 100684, 100692, 100700, 100708, 100716, - 100724, 100732, 100740, 100748, 100756, 100764, 100772, 100780, 100788, - 100796, 100804, 100812, 100820, 100828, 100836, 100844, 100852, 100860, - 100868, 100876, 100884, 100892, 100900, 100908, 100916, 100924, 100932, - 100940, 100948, 100956, 100964, 100972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 106767, 106771, 106775, 106780, 106784, 106789, 106793, 106798, + 106803, 106809, 106814, 106820, 106824, 106829, 106833, 106838, 106842, + 106847, 106852, 106857, 106862, 106867, 106872, 106877, 106882, 106887, + 106892, 106897, 106902, 106907, 106912, 106917, 106922, 106927, 106932, + 106937, 106941, 106946, 106951, 106956, 106960, 106964, 106969, 106974, + 106979, 106984, 106989, 106994, 106998, 107004, 107009, 107015, 107020, + 107026, 107032, 107039, 107045, 107052, 107057, 107064, 107070, 107075, + 107082, 107088, 107093, 107098, 107103, 107108, 107113, 107118, 107122, + 107127, 0, 0, 0, 0, 0, 0, 0, 0, 107131, 107136, 107140, 107144, 107148, + 107152, 107156, 107160, 107165, 107169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 100980, 100984, 100988, 100992, 100996, 101000, 101004, - 101008, 101012, 101016, 101021, 101026, 101031, 101036, 101041, 101046, - 101051, 101056, 101061, 101067, 101073, 101079, 101086, 101093, 101100, - 101107, 101114, 101121, 101128, 101135, 101142, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107174, 107177, 107181, 107184, 107188, + 107191, 107195, 107199, 107204, 107208, 107213, 107216, 107220, 107223, + 107227, 107230, 107234, 107238, 107242, 107246, 107250, 107254, 107258, + 107262, 107266, 107270, 107274, 107278, 107282, 107286, 107290, 107294, + 107298, 107302, 107306, 107309, 107313, 107317, 107321, 107324, 107327, + 107331, 107335, 107339, 107343, 107347, 107351, 107354, 107359, 107363, + 107368, 107372, 107377, 107382, 0, 0, 107388, 107392, 107397, 107401, + 107406, 107410, 107414, 107418, 107422, 107426, 107430, 107433, 107437, + 107442, 107446, 107451, 107456, 107461, 107468, 107480, 107492, 107504, + 107517, 107531, 107538, 107548, 107556, 107565, 107574, 107583, 107593, + 107604, 107616, 107623, 107630, 107638, 107643, 107649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 107656, 107660, 107665, 107669, 107674, 107678, 107683, + 107688, 107694, 107699, 107705, 107709, 107714, 107718, 107723, 107727, + 107732, 107737, 107742, 107747, 107752, 107757, 107762, 107767, 107772, + 107777, 107782, 107787, 107792, 107797, 107802, 107807, 107812, 107817, + 107822, 107826, 107831, 107836, 107841, 107845, 107849, 107854, 107859, + 107864, 107869, 107874, 107879, 107883, 107888, 107894, 107899, 107905, + 107910, 107916, 107922, 107929, 107935, 107942, 107947, 107953, 107958, + 107964, 107969, 107974, 107979, 107984, 107988, 107993, 107998, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 108003, 108008, 108012, 108016, 108020, 108024, + 108028, 108032, 108037, 108041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 108046, 108050, 108055, 108059, 108064, 108068, 108073, 108077, 108082, + 108086, 108091, 108095, 108100, 108105, 108110, 108115, 108120, 108125, + 108130, 108135, 108140, 108145, 108150, 108155, 108160, 108165, 108170, + 108175, 108180, 108185, 108190, 108194, 108199, 108204, 108209, 108213, + 108217, 108222, 108227, 108232, 108237, 108242, 108246, 108251, 108256, + 108261, 108267, 108272, 108278, 108283, 108289, 108294, 108300, 108305, + 108311, 108316, 0, 0, 0, 0, 0, 0, 0, 0, 108321, 108326, 108330, 108334, + 108338, 108342, 108346, 108350, 108355, 108359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108364, + 108368, 108373, 108378, 108383, 108388, 108395, 108399, 108404, 108409, + 108413, 108418, 108423, 108428, 108433, 108438, 108443, 108448, 108452, + 108456, 108461, 108466, 108471, 108478, 108483, 108488, 0, 0, 0, 108493, + 108500, 108507, 108516, 108521, 108527, 108532, 108538, 108543, 108549, + 108554, 108560, 108565, 108571, 108577, 0, 0, 0, 0, 108582, 108587, + 108591, 108595, 108599, 108603, 108607, 108611, 108616, 108620, 108625, + 108630, 108635, 108641, 108646, 108651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 101149, 101153, 101157, 101161, 101165, 101169, 101172, 101176, - 101179, 101183, 101186, 101190, 101194, 101199, 101203, 101208, 101211, - 101215, 101218, 101222, 101225, 101229, 101233, 101237, 101241, 101245, - 101249, 101253, 101257, 101261, 101265, 101269, 101273, 101277, 101281, - 101285, 101289, 101293, 101297, 101300, 101303, 101307, 101311, 101315, - 101318, 101321, 101325, 101329, 101333, 101337, 101341, 101345, 101348, - 101352, 101358, 101364, 101370, 101375, 101382, 101386, 101391, 101395, - 101400, 101405, 101411, 101416, 101422, 101426, 101431, 101435, 101440, - 101443, 101446, 101450, 101455, 101461, 101466, 101472, 0, 0, 0, 0, - 101477, 101480, 101483, 101486, 101489, 101492, 101495, 101498, 101501, - 101504, 101508, 101512, 101516, 101520, 101524, 101528, 101532, 101536, - 101540, 101545, 101550, 101554, 101557, 101560, 101563, 101566, 101569, - 101572, 101575, 101578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 101581, 101585, 101590, 101595, 101600, 101604, 101609, 101613, 101618, - 101622, 101627, 101631, 101636, 101640, 101645, 101649, 101654, 101659, - 101664, 101669, 101674, 101679, 101684, 101689, 101694, 101699, 101704, - 101709, 101714, 101719, 101724, 101729, 101734, 101739, 101744, 101749, - 101753, 101757, 101762, 101767, 101772, 101776, 101780, 101785, 101790, - 101795, 101800, 101805, 101810, 101814, 101820, 101825, 101831, 101836, - 101842, 101847, 101853, 101858, 101864, 101869, 101874, 101879, 101884, - 101888, 101893, 101899, 101903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 101908, 101915, 101922, 101929, 101936, 101943, 101950, 101957, 101964, - 101971, 101978, 101985, 101992, 101999, 102006, 102013, 102020, 102027, - 102034, 102041, 102048, 102055, 102062, 102069, 102076, 0, 0, 0, 0, 0, 0, - 0, 102083, 102090, 102096, 102102, 102108, 102114, 102120, 102126, - 102132, 102138, 0, 0, 0, 0, 0, 0, 102144, 102149, 102154, 102159, 102164, - 102168, 102172, 102176, 102181, 102186, 102191, 102196, 102201, 102206, - 102211, 102216, 102221, 102226, 102231, 102236, 102241, 102246, 102251, - 102256, 102261, 102266, 102271, 102276, 102281, 102286, 102291, 102296, - 102301, 102306, 102311, 102316, 102321, 102326, 102331, 102336, 102341, - 102346, 102352, 102357, 102363, 102368, 102374, 102379, 102385, 102391, - 102395, 102400, 102404, 0, 102408, 102413, 102417, 102421, 102425, - 102429, 102433, 102437, 102441, 102445, 102449, 102454, 102458, 102463, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102468, 102472, 102476, 102480, - 102484, 102488, 102492, 102497, 102502, 102507, 102512, 102517, 102522, - 102527, 102532, 102537, 102542, 102547, 102552, 102557, 102562, 102567, - 102572, 102577, 102581, 102585, 102590, 102595, 102600, 102604, 102609, - 102614, 102619, 102624, 102628, 102633, 102638, 102643, 102648, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 102653, 102657, 102661, 102665, 102668, 102672, 102675, - 102679, 102682, 102686, 102690, 102695, 102699, 102704, 102707, 102711, - 102714, 102718, 102721, 102725, 102729, 102733, 102737, 102741, 102745, - 102749, 102753, 102757, 102761, 102765, 102769, 102773, 102777, 102781, - 102785, 102789, 102793, 102796, 102799, 102803, 102807, 102811, 102814, - 102817, 102821, 102825, 102829, 102833, 102837, 102841, 102845, 102848, - 102853, 102857, 102862, 102866, 102871, 102876, 102882, 102887, 102893, - 102897, 102902, 102906, 102911, 102915, 102919, 102923, 102927, 102930, - 102933, 102937, 102941, 0, 0, 0, 0, 102944, 0, 0, 102948, 102952, 102955, - 102958, 102961, 102964, 102967, 102970, 102973, 102976, 102979, 0, 0, 0, - 0, 0, 0, 102982, 102987, 102992, 102997, 103002, 103007, 103012, 103017, - 103022, 103027, 103033, 103039, 103045, 103051, 103057, 103063, 103069, - 103075, 103081, 103088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103095, 103099, - 103104, 103108, 103112, 103116, 103121, 103125, 103130, 103134, 103139, - 103144, 103149, 103154, 103159, 103164, 103169, 103174, 0, 103179, - 103184, 103189, 103194, 103199, 103204, 103209, 103214, 103219, 103224, - 103229, 103234, 103238, 103242, 103247, 103252, 103257, 103262, 103266, - 103270, 103275, 103280, 103285, 103290, 103294, 103299, 103305, 103310, - 103316, 103321, 103326, 103332, 103337, 103343, 103348, 103353, 103358, - 103363, 103367, 103372, 103378, 103383, 103389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103394, 103398, 103403, 103407, 103412, - 103416, 103421, 103425, 103430, 103434, 103439, 103443, 103448, 103453, - 103458, 103463, 103468, 103473, 103478, 103483, 103488, 103493, 103498, - 103503, 103508, 103513, 103518, 103523, 103528, 103533, 103538, 103543, - 103548, 103553, 103557, 103561, 103566, 103571, 103576, 103581, 103585, - 103589, 103594, 103599, 103604, 103609, 103614, 103618, 103623, 103629, - 103634, 103640, 103645, 103651, 103656, 103662, 103667, 103673, 103678, - 0, 0, 0, 0, 0, 103683, 103688, 103692, 103696, 103700, 103704, 103708, - 103712, 103716, 103720, 0, 0, 0, 0, 0, 0, 0, 103724, 103729, 103734, 0, - 103739, 103743, 103748, 103752, 103757, 103761, 103766, 103771, 0, 0, - 103776, 103781, 0, 0, 103786, 103791, 103796, 103800, 103805, 103810, - 103815, 103820, 103825, 103830, 103835, 103840, 103845, 103850, 103855, - 103860, 103865, 103870, 103875, 103880, 103885, 103890, 0, 103894, - 103898, 103903, 103908, 103913, 103917, 103921, 0, 103926, 103931, 0, - 103936, 103941, 103946, 103951, 103956, 0, 0, 103960, 103965, 103970, - 103976, 103981, 103987, 103992, 103998, 104004, 0, 0, 104011, 104017, 0, - 0, 104023, 104029, 104035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104040, 0, 0, 0, 0, - 0, 104047, 104052, 104059, 104067, 104073, 104079, 104085, 0, 0, 104092, - 104098, 104103, 104108, 104113, 104118, 104123, 0, 0, 0, 104128, 104133, - 104138, 104143, 104149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17701,54 +18926,173 @@ static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 108656, 108664, 108671, 108679, 108687, 108694, 108702, + 108710, 108718, 108725, 108732, 108740, 108748, 108756, 108764, 108772, + 108780, 108788, 108796, 108804, 108812, 108820, 108828, 108836, 108844, + 108852, 108860, 108868, 108876, 108884, 108892, 108900, 108908, 108916, + 108923, 108931, 108939, 108946, 108954, 108962, 108970, 108977, 108984, + 108992, 109000, 109008, 109016, 109024, 109032, 109040, 109048, 109056, + 109064, 109072, 109080, 109088, 109096, 109104, 109112, 109120, 109128, + 109136, 109144, 109152, 109160, 109167, 109173, 109179, 109185, 109191, + 109197, 109203, 109210, 109216, 109223, 109230, 109237, 109244, 109251, + 109258, 109265, 109272, 109279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 109286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104154, 104158, 104162, 104167, 104171, - 104176, 104180, 104185, 104190, 104196, 104201, 104207, 104211, 104216, - 104220, 104225, 104229, 104234, 104239, 104244, 104249, 104254, 104259, - 104264, 104269, 104274, 104279, 104284, 104289, 104294, 104299, 104304, - 104309, 104314, 104319, 104323, 104327, 104332, 104337, 104342, 104346, - 104350, 104355, 104360, 104365, 104370, 104375, 104380, 104384, 104390, - 104395, 104401, 104406, 104412, 104418, 104425, 104431, 104438, 104443, - 104450, 104456, 104461, 104468, 104474, 104479, 104484, 104489, 104494, - 104499, 104504, 104508, 104513, 0, 0, 0, 0, 0, 0, 0, 0, 104517, 104522, - 104526, 104530, 104534, 104538, 104542, 104546, 104550, 104554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 109292, 109300, 109308, 109317, 109325, 109334, 109343, 109352, + 109361, 109369, 109378, 109387, 109396, 109405, 109414, 109423, 109432, + 109441, 109450, 109459, 109468, 109477, 109485, 109493, 109501, 109509, + 109517, 109526, 109535, 109545, 109555, 109565, 109575, 109585, 109594, + 109604, 109614, 109624, 109635, 109645, 109657, 109669, 109680, 109694, + 109705, 109715, 109727, 109738, 109748, 109760, 109772, 109783, 109794, + 109804, 109814, 109826, 109837, 0, 0, 0, 0, 0, 0, 0, 109849, 109852, + 109857, 109863, 109871, 109876, 109882, 109890, 109896, 109902, 109906, + 109910, 109917, 109926, 109933, 109942, 109948, 109957, 109964, 109971, + 109978, 109988, 109994, 109998, 110005, 110014, 110024, 110031, 110038, + 110042, 110046, 110053, 110063, 110067, 110074, 110081, 110088, 110094, + 110101, 110108, 110115, 110122, 110126, 110130, 110134, 110141, 110145, + 110152, 110159, 110173, 110182, 110186, 110190, 110194, 110201, 110205, + 110209, 110213, 110221, 110229, 110248, 110258, 110278, 110282, 110286, + 110290, 110294, 110298, 110302, 110306, 110313, 110317, 110320, 110324, + 110328, 110334, 110341, 110350, 110354, 110363, 110372, 110380, 110384, + 110391, 110395, 110399, 110403, 110407, 110418, 110427, 110436, 110445, + 110454, 110466, 110475, 110484, 110493, 110501, 110510, 110522, 110531, + 110540, 110549, 110561, 110570, 110579, 110591, 110600, 110609, 110621, + 110630, 110634, 110638, 110642, 110646, 110650, 110654, 110658, 110665, + 110669, 110673, 110684, 110688, 110692, 110699, 110705, 110711, 110715, + 110722, 110726, 110730, 110734, 110738, 110742, 110746, 110752, 110760, + 110764, 110768, 110771, 110777, 110787, 110791, 110803, 110810, 110817, + 110824, 110831, 110837, 110841, 110845, 110849, 110853, 110860, 110869, + 110876, 110884, 110892, 110898, 110902, 110906, 110910, 110914, 110920, + 110929, 110941, 110948, 110955, 110964, 110975, 110981, 110990, 110999, + 111006, 111015, 111022, 111029, 111039, 111046, 111053, 111060, 111067, + 111071, 111077, 111081, 111092, 111100, 111109, 111121, 111128, 111135, + 111145, 111152, 111162, 111169, 111179, 111186, 111193, 111203, 111210, + 111217, 111227, 111234, 111246, 111255, 111262, 111269, 111276, 111285, + 111295, 111308, 111315, 111325, 111335, 111342, 111351, 111364, 111371, + 111378, 111385, 111395, 111405, 111412, 111422, 111429, 111436, 111446, + 111452, 111459, 111466, 111473, 111483, 111490, 111497, 111504, 111510, + 111517, 111527, 111534, 111538, 111546, 111550, 111562, 111566, 111580, + 111584, 111588, 111592, 111596, 111602, 111609, 111617, 111621, 111625, + 111629, 111633, 111640, 111644, 111650, 111656, 111664, 111668, 111675, + 111683, 111687, 111691, 111697, 111701, 111710, 111719, 111726, 111736, + 111742, 111746, 111750, 111758, 111765, 111772, 111778, 111782, 111790, + 111794, 111801, 111813, 111820, 111830, 111836, 111840, 111849, 111856, + 111865, 111869, 111873, 111880, 111884, 111888, 111892, 111896, 111899, + 111905, 111911, 111915, 111919, 111926, 111933, 111940, 111947, 111954, + 111961, 111968, 111975, 111981, 111985, 111989, 111996, 112003, 112010, + 112017, 112024, 112028, 112031, 112036, 112040, 112044, 112053, 112062, + 112066, 112070, 112076, 112082, 112099, 112105, 112109, 112118, 112122, + 112126, 112133, 112141, 112149, 112155, 112159, 112163, 112167, 112171, + 112174, 112180, 112187, 112197, 112204, 112211, 112218, 112224, 112231, + 112238, 112245, 112252, 112259, 112268, 112275, 112287, 112294, 112301, + 112311, 112322, 112329, 112336, 112343, 112350, 112357, 112364, 112371, + 112378, 112385, 112392, 112402, 112412, 112422, 112429, 112439, 112446, + 112453, 112460, 112467, 112474, 112481, 112488, 112495, 112502, 112509, + 112516, 112523, 112530, 112536, 112543, 112550, 112559, 112566, 112573, + 112577, 112585, 112589, 112593, 112597, 112601, 112605, 112612, 112616, + 112625, 112629, 112636, 112644, 112648, 112652, 112656, 112669, 112685, + 112689, 112693, 112700, 112706, 112713, 112717, 112721, 112725, 112729, + 112733, 112740, 112744, 112762, 112766, 112770, 112777, 112781, 112785, + 112791, 112795, 112799, 112807, 112811, 112815, 112819, 112823, 112829, + 112840, 112849, 112858, 112865, 112872, 112883, 112890, 112897, 112904, + 112911, 112918, 112925, 112932, 112942, 112948, 112955, 112965, 112974, + 112981, 112990, 113000, 113007, 113014, 113021, 113028, 113040, 113047, + 113054, 113061, 113068, 113075, 113085, 113092, 113099, 113109, 113122, + 113134, 113141, 113151, 113158, 113165, 113172, 113187, 113193, 113201, + 113211, 113221, 113228, 113235, 113241, 113245, 113252, 113262, 113268, + 113281, 113285, 113289, 113296, 113300, 113307, 113317, 113321, 113325, + 113329, 113333, 113337, 113344, 113348, 113355, 113362, 113369, 113378, + 113387, 113397, 113404, 113411, 113418, 113428, 113435, 113445, 113452, + 113462, 113469, 113476, 113486, 113496, 113503, 113509, 113517, 113525, + 113531, 113537, 113541, 113545, 113552, 113560, 113566, 113570, 113574, + 113578, 113585, 113597, 113600, 113607, 113613, 113617, 113621, 113625, + 113629, 113633, 113637, 113641, 113645, 113649, 113653, 113660, 113664, + 113670, 113674, 113678, 113682, 113688, 113695, 113702, 113709, 113721, + 113729, 113733, 113739, 113748, 113755, 113761, 113765, 113769, 113773, + 113779, 113788, 113796, 113800, 113806, 113810, 113814, 113818, 113824, + 113831, 113837, 113841, 113847, 113851, 113855, 113864, 113876, 113880, + 113887, 113894, 113904, 113911, 113923, 113930, 113937, 113944, 113955, + 113965, 113978, 113988, 113995, 113999, 114003, 114007, 114011, 114020, + 114029, 114038, 114055, 114064, 114070, 114077, 114085, 114098, 114102, + 114111, 114120, 114129, 114138, 114149, 114158, 114167, 114176, 114185, + 114194, 114203, 114213, 114216, 114220, 114224, 114228, 114232, 114236, + 114242, 114249, 114256, 114263, 114269, 114275, 114282, 114288, 114295, + 114303, 114307, 114314, 114321, 114328, 114336, 114340, 114344, 114348, + 114352, 114356, 114362, 114366, 114372, 114379, 114386, 114392, 114399, + 114406, 114413, 114420, 114427, 114434, 114441, 114448, 114455, 114462, + 114469, 114476, 114483, 114490, 114496, 114500, 114509, 114513, 114517, + 114521, 114525, 114531, 114538, 114545, 114552, 114559, 114566, 114572, + 114580, 114584, 114588, 114592, 114596, 114602, 114619, 114636, 114640, + 114644, 114648, 114652, 114656, 114660, 114666, 114673, 114677, 114683, + 114690, 114697, 114704, 114711, 114718, 114727, 114734, 114741, 114748, + 114755, 114759, 114763, 114769, 114781, 114785, 114789, 114798, 114802, + 114806, 114810, 114816, 114820, 114824, 114833, 114837, 114841, 114845, + 114852, 114856, 114860, 114864, 114868, 114872, 114876, 114880, 114884, + 114890, 114897, 114904, 114910, 114914, 114931, 114937, 114941, 114947, + 114953, 114959, 114965, 114971, 114977, 114981, 114985, 114989, 114995, + 114999, 115005, 115009, 115013, 115020, 115027, 115044, 115048, 115052, + 115056, 115060, 115064, 115076, 115079, 115084, 115089, 115104, 115114, + 115126, 115130, 115134, 115138, 115144, 115151, 115158, 115168, 115180, + 115186, 115192, 115201, 115205, 115209, 115216, 115226, 115233, 115239, + 115243, 115247, 115254, 115260, 115264, 115270, 115274, 115282, 115288, + 115292, 115300, 115309, 115316, 115322, 115329, 115336, 115346, 115356, + 115360, 115364, 115368, 115372, 115378, 115385, 115391, 115398, 115405, + 115412, 115421, 115428, 115435, 115441, 115448, 115455, 115462, 115469, + 115476, 115483, 115489, 115496, 115503, 115510, 115519, 115526, 115533, + 115537, 115543, 115547, 115553, 115560, 115567, 115574, 115578, 115582, + 115586, 115590, 115594, 115601, 115605, 115609, 115615, 115623, 115627, + 115631, 115635, 115639, 115646, 115650, 115654, 115662, 115666, 115670, + 115674, 115678, 115684, 115688, 115692, 115698, 115705, 115711, 115718, + 115730, 115734, 115741, 115748, 115755, 115762, 115774, 115781, 115785, + 115789, 115793, 115800, 115807, 115814, 115821, 115831, 115838, 115844, + 115851, 115858, 115865, 115872, 115881, 115891, 115898, 115902, 115909, + 115913, 115917, 115921, 115928, 115935, 115945, 115951, 115955, 115964, + 115968, 115975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104558, 104562, - 104567, 104571, 104576, 104580, 104585, 104590, 104596, 104601, 104607, - 104611, 104616, 104620, 104625, 104629, 104634, 104639, 104644, 104649, - 104654, 104659, 104664, 104669, 104674, 104679, 104684, 104689, 104694, - 104699, 104704, 104709, 104714, 104719, 104723, 104727, 104732, 104737, - 104742, 104746, 104750, 104755, 104760, 104765, 104770, 104775, 104780, - 104784, 104790, 104795, 104801, 104806, 104812, 104818, 0, 0, 104825, - 104830, 104836, 104841, 104847, 104852, 104857, 104862, 104867, 104872, - 104877, 104881, 104886, 104892, 104897, 104903, 104909, 104915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 104923, 104927, 104932, 104936, 104941, 104945, 104950, 104955, - 104961, 104966, 104972, 104976, 104981, 104985, 104990, 104994, 104999, - 105004, 105009, 105014, 105019, 105024, 105029, 105034, 105039, 105044, - 105049, 105054, 105059, 105064, 105069, 105074, 105079, 105084, 105088, - 105092, 105097, 105102, 105107, 105111, 105115, 105120, 105125, 105130, - 105135, 105140, 105145, 105149, 105154, 105160, 105165, 105171, 105176, - 105182, 105188, 105195, 105201, 105208, 105213, 105219, 105224, 105230, - 105235, 105240, 105245, 105250, 105254, 105259, 105264, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 105269, 105274, 105278, 105282, 105286, 105290, 105294, - 105298, 105302, 105306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105310, - 105314, 105319, 105323, 105328, 105332, 105337, 105341, 105346, 105350, - 105355, 105359, 105364, 105369, 105374, 105379, 105384, 105389, 105394, - 105399, 105404, 105409, 105414, 105419, 105424, 105429, 105434, 105439, - 105444, 105449, 105453, 105457, 105462, 105467, 105472, 105476, 105480, - 105485, 105490, 105495, 105500, 105505, 105509, 105514, 105519, 105524, - 105530, 105535, 105541, 105546, 105552, 105557, 105563, 105568, 105574, - 105579, 0, 0, 0, 0, 0, 0, 0, 0, 105584, 105589, 105593, 105597, 105601, - 105605, 105609, 105613, 105617, 105621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115979, 115985, 115991, 115998, 116005, + 116012, 116019, 116026, 116033, 116039, 116046, 116053, 116060, 116067, + 116074, 116081, 116087, 116093, 116099, 116105, 116111, 116117, 116123, + 116129, 116135, 116142, 116149, 116156, 116163, 116170, 116177, 116183, + 116189, 116195, 116202, 116209, 116215, 116221, 116230, 116237, 116244, + 116251, 116258, 116265, 116272, 116278, 116284, 116290, 116299, 116306, + 116313, 116324, 116335, 116341, 116347, 116353, 116362, 116369, 116376, + 116386, 116396, 116407, 116418, 116430, 116443, 116454, 116465, 116477, + 116490, 116501, 116512, 116523, 116534, 116545, 116557, 116565, 116573, + 116582, 116591, 116600, 116606, 116612, 116618, 116625, 116635, 116642, + 116652, 116657, 116662, 116668, 116674, 116682, 116690, 116699, 116710, + 116721, 116729, 116737, 116746, 116755, 116763, 116770, 116778, 116786, + 116793, 116800, 116809, 116818, 116827, 116836, 116845, 0, 116854, + 116865, 116872, 116880, 116888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116896, + 116905, 116912, 116919, 116928, 116935, 116942, 116949, 116959, 116966, + 116973, 116980, 116988, 116995, 117002, 117009, 117020, 117027, 117034, + 117041, 117048, 117055, 117064, 117071, 117077, 117084, 117093, 117100, + 117107, 117114, 117124, 117131, 117138, 117148, 117158, 117165, 117172, + 117179, 117186, 117193, 117200, 117209, 117216, 117223, 117229, 117237, + 117246, 117255, 117266, 117275, 117284, 117293, 117302, 117311, 117318, + 117325, 117334, 117346, 117356, 117363, 117370, 117380, 117390, 117399, + 117409, 117416, 117426, 117433, 117440, 117447, 117457, 117467, 117474, + 117481, 117491, 117497, 117508, 117517, 117527, 117535, 117548, 117555, + 117561, 117569, 117576, 117586, 117590, 117594, 117598, 117602, 117606, + 117610, 117614, 117623, 117627, 117634, 117638, 117642, 117646, 117650, + 117654, 117658, 117662, 117666, 117670, 117674, 117678, 117682, 117686, + 117690, 117694, 117698, 117702, 117706, 117710, 117717, 117724, 117734, + 117747, 117757, 117761, 117765, 117769, 117773, 117777, 117781, 117785, + 117789, 117793, 117797, 117801, 117808, 117815, 117826, 117833, 117840, + 117847, 117854, 117861, 117868, 117875, 117879, 117883, 117890, 117897, + 117904, 117913, 117920, 117933, 117943, 117950, 117957, 117961, 117965, + 117974, 117981, 117988, 117995, 118008, 118015, 118022, 118032, 118042, + 118051, 118058, 118065, 118072, 118079, 118086, 118093, 118103, 118109, + 118117, 118124, 118132, 118139, 118150, 118157, 118163, 118170, 118177, + 118184, 118191, 118201, 118211, 118218, 118225, 118234, 118242, 118248, + 118255, 118262, 118269, 118276, 118280, 118290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17756,18 +19100,127 @@ static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118300, 118304, 118308, 118312, + 118316, 118320, 118324, 118328, 118332, 118336, 118340, 118344, 118348, + 118352, 118356, 118360, 118364, 118368, 118372, 118376, 118380, 118384, + 118388, 118392, 118396, 118400, 118404, 118408, 118412, 118416, 118420, + 118424, 118428, 118432, 118436, 118440, 118444, 118448, 118452, 118456, + 118460, 118464, 118468, 118472, 118476, 118480, 118484, 118488, 118492, + 118496, 118500, 118504, 118508, 118512, 118516, 118520, 118524, 118528, + 118532, 118536, 118540, 118544, 118548, 118552, 118556, 118560, 118564, + 118568, 118572, 118576, 118580, 118584, 118588, 118592, 118596, 118600, + 118604, 118608, 118612, 118616, 118620, 118624, 118628, 118632, 118636, + 118640, 118644, 118648, 118652, 118656, 118660, 118664, 118668, 118672, + 118676, 118680, 118684, 118688, 118692, 118696, 118700, 118704, 118708, + 118712, 118716, 118720, 118724, 118728, 118732, 118736, 118740, 118744, + 118748, 118752, 118756, 118760, 118764, 118768, 118772, 118776, 118780, + 118784, 118788, 118792, 118796, 118800, 118804, 118808, 118812, 118816, + 118820, 118824, 118828, 118832, 118836, 118840, 118844, 118848, 118852, + 118856, 118860, 118864, 118868, 118872, 118876, 118880, 118884, 118888, + 118892, 118896, 118900, 118904, 118908, 118912, 118916, 118920, 118924, + 118928, 118932, 118936, 118940, 118944, 118948, 118952, 118956, 118960, + 118964, 118968, 118972, 118976, 118980, 118984, 118988, 118992, 118996, + 119000, 119004, 119008, 119012, 119016, 119020, 119024, 119028, 119032, + 119036, 119040, 119044, 119048, 119052, 119056, 119060, 119064, 119068, + 119072, 119076, 119080, 119084, 119088, 119092, 119096, 119100, 119104, + 119108, 119112, 119116, 119120, 119124, 119128, 119132, 119136, 119140, + 119144, 119148, 119152, 119156, 119160, 119164, 119168, 119172, 119176, + 119180, 119184, 119188, 119192, 119196, 119200, 119204, 119208, 119212, + 119216, 119220, 119224, 119228, 119232, 119236, 119240, 119244, 119248, + 119252, 119256, 119260, 119264, 119268, 119272, 119276, 119280, 119284, + 119288, 119292, 119296, 119300, 119304, 119308, 119312, 119316, 119320, + 119324, 119328, 119332, 119336, 119340, 119344, 119348, 119352, 119356, + 119360, 119364, 119368, 119372, 119376, 119380, 119384, 119388, 119392, + 119396, 119400, 119404, 119408, 119412, 119416, 119420, 119424, 119428, + 119432, 119436, 119440, 119444, 119448, 119452, 119456, 119460, 119464, + 119468, 119472, 119476, 119480, 119484, 119488, 119492, 119496, 119500, + 119504, 119508, 119512, 119516, 119520, 119524, 119528, 119532, 119536, + 119540, 119544, 119548, 119552, 119556, 119560, 119564, 119568, 119572, + 119576, 119580, 119584, 119588, 119592, 119596, 119600, 119604, 119608, + 119612, 119616, 119620, 119624, 119628, 119632, 119636, 119640, 119644, + 119648, 119652, 119656, 119660, 119664, 119668, 119672, 119676, 119680, + 119684, 119688, 119692, 119696, 119700, 119704, 119708, 119712, 119716, + 119720, 119724, 119728, 119732, 119736, 119740, 119744, 119748, 119752, + 119756, 119760, 119764, 119768, 119772, 119776, 119780, 119784, 119788, + 119792, 119796, 119800, 119804, 119808, 119812, 119816, 119820, 119824, + 119828, 119832, 119836, 119840, 119844, 119848, 119852, 119856, 119860, + 119864, 119868, 119872, 119876, 119880, 119884, 119888, 119892, 119896, + 119900, 119904, 119908, 119912, 119916, 119920, 119924, 119928, 119932, + 119936, 119940, 119944, 119948, 119952, 119956, 119960, 119964, 119968, + 119972, 119976, 119980, 119984, 119988, 119992, 119996, 120000, 120004, + 120008, 120012, 120016, 120020, 120024, 120028, 120032, 120036, 120040, + 120044, 120048, 120052, 120056, 120060, 120064, 120068, 120072, 120076, + 120080, 120084, 120088, 120092, 120096, 120100, 120104, 120108, 120112, + 120116, 120120, 120124, 120128, 120132, 120136, 120140, 120144, 120148, + 120152, 120156, 120160, 120164, 120168, 120172, 120176, 120180, 120184, + 120188, 120192, 120196, 120200, 120204, 120208, 120212, 120216, 120220, + 120224, 120228, 120232, 120236, 120240, 120244, 120248, 120252, 120256, + 120260, 120264, 120268, 120272, 120276, 120280, 120284, 120288, 120292, + 120296, 120300, 120304, 120308, 120312, 120316, 120320, 120324, 120328, + 120332, 120336, 120340, 120344, 120348, 120352, 120356, 120360, 120364, + 120368, 120372, 120376, 120380, 120384, 120388, 120392, 120396, 120400, + 120404, 120408, 120412, 120416, 120420, 120424, 120428, 120432, 120436, + 120440, 120444, 120448, 120452, 120456, 120460, 120464, 120468, 120472, + 120476, 120480, 120484, 120488, 120492, 120496, 120500, 120504, 120508, + 120512, 120516, 120520, 120524, 120528, 120532, 120536, 120540, 120544, + 120548, 120552, 120556, 120560, 120564, 120568, 120572, 120576, 120580, + 120584, 120588, 120592, 120596, 120600, 120604, 120608, 120612, 120616, + 120620, 120624, 120628, 120632, 120636, 120640, 120644, 120648, 120652, + 120656, 120660, 120664, 120668, 120672, 120676, 120680, 120684, 120688, + 120692, 120696, 120700, 120704, 120708, 120712, 120716, 120720, 120724, + 120728, 120732, 120736, 120740, 120744, 120748, 120752, 120756, 120760, + 120764, 120768, 120772, 120776, 120780, 120784, 120788, 120792, 120796, + 120800, 120804, 120808, 120812, 120816, 120820, 120824, 120828, 120832, + 120836, 120840, 120844, 120848, 120852, 120856, 120860, 120864, 120868, + 120872, 120876, 120880, 120884, 120888, 120892, 120896, 120900, 120904, + 120908, 120912, 120916, 120920, 120924, 120928, 120932, 120936, 120940, + 120944, 120948, 120952, 120956, 120960, 120964, 120968, 120972, 120976, + 120980, 120984, 120988, 120992, 120996, 121000, 121004, 121008, 121012, + 121016, 121020, 121024, 121028, 121032, 121036, 121040, 121044, 121048, + 121052, 121056, 121060, 121064, 121068, 121072, 121076, 121080, 121084, + 121088, 121092, 121096, 121100, 121104, 121108, 121112, 121116, 121120, + 121124, 121128, 121132, 121136, 121140, 121144, 121148, 121152, 121156, + 121160, 121164, 121168, 121172, 121176, 121180, 121184, 121188, 121192, + 121196, 121200, 121204, 121208, 121212, 121216, 121220, 121224, 121228, + 121232, 121236, 121240, 121244, 121248, 121252, 121256, 121260, 121264, + 121268, 121272, 121276, 121280, 121284, 121288, 121292, 121296, 121300, + 121304, 121308, 121312, 121316, 121320, 121324, 121328, 121332, 121336, + 121340, 121344, 121348, 121352, 121356, 121360, 121364, 121368, 121372, + 121376, 121380, 121384, 121388, 121392, 121396, 121400, 121404, 121408, + 121412, 121416, 121420, 121424, 121428, 121432, 121436, 121440, 121444, + 121448, 121452, 121456, 121460, 121464, 121468, 121472, 121476, 121480, + 121484, 121488, 121492, 121496, 121500, 121504, 121508, 121512, 121516, + 121520, 121524, 121528, 121532, 121536, 121540, 121544, 121548, 121552, + 121556, 121560, 121564, 121568, 121572, 121576, 121580, 121584, 121588, + 121592, 121596, 121600, 121604, 121608, 121612, 121616, 121620, 121624, + 121628, 121632, 121636, 121640, 121644, 121648, 121652, 121656, 121660, + 121664, 121668, 121672, 121676, 121680, 121684, 121688, 121692, 121696, + 121700, 121704, 121708, 121712, 121716, 121720, 121724, 121728, 121732, + 121736, 121740, 121744, 121748, 121752, 121756, 121760, 121764, 121768, + 121772, 121776, 121780, 121784, 121788, 121792, 121796, 121800, 121804, + 121808, 121812, 121816, 121820, 121824, 121828, 121832, 121836, 121840, + 121844, 121848, 121852, 121856, 121860, 121864, 121868, 121872, 121876, + 121880, 121884, 121888, 121892, 121896, 121900, 121904, 121908, 121912, + 121916, 121920, 121924, 121928, 121932, 121936, 121940, 121944, 121948, + 121952, 121956, 121960, 121964, 121968, 121972, 121976, 121980, 121984, + 121988, 121992, 121996, 122000, 122004, 122008, 122012, 122016, 122020, + 122024, 122028, 122032, 122036, 122040, 122044, 122048, 122052, 122056, + 122060, 122064, 122068, 122072, 122076, 122080, 122084, 122088, 122092, + 122096, 122100, 122104, 122108, 122112, 122116, 122120, 122124, 122128, + 122132, 122136, 122140, 122144, 122148, 122152, 122156, 122160, 122164, + 122168, 122172, 122176, 122180, 122184, 122188, 122192, 122196, 122200, + 122204, 122208, 122212, 122216, 122220, 122224, 122228, 122232, 122236, + 122240, 122244, 122248, 122252, 122256, 122260, 122264, 122268, 122272, + 122276, 122280, 122284, 122288, 122292, 122296, 122300, 122304, 122308, + 122312, 122316, 122320, 122324, 122328, 122332, 122336, 122340, 122344, + 122348, 122352, 122356, 122360, 122364, 122368, 122372, 122376, 122380, + 122384, 122388, 122392, 122396, 122400, 122404, 122408, 122412, 122416, + 122420, 122424, 122428, 122432, 122436, 122440, 122444, 122448, 122452, + 122456, 122460, 122464, 122468, 122472, 122476, 122480, 122484, 122488, + 122492, 122496, 122500, 122504, 122508, 122512, 122516, 122520, 122524, + 122528, 122532, 122536, 122540, 122544, 122548, 122552, 122556, 122560, + 122564, 122568, 122572, 122576, 122580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105625, 105631, 105636, 105642, 105648, - 105653, 105659, 105665, 105671, 105676, 105681, 105687, 105693, 105699, - 105705, 105711, 105717, 105723, 105729, 105735, 105741, 105747, 105753, - 105759, 105765, 105771, 105777, 105783, 105789, 105795, 105801, 105807, - 105813, 105819, 105824, 105830, 105836, 105841, 105847, 105853, 105859, - 105864, 105869, 105875, 105881, 105887, 105893, 105899, 105905, 105911, - 105917, 105923, 105929, 105935, 105941, 105947, 105953, 105959, 105965, - 105971, 105977, 105983, 105989, 105995, 106001, 106006, 106010, 106014, - 106018, 106022, 106026, 106030, 106034, 106038, 106042, 106047, 106052, - 106057, 106062, 106067, 106072, 106077, 106082, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 106087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17775,941 +19228,848 @@ static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 106091, 106099, 106107, 106116, 106124, 106133, 106142, - 106151, 106160, 106168, 106177, 106186, 106195, 106204, 106213, 106222, - 106231, 106239, 106248, 106257, 106266, 106275, 106283, 106291, 106299, - 106307, 106315, 106324, 106333, 106343, 106353, 106363, 106373, 106383, - 106392, 106402, 106412, 106422, 106433, 106443, 106455, 106467, 106478, - 106492, 106503, 106513, 106525, 106536, 106546, 106558, 106570, 106581, - 106592, 106602, 106612, 106624, 106635, 0, 0, 0, 0, 0, 0, 0, 106647, - 106650, 106655, 106661, 106669, 106674, 106680, 106688, 106694, 106700, - 106704, 106708, 106715, 106724, 106731, 106740, 106746, 106755, 106762, - 106769, 106776, 106786, 106792, 106796, 106803, 106812, 106822, 106829, - 106836, 106840, 106844, 106851, 106861, 106865, 106872, 106879, 106886, - 106892, 106899, 106906, 106913, 106920, 106924, 106928, 106932, 106939, - 106943, 106950, 106957, 106971, 106980, 106984, 106988, 106992, 106999, - 107003, 107007, 107011, 107019, 107027, 107046, 107056, 107076, 107080, - 107084, 107088, 107092, 107096, 107100, 107104, 107111, 107115, 107118, - 107122, 107126, 107132, 107139, 107148, 107152, 107161, 107170, 107178, - 107182, 107189, 107193, 107197, 107201, 107205, 107216, 107225, 107234, - 107243, 107252, 107264, 107273, 107282, 107291, 107299, 107308, 107320, - 107329, 107338, 107347, 107359, 107368, 107377, 107389, 107398, 107407, - 107419, 107428, 107432, 107436, 107440, 107444, 107448, 107452, 107456, - 107463, 107467, 107471, 107482, 107486, 107490, 107497, 107503, 107509, - 107513, 107520, 107524, 107528, 107532, 107536, 107540, 107544, 107550, - 107558, 107562, 107566, 107569, 107575, 107585, 107589, 107601, 107608, - 107615, 107622, 107629, 107635, 107639, 107643, 107647, 107651, 107658, - 107667, 107674, 107682, 107690, 107696, 107700, 107704, 107708, 107712, - 107718, 107727, 107739, 107746, 107753, 107762, 107773, 107779, 107788, - 107797, 107804, 107813, 107820, 107827, 107837, 107844, 107851, 107858, - 107865, 107869, 107875, 107879, 107890, 107898, 107907, 107919, 107926, - 107933, 107943, 107950, 107960, 107967, 107977, 107984, 107991, 108001, - 108008, 108015, 108025, 108032, 108044, 108053, 108060, 108067, 108074, - 108083, 108093, 108106, 108113, 108123, 108133, 108140, 108149, 108162, - 108169, 108176, 108183, 108193, 108203, 108210, 108220, 108227, 108234, - 108244, 108250, 108257, 108264, 108271, 108281, 108288, 108295, 108302, - 108308, 108315, 108325, 108332, 108336, 108344, 108348, 108360, 108364, - 108378, 108382, 108386, 108390, 108394, 108400, 108407, 108415, 108419, - 108423, 108427, 108431, 108438, 108442, 108448, 108454, 108462, 108466, - 108473, 108481, 108485, 108489, 108495, 108499, 108508, 108517, 108524, - 108534, 108540, 108544, 108548, 108556, 108563, 108570, 108576, 108580, - 108588, 108592, 108599, 108611, 108618, 108628, 108634, 108638, 108647, - 108654, 108663, 108667, 108671, 108678, 108682, 108686, 108690, 108694, - 108697, 108703, 108709, 108713, 108717, 108724, 108731, 108738, 108745, - 108752, 108759, 108766, 108773, 108779, 108783, 108787, 108794, 108801, - 108808, 108815, 108822, 108826, 108829, 108834, 108838, 108842, 108851, - 108860, 108864, 108868, 108874, 108880, 108897, 108903, 108907, 108916, - 108920, 108924, 108931, 108939, 108947, 108953, 108957, 108961, 108965, - 108969, 108972, 108978, 108985, 108995, 109002, 109009, 109016, 109022, - 109029, 109036, 109043, 109050, 109057, 109066, 109073, 109085, 109092, - 109099, 109109, 109120, 109127, 109134, 109141, 109148, 109155, 109162, - 109169, 109176, 109183, 109190, 109200, 109210, 109220, 109227, 109237, - 109244, 109251, 109258, 109265, 109272, 109279, 109286, 109293, 109300, - 109307, 109314, 109321, 109328, 109334, 109341, 109348, 109357, 109364, - 109371, 109375, 109383, 109387, 109391, 109395, 109399, 109403, 109410, - 109414, 109423, 109427, 109434, 109442, 109446, 109450, 109454, 109467, - 109483, 109487, 109491, 109498, 109504, 109511, 109515, 109519, 109523, - 109527, 109531, 109538, 109542, 109560, 109564, 109568, 109575, 109579, - 109583, 109589, 109593, 109597, 109605, 109609, 109613, 109617, 109621, - 109627, 109638, 109647, 109656, 109663, 109670, 109681, 109688, 109695, - 109702, 109709, 109716, 109723, 109730, 109740, 109746, 109753, 109763, - 109772, 109779, 109788, 109798, 109805, 109812, 109819, 109826, 109838, - 109845, 109852, 109859, 109866, 109873, 109883, 109890, 109897, 109907, - 109920, 109932, 109939, 109949, 109956, 109963, 109970, 109984, 109990, - 109998, 110008, 110018, 110025, 110032, 110038, 110042, 110049, 110059, - 110065, 110078, 110082, 110086, 110093, 110097, 110104, 110114, 110118, - 110122, 110126, 110130, 110134, 110141, 110145, 110152, 110159, 110166, - 110175, 110184, 110194, 110201, 110208, 110215, 110225, 110232, 110242, - 110249, 110259, 110266, 110273, 110283, 110293, 110300, 110306, 110314, - 110322, 110328, 110334, 110338, 110342, 110349, 110357, 110363, 110367, - 110371, 110375, 110382, 110394, 110397, 110404, 110410, 110414, 110418, - 110422, 110426, 110430, 110434, 110438, 110442, 110446, 110450, 110457, - 110461, 110467, 110471, 110475, 110479, 110485, 110492, 110499, 110506, - 110517, 110525, 110529, 110535, 110544, 110551, 110557, 110560, 110564, - 110568, 110574, 110583, 110591, 110595, 110601, 110605, 110609, 110613, - 110619, 110626, 110632, 110636, 110642, 110646, 110650, 110659, 110671, - 110675, 110682, 110689, 110699, 110706, 110718, 110725, 110732, 110739, - 110750, 110760, 110773, 110783, 110790, 110794, 110798, 110802, 110806, - 110815, 110824, 110833, 110850, 110859, 110865, 110872, 110880, 110893, - 110897, 110906, 110915, 110924, 110933, 110944, 110953, 110962, 110971, - 110980, 110989, 110998, 111008, 111011, 111015, 111019, 111023, 111027, - 111031, 111037, 111044, 111051, 111058, 111064, 111070, 111077, 111083, - 111090, 111098, 111102, 111109, 111116, 111123, 111131, 111135, 111139, - 111143, 111147, 111151, 111157, 111161, 111167, 111174, 111181, 111187, - 111194, 111201, 111208, 111215, 111222, 111229, 111236, 111243, 111250, - 111257, 111264, 111271, 111278, 111285, 111291, 111295, 111304, 111308, - 111312, 111316, 111320, 111326, 111333, 111340, 111347, 111354, 111361, - 111367, 111375, 111379, 111383, 111387, 111391, 111397, 111414, 111431, - 111435, 111439, 111443, 111447, 111451, 111455, 111461, 111468, 111472, - 111478, 111485, 111492, 111499, 111506, 111513, 111522, 111529, 111536, - 111543, 111550, 111554, 111558, 111564, 111576, 111580, 111584, 111593, - 111597, 111601, 111605, 111611, 111615, 111619, 111628, 111632, 111636, - 111640, 111647, 111651, 111655, 111659, 111663, 111667, 111671, 111675, - 111679, 111685, 111692, 111699, 111705, 111709, 111726, 111732, 111736, - 111742, 111748, 111754, 111760, 111766, 111772, 111776, 111780, 111784, - 111790, 111794, 111800, 111804, 111808, 111815, 111822, 111839, 111843, - 111847, 111851, 111855, 111859, 111871, 111874, 111879, 111884, 111899, - 111909, 111921, 111925, 111929, 111933, 111939, 111946, 111953, 111963, - 111975, 111981, 111987, 111996, 112000, 112004, 112011, 112021, 112028, - 112034, 112038, 112042, 112049, 112055, 112059, 112065, 112069, 112077, - 112083, 112087, 112095, 112103, 112110, 112116, 112123, 112130, 112140, - 112150, 112154, 112158, 112162, 112166, 112172, 112179, 112185, 112192, - 112199, 112206, 112215, 112222, 112229, 112235, 112242, 112249, 112256, - 112263, 112270, 112277, 112283, 112290, 112297, 112304, 112313, 112320, - 112327, 112331, 112337, 112341, 112347, 112354, 112361, 112368, 112372, - 112376, 112380, 112384, 112388, 112395, 112399, 112403, 112409, 112417, - 112421, 112425, 112429, 112433, 112440, 112444, 112448, 112456, 112460, - 112464, 112468, 112472, 112478, 112482, 112486, 112492, 112499, 112505, - 112512, 112524, 112528, 112535, 112542, 112549, 112556, 112568, 112575, - 112579, 112583, 112587, 112594, 112601, 112608, 112615, 112625, 112632, - 112638, 112645, 112652, 112659, 112666, 112675, 112685, 112692, 112696, - 112703, 112707, 112711, 112715, 112722, 112729, 112739, 112745, 112749, - 112758, 112762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 122584, 122588, 122592, 122596, 122600, 122604, 122608, + 122612, 122616, 122620, 122624, 122628, 122632, 122636, 122640, 122644, + 122648, 122652, 122656, 122660, 122664, 122668, 122672, 122676, 122680, + 122684, 122688, 122692, 122696, 122700, 122704, 122708, 122712, 122716, + 122720, 122724, 122728, 122732, 122736, 122740, 122744, 122748, 122752, + 122756, 122760, 122764, 122768, 122772, 122776, 122780, 122784, 122788, + 122792, 122796, 122800, 122804, 122808, 122812, 122816, 122820, 122824, + 122828, 122832, 122836, 122840, 122844, 122848, 122852, 122856, 122860, + 122864, 122868, 122872, 122876, 122880, 122884, 122888, 122892, 122896, + 122900, 122904, 122908, 122912, 122916, 122920, 122924, 122928, 122932, + 122936, 122940, 122944, 122948, 122952, 122956, 122960, 122964, 122968, + 122972, 122976, 122980, 122984, 122988, 122992, 122996, 123000, 123004, + 123008, 123012, 123016, 123020, 123024, 123028, 123032, 123036, 123040, + 123044, 123048, 123052, 123056, 123060, 123064, 123068, 123072, 123076, + 123080, 123084, 123088, 123092, 123096, 123100, 123104, 123108, 123112, + 123116, 123120, 123124, 123128, 123132, 123136, 123140, 123144, 123148, + 123152, 123156, 123160, 123164, 123168, 123172, 123176, 123180, 123184, + 123188, 123192, 123196, 123200, 123204, 123208, 123212, 123216, 123220, + 123224, 123228, 123232, 123236, 123240, 123244, 123248, 123252, 123256, + 123260, 123264, 123268, 123272, 123276, 123280, 123284, 123288, 123292, + 123296, 123300, 123304, 123308, 123312, 123316, 123320, 123324, 123328, + 123332, 123336, 123340, 123344, 123348, 123352, 123356, 123360, 123364, + 123368, 123372, 123376, 123380, 123384, 123388, 123392, 123396, 123400, + 123404, 123408, 123412, 123416, 123420, 123424, 123428, 123432, 123436, + 123440, 123444, 123448, 123452, 123456, 123460, 123464, 123468, 123472, + 123476, 123480, 123484, 123488, 123492, 123496, 123500, 123504, 123508, + 123512, 123516, 123520, 123524, 123528, 123532, 123536, 123540, 123544, + 123548, 123552, 123556, 123560, 123564, 123568, 123572, 123576, 123580, + 123584, 123588, 123592, 123596, 123600, 123604, 123608, 123612, 123616, + 123620, 123624, 123628, 123632, 123636, 123640, 123644, 123648, 123652, + 123656, 123660, 123664, 123668, 123672, 123676, 123680, 123684, 123688, + 123692, 123696, 123700, 123704, 123708, 123712, 123716, 123720, 123724, + 123728, 123732, 123736, 123740, 123744, 123748, 123752, 123756, 123760, + 123764, 123768, 123772, 123776, 123780, 123784, 123788, 123792, 123796, + 123800, 123804, 123808, 123812, 123816, 123820, 123824, 123828, 123832, + 123836, 123840, 123844, 123848, 123852, 123856, 123860, 123864, 123868, + 123872, 123876, 123880, 123884, 123888, 123892, 123896, 123900, 123904, + 123908, 123912, 123916, 123920, 123924, 123928, 123932, 123936, 123940, + 123944, 123948, 123952, 123956, 123960, 123964, 123968, 123972, 123976, + 123980, 123984, 123988, 123992, 123996, 124000, 124004, 124008, 124012, + 124016, 124020, 124024, 124028, 124032, 124036, 124040, 124044, 124048, + 124052, 124056, 124060, 124064, 124068, 124072, 124076, 124080, 124084, + 124088, 124092, 124096, 124100, 124104, 124108, 124112, 124116, 124120, + 124124, 124128, 124132, 124136, 124140, 124144, 124148, 124152, 124156, + 124160, 124164, 124168, 124172, 124176, 124180, 124184, 124188, 124192, + 124196, 124200, 124204, 124208, 124212, 124216, 124220, 124224, 124228, + 124232, 124236, 124240, 124244, 124248, 124252, 124256, 124260, 124264, + 124268, 124272, 124276, 124280, 124284, 124288, 124292, 124296, 124300, + 124304, 124308, 124312, 124316, 124326, 124330, 124334, 124338, 124342, + 124346, 124350, 124354, 124358, 124362, 124366, 124370, 124375, 124379, + 124383, 124387, 124391, 124395, 124399, 124403, 124407, 124411, 124415, + 124419, 124423, 124427, 124431, 124435, 124439, 124448, 124457, 124461, + 124465, 124469, 124473, 124477, 124481, 124485, 124489, 124493, 124497, + 124501, 124505, 124509, 124513, 124517, 124521, 124525, 124529, 124533, + 124537, 124541, 124545, 124549, 124553, 124557, 124561, 124565, 124569, + 124573, 124577, 124581, 124585, 124589, 124593, 124597, 124601, 124605, + 124609, 124613, 124617, 124621, 124625, 124629, 124633, 124637, 124641, + 124645, 124649, 124653, 124657, 124661, 124665, 124669, 124673, 124677, + 124681, 124685, 124689, 124693, 124697, 124701, 124705, 124709, 124713, + 124717, 124721, 124725, 124729, 124733, 124737, 124741, 124745, 124749, + 124753, 124757, 124761, 124765, 124769, 124773, 124777, 124781, 124785, + 124789, 124793, 124797, 124801, 124805, 124809, 124813, 124817, 124821, + 124825, 124829, 124833, 124837, 124841, 124845, 124849, 124853, 124857, + 124861, 124865, 124869, 124873, 124877, 124881, 124885, 124889, 124893, + 124897, 124901, 124905, 124909, 124913, 124917, 124921, 124925, 124929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112769, 112775, 112781, 112788, - 112795, 112802, 112809, 112816, 112823, 112829, 112836, 112843, 112850, - 112857, 112864, 112871, 112877, 112883, 112889, 112895, 112901, 112907, - 112913, 112919, 112925, 112932, 112939, 112946, 112953, 112960, 112967, - 112973, 112979, 112985, 112992, 112999, 113005, 113011, 113020, 113027, - 113034, 113041, 113048, 113055, 113062, 113068, 113074, 113080, 113089, - 113096, 113103, 113114, 113125, 113131, 113137, 113143, 113152, 113159, - 113166, 113176, 113186, 113197, 113208, 113220, 113233, 113244, 113255, - 113267, 113280, 113291, 113302, 113313, 113324, 113335, 113347, 113355, - 113363, 113372, 113381, 113390, 113396, 113402, 113408, 113415, 113425, - 113432, 113442, 113447, 113452, 113458, 113464, 113472, 113480, 113489, - 113500, 113511, 113519, 113527, 113536, 113545, 113553, 113560, 113568, - 113576, 113583, 113590, 113599, 113608, 113617, 113626, 113635, 0, - 113644, 113655, 113662, 113670, 113678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124933, 124941, + 124949, 124959, 124969, 124977, 124983, 124991, 124999, 125009, 125021, + 125033, 125039, 125047, 125053, 125059, 125065, 125071, 125077, 125083, + 125089, 125095, 125101, 125107, 125113, 125121, 125129, 125135, 125141, + 125147, 125153, 125161, 125169, 125178, 125184, 125192, 125198, 125204, + 125210, 125216, 125222, 125230, 125238, 125244, 125250, 125256, 125262, + 125268, 125274, 125280, 125286, 125292, 125298, 125304, 125310, 125316, + 125322, 125328, 125334, 125340, 125346, 125352, 125360, 125366, 125372, + 125382, 125390, 125396, 125402, 125408, 125414, 125420, 125426, 125432, + 125438, 125444, 125450, 125456, 125462, 125468, 125474, 125480, 125486, + 125492, 125498, 125504, 125510, 125516, 125522, 125530, 125536, 125544, + 125552, 125560, 125566, 125572, 125578, 125584, 125590, 125598, 125608, + 125616, 125624, 125630, 125636, 125644, 125652, 125658, 125666, 125674, + 125682, 125688, 125694, 125700, 125706, 125712, 125718, 125726, 125734, + 125740, 125746, 125752, 125758, 125764, 125772, 125778, 125784, 125790, + 125796, 125802, 125808, 125816, 125822, 125828, 125834, 125840, 125848, + 125856, 125862, 125868, 125874, 125879, 125885, 125891, 125898, 125903, + 125908, 125913, 125918, 125923, 125928, 125933, 125938, 125943, 125952, + 125959, 125964, 125969, 125974, 125981, 125986, 125991, 125996, 126003, + 126008, 126013, 126018, 126023, 126028, 126033, 126038, 126043, 126048, + 126053, 126058, 126065, 126070, 126077, 126082, 126087, 126094, 126099, + 126104, 126109, 126114, 126119, 126124, 126129, 126134, 126139, 126144, + 126149, 126154, 126159, 126164, 126169, 126174, 126179, 126184, 126189, + 126196, 126201, 126206, 126211, 126216, 126221, 126226, 126231, 126236, + 126241, 126246, 126251, 126256, 126261, 126268, 126273, 126278, 126285, + 126290, 126295, 126300, 126305, 126310, 126315, 126320, 126325, 126330, + 126335, 126342, 126347, 126352, 126357, 126362, 126367, 126374, 126381, + 126386, 126391, 126396, 126401, 126406, 126411, 126416, 126421, 126426, + 126431, 126436, 126441, 126446, 126451, 126456, 126461, 126466, 126471, + 126476, 126481, 126486, 126491, 126496, 126501, 126506, 126511, 126516, + 126521, 126526, 126531, 126536, 126541, 126546, 126551, 126556, 126561, + 126568, 126573, 126578, 126583, 126588, 126593, 126598, 126603, 126608, + 126613, 126618, 126623, 126628, 126633, 126638, 126643, 126648, 126653, + 126658, 126663, 126668, 126673, 126678, 126683, 126688, 126693, 126698, + 126703, 126708, 126713, 126718, 126723, 126728, 126733, 126738, 126743, + 126748, 126753, 126758, 126763, 126768, 126773, 126778, 126783, 126788, + 126793, 126798, 126803, 126808, 126813, 126818, 126823, 126828, 126833, + 126838, 126843, 126848, 126853, 126858, 126865, 126870, 126875, 126880, + 126885, 126890, 126895, 126900, 126905, 126910, 126915, 126920, 126925, + 126930, 126935, 126940, 126945, 126950, 126955, 126960, 126965, 126970, + 126977, 126982, 126987, 126994, 126999, 127004, 127009, 127014, 127019, + 127024, 127029, 127034, 127039, 127044, 127049, 127054, 127059, 127064, + 127069, 127074, 127079, 127084, 127089, 127094, 127099, 127104, 127109, + 127114, 127119, 127124, 127129, 127134, 127139, 127144, 127149, 127154, + 127159, 127164, 127169, 127174, 127179, 127184, 127189, 127194, 127199, + 127204, 127209, 127216, 127221, 127226, 127233, 127240, 127245, 127250, + 127255, 127260, 127265, 127270, 127275, 127280, 127285, 127290, 127295, + 127300, 127305, 127310, 127315, 127320, 127325, 127330, 127335, 127340, + 127345, 127350, 127355, 127360, 127365, 127372, 127377, 127382, 127387, + 127392, 127397, 127402, 127407, 127412, 127417, 127422, 127427, 127432, + 127437, 127442, 127447, 127452, 127457, 127462, 127469, 127474, 127479, + 127484, 127489, 127494, 127499, 127504, 127510, 127515, 127520, 127525, + 127530, 127535, 127540, 127545, 127550, 127557, 127564, 127569, 127574, + 127578, 127583, 127587, 127591, 127596, 127603, 127608, 127613, 127622, + 127627, 127632, 127637, 127642, 127649, 127656, 127661, 127666, 127671, + 127676, 127683, 127688, 127693, 127698, 127703, 127708, 127713, 127718, + 127723, 127728, 127733, 127738, 127743, 127750, 127755, 127760, 127765, + 127770, 127775, 127779, 127784, 127789, 127794, 127799, 127804, 127809, + 127814, 127819, 127824, 127830, 127836, 127842, 127848, 127854, 127860, + 127866, 127872, 127878, 127884, 127890, 127896, 127902, 127908, 127914, + 127920, 127926, 127932, 127938, 127944, 127950, 127956, 127962, 127968, + 127973, 127979, 127985, 127991, 127997, 128003, 128009, 128015, 128021, + 128027, 128033, 128039, 128045, 128051, 128057, 128063, 128069, 128075, + 128081, 128087, 128093, 128098, 128104, 128110, 128116, 128122, 128128, + 0, 0, 0, 0, 0, 0, 0, 128134, 128139, 128144, 128149, 128154, 128159, + 128164, 128168, 128173, 128178, 128183, 128188, 128193, 128198, 128203, + 128208, 128213, 128217, 128222, 128226, 128231, 128236, 128241, 128246, + 128251, 128255, 128260, 128265, 128270, 128275, 128280, 0, 128285, + 128290, 128294, 128298, 128302, 128306, 128310, 128314, 128319, 128323, + 0, 0, 0, 0, 128328, 128332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 113686, 113690, 113694, 113698, 113702, 113706, - 113710, 113714, 113718, 113722, 113726, 113730, 113734, 113738, 113742, - 113746, 113750, 113754, 113758, 113762, 113766, 113770, 113774, 113778, - 113782, 113786, 113790, 113794, 113798, 113802, 113806, 113810, 113814, - 113818, 113822, 113826, 113830, 113834, 113838, 113842, 113846, 113850, - 113854, 113858, 113862, 113866, 113870, 113874, 113878, 113882, 113886, - 113890, 113894, 113898, 113902, 113906, 113910, 113914, 113918, 113922, - 113926, 113930, 113934, 113938, 113942, 113946, 113950, 113954, 113958, - 113962, 113966, 113970, 113974, 113978, 113982, 113986, 113990, 113994, - 113998, 114002, 114006, 114010, 114014, 114018, 114022, 114026, 114030, - 114034, 114038, 114042, 114046, 114050, 114054, 114058, 114062, 114066, - 114070, 114074, 114078, 114082, 114086, 114090, 114094, 114098, 114102, - 114106, 114110, 114114, 114118, 114122, 114126, 114130, 114134, 114138, - 114142, 114146, 114150, 114154, 114158, 114162, 114166, 114170, 114174, - 114178, 114182, 114186, 114190, 114194, 114198, 114202, 114206, 114210, - 114214, 114218, 114222, 114226, 114230, 114234, 114238, 114242, 114246, - 114250, 114254, 114258, 114262, 114266, 114270, 114274, 114278, 114282, - 114286, 114290, 114294, 114298, 114302, 114306, 114310, 114314, 114318, - 114322, 114326, 114330, 114334, 114338, 114342, 114346, 114350, 114354, - 114358, 114362, 114366, 114370, 114374, 114378, 114382, 114386, 114390, - 114394, 114398, 114402, 114406, 114410, 114414, 114418, 114422, 114426, - 114430, 114434, 114438, 114442, 114446, 114450, 114454, 114458, 114462, - 114466, 114470, 114474, 114478, 114482, 114486, 114490, 114494, 114498, - 114502, 114506, 114510, 114514, 114518, 114522, 114526, 114530, 114534, - 114538, 114542, 114546, 114550, 114554, 114558, 114562, 114566, 114570, - 114574, 114578, 114582, 114586, 114590, 114594, 114598, 114602, 114606, - 114610, 114614, 114618, 114622, 114626, 114630, 114634, 114638, 114642, - 114646, 114650, 114654, 114658, 114662, 114666, 114670, 114674, 114678, - 114682, 114686, 114690, 114694, 114698, 114702, 114706, 114710, 114714, - 114718, 114722, 114726, 114730, 114734, 114738, 114742, 114746, 114750, - 114754, 114758, 114762, 114766, 114770, 114774, 114778, 114782, 114786, - 114790, 114794, 114798, 114802, 114806, 114810, 114814, 114818, 114822, - 114826, 114830, 114834, 114838, 114842, 114846, 114850, 114854, 114858, - 114862, 114866, 114870, 114874, 114878, 114882, 114886, 114890, 114894, - 114898, 114902, 114906, 114910, 114914, 114918, 114922, 114926, 114930, - 114934, 114938, 114942, 114946, 114950, 114954, 114958, 114962, 114966, - 114970, 114974, 114978, 114982, 114986, 114990, 114994, 114998, 115002, - 115006, 115010, 115014, 115018, 115022, 115026, 115030, 115034, 115038, - 115042, 115046, 115050, 115054, 115058, 115062, 115066, 115070, 115074, - 115078, 115082, 115086, 115090, 115094, 115098, 115102, 115106, 115110, - 115114, 115118, 115122, 115126, 115130, 115134, 115138, 115142, 115146, - 115150, 115154, 115158, 115162, 115166, 115170, 115174, 115178, 115182, - 115186, 115190, 115194, 115198, 115202, 115206, 115210, 115214, 115218, - 115222, 115226, 115230, 115234, 115238, 115242, 115246, 115250, 115254, - 115258, 115262, 115266, 115270, 115274, 115278, 115282, 115286, 115290, - 115294, 115298, 115302, 115306, 115310, 115314, 115318, 115322, 115326, - 115330, 115334, 115338, 115342, 115346, 115350, 115354, 115358, 115362, - 115366, 115370, 115374, 115378, 115382, 115386, 115390, 115394, 115398, - 115402, 115406, 115410, 115414, 115418, 115422, 115426, 115430, 115434, - 115438, 115442, 115446, 115450, 115454, 115458, 115462, 115466, 115470, - 115474, 115478, 115482, 115486, 115490, 115494, 115498, 115502, 115506, - 115510, 115514, 115518, 115522, 115526, 115530, 115534, 115538, 115542, - 115546, 115550, 115554, 115558, 115562, 115566, 115570, 115574, 115578, - 115582, 115586, 115590, 115594, 115598, 115602, 115606, 115610, 115614, - 115618, 115622, 115626, 115630, 115634, 115638, 115642, 115646, 115650, - 115654, 115658, 115662, 115666, 115670, 115674, 115678, 115682, 115686, - 115690, 115694, 115698, 115702, 115706, 115710, 115714, 115718, 115722, - 115726, 115730, 115734, 115738, 115742, 115746, 115750, 115754, 115758, - 115762, 115766, 115770, 115774, 115778, 115782, 115786, 115790, 115794, - 115798, 115802, 115806, 115810, 115814, 115818, 115822, 115826, 115830, - 115834, 115838, 115842, 115846, 115850, 115854, 115858, 115862, 115866, - 115870, 115874, 115878, 115882, 115886, 115890, 115894, 115898, 115902, - 115906, 115910, 115914, 115918, 115922, 115926, 115930, 115934, 115938, - 115942, 115946, 115950, 115954, 115958, 115962, 115966, 115970, 115974, - 115978, 115982, 115986, 115990, 115994, 115998, 116002, 116006, 116010, - 116014, 116018, 116022, 116026, 116030, 116034, 116038, 116042, 116046, - 116050, 116054, 116058, 116062, 116066, 116070, 116074, 116078, 116082, - 116086, 116090, 116094, 116098, 116102, 116106, 116110, 116114, 116118, - 116122, 116126, 116130, 116134, 116138, 116142, 116146, 116150, 116154, - 116158, 116162, 116166, 116170, 116174, 116178, 116182, 116186, 116190, - 116194, 116198, 116202, 116206, 116210, 116214, 116218, 116222, 116226, - 116230, 116234, 116238, 116242, 116246, 116250, 116254, 116258, 116262, - 116266, 116270, 116274, 116278, 116282, 116286, 116290, 116294, 116298, - 116302, 116306, 116310, 116314, 116318, 116322, 116326, 116330, 116334, - 116338, 116342, 116346, 116350, 116354, 116358, 116362, 116366, 116370, - 116374, 116378, 116382, 116386, 116390, 116394, 116398, 116402, 116406, - 116410, 116414, 116418, 116422, 116426, 116430, 116434, 116438, 116442, - 116446, 116450, 116454, 116458, 116462, 116466, 116470, 116474, 116478, - 116482, 116486, 116490, 116494, 116498, 116502, 116506, 116510, 116514, - 116518, 116522, 116526, 116530, 116534, 116538, 116542, 116546, 116550, - 116554, 116558, 116562, 116566, 116570, 116574, 116578, 116582, 116586, - 116590, 116594, 116598, 116602, 116606, 116610, 116614, 116618, 116622, - 116626, 116630, 116634, 116638, 116642, 116646, 116650, 116654, 116658, - 116662, 116666, 116670, 116674, 116678, 116682, 116686, 116690, 116694, - 116698, 116702, 116706, 116710, 116714, 116718, 116722, 116726, 116730, - 116734, 116738, 116742, 116746, 116750, 116754, 116758, 116762, 116766, - 116770, 116774, 116778, 116782, 116786, 116790, 116794, 116798, 116802, - 116806, 116810, 116814, 116818, 116822, 116826, 116830, 116834, 116838, - 116842, 116846, 116850, 116854, 116858, 116862, 116866, 116870, 116874, - 116878, 116882, 116886, 116890, 116894, 116898, 116902, 116906, 116910, - 116914, 116918, 116922, 116926, 116930, 116934, 116938, 116942, 116946, - 116950, 116954, 116958, 116962, 116966, 116970, 116974, 116978, 116982, - 116986, 116990, 116994, 116998, 117002, 117006, 117010, 117014, 117018, - 117022, 117026, 117030, 117034, 117038, 117042, 117046, 117050, 117054, - 117058, 117062, 117066, 117070, 117074, 117078, 117082, 117086, 117090, - 117094, 117098, 117102, 117106, 117110, 117114, 117118, 117122, 117126, - 117130, 117134, 117138, 117142, 117146, 117150, 117154, 117158, 117162, - 117166, 117170, 117174, 117178, 117182, 117186, 117190, 117194, 117198, - 117202, 117206, 117210, 117214, 117218, 117222, 117226, 117230, 117234, - 117238, 117242, 117246, 117250, 117254, 117258, 117262, 117266, 117270, - 117274, 117278, 117282, 117286, 117290, 117294, 117298, 117302, 117306, - 117310, 117314, 117318, 117322, 117326, 117330, 117334, 117338, 117342, - 117346, 117350, 117354, 117358, 117362, 117366, 117370, 117374, 117378, - 117382, 117386, 117390, 117394, 117398, 117402, 117406, 117410, 117414, - 117418, 117422, 117426, 117430, 117434, 117438, 117442, 117446, 117450, - 117454, 117458, 117462, 117466, 117470, 117474, 117478, 117482, 117486, - 117490, 117494, 117498, 117502, 117506, 117510, 117514, 117518, 117522, - 117526, 117530, 117534, 117538, 117542, 117546, 117550, 117554, 117558, - 117562, 117566, 117570, 117574, 117578, 117582, 117586, 117590, 117594, - 117598, 117602, 117606, 117610, 117614, 117618, 117622, 117626, 117630, - 117634, 117638, 117642, 117646, 117650, 117654, 117658, 117662, 117666, - 117670, 117674, 117678, 117682, 117686, 117690, 117694, 117698, 117702, - 117706, 117710, 117714, 117718, 117722, 117726, 117730, 117734, 117738, - 117742, 117746, 117750, 117754, 117758, 117762, 117766, 117770, 117774, - 117778, 117782, 117786, 117790, 117794, 117798, 117802, 117806, 117810, - 117814, 117818, 117822, 117826, 117830, 117834, 117838, 117842, 117846, - 117850, 117854, 117858, 117862, 117866, 117870, 117874, 117878, 117882, - 117886, 117890, 117894, 117898, 117902, 117906, 117910, 117914, 117918, - 117922, 117926, 117930, 117934, 117938, 117942, 117946, 117950, 117954, - 117958, 117962, 117966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128337, 128344, 128350, 128357, 128364, + 128371, 128378, 128385, 128392, 128399, 128406, 128413, 128420, 128427, + 128434, 128441, 128448, 128455, 128461, 128468, 128475, 128482, 128488, + 128495, 128501, 128507, 128514, 128520, 128527, 128533, 0, 0, 128539, + 128547, 128555, 128564, 128573, 128582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 128590, 128595, 128600, 128605, 128610, 128615, 128620, 128625, 128630, + 128635, 128640, 128645, 128650, 128655, 128660, 128665, 128670, 128675, + 128680, 128685, 128690, 128695, 128700, 128705, 128710, 128715, 128720, + 128725, 128730, 128735, 128740, 128745, 128750, 128755, 128760, 128765, + 128770, 128775, 128780, 128785, 128790, 128795, 128800, 128805, 128810, + 128815, 128820, 128825, 128830, 128837, 128844, 128851, 128858, 128865, + 128872, 128879, 128886, 128895, 128902, 128909, 128916, 128923, 128930, + 128937, 128944, 128951, 128958, 128965, 128972, 128977, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 128986, 128991, 128995, 128999, 129003, 129007, 129011, + 129015, 129020, 129024, 0, 129029, 129034, 129039, 129046, 129051, + 129058, 129065, 0, 129070, 129077, 129082, 129087, 129094, 129101, + 129106, 129111, 129116, 129121, 129126, 129133, 129140, 129145, 129150, + 129155, 129168, 129177, 129184, 129193, 129202, 0, 0, 0, 0, 0, 129211, + 129218, 129225, 129232, 129239, 129246, 129253, 129260, 129267, 129274, + 129281, 129288, 129295, 129302, 129309, 129316, 129323, 129330, 129337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129344, 129347, 129351, + 129355, 129359, 129362, 129366, 129371, 129375, 129379, 129383, 129387, + 129391, 129396, 129401, 129405, 129409, 129413, 129417, 129422, 129428, + 129432, 129436, 129440, 129444, 129448, 129452, 129456, 129460, 129464, + 129468, 129471, 129475, 129479, 129483, 129487, 129491, 129495, 129501, + 129504, 129508, 129512, 129516, 129520, 129524, 129528, 129532, 129536, + 129540, 129545, 129550, 129556, 129560, 129564, 129568, 129572, 129576, + 129580, 129585, 129589, 129593, 129597, 129601, 129605, 129611, 129615, + 129619, 129623, 129627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129631, 129635, + 129639, 129645, 129651, 129655, 129660, 129665, 129670, 129675, 129679, + 129684, 129689, 129694, 129698, 129703, 129708, 129713, 129717, 129722, + 129727, 129732, 129737, 129742, 129747, 129752, 129757, 129761, 129766, + 129771, 129776, 129781, 129786, 129791, 129796, 129801, 129806, 129811, + 129816, 129823, 129828, 129835, 129840, 129845, 129850, 129855, 129860, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129865, 129869, 129875, + 129878, 129881, 129885, 129889, 129893, 129897, 129901, 129905, 129909, + 129915, 129921, 129927, 129933, 129939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 117970, 117977, 117984, 117993, 118002, 118009, 118014, 118021, - 118028, 118037, 118048, 118059, 118064, 118071, 118076, 118081, 118086, - 118091, 118096, 118101, 118106, 118111, 118116, 118121, 118126, 118133, - 118140, 118145, 118150, 118155, 118160, 118167, 118174, 118182, 118187, - 118194, 118199, 118204, 118209, 118214, 118219, 118226, 118233, 118238, - 118243, 118248, 118253, 118258, 118263, 118268, 118273, 118278, 118283, - 118288, 118293, 118298, 118303, 118308, 118313, 118318, 118323, 118328, - 118335, 118340, 118345, 118354, 118361, 118366, 118371, 118376, 118381, - 118386, 118391, 118396, 118401, 118406, 118411, 118416, 118421, 118426, - 118431, 118436, 118441, 118446, 118451, 118456, 118461, 118466, 118472, - 118480, 118486, 118494, 118502, 118510, 118516, 118522, 118528, 118534, - 118540, 118548, 118558, 118566, 118574, 118580, 118586, 118594, 118602, - 118608, 118616, 118624, 118632, 118638, 118644, 118650, 118656, 118662, - 118668, 118676, 118684, 118690, 118696, 118702, 118708, 118714, 118722, - 118728, 118734, 118740, 118746, 118752, 118758, 118766, 118772, 118778, - 118784, 118790, 118798, 118806, 118812, 118818, 118824, 118829, 118835, - 118841, 118848, 118853, 118858, 118863, 118868, 118873, 118878, 118883, - 118888, 118893, 118902, 118909, 118914, 118919, 118924, 118931, 118936, - 118941, 118946, 118953, 118958, 118963, 118968, 118973, 118978, 118983, - 118988, 118993, 118998, 119003, 119008, 119015, 119020, 119027, 119032, - 119037, 119044, 119049, 119054, 119059, 119064, 119069, 119074, 119079, - 119084, 119089, 119094, 119099, 119104, 119109, 119114, 119119, 119124, - 119129, 119134, 119139, 119146, 119151, 119156, 119161, 119166, 119171, - 119176, 119181, 119186, 119191, 119196, 119201, 119206, 119211, 119218, - 119223, 119228, 119235, 119240, 119245, 119250, 119255, 119260, 119265, - 119270, 119275, 119280, 119285, 119292, 119297, 119302, 119307, 119312, - 119317, 119324, 119331, 119336, 119341, 119346, 119351, 119356, 119361, - 119366, 119371, 119376, 119381, 119386, 119391, 119396, 119401, 119406, - 119411, 119416, 119421, 119426, 119431, 119436, 119441, 119446, 119451, - 119456, 119461, 119466, 119471, 119476, 119481, 119486, 119491, 119496, - 119501, 119506, 119511, 119518, 119523, 119528, 119533, 119538, 119543, - 119548, 119553, 119558, 119563, 119568, 119573, 119578, 119583, 119588, - 119593, 119598, 119603, 119608, 119613, 119618, 119623, 119628, 119633, - 119638, 119643, 119648, 119653, 119658, 119663, 119668, 119673, 119678, - 119683, 119688, 119693, 119698, 119703, 119708, 119713, 119718, 119723, - 119728, 119733, 119738, 119743, 119748, 119753, 119758, 119763, 119768, - 119773, 119778, 119783, 119788, 119793, 119798, 119803, 119808, 119815, - 119820, 119825, 119830, 119835, 119840, 119845, 119850, 119855, 119860, - 119865, 119870, 119875, 119880, 119885, 119890, 119895, 119900, 119905, - 119910, 119915, 119920, 119927, 119932, 119937, 119943, 119948, 119953, - 119958, 119963, 119968, 119973, 119978, 119983, 119988, 119993, 119998, - 120003, 120008, 120013, 120018, 120023, 120028, 120033, 120038, 120043, - 120048, 120053, 120058, 120063, 120068, 120073, 120078, 120083, 120088, - 120093, 120098, 120103, 120108, 120113, 120118, 120123, 120128, 120133, - 120138, 120143, 120148, 120153, 120158, 120165, 120170, 120175, 120182, - 120189, 120194, 120199, 120204, 120209, 120214, 120219, 120224, 120229, - 120234, 120239, 120244, 120249, 120254, 120259, 120264, 120269, 120274, - 120279, 120284, 120289, 120294, 120299, 120304, 120309, 120314, 120321, - 120326, 120331, 120336, 120341, 120346, 120351, 120356, 120361, 120366, - 120371, 120376, 120381, 120386, 120391, 120396, 120401, 120406, 120411, - 120418, 120423, 120428, 120433, 120438, 120443, 120448, 120453, 120459, - 120464, 120469, 120474, 120479, 120484, 120489, 120494, 120499, 120506, - 120513, 120518, 120523, 120527, 120532, 120536, 120540, 120545, 120552, - 120557, 120562, 120571, 120576, 120581, 120586, 120591, 120598, 120605, - 120610, 120615, 120620, 120625, 120632, 120637, 120642, 120647, 120652, - 120657, 120662, 120667, 120672, 120677, 120682, 120687, 120692, 120699, - 120703, 120708, 120713, 120718, 120723, 120727, 120732, 120737, 120742, - 120747, 120752, 120757, 120762, 120767, 120772, 120778, 120784, 120790, - 120796, 120802, 120808, 120814, 120820, 120826, 120832, 120838, 120844, - 120850, 120856, 120862, 120868, 120874, 120880, 120886, 120892, 120898, - 120904, 120910, 120916, 120921, 120927, 120933, 120939, 120945, 120951, - 120957, 120963, 120969, 120975, 120981, 120987, 120993, 120999, 121005, - 121011, 121017, 121023, 121029, 121035, 121041, 121046, 121052, 121058, - 121064, 121070, 121076, 0, 0, 0, 0, 0, 0, 0, 121082, 121087, 121092, - 121097, 121102, 121107, 121112, 121116, 121121, 121126, 121131, 121136, - 121141, 121146, 121151, 121156, 121161, 121165, 121170, 121174, 121179, - 121184, 121189, 121194, 121199, 121203, 121208, 121213, 121218, 121223, - 121228, 0, 121233, 121238, 121242, 121246, 121250, 121254, 121258, - 121262, 121266, 121270, 0, 0, 0, 0, 121274, 121278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129945, 129950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121283, 121290, - 121296, 121303, 121310, 121317, 121324, 121331, 121338, 121345, 121352, - 121359, 121366, 121373, 121380, 121387, 121394, 121401, 121407, 121414, - 121421, 121428, 121434, 121441, 121447, 121453, 121460, 121466, 121473, - 121479, 0, 0, 121485, 121493, 121501, 121510, 121519, 121528, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 121536, 121541, 121546, 121551, 121556, 121561, 121566, - 121571, 121576, 121581, 121586, 121591, 121596, 121601, 121606, 121611, - 121616, 121621, 121626, 121631, 121636, 121641, 121646, 121651, 121656, - 121661, 121666, 121671, 121676, 121681, 121686, 121691, 121696, 121701, - 121706, 121711, 121716, 121721, 121726, 121731, 121736, 121741, 121746, - 121751, 121756, 121761, 121766, 121771, 121776, 121783, 121790, 121797, - 121804, 121811, 121818, 121825, 121832, 121841, 121848, 121855, 121862, - 121869, 121876, 121883, 121890, 121897, 121904, 121911, 121918, 121923, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121932, 121937, 121941, 121945, 121949, - 121953, 121957, 121961, 121965, 121969, 0, 121973, 121978, 121983, - 121990, 121995, 122002, 122009, 0, 122014, 122021, 122026, 122031, - 122038, 122045, 122050, 122055, 122060, 122065, 122070, 122077, 122084, - 122089, 122094, 122099, 122112, 122121, 122128, 122137, 122146, 0, 0, 0, - 0, 0, 122155, 122162, 122169, 122176, 122183, 122190, 122197, 122204, - 122211, 122218, 122225, 122232, 122239, 122246, 122253, 122260, 122267, - 122274, 122281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122288, - 122291, 122295, 122299, 122303, 122306, 122310, 122315, 122319, 122323, - 122327, 122331, 122335, 122340, 122345, 122349, 122353, 122356, 122360, - 122365, 122370, 122374, 122378, 122382, 122386, 122390, 122394, 122398, - 122402, 122406, 122410, 122413, 122417, 122421, 122425, 122429, 122433, - 122437, 122443, 122446, 122450, 122454, 122458, 122462, 122466, 122470, - 122474, 122478, 122482, 122487, 122492, 122498, 122502, 122506, 122510, - 122514, 122518, 122522, 122527, 122531, 122535, 122539, 122543, 122547, - 122553, 122557, 122561, 122565, 122569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 122573, 122577, 122581, 122587, 122593, 122597, 122602, 122607, 122612, - 122617, 122621, 122626, 122631, 122636, 122640, 122645, 122650, 122655, - 122659, 122664, 122669, 122674, 122679, 122684, 122689, 122694, 122699, - 122703, 122708, 122713, 122718, 122723, 122728, 122733, 122738, 122743, - 122748, 122753, 122758, 122765, 122770, 122777, 122782, 122787, 122792, - 122797, 122802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122807, - 122811, 122817, 122820, 122823, 122827, 122831, 122835, 122839, 122843, - 122847, 122851, 122857, 122863, 122869, 122875, 122881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122887, 122892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 129956, 129960, 129964, 129968, 129972, 129976, + 129980, 129983, 129987, 129991, 129995, 129999, 130002, 130008, 130013, + 130019, 130025, 130030, 130034, 130040, 130044, 130048, 130054, 130058, + 130062, 130066, 130070, 130074, 130078, 130081, 130087, 130093, 130099, + 130105, 130112, 130119, 130126, 130136, 130143, 130150, 130155, 130160, + 130165, 130170, 130177, 130184, 130191, 130198, 130207, 130213, 130220, + 130226, 130233, 130239, 130246, 130251, 130258, 130262, 130266, 130271, + 130277, 130283, 130290, 130297, 130303, 130310, 130313, 130319, 130323, + 130326, 130330, 130333, 130336, 130340, 130345, 130349, 130353, 130359, + 130364, 130370, 130374, 130378, 130381, 130385, 130389, 130394, 130398, + 130403, 130407, 130412, 130416, 130420, 130424, 130428, 130432, 130436, + 130440, 130444, 130449, 130454, 130459, 130464, 130470, 130476, 130482, + 130488, 130494, 0, 0, 0, 0, 0, 130499, 130507, 130516, 130524, 130531, + 130539, 130546, 130553, 130562, 130569, 130576, 130583, 130591, 0, 0, 0, + 130599, 130604, 130611, 130617, 130624, 130630, 130636, 130642, 130648, + 0, 0, 0, 0, 0, 0, 0, 130654, 130659, 130666, 130672, 130679, 130685, + 130691, 130697, 130703, 130709, 0, 0, 130714, 130720, 130726, 130729, + 130738, 130745, 130753, 130760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 130767, 130772, 130777, 130782, 130789, 130796, 130803, + 130810, 130815, 130820, 130825, 130830, 130837, 130842, 130849, 130856, + 130861, 130866, 130871, 130878, 130883, 130888, 130895, 130902, 130907, + 130912, 130917, 130924, 130931, 130938, 130943, 130948, 130955, 130962, + 130969, 130976, 130981, 130986, 130991, 130998, 131003, 131008, 131013, + 131020, 131029, 131036, 131041, 131046, 131051, 131056, 131061, 131066, + 131075, 131082, 131087, 131094, 131101, 131106, 131111, 131116, 131123, + 131128, 131135, 131142, 131147, 131152, 131157, 131164, 131171, 131176, + 131181, 131188, 131195, 131202, 131207, 131212, 131217, 131222, 131229, + 131238, 131247, 131252, 131259, 131268, 131273, 131278, 131283, 131288, + 131295, 131302, 131309, 131316, 131321, 131326, 131331, 131338, 131345, + 131352, 131357, 131362, 131369, 131374, 131381, 131386, 131393, 131398, + 131405, 131412, 131417, 131422, 131427, 131432, 131437, 131442, 131447, + 131452, 131457, 131464, 131471, 131478, 131485, 131492, 131501, 131506, + 131511, 131518, 131525, 131530, 131537, 131544, 131551, 131558, 131565, + 131572, 131577, 131582, 131587, 131592, 131597, 131606, 131615, 131624, + 131633, 131642, 131651, 131660, 131669, 131674, 131685, 131696, 131705, + 131710, 131715, 131720, 131725, 131734, 131741, 131748, 131755, 131762, + 131769, 131776, 131785, 131794, 131805, 131814, 131825, 131834, 131841, + 131850, 131861, 131870, 131879, 131888, 131897, 131904, 131911, 131918, + 131927, 131936, 131947, 131956, 131965, 131976, 131981, 131986, 131997, + 132005, 132014, 132023, 132032, 132043, 132052, 132061, 132072, 132083, + 132094, 132105, 132116, 132127, 132134, 132141, 132148, 132155, 132166, + 132175, 132182, 132189, 132196, 132207, 132218, 132229, 132240, 132251, + 132262, 132273, 132284, 132291, 132298, 132307, 132316, 132323, 132330, + 132337, 132346, 132355, 132364, 132371, 132380, 132389, 132398, 132405, + 132412, 132417, 132423, 132430, 132437, 132444, 132451, 132458, 132465, + 132474, 132483, 132492, 132501, 132508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 132517, 132523, 132528, 132533, 132540, 132546, 132552, 132558, 132564, + 132570, 132576, 132582, 132586, 132590, 132596, 132602, 132608, 132612, + 132617, 132622, 132626, 132630, 132633, 132639, 132645, 132651, 132657, + 132663, 132669, 132675, 132681, 132687, 132697, 132707, 132713, 132719, + 132729, 132739, 132745, 0, 0, 132751, 132759, 132764, 132769, 132775, + 132781, 132787, 132793, 132799, 132805, 132812, 132819, 132825, 132831, + 132837, 132843, 132849, 132855, 132861, 132867, 132872, 132878, 132884, + 132890, 132896, 132902, 132911, 132917, 132922, 132930, 132937, 132944, + 132953, 132962, 132971, 132980, 132989, 132998, 133007, 133016, 133026, + 133036, 133044, 133052, 133061, 133070, 133076, 133082, 133088, 133094, + 133102, 133110, 133114, 133120, 133125, 133131, 133137, 133143, 133149, + 133155, 133164, 133169, 133176, 133181, 133186, 133191, 133197, 133203, + 133209, 133216, 133221, 133226, 133231, 133236, 133241, 133247, 133253, + 133259, 133265, 133271, 133277, 133283, 133289, 133294, 133299, 133304, + 133309, 133314, 133319, 133324, 133329, 133335, 133341, 133346, 133351, + 133356, 133361, 133366, 133372, 133379, 133383, 133387, 133391, 133395, + 133399, 133403, 133407, 133411, 133419, 133429, 133433, 133437, 133443, + 133449, 133455, 133461, 133467, 133473, 133479, 133485, 133491, 133497, + 133503, 133509, 133515, 133521, 133525, 133529, 133536, 133542, 133548, + 133554, 133559, 133566, 133571, 133577, 133583, 133589, 133595, 133600, + 133604, 133610, 133614, 133618, 133622, 133628, 133634, 133638, 133644, + 133650, 133656, 133662, 133668, 133676, 133684, 133690, 133696, 133702, + 133708, 133720, 133732, 133746, 133758, 133770, 133784, 133798, 133812, + 133816, 133824, 133832, 133837, 133841, 133845, 133849, 133853, 133857, + 133861, 133865, 133871, 133877, 133883, 133889, 133897, 133906, 133913, + 133920, 133928, 133935, 133947, 133959, 133971, 133983, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133990, 133997, + 134004, 134011, 134018, 134025, 134032, 134039, 134046, 134053, 134060, + 134067, 134074, 134081, 134088, 134095, 134102, 134109, 134116, 134123, + 134130, 134137, 134144, 134151, 134158, 134165, 134172, 134179, 134186, + 134193, 134200, 134207, 134214, 134221, 134228, 134235, 134242, 134249, + 134256, 134263, 134270, 134277, 134284, 134291, 134298, 134305, 134312, + 134319, 134326, 134333, 134340, 134347, 134354, 134361, 134368, 134375, + 134382, 134389, 134396, 134403, 134410, 134417, 134424, 134431, 134438, + 134445, 134452, 134457, 134462, 134467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122898, 122902, 122906, 122910, - 122914, 122918, 122922, 122925, 122929, 122933, 122937, 122941, 122944, - 122950, 122955, 122961, 122967, 122972, 122976, 122982, 122986, 122990, - 122996, 123000, 123004, 123008, 123012, 123016, 123020, 123023, 123029, - 123035, 123041, 123047, 123054, 123061, 123068, 123078, 123085, 123092, - 123097, 123102, 123107, 123112, 123119, 123126, 123133, 123140, 123149, - 123155, 123162, 123168, 123175, 123181, 123188, 123193, 123200, 123204, - 123208, 123213, 123219, 123225, 123232, 123239, 123245, 123252, 123255, - 123261, 123265, 123268, 123272, 123275, 123278, 123282, 123287, 123291, - 123295, 123301, 123306, 123312, 123316, 123320, 123323, 123327, 123331, - 123336, 123340, 123345, 123349, 123354, 123358, 123362, 123366, 123370, - 123374, 123378, 123382, 123386, 123391, 123396, 123401, 123406, 123412, - 123418, 123424, 123430, 123436, 0, 0, 0, 0, 0, 123441, 123448, 123456, - 123463, 123470, 123478, 123485, 123492, 123501, 123508, 123515, 123522, - 123530, 0, 0, 0, 123538, 123543, 123550, 123556, 123563, 123569, 123575, - 123581, 123587, 0, 0, 0, 0, 0, 0, 0, 123593, 123598, 123605, 123611, - 123618, 123624, 123630, 123636, 123642, 123648, 0, 0, 123653, 123659, - 123665, 123668, 123677, 123684, 123692, 123699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 134471, 134476, 134483, 134490, 134497, 134504, + 134509, 134514, 134521, 134526, 134531, 134538, 134543, 134548, 134553, + 134560, 134569, 134574, 134579, 134584, 134589, 134594, 134599, 134606, + 134611, 134616, 134621, 134626, 134631, 134636, 134641, 134646, 134651, + 134656, 134661, 134666, 134672, 134677, 134682, 134687, 134692, 134697, + 134702, 134707, 134712, 134717, 134726, 134731, 134740, 134745, 134750, + 134755, 134760, 134765, 134770, 134775, 134784, 134789, 134794, 134799, + 134804, 134809, 134816, 134821, 134828, 134833, 134838, 134843, 134848, + 134853, 134858, 134863, 134868, 134873, 134878, 134883, 134888, 134893, + 134898, 134903, 134908, 134913, 134918, 134923, 134932, 134937, 134942, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 134947, 134955, 134963, 134971, 134979, + 134987, 134995, 135004, 135012, 135021, 135029, 135037, 135045, 135053, + 135061, 135069, 135078, 135086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123706, 123711, 123716, 123721, - 123728, 123735, 123742, 123749, 123754, 123759, 123764, 123769, 123776, - 123781, 123788, 123795, 123800, 123805, 123810, 123817, 123822, 123827, - 123834, 123841, 123846, 123851, 123856, 123863, 123870, 123877, 123882, - 123887, 123894, 123901, 123908, 123915, 123920, 123925, 123930, 123937, - 123942, 123947, 123952, 123959, 123968, 123975, 123980, 123985, 123990, - 123995, 124000, 124005, 124014, 124021, 124026, 124033, 124040, 124045, - 124050, 124055, 124062, 124067, 124074, 124081, 124086, 124091, 124096, - 124103, 124110, 124115, 124120, 124127, 124134, 124141, 124146, 124151, - 124156, 124161, 124168, 124177, 124186, 124191, 124198, 124207, 124212, - 124217, 124222, 124227, 124234, 124241, 124248, 124255, 124260, 124265, - 124270, 124277, 124284, 124291, 124296, 124301, 124308, 124313, 124320, - 124325, 124332, 124337, 124344, 124351, 124356, 124361, 124366, 124371, - 124376, 124381, 124386, 124391, 124396, 124403, 124410, 124417, 124424, - 124431, 124440, 124445, 124450, 124457, 124464, 124469, 124476, 124483, - 124490, 124497, 124504, 124511, 124516, 124521, 124526, 124531, 124536, - 124545, 124554, 124563, 124572, 124581, 124590, 124599, 124608, 124613, - 124624, 124635, 124644, 124649, 124654, 124659, 124664, 124673, 124680, - 124687, 124694, 124701, 124708, 124715, 124724, 124733, 124744, 124753, - 124764, 124773, 124780, 124789, 124800, 124809, 124818, 124827, 124836, - 124843, 124850, 124857, 124866, 124875, 124886, 124895, 124904, 124915, - 124920, 124925, 124936, 124944, 124953, 124962, 124971, 124982, 124991, - 125000, 125011, 125022, 125033, 125044, 125055, 125066, 125073, 125080, - 125087, 125094, 125105, 125114, 125121, 125128, 125135, 125146, 125157, - 125168, 125179, 125190, 125201, 125212, 125223, 125230, 125237, 125246, - 125255, 125262, 125269, 125276, 125285, 125294, 125303, 125310, 125319, - 125328, 125337, 125344, 125351, 125356, 125362, 125369, 125376, 125383, - 125390, 125397, 125404, 125413, 125422, 125431, 125440, 125447, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 125456, 125462, 125467, 125472, 125479, 125485, - 125491, 125497, 125503, 125509, 125515, 125521, 125525, 125529, 125535, - 125541, 125547, 125551, 125556, 125561, 125565, 125569, 125572, 125578, - 125584, 125590, 125596, 125602, 125608, 125614, 125620, 125626, 125636, - 125646, 125652, 125658, 125668, 125678, 125684, 0, 0, 125690, 125698, - 125703, 125708, 125714, 125720, 125726, 125732, 125738, 125744, 125751, - 125758, 125764, 125770, 125776, 125782, 125788, 125794, 125800, 125806, - 125811, 125817, 125823, 125829, 125835, 125841, 125850, 125856, 125861, - 125869, 125876, 125883, 125892, 125901, 125910, 125919, 125928, 125937, - 125946, 125955, 125965, 125975, 125983, 125991, 126000, 126009, 126015, - 126021, 126027, 126033, 126041, 126049, 126053, 126059, 126064, 126070, - 126076, 126082, 126088, 126094, 126103, 126108, 126115, 126120, 126125, - 126130, 126136, 126142, 126148, 126155, 126160, 126165, 126170, 126175, - 126180, 126186, 126192, 126198, 126204, 126210, 126216, 126222, 126228, - 126233, 126238, 126243, 126248, 126253, 126258, 126263, 126268, 126274, - 126280, 126285, 126290, 126295, 126300, 126305, 126311, 126318, 126322, - 126326, 126330, 126334, 126338, 126342, 126346, 126350, 126358, 126368, - 126372, 126376, 126382, 126388, 126394, 126400, 126406, 126412, 126418, - 126424, 126430, 126436, 126442, 126448, 126454, 126460, 126464, 126468, - 126475, 126481, 126487, 126493, 126498, 126505, 126510, 126516, 126522, - 126528, 126534, 126539, 126543, 126549, 126553, 126557, 126561, 126567, - 126573, 126577, 126583, 126589, 126595, 126601, 126607, 126615, 126623, - 126629, 126635, 126641, 126647, 126659, 126671, 126685, 126697, 126709, - 126723, 126737, 126751, 126755, 126763, 126771, 126776, 126780, 126784, - 126788, 126792, 126796, 126800, 126804, 126810, 126816, 126822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126828, 126835, 126842, 126849, 126856, 126863, - 126870, 126877, 126884, 126891, 126898, 126905, 126912, 126919, 126926, - 126933, 126940, 126947, 126954, 126961, 126968, 126975, 126982, 126989, - 126996, 127003, 127010, 127017, 127024, 127031, 127038, 127045, 127052, - 127059, 127066, 127073, 127080, 127087, 127094, 127101, 127108, 127115, - 127122, 127129, 127136, 127143, 127150, 127157, 127164, 127171, 127178, - 127185, 127192, 127199, 127206, 127213, 127220, 127227, 127234, 127241, - 127248, 127255, 127262, 127269, 127276, 127283, 127290, 127295, 127300, - 127305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 135095, 135099, 135104, 135109, 135114, 135118, + 135123, 135128, 135133, 135137, 135142, 135147, 135151, 135156, 135161, + 135165, 135170, 135175, 135179, 135183, 135188, 135192, 135197, 135202, + 135207, 135212, 135217, 135221, 135226, 135231, 135236, 135240, 135245, + 135250, 135255, 135259, 135264, 135269, 135273, 135278, 135283, 135287, + 135292, 135297, 135301, 135305, 135310, 135314, 135319, 135324, 135329, + 135334, 135339, 135343, 135348, 135353, 135358, 135362, 135367, 135372, + 135377, 135381, 135386, 135391, 135395, 135400, 135405, 135409, 135414, + 135419, 135423, 135427, 135432, 135436, 135441, 135446, 135451, 135456, + 135461, 135465, 135470, 135475, 135480, 135484, 135489, 0, 135494, + 135498, 135503, 135508, 135512, 135517, 135522, 135526, 135531, 135536, + 135540, 135544, 135549, 135553, 135558, 135563, 135568, 135573, 135578, + 135583, 135589, 135595, 135601, 135606, 135612, 135618, 135624, 135629, + 135635, 135641, 135646, 135652, 135658, 135663, 135669, 135675, 135680, + 135685, 135691, 135696, 135702, 135708, 135714, 135720, 135726, 135731, + 135737, 135743, 135749, 135754, 135760, 135766, 135772, 135777, 135783, + 135789, 135794, 135800, 135806, 135811, 135817, 135823, 135828, 135833, + 135839, 135844, 135850, 135856, 135862, 135868, 135874, 0, 135878, + 135883, 0, 0, 135888, 0, 0, 135893, 135898, 0, 0, 135903, 135908, 135912, + 135917, 0, 135922, 135926, 135931, 135935, 135940, 135945, 135950, + 135955, 135960, 135964, 135969, 135974, 0, 135979, 0, 135984, 135989, + 135993, 135998, 136003, 136007, 136012, 0, 136017, 136022, 136027, + 136031, 136035, 136040, 136044, 136049, 136054, 136059, 136064, 136069, + 136074, 136080, 136086, 136092, 136097, 136103, 136109, 136115, 136120, + 136126, 136132, 136137, 136143, 136149, 136154, 136160, 136166, 136171, + 136176, 136182, 136187, 136193, 136199, 136205, 136211, 136217, 136222, + 136228, 136234, 136240, 136245, 136251, 136257, 136263, 136268, 136274, + 136280, 136285, 136291, 136297, 136302, 136308, 136314, 136319, 136324, + 136330, 136335, 136341, 136347, 136353, 136359, 136365, 136369, 0, + 136374, 136379, 136383, 136388, 0, 0, 136393, 136398, 136403, 136407, + 136412, 136417, 136421, 136426, 0, 136431, 136435, 136440, 136444, + 136449, 136454, 136459, 0, 136464, 136468, 136473, 136478, 136483, + 136487, 136492, 136497, 136502, 136506, 136511, 136516, 136520, 136525, + 136530, 136534, 136539, 136544, 136548, 136552, 136557, 136561, 136566, + 136571, 136576, 136581, 136586, 136590, 0, 136595, 136600, 136604, + 136609, 0, 136614, 136618, 136623, 136628, 136632, 0, 136637, 0, 0, 0, + 136641, 136645, 136650, 136654, 136659, 136664, 136669, 0, 136674, + 136678, 136683, 136688, 136693, 136697, 136702, 136707, 136712, 136716, + 136721, 136726, 136730, 136735, 136740, 136744, 136749, 136754, 136758, + 136762, 136767, 136771, 136776, 136781, 136786, 136791, 136796, 136801, + 136807, 136813, 136819, 136824, 136830, 136836, 136842, 136847, 136853, + 136859, 136864, 136870, 136876, 136881, 136887, 136893, 136898, 136903, + 136909, 136914, 136920, 136926, 136932, 136938, 136944, 136949, 136955, + 136961, 136967, 136972, 136978, 136984, 136990, 136995, 137001, 137007, + 137012, 137018, 137024, 137029, 137035, 137041, 137046, 137051, 137057, + 137062, 137068, 137074, 137080, 137086, 137092, 137096, 137101, 137106, + 137111, 137115, 137120, 137125, 137130, 137134, 137139, 137144, 137148, + 137153, 137158, 137162, 137167, 137172, 137176, 137180, 137185, 137189, + 137194, 137199, 137204, 137209, 137214, 137218, 137223, 137228, 137233, + 137237, 137242, 137247, 137252, 137256, 137261, 137266, 137270, 137275, + 137280, 137284, 137289, 137294, 137298, 137302, 137307, 137311, 137316, + 137321, 137326, 137331, 137336, 137341, 137347, 137353, 137359, 137364, + 137370, 137376, 137382, 137387, 137393, 137399, 137404, 137410, 137416, + 137421, 137427, 137433, 137438, 137443, 137449, 137454, 137460, 137466, + 137472, 137478, 137484, 137489, 137495, 137501, 137507, 137512, 137518, + 137524, 137530, 137535, 137541, 137547, 137552, 137558, 137564, 137569, + 137575, 137581, 137586, 137591, 137597, 137602, 137608, 137614, 137620, + 137626, 137632, 137637, 137643, 137649, 137655, 137660, 137666, 137672, + 137678, 137683, 137689, 137695, 137700, 137706, 137712, 137717, 137723, + 137729, 137734, 137739, 137745, 137750, 137756, 137762, 137768, 137774, + 137780, 137785, 137791, 137797, 137803, 137808, 137814, 137820, 137826, + 137831, 137837, 137843, 137848, 137854, 137860, 137865, 137871, 137877, + 137882, 137887, 137893, 137898, 137904, 137910, 137916, 137922, 137928, + 137934, 137941, 137948, 137955, 137961, 137968, 137975, 137982, 137988, + 137995, 138002, 138008, 138015, 138022, 138028, 138035, 138042, 138048, + 138054, 138061, 138067, 138074, 138081, 138088, 138095, 138102, 138108, + 138115, 138122, 138129, 138135, 138142, 138149, 138156, 138162, 138169, + 138176, 138182, 138189, 138196, 138202, 138209, 138216, 138222, 138228, + 138235, 138241, 138248, 138255, 138262, 138269, 138276, 138281, 138287, + 138293, 138299, 138304, 138310, 138316, 138322, 138327, 138333, 138339, + 138344, 138350, 138356, 138361, 138367, 138373, 138378, 138383, 138389, + 138394, 138400, 138406, 138412, 138418, 138424, 138429, 138435, 138441, + 138447, 138452, 138458, 138464, 138470, 138475, 138481, 138487, 138492, + 138498, 138504, 138509, 138515, 138521, 138526, 138531, 138537, 138542, + 138548, 138554, 138560, 138566, 138572, 138578, 0, 0, 138585, 138590, + 138595, 138600, 138605, 138610, 138615, 138620, 138625, 138630, 138635, + 138640, 138645, 138650, 138655, 138660, 138665, 138670, 138676, 138681, + 138686, 138691, 138696, 138701, 138706, 138711, 138715, 138720, 138725, + 138730, 138735, 138740, 138745, 138750, 138755, 138760, 138765, 138770, + 138775, 138780, 138785, 138790, 138795, 138800, 138806, 138811, 138816, + 138821, 138826, 138831, 138836, 138841, 138847, 138852, 138857, 138862, + 138867, 138872, 138877, 138882, 138887, 138892, 138897, 138902, 138907, + 138912, 138917, 138922, 138927, 138932, 138937, 138942, 138947, 138952, + 138957, 138962, 138968, 138973, 138978, 138983, 138988, 138993, 138998, + 139003, 139007, 139012, 139017, 139022, 139027, 139032, 139037, 139042, + 139047, 139052, 139057, 139062, 139067, 139072, 139077, 139082, 139087, + 139092, 139098, 139103, 139108, 139113, 139118, 139123, 139128, 139133, + 139139, 139144, 139149, 139154, 139159, 139164, 139169, 139175, 139181, + 139187, 139193, 139199, 139205, 139211, 139217, 139223, 139229, 139235, + 139241, 139247, 139253, 139259, 139265, 139271, 139278, 139284, 139290, + 139296, 139302, 139308, 139314, 139320, 139325, 139331, 139337, 139343, + 139349, 139355, 139361, 139367, 139373, 139379, 139385, 139391, 139397, + 139403, 139409, 139415, 139421, 139427, 139434, 139440, 139446, 139452, + 139458, 139464, 139470, 139476, 139483, 139489, 139495, 139501, 139507, + 139513, 139519, 139525, 139531, 139537, 139543, 139549, 139555, 139561, + 139567, 139573, 139579, 139585, 139591, 139597, 139603, 139609, 139615, + 139621, 139628, 139634, 139640, 139646, 139652, 139658, 139664, 139670, + 139675, 139681, 139687, 139693, 139699, 139705, 139711, 139717, 139723, + 139729, 139735, 139741, 139747, 139753, 139759, 139765, 139771, 139777, + 139784, 139790, 139796, 139802, 139808, 139814, 139820, 139826, 139833, + 139839, 139845, 139851, 139857, 139863, 139869, 139876, 139883, 139890, + 139897, 139904, 139911, 139918, 139925, 139932, 139939, 139946, 139953, + 139960, 139967, 139974, 139981, 139988, 139996, 140003, 140010, 140017, + 140024, 140031, 140038, 140045, 140051, 140058, 140065, 140072, 140079, + 140086, 140093, 140100, 140107, 140114, 140121, 140128, 140135, 140142, + 140149, 140156, 140163, 140170, 140178, 140185, 140192, 140199, 140206, + 140213, 140220, 140227, 140235, 140242, 140249, 140256, 140263, 140270, + 140277, 140282, 0, 0, 140287, 140292, 140296, 140300, 140304, 140308, + 140312, 140316, 140321, 140325, 140330, 140335, 140339, 140343, 140347, + 140351, 140355, 140359, 140364, 140368, 140373, 140378, 140382, 140386, + 140390, 140394, 140398, 140402, 140407, 140411, 140416, 140422, 140427, + 140432, 140437, 140442, 140447, 140452, 140458, 140463, 140469, 140475, + 140480, 140485, 140490, 140495, 140500, 140505, 140511, 140516, 140522, + 140526, 140531, 140536, 140541, 140546, 140551, 140556, 140562, 140570, + 140577, 140582, 140587, 140594, 140600, 140605, 140611, 140617, 140625, + 140631, 140638, 140646, 140652, 140661, 140670, 140678, 140686, 140692, + 140699, 140707, 140715, 140721, 140728, 140737, 140746, 140753, 140764, + 140774, 140784, 140794, 140804, 140811, 140818, 140825, 140832, 140841, + 140850, 140861, 140872, 140881, 140890, 140901, 140910, 140919, 140930, + 140939, 140948, 140956, 140964, 140975, 140986, 140994, 141003, 141012, + 141019, 141030, 141041, 141050, 141059, 141066, 141075, 141084, 141093, + 141104, 141113, 141123, 141132, 141141, 141152, 141165, 141180, 141191, + 141204, 141216, 141225, 141236, 141247, 141256, 141267, 141281, 141296, + 141299, 141308, 141313, 141319, 141327, 141333, 141339, 141348, 141355, + 141365, 141377, 141384, 141387, 141393, 141400, 141406, 141411, 141414, + 141419, 141422, 141429, 141435, 141443, 141450, 141457, 141463, 141468, + 141471, 141474, 141477, 141483, 141490, 141496, 141501, 141508, 141511, + 141516, 141523, 141529, 141537, 141544, 141554, 141563, 141566, 141572, + 141579, 141586, 141593, 141598, 141606, 141614, 141623, 141629, 141638, + 141647, 141656, 141662, 141671, 141678, 141685, 141692, 141700, 141706, + 141714, 141720, 141727, 141734, 141742, 141753, 141763, 141769, 141776, + 141783, 141790, 141796, 141803, 141810, 141815, 141822, 141830, 141839, + 141845, 141857, 141868, 141874, 141882, 141888, 141895, 141902, 141909, + 141915, 141922, 141931, 141937, 141943, 141950, 141957, 141965, 141975, + 141985, 141995, 142005, 142013, 142021, 142031, 142039, 142044, 142049, + 142054, 142060, 142067, 142074, 142080, 142086, 142091, 142098, 142106, + 142116, 142124, 142132, 142142, 142152, 142160, 142170, 142180, 142192, + 142204, 142216, 142226, 142232, 142238, 142245, 142254, 142263, 142272, + 142281, 142291, 142300, 142309, 142318, 142323, 142329, 142338, 142348, + 142357, 142363, 142369, 142376, 142383, 142390, 142396, 142403, 142410, + 142417, 142423, 142427, 142432, 142439, 142446, 142453, 142458, 142466, + 142474, 142483, 142491, 142498, 142506, 142515, 142525, 142528, 142532, + 142537, 142542, 142547, 142552, 142557, 142562, 142567, 142572, 142577, + 142582, 142587, 142592, 142597, 142602, 142607, 142612, 142617, 142624, + 142630, 142637, 142643, 142648, 142655, 142661, 142668, 142674, 142679, + 142686, 142693, 142700, 142706, 142712, 142721, 142730, 142741, 142748, + 142755, 142764, 142773, 142782, 142791, 142800, 142806, 142814, 142820, + 142830, 142835, 142844, 142853, 142860, 142871, 142878, 142885, 142892, + 142899, 142906, 142913, 142920, 142927, 142934, 142941, 142947, 142953, + 142959, 142966, 142973, 142980, 142987, 142994, 143001, 143008, 143015, + 143022, 143029, 143036, 143043, 143048, 143057, 143066, 143075, 143082, + 143089, 143096, 143103, 143110, 143117, 143124, 143131, 143140, 143149, + 143158, 143167, 143176, 143185, 143194, 143203, 143212, 143221, 143230, + 143239, 143248, 143254, 143262, 143268, 143278, 143283, 143292, 143301, + 143310, 143321, 143326, 143333, 143340, 143347, 143352, 143358, 143364, + 143370, 143377, 143384, 143391, 143398, 143405, 143412, 143419, 143426, + 143433, 143440, 143447, 143454, 143459, 143468, 143477, 143486, 143495, + 143504, 143513, 143522, 143531, 143542, 143553, 143560, 143567, 143574, + 143581, 143588, 143595, 143603, 143613, 143623, 143633, 143644, 143655, + 143666, 143675, 143684, 143693, 143698, 143703, 143708, 143713, 143724, + 143735, 143746, 143757, 143768, 143778, 143789, 143798, 143807, 143816, + 143825, 143834, 143842, 143851, 143862, 143873, 143884, 143895, 143906, + 143918, 143931, 143943, 143956, 143968, 143981, 143993, 144006, 144017, + 144028, 144037, 144045, 144054, 144065, 144076, 144088, 144101, 144115, + 144130, 144142, 144155, 144167, 144180, 144191, 144202, 144211, 144219, + 144228, 144235, 144242, 144249, 144256, 144263, 144270, 144277, 144284, + 144291, 144298, 144303, 144308, 144313, 144320, 144330, 144341, 144351, + 144362, 144376, 144391, 144406, 144420, 144435, 144450, 144461, 144472, + 144485, 144498, 144507, 144516, 144529, 144542, 144549, 144556, 144561, + 144566, 144571, 144576, 144581, 144588, 144597, 144602, 144605, 144610, + 144617, 144624, 144631, 144638, 144645, 144652, 144665, 144679, 144694, + 144701, 144708, 144715, 144724, 144732, 144740, 144749, 144754, 144759, + 144764, 144769, 144774, 144779, 144786, 144793, 144799, 144806, 144812, + 144819, 144824, 144829, 144834, 144839, 144844, 144851, 144858, 144863, + 144870, 144877, 144882, 144887, 144892, 144897, 144902, 144907, 144914, + 144921, 144928, 144931, 144936, 144941, 144946, 144951, 144958, 144965, + 144973, 144981, 144986, 144991, 144998, 145005, 145012, 145017, 145024, + 145031, 145036, 145043, 145050, 145056, 145062, 145068, 145074, 145082, + 145090, 145096, 145104, 145112, 145117, 145124, 145131, 145136, 145143, + 145150, 145157, 145165, 145173, 145178, 145185, 145192, 145201, 145208, + 145217, 145228, 145237, 145246, 145255, 145264, 145267, 145272, 145279, + 145288, 145295, 145304, 145311, 145316, 145321, 145324, 145327, 145330, + 145337, 145344, 145353, 145362, 145371, 145378, 145385, 145390, 145403, + 145408, 145413, 145418, 145423, 145428, 145433, 145438, 145443, 145446, + 145451, 145456, 145461, 145466, 145471, 145478, 145483, 145490, 145493, + 145498, 145501, 145504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 145507, 145512, 145517, 145522, 145527, 0, 145532, 145537, 145542, + 145547, 145552, 145557, 145562, 145567, 145572, 145577, 145582, 145587, + 145592, 145597, 145602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145607, 145614, 145620, + 145627, 145634, 145641, 145648, 145655, 145662, 145669, 145676, 145683, + 145690, 145697, 145704, 145711, 145718, 145725, 145732, 145739, 145746, + 145753, 145760, 145767, 145774, 145781, 145788, 145795, 145802, 145809, + 145816, 145823, 145830, 145837, 145844, 145850, 145856, 145862, 145869, + 145875, 145882, 145888, 145895, 145902, 145909, 145916, 145923, 145930, + 145937, 145944, 145951, 145958, 145965, 145972, 145979, 145986, 145993, + 146000, 146007, 146014, 146021, 146028, 146036, 146043, 146050, 146057, + 146064, 146071, 146078, 146085, 146092, 146099, 146106, 146113, 146120, + 146126, 146133, 146140, 146147, 146154, 146161, 146168, 146175, 146183, + 146190, 146196, 146203, 146210, 146217, 146224, 146231, 146238, 146245, + 146252, 146259, 146266, 146273, 146280, 146287, 146294, 146301, 146308, + 146315, 146322, 146329, 146336, 146342, 146349, 146356, 146363, 146370, + 146377, 146384, 146391, 146398, 146405, 146412, 146419, 146426, 146433, + 146440, 146447, 146454, 146461, 146468, 146475, 146482, 146489, 146496, + 146504, 146512, 146520, 146527, 146534, 146541, 146548, 146555, 146562, + 146569, 146576, 146583, 146590, 146596, 146603, 146610, 146617, 146624, + 146631, 146638, 146645, 146652, 146659, 146666, 146673, 146680, 146687, + 146694, 146702, 146710, 146718, 146725, 146732, 146739, 146746, 146753, + 146760, 146767, 146774, 146781, 146788, 146795, 146802, 146809, 146816, + 146823, 146830, 146837, 146844, 146851, 146858, 146865, 146872, 146879, + 146886, 146893, 146900, 146907, 146914, 146921, 146928, 146935, 146942, + 146949, 146956, 146963, 146970, 146977, 0, 0, 146984, 146988, 146992, + 146996, 147000, 147004, 147008, 147013, 147017, 147022, 147028, 147034, + 147040, 147046, 147054, 147062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127309, - 127314, 127321, 127328, 127335, 127342, 127347, 127352, 127359, 127364, - 127369, 127376, 127381, 127386, 127391, 127398, 127407, 127412, 127417, - 127422, 127427, 127432, 127437, 127444, 127449, 127454, 127459, 127464, - 127469, 127474, 127479, 127484, 127489, 127494, 127499, 127504, 127510, - 127515, 127520, 127525, 127530, 127535, 127540, 127545, 127550, 127555, - 127564, 127569, 127578, 127583, 127588, 127593, 127598, 127603, 127608, - 127613, 127622, 127627, 127632, 127637, 127642, 127647, 127654, 127659, - 127666, 127671, 127676, 127681, 127686, 127691, 127696, 127701, 127706, - 127711, 127716, 127721, 127726, 127731, 127736, 127741, 127746, 127751, - 127756, 127761, 127770, 127775, 127780, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 127785, 127793, 127801, 127809, 127817, 127825, 127833, 127841, 127849, - 127857, 127865, 127873, 127881, 127889, 127897, 127905, 127913, 127921, + 0, 0, 0, 147068, 147072, 147076, 147080, 0, 147084, 147088, 147092, + 147096, 147100, 147104, 147108, 147112, 147116, 147120, 147124, 147128, + 147132, 147136, 147140, 147144, 147148, 147152, 147156, 147160, 147164, + 147168, 147172, 147176, 147182, 147188, 147194, 0, 147200, 147205, 0, + 147210, 0, 0, 147215, 0, 147220, 147225, 147230, 147235, 147240, 147245, + 147250, 147255, 147260, 147265, 0, 147270, 147275, 147280, 147285, 0, + 147290, 0, 147295, 0, 0, 0, 0, 0, 0, 147300, 0, 0, 0, 0, 147306, 0, + 147312, 0, 147318, 0, 147324, 147330, 147336, 0, 147342, 147348, 0, + 147354, 0, 0, 147360, 0, 147366, 0, 147372, 0, 147378, 0, 147386, 0, + 147394, 147400, 0, 147406, 0, 0, 147412, 147418, 147424, 147430, 0, + 147436, 147442, 147448, 147454, 147460, 147466, 147472, 0, 147478, + 147484, 147490, 147496, 0, 147502, 147508, 147514, 147520, 0, 147528, 0, + 147536, 147542, 147548, 147554, 147560, 147566, 147572, 147578, 147584, + 147590, 0, 147596, 147602, 147608, 147614, 147620, 147626, 147632, + 147638, 147644, 147650, 147656, 147662, 147668, 147674, 147680, 147686, + 147692, 0, 0, 0, 0, 0, 147698, 147703, 147708, 0, 147713, 147718, 147723, + 147728, 147733, 0, 147738, 147743, 147748, 147753, 147758, 147763, + 147768, 147773, 147778, 147783, 147788, 147793, 147798, 147803, 147808, + 147813, 147818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 147823, 147833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 147841, 147848, 147855, 147862, 147868, 147875, 147882, + 147888, 147895, 147902, 147909, 147917, 147925, 147933, 147941, 147949, + 147957, 147964, 147971, 147978, 147986, 147994, 148002, 148010, 148018, + 148026, 148033, 148040, 148047, 148055, 148063, 148071, 148079, 148087, + 148095, 148100, 148105, 148110, 148115, 148120, 148125, 148130, 148135, + 148140, 0, 0, 0, 0, 148145, 148151, 148155, 148159, 148163, 148167, + 148171, 148175, 148179, 148183, 148187, 148191, 148195, 148199, 148203, + 148207, 148211, 148215, 148219, 148223, 148227, 148231, 148235, 148239, + 148243, 148247, 148251, 148255, 148259, 148263, 148267, 148271, 148275, + 148279, 148283, 148287, 148291, 148295, 148299, 148303, 148307, 148311, + 148315, 148319, 148323, 148327, 148331, 148335, 148339, 148343, 148347, + 148352, 148356, 148360, 148364, 148368, 148372, 148376, 148380, 148384, + 148388, 148392, 148396, 148400, 148404, 148408, 148412, 148416, 148420, + 148424, 148428, 148432, 148436, 148440, 148444, 148448, 148452, 148456, + 148460, 148464, 148468, 148472, 148476, 148480, 148484, 148488, 148492, + 148496, 148500, 148504, 148508, 148512, 148516, 148520, 148524, 148528, + 148532, 148536, 148540, 148544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 148548, 148554, 148563, 148571, 148579, 148588, 148597, 148606, 148615, + 148624, 148633, 148642, 148651, 148660, 148669, 0, 0, 148678, 148687, + 148695, 148703, 148712, 148721, 148730, 148739, 148748, 148757, 148766, + 148775, 148784, 148793, 148802, 0, 148810, 148819, 148827, 148835, + 148844, 148853, 148862, 148871, 148880, 148889, 148898, 148907, 148916, + 148925, 148934, 0, 148941, 148950, 148958, 148966, 148975, 148984, + 148993, 149002, 149011, 149020, 149029, 149038, 149047, 149056, 149065, + 149072, 149078, 149084, 149090, 149096, 149102, 149108, 149114, 149120, + 149126, 149132, 149138, 149144, 149150, 149156, 149162, 149168, 149174, + 149180, 149186, 149192, 149198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149204, + 149211, 149216, 149220, 149224, 149228, 149233, 149238, 149243, 149248, + 149253, 149258, 149265, 0, 0, 0, 149273, 149278, 149284, 149290, 149296, + 149301, 149307, 149313, 149319, 149324, 149330, 149336, 149341, 149347, + 149353, 149358, 149364, 149370, 149375, 149380, 149386, 149391, 149397, + 149403, 149409, 149415, 149421, 149431, 149438, 149444, 149447, 0, + 149450, 149455, 149461, 149467, 149473, 149478, 149484, 149490, 149496, + 149501, 149507, 149513, 149518, 149524, 149530, 149535, 149541, 149547, + 149552, 149557, 149563, 149568, 149574, 149580, 149586, 149592, 149598, + 149601, 149604, 149607, 149610, 149613, 149616, 149622, 149629, 149636, + 149643, 149649, 149656, 149663, 149670, 149676, 149683, 149690, 149696, + 149703, 149710, 149716, 149723, 149730, 149736, 149742, 149749, 149755, + 149762, 149769, 149776, 149783, 149790, 149795, 0, 0, 0, 0, 149800, + 149806, 149813, 149820, 149827, 149833, 149840, 149847, 149854, 149860, + 149867, 149874, 149880, 149887, 149894, 149900, 149907, 149914, 149920, + 149926, 149933, 149939, 149946, 149953, 149960, 149967, 149974, 149983, + 149987, 149990, 149994, 149998, 150002, 150005, 150008, 150011, 150014, + 150017, 150020, 150023, 150026, 150029, 150035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150038, 150045, + 150053, 150061, 150069, 150076, 150084, 150092, 150100, 150107, 150115, + 150123, 150130, 150138, 150146, 150153, 150161, 150169, 150176, 150183, + 150191, 150198, 150206, 150214, 150222, 150230, 150238, 150242, 150246, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150250, 150256, 150262, 150268, + 150272, 150278, 150284, 150290, 150296, 150302, 150308, 150314, 150320, + 150326, 150332, 150338, 150344, 150350, 150356, 150362, 150368, 150374, + 150380, 150386, 150392, 150398, 150404, 150410, 150416, 150422, 150428, + 150434, 150440, 150446, 150452, 150458, 150464, 150470, 150476, 150482, + 150488, 150494, 150500, 0, 0, 0, 0, 0, 150506, 150517, 150528, 150539, + 150550, 150561, 150572, 150583, 150594, 0, 0, 0, 0, 0, 0, 0, 150605, + 150609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127929, - 127933, 127938, 127943, 127948, 127952, 127957, 127962, 127967, 127971, - 127976, 127981, 127985, 127990, 127995, 127999, 128004, 128009, 128013, - 128017, 128022, 128026, 128031, 128036, 128041, 128046, 128051, 128055, - 128060, 128065, 128070, 128074, 128079, 128084, 128089, 128093, 128098, - 128103, 128107, 128112, 128117, 128121, 128126, 128131, 128135, 128139, - 128144, 128148, 128153, 128158, 128163, 128168, 128173, 128177, 128182, - 128187, 128192, 128196, 128201, 128206, 128211, 128215, 128220, 128225, - 128229, 128234, 128239, 128243, 128248, 128253, 128257, 128261, 128266, - 128270, 128275, 128280, 128285, 128290, 128295, 128299, 128304, 128309, - 128314, 128318, 128323, 0, 128328, 128332, 128337, 128342, 128346, - 128351, 128356, 128360, 128365, 128370, 128374, 128378, 128383, 128387, - 128392, 128397, 128402, 128407, 128412, 128417, 128423, 128429, 128435, - 128440, 128446, 128452, 128458, 128463, 128469, 128475, 128480, 128486, - 128492, 128497, 128503, 128509, 128514, 128519, 128525, 128530, 128536, - 128542, 128548, 128554, 128560, 128565, 128571, 128577, 128583, 128588, - 128594, 128600, 128606, 128611, 128617, 128623, 128628, 128634, 128640, - 128645, 128651, 128657, 128662, 128667, 128673, 128678, 128684, 128690, - 128696, 128702, 128708, 0, 128712, 128717, 0, 0, 128722, 0, 0, 128727, - 128732, 0, 0, 128737, 128742, 128746, 128751, 0, 128756, 128760, 128765, - 128769, 128774, 128779, 128784, 128789, 128794, 128798, 128803, 128808, - 0, 128813, 0, 128818, 128823, 128827, 128832, 128837, 128841, 128846, 0, - 128851, 128856, 128861, 128865, 128869, 128874, 128878, 128883, 128888, - 128893, 128898, 128903, 128908, 128914, 128920, 128926, 128931, 128937, - 128943, 128949, 128954, 128960, 128966, 128971, 128977, 128983, 128988, - 128994, 129000, 129005, 129010, 129016, 129021, 129027, 129033, 129039, - 129045, 129051, 129056, 129062, 129068, 129074, 129079, 129085, 129091, - 129097, 129102, 129108, 129114, 129119, 129125, 129131, 129136, 129142, - 129148, 129153, 129158, 129164, 129169, 129175, 129181, 129187, 129193, - 129199, 129203, 0, 129208, 129213, 129217, 129222, 0, 0, 129227, 129232, - 129237, 129241, 129246, 129251, 129255, 129260, 0, 129265, 129269, - 129274, 129278, 129283, 129288, 129293, 0, 129298, 129302, 129307, - 129312, 129317, 129321, 129326, 129331, 129336, 129340, 129345, 129350, - 129354, 129359, 129364, 129368, 129373, 129378, 129382, 129386, 129391, - 129395, 129400, 129405, 129410, 129415, 129420, 129424, 0, 129429, - 129434, 129438, 129443, 0, 129448, 129452, 129457, 129462, 129466, 0, - 129471, 0, 0, 0, 129475, 129479, 129484, 129488, 129493, 129498, 129503, - 0, 129508, 129512, 129517, 129522, 129527, 129531, 129536, 129541, - 129546, 129550, 129555, 129560, 129564, 129569, 129574, 129578, 129583, - 129588, 129592, 129596, 129601, 129605, 129610, 129615, 129620, 129625, - 129630, 129635, 129641, 129647, 129653, 129658, 129664, 129670, 129676, - 129681, 129687, 129693, 129698, 129704, 129710, 129715, 129721, 129727, - 129732, 129737, 129743, 129748, 129754, 129760, 129766, 129772, 129778, - 129783, 129789, 129795, 129801, 129806, 129812, 129818, 129824, 129829, - 129835, 129841, 129846, 129852, 129858, 129863, 129869, 129875, 129880, - 129885, 129891, 129896, 129902, 129908, 129914, 129920, 129926, 129930, - 129935, 129940, 129945, 129949, 129954, 129959, 129964, 129968, 129973, - 129978, 129982, 129987, 129992, 129996, 130001, 130006, 130010, 130014, - 130019, 130023, 130028, 130033, 130038, 130043, 130048, 130052, 130057, - 130062, 130067, 130071, 130076, 130081, 130086, 130090, 130095, 130100, - 130104, 130109, 130114, 130118, 130123, 130128, 130132, 130136, 130141, - 130145, 130150, 130155, 130160, 130165, 130170, 130175, 130181, 130187, - 130193, 130198, 130204, 130210, 130216, 130221, 130227, 130233, 130238, - 130244, 130250, 130255, 130261, 130267, 130272, 130277, 130283, 130288, - 130294, 130300, 130306, 130312, 130318, 130323, 130329, 130335, 130341, - 130346, 130352, 130358, 130364, 130369, 130375, 130381, 130386, 130392, - 130398, 130403, 130409, 130415, 130420, 130425, 130431, 130436, 130442, - 130448, 130454, 130460, 130466, 130471, 130477, 130483, 130489, 130494, - 130500, 130506, 130512, 130517, 130523, 130529, 130534, 130540, 130546, - 130551, 130557, 130563, 130568, 130573, 130579, 130584, 130590, 130596, - 130602, 130608, 130614, 130619, 130625, 130631, 130637, 130642, 130648, - 130654, 130660, 130665, 130671, 130677, 130682, 130688, 130694, 130699, - 130705, 130711, 130716, 130721, 130727, 130732, 130738, 130744, 130750, - 130756, 130762, 130768, 130775, 130782, 130789, 130795, 130802, 130809, - 130816, 130822, 130829, 130836, 130842, 130849, 130856, 130862, 130869, - 130876, 130882, 130888, 130895, 130901, 130908, 130915, 130922, 130929, - 130936, 130942, 130949, 130956, 130963, 130969, 130976, 130983, 130990, - 130996, 131003, 131010, 131016, 131023, 131030, 131036, 131043, 131050, - 131056, 131062, 131069, 131075, 131082, 131089, 131096, 131103, 131110, - 131115, 131121, 131127, 131133, 131138, 131144, 131150, 131156, 131161, - 131167, 131173, 131178, 131184, 131190, 131195, 131201, 131207, 131212, - 131217, 131223, 131228, 131234, 131240, 131246, 131252, 131258, 131263, - 131269, 131275, 131281, 131286, 131292, 131298, 131304, 131309, 131315, - 131321, 131326, 131332, 131338, 131343, 131349, 131355, 131360, 131365, - 131371, 131376, 131382, 131388, 131394, 131400, 131406, 131412, 0, 0, - 131419, 131424, 131429, 131434, 131439, 131444, 131449, 131454, 131459, - 131464, 131469, 131474, 131479, 131484, 131489, 131494, 131499, 131504, - 131510, 131515, 131520, 131525, 131530, 131535, 131540, 131545, 131549, - 131554, 131559, 131564, 131569, 131574, 131579, 131584, 131589, 131594, - 131599, 131604, 131609, 131614, 131619, 131624, 131629, 131634, 131640, - 131645, 131650, 131655, 131660, 131665, 131670, 131675, 131681, 131686, - 131691, 131696, 131701, 131706, 131711, 131716, 131721, 131726, 131731, - 131736, 131741, 131746, 131751, 131756, 131761, 131766, 131771, 131776, - 131781, 131786, 131791, 131796, 131802, 131807, 131812, 131817, 131822, - 131827, 131832, 131837, 131841, 131846, 131851, 131856, 131861, 131866, - 131871, 131876, 131881, 131886, 131891, 131896, 131901, 131906, 131911, - 131916, 131921, 131926, 131932, 131937, 131942, 131947, 131952, 131957, - 131962, 131967, 131973, 131978, 131983, 131988, 131993, 131998, 132003, - 132009, 132015, 132021, 132027, 132033, 132039, 132045, 132051, 132057, - 132063, 132069, 132075, 132081, 132087, 132093, 132099, 132105, 132112, - 132118, 132124, 132130, 132136, 132142, 132148, 132154, 132159, 132165, - 132171, 132177, 132183, 132189, 132195, 132201, 132207, 132213, 132219, - 132225, 132231, 132237, 132243, 132249, 132255, 132261, 132268, 132274, - 132280, 132286, 132292, 132298, 132304, 132310, 132317, 132323, 132329, - 132335, 132341, 132347, 132353, 132359, 132365, 132371, 132377, 132383, - 132389, 132395, 132401, 132407, 132413, 132419, 132425, 132431, 132437, - 132443, 132449, 132455, 132462, 132468, 132474, 132480, 132486, 132492, - 132498, 132504, 132509, 132515, 132521, 132527, 132533, 132539, 132545, - 132551, 132557, 132563, 132569, 132575, 132581, 132587, 132593, 132599, - 132605, 132611, 132618, 132624, 132630, 132636, 132642, 132648, 132654, - 132660, 132667, 132673, 132679, 132685, 132691, 132697, 132703, 132710, - 132717, 132724, 132731, 132738, 132745, 132752, 132759, 132766, 132773, - 132780, 132787, 132794, 132801, 132808, 132815, 132822, 132830, 132837, - 132844, 132851, 132858, 132865, 132872, 132879, 132885, 132892, 132899, - 132906, 132913, 132920, 132927, 132934, 132941, 132948, 132955, 132962, - 132969, 132976, 132983, 132990, 132997, 133004, 133012, 133019, 133026, - 133033, 133040, 133047, 133054, 133061, 133069, 133076, 133083, 133090, - 133097, 133104, 133111, 133116, 0, 0, 133121, 133126, 133130, 133134, - 133138, 133142, 133146, 133150, 133154, 133158, 133162, 133167, 133171, - 133175, 133179, 133183, 133187, 133191, 133195, 133199, 133203, 133208, - 133212, 133216, 133220, 133224, 133228, 133232, 133236, 133240, 133244, - 133250, 133255, 133260, 133265, 133270, 133275, 133280, 133285, 133290, - 133295, 133301, 133306, 133311, 133316, 133321, 133326, 133331, 133336, - 133341, 133346, 133353, 133359, 133366, 133373, 133380, 133387, 133394, - 133401, 133408, 133415, 133422, 133429, 133436, 133443, 133450, 133457, - 133464, 133471, 133478, 133485, 133492, 133499, 133506, 133513, 133520, - 133527, 133534, 133541, 133548, 133555, 133562, 133569, 133576, 133583, - 133589, 133595, 133601, 133608, 133614, 133621, 133627, 133634, 133641, - 133648, 133655, 133662, 133669, 133676, 133683, 133690, 133697, 133704, - 133711, 133718, 133725, 133732, 133739, 133746, 133753, 133760, 133767, - 133775, 133782, 133789, 133796, 133803, 133810, 133817, 133824, 133831, - 133838, 133845, 133852, 133859, 133865, 133872, 133879, 133886, 133893, - 133900, 133907, 133914, 133922, 133929, 133935, 133942, 133949, 133956, - 133963, 133970, 133977, 133984, 133991, 133998, 134005, 134012, 134019, - 134026, 134033, 134040, 134047, 134054, 134061, 134068, 134075, 134081, - 134088, 134095, 134102, 134109, 134116, 134123, 134130, 134137, 134144, - 134151, 134158, 134165, 134172, 134179, 134186, 134193, 134200, 134207, - 134214, 134221, 134228, 134235, 134243, 134251, 134259, 134266, 134273, - 134280, 134287, 134294, 134301, 134308, 134315, 134322, 134329, 134335, - 134342, 134349, 134356, 134363, 134370, 134377, 134384, 134391, 134398, - 134405, 134412, 134419, 134426, 134433, 134441, 134449, 134457, 134464, - 134471, 134478, 134485, 134492, 134499, 134506, 134513, 134520, 134527, - 134534, 134541, 134548, 134555, 134562, 134569, 134576, 134583, 134590, - 134597, 134604, 134611, 134618, 134625, 134632, 134639, 134646, 134653, - 134660, 134667, 134674, 134681, 134688, 134695, 134702, 134709, 134716, - 0, 0, 134723, 134727, 134731, 134735, 134739, 134743, 134747, 134751, - 134755, 134759, 134765, 134771, 134777, 134783, 134791, 134799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134805, 134809, 134813, 134817, - 0, 134821, 134825, 134829, 134833, 134837, 134841, 134845, 134849, - 134853, 134857, 134861, 134865, 134869, 134873, 134877, 134881, 134885, - 134889, 134893, 134897, 134901, 134905, 134909, 134913, 134919, 134925, - 134931, 0, 134937, 134942, 0, 134947, 0, 0, 134952, 0, 134957, 134962, - 134967, 134972, 134977, 134982, 134987, 134992, 134997, 135002, 0, - 135007, 135012, 135017, 135022, 0, 135027, 0, 135032, 0, 0, 0, 0, 0, 0, - 135037, 0, 0, 0, 0, 135043, 0, 135049, 0, 135055, 0, 135061, 135067, - 135073, 0, 135079, 135085, 0, 135091, 0, 0, 135097, 0, 135103, 0, 135109, - 0, 135115, 0, 135123, 0, 135131, 135137, 0, 135143, 0, 0, 135149, 135155, - 135161, 135167, 0, 135173, 135179, 135185, 135191, 135197, 135203, - 135209, 0, 135215, 135221, 135227, 135233, 0, 135239, 135245, 135251, - 135257, 0, 135265, 0, 135273, 135279, 135285, 135291, 135297, 135303, - 135309, 135315, 135321, 135327, 0, 135333, 135339, 135345, 135351, - 135357, 135363, 135369, 135375, 135381, 135387, 135393, 135399, 135405, - 135411, 135417, 135423, 135429, 0, 0, 0, 0, 0, 135435, 135440, 135445, 0, - 135450, 135455, 135460, 135465, 135470, 0, 135475, 135480, 135485, - 135490, 135495, 135500, 135505, 135510, 135515, 135520, 135525, 135530, - 135535, 135540, 135545, 135550, 135555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135560, 135570, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135578, 135585, 135591, 135598, - 135604, 135611, 135618, 135624, 135631, 135638, 135645, 135653, 135661, - 135669, 135677, 135685, 135693, 135700, 135707, 135714, 135722, 135730, - 135738, 135746, 135754, 135762, 135769, 135776, 135783, 135791, 135799, - 135807, 135815, 135823, 135831, 135836, 135841, 135846, 135851, 135856, - 135861, 135866, 135871, 135876, 0, 0, 0, 0, 135881, 135886, 135890, - 135894, 135898, 135902, 135906, 135910, 135914, 135918, 135922, 135926, - 135930, 135934, 135938, 135942, 135946, 135950, 135954, 135958, 135962, - 135966, 135970, 135974, 135978, 135982, 135986, 135990, 135994, 135998, - 136002, 136006, 136010, 136014, 136018, 136022, 136026, 136030, 136034, - 136038, 136042, 136046, 136050, 136054, 136058, 136062, 136066, 136070, - 136074, 136078, 136082, 136087, 136091, 136095, 136099, 136103, 136107, - 136111, 136115, 136119, 136123, 136127, 136131, 136135, 136139, 136143, - 136147, 136151, 136155, 136159, 136163, 136167, 136171, 136175, 136179, - 136183, 136187, 136191, 136195, 136199, 136203, 136207, 136211, 136215, - 136219, 136223, 136227, 136231, 136235, 136239, 136243, 136247, 136251, - 136255, 136259, 136263, 136267, 136271, 136275, 136279, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 136283, 136288, 136296, 136303, 136310, 136318, 136326, - 136334, 136342, 136350, 136358, 136366, 136374, 136382, 136390, 0, 0, - 136398, 136406, 136413, 136420, 136428, 136436, 136444, 136452, 136460, - 136468, 136476, 136484, 136492, 136500, 136508, 0, 136515, 136523, - 136530, 136537, 136545, 136553, 136561, 136569, 136577, 136585, 136593, - 136601, 136609, 136617, 136625, 0, 136631, 136639, 136646, 136653, - 136661, 136669, 136677, 136685, 136693, 136701, 136709, 136717, 136725, - 136733, 136741, 136747, 136752, 136757, 136762, 136767, 136772, 136777, - 136782, 136787, 136792, 136797, 136802, 136807, 136812, 136817, 136822, - 136827, 136832, 136837, 136842, 136847, 136852, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 136857, 136864, 136869, 136873, 136877, 136881, 136886, 136891, - 136896, 136901, 136906, 136911, 136918, 0, 0, 0, 136926, 136931, 136937, - 136943, 136949, 136954, 136960, 136966, 136972, 136977, 136983, 136989, - 136994, 137000, 137006, 137011, 137017, 137023, 137028, 137033, 137039, - 137044, 137050, 137056, 137062, 137068, 137074, 137084, 137091, 137097, - 137100, 0, 137103, 137108, 137114, 137120, 137126, 137131, 137137, - 137143, 137149, 137154, 137160, 137166, 137171, 137177, 137183, 137188, - 137194, 137200, 137205, 137210, 137216, 137221, 137227, 137233, 137239, - 137245, 137251, 137254, 137257, 137260, 137263, 137266, 137269, 137275, - 137282, 137289, 137296, 137302, 137309, 137316, 137323, 137329, 137336, - 137343, 137349, 137356, 137363, 137369, 137376, 137383, 137389, 137395, - 137402, 137408, 137415, 137422, 137429, 137436, 137443, 137448, 0, 0, 0, - 0, 137453, 137459, 137466, 137473, 137480, 137486, 137493, 137500, - 137507, 137513, 137520, 137527, 137533, 137540, 137547, 137553, 137560, - 137567, 137573, 137579, 137586, 137592, 137599, 137606, 137613, 137620, - 137627, 137636, 137640, 137643, 137647, 137651, 137655, 137658, 137661, - 137664, 137667, 137670, 137673, 137676, 137679, 137682, 137688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 150613, 150615, 150617, 150621, 150626, 150631, + 150633, 150639, 150644, 150646, 150652, 150656, 150658, 150662, 150668, + 150674, 150680, 150685, 150690, 150697, 150704, 150711, 150716, 150723, + 150730, 150737, 150741, 150748, 150757, 150766, 150773, 150778, 150782, + 150786, 150788, 150791, 150794, 150801, 150808, 150818, 150823, 150828, + 150833, 150838, 150840, 150846, 150850, 150852, 150854, 150856, 150858, + 150862, 150866, 150870, 150872, 150876, 150878, 150882, 150884, 150886, + 150888, 150890, 150895, 150900, 150902, 150908, 150912, 150916, 150924, + 150926, 150928, 150930, 150932, 150934, 150936, 150938, 150940, 150942, + 150944, 150948, 150952, 150954, 150956, 150958, 150960, 150962, 150967, + 150973, 150977, 150981, 150985, 150989, 150994, 150998, 151000, 151002, + 151006, 151012, 151014, 151016, 151018, 151022, 151031, 151037, 151041, + 151045, 151047, 151049, 151052, 151054, 151056, 151058, 151062, 151064, + 151068, 151073, 151075, 151080, 151086, 151093, 151097, 151101, 151105, + 151109, 151115, 151119, 151127, 151134, 151136, 151138, 151142, 151146, + 151148, 151152, 151156, 151158, 151162, 151164, 151168, 151172, 151176, + 151180, 151184, 151188, 151192, 151196, 151202, 151206, 151210, 151221, + 151226, 151230, 151234, 151240, 151244, 151248, 151252, 151259, 151266, + 151270, 151274, 151278, 151282, 151286, 151293, 151295, 151299, 151301, + 151303, 151307, 151311, 151315, 151317, 151321, 151325, 151329, 151333, + 151337, 151339, 151343, 151345, 151351, 151354, 151359, 151361, 151363, + 151366, 151368, 151370, 151373, 151380, 151387, 151394, 151399, 151403, + 151405, 151407, 151409, 151413, 151415, 151419, 151423, 151427, 151429, + 151433, 151435, 151439, 151443, 151450, 151452, 151461, 151470, 151479, + 151485, 151487, 151492, 151496, 151500, 151502, 151508, 151512, 151514, + 151518, 151522, 151524, 151528, 151533, 151537, 151543, 151549, 151551, + 151553, 151559, 151561, 151565, 151569, 151571, 151575, 151577, 151581, + 151585, 151589, 151592, 151595, 151600, 151605, 151607, 151610, 151612, + 151619, 151623, 151625, 151632, 151639, 151646, 151653, 151660, 151662, + 151664, 151666, 151670, 151672, 151674, 151676, 151678, 151680, 151682, + 151684, 151686, 151688, 151690, 151692, 151694, 151696, 151698, 151700, + 151702, 151704, 151706, 151708, 151710, 151712, 151714, 151718, 151720, + 151722, 151724, 151728, 151730, 151734, 151736, 151738, 151742, 151746, + 151752, 151754, 151756, 151758, 151760, 151764, 151768, 151770, 151774, + 151778, 151782, 151786, 151790, 151794, 151798, 151802, 151806, 151810, + 151814, 151818, 151822, 151826, 151830, 151834, 151838, 151842, 151844, + 151846, 151848, 151850, 151852, 151854, 151856, 151864, 151872, 151880, + 151888, 151893, 151898, 151903, 151907, 151911, 151916, 151920, 151922, + 151926, 151928, 151930, 151932, 151934, 151936, 151938, 151940, 151944, + 151946, 151948, 151950, 151954, 151958, 151962, 151966, 151970, 151972, + 151978, 151984, 151986, 151988, 151990, 151992, 151994, 152003, 152010, + 152017, 152021, 152028, 152033, 152040, 152049, 152054, 152058, 152062, + 152064, 152068, 152070, 152074, 152078, 152080, 152084, 152088, 152092, + 152094, 152096, 152102, 152104, 152106, 152108, 152112, 152116, 152118, + 152122, 152124, 152126, 152129, 152133, 152135, 152139, 152141, 152143, + 152148, 152150, 152154, 152158, 152161, 152165, 152169, 152173, 152177, + 152181, 152185, 152189, 152194, 152198, 152202, 152211, 152216, 152219, + 152221, 152224, 152227, 152232, 152234, 152237, 152242, 152246, 152249, + 152253, 152257, 152260, 152265, 152269, 152273, 152277, 152281, 152287, + 152293, 152299, 152305, 152310, 152320, 152322, 152326, 152328, 152330, + 152334, 152338, 152340, 152344, 152349, 152354, 152360, 152362, 152366, + 152370, 152376, 152382, 152386, 152388, 152390, 152394, 152396, 152400, + 152404, 152408, 152410, 152412, 152419, 152423, 152426, 152430, 152434, + 152438, 152440, 152444, 152446, 152448, 152452, 152454, 152458, 152462, + 152468, 152472, 152476, 152480, 152482, 152485, 152489, 152495, 152504, + 152513, 152521, 152529, 152531, 152535, 152537, 152541, 152552, 152556, + 152562, 152568, 152573, 152575, 152580, 152584, 152586, 152588, 152590, + 152594, 152598, 152602, 152607, 152617, 152632, 152642, 152652, 152656, + 152660, 152666, 152668, 152676, 152684, 152686, 152690, 152696, 152702, + 152709, 152716, 152718, 152720, 152723, 152725, 152731, 152733, 152736, + 152740, 152746, 152752, 152763, 152769, 152775, 152783, 152787, 152795, + 152803, 152809, 152815, 152822, 152824, 152828, 152830, 152832, 152837, + 152839, 152841, 152843, 152845, 152849, 152859, 152865, 152869, 152873, + 152877, 152883, 152889, 152895, 152901, 152906, 152911, 152917, 152923, + 152930, 152937, 152945, 152953, 152958, 152966, 152970, 152979, 152988, + 152994, 152998, 153002, 153006, 153009, 153014, 153016, 153018, 153020, + 153027, 153032, 153039, 153046, 153053, 153061, 153069, 153077, 153085, + 153093, 153101, 153109, 153117, 153125, 153131, 153137, 153143, 153149, + 153155, 153161, 153167, 153173, 153179, 153185, 153191, 153197, 153200, + 153209, 153218, 153220, 153227, 153231, 153233, 153235, 153239, 153245, + 153249, 153251, 153261, 153267, 153271, 153273, 153277, 0, 153279, + 153286, 153293, 153300, 153305, 153310, 153319, 153325, 153330, 153334, + 153339, 153343, 153350, 153354, 153357, 153362, 153369, 153376, 153381, + 153386, 153391, 153398, 153407, 153418, 153424, 153430, 153436, 153446, + 153461, 153470, 153478, 153486, 153494, 153502, 153510, 153518, 153526, + 153534, 153542, 153550, 153558, 0, 153566, 153570, 153575, 153580, + 153582, 153586, 153595, 153604, 153612, 153616, 153620, 153625, 153630, + 153635, 153637, 153642, 153646, 153648, 153652, 153656, 153662, 153667, + 153675, 153680, 153685, 153690, 153697, 153700, 153702, 153705, 153710, + 153716, 153720, 153724, 153730, 153736, 153738, 153742, 153746, 153750, + 153754, 153758, 153760, 153762, 153764, 153766, 153772, 153778, 153782, + 153784, 153786, 153788, 153797, 153801, 153808, 153815, 153817, 153820, + 153824, 153830, 153834, 153838, 153840, 153848, 153852, 153856, 153861, + 153866, 153871, 153876, 153881, 153886, 153891, 153896, 153901, 153906, + 153910, 153916, 153920, 153926, 153931, 153938, 153944, 153952, 153956, + 153963, 153967, 153971, 153975, 153980, 153985, 153987, 153991, 154000, + 154008, 154016, 154029, 154042, 154055, 154062, 154069, 154073, 154082, + 154090, 154094, 154103, 154110, 154114, 154118, 154122, 154126, 154133, + 154137, 154141, 154145, 154149, 154156, 154165, 154174, 154181, 154193, + 154205, 154209, 154213, 154217, 154221, 154225, 154229, 154237, 154245, + 154253, 154257, 154261, 154265, 154269, 154273, 154277, 154283, 154289, + 154293, 154304, 154312, 154316, 154320, 154324, 154328, 154334, 154341, + 154352, 154362, 154372, 154383, 154392, 154403, 154409, 154415, 154421, + 154427, 154433, 154437, 154444, 154453, 154460, 154466, 154470, 154474, + 154478, 154487, 154499, 154503, 154510, 154517, 154524, 154532, 154539, + 154547, 154556, 154566, 154575, 154585, 154594, 154604, 154613, 154623, + 154633, 154644, 154654, 154665, 154672, 154680, 154687, 154695, 154703, + 154712, 154720, 154729, 154736, 154748, 154755, 154767, 154770, 154773, + 154776, 154779, 154785, 154792, 154798, 154805, 154810, 154816, 154828, + 154838, 154849, 154854, 154859, 154865, 154870, 154877, 154881, 154887, + 154889, 154891, 154895, 154899, 154903, 154912, 154914, 154916, 154919, + 154921, 154923, 154927, 154929, 154933, 154935, 154939, 154941, 154943, + 154947, 154951, 154957, 154959, 154963, 154965, 154969, 154973, 154977, + 154981, 154983, 154985, 154989, 154993, 154997, 155001, 155003, 155005, + 155007, 155013, 155018, 155021, 155029, 155037, 155039, 155044, 155047, + 155052, 155063, 155070, 155075, 155080, 155082, 155086, 155088, 155092, + 155094, 155098, 155102, 155105, 155108, 155110, 155113, 155115, 155119, + 155121, 155123, 155125, 155129, 155131, 155135, 155138, 155145, 155148, + 155153, 155156, 155159, 155164, 155168, 155172, 155176, 155178, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155183, 155188, 155190, 155194, + 155196, 155200, 155204, 155210, 155214, 155219, 155222, 155226, 155230, + 0, 0, 0, 155234, 155236, 155242, 155246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 155250, 155255, 155260, 155265, 155270, 155275, 155280, 155287, + 155294, 155301, 155308, 155313, 155318, 155323, 155328, 155335, 155341, + 155348, 155355, 155362, 155367, 155372, 155377, 155382, 155387, 155394, + 155401, 155406, 155411, 155418, 155425, 155433, 155441, 155448, 155455, + 155463, 155471, 155479, 155486, 155496, 155507, 155512, 155519, 155526, + 155533, 155541, 155549, 155560, 155568, 155576, 155584, 155589, 155594, + 155599, 155604, 155609, 155614, 155619, 155624, 155629, 155634, 155639, + 155644, 155651, 155656, 155661, 155668, 155673, 155678, 155683, 155688, + 155693, 155698, 155703, 155708, 155713, 155718, 155723, 155728, 155735, + 155743, 155748, 155753, 155760, 155765, 155770, 155775, 155782, 155787, + 155794, 155799, 155806, 155811, 155820, 155829, 155834, 155839, 155844, + 155849, 155854, 155859, 155864, 155869, 155874, 155879, 155884, 155889, + 155894, 155902, 155910, 155915, 155920, 155925, 155930, 155935, 155941, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155947, 155955, 155963, 155971, + 155979, 155985, 155991, 155995, 155999, 156005, 156011, 156020, 156024, + 156029, 156035, 156039, 156044, 156048, 156052, 156058, 156064, 156074, + 156083, 156086, 156091, 156097, 156103, 156114, 156124, 156128, 156133, + 156139, 156145, 156154, 156159, 156163, 156168, 156172, 156178, 156184, + 156190, 156194, 156197, 156201, 156204, 156207, 156212, 156217, 156224, + 156232, 156239, 156246, 156255, 156264, 156271, 156279, 156286, 156293, + 156302, 156311, 156318, 156326, 156333, 156340, 156349, 156356, 156364, + 156370, 156379, 156387, 156396, 156403, 156413, 156424, 156432, 156440, + 156449, 156457, 156465, 156474, 156482, 156492, 156501, 156509, 156517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 137691, 137698, 137706, 137714, 137722, 137729, 137737, 137745, 137753, - 137760, 137768, 137776, 137783, 137791, 137799, 137806, 137814, 137822, - 137829, 137836, 137844, 137851, 137859, 137867, 137875, 137883, 137891, - 137895, 137899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137903, 137909, - 137915, 137921, 137925, 137931, 137937, 137943, 137949, 137955, 137961, - 137967, 137973, 137979, 137985, 137991, 137997, 138003, 138009, 138015, - 138021, 138027, 138033, 138039, 138045, 138051, 138057, 138063, 138069, - 138075, 138081, 138087, 138093, 138099, 138105, 138111, 138117, 138123, - 138129, 138135, 138141, 138147, 138153, 0, 0, 0, 0, 0, 138159, 138170, - 138181, 138192, 138203, 138214, 138225, 138236, 138247, 0, 0, 0, 0, 0, 0, - 0, 138258, 138262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156526, 156534, + 156542, 156550, 156558, 156567, 156576, 156585, 156594, 156603, 156612, + 156621, 0, 0, 0, 0, 156630, 156638, 156646, 156654, 156662, 156669, + 156676, 156683, 156690, 156698, 156706, 156714, 156722, 156732, 156742, + 156752, 156762, 156771, 156780, 156789, 156798, 156807, 156816, 156825, + 156834, 156842, 156850, 156858, 156866, 156874, 156882, 156890, 156898, + 156908, 156918, 156928, 156938, 156942, 156946, 156950, 156954, 156957, + 156960, 156963, 156966, 156970, 156974, 156978, 156982, 156987, 156992, + 156997, 157002, 157005, 157008, 157011, 0, 0, 0, 0, 0, 0, 0, 0, 157014, + 157017, 157020, 157023, 157026, 157031, 157036, 157042, 157048, 157052, + 0, 0, 0, 0, 0, 0, 157056, 157062, 157068, 157074, 157080, 157088, 157096, + 157105, 157114, 157119, 157124, 157129, 157134, 157141, 157148, 157156, + 157164, 157171, 157178, 157185, 157192, 157201, 157210, 157220, 157230, + 157236, 157242, 157248, 157254, 157262, 157270, 157279, 157288, 157296, + 157304, 157312, 157320, 157330, 157340, 157351, 0, 0, 0, 0, 0, 0, 0, 0, + 157362, 157367, 157372, 157377, 157382, 157391, 157400, 157409, 157418, + 157425, 157432, 157439, 157446, 157453, 157462, 157471, 157480, 157485, + 157492, 157499, 157506, 157511, 157516, 157521, 157526, 157533, 157540, + 157547, 157554, 157561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157570, 157574, 157578, 157583, 157587, + 157591, 157596, 157600, 157604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138266, 138268, 138270, 138274, - 138279, 138284, 138286, 138292, 138297, 138299, 138305, 138309, 138311, - 138315, 138321, 138327, 138333, 138338, 138342, 138349, 138356, 138363, - 138368, 138375, 138382, 138389, 138393, 138399, 138408, 138417, 138424, - 138429, 138433, 138437, 138439, 138442, 138445, 138452, 138459, 138469, - 138474, 138479, 138484, 138489, 138491, 0, 0, 0, 138497, 138499, 138501, - 138505, 138509, 138513, 138515, 138519, 138521, 138525, 138527, 138529, - 138531, 138533, 138538, 138543, 138545, 138551, 138555, 138559, 138567, - 138569, 138571, 138573, 138575, 138577, 138579, 138581, 138583, 138585, - 138587, 138591, 138595, 138597, 138599, 138601, 138603, 138605, 138610, - 138616, 138620, 138624, 138628, 138632, 138637, 138641, 138643, 138645, - 138649, 138655, 138657, 138659, 138661, 138665, 138674, 138680, 138684, - 138688, 138690, 138692, 138695, 138697, 138699, 138701, 138705, 138707, - 138711, 138716, 138718, 138723, 138729, 138736, 138740, 138744, 138748, - 138752, 138758, 138762, 0, 0, 138770, 138772, 138776, 138780, 138782, - 138786, 138790, 138792, 138796, 138798, 138802, 138806, 138810, 138814, - 138818, 138822, 138826, 138830, 138836, 138840, 138844, 138855, 138860, - 138864, 138868, 138874, 138878, 138882, 138886, 138893, 138900, 138904, - 138908, 138912, 138916, 138920, 138927, 138929, 138933, 138935, 138937, - 138941, 138945, 138949, 138951, 138955, 138959, 138963, 138967, 138971, - 138973, 138977, 138979, 138985, 138988, 138993, 138995, 138997, 139000, - 139002, 139004, 139007, 139014, 139021, 139028, 139033, 139037, 139039, - 139041, 139043, 139047, 139049, 139053, 139057, 139061, 139063, 139067, - 139069, 139073, 0, 0, 0, 0, 0, 139077, 139083, 139085, 139090, 139094, - 139098, 139100, 139106, 139110, 139112, 139116, 139120, 139122, 139126, - 139131, 139135, 139141, 139147, 139149, 139151, 139157, 139159, 139163, - 139167, 139169, 139173, 139175, 139179, 139183, 139187, 139190, 139193, - 139198, 139203, 139205, 139208, 0, 0, 0, 0, 0, 0, 0, 0, 139210, 139212, - 139214, 139216, 139220, 139222, 139224, 139226, 139228, 139230, 139232, - 139234, 139236, 139238, 139240, 139242, 139244, 139246, 139248, 139250, - 139252, 139254, 139256, 139258, 139260, 139262, 139264, 139268, 139270, - 139272, 139274, 139278, 139280, 139284, 139286, 139288, 139292, 139296, - 139302, 139304, 139306, 139308, 139310, 139314, 139318, 139320, 139324, - 139328, 139332, 139336, 139340, 139344, 139348, 139352, 139356, 139360, - 139364, 139368, 139372, 139376, 139380, 139384, 139388, 139392, 139394, - 139396, 139398, 139400, 139402, 139404, 139406, 139414, 139422, 139430, - 139438, 139443, 139448, 139453, 139457, 139461, 139466, 139471, 139473, - 139477, 139479, 139481, 139483, 139485, 139487, 139489, 139491, 139495, - 139497, 139499, 139501, 139505, 139509, 139513, 139517, 139521, 139523, - 139529, 139535, 139537, 139539, 139541, 139543, 139545, 139554, 139561, - 139568, 139572, 139579, 139584, 139591, 139600, 139605, 139609, 139613, - 139615, 139619, 139621, 139625, 139629, 139631, 139635, 139639, 139643, - 139645, 139647, 139653, 139655, 139657, 139659, 139663, 139667, 139669, - 139673, 139675, 139677, 139680, 139684, 139686, 139690, 139692, 139694, - 139699, 139701, 139705, 139709, 139712, 139716, 139720, 139724, 139728, - 139732, 139736, 139740, 139745, 139749, 139753, 139762, 139767, 139770, - 139772, 139775, 139778, 139783, 139785, 139788, 139793, 139797, 139800, - 139804, 139808, 139811, 139816, 139820, 139824, 139828, 139832, 139838, - 139844, 139850, 139856, 139861, 139871, 139873, 139877, 139879, 139881, - 139885, 139889, 139891, 139895, 139901, 139906, 139912, 139914, 139918, - 139921, 139927, 139933, 139937, 139939, 139941, 139945, 139947, 139951, - 139955, 139959, 139961, 139963, 139970, 139974, 139978, 139982, 139986, - 139990, 139992, 139996, 139998, 140000, 140004, 140006, 140010, 140014, - 140020, 140024, 140028, 140032, 140034, 140037, 140041, 140047, 140056, - 140065, 140074, 140083, 140085, 140089, 140091, 140095, 140106, 140110, - 140116, 140122, 140127, 140129, 140134, 140138, 140140, 140142, 140144, - 140148, 0, 140152, 140157, 140168, 140184, 140195, 140206, 140210, - 140214, 140220, 140222, 140230, 140238, 140240, 140244, 140250, 140256, - 140263, 140270, 140272, 140274, 140278, 140280, 140286, 140288, 140291, - 140295, 140301, 140307, 140318, 140324, 140330, 140338, 140342, 140350, - 140358, 140364, 140370, 140377, 140379, 140383, 140385, 140387, 140392, - 140394, 140396, 140398, 140400, 140404, 140415, 140421, 140425, 140429, - 140433, 140439, 140445, 140451, 140457, 140462, 140467, 140473, 140479, - 140486, 140493, 140501, 140509, 140514, 140522, 140526, 140535, 140544, - 140550, 140554, 140558, 140562, 140565, 0, 0, 0, 0, 0, 140570, 140577, - 140584, 140591, 140599, 140607, 140615, 140623, 140631, 140639, 140647, - 140655, 140663, 140669, 140675, 140681, 140687, 140693, 140699, 140705, - 140711, 140717, 140723, 140729, 140735, 140738, 140747, 140756, 140758, - 140765, 140769, 140771, 140773, 140777, 140783, 140787, 140789, 140799, - 140805, 140809, 140811, 140815, 0, 140817, 140824, 140831, 140838, - 140843, 140848, 140857, 140863, 140868, 140872, 140877, 140881, 140888, - 140892, 140895, 140900, 140907, 140914, 140919, 140924, 140929, 140935, - 140944, 140955, 140961, 140967, 140973, 140984, 141000, 141009, 141017, - 141025, 141033, 141041, 141049, 141057, 141065, 141073, 141081, 141089, - 141097, 0, 141105, 141109, 141114, 141119, 141121, 141125, 141134, - 141143, 141151, 141155, 141159, 141164, 141169, 141174, 141176, 141181, - 141185, 141187, 141191, 141195, 141201, 141206, 141214, 141219, 141224, - 141229, 141236, 141239, 141241, 141245, 141250, 141255, 141259, 141263, - 141269, 141275, 141277, 141281, 141285, 141289, 141293, 141297, 141299, - 141301, 141303, 141305, 141311, 141317, 141321, 141323, 141325, 141327, - 141336, 141340, 141347, 141354, 141356, 141359, 141363, 141369, 141373, - 141377, 141379, 141387, 141391, 141395, 141400, 141405, 141410, 141415, - 141420, 141425, 141430, 141435, 141440, 141445, 141449, 141455, 141459, - 141465, 141470, 141477, 141483, 141491, 141495, 141502, 141506, 141510, - 141514, 141519, 141524, 141526, 141530, 141539, 141547, 141556, 141570, - 141584, 141598, 141605, 141612, 141616, 141625, 141633, 141637, 141646, - 141653, 141657, 141661, 141665, 141669, 141676, 141680, 141684, 141688, - 141692, 141699, 141708, 141717, 141724, 141736, 141748, 141752, 141756, - 141760, 141764, 141768, 141772, 141780, 141788, 141797, 141801, 141805, - 141809, 141813, 141817, 141821, 141827, 141834, 141838, 141850, 141858, - 141862, 141866, 141870, 141874, 141880, 141887, 141898, 141908, 141919, - 141930, 141939, 141950, 141956, 141962, 141968, 141974, 0, 0, 141980, - 141989, 141996, 142002, 142006, 142010, 142014, 142023, 142035, 142039, - 142046, 142053, 142060, 142067, 142074, 142081, 142089, 142097, 142105, - 142113, 142122, 142131, 142140, 142149, 142159, 142169, 142179, 142189, - 142196, 142203, 142210, 142217, 142225, 142233, 142241, 142249, 142256, - 142268, 142275, 142287, 142290, 142293, 142296, 142299, 142305, 142312, - 142319, 142327, 142332, 142338, 142349, 142359, 142370, 142375, 142380, - 142386, 142391, 142398, 142402, 142408, 142410, 142412, 142416, 142420, - 142424, 142433, 142435, 142437, 142440, 142442, 142444, 142448, 142450, - 142454, 142456, 142460, 142462, 142464, 142468, 142472, 142478, 142480, - 142484, 142486, 142490, 142494, 142498, 142502, 142504, 142506, 142510, - 142514, 142518, 142522, 142524, 142526, 142528, 142533, 142538, 142541, - 142549, 142557, 142559, 142564, 142567, 142572, 142583, 142590, 142595, - 142600, 142602, 142606, 142608, 142612, 142614, 142618, 142622, 142625, - 142628, 142630, 142633, 142635, 142639, 142641, 142643, 142645, 142649, - 142651, 142655, 142658, 142665, 142668, 142673, 142676, 142679, 142684, - 142688, 142692, 142696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 142698, 142703, 142705, 142709, 142711, 142715, 142719, 142725, 142729, - 142734, 142737, 142741, 142745, 0, 0, 0, 142749, 142751, 142757, 142761, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142765, 142770, 142775, 142780, - 142785, 142790, 142795, 142802, 142809, 142816, 142823, 142828, 142833, - 142838, 142843, 142850, 142856, 142863, 142870, 142877, 142882, 142887, - 142892, 142897, 142902, 142909, 142916, 142921, 142926, 142933, 142940, - 142948, 142956, 142963, 142970, 142978, 142986, 142994, 143001, 143011, - 143022, 143027, 143034, 143041, 143048, 143056, 143064, 143075, 143083, - 143091, 143099, 143104, 143109, 143114, 143119, 143124, 143129, 143134, - 143139, 143144, 143149, 143154, 143159, 143166, 143171, 143176, 143183, - 143188, 143193, 143198, 143203, 143208, 143213, 143218, 143223, 143228, - 143233, 143238, 143243, 143250, 143258, 143263, 143268, 143275, 143280, - 143285, 143290, 143297, 143302, 143309, 143314, 143321, 143326, 143335, - 143344, 143349, 143354, 143359, 143364, 143369, 143374, 143379, 143384, - 143389, 143394, 143399, 143404, 143409, 143417, 143425, 143430, 143435, - 143440, 143445, 143450, 143456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 143462, 143470, 143478, 143486, 143494, 143500, 143506, 143510, 143514, - 143520, 143526, 143535, 143539, 143544, 143550, 143554, 143559, 143563, - 143567, 143573, 143579, 143589, 143598, 143601, 143606, 143612, 143618, - 143629, 143639, 143643, 143648, 143654, 143660, 143669, 143674, 143678, - 143683, 143687, 143693, 143699, 143705, 143709, 143712, 143716, 143719, - 143722, 143727, 143732, 143739, 143747, 143754, 143761, 143770, 143779, - 143786, 143794, 143801, 143808, 143817, 143826, 143833, 143841, 143848, - 143855, 143864, 143871, 143879, 143885, 143894, 143902, 143911, 143918, - 143928, 143939, 143947, 143955, 143964, 143972, 143980, 143989, 143997, - 144007, 144016, 144024, 144032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157610, 157612, + 157616, 157618, 157620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 144041, 144049, 144057, 144065, 144073, 144082, 144091, - 144100, 144109, 144118, 144127, 144136, 0, 0, 0, 0, 144145, 144153, - 144161, 144169, 144177, 144184, 144191, 144198, 144205, 144213, 144221, - 144229, 144237, 144247, 144257, 144267, 144277, 144286, 144295, 144304, - 144313, 144322, 144331, 144340, 144349, 144357, 144365, 144373, 144381, - 144389, 144397, 144405, 144413, 144423, 144433, 144443, 144453, 144457, - 144461, 144465, 144469, 144472, 144475, 144478, 144481, 144485, 144489, - 144493, 144497, 144502, 144507, 144512, 144517, 144520, 144523, 144526, - 0, 0, 0, 0, 0, 0, 0, 0, 144529, 144532, 144535, 144538, 144541, 144546, - 144551, 144556, 144561, 144565, 0, 0, 0, 0, 0, 0, 144569, 144575, 144581, - 144587, 144593, 144601, 144609, 144617, 144625, 144630, 144635, 144640, - 144645, 144652, 144659, 144666, 144673, 144680, 144687, 144694, 144701, - 144710, 144719, 144728, 144737, 144743, 144749, 144755, 144761, 144769, - 144777, 144785, 144793, 144801, 144809, 144817, 144825, 144835, 144845, - 144855, 0, 0, 0, 0, 0, 0, 0, 0, 144865, 144870, 144875, 144880, 144885, - 144894, 144903, 144912, 144921, 144928, 144935, 144942, 144949, 144956, - 144965, 144974, 144983, 144988, 144995, 145002, 145009, 145014, 145019, - 145024, 145029, 145036, 145043, 145050, 145057, 145064, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157628, 157632, 157636, 157640, + 157644, 157648, 157652, 157656, 157660, 157664, 157668, 157672, 157676, + 157680, 157684, 157688, 157692, 157696, 157700, 157704, 157708, 157712, + 157716, 157720, 157724, 157728, 157732, 157736, 157740, 157744, 157748, + 157752, 157756, 157760, 157764, 157768, 157772, 157776, 157780, 157784, + 157788, 157792, 157796, 157800, 157804, 157808, 157812, 157816, 157820, + 157824, 157828, 157832, 157836, 157840, 157844, 157848, 157852, 157856, + 157860, 157864, 157868, 157872, 157876, 157880, 157884, 157888, 157892, + 157896, 157900, 157904, 157908, 157912, 157916, 157920, 157924, 157928, + 157932, 157936, 157940, 157944, 157948, 157952, 157956, 157960, 157964, + 157968, 157972, 157976, 157980, 157984, 157988, 157992, 157996, 158000, + 158004, 158008, 158012, 158016, 158020, 158024, 158028, 158032, 158036, + 158040, 158044, 158048, 158052, 158056, 158060, 158064, 158068, 158072, + 158076, 158080, 158084, 158088, 158092, 158096, 158100, 158104, 158108, + 158112, 158116, 158120, 158124, 158128, 158132, 158136, 158140, 158144, + 158148, 158152, 158156, 158160, 158164, 158168, 158172, 158176, 158180, + 158184, 158188, 158192, 158196, 158200, 158204, 158208, 158212, 158216, + 158220, 158224, 158228, 158232, 158236, 158240, 158244, 158248, 158252, + 158256, 158260, 158264, 158268, 158272, 158276, 158280, 158284, 158288, + 158292, 158296, 158300, 158304, 158308, 158312, 158316, 158320, 158324, + 158328, 158332, 158336, 158340, 158344, 158348, 158352, 158356, 158360, + 158364, 158368, 158372, 158376, 158380, 158384, 158388, 158392, 158396, + 158400, 158404, 158408, 158412, 158416, 158420, 158424, 158428, 158432, + 158436, 158440, 158444, 158448, 158452, 158456, 158460, 158464, 158468, + 158472, 158476, 158480, 158484, 158488, 158492, 158496, 158500, 158504, + 158508, 158512, 158516, 158520, 158524, 158528, 158532, 158536, 158540, + 158544, 158548, 158552, 158556, 158560, 158564, 158568, 158572, 158576, + 158580, 158584, 158588, 158592, 158596, 158600, 158604, 158608, 158612, + 158616, 158620, 158624, 158628, 158632, 158636, 158640, 158644, 158648, + 158652, 158656, 158660, 158664, 158668, 158672, 158676, 158680, 158684, + 158688, 158692, 158696, 158700, 158704, 158708, 158712, 158716, 158720, + 158724, 158728, 158732, 158736, 158740, 158744, 158748, 158752, 158756, + 158760, 158764, 158768, 158772, 158776, 158780, 158784, 158788, 158792, + 158796, 158800, 158804, 158808, 158812, 158816, 158820, 158824, 158828, + 158832, 158836, 158840, 158844, 158848, 158852, 158856, 158860, 158864, + 158868, 158872, 158876, 158880, 158884, 158888, 158892, 158896, 158900, + 158904, 158908, 158912, 158916, 158920, 158924, 158928, 158932, 158936, + 158940, 158944, 158948, 158952, 158956, 158960, 158964, 158968, 158972, + 158976, 158980, 158984, 158988, 158992, 158996, 159000, 159004, 159008, + 159012, 159016, 159020, 159024, 159028, 159032, 159036, 159040, 159044, + 159048, 159052, 159056, 159060, 159064, 159068, 159072, 159076, 159080, + 159084, 159088, 159092, 159096, 159100, 159104, 159108, 159112, 159116, + 159120, 159124, 159128, 159132, 159136, 159140, 159144, 159148, 159152, + 159156, 159160, 159164, 159168, 159172, 159176, 159180, 159184, 159188, + 159192, 159196, 159200, 159204, 159208, 159212, 159216, 159220, 159224, + 159228, 159232, 159236, 159240, 159244, 159248, 159252, 159256, 159260, + 159264, 159268, 159272, 159276, 159280, 159284, 159288, 159292, 159296, + 159300, 159304, 159308, 159312, 159316, 159320, 159324, 159328, 159332, + 159336, 159340, 159344, 159348, 159352, 159356, 159360, 159364, 159368, + 159372, 159376, 159380, 159384, 159388, 159392, 159396, 159400, 159404, + 159408, 159412, 159416, 159420, 159424, 159428, 159432, 159436, 159440, + 159444, 159448, 159452, 159456, 159460, 159464, 159468, 159472, 159476, + 159480, 159484, 159488, 159492, 159496, 159500, 159504, 159508, 159512, + 159516, 159520, 159524, 159528, 159532, 159536, 159540, 159544, 159548, + 159552, 159556, 159560, 159564, 159568, 159572, 159576, 159580, 159584, + 159588, 159592, 159596, 159600, 159604, 159608, 159612, 159616, 159620, + 159624, 159628, 159632, 159636, 159640, 159644, 159648, 159652, 159656, + 159660, 159664, 159668, 159672, 159676, 159680, 159684, 159688, 159692, + 159696, 159700, 159704, 159708, 159712, 159716, 159720, 159724, 159728, + 159732, 159736, 159740, 159744, 159748, 159752, 159756, 159760, 159764, + 159768, 159772, 159776, 159780, 159784, 159788, 159792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 145073, 145077, 145081, 145085, 145089, 145093, 145097, - 145101, 145105, 145109, 145113, 145117, 145121, 145125, 145129, 145133, - 145137, 145141, 145145, 145149, 145153, 145157, 145161, 145165, 145169, - 145173, 145177, 145181, 145185, 145189, 145193, 145197, 145201, 145205, - 145209, 145213, 145217, 145221, 145225, 145229, 145233, 145237, 145241, - 145245, 145249, 145253, 145257, 145261, 145265, 145269, 145273, 145277, - 145281, 145285, 145289, 145293, 145297, 145301, 145305, 145309, 145313, - 145317, 145321, 145325, 145329, 145333, 145337, 145341, 145345, 145349, - 145353, 145357, 145361, 145365, 145369, 145373, 145377, 145381, 145385, - 145389, 145393, 145397, 145401, 145405, 145409, 145413, 145417, 145421, - 145425, 145429, 145433, 145437, 145441, 145445, 145449, 145453, 145457, - 145461, 145465, 145469, 145473, 145477, 145481, 145485, 145489, 145493, - 145497, 145501, 145505, 145509, 145513, 145517, 145521, 145525, 145529, - 145533, 145537, 145541, 145545, 145549, 145553, 145557, 145561, 145565, - 145569, 145573, 145577, 145581, 145585, 145589, 145593, 145597, 145601, - 145605, 145609, 145613, 145617, 145621, 145625, 145629, 145633, 145637, - 145641, 145645, 145649, 145653, 145657, 145661, 145665, 145669, 145673, - 145677, 145681, 145685, 145689, 145693, 145697, 145701, 145705, 145709, - 145713, 145717, 145721, 145725, 145729, 145733, 145737, 145741, 145745, - 145749, 145753, 145757, 145761, 145765, 145769, 145773, 145777, 145781, - 145785, 145789, 145793, 145797, 145801, 145805, 145809, 145813, 145817, - 145821, 145825, 145829, 145833, 145837, 145841, 145845, 145849, 145853, - 145857, 145861, 145865, 145869, 145873, 145877, 145881, 145885, 145889, - 145893, 145897, 145901, 145905, 145909, 145913, 145917, 145921, 145925, - 145929, 145933, 145937, 145941, 145945, 145949, 145953, 145957, 145961, - 145965, 145969, 145973, 145977, 145981, 145985, 145989, 145993, 145997, - 146001, 146005, 146009, 146013, 146017, 146021, 146025, 146029, 146033, - 146037, 146041, 146045, 146049, 146053, 146057, 146061, 146065, 146069, - 146073, 146077, 146081, 146085, 146089, 146093, 146097, 146101, 146105, - 146109, 146113, 146117, 146121, 146125, 146129, 146133, 146137, 146141, - 146145, 146149, 146153, 146157, 146161, 146165, 146169, 146173, 146177, - 146181, 146185, 146189, 146193, 146197, 146201, 146205, 146209, 146213, - 146217, 146221, 146225, 146229, 146233, 146237, 146241, 146245, 146249, - 146253, 146257, 146261, 146265, 146269, 146273, 146277, 146281, 146285, - 146289, 146293, 146297, 146301, 146305, 146309, 146313, 146317, 146321, - 146325, 146329, 146333, 146337, 146341, 146345, 146349, 146353, 146357, - 146361, 146365, 146369, 146373, 146377, 146381, 146385, 146389, 146393, - 146397, 146401, 146405, 146409, 146413, 146417, 146421, 146425, 146429, - 146433, 146437, 146441, 146445, 146449, 146453, 146457, 146461, 146465, - 146469, 146473, 146477, 146481, 146485, 146489, 146493, 146497, 146501, - 146505, 146509, 146513, 146517, 146521, 146525, 146529, 146533, 146537, - 146541, 146545, 146549, 146553, 146557, 146561, 146565, 146569, 146573, - 146577, 146581, 146585, 146589, 146593, 146597, 146601, 146605, 146609, - 146613, 146617, 146621, 146625, 146629, 146633, 146637, 146641, 146645, - 146649, 146653, 146657, 146661, 146665, 146669, 146673, 146677, 146681, - 146685, 146689, 146693, 146697, 146701, 146705, 146709, 146713, 146717, - 146721, 146725, 146729, 146733, 146737, 146741, 146745, 146749, 146753, - 146757, 146761, 146765, 146769, 146773, 146777, 146781, 146785, 146789, - 146793, 146797, 146801, 146805, 146809, 146813, 146817, 146821, 146825, - 146829, 146833, 146837, 146841, 146845, 146849, 146853, 146857, 146861, - 146865, 146869, 146873, 146877, 146881, 146885, 146889, 146893, 146897, - 146901, 146905, 146909, 146913, 146917, 146921, 146925, 146929, 146933, - 146937, 146941, 146945, 146949, 146953, 146957, 146961, 146965, 146969, - 146973, 146977, 146981, 146985, 146989, 146993, 146997, 147001, 147005, - 147009, 147013, 147017, 147021, 147025, 147029, 147033, 147037, 147041, - 147045, 147049, 147053, 147057, 147061, 147065, 147069, 147073, 147077, - 147081, 147085, 147089, 147093, 147097, 147101, 147105, 147109, 147113, - 147117, 147121, 147125, 147129, 147133, 147137, 147141, 147145, 147149, - 147153, 147157, 147161, 147165, 147169, 147173, 147177, 147181, 147185, - 147189, 147193, 147197, 147201, 147205, 147209, 147213, 147217, 147221, - 147225, 147229, 147233, 147237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18718,3064 +20078,3186 @@ static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147241, 0, + 0, 0, 0, 0, 0, 159796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159800, 159803, 159807, 159811, + 159814, 159818, 159822, 159825, 159828, 159832, 159836, 159839, 159842, + 159845, 159848, 159853, 159856, 159860, 159863, 159866, 159869, 159872, + 159875, 159878, 159882, 159885, 159889, 159892, 159895, 159899, 159903, + 159907, 159911, 159916, 159921, 159927, 159933, 159939, 159944, 159950, + 159956, 159962, 159967, 159973, 159979, 159984, 159990, 159996, 160001, + 160007, 160013, 160018, 160023, 160029, 160034, 160040, 160046, 160052, + 160058, 160064, 160068, 160073, 160077, 160082, 160086, 160091, 160096, + 160102, 160108, 160114, 160119, 160125, 160131, 160137, 160142, 160148, + 160154, 160159, 160165, 160171, 160176, 160182, 160188, 160193, 160198, + 160204, 160209, 160215, 160221, 160227, 160233, 160239, 160244, 160248, + 160253, 160256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 147245, 147248, 147252, 147256, 147259, 147263, 147267, - 147270, 147273, 147277, 147281, 147284, 147287, 147290, 147293, 147298, - 147301, 147305, 147308, 147311, 147314, 147317, 147320, 147323, 147326, - 147329, 147332, 147335, 147338, 147342, 147346, 147350, 147354, 147359, - 147364, 147370, 147376, 147382, 147387, 147393, 147399, 147405, 147410, - 147416, 147422, 147427, 147433, 147439, 147444, 147450, 147456, 147461, - 147466, 147472, 147477, 147483, 147489, 147495, 147501, 147507, 147511, - 147516, 147520, 147525, 147529, 147534, 147539, 147545, 147551, 147557, - 147562, 147568, 147574, 147580, 147585, 147591, 147597, 147602, 147608, - 147614, 147619, 147625, 147631, 147636, 147641, 147647, 147652, 147658, - 147664, 147670, 147676, 147682, 147687, 147691, 147696, 147699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160260, 160263, 160266, 160269, + 160272, 160275, 160278, 160281, 160284, 160287, 160290, 160293, 160296, + 160299, 160302, 160305, 160308, 160311, 160314, 160317, 160320, 160323, + 160326, 160329, 160332, 160335, 160338, 160341, 160344, 160347, 160350, + 160353, 160356, 160359, 160362, 160365, 160368, 160371, 160374, 160377, + 160380, 160383, 160386, 160389, 160392, 160395, 160398, 160401, 160404, + 160407, 160410, 160413, 160416, 160419, 160422, 160425, 160428, 160431, + 160434, 160437, 160440, 160443, 160446, 160449, 160452, 160455, 160458, + 160461, 160464, 160467, 160470, 160473, 160476, 160479, 160482, 160485, + 160488, 160491, 160494, 160497, 160500, 160503, 160506, 160509, 160512, + 160515, 160518, 160521, 160524, 160527, 160530, 160533, 160536, 160539, + 160542, 160545, 160548, 160551, 160554, 160557, 160560, 160563, 160566, + 160569, 160572, 160575, 160578, 160581, 160584, 160587, 160590, 160593, + 160596, 160599, 160602, 160605, 160608, 160611, 160614, 160617, 160620, + 160623, 160626, 160629, 160632, 160635, 160638, 160641, 160644, 160647, + 160650, 160653, 160656, 160659, 160662, 160665, 160668, 160671, 160674, + 160677, 160680, 160683, 160686, 160689, 160692, 160695, 160698, 160701, + 160704, 160707, 160710, 160713, 160716, 160719, 160722, 160725, 160728, + 160731, 160734, 160737, 160740, 160743, 160746, 160749, 160752, 160755, + 160758, 160761, 160764, 160767, 160770, 160773, 160776, 160779, 160782, + 160785, 160788, 160791, 160794, 160797, 160800, 160803, 160806, 160809, + 160812, 160815, 160818, 160821, 160824, 160827, 160830, 160833, 160836, + 160839, 160842, 160845, 160848, 160851, 160854, 160857, 160860, 160863, + 160866, 160869, 160872, 160875, 160878, 160881, 160884, 160887, 160890, + 160893, 160896, 160899, 160902, 160905, 160908, 160911, 160914, 160917, + 160920, 160923, 160926, 160929, 160932, 160935, 160938, 160941, 160944, + 160947, 160950, 160953, 160956, 160959, 160962, 160965, 160968, 160971, + 160974, 160977, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160980, + 160982, 160984, 160989, 160991, 160996, 160998, 161003, 161005, 161010, + 161012, 161014, 161016, 161018, 161020, 161022, 161024, 161026, 161028, + 161031, 161035, 161037, 161039, 161043, 161047, 161052, 161054, 161056, + 161058, 161062, 161065, 161067, 161071, 161073, 161077, 161079, 161083, + 161086, 161088, 161092, 161096, 161098, 161104, 161106, 161111, 161113, + 161118, 161120, 161125, 161127, 161132, 161134, 161137, 161139, 161143, + 161145, 161152, 161154, 161156, 161158, 161163, 161165, 161167, 161169, + 161171, 161173, 161178, 161182, 161184, 161189, 161193, 161195, 161200, + 161204, 161206, 161211, 161215, 161217, 161219, 161221, 161223, 161227, + 161229, 161234, 161236, 161242, 161244, 161250, 161252, 161254, 161256, + 161260, 161262, 161269, 161271, 161278, 161280, 161285, 161291, 161293, + 161299, 161306, 161308, 161314, 161319, 161321, 161327, 161333, 161335, + 161341, 161347, 161349, 161355, 161359, 161361, 161366, 161368, 161370, + 161375, 161377, 161379, 161385, 161387, 161392, 161396, 161398, 161403, + 161407, 161409, 161415, 161417, 161421, 161423, 161427, 161429, 161436, + 161443, 161445, 161452, 161459, 161461, 161466, 161468, 161475, 161477, + 161482, 161484, 161490, 161492, 161496, 161498, 161504, 161506, 161510, + 161512, 161518, 161520, 161522, 161524, 161529, 161534, 161536, 161538, + 161548, 161552, 161559, 161566, 161571, 161576, 161588, 161590, 161592, + 161594, 161596, 161598, 161600, 161602, 161604, 161606, 161608, 161610, + 161612, 161614, 161616, 161618, 161620, 161622, 161624, 161626, 161628, + 161630, 161636, 161643, 161648, 161656, 161664, 161669, 161680, 161682, + 161684, 161686, 161688, 161690, 161692, 161694, 161696, 161698, 161700, + 161702, 161704, 161706, 161708, 161710, 161712, 161717, 161719, 161721, + 161727, 161739, 161750, 161752, 161754, 161756, 161758, 161760, 161762, + 161764, 161766, 161768, 161770, 161772, 161774, 161776, 161778, 161780, + 161782, 161784, 161786, 161788, 161790, 161792, 161794, 161796, 161798, + 161800, 161802, 161804, 161806, 161808, 161810, 161812, 161814, 161816, + 161818, 161820, 161822, 161824, 161826, 161828, 161830, 161832, 161834, + 161836, 161838, 161840, 161842, 161844, 161846, 161848, 161850, 161852, + 161854, 161856, 161858, 161860, 161862, 161864, 161866, 161868, 161870, + 161872, 161874, 161876, 161878, 161880, 161882, 161884, 161886, 161888, + 161890, 161892, 161894, 161896, 161898, 161900, 161902, 161904, 161906, + 161908, 161910, 161912, 161914, 161916, 161918, 161920, 161922, 161924, + 161926, 161928, 161930, 161932, 161934, 161936, 161938, 161940, 161942, + 161944, 161946, 161948, 161950, 161952, 161954, 161956, 161958, 161960, + 161962, 161964, 161966, 161968, 161970, 161972, 161974, 161976, 161978, + 161980, 161982, 161984, 161986, 161988, 161990, 161992, 161994, 161996, + 161998, 162000, 162002, 162004, 162006, 162008, 162010, 162012, 162014, + 162016, 162018, 162020, 162022, 162024, 162026, 162028, 162030, 162032, + 162034, 162036, 162038, 162040, 162042, 162044, 162046, 162048, 162050, + 162052, 162054, 162056, 162058, 162060, 162062, 162064, 162066, 162068, + 162070, 162072, 162074, 162076, 162078, 162080, 162082, 162084, 162086, + 162088, 162090, 162092, 162094, 162096, 162098, 162100, 162102, 162104, + 162106, 162108, 162110, 162112, 162114, 162116, 162118, 162120, 162122, + 162124, 162126, 162128, 162130, 162132, 162134, 162136, 162138, 162140, + 162142, 162144, 162146, 162148, 162150, 162152, 162154, 162156, 162158, + 162160, 162162, 162164, 162166, 162168, 162170, 162172, 162174, 162176, + 162178, 162180, 162182, 162184, 162186, 162188, 162190, 162192, 162194, + 162196, 162198, 162200, 162202, 162204, 162206, 162208, 162210, 162212, + 162214, 162216, 162218, 162220, 162222, 162224, 162226, 162228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 147703, 147706, 147709, 147712, 147715, 147718, 147721, - 147724, 147727, 147730, 147733, 147736, 147739, 147742, 147745, 147748, - 147751, 147754, 147757, 147760, 147763, 147766, 147769, 147772, 147775, - 147778, 147781, 147784, 147787, 147790, 147793, 147796, 147799, 147802, - 147805, 147808, 147811, 147814, 147817, 147820, 147823, 147826, 147829, - 147832, 147835, 147838, 147841, 147844, 147847, 147850, 147853, 147856, - 147859, 147862, 147865, 147868, 147871, 147874, 147877, 147880, 147883, - 147886, 147889, 147892, 147895, 147898, 147901, 147904, 147907, 147910, - 147913, 147916, 147919, 147922, 147925, 147928, 147931, 147934, 147937, - 147940, 147943, 147946, 147949, 147952, 147955, 147958, 147961, 147964, - 147967, 147970, 147973, 147976, 147979, 147982, 147985, 147988, 147991, - 147994, 147997, 148000, 148003, 148006, 148009, 148012, 148015, 148018, - 148021, 148024, 148027, 148030, 148033, 148036, 148039, 148042, 148045, - 148048, 148051, 148054, 148057, 148060, 148063, 148066, 148069, 148072, - 148075, 148078, 148081, 148084, 148087, 148090, 148093, 148096, 148099, - 148102, 148105, 148108, 148111, 148114, 148117, 148120, 148123, 148126, - 148129, 148132, 148135, 148138, 148141, 148144, 148147, 148150, 148153, - 148156, 148159, 148162, 148165, 148168, 148171, 148174, 148177, 148180, - 148183, 148186, 148189, 148192, 148195, 148198, 148201, 148204, 148207, - 148210, 148213, 148216, 148219, 148222, 148225, 148228, 148231, 148234, - 148237, 148240, 148243, 148246, 148249, 148252, 148255, 148258, 148261, - 148264, 148267, 148270, 148273, 148276, 148279, 148282, 148285, 148288, - 148291, 148294, 148297, 148300, 148303, 148306, 148309, 148312, 148315, - 148318, 148321, 148324, 148327, 148330, 148333, 148336, 148339, 148342, - 148345, 148348, 148351, 148354, 148357, 148360, 148363, 148366, 148369, - 148372, 148375, 148378, 148381, 148384, 148387, 148390, 148393, 148396, - 148399, 148402, 148405, 148408, 148411, 148414, 148417, 148420, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148423, 148425, 148427, 148432, - 148434, 148439, 148441, 148446, 148448, 148453, 148455, 148457, 148459, - 148461, 148463, 148465, 148467, 148469, 148471, 148474, 148477, 148479, - 148481, 148485, 148488, 148493, 148495, 148497, 148499, 148503, 148506, - 148508, 148512, 148514, 148518, 148520, 148524, 148527, 148529, 148533, - 148537, 148539, 148545, 148547, 148552, 148554, 148559, 148561, 148566, - 148568, 148573, 148575, 148578, 148580, 148584, 148586, 148593, 148595, - 148597, 148599, 148604, 148606, 148608, 148610, 148612, 148614, 148619, - 148623, 148625, 148630, 148634, 148636, 148641, 148645, 148647, 148652, - 148656, 148658, 148660, 148662, 148664, 148668, 148670, 148675, 148677, - 148683, 148685, 148691, 148693, 148695, 148697, 148701, 148703, 148710, - 148712, 148719, 148721, 148726, 148731, 148733, 148739, 148745, 148747, - 148753, 148758, 148760, 148766, 148772, 148774, 148780, 148786, 148788, - 148794, 148798, 148800, 148805, 148807, 148809, 148814, 148816, 148818, - 148824, 148826, 148831, 148835, 148837, 148842, 148846, 148848, 148854, - 148856, 148860, 148862, 148866, 148868, 148875, 148882, 148884, 148891, - 148898, 148900, 148905, 148907, 148914, 148916, 148921, 148923, 148929, - 148931, 148935, 148937, 148943, 148945, 148949, 148951, 148957, 148959, - 148961, 148963, 148968, 148973, 148975, 148977, 148987, 148991, 148998, - 149005, 149010, 149015, 149027, 149029, 149031, 149033, 149035, 149037, - 149039, 149041, 149043, 149045, 149047, 149049, 149051, 149053, 149055, - 149057, 149059, 149061, 149063, 149065, 149067, 149069, 149075, 149082, - 149087, 149092, 149103, 149105, 149107, 149109, 149111, 149113, 149115, - 149117, 149119, 149121, 149123, 149125, 149127, 149129, 149131, 149133, - 149135, 149140, 149142, 149144, 149150, 149162, 149173, 149175, 149177, - 149179, 149181, 149183, 149185, 149187, 149189, 149191, 149193, 149195, - 149197, 149199, 149201, 149203, 149205, 149207, 149209, 149211, 149213, - 149215, 149217, 149219, 149221, 149223, 149225, 149227, 149229, 149231, - 149233, 149235, 149237, 149239, 149241, 149243, 149245, 149247, 149249, - 149251, 149253, 149255, 149257, 149259, 149261, 149263, 149265, 149267, - 149269, 149271, 149273, 149275, 149277, 149279, 149281, 149283, 149285, - 149287, 149289, 149291, 149293, 149295, 149297, 149299, 149301, 149303, - 149305, 149307, 149309, 149311, 149313, 149315, 149317, 149319, 149321, - 149323, 149325, 149327, 149329, 149331, 149333, 149335, 149337, 149339, - 149341, 149343, 149345, 149347, 149349, 149351, 149353, 149355, 149357, - 149359, 149361, 149363, 149365, 149367, 149369, 149371, 149373, 149375, - 149377, 149379, 149381, 149383, 149385, 149387, 149389, 149391, 149393, - 149395, 149397, 149399, 149401, 149403, 149405, 149407, 149409, 149411, - 149413, 149415, 149417, 149419, 149421, 149423, 149425, 149427, 149429, - 149431, 149433, 149435, 149437, 149439, 149441, 149443, 149445, 149447, - 149449, 149451, 149453, 149455, 149457, 149459, 149461, 149463, 149465, - 149467, 149469, 149471, 149473, 149475, 149477, 149479, 149481, 149483, - 149485, 149487, 149489, 149491, 149493, 149495, 149497, 149499, 149501, - 149503, 149505, 149507, 149509, 149511, 149513, 149515, 149517, 149519, - 149521, 149523, 149525, 149527, 149529, 149531, 149533, 149535, 149537, - 149539, 149541, 149543, 149545, 149547, 149549, 149551, 149553, 149555, - 149557, 149559, 149561, 149563, 149565, 149567, 149569, 149571, 149573, - 149575, 149577, 149579, 149581, 149583, 149585, 149587, 149589, 149591, - 149593, 149595, 149597, 149599, 149601, 149603, 149605, 149607, 149609, - 149611, 149613, 149615, 149617, 149619, 149621, 149623, 149625, 149627, - 149629, 149631, 149633, 149635, 149637, 149639, 149641, 149643, 149645, - 149647, 149649, 149651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 162230, 162240, 162250, 162259, 162268, 162281, 162294, 162306, + 162318, 162328, 162338, 162348, 162358, 162369, 162380, 162390, 162399, + 162408, 162417, 162430, 162443, 162455, 162467, 162477, 162487, 162497, + 162507, 162516, 162525, 162535, 162545, 162554, 162563, 162573, 162583, + 162592, 162601, 162611, 162621, 162632, 162643, 162653, 162666, 162677, + 162691, 162699, 162710, 162718, 162726, 162734, 162742, 162750, 162758, + 162767, 162776, 162786, 162796, 162805, 162814, 162824, 162834, 162842, + 162850, 162857, 162867, 162876, 162884, 162891, 162901, 162910, 162921, + 162932, 162944, 162955, 162965, 162976, 162986, 162997, 163005, 163009, + 163013, 163017, 163021, 163025, 163029, 163033, 163037, 163041, 163045, + 163049, 163053, 163056, 163059, 163063, 163067, 163071, 163075, 163079, + 163083, 163087, 163091, 163094, 163098, 163102, 163106, 163110, 163114, + 163118, 163122, 163126, 163130, 163134, 163138, 163142, 163146, 163150, + 163154, 163158, 163162, 163166, 163170, 163174, 163178, 163182, 163186, + 163190, 163194, 163198, 163202, 163206, 163210, 163214, 163218, 163222, + 163226, 163230, 163234, 163238, 163242, 163246, 163250, 163254, 163258, + 163262, 163266, 163270, 163274, 163278, 163282, 163286, 163290, 163294, + 163298, 163302, 163306, 163310, 163314, 163318, 163322, 163326, 163330, + 163334, 163338, 163342, 163346, 163350, 163354, 163358, 163362, 163366, + 163370, 163374, 163378, 163382, 163386, 163390, 163394, 163398, 163401, + 163405, 163409, 163413, 163417, 163421, 163425, 163429, 163433, 163437, + 163441, 163445, 163449, 163453, 163457, 163461, 163465, 163469, 163473, + 163477, 163481, 163485, 163489, 163493, 163497, 163501, 163505, 163509, + 163513, 163517, 163521, 163525, 163529, 163533, 163537, 163541, 163545, + 163549, 163553, 163557, 163561, 163565, 163569, 163573, 163577, 163581, + 163585, 163589, 163593, 163597, 163601, 163605, 163609, 163613, 163617, + 163621, 163625, 163629, 163633, 163637, 163641, 163645, 163649, 163653, + 163657, 163661, 163665, 163669, 163673, 163677, 163681, 163685, 163689, + 163693, 163697, 163701, 163705, 163709, 163713, 163717, 163721, 163725, + 163729, 163733, 163737, 163741, 163745, 163749, 163753, 163757, 163761, + 163765, 163769, 163773, 163777, 163781, 163785, 163789, 163793, 163797, + 163801, 163805, 163809, 163813, 163817, 163821, 163825, 163829, 163833, + 163837, 163841, 163845, 163849, 163853, 163857, 163861, 163865, 163869, + 163873, 163877, 163881, 163885, 163889, 163893, 163897, 163901, 163905, + 163909, 163913, 163917, 163921, 163925, 163929, 163933, 163937, 163941, + 163945, 163949, 163953, 163957, 163961, 163965, 163969, 163973, 163977, + 163981, 163985, 163989, 163993, 163997, 164001, 164005, 164009, 164013, + 164017, 164021, 164025, 164029, 164033, 164037, 164041, 164045, 164049, + 164053, 164057, 164061, 164065, 164069, 164073, 164077, 164081, 164085, + 164089, 164093, 164097, 164101, 164105, 164109, 164113, 164117, 164121, + 164125, 164129, 164133, 164137, 164141, 164145, 164149, 164153, 164157, + 164161, 164165, 164170, 164175, 164180, 164184, 164190, 164197, 164204, + 164211, 164218, 164225, 164232, 164239, 164246, 164253, 164260, 164267, + 164274, 164281, 164288, 164295, 164302, 164308, 164315, 164322, 164329, + 164336, 164343, 164350, 164357, 164364, 164371, 164378, 164385, 164392, + 164399, 164406, 164412, 164419, 164426, 164435, 164444, 164453, 164462, + 164467, 164472, 164478, 164484, 164490, 164496, 164502, 164508, 164514, + 164520, 164526, 164532, 164538, 164544, 164549, 164555, 164565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149653, 149663, 149673, - 149682, 149691, 149704, 149717, 149729, 149741, 149751, 149761, 149771, - 149781, 149792, 149803, 149813, 149822, 149831, 149840, 149853, 149866, - 149878, 149890, 149900, 149910, 149920, 149930, 149939, 149948, 149958, - 149968, 149977, 149986, 149996, 150006, 150015, 150024, 150034, 150044, - 150055, 150066, 150076, 150089, 150100, 150114, 150122, 150133, 150141, - 150149, 150157, 150165, 150173, 150181, 150190, 150199, 150209, 150219, - 150228, 150237, 150247, 150257, 150265, 150274, 150282, 150291, 150299, - 150307, 150314, 150324, 150333, 150344, 150355, 150367, 150378, 150388, - 150399, 150409, 150420, 150428, 150432, 150436, 150440, 150444, 150448, - 150452, 150456, 150460, 150464, 150468, 150472, 150476, 150479, 150482, - 150486, 150490, 150494, 150498, 150502, 150506, 150510, 150514, 150517, - 150521, 150525, 150529, 150533, 150537, 150541, 150545, 150549, 150553, - 150557, 150561, 150565, 150569, 150573, 150577, 150581, 150585, 150589, - 150593, 150597, 150601, 150605, 150609, 150613, 150617, 150621, 150625, - 150629, 150633, 150637, 150641, 150645, 150649, 150653, 150657, 150661, - 150665, 150669, 150673, 150677, 150681, 150685, 150689, 150693, 150697, - 150701, 150705, 150709, 150713, 150717, 150721, 150725, 150729, 150733, - 150737, 150741, 150745, 150749, 150753, 150757, 150761, 150765, 150769, - 150773, 150777, 150781, 150785, 150789, 150793, 150797, 150801, 150805, - 150809, 150813, 150817, 150821, 150824, 150828, 150832, 150836, 150840, - 150844, 150848, 150852, 150856, 150860, 150864, 150868, 150872, 150876, - 150880, 150884, 150888, 150892, 150896, 150900, 150904, 150908, 150912, - 150916, 150920, 150924, 150928, 150932, 150936, 150940, 150944, 150948, - 150952, 150956, 150960, 150964, 150968, 150972, 150976, 150980, 150984, - 150988, 150992, 150996, 151000, 151004, 151008, 151012, 151016, 151020, - 151024, 151028, 151032, 151036, 151040, 151044, 151048, 151052, 151056, - 151060, 151064, 151068, 151072, 151076, 151080, 151084, 151088, 151092, - 151096, 151100, 151104, 151108, 151112, 151116, 151120, 151124, 151128, - 151132, 151136, 151140, 151144, 151148, 151152, 151156, 151160, 151164, - 151168, 151172, 151176, 151180, 151184, 151188, 151192, 151196, 151200, - 151204, 151208, 151212, 151216, 151220, 151224, 151228, 151232, 151236, - 151240, 151244, 151248, 151252, 151256, 151260, 151264, 151268, 151272, - 151276, 151280, 151284, 151288, 151292, 151296, 151300, 151304, 151308, - 151312, 151316, 151320, 151324, 151328, 151332, 151336, 151340, 151344, - 151348, 151352, 151356, 151360, 151364, 151368, 151372, 151376, 151380, - 151384, 151388, 151392, 151396, 151400, 151404, 151408, 151412, 151416, - 151420, 151424, 151428, 151432, 151436, 151440, 151444, 151448, 151452, - 151456, 151460, 151464, 151468, 151472, 151476, 151480, 151484, 151488, - 151492, 151496, 151500, 151504, 151508, 151512, 151516, 151520, 151524, - 151528, 151532, 151536, 151540, 151544, 151548, 151552, 151556, 151560, - 151564, 151568, 151572, 151576, 151580, 151584, 151588, 151593, 151598, - 151603, 151607, 151613, 151620, 151627, 151634, 151641, 151648, 151655, - 151662, 151669, 151676, 151683, 151690, 151697, 151704, 151710, 151717, - 151724, 151730, 151737, 151744, 151751, 151758, 151765, 151772, 151779, - 151786, 151793, 151800, 151807, 151814, 151821, 151828, 151834, 151841, - 151848, 151857, 151866, 151875, 151884, 151889, 151894, 151900, 151906, - 151912, 151918, 151924, 151930, 151936, 151942, 151948, 151954, 151960, - 151966, 151971, 151977, 151987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, }; /* name->code dictionary */ static unsigned int code_hash[] = { 74224, 4851, 125138, 78156, 78499, 72391, 7929, 66910, 194682, 127766, 78500, 66480, 64038, 42833, 74529, 12064, 72385, 596, 983821, 69850, - 13192, 8651, 120217, 126542, 120218, 12995, 64865, 1373, 0, 113752, 5816, - 119067, 64810, 4231, 6825, 42897, 4233, 4234, 4232, 917836, 74415, - 120210, 6384, 70351, 78108, 8851, 67698, 128553, 0, 41601, 8874, 72392, - 7748, 0, 0, 127026, 127939, 41603, 9784, 0, 9188, 41600, 0, 120618, - 128343, 1457, 3535, 128635, 6381, 0, 0, 65240, 11951, 0, 3404, 0, 70487, - 72411, 1759, 0, 41076, 68383, 69972, 119205, 66577, 94014, 127764, 65859, - 0, 7404, 0, 0, 69970, 128387, 65908, 9834, 3055, 9852, 983860, 65288, 0, - 11398, 0, 92417, 93016, 128380, 0, 603, 74398, 43548, 0, 71865, 917824, - 3350, 120817, 64318, 917828, 78121, 3390, 74483, 43265, 120599, 917830, - 78573, 0, 1919, 3400, 120651, 119949, 11647, 917540, 66446, 64141, 8562, - 2121, 64138, 4043, 8712, 64134, 64133, 11297, 983688, 983152, 11966, - 64128, 66286, 93042, 128830, 64132, 10867, 64130, 64129, 983844, 43374, - 9779, 2764, 66002, 10167, 9471, 0, 66021, 74509, 0, 5457, 5440, 8857, - 93981, 65282, 2843, 5355, 127928, 983965, 69971, 5194, 11657, 43984, - 128292, 113724, 128872, 0, 0, 72393, 10717, 64570, 5630, 5396, 64143, - 10682, 0, 10602, 800, 42499, 66186, 0, 0, 64930, 11631, 64146, 64145, - 64144, 762, 13172, 118859, 194661, 64468, 10906, 1353, 6960, 0, 128779, - 5828, 8724, 917806, 8933, 1601, 42244, 858, 7080, 64109, 64108, 8090, - 70455, 72388, 74606, 587, 0, 128131, 0, 0, 0, 78214, 2750, 74218, 556, - 64158, 64157, 78707, 12213, 194678, 2760, 0, 0, 78708, 194794, 64156, - 64155, 42496, 0, 64151, 64150, 12679, 10053, 10421, 11093, 64153, 64152, - 125016, 0, 4839, 68527, 0, 1874, 119016, 120091, 6577, 64125, 64124, - 64123, 0, 127531, 92534, 7007, 7590, 65443, 9036, 78847, 64122, 66389, - 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, 43981, 42128, - 127842, 1177, 65601, 12322, 64106, 69640, 92895, 64102, 7859, 1945, - 64099, 0, 10453, 64104, 7188, 7997, 0, 7389, 983161, 8705, 64097, 64096, - 9571, 528, 128671, 44017, 11429, 71347, 0, 983077, 917990, 73841, 0, 0, - 9056, 64313, 6188, 120019, 6155, 64068, 1823, 64066, 64065, 64072, 64071, - 63, 7233, 92212, 72414, 41904, 6639, 64064, 983775, 128344, 0, 1176, - 118959, 127930, 8162, 127019, 983831, 92747, 120519, 66376, 66242, 11415, - 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222, 69902, 7768, - 72403, 4199, 64708, 65064, 70117, 0, 8708, 9560, 64077, 64076, 8996, - 4992, 4471, 42622, 64079, 64078, 92179, 71878, 126570, 129120, 64615, - 41915, 0, 12075, 42041, 194825, 5174, 983217, 0, 127557, 3123, 0, 12685, - 119216, 8408, 64704, 0, 0, 9223, 0, 41616, 67999, 73797, 0, 1116, 128204, - 43049, 7136, 43050, 8548, 120485, 0, 119061, 917999, 0, 13115, 43675, - 64091, 9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, - 6199, 67249, 66398, 11434, 64083, 64082, 11329, 7737, 64087, 64086, - 64085, 64084, 194703, 9927, 41335, 4118, 1797, 0, 41334, 0, 46, 43448, - 127881, 298, 0, 128114, 0, 42627, 125011, 32, 6187, 119052, 11495, 11459, - 3665, 983600, 42871, 0, 19923, 74335, 0, 127192, 66239, 42264, 64403, - 4412, 7240, 92495, 917900, 983466, 65758, 12750, 4181, 8544, 119849, - 120199, 917897, 120198, 69809, 6181, 65014, 983420, 0, 983196, 3639, - 119588, 118851, 0, 118904, 10073, 120206, 128862, 127186, 68409, 42844, - 7498, 1098, 92565, 120205, 0, 128915, 10207, 8789, 93070, 0, 92973, - 128325, 9234, 0, 6182, 983473, 65058, 0, 983478, 194973, 0, 5471, 9461, - 5573, 118936, 5473, 44, 0, 66244, 94072, 0, 66238, 12844, 66894, 1622, - 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 983495, 43855, 41337, 0, - 41631, 8947, 68390, 69683, 41694, 0, 72396, 7908, 0, 10408, 6579, 0, - 64618, 0, 120147, 2138, 6583, 7761, 70005, 120504, 194828, 0, 5058, + 13192, 8651, 120217, 126542, 120218, 12995, 64865, 1373, 119856, 113752, + 5816, 119067, 64810, 4231, 6825, 42897, 4233, 4234, 4232, 120889, 74415, + 120210, 6384, 70351, 78108, 8851, 67698, 128553, 82954, 41601, 8874, + 72392, 7748, 125083, 0, 127026, 127939, 41603, 9784, 0, 9188, 41600, 0, + 120618, 128343, 1457, 3535, 128635, 6381, 0, 0, 65240, 11951, 0, 3404, + 983079, 70487, 72411, 1759, 120853, 41076, 68383, 69972, 119205, 66577, + 94014, 127764, 65859, 0, 7404, 0, 0, 69970, 128387, 65908, 9834, 3055, + 9852, 128360, 65288, 121291, 11398, 0, 92417, 93016, 128380, 127337, 603, + 74398, 43548, 0, 71865, 917824, 3350, 120817, 64318, 194698, 78121, 3390, + 74483, 43265, 92399, 917830, 78573, 118803, 1919, 3400, 120651, 83296, + 11647, 83298, 66446, 64141, 8562, 2121, 64138, 4043, 8712, 64134, 64133, + 11297, 983688, 983152, 11966, 64128, 66286, 93042, 128830, 64132, 10867, + 64130, 64129, 121255, 43374, 9779, 2764, 66002, 10167, 9471, 83458, + 66021, 74509, 0, 5457, 5440, 8857, 93981, 65282, 2843, 5355, 68858, + 983342, 69971, 5194, 11657, 43984, 128292, 113724, 128872, 0, 0, 72393, + 10717, 64570, 5630, 5396, 64143, 10682, 83300, 10602, 800, 42499, 66186, + 0, 0, 64930, 11631, 64146, 64145, 64144, 762, 13172, 75008, 77928, 43929, + 10906, 1353, 6960, 83032, 128779, 5828, 8724, 917806, 8933, 1601, 42244, + 858, 7080, 64109, 64108, 8090, 70455, 72388, 74606, 587, 917907, 82971, + 0, 0, 0, 78214, 2750, 74218, 556, 64158, 64157, 78707, 12213, 83290, + 2760, 83284, 83285, 78708, 83287, 64156, 64155, 42496, 83283, 64151, + 64150, 12679, 10053, 10421, 11093, 64153, 64152, 125016, 0, 4839, 68527, + 0, 1874, 119016, 120091, 6577, 64125, 64124, 64123, 0, 127531, 92534, + 7007, 7590, 65443, 9036, 78847, 64122, 66389, 66609, 121347, 64117, + 64116, 6287, 64114, 2725, 64120, 64119, 43981, 42128, 127842, 1177, + 65601, 12322, 64106, 69640, 92895, 64102, 7859, 1945, 64099, 0, 10453, + 64104, 7188, 7997, 0, 7389, 983161, 8705, 64097, 64096, 9571, 528, + 128545, 44017, 11429, 71347, 0, 983077, 120864, 73841, 83339, 83340, + 9056, 64313, 6188, 74360, 6155, 64068, 1823, 64066, 64065, 64072, 64071, + 63, 7233, 92212, 72414, 41904, 6639, 64064, 983775, 128344, 121388, 1176, + 118959, 127930, 8162, 127019, 128197, 92747, 120519, 42931, 66242, 11415, + 4333, 9855, 64112, 64642, 0, 5388, 0, 121271, 983649, 7714, 66222, 69902, + 7768, 72403, 4199, 64708, 65064, 70117, 0, 8708, 9560, 64077, 64076, + 8996, 4992, 4471, 42622, 64079, 64078, 92179, 71878, 126570, 121256, + 64615, 41915, 0, 12075, 42041, 194825, 5174, 983217, 0, 127557, 3123, + 125100, 12685, 119216, 8408, 64704, 83328, 0, 9223, 0, 41616, 67999, + 73797, 83327, 1116, 75067, 43049, 7136, 43050, 8548, 120485, 0, 75031, + 917622, 128168, 13115, 43675, 64091, 9322, 83338, 83331, 64095, 64094, + 8111, 66247, 42332, 64089, 64088, 6199, 67249, 66398, 11434, 64083, + 64082, 11329, 7737, 64087, 64086, 64085, 64084, 83033, 9927, 41335, 4118, + 1797, 83312, 41334, 0, 46, 43448, 83309, 298, 83303, 83304, 83305, 42627, + 125011, 32, 6187, 83037, 11495, 11459, 3665, 83036, 42871, 0, 19923, + 74335, 0, 127192, 66239, 42264, 64403, 4412, 7240, 83314, 71444, 983468, + 65758, 12750, 4181, 8544, 83461, 68053, 83407, 120198, 69809, 6181, + 65014, 983422, 128484, 983196, 3639, 119588, 118851, 83039, 118904, + 10073, 120206, 83038, 127186, 68409, 42844, 7498, 1098, 92565, 120205, 0, + 128915, 10207, 8789, 93070, 120338, 92973, 128325, 9234, 917895, 6182, + 983475, 65058, 120319, 983480, 68064, 917831, 5471, 9461, 5573, 118936, + 5473, 44, 0, 66244, 94072, 0, 66238, 12844, 66894, 1622, 7767, 1900, + 41339, 11458, 119061, 0, 6581, 5576, 128618, 43855, 41337, 0, 41631, + 8947, 68390, 69683, 41694, 983848, 72396, 7908, 0, 10408, 6579, 917872, + 64618, 0, 120147, 2138, 6583, 7761, 70005, 120504, 194828, 128961, 5058, 41010, 9992, 128299, 5057, 917941, 0, 74538, 5054, 118951, 194971, 78606, - 0, 1437, 41617, 658, 3497, 128509, 7486, 5061, 5060, 4235, 127878, 0, - 128529, 12113, 4236, 4727, 128487, 0, 7693, 10749, 120332, 7488, 5773, - 978, 128134, 0, 41619, 10239, 68611, 71864, 66209, 983423, 74135, 9748, - 983956, 127524, 0, 0, 0, 0, 195083, 0, 983843, 983300, 0, 0, 0, 92776, - 9341, 78821, 2379, 11325, 983951, 64668, 67854, 8125, 120545, 6743, - 119175, 917940, 2369, 0, 983972, 127966, 119235, 71868, 73936, 7008, - 43660, 0, 0, 43841, 2367, 127827, 983857, 264, 2375, 8060, 6194, 119858, - 1844, 119084, 129049, 6019, 0, 0, 6961, 0, 70435, 67171, 8800, 0, 42862, - 4463, 65581, 6192, 127900, 42771, 0, 92333, 725, 65042, 93014, 120800, - 983040, 12892, 0, 67149, 0, 0, 0, 0, 127261, 12224, 983128, 129061, 5074, - 5073, 128790, 8983, 118981, 74493, 71231, 5072, 74547, 6198, 11614, 0, - 196, 0, 0, 0, 4929, 120342, 0, 0, 127987, 0, 42847, 119856, 0, 67754, - 4934, 0, 41323, 9758, 0, 92289, 70181, 42584, 0, 4329, 41321, 4979, 3048, - 7752, 41320, 983042, 64667, 12819, 983870, 5071, 127915, 3642, 67334, - 5070, 10042, 113813, 3987, 5068, 0, 8909, 78650, 78649, 69917, 10636, - 73981, 11806, 43167, 4531, 1245, 9105, 66463, 4921, 120219, 4926, 65544, - 73884, 194619, 0, 0, 64709, 0, 194620, 78880, 4922, 325, 992, 119568, - 4925, 127218, 0, 9526, 4920, 128617, 948, 0, 120208, 4930, 983225, 92175, - 120275, 4933, 113779, 0, 118985, 4928, 0, 0, 74770, 120194, 126548, 722, - 194934, 19908, 12637, 127485, 119855, 8753, 1509, 0, 5468, 9511, 43493, - 127477, 1672, 6205, 10864, 74586, 127480, 70103, 92694, 78555, 127468, - 73863, 126577, 68336, 41607, 120115, 1679, 120116, 120180, 92761, 127462, - 7005, 41609, 9580, 70431, 401, 69949, 43779, 6968, 5761, 342, 8553, 0, + 0, 1437, 41617, 658, 3497, 128509, 7486, 5061, 5060, 4235, 127878, + 128322, 128529, 12113, 4236, 4727, 128487, 0, 7693, 10749, 120332, 7488, + 5773, 978, 128134, 983699, 41619, 10239, 68611, 71864, 66209, 127233, + 74135, 9748, 983956, 127524, 0, 983316, 194676, 194675, 128081, 0, + 983313, 983302, 0, 127865, 0, 92776, 9341, 78821, 2379, 11325, 917902, + 64668, 67854, 8125, 120545, 6743, 83164, 917940, 2369, 83406, 983323, + 127966, 119235, 71868, 73936, 7008, 43660, 120346, 0, 43841, 2367, + 127827, 983857, 264, 2375, 8060, 6194, 119858, 1844, 119084, 129049, + 6019, 128975, 0, 6961, 0, 70435, 67171, 8800, 127332, 42862, 4463, 65581, + 6192, 119610, 42771, 0, 92333, 725, 65042, 93014, 120800, 74942, 12892, + 0, 67149, 74899, 73931, 0, 120495, 127261, 12224, 983128, 129061, 5074, + 5073, 121164, 8983, 118981, 74493, 71231, 5072, 74547, 6198, 11614, 0, + 196, 983154, 0, 983936, 4929, 120342, 129145, 0, 127987, 121455, 42847, + 92953, 0, 67754, 4934, 983981, 41323, 9758, 0, 92289, 70181, 42584, 0, + 4329, 41321, 4979, 3048, 7752, 41320, 983042, 64667, 12819, 983870, 5071, + 127915, 3642, 67334, 5070, 10042, 113813, 3987, 5068, 983460, 8909, + 78650, 78649, 69917, 10636, 73981, 11806, 43167, 4531, 1245, 9105, 66463, + 4921, 120219, 4926, 65544, 73884, 121359, 128028, 0, 64709, 83269, + 128854, 78880, 4922, 325, 992, 119568, 4925, 127218, 0, 9526, 4920, + 128617, 948, 0, 120208, 4930, 127857, 92175, 120275, 4933, 113779, + 121049, 118985, 4928, 983149, 83514, 74770, 120194, 126548, 722, 194934, + 19908, 12637, 127485, 82999, 8753, 1509, 0, 5468, 9511, 43493, 127477, + 1672, 6205, 10864, 74586, 127480, 70103, 92694, 78555, 127468, 73863, + 126577, 68336, 41607, 120115, 1679, 120116, 120180, 92761, 127462, 7005, + 41609, 9580, 70431, 401, 69949, 43779, 6968, 5761, 342, 8553, 127900, 8143, 127115, 11983, 92249, 624, 74508, 4057, 43788, 5078, 74258, 12478, - 0, 5076, 0, 194609, 0, 8295, 685, 9025, 1524, 12618, 0, 5539, 129182, - 92523, 120101, 7138, 120552, 43504, 194611, 66914, 65794, 12520, 8058, + 0, 5076, 128702, 82991, 0, 8295, 685, 9025, 1524, 12618, 0, 5539, 129182, + 92523, 71435, 7138, 120552, 43504, 194611, 66914, 65794, 12520, 8058, 9732, 92480, 5080, 64775, 5036, 5035, 120590, 42604, 983656, 0, 8074, - 275, 13291, 1907, 78838, 4432, 127271, 5033, 127273, 120818, 4836, 3888, - 73792, 10729, 64546, 127262, 43704, 127264, 92957, 67588, 119000, 124983, + 275, 13291, 1907, 78838, 4432, 121313, 5033, 120341, 120818, 4836, 3888, + 73792, 10729, 64546, 127262, 43704, 127264, 92957, 67588, 68061, 124983, 70360, 8858, 6409, 7663, 120252, 128100, 119007, 0, 66321, 94052, 12814, 127248, 3432, 10218, 0, 6094, 7641, 42445, 128792, 92487, 42406, 1676, 67362, 74862, 67365, 5030, 67364, 118810, 195008, 73869, 9622, 113763, - 69944, 6787, 67361, 0, 0, 68319, 10544, 12919, 73812, 72397, 0, 0, 69906, - 120789, 983041, 947, 67695, 67367, 194585, 10969, 67228, 7613, 92562, - 119936, 4795, 119930, 7018, 7376, 120181, 120192, 120268, 0, 43567, - 74056, 917910, 11833, 119919, 7216, 65232, 7217, 251, 7218, 7895, 4395, - 43538, 119926, 119929, 119928, 7213, 68476, 7214, 7215, 5879, 74141, - 8880, 7685, 66459, 120173, 65540, 67359, 625, 8187, 42861, 1113, 7236, - 7915, 3630, 120176, 8179, 70163, 67886, 9316, 10980, 2489, 65624, 8150, - 1359, 67652, 70464, 127330, 73756, 5042, 5041, 42769, 12084, 127324, - 127321, 74410, 127319, 127320, 127317, 127318, 127315, 12283, 1616, 3795, - 67732, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 67724, 3239, 66893, - 0, 0, 8431, 0, 42164, 71229, 11778, 12620, 6826, 73773, 70169, 5040, 0, - 0, 67094, 78420, 0, 5039, 983678, 78418, 0, 5038, 0, 0, 13184, 74293, 0, - 64648, 0, 9359, 78416, 917623, 128770, 65157, 6662, 0, 70182, 3863, - 73909, 4835, 55266, 43432, 127822, 4309, 7127, 194569, 0, 194568, 1301, - 0, 42589, 569, 128804, 73813, 711, 4389, 7133, 120643, 73880, 11610, - 11368, 0, 194570, 41331, 1006, 74240, 67224, 1550, 8201, 70453, 7627, - 5499, 5031, 77908, 42738, 65784, 77907, 65267, 3758, 0, 65781, 64734, - 67222, 2440, 65780, 70787, 8449, 0, 5008, 983572, 2118, 126508, 12121, - 8255, 5512, 73875, 2128, 2130, 2131, 2126, 2133, 1119, 127067, 2114, - 2116, 2455, 113798, 2122, 2123, 2124, 2125, 127486, 8714, 983820, 2113, - 917985, 2115, 128177, 127907, 43713, 5052, 66220, 5821, 6186, 65778, - 65775, 5051, 65773, 1429, 42647, 5050, 302, 388, 41115, 735, 6637, 5907, - 65088, 0, 12726, 74594, 9117, 983181, 12003, 5513, 6666, 5053, 74230, - 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, 71251, 92237, 74807, 0, - 5048, 5047, 0, 0, 74201, 92313, 0, 74497, 92395, 8089, 6929, 639, 983563, - 68179, 64442, 70180, 92348, 4599, 41402, 6674, 43397, 43294, 1476, 648, - 0, 65819, 3233, 0, 41782, 6951, 94017, 983976, 3530, 9750, 128317, - 128122, 6656, 42618, 70175, 5046, 8512, 65856, 74261, 8967, 0, 5045, - 42026, 1916, 7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, - 74004, 9669, 12341, 12703, 8402, 0, 119070, 70174, 41750, 3586, 64508, - 43148, 0, 127971, 119606, 67983, 13296, 517, 0, 128534, 194946, 41528, - 123, 65454, 0, 194856, 74478, 10531, 7784, 41526, 10829, 73991, 8057, - 1126, 73895, 194857, 194591, 0, 3925, 4251, 8069, 10517, 71112, 489, - 71110, 4250, 120441, 120452, 43151, 983178, 92738, 66200, 0, 0, 125026, - 74298, 128879, 983474, 8711, 6183, 0, 983952, 72402, 120448, 7623, - 118925, 118889, 9235, 12760, 74176, 69662, 66445, 43540, 10062, 3743, - 11514, 11078, 0, 12136, 0, 126597, 120435, 194850, 7726, 195095, 19922, - 267, 3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, - 10652, 41612, 41077, 3402, 9050, 3398, 917796, 983348, 0, 3391, 41075, - 2476, 0, 128017, 0, 10625, 129106, 12767, 13017, 78743, 64261, 64934, - 70152, 13014, 13013, 0, 6673, 0, 0, 0, 12438, 0, 983342, 0, 983880, - 126638, 9053, 13015, 74523, 0, 704, 66215, 6195, 983828, 6660, 78758, - 917760, 74861, 42212, 12629, 11435, 0, 55256, 65538, 67343, 127940, - 129086, 43876, 126585, 65448, 78100, 12948, 119001, 195002, 119238, - 195004, 78099, 127085, 0, 128320, 4287, 8276, 4902, 1131, 983606, 78458, - 66728, 1816, 0, 42533, 168, 42845, 4898, 64298, 195012, 78105, 4901, - 1821, 0, 578, 3653, 128946, 791, 9162, 6977, 74196, 78889, 70160, 0, - 73731, 8354, 43590, 119303, 983449, 7557, 119108, 67378, 8234, 7241, - 983448, 113735, 119167, 194996, 12811, 65925, 3946, 78078, 10998, 78080, - 673, 194867, 64397, 128276, 74599, 78449, 8890, 194977, 194976, 2448, - 78085, 10267, 8424, 2452, 78083, 67217, 8729, 78456, 0, 7845, 126564, - 71302, 4408, 4122, 6772, 11039, 8723, 65896, 71310, 119302, 731, 119304, - 71904, 2438, 64855, 119300, 119299, 1175, 0, 42135, 373, 119172, 2119, - 11457, 11521, 7723, 128639, 0, 0, 41952, 93023, 5273, 2127, 5269, 6337, - 5202, 2404, 5267, 42823, 11291, 19915, 5277, 12963, 70320, 6189, 4125, - 1314, 12133, 120340, 118873, 1271, 983640, 0, 66024, 41482, 3864, 9204, - 0, 3879, 0, 12978, 4166, 4574, 0, 7567, 7459, 78128, 41390, 5384, 41882, - 67647, 70154, 5759, 983912, 0, 41388, 64446, 41392, 64288, 41387, 67201, - 8706, 5552, 983187, 700, 0, 5553, 0, 7088, 5356, 7499, 68007, 66596, - 74066, 67251, 10263, 5554, 0, 12344, 10311, 78113, 6665, 11115, 0, 7618, - 8517, 11455, 78440, 64632, 64447, 5555, 78088, 78093, 78091, 0, 42803, - 65033, 9143, 6668, 67288, 67995, 195069, 656, 195071, 65037, 4577, 64624, - 0, 0, 71912, 983649, 4269, 73885, 917775, 42846, 69644, 950, 0, 92273, - 66580, 118895, 66683, 10554, 119008, 119121, 6832, 5098, 917768, 194668, - 70403, 5097, 4935, 9848, 10381, 0, 67296, 92896, 3651, 0, 67294, 70848, - 5102, 5101, 10269, 12983, 8138, 4517, 1932, 5100, 1439, 12093, 1247, - 10034, 195064, 5099, 78373, 1441, 42087, 3063, 650, 119953, 7838, 0, - 128655, 195040, 119142, 9031, 70829, 78427, 9078, 8545, 66356, 128799, - 194923, 9154, 9118, 126543, 0, 2676, 2277, 128422, 68237, 6190, 8599, - 125118, 69918, 10795, 9857, 7014, 9856, 195033, 71903, 12129, 0, 8481, 0, - 6202, 67711, 10920, 113726, 5203, 195039, 195038, 5108, 5107, 65818, - 66019, 9762, 11205, 5541, 74772, 0, 12613, 5284, 6657, 207, 128806, 4275, - 74819, 854, 68147, 74381, 66816, 78786, 5103, 127861, 64348, 41368, - 43974, 488, 69811, 0, 71339, 10157, 194737, 43034, 11438, 64674, 0, - 70158, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, 5105, 127509, - 69720, 6476, 5104, 983749, 304, 3176, 78871, 70149, 932, 113683, 6567, - 238, 69656, 78432, 194595, 19905, 43850, 195015, 78870, 41044, 67640, - 67302, 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 93039, 8803, - 309, 6622, 8151, 10858, 78706, 67636, 70171, 12568, 0, 12553, 10814, - 43275, 6950, 9712, 68680, 43970, 126535, 65165, 92725, 0, 66466, 124986, - 0, 0, 66725, 6191, 11351, 10437, 11316, 67634, 43763, 0, 41754, 67635, - 9370, 2720, 194600, 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 983047, - 93067, 10834, 983127, 0, 65732, 94095, 917547, 92682, 67679, 129150, - 67309, 7781, 41383, 64568, 67311, 120738, 12077, 74433, 64586, 917620, - 42396, 55255, 3475, 67260, 2479, 67306, 3632, 120728, 10698, 8376, 3648, - 67263, 74844, 67639, 3636, 67894, 3650, 8837, 65229, 1843, 42283, 43250, - 41562, 9100, 74548, 917630, 3640, 127190, 42321, 7284, 92880, 118987, - 194950, 194949, 74115, 194951, 126649, 194953, 42080, 2529, 0, 983784, 0, - 42083, 120678, 68398, 194957, 67619, 66367, 194958, 9634, 92380, 9988, 0, - 41068, 0, 4295, 65264, 68006, 0, 92545, 0, 785, 8236, 128647, 9027, - 68160, 67623, 64383, 120265, 925, 127156, 0, 41985, 41071, 9586, 194908, - 41984, 9217, 128372, 92510, 92218, 9186, 2067, 4016, 983803, 0, 381, - 12936, 0, 42077, 92985, 69880, 5184, 42078, 194607, 10810, 128531, 4585, - 19943, 5860, 67633, 0, 983279, 812, 3615, 72401, 5178, 44000, 120548, - 78807, 5188, 74287, 67629, 3605, 10692, 1166, 64429, 42639, 924, 0, - 67631, 42616, 120670, 2442, 10703, 67317, 67632, 67316, 12771, 12736, - 12753, 66708, 73933, 67626, 42401, 0, 69872, 127373, 42288, 12751, - 983064, 8542, 13145, 194963, 2468, 66706, 41294, 3626, 3883, 64388, - 42479, 71220, 41117, 0, 92580, 0, 0, 67624, 0, 1290, 0, 65585, 2715, 806, - 65208, 41884, 917883, 1318, 64731, 126578, 0, 0, 66325, 3465, 2405, 9240, - 983858, 12756, 65259, 0, 983781, 12752, 5833, 1432, 66396, 41883, 73912, - 9799, 0, 41886, 2480, 0, 2062, 67326, 6494, 5537, 78656, 0, 194587, - 124969, 1211, 0, 0, 67269, 118832, 12318, 129024, 113796, 68005, 10622, - 983779, 0, 78654, 6566, 71195, 0, 73780, 119196, 64864, 0, 78660, 0, - 8284, 13081, 119206, 3589, 42051, 4035, 6492, 92236, 4265, 6642, 3977, - 74186, 41778, 836, 92947, 2488, 129176, 4582, 0, 0, 41777, 12926, 983377, - 7528, 10550, 113761, 92706, 0, 10961, 93977, 1374, 64878, 119014, 67720, - 42389, 41374, 2286, 917604, 78492, 41377, 127909, 0, 400, 12597, 120586, - 0, 0, 6661, 983145, 64827, 0, 73817, 390, 0, 71301, 983862, 3473, 7718, - 113755, 127011, 0, 55285, 73784, 66394, 0, 11969, 120461, 127841, 6365, - 1887, 6763, 92551, 8080, 7006, 0, 118902, 6757, 64351, 1544, 67156, 6766, - 64677, 120716, 67088, 6146, 74031, 771, 120682, 0, 12812, 13168, 42272, - 12200, 66423, 7904, 0, 953, 12917, 119560, 12300, 67089, 11491, 9724, - 10341, 983773, 9524, 7490, 11389, 7489, 3379, 0, 7487, 194624, 471, 7484, - 7482, 6753, 7480, 5764, 7478, 7477, 6501, 7475, 6918, 7473, 7472, 2474, - 7470, 7468, 10232, 10615, 10213, 127288, 92357, 10049, 11834, 3544, 0, - 6017, 65311, 127481, 120216, 13306, 10533, 7870, 73949, 7625, 194882, - 120544, 0, 127950, 92660, 0, 77889, 0, 19961, 2472, 42665, 92341, 0, - 2139, 4256, 120776, 74380, 43836, 42675, 42658, 12845, 70345, 70508, - 65138, 119355, 67862, 0, 65671, 7083, 120008, 8066, 7678, 74865, 125134, - 120321, 0, 983394, 7186, 0, 120555, 0, 445, 120566, 66849, 983477, 0, - 8330, 0, 0, 42797, 113736, 120215, 93036, 3902, 0, 1770, 67091, 125067, - 1560, 120209, 194972, 4584, 73843, 0, 11712, 10866, 67092, 1118, 71334, - 0, 0, 1081, 7436, 11147, 7252, 70093, 5996, 69921, 4903, 68142, 41386, - 5162, 119189, 1330, 128613, 7139, 0, 12047, 41384, 0, 0, 1848, 4334, - 6324, 41975, 64777, 10674, 12308, 12186, 0, 0, 983741, 12715, 68002, - 983479, 126630, 2018, 66672, 41979, 66685, 119157, 68000, 78490, 0, - 126984, 68001, 9334, 92705, 70800, 70101, 7975, 0, 77957, 0, 43494, 4884, - 66597, 69732, 0, 0, 6313, 65513, 69857, 0, 0, 0, 2345, 43697, 463, 0, 0, - 68178, 3117, 5460, 0, 128717, 983387, 0, 42279, 194577, 0, 78415, 983228, - 68524, 983384, 13248, 125027, 0, 128471, 128415, 983153, 0, 5663, 127942, - 128472, 0, 0, 2482, 1471, 194583, 113747, 42247, 12378, 73925, 69664, 0, - 12374, 0, 195023, 0, 118828, 2460, 71882, 11944, 12376, 127868, 64679, - 92893, 12380, 10557, 64473, 5870, 11122, 2024, 127180, 0, 71879, 539, 0, - 127765, 70120, 3853, 65180, 127923, 120796, 120245, 92324, 0, 8659, 0, - 12474, 67241, 9503, 194969, 2478, 120248, 4162, 0, 4260, 12953, 69633, - 120089, 12470, 92640, 74189, 2742, 12476, 11798, 10946, 127310, 5000, - 113687, 983579, 128777, 69672, 8213, 43824, 7771, 6161, 68018, 6709, - 194967, 78885, 119243, 68235, 120582, 78547, 113709, 10301, 10333, 10397, - 124934, 0, 73791, 0, 0, 0, 0, 119123, 4014, 12842, 73952, 12015, 127290, - 8275, 3893, 983264, 0, 12210, 7221, 42147, 74868, 74550, 71215, 64747, - 118841, 0, 12516, 4444, 0, 92271, 74537, 10892, 8231, 0, 6473, 41968, - 78388, 41973, 3591, 41969, 0, 2453, 128549, 92666, 64705, 71068, 0, - 10349, 10413, 43591, 41962, 3202, 74353, 129175, 8316, 129174, 0, 94060, - 687, 125089, 129074, 0, 1840, 0, 68671, 11121, 4883, 285, 4723, 11175, + 69944, 6787, 67361, 983270, 0, 68319, 10544, 12919, 71484, 72397, 0, 0, + 69906, 120789, 983041, 947, 67695, 67367, 128528, 10969, 67228, 7613, + 92562, 119936, 4795, 119930, 7018, 7376, 120181, 120192, 120268, 0, + 43567, 74056, 120266, 11833, 119919, 7216, 65232, 7217, 251, 7218, 7895, + 4395, 43538, 119926, 119834, 119928, 7213, 68476, 7214, 7215, 5879, + 74141, 8880, 7685, 66459, 120173, 65540, 67359, 625, 8187, 42861, 1113, + 7236, 7915, 3630, 120176, 8179, 70163, 67886, 9316, 10980, 2489, 65624, + 8150, 1359, 67652, 70464, 127330, 73756, 5042, 5041, 42769, 12084, + 127324, 127321, 74410, 127319, 127320, 127317, 121284, 127315, 12283, + 1616, 3795, 67732, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 128280, + 67724, 3239, 66893, 128818, 0, 8431, 0, 42164, 71229, 11778, 12620, 6826, + 73773, 70169, 5040, 127969, 0, 67094, 78420, 0, 5039, 983241, 78418, 0, + 5038, 0, 983862, 13184, 43960, 120931, 64648, 0, 9359, 78416, 917623, + 128770, 65157, 6662, 0, 70182, 3863, 73909, 4835, 55266, 43432, 127822, + 4309, 7127, 194569, 0, 194568, 1301, 0, 42589, 569, 128804, 73813, 711, + 4389, 7133, 120643, 73880, 11610, 11368, 0, 194570, 41331, 1006, 74240, + 67224, 1550, 8201, 70453, 7627, 5499, 5031, 77908, 42738, 65784, 43957, + 65267, 3758, 0, 65781, 64734, 67222, 2440, 43955, 70787, 8449, 0, 5008, + 983572, 2118, 126508, 12121, 8255, 5512, 73875, 2128, 2130, 2131, 2126, + 2133, 1119, 121250, 2114, 2116, 2455, 113798, 2122, 2123, 2124, 2125, + 127486, 8714, 983820, 2113, 195049, 2115, 128177, 127907, 43713, 5052, + 66220, 5821, 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, + 388, 41115, 735, 6637, 5907, 65088, 0, 12726, 74594, 9117, 983181, 12003, + 5513, 5109, 5053, 74230, 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, + 71251, 92237, 74807, 983062, 5048, 5047, 194837, 983380, 74201, 92313, + 194802, 74497, 82982, 8089, 6929, 639, 82981, 68179, 64442, 70180, 82984, + 4599, 41402, 6674, 43397, 43294, 1476, 648, 0, 65819, 3233, 0, 41782, + 6951, 94017, 129197, 3530, 9750, 128317, 120991, 6656, 42618, 70175, + 5046, 8512, 65856, 74261, 8967, 0, 5045, 42026, 1916, 7986, 5044, 120556, + 9006, 13128, 5043, 121335, 7853, 67808, 74004, 9669, 12341, 12703, 8402, + 128883, 119070, 70174, 41750, 3586, 64508, 43148, 0, 127971, 119606, + 67983, 13296, 517, 0, 128467, 194946, 41528, 123, 65454, 0, 121326, + 74478, 10531, 7784, 41526, 10829, 73991, 8057, 1126, 73895, 194857, + 194591, 0, 3925, 4251, 8069, 10517, 71112, 489, 71110, 4250, 92266, + 120452, 43151, 983178, 92738, 66200, 0, 0, 125026, 74298, 128879, 983476, + 8711, 6183, 83448, 983952, 72402, 120448, 7623, 118925, 66376, 9235, + 12760, 74176, 69662, 66445, 43540, 10062, 3743, 11514, 11078, 0, 12136, + 0, 126597, 120434, 194850, 7726, 195095, 19922, 267, 3393, 42198, 1371, + 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, 10652, 41612, 41077, 3402, + 9050, 3398, 128424, 983350, 0, 3391, 41075, 2476, 0, 128017, 0, 10625, + 129106, 12767, 13017, 78743, 64261, 64934, 70152, 13014, 13013, 121198, + 6673, 0, 0, 121324, 12438, 0, 983344, 83106, 71128, 120062, 9053, 13015, + 74523, 0, 704, 66215, 6195, 74949, 6660, 78758, 917760, 74861, 42212, + 12629, 11435, 0, 55256, 65538, 67343, 121437, 129086, 43876, 92941, + 65448, 78100, 12948, 119001, 128595, 43949, 120048, 78099, 127085, 0, + 128320, 4287, 8276, 4902, 1131, 983606, 78458, 66728, 1816, 43952, 42533, + 168, 42845, 4898, 64298, 43950, 78105, 4901, 1821, 43951, 578, 3653, + 128946, 791, 9162, 6977, 74196, 78889, 70160, 0, 73731, 8354, 43590, + 119303, 983451, 7557, 119108, 67378, 8234, 7241, 128608, 113735, 119167, + 194996, 12811, 65925, 3946, 78078, 10998, 78080, 673, 194867, 64397, + 128276, 74599, 78449, 8890, 194977, 194976, 2448, 78085, 10267, 8424, + 2452, 78083, 67217, 8729, 78456, 0, 7845, 126564, 71302, 4408, 4122, + 6772, 11039, 8723, 65896, 71310, 119302, 731, 119304, 71904, 2438, 64855, + 119300, 119299, 1175, 0, 42135, 373, 119172, 2119, 11457, 11521, 7723, + 128639, 0, 0, 41952, 93023, 5273, 2127, 5269, 6337, 5202, 2404, 5267, + 42823, 11291, 19915, 5277, 12963, 70320, 6189, 4125, 1314, 12133, 120340, + 118873, 1271, 983640, 129112, 66024, 41482, 3864, 9204, 0, 3879, 0, + 12978, 4166, 4574, 128111, 7567, 7459, 78128, 41390, 5384, 41882, 67647, + 70154, 5759, 194869, 121413, 41388, 64446, 41392, 64288, 41387, 67201, + 8706, 5552, 68837, 700, 0, 5553, 0, 7088, 5356, 7499, 68007, 66596, + 74066, 67251, 10263, 5554, 0, 12344, 10311, 78113, 6665, 11115, 121035, + 7618, 8517, 11455, 78440, 64632, 64447, 5555, 78088, 78093, 78091, 0, + 42803, 65033, 9143, 6668, 67288, 67995, 195069, 656, 195071, 65037, 4577, + 64624, 0, 0, 71912, 194908, 4269, 73885, 917775, 42846, 69644, 950, 0, + 92273, 66580, 77992, 66683, 10554, 119008, 119121, 6832, 5098, 917768, + 194668, 70403, 5097, 4935, 9848, 10381, 0, 67296, 92896, 3651, 0, 67294, + 70848, 5102, 5101, 10269, 12983, 8138, 4517, 1932, 5100, 1439, 12093, + 1247, 10034, 121340, 5099, 78373, 1441, 42087, 3063, 650, 119953, 7838, + 0, 128655, 195040, 119142, 9031, 70829, 78427, 9078, 8545, 66356, 128799, + 194923, 9154, 9118, 126543, 119586, 2676, 2277, 128422, 68237, 6190, + 8599, 125118, 69918, 10795, 9857, 7014, 9856, 195033, 71903, 12129, + 126651, 8481, 83068, 6202, 67711, 10920, 113726, 5203, 195039, 195038, + 5108, 5107, 65818, 66019, 9762, 11205, 5541, 74772, 0, 12613, 5284, 6657, + 207, 121206, 4275, 74819, 854, 68147, 74381, 66816, 78786, 5103, 127861, + 64348, 41368, 43974, 488, 69811, 0, 71339, 10157, 194612, 43034, 11438, + 64674, 0, 70158, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, + 5105, 65266, 69720, 6476, 5104, 983749, 304, 3176, 78871, 70149, 932, + 113683, 6567, 238, 69656, 78432, 194595, 19905, 43850, 195015, 78870, + 41044, 67640, 67302, 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, + 93039, 8803, 309, 6622, 8151, 10858, 78706, 67636, 70171, 12568, 127917, + 12553, 10814, 43275, 6950, 9712, 68680, 43970, 126535, 65165, 92725, 0, + 66466, 124986, 127784, 0, 66725, 6191, 11351, 10437, 11316, 67634, 43763, + 0, 41754, 67635, 9370, 2720, 194600, 68462, 8232, 118817, 121056, 3222, + 121439, 121137, 0, 66663, 983047, 93067, 10834, 983127, 0, 65732, 94095, + 917547, 92682, 67679, 120734, 67309, 7781, 41383, 64568, 67311, 120738, + 12077, 74433, 64586, 917620, 42396, 55255, 3475, 67260, 2479, 67306, + 3632, 120728, 10698, 8376, 3648, 67263, 74844, 67639, 3636, 67894, 3650, + 8837, 65229, 1843, 42283, 43250, 41562, 9100, 74548, 68826, 3640, 127190, + 42321, 7284, 92880, 118987, 194950, 194949, 74115, 194951, 126649, + 194953, 42080, 2529, 0, 983784, 66010, 42083, 74952, 68398, 194957, + 67619, 66367, 194958, 9634, 92380, 9988, 0, 41068, 0, 4295, 65264, 68006, + 0, 67835, 0, 785, 8236, 128647, 9027, 68160, 67623, 64383, 120265, 925, + 127156, 0, 41985, 41071, 9586, 120988, 41984, 9217, 128372, 92510, 92218, + 9186, 2067, 4016, 983803, 0, 381, 12936, 0, 42077, 92985, 69880, 5184, + 42078, 194607, 10810, 128531, 4585, 19943, 5860, 67633, 121334, 127104, + 812, 3615, 72401, 5178, 44000, 92436, 78807, 5188, 74287, 67629, 3605, + 10692, 1166, 64429, 42639, 924, 127793, 67631, 42616, 120670, 2442, + 10703, 67317, 67632, 67316, 12771, 12736, 12753, 66708, 73933, 67626, + 42401, 194865, 69872, 127373, 42288, 12751, 74906, 8542, 13145, 194963, + 2468, 66706, 41294, 3626, 3883, 64388, 42479, 71220, 41117, 0, 92580, + 128624, 74939, 67624, 127976, 1290, 0, 65585, 2715, 806, 65208, 41884, + 917883, 1318, 64731, 78004, 0, 0, 66325, 3465, 2405, 9240, 983858, 12756, + 65259, 0, 983781, 12752, 5833, 1432, 11246, 41883, 73912, 9799, 917893, + 41886, 2480, 127906, 2062, 67326, 6494, 5537, 78656, 0, 194587, 124969, + 1211, 0, 120971, 67269, 118832, 12318, 129024, 113796, 68005, 10622, + 983779, 0, 68821, 6566, 71195, 0, 73780, 119196, 64864, 0, 78660, 0, + 8284, 13081, 119206, 3589, 42051, 4035, 6492, 83003, 4265, 6642, 3977, + 74186, 41778, 836, 92947, 2488, 125096, 4582, 0, 71426, 41777, 12926, + 983379, 7528, 10550, 113761, 92706, 983955, 10961, 93977, 1374, 64878, + 119014, 67720, 42389, 41374, 2286, 917604, 78492, 41377, 127909, 195047, + 400, 12597, 120586, 128097, 129071, 6661, 917961, 64827, 0, 73817, 390, + 0, 71301, 127292, 3473, 7718, 113755, 68814, 0, 55285, 73784, 66394, 0, + 11969, 120461, 127841, 6365, 1887, 6763, 92551, 8080, 7006, 0, 118902, + 6757, 64351, 1544, 67156, 6766, 64677, 120716, 67088, 6146, 74031, 771, + 120682, 0, 12812, 13168, 42272, 12200, 66423, 7904, 0, 953, 12917, + 119560, 12300, 67089, 11491, 9724, 10341, 983773, 9524, 7490, 11389, + 7489, 3379, 0, 7487, 194624, 471, 7484, 7482, 6753, 7480, 5764, 7478, + 7477, 6501, 7475, 6918, 7473, 7472, 2474, 7470, 7468, 10232, 10615, + 10213, 127288, 92357, 10049, 11834, 3544, 983785, 6017, 65311, 74935, + 120216, 13306, 10533, 7870, 73949, 7625, 194882, 120544, 0, 127950, + 92660, 983356, 77889, 0, 19961, 2472, 42665, 92341, 121133, 2139, 4256, + 120776, 74380, 43836, 42675, 42658, 12845, 6666, 70508, 65138, 119355, + 67862, 0, 65671, 7083, 120008, 8066, 7678, 74865, 125134, 120321, 127283, + 983396, 7186, 0, 120555, 0, 445, 120566, 66849, 125141, 0, 8330, 0, 0, + 42797, 113736, 120215, 83001, 3902, 0, 1770, 43959, 125067, 1560, 43958, + 92167, 4584, 73843, 0, 11712, 10866, 67092, 1118, 71334, 74888, 0, 1081, + 7436, 11147, 7252, 70093, 5996, 69921, 4903, 68142, 41386, 5162, 119189, + 1330, 128613, 7139, 0, 12047, 41384, 0, 0, 1848, 4334, 6324, 41975, + 64777, 10674, 12308, 12186, 0, 0, 983741, 12715, 68002, 194576, 83256, + 2018, 66672, 41979, 66685, 119157, 68000, 78490, 0, 126984, 68001, 9334, + 92705, 70800, 70101, 7975, 0, 77957, 0, 43494, 4884, 66597, 69732, 0, + 121010, 6313, 65513, 69857, 0, 0, 0, 2345, 43697, 463, 0, 127890, 68178, + 3117, 5460, 121423, 128717, 983389, 0, 42279, 127142, 126503, 78415, + 983228, 68524, 983386, 13248, 125027, 983843, 43956, 128415, 983153, + 121009, 5663, 71120, 128472, 128958, 0, 2482, 1471, 194583, 113747, + 42247, 12378, 73925, 69664, 71427, 12374, 121357, 127067, 0, 118828, + 2460, 71882, 11944, 12376, 92342, 64679, 92893, 12380, 10557, 64473, + 5870, 11122, 2024, 127180, 983391, 71879, 539, 0, 120302, 70120, 3853, + 65180, 127923, 120796, 120245, 92324, 0, 8659, 0, 12474, 67241, 9503, + 194969, 2478, 120248, 4162, 0, 4260, 12953, 69633, 82966, 12470, 92640, + 74189, 2742, 12476, 11798, 10946, 127310, 5000, 113687, 983579, 128190, + 69672, 8213, 43824, 7771, 6161, 68018, 6709, 194967, 78885, 119243, + 68235, 120582, 78547, 113709, 10301, 10333, 10397, 119044, 0, 73791, 0, + 83030, 0, 121482, 119123, 4014, 12842, 73952, 12015, 127290, 8275, 3893, + 74903, 120927, 12210, 7221, 42147, 74868, 74550, 71215, 64747, 118841, + 128086, 12516, 4444, 0, 92271, 74537, 10892, 8231, 0, 6473, 41968, 78388, + 41973, 3591, 41969, 83008, 2453, 118899, 92666, 64705, 71068, 0, 10349, + 10413, 43591, 41962, 3202, 74353, 129175, 8316, 129174, 0, 94060, 687, + 93055, 129074, 0, 1840, 127809, 68671, 11121, 4883, 285, 4723, 11175, 92692, 4459, 74577, 42921, 41720, 11089, 240, 19906, 0, 42323, 74640, - 9743, 120232, 13134, 93065, 128956, 65931, 92579, 128329, 42634, 983343, - 43437, 3081, 11463, 120154, 0, 195013, 10445, 0, 92969, 66717, 2614, - 9125, 119023, 1729, 0, 72420, 65221, 63883, 43334, 64852, 124929, 65194, - 66201, 0, 66578, 5001, 41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, - 5150, 73889, 73764, 4039, 643, 3086, 92961, 42448, 42299, 58, 0, 917952, - 120083, 63873, 8491, 0, 0, 983623, 4530, 42409, 7126, 194575, 2721, - 120073, 119096, 19929, 0, 194574, 92975, 4242, 4264, 120077, 120530, - 66179, 42412, 65941, 13114, 64522, 10740, 3094, 983199, 9754, 119102, - 4437, 73948, 127074, 983238, 55280, 42174, 194925, 42430, 0, 983450, - 42355, 66026, 4306, 41380, 68432, 92586, 68314, 66667, 119351, 0, 126521, - 42200, 42566, 70000, 128928, 5088, 6948, 0, 8524, 125040, 0, 12385, 0, 0, - 69646, 1386, 64580, 11480, 6116, 65039, 65038, 12392, 65036, 8064, 0, - 12101, 5822, 119004, 2080, 710, 77999, 11663, 1666, 42091, 119657, 12383, - 43671, 42092, 68418, 4289, 127897, 63896, 12061, 42096, 43621, 3362, - 12377, 119934, 983834, 68449, 7461, 73901, 1244, 331, 73786, 12683, - 10662, 0, 8112, 0, 65852, 74629, 12379, 194877, 92930, 41964, 42208, - 63843, 2084, 41965, 125099, 65866, 4327, 0, 63840, 66413, 41220, 13032, - 92980, 584, 12933, 43177, 12373, 69855, 13000, 1351, 2935, 8698, 12665, - 0, 1930, 0, 78229, 12427, 66514, 69859, 13031, 0, 63901, 0, 3657, 119611, - 65202, 6000, 113786, 12426, 127181, 119935, 41740, 12428, 41283, 41916, - 119210, 128318, 0, 12429, 6727, 0, 7562, 983248, 5170, 983915, 41755, - 676, 0, 66704, 66664, 9978, 66491, 3536, 0, 9752, 92397, 6162, 92928, - 69228, 10113, 41829, 65886, 5159, 12422, 41832, 439, 3072, 983464, 42207, - 74549, 11796, 40970, 41830, 125021, 70151, 8308, 917797, 70807, 119258, - 67864, 113696, 917800, 12336, 4135, 67231, 341, 2727, 4129, 3539, 0, - 63861, 0, 7913, 0, 63859, 4131, 63868, 129085, 63867, 4133, 11371, 210, - 4600, 0, 74560, 4137, 8082, 78506, 119062, 78504, 6704, 4591, 128029, - 125018, 120753, 9680, 12937, 120623, 561, 12159, 195, 68321, 41501, - 983371, 42031, 5719, 7172, 42687, 8368, 128306, 41499, 93068, 71047, - 42242, 41498, 917794, 42025, 78565, 65805, 42463, 67182, 2924, 67183, - 120510, 0, 0, 92766, 73941, 67186, 42330, 67187, 3969, 128484, 0, 7169, - 1992, 9652, 73977, 7246, 42086, 126615, 2219, 127177, 0, 128801, 67180, - 0, 327, 128300, 9042, 917777, 917776, 65148, 12433, 917781, 120222, - 917779, 12431, 8668, 12434, 67194, 917782, 5999, 0, 7712, 12432, 128243, - 43653, 1726, 1015, 0, 8212, 0, 113754, 42423, 119066, 194613, 72398, - 66709, 0, 8811, 927, 128461, 0, 12436, 120087, 42021, 0, 67644, 1299, - 12240, 42350, 65143, 0, 195016, 127972, 78197, 11348, 0, 78037, 9194, - 983184, 0, 19914, 12179, 128740, 2296, 128932, 63836, 63832, 917773, - 10967, 63816, 2594, 3444, 63817, 11178, 0, 41503, 127478, 11265, 68295, - 120756, 194922, 67285, 5664, 3972, 0, 128583, 0, 67284, 12416, 917764, - 119608, 10816, 917769, 11210, 12418, 74111, 3882, 8532, 917771, 1573, - 128018, 119847, 4596, 66339, 12417, 66001, 65343, 126491, 12414, 8287, - 68219, 195017, 68108, 1143, 119169, 119846, 12415, 6626, 42763, 0, - 118884, 9021, 120783, 119931, 11724, 0, 0, 127104, 126619, 0, 0, 8027, - 10997, 9171, 12741, 11400, 71305, 194799, 66833, 128239, 0, 92557, - 119604, 127523, 120190, 1324, 67608, 128214, 42368, 0, 7715, 3881, 41487, - 12118, 42514, 68651, 0, 128594, 3009, 41476, 41489, 69825, 3007, 1448, - 3018, 194809, 3889, 8521, 5083, 5082, 119859, 78255, 8519, 983241, 3014, - 5081, 65853, 120715, 0, 68014, 69951, 5079, 64802, 42210, 4597, 65532, - 11828, 120185, 12371, 11105, 8407, 67163, 10805, 8518, 10779, 120188, - 71303, 983933, 12367, 42170, 0, 67290, 629, 1924, 128435, 12037, 67158, - 5987, 8462, 8005, 12365, 63933, 69735, 120815, 12369, 10649, 67981, 5077, - 120174, 10880, 63927, 5075, 917881, 127300, 65075, 0, 11007, 70851, - 66659, 92607, 917933, 66684, 128063, 3434, 4954, 1904, 92679, 5266, - 126980, 5272, 10499, 4507, 9578, 63923, 120177, 7979, 0, 9831, 0, 194926, - 461, 9803, 42282, 4504, 1505, 0, 6325, 5276, 43021, 120488, 0, 55236, - 92659, 66461, 5177, 41324, 12055, 8722, 120805, 41327, 983732, 66695, - 4114, 409, 4383, 8900, 8948, 41325, 0, 721, 10182, 9108, 71311, 0, - 119185, 42229, 194912, 0, 5998, 0, 42353, 74825, 0, 12587, 94104, 78571, - 0, 71328, 128955, 41576, 42215, 78570, 74037, 0, 8578, 5995, 7573, 41575, - 74789, 74752, 63944, 63949, 64767, 2670, 4167, 194796, 11723, 0, 74120, - 0, 65076, 938, 43414, 73854, 11737, 9721, 0, 67179, 67168, 11742, 2419, - 67177, 11493, 12334, 194913, 4153, 12302, 10793, 5250, 12407, 11978, - 4404, 9189, 12401, 42007, 5775, 6759, 65806, 43997, 0, 42002, 12404, - 70388, 129093, 4940, 12410, 7683, 1167, 73729, 4983, 120507, 861, 67699, - 0, 68297, 0, 43757, 43370, 0, 0, 11956, 124967, 0, 70815, 9616, 6631, - 92338, 12816, 43759, 42218, 12710, 68674, 12721, 4101, 66185, 0, 5992, - 7616, 195044, 0, 12577, 93017, 983884, 853, 42693, 194647, 119027, - 983647, 5016, 43535, 63893, 42835, 9491, 917913, 0, 917914, 0, 12712, - 7105, 127807, 65060, 66875, 9900, 7750, 917946, 127896, 74619, 127830, - 983587, 64778, 12585, 10565, 128151, 12177, 119843, 983258, 0, 77824, 0, - 4900, 127874, 12878, 92630, 8984, 4119, 74768, 8971, 78593, 43113, 9702, - 66852, 11025, 9245, 13048, 4927, 4138, 74185, 92481, 92710, 12397, 77827, - 119040, 13054, 12394, 0, 0, 194954, 13053, 118974, 3948, 10781, 1546, 0, - 5010, 1680, 10507, 78590, 78583, 92431, 0, 0, 194915, 7267, 0, 74833, - 128181, 5993, 2819, 128788, 12706, 71063, 1893, 7266, 63915, 7264, 7265, - 0, 1363, 0, 42923, 63910, 63996, 3077, 120018, 0, 1512, 69929, 12589, - 41479, 128313, 71048, 43339, 73776, 9836, 120727, 0, 41481, 43335, 7832, - 42343, 3090, 43337, 817, 1664, 1850, 128841, 3079, 11340, 42408, 42447, - 127140, 120020, 42307, 12386, 42304, 917555, 0, 12389, 128398, 92366, - 41996, 11526, 63985, 5864, 1147, 43849, 42887, 1987, 92718, 5480, 7858, - 11653, 4116, 12391, 66193, 129197, 4939, 12384, 0, 0, 41686, 63905, - 119601, 194688, 67398, 128820, 12649, 129056, 0, 8247, 507, 91, 2042, - 120775, 43643, 194689, 66028, 10036, 41844, 119813, 774, 119829, 77840, - 119815, 5994, 12539, 0, 78375, 120597, 119833, 983105, 78377, 0, 917628, + 9743, 120232, 13134, 93065, 128956, 65931, 92579, 128329, 42634, 983345, + 43437, 3081, 11463, 120154, 0, 195013, 10445, 121322, 92969, 66717, 2614, + 9125, 71125, 1729, 129034, 72420, 65221, 63883, 43334, 64852, 124929, + 65194, 66201, 0, 66578, 5001, 41879, 74427, 4121, 5003, 884, 66700, + 63879, 4943, 5150, 73889, 73764, 4039, 643, 3086, 92533, 42448, 42299, + 58, 120084, 917952, 120083, 63873, 8491, 0, 0, 983623, 4530, 42409, 7126, + 194575, 2721, 120073, 119096, 19929, 118941, 128797, 92975, 4242, 4264, + 120077, 120530, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 983199, + 9754, 119102, 4437, 73948, 127074, 983240, 55280, 42174, 127954, 42430, + 0, 983452, 42355, 66026, 4306, 41380, 68432, 92586, 68314, 66667, 119351, + 194982, 121172, 42200, 42566, 70000, 128928, 5088, 6948, 0, 8524, 125040, + 0, 12385, 0, 74926, 69646, 1386, 64580, 11480, 6116, 65039, 65038, 12392, + 65036, 8064, 127558, 12101, 5822, 119004, 2080, 710, 77999, 11663, 1666, + 42091, 119657, 12383, 43671, 42092, 68418, 4289, 127897, 63896, 12061, + 42096, 43621, 3362, 12377, 119934, 983834, 68449, 7461, 73901, 1244, 331, + 73786, 12683, 10662, 0, 8112, 0, 65852, 74629, 12379, 127107, 92930, + 41964, 42208, 63843, 2084, 41965, 70089, 65866, 4327, 0, 63840, 66413, + 41220, 13032, 92980, 584, 12933, 43177, 12373, 69855, 13000, 1351, 2935, + 8698, 12665, 0, 1930, 0, 78229, 12427, 66514, 69859, 13031, 0, 63901, 0, + 3657, 119611, 65202, 6000, 113786, 12426, 121058, 119935, 41740, 12428, + 41283, 41916, 119210, 128318, 0, 12429, 6727, 983948, 7562, 125129, 5170, + 983915, 41755, 676, 0, 66704, 66664, 9978, 66491, 3536, 0, 9752, 92397, + 6162, 78320, 69228, 10113, 41829, 65886, 5159, 12422, 41832, 439, 3072, + 917828, 42207, 74549, 11796, 40970, 41830, 125021, 70151, 8308, 917797, + 70807, 119258, 67864, 113696, 917800, 12336, 4135, 67231, 341, 2727, + 4129, 3539, 0, 63861, 0, 7913, 0, 63859, 4131, 63868, 129085, 63867, + 4133, 11371, 210, 4600, 983897, 74560, 4137, 8082, 78506, 119062, 78504, + 6704, 4591, 128029, 43873, 120753, 9680, 12937, 120623, 561, 12159, 195, + 68321, 41501, 194581, 42031, 5719, 7172, 42687, 8368, 128306, 41499, + 93068, 71047, 42242, 41498, 917794, 42025, 78565, 65805, 42463, 67182, + 2924, 67183, 120510, 0, 983972, 92766, 73941, 67186, 42330, 67187, 3969, + 121405, 0, 7169, 1992, 9652, 73977, 7246, 42086, 126615, 2219, 121349, 0, + 128801, 67180, 127569, 327, 121277, 9042, 917777, 917776, 65148, 12433, + 917781, 120222, 83129, 12431, 8668, 12434, 67194, 113812, 5999, 75013, + 7712, 12432, 128243, 43653, 1726, 1015, 74079, 8212, 128065, 113754, + 42423, 119066, 194613, 72398, 66709, 121061, 8811, 927, 92532, 0, 12436, + 120087, 42021, 0, 67644, 1299, 12240, 42350, 65143, 0, 195016, 127972, + 78197, 11348, 0, 78037, 9194, 983184, 0, 19914, 12179, 128740, 2296, + 128932, 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 11178, + 917584, 41503, 127478, 11265, 68295, 120756, 194922, 67285, 5664, 3972, + 120891, 128583, 129408, 67284, 12416, 917764, 119608, 10816, 917769, + 11210, 12418, 8586, 3882, 8532, 917771, 1573, 68081, 119847, 4596, 66339, + 12417, 66001, 65343, 126491, 12414, 8287, 68219, 195017, 68108, 1143, + 119169, 119846, 12415, 6626, 42763, 917594, 118884, 9021, 120783, 119931, + 11724, 127787, 0, 71122, 126619, 0, 983661, 8027, 10997, 9171, 12741, + 11400, 43943, 194799, 66833, 128239, 983707, 92557, 93976, 127523, + 120190, 1324, 67608, 128214, 42368, 983873, 7715, 3881, 41487, 12118, + 42514, 68651, 128210, 128594, 3009, 41476, 41489, 69825, 3007, 1448, + 3018, 194809, 3889, 8521, 5083, 5082, 119859, 78255, 8519, 121226, 3014, + 5081, 65853, 120715, 194992, 68014, 69951, 5079, 64802, 42210, 4597, + 65532, 11828, 120185, 12371, 11105, 8407, 67163, 10805, 8518, 10779, + 120188, 71303, 121240, 12367, 42170, 0, 67290, 629, 1924, 127098, 12037, + 67158, 5987, 8462, 8005, 12365, 63933, 69735, 120815, 12369, 10649, + 67981, 5077, 120174, 10880, 63927, 5075, 121109, 127300, 65075, 0, 11007, + 70851, 66659, 92607, 917933, 66684, 128063, 3434, 4954, 1904, 92679, + 5266, 126980, 5272, 10499, 4507, 9578, 63923, 120177, 7979, 0, 9831, 0, + 194926, 461, 9803, 42282, 4504, 1505, 127893, 6325, 5276, 43021, 120488, + 0, 55236, 92659, 66461, 5177, 41324, 12055, 8722, 120805, 41327, 983732, + 66695, 4114, 409, 4383, 8900, 8948, 41325, 74930, 721, 10182, 9108, + 71311, 0, 119185, 42229, 74963, 121014, 5998, 0, 42353, 74825, 0, 12587, + 94104, 78571, 74889, 71328, 128955, 41576, 42215, 78570, 74037, 0, 8578, + 5995, 7573, 41575, 74789, 74752, 63944, 63949, 64767, 2670, 4167, 194796, + 11723, 0, 74120, 126642, 65076, 938, 43414, 73854, 11737, 9721, 0, 67179, + 67168, 11742, 2419, 67177, 11493, 12334, 92494, 4153, 12302, 10793, 5250, + 12407, 11978, 4404, 9189, 12401, 42007, 5775, 6759, 65806, 43997, 0, + 42002, 12404, 68092, 74928, 4940, 12410, 7683, 1167, 73729, 4983, 120507, + 861, 67699, 74880, 68297, 983807, 43757, 43370, 129298, 0, 11956, 124967, + 121263, 70815, 9616, 6631, 92338, 12816, 43759, 42218, 12710, 68674, + 12721, 4101, 66185, 0, 5992, 7616, 195044, 0, 12577, 93017, 128289, 853, + 42693, 194647, 119027, 983284, 5016, 43535, 63893, 42835, 9491, 917913, + 0, 917914, 0, 12712, 7105, 127807, 65060, 66875, 9900, 7750, 917946, + 127896, 74619, 119265, 983587, 64778, 12585, 10565, 128151, 12177, + 119843, 983260, 0, 77824, 0, 4900, 127874, 12878, 92630, 8984, 4119, + 74768, 8971, 78593, 43113, 9702, 66852, 11025, 9245, 13048, 4927, 4138, + 74185, 92481, 92710, 12397, 77827, 119040, 13054, 12394, 0, 0, 194954, + 13053, 118974, 3948, 10781, 1546, 0, 5010, 1680, 10507, 78590, 78583, + 92431, 121037, 126644, 194915, 7267, 127479, 74833, 128181, 5993, 2819, + 128788, 12706, 71063, 1893, 7266, 63915, 7264, 7265, 0, 1363, 983580, + 42923, 63910, 63996, 3077, 120018, 0, 1512, 69929, 12589, 41479, 128313, + 71048, 43339, 73776, 9836, 120727, 983909, 41481, 43335, 7832, 42343, + 3090, 43337, 817, 1664, 1850, 83177, 3079, 11340, 42408, 42447, 74932, + 74044, 42307, 12386, 42304, 917555, 83428, 12389, 121079, 92366, 41996, + 11526, 63985, 5864, 1147, 43849, 42887, 1987, 92718, 5480, 7858, 11653, + 4116, 12391, 66193, 121383, 4939, 12384, 0, 127778, 41686, 63905, 119601, + 70285, 67398, 128820, 12649, 120022, 0, 8247, 507, 91, 2042, 120775, + 43643, 121445, 66028, 10036, 41844, 119813, 774, 119829, 77840, 119815, + 5994, 12539, 0, 78375, 120597, 119833, 983105, 78377, 983237, 917628, 7719, 6026, 2486, 128312, 119808, 162, 0, 65219, 41073, 9687, 41681, 6304, 119812, 66196, 194881, 5262, 0, 55233, 12681, 42379, 0, 7534, - 12219, 2226, 70499, 42810, 10492, 127015, 983661, 126704, 43119, 0, - 78537, 12403, 2500, 70145, 0, 4899, 12729, 983397, 0, 74113, 2343, 4103, - 19946, 74112, 77851, 13112, 129046, 74834, 12859, 70087, 120148, 66369, - 5861, 127758, 11999, 12400, 43641, 983839, 12645, 5146, 11320, 68410, - 6748, 65040, 983491, 64184, 12974, 64183, 67613, 120645, 5147, 125019, 0, - 74524, 128356, 1928, 0, 67649, 5991, 3445, 67609, 4976, 64176, 0, 67610, - 8241, 0, 77868, 4206, 0, 78662, 0, 128298, 67277, 10138, 67238, 128785, - 8897, 120234, 1422, 8357, 4124, 77862, 65836, 120641, 127926, 77859, 0, - 194696, 1123, 963, 41553, 10120, 12405, 120150, 92664, 398, 13278, 9723, - 6366, 120311, 7945, 983163, 4402, 9970, 12402, 93062, 42392, 1305, 12408, - 92384, 44007, 128563, 127216, 41464, 12411, 12969, 67268, 41465, 983565, - 8528, 1575, 0, 63955, 165, 3024, 41467, 119163, 70119, 9093, 0, 6833, - 92574, 63958, 0, 9148, 9692, 4096, 53, 8296, 6750, 66855, 0, 9594, - 120308, 129186, 43527, 194622, 727, 74192, 93060, 5805, 0, 6726, 0, - 42176, 12370, 11655, 119095, 10591, 2280, 0, 12372, 120642, 120307, - 71209, 92343, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, - 194701, 10803, 4132, 120306, 68474, 92473, 0, 120712, 74837, 120155, - 1499, 0, 8055, 42740, 63965, 120305, 63962, 74042, 8924, 43123, 5988, - 3660, 63969, 11781, 42718, 8788, 1357, 64851, 65743, 92894, 8774, 70337, - 127086, 9941, 120172, 92748, 1933, 69655, 9564, 0, 92435, 73866, 0, - 983583, 2487, 67614, 3121, 1804, 3311, 67615, 70081, 78302, 12220, 67616, - 92769, 127475, 0, 68200, 6675, 128144, 0, 67592, 120685, 0, 64771, 1198, - 9132, 0, 64619, 510, 64663, 0, 0, 4561, 2101, 1398, 917972, 92554, 74034, - 41569, 92684, 11406, 8167, 12127, 0, 840, 983281, 69992, 7101, 6967, 0, - 194898, 9796, 0, 333, 69891, 0, 8144, 2117, 0, 983595, 12406, 0, 19931, - 66388, 6678, 7769, 0, 12621, 0, 127366, 10227, 4764, 43101, 9981, 0, - 40986, 4127, 66487, 983576, 42202, 12754, 195022, 0, 0, 94097, 67594, - 2048, 12944, 4050, 67595, 917967, 43102, 10581, 11184, 4533, 195021, - 74003, 6490, 0, 12038, 0, 0, 68225, 65461, 9798, 69704, 0, 1948, 69841, - 0, 952, 128235, 125107, 0, 120802, 6449, 9494, 120313, 0, 43098, 4843, - 8142, 64160, 4098, 64170, 983339, 0, 3436, 119973, 0, 12817, 67597, 6676, - 3930, 42615, 0, 69991, 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0, - 127859, 8500, 42222, 120142, 73743, 120400, 4317, 11543, 67676, 64676, 0, - 127833, 67606, 119083, 127892, 42217, 13102, 0, 66003, 6672, 0, 0, 66880, - 983747, 63841, 9613, 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, - 42056, 10228, 64957, 11281, 0, 3807, 1469, 66640, 65381, 42197, 4988, - 42372, 0, 9598, 904, 352, 42225, 1451, 8061, 8453, 4134, 127052, 67223, - 66576, 127916, 127831, 10520, 8575, 9960, 1201, 127289, 12846, 127291, - 127292, 11919, 64962, 127287, 43739, 127281, 8511, 9460, 823, 11587, - 12305, 0, 64695, 127305, 12387, 1253, 13183, 65766, 500, 42783, 65765, - 64208, 64369, 65760, 65761, 70334, 11606, 64784, 11702, 66498, 9821, - 64304, 0, 5152, 11048, 7533, 68366, 64410, 92305, 0, 4323, 120062, 92669, - 71332, 120158, 42587, 42214, 41394, 11188, 4763, 4112, 118935, 0, 5260, - 43143, 94038, 326, 120131, 68423, 194904, 10771, 2876, 74074, 92530, - 128460, 41398, 7382, 9802, 127077, 127076, 453, 41396, 120524, 13159, - 12140, 9572, 0, 7003, 194883, 42334, 7704, 125069, 125020, 43144, 4123, - 8494, 43146, 9977, 0, 126473, 65759, 10765, 64061, 4465, 9808, 64056, - 65582, 4126, 0, 9521, 9589, 64755, 0, 64020, 126604, 10464, 0, 92968, - 194869, 64514, 11528, 64024, 128072, 679, 64013, 983555, 5850, 758, 7536, - 128663, 92234, 41441, 10693, 64006, 983567, 64005, 4058, 119019, 126487, - 64660, 128176, 119050, 0, 983069, 1139, 43298, 64027, 64029, 8970, 0, - 9934, 128685, 10774, 67104, 42201, 12421, 128216, 0, 1852, 3057, 64046, - 73744, 64034, 64039, 129127, 0, 0, 194899, 92322, 7645, 12854, 74338, - 3496, 0, 0, 113710, 9102, 627, 127795, 6158, 8327, 74553, 66632, 12419, + 12219, 2226, 70499, 42810, 10492, 121510, 121148, 121509, 43119, 0, + 78537, 12403, 2500, 70145, 83246, 4899, 12729, 983399, 194619, 74113, + 2343, 4103, 19946, 74112, 77851, 13112, 129046, 74834, 12859, 70087, + 120148, 66369, 5861, 127758, 11999, 12400, 43641, 128183, 12645, 5146, + 11320, 68410, 6748, 65040, 194786, 64184, 12974, 64183, 67613, 120645, + 5147, 125019, 0, 74524, 128356, 1928, 0, 67649, 5991, 3445, 67609, 4976, + 64176, 0, 67610, 8241, 0, 77868, 4206, 0, 78662, 129029, 128298, 67277, + 10138, 67238, 128785, 8897, 120234, 1422, 8357, 4124, 77862, 65836, + 120641, 127926, 77859, 0, 120930, 1123, 963, 41553, 10120, 12405, 120150, + 92664, 398, 13278, 9723, 6366, 120311, 7945, 129126, 4402, 9970, 12402, + 93062, 42392, 1305, 12408, 92384, 44007, 128563, 127216, 41464, 12411, + 12969, 67268, 41465, 121092, 8528, 1575, 0, 63955, 165, 3024, 41467, + 119163, 70119, 9093, 128535, 6833, 92574, 63958, 0, 9148, 9692, 4096, 53, + 8296, 6750, 66855, 128410, 9594, 120308, 120938, 43527, 121192, 727, + 74192, 93060, 5805, 0, 6726, 0, 42176, 12370, 11655, 119095, 10591, 2280, + 983234, 12372, 120642, 120307, 71209, 92343, 983872, 12366, 10963, 6066, + 1329, 0, 3052, 9220, 121045, 64478, 194701, 10803, 4132, 120306, 68474, + 92473, 983247, 120712, 74837, 120155, 1499, 0, 8055, 42740, 63965, + 120305, 63962, 74042, 8924, 43123, 5988, 3660, 63969, 11781, 42718, 8788, + 1357, 64851, 65743, 92894, 8774, 70337, 127086, 9941, 120172, 92748, + 1933, 69655, 9564, 120016, 92435, 73866, 0, 121241, 2487, 67614, 3121, + 1804, 3311, 67615, 70081, 78302, 12220, 67616, 92769, 120020, 194594, + 68200, 6675, 128144, 0, 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, + 510, 64663, 0, 121500, 4561, 2101, 1398, 917972, 92554, 74034, 41569, + 92684, 11406, 8167, 12127, 120505, 840, 983283, 69992, 7101, 6967, 0, + 194898, 9796, 127000, 333, 69891, 0, 8144, 2117, 0, 121155, 12406, + 917970, 19931, 66388, 6678, 7769, 983124, 12621, 0, 127366, 10227, 4764, + 43101, 9981, 0, 40986, 4127, 66487, 983576, 42202, 12754, 195021, 983191, + 0, 94097, 67594, 2048, 12944, 4050, 67595, 917967, 43102, 10581, 11184, + 4533, 127212, 74003, 6490, 0, 12038, 0, 0, 68225, 65461, 9798, 69704, + 128912, 1948, 69841, 0, 952, 128235, 125107, 983354, 70296, 6449, 9494, + 120313, 0, 43098, 4843, 8142, 64160, 4098, 64170, 983341, 0, 3436, + 119973, 0, 12817, 67597, 6676, 3930, 42615, 66407, 69991, 67598, 0, 0, 0, + 65591, 41581, 65916, 1453, 194993, 121458, 127859, 8500, 42222, 120142, + 73743, 120400, 4317, 11543, 67676, 64676, 0, 127833, 67606, 119083, + 121083, 42217, 13102, 0, 66003, 6672, 0, 0, 66880, 77912, 63841, 9613, + 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, 42056, 10228, 64957, + 11281, 0, 3807, 1469, 66640, 65381, 42197, 4988, 42372, 0, 9598, 904, + 352, 42225, 1451, 8061, 8453, 4134, 83485, 67223, 66576, 127916, 127831, + 10520, 8575, 9960, 1201, 127289, 12846, 127291, 68040, 11919, 64962, + 127081, 43739, 127281, 8511, 9460, 823, 11587, 12305, 0, 64695, 127305, + 12387, 1253, 13183, 65766, 500, 42783, 65765, 64208, 64369, 65760, 65761, + 70334, 11606, 64784, 11702, 66498, 9821, 64304, 127369, 5152, 11048, + 7533, 68366, 64410, 92305, 0, 4323, 70276, 92669, 71332, 120158, 42587, + 42214, 41394, 11188, 4763, 4112, 118935, 0, 5260, 43143, 94038, 326, + 120131, 68423, 119218, 10771, 2876, 74074, 92530, 128460, 41398, 7382, + 9802, 127077, 127076, 453, 41396, 120524, 13159, 12140, 9572, 983132, + 7003, 194883, 42334, 7704, 125069, 125020, 43144, 4123, 8494, 43146, + 9977, 0, 121283, 65759, 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, + 9521, 9589, 64755, 0, 64020, 126604, 10464, 0, 92968, 194610, 64514, + 11528, 64024, 128072, 679, 64013, 983555, 5850, 758, 7536, 120538, 92234, + 41441, 10693, 64006, 75044, 64005, 4058, 119019, 126487, 64660, 128176, + 119050, 0, 983069, 1139, 43298, 64027, 64029, 8970, 0, 9934, 128685, + 10774, 67104, 42201, 12421, 128216, 127006, 1852, 3057, 64046, 73744, + 64034, 64039, 68065, 0, 983690, 92913, 92322, 7645, 12854, 74338, 3496, + 0, 121323, 113710, 9102, 627, 127795, 6158, 8327, 74553, 66632, 12419, 13309, 11570, 127811, 19960, 11696, 0, 1018, 118970, 129075, 194897, - 1682, 43863, 194911, 42756, 6765, 194906, 67717, 74358, 73814, 11412, - 6768, 10728, 119982, 71316, 71099, 43311, 64966, 11577, 0, 43040, 1833, - 11576, 0, 74779, 0, 185, 65085, 74533, 64754, 119334, 7535, 8085, 42525, - 120387, 9749, 41701, 6131, 1949, 4117, 7847, 120489, 124992, 64483, - 65693, 983711, 0, 0, 69695, 42240, 128587, 126651, 42864, 126498, 43168, - 41868, 1184, 0, 815, 11484, 127535, 67840, 983651, 0, 66197, 983472, - 10986, 64683, 983785, 128454, 3455, 0, 0, 9879, 0, 0, 4158, 128050, - 68166, 0, 0, 0, 0, 69645, 332, 118808, 0, 5142, 2407, 69643, 42199, 0, - 92404, 74373, 0, 55217, 92436, 63870, 43163, 0, 0, 12985, 42867, 1834, 0, - 92461, 69817, 10940, 65249, 70385, 8662, 120324, 0, 2652, 120527, 7164, - 10784, 195093, 67674, 0, 92233, 92482, 194749, 74562, 917505, 1828, - 74474, 120327, 78620, 8531, 12499, 6280, 12324, 72434, 65238, 68374, - 4832, 65573, 43851, 6279, 12508, 12904, 12502, 9161, 0, 1620, 64436, - 3601, 124944, 128073, 67246, 609, 11555, 92409, 12496, 67250, 74181, - 4343, 12505, 0, 127863, 0, 11377, 239, 129190, 637, 0, 128678, 42671, 0, - 93032, 0, 43565, 71306, 126493, 12696, 128256, 917600, 94062, 12929, 0, - 712, 0, 4197, 983206, 42818, 126632, 0, 120490, 70333, 119137, 1506, - 43562, 0, 92491, 0, 12651, 0, 64628, 74517, 12058, 74084, 917838, 7494, - 0, 4924, 65592, 118844, 194823, 127088, 355, 9719, 127087, 13066, 64796, - 0, 0, 12033, 42178, 0, 69760, 42571, 92635, 11430, 0, 0, 0, 124951, - 68324, 3178, 917835, 128633, 92704, 0, 9080, 127000, 67697, 195101, - 68209, 72418, 11082, 0, 5699, 195100, 66000, 9488, 65166, 119112, 70477, - 11170, 68662, 128120, 71313, 0, 5265, 69235, 0, 11487, 67858, 12464, 0, - 43045, 0, 0, 43345, 0, 10770, 118994, 6807, 465, 9829, 69997, 74348, 0, - 43346, 8116, 795, 120352, 72412, 12462, 10930, 10831, 0, 118952, 64362, - 74334, 93056, 120811, 0, 12468, 8607, 1008, 0, 10092, 125122, 917842, - 67855, 55257, 73771, 1766, 11282, 11996, 1820, 4547, 0, 11202, 983222, - 983872, 13223, 128665, 64595, 127294, 0, 68489, 4345, 12616, 917784, - 128947, 983155, 74467, 0, 0, 0, 5382, 0, 0, 67233, 119060, 64953, 5406, - 19920, 69897, 66510, 3590, 194864, 1130, 917766, 194692, 42016, 11823, - 43023, 125129, 118896, 7742, 0, 13280, 71323, 9326, 73826, 5310, 43509, + 1682, 43863, 194896, 42756, 6765, 194906, 67717, 74358, 73814, 11412, + 6768, 10728, 119982, 71316, 71099, 43311, 64966, 11577, 127832, 43040, + 1833, 11576, 70054, 74779, 0, 185, 65085, 74533, 64754, 119334, 7535, + 8085, 42525, 119944, 9749, 41701, 6131, 1949, 4117, 7847, 120489, 120997, + 64483, 65693, 983711, 983495, 128615, 69695, 42240, 128587, 121352, + 42864, 126498, 43168, 41868, 1184, 0, 815, 11484, 127535, 67840, 983651, + 0, 66197, 983474, 10986, 64683, 128549, 128454, 3455, 126530, 0, 9879, 0, + 0, 4158, 70307, 68166, 0, 128091, 0, 0, 69645, 332, 118808, 83368, 5142, + 2407, 69643, 42199, 0, 92404, 74373, 83372, 55217, 71457, 63870, 43163, + 0, 0, 12985, 42867, 1834, 120387, 92461, 69817, 10940, 65249, 70385, + 8662, 120324, 0, 2652, 120527, 7164, 10784, 195093, 67674, 0, 83359, + 92482, 194749, 74562, 917505, 1828, 74474, 120019, 68078, 8531, 12499, + 6280, 12324, 72434, 65238, 68374, 4832, 65573, 43851, 6279, 12508, 12904, + 12502, 9161, 128555, 1620, 11247, 3601, 121301, 83353, 67246, 609, 11555, + 83456, 12496, 11980, 74181, 4343, 12505, 82960, 127863, 0, 11377, 239, + 128114, 637, 0, 128678, 42671, 0, 93032, 83095, 43565, 71306, 126493, + 12696, 128256, 917600, 94062, 12929, 0, 712, 0, 4197, 983206, 42818, + 126632, 70306, 120490, 70333, 119137, 1506, 43562, 119913, 92491, 68076, + 12651, 120917, 64628, 74517, 12058, 74084, 194633, 7494, 0, 4924, 65592, + 118844, 194823, 127088, 355, 9719, 127087, 13066, 64796, 121077, 983297, + 12033, 42178, 194754, 69760, 42571, 92635, 11430, 0, 70299, 121508, + 124951, 68324, 3178, 126488, 128633, 92704, 917566, 9080, 120943, 67697, + 195101, 68209, 72418, 11082, 71485, 5699, 83373, 66000, 9488, 65166, + 119112, 70477, 11170, 68662, 128120, 71313, 0, 5265, 69235, 83384, 11487, + 67858, 12464, 983365, 43045, 983831, 70345, 43345, 983276, 10770, 118994, + 6807, 465, 9829, 69997, 74348, 0, 43346, 8116, 795, 120352, 72412, 12462, + 10930, 10831, 121320, 118952, 64362, 74334, 93056, 83047, 983933, 12468, + 8607, 1008, 118948, 10092, 125122, 128851, 67855, 55257, 73771, 1766, + 11282, 11996, 1820, 4547, 0, 11202, 120243, 128345, 13223, 74934, 64595, + 127294, 83374, 68489, 4345, 12616, 917784, 128947, 983155, 74467, 0, + 983819, 128291, 5382, 127779, 0, 67233, 119060, 64953, 5406, 19920, + 69897, 66510, 3590, 194835, 1130, 917766, 120977, 42016, 11823, 43023, + 121002, 118896, 7742, 127374, 13280, 71323, 9326, 73826, 5310, 43509, 78584, 92229, 8959, 43589, 6747, 66723, 64757, 8568, 194684, 120496, - 73816, 120803, 983848, 42670, 0, 11621, 12460, 1326, 120631, 983334, - 43063, 43239, 127182, 194840, 73917, 7843, 69783, 11689, 5410, 5783, - 10468, 8403, 5400, 11594, 120405, 68333, 118990, 10491, 69842, 64412, 0, - 0, 5587, 42865, 64404, 8268, 4923, 65086, 8981, 12382, 42133, 120755, - 9706, 69738, 0, 66610, 10461, 12103, 0, 8642, 194707, 42766, 128247, - 2210, 9983, 0, 94009, 0, 0, 0, 7398, 41515, 0, 11802, 8041, 1461, 910, - 119133, 0, 6749, 3658, 93964, 120525, 0, 7617, 194841, 12888, 127983, - 67668, 13143, 0, 9193, 11097, 5703, 983475, 41517, 41504, 41519, 10016, - 64305, 0, 65864, 623, 781, 670, 10660, 5769, 613, 7543, 120279, 477, - 41083, 92521, 0, 592, 1578, 12459, 43449, 0, 0, 8225, 0, 654, 11345, 653, - 652, 0, 647, 0, 633, 120744, 0, 126472, 12480, 43243, 0, 39, 12487, 0, - 120529, 74199, 12482, 0, 12489, 119607, 3195, 5550, 129121, 7897, 127089, - 1203, 74396, 1813, 64544, 41311, 12090, 983634, 2877, 128394, 70496, - 1675, 69840, 0, 0, 119078, 10070, 10595, 0, 119077, 194777, 983611, - 67170, 120790, 118787, 43244, 0, 0, 983916, 119561, 983078, 194914, - 194921, 128160, 9939, 0, 983151, 77860, 128948, 0, 270, 0, 10714, 118983, - 72437, 0, 0, 119338, 65372, 73803, 74038, 68251, 6273, 66679, 364, 9595, - 127137, 0, 0, 707, 0, 128409, 9282, 11163, 224, 128588, 68670, 9332, - 4966, 68677, 0, 68644, 983131, 3841, 67357, 67341, 10732, 68640, 850, - 4972, 0, 12890, 2909, 68619, 44008, 68627, 120699, 11544, 10203, 9608, 0, - 917943, 11962, 194694, 12507, 1196, 67684, 67100, 777, 120187, 4375, - 65271, 67678, 0, 12198, 917887, 64824, 119343, 127243, 9454, 63778, 8658, - 42528, 70073, 2705, 128680, 41520, 195098, 128447, 11986, 7765, 42502, - 8280, 74520, 2701, 0, 120240, 5767, 0, 0, 9809, 8353, 63747, 66701, - 63772, 983814, 63745, 1748, 63770, 0, 129137, 0, 65542, 63766, 55244, - 3061, 78609, 63764, 63787, 9067, 6096, 0, 7694, 0, 7257, 63768, 3485, - 12987, 127781, 127522, 120628, 63807, 1591, 0, 6386, 63783, 0, 125041, - 92535, 0, 0, 68249, 74575, 0, 65719, 13083, 64574, 65012, 983958, 1640, - 12495, 66691, 7624, 3138, 10996, 11171, 1922, 0, 12498, 10987, 69936, - 69939, 3894, 65543, 129183, 194842, 983588, 493, 0, 43197, 1717, 4228, - 479, 10303, 74020, 0, 917935, 10335, 3520, 917932, 12490, 64315, 92170, - 127039, 12493, 6233, 42681, 1002, 12491, 113695, 64911, 92615, 2096, - 65120, 0, 78219, 128912, 8378, 11632, 127041, 66213, 63864, 66221, 66226, - 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, 92672, 66240, - 78041, 66233, 8928, 983552, 7909, 66234, 11605, 63759, 983654, 66208, - 67339, 13002, 63803, 244, 11542, 12898, 12494, 73761, 12492, 12669, 0, 0, - 74153, 120310, 128278, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, - 13042, 4880, 64662, 2429, 1360, 248, 129066, 63797, 92394, 42358, 0, - 7292, 0, 63756, 42786, 66693, 0, 1870, 78040, 470, 78038, 78035, 78036, - 70028, 78034, 4579, 69232, 0, 12511, 74453, 12514, 0, 74579, 7239, 7001, - 8623, 94011, 125137, 128048, 7378, 12512, 11615, 6104, 0, 0, 659, 6098, - 0, 12234, 127307, 67358, 8311, 12510, 7669, 13039, 127072, 12513, 10202, - 12471, 0, 8747, 125049, 70193, 128354, 2323, 0, 2319, 77917, 12477, - 77916, 2311, 7666, 4415, 237, 6281, 127280, 0, 0, 2309, 1312, 8173, - 128871, 12469, 0, 78505, 64335, 10609, 0, 128111, 9397, 11524, 9395, - 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, 9388, 4932, 9386, 9383, - 9384, 6740, 0, 65451, 8185, 128931, 917832, 43024, 43336, 67659, 2313, - 128167, 7948, 9236, 77942, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 11998, - 12082, 10924, 3147, 0, 66406, 12524, 119081, 2310, 11818, 9381, 9382, - 9379, 9380, 9377, 9378, 9375, 9376, 1683, 9374, 983778, 9372, 12444, 0, - 0, 13016, 8210, 129178, 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, - 917922, 4155, 0, 120704, 42030, 5007, 12522, 43088, 0, 4951, 113826, - 127240, 0, 9922, 43309, 11211, 12525, 983471, 12016, 65770, 9548, 67665, - 403, 78230, 12503, 0, 0, 11030, 0, 92567, 65691, 63998, 1819, 10496, 0, - 0, 119920, 0, 129143, 0, 12506, 983838, 11146, 127751, 12500, 44023, - 12509, 64393, 78830, 3389, 10589, 6608, 11208, 120236, 78395, 78394, - 74069, 77995, 78391, 3608, 8281, 113732, 1107, 113745, 9076, 8862, 69743, - 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782, 43499, 8546, - 11553, 63995, 13177, 9043, 6303, 113664, 498, 64471, 77987, 92974, 12529, - 8042, 0, 2344, 12528, 8031, 2414, 74506, 69719, 3231, 0, 6422, 66512, - 69653, 12530, 2537, 78405, 41429, 12658, 13036, 65772, 0, 78738, 41433, - 4719, 469, 0, 4363, 3313, 41428, 78407, 2023, 1772, 78224, 78225, 65706, - 10051, 64812, 78220, 0, 9920, 12215, 127876, 4931, 1951, 12497, 119363, - 9607, 70368, 9663, 66838, 119634, 6503, 41110, 983465, 1491, 66847, - 129169, 127304, 41061, 70454, 194838, 127187, 65026, 41993, 41509, 11045, - 65028, 71181, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, 41506, - 0, 41687, 0, 120717, 127776, 9940, 127299, 7692, 983833, 8008, 41131, - 330, 8566, 65083, 6839, 9816, 126517, 12532, 78550, 78546, 3508, 127058, - 43235, 120351, 127298, 64139, 78231, 6411, 12910, 67710, 66644, 13028, - 6737, 12537, 0, 43506, 64136, 12536, 2350, 13029, 78233, 127763, 983103, - 13030, 6702, 4527, 71250, 12538, 128810, 983645, 65599, 65717, 9966, - 128499, 4948, 12484, 4032, 128149, 12623, 0, 6207, 0, 6117, 65930, 8412, - 127183, 7438, 1296, 2325, 41511, 126625, 10149, 74118, 0, 120233, 12481, - 0, 12488, 66713, 0, 41556, 64414, 118802, 2354, 42619, 73766, 0, 6295, - 901, 41510, 7953, 0, 65032, 41513, 983166, 11927, 66584, 78559, 78560, - 78557, 78558, 0, 67603, 848, 9868, 67220, 6424, 78568, 67226, 69922, - 70190, 78563, 78564, 2352, 67219, 893, 64576, 11289, 1407, 67973, 0, - 13026, 6762, 78579, 70192, 13023, 8903, 9777, 66715, 1871, 8099, 127984, - 0, 1343, 983823, 120784, 9325, 6818, 6283, 11738, 0, 72436, 113713, - 11741, 0, 93038, 9216, 8263, 11279, 194752, 983453, 194754, 13021, 64494, - 3136, 194758, 194757, 194760, 13022, 42737, 9956, 0, 127787, 74552, - 10014, 0, 41260, 119340, 13020, 10024, 194764, 74583, 74340, 69681, 0, - 43001, 8029, 0, 0, 983780, 3335, 119341, 9209, 9776, 120526, 194748, - 5215, 42644, 3333, 1632, 194751, 64849, 3342, 78582, 5363, 12957, 78581, - 4156, 0, 127329, 6421, 78039, 1611, 78589, 13018, 74257, 78588, 74542, - 3337, 4537, 67895, 11736, 0, 68608, 6482, 4214, 73790, 11945, 0, 13046, - 8838, 425, 4025, 10709, 78595, 2108, 2392, 13047, 92745, 0, 6819, 13049, - 6499, 92243, 12424, 68614, 65827, 13050, 9924, 194745, 6507, 127919, - 94073, 128069, 3277, 8929, 4947, 41055, 0, 194722, 194721, 194724, 13045, - 64626, 66034, 7751, 194727, 8371, 194729, 3997, 12806, 8768, 13044, 0, - 12420, 4024, 194730, 41054, 1078, 9757, 69736, 41057, 68307, 0, 0, 0, - 983791, 92210, 92411, 0, 41496, 0, 9165, 1572, 11911, 124990, 118842, - 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, 5831, 0, 0, 13043, 8056, - 92494, 65681, 208, 127382, 41514, 0, 0, 0, 10699, 6408, 92227, 7825, - 5661, 0, 120630, 3603, 41109, 2398, 3548, 126596, 128434, 119933, 0, - 3115, 9918, 127823, 8294, 42912, 0, 0, 194726, 4876, 65804, 0, 0, 43468, - 983274, 41558, 41471, 73950, 8158, 9944, 41472, 120298, 13051, 78689, - 3143, 194674, 6701, 41559, 1896, 66256, 13052, 194680, 5665, 78594, - 119071, 7025, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310, 5662, - 42382, 1564, 73924, 1121, 78319, 63959, 0, 9942, 13231, 983578, 64752, - 4732, 194666, 11596, 78142, 65187, 1626, 63983, 10110, 64772, 42024, - 6420, 42028, 92294, 10509, 2795, 4910, 129193, 69231, 64753, 6275, 93957, - 118830, 63978, 11044, 3229, 6423, 42774, 0, 0, 68526, 12823, 2331, - 127788, 7085, 6137, 0, 7524, 0, 917809, 8346, 128438, 8338, 128315, - 65043, 983237, 822, 70412, 9903, 64721, 42722, 69877, 194659, 78655, - 66882, 194660, 78484, 41265, 5311, 1795, 965, 118791, 10587, 73931, - 11278, 78632, 194640, 0, 12946, 194641, 71921, 120349, 6294, 3144, - 194648, 127967, 65019, 194649, 73990, 65111, 983960, 748, 41067, 2330, - 535, 3148, 12375, 78799, 194629, 10556, 2475, 12388, 4889, 8968, 67863, - 3593, 74076, 0, 2342, 0, 126541, 65206, 4894, 194635, 4890, 194637, - 129147, 581, 4893, 42929, 6571, 65545, 4888, 4157, 78048, 78049, 64651, - 78047, 0, 10119, 6415, 42893, 0, 69702, 983937, 0, 11375, 64746, 2332, - 78063, 412, 78061, 42928, 42880, 43587, 0, 0, 0, 70461, 65197, 78066, - 12203, 78064, 78065, 8913, 65854, 4875, 65811, 120381, 120389, 71854, - 9344, 8826, 92916, 120395, 13104, 74781, 11997, 120393, 78075, 0, 3134, - 0, 65696, 72432, 0, 66217, 0, 8334, 92755, 0, 3449, 0, 0, 78414, 78413, - 118950, 66405, 70430, 0, 0, 0, 1908, 120167, 4328, 10734, 127014, 0, - 127914, 7804, 78272, 10811, 6250, 11339, 4914, 11367, 125001, 78054, - 4917, 74516, 74208, 64285, 4912, 5464, 127836, 118893, 2361, 7971, 78072, - 78073, 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, 40977, 10960, - 40962, 8305, 12573, 983608, 40980, 983964, 13202, 127816, 12582, 78282, - 983048, 69856, 42438, 55221, 6288, 78280, 127946, 5653, 42400, 10891, - 7698, 5658, 70401, 70039, 0, 70460, 4913, 71060, 128562, 71333, 42326, - 128194, 12728, 92685, 42478, 2327, 0, 12563, 42287, 12705, 0, 120824, - 12588, 8821, 6153, 2867, 194708, 66312, 698, 127059, 194606, 10356, - 70017, 194713, 651, 12641, 0, 125098, 120710, 129064, 41552, 65115, - 78465, 78467, 78463, 78464, 128851, 78461, 92960, 66927, 64945, 4716, - 43277, 0, 78474, 12340, 120568, 0, 194700, 55264, 41211, 120676, 8703, - 5462, 120793, 128944, 10101, 0, 70049, 8479, 4151, 41933, 0, 0, 66254, - 120821, 68497, 0, 128654, 113799, 119194, 74050, 42651, 0, 0, 0, 129151, - 0, 12278, 127167, 128405, 0, 2700, 12576, 7842, 12899, 0, 0, 2699, 0, - 73845, 2985, 92568, 68648, 917845, 12192, 119314, 0, 66489, 9827, 119310, - 8609, 119308, 67426, 119306, 11481, 41210, 119305, 0, 35, 70838, 67431, - 66694, 68479, 78477, 67428, 43596, 6090, 64257, 7812, 10534, 0, 78485, - 73848, 67975, 4272, 78321, 40967, 40964, 917825, 12704, 78487, 43306, 0, - 64497, 12138, 7930, 0, 2292, 68216, 194871, 917826, 5244, 4189, 94108, - 67596, 127504, 4188, 1879, 70463, 968, 0, 43743, 0, 8873, 2279, 0, - 917827, 65555, 12574, 0, 92749, 92753, 74490, 127099, 11838, 983920, 0, - 0, 42682, 12578, 12720, 0, 41227, 0, 12346, 127101, 64848, 69950, 917950, - 7251, 0, 120382, 118850, 119141, 128546, 66015, 67332, 959, 8885, 12564, - 66457, 78808, 9469, 9632, 92323, 74761, 64323, 127335, 0, 0, 11132, 310, - 0, 41281, 10976, 0, 71325, 128364, 74266, 10054, 6497, 8574, 0, 9012, - 19958, 74420, 65089, 13215, 12730, 65163, 74044, 374, 43195, 816, 120161, - 0, 0, 41934, 7465, 74615, 92752, 983268, 4715, 6101, 71089, 41936, 0, - 4879, 0, 65446, 0, 307, 127147, 9585, 5374, 983267, 128059, 0, 129189, - 126618, 120390, 129146, 65567, 120614, 1929, 0, 12142, 0, 12236, 41419, - 194618, 120610, 12982, 128228, 5378, 78791, 128679, 41421, 195075, 4462, - 0, 126599, 128092, 821, 0, 2498, 5800, 120157, 67758, 1760, 2421, 4469, - 2324, 828, 3611, 78400, 757, 1185, 0, 78770, 43597, 10628, 74808, 194572, - 7999, 43971, 11217, 0, 10634, 10942, 7713, 2348, 0, 64374, 4380, 194608, - 119044, 9982, 64324, 41240, 862, 65626, 78462, 1810, 3673, 5137, 194617, - 0, 7277, 65622, 65069, 7566, 64688, 67143, 194592, 78092, 70422, 128385, - 4748, 92228, 129185, 194601, 42260, 5871, 119075, 0, 74576, 44019, 0, - 128189, 3967, 71098, 13137, 8775, 127945, 0, 2963, 0, 8410, 4454, 723, - 127882, 966, 4449, 92330, 92238, 128428, 7819, 2320, 194589, 339, 4968, - 194590, 120399, 8075, 55276, 0, 8047, 0, 78827, 12634, 41542, 78780, - 7466, 6705, 12174, 42610, 0, 74452, 983763, 1584, 66645, 6045, 6729, - 120640, 65218, 11559, 0, 78062, 7537, 124991, 11370, 0, 10330, 0, 10394, - 0, 74194, 0, 127929, 9780, 0, 11117, 194576, 77950, 194578, 7074, 92648, - 194579, 194582, 11414, 124960, 2531, 13034, 0, 0, 4211, 1259, 7517, - 70866, 70198, 194561, 40996, 13037, 7092, 641, 5219, 94034, 194566, - 11064, 41129, 0, 42850, 13035, 9075, 92387, 5466, 128153, 0, 64098, - 65793, 4535, 194573, 4271, 78417, 128357, 6769, 41410, 194675, 64262, - 6767, 41407, 66273, 917816, 6755, 118864, 9046, 127934, 126608, 70830, 0, - 0, 0, 67675, 983694, 0, 0, 64338, 2563, 13033, 247, 118915, 0, 12338, - 4651, 67355, 11270, 0, 74630, 11933, 0, 0, 41903, 43447, 11001, 73827, - 42255, 113760, 92661, 69821, 41905, 67350, 0, 10775, 9793, 5009, 128774, - 42269, 64587, 983063, 42535, 69812, 64529, 41408, 42853, 3877, 120795, - 42674, 8147, 43566, 119021, 67342, 10236, 65918, 43782, 0, 127556, 64506, - 69652, 118921, 4747, 128058, 69844, 43200, 5832, 71253, 0, 5141, 42600, - 71866, 43203, 127208, 120129, 43286, 0, 128211, 43778, 7657, 41305, - 78776, 43781, 11303, 65547, 128609, 7031, 859, 128488, 0, 0, 6059, - 126985, 55235, 194817, 8535, 128638, 65196, 125084, 66032, 11488, 120481, - 120786, 42233, 64140, 9946, 7667, 194792, 11822, 0, 11135, 983898, 0, - 1788, 1579, 120482, 71298, 0, 983459, 0, 9028, 119571, 69234, 71061, - 194738, 1285, 64882, 41242, 70086, 129041, 12640, 0, 7401, 0, 12625, - 68198, 0, 70082, 3940, 41597, 43754, 3396, 12642, 8665, 983610, 983609, - 12630, 1653, 917815, 10153, 0, 6166, 70825, 118989, 0, 8815, 66673, - 65046, 9285, 913, 42259, 11180, 119318, 2142, 68454, 42485, 94012, 7878, - 8211, 42293, 64377, 120478, 92643, 0, 194673, 12032, 0, 9725, 983489, - 78431, 5263, 12818, 78430, 41939, 10022, 65387, 78419, 42777, 10139, 980, - 43698, 65386, 2208, 983454, 43701, 43198, 7184, 92542, 128423, 128875, - 10085, 113812, 0, 67394, 6634, 92373, 125085, 119323, 8072, 119321, - 43700, 0, 8872, 7783, 917991, 12398, 8237, 0, 0, 12395, 0, 126977, - 120565, 9914, 2217, 194586, 73975, 6367, 6351, 66688, 92740, 78107, 0, - 64735, 41243, 92199, 7808, 1829, 0, 41937, 4358, 43272, 6353, 0, 0, - 120422, 93045, 1710, 120140, 0, 65607, 67234, 49, 6627, 0, 6258, 10683, - 78672, 9741, 78329, 5649, 78441, 43443, 64418, 1643, 65213, 8405, 3470, - 67244, 13213, 42452, 78331, 120664, 78445, 125124, 1072, 78457, 78452, - 78454, 6576, 41988, 41132, 65675, 1080, 70824, 9886, 55225, 1101, 68404, - 12309, 55227, 71082, 12632, 1086, 1869, 78685, 7680, 0, 65458, 120714, - 12639, 3380, 8123, 1091, 12638, 7977, 4501, 41099, 0, 66309, 120141, - 92758, 1494, 113716, 126613, 0, 11693, 71255, 10494, 92655, 65872, 12363, - 11386, 113727, 0, 0, 0, 64582, 0, 73794, 67395, 8022, 0, 120462, 74106, - 12413, 66883, 917994, 93035, 917995, 5570, 1881, 7210, 120425, 1012, - 43752, 0, 120709, 7208, 66442, 5569, 983242, 42339, 92997, 6063, 67888, - 69981, 119594, 6053, 65602, 0, 92201, 64727, 9160, 128397, 0, 92905, - 92180, 10503, 70387, 6055, 3870, 4279, 8490, 120114, 4319, 64786, 8602, - 120110, 11326, 92204, 983116, 0, 120119, 78333, 120117, 120118, 120099, - 92385, 65087, 5571, 3674, 9740, 9121, 5568, 120107, 120108, 42085, 10107, - 42159, 42870, 113700, 589, 7050, 983800, 43281, 10233, 41263, 66251, - 65729, 66253, 126497, 74099, 42645, 0, 128424, 8583, 0, 5847, 6928, - 128074, 0, 0, 0, 0, 66592, 12204, 917962, 19966, 77856, 42561, 120626, - 129170, 66854, 8120, 120701, 0, 0, 128012, 41063, 0, 10664, 0, 8369, 0, - 4551, 194964, 3369, 983739, 129026, 9673, 66334, 65580, 10478, 118960, - 12517, 557, 9457, 12034, 68496, 6355, 12519, 41004, 0, 195025, 74094, 0, - 0, 77970, 92171, 127219, 128175, 12111, 3927, 0, 12515, 1474, 67893, - 5492, 6923, 92281, 10441, 73836, 0, 43990, 5493, 0, 74319, 0, 66635, - 12019, 0, 1618, 0, 120474, 9645, 10430, 126636, 5853, 13063, 10363, 0, - 12956, 113666, 120729, 11314, 917582, 12060, 0, 78392, 12826, 6329, 0, + 73816, 83060, 128418, 42670, 0, 11621, 12460, 1326, 120631, 83393, 43063, + 43239, 65678, 194840, 73917, 7843, 69783, 11689, 5410, 5783, 10468, 8403, + 5400, 11594, 120405, 68333, 83390, 10491, 69842, 64412, 0, 128012, 5587, + 42865, 64404, 8268, 4923, 65086, 8981, 12382, 42133, 120755, 9706, 69738, + 70294, 66610, 10461, 12103, 0, 8642, 83388, 42766, 83387, 2210, 9983, + 128689, 94009, 0, 0, 0, 7398, 41515, 0, 11802, 8041, 1461, 910, 119133, + 0, 6749, 3658, 93964, 120525, 0, 7617, 194841, 12888, 127983, 67668, + 13143, 0, 9193, 11097, 5703, 128247, 41517, 41504, 41519, 10016, 64305, + 0, 65864, 623, 781, 670, 10660, 5769, 613, 7543, 120279, 477, 41083, + 92521, 0, 592, 1578, 12459, 43449, 0, 0, 8225, 121191, 654, 11345, 653, + 652, 0, 647, 83266, 633, 120744, 983809, 126472, 12480, 43243, 194909, + 39, 12487, 121247, 120529, 74199, 12482, 0, 12489, 119607, 3195, 5550, + 129121, 7897, 127089, 1203, 74396, 1813, 64544, 41311, 12090, 983634, + 2877, 121518, 70496, 1675, 69840, 0, 0, 119078, 10070, 10595, 0, 119077, + 194777, 121162, 67170, 120790, 118787, 43244, 92233, 917835, 983916, + 119561, 983078, 194914, 194921, 128160, 9939, 0, 983151, 77860, 128948, + 83440, 270, 0, 10714, 118983, 72437, 0, 119942, 119338, 65372, 73803, + 74038, 68251, 6273, 66679, 364, 9595, 71440, 0, 0, 707, 194839, 128409, + 9282, 11163, 224, 128588, 68670, 9332, 4966, 68677, 194586, 68644, + 983131, 3841, 67357, 67341, 10732, 68640, 850, 4972, 127181, 12890, 2909, + 68619, 44008, 68627, 120699, 11544, 10203, 9608, 0, 917943, 11962, + 121397, 12507, 1196, 67684, 67100, 777, 120187, 4375, 65271, 67678, 0, + 12198, 917887, 64824, 119343, 127243, 9454, 63778, 8658, 42528, 70073, + 2705, 128680, 41520, 195098, 120379, 11986, 7765, 42502, 8280, 74520, + 2701, 0, 120240, 5767, 0, 195018, 9809, 8353, 63747, 66701, 63772, + 121233, 63745, 1748, 63770, 121419, 121078, 0, 65542, 63766, 55244, 3061, + 78609, 63764, 63787, 9067, 6096, 0, 7694, 0, 7257, 63768, 3485, 12987, + 127781, 127522, 120628, 63807, 1591, 0, 6386, 63783, 120990, 125041, + 92535, 0, 0, 68249, 74575, 127010, 65719, 13083, 64574, 65012, 121452, + 1640, 12495, 66691, 7624, 3138, 10996, 11171, 1922, 127275, 12498, 10987, + 69936, 69939, 3894, 65543, 129183, 194842, 128112, 493, 0, 43197, 1717, + 4228, 479, 10303, 74020, 0, 917935, 10335, 3520, 917932, 12490, 64315, + 92170, 127039, 12493, 6233, 42681, 1002, 12491, 83519, 64911, 83521, + 2096, 65120, 83516, 78219, 83270, 8378, 11632, 68838, 66213, 63864, + 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, + 92672, 66240, 78041, 66233, 8928, 983552, 7909, 66234, 11605, 63759, + 127308, 66208, 67339, 13002, 63803, 244, 11542, 12898, 12494, 73761, + 12492, 12669, 94070, 0, 74153, 120310, 128278, 120680, 4882, 13040, + 983362, 8612, 4885, 74053, 127830, 13042, 4880, 64662, 2429, 1360, 248, + 129066, 63797, 92394, 42358, 0, 7292, 0, 63756, 42786, 66693, 0, 1870, + 78040, 470, 78038, 78035, 78036, 70028, 78034, 4579, 69232, 0, 12511, + 74453, 12514, 0, 71130, 7239, 7001, 8623, 94011, 125137, 128048, 7378, + 12512, 11615, 6104, 0, 120900, 659, 6098, 0, 12234, 83511, 67358, 8311, + 12510, 7669, 13039, 83509, 12513, 10202, 12471, 0, 8747, 121385, 70193, + 128354, 2323, 0, 2319, 77917, 12477, 77916, 2311, 7666, 4415, 237, 6281, + 127280, 983311, 83020, 2309, 1312, 8173, 83013, 12469, 83015, 78505, + 64335, 10609, 83011, 78006, 9397, 11524, 9395, 9396, 9393, 9394, 9391, + 9392, 9389, 6209, 9387, 9388, 4932, 9386, 9383, 9384, 6740, 127990, + 65451, 8185, 128931, 194843, 43024, 43336, 67659, 2313, 128167, 7948, + 9236, 77942, 0, 0, 10570, 43473, 6289, 10484, 83006, 83007, 11998, 12082, + 10924, 3147, 83004, 66406, 12524, 119081, 2310, 11818, 9381, 9382, 9379, + 9380, 9377, 9378, 9375, 9376, 1683, 9374, 983778, 9372, 12444, 74256, 0, + 13016, 8210, 121062, 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, + 120630, 4155, 121090, 120704, 42030, 5007, 12522, 43088, 0, 4951, 113826, + 127217, 983202, 9922, 43309, 11211, 12525, 983473, 12016, 65770, 9548, + 67665, 403, 78230, 12503, 194689, 127191, 11030, 43916, 92567, 65691, + 63998, 1819, 10496, 0, 0, 119920, 0, 129143, 121072, 12506, 983838, + 11146, 71477, 12500, 44023, 12509, 64393, 78830, 3389, 10589, 6608, + 11208, 120236, 78395, 78394, 74069, 71446, 78391, 3608, 8281, 113732, + 1107, 113745, 9076, 8862, 69743, 41052, 13084, 64766, 43217, 7803, 13222, + 74165, 74782, 43499, 8546, 11553, 63995, 13177, 9043, 6303, 113664, 498, + 64471, 77987, 92974, 12529, 8042, 43899, 2344, 12528, 8031, 2414, 74506, + 69719, 3231, 917836, 6422, 66512, 69653, 12530, 2537, 78405, 41429, + 12658, 13036, 65772, 0, 78738, 41433, 4719, 469, 917810, 4363, 3313, + 41428, 78407, 2023, 1772, 78224, 78225, 65706, 10051, 64812, 78220, + 74237, 9920, 12215, 82978, 4931, 1951, 12497, 119363, 9607, 70368, 9663, + 66838, 119634, 6503, 41110, 983467, 1491, 66847, 129169, 127304, 41061, + 70454, 194838, 127187, 65026, 41993, 41509, 11045, 65028, 71181, 66476, + 41108, 9738, 41995, 1075, 1958, 12535, 41992, 41506, 127002, 41687, 0, + 120717, 127776, 9940, 127299, 7692, 983833, 8008, 41131, 330, 8566, + 65083, 6839, 9816, 126517, 12532, 78550, 78546, 3508, 127058, 43235, + 120351, 127298, 64139, 78231, 6411, 12910, 67710, 66644, 13028, 6737, + 12537, 0, 43506, 64136, 12536, 2350, 13029, 78233, 120914, 43897, 13030, + 6702, 4527, 71250, 12538, 128810, 983645, 65599, 65717, 9966, 93046, + 4948, 12484, 4032, 121177, 12623, 0, 6207, 983225, 6117, 65930, 8412, + 127183, 7438, 1296, 2325, 41511, 121020, 10149, 74118, 0, 120233, 12481, + 121280, 12488, 66713, 0, 41556, 64414, 118802, 2354, 42619, 73766, + 119244, 6295, 901, 41510, 7953, 0, 65032, 41513, 120209, 11927, 66584, + 78559, 78560, 78557, 71459, 83034, 67603, 848, 9868, 67220, 6424, 78568, + 67226, 69922, 70190, 78563, 78564, 2352, 67219, 893, 64576, 11289, 1407, + 67973, 983193, 13026, 6762, 78579, 70192, 13023, 8903, 9777, 66715, 1871, + 8099, 127984, 0, 1343, 917999, 120784, 9325, 6818, 6283, 11738, 0, 72436, + 113713, 11741, 917986, 75043, 9216, 8263, 11279, 83023, 83024, 83025, + 13021, 64494, 3136, 194758, 194757, 194760, 13022, 42737, 9956, 0, 43954, + 74552, 10014, 0, 41260, 119340, 13020, 10024, 194764, 74583, 74340, + 69681, 0, 43001, 8029, 0, 0, 983780, 3335, 119341, 9209, 9776, 120526, + 194748, 5215, 42644, 3333, 1632, 194751, 64849, 3342, 78582, 5363, 12957, + 78581, 4156, 0, 127329, 6421, 78039, 1611, 78589, 13018, 74257, 78588, + 74542, 3337, 4537, 67895, 11736, 0, 68608, 6482, 4214, 73790, 11945, + 43925, 13046, 8838, 425, 4025, 10709, 78595, 2108, 2392, 13047, 92745, 0, + 6819, 13049, 6499, 92243, 12424, 68614, 65827, 13050, 9924, 194745, 6507, + 127919, 94073, 128069, 3277, 8929, 4947, 41055, 0, 194722, 194721, + 194724, 13045, 64626, 66034, 7751, 194727, 8371, 121036, 3997, 12806, + 8768, 13044, 0, 12420, 4024, 128000, 41054, 1078, 9757, 69736, 41057, + 68307, 917842, 0, 0, 983791, 92210, 92411, 129303, 41496, 0, 9165, 1572, + 11911, 124990, 118842, 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, + 5831, 0, 120865, 13043, 8056, 70108, 65681, 208, 127382, 41514, 0, + 121048, 983884, 10699, 6408, 92227, 7825, 5661, 82972, 82973, 3603, + 41109, 2398, 3548, 82969, 82970, 119933, 82964, 3115, 9918, 127823, 8294, + 42912, 0, 127287, 194726, 4876, 65804, 0, 0, 43468, 121221, 41558, 41471, + 73950, 8158, 9944, 41472, 120298, 13051, 78689, 3143, 194674, 6701, + 41559, 1896, 65215, 13052, 194680, 5665, 78594, 119071, 7025, 63974, 0, + 74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382, 1564, 73924, 1121, + 78319, 63959, 0, 9942, 13231, 983578, 64752, 4732, 194666, 11596, 78142, + 65187, 1626, 63983, 10110, 64772, 42024, 6420, 42028, 92294, 10509, 2795, + 4910, 129193, 69231, 64753, 6275, 93957, 118830, 63978, 11044, 3229, + 6423, 42774, 0, 0, 68526, 12823, 2331, 127788, 7085, 6137, 0, 7524, + 120721, 917809, 8346, 128438, 8338, 128315, 65043, 77982, 822, 70412, + 9903, 64721, 42722, 69877, 82956, 78655, 66882, 82959, 78484, 41265, + 5311, 1795, 965, 118791, 10587, 43962, 11278, 78632, 74111, 128095, + 12946, 121076, 71921, 120349, 6294, 3144, 113706, 127967, 65019, 74078, + 73990, 65111, 983960, 748, 41067, 2330, 535, 3148, 12375, 78799, 194629, + 10556, 2475, 12388, 4889, 8968, 67863, 3593, 74076, 82949, 2342, 82951, + 82944, 65206, 4894, 82947, 4890, 121059, 64433, 581, 4893, 42929, 6571, + 65545, 4888, 4157, 78048, 78049, 64651, 78047, 0, 10119, 6415, 42893, 0, + 69702, 983937, 0, 11375, 64746, 2332, 78063, 412, 78061, 42928, 42880, + 43587, 121098, 0, 0, 70461, 65197, 78066, 12203, 78064, 78065, 8913, + 65854, 4875, 65811, 75024, 120389, 71854, 9344, 8826, 92916, 120395, + 13104, 67828, 11997, 120393, 78075, 0, 3134, 83096, 65696, 72432, 121412, + 66217, 121190, 8334, 92755, 83207, 3449, 121264, 13100, 78414, 78413, + 83216, 66405, 70430, 83089, 83203, 127250, 1908, 120167, 4328, 10734, + 127014, 83198, 67825, 7804, 78272, 10811, 6250, 11339, 4914, 11367, + 83510, 78054, 4917, 74516, 74208, 64285, 4912, 5464, 127836, 83100, 2361, + 7971, 78072, 78073, 55243, 78071, 983575, 8086, 74317, 6707, 8319, 2312, + 40977, 10960, 40962, 8305, 12573, 71131, 40980, 983964, 13202, 127816, + 12582, 78282, 983048, 69856, 42438, 55221, 6288, 78280, 127946, 5653, + 42400, 10891, 7698, 5658, 70401, 70039, 0, 70460, 4913, 71060, 128562, + 71333, 42326, 121119, 12728, 92685, 42478, 2327, 0, 12563, 42287, 12705, + 120829, 83081, 12588, 8821, 6153, 2867, 83085, 66312, 698, 83076, 83087, + 10356, 70017, 128570, 651, 12641, 83138, 125098, 120710, 129064, 41552, + 65115, 78465, 78467, 78463, 74905, 127516, 78461, 92960, 66927, 64945, + 4716, 43277, 120932, 78474, 12340, 120568, 120928, 194700, 55264, 41211, + 120676, 8703, 5462, 83195, 83185, 10101, 0, 70049, 8479, 4151, 41933, + 83189, 0, 66254, 120821, 68497, 0, 128654, 113799, 83159, 74050, 42651, + 127371, 0, 0, 83225, 83218, 12278, 75011, 128405, 0, 2700, 12576, 7842, + 12899, 83155, 0, 2699, 129304, 73845, 2985, 83149, 68648, 83146, 12192, + 119314, 0, 66489, 9827, 119310, 8609, 119308, 67426, 119306, 11481, + 41210, 119305, 0, 35, 70838, 67431, 66694, 68479, 78477, 67428, 43596, + 6090, 64257, 7812, 10534, 0, 78485, 73848, 67975, 4272, 78321, 40967, + 40964, 917825, 12704, 78487, 43306, 0, 64497, 12138, 7930, 0, 2292, + 68216, 194871, 121390, 5244, 4189, 92697, 67596, 127504, 4188, 1879, + 70463, 968, 0, 43743, 0, 8873, 2279, 127100, 917827, 65555, 12574, 0, + 92749, 92753, 74490, 127099, 11838, 75001, 0, 0, 42682, 12578, 12720, 0, + 41227, 0, 12346, 127101, 64848, 69950, 917950, 7251, 0, 120382, 118850, + 119141, 128461, 66015, 67332, 959, 8885, 12564, 66457, 78808, 9469, 9632, + 92231, 74761, 64323, 127335, 128842, 0, 11132, 310, 120924, 41281, 10976, + 0, 71325, 128364, 74266, 10054, 6497, 8574, 917823, 9012, 19958, 74420, + 65089, 13215, 12730, 65163, 64260, 374, 43195, 816, 92783, 0, 83191, + 41934, 7465, 74615, 92752, 127895, 4715, 6101, 71089, 41936, 82967, 4879, + 43965, 65446, 0, 307, 127147, 9585, 5374, 127962, 128059, 0, 129189, + 126618, 120390, 74953, 65567, 120614, 1929, 120984, 12142, 194696, 12236, + 41419, 194618, 120610, 12982, 75003, 5378, 75004, 120957, 41421, 75005, + 4462, 0, 126599, 128092, 821, 0, 2498, 5800, 120157, 67758, 1760, 2421, + 4469, 2324, 828, 3611, 78400, 757, 1185, 0, 78770, 43597, 10628, 74808, + 68849, 7999, 43971, 11217, 121224, 10634, 10942, 7713, 2348, 0, 64374, + 4380, 128284, 83061, 9982, 64324, 41240, 862, 64468, 78462, 1810, 3673, + 5137, 194617, 0, 7277, 65622, 65069, 7566, 64688, 67143, 194592, 74957, + 43912, 128385, 4748, 92228, 129185, 194601, 42260, 5871, 119075, 121278, + 74576, 44019, 194720, 128189, 3967, 71098, 13137, 8775, 127945, 0, 2963, + 917785, 8410, 4454, 723, 83084, 966, 4449, 92330, 92238, 75022, 7819, + 2320, 194589, 339, 4968, 194590, 120399, 8075, 55276, 83057, 8047, 0, + 78827, 12634, 41542, 78780, 7466, 6705, 12174, 42610, 124934, 74452, + 983763, 1584, 66645, 6045, 6729, 120640, 65218, 11559, 194983, 78062, + 7537, 124991, 11370, 125093, 10330, 78798, 10394, 92236, 74194, 0, + 127929, 9780, 0, 11117, 74993, 77950, 67091, 7074, 92648, 194579, 194582, + 11414, 68781, 2531, 13034, 129159, 0, 4211, 1259, 7517, 70866, 70198, + 83122, 40996, 13037, 7092, 641, 5219, 83125, 194566, 11064, 41129, + 121253, 42850, 13035, 9075, 92387, 5466, 74293, 74530, 64098, 65793, + 4535, 121267, 4271, 78417, 127059, 6769, 41410, 127257, 64262, 6767, + 41407, 66273, 917816, 6755, 118864, 9046, 120886, 126608, 70830, 0, + 83232, 0, 67675, 983694, 83234, 121254, 64338, 2563, 13033, 247, 83229, + 0, 12338, 4651, 67355, 11270, 0, 74630, 11933, 70107, 0, 41903, 43447, + 11001, 73827, 42255, 83243, 83238, 69821, 41905, 67350, 0, 10775, 9793, + 5009, 128774, 42269, 64587, 983063, 42535, 69812, 64529, 41408, 42853, + 3877, 120795, 42674, 8147, 43566, 119021, 67342, 10236, 65918, 43782, + 78769, 78060, 64506, 69652, 118921, 4747, 83251, 69844, 43200, 5832, + 71208, 83250, 5141, 42600, 71866, 43203, 127208, 120129, 43286, 0, + 128211, 43778, 7657, 41305, 71132, 43781, 11303, 65547, 128609, 7031, + 859, 128488, 83262, 83237, 6059, 126985, 55235, 194817, 8535, 128638, + 65196, 125084, 66032, 11488, 120481, 120786, 42233, 64140, 9946, 7667, + 194792, 11822, 128591, 11135, 983600, 0, 1788, 1579, 120482, 71298, 0, + 983461, 0, 9028, 119571, 69234, 71061, 92545, 1285, 64882, 41242, 70086, + 83111, 12640, 83112, 7401, 0, 12625, 68198, 0, 70082, 3940, 41597, 43754, + 3396, 12642, 8665, 983610, 983609, 12630, 1653, 917815, 10153, 0, 6166, + 70825, 118989, 129409, 8815, 66673, 65046, 9285, 913, 42259, 11180, + 119318, 2142, 68454, 42485, 94012, 7878, 8211, 42293, 64377, 120478, + 92643, 121118, 194673, 12032, 0, 9725, 983491, 78431, 5263, 12818, 78430, + 41939, 10022, 65387, 78419, 42777, 10139, 980, 43698, 65386, 2208, 68848, + 43701, 43198, 7184, 92542, 128423, 128875, 10085, 74979, 0, 67394, 6634, + 92373, 125085, 83413, 8072, 119321, 43700, 0, 8872, 7783, 917991, 12398, + 8237, 0, 0, 12395, 0, 126977, 74891, 9914, 2217, 92323, 73975, 6367, + 6351, 66688, 92740, 68766, 0, 64735, 41243, 92199, 7808, 1829, 126541, + 41937, 4358, 43272, 6353, 0, 0, 120422, 93045, 1710, 120140, 0, 65607, + 67234, 49, 6627, 0, 6258, 10683, 78672, 9741, 78329, 5649, 78441, 43443, + 64418, 1643, 65213, 8405, 3470, 67244, 13213, 42452, 78331, 78013, 78445, + 125124, 1072, 78457, 78452, 78454, 6576, 41988, 41132, 65675, 1080, + 70824, 9886, 55225, 1101, 68404, 12309, 55227, 71082, 12632, 1086, 1869, + 78685, 7680, 0, 65458, 120714, 12639, 3380, 8123, 1091, 12638, 7977, + 4501, 41099, 0, 66309, 120141, 92758, 1494, 113716, 126613, 0, 11693, + 71255, 10494, 92655, 65872, 12363, 11386, 113727, 0, 0, 78771, 64582, 0, + 73794, 67395, 8022, 120989, 120462, 74106, 12413, 66883, 917994, 93035, + 75007, 5570, 1881, 7210, 120425, 1012, 43752, 0, 120709, 7208, 66442, + 5569, 195007, 42339, 92997, 6063, 67888, 69981, 119594, 6053, 65602, 0, + 92201, 64727, 9160, 70301, 0, 92905, 92180, 10503, 70387, 3423, 3870, + 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 92204, 983116, 0, + 74961, 78333, 120117, 120118, 120099, 92385, 65087, 5571, 3674, 9740, + 9121, 5568, 71464, 120108, 42085, 10107, 42159, 42870, 113700, 589, 7050, + 983800, 43281, 10233, 41263, 66251, 65729, 66253, 126497, 74099, 42645, + 92331, 121358, 8583, 121123, 5847, 6928, 128074, 0, 0, 0, 0, 66592, + 12204, 917962, 19966, 77856, 42561, 120626, 129170, 66854, 8120, 70311, + 194585, 0, 70308, 41063, 120417, 10664, 0, 8369, 0, 4551, 194964, 3369, + 74971, 121094, 9673, 66334, 65580, 10478, 118960, 12517, 557, 9457, + 12034, 68496, 6355, 12519, 41004, 0, 74937, 74094, 917888, 125060, 77970, + 92171, 127219, 128175, 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, + 92281, 10441, 73836, 0, 43990, 5493, 0, 74319, 0, 66635, 12019, 0, 1618, + 0, 120474, 9645, 10430, 126636, 5853, 13063, 10363, 983898, 12956, + 113666, 120729, 11314, 917582, 12060, 128648, 78392, 12826, 6329, 0, 10514, 65517, 74395, 2707, 8309, 0, 127054, 78398, 43570, 2697, 43420, - 78396, 127057, 2695, 42171, 70809, 68334, 0, 67617, 118971, 0, 2693, - 12125, 12766, 0, 1164, 113729, 0, 41918, 77849, 67150, 8687, 66009, - 12178, 7053, 128001, 7469, 0, 5248, 12218, 69988, 6427, 42884, 41123, - 11176, 0, 42873, 41126, 9991, 41128, 74371, 127031, 0, 9873, 0, 42877, - 7994, 64762, 2053, 42843, 6591, 9340, 0, 1589, 128691, 296, 67712, 78852, - 0, 67841, 74370, 128504, 8922, 128068, 43829, 12700, 74836, 0, 12579, 0, - 12575, 6416, 5656, 2891, 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, - 78404, 41431, 74369, 65373, 5295, 917569, 68320, 1223, 1642, 174, 78399, - 883, 4161, 12691, 42603, 41413, 3212, 41459, 3211, 74810, 41425, 74598, - 78412, 74450, 9728, 3846, 8070, 6150, 6636, 4370, 0, 0, 74178, 74587, - 74117, 195094, 0, 0, 4986, 12189, 127512, 67648, 120499, 94001, 4257, - 12104, 71176, 6220, 9004, 65561, 983881, 77949, 0, 68135, 917576, 77946, - 0, 69679, 69684, 9890, 78561, 12971, 78453, 92556, 73898, 11979, 70051, - 71897, 119552, 0, 9635, 12600, 8871, 67366, 68491, 0, 6469, 74227, - 118900, 65304, 4679, 10230, 64300, 64867, 3427, 4240, 67376, 67375, - 67374, 67373, 42916, 129155, 128279, 67377, 7282, 78728, 65733, 4445, - 67372, 67371, 3494, 67369, 6555, 129148, 77976, 0, 0, 78566, 0, 983189, - 65898, 983244, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 74357, - 64448, 93994, 41105, 74114, 65820, 6232, 68233, 128280, 0, 43608, 119091, - 124962, 6538, 4335, 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, - 12155, 983674, 42878, 11500, 67405, 0, 74578, 0, 65832, 128667, 0, 70789, - 67333, 119230, 4586, 0, 350, 10951, 0, 509, 67336, 0, 92307, 0, 0, 5133, + 78396, 68247, 2695, 42171, 70809, 68334, 0, 67617, 118971, 0, 2693, + 12125, 12766, 120409, 1164, 113729, 70283, 41918, 77849, 67150, 8687, + 66009, 12178, 7053, 92540, 7469, 0, 5248, 12218, 69988, 6427, 42884, + 41123, 11176, 0, 42873, 41126, 9991, 41128, 74371, 127031, 983932, 9873, + 0, 42877, 7994, 64762, 2053, 42843, 6591, 9340, 128841, 1589, 128691, + 296, 67712, 78852, 121409, 67841, 74370, 128504, 8922, 128068, 43829, + 12700, 74836, 0, 12579, 0, 12575, 6416, 5656, 2891, 13262, 65590, 5299, + 78837, 11473, 5449, 1252, 127328, 78404, 41431, 74369, 65373, 5295, + 917569, 68320, 1223, 1642, 174, 78399, 883, 4161, 12691, 42603, 41413, + 3212, 41459, 3211, 74810, 41425, 74598, 78412, 74450, 9728, 3846, 8070, + 6150, 6636, 4370, 128619, 129158, 74178, 74587, 74117, 195094, 0, 113748, + 4986, 12189, 127512, 67648, 120499, 94001, 4257, 12104, 71176, 6220, + 9004, 65561, 983881, 77949, 0, 68135, 917576, 77946, 83453, 69679, 69684, + 9890, 78561, 12971, 78453, 92556, 73898, 11979, 70051, 71897, 83451, 0, + 9635, 12600, 8871, 67366, 68491, 0, 6469, 74227, 118900, 65304, 4679, + 10230, 64300, 64867, 3427, 4240, 67376, 67375, 67374, 67373, 42916, + 129155, 128279, 67377, 7282, 78728, 65733, 4445, 67372, 67371, 3494, + 67369, 6555, 129148, 77976, 0, 0, 78566, 0, 983189, 65898, 983246, 65312, + 5447, 0, 12895, 65593, 4010, 83154, 41106, 74357, 64448, 93994, 41105, + 74114, 65820, 6232, 68233, 126625, 0, 43608, 119091, 78118, 6538, 4335, + 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, 12155, 983674, + 42878, 11500, 67405, 128152, 74578, 0, 65832, 128667, 0, 70789, 67333, + 119230, 4586, 0, 350, 10951, 0, 509, 67336, 983879, 92307, 0, 0, 5133, 67382, 0, 9500, 0, 4957, 64741, 2422, 2212, 983080, 67381, 67380, 2496, - 11516, 944, 78891, 3890, 12168, 1438, 0, 68335, 70003, 41947, 1220, - 120828, 128555, 70854, 74058, 1571, 42630, 41949, 42805, 8270, 943, 564, - 0, 312, 41980, 983944, 0, 70797, 8877, 269, 4429, 6272, 9617, 1460, 6954, - 78657, 41120, 65121, 10862, 6060, 41119, 41416, 74355, 4173, 0, 0, 0, - 1906, 917898, 11532, 74073, 127338, 0, 1985, 6296, 9582, 917895, 64287, - 128406, 78115, 11428, 1730, 2457, 917808, 19918, 10469, 0, 983079, 7703, - 8840, 8035, 0, 0, 92230, 0, 6129, 128437, 78586, 128268, 0, 7874, 8681, - 119092, 11206, 13136, 0, 0, 70102, 63886, 70450, 9605, 71308, 13220, - 67348, 67354, 5514, 0, 9228, 67349, 67356, 67346, 5240, 9811, 10012, - 3096, 0, 0, 74526, 66676, 65873, 0, 0, 0, 9501, 917959, 1272, 64536, - 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 120270, 917812, 0, - 118899, 12193, 0, 0, 0, 0, 983353, 19935, 120733, 92162, 69676, 0, - 917811, 93057, 5275, 194596, 128632, 8637, 129082, 0, 3789, 63880, 11471, - 43554, 65862, 11474, 66332, 66603, 128138, 2426, 12042, 92194, 983911, - 9537, 3961, 12115, 77953, 2605, 4500, 64561, 55224, 4981, 74644, 0, - 41646, 11667, 42686, 77973, 42362, 64686, 4499, 41649, 7589, 128776, 0, - 3237, 0, 66895, 68296, 8541, 78298, 70034, 41866, 0, 0, 94056, 11174, - 69924, 43555, 2823, 9559, 10060, 41940, 8299, 41945, 7132, 41941, 3308, - 7190, 64880, 8614, 65220, 41493, 0, 41699, 10762, 43780, 12999, 0, - 128494, 8106, 4128, 0, 6274, 4494, 0, 4012, 10395, 983591, 43633, 65447, - 126511, 0, 11004, 695, 739, 696, 7611, 0, 42755, 74802, 9227, 7506, 7510, - 69937, 691, 738, 7511, 7512, 7515, 3868, 688, 41847, 690, 2548, 737, 974, - 8003, 7406, 127353, 0, 128688, 3985, 66425, 65860, 41851, 7051, 69777, - 4682, 71873, 12809, 6406, 4685, 92505, 10879, 10347, 4680, 6341, 0, 3851, - 8132, 74325, 0, 917907, 127948, 41958, 119176, 917908, 194855, 0, 42657, - 71075, 7643, 42373, 11714, 67587, 43568, 983175, 11717, 7650, 10594, - 64951, 7647, 7649, 128155, 7646, 0, 78082, 9651, 126475, 3891, 127205, 0, - 2337, 1735, 74324, 11134, 2363, 125061, 92443, 43561, 67706, 128032, - 74146, 1860, 7495, 7580, 5812, 7497, 7584, 119140, 127853, 78753, 120347, - 7727, 0, 8498, 69818, 8949, 3065, 42719, 7135, 1569, 92375, 12534, 12124, - 7690, 0, 12533, 983879, 6418, 4543, 78086, 6969, 0, 74800, 71051, 67974, - 11980, 128650, 983801, 63894, 120760, 12282, 66192, 0, 74592, 8850, - 74275, 9238, 10617, 917545, 917909, 92625, 917801, 12791, 0, 94069, - 127843, 4447, 71065, 12793, 12900, 92377, 10950, 983447, 74639, 12790, - 41400, 119128, 66607, 12792, 42232, 194938, 1744, 12789, 10366, 12317, - 41310, 120730, 41399, 0, 0, 55258, 0, 12690, 0, 0, 43672, 127840, 41652, - 2974, 9010, 11315, 0, 278, 0, 41405, 43871, 0, 10077, 63853, 74557, - 42586, 0, 0, 6002, 67335, 43553, 11189, 67338, 67337, 12787, 41308, 7934, - 65306, 0, 128421, 0, 8646, 983186, 77829, 71360, 0, 6413, 6550, 113759, - 1940, 0, 43637, 220, 65193, 43551, 10678, 10044, 128322, 128121, 983816, - 68290, 6403, 5707, 10393, 127532, 0, 66614, 0, 0, 0, 10297, 0, 3742, - 67331, 3959, 0, 120466, 0, 2467, 69739, 6003, 63844, 6663, 8040, 0, - 43758, 4182, 78171, 4676, 120501, 9210, 0, 2510, 0, 10208, 78168, 92361, - 11540, 43546, 6692, 6837, 41060, 0, 4668, 9083, 0, 0, 78144, 1559, 63831, - 9677, 67340, 67347, 65256, 67345, 67344, 0, 0, 365, 12056, 43027, 120423, - 41716, 128236, 67352, 67351, 5516, 2845, 7717, 8036, 41717, 67353, 544, - 12045, 6278, 74632, 5515, 0, 0, 983051, 65339, 43221, 2211, 0, 5517, - 70116, 74225, 74841, 67884, 128414, 67890, 67885, 67880, 67881, 67882, - 67883, 0, 118883, 67879, 127188, 1902, 67887, 9638, 12976, 126546, 12483, - 12368, 41769, 42726, 41765, 7361, 6667, 67874, 7556, 67878, 74351, 11264, - 989, 42677, 67889, 93040, 1311, 128949, 4326, 11000, 63824, 13068, 10932, - 128880, 6917, 78155, 983615, 949, 77882, 0, 6148, 8605, 42253, 78177, - 66906, 0, 42715, 0, 0, 0, 63871, 0, 41796, 1269, 6530, 0, 65057, 70493, - 5144, 12221, 42716, 68299, 4431, 4331, 983729, 128675, 41834, 5279, 0, - 10336, 8312, 0, 42701, 92959, 0, 78165, 66036, 70166, 124935, 6428, - 42270, 0, 983596, 43059, 42666, 5256, 1067, 255, 12131, 128742, 9493, - 983968, 41014, 11793, 194920, 0, 74394, 43460, 10653, 42723, 983854, - 119632, 70427, 6560, 7016, 74274, 69986, 43556, 3929, 67977, 6614, 2768, - 92504, 9746, 5135, 11811, 12796, 11953, 0, 69761, 5139, 346, 74303, 6305, - 12795, 4675, 5168, 78552, 43845, 74315, 74361, 8253, 8817, 1136, 0, - 43563, 92232, 128914, 66410, 7392, 8230, 9365, 71194, 0, 983607, 66915, - 128402, 4041, 0, 2357, 43240, 12786, 229, 43834, 119884, 44004, 7142, - 119881, 12350, 65554, 119882, 119877, 119876, 12785, 63863, 43795, 7770, - 10712, 64853, 12686, 43831, 42375, 0, 127238, 66352, 10470, 0, 11059, - 10791, 917944, 450, 119328, 0, 10432, 12097, 5450, 64691, 1233, 0, 44009, - 78284, 66338, 66395, 0, 1839, 118799, 983219, 10927, 1701, 983664, 2388, - 41749, 41761, 5453, 8361, 119865, 895, 5444, 41763, 64889, 7143, 92493, - 78677, 983137, 92429, 69983, 66432, 8801, 3053, 4340, 983044, 0, 65812, - 120675, 70001, 41824, 67985, 120203, 92600, 127053, 42700, 194805, - 127980, 194807, 78676, 92356, 194808, 127844, 0, 4493, 4336, 129171, - 2314, 43602, 78826, 119325, 194811, 42439, 64638, 42327, 43528, 4489, - 71331, 128006, 194793, 1912, 42385, 10306, 10370, 0, 0, 8867, 10250, - 10258, 2712, 1635, 71064, 1410, 78763, 983250, 118878, 0, 128715, 9919, - 120528, 559, 128157, 41825, 127975, 74641, 4892, 74016, 194781, 6542, - 41957, 128865, 5777, 0, 759, 65749, 2079, 65248, 12788, 64487, 64552, - 93063, 10223, 42062, 0, 0, 74246, 3668, 65754, 43560, 12226, 67991, - 65149, 2340, 41959, 194786, 194785, 194788, 43618, 65747, 10937, 2962, 0, - 2321, 3587, 65745, 67236, 8921, 9952, 128941, 0, 42714, 9951, 43409, - 194770, 2949, 66012, 194775, 194774, 2958, 68359, 41820, 2300, 2395, - 120061, 9976, 120043, 120050, 71896, 68220, 128143, 42809, 42807, 70798, - 66290, 10198, 4150, 64371, 8318, 41790, 67976, 41898, 2360, 41794, - 917942, 70796, 92163, 93033, 0, 2418, 983098, 2411, 11336, 799, 63823, - 10276, 10308, 10372, 917541, 41772, 42813, 2317, 10260, 118980, 55284, - 78686, 0, 10384, 983220, 0, 129111, 7753, 2351, 6655, 64489, 69931, - 70199, 77872, 4443, 42779, 230, 0, 128969, 43549, 4855, 42150, 65739, - 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 78198, 2049, - 10098, 0, 74145, 127943, 10264, 10280, 9184, 10376, 7013, 4467, 78684, 0, - 0, 41887, 0, 4862, 9735, 6537, 120591, 74286, 3914, 92178, 93976, 9065, - 12961, 0, 0, 92253, 0, 289, 128714, 4694, 11420, 4690, 0, 120514, 917978, - 4693, 73893, 42724, 69977, 4688, 120454, 0, 0, 67994, 8238, 3110, 120162, - 3565, 120163, 6528, 127553, 43035, 69898, 218, 983850, 1520, 0, 4786, - 983168, 43225, 4602, 917982, 78167, 10088, 6548, 0, 120156, 43978, 8988, - 8888, 92724, 74812, 69709, 0, 10666, 0, 73902, 69740, 127793, 0, 9975, - 113704, 119902, 4689, 8932, 0, 65560, 119209, 74441, 78810, 0, 0, 67987, - 0, 128828, 0, 67989, 119029, 10065, 8207, 71900, 92613, 128011, 0, 662, - 0, 9244, 194863, 0, 119261, 983428, 0, 0, 0, 41929, 0, 71084, 66674, - 41926, 69994, 120443, 10513, 64637, 194862, 68013, 52, 13118, 6475, 0, - 120341, 12095, 10225, 4812, 92578, 128486, 67992, 74085, 0, 3978, 128425, - 917945, 74015, 11582, 92768, 12281, 0, 6544, 13241, 93961, 69782, 128557, - 194860, 11765, 65258, 10369, 0, 1585, 7192, 10249, 422, 1500, 2036, 986, - 194859, 64394, 5781, 5599, 64294, 2494, 120450, 4861, 74021, 64334, - 78203, 127808, 0, 92266, 65102, 8961, 65842, 10243, 10245, 71907, 120410, - 0, 120453, 64821, 9478, 2508, 92683, 0, 202, 128246, 74131, 1242, 65514, - 128913, 63940, 127118, 64533, 71883, 120446, 67842, 11990, 92405, 63939, - 43375, 65440, 2504, 0, 78671, 64829, 93020, 6943, 917934, 5859, 0, 2858, - 983361, 74294, 983914, 69239, 0, 67871, 12992, 2753, 1936, 70078, 67701, - 2751, 12662, 2763, 8953, 64701, 10731, 12922, 7052, 917839, 66424, 63992, - 0, 63920, 74128, 2856, 119910, 47, 69908, 71053, 65858, 0, 0, 0, 7899, 0, - 8417, 43798, 7072, 0, 0, 4033, 128164, 43992, 0, 0, 212, 64600, 1903, - 12320, 0, 125002, 194563, 0, 8915, 2759, 945, 6689, 93064, 0, 0, 118798, - 1291, 74828, 0, 0, 9531, 13155, 8505, 68379, 12062, 128198, 0, 65487, - 92189, 41837, 120611, 8246, 0, 93066, 0, 120433, 0, 63935, 73962, 120806, - 64787, 43524, 0, 64426, 0, 194948, 0, 0, 65664, 6693, 9843, 0, 8674, - 119887, 128812, 92715, 70788, 1320, 0, 1673, 4811, 92383, 5986, 9338, - 3046, 74480, 5985, 917928, 119598, 9820, 119892, 12187, 983841, 71041, - 5984, 0, 43308, 4393, 67650, 983227, 0, 125112, 0, 74826, 64733, 0, - 127898, 3491, 67146, 983710, 128219, 3514, 65485, 72428, 7492, 0, 74605, - 92483, 7514, 983367, 0, 194731, 7502, 7587, 68353, 63921, 0, 63925, 0, - 7610, 219, 0, 78722, 692, 43588, 68485, 41635, 43241, 9688, 7147, 9535, - 0, 93991, 0, 64530, 0, 64610, 11804, 0, 7149, 7453, 0, 8013, 0, 92301, 0, - 8895, 5253, 70025, 5458, 0, 2866, 129045, 127860, 11098, 68433, 6700, - 120484, 0, 120583, 0, 8962, 77960, 9641, 43694, 7059, 983677, 63997, - 9604, 78700, 7441, 63826, 67970, 118941, 64392, 92626, 983687, 2844, - 74610, 41974, 67397, 12139, 67971, 0, 0, 3358, 65295, 0, 3104, 194734, 0, - 194765, 983233, 5308, 0, 290, 0, 0, 2862, 2792, 195088, 92963, 0, 3268, - 66591, 0, 6552, 42367, 7035, 120558, 0, 0, 1814, 128572, 10240, 66285, - 74305, 128382, 74528, 65903, 0, 42646, 7606, 2591, 2837, 4341, 43513, - 64482, 127337, 8163, 65270, 0, 77932, 0, 9112, 74431, 863, 9490, 119898, - 128349, 43323, 120513, 119897, 9071, 127333, 0, 3654, 7789, 9637, 0, - 2535, 65504, 7653, 40993, 119899, 66587, 124987, 0, 92401, 983894, 11006, - 12927, 7807, 8073, 0, 10629, 127869, 74088, 3056, 10823, 128797, 113762, - 8762, 10508, 69689, 73770, 43969, 43193, 10737, 3463, 983065, 0, 66633, - 8695, 4815, 11322, 5811, 12345, 7049, 118811, 5195, 195081, 0, 66639, - 92939, 0, 0, 128041, 67903, 67739, 1262, 120165, 6561, 19939, 0, 0, - 128535, 119906, 0, 0, 983097, 0, 983667, 119907, 64612, 11991, 0, 0, - 92943, 1502, 917568, 127988, 9107, 127316, 5702, 3655, 67661, 8430, 0, - 71223, 120758, 0, 74057, 9603, 128079, 5254, 120742, 7724, 74388, 68375, - 10796, 5129, 0, 70816, 590, 7579, 5614, 5893, 92280, 11720, 92496, 11721, - 70804, 4798, 0, 119316, 66038, 4793, 67851, 11726, 127541, 74204, 68610, - 0, 68626, 894, 300, 917813, 12306, 66235, 8004, 0, 195056, 2562, 70156, - 0, 42503, 128864, 11652, 0, 0, 119241, 64699, 126569, 5096, 5095, 2863, - 3424, 92244, 10454, 42530, 5094, 70873, 0, 13156, 129057, 10832, 5093, 0, - 69852, 72430, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104, 78599, - 78601, 1215, 42712, 5744, 12272, 9832, 11777, 71299, 127371, 42881, 0, - 8980, 118988, 67861, 8844, 7209, 0, 0, 4278, 128809, 0, 127947, 70821, - 9074, 4348, 0, 65558, 65946, 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, - 71345, 586, 74414, 64359, 1267, 128269, 65468, 0, 65731, 0, 72405, 3621, - 92932, 66666, 64211, 0, 6562, 12928, 983891, 1228, 65490, 11383, 0, 0, - 70343, 1714, 74406, 120751, 0, 983921, 0, 66225, 128608, 70867, 42660, - 11436, 2070, 64, 120694, 0, 10291, 10323, 2826, 113809, 917629, 0, 42008, - 9708, 42710, 0, 42011, 41999, 92164, 12206, 5839, 1702, 1240, 74065, - 6286, 9689, 983969, 65833, 77848, 0, 1765, 0, 0, 65588, 0, 0, 0, 8401, - 983924, 42014, 0, 7030, 194704, 10479, 64959, 2852, 0, 0, 0, 70819, - 128586, 917951, 6963, 0, 12667, 64540, 74786, 10147, 12935, 127568, - 126483, 127782, 0, 0, 78757, 0, 113815, 128968, 0, 9994, 12467, 2864, - 64719, 1148, 10435, 11462, 41675, 7084, 2765, 78466, 43382, 0, 120719, - 128188, 92516, 66662, 0, 78133, 9364, 194685, 74416, 127797, 0, 77988, - 263, 10449, 41288, 0, 41839, 78387, 983742, 77986, 129140, 6931, 69722, - 64355, 7177, 70105, 0, 0, 0, 4262, 10285, 10722, 42020, 126575, 6806, - 6992, 42019, 0, 41290, 983716, 750, 0, 71304, 10163, 63913, 71300, 7032, - 5954, 64931, 4314, 128600, 198, 68453, 730, 120094, 63907, 77993, 70818, - 13165, 7107, 74171, 42804, 678, 8240, 78015, 128784, 41378, 11008, 6938, - 70026, 92637, 2097, 66246, 120560, 70823, 194990, 983604, 3892, 68632, - 69642, 6712, 66045, 41470, 64805, 0, 983213, 128215, 64801, 0, 497, - 12100, 5953, 92667, 7796, 69669, 43254, 73831, 0, 10293, 5952, 1281, - 43747, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 92603, 3425, 127488, 0, - 2836, 0, 0, 9707, 113718, 43202, 0, 0, 65199, 1738, 128311, 67707, 2832, - 92702, 9670, 11101, 0, 66374, 917956, 0, 2822, 68122, 4436, 92519, - 983081, 73752, 0, 64872, 92340, 1331, 0, 0, 0, 12708, 917954, 5090, 5089, - 127977, 983561, 119109, 0, 70826, 319, 118847, 43479, 9477, 0, 0, 5087, - 92325, 7640, 96, 5086, 0, 92379, 0, 5085, 64286, 92665, 113717, 41422, - 119617, 119901, 42356, 3772, 119042, 0, 5011, 0, 0, 126587, 0, 127165, - 127241, 6677, 7601, 0, 591, 64419, 118953, 92262, 0, 70799, 70084, 0, - 10939, 6106, 6933, 41271, 6760, 71343, 4534, 41270, 128876, 67138, 65574, - 194947, 9224, 67140, 3671, 8976, 67139, 0, 41275, 6372, 128084, 55261, - 7963, 6371, 0, 568, 92368, 41273, 983730, 74531, 6728, 0, 9715, 0, 8258, - 11753, 74820, 0, 9602, 118919, 42, 11191, 43688, 68243, 0, 7458, 0, 0, - 65385, 67135, 67134, 11958, 11165, 917822, 125087, 6254, 42721, 66336, - 8045, 11550, 0, 67132, 67131, 42858, 11789, 65868, 5557, 10133, 9737, - 13109, 0, 9467, 5558, 8878, 43844, 195036, 7451, 6706, 10146, 0, 9086, - 64566, 0, 64584, 7437, 7454, 12594, 73749, 68362, 4546, 7731, 0, 70048, - 74243, 125092, 3805, 0, 67128, 44001, 41008, 128052, 6307, 19949, 67129, - 7544, 983045, 43469, 0, 0, 10152, 64422, 65091, 67124, 7602, 64729, 0, - 43521, 0, 42302, 43711, 43523, 41447, 5559, 68483, 8704, 2397, 5556, 0, - 0, 0, 9011, 9630, 11166, 0, 93998, 5506, 92498, 1911, 66652, 67686, 9961, - 8845, 66698, 68325, 10792, 8889, 0, 2098, 0, 64751, 128360, 66622, - 983122, 0, 74364, 113708, 129152, 983805, 42909, 7552, 128622, 0, 65384, - 7223, 4559, 93015, 1956, 43138, 7024, 65728, 43490, 1210, 195077, 65175, - 10184, 43140, 43654, 0, 0, 125045, 38, 8533, 66669, 119124, 983293, - 983792, 0, 4357, 0, 119837, 917863, 74233, 9967, 78884, 42860, 119838, - 10941, 65721, 6962, 0, 0, 113808, 0, 11014, 120126, 8942, 12000, 69224, - 92267, 128536, 11974, 67363, 42772, 42650, 11650, 5013, 92663, 126583, - 66210, 118914, 6613, 92476, 0, 11193, 983770, 0, 64714, 0, 70802, 12162, - 12120, 43476, 983766, 11024, 74811, 66228, 10563, 92954, 127196, 43522, - 2462, 92955, 1837, 125086, 63972, 6957, 0, 113820, 4952, 65718, 64405, - 5504, 65720, 65714, 65715, 65716, 0, 127005, 127119, 3109, 63975, 74028, - 127213, 8107, 67154, 1127, 455, 0, 63968, 127835, 3483, 119593, 1989, 0, - 69678, 9104, 3503, 65375, 68300, 6694, 42633, 1864, 0, 74306, 41446, - 2540, 7736, 917916, 74064, 128601, 10521, 70786, 42173, 9705, 74124, - 8604, 6955, 10916, 43684, 6149, 3887, 19956, 1411, 2824, 0, 10106, - 127862, 1403, 125053, 1347, 9631, 74444, 983753, 0, 92951, 0, 8640, 0, - 258, 1654, 0, 0, 0, 43314, 0, 0, 4042, 11478, 2873, 63977, 11522, 41668, - 8549, 10861, 128430, 63976, 70377, 68623, 67082, 67081, 41391, 67084, - 917903, 376, 6987, 9221, 0, 0, 8823, 128697, 12943, 65185, 41869, 12619, - 0, 10154, 983043, 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, 120620, - 0, 69791, 127161, 11916, 65016, 0, 69671, 42115, 983133, 12288, 78057, - 67080, 1493, 42111, 7553, 4097, 128199, 13080, 0, 65808, 6610, 6030, - 8059, 7508, 13131, 67074, 67073, 0, 8794, 41278, 41629, 12154, 128192, - 41277, 64658, 0, 64380, 6625, 42911, 19904, 0, 0, 71193, 65371, 7078, 0, - 833, 0, 6369, 0, 10979, 41953, 0, 41434, 6062, 0, 0, 19916, 6913, 933, - 1341, 9842, 6720, 65744, 71200, 983592, 128295, 0, 7405, 10105, 65810, 0, - 41632, 7493, 55290, 92890, 41622, 0, 0, 119556, 74584, 7632, 9716, 19954, - 9805, 5990, 900, 0, 63957, 119638, 0, 3612, 0, 64376, 93987, 5389, 92597, - 0, 65938, 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956, - 4403, 19962, 65559, 3299, 0, 917566, 119127, 9002, 0, 74372, 74236, 8478, - 7598, 546, 42469, 65569, 1918, 9542, 472, 7716, 10319, 10383, 6996, - 43077, 63952, 8425, 3602, 8328, 11764, 118894, 983750, 65065, 41183, - 12907, 10271, 10287, 684, 43525, 0, 2854, 119586, 4592, 65755, 983276, - 67120, 11963, 43620, 67117, 78249, 67123, 67122, 67121, 9881, 43115, - 65757, 3415, 69677, 67116, 8648, 128377, 6741, 43047, 917970, 13180, - 78077, 418, 120653, 64495, 10295, 10327, 10391, 41752, 66846, 8641, - 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849, 41751, 69776, 8941, - 983556, 4554, 66892, 9023, 11685, 0, 9928, 67109, 66865, 11437, 43741, - 67113, 67112, 63967, 983483, 41206, 12624, 9049, 41185, 43166, 0, 8159, - 92619, 11686, 78544, 65224, 4565, 4655, 119553, 129090, 92183, 64523, - 10343, 10407, 92764, 66671, 11466, 0, 128003, 42890, 74013, 12050, 68201, - 2860, 0, 0, 70828, 42792, 5743, 10424, 12065, 42872, 0, 92342, 67103, - 8875, 0, 67102, 67105, 7531, 12847, 2413, 118917, 67404, 962, 0, 12855, - 41196, 42564, 0, 1582, 983715, 5508, 0, 0, 0, 10801, 69876, 92354, - 119207, 7173, 496, 10439, 4313, 64607, 69638, 7860, 0, 906, 42793, 2842, - 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 92173, 64788, 127007, - 8054, 9174, 67087, 67086, 9964, 67096, 41611, 4642, 66574, 11556, 42512, - 0, 78857, 42089, 74613, 9008, 0, 126592, 195096, 42079, 917981, 77924, - 42513, 77927, 42842, 73985, 65285, 68338, 127003, 983702, 0, 194761, - 983590, 11335, 64069, 42093, 3920, 0, 0, 11110, 0, 4580, 41967, 129043, - 64384, 92167, 93984, 3021, 42004, 0, 983372, 42317, 41998, 0, 6946, - 194755, 92967, 0, 128193, 65204, 0, 68113, 42690, 9880, 42010, 74824, - 64589, 10111, 64875, 127880, 68399, 43998, 11360, 0, 74182, 128648, - 92633, 42149, 0, 68508, 917993, 64941, 77919, 120421, 128077, 0, 55247, - 4110, 66005, 6959, 10929, 42907, 0, 66703, 77921, 8617, 41982, 6025, - 69242, 983176, 194854, 125139, 0, 9597, 42099, 43172, 983376, 10117, - 983169, 92297, 41636, 194889, 73738, 120681, 8301, 0, 0, 187, 128237, - 65669, 128339, 4963, 0, 127517, 0, 8964, 65676, 7775, 0, 41948, 125003, - 0, 0, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 42663, 128210, - 41766, 119114, 65882, 78849, 41760, 1189, 905, 480, 10985, 41733, 67859, - 9629, 6742, 1745, 43625, 73835, 7888, 0, 3980, 70373, 42656, 41507, 8806, - 7023, 0, 74279, 9447, 78651, 7867, 69218, 6236, 983134, 0, 10505, 129135, - 12851, 118948, 348, 5474, 128843, 3103, 0, 41753, 71109, 128604, 0, - 78844, 78845, 41739, 78843, 42515, 10931, 41756, 43347, 42560, 5391, - 41746, 119147, 92591, 41259, 5561, 69930, 2691, 92941, 65553, 7933, 5562, - 69800, 128265, 41262, 128146, 64421, 74846, 41251, 0, 0, 3979, 71248, 0, - 68331, 917912, 0, 0, 0, 74633, 41266, 0, 66566, 128836, 10585, 65741, - 41737, 9574, 2666, 0, 41738, 831, 419, 13126, 10716, 0, 42822, 0, 6434, - 74857, 6939, 7766, 6432, 128106, 69932, 916, 769, 41742, 11968, 74805, - 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, 126537, 4497, 3754, 127056, - 120424, 9039, 0, 41776, 0, 8716, 1595, 41615, 0, 0, 74260, 74860, 42854, - 43219, 128709, 129083, 12185, 113810, 70072, 68355, 68357, 68421, 42856, - 8634, 0, 119988, 4209, 120702, 78046, 65879, 41538, 65612, 127543, 669, - 5679, 0, 69786, 92540, 0, 70445, 5678, 11821, 0, 6711, 460, 0, 0, 983461, - 70114, 120747, 0, 128412, 78050, 119022, 0, 983462, 983174, 7782, 9044, - 4974, 11760, 78494, 7577, 65711, 41912, 1216, 0, 127017, 5792, 0, 128319, - 78501, 0, 2933, 12244, 0, 5683, 917896, 0, 78119, 1549, 0, 0, 120398, - 5682, 6206, 8670, 10256, 5680, 69935, 10001, 67237, 69768, 1449, 10241, - 78290, 119587, 194891, 10552, 64342, 41922, 70330, 8584, 68030, 5567, - 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 983256, 128026, 0, 65708, - 65709, 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, 5942, 8468, - 120561, 10361, 10425, 65697, 65698, 65699, 0, 66598, 110592, 64664, - 10647, 78702, 78703, 78690, 457, 78502, 65701, 1934, 43006, 119903, 8802, - 78710, 65130, 11747, 78709, 6087, 78705, 78716, 41757, 78711, 8043, 8950, - 65694, 64485, 43534, 10457, 0, 11961, 78725, 66850, 78723, 78720, 78721, - 0, 65515, 9499, 10035, 13069, 71309, 0, 9889, 68184, 42806, 0, 7256, 0, - 983179, 1667, 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, - 8101, 3610, 68420, 41748, 4995, 955, 65907, 119208, 5350, 64339, 78306, - 64549, 10875, 125052, 5477, 65692, 0, 128532, 120397, 12896, 10456, - 68298, 0, 3874, 0, 0, 983619, 120331, 0, 113665, 65603, 0, 65687, 0, - 41038, 74009, 9207, 42239, 8536, 78740, 78324, 78726, 74432, 724, 0, - 1455, 78749, 7183, 64583, 78747, 68443, 4175, 78741, 43614, 69801, 939, - 0, 43520, 68613, 74569, 917958, 0, 70168, 78764, 78760, 10788, 6088, - 78759, 78755, 190, 0, 12593, 0, 8188, 64408, 0, 4417, 128615, 92261, - 6370, 125128, 7827, 68441, 6965, 128581, 128868, 13201, 128205, 69896, - 78868, 74382, 11841, 7918, 73988, 0, 113668, 917884, 1728, 0, 43764, 178, - 12972, 74620, 113671, 71103, 11168, 983381, 113672, 78327, 119904, 65690, - 0, 71107, 119054, 0, 9252, 917889, 4652, 68371, 0, 917891, 74070, 13065, - 9923, 10806, 0, 11763, 70016, 120688, 6723, 78187, 0, 6993, 71044, 0, - 8333, 0, 0, 11390, 0, 74464, 0, 92320, 74080, 983315, 69911, 11910, - 92559, 8278, 8963, 4034, 128560, 0, 65344, 120517, 41747, 0, 0, 8677, 0, - 12707, 9350, 66037, 128180, 8836, 12315, 12747, 8300, 194562, 0, 7491, - 8856, 71361, 0, 43150, 127768, 120404, 65389, 120402, 120403, 10813, - 2592, 12853, 43269, 7263, 120244, 6536, 120238, 71891, 65516, 12321, - 120391, 120388, 55287, 10007, 120246, 9588, 68494, 1596, 120383, 41994, - 65801, 128808, 6838, 3561, 0, 0, 10613, 6697, 12805, 41928, 40981, 10804, - 78409, 5006, 64328, 0, 9931, 0, 8825, 74555, 65940, 43259, 126586, 6107, - 0, 119177, 77941, 78401, 128641, 11783, 335, 120227, 64689, 438, 4510, - 5765, 8721, 119570, 119227, 6092, 12840, 43112, 8876, 120231, 8096, - 10284, 128515, 0, 0, 10380, 8733, 10316, 70121, 41602, 0, 92308, 74831, - 917901, 0, 68482, 65399, 0, 64591, 42405, 0, 120820, 843, 11541, 128326, - 70321, 2065, 41935, 74496, 41902, 0, 983304, 215, 41258, 77875, 43159, - 1953, 9579, 41938, 1256, 3910, 9407, 6242, 0, 983100, 41257, 41900, 8675, - 10700, 8805, 1742, 113722, 9333, 8202, 72399, 0, 983197, 127252, 0, - 73882, 499, 983049, 43467, 0, 43818, 0, 1712, 5932, 77845, 41762, 983104, - 0, 11967, 1775, 125006, 0, 11118, 0, 128009, 9458, 0, 6470, 9180, 120380, - 43176, 0, 0, 42782, 0, 124999, 983135, 128309, 73849, 120669, 9414, - 74647, 73782, 73969, 565, 42484, 5794, 201, 2662, 42292, 0, 8254, 0, - 10975, 43518, 120625, 74763, 1022, 4108, 3880, 74247, 0, 0, 92263, - 917980, 7507, 983118, 43149, 71059, 65031, 7961, 1636, 0, 65029, 65024, - 119099, 12473, 6534, 120633, 99, 98, 97, 68226, 67584, 4049, 74163, - 127065, 7090, 0, 7892, 917969, 10777, 917803, 65310, 65562, 66599, 66722, - 194955, 8039, 3363, 66594, 43434, 0, 71191, 12596, 66595, 42258, 42570, - 5593, 119148, 120711, 92425, 10100, 6061, 64854, 119, 118, 117, 116, - 12998, 122, 121, 120, 111, 110, 109, 108, 115, 114, 113, 112, 103, 102, - 101, 100, 107, 106, 105, 104, 6436, 73974, 534, 41212, 67713, 1536, - 64093, 73970, 77930, 127157, 0, 6020, 12716, 127112, 12744, 475, 120394, - 13266, 127813, 127111, 78842, 73926, 66291, 10645, 1212, 6543, 983307, - 8134, 128028, 2913, 73870, 127113, 1866, 983229, 71892, 0, 8923, 1645, - 12059, 66585, 71297, 3196, 72404, 194827, 5935, 1250, 127066, 8174, 9787, - 6733, 9859, 7916, 9861, 9860, 5258, 1882, 1892, 6731, 10882, 405, 11454, - 73911, 113787, 92529, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, - 12157, 0, 0, 0, 41172, 7855, 0, 0, 10480, 43258, 917819, 77936, 8264, - 12610, 983308, 645, 126616, 7609, 40973, 69943, 73833, 69948, 5824, 984, - 77918, 10688, 5851, 0, 7729, 73982, 120518, 0, 195086, 43369, 0, 128140, - 68415, 92644, 4538, 93978, 43141, 0, 983210, 74214, 73886, 67709, 917599, - 71918, 43005, 78448, 9552, 0, 70129, 129173, 12997, 0, 0, 0, 0, 2381, + 11516, 944, 67817, 3890, 12168, 1438, 67813, 68335, 70003, 41947, 1220, + 120828, 74946, 70854, 74058, 1571, 42630, 41949, 42805, 8270, 943, 564, + 0, 312, 41980, 983944, 128295, 70797, 8877, 269, 4429, 6272, 9617, 1460, + 6954, 78657, 41120, 65121, 10862, 6060, 41119, 41416, 74355, 4173, 0, + 82948, 0, 1906, 121169, 11532, 74073, 127338, 0, 1985, 6296, 9582, 75071, + 64287, 128406, 78115, 11428, 1730, 2457, 917808, 19918, 10469, 0, 68088, + 7703, 8840, 8035, 120711, 0, 92230, 983357, 6129, 128437, 78586, 128268, + 0, 7874, 8681, 119092, 11206, 13136, 0, 0, 70102, 63886, 70450, 9605, + 71308, 13220, 67348, 67354, 5514, 74960, 9228, 67349, 67356, 67346, 5240, + 9811, 10012, 3096, 0, 0, 74526, 66676, 65873, 0, 128179, 0, 9501, 120832, + 1272, 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 68759, + 70312, 195085, 68820, 12193, 70400, 127240, 121373, 0, 983355, 19935, + 120733, 92162, 68801, 127955, 83133, 93057, 5275, 120195, 128632, 8637, + 43682, 0, 3789, 63880, 11471, 43554, 65862, 11474, 66332, 66603, 68784, + 2426, 12042, 92194, 983911, 9537, 3961, 12115, 77953, 2605, 4500, 64561, + 55224, 4981, 74644, 0, 41646, 11667, 42686, 74991, 42362, 64686, 4499, + 41649, 7589, 128776, 0, 3237, 0, 66895, 68296, 8541, 78298, 70034, 41866, + 0, 983814, 94056, 11174, 69924, 43555, 2823, 9559, 10060, 41940, 8299, + 41945, 7132, 41941, 3308, 7190, 64880, 8614, 65220, 41493, 128679, 41699, + 10762, 43780, 12999, 119245, 128494, 8106, 4128, 0, 6274, 4494, 983082, + 4012, 10395, 983591, 43633, 65447, 78260, 120973, 11004, 695, 739, 696, + 7611, 121073, 42755, 74802, 9227, 7506, 7510, 69937, 691, 738, 7511, + 7512, 7515, 3868, 688, 41847, 690, 2548, 737, 974, 8003, 7406, 127353, + 120166, 128688, 3985, 66425, 65860, 41851, 7051, 69777, 4682, 71873, + 12809, 6406, 4685, 92505, 10879, 10347, 4680, 6341, 0, 3851, 8132, 74325, + 119263, 120855, 127948, 41958, 119176, 917908, 194855, 0, 42657, 71075, + 7643, 42373, 11714, 67587, 43568, 983175, 11717, 7650, 10594, 64951, + 7647, 7649, 128155, 7646, 0, 78082, 9651, 126475, 3891, 127205, 0, 2337, + 1735, 74324, 11134, 2363, 121008, 92443, 43561, 67706, 128032, 74146, + 1860, 7495, 7580, 5812, 7497, 7584, 119140, 127853, 78753, 120347, 7727, + 0, 8498, 69818, 8949, 3065, 42719, 7135, 1569, 92375, 12534, 12124, 7690, + 0, 12533, 983796, 6418, 4543, 78086, 6969, 128444, 74800, 71051, 67974, + 10859, 128650, 983801, 63894, 120760, 12282, 66192, 983583, 74592, 8850, + 74275, 9238, 10617, 68063, 917909, 92625, 917801, 12791, 0, 94069, + 127843, 4447, 71065, 12793, 12900, 92377, 10950, 983449, 74639, 12790, + 41400, 119128, 66607, 12792, 42232, 119239, 1744, 12789, 10366, 12317, + 41310, 120730, 41399, 0, 0, 55258, 0, 12690, 127763, 0, 43672, 127840, + 41652, 2974, 9010, 11315, 983808, 278, 121204, 41405, 43871, 0, 10077, + 63853, 74557, 42586, 0, 0, 6002, 67335, 43553, 11189, 67338, 67337, + 12787, 41308, 7934, 65306, 120263, 120940, 94042, 8646, 128257, 77829, + 71360, 0, 6413, 6550, 113759, 1940, 2809, 43637, 220, 65193, 43551, + 10678, 10044, 68841, 128121, 983816, 68290, 6403, 5707, 10393, 127532, 0, + 66614, 0, 0, 0, 10297, 0, 3742, 67331, 3959, 0, 120466, 0, 2467, 68806, + 6003, 63844, 6663, 8040, 983220, 43758, 4182, 78171, 4676, 120501, 9210, + 0, 2510, 0, 10208, 78168, 92361, 11540, 43546, 6692, 6837, 41060, 128018, + 4668, 9083, 0, 0, 78144, 1559, 63831, 9677, 67340, 67347, 65256, 67345, + 67344, 983352, 983266, 365, 12056, 43027, 120423, 41716, 128236, 67352, + 67351, 5516, 2845, 7717, 8036, 41717, 67353, 544, 12045, 6278, 74632, + 5515, 129186, 120884, 983051, 65339, 43221, 2211, 0, 5517, 70116, 74225, + 74841, 67884, 128414, 67890, 67885, 67880, 67881, 67882, 67883, 120199, + 118883, 67879, 127188, 1902, 67887, 9638, 12976, 126546, 12483, 12368, + 41769, 42726, 41765, 7361, 6667, 67874, 7556, 67878, 74351, 11264, 989, + 42677, 67889, 93040, 1311, 128949, 4326, 11000, 63824, 13068, 10932, + 128880, 6917, 78155, 120837, 949, 77882, 917968, 6148, 8605, 42253, + 78177, 66906, 0, 42715, 71432, 70282, 983373, 63871, 0, 41796, 1269, + 6530, 121414, 65057, 70493, 5144, 12221, 42716, 68299, 4431, 4331, + 983729, 128675, 41834, 5279, 121362, 10336, 8312, 0, 42701, 92959, 0, + 78165, 66036, 70166, 120937, 6428, 42270, 983726, 983596, 43059, 42666, + 5256, 1067, 255, 12131, 128742, 9493, 74990, 41014, 11793, 194920, + 121195, 74394, 43460, 10653, 42723, 983854, 119632, 70427, 6560, 7016, + 74274, 69986, 43556, 3929, 67977, 6614, 2768, 92504, 9746, 5135, 11811, + 12796, 11953, 0, 69761, 5139, 346, 74303, 6305, 12795, 4675, 5168, 78552, + 43845, 74315, 74361, 8253, 8817, 1136, 917931, 43563, 92232, 128914, + 66410, 7392, 8230, 9365, 71194, 127109, 983607, 66915, 128402, 4041, 0, + 2357, 43240, 12786, 229, 43834, 119884, 44004, 7142, 119881, 12350, + 65554, 119882, 71305, 119876, 12785, 63863, 43795, 7770, 10712, 64853, + 12686, 43831, 42375, 65780, 124944, 66352, 10470, 71119, 11059, 10791, + 917944, 450, 119328, 127254, 10432, 12097, 5450, 64691, 1233, 0, 44009, + 78284, 66338, 66395, 917832, 1839, 118799, 983219, 10927, 1701, 983664, + 2388, 41749, 41761, 5453, 8361, 119865, 895, 5444, 41763, 64889, 7143, + 92493, 78677, 983137, 92429, 69983, 66432, 8801, 3053, 4340, 983044, + 128013, 65812, 120675, 70001, 41824, 67985, 120203, 92600, 127053, 42700, + 194805, 127980, 194807, 78676, 92356, 194808, 127844, 0, 4493, 4336, + 129171, 2314, 43602, 78826, 119325, 194811, 42439, 64638, 42327, 43528, + 4489, 68750, 125116, 194793, 1912, 42385, 10306, 10370, 0, 194761, 8867, + 10250, 10258, 2712, 1635, 71064, 1410, 78763, 983252, 118878, 983567, + 128715, 9919, 120528, 559, 128157, 41825, 121274, 74641, 4892, 74016, + 121502, 6542, 41957, 128865, 5777, 127167, 759, 65749, 2079, 65248, + 12788, 64487, 64552, 93063, 10223, 42062, 121279, 0, 74246, 3668, 65754, + 43560, 12226, 67991, 65149, 2340, 41959, 71463, 194785, 194788, 43618, + 65747, 10937, 2962, 0, 2321, 3587, 65745, 67236, 8921, 9952, 128941, 0, + 42714, 9951, 43409, 194770, 2949, 66012, 194775, 194774, 2958, 68359, + 41820, 2300, 2395, 120061, 9976, 120043, 120050, 71896, 68220, 128143, + 42809, 42807, 70798, 66290, 10198, 4150, 64371, 8318, 41790, 67976, + 41898, 2360, 41794, 917942, 70796, 92163, 93033, 0, 2418, 983098, 2411, + 11336, 799, 63823, 10276, 10308, 10372, 917541, 41772, 42813, 2317, + 10260, 118980, 55284, 78686, 127177, 10384, 194794, 121147, 129111, 7753, + 2351, 6655, 64489, 69931, 70199, 77872, 4443, 42779, 230, 0, 68067, + 43549, 4855, 42150, 65739, 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, + 65045, 63839, 78198, 2049, 10098, 917779, 74145, 127943, 10264, 10280, + 9184, 10376, 7013, 4467, 78684, 917554, 92260, 41887, 0, 4862, 9735, + 6537, 120591, 74286, 3914, 92178, 68823, 9065, 12961, 0, 120456, 92253, + 128204, 289, 128714, 4694, 11420, 4690, 0, 120514, 917978, 4693, 73893, + 42724, 69977, 4688, 120454, 128507, 0, 67994, 8238, 3110, 120162, 3565, + 120163, 6528, 78387, 43035, 69898, 218, 983850, 1520, 0, 4786, 983168, + 43225, 4602, 92400, 78167, 10088, 6548, 121157, 120156, 43978, 8988, + 8888, 92724, 74812, 69709, 983967, 10666, 0, 73902, 69740, 121436, 0, + 9975, 113704, 119902, 4689, 8932, 0, 65560, 119209, 74441, 78810, 0, 0, + 67987, 0, 128828, 0, 67989, 119029, 10065, 8207, 71900, 92613, 128011, + 121028, 662, 128720, 9244, 194863, 83183, 119261, 983430, 0, 120901, + 917838, 41929, 0, 71084, 66674, 41926, 69994, 120443, 10513, 64637, + 194862, 68013, 52, 13118, 6475, 195004, 83479, 12095, 10225, 4812, 92578, + 128486, 67992, 74085, 0, 3978, 128425, 917945, 74015, 11582, 92768, + 12281, 127043, 6544, 13241, 93961, 69782, 125014, 194860, 11765, 65258, + 10369, 0, 1585, 7192, 10249, 422, 1500, 2036, 986, 194859, 64394, 5781, + 5599, 64294, 2494, 120450, 4861, 74021, 64334, 78203, 127808, 0, 83444, + 65102, 8961, 65842, 10243, 10245, 71907, 120410, 0, 120453, 64821, 9478, + 2508, 92683, 0, 202, 128246, 74131, 1242, 65514, 121170, 63940, 121363, + 64533, 71883, 120446, 67842, 11990, 92405, 63939, 43375, 65440, 2504, 0, + 78671, 64829, 93020, 6943, 917934, 5859, 0, 2858, 983363, 74294, 983914, + 69239, 0, 67871, 12992, 2753, 1936, 70078, 67701, 2751, 12662, 2763, + 8953, 64701, 10731, 12922, 7052, 917839, 66424, 63992, 0, 63920, 74128, + 2856, 119910, 47, 69908, 71053, 65858, 194806, 0, 67829, 7899, 0, 8417, + 43798, 7072, 74195, 0, 4033, 121289, 43992, 121081, 0, 212, 64600, 1903, + 12320, 83484, 120894, 194563, 0, 8915, 2759, 945, 6689, 93064, 0, 0, + 118798, 1291, 74828, 0, 120435, 9531, 13155, 8505, 68379, 12062, 128198, + 121216, 65487, 92189, 41837, 120611, 8246, 128874, 93066, 0, 120433, 0, + 63935, 73962, 120806, 64787, 43524, 0, 64426, 983092, 194948, 917866, + 917788, 65664, 6693, 9843, 0, 8674, 119887, 128812, 92715, 70788, 1320, + 121461, 1673, 4811, 92383, 5986, 9338, 3046, 74480, 5985, 917928, 119598, + 9820, 119892, 12187, 983841, 71041, 5984, 0, 43308, 4393, 67650, 983227, + 0, 74822, 0, 74826, 64733, 983214, 127898, 3491, 67146, 121142, 128219, + 3514, 65485, 72428, 7492, 128860, 74605, 92483, 7514, 983369, 126585, + 194731, 7502, 7587, 68353, 63921, 121178, 63925, 120161, 7610, 219, + 128158, 78722, 692, 43588, 68485, 41635, 43241, 9688, 7147, 9535, 0, + 93991, 0, 64530, 0, 64610, 11804, 0, 7149, 7453, 0, 8013, 66396, 92301, + 0, 8895, 5253, 70025, 5458, 917629, 2866, 129045, 127860, 11098, 68433, + 6700, 120484, 0, 120583, 194824, 8962, 77960, 9641, 43694, 7059, 983677, + 63997, 9604, 78700, 7441, 63826, 67970, 83435, 64392, 92626, 983687, + 2844, 74610, 41974, 67397, 12139, 67971, 0, 0, 3358, 65295, 983899, 3104, + 194734, 0, 121304, 983235, 5308, 83434, 290, 0, 121338, 2862, 2792, + 195088, 92963, 77984, 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, + 1814, 78464, 10240, 66285, 74305, 128382, 74528, 65903, 71454, 42646, + 7606, 2591, 2837, 4341, 43513, 64482, 92524, 8163, 65270, 0, 77932, 0, + 9112, 74431, 863, 9490, 75037, 128349, 43323, 120513, 119897, 9071, + 68054, 0, 3654, 7789, 9637, 121136, 2535, 65504, 7653, 40993, 92415, + 66587, 124987, 0, 92401, 43927, 11006, 12927, 7807, 8073, 120980, 10629, + 127869, 74088, 3056, 10823, 127267, 92391, 8762, 10508, 69689, 73770, + 43969, 43193, 10737, 3463, 120975, 983351, 66633, 8695, 4815, 11322, + 5811, 12345, 7049, 118811, 5195, 195081, 0, 66639, 92939, 0, 0, 128041, + 67903, 67739, 1262, 120165, 6561, 19939, 128673, 0, 127318, 119906, + 70300, 0, 983097, 0, 983667, 119907, 64612, 11991, 120654, 0, 92943, + 1502, 917568, 127988, 9107, 127316, 5702, 3655, 67661, 8430, 0, 71223, + 120758, 0, 74057, 9603, 128079, 5254, 120742, 7724, 74388, 68375, 10796, + 5129, 0, 70816, 590, 7579, 5614, 5893, 92280, 11720, 92496, 11721, 70804, + 4798, 121468, 119316, 66038, 4793, 67851, 11726, 127541, 74204, 68610, + 68824, 68626, 894, 300, 120875, 12306, 66235, 8004, 0, 119574, 2562, + 70156, 120856, 42503, 92900, 11652, 917813, 917799, 119241, 64699, + 126569, 5096, 5095, 2863, 3424, 92244, 10454, 42530, 5094, 70873, 0, + 13156, 129057, 10832, 5093, 0, 69852, 72430, 5092, 10708, 11327, 0, 5091, + 176, 0, 9153, 4104, 78599, 78601, 1215, 42712, 5744, 12272, 9832, 11777, + 71299, 66817, 42881, 0, 8980, 118988, 67861, 8844, 7209, 0, 0, 4278, + 128809, 0, 119160, 70821, 9074, 4348, 0, 65558, 65946, 8113, 7087, 5255, + 1786, 661, 128116, 0, 917925, 74423, 71345, 586, 74414, 64359, 1267, + 128269, 65468, 194966, 65731, 0, 72405, 3621, 92932, 66666, 64211, 0, + 6562, 12928, 194904, 1228, 65490, 11383, 0, 127953, 70343, 1714, 74406, + 120751, 0, 121113, 983976, 66225, 70110, 70867, 42660, 11436, 2070, 64, + 120694, 121025, 10291, 10323, 2826, 113809, 126510, 0, 42008, 9708, + 42710, 0, 42011, 41999, 92164, 12206, 5839, 1702, 1240, 74065, 6286, + 9689, 983969, 65833, 77848, 0, 1765, 0, 128622, 65588, 92350, 983281, 0, + 8401, 983924, 42014, 127307, 7030, 120969, 10479, 64959, 2852, 0, 121225, + 0, 70819, 128586, 917951, 6963, 126704, 12667, 64540, 74786, 10147, + 12935, 127568, 126483, 121281, 0, 0, 78757, 0, 113815, 121302, 0, 9994, + 12467, 2864, 64719, 1148, 10435, 11462, 41675, 7084, 2765, 78466, 43382, + 0, 120719, 128188, 92516, 66662, 0, 78133, 9364, 194685, 74416, 127797, + 0, 77988, 263, 10449, 41288, 0, 41839, 78385, 983742, 70313, 129140, + 6931, 69722, 43261, 7177, 70105, 92652, 0, 0, 4262, 10285, 10722, 42020, + 126575, 6806, 6992, 42019, 0, 41290, 983716, 750, 0, 71304, 10163, 63913, + 71300, 7032, 5954, 64931, 4314, 128600, 198, 68453, 730, 120094, 63907, + 77993, 70818, 13165, 7107, 74171, 42804, 678, 8240, 78015, 125005, 41378, + 11008, 6938, 70026, 92637, 2097, 66246, 120560, 70823, 194990, 983604, + 3892, 68632, 69642, 6712, 66045, 41470, 64805, 0, 983213, 126511, 64801, + 127818, 497, 12100, 5953, 92667, 7796, 69669, 43254, 73831, 0, 10293, + 5952, 1281, 43747, 0, 121399, 10677, 604, 41097, 9182, 1859, 0, 92603, + 3425, 127488, 126523, 2836, 983738, 0, 9707, 113718, 43202, 0, 0, 65199, + 1738, 128311, 67707, 2832, 92702, 9670, 11101, 0, 66374, 917956, 119552, + 2822, 68122, 4436, 92519, 983081, 73752, 70305, 64872, 92340, 1331, 0, 0, + 121377, 12708, 917954, 5090, 5089, 127977, 917953, 119109, 0, 70826, 319, + 118847, 43479, 9477, 0, 0, 5087, 74886, 7640, 96, 5086, 983597, 92379, 0, + 5085, 64286, 92665, 113717, 41422, 119617, 119901, 42356, 3772, 119042, + 0, 5011, 0, 983329, 126587, 0, 120698, 118874, 6677, 7601, 0, 591, 64419, + 118953, 92262, 118895, 70799, 70084, 0, 10939, 6106, 6933, 41271, 6760, + 71343, 4534, 41270, 128876, 67138, 65574, 194947, 9224, 67140, 3671, + 8976, 67139, 0, 41275, 6372, 82997, 55261, 7963, 6371, 0, 568, 92368, + 41273, 121448, 74531, 6728, 0, 9715, 129297, 8258, 11753, 74820, 0, 9602, + 118919, 42, 11191, 43688, 68243, 0, 7458, 0, 0, 65385, 67135, 67134, + 11958, 11165, 917822, 125087, 6254, 42721, 66336, 8045, 11550, 195064, + 67132, 67131, 42858, 11789, 65868, 5557, 10133, 9737, 13109, 0, 9467, + 5558, 8878, 43844, 195036, 7451, 6706, 10146, 0, 9086, 64566, 983185, + 64584, 7437, 7454, 12594, 73749, 68362, 4546, 7731, 0, 70048, 74243, + 125092, 3805, 0, 67128, 44001, 41008, 128052, 6307, 19949, 67129, 7544, + 124989, 43469, 121095, 983735, 10152, 64422, 65091, 67124, 7602, 64729, + 0, 43521, 0, 42302, 43711, 43523, 41447, 5559, 68483, 8704, 2397, 5556, + 0, 0, 0, 9011, 9630, 11166, 0, 93998, 5506, 92498, 1911, 66652, 67686, + 9961, 8845, 66698, 68325, 10792, 8889, 121402, 2098, 0, 64751, 70309, + 66622, 126626, 0, 74364, 68816, 129152, 983805, 42909, 7552, 70092, + 194567, 65384, 7223, 4559, 93015, 1956, 43138, 7024, 65728, 43490, 1210, + 195077, 65175, 10184, 43140, 43654, 0, 983233, 125045, 38, 8533, 66669, + 119124, 983295, 983792, 0, 4357, 0, 70289, 917863, 74233, 9967, 78884, + 42860, 119838, 10941, 65721, 6962, 0, 83279, 113808, 0, 11014, 120126, + 8942, 12000, 69224, 92267, 128536, 11974, 67363, 42772, 42650, 11650, + 5013, 92663, 68810, 66210, 118914, 6613, 92476, 0, 11193, 983770, 0, + 64714, 71479, 70802, 12162, 12120, 43476, 983766, 11024, 74811, 66228, + 10563, 92954, 127196, 43522, 2462, 92955, 1837, 125086, 63972, 6957, 0, + 113820, 4952, 65718, 64405, 5504, 65720, 65714, 65715, 65716, 128026, + 75016, 127119, 3109, 63975, 74028, 127213, 8107, 67154, 1127, 455, 0, + 63968, 127835, 3483, 119593, 1989, 983176, 69678, 9104, 3503, 65375, + 68300, 6694, 42633, 1864, 0, 74306, 41446, 2540, 7736, 121434, 74064, + 128601, 10521, 70786, 42173, 9705, 74124, 8604, 6955, 10916, 43684, 6149, + 3887, 19956, 1411, 2824, 0, 10106, 127862, 1403, 125053, 1347, 9631, + 74444, 983753, 127997, 92951, 74897, 8640, 0, 258, 1654, 0, 0, 983479, + 43314, 0, 0, 4042, 11478, 2873, 63977, 11522, 41668, 8549, 10861, 121053, + 63976, 70377, 68623, 67082, 67081, 41391, 67084, 83465, 376, 6987, 9221, + 0, 0, 8823, 128697, 12943, 65185, 41869, 12619, 128067, 10154, 983043, + 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, 120620, 82950, 69791, + 127161, 11916, 65016, 0, 69671, 42115, 121057, 12288, 78057, 67080, 1493, + 42111, 7553, 4097, 128199, 13080, 0, 65808, 6610, 6030, 8059, 7508, + 13131, 67074, 67073, 128506, 8794, 41278, 41629, 12154, 75073, 41277, + 64658, 983456, 64380, 6625, 42911, 19904, 0, 121305, 71193, 65371, 7078, + 128699, 833, 128228, 6369, 194815, 10979, 41953, 983370, 41434, 6062, 0, + 0, 19916, 6913, 933, 1341, 9842, 6720, 65744, 71200, 983592, 121223, + 126567, 7405, 10105, 65810, 0, 41632, 7493, 55290, 92890, 41622, 0, 0, + 119556, 74584, 7632, 9716, 19954, 9805, 5990, 900, 0, 63957, 119638, 0, + 3612, 0, 64376, 93987, 5389, 92597, 0, 65938, 2839, 9621, 582, 0, 74368, + 3749, 6949, 7569, 74061, 83222, 83223, 6956, 4403, 19962, 65559, 3299, + 121005, 194939, 119127, 9002, 0, 74372, 74236, 8478, 7598, 546, 42469, + 65569, 1918, 9542, 472, 7716, 10319, 10383, 6996, 43077, 63952, 8425, + 3602, 8328, 11764, 83199, 83200, 65065, 41183, 12907, 10271, 10287, 684, + 43525, 127996, 2854, 83214, 4592, 65755, 83217, 67120, 11963, 43620, + 67117, 78249, 67123, 67122, 67121, 9881, 43115, 65757, 3415, 69677, + 67116, 8648, 128377, 6741, 43047, 119900, 13180, 78077, 418, 120653, + 64495, 10295, 10327, 10391, 41752, 66846, 8641, 41449, 83194, 74100, + 83186, 10911, 6942, 120879, 1024, 42849, 41751, 69776, 8941, 983556, + 4554, 66892, 9023, 11685, 121476, 9928, 67109, 66865, 11437, 43741, + 67113, 67112, 63967, 129056, 41206, 12624, 9049, 41185, 43166, 121275, + 8159, 92619, 11686, 71478, 65224, 4565, 4655, 119553, 129090, 92183, + 64523, 10343, 10407, 92764, 66671, 11466, 0, 128003, 42890, 74013, 12050, + 68201, 2860, 0, 127934, 70828, 42792, 5743, 10424, 12065, 42872, 121401, + 43875, 67103, 8875, 0, 67102, 67105, 7531, 12847, 2413, 118917, 67404, + 962, 0, 12855, 41196, 42564, 127975, 1582, 983715, 5508, 0, 120904, + 74588, 10801, 69876, 92354, 119207, 7173, 496, 10439, 4313, 64607, 69638, + 7860, 128049, 906, 42793, 2842, 6405, 64722, 13132, 798, 64694, 12801, + 8406, 1153, 83263, 64788, 83265, 8054, 9174, 67087, 67086, 9964, 67096, + 41611, 4642, 66574, 11556, 42512, 0, 78857, 42089, 74613, 9008, 0, + 126592, 195096, 42079, 83248, 77924, 42513, 77927, 42842, 73985, 65285, + 68338, 83239, 83240, 83241, 83242, 983590, 11335, 64069, 42093, 3920, + 917869, 0, 11110, 83255, 4580, 41967, 83258, 64384, 83252, 83253, 3021, + 42004, 983096, 83249, 42317, 41998, 0, 6946, 194755, 92967, 128455, + 128193, 65204, 0, 68113, 42690, 9880, 42010, 74824, 64589, 10111, 64875, + 127880, 68035, 43998, 11360, 83233, 74182, 83235, 83228, 42149, 83230, + 68508, 917993, 64941, 77919, 120421, 128077, 74885, 55247, 4110, 66005, + 6959, 10929, 42907, 128080, 66703, 77921, 8617, 41982, 6025, 69242, + 121068, 194854, 125139, 0, 9597, 42099, 43172, 983378, 10117, 983169, + 92297, 41636, 194889, 73738, 120681, 8301, 0, 0, 187, 128237, 65669, + 128339, 4963, 0, 68765, 0, 8964, 65676, 7775, 983849, 41948, 125003, 0, + 83236, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 42663, 120616, + 41766, 74948, 65882, 78849, 41760, 1189, 905, 480, 10985, 41733, 67859, + 9629, 6742, 1745, 43625, 73835, 7888, 83405, 3980, 70373, 42656, 41507, + 8806, 7023, 0, 74279, 9447, 78651, 7867, 69218, 6236, 127162, 0, 10505, + 126638, 12851, 83489, 348, 5474, 121382, 3103, 0, 41753, 71109, 128604, + 0, 78844, 78845, 41739, 78843, 42515, 10931, 41756, 43347, 42560, 5391, + 41746, 119147, 92591, 41259, 5561, 69930, 2691, 68752, 65553, 7933, 5562, + 69800, 128265, 41262, 128146, 64421, 74846, 41251, 127242, 0, 3979, + 71248, 194899, 68331, 917912, 68847, 983697, 83382, 74633, 41266, 68836, + 66566, 128836, 10585, 65741, 41737, 2275, 2666, 121232, 41738, 831, 419, + 13126, 10716, 83400, 42822, 0, 6434, 74857, 6939, 7766, 6432, 128106, + 69932, 916, 769, 41742, 11968, 74805, 6433, 5563, 547, 1943, 6439, 5560, + 4994, 487, 126537, 4497, 3754, 83072, 83105, 9039, 0, 41776, 0, 8716, + 1595, 41615, 121001, 0, 74260, 74860, 42854, 43219, 83311, 121107, 12185, + 113810, 70072, 68355, 68357, 68421, 42856, 8634, 0, 119988, 4209, 75057, + 68832, 65879, 41538, 65612, 68822, 669, 5679, 68813, 68815, 68811, 68812, + 68804, 5678, 11821, 68802, 6711, 460, 121513, 0, 983463, 70114, 120747, + 194718, 121519, 78050, 119022, 0, 121515, 121514, 7782, 9044, 4974, + 11760, 78494, 7577, 65711, 41912, 1216, 0, 127017, 5792, 126643, 128319, + 78501, 0, 2933, 12244, 983702, 5683, 917896, 120895, 78119, 1549, 0, + 983223, 120398, 5682, 6206, 8670, 10256, 5680, 69935, 10001, 67237, + 69768, 1449, 10241, 78290, 119587, 194891, 10552, 64342, 41922, 70330, + 8584, 68030, 5567, 2717, 83179, 71448, 5564, 42886, 41908, 42882, 5565, + 917611, 120881, 0, 65708, 65709, 5566, 69803, 65704, 65705, 11904, 42875, + 43373, 42539, 5942, 8468, 120561, 10361, 10425, 65697, 65698, 65699, + 68052, 66598, 110592, 64664, 10647, 78702, 78703, 78690, 457, 78502, + 65701, 1934, 43006, 83280, 8802, 78710, 65130, 11747, 78709, 6087, 78705, + 78716, 41757, 78711, 8043, 8950, 65694, 64485, 43534, 10457, 0, 11961, + 78725, 66850, 78723, 78720, 78721, 127899, 65515, 9499, 10035, 13069, + 71309, 0, 9889, 68184, 42806, 125061, 7256, 0, 68094, 1667, 42161, + 120981, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, 8101, 3610, + 68420, 41748, 4995, 955, 65907, 119208, 5350, 64339, 78306, 64549, 10875, + 125052, 5477, 65692, 0, 128532, 120397, 12896, 10456, 68298, 0, 3874, 0, + 0, 983619, 120331, 128773, 113665, 65603, 83272, 65687, 0, 41038, 74009, + 9207, 42239, 8536, 78740, 78324, 78726, 74432, 724, 83058, 1455, 78749, + 7183, 64583, 78747, 68443, 4175, 78741, 43614, 69801, 939, 75021, 43520, + 68613, 74569, 917958, 0, 70168, 78764, 78760, 10788, 6088, 78759, 78755, + 190, 119899, 12593, 0, 8188, 64408, 0, 4417, 121303, 92261, 6370, 125128, + 7827, 68441, 6965, 128581, 128868, 13201, 128205, 69896, 78868, 74382, + 11841, 7918, 73988, 0, 113668, 917884, 1728, 983705, 43764, 178, 12972, + 74620, 113671, 71103, 11168, 983383, 113672, 78327, 75042, 65690, 8382, + 71107, 119054, 194968, 9252, 917889, 4652, 68371, 0, 121327, 74070, + 13065, 9923, 10806, 194596, 11763, 70016, 120688, 6723, 78187, 0, 6993, + 71044, 121312, 8333, 121329, 0, 11390, 0, 74464, 0, 92320, 74080, 983317, + 69911, 11910, 92559, 8278, 8963, 4034, 128560, 983113, 65344, 120517, + 41747, 0, 128110, 8677, 0, 12707, 9350, 66037, 128180, 8836, 12315, + 12747, 8300, 194562, 124984, 7491, 8856, 71361, 0, 43150, 127768, 120404, + 65389, 120402, 120403, 10813, 2592, 12853, 43269, 7263, 83308, 6536, + 120238, 71891, 65516, 12321, 120391, 120388, 55287, 10007, 120246, 9588, + 68494, 1596, 120383, 41994, 65801, 128808, 6838, 3561, 119867, 0, 10613, + 6697, 12805, 41928, 40981, 10804, 78409, 5006, 64328, 0, 9931, 0, 8825, + 74555, 65940, 43259, 126586, 6107, 83455, 119177, 77941, 78401, 119270, + 11783, 335, 120227, 64689, 438, 4510, 5765, 8721, 119570, 119227, 6092, + 12840, 43112, 8876, 120231, 8096, 10284, 120935, 0, 0, 10380, 8733, + 10316, 70121, 41602, 917575, 92308, 74831, 93984, 0, 68482, 65399, + 917820, 64591, 42405, 83466, 120820, 843, 11541, 128326, 70321, 2065, + 41935, 74496, 41902, 0, 983306, 215, 41258, 77875, 43159, 1953, 9579, + 41938, 1256, 3910, 9407, 6242, 0, 83464, 41257, 41900, 8675, 10700, 8805, + 1742, 113722, 9333, 8202, 72399, 0, 983197, 127252, 0, 73882, 499, + 983049, 43467, 0, 43818, 83482, 1712, 5932, 77845, 41762, 983103, 0, + 11967, 1775, 125006, 75009, 11118, 121391, 128009, 9458, 92935, 6470, + 9180, 120380, 43176, 128307, 0, 42782, 0, 124999, 983135, 128309, 73849, + 120669, 9414, 74647, 73782, 73969, 565, 42484, 5794, 201, 2662, 42292, + 194870, 8254, 0, 10975, 43518, 120625, 74763, 1022, 4108, 3880, 74247, + 127153, 0, 92263, 917980, 7507, 983118, 43149, 71059, 65031, 7961, 1636, + 0, 65029, 65024, 119099, 12473, 6534, 120633, 99, 98, 97, 68226, 67584, + 4049, 74163, 127065, 7090, 83274, 7892, 127064, 10777, 917803, 65310, + 65562, 66599, 66722, 194955, 8039, 3363, 66594, 43434, 127062, 71191, + 12596, 66595, 42258, 42570, 5593, 119148, 120534, 92425, 10100, 6061, + 64854, 119, 118, 117, 116, 12998, 122, 121, 120, 111, 110, 109, 108, 115, + 114, 113, 112, 103, 102, 101, 100, 107, 106, 105, 104, 6436, 73974, 534, + 41212, 67713, 1536, 64093, 73970, 77930, 121093, 0, 6020, 12716, 127112, + 12744, 475, 120394, 13266, 127813, 127111, 78842, 73926, 66291, 10645, + 1212, 6543, 983309, 8134, 42935, 2913, 73870, 127113, 1866, 983229, + 71892, 120996, 8923, 1645, 12059, 66585, 71297, 3196, 72404, 194827, + 5935, 1250, 127066, 8174, 9787, 6733, 9859, 7916, 9861, 9860, 5258, 1882, + 1892, 6731, 10882, 405, 11454, 73911, 113787, 73819, 41169, 8939, 41245, + 128775, 41170, 1454, 11369, 6477, 12157, 120861, 0, 0, 41172, 7855, 0, + 71472, 10480, 43258, 126596, 77936, 8264, 12610, 983310, 645, 126616, + 7609, 40973, 69943, 73833, 69948, 5824, 984, 77918, 10688, 5851, 0, 7729, + 73982, 120518, 83473, 195086, 43369, 983177, 128140, 68415, 77861, 4538, + 93978, 43141, 983769, 82976, 74214, 73886, 67709, 917599, 71918, 43005, + 71114, 9552, 0, 70129, 129173, 12997, 83477, 0, 128897, 195030, 2381, 12883, 10994, 10529, 41906, 0, 74618, 0, 12425, 10661, 10856, 9614, 2428, - 41478, 8582, 10064, 73930, 0, 70437, 0, 64896, 119162, 1952, 92181, 8455, - 10082, 11575, 129062, 119566, 128093, 12808, 12183, 6145, 118955, 64929, - 92433, 71916, 983193, 43186, 42509, 0, 3922, 9187, 126513, 0, 10191, - 119057, 11752, 3353, 9358, 983460, 71366, 66680, 120090, 8248, 7931, - 8558, 9795, 68380, 983297, 0, 120082, 120081, 120084, 41027, 120086, 0, - 120088, 7366, 7019, 70378, 0, 11751, 120078, 78294, 64657, 8657, 120048, - 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 113711, 43154, 41029, 0, - 11332, 65380, 7728, 94077, 11294, 0, 66665, 7851, 0, 8375, 8699, 127949, - 42524, 68419, 9085, 94041, 7504, 9327, 6160, 128095, 983864, 194929, - 8088, 128937, 74012, 66562, 0, 4439, 6926, 72423, 12924, 128227, 42369, - 4350, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 983283, 0, 0, - 65825, 9577, 68199, 983391, 64670, 983121, 78056, 6793, 11295, 70409, - 78053, 73872, 78055, 119993, 10902, 0, 0, 78070, 11200, 10472, 2995, 0, - 120138, 64682, 2371, 78069, 120808, 259, 1009, 70405, 2402, 2333, 6440, - 194741, 113757, 65125, 41244, 70407, 13271, 9103, 2278, 0, 194728, 0, 0, - 10219, 0, 194740, 0, 67718, 43178, 127070, 41261, 119362, 43640, 8613, 0, - 94049, 6736, 195092, 41492, 12005, 69927, 127068, 1890, 120056, 0, - 128450, 0, 7293, 7991, 74052, 10578, 917998, 78076, 128620, 67368, 69928, - 71850, 78800, 92653, 64445, 42668, 6635, 128308, 6164, 65170, 0, 0, 7676, - 11664, 0, 93025, 69707, 93022, 118812, 0, 71096, 128045, 9175, 11925, - 78045, 9088, 119145, 64545, 1396, 0, 7546, 3847, 71088, 93037, 4985, - 13288, 672, 8098, 43196, 194746, 120723, 128126, 42655, 74043, 65072, - 1577, 11772, 13041, 5928, 4525, 10658, 65911, 1266, 10180, 0, 128371, - 12622, 0, 124948, 0, 128858, 127139, 13310, 773, 19933, 1539, 0, 126983, - 42731, 67972, 0, 71066, 983200, 3051, 5862, 7823, 92478, 92746, 120411, - 3250, 43991, 69687, 66649, 9510, 66237, 983302, 0, 41066, 64673, 917963, - 917964, 128636, 3505, 8707, 917968, 6725, 128013, 917971, 92314, 3471, - 66391, 5479, 882, 6686, 119584, 11613, 120772, 42754, 74608, 983306, - 92696, 0, 0, 0, 128523, 3225, 917996, 4433, 41156, 43973, 43173, 1443, - 4381, 0, 0, 10926, 11756, 11757, 64879, 917949, 195053, 127848, 13227, - 120320, 10021, 5160, 1387, 0, 917953, 41418, 128933, 65914, 6721, 217, - 917955, 917960, 917961, 10443, 10789, 41158, 119257, 4274, 11143, 41483, - 0, 41250, 128904, 42179, 128375, 5931, 11744, 11215, 74446, 41252, 66682, - 0, 119637, 41249, 1366, 64635, 65047, 12466, 983456, 0, 4397, 128037, - 128336, 41296, 9545, 41291, 128049, 0, 41485, 3511, 41282, 5923, 10400, - 0, 128818, 760, 0, 12088, 5786, 68252, 42256, 119869, 67145, 417, 41474, - 119562, 41565, 0, 5934, 74572, 66583, 119231, 64877, 2284, 64481, 78614, - 66013, 41956, 43455, 67240, 194656, 0, 0, 42273, 5819, 0, 917556, 0, - 126643, 0, 65910, 127747, 10246, 120816, 65785, 1237, 10274, 4552, - 119576, 983863, 0, 1375, 66705, 43573, 65260, 3329, 0, 42811, 10312, - 69845, 120794, 7840, 0, 43630, 10252, 119242, 128104, 43185, 0, 4396, - 195051, 119880, 10769, 9676, 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, - 120472, 6072, 43025, 10299, 128436, 0, 120608, 66326, 67412, 92952, 0, - 43811, 9330, 120596, 7222, 10283, 10315, 10379, 4996, 127902, 13281, - 66517, 7865, 10087, 78343, 0, 43324, 0, 0, 7565, 66363, 12952, 64806, - 43180, 77928, 7414, 77929, 43982, 74288, 622, 74023, 885, 43405, 1602, 0, - 983731, 852, 0, 12160, 120212, 10212, 65435, 129092, 12071, 9609, 12156, - 917983, 917984, 43586, 11035, 10411, 917988, 10255, 6710, 10279, 4194, - 10375, 43853, 128599, 4315, 12644, 127516, 77937, 43639, 43343, 67408, - 128945, 11501, 41177, 128689, 128866, 43431, 127097, 92413, 8715, 0, - 41179, 983356, 43313, 120230, 41176, 0, 994, 0, 8452, 120505, 73966, - 66890, 70812, 5921, 0, 2597, 0, 5922, 118903, 66873, 4186, 92531, 119967, - 127105, 6718, 0, 4406, 74601, 8480, 9192, 9747, 126530, 4413, 92196, - 42268, 3198, 5924, 5920, 92469, 6921, 78081, 74007, 42869, 8418, 11681, - 43169, 10176, 0, 742, 0, 2893, 10772, 65276, 5937, 1914, 2553, 11682, - 6756, 125104, 128646, 8363, 0, 2993, 7772, 3916, 4301, 120494, 1141, - 42407, 7417, 718, 7572, 973, 119599, 120718, 3235, 2415, 43164, 0, 8018, - 42333, 74756, 10675, 6937, 42486, 43381, 65390, 10067, 0, 1202, 0, - 983910, 65863, 0, 68484, 94013, 78182, 64542, 3260, 73829, 65388, 9945, - 8419, 78042, 6738, 0, 43681, 69728, 2059, 92422, 0, 55237, 1431, 983226, - 66565, 10821, 0, 12804, 128076, 8229, 1235, 3307, 11472, 78089, 78184, - 4544, 71228, 0, 917975, 1740, 78097, 8758, 985, 12872, 64511, 78094, - 12068, 78102, 71226, 10141, 0, 63761, 8785, 4476, 78109, 63763, 12655, - 8907, 9147, 78106, 78103, 78104, 0, 119572, 10665, 64616, 41572, 127979, - 127160, 0, 41573, 0, 3931, 120295, 74143, 0, 0, 983743, 78460, 11982, 0, - 0, 128381, 92712, 64484, 0, 41167, 0, 41735, 94019, 717, 10754, 0, 0, - 72413, 92935, 63767, 0, 1780, 6936, 0, 92254, 819, 10611, 9694, 126978, - 0, 0, 0, 129069, 8343, 8342, 8345, 8344, 6578, 7009, 7523, 6922, 8348, - 8347, 7525, 3346, 8339, 128165, 128208, 575, 268, 78111, 8563, 5754, - 120343, 41541, 65565, 8336, 5936, 7290, 78117, 8337, 8341, 308, 11388, - 7522, 120721, 78123, 65466, 11090, 6953, 0, 120346, 128939, 78132, 5926, - 68250, 78130, 78126, 78127, 78124, 78125, 9038, 7887, 43456, 7830, 11651, - 13093, 64002, 983559, 65742, 12874, 119597, 11590, 0, 74048, 67379, 8595, - 9835, 917947, 43703, 13097, 0, 64643, 13283, 12697, 0, 12381, 3488, 5933, - 10033, 71101, 66241, 65570, 0, 12297, 71212, 1955, 127970, 5349, 42538, - 0, 0, 7411, 9462, 917554, 0, 128465, 0, 42736, 0, 5756, 128324, 7638, - 41642, 42764, 0, 43109, 7637, 5752, 11213, 0, 73832, 128827, 120635, - 128231, 78334, 0, 7636, 65171, 9124, 0, 78892, 120798, 291, 0, 983221, - 2027, 66230, 10080, 78136, 10403, 70869, 4640, 64713, 10224, 120429, - 11183, 120431, 120430, 0, 128351, 127489, 127138, 0, 92499, 0, 119094, - 74213, 7824, 0, 0, 41274, 5778, 6302, 0, 0, 12680, 119130, 1417, 67242, - 93041, 9452, 0, 74393, 11552, 0, 127855, 128217, 65391, 128614, 10172, - 65453, 63789, 41264, 78658, 6426, 4641, 9179, 64819, 55278, 41255, 42036, - 41469, 41269, 120412, 41267, 4646, 67759, 865, 42034, 78274, 78273, 4645, - 42033, 78270, 127982, 983172, 64728, 0, 78673, 78674, 1659, 919, 42784, - 1671, 195089, 6069, 9219, 128558, 1661, 13120, 63784, 69819, 10140, 9713, - 119143, 0, 0, 94050, 2306, 10485, 118943, 6068, 10612, 195099, 119567, - 67705, 92561, 41462, 120470, 195079, 5422, 128234, 983629, 128611, - 126516, 10229, 10635, 826, 128081, 195082, 195085, 195084, 195087, 6483, - 92211, 1808, 7848, 113788, 8100, 78227, 71198, 78670, 13301, 78667, 9667, - 78665, 67704, 0, 11003, 9904, 0, 983919, 120690, 9144, 10921, 92992, - 78680, 9840, 65131, 78678, 71092, 10313, 0, 0, 64320, 10265, 67252, - 10962, 66904, 43008, 8945, 78683, 0, 41, 195072, 1792, 120515, 195073, - 8655, 68254, 92544, 77951, 12066, 67258, 385, 4152, 2585, 127804, 119068, - 3126, 0, 73983, 10957, 127037, 11160, 119116, 127873, 13157, 0, 917544, - 3570, 129187, 7443, 118804, 44006, 6997, 68004, 126631, 7879, 8739, - 11075, 0, 65216, 70196, 69795, 2593, 8463, 7810, 128543, 7839, 119913, - 78806, 119912, 9691, 4411, 78802, 129032, 124970, 43442, 69851, 65254, - 10066, 983889, 72419, 0, 0, 13061, 8016, 78687, 19932, 64831, 0, 113684, - 12390, 119171, 1634, 68115, 983962, 11056, 983574, 119925, 983099, 41165, - 11328, 12450, 983811, 41166, 0, 12456, 119914, 171, 5941, 12452, 194709, - 12458, 12531, 78779, 43013, 63800, 74162, 127569, 120483, 9969, 120767, - 12454, 63806, 42132, 12063, 78425, 78424, 3230, 0, 0, 125029, 5209, 297, - 5810, 8522, 8415, 119937, 78429, 78428, 7077, 2497, 128651, 960, 74156, - 6981, 92374, 12938, 4292, 78893, 74815, 10512, 0, 74814, 78875, 127505, - 78876, 2503, 73778, 1762, 69794, 2495, 78873, 5844, 68031, 118838, - 194658, 12654, 4663, 1899, 78877, 2507, 64121, 8726, 65594, 0, 0, 0, - 8892, 78872, 92339, 71232, 983073, 5782, 420, 129034, 917871, 43796, - 10797, 63794, 0, 0, 64814, 63796, 43861, 0, 66581, 119204, 41608, 128479, - 0, 63792, 4659, 120788, 77971, 43676, 92956, 69673, 0, 11129, 92929, 329, - 77968, 92707, 917548, 7399, 0, 41188, 13244, 67692, 42167, 7435, 78193, + 41478, 8582, 10064, 73930, 82977, 70437, 121251, 64896, 119162, 1952, + 92181, 8455, 10082, 11575, 128450, 119566, 128093, 12808, 12183, 6145, + 75020, 64929, 74985, 71916, 74984, 43186, 42509, 0, 3922, 9187, 83277, + 83278, 10191, 83271, 11752, 3353, 9358, 983462, 71366, 66680, 120090, + 8248, 7931, 8558, 9795, 68380, 120047, 983056, 83470, 120081, 119052, + 41027, 120086, 71449, 120088, 7366, 7019, 70378, 0, 11751, 120078, 78294, + 64657, 8657, 83472, 8594, 120068, 0, 983789, 120069, 120072, 120071, 0, + 113711, 43154, 41029, 119956, 11332, 65380, 7728, 94077, 11294, 0, 66665, + 7851, 0, 8375, 8699, 127949, 42524, 68419, 9085, 94041, 7504, 9327, 6160, + 73842, 983864, 194929, 8088, 128937, 74012, 66562, 0, 4439, 6926, 72423, + 12924, 128227, 42369, 4350, 65491, 65145, 9041, 43559, 64577, 10826, + 127476, 11296, 983285, 983409, 0, 65825, 9577, 68199, 983393, 64670, + 983121, 78056, 6793, 11295, 70409, 78053, 73872, 78055, 119993, 10902, 0, + 0, 78070, 11200, 10472, 2995, 121438, 120138, 64682, 2371, 78069, 118893, + 259, 1009, 70405, 2402, 2333, 6440, 194741, 113757, 65125, 41244, 70407, + 13271, 9103, 2278, 983146, 194728, 129120, 0, 10219, 74968, 194740, 0, + 67718, 43178, 127070, 41261, 119362, 43640, 8613, 0, 94049, 6736, 83439, + 41492, 12005, 69927, 127068, 1890, 120056, 0, 83443, 0, 7293, 7991, + 74052, 10578, 121141, 78076, 128620, 67368, 69928, 71850, 78800, 92653, + 64445, 42668, 6635, 128308, 6164, 65170, 74936, 121182, 7676, 11664, 0, + 93025, 69707, 93022, 118812, 0, 71096, 128045, 9175, 11925, 78045, 9088, + 119145, 64545, 1396, 120664, 7546, 3847, 71088, 93037, 4985, 13288, 672, + 8098, 43196, 194746, 120723, 128126, 42655, 74043, 65072, 1577, 11772, + 13041, 5928, 4525, 10658, 65911, 1266, 10180, 194711, 128371, 12622, + 127234, 124948, 0, 121214, 127139, 13310, 773, 19933, 1539, 0, 74969, + 42731, 67972, 74970, 71066, 983200, 3051, 5862, 7823, 92478, 92746, + 120411, 3250, 43991, 69687, 66649, 9510, 66237, 983304, 0, 41066, 64673, + 917963, 92381, 128636, 3505, 8707, 74925, 6725, 120802, 121296, 75041, + 3471, 66391, 5479, 882, 6686, 119584, 11613, 120772, 42754, 74608, + 125029, 83433, 121237, 120845, 0, 83431, 3225, 917996, 4433, 41156, + 43973, 43173, 1443, 4381, 0, 983642, 10926, 11756, 11757, 64879, 121106, + 42654, 127848, 13227, 120320, 10021, 5160, 1387, 0, 92644, 41418, 128933, + 65914, 6721, 217, 917955, 917960, 121082, 10443, 10789, 41158, 119257, + 4274, 11143, 41483, 0, 41250, 128904, 42179, 128375, 5931, 11744, 11215, + 74446, 41252, 66682, 0, 119637, 41249, 1366, 64635, 65047, 12466, 983458, + 120813, 4397, 128037, 128336, 41296, 9545, 41291, 120893, 0, 41485, 3511, + 41282, 5923, 10400, 0, 120493, 760, 0, 12088, 5786, 68252, 42256, 119869, + 67145, 417, 41474, 119562, 41565, 74965, 5934, 74572, 66583, 74904, + 64877, 2284, 64481, 78614, 66013, 41956, 43455, 67240, 194656, 0, 0, + 42273, 5819, 0, 128056, 0, 119129, 983100, 65910, 127747, 10246, 120816, + 65785, 1237, 10274, 4552, 119576, 128287, 0, 1375, 66705, 43573, 65260, + 3329, 0, 42811, 10312, 69845, 120794, 7840, 0, 43630, 10252, 119242, + 128104, 43185, 0, 4396, 195051, 119880, 10769, 9676, 119041, 0, 9753, + 92762, 8944, 983164, 0, 10473, 983823, 120472, 6072, 43025, 10299, + 128436, 68845, 120608, 66326, 67412, 92952, 0, 43811, 9330, 120596, 7222, + 10283, 10315, 10379, 4996, 127902, 13281, 66517, 7865, 10087, 78343, + 74938, 43324, 0, 0, 7565, 66363, 12952, 64806, 43180, 74967, 7414, 77929, + 43982, 74288, 622, 74023, 885, 43405, 1602, 0, 983731, 852, 0, 12160, + 83491, 10212, 65435, 129092, 12071, 9609, 12156, 917983, 917984, 43586, + 11035, 10411, 917988, 10255, 6710, 10279, 4194, 10375, 43853, 128599, + 4315, 12644, 83490, 77937, 43639, 43343, 67408, 128945, 11501, 41177, + 121180, 128866, 43431, 127097, 92413, 8715, 0, 41179, 983358, 43313, + 120230, 41176, 128780, 994, 983045, 8452, 77973, 73966, 66890, 70812, + 5921, 0, 2597, 92423, 5922, 118903, 66873, 4186, 92531, 119967, 127105, + 6718, 127029, 4406, 74601, 8480, 9192, 9747, 121040, 4413, 92196, 42268, + 3198, 5924, 5920, 92469, 6921, 78081, 74007, 42869, 8418, 11681, 43169, + 10176, 0, 742, 74881, 2893, 10772, 65276, 5937, 1914, 2553, 11682, 6756, + 125104, 121126, 8363, 0, 2993, 7772, 3916, 4301, 120494, 1141, 42407, + 7417, 718, 7572, 973, 119599, 120718, 3235, 2415, 43164, 0, 8018, 42333, + 74756, 10675, 6937, 42486, 43381, 65390, 10067, 120849, 1202, 0, 983910, + 65863, 0, 68484, 94013, 78182, 64542, 3260, 73829, 65388, 9945, 8419, + 78042, 6738, 0, 43681, 69728, 2059, 92422, 0, 55237, 1431, 119194, 66565, + 10821, 0, 12804, 128076, 8229, 1235, 3307, 11472, 78089, 78184, 4544, + 71228, 917982, 129188, 1740, 78097, 8758, 985, 12872, 64511, 78094, + 12068, 78102, 71226, 10141, 74922, 63761, 8785, 4476, 65071, 63763, + 12655, 8907, 9147, 78106, 78103, 78104, 120898, 119572, 10665, 64616, + 41572, 127979, 127160, 983554, 41573, 83160, 3931, 120295, 74143, 83156, + 83157, 83158, 78460, 11982, 0, 83067, 128381, 92712, 64484, 119266, + 41167, 0, 41735, 94019, 717, 10754, 83168, 83169, 72413, 83163, 63767, + 83165, 1780, 6936, 0, 83161, 819, 10611, 9694, 126978, 71474, 0, 127871, + 129069, 8343, 8342, 8345, 8344, 6578, 7009, 7523, 6922, 8348, 8347, 7525, + 3346, 8339, 128165, 128208, 575, 268, 78111, 8563, 5754, 120343, 41541, + 65565, 8336, 5936, 7290, 78117, 8337, 8341, 308, 11388, 7522, 83151, + 78123, 65466, 11090, 6953, 0, 83375, 74973, 78132, 5926, 68250, 78130, + 78126, 78127, 78124, 78125, 9038, 7887, 43456, 7830, 11651, 13093, 64002, + 983559, 65742, 12874, 119597, 11590, 0, 74048, 67379, 8595, 9835, 917947, + 43703, 13097, 0, 64643, 13283, 12697, 74975, 12381, 3488, 5933, 10033, + 71101, 66241, 65570, 119154, 12297, 71212, 1955, 127970, 5349, 42538, 0, + 124932, 7411, 9462, 128150, 0, 128465, 43920, 42736, 121017, 5756, + 128324, 7638, 41642, 42764, 983717, 43109, 7637, 5752, 11213, 83481, + 73832, 128827, 83486, 128231, 78334, 917957, 7636, 65171, 9124, 983210, + 78892, 120798, 291, 0, 983221, 2027, 66230, 10080, 78136, 10403, 70869, + 4640, 64713, 10224, 120429, 11183, 120431, 120430, 0, 128351, 127489, + 127138, 0, 92499, 0, 119094, 74213, 7824, 0, 194648, 41274, 5778, 6302, + 121432, 0, 12680, 119130, 1417, 67242, 93041, 9452, 128153, 74393, 11552, + 0, 127855, 128217, 65391, 128614, 10172, 65453, 63789, 41264, 78658, + 6426, 4641, 9179, 64819, 55278, 41255, 42036, 41469, 41269, 120412, + 41267, 4646, 67759, 865, 42034, 78274, 78273, 4645, 42033, 78270, 127982, + 983172, 43948, 195100, 68840, 78674, 1659, 919, 42784, 1671, 127892, + 6069, 9219, 128558, 1661, 13120, 63784, 69819, 10140, 9713, 119143, 0, + 71462, 94050, 2306, 10485, 118943, 6068, 10612, 195099, 119567, 67705, + 92561, 41462, 120470, 195079, 5422, 128234, 983629, 128611, 83474, 10229, + 10635, 826, 83475, 195082, 127003, 195084, 71455, 6483, 92211, 1808, + 7848, 113788, 8100, 78227, 71198, 78670, 13301, 78667, 9667, 78665, + 67704, 983921, 11003, 9904, 83410, 983919, 120690, 9144, 10921, 92992, + 78680, 9840, 65131, 78678, 71092, 10313, 83408, 83500, 64320, 10265, + 67252, 10962, 66904, 43008, 8945, 78683, 120995, 41, 195072, 1792, + 120515, 195073, 8655, 68254, 92544, 77951, 12066, 67258, 385, 4152, 2585, + 127804, 119068, 3126, 917852, 73983, 10957, 127037, 11160, 119116, + 127873, 13157, 0, 128024, 3570, 129187, 7443, 118804, 44006, 6997, 68004, + 126631, 7879, 8739, 11075, 917971, 65216, 70196, 69795, 2593, 8463, 7810, + 128543, 7839, 92612, 78806, 75064, 9691, 4411, 78802, 121219, 120854, + 43442, 69851, 65254, 10066, 983889, 72419, 0, 0, 13061, 8016, 78687, + 19932, 64831, 0, 113684, 12390, 119171, 1634, 68115, 65070, 11056, + 983574, 119925, 983099, 41165, 11328, 12450, 983811, 41166, 0, 12456, + 119914, 171, 5941, 12452, 194709, 12458, 12531, 78779, 43013, 63800, + 74162, 119320, 120483, 9969, 120767, 12454, 63806, 42132, 12063, 78425, + 78424, 3230, 68773, 983497, 75025, 5209, 297, 5810, 8522, 8415, 119937, + 78429, 78428, 7077, 2497, 128651, 960, 74156, 6981, 92374, 12938, 4292, + 78893, 74815, 10512, 0, 74814, 78875, 127505, 78876, 2503, 73778, 1762, + 69794, 2495, 74911, 5844, 68031, 118838, 127947, 12654, 4663, 1899, + 78877, 2507, 64121, 8726, 65594, 92972, 0, 119000, 8892, 78872, 92339, + 71232, 983073, 5782, 420, 127348, 917871, 43796, 10797, 63794, 0, 128533, + 64814, 63796, 43861, 0, 66581, 119204, 41608, 128479, 121144, 63792, + 4659, 120788, 77971, 43676, 74944, 69673, 121029, 11129, 92929, 329, + 77968, 92707, 83496, 7399, 0, 41188, 13244, 67692, 42167, 7435, 78193, 5380, 119086, 69225, 1155, 11365, 43126, 77972, 0, 65684, 0, 5601, 65192, - 42765, 63752, 0, 7987, 93055, 1172, 69799, 6786, 43601, 120476, 74126, - 5603, 0, 4473, 0, 72426, 124947, 65347, 65346, 65345, 128548, 119213, - 5347, 69802, 983632, 73868, 70852, 10588, 0, 0, 63755, 0, 5343, 78422, - 120661, 4555, 5341, 0, 70071, 128670, 5351, 78675, 43104, 65244, 917892, - 64541, 42519, 68134, 128916, 126986, 74765, 917888, 127510, 6638, 0, - 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, 42172, 41086, 65363, - 65362, 65361, 11912, 43410, 11323, 65357, 11800, 65355, 5345, 11103, - 65352, 65351, 761, 65349, 19959, 69718, 63856, 126635, 2423, 74518, - 64647, 77959, 11957, 4699, 126573, 0, 0, 0, 64605, 0, 0, 0, 4916, 0, 380, - 10958, 66563, 77955, 69773, 9773, 13167, 12918, 41096, 73980, 69245, - 78254, 917893, 10684, 0, 125063, 92906, 7946, 12541, 8182, 67586, 69780, - 0, 0, 0, 0, 9005, 1225, 6630, 0, 0, 118854, 68011, 8847, 92371, 65876, - 5535, 8329, 74590, 125036, 92609, 0, 66874, 3127, 2595, 65713, 42013, - 129188, 5607, 41089, 128626, 0, 74256, 2665, 11304, 43751, 74200, 4970, - 8764, 120459, 8934, 92726, 41566, 4492, 67271, 65011, 41090, 0, 92909, - 1188, 7254, 1100, 0, 67270, 41081, 2912, 11749, 67282, 67281, 67280, - 3572, 10023, 4959, 13079, 0, 67275, 9729, 125110, 0, 67278, 43361, - 983733, 67276, 11803, 7996, 9907, 41450, 13304, 128290, 127260, 41451, 0, - 11095, 8273, 74322, 3451, 983309, 972, 41453, 68164, 119327, 73883, - 68022, 73945, 983735, 2288, 19955, 9538, 92953, 69807, 0, 129095, 0, - 128897, 11396, 983440, 11019, 0, 128416, 0, 68020, 41078, 71365, 261, - 5927, 7791, 983087, 7362, 0, 10696, 70124, 6073, 9838, 118920, 0, 6075, - 93995, 282, 126510, 6437, 74078, 128000, 9801, 66399, 74177, 0, 0, 3474, - 67287, 0, 67286, 6081, 127217, 78874, 67289, 67283, 0, 70002, 128908, 0, + 42765, 63752, 0, 7987, 69676, 1172, 69799, 6786, 43601, 120476, 74126, + 5603, 0, 4473, 121085, 72426, 124947, 65347, 65346, 65345, 128548, + 119213, 5347, 69802, 917973, 73868, 70852, 10588, 0, 0, 63755, 128271, + 5343, 78422, 120661, 4555, 5341, 83459, 70071, 74916, 5351, 78675, 43104, + 65244, 121365, 64541, 42519, 68134, 128916, 126986, 74765, 128979, + 127510, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, + 42172, 41086, 65363, 65362, 65361, 11912, 43410, 11323, 65357, 11800, + 65355, 5345, 11103, 65352, 65351, 761, 65349, 19959, 69718, 63856, + 126635, 2423, 74518, 64647, 77959, 11957, 4699, 126573, 128670, 983787, + 0, 64605, 0, 68074, 983977, 4916, 128568, 380, 10958, 66563, 77955, + 69773, 9773, 13167, 12918, 41096, 73980, 69245, 78254, 83450, 10684, 0, + 125063, 92906, 7946, 12541, 8182, 67586, 69780, 0, 128207, 0, 983654, + 9005, 1225, 6630, 0, 0, 118854, 68011, 8847, 92371, 65876, 5535, 8329, + 74590, 125036, 92609, 0, 66874, 3127, 2595, 65713, 42013, 121211, 5607, + 41089, 128626, 0, 70292, 2665, 11304, 43751, 74200, 4970, 8764, 120459, + 8934, 92726, 41566, 4492, 67271, 65011, 41090, 0, 83417, 1188, 7254, + 1100, 0, 67270, 41081, 2912, 11749, 67282, 67281, 67280, 3572, 10023, + 4959, 13079, 0, 67275, 9729, 125110, 121042, 67278, 43361, 127355, 67276, + 11803, 7996, 9907, 41450, 13304, 83392, 83369, 41451, 83370, 11095, 8273, + 74322, 3451, 70291, 972, 41453, 68164, 119327, 73883, 68022, 73945, + 83363, 2288, 19955, 9538, 83366, 69807, 0, 129095, 0, 83381, 11396, + 83385, 11019, 0, 128416, 121205, 68020, 41078, 71365, 261, 5927, 7791, + 128681, 7362, 0, 10696, 70124, 6073, 9838, 118920, 0, 6075, 93995, 282, + 119178, 6437, 68830, 121459, 9801, 66399, 74177, 0, 917959, 3474, 67287, + 0, 67286, 6081, 83469, 78874, 67289, 67283, 83471, 70002, 42930, 0, 93013, 8751, 11499, 67297, 7816, 12636, 4665, 12628, 4670, 67298, 120272, 68017, 9642, 10912, 958, 67293, 11387, 67291, 4666, 70792, 4915, 67715, - 4669, 0, 68099, 13287, 4664, 10836, 120550, 0, 69775, 0, 43595, 7450, 0, - 917875, 8664, 9697, 3606, 917873, 983978, 0, 64815, 1063, 120250, 67312, - 9772, 7255, 8886, 1389, 127932, 120257, 120258, 120259, 12941, 42661, - 92381, 120255, 120256, 12301, 120266, 69820, 41102, 64428, 120262, - 120263, 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 70340, 0, 8608, - 42789, 120613, 128704, 0, 73855, 11307, 66707, 67301, 67300, 11745, 7919, - 67304, 1641, 0, 0, 8966, 0, 127212, 5908, 71870, 67853, 6744, 67310, + 4669, 0, 68099, 13287, 4664, 10836, 120550, 75053, 69775, 0, 43595, 7450, + 0, 917875, 8664, 9697, 3606, 83446, 983978, 917874, 64815, 1063, 120250, + 67312, 9772, 7255, 8886, 1389, 127932, 120257, 120258, 120259, 12941, + 42661, 83438, 120255, 120256, 12301, 67836, 69820, 41102, 64428, 120262, + 66602, 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 70340, 83437, 8608, + 42789, 120613, 83436, 0, 71906, 11307, 66707, 67301, 67300, 11745, 7919, + 67304, 1641, 0, 0, 8966, 128900, 74919, 5908, 71870, 67853, 6744, 67310, 1699, 67308, 67307, 67314, 67313, 6306, 10169, 71324, 119251, 10068, - 3766, 2389, 67305, 120455, 6611, 257, 43170, 13153, 0, 42386, 0, 9436, - 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, 10541, 5622, 120436, - 8477, 3760, 1718, 9442, 66433, 3776, 917837, 41435, 4352, 67324, 2435, - 71211, 5621, 120385, 4201, 3778, 4203, 4202, 4205, 4204, 120447, 3768, - 41774, 765, 41440, 3764, 8473, 6373, 8469, 120438, 12947, 4564, 0, 74623, - 74271, 73753, 8374, 127201, 0, 6829, 5225, 66901, 127385, 0, 0, 119615, - 67319, 67318, 5626, 43507, 11771, 67322, 67321, 67320, 42614, 5353, 5625, - 74179, 67315, 0, 1010, 64572, 41780, 42623, 64277, 69942, 6952, 67329, - 67328, 67327, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 120038, - 120027, 120028, 120025, 5628, 120031, 970, 120029, 4772, 2400, 5627, - 120017, 67330, 120023, 64275, 120021, 8786, 113693, 203, 74365, 0, 0, - 69985, 78350, 113703, 64378, 42054, 983150, 0, 554, 119649, 11358, 71172, - 12182, 42048, 11065, 126464, 73891, 0, 0, 5694, 7689, 69798, 9323, 4325, - 3047, 10317, 175, 0, 93029, 69764, 0, 0, 1243, 42154, 5431, 6652, 917561, - 67753, 43651, 129129, 68118, 128024, 1129, 126574, 0, 65900, 1986, 7846, - 78804, 8661, 917772, 65255, 0, 3845, 4490, 118969, 6649, 74136, 1456, - 7530, 11977, 7249, 8366, 0, 7756, 12342, 128568, 51, 41516, 0, 8570, - 9568, 71318, 456, 7026, 8145, 1168, 9251, 9082, 119964, 64055, 42781, - 3866, 12323, 41512, 73805, 68121, 0, 41494, 92316, 4660, 67114, 10405, - 127195, 78803, 0, 0, 42040, 73918, 119627, 7944, 41454, 12605, 0, 42205, - 41455, 236, 64051, 78867, 8214, 0, 113784, 120037, 41457, 983970, 119589, - 1969, 2384, 8097, 917864, 7413, 68012, 78029, 8766, 43864, 78079, 5854, - 125000, 10583, 0, 119989, 0, 10416, 917869, 3872, 917868, 0, 8429, 0, - 118806, 2838, 6429, 0, 917866, 0, 128478, 0, 983967, 94005, 11096, - 120813, 10553, 1662, 8483, 120396, 43605, 5892, 43418, 0, 73742, 66, 65, - 68, 67, 70, 69, 72, 71, 74, 73, 76, 75, 78, 77, 80, 79, 82, 81, 84, 83, - 86, 85, 88, 87, 90, 89, 119862, 10357, 7385, 8170, 1704, 8556, 0, 9659, - 0, 0, 0, 9556, 0, 4503, 11353, 9647, 125015, 78185, 128959, 0, 92713, - 78886, 0, 0, 74229, 66593, 6438, 917979, 9109, 78882, 1289, 64599, 0, - 68009, 128302, 65507, 2447, 119911, 0, 128042, 126545, 66589, 0, 6334, 0, - 0, 19937, 917793, 1322, 92359, 5675, 254, 0, 0, 69686, 42425, 8918, - 64003, 5716, 42312, 0, 0, 6972, 42826, 74409, 42464, 120567, 66899, - 67155, 74796, 64400, 64693, 0, 67687, 65429, 9515, 4435, 0, 42522, 0, - 68008, 11785, 7412, 43867, 41978, 1412, 4594, 1391, 10536, 8067, 9901, - 7103, 128293, 7102, 74588, 120748, 3140, 127276, 7960, 43271, 0, 12518, - 10909, 127508, 1428, 12472, 67254, 67253, 7699, 12393, 67257, 0, 67256, - 67255, 8223, 0, 4261, 0, 0, 74308, 0, 113712, 67153, 0, 128046, 43419, 0, - 64554, 10574, 3878, 67691, 42352, 1752, 73785, 0, 42506, 128541, 10199, - 917865, 125142, 68021, 65919, 0, 6695, 720, 324, 0, 129035, 43406, - 983736, 1464, 40985, 0, 7974, 0, 43474, 0, 64488, 128977, 0, 64041, - 74787, 0, 78865, 92258, 65597, 0, 78863, 0, 1302, 66288, 78861, 119134, - 0, 67152, 5204, 74774, 43404, 11835, 0, 3995, 68360, 65608, 3714, 92190, - 120026, 67262, 10999, 11750, 67259, 43251, 67264, 43301, 0, 120557, 8130, - 8672, 10845, 11964, 0, 128014, 0, 0, 68455, 42863, 73839, 0, 0, 67700, 0, - 113701, 43645, 468, 612, 0, 64401, 66448, 68376, 0, 1674, 0, 5823, - 129126, 12280, 70367, 540, 74564, 119017, 66422, 8432, 0, 11073, 0, - 64316, 0, 0, 820, 41741, 0, 120667, 124981, 64684, 126992, 3359, 7800, - 69934, 65177, 6226, 353, 12396, 0, 119612, 64742, 128682, 78879, 0, - 127938, 12412, 19941, 0, 120277, 70352, 1884, 9481, 42418, 70059, 41157, - 0, 1195, 64898, 7924, 0, 41151, 2010, 128883, 41328, 42344, 0, 12409, 0, - 4360, 127009, 9739, 128550, 69933, 73921, 917631, 42521, 8539, 128606, 0, - 118986, 127148, 4788, 0, 68023, 65734, 983455, 43790, 120274, 13075, + 3766, 2389, 67305, 120455, 6611, 257, 43170, 13153, 0, 42386, 983815, + 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, 10541, 5622, + 120436, 8477, 3760, 1718, 9442, 66433, 3776, 917837, 41435, 4352, 67324, + 2435, 71211, 5621, 120385, 4201, 3778, 4203, 4202, 4205, 4204, 120447, + 3768, 41774, 765, 41440, 3764, 8473, 6373, 8469, 120438, 12947, 4564, + 119049, 74623, 74271, 73753, 8374, 127201, 0, 6829, 5225, 66901, 127385, + 0, 0, 119615, 67319, 67318, 3162, 43507, 11771, 67322, 67321, 67320, + 42614, 5353, 5625, 74179, 67315, 0, 1010, 64572, 41780, 42623, 64277, + 69942, 6952, 67329, 67328, 67327, 2590, 5629, 65552, 7551, 10325, 5632, + 10471, 120038, 120027, 120028, 120025, 5628, 120031, 970, 120029, 4772, + 2400, 5627, 120017, 67330, 120023, 64275, 120021, 8786, 113693, 203, + 74365, 0, 0, 69985, 78350, 113703, 64378, 42054, 128575, 0, 554, 119649, + 11358, 71172, 12182, 42048, 11065, 125114, 73891, 83423, 83019, 5694, + 7689, 69798, 9323, 4325, 3047, 10317, 175, 120962, 93029, 69764, 0, 0, + 1243, 42154, 5431, 6652, 917561, 67753, 43651, 129129, 68118, 68093, + 1129, 126574, 0, 65900, 1986, 7846, 78804, 8661, 75058, 65255, 93992, + 3845, 4490, 118969, 6649, 74136, 1456, 7530, 11977, 7249, 8366, 0, 7756, + 12342, 120697, 51, 41516, 0, 8570, 9568, 71318, 456, 7026, 8145, 1168, + 9251, 9082, 119964, 64055, 42781, 3866, 12323, 41512, 73805, 68121, + 917850, 41494, 92316, 4660, 67114, 10405, 127195, 78803, 0, 129176, + 42040, 73918, 119627, 7944, 41454, 12605, 0, 42205, 41455, 236, 64051, + 78867, 8214, 83421, 113784, 120037, 41457, 983970, 119589, 1969, 2384, + 8097, 128019, 7413, 68012, 78029, 8766, 43864, 78079, 5854, 125000, + 10583, 0, 119989, 127556, 10416, 68070, 3872, 83424, 983839, 8429, + 121230, 118806, 2838, 6429, 0, 83426, 0, 128478, 0, 194620, 94005, 11096, + 83422, 10553, 1662, 8483, 120396, 43605, 5892, 43418, 67819, 73742, 66, + 65, 68, 67, 70, 69, 72, 71, 74, 73, 76, 75, 78, 77, 80, 79, 82, 81, 84, + 83, 86, 85, 88, 87, 90, 89, 119862, 10357, 7385, 8170, 1704, 8556, + 917975, 9659, 0, 0, 0, 9556, 0, 4503, 11353, 9647, 125015, 78185, 128959, + 0, 71437, 78886, 0, 0, 74229, 66593, 6438, 83364, 9109, 78882, 1289, + 64599, 118915, 68009, 128302, 65507, 2447, 119911, 128694, 128042, + 126545, 66589, 0, 6334, 128369, 0, 19937, 917793, 1322, 92359, 5675, 254, + 0, 0, 69686, 42425, 8918, 64003, 5716, 42312, 0, 194692, 6972, 42826, + 74409, 42464, 120567, 66899, 67155, 74796, 64400, 64693, 128805, 67687, + 65429, 9515, 4435, 0, 42522, 0, 68008, 11785, 7412, 43867, 41978, 1412, + 4594, 1391, 10536, 8067, 9901, 7103, 128293, 7102, 71428, 120748, 3140, + 127276, 7960, 43271, 121099, 12518, 10909, 127508, 1428, 12472, 67254, + 67253, 7699, 12393, 67257, 0, 67256, 67255, 8223, 0, 4261, 121460, + 120910, 74308, 983827, 113712, 67153, 983571, 128046, 43419, 983471, + 64554, 10574, 3878, 67691, 42352, 1752, 73785, 128171, 42506, 128541, + 10199, 917865, 125142, 68021, 65919, 0, 6695, 720, 324, 0, 129035, 43406, + 983736, 1464, 40985, 0, 7974, 0, 43474, 68082, 64488, 128977, 120951, + 64041, 74787, 0, 78865, 92258, 65597, 121416, 78863, 0, 1302, 66288, + 78861, 119134, 0, 67152, 5204, 74774, 43404, 11835, 120923, 3995, 68360, + 65608, 3714, 92190, 120026, 67262, 10999, 11750, 67259, 43251, 67264, + 43301, 0, 120557, 8130, 8672, 10845, 11964, 121268, 128014, 92173, 0, + 68455, 42863, 73839, 127529, 0, 67700, 917812, 113701, 43645, 468, 612, + 0, 64401, 66448, 68376, 0, 1674, 0, 5823, 128625, 12280, 70367, 540, + 74564, 119017, 66422, 8432, 78873, 11073, 0, 64316, 0, 121070, 820, + 41741, 983477, 120667, 124981, 64684, 126992, 3359, 7800, 69934, 65177, + 6226, 353, 12396, 121176, 119612, 64742, 128682, 78879, 983478, 127938, + 12412, 19941, 0, 120277, 70352, 1884, 9481, 42418, 70059, 41157, 983142, + 1195, 64898, 7924, 119870, 41151, 2010, 71430, 41328, 42344, 0, 12409, 0, + 4360, 121023, 9739, 128550, 69933, 73921, 917631, 42521, 8539, 128606, 0, + 118986, 127148, 4788, 121345, 68023, 65734, 983457, 43790, 120274, 13075, 74429, 94063, 64569, 43532, 10837, 2492, 127197, 118901, 68637, 41136, 43785, 11813, 9649, 41154, 113731, 5128, 4038, 41143, 65604, 64859, 41592, 6771, 1648, 5435, 67295, 6734, 41343, 119848, 65439, 12709, 6986, 92364, 68015, 120533, 41349, 70021, 12581, 10374, 5175, 0, 73806, 10254, - 113681, 10278, 10262, 69858, 41346, 0, 607, 0, 119852, 128846, 12923, + 113681, 10278, 10262, 69858, 41346, 120870, 607, 0, 68182, 128846, 12923, 10314, 10282, 65477, 10378, 120297, 40976, 8265, 129149, 78639, 40975, - 5840, 42838, 0, 40978, 983897, 92945, 128020, 119809, 0, 66444, 10538, - 120810, 2550, 119836, 6779, 129130, 0, 3525, 6824, 118886, 983582, 0, - 5619, 65822, 113751, 113738, 7455, 917966, 5616, 11486, 9656, 0, 0, - 10727, 5615, 129071, 120551, 42380, 64895, 43693, 66451, 808, 5455, + 5840, 42838, 74987, 40978, 121386, 92945, 128020, 119809, 0, 66444, + 10538, 120810, 2550, 119836, 6779, 129130, 0, 3525, 6824, 118886, 983582, + 0, 5619, 65822, 113751, 113738, 7455, 71424, 5616, 11486, 9656, 0, 0, + 10727, 5615, 120873, 120551, 42380, 64895, 43693, 66451, 808, 5455, 11347, 0, 1026, 5620, 194887, 0, 11350, 5617, 0, 9225, 64639, 127073, 9145, 128060, 1338, 120581, 983158, 12739, 4603, 3084, 70408, 92484, - 9858, 6037, 0, 3974, 78213, 10290, 983704, 3083, 10322, 129048, 129030, - 0, 41036, 66897, 0, 43321, 65606, 127071, 41032, 42388, 0, 64700, 10011, - 1445, 40961, 0, 119105, 0, 40960, 0, 67727, 125106, 2223, 64952, 10402, - 0, 127179, 92304, 10603, 0, 0, 983113, 0, 6714, 10083, 127069, 194895, - 78367, 69976, 0, 93963, 9073, 42585, 64302, 10704, 65030, 4787, 0, 74829, - 0, 65423, 0, 128118, 9570, 55260, 9525, 2689, 917626, 65426, 194872, - 917624, 43740, 983177, 40966, 917622, 13286, 3998, 42598, 42596, 503, - 74237, 8735, 2690, 66488, 42836, 127150, 41954, 917617, 1652, 772, 6688, - 8310, 65428, 3487, 43416, 3585, 10194, 43320, 119159, 73955, 92315, 6468, - 41976, 9720, 917606, 11179, 41970, 66255, 5836, 12358, 0, 4355, 9048, - 12180, 65027, 64680, 13038, 43699, 0, 41488, 128087, 8527, 194917, 12362, - 12435, 12360, 41053, 3266, 0, 12356, 8616, 41466, 42924, 92588, 11450, 0, - 3638, 12354, 67299, 3216, 0, 2358, 92606, 8633, 71201, 983745, 119182, - 69244, 128418, 70375, 11759, 194903, 6368, 74823, 67303, 41423, 8078, - 10504, 127558, 41698, 42237, 983452, 7002, 125135, 41430, 42267, 41051, - 41484, 0, 128056, 41050, 41473, 10466, 13099, 983327, 70371, 983777, - 6435, 0, 11362, 128973, 0, 65382, 92770, 41420, 983655, 3625, 78157, - 41409, 0, 69639, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, 41424, - 917598, 120546, 0, 128212, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, 0, - 127538, 0, 78251, 124943, 42290, 3275, 92472, 42329, 74759, 125141, 0, - 128257, 92388, 69649, 10989, 74234, 113781, 10598, 7410, 2669, 903, 0, - 2920, 0, 127232, 74603, 64504, 19928, 0, 128411, 3917, 0, 11732, 0, - 983180, 41448, 41461, 128823, 0, 113721, 113758, 8819, 12663, 0, 41184, - 74014, 232, 74835, 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 68425, - 71886, 1064, 42467, 128044, 10115, 19924, 92711, 0, 7862, 64551, 13224, - 8516, 41862, 66650, 7561, 78618, 69793, 1878, 0, 983269, 2911, 128218, - 41178, 5427, 64823, 0, 0, 3787, 41174, 0, 41458, 67147, 41463, 42413, - 11292, 2406, 775, 0, 65584, 69923, 6074, 9618, 128668, 983727, 43440, - 74539, 194901, 41436, 3656, 917805, 120600, 41456, 67694, 1599, 11333, - 194896, 6703, 8513, 0, 1613, 0, 68456, 12598, 983191, 120734, 78745, - 74500, 41460, 10145, 10542, 9937, 78746, 67144, 9905, 0, 65730, 0, - 120374, 8427, 120375, 55246, 120376, 194940, 11497, 64687, 74008, 42592, - 3871, 983584, 128305, 9111, 5741, 0, 194846, 120366, 119111, 11150, 0, - 120368, 983570, 11648, 0, 194873, 120364, 41587, 70391, 127061, 71108, - 42113, 0, 127155, 12172, 92988, 74530, 65298, 65723, 68289, 73871, 65724, - 7928, 120354, 983095, 41595, 73730, 64671, 42118, 73830, 66042, 10355, - 983110, 7875, 0, 41598, 3993, 194909, 1545, 40971, 536, 128521, 43029, 0, - 0, 65173, 65286, 0, 70331, 917799, 0, 94065, 0, 41375, 5402, 128748, 0, - 1687, 120503, 917817, 0, 78194, 64326, 40969, 10526, 73747, 8323, 40968, - 1339, 11731, 78756, 127108, 65460, 12242, 128513, 8020, 10843, 11554, 0, - 0, 8266, 41006, 65722, 0, 10710, 74045, 118942, 67667, 64567, 119155, - 92900, 0, 71889, 67857, 120687, 0, 92958, 11755, 66305, 68332, 0, 10917, - 93979, 0, 11272, 2040, 41247, 41326, 195060, 1741, 42370, 1227, 0, - 128958, 11413, 127250, 0, 5283, 1586, 4978, 0, 1984, 11830, 43819, 92293, - 40984, 42904, 9373, 0, 12916, 6284, 194888, 41663, 983093, 0, 68313, - 9237, 9385, 41648, 0, 128953, 2299, 41666, 1830, 73783, 2056, 41287, - 92610, 0, 71917, 42219, 70118, 0, 41987, 41676, 983059, 120823, 983144, - 41670, 0, 92590, 2796, 55291, 11683, 9902, 74521, 67988, 11451, 983111, - 78855, 42631, 2359, 71890, 67844, 74164, 41238, 548, 11405, 13133, 64368, - 127270, 128795, 66272, 397, 43622, 42139, 9547, 9590, 128238, 1614, - 43661, 64356, 66307, 6651, 1358, 127962, 428, 9620, 1466, 78112, 10982, - 113785, 1333, 7104, 407, 6425, 128834, 74253, 0, 0, 0, 5804, 11976, 8554, - 92721, 0, 70167, 9057, 42294, 41218, 125097, 0, 78137, 1883, 10952, 8048, - 70443, 41225, 92621, 42915, 128616, 128512, 0, 4407, 74648, 65809, 11837, - 194821, 8448, 7141, 74183, 120334, 12675, 12659, 74634, 42363, 120624, - 194824, 55273, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, - 10296, 119158, 7140, 10977, 127378, 4164, 9081, 0, 120569, 42049, 42042, - 8709, 128283, 126477, 120637, 42419, 64799, 42047, 0, 194820, 8470, - 11807, 65897, 577, 0, 983760, 74300, 0, 127308, 74840, 126474, 0, 128791, - 92224, 8736, 1414, 42643, 9683, 43486, 74344, 0, 2536, 0, 66330, 0, 0, 0, - 0, 0, 0, 194830, 66317, 69945, 66315, 2106, 92762, 11273, 125068, 43004, - 7541, 0, 0, 961, 64307, 66324, 64906, 128591, 3106, 65917, 41284, 1696, - 0, 891, 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, + 9858, 6037, 983465, 3974, 78213, 10290, 983704, 3083, 10322, 129048, + 129030, 75038, 41036, 66897, 0, 43321, 65606, 127071, 41032, 42388, 0, + 64700, 10011, 1445, 40961, 0, 119105, 0, 40960, 194907, 67727, 125106, + 2223, 64952, 10402, 128358, 125049, 92304, 10603, 0, 983403, 71438, 0, + 6714, 10083, 127069, 121019, 78367, 69976, 0, 43872, 9073, 42585, 64302, + 10704, 65030, 4787, 129031, 74829, 0, 65423, 121306, 128118, 9570, 55260, + 9525, 2689, 917626, 65426, 194872, 917624, 43740, 121163, 40966, 120009, + 13286, 3998, 42598, 42596, 503, 71433, 8735, 2690, 66488, 42836, 127150, + 41954, 917615, 1652, 772, 6688, 8310, 65428, 3487, 43416, 3585, 10194, + 43320, 119159, 73955, 92315, 6468, 41976, 9720, 74964, 11179, 41970, + 66255, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, 13038, 43699, 0, + 41488, 128087, 8527, 194917, 12362, 12435, 12360, 41053, 3266, 0, 12356, + 8616, 41466, 42924, 2227, 11450, 983691, 3638, 12354, 67299, 3216, 83099, + 2358, 83092, 8633, 71201, 983745, 119182, 69244, 83090, 70375, 11759, + 194903, 6368, 74823, 67303, 41423, 8078, 10504, 83104, 41698, 42237, + 983454, 7002, 83101, 41430, 42267, 41051, 41484, 0, 71467, 41050, 41473, + 10466, 13099, 71445, 70371, 120897, 6435, 74331, 11362, 128973, 83088, + 65382, 92770, 41420, 83083, 3625, 74915, 41409, 71441, 69639, 2041, 9178, + 9672, 41427, 43541, 43317, 74924, 0, 128557, 41424, 917598, 120546, 0, + 128212, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, 0, 127538, 0, 78251, + 124943, 42290, 3275, 92472, 42329, 68850, 74901, 0, 127951, 92388, 69649, + 10989, 74234, 113781, 10598, 7410, 2669, 903, 0, 2920, 0, 127232, 74603, + 64504, 19928, 0, 128411, 3917, 983119, 11732, 0, 983180, 41448, 41461, + 128823, 0, 113721, 113758, 8819, 12663, 0, 41184, 74014, 232, 74835, + 120646, 9168, 65786, 0, 83293, 121007, 9094, 983926, 11758, 68425, 71886, + 1064, 42467, 128044, 10115, 19924, 92711, 113682, 7862, 64551, 13224, + 8516, 41862, 66650, 7561, 78618, 69793, 1878, 0, 71434, 2911, 83074, + 41178, 5427, 64823, 83062, 83066, 3787, 41174, 83055, 41458, 67147, + 41463, 42413, 11292, 2406, 775, 0, 65584, 69923, 6074, 9618, 68056, + 121480, 43440, 74539, 194901, 41436, 3656, 917805, 120600, 41456, 67694, + 1599, 11333, 83139, 6703, 8513, 83134, 1613, 83136, 68456, 12598, 83131, + 83132, 78745, 74500, 41460, 10145, 10542, 9937, 78746, 67144, 9905, + 83145, 65730, 83147, 120374, 8427, 83142, 55246, 120376, 42895, 11497, + 64687, 74008, 42592, 3871, 983584, 128305, 9111, 5741, 83325, 120987, + 120366, 119111, 11150, 0, 120368, 128855, 11648, 83126, 83127, 83128, + 41587, 70391, 83123, 71108, 42113, 983588, 127155, 12172, 83121, 71443, + 65298, 65723, 68289, 73871, 65724, 7928, 120354, 983095, 41595, 73730, + 64671, 42118, 73830, 66042, 10355, 983110, 7875, 983669, 41598, 3993, + 121269, 1545, 40971, 536, 127075, 43029, 0, 121000, 65173, 65286, 0, + 70331, 195012, 0, 94065, 0, 41375, 5402, 83035, 128192, 1687, 120503, + 917817, 0, 78194, 64326, 40969, 10526, 73747, 8323, 40968, 1339, 11731, + 78756, 127108, 65460, 12242, 128513, 8020, 10843, 11554, 917867, 0, 8266, + 41006, 65722, 83041, 10710, 74045, 118942, 67667, 64567, 119155, 83313, + 128778, 71889, 67857, 120687, 0, 92958, 11755, 66305, 68332, 0, 10917, + 93979, 0, 11272, 2040, 41247, 41326, 195060, 1741, 42370, 1227, 83119, + 83120, 11413, 126583, 83115, 5283, 1586, 4978, 68050, 1984, 11830, 43819, + 92293, 40984, 42904, 9373, 0, 12916, 6284, 194888, 41663, 983093, 0, + 68313, 9237, 9385, 41648, 0, 128953, 2299, 41666, 1830, 73783, 2056, + 41287, 92610, 0, 71917, 42219, 68086, 120327, 41987, 41676, 983059, + 120823, 126553, 41670, 0, 92590, 2796, 55291, 11683, 9902, 74521, 67988, + 11451, 82995, 78855, 42631, 2359, 71890, 67844, 74164, 41238, 548, 11405, + 13133, 64368, 127270, 120925, 66272, 397, 43622, 42139, 9547, 9590, + 128238, 1614, 43661, 64356, 66307, 6651, 1358, 120871, 428, 9620, 1466, + 78112, 10982, 113785, 1333, 7104, 407, 6425, 128834, 74253, 127993, 0, 0, + 5804, 11976, 8554, 92721, 0, 70167, 9057, 42294, 41218, 125097, 121290, + 78137, 1883, 10952, 8048, 70443, 41225, 92621, 42915, 128616, 128512, + 128629, 4407, 74648, 65809, 11837, 194821, 8448, 7141, 74183, 120334, + 12675, 12659, 74634, 42363, 120624, 68077, 55273, 10766, 12012, 2386, + 64732, 9170, 917821, 9123, 64585, 10296, 119158, 7140, 10977, 127378, + 4164, 9081, 0, 120569, 42049, 42042, 8709, 128283, 126477, 120637, 42419, + 64799, 42047, 0, 194820, 8470, 11807, 65897, 577, 0, 983760, 74300, 0, + 68087, 74840, 126474, 0, 128791, 92224, 8736, 1414, 42643, 9683, 43486, + 74344, 0, 2536, 983941, 66330, 121238, 0, 0, 0, 0, 0, 194830, 66317, + 69945, 66315, 2106, 67809, 11273, 120986, 43004, 7541, 82988, 0, 961, + 64307, 66324, 64906, 125080, 3106, 65917, 41284, 1696, 983130, 891, + 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 120878, 0, 0, 194826, 92688, 3566, 2322, 120371, 70831, 11449, 128187, 42868, 41285, - 3547, 0, 0, 113746, 983398, 43216, 6089, 78682, 68490, 120578, 4170, + 3547, 0, 0, 113746, 983400, 43216, 6089, 78682, 68490, 120578, 4170, 1029, 127761, 127036, 119224, 42374, 0, 744, 92883, 113739, 0, 65823, - 127826, 11182, 3551, 92938, 0, 4623, 55268, 128738, 4598, 983162, 65136, - 127136, 0, 128169, 10851, 0, 6179, 92602, 6180, 0, 11952, 120778, 78648, - 11972, 78646, 78647, 78644, 78645, 177, 78643, 6176, 120580, 983696, 0, - 6177, 9020, 78652, 78653, 6178, 120249, 120242, 128027, 67673, 2214, - 8754, 128652, 120237, 2137, 43081, 194663, 120239, 9136, 66889, 4401, - 41280, 70801, 8974, 2308, 194750, 74149, 128327, 2318, 983183, 66361, - 8198, 0, 64360, 12601, 42536, 65266, 120827, 67279, 92462, 6970, 5404, - 43332, 3667, 7936, 12925, 126989, 6385, 128482, 128403, 118949, 10874, - 65505, 120002, 0, 42053, 2075, 42057, 11083, 42052, 0, 67266, 67651, 0, - 9665, 92300, 983666, 13181, 0, 0, 0, 70088, 74148, 0, 70419, 120225, - 120229, 120224, 74172, 41145, 66404, 94096, 74422, 41148, 8683, 7594, - 113686, 0, 119090, 10869, 43458, 41146, 92407, 11441, 0, 3512, 119633, - 92965, 8103, 0, 0, 65184, 11780, 41563, 42796, 129055, 69742, 41544, - 65146, 71314, 0, 0, 129177, 19942, 0, 118908, 7988, 10436, 74273, 3271, - 73804, 64711, 0, 94064, 983071, 0, 3804, 13070, 11557, 42044, 0, 1095, 0, - 3599, 127774, 0, 128861, 8514, 0, 0, 0, 74346, 66697, 0, 11684, 0, 92486, - 917603, 0, 42043, 43232, 66677, 0, 42046, 74157, 4036, 126481, 0, 128213, - 194861, 0, 11954, 70348, 1450, 12986, 1340, 0, 65441, 92722, 0, 0, - 125117, 0, 917542, 0, 0, 6539, 92948, 126607, 124961, 125060, 0, 120492, - 41190, 3973, 119365, 4575, 41193, 7982, 429, 0, 119129, 0, 194848, 65792, - 128408, 118968, 6417, 118918, 78178, 0, 128970, 0, 0, 4919, 10590, - 128556, 7755, 0, 92942, 64548, 120506, 1621, 10214, 65126, 68253, 127004, - 983616, 12188, 983668, 1617, 8050, 0, 5015, 0, 119174, 42590, 70354, - 1756, 78181, 0, 65768, 6352, 41892, 0, 7555, 13103, 5408, 2817, 1214, - 69919, 92335, 983125, 0, 68224, 125055, 41764, 7957, 8689, 64723, 1056, - 42896, 74147, 3559, 983918, 55286, 7073, 65850, 12327, 70853, 119028, 0, - 0, 128442, 2341, 8450, 8484, 8474, 194884, 68322, 70079, 8461, 67721, - 12153, 12799, 0, 43709, 43708, 9451, 7571, 13073, 43847, 0, 681, 983252, - 703, 0, 3272, 8781, 12894, 70077, 11709, 92288, 70514, 0, 92532, 0, - 11338, 120768, 3276, 0, 0, 65928, 0, 0, 65021, 64795, 74574, 0, 10047, - 78814, 3262, 78811, 42711, 0, 0, 68478, 163, 576, 9895, 1655, 70131, - 74591, 78815, 78816, 66888, 0, 0, 70513, 10039, 0, 983945, 5623, 5717, - 5776, 43488, 0, 66885, 41591, 11036, 65252, 92382, 0, 0, 0, 67848, - 128128, 0, 0, 8887, 127521, 7295, 11031, 0, 43157, 0, 8946, 10348, 10412, - 8755, 0, 0, 5718, 13221, 0, 0, 78135, 70515, 917616, 8810, 74499, 686, 0, - 71362, 4619, 118954, 6654, 73769, 74426, 0, 12040, 65689, 10128, 65118, - 0, 119151, 74205, 92651, 128902, 2401, 68144, 8792, 983648, 0, 65455, 0, - 74328, 0, 74561, 983718, 12886, 127920, 66624, 128350, 43557, 10300, - 10161, 10396, 71210, 78602, 118945, 9984, 73851, 3010, 6441, 70349, 1458, - 41475, 72429, 93975, 127910, 11479, 0, 120356, 6350, 12864, 69674, 78114, - 1061, 64780, 2001, 43111, 55230, 124946, 4052, 113673, 7626, 0, 0, 1045, - 0, 5631, 41113, 127544, 0, 43707, 74127, 0, 0, 8486, 0, 73758, 2335, - 4362, 983195, 126561, 69221, 1025, 127277, 42625, 70325, 78084, 41443, 0, - 128206, 0, 1774, 1523, 0, 0, 41445, 78236, 11207, 8567, 41442, 3988, - 74843, 78237, 118910, 0, 65274, 8564, 78199, 78238, 127515, 0, 0, 43446, - 0, 66513, 6256, 917807, 579, 55218, 10206, 78878, 6375, 2673, 0, 11814, - 0, 4488, 128716, 120554, 68451, 10444, 118846, 127334, 11799, 74407, - 68466, 4487, 127849, 42832, 1032, 120267, 43450, 78257, 7203, 124998, - 614, 70361, 127215, 120615, 119622, 78262, 128669, 127323, 0, 43121, - 127211, 128366, 92513, 1050, 7549, 0, 0, 9314, 70365, 92898, 120616, 0, - 10057, 70434, 127313, 128577, 66504, 983171, 0, 2307, 128456, 64333, - 127312, 128547, 73873, 0, 94035, 0, 127973, 128708, 70446, 10360, 6746, - 120473, 92245, 440, 0, 13085, 9233, 74216, 0, 127785, 9957, 128285, - 66447, 8046, 64963, 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, - 93965, 10487, 69878, 12527, 0, 7970, 125073, 128660, 0, 65769, 5243, - 9849, 5239, 65771, 983235, 0, 5237, 69714, 0, 10103, 5247, 4769, 983139, - 118977, 12873, 2283, 92931, 0, 3008, 4896, 128102, 12087, 0, 55231, - 41103, 92256, 64565, 4773, 0, 78549, 70074, 4770, 66891, 917567, 8731, - 65378, 66911, 120619, 9122, 128033, 126600, 4774, 3019, 9997, 12834, 0, - 9456, 10215, 120547, 0, 78556, 0, 0, 74776, 4281, 4768, 120572, 41535, - 4099, 9017, 69993, 0, 78095, 2225, 78096, 118946, 0, 0, 78098, 0, 42814, - 880, 0, 113764, 66870, 2134, 0, 10116, 9877, 92329, 0, 0, 7095, 8379, - 74116, 6778, 0, 78090, 8243, 2427, 128141, 7093, 0, 11585, 195003, 9962, - 0, 12223, 128485, 92430, 1434, 120254, 5637, 11573, 0, 0, 0, 19951, - 113730, 74419, 0, 0, 55283, 0, 70363, 74437, 1156, 8740, 92415, 3782, - 64331, 0, 41370, 1014, 8261, 128595, 0, 10835, 0, 65536, 0, 120463, - 125051, 7702, 118824, 128976, 43010, 65779, 65783, 1150, 10547, 5700, 0, - 120603, 65383, 2339, 42594, 5697, 118788, 120479, 128576, 0, 42257, 5696, - 92677, 120465, 3862, 9643, 0, 70183, 7634, 65167, 9845, 0, 0, 5701, 9722, - 41490, 128719, 1426, 68217, 983614, 68447, 42204, 55270, 8571, 67403, - 78067, 43859, 78818, 92719, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, - 43194, 64712, 10744, 0, 990, 5647, 0, 7387, 78734, 41114, 11477, 5646, - 12879, 11018, 128362, 3945, 92589, 0, 194989, 194718, 0, 78212, 127746, - 1020, 73763, 983835, 78731, 5648, 64748, 194910, 78733, 10205, 3545, - 983585, 6984, 0, 74051, 128901, 43242, 120458, 2667, 0, 125037, 0, 9911, - 0, 65020, 10097, 119166, 127145, 983662, 118836, 983748, 78208, 1140, - 78426, 0, 10159, 0, 0, 8128, 0, 68326, 917965, 1815, 19910, 890, 0, 3267, - 92291, 0, 10123, 0, 4410, 1041, 10576, 6354, 92581, 580, 74232, 0, - 128347, 0, 0, 0, 19938, 65906, 127819, 0, 0, 3298, 5375, 10142, 0, 8215, - 0, 6134, 41246, 64402, 983147, 69899, 0, 0, 0, 41382, 0, 128653, 5173, - 65348, 527, 0, 113782, 92612, 128250, 78797, 11915, 0, 0, 10072, 0, - 42695, 2329, 42250, 0, 11187, 69667, 12245, 1568, 94033, 0, 0, 113705, 0, - 11201, 92708, 74769, 126470, 67680, 9069, 6144, 0, 0, 73822, 0, 128010, - 64917, 41521, 118934, 494, 13250, 92250, 65098, 6364, 956, 113792, 12830, - 10462, 73740, 73734, 0, 0, 0, 66449, 13263, 74281, 69217, 13171, 127796, - 0, 0, 63885, 128528, 1044, 41276, 128363, 0, 0, 42068, 11795, 124985, 0, - 0, 0, 42450, 3907, 0, 64526, 11829, 68197, 12295, 0, 11475, 70329, 3020, - 11537, 0, 66441, 120761, 7098, 125071, 0, 1057, 566, 42696, 0, 3016, - 42274, 43464, 66490, 12921, 66571, 78472, 71207, 3006, 4620, 127237, - 983328, 0, 0, 64659, 0, 127749, 55253, 6357, 6362, 8626, 71337, 2216, - 9090, 65377, 41596, 0, 42920, 1698, 0, 64477, 0, 43813, 1053, 0, 78269, - 0, 92977, 1052, 1051, 459, 1060, 74349, 66479, 67689, 66871, 0, 70327, - 42490, 689, 6508, 4163, 42298, 8639, 66641, 4246, 0, 43514, 12130, - 983620, 42337, 64596, 64375, 66481, 127850, 0, 0, 6359, 0, 43471, 983768, - 0, 120379, 127274, 0, 6358, 6361, 1926, 6356, 92627, 7898, 8110, 10935, - 0, 10069, 5830, 127773, 43685, 74307, 0, 42910, 0, 8693, 78611, 119565, - 128621, 120413, 92192, 127257, 65894, 983566, 0, 64296, 983923, 0, 0, - 119187, 2135, 11836, 0, 0, 78869, 42313, 5579, 92412, 70384, 129113, - 43854, 71913, 5578, 11840, 128115, 42023, 6234, 5669, 92275, 0, 128439, - 0, 127506, 68202, 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 2220, 42465, - 41330, 194987, 5795, 65512, 119006, 65702, 0, 120801, 65251, 68228, - 65710, 128399, 128429, 67672, 0, 5370, 70465, 2931, 1638, 10966, 10188, - 65878, 118848, 0, 69694, 69879, 74585, 8172, 42017, 92756, 10844, 0, - 128195, 92424, 6374, 119998, 128690, 286, 78023, 1062, 0, 119999, 0, - 7395, 127783, 1070, 64900, 7153, 6095, 41865, 0, 3015, 128023, 126465, - 5211, 983083, 6400, 0, 194983, 70054, 8189, 11276, 0, 0, 372, 128829, 0, - 113783, 42102, 41585, 128202, 0, 42101, 276, 78402, 67427, 33, 67425, - 67424, 9007, 67430, 41588, 66033, 427, 10763, 118819, 70872, 127884, - 983943, 1031, 6257, 0, 42104, 0, 983980, 2328, 66837, 1071, 42899, - 125088, 74848, 0, 113793, 194981, 1047, 0, 194943, 42908, 128480, 69723, - 10651, 70356, 0, 125113, 72433, 66829, 70817, 5711, 41633, 12098, 65571, - 9166, 0, 5710, 128551, 6790, 65168, 13216, 0, 69716, 69726, 0, 64611, - 41623, 195001, 5715, 69654, 71915, 0, 5712, 2761, 41620, 68124, 3074, - 5722, 0, 8643, 68525, 0, 118906, 2757, 11067, 9718, 66419, 8910, 10689, - 6479, 0, 0, 71173, 78607, 9196, 69670, 125070, 0, 128338, 0, 118911, 0, - 113682, 129194, 0, 0, 120010, 73795, 8701, 68130, 119616, 120522, 0, - 42477, 194994, 12123, 4495, 43569, 0, 0, 0, 64946, 10992, 0, 120009, - 70336, 113688, 9318, 93986, 13249, 42902, 73808, 0, 65457, 42249, 7639, - 43995, 67845, 42641, 5454, 0, 0, 70366, 120005, 119585, 983966, 5084, 0, - 0, 118861, 0, 733, 74646, 78014, 78436, 78435, 11204, 0, 9218, 1731, 0, - 92937, 71070, 67990, 0, 0, 0, 70323, 127018, 92492, 5155, 120000, 5358, - 983744, 0, 917767, 64424, 71236, 3840, 64314, 41432, 0, 78315, 68430, - 67980, 43253, 65943, 0, 3371, 10988, 127960, 8771, 1479, 0, 0, 1109, - 11580, 43657, 64601, 12205, 92782, 0, 64507, 8868, 399, 67978, 74842, - 983284, 983721, 12149, 13088, 551, 0, 10156, 12119, 92572, 118916, 2544, - 65074, 119211, 983296, 0, 78011, 351, 78013, 0, 128713, 55229, 0, 74268, - 78008, 128094, 0, 42377, 0, 0, 0, 113767, 74320, 9013, 4054, 0, 194580, - 113740, 0, 73960, 5585, 65881, 2549, 74469, 74457, 11104, 5584, 8358, - 128975, 64215, 66864, 10919, 71208, 7980, 126601, 113698, 2218, 41800, - 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0, 43452, 67245, 92993, - 42573, 66879, 0, 78129, 69767, 78752, 74392, 8135, 6450, 10055, 77996, 0, - 0, 119225, 5657, 0, 9626, 0, 77994, 10179, 5654, 12939, 92573, 120799, - 71860, 0, 5652, 10945, 917927, 66486, 0, 3661, 7863, 0, 0, 0, 70332, - 127194, 5659, 0, 78692, 66729, 5655, 983626, 42168, 194581, 1055, 71171, - 71888, 66310, 74030, 70516, 12146, 70362, 73956, 11618, 0, 42720, 92949, - 10272, 10304, 10368, 42518, 594, 10244, 10248, 7407, 983887, 64870, - 74191, 3467, 71073, 7881, 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, - 69222, 65927, 0, 70036, 69696, 69769, 64656, 983726, 0, 94020, 70056, - 5666, 65227, 5318, 63994, 119596, 9091, 10798, 78664, 78508, 10186, 0, - 7732, 983724, 64556, 0, 983979, 5668, 74445, 0, 74645, 5670, 113795, - 127297, 11820, 2992, 7826, 5667, 19952, 120807, 113766, 12749, 74551, - 67757, 0, 66496, 4361, 119260, 1306, 9286, 1497, 128286, 94004, 70359, 0, - 3571, 13247, 5874, 7973, 66353, 68435, 78278, 67896, 43192, 74621, 78265, - 553, 113768, 127012, 93053, 5829, 0, 4587, 78285, 65912, 194919, 12746, - 0, 70338, 119924, 5633, 119927, 74259, 94102, 94099, 64905, 94105, 9512, - 94103, 12742, 6443, 983806, 0, 9135, 128863, 41564, 0, 55219, 128832, - 983851, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 124936, - 128390, 118880, 2425, 65182, 128769, 43636, 5221, 78410, 328, 0, 983809, - 69815, 5636, 119917, 5329, 0, 5638, 119918, 7940, 64938, 43223, 43760, - 5635, 3373, 2986, 78292, 74223, 3437, 78291, 6203, 4247, 71169, 11920, - 8274, 68240, 983658, 1657, 41561, 78299, 78295, 5639, 2954, 5660, 5640, - 78303, 983685, 71179, 42227, 68301, 0, 41637, 67872, 194813, 78310, - 41625, 43362, 78309, 120713, 11705, 5642, 0, 5486, 0, 4356, 11710, 0, - 12051, 69938, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, 78750, - 127293, 42228, 983714, 73890, 118972, 127352, 2800, 0, 5645, 64964, 8652, - 2547, 66484, 43634, 0, 5608, 65890, 43808, 0, 67621, 64932, 9000, 71204, - 67235, 92673, 1865, 128706, 5613, 66401, 0, 0, 5610, 0, 71199, 65826, - 2069, 0, 10787, 43999, 2997, 0, 5609, 78316, 65319, 78313, 12316, 5875, - 2412, 0, 8186, 9807, 74269, 66294, 13130, 65874, 0, 5807, 113678, 10030, - 5306, 12364, 118863, 92970, 11704, 0, 92583, 10211, 0, 120579, 0, 983202, - 11706, 9710, 125022, 0, 120655, 413, 65623, 7118, 983949, 9133, 74262, 0, - 1042, 0, 64779, 12171, 119240, 6185, 64776, 4984, 0, 708, 11391, 0, - 12241, 92720, 983899, 1308, 194992, 2534, 810, 0, 0, 128016, 71849, - 71869, 1917, 3000, 125140, 120184, 120739, 2364, 66387, 74470, 66618, - 65680, 66411, 10027, 71841, 128154, 12337, 74283, 127368, 983167, 2980, - 755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, 92276, 44011, - 8730, 194997, 127854, 78312, 7274, 119250, 0, 7275, 78304, 935, 0, 65840, - 377, 42325, 11649, 127363, 65253, 64301, 128835, 78308, 42341, 65284, - 2417, 0, 12884, 19912, 7907, 10768, 78300, 194998, 0, 10673, 119217, - 7248, 0, 43515, 1781, 5496, 3627, 62, 1649, 67876, 964, 0, 66403, 78226, - 66393, 92897, 70355, 66409, 0, 127534, 43689, 127911, 13142, 78812, - 42415, 66575, 4542, 69909, 43547, 0, 0, 7677, 2991, 4946, 42454, 11565, - 7949, 0, 69759, 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 70810, - 6478, 9898, 43673, 65237, 6241, 7106, 4877, 129108, 6238, 0, 10548, - 127049, 4409, 0, 0, 64798, 70805, 5346, 128240, 94047, 6237, 4874, 66851, - 9176, 92882, 126553, 65231, 65884, 12678, 78748, 118912, 11378, 44018, - 42785, 2408, 3251, 11203, 983159, 5685, 0, 2461, 11052, 7091, 5342, 8317, - 0, 68163, 5340, 120559, 127820, 43635, 73928, 127529, 71069, 128395, 0, - 128510, 65482, 983580, 9142, 0, 68506, 0, 10938, 0, 118790, 1182, 2542, - 4826, 0, 0, 72438, 529, 8580, 0, 0, 10586, 10790, 10839, 66023, 41593, - 41207, 0, 983825, 41594, 225, 42828, 0, 0, 983938, 11376, 74379, 10721, - 67664, 3438, 42097, 127267, 11084, 3194, 41870, 266, 78305, 120183, - 41873, 120575, 11324, 120531, 0, 8420, 64918, 128839, 41871, 41338, 3734, - 7734, 43683, 8750, 66605, 66011, 92514, 40965, 127937, 0, 5161, 10572, 0, - 42906, 0, 64349, 7287, 42162, 120406, 983643, 126605, 11167, 69220, - 12359, 43429, 41369, 1697, 12191, 0, 68633, 7286, 0, 68635, 10031, - 125058, 9870, 67726, 8620, 65824, 0, 11938, 0, 7285, 983557, 119577, - 42678, 66842, 43677, 41583, 0, 65799, 92623, 0, 129168, 983936, 78169, - 66199, 0, 3609, 68624, 0, 832, 120693, 120770, 78473, 66007, 78471, - 65703, 71256, 128517, 42732, 5180, 92699, 41395, 41530, 11691, 64773, - 92214, 74002, 0, 0, 128645, 6348, 243, 13200, 983813, 6024, 92309, 9979, - 10037, 41529, 10648, 8538, 43687, 0, 0, 4285, 66195, 0, 4230, 92886, - 7367, 43256, 92353, 7563, 42376, 0, 68442, 120512, 0, 0, 214, 128578, 0, - 74856, 65893, 12208, 9973, 128386, 66311, 65589, 128277, 2603, 0, 70155, - 0, 70047, 0, 6022, 0, 2884, 0, 11620, 0, 43, 195020, 12682, 1016, 41107, - 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 70855, 2074, 113742, 78283, - 0, 12453, 70847, 983826, 74241, 126568, 6791, 12457, 78268, 0, 66278, 0, - 78279, 0, 0, 92358, 66637, 7995, 8759, 43421, 78277, 12449, 128552, - 71224, 43868, 8752, 3197, 4720, 10165, 0, 119249, 113715, 11595, 64893, - 118905, 43435, 124964, 125030, 4993, 0, 6168, 10934, 1946, 741, 0, 5494, - 4639, 127559, 1990, 11107, 4498, 74169, 67736, 0, 127272, 69734, 2960, - 73779, 0, 8969, 128117, 43424, 73959, 0, 2950, 119579, 6210, 65753, 370, - 0, 0, 0, 4953, 983682, 983701, 0, 0, 69230, 0, 0, 65688, 983246, 5063, - 3517, 2964, 43663, 917762, 6344, 74791, 10566, 10144, 66333, 8252, 729, - 66016, 78253, 0, 71317, 64923, 120571, 43669, 9032, 78263, 78264, 0, - 41215, 0, 65883, 0, 917774, 120602, 3761, 0, 0, 70068, 120408, 12912, - 119012, 3850, 128191, 0, 128389, 0, 0, 908, 0, 8611, 0, 0, 74642, 43691, - 41197, 0, 8978, 120540, 119135, 41586, 10527, 71079, 917848, 3848, 78739, - 113800, 127536, 65241, 5336, 983259, 128786, 663, 0, 10780, 0, 0, 78767, - 983257, 127163, 68193, 347, 0, 983086, 78775, 64675, 41582, 78774, 78744, - 65579, 12980, 78769, 12143, 69657, 78512, 128493, 11153, 41804, 78523, 0, - 78525, 0, 128859, 41584, 10681, 0, 983695, 73938, 73781, 128022, 4800, - 66661, 0, 66306, 64715, 66384, 9518, 6609, 10434, 70845, 11319, 1097, - 128964, 917850, 41730, 129181, 0, 73847, 78761, 65172, 41728, 41721, - 917911, 194769, 983795, 41203, 917612, 13110, 41726, 983855, 67077, 1000, - 69651, 0, 41140, 1209, 73978, 125059, 73750, 1073, 6321, 77878, 41138, 0, - 68213, 78000, 12167, 1115, 41605, 9794, 127062, 67671, 55248, 12237, + 127826, 11182, 3551, 92938, 983891, 4623, 55268, 128738, 4598, 983162, + 65136, 127136, 0, 128169, 10851, 120876, 6179, 92602, 6180, 0, 11952, + 74579, 78648, 11972, 78646, 78647, 78644, 78645, 177, 78643, 6176, + 120580, 983696, 125135, 6177, 9020, 78652, 78653, 6178, 120249, 120242, + 128027, 67673, 2214, 8754, 127051, 120237, 2137, 43081, 194663, 119114, + 9136, 66889, 4401, 41280, 70801, 8974, 2308, 194750, 74149, 128327, 2318, + 983183, 66361, 8198, 65626, 64360, 12601, 42536, 43931, 120827, 43930, + 92462, 6970, 5404, 43332, 3667, 7936, 12925, 126989, 6385, 128482, + 128403, 118949, 10874, 65505, 120002, 129151, 42053, 2075, 42057, 11083, + 42052, 0, 67266, 67651, 121104, 9665, 92300, 983666, 13181, 917617, 0, 0, + 70088, 74148, 0, 70419, 120225, 120229, 120224, 74172, 41145, 66404, + 94096, 74422, 41148, 8683, 7594, 113686, 75033, 119090, 10869, 43458, + 41146, 92407, 11441, 121456, 3512, 119633, 92965, 8103, 78140, 120847, + 65184, 11780, 41563, 42796, 129055, 69742, 41544, 65146, 71314, 0, 78109, + 129177, 19942, 983244, 118908, 7988, 10436, 74273, 3271, 73804, 64711, 0, + 94064, 983071, 128652, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, + 127774, 0, 128861, 8514, 0, 0, 0, 74346, 66697, 0, 11684, 0, 92486, + 917603, 0, 42043, 43232, 66677, 74927, 42046, 74157, 4036, 126481, 0, + 128213, 194861, 83355, 11954, 70348, 1450, 12986, 1340, 0, 65441, 92722, + 0, 0, 125117, 0, 917542, 73812, 83053, 6539, 92948, 126607, 120702, + 92390, 0, 120492, 41190, 3973, 119365, 4575, 41193, 7982, 429, 917979, + 78891, 0, 194848, 65792, 128408, 83282, 6417, 118918, 78178, 0, 128970, + 0, 0, 4919, 10590, 128556, 7755, 0, 92942, 64548, 120506, 1621, 10214, + 65126, 68253, 127004, 983616, 12188, 983668, 1617, 8050, 0, 5015, 0, + 119174, 42590, 70354, 1756, 78181, 0, 65768, 6352, 41892, 0, 7555, 13103, + 5408, 2817, 1214, 69919, 92335, 121208, 0, 68224, 120872, 41764, 7957, + 8689, 64723, 1056, 42896, 74147, 3559, 983918, 55286, 7073, 65850, 12327, + 70853, 119028, 0, 128122, 128442, 2341, 8450, 8484, 8474, 194884, 68322, + 70079, 8461, 67721, 12153, 12799, 0, 43709, 43708, 9451, 7571, 13073, + 43847, 0, 681, 983254, 703, 127518, 3272, 8781, 12894, 70077, 11709, + 92288, 70514, 983900, 83175, 71436, 11338, 120768, 3276, 128968, 917989, + 65928, 0, 121367, 65021, 64795, 74574, 0, 10047, 78814, 3262, 78811, + 42711, 0, 0, 68478, 163, 576, 9895, 1655, 70131, 74591, 78815, 78816, + 66888, 0, 0, 70513, 10039, 120426, 5626, 5623, 5717, 5776, 43488, 83497, + 66885, 41591, 11036, 65252, 92382, 0, 0, 120111, 67848, 128128, 983595, + 983472, 8887, 127521, 7295, 11031, 983336, 43157, 0, 8946, 10348, 10412, + 8755, 119152, 0, 5718, 13221, 0, 0, 78135, 70515, 917616, 8810, 74499, + 686, 0, 71362, 4619, 118954, 6654, 73769, 74426, 0, 12040, 65689, 10128, + 65118, 68029, 119151, 74205, 92651, 128902, 2401, 68144, 8792, 983648, + 68044, 65455, 0, 74328, 0, 74561, 120763, 12886, 120952, 66624, 126578, + 43557, 10300, 10161, 10396, 71210, 78602, 118945, 9984, 73851, 3010, + 6441, 70349, 1458, 41475, 72429, 93975, 127910, 11479, 121355, 120356, + 6350, 12864, 69674, 71473, 1061, 64780, 2001, 43111, 55230, 124946, 4052, + 113673, 7626, 0, 120907, 1045, 0, 5631, 41113, 127544, 0, 43707, 74127, + 0, 983718, 8486, 0, 73758, 2335, 4362, 983195, 126561, 69221, 1025, + 127277, 42625, 70325, 78084, 41443, 0, 128206, 0, 1774, 1523, 121330, + 68059, 41445, 78236, 11207, 8567, 41442, 3988, 74843, 78237, 118910, 0, + 65274, 8564, 78199, 78238, 127515, 121272, 0, 43446, 0, 66513, 6256, + 917807, 579, 55218, 10206, 78195, 6375, 2673, 983886, 11814, 0, 4488, + 128716, 120554, 68451, 10444, 118846, 127334, 11799, 74407, 68466, 4487, + 127849, 42832, 1032, 120267, 43450, 78257, 7203, 124998, 614, 70361, + 127215, 120615, 119622, 78262, 127271, 127323, 0, 43121, 127211, 128366, + 92513, 1050, 7549, 121260, 82994, 9314, 70365, 92898, 68039, 127061, + 10057, 70434, 127313, 128577, 66504, 120963, 82992, 2307, 128456, 64333, + 127312, 128230, 73873, 983710, 94035, 0, 127973, 128708, 70446, 10360, + 6746, 120473, 92245, 440, 0, 13085, 9233, 74216, 0, 127785, 9957, 128285, + 66447, 8046, 64963, 65777, 10125, 74212, 42819, 10910, 120424, 1521, + 9896, 93965, 10487, 69878, 12527, 68737, 7970, 125073, 128660, 0, 65769, + 5243, 9849, 5239, 65771, 121429, 0, 5237, 69714, 68756, 10103, 5247, + 4769, 129302, 118977, 12873, 2283, 92931, 0, 3008, 4896, 128102, 12087, + 0, 55231, 41103, 92256, 64565, 4773, 120846, 78549, 70074, 4770, 66891, + 917567, 8731, 65378, 66911, 120619, 9122, 128033, 126600, 4774, 3019, + 9997, 12834, 0, 9456, 10215, 120547, 0, 78556, 0, 121332, 74776, 4281, + 4768, 120572, 41535, 4099, 9017, 69993, 983692, 78095, 2225, 78096, + 118946, 121097, 0, 78098, 0, 42814, 880, 0, 113764, 66870, 2134, 0, + 10116, 9877, 92329, 128960, 0, 7095, 8379, 74116, 6778, 0, 78090, 8243, + 2427, 128141, 7093, 0, 11585, 195003, 9962, 82990, 12223, 128485, 92430, + 1434, 120254, 5637, 11573, 0, 0, 0, 19951, 83389, 74419, 0, 194686, + 55283, 0, 70363, 74437, 1156, 8740, 83295, 3782, 64331, 0, 41370, 1014, + 8261, 120956, 917596, 10835, 917966, 65536, 83294, 120463, 125051, 7702, + 118824, 128976, 43010, 65779, 65783, 1150, 10547, 5700, 0, 120603, 65383, + 2339, 42594, 5697, 118788, 75018, 128576, 74923, 42257, 5696, 92677, + 120465, 3862, 9643, 0, 70183, 7634, 65167, 9845, 0, 0, 5701, 9722, 41490, + 128719, 1426, 68217, 983614, 68447, 42204, 55270, 8571, 67403, 78067, + 43859, 78818, 92719, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, 43194, + 64712, 10744, 78887, 990, 5647, 0, 7387, 78734, 41114, 11477, 5646, + 12879, 11018, 128362, 3945, 92589, 983466, 194989, 78883, 0, 78212, + 127746, 1020, 73763, 983835, 78731, 5648, 64748, 120920, 78733, 10205, + 3545, 983585, 6984, 128008, 74051, 128901, 43242, 120458, 2667, 128173, + 125037, 0, 9911, 0, 65020, 10097, 119166, 127145, 983662, 118836, 983748, + 78208, 1140, 78426, 0, 10159, 0, 0, 8128, 128644, 68326, 194911, 1815, + 19910, 890, 124935, 3267, 92291, 0, 10123, 121398, 4410, 1041, 10576, + 6354, 92581, 580, 74232, 983746, 128347, 0, 0, 128098, 19938, 65906, + 127819, 917811, 0, 3298, 5375, 10142, 0, 8215, 92633, 6134, 41246, 64402, + 983147, 69899, 194938, 0, 121426, 41382, 917927, 128653, 5173, 65348, + 527, 121174, 113782, 78469, 128250, 78797, 11915, 0, 0, 10072, 0, 42695, + 2329, 42250, 0, 11187, 69667, 12245, 1568, 94033, 83460, 0, 113705, + 917910, 11201, 92708, 74769, 126470, 67680, 9069, 6144, 0, 119840, 73822, + 0, 128010, 64917, 41521, 118934, 494, 13250, 92250, 65098, 6364, 956, + 113792, 12830, 10462, 73740, 73734, 0, 0, 983739, 66449, 13263, 74281, + 69217, 13171, 127796, 120564, 0, 63885, 127251, 1044, 41276, 128363, 0, + 0, 42068, 11795, 124985, 0, 127202, 0, 42450, 3907, 0, 64526, 11829, + 68197, 12295, 0, 11475, 70329, 3020, 11537, 0, 66441, 120761, 7098, + 125071, 0, 1057, 566, 42696, 127239, 3016, 42274, 43464, 66490, 12921, + 66571, 78472, 71207, 3006, 4620, 127237, 983330, 0, 0, 64659, 0, 127749, + 55253, 6357, 6362, 8626, 71337, 2216, 9090, 65377, 41596, 0, 42920, 1698, + 0, 64477, 917853, 43813, 1053, 0, 78269, 0, 92977, 1052, 1051, 459, 1060, + 74349, 66479, 67689, 66871, 917845, 70327, 42490, 689, 6508, 4163, 42298, + 8639, 66641, 4246, 0, 43514, 12130, 983308, 42337, 64596, 64375, 66481, + 127850, 983144, 127828, 6359, 0, 43471, 983768, 0, 83345, 75065, 0, 6358, + 6361, 1926, 6356, 92627, 7898, 8110, 10935, 0, 10069, 5830, 127773, + 43685, 74307, 0, 42910, 83301, 8693, 78611, 119565, 128621, 120413, + 92192, 121454, 65894, 194694, 0, 64296, 983681, 983644, 194959, 119187, + 2135, 11836, 0, 0, 78869, 42313, 5579, 92412, 70384, 129113, 43854, + 71913, 5578, 11840, 128115, 42023, 6234, 5669, 92275, 78620, 121171, + 68833, 92254, 68202, 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 2220, + 42465, 41330, 194987, 5795, 65512, 68774, 65702, 68770, 120801, 65251, + 68228, 65710, 128399, 128429, 67672, 68783, 5370, 70465, 2931, 1638, + 10966, 10188, 65878, 118848, 0, 69694, 69879, 74585, 8172, 42017, 92756, + 10844, 121016, 128195, 92424, 6374, 119998, 121075, 286, 78023, 1062, 0, + 119999, 0, 7395, 127783, 1070, 64900, 7153, 6095, 41865, 194640, 3015, + 68743, 68740, 5211, 68805, 6400, 68749, 68748, 68760, 8189, 11276, 68754, + 70284, 372, 128829, 68761, 113783, 42102, 41585, 127751, 0, 42101, 276, + 78402, 67427, 33, 67425, 67424, 9007, 67430, 41588, 66033, 427, 10763, + 118819, 70872, 127884, 983943, 1031, 6257, 92489, 42104, 0, 983980, 2328, + 66837, 1071, 42899, 125088, 74848, 120857, 113793, 194981, 1047, 0, + 194943, 42908, 128480, 69723, 10651, 70356, 0, 125113, 72433, 66829, + 70817, 5711, 41633, 12098, 65571, 9166, 0, 5710, 128551, 6790, 65168, + 13216, 983150, 69716, 69726, 0, 64611, 41623, 195001, 5715, 69654, 71915, + 0, 5712, 2761, 41620, 68124, 3074, 5722, 0, 8643, 68525, 0, 118906, 2757, + 11067, 9718, 66419, 8910, 10689, 6479, 0, 0, 71173, 78607, 9196, 69670, + 125070, 0, 128338, 120335, 118911, 0, 94043, 129194, 0, 0, 120010, 73795, + 8701, 68130, 119616, 120522, 0, 42477, 194994, 12123, 4495, 43569, 0, + 129296, 0, 64946, 10992, 0, 74566, 70336, 113688, 9318, 93986, 13249, + 42902, 73808, 0, 65457, 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, + 70366, 120005, 119585, 121212, 5084, 121189, 121134, 75062, 0, 733, + 74646, 78014, 68767, 78435, 11204, 0, 9218, 1731, 0, 92937, 71070, 67990, + 983125, 0, 0, 70323, 121371, 92492, 5155, 120000, 5358, 983744, 0, + 917767, 64424, 71236, 3840, 64314, 41432, 121316, 78315, 68430, 67980, + 43253, 65943, 0, 3371, 10988, 127960, 8771, 1479, 0, 0, 1109, 11580, + 43657, 64601, 12205, 92782, 0, 64507, 8868, 399, 67978, 74842, 983286, + 121336, 12149, 13088, 551, 0, 10156, 12119, 92572, 118916, 2544, 65074, + 119211, 983298, 0, 78011, 351, 68764, 0, 128713, 55229, 0, 74268, 78008, + 128094, 0, 42377, 0, 0, 0, 113767, 74320, 9013, 4054, 0, 194580, 113740, + 0, 73960, 5585, 65881, 2549, 74469, 74457, 11104, 5584, 8358, 126473, + 64215, 66864, 10919, 70480, 7980, 126601, 113698, 2218, 41800, 5589, + 82983, 2664, 41613, 5586, 118890, 0, 11356, 121120, 194833, 43452, 67245, + 92993, 42573, 66879, 83329, 67810, 69767, 78752, 74392, 8135, 6450, + 10055, 77996, 119948, 983173, 119225, 5657, 0, 9626, 121453, 77994, + 10179, 5654, 12939, 92573, 120799, 71860, 0, 5652, 10945, 194599, 66486, + 0, 3661, 7863, 0, 68069, 983675, 70332, 127194, 5659, 194606, 78692, + 66729, 5655, 983626, 42168, 121131, 1055, 71171, 71888, 66310, 74030, + 70516, 12146, 70362, 73956, 11618, 0, 42720, 92949, 10272, 10304, 10368, + 42518, 594, 10244, 10248, 7407, 74978, 64870, 74191, 3467, 71073, 7881, + 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, 69222, 65927, 0, 70036, + 69696, 69769, 64656, 917995, 0, 92409, 70056, 5666, 65227, 5318, 63994, + 119596, 9091, 10798, 78664, 78508, 10186, 983265, 7732, 983724, 64556, 0, + 983979, 5668, 74445, 74982, 74645, 5670, 113795, 127297, 11820, 2992, + 7826, 5667, 19952, 120807, 74981, 12749, 74551, 67757, 0, 66496, 4361, + 119260, 1306, 9286, 1497, 128286, 94004, 70359, 0, 3571, 13247, 5874, + 7973, 66353, 68435, 78278, 67896, 43192, 74621, 78265, 553, 113768, + 127012, 93053, 5829, 0, 4587, 78285, 65912, 194919, 12746, 128671, 70338, + 119924, 5633, 119927, 74259, 94102, 94099, 64905, 94105, 9512, 94103, + 12742, 6443, 983806, 0, 9135, 128863, 41564, 121517, 55219, 128832, + 983851, 194877, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, + 128903, 124936, 128390, 83215, 2425, 65182, 128769, 43636, 5221, 78410, + 328, 121031, 68736, 69815, 5636, 119917, 5329, 121293, 5638, 83166, 7940, + 64938, 43223, 43760, 5635, 3373, 2986, 78292, 74223, 3437, 68763, 6203, + 4247, 71169, 11920, 8274, 68240, 983658, 1657, 41561, 68778, 78295, 5639, + 2954, 5660, 5640, 78303, 983685, 71179, 42227, 68301, 83322, 41637, + 67872, 121105, 78310, 41625, 43362, 78309, 120713, 11705, 5642, 0, 5486, + 0, 4356, 11710, 0, 12051, 69938, 0, 5641, 8259, 126994, 1058, 0, 67630, + 0, 128927, 1144, 78750, 127293, 42228, 983714, 73890, 118972, 127352, + 2800, 83209, 5645, 64964, 8652, 2547, 66484, 43634, 121356, 5608, 65890, + 43808, 194972, 67621, 64932, 9000, 71204, 67235, 92673, 1865, 128706, + 5613, 66401, 121145, 0, 5610, 983226, 71199, 65826, 2069, 0, 10787, + 43999, 2997, 119932, 5609, 78316, 65319, 78313, 12316, 5875, 2412, 83206, + 8186, 9807, 74269, 66294, 13130, 65874, 71855, 5807, 113678, 10030, 5306, + 12364, 118863, 92970, 11704, 83202, 92583, 10211, 0, 120579, 0, 121063, + 11706, 9710, 125022, 82985, 120655, 413, 65623, 7118, 83167, 9133, 74262, + 917964, 1042, 125068, 64779, 12171, 119240, 6185, 64776, 4984, 121266, + 708, 11391, 0, 12241, 92720, 83399, 1308, 121258, 2534, 810, 125089, + 120933, 128016, 71849, 71869, 1917, 3000, 125140, 120184, 120739, 2364, + 66387, 74470, 66618, 65680, 66411, 10027, 71841, 128154, 12337, 74283, + 127368, 983167, 2980, 755, 69774, 931, 13124, 68068, 6363, 2748, 121022, + 0, 65041, 92276, 44011, 8730, 194997, 127854, 78312, 7274, 119250, 92988, + 7275, 78304, 935, 127052, 65840, 377, 42325, 11649, 127363, 65253, 64301, + 128835, 78308, 42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 78300, + 194998, 194912, 10673, 68779, 7248, 68786, 43515, 1781, 5496, 3627, 62, + 1649, 67876, 964, 121034, 66403, 78226, 66393, 92897, 70355, 66409, 0, + 83398, 43689, 127911, 13142, 78812, 42415, 66575, 4542, 69909, 43547, + 83028, 0, 7677, 2991, 4946, 42454, 11565, 7949, 0, 69759, 11341, 42494, + 3073, 65625, 9714, 11692, 4657, 0, 70810, 6478, 9898, 43673, 65237, 6241, + 7106, 4877, 129108, 6238, 0, 10548, 127049, 4409, 0, 0, 64798, 70805, + 5346, 128240, 94047, 6237, 4874, 66851, 9176, 92882, 121153, 65231, + 65884, 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 11203, + 983159, 5685, 0, 2461, 11052, 7091, 5342, 8317, 121446, 68163, 5340, + 120559, 127820, 43635, 73928, 125001, 71069, 83318, 0, 83317, 65482, + 121394, 9142, 0, 68506, 0, 10938, 0, 118790, 1182, 2542, 4826, 0, 126648, + 72438, 529, 8580, 127490, 0, 10586, 10790, 10839, 66023, 41593, 41207, + 68744, 983825, 41594, 225, 42828, 0, 67821, 121200, 11376, 74379, 10721, + 67664, 3438, 42097, 68862, 11084, 3194, 41870, 266, 78305, 120183, 41873, + 120575, 11324, 120531, 0, 8420, 64918, 128839, 41871, 41338, 3734, 7734, + 43683, 8750, 66605, 66011, 92514, 40965, 127937, 983216, 5161, 10572, + 917558, 42906, 0, 64349, 7287, 42162, 120406, 983643, 126605, 11167, + 69220, 12359, 43429, 41369, 1697, 12191, 0, 68633, 7286, 0, 68635, 10031, + 113766, 9870, 67726, 8620, 65824, 917855, 11938, 121308, 7285, 983557, + 119577, 42678, 66842, 43677, 41583, 0, 65799, 92623, 0, 129168, 128267, + 78169, 66199, 0, 3609, 68624, 70280, 832, 120693, 120770, 78473, 66007, + 78471, 65703, 71256, 128517, 42732, 5180, 92699, 41395, 41530, 11691, + 64773, 92214, 74002, 127790, 120548, 128645, 6348, 243, 13200, 120160, + 6024, 92309, 9979, 10037, 41529, 10648, 8538, 43687, 0, 917844, 4285, + 66195, 121370, 4230, 92886, 7367, 43256, 92353, 7563, 42376, 983271, + 68442, 120512, 0, 0, 214, 128578, 0, 74856, 65893, 12208, 9973, 128386, + 66311, 65589, 128277, 2603, 0, 70155, 78622, 70047, 127273, 6022, 195023, + 2884, 0, 11620, 0, 43, 195020, 12682, 1016, 41107, 0, 41121, 3885, 92, + 65456, 64608, 0, 74801, 70855, 2074, 113742, 78283, 0, 12453, 70847, + 983826, 74241, 126568, 6791, 12457, 78268, 0, 66278, 0, 78279, 0, 0, + 92358, 66637, 7995, 8759, 43421, 78277, 12449, 128552, 71224, 43868, + 8752, 3197, 4720, 10165, 113765, 119249, 113715, 11595, 64893, 118905, + 43435, 124964, 125030, 4993, 0, 6168, 10934, 1946, 741, 120650, 5494, + 4639, 127559, 1990, 11107, 4498, 74169, 67736, 83273, 127272, 69734, + 2960, 73779, 0, 8969, 128117, 43424, 73959, 126464, 2950, 119579, 6210, + 65753, 370, 121360, 0, 0, 4953, 195009, 121054, 113708, 0, 69230, 0, + 195010, 65688, 74951, 5063, 3517, 2964, 43663, 917762, 6344, 74791, + 10566, 10144, 66333, 8252, 729, 66016, 78253, 0, 71317, 64923, 120571, + 43669, 9032, 78263, 78264, 0, 41215, 0, 65883, 0, 917774, 74914, 3761, 0, + 0, 70068, 120408, 12912, 119012, 3850, 128191, 983256, 128389, 0, 0, 908, + 0, 8611, 121384, 0, 74642, 43691, 41197, 0, 8978, 120540, 119135, 41586, + 10527, 70426, 917848, 3848, 78739, 74917, 127536, 65241, 5336, 74883, + 128786, 663, 0, 10780, 0, 0, 78767, 983259, 127163, 68193, 347, 0, + 917544, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 68046, 12143, + 69657, 78512, 128493, 11153, 41804, 78523, 0, 78525, 0, 128859, 41584, + 10681, 0, 120979, 73938, 73781, 128022, 4800, 66661, 0, 66306, 64715, + 66384, 9518, 6609, 10434, 70845, 11319, 1097, 128964, 917564, 41730, + 129181, 121501, 73847, 74845, 65172, 41728, 41721, 194780, 194769, + 121499, 41203, 127056, 13110, 41726, 194856, 67077, 1000, 69651, 127509, + 41140, 1209, 73978, 125059, 73750, 1073, 6321, 77878, 41138, 983968, + 68213, 78000, 12167, 1115, 41605, 9794, 119904, 67671, 55248, 12237, 78787, 66314, 6587, 9290, 78782, 78783, 9231, 78781, 2959, 7926, 0, - 983948, 128833, 64398, 0, 119970, 12311, 119181, 78796, 78798, 78794, - 78795, 68434, 78793, 66670, 113797, 0, 12290, 120169, 0, 119873, 42142, - 9968, 8205, 0, 5131, 113694, 9627, 43646, 78542, 78535, 983212, 1944, - 1248, 10148, 127755, 119990, 119991, 12701, 78376, 11308, 119995, 0, - 113702, 66836, 65305, 65100, 4031, 42794, 120003, 7075, 8154, 119985, - 120007, 41817, 73934, 42275, 120011, 120012, 78526, 120014, 120015, 6041, - 0, 41899, 983286, 8002, 128367, 4364, 73732, 0, 64332, 0, 7813, 9064, - 119986, 10124, 7526, 8601, 7281, 68246, 7279, 12041, 1418, 10885, 12673, - 0, 129123, 9660, 983280, 13012, 4571, 917588, 0, 120164, 12078, 2970, - 129122, 10933, 0, 77870, 0, 77841, 0, 41599, 70159, 128831, 0, 12950, - 92160, 3486, 983973, 78311, 4239, 0, 127799, 66511, 92739, 2637, 64629, - 8460, 66834, 8476, 983975, 0, 68312, 78489, 65673, 1019, 78495, 4148, 0, - 12289, 0, 4316, 0, 13119, 8488, 5412, 66243, 9935, 92777, 73864, 983203, - 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 7120, 41736, - 92546, 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, 127284, - 66853, 73963, 41855, 41867, 65564, 11277, 65892, 11536, 10620, 92272, - 7115, 66030, 73932, 5498, 63876, 41536, 0, 68204, 92587, 3459, 8997, 0, - 92714, 0, 129027, 92512, 0, 66377, 69781, 0, 124972, 78511, 3161, 295, - 71257, 0, 92223, 127856, 78742, 9016, 43454, 63903, 63902, 43501, 0, - 3971, 983959, 70063, 2952, 78765, 11038, 10901, 63900, 63899, 63898, - 94043, 667, 12332, 63887, 6086, 41722, 0, 5172, 0, 983278, 4159, 983562, - 0, 9815, 63884, 19934, 63882, 41198, 8555, 63878, 63877, 42460, 6050, - 42708, 63881, 63872, 0, 42421, 0, 41723, 63875, 63874, 11460, 7432, 1913, - 41913, 63852, 66869, 128971, 42348, 73892, 6752, 446, 41911, 127906, + 917601, 128833, 64398, 71124, 119970, 12311, 119181, 78796, 68768, 78794, + 78795, 68434, 78793, 66670, 113797, 128579, 12290, 120169, 129093, + 119873, 42142, 9968, 8205, 0, 5131, 113694, 9627, 43646, 78542, 78535, + 983212, 1944, 1248, 10148, 127755, 119990, 119991, 12701, 78376, 11308, + 119995, 983493, 113702, 66836, 65305, 65100, 4031, 42794, 120003, 7075, + 8154, 119985, 120007, 41817, 73934, 42275, 120011, 120012, 78526, 120014, + 120015, 6041, 120520, 41899, 983288, 8002, 128367, 4364, 73732, 983570, + 64332, 120976, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 68246, 7279, + 12041, 1418, 10885, 12673, 121152, 121381, 9660, 917929, 13012, 4571, + 917588, 0, 118940, 12078, 2970, 129122, 10933, 0, 77870, 121243, 77841, + 0, 41599, 70159, 121342, 120885, 12950, 92160, 3486, 983973, 78311, 4239, + 128073, 127799, 66511, 68066, 2637, 64629, 8460, 66834, 8476, 983975, 0, + 68312, 78489, 65673, 1019, 78495, 4148, 0, 12289, 0, 4316, 0, 13119, + 8488, 5412, 66243, 9935, 92777, 73864, 983203, 41734, 8206, 74081, 9163, + 3286, 9072, 5867, 13302, 7622, 7120, 41736, 92546, 41731, 0, 7400, 5416, + 68663, 118924, 10817, 0, 41539, 127284, 66853, 73963, 41855, 41867, + 65564, 11277, 65892, 11536, 10620, 92272, 7115, 66030, 73932, 5498, + 63876, 41536, 0, 68204, 92587, 3459, 8997, 194719, 92714, 0, 127782, + 92512, 0, 66377, 69781, 0, 124972, 78511, 3161, 295, 71257, 0, 92223, + 121328, 78742, 9016, 43454, 63903, 63902, 43501, 68210, 3971, 983959, + 70063, 2952, 78765, 11038, 10901, 63900, 63899, 63898, 68095, 667, 12332, + 63887, 6086, 41722, 0, 5172, 0, 983280, 4159, 983562, 0, 9815, 63884, + 19934, 63882, 41198, 8555, 63878, 63877, 42460, 6050, 42708, 63881, + 63872, 120941, 42421, 195035, 41723, 63875, 63874, 11460, 7432, 1913, + 41913, 63852, 66869, 128971, 42348, 73892, 6752, 446, 41911, 127901, 63851, 63850, 41910, 128637, 63846, 2972, 12932, 7262, 69968, 63849, 63848, 63847, 113749, 6570, 8302, 7259, 63842, 4178, 10746, 7250, 13214, 10041, 8105, 63892, 127780, 69969, 1105, 4180, 127786, 12094, 9497, 0, - 63891, 63890, 63889, 63888, 5538, 9987, 0, 118932, 1678, 13274, 552, - 120654, 44010, 10785, 0, 11192, 4557, 74459, 9159, 10171, 13125, 63860, - 5540, 63858, 63865, 281, 13242, 63862, 74154, 0, 5536, 65568, 63857, - 1388, 71902, 0, 1077, 195000, 65099, 11531, 5834, 0, 0, 0, 0, 42773, - 127899, 0, 0, 119220, 0, 3663, 127027, 1112, 70335, 8686, 126611, 5334, - 65081, 43249, 74778, 127968, 11077, 125017, 6509, 0, 5327, 127965, 19907, - 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 43746, 73748, 63866, - 78626, 1915, 4846, 67755, 66371, 118984, 42105, 2990, 120128, 805, 69238, - 64438, 12070, 8760, 1117, 113750, 12212, 120123, 65174, 42357, 63835, - 63834, 0, 78240, 12225, 63838, 63837, 983853, 70173, 63833, 6042, 66360, - 8083, 128166, 0, 63821, 63820, 63819, 63818, 983904, 5227, 9047, 63822, - 127162, 6091, 0, 10691, 560, 5643, 8226, 119578, 63812, 63811, 63810, - 63809, 2289, 63815, 63814, 63813, 6047, 1597, 120143, 780, 206, 70126, - 4936, 65147, 8168, 63930, 2076, 1093, 9882, 63934, 2082, 63932, 128150, - 63929, 3546, 1605, 77934, 9806, 43472, 77933, 8400, 11343, 2086, 0, - 63926, 2984, 5968, 9287, 0, 4618, 42209, 11137, 13169, 5290, 2089, 1695, - 10743, 1088, 63825, 7268, 1084, 1085, 63829, 1083, 10131, 7283, 0, 63970, - 128358, 1092, 4754, 7273, 5252, 44016, 43627, 127921, 128920, 7408, - 11809, 917618, 127917, 0, 2965, 7258, 8808, 66572, 1089, 4187, 63937, - 42119, 42120, 11106, 940, 5787, 10099, 63938, 0, 74494, 12463, 2994, 0, - 118827, 68522, 9664, 70834, 77940, 67892, 77938, 74343, 67370, 0, 660, - 10127, 666, 9022, 5532, 43667, 5533, 12580, 78507, 6118, 222, 979, 3884, - 983392, 74151, 92652, 6502, 0, 11085, 128695, 63951, 12465, 917862, 0, - 128782, 63946, 1707, 63924, 12461, 63950, 63897, 63948, 63947, 63945, - 6038, 63943, 63942, 64685, 63895, 65838, 2276, 7776, 94076, 0, 92464, - 120444, 69730, 801, 43165, 1690, 63919, 63918, 63917, 13277, 43659, - 12951, 120638, 9906, 2054, 2334, 78515, 63916, 5483, 63914, 69737, 63911, - 5484, 63909, 63908, 2539, 120102, 43980, 5485, 0, 42697, 9061, 5534, - 10672, 4502, 124932, 253, 0, 68208, 120439, 9203, 74231, 0, 11530, 68634, - 68668, 0, 11127, 0, 10474, 43426, 13257, 42354, 128099, 983698, 70044, - 195065, 0, 8413, 66841, 0, 5693, 7272, 0, 13209, 64470, 65831, 74350, - 195063, 0, 0, 0, 126639, 120097, 0, 94078, 66840, 127767, 66608, 3111, - 41863, 8804, 42913, 78347, 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, - 55226, 128353, 63982, 7393, 12807, 43413, 63906, 1598, 63904, 71187, - 70393, 41729, 4423, 1307, 113692, 10515, 41589, 128698, 128918, 6218, - 113675, 1430, 0, 127778, 120606, 78754, 5413, 7619, 3255, 3493, 74032, - 11549, 10735, 41743, 73937, 6801, 983633, 4518, 10990, 65073, 5167, 4481, - 3771, 67093, 2710, 0, 66277, 41724, 67716, 43073, 41690, 12479, 983635, - 8380, 0, 71852, 70046, 1628, 127149, 128817, 129067, 65262, 6333, 10783, - 11172, 0, 63855, 70840, 113679, 0, 5339, 74323, 0, 13004, 66843, 4457, 0, - 127756, 194818, 127116, 5684, 8678, 10914, 43632, 5689, 65807, 70814, - 68464, 12633, 12870, 69705, 65183, 5688, 11926, 6033, 6310, 5686, 0, - 74251, 0, 120647, 128930, 50, 10558, 9871, 42612, 43655, 0, 983818, - 74284, 66468, 66905, 13259, 4448, 917804, 983845, 113734, 70043, 1321, 0, - 10640, 11539, 1151, 0, 917607, 124958, 127079, 71106, 127852, 0, 0, - 983075, 12501, 64604, 128657, 11527, 118870, 8812, 0, 11538, 8673, 12650, - 11020, 0, 66467, 2105, 8087, 78163, 69632, 9894, 0, 128943, 69995, 4636, - 55262, 78513, 4515, 2382, 0, 127055, 0, 120495, 0, 128284, 12277, 194627, - 11995, 92553, 0, 12158, 70170, 8741, 10197, 0, 92426, 0, 6531, 0, 127846, - 473, 43415, 92936, 983650, 1873, 1087, 124966, 0, 74280, 78527, 66439, - 43218, 983123, 194716, 7237, 12504, 71113, 0, 983571, 983886, 9489, 0, - 70843, 4384, 74220, 63845, 2058, 69741, 13295, 43191, 128030, 195054, - 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 70846, 4421, - 10592, 0, 495, 66400, 41712, 7983, 70833, 93997, 983330, 6347, 78715, - 7654, 41710, 4196, 0, 437, 41709, 73772, 70832, 0, 9465, 13290, 119180, - 4997, 64306, 0, 0, 4999, 194642, 67401, 126582, 4711, 120769, 0, 2739, 0, - 8044, 74313, 194643, 41789, 128142, 10809, 66279, 0, 0, 1779, 6600, 6601, - 41543, 5325, 642, 64187, 13058, 120449, 12875, 983804, 92186, 13229, - 71845, 10575, 43399, 0, 0, 41791, 1104, 0, 983725, 10655, 0, 0, 0, 0, - 1082, 195049, 8428, 6569, 0, 0, 78534, 69849, 6783, 0, 12993, 8049, - 41548, 44021, 6458, 983807, 128882, 4761, 63828, 4766, 64623, 1273, - 43407, 120677, 118876, 195045, 6912, 1313, 6322, 10483, 128627, 41545, 0, - 92449, 0, 11216, 0, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527, - 71910, 66320, 70161, 92972, 0, 0, 41537, 66453, 8303, 8282, 11817, 73857, + 63891, 63890, 63889, 63888, 5538, 9987, 0, 92739, 1678, 13274, 552, + 118834, 44010, 10785, 0, 11192, 4557, 74459, 9159, 10171, 13125, 63860, + 5540, 63858, 63865, 281, 13242, 63862, 74154, 0, 5536, 65568, 9574, 1388, + 71902, 0, 1077, 195000, 65099, 11531, 5834, 0, 0, 917789, 0, 42773, + 121331, 0, 0, 119220, 120912, 3663, 127027, 1112, 70335, 8686, 126611, + 5334, 65081, 43249, 74778, 127968, 11077, 125017, 6509, 0, 5327, 78776, + 19907, 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 43746, 73748, + 63866, 78626, 1915, 4846, 67755, 66371, 118984, 42105, 2990, 120128, 805, + 69238, 64438, 12070, 8760, 1117, 113750, 12212, 120123, 65174, 42357, + 63835, 63834, 983947, 78240, 12225, 63838, 63837, 983853, 70173, 63833, + 6042, 66360, 8083, 128166, 983733, 63821, 63820, 63819, 63818, 983904, + 5227, 9047, 63822, 74797, 6091, 0, 10691, 560, 5643, 8226, 119578, 63812, + 63811, 63810, 63809, 2289, 63815, 63814, 63813, 6047, 1597, 120143, 780, + 206, 70126, 4936, 65147, 8168, 63930, 2076, 1093, 9882, 63934, 2082, + 63932, 75050, 63929, 3546, 1605, 77934, 9806, 43472, 77933, 8400, 11343, + 2086, 0, 63926, 2984, 5968, 9287, 0, 4618, 42209, 11137, 13169, 5290, + 2089, 1695, 10743, 1088, 63825, 7268, 1084, 1085, 63829, 1083, 10131, + 7283, 0, 63970, 121165, 1092, 4754, 7273, 5252, 44016, 43627, 127921, + 128920, 7408, 11809, 83220, 121181, 0, 2965, 7258, 8808, 66572, 1089, + 4187, 63937, 42119, 42120, 11106, 940, 5787, 10099, 63938, 0, 74494, + 12463, 2994, 125136, 118827, 68522, 9664, 70834, 77940, 67892, 77938, + 74343, 67370, 0, 660, 10127, 666, 9022, 5532, 43667, 5533, 12580, 78507, + 6118, 222, 979, 3884, 983394, 74151, 83227, 6502, 983855, 11085, 121261, + 63951, 12465, 917862, 0, 128782, 63946, 1707, 63924, 12461, 63950, 63897, + 63948, 63947, 63945, 6038, 63943, 63942, 64685, 63895, 65838, 2276, 7776, + 94076, 121086, 92464, 120444, 69730, 801, 43165, 1690, 63919, 63918, + 63917, 13277, 43659, 12951, 120638, 9906, 2054, 2334, 78515, 63916, 5483, + 63914, 69737, 63911, 5484, 63909, 63908, 2539, 120102, 43980, 5485, 0, + 42697, 9061, 5534, 10672, 4502, 68057, 253, 0, 68208, 120439, 9203, + 74231, 0, 11530, 68634, 68668, 121242, 11127, 0, 10474, 43426, 13257, + 42354, 128099, 983698, 70044, 195065, 0, 8413, 66841, 0, 5693, 7272, 0, + 13209, 64470, 65831, 74350, 195063, 0, 0, 0, 126639, 120097, 0, 94078, + 66840, 127165, 66608, 3111, 41863, 8804, 42913, 78347, 7270, 0, 66606, + 6628, 1076, 7433, 1436, 73844, 55226, 128353, 63982, 7393, 12807, 43413, + 63906, 1598, 63904, 71187, 70393, 41729, 4423, 1307, 113692, 10515, + 41589, 128698, 128918, 6218, 92917, 1430, 0, 126513, 120606, 78754, 5413, + 7619, 3255, 3493, 74032, 11549, 10735, 41743, 73937, 6801, 983633, 4518, + 10990, 65073, 5167, 4481, 3771, 67093, 2710, 983593, 66277, 41724, 67716, + 43073, 41690, 12479, 983635, 8380, 121071, 71852, 70046, 1628, 121229, + 128817, 129067, 65262, 6333, 10783, 11172, 121473, 63855, 70840, 113679, + 0, 5339, 74323, 120946, 13004, 66843, 4457, 0, 127756, 194818, 127116, + 5684, 8678, 10914, 43632, 5689, 65807, 70814, 68464, 12633, 12870, 69705, + 65183, 5688, 11926, 6033, 6310, 5686, 119076, 74251, 0, 120647, 128930, + 50, 10558, 9871, 42612, 43655, 74403, 983818, 74284, 66468, 66905, 13259, + 4448, 119150, 121406, 83349, 70043, 1321, 0, 10640, 11539, 1151, 121186, + 917607, 124958, 127079, 71106, 127852, 0, 0, 983075, 12501, 64604, + 128657, 11527, 118870, 8812, 983706, 11538, 8673, 12650, 11020, 0, 66467, + 2105, 8087, 78163, 69632, 9894, 127137, 127856, 69995, 4636, 55262, + 78513, 4515, 2382, 0, 127055, 983695, 113780, 0, 118968, 12277, 121239, + 11995, 92553, 121006, 12158, 70170, 8741, 10197, 68780, 92426, 121285, + 6531, 83051, 127846, 473, 43415, 92936, 983650, 1873, 1087, 124966, 0, + 74280, 78527, 66439, 43218, 983123, 194716, 7237, 12504, 71113, 126559, + 128748, 120887, 9489, 0, 70843, 4384, 74220, 63845, 2058, 69741, 13295, + 43191, 128030, 128571, 1154, 3857, 1205, 0, 0, 6055, 12958, 120706, + 74168, 128388, 70846, 4421, 10592, 0, 495, 66400, 41712, 7983, 70833, + 93997, 983332, 6347, 78715, 7654, 41710, 4196, 0, 437, 41709, 73772, + 70832, 0, 9465, 13290, 119180, 4997, 64306, 121309, 0, 4999, 194642, + 67401, 126582, 4711, 120769, 120602, 2739, 0, 8044, 74313, 194643, 41789, + 128142, 10809, 66279, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, + 13058, 120449, 12875, 983804, 92186, 13229, 71845, 10575, 43399, 194577, + 0, 41791, 1104, 0, 983725, 10655, 983334, 983561, 120164, 0, 1082, + 121024, 8428, 6569, 0, 0, 78534, 69849, 6783, 194671, 12993, 8049, 41548, + 44021, 6458, 64728, 128882, 4761, 63828, 4766, 64623, 1273, 43407, + 120677, 118876, 195045, 6912, 1313, 6322, 10483, 128627, 41545, 126465, + 92449, 0, 11216, 121307, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527, + 71910, 66320, 70161, 74907, 0, 0, 41537, 66453, 8303, 8282, 11817, 73857, 10003, 73859, 65904, 7363, 1686, 0, 70115, 11467, 3664, 65921, 64299, - 124939, 128462, 0, 4324, 126, 42246, 119152, 69984, 67725, 65926, 7744, - 194636, 74277, 66283, 78052, 43817, 6966, 43822, 8136, 0, 65600, 1633, 0, - 126614, 4762, 1103, 70827, 70157, 4765, 983492, 13078, 0, 4760, 63827, - 2050, 10871, 43199, 1102, 0, 42236, 128867, 194667, 11546, 74794, 337, 0, - 42591, 8627, 12279, 1111, 0, 92161, 4707, 68206, 10143, 7883, 127081, - 7880, 4522, 8645, 5704, 13010, 69796, 8304, 92982, 0, 119575, 2293, - 70195, 66654, 129077, 92676, 0, 13008, 127121, 4385, 128736, 13011, 0, - 92569, 119161, 13009, 160, 2677, 0, 0, 41793, 65763, 74221, 70790, 41792, - 42770, 94054, 65762, 118829, 43821, 5709, 128296, 71076, 43816, 0, - 983896, 1079, 3867, 5708, 0, 0, 43797, 5706, 64768, 5705, 8791, 4005, 0, - 10237, 10991, 128816, 43459, 9173, 917581, 917580, 13170, 12540, 917577, - 42605, 120765, 126617, 68647, 917572, 10058, 0, 74867, 67730, 127078, - 3339, 11448, 1106, 917591, 917590, 917593, 3340, 74017, 917586, 917589, - 129141, 120541, 10605, 1309, 63966, 120743, 1754, 92226, 13246, 864, 0, - 118926, 8972, 128410, 7849, 120092, 92533, 13240, 195068, 5192, 4338, - 67982, 10948, 66825, 13199, 92575, 1236, 13208, 13261, 13189, 13188, - 93993, 71847, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, - 63781, 63780, 63779, 1583, 119923, 13260, 4550, 120598, 64205, 983245, - 71071, 41522, 41523, 68523, 983772, 118923, 11354, 94071, 0, 42795, 0, - 119195, 11394, 194646, 13236, 13272, 13194, 1334, 69926, 4479, 1178, - 65586, 68311, 66681, 119193, 4601, 0, 0, 983765, 66828, 0, 127839, 0, - 6809, 63786, 6031, 67402, 63791, 63790, 1145, 63788, 7910, 63785, 43153, - 754, 10192, 13105, 8183, 120741, 2037, 0, 64710, 10747, 125, 0, 64890, 0, - 127376, 0, 41719, 63758, 3523, 1074, 13258, 9536, 71056, 0, 4427, 74242, - 63757, 43145, 12217, 63754, 41532, 1349, 63750, 63749, 129025, 0, 0, - 63753, 63802, 41084, 120622, 68133, 41930, 63805, 63804, 11140, 63801, - 41082, 8140, 63798, 6260, 0, 128391, 94074, 63793, 11988, 3898, 92246, - 10201, 12238, 63795, 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, - 12523, 12945, 983329, 42203, 7950, 3124, 63771, 42787, 4386, 11148, 6973, - 2793, 12475, 129180, 128501, 63769, 9530, 983119, 12232, 13135, 8596, - 5681, 63762, 4595, 63760, 792, 113674, 64803, 0, 8742, 195029, 11053, - 128796, 63744, 128107, 128942, 7588, 63748, 1693, 63746, 43204, 5055, - 68426, 42063, 1090, 120679, 125008, 11665, 74133, 4558, 65685, 9523, - 983451, 0, 71216, 11513, 0, 6157, 63775, 63774, 63773, 13191, 12170, - 3500, 3139, 120538, 3170, 12485, 0, 10872, 78271, 13006, 64433, 120074, - 0, 941, 0, 129079, 917853, 65541, 11063, 0, 8228, 0, 42065, 128368, 0, - 94039, 0, 92455, 7386, 0, 64444, 0, 119863, 43603, 94075, 65397, 288, 0, - 0, 0, 10025, 69915, 2918, 66820, 65300, 119871, 9883, 64726, 2790, 65395, - 3793, 0, 127829, 65393, 120592, 74138, 0, 92751, 77958, 74139, 78777, - 65394, 11548, 5270, 983236, 65396, 0, 65813, 13256, 1282, 120771, 0, 0, - 10888, 127490, 65242, 0, 3330, 0, 0, 68340, 0, 0, 71202, 3304, 42753, - 93046, 0, 74643, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 118794, 0, 43094, - 70023, 43650, 94037, 68317, 9035, 11141, 0, 128005, 0, 92207, 68125, - 128467, 164, 68309, 94067, 94000, 6958, 0, 43116, 67719, 70019, 13245, 0, - 0, 66818, 0, 70031, 11099, 12666, 13175, 13207, 120414, 66014, 120428, - 7447, 5929, 0, 65509, 129192, 7449, 11306, 0, 73920, 3180, 125102, 63808, - 9054, 971, 13062, 71090, 0, 65195, 10164, 92252, 74428, 0, 78146, 92611, - 0, 70204, 0, 10045, 12882, 13275, 2303, 11057, 0, 13276, 125133, 41525, - 78150, 7271, 11444, 126479, 129158, 128112, 12229, 11680, 0, 43411, - 73751, 0, 64813, 0, 0, 10476, 3858, 64175, 3932, 64958, 120432, 0, 73989, - 68192, 0, 69847, 369, 0, 41784, 0, 64163, 77997, 0, 92645, 65474, 4796, - 12292, 126595, 65479, 128631, 41781, 10486, 41480, 43002, 9899, 92608, 0, - 404, 12821, 3741, 0, 5788, 8092, 68212, 41222, 1831, 66020, 3982, 0, - 4388, 0, 746, 118826, 74783, 0, 12018, 65294, 127545, 0, 0, 0, 4422, - 4708, 3799, 74292, 119357, 0, 74430, 0, 11700, 4374, 0, 128179, 1364, 0, - 8038, 0, 917597, 12868, 69814, 70425, 6735, 73979, 13174, 73968, 13225, - 194902, 69808, 65835, 0, 2365, 7841, 0, 42855, 118856, 42866, 0, 0, - 127986, 66438, 41785, 12617, 64172, 13173, 4372, 119354, 0, 983568, 0, - 127821, 67685, 128062, 12965, 384, 64512, 10404, 10340, 119352, 1556, - 5274, 13210, 120125, 10017, 9733, 41787, 983243, 126994, 41373, 68486, - 12303, 128476, 13232, 13233, 349, 4863, 41371, 11656, 0, 120703, 119883, - 12861, 4398, 8543, 65618, 92737, 1096, 43852, 0, 42688, 12441, 12355, - 119348, 119347, 4318, 10452, 92902, 8032, 13243, 13237, 12719, 126646, - 119101, 0, 64884, 119872, 119345, 8597, 71100, 0, 9864, 0, 120785, - 119874, 94107, 13195, 41452, 64961, 7722, 0, 10459, 119878, 124949, - 119879, 66590, 128123, 41533, 66337, 0, 92184, 0, 4965, 43445, 917536, - 67856, 0, 43638, 78536, 128287, 6261, 119342, 43147, 66570, 1957, 10420, - 982, 2756, 13292, 13206, 125064, 0, 2925, 73809, 13056, 92914, 13212, - 43238, 983142, 13190, 13187, 92541, 13198, 118793, 0, 5242, 119179, - 64476, 1694, 8216, 71369, 6770, 43331, 0, 65620, 983728, 43544, 126466, - 0, 41444, 65621, 69955, 9197, 5246, 119106, 13185, 9709, 120323, 120322, - 12314, 65616, 5238, 43825, 71085, 119337, 5236, 40979, 983140, 71874, - 8286, 128537, 3936, 119331, 11699, 41347, 127249, 13235, 8842, 41248, 0, - 4379, 13239, 12692, 7969, 127266, 7219, 71875, 128251, 120509, 92907, - 66224, 734, 2979, 120303, 65619, 9872, 957, 64921, 1846, 66631, 41477, - 119256, 71192, 74511, 41770, 1670, 6442, 120317, 42446, 5379, 120318, - 41163, 74832, 11136, 71876, 11506, 0, 42841, 13267, 0, 0, 41775, 0, 7130, + 124939, 128462, 128001, 4324, 126, 42246, 75030, 69984, 67725, 65926, + 7744, 68859, 74277, 66283, 78052, 43817, 6966, 43822, 8136, 0, 65600, + 1633, 0, 126614, 4762, 1103, 70827, 70157, 4765, 983494, 13078, 0, 4760, + 63827, 2050, 10871, 43199, 1102, 194652, 42236, 128867, 127072, 11546, + 74794, 337, 121196, 42591, 8627, 12279, 1111, 0, 75047, 4707, 68206, + 10143, 7883, 121444, 7880, 4522, 8645, 5704, 13010, 69796, 8304, 92982, + 194688, 119575, 2293, 70195, 66654, 129077, 92676, 0, 13008, 121194, + 4385, 128736, 13011, 125004, 92569, 119161, 13009, 160, 2677, 70388, + 983282, 41793, 65763, 74221, 70790, 41792, 42770, 94054, 65762, 118829, + 43821, 5709, 128296, 71076, 43816, 983087, 983896, 1079, 3867, 5708, 0, + 0, 43797, 5706, 64768, 5705, 8791, 4005, 121091, 10237, 10991, 128816, + 43459, 9173, 917581, 917580, 13170, 12540, 129178, 42605, 120765, 126617, + 68647, 917572, 10058, 68058, 74867, 67730, 127078, 3339, 11448, 1106, + 917591, 917540, 917593, 3340, 74017, 917586, 120994, 129141, 120541, + 10605, 1309, 63966, 120743, 1754, 92226, 13246, 864, 983171, 118926, + 8972, 119918, 7849, 120092, 83130, 13240, 195068, 5192, 4338, 67982, + 10948, 66825, 13199, 92575, 1236, 13208, 13261, 13189, 13188, 93993, + 71847, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, + 63780, 63779, 1583, 119923, 13260, 4550, 120598, 64205, 129107, 71071, + 41522, 41523, 68523, 983772, 118923, 11354, 94071, 0, 42795, 0, 119195, + 11394, 194646, 13236, 13272, 13194, 1334, 69926, 4479, 1178, 65586, + 68311, 66681, 119193, 4601, 0, 127885, 983765, 66828, 128972, 127839, + 74580, 6809, 63786, 6031, 67402, 63791, 63790, 1145, 63788, 7910, 63785, + 43153, 754, 10192, 13105, 8183, 120741, 2037, 0, 64710, 10747, 125, + 120803, 64890, 983064, 127376, 0, 41719, 63758, 3523, 1074, 13258, 9536, + 71056, 0, 4427, 74242, 63757, 43145, 12217, 63754, 41532, 1349, 63750, + 63749, 129025, 0, 127928, 63753, 63802, 41084, 120622, 68133, 41930, + 63805, 63804, 11140, 63801, 41082, 8140, 63798, 6260, 0, 128391, 94074, + 63793, 11988, 3898, 92246, 10201, 12238, 63795, 42194, 10367, 12521, + 10431, 42114, 41932, 1068, 0, 12523, 12945, 983331, 42203, 7950, 3124, + 63771, 42787, 4386, 11148, 6973, 2793, 12475, 129180, 75056, 63769, 9530, + 121248, 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 113674, 64803, + 0, 8742, 195029, 11053, 128796, 63744, 128107, 128942, 7588, 63748, 1693, + 63746, 43204, 5055, 68426, 42063, 1090, 68803, 120778, 11665, 74133, + 4558, 65685, 9523, 983453, 63857, 71216, 11513, 0, 6157, 63775, 63774, + 63773, 13191, 12170, 3500, 3139, 68071, 3170, 12485, 43891, 10872, 43892, + 13006, 43933, 120074, 0, 941, 0, 129079, 120967, 65541, 11063, 0, 8228, + 0, 42065, 128368, 43889, 94039, 129299, 92455, 7386, 0, 64444, 70295, + 119863, 43603, 94075, 65397, 288, 83409, 0, 0, 10025, 69915, 2918, 66820, + 65300, 119871, 9883, 64726, 2790, 65395, 3793, 983620, 127829, 65393, + 120592, 74138, 83505, 92751, 75019, 74139, 78777, 65394, 11548, 5270, + 983238, 65396, 74998, 65813, 13256, 1282, 120771, 75012, 0, 10888, + 120934, 65242, 0, 3330, 0, 0, 68340, 0, 0, 71202, 3304, 42753, 92588, + 70298, 74643, 1627, 0, 127765, 194735, 5371, 13116, 0, 1826, 118794, 0, + 43094, 70023, 43650, 94037, 68317, 9035, 11141, 917977, 128005, 0, 92207, + 68125, 74898, 164, 68309, 94067, 94000, 6958, 0, 43116, 67719, 70019, + 13245, 0, 68808, 66818, 0, 70031, 11099, 12666, 13175, 13207, 120414, + 66014, 120428, 7447, 5929, 0, 65509, 129192, 7449, 11306, 0, 73920, 3180, + 125102, 63808, 9054, 971, 13062, 71090, 0, 65195, 10164, 92252, 74428, + 983321, 78146, 92611, 0, 70204, 0, 10045, 12882, 13275, 2303, 11057, + 917976, 13276, 125133, 41525, 78150, 7271, 11444, 126479, 127904, 121203, + 12229, 11680, 92956, 43411, 73751, 0, 64813, 195089, 0, 10476, 3858, + 64175, 3932, 64958, 120432, 983678, 73989, 68192, 0, 69847, 369, 74908, + 41784, 119175, 64163, 77997, 0, 92645, 65474, 4796, 12292, 126595, 65479, + 128631, 41781, 10486, 41480, 43002, 9899, 92608, 0, 404, 12821, 3741, 0, + 5788, 8092, 68212, 41222, 1831, 66020, 3982, 0, 4388, 194913, 746, + 118826, 74783, 0, 12018, 65294, 127545, 194925, 68835, 983488, 4422, + 4708, 3799, 74292, 119357, 121146, 74430, 0, 11700, 4374, 120377, 121151, + 1364, 0, 8038, 120883, 917597, 12868, 69814, 70425, 6735, 73979, 13174, + 73968, 13225, 194902, 69808, 65835, 0, 2365, 7841, 71476, 42855, 118856, + 42866, 0, 0, 127986, 66438, 41785, 12617, 64172, 13173, 4372, 119354, + 983920, 983568, 128871, 127821, 67685, 128062, 12965, 384, 64512, 10404, + 10340, 119352, 1556, 5274, 13210, 120125, 10017, 9733, 41787, 983245, + 121149, 41373, 68486, 12303, 128476, 13232, 13233, 349, 4863, 41371, + 11656, 0, 120703, 119883, 12861, 4398, 8543, 65618, 92737, 1096, 43852, + 121433, 42688, 12441, 12355, 119348, 119347, 4318, 10452, 92902, 8032, + 13243, 13237, 12719, 126646, 119101, 121156, 64884, 92909, 119345, 8597, + 71100, 129062, 9864, 0, 120785, 119874, 94107, 13195, 41452, 64961, 7722, + 0, 10459, 119878, 124949, 119879, 66590, 128123, 41533, 66337, 128663, + 92184, 0, 4965, 43445, 917536, 67856, 0, 43638, 78536, 121187, 6261, + 119342, 43147, 66570, 1957, 10420, 982, 2756, 13292, 13206, 125064, + 917795, 2925, 73809, 13056, 92914, 13212, 43238, 121396, 13190, 13187, + 92541, 13198, 118793, 121089, 5242, 119179, 64476, 1694, 8216, 71369, + 6770, 43331, 0, 65620, 983728, 43544, 126466, 0, 41444, 65621, 69955, + 9197, 5246, 119106, 13185, 9709, 120323, 120322, 12314, 65616, 5238, + 43825, 71085, 119337, 5236, 40979, 983140, 71874, 8286, 128537, 3936, + 119331, 11699, 41347, 69739, 13235, 8842, 41248, 0, 4379, 13239, 12692, + 7969, 127266, 7219, 71875, 128251, 120509, 92907, 66224, 734, 2979, + 120303, 65619, 9872, 957, 64921, 1846, 66631, 41477, 119256, 71192, + 74511, 41770, 1670, 6442, 120317, 42446, 5379, 120318, 41163, 74832, + 11136, 71876, 11506, 128395, 42841, 13267, 128421, 0, 41775, 0, 7130, 41773, 0, 10663, 70130, 0, 983974, 6151, 12110, 42673, 65572, 65293, - 65250, 13265, 13264, 64518, 0, 6100, 127964, 92647, 5808, 65922, 0, - 12967, 66041, 5612, 4583, 70004, 43386, 68097, 64575, 126637, 11965, 0, - 68358, 0, 69789, 42653, 92260, 68102, 9698, 7814, 71045, 119651, 128514, - 0, 41921, 118858, 9756, 6985, 66418, 66621, 74219, 66412, 128822, 118997, - 8012, 5674, 12353, 66421, 12361, 5677, 5588, 125005, 41925, 128124, - 41920, 5673, 120534, 5676, 41923, 12694, 118978, 5672, 1294, 0, 78059, 0, - 42511, 1727, 120725, 42436, 124928, 0, 0, 74222, 8718, 3550, 736, 10268, - 4505, 5873, 74090, 5826, 55232, 5813, 0, 92889, 5841, 5837, 55234, 0, - 3105, 12829, 5838, 5796, 0, 119592, 5793, 0, 5866, 5797, 41011, 5865, - 93009, 7956, 598, 0, 64649, 5806, 42398, 0, 9037, 5671, 120041, 983255, - 0, 0, 128855, 0, 847, 128242, 9529, 128019, 66657, 6980, 78483, 43510, - 78122, 92219, 0, 67411, 78486, 0, 0, 120039, 42683, 71848, 983055, 7114, - 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 6792, 43201, 0, - 19963, 5698, 194768, 983941, 92933, 71887, 5644, 10292, 65546, 69727, - 68141, 8372, 0, 65116, 0, 120022, 10175, 10388, 42799, 94100, 41013, + 65250, 13265, 13264, 64518, 0, 6100, 127964, 92647, 5808, 65922, 67814, + 12967, 66041, 5612, 4583, 70004, 43386, 68097, 64575, 126637, 11965, + 194930, 68358, 71483, 69789, 42653, 83181, 68102, 9698, 7814, 71045, + 119651, 128514, 0, 41921, 118858, 9756, 6985, 66418, 66621, 74219, 66412, + 128822, 118997, 8012, 5674, 12353, 66421, 12361, 5677, 5588, 92348, + 41925, 128124, 41920, 5673, 83113, 5676, 41923, 12694, 118978, 5672, + 1294, 0, 78059, 983962, 42511, 1727, 120725, 42436, 121400, 121183, 0, + 74222, 8718, 3550, 736, 10268, 4505, 5873, 74090, 5826, 55232, 5813, + 129032, 92889, 5841, 5837, 55234, 194864, 3105, 12829, 5838, 5796, 0, + 119592, 5793, 0, 5866, 5797, 41011, 5865, 93009, 7956, 598, 0, 64649, + 5806, 42398, 0, 9037, 5671, 120041, 983257, 83478, 983929, 83184, 0, 847, + 128242, 9529, 83018, 66657, 6980, 78483, 43510, 78122, 92219, 0, 67411, + 78486, 83017, 127260, 120039, 42683, 71848, 983055, 7114, 126521, 0, + 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 6792, 43201, 75059, + 19963, 5698, 194768, 983272, 92933, 71887, 5644, 10292, 65546, 69727, + 68141, 8372, 0, 65116, 0, 70304, 10175, 10388, 42799, 94100, 41013, 10568, 0, 983618, 2869, 917843, 41015, 74473, 2785, 4366, 0, 10954, - 41802, 0, 42608, 78469, 9884, 4759, 73768, 120296, 10266, 41359, 1170, - 43365, 69810, 73908, 1609, 902, 92773, 63936, 127239, 11661, 8122, 5818, - 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, 2213, 0, 0, 807, 43079, 0, - 78475, 976, 5511, 64553, 0, 42155, 983317, 41356, 74110, 118801, 71043, - 120080, 8676, 983291, 94002, 5582, 451, 63941, 5798, 9349, 42018, 127858, - 0, 78681, 43609, 5906, 120553, 1440, 0, 128853, 120016, 70342, 11005, - 983697, 66656, 66044, 0, 128592, 128793, 0, 43393, 10094, 70164, 11529, - 10857, 92944, 66436, 6546, 93, 8102, 67323, 68405, 0, 194714, 8171, - 118888, 119097, 127064, 917543, 383, 7154, 41656, 43495, 94040, 67162, - 5187, 71296, 71086, 11286, 68620, 64217, 0, 5232, 0, 41009, 127377, - 41005, 0, 0, 983827, 8292, 125108, 4980, 8860, 71054, 10028, 65291, 7076, - 13182, 194705, 128224, 127974, 10631, 66031, 7972, 0, 78785, 0, 7900, - 128590, 11309, 3806, 4198, 42725, 0, 67656, 9995, 0, 92552, 0, 12931, - 983690, 42684, 74285, 2088, 64213, 64366, 65156, 8814, 42238, 74771, 0, - 917831, 12836, 0, 0, 74342, 8593, 0, 0, 68445, 13255, 0, 0, 7464, 0, - 65865, 0, 194650, 127144, 0, 9342, 120464, 70376, 64516, 0, 78792, 10129, - 41007, 74375, 0, 40995, 12209, 41012, 119136, 0, 0, 69724, 40992, 92264, - 127153, 68653, 43558, 5522, 0, 61, 194780, 74105, 3633, 983900, 65162, - 41234, 12089, 78281, 9771, 983905, 13251, 128701, 0, 6262, 2784, 42743, - 71078, 8126, 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, - 7108, 194779, 10890, 74481, 65834, 8324, 118944, 64417, 74817, 127465, - 64737, 74853, 983659, 8930, 66678, 67216, 1193, 10056, 1800, 13253, - 13252, 7829, 0, 0, 7743, 0, 124996, 77904, 77913, 77905, 9034, 6039, - 129139, 10075, 0, 41018, 65683, 10338, 66469, 0, 0, 0, 42815, 92984, - 41966, 0, 127471, 0, 11792, 43064, 41025, 911, 7539, 0, 40963, 120339, - 65159, 64390, 0, 983160, 5520, 11662, 128468, 65330, 42812, 0, 0, 12326, - 71081, 194638, 42808, 128337, 9348, 64901, 983861, 0, 128328, 66839, 0, - 0, 917584, 43702, 983148, 5857, 65342, 92727, 119120, 120079, 8644, 0, 0, - 11186, 74296, 41909, 0, 66900, 2791, 69663, 1891, 69824, 66397, 41907, - 66647, 118939, 8761, 12942, 5748, 0, 10773, 70868, 983295, 8796, 78149, - 6412, 2061, 8520, 13146, 127185, 63931, 0, 65902, 2882, 0, 0, 12843, - 4520, 120345, 92459, 0, 983660, 0, 73860, 0, 0, 64345, 0, 9201, 128314, - 70871, 0, 0, 43679, 917585, 65117, 92270, 0, 10427, 0, 3844, 6842, 9755, - 1110, 6612, 12222, 93030, 128789, 0, 983096, 783, 194935, 0, 127221, - 92549, 194720, 65056, 3620, 41180, 68378, 4556, 0, 68480, 194933, 74250, - 0, 67657, 10510, 4382, 66482, 0, 0, 127527, 9177, 8902, 93958, 9839, - 120700, 12891, 983755, 983636, 63999, 2016, 41917, 9788, 63928, 67696, - 1862, 65800, 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, - 66017, 4508, 64883, 92456, 92522, 127814, 0, 64592, 74276, 67688, 6784, - 78788, 68181, 0, 71218, 113821, 66366, 12147, 9024, 66378, 66472, 983929, - 64289, 65289, 78151, 66658, 71935, 64509, 78152, 113697, 126505, 11051, - 194928, 0, 11355, 65885, 128773, 127941, 41214, 0, 12299, 0, 7500, 4506, - 7773, 0, 0, 9963, 68649, 126609, 4040, 120570, 6167, 74519, 63922, 6594, - 983740, 0, 0, 3624, 43036, 0, 6387, 63990, 19947, 63988, 41955, 126990, - 63993, 10440, 9611, 65605, 6803, 0, 7738, 63986, 11446, 63984, 92641, - 3435, 78164, 43814, 43810, 7029, 64258, 41292, 118898, 12748, 42742, - 9517, 11518, 128168, 78790, 0, 67993, 63956, 42458, 63954, 63953, 63960, - 9591, 4516, 10217, 68370, 11469, 69697, 42306, 2723, 118947, 0, 0, 0, 0, - 0, 11397, 2880, 70806, 0, 2872, 0, 128506, 3498, 4378, 917539, 4270, 0, - 65551, 68205, 6633, 43387, 0, 5230, 194991, 0, 0, 0, 0, 8161, 393, 12013, - 0, 983198, 119103, 415, 63964, 63963, 42345, 92310, 5183, 1877, 42498, 0, - 2927, 71058, 63961, 4472, 0, 0, 78159, 69699, 917936, 42340, 4756, - 128078, 7081, 10730, 7691, 10331, 63830, 119625, 42922, 42103, 8628, - 9813, 0, 42453, 1604, 9565, 10539, 69701, 65764, 41415, 65767, 129196, - 8457, 42301, 11372, 64873, 11992, 0, 0, 63980, 11801, 3622, 983124, - 64336, 12017, 10463, 63981, 4967, 64189, 1966, 43628, 983908, 983292, - 194766, 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, 402, 92213, - 13147, 128692, 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, - 11302, 6259, 43395, 0, 0, 194670, 0, 92351, 74813, 74425, 11299, 1561, - 118881, 92318, 64942, 93021, 194733, 70411, 194732, 0, 74301, 127893, - 11280, 128489, 69784, 74060, 0, 0, 119664, 5145, 12486, 65018, 66516, - 5409, 127379, 194669, 7402, 5399, 9685, 74089, 7952, 5401, 0, 66616, - 66832, 92966, 129105, 5405, 127875, 64866, 127864, 119583, 119122, 78784, - 74248, 11330, 194723, 64690, 3254, 0, 0, 128207, 42390, 43678, 194725, - 983909, 65077, 129059, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 0, - 3377, 0, 0, 74354, 0, 78228, 983722, 983762, 42691, 127886, 127198, - 74767, 0, 127075, 1379, 246, 0, 983761, 3788, 983106, 11041, 67202, - 66304, 0, 0, 8917, 42403, 301, 0, 128500, 127046, 0, 0, 113822, 10656, - 125042, 65214, 92987, 42567, 92217, 13163, 983204, 120831, 74597, 3182, - 0, 0, 0, 65034, 65889, 42169, 4755, 74244, 194621, 11443, 983603, 66319, - 6841, 608, 600, 0, 1219, 3934, 64206, 11483, 74510, 119117, 74485, 42442, - 65470, 983907, 64202, 13160, 7759, 42482, 485, 69982, 70505, 9828, 0, - 43505, 42280, 0, 9351, 7778, 64379, 7496, 42431, 6916, 1208, 0, 119631, - 11002, 42470, 0, 68315, 0, 0, 74041, 0, 70045, 43539, 5411, 42196, 0, 0, - 0, 9150, 66831, 42393, 13086, 1310, 66848, 9337, 12052, 10643, 55271, - 128951, 12166, 2546, 194683, 213, 118852, 65611, 0, 194822, 194756, - 74310, 6554, 0, 11914, 5452, 0, 0, 92772, 0, 0, 194681, 92560, 2713, - 129029, 9650, 43330, 0, 128505, 1406, 125007, 42925, 74638, 194593, - 68223, 4143, 128136, 0, 65748, 4141, 9682, 65287, 1508, 127013, 8779, - 10569, 8725, 13299, 66638, 65750, 42263, 4145, 6380, 65751, 66613, 43994, - 65738, 55250, 9185, 9550, 0, 43403, 0, 0, 194783, 65736, 41951, 64816, - 65756, 983205, 12955, 10596, 2888, 194645, 0, 0, 9657, 9019, 125077, 0, - 2878, 5390, 0, 194961, 67325, 68679, 43552, 7501, 6328, 194960, 10429, - 10365, 0, 0, 41946, 7503, 5235, 803, 68381, 0, 0, 8986, 43838, 10632, - 11934, 11452, 1332, 0, 194970, 126647, 0, 118887, 1791, 5191, 9288, - 64822, 2892, 127242, 43394, 555, 0, 0, 66646, 128980, 119002, 13151, - 74512, 7289, 74055, 64161, 8854, 64162, 5858, 41927, 10582, 120457, 1784, - 1361, 195047, 0, 7905, 0, 64868, 128813, 13158, 92166, 7211, 71884, 9371, - 73973, 128441, 6828, 1625, 7664, 0, 1342, 68440, 64171, 92642, 10903, - 983494, 0, 92527, 0, 70438, 4482, 41606, 0, 128569, 983112, 0, 64381, 0, - 194974, 195090, 42245, 126467, 41972, 0, 444, 0, 9127, 66687, 66619, - 126489, 78025, 0, 11349, 40991, 917570, 0, 70177, 120830, 0, 1197, - 128282, 1149, 68316, 0, 0, 40990, 43765, 0, 3492, 917906, 118784, 0, 0, - 0, 12838, 67208, 19948, 41677, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, - 41309, 128161, 0, 8152, 0, 41550, 12227, 983613, 0, 12828, 127511, 0, - 983971, 120708, 0, 0, 10386, 119574, 129159, 0, 92680, 983789, 68154, 0, - 1743, 0, 0, 92239, 65186, 917571, 0, 9606, 0, 0, 64439, 0, 0, 92686, - 983875, 0, 43866, 128881, 0, 3395, 9362, 10878, 128376, 0, 78362, 64830, - 0, 125046, 41091, 3426, 1344, 8870, 0, 71344, 4735, 11111, 6119, 12822, - 42699, 0, 983824, 74818, 1423, 128923, 42637, 41080, 0, 12039, 10559, - 128634, 118892, 0, 9472, 67734, 11929, 128905, 7170, 9596, 6130, 128826, - 43629, 11579, 78713, 0, 92501, 125081, 92185, 66699, 64440, 1004, 92584, - 194736, 43234, 66008, 12627, 0, 68414, 74614, 43619, 43303, 11300, 43304, - 9686, 5890, 11776, 7558, 127158, 65627, 0, 10718, 13154, 3461, 9139, 0, - 983094, 0, 0, 65365, 73877, 65628, 78019, 120319, 0, 41708, 12860, 2641, - 12069, 10838, 5403, 10352, 70085, 10061, 43237, 125057, 5140, 209, - 128847, 41704, 41056, 43078, 128125, 118809, 67232, 10899, 65469, 70125, - 0, 0, 2410, 993, 0, 120589, 120689, 78693, 0, 0, 7232, 0, 119253, 124963, - 7110, 74462, 2066, 10489, 42166, 43463, 10659, 3600, 78118, 4224, 1336, - 41518, 983932, 0, 0, 0, 41139, 64820, 92538, 12966, 41134, 0, 0, 119153, - 0, 272, 4263, 8793, 983856, 0, 41502, 128133, 983, 12549, 124940, 0, - 1190, 4109, 1335, 841, 5888, 41358, 64863, 9544, 43481, 0, 194806, 70027, - 2099, 5120, 2409, 7799, 0, 74424, 0, 0, 4731, 92279, 66629, 0, 0, 1255, - 4149, 9247, 0, 9913, 0, 0, 64914, 917787, 65101, 113714, 11694, 92475, - 11690, 5835, 127164, 66625, 10842, 41354, 42123, 43097, 11688, 66634, - 1094, 194, 64692, 0, 8180, 0, 0, 9972, 73865, 4519, 6114, 10898, 43072, - 92465, 0, 93960, 983322, 126581, 10695, 0, 7540, 0, 881, 7857, 6067, - 65164, 0, 0, 129134, 13311, 68403, 41857, 64321, 8359, 983311, 12689, - 983310, 194594, 0, 983312, 71859, 68183, 0, 983314, 1287, 5436, 0, 71097, - 74142, 92328, 74152, 70205, 6051, 10497, 69668, 8985, 12109, 983323, 0, - 93043, 0, 0, 3652, 10537, 120282, 1276, 120440, 6549, 279, 73745, 0, - 128664, 0, 1489, 0, 0, 0, 3899, 1007, 42124, 43828, 42122, 92337, 92367, - 0, 11985, 1345, 78600, 119832, 917601, 8956, 43083, 94057, 42138, 78610, - 129131, 6430, 78608, 78604, 78605, 6285, 78603, 78612, 78613, 65942, 492, - 8685, 128481, 983759, 0, 78622, 43712, 2582, 11470, 64538, 7444, 78615, - 78616, 2297, 0, 73837, 119823, 2527, 119824, 197, 2799, 92594, 41944, - 120276, 9933, 74011, 66515, 767, 5524, 7028, 0, 0, 119827, 119817, 92950, - 78633, 10896, 0, 1799, 120497, 6971, 74336, 128342, 0, 65340, 118979, - 41551, 2434, 94018, 126642, 65353, 0, 4631, 118996, 0, 6407, 113737, - 6338, 43214, 0, 7570, 0, 3192, 0, 8414, 983390, 93983, 0, 0, 0, 9164, - 66612, 93959, 3171, 6623, 4961, 68396, 886, 55216, 8654, 78832, 9993, - 74390, 64603, 70066, 69241, 9599, 78629, 43084, 78627, 78628, 78625, - 2399, 69693, 8994, 10944, 41208, 983713, 41168, 8178, 74859, 3367, 92334, - 42510, 78641, 78636, 6804, 70475, 1947, 917579, 0, 92681, 42759, 11068, - 1705, 9331, 0, 74798, 9181, 65359, 125065, 8017, 119831, 65096, 66720, - 71906, 43475, 0, 4909, 12126, 128673, 120696, 4904, 983333, 43503, 1365, - 9253, 42757, 43436, 7462, 127772, 0, 0, 0, 66845, 64415, 120500, 128869, - 5398, 125035, 127386, 93953, 127362, 983782, 119015, 0, 128083, 9476, 0, - 120695, 12763, 126603, 3629, 126626, 13005, 11181, 3628, 0, 0, 92502, - 3469, 42107, 42116, 917578, 64809, 2928, 4905, 9853, 851, 9040, 0, 64665, - 43086, 9114, 43870, 42583, 9315, 4822, 4906, 3852, 2847, 119821, 3236, - 11317, 1251, 7777, 41852, 11410, 10964, 0, 43222, 12646, 120269, 10259, - 9865, 65821, 0, 6018, 68293, 917917, 12276, 119110, 68372, 0, 92259, - 71893, 0, 119828, 10467, 0, 2443, 10918, 78217, 77947, 1001, 9241, 1927, - 0, 124942, 73987, 127885, 71895, 93012, 7992, 77943, 65678, 12867, - 128787, 8260, 77945, 7519, 11505, 12274, 8904, 518, 65857, 128361, - 128674, 13204, 4387, 857, 983866, 65369, 0, 92336, 43125, 11842, 0, - 71072, 0, 0, 5136, 1968, 128906, 126627, 1337, 64967, 1629, 0, 796, - 66506, 0, 74123, 12877, 120649, 42314, 43388, 43826, 74403, 6120, 478, - 65151, 68128, 128147, 43082, 6016, 0, 42284, 71894, 4276, 1206, 3619, - 41638, 69691, 3843, 12011, 8853, 3361, 0, 490, 10715, 7578, 68384, 92754, - 65350, 10530, 12348, 8653, 68245, 42435, 6154, 9551, 65354, 78522, 784, - 42397, 334, 194676, 42416, 65356, 65273, 67243, 69666, 4442, 10364, 0, - 778, 41626, 42455, 7989, 74063, 3227, 69907, 125116, 11102, 2915, 11502, - 41022, 41702, 10309, 127035, 78320, 120273, 6975, 0, 5415, 12176, 0, - 74193, 3462, 65215, 42629, 78691, 71175, 0, 127256, 9759, 127255, 70057, - 127254, 8114, 78698, 78697, 78696, 78695, 8710, 42495, 118956, 70189, - 4051, 10460, 43364, 71206, 1356, 12161, 42713, 128857, 127268, 1619, - 9703, 43152, 42489, 42112, 66896, 1875, 10808, 42109, 120284, 41860, - 64862, 13305, 64907, 5289, 13144, 128658, 983224, 5575, 9675, 195018, - 5940, 226, 2649, 6336, 983277, 92979, 43236, 3382, 42449, 6498, 1658, - 11936, 78232, 113814, 11269, 10151, 73759, 43100, 69888, 65508, 0, 0, 0, - 8935, 78234, 0, 983757, 0, 616, 74753, 65178, 4684, 78701, 119653, 74631, - 126551, 0, 6048, 74460, 42110, 73965, 10870, 8557, 11054, 68664, 119049, - 9681, 4475, 67429, 41142, 2100, 125024, 120731, 6035, 73796, 7651, 6846, - 64443, 983957, 983294, 917987, 0, 118966, 74144, 40997, 68488, 10392, - 10328, 40998, 43462, 74488, 71182, 9800, 8979, 0, 13307, 41000, 0, - 119239, 6487, 3386, 129094, 10344, 0, 65299, 5394, 43246, 78243, 10220, - 66505, 41200, 128582, 4425, 0, 0, 0, 43074, 73799, 129076, 78147, 0, - 12173, 78545, 0, 66824, 65338, 983676, 0, 119582, 4474, 128936, 43093, - 128644, 1587, 0, 127372, 64475, 128098, 1369, 983672, 9959, 7927, 0, - 4560, 0, 0, 92277, 983621, 64948, 4430, 74347, 42601, 4514, 66434, 93955, - 8194, 65462, 10626, 10965, 0, 8893, 983301, 12542, 0, 65341, 67703, - 65829, 7925, 119822, 10475, 113825, 0, 1352, 11069, 7707, 127560, 126486, - 65279, 127102, 68207, 127100, 7099, 6040, 67681, 10071, 78554, 9336, - 43750, 128507, 8899, 7798, 64474, 64259, 69873, 65188, 7820, 43018, - 127082, 128898, 7746, 1492, 78551, 10884, 77982, 66866, 5127, 11285, - 42501, 5495, 4273, 43095, 41426, 10849, 5730, 2999, 6342, 68636, 74304, - 371, 64373, 6023, 169, 5497, 11708, 0, 128603, 6323, 129065, 8224, - 128417, 8938, 6043, 12738, 120671, 983076, 5321, 68645, 194798, 120251, - 2589, 74332, 1689, 7802, 4683, 74318, 42704, 92940, 11905, 0, 0, 128516, - 128163, 74513, 6049, 0, 4027, 834, 118962, 1803, 983822, 1503, 0, 0, + 41802, 983652, 42608, 78468, 9884, 4759, 73768, 120296, 10266, 41359, + 1170, 43365, 69810, 73908, 1609, 902, 92773, 63936, 83247, 11661, 8122, + 5818, 83245, 0, 3861, 9540, 11028, 2554, 5158, 5714, 2213, 983966, 0, + 807, 43079, 78092, 78475, 976, 5511, 64553, 120863, 42155, 983319, 41356, + 74110, 118801, 71043, 120080, 8676, 983293, 94002, 5582, 451, 63941, + 5798, 9349, 42018, 127858, 128521, 78681, 43609, 5906, 120553, 1440, 0, + 128853, 74933, 70342, 11005, 194699, 66656, 66044, 194636, 120079, + 128793, 0, 43393, 10094, 70164, 11529, 10857, 92944, 66436, 6546, 93, + 8102, 67323, 68405, 0, 194714, 8171, 118888, 119097, 82996, 917543, 383, + 7154, 41656, 43495, 94040, 67162, 5187, 71296, 71086, 11286, 68620, + 64217, 0, 5232, 0, 41009, 127377, 41005, 983810, 0, 128471, 8292, 125108, + 4980, 8860, 71054, 10028, 65291, 7076, 13182, 194705, 74912, 127974, + 10631, 11244, 7972, 68042, 78785, 0, 7900, 128590, 11309, 3806, 4198, + 42725, 0, 67656, 9995, 0, 92552, 0, 12931, 121110, 42684, 74285, 2088, + 64213, 64366, 65156, 8814, 42238, 74771, 127920, 194713, 12836, 0, + 113800, 74342, 8593, 0, 0, 68445, 13255, 121333, 128843, 7464, 0, 65865, + 0, 194650, 127144, 92395, 9342, 120464, 70376, 64516, 0, 78792, 10129, + 41007, 74375, 983701, 40995, 12209, 41012, 83501, 0, 83257, 69724, 40992, + 92264, 119136, 68653, 43558, 5522, 75026, 61, 120959, 74105, 3633, + 120082, 65162, 41234, 12089, 78281, 9771, 83281, 13251, 128701, 0, 6262, + 2784, 42743, 71078, 8126, 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, + 119623, 43266, 7108, 194779, 10890, 74481, 65834, 8324, 118944, 64417, + 74817, 127465, 64737, 74853, 983659, 8930, 66678, 67216, 1193, 10056, + 1800, 13253, 13252, 7829, 120992, 121175, 7743, 83502, 124996, 77904, + 77913, 77905, 9034, 6039, 129139, 10075, 0, 41018, 65683, 10338, 66469, + 0, 0, 194637, 42815, 92984, 41966, 0, 127471, 0, 11792, 43064, 41025, + 911, 7539, 0, 40963, 120339, 65159, 64390, 0, 983160, 5520, 11662, + 127473, 65330, 42812, 983215, 0, 12326, 71081, 194638, 42808, 128337, + 9348, 64901, 983861, 983892, 121050, 66839, 0, 0, 121004, 43702, 983148, + 5857, 65342, 92727, 119120, 83503, 8644, 121227, 83332, 11186, 74296, + 41909, 0, 66900, 2791, 69663, 1891, 69824, 66397, 41907, 66647, 118939, + 8761, 12942, 5748, 92713, 10773, 70868, 83174, 8796, 78149, 6412, 2061, + 8520, 13146, 127096, 63931, 83275, 65902, 2882, 83334, 0, 12843, 4520, + 120345, 92459, 0, 983660, 0, 73860, 83335, 0, 64345, 0, 9201, 128314, + 70871, 0, 917864, 43679, 121026, 65117, 92270, 0, 10427, 121506, 3844, + 6842, 9755, 1110, 6612, 12222, 93030, 128789, 983638, 92928, 783, 194935, + 92185, 127221, 73855, 68032, 65056, 3620, 41180, 68378, 4556, 67839, + 68480, 194933, 74250, 0, 67657, 10510, 4382, 66482, 67823, 0, 127527, + 9177, 8902, 93958, 9839, 120700, 12891, 983755, 983636, 63999, 2016, + 41917, 9788, 63928, 67696, 1862, 65800, 9155, 66623, 9786, 65082, 41919, + 8579, 41914, 7981, 0, 66017, 4508, 64883, 92456, 92522, 127814, 120834, + 64592, 74276, 67688, 6784, 78788, 68181, 0, 71218, 113821, 66366, 12147, + 9024, 66378, 66472, 124976, 64289, 65289, 78151, 66658, 71935, 64509, + 78152, 113697, 126505, 11051, 194928, 0, 11355, 65885, 121319, 127941, + 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, 9963, 68649, 126609, 4040, + 120570, 6167, 74519, 63922, 6594, 983740, 0, 0, 3624, 43036, 129472, + 6387, 63990, 19947, 63988, 41955, 126990, 63993, 10440, 9611, 65605, + 6803, 120968, 7738, 63986, 11446, 63984, 92641, 3435, 78164, 43814, + 43810, 7029, 64258, 41292, 118898, 12748, 42742, 9517, 11518, 83292, + 78790, 983381, 67993, 63956, 42458, 63954, 63953, 63960, 9591, 4516, + 10217, 68370, 11469, 69697, 42306, 2723, 118947, 0, 92325, 0, 68079, + 121344, 11397, 2880, 70806, 917829, 2872, 0, 83321, 3498, 4378, 917539, + 4270, 0, 65551, 68205, 6633, 43387, 0, 5230, 194991, 0, 983040, 194910, + 121392, 8161, 393, 12013, 0, 983198, 119103, 415, 63964, 63963, 42345, + 92310, 5183, 1877, 42498, 0, 2927, 71058, 63961, 4472, 983299, 0, 78159, + 69699, 127301, 42340, 4756, 128078, 7081, 10730, 7691, 10331, 63830, + 119625, 42922, 42103, 8628, 9813, 78654, 42453, 1604, 9565, 10539, 69701, + 65764, 41415, 65767, 129196, 8457, 42301, 11372, 64873, 11992, 0, 0, + 63980, 11801, 3622, 195092, 64336, 12017, 10463, 63981, 4967, 64189, + 1966, 43628, 983908, 983294, 83267, 121052, 63971, 4347, 4416, 42098, + 11009, 10694, 63973, 402, 92213, 13147, 128692, 42100, 64646, 13228, 0, + 41875, 3515, 74252, 11805, 983157, 11302, 6259, 43395, 0, 83323, 194670, + 120836, 92351, 74813, 74425, 11299, 1561, 118881, 92318, 64942, 93021, + 194733, 70411, 78718, 121140, 74301, 68825, 11280, 128489, 69784, 74060, + 128392, 0, 119664, 5145, 12486, 65018, 66516, 5409, 127379, 124988, 7402, + 5399, 9685, 74089, 7952, 5401, 0, 66616, 66832, 92966, 120852, 5405, + 127875, 64866, 120965, 119583, 119122, 78784, 74248, 11330, 194723, + 64690, 3254, 983166, 128944, 92696, 42390, 43678, 194725, 129127, 65077, + 129059, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 83021, 3377, 0, 0, + 74354, 194578, 78228, 983722, 983762, 42691, 127886, 120948, 68091, + 128404, 75023, 1379, 246, 74649, 983761, 3788, 92520, 11041, 67202, + 66304, 0, 121213, 8917, 42403, 301, 0, 128500, 127046, 0, 0, 113822, + 10656, 125042, 65214, 92987, 42567, 92217, 13163, 983204, 120831, 74597, + 3182, 0, 0, 0, 65034, 65889, 42169, 4755, 74244, 194574, 11443, 983603, + 66319, 6841, 608, 600, 0, 1219, 3934, 64206, 11483, 74510, 119117, 74485, + 42442, 65470, 983907, 64202, 13160, 7759, 42482, 485, 69982, 70505, 9828, + 0, 43505, 42280, 0, 9351, 7778, 64379, 7496, 42431, 6916, 1208, 0, + 119631, 11002, 42470, 0, 68315, 0, 0, 74041, 83144, 70045, 43539, 5411, + 42196, 0, 0, 0, 9150, 66831, 42393, 13086, 1310, 66848, 9337, 12052, + 10643, 55271, 128951, 12166, 2546, 194683, 213, 118852, 65611, 83316, + 194822, 194756, 74310, 6554, 94059, 11914, 5452, 0, 0, 92772, 0, 917880, + 194681, 92560, 2713, 119564, 9650, 43330, 121033, 128505, 1406, 125007, + 42925, 74638, 194593, 66256, 4143, 128136, 194762, 65748, 4141, 9682, + 65287, 1508, 127013, 8779, 10569, 8725, 13299, 66638, 65750, 42263, 4145, + 6380, 65751, 66613, 43994, 65738, 55250, 9185, 9550, 42932, 43403, 0, 0, + 194783, 65736, 41951, 64816, 65756, 983205, 12955, 10596, 2888, 83190, 0, + 121354, 9657, 9019, 121154, 0, 2878, 5390, 0, 194961, 67325, 68679, + 43552, 7501, 6328, 194960, 10429, 10365, 0, 0, 41946, 7503, 5235, 803, + 68381, 0, 0, 8986, 43838, 10632, 11934, 11452, 1332, 0, 194970, 126647, + 0, 118887, 1791, 5191, 9288, 64822, 2892, 83192, 43394, 555, 0, 0, 66646, + 128980, 119002, 13151, 74512, 7289, 74055, 64161, 8854, 64162, 5858, + 41927, 10582, 120457, 1784, 1361, 120921, 121516, 7905, 0, 64868, 128813, + 13158, 92166, 7211, 71884, 9371, 73973, 128441, 6828, 1625, 7664, 128768, + 1342, 68440, 64171, 92642, 10903, 983496, 0, 92527, 0, 70438, 4482, + 41606, 128934, 125033, 121475, 0, 64381, 983940, 194974, 195090, 42245, + 126467, 41972, 0, 444, 983439, 9127, 66687, 66619, 126489, 78025, 0, + 11349, 40991, 917570, 0, 70177, 120830, 0, 1197, 128282, 1149, 68316, 0, + 983258, 40990, 43765, 121262, 3492, 917906, 118784, 129026, 0, 983566, + 12838, 67208, 19948, 41677, 3099, 0, 0, 41087, 0, 0, 983261, 119059, + 12036, 41309, 128161, 0, 8152, 0, 41550, 12227, 983613, 0, 12828, 127511, + 75015, 120964, 120708, 0, 0, 10386, 75068, 119955, 127303, 92680, 983134, + 68154, 127876, 1743, 0, 0, 92239, 65186, 917571, 0, 9606, 0, 70052, + 64439, 128864, 68062, 92686, 983875, 0, 43866, 128881, 0, 3395, 9362, + 10878, 43260, 0, 78362, 64830, 0, 125046, 41091, 3426, 1344, 8870, + 121100, 71344, 4735, 11111, 6119, 12822, 42699, 0, 983824, 74818, 1423, + 128923, 42637, 41080, 0, 12039, 10559, 128634, 118892, 0, 9472, 67734, + 11929, 126557, 7170, 9596, 6130, 128826, 43629, 11579, 71475, 0, 92501, + 125081, 78046, 66699, 64440, 1004, 92584, 194736, 43234, 66008, 12627, 0, + 68414, 74614, 43619, 43303, 11300, 43304, 9686, 5890, 11776, 7558, 70109, + 65627, 0, 10718, 13154, 3461, 9139, 0, 983094, 0, 119023, 65365, 73877, + 65628, 78019, 119272, 83118, 41708, 12860, 2641, 12069, 10838, 5403, + 10352, 70085, 10061, 43237, 125057, 5140, 209, 128847, 41704, 41056, + 43078, 127789, 118809, 67232, 10899, 65469, 70125, 0, 0, 2410, 993, + 83117, 120589, 120689, 78693, 0, 0, 7232, 0, 119253, 124963, 7110, 74462, + 2066, 10489, 42166, 43463, 10659, 3600, 68863, 4224, 1336, 41518, 121311, + 0, 0, 0, 41139, 64820, 92538, 12966, 41134, 0, 0, 119153, 120441, 272, + 4263, 8793, 983856, 0, 41502, 128133, 983, 12549, 124940, 0, 1190, 4109, + 1335, 841, 5888, 41358, 64863, 9544, 43481, 0, 120926, 70027, 2099, 5120, + 2409, 7799, 0, 74424, 0, 121041, 4731, 92279, 66629, 128127, 92525, 1255, + 4149, 9247, 74977, 9913, 983828, 121101, 64914, 917787, 65101, 113714, + 11694, 92475, 11690, 5835, 127164, 66625, 10842, 41354, 42123, 43097, + 11688, 66634, 1094, 194, 64692, 917900, 8180, 125055, 0, 9972, 73865, + 4519, 6114, 10898, 43072, 92465, 0, 93960, 983324, 126581, 10695, 0, + 7540, 0, 881, 7857, 6067, 65164, 0, 917897, 129134, 13311, 68403, 41857, + 64321, 8359, 83286, 12689, 983312, 11245, 128105, 983314, 71859, 68183, + 983415, 194829, 1287, 5436, 0, 71097, 74142, 92328, 74152, 70205, 6051, + 10497, 69668, 8985, 12109, 82962, 128908, 93043, 121013, 0, 3652, 10537, + 120282, 1276, 120440, 6549, 279, 73745, 0, 128664, 83244, 1489, 0, 0, 0, + 3899, 1007, 42124, 43828, 42122, 92337, 92367, 0, 11985, 1345, 78600, + 119832, 917563, 8956, 43083, 94057, 42138, 78610, 129131, 6430, 78608, + 78604, 78605, 6285, 78603, 78612, 78613, 65942, 492, 8685, 128481, + 121270, 0, 75027, 43712, 2582, 11470, 64538, 7444, 78615, 78616, 2297, 0, + 73837, 119823, 2527, 119824, 197, 2799, 92594, 41944, 83152, 9933, 74011, + 66515, 767, 5524, 7028, 0, 92168, 119827, 119817, 92950, 78633, 10896, 0, + 1799, 120497, 6971, 74336, 128342, 0, 65340, 118979, 41551, 2434, 94018, + 118823, 65353, 0, 4631, 118996, 0, 6407, 113737, 6338, 43214, 0, 7570, 0, + 3192, 120330, 8414, 983392, 93983, 195043, 0, 0, 9164, 66612, 93959, + 3171, 6623, 4961, 68396, 886, 55216, 8654, 78832, 9993, 74390, 64603, + 70066, 69241, 9599, 78629, 43084, 78627, 78628, 78625, 2399, 69693, 8994, + 10944, 41208, 983713, 41168, 8178, 74859, 3367, 92334, 42510, 78641, + 78636, 6804, 70475, 1947, 917579, 0, 92681, 42759, 11068, 1705, 9331, 0, + 74798, 9181, 65359, 125065, 8017, 119831, 65096, 66720, 68223, 43475, + 917548, 4909, 12126, 127540, 120696, 4904, 92961, 43503, 1365, 9253, + 42757, 43436, 7462, 127772, 0, 0, 83173, 66845, 64415, 120500, 83172, + 5398, 125035, 127386, 93953, 127362, 983782, 119015, 83171, 127007, 9476, + 983887, 120695, 12763, 126603, 3629, 120844, 13005, 11181, 3628, 0, 0, + 92502, 3469, 42107, 42116, 917578, 64809, 2928, 4905, 9853, 851, 9040, + 120372, 64665, 43086, 9114, 43870, 42583, 9315, 4822, 4906, 3852, 2847, + 119821, 3236, 11317, 1251, 7777, 41852, 11410, 10964, 0, 43222, 12646, + 120269, 10259, 9865, 65821, 75046, 6018, 68293, 125010, 12276, 119110, + 68372, 128255, 92259, 71893, 0, 119828, 10467, 0, 2443, 10918, 78217, + 77947, 1001, 9241, 1927, 0, 124942, 73987, 127882, 71895, 93012, 7992, + 77943, 43939, 12867, 128649, 8260, 77945, 7519, 11505, 12274, 8904, 518, + 65857, 128361, 128674, 13204, 4387, 857, 121252, 65369, 0, 92336, 43125, + 11842, 0, 71072, 121462, 0, 5136, 1968, 128906, 126627, 1337, 64967, + 1629, 0, 796, 66506, 0, 74123, 12877, 120649, 42314, 43388, 43826, 43944, + 6120, 478, 65151, 68128, 128147, 43082, 6016, 0, 42284, 71894, 4276, + 1206, 3619, 41638, 69691, 3843, 12011, 8853, 3361, 0, 490, 10715, 7578, + 68384, 92754, 65350, 10530, 12348, 8653, 68245, 42435, 6154, 9551, 65354, + 78522, 784, 42397, 334, 121084, 42416, 65356, 65273, 43937, 69666, 4442, + 10364, 43935, 778, 41626, 42455, 7989, 74063, 3227, 69907, 43932, 11102, + 2915, 11502, 41022, 41702, 10309, 127035, 75032, 120273, 6975, 0, 5415, + 12176, 983709, 74193, 3462, 43940, 42629, 78691, 71175, 43942, 127256, + 9759, 127255, 70057, 121442, 8114, 78698, 78697, 78696, 78695, 8710, + 42495, 118956, 70189, 4051, 10460, 43364, 71206, 1356, 12161, 42713, + 128857, 127268, 1619, 9703, 43152, 42489, 42112, 64436, 1875, 10808, + 42109, 120284, 41860, 64862, 13305, 64907, 5289, 13144, 128658, 983224, + 5575, 9675, 71129, 5940, 226, 2649, 6336, 983279, 92979, 43236, 3382, + 42449, 6498, 1658, 11936, 78232, 113814, 11269, 10151, 73759, 43100, + 69888, 65508, 983143, 0, 121451, 8935, 78234, 0, 983757, 0, 616, 74753, + 65178, 4684, 78701, 119653, 74631, 126551, 124992, 6048, 74460, 42110, + 73965, 10870, 8557, 11054, 68664, 75051, 9681, 4475, 67429, 41142, 2100, + 125024, 120731, 6035, 73796, 7651, 6846, 64443, 983957, 983296, 917987, + 0, 118966, 74144, 40997, 68488, 10392, 10328, 40998, 43462, 74488, 71182, + 9800, 8979, 0, 13307, 41000, 0, 5114, 6487, 3386, 129094, 10344, 0, 5115, + 5394, 43246, 78243, 5113, 66505, 41200, 128582, 4425, 194669, 0, 0, + 43074, 73799, 129076, 78147, 5112, 12173, 78545, 128771, 66824, 65338, + 983676, 0, 119582, 4474, 128936, 43093, 43964, 1587, 0, 127372, 64475, + 119217, 1369, 983672, 9959, 7927, 43963, 4560, 120793, 67811, 92277, + 983621, 64948, 4430, 43961, 42601, 4514, 66434, 93955, 8194, 65462, + 10626, 10965, 120905, 8893, 983303, 12542, 0, 65341, 67703, 65829, 7925, + 119822, 10475, 113825, 127011, 1352, 11069, 7707, 127560, 126486, 65279, + 127102, 68207, 74956, 7099, 6040, 67681, 10071, 78554, 9336, 43750, + 121074, 8899, 7798, 64474, 64259, 69873, 65188, 7820, 43018, 127082, + 128898, 7746, 1492, 78551, 10884, 75075, 66866, 5127, 11285, 42501, 5495, + 4273, 43095, 41426, 10849, 5730, 2999, 6342, 68636, 74304, 371, 64373, + 6023, 169, 5497, 11708, 75028, 128603, 6323, 129065, 8224, 128417, 8938, + 6043, 12738, 120671, 983076, 5321, 68645, 194798, 120251, 2589, 74332, + 1689, 7802, 4683, 74318, 42704, 92940, 11905, 983615, 0, 128516, 128163, + 74513, 6049, 0, 4027, 834, 118962, 1803, 983822, 1503, 78336, 127173, 71312, 5731, 1381, 2387, 126610, 70808, 8289, 64525, 65817, 2881, 43142, 0, 9601, 2879, 9668, 9766, 0, 5729, 129110, 71230, 6036, 64881, 4026, 9361, 127091, 2887, 70389, 3526, 6298, 119851, 77897, 120095, 78519, 118964, 8572, 6021, 77896, 128288, 71174, 43155, 0, 71197, 3146, 10959, - 9483, 0, 77893, 10981, 166, 917841, 8635, 917840, 10623, 408, 119058, - 127507, 13298, 0, 7426, 41641, 12717, 0, 7607, 10639, 43396, 0, 119089, - 41643, 74134, 983054, 8713, 41640, 10221, 41645, 66293, 6645, 646, 66726, - 66711, 42129, 68255, 77901, 3472, 8697, 0, 0, 983815, 0, 194599, 0, 5809, - 1950, 119356, 92432, 68339, 0, 42136, 0, 0, 0, 0, 3247, 92402, 65017, - 128794, 68428, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, 0, 0, 78446, - 119853, 127922, 0, 8285, 0, 4509, 917802, 66471, 12216, 0, 40988, 92592, - 74809, 41727, 0, 42848, 2396, 129078, 0, 74018, 917538, 64940, 7027, - 3886, 0, 42457, 92888, 119834, 996, 68123, 94058, 4249, 92410, 69650, - 11707, 8222, 73825, 7939, 71213, 92460, 127801, 917592, 128359, 8534, - 69853, 40983, 0, 983240, 0, 7201, 12561, 0, 42371, 12558, 1540, 917549, - 10052, 40982, 0, 0, 1488, 71177, 0, 194831, 917559, 128401, 0, 1563, - 128034, 9619, 983940, 0, 983082, 127872, 71363, 3560, 7797, 6070, 10006, - 128922, 2922, 6082, 70147, 65009, 983942, 12567, 66712, 0, 41412, 0, 0, - 3607, 9200, 10046, 9612, 42153, 8218, 9485, 0, 2032, 78354, 917904, - 119131, 0, 0, 0, 43085, 6057, 508, 93968, 92989, 67968, 0, 92198, 0, 0, - 638, 6083, 119072, 124950, 0, 2305, 78348, 68096, 0, 6056, 6659, 67969, - 983288, 6085, 0, 0, 3915, 41634, 0, 41639, 63912, 11941, 983783, 4028, - 1787, 42180, 43096, 43753, 3249, 1768, 93982, 12328, 501, 93985, 10601, - 0, 583, 0, 41977, 0, 66004, 66416, 6505, 74010, 0, 13064, 55267, 119113, - 6500, 5526, 65049, 0, 12990, 0, 92376, 12745, 9678, 983143, 120587, 9869, - 128815, 1771, 128965, 8936, 92964, 0, 4208, 78341, 78567, 78342, 67742, - 983208, 74101, 128605, 11762, 0, 70096, 6835, 68010, 66475, 120260, 5027, - 78172, 128878, 119830, 5069, 73736, 5028, 9897, 92774, 73739, 5026, - 983253, 68639, 6331, 10079, 8931, 0, 1415, 8866, 41901, 74790, 78138, - 119361, 983564, 43106, 5029, 65309, 1580, 3598, 68424, 41070, 77903, - 7658, 3440, 78215, 1562, 128656, 127175, 119358, 1716, 983679, 10600, - 917867, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, 68137, - 5025, 69892, 983209, 0, 118885, 127956, 65557, 0, 74541, 128924, 11599, - 128209, 11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, - 74195, 11569, 65275, 8906, 127096, 5755, 2636, 71203, 10815, 11619, 2301, - 41540, 7815, 11616, 6979, 12080, 7721, 11604, 7869, 1592, 0, 42152, - 78498, 41048, 917763, 829, 0, 92406, 19950, 66886, 126482, 6616, 0, - 118875, 10953, 391, 0, 69785, 482, 42296, 11588, 0, 43606, 71185, 68397, - 66370, 74282, 42335, 983188, 72421, 983799, 7538, 5315, 120644, 42491, - 92901, 42061, 128002, 4576, 0, 68417, 43809, 4277, 0, 3563, 64472, 42338, - 368, 42058, 3960, 11043, 11337, 78209, 917820, 63989, 3958, 12132, 1849, - 0, 9921, 42451, 4253, 41147, 42064, 11959, 42404, 41160, 0, 3618, 78338, - 194924, 43300, 5156, 92629, 70350, 929, 6827, 42035, 42437, 1555, 0, - 8691, 66435, 2215, 41662, 94010, 0, 0, 128824, 93952, 4578, 64513, 41664, - 983734, 42578, 71049, 41661, 78351, 43267, 9356, 0, 0, 0, 1286, 10166, - 983117, 0, 64707, 128925, 42476, 7730, 11156, 128522, 42483, 0, 128404, - 42324, 42291, 10020, 43359, 0, 6641, 525, 41627, 917923, 8763, 128304, - 41628, 533, 11931, 65225, 8321, 42504, 42581, 0, 6915, 42310, 4377, 8559, - 128321, 74360, 125100, 13193, 64350, 11666, 8679, 41924, 1576, 7735, - 92398, 0, 73840, 983092, 11374, 78043, 10889, 43461, 7757, 42462, 120226, - 10029, 66493, 2718, 4168, 73842, 13308, 120112, 0, 1179, 4440, 0, 77948, - 363, 11015, 66817, 77944, 43857, 127090, 66692, 120826, 0, 66492, 6593, - 64625, 41963, 92177, 119329, 0, 10013, 64434, 92520, 127095, 9492, 11782, - 64382, 12833, 77830, 0, 1297, 41630, 630, 127094, 0, 120774, 70165, 1043, - 43652, 66223, 10090, 0, 124945, 313, 129033, 41881, 0, 42311, 7445, - 119244, 5750, 10759, 9419, 55222, 9405, 11268, 42919, 9398, 8526, 9399, - 9422, 0, 66495, 69990, 0, 92990, 41718, 10707, 1603, 983703, 119003, 0, - 631, 77952, 69703, 13161, 65272, 71067, 10546, 74210, 78101, 11600, - 77961, 2797, 73821, 42427, 306, 714, 3058, 42381, 77962, 127080, 12351, - 42395, 0, 11607, 127528, 11198, 66821, 77967, 9157, 73765, 66364, 42433, - 77964, 7603, 12803, 180, 42141, 0, 120612, 66494, 12674, 8244, 362, - 92439, 125096, 8037, 43777, 11535, 0, 74845, 5185, 7165, 5521, 10334, - 2093, 71329, 10302, 125131, 10104, 1027, 5181, 983146, 0, 10523, 1446, - 42320, 6845, 991, 5189, 42472, 41647, 120105, 1722, 5581, 42898, 3405, 0, - 194644, 5523, 0, 42620, 92447, 124988, 9549, 0, 10549, 55282, 9661, - 43682, 0, 77910, 78068, 68247, 0, 71184, 983070, 41991, 983893, 0, 7630, - 9846, 7684, 10350, 128453, 1174, 77981, 42733, 77978, 77980, 66485, - 77977, 42277, 77974, 42456, 65667, 74438, 12330, 128272, 0, 42417, 42383, - 66630, 41344, 6293, 0, 66252, 77984, 74443, 127894, 10209, 8313, 4195, - 74435, 1316, 66690, 120032, 6332, 64894, 983156, 65871, 78060, 1736, - 983684, 3901, 12228, 120151, 65200, 3383, 10446, 78241, 693, 9130, 314, - 64149, 42420, 11949, 983669, 120152, 11026, 120516, 5332, 6940, 64154, - 12635, 124980, 42706, 1751, 273, 8165, 13166, 120763, 78840, 71368, - 12824, 0, 4528, 5320, 6301, 43662, 6133, 9339, 9463, 42346, 10922, 64560, - 3757, 0, 0, 74302, 65869, 73760, 2569, 0, 2326, 65740, 2565, 42459, 7596, - 7921, 983868, 73862, 127981, 41848, 2567, 66006, 92622, 4044, 92646, 0, - 12233, 983871, 1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 127866, - 42295, 0, 125114, 71322, 92518, 2222, 66499, 0, 5417, 12275, 10895, 0, - 274, 0, 1858, 0, 0, 55251, 10118, 3133, 128008, 71857, 0, 9610, 8068, - 8197, 0, 699, 0, 41665, 5868, 128710, 92695, 42182, 7581, 19940, 43668, - 41667, 128057, 0, 1923, 65583, 65802, 93970, 64597, 43444, 119184, 71855, - 0, 6464, 7036, 2996, 1937, 983751, 68481, 41835, 4047, 41842, 0, 64107, - 77965, 983746, 11017, 120601, 0, 293, 77966, 92169, 64791, 41827, 42466, - 43422, 10579, 8560, 71350, 65413, 77963, 4803, 12964, 1739, 1941, 3900, - 128967, 1713, 77969, 0, 73957, 11407, 42441, 41971, 6297, 120098, 64105, - 128080, 42481, 11716, 66473, 7179, 42289, 125095, 64103, 969, 0, 9352, - 983149, 6165, 64100, 0, 6632, 73861, 42402, 74327, 7806, 0, 8914, 66908, + 9483, 83219, 77893, 10981, 166, 917841, 8635, 917840, 10623, 408, 119058, + 127507, 13298, 127253, 7426, 41641, 12717, 983795, 7607, 10639, 43396, + 129300, 119089, 41643, 74134, 983054, 8713, 41640, 10221, 41645, 66293, + 6645, 646, 66726, 66711, 42129, 68255, 77901, 3472, 8697, 0, 120936, + 121069, 0, 118859, 0, 5809, 1950, 119356, 92432, 68339, 128943, 42136, + 121440, 0, 0, 0, 3247, 92402, 65017, 128794, 68428, 66668, 0, 121112, + 10983, 0, 128787, 0, 41567, 119852, 0, 0, 78446, 119853, 127922, 0, 8285, + 126516, 4509, 121043, 66471, 12216, 128806, 40988, 83221, 74809, 41727, + 0, 42848, 2396, 128083, 194892, 74018, 917538, 64940, 7027, 3886, 0, + 42457, 92888, 83299, 996, 68123, 94058, 4249, 92410, 69650, 11707, 8222, + 73825, 7939, 71213, 92460, 127801, 121408, 128359, 8534, 69853, 40983, 0, + 121421, 0, 7201, 12561, 120866, 42371, 12558, 1540, 917549, 10052, 40982, + 119841, 0, 1488, 71177, 0, 194831, 917559, 128401, 0, 1563, 128034, 9619, + 120840, 917905, 120954, 127872, 71363, 3560, 7797, 6070, 10006, 128922, + 2922, 6082, 70147, 65009, 983942, 12567, 66712, 0, 41412, 128131, 119591, + 3607, 9200, 10046, 9612, 42153, 8218, 9485, 0, 2032, 78354, 83462, + 119131, 0, 0, 67826, 43085, 6057, 508, 93968, 92989, 67968, 0, 92198, 0, + 128831, 638, 6083, 119072, 124950, 0, 2305, 78348, 68096, 917772, 6056, + 6659, 67969, 983290, 6085, 0, 0, 3915, 41634, 0, 41639, 63912, 11941, + 983783, 4028, 1787, 42180, 43096, 43753, 3249, 1768, 93982, 12328, 501, + 93985, 10601, 0, 583, 0, 41977, 0, 66004, 66416, 6505, 74010, 983250, + 13064, 55267, 119113, 6500, 5526, 65049, 0, 12990, 0, 92376, 12745, 9678, + 121108, 120587, 9869, 83150, 1771, 128965, 8936, 92964, 0, 4208, 78341, + 78567, 78342, 67742, 983208, 74101, 128605, 11762, 0, 70096, 6835, 68010, + 66475, 120260, 5027, 78172, 128878, 119830, 5069, 73736, 5028, 9897, + 92774, 73739, 5026, 983255, 68639, 6331, 10079, 8931, 0, 1415, 8866, + 41901, 74790, 78138, 119361, 983564, 43106, 5029, 65309, 1580, 3598, + 68424, 41070, 77903, 7658, 3440, 78215, 1562, 128656, 127175, 119358, + 1716, 983679, 10600, 78558, 620, 41001, 6028, 70445, 42892, 0, 71116, + 5024, 74945, 41003, 68137, 5025, 69892, 983209, 75039, 118885, 127956, + 65557, 0, 74541, 128924, 11599, 128209, 11602, 6243, 11574, 11581, 11597, + 11598, 6253, 6105, 11584, 70273, 11569, 65275, 8906, 43945, 5755, 2636, + 71203, 10815, 11619, 2301, 41540, 7815, 11616, 6979, 12080, 7721, 11604, + 7869, 1592, 0, 42152, 78498, 41048, 917763, 829, 0, 92406, 19950, 66886, + 64131, 6616, 0, 118875, 10953, 391, 0, 69785, 482, 42296, 11588, 0, + 43606, 71185, 68397, 66370, 74282, 42335, 69786, 72421, 82998, 7538, + 5315, 83367, 42491, 92901, 42061, 128002, 4576, 0, 68417, 43809, 4277, 0, + 3563, 64472, 42338, 368, 42058, 3960, 11043, 11337, 78209, 120244, 63989, + 3958, 12132, 1849, 0, 9921, 42451, 4253, 41147, 42064, 11959, 42404, + 41160, 121481, 3618, 78338, 194924, 43300, 5156, 92629, 70350, 929, 6827, + 42035, 42437, 1555, 0, 8691, 66435, 2215, 41662, 94010, 119262, 0, + 128824, 93952, 4578, 64513, 41664, 983734, 42578, 71049, 41661, 78351, + 43267, 9356, 0, 194880, 983401, 1286, 10166, 983117, 0, 64707, 128925, + 42476, 7730, 11156, 128522, 42483, 129083, 74940, 42324, 42291, 10020, + 43359, 0, 6641, 525, 41627, 917923, 8763, 128304, 41628, 533, 11931, + 65225, 8321, 42504, 42581, 0, 6915, 42310, 4377, 8559, 128321, 8587, + 121318, 13193, 64350, 11666, 8679, 41924, 1576, 7735, 92398, 0, 73840, + 83153, 11374, 78043, 10889, 43461, 7757, 42462, 120226, 10029, 66493, + 2718, 4168, 43904, 13308, 120112, 0, 1179, 4440, 43902, 77948, 363, + 11015, 43903, 77944, 43857, 83049, 66692, 120826, 0, 66492, 6593, 64625, + 41963, 92177, 119329, 0, 10013, 64434, 75010, 127095, 9492, 11782, 64382, + 12833, 77830, 0, 1297, 41630, 630, 120960, 983923, 120774, 70165, 1043, + 43652, 66223, 10090, 0, 124945, 313, 121483, 41881, 194658, 42311, 7445, + 43906, 5750, 10759, 9419, 55222, 9405, 11268, 42919, 9398, 8526, 9399, + 9422, 43894, 66495, 69990, 983885, 92990, 41718, 10707, 1603, 983703, + 119003, 0, 631, 77952, 69703, 13161, 65272, 71067, 10546, 74210, 78101, + 11600, 77961, 2797, 43924, 42427, 306, 714, 3058, 42381, 77962, 127080, + 12351, 42395, 0, 11607, 127528, 11198, 66821, 77967, 9157, 73765, 66364, + 42433, 77964, 7603, 12803, 180, 42141, 0, 120612, 66494, 12674, 8244, + 362, 92439, 43890, 8037, 43777, 11535, 126539, 43893, 5185, 7165, 5521, + 10334, 2093, 71329, 10302, 125131, 10104, 1027, 5181, 128435, 5117, + 10523, 1446, 42320, 6845, 991, 5189, 42472, 41647, 120105, 1722, 5581, + 42898, 3405, 0, 194644, 5523, 43915, 42620, 92447, 74943, 9549, 0, 10549, + 43923, 9661, 42933, 74884, 77910, 78068, 43921, 0, 71184, 983070, 41991, + 983893, 0, 7630, 9846, 7684, 10350, 128453, 1174, 77981, 42733, 77978, + 77980, 66485, 77977, 42277, 77974, 42456, 43909, 74438, 12330, 128272, 0, + 42417, 42383, 66630, 41344, 6293, 0, 66252, 43908, 74443, 127894, 10209, + 8313, 4195, 74435, 1316, 66690, 75072, 6332, 64894, 983156, 65871, 67250, + 1736, 983684, 3901, 12228, 120151, 65200, 3383, 10446, 78241, 693, 9130, + 314, 64149, 42420, 11949, 127200, 120152, 11026, 120516, 5332, 6940, + 64154, 12635, 124980, 42706, 1751, 273, 8165, 13166, 83307, 78840, 71368, + 12824, 43911, 4528, 5320, 6301, 43662, 6133, 9339, 9463, 42346, 10922, + 64560, 3757, 0, 0, 74302, 65869, 73760, 2569, 74976, 2326, 65740, 2565, + 42459, 7596, 7921, 983868, 73862, 127981, 41848, 2567, 66006, 92622, + 4044, 92646, 43953, 12233, 983871, 1023, 474, 194940, 119818, 0, 0, + 42487, 65556, 121168, 127866, 42295, 128203, 121474, 71322, 92518, 2222, + 66499, 0, 5417, 12275, 10895, 0, 274, 0, 1858, 983455, 0, 55251, 10118, + 3133, 127771, 71857, 121201, 9610, 8068, 8197, 917545, 699, 0, 41665, + 5868, 128710, 92695, 42182, 7581, 19940, 43668, 41667, 128057, 0, 1923, + 65583, 65802, 93970, 64597, 43444, 78129, 68751, 0, 6464, 7036, 2996, + 1937, 983751, 68481, 41835, 4047, 41842, 0, 64107, 77965, 119837, 11017, + 120601, 0, 293, 77966, 92169, 64791, 41827, 42466, 43422, 10579, 8560, + 71350, 65413, 77963, 4803, 12964, 1739, 1941, 3900, 128967, 1713, 77969, + 121292, 73957, 11407, 42441, 41971, 6297, 120098, 64105, 120565, 42481, + 11716, 66473, 7179, 42289, 125095, 64103, 969, 0, 9352, 71481, 6165, + 64100, 917819, 6632, 73861, 42402, 74327, 7806, 113762, 8914, 66908, 124954, 3183, 1435, 64876, 2969, 6046, 64441, 6208, 67849, 5746, 66408, - 0, 64416, 42422, 0, 983046, 7082, 73775, 338, 5059, 194719, 129145, - 42328, 10767, 0, 8115, 0, 74758, 0, 8227, 2073, 1218, 917790, 983230, - 65848, 92884, 0, 69863, 0, 126987, 4486, 128082, 0, 0, 10925, 0, 119868, - 0, 124952, 42309, 10257, 65191, 10273, 7668, 10305, 42461, 0, 42349, - 8832, 78051, 64127, 10644, 42662, 78828, 42278, 74451, 126988, 69874, - 7794, 119867, 42429, 6377, 42316, 119026, 3669, 3968, 42468, 71319, - 69658, 0, 65402, 119581, 0, 128747, 64933, 194815, 41960, 6699, 42903, - 128755, 125013, 6823, 42391, 1588, 43502, 8409, 78223, 19967, 65398, 787, - 71315, 917939, 127744, 6115, 2078, 41654, 42480, 0, 92650, 41655, 65401, - 43975, 72427, 0, 113816, 644, 65500, 41657, 10778, 3659, 9533, 184, 1553, - 13107, 65484, 69648, 10502, 66296, 0, 0, 41554, 0, 8220, 129031, 41557, - 0, 128938, 11070, 119221, 5157, 4020, 73858, 41555, 9514, 64818, 65103, - 64641, 64303, 78131, 7520, 73888, 74377, 11029, 66651, 983068, 128492, - 118930, 64527, 0, 7877, 12723, 983798, 127348, 120096, 74602, 9955, - 119557, 4055, 42817, 0, 65212, 11715, 12190, 12319, 78630, 0, 78631, - 9502, 65427, 125048, 65424, 12607, 0, 9734, 65425, 0, 983808, 127357, - 78835, 78836, 10112, 10827, 0, 9866, 74527, 66675, 118867, 8625, 64346, - 11290, 10477, 67738, 8636, 983927, 8315, 65444, 983793, 195011, 74595, - 6152, 0, 73947, 6629, 125056, 120171, 0, 74589, 43993, 128346, 69790, - 64435, 64955, 43690, 11046, 11490, 42730, 4485, 127107, 0, 64926, 0, 0, - 43830, 5869, 12437, 42728, 0, 7040, 3588, 0, 12825, 0, 0, 12725, 74092, - 127106, 78634, 223, 78635, 69675, 120166, 42444, 128449, 64499, 65245, - 129104, 1171, 128802, 69717, 120113, 1805, 8772, 43820, 0, 9930, 65247, - 78619, 120111, 2338, 0, 118853, 0, 42676, 0, 64800, 13092, 11185, 68126, - 1213, 128419, 64075, 797, 64074, 8734, 4212, 127369, 64387, 4115, 0, - 5005, 64070, 64073, 10679, 0, 77954, 9402, 64276, 426, 0, 0, 8251, 10136, - 65436, 0, 2120, 43302, 1224, 0, 65576, 70795, 10701, 1764, 3101, 127815, - 12858, 120159, 0, 11373, 6378, 71093, 120103, 8663, 9312, 41644, 4539, - 2129, 70785, 9222, 983738, 118907, 4259, 9092, 74567, 41961, 0, 12724, - 66357, 42331, 64935, 0, 0, 1293, 7947, 2132, 983767, 71858, 72440, 2454, - 42717, 3613, 128837, 0, 0, 65888, 8816, 10978, 10840, 0, 10668, 113723, - 43087, 12595, 120304, 983114, 8822, 0, 1157, 64903, 8638, 127265, 917886, - 0, 0, 69848, 8235, 120316, 4405, 10086, 120247, 11128, 69216, 0, 65430, - 71321, 6079, 6817, 10764, 120314, 64291, 120315, 998, 120312, 11062, - 1317, 64327, 1558, 983934, 1991, 7882, 42254, 128954, 41700, 530, 0, - 10428, 119335, 12002, 119336, 5742, 43076, 4692, 64630, 41823, 4007, - 5004, 74033, 7896, 751, 6595, 6596, 120325, 66373, 983247, 0, 64908, - 92691, 6311, 93019, 12004, 119192, 12049, 43108, 120326, 71083, 41705, - 92188, 6598, 0, 6599, 66822, 93031, 42148, 118825, 66027, 0, 6597, 9412, - 8340, 11824, 64745, 2281, 69904, 128495, 1988, 5407, 67865, 2430, 41678, - 93059, 120243, 2336, 983903, 0, 67169, 120442, 127092, 1921, 10947, - 19927, 70390, 65406, 0, 19913, 4284, 13217, 0, 43789, 12841, 9229, 10956, - 42285, 41674, 19964, 41679, 65084, 3521, 124957, 5774, 8325, 69864, - 65403, 983089, 1854, 10794, 93054, 67660, 69846, 0, 78359, 5280, 0, 4344, - 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, - 12934, 41682, 65432, 41693, 0, 6071, 65434, 127467, 4804, 4053, 0, - 127469, 194653, 41696, 467, 69823, 127463, 69797, 194652, 127473, 8421, - 127472, 69682, 43705, 502, 0, 65431, 119056, 69954, 12043, 1303, 316, - 7364, 2029, 2136, 119246, 11533, 64365, 43480, 92639, 4860, 126648, - 127877, 42488, 70339, 9583, 128849, 5546, 8019, 73856, 0, 0, 0, 5544, - 2355, 12150, 65725, 5543, 77989, 63751, 12137, 5548, 77985, 0, 65727, - 68388, 65726, 6077, 128352, 65452, 0, 11301, 11214, 65952, 78010, 9874, - 78007, 983115, 1319, 3050, 65410, 67399, 0, 78016, 78017, 42830, 43996, - 66716, 128137, 4691, 92242, 9345, 621, 92709, 128222, 0, 65411, 0, 41182, - 73881, 65408, 73899, 78024, 9474, 10545, 119118, 10887, 3786, 65409, - 8894, 43179, 71042, 7923, 3716, 92363, 9996, 8508, 127794, 7012, 8195, - 127834, 9566, 0, 3722, 0, 41707, 8493, 545, 9575, 41379, 10050, 12718, - 69854, 8859, 6820, 74345, 65110, 120740, 128978, 0, 9119, 2787, 7920, - 118823, 4021, 2012, 7985, 0, 119663, 917792, 0, 78021, 78022, 410, 78020, - 1802, 78018, 74107, 0, 41659, 41671, 1827, 0, 64396, 10126, 12116, 41673, - 120370, 11422, 71846, 120373, 3860, 120367, 68412, 41345, 120362, 120363, - 11748, 42158, 7941, 11076, 8749, 120361, 2104, 64858, 361, 120357, 845, - 0, 41560, 11970, 4562, 917920, 2926, 68495, 4569, 74130, 128659, 43487, - 194630, 611, 74129, 64871, 118891, 65629, 0, 194858, 74854, 0, 70466, - 67392, 66385, 0, 6291, 0, 68487, 41669, 7094, 917921, 0, 983581, 74054, - 127754, 128917, 0, 839, 983319, 7695, 8769, 65246, 4829, 67756, 4859, - 64467, 0, 983963, 118998, 7206, 119636, 6647, 43986, 983796, 69766, - 194664, 64764, 4210, 983254, 127936, 804, 194651, 0, 12298, 70344, 66653, - 0, 64924, 10091, 67200, 9468, 67206, 67205, 67204, 67203, 92503, 12839, - 64669, 92202, 71851, 1279, 1425, 6224, 119229, 11049, 127123, 92697, - 42649, 8482, 92440, 0, 5032, 67209, 11940, 67207, 664, 120437, 5034, 0, - 70200, 127525, 42702, 70194, 93061, 13294, 67873, 64869, 6032, 67218, - 9115, 7430, 120377, 70191, 120819, 68387, 120168, 73913, 120170, 41161, - 5518, 4174, 10993, 41162, 120160, 64528, 1169, 434, 41437, 1905, 6034, - 41164, 64744, 9528, 67741, 128800, 524, 0, 74029, 788, 74027, 0, 71881, - 0, 1663, 10419, 42901, 42636, 67211, 67210, 0, 120656, 67215, 67214, - 67213, 67212, 0, 67897, 74039, 0, 0, 11395, 0, 119107, 43612, 64344, 0, - 0, 10855, 5445, 9355, 67221, 65198, 7391, 8989, 221, 65686, 0, 0, 8010, - 7191, 4962, 69772, 8855, 74612, 70820, 64469, 120426, 10555, 67227, - 43333, 67225, 128483, 120427, 10451, 67229, 67653, 7245, 12443, 74405, - 9947, 120149, 78317, 3873, 8367, 77842, 120146, 43433, 43649, 11987, 0, - 0, 11010, 11164, 74059, 74062, 6217, 5896, 43846, 7682, 74049, 1462, - 10235, 0, 0, 0, 43441, 127924, 127777, 42595, 0, 74402, 118860, 78661, - 120419, 92497, 66287, 120420, 92378, 120549, 119082, 64295, 120418, 0, - 64765, 73923, 120417, 120662, 69920, 194702, 6216, 67230, 10755, 9455, - 11155, 8124, 127042, 9470, 6944, 127540, 0, 69680, 2828, 0, 531, 42638, - 0, 0, 0, 43428, 8204, 3614, 2827, 9696, 120365, 0, 8728, 4354, 10904, - 78562, 19936, 7833, 120691, 0, 42599, 42597, 42709, 120409, 125012, 0, - 8537, 127306, 0, 9354, 983164, 127959, 41199, 10121, 2028, 0, 120253, - 69715, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, 11948, 92205, - 120777, 120502, 41155, 68306, 74071, 0, 983457, 12713, 127519, 70402, 0, - 78772, 113770, 1734, 0, 78141, 127040, 64594, 2456, 231, 68227, 74167, - 542, 0, 118786, 983859, 194797, 1230, 983953, 126555, 3597, 4446, 10584, - 74235, 92215, 4037, 67737, 8352, 0, 5687, 0, 64515, 0, 194801, 55265, - 67846, 78434, 9704, 0, 0, 70080, 71338, 0, 8660, 126478, 0, 0, 78773, + 0, 64416, 42422, 83506, 983046, 7082, 73775, 338, 5059, 121369, 83524, + 42328, 10767, 128862, 8115, 83454, 74758, 0, 8227, 2073, 1218, 917790, + 983230, 65848, 92884, 83517, 69863, 128328, 126987, 4486, 128082, 917796, + 0, 10925, 0, 83515, 83507, 124952, 42309, 10257, 65191, 10273, 7668, + 10305, 42461, 74882, 42349, 8832, 78051, 64127, 10644, 42662, 78828, + 42278, 74451, 126988, 69874, 7794, 119214, 42429, 6377, 42316, 119026, + 3669, 3968, 42468, 71319, 69658, 0, 65402, 119581, 194973, 128747, 64933, + 194627, 41960, 6699, 42903, 128755, 125013, 6823, 42391, 1588, 43502, + 8409, 78223, 19967, 65398, 787, 71315, 128335, 127744, 6115, 2078, 41654, + 42480, 917949, 92650, 41655, 65401, 43975, 72427, 0, 113816, 644, 65500, + 41657, 10778, 3659, 9533, 184, 1553, 13107, 65484, 69648, 10502, 66296, + 0, 0, 41554, 0, 8220, 128432, 41557, 0, 128938, 11070, 119221, 5157, + 4020, 73858, 41555, 9514, 64818, 65103, 64641, 64303, 78131, 7520, 73888, + 74377, 11029, 66651, 983068, 128492, 118930, 64527, 121395, 7877, 12723, + 983798, 68776, 120096, 74602, 9955, 119557, 4055, 42817, 0, 65212, 11715, + 12190, 12319, 78630, 0, 78631, 9502, 65427, 125048, 65424, 12607, 120966, + 9734, 65425, 0, 121431, 127357, 74890, 78836, 10112, 10827, 194635, 9866, + 74527, 66675, 118867, 8625, 64346, 11290, 10477, 67738, 8636, 983927, + 8315, 65444, 983793, 195011, 74595, 6152, 78820, 73947, 6629, 125056, + 120171, 0, 74589, 43993, 128346, 69790, 64435, 64955, 43690, 11046, + 11490, 42730, 4485, 71126, 128194, 64926, 0, 983133, 43830, 5869, 12437, + 42728, 0, 7040, 3588, 0, 12825, 121158, 0, 12725, 74092, 127106, 78634, + 223, 78635, 69675, 120119, 42444, 128449, 64499, 65245, 129104, 1171, + 128802, 69717, 120113, 1805, 8772, 43820, 0, 9930, 65247, 78619, 74954, + 2338, 120032, 118853, 0, 42676, 0, 64800, 13092, 11185, 68126, 1213, + 128419, 64075, 797, 64074, 8734, 4212, 83005, 64387, 4115, 71331, 5005, + 64070, 64073, 10679, 83000, 77954, 9402, 64276, 426, 83358, 83010, 8251, + 10136, 65436, 0, 2120, 43302, 1224, 0, 65576, 70795, 10701, 1764, 3101, + 127815, 12858, 120159, 120101, 11373, 6378, 71093, 120103, 8663, 9312, + 41644, 4539, 2129, 70785, 9222, 121479, 118907, 4259, 9092, 74567, 41961, + 128515, 12724, 66357, 42331, 64935, 0, 0, 1293, 7947, 2132, 983767, + 71858, 72440, 2454, 42717, 3613, 128837, 71117, 0, 65888, 8816, 10978, + 10840, 0, 10668, 113723, 43087, 12595, 120304, 983114, 8822, 0, 1157, + 64903, 8638, 127265, 917886, 127905, 0, 69848, 8235, 120316, 4405, 10086, + 120247, 11128, 69216, 121065, 65430, 71321, 6079, 6817, 10764, 120314, + 64291, 120315, 998, 120312, 11062, 1317, 64327, 1558, 194572, 1991, 7882, + 42254, 128954, 41700, 530, 0, 10428, 119335, 12002, 119336, 5742, 43076, + 4692, 64630, 41823, 4007, 5004, 74033, 7896, 751, 6595, 6596, 120325, + 66373, 983249, 128746, 64908, 92691, 6311, 93019, 12004, 119192, 12049, + 43108, 120326, 71083, 41705, 92188, 6598, 121298, 6599, 66822, 93031, + 42148, 118825, 66027, 121055, 6597, 9412, 8340, 11824, 64745, 2281, + 69904, 128495, 1988, 5407, 67865, 2430, 41678, 93059, 83114, 2336, + 983903, 0, 67169, 120442, 127092, 1921, 10947, 19927, 70390, 65406, + 983464, 19913, 4284, 13217, 0, 43789, 12841, 9229, 10956, 42285, 41674, + 19964, 41679, 65084, 3521, 124957, 5774, 8325, 69864, 65403, 983089, + 1854, 10794, 93054, 67660, 69846, 194765, 78359, 5280, 0, 4344, 12905, + 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, 12934, + 41682, 65432, 41693, 0, 6071, 65434, 127467, 4804, 4053, 0, 127469, + 194653, 41696, 467, 69823, 127463, 69797, 121403, 121294, 8421, 127472, + 69682, 43705, 502, 75029, 65431, 119056, 69954, 12043, 1303, 316, 7364, + 2029, 2136, 119246, 11533, 64365, 43480, 92639, 4860, 70372, 127877, + 42488, 70339, 9583, 128849, 5546, 8019, 73856, 983840, 124960, 120839, + 5544, 2355, 12150, 65725, 5543, 75034, 63751, 12137, 5548, 77985, 0, + 65727, 68388, 65726, 6077, 128352, 65452, 0, 11301, 11214, 65952, 78010, + 9874, 78007, 983115, 1319, 3050, 65410, 67399, 92606, 78016, 78017, + 42830, 43996, 66716, 83050, 4691, 92242, 9345, 621, 83512, 128222, 0, + 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, 10545, 119118, 10887, + 3786, 65409, 8894, 43179, 71042, 7923, 3716, 92363, 9996, 8508, 127794, + 7012, 8195, 127834, 9566, 0, 3722, 983374, 41707, 8493, 545, 9575, 41379, + 10050, 12718, 69854, 8859, 6820, 74345, 65110, 120740, 128978, 55282, + 9119, 2787, 7920, 70091, 4021, 2012, 7985, 0, 119663, 917792, 0, 78021, + 78022, 410, 78020, 1802, 78018, 74107, 74895, 41659, 41671, 1827, 0, + 64396, 10126, 12116, 41673, 120370, 11422, 71846, 120373, 3860, 120367, + 68412, 41345, 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, + 2104, 64858, 361, 120357, 845, 92174, 41560, 11970, 4562, 128473, 2926, + 68495, 4569, 74130, 128659, 43487, 194630, 611, 74129, 64871, 118891, + 65629, 0, 194858, 74854, 0, 70466, 67392, 66385, 71439, 6291, 0, 68487, + 41669, 7094, 121051, 0, 120999, 74054, 127754, 128917, 0, 839, 121315, + 7695, 8769, 65246, 4829, 67756, 4859, 64467, 0, 83525, 118998, 7206, + 119636, 6647, 43986, 83518, 69766, 194664, 64764, 4210, 128300, 127936, + 804, 83520, 0, 12298, 70344, 66653, 126983, 64924, 10091, 67200, 9468, + 67206, 67205, 67204, 67203, 92503, 12839, 64669, 92202, 71851, 1279, + 1425, 6224, 119229, 11049, 127123, 71480, 42649, 8482, 92440, 0, 5032, + 67209, 11940, 67207, 664, 120437, 5034, 92495, 70200, 127525, 42702, + 70194, 93061, 13294, 67873, 64869, 6032, 67218, 9115, 7430, 77837, 70191, + 120819, 68387, 120168, 73913, 120170, 41161, 5518, 4174, 10993, 41162, + 77836, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, 67741, + 128800, 524, 0, 74029, 788, 74027, 194667, 71881, 0, 1663, 10419, 42901, + 42636, 67211, 67210, 129147, 120656, 67215, 67214, 67213, 67212, 0, + 67897, 74039, 0, 0, 11395, 0, 119107, 43612, 64344, 194732, 0, 10855, + 5445, 9355, 67221, 65198, 7391, 8989, 221, 65686, 983874, 119238, 8010, + 7191, 4962, 69772, 8855, 74612, 70820, 64469, 92592, 10555, 67227, 43333, + 67225, 128483, 120427, 10451, 67229, 67653, 7245, 12443, 74405, 9947, + 120149, 78317, 3873, 8367, 77842, 120146, 43433, 43649, 11987, 83343, + 983581, 11010, 11164, 74059, 74062, 6217, 5896, 43846, 7682, 74049, 1462, + 10235, 0, 0, 983325, 43441, 127924, 127777, 42595, 126641, 74402, 118860, + 78661, 120419, 92497, 66287, 120420, 92378, 120549, 119082, 64295, + 120418, 0, 64765, 73923, 83210, 120662, 69920, 194702, 6216, 67230, + 10755, 9455, 11155, 8124, 127042, 9470, 6944, 121125, 0, 69680, 2828, 0, + 531, 42638, 194804, 917856, 120961, 43428, 8204, 3614, 2827, 9696, + 120365, 0, 8728, 4354, 10904, 78562, 19936, 7833, 120691, 120850, 42599, + 42597, 42709, 68829, 125012, 0, 8537, 127306, 0, 9354, 121244, 121348, + 41199, 10121, 2028, 74950, 120253, 69715, 128525, 3062, 0, 74447, 12608, + 983657, 66440, 7545, 9700, 11948, 92205, 120777, 120502, 41155, 68306, + 74071, 0, 983459, 12713, 127519, 70402, 0, 78772, 113770, 1734, 0, 78141, + 127040, 64594, 2456, 231, 68227, 74167, 542, 917981, 118786, 983859, + 194797, 1230, 125018, 121343, 3597, 4446, 10584, 74235, 92215, 4037, + 67737, 8352, 78436, 5687, 127018, 64515, 121378, 194801, 55265, 67846, + 78434, 9704, 0, 194573, 70080, 71338, 0, 8660, 126478, 0, 128569, 78773, 74482, 4483, 1709, 69721, 9909, 6080, 194851, 120358, 1746, 1315, 8667, - 983101, 0, 13140, 65899, 10604, 0, 4480, 11266, 128152, 1226, 6930, - 67979, 195019, 6360, 10897, 41230, 605, 68302, 74785, 69875, 0, 917986, + 983101, 0, 13140, 65899, 10604, 0, 4480, 11266, 121114, 1226, 6930, + 67979, 195019, 6360, 10897, 41230, 605, 68302, 74785, 69875, 0, 121478, 41500, 0, 311, 11453, 6221, 10608, 64943, 67682, 10877, 118868, 64885, 74272, 0, 194672, 128559, 120736, 74312, 345, 124933, 74456, 64606, 9917, - 0, 74855, 5037, 0, 1776, 8422, 128935, 118814, 41508, 41201, 323, 43328, - 0, 42698, 1295, 194853, 4625, 77855, 4630, 13117, 0, 128772, 65123, - 11293, 2668, 11288, 0, 42640, 65666, 2519, 92369, 65420, 92479, 0, 4252, - 5049, 42659, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 128496, 649, - 65421, 0, 66702, 0, 12670, 1013, 0, 64919, 705, 0, 65422, 127803, 1183, - 126519, 7017, 42852, 0, 8157, 9736, 64503, 65418, 0, 983878, 74035, 0, - 11913, 73874, 6696, 128775, 8920, 119298, 128426, 7962, 12211, 9837, - 2051, 66227, 0, 4184, 119825, 128598, 10177, 73777, 1857, 194657, 4626, - 8464, 8472, 0, 4629, 8499, 74627, 78322, 4624, 7818, 119173, 128108, 0, - 7805, 128754, 94007, 6935, 92292, 78325, 78326, 78323, 43327, 43989, - 119046, 8492, 8250, 8459, 0, 8497, 8496, 0, 74582, 78336, 78339, 9543, - 67860, 78332, 77832, 65849, 77831, 983961, 0, 12451, 0, 8684, 128301, - 6102, 0, 5298, 0, 5294, 0, 0, 128746, 195062, 9949, 119826, 43617, - 119215, 0, 12073, 0, 0, 77863, 13108, 120617, 11439, 41468, 119076, 0, - 5292, 55272, 983883, 1939, 5302, 3970, 917879, 12455, 1793, 124982, 0, 0, - 6643, 92477, 65263, 0, 78330, 41293, 78328, 65923, 0, 13219, 9569, 0, - 74383, 0, 74197, 129089, 5500, 8813, 0, 128612, 74566, 5322, 0, 78340, - 43631, 5324, 66443, 3784, 41614, 65269, 6230, 78349, 78345, 13282, 3360, - 78344, 11523, 0, 92488, 9926, 7197, 128248, 68429, 42894, 41821, 1249, - 78360, 78361, 78356, 78358, 78353, 64899, 64763, 41149, 41807, 43162, - 41815, 41150, 128911, 10571, 10096, 67161, 67160, 67159, 6947, 41152, - 887, 9249, 6565, 78510, 41990, 78509, 41811, 67157, 93966, 6670, 67175, - 67174, 0, 43092, 43325, 67178, 10168, 67176, 9781, 68248, 9190, 128497, - 9666, 8269, 65944, 74005, 13019, 11670, 69860, 315, 12813, 983458, 72409, - 78256, 72408, 78352, 0, 983657, 0, 0, 1378, 9509, 0, 92996, 72407, 3066, - 92220, 67847, 72406, 92355, 0, 78365, 8787, 67189, 194616, 41618, 194615, - 78261, 127384, 0, 64652, 0, 194612, 0, 78366, 42088, 71040, 195061, 7176, - 43756, 10137, 6121, 10995, 78259, 71050, 8119, 64874, 71052, 78174, - 194939, 128630, 74525, 0, 0, 12930, 1394, 74514, 128413, 74515, 0, 67184, - 2998, 9527, 67181, 65190, 12977, 42090, 67185, 0, 119100, 41236, 92235, - 42005, 42003, 41237, 5848, 67193, 67192, 3670, 67190, 67197, 67196, - 67195, 7890, 128070, 11298, 43315, 983313, 6229, 1593, 0, 125120, 619, - 4635, 65080, 127779, 12194, 4120, 65337, 65336, 0, 11808, 67199, 67198, - 9366, 42790, 42006, 119115, 65327, 65326, 65325, 10757, 1507, 42216, - 65321, 65320, 65335, 65334, 65333, 65332, 65331, 42059, 65329, 42689, - 92427, 9128, 94045, 42073, 6785, 64590, 983830, 4371, 7196, 65318, 2035, - 65316, 4106, 65314, 65313, 42074, 127847, 41228, 128960, 65609, 41241, - 7903, 41239, 43533, 78459, 7189, 0, 0, 128753, 12357, 42802, 78450, 8487, - 9131, 66292, 4615, 12695, 127752, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, - 12169, 6590, 69762, 66455, 64738, 3219, 68654, 983787, 128281, 1037, - 128677, 2025, 128263, 13098, 78442, 10637, 4568, 549, 1570, 43839, 2835, - 0, 10624, 43623, 11072, 127191, 0, 0, 12606, 78433, 2825, 0, 10825, 8079, - 2821, 41046, 92327, 7365, 92634, 120593, 13071, 129052, 452, 41049, - 42840, 6346, 2831, 5461, 74596, 11465, 5212, 0, 64703, 119191, 42308, - 7181, 0, 41332, 0, 12333, 41047, 1668, 0, 0, 0, 1187, 983385, 42628, - 78575, 0, 71863, 0, 3240, 128518, 12151, 0, 11591, 41065, 5323, 8166, 0, - 0, 0, 66827, 1623, 65297, 128856, 571, 0, 4918, 0, 5288, 127295, 1541, - 65048, 1909, 8864, 0, 66402, 10736, 92508, 11571, 7615, 70476, 92296, - 4237, 92576, 1035, 65815, 119301, 3567, 701, 65936, 3489, 0, 70462, - 70172, 11403, 0, 0, 127146, 3796, 6800, 70472, 3994, 11421, 74611, - 195076, 195078, 983922, 0, 0, 64857, 128105, 2855, 74418, 66308, 41621, - 68214, 127283, 127817, 10654, 127818, 119226, 12164, 3246, 7906, 43972, - 65847, 7182, 0, 13024, 66276, 74270, 128289, 125090, 0, 0, 1496, 747, 0, - 942, 2378, 43136, 127905, 8466, 983575, 9320, 8001, 1232, 8139, 11617, - 74637, 0, 11409, 68373, 6382, 126500, 64634, 92362, 70202, 11612, 93008, - 67600, 2374, 94066, 8475, 11609, 66313, 983769, 0, 5286, 119297, 0, - 983251, 64925, 120283, 127204, 118982, 71905, 7705, 11942, 11305, 127203, - 3309, 128619, 9206, 119165, 113824, 6802, 70353, 41653, 1280, 1241, 7168, - 12096, 0, 66615, 42565, 41651, 0, 917627, 0, 41650, 66507, 66470, 74472, - 12914, 41491, 66010, 94106, 6078, 9954, 78822, 1475, 119247, 9938, 6084, - 917546, 41064, 41062, 0, 0, 3256, 10189, 42076, 43252, 78823, 71861, - 8727, 0, 65875, 0, 0, 127762, 10562, 74215, 43065, 0, 0, 3248, 74297, - 3261, 9015, 71351, 0, 3635, 64337, 92759, 125054, 0, 7195, 0, 2007, - 64431, 0, 0, 92197, 0, 635, 0, 0, 65613, 77909, 92420, 73997, 0, 0, - 119218, 7984, 8600, 74434, 127770, 4176, 70050, 2034, 78423, 11154, - 65891, 127038, 0, 318, 2038, 128860, 78596, 194602, 3649, 13149, 42145, - 42798, 3634, 120291, 71885, 67677, 120124, 7866, 0, 11402, 42146, 94032, - 74238, 42664, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, 68386, - 128185, 1159, 71183, 69729, 0, 120797, 7178, 194632, 983836, 41680, 0, - 128203, 11534, 1514, 11668, 67891, 9313, 7015, 128490, 67877, 194567, - 12989, 66474, 9368, 12848, 1624, 43270, 0, 74278, 10818, 126644, 9953, 0, - 78421, 1194, 3242, 9761, 9555, 8598, 120299, 6169, 12871, 1551, 2798, - 65176, 4958, 42752, 119025, 0, 67875, 120301, 3495, 66648, 125079, - 113780, 68364, 120779, 4891, 0, 10641, 0, 73746, 983837, 68352, 0, 73787, - 194829, 194633, 7199, 11131, 0, 0, 0, 983852, 0, 42685, 42679, 193, - 78789, 0, 0, 42667, 0, 5271, 68323, 92517, 118882, 1362, 13297, 0, 71880, - 0, 983331, 73789, 0, 6658, 4426, 0, 66830, 983842, 92319, 7276, 42163, - 5220, 0, 0, 125080, 2416, 3310, 42703, 127828, 379, 0, 43755, 70504, - 43647, 3223, 65492, 1284, 194771, 4549, 0, 0, 983154, 70784, 10807, 9558, - 93027, 0, 8515, 8688, 12866, 65308, 3294, 983332, 8529, 128101, 43385, - 7564, 0, 43329, 0, 92458, 73757, 66456, 42359, 0, 2031, 983890, 7202, - 128618, 12676, 42729, 74777, 3215, 0, 7710, 1610, 73801, 0, 0, 65682, 0, - 120537, 65924, 9974, 228, 66354, 1501, 0, 64395, 5179, 7200, 6225, - 118927, 42999, 1725, 65533, 8196, 7476, 74399, 0, 66868, 7152, 8502, - 5762, 1967, 7483, 125083, 0, 8104, 70128, 7474, 77979, 127200, 126507, - 10414, 13001, 8141, 0, 42537, 1557, 43594, 128642, 6330, 6805, 8631, - 2545, 70052, 127166, 0, 74190, 0, 70410, 983786, 42762, 0, 42914, 1650, - 262, 1637, 128502, 7901, 3238, 128173, 41861, 0, 120211, 65158, 10860, - 94059, 43658, 7527, 0, 43319, 6419, 0, 45, 0, 64588, 93989, 127753, - 119810, 7194, 5291, 0, 43666, 13129, 128684, 9084, 0, 8737, 983165, - 12881, 0, 12906, 9639, 7912, 2620, 983882, 3564, 0, 69978, 179, 43644, - 126503, 64756, 2853, 78443, 118813, 129042, 70347, 119009, 2850, 8084, - 983085, 73850, 2801, 92284, 42069, 119839, 74754, 119841, 42072, 92736, - 119842, 10398, 983056, 0, 8377, 119312, 8245, 68401, 3158, 92396, 3983, - 43656, 923, 119857, 92470, 292, 11119, 119845, 119844, 3221, 1763, 92463, - 4612, 67729, 119850, 7253, 70456, 68391, 0, 10782, 3637, 12996, 43542, - 113676, 64578, 983675, 3228, 69636, 8783, 0, 119614, 2731, 0, 0, 78585, - 4102, 7696, 73878, 0, 129128, 70813, 43316, 4177, 11283, 9089, 0, 73996, - 983173, 64500, 43674, 0, 64947, 1856, 0, 0, 6379, 0, 11142, 127176, 3208, - 12975, 74775, 127380, 983931, 92389, 74072, 55269, 0, 0, 983683, 2033, - 78577, 78576, 195026, 55254, 7740, 0, 70448, 127895, 73964, 68505, 93988, - 67612, 65674, 128244, 94110, 41689, 0, 74006, 64909, 6646, 11790, 74019, - 0, 128066, 128031, 8561, 4573, 0, 5326, 92571, 120605, 7230, 8257, - 194937, 8778, 41688, 0, 65776, 2071, 8314, 6459, 43511, 7628, 65092, - 73903, 66721, 11342, 128561, 0, 983432, 128226, 127001, 0, 11810, 13164, - 10723, 967, 983717, 126469, 11946, 983602, 3257, 127209, 12307, 1845, - 983157, 43526, 0, 0, 1886, 42342, 10089, 870, 7648, 3499, 7662, 7652, - 876, 871, 877, 7665, 878, 42015, 879, 43692, 4563, 0, 0, 7591, 65887, + 0, 74855, 5037, 119912, 1776, 8422, 128935, 118814, 41508, 41201, 323, + 43328, 0, 42698, 1295, 194853, 4625, 77855, 4630, 13117, 83002, 128772, + 65123, 11293, 2668, 11288, 0, 42640, 65666, 2519, 92369, 65420, 92479, 0, + 4252, 5049, 42659, 119011, 706, 7754, 10854, 8738, 983949, 65419, 0, + 128496, 649, 65421, 0, 66702, 983721, 12670, 1013, 0, 64919, 705, 0, + 65422, 127803, 1183, 126519, 7017, 42852, 917826, 8157, 9736, 64503, + 65418, 129050, 983878, 74035, 194918, 11913, 73874, 6696, 120916, 8920, + 119298, 128426, 7962, 12211, 9837, 2051, 66227, 0, 4184, 119825, 128598, + 10177, 73777, 1857, 194657, 4626, 8464, 8472, 68844, 4629, 8499, 74627, + 78322, 4624, 7818, 118861, 128108, 0, 7805, 128754, 94007, 6935, 92292, + 78325, 78326, 78323, 43327, 43989, 119046, 8492, 8250, 8459, 0, 8497, + 8496, 83499, 74582, 75052, 78339, 9543, 67860, 78332, 77832, 65849, + 77831, 983961, 194649, 12451, 74376, 8684, 128301, 6102, 0, 5298, 917847, + 5294, 0, 83016, 68043, 195062, 9949, 83014, 43617, 119215, 0, 12073, 0, + 128646, 77863, 13108, 120617, 11439, 41468, 83012, 0, 5292, 55272, + 983883, 1939, 5302, 3970, 917877, 12455, 1793, 124982, 0, 75036, 6643, + 92477, 65263, 0, 78330, 41293, 78328, 65923, 78835, 13219, 9569, 129041, + 74383, 0, 74197, 129089, 5500, 8813, 0, 128612, 68860, 5322, 120944, + 78340, 43631, 5324, 66443, 3784, 41614, 65269, 6230, 78349, 78345, 13282, + 3360, 78344, 11523, 0, 92488, 9926, 7197, 128248, 68429, 42894, 41821, + 1249, 78360, 78361, 78356, 78358, 78353, 64899, 64763, 41149, 41807, + 43162, 41815, 41150, 128911, 10571, 10096, 67161, 67160, 67159, 6947, + 41152, 887, 9249, 6565, 78510, 41990, 78509, 41811, 67157, 93966, 6670, + 67175, 67174, 0, 43092, 43325, 67178, 10168, 67176, 9781, 68248, 9190, + 128497, 9666, 8269, 65944, 74005, 13019, 11670, 69860, 315, 12813, + 129132, 72409, 78256, 72408, 78352, 0, 75063, 0, 0, 1378, 9509, 194634, + 92996, 72407, 3066, 92220, 67847, 72406, 92355, 917890, 78365, 8787, + 67189, 194616, 41618, 194615, 78261, 127384, 0, 64652, 121222, 121012, 0, + 78366, 42088, 71040, 195061, 7176, 43756, 10137, 6121, 10995, 78259, + 71050, 8119, 64874, 71052, 78174, 128690, 128630, 74525, 0, 0, 12930, + 1394, 74514, 128413, 74515, 983727, 67184, 2998, 9527, 67181, 65190, + 12977, 42090, 67185, 983647, 119100, 41236, 92235, 42005, 42003, 41237, + 5848, 67193, 67192, 3670, 67190, 67197, 67196, 67195, 7890, 128070, + 11298, 43315, 983315, 6229, 1593, 0, 125120, 619, 4635, 65080, 127158, + 12194, 4120, 65337, 65336, 128407, 11808, 67199, 67198, 9366, 42790, + 42006, 119115, 65327, 65326, 65325, 10757, 1507, 42216, 65321, 65320, + 43947, 65334, 43946, 65332, 65331, 42059, 65329, 42689, 92427, 9128, + 94045, 42073, 6785, 64590, 983830, 4371, 7196, 65318, 2035, 65316, 4106, + 65314, 65313, 42074, 127847, 41228, 120862, 65609, 41241, 7903, 41239, + 43533, 78459, 7189, 0, 0, 43941, 12357, 42802, 78450, 8487, 9131, 66292, + 4615, 12695, 127752, 0, 12175, 0, 64535, 0, 7809, 0, 121351, 562, 12169, + 6590, 69762, 66455, 64738, 3219, 68654, 121096, 128281, 1037, 128677, + 2025, 128263, 13098, 78442, 10637, 4568, 549, 1570, 43839, 2835, 83052, + 10624, 43623, 11072, 83045, 128523, 83046, 12606, 78433, 2825, 83048, + 10825, 8079, 2821, 41046, 92327, 7365, 83043, 120593, 13071, 121288, 452, + 41049, 42840, 6346, 2831, 5461, 74596, 11465, 5212, 917917, 64703, + 119191, 42308, 7181, 0, 41332, 0, 12333, 41047, 1668, 119849, 121150, + 128275, 1187, 983387, 42628, 78575, 82953, 71863, 82955, 3240, 128518, + 12151, 0, 11591, 41065, 5323, 8166, 0, 118932, 0, 66827, 1623, 65297, + 128856, 571, 0, 4918, 0, 5288, 127295, 1541, 65048, 1909, 8864, 0, 66402, + 10736, 92508, 11571, 7615, 70476, 92296, 4237, 92576, 1035, 65815, 68083, + 3567, 701, 65936, 3489, 120899, 70462, 70172, 11403, 0, 0, 82986, 3796, + 6800, 70472, 3994, 11421, 74611, 195076, 195078, 68036, 0, 0, 64857, + 83508, 2855, 74418, 66308, 41621, 68214, 83513, 127817, 10654, 82945, + 119226, 12164, 3246, 7906, 43972, 65847, 7182, 0, 13024, 66276, 74270, + 83069, 125090, 121115, 0, 1496, 747, 0, 942, 2378, 43136, 83031, 8466, + 83075, 9320, 8001, 1232, 8139, 11617, 74637, 0, 11409, 68373, 6382, + 126500, 64634, 92362, 70202, 11612, 93008, 67600, 2374, 94066, 8475, + 11609, 66313, 92568, 0, 5286, 119297, 83059, 983253, 64925, 120283, + 127204, 118982, 71905, 7705, 11942, 11305, 127203, 3309, 82979, 9206, + 82980, 113824, 6802, 70353, 41653, 1280, 1241, 7168, 12096, 0, 66615, + 42565, 41651, 0, 917627, 83042, 41650, 66507, 66470, 74472, 12914, 41491, + 43901, 94106, 6078, 9954, 78822, 1475, 119247, 9938, 6084, 917546, 41064, + 41062, 0, 113680, 3256, 10189, 42076, 43252, 78823, 68089, 8727, 120922, + 65875, 0, 0, 127762, 10562, 74215, 43065, 120906, 0, 3248, 74297, 3261, + 9015, 71351, 0, 3635, 64337, 92759, 125054, 0, 7195, 83346, 2007, 64431, + 195075, 0, 92197, 127090, 635, 0, 129082, 65613, 77909, 92420, 73997, + 128510, 121457, 43905, 7984, 8600, 74434, 127770, 4176, 70050, 2034, + 78423, 11154, 65891, 127038, 0, 318, 2038, 128544, 78596, 194602, 3649, + 13149, 42145, 42798, 3634, 120291, 71885, 67677, 120124, 7866, 75045, + 11402, 42146, 94032, 74238, 42664, 2849, 127034, 0, 7938, 12960, 1761, + 11812, 65379, 68386, 128185, 1159, 71183, 69729, 0, 120797, 7178, 120851, + 983836, 41680, 128469, 83098, 11534, 1514, 11668, 67891, 9313, 7015, + 128490, 67877, 194561, 12989, 66474, 9368, 12848, 1624, 43270, 0, 74278, + 10818, 83091, 9953, 194895, 78421, 1194, 3242, 9761, 9555, 8598, 120299, + 6169, 12871, 1551, 2798, 65176, 4958, 42752, 119025, 917924, 67875, + 120301, 3495, 66648, 125079, 83354, 68364, 120779, 4891, 0, 10641, 0, + 73746, 120945, 68352, 0, 73787, 128858, 127094, 7199, 11131, 0, 0, 0, + 983852, 126979, 42685, 42679, 193, 78789, 0, 0, 42667, 0, 5271, 68323, + 92517, 83356, 1362, 13297, 0, 71880, 0, 983333, 73789, 0, 6658, 4426, 0, + 66830, 983842, 83103, 7276, 42163, 5220, 0, 78621, 67822, 2416, 3310, + 42703, 83107, 379, 0, 43755, 70504, 43647, 3223, 65492, 1284, 194771, + 4549, 194738, 0, 71253, 70784, 10807, 9558, 93027, 0, 8515, 8688, 12866, + 65308, 3294, 83143, 8529, 128101, 43385, 7564, 0, 43329, 83148, 92458, + 73757, 66456, 42359, 128439, 2031, 983890, 7202, 128232, 12676, 42729, + 74777, 3215, 120982, 7710, 1610, 73801, 128807, 0, 65682, 0, 43917, + 65924, 9974, 228, 43922, 1501, 127994, 64395, 5179, 7200, 6225, 118927, + 42999, 1725, 65533, 8196, 7476, 74399, 0, 66868, 7152, 8502, 5762, 1967, + 7483, 43898, 0, 8104, 70128, 7474, 43914, 83080, 126507, 10414, 13001, + 8141, 983239, 42537, 1557, 43594, 128642, 6330, 6805, 8631, 2545, 42934, + 127166, 0, 74190, 128477, 70410, 983786, 42762, 194708, 42914, 1650, 262, + 1637, 128502, 7901, 3238, 83026, 41861, 0, 120211, 65158, 10860, 74959, + 43658, 7527, 83086, 43319, 6419, 0, 45, 0, 64588, 93989, 127753, 119810, + 7194, 5291, 0, 43666, 13129, 128684, 9084, 121039, 8737, 983165, 12881, + 75066, 12906, 9639, 7912, 2620, 983882, 3564, 0, 69978, 179, 43644, + 75049, 64756, 2853, 78443, 118813, 129042, 70347, 119009, 2850, 8084, + 983085, 73850, 2801, 92284, 42069, 119839, 74754, 83522, 42072, 92736, + 119842, 10398, 83386, 83523, 8377, 119312, 8245, 68401, 3158, 92396, + 3983, 43656, 923, 119857, 92470, 292, 11119, 119845, 119844, 3221, 1763, + 92463, 4612, 67729, 119850, 7253, 70456, 68391, 75002, 10782, 3637, + 12996, 43542, 113676, 64578, 83449, 3228, 69636, 8783, 983632, 119614, + 2731, 0, 120833, 78585, 4102, 7696, 73878, 121417, 128132, 70813, 43316, + 4177, 11283, 9089, 120918, 73996, 121111, 64500, 43674, 0, 64947, 1856, + 0, 0, 6379, 917804, 11142, 127176, 3208, 12975, 74775, 127380, 983931, + 92389, 74072, 55269, 0, 124962, 983683, 2033, 78577, 78576, 82965, 55254, + 7740, 82974, 70448, 126555, 73964, 68505, 93988, 67612, 65674, 128244, + 94110, 41689, 0, 74006, 64909, 6646, 11790, 74019, 128520, 128066, + 128031, 8561, 4573, 121375, 5326, 92571, 120605, 7230, 8257, 121415, + 8778, 41688, 0, 65776, 2071, 8314, 6459, 43511, 7628, 65092, 73903, + 64355, 11342, 128561, 0, 983434, 128226, 127001, 0, 11810, 13164, 10723, + 967, 983335, 120985, 11946, 983602, 3257, 127209, 12307, 1845, 129072, + 43526, 0, 119573, 1886, 42342, 10089, 870, 7648, 3499, 7662, 7652, 876, + 871, 877, 7665, 878, 42015, 879, 43692, 4563, 0, 917892, 7591, 65887, 867, 9520, 872, 7656, 868, 873, 7642, 7659, 869, 874, 7644, 120674, 875, - 790, 128303, 118938, 0, 983641, 66182, 194623, 5429, 195055, 66180, - 126480, 66181, 68452, 983289, 917929, 42067, 0, 5433, 10657, 7911, + 790, 128303, 118938, 195053, 93038, 66182, 194623, 5429, 195055, 66180, + 126480, 66181, 68452, 983291, 127214, 42067, 0, 5433, 10657, 7911, 125119, 1547, 66176, 42012, 120576, 5425, 4977, 9999, 5317, 5423, 4611, - 125094, 67637, 127286, 9679, 74122, 92978, 0, 0, 66194, 4418, 66184, - 4628, 4245, 119648, 0, 0, 1851, 124995, 127189, 11908, 0, 9360, 118897, - 194880, 42776, 66187, 12837, 8829, 7711, 11112, 0, 92321, 43318, 92302, - 8809, 69881, 0, 126518, 120604, 983052, 983275, 983431, 983270, 0, - 120577, 7427, 9958, 4588, 43680, 0, 74484, 194968, 2433, 128602, 69973, - 3352, 74363, 983885, 0, 793, 74404, 11197, 305, 567, 67662, 842, 69979, - 8208, 68308, 41695, 1647, 118877, 70841, 7837, 917625, 818, 5337, 194628, - 917621, 41376, 119978, 126576, 120594, 74086, 917615, 70179, 917613, - 10973, 66359, 1372, 127172, 917608, 4969, 1254, 917605, 194654, 93967, - 917602, 65228, 78221, 126612, 67723, 2840, 0, 78829, 983939, 66887, 3245, - 9068, 68194, 64725, 0, 128051, 12991, 124971, 2651, 68016, 983265, - 917611, 125038, 70835, 0, 70844, 43648, 120812, 917833, 43322, 92662, 0, - 0, 64372, 92698, 3226, 655, 752, 7457, 7456, 7452, 3285, 128475, 11152, - 92903, 65610, 2391, 92908, 92248, 671, 250, 7434, 618, 668, 610, 42800, - 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 128340, - 128266, 64749, 67850, 2107, 128345, 74249, 4605, 128174, 983192, 43372, - 65945, 128838, 11113, 119590, 0, 0, 70495, 987, 6927, 11572, 42261, - 11464, 3365, 9971, 0, 0, 128297, 0, 78762, 0, 0, 11334, 43326, 12609, - 11519, 11503, 5530, 5210, 0, 4627, 127784, 5208, 0, 128842, 10332, 2424, - 7976, 9156, 0, 3244, 5529, 69647, 73894, 128852, 5432, 64965, 5527, - 42315, 10516, 7790, 5528, 983699, 42140, 120281, 0, 0, 43545, 9887, - 129044, 4000, 7429, 7428, 665, 7424, 3206, 120278, 7884, 0, 128566, - 917989, 128666, 211, 2509, 92904, 70822, 68672, 3220, 42235, 78480, - 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 127258, 5852, 0, 78482, - 127259, 1708, 0, 78481, 2623, 11943, 128700, 69226, 69974, 4698, 66509, - 1066, 119921, 4701, 983876, 120285, 70447, 94111, 8267, 0, 1421, 66426, - 7516, 127552, 2625, 983977, 8034, 74309, 0, 3631, 10955, 7850, 120293, - 8416, 0, 0, 0, 43384, 12660, 128693, 0, 0, 74850, 41069, 70185, 128156, - 12099, 4310, 10032, 6252, 713, 7990, 983487, 3990, 125050, 983262, 66368, - 5017, 64956, 7071, 0, 70457, 1030, 118800, 92563, 9513, 41059, 9357, 0, - 1773, 77939, 120350, 0, 6339, 7745, 9844, 127220, 64650, 94, 1880, 74766, - 113719, 8908, 0, 128707, 65913, 78470, 10752, 13003, 0, 126572, 41307, - 8732, 120338, 0, 1757, 6964, 4696, 0, 120335, 64785, 7394, 3641, 5419, - 128055, 0, 127883, 0, 120344, 43988, 70423, 8610, 43062, 7592, 856, - 74299, 936, 13289, 69894, 43171, 1459, 0, 65243, 78638, 19953, 0, 1504, - 70064, 0, 12913, 74206, 7529, 128745, 128699, 70203, 120782, 4113, 0, - 2372, 336, 0, 7509, 12152, 194885, 682, 7655, 41505, 0, 64743, 10593, - 1703, 92467, 77911, 8033, 69953, 0, 9810, 127269, 120013, 12970, 0, - 42351, 10109, 74535, 0, 194693, 0, 92690, 0, 65068, 74291, 1965, 7069, - 43312, 0, 73887, 11130, 2087, 64370, 6314, 41714, 8501, 11145, 0, 74239, + 125094, 67637, 127286, 9679, 74122, 92978, 917585, 0, 66194, 4418, 66184, + 4628, 4245, 119648, 0, 127263, 1851, 124995, 83320, 11908, 0, 9360, + 118897, 120874, 42776, 66187, 12837, 8829, 7711, 11112, 0, 92321, 43318, + 92302, 8809, 69881, 0, 126518, 120604, 983052, 983277, 983433, 128412, 0, + 120577, 7427, 9958, 4588, 43680, 0, 74484, 127185, 2433, 128602, 69973, + 3352, 74363, 128668, 121341, 793, 74404, 11197, 305, 567, 67662, 842, + 69979, 8208, 68308, 41695, 1647, 118877, 70841, 7837, 917625, 818, 5337, + 194628, 917621, 41376, 119978, 68742, 120594, 74086, 68777, 70179, + 917613, 10973, 66359, 1372, 127172, 917608, 4969, 1254, 917605, 194654, + 93967, 917602, 65228, 78221, 126612, 67723, 2840, 983905, 78829, 983939, + 66887, 3245, 9068, 68194, 64725, 121161, 128051, 12991, 124971, 2651, + 68016, 983267, 127326, 125038, 70835, 0, 70844, 43648, 120812, 917833, + 43322, 92662, 0, 0, 64372, 92698, 3226, 655, 752, 7457, 7456, 7452, 3285, + 74894, 11152, 92903, 65610, 2391, 92908, 92248, 671, 250, 7434, 618, 668, + 610, 42800, 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, + 128340, 128266, 64749, 67850, 2107, 128290, 74249, 4605, 128174, 983192, + 43372, 65945, 127249, 11113, 119590, 0, 0, 70495, 987, 6927, 11572, + 42261, 11464, 3365, 9971, 0, 983951, 128297, 0, 78762, 127867, 121368, + 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0, 4627, 119269, 5208, 0, + 70090, 10332, 2424, 7976, 9156, 0, 3244, 5529, 69647, 73894, 128852, + 5432, 64965, 5527, 42315, 10516, 7790, 5528, 128838, 42140, 120281, 0, + 983777, 43545, 9887, 121477, 4000, 7429, 7428, 665, 7424, 3206, 120278, + 7884, 0, 128566, 74910, 128666, 211, 2509, 92904, 70822, 68672, 3220, + 42235, 78480, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 127258, + 5852, 0, 78482, 127259, 1708, 0, 78481, 2623, 11943, 128700, 69226, + 69974, 4698, 66509, 1066, 119921, 4701, 983876, 120285, 70447, 94111, + 8267, 0, 1421, 66426, 7516, 127552, 2625, 983641, 8034, 74309, 0, 3631, + 10955, 7850, 120293, 8416, 0, 983065, 0, 43384, 12660, 128693, 128270, 0, + 74850, 41069, 70185, 128156, 12099, 4310, 10032, 6252, 713, 7990, 983489, + 3990, 125050, 983264, 66368, 5017, 64956, 7071, 0, 70457, 1030, 118800, + 92563, 9513, 41059, 9357, 74988, 1773, 77939, 120350, 124961, 6339, 7745, + 9844, 127220, 64650, 94, 1880, 74766, 113719, 8908, 983222, 128707, + 65913, 78470, 10752, 13003, 68769, 126572, 41307, 8732, 120336, 0, 1757, + 6964, 4696, 0, 120333, 64785, 7394, 3641, 5419, 128055, 0, 127883, + 194707, 120344, 43988, 70423, 8610, 43062, 7592, 856, 74299, 936, 13289, + 69894, 43171, 1459, 128224, 65243, 78638, 19953, 129078, 1504, 70064, 0, + 12913, 74206, 7529, 128745, 127868, 70203, 120782, 4113, 120929, 2372, + 336, 0, 7509, 12152, 194885, 682, 7655, 41505, 0, 64743, 10593, 1703, + 92467, 77911, 8033, 69953, 0, 9810, 127269, 120013, 12970, 0, 42351, + 10109, 74535, 74068, 74921, 0, 92690, 0, 65068, 74291, 1965, 7069, 43312, + 0, 73887, 11130, 2087, 64370, 6314, 41714, 8501, 11145, 121117, 74239, 41317, 92614, 2091, 74545, 2090, 69912, 9353, 7117, 2077, 77886, 11161, - 10498, 2083, 77888, 71196, 0, 119236, 634, 0, 92290, 0, 69779, 4165, - 8746, 195048, 9654, 12856, 6924, 7660, 7066, 983719, 70415, 128135, + 10498, 2083, 77888, 71196, 0, 119236, 634, 124970, 92290, 194886, 69779, + 4165, 8746, 195048, 9654, 12856, 6924, 7660, 7066, 194693, 70415, 128135, 41037, 42692, 7786, 12959, 41039, 127483, 124965, 680, 2302, 128200, 1181, 7056, 3174, 67248, 0, 92668, 65665, 127375, 113776, 6920, 0, 92295, - 0, 118965, 68318, 64644, 126981, 74119, 68238, 41028, 74025, 6231, 2613, - 65302, 40989, 68239, 68230, 68234, 42760, 0, 124989, 0, 40987, 4667, 0, - 71843, 8828, 0, 70506, 1246, 4746, 0, 128508, 11021, 4749, 92675, 917882, - 921, 4744, 0, 12702, 242, 0, 1566, 8217, 127210, 64653, 78386, 74617, - 74036, 74505, 43274, 5313, 951, 74568, 92983, 983867, 7604, 983290, 4009, - 70426, 71844, 120562, 0, 983720, 64860, 119138, 119069, 0, 127370, 4048, - 983598, 0, 70024, 1646, 77890, 64534, 73995, 120705, 129047, 119890, - 2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894, 2975, 74442, 9822, - 983935, 55220, 10084, 73943, 118840, 0, 917562, 194610, 3399, 9851, - 917609, 11909, 9059, 0, 7687, 0, 6789, 128392, 0, 71842, 70178, 0, 0, - 1777, 9151, 1137, 66867, 749, 42366, 70444, 5385, 70791, 72435, 70127, - 128972, 5989, 0, 74636, 128091, 0, 41685, 69223, 0, 9769, 41684, 983216, - 519, 0, 11740, 5766, 0, 0, 2600, 8848, 70416, 41297, 0, 3666, 70420, - 41300, 74468, 65160, 0, 69688, 69771, 74479, 0, 6558, 0, 128064, 69765, - 92775, 252, 0, 41302, 119350, 127002, 118839, 69763, 0, 11729, 8719, - 9060, 129091, 120139, 10761, 0, 0, 0, 118792, 11734, 93011, 11730, - 113741, 9593, 5757, 2403, 64808, 55275, 0, 11728, 43572, 0, 0, 7764, - 129132, 11094, 120825, 0, 43489, 4282, 8298, 0, 0, 70328, 0, 70324, - 64449, 0, 126650, 63854, 8456, 65587, 70442, 65670, 0, 78250, 0, 7774, - 10607, 9792, 0, 70326, 0, 0, 120764, 70322, 10019, 74762, 0, 3458, 4365, - 70053, 983712, 3647, 120207, 2602, 128341, 0, 125043, 41135, 0, 0, - 128455, 64631, 172, 4971, 41219, 41137, 1889, 7238, 6545, 126476, 77926, - 7597, 10528, 0, 0, 3732, 73910, 194588, 5344, 0, 43366, 43363, 9062, - 119252, 0, 92528, 0, 64479, 9232, 92596, 0, 113707, 194712, 10900, 41531, - 1263, 3720, 12048, 74075, 64292, 41524, 7227, 119635, 6099, 41534, 0, - 127354, 127345, 299, 917957, 8525, 127347, 3524, 917565, 8831, 127349, - 92564, 3075, 67867, 94053, 0, 66362, 0, 64353, 70440, 0, 5845, 0, 0, 0, - 2581, 8200, 65114, 68460, 983693, 43283, 5551, 0, 120735, 983201, 6340, - 118855, 128934, 78134, 8680, 7204, 70065, 2588, 2914, 7011, 55281, 0, - 2471, 194631, 2883, 2749, 119563, 73774, 10913, 0, 0, 8666, 675, 42493, - 0, 43571, 0, 6219, 128584, 9980, 41232, 10928, 0, 41153, 41229, 118967, - 0, 3738, 94016, 0, 12711, 3181, 66212, 74289, 68472, 42857, 8262, 983379, - 0, 74476, 0, 42347, 12092, 9615, 7234, 74047, 983088, 983819, 43744, 0, - 0, 73846, 2934, 12722, 120762, 922, 43983, 74507, 983126, 74461, 3218, - 120471, 74290, 120469, 64562, 120475, 8569, 11404, 11932, 73728, 3214, - 11212, 120468, 12128, 3207, 65486, 78729, 1901, 78727, 127326, 120460, - 7425, 3205, 68003, 78737, 78736, 78735, 43383, 69940, 65459, 2606, 78730, - 73897, 0, 11496, 1173, 0, 41272, 119661, 0, 0, 983321, 120737, 126557, - 194773, 983320, 378, 2610, 983326, 65079, 983325, 65695, 126559, 37, - 7068, 0, 120480, 68236, 3209, 120477, 0, 10638, 9768, 69952, 119909, - 983399, 92225, 0, 983338, 0, 43840, 0, 0, 5233, 983335, 64792, 71233, 0, - 126633, 128919, 7060, 9847, 120144, 1685, 595, 0, 70428, 1292, 8940, - 7380, 11088, 0, 10004, 126997, 0, 6541, 43837, 0, 0, 3243, 9014, 5606, 0, - 538, 64620, 5602, 8467, 74391, 6547, 128132, 8203, 66420, 68241, 8458, - 65211, 8495, 92311, 0, 917552, 779, 78314, 64367, 2465, 69901, 8193, - 55279, 9730, 9280, 0, 7065, 74155, 4346, 0, 73798, 504, 125115, 92414, - 8982, 0, 128711, 119170, 782, 129028, 10883, 128446, 194852, 732, 3737, - 127253, 1548, 68650, 92507, 1832, 5604, 5735, 41141, 119020, 4376, - 983370, 11787, 3745, 0, 119885, 42888, 65712, 127913, 3869, 11937, 5725, - 127539, 1783, 7416, 5728, 0, 128457, 119554, 11918, 66567, 5724, 0, 5727, - 78521, 0, 0, 764, 0, 128116, 43531, 113670, 9033, 0, 42532, 6223, 11042, - 120749, 11423, 74852, 119861, 68303, 43465, 0, 128267, 6559, 64557, - 71348, 92649, 120648, 43019, 43477, 10238, 74491, 0, 43377, 92282, 71346, - 1478, 9783, 11825, 2607, 64740, 113689, 7739, 74543, 917765, 67393, 0, - 6132, 0, 63765, 128396, 70058, 41144, 71899, 92438, 43537, 6761, 10093, - 4369, 917791, 0, 194776, 8820, 3947, 0, 0, 11515, 526, 128103, 41295, - 194603, 917785, 194932, 113691, 7688, 917786, 7686, 8288, 11815, 0, 0, - 983382, 1543, 3713, 41221, 12423, 42281, 917788, 74024, 12293, 0, 64357, - 11794, 42082, 0, 1737, 8987, 42081, 0, 7205, 0, 9335, 12850, 119870, - 6553, 7055, 0, 8277, 0, 67751, 5475, 74795, 6780, 65067, 0, 1327, 1160, - 42084, 119650, 41217, 119660, 10018, 360, 129070, 983865, 68176, 5863, - 3137, 0, 4147, 983170, 41216, 7844, 2616, 70197, 68461, 65234, 68341, - 13076, 3135, 983287, 78143, 119139, 3142, 92451, 94068, 10819, 119580, - 10183, 74635, 2608, 1470, 73967, 94008, 6227, 0, 127173, 65236, 917878, - 6163, 983558, 113728, 127314, 0, 0, 8603, 0, 119866, 3306, 10876, 43392, - 119573, 127931, 5751, 0, 6222, 0, 127466, 12086, 7403, 1600, 64309, - 64939, 0, 64783, 92658, 11310, 0, 8882, 0, 0, 2570, 7021, 0, 0, 43110, 0, - 1234, 6540, 6974, 92750, 0, 983211, 5002, 0, 41286, 69946, 74465, 71074, - 43585, 113720, 6551, 983373, 128229, 983272, 41289, 125130, 71080, - 127958, 8977, 602, 120814, 0, 128778, 128661, 194890, 983375, 41279, 0, - 0, 917795, 11081, 43615, 0, 0, 0, 983612, 12727, 0, 0, 78397, 9475, 7112, - 65105, 0, 9633, 10886, 43592, 7831, 983829, 194571, 0, 73915, 8076, - 43048, 8290, 8291, 43051, 92570, 0, 2596, 43584, 0, 13113, 0, 127757, - 2393, 7058, 9087, 74067, 68673, 41574, 78337, 70498, 42900, 6376, 0, 0, - 0, 0, 9854, 127748, 64696, 73879, 128220, 120752, 6994, 0, 1720, 0, 0, 0, - 6529, 7063, 983182, 3751, 9120, 983485, 0, 1798, 709, 0, 1354, 1876, - 13152, 6557, 12430, 8137, 94098, 67752, 70850, 0, 245, 128097, 11456, - 41233, 7070, 0, 94046, 6136, 68304, 65677, 8682, 41235, 92595, 42045, - 9804, 118963, 432, 3595, 127901, 65437, 0, 74455, 42399, 983136, 0, - 128274, 0, 119658, 128184, 0, 0, 77894, 8797, 0, 9052, 64888, 7167, 2356, - 95, 74784, 10580, 0, 42286, 92231, 64640, 69999, 94109, 128625, 74137, - 70035, 10063, 12652, 12199, 74622, 43492, 2566, 11971, 983737, 0, 1065, - 0, 0, 43400, 2576, 66696, 66819, 128624, 43604, 127891, 0, 3201, 514, - 74502, 70032, 2921, 43215, 64493, 5772, 12968, 70055, 194944, 74580, - 43398, 2580, 983810, 41341, 41223, 6564, 1463, 41342, 0, 5293, 70020, - 983185, 3733, 11346, 0, 12054, 0, 74098, 42827, 195074, 13091, 0, 0, 0, - 917915, 127961, 127025, 0, 74821, 71104, 66295, 92765, 0, 127865, 13090, - 66643, 0, 1270, 1132, 42360, 0, 74096, 66655, 42569, 127824, 66898, - 64761, 0, 41021, 8510, 42432, 0, 119317, 194782, 0, 64496, 74109, 70030, - 9915, 0, 983218, 7061, 41336, 3854, 69700, 13141, 68413, 43401, 42319, - 13082, 124976, 7067, 68221, 0, 127383, 127171, 0, 120745, 74209, 9029, - 43543, 70836, 2353, 6308, 129154, 74792, 2611, 119186, 66881, 0, 65063, - 43664, 92399, 66627, 125093, 4484, 8509, 118976, 11066, 65233, 0, 41224, - 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 127214, 12107, 7100, 10905, - 65010, 127275, 697, 66018, 9284, 4244, 0, 93058, 77861, 13121, 120036, 0, - 12010, 128573, 128221, 125014, 0, 0, 127193, 65816, 68111, 0, 127933, - 65668, 92257, 6618, 3562, 66365, 0, 42234, 12648, 78110, 7123, 70038, - 5785, 9198, 9764, 41316, 65877, 7383, 13230, 41299, 0, 0, 68365, 128258, - 0, 0, 0, 13122, 0, 191, 70060, 8585, 8000, 64411, 120652, 42889, 64850, - 41072, 41578, 0, 41577, 0, 10002, 195028, 6533, 73802, 41570, 917919, - 683, 396, 41580, 68146, 983067, 12901, 43058, 0, 343, 7129, 42680, 41360, - 78154, 0, 4743, 69987, 0, 74040, 74108, 8743, 1724, 1433, 119322, 0, - 3739, 6263, 71349, 0, 3964, 6592, 0, 68288, 66040, 0, 42568, 69806, - 128113, 1778, 3956, 128443, 42070, 6563, 43075, 9018, 94006, 983396, - 12067, 41312, 92763, 5547, 8916, 127969, 128950, 8175, 0, 284, 8108, 934, - 128039, 74001, 173, 66460, 7174, 92703, 118822, 1750, 128686, 4394, - 68368, 1807, 983888, 92298, 0, 5889, 0, 7180, 0, 67127, 0, 67126, 42471, - 6982, 1721, 44022, 7891, 42243, 42160, 2583, 4512, 119360, 65230, 128109, - 0, 0, 3855, 194986, 11767, 0, 0, 74295, 0, 0, 92416, 3975, 67125, 74087, - 0, 12672, 3798, 2703, 983599, 0, 2109, 9774, 1275, 0, 0, 41095, 3962, - 68242, 2932, 41101, 3954, 6457, 4513, 74536, 0, 73994, 73992, 1468, - 120033, 983057, 41803, 128230, 41846, 127244, 55238, 7633, 41849, 68385, - 4320, 3224, 0, 92741, 66281, 42531, 74593, 1510, 128384, 8256, 0, 11393, - 0, 8879, 128075, 92474, 8770, 72416, 0, 72415, 1910, 8671, 78374, 4283, - 0, 127117, 68361, 78318, 2654, 7893, 195007, 128241, 0, 72394, 65106, - 42761, 12857, 4581, 8411, 78372, 78371, 78370, 78369, 78368, 74475, - 983442, 0, 1733, 4392, 2568, 10786, 69661, 0, 8184, 41486, 0, 7396, 7116, - 0, 69788, 0, 7185, 7965, 119144, 0, 92347, 195066, 41350, 9129, 0, 0, - 2294, 64501, 92489, 0, 10481, 0, 70022, 7171, 0, 340, 71105, 93972, - 67360, 0, 92200, 128249, 124979, 6764, 127487, 128393, 0, 92509, 128962, - 65203, 11392, 119098, 119359, 119073, 3210, 0, 0, 118795, 127976, 94101, - 127484, 917619, 119149, 0, 10043, 0, 1186, 41571, 6999, 617, 9464, - 125123, 3675, 5207, 65062, 5213, 74616, 2617, 41348, 41568, 128803, 3253, - 120535, 0, 8630, 128544, 0, 5596, 5545, 7288, 2586, 64887, 983644, 5217, - 71336, 128687, 917614, 0, 64293, 68098, 2635, 92760, 0, 983846, 0, 92742, - 7835, 70040, 120707, 194988, 92285, 64558, 127122, 0, 67083, 67085, - 70099, 0, 5784, 983102, 195050, 983812, 70033, 4011, 194565, 68101, - 124978, 7864, 4254, 65095, 983496, 5600, 3903, 127083, 10447, 5598, 1207, - 120521, 66689, 3501, 42582, 43600, 129054, 127103, 1124, 5597, 194778, - 194772, 9321, 983484, 113706, 983482, 67400, 1719, 68356, 68354, 9671, - 1125, 4399, 127479, 66274, 983488, 7631, 5488, 7128, 120532, 0, 5491, - 118797, 8937, 43044, 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043, - 6300, 194837, 7122, 983090, 4390, 454, 41397, 0, 9875, 7593, 194791, - 92274, 118913, 7207, 0, 65901, 2394, 2575, 0, 3746, 11016, 65752, 92757, - 0, 43423, 128683, 11989, 0, 0, 0, 78296, 0, 8249, 128172, 11109, 78531, - 6640, 74806, 2598, 513, 0, 6586, 8656, 0, 69792, 65008, 194597, 71111, - 78383, 194795, 127474, 92515, 68475, 93973, 194584, 63799, 78637, 12647, - 0, 128043, 69893, 1036, 194982, 92419, 1723, 68215, 74217, 0, 41579, - 2444, 120722, 10705, 73876, 983469, 74486, 983467, 740, 119222, 194978, - 194984, 0, 4238, 11071, 9459, 68437, 78140, 78139, 194985, 8121, 10438, - 74487, 42574, 13285, 55263, 11907, 129107, 5690, 92255, 93992, 0, 43181, - 13095, 77925, 127857, 64498, 0, 9506, 6978, 70176, 77992, 0, 113743, - 78379, 0, 127845, 1122, 317, 0, 71055, 0, 0, 1920, 0, 10173, 827, 0, 0, - 78378, 119600, 5223, 1304, 0, 119564, 5226, 12602, 94044, 5880, 9329, + 126606, 118965, 68318, 64644, 126981, 74119, 68238, 41028, 74025, 6231, + 2613, 65302, 40989, 68239, 68230, 68234, 42760, 0, 43896, 0, 40987, 4667, + 0, 71843, 8828, 77995, 70506, 1246, 4746, 128501, 128508, 11021, 4749, + 92675, 917882, 921, 4744, 0, 12702, 242, 0, 1566, 8217, 127210, 64653, + 78386, 74617, 74036, 74505, 43274, 5313, 951, 74568, 92983, 983867, 7604, + 983292, 4009, 70277, 71844, 120562, 0, 983720, 64860, 119138, 119069, 0, + 127370, 4048, 983598, 83009, 70024, 1646, 77890, 64534, 73995, 120705, + 129047, 119890, 2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894, + 2975, 74442, 9822, 983935, 55220, 10084, 73943, 118840, 0, 917562, 78299, + 3399, 9851, 917609, 11909, 9059, 0, 7687, 0, 6789, 127767, 0, 71842, + 70178, 92314, 0, 1777, 9151, 1137, 66867, 749, 42366, 70444, 5385, 70791, + 72435, 70127, 83377, 5989, 128905, 74636, 120848, 0, 41685, 69223, 0, + 9769, 41684, 194737, 519, 119231, 11740, 5766, 0, 0, 2600, 8848, 70416, + 41297, 0, 3666, 70420, 41300, 74468, 65160, 0, 69688, 69771, 74479, 0, + 6558, 127149, 128064, 69765, 92775, 252, 0, 41302, 119350, 83504, 118839, + 69763, 68762, 11729, 8719, 9060, 129091, 120139, 10761, 0, 0, 129410, + 118792, 11734, 93011, 11730, 113741, 9593, 5757, 2403, 64808, 55275, 0, + 11728, 43572, 983139, 0, 7764, 68741, 11094, 120825, 0, 43489, 4282, + 8298, 0, 0, 70328, 194986, 70324, 64449, 0, 126650, 63854, 8456, 65587, + 70442, 65670, 983963, 78250, 0, 7774, 10607, 9792, 983869, 70326, 0, + 71460, 120764, 70322, 10019, 74762, 0, 3458, 4365, 70053, 983712, 3647, + 120207, 2602, 128341, 121103, 125043, 41135, 83498, 0, 121325, 64631, + 172, 4971, 41219, 41137, 1889, 7238, 6545, 126476, 77926, 7597, 10528, + 75054, 0, 3732, 73910, 194588, 5344, 983971, 43366, 43363, 9062, 119252, + 121441, 92528, 0, 64479, 9232, 92596, 83330, 113707, 194712, 10900, + 41531, 1263, 3720, 12048, 74075, 64292, 41524, 7227, 119635, 6099, 41534, + 0, 127354, 127345, 299, 83022, 8525, 127347, 3524, 917565, 8831, 127349, + 92564, 3075, 67867, 94053, 0, 66362, 0, 64353, 70440, 0, 5845, 121310, 0, + 121185, 2581, 8200, 65114, 68460, 983693, 43283, 5551, 0, 120735, 983201, + 6340, 118855, 121027, 78134, 8680, 7204, 70065, 2588, 2914, 7011, 55281, + 0, 2471, 194631, 2883, 2749, 119563, 73774, 10913, 83116, 983086, 8666, + 675, 42493, 121297, 43571, 0, 6219, 128584, 9980, 41232, 10928, 0, 41153, + 41229, 118967, 0, 3738, 94016, 983243, 12711, 3181, 66212, 74289, 68472, + 42857, 8262, 93036, 0, 74476, 0, 42347, 12092, 9615, 7234, 74047, 983088, + 128137, 43744, 0, 0, 73846, 2934, 12722, 120762, 922, 43983, 74507, + 983126, 74461, 3218, 120471, 74290, 120469, 64562, 120475, 8569, 11404, + 11932, 73728, 3214, 11212, 120468, 12128, 3207, 65486, 78729, 1901, + 78727, 65667, 120460, 7425, 3205, 68003, 78737, 78736, 78735, 43383, + 69940, 65459, 2606, 78730, 73897, 129043, 11496, 1173, 0, 41272, 119661, + 0, 0, 83178, 120737, 120953, 194773, 983322, 378, 2610, 983328, 65079, + 983327, 65695, 121220, 37, 7068, 0, 120480, 68236, 3209, 120477, 120835, + 10638, 9768, 69952, 119909, 71486, 92225, 983953, 983340, 0, 43840, 0, 0, + 5233, 983337, 64792, 71233, 128223, 126633, 128919, 7060, 9847, 120144, + 1685, 595, 83197, 70428, 1292, 8940, 7380, 11088, 0, 10004, 126997, 0, + 6541, 43837, 71465, 121030, 3243, 9014, 5606, 125032, 538, 64620, 5602, + 8467, 74391, 6547, 71466, 8203, 66420, 68241, 8458, 65211, 8495, 92311, + 127481, 917552, 779, 78314, 64367, 2465, 69901, 8193, 55279, 9730, 9280, + 120913, 7065, 74155, 4346, 113690, 73798, 504, 125115, 92414, 8982, 0, + 121471, 119170, 782, 129028, 10883, 128446, 194852, 732, 3737, 121188, + 1548, 68650, 92507, 1832, 5604, 5735, 41141, 119020, 4376, 983372, 11787, + 3745, 917868, 119885, 42888, 65712, 127913, 3869, 11937, 5725, 127539, + 1783, 7416, 5728, 0, 128457, 119554, 11918, 66567, 5724, 127965, 5727, + 78521, 121121, 0, 764, 0, 121011, 43531, 113670, 9033, 127182, 42532, + 6223, 11042, 120749, 11423, 74852, 119861, 68303, 43465, 0, 74767, 6559, + 64557, 71348, 92649, 120648, 43019, 43477, 10238, 74491, 128711, 43377, + 92282, 71346, 1478, 9783, 11825, 2607, 64740, 113689, 7739, 74543, + 917765, 67393, 0, 6132, 0, 63765, 128396, 70058, 41144, 71899, 92438, + 43537, 6761, 10093, 4369, 917791, 128394, 194776, 8820, 3947, 0, 65299, + 11515, 526, 128103, 41295, 194603, 125002, 194932, 113691, 7688, 917786, + 7686, 8288, 11815, 983188, 121411, 983384, 1543, 3713, 41221, 12423, + 42281, 78544, 74024, 12293, 983680, 64357, 11794, 42082, 128125, 1737, + 8987, 42081, 0, 7205, 83264, 9335, 12850, 119173, 6553, 7055, 68041, + 8277, 0, 67751, 5475, 74795, 6780, 65067, 0, 1327, 1160, 42084, 93963, + 41217, 119660, 10018, 360, 129070, 983865, 68176, 5863, 3137, 0, 4147, + 983170, 41216, 7844, 2616, 70197, 68461, 65234, 68341, 13076, 3135, + 983289, 78143, 119139, 3142, 92451, 94068, 10819, 119580, 10183, 74635, + 2608, 1470, 73967, 94008, 6227, 121257, 83268, 65236, 917878, 6163, + 983558, 113728, 127314, 128138, 983236, 8603, 127959, 119866, 3306, + 10876, 43392, 83187, 127931, 5751, 127517, 6222, 0, 127466, 12086, 7403, + 1600, 64309, 64939, 0, 64783, 92658, 11310, 0, 8882, 119903, 0, 2570, + 7021, 74902, 194742, 43110, 0, 1234, 6540, 6974, 92750, 0, 983211, 5002, + 983563, 41286, 69946, 74465, 71074, 43585, 113720, 6551, 983375, 128229, + 983274, 41289, 125130, 71080, 127958, 8977, 602, 120814, 0, 128350, + 128661, 194890, 983377, 41279, 0, 0, 94108, 11081, 43615, 0, 0, 127888, + 983612, 12727, 43895, 0, 78397, 9475, 7112, 65105, 0, 9633, 10886, 43592, + 7831, 983829, 194571, 0, 73915, 8076, 43048, 8290, 8291, 43051, 92570, 0, + 2596, 43584, 120983, 13113, 0, 127757, 2393, 7058, 9087, 74067, 68673, + 41574, 78337, 70498, 42900, 6376, 0, 0, 0, 0, 9854, 127748, 64696, 73879, + 128220, 120752, 6994, 0, 1720, 0, 0, 0, 6529, 7063, 983179, 3751, 9120, + 983487, 68038, 1798, 709, 0, 1354, 1876, 13152, 6557, 12430, 8137, 94098, + 67752, 70850, 119057, 245, 121066, 11456, 41233, 7070, 0, 94046, 6136, + 68304, 65677, 8682, 41235, 92595, 42045, 9804, 118963, 432, 3595, 127015, + 65437, 0, 74455, 42399, 983136, 0, 128274, 0, 119658, 128184, 0, 0, + 77894, 8797, 0, 9052, 64888, 7167, 2356, 95, 74784, 10580, 0, 42286, + 71123, 64640, 69999, 94109, 120877, 74137, 70035, 10063, 12652, 12199, + 74622, 43492, 2566, 11971, 983737, 120882, 1065, 0, 127005, 43400, 2576, + 66696, 66819, 83333, 43604, 127891, 0, 3201, 514, 74502, 70032, 2921, + 43215, 64493, 5772, 12968, 70055, 194944, 70310, 43398, 2580, 195025, + 41341, 41223, 6564, 1463, 41342, 0, 5293, 70020, 127870, 3733, 11346, 0, + 12054, 0, 74098, 42827, 195074, 13091, 0, 128580, 0, 917915, 127961, + 127025, 128334, 74821, 71104, 66295, 68037, 0, 121116, 13090, 66643, 0, + 1270, 1132, 42360, 0, 74096, 66655, 42569, 127824, 66898, 64761, 0, + 41021, 8510, 42432, 119898, 119317, 194782, 194641, 64496, 74109, 70030, + 9915, 983083, 983218, 7061, 41336, 3854, 69700, 13141, 68413, 43401, + 42319, 13082, 78114, 7067, 68221, 127881, 127383, 127171, 0, 120745, + 74209, 9029, 43543, 70836, 2353, 6308, 129154, 74792, 2611, 119186, + 66881, 127241, 65063, 43664, 92319, 66627, 92912, 4484, 8509, 118976, + 11066, 65233, 127146, 41224, 41017, 128149, 3747, 10522, 0, 194876, 1691, + 41226, 74962, 12107, 7100, 10905, 65010, 121299, 697, 66018, 9284, 4244, + 983343, 93058, 74781, 13121, 120036, 0, 12010, 128573, 128221, 120949, + 121032, 0, 127193, 65816, 68111, 118950, 127933, 65668, 92257, 6618, + 3562, 66365, 0, 42234, 12648, 78110, 7123, 70038, 5785, 9198, 9764, + 41316, 65877, 7383, 13230, 41299, 0, 0, 68365, 128258, 195027, 0, 0, + 13122, 0, 191, 70060, 8585, 8000, 64411, 120652, 42889, 64850, 41072, + 41578, 983104, 41577, 0, 10002, 121364, 6533, 73802, 41570, 917919, 683, + 396, 41580, 68146, 983067, 12901, 43058, 0, 343, 7129, 42680, 41360, + 78154, 983397, 4743, 69987, 0, 74040, 74108, 8743, 1724, 1433, 119322, + 128665, 3739, 6263, 71349, 128811, 3964, 6592, 121424, 68288, 66040, + 82946, 42568, 69806, 128113, 1778, 3956, 128443, 42070, 6563, 43075, + 9018, 94006, 983398, 12067, 41312, 92763, 5547, 8916, 120869, 128950, + 8175, 94034, 284, 8108, 934, 128039, 74001, 173, 66460, 7174, 92703, + 118822, 1750, 128686, 4394, 68368, 1807, 983888, 92298, 0, 5889, 128795, + 7180, 0, 67127, 0, 67126, 42471, 6982, 1721, 44022, 7891, 42243, 42160, + 2583, 4512, 119360, 65230, 128109, 0, 917630, 3855, 194810, 11767, + 127998, 0, 74295, 194651, 0, 92416, 3975, 67125, 74087, 74989, 12672, + 3798, 2703, 194608, 0, 2109, 9774, 1275, 0, 983750, 41095, 3962, 68242, + 2932, 41101, 3954, 6457, 4513, 74536, 127189, 73994, 73992, 1468, 120033, + 983057, 41803, 127999, 41846, 127244, 55238, 7633, 41849, 68385, 4320, + 3224, 113734, 92741, 66281, 42531, 74593, 1510, 128384, 8256, 0, 11393, + 0, 8879, 128075, 92474, 8770, 72416, 120811, 72415, 1910, 8671, 78374, + 4283, 68842, 120824, 68361, 78318, 2654, 7893, 195006, 128241, 0, 72394, + 65106, 42761, 12857, 4581, 8411, 78372, 78371, 78370, 78369, 78368, + 74475, 983444, 0, 1733, 4392, 2568, 10786, 69661, 0, 8184, 41486, 0, + 7396, 7116, 0, 69788, 0, 7185, 7965, 119144, 128447, 92347, 195066, + 41350, 9129, 983448, 0, 2294, 64501, 68034, 83326, 10481, 0, 70022, 7171, + 0, 340, 71105, 93972, 67360, 0, 92200, 128249, 124979, 6764, 127487, + 128393, 0, 92509, 128962, 65203, 11392, 119098, 119359, 119073, 3210, 0, + 0, 118795, 82958, 94101, 127484, 917619, 119149, 0, 10043, 121215, 1186, + 41571, 6999, 617, 9464, 125123, 3675, 5207, 65062, 5213, 74616, 2617, + 41348, 41568, 128803, 3253, 120535, 0, 8630, 121209, 0, 5596, 5545, 7288, + 2586, 64887, 119826, 5217, 71336, 128687, 917614, 121038, 64293, 68098, + 2635, 92760, 83137, 983846, 0, 92742, 7835, 70040, 120707, 194988, 92285, + 64558, 127122, 121425, 67083, 67085, 70099, 71118, 5784, 983102, 195050, + 983812, 70033, 4011, 194565, 68101, 124978, 7864, 4254, 65095, 983498, + 5600, 3903, 127083, 10447, 5598, 1207, 120521, 66689, 3501, 42582, 43600, + 129054, 127103, 1124, 5597, 194778, 194772, 9321, 983486, 75040, 983484, + 67400, 1719, 68356, 68354, 9671, 1125, 4399, 68775, 66274, 983490, 7631, + 5488, 7128, 120532, 0, 5491, 118797, 8937, 43044, 2604, 74187, 5490, + 43046, 5489, 7212, 11768, 43043, 6300, 127121, 7122, 983090, 4390, 454, + 41397, 0, 9875, 7593, 194791, 92274, 118913, 7207, 0, 65901, 2394, 2575, + 119184, 3746, 11016, 65752, 92757, 0, 43423, 128683, 11989, 118889, + 127791, 127995, 78296, 0, 8249, 128172, 11109, 78531, 6640, 74806, 2598, + 513, 127118, 6586, 8656, 129301, 69792, 65008, 194597, 71111, 78383, + 194795, 127474, 92515, 68475, 93973, 194584, 63799, 78637, 12647, 917606, + 128043, 69893, 1036, 68090, 92419, 1723, 68215, 74217, 0, 41579, 2444, + 120722, 10705, 73876, 195054, 74486, 983469, 740, 119222, 194978, 194984, + 0, 4238, 11071, 9459, 43936, 43938, 78139, 194985, 8121, 10438, 74487, + 42574, 13285, 43967, 11907, 43928, 5690, 92255, 5116, 0, 43181, 13095, + 77925, 43926, 64498, 0, 9506, 6978, 70176, 74931, 0, 113743, 78379, + 43934, 127845, 1122, 317, 0, 71055, 120621, 0, 1920, 0, 10173, 827, 0, 0, + 78378, 119600, 5223, 1304, 0, 83526, 5226, 12602, 94044, 5880, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, 69229, 9674, 5695, - 41711, 64627, 19909, 71077, 74604, 5691, 287, 866, 233, 68138, 983441, - 42816, 94036, 65140, 74797, 128158, 8830, 6568, 42300, 10524, 41175, - 125033, 983445, 983446, 5296, 983444, 42492, 43402, 92466, 3302, 0, - 74858, 6516, 6515, 6514, 6513, 6512, 0, 7856, 8690, 983686, 70870, 12122, - 119602, 43976, 0, 1785, 69925, 68622, 65153, 194810, 5138, 0, 71922, - 118869, 0, 4540, 41181, 0, 6200, 0, 5134, 69980, 322, 4643, 5132, 0, - 6389, 128533, 5143, 0, 8790, 128694, 120121, 194802, 71168, 8869, 69916, - 93069, 42060, 71326, 9648, 194804, 71170, 10270, 10286, 10318, 10382, - 43529, 66477, 194800, 0, 74170, 0, 3234, 43835, 0, 74376, 43139, 118815, - 127084, 120627, 8767, 68231, 74489, 9695, 72439, 5201, 0, 6215, 12714, - 6214, 13101, 0, 194999, 65268, 7661, 0, 128444, 11027, 128596, 10059, - 10511, 42075, 9767, 789, 1749, 78890, 67115, 983670, 320, 0, 8647, - 983705, 3049, 0, 6471, 42071, 43156, 9925, 127356, 127355, 66478, 4960, - 5549, 127359, 127346, 8485, 4671, 5418, 127350, 3351, 127006, 127351, - 10610, 5414, 3064, 6212, 4286, 5421, 127344, 9554, 0, 94048, 127109, - 6653, 128811, 0, 64510, 6213, 12885, 0, 119045, 64720, 0, 120759, 73741, - 12603, 7131, 11108, 4566, 7518, 9317, 3801, 10342, 10406, 124938, 119259, - 42576, 0, 5200, 92946, 129142, 983895, 9183, 127361, 74458, 66282, 395, - 5482, 5198, 4349, 10390, 74202, 5196, 43224, 6113, 42009, 5205, 128383, - 43307, 128369, 118973, 70467, 12134, 0, 0, 118843, 9126, 435, 983624, - 12014, 10377, 8093, 9079, 3203, 192, 65109, 3385, 125075, 64430, 5383, - 10294, 10326, 127309, 5738, 983215, 3336, 78355, 5361, 3623, 41159, 0, - 68112, 7872, 8581, 0, 1260, 3149, 5359, 120134, 0, 7914, 5357, 71190, - 74339, 2624, 5364, 0, 11431, 120030, 9101, 11058, 78288, 67107, 78293, - 42271, 78289, 42917, 67111, 129179, 65566, 6717, 10619, 43360, 78385, - 78384, 11832, 78382, 78381, 78380, 69861, 9319, 7097, 119055, 77906, - 3232, 73824, 74581, 78087, 0, 71205, 41889, 92453, 0, 1161, 41895, 74103, - 9701, 8622, 125025, 0, 73819, 120588, 5012, 77912, 41362, 69862, 68507, - 11921, 0, 11769, 128477, 68609, 41364, 0, 74228, 41352, 41361, 0, 41366, - 0, 3356, 11611, 917, 68422, 119915, 7134, 8199, 78389, 119618, 677, - 119916, 917876, 119932, 127169, 0, 0, 125136, 3349, 74125, 7022, 8927, - 4739, 92599, 5802, 194874, 8615, 0, 0, 491, 74401, 10190, 120698, 65837, - 119900, 8426, 11092, 9891, 0, 42497, 7113, 7586, 42305, 10852, 0, 42648, - 4606, 68448, 9095, 7741, 12684, 41885, 1046, 7124, 128610, 0, 5815, 5171, - 65539, 68612, 6932, 74267, 42394, 41878, 74849, 120621, 72424, 5169, - 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, 4136, 4871, 78287, - 120663, 9833, 0, 983341, 1128, 65920, 0, 9711, 7057, 9408, 9409, 9410, - 9411, 3662, 9413, 3378, 9415, 9416, 9417, 9418, 6320, 9420, 9421, 5897, - 9423, 5165, 5126, 41385, 0, 41389, 127963, 8955, 3374, 9400, 9401, 7119, - 9403, 9404, 3507, 9406, 7629, 983617, 19925, 42669, 68463, 183, 43985, - 2631, 70811, 10627, 41130, 78260, 3996, 0, 78771, 0, 119313, 119307, - 78768, 6580, 4332, 64825, 66329, 10726, 66686, 41125, 5899, 41365, - 127206, 12085, 66902, 574, 126705, 77825, 73828, 5448, 41058, 5446, - 65932, 41322, 42211, 5442, 4190, 77834, 77835, 5451, 77833, 3616, 77828, - 77837, 77838, 7708, 77836, 10859, 65867, 10345, 10409, 4191, 120378, - 77844, 73800, 42181, 77843, 77839, 2060, 0, 7111, 11788, 65376, 68129, - 10415, 74102, 0, 205, 0, 10351, 67151, 0, 9862, 6588, 43257, 64697, - 73998, 41355, 5505, 119154, 5503, 8021, 128035, 7125, 9819, 41357, 8011, - 42885, 5507, 12044, 92636, 0, 10026, 5472, 7109, 1191, 13106, 5470, - 10329, 5476, 8991, 66322, 69778, 11133, 42874, 8550, 42876, 5592, 2919, - 0, 2675, 5595, 78411, 43762, 4367, 127912, 0, 5478, 5904, 5594, 0, 74150, - 7291, 5590, 43761, 13067, 118909, 120372, 983108, 9731, 69731, 64633, - 77857, 77854, 71217, 77852, 71227, 77850, 10750, 43714, 77858, 7137, 0, - 66909, 12887, 10551, 194564, 77866, 77867, 77864, 77865, 9929, 5199, - 9936, 1120, 42387, 0, 1444, 9486, 7554, 65839, 55252, 73972, 1442, - 129080, 5894, 70069, 128672, 41171, 92511, 70358, 1323, 13162, 0, 3334, - 195010, 118803, 77881, 66022, 0, 69770, 1651, 128771, 8861, 0, 0, 1142, - 983869, 8271, 0, 983058, 126645, 12903, 0, 4002, 43626, 10442, 10676, - 3344, 128910, 194787, 12920, 194560, 70497, 194687, 66642, 1277, 66876, - 7871, 67106, 194686, 78853, 129068, 78854, 120360, 983490, 11784, 0, - 78012, 4700, 43856, 78858, 120359, 11012, 0, 78856, 92400, 77879, 4973, - 8784, 77877, 74804, 77874, 77869, 77871, 42440, 71225, 43118, 0, 42364, + 41711, 64627, 19909, 71077, 74604, 5691, 287, 866, 233, 68138, 983443, + 42816, 94036, 65140, 68028, 83093, 8830, 6568, 42300, 10524, 41175, + 83094, 983447, 68827, 5296, 983446, 42492, 43402, 92466, 3302, 0, 74858, + 6516, 6515, 6514, 6513, 6512, 0, 7856, 8690, 983686, 70870, 12122, + 119602, 43976, 194937, 1785, 69925, 68622, 65153, 68809, 5138, 983637, + 71922, 118869, 0, 4540, 41181, 917920, 6200, 0, 5134, 69980, 322, 4643, + 5132, 121184, 6389, 120998, 5143, 83205, 8790, 120911, 120121, 128695, + 71168, 8869, 69916, 93069, 42060, 71326, 9648, 83109, 71170, 10270, + 10286, 10318, 10382, 43529, 66477, 194800, 128534, 74170, 0, 3234, 43835, + 917818, 70111, 43139, 118815, 127084, 120627, 8767, 68231, 74489, 9695, + 72439, 5201, 75061, 6215, 12714, 6214, 13101, 0, 194999, 65268, 7661, 0, + 120909, 11027, 128596, 10059, 10511, 42075, 9767, 789, 1749, 78890, + 67115, 983670, 320, 0, 8647, 83054, 3049, 0, 6471, 42071, 43156, 9925, + 127356, 118894, 66478, 4960, 5549, 127359, 127346, 8485, 4671, 5418, + 127350, 3351, 120892, 127351, 10610, 5414, 3064, 6212, 4286, 5421, + 127344, 9554, 68051, 94048, 66896, 6653, 83044, 83102, 64510, 6213, + 12885, 0, 119045, 64720, 917873, 120759, 73741, 12603, 7131, 11108, 4566, + 7518, 9317, 3801, 10342, 10406, 124938, 119259, 42576, 0, 5200, 92946, + 121435, 983895, 9183, 127361, 74458, 66282, 395, 5482, 5198, 4349, 10390, + 74202, 5196, 43224, 6113, 42009, 5205, 128383, 43307, 70297, 118973, + 70467, 12134, 121167, 0, 118843, 9126, 435, 983624, 12014, 10377, 8093, + 9079, 3203, 192, 65109, 3385, 125075, 64430, 5383, 10294, 10326, 127309, + 5738, 120089, 3336, 78355, 5361, 3623, 41159, 83378, 68112, 7872, 8581, + 0, 1260, 3149, 5359, 120134, 74955, 7914, 5357, 71190, 74339, 2624, 5364, + 983608, 11431, 120030, 9101, 11058, 78288, 67107, 78293, 42271, 78289, + 42917, 67111, 129179, 65566, 6717, 10619, 43360, 78291, 78384, 11832, + 78382, 78381, 78380, 69861, 9319, 7097, 119055, 77906, 3232, 73824, + 74581, 78087, 0, 71205, 41889, 92453, 129144, 1161, 41895, 74103, 9701, + 8622, 125025, 0, 68772, 120588, 5012, 71453, 41362, 69862, 68507, 11921, + 0, 11769, 68782, 68609, 41364, 120947, 74228, 41352, 41361, 917903, + 41366, 0, 3356, 11611, 917, 68422, 119915, 7134, 8199, 78389, 119618, + 677, 119916, 917876, 71482, 127169, 68747, 0, 68738, 3349, 74125, 7022, + 8927, 4739, 92599, 5802, 194874, 8615, 0, 128058, 491, 74401, 10190, + 68755, 65837, 68800, 8426, 11092, 9891, 0, 42497, 7113, 7586, 42305, + 10852, 0, 42648, 4606, 68448, 9095, 7741, 12684, 41885, 1046, 7124, + 128610, 68753, 5815, 5171, 65539, 68612, 6932, 74267, 42394, 41878, + 74849, 74947, 72424, 5169, 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, + 8905, 4136, 4871, 78287, 120663, 9833, 0, 113730, 1128, 65920, 917879, + 9711, 7057, 9408, 9409, 9410, 9411, 3662, 9413, 3378, 9415, 9416, 9417, + 9418, 6320, 9420, 9421, 5897, 9423, 5165, 5126, 41385, 983938, 41389, + 127963, 8955, 3374, 9400, 9401, 7119, 9403, 9404, 3507, 9406, 7629, + 983617, 19925, 42669, 68463, 183, 43985, 2631, 70811, 10627, 41130, + 71079, 3996, 0, 71442, 128913, 119313, 119307, 78768, 6580, 4332, 64825, + 66329, 10726, 66686, 41125, 5899, 41365, 127206, 12085, 66902, 574, + 126705, 77825, 73828, 5448, 41058, 5446, 65932, 41322, 42211, 5442, 4190, + 77834, 77835, 5451, 77833, 3616, 77828, 68817, 77838, 7708, 74759, 2228, + 65867, 10345, 10409, 4191, 120378, 77844, 73800, 42181, 77843, 77839, + 2060, 121193, 7111, 11788, 65376, 68129, 10415, 74102, 983625, 205, + 83040, 10351, 67151, 0, 9862, 6588, 43257, 64697, 73998, 41355, 5505, + 74966, 5503, 8021, 128035, 7125, 9819, 41357, 8011, 42885, 5507, 12044, + 92636, 0, 10026, 5472, 7109, 1191, 13106, 5470, 10329, 5476, 8991, 66322, + 69778, 11133, 42874, 8550, 42876, 5592, 2919, 129052, 2675, 5595, 78411, + 43762, 4367, 127912, 917782, 5478, 5904, 5594, 0, 74150, 7291, 5590, + 43761, 13067, 118909, 75069, 983108, 9731, 69731, 64633, 77857, 77854, + 71217, 77852, 71227, 77850, 10750, 43714, 77858, 7137, 0, 66909, 12887, + 10551, 194564, 77866, 77867, 77864, 77865, 9929, 5199, 9936, 1120, 42387, + 0, 1444, 9486, 7554, 65839, 55252, 73972, 1442, 129080, 5894, 70069, + 128672, 41171, 92511, 70358, 1323, 13162, 120599, 3334, 128704, 92709, + 77881, 66022, 0, 69770, 1651, 120364, 8861, 0, 0, 1142, 983112, 8271, 0, + 983058, 126645, 12903, 78406, 4002, 43626, 10442, 10676, 3344, 128910, + 194787, 12920, 194560, 70497, 194687, 66642, 1277, 66876, 7871, 67106, + 71487, 78853, 129068, 78854, 120360, 983492, 11784, 0, 78012, 4700, + 43856, 78858, 120359, 11012, 983627, 78856, 78448, 77879, 4973, 8784, + 77877, 74804, 77874, 77869, 77871, 42440, 71225, 43118, 119875, 42364, 6774, 6773, 917560, 120369, 10346, 10410, 78859, 9243, 2464, 74263, 6108, - 3372, 0, 6247, 43117, 70364, 7121, 74166, 124973, 120355, 92537, 195035, - 0, 195034, 70357, 119922, 0, 67119, 3354, 195037, 4192, 9289, 118999, - 41191, 3876, 0, 70067, 120660, 43696, 43380, 0, 983091, 0, 983758, 11603, - 983954, 0, 6589, 128564, 194679, 128961, 0, 983700, 0, 129087, 42572, - 128264, 10630, 74827, 1963, 11622, 127098, 11654, 0, 7550, 10686, 5903, - 67098, 78009, 41329, 9662, 917937, 64698, 3366, 10399, 917938, 5542, - 11013, 127927, 71062, 194677, 78621, 67090, 6925, 0, 0, 92892, 71856, - 11568, 983673, 43367, 64579, 917930, 7852, 11138, 0, 6754, 6312, 77956, - 64672, 65296, 0, 118957, 0, 416, 12296, 68457, 73834, 68177, 11050, - 10984, 92208, 0, 0, 92182, 0, 983605, 9532, 66355, 0, 983234, 917925, - 64343, 195032, 92744, 195031, 0, 195030, 195057, 11445, 68294, 2112, - 128741, 128814, 10185, 1021, 128130, 9507, 10210, 74544, 8023, 1200, - 12243, 78001, 5282, 78003, 9624, 11545, 0, 120493, 3343, 4424, 11047, - 1885, 43268, 3896, 78444, 66497, 2947, 392, 7894, 4391, 68139, 983062, - 13059, 74816, 77998, 3381, 7942, 0, 69219, 0, 3558, 0, 3913, 70429, 0, - 78235, 7044, 1265, 0, 6309, 7045, 7175, 7047, 78239, 11791, 0, 917587, - 8221, 78307, 41864, 0, 0, 67075, 71219, 167, 983906, 78301, 983653, - 74211, 41897, 67072, 0, 917583, 917594, 67076, 2493, 0, 113778, 0, 92331, - 64354, 0, 8777, 0, 406, 8884, 2385, 78210, 92450, 0, 917573, 43030, - 42027, 12114, 0, 128597, 64936, 194695, 0, 120629, 10561, 128940, 8365, - 120539, 983774, 65841, 120787, 11601, 0, 74121, 128896, 917575, 7834, - 74159, 0, 917574, 10298, 6624, 4908, 917596, 1639, 0, 0, 70803, 6327, - 6724, 124953, 128086, 92566, 69910, 4817, 11087, 194759, 92536, 7043, - 9600, 11022, 0, 0, 0, 0, 0, 73954, 7548, 64794, 42050, 12291, 55289, + 3372, 0, 6247, 43117, 70364, 7121, 74166, 124973, 120355, 92537, 194846, + 119877, 195034, 70357, 119922, 0, 67119, 3354, 195037, 4192, 9289, + 118999, 41191, 3876, 0, 70067, 120660, 43696, 43380, 0, 983091, 983965, + 983758, 11603, 983954, 75074, 6589, 128564, 82975, 120993, 67812, 983700, + 0, 129087, 42572, 128264, 10630, 74827, 1963, 11622, 118882, 11654, + 121287, 7550, 10686, 5903, 67098, 78009, 41329, 9662, 917937, 64698, + 3366, 10399, 917938, 5542, 11013, 127927, 71062, 194677, 71461, 67090, + 6925, 0, 0, 92892, 71856, 11568, 983673, 43367, 64579, 917930, 7852, + 11138, 0, 6754, 6312, 77956, 64672, 65296, 0, 118957, 0, 416, 12296, + 68457, 73834, 68177, 11050, 10984, 92208, 0, 0, 92182, 129146, 983605, + 9532, 66355, 119264, 68073, 113695, 64343, 195032, 92744, 195031, 0, + 194847, 195057, 11445, 68294, 2112, 128741, 128814, 10185, 1021, 128130, + 9507, 10210, 74544, 8023, 1200, 12243, 78001, 5282, 78003, 9624, 11545, + 0, 120276, 3343, 4424, 11047, 1885, 43268, 3896, 78444, 66497, 2947, 392, + 7894, 4391, 68139, 121064, 13059, 74816, 77998, 3381, 7942, 0, 69219, + 92433, 3558, 129190, 3913, 70429, 121376, 78235, 7044, 1265, 0, 6309, + 7045, 7175, 7047, 78239, 11791, 983122, 917587, 8221, 78307, 41864, 0, 0, + 67075, 71219, 167, 983906, 78301, 983653, 74211, 41897, 67072, 0, 917583, + 127140, 67076, 2493, 0, 113778, 121245, 78107, 64354, 0, 8777, 127940, + 406, 8884, 2385, 78210, 92450, 917590, 917573, 43030, 42027, 12114, 0, + 128597, 64936, 194695, 119267, 120629, 10561, 128940, 8365, 120539, + 983774, 65841, 120787, 11601, 0, 74121, 128896, 83176, 7834, 74159, 0, + 917574, 10298, 6624, 4908, 917577, 1639, 120842, 0, 70803, 6327, 6724, + 124953, 66354, 92566, 69910, 4817, 11087, 194759, 92536, 7043, 9600, + 11022, 0, 0, 0, 983599, 0, 73954, 7548, 64794, 42050, 12291, 55289, 128781, 12343, 657, 67110, 42705, 4461, 1134, 1838, 78438, 2057, 0, 4468, - 92891, 194945, 0, 4456, 5206, 10720, 0, 42523, 127520, 0, 93044, 917595, - 65550, 260, 4816, 67658, 10687, 0, 4821, 4466, 0, 195043, 4818, 129058, - 41403, 119977, 72422, 128458, 41406, 43273, 74160, 69805, 73939, 92638, - 119984, 119979, 41404, 1165, 119980, 4451, 13087, 0, 11284, 119987, - 70097, 65155, 43014, 5439, 9363, 70070, 3375, 128448, 5900, 93990, 7889, - 2722, 42262, 0, 0, 67078, 128451, 2282, 0, 127810, 11401, 67079, 0, - 68459, 125028, 983141, 0, 70150, 65438, 0, 7280, 127887, 0, 70146, 4868, - 8297, 119966, 70148, 0, 128744, 43161, 70144, 92360, 0, 5182, 0, 120542, - 0, 0, 4226, 70186, 12135, 5732, 4464, 0, 71330, 977, 4458, 43827, 92971, - 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 92240, 0, 786, 126995, - 43174, 64340, 0, 194767, 73971, 43026, 7612, 10132, 64413, 65025, 0, 0, - 0, 93956, 0, 68444, 0, 92437, 0, 119160, 10204, 92656, 0, 127809, 128431, - 1399, 983652, 65217, 983637, 8852, 128571, 241, 128780, 4907, 128427, - 983639, 7932, 9727, 128463, 74255, 8748, 0, 0, 983631, 0, 42780, 0, - 113677, 0, 4217, 93034, 8650, 0, 120673, 0, 69900, 118872, 43099, 3965, - 119119, 6719, 128007, 13300, 78439, 93971, 43057, 66588, 118991, 66289, - 0, 73815, 4420, 983120, 6410, 7760, 0, 70468, 128752, 120684, 0, 7294, 0, - 43869, 125032, 9066, 0, 11993, 43188, 2626, 7762, 0, 118831, 92899, - 92601, 42825, 41854, 5304, 0, 78516, 6919, 8619, 119655, 10038, 66454, - 9592, 42851, 126993, 1542, 92303, 128819, 0, 127327, 983597, 74311, - 78497, 0, 10181, 124937, 43624, 129060, 7779, 917551, 10195, 9479, 6029, - 128374, 92268, 2224, 0, 65577, 8993, 66358, 0, 42378, 3368, 606, 127030, - 7697, 69237, 69787, 2030, 70106, 6027, 8370, 4322, 0, 65207, 0, 70386, - 127903, 983337, 983336, 2735, 42831, 77935, 70439, 74866, 8881, 119047, - 0, 70433, 73946, 0, 0, 0, 68140, 983928, 9576, 92783, 3347, 4160, 5154, - 55288, 3794, 66564, 8530, 127063, 7709, 41112, 983132, 66560, 8381, 4572, - 12876, 66561, 128921, 6758, 983926, 1615, 5855, 809, 0, 92283, 128316, - 128004, 5799, 128929, 70100, 128607, 7260, 983324, 43031, 64425, 65128, - 78819, 64386, 65257, 0, 68616, 120607, 9347, 128067, 6532, 0, 917918, 0, + 92891, 194945, 83056, 4456, 5206, 10720, 0, 42523, 127520, 0, 93044, + 129411, 65550, 260, 4816, 67658, 10687, 0, 4821, 4466, 0, 83182, 4818, + 129058, 41403, 119977, 72422, 128458, 41406, 43273, 74160, 69805, 73939, + 92638, 119984, 119979, 41404, 1165, 119980, 4451, 13087, 0, 11284, + 119987, 70097, 65155, 43014, 5439, 9363, 70070, 3375, 128448, 5900, + 93990, 7889, 2722, 42262, 983481, 0, 67078, 128451, 2282, 121422, 127810, + 11401, 67079, 0, 68459, 125028, 983141, 0, 70150, 65438, 0, 7280, 127887, + 68055, 70146, 4868, 8297, 119966, 70148, 125008, 128744, 43161, 70144, + 92360, 0, 5182, 0, 120542, 0, 0, 4226, 70186, 12135, 5732, 4464, 195083, + 71330, 977, 4458, 43827, 92971, 64770, 74838, 0, 344, 0, 121228, 1395, + 64279, 0, 92240, 121179, 786, 126995, 43174, 64340, 83077, 194767, 73971, + 43026, 7612, 10132, 64413, 65025, 0, 0, 0, 93956, 983917, 68444, 0, + 92437, 124928, 92549, 10204, 92656, 83078, 119271, 128431, 1399, 121463, + 65217, 121465, 8852, 120808, 241, 121469, 4907, 128427, 983639, 7932, + 9727, 128463, 74255, 8748, 0, 128428, 983631, 0, 42780, 55263, 113677, + 983560, 4217, 93034, 8650, 127991, 120673, 128215, 69900, 118872, 43099, + 3965, 119119, 6719, 128007, 13300, 78439, 93971, 43057, 66588, 118991, + 66289, 120902, 73815, 4420, 983120, 6410, 7760, 0, 70468, 128752, 120684, + 121246, 7294, 128218, 43869, 120859, 9066, 121321, 11993, 43188, 2626, + 7762, 983866, 118831, 92899, 92601, 42825, 41854, 5304, 70290, 78516, + 6919, 8619, 119655, 10038, 66454, 9592, 42851, 120537, 1542, 92303, + 128819, 0, 127327, 121199, 74311, 78497, 0, 10181, 124937, 43624, 129060, + 7779, 917551, 10195, 9479, 6029, 128374, 92268, 2224, 0, 65577, 8993, + 66358, 0, 42378, 3368, 606, 127030, 7697, 69237, 69787, 2030, 70106, + 6027, 8370, 4322, 0, 65207, 0, 70386, 127903, 983339, 983338, 2735, + 42831, 77935, 70439, 74866, 8881, 119047, 0, 70433, 73946, 0, 194703, 0, + 68140, 983928, 9576, 70288, 3347, 4160, 5154, 55288, 3794, 66564, 8530, + 127063, 7709, 41112, 119868, 66560, 8381, 4572, 12876, 66561, 128921, + 6758, 66031, 1615, 5855, 809, 127117, 92283, 128316, 128004, 5799, + 128929, 70100, 128607, 7260, 983326, 43031, 64425, 65128, 78819, 64386, + 65257, 74909, 68616, 120607, 9347, 83360, 6532, 0, 917918, 120860, 127060, 65828, 120006, 283, 68665, 78813, 532, 78663, 78817, 128021, - 120609, 0, 3370, 0, 11361, 5443, 78778, 8153, 73767, 0, 10741, 0, 2298, - 0, 125039, 65495, 64706, 983318, 43344, 983316, 7144, 9466, 78866, 9824, - 67142, 128963, 67133, 67130, 915, 43425, 67292, 43865, 68232, 0, 127178, - 43264, 67136, 67137, 0, 43038, 78864, 6730, 78862, 68161, 64550, 5186, - 7360, 127837, 70451, 12108, 0, 65124, 43127, 66043, 0, 6326, 43107, - 77826, 0, 42562, 0, 128821, 128178, 128520, 11485, 6103, 92468, 983305, - 11718, 983303, 12889, 92657, 125034, 0, 0, 127476, 55245, 128927, 1630, - 128232, 65483, 120634, 12565, 0, 65476, 70369, 983072, 119214, 9283, - 7700, 917537, 9690, 65499, 0, 64593, 512, 3376, 68210, 0, 128253, 77892, - 632, 12940, 77891, 42529, 78587, 194604, 5957, 110593, 8926, 983299, - 983298, 128273, 10745, 10174, 7379, 64581, 5386, 120686, 11713, 10633, - 69708, 5056, 0, 0, 0, 120773, 94055, 9812, 0, 4460, 0, 124956, 71307, - 128038, 0, 0, 127174, 64278, 92370, 43466, 0, 0, 64389, 2953, 70122, - 1801, 12835, 74847, 0, 73823, 128681, 66375, 2085, 702, 42579, 77884, - 77885, 13074, 77883, 66299, 983285, 128570, 12106, 983282, 74207, 1755, - 10482, 12863, 77898, 1163, 2951, 9522, 74079, 78266, 66604, 0, 3384, - 69227, 10702, 830, 77902, 77899, 77900, 8451, 0, 0, 0, 66458, 128957, - 128870, 0, 0, 2908, 0, 11177, 64902, 4243, 92454, 12239, 917872, 124959, - 4441, 0, 113765, 73940, 64352, 127513, 125031, 411, 983273, 9199, 983271, - 4056, 118992, 41890, 194698, 2730, 41604, 128355, 5428, 194743, 3364, - 42265, 64437, 127935, 118816, 194742, 9684, 216, 71367, 1401, 128053, - 44012, 92628, 0, 92585, 9158, 66878, 11126, 5768, 0, 0, 0, 484, 194739, - 0, 0, 65895, 125076, 0, 3338, 73935, 572, 7041, 2736, 67605, 983263, + 120609, 0, 3370, 917881, 11361, 5443, 71431, 8153, 73767, 0, 10741, + 121503, 2298, 0, 125039, 65495, 64706, 983320, 43344, 983318, 7144, 9466, + 78866, 9824, 67142, 128963, 67133, 67130, 915, 43425, 67292, 43865, + 68232, 983111, 120888, 43264, 67136, 67137, 0, 43038, 78864, 6730, 78862, + 68161, 64550, 5186, 7360, 127837, 70451, 12108, 120644, 65124, 43127, + 66043, 0, 6326, 43107, 77826, 0, 42562, 0, 128821, 128178, 120919, 11485, + 6103, 92468, 983307, 11718, 983305, 12889, 92657, 125034, 120635, 127157, + 121128, 55245, 128709, 1630, 83027, 65483, 120634, 12565, 0, 65476, + 70369, 983072, 83029, 9283, 7700, 917537, 9690, 65499, 0, 64593, 512, + 3376, 68080, 0, 128253, 77892, 632, 12940, 77891, 42529, 78587, 194604, + 5957, 110593, 8926, 983301, 983300, 128273, 10745, 10174, 7379, 64581, + 5386, 120686, 11713, 10633, 69708, 5056, 0, 0, 0, 120773, 94055, 9812, 0, + 4460, 78791, 124956, 71307, 128038, 0, 121135, 127174, 64278, 92370, + 43466, 0, 0, 64389, 2953, 70122, 1801, 12835, 74847, 120867, 73823, + 83110, 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 66299, + 983287, 71447, 12106, 120972, 74207, 1755, 10482, 12863, 77898, 1163, + 2951, 9522, 67816, 78266, 66604, 983860, 3384, 69227, 10702, 830, 77902, + 77899, 77900, 8451, 83324, 0, 0, 66458, 128957, 128870, 74896, 0, 2908, + 0, 11177, 64902, 4243, 92454, 12239, 121003, 124959, 4441, 0, 82968, + 73940, 64352, 127513, 125031, 411, 983275, 9199, 983273, 4056, 118992, + 41890, 128592, 2730, 41604, 128355, 5428, 194743, 3364, 42265, 64437, + 127935, 118816, 71458, 9684, 216, 71367, 1401, 128053, 44012, 92628, + 71456, 92585, 9158, 66878, 11126, 5768, 0, 983759, 0, 484, 194739, 0, 0, + 65895, 125076, 121380, 3338, 73935, 572, 7041, 2736, 67605, 127543, 93962, 2794, 8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, 5456, 5509, 77846, 194747, 9534, 129109, 129040, 0, 3430, 0, 42905, - 78717, 128903, 981, 129184, 4330, 73929, 120536, 1824, 10908, 126506, + 78717, 74929, 981, 129184, 4330, 73929, 120536, 1824, 10908, 126506, 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547, 128259, 674, 63991, - 983249, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 8364, 5123, 119628, - 5281, 5469, 5121, 119245, 118993, 0, 5130, 0, 0, 77990, 0, 120726, 1221, - 2733, 11746, 77991, 5216, 0, 0, 0, 92187, 3468, 7033, 9230, 5939, 195052, - 0, 5803, 71867, 68400, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, - 983413, 0, 11739, 92524, 41981, 92743, 5938, 0, 43766, 12448, 7576, - 10401, 10337, 73852, 124994, 13057, 0, 126976, 0, 10009, 0, 41703, - 983638, 12165, 129191, 0, 9885, 0, 8077, 92620, 127908, 0, 983439, 0, - 92457, 129138, 4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 125078, 0, - 983426, 128574, 10970, 11733, 0, 120792, 126490, 19944, 74356, 9009, - 8551, 92345, 11468, 64636, 7575, 0, 2724, 128899, 0, 12313, 11151, 515, - 119947, 42791, 63987, 78286, 119943, 119940, 119941, 119938, 9775, 4046, - 4589, 4521, 68629, 9141, 0, 78850, 2741, 64399, 6197, 1370, 0, 0, 0, 0, - 0, 983560, 6184, 8606, 3303, 41372, 11786, 9473, 66203, 66177, 92446, - 11593, 43007, 4478, 66178, 0, 0, 2744, 0, 4477, 78267, 814, 42066, 66183, - 66204, 43786, 119961, 66198, 41880, 66188, 11623, 78148, 11955, 66190, - 66191, 41111, 66189, 73788, 7788, 4847, 0, 127759, 0, 128433, 2221, 1581, - 6535, 78161, 12954, 430, 78160, 55259, 73944, 128036, 5278, 4945, 42883, - 4950, 983438, 68625, 983436, 7269, 0, 5964, 12908, 124997, 0, 74764, - 43512, 119146, 194936, 4949, 983429, 443, 983427, 4944, 5467, 119603, - 70865, 65137, 6044, 65392, 0, 4213, 0, 41303, 0, 194931, 119962, 41306, - 73984, 2698, 127159, 0, 12072, 3193, 0, 41304, 824, 128676, 12091, 67118, - 78894, 119816, 4673, 64804, 4678, 119820, 119819, 65059, 43860, 6739, - 66844, 5481, 3490, 1199, 119811, 8356, 69947, 67702, 4677, 12688, 3102, - 0, 4672, 78173, 78175, 5531, 68367, 42575, 78170, 78166, 4674, 4548, - 44005, 71087, 68658, 119946, 8025, 68630, 127024, 1855, 983412, 68669, - 983410, 92445, 127554, 983417, 127339, 119652, 2745, 11797, 983418, - 128159, 9202, 4654, 6840, 983414, 68638, 73993, 10525, 4649, 65209, - 983416, 0, 4648, 43080, 983406, 983407, 983404, 6246, 64950, 7828, 4650, - 6777, 6776, 6775, 4653, 7822, 78005, 74624, 43187, 8669, 120659, 6821, - 65093, 0, 78881, 2716, 0, 983060, 70503, 194952, 68369, 120054, 11060, - 8547, 2711, 42165, 78027, 78026, 6836, 983421, 0, 4662, 78033, 78032, - 9149, 9146, 599, 2081, 78031, 78030, 194962, 4656, 10130, 68450, 7811, - 40994, 194965, 6414, 5967, 4658, 3725, 5713, 5814, 4661, 42434, 983411, - 128737, 11190, 64904, 9026, 10833, 74864, 7547, 4867, 11100, 10008, - 10222, 3054, 194956, 9744, 78860, 7605, 4622, 119656, 983395, 94070, - 983393, 69905, 67188, 9045, 78888, 4225, 19926, 78887, 12880, 65307, - 4617, 78883, 983386, 41732, 4616, 10518, 10423, 10359, 983380, 5958, 0, - 983433, 4215, 9789, 119619, 4321, 4621, 983389, 41313, 522, 5368, 11139, - 65803, 0, 5366, 12201, 5372, 0, 983409, 194975, 7720, 7390, 2696, 983400, - 0, 4638, 983405, 1790, 78242, 5965, 64363, 66569, 68646, 68477, 5376, - 1835, 5335, 194966, 128089, 4633, 0, 68119, 1180, 4632, 67191, 5387, - 5333, 0, 125132, 42094, 5331, 4634, 11928, 983594, 5338, 4637, 128170, - 5971, 42414, 43500, 1268, 65097, 42361, 0, 0, 73853, 1427, 128440, 0, - 5970, 3431, 0, 10358, 10422, 4758, 983374, 1608, 2738, 125066, 10455, - 4753, 74026, 11344, 4222, 6240, 5231, 74384, 983378, 68377, 6248, 983362, - 128432, 983360, 42318, 92582, 5229, 4757, 0, 0, 2728, 4752, 64563, 65235, - 5234, 0, 128145, 128926, 10713, 7166, 0, 2622, 7460, 127302, 67101, - 126495, 8954, 74760, 65189, 2632, 42617, 10108, 1011, 5574, 1853, 2709, - 65139, 5577, 128966, 0, 118871, 68641, 8965, 7635, 42177, 5316, 0, 5314, - 6451, 5572, 66464, 5312, 0, 5525, 5330, 5319, 68292, 127311, 65066, - 44003, 120650, 983480, 43843, 120498, 127851, 195009, 74851, 74022, - 983422, 64609, 68643, 67410, 128593, 5721, 983401, 5519, 8632, 66465, - 11267, 73961, 92278, 5720, 983352, 1692, 4219, 4610, 8696, 4305, 0, 4609, - 43478, 4614, 541, 983355, 5287, 5309, 5285, 68389, 5961, 4647, 56, 4216, - 10577, 41381, 601, 4613, 983349, 983346, 9208, 4608, 64260, 41124, 5190, - 67628, 66826, 68145, 7086, 0, 67998, 67620, 93047, 2734, 11074, 0, 67627, - 43593, 0, 67625, 5960, 67722, 8992, 42593, 128260, 1782, 67622, 68114, - 119939, 0, 68180, 5501, 119952, 42508, 7442, 43665, 359, 41253, 68392, - 6239, 119956, 41256, 74132, 67740, 0, 71178, 917550, 9346, 69660, 41254, - 128047, 43291, 3767, 5737, 0, 4865, 0, 5740, 917997, 5736, 4368, 64724, - 7193, 67097, 128844, 5739, 41024, 4866, 0, 73904, 983840, 4869, 120563, - 0, 4223, 128201, 6650, 126509, 0, 983463, 127890, 4870, 120445, 68661, - 6716, 78176, 68667, 68382, 68676, 127925, 10122, 4864, 66568, 4144, 7937, - 0, 6245, 68652, 2732, 42734, 745, 0, 195097, 92195, 4777, 7821, 129136, - 68631, 42775, 0, 128445, 0, 3097, 0, 5966, 983486, 4778, 0, 10863, 0, - 4781, 92986, 64407, 128503, 128323, 8577, 71221, 68196, 43285, 10216, - 4782, 0, 0, 120757, 68618, 12325, 43056, 8717, 0, 0, 4776, 73818, 11492, - 8700, 983955, 13176, 68363, 10426, 67247, 71091, 10362, 194706, 1715, - 4849, 8242, 9561, 73922, 43278, 42635, 0, 127207, 5963, 917926, 983481, - 0, 4850, 73900, 1607, 466, 4853, 118995, 4854, 127918, 5164, 73807, 1350, - 5124, 64420, 1993, 5362, 8471, 2708, 92471, 12445, 3785, 234, 3199, - 128768, 41268, 4848, 2530, 194711, 2068, 1964, 0, 73762, 10458, 983415, - 8576, 78543, 0, 2704, 4794, 0, 68211, 8322, 4797, 5753, 0, 2694, 4792, 0, - 2439, 65104, 69804, 983424, 303, 74625, 68229, 983425, 2437, 78659, 4221, - 4844, 92216, 0, 0, 0, 70042, 74095, 43292, 0, 2441, 10739, 65090, 0, - 70436, 118929, 2451, 2714, 119326, 0, 43379, 4937, 43376, 753, 5849, - 10597, 43089, 11722, 9248, 92555, 42879, 11725, 0, 0, 2726, 3107, 73958, - 4941, 64937, 119233, 9140, 1408, 5261, 4607, 0, 181, 983430, 4942, 9539, - 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 983601, 6844, 4964, 5264, - 64178, 64177, 12979, 41411, 64182, 64181, 64180, 64179, 9482, 4873, - 41231, 1822, 42526, 127989, 12758, 3865, 0, 128473, 10500, 0, 119024, - 78028, 92408, 9830, 43642, 389, 10893, 7521, 127879, 4872, 5463, 128119, - 3125, 9567, 0, 4878, 5459, 4604, 917931, 9557, 5465, 68617, 0, 11494, - 126492, 9563, 10865, 74570, 43279, 64186, 68521, 78714, 64191, 64190, - 8898, 64188, 129153, 41030, 74226, 0, 74600, 78820, 917834, 0, 78805, - 41031, 78801, 11960, 6745, 3082, 983437, 78539, 73919, 10573, 41744, - 7079, 5856, 127043, 5163, 78809, 128162, 1817, 66724, 78538, 119010, - 10564, 7763, 13077, 41813, 4400, 41745, 64207, 10275, 8925, 10371, 10307, - 41814, 4248, 0, 0, 4541, 6299, 64204, 64203, 64201, 64200, 64199, 64198, - 126471, 42156, 78688, 0, 64193, 64192, 65223, 9943, 64197, 64196, 64195, - 64194, 12231, 42652, 64174, 64173, 78189, 846, 78186, 9965, 74495, 0, - 917924, 0, 2543, 12163, 3108, 9745, 64167, 64166, 64165, 64164, 2110, - 92176, 64169, 64168, 64949, 10972, 10251, 10247, 42768, 715, 2295, 43299, - 9453, 5348, 10943, 66390, 0, 11352, 550, 9910, 125127, 0, 66579, 11551, - 128464, 195080, 9504, 7187, 0, 10373, 0, 120791, 10261, 10253, 6404, - 10277, 78183, 11984, 1552, 65222, 6998, 78180, 0, 3128, 4789, 5067, 5066, - 118849, 4784, 0, 8827, 1146, 5065, 69890, 78192, 68136, 78190, 43412, - 5064, 2431, 0, 9450, 1809, 0, 78200, 78201, 5062, 1264, 64817, 13254, - 11697, 126598, 9785, 64716, 0, 3933, 74559, 4740, 7954, 0, 125023, 42609, - 128388, 74175, 66912, 127016, 0, 983873, 42130, 983223, 5151, 917829, - 917823, 0, 93980, 0, 7620, 3800, 65122, 0, 127792, 8355, 7854, 0, 954, - 64927, 4185, 41045, 127141, 41438, 41439, 68666, 10711, 4593, 127745, - 120584, 983408, 64774, 8053, 10532, 66727, 0, 0, 78642, 64759, 1325, - 5166, 9888, 127800, 5148, 42834, 0, 78205, 78206, 43787, 78204, 64131, - 3119, 917814, 0, 3060, 64135, 9986, 0, 77876, 636, 11698, 0, 917810, - 9916, 11701, 7836, 42741, 64137, 8320, 78640, 8863, 70201, 119960, 1477, - 43289, 68492, 67164, 8618, 983402, 9908, 983981, 0, 0, 3937, 12312, 0, - 983403, 0, 64781, 912, 6349, 4536, 93954, 74532, 126594, 6244, 92209, - 71341, 3935, 120665, 983476, 0, 11950, 5392, 42248, 65129, 68656, 5397, - 128310, 12046, 12599, 67407, 128261, 5395, 0, 5393, 354, 68615, 77853, - 74366, 0, 0, 42039, 113817, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, 66407, - 128874, 0, 0, 43297, 70188, 4311, 4644, 8818, 78158, 128186, 0, 7145, - 3918, 66452, 3797, 1644, 92346, 9658, 4140, 11385, 65947, 6455, 9030, - 813, 119945, 68131, 4146, 119957, 5360, 2466, 0, 67669, 119942, 6249, - 42117, 92287, 92206, 0, 119255, 74046, 43745, 4911, 988, 71180, 0, - 983468, 43061, 7054, 64147, 0, 64920, 68195, 6698, 118933, 92506, 0, - 70849, 11981, 12202, 0, 11032, 67654, 6093, 11608, 975, 66415, 65843, - 170, 0, 67239, 4169, 0, 41859, 6058, 120401, 13203, 120657, 70507, - 125091, 68657, 9818, 10178, 10324, 42106, 5898, 74540, 4738, 41856, 7062, - 127120, 4737, 11779, 4742, 120564, 92391, 68342, 983364, 9825, 6448, - 6715, 127008, 4831, 983363, 92525, 67731, 5300, 4741, 42108, 983354, - 64159, 4736, 64148, 0, 849, 92191, 78491, 43288, 0, 66620, 127533, - 127331, 65549, 9496, 64598, 118866, 983366, 7876, 68132, 66280, 3928, - 917870, 43378, 10706, 7198, 0, 4842, 12053, 128129, 127303, 4841, 0, - 4171, 12008, 6251, 3923, 1490, 0, 119591, 126512, 40972, 5245, 70794, - 10114, 42001, 41888, 4845, 8332, 40974, 64347, 4840, 9077, 78346, 1747, - 917849, 4825, 69240, 917852, 68655, 0, 983388, 0, 0, 68628, 983347, 9850, - 118937, 367, 1472, 917859, 6687, 1274, 0, 5905, 12339, 8919, 73953, - 10907, 65261, 11023, 119559, 4830, 9134, 78666, 64126, 43011, 0, 78669, - 64101, 0, 0, 4824, 10614, 119659, 0, 1888, 1960, 7861, 917856, 78524, - 41836, 43012, 6052, 6064, 54, 43009, 12214, 0, 6211, 120386, 358, 41997, - 41833, 11442, 10758, 65774, 113823, 120384, 64115, 92221, 70018, 0, + 983251, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 8364, 5123, 119628, + 5281, 5469, 5121, 77989, 118993, 0, 5130, 83180, 128357, 77990, 0, + 120726, 1221, 2733, 11746, 77991, 5216, 119268, 0, 128475, 92187, 3468, + 7033, 9230, 5939, 128397, 0, 5803, 71867, 68400, 7278, 10321, 10289, + 64613, 10385, 41706, 0, 0, 917939, 0, 11739, 77986, 41981, 92743, 5938, + 0, 43766, 12448, 7576, 10401, 10337, 73852, 124994, 13057, 0, 126976, + 129081, 10009, 0, 41703, 120950, 12165, 129191, 0, 9885, 0, 8077, 92620, + 127908, 121044, 194995, 0, 92457, 129138, 4220, 10725, 10433, 0, 68395, + 4987, 64519, 121265, 125078, 0, 194813, 128574, 10970, 11733, 0, 120792, + 126490, 19944, 74356, 9009, 8551, 92345, 11468, 64636, 7575, 0, 2724, + 128899, 0, 12313, 11151, 515, 119947, 42791, 63987, 78286, 119943, + 119940, 119941, 119938, 9775, 4046, 4589, 4521, 68629, 9141, 917904, + 78850, 2741, 64399, 6197, 1370, 0, 120841, 0, 125062, 983441, 120843, + 6184, 8606, 3303, 41372, 11786, 9473, 66203, 66177, 92446, 11593, 43007, + 4478, 66178, 0, 0, 2744, 0, 4477, 78267, 814, 42066, 66183, 66204, 43786, + 119961, 66198, 41880, 66188, 11623, 78148, 11955, 66190, 66191, 41111, + 66189, 73788, 7788, 4847, 983428, 127759, 0, 128433, 2221, 1581, 6535, + 78161, 12954, 430, 78160, 55259, 73944, 128036, 5278, 4945, 42883, 4950, + 983440, 68625, 983438, 7269, 128499, 5964, 12908, 124997, 0, 74764, + 43512, 119146, 194936, 4949, 983431, 443, 983429, 4944, 5467, 119603, + 70865, 65137, 6044, 65392, 0, 4213, 0, 41303, 917556, 194931, 119962, + 41306, 73984, 2698, 127159, 0, 12072, 3193, 0, 41304, 824, 128676, 12091, + 67118, 78894, 119816, 4673, 64804, 4678, 119820, 119819, 65059, 43860, + 6739, 66844, 5481, 3490, 1199, 119811, 8356, 69947, 67702, 4677, 12688, + 3102, 0, 4672, 78173, 78175, 5531, 68367, 42575, 78170, 78166, 4674, + 4548, 44005, 71087, 68658, 119946, 8025, 68630, 127024, 1855, 127475, + 68669, 118990, 92445, 127554, 126630, 127339, 119652, 2745, 11797, + 983419, 128159, 9202, 4654, 6840, 983416, 68638, 73993, 10525, 4649, + 65209, 121512, 121511, 4648, 43080, 75070, 121507, 983406, 6246, 64950, + 7828, 4650, 6777, 6776, 6775, 4653, 7822, 70287, 74624, 43187, 8669, + 120659, 6821, 65093, 983565, 78881, 2716, 983412, 983060, 70503, 194952, + 68369, 120054, 11060, 8547, 2711, 42165, 78027, 78026, 6836, 983423, 0, + 4662, 78033, 78032, 9149, 9146, 599, 2081, 78031, 78030, 194962, 4656, + 10130, 68450, 7811, 40994, 194965, 6414, 5967, 4658, 3725, 5713, 5814, + 4661, 42434, 983413, 128737, 11190, 64904, 9026, 10833, 74864, 7547, + 4867, 11100, 10008, 10222, 3054, 194956, 9744, 78860, 7605, 4622, 119656, + 43888, 70303, 983395, 69905, 67188, 9045, 78888, 4225, 19926, 68831, + 12880, 65307, 4617, 68757, 983388, 41732, 4616, 10518, 10423, 10359, + 983382, 5958, 0, 983435, 4215, 9789, 119619, 4321, 4621, 195028, 41313, + 522, 5368, 11139, 65803, 128546, 5366, 12201, 5372, 121060, 119949, + 194975, 7720, 7390, 2696, 983402, 0, 4638, 983407, 1790, 78242, 5965, + 64363, 66569, 68646, 68477, 5376, 1835, 5335, 121505, 128089, 4633, 0, + 68119, 1180, 4632, 67191, 5387, 5333, 0, 125132, 42094, 5331, 4634, + 11928, 983594, 5338, 4637, 128170, 5971, 42414, 43500, 1268, 65097, + 42361, 0, 0, 73853, 1427, 128440, 0, 5970, 3431, 0, 10358, 10422, 4758, + 983376, 1608, 2738, 125066, 10455, 4753, 74026, 11344, 4222, 6240, 5231, + 74384, 66611, 68377, 6248, 983364, 67815, 78878, 42318, 92582, 5229, + 4757, 0, 126576, 2728, 4752, 64563, 65235, 5234, 0, 128145, 128926, + 10713, 7166, 0, 2622, 7460, 83124, 67101, 126495, 8954, 74760, 65189, + 2632, 42617, 10108, 1011, 5574, 1853, 2709, 65139, 5577, 128966, 0, + 118871, 68641, 8965, 7635, 42177, 5316, 0, 5314, 6451, 5572, 66464, 5312, + 0, 5525, 5330, 5319, 68292, 127311, 65066, 44003, 68437, 983482, 43843, + 120498, 127851, 43918, 74851, 74022, 983424, 64609, 68643, 67410, 128593, + 5721, 74892, 5519, 8632, 66465, 11267, 73961, 92278, 5720, 78778, 1692, + 4219, 4610, 8696, 4305, 0, 4609, 43478, 4614, 541, 983242, 5287, 5309, + 5285, 68389, 5961, 4647, 56, 4216, 10577, 41381, 601, 4613, 120479, + 983348, 9208, 4608, 43966, 41124, 5190, 67628, 66826, 68145, 7086, 0, + 67998, 67620, 93047, 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 67722, + 8992, 42593, 128260, 1782, 67622, 68114, 119939, 0, 68180, 5501, 119952, + 42508, 7442, 43665, 359, 41253, 68392, 6239, 43900, 41256, 74132, 67740, + 0, 71178, 917550, 9346, 69660, 41254, 128047, 43291, 3767, 5737, 0, 4865, + 0, 5740, 917997, 5736, 4368, 64724, 7193, 67097, 128844, 5739, 41024, + 4866, 983880, 73904, 121420, 4869, 120563, 129172, 4223, 128201, 6650, + 126509, 0, 120212, 119872, 4870, 120445, 68661, 6716, 78176, 68667, + 68382, 68676, 127925, 10122, 4864, 66568, 4144, 7937, 83193, 6245, 68652, + 2732, 42734, 745, 68045, 195097, 92195, 4777, 7821, 129136, 68631, 42775, + 194661, 128445, 120679, 3097, 120908, 5966, 121197, 4778, 126469, 10863, + 127506, 4781, 92986, 64407, 128503, 128323, 8577, 71221, 68196, 43285, + 10216, 4782, 983485, 983411, 120757, 68618, 12325, 43056, 8717, 0, 0, + 4776, 73818, 11492, 8700, 129128, 13176, 68363, 10426, 67247, 71091, + 10362, 194706, 1715, 4849, 8242, 9561, 73922, 43278, 42635, 0, 127207, + 5963, 917926, 983483, 0, 4850, 73900, 1607, 466, 4853, 118995, 4854, + 127918, 5164, 73807, 1350, 5124, 64420, 1993, 5362, 8471, 2708, 92471, + 12445, 3785, 234, 3199, 121273, 41268, 4848, 2530, 74941, 2068, 1964, 0, + 73762, 10458, 983417, 8576, 78543, 0, 2704, 4794, 121102, 68211, 8322, + 4797, 5753, 0, 2694, 4792, 0, 2439, 65104, 69804, 983426, 303, 74625, + 68229, 983427, 2437, 78659, 4221, 4844, 92216, 0, 0, 0, 70042, 74095, + 43292, 0, 2441, 10739, 65090, 194622, 70436, 118929, 2451, 2714, 119326, + 0, 43379, 4937, 43376, 753, 5849, 10597, 43089, 11722, 9248, 92555, + 42879, 11725, 917969, 0, 2726, 3107, 73958, 4941, 64937, 119233, 9140, + 1408, 5261, 4607, 194715, 181, 983432, 4942, 9539, 4938, 0, 65201, 5259, + 9369, 64185, 4142, 5257, 983601, 6844, 4964, 5264, 64178, 64177, 12979, + 41411, 64182, 64181, 64180, 64179, 9482, 4873, 41231, 1822, 42526, + 127989, 12758, 3865, 194660, 121129, 10500, 0, 119024, 78028, 92408, + 9830, 43642, 389, 10893, 7521, 127879, 4872, 5463, 128119, 3125, 9567, 0, + 4878, 5459, 4604, 119650, 9557, 5465, 68617, 0, 11494, 126492, 9563, + 10865, 74570, 43279, 64186, 68521, 78714, 64191, 64190, 8898, 64188, + 129153, 41030, 74226, 78713, 74600, 74994, 917834, 0, 78805, 41031, + 78801, 11960, 6745, 3082, 983269, 78539, 73919, 10573, 41744, 7079, 5856, + 67838, 5163, 78809, 128162, 1817, 66724, 78538, 119010, 10564, 7763, + 13077, 41813, 4400, 41745, 64207, 10275, 8925, 10371, 10307, 41814, 4248, + 77979, 0, 4541, 6299, 64204, 64203, 64201, 64200, 64199, 64198, 126471, + 42156, 78688, 0, 64193, 64192, 65223, 9943, 64197, 64196, 64195, 64194, + 12231, 42652, 64174, 64173, 78189, 846, 78186, 9965, 74495, 83492, 83493, + 83494, 2543, 12163, 3108, 9745, 64167, 64166, 64165, 64164, 2110, 92176, + 64169, 64168, 64949, 10972, 10251, 10247, 42768, 715, 2295, 43299, 9453, + 5348, 10943, 66390, 0, 11352, 550, 9910, 125127, 0, 66579, 11551, 128464, + 195080, 9504, 7187, 82957, 10373, 983418, 120375, 10261, 10253, 6404, + 10277, 78183, 11984, 1552, 65222, 6998, 78180, 71429, 3128, 4789, 5067, + 5066, 118849, 4784, 0, 8827, 1146, 5065, 69890, 78192, 68136, 78190, + 43412, 5064, 2431, 0, 9450, 1809, 0, 78200, 78201, 5062, 1264, 64817, + 13254, 11697, 126598, 9785, 64716, 0, 3933, 74559, 4740, 7954, 0, 125023, + 42609, 119855, 74175, 66912, 127016, 0, 121300, 42130, 121046, 5151, + 121346, 83488, 0, 93980, 917802, 7620, 3800, 65122, 83487, 83480, 8355, + 7854, 83483, 954, 64927, 4185, 41045, 127141, 41438, 41439, 68666, 10711, + 4593, 82993, 120584, 983410, 64774, 8053, 10532, 66727, 983414, 0, 78642, + 64759, 1325, 5166, 9888, 127800, 5148, 42834, 0, 78205, 78206, 43787, + 78204, 43913, 3119, 917814, 0, 3060, 64135, 9986, 74996, 77876, 636, + 11698, 83476, 82961, 9916, 11701, 7836, 42741, 64137, 8320, 78640, 8863, + 70201, 119960, 1477, 43289, 68492, 67164, 8618, 983404, 9908, 74972, 0, + 0, 3937, 12312, 0, 983405, 0, 64781, 912, 6349, 4536, 93954, 74532, + 126594, 6244, 92209, 71341, 3935, 120665, 128969, 0, 11950, 5392, 42248, + 65129, 68656, 5397, 128310, 12046, 12599, 67407, 128261, 5395, 0, 5393, + 354, 68615, 77853, 74366, 121404, 0, 42039, 113817, 0, 64142, 626, 0, + 5895, 0, 43910, 5780, 0, 10220, 121337, 43907, 71121, 43297, 70188, 4311, + 4644, 8818, 78158, 128186, 128869, 7145, 3918, 66452, 3797, 1644, 92346, + 9658, 4140, 11385, 65947, 6455, 9030, 813, 119945, 68131, 4146, 119957, + 5360, 2466, 0, 67669, 94020, 6249, 42117, 68828, 92206, 128023, 119255, + 74046, 43745, 4911, 988, 71180, 0, 983470, 43061, 7054, 64147, 983847, + 64920, 68195, 6698, 118933, 92506, 0, 70849, 11981, 12202, 195087, 11032, + 67654, 6093, 11608, 975, 66415, 65843, 170, 0, 67239, 4169, 0, 41859, + 6058, 120401, 13203, 120657, 70507, 125091, 68657, 9818, 10178, 10324, + 42106, 5898, 74540, 4738, 41856, 7062, 127120, 4737, 11779, 4742, 83425, + 68758, 68342, 83420, 9825, 6448, 6715, 127008, 4831, 83418, 83419, 67731, + 5300, 4741, 42108, 127057, 64159, 4736, 64148, 92634, 849, 92191, 78491, + 43288, 0, 66620, 127533, 127331, 65549, 9496, 64598, 118866, 983368, + 7876, 68132, 66280, 3928, 917870, 43378, 10706, 7198, 120890, 4842, + 12053, 128129, 68746, 4841, 0, 4171, 12008, 6251, 3923, 1490, 83411, + 83412, 126512, 40972, 5245, 70794, 10114, 42001, 41888, 4845, 8332, + 40974, 64347, 4840, 9077, 78346, 1747, 917849, 4825, 69240, 121443, + 68655, 0, 983390, 0, 0, 68628, 983349, 9850, 118937, 367, 1472, 917859, + 6687, 1274, 195022, 5905, 12339, 8919, 73953, 10907, 65261, 11023, + 119559, 4830, 9134, 78666, 64126, 43011, 83297, 78669, 64101, 0, 128434, + 4824, 10614, 119659, 126993, 1888, 1960, 7861, 83416, 78524, 41836, + 43012, 6052, 6064, 54, 43009, 12214, 83260, 6211, 120386, 358, 41997, + 41833, 11442, 10758, 65774, 113823, 120384, 64115, 92221, 70018, 983611, 983708, 119053, 0, 12765, 64118, 126998, 12962, 0, 126580, 4017, 12827, - 5241, 120392, 0, 41118, 3924, 0, 11366, 129084, 0, 0, 917846, 41116, - 917844, 917564, 129081, 11363, 12057, 11917, 1567, 74000, 4721, 126641, - 66202, 8957, 4139, 70512, 0, 983074, 0, 0, 12740, 128702, 4722, 6816, - 124974, 12759, 4725, 67099, 4726, 0, 194892, 983622, 70029, 917905, - 92912, 12755, 12762, 4015, 67690, 8052, 476, 0, 0, 128294, 64212, 41020, - 1382, 64209, 64216, 44002, 64214, 1656, 41831, 0, 125121, 41843, 8720, - 3908, 1452, 13111, 983419, 64067, 127328, 8552, 64113, 41845, 3849, - 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 119085, 0, 917610, - 7935, 2420, 0, 1114, 78120, 67585, 70104, 70432, 92168, 120051, 3938, - 120057, 65417, 64717, 120060, 71920, 65415, 66884, 6292, 65303, 7955, - 6452, 4713, 128196, 66249, 917885, 917890, 129073, 65152, 719, 120044, - 78623, 120042, 6713, 4532, 65412, 69822, 10868, 4717, 2349, 5902, 66450, - 4712, 917902, 917899, 65400, 65416, 8155, 4718, 3942, 4714, 9625, 0, - 6383, 194744, 12006, 128565, 194789, 0, 113756, 0, 65414, 6454, 1229, - 126606, 66437, 66025, 78699, 0, 42500, 120508, 4809, 9623, 917874, 78694, - 917880, 917877, 917858, 65405, 68159, 12893, 78617, 5365, 4545, 8901, - 92421, 119555, 4813, 128262, 0, 5925, 4808, 64330, 128400, 65475, 118940, - 68244, 4814, 0, 4810, 0, 0, 64928, 10543, 71249, 3522, 71335, 414, 65404, - 0, 195027, 6456, 73820, 0, 6691, 42193, 66284, 128171, 0, 68337, 0, - 43858, 43832, 118820, 9751, 65407, 128085, 11770, 3919, 120724, 0, 65061, - 0, 917894, 0, 12235, 0, 92701, 127233, 64092, 983470, 64080, 0, 64090, - 983586, 69913, 10162, 10310, 0, 8454, 127888, 42038, 387, 41363, 12737, - 0, 4780, 43368, 0, 64310, 64621, 6732, 78116, 0, 194959, 195024, 92193, - 8896, 0, 375, 6976, 66582, 119005, 983874, 127325, 983434, 119202, - 119203, 12526, 43120, 2315, 0, 1938, 119197, 128452, 4529, 119200, - 119201, 119198, 119199, 69692, 129124, 69698, 13150, 64492, 128974, 0, - 2291, 12902, 0, 42891, 66327, 70502, 917857, 10799, 69690, 2587, 66372, - 128628, 4193, 66823, 4241, 129195, 7998, 119840, 0, 983554, 126640, 2316, - 118821, 0, 0, 0, 64297, 74799, 92442, 74140, 128148, 5373, 128798, 70370, - 3762, 10015, 120672, 119232, 125109, 41590, 0, 70098, 3780, 7485, 5779, - 0, 42037, 0, 3906, 12349, 74793, 8326, 0, 65498, 3763, 6983, 5618, 0, - 3779, 983194, 43613, 70132, 0, 0, 78335, 983892, 0, 280, 74558, 127332, - 67396, 13072, 1894, 0, 67735, 65478, 43310, 7231, 0, 11773, 0, 0, 11144, - 917778, 2551, 0, 6453, 10200, 6235, 983752, 119237, 71877, 128805, 4470, - 11826, 917557, 7780, 5369, 118958, 5249, 983066, 5367, 8756, 127143, - 119183, 5377, 120585, 68143, 1688, 78245, 5218, 69685, 983756, 0, 113794, - 44020, 6808, 41319, 1300, 10650, 41692, 64505, 2290, 71057, 119624, 1465, - 10850, 3943, 0, 41205, 41315, 118961, 119333, 67148, 5352, 113753, 0, - 8839, 41314, 7384, 7785, 41204, 127322, 41209, 69637, 92241, 43607, - 71254, 0, 5420, 3897, 10134, 0, 74417, 4018, 7150, 68127, 0, 0, 0, 0, - 127526, 2561, 68621, 3542, 7148, 12076, 7951, 68152, 118857, 5303, 6276, - 1706, 120750, 78751, 7146, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, - 860, 0, 10506, 983435, 69641, 10753, 10830, 119339, 615, 64490, 7574, - 74082, 77922, 0, 12909, 43016, 64559, 127028, 0, 127029, 67996, 2020, - 983350, 4022, 128783, 0, 77923, 126593, 41691, 0, 917818, 74329, 0, - 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, 7000, 3904, - 983628, 73737, 125105, 118931, 119630, 13123, 10846, 3450, 127360, 7397, - 118807, 0, 42778, 10000, 41088, 449, 0, 3777, 68458, 113725, 9636, 0, - 10738, 69634, 9367, 593, 41085, 3999, 65226, 41713, 12764, 983723, 64409, - 3596, 0, 128090, 9763, 120280, 74609, 12347, 124, 12981, 41127, 2092, - 92687, 0, 127555, 0, 10820, 43987, 0, 128907, 1769, 41715, 2463, 71214, - 983947, 12770, 71222, 1538, 92617, 43124, 194614, 195058, 7795, 120300, - 129053, 4828, 1258, 127802, 2006, 0, 0, 9498, 127032, 127033, 120289, - 120288, 3939, 120290, 8846, 8943, 120287, 120286, 2650, 4491, 1961, - 42602, 11525, 120292, 1959, 120294, 55228, 11774, 41016, 983260, 68675, - 128054, 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, 41019, 127944, - 0, 65292, 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, 70864, 118879, - 55223, 0, 128071, 41826, 8865, 6402, 113827, 13279, 7917, 74755, 917948, - 7733, 0, 4998, 68493, 92332, 41950, 0, 4268, 0, 0, 70061, 4013, 128718, - 10881, 0, 0, 0, 74788, 2014, 2432, 71901, 9765, 0, 0, 917854, 195059, - 78357, 65281, 127825, 10949, 0, 0, 119315, 2015, 0, 0, 71840, 66318, - 43233, 917992, 42517, 0, 0, 0, 12698, 8094, 10135, 65909, 6474, 794, - 43497, 12656, 66335, 119353, 128270, 1665, 71853, 4833, 983053, 71188, - 127367, 0, 189, 12611, 0, 0, 2859, 4838, 0, 4834, 65078, 0, 92991, 4837, - 67413, 770, 92671, 811, 70062, 41042, 92915, 41318, 64427, 73999, 67693, - 78848, 3895, 0, 74341, 3976, 128466, 42859, 10193, 3116, 7747, 78488, 0, - 43496, 0, 0, 43686, 78846, 41877, 0, 2871, 64614, 127010, 999, 0, 6345, - 41876, 2663, 2017, 0, 0, 11040, 10150, 0, 64308, 1522, 597, 4775, 12555, - 12571, 12550, 12583, 12560, 2019, 12556, 12584, 3092, 0, 12562, 4783, - 12566, 12569, 12554, 0, 10812, 78851, 0, 917563, 3078, 1402, 0, 128275, - 0, 125072, 119248, 394, 3088, 0, 92172, 0, 3991, 64391, 129072, 128524, - 424, 66328, 1999, 69659, 73914, 0, 0, 66903, 0, 42231, 2209, 125103, 0, - 0, 41840, 66913, 2377, 1298, 64011, 12572, 11318, 12557, 12559, 12570, - 7479, 1003, 2373, 9446, 7481, 9448, 48, 0, 9480, 481, 0, 9438, 9439, - 9440, 9441, 8465, 9443, 9444, 9445, 9430, 9431, 9432, 9433, 9434, 9435, - 3984, 9437, 0, 92934, 9424, 9425, 9426, 9427, 9428, 9429, 64758, 2362, - 9655, 983709, 2004, 9096, 9782, 70842, 9172, 128545, 19965, 0, 5955, - 67666, 1108, 0, 74773, 0, 128909, 64782, 3926, 92448, 65210, 8798, 0, - 92165, 1392, 0, 983214, 127364, 10606, 8065, 118805, 10353, 10417, 0, + 5241, 120392, 0, 41118, 3924, 983894, 11366, 129084, 0, 0, 83401, 41116, + 83403, 83404, 83397, 11363, 12057, 11917, 1567, 74000, 4721, 83396, + 66202, 8957, 4139, 70512, 0, 983074, 0, 0, 12740, 121470, 4722, 6816, + 124974, 12759, 4725, 67099, 4726, 83467, 83468, 983622, 70029, 83463, + 74913, 12755, 12762, 4015, 67690, 8052, 476, 0, 74893, 128294, 64212, + 41020, 1382, 64209, 64216, 44002, 64214, 1656, 41831, 127553, 125121, + 41843, 8720, 3908, 1452, 13111, 983421, 64067, 92287, 8552, 64113, 41845, + 3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 119085, 83302, + 917610, 7935, 2420, 0, 1114, 78120, 67585, 70104, 70432, 83447, 74920, + 3938, 120057, 65417, 64717, 120060, 71920, 65415, 66884, 6292, 65303, + 7955, 6452, 4713, 128196, 66249, 917885, 194766, 129073, 65152, 719, + 120044, 78623, 120042, 6713, 4532, 65412, 69822, 10868, 4717, 2349, 5902, + 66450, 4712, 75055, 917899, 65400, 65416, 8155, 4718, 3942, 4714, 9625, + 0, 6383, 194744, 12006, 128565, 194789, 0, 113756, 0, 65414, 6454, 1229, + 83457, 66437, 66025, 78699, 83452, 42500, 120508, 4809, 9623, 129137, + 78694, 121173, 128777, 917858, 65405, 68159, 12893, 78617, 5365, 4545, + 8901, 92421, 119555, 4813, 128262, 194729, 5925, 4808, 64330, 128400, + 65475, 83432, 68244, 4814, 83427, 4810, 83429, 83430, 64928, 10543, + 71249, 3522, 71335, 414, 65404, 0, 83442, 6456, 73820, 83445, 6691, + 42193, 66284, 83441, 0, 68337, 0, 43858, 43832, 118820, 9751, 65407, + 128085, 11770, 3919, 120724, 0, 65061, 983945, 917894, 129142, 12235, + 128572, 92701, 121087, 64092, 68739, 64080, 129063, 64090, 983586, 69913, + 10162, 10310, 121210, 8454, 121387, 42038, 387, 41363, 12737, 0, 4780, + 43368, 0, 64310, 64621, 6732, 78116, 0, 121295, 195024, 92193, 8896, 0, + 375, 6976, 66582, 119005, 74997, 127325, 983436, 119202, 119203, 12526, + 43120, 2315, 0, 1938, 119197, 128452, 4529, 119200, 119201, 119198, + 119199, 69692, 129124, 69698, 13150, 64492, 128974, 78761, 2291, 12902, + 0, 42891, 66327, 70502, 917857, 10799, 69690, 2587, 66372, 128628, 4193, + 66823, 4241, 129195, 7998, 83276, 0, 127009, 126640, 2316, 118821, 0, + 983934, 0, 64297, 74799, 92442, 74140, 128148, 5373, 128798, 70370, 3762, + 10015, 120672, 119232, 125109, 41590, 0, 70098, 3780, 7485, 5779, 917898, + 42037, 0, 3906, 12349, 74793, 8326, 127333, 65498, 3763, 6983, 5618, 0, + 3779, 983194, 43613, 70132, 0, 83288, 78335, 83289, 0, 280, 74558, + 121353, 67396, 13072, 1894, 83291, 67735, 65478, 43310, 7231, 0, 11773, + 0, 119165, 11144, 917778, 2551, 0, 6453, 10200, 6235, 983752, 119237, + 71877, 128669, 4470, 11826, 917557, 7780, 5369, 118958, 5249, 983066, + 5367, 8756, 127143, 119183, 5377, 120585, 68143, 1688, 78245, 5218, + 69685, 983756, 0, 113794, 44020, 6808, 41319, 1300, 10650, 41692, 64505, + 2290, 71057, 119624, 1465, 10850, 3943, 0, 41205, 41315, 118961, 119333, + 67148, 5352, 113753, 0, 8839, 41314, 7384, 7785, 41204, 127322, 41209, + 69637, 92241, 43607, 71254, 0, 5420, 3897, 10134, 120381, 74417, 4018, + 7150, 68127, 71425, 0, 121427, 127864, 127526, 2561, 68621, 3542, 7148, + 12076, 7951, 68152, 118857, 5303, 6276, 1706, 120750, 78751, 7146, + 983682, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, + 983437, 69641, 10753, 10830, 119339, 615, 64490, 7574, 74082, 77922, 0, + 12909, 43016, 64559, 127028, 0, 121231, 67996, 2020, 128790, 4022, + 128783, 120701, 77923, 126593, 41691, 0, 75060, 74329, 0, 64622, 9070, 0, + 68411, 3911, 42829, 43122, 1033, 74440, 983813, 7000, 3904, 983628, + 73737, 125105, 118931, 119630, 13123, 10846, 3450, 127360, 7397, 118807, + 917891, 42778, 10000, 41088, 449, 0, 3777, 68458, 113725, 9636, 0, 10738, + 69634, 9367, 593, 41085, 3999, 65226, 41713, 12764, 983723, 64409, 3596, + 129044, 128090, 9763, 120280, 74609, 12347, 124, 12981, 41127, 2092, + 92687, 0, 127555, 194632, 10820, 43987, 0, 128907, 1769, 41715, 2463, + 71214, 83070, 12770, 71222, 1538, 92617, 43124, 194614, 195058, 7795, + 120300, 129053, 4828, 1258, 127802, 2006, 0, 121130, 9498, 127032, + 127033, 120289, 120288, 3939, 120290, 8846, 8943, 120287, 120286, 2650, + 4491, 1961, 42602, 11525, 120292, 1959, 120294, 55228, 11774, 41016, + 983262, 68675, 128054, 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, + 41019, 127944, 0, 65292, 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, + 70864, 118879, 55223, 0, 128071, 41826, 8865, 6402, 113827, 13279, 7917, + 74755, 917948, 7733, 983408, 4998, 68493, 92332, 41950, 0, 4268, 194790, + 195056, 70061, 4013, 128718, 10881, 0, 983163, 0, 74788, 2014, 2432, + 71901, 9765, 195052, 0, 917854, 195059, 78357, 65281, 127825, 10949, 0, + 0, 119315, 2015, 121088, 92765, 71840, 66318, 43233, 917992, 42517, + 68060, 0, 0, 12698, 8094, 10135, 65909, 6474, 794, 43497, 12656, 66335, + 119353, 67279, 1665, 71853, 4833, 917985, 71188, 127367, 121464, 189, + 12611, 0, 983420, 2859, 4838, 983930, 4834, 65078, 0, 92991, 4837, 67413, + 770, 92671, 811, 70062, 41042, 83073, 41318, 64427, 73999, 67693, 78848, + 3895, 92615, 74341, 3976, 128466, 42859, 10193, 3116, 7747, 78488, 0, + 43496, 0, 121015, 43686, 78846, 41877, 983743, 2871, 64614, 68843, 999, + 983844, 6345, 41876, 2663, 2017, 121234, 67824, 11040, 10150, 120678, + 64308, 1522, 597, 4775, 12555, 12571, 12550, 12583, 12560, 2019, 12556, + 12584, 3092, 0, 12562, 4783, 12566, 12569, 12554, 83344, 10812, 78851, 0, + 83342, 3078, 1402, 0, 83348, 0, 125072, 119248, 394, 3088, 83347, 92172, + 917965, 3991, 64391, 83341, 128524, 424, 66328, 1999, 69659, 73914, 0, + 127534, 66903, 128468, 42231, 2209, 125103, 0, 0, 41840, 66913, 2377, + 1298, 64011, 12572, 11318, 12557, 12559, 12570, 7479, 1003, 2373, 9446, + 7481, 9448, 48, 983084, 9480, 481, 0, 9438, 9439, 9440, 9441, 8465, 9443, + 9444, 9445, 9430, 9431, 9432, 9433, 9434, 9435, 3984, 9437, 129135, + 92934, 9424, 9425, 9426, 9427, 9428, 9429, 64758, 2362, 9655, 128050, + 2004, 9096, 9782, 70842, 9172, 83071, 19965, 0, 5955, 67666, 1108, 0, + 74773, 78271, 128909, 64782, 3926, 92448, 65210, 8798, 0, 92165, 1392, + 983817, 120838, 127364, 10606, 8065, 118805, 10353, 10417, 127238, 128739, 64524, 92418, 4019, 0, 125082, 43280, 8219, 68402, 1812, 119963, - 983692, 129144, 126488, 42410, 74448, 119132, 6054, 10697, 3169, 42297, - 42322, 10642, 3909, 9950, 128848, 128139, 983261, 68678, 92917, 983790, + 121067, 128430, 120939, 42410, 74448, 119132, 6054, 10697, 3169, 42297, + 42322, 10642, 3909, 9950, 128848, 128139, 983263, 68678, 74986, 983790, 1049, 43517, 65707, 2304, 41806, 92326, 42336, 3921, 0, 11775, 64760, 11766, 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, 36, 0, - 5153, 41805, 0, 73735, 763, 41808, 64910, 983130, 2009, 0, 127985, 74245, + 5153, 41805, 0, 73735, 763, 41808, 64910, 121389, 2009, 0, 127985, 74245, 9640, 119951, 0, 69895, 8621, 120523, 12852, 3031, 983050, 64361, 129088, 182, 66414, 92716, 92598, 119950, 42613, 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 44013, 4255, 127889, 10102, 41189, 4003, 41026, 68109, 13293, 41192, 69635, 124977, 42251, 0, 42534, 65179, 11287, 6128, - 113811, 11034, 10923, 64423, 0, 65506, 0, 65861, 74083, 66872, 9932, - 43516, 92423, 119955, 119948, 9817, 0, 71234, 0, 12117, 66586, 4183, - 10540, 66250, 9063, 127045, 0, 119954, 113685, 12897, 3792, 2011, 0, - 6065, 43160, 128379, 194715, 8692, 41186, 41816, 41023, 41818, 41187, - 11659, 7922, 12614, 2005, 8523, 78002, 120035, 7513, 1863, 4710, 0, 5956, - 7621, 78006, 92624, 4705, 716, 78004, 0, 4704, 120040, 93024, 42241, 161, - 43977, 74546, 66214, 4706, 74077, 69914, 42672, 4709, 10680, 119065, - 43293, 119944, 983190, 119164, 120328, 92350, 10187, 1700, 119223, 0, 0, - 127202, 4004, 0, 10968, 43296, 983642, 8506, 113744, 194812, 126996, - 1005, 937, 78216, 4734, 2870, 0, 78218, 983109, 7463, 4729, 0, 235, 1384, - 4728, 0, 70494, 92490, 74449, 8109, 43105, 128623, 4730, 447, 13186, - 1513, 4733, 120415, 92548, 0, 42527, 12911, 43427, 1383, 8565, 2469, - 120024, 6690, 6156, 68117, 43439, 7993, 4288, 120416, 2674, 13238, 11922, - 0, 120330, 3510, 13234, 983832, 120407, 5605, 42095, 11364, 92286, 1380, - 65617, 11162, 120261, 13196, 13197, 120309, 67708, 9495, 119346, 127154, - 5959, 67984, 73976, 66275, 43371, 6941, 119349, 13205, 13211, 5801, - 12769, 65905, 41697, 1283, 120302, 4779, 0, 3719, 4006, 983569, 19957, - 71186, 2021, 119332, 43877, 119150, 43028, 65493, 41838, 3875, 5962, - 64341, 92616, 9814, 43457, 5827, 3314, 7787, 71189, 65494, 68153, 126991, - 194697, 120636, 64531, 120692, 194626, 0, 0, 66316, 65467, 5771, 41298, - 983794, 9742, 521, 0, 10800, 92222, 8404, 194625, 483, 7096, 7089, 66323, - 928, 0, 0, 119018, 10599, 11586, 3989, 10971, 43748, 65782, 9841, 8843, - 12145, 67261, 10074, 78548, 93999, 3769, 0, 0, 128703, 983107, 9573, 0, - 65290, 8849, 119254, 65855, 65112, 1796, 71046, 0, 69665, 8164, 41301, - 3502, 0, 7388, 10621, 73838, 78553, 5825, 13007, 68165, 92203, 120456, - 12661, 7608, 10354, 10418, 42411, 2022, 0, 1409, 12195, 4001, 3112, - 10824, 120639, 1390, 70184, 0, 421, 43536, 5846, 120120, 4130, 127775, - 7595, 42588, 7600, 74400, 66035, 195091, 0, 65851, 42607, 128190, 92403, - 3168, 67733, 42134, 11831, 2370, 2846, 92605, 128183, 0, 120132, 0, 1836, - 0, 0, 92558, 3740, 69843, 6290, 65374, 120451, 2390, 3944, 66628, 120434, - 0, 6135, 3118, 74265, 119093, 113690, 77975, 0, 8127, 8975, 64739, 7943, - 124968, 119234, 10618, 2584, 0, 0, 128225, 9998, 120573, 0, 0, 127750, - 43508, 6204, 127044, 0, 8279, 8776, 64954, 4975, 70075, 120130, 4267, - 1631, 42206, 77983, 128015, 195046, 65700, 66386, 0, 64645, 0, 92887, - 126588, 12586, 0, 9242, 120100, 0, 4523, 5842, 10495, 3122, 983797, 7793, - 78275, 9328, 119104, 78393, 12604, 92885, 6615, 2285, 92344, 3986, 44025, - 0, 8912, 64555, 7409, 92247, 983358, 9541, 78276, 113669, 11275, 8540, - 11498, 0, 983357, 41040, 2459, 128629, 13060, 41041, 74413, 983138, 0, - 77931, 68427, 10450, 12551, 41043, 7020, 120353, 3765, 92881, 0, 1606, - 120348, 92299, 3093, 68436, 128040, 983061, 119613, 0, 0, 4312, 74091, - 120337, 120336, 11923, 4023, 120333, 5763, 94015, 4827, 10894, 12810, - 64406, 118785, 4455, 74321, 433, 119620, 66660, 2499, 67167, 67166, - 118837, 11973, 13089, 4293, 120329, 42224, 42758, 12196, 42837, 42226, - 119319, 0, 119126, 5817, 127806, 55277, 3120, 9797, 0, 0, 11086, 10389, - 126485, 0, 4895, 65358, 124941, 4359, 585, 2383, 3509, 70037, 486, 4290, - 5758, 127546, 0, 0, 7004, 113667, 65880, 126514, 119048, 2380, 11380, 0, - 93996, 2376, 78841, 119320, 0, 5197, 70839, 127047, 127048, 2366, 127050, - 127051, 70837, 120045, 0, 128554, 0, 983084, 0, 0, 0, 74188, 71342, - 78455, 983573, 120047, 128575, 120046, 127542, 120049, 0, 1847, 0, 10339, - 983365, 42384, 0, 4227, 74158, 0, 74498, 43032, 125010, 42365, 0, 12671, - 11384, 120059, 74264, 120058, 64797, 983345, 5820, 983344, 120052, - 120065, 128825, 120064, 120053, 42137, 9893, 2754, 12664, 120063, 128900, - 7377, 127867, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 983340, - 68660, 0, 10853, 926, 983369, 74184, 983368, 120055, 194993, 43175, 0, + 113811, 11034, 10923, 64423, 125058, 65506, 983912, 65861, 74083, 66872, + 9932, 43516, 83063, 83065, 83064, 9817, 0, 71234, 0, 12117, 66586, 4183, + 10540, 66250, 9063, 127045, 128547, 119954, 113685, 12897, 3792, 2011, + 121418, 6065, 43160, 128379, 120595, 8692, 41186, 41816, 41023, 41818, + 41187, 11659, 7922, 12614, 2005, 8523, 78002, 120035, 7513, 1863, 4710, + 0, 5956, 7621, 78005, 92624, 4705, 716, 74918, 0, 4704, 120040, 93024, + 42241, 161, 43977, 74546, 66214, 4706, 74077, 69914, 42672, 4709, 10680, + 119065, 43293, 68771, 983190, 119164, 120328, 83319, 10187, 1700, 119223, + 83315, 0, 74980, 4004, 917595, 10968, 43296, 128331, 8506, 113744, + 194812, 126996, 1005, 937, 78216, 4734, 2870, 121350, 78218, 983109, + 7463, 4729, 0, 235, 1384, 4728, 74887, 70494, 92490, 74449, 8109, 43105, + 128623, 4730, 447, 13186, 1513, 4733, 120415, 92548, 0, 42527, 12911, + 43427, 1383, 8565, 2469, 120024, 6690, 6156, 68117, 43439, 7993, 4288, + 120416, 2674, 13238, 11922, 0, 92529, 3510, 13234, 983832, 120407, 5605, + 42095, 11364, 92286, 1380, 65617, 11162, 120261, 13196, 13197, 120309, + 67708, 9495, 119346, 127154, 5959, 67984, 73976, 66275, 43371, 6941, + 119349, 13205, 13211, 5801, 12769, 65905, 41697, 1283, 82952, 4779, + 983922, 3719, 4006, 983569, 19957, 71186, 2021, 119332, 43877, 83140, + 43028, 65493, 41838, 3875, 5962, 64341, 92616, 9814, 43457, 5827, 3314, + 7787, 71189, 65494, 68153, 126991, 194697, 120636, 64531, 120692, 194626, + 128753, 983958, 66316, 65467, 5771, 41298, 983794, 9742, 521, 0, 10800, + 92222, 8404, 194625, 483, 7096, 7089, 66323, 928, 0, 0, 119018, 10599, + 11586, 3989, 10971, 43748, 65782, 9841, 8843, 12145, 67261, 10074, 78548, + 93999, 3769, 0, 0, 128703, 983107, 9573, 917998, 65290, 8849, 119254, + 65855, 65112, 1796, 71046, 0, 69665, 8164, 41301, 3502, 83135, 7388, + 10621, 73838, 78553, 5825, 13007, 68165, 92203, 92915, 12661, 7608, + 10354, 10418, 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, + 1390, 70184, 194704, 421, 43536, 5846, 120120, 4130, 127775, 7595, 42588, + 7600, 74400, 66035, 195091, 0, 65851, 42607, 124955, 92403, 3168, 67733, + 42134, 11831, 2370, 2846, 92605, 128084, 0, 120132, 127745, 1836, 0, + 121207, 92558, 3740, 69843, 6290, 65374, 120451, 2390, 3944, 66628, + 119006, 0, 6135, 3118, 74265, 119093, 83310, 77975, 0, 8127, 8975, 64739, + 7943, 124968, 119234, 10618, 2584, 0, 0, 128225, 9998, 120573, 83306, 0, + 127750, 43508, 6204, 127044, 121374, 8279, 8776, 64954, 4975, 70075, + 120130, 4267, 1631, 42206, 77983, 128015, 195046, 65700, 66386, 0, 64645, + 0, 92887, 126588, 12586, 0, 9242, 120100, 0, 4523, 5842, 10495, 3122, + 983797, 7793, 78275, 9328, 119104, 78393, 12604, 92885, 6615, 2285, + 92344, 3986, 44025, 0, 8912, 64555, 7409, 92247, 983360, 9541, 78276, + 113669, 11275, 8540, 11498, 120868, 983359, 41040, 2459, 127302, 13060, + 41041, 74413, 983138, 0, 77931, 68427, 10450, 12551, 41043, 7020, 120353, + 3765, 92881, 917612, 1606, 120348, 92299, 3093, 68436, 128040, 983061, + 119613, 0, 0, 4312, 74091, 120337, 74983, 11923, 4023, 68399, 5763, + 94015, 4827, 10894, 12810, 64406, 118785, 4455, 74321, 433, 119620, + 66660, 2499, 67167, 67166, 118837, 11973, 13089, 4293, 120329, 42224, + 42758, 12196, 42837, 42226, 119319, 127992, 119126, 5817, 127806, 55277, + 3120, 9797, 0, 0, 11086, 10389, 126485, 128784, 4895, 65358, 124941, + 4359, 585, 2383, 3509, 70037, 486, 4290, 5758, 127546, 121160, 983106, + 7004, 113667, 65880, 126514, 119048, 2380, 11380, 983863, 93996, 2376, + 78841, 83402, 0, 5197, 70839, 127047, 127048, 2366, 127050, 119604, + 70837, 120045, 0, 128554, 0, 917846, 0, 0, 0, 74188, 71342, 78455, 75048, + 113675, 74900, 120046, 127542, 120049, 983366, 1847, 120978, 10339, + 983367, 42384, 121379, 4227, 74158, 0, 74498, 43032, 121124, 42365, 0, + 12671, 11384, 120059, 74264, 120058, 64797, 983347, 5820, 983346, 120052, + 120065, 128825, 120064, 120053, 42137, 9893, 2754, 12664, 120063, 121286, + 7377, 120051, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 121132, + 68660, 0, 10853, 926, 983371, 74184, 120915, 120055, 119301, 43175, 0, 43037, 41798, 41035, 11583, 127769, 41801, 119088, 119605, 520, 4200, - 12699, 8331, 0, 3091, 41034, 66298, 983681, 8360, 983443, 78044, 321, - 4229, 64543, 128470, 65563, 0, 917974, 2861, 43793, 10095, 194735, 9195, - 92386, 1861, 0, 73733, 0, 0, 43041, 0, 43794, 128530, 3859, 12181, 41660, - 8209, 70793, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, 113699, - 743, 4414, 120766, 0, 42632, 917973, 65161, 73896, 128589, 0, 1405, - 119063, 43220, 43341, 0, 19919, 0, 64532, 65367, 43710, 11199, 194907, - 3513, 128854, 70341, 43342, 119064, 65529, 65364, 128197, 0, 6485, 1397, - 0, 41986, 92678, 0, 194784, 74097, 0, 7471, 12079, 67997, 6843, 43287, - 92317, 0, 67406, 983707, 0, 71914, 1099, 10490, 0, 10501, 65181, 74463, - 128952, 464, 41624, 65283, 67663, 78222, 1346, 0, 65679, 64573, 64897, - 423, 1818, 65144, 113748, 8272, 127812, 19911, 4218, 3087, 64960, 127234, - 43564, 0, 0, 9584, 10465, 983902, 74359, 12626, 9106, 0, 42642, 71235, - 64750, 9390, 0, 41797, 0, 0, 265, 41795, 64666, 74628, 43530, 2752, - 127365, 128459, 983493, 59, 983671, 983593, 11149, 78074, 77873, 41810, - 0, 7010, 0, 41809, 41495, 119364, 5877, 42252, 42213, 8009, 3305, 43033, - 511, 92700, 43848, 13127, 120067, 983946, 74397, 120235, 917977, 65915, - 1400, 41812, 10685, 194870, 2103, 10387, 4453, 43276, 917783, 11169, 0, - 6481, 41213, 0, 0, 129133, 129050, 41983, 74198, 6617, 9116, 119654, - 92995, 462, 68110, 10493, 917976, 8129, 92994, 128365, 74471, 6644, - 11658, 0, 128245, 3452, 11906, 9581, 1385, 3098, 0, 119013, 43340, 11123, - 41033, 6493, 42626, 0, 129051, 11426, 77887, 1681, 118789, 1204, 3755, - 64661, 7235, 10170, 3966, 8911, 0, 41841, 43338, 0, 0, 5726, 64915, - 42175, 983913, 0, 41497, 65044, 120109, 2851, 43017, 983589, 0, 4373, - 78058, 0, 9587, 1789, 6671, 128840, 3100, 0, 65360, 0, 92365, 917789, - 64922, 0, 8190, 12083, 0, 983930, 6506, 64312, 74374, 2368, 0, 4419, - 983847, 119125, 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, - 0, 8990, 2848, 92981, 128223, 73942, 249, 0, 0, 0, 120658, 119324, - 128712, 8883, 119860, 728, 11173, 995, 0, 0, 64826, 124931, 917798, - 128348, 0, 19945, 8091, 558, 0, 12273, 194814, 67714, 12112, 67272, - 67265, 67273, 67274, 12335, 120104, 68019, 3443, 3129, 67267, 2102, - 65445, 78258, 64891, 0, 7725, 65108, 11120, 9205, 8624, 69246, 12446, - 43295, 128519, 41894, 0, 6277, 41672, 41893, 10010, 127381, 3540, 128649, - 835, 71340, 69816, 119854, 74408, 0, 67108, 5426, 4258, 983231, 0, 5424, - 128127, 8283, 127978, 5434, 125004, 0, 19917, 11408, 0, 11947, 128330, - 1404, 3095, 11432, 128307, 3464, 6486, 4819, 128233, 0, 570, 8095, 3672, - 119864, 1498, 67866, 0, 128539, 431, 125062, 0, 128182, 128096, 68167, - 983663, 13096, 128643, 0, 43408, 9516, 128538, 5268, 42230, 42220, 0, - 4450, 120511, 11547, 43417, 128542, 356, 3477, 227, 10488, 68203, 382, - 11418, 0, 5878, 0, 0, 0, 0, 6484, 2541, 66039, 113777, 78718, 92723, - 3549, 195067, 9110, 119665, 2743, 0, 43290, 128585, 9097, 0, 43015, 8782, - 0, 776, 2524, 42707, 8573, 0, 126494, 0, 71102, 42694, 64944, 8952, 3856, - 118818, 125111, 5872, 6495, 129125, 0, 0, 92543, 67173, 67172, 12849, - 3953, 1897, 93071, 65094, 11994, 4339, 74556, 92654, 67843, 0, 0, 119087, - 68473, 74104, 5228, 119835, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, - 917553, 1162, 917847, 2671, 128567, 0, 92632, 92631, 118865, 4553, 73811, - 0, 195005, 118928, 0, 19921, 74331, 11424, 195006, 4567, 41891, 0, - 983788, 55249, 4820, 65239, 194662, 0, 194665, 43042, 119212, 1377, - 12869, 4897, 42821, 9250, 917558, 4438, 64385, 0, 1753, 11331, 6147, - 194941, 43282, 8833, 69998, 0, 6504, 78408, 126979, 10719, 128469, 1898, - 1413, 42443, 0, 802, 12141, 0, 194671, 6648, 10671, 2528, 0, 64789, 9169, - 838, 70372, 120697, 844, 5014, 66297, 256, 0, 9990, 0, 42739, 917851, - 7542, 65464, 9726, 0, 6489, 10048, 74326, 78719, 66573, 0, 78724, 78712, - 11761, 194655, 118874, 41094, 0, 129172, 194893, 78403, 92689, 6196, - 6945, 93969, 127990, 67095, 120491, 11816, 126567, 5733, 2930, 78406, 0, - 41098, 92771, 41093, 0, 66626, 588, 9760, 129112, 194717, 1238, 200, - 983207, 1660, 73916, 0, 67141, 74362, 0, 92485, 124930, 0, 983706, 3394, - 194894, 120668, 0, 69996, 127358, 66219, 72425, 43284, 127236, 7817, - 1841, 11055, 66835, 194979, 74607, 1669, 10776, 74534, 7701, 194980, 0, - 194995, 1732, 4030, 0, 3963, 66611, 127530, 41768, 6491, 127518, 65324, - 914, 65323, 8071, 3538, 0, 2287, 65328, 92441, 74367, 7614, 0, 11819, - 71908, 12009, 12399, 0, 67852, 65537, 0, 10841, 43430, 5301, 0, 92618, - 5734, 8960, 0, 70123, 65317, 77880, 0, 5876, 70374, 12304, 0, 0, 65315, - 92670, 128511, 71862, 0, 0, 119621, 11114, 71909, 12447, 64486, 127374, - 126562, 983129, 0, 0, 983802, 42767, 10915, 0, 12007, 43695, 120520, - 11975, 194878, 0, 92604, 2555, 8629, 128640, 41133, 41872, 43706, 4496, - 194879, 128065, 120241, 0, 0, 0, 983553, 64730, 70041, 66714, 68222, 0, - 70076, 65596, 92306, 11416, 4280, 67655, 8765, 12784, 7792, 1393, 78191, - 11157, 74386, 0, 8233, 12820, 0, 6683, 194876, 3442, 12144, 2841, 12543, - 0, 1473, 42820, 64329, 127832, 0, 68642, 6488, 357, 1048, 41100, 72417, - 41104, 94003, 3406, 1054, 71320, 1040, 65450, 983383, 4434, 1069, 0, - 118862, 65737, 194634, 128705, 0, 124955, 9693, 41943, 68305, 41931, - 41759, 12757, 4353, 983351, 1059, 9790, 8995, 119974, 917770, 65937, - 78572, 41758, 10646, 0, 118833, 92372, 70424, 74830, 78569, 12743, - 983689, 6480, 917761, 41779, 42580, 66601, 12207, 77895, 6335, 66602, - 11312, 64807, 92962, 69989, 41767, 119629, 983764, 43020, 128271, 3955, - 74254, 120632, 983754, 917861, 70187, 69975, 9770, 9246, 12230, 125047, - 0, 78580, 10448, 41783, 41786, 127093, 12797, 2755, 64571, 78578, 194927, - 4857, 983577, 4428, 12794, 73755, 128061, 78574, 0, 11116, 43842, 5747, - 78825, 70471, 7978, 41092, 74571, 0, 11924, 43812, 42144, 65015, 0, 563, - 0, 983691, 12798, 11271, 57, 92717, 983239, 917860, 119043, 0, 94051, - 43137, 694, 0, 9876, 0, 119168, 0, 70392, 64537, 0, 277, 74385, 7229, - 12761, 0, 74466, 13025, 64811, 8757, 78824, 78188, 1574, 7381, 0, 2525, - 4852, 5749, 68465, 13027, 42824, 120574, 1039, 7151, 10155, 5745, 188, - 41858, 11592, 129156, 69725, 9055, 41853, 4858, 917780, 0, 436, 4771, 0, - 2786, 93028, 4856, 8051, 92500, 119609, 71327, 9644, 0, 125009, 128873, - 194916, 120732, 66710, 118834, 983359, 73906, 67409, 127114, 0, 10234, - 5843, 11939, 70346, 42157, 0, 3157, 194918, 68393, 0, 3504, 119178, 0, - 10822, 5149, 66029, 10226, 65142, 128025, 3594, 42424, 124993, 40, 12657, - 983665, 0, 386, 0, 8834, 0, 12815, 43574, 128407, 73907, 0, 70113, 7220, - 11839, 124984, 74316, 0, 65322, 4304, 74503, 8160, 74314, 194753, 0, 0, - 128526, 1348, 92349, 78597, 126539, 13303, 70406, 92392, 128474, 7599, - 1278, 43616, 13269, 127805, 127110, 74387, 78179, 78598, 74492, 6097, - 7568, 8780, 4982, 127464, 74501, 194763, 78592, 194762, 2672, 3735, - 127470, 13138, 42266, 9484, 10724, 41202, 71364, 128370, 43742, 128373, - 9487, 119959, 92913, 3842, 71911, 78668, 12442, 6193, 9791, 119344, 0, - 42516, 7228, 7559, 74803, 78468, 7873, 11399, 119219, 194691, 70006, - 194690, 127537, 3604, 120683, 119188, 128877, 78540, 78541, 42507, 1962, - 43305, 78476, 42505, 11660, 0, 2072, 92312, 6995, 74173, 5437, 74174, - 10669, 8702, 7964, 92352, 983776, 199, 194843, 4105, 194845, 194699, - 194847, 194710, 119875, 13148, 7560, 78479, 9226, 78478, 195070, 6472, - 65814, 71919, 0, 4724, 128491, 195041, 9191, 0, 64432, 983817, 113680, - 119190, 10196, 7886, 0, 6585, 0, 6680, 195042, 0, 71872, 6679, 74412, - 92251, 194866, 74421, 11382, 128254, 43862, 78591, 113733, 194833, - 194832, 6681, 127482, 12693, 194836, 42727, 78196, 128252, 78195, 65442, - 119610, 69733, 9989, 43248, 66248, 194816, 0, 11321, 128845, 120809, - 194819, 5297, 7042, 13284, 6112, 7968, 93010, 73927, 92444, 127336, - 65746, 118796, 69889, 74389, 128696, 4342, 42839, 128979, 1677, 0, 0, - 126590, 917855, 11091, 11011, 2719, 0, 0, 119595, 10160, 0, 0, 7585, - 65169, 2052, 4308, 92174, 43000, 7505, 543, 64916, 64736, 118835, 0, - 64655, 0, 118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 127170, 0, - 983625, 92550, 0, 12994, 92728, 10828, 74378, 6228, 4307, 3482, 128527, - 0, 72389, 0, 506, 74573, 41194, 65735, 2055, 43255, 41195, 0, 8169, - 983680, 8841, 0, 516, 93974, 2063, 119051, 34, 128850, 120186, 11504, - 1612, 74333, 120182, 11827, 67165, 12001, 120178, 10242, 64564, 120179, - 67986, 6584, 7749, 11037, 128743, 1758, 119074, 10667, 10560, 120197, - 92593, 1935, 11517, 120193, 120196, 120195, 1931, 120189, 74839, 120191, - 1217, 64702, 12643, 825, 127838, 194905, 12294, 92428, 78834, 9138, - 78831, 78833, 12631, 71871, 11080, 74554, 64000, 5591, 1239, 127199, - 11313, 194803, 3403, 0, 120271, 64364, 92269, 127904, 72431, 8998, 12988, - 119983, 9152, 983849, 0, 126484, 67589, 41850, 64290, 3433, 92393, 12615, + 12699, 8331, 70118, 3091, 41034, 66298, 70293, 8360, 983445, 78044, 321, + 4229, 64543, 128470, 65563, 194873, 917974, 2861, 43793, 10095, 121428, + 9195, 92386, 1861, 0, 73733, 917780, 68839, 43041, 0, 43794, 128530, + 3859, 12181, 41660, 8209, 70793, 73867, 12973, 75014, 74757, 127514, + 41658, 128376, 121235, 5760, 113699, 743, 4414, 120766, 0, 42632, 127236, + 65161, 73896, 128589, 0, 1405, 119063, 43220, 43341, 0, 19919, 70278, + 64532, 65367, 43710, 11199, 125077, 3513, 71115, 70341, 43342, 119064, + 65529, 65364, 83208, 83170, 6485, 1397, 194781, 41986, 92678, 83204, + 83212, 74097, 83213, 7471, 12079, 67997, 6843, 43287, 92317, 0, 67406, + 120239, 194678, 71914, 1099, 10490, 83201, 10501, 65181, 74463, 128952, + 464, 41624, 65283, 67663, 78222, 1346, 194609, 65679, 64573, 64897, 423, + 1818, 65144, 82963, 8272, 127812, 19911, 4218, 3087, 64960, 121447, + 43564, 0, 983182, 9584, 10465, 983902, 74359, 12626, 9106, 0, 42642, + 71235, 64750, 9390, 0, 41797, 194730, 128333, 265, 41795, 64666, 74628, + 43530, 2752, 127365, 128459, 126482, 59, 983671, 121410, 11149, 78074, + 77873, 41810, 83162, 7010, 0, 41809, 41495, 119364, 5877, 42252, 42213, + 8009, 3305, 43033, 511, 92700, 43848, 13127, 120067, 983946, 74397, + 120235, 128641, 65915, 1400, 41812, 10685, 75017, 2103, 10387, 4453, + 43276, 917783, 11169, 128939, 6481, 41213, 0, 0, 129133, 119929, 41983, + 74198, 6617, 9116, 119654, 92995, 462, 68110, 10493, 121449, 8129, 92994, + 128365, 74471, 6644, 11658, 0, 128245, 3452, 11906, 9581, 1385, 3098, 0, + 119013, 43340, 11123, 41033, 6493, 42626, 0, 129051, 11426, 77887, 1681, + 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, 41841, 43338, 0, + 119323, 5726, 64915, 42175, 983913, 0, 41497, 65044, 120109, 2851, 43017, + 983589, 120896, 4373, 78058, 0, 9587, 1789, 6671, 128840, 3100, 0, 65360, + 917589, 92365, 128202, 64922, 0, 8190, 12083, 0, 83141, 6506, 64312, + 74374, 2368, 983187, 4419, 121259, 119125, 3439, 1825, 1192, 120106, + 8891, 3080, 120228, 2347, 5430, 120107, 8990, 2848, 92981, 121372, 73942, + 249, 0, 0, 0, 120658, 119324, 128712, 8883, 119860, 728, 11173, 995, 0, + 121047, 64826, 124931, 917798, 128348, 0, 19945, 8091, 558, 0, 12273, + 194814, 67714, 12112, 67272, 67265, 67273, 67274, 12335, 120104, 68019, + 3443, 3129, 67267, 2102, 65445, 78258, 64891, 0, 7725, 65108, 11120, + 9205, 8624, 69246, 12446, 43295, 128519, 41894, 0, 6277, 41672, 41893, + 10010, 127381, 3540, 121450, 835, 71340, 69816, 119854, 74408, 0, 67108, + 5426, 4258, 83188, 120858, 5424, 92306, 8283, 127978, 5434, 83196, + 129027, 19917, 11408, 0, 11947, 128330, 1404, 3095, 11432, 121122, 3464, + 6486, 4819, 128233, 129123, 570, 8095, 3672, 119864, 1498, 67866, 0, + 128539, 431, 67820, 0, 128182, 128096, 68167, 983663, 13096, 128643, + 121018, 43408, 9516, 128538, 5268, 42230, 42220, 0, 4450, 120511, 11547, + 43417, 128542, 356, 3477, 227, 10488, 68203, 382, 11418, 0, 5878, 983799, + 0, 0, 0, 6484, 2541, 66039, 113777, 78157, 92723, 3549, 195067, 9110, + 119665, 2743, 0, 43290, 128585, 9097, 195026, 43015, 8782, 0, 776, 2524, + 42707, 8573, 120903, 126494, 0, 71102, 42694, 64944, 8952, 3856, 118818, + 125111, 5872, 6495, 129125, 0, 0, 92543, 67173, 67172, 12849, 3953, 1897, + 93071, 65094, 11994, 4339, 74556, 92654, 67843, 0, 0, 119087, 68473, + 74104, 5228, 119835, 7868, 43184, 0, 120955, 73986, 43438, 0, 43022, + 917553, 1162, 74995, 2671, 128567, 127198, 92632, 92631, 118865, 4553, + 73811, 983573, 195005, 118928, 68085, 19921, 73821, 11424, 195002, 4567, + 41891, 0, 983788, 55249, 4820, 65239, 194662, 0, 194665, 43042, 119212, + 1377, 12869, 4897, 42821, 9250, 70272, 4438, 64385, 0, 1753, 11331, 6147, + 194941, 43282, 8833, 69998, 0, 6504, 78408, 121166, 10719, 70275, 1898, + 1413, 42443, 0, 802, 12141, 121138, 83097, 6648, 10671, 2528, 0, 64789, + 9169, 838, 68819, 68807, 844, 5014, 66297, 256, 68818, 9990, 128398, + 42739, 917851, 7542, 65464, 9726, 83224, 6489, 10048, 74326, 78719, + 66573, 0, 78724, 78712, 11761, 121314, 83226, 41094, 0, 77958, 194893, + 78403, 92689, 6196, 6945, 93969, 120942, 67095, 120491, 11816, 68846, + 5733, 2930, 70274, 127179, 41098, 92771, 41093, 68834, 66626, 588, 9760, + 125099, 194717, 1238, 200, 983207, 1660, 73916, 0, 67141, 74362, 0, + 92485, 124930, 0, 74999, 3394, 194894, 120668, 0, 69996, 127358, 66219, + 72425, 43284, 68072, 7817, 1841, 11055, 66835, 194979, 74607, 1669, + 10776, 74534, 7701, 194980, 983450, 74992, 1732, 4030, 983442, 3963, + 65335, 127530, 41768, 6491, 65333, 65324, 914, 65323, 8071, 3538, 983845, + 2287, 65328, 92441, 74367, 7614, 0, 11819, 71908, 12009, 12399, 121217, + 67852, 65537, 0, 10841, 43430, 5301, 0, 92618, 5734, 8960, 0, 70123, + 65317, 77880, 0, 5876, 70374, 12304, 0, 0, 65315, 92670, 128511, 71862, + 0, 127957, 119621, 11114, 71909, 12447, 64486, 121236, 126562, 983129, 0, + 121393, 983802, 42767, 10915, 983174, 12007, 43695, 68033, 11975, 194878, + 0, 92604, 2555, 8629, 128640, 41133, 41872, 43706, 4496, 194879, 83108, + 120241, 128164, 0, 0, 983553, 64730, 70041, 66714, 68222, 0, 70076, + 65596, 67837, 11416, 4280, 67655, 8765, 12784, 7792, 1393, 78191, 11157, + 74386, 127274, 8233, 12820, 983730, 6683, 125112, 3442, 12144, 2841, + 12543, 0, 1473, 42820, 64329, 120880, 67243, 68642, 6488, 357, 1048, + 41100, 72417, 41104, 94003, 3406, 1054, 71320, 1040, 65450, 983385, 4434, + 1069, 194784, 118862, 65737, 121202, 128705, 0, 83211, 9693, 41943, + 68305, 41931, 41759, 12757, 4353, 983353, 1059, 9790, 8995, 119974, + 917770, 65937, 78572, 41758, 10646, 121159, 118833, 92372, 70424, 74830, + 78569, 12743, 983689, 6480, 917761, 41779, 42580, 66601, 12207, 77895, + 6335, 43919, 11312, 64807, 92962, 69989, 41767, 119629, 983764, 43020, + 74974, 3955, 74254, 120632, 983754, 917861, 70187, 69975, 9770, 9246, + 12230, 125047, 129105, 78580, 10448, 41783, 41786, 127093, 12797, 2755, + 64571, 78578, 194927, 4857, 983577, 4428, 12794, 73755, 128061, 78574, 0, + 11116, 43842, 5747, 78825, 70471, 7978, 41092, 74571, 0, 11924, 43812, + 42144, 65015, 0, 563, 0, 129412, 12798, 11271, 57, 92717, 83495, 917860, + 119043, 917618, 94051, 43137, 694, 983719, 9876, 0, 119168, 0, 70392, + 64537, 127914, 277, 74385, 7229, 12761, 983145, 74466, 13025, 64811, + 8757, 78824, 78188, 1574, 7381, 0, 2525, 4852, 5749, 68465, 13027, 42824, + 120574, 1039, 7151, 10155, 5745, 188, 41858, 11592, 129156, 69725, 9055, + 41853, 4858, 75000, 917990, 436, 4771, 917936, 2786, 93028, 4856, 8051, + 92500, 119609, 71327, 9644, 71133, 125009, 128873, 194916, 120732, 66710, + 68084, 983361, 73906, 67409, 127114, 917916, 10234, 5843, 11939, 70346, + 42157, 0, 3157, 194659, 68393, 75035, 3504, 70422, 0, 10822, 5149, 66029, + 10226, 65142, 128025, 3594, 42424, 124993, 40, 12657, 983665, 0, 386, + 121467, 8834, 120974, 12815, 43574, 121430, 73907, 127792, 70113, 7220, + 11839, 121143, 74316, 194752, 65322, 4304, 74503, 8160, 74314, 194753, + 121276, 0, 128526, 1348, 92349, 78597, 121139, 13303, 70406, 92392, + 128474, 7599, 1278, 43616, 13269, 127805, 127110, 74387, 78179, 78598, + 74492, 6097, 7568, 8780, 4982, 127464, 74501, 194763, 78592, 68745, 2672, + 3735, 127470, 13138, 42266, 9484, 10724, 41202, 71364, 128370, 43742, + 128373, 9487, 119959, 68785, 3842, 71911, 78668, 12442, 6193, 9791, + 119344, 0, 42516, 7228, 7559, 74803, 66721, 7873, 11399, 119219, 194691, + 70006, 194690, 127537, 3604, 120683, 119188, 128877, 78540, 78541, 42507, + 1962, 43305, 78476, 42505, 11660, 121021, 2072, 92312, 6995, 74173, 5437, + 74174, 10669, 8702, 7964, 92352, 983776, 199, 68075, 4105, 194845, + 127942, 75006, 194710, 67818, 13148, 7560, 78479, 9226, 78478, 195070, + 6472, 65814, 71919, 121218, 4724, 128491, 195041, 9191, 194645, 64432, + 120270, 82987, 119190, 10196, 7886, 0, 6585, 0, 6680, 195042, 983425, + 71872, 6679, 74412, 92251, 194866, 74421, 11382, 128254, 43862, 78591, + 113733, 194679, 194832, 6681, 127482, 12693, 194836, 42727, 78196, + 128252, 43874, 65442, 68047, 69733, 9989, 43248, 66248, 194816, 0, 11321, + 128845, 120809, 194819, 5297, 7042, 13284, 6112, 7968, 93010, 73927, + 92444, 127336, 65746, 118796, 69889, 74389, 128696, 4342, 42839, 121339, + 1677, 917592, 82989, 126590, 83415, 11091, 11011, 2719, 0, 0, 119595, + 10160, 0, 129150, 7585, 65169, 2052, 4308, 83414, 43000, 7505, 543, + 64916, 64736, 118835, 0, 64655, 983053, 118922, 2064, 0, 43158, 7902, + 983231, 65265, 194639, 121080, 127170, 127041, 128006, 92550, 983186, + 12994, 92728, 10828, 74378, 6228, 4307, 3482, 128527, 83231, 72389, + 83079, 506, 74573, 41194, 65735, 2055, 43255, 41195, 0, 8169, 121407, + 8841, 983747, 516, 93974, 2063, 119051, 34, 128850, 120186, 11504, 1612, + 74333, 120182, 11827, 67165, 12001, 120178, 10242, 64564, 120179, 67986, + 6584, 7749, 11037, 128743, 1758, 119074, 10667, 10560, 120197, 92593, + 1935, 11517, 120193, 120196, 83082, 1931, 120189, 74839, 120191, 1217, + 64702, 12643, 825, 127838, 194905, 12294, 92428, 78834, 9138, 78831, + 78833, 12631, 71871, 11080, 74554, 64000, 5591, 1239, 127199, 11313, + 194803, 3403, 983655, 120271, 64364, 92269, 121282, 72431, 8998, 12988, + 119983, 9152, 92161, 0, 126484, 67589, 41850, 64290, 3433, 92393, 12615, 1594, 42192, 6914, 66392, 0, 119569, 74565, 41353, 67602, 67611, 4337, 0, 127296, 918, 65035, 41351, 7681, 194900, 42577, 41393, 12668, 72395, - 2477, 127285, 0, 127301, 0, 67604, 67683, 127235, 573, 127282, 120543, - 11417, 194886, 119814, 119309, 67599, 0, 72410, 67607, 11482, 0, 3981, - 3357, 0, 42223, 4207, 1288, 78503, 78839, 67728, 78837, 11589, 42195, - 74477, 119997, 127263, 64602, 67618, 92539, 0, 42788, 68416, 64480, - 194875, 8423, 3348, 448, 66907, 9717, 119311, 0, 997, 0, 0, 92577, 0, - 11440, 11379, 42000, 13139, 42221, 65013, 126999, 127760, 72390, 0, - 119228, 12035, 0, 2818, 0, 74411, 73793, 0, 4172, 71252, 119992, 8373, - 10873, 12197, 125074, 195014, 92265, 69706, 128540, 6834, 127251, 128110, - 194865, 126982, 74563, 64828, 11419, 194868, 766, 1257, 194598, 118845, - 11381, 3265, 66617, 3274, 126629, 126523, 94042, 983950, 74522, 41989, 0, - 0, 113769, 3263, 0, 65672, 69243, 3270, 64539, 11489, 0, 0, 0, 0, 9505, - 65518, 128498, 756, 194605, 0, 0, 0, 7261, 92547, 186, 0, 119156, 5770, - 13179, 65830, 12612, 12949, 64856, 12800, 983901, 74203, 64718, 11507, 0, - 92434, 74626, 0, 11578, 0, 119296, 0, 0, 125101, 0, 70083, 9254, 66877, - 1794, 68310, 64521, 5624, 120220, 120221, 119958, 120223, 3617, 66636, - 64886, 94061, 68659, 120213, 120214, 1872, 66508, 120467, 41079, 10748, - 5502, 119330, 4452, 128088, 983771, 92526, 4511, 0, 983877, 64678, 11425, - 0, 43245, 1231, 92390, 69903, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, - 9546, 0, 0, 70421, 120200, 65205, 120202, 64063, 9878, 74780, 119626, - 78202, 64058, 8799, 42131, 128662, 64062, 1028, 64060, 64059, 837, 10567, - 72384, 43103, 0, 120754, 11427, 2902, 64043, 64042, 43749, 10756, 64047, - 42606, 64045, 64044, 43979, 10076, 64040, 43060, 194942, 1034, 3392, - 127771, 43091, 64033, 64032, 42735, 43498, 64037, 64036, 64035, 4291, - 129157, 64015, 64014, 64681, 194930, 127142, 78145, 71898, 43090, 0, - 3476, 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, 64517, 78153, - 2538, 64009, 204, 0, 4802, 4111, 8239, 9098, 4805, 64001, 64057, 7885, - 7247, 64054, 983266, 0, 4767, 9343, 64049, 64048, 120034, 1133, 64053, - 64052, 43453, 64050, 41340, 118975, 194835, 10005, 12329, 41333, 0, 8489, - 1942, 0, 194834, 42520, 65510, 125044, 68291, 10760, 64023, 64022, 64021, - 6582, 43670, 127798, 64025, 9167, 42151, 78244, 983232, 2026, 64019, - 64018, 64017, 64016, 12768, 0, 7582, 78252, 78248, 77914, 78246, 78247, - 0, 77915, 78766, 6788, 13094, 77920, 7532, 41414, 78520, 3179, 78518, - 64769, 78514, 78517, 11461, 74454, 10751, 9051, 120720, 6708, 10535, - 983627, 68218, 55274, 2008, 64031, 64030, 294, 41874, 0, 64790, 65929, 0, - 129063, 0, 0, 64028, 8146, 64026, 41788, 194844, 0, 4351, 6343, 43247, - 119888, 70153, 119886, 119891, 72387, 119889, 11433, 119895, 119896, 0, - 7801, 65578, 194839, 12915, 43968, 3297, 9699, 127957, 1135, 0, 128807, - 128525, 1995, 6722, 983925, 0, 2552, 41546, 60, 68394, 8649, 41549, - 78496, 72386, 0, 6682, 983917, 78679, 43833, 41547, 983630, 2013, 128291, - 78530, 78532, 78528, 78529, 12832, 78493, 8081, 8362, 3537, 119908, 9137, - 7155, 8999, 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, - 120175, 537, 92976, 4179, 65119, 1998, 120746, 1842, 0, 92674, 9628, - 68446, 12081, 9826, 64502, 1767, 0, 0, 120001, 120201, 983646, 124975, - 127991, 3059, 44024, 120204, 43491, 92693, 0, 0, 92452, 4100, 920, 1811, - 1355, 43189, 0, 3592, 10078, 0, 78162, 119558, 8592, 65870, 66417, 74504, - 10742, 72400, 42918, 1994, 9281, 3296, 12865, 1997, 1895, + 2477, 127285, 121249, 118880, 0, 67604, 67683, 127235, 573, 127282, + 120543, 11417, 92661, 119814, 119309, 67599, 0, 72410, 67607, 11482, 0, + 3981, 3357, 0, 42223, 4207, 1288, 78503, 78839, 67728, 77907, 11589, + 42195, 74477, 119997, 127178, 64602, 67618, 92539, 121366, 42788, 68416, + 64480, 194875, 8423, 3348, 448, 66907, 9717, 119311, 0, 997, 0, 0, 92577, + 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, 127760, 72390, 0, + 119228, 12035, 0, 2818, 0, 74411, 73793, 983278, 4172, 71252, 119992, + 8373, 10873, 12197, 125074, 195014, 92265, 69706, 128540, 6834, 74347, + 74958, 129033, 126982, 74563, 64828, 11419, 194868, 766, 1257, 194598, + 118845, 11381, 3265, 66617, 3274, 126629, 83254, 71861, 983950, 74522, + 41989, 121317, 0, 113769, 3263, 917922, 65672, 69243, 3270, 64539, 11489, + 917911, 0, 0, 71127, 9505, 65518, 128498, 756, 194605, 0, 0, 194621, + 7261, 92547, 186, 0, 119156, 5770, 13179, 65830, 12612, 12949, 64856, + 12800, 983901, 74203, 64718, 11507, 78673, 92434, 74626, 113760, 11578, + 983837, 119296, 120970, 121127, 125101, 0, 70083, 9254, 66877, 1794, + 68310, 64521, 5624, 120220, 120221, 119958, 120223, 3617, 66636, 64886, + 94061, 68659, 120213, 120214, 1872, 66508, 120467, 41079, 10748, 5502, + 119330, 4452, 128088, 983771, 92526, 4511, 120958, 983877, 64678, 11425, + 0, 43245, 1231, 68861, 69903, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, + 9546, 0, 128332, 70421, 120200, 65205, 120202, 64063, 9878, 74780, + 119626, 78202, 64058, 8799, 42131, 128662, 64062, 1028, 64060, 64059, + 837, 10567, 72384, 43103, 0, 120754, 11427, 2902, 64043, 64042, 43749, + 10756, 64047, 42606, 64045, 64044, 43979, 10076, 64040, 43060, 194942, + 1034, 3392, 83336, 43091, 64033, 64032, 42735, 43498, 64037, 64036, + 64035, 4291, 129157, 64015, 64014, 64681, 83394, 83395, 78145, 71898, + 43090, 83391, 3476, 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, + 64517, 78153, 2538, 64009, 204, 0, 4802, 4111, 8239, 9098, 4805, 64001, + 64057, 7885, 7247, 64054, 983268, 0, 4767, 9343, 64049, 64048, 120034, + 1133, 64053, 64052, 43453, 64050, 41340, 118975, 83261, 10005, 12329, + 41333, 83259, 8489, 1942, 917921, 194834, 42520, 65510, 125044, 68291, + 10760, 64023, 64022, 64021, 6582, 43670, 127798, 64025, 9167, 42151, + 78244, 983232, 2026, 64019, 64018, 64017, 64016, 12768, 121361, 7582, + 78252, 78248, 77914, 78246, 78247, 120791, 77915, 78766, 6788, 13094, + 77920, 7532, 41414, 78520, 3179, 78518, 64769, 78514, 78517, 11461, + 74454, 10751, 9051, 120720, 6708, 10535, 118955, 68218, 55274, 2008, + 64031, 64030, 294, 41874, 83383, 64790, 65929, 83376, 83337, 83379, + 83380, 64028, 8146, 64026, 41788, 194844, 0, 4351, 6343, 43247, 119888, + 70153, 119886, 119891, 72387, 119889, 11433, 119895, 119896, 194655, + 7801, 65578, 83361, 12915, 43968, 3297, 9699, 83357, 1135, 83350, 83351, + 83352, 1995, 6722, 983925, 128815, 2552, 41546, 60, 68394, 8649, 41549, + 78496, 72386, 83371, 6682, 83365, 78679, 43833, 41547, 983630, 2013, + 83362, 78530, 78532, 78528, 78529, 12832, 78493, 8081, 8362, 3537, + 119908, 9137, 7155, 8999, 917901, 78533, 3466, 0, 121466, 1996, 0, 3453, + 6282, 0, 2002, 2000, 120175, 537, 92976, 4179, 65119, 1998, 120746, 1842, + 0, 92674, 9628, 68446, 12081, 9826, 64502, 1767, 0, 983248, 120001, + 120201, 983646, 124975, 127952, 3059, 44024, 120204, 43491, 92693, 0, + 121472, 92452, 4100, 920, 1811, 1355, 43189, 0, 3592, 10078, 0, 78162, + 119558, 8592, 65870, 66417, 74504, 10742, 72400, 42918, 1994, 9281, 3296, + 12865, 1997, 1895, }; #define code_magic 47 @@ -21783,7 +23265,7 @@ static unsigned int code_hash[] = { #define code_poly 32771 static const unsigned int aliases_start = 0xf0000; -static const unsigned int aliases_end = 0xf01c9; +static const unsigned int aliases_end = 0xf01cb; static const unsigned int name_aliases[] = { 0x0000, 0x0000, @@ -21978,6 +23460,8 @@ static const unsigned int name_aliases[] = { 0x2118, 0x2448, 0x2449, + 0x2B7A, + 0x2B7C, 0xA015, 0xFE18, 0xFE00, -- cgit v1.2.1 From 1f0eea05f78b032be72ee5b5787421acef61588d Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Fri, 3 Jul 2015 01:04:23 -0400 Subject: Issue #19235: Add new RecursionError exception. Patch by Georg Brandl. --- Modules/_pickle.c | 2 +- Modules/_sre.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 44f840d199..3ad9a97641 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -3622,7 +3622,7 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj) >>> pickle.dumps(1+2j) Traceback (most recent call last): ... - RuntimeError: maximum recursion depth exceeded + RecursionError: maximum recursion depth exceeded Removing the complex class from copyreg.dispatch_table made the __reduce_ex__() method emit another complex object: diff --git a/Modules/_sre.c b/Modules/_sre.c index 4016a4533e..4f47393aed 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -500,8 +500,9 @@ pattern_error(Py_ssize_t status) { switch (status) { case SRE_ERROR_RECURSION_LIMIT: + /* This error code seems to be unused. */ PyErr_SetString( - PyExc_RuntimeError, + PyExc_RecursionError, "maximum recursion limit exceeded" ); break; -- cgit v1.2.1 From ce73d6f6dbf5297c4de76f9abac6528407fc9969 Mon Sep 17 00:00:00 2001 From: Charles-Fran?ois Natali Date: Mon, 13 Jul 2015 21:01:39 +0100 Subject: Issue #23530: Improve os.cpu_count() description. Patch by Julian Taylor. --- Modules/posixmodule.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index ec8c526c0a..23d74a3e0e 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -5760,7 +5760,7 @@ os.sched_getaffinity pid: pid_t / -Return the affinity of the process identified by pid. +Return the affinity of the process identified by pid (or the current process if zero). The affinity is returned as a set of CPU identifiers. [clinic start generated code]*/ @@ -11201,7 +11201,9 @@ get_terminal_size(PyObject *self, PyObject *args) /*[clinic input] os.cpu_count -Return the number of CPUs in the system; return None if indeterminable. +Return the number of CPUs in the system; return None if indeterminable. This +number is not equivalent to the number of CPUs the current process can use. +The number of usable CPUs can be obtained with ``len(os.sched_getaffinity(0))`` [clinic start generated code]*/ static PyObject * -- cgit v1.2.1 From 53d008442c97a89435ed5136d59975490c134973 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 20 Jul 2015 00:25:50 -0400 Subject: Divisions-by-two for a positive Py_ssize_t compile more cleanly with >>1 than /2. --- Modules/_collectionsmodule.c | 2 +- Modules/_heapqmodule.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index c1fd8b9d9b..47db46f86b 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -788,7 +788,7 @@ deque_reverse(dequeobject *deque, PyObject *unused) block *rightblock = deque->rightblock; Py_ssize_t leftindex = deque->leftindex; Py_ssize_t rightindex = deque->rightindex; - Py_ssize_t n = Py_SIZE(deque) / 2; + Py_ssize_t n = Py_SIZE(deque) >> 1; Py_ssize_t i; PyObject *tmp; diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index c343862b8c..28604afee9 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -66,7 +66,7 @@ siftup(PyListObject *heap, Py_ssize_t pos) /* Bubble up the smaller child until hitting a leaf. */ arr = _PyList_ITEMS(heap); - limit = endpos / 2; /* smallest pos that has no child */ + limit = endpos >> 1; /* smallest pos that has no child */ while (pos < limit) { /* Set childpos to index of smaller child. */ childpos = 2*pos + 1; /* leftmost child position */ @@ -347,7 +347,7 @@ heapify_internal(PyObject *heap, int siftup_func(PyListObject *, Py_ssize_t)) n is odd = 2*j+1, this is (2*j+1-1)/2 = j so j-1 is the largest, and that's again n//2-1. */ - for (i = n/2 - 1 ; i >= 0 ; i--) + for (i = (n >> 1) - 1 ; i >= 0 ; i--) if (siftup_func((PyListObject *)heap, i)) return NULL; Py_RETURN_NONE; @@ -420,7 +420,7 @@ siftup_max(PyListObject *heap, Py_ssize_t pos) /* Bubble up the smaller child until hitting a leaf. */ arr = _PyList_ITEMS(heap); - limit = endpos / 2; /* smallest pos that has no child */ + limit = endpos >> 1; /* smallest pos that has no child */ while (pos < limit) { /* Set childpos to index of smaller child. */ childpos = 2*pos + 1; /* leftmost child position */ -- cgit v1.2.1 From 427fd439e587587317a1602d871e36fe24d7b312 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 24 Jul 2015 00:43:44 -0400 Subject: Issue #24300: Minor refactoring. --- Modules/nismodule.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/nismodule.c b/Modules/nismodule.c index 64eb5dbc3d..b6a855c577 100644 --- a/Modules/nismodule.c +++ b/Modules/nismodule.c @@ -76,11 +76,7 @@ nis_mapname (char *map, int *pfix) *pfix = 0; for (i=0; aliases[i].alias != 0L; i++) { - if (!strcmp (aliases[i].alias, map)) { - *pfix = aliases[i].fix; - return aliases[i].map; - } - if (!strcmp (aliases[i].map, map)) { + if (!strcmp (aliases[i].alias, map) || !strcmp (aliases[i].map, map)) { *pfix = aliases[i].fix; return aliases[i].map; } -- cgit v1.2.1 From 051fed7c732f80a4c3aa5aea46d1e652b41029b3 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 25 Jul 2015 12:10:21 +0300 Subject: Issue #14373: Fixed segmentation fault when gc.collect() is called during constructing lru_cache (C implementation). --- Modules/_functoolsmodule.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 95b5b13fbe..dc64cfee2d 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -899,7 +899,7 @@ bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds static PyObject * lru_cache_new(PyTypeObject *type, PyObject *args, PyObject *kw) { - PyObject *func, *maxsize_O, *cache_info_type; + PyObject *func, *maxsize_O, *cache_info_type, *cachedict; int typed; lru_cache_object *obj; Py_ssize_t maxsize; @@ -937,15 +937,16 @@ lru_cache_new(PyTypeObject *type, PyObject *args, PyObject *kw) return NULL; } - obj = (lru_cache_object *)type->tp_alloc(type, 0); - if (obj == NULL) + if (!(cachedict = PyDict_New())) return NULL; - if (!(obj->cache = PyDict_New())) { - Py_DECREF(obj); + obj = (lru_cache_object *)type->tp_alloc(type, 0); + if (obj == NULL) { + Py_DECREF(cachedict); return NULL; } + obj->cache = cachedict; obj->root.prev = &obj->root; obj->root.next = &obj->root; obj->maxsize = maxsize; -- cgit v1.2.1 From e24755b4428db490e064d9c4ea570284e7812b5f Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Sun, 26 Jul 2015 06:43:13 +1200 Subject: - Issue #2091: error correctly on open() with mode 'U' and '+' open() accepted a 'U' mode string containing '+', but 'U' can only be used with 'r'. Patch from Jeff Balogh and John O'Connor. --- Modules/_io/_iomodule.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index 528bcd4ac1..1c2d3a0c6c 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -248,8 +248,8 @@ _io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, _Py_IDENTIFIER(close); if (!PyUnicode_Check(file) && - !PyBytes_Check(file) && - !PyNumber_Check(file)) { + !PyBytes_Check(file) && + !PyNumber_Check(file)) { PyErr_Format(PyExc_TypeError, "invalid file: %R", file); return NULL; } @@ -307,9 +307,9 @@ _io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, /* Parameters validation */ if (universal) { - if (writing || appending) { + if (creating || writing || appending || updating) { PyErr_SetString(PyExc_ValueError, - "can't use U and writing mode at once"); + "mode U cannot be combined with x', 'w', 'a', or '+'"); return NULL; } if (PyErr_WarnEx(PyExc_DeprecationWarning, @@ -437,10 +437,10 @@ _io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, /* wraps into a TextIOWrapper */ wrapper = PyObject_CallFunction((PyObject *)&PyTextIOWrapper_Type, - "Osssi", - buffer, - encoding, errors, newline, - line_buffering); + "Osssi", + buffer, + encoding, errors, newline, + line_buffering); if (wrapper == NULL) goto error; result = wrapper; -- cgit v1.2.1 From 5fcbb51e45e069ee4bd8ec6b9afffc0275c2a537 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 27 Jul 2015 23:37:11 +0200 Subject: Issue #24732, #23834: Fix sock_accept_impl() on Windows accept() returns INVALID_SOCKET on error, it's not necessary a negative number. --- Modules/socketmodule.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 7610b0c05d..ee249070c3 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2211,7 +2211,12 @@ sock_accept_impl(PySocketSockObject *s, void *data) #else ctx->result = accept(s->sock_fd, SAS2SA(ctx->addrbuf), ctx->addrlen); #endif + +#ifdef MS_WINDOWS + return (ctx->result != INVALID_SOCKET); +#else return (ctx->result >= 0); +#endif } /* s._accept() -> (fd, address) */ -- cgit v1.2.1 From 7c7a311550f92af68a0e71aeb9a58c2356ef5937 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 31 Jul 2015 12:03:20 -0700 Subject: Fix minor typo in a comment --- Modules/_collectionsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index d2c044855e..749cf6b31d 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1047,7 +1047,7 @@ deque_clear(dequeobject *deque) static int valid_index(Py_ssize_t i, Py_ssize_t limit) { - /* The cast to size_t let us use just a single comparison + /* The cast to size_t lets us use just a single comparison to check whether i is in the range: 0 <= i < limit */ return (size_t) i < (size_t) limit; } -- cgit v1.2.1 From 0b741f6989074c723db6b09339345d8c77d69f1d Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Wed, 5 Aug 2015 17:54:10 -0400 Subject: Issue #24791: Fix grammar regression for call syntax: 'g(*a or b)'. --- Modules/parsermodule.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 2a16dbacc6..8023558fd1 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -2859,8 +2859,8 @@ validate_arglist(node *tree) /* argument: ( test [comp_for] | * test '=' test | - * '**' expr | - * star_expr ) + * '**' test | + * '*' test ) */ static int validate_argument(node *tree) @@ -2873,8 +2873,11 @@ validate_argument(node *tree) if (TYPE(CHILD(tree, 0)) == DOUBLESTAR) { res = validate_test(CHILD(tree, 1)); } + else if (TYPE(CHILD(tree, 0)) == STAR) { + res = validate_test(CHILD(tree, 1)); + } else if (nch == 1) { - res = validate_test_or_star_expr(CHILD(tree, 0)); + res = validate_test(CHILD(tree, 0)); } else if (nch == 2) { res = (validate_test(CHILD(tree, 0)) -- cgit v1.2.1 From 74d51b2fd497adde6ca33d5da4d2bce5d9d337ff Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 9 Aug 2015 12:23:08 +0300 Subject: Issue #24824: Signatures of codecs.encode() and codecs.decode() now are compatible with pydoc. --- Modules/_codecsmodule.c | 12 ++++++------ Modules/clinic/_codecsmodule.c.h | 12 +++++------- 2 files changed, 11 insertions(+), 13 deletions(-) (limited to 'Modules') diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index cf67c462e7..7575773f45 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -91,12 +91,12 @@ _codecs_lookup_impl(PyModuleDef *module, const char *encoding) /*[clinic input] _codecs.encode obj: object - encoding: str(c_default="NULL") = sys.getdefaultencoding() + encoding: str(c_default="NULL") = "utf-8" errors: str(c_default="NULL") = "strict" Encodes obj using the codec registered for encoding. -encoding defaults to the default encoding. errors may be given to set a +The default encoding is 'utf-8'. errors may be given to set a different error handling scheme. Default is 'strict' meaning that encoding errors raise a ValueError. Other possible values are 'ignore', 'replace' and 'backslashreplace' as well as any other name registered with @@ -106,7 +106,7 @@ codecs.register_error that can handle ValueErrors. static PyObject * _codecs_encode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, const char *errors) -/*[clinic end generated code: output=5c073f62249c8d7c input=2440d769df020a0e]*/ +/*[clinic end generated code: output=5c073f62249c8d7c input=cd5b685040ff61f0]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); @@ -118,12 +118,12 @@ _codecs_encode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, /*[clinic input] _codecs.decode obj: object - encoding: str(c_default="NULL") = sys.getdefaultencoding() + encoding: str(c_default="NULL") = "utf-8" errors: str(c_default="NULL") = "strict" Decodes obj using the codec registered for encoding. -encoding defaults to the default encoding. errors may be given to set a +Default encoding is 'utf-8'. errors may be given to set a different error handling scheme. Default is 'strict' meaning that encoding errors raise a ValueError. Other possible values are 'ignore', 'replace' and 'backslashreplace' as well as any other name registered with @@ -133,7 +133,7 @@ codecs.register_error that can handle ValueErrors. static PyObject * _codecs_decode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, const char *errors) -/*[clinic end generated code: output=c81cbf6189a7f878 input=a351e5f5baad1544]*/ +/*[clinic end generated code: output=c81cbf6189a7f878 input=7702c0cc2fa1add6]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index 2b97b187ce..e94be1176e 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -42,13 +42,12 @@ exit: } PyDoc_STRVAR(_codecs_encode__doc__, -"encode($module, /, obj, encoding=sys.getdefaultencoding(),\n" -" errors=\'strict\')\n" +"encode($module, /, obj, encoding=\'utf-8\', errors=\'strict\')\n" "--\n" "\n" "Encodes obj using the codec registered for encoding.\n" "\n" -"encoding defaults to the default encoding. errors may be given to set a\n" +"The default encoding is \'utf-8\'. errors may be given to set a\n" "different error handling scheme. Default is \'strict\' meaning that encoding\n" "errors raise a ValueError. Other possible values are \'ignore\', \'replace\'\n" "and \'backslashreplace\' as well as any other name registered with\n" @@ -80,13 +79,12 @@ exit: } PyDoc_STRVAR(_codecs_decode__doc__, -"decode($module, /, obj, encoding=sys.getdefaultencoding(),\n" -" errors=\'strict\')\n" +"decode($module, /, obj, encoding=\'utf-8\', errors=\'strict\')\n" "--\n" "\n" "Decodes obj using the codec registered for encoding.\n" "\n" -"encoding defaults to the default encoding. errors may be given to set a\n" +"Default encoding is \'utf-8\'. errors may be given to set a\n" "different error handling scheme. Default is \'strict\' meaning that encoding\n" "errors raise a ValueError. Other possible values are \'ignore\', \'replace\'\n" "and \'backslashreplace\' as well as any other name registered with\n" @@ -1395,4 +1393,4 @@ exit: #ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF #define _CODECS_CODE_PAGE_ENCODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ -/*[clinic end generated code: output=713a4081788da1bc input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9c9967048027c1c7 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 42a1530cfaffbcec3d54de612c0c4e3af5471528 Mon Sep 17 00:00:00 2001 From: Charles-Fran?ois Natali Date: Thu, 13 Aug 2015 20:37:08 +0100 Subject: Issue #23530: fix clinic comment. --- Modules/clinic/posixmodule.c.h | 10 +++++++--- Modules/posixmodule.c | 12 +++++++----- 2 files changed, 14 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 98eeae4861..a7045a87bc 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -2116,7 +2116,7 @@ PyDoc_STRVAR(os_sched_getaffinity__doc__, "sched_getaffinity($module, pid, /)\n" "--\n" "\n" -"Return the affinity of the process identified by pid.\n" +"Return the affinity of the process identified by pid (or the current process if zero).\n" "\n" "The affinity is returned as a set of CPU identifiers."); @@ -5178,7 +5178,11 @@ PyDoc_STRVAR(os_cpu_count__doc__, "cpu_count($module, /)\n" "--\n" "\n" -"Return the number of CPUs in the system; return None if indeterminable."); +"Return the number of CPUs in the system; return None if indeterminable.\n" +"\n" +"This number is not equivalent to the number of CPUs the current process can\n" +"use. The number of usable CPUs can be obtained with\n" +"``len(os.sched_getaffinity(0))``"); #define OS_CPU_COUNT_METHODDEF \ {"cpu_count", (PyCFunction)os_cpu_count, METH_NOARGS, os_cpu_count__doc__}, @@ -5788,4 +5792,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=f3f92b2d2e2c3fe3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=35b50461dbecd65d input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 23d74a3e0e..4d25ed1322 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -5767,7 +5767,7 @@ The affinity is returned as a set of CPU identifiers. static PyObject * os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=b431a8f310e369e7 input=eaf161936874b8a1]*/ +/*[clinic end generated code: output=b431a8f310e369e7 input=983ce7cb4a565980]*/ { int cpu, ncpus, count; size_t setsize; @@ -11201,14 +11201,16 @@ get_terminal_size(PyObject *self, PyObject *args) /*[clinic input] os.cpu_count -Return the number of CPUs in the system; return None if indeterminable. This -number is not equivalent to the number of CPUs the current process can use. -The number of usable CPUs can be obtained with ``len(os.sched_getaffinity(0))`` +Return the number of CPUs in the system; return None if indeterminable. + +This number is not equivalent to the number of CPUs the current process can +use. The number of usable CPUs can be obtained with +``len(os.sched_getaffinity(0))`` [clinic start generated code]*/ static PyObject * os_cpu_count_impl(PyModuleDef *module) -/*[clinic end generated code: output=c59ee7f6bce832b8 input=d55e2f8f3823a628]*/ +/*[clinic end generated code: output=c59ee7f6bce832b8 input=e7c8f4ba6dbbadd3]*/ { int ncpu = 0; #ifdef MS_WINDOWS -- cgit v1.2.1 From 96d83ebaebe56f838877540c46eda133c6b7b350 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 14 Aug 2015 02:07:41 -0700 Subject: Minor cleanup. --- Modules/_collectionsmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 749cf6b31d..35034a50aa 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -2167,13 +2167,13 @@ _count_elements(PyObject *self, PyObject *args) oldval = _PyDict_GetItem_KnownHash(mapping, key, hash); if (oldval == NULL) { - if (_PyDict_SetItem_KnownHash(mapping, key, one, hash) == -1) + if (_PyDict_SetItem_KnownHash(mapping, key, one, hash) < 0) goto done; } else { newval = PyNumber_Add(oldval, one); if (newval == NULL) goto done; - if (_PyDict_SetItem_KnownHash(mapping, key, newval, hash) == -1) + if (_PyDict_SetItem_KnownHash(mapping, key, newval, hash) < 0) goto done; Py_CLEAR(newval); } @@ -2199,7 +2199,7 @@ _count_elements(PyObject *self, PyObject *args) Py_DECREF(oldval); if (newval == NULL) break; - if (PyObject_SetItem(mapping, key, newval) == -1) + if (PyObject_SetItem(mapping, key, newval) < 0) break; Py_CLEAR(newval); Py_DECREF(key); -- cgit v1.2.1 From a5fbe4e93afe9842928b16606ee04a8bbec53c12 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 14 Aug 2015 14:10:49 -0700 Subject: Neaten-up vertical alignment of comments --- Modules/itertoolsmodule.c | 124 +++++++++++++++++++++++----------------------- 1 file changed, 62 insertions(+), 62 deletions(-) (limited to 'Modules') diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index ac31e2f9c9..349da0ff97 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -178,7 +178,7 @@ static PyMethodDef groupby_methods[] = { reduce_doc}, {"__setstate__", (PyCFunction)groupby_setstate, METH_O, setstate_doc}, - {NULL, NULL} /* sentinel */ + {NULL, NULL} /* sentinel */ }; PyDoc_STRVAR(groupby_doc, @@ -364,7 +364,7 @@ static PyTypeObject _grouper_type = { 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ 0, /* tp_doc */ - (traverseproc)_grouper_traverse,/* tp_traverse */ + (traverseproc)_grouper_traverse, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ @@ -582,7 +582,7 @@ static PyMethodDef teedataobject_methods[] = { PyDoc_STRVAR(teedataobject_doc, "Data container common to multiple tee objects."); static PyTypeObject teedataobject_type = { - PyVarObject_HEAD_INIT(0, 0) /* Must fill in type value later */ + PyVarObject_HEAD_INIT(0, 0) /* Must fill in type value later */ "itertools._tee_dataobject", /* tp_name */ sizeof(teedataobject), /* tp_basicsize */ 0, /* tp_itemsize */ @@ -602,7 +602,7 @@ static PyTypeObject teedataobject_type = { PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ teedataobject_doc, /* tp_doc */ (traverseproc)teedataobject_traverse, /* tp_traverse */ (inquiry)teedataobject_clear, /* tp_clear */ @@ -791,7 +791,7 @@ static PyTypeObject tee_type = { (traverseproc)tee_traverse, /* tp_traverse */ (inquiry)tee_clear, /* tp_clear */ 0, /* tp_richcompare */ - offsetof(teeobject, weakreflist), /* tp_weaklistoffset */ + offsetof(teeobject, weakreflist), /* tp_weaklistoffset */ PyObject_SelfIter, /* tp_iter */ (iternextfunc)tee_next, /* tp_iternext */ tee_methods, /* tp_methods */ @@ -1189,13 +1189,13 @@ static PyTypeObject dropwhile_type = { Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, /* tp_flags */ dropwhile_doc, /* tp_doc */ - (traverseproc)dropwhile_traverse, /* tp_traverse */ + (traverseproc)dropwhile_traverse, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ PyObject_SelfIter, /* tp_iter */ (iternextfunc)dropwhile_next, /* tp_iternext */ - dropwhile_methods, /* tp_methods */ + dropwhile_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ @@ -1353,7 +1353,7 @@ static PyTypeObject takewhile_type = { Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, /* tp_flags */ takewhile_doc, /* tp_doc */ - (traverseproc)takewhile_traverse, /* tp_traverse */ + (traverseproc)takewhile_traverse, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ @@ -2287,7 +2287,7 @@ product((0,1), (0,1), (0,1)) --> (0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) ..."); static PyTypeObject product_type = { PyVarObject_HEAD_INIT(NULL, 0) "itertools.product", /* tp_name */ - sizeof(productobject), /* tp_basicsize */ + sizeof(productobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ (destructor)product_dealloc, /* tp_dealloc */ @@ -2334,8 +2334,8 @@ static PyTypeObject product_type = { typedef struct { PyObject_HEAD PyObject *pool; /* input converted to a tuple */ - Py_ssize_t *indices; /* one index per result element */ - PyObject *result; /* most recently returned result tuple */ + Py_ssize_t *indices; /* one index per result element */ + PyObject *result; /* most recently returned result tuple */ Py_ssize_t r; /* size of result tuple */ int stopped; /* set to 1 when the combinations iterator is exhausted */ } combinationsobject; @@ -2675,8 +2675,8 @@ static PyTypeObject combinations_type = { typedef struct { PyObject_HEAD PyObject *pool; /* input converted to a tuple */ - Py_ssize_t *indices; /* one index per result element */ - PyObject *result; /* most recently returned result tuple */ + Py_ssize_t *indices; /* one index per result element */ + PyObject *result; /* most recently returned result tuple */ Py_ssize_t r; /* size of result tuple */ int stopped; /* set to 1 when the cwr iterator is exhausted */ } cwrobject; @@ -3326,11 +3326,11 @@ permutations(range(3), 2) --> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)"); static PyTypeObject permutations_type = { PyVarObject_HEAD_INIT(NULL, 0) - "itertools.permutations", /* tp_name */ + "itertools.permutations", /* tp_name */ sizeof(permutationsobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ - (destructor)permutations_dealloc, /* tp_dealloc */ + (destructor)permutations_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ @@ -3347,13 +3347,13 @@ static PyTypeObject permutations_type = { 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, /* tp_flags */ - permutations_doc, /* tp_doc */ - (traverseproc)permutations_traverse, /* tp_traverse */ + permutations_doc, /* tp_doc */ + (traverseproc)permutations_traverse,/* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ PyObject_SelfIter, /* tp_iter */ - (iternextfunc)permutations_next, /* tp_iternext */ + (iternextfunc)permutations_next, /* tp_iternext */ permuations_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ @@ -3364,7 +3364,7 @@ static PyTypeObject permutations_type = { 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ - permutations_new, /* tp_new */ + permutations_new, /* tp_new */ PyObject_GC_Del, /* tp_free */ }; @@ -3664,44 +3664,44 @@ static PyTypeObject compress_type = { PyVarObject_HEAD_INIT(NULL, 0) "itertools.compress", /* tp_name */ sizeof(compressobject), /* tp_basicsize */ - 0, /* tp_itemsize */ + 0, /* tp_itemsize */ /* methods */ (destructor)compress_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | - Py_TPFLAGS_BASETYPE, /* tp_flags */ - compress_doc, /* tp_doc */ - (traverseproc)compress_traverse, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - PyObject_SelfIter, /* tp_iter */ + Py_TPFLAGS_BASETYPE, /* tp_flags */ + compress_doc, /* tp_doc */ + (traverseproc)compress_traverse, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ (iternextfunc)compress_next, /* tp_iternext */ - compress_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 */ - compress_new, /* tp_new */ - PyObject_GC_Del, /* tp_free */ + compress_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 */ + compress_new, /* tp_new */ + PyObject_GC_Del, /* tp_free */ }; @@ -3824,7 +3824,7 @@ static PyTypeObject filterfalse_type = { sizeof(filterfalseobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ - (destructor)filterfalse_dealloc, /* tp_dealloc */ + (destructor)filterfalse_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ @@ -3842,7 +3842,7 @@ static PyTypeObject filterfalse_type = { Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, /* tp_flags */ filterfalse_doc, /* tp_doc */ - (traverseproc)filterfalse_traverse, /* tp_traverse */ + (traverseproc)filterfalse_traverse, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ @@ -4081,15 +4081,15 @@ static PyTypeObject count_type = { 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | - Py_TPFLAGS_BASETYPE, /* tp_flags */ + Py_TPFLAGS_BASETYPE, /* tp_flags */ count_doc, /* tp_doc */ - (traverseproc)count_traverse, /* tp_traverse */ + (traverseproc)count_traverse, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ PyObject_SelfIter, /* tp_iter */ (iternextfunc)count_next, /* tp_iternext */ - count_methods, /* tp_methods */ + count_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ @@ -4488,7 +4488,7 @@ static PyTypeObject ziplongest_type = { sizeof(ziplongestobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ - (destructor)zip_longest_dealloc, /* tp_dealloc */ + (destructor)zip_longest_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ @@ -4505,8 +4505,8 @@ static PyTypeObject ziplongest_type = { 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, /* tp_flags */ - zip_longest_doc, /* tp_doc */ - (traverseproc)zip_longest_traverse, /* tp_traverse */ + zip_longest_doc, /* tp_doc */ + (traverseproc)zip_longest_traverse, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ @@ -4522,7 +4522,7 @@ static PyTypeObject ziplongest_type = { 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ - zip_longest_new, /* tp_new */ + zip_longest_new, /* tp_new */ PyObject_GC_Del, /* tp_free */ }; -- cgit v1.2.1 From 91ea76bd466bf8853d3b357649b11f7dd046b68b Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 15 Aug 2015 13:51:59 -0700 Subject: Fix crash in itertools.cycle.__setstate__() caused by lack of type checking. Will backport after the 3.6 release is done. --- Modules/itertoolsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 349da0ff97..2cca6b3550 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -973,7 +973,7 @@ cycle_setstate(cycleobject *lz, PyObject *state) { PyObject *saved=NULL; int firstpass; - if (!PyArg_ParseTuple(state, "Oi", &saved, &firstpass)) + if (!PyArg_ParseTuple(state, "O!i", &PyList_Type, &saved, &firstpass)) return NULL; Py_CLEAR(lz->saved); lz->saved = saved; -- cgit v1.2.1 From 05bf912035676f4cb83854aa3ae6eb9492033fcf Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 15 Aug 2015 15:09:30 -0700 Subject: Remove dead code (unreachable) --- Modules/itertoolsmodule.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 2cca6b3550..0d1a15b10c 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -940,12 +940,9 @@ cycle_next(cycleobject *lz) } return item; } - if (PyErr_Occurred()) { - if (PyErr_ExceptionMatches(PyExc_StopIteration)) - PyErr_Clear(); - else + /* Note: StopIteration is already cleared by PyIter_Next() */ + if (PyErr_Occurred()) return NULL; - } if (PyList_Size(lz->saved) == 0) return NULL; it = PyObject_GetIter(lz->saved); -- cgit v1.2.1 From adf5e82316fe05cdd7da9d6746bc68b285da656d Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 15 Aug 2015 15:16:12 -0700 Subject: Fix oddly placed whitespace --- Modules/itertoolsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 0d1a15b10c..18d55d8216 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -963,7 +963,7 @@ cycle_reduce(cycleobject *lz) */ return Py_BuildValue("O(O)(Oi)", Py_TYPE(lz), lz->it, lz->saved, lz->firstpass); - } +} static PyObject * cycle_setstate(cycleobject *lz, PyObject *state) -- cgit v1.2.1 From b2dab95e246ef0c02345814bbbaad513101265d7 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 16 Aug 2015 14:24:20 -0700 Subject: Inline PyIter_Next() matching what was done for other itertools. --- Modules/itertoolsmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 18d55d8216..bba0935898 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -1860,7 +1860,7 @@ chain_next(chainobject *lz) return NULL; /* input not iterable */ } } - item = PyIter_Next(lz->active); + item = (*Py_TYPE(lz->active)->tp_iternext)(lz->active); if (item != NULL) return item; if (PyErr_Occurred()) { @@ -3434,7 +3434,7 @@ accumulate_next(accumulateobject *lz) { PyObject *val, *oldtotal, *newtotal; - val = PyIter_Next(lz->it); + val = (*Py_TYPE(lz->it)->tp_iternext)(lz->it); if (val == NULL) return NULL; -- cgit v1.2.1 From 1838b5fb143574414a9f74caa6c8048bf3b9479a Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 16 Aug 2015 14:38:07 -0700 Subject: Neaten-up whitespace, vertical alignment, and line-wrapping. --- Modules/itertoolsmodule.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'Modules') diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index bba0935898..533e1d125a 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -759,9 +759,9 @@ PyDoc_STRVAR(teeobject_doc, "Iterator wrapped to make it copyable"); static PyMethodDef tee_methods[] = { - {"__copy__", (PyCFunction)tee_copy, METH_NOARGS, teecopy_doc}, - {"__reduce__", (PyCFunction)tee_reduce, METH_NOARGS, reduce_doc}, - {"__setstate__", (PyCFunction)tee_setstate, METH_O, setstate_doc}, + {"__copy__", (PyCFunction)tee_copy, METH_NOARGS, teecopy_doc}, + {"__reduce__", (PyCFunction)tee_reduce, METH_NOARGS, reduce_doc}, + {"__setstate__", (PyCFunction)tee_setstate, METH_O, setstate_doc}, {NULL, NULL} /* sentinel */ }; @@ -1407,7 +1407,8 @@ islice_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (PyErr_Occurred()) PyErr_Clear(); PyErr_SetString(PyExc_ValueError, - "Stop argument for islice() must be None or an integer: 0 <= x <= sys.maxsize."); + "Stop argument for islice() must be None or " + "an integer: 0 <= x <= sys.maxsize."); return NULL; } } @@ -1422,14 +1423,16 @@ islice_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (PyErr_Occurred()) PyErr_Clear(); PyErr_SetString(PyExc_ValueError, - "Stop argument for islice() must be None or an integer: 0 <= x <= sys.maxsize."); + "Stop argument for islice() must be None or " + "an integer: 0 <= x <= sys.maxsize."); return NULL; } } } if (start<0 || stop<-1) { PyErr_SetString(PyExc_ValueError, - "Indices for islice() must be None or an integer: 0 <= x <= sys.maxsize."); + "Indices for islice() must be None or " + "an integer: 0 <= x <= sys.maxsize."); return NULL; } @@ -1845,19 +1848,19 @@ chain_next(chainobject *lz) PyObject *item; if (lz->source == NULL) - return NULL; /* already stopped */ + return NULL; /* already stopped */ if (lz->active == NULL) { PyObject *iterable = PyIter_Next(lz->source); if (iterable == NULL) { Py_CLEAR(lz->source); - return NULL; /* no more input sources */ + return NULL; /* no more input sources */ } lz->active = PyObject_GetIter(iterable); Py_DECREF(iterable); if (lz->active == NULL) { Py_CLEAR(lz->source); - return NULL; /* input not iterable */ + return NULL; /* input not iterable */ } } item = (*Py_TYPE(lz->active)->tp_iternext)(lz->active); @@ -1867,10 +1870,10 @@ chain_next(chainobject *lz) if (PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); else - return NULL; /* input raised an exception */ + return NULL; /* input raised an exception */ } Py_CLEAR(lz->active); - return chain_next(lz); /* recurse and use next active */ + return chain_next(lz); /* recurse and use next active */ } static PyObject * @@ -1928,7 +1931,7 @@ static PyMethodDef chain_methods[] = { reduce_doc}, {"__setstate__", (PyCFunction)chain_setstate, METH_O, setstate_doc}, - {NULL, NULL} /* sentinel */ + {NULL, NULL} /* sentinel */ }; static PyTypeObject chain_type = { @@ -1980,7 +1983,7 @@ static PyTypeObject chain_type = { typedef struct { PyObject_HEAD - PyObject *pools; /* tuple of pool tuples */ + PyObject *pools; /* tuple of pool tuples */ Py_ssize_t *indices; /* one index per pool */ PyObject *result; /* most recently returned result tuple */ int stopped; /* set to 1 when the product iterator is exhausted */ @@ -3779,8 +3782,7 @@ filterfalse_next(filterfalseobject *lz) ok = PyObject_IsTrue(item); } else { PyObject *good; - good = PyObject_CallFunctionObjArgs(lz->func, - item, NULL); + good = PyObject_CallFunctionObjArgs(lz->func, item, NULL); if (good == NULL) { Py_DECREF(item); return NULL; -- cgit v1.2.1 From 91c98f18218385a51352314dd9769c1d06a2b71b Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 16 Aug 2015 14:49:24 -0700 Subject: Issue #24874: Speed-up itertools and make it pickles more compact. --- Modules/itertoolsmodule.c | 62 +++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 21 deletions(-) (limited to 'Modules') diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 533e1d125a..61ad0c8bf3 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -1,4 +1,6 @@ +#define PY_SSIZE_T_CLEAN + #include "Python.h" #include "structmember.h" @@ -863,6 +865,7 @@ typedef struct { PyObject_HEAD PyObject *it; PyObject *saved; + Py_ssize_t index; int firstpass; } cycleobject; @@ -902,6 +905,7 @@ cycle_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } lz->it = it; lz->saved = saved; + lz->index = 0; lz->firstpass = 0; return (PyObject *)lz; @@ -911,15 +915,16 @@ static void cycle_dealloc(cycleobject *lz) { PyObject_GC_UnTrack(lz); - Py_XDECREF(lz->saved); Py_XDECREF(lz->it); + Py_XDECREF(lz->saved); Py_TYPE(lz)->tp_free(lz); } static int cycle_traverse(cycleobject *lz, visitproc visit, void *arg) { - Py_VISIT(lz->it); + if (lz->it) + Py_VISIT(lz->it); Py_VISIT(lz->saved); return 0; } @@ -928,13 +933,13 @@ static PyObject * cycle_next(cycleobject *lz) { PyObject *item; - PyObject *it; - PyObject *tmp; - while (1) { + if (lz->it != NULL) { item = PyIter_Next(lz->it); if (item != NULL) { - if (!lz->firstpass && PyList_Append(lz->saved, item)) { + if (lz->firstpass) + return item; + if (PyList_Append(lz->saved, item)) { Py_DECREF(item); return NULL; } @@ -942,27 +947,41 @@ cycle_next(cycleobject *lz) } /* Note: StopIteration is already cleared by PyIter_Next() */ if (PyErr_Occurred()) - return NULL; - if (PyList_Size(lz->saved) == 0) - return NULL; - it = PyObject_GetIter(lz->saved); - if (it == NULL) return NULL; - tmp = lz->it; - lz->it = it; - lz->firstpass = 1; - Py_DECREF(tmp); + Py_CLEAR(lz->it); } + if (Py_SIZE(lz->saved) == 0) + return NULL; + item = PyList_GET_ITEM(lz->saved, lz->index); + lz->index++; + if (lz->index >= Py_SIZE(lz->saved)) + lz->index = 0; + Py_INCREF(item); + return item; } static PyObject * cycle_reduce(cycleobject *lz) { - /* Create a new cycle with the iterator tuple, then set - * the saved state on it. - */ - return Py_BuildValue("O(O)(Oi)", Py_TYPE(lz), - lz->it, lz->saved, lz->firstpass); + /* Create a new cycle with the iterator tuple, then set the saved state */ + if (lz->it == NULL) { + PyObject *it = PyObject_GetIter(lz->saved); + if (it == NULL) + return NULL; + if (lz->index != 0) { + _Py_IDENTIFIER(__setstate__); + PyObject *res = _PyObject_CallMethodId(it, &PyId___setstate__, + "n", lz->index); + if (res == NULL) { + Py_DECREF(it); + return NULL; + } + Py_DECREF(res); + } + return Py_BuildValue("O(N)(Oi)", Py_TYPE(lz), it, lz->saved, 1); + } + return Py_BuildValue("O(O)(Oi)", Py_TYPE(lz), lz->it, lz->saved, + lz->firstpass); } static PyObject * @@ -972,10 +991,11 @@ cycle_setstate(cycleobject *lz, PyObject *state) int firstpass; if (!PyArg_ParseTuple(state, "O!i", &PyList_Type, &saved, &firstpass)) return NULL; + Py_INCREF(saved); Py_CLEAR(lz->saved); lz->saved = saved; - Py_XINCREF(lz->saved); lz->firstpass = firstpass != 0; + lz->index = 0; Py_RETURN_NONE; } -- cgit v1.2.1 From e2637e624808a621e3a9f389bb627c196202c9ad Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 17 Aug 2015 23:55:28 -0700 Subject: Minor cleanups --- Modules/itertoolsmodule.c | 156 ++++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 82 deletions(-) (limited to 'Modules') diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 61ad0c8bf3..c7e19192a7 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -1,17 +1,16 @@ #define PY_SSIZE_T_CLEAN - #include "Python.h" #include "structmember.h" /* Itertools module written and maintained by Raymond D. Hettinger - Copyright (c) 2003-2013 Python Software Foundation. + Copyright (c) 2003-2015 Python Software Foundation. All rights reserved. */ -/* groupby object ***********************************************************/ +/* groupby object ************************************************************/ typedef struct { PyObject_HEAD @@ -89,8 +88,7 @@ groupby_next(groupbyobject *gbo) else { int rcmp; - rcmp = PyObject_RichCompareBool(gbo->tgtkey, - gbo->currkey, Py_EQ); + rcmp = PyObject_RichCompareBool(gbo->tgtkey, gbo->currkey, Py_EQ); if (rcmp == -1) return NULL; else if (rcmp == 0) @@ -105,8 +103,7 @@ groupby_next(groupbyobject *gbo) newkey = newvalue; Py_INCREF(newvalue); } else { - newkey = PyObject_CallFunctionObjArgs(gbo->keyfunc, - newvalue, NULL); + newkey = PyObject_CallFunctionObjArgs(gbo->keyfunc, newvalue, NULL); if (newkey == NULL) { Py_DECREF(newvalue); return NULL; @@ -303,8 +300,7 @@ _grouper_next(_grouperobject *igo) newkey = newvalue; Py_INCREF(newvalue); } else { - newkey = PyObject_CallFunctionObjArgs(gbo->keyfunc, - newvalue, NULL); + newkey = PyObject_CallFunctionObjArgs(gbo->keyfunc, newvalue, NULL); if (newkey == NULL) { Py_DECREF(newvalue); return NULL; @@ -332,8 +328,7 @@ _grouper_next(_grouperobject *igo) static PyObject * _grouper_reduce(_grouperobject *lz) { - return Py_BuildValue("O(OO)", Py_TYPE(lz), - lz->parent, lz->tgtkey); + return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->parent, lz->tgtkey); } static PyMethodDef _grouper_methods[] = { @@ -387,8 +382,7 @@ static PyTypeObject _grouper_type = { }; - -/* tee object and with supporting function and objects ***************/ +/* tee object and with supporting function and objects ***********************/ /* The teedataobject pre-allocates space for LINKCELLS number of objects. To help the object fit neatly inside cache lines (space for 16 to 32 @@ -403,7 +397,7 @@ static PyTypeObject _grouper_type = { typedef struct { PyObject_HEAD PyObject *it; - int numread; /* 0 <= numread <= LINKCELLS */ + int numread; /* 0 <= numread <= LINKCELLS */ PyObject *nextlink; PyObject *(values[LINKCELLS]); } teedataobject; @@ -411,7 +405,7 @@ typedef struct { typedef struct { PyObject_HEAD teedataobject *dataobj; - int index; /* 0 <= index <= LINKCELLS */ + int index; /* 0 <= index <= LINKCELLS */ PyObject *weakreflist; } teeobject; @@ -468,6 +462,7 @@ static int teedataobject_traverse(teedataobject *tdo, visitproc visit, void * arg) { int i; + Py_VISIT(tdo->it); for (i = 0; i < tdo->numread; i++) Py_VISIT(tdo->values[i]); @@ -517,6 +512,7 @@ teedataobject_reduce(teedataobject *tdo) int i; /* create a temporary list of already iterated values */ PyObject *values = PyList_New(tdo->numread); + if (!values) return NULL; for (i=0 ; inumread ; i++) { @@ -859,7 +855,7 @@ PyDoc_STRVAR(tee_doc, "tee(iterable, n=2) --> tuple of n independent iterators."); -/* cycle object **********************************************************/ +/* cycle object **************************************************************/ typedef struct { PyObject_HEAD @@ -989,6 +985,7 @@ cycle_setstate(cycleobject *lz, PyObject *state) { PyObject *saved=NULL; int firstpass; + if (!PyArg_ParseTuple(state, "O!i", &PyList_Type, &saved, &firstpass)) return NULL; Py_INCREF(saved); @@ -1064,7 +1061,7 @@ typedef struct { PyObject_HEAD PyObject *func; PyObject *it; - long start; + long start; } dropwhileobject; static PyTypeObject dropwhile_type; @@ -1154,8 +1151,7 @@ dropwhile_next(dropwhileobject *lz) static PyObject * dropwhile_reduce(dropwhileobject *lz) { - return Py_BuildValue("O(OO)l", Py_TYPE(lz), - lz->func, lz->it, lz->start); + return Py_BuildValue("O(OO)l", Py_TYPE(lz), lz->func, lz->it, lz->start); } static PyObject * @@ -1233,7 +1229,7 @@ typedef struct { PyObject_HEAD PyObject *func; PyObject *it; - long stop; + long stop; } takewhileobject; static PyTypeObject takewhile_type; @@ -1308,7 +1304,7 @@ takewhile_next(takewhileobject *lz) } ok = PyObject_IsTrue(good); Py_DECREF(good); - if (ok == 1) + if (ok > 0) return item; Py_DECREF(item); if (ok == 0) @@ -1319,14 +1315,14 @@ takewhile_next(takewhileobject *lz) static PyObject * takewhile_reduce(takewhileobject *lz) { - return Py_BuildValue("O(OO)l", Py_TYPE(lz), - lz->func, lz->it, lz->stop); + return Py_BuildValue("O(OO)l", Py_TYPE(lz), lz->func, lz->it, lz->stop); } static PyObject * takewhile_reduce_setstate(takewhileobject *lz, PyObject *state) { int stop = PyObject_IsTrue(state); + if (stop < 0) return NULL; lz->stop = stop; @@ -1391,7 +1387,7 @@ static PyTypeObject takewhile_type = { }; -/* islice object ************************************************************/ +/* islice object *************************************************************/ typedef struct { PyObject_HEAD @@ -1549,6 +1545,7 @@ islice_reduce(isliceobject *lz) * then 'setstate' with the next and count */ PyObject *stop; + if (lz->it == NULL) { PyObject *empty_list; PyObject *empty_it; @@ -1578,6 +1575,7 @@ static PyObject * islice_setstate(isliceobject *lz, PyObject *state) { Py_ssize_t cnt = PyLong_AsSsize_t(state); + if (cnt == -1 && PyErr_Occurred()) return NULL; lz->cnt = cnt; @@ -1792,7 +1790,7 @@ static PyTypeObject starmap_type = { }; -/* chain object ************************************************************/ +/* chain object **************************************************************/ typedef struct { PyObject_HEAD @@ -1919,6 +1917,7 @@ static PyObject * chain_setstate(chainobject *lz, PyObject *state) { PyObject *source, *active=NULL; + if (! PyArg_ParseTuple(state, "O|O", &source, &active)) return NULL; @@ -1945,8 +1944,8 @@ Alternate chain() contructor taking a single iterable argument\n\ that evaluates lazily."); static PyMethodDef chain_methods[] = { - {"from_iterable", (PyCFunction) chain_new_from_iterable, METH_O | METH_CLASS, - chain_from_iterable_doc}, + {"from_iterable", (PyCFunction) chain_new_from_iterable, METH_O | METH_CLASS, + chain_from_iterable_doc}, {"__reduce__", (PyCFunction)chain_reduce, METH_NOARGS, reduce_doc}, {"__setstate__", (PyCFunction)chain_setstate, METH_O, @@ -2003,10 +2002,10 @@ static PyTypeObject chain_type = { typedef struct { PyObject_HEAD - PyObject *pools; /* tuple of pool tuples */ - Py_ssize_t *indices; /* one index per pool */ - PyObject *result; /* most recently returned result tuple */ - int stopped; /* set to 1 when the product iterator is exhausted */ + PyObject *pools; /* tuple of pool tuples */ + Py_ssize_t *indices; /* one index per pool */ + PyObject *result; /* most recently returned result tuple */ + int stopped; /* set to 1 when the iterator is exhausted */ } productobject; static PyTypeObject product_type; @@ -2025,7 +2024,8 @@ product_new(PyTypeObject *type, PyObject *args, PyObject *kwds) PyObject *tmpargs = PyTuple_New(0); if (tmpargs == NULL) return NULL; - if (!PyArg_ParseTupleAndKeywords(tmpargs, kwds, "|n:product", kwlist, &repeat)) { + if (!PyArg_ParseTupleAndKeywords(tmpargs, kwds, "|n:product", + kwlist, &repeat)) { Py_DECREF(tmpargs); return NULL; } @@ -2349,15 +2349,15 @@ static PyTypeObject product_type = { }; -/* combinations object ************************************************************/ +/* combinations object *******************************************************/ typedef struct { PyObject_HEAD - PyObject *pool; /* input converted to a tuple */ - Py_ssize_t *indices; /* one index per result element */ - PyObject *result; /* most recently returned result tuple */ - Py_ssize_t r; /* size of result tuple */ - int stopped; /* set to 1 when the combinations iterator is exhausted */ + PyObject *pool; /* input converted to a tuple */ + Py_ssize_t *indices; /* one index per result element */ + PyObject *result; /* most recently returned result tuple */ + Py_ssize_t r; /* size of result tuple */ + int stopped; /* set to 1 when the iterator is exhausted */ } combinationsobject; static PyTypeObject combinations_type; @@ -2567,17 +2567,16 @@ combinations_setstate(combinationsobject *lz, PyObject *state) Py_ssize_t i; Py_ssize_t n = PyTuple_GET_SIZE(lz->pool); - if (!PyTuple_Check(state) || PyTuple_GET_SIZE(state) != lz->r) - { + if (!PyTuple_Check(state) || PyTuple_GET_SIZE(state) != lz->r) { PyErr_SetString(PyExc_ValueError, "invalid arguments"); return NULL; } - for (i=0; ir; i++) - { + for (i=0; ir; i++) { Py_ssize_t max; PyObject* indexObject = PyTuple_GET_ITEM(state, i); Py_ssize_t index = PyLong_AsSsize_t(indexObject); + if (index == -1 && PyErr_Occurred()) return NULL; /* not an integer */ max = i + n - lz->r; @@ -2664,7 +2663,7 @@ static PyTypeObject combinations_type = { }; -/* combinations with replacement object *******************************************/ +/* combinations with replacement object **************************************/ /* Equivalent to: @@ -2694,11 +2693,11 @@ static PyTypeObject combinations_type = { */ typedef struct { PyObject_HEAD - PyObject *pool; /* input converted to a tuple */ - Py_ssize_t *indices; /* one index per result element */ - PyObject *result; /* most recently returned result tuple */ - Py_ssize_t r; /* size of result tuple */ - int stopped; /* set to 1 when the cwr iterator is exhausted */ + PyObject *pool; /* input converted to a tuple */ + Py_ssize_t *indices; /* one index per result element */ + PyObject *result; /* most recently returned result tuple */ + Py_ssize_t r; /* size of result tuple */ + int stopped; /* set to 1 when the cwr iterator is exhausted */ } cwrobject; static PyTypeObject cwr_type; @@ -2715,8 +2714,9 @@ cwr_new(PyTypeObject *type, PyObject *args, PyObject *kwds) Py_ssize_t i; static char *kwargs[] = {"iterable", "r", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "On:combinations_with_replacement", kwargs, - &iterable, &r)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, + "On:combinations_with_replacement", + kwargs, &iterable, &r)) return NULL; pool = PySequence_Tuple(iterable); @@ -2881,8 +2881,7 @@ cwr_reduce(cwrobject *lz) indices = PyTuple_New(lz->r); if (!indices) return NULL; - for (i=0; ir; i++) - { + for (i=0; ir; i++) { PyObject* index = PyLong_FromSsize_t(lz->indices[i]); if (!index) { Py_DECREF(indices); @@ -2908,10 +2907,10 @@ cwr_setstate(cwrobject *lz, PyObject *state) } n = PyTuple_GET_SIZE(lz->pool); - for (i=0; ir; i++) - { + for (i=0; ir; i++) { PyObject* indexObject = PyTuple_GET_ITEM(state, i); Py_ssize_t index = PyLong_AsSsize_t(indexObject); + if (index < 0 && PyErr_Occurred()) return NULL; /* not an integer */ /* clamp the index */ @@ -2996,7 +2995,7 @@ static PyTypeObject cwr_type = { }; -/* permutations object ************************************************************ +/* permutations object ******************************************************** def permutations(iterable, r=None): 'permutations(range(3), 2) --> (0,1) (0,2) (1,0) (1,2) (2,0) (2,1)' @@ -3023,12 +3022,12 @@ def permutations(iterable, r=None): typedef struct { PyObject_HEAD - PyObject *pool; /* input converted to a tuple */ - Py_ssize_t *indices; /* one index per element in the pool */ - Py_ssize_t *cycles; /* one rollover counter per element in the result */ - PyObject *result; /* most recently returned result tuple */ - Py_ssize_t r; /* size of result tuple */ - int stopped; /* set to 1 when the permutations iterator is exhausted */ + PyObject *pool; /* input converted to a tuple */ + Py_ssize_t *indices; /* one index per element in the pool */ + Py_ssize_t *cycles; /* one rollover counter per element in the result */ + PyObject *result; /* most recently returned result tuple */ + Py_ssize_t r; /* size of result tuple */ + int stopped; /* set to 1 when the iterator is exhausted */ } permutationsobject; static PyTypeObject permutations_type; @@ -3243,7 +3242,7 @@ permutations_reduce(permutationsobject *po) indices = PyTuple_New(n); if (indices == NULL) goto err; - for (i=0; iindices[i]); if (!index) goto err; @@ -3253,8 +3252,7 @@ permutations_reduce(permutationsobject *po) cycles = PyTuple_New(po->r); if (cycles == NULL) goto err; - for (i=0; ir; i++) - { + for (i=0 ; ir ; i++) { PyObject* index = PyLong_FromSsize_t(po->cycles[i]); if (!index) goto err; @@ -3282,15 +3280,12 @@ permutations_setstate(permutationsobject *po, PyObject *state) return NULL; n = PyTuple_GET_SIZE(po->pool); - if (PyTuple_GET_SIZE(indices) != n || - PyTuple_GET_SIZE(cycles) != po->r) - { + if (PyTuple_GET_SIZE(indices) != n || PyTuple_GET_SIZE(cycles) != po->r) { PyErr_SetString(PyExc_ValueError, "invalid arguments"); return NULL; } - for (i=0; iindices[i] = index; } - for (i=0; ir; i++) - { + for (i=0; ir; i++) { PyObject* indexObject = PyTuple_GET_ITEM(cycles, i); Py_ssize_t index = PyLong_AsSsize_t(indexObject); if (index < 0 && PyErr_Occurred()) @@ -3388,7 +3382,7 @@ static PyTypeObject permutations_type = { PyObject_GC_Del, /* tp_free */ }; -/* accumulate object ************************************************************/ +/* accumulate object ********************************************************/ typedef struct { PyObject_HEAD @@ -3489,7 +3483,7 @@ accumulate_reduce(accumulateobject *lz) return Py_BuildValue("O(OO)O", Py_TYPE(lz), lz->it, lz->binop?lz->binop:Py_None, lz->total?lz->total:Py_None); - } +} static PyObject * accumulate_setstate(accumulateobject *lz, PyObject *state) @@ -3652,7 +3646,7 @@ compress_next(compressobject *lz) ok = PyObject_IsTrue(selector); Py_DECREF(selector); - if (ok == 1) + if (ok > 0) return datum; Py_DECREF(datum); if (ok < 0) @@ -3665,7 +3659,7 @@ compress_reduce(compressobject *lz) { return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->data, lz->selectors); - } +} static PyMethodDef compress_methods[] = { {"__reduce__", (PyCFunction)compress_reduce, METH_NOARGS, @@ -3821,9 +3815,8 @@ filterfalse_next(filterfalseobject *lz) static PyObject * filterfalse_reduce(filterfalseobject *lz) { - return Py_BuildValue("O(OO)", Py_TYPE(lz), - lz->func, lz->it); - } + return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it); +} static PyMethodDef filterfalse_methods[] = { {"__reduce__", (PyCFunction)filterfalse_reduce, METH_NOARGS, @@ -4274,9 +4267,7 @@ static PyTypeObject repeat_type = { PyObject_GC_Del, /* tp_free */ }; -/* ziplongest object ************************************************************/ - -#include "Python.h" +/* ziplongest object *********************************************************/ typedef struct { PyObject_HEAD @@ -4315,7 +4306,7 @@ zip_longest_new(PyTypeObject *type, PyObject *args, PyObject *kwds) ittuple = PyTuple_New(tuplesize); if (ittuple == NULL) return NULL; - for (i=0; i < tuplesize; ++i) { + for (i=0; i < tuplesize; i++) { PyObject *item = PyTuple_GET_ITEM(args, i); PyObject *it = PyObject_GetIter(item); if (it == NULL) { @@ -4456,6 +4447,7 @@ zip_longest_reduce(ziplongestobject *lz) */ int i; PyObject *args = PyTuple_New(PyTuple_GET_SIZE(lz->ittuple)); + if (args == NULL) return NULL; for (i=0; iittuple); i++) { -- cgit v1.2.1 From c4517b5e16e2d3c7092c3ffcb4bf8e751aa3d8f8 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 26 Aug 2015 08:08:38 -0700 Subject: Issue #24913: Fix overrun error in deque.index(). --- Modules/_collectionsmodule.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 830c5b83eb..3856d83fb4 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -924,6 +924,8 @@ deque_index(dequeobject *deque, PyObject *args) if (stop < 0) stop = 0; } + if (stop > Py_SIZE(deque)) + stop = Py_SIZE(deque); for (i=0 ; i= start) { -- cgit v1.2.1 From ea4bd213402a67d964b8edd7221d98eecc806be7 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 2 Sep 2015 00:50:43 +0200 Subject: Move assertion inside _PyTime_ObjectToTimeval() Change also _PyTime_FromSeconds() assertion to ensure that the _PyTime_t type is used. --- Modules/_datetimemodule.c | 1 - 1 file changed, 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 7e4be5baac..5cff3f8ffc 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4100,7 +4100,6 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp, if (_PyTime_ObjectToTimeval(timestamp, &timet, &us, _PyTime_ROUND_FLOOR) == -1) return NULL; - assert(0 <= us && us <= 999999); return datetime_from_timet_and_us(cls, f, timet, (int)us, tzinfo); } -- cgit v1.2.1 From d0ee151e3b640eae2a63b1c13860837d3ece2cda Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 2 Sep 2015 01:43:56 +0200 Subject: Issue #23517: Add "half up" rounding mode to the _PyTime API --- Modules/_testcapimodule.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index ba0a24bd1d..c38d9ae634 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2646,7 +2646,9 @@ run_in_subinterp(PyObject *self, PyObject *args) static int check_time_rounding(int round) { - if (round != _PyTime_ROUND_FLOOR && round != _PyTime_ROUND_CEILING) { + if (round != _PyTime_ROUND_FLOOR + && round != _PyTime_ROUND_CEILING + && round != _PyTime_ROUND_HALF_UP) { PyErr_SetString(PyExc_ValueError, "invalid rounding"); return -1; } -- cgit v1.2.1 From 4fe18c786632197b6b7f6faf16d21d8a3d25e010 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 2 Sep 2015 01:57:23 +0200 Subject: Issue #23517: datetime.datetime.fromtimestamp() and datetime.datetime.utcfromtimestamp() now rounds to nearest with ties going away from zero, instead of rounding towards minus infinity (-inf), as Python 2 and Python older than 3.3. --- Modules/_datetimemodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 5cff3f8ffc..e1cd2b57a1 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4098,7 +4098,7 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp, long us; if (_PyTime_ObjectToTimeval(timestamp, - &timet, &us, _PyTime_ROUND_FLOOR) == -1) + &timet, &us, _PyTime_ROUND_HALF_UP) == -1) return NULL; return datetime_from_timet_and_us(cls, f, timet, (int)us, tzinfo); -- cgit v1.2.1 From de9842352420bf3824a4ba811cd5cc37132956a2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 2 Sep 2015 10:10:26 +0200 Subject: Backed out changeset b690bf218702 Issue #23517: the change broke test_datetime. datetime.timedelta() rounding mode must also be changed, and test_datetime must be updated for the new rounding mode (half up). --- Modules/_datetimemodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index e1cd2b57a1..5cff3f8ffc 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4098,7 +4098,7 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp, long us; if (_PyTime_ObjectToTimeval(timestamp, - &timet, &us, _PyTime_ROUND_HALF_UP) == -1) + &timet, &us, _PyTime_ROUND_FLOOR) == -1) return NULL; return datetime_from_timet_and_us(cls, f, timet, (int)us, tzinfo); -- cgit v1.2.1 From ea58c6adb1a11497266bc69f0629feb2fb541fa9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 2 Sep 2015 19:16:07 +0200 Subject: Issue #23517: datetime.timedelta constructor now rounds microseconds to nearest with ties going away from zero (ROUND_HALF_UP), as Python 2 and Python older than 3.3, instead of rounding to nearest with ties going to nearest even integer (ROUND_HALF_EVEN). --- Modules/_datetimemodule.c | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 5cff3f8ffc..6cab1e2d24 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -2149,29 +2149,9 @@ delta_new(PyTypeObject *type, PyObject *args, PyObject *kw) if (leftover_us) { /* Round to nearest whole # of us, and add into x. */ double whole_us = round(leftover_us); - int x_is_odd; PyObject *temp; - whole_us = round(leftover_us); - if (fabs(whole_us - leftover_us) == 0.5) { - /* We're exactly halfway between two integers. In order - * to do round-half-to-even, we must determine whether x - * is odd. Note that x is odd when it's last bit is 1. The - * code below uses bitwise and operation to check the last - * bit. */ - temp = PyNumber_And(x, one); /* temp <- x & 1 */ - if (temp == NULL) { - Py_DECREF(x); - goto Done; - } - x_is_odd = PyObject_IsTrue(temp); - Py_DECREF(temp); - if (x_is_odd == -1) { - Py_DECREF(x); - goto Done; - } - whole_us = 2.0 * round((leftover_us + x_is_odd) * 0.5) - x_is_odd; - } + whole_us = _PyTime_RoundHalfUp(leftover_us); temp = PyLong_FromLong((long)whole_us); -- cgit v1.2.1 From ea28cadbcbdbda4b0e2ae610896914d6298ce2aa Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 3 Sep 2015 09:06:44 +0200 Subject: Issue #23517: fromtimestamp() and utcfromtimestamp() methods of datetime.datetime now round microseconds to nearest with ties going away from zero (ROUND_HALF_UP), as Python 2 and Python older than 3.3, instead of rounding towards -Infinity (ROUND_FLOOR). --- Modules/_datetimemodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 6cab1e2d24..ae459df8a9 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4078,7 +4078,7 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp, long us; if (_PyTime_ObjectToTimeval(timestamp, - &timet, &us, _PyTime_ROUND_FLOOR) == -1) + &timet, &us, _PyTime_ROUND_HALF_UP) == -1) return NULL; return datetime_from_timet_and_us(cls, f, timet, (int)us, tzinfo); -- cgit v1.2.1 From 66dfdf79d7e9d7f721071cf11954a6460e7fca48 Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Thu, 3 Sep 2015 11:52:15 -0500 Subject: Issue #24974: Force fp-model precice in mpdecimal.c on Windows As suggested by Steve Dower and approved by Stefan Krah. --- Modules/_decimal/libmpdec/mpdecimal.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/_decimal/libmpdec/mpdecimal.c b/Modules/_decimal/libmpdec/mpdecimal.c index 21d222277c..593f9f5e03 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.c +++ b/Modules/_decimal/libmpdec/mpdecimal.c @@ -43,6 +43,7 @@ #ifdef PPRO #if defined(_MSC_VER) #include + #pragma float_control(precise, on) #pragma fenv_access(on) #elif !defined(__OpenBSD__) && !defined(__NetBSD__) /* C99 */ -- cgit v1.2.1 From 2da1d4c26e3f69ec08200a0f915964be375dac8c Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Thu, 3 Sep 2015 10:15:03 -0700 Subject: Issue #24913: Fix overrun error in deque.index(). Reported by John Leitch and Bryce Darling, patch by Raymond Hettinger. --- Modules/_collectionsmodule.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 830c5b83eb..3856d83fb4 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -924,6 +924,8 @@ deque_index(dequeobject *deque, PyObject *args) if (stop < 0) stop = 0; } + if (stop > Py_SIZE(deque)) + stop = Py_SIZE(deque); for (i=0 ; i= start) { -- cgit v1.2.1 From 96d6494d26e7bf4b6c9458160065ba022b733dc1 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 4 Sep 2015 01:08:03 +0300 Subject: Issue #24989: Fixed buffer overread in BytesIO.readline() if a position is set beyond size. Based on patch by John Leitch. --- Modules/_io/bytesio.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index d46430dca5..31cc1f79a1 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -57,14 +57,18 @@ scan_eol(bytesio *self, Py_ssize_t len) Py_ssize_t maxlen; assert(self->buf != NULL); + assert(self->pos >= 0); + + if (self->pos >= self->string_size) + return 0; /* Move to the end of the line, up to the end of the string, s. */ - start = PyBytes_AS_STRING(self->buf) + self->pos; maxlen = self->string_size - self->pos; if (len < 0 || len > maxlen) len = maxlen; if (len) { + start = PyBytes_AS_STRING(self->buf) + self->pos; n = memchr(start, '\n', len); if (n) /* Get the length from the current position to the end of -- cgit v1.2.1 From c24226158488463cd15b2d3805ad0371bc8ef0a7 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 4 Sep 2015 07:48:19 +0300 Subject: Issue #24989: Fixed buffer overread in BytesIO.readline() if a position is set beyond size. Based on patch by John Leitch. --- Modules/_io/bytesio.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index d46430dca5..31cc1f79a1 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -57,14 +57,18 @@ scan_eol(bytesio *self, Py_ssize_t len) Py_ssize_t maxlen; assert(self->buf != NULL); + assert(self->pos >= 0); + + if (self->pos >= self->string_size) + return 0; /* Move to the end of the line, up to the end of the string, s. */ - start = PyBytes_AS_STRING(self->buf) + self->pos; maxlen = self->string_size - self->pos; if (len < 0 || len > maxlen) len = maxlen; if (len) { + start = PyBytes_AS_STRING(self->buf) + self->pos; n = memchr(start, '\n', len); if (n) /* Get the length from the current position to the end of -- cgit v1.2.1 From 0b9761c03a0fc3fcdf997d8fbc21c584bfdddd48 Mon Sep 17 00:00:00 2001 From: Nick Coghlan Date: Sat, 5 Sep 2015 21:05:05 +1000 Subject: Close #24748: Restore imp.load_dynamic compatibility To resolve a compatibility problem found with py2exe and pywin32, imp.load_dynamic() once again ignores previously loaded modules to support Python modules replacing themselves with extension modules. Patch by Petr Viktorin. --- Modules/_testmultiphase.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Modules') diff --git a/Modules/_testmultiphase.c b/Modules/_testmultiphase.c index 2919687e11..2005205d33 100644 --- a/Modules/_testmultiphase.c +++ b/Modules/_testmultiphase.c @@ -582,3 +582,13 @@ PyInit__testmultiphase_exec_unreported_exception(PyObject *spec) { return PyModuleDef_Init(&def_exec_unreported_exception); } + +/*** Helper for imp test ***/ + +static PyModuleDef imp_dummy_def = TEST_MODULE_DEF("imp_dummy", main_slots, testexport_methods); + +PyMODINIT_FUNC +PyInit_imp_dummy(PyObject *spec) +{ + return PyModuleDef_Init(&imp_dummy_def); +} -- cgit v1.2.1 From 72263528ca8da1141de9772979107c73f0406a52 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 5 Sep 2015 12:16:06 -0700 Subject: Issue #24917: time_strftime() Buffer Over-read. Patch by John Leitch. --- Modules/timemodule.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 197d2c0b8d..55e26fa8a2 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -623,6 +623,12 @@ time_strftime(PyObject *self, PyObject *args) Py_DECREF(format); return NULL; } + else if (outbuf[1] == '\0') + { + PyErr_SetString(PyExc_ValueError, "Incomplete format string"); + Py_DECREF(format); + return NULL; + } } #elif (defined(_AIX) || defined(sun)) && defined(HAVE_WCSFTIME) for(outbuf = wcschr(fmt, '%'); @@ -636,6 +642,12 @@ time_strftime(PyObject *self, PyObject *args) "format %y requires year >= 1900 on AIX"); return NULL; } + else if (outbuf[1] == '\0') + { + PyErr_SetString(PyExc_ValueError, "Incomplete format string"); + Py_DECREF(format); + return NULL; + } } #endif -- cgit v1.2.1 From 360268d10a759daddfeef0479f43f561e236f96f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 5 Sep 2015 17:05:52 -0700 Subject: Prevent reentrant badness by deferring the decrefs as long as possible. --- Modules/_collectionsmodule.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 3856d83fb4..f450f25bf2 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -419,9 +419,11 @@ deque_extend(dequeobject *deque, PyObject *iterable) deque->rightblock->data[deque->rightindex] = item; deque_trim_left(deque); } - Py_DECREF(it); - if (PyErr_Occurred()) + if (PyErr_Occurred()) { + Py_DECREF(it); return NULL; + } + Py_DECREF(it); Py_RETURN_NONE; } @@ -480,9 +482,11 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) deque->leftblock->data[deque->leftindex] = item; deque_trim_right(deque); } - Py_DECREF(it); - if (PyErr_Occurred()) + if (PyErr_Occurred()) { + Py_DECREF(it); return NULL; + } + Py_DECREF(it); Py_RETURN_NONE; } @@ -497,8 +501,8 @@ deque_inplace_concat(dequeobject *deque, PyObject *other) result = deque_extend(deque, other); if (result == NULL) return result; - Py_DECREF(result); Py_INCREF(deque); + Py_DECREF(result); return (PyObject *)deque; } @@ -1260,8 +1264,8 @@ deque_repr(PyObject *deque) aslist, ((dequeobject *)deque)->maxlen); else result = PyUnicode_FromFormat("deque(%R)", aslist); - Py_DECREF(aslist); Py_ReprLeave(deque); + Py_DECREF(aslist); return result; } -- cgit v1.2.1 From 474a1a5e72fa1e41ca4c6082e9496bdab803b8ec Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Sun, 6 Sep 2015 00:31:02 -0700 Subject: Backing out 09b62202d9b7; the tests fail on Linux, and it needs a re-think. --- Modules/timemodule.c | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 55e26fa8a2..197d2c0b8d 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -623,12 +623,6 @@ time_strftime(PyObject *self, PyObject *args) Py_DECREF(format); return NULL; } - else if (outbuf[1] == '\0') - { - PyErr_SetString(PyExc_ValueError, "Incomplete format string"); - Py_DECREF(format); - return NULL; - } } #elif (defined(_AIX) || defined(sun)) && defined(HAVE_WCSFTIME) for(outbuf = wcschr(fmt, '%'); @@ -642,12 +636,6 @@ time_strftime(PyObject *self, PyObject *args) "format %y requires year >= 1900 on AIX"); return NULL; } - else if (outbuf[1] == '\0') - { - PyErr_SetString(PyExc_ValueError, "Incomplete format string"); - Py_DECREF(format); - return NULL; - } } #endif -- cgit v1.2.1 From abe3e1eb0d757e661158661bee7e1b678cb0380f Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sun, 6 Sep 2015 13:07:21 -0400 Subject: Closes Issue#22241: timezone.utc name is now plain 'UTC', not 'UTC-00:00'. --- Modules/_datetimemodule.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index ae459df8a9..008b733bd3 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3267,6 +3267,11 @@ timezone_str(PyDateTime_TimeZone *self) Py_INCREF(self->name); return self->name; } + if (self == PyDateTime_TimeZone_UTC || + (GET_TD_DAYS(self->offset) == 0 && + GET_TD_SECONDS(self->offset) == 0 && + GET_TD_MICROSECONDS(self->offset) == 0)) + return PyUnicode_FromString("UTC"); /* Offset is normalized, so it is negative if days < 0 */ if (GET_TD_DAYS(self->offset) < 0) { sign = '-'; -- cgit v1.2.1 From 51dfb6f71adbaf1e1d68ecacdfcf4a77be02e246 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 6 Sep 2015 21:25:30 +0300 Subject: Issue #15989: Fixed some scarcely probable integer overflows. It is very unlikely that they can occur in real code for now. --- Modules/_datetimemodule.c | 2 +- Modules/_io/_iomodule.c | 3 ++- Modules/posixmodule.c | 7 +++++-- Modules/readline.c | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 008b733bd3..fe9a948ab0 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4692,7 +4692,7 @@ local_timezone(PyDateTime_DateTime *utc_time) if (seconds == NULL) goto error; Py_DECREF(delta); - timestamp = PyLong_AsLong(seconds); + timestamp = _PyLong_AsTime_t(seconds); Py_DECREF(seconds); if (timestamp == -1 && PyErr_Occurred()) return NULL; diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index 1c2d3a0c6c..7428aed13b 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -238,7 +238,8 @@ _io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, int text = 0, binary = 0, universal = 0; char rawmode[6], *m; - int line_buffering, isatty; + int line_buffering; + long isatty; PyObject *raw, *modeobj = NULL, *buffer, *wrapper, *result = NULL; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index d2b8dfd14a..270de0fd90 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -9481,7 +9481,7 @@ os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path) */ struct constdef { char *name; - long value; + int value; }; static int @@ -9489,7 +9489,10 @@ conv_confname(PyObject *arg, int *valuep, struct constdef *table, size_t tablesize) { if (PyLong_Check(arg)) { - *valuep = PyLong_AS_LONG(arg); + int value = _PyLong_AsInt(arg); + if (value == -1 && PyErr_Occurred()) + return 0; + *valuep = value; return 1; } else { diff --git a/Modules/readline.c b/Modules/readline.c index f6b52a0741..09877f2b4b 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -840,7 +840,7 @@ on_hook(PyObject *func) if (r == Py_None) result = 0; else { - result = PyLong_AsLong(r); + result = _PyLong_AsInt(r); if (result == -1 && PyErr_Occurred()) goto error; } -- cgit v1.2.1 From 4de9d449cf78d8de396024b34198688b50dcb999 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sun, 6 Sep 2015 19:20:51 -0700 Subject: Issue #24917: time_strftime() buffer over-read. --- Modules/timemodule.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 197d2c0b8d..eca67d9e28 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -610,14 +610,15 @@ time_strftime(PyObject *self, PyObject *args) #if defined(MS_WINDOWS) && !defined(HAVE_WCSFTIME) /* check that the format string contains only valid directives */ - for(outbuf = strchr(fmt, '%'); + for (outbuf = strchr(fmt, '%'); outbuf != NULL; outbuf = strchr(outbuf+2, '%')) { - if (outbuf[1]=='#') + if (outbuf[1] == '#') ++outbuf; /* not documented by python, */ - if ((outbuf[1] == 'y') && buf.tm_year < 0) - { + if (outbuf[1] == '\0') + break; + if ((outbuf[1] == 'y') && buf.tm_year < 0) { PyErr_SetString(PyExc_ValueError, "format %y requires year >= 1900 on Windows"); Py_DECREF(format); @@ -625,10 +626,12 @@ time_strftime(PyObject *self, PyObject *args) } } #elif (defined(_AIX) || defined(sun)) && defined(HAVE_WCSFTIME) - for(outbuf = wcschr(fmt, '%'); + for (outbuf = wcschr(fmt, '%'); outbuf != NULL; outbuf = wcschr(outbuf+2, '%')) { + if (outbuf[1] == L'\0') + break; /* Issue #19634: On AIX, wcsftime("y", (1899, 1, 1, 0, 0, 0, 0, 0, 0)) returns "0/" instead of "99" */ if (outbuf[1] == L'y' && buf.tm_year < 0) { @@ -659,7 +662,8 @@ time_strftime(PyObject *self, PyObject *args) #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) err = errno; #endif - if (buflen > 0 || i >= 256 * fmtlen) { + if (buflen > 0 || fmtlen == 0 || + (fmtlen > 4 && i >= 256 * fmtlen)) { /* If the buffer is 256 times as long as the format, it's probably not failing for lack of room! More likely, the format yields an empty result, -- cgit v1.2.1 From 65e28c7961a20ccb61a42ee300dda259c6aa2145 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 8 Sep 2015 00:12:49 +0200 Subject: Issue #22241: Fix a compiler waring --- Modules/_datetimemodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index fe9a948ab0..ea2bae651b 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3267,7 +3267,7 @@ timezone_str(PyDateTime_TimeZone *self) Py_INCREF(self->name); return self->name; } - if (self == PyDateTime_TimeZone_UTC || + if ((PyObject *)self == PyDateTime_TimeZone_UTC || (GET_TD_DAYS(self->offset) == 0 && GET_TD_SECONDS(self->offset) == 0 && GET_TD_MICROSECONDS(self->offset) == 0)) -- cgit v1.2.1 From bbd2c26bb917642217efd84fc4a3dd0b3e0f0a20 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 8 Sep 2015 23:58:54 +0200 Subject: Revert change 0eb8c182131e: """Issue #23517: datetime.timedelta constructor now rounds microseconds to nearest with ties going away from zero (ROUND_HALF_UP), as Python 2 and Python older than 3.3, instead of rounding to nearest with ties going to nearest even integer (ROUND_HALF_EVEN).""" datetime.timedelta uses rounding mode ROUND_HALF_EVEN again. --- Modules/_datetimemodule.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index ea2bae651b..24e83d3d29 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -2149,9 +2149,29 @@ delta_new(PyTypeObject *type, PyObject *args, PyObject *kw) if (leftover_us) { /* Round to nearest whole # of us, and add into x. */ double whole_us = round(leftover_us); + int x_is_odd; PyObject *temp; - whole_us = _PyTime_RoundHalfUp(leftover_us); + whole_us = round(leftover_us); + if (fabs(whole_us - leftover_us) == 0.5) { + /* We're exactly halfway between two integers. In order + * to do round-half-to-even, we must determine whether x + * is odd. Note that x is odd when it's last bit is 1. The + * code below uses bitwise and operation to check the last + * bit. */ + temp = PyNumber_And(x, one); /* temp <- x & 1 */ + if (temp == NULL) { + Py_DECREF(x); + goto Done; + } + x_is_odd = PyObject_IsTrue(temp); + Py_DECREF(temp); + if (x_is_odd == -1) { + Py_DECREF(x); + goto Done; + } + whole_us = 2.0 * round((leftover_us + x_is_odd) * 0.5) - x_is_odd; + } temp = PyLong_FromLong((long)whole_us); -- cgit v1.2.1 From fb8809cbfa9e3302900ffb10b732626ce864157c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 9 Sep 2015 01:02:23 +0200 Subject: Issue #23517: fromtimestamp() and utcfromtimestamp() methods of datetime.datetime now round microseconds to nearest with ties going to nearest even integer (ROUND_HALF_EVEN), as round(float), instead of rounding towards -Infinity (ROUND_FLOOR). pytime API: replace _PyTime_ROUND_HALF_UP with _PyTime_ROUND_HALF_EVEN. Fix also _PyTime_Divide() for negative numbers. _PyTime_AsTimeval_impl() now reuses _PyTime_Divide() instead of reimplementing rounding modes. --- Modules/_datetimemodule.c | 2 +- Modules/_testcapimodule.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 24e83d3d29..bbc51c6a68 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4103,7 +4103,7 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp, long us; if (_PyTime_ObjectToTimeval(timestamp, - &timet, &us, _PyTime_ROUND_HALF_UP) == -1) + &timet, &us, _PyTime_ROUND_HALF_EVEN) == -1) return NULL; return datetime_from_timet_and_us(cls, f, timet, (int)us, tzinfo); diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index c38d9ae634..fed3286ac1 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2648,7 +2648,7 @@ check_time_rounding(int round) { if (round != _PyTime_ROUND_FLOOR && round != _PyTime_ROUND_CEILING - && round != _PyTime_ROUND_HALF_UP) { + && round != _PyTime_ROUND_HALF_EVEN) { PyErr_SetString(PyExc_ValueError, "invalid rounding"); return -1; } -- cgit v1.2.1 From 8edfcf92cd168b71987fb3d4cefb6fe98029811f Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Tue, 8 Sep 2015 19:12:51 -0700 Subject: Issue #25029: MemoryError in test_strptime --- Modules/timemodule.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index eca67d9e28..9de3c84332 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -648,9 +648,6 @@ time_strftime(PyObject *self, PyObject *args) * will be ahead of time... */ for (i = 1024; ; i += i) { -#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) - int err; -#endif outbuf = (time_char *)PyMem_Malloc(i*sizeof(time_char)); if (outbuf == NULL) { PyErr_NoMemory(); @@ -660,10 +657,14 @@ time_strftime(PyObject *self, PyObject *args) buflen = format_time(outbuf, i, fmt, &buf); _Py_END_SUPPRESS_IPH #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) - err = errno; + /* VisualStudio .NET 2005 does this properly */ + if (buflen == 0 && errno == EINVAL) { + PyErr_SetString(PyExc_ValueError, "Invalid format string"); + PyMem_Free(outbuf); + break; + } #endif - if (buflen > 0 || fmtlen == 0 || - (fmtlen > 4 && i >= 256 * fmtlen)) { + if (buflen > 0 || i >= 256 * fmtlen) { /* If the buffer is 256 times as long as the format, it's probably not failing for lack of room! More likely, the format yields an empty result, @@ -679,13 +680,6 @@ time_strftime(PyObject *self, PyObject *args) break; } PyMem_Free(outbuf); -#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) - /* VisualStudio .NET 2005 does this properly */ - if (buflen == 0 && err == EINVAL) { - PyErr_SetString(PyExc_ValueError, "Invalid format string"); - break; - } -#endif } #ifdef HAVE_WCSFTIME PyMem_Free(format); -- cgit v1.2.1 From a17d029e863013da92036688e3da45a35744dd8b Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 9 Sep 2015 22:39:44 -0400 Subject: Simply deque repeat by reusing code in in-line repeat. Avoid unnecessary division. --- Modules/_collectionsmodule.c | 48 +++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 30 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index ea3e88fa9a..db27e923e9 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -538,32 +538,6 @@ deque_concat(dequeobject *deque, PyObject *other) static void deque_clear(dequeobject *deque); -static PyObject * -deque_repeat(dequeobject *deque, Py_ssize_t n) -{ - dequeobject *new_deque; - PyObject *result; - - /* XXX add a special case for when maxlen is defined */ - if (n < 0) - n = 0; - else if (n > 0 && Py_SIZE(deque) > MAX_DEQUE_LEN / n) - return PyErr_NoMemory(); - - new_deque = (dequeobject *)deque_new(&deque_type, (PyObject *)NULL, (PyObject *)NULL); - new_deque->maxlen = deque->maxlen; - - for ( ; n ; n--) { - result = deque_extend(new_deque, (PyObject *)deque); - if (result == NULL) { - Py_DECREF(new_deque); - return NULL; - } - Py_DECREF(result); - } - return (PyObject *)new_deque; -} - static PyObject * deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) { @@ -583,10 +557,6 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) return (PyObject *)deque; } - if (size > MAX_DEQUE_LEN / n) { - return PyErr_NoMemory(); - } - if (size == 1) { /* common case, repeating a single element */ PyObject *item = deque->leftblock->data[deque->leftindex]; @@ -594,6 +564,9 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) if (deque->maxlen != -1 && n > deque->maxlen) n = deque->maxlen; + if (n > MAX_DEQUE_LEN) + return PyErr_NoMemory(); + for (i = 0 ; i < n-1 ; i++) { rv = deque_append(deque, item); if (rv == NULL) @@ -604,6 +577,10 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) return (PyObject *)deque; } + if ((size_t)size > MAX_DEQUE_LEN / (size_t)n) { + return PyErr_NoMemory(); + } + seq = PySequence_List((PyObject *)deque); if (seq == NULL) return seq; @@ -621,6 +598,17 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) return (PyObject *)deque; } +static PyObject * +deque_repeat(dequeobject *deque, Py_ssize_t n) +{ + dequeobject *new_deque; + + new_deque = (dequeobject *)deque_copy((PyObject *) deque); + if (new_deque == NULL) + return NULL; + return deque_inplace_repeat(new_deque, n); +} + /* The rotate() method is part of the public API and is used internally as a primitive for other methods. -- cgit v1.2.1 From c29ee114ea953e5db07fa4c2fe95455c438bf2d9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 10 Sep 2015 10:10:39 +0200 Subject: Fix test_time on platform with 32-bit time_t type Filter values which would overflow when converted to a C time_t type. --- Modules/_testcapimodule.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index fed3286ac1..1f013c21d5 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -4114,6 +4114,7 @@ PyInit__testcapi(void) PyModule_AddObject(m, "PY_SSIZE_T_MAX", PyLong_FromSsize_t(PY_SSIZE_T_MAX)); PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyLong_FromSsize_t(PY_SSIZE_T_MIN)); PyModule_AddObject(m, "SIZEOF_PYGC_HEAD", PyLong_FromSsize_t(sizeof(PyGC_Head))); + PyModule_AddObject(m, "SIZEOF_TIME_T", PyLong_FromSsize_t(sizeof(time_t))); Py_INCREF(&PyInstanceMethod_Type); PyModule_AddObject(m, "instancemethod", (PyObject *)&PyInstanceMethod_Type); -- cgit v1.2.1 From e91bfcd850dbc5f5578ac675e6580439d0098243 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 12 Sep 2015 11:00:20 -0400 Subject: In-line the append operations inside deque_inplace_repeat(). --- Modules/_collectionsmodule.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index db27e923e9..7f81460796 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -567,12 +567,26 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) if (n > MAX_DEQUE_LEN) return PyErr_NoMemory(); + deque->state++; for (i = 0 ; i < n-1 ; i++) { - rv = deque_append(deque, item); - if (rv == NULL) - return NULL; - Py_DECREF(rv); + if (deque->rightindex == BLOCKLEN - 1) { + block *b = newblock(Py_SIZE(deque) + i); + if (b == NULL) { + Py_SIZE(deque) += i; + return NULL; + } + b->leftlink = deque->rightblock; + CHECK_END(deque->rightblock->rightlink); + deque->rightblock->rightlink = b; + deque->rightblock = b; + MARK_END(b->rightlink); + deque->rightindex = -1; + } + deque->rightindex++; + Py_INCREF(item); + deque->rightblock->data[deque->rightindex] = item; } + Py_SIZE(deque) += i; Py_INCREF(deque); return (PyObject *)deque; } -- cgit v1.2.1 From 218c0a71ffda6d940daa0e2c6f4dc402f45dcf34 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 13 Sep 2015 02:41:18 -0400 Subject: Fix refcount. --- Modules/_collectionsmodule.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 7f81460796..17233e4089 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -616,11 +616,14 @@ static PyObject * deque_repeat(dequeobject *deque, Py_ssize_t n) { dequeobject *new_deque; + PyObject *rv; new_deque = (dequeobject *)deque_copy((PyObject *) deque); if (new_deque == NULL) return NULL; - return deque_inplace_repeat(new_deque, n); + rv = deque_inplace_repeat(new_deque, n); + Py_DECREF(new_deque); + return rv; } /* The rotate() method is part of the public API and is used internally -- cgit v1.2.1 From aa7be3292ffbd887210609340edf30d58a1eda96 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 13 Sep 2015 19:27:01 -0400 Subject: Add an exact type match fast path for deque_copy(). --- Modules/_collectionsmodule.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 17233e4089..49a46a153e 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1205,6 +1205,22 @@ deque_traverse(dequeobject *deque, visitproc visit, void *arg) static PyObject * deque_copy(PyObject *deque) { + if (Py_TYPE(deque) == &deque_type) { + dequeobject *new_deque; + PyObject *rv; + + new_deque = (dequeobject *)deque_new(&deque_type, (PyObject *)NULL, (PyObject *)NULL); + if (new_deque == NULL) + return NULL; + new_deque->maxlen = ((dequeobject *)deque)->maxlen; + rv = deque_extend(new_deque, deque); + if (rv != NULL) { + Py_DECREF(rv); + return (PyObject *)new_deque; + } + Py_DECREF(new_deque); + return NULL; + } if (((dequeobject *)deque)->maxlen == -1) return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL); else -- cgit v1.2.1 From 37238197be7c4be4841cf232727c3bb82a79ca6d Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 14 Sep 2015 01:03:04 -0400 Subject: Tighten inner-loop for deque_inplace_repeat(). --- Modules/_collectionsmodule.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 49a46a153e..087f8e51a5 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -568,7 +568,7 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) return PyErr_NoMemory(); deque->state++; - for (i = 0 ; i < n-1 ; i++) { + for (i = 0 ; i < n-1 ; ) { if (deque->rightindex == BLOCKLEN - 1) { block *b = newblock(Py_SIZE(deque) + i); if (b == NULL) { @@ -582,9 +582,11 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) MARK_END(b->rightlink); deque->rightindex = -1; } - deque->rightindex++; - Py_INCREF(item); - deque->rightblock->data[deque->rightindex] = item; + for ( ; i < n-1 && deque->rightindex != BLOCKLEN - 1 ; i++) { + deque->rightindex++; + Py_INCREF(item); + deque->rightblock->data[deque->rightindex] = item; + } } Py_SIZE(deque) += i; Py_INCREF(deque); -- cgit v1.2.1 From 4f15b0bd3b6aee9f9635459e23dca1fc8a172988 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 15 Sep 2015 10:11:03 +0200 Subject: Issue #25118: Fix a regression of Python 3.5.0 in os.waitpid() on Windows. Add an unit test on os.waitpid() --- Modules/posixmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index c0baf6ac69..854a7491c5 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -7021,7 +7021,7 @@ os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options) res = _cwait(&status, pid, options); Py_END_ALLOW_THREADS } while (res < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); - if (res != 0) + if (res < 0) return (!async_err) ? posix_error() : NULL; /* shift the status left a byte so this is more like the POSIX waitpid */ @@ -7731,7 +7731,7 @@ os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, } while (fd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); _Py_END_SUPPRESS_IPH - if (fd == -1) { + if (fd < 0) { if (!async_err) PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object); return -1; -- cgit v1.2.1 From 00448c2fb0056c69988252dfb086fd1aa26fba7b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 18 Sep 2015 13:23:02 +0200 Subject: Issue #25155: Add _PyTime_AsTimevalTime_t() function On Windows, the tv_sec field of the timeval structure has the type C long, whereas it has the type C time_t on all other platforms. A C long has a size of 32 bits (signed inter, 1 bit for the sign, 31 bits for the value) which is not enough to store an Epoch timestamp after the year 2038. Add the _PyTime_AsTimevalTime_t() function written for datetime.datetime.now(): convert a _PyTime_t timestamp to a (secs, us) tuple where secs type is time_t. It allows to support dates after the year 2038 on Windows. Enhance also _PyTime_AsTimeval_impl() to detect overflow on the number of seconds when rounding the number of microseconds. --- Modules/_datetimemodule.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index bbc51c6a68..5289222f68 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4117,13 +4117,14 @@ static PyObject * datetime_best_possible(PyObject *cls, TM_FUNC f, PyObject *tzinfo) { _PyTime_t ts = _PyTime_GetSystemClock(); - struct timeval tv; + time_t secs; + int us; - if (_PyTime_AsTimeval(ts, &tv, _PyTime_ROUND_FLOOR) < 0) + if (_PyTime_AsTimevalTime_t(ts, &secs, &us, _PyTime_ROUND_FLOOR) < 0) return NULL; - assert(0 <= tv.tv_usec && tv.tv_usec <= 999999); + assert(0 <= us && us <= 999999); - return datetime_from_timet_and_us(cls, f, tv.tv_sec, tv.tv_usec, tzinfo); + return datetime_from_timet_and_us(cls, f, secs, us, tzinfo); } /*[clinic input] -- cgit v1.2.1 From 7443c71f7f90ed4e84b0878c748b9442861f6d2e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 18 Sep 2015 13:36:17 +0200 Subject: Issue #25155: Add _PyTime_AsTimevalTime_t() function On Windows, the tv_sec field of the timeval structure has the type C long, whereas it has the type C time_t on all other platforms. A C long has a size of 32 bits (signed inter, 1 bit for the sign, 31 bits for the value) which is not enough to store an Epoch timestamp after the year 2038. Add the _PyTime_AsTimevalTime_t() function written for datetime.datetime.now(): convert a _PyTime_t timestamp to a (secs, us) tuple where secs type is time_t. It allows to support dates after the year 2038 on Windows. Enhance also _PyTime_AsTimeval_impl() to detect overflow on the number of seconds when rounding the number of microseconds. --- Modules/_datetimemodule.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 7e4be5baac..662dcbc713 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4113,13 +4113,14 @@ static PyObject * datetime_best_possible(PyObject *cls, TM_FUNC f, PyObject *tzinfo) { _PyTime_t ts = _PyTime_GetSystemClock(); - struct timeval tv; + time_t secs; + int us; - if (_PyTime_AsTimeval(ts, &tv, _PyTime_ROUND_FLOOR) < 0) + if (_PyTime_AsTimevalTime_t(ts, &secs, &us, _PyTime_ROUND_FLOOR) < 0) return NULL; - assert(0 <= tv.tv_usec && tv.tv_usec <= 999999); + assert(0 <= us && us <= 999999); - return datetime_from_timet_and_us(cls, f, tv.tv_sec, tv.tv_usec, tzinfo); + return datetime_from_timet_and_us(cls, f, secs, us, tzinfo); } /*[clinic input] -- cgit v1.2.1 From 62c13791be8348b96e21a8521d26eae21091b6db Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 19 Sep 2015 00:21:33 -0600 Subject: Hoist constant expression out of an inner loop --- Modules/_collectionsmodule.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 087f8e51a5..dbe44e1455 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -371,6 +371,7 @@ static PyObject * deque_extend(dequeobject *deque, PyObject *iterable) { PyObject *it, *item; + int trim = (deque->maxlen != -1); /* Handle case where id(deque) == id(iterable) */ if ((PyObject *)deque == iterable) { @@ -417,7 +418,8 @@ deque_extend(dequeobject *deque, PyObject *iterable) Py_SIZE(deque)++; deque->rightindex++; deque->rightblock->data[deque->rightindex] = item; - deque_trim_left(deque); + if (trim) + deque_trim_left(deque); } if (PyErr_Occurred()) { Py_DECREF(it); @@ -434,6 +436,7 @@ static PyObject * deque_extendleft(dequeobject *deque, PyObject *iterable) { PyObject *it, *item; + int trim = (deque->maxlen != -1); /* Handle case where id(deque) == id(iterable) */ if ((PyObject *)deque == iterable) { @@ -480,7 +483,8 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) Py_SIZE(deque)++; deque->leftindex--; deque->leftblock->data[deque->leftindex] = item; - deque_trim_right(deque); + if (trim) + deque_trim_right(deque); } if (PyErr_Occurred()) { Py_DECREF(it); -- cgit v1.2.1 From d46a2718abd0798929ada1b1affc122daf3e004e Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 19 Sep 2015 09:05:42 -0700 Subject: Add a fast path (no iterator creation) for a common case for repeating deques of size 1 --- Modules/_collectionsmodule.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index dbe44e1455..3e2c69fd63 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1211,6 +1211,7 @@ deque_traverse(dequeobject *deque, visitproc visit, void *arg) static PyObject * deque_copy(PyObject *deque) { + dequeobject *old_deque = (dequeobject *)deque; if (Py_TYPE(deque) == &deque_type) { dequeobject *new_deque; PyObject *rv; @@ -1218,8 +1219,14 @@ deque_copy(PyObject *deque) new_deque = (dequeobject *)deque_new(&deque_type, (PyObject *)NULL, (PyObject *)NULL); if (new_deque == NULL) return NULL; - new_deque->maxlen = ((dequeobject *)deque)->maxlen; - rv = deque_extend(new_deque, deque); + new_deque->maxlen = old_deque->maxlen; + /* Fast path for the deque_repeat() common case where len(deque) == 1 */ + if (Py_SIZE(deque) == 1 && new_deque->maxlen != 0) { + PyObject *item = old_deque->leftblock->data[old_deque->leftindex]; + rv = deque_append(new_deque, item); + } else { + rv = deque_extend(new_deque, deque); + } if (rv != NULL) { Py_DECREF(rv); return (PyObject *)new_deque; @@ -1227,11 +1234,11 @@ deque_copy(PyObject *deque) Py_DECREF(new_deque); return NULL; } - if (((dequeobject *)deque)->maxlen == -1) + if (old_deque->maxlen == -1) return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL); else return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "Oi", - deque, ((dequeobject *)deque)->maxlen, NULL); + deque, old_deque->maxlen, NULL); } PyDoc_STRVAR(copy_doc, "Return a shallow copy of a deque."); -- cgit v1.2.1 From 9490e687b5586ea7100e53090040bbc18c8aca94 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 21 Sep 2015 22:37:15 +0200 Subject: Issue #25207, #14626: Fix ICC compiler warnings in posixmodule.c Replace "#if XXX" with #ifdef XXX". --- Modules/posixmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 6654fbb2ca..e5b47929cd 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -4609,7 +4609,7 @@ utime_fd(utime_t *ut, int fd) #define UTIME_HAVE_NOFOLLOW_SYMLINKS \ (defined(HAVE_UTIMENSAT) || defined(HAVE_LUTIMES)) -#if UTIME_HAVE_NOFOLLOW_SYMLINKS +#ifdef UTIME_HAVE_NOFOLLOW_SYMLINKS static int utime_nofollow_symlinks(utime_t *ut, char *path) @@ -4771,7 +4771,7 @@ os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, utime.now = 1; } -#if !UTIME_HAVE_NOFOLLOW_SYMLINKS +#if !defined(UTIME_HAVE_NOFOLLOW_SYMLINKS) if (follow_symlinks_specified("utime", follow_symlinks)) goto exit; #endif @@ -4825,7 +4825,7 @@ os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, #else /* MS_WINDOWS */ Py_BEGIN_ALLOW_THREADS -#if UTIME_HAVE_NOFOLLOW_SYMLINKS +#ifdef UTIME_HAVE_NOFOLLOW_SYMLINKS if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD)) result = utime_nofollow_symlinks(&utime, path->narrow); else -- cgit v1.2.1 From 0a7ad80d6330d301c9aa09642deda4c2ac03d0c8 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Sep 2015 01:29:33 +0200 Subject: Issue #25207, #14626: Fix my commit. It doesn't work to use #define XXX defined(YYY)" and then "#ifdef XXX" to check YYY. --- Modules/posixmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e5b47929cd..467ce2c576 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -4605,9 +4605,9 @@ utime_fd(utime_t *ut, int fd) #define PATH_UTIME_HAVE_FD 0 #endif - -#define UTIME_HAVE_NOFOLLOW_SYMLINKS \ - (defined(HAVE_UTIMENSAT) || defined(HAVE_LUTIMES)) +#if defined(HAVE_UTIMENSAT) || defined(HAVE_LUTIMES) +# define UTIME_HAVE_NOFOLLOW_SYMLINKS +#endif #ifdef UTIME_HAVE_NOFOLLOW_SYMLINKS -- cgit v1.2.1 From 5f42356a35cf42835f2e7af3153a7c3187890eee Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 21 Sep 2015 23:41:56 -0700 Subject: Minor consistency improvements to negative value comparisons. --- Modules/_collectionsmodule.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 3e2c69fd63..7dbf7555d4 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -209,7 +209,7 @@ deque_pop(dequeobject *deque, PyObject *unused) Py_SIZE(deque)--; deque->state++; - if (deque->rightindex == -1) { + if (deque->rightindex < 0) { if (Py_SIZE(deque)) { prevblock = deque->rightblock->leftlink; assert(deque->leftblock != deque->rightblock); @@ -715,7 +715,7 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n) *(dest++) = *(src++); } while (--m); } - if (rightindex == -1) { + if (rightindex < 0) { assert(leftblock != rightblock); assert(b == NULL); b = rightblock; @@ -827,7 +827,7 @@ deque_reverse(dequeobject *deque, PyObject *unused) /* Step backwards with the right block/index pair */ rightindex--; - if (rightindex == -1) { + if (rightindex < 0) { rightblock = rightblock->leftlink; rightindex = BLOCKLEN - 1; } @@ -1234,7 +1234,7 @@ deque_copy(PyObject *deque) Py_DECREF(new_deque); return NULL; } - if (old_deque->maxlen == -1) + if (old_deque->maxlen < 0) return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL); else return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "Oi", @@ -1258,12 +1258,12 @@ deque_reduce(dequeobject *deque) return NULL; } if (dict == NULL) { - if (deque->maxlen == -1) + if (deque->maxlen < 0) result = Py_BuildValue("O(O)", Py_TYPE(deque), aslist); else result = Py_BuildValue("O(On)", Py_TYPE(deque), aslist, deque->maxlen); } else { - if (deque->maxlen == -1) + if (deque->maxlen < 0) result = Py_BuildValue("O(OO)O", Py_TYPE(deque), aslist, Py_None, dict); else result = Py_BuildValue("O(On)O", Py_TYPE(deque), aslist, deque->maxlen, dict); @@ -1354,7 +1354,7 @@ deque_richcompare(PyObject *v, PyObject *w, int op) } Py_DECREF(x); Py_DECREF(y); - if (b == -1) + if (b < 0) goto done; } /* We reached the end of one deque or both */ @@ -1437,7 +1437,7 @@ deque_bool(dequeobject *deque) static PyObject * deque_get_maxlen(dequeobject *deque) { - if (deque->maxlen == -1) + if (deque->maxlen < 0) Py_RETURN_NONE; return PyLong_FromSsize_t(deque->maxlen); } @@ -1778,7 +1778,7 @@ dequereviter_next(dequeiterobject *it) item = it->b->data[it->index]; it->index--; it->counter--; - if (it->index == -1 && it->counter > 0) { + if (it->index < 0 && it->counter > 0) { CHECK_NOT_END(it->b->leftlink); it->b = it->b->leftlink; it->index = BLOCKLEN - 1; -- cgit v1.2.1 From 17a201ba29817f26f8e51d34f05c61737c44fa02 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 22 Sep 2015 01:20:36 -0700 Subject: Eliminate unnecessary variable --- Modules/_collectionsmodule.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 7dbf7555d4..4eb31bf9c5 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -804,10 +804,9 @@ deque_reverse(dequeobject *deque, PyObject *unused) Py_ssize_t leftindex = deque->leftindex; Py_ssize_t rightindex = deque->rightindex; Py_ssize_t n = Py_SIZE(deque) >> 1; - Py_ssize_t i; PyObject *tmp; - for (i=0 ; i 0) { /* Validate that pointers haven't met in the middle */ assert(leftblock != rightblock || leftindex < rightindex); CHECK_NOT_END(leftblock); -- cgit v1.2.1 From 07f2c4200d762d61664a4eb3d29919d2629d862f Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Tue, 22 Sep 2015 14:51:42 -0700 Subject: Issue #25092: Fix datetime.strftime() failure when errno was already set to EINVAL. --- Modules/timemodule.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 9de3c84332..d2caacdc6d 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -653,6 +653,9 @@ time_strftime(PyObject *self, PyObject *args) PyErr_NoMemory(); break; } +#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) + errno = 0; +#endif _Py_BEGIN_SUPPRESS_IPH buflen = format_time(outbuf, i, fmt, &buf); _Py_END_SUPPRESS_IPH -- cgit v1.2.1 From 658639a1b01260f3fda24ffc10066d21e0e9674b Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 23 Sep 2015 02:42:02 -0700 Subject: Eliminate unnecessary variables --- Modules/_collectionsmodule.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 4eb31bf9c5..be6c90c6fe 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -843,13 +843,12 @@ deque_count(dequeobject *deque, PyObject *v) block *b = deque->leftblock; Py_ssize_t index = deque->leftindex; Py_ssize_t n = Py_SIZE(deque); - Py_ssize_t i; Py_ssize_t count = 0; size_t start_state = deque->state; PyObject *item; int cmp; - for (i=0 ; idata[index]; cmp = PyObject_RichCompareBool(item, v, Py_EQ); @@ -883,12 +882,11 @@ deque_contains(dequeobject *deque, PyObject *v) block *b = deque->leftblock; Py_ssize_t index = deque->leftindex; Py_ssize_t n = Py_SIZE(deque); - Py_ssize_t i; size_t start_state = deque->state; PyObject *item; int cmp; - for (i=0 ; idata[index]; cmp = PyObject_RichCompareBool(item, v, Py_EQ); -- cgit v1.2.1 From f5d603a03ab35f16e96ec6a8ec6701550bbaeaa8 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 23 Sep 2015 19:15:44 -0700 Subject: Replace an unpredictable branch with a simple addition. --- Modules/_collectionsmodule.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index be6c90c6fe..8d753c3e29 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -852,10 +852,9 @@ deque_count(dequeobject *deque, PyObject *v) CHECK_NOT_END(b); item = b->data[index]; cmp = PyObject_RichCompareBool(item, v, Py_EQ); - if (cmp > 0) - count++; - else if (cmp < 0) + if (cmp < 0) return NULL; + count += cmp; if (start_state != deque->state) { PyErr_SetString(PyExc_RuntimeError, -- cgit v1.2.1 From dba3a19c08902e672e74b4a8ef474ff102db4c05 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 26 Sep 2015 00:14:59 -0700 Subject: Issue #25135: Avoid possible reentrancy issues in deque_clear. --- Modules/_collectionsmodule.c | 62 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index f450f25bf2..5dea8cbbd1 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1038,16 +1038,72 @@ PyDoc_STRVAR(remove_doc, static void deque_clear(dequeobject *deque) { + block *b; + block *prevblock; + block *leftblock; + Py_ssize_t leftindex; + Py_ssize_t n; PyObject *item; + /* During the process of clearing a deque, decrefs can cause the + deque to mutate. To avoid fatal confusion, we have to make the + deque empty before clearing the blocks and never refer to + anything via deque->ref while clearing. (This is the same + technique used for clearing lists, sets, and dicts.) + + Making the deque empty requires allocating a new empty block. In + the unlikely event that memory is full, we fall back to an + alternate method that doesn't require a new block. Repeating + pops in a while-loop is slower, possibly re-entrant (and a clever + adversary could cause it to never terminate). + */ + + b = newblock(0); + if (b == NULL) { + PyErr_Clear(); + goto alternate_method; + } + + /* Remember the old size, leftblock, and leftindex */ + leftblock = deque->leftblock; + leftindex = deque->leftindex; + n = Py_SIZE(deque); + + /* Set the deque to be empty using the newly allocated block */ + MARK_END(b->leftlink); + MARK_END(b->rightlink); + Py_SIZE(deque) = 0; + deque->leftblock = b; + deque->rightblock = b; + deque->leftindex = CENTER + 1; + deque->rightindex = CENTER; + deque->state++; + + /* Now the old size, leftblock, and leftindex are disconnected from + the empty deque and we can use them to decref the pointers. + */ + while (n--) { + item = leftblock->data[leftindex]; + Py_DECREF(item); + leftindex++; + if (leftindex == BLOCKLEN && n) { + CHECK_NOT_END(leftblock->rightlink); + prevblock = leftblock; + leftblock = leftblock->rightlink; + leftindex = 0; + freeblock(prevblock); + } + } + CHECK_END(leftblock->rightlink); + freeblock(leftblock); + return; + + alternate_method: while (Py_SIZE(deque)) { item = deque_pop(deque, NULL); assert (item != NULL); Py_DECREF(item); } - assert(deque->leftblock == deque->rightblock); - assert(deque->leftindex - 1 == deque->rightindex); - assert(Py_SIZE(deque) == 0); } static int -- cgit v1.2.1 From 52ce6f77dacbaf1289638d45d0f3eac890a2b5f7 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 26 Sep 2015 01:30:51 -0700 Subject: Hoist constant expression out of an inner loop. --- Modules/_collectionsmodule.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index d50bc428b5..2dcdf8b5f4 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -371,6 +371,7 @@ static PyObject * deque_extend(dequeobject *deque, PyObject *iterable) { PyObject *it, *item; + PyObject *(*iternext)(PyObject *); int trim = (deque->maxlen != -1); /* Handle case where id(deque) == id(iterable) */ @@ -399,7 +400,8 @@ deque_extend(dequeobject *deque, PyObject *iterable) if (deque->maxlen == 0) return consume_iterator(it); - while ((item = PyIter_Next(it)) != NULL) { + iternext = *Py_TYPE(it)->tp_iternext; + while ((item = iternext(it)) != NULL) { deque->state++; if (deque->rightindex == BLOCKLEN - 1) { block *b = newblock(Py_SIZE(deque)); @@ -422,8 +424,12 @@ deque_extend(dequeobject *deque, PyObject *iterable) deque_trim_left(deque); } if (PyErr_Occurred()) { - Py_DECREF(it); - return NULL; + if (PyErr_ExceptionMatches(PyExc_StopIteration)) + PyErr_Clear(); + else { + Py_DECREF(it); + return NULL; + } } Py_DECREF(it); Py_RETURN_NONE; @@ -436,6 +442,7 @@ static PyObject * deque_extendleft(dequeobject *deque, PyObject *iterable) { PyObject *it, *item; + PyObject *(*iternext)(PyObject *); int trim = (deque->maxlen != -1); /* Handle case where id(deque) == id(iterable) */ @@ -464,7 +471,8 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) if (deque->maxlen == 0) return consume_iterator(it); - while ((item = PyIter_Next(it)) != NULL) { + iternext = *Py_TYPE(it)->tp_iternext; + while ((item = iternext(it)) != NULL) { deque->state++; if (deque->leftindex == 0) { block *b = newblock(Py_SIZE(deque)); @@ -487,8 +495,12 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) deque_trim_right(deque); } if (PyErr_Occurred()) { - Py_DECREF(it); - return NULL; + if (PyErr_ExceptionMatches(PyExc_StopIteration)) + PyErr_Clear(); + else { + Py_DECREF(it); + return NULL; + } } Py_DECREF(it); Py_RETURN_NONE; -- cgit v1.2.1 From 2fd6a540783181c5c24df49097daf5c1ed755bc8 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 26 Sep 2015 02:14:50 -0700 Subject: Precomputing the number iterations allows the inner-loop to be vectorizable. --- Modules/_collectionsmodule.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 2dcdf8b5f4..487c7657b0 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -557,7 +557,7 @@ static void deque_clear(dequeobject *deque); static PyObject * deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) { - Py_ssize_t i, size; + Py_ssize_t i, m, size; PyObject *seq; PyObject *rv; @@ -598,7 +598,11 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) MARK_END(b->rightlink); deque->rightindex = -1; } - for ( ; i < n-1 && deque->rightindex != BLOCKLEN - 1 ; i++) { + m = n - 1 - i; + if (m > BLOCKLEN - 1 - deque->rightindex) + m = BLOCKLEN - 1 - deque->rightindex; + i += m; + while (m--) { deque->rightindex++; Py_INCREF(item); deque->rightblock->data[deque->rightindex] = item; -- cgit v1.2.1 From a31ee43653a2c3ca4abb98bc113bb0fb3099e030 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 26 Sep 2015 17:47:02 -0700 Subject: Bump up the maximum number of freeblocks --- Modules/_collectionsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 487c7657b0..9210e24b2e 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -121,7 +121,7 @@ static PyTypeObject deque_type; added at about the same rate as old blocks are being freed. */ -#define MAXFREEBLOCKS 10 +#define MAXFREEBLOCKS 16 static Py_ssize_t numfreeblocks = 0; static block *freeblocks[MAXFREEBLOCKS]; -- cgit v1.2.1 From dd8b86d4630db033d3c52b22efb2f037c7f5ba8e Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 26 Sep 2015 21:11:05 -0700 Subject: Minor tweak to the order of variable updates. --- Modules/_collectionsmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 9210e24b2e..66c2a7458a 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -315,8 +315,8 @@ deque_append(dequeobject *deque, PyObject *item) MARK_END(b->rightlink); deque->rightindex = -1; } - Py_INCREF(item); Py_SIZE(deque)++; + Py_INCREF(item); deque->rightindex++; deque->rightblock->data[deque->rightindex] = item; deque_trim_left(deque); @@ -340,8 +340,8 @@ deque_appendleft(dequeobject *deque, PyObject *item) MARK_END(b->leftlink); deque->leftindex = BLOCKLEN; } - Py_INCREF(item); Py_SIZE(deque)++; + Py_INCREF(item); deque->leftindex--; deque->leftblock->data[deque->leftindex] = item; deque_trim_right(deque); -- cgit v1.2.1 From 31721f2016dd4d6667a2467d933cc78da1318e9f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 26 Sep 2015 21:31:23 -0700 Subject: Move the copy and clear functions upwards to eliminate unnecessary forward references. --- Modules/_collectionsmodule.c | 230 +++++++++++++++++++++---------------------- 1 file changed, 113 insertions(+), 117 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 66c2a7458a..5db7aed377 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -522,7 +522,40 @@ deque_inplace_concat(dequeobject *deque, PyObject *other) return (PyObject *)deque; } -static PyObject *deque_copy(PyObject *deque); +static PyObject * +deque_copy(PyObject *deque) +{ + dequeobject *old_deque = (dequeobject *)deque; + if (Py_TYPE(deque) == &deque_type) { + dequeobject *new_deque; + PyObject *rv; + + new_deque = (dequeobject *)deque_new(&deque_type, (PyObject *)NULL, (PyObject *)NULL); + if (new_deque == NULL) + return NULL; + new_deque->maxlen = old_deque->maxlen; + /* Fast path for the deque_repeat() common case where len(deque) == 1 */ + if (Py_SIZE(deque) == 1 && new_deque->maxlen != 0) { + PyObject *item = old_deque->leftblock->data[old_deque->leftindex]; + rv = deque_append(new_deque, item); + } else { + rv = deque_extend(new_deque, deque); + } + if (rv != NULL) { + Py_DECREF(rv); + return (PyObject *)new_deque; + } + Py_DECREF(new_deque); + return NULL; + } + if (old_deque->maxlen < 0) + return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL); + else + return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "Oi", + deque, old_deque->maxlen, NULL); +} + +PyDoc_STRVAR(copy_doc, "Return a shallow copy of a deque."); static PyObject * deque_concat(dequeobject *deque, PyObject *other) @@ -552,7 +585,85 @@ deque_concat(dequeobject *deque, PyObject *other) return new_deque; } -static void deque_clear(dequeobject *deque); +static void +deque_clear(dequeobject *deque) +{ + block *b; + block *prevblock; + block *leftblock; + Py_ssize_t leftindex; + Py_ssize_t n; + PyObject *item; + + /* During the process of clearing a deque, decrefs can cause the + deque to mutate. To avoid fatal confusion, we have to make the + deque empty before clearing the blocks and never refer to + anything via deque->ref while clearing. (This is the same + technique used for clearing lists, sets, and dicts.) + + Making the deque empty requires allocating a new empty block. In + the unlikely event that memory is full, we fall back to an + alternate method that doesn't require a new block. Repeating + pops in a while-loop is slower, possibly re-entrant (and a clever + adversary could cause it to never terminate). + */ + + b = newblock(0); + if (b == NULL) { + PyErr_Clear(); + goto alternate_method; + } + + /* Remember the old size, leftblock, and leftindex */ + leftblock = deque->leftblock; + leftindex = deque->leftindex; + n = Py_SIZE(deque); + + /* Set the deque to be empty using the newly allocated block */ + MARK_END(b->leftlink); + MARK_END(b->rightlink); + Py_SIZE(deque) = 0; + deque->leftblock = b; + deque->rightblock = b; + deque->leftindex = CENTER + 1; + deque->rightindex = CENTER; + deque->state++; + + /* Now the old size, leftblock, and leftindex are disconnected from + the empty deque and we can use them to decref the pointers. + */ + while (n--) { + item = leftblock->data[leftindex]; + Py_DECREF(item); + leftindex++; + if (leftindex == BLOCKLEN && n) { + CHECK_NOT_END(leftblock->rightlink); + prevblock = leftblock; + leftblock = leftblock->rightlink; + leftindex = 0; + freeblock(prevblock); + } + } + CHECK_END(leftblock->rightlink); + freeblock(leftblock); + return; + + alternate_method: + while (Py_SIZE(deque)) { + item = deque_pop(deque, NULL); + assert (item != NULL); + Py_DECREF(item); + } +} + +static PyObject * +deque_clearmethod(dequeobject *deque) +{ + deque_clear(deque); + Py_RETURN_NONE; +} + +PyDoc_STRVAR(clear_doc, "Remove all elements from the deque."); static PyObject * deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) @@ -1058,77 +1169,6 @@ deque_remove(dequeobject *deque, PyObject *value) PyDoc_STRVAR(remove_doc, "D.remove(value) -- remove first occurrence of value."); -static void -deque_clear(dequeobject *deque) -{ - block *b; - block *prevblock; - block *leftblock; - Py_ssize_t leftindex; - Py_ssize_t n; - PyObject *item; - - /* During the process of clearing a deque, decrefs can cause the - deque to mutate. To avoid fatal confusion, we have to make the - deque empty before clearing the blocks and never refer to - anything via deque->ref while clearing. (This is the same - technique used for clearing lists, sets, and dicts.) - - Making the deque empty requires allocating a new empty block. In - the unlikely event that memory is full, we fall back to an - alternate method that doesn't require a new block. Repeating - pops in a while-loop is slower, possibly re-entrant (and a clever - adversary could cause it to never terminate). - */ - - b = newblock(0); - if (b == NULL) { - PyErr_Clear(); - goto alternate_method; - } - - /* Remember the old size, leftblock, and leftindex */ - leftblock = deque->leftblock; - leftindex = deque->leftindex; - n = Py_SIZE(deque); - - /* Set the deque to be empty using the newly allocated block */ - MARK_END(b->leftlink); - MARK_END(b->rightlink); - Py_SIZE(deque) = 0; - deque->leftblock = b; - deque->rightblock = b; - deque->leftindex = CENTER + 1; - deque->rightindex = CENTER; - deque->state++; - - /* Now the old size, leftblock, and leftindex are disconnected from - the empty deque and we can use them to decref the pointers. - */ - while (n--) { - item = leftblock->data[leftindex]; - Py_DECREF(item); - leftindex++; - if (leftindex == BLOCKLEN && n) { - CHECK_NOT_END(leftblock->rightlink); - prevblock = leftblock; - leftblock = leftblock->rightlink; - leftindex = 0; - freeblock(prevblock); - } - } - CHECK_END(leftblock->rightlink); - freeblock(leftblock); - return; - - alternate_method: - while (Py_SIZE(deque)) { - item = deque_pop(deque, NULL); - assert (item != NULL); - Py_DECREF(item); - } -} - static int valid_index(Py_ssize_t i, Py_ssize_t limit) { @@ -1229,15 +1269,6 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) return 0; } -static PyObject * -deque_clearmethod(dequeobject *deque) -{ - deque_clear(deque); - Py_RETURN_NONE; -} - -PyDoc_STRVAR(clear_doc, "Remove all elements from the deque."); - static void deque_dealloc(dequeobject *deque) { @@ -1276,41 +1307,6 @@ deque_traverse(dequeobject *deque, visitproc visit, void *arg) return 0; } -static PyObject * -deque_copy(PyObject *deque) -{ - dequeobject *old_deque = (dequeobject *)deque; - if (Py_TYPE(deque) == &deque_type) { - dequeobject *new_deque; - PyObject *rv; - - new_deque = (dequeobject *)deque_new(&deque_type, (PyObject *)NULL, (PyObject *)NULL); - if (new_deque == NULL) - return NULL; - new_deque->maxlen = old_deque->maxlen; - /* Fast path for the deque_repeat() common case where len(deque) == 1 */ - if (Py_SIZE(deque) == 1 && new_deque->maxlen != 0) { - PyObject *item = old_deque->leftblock->data[old_deque->leftindex]; - rv = deque_append(new_deque, item); - } else { - rv = deque_extend(new_deque, deque); - } - if (rv != NULL) { - Py_DECREF(rv); - return (PyObject *)new_deque; - } - Py_DECREF(new_deque); - return NULL; - } - if (old_deque->maxlen < 0) - return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL); - else - return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "Oi", - deque, old_deque->maxlen, NULL); -} - -PyDoc_STRVAR(copy_doc, "Return a shallow copy of a deque."); - static PyObject * deque_reduce(dequeobject *deque) { -- cgit v1.2.1 From a552075d4c0dbc14d9d6fd4949be96cebc2db145 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 27 Sep 2015 00:09:02 -0700 Subject: detect alpn by feature flag not openssl version (closes #23329) --- Modules/_ssl.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index ca3549c657..e43c5026b7 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -109,8 +109,7 @@ struct py_ssl_library_code { # define HAVE_SNI 0 #endif -/* ALPN added in OpenSSL 1.0.2 */ -#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(OPENSSL_NO_TLSEXT) +#ifdef TLSEXT_TYPE_application_layer_protocol_negotiation # define HAVE_ALPN #endif -- cgit v1.2.1 From 7b854666a154ebda153f417c52e8394ddf2cdc4d Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sun, 27 Sep 2015 22:32:15 -0400 Subject: Closes issue #23600: Wrong results from tzinfo.fromutc(). --- Modules/_datetimemodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 1d583a5746..e3de537a8d 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3046,7 +3046,7 @@ tzinfo_fromutc(PyDateTime_TZInfo *self, PyObject *dt) goto Fail; if (dst == Py_None) goto Inconsistent; - if (delta_bool(delta) != 0) { + if (delta_bool((PyDateTime_Delta *)dst) != 0) { PyObject *temp = result; result = add_datetime_timedelta((PyDateTime_DateTime *)result, (PyDateTime_Delta *)dst, 1); -- cgit v1.2.1 From db9ecf74f98c73eebe111c51a8a93ca6e70e02d3 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 29 Sep 2015 22:45:05 -0700 Subject: Add an early-out for deque_clear() --- Modules/_collectionsmodule.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 5db7aed377..d9df5749e1 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -595,6 +595,9 @@ deque_clear(dequeobject *deque) Py_ssize_t n; PyObject *item; + if (Py_SIZE(deque) == 0) + return; + /* During the process of clearing a deque, decrefs can cause the deque to mutate. To avoid fatal confusion, we have to make the deque empty before clearing the blocks and never refer to -- cgit v1.2.1 From 82e2c7f7249cd1820bcba75ab32078cacece8f30 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 30 Sep 2015 23:15:02 -0700 Subject: Add fast paths to deque_init() for the common cases --- Modules/_collectionsmodule.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index d9df5749e1..0c64713c79 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1456,8 +1456,14 @@ deque_init(dequeobject *deque, PyObject *args, PyObject *kwdargs) Py_ssize_t maxlen = -1; char *kwlist[] = {"iterable", "maxlen", 0}; - if (!PyArg_ParseTupleAndKeywords(args, kwdargs, "|OO:deque", kwlist, &iterable, &maxlenobj)) - return -1; + if (kwdargs == NULL) { + if (!PyArg_UnpackTuple(args, "deque()", 0, 2, &iterable, &maxlenobj)) + return -1; + } else { + if (!PyArg_ParseTupleAndKeywords(args, kwdargs, "|OO:deque", kwlist, + &iterable, &maxlenobj)) + return -1; + } if (maxlenobj != NULL && maxlenobj != Py_None) { maxlen = PyLong_AsSsize_t(maxlenobj); if (maxlen == -1 && PyErr_Occurred()) @@ -1468,7 +1474,8 @@ deque_init(dequeobject *deque, PyObject *args, PyObject *kwdargs) } } deque->maxlen = maxlen; - deque_clear(deque); + if (Py_SIZE(deque) > 0) + deque_clear(deque); if (iterable != NULL) { PyObject *rv = deque_extend(deque, iterable); if (rv == NULL) -- cgit v1.2.1 From 0230133ecd01da251a0090227ad68c57d07747d0 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 2 Oct 2015 12:47:11 +0300 Subject: Issue #24483: C implementation of functools.lru_cache() now calculates key's hash only once. --- Modules/_functoolsmodule.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index dc64cfee2d..1f9806728f 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -601,6 +601,7 @@ struct lru_cache_object; typedef struct lru_list_elem { PyObject_HEAD struct lru_list_elem *prev, *next; /* borrowed links */ + Py_hash_t hash; PyObject *key, *result; } lru_list_elem; @@ -762,10 +763,14 @@ static PyObject * infinite_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds) { PyObject *result; + Py_hash_t hash; PyObject *key = lru_cache_make_key(args, kwds, self->typed); if (!key) return NULL; - result = PyDict_GetItemWithError(self->cache, key); + hash = PyObject_Hash(key); + if (hash == -1) + return NULL; + result = _PyDict_GetItem_KnownHash(self->cache, key, hash); if (result) { Py_INCREF(result); self->hits++; @@ -781,7 +786,7 @@ infinite_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwd Py_DECREF(key); return NULL; } - if (PyDict_SetItem(self->cache, key, result) < 0) { + if (_PyDict_SetItem_KnownHash(self->cache, key, result, hash) < 0) { Py_DECREF(result); Py_DECREF(key); return NULL; @@ -813,11 +818,15 @@ bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds { lru_list_elem *link; PyObject *key, *result; + Py_hash_t hash; key = lru_cache_make_key(args, kwds, self->typed); if (!key) return NULL; - link = (lru_list_elem *)PyDict_GetItemWithError(self->cache, key); + hash = PyObject_Hash(key); + if (hash == -1) + return NULL; + link = (lru_list_elem *)_PyDict_GetItem_KnownHash(self->cache, key, hash); if (link) { lru_cache_extricate_link(link); lru_cache_append_link(self, link); @@ -845,7 +854,8 @@ bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds /* Remove it from the cache. The cache dict holds one reference to the link, and the linked list holds yet one reference to it. */ - if (PyDict_DelItem(self->cache, link->key) < 0) { + if (_PyDict_DelItem_KnownHash(self->cache, link->key, + link->hash) < 0) { lru_cache_append_link(self, link); Py_DECREF(key); Py_DECREF(result); @@ -859,9 +869,11 @@ bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds oldkey = link->key; oldresult = link->result; + link->hash = hash; link->key = key; link->result = result; - if (PyDict_SetItem(self->cache, key, (PyObject *)link) < 0) { + if (_PyDict_SetItem_KnownHash(self->cache, key, (PyObject *)link, + hash) < 0) { Py_DECREF(link); Py_DECREF(oldkey); Py_DECREF(oldresult); @@ -881,10 +893,12 @@ bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds return NULL; } + link->hash = hash; link->key = key; link->result = result; _PyObject_GC_TRACK(link); - if (PyDict_SetItem(self->cache, key, (PyObject *)link) < 0) { + if (_PyDict_SetItem_KnownHash(self->cache, key, (PyObject *)link, + hash) < 0) { Py_DECREF(link); return NULL; } -- cgit v1.2.1 From aa8d88051024c2f555275ab5ebff9416be82bb18 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 2 Oct 2015 23:17:33 -0700 Subject: Factor out common iterator finalization code --- Modules/_collectionsmodule.c | 45 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 25 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 0c64713c79..93126361c0 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -350,21 +350,34 @@ deque_appendleft(dequeobject *deque, PyObject *item) PyDoc_STRVAR(appendleft_doc, "Add an element to the left side of the deque."); +static PyObject* +finalize_iterator(PyObject *it) +{ + if (PyErr_Occurred()) { + if (PyErr_ExceptionMatches(PyExc_StopIteration)) + PyErr_Clear(); + else { + Py_DECREF(it); + return NULL; + } + } + Py_DECREF(it); + Py_RETURN_NONE; +} /* Run an iterator to exhaustion. Shortcut for the extend/extendleft methods when maxlen == 0. */ static PyObject* consume_iterator(PyObject *it) { + PyObject *(*iternext)(PyObject *); PyObject *item; - while ((item = PyIter_Next(it)) != NULL) { + iternext = *Py_TYPE(it)->tp_iternext; + while ((item = iternext(it)) != NULL) { Py_DECREF(item); } - Py_DECREF(it); - if (PyErr_Occurred()) - return NULL; - Py_RETURN_NONE; + return finalize_iterator(it); } static PyObject * @@ -423,16 +436,7 @@ deque_extend(dequeobject *deque, PyObject *iterable) if (trim) deque_trim_left(deque); } - if (PyErr_Occurred()) { - if (PyErr_ExceptionMatches(PyExc_StopIteration)) - PyErr_Clear(); - else { - Py_DECREF(it); - return NULL; - } - } - Py_DECREF(it); - Py_RETURN_NONE; + return finalize_iterator(it); } PyDoc_STRVAR(extend_doc, @@ -494,16 +498,7 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) if (trim) deque_trim_right(deque); } - if (PyErr_Occurred()) { - if (PyErr_ExceptionMatches(PyExc_StopIteration)) - PyErr_Clear(); - else { - Py_DECREF(it); - return NULL; - } - } - Py_DECREF(it); - Py_RETURN_NONE; + return finalize_iterator(it); } PyDoc_STRVAR(extendleft_doc, -- cgit v1.2.1 From ff6c92e41b983fe81c6a9ed283a7ef88537e5e84 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 5 Oct 2015 22:52:37 -0400 Subject: Eliminate unnecessary test --- Modules/_collectionsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 93126361c0..4ea9140a88 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -530,7 +530,7 @@ deque_copy(PyObject *deque) return NULL; new_deque->maxlen = old_deque->maxlen; /* Fast path for the deque_repeat() common case where len(deque) == 1 */ - if (Py_SIZE(deque) == 1 && new_deque->maxlen != 0) { + if (Py_SIZE(deque) == 1) { PyObject *item = old_deque->leftblock->data[old_deque->leftindex]; rv = deque_append(new_deque, item); } else { -- cgit v1.2.1 From 51dc66135fd222c634512dfacba7a799372d230f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 6 Oct 2015 23:06:17 -0400 Subject: Backport early-out 91259f061cfb to reduce the cost of bb1a2944bcb6 --- Modules/_collectionsmodule.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 5dea8cbbd1..66f5939c60 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1045,6 +1045,9 @@ deque_clear(dequeobject *deque) Py_ssize_t n; PyObject *item; + if (Py_SIZE(deque) == 0) + return; + /* During the process of clearing a deque, decrefs can cause the deque to mutate. To avoid fatal confusion, we have to make the deque empty before clearing the blocks and never refer to @@ -1423,7 +1426,8 @@ deque_init(dequeobject *deque, PyObject *args, PyObject *kwdargs) } } deque->maxlen = maxlen; - deque_clear(deque); + if (Py_SIZE(deque) > 0) + deque_clear(deque); if (iterable != NULL) { PyObject *rv = deque_extend(deque, iterable); if (rv == NULL) -- cgit v1.2.1 From a608f27deca5a929a2324bfbb4373cd25e113592 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Sat, 10 Oct 2015 10:17:57 +0000 Subject: Issue #22413: Remove comment made out of date by Argument Clinic --- Modules/_io/stringio.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c index 21c2b19a40..73018a5390 100644 --- a/Modules/_io/stringio.c +++ b/Modules/_io/stringio.c @@ -696,10 +696,8 @@ _io_StringIO___init___impl(stringio *self, PyObject *value, char *newline = "\n"; Py_ssize_t value_len; - /* Parse the newline argument. This used to be done with the 'z' - specifier, however this allowed any object with the buffer interface to - be converted. Thus we have to parse it manually since we only want to - allow unicode objects or None. */ + /* Parse the newline argument. We only want to allow unicode objects or + None. */ if (newline_obj == Py_None) { newline = NULL; } -- cgit v1.2.1 From d27a1d900d4ab8640d81864e9bf33ecf43663bd3 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 10 Oct 2015 22:42:18 +0300 Subject: Issue #24164: Objects that need calling ``__new__`` with keyword arguments, can now be pickled using pickle protocols older than protocol version 4. --- Modules/_pickle.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index f3b73f176d..abaf4e5229 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -153,6 +153,9 @@ typedef struct { PyObject *codecs_encode; /* builtins.getattr, used for saving nested names with protocol < 4 */ PyObject *getattr; + /* functools.partial, used for implementing __newobj_ex__ with protocols + 2 and 3 */ + PyObject *partial; } PickleState; /* Forward declaration of the _pickle module definition. */ @@ -200,6 +203,7 @@ _Pickle_InitState(PickleState *st) PyObject *copyreg = NULL; PyObject *compat_pickle = NULL; PyObject *codecs = NULL; + PyObject *functools = NULL; builtins = PyEval_GetBuiltins(); if (builtins == NULL) @@ -314,12 +318,21 @@ _Pickle_InitState(PickleState *st) } Py_CLEAR(codecs); + functools = PyImport_ImportModule("functools"); + if (!functools) + goto error; + st->partial = PyObject_GetAttrString(functools, "partial"); + if (!st->partial) + goto error; + Py_CLEAR(functools); + return 0; error: Py_CLEAR(copyreg); Py_CLEAR(compat_pickle); Py_CLEAR(codecs); + Py_CLEAR(functools); _Pickle_ClearState(st); return -1; } @@ -3533,11 +3546,9 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj) PyErr_Clear(); } else if (PyUnicode_Check(name)) { - if (self->proto >= 4) { - _Py_IDENTIFIER(__newobj_ex__); - use_newobj_ex = PyUnicode_Compare( - name, _PyUnicode_FromId(&PyId___newobj_ex__)) == 0; - } + _Py_IDENTIFIER(__newobj_ex__); + use_newobj_ex = PyUnicode_Compare( + name, _PyUnicode_FromId(&PyId___newobj_ex__)) == 0; if (!use_newobj_ex) { _Py_IDENTIFIER(__newobj__); use_newobj = PyUnicode_Compare( @@ -3581,11 +3592,58 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj) return -1; } - if (save(self, cls, 0) < 0 || - save(self, args, 0) < 0 || - save(self, kwargs, 0) < 0 || - _Pickler_Write(self, &newobj_ex_op, 1) < 0) { - return -1; + if (self->proto >= 4) { + if (save(self, cls, 0) < 0 || + save(self, args, 0) < 0 || + save(self, kwargs, 0) < 0 || + _Pickler_Write(self, &newobj_ex_op, 1) < 0) { + return -1; + } + } + else { + PyObject *newargs; + PyObject *cls_new; + Py_ssize_t i; + _Py_IDENTIFIER(__new__); + + newargs = PyTuple_New(Py_SIZE(args) + 2); + if (newargs == NULL) + return -1; + + cls_new = _PyObject_GetAttrId(cls, &PyId___new__); + if (cls_new == NULL) { + Py_DECREF(newargs); + return -1; + } + PyTuple_SET_ITEM(newargs, 0, cls_new); + Py_INCREF(cls); + PyTuple_SET_ITEM(newargs, 1, cls); + for (i = 0; i < Py_SIZE(args); i++) { + PyObject *item = PyTuple_GET_ITEM(args, i); + Py_INCREF(item); + PyTuple_SET_ITEM(newargs, i + 2, item); + } + + callable = PyObject_Call(st->partial, newargs, kwargs); + Py_DECREF(newargs); + if (callable == NULL) + return -1; + + newargs = PyTuple_New(0); + if (newargs == NULL) { + Py_DECREF(callable); + return -1; + } + + if (save(self, callable, 0) < 0 || + save(self, newargs, 0) < 0 || + _Pickler_Write(self, &reduce_op, 1) < 0) { + Py_DECREF(newargs); + Py_DECREF(callable); + return -1; + } + Py_DECREF(newargs); + Py_DECREF(callable); } } else if (use_newobj) { -- cgit v1.2.1 From 48734b496972f04f4483f5dbb2c7ec619d55043c Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 10 Oct 2015 23:56:02 -0400 Subject: Minor tweak. Make the maxlen comparisons a little more clear and consistent. --- Modules/_collectionsmodule.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 4ea9140a88..52f40b2899 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -281,7 +281,7 @@ PyDoc_STRVAR(popleft_doc, "Remove and return the leftmost element."); static void deque_trim_right(dequeobject *deque) { - if (deque->maxlen != -1 && Py_SIZE(deque) > deque->maxlen) { + if (deque->maxlen >= 0 && Py_SIZE(deque) > deque->maxlen) { PyObject *rv = deque_pop(deque, NULL); assert(rv != NULL); assert(Py_SIZE(deque) <= deque->maxlen); @@ -292,7 +292,7 @@ deque_trim_right(dequeobject *deque) static void deque_trim_left(dequeobject *deque) { - if (deque->maxlen != -1 && Py_SIZE(deque) > deque->maxlen) { + if (deque->maxlen >= 0 && Py_SIZE(deque) > deque->maxlen) { PyObject *rv = deque_popleft(deque, NULL); assert(rv != NULL); assert(Py_SIZE(deque) <= deque->maxlen); @@ -385,7 +385,7 @@ deque_extend(dequeobject *deque, PyObject *iterable) { PyObject *it, *item; PyObject *(*iternext)(PyObject *); - int trim = (deque->maxlen != -1); + int trim = (deque->maxlen >= 0); /* Handle case where id(deque) == id(iterable) */ if ((PyObject *)deque == iterable) { @@ -447,7 +447,7 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) { PyObject *it, *item; PyObject *(*iternext)(PyObject *); - int trim = (deque->maxlen != -1); + int trim = (deque->maxlen >= 0); /* Handle case where id(deque) == id(iterable) */ if ((PyObject *)deque == iterable) { @@ -686,7 +686,7 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) /* common case, repeating a single element */ PyObject *item = deque->leftblock->data[deque->leftindex]; - if (deque->maxlen != -1 && n > deque->maxlen) + if (deque->maxlen >= 0 && n > deque->maxlen) n = deque->maxlen; if (n > MAX_DEQUE_LEN) @@ -1355,7 +1355,7 @@ deque_repr(PyObject *deque) Py_ReprLeave(deque); return NULL; } - if (((dequeobject *)deque)->maxlen != -1) + if (((dequeobject *)deque)->maxlen >= 0) result = PyUnicode_FromFormat("deque(%R, maxlen=%zd)", aslist, ((dequeobject *)deque)->maxlen); else -- cgit v1.2.1 From daff71229da285774f401e277fa8626abbca91db Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 11 Oct 2015 09:54:42 +0200 Subject: Close #24784: Fix compilation without thread support Add "#ifdef WITH_THREAD" around cals to: * PyGILState_Check() * _PyImport_AcquireLock() * _PyImport_ReleaseLock() --- Modules/_posixsubprocess.c | 12 ++++++++++-- Modules/socketmodule.c | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index a327fc56b2..800b3019c8 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -549,7 +549,9 @@ subprocess_fork_exec(PyObject* self, PyObject *args) int need_to_reenable_gc = 0; char *const *exec_array, *const *argv = NULL, *const *envp = NULL; Py_ssize_t arg_num; +#ifdef WITH_THREAD int import_lock_held = 0; +#endif if (!PyArg_ParseTuple( args, "OOpOOOiiiiiiiiiiO:fork_exec", @@ -644,8 +646,10 @@ subprocess_fork_exec(PyObject* self, PyObject *args) preexec_fn_args_tuple = PyTuple_New(0); if (!preexec_fn_args_tuple) goto cleanup; +#ifdef WITH_THREAD _PyImport_AcquireLock(); import_lock_held = 1; +#endif } if (cwd_obj != Py_None) { @@ -688,12 +692,14 @@ subprocess_fork_exec(PyObject* self, PyObject *args) /* Capture the errno exception before errno can be clobbered. */ PyErr_SetFromErrno(PyExc_OSError); } - if (preexec_fn != Py_None && - _PyImport_ReleaseLock() < 0 && !PyErr_Occurred()) { +#ifdef WITH_THREAD + if (preexec_fn != Py_None + && _PyImport_ReleaseLock() < 0 && !PyErr_Occurred()) { PyErr_SetString(PyExc_RuntimeError, "not holding the import lock"); } import_lock_held = 0; +#endif /* Parent process */ if (envp) @@ -716,8 +722,10 @@ subprocess_fork_exec(PyObject* self, PyObject *args) return PyLong_FromPid(pid); cleanup: +#ifdef WITH_THREAD if (import_lock_held) _PyImport_ReleaseLock(); +#endif if (envp) _Py_FreeCharPArray(envp); if (argv) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index d9c70f8665..bae9634ef2 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -719,8 +719,10 @@ sock_call_ex(PySocketSockObject *s, int deadline_initialized = 0; int res; +#ifdef WITH_THREAD /* sock_call() must be called with the GIL held. */ assert(PyGILState_Check()); +#endif /* outer loop to retry select() when select() is interrupted by a signal or to retry select()+sock_func() on false positive (see above) */ -- cgit v1.2.1 From eb8dfb9fcd51df7d6f84365179368e5d823ddaa3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 11 Oct 2015 09:54:42 +0200 Subject: Close #24784: Fix compilation without thread support Add "#ifdef WITH_THREAD" around cals to: * PyGILState_Check() * _PyImport_AcquireLock() * _PyImport_ReleaseLock() --- Modules/_posixsubprocess.c | 12 ++++++++++-- Modules/socketmodule.c | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index a327fc56b2..800b3019c8 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -549,7 +549,9 @@ subprocess_fork_exec(PyObject* self, PyObject *args) int need_to_reenable_gc = 0; char *const *exec_array, *const *argv = NULL, *const *envp = NULL; Py_ssize_t arg_num; +#ifdef WITH_THREAD int import_lock_held = 0; +#endif if (!PyArg_ParseTuple( args, "OOpOOOiiiiiiiiiiO:fork_exec", @@ -644,8 +646,10 @@ subprocess_fork_exec(PyObject* self, PyObject *args) preexec_fn_args_tuple = PyTuple_New(0); if (!preexec_fn_args_tuple) goto cleanup; +#ifdef WITH_THREAD _PyImport_AcquireLock(); import_lock_held = 1; +#endif } if (cwd_obj != Py_None) { @@ -688,12 +692,14 @@ subprocess_fork_exec(PyObject* self, PyObject *args) /* Capture the errno exception before errno can be clobbered. */ PyErr_SetFromErrno(PyExc_OSError); } - if (preexec_fn != Py_None && - _PyImport_ReleaseLock() < 0 && !PyErr_Occurred()) { +#ifdef WITH_THREAD + if (preexec_fn != Py_None + && _PyImport_ReleaseLock() < 0 && !PyErr_Occurred()) { PyErr_SetString(PyExc_RuntimeError, "not holding the import lock"); } import_lock_held = 0; +#endif /* Parent process */ if (envp) @@ -716,8 +722,10 @@ subprocess_fork_exec(PyObject* self, PyObject *args) return PyLong_FromPid(pid); cleanup: +#ifdef WITH_THREAD if (import_lock_held) _PyImport_ReleaseLock(); +#endif if (envp) _Py_FreeCharPArray(envp); if (argv) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index d9c70f8665..bae9634ef2 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -719,8 +719,10 @@ sock_call_ex(PySocketSockObject *s, int deadline_initialized = 0; int res; +#ifdef WITH_THREAD /* sock_call() must be called with the GIL held. */ assert(PyGILState_Check()); +#endif /* outer loop to retry select() when select() is interrupted by a signal or to retry select()+sock_func() on false positive (see above) */ -- cgit v1.2.1 From af5459473f8c6309be0f59eb5898eba9c65f82f8 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 11 Oct 2015 11:01:02 +0200 Subject: Issue #25357: Add an optional newline paramer to binascii.b2a_base64(). base64.b64encode() uses it to avoid a memory copy. --- Modules/binascii.c | 21 +++++++++++++-------- Modules/clinic/binascii.c.h | 17 ++++++++++------- 2 files changed, 23 insertions(+), 15 deletions(-) (limited to 'Modules') diff --git a/Modules/binascii.c b/Modules/binascii.c index d920d23871..3e26a7a9d2 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -528,21 +528,22 @@ binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data) binascii.b2a_base64 data: Py_buffer - / + * + newline: int(c_default="1") = True Base64-code line of data. [clinic start generated code]*/ static PyObject * -binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=3cd61fbee2913285 input=14ec4e47371174a9]*/ +binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data, int newline) +/*[clinic end generated code: output=19e1dd719a890b50 input=7b2ea6fa38d8924c]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; PyObject *rv; - Py_ssize_t bin_len; + Py_ssize_t bin_len, out_len; bin_data = data->buf; bin_len = data->len; @@ -555,9 +556,12 @@ binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data) } /* We're lazy and allocate too much (fixed up later). - "+3" leaves room for up to two pad characters and a trailing - newline. Note that 'b' gets encoded as 'Yg==\n' (1 in, 5 out). */ - if ( (rv=PyBytes_FromStringAndSize(NULL, bin_len*2 + 3)) == NULL ) + "+2" leaves room for up to two pad characters. + Note that 'b' gets encoded as 'Yg==\n' (1 in, 5 out). */ + out_len = bin_len*2 + 2; + if (newline) + out_len++; + if ( (rv=PyBytes_FromStringAndSize(NULL, out_len)) == NULL ) return NULL; ascii_data = (unsigned char *)PyBytes_AS_STRING(rv); @@ -581,7 +585,8 @@ binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data) *ascii_data++ = table_b2a_base64[(leftchar&0xf) << 2]; *ascii_data++ = BASE64_PAD; } - *ascii_data++ = '\n'; /* Append a courtesy newline */ + if (newline) + *ascii_data++ = '\n'; /* Append a courtesy newline */ if (_PyBytes_Resize(&rv, (ascii_data - diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h index e348beebaa..46cfb8ec3d 100644 --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -93,26 +93,29 @@ exit: } PyDoc_STRVAR(binascii_b2a_base64__doc__, -"b2a_base64($module, data, /)\n" +"b2a_base64($module, /, data, *, newline=True)\n" "--\n" "\n" "Base64-code line of data."); #define BINASCII_B2A_BASE64_METHODDEF \ - {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_O, binascii_b2a_base64__doc__}, + {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_VARARGS|METH_KEYWORDS, binascii_b2a_base64__doc__}, static PyObject * -binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data, int newline); static PyObject * -binascii_b2a_base64(PyModuleDef *module, PyObject *arg) +binascii_b2a_base64(PyModuleDef *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; + static char *_keywords[] = {"data", "newline", NULL}; Py_buffer data = {NULL, NULL}; + int newline = 1; - if (!PyArg_Parse(arg, "y*:b2a_base64", &data)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|$i:b2a_base64", _keywords, + &data, &newline)) goto exit; - return_value = binascii_b2a_base64_impl(module, &data); + return_value = binascii_b2a_base64_impl(module, &data, newline); exit: /* Cleanup for data */ @@ -516,4 +519,4 @@ exit: return return_value; } -/*[clinic end generated code: output=b1a3cbf7660ebaa5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b15a24350d105251 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 4a4695c30676f9550ef2274d8e4c42828fd0df2a Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 11 Oct 2015 09:43:50 -0700 Subject: Hoist the deque->maxlen lookup out of the inner-loop. --- Modules/_collectionsmodule.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 52f40b2899..8cd22d77ed 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -385,7 +385,7 @@ deque_extend(dequeobject *deque, PyObject *iterable) { PyObject *it, *item; PyObject *(*iternext)(PyObject *); - int trim = (deque->maxlen >= 0); + Py_ssize_t maxlen = deque->maxlen; /* Handle case where id(deque) == id(iterable) */ if ((PyObject *)deque == iterable) { @@ -433,8 +433,10 @@ deque_extend(dequeobject *deque, PyObject *iterable) Py_SIZE(deque)++; deque->rightindex++; deque->rightblock->data[deque->rightindex] = item; - if (trim) - deque_trim_left(deque); + if (maxlen >= 0 && Py_SIZE(deque) > maxlen) { + PyObject *rv = deque_popleft(deque, NULL); + Py_DECREF(rv); + } } return finalize_iterator(it); } @@ -447,7 +449,7 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) { PyObject *it, *item; PyObject *(*iternext)(PyObject *); - int trim = (deque->maxlen >= 0); + Py_ssize_t maxlen = deque->maxlen; /* Handle case where id(deque) == id(iterable) */ if ((PyObject *)deque == iterable) { @@ -495,8 +497,10 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) Py_SIZE(deque)++; deque->leftindex--; deque->leftblock->data[deque->leftindex] = item; - if (trim) - deque_trim_right(deque); + if (maxlen >= 0 && Py_SIZE(deque) > maxlen) { + PyObject *rv = deque_pop(deque, NULL); + Py_DECREF(rv); + } } return finalize_iterator(it); } -- cgit v1.2.1 From de10dc03507420cc066d65f0331305a48472163b Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 11 Oct 2015 22:34:48 -0700 Subject: Refactor the deque trim logic to eliminate the two separate trim functions. --- Modules/_collectionsmodule.c | 39 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 25 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 8cd22d77ed..3c8e0259c4 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -276,29 +276,12 @@ PyDoc_STRVAR(popleft_doc, "Remove and return the leftmost element."); * the limit. If it has, we get the size back down to the limit by popping an * item off of the opposite end. The methods that can trigger this are append(), * appendleft(), extend(), and extendleft(). + * + * The macro to check whether a deque needs to be trimmed uses a single + * unsigned test that returns true whenever 0 <= maxlen < Py_SIZE(deque). */ -static void -deque_trim_right(dequeobject *deque) -{ - if (deque->maxlen >= 0 && Py_SIZE(deque) > deque->maxlen) { - PyObject *rv = deque_pop(deque, NULL); - assert(rv != NULL); - assert(Py_SIZE(deque) <= deque->maxlen); - Py_DECREF(rv); - } -} - -static void -deque_trim_left(dequeobject *deque) -{ - if (deque->maxlen >= 0 && Py_SIZE(deque) > deque->maxlen) { - PyObject *rv = deque_popleft(deque, NULL); - assert(rv != NULL); - assert(Py_SIZE(deque) <= deque->maxlen); - Py_DECREF(rv); - } -} +#define NEEDS_TRIM(deque, maxlen) ((size_t)(maxlen) < (size_t)(Py_SIZE(deque))) static PyObject * deque_append(dequeobject *deque, PyObject *item) @@ -319,7 +302,10 @@ deque_append(dequeobject *deque, PyObject *item) Py_INCREF(item); deque->rightindex++; deque->rightblock->data[deque->rightindex] = item; - deque_trim_left(deque); + if (NEEDS_TRIM(deque, deque->maxlen)) { + PyObject *rv = deque_popleft(deque, NULL); + Py_DECREF(rv); + } Py_RETURN_NONE; } @@ -344,7 +330,10 @@ deque_appendleft(dequeobject *deque, PyObject *item) Py_INCREF(item); deque->leftindex--; deque->leftblock->data[deque->leftindex] = item; - deque_trim_right(deque); + if (NEEDS_TRIM(deque, deque->maxlen)) { + PyObject *rv = deque_pop(deque, NULL); + Py_DECREF(rv); + } Py_RETURN_NONE; } @@ -433,7 +422,7 @@ deque_extend(dequeobject *deque, PyObject *iterable) Py_SIZE(deque)++; deque->rightindex++; deque->rightblock->data[deque->rightindex] = item; - if (maxlen >= 0 && Py_SIZE(deque) > maxlen) { + if (NEEDS_TRIM(deque, maxlen)) { PyObject *rv = deque_popleft(deque, NULL); Py_DECREF(rv); } @@ -497,7 +486,7 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) Py_SIZE(deque)++; deque->leftindex--; deque->leftblock->data[deque->leftindex] = item; - if (maxlen >= 0 && Py_SIZE(deque) > maxlen) { + if (NEEDS_TRIM(deque, maxlen)) { PyObject *rv = deque_pop(deque, NULL); Py_DECREF(rv); } -- cgit v1.2.1 From 16ed798b19886fc159987e612d8e5b780c03a1c1 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 11 Oct 2015 22:52:54 -0700 Subject: Minor fixup. maxlen is already known. --- Modules/_collectionsmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 3c8e0259c4..cef92c0b81 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -399,7 +399,7 @@ deque_extend(dequeobject *deque, PyObject *iterable) if (it == NULL) return NULL; - if (deque->maxlen == 0) + if (maxlen == 0) return consume_iterator(it); iternext = *Py_TYPE(it)->tp_iternext; @@ -463,7 +463,7 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) if (it == NULL) return NULL; - if (deque->maxlen == 0) + if (maxlen == 0) return consume_iterator(it); iternext = *Py_TYPE(it)->tp_iternext; -- cgit v1.2.1 From 8b2c2594e1f90b282701062d150dddfdb3e1aef3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 12 Oct 2015 22:36:57 +0200 Subject: Issue #25353: Optimize unicode escape and raw unicode escape encoders to use the new _PyBytesWriter API. --- Modules/_pickle.c | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index abaf4e5229..341ac0d6c0 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -2110,38 +2110,35 @@ save_bytes(PicklerObject *self, PyObject *obj) static PyObject * raw_unicode_escape(PyObject *obj) { - PyObject *repr; char *p; Py_ssize_t i, size; - size_t expandsize; void *data; unsigned int kind; + _PyBytesWriter writer; if (PyUnicode_READY(obj)) return NULL; + _PyBytesWriter_Init(&writer); + size = PyUnicode_GET_LENGTH(obj); data = PyUnicode_DATA(obj); kind = PyUnicode_KIND(obj); - if (kind == PyUnicode_4BYTE_KIND) - expandsize = 10; - else - expandsize = 6; - if ((size_t)size > (size_t)PY_SSIZE_T_MAX / expandsize) - return PyErr_NoMemory(); - repr = PyBytes_FromStringAndSize(NULL, expandsize * size); - if (repr == NULL) - return NULL; - if (size == 0) - return repr; - assert(Py_REFCNT(repr) == 1); + p = _PyBytesWriter_Alloc(&writer, size); + if (p == NULL) + goto error; + writer.overallocate = 1; - p = PyBytes_AS_STRING(repr); for (i=0; i < size; i++) { Py_UCS4 ch = PyUnicode_READ(kind, data, i); /* Map 32-bit characters to '\Uxxxxxxxx' */ if (ch >= 0x10000) { + /* -1: substract 1 preallocated byte */ + p = _PyBytesWriter_Prepare(&writer, p, 10-1); + if (p == NULL) + goto error; + *p++ = '\\'; *p++ = 'U'; *p++ = Py_hexdigits[(ch >> 28) & 0xf]; @@ -2153,8 +2150,13 @@ raw_unicode_escape(PyObject *obj) *p++ = Py_hexdigits[(ch >> 4) & 0xf]; *p++ = Py_hexdigits[ch & 15]; } - /* Map 16-bit characters to '\uxxxx' */ + /* Map 16-bit characters, '\\' and '\n' to '\uxxxx' */ else if (ch >= 256 || ch == '\\' || ch == '\n') { + /* -1: substract 1 preallocated byte */ + p = _PyBytesWriter_Prepare(&writer, p, 6-1); + if (p == NULL) + goto error; + *p++ = '\\'; *p++ = 'u'; *p++ = Py_hexdigits[(ch >> 12) & 0xf]; @@ -2166,10 +2168,12 @@ raw_unicode_escape(PyObject *obj) else *p++ = (char) ch; } - size = p - PyBytes_AS_STRING(repr); - if (_PyBytes_Resize(&repr, size) < 0) - return NULL; - return repr; + + return _PyBytesWriter_Finish(&writer, p); + +error: + _PyBytesWriter_Dealloc(&writer); + return NULL; } static int -- cgit v1.2.1 From 74bc8ad30176e4759485b13c3ca09b007ff82576 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 13 Oct 2015 00:11:21 +0200 Subject: sys.setrecursionlimit() now raises RecursionError Issue #25274: sys.setrecursionlimit() now raises a RecursionError if the new recursion limit is too low depending at the current recursion depth. Modify also the "lower-water mark" formula to make it monotonic. This mark is used to decide when the overflowed flag of the thread state is reset. --- Modules/_testcapimodule.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index ba0a24bd1d..9a0364826e 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3518,6 +3518,15 @@ test_PyTime_AsMicroseconds(PyObject *self, PyObject *args) return _PyTime_AsNanosecondsObject(ms); } +static PyObject* +get_recursion_depth(PyObject *self, PyObject *args) +{ + PyThreadState *tstate = PyThreadState_GET(); + + /* substract one to ignore the frame of the get_recursion_depth() call */ + return PyLong_FromLong(tstate->recursion_depth - 1); +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3694,6 +3703,7 @@ static PyMethodDef TestMethods[] = { #endif {"PyTime_AsMilliseconds", test_PyTime_AsMilliseconds, METH_VARARGS}, {"PyTime_AsMicroseconds", test_PyTime_AsMicroseconds, METH_VARARGS}, + {"get_recursion_depth", get_recursion_depth, METH_NOARGS}, {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From 2a27ad4877a4102f05543a9359ad3ecc08433228 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 13 Oct 2015 10:51:47 +0200 Subject: Issue #25384: Use _PyBytesWriter API in binascii This API avoids a final call to _PyBytes_Resize() for output smaller than 512 bytes. Small optimization: disable overallocation in binascii.rledecode_hqx() for the last write. --- Modules/binascii.c | 194 +++++++++++++++++++++++------------------------------ 1 file changed, 83 insertions(+), 111 deletions(-) (limited to 'Modules') diff --git a/Modules/binascii.c b/Modules/binascii.c index 3e26a7a9d2..dfa55356dc 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -346,9 +346,10 @@ binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data) int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; - PyObject *rv; - Py_ssize_t bin_len; + Py_ssize_t bin_len, out_len; + _PyBytesWriter writer; + _PyBytesWriter_Init(&writer); bin_data = data->buf; bin_len = data->len; if ( bin_len > 45 ) { @@ -358,9 +359,10 @@ binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data) } /* We're lazy and allocate to much (fixed up later) */ - if ( (rv=PyBytes_FromStringAndSize(NULL, 2 + (bin_len+2)/3*4)) == NULL ) + out_len = 2 + (bin_len + 2) / 3 * 4; + ascii_data = _PyBytesWriter_Alloc(&writer, out_len); + if (ascii_data == NULL) return NULL; - ascii_data = (unsigned char *)PyBytes_AS_STRING(rv); /* Store the length */ *ascii_data++ = ' ' + (bin_len & 077); @@ -382,12 +384,7 @@ binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data) } *ascii_data++ = '\n'; /* Append a courtesy newline */ - if (_PyBytes_Resize(&rv, - (ascii_data - - (unsigned char *)PyBytes_AS_STRING(rv))) < 0) { - Py_CLEAR(rv); - } - return rv; + return _PyBytesWriter_Finish(&writer, ascii_data); } @@ -433,9 +430,9 @@ binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data) int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; - PyObject *rv; Py_ssize_t ascii_len, bin_len; int quad_pos = 0; + _PyBytesWriter writer; ascii_data = data->buf; ascii_len = data->len; @@ -447,11 +444,12 @@ binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data) bin_len = ((ascii_len+3)/4)*3; /* Upper bound, corrected later */ + _PyBytesWriter_Init(&writer); + /* Allocate the buffer */ - if ( (rv=PyBytes_FromStringAndSize(NULL, bin_len)) == NULL ) + bin_data = _PyBytesWriter_Alloc(&writer, bin_len); + if (bin_data == NULL) return NULL; - bin_data = (unsigned char *)PyBytes_AS_STRING(rv); - bin_len = 0; for( ; ascii_len > 0; ascii_len--, ascii_data++) { this_ch = *ascii_data; @@ -496,31 +494,17 @@ binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data) if ( leftbits >= 8 ) { leftbits -= 8; *bin_data++ = (leftchar >> leftbits) & 0xff; - bin_len++; leftchar &= ((1 << leftbits) - 1); } } if (leftbits != 0) { PyErr_SetString(Error, "Incorrect padding"); - Py_DECREF(rv); + _PyBytesWriter_Dealloc(&writer); return NULL; } - /* And set string size correctly. If the result string is empty - ** (because the input was all invalid) return the shared empty - ** string instead; _PyBytes_Resize() won't do this for us. - */ - if (bin_len > 0) { - if (_PyBytes_Resize(&rv, bin_len) < 0) { - Py_CLEAR(rv); - } - } - else { - Py_DECREF(rv); - rv = PyBytes_FromStringAndSize("", 0); - } - return rv; + return _PyBytesWriter_Finish(&writer, bin_data); } @@ -542,11 +526,12 @@ binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data, int newline) int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; - PyObject *rv; Py_ssize_t bin_len, out_len; + _PyBytesWriter writer; bin_data = data->buf; bin_len = data->len; + _PyBytesWriter_Init(&writer); assert(bin_len >= 0); @@ -561,9 +546,9 @@ binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data, int newline) out_len = bin_len*2 + 2; if (newline) out_len++; - if ( (rv=PyBytes_FromStringAndSize(NULL, out_len)) == NULL ) + ascii_data = _PyBytesWriter_Alloc(&writer, out_len); + if (ascii_data == NULL) return NULL; - ascii_data = (unsigned char *)PyBytes_AS_STRING(rv); for( ; bin_len > 0 ; bin_len--, bin_data++ ) { /* Shift the data into our buffer */ @@ -588,12 +573,7 @@ binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data, int newline) if (newline) *ascii_data++ = '\n'; /* Append a courtesy newline */ - if (_PyBytes_Resize(&rv, - (ascii_data - - (unsigned char *)PyBytes_AS_STRING(rv))) < 0) { - Py_CLEAR(rv); - } - return rv; + return _PyBytesWriter_Finish(&writer, ascii_data); } /*[clinic input] @@ -613,12 +593,14 @@ binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data) int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; - PyObject *rv; + PyObject *res; Py_ssize_t len; int done = 0; + _PyBytesWriter writer; ascii_data = data->buf; len = data->len; + _PyBytesWriter_Init(&writer); assert(len >= 0); @@ -628,9 +610,9 @@ binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data) /* Allocate a string that is too big (fixed later) Add two to the initial length to prevent interning which would preclude subsequent resizing. */ - if ( (rv=PyBytes_FromStringAndSize(NULL, len+2)) == NULL ) + bin_data = _PyBytesWriter_Alloc(&writer, len + 2); + if (bin_data == NULL) return NULL; - bin_data = (unsigned char *)PyBytes_AS_STRING(rv); for( ; len > 0 ; len--, ascii_data++ ) { /* Get the byte and look it up */ @@ -639,7 +621,7 @@ binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data) continue; if ( this_ch == FAIL ) { PyErr_SetString(Error, "Illegal char"); - Py_DECREF(rv); + _PyBytesWriter_Dealloc(&writer); return NULL; } if ( this_ch == DONE ) { @@ -661,21 +643,14 @@ binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data) if ( leftbits && !done ) { PyErr_SetString(Incomplete, "String has incomplete number of bytes"); - Py_DECREF(rv); + _PyBytesWriter_Dealloc(&writer); return NULL; } - if (_PyBytes_Resize(&rv, - (bin_data - - (unsigned char *)PyBytes_AS_STRING(rv))) < 0) { - Py_CLEAR(rv); - } - if (rv) { - PyObject *rrv = Py_BuildValue("Oi", rv, done); - Py_DECREF(rv); - return rrv; - } - return NULL; + res = _PyBytesWriter_Finish(&writer, bin_data); + if (res == NULL) + return NULL; + return Py_BuildValue("Ni", res, done); } @@ -693,10 +668,11 @@ binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=0905da344dbf0648 input=e1f1712447a82b09]*/ { unsigned char *in_data, *out_data; - PyObject *rv; unsigned char ch; Py_ssize_t in, inend, len; + _PyBytesWriter writer; + _PyBytesWriter_Init(&writer); in_data = data->buf; len = data->len; @@ -706,9 +682,9 @@ binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data) return PyErr_NoMemory(); /* Worst case: output is twice as big as input (fixed later) */ - if ( (rv=PyBytes_FromStringAndSize(NULL, len*2+2)) == NULL ) + out_data = _PyBytesWriter_Alloc(&writer, len * 2 + 2); + if (out_data == NULL) return NULL; - out_data = (unsigned char *)PyBytes_AS_STRING(rv); for( in=0; inbuf; len = data->len; + _PyBytesWriter_Init(&writer); assert(len >= 0); @@ -772,9 +745,9 @@ binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data) return PyErr_NoMemory(); /* Allocate a buffer that is at least large enough */ - if ( (rv=PyBytes_FromStringAndSize(NULL, len*2+2)) == NULL ) + ascii_data = _PyBytesWriter_Alloc(&writer, len * 2 + 2); + if (ascii_data == NULL) return NULL; - ascii_data = (unsigned char *)PyBytes_AS_STRING(rv); for( ; len > 0 ; len--, bin_data++ ) { /* Shift into our buffer, and output any 6bits ready */ @@ -791,12 +764,8 @@ binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data) leftchar <<= (6-leftbits); *ascii_data++ = table_b2a_hqx[leftchar & 0x3f]; } - if (_PyBytes_Resize(&rv, - (ascii_data - - (unsigned char *)PyBytes_AS_STRING(rv))) < 0) { - Py_CLEAR(rv); - } - return rv; + + return _PyBytesWriter_Finish(&writer, ascii_data); } @@ -815,11 +784,12 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) { unsigned char *in_data, *out_data; unsigned char in_byte, in_repeat; - PyObject *rv; Py_ssize_t in_len, out_len, out_len_left; + _PyBytesWriter writer; in_data = data->buf; in_len = data->len; + _PyBytesWriter_Init(&writer); assert(in_len >= 0); @@ -830,45 +800,49 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) return PyErr_NoMemory(); /* Allocate a buffer of reasonable size. Resized when needed */ - out_len = in_len*2; - if ( (rv=PyBytes_FromStringAndSize(NULL, out_len)) == NULL ) + out_len = in_len * 2; + out_data = _PyBytesWriter_Alloc(&writer, out_len); + if (out_data == NULL) return NULL; - out_len_left = out_len; - out_data = (unsigned char *)PyBytes_AS_STRING(rv); + + /* Use overallocation */ + writer.overallocate = 1; + out_len_left = writer.allocated; /* ** We need two macros here to get/put bytes and handle ** end-of-buffer for input and output strings. */ -#define INBYTE(b) \ - do { \ - if ( --in_len < 0 ) { \ - PyErr_SetString(Incomplete, ""); \ - Py_DECREF(rv); \ - return NULL; \ - } \ - b = *in_data++; \ +#define INBYTE(b) \ + do { \ + if ( --in_len < 0 ) { \ + PyErr_SetString(Incomplete, ""); \ + goto error; \ + } \ + b = *in_data++; \ } while(0) -#define OUTBYTE(b) \ - do { \ - if ( --out_len_left < 0 ) { \ - if ( out_len > PY_SSIZE_T_MAX / 2) return PyErr_NoMemory(); \ - if (_PyBytes_Resize(&rv, 2*out_len) < 0) \ - { Py_XDECREF(rv); return NULL; } \ - out_data = (unsigned char *)PyBytes_AS_STRING(rv) \ - + out_len; \ - out_len_left = out_len-1; \ - out_len = out_len * 2; \ - } \ - *out_data++ = b; \ +#define OUTBYTE(b) \ + do { \ + if ( --out_len_left < 0 ) { \ + if (in_len <= 0) { \ + /* We are done after this write, no need to \ + overallocate the buffer anymore */ \ + writer.overallocate = 0; \ + } \ + out_data = _PyBytesWriter_Prepare(&writer, out_data, 1); \ + if (out_data == NULL) \ + goto error; \ + out_len_left = writer.allocated; \ + } \ + *out_data++ = b; \ } while(0) - /* - ** Handle first byte separately (since we have to get angry - ** in case of an orphaned RLE code). - */ - INBYTE(in_byte); + /* + ** Handle first byte separately (since we have to get angry + ** in case of an orphaned RLE code). + */ + INBYTE(in_byte); if (in_byte == RUNCHAR) { INBYTE(in_repeat); @@ -877,8 +851,7 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) ** of the string only). This is a programmer error. */ PyErr_SetString(Error, "Orphaned RLE code at start"); - Py_DECREF(rv); - return NULL; + goto error; } OUTBYTE(RUNCHAR); } else { @@ -904,12 +877,11 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) OUTBYTE(in_byte); } } - if (_PyBytes_Resize(&rv, - (out_data - - (unsigned char *)PyBytes_AS_STRING(rv))) < 0) { - Py_CLEAR(rv); - } - return rv; + return _PyBytesWriter_Finish(&writer, out_data); + +error: + _PyBytesWriter_Dealloc(&writer); + return NULL; } -- cgit v1.2.1 From 710596f4ade3ac43ec90bf4f741a2da46c1b7640 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 14 Oct 2015 15:02:35 +0200 Subject: Issue #25384: Fix binascii.rledecode_hqx() Fix usage of _PyBytesWriter API. Use the new _PyBytesWriter_Resize() function instead of _PyBytesWriter_Prepare(). --- Modules/binascii.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/binascii.c b/Modules/binascii.c index dfa55356dc..a1070b7f86 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -800,14 +800,15 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) return PyErr_NoMemory(); /* Allocate a buffer of reasonable size. Resized when needed */ - out_len = in_len * 2; + out_len = in_len; out_data = _PyBytesWriter_Alloc(&writer, out_len); if (out_data == NULL) return NULL; /* Use overallocation */ writer.overallocate = 1; - out_len_left = writer.allocated; + out_len = writer.allocated; + out_len_left = out_len; /* ** We need two macros here to get/put bytes and handle @@ -830,10 +831,12 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) overallocate the buffer anymore */ \ writer.overallocate = 0; \ } \ - out_data = _PyBytesWriter_Prepare(&writer, out_data, 1); \ + out_data = _PyBytesWriter_Resize(&writer, out_data, \ + writer.allocated + 1); \ if (out_data == NULL) \ goto error; \ - out_len_left = writer.allocated; \ + out_len_left = writer.allocated - out_len - 1; \ + out_len = writer.allocated; \ } \ *out_data++ = b; \ } while(0) -- cgit v1.2.1 From f0f6bd726242c16d09a68ff78a2012f792c3f8c9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 14 Oct 2015 15:20:07 +0200 Subject: Refactor binascii.rledecode_hqx() Rewrite the code to handle the output buffer. --- Modules/binascii.c | 53 +++++++++++++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 28 deletions(-) (limited to 'Modules') diff --git a/Modules/binascii.c b/Modules/binascii.c index a1070b7f86..ccd81faf94 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -784,7 +784,7 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) { unsigned char *in_data, *out_data; unsigned char in_byte, in_repeat; - Py_ssize_t in_len, out_len, out_len_left; + Py_ssize_t in_len; _PyBytesWriter writer; in_data = data->buf; @@ -800,15 +800,12 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) return PyErr_NoMemory(); /* Allocate a buffer of reasonable size. Resized when needed */ - out_len = in_len; - out_data = _PyBytesWriter_Alloc(&writer, out_len); + out_data = _PyBytesWriter_Alloc(&writer, in_len); if (out_data == NULL) return NULL; /* Use overallocation */ writer.overallocate = 1; - out_len = writer.allocated; - out_len_left = out_len; /* ** We need two macros here to get/put bytes and handle @@ -823,24 +820,6 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) b = *in_data++; \ } while(0) -#define OUTBYTE(b) \ - do { \ - if ( --out_len_left < 0 ) { \ - if (in_len <= 0) { \ - /* We are done after this write, no need to \ - overallocate the buffer anymore */ \ - writer.overallocate = 0; \ - } \ - out_data = _PyBytesWriter_Resize(&writer, out_data, \ - writer.allocated + 1); \ - if (out_data == NULL) \ - goto error; \ - out_len_left = writer.allocated - out_len - 1; \ - out_len = writer.allocated; \ - } \ - *out_data++ = b; \ - } while(0) - /* ** Handle first byte separately (since we have to get angry ** in case of an orphaned RLE code). @@ -849,6 +828,10 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) if (in_byte == RUNCHAR) { INBYTE(in_repeat); + /* only 1 byte will be written, but 2 bytes were preallocated: + substract 1 byte to prevent overallocation */ + writer.min_size--; + if (in_repeat != 0) { /* Note Error, not Incomplete (which is at the end ** of the string only). This is a programmer error. @@ -856,9 +839,9 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) PyErr_SetString(Error, "Orphaned RLE code at start"); goto error; } - OUTBYTE(RUNCHAR); + *out_data++ = RUNCHAR; } else { - OUTBYTE(in_byte); + *out_data++ = in_byte; } while( in_len > 0 ) { @@ -866,18 +849,32 @@ binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) if (in_byte == RUNCHAR) { INBYTE(in_repeat); + /* only 1 byte will be written, but 2 bytes were preallocated: + substract 1 byte to prevent overallocation */ + writer.min_size--; + if ( in_repeat == 0 ) { /* Just an escaped RUNCHAR value */ - OUTBYTE(RUNCHAR); + *out_data++ = RUNCHAR; } else { /* Pick up value and output a sequence of it */ in_byte = out_data[-1]; + + /* enlarge the buffer if needed */ + if (in_repeat > 1) { + /* -1 because we already preallocated 1 byte */ + out_data = _PyBytesWriter_Prepare(&writer, out_data, + in_repeat - 1); + if (out_data == NULL) + goto error; + } + while ( --in_repeat > 0 ) - OUTBYTE(in_byte); + *out_data++ = in_byte; } } else { /* Normal byte */ - OUTBYTE(in_byte); + *out_data++ = in_byte; } } return _PyBytesWriter_Finish(&writer, out_data); -- cgit v1.2.1 From 44fffba53fdac253b578635ae13155353efe155f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 14 Oct 2015 23:16:57 -0700 Subject: Improve variable names and constant expressions --- Modules/_collectionsmodule.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index cef92c0b81..06f85e94ce 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -303,8 +303,8 @@ deque_append(dequeobject *deque, PyObject *item) deque->rightindex++; deque->rightblock->data[deque->rightindex] = item; if (NEEDS_TRIM(deque, deque->maxlen)) { - PyObject *rv = deque_popleft(deque, NULL); - Py_DECREF(rv); + PyObject *olditem = deque_popleft(deque, NULL); + Py_DECREF(olditem); } Py_RETURN_NONE; } @@ -331,8 +331,8 @@ deque_appendleft(dequeobject *deque, PyObject *item) deque->leftindex--; deque->leftblock->data[deque->leftindex] = item; if (NEEDS_TRIM(deque, deque->maxlen)) { - PyObject *rv = deque_pop(deque, NULL); - Py_DECREF(rv); + PyObject *olditem = deque_pop(deque, NULL); + Py_DECREF(olditem); } Py_RETURN_NONE; } @@ -423,8 +423,8 @@ deque_extend(dequeobject *deque, PyObject *iterable) deque->rightindex++; deque->rightblock->data[deque->rightindex] = item; if (NEEDS_TRIM(deque, maxlen)) { - PyObject *rv = deque_popleft(deque, NULL); - Py_DECREF(rv); + PyObject *olditem = deque_popleft(deque, NULL); + Py_DECREF(olditem); } } return finalize_iterator(it); @@ -487,8 +487,8 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) deque->leftindex--; deque->leftblock->data[deque->leftindex] = item; if (NEEDS_TRIM(deque, maxlen)) { - PyObject *rv = deque_pop(deque, NULL); - Py_DECREF(rv); + PyObject *olditem = deque_pop(deque, NULL); + Py_DECREF(olditem); } } return finalize_iterator(it); @@ -1283,6 +1283,7 @@ deque_traverse(dequeobject *deque, visitproc visit, void *arg) PyObject *item; Py_ssize_t index; Py_ssize_t indexlo = deque->leftindex; + Py_ssize_t indexhigh; for (b = deque->leftblock; b != deque->rightblock; b = b->rightlink) { for (index = indexlo; index < BLOCKLEN ; index++) { @@ -1291,7 +1292,8 @@ deque_traverse(dequeobject *deque, visitproc visit, void *arg) } indexlo = 0; } - for (index = indexlo; index <= deque->rightindex; index++) { + indexhigh = deque->rightindex; + for (index = indexlo; index <= indexhigh; index++) { item = b->data[index]; Py_VISIT(item); } -- cgit v1.2.1 From 680c22a1a5355696aeccbdffbbc973fef1d51ece Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 14 Oct 2015 23:33:23 -0700 Subject: Use unsigned division --- Modules/_collectionsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 06f85e94ce..bc225a5b4c 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1482,7 +1482,7 @@ deque_sizeof(dequeobject *deque, void *unused) Py_ssize_t blocks; res = sizeof(dequeobject); - blocks = (deque->leftindex + Py_SIZE(deque) + BLOCKLEN - 1) / BLOCKLEN; + blocks = (size_t)(deque->leftindex + Py_SIZE(deque) + BLOCKLEN - 1) / BLOCKLEN; assert(deque->leftindex + Py_SIZE(deque) - 1 == (blocks - 1) * BLOCKLEN + deque->rightindex); res += blocks * sizeof(block); -- cgit v1.2.1 From 08daf4534c2d623a09f67b25d9fa6545335ab9b3 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 15 Oct 2015 08:05:31 -0700 Subject: Rewrap comment. --- Modules/_collectionsmodule.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index bc225a5b4c..85a07933b5 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -272,10 +272,10 @@ PyDoc_STRVAR(popleft_doc, "Remove and return the leftmost element."); /* The deque's size limit is d.maxlen. The limit can be zero or positive. * If there is no limit, then d.maxlen == -1. * - * After an item is added to a deque, we check to see if the size has grown past - * the limit. If it has, we get the size back down to the limit by popping an - * item off of the opposite end. The methods that can trigger this are append(), - * appendleft(), extend(), and extendleft(). + * After an item is added to a deque, we check to see if the size has + * grown past the limit. If it has, we get the size back down to the limit + * by popping an item off of the opposite end. The methods that can + * trigger this are append(), appendleft(), extend(), and extendleft(). * * The macro to check whether a deque needs to be trimmed uses a single * unsigned test that returns true whenever 0 <= maxlen < Py_SIZE(deque). -- cgit v1.2.1 From ae06294fe8ff94c64fe17e2ff23b3054d4ae7d64 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 15 Oct 2015 23:25:53 -0700 Subject: Remove old Todo entry that isn't going to happen. --- Modules/_collectionsmodule.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 85a07933b5..1acbf86bf4 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -156,12 +156,6 @@ freeblock(block *b) } } -/* XXX Todo: - If aligned memory allocations become available, make the - deque object 64 byte aligned so that all of the fields - can be retrieved or updated in a single cache line. -*/ - static PyObject * deque_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { -- cgit v1.2.1 From 9a927be871381c1a7d5f6c5c14e95c3beed5462d Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 16 Oct 2015 22:47:29 -0700 Subject: Issue #25414: Remove unnecessary tests that can never succeed. --- Modules/_collectionsmodule.c | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 1acbf86bf4..ceba0376ed 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -110,12 +110,6 @@ static PyTypeObject deque_type; #define CHECK_NOT_END(link) #endif -/* To prevent len from overflowing PY_SSIZE_T_MAX, we refuse to - allocate new blocks if the current len is nearing overflow. -*/ - -#define MAX_DEQUE_LEN (PY_SSIZE_T_MAX - 3*BLOCKLEN) - /* A simple freelisting scheme is used to minimize calls to the memory allocator. It accommodates common use cases where new blocks are being added at about the same rate as old blocks are being freed. @@ -128,11 +122,6 @@ static block *freeblocks[MAXFREEBLOCKS]; static block * newblock(Py_ssize_t len) { block *b; - if (len >= MAX_DEQUE_LEN) { - PyErr_SetString(PyExc_OverflowError, - "cannot add more blocks to the deque"); - return NULL; - } if (numfreeblocks) { numfreeblocks--; return freeblocks[numfreeblocks]; @@ -676,9 +665,6 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) if (deque->maxlen >= 0 && n > deque->maxlen) n = deque->maxlen; - if (n > MAX_DEQUE_LEN) - return PyErr_NoMemory(); - deque->state++; for (i = 0 ; i < n-1 ; ) { if (deque->rightindex == BLOCKLEN - 1) { @@ -709,7 +695,7 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) return (PyObject *)deque; } - if ((size_t)size > MAX_DEQUE_LEN / (size_t)n) { + if ((size_t)size > PY_SSIZE_T_MAX / (size_t)n) { return PyErr_NoMemory(); } -- cgit v1.2.1 From dbec897725122550f8d15d079d96d5e36101b888 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 20 Oct 2015 00:03:33 -0700 Subject: Only update the state variable once per iteration. --- Modules/_collectionsmodule.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index ceba0376ed..aa879beff8 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -269,7 +269,6 @@ PyDoc_STRVAR(popleft_doc, "Remove and return the leftmost element."); static PyObject * deque_append(dequeobject *deque, PyObject *item) { - deque->state++; if (deque->rightindex == BLOCKLEN - 1) { block *b = newblock(Py_SIZE(deque)); if (b == NULL) @@ -288,6 +287,8 @@ deque_append(dequeobject *deque, PyObject *item) if (NEEDS_TRIM(deque, deque->maxlen)) { PyObject *olditem = deque_popleft(deque, NULL); Py_DECREF(olditem); + } else { + deque->state++; } Py_RETURN_NONE; } @@ -297,7 +298,6 @@ PyDoc_STRVAR(append_doc, "Add an element to the right side of the deque."); static PyObject * deque_appendleft(dequeobject *deque, PyObject *item) { - deque->state++; if (deque->leftindex == 0) { block *b = newblock(Py_SIZE(deque)); if (b == NULL) @@ -316,6 +316,8 @@ deque_appendleft(dequeobject *deque, PyObject *item) if (NEEDS_TRIM(deque, deque->maxlen)) { PyObject *olditem = deque_pop(deque, NULL); Py_DECREF(olditem); + } else { + deque->state++; } Py_RETURN_NONE; } @@ -387,7 +389,6 @@ deque_extend(dequeobject *deque, PyObject *iterable) iternext = *Py_TYPE(it)->tp_iternext; while ((item = iternext(it)) != NULL) { - deque->state++; if (deque->rightindex == BLOCKLEN - 1) { block *b = newblock(Py_SIZE(deque)); if (b == NULL) { @@ -408,6 +409,8 @@ deque_extend(dequeobject *deque, PyObject *iterable) if (NEEDS_TRIM(deque, maxlen)) { PyObject *olditem = deque_popleft(deque, NULL); Py_DECREF(olditem); + } else { + deque->state++; } } return finalize_iterator(it); @@ -451,7 +454,6 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) iternext = *Py_TYPE(it)->tp_iternext; while ((item = iternext(it)) != NULL) { - deque->state++; if (deque->leftindex == 0) { block *b = newblock(Py_SIZE(deque)); if (b == NULL) { @@ -472,6 +474,8 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) if (NEEDS_TRIM(deque, maxlen)) { PyObject *olditem = deque_pop(deque, NULL); Py_DECREF(olditem); + } else { + deque->state++; } } return finalize_iterator(it); -- cgit v1.2.1 From d03a95a217fee7b6ebcdfceccb8e1d0dbe260126 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 22 Oct 2015 22:48:16 -0700 Subject: Removed unused parameter --- Modules/_collectionsmodule.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index aa879beff8..ba8238c318 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -120,7 +120,7 @@ static Py_ssize_t numfreeblocks = 0; static block *freeblocks[MAXFREEBLOCKS]; static block * -newblock(Py_ssize_t len) { +newblock(void) { block *b; if (numfreeblocks) { numfreeblocks--; @@ -156,7 +156,7 @@ deque_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (deque == NULL) return NULL; - b = newblock(0); + b = newblock(); if (b == NULL) { Py_DECREF(deque); return NULL; @@ -270,7 +270,7 @@ static PyObject * deque_append(dequeobject *deque, PyObject *item) { if (deque->rightindex == BLOCKLEN - 1) { - block *b = newblock(Py_SIZE(deque)); + block *b = newblock(); if (b == NULL) return NULL; b->leftlink = deque->rightblock; @@ -299,7 +299,7 @@ static PyObject * deque_appendleft(dequeobject *deque, PyObject *item) { if (deque->leftindex == 0) { - block *b = newblock(Py_SIZE(deque)); + block *b = newblock(); if (b == NULL) return NULL; b->rightlink = deque->leftblock; @@ -390,7 +390,7 @@ deque_extend(dequeobject *deque, PyObject *iterable) iternext = *Py_TYPE(it)->tp_iternext; while ((item = iternext(it)) != NULL) { if (deque->rightindex == BLOCKLEN - 1) { - block *b = newblock(Py_SIZE(deque)); + block *b = newblock(); if (b == NULL) { Py_DECREF(item); Py_DECREF(it); @@ -455,7 +455,7 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) iternext = *Py_TYPE(it)->tp_iternext; while ((item = iternext(it)) != NULL) { if (deque->leftindex == 0) { - block *b = newblock(Py_SIZE(deque)); + block *b = newblock(); if (b == NULL) { Py_DECREF(item); Py_DECREF(it); @@ -586,7 +586,7 @@ deque_clear(dequeobject *deque) adversary could cause it to never terminate). */ - b = newblock(0); + b = newblock(); if (b == NULL) { PyErr_Clear(); goto alternate_method; @@ -672,7 +672,7 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) deque->state++; for (i = 0 ; i < n-1 ; ) { if (deque->rightindex == BLOCKLEN - 1) { - block *b = newblock(Py_SIZE(deque) + i); + block *b = newblock(); if (b == NULL) { Py_SIZE(deque) += i; return NULL; @@ -786,7 +786,7 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n) while (n > 0) { if (leftindex == 0) { if (b == NULL) { - b = newblock(len); + b = newblock(); if (b == NULL) goto done; } @@ -830,7 +830,7 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n) while (n < 0) { if (rightindex == BLOCKLEN - 1) { if (b == NULL) { - b = newblock(len); + b = newblock(); if (b == NULL) goto done; } -- cgit v1.2.1 From 9fce9fa8644fe4abe929e6c1bf40dc1afc0888c2 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 24 Oct 2015 09:49:56 +0300 Subject: Issue #25447: The lru_cache() wrapper objects now can be copied and pickled (by returning the original object unchanged). --- Modules/_functoolsmodule.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 1f9806728f..fadc0a9c20 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -1047,6 +1047,12 @@ lru_cache_cache_clear(lru_cache_object *self, PyObject *unused) Py_RETURN_NONE; } +static PyObject * +lru_cache_reduce(PyObject *self, PyObject *unused) +{ + return PyObject_GetAttrString(self, "__qualname__"); +} + static int lru_cache_tp_traverse(lru_cache_object *self, visitproc visit, void *arg) { @@ -1097,6 +1103,7 @@ cache_info_type: namedtuple class with the fields:\n\ static PyMethodDef lru_cache_methods[] = { {"cache_info", (PyCFunction)lru_cache_cache_info, METH_NOARGS}, {"cache_clear", (PyCFunction)lru_cache_cache_clear, METH_NOARGS}, + {"__reduce__", (PyCFunction)lru_cache_reduce, METH_NOARGS}, {NULL} }; -- cgit v1.2.1 From 109322945b32e6622d17c244f5c4b3e1b8b31878 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Mon, 2 Nov 2015 04:20:33 +0000 Subject: Issue #25523: Further a-to-an corrections new in 3.5 --- Modules/_collectionsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 66f5939c60..214872b393 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -629,7 +629,7 @@ volume rotations should take care not to penalize the common case. Conceptually, a rotate by one is equivalent to a pop on one side and an append on the other. However, a pop/append pair is unnecessarily slow -because it requires a incref/decref pair for an object located randomly +because it requires an incref/decref pair for an object located randomly in memory. It is better to just move the object pointer from one block to the next without changing the reference count. -- cgit v1.2.1 From dcd4badebcc237854c23e25a052a74e6d520fd6e Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 1 Nov 2015 23:57:37 -0500 Subject: Move the initial start-search out of the main loop so it can be factored-out later. --- Modules/_collectionsmodule.c | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index ba8238c318..c12d43ed87 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1017,11 +1017,12 @@ deque_len(dequeobject *deque) static PyObject * deque_index(dequeobject *deque, PyObject *args) { - Py_ssize_t i, start=0, stop=Py_SIZE(deque); + Py_ssize_t i, n, start=0, stop=Py_SIZE(deque); PyObject *v, *item; block *b = deque->leftblock; Py_ssize_t index = deque->leftindex; size_t start_state = deque->state; + int cmp; if (!PyArg_ParseTuple(args, "O|O&O&:index", &v, _PyEval_SliceIndex, &start, @@ -1039,22 +1040,32 @@ deque_index(dequeobject *deque, PyObject *args) } if (stop > Py_SIZE(deque)) stop = Py_SIZE(deque); + if (start > stop) + start = stop; + assert(0 <= start && start <= stop && stop <= Py_SIZE(deque)); - for (i=0 ; i= start) { - int cmp; - CHECK_NOT_END(b); - item = b->data[index]; - cmp = PyObject_RichCompareBool(item, v, Py_EQ); - if (cmp > 0) - return PyLong_FromSsize_t(i); - else if (cmp < 0) - return NULL; - if (start_state != deque->state) { - PyErr_SetString(PyExc_RuntimeError, - "deque mutated during iteration"); - return NULL; - } + /* XXX Replace this loop with faster code from deque_item() */ + for (i=0 ; irightlink; + index = 0; + } + } + + n = stop - i; + while (n--) { + CHECK_NOT_END(b); + item = b->data[index]; + cmp = PyObject_RichCompareBool(item, v, Py_EQ); + if (cmp > 0) + return PyLong_FromSsize_t(stop - (n + 1)); + else if (cmp < 0) + return NULL; + if (start_state != deque->state) { + PyErr_SetString(PyExc_RuntimeError, + "deque mutated during iteration"); + return NULL; } index++; if (index == BLOCKLEN) { -- cgit v1.2.1 From 7014c4ba83c9ea91e729a3b6034d5a6aeeb4b675 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 2 Nov 2015 07:27:40 -0500 Subject: Minor cleanup. --- Modules/_collectionsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index c9e4568ce0..1ca6c72d37 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1060,7 +1060,7 @@ deque_index(dequeobject *deque, PyObject *args) cmp = PyObject_RichCompareBool(item, v, Py_EQ); if (cmp > 0) return PyLong_FromSsize_t(stop - (n + 1)); - else if (cmp < 0) + if (cmp < 0) return NULL; if (start_state != deque->state) { PyErr_SetString(PyExc_RuntimeError, -- cgit v1.2.1 From 790e971ef783c4955f60128f74f759320bb954fa Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 2 Nov 2015 14:40:41 +0200 Subject: Issue #25523: Further a-to-an corrections new in 3.5. --- Modules/_ssl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 5d20e7c414..4f4379fb44 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3273,7 +3273,7 @@ _servername_callback(SSL *s, int *al, void *args) ssl = SSL_get_app_data(s); assert(PySSLSocket_Check(ssl)); - /* The servername callback expects a argument that represents the current + /* The servername callback expects an argument that represents the current * SSL connection and that has a .context attribute that can be changed to * identify the requested hostname. Since the official API is the Python * level API we want to pass the callback a Python level object rather than -- cgit v1.2.1 From aee578117cfbaa2f21751b8c0133f9a2c9c2eb90 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 3 Nov 2015 22:00:26 -0500 Subject: Neaten-up the inner-loop logic. --- Modules/_collectionsmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 1ca6c72d37..0e594703d0 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1053,13 +1053,13 @@ deque_index(dequeobject *deque, PyObject *args) } } - n = stop - i; - while (n--) { + n = stop - i + 1; + while (--n) { CHECK_NOT_END(b); item = b->data[index]; cmp = PyObject_RichCompareBool(item, v, Py_EQ); if (cmp > 0) - return PyLong_FromSsize_t(stop - (n + 1)); + return PyLong_FromSsize_t(stop - n); if (cmp < 0) return NULL; if (start_state != deque->state) { -- cgit v1.2.1 From c840c52f5f27dcd14313f2406250fbc907920ca1 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 5 Nov 2015 17:43:42 +0200 Subject: Reuse Py_STRINGIFY() macro in sre_lib.h and dynload_win.c. --- Modules/sre_lib.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/sre_lib.h b/Modules/sre_lib.h index 6ad2ab72e3..78f7ac745e 100644 --- a/Modules/sre_lib.h +++ b/Modules/sre_lib.h @@ -367,14 +367,12 @@ SRE(info)(SRE_STATE* state, SRE_CODE* pattern) #define RETURN_ON_FAILURE(i) \ do { RETURN_ON_ERROR(i); if (i == 0) RETURN_FAILURE; } while (0) -#define SFY(x) #x - #define DATA_STACK_ALLOC(state, type, ptr) \ do { \ alloc_pos = state->data_stack_base; \ TRACE(("allocating %s in %" PY_FORMAT_SIZE_T "d " \ "(%" PY_FORMAT_SIZE_T "d)\n", \ - SFY(type), alloc_pos, sizeof(type))); \ + Py_STRINGIFY(type), alloc_pos, sizeof(type))); \ if (sizeof(type) > state->data_stack_size - alloc_pos) { \ int j = data_stack_grow(state, sizeof(type)); \ if (j < 0) return j; \ @@ -387,7 +385,7 @@ do { \ #define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \ do { \ - TRACE(("looking up %s at %" PY_FORMAT_SIZE_T "d\n", SFY(type), pos)); \ + TRACE(("looking up %s at %" PY_FORMAT_SIZE_T "d\n", Py_STRINGIFY(type), pos)); \ ptr = (type*)(state->data_stack+pos); \ } while (0) -- cgit v1.2.1 From ab9342460bf6d26c19d73c506195737a35529433 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 7 Nov 2015 15:42:38 +0200 Subject: Issue #25558: Use compile-time asserts. --- Modules/_ctypes/_ctypes.c | 2 +- Modules/_datetimemodule.c | 6 +++--- Modules/_pickle.c | 2 +- Modules/pyexpat.c | 3 ++- 4 files changed, 7 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index b9fd82e835..ac4323a896 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -2386,7 +2386,7 @@ unique_key(CDataObject *target, Py_ssize_t index) char *cp = string; size_t bytes_left; - assert(sizeof(string) - 1 > sizeof(Py_ssize_t) * 2); + Py_BUILD_ASSERT(sizeof(string) - 1 > sizeof(Py_ssize_t) * 2); cp += sprintf(cp, "%x", Py_SAFE_DOWNCAST(index, Py_ssize_t, int)); while (target->b_base) { bytes_left = sizeof(string) - (cp - string) - 1; diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 94336cf146..55988c5693 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -5329,19 +5329,19 @@ PyInit__datetime(void) /* A 4-year cycle has an extra leap day over what we'd get from * pasting together 4 single years. */ - assert(DI4Y == 4 * 365 + 1); + Py_BUILD_ASSERT(DI4Y == 4 * 365 + 1); assert(DI4Y == days_before_year(4+1)); /* Similarly, a 400-year cycle has an extra leap day over what we'd * get from pasting together 4 100-year cycles. */ - assert(DI400Y == 4 * DI100Y + 1); + Py_BUILD_ASSERT(DI400Y == 4 * DI100Y + 1); assert(DI400Y == days_before_year(400+1)); /* OTOH, a 100-year cycle has one fewer leap day than we'd get from * pasting together 25 4-year cycles. */ - assert(DI100Y == 25 * DI4Y - 1); + Py_BUILD_ASSERT(DI100Y == 25 * DI4Y - 1); assert(DI100Y == days_before_year(100+1)); one = PyLong_FromLong(1); diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 0e3a68eb9c..06882d0809 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -874,7 +874,7 @@ _write_size64(char *out, size_t value) { size_t i; - assert(sizeof(size_t) <= 8); + Py_BUILD_ASSERT(sizeof(size_t) <= 8); for (i = 0; i < sizeof(size_t); i++) { out[i] = (unsigned char)((value >> (8 * i)) & 0xff); diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 9a6da737fb..b45e3dac7e 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -747,7 +747,8 @@ pyexpat_xmlparser_Parse_impl(xmlparseobject *self, PyObject *data, s += MAX_CHUNK_SIZE; slen -= MAX_CHUNK_SIZE; } - assert(MAX_CHUNK_SIZE < INT_MAX && slen < INT_MAX); + Py_BUILD_ASSERT(MAX_CHUNK_SIZE <= INT_MAX); + assert(slen <= INT_MAX); rc = XML_Parse(self->itself, s, (int)slen, isfinal); done: -- cgit v1.2.1 From 960652337afd71f91633acd4d30cccb12cbd064c Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Sun, 15 Nov 2015 21:15:26 -0800 Subject: Fixes #23564: Fix a partially broken sanity check in the _posixsubprocess internals regarding how fds_to_pass were passed to the child. The bug had no actual impact as subprocess.py already avoided it. --- Modules/_posixsubprocess.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index 800b3019c8..2cdc38176b 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -109,10 +109,11 @@ _sanity_check_python_fd_sequence(PyObject *fd_sequence) for (seq_idx = 0; seq_idx < seq_len; ++seq_idx) { PyObject* py_fd = PySequence_Fast_GET_ITEM(fd_sequence, seq_idx); long iter_fd = PyLong_AsLong(py_fd); - if (iter_fd < 0 || iter_fd < prev_fd || iter_fd > INT_MAX) { + if (iter_fd < 0 || iter_fd <= prev_fd || iter_fd > INT_MAX) { /* Negative, overflow, not a Long, unsorted, too big for a fd. */ return 1; } + prev_fd = iter_fd; } return 0; } -- cgit v1.2.1 From 3d477fe8f8c46e47b480b4f139fdd6cc085e9abe Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 17 Nov 2015 12:15:07 +0100 Subject: Closes #25645: Fix a reference leak introduced by change bc5894a3a0e6 of the issue #24164. --- Modules/_pickle.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 06882d0809..a6f414c8c3 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -193,6 +193,7 @@ _Pickle_ClearState(PickleState *st) Py_CLEAR(st->import_mapping_3to2); Py_CLEAR(st->codecs_encode); Py_CLEAR(st->getattr); + Py_CLEAR(st->partial); } /* Initialize the given pickle module state. */ -- cgit v1.2.1 From 6d214b29c483b2dc2940fcbdb497f309c6baecd7 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Fri, 20 Nov 2015 08:13:35 +0000 Subject: Issue #25626: Change zlib to accept Py_ssize_t and cap to UINT_MAX The underlying zlib library stores sizes in ?unsigned int?. The corresponding Python parameters are all sizes of buffers filled in by zlib, so it is okay to reduce higher values to the UINT_MAX internal cap. OverflowError is still raised for sizes that do not fit in Py_ssize_t. Sizes are now limited to Py_ssize_t rather than unsigned long, because Python byte strings cannot be larger than Py_ssize_t. Previously this could result in a SystemError on 32-bit platforms. This resolves a regression in the gzip module when reading more than UINT_MAX or LONG_MAX bytes in one call, introduced by revision 62723172412c. --- Modules/clinic/zlibmodule.c.h | 8 +++--- Modules/zlibmodule.c | 58 +++++++++++++++++++++---------------------- 2 files changed, 33 insertions(+), 33 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index 35661a5a46..c5cdf427b5 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -68,7 +68,7 @@ zlib_decompress(PyModuleDef *module, PyObject *args) unsigned int bufsize = DEF_BUF_SIZE; if (!PyArg_ParseTuple(args, "y*|iO&:decompress", - &data, &wbits, uint_converter, &bufsize)) + &data, &wbits, capped_uint_converter, &bufsize)) goto exit; return_value = zlib_decompress_impl(module, &data, wbits, bufsize); @@ -242,7 +242,7 @@ zlib_Decompress_decompress(compobject *self, PyObject *args) unsigned int max_length = 0; if (!PyArg_ParseTuple(args, "y*|O&:decompress", - &data, uint_converter, &max_length)) + &data, capped_uint_converter, &max_length)) goto exit; return_value = zlib_Decompress_decompress_impl(self, &data, max_length); @@ -353,7 +353,7 @@ zlib_Decompress_flush(compobject *self, PyObject *args) unsigned int length = DEF_BUF_SIZE; if (!PyArg_ParseTuple(args, "|O&:flush", - uint_converter, &length)) + capped_uint_converter, &length)) goto exit; return_value = zlib_Decompress_flush_impl(self, length); @@ -438,4 +438,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=56ed1147bbbb4788 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7734aec079550bc8 input=a9049054013a1b77]*/ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 1997b40d18..37307be39d 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -226,42 +226,42 @@ zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int level) /*[python input] -class uint_converter(CConverter): +class capped_uint_converter(CConverter): type = 'unsigned int' - converter = 'uint_converter' + converter = 'capped_uint_converter' c_ignored_default = "0" [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=22263855f7a3ebfd]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=35521e4e733823c7]*/ static int -uint_converter(PyObject *obj, void *ptr) +capped_uint_converter(PyObject *obj, void *ptr) { - long val; - unsigned long uval; + PyObject *long_obj; + Py_ssize_t val; - val = PyLong_AsLong(obj); - if (val == -1 && PyErr_Occurred()) { - uval = PyLong_AsUnsignedLong(obj); - if (uval == (unsigned long)-1 && PyErr_Occurred()) - return 0; + long_obj = (PyObject *)_PyLong_FromNbInt(obj); + if (long_obj == NULL) { + return 0; } - else { - if (val < 0) { - PyErr_SetString(PyExc_ValueError, - "value must be positive"); - return 0; - } - uval = (unsigned long)val; + val = PyLong_AsSsize_t(long_obj); + Py_DECREF(long_obj); + if (val == -1 && PyErr_Occurred()) { + return 0; } - - if (uval > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Python int too large for C unsigned int"); + if (val < 0) { + PyErr_SetString(PyExc_ValueError, + "value must be positive"); return 0; } - *(unsigned int *)ptr = Py_SAFE_DOWNCAST(uval, unsigned long, unsigned int); + if ((size_t)val > UINT_MAX) { + *(unsigned int *)ptr = UINT_MAX; + } + else { + *(unsigned int *)ptr = Py_SAFE_DOWNCAST(val, Py_ssize_t, + unsigned int); + } return 1; } @@ -272,7 +272,7 @@ zlib.decompress Compressed data. wbits: int(c_default="MAX_WBITS") = MAX_WBITS The window buffer size. - bufsize: uint(c_default="DEF_BUF_SIZE") = DEF_BUF_SIZE + bufsize: capped_uint(c_default="DEF_BUF_SIZE") = DEF_BUF_SIZE The initial output buffer size. / @@ -282,7 +282,7 @@ Returns a bytes object containing the uncompressed data. static PyObject * zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, unsigned int bufsize) -/*[clinic end generated code: output=444d0987f3429574 input=0f4b9abb7103f50e]*/ +/*[clinic end generated code: output=444d0987f3429574 input=da095118b3243b27]*/ { PyObject *result_str = NULL; Byte *input; @@ -691,7 +691,7 @@ zlib.Decompress.decompress data: Py_buffer The binary data to decompress. - max_length: uint = 0 + max_length: capped_uint = 0 The maximum allowable length of the decompressed data. Unconsumed input data will be stored in the unconsumed_tail attribute. @@ -707,7 +707,7 @@ Call the flush() method to clear these buffers. static PyObject * zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, unsigned int max_length) -/*[clinic end generated code: output=b82e2a2c19f5fe7b input=02cfc047377cec86]*/ +/*[clinic end generated code: output=b82e2a2c19f5fe7b input=68b6508ab07c2cf0]*/ { int err; unsigned int old_length, length = DEF_BUF_SIZE; @@ -1048,7 +1048,7 @@ error: /*[clinic input] zlib.Decompress.flush - length: uint(c_default="DEF_BUF_SIZE") = zlib.DEF_BUF_SIZE + length: capped_uint(c_default="DEF_BUF_SIZE") = zlib.DEF_BUF_SIZE the initial size of the output buffer. / @@ -1057,7 +1057,7 @@ Return a bytes object containing any remaining decompressed data. static PyObject * zlib_Decompress_flush_impl(compobject *self, unsigned int length) -/*[clinic end generated code: output=db6fb753ab698e22 input=1580956505978993]*/ +/*[clinic end generated code: output=db6fb753ab698e22 input=1bb961eb21b62aa0]*/ { int err; unsigned int new_length; -- cgit v1.2.1 From 822041ddbdaad1d66641fae961f3da48bf5c140d Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 25 Nov 2015 15:28:13 +0200 Subject: Issue #7990: dir() on ElementTree.Element now lists properties: "tag", "text", "tail" and "attrib". Original patch by Santoso Wijaya. --- Modules/_elementtree.c | 170 +++++++++++++++++++++++++++---------------------- 1 file changed, 94 insertions(+), 76 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 744e8338de..f03e136ef2 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -1870,94 +1870,92 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) } static PyObject* -element_getattro(ElementObject* self, PyObject* nameobj) +element_tag_getter(ElementObject *self, void *closure) { - PyObject* res; - char *name = ""; + PyObject *res = self->tag; + Py_INCREF(res); + return res; +} - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); +static PyObject* +element_text_getter(ElementObject *self, void *closure) +{ + PyObject *res = element_get_text(self); + Py_XINCREF(res); + return res; +} - if (name == NULL) - return NULL; +static PyObject* +element_tail_getter(ElementObject *self, void *closure) +{ + PyObject *res = element_get_tail(self); + Py_XINCREF(res); + return res; +} - /* handle common attributes first */ - if (strcmp(name, "tag") == 0) { - res = self->tag; - Py_INCREF(res); - return res; - } else if (strcmp(name, "text") == 0) { - res = element_get_text(self); - Py_XINCREF(res); - return res; +static PyObject* +element_attrib_getter(ElementObject *self, void *closure) +{ + PyObject *res; + if (!self->extra) { + if (create_extra(self, NULL) < 0) + return NULL; } + res = element_get_attrib(self); + Py_XINCREF(res); + return res; +} - /* methods */ - res = PyObject_GenericGetAttr((PyObject*) self, nameobj); - if (res) - return res; - - /* less common attributes */ - if (strcmp(name, "tail") == 0) { - PyErr_Clear(); - res = element_get_tail(self); - } else if (strcmp(name, "attrib") == 0) { - PyErr_Clear(); - if (!self->extra) { - if (create_extra(self, NULL) < 0) - return NULL; - } - res = element_get_attrib(self); +/* macro for setter validation */ +#define _VALIDATE_ATTR_VALUE(V) \ + if ((V) == NULL) { \ + PyErr_SetString( \ + PyExc_AttributeError, \ + "can't delete element attribute"); \ + return -1; \ } - if (!res) - return NULL; - - Py_INCREF(res); - return res; +static int +element_tag_setter(ElementObject *self, PyObject *value, void *closure) +{ + _VALIDATE_ATTR_VALUE(value); + Py_INCREF(value); + Py_DECREF(self->tag); + self->tag = value; + return 0; } static int -element_setattro(ElementObject* self, PyObject* nameobj, PyObject* value) +element_text_setter(ElementObject *self, PyObject *value, void *closure) { - char *name = ""; + _VALIDATE_ATTR_VALUE(value); + Py_INCREF(value); + Py_DECREF(JOIN_OBJ(self->text)); + self->text = value; + return 0; +} - if (value == NULL) { - PyErr_SetString(PyExc_AttributeError, - "can't delete attribute"); - return -1; - } - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); - if (name == NULL) - return -1; +static int +element_tail_setter(ElementObject *self, PyObject *value, void *closure) +{ + _VALIDATE_ATTR_VALUE(value); + Py_INCREF(value); + Py_DECREF(JOIN_OBJ(self->tail)); + self->tail = value; + return 0; +} - if (strcmp(name, "tag") == 0) { - Py_DECREF(self->tag); - self->tag = value; - Py_INCREF(self->tag); - } else if (strcmp(name, "text") == 0) { - Py_DECREF(JOIN_OBJ(self->text)); - self->text = value; - Py_INCREF(self->text); - } else if (strcmp(name, "tail") == 0) { - Py_DECREF(JOIN_OBJ(self->tail)); - self->tail = value; - Py_INCREF(self->tail); - } else if (strcmp(name, "attrib") == 0) { - if (!self->extra) { - if (create_extra(self, NULL) < 0) - return -1; - } - Py_DECREF(self->extra->attrib); - self->extra->attrib = value; - Py_INCREF(self->extra->attrib); - } else { - PyErr_SetString(PyExc_AttributeError, - "Can't set arbitrary attributes on Element"); - return -1; +static int +element_attrib_setter(ElementObject *self, PyObject *value, void *closure) +{ + _VALIDATE_ATTR_VALUE(value); + if (!self->extra) { + if (create_extra(self, NULL) < 0) + return -1; } - + Py_INCREF(value); + Py_DECREF(self->extra->attrib); + self->extra->attrib = value; return 0; } @@ -3770,6 +3768,26 @@ static PyMappingMethods element_as_mapping = { (objobjargproc) element_ass_subscr, }; +static PyGetSetDef element_getsetlist[] = { + {"tag", + (getter)element_tag_getter, + (setter)element_tag_setter, + "A string identifying what kind of data this element represents"}, + {"text", + (getter)element_text_getter, + (setter)element_text_setter, + "A string of text directly after the start tag, or None"}, + {"tail", + (getter)element_tail_getter, + (setter)element_tail_setter, + "A string of text directly after the end tag, or None"}, + {"attrib", + (getter)element_attrib_getter, + (setter)element_attrib_setter, + "A dictionary containing the element's attributes"}, + {NULL}, +}; + static PyTypeObject Element_Type = { PyVarObject_HEAD_INIT(NULL, 0) "xml.etree.ElementTree.Element", sizeof(ElementObject), 0, @@ -3786,8 +3804,8 @@ static PyTypeObject Element_Type = { 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ - (getattrofunc)element_getattro, /* tp_getattro */ - (setattrofunc)element_setattro, /* tp_setattro */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* tp_flags */ @@ -3800,7 +3818,7 @@ static PyTypeObject Element_Type = { 0, /* tp_iternext */ element_methods, /* tp_methods */ 0, /* tp_members */ - 0, /* tp_getset */ + element_getsetlist, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ -- cgit v1.2.1 From 0b2be356380b91c945a044ddd261b5c8c3c264b5 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Mon, 30 Nov 2015 03:18:29 +0000 Subject: Issue #5319: New Py_FinalizeEx() API to exit with status 120 on failure --- Modules/main.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/main.c b/Modules/main.c index 2a9ea2882c..0fbdb698e3 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -654,7 +654,7 @@ Py_Main(int argc, wchar_t **argv) Py_SetProgramName(wbuf); /* Don't free wbuf, the argument to Py_SetProgramName - * must remain valid until the Py_Finalize is called. + * must remain valid until Py_FinalizeEx is called. */ } else { Py_SetProgramName(argv[0]); @@ -785,7 +785,11 @@ Py_Main(int argc, wchar_t **argv) sts = PyRun_AnyFileFlags(stdin, "", &cf) != 0; } - Py_Finalize(); + if (Py_FinalizeEx() < 0) { + /* Value unlikely to be confused with a non-error exit status or + other special meaning */ + sts = 120; + } #ifdef __INSURE__ /* Insure++ is a memory analysis tool that aids in discovering -- cgit v1.2.1 From 2ec62b128f42b516353ae6d2063f87add256396f Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Sun, 6 Dec 2015 03:15:05 +0000 Subject: Issue #25717: Tolerate fstat() failures in the FileIO constructor This restores 3.4 behaviour, which was removed by revision 3b5279b5bfd1. The fstat() call fails with ENOENT for a Virtual Box shared folder filesystem if the file entry has been unlinked, e.g. for a temporary file. --- Modules/_io/fileio.c | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 12e37bbbbe..5f88d58c45 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -250,6 +250,7 @@ _io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode, int *atomic_flag_works = NULL; #endif struct _Py_stat_struct fdfstat; + int fstat_result; int async_err = 0; assert(PyFileIO_Check(self)); @@ -438,22 +439,36 @@ _io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode, } self->blksize = DEFAULT_BUFFER_SIZE; - if (_Py_fstat(self->fd, &fdfstat) < 0) - goto error; -#if defined(S_ISDIR) && defined(EISDIR) - /* On Unix, open will succeed for directories. - In Python, there should be no file objects referring to - directories, so we need a check. */ - if (S_ISDIR(fdfstat.st_mode)) { - errno = EISDIR; - PyErr_SetFromErrnoWithFilenameObject(PyExc_IOError, nameobj); - goto error; + Py_BEGIN_ALLOW_THREADS + fstat_result = _Py_fstat_noraise(self->fd, &fdfstat); + Py_END_ALLOW_THREADS + if (fstat_result < 0) { +#ifdef MS_WINDOWS + if (GetLastError() == ERROR_INVALID_HANDLE) { + PyErr_SetFromWindowsErr(0); +#else + if (errno == EBADF) { + PyErr_SetFromErrno(PyExc_OSError); +#endif + goto error; + } } + else { +#if defined(S_ISDIR) && defined(EISDIR) + /* On Unix, open will succeed for directories. + In Python, there should be no file objects referring to + directories, so we need a check. */ + if (S_ISDIR(fdfstat.st_mode)) { + errno = EISDIR; + PyErr_SetFromErrnoWithFilenameObject(PyExc_IOError, nameobj); + goto error; + } #endif /* defined(S_ISDIR) */ #ifdef HAVE_STRUCT_STAT_ST_BLKSIZE - if (fdfstat.st_blksize > 1) - self->blksize = fdfstat.st_blksize; + if (fdfstat.st_blksize > 1) + self->blksize = fdfstat.st_blksize; #endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */ + } #if defined(MS_WINDOWS) || defined(__CYGWIN__) /* don't translate newlines (\r\n <=> \n) */ -- cgit v1.2.1 From 899719890ac4328ef16ad2cc5068e93b8424263a Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Sun, 6 Dec 2015 11:12:15 +0000 Subject: Issue #25717: Add comment explaining why errors are ignored --- Modules/_io/fileio.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 5f88d58c45..dbd604a116 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -443,6 +443,9 @@ _io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode, fstat_result = _Py_fstat_noraise(self->fd, &fdfstat); Py_END_ALLOW_THREADS if (fstat_result < 0) { + /* Tolerate fstat() errors other than EBADF. See Issue #25717, where + an anonymous file on a Virtual Box shared folder filesystem would + raise ENOENT. */ #ifdef MS_WINDOWS if (GetLastError() == ERROR_INVALID_HANDLE) { PyErr_SetFromWindowsErr(0); -- cgit v1.2.1 From 22306ca43756345c142028d51dc420dd2b08f677 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 6 Dec 2015 22:01:35 +0200 Subject: Issue #25761: Improved detecting errors in broken pickle data. --- Modules/_pickle.c | 111 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 69 insertions(+), 42 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 3ddf6a0281..38598c5292 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -370,18 +370,12 @@ _Pickle_FastCall(PyObject *func, PyObject *obj) /*************************************************************************/ -static int -stack_underflow(void) -{ - PickleState *st = _Pickle_GetGlobalState(); - PyErr_SetString(st->UnpicklingError, "unpickling stack underflow"); - return -1; -} - /* Internal data type used as the unpickling stack. */ typedef struct { PyObject_VAR_HEAD PyObject **data; + int mark_set; /* is MARK set? */ + Py_ssize_t fence; /* position of top MARK or 0 */ Py_ssize_t allocated; /* number of slots in data allocated */ } Pdata; @@ -412,6 +406,8 @@ Pdata_New(void) if (!(self = PyObject_New(Pdata, &Pdata_Type))) return NULL; Py_SIZE(self) = 0; + self->mark_set = 0; + self->fence = 0; self->allocated = 8; self->data = PyMem_MALLOC(self->allocated * sizeof(PyObject *)); if (self->data) @@ -429,8 +425,7 @@ Pdata_clear(Pdata *self, Py_ssize_t clearto) { Py_ssize_t i = Py_SIZE(self); - if (clearto < 0) - return stack_underflow(); + assert(clearto >= self->fence); if (clearto >= i) return 0; @@ -466,6 +461,17 @@ Pdata_grow(Pdata *self) return -1; } +static int +Pdata_stack_underflow(Pdata *self) +{ + PickleState *st = _Pickle_GetGlobalState(); + PyErr_SetString(st->UnpicklingError, + self->mark_set ? + "unexpected MARK found" : + "unpickling stack underflow"); + return -1; +} + /* D is a Pdata*. Pop the topmost element and store it into V, which * must be an lvalue holding PyObject*. On stack underflow, UnpicklingError * is raised and V is set to NULL. @@ -473,9 +479,8 @@ Pdata_grow(Pdata *self) static PyObject * Pdata_pop(Pdata *self) { - if (Py_SIZE(self) == 0) { - PickleState *st = _Pickle_GetGlobalState(); - PyErr_SetString(st->UnpicklingError, "bad pickle data"); + if (Py_SIZE(self) <= self->fence) { + Pdata_stack_underflow(self); return NULL; } return self->data[--Py_SIZE(self)]; @@ -507,6 +512,10 @@ Pdata_poptuple(Pdata *self, Py_ssize_t start) PyObject *tuple; Py_ssize_t len, i, j; + if (start < self->fence) { + Pdata_stack_underflow(self); + return NULL; + } len = Py_SIZE(self) - start; tuple = PyTuple_New(len); if (tuple == NULL) @@ -4585,13 +4594,19 @@ find_class(UnpicklerObject *self, PyObject *module_name, PyObject *global_name) static Py_ssize_t marker(UnpicklerObject *self) { - PickleState *st = _Pickle_GetGlobalState(); + Py_ssize_t mark; + if (self->num_marks < 1) { + PickleState *st = _Pickle_GetGlobalState(); PyErr_SetString(st->UnpicklingError, "could not find MARK"); return -1; } - return self->marks[--self->num_marks]; + mark = self->marks[--self->num_marks]; + self->stack->mark_set = self->num_marks != 0; + self->stack->fence = self->num_marks ? + self->marks[self->num_marks - 1] : 0; + return mark; } static int @@ -5052,7 +5067,7 @@ load_counted_tuple(UnpicklerObject *self, int len) PyObject *tuple; if (Py_SIZE(self->stack) < len) - return stack_underflow(); + return Pdata_stack_underflow(self->stack); tuple = Pdata_poptuple(self->stack, Py_SIZE(self->stack) - len); if (tuple == NULL) @@ -5134,6 +5149,12 @@ load_dict(UnpicklerObject *self) if ((dict = PyDict_New()) == NULL) return -1; + if ((j - i) % 2 != 0) { + PickleState *st = _Pickle_GetGlobalState(); + PyErr_SetString(st->UnpicklingError, "odd number of items for DICT"); + return -1; + } + for (k = i + 1; k < j; k += 2) { key = self->stack->data[k - 1]; value = self->stack->data[k]; @@ -5201,7 +5222,7 @@ load_obj(UnpicklerObject *self) return -1; if (Py_SIZE(self->stack) - i < 1) - return stack_underflow(); + return Pdata_stack_underflow(self->stack); args = Pdata_poptuple(self->stack, i + 1); if (args == NULL) @@ -5518,12 +5539,15 @@ load_pop(UnpicklerObject *self) */ if (self->num_marks > 0 && self->marks[self->num_marks - 1] == len) { self->num_marks--; - } else if (len > 0) { + self->stack->mark_set = self->num_marks != 0; + self->stack->fence = self->num_marks ? + self->marks[self->num_marks - 1] : 0; + } else if (len <= self->stack->fence) + return Pdata_stack_underflow(self->stack); + else { len--; Py_DECREF(self->stack->data[len]); Py_SIZE(self->stack) = len; - } else { - return stack_underflow(); } return 0; } @@ -5545,10 +5569,10 @@ static int load_dup(UnpicklerObject *self) { PyObject *last; - Py_ssize_t len; + Py_ssize_t len = Py_SIZE(self->stack); - if ((len = Py_SIZE(self->stack)) <= 0) - return stack_underflow(); + if (len <= self->stack->fence) + return Pdata_stack_underflow(self->stack); last = self->stack->data[len - 1]; PDATA_APPEND(self->stack, last, -1); return 0; @@ -5731,8 +5755,8 @@ load_put(UnpicklerObject *self) return -1; if (len < 2) return bad_readline(); - if (Py_SIZE(self->stack) <= 0) - return stack_underflow(); + if (Py_SIZE(self->stack) <= self->stack->fence) + return Pdata_stack_underflow(self->stack); value = self->stack->data[Py_SIZE(self->stack) - 1]; key = PyLong_FromString(s, NULL, 10); @@ -5760,8 +5784,8 @@ load_binput(UnpicklerObject *self) if (_Unpickler_Read(self, &s, 1) < 0) return -1; - if (Py_SIZE(self->stack) <= 0) - return stack_underflow(); + if (Py_SIZE(self->stack) <= self->stack->fence) + return Pdata_stack_underflow(self->stack); value = self->stack->data[Py_SIZE(self->stack) - 1]; idx = Py_CHARMASK(s[0]); @@ -5779,8 +5803,8 @@ load_long_binput(UnpicklerObject *self) if (_Unpickler_Read(self, &s, 4) < 0) return -1; - if (Py_SIZE(self->stack) <= 0) - return stack_underflow(); + if (Py_SIZE(self->stack) <= self->stack->fence) + return Pdata_stack_underflow(self->stack); value = self->stack->data[Py_SIZE(self->stack) - 1]; idx = calc_binsize(s, 4); @@ -5798,8 +5822,8 @@ load_memoize(UnpicklerObject *self) { PyObject *value; - if (Py_SIZE(self->stack) <= 0) - return stack_underflow(); + if (Py_SIZE(self->stack) <= self->stack->fence) + return Pdata_stack_underflow(self->stack); value = self->stack->data[Py_SIZE(self->stack) - 1]; return _Unpickler_MemoPut(self, self->memo_len, value); @@ -5813,8 +5837,8 @@ do_append(UnpicklerObject *self, Py_ssize_t x) Py_ssize_t len, i; len = Py_SIZE(self->stack); - if (x > len || x <= 0) - return stack_underflow(); + if (x > len || x <= self->stack->fence) + return Pdata_stack_underflow(self->stack); if (len == x) /* nothing to do */ return 0; @@ -5863,8 +5887,8 @@ do_append(UnpicklerObject *self, Py_ssize_t x) static int load_append(UnpicklerObject *self) { - if (Py_SIZE(self->stack) - 1 <= 0) - return stack_underflow(); + if (Py_SIZE(self->stack) - 1 <= self->stack->fence) + return Pdata_stack_underflow(self->stack); return do_append(self, Py_SIZE(self->stack) - 1); } @@ -5886,8 +5910,8 @@ do_setitems(UnpicklerObject *self, Py_ssize_t x) int status = 0; len = Py_SIZE(self->stack); - if (x > len || x <= 0) - return stack_underflow(); + if (x > len || x <= self->stack->fence) + return Pdata_stack_underflow(self->stack); if (len == x) /* nothing to do */ return 0; if ((len - x) % 2 != 0) { @@ -5940,8 +5964,8 @@ load_additems(UnpicklerObject *self) if (mark < 0) return -1; len = Py_SIZE(self->stack); - if (mark > len || mark <= 0) - return stack_underflow(); + if (mark > len || mark <= self->stack->fence) + return Pdata_stack_underflow(self->stack); if (len == mark) /* nothing to do */ return 0; @@ -5996,8 +6020,8 @@ load_build(UnpicklerObject *self) /* Stack is ... instance, state. We want to leave instance at * the stack top, possibly mutated via instance.__setstate__(state). */ - if (Py_SIZE(self->stack) < 2) - return stack_underflow(); + if (Py_SIZE(self->stack) - 2 < self->stack->fence) + return Pdata_stack_underflow(self->stack); PDATA_POP(self->stack, state); if (state == NULL) @@ -6133,7 +6157,8 @@ load_mark(UnpicklerObject *self) self->marks_size = (Py_ssize_t)alloc; } - self->marks[self->num_marks++] = Py_SIZE(self->stack); + self->stack->mark_set = 1; + self->marks[self->num_marks++] = self->stack->fence = Py_SIZE(self->stack); return 0; } @@ -6216,6 +6241,8 @@ load(UnpicklerObject *self) char *s = NULL; self->num_marks = 0; + self->stack->mark_set = 0; + self->stack->fence = 0; self->proto = 0; if (Py_SIZE(self->stack)) Pdata_clear(self->stack, 0); -- cgit v1.2.1 From 8b5502dee0a559ea1975ff4aa76197c501a2ac33 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 7 Dec 2015 02:31:11 +0200 Subject: Issue #25638: Optimized ElementTree.iterparse(); it is now 2x faster. ElementTree.XMLParser._setevents now accepts any objects with the append method, not just a list. --- Modules/_elementtree.c | 35 +++++++++++++++++++---------------- Modules/clinic/_elementtree.c.h | 7 ++++--- 2 files changed, 23 insertions(+), 19 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 9026585be4..168c7d6d47 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2289,7 +2289,7 @@ typedef struct { PyObject *element_factory; /* element tracing */ - PyObject *events; /* list of events, or NULL if not collecting */ + PyObject *events_append; /* the append method of the list of events, or NULL */ PyObject *start_event_obj; /* event objects (NULL to ignore) */ PyObject *end_event_obj; PyObject *start_ns_event_obj; @@ -2324,7 +2324,7 @@ treebuilder_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } t->index = 0; - t->events = NULL; + t->events_append = NULL; t->start_event_obj = t->end_event_obj = NULL; t->start_ns_event_obj = t->end_ns_event_obj = NULL; } @@ -2374,7 +2374,7 @@ treebuilder_gc_clear(TreeBuilderObject *self) Py_CLEAR(self->start_ns_event_obj); Py_CLEAR(self->end_event_obj); Py_CLEAR(self->start_event_obj); - Py_CLEAR(self->events); + Py_CLEAR(self->events_append); Py_CLEAR(self->stack); Py_CLEAR(self->data); Py_CLEAR(self->last); @@ -2455,13 +2455,14 @@ treebuilder_append_event(TreeBuilderObject *self, PyObject *action, PyObject *node) { if (action != NULL) { - PyObject *res = PyTuple_Pack(2, action, node); - if (res == NULL) + PyObject *res; + PyObject *event = PyTuple_Pack(2, action, node); + if (event == NULL) return -1; - if (PyList_Append(self->events, res) < 0) { - Py_DECREF(res); + res = PyObject_CallFunctionObjArgs(self->events_append, event, NULL); + Py_DECREF(event); + if (res == NULL) return -1; - } Py_DECREF(res); } return 0; @@ -3039,7 +3040,7 @@ expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix, if (PyErr_Occurred()) return; - if (!target->events || !target->start_ns_event_obj) + if (!target->events_append || !target->start_ns_event_obj) return; if (!uri) @@ -3062,7 +3063,7 @@ expat_end_ns_handler(XMLParserObject* self, const XML_Char* prefix_in) if (PyErr_Occurred()) return; - if (!target->events) + if (!target->events_append) return; treebuilder_append_event(target, target->end_ns_event_obj, Py_None); @@ -3551,7 +3552,7 @@ _elementtree_XMLParser_doctype_impl(XMLParserObject *self, PyObject *name, /*[clinic input] _elementtree.XMLParser._setevents - events_queue: object(subclass_of='&PyList_Type') + events_queue: object events_to_report: object = None / @@ -3561,12 +3562,12 @@ static PyObject * _elementtree_XMLParser__setevents_impl(XMLParserObject *self, PyObject *events_queue, PyObject *events_to_report) -/*[clinic end generated code: output=1440092922b13ed1 input=59db9742910c6174]*/ +/*[clinic end generated code: output=1440092922b13ed1 input=abf90830a1c3b0fc]*/ { /* activate element event reporting */ Py_ssize_t i, seqlen; TreeBuilderObject *target; - PyObject *events_seq; + PyObject *events_append, *events_seq; if (!TreeBuilder_CheckExact(self->target)) { PyErr_SetString( @@ -3579,9 +3580,11 @@ _elementtree_XMLParser__setevents_impl(XMLParserObject *self, target = (TreeBuilderObject*) self->target; - Py_INCREF(events_queue); - Py_XDECREF(target->events); - target->events = events_queue; + events_append = PyObject_GetAttrString(events_queue, "append"); + if (events_append == NULL) + return NULL; + Py_XDECREF(target->events_append); + target->events_append = events_append; /* clear out existing events */ Py_CLEAR(target->start_event_obj); diff --git a/Modules/clinic/_elementtree.c.h b/Modules/clinic/_elementtree.c.h index 86b4c4cec7..92e98cf0a2 100644 --- a/Modules/clinic/_elementtree.c.h +++ b/Modules/clinic/_elementtree.c.h @@ -668,12 +668,13 @@ _elementtree_XMLParser__setevents(XMLParserObject *self, PyObject *args) PyObject *events_queue; PyObject *events_to_report = Py_None; - if (!PyArg_ParseTuple(args, "O!|O:_setevents", - &PyList_Type, &events_queue, &events_to_report)) + if (!PyArg_UnpackTuple(args, "_setevents", + 1, 2, + &events_queue, &events_to_report)) goto exit; return_value = _elementtree_XMLParser__setevents_impl(self, events_queue, events_to_report); exit: return return_value; } -/*[clinic end generated code: output=25b8bf7e7f2151ca input=a9049054013a1b77]*/ +/*[clinic end generated code: output=19d94e2d2726d3aa input=a9049054013a1b77]*/ -- cgit v1.2.1 From ab397e70e8690e5ddd8f6ea90ff4c0b38f14702d Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 7 Dec 2015 11:32:00 +0200 Subject: Issue #25761: Fixed reference leak added in previous changeset (5c670af0100f). --- Modules/_pickle.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 38598c5292..b3d9b91238 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -5152,6 +5152,7 @@ load_dict(UnpicklerObject *self) if ((j - i) % 2 != 0) { PickleState *st = _Pickle_GetGlobalState(); PyErr_SetString(st->UnpicklingError, "odd number of items for DICT"); + Py_DECREF(dict); return -1; } -- cgit v1.2.1 From 2dc35f2195a86bc3a99181420a6271951609da5c Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 7 Dec 2015 20:45:16 -0800 Subject: Only update the arr variable when PyObject_RichCompareBool() has been called. --- Modules/_heapqmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 28604afee9..1c37c75c8f 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -78,6 +78,7 @@ siftup(PyListObject *heap, Py_ssize_t pos) if (cmp < 0) return -1; childpos += ((unsigned)cmp ^ 1); /* increment when cmp==0 */ + arr = _PyList_ITEMS(heap); /* arr may have changed */ if (endpos != PyList_GET_SIZE(heap)) { PyErr_SetString(PyExc_RuntimeError, "list changed size during iteration"); @@ -85,7 +86,6 @@ siftup(PyListObject *heap, Py_ssize_t pos) } } /* Move the smaller child up. */ - arr = _PyList_ITEMS(heap); tmp1 = arr[childpos]; tmp2 = arr[pos]; arr[childpos] = tmp2; @@ -432,6 +432,7 @@ siftup_max(PyListObject *heap, Py_ssize_t pos) if (cmp < 0) return -1; childpos += ((unsigned)cmp ^ 1); /* increment when cmp==0 */ + arr = _PyList_ITEMS(heap); /* arr may have changed */ if (endpos != PyList_GET_SIZE(heap)) { PyErr_SetString(PyExc_RuntimeError, "list changed size during iteration"); @@ -439,7 +440,6 @@ siftup_max(PyListObject *heap, Py_ssize_t pos) } } /* Move the smaller child up. */ - arr = _PyList_ITEMS(heap); tmp1 = arr[childpos]; tmp2 = arr[pos]; arr[childpos] = tmp2; -- cgit v1.2.1 From f9be53edd76d67976e3c2594471c6c49e0e298e9 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 9 Dec 2015 11:27:07 +0200 Subject: Fixed possible leak in ElementTree.Element.iter(). --- Modules/_elementtree.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 6e2f711da2..5d15ed3b1b 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -1373,6 +1373,17 @@ static PyObject * _elementtree_Element_iter_impl(ElementObject *self, PyObject *tag) /*[clinic end generated code: output=3f49f9a862941cc5 input=774d5b12e573aedd]*/ { + if (PyUnicode_Check(tag)) { + if (PyUnicode_READY(tag) < 0) + return NULL; + if (PyUnicode_GET_LENGTH(tag) == 1 && PyUnicode_READ_CHAR(tag, 0) == '*') + tag = Py_None; + } + else if (PyBytes_Check(tag)) { + if (PyBytes_GET_SIZE(tag) == 1 && *PyBytes_AS_STRING(tag) == '*') + tag = Py_None; + } + return create_elementiter(self, tag, 0); } @@ -2238,17 +2249,6 @@ create_elementiter(ElementObject *self, PyObject *tag, int gettext) if (!it) return NULL; - if (PyUnicode_Check(tag)) { - if (PyUnicode_READY(tag) < 0) - return NULL; - if (PyUnicode_GET_LENGTH(tag) == 1 && PyUnicode_READ_CHAR(tag, 0) == '*') - tag = Py_None; - } - else if (PyBytes_Check(tag)) { - if (PyBytes_GET_SIZE(tag) == 1 && *PyBytes_AS_STRING(tag) == '*') - tag = Py_None; - } - Py_INCREF(tag); it->sought_tag = tag; it->root_done = 0; -- cgit v1.2.1 From 0f1c9149002dfa8c10207aca941b1ee405e27cd1 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 9 Dec 2015 19:44:30 +0200 Subject: Fixed possible leaks in ElementTree parser. --- Modules/_elementtree.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 5d15ed3b1b..915a0be4d4 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2935,8 +2935,10 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, /* attributes */ if (attrib_in[0]) { attrib = PyDict_New(); - if (!attrib) + if (!attrib) { + Py_DECREF(tag); return; + } while (attrib_in[0] && attrib_in[1]) { PyObject* key = makeuniversal(self, attrib_in[0]); PyObject* value = PyUnicode_DecodeUTF8(attrib_in[1], strlen(attrib_in[1]), "strict"); @@ -2944,6 +2946,7 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, Py_XDECREF(value); Py_XDECREF(key); Py_DECREF(attrib); + Py_DECREF(tag); return; } ok = PyDict_SetItem(attrib, key, value); @@ -2951,6 +2954,7 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, Py_DECREF(key); if (ok < 0) { Py_DECREF(attrib); + Py_DECREF(tag); return; } attrib_in += 2; @@ -2958,8 +2962,10 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, } else { /* Pass an empty dictionary on */ attrib = PyDict_New(); - if (!attrib) + if (!attrib) { + Py_DECREF(tag); return; + } } if (TreeBuilder_CheckExact(self->target)) { -- cgit v1.2.1 From e923dd71b94c6a600ded58d9199568334f69d480 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 10 Dec 2015 09:51:53 +0200 Subject: Issue #25638: Optimized ElementTree parsing; it is now 10% faster. --- Modules/_elementtree.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 3cf3d59f12..c483d878b7 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2491,10 +2491,17 @@ treebuilder_handle_start(TreeBuilderObject* self, PyObject* tag, self->data = NULL; } - if (self->element_factory && self->element_factory != Py_None) { - node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib); - } else { + if (!self->element_factory || self->element_factory == Py_None) { node = create_new_element(tag, attrib); + } else if (attrib == Py_None) { + attrib = PyDict_New(); + if (!attrib) + return NULL; + node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib); + Py_DECREF(attrib); + } + else { + node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib); } if (!node) { return NULL; @@ -2959,12 +2966,8 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, attrib_in += 2; } } else { - /* Pass an empty dictionary on */ - attrib = PyDict_New(); - if (!attrib) { - Py_DECREF(tag); - return; - } + Py_INCREF(Py_None); + attrib = Py_None; } if (TreeBuilder_CheckExact(self->target)) { @@ -2973,6 +2976,14 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, tag, attrib); } else if (self->handle_start) { + if (attrib == Py_None) { + Py_DECREF(attrib); + attrib = PyDict_New(); + if (!attrib) { + Py_DECREF(tag); + return; + } + } res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib); } else res = NULL; -- cgit v1.2.1 From ed20ac617f374dd28f5396efeb2e50f349f94eb8 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Sat, 12 Dec 2015 06:57:13 +0000 Subject: Issue #25845: Drop redundant checks leftover from int to long conversion --- Modules/_ctypes/cfield.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 3c7a52a6d9..8cb6d663e7 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -1375,7 +1375,7 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size) Py_INCREF(value); return value; } - if (PyLong_Check(value) || PyLong_Check(value)) { + if (PyLong_Check(value)) { #if SIZEOF_VOID_P == SIZEOF_LONG_LONG *(wchar_t **)ptr = (wchar_t *)PyLong_AsUnsignedLongLongMask(value); #else @@ -1491,7 +1491,7 @@ P_set(void *ptr, PyObject *value, Py_ssize_t size) _RET(value); } - if (!PyLong_Check(value) && !PyLong_Check(value)) { + if (!PyLong_Check(value)) { PyErr_SetString(PyExc_TypeError, "cannot be converted to pointer"); return NULL; -- cgit v1.2.1 From 29bf8007d19472b05a1cad426a7a10e379adfb28 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 13 Dec 2015 21:40:26 +0100 Subject: Issue #25846: Fix usage of Py_ARRAY_LENGTH() in win32_wchdir() --- Modules/posixmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 854a7491c5..c25d535b80 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1345,13 +1345,13 @@ win32_chdir(LPCSTR path) static BOOL __stdcall win32_wchdir(LPCWSTR path) { - wchar_t _new_path[MAX_PATH], *new_path = _new_path; + wchar_t path_buf[MAX_PATH], *new_path = path_buf; int result; wchar_t env[4] = L"=x:"; if(!SetCurrentDirectoryW(path)) return FALSE; - result = GetCurrentDirectoryW(Py_ARRAY_LENGTH(new_path), new_path); + result = GetCurrentDirectoryW(Py_ARRAY_LENGTH(path_buf), new_path); if (!result) return FALSE; if (result > Py_ARRAY_LENGTH(new_path)) { @@ -1372,7 +1372,7 @@ win32_wchdir(LPCWSTR path) return TRUE; env[1] = new_path[0]; result = SetEnvironmentVariableW(env, new_path); - if (new_path != _new_path) + if (new_path != path_buf) PyMem_RawFree(new_path); return result; } -- cgit v1.2.1 From 7aa367d116117892d212fdd69a80c64ec134f120 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 14 Dec 2015 00:21:50 +0100 Subject: Issue #25846: Fix usage of Py_ARRAY_LENGTH() in win32_wchdir() (new try) --- Modules/posixmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index c25d535b80..e4b27a79c0 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1354,7 +1354,7 @@ win32_wchdir(LPCWSTR path) result = GetCurrentDirectoryW(Py_ARRAY_LENGTH(path_buf), new_path); if (!result) return FALSE; - if (result > Py_ARRAY_LENGTH(new_path)) { + if (result > Py_ARRAY_LENGTH(path_buf)) { new_path = PyMem_RawMalloc(result * sizeof(wchar_t)); if (!new_path) { SetLastError(ERROR_OUTOFMEMORY); -- cgit v1.2.1 From ff271e7a7aeb0f5ef6fa8b60e8bcb2b2a13bd204 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 18 Dec 2015 10:03:13 +0200 Subject: Issues #25890, #25891, #25892: Removed unused variables in Windows code. Reported by Alexander Riccio. --- Modules/posixmodule.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 0e423f9bc4..81c3c4807e 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -3463,7 +3463,6 @@ _listdir_windows_no_opendir(path_t *path, PyObject *list) char *bufptr = namebuf; /* only claim to have space for MAX_PATH */ Py_ssize_t len = Py_ARRAY_LENGTH(namebuf)-4; - PyObject *po = NULL; wchar_t *wnamebuf = NULL; if (!path->narrow) { @@ -12380,7 +12379,6 @@ enable_symlink() HANDLE tok; TOKEN_PRIVILEGES tok_priv; LUID luid; - int meth_idx = 0; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &tok)) return 0; -- cgit v1.2.1 From 86cf753f67b8c316e6dbc5f21f4b75d17f0f0cb7 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 18 Dec 2015 10:06:58 +0200 Subject: Issue #25890: Removed yet one unused variable. --- Modules/posixmodule.c | 1 - 1 file changed, 1 deletion(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 81c3c4807e..7ec1f47e7e 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -3460,7 +3460,6 @@ _listdir_windows_no_opendir(path_t *path, PyObject *list) BOOL result; WIN32_FIND_DATA FileData; char namebuf[MAX_PATH+4]; /* Overallocate for "\*.*" */ - char *bufptr = namebuf; /* only claim to have space for MAX_PATH */ Py_ssize_t len = Py_ARRAY_LENGTH(namebuf)-4; wchar_t *wnamebuf = NULL; -- cgit v1.2.1 From e7fe1d033e834d6b4deb61eb6fe5984e11fb5fc0 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 19 Dec 2015 20:05:25 +0200 Subject: Issue #25421: __sizeof__ methods of builtin types now use dynamic basic size. This allows sys.getsize() to work correctly with their subclasses with __slots__ defined. --- Modules/_collectionsmodule.c | 2 +- Modules/_decimal/_decimal.c | 2 +- Modules/_elementtree.c | 2 +- Modules/_io/bufferedio.c | 2 +- Modules/_io/bytesio.c | 2 +- Modules/_pickle.c | 4 ++-- Modules/_struct.c | 2 +- Modules/arraymodule.c | 2 +- Modules/itertoolsmodule.c | 8 ++++---- Modules/mmapmodule.c | 2 +- Modules/parsermodule.c | 2 +- 11 files changed, 15 insertions(+), 15 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 214872b393..4fffe01a84 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1443,7 +1443,7 @@ deque_sizeof(dequeobject *deque, void *unused) Py_ssize_t res; Py_ssize_t blocks; - res = sizeof(dequeobject); + res = _PyObject_SIZE(Py_TYPE(deque)); blocks = (deque->leftindex + Py_SIZE(deque) + BLOCKLEN - 1) / BLOCKLEN; assert(deque->leftindex + Py_SIZE(deque) - 1 == (blocks - 1) * BLOCKLEN + deque->rightindex); diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index 169914c2f7..112b44fda7 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -4529,7 +4529,7 @@ dec_sizeof(PyObject *v, PyObject *dummy UNUSED) { Py_ssize_t res; - res = sizeof(PyDecObject); + res = _PyObject_SIZE(Py_TYPE(v)); if (mpd_isdynamic_data(MPD(v))) { res += MPD(v)->alloc * sizeof(mpd_uint_t); } diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 915a0be4d4..c69998cd17 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -847,7 +847,7 @@ static Py_ssize_t _elementtree_Element___sizeof___impl(ElementObject *self) /*[clinic end generated code: output=bf73867721008000 input=70f4b323d55a17c1]*/ { - Py_ssize_t result = sizeof(ElementObject); + Py_ssize_t result = _PyObject_SIZE(Py_TYPE(self)); if (self->extra) { result += sizeof(ElementObjectExtra); if (self->extra->children != self->extra->_children) diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 29e000bde4..6bb2200e20 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -423,7 +423,7 @@ buffered_sizeof(buffered *self, void *unused) { Py_ssize_t res; - res = sizeof(buffered); + res = _PyObject_SIZE(Py_TYPE(self)); if (self->buffer) res += self->buffer_size; return PyLong_FromSsize_t(res); diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index 31cc1f79a1..eef3b3de72 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -991,7 +991,7 @@ bytesio_sizeof(bytesio *self, void *unused) { Py_ssize_t res; - res = sizeof(bytesio); + res = _PyObject_SIZE(Py_TYPE(self)); if (self->buf && !SHARED_BUF(self)) res += _PySys_GetSizeOf(self->buf); return PyLong_FromSsize_t(res); diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 41f1cd1975..56bbd587b5 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -4015,7 +4015,7 @@ _pickle_Pickler___sizeof___impl(PicklerObject *self) { Py_ssize_t res, s; - res = sizeof(PicklerObject); + res = _PyObject_SIZE(Py_TYPE(self)); if (self->memo != NULL) { res += sizeof(PyMemoTable); res += self->memo->mt_allocated * sizeof(PyMemoEntry); @@ -6418,7 +6418,7 @@ _pickle_Unpickler___sizeof___impl(UnpicklerObject *self) { Py_ssize_t res; - res = sizeof(UnpicklerObject); + res = _PyObject_SIZE(Py_TYPE(self)); if (self->memo != NULL) res += self->memo_size * sizeof(PyObject *); if (self->marks != NULL) diff --git a/Modules/_struct.c b/Modules/_struct.c index 068c5d1e1d..b61f9f6fa9 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -1924,7 +1924,7 @@ s_sizeof(PyStructObject *self, void *unused) Py_ssize_t size; formatcode *code; - size = sizeof(PyStructObject) + sizeof(formatcode); + size = _PyObject_SIZE(Py_TYPE(self)) + sizeof(formatcode); for (code = self->s_codes; code->fmtdef != NULL; code++) size += sizeof(formatcode); return PyLong_FromSsize_t(size); diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index a3ccf9344f..6af75a4357 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1743,7 +1743,7 @@ array_array___sizeof___impl(arrayobject *self) /*[clinic end generated code: output=d8e1c61ebbe3eaed input=805586565bf2b3c6]*/ { Py_ssize_t res; - res = sizeof(arrayobject) + self->allocated * self->ob_descr->itemsize; + res = _PyObject_SIZE(Py_TYPE(self)) + self->allocated * self->ob_descr->itemsize; return PyLong_FromSsize_t(res); } diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index dfafeab520..9c210ea871 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -2089,7 +2089,7 @@ product_sizeof(productobject *lz, void *unused) { Py_ssize_t res; - res = sizeof(productobject); + res = _PyObject_SIZE(Py_TYPE(lz)); res += PyTuple_GET_SIZE(lz->pools) * sizeof(Py_ssize_t); return PyLong_FromSsize_t(res); } @@ -2420,7 +2420,7 @@ combinations_sizeof(combinationsobject *co, void *unused) { Py_ssize_t res; - res = sizeof(combinationsobject); + res = _PyObject_SIZE(Py_TYPE(co)); res += co->r * sizeof(Py_ssize_t); return PyLong_FromSsize_t(res); } @@ -2761,7 +2761,7 @@ cwr_sizeof(cwrobject *co, void *unused) { Py_ssize_t res; - res = sizeof(cwrobject); + res = _PyObject_SIZE(Py_TYPE(co)); res += co->r * sizeof(Py_ssize_t); return PyLong_FromSsize_t(res); } @@ -3110,7 +3110,7 @@ permutations_sizeof(permutationsobject *po, void *unused) { Py_ssize_t res; - res = sizeof(permutationsobject); + res = _PyObject_SIZE(Py_TYPE(po)); res += PyTuple_GET_SIZE(po->pool) * sizeof(Py_ssize_t); res += po->r * sizeof(Py_ssize_t); return PyLong_FromSsize_t(res); diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index daab52b388..bb98a99427 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -719,7 +719,7 @@ mmap__sizeof__method(mmap_object *self, void *unused) { Py_ssize_t res; - res = sizeof(mmap_object); + res = _PyObject_SIZE(Py_TYPE(self)); if (self->tagname) res += strlen(self->tagname) + 1; return PyLong_FromSsize_t(res); diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 8023558fd1..6471b8ee99 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -397,7 +397,7 @@ parser_sizeof(PyST_Object *st, void *unused) { Py_ssize_t res; - res = sizeof(PyST_Object) + _PyNode_SizeOf(st->st_node); + res = _PyObject_SIZE(Py_TYPE(st)) + _PyNode_SizeOf(st->st_node); return PyLong_FromSsize_t(res); } -- cgit v1.2.1 From fc537b1a4682c1ab07058fced759f684185071be Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 21 Dec 2015 11:09:48 +0200 Subject: Issue #25902: Fixed various refcount issues in ElementTree iteration. --- Modules/_elementtree.c | 90 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 32 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index c69998cd17..8eb655c1f4 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2072,6 +2072,7 @@ elementiter_next(ElementIterObject *it) ElementObject *cur_parent; Py_ssize_t child_index; int rc; + ElementObject *elem; while (1) { /* Handle the case reached in the beginning and end of iteration, where @@ -2085,38 +2086,47 @@ elementiter_next(ElementIterObject *it) PyErr_SetNone(PyExc_StopIteration); return NULL; } else { + elem = it->root_element; it->parent_stack = parent_stack_push_new(it->parent_stack, - it->root_element); + elem); if (!it->parent_stack) { PyErr_NoMemory(); return NULL; } + Py_INCREF(elem); it->root_done = 1; rc = (it->sought_tag == Py_None); if (!rc) { - rc = PyObject_RichCompareBool(it->root_element->tag, + rc = PyObject_RichCompareBool(elem->tag, it->sought_tag, Py_EQ); - if (rc < 0) + if (rc < 0) { + Py_DECREF(elem); return NULL; + } } if (rc) { if (it->gettext) { - PyObject *text = element_get_text(it->root_element); - if (!text) + PyObject *text = element_get_text(elem); + if (!text) { + Py_DECREF(elem); return NULL; + } + Py_INCREF(text); + Py_DECREF(elem); rc = PyObject_IsTrue(text); + if (rc > 0) + return text; + Py_DECREF(text); if (rc < 0) return NULL; - if (rc) { - Py_INCREF(text); - return text; - } } else { - Py_INCREF(it->root_element); - return (PyObject *)it->root_element; + return (PyObject *)elem; } } + else { + Py_DECREF(elem); + } } } @@ -2126,54 +2136,68 @@ elementiter_next(ElementIterObject *it) cur_parent = it->parent_stack->parent; child_index = it->parent_stack->child_index; if (cur_parent->extra && child_index < cur_parent->extra->length) { - ElementObject *child = (ElementObject *) - cur_parent->extra->children[child_index]; + elem = (ElementObject *)cur_parent->extra->children[child_index]; it->parent_stack->child_index++; it->parent_stack = parent_stack_push_new(it->parent_stack, - child); + elem); if (!it->parent_stack) { PyErr_NoMemory(); return NULL; } + Py_INCREF(elem); if (it->gettext) { - PyObject *text = element_get_text(child); - if (!text) + PyObject *text = element_get_text(elem); + if (!text) { + Py_DECREF(elem); return NULL; + } + Py_INCREF(text); + Py_DECREF(elem); rc = PyObject_IsTrue(text); + if (rc > 0) + return text; + Py_DECREF(text); if (rc < 0) return NULL; - if (rc) { - Py_INCREF(text); - return text; - } } else { rc = (it->sought_tag == Py_None); if (!rc) { - rc = PyObject_RichCompareBool(child->tag, + rc = PyObject_RichCompareBool(elem->tag, it->sought_tag, Py_EQ); - if (rc < 0) + if (rc < 0) { + Py_DECREF(elem); return NULL; + } } if (rc) { - Py_INCREF(child); - return (PyObject *)child; + return (PyObject *)elem; } + Py_DECREF(elem); } } else { PyObject *tail; - ParentLocator *next = it->parent_stack->next; + ParentLocator *next; if (it->gettext) { + Py_INCREF(cur_parent); tail = element_get_tail(cur_parent); - if (!tail) + if (!tail) { + Py_DECREF(cur_parent); return NULL; + } + Py_INCREF(tail); + Py_DECREF(cur_parent); } - else + else { tail = Py_None; - Py_XDECREF(it->parent_stack->parent); + Py_INCREF(tail); + } + next = it->parent_stack->next; + cur_parent = it->parent_stack->parent; PyObject_Free(it->parent_stack); it->parent_stack = next; + Py_XDECREF(cur_parent); /* Note that extra condition on it->parent_stack->parent here; * this is because itertext() is supposed to only return *inner* @@ -2181,12 +2205,14 @@ elementiter_next(ElementIterObject *it) */ if (it->parent_stack->parent) { rc = PyObject_IsTrue(tail); + if (rc > 0) + return tail; + Py_DECREF(tail); if (rc < 0) return NULL; - if (rc) { - Py_INCREF(tail); - return tail; - } + } + else { + Py_DECREF(tail); } } } -- cgit v1.2.1 From 6a17951f862a5ea81d2105c86eb661c8e872e423 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 21 Dec 2015 12:43:54 +0200 Subject: Issue #25873: Optimized iterating ElementTree. Iterating elements Element.iter() is now 40% faster, iterating text Element.itertext() is now up to 2.5 times faster. --- Modules/_elementtree.c | 259 +++++++++++++++++++------------------------------ 1 file changed, 101 insertions(+), 158 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 949e3a05bb..ad3e45c3d8 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -1986,22 +1986,22 @@ static PySequenceMethods element_as_sequence = { * pre-order traversal. To keep track of which sub-element should be returned * next, a stack of parents is maintained. This is a standard stack-based * iterative pre-order traversal of a tree. - * The stack is managed using a single-linked list starting at parent_stack. - * Each stack node contains the saved parent to which we should return after + * The stack is managed using a continuous array. + * Each stack item contains the saved parent to which we should return after * the current one is exhausted, and the next child to examine in that parent. */ typedef struct ParentLocator_t { ElementObject *parent; Py_ssize_t child_index; - struct ParentLocator_t *next; } ParentLocator; typedef struct { PyObject_HEAD ParentLocator *parent_stack; + Py_ssize_t parent_stack_used; + Py_ssize_t parent_stack_size; ElementObject *root_element; PyObject *sought_tag; - int root_done; int gettext; } ElementIterObject; @@ -2009,13 +2009,11 @@ typedef struct { static void elementiter_dealloc(ElementIterObject *it) { - ParentLocator *p = it->parent_stack; - while (p) { - ParentLocator *temp = p; - Py_XDECREF(p->parent); - p = p->next; - PyObject_Free(temp); - } + Py_ssize_t i = it->parent_stack_used; + it->parent_stack_used = 0; + while (i--) + Py_XDECREF(it->parent_stack[i].parent); + PyMem_Free(it->parent_stack); Py_XDECREF(it->sought_tag); Py_XDECREF(it->root_element); @@ -2027,11 +2025,9 @@ elementiter_dealloc(ElementIterObject *it) static int elementiter_traverse(ElementIterObject *it, visitproc visit, void *arg) { - ParentLocator *p = it->parent_stack; - while (p) { - Py_VISIT(p->parent); - p = p->next; - } + Py_ssize_t i = it->parent_stack_used; + while (i--) + Py_VISIT(it->parent_stack[i].parent); Py_VISIT(it->root_element); Py_VISIT(it->sought_tag); @@ -2040,17 +2036,25 @@ elementiter_traverse(ElementIterObject *it, visitproc visit, void *arg) /* Helper function for elementiter_next. Add a new parent to the parent stack. */ -static ParentLocator * -parent_stack_push_new(ParentLocator *stack, ElementObject *parent) +static int +parent_stack_push_new(ElementIterObject *it, ElementObject *parent) { - ParentLocator *new_node = PyObject_Malloc(sizeof(ParentLocator)); - if (new_node) { - new_node->parent = parent; - Py_INCREF(parent); - new_node->child_index = 0; - new_node->next = stack; + ParentLocator *item; + + if (it->parent_stack_used >= it->parent_stack_size) { + Py_ssize_t new_size = it->parent_stack_size * 2; /* never overflow */ + ParentLocator *parent_stack = it->parent_stack; + PyMem_Resize(parent_stack, ParentLocator, new_size); + if (parent_stack == NULL) + return -1; + it->parent_stack = parent_stack; + it->parent_stack_size = new_size; } - return new_node; + item = it->parent_stack + it->parent_stack_used++; + Py_INCREF(parent); + item->parent = parent; + item->child_index = 0; + return 0; } static PyObject * @@ -2067,151 +2071,91 @@ elementiter_next(ElementIterObject *it) * - itertext() also has to handle tail, after finishing with all the * children of a node. */ - ElementObject *cur_parent; - Py_ssize_t child_index; int rc; ElementObject *elem; + PyObject *text; while (1) { /* Handle the case reached in the beginning and end of iteration, where - * the parent stack is empty. The root_done flag gives us indication - * whether we've just started iterating (so root_done is 0), in which - * case the root is returned. If root_done is 1 and we're here, the + * the parent stack is empty. If root_element is NULL and we're here, the * iterator is exhausted. */ - if (!it->parent_stack->parent) { - if (it->root_done) { + if (!it->parent_stack_used) { + if (!it->root_element) { PyErr_SetNone(PyExc_StopIteration); return NULL; - } else { - elem = it->root_element; - it->parent_stack = parent_stack_push_new(it->parent_stack, - elem); - if (!it->parent_stack) { - PyErr_NoMemory(); - return NULL; - } + } - Py_INCREF(elem); - it->root_done = 1; - rc = (it->sought_tag == Py_None); - if (!rc) { - rc = PyObject_RichCompareBool(elem->tag, - it->sought_tag, Py_EQ); - if (rc < 0) { - Py_DECREF(elem); - return NULL; - } - } - if (rc) { - if (it->gettext) { - PyObject *text = element_get_text(elem); - if (!text) { - Py_DECREF(elem); - return NULL; - } - Py_INCREF(text); - Py_DECREF(elem); - rc = PyObject_IsTrue(text); - if (rc > 0) - return text; - Py_DECREF(text); - if (rc < 0) - return NULL; - } else { - return (PyObject *)elem; - } - } - else { - Py_DECREF(elem); + elem = it->root_element; /* steals a reference */ + it->root_element = NULL; + } + else { + /* See if there are children left to traverse in the current parent. If + * yes, visit the next child. If not, pop the stack and try again. + */ + ParentLocator *item = &it->parent_stack[it->parent_stack_used - 1]; + Py_ssize_t child_index = item->child_index; + ElementObjectExtra *extra; + elem = item->parent; + extra = elem->extra; + if (!extra || child_index >= extra->length) { + it->parent_stack_used--; + /* Note that extra condition on it->parent_stack_used here; + * this is because itertext() is supposed to only return *inner* + * text, not text following the element it began iteration with. + */ + if (it->gettext && it->parent_stack_used) { + text = element_get_tail(elem); + goto gettext; } + Py_DECREF(elem); + continue; } + + elem = (ElementObject *)extra->children[child_index]; + item->child_index++; + Py_INCREF(elem); } - /* See if there are children left to traverse in the current parent. If - * yes, visit the next child. If not, pop the stack and try again. - */ - cur_parent = it->parent_stack->parent; - child_index = it->parent_stack->child_index; - if (cur_parent->extra && child_index < cur_parent->extra->length) { - elem = (ElementObject *)cur_parent->extra->children[child_index]; - it->parent_stack->child_index++; - it->parent_stack = parent_stack_push_new(it->parent_stack, - elem); - if (!it->parent_stack) { - PyErr_NoMemory(); - return NULL; - } + if (parent_stack_push_new(it, elem) < 0) { + Py_DECREF(elem); + PyErr_NoMemory(); + return NULL; + } + if (it->gettext) { + text = element_get_text(elem); + goto gettext; + } - Py_INCREF(elem); - if (it->gettext) { - PyObject *text = element_get_text(elem); - if (!text) { - Py_DECREF(elem); - return NULL; - } - Py_INCREF(text); - Py_DECREF(elem); - rc = PyObject_IsTrue(text); - if (rc > 0) - return text; - Py_DECREF(text); - if (rc < 0) - return NULL; - } else { - rc = (it->sought_tag == Py_None); - if (!rc) { - rc = PyObject_RichCompareBool(elem->tag, - it->sought_tag, Py_EQ); - if (rc < 0) { - Py_DECREF(elem); - return NULL; - } - } - if (rc) { - return (PyObject *)elem; - } - Py_DECREF(elem); - } + if (it->sought_tag == Py_None) + return (PyObject *)elem; + + rc = PyObject_RichCompareBool(elem->tag, it->sought_tag, Py_EQ); + if (rc > 0) + return (PyObject *)elem; + + Py_DECREF(elem); + if (rc < 0) + return NULL; + continue; + +gettext: + if (!text) { + Py_DECREF(elem); + return NULL; + } + if (text == Py_None) { + Py_DECREF(elem); } else { - PyObject *tail; - ParentLocator *next; - if (it->gettext) { - Py_INCREF(cur_parent); - tail = element_get_tail(cur_parent); - if (!tail) { - Py_DECREF(cur_parent); - return NULL; - } - Py_INCREF(tail); - Py_DECREF(cur_parent); - } - else { - tail = Py_None; - Py_INCREF(tail); - } - next = it->parent_stack->next; - cur_parent = it->parent_stack->parent; - PyObject_Free(it->parent_stack); - it->parent_stack = next; - Py_XDECREF(cur_parent); - - /* Note that extra condition on it->parent_stack->parent here; - * this is because itertext() is supposed to only return *inner* - * text, not text following the element it began iteration with. - */ - if (it->parent_stack->parent) { - rc = PyObject_IsTrue(tail); - if (rc > 0) - return tail; - Py_DECREF(tail); - if (rc < 0) - return NULL; - } - else { - Py_DECREF(tail); - } + Py_INCREF(text); + Py_DECREF(elem); + rc = PyObject_IsTrue(text); + if (rc > 0) + return text; + Py_DECREF(text); + if (rc < 0) + return NULL; } } @@ -2263,6 +2207,7 @@ static PyTypeObject ElementIter_Type = { 0, /* tp_new */ }; +#define INIT_PARENT_STACK_SIZE 8 static PyObject * create_elementiter(ElementObject *self, PyObject *tag, int gettext) @@ -2275,22 +2220,20 @@ create_elementiter(ElementObject *self, PyObject *tag, int gettext) Py_INCREF(tag); it->sought_tag = tag; - it->root_done = 0; it->gettext = gettext; Py_INCREF(self); it->root_element = self; PyObject_GC_Track(it); - it->parent_stack = PyObject_Malloc(sizeof(ParentLocator)); + it->parent_stack = PyMem_New(ParentLocator, INIT_PARENT_STACK_SIZE); if (it->parent_stack == NULL) { Py_DECREF(it); PyErr_NoMemory(); return NULL; } - it->parent_stack->parent = NULL; - it->parent_stack->child_index = 0; - it->parent_stack->next = NULL; + it->parent_stack_used = 0; + it->parent_stack_size = INIT_PARENT_STACK_SIZE; return (PyObject *)it; } -- cgit v1.2.1 From 977fd6d7c6593680fd5ffdebb262a2a3f2f24387 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 21 Dec 2015 12:57:27 +0200 Subject: Issue #25869: Optimized deepcopying ElementTree; it is now 20 times faster. --- Modules/_elementtree.c | 78 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 54 insertions(+), 24 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index ad3e45c3d8..5908c725e1 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -128,30 +128,6 @@ elementtree_free(void *m) /* helpers */ -LOCAL(PyObject*) -deepcopy(PyObject* object, PyObject* memo) -{ - /* do a deep copy of the given object */ - PyObject* args; - PyObject* result; - elementtreestate *st = ET_STATE_GLOBAL; - - if (!st->deepcopy_obj) { - PyErr_SetString( - PyExc_RuntimeError, - "deepcopy helper not found" - ); - return NULL; - } - - args = PyTuple_Pack(2, object, memo); - if (!args) - return NULL; - result = PyObject_CallObject(st->deepcopy_obj, args); - Py_DECREF(args); - return result; -} - LOCAL(PyObject*) list_join(PyObject* list) { @@ -748,6 +724,9 @@ _elementtree_Element___copy___impl(ElementObject *self) return (PyObject*) element; } +/* Helper for a deep copy. */ +LOCAL(PyObject *) deepcopy(PyObject *, PyObject *); + /*[clinic input] _elementtree.Element.__deepcopy__ @@ -838,6 +817,57 @@ _elementtree_Element___deepcopy__(ElementObject *self, PyObject *memo) return NULL; } +LOCAL(PyObject *) +deepcopy(PyObject *object, PyObject *memo) +{ + /* do a deep copy of the given object */ + PyObject *args; + PyObject *result; + elementtreestate *st; + + /* Fast paths */ + if (object == Py_None || PyUnicode_CheckExact(object)) { + Py_INCREF(object); + return object; + } + + if (Py_REFCNT(object) == 1) { + if (PyDict_CheckExact(object)) { + PyObject *key, *value; + Py_ssize_t pos = 0; + int simple = 1; + while (PyDict_Next(object, &pos, &key, &value)) { + if (!PyUnicode_CheckExact(key) || !PyUnicode_CheckExact(value)) { + simple = 0; + break; + } + } + if (simple) + return PyDict_Copy(object); + /* Fall through to general case */ + } + else if (Element_CheckExact(object)) { + return _elementtree_Element___deepcopy__((ElementObject *)object, memo); + } + } + + /* General case */ + st = ET_STATE_GLOBAL; + if (!st->deepcopy_obj) { + PyErr_SetString(PyExc_RuntimeError, + "deepcopy helper not found"); + return NULL; + } + + args = PyTuple_Pack(2, object, memo); + if (!args) + return NULL; + result = PyObject_CallObject(st->deepcopy_obj, args); + Py_DECREF(args); + return result; +} + + /*[clinic input] _elementtree.Element.__sizeof__ -> Py_ssize_t -- cgit v1.2.1 From 585a1eed45faea53f836b1db2ac211d7f14b44c8 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 24 Dec 2015 10:35:59 +0200 Subject: Issue #20440: Massive replacing unsafe attribute setting code with special macro Py_SETREF. --- Modules/_csv.c | 6 ++---- Modules/_ctypes/_ctypes.c | 41 ++++++++++++++--------------------------- Modules/_curses_panel.c | 5 ++--- Modules/_io/bytesio.c | 3 +-- Modules/_sqlite/connection.c | 13 +++++-------- Modules/_sqlite/cursor.c | 13 +++++-------- Modules/_sre.c | 3 +-- Modules/_ssl.c | 6 ++---- Modules/faulthandler.c | 9 +++------ Modules/itertoolsmodule.c | 3 +-- Modules/signalmodule.c | 3 +-- Modules/zipimport.c | 3 +-- Modules/zlibmodule.c | 6 ++---- 13 files changed, 40 insertions(+), 74 deletions(-) (limited to 'Modules') diff --git a/Modules/_csv.c b/Modules/_csv.c index af901e2d3e..fe85069435 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -276,9 +276,8 @@ _set_str(const char *name, PyObject **target, PyObject *src, const char *dflt) else { if (PyUnicode_READY(src) == -1) return -1; - Py_XDECREF(*target); Py_INCREF(src); - *target = src; + Py_SETREF(*target, src); } } return 0; @@ -784,8 +783,7 @@ parse_process_char(ReaderObj *self, Py_UCS4 c) static int parse_reset(ReaderObj *self) { - Py_XDECREF(self->fields); - self->fields = PyList_New(0); + Py_SETREF(self->fields, PyList_New(0)); if (self->fields == NULL) return -1; self->field_len = 0; diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 00eb700f84..01fccca83e 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -391,8 +391,7 @@ StructUnionType_new(PyTypeObject *type, PyObject *args, PyObject *kwds, int isSt Py_DECREF((PyObject *)dict); return NULL; } - Py_DECREF(result->tp_dict); - result->tp_dict = (PyObject *)dict; + Py_SETREF(result->tp_dict, (PyObject *)dict); dict->format = _ctypes_alloc_format_string(NULL, "B"); if (dict->format == NULL) { Py_DECREF(result); @@ -871,8 +870,7 @@ PyCPointerType_SetProto(StgDictObject *stgdict, PyObject *proto) return -1; } Py_INCREF(proto); - Py_XDECREF(stgdict->proto); - stgdict->proto = proto; + Py_SETREF(stgdict->proto, proto); return 0; } @@ -962,8 +960,7 @@ PyCPointerType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) Py_DECREF((PyObject *)stgdict); return NULL; } - Py_DECREF(result->tp_dict); - result->tp_dict = (PyObject *)stgdict; + Py_SETREF(result->tp_dict, (PyObject *)stgdict); return (PyObject *)result; } @@ -1406,8 +1403,7 @@ PyCArrayType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) /* replace the class dict by our updated spam dict */ if (-1 == PyDict_Update((PyObject *)stgdict, result->tp_dict)) goto error; - Py_DECREF(result->tp_dict); - result->tp_dict = (PyObject *)stgdict; /* steal the reference */ + Py_SETREF(result->tp_dict, (PyObject *)stgdict); /* steal the reference */ stgdict = NULL; /* Special case for character arrays. @@ -1820,8 +1816,7 @@ static PyObject *CreateSwappedType(PyTypeObject *type, PyObject *args, PyObject Py_DECREF((PyObject *)stgdict); return NULL; } - Py_DECREF(result->tp_dict); - result->tp_dict = (PyObject *)stgdict; + Py_SETREF(result->tp_dict, (PyObject *)stgdict); return (PyObject *)result; } @@ -1949,8 +1944,7 @@ PyCSimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) Py_DECREF((PyObject *)stgdict); return NULL; } - Py_DECREF(result->tp_dict); - result->tp_dict = (PyObject *)stgdict; + Py_SETREF(result->tp_dict, (PyObject *)stgdict); /* Install from_param class methods in ctypes base classes. Overrides the PyCSimpleType_from_param generic method. @@ -2313,8 +2307,7 @@ PyCFuncPtrType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) Py_DECREF((PyObject *)stgdict); return NULL; } - Py_DECREF(result->tp_dict); - result->tp_dict = (PyObject *)stgdict; + Py_SETREF(result->tp_dict, (PyObject *)stgdict); if (-1 == make_funcptrtype_dict(stgdict)) { Py_DECREF(result); @@ -2458,8 +2451,7 @@ KeepRef(CDataObject *target, Py_ssize_t index, PyObject *keep) return -1; } if (ob->b_objects == NULL || !PyDict_CheckExact(ob->b_objects)) { - Py_XDECREF(ob->b_objects); - ob->b_objects = keep; /* refcount consumed */ + Py_SETREF(ob->b_objects, keep); /* refcount consumed */ return 0; } key = unique_key(target, index); @@ -2962,9 +2954,8 @@ PyCFuncPtr_set_errcheck(PyCFuncPtrObject *self, PyObject *ob) "the errcheck attribute must be callable"); return -1; } - Py_XDECREF(self->errcheck); Py_XINCREF(ob); - self->errcheck = ob; + Py_SETREF(self->errcheck, ob); return 0; } @@ -2993,9 +2984,8 @@ PyCFuncPtr_set_restype(PyCFuncPtrObject *self, PyObject *ob) return -1; } Py_XDECREF(self->checker); - Py_XDECREF(self->restype); Py_INCREF(ob); - self->restype = ob; + Py_SETREF(self->restype, ob); self->checker = PyObject_GetAttrString(ob, "_check_retval_"); if (self->checker == NULL) PyErr_Clear(); @@ -3033,11 +3023,9 @@ PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob) converters = converters_from_argtypes(ob); if (!converters) return -1; - Py_XDECREF(self->converters); - self->converters = converters; - Py_XDECREF(self->argtypes); + Py_SETREF(self->converters, converters); Py_INCREF(ob); - self->argtypes = ob; + Py_SETREF(self->argtypes, ob); } return 0; } @@ -5164,9 +5152,8 @@ comerror_init(PyObject *self, PyObject *args, PyObject *kwds) return -1; bself = (PyBaseExceptionObject *)self; - Py_DECREF(bself->args); - bself->args = args; - Py_INCREF(bself->args); + Py_INCREF(args); + Py_SETREF(bself->args, args); return 0; } diff --git a/Modules/_curses_panel.c b/Modules/_curses_panel.c index 87b9c0516f..759b73109d 100644 --- a/Modules/_curses_panel.c +++ b/Modules/_curses_panel.c @@ -312,9 +312,8 @@ PyCursesPanel_replace_panel(PyCursesPanelObject *self, PyObject *args) PyErr_SetString(_curses_panelstate_global->PyCursesError, "replace_panel() returned ERR"); return NULL; } - Py_DECREF(po->wo); - po->wo = temp; - Py_INCREF(po->wo); + Py_INCREF(temp); + Py_SETREF(po->wo, temp); Py_INCREF(Py_None); return Py_None; } diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index eef3b3de72..99e71bcc7f 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -969,8 +969,7 @@ _io_BytesIO___init___impl(bytesio *self, PyObject *initvalue) if (initvalue && initvalue != Py_None) { if (PyBytes_CheckExact(initvalue)) { Py_INCREF(initvalue); - Py_XDECREF(self->buf); - self->buf = initvalue; + Py_SETREF(self->buf, initvalue); self->string_size = PyBytes_GET_SIZE(initvalue); } else { diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index a08ebfe8c4..7018f9f3dc 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -204,8 +204,8 @@ void pysqlite_flush_statement_cache(pysqlite_Connection* self) node = node->next; } - Py_DECREF(self->statement_cache); - self->statement_cache = (pysqlite_Cache*)PyObject_CallFunction((PyObject*)&pysqlite_CacheType, "O", self); + Py_SETREF(self->statement_cache, + (pysqlite_Cache *)PyObject_CallFunction((PyObject *)&pysqlite_CacheType, "O", self)); Py_DECREF(self); self->statement_cache->decref_factory = 0; } @@ -318,9 +318,8 @@ PyObject* pysqlite_connection_cursor(pysqlite_Connection* self, PyObject* args, _pysqlite_drop_unused_cursor_references(self); if (cursor && self->row_factory != Py_None) { - Py_XDECREF(((pysqlite_Cursor*)cursor)->row_factory); Py_INCREF(self->row_factory); - ((pysqlite_Cursor*)cursor)->row_factory = self->row_factory; + Py_SETREF(((pysqlite_Cursor *)cursor)->row_factory, self->row_factory); } return cursor; @@ -795,8 +794,7 @@ static void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self } } - Py_DECREF(self->statements); - self->statements = new_list; + Py_SETREF(self->statements, new_list); } static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self) @@ -827,8 +825,7 @@ static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self) } } - Py_DECREF(self->cursors); - self->cursors = new_list; + Py_SETREF(self->cursors, new_list); } PyObject* pysqlite_connection_create_function(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index c1599c02df..d909738fd6 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -170,8 +170,7 @@ int pysqlite_build_row_cast_map(pysqlite_Cursor* self) return 0; } - Py_XDECREF(self->row_cast_map); - self->row_cast_map = PyList_New(0); + Py_SETREF(self->row_cast_map, PyList_New(0)); for (i = 0; i < sqlite3_column_count(self->statement->st); i++) { converter = NULL; @@ -510,9 +509,8 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* goto error; /* reset description and rowcount */ - Py_DECREF(self->description); Py_INCREF(Py_None); - self->description = Py_None; + Py_SETREF(self->description, Py_None); self->rowcount = -1L; func_args = PyTuple_New(1); @@ -537,8 +535,8 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* } if (self->statement->in_use) { - Py_DECREF(self->statement); - self->statement = PyObject_New(pysqlite_Statement, &pysqlite_StatementType); + Py_SETREF(self->statement, + PyObject_New(pysqlite_Statement, &pysqlite_StatementType)); if (!self->statement) { goto error; } @@ -654,8 +652,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* numcols = sqlite3_column_count(self->statement->st); Py_END_ALLOW_THREADS - Py_DECREF(self->description); - self->description = PyTuple_New(numcols); + Py_SETREF(self->description, PyTuple_New(numcols)); if (!self->description) { goto error; } diff --git a/Modules/_sre.c b/Modules/_sre.c index 957ccbc7ff..150229dfbb 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -756,8 +756,7 @@ deepcopy(PyObject** object, PyObject* memo) if (!copy) return 0; - Py_DECREF(*object); - *object = copy; + Py_SETREF(*object, copy); return 1; /* success */ } diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 67402fe0a4..8818d26e09 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1589,8 +1589,7 @@ static int PySSL_set_context(PySSLSocket *self, PyObject *value, return -1; #else Py_INCREF(value); - Py_DECREF(self->ctx); - self->ctx = (PySSLContext *) value; + Py_SETREF(self->ctx, (PySSLContext *)value); SSL_set_SSL_CTX(self->ssl, self->ctx->ctx); #endif } else { @@ -1647,8 +1646,7 @@ PySSL_get_owner(PySSLSocket *self, void *c) static int PySSL_set_owner(PySSLSocket *self, PyObject *value, void *c) { - Py_XDECREF(self->owner); - self->owner = PyWeakref_NewRef(value, NULL); + Py_SETREF(self->owner, PyWeakref_NewRef(value, NULL)); if (self->owner == NULL) return -1; return 0; diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 530ddc7efd..1ed22bf8bc 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -380,9 +380,8 @@ faulthandler_enable(PyObject *self, PyObject *args, PyObject *kwargs) if (tstate == NULL) return NULL; - Py_XDECREF(fatal_error.file); Py_XINCREF(file); - fatal_error.file = file; + Py_SETREF(fatal_error.file, file); fatal_error.fd = fd; fatal_error.all_threads = all_threads; fatal_error.interp = tstate->interp; @@ -599,9 +598,8 @@ faulthandler_dump_traceback_later(PyObject *self, /* Cancel previous thread, if running */ cancel_dump_traceback_later(); - Py_XDECREF(thread.file); Py_XINCREF(file); - thread.file = file; + Py_SETREF(thread.file, file); thread.fd = fd; thread.timeout_us = timeout_us; thread.repeat = repeat; @@ -778,9 +776,8 @@ faulthandler_register_py(PyObject *self, user->previous = previous; } - Py_XDECREF(user->file); Py_XINCREF(file); - user->file = file; + Py_SETREF(user->file, file); user->fd = fd; user->all_threads = all_threads; user->chain = chain; diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 9c210ea871..1c9a17301b 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -636,8 +636,7 @@ tee_next(teeobject *to) link = teedataobject_jumplink(to->dataobj); if (link == NULL) return NULL; - Py_DECREF(to->dataobj); - to->dataobj = (teedataobject *)link; + Py_SETREF(to->dataobj, (teedataobject *)link); to->index = 0; } value = teedataobject_getitem(to->dataobj, to->index); diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 70f3052149..da454de8d9 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -1266,8 +1266,7 @@ PyInit__signal(void) if (Handlers[SIGINT].func == DefaultHandler) { /* Install default int handler */ Py_INCREF(IntHandler); - Py_DECREF(Handlers[SIGINT].func); - Handlers[SIGINT].func = IntHandler; + Py_SETREF(Handlers[SIGINT].func, IntHandler); old_siginthandler = PyOS_setsig(SIGINT, signal_handler); } diff --git a/Modules/zipimport.c b/Modules/zipimport.c index 06abb312b3..7220faf08d 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -155,8 +155,7 @@ zipimporter_init(ZipImporter *self, PyObject *args, PyObject *kwds) tmp = PyUnicode_FromFormat("%U%c", self->prefix, SEP); if (tmp == NULL) goto error; - Py_DECREF(self->prefix); - self->prefix = tmp; + Py_SETREF(self->prefix, tmp); } } else diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 37307be39d..a15fdb2a07 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -667,8 +667,7 @@ save_unconsumed_input(compobject *self, int err) PyBytes_AS_STRING(self->unused_data), old_size); Py_MEMCPY(PyBytes_AS_STRING(new_data) + old_size, self->zst.next_in, self->zst.avail_in); - Py_DECREF(self->unused_data); - self->unused_data = new_data; + Py_SETREF(self->unused_data, new_data); self->zst.avail_in = 0; } } @@ -680,8 +679,7 @@ save_unconsumed_input(compobject *self, int err) (char *)self->zst.next_in, self->zst.avail_in); if (new_data == NULL) return -1; - Py_DECREF(self->unconsumed_tail); - self->unconsumed_tail = new_data; + Py_SETREF(self->unconsumed_tail, new_data); } return 0; } -- cgit v1.2.1 From 18daf0bbe22b35c3cba9956b48dad25fd3fcbe12 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 24 Dec 2015 11:51:57 +0200 Subject: Issue #24103: Fixed possible use after free in ElementTree.XMLPullParser. --- Modules/_elementtree.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 8eb655c1f4..2856bacc4a 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -3598,7 +3598,7 @@ _elementtree_XMLParser__setevents_impl(XMLParserObject *self, /*[clinic end generated code: output=1440092922b13ed1 input=59db9742910c6174]*/ { /* activate element event reporting */ - Py_ssize_t i, seqlen; + Py_ssize_t i; TreeBuilderObject *target; PyObject *events_seq; @@ -3614,8 +3614,7 @@ _elementtree_XMLParser__setevents_impl(XMLParserObject *self, target = (TreeBuilderObject*) self->target; Py_INCREF(events_queue); - Py_XDECREF(target->events); - target->events = events_queue; + Py_SETREF(target->events, events_queue); /* clear out existing events */ Py_CLEAR(target->start_event_obj); @@ -3634,46 +3633,41 @@ _elementtree_XMLParser__setevents_impl(XMLParserObject *self, return NULL; } - seqlen = PySequence_Size(events_seq); - for (i = 0; i < seqlen; ++i) { + for (i = 0; i < PySequence_Size(events_seq); ++i) { PyObject *event_name_obj = PySequence_Fast_GET_ITEM(events_seq, i); char *event_name = NULL; if (PyUnicode_Check(event_name_obj)) { - event_name = _PyUnicode_AsString(event_name_obj); + event_name = PyUnicode_AsUTF8(event_name_obj); } else if (PyBytes_Check(event_name_obj)) { event_name = PyBytes_AS_STRING(event_name_obj); } - if (event_name == NULL) { Py_DECREF(events_seq); PyErr_Format(PyExc_ValueError, "invalid events sequence"); return NULL; - } else if (strcmp(event_name, "start") == 0) { - Py_INCREF(event_name_obj); - target->start_event_obj = event_name_obj; + } + + Py_INCREF(event_name_obj); + if (strcmp(event_name, "start") == 0) { + Py_SETREF(target->start_event_obj, event_name_obj); } else if (strcmp(event_name, "end") == 0) { - Py_INCREF(event_name_obj); - Py_XDECREF(target->end_event_obj); - target->end_event_obj = event_name_obj; + Py_SETREF(target->end_event_obj, event_name_obj); } else if (strcmp(event_name, "start-ns") == 0) { - Py_INCREF(event_name_obj); - Py_XDECREF(target->start_ns_event_obj); - target->start_ns_event_obj = event_name_obj; + Py_SETREF(target->start_ns_event_obj, event_name_obj); EXPAT(SetNamespaceDeclHandler)( self->parser, (XML_StartNamespaceDeclHandler) expat_start_ns_handler, (XML_EndNamespaceDeclHandler) expat_end_ns_handler ); } else if (strcmp(event_name, "end-ns") == 0) { - Py_INCREF(event_name_obj); - Py_XDECREF(target->end_ns_event_obj); - target->end_ns_event_obj = event_name_obj; + Py_SETREF(target->end_ns_event_obj, event_name_obj); EXPAT(SetNamespaceDeclHandler)( self->parser, (XML_StartNamespaceDeclHandler) expat_start_ns_handler, (XML_EndNamespaceDeclHandler) expat_end_ns_handler ); } else { + Py_DECREF(event_name_obj); Py_DECREF(events_seq); PyErr_Format(PyExc_ValueError, "unknown event '%s'", event_name); return NULL; -- cgit v1.2.1 From d1ba93f9a6a441ac31c5fd1890ce730b9e6d330d Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 25 Dec 2015 19:53:18 +0200 Subject: Issue #25923: Added the const qualifier to static constant arrays. --- Modules/_csv.c | 8 ++++---- Modules/_ctypes/_ctypes.c | 14 +++++++------- Modules/_ctypes/callproc.c | 16 ++++++++-------- Modules/_curses_panel.c | 2 +- Modules/_datetimemodule.c | 20 ++++++++++---------- Modules/_dbmmodule.c | 8 ++++---- Modules/_gdbmmodule.c | 2 +- Modules/_io/textio.c | 4 ++-- Modules/_randommodule.c | 2 +- Modules/_sqlite/connection.c | 2 +- Modules/_sqlite/cursor.c | 4 ++-- Modules/_sqlite/module.c | 4 ++-- Modules/_sre.c | 2 +- Modules/_struct.c | 4 ++-- Modules/_testbuffer.c | 2 +- Modules/_testcapimodule.c | 4 ++-- Modules/arraymodule.c | 18 +++++++++--------- Modules/audioop.c | 20 +++++++++++--------- Modules/binascii.c | 14 +++++++------- Modules/getaddrinfo.c | 2 +- Modules/getpath.c | 4 ++-- Modules/main.c | 14 +++++++------- Modules/parsermodule.c | 4 ++-- Modules/posixmodule.c | 10 +++++----- Modules/selectmodule.c | 2 +- Modules/timemodule.c | 4 ++-- Modules/unicodedata.c | 4 ++-- 27 files changed, 98 insertions(+), 96 deletions(-) (limited to 'Modules') diff --git a/Modules/_csv.c b/Modules/_csv.c index fe85069435..c0be739c67 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -60,10 +60,10 @@ typedef enum { typedef struct { QuoteStyle style; - char *name; + const char *name; } StyleDesc; -static StyleDesc quote_styles[] = { +static const StyleDesc quote_styles[] = { { QUOTE_MINIMAL, "QUOTE_MINIMAL" }, { QUOTE_ALL, "QUOTE_ALL" }, { QUOTE_NONNUMERIC, "QUOTE_NONNUMERIC" }, @@ -286,7 +286,7 @@ _set_str(const char *name, PyObject **target, PyObject *src, const char *dflt) static int dialect_check_quoting(int quoting) { - StyleDesc *qs; + const StyleDesc *qs; for (qs = quote_styles; qs->name; qs++) { if ((int)qs->style == quoting) @@ -1633,7 +1633,7 @@ PyMODINIT_FUNC PyInit__csv(void) { PyObject *module; - StyleDesc *style; + const StyleDesc *style; if (PyType_Ready(&Dialect_Type) < 0) return NULL; diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 34a10994be..fccc8ba993 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -435,7 +435,7 @@ UnionType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return StructUnionType_new(type, args, kwds, 0); } -static char from_address_doc[] = +static const char from_address_doc[] = "C.from_address(integer) -> C instance\naccess a C instance at the specified address"; static PyObject * @@ -453,7 +453,7 @@ CDataType_from_address(PyObject *type, PyObject *value) return PyCData_AtAddress(type, buf); } -static char from_buffer_doc[] = +static const char from_buffer_doc[] = "C.from_buffer(object, offset=0) -> C instance\ncreate a C instance from a writeable buffer"; static int @@ -524,7 +524,7 @@ CDataType_from_buffer(PyObject *type, PyObject *args) return result; } -static char from_buffer_copy_doc[] = +static const char from_buffer_copy_doc[] = "C.from_buffer_copy(object, offset=0) -> C instance\ncreate a C instance from a readable buffer"; static PyObject * @@ -566,7 +566,7 @@ CDataType_from_buffer_copy(PyObject *type, PyObject *args) return result; } -static char in_dll_doc[] = +static const char in_dll_doc[] = "C.in_dll(dll, name) -> C instance\naccess a C instance in a dll"; static PyObject * @@ -623,7 +623,7 @@ CDataType_in_dll(PyObject *type, PyObject *args) return PyCData_AtAddress(type, address); } -static char from_param_doc[] = +static const char from_param_doc[] = "Convert a Python object into a function call parameter."; static PyObject * @@ -1481,7 +1481,7 @@ _type_ attribute. */ -static char *SIMPLE_TYPE_CHARS = "cbBhHiIlLdfuzZqQPXOv?g"; +static const char SIMPLE_TYPE_CHARS[] = "cbBhHiIlLdfuzZqQPXOv?g"; static PyObject * c_wchar_p_from_param(PyObject *type, PyObject *value) @@ -5118,7 +5118,7 @@ static const char module_docs[] = #ifdef MS_WIN32 -static char comerror_doc[] = "Raised when a COM method call failed."; +static const char comerror_doc[] = "Raised when a COM method call failed."; int comerror_init(PyObject *self, PyObject *args, PyObject *kwds) diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 03a911fa06..68981fe84a 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -1201,7 +1201,7 @@ _parse_voidp(PyObject *obj, void **address) #ifdef MS_WIN32 -static char format_error_doc[] = +static const char format_error_doc[] = "FormatError([integer]) -> string\n\ \n\ Convert a win32 error code into a string. If the error code is not\n\ @@ -1225,7 +1225,7 @@ static PyObject *format_error(PyObject *self, PyObject *args) return result; } -static char load_library_doc[] = +static const char load_library_doc[] = "LoadLibrary(name) -> handle\n\ \n\ Load an executable (usually a DLL), and return a handle to it.\n\ @@ -1254,7 +1254,7 @@ static PyObject *load_library(PyObject *self, PyObject *args) #endif } -static char free_library_doc[] = +static const char free_library_doc[] = "FreeLibrary(handle) -> void\n\ \n\ Free the handle of an executable previously loaded by LoadLibrary.\n"; @@ -1269,7 +1269,7 @@ static PyObject *free_library(PyObject *self, PyObject *args) return Py_None; } -static char copy_com_pointer_doc[] = +static const char copy_com_pointer_doc[] = "CopyComPointer(src, dst) -> HRESULT value\n"; static PyObject * @@ -1439,7 +1439,7 @@ call_cdeclfunction(PyObject *self, PyObject *args) /***************************************************************** * functions */ -static char sizeof_doc[] = +static const char sizeof_doc[] = "sizeof(C type) -> integer\n" "sizeof(C instance) -> integer\n" "Return the size in bytes of a C instance"; @@ -1460,7 +1460,7 @@ sizeof_func(PyObject *self, PyObject *obj) return NULL; } -static char alignment_doc[] = +static const char alignment_doc[] = "alignment(C type) -> integer\n" "alignment(C instance) -> integer\n" "Return the alignment requirements of a C instance"; @@ -1483,7 +1483,7 @@ align_func(PyObject *self, PyObject *obj) return NULL; } -static char byref_doc[] = +static const char byref_doc[] = "byref(C instance[, offset=0]) -> byref-object\n" "Return a pointer lookalike to a C instance, only usable\n" "as function argument"; @@ -1527,7 +1527,7 @@ byref(PyObject *self, PyObject *args) return (PyObject *)parg; } -static char addressof_doc[] = +static const char addressof_doc[] = "addressof(C instance) -> integer\n" "Return the address of the C instance internal buffer"; diff --git a/Modules/_curses_panel.c b/Modules/_curses_panel.c index 759b73109d..a9c406fde9 100644 --- a/Modules/_curses_panel.c +++ b/Modules/_curses_panel.c @@ -6,7 +6,7 @@ /* Release Number */ -static char *PyCursesVersion = "2.1"; +static const char PyCursesVersion[] = "2.1"; /* Includes */ diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 55988c5693..e8b7ae8e4f 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -184,12 +184,12 @@ divide_nearest(PyObject *m, PyObject *n) * and the number of days before that month in the same year. These * are correct for non-leap years only. */ -static int _days_in_month[] = { +static const int _days_in_month[] = { 0, /* unused; this vector uses 1-based indexing */ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; -static int _days_before_month[] = { +static const int _days_before_month[] = { 0, /* unused; this vector uses 1-based indexing */ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; @@ -1009,10 +1009,10 @@ append_keyword_tzinfo(PyObject *repr, PyObject *tzinfo) static PyObject * format_ctime(PyDateTime_Date *date, int hours, int minutes, int seconds) { - static const char *DayNames[] = { + static const char * const DayNames[] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" }; - static const char *MonthNames[] = { + static const char * const MonthNames[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; @@ -2307,7 +2307,7 @@ static PyMethodDef delta_methods[] = { {NULL, NULL}, }; -static char delta_doc[] = +static const char delta_doc[] = PyDoc_STR("Difference between two datetime values."); static PyNumberMethods delta_as_number = { @@ -2886,7 +2886,7 @@ static PyMethodDef date_methods[] = { {NULL, NULL} }; -static char date_doc[] = +static const char date_doc[] = PyDoc_STR("date(year, month, day) --> date object"); static PyNumberMethods date_as_number = { @@ -3155,7 +3155,7 @@ static PyMethodDef tzinfo_methods[] = { {NULL, NULL} }; -static char tzinfo_doc[] = +static const char tzinfo_doc[] = PyDoc_STR("Abstract base class for time zone info objects."); static PyTypeObject PyDateTime_TZInfoType = { @@ -3387,7 +3387,7 @@ static PyMethodDef timezone_methods[] = { {NULL, NULL} }; -static char timezone_doc[] = +static const char timezone_doc[] = PyDoc_STR("Fixed offset from UTC implementation of tzinfo."); static PyTypeObject PyDateTime_TimeZoneType = { @@ -3877,7 +3877,7 @@ static PyMethodDef time_methods[] = { {NULL, NULL} }; -static char time_doc[] = +static const char time_doc[] = PyDoc_STR("time([hour[, minute[, second[, microsecond[, tzinfo]]]]]) --> a time object\n\ \n\ All arguments are optional. tzinfo may be None, or an instance of\n\ @@ -5065,7 +5065,7 @@ static PyMethodDef datetime_methods[] = { {NULL, NULL} }; -static char datetime_doc[] = +static const char datetime_doc[] = PyDoc_STR("datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])\n\ \n\ The year, month and day arguments are required. tzinfo may be None, or an\n\ diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index 02899e4303..5e7ec1afc8 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -14,16 +14,16 @@ */ #if defined(HAVE_NDBM_H) #include -static char *which_dbm = "GNU gdbm"; /* EMX port of GDBM */ +static const char which_dbm[] = "GNU gdbm"; /* EMX port of GDBM */ #elif defined(HAVE_GDBM_NDBM_H) #include -static char *which_dbm = "GNU gdbm"; +static const char which_dbm[] = "GNU gdbm"; #elif defined(HAVE_GDBM_DASH_NDBM_H) #include -static char *which_dbm = "GNU gdbm"; +static const char which_dbm[] = "GNU gdbm"; #elif defined(HAVE_BERKDB_H) #include -static char *which_dbm = "Berkeley DB"; +static const char which_dbm[] = "Berkeley DB"; #else #error "No ndbm.h available!" #endif diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c index f070a14007..bf7b03694f 100644 --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -615,7 +615,7 @@ dbmopen_impl(PyModuleDef *module, const char *name, const char *flags, return newdbmobject(name, iflags, mode); } -static char dbmmodule_open_flags[] = "rwcn" +static const char dbmmodule_open_flags[] = "rwcn" #ifdef GDBM_FAST "f" #endif diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index b232b0242e..d018623470 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -772,7 +772,7 @@ typedef struct { encodefunc_t encodefunc; } encodefuncentry; -static encodefuncentry encodefuncs[] = { +static const encodefuncentry encodefuncs[] = { {"ascii", (encodefunc_t) ascii_encode}, {"iso8859-1", (encodefunc_t) latin1_encode}, {"utf-8", (encodefunc_t) utf8_encode}, @@ -1022,7 +1022,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, goto error; } else if (PyUnicode_Check(res)) { - encodefuncentry *e = encodefuncs; + const encodefuncentry *e = encodefuncs; while (e->name != NULL) { if (!PyUnicode_CompareWithASCIIString(res, e->name)) { self->encodefunc = e->encodefunc; diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 95ad4a429a..a85d905c52 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -99,7 +99,7 @@ static PY_UINT32_T genrand_int32(RandomObject *self) { PY_UINT32_T y; - static PY_UINT32_T mag01[2]={0x0U, MATRIX_A}; + static const PY_UINT32_T mag01[2] = {0x0U, MATRIX_A}; /* mag01[x] = x * MATRIX_A for x=0,1 */ PY_UINT32_T *mt; diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 7018f9f3dc..75ed1f8c88 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -1622,7 +1622,7 @@ pysqlite_connection_exit(pysqlite_Connection* self, PyObject* args) Py_RETURN_FALSE; } -static char connection_doc[] = +static const char connection_doc[] = PyDoc_STR("SQLite database connection object."); static PyGetSetDef connection_getset[] = { diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index d909738fd6..1c240d6145 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -27,7 +27,7 @@ PyObject* pysqlite_cursor_iternext(pysqlite_Cursor* self); -static char* errmsg_fetch_across_rollback = "Cursor needed to be reset because of commit/rollback and can no longer be fetched from."; +static const char errmsg_fetch_across_rollback[] = "Cursor needed to be reset because of commit/rollback and can no longer be fetched from."; static pysqlite_StatementKind detect_statement_type(const char* statement) { @@ -1050,7 +1050,7 @@ static struct PyMemberDef cursor_members[] = {NULL} }; -static char cursor_doc[] = +static const char cursor_doc[] = PyDoc_STR("SQLite database cursor class."); PyTypeObject pysqlite_CursorType = { diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 7a7e86040a..ff2e3a5dff 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -261,13 +261,13 @@ static PyMethodDef module_methods[] = { }; struct _IntConstantPair { - char* constant_name; + const char *constant_name; int constant_value; }; typedef struct _IntConstantPair IntConstantPair; -static IntConstantPair _int_constants[] = { +static const IntConstantPair _int_constants[] = { {"PARSE_DECLTYPES", PARSE_DECLTYPES}, {"PARSE_COLNAMES", PARSE_COLNAMES}, diff --git a/Modules/_sre.c b/Modules/_sre.c index 919a0693ef..f597a7032f 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -35,7 +35,7 @@ * other compatibility work. */ -static char copyright[] = +static const char copyright[] = " SRE 2.2.2 Copyright (c) 1997-2002 by Secret Labs AB "; #define PY_SSIZE_T_CLEAN diff --git a/Modules/_struct.c b/Modules/_struct.c index b61f9f6fa9..b18c71da60 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -723,7 +723,7 @@ np_void_p(char *p, PyObject *v, const formatdef *f) return 0; } -static formatdef native_table[] = { +static const formatdef native_table[] = { {'x', sizeof(char), 0, NULL}, {'b', sizeof(char), 0, nu_byte, np_byte}, {'B', sizeof(char), 0, nu_ubyte, np_ubyte}, @@ -2280,7 +2280,7 @@ PyInit__struct(void) /* Check endian and swap in faster functions */ { - formatdef *native = native_table; + const formatdef *native = native_table; formatdef *other, *ptr; #if PY_LITTLE_ENDIAN other = lilendian_table; diff --git a/Modules/_testbuffer.c b/Modules/_testbuffer.c index 43db8a8e53..13d3cccfa4 100644 --- a/Modules/_testbuffer.c +++ b/Modules/_testbuffer.c @@ -13,7 +13,7 @@ PyObject *Struct = NULL; PyObject *calcsize = NULL; /* cache simple format string */ -static const char *simple_fmt = "B"; +static const char simple_fmt[] = "B"; PyObject *simple_format = NULL; #define SIMPLE_FORMAT(fmt) (fmt == NULL || strcmp(fmt, "B") == 0) #define FIX_FORMAT(fmt) (fmt == NULL ? "B" : fmt) diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index a896af0cc0..cc3f52d1e0 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -887,7 +887,7 @@ static PyObject * getargs_keywords(PyObject *self, PyObject *args, PyObject *kwargs) { static char *keywords[] = {"arg1","arg2","arg3","arg4","arg5", NULL}; - static char *fmt="(ii)i|(i(ii))(iii)i"; + static const char fmt[] = "(ii)i|(i(ii))(iii)i"; int int_args[10]={-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, fmt, keywords, @@ -3769,7 +3769,7 @@ test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) "T_LONGLONG", "T_ULONGLONG", #endif NULL}; - static char *fmt = "|bbBhHiIlknfds#" + static const char fmt[] = "|bbBhHiIlknfds#" #ifdef HAVE_LONG_LONG "LK" #endif diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 6af75a4357..1b0a2823a1 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -31,7 +31,7 @@ struct arraydescr { int itemsize; PyObject * (*getitem)(struct arrayobject *, Py_ssize_t); int (*setitem)(struct arrayobject *, Py_ssize_t, PyObject *); - char *formats; + const char *formats; int is_integer_type; int is_signed; }; @@ -40,7 +40,7 @@ typedef struct arrayobject { PyObject_VAR_HEAD char *ob_item; Py_ssize_t allocated; - struct arraydescr *ob_descr; + const struct arraydescr *ob_descr; PyObject *weakreflist; /* List of weak references */ int ob_exports; /* Number of exported buffers */ } arrayobject; @@ -511,7 +511,7 @@ d_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) * Don't forget to update typecode_to_mformat_code() if you add a new * typecode. */ -static struct arraydescr descriptors[] = { +static const struct arraydescr descriptors[] = { {'b', 1, b_getitem, b_setitem, "b", 1, 1}, {'B', 1, BB_getitem, BB_setitem, "B", 1, 0}, {'u', sizeof(Py_UNICODE), u_getitem, u_setitem, "u", 0, 0}, @@ -539,7 +539,7 @@ class array.array "arrayobject *" "&Arraytype" /*[clinic end generated code: output=da39a3ee5e6b4b0d input=ad43d37e942a8854]*/ static PyObject * -newarrayobject(PyTypeObject *type, Py_ssize_t size, struct arraydescr *descr) +newarrayobject(PyTypeObject *type, Py_ssize_t size, const struct arraydescr *descr) { arrayobject *op; size_t nbytes; @@ -1946,7 +1946,7 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, { PyObject *converted_items; PyObject *result; - struct arraydescr *descr; + const struct arraydescr *descr; if (!PyType_Check(arraytype)) { PyErr_Format(PyExc_TypeError, @@ -2084,7 +2084,7 @@ array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, Py_ssize_t itemcount = Py_SIZE(items) / mf_descr.size; const unsigned char *memstr = (unsigned char *)PyBytes_AS_STRING(items); - struct arraydescr *descr; + const struct arraydescr *descr; /* If possible, try to pack array's items using a data type * that fits better. This may result in an array with narrower @@ -2554,7 +2554,7 @@ array_buffer_getbuf(arrayobject *self, Py_buffer *view, int flags) view->format = NULL; view->internal = NULL; if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT) { - view->format = self->ob_descr->formats; + view->format = (char *)self->ob_descr->formats; #ifdef Py_UNICODE_WIDE if (self->ob_descr->typecode == 'u') { view->format = "w"; @@ -2595,7 +2595,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { int c; PyObject *initial = NULL, *it = NULL; - struct arraydescr *descr; + const struct arraydescr *descr; if (type == &Arraytype && !_PyArg_NoKeywords("array.array()", kwds)) return NULL; @@ -2987,7 +2987,7 @@ array_modexec(PyObject *m) char buffer[Py_ARRAY_LENGTH(descriptors)], *p; PyObject *typecodes; Py_ssize_t size = 0; - struct arraydescr *descr; + const struct arraydescr *descr; if (PyType_Ready(&Arraytype) < 0) return -1; diff --git a/Modules/audioop.c b/Modules/audioop.c index 3b05aec06a..d97a3697b2 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -51,13 +51,15 @@ fbound(double val, double minval, double maxval) #define SEG_SHIFT (4) /* Left shift for segment number. */ #define SEG_MASK (0x70) /* Segment field mask. */ -static PyInt16 seg_aend[8] = {0x1F, 0x3F, 0x7F, 0xFF, - 0x1FF, 0x3FF, 0x7FF, 0xFFF}; -static PyInt16 seg_uend[8] = {0x3F, 0x7F, 0xFF, 0x1FF, - 0x3FF, 0x7FF, 0xFFF, 0x1FFF}; +static const PyInt16 seg_aend[8] = { + 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF +}; +static const PyInt16 seg_uend[8] = { + 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF +}; static PyInt16 -search(PyInt16 val, PyInt16 *table, int size) +search(PyInt16 val, const PyInt16 *table, int size) { int i; @@ -70,7 +72,7 @@ search(PyInt16 val, PyInt16 *table, int size) #define st_ulaw2linear16(uc) (_st_ulaw2linear16[uc]) #define st_alaw2linear16(uc) (_st_alaw2linear16[uc]) -static PyInt16 _st_ulaw2linear16[256] = { +static const PyInt16 _st_ulaw2linear16[256] = { -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956, -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764, -15996, -15484, -14972, -14460, -13948, @@ -176,7 +178,7 @@ st_14linear2ulaw(PyInt16 pcm_val) /* 2's complement (14-bit range) */ } -static PyInt16 _st_alaw2linear16[256] = { +static const PyInt16 _st_alaw2linear16[256] = { -5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736, -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784, -2752, -2624, -3008, -2880, -2240, @@ -270,12 +272,12 @@ st_linear2alaw(PyInt16 pcm_val) /* 2's complement (13-bit range) */ /* End of code taken from sox */ /* Intel ADPCM step variation table */ -static int indexTable[16] = { +static const int indexTable[16] = { -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8, }; -static int stepsizeTable[89] = { +static const int stepsizeTable[89] = { 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, diff --git a/Modules/binascii.c b/Modules/binascii.c index ccd81faf94..9df48dad44 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -74,7 +74,7 @@ static PyObject *Incomplete; #define SKIP 0x7E #define FAIL 0x7D -static unsigned char table_a2b_hqx[256] = { +static const unsigned char table_a2b_hqx[256] = { /* ^@ ^A ^B ^C ^D ^E ^F ^G */ /* 0*/ FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, /* \b \t \n ^K ^L \r ^N ^O */ @@ -125,10 +125,10 @@ static unsigned char table_a2b_hqx[256] = { FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, }; -static unsigned char table_b2a_hqx[] = +static const unsigned char table_b2a_hqx[] = "!\"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr"; -static char table_a2b_base64[] = { +static const char table_a2b_base64[] = { -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, @@ -144,12 +144,12 @@ static char table_a2b_base64[] = { /* Max binary chunk size; limited only by available memory */ #define BASE64_MAXBIN ((PY_SSIZE_T_MAX - 3) / 2) -static unsigned char table_b2a_base64[] = +static const unsigned char table_b2a_base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -static unsigned short crctab_hqx[256] = { +static const unsigned short crctab_hqx[256] = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, @@ -977,7 +977,7 @@ binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc) using byte-swap instructions. ********************************************************************/ -static unsigned int crc_32_tab[256] = { +static const unsigned int crc_32_tab[256] = { 0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U, 0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U, 0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U, @@ -1201,7 +1201,7 @@ binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr) return binascii_a2b_hex_impl(module, hexstr); } -static int table_hex[128] = { +static const int table_hex[128] = { -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, diff --git a/Modules/getaddrinfo.c b/Modules/getaddrinfo.c index e2a2edf82d..33d70784ab 100644 --- a/Modules/getaddrinfo.c +++ b/Modules/getaddrinfo.c @@ -136,7 +136,7 @@ static int get_addr(const char *, int, struct addrinfo **, struct addrinfo *, int); static int str_isnumber(const char *); -static char *ai_errlist[] = { +static const char * const ai_errlist[] = { "success.", "address family for hostname not supported.", /* EAI_ADDRFAMILY */ "temporary failure in name resolution.", /* EAI_AGAIN */ diff --git a/Modules/getpath.c b/Modules/getpath.c index 03d292c18b..30a0e99dc8 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -477,8 +477,8 @@ calculate_path(void) { extern wchar_t *Py_GetProgramName(void); - static wchar_t delimiter[2] = {DELIM, '\0'}; - static wchar_t separator[2] = {SEP, '\0'}; + static const wchar_t delimiter[2] = {DELIM, '\0'}; + static const wchar_t separator[2] = {SEP, '\0'}; char *_rtpypath = Py_GETENV("PYTHONPATH"); /* XXX use wide version on Windows */ wchar_t *rtpypath = NULL; wchar_t *home = Py_GetPythonHome(); diff --git a/Modules/main.c b/Modules/main.c index 0fbdb698e3..4358cc8000 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -42,11 +42,11 @@ static int orig_argc; #define PROGRAM_OPTS BASE_OPTS /* Short usage message (with %s for argv0) */ -static char *usage_line = +static const char usage_line[] = "usage: %ls [option] ... [-c cmd | -m mod | file | -] [arg] ...\n"; /* Long usage message, split into parts < 512 bytes */ -static char *usage_1 = "\ +static const char usage_1[] = "\ Options and arguments (and corresponding environment variables):\n\ -b : issue warnings about str(bytes_instance), str(bytearray_instance)\n\ and comparing bytes/bytearray with str. (-bb: issue errors)\n\ @@ -56,7 +56,7 @@ Options and arguments (and corresponding environment variables):\n\ -E : ignore PYTHON* environment variables (such as PYTHONPATH)\n\ -h : print this help message and exit (also --help)\n\ "; -static char *usage_2 = "\ +static const char usage_2[] = "\ -i : inspect interactively after running script; forces a prompt even\n\ if stdin does not appear to be a terminal; also PYTHONINSPECT=x\n\ -I : isolate Python from the user's environment (implies -E and -s)\n\ @@ -67,7 +67,7 @@ static char *usage_2 = "\ -s : don't add user site directory to sys.path; also PYTHONNOUSERSITE\n\ -S : don't imply 'import site' on initialization\n\ "; -static char *usage_3 = "\ +static const char usage_3[] = "\ -u : unbuffered binary stdout and stderr, stdin always buffered;\n\ also PYTHONUNBUFFERED=x\n\ see man page for details on internal buffering relating to '-u'\n\ @@ -79,7 +79,7 @@ static char *usage_3 = "\ -x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\ -X opt : set implementation-specific option\n\ "; -static char *usage_4 = "\ +static const char usage_4[] = "\ file : program read from script file\n\ - : program read from stdin (default; interactive mode if a tty)\n\ arg ...: arguments passed to program in sys.argv[1:]\n\n\ @@ -88,14 +88,14 @@ PYTHONSTARTUP: file executed on interactive startup (no default)\n\ PYTHONPATH : '%c'-separated list of directories prefixed to the\n\ default module search path. The result is sys.path.\n\ "; -static char *usage_5 = +static const char usage_5[] = "PYTHONHOME : alternate directory (or %c).\n" " The default module search path uses %s.\n" "PYTHONCASEOK : ignore case in 'import' statements (Windows).\n" "PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n" "PYTHONFAULTHANDLER: dump the Python traceback on fatal errors.\n\ "; -static char *usage_6 = "\ +static const char usage_6[] = "\ PYTHONHASHSEED: if this variable is set to 'random', a random value is used\n\ to seed the hashes of str, bytes and datetime objects. It can also be\n\ set to an integer in the range [0,4294967295] to get hash values with a\n\ diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 6471b8ee99..4c5f2efd0a 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -53,7 +53,7 @@ extern grammar _PyParser_Grammar; /* From graminit.c */ /* String constants used to initialize module attributes. * */ -static char parser_copyright_string[] = +static const char parser_copyright_string[] = "Copyright 1995-1996 by Virginia Polytechnic Institute & State\n\ University, Blacksburg, Virginia, USA, and Fred L. Drake, Jr., Reston,\n\ Virginia, USA. Portions copyright 1991-1995 by Stichting Mathematisch\n\ @@ -63,7 +63,7 @@ Centrum, Amsterdam, The Netherlands."; PyDoc_STRVAR(parser_doc_string, "This is an interface to Python's internal parser."); -static char parser_version_string[] = "0.5"; +static const char parser_version_string[] = "0.5"; typedef PyObject* (*SeqMaker) (Py_ssize_t length); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 7ec1f47e7e..7a2b661e61 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -9479,7 +9479,7 @@ os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path) * sufficiently pervasive that it's not worth the loss of readability. */ struct constdef { - char *name; + const char *name; int value; }; @@ -10822,7 +10822,7 @@ os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, for (i = 0; ; i++) { void *ptr; ssize_t result; - static Py_ssize_t buffer_sizes[] = {128, XATTR_SIZE_MAX, 0}; + static const Py_ssize_t buffer_sizes[] = {128, XATTR_SIZE_MAX, 0}; Py_ssize_t buffer_size = buffer_sizes[i]; if (!buffer_size) { path_error(path); @@ -10988,7 +10988,7 @@ os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks) for (i = 0; ; i++) { char *start, *trace, *end; ssize_t length; - static Py_ssize_t buffer_sizes[] = { 256, XATTR_LIST_MAX, 0 }; + static const Py_ssize_t buffer_sizes[] = { 256, XATTR_LIST_MAX, 0 }; Py_ssize_t buffer_size = buffer_sizes[i]; if (!buffer_size) { /* ERANGE */ @@ -12821,7 +12821,7 @@ static struct PyModuleDef posixmodule = { }; -static char *have_functions[] = { +static const char * const have_functions[] = { #ifdef HAVE_FACCESSAT "HAVE_FACCESSAT", @@ -12956,7 +12956,7 @@ INITFUNC(void) { PyObject *m, *v; PyObject *list; - char **trace; + const char * const *trace; #if defined(HAVE_SYMLINK) && defined(MS_WINDOWS) win32_can_symlink = enable_symlink(); diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index b3ac8073a9..70f2db0760 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -1842,7 +1842,7 @@ kqueue_event_init(kqueue_event_Object *self, PyObject *args, PyObject *kwds) PyObject *pfd; static char *kwlist[] = {"ident", "filter", "flags", "fflags", "data", "udata", NULL}; - static char *fmt = "O|hHI" DATA_FMT_UNIT UINTPTRT_FMT_UNIT ":kevent"; + static const char fmt[] = "O|hHI" DATA_FMT_UNIT UINTPTRT_FMT_UNIT ":kevent"; EV_SET(&(self->e), 0, EVFILT_READ, EV_ADD, 0, 0, 0); /* defaults */ diff --git a/Modules/timemodule.c b/Modules/timemodule.c index d2caacdc6d..31f0ce5818 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -732,10 +732,10 @@ _asctime(struct tm *timeptr) { /* Inspired by Open Group reference implementation available at * http://pubs.opengroup.org/onlinepubs/009695399/functions/asctime.html */ - static char wday_name[7][4] = { + static const char wday_name[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; - static char mon_name[12][4] = { + static const char mon_name[12][4] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index fe4e90822a..7d518fa257 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -884,7 +884,7 @@ _gethash(const char *s, int len, int scale) return h; } -static char *hangul_syllables[][3] = { +static const char * const hangul_syllables[][3] = { { "G", "A", "" }, { "GG", "AE", "G" }, { "N", "YA", "GG" }, @@ -1057,7 +1057,7 @@ find_syllable(const char *str, int *len, int *pos, int count, int column) int i, len1; *len = -1; for (i = 0; i < count; i++) { - char *s = hangul_syllables[i][column]; + const char *s = hangul_syllables[i][column]; len1 = Py_SAFE_DOWNCAST(strlen(s), size_t, int); if (len1 <= *len) continue; -- cgit v1.2.1 From 5c633fc25fc6f9beee3ccb9ebc06633d1c9a1bc3 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 25 Dec 2015 20:01:53 +0200 Subject: Issue #25923: Added more const qualifiers to signatures of static and private functions. --- Modules/_ctypes/_ctypes.c | 4 ++-- Modules/_ctypes/callbacks.c | 2 +- Modules/_ctypes/callproc.c | 2 +- Modules/_ctypes/ctypes.h | 2 +- Modules/_curses_panel.c | 2 +- Modules/_datetimemodule.c | 2 +- Modules/_io/_iomodule.h | 2 +- Modules/_io/bufferedio.c | 2 +- Modules/_io/fileio.c | 4 ++-- Modules/_io/textio.c | 20 ++++++++++---------- Modules/_json.c | 4 ++-- Modules/_localemodule.c | 2 +- Modules/_pickle.c | 2 +- Modules/_posixsubprocess.c | 2 +- Modules/_scproxy.c | 2 +- Modules/_sre.c | 2 +- Modules/_ssl.c | 4 ++-- Modules/_struct.c | 6 +++--- Modules/_testmultiphase.c | 2 +- Modules/_tkinter.c | 8 ++++---- Modules/_winapi.c | 4 ++-- Modules/binascii.c | 44 +++++++++++++++++++++++++++----------------- Modules/gcmodule.c | 2 +- Modules/getaddrinfo.c | 2 +- Modules/main.c | 2 +- Modules/mathmodule.c | 4 ++-- Modules/parsermodule.c | 10 +++++----- Modules/posixmodule.c | 43 +++++++++++++++++++++++++------------------ Modules/pyexpat.c | 6 +++--- Modules/socketmodule.c | 4 ++-- Modules/timemodule.c | 2 +- Modules/xxlimited.c | 2 +- Modules/xxmodule.c | 2 +- Modules/zipimport.c | 2 +- Modules/zlibmodule.c | 2 +- 35 files changed, 112 insertions(+), 95 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index fccc8ba993..ac5e5fa308 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3195,7 +3195,7 @@ _validate_paramflags(PyTypeObject *type, PyObject *paramflags) } static int -_get_name(PyObject *obj, char **pname) +_get_name(PyObject *obj, const char **pname) { #ifdef MS_WIN32 if (PyLong_Check(obj)) { @@ -3223,7 +3223,7 @@ _get_name(PyObject *obj, char **pname) static PyObject * PyCFuncPtr_FromDll(PyTypeObject *type, PyObject *args, PyObject *kwds) { - char *name; + const char *name; int (* address)(void); PyObject *ftuple; PyObject *dll; diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c index 7cd61640f8..00e8e66a2c 100644 --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -77,7 +77,7 @@ PyTypeObject PyCThunk_Type = { /**************************************************************/ static void -PrintError(char *msg, ...) +PrintError(const char *msg, ...) { char buf[512]; PyObject *f = PySys_GetObject("stderr"); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 68981fe84a..870a0d4428 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -928,7 +928,7 @@ static PyObject *GetResult(PyObject *restype, void *result, PyObject *checker) * Raise a new exception 'exc_class', adding additional text to the original * exception string. */ -void _ctypes_extend_error(PyObject *exc_class, char *fmt, ...) +void _ctypes_extend_error(PyObject *exc_class, const char *fmt, ...) { va_list vargs; PyObject *tp, *v, *tb, *s, *cls_str, *msg_str; diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index 0d3f7241ca..b06ba8ae46 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -327,7 +327,7 @@ extern int PyCData_set(PyObject *dst, PyObject *type, SETFUNC setfunc, PyObject *value, Py_ssize_t index, Py_ssize_t size, char *ptr); -extern void _ctypes_extend_error(PyObject *exc_class, char *fmt, ...); +extern void _ctypes_extend_error(PyObject *exc_class, const char *fmt, ...); struct basespec { CDataObject *base; diff --git a/Modules/_curses_panel.c b/Modules/_curses_panel.c index a9c406fde9..26bf0944eb 100644 --- a/Modules/_curses_panel.c +++ b/Modules/_curses_panel.c @@ -56,7 +56,7 @@ static struct PyModuleDef _curses_panelmodule; */ static PyObject * -PyCursesCheckERR(int code, char *fname) +PyCursesCheckERR(int code, const char *fname) { if (code != ERR) { Py_INCREF(Py_None); diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index e8b7ae8e4f..3e5e195e15 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -873,7 +873,7 @@ get_tzinfo_member(PyObject *self) * this returns NULL. Else result is returned. */ static PyObject * -call_tzinfo_method(PyObject *tzinfo, char *name, PyObject *tzinfoarg) +call_tzinfo_method(PyObject *tzinfo, const char *name, PyObject *tzinfoarg) { PyObject *offset; diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h index 0c6eae26b7..3c48ff3aac 100644 --- a/Modules/_io/_iomodule.h +++ b/Modules/_io/_iomodule.h @@ -60,7 +60,7 @@ extern PyObject *_PyIncrementalNewlineDecoder_decode( * Otherwise, the line ending is specified by readnl, a str object */ extern Py_ssize_t _PyIO_find_line_ending( int translated, int universal, PyObject *readnl, - int kind, char *start, char *end, Py_ssize_t *consumed); + int kind, const char *start, const char *end, Py_ssize_t *consumed); /* Return 1 if an EnvironmentError with errno == EINTR is set (and then clears the error indicator), 0 otherwise. diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 6bb2200e20..16f8cdf912 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -659,7 +659,7 @@ _bufferedreader_raw_read(buffered *self, char *start, Py_ssize_t len); /* Sets the current error to BlockingIOError */ static void -_set_BlockingIOError(char *msg, Py_ssize_t written) +_set_BlockingIOError(const char *msg, Py_ssize_t written) { PyObject *err; PyErr_Clear(); diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index dbd604a116..8bf3922676 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -540,7 +540,7 @@ err_closed(void) } static PyObject * -err_mode(char *action) +err_mode(const char *action) { _PyIO_State *state = IO_STATE(); if (state != NULL) @@ -1043,7 +1043,7 @@ _io_FileIO_truncate_impl(fileio *self, PyObject *posobj) } #endif /* HAVE_FTRUNCATE */ -static char * +static const char * mode_string(fileio *self) { if (self->created) { diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index d018623470..140da10ab4 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -1648,8 +1648,8 @@ _io_TextIOWrapper_read_impl(textio *self, Py_ssize_t n) /* NOTE: `end` must point to the real end of the Py_UCS4 storage, that is to the NUL character. Otherwise the function will produce incorrect results. */ -static char * -find_control_char(int kind, char *s, char *end, Py_UCS4 ch) +static const char * +find_control_char(int kind, const char *s, const char *end, Py_UCS4 ch) { if (kind == PyUnicode_1BYTE_KIND) { assert(ch < 256); @@ -1669,13 +1669,13 @@ find_control_char(int kind, char *s, char *end, Py_UCS4 ch) Py_ssize_t _PyIO_find_line_ending( int translated, int universal, PyObject *readnl, - int kind, char *start, char *end, Py_ssize_t *consumed) + int kind, const char *start, const char *end, Py_ssize_t *consumed) { Py_ssize_t len = ((char*)end - (char*)start)/kind; if (translated) { /* Newlines are already translated, only search for \n */ - char *pos = find_control_char(kind, start, end, '\n'); + const char *pos = find_control_char(kind, start, end, '\n'); if (pos != NULL) return (pos - start)/kind + 1; else { @@ -1687,7 +1687,7 @@ _PyIO_find_line_ending( /* Universal newline search. Find any of \r, \r\n, \n * The decoder ensures that \r\n are not split in two pieces */ - char *s = start; + const char *s = start; for (;;) { Py_UCS4 ch; /* Fast path for non-control chars. The loop always ends @@ -1717,21 +1717,21 @@ _PyIO_find_line_ending( /* Assume that readnl is an ASCII character. */ assert(PyUnicode_KIND(readnl) == PyUnicode_1BYTE_KIND); if (readnl_len == 1) { - char *pos = find_control_char(kind, start, end, nl[0]); + const char *pos = find_control_char(kind, start, end, nl[0]); if (pos != NULL) return (pos - start)/kind + 1; *consumed = len; return -1; } else { - char *s = start; - char *e = end - (readnl_len - 1)*kind; - char *pos; + const char *s = start; + const char *e = end - (readnl_len - 1)*kind; + const char *pos; if (e < s) e = s; while (s < e) { Py_ssize_t i; - char *pos = find_control_char(kind, s, end, nl[0]); + const char *pos = find_control_char(kind, s, end, nl[0]); if (pos == NULL || pos >= e) break; for (i = 1; i < readnl_len; i++) { diff --git a/Modules/_json.c b/Modules/_json.c index f63d758348..3c857ae3d1 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -112,7 +112,7 @@ encoder_listencode_dict(PyEncoderObject *s, _PyAccu *acc, PyObject *dct, Py_ssiz static PyObject * _encoded_const(PyObject *obj); static void -raise_errmsg(char *msg, PyObject *s, Py_ssize_t end); +raise_errmsg(const char *msg, PyObject *s, Py_ssize_t end); static PyObject * encoder_encode_string(PyEncoderObject *s, PyObject *obj); static PyObject * @@ -323,7 +323,7 @@ escape_unicode(PyObject *pystr) } static void -raise_errmsg(char *msg, PyObject *s, Py_ssize_t end) +raise_errmsg(const char *msg, PyObject *s, Py_ssize_t end) { /* Use JSONDecodeError exception to raise a nice looking ValueError subclass */ static PyObject *JSONDecodeError = NULL; diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index b1d6add477..a92fb10dd2 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -49,7 +49,7 @@ PyDoc_STRVAR(setlocale__doc__, /* the grouping is terminated by either 0 or CHAR_MAX */ static PyObject* -copy_grouping(char* s) +copy_grouping(const char* s) { int i; PyObject *result, *val = NULL; diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 487b533625..9d36346ef6 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -2187,7 +2187,7 @@ error: } static int -write_utf8(PicklerObject *self, char *data, Py_ssize_t size) +write_utf8(PicklerObject *self, const char *data, Py_ssize_t size) { char header[9]; Py_ssize_t len; diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index 8bedab5c27..a0109fb270 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -72,7 +72,7 @@ _enable_gc(int need_to_reenable_gc, PyObject *gc_module) /* Convert ASCII to a positive int, no libc call. no overflow. -1 on error. */ static int -_pos_int_from_ascii(char *name) +_pos_int_from_ascii(const char *name) { int num = 0; while (*name >= '0' && *name <= '9') { diff --git a/Modules/_scproxy.c b/Modules/_scproxy.c index 66b6e3439f..68be458bf4 100644 --- a/Modules/_scproxy.c +++ b/Modules/_scproxy.c @@ -130,7 +130,7 @@ error: } static int -set_proxy(PyObject* proxies, char* proto, CFDictionaryRef proxyDict, +set_proxy(PyObject* proxies, const char* proto, CFDictionaryRef proxyDict, CFStringRef enabledKey, CFStringRef hostKey, CFStringRef portKey) { diff --git a/Modules/_sre.c b/Modules/_sre.c index f597a7032f..fb0ab033c5 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -714,7 +714,7 @@ _sre_SRE_Pattern_search_impl(PatternObject *self, PyObject *string, } static PyObject* -call(char* module, char* function, PyObject* args) +call(const char* module, const char* function, PyObject* args) { PyObject* name; PyObject* mod; diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 8818d26e09..5968ed5330 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -378,7 +378,7 @@ fail: } static PyObject * -PySSL_SetError(PySSLSocket *obj, int ret, char *filename, int lineno) +PySSL_SetError(PySSLSocket *obj, int ret, const char *filename, int lineno) { PyObject *type = PySSLErrorObject; char *errstr = NULL; @@ -460,7 +460,7 @@ PySSL_SetError(PySSLSocket *obj, int ret, char *filename, int lineno) } static PyObject * -_setSSLError (char *errstr, int errcode, char *filename, int lineno) { +_setSSLError (const char *errstr, int errcode, const char *filename, int lineno) { if (errstr == NULL) errcode = ERR_peek_last_error(); diff --git a/Modules/_struct.c b/Modules/_struct.c index b18c71da60..820e004e24 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -1189,7 +1189,7 @@ static formatdef lilendian_table[] = { static const formatdef * -whichtable(char **pfmt) +whichtable(const char **pfmt) { const char *fmt = (*pfmt)++; /* May be backed out of later */ switch (*fmt) { @@ -1268,7 +1268,7 @@ prepare_s(PyStructObject *self) fmt = PyBytes_AS_STRING(self->s_format); - f = whichtable((char **)&fmt); + f = whichtable(&fmt); s = fmt; size = 0; @@ -1457,7 +1457,7 @@ s_dealloc(PyStructObject *s) } static PyObject * -s_unpack_internal(PyStructObject *soself, char *startfrom) { +s_unpack_internal(PyStructObject *soself, const char *startfrom) { formatcode *code; Py_ssize_t i = 0; PyObject *result = PyTuple_New(soself->s_len); diff --git a/Modules/_testmultiphase.c b/Modules/_testmultiphase.c index 2005205d33..03eda279f7 100644 --- a/Modules/_testmultiphase.c +++ b/Modules/_testmultiphase.c @@ -61,7 +61,7 @@ Example_getattro(ExampleObject *self, PyObject *name) } static int -Example_setattr(ExampleObject *self, char *name, PyObject *v) +Example_setattr(ExampleObject *self, const char *name, PyObject *v) { if (self->x_attr == NULL) { self->x_attr = PyDict_New(); diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 41ad5f91f7..768df81c1e 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -841,7 +841,7 @@ PyTclObject_dealloc(PyTclObject *self) Py_DECREF(tp); } -static char* +static const char * PyTclObject_TclString(PyObject *self) { return Tcl_GetString(((PyTclObject*)self)->value); @@ -1726,7 +1726,7 @@ static int varname_converter(PyObject *in, void *_out) { char *s; - char **out = (char**)_out; + const char **out = (const char**)_out; if (PyBytes_Check(in)) { if (PyBytes_Size(in) > INT_MAX) { PyErr_SetString(PyExc_OverflowError, "bytes object is too long"); @@ -1846,7 +1846,7 @@ var_invoke(EventFunc func, PyObject *selfptr, PyObject *args, int flags) static PyObject * SetVar(PyObject *self, PyObject *args, int flags) { - char *name1, *name2; + const char *name1, *name2; PyObject *newValue; PyObject *res = NULL; Tcl_Obj *newval, *ok; @@ -1915,7 +1915,7 @@ Tkapp_GlobalSetVar(PyObject *self, PyObject *args) static PyObject * GetVar(PyObject *self, PyObject *args, int flags) { - char *name1, *name2=NULL; + const char *name1, *name2=NULL; PyObject *res = NULL; Tcl_Obj *tres; diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 3e7f18741f..c4d4264226 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -675,7 +675,7 @@ _winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, /* helpers for createprocess */ static unsigned long -getulong(PyObject* obj, char* name) +getulong(PyObject* obj, const char* name) { PyObject* value; unsigned long ret; @@ -691,7 +691,7 @@ getulong(PyObject* obj, char* name) } static HANDLE -gethandle(PyObject* obj, char* name) +gethandle(PyObject* obj, const char* name) { PyObject* value; HANDLE ret; diff --git a/Modules/binascii.c b/Modules/binascii.c index 9df48dad44..a306acde32 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -256,7 +256,8 @@ static PyObject * binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=5779f39b0b48459f input=7cafeaf73df63d1c]*/ { - unsigned char *ascii_data, *bin_data; + const unsigned char *ascii_data; + unsigned char *bin_data; int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; @@ -342,7 +343,8 @@ static PyObject * binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=181021b69bb9a414 input=00fdf458ce8b465b]*/ { - unsigned char *ascii_data, *bin_data; + unsigned char *ascii_data; + const unsigned char *bin_data; int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; @@ -389,7 +391,7 @@ binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data) static int -binascii_find_valid(unsigned char *s, Py_ssize_t slen, int num) +binascii_find_valid(const unsigned char *s, Py_ssize_t slen, int num) { /* Finds & returns the (num+1)th ** valid character for base64, or -1 if none. @@ -426,7 +428,8 @@ static PyObject * binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=3e351b702bed56d2 input=5872acf6e1cac243]*/ { - unsigned char *ascii_data, *bin_data; + const unsigned char *ascii_data; + unsigned char *bin_data; int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; @@ -522,7 +525,8 @@ static PyObject * binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data, int newline) /*[clinic end generated code: output=19e1dd719a890b50 input=7b2ea6fa38d8924c]*/ { - unsigned char *ascii_data, *bin_data; + unsigned char *ascii_data; + const unsigned char *bin_data; int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; @@ -589,7 +593,8 @@ static PyObject * binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=60bcdbbd28b105cd input=0d914c680e0eed55]*/ { - unsigned char *ascii_data, *bin_data; + const unsigned char *ascii_data; + unsigned char *bin_data; int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; @@ -667,7 +672,8 @@ static PyObject * binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=0905da344dbf0648 input=e1f1712447a82b09]*/ { - unsigned char *in_data, *out_data; + const unsigned char *in_data; + unsigned char *out_data; unsigned char ch; Py_ssize_t in, inend, len; _PyBytesWriter writer; @@ -728,7 +734,8 @@ static PyObject * binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=5a987810d5e3cdbb input=9596ebe019fe12ba]*/ { - unsigned char *ascii_data, *bin_data; + unsigned char *ascii_data; + const unsigned char *bin_data; int leftbits = 0; unsigned char this_ch; unsigned int leftchar = 0; @@ -782,7 +789,8 @@ static PyObject * binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=f7afd89b789946ab input=54cdd49fc014402c]*/ { - unsigned char *in_data, *out_data; + const unsigned char *in_data; + unsigned char *out_data; unsigned char in_byte, in_repeat; Py_ssize_t in_len; _PyBytesWriter writer; @@ -899,7 +907,7 @@ static unsigned int binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc) /*[clinic end generated code: output=167c2dac62625717 input=add8c53712ccceda]*/ { - unsigned char *bin_data; + const unsigned char *bin_data; Py_ssize_t len; crc &= 0xffff; @@ -1050,7 +1058,7 @@ binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc) #ifdef USE_ZLIB_CRC32 /* This was taken from zlibmodule.c PyZlib_crc32 (but is PY_SSIZE_T_CLEAN) */ { - Byte *buf; + const Byte *buf; Py_ssize_t len; int signed_val; @@ -1061,7 +1069,7 @@ binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc) } #else /* USE_ZLIB_CRC32 */ { /* By Jim Ahlstrom; All rights transferred to CNRI */ - unsigned char *bin_data; + const unsigned char *bin_data; Py_ssize_t len; unsigned int result; @@ -1144,7 +1152,7 @@ static PyObject * binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr) /*[clinic end generated code: output=d61da452b5c6d290 input=9e1e7f2f94db24fd]*/ { - char* argbuf; + const char* argbuf; Py_ssize_t arglen; PyObject *retval; char* retbuf; @@ -1232,7 +1240,8 @@ binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header) { Py_ssize_t in, out; char ch; - unsigned char *ascii_data, *odata; + const unsigned char *ascii_data; + unsigned char *odata; Py_ssize_t datalen = 0; PyObject *rv; @@ -1338,13 +1347,14 @@ binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, /*[clinic end generated code: output=a87ca9ccb94e2a9f input=7f2a9aaa008e92b2]*/ { Py_ssize_t in, out; - unsigned char *databuf, *odata; + const unsigned char *databuf; + unsigned char *odata; Py_ssize_t datalen = 0, odatalen = 0; PyObject *rv; unsigned int linelen = 0; unsigned char ch; int crlf = 0; - unsigned char *p; + const unsigned char *p; databuf = data->buf; datalen = data->len; @@ -1353,7 +1363,7 @@ binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, /* XXX: this function has the side effect of converting all of * the end of lines to be the same depending on this detection * here */ - p = (unsigned char *) memchr(databuf, '\n', datalen); + p = (const unsigned char *) memchr(databuf, '\n', datalen); if ((p != NULL) && (p > databuf) && (*(p-1) == '\r')) crlf = 1; diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index cb7222db89..0c6f4448f0 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -738,7 +738,7 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old) } static void -debug_cycle(char *msg, PyObject *op) +debug_cycle(const char *msg, PyObject *op) { PySys_FormatStderr("gc: %s <%s %p>\n", msg, Py_TYPE(op)->tp_name, op); diff --git a/Modules/getaddrinfo.c b/Modules/getaddrinfo.c index 33d70784ab..13a9e40b30 100644 --- a/Modules/getaddrinfo.c +++ b/Modules/getaddrinfo.c @@ -198,7 +198,7 @@ if (pai->ai_flags & AI_CANONNAME) {\ #define ERR(err) { error = (err); goto bad; } -char * +const char * gai_strerror(int ecode) { if (ecode < 0 || ecode > EAI_MAX) diff --git a/Modules/main.c b/Modules/main.c index 4358cc8000..35d07fde6e 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -103,7 +103,7 @@ PYTHONHASHSEED: if this variable is set to 'random', a random value is used\n\ "; static int -usage(int exitcode, wchar_t* program) +usage(int exitcode, const wchar_t* program) { FILE *f = exitcode ? stderr : stdout; diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 9359eb2b3a..6b3e1396b7 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -876,7 +876,7 @@ math_1_to_int(PyObject *arg, double (*func) (double), int can_overflow) } static PyObject * -math_2(PyObject *args, double (*func) (double, double), char *funcname) +math_2(PyObject *args, double (*func) (double, double), const char *funcname) { PyObject *ox, *oy; double x, y, r; @@ -1673,7 +1673,7 @@ PyDoc_STRVAR(math_modf_doc, in that int is larger than PY_SSIZE_T_MAX. */ static PyObject* -loghelper(PyObject* arg, double (*func)(double), char *funcname) +loghelper(PyObject* arg, double (*func)(double), const char *funcname) { /* If it is int, do it ourselves. */ if (PyLong_Check(arg)) { diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 4c5f2efd0a..deae0493f9 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -578,13 +578,13 @@ parser_issuite(PyST_Object *self, PyObject *args, PyObject *kw) } -/* err_string(char* message) +/* err_string(const char* message) * * Sets the error string for an exception of type ParserError. * */ static void -err_string(char *message) +err_string(const char *message) { PyErr_SetString(parser_error, message); } @@ -597,7 +597,7 @@ err_string(char *message) * */ static PyObject* -parser_do_parse(PyObject *args, PyObject *kw, char *argspec, int type) +parser_do_parse(PyObject *args, PyObject *kw, const char *argspec, int type) { char* string = 0; PyObject* res = 0; @@ -984,7 +984,7 @@ build_node_tree(PyObject *tuple) /* * Validation routines used within the validation section: */ -static int validate_terminal(node *terminal, int type, char *string); +static int validate_terminal(node *terminal, int type, const char *string); #define validate_ampersand(ch) validate_terminal(ch, AMPER, "&") #define validate_circumflex(ch) validate_terminal(ch, CIRCUMFLEX, "^") @@ -1082,7 +1082,7 @@ validate_numnodes(node *n, int num, const char *const name) static int -validate_terminal(node *terminal, int type, char *string) +validate_terminal(node *terminal, int type, const char *string) { int res = (validate_ntype(terminal, type) && ((string == 0) || (strcmp(string, STR(terminal)) == 0))); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 7a2b661e61..367e4f272f 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -949,7 +949,8 @@ path_converter(PyObject *o, void *p) { } static void -argument_unavailable_error(char *function_name, char *argument_name) { +argument_unavailable_error(const char *function_name, const char *argument_name) +{ PyErr_Format(PyExc_NotImplementedError, "%s%s%s unavailable on this platform", (function_name != NULL) ? function_name : "", @@ -972,7 +973,8 @@ dir_fd_unavailable(PyObject *o, void *p) } static int -fd_specified(char *function_name, int fd) { +fd_specified(const char *function_name, int fd) +{ if (fd == -1) return 0; @@ -981,7 +983,8 @@ fd_specified(char *function_name, int fd) { } static int -follow_symlinks_specified(char *function_name, int follow_symlinks) { +follow_symlinks_specified(const char *function_name, int follow_symlinks) +{ if (follow_symlinks) return 0; @@ -990,7 +993,8 @@ follow_symlinks_specified(char *function_name, int follow_symlinks) { } static int -path_and_dir_fd_invalid(char *function_name, path_t *path, int dir_fd) { +path_and_dir_fd_invalid(const char *function_name, path_t *path, int dir_fd) +{ if (!path->narrow && !path->wide && (dir_fd != DEFAULT_DIR_FD)) { PyErr_Format(PyExc_ValueError, "%s: can't specify dir_fd without matching path", @@ -1001,7 +1005,8 @@ path_and_dir_fd_invalid(char *function_name, path_t *path, int dir_fd) { } static int -dir_fd_and_fd_invalid(char *function_name, int dir_fd, int fd) { +dir_fd_and_fd_invalid(const char *function_name, int dir_fd, int fd) +{ if ((dir_fd != DEFAULT_DIR_FD) && (fd != -1)) { PyErr_Format(PyExc_ValueError, "%s: can't specify both dir_fd and fd", @@ -1012,8 +1017,9 @@ dir_fd_and_fd_invalid(char *function_name, int dir_fd, int fd) { } static int -fd_and_follow_symlinks_invalid(char *function_name, int fd, - int follow_symlinks) { +fd_and_follow_symlinks_invalid(const char *function_name, int fd, + int follow_symlinks) +{ if ((fd > 0) && (!follow_symlinks)) { PyErr_Format(PyExc_ValueError, "%s: cannot use fd and follow_symlinks together", @@ -1024,8 +1030,9 @@ fd_and_follow_symlinks_invalid(char *function_name, int fd, } static int -dir_fd_and_follow_symlinks_invalid(char *function_name, int dir_fd, - int follow_symlinks) { +dir_fd_and_follow_symlinks_invalid(const char *function_name, int dir_fd, + int follow_symlinks) +{ if ((dir_fd != DEFAULT_DIR_FD) && (!follow_symlinks)) { PyErr_Format(PyExc_ValueError, "%s: cannot use dir_fd and follow_symlinks together", @@ -1220,7 +1227,7 @@ posix_error(void) #ifdef MS_WINDOWS static PyObject * -win32_error(char* function, const char* filename) +win32_error(const char* function, const char* filename) { /* XXX We should pass the function name along in the future. (winreg.c also wants to pass the function name.) @@ -1235,7 +1242,7 @@ win32_error(char* function, const char* filename) } static PyObject * -win32_error_object(char* function, PyObject* filename) +win32_error_object(const char* function, PyObject* filename) { /* XXX - see win32_error for comments on 'function' */ errno = GetLastError(); @@ -2100,7 +2107,7 @@ _pystat_fromstructstat(STRUCT_STAT *st) static PyObject * -posix_do_stat(char *function_name, path_t *path, +posix_do_stat(const char *function_name, path_t *path, int dir_fd, int follow_symlinks) { STRUCT_STAT st; @@ -4561,7 +4568,7 @@ typedef struct { #if defined(HAVE_FUTIMESAT) || defined(HAVE_UTIMENSAT) static int -utime_dir_fd(utime_t *ut, int dir_fd, char *path, int follow_symlinks) +utime_dir_fd(utime_t *ut, int dir_fd, const char *path, int follow_symlinks) { #ifdef HAVE_UTIMENSAT int flags = follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW; @@ -4610,7 +4617,7 @@ utime_fd(utime_t *ut, int fd) #ifdef UTIME_HAVE_NOFOLLOW_SYMLINKS static int -utime_nofollow_symlinks(utime_t *ut, char *path) +utime_nofollow_symlinks(utime_t *ut, const char *path) { #ifdef HAVE_UTIMENSAT UTIME_TO_TIMESPEC; @@ -4626,7 +4633,7 @@ utime_nofollow_symlinks(utime_t *ut, char *path) #ifndef MS_WINDOWS static int -utime_default(utime_t *ut, char *path) +utime_default(utime_t *ut, const char *path) { #ifdef HAVE_UTIMENSAT UTIME_TO_TIMESPEC; @@ -7323,7 +7330,7 @@ _check_dirW(WCHAR *src, WCHAR *dest) /* Return True if the path at src relative to dest is a directory */ static int -_check_dirA(char *src, char *dest) +_check_dirA(const char *src, char *dest) { WIN32_FILE_ATTRIBUTE_DATA src_info; char dest_parent[MAX_PATH]; @@ -11835,7 +11842,7 @@ error: #else /* POSIX */ static char * -join_path_filename(char *path_narrow, char* filename, Py_ssize_t filename_len) +join_path_filename(const char *path_narrow, const char* filename, Py_ssize_t filename_len) { Py_ssize_t path_len; Py_ssize_t size; @@ -11867,7 +11874,7 @@ join_path_filename(char *path_narrow, char* filename, Py_ssize_t filename_len) } static PyObject * -DirEntry_from_posix_info(path_t *path, char *name, Py_ssize_t name_len, +DirEntry_from_posix_info(path_t *path, const char *name, Py_ssize_t name_len, ino_t d_ino #ifdef HAVE_DIRENT_D_TYPE , unsigned char d_type diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index b45e3dac7e..9267c69e19 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -91,7 +91,7 @@ static struct HandlerInfo handler_info[64]; * false on an exception. */ static int -set_error_attr(PyObject *err, char *name, int value) +set_error_attr(PyObject *err, const char *name, int value) { PyObject *v = PyLong_FromLong(value); @@ -218,7 +218,7 @@ flag_error(xmlparseobject *self) } static PyObject* -call_with_frame(char *funcname, int lineno, PyObject* func, PyObject* args, +call_with_frame(const char *funcname, int lineno, PyObject* func, PyObject* args, xmlparseobject *self) { PyObject *res; @@ -766,7 +766,7 @@ readinst(char *buf, int buf_size, PyObject *meth) { PyObject *str; Py_ssize_t len; - char *ptr; + const char *ptr; str = PyObject_CallFunction(meth, "n", buf_size); if (str == NULL) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index bae9634ef2..7ab534e07a 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -904,7 +904,7 @@ static PyThread_type_lock netdb_lock; an error occurred; then an exception is raised. */ static int -setipaddr(char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int af) +setipaddr(const char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int af) { struct addrinfo hints, *res; int error; @@ -1085,7 +1085,7 @@ makeipaddr(struct sockaddr *addr, int addrlen) an error occurred. */ static int -setbdaddr(char *name, bdaddr_t *bdaddr) +setbdaddr(const char *name, bdaddr_t *bdaddr) { unsigned int b0, b1, b2, b3, b4, b5; char ch; diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 31f0ce5818..0b6d461870 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -311,7 +311,7 @@ tmtotuple(struct tm *p) Returns non-zero on success (parallels PyArg_ParseTuple). */ static int -parse_time_t_args(PyObject *args, char *format, time_t *pwhen) +parse_time_t_args(PyObject *args, const char *format, time_t *pwhen) { PyObject *ot = NULL; time_t whent; diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c index 40c176063d..c1a9be9b89 100644 --- a/Modules/xxlimited.c +++ b/Modules/xxlimited.c @@ -89,7 +89,7 @@ Xxo_getattro(XxoObject *self, PyObject *name) } static int -Xxo_setattr(XxoObject *self, char *name, PyObject *v) +Xxo_setattr(XxoObject *self, const char *name, PyObject *v) { if (self->x_attr == NULL) { self->x_attr = PyDict_New(); diff --git a/Modules/xxmodule.c b/Modules/xxmodule.c index 85230d9c97..076440703f 100644 --- a/Modules/xxmodule.c +++ b/Modules/xxmodule.c @@ -76,7 +76,7 @@ Xxo_getattro(XxoObject *self, PyObject *name) } static int -Xxo_setattr(XxoObject *self, char *name, PyObject *v) +Xxo_setattr(XxoObject *self, const char *name, PyObject *v) { if (self->x_attr == NULL) { self->x_attr = PyDict_New(); diff --git a/Modules/zipimport.c b/Modules/zipimport.c index 7220faf08d..87c8cfc7d6 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -815,7 +815,7 @@ static PyTypeObject ZipImporter_Type = { 4 bytes, encoded as little endian. This partially reimplements marshal.c:r_long() */ static long -get_long(unsigned char *buf) { +get_long(const unsigned char *buf) { long x; x = buf[0]; x |= (long)buf[1] << 8; diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index a15fdb2a07..7d2f55ac30 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -53,7 +53,7 @@ typedef struct } compobject; static void -zlib_error(z_stream zst, int err, char *msg) +zlib_error(z_stream zst, int err, const char *msg) { const char *zmsg = Z_NULL; /* In case of a version mismatch, zst.msg won't be initialized. -- cgit v1.2.1 From 49b4fe42c04e1eec009aac77da7f44d985b1abbb Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 27 Dec 2015 12:36:18 +0200 Subject: Issue #20440: Applied yet one patch for using Py_SETREF. The patch is automatically generated, it replaces the code that uses Py_CLEAR. --- Modules/_bz2module.c | 5 ++-- Modules/_io/bufferedio.c | 12 +++----- Modules/_io/textio.c | 12 +++----- Modules/_lzmamodule.c | 5 ++-- Modules/_pickle.c | 8 ++---- Modules/_struct.c | 3 +- Modules/cjkcodecs/multibytecodec.c | 3 +- Modules/itertoolsmodule.c | 57 +++++++++++++++----------------------- 8 files changed, 39 insertions(+), 66 deletions(-) (limited to 'Modules') diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index 7dfd3072dc..425845fd4a 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -540,9 +540,8 @@ decompress(BZ2Decompressor *d, char *data, size_t len, Py_ssize_t max_length) if (d->eof) { d->needs_input = 0; if (d->bzs_avail_in_real > 0) { - Py_CLEAR(d->unused_data); - d->unused_data = PyBytes_FromStringAndSize( - bzs->next_in, d->bzs_avail_in_real); + Py_SETREF(d->unused_data, + PyBytes_FromStringAndSize(bzs->next_in, d->bzs_avail_in_real)); if (d->unused_data == NULL) goto error; } diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 6bb2200e20..ae4af9d5ff 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -1196,8 +1196,7 @@ found: Py_CLEAR(res); goto end; } - Py_CLEAR(res); - res = _PyBytes_Join(_PyIO_empty_bytes, chunks); + Py_SETREF(res, _PyBytes_Join(_PyIO_empty_bytes, chunks)); end: LEAVE_BUFFERED(self) @@ -1452,9 +1451,8 @@ _io_BufferedReader___init___impl(buffered *self, PyObject *raw, if (_PyIOBase_check_readable(raw, Py_True) == NULL) return -1; - Py_CLEAR(self->raw); Py_INCREF(raw); - self->raw = raw; + Py_SETREF(self->raw, raw); self->buffer_size = buffer_size; self->readable = 1; self->writable = 0; @@ -1805,9 +1803,8 @@ _io_BufferedWriter___init___impl(buffered *self, PyObject *raw, if (_PyIOBase_check_writable(raw, Py_True) == NULL) return -1; - Py_CLEAR(self->raw); Py_INCREF(raw); - self->raw = raw; + Py_SETREF(self->raw, raw); self->readable = 0; self->writable = 1; @@ -2309,9 +2306,8 @@ _io_BufferedRandom___init___impl(buffered *self, PyObject *raw, if (_PyIOBase_check_writable(raw, Py_True) == NULL) return -1; - Py_CLEAR(self->raw); Py_INCREF(raw); - self->raw = raw; + Py_SETREF(self->raw, raw); self->buffer_size = buffer_size; self->readable = 1; self->writable = 1; diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index b232b0242e..b1d2b6febe 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -995,8 +995,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, "Oi", self->decoder, (int)self->readtranslate); if (incrementalDecoder == NULL) goto error; - Py_CLEAR(self->decoder); - self->decoder = incrementalDecoder; + Py_SETREF(self->decoder, incrementalDecoder); } } @@ -1374,8 +1373,7 @@ _io_TextIOWrapper_write_impl(textio *self, PyObject *text) static void textiowrapper_set_decoded_chars(textio *self, PyObject *chars) { - Py_CLEAR(self->decoded_chars); - self->decoded_chars = chars; + Py_SETREF(self->decoded_chars, chars); self->decoded_chars_used = 0; } @@ -1523,8 +1521,7 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint) dec_buffer = NULL; /* Reference lost to PyBytes_Concat */ goto fail; } - Py_CLEAR(self->snapshot); - self->snapshot = Py_BuildValue("NN", dec_flags, next_input); + Py_SETREF(self->snapshot, Py_BuildValue("NN", dec_flags, next_input)); } Py_DECREF(input_chunk); @@ -1630,8 +1627,7 @@ _io_TextIOWrapper_read_impl(textio *self, Py_ssize_t n) if (chunks != NULL) { if (result != NULL && PyList_Append(chunks, result) < 0) goto fail; - Py_CLEAR(result); - result = PyUnicode_Join(_PyIO_empty_str, chunks); + Py_SETREF(result, PyUnicode_Join(_PyIO_empty_str, chunks)); if (result == NULL) goto fail; Py_CLEAR(chunks); diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index 7e4e2dfa8e..9bc8033153 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -1011,9 +1011,8 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length) if (d->eof) { d->needs_input = 0; if (lzs->avail_in > 0) { - Py_CLEAR(d->unused_data); - d->unused_data = PyBytes_FromStringAndSize( - (char *)lzs->next_in, lzs->avail_in); + Py_SETREF(d->unused_data, + PyBytes_FromStringAndSize((char *)lzs->next_in, lzs->avail_in)); if (d->unused_data == NULL) goto error; } diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 56bbd587b5..2a070e22e7 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -846,9 +846,8 @@ PyMemoTable_Set(PyMemoTable *self, PyObject *key, Py_ssize_t value) static int _Pickler_ClearBuffer(PicklerObject *self) { - Py_CLEAR(self->output_buffer); - self->output_buffer = - PyBytes_FromStringAndSize(NULL, self->max_output_len); + Py_SETREF(self->output_buffer, + PyBytes_FromStringAndSize(NULL, self->max_output_len)); if (self->output_buffer == NULL) return -1; self->output_len = 0; @@ -3089,9 +3088,8 @@ fix_imports(PyObject **module_name, PyObject **global_name) Py_TYPE(item)->tp_name); return -1; } - Py_CLEAR(*module_name); Py_INCREF(item); - *module_name = item; + Py_SETREF(*module_name, item); } else if (PyErr_Occurred()) { return -1; diff --git a/Modules/_struct.c b/Modules/_struct.c index b61f9f6fa9..1f1bb93ca9 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -1437,8 +1437,7 @@ s_init(PyObject *self, PyObject *args, PyObject *kwds) return -1; } - Py_CLEAR(soself->s_format); - soself->s_format = o_format; + Py_SETREF(soself->s_format, o_format); ret = prepare_s(soself); return ret; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index e4547f75c9..70a606fae1 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -793,8 +793,7 @@ encoder_encode_stateful(MultibyteStatefulEncoderContext *ctx, ctx->errors, final ? MBENC_FLUSH | MBENC_RESET : 0); if (r == NULL) { /* recover the original pending buffer */ - Py_CLEAR(ctx->pending); - ctx->pending = origpending; + Py_SETREF(ctx->pending, origpending); origpending = NULL; goto errorexit; } diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 1c9a17301b..ccd69be2fe 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -159,15 +159,12 @@ groupby_setstate(groupbyobject *lz, PyObject *state) PyObject *currkey, *currvalue, *tgtkey; if (!PyArg_ParseTuple(state, "OOO", &currkey, &currvalue, &tgtkey)) return NULL; - Py_CLEAR(lz->currkey); - lz->currkey = currkey; - Py_INCREF(lz->currkey); - Py_CLEAR(lz->currvalue); - lz->currvalue = currvalue; - Py_INCREF(lz->currvalue); - Py_CLEAR(lz->tgtkey); - lz->tgtkey = tgtkey; - Py_INCREF(lz->tgtkey); + Py_INCREF(currkey); + Py_SETREF(lz->currkey, currkey); + Py_INCREF(currvalue); + Py_SETREF(lz->currvalue, currvalue); + Py_INCREF(tgtkey); + Py_SETREF(lz->tgtkey, tgtkey); Py_RETURN_NONE; } @@ -747,9 +744,8 @@ tee_setstate(teeobject *to, PyObject *state) PyErr_SetString(PyExc_ValueError, "Index out of range"); return NULL; } - Py_CLEAR(to->dataobj); - to->dataobj = tdo; - Py_INCREF(to->dataobj); + Py_INCREF(tdo); + Py_SETREF(to->dataobj, tdo); to->index = index; Py_RETURN_NONE; } @@ -974,9 +970,8 @@ cycle_setstate(cycleobject *lz, PyObject *state) int firstpass; if (!PyArg_ParseTuple(state, "Oi", &saved, &firstpass)) return NULL; - Py_CLEAR(lz->saved); - lz->saved = saved; - Py_XINCREF(lz->saved); + Py_XINCREF(saved); + Py_SETREF(lz->saved, saved); lz->firstpass = firstpass != 0; Py_RETURN_NONE; } @@ -1901,12 +1896,10 @@ chain_setstate(chainobject *lz, PyObject *state) if (! PyArg_ParseTuple(state, "O|O", &source, &active)) return NULL; - Py_CLEAR(lz->source); - lz->source = source; - Py_INCREF(lz->source); - Py_CLEAR(lz->active); - lz->active = active; - Py_XINCREF(lz->active); + Py_INCREF(source); + Py_SETREF(lz->source, source); + Py_XINCREF(active); + Py_SETREF(lz->active, active); Py_RETURN_NONE; } @@ -2262,8 +2255,7 @@ product_setstate(productobject *lz, PyObject *state) Py_INCREF(element); PyTuple_SET_ITEM(result, i, element); } - Py_CLEAR(lz->result); - lz->result = result; + Py_SETREF(lz->result, result); Py_RETURN_NONE; } @@ -2585,8 +2577,7 @@ combinations_setstate(combinationsobject *lz, PyObject *state) PyTuple_SET_ITEM(result, i, element); } - Py_CLEAR(lz->result); - lz->result = result; + Py_SETREF(lz->result, result); Py_RETURN_NONE; } @@ -2916,8 +2907,7 @@ cwr_setstate(cwrobject *lz, PyObject *state) Py_INCREF(element); PyTuple_SET_ITEM(result, i, element); } - Py_CLEAR(lz->result); - lz->result = result; + Py_SETREF(lz->result, result); Py_RETURN_NONE; } @@ -3310,8 +3300,7 @@ permutations_setstate(permutationsobject *po, PyObject *state) Py_INCREF(element); PyTuple_SET_ITEM(result, i, element); } - Py_CLEAR(po->result); - po->result = result; + Py_SETREF(po->result, result); Py_RETURN_NONE; } @@ -3481,9 +3470,8 @@ accumulate_reduce(accumulateobject *lz) static PyObject * accumulate_setstate(accumulateobject *lz, PyObject *state) { - Py_CLEAR(lz->total); - lz->total = state; - Py_INCREF(lz->total); + Py_INCREF(state); + Py_SETREF(lz->total, state); Py_RETURN_NONE; } @@ -4464,9 +4452,8 @@ zip_longest_reduce(ziplongestobject *lz) static PyObject * zip_longest_setstate(ziplongestobject *lz, PyObject *state) { - Py_CLEAR(lz->fillvalue); - lz->fillvalue = state; - Py_INCREF(lz->fillvalue); + Py_INCREF(state); + Py_SETREF(lz->fillvalue, state); Py_RETURN_NONE; } -- cgit v1.2.1 From 38f3c4611a7ed03dddc07fbd568b619af8b139a4 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 27 Dec 2015 15:41:34 +0200 Subject: Issue #20440: More use of Py_SETREF. This patch is manually crafted and contains changes that couldn't be handled automatically. --- Modules/_ctypes/_ctypes.c | 3 +-- Modules/_elementtree.c | 38 ++++++++++++++------------------------ Modules/_sqlite/cursor.c | 4 ++-- Modules/zlibmodule.c | 18 ++++++------------ 4 files changed, 23 insertions(+), 40 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 01fccca83e..5cf2b8bb67 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -2983,10 +2983,9 @@ PyCFuncPtr_set_restype(PyCFuncPtrObject *self, PyObject *ob) "restype must be a type, a callable, or None"); return -1; } - Py_XDECREF(self->checker); Py_INCREF(ob); Py_SETREF(self->restype, ob); - self->checker = PyObject_GetAttrString(ob, "_check_retval_"); + Py_SETREF(self->checker, PyObject_GetAttrString(ob, "_check_retval_")); if (self->checker == NULL) PyErr_Clear(); return 0; diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 2856bacc4a..11d1aece4f 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -935,9 +935,8 @@ element_setstate_from_attributes(ElementObject *self, return NULL; } - Py_CLEAR(self->tag); - self->tag = tag; - Py_INCREF(self->tag); + Py_INCREF(tag); + Py_SETREF(self->tag, tag); _clear_joined_ptr(&self->text); self->text = text ? JOIN_SET(text, PyList_CheckExact(text)) : Py_None; @@ -980,9 +979,8 @@ element_setstate_from_attributes(ElementObject *self, /* Stash attrib. */ if (attrib) { - Py_CLEAR(self->extra->attrib); - self->extra->attrib = attrib; Py_INCREF(attrib); + Py_SETREF(self->extra->attrib, attrib); } Py_RETURN_NONE; @@ -1944,9 +1942,8 @@ element_setattro(ElementObject* self, PyObject* nameobj, PyObject* value) return -1; if (strcmp(name, "tag") == 0) { - Py_DECREF(self->tag); - self->tag = value; - Py_INCREF(self->tag); + Py_INCREF(value); + Py_SETREF(self->tag, value); } else if (strcmp(name, "text") == 0) { Py_DECREF(JOIN_OBJ(self->text)); self->text = value; @@ -1960,9 +1957,8 @@ element_setattro(ElementObject* self, PyObject* nameobj, PyObject* value) if (create_extra(self, NULL) < 0) return -1; } - Py_DECREF(self->extra->attrib); - self->extra->attrib = value; - Py_INCREF(self->extra->attrib); + Py_INCREF(value); + Py_SETREF(self->extra->attrib, value); } else { PyErr_SetString(PyExc_AttributeError, "Can't set arbitrary attributes on Element"); @@ -2554,13 +2550,10 @@ treebuilder_handle_start(TreeBuilderObject* self, PyObject* tag, } self->index++; - Py_DECREF(this); Py_INCREF(node); - self->this = node; - - Py_DECREF(self->last); + Py_SETREF(self->this, node); Py_INCREF(node); - self->last = node; + Py_SETREF(self->last, node); if (treebuilder_append_event(self, self->start_event_obj, node) < 0) goto error; @@ -2633,15 +2626,12 @@ treebuilder_handle_end(TreeBuilderObject* self, PyObject* tag) return NULL; } - self->index--; - - item = PyList_GET_ITEM(self->stack, self->index); - Py_INCREF(item); - - Py_DECREF(self->last); - + item = self->last; self->last = self->this; - self->this = item; + self->index--; + self->this = PyList_GET_ITEM(self->stack, self->index); + Py_INCREF(self->this); + Py_DECREF(item); if (treebuilder_append_event(self, self->end_event_obj, self->last) < 0) return NULL; diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index d909738fd6..c0c8746837 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -524,10 +524,10 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* if (self->statement) { (void)pysqlite_statement_reset(self->statement); - Py_DECREF(self->statement); } - self->statement = (pysqlite_Statement*)pysqlite_cache_get(self->connection->statement_cache, func_args); + Py_SETREF(self->statement, + (pysqlite_Statement *)pysqlite_cache_get(self->connection->statement_cache, func_args)); Py_DECREF(func_args); if (!self->statement) { diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index a15fdb2a07..d5a6e53ea5 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -961,14 +961,11 @@ zlib_Compress_copy_impl(compobject *self) goto error; } Py_INCREF(self->unused_data); + Py_SETREF(retval->unused_data, self->unused_data); Py_INCREF(self->unconsumed_tail); + Py_SETREF(retval->unconsumed_tail, self->unconsumed_tail); Py_XINCREF(self->zdict); - Py_XDECREF(retval->unused_data); - Py_XDECREF(retval->unconsumed_tail); - Py_XDECREF(retval->zdict); - retval->unused_data = self->unused_data; - retval->unconsumed_tail = self->unconsumed_tail; - retval->zdict = self->zdict; + Py_SETREF(retval->zdict, self->zdict); retval->eof = self->eof; /* Mark it as being initialized */ @@ -1020,14 +1017,11 @@ zlib_Decompress_copy_impl(compobject *self) } Py_INCREF(self->unused_data); + Py_SETREF(retval->unused_data, self->unused_data); Py_INCREF(self->unconsumed_tail); + Py_SETREF(retval->unconsumed_tail, self->unconsumed_tail); Py_XINCREF(self->zdict); - Py_XDECREF(retval->unused_data); - Py_XDECREF(retval->unconsumed_tail); - Py_XDECREF(retval->zdict); - retval->unused_data = self->unused_data; - retval->unconsumed_tail = self->unconsumed_tail; - retval->zdict = self->zdict; + Py_SETREF(retval->zdict, self->zdict); retval->eof = self->eof; /* Mark it as being initialized */ -- cgit v1.2.1 From 20cb777d0019af42d191eaf5d425cc8671960a89 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 27 Dec 2015 15:51:32 +0200 Subject: Issue #20440: Cleaning up the code by using Py_SETREF and Py_CLEAR. Old code is correct, but with Py_SETREF and Py_CLEAR it can be cleaner. This patch doesn't fix bugs and hence there is no need to backport it. --- Modules/_collectionsmodule.c | 5 +---- Modules/_ctypes/_ctypes.c | 10 ++++------ Modules/_elementtree.c | 6 +----- Modules/_io/bytesio.c | 6 ++---- Modules/itertoolsmodule.c | 22 ++++++---------------- Modules/pyexpat.c | 17 ++++------------- 6 files changed, 18 insertions(+), 48 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index e3d1910b9f..6a5358494f 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1222,7 +1222,6 @@ deque_del_item(dequeobject *deque, Py_ssize_t i) static int deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) { - PyObject *old_value; block *b; Py_ssize_t n, len=Py_SIZE(deque), halflen=(len+1)>>1, index=i; @@ -1249,9 +1248,7 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) b = b->leftlink; } Py_INCREF(v); - old_value = b->data[i]; - b->data[i] = v; - Py_DECREF(old_value); + Py_SETREF(b->data[i], v); return 0; } diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 5db9f90f2e..dddeba043e 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -5123,23 +5123,22 @@ int comerror_init(PyObject *self, PyObject *args, PyObject *kwds) { PyObject *hresult, *text, *details; - PyBaseExceptionObject *bself; PyObject *a; int status; if (!_PyArg_NoKeywords(Py_TYPE(self)->tp_name, kwds)) - return -1; + return -1; if (!PyArg_ParseTuple(args, "OOO:COMError", &hresult, &text, &details)) return -1; a = PySequence_GetSlice(args, 1, PySequence_Size(args)); if (!a) - return -1; + return -1; status = PyObject_SetAttrString(self, "args", a); Py_DECREF(a); if (status < 0) - return -1; + return -1; if (PyObject_SetAttrString(self, "hresult", hresult) < 0) return -1; @@ -5150,9 +5149,8 @@ comerror_init(PyObject *self, PyObject *args, PyObject *kwds) if (PyObject_SetAttrString(self, "details", details) < 0) return -1; - bself = (PyBaseExceptionObject *)self; Py_INCREF(args); - Py_SETREF(bself->args, args); + Py_SETREF((PyBaseExceptionObject *)self->args, args); return 0; } diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index f16d48f829..580c53a417 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2338,13 +2338,9 @@ _elementtree_TreeBuilder___init___impl(TreeBuilderObject *self, PyObject *element_factory) /*[clinic end generated code: output=91cfa7558970ee96 input=1b424eeefc35249c]*/ { - PyObject *tmp; - if (element_factory) { Py_INCREF(element_factory); - tmp = self->element_factory; - self->element_factory = element_factory; - Py_XDECREF(tmp); + Py_SETREF(self->element_factory, element_factory); } return 0; diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index 99e71bcc7f..6333e46438 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -87,7 +87,7 @@ scan_eol(bytesio *self, Py_ssize_t len) static int unshare_buffer(bytesio *self, size_t size) { - PyObject *new_buf, *old_buf; + PyObject *new_buf; assert(SHARED_BUF(self)); assert(self->exports == 0); assert(size >= (size_t)self->string_size); @@ -96,9 +96,7 @@ unshare_buffer(bytesio *self, size_t size) return -1; memcpy(PyBytes_AS_STRING(new_buf), PyBytes_AS_STRING(self->buf), self->string_size); - old_buf = self->buf; - self->buf = new_buf; - Py_DECREF(old_buf); + Py_SETREF(self->buf, new_buf); return 0; } diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 2bd0594f00..a4ffa0699a 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -77,7 +77,7 @@ groupby_traverse(groupbyobject *gbo, visitproc visit, void *arg) static PyObject * groupby_next(groupbyobject *gbo) { - PyObject *newvalue, *newkey, *r, *grouper, *tmp; + PyObject *newvalue, *newkey, *r, *grouper; /* skip to next iteration group */ for (;;) { @@ -110,19 +110,12 @@ groupby_next(groupbyobject *gbo) } } - tmp = gbo->currkey; - gbo->currkey = newkey; - Py_XDECREF(tmp); - - tmp = gbo->currvalue; - gbo->currvalue = newvalue; - Py_XDECREF(tmp); + Py_SETREF(gbo->currkey, newkey); + Py_SETREF(gbo->currvalue, newvalue); } Py_INCREF(gbo->currkey); - tmp = gbo->tgtkey; - gbo->tgtkey = gbo->currkey; - Py_XDECREF(tmp); + Py_SETREF(gbo->tgtkey, gbo->currkey); grouper = _grouper_create(gbo, gbo->tgtkey); if (grouper == NULL) @@ -3445,7 +3438,7 @@ accumulate_traverse(accumulateobject *lz, visitproc visit, void *arg) static PyObject * accumulate_next(accumulateobject *lz) { - PyObject *val, *oldtotal, *newtotal; + PyObject *val, *newtotal; val = (*Py_TYPE(lz->it)->tp_iternext)(lz->it); if (val == NULL) @@ -3465,11 +3458,8 @@ accumulate_next(accumulateobject *lz) if (newtotal == NULL) return NULL; - oldtotal = lz->total; - lz->total = newtotal; - Py_DECREF(oldtotal); - Py_INCREF(newtotal); + Py_SETREF(lz->total, newtotal); return newtotal; } diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 9267c69e19..c6d35150b3 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1226,12 +1226,8 @@ xmlparse_dealloc(xmlparseobject *self) self->itself = NULL; if (self->handlers != NULL) { - PyObject *temp; - for (i = 0; handler_info[i].name != NULL; i++) { - temp = self->handlers[i]; - self->handlers[i] = NULL; - Py_XDECREF(temp); - } + for (i = 0; handler_info[i].name != NULL; i++) + Py_CLEAR(self->handlers[i]); PyMem_Free(self->handlers); self->handlers = NULL; } @@ -1345,7 +1341,6 @@ sethandler(xmlparseobject *self, PyObject *name, PyObject* v) int handlernum = handlername2int(name); if (handlernum >= 0) { xmlhandler c_handler = NULL; - PyObject *temp = self->handlers[handlernum]; if (v == Py_None) { /* If this is the character data handler, and a character @@ -1367,8 +1362,7 @@ sethandler(xmlparseobject *self, PyObject *name, PyObject* v) Py_INCREF(v); c_handler = handler_info[handlernum].handler; } - self->handlers[handlernum] = v; - Py_XDECREF(temp); + Py_SETREF(self->handlers[handlernum], v); handler_info[handlernum].setter(self->itself, c_handler); return 1; } @@ -1898,15 +1892,12 @@ static void clear_handlers(xmlparseobject *self, int initial) { int i = 0; - PyObject *temp; for (; handler_info[i].name != NULL; i++) { if (initial) self->handlers[i] = NULL; else { - temp = self->handlers[i]; - self->handlers[i] = NULL; - Py_XDECREF(temp); + Py_CLEAR(self->handlers[i]); handler_info[i].setter(self->itself, NULL); } } -- cgit v1.2.1 From ec6f5d5d30a6ac8d44c9327183533bb3ae3202dc Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 28 Dec 2015 23:58:07 +0200 Subject: Issue #25447: Copying the lru_cache() wrapper object now always works, independedly from the type of the wrapped object (by returning the original object unchanged). --- Modules/_functoolsmodule.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index fadc0a9c20..035d3d9c59 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -1053,6 +1053,20 @@ lru_cache_reduce(PyObject *self, PyObject *unused) return PyObject_GetAttrString(self, "__qualname__"); } +static PyObject * +lru_cache_copy(PyObject *self, PyObject *unused) +{ + Py_INCREF(self); + return self; +} + +static PyObject * +lru_cache_deepcopy(PyObject *self, PyObject *unused) +{ + Py_INCREF(self); + return self; +} + static int lru_cache_tp_traverse(lru_cache_object *self, visitproc visit, void *arg) { @@ -1104,6 +1118,8 @@ static PyMethodDef lru_cache_methods[] = { {"cache_info", (PyCFunction)lru_cache_cache_info, METH_NOARGS}, {"cache_clear", (PyCFunction)lru_cache_cache_clear, METH_NOARGS}, {"__reduce__", (PyCFunction)lru_cache_reduce, METH_NOARGS}, + {"__copy__", (PyCFunction)lru_cache_copy, METH_VARARGS}, + {"__deepcopy__", (PyCFunction)lru_cache_deepcopy, METH_VARARGS}, {NULL} }; -- cgit v1.2.1 From 4f9ad6267df821336864a4f9dd83d7d47ef7c34a Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Mon, 28 Dec 2015 23:02:02 +0100 Subject: Issue #25928: Add Decimal.as_integer_ratio(). Python parts and docs by Mark Dickinson. --- Modules/_decimal/_decimal.c | 101 +++++++++++++++++++++++++++++++++++++ Modules/_decimal/docstrings.h | 9 ++++ Modules/_decimal/tests/deccheck.py | 6 +-- 3 files changed, 113 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index 112b44fda7..3c2ad851ba 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -3380,6 +3380,106 @@ dec_as_long(PyObject *dec, PyObject *context, int round) return (PyObject *) pylong; } +/* Convert a Decimal to its exact integer ratio representation. */ +static PyObject * +dec_as_integer_ratio(PyObject *self, PyObject *args UNUSED) +{ + PyObject *numerator = NULL; + PyObject *denominator = NULL; + PyObject *exponent = NULL; + PyObject *result = NULL; + PyObject *tmp; + mpd_ssize_t exp; + PyObject *context; + uint32_t status = 0; + PyNumberMethods *long_methods = PyLong_Type.tp_as_number; + + if (mpd_isspecial(MPD(self))) { + if (mpd_isnan(MPD(self))) { + PyErr_SetString(PyExc_ValueError, + "cannot convert NaN to integer ratio"); + } + else { + PyErr_SetString(PyExc_OverflowError, + "cannot convert Infinity to integer ratio"); + } + return NULL; + } + + CURRENT_CONTEXT(context); + + tmp = dec_alloc(); + if (tmp == NULL) { + return NULL; + } + + if (!mpd_qcopy(MPD(tmp), MPD(self), &status)) { + Py_DECREF(tmp); + PyErr_NoMemory(); + return NULL; + } + + exp = mpd_iszero(MPD(tmp)) ? 0 : MPD(tmp)->exp; + MPD(tmp)->exp = 0; + + /* context and rounding are unused here: the conversion is exact */ + numerator = dec_as_long(tmp, context, MPD_ROUND_FLOOR); + Py_DECREF(tmp); + if (numerator == NULL) { + goto error; + } + + exponent = PyLong_FromSsize_t(exp < 0 ? -exp : exp); + if (exponent == NULL) { + goto error; + } + + tmp = PyLong_FromLong(10); + if (tmp == NULL) { + goto error; + } + + Py_SETREF(exponent, long_methods->nb_power(tmp, exponent, Py_None)); + Py_DECREF(tmp); + if (exponent == NULL) { + goto error; + } + + if (exp >= 0) { + Py_SETREF(numerator, long_methods->nb_multiply(numerator, exponent)); + if (numerator == NULL) { + goto error; + } + denominator = PyLong_FromLong(1); + if (denominator == NULL) { + goto error; + } + } + else { + denominator = exponent; + exponent = NULL; + tmp = _PyLong_GCD(numerator, denominator); + if (tmp == NULL) { + goto error; + } + Py_SETREF(numerator, long_methods->nb_floor_divide(numerator, tmp)); + Py_SETREF(denominator, long_methods->nb_floor_divide(denominator, tmp)); + Py_DECREF(tmp); + if (numerator == NULL || denominator == NULL) { + goto error; + } + } + + result = PyTuple_Pack(2, numerator, denominator); + + +error: + Py_XDECREF(exponent); + Py_XDECREF(denominator); + Py_XDECREF(numerator); + return result; +} + static PyObject * PyDec_ToIntegralValue(PyObject *dec, PyObject *args, PyObject *kwds) { @@ -4688,6 +4788,7 @@ static PyMethodDef dec_methods [] = /* Miscellaneous */ { "from_float", dec_from_float, METH_O|METH_CLASS, doc_from_float }, { "as_tuple", PyDec_AsTuple, METH_NOARGS, doc_as_tuple }, + { "as_integer_ratio", dec_as_integer_ratio, METH_NOARGS, doc_as_integer_ratio }, /* Special methods */ { "__copy__", dec_copy, METH_NOARGS, NULL }, diff --git a/Modules/_decimal/docstrings.h b/Modules/_decimal/docstrings.h index 71029a994b..f7fd6e7952 100644 --- a/Modules/_decimal/docstrings.h +++ b/Modules/_decimal/docstrings.h @@ -70,6 +70,15 @@ PyDoc_STRVAR(doc_as_tuple, Return a tuple representation of the number.\n\ \n"); +PyDoc_STRVAR(doc_as_integer_ratio, +"as_integer_ratio($self, /)\n--\n\n\ +Decimal.as_integer_ratio() -> (int, int)\n\ +\n\ +Return a pair of integers, whose ratio is exactly equal to the original\n\ +Decimal and with a positive denominator. The ratio is in lowest terms.\n\ +Raise OverflowError on infinities and a ValueError on NaNs.\n\ +\n"); + PyDoc_STRVAR(doc_canonical, "canonical($self, /)\n--\n\n\ Return the canonical encoding of the argument. Currently, the encoding\n\ diff --git a/Modules/_decimal/tests/deccheck.py b/Modules/_decimal/tests/deccheck.py index ab7d5bdf4e..f907531e1f 100644 --- a/Modules/_decimal/tests/deccheck.py +++ b/Modules/_decimal/tests/deccheck.py @@ -50,8 +50,8 @@ Functions = { '__abs__', '__bool__', '__ceil__', '__complex__', '__copy__', '__floor__', '__float__', '__hash__', '__int__', '__neg__', '__pos__', '__reduce__', '__repr__', '__str__', '__trunc__', - 'adjusted', 'as_tuple', 'canonical', 'conjugate', 'copy_abs', - 'copy_negate', 'is_canonical', 'is_finite', 'is_infinite', + 'adjusted', 'as_integer_ratio', 'as_tuple', 'canonical', 'conjugate', + 'copy_abs', 'copy_negate', 'is_canonical', 'is_finite', 'is_infinite', 'is_nan', 'is_qnan', 'is_signed', 'is_snan', 'is_zero', 'radix' ), # Unary with optional context: @@ -128,7 +128,7 @@ ContextFunctions = { # Functions that require a restricted exponent range for reasonable runtimes. UnaryRestricted = [ '__ceil__', '__floor__', '__int__', '__trunc__', - 'to_integral', 'to_integral_value' + 'as_integer_ratio', 'to_integral', 'to_integral_value' ] BinaryRestricted = ['__round__'] -- cgit v1.2.1 From 63738c05b0db2a1a5a6ab4aedec6fe557578c952 Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Mon, 28 Dec 2015 21:51:02 -0800 Subject: Issue #25972, #20440: Fix compilation on Windows --- Modules/_ctypes/_ctypes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index dddeba043e..c538ec79bd 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -5150,7 +5150,7 @@ comerror_init(PyObject *self, PyObject *args, PyObject *kwds) return -1; Py_INCREF(args); - Py_SETREF((PyBaseExceptionObject *)self->args, args); + Py_SETREF(((PyBaseExceptionObject *)self)->args, args); return 0; } -- cgit v1.2.1 From 80e2bbec98bacbd522e1ab94165ec66b3df0e6c4 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 30 Dec 2015 09:28:19 +0200 Subject: Fixed formatting comman-line usage message. --- Modules/main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/main.c b/Modules/main.c index 2a9ea2882c..e4c955e011 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -85,11 +85,11 @@ file : program read from script file\n\ arg ...: arguments passed to program in sys.argv[1:]\n\n\ Other environment variables:\n\ PYTHONSTARTUP: file executed on interactive startup (no default)\n\ -PYTHONPATH : '%c'-separated list of directories prefixed to the\n\ +PYTHONPATH : '%lc'-separated list of directories prefixed to the\n\ default module search path. The result is sys.path.\n\ "; static char *usage_5 = -"PYTHONHOME : alternate directory (or %c).\n" +"PYTHONHOME : alternate directory (or %lc).\n" " The default module search path uses %s.\n" "PYTHONCASEOK : ignore case in 'import' statements (Windows).\n" "PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n" @@ -114,8 +114,8 @@ usage(int exitcode, wchar_t* program) fputs(usage_1, f); fputs(usage_2, f); fputs(usage_3, f); - fprintf(f, usage_4, DELIM); - fprintf(f, usage_5, DELIM, PYTHONHOMEHELP); + fprintf(f, usage_4, (wint_t)DELIM); + fprintf(f, usage_5, (wint_t)DELIM, PYTHONHOMEHELP); fputs(usage_6, f); } return exitcode; -- cgit v1.2.1 From 93c98b688bef3bf08c027315a744869b590ceef3 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 5 Jan 2016 21:27:54 +0200 Subject: Issue #20440: Cleaning up the code by using Py_SETREF. --- Modules/_datetimemodule.c | 24 ++++++------------------ Modules/_elementtree.c | 4 +--- Modules/_lsprof.c | 7 ++----- Modules/_pickle.c | 12 ++---------- Modules/readline.c | 4 +--- 5 files changed, 12 insertions(+), 39 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 3e5e195e15..4c8f3f6fa2 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -1057,10 +1057,8 @@ format_utcoffset(char *buf, size_t buflen, const char *sep, } /* Offset is normalized, so it is negative if days < 0 */ if (GET_TD_DAYS(offset) < 0) { - PyObject *temp = offset; sign = '-'; - offset = delta_negative((PyDateTime_Delta *)offset); - Py_DECREF(temp); + Py_SETREF(offset, delta_negative((PyDateTime_Delta *)offset)); if (offset == NULL) return -1; } @@ -3047,10 +3045,8 @@ tzinfo_fromutc(PyDateTime_TZInfo *self, PyObject *dt) if (dst == Py_None) goto Inconsistent; if (delta_bool((PyDateTime_Delta *)dst) != 0) { - PyObject *temp = result; - result = add_datetime_timedelta((PyDateTime_DateTime *)result, - (PyDateTime_Delta *)dst, 1); - Py_DECREF(temp); + Py_SETREF(result, add_datetime_timedelta((PyDateTime_DateTime *)result, + (PyDateTime_Delta *)dst, 1)); if (result == NULL) goto Fail; } @@ -4157,10 +4153,7 @@ datetime_datetime_now_impl(PyTypeObject *type, PyObject *tz) tz); if (self != NULL && tz != Py_None) { /* Convert UTC to tzinfo's zone. */ - PyObject *temp = self; - - self = _PyObject_CallMethodId(tz, &PyId_fromutc, "O", self); - Py_DECREF(temp); + self = _PyObject_CallMethodId(tz, &PyId_fromutc, "N", self); } return self; } @@ -4195,10 +4188,7 @@ datetime_fromtimestamp(PyObject *cls, PyObject *args, PyObject *kw) tzinfo); if (self != NULL && tzinfo != Py_None) { /* Convert UTC to tzinfo's zone. */ - PyObject *temp = self; - - self = _PyObject_CallMethodId(tzinfo, &PyId_fromutc, "O", self); - Py_DECREF(temp); + self = _PyObject_CallMethodId(tzinfo, &PyId_fromutc, "N", self); } return self; } @@ -4421,9 +4411,7 @@ datetime_subtract(PyObject *left, PyObject *right) return NULL; if (offdiff != NULL) { - PyObject *temp = result; - result = delta_subtract(result, offdiff); - Py_DECREF(temp); + Py_SETREF(result, delta_subtract(result, offdiff)); Py_DECREF(offdiff); } } diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 580c53a417..0effc3f32a 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -396,10 +396,8 @@ element_init(PyObject *self, PyObject *args, PyObject *kwds) Py_XDECREF(attrib); /* Replace the objects already pointed to by tag, text and tail. */ - tmp = self_elem->tag; Py_INCREF(tag); - self_elem->tag = tag; - Py_DECREF(tmp); + Py_SETREF(self_elem->tag, tag); tmp = self_elem->text; Py_INCREF(Py_None); diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c index 66e534f2a8..d3ed758e8a 100644 --- a/Modules/_lsprof.c +++ b/Modules/_lsprof.c @@ -762,7 +762,6 @@ profiler_dealloc(ProfilerObject *op) static int profiler_init(ProfilerObject *pObj, PyObject *args, PyObject *kw) { - PyObject *o; PyObject *timer = NULL; double timeunit = 0.0; int subcalls = 1; @@ -777,11 +776,9 @@ profiler_init(ProfilerObject *pObj, PyObject *args, PyObject *kw) if (setSubcalls(pObj, subcalls) < 0 || setBuiltins(pObj, builtins) < 0) return -1; - o = pObj->externalTimer; - pObj->externalTimer = timer; - Py_XINCREF(timer); - Py_XDECREF(o); pObj->externalTimerUnit = timeunit; + Py_XINCREF(timer); + Py_SETREF(pObj->externalTimer, timer); return 0; } diff --git a/Modules/_pickle.c b/Modules/_pickle.c index b42f4f612f..bb3330addb 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -4494,8 +4494,6 @@ Pickler_get_persid(PicklerObject *self) static int Pickler_set_persid(PicklerObject *self, PyObject *value) { - PyObject *tmp; - if (value == NULL) { PyErr_SetString(PyExc_TypeError, "attribute deletion is not supported"); @@ -4507,10 +4505,8 @@ Pickler_set_persid(PicklerObject *self, PyObject *value) return -1; } - tmp = self->pers_func; Py_INCREF(value); - self->pers_func = value; - Py_XDECREF(tmp); /* self->pers_func can be NULL, so be careful. */ + Py_SETREF(self->pers_func, value); return 0; } @@ -6946,8 +6942,6 @@ Unpickler_get_persload(UnpicklerObject *self) static int Unpickler_set_persload(UnpicklerObject *self, PyObject *value) { - PyObject *tmp; - if (value == NULL) { PyErr_SetString(PyExc_TypeError, "attribute deletion is not supported"); @@ -6960,10 +6954,8 @@ Unpickler_set_persload(UnpicklerObject *self, PyObject *value) return -1; } - tmp = self->pers_func; Py_INCREF(value); - self->pers_func = value; - Py_XDECREF(tmp); /* self->pers_func can be NULL, so be careful. */ + Py_SETREF(self->pers_func, value); return 0; } diff --git a/Modules/readline.c b/Modules/readline.c index 939ff1ad55..69304154b1 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -321,10 +321,8 @@ set_hook(const char *funcname, PyObject **hook_var, PyObject *args) Py_CLEAR(*hook_var); } else if (PyCallable_Check(function)) { - PyObject *tmp = *hook_var; Py_INCREF(function); - *hook_var = function; - Py_XDECREF(tmp); + Py_SETREF(*hook_var, function); } else { PyErr_Format(PyExc_TypeError, -- cgit v1.2.1 From dc8e5e75a096c4a6b50f323fe827132937912eab Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Thu, 7 Jan 2016 21:37:37 -0800 Subject: enable SSL_MODE_RELEASE_BUFFERS Patch by Cory Benfield. --- Modules/_ssl.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 8818d26e09..1c68000b9a 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -2219,6 +2219,7 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) PySSLContext *self; long options; SSL_CTX *ctx = NULL; + unsigned long libver; PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) @@ -2281,6 +2282,22 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) options |= SSL_OP_NO_SSLv3; SSL_CTX_set_options(self->ctx, options); +#if defined(SSL_MODE_RELEASE_BUFFERS) + /* Set SSL_MODE_RELEASE_BUFFERS. This potentially greatly reduces memory + usage for no cost at all. However, don't do this for OpenSSL versions + between 1.0.1 and 1.0.1h or 1.0.0 and 1.0.0m, which are affected by CVE + 2014-0198. I can't find exactly which beta fixed this CVE, so be + conservative and assume it wasn't fixed until release. We do this check + at runtime to avoid problems from the dynamic linker. + See #25672 for more on this. */ + libver = SSLeay(); + if (!(libver >= 0x10001000UL && libver < 0x1000108fUL) && + !(libver >= 0x10000000UL && libver < 0x100000dfUL)) { + SSL_CTX_set_mode(self->ctx, SSL_MODE_RELEASE_BUFFERS); + } +#endif + + #ifndef OPENSSL_NO_ECDH /* Allow automatic ECDH curve selection (on OpenSSL 1.0.2+), or use prime256v1 by default. This is Apache mod_ssl's initialization -- cgit v1.2.1 From db29d4cea2a76c8cbf3e0c2a7c6cecade551d96a Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 15 Jan 2016 09:38:24 -0800 Subject: Issue #26114: Remove a reference to 'Numerical Recipes'. While no copyright violation occurred, the license which 'Numerical Recipes' operates under is not amenable to Python, so to prevent confusion it's easier to simply remove its mention. --- Modules/mathmodule.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 9359eb2b3a..a6cd15aa08 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -400,9 +400,8 @@ m_lgamma(double x) Implementations of the error function erf(x) and the complementary error function erfc(x). - Method: following 'Numerical Recipes' by Flannery, Press et. al. (2nd ed., - Cambridge University Press), we use a series approximation for erf for - small x, and a continued fraction approximation for erfc(x) for larger x; + Method: we use a series approximation for erf for small x, and a continued + fraction approximation for erfc(x) for larger x; combined with the relations erf(-x) = -erf(x) and erfc(x) = 1.0 - erf(x), this gives us erf(x) and erfc(x) for all x. -- cgit v1.2.1 From 319014ea8dee7a0ee17ebd54341cdde503e1c97f Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 15 Jan 2016 11:22:19 -0800 Subject: Issue #17633: Improve support for namespace packages with zipimport. Previously zipimport mistakenly limited namespace support to only the top-level of the zipfile when it should have supported an arbitrary depth. Thanks to Phil Connel for the bug report and initial patch and Mike Romberg for the final patch. --- Modules/zipimport.c | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) (limited to 'Modules') diff --git a/Modules/zipimport.c b/Modules/zipimport.c index 7220faf08d..b978f269c6 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -324,17 +324,14 @@ get_module_info(ZipImporter *self, PyObject *fullname) } typedef enum { - FL_ERROR, - FL_NOT_FOUND, - FL_MODULE_FOUND, - FL_NS_FOUND + FL_ERROR = -1, /* error */ + FL_NOT_FOUND, /* no loader or namespace portions found */ + FL_MODULE_FOUND, /* module/package found */ + FL_NS_FOUND /* namespace portion found: */ + /* *namespace_portion will point to the name */ } find_loader_result; -/* The guts of "find_loader" and "find_module". Return values: - -1: error - 0: no loader or namespace portions found - 1: module/package found - 2: namespace portion found: *namespace_portion will point to the name +/* The guts of "find_loader" and "find_module". */ static find_loader_result find_loader(ZipImporter *self, PyObject *fullname, PyObject **namespace_portion) @@ -349,21 +346,34 @@ find_loader(ZipImporter *self, PyObject *fullname, PyObject **namespace_portion) if (mi == MI_NOT_FOUND) { /* Not a module or regular package. See if this is a directory, and therefore possibly a portion of a namespace package. */ - int is_dir = check_is_directory(self, self->prefix, fullname); + find_loader_result result = FL_NOT_FOUND; + PyObject *subname; + int is_dir; + + /* We're only interested in the last path component of fullname; + earlier components are recorded in self->prefix. */ + subname = get_subname(fullname); + if (subname == NULL) { + return FL_ERROR; + } + + is_dir = check_is_directory(self, self->prefix, subname); if (is_dir < 0) - return -1; - if (is_dir) { + result = FL_ERROR; + else if (is_dir) { /* This is possibly a portion of a namespace package. Return the string representing its path, without a trailing separator. */ *namespace_portion = PyUnicode_FromFormat("%U%c%U%U", self->archive, SEP, - self->prefix, fullname); + self->prefix, subname); if (*namespace_portion == NULL) - return FL_ERROR; - return FL_NS_FOUND; + result = FL_ERROR; + else + result = FL_NS_FOUND; } - return FL_NOT_FOUND; + Py_DECREF(subname); + return result; } /* This is a module or package. */ return FL_MODULE_FOUND; @@ -397,6 +407,9 @@ zipimporter_find_module(PyObject *obj, PyObject *args) case FL_MODULE_FOUND: result = (PyObject *)self; break; + default: + PyErr_BadInternalCall(); + return NULL; } Py_INCREF(result); return result; @@ -433,6 +446,9 @@ zipimporter_find_loader(PyObject *obj, PyObject *args) result = Py_BuildValue("O[O]", Py_None, namespace_portion); Py_DECREF(namespace_portion); return result; + default: + PyErr_BadInternalCall(); + return NULL; } return result; } -- cgit v1.2.1 From 09736dc03235de9ee4d3c5cb8313b8a5396cbba3 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Sun, 17 Jan 2016 12:28:43 +0100 Subject: Issue #26139: libmpdec: disable /W4 warning (non-standard dllimport behavior). --- Modules/_decimal/libmpdec/memory.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Modules') diff --git a/Modules/_decimal/libmpdec/memory.c b/Modules/_decimal/libmpdec/memory.c index 0f41fe5064..61eb6336eb 100644 --- a/Modules/_decimal/libmpdec/memory.c +++ b/Modules/_decimal/libmpdec/memory.c @@ -33,6 +33,11 @@ #include "memory.h" +#if defined(_MSC_VER) + #pragma warning(disable : 4232) +#endif + + /* Guaranteed minimum allocation for a coefficient. May be changed once at program start using mpd_setminalloc(). */ mpd_ssize_t MPD_MINALLOC = MPD_MINALLOC_MIN; -- cgit v1.2.1 From a27a2f967ea9d6109b5effddf0bee38f44523570 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 18 Jan 2016 08:00:15 +0100 Subject: Fix indentation of continuation lines. --- Modules/_testcapimodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index cc3f52d1e0..fbb4aa4674 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -1047,7 +1047,7 @@ test_k_code(PyObject *self) value = PyLong_AsUnsignedLongMask(num); if (value != ULONG_MAX) return raiseTestError("test_k_code", - "PyLong_AsUnsignedLongMask() returned wrong value for long 0xFFF...FFF"); + "PyLong_AsUnsignedLongMask() returned wrong value for long 0xFFF...FFF"); PyTuple_SET_ITEM(tuple, 0, num); @@ -1066,7 +1066,7 @@ test_k_code(PyObject *self) value = PyLong_AsUnsignedLongMask(num); if (value != (unsigned long)-0x42) return raiseTestError("test_k_code", - "PyLong_AsUnsignedLongMask() returned wrong value for long 0xFFF...FFF"); + "PyLong_AsUnsignedLongMask() returned wrong value for long 0xFFF...FFF"); PyTuple_SET_ITEM(tuple, 0, num); -- cgit v1.2.1 From 098644441e6e0571b01102f5f9ae6775353206ac Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 18 Jan 2016 18:49:57 +0200 Subject: Issue #26129: Deprecated accepting non-integers in grp.getgrgid(). --- Modules/grpmodule.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c index 403e434697..5ad87f1ca8 100644 --- a/Modules/grpmodule.c +++ b/Modules/grpmodule.c @@ -100,14 +100,25 @@ grp_getgrgid_impl(PyModuleDef *module, PyObject *id) gid_t gid; struct group *p; - py_int_id = PyNumber_Long(id); - if (!py_int_id) + if (!_Py_Gid_Converter(id, &gid)) { + if (!PyErr_ExceptionMatches(PyExc_TypeError)) { return NULL; - if (!_Py_Gid_Converter(py_int_id, &gid)) { + } + PyErr_Clear(); + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "group id must be int, not %.200", + id->ob_type->tp_name) < 0) { + return NULL; + } + py_int_id = PyNumber_Long(id); + if (!py_int_id) + return NULL; + if (!_Py_Gid_Converter(py_int_id, &gid)) { + Py_DECREF(py_int_id); + return NULL; + } Py_DECREF(py_int_id); - return NULL; } - Py_DECREF(py_int_id); if ((p = getgrgid(gid)) == NULL) { PyObject *gid_obj = _PyLong_FromGid(gid); -- cgit v1.2.1 From b3b0102d41c7b1a25493b51d5d83d080fb32735b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 20 Jan 2016 11:12:38 +0100 Subject: Add _PyThreadState_UncheckedGet() Issue #26154: Add a new private _PyThreadState_UncheckedGet() function which gets the current thread state, but don't call Py_FatalError() if it is NULL. Python 3.5.1 removed the _PyThreadState_Current symbol from the Python C API to no more expose complex and private atomic types. Atomic types depends on the compiler or can even depend on compiler options. The new function _PyThreadState_UncheckedGet() allows to get the variable value without having to care of the exact implementation of atomic types. Changes: * Replace direct usage of the _PyThreadState_Current variable with a call to _PyThreadState_UncheckedGet(). * In pystate.c, replace direct usage of the _PyThreadState_Current variable with the PyThreadState_GET() macro for readability. * Document also PyThreadState_Get() in pystate.h --- Modules/faulthandler.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 1ed22bf8bc..14384b5d1c 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -490,7 +490,7 @@ faulthandler_thread(void *unused) assert(st == PY_LOCK_FAILURE); /* get the thread holding the GIL, NULL if no thread hold the GIL */ - current = (PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current); + current = _PyThreadState_UncheckedGet(); _Py_write_noraise(thread.fd, thread.header, (int)thread.header_len); -- cgit v1.2.1 From d97ab9500d4a86eeced1c97605509445f3c2a637 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 24 Jan 2016 09:12:06 -0800 Subject: Miscellaneous refactorings * Add comment to the maxlen structure entry about the meaning of maxlen == -1 * Factor-out code common to deque_append(left) and deque_extend(left) * Factor inner-loop in deque_clear() to use only 1 test per loop instead of 2 * Tighten inner-loops for deque_item() and deque_ass_item() so that the compiler can combine the decrement and test into a single step. --- Modules/_collectionsmodule.c | 123 ++++++++++++++++++++----------------------- 1 file changed, 58 insertions(+), 65 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index fbf07a87a5..3ab987daee 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -81,7 +81,7 @@ typedef struct { Py_ssize_t leftindex; /* 0 <= leftindex < BLOCKLEN */ Py_ssize_t rightindex; /* 0 <= rightindex < BLOCKLEN */ size_t state; /* incremented whenever the indices move */ - Py_ssize_t maxlen; + Py_ssize_t maxlen; /* maxlen is -1 for unbounded deques */ PyObject *weakreflist; } dequeobject; @@ -264,13 +264,13 @@ PyDoc_STRVAR(popleft_doc, "Remove and return the leftmost element."); #define NEEDS_TRIM(deque, maxlen) ((size_t)(maxlen) < (size_t)(Py_SIZE(deque))) -static PyObject * -deque_append(dequeobject *deque, PyObject *item) +int +deque_append_internal(dequeobject *deque, PyObject *item, Py_ssize_t maxlen) { if (deque->rightindex == BLOCKLEN - 1) { block *b = newblock(); if (b == NULL) - return NULL; + return -1; b->leftlink = deque->rightblock; CHECK_END(deque->rightblock->rightlink); deque->rightblock->rightlink = b; @@ -279,27 +279,35 @@ deque_append(dequeobject *deque, PyObject *item) deque->rightindex = -1; } Py_SIZE(deque)++; - Py_INCREF(item); deque->rightindex++; deque->rightblock->data[deque->rightindex] = item; - if (NEEDS_TRIM(deque, deque->maxlen)) { + if (NEEDS_TRIM(deque, maxlen)) { PyObject *olditem = deque_popleft(deque, NULL); Py_DECREF(olditem); } else { deque->state++; } + return 0; +} + +static PyObject * +deque_append(dequeobject *deque, PyObject *item) +{ + Py_INCREF(item); + if (deque_append_internal(deque, item, deque->maxlen) < 0) + return NULL; Py_RETURN_NONE; } PyDoc_STRVAR(append_doc, "Add an element to the right side of the deque."); -static PyObject * -deque_appendleft(dequeobject *deque, PyObject *item) +int +deque_appendleft_internal(dequeobject *deque, PyObject *item, Py_ssize_t maxlen) { if (deque->leftindex == 0) { block *b = newblock(); if (b == NULL) - return NULL; + return -1; b->rightlink = deque->leftblock; CHECK_END(deque->leftblock->leftlink); deque->leftblock->leftlink = b; @@ -308,7 +316,6 @@ deque_appendleft(dequeobject *deque, PyObject *item) deque->leftindex = BLOCKLEN; } Py_SIZE(deque)++; - Py_INCREF(item); deque->leftindex--; deque->leftblock->data[deque->leftindex] = item; if (NEEDS_TRIM(deque, deque->maxlen)) { @@ -317,6 +324,15 @@ deque_appendleft(dequeobject *deque, PyObject *item) } else { deque->state++; } + return 0; +} + +static PyObject * +deque_appendleft(dequeobject *deque, PyObject *item) +{ + Py_INCREF(item); + if (deque_appendleft_internal(deque, item, deque->maxlen) < 0) + return NULL; Py_RETURN_NONE; } @@ -387,28 +403,10 @@ deque_extend(dequeobject *deque, PyObject *iterable) iternext = *Py_TYPE(it)->tp_iternext; while ((item = iternext(it)) != NULL) { - if (deque->rightindex == BLOCKLEN - 1) { - block *b = newblock(); - if (b == NULL) { - Py_DECREF(item); - Py_DECREF(it); - return NULL; - } - b->leftlink = deque->rightblock; - CHECK_END(deque->rightblock->rightlink); - deque->rightblock->rightlink = b; - deque->rightblock = b; - MARK_END(b->rightlink); - deque->rightindex = -1; - } - Py_SIZE(deque)++; - deque->rightindex++; - deque->rightblock->data[deque->rightindex] = item; - if (NEEDS_TRIM(deque, maxlen)) { - PyObject *olditem = deque_popleft(deque, NULL); - Py_DECREF(olditem); - } else { - deque->state++; + if (deque_append_internal(deque, item, maxlen) < 0) { + Py_DECREF(item); + Py_DECREF(it); + return NULL; } } return finalize_iterator(it); @@ -452,28 +450,10 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) iternext = *Py_TYPE(it)->tp_iternext; while ((item = iternext(it)) != NULL) { - if (deque->leftindex == 0) { - block *b = newblock(); - if (b == NULL) { - Py_DECREF(item); - Py_DECREF(it); - return NULL; - } - b->rightlink = deque->leftblock; - CHECK_END(deque->leftblock->leftlink); - deque->leftblock->leftlink = b; - deque->leftblock = b; - MARK_END(b->leftlink); - deque->leftindex = BLOCKLEN; - } - Py_SIZE(deque)++; - deque->leftindex--; - deque->leftblock->data[deque->leftindex] = item; - if (NEEDS_TRIM(deque, maxlen)) { - PyObject *olditem = deque_pop(deque, NULL); - Py_DECREF(olditem); - } else { - deque->state++; + if (deque_appendleft_internal(deque, item, maxlen) < 0) { + Py_DECREF(item); + Py_DECREF(it); + return NULL; } } return finalize_iterator(it); @@ -565,8 +545,9 @@ deque_clear(dequeobject *deque) block *prevblock; block *leftblock; Py_ssize_t leftindex; - Py_ssize_t n; + Py_ssize_t n, m; PyObject *item; + PyObject **itemptr, **limit; if (Py_SIZE(deque) == 0) return; @@ -608,17 +589,25 @@ deque_clear(dequeobject *deque) /* Now the old size, leftblock, and leftindex are disconnected from the empty deque and we can use them to decref the pointers. */ - while (n--) { - item = leftblock->data[leftindex]; - Py_DECREF(item); - leftindex++; - if (leftindex == BLOCKLEN && n) { + itemptr = &leftblock->data[leftindex]; + m = (BLOCKLEN - leftindex > n) ? n : BLOCKLEN - leftindex; + limit = &leftblock->data[leftindex + m]; + n -= m; + while (1) { + if (itemptr == limit) { + if (n == 0) + break; CHECK_NOT_END(leftblock->rightlink); prevblock = leftblock; leftblock = leftblock->rightlink; - leftindex = 0; + itemptr = leftblock->data; + m = (n > BLOCKLEN) ? BLOCKLEN : n; + limit = &leftblock->data[m]; + n -= m; freeblock(prevblock); } + item = *(itemptr++); + Py_DECREF(item); } CHECK_END(leftblock->rightlink); freeblock(leftblock); @@ -1185,14 +1174,16 @@ deque_item(dequeobject *deque, Py_ssize_t i) i = (Py_ssize_t)((size_t) i % BLOCKLEN); if (index < (Py_SIZE(deque) >> 1)) { b = deque->leftblock; - while (n--) + n++; + while (--n) b = b->rightlink; } else { n = (Py_ssize_t)( ((size_t)(deque->leftindex + Py_SIZE(deque) - 1)) / BLOCKLEN - n); b = deque->rightblock; - while (n--) + n++; + while (--n) b = b->leftlink; } } @@ -1235,14 +1226,16 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) i = (Py_ssize_t)((size_t) i % BLOCKLEN); if (index <= halflen) { b = deque->leftblock; - while (n--) + n++; + while (--n) b = b->rightlink; } else { n = (Py_ssize_t)( ((size_t)(deque->leftindex + Py_SIZE(deque) - 1)) / BLOCKLEN - n); b = deque->rightblock; - while (n--) + n++; + while (--n) b = b->leftlink; } Py_INCREF(v); -- cgit v1.2.1 From 1f09717e75d9082c4e416b9fb1e4c5a49bdba4a7 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 24 Jan 2016 11:32:07 -0800 Subject: Convert two other post-decrement while-loops to pre-decrements for consistency and for better code generation. --- Modules/_collectionsmodule.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 3ab987daee..cc9e4e890e 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -937,7 +937,8 @@ deque_count(dequeobject *deque, PyObject *v) PyObject *item; int cmp; - while (n--) { + n++; + while (--n) { CHECK_NOT_END(b); item = b->data[index]; cmp = PyObject_RichCompareBool(item, v, Py_EQ); @@ -974,7 +975,8 @@ deque_contains(dequeobject *deque, PyObject *v) PyObject *item; int cmp; - while (n--) { + n++; + while (--n) { CHECK_NOT_END(b); item = b->data[index]; cmp = PyObject_RichCompareBool(item, v, Py_EQ); -- cgit v1.2.1 From 698ab41f56e3256404ea9dfa9853b379213f2695 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 24 Jan 2016 12:40:42 -0800 Subject: Convert another post-decrement while-loop to pre-decrement for consistency and better generated code (on both GCC and CLang). --- Modules/_collectionsmodule.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index cc9e4e890e..b77ea652fb 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -895,7 +895,8 @@ deque_reverse(dequeobject *deque, PyObject *unused) Py_ssize_t n = Py_SIZE(deque) >> 1; PyObject *tmp; - while (n-- > 0) { + n++; + while (--n) { /* Validate that pointers haven't met in the middle */ assert(leftblock != rightblock || leftindex < rightindex); CHECK_NOT_END(leftblock); -- cgit v1.2.1 From a2d9a408ba608e405a53da9f5a5347cac35332ec Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 24 Jan 2016 22:15:20 -0800 Subject: Fix compiler warning about obviously unreachable code. --- Modules/socketmodule.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 7ab534e07a..a6143c64d6 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -5411,10 +5411,6 @@ socket_inet_ntop(PyObject *self, PyObject *args) } else { return PyUnicode_FromString(retval); } - - /* NOTREACHED */ - PyErr_SetString(PyExc_RuntimeError, "invalid handling of inet_ntop"); - return NULL; } #elif defined(MS_WINDOWS) -- cgit v1.2.1 From c7860fd08d09db5377b9c29a70d3371f129b5a22 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 26 Jan 2016 21:44:16 -0800 Subject: Issue #26194: Fix undefined behavior for deque.insert() when len(d) == maxlen --- Modules/_collectionsmodule.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 1a334285c1..b9c4f3b926 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -973,10 +973,17 @@ deque_insert(dequeobject *deque, PyObject *args) Py_ssize_t index; Py_ssize_t n = Py_SIZE(deque); PyObject *value; + PyObject *oldvalue; PyObject *rv; if (!PyArg_ParseTuple(args, "nO:insert", &index, &value)) return NULL; + if (deque->maxlen == Py_SIZE(deque)) { + if (index >= deque->maxlen || Py_SIZE(deque) == 0) + Py_RETURN_NONE; + oldvalue = deque_pop(deque, NULL); + Py_DECREF(oldvalue); + } if (index >= n) return deque_append(deque, value); if (index <= -n || index == 0) -- cgit v1.2.1 From a6f051d70022c670d4bb41cd98b90dd5aa794207 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 28 Jan 2016 15:41:01 +0100 Subject: Windows: Decode hostname from ANSI code page Issue #26227: On Windows, getnameinfo(), gethostbyaddr() and gethostbyname_ex() functions of the socket module now decode the hostname from the ANSI code page rather than UTF-8. --- Modules/socketmodule.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index bae9634ef2..90aa3afcc1 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -4519,6 +4519,19 @@ PyDoc_STRVAR(gethostbyname_doc, Return the IP address (a string of the form '255.255.255.255') for a host."); +static PyObject* +sock_decode_hostname(const char *name) +{ +#ifdef MS_WINDOWS + /* Issue #26227: gethostbyaddr() returns a string encoded + * to the ANSI code page */ + return PyUnicode_DecodeFSDefault(name); +#else + /* Decode from UTF-8 */ + return PyUnicode_FromString(name); +#endif +} + /* Convenience function common to gethostbyname_ex and gethostbyaddr */ static PyObject * @@ -4529,6 +4542,7 @@ gethost_common(struct hostent *h, struct sockaddr *addr, size_t alen, int af) PyObject *name_list = (PyObject *)NULL; PyObject *addr_list = (PyObject *)NULL; PyObject *tmp; + PyObject *name; if (h == NULL) { /* Let's get real error message to return */ @@ -4637,7 +4651,10 @@ gethost_common(struct hostent *h, struct sockaddr *addr, size_t alen, int af) goto err; } - rtn_tuple = Py_BuildValue("sOO", h->h_name, name_list, addr_list); + name = sock_decode_hostname(h->h_name); + if (name == NULL) + goto err; + rtn_tuple = Py_BuildValue("NOO", name, name_list, addr_list); err: Py_XDECREF(name_list); @@ -5623,6 +5640,7 @@ socket_getnameinfo(PyObject *self, PyObject *args) struct addrinfo hints, *res = NULL; int error; PyObject *ret = (PyObject *)NULL; + PyObject *name; flags = flowinfo = scope_id = 0; if (!PyArg_ParseTuple(args, "Oi:getnameinfo", &sa, &flags)) @@ -5686,7 +5704,11 @@ socket_getnameinfo(PyObject *self, PyObject *args) set_gaierror(error); goto fail; } - ret = Py_BuildValue("ss", hbuf, pbuf); + + name = sock_decode_hostname(hbuf); + if (name == NULL) + goto fail; + ret = Py_BuildValue("Ns", name, pbuf); fail: if (res) -- cgit v1.2.1 From efc552a603a109b79702e2052a76f4a49b6f0ea6 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 28 Jan 2016 19:49:54 +0200 Subject: Issue #26198: Added tests for "es", "et", "es#", "et#" and "C" format units of PyArg_Parse*() functions. --- Modules/_testcapimodule.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 9a0364826e..71aa4198a1 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -1088,7 +1088,16 @@ getargs_c(PyObject *self, PyObject *args) char c; if (!PyArg_ParseTuple(args, "c", &c)) return NULL; - return PyBytes_FromStringAndSize(&c, 1); + return PyLong_FromLong((unsigned char)c); +} + +static PyObject * +getargs_C(PyObject *self, PyObject *args) +{ + int c; + if (!PyArg_ParseTuple(args, "C", &c)) + return NULL; + return PyLong_FromLong(c); } static PyObject * @@ -1243,6 +1252,84 @@ getargs_Z_hash(PyObject *self, PyObject *args) Py_RETURN_NONE; } +static PyObject * +getargs_es(PyObject *self, PyObject *args) +{ + PyObject *arg, *result; + const char *encoding = NULL; + char *str; + + if (!PyArg_ParseTuple(args, "O|s", &arg, &encoding)) + return NULL; + if (!PyArg_Parse(arg, "es", encoding, &str)) + return NULL; + result = PyBytes_FromString(str); + PyMem_Free(str); + return result; +} + +static PyObject * +getargs_et(PyObject *self, PyObject *args) +{ + PyObject *arg, *result; + const char *encoding = NULL; + char *str; + + if (!PyArg_ParseTuple(args, "O|s", &arg, &encoding)) + return NULL; + if (!PyArg_Parse(arg, "et", encoding, &str)) + return NULL; + result = PyBytes_FromString(str); + PyMem_Free(str); + return result; +} + +static PyObject * +getargs_es_hash(PyObject *self, PyObject *args) +{ + PyObject *arg, *result; + const char *encoding = NULL; + PyByteArrayObject *buffer = NULL; + char *str = NULL; + Py_ssize_t size; + + if (!PyArg_ParseTuple(args, "O|sY", &arg, &encoding, &buffer)) + return NULL; + if (buffer != NULL) { + str = PyByteArray_AS_STRING(buffer); + size = PyByteArray_GET_SIZE(buffer); + } + if (!PyArg_Parse(arg, "es#", encoding, &str, &size)) + return NULL; + result = PyBytes_FromStringAndSize(str, size); + if (buffer == NULL) + PyMem_Free(str); + return result; +} + +static PyObject * +getargs_et_hash(PyObject *self, PyObject *args) +{ + PyObject *arg, *result; + const char *encoding = NULL; + PyByteArrayObject *buffer = NULL; + char *str = NULL; + Py_ssize_t size; + + if (!PyArg_ParseTuple(args, "O|sY", &arg, &encoding, &buffer)) + return NULL; + if (buffer != NULL) { + str = PyByteArray_AS_STRING(buffer); + size = PyByteArray_GET_SIZE(buffer); + } + if (!PyArg_Parse(arg, "et#", encoding, &str, &size)) + return NULL; + result = PyBytes_FromStringAndSize(str, size); + if (buffer == NULL) + PyMem_Free(str); + return result; +} + /* Test the s and z codes for PyArg_ParseTuple. */ static PyObject * @@ -3588,6 +3675,7 @@ static PyMethodDef TestMethods[] = { {"test_L_code", (PyCFunction)test_L_code, METH_NOARGS}, #endif {"getargs_c", getargs_c, METH_VARARGS}, + {"getargs_C", getargs_C, METH_VARARGS}, {"getargs_s", getargs_s, METH_VARARGS}, {"getargs_s_star", getargs_s_star, METH_VARARGS}, {"getargs_s_hash", getargs_s_hash, METH_VARARGS}, @@ -3602,6 +3690,10 @@ static PyMethodDef TestMethods[] = { {"getargs_Z", getargs_Z, METH_VARARGS}, {"getargs_Z_hash", getargs_Z_hash, METH_VARARGS}, {"getargs_w_star", getargs_w_star, METH_VARARGS}, + {"getargs_es", getargs_es, METH_VARARGS}, + {"getargs_et", getargs_et, METH_VARARGS}, + {"getargs_es_hash", getargs_es_hash, METH_VARARGS}, + {"getargs_et_hash", getargs_et_hash, METH_VARARGS}, {"codec_incrementalencoder", (PyCFunction)codec_incrementalencoder, METH_VARARGS}, {"codec_incrementaldecoder", -- cgit v1.2.1 From 970044ad1123e97926b3c817711598a838c66ecc Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 28 Jan 2016 21:30:16 +0200 Subject: Issue #19883: Fixed possible integer overflows in zipimport. --- Modules/zipimport.c | 367 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 214 insertions(+), 153 deletions(-) (limited to 'Modules') diff --git a/Modules/zipimport.c b/Modules/zipimport.c index 48a0f26f53..e840271bfd 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -827,23 +827,43 @@ static PyTypeObject ZipImporter_Type = { /* implementation */ -/* Given a buffer, return the long that is represented by the first +/* Given a buffer, return the unsigned int that is represented by the first 4 bytes, encoded as little endian. This partially reimplements marshal.c:r_long() */ -static long -get_long(unsigned char *buf) { - long x; +static unsigned int +get_uint32(const unsigned char *buf) +{ + unsigned int x; x = buf[0]; - x |= (long)buf[1] << 8; - x |= (long)buf[2] << 16; - x |= (long)buf[3] << 24; -#if SIZEOF_LONG > 4 - /* Sign extension for 64-bit machines */ - x |= -(x & 0x80000000L); -#endif + x |= (unsigned int)buf[1] << 8; + x |= (unsigned int)buf[2] << 16; + x |= (unsigned int)buf[3] << 24; + return x; +} + +/* Given a buffer, return the unsigned int that is represented by the first + 2 bytes, encoded as little endian. This partially reimplements + marshal.c:r_short() */ +static unsigned short +get_uint16(const unsigned char *buf) +{ + unsigned short x; + x = buf[0]; + x |= (unsigned short)buf[1] << 8; return x; } +static void +set_file_error(PyObject *archive, int eof) +{ + if (eof) { + PyErr_SetString(PyExc_EOFError, "EOF read where not expected"); + } + else { + PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, archive); + } +} + /* read_directory(archive) -> files dict (new reference) @@ -871,20 +891,18 @@ read_directory(PyObject *archive) { PyObject *files = NULL; FILE *fp; - unsigned short flags; - short compress, time, date, name_size; - long crc, data_size, file_size, header_size; - Py_ssize_t file_offset, header_position, header_offset; - long l, count; - Py_ssize_t i; + unsigned short flags, compress, time, date, name_size; + unsigned int crc, data_size, file_size, header_size, header_offset; + unsigned long file_offset, header_position; + unsigned long arc_offset; /* Absolute offset to start of the zip-archive. */ + unsigned int count, i; + unsigned char buffer[46]; char name[MAXPATHLEN + 5]; - char dummy[8]; /* Buffer to read unused header values into */ PyObject *nameobj = NULL; - char *p, endof_central_dir[22]; - Py_ssize_t arc_offset; /* Absolute offset to start of the zip-archive. */ PyObject *path; const char *charset; int bootstrap; + const char *errmsg = NULL; fp = _Py_fopen_obj(archive, "rb"); if (fp == NULL) { @@ -898,91 +916,112 @@ read_directory(PyObject *archive) } if (fseek(fp, -22, SEEK_END) == -1) { - fclose(fp); - PyErr_Format(ZipImportError, "can't read Zip file: %R", archive); - return NULL; + goto file_error; } - header_position = ftell(fp); - if (fread(endof_central_dir, 1, 22, fp) != 22) { - fclose(fp); - PyErr_Format(ZipImportError, "can't read Zip file: %R", archive); - return NULL; + header_position = (unsigned long)ftell(fp); + if (header_position == (unsigned long)-1) { + goto file_error; + } + assert(header_position <= (unsigned long)LONG_MAX); + if (fread(buffer, 1, 22, fp) != 22) { + goto file_error; } - if (get_long((unsigned char *)endof_central_dir) != 0x06054B50) { + if (get_uint32(buffer) != 0x06054B50u) { /* Bad: End of Central Dir signature */ - fclose(fp); - PyErr_Format(ZipImportError, "not a Zip file: %R", archive); - return NULL; + errmsg = "not a Zip file"; + goto invalid_header; } - header_size = get_long((unsigned char *)endof_central_dir + 12); - header_offset = get_long((unsigned char *)endof_central_dir + 16); - arc_offset = header_position - header_offset - header_size; - header_offset += arc_offset; + header_size = get_uint32(buffer + 12); + header_offset = get_uint32(buffer + 16); + if (header_position < header_size) { + errmsg = "bad central directory size"; + goto invalid_header; + } + if (header_position < header_offset) { + errmsg = "bad central directory offset"; + goto invalid_header; + } + if (header_position - header_size < header_offset) { + errmsg = "bad central directory size or offset"; + goto invalid_header; + } + header_position -= header_size; + arc_offset = header_position - header_offset; files = PyDict_New(); - if (files == NULL) + if (files == NULL) { goto error; - + } /* Start of Central Directory */ count = 0; - if (fseek(fp, header_offset, 0) == -1) + if (fseek(fp, (long)header_position, 0) == -1) { goto file_error; + } for (;;) { PyObject *t; + size_t n; int err; + n = fread(buffer, 1, 46, fp); + if (n < 4) { + goto eof_error; + } /* Start of file header */ - l = PyMarshal_ReadLongFromFile(fp); - if (l == -1 && PyErr_Occurred()) - goto error; - if (l != 0x02014B50) + if (get_uint32(buffer) != 0x02014B50u) { break; /* Bad: Central Dir File Header */ + } + if (n != 46) { + goto eof_error; + } + flags = get_uint16(buffer + 8); + compress = get_uint16(buffer + 10); + time = get_uint16(buffer + 12); + date = get_uint16(buffer + 14); + crc = get_uint32(buffer + 16); + data_size = get_uint32(buffer + 20); + file_size = get_uint32(buffer + 24); + name_size = get_uint16(buffer + 28); + header_size = (unsigned int)name_size + + get_uint16(buffer + 30) /* extra field */ + + get_uint16(buffer + 32) /* comment */; + + file_offset = get_uint32(buffer + 42); + if (file_offset > header_offset) { + errmsg = "bad local header offset"; + goto invalid_header; + } + file_offset += arc_offset; - /* On Windows, calling fseek to skip over the fields we don't use is - slower than reading the data into a dummy buffer because fseek flushes - stdio's internal buffers. See issue #8745. */ - if (fread(dummy, 1, 4, fp) != 4) /* Skip unused fields, avoid fseek */ - goto file_error; - - flags = (unsigned short)PyMarshal_ReadShortFromFile(fp); - compress = PyMarshal_ReadShortFromFile(fp); - time = PyMarshal_ReadShortFromFile(fp); - date = PyMarshal_ReadShortFromFile(fp); - crc = PyMarshal_ReadLongFromFile(fp); - data_size = PyMarshal_ReadLongFromFile(fp); - file_size = PyMarshal_ReadLongFromFile(fp); - name_size = PyMarshal_ReadShortFromFile(fp); - header_size = name_size + - PyMarshal_ReadShortFromFile(fp) + - PyMarshal_ReadShortFromFile(fp); - if (PyErr_Occurred()) - goto error; - - if (fread(dummy, 1, 8, fp) != 8) /* Skip unused fields, avoid fseek */ - goto file_error; - file_offset = PyMarshal_ReadLongFromFile(fp) + arc_offset; - if (PyErr_Occurred()) - goto error; - - if (name_size > MAXPATHLEN) + if (name_size > MAXPATHLEN) { name_size = MAXPATHLEN; - - p = name; - for (i = 0; i < (Py_ssize_t)name_size; i++) { - *p = (char)getc(fp); - if (*p == '/') - *p = SEP; - p++; } - *p = 0; /* Add terminating null byte */ - for (; i < header_size; i++) /* Skip the rest of the header */ - if(getc(fp) == EOF) /* Avoid fseek */ + if (fread(name, 1, name_size, fp) != name_size) { + goto file_error; + } + name[name_size] = '\0'; /* Add terminating null byte */ + if (SEP != '/') { + for (i = 0; i < name_size; i++) { + if (name[i] == '/') { + name[i] = SEP; + } + } + } + /* Skip the rest of the header. + * On Windows, calling fseek to skip over the fields we don't use is + * slower than reading the data because fseek flushes stdio's + * internal buffers. See issue #8745. */ + assert(header_size <= 3*0xFFFFu); + for (i = name_size; i < header_size; i++) { + if (getc(fp) == EOF) { goto file_error; + } + } bootstrap = 0; - if (flags & 0x0800) + if (flags & 0x0800) { charset = "utf-8"; + } else if (!PyThreadState_GET()->interp->codecs_initialized) { /* During bootstrap, we may need to load the encodings package from a ZIP file. But the cp437 encoding is implemented @@ -993,44 +1032,59 @@ read_directory(PyObject *archive) charset = "ascii"; bootstrap = 1; } - else + else { charset = "cp437"; + } nameobj = PyUnicode_Decode(name, name_size, charset, NULL); if (nameobj == NULL) { - if (bootstrap) + if (bootstrap) { PyErr_Format(PyExc_NotImplementedError, "bootstrap issue: python%i%i.zip contains non-ASCII " "filenames without the unicode flag", PY_MAJOR_VERSION, PY_MINOR_VERSION); + } goto error; } - if (PyUnicode_READY(nameobj) == -1) + if (PyUnicode_READY(nameobj) == -1) { goto error; + } path = PyUnicode_FromFormat("%U%c%U", archive, SEP, nameobj); - if (path == NULL) + if (path == NULL) { goto error; - t = Py_BuildValue("Nhllnhhl", path, compress, data_size, + } + t = Py_BuildValue("NHIIkHHI", path, compress, data_size, file_size, file_offset, time, date, crc); - if (t == NULL) + if (t == NULL) { goto error; + } err = PyDict_SetItem(files, nameobj, t); Py_CLEAR(nameobj); Py_DECREF(t); - if (err != 0) + if (err != 0) { goto error; + } count++; } fclose(fp); - if (Py_VerboseFlag) - PySys_FormatStderr("# zipimport: found %ld names in %R\n", + if (Py_VerboseFlag) { + PySys_FormatStderr("# zipimport: found %u names in %R\n", count, archive); + } return files; + +eof_error: + set_file_error(archive, !ferror(fp)); + goto error; + file_error: - fclose(fp); - Py_XDECREF(files); - Py_XDECREF(nameobj); PyErr_Format(ZipImportError, "can't read Zip file: %R", archive); - return NULL; + goto error; + +invalid_header: + assert(errmsg != NULL); + PyErr_Format(ZipImportError, "%s: %R", errmsg, archive); + goto error; + error: fclose(fp); Py_XDECREF(files); @@ -1076,17 +1130,18 @@ get_decompress_func(void) static PyObject * get_data(PyObject *archive, PyObject *toc_entry) { - PyObject *raw_data, *data = NULL, *decompress; + PyObject *raw_data = NULL, *data, *decompress; char *buf; FILE *fp; - int err; - Py_ssize_t bytes_read = 0; - long l; PyObject *datapath; - long compress, data_size, file_size, file_offset, bytes_size; - long time, date, crc; - - if (!PyArg_ParseTuple(toc_entry, "Olllllll", &datapath, &compress, + unsigned short compress, time, date; + unsigned int crc; + Py_ssize_t data_size, file_size, bytes_size; + long file_offset, header_size; + unsigned char buffer[30]; + const char *errmsg = NULL; + + if (!PyArg_ParseTuple(toc_entry, "OHnnlHHI", &datapath, &compress, &data_size, &file_size, &file_offset, &time, &date, &crc)) { return NULL; @@ -1097,39 +1152,30 @@ get_data(PyObject *archive, PyObject *toc_entry) } fp = _Py_fopen_obj(archive, "rb"); - if (!fp) + if (!fp) { return NULL; - + } /* Check to make sure the local file header is correct */ if (fseek(fp, file_offset, 0) == -1) { - fclose(fp); - PyErr_Format(ZipImportError, "can't read Zip file: %R", archive); - return NULL; + goto file_error; } - - l = PyMarshal_ReadLongFromFile(fp); - if (l != 0x04034B50) { - /* Bad: Local File Header */ - if (!PyErr_Occurred()) - PyErr_Format(ZipImportError, - "bad local file header in %U", - archive); - fclose(fp); - return NULL; + if (fread(buffer, 1, 30, fp) != 30) { + goto eof_error; } - if (fseek(fp, file_offset + 26, 0) == -1) { - fclose(fp); - PyErr_Format(ZipImportError, "can't read Zip file: %R", archive); - return NULL; + if (get_uint32(buffer) != 0x04034B50u) { + /* Bad: Local File Header */ + errmsg = "bad local file header"; + goto invalid_header; } - l = 30 + PyMarshal_ReadShortFromFile(fp) + - PyMarshal_ReadShortFromFile(fp); /* local header size */ - if (PyErr_Occurred()) { - fclose(fp); - return NULL; + header_size = (unsigned int)30 + + get_uint16(buffer + 26) /* file name */ + + get_uint16(buffer + 28) /* extra field */; + if (file_offset > LONG_MAX - header_size) { + errmsg = "bad local file header size"; + goto invalid_header; } - file_offset += l; /* Start of file data */ + file_offset += header_size; /* Start of file data */ if (data_size > LONG_MAX - 1) { fclose(fp); @@ -1137,33 +1183,27 @@ get_data(PyObject *archive, PyObject *toc_entry) return NULL; } bytes_size = compress == 0 ? data_size : data_size + 1; - if (bytes_size == 0) + if (bytes_size == 0) { bytes_size++; + } raw_data = PyBytes_FromStringAndSize((char *)NULL, bytes_size); - if (raw_data == NULL) { - fclose(fp); - return NULL; + goto error; } buf = PyBytes_AsString(raw_data); - err = fseek(fp, file_offset, 0); - if (err == 0) { - bytes_read = fread(buf, 1, data_size, fp); - } else { - fclose(fp); - Py_DECREF(raw_data); - PyErr_Format(ZipImportError, "can't read Zip file: %R", archive); - return NULL; + if (fseek(fp, file_offset, 0) == -1) { + goto file_error; } - fclose(fp); - if (err || bytes_read != data_size) { + if (fread(buf, 1, data_size, fp) != (size_t)data_size) { PyErr_SetString(PyExc_IOError, "zipimport: can't read data"); - Py_DECREF(raw_data); - return NULL; + goto error; } + fclose(fp); + fp = NULL; + if (compress != 0) { buf[data_size] = 'Z'; /* saw this in zipfile.py */ data_size++; @@ -1186,9 +1226,28 @@ get_data(PyObject *archive, PyObject *toc_entry) } data = PyObject_CallFunction(decompress, "Oi", raw_data, -15); Py_DECREF(decompress); -error: Py_DECREF(raw_data); return data; + +eof_error: + set_file_error(archive, !ferror(fp)); + goto error; + +file_error: + PyErr_Format(ZipImportError, "can't read Zip file: %R", archive); + goto error; + +invalid_header: + assert(errmsg != NULL); + PyErr_Format(ZipImportError, "%s: %R", errmsg, archive); + goto error; + +error: + if (fp != NULL) { + fclose(fp); + } + Py_XDECREF(raw_data); + return NULL; } /* Lenient date/time comparison function. The precision of the mtime @@ -1213,37 +1272,39 @@ static PyObject * unmarshal_code(PyObject *pathname, PyObject *data, time_t mtime) { PyObject *code; - char *buf = PyBytes_AsString(data); + unsigned char *buf = (unsigned char *)PyBytes_AsString(data); Py_ssize_t size = PyBytes_Size(data); - if (size <= 9) { + if (size < 12) { PyErr_SetString(ZipImportError, "bad pyc data"); return NULL; } - if (get_long((unsigned char *)buf) != PyImport_GetMagicNumber()) { - if (Py_VerboseFlag) + if (get_uint32(buf) != (unsigned int)PyImport_GetMagicNumber()) { + if (Py_VerboseFlag) { PySys_FormatStderr("# %R has bad magic\n", pathname); + } Py_INCREF(Py_None); return Py_None; /* signal caller to try alternative */ } - if (mtime != 0 && !eq_mtime(get_long((unsigned char *)buf + 4), - mtime)) { - if (Py_VerboseFlag) + if (mtime != 0 && !eq_mtime(get_uint32(buf + 4), mtime)) { + if (Py_VerboseFlag) { PySys_FormatStderr("# %R has bad mtime\n", pathname); + } Py_INCREF(Py_None); return Py_None; /* signal caller to try alternative */ } /* XXX the pyc's size field is ignored; timestamp collisions are probably unimportant with zip files. */ - code = PyMarshal_ReadObjectFromString(buf + 12, size - 12); - if (code == NULL) + code = PyMarshal_ReadObjectFromString((char *)buf + 12, size - 12); + if (code == NULL) { return NULL; + } if (!PyCode_Check(code)) { Py_DECREF(code); PyErr_Format(PyExc_TypeError, -- cgit v1.2.1 From a0630fd797a71780094d01ac242e64d9679be84a Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 1 Feb 2016 21:19:22 -0800 Subject: Issue #26194: Inserting into a full deque to raise an IndexError --- Modules/_collectionsmodule.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index b9c4f3b926..10fbcfe6b9 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -973,16 +973,13 @@ deque_insert(dequeobject *deque, PyObject *args) Py_ssize_t index; Py_ssize_t n = Py_SIZE(deque); PyObject *value; - PyObject *oldvalue; PyObject *rv; if (!PyArg_ParseTuple(args, "nO:insert", &index, &value)) return NULL; if (deque->maxlen == Py_SIZE(deque)) { - if (index >= deque->maxlen || Py_SIZE(deque) == 0) - Py_RETURN_NONE; - oldvalue = deque_pop(deque, NULL); - Py_DECREF(oldvalue); + PyErr_SetString(PyExc_IndexError, "deque already at its maximum size"); + return NULL; } if (index >= n) return deque_append(deque, value); -- cgit v1.2.1 From 47714719f2002322524845f8c7d5c347c6e2d7cc Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 1 Feb 2016 21:21:19 -0800 Subject: merge --- Modules/_collectionsmodule.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 69acc6465e..479b0525a6 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1085,16 +1085,13 @@ deque_insert(dequeobject *deque, PyObject *args) Py_ssize_t index; Py_ssize_t n = Py_SIZE(deque); PyObject *value; - PyObject *oldvalue; PyObject *rv; if (!PyArg_ParseTuple(args, "nO:insert", &index, &value)) return NULL; if (deque->maxlen == Py_SIZE(deque)) { - if (index >= deque->maxlen || Py_SIZE(deque) == 0) - Py_RETURN_NONE; - oldvalue = deque_pop(deque, NULL); - Py_DECREF(oldvalue); + PyErr_SetString(PyExc_IndexError, "deque already at its maximum size"); + return NULL; } if (index >= n) return deque_append(deque, value); -- cgit v1.2.1 From 56d6c1809d54ce62235d85e8572e638347736555 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 2 Feb 2016 18:45:17 +0200 Subject: Issue #25945: Fixed bugs in functools.partial. Fixed a crash when unpickle the functools.partial object with wrong state. Fixed a leak in failed functools.partial constructor. "args" and "keywords" attributes of functools.partial have now always types tuple and dict correspondingly. --- Modules/_functoolsmodule.c | 128 ++++++++++++++++++++++++--------------------- 1 file changed, 68 insertions(+), 60 deletions(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 035d3d9c59..8da5eb374a 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -34,7 +34,7 @@ partial_new(PyTypeObject *type, PyObject *args, PyObject *kw) return NULL; } - pargs = pkw = Py_None; + pargs = pkw = NULL; func = PyTuple_GET_ITEM(args, 0); if (Py_TYPE(func) == &partial_type && type == &partial_type) { partialobject *part = (partialobject *)func; @@ -42,6 +42,8 @@ partial_new(PyTypeObject *type, PyObject *args, PyObject *kw) pargs = part->args; pkw = part->kw; func = part->fn; + assert(PyTuple_Check(pargs)); + assert(PyDict_Check(pkw)); } } if (!PyCallable_Check(func)) { @@ -60,12 +62,10 @@ partial_new(PyTypeObject *type, PyObject *args, PyObject *kw) nargs = PyTuple_GetSlice(args, 1, PY_SSIZE_T_MAX); if (nargs == NULL) { - pto->args = NULL; - pto->kw = NULL; Py_DECREF(pto); return NULL; } - if (pargs == Py_None || PyTuple_GET_SIZE(pargs) == 0) { + if (pargs == NULL || PyTuple_GET_SIZE(pargs) == 0) { pto->args = nargs; Py_INCREF(nargs); } @@ -76,47 +76,36 @@ partial_new(PyTypeObject *type, PyObject *args, PyObject *kw) else { pto->args = PySequence_Concat(pargs, nargs); if (pto->args == NULL) { - pto->kw = NULL; + Py_DECREF(nargs); Py_DECREF(pto); return NULL; } + assert(PyTuple_Check(pto->args)); } Py_DECREF(nargs); - if (kw != NULL) { - if (pkw == Py_None) { - pto->kw = PyDict_Copy(kw); + if (pkw == NULL || PyDict_Size(pkw) == 0) { + if (kw == NULL) { + pto->kw = PyDict_New(); } else { - pto->kw = PyDict_Copy(pkw); - if (pto->kw != NULL) { - if (PyDict_Merge(pto->kw, kw, 1) != 0) { - Py_DECREF(pto); - return NULL; - } - } - } - if (pto->kw == NULL) { - Py_DECREF(pto); - return NULL; + Py_INCREF(kw); + pto->kw = kw; } } else { - if (pkw == Py_None) { - pto->kw = PyDict_New(); - if (pto->kw == NULL) { + pto->kw = PyDict_Copy(pkw); + if (kw != NULL && pto->kw != NULL) { + if (PyDict_Merge(pto->kw, kw, 1) != 0) { Py_DECREF(pto); return NULL; } } - else { - pto->kw = pkw; - Py_INCREF(pkw); - } } - - pto->weakreflist = NULL; - pto->dict = NULL; + if (pto->kw == NULL) { + Py_DECREF(pto); + return NULL; + } return (PyObject *)pto; } @@ -138,11 +127,11 @@ static PyObject * partial_call(partialobject *pto, PyObject *args, PyObject *kw) { PyObject *ret; - PyObject *argappl = NULL, *kwappl = NULL; + PyObject *argappl, *kwappl; assert (PyCallable_Check(pto->fn)); assert (PyTuple_Check(pto->args)); - assert (pto->kw == Py_None || PyDict_Check(pto->kw)); + assert (PyDict_Check(pto->kw)); if (PyTuple_GET_SIZE(pto->args) == 0) { argappl = args; @@ -154,11 +143,12 @@ partial_call(partialobject *pto, PyObject *args, PyObject *kw) argappl = PySequence_Concat(pto->args, args); if (argappl == NULL) return NULL; + assert(PyTuple_Check(argappl)); } - if (pto->kw == Py_None) { + if (PyDict_Size(pto->kw) == 0) { kwappl = kw; - Py_XINCREF(kw); + Py_XINCREF(kwappl); } else { kwappl = PyDict_Copy(pto->kw); if (kwappl == NULL) { @@ -217,6 +207,7 @@ partial_repr(partialobject *pto) PyObject *arglist; PyObject *tmp; Py_ssize_t i, n; + PyObject *key, *value; arglist = PyUnicode_FromString(""); if (arglist == NULL) { @@ -234,17 +225,14 @@ partial_repr(partialobject *pto) arglist = tmp; } /* Pack keyword arguments */ - assert (pto->kw == Py_None || PyDict_Check(pto->kw)); - if (pto->kw != Py_None) { - PyObject *key, *value; - for (i = 0; PyDict_Next(pto->kw, &i, &key, &value);) { - tmp = PyUnicode_FromFormat("%U, %U=%R", arglist, - key, value); - Py_DECREF(arglist); - if (tmp == NULL) - return NULL; - arglist = tmp; - } + assert (PyDict_Check(pto->kw)); + for (i = 0; PyDict_Next(pto->kw, &i, &key, &value);) { + tmp = PyUnicode_FromFormat("%U, %U=%R", arglist, + key, value); + Py_DECREF(arglist); + if (tmp == NULL) + return NULL; + arglist = tmp; } result = PyUnicode_FromFormat("%s(%R%U)", Py_TYPE(pto)->tp_name, pto->fn, arglist); @@ -271,25 +259,45 @@ static PyObject * partial_setstate(partialobject *pto, PyObject *state) { PyObject *fn, *fnargs, *kw, *dict; - if (!PyArg_ParseTuple(state, "OOOO", - &fn, &fnargs, &kw, &dict)) + + if (!PyTuple_Check(state) || + !PyArg_ParseTuple(state, "OOOO", &fn, &fnargs, &kw, &dict) || + !PyCallable_Check(fn) || + !PyTuple_Check(fnargs) || + (kw != Py_None && !PyDict_Check(kw))) + { + PyErr_SetString(PyExc_TypeError, "invalid partial state"); return NULL; - Py_XDECREF(pto->fn); - Py_XDECREF(pto->args); - Py_XDECREF(pto->kw); - Py_XDECREF(pto->dict); - pto->fn = fn; - pto->args = fnargs; - pto->kw = kw; - if (dict != Py_None) { - pto->dict = dict; - Py_INCREF(dict); - } else { - pto->dict = NULL; } + + if(!PyTuple_CheckExact(fnargs)) + fnargs = PySequence_Tuple(fnargs); + else + Py_INCREF(fnargs); + if (fnargs == NULL) + return NULL; + + if (kw == Py_None) + kw = PyDict_New(); + else if(!PyDict_CheckExact(kw)) + kw = PyDict_Copy(kw); + else + Py_INCREF(kw); + if (kw == NULL) { + Py_DECREF(fnargs); + return NULL; + } + Py_INCREF(fn); - Py_INCREF(fnargs); - Py_INCREF(kw); + if (dict == Py_None) + dict = NULL; + else + Py_INCREF(dict); + + Py_SETREF(pto->fn, fn); + Py_SETREF(pto->args, fnargs); + Py_SETREF(pto->kw, kw); + Py_SETREF(pto->dict, dict); Py_RETURN_NONE; } -- cgit v1.2.1 From 341946f1f841b074653b457740671987c5ba1e0e Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Wed, 3 Feb 2016 07:06:33 +0000 Subject: Issue #26244: Clarify default zlib compression level in documentation Based on patch by Aviv Palivoda. --- Modules/clinic/zlibmodule.c.h | 7 ++++--- Modules/zlibmodule.c | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index c5cdf427b5..2d75bc912e 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -89,8 +89,9 @@ PyDoc_STRVAR(zlib_compressobj__doc__, "Return a compressor object.\n" "\n" " level\n" -" The compression level (an integer in the range 0-9; default is 6).\n" -" Higher compression levels are slower, but produce smaller results.\n" +" The compression level (an integer in the range 0-9 or -1; default is\n" +" currently equivalent to 6). Higher compression levels are slower,\n" +" but produce smaller results.\n" " method\n" " The compression algorithm. If given, this must be DEFLATED.\n" " wbits\n" @@ -438,4 +439,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=7734aec079550bc8 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=cf81e1deae3af0ce input=a9049054013a1b77]*/ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index d5a6e53ea5..11a34bbc62 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -390,8 +390,9 @@ zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, zlib.compressobj level: int(c_default="Z_DEFAULT_COMPRESSION") = Z_DEFAULT_COMPRESSION - The compression level (an integer in the range 0-9; default is 6). - Higher compression levels are slower, but produce smaller results. + The compression level (an integer in the range 0-9 or -1; default is + currently equivalent to 6). Higher compression levels are slower, + but produce smaller results. method: int(c_default="DEFLATED") = DEFLATED The compression algorithm. If given, this must be DEFLATED. wbits: int(c_default="MAX_WBITS") = MAX_WBITS @@ -413,7 +414,7 @@ Return a compressor object. static PyObject * zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict) -/*[clinic end generated code: output=2949bbb9a5723ccd input=b034847f8821f6af]*/ +/*[clinic end generated code: output=2949bbb9a5723ccd input=de2ffab6e910cd8b]*/ { compobject *self = NULL; int err; -- cgit v1.2.1 From 3fae052a3dc641f02460201f8f338befe037484b Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 8 Feb 2016 17:56:36 +0200 Subject: Issue #26117: The os.scandir() iterator now closes file descriptor not only when the iteration is finished, but when it was failed with error. --- Modules/posixmodule.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e4b27a79c0..710bcde812 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -11942,12 +11942,11 @@ ScandirIterator_iternext(ScandirIterator *iterator) { WIN32_FIND_DATAW *file_data = &iterator->file_data; BOOL success; + PyObject *entry; /* Happens if the iterator is iterated twice */ - if (iterator->handle == INVALID_HANDLE_VALUE) { - PyErr_SetNone(PyExc_StopIteration); + if (iterator->handle == INVALID_HANDLE_VALUE) return NULL; - } while (1) { if (!iterator->first_time) { @@ -11955,9 +11954,9 @@ ScandirIterator_iternext(ScandirIterator *iterator) success = FindNextFileW(iterator->handle, file_data); Py_END_ALLOW_THREADS if (!success) { + /* Error or no more files */ if (GetLastError() != ERROR_NO_MORE_FILES) - return path_error(&iterator->path); - /* No more files found in directory, stop iterating */ + path_error(&iterator->path); break; } } @@ -11965,15 +11964,18 @@ ScandirIterator_iternext(ScandirIterator *iterator) /* Skip over . and .. */ if (wcscmp(file_data->cFileName, L".") != 0 && - wcscmp(file_data->cFileName, L"..") != 0) - return DirEntry_from_find_data(&iterator->path, file_data); + wcscmp(file_data->cFileName, L"..") != 0) { + entry = DirEntry_from_find_data(&iterator->path, file_data); + if (!entry) + break; + return entry; + } /* Loop till we get a non-dot directory or finish iterating */ } + /* Error or no more files */ ScandirIterator_close(iterator); - - PyErr_SetNone(PyExc_StopIteration); return NULL; } @@ -11998,12 +12000,11 @@ ScandirIterator_iternext(ScandirIterator *iterator) struct dirent *direntp; Py_ssize_t name_len; int is_dot; + PyObject *entry; /* Happens if the iterator is iterated twice */ - if (!iterator->dirp) { - PyErr_SetNone(PyExc_StopIteration); + if (!iterator->dirp) return NULL; - } while (1) { errno = 0; @@ -12012,9 +12013,9 @@ ScandirIterator_iternext(ScandirIterator *iterator) Py_END_ALLOW_THREADS if (!direntp) { + /* Error or no more files */ if (errno != 0) - return path_error(&iterator->path); - /* No more files found in directory, stop iterating */ + path_error(&iterator->path); break; } @@ -12023,20 +12024,22 @@ ScandirIterator_iternext(ScandirIterator *iterator) is_dot = direntp->d_name[0] == '.' && (name_len == 1 || (direntp->d_name[1] == '.' && name_len == 2)); if (!is_dot) { - return DirEntry_from_posix_info(&iterator->path, direntp->d_name, + entry = DirEntry_from_posix_info(&iterator->path, direntp->d_name, name_len, direntp->d_ino #ifdef HAVE_DIRENT_D_TYPE , direntp->d_type #endif ); + if (!entry) + break; + return entry; } /* Loop till we get a non-dot directory or finish iterating */ } + /* Error or no more files */ ScandirIterator_close(iterator); - - PyErr_SetNone(PyExc_StopIteration); return NULL; } -- cgit v1.2.1 From 3533270c8108c1b8e0e5af6b3eae85c14c79e1b2 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 8 Feb 2016 20:34:49 -0800 Subject: Issue #26200: The SETREF macro adds unnecessary work in some cases. --- Modules/_collectionsmodule.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 479b0525a6..0b7a88f974 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1218,6 +1218,7 @@ deque_del_item(dequeobject *deque, Py_ssize_t i) static int deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) { + PyObject *old_value; block *b; Py_ssize_t n, len=Py_SIZE(deque), halflen=(len+1)>>1, index=i; @@ -1246,7 +1247,9 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) b = b->leftlink; } Py_INCREF(v); - Py_SETREF(b->data[i], v); + old_value = b->data[i]; + b->data[i] = v; + Py_DECREF(old_value); return 0; } -- cgit v1.2.1 From fce7cdddcc3c287e649b3d1f555e5ef38de38c8c Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Wed, 10 Feb 2016 10:06:36 +0000 Subject: Issue #26243: zlib.compress() keyword argument support by Aviv Palivoda --- Modules/clinic/zlibmodule.c.h | 27 ++++++++++++++------------- Modules/zlibmodule.c | 17 ++++++++--------- 2 files changed, 22 insertions(+), 22 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index 2d75bc912e..d92f88b231 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -3,38 +3,39 @@ preserve [clinic start generated code]*/ PyDoc_STRVAR(zlib_compress__doc__, -"compress($module, bytes, level=Z_DEFAULT_COMPRESSION, /)\n" +"compress($module, /, data, level=Z_DEFAULT_COMPRESSION)\n" "--\n" "\n" "Returns a bytes object containing compressed data.\n" "\n" -" bytes\n" +" data\n" " Binary data to be compressed.\n" " level\n" " Compression level, in 0-9."); #define ZLIB_COMPRESS_METHODDEF \ - {"compress", (PyCFunction)zlib_compress, METH_VARARGS, zlib_compress__doc__}, + {"compress", (PyCFunction)zlib_compress, METH_VARARGS|METH_KEYWORDS, zlib_compress__doc__}, static PyObject * -zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int level); +zlib_compress_impl(PyModuleDef *module, Py_buffer *data, int level); static PyObject * -zlib_compress(PyModuleDef *module, PyObject *args) +zlib_compress(PyModuleDef *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - Py_buffer bytes = {NULL, NULL}; + static char *_keywords[] = {"data", "level", NULL}; + Py_buffer data = {NULL, NULL}; int level = Z_DEFAULT_COMPRESSION; - if (!PyArg_ParseTuple(args, "y*|i:compress", - &bytes, &level)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|i:compress", _keywords, + &data, &level)) goto exit; - return_value = zlib_compress_impl(module, &bytes, level); + return_value = zlib_compress_impl(module, &data, level); exit: - /* Cleanup for bytes */ - if (bytes.obj) - PyBuffer_Release(&bytes); + /* Cleanup for data */ + if (data.obj) + PyBuffer_Release(&data); return return_value; } @@ -439,4 +440,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=cf81e1deae3af0ce input=a9049054013a1b77]*/ +/*[clinic end generated code: output=3c96b58b923c1273 input=a9049054013a1b77]*/ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 5cdab452b8..8ddc774097 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -137,18 +137,17 @@ PyZlib_Free(voidpf ctx, void *ptr) /*[clinic input] zlib.compress - bytes: Py_buffer + data: Py_buffer Binary data to be compressed. level: int(c_default="Z_DEFAULT_COMPRESSION") = Z_DEFAULT_COMPRESSION - Compression level, in 0-9. - / + Compression level, in 0-9 or -1. Returns a bytes object containing compressed data. [clinic start generated code]*/ static PyObject * -zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int level) -/*[clinic end generated code: output=5d7dd4588788efd3 input=be3abe9934bda4b3]*/ +zlib_compress_impl(PyModuleDef *module, Py_buffer *data, int level) +/*[clinic end generated code: output=1b97589132b203b4 input=671c615a4b2267da]*/ { PyObject *ReturnVal = NULL; Byte *input, *output = NULL; @@ -156,13 +155,13 @@ zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int level) int err; z_stream zst; - if ((size_t)bytes->len > UINT_MAX) { + if ((size_t)data->len > UINT_MAX) { PyErr_SetString(PyExc_OverflowError, "Size does not fit in an unsigned int"); goto error; } - input = bytes->buf; - length = (unsigned int)bytes->len; + input = data->buf; + length = (unsigned int)data->len; zst.avail_out = length + length/1000 + 12 + 1; @@ -1323,7 +1322,7 @@ PyDoc_STRVAR(zlib_module_documentation, "zlib library, which is based on GNU zip.\n" "\n" "adler32(string[, start]) -- Compute an Adler-32 checksum.\n" -"compress(string[, level]) -- Compress string, with compression level in 0-9.\n" +"compress(data[, level]) -- Compress data, with compression level 0-9 or -1.\n" "compressobj([level[, ...]]) -- Return a compressor object.\n" "crc32(string[, start]) -- Compute a CRC-32 checksum.\n" "decompress(string,[wbits],[bufsize]) -- Decompresses a compressed string.\n" -- cgit v1.2.1 From 14661bd9745f73207ac3b2823a2a19372b0f9422 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Wed, 10 Feb 2016 10:45:54 +0000 Subject: Issue 26243: Forgot to update zlib doc strings in Argument Clinic --- Modules/clinic/zlibmodule.c.h | 4 ++-- Modules/zlibmodule.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index d92f88b231..222cb6779a 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -11,7 +11,7 @@ PyDoc_STRVAR(zlib_compress__doc__, " data\n" " Binary data to be compressed.\n" " level\n" -" Compression level, in 0-9."); +" Compression level, in 0-9 or -1."); #define ZLIB_COMPRESS_METHODDEF \ {"compress", (PyCFunction)zlib_compress, METH_VARARGS|METH_KEYWORDS, zlib_compress__doc__}, @@ -440,4 +440,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=3c96b58b923c1273 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e6f3b79e051ecc35 input=a9049054013a1b77]*/ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 8ddc774097..db3d8c9e1e 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -147,7 +147,7 @@ Returns a bytes object containing compressed data. static PyObject * zlib_compress_impl(PyModuleDef *module, Py_buffer *data, int level) -/*[clinic end generated code: output=1b97589132b203b4 input=671c615a4b2267da]*/ +/*[clinic end generated code: output=1b97589132b203b4 input=abed30f4fa14e213]*/ { PyObject *ReturnVal = NULL; Byte *input, *output = NULL; -- cgit v1.2.1 From 4e214c5025aeeeb69562dd0c46ae0918881d0bae Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Wed, 10 Feb 2016 05:44:01 +0000 Subject: Issue #26304: Change "allows to " to "allows ing" or similar The original form is incorrect grammar and feels awkward, even though the meaning is clear. --- Modules/_ctypes/_ctypes.c | 2 +- Modules/_ctypes/libffi/m4/libtool.m4 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 5cf2b8bb67..ff1827ca19 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3402,7 +3402,7 @@ PyCFuncPtr_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return NULL; } - /* XXX XXX This would allow to pass additional options. For COM + /* XXX XXX This would allow passing additional options. For COM method *implementations*, we would probably want different behaviour than in 'normal' callback functions: return a HRESULT if an exception occurs in the callback, and print the traceback not diff --git a/Modules/_ctypes/libffi/m4/libtool.m4 b/Modules/_ctypes/libffi/m4/libtool.m4 index 4bc6b22c80..d9cc77b840 100644 --- a/Modules/_ctypes/libffi/m4/libtool.m4 +++ b/Modules/_ctypes/libffi/m4/libtool.m4 @@ -1121,7 +1121,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES], # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. -# Allow to override them for all tags through lt_cv_aix_libpath. +# Allow overriding them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then -- cgit v1.2.1 From 8ffbed9e0d231761a83ffe3547d4e2d28291782e Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 11 Feb 2016 13:21:30 +0200 Subject: Issue #25994: Added the close() method and the support of the context manager protocol for the os.scandir() iterator. --- Modules/posixmodule.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 7 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 2688cbcc23..6e0081d0df 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -11937,8 +11937,14 @@ typedef struct { #ifdef MS_WINDOWS +static int +ScandirIterator_is_closed(ScandirIterator *iterator) +{ + return iterator->handle == INVALID_HANDLE_VALUE; +} + static void -ScandirIterator_close(ScandirIterator *iterator) +ScandirIterator_closedir(ScandirIterator *iterator) { if (iterator->handle == INVALID_HANDLE_VALUE) return; @@ -11956,7 +11962,7 @@ ScandirIterator_iternext(ScandirIterator *iterator) BOOL success; PyObject *entry; - /* Happens if the iterator is iterated twice */ + /* Happens if the iterator is iterated twice, or closed explicitly */ if (iterator->handle == INVALID_HANDLE_VALUE) return NULL; @@ -11987,14 +11993,20 @@ ScandirIterator_iternext(ScandirIterator *iterator) } /* Error or no more files */ - ScandirIterator_close(iterator); + ScandirIterator_closedir(iterator); return NULL; } #else /* POSIX */ +static int +ScandirIterator_is_closed(ScandirIterator *iterator) +{ + return !iterator->dirp; +} + static void -ScandirIterator_close(ScandirIterator *iterator) +ScandirIterator_closedir(ScandirIterator *iterator) { if (!iterator->dirp) return; @@ -12014,7 +12026,7 @@ ScandirIterator_iternext(ScandirIterator *iterator) int is_dot; PyObject *entry; - /* Happens if the iterator is iterated twice */ + /* Happens if the iterator is iterated twice, or closed explicitly */ if (!iterator->dirp) return NULL; @@ -12051,21 +12063,67 @@ ScandirIterator_iternext(ScandirIterator *iterator) } /* Error or no more files */ - ScandirIterator_close(iterator); + ScandirIterator_closedir(iterator); return NULL; } #endif +static PyObject * +ScandirIterator_close(ScandirIterator *self, PyObject *args) +{ + ScandirIterator_closedir(self); + Py_RETURN_NONE; +} + +static PyObject * +ScandirIterator_enter(PyObject *self, PyObject *args) +{ + Py_INCREF(self); + return self; +} + +static PyObject * +ScandirIterator_exit(ScandirIterator *self, PyObject *args) +{ + ScandirIterator_closedir(self); + Py_RETURN_NONE; +} + static void ScandirIterator_dealloc(ScandirIterator *iterator) { - ScandirIterator_close(iterator); + if (!ScandirIterator_is_closed(iterator)) { + PyObject *exc, *val, *tb; + Py_ssize_t old_refcount = Py_REFCNT(iterator); + /* Py_INCREF/Py_DECREF cannot be used, because the refcount is + * likely zero, Py_DECREF would call again the destructor. + */ + ++Py_REFCNT(iterator); + PyErr_Fetch(&exc, &val, &tb); + if (PyErr_WarnFormat(PyExc_ResourceWarning, 1, + "unclosed scandir iterator %R", iterator)) { + /* Spurious errors can appear at shutdown */ + if (PyErr_ExceptionMatches(PyExc_Warning)) + PyErr_WriteUnraisable((PyObject *) iterator); + } + PyErr_Restore(exc, val, tb); + Py_REFCNT(iterator) = old_refcount; + + ScandirIterator_closedir(iterator); + } Py_XDECREF(iterator->path.object); path_cleanup(&iterator->path); Py_TYPE(iterator)->tp_free((PyObject *)iterator); } +static PyMethodDef ScandirIterator_methods[] = { + {"__enter__", (PyCFunction)ScandirIterator_enter, METH_NOARGS}, + {"__exit__", (PyCFunction)ScandirIterator_exit, METH_VARARGS}, + {"close", (PyCFunction)ScandirIterator_close, METH_NOARGS}, + {NULL} +}; + static PyTypeObject ScandirIteratorType = { PyVarObject_HEAD_INIT(NULL, 0) MODNAME ".ScandirIterator", /* tp_name */ @@ -12095,6 +12153,7 @@ static PyTypeObject ScandirIteratorType = { 0, /* tp_weaklistoffset */ PyObject_SelfIter, /* tp_iter */ (iternextfunc)ScandirIterator_iternext, /* tp_iternext */ + ScandirIterator_methods, /* tp_methods */ }; static PyObject * -- cgit v1.2.1 From 8307da7ecea87d7dbc33c89249ccc9121eda66db Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 14 Feb 2016 01:41:35 -0800 Subject: The return type of a rich comparison is an int --- Modules/_bisectmodule.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_bisectmodule.c b/Modules/_bisectmodule.c index 02b55d1b41..22ddbf2a56 100644 --- a/Modules/_bisectmodule.c +++ b/Modules/_bisectmodule.c @@ -12,7 +12,8 @@ static Py_ssize_t internal_bisect_right(PyObject *list, PyObject *item, Py_ssize_t lo, Py_ssize_t hi) { PyObject *litem; - Py_ssize_t mid, res; + Py_ssize_t mid; + int res; if (lo < 0) { PyErr_SetString(PyExc_ValueError, "lo must be non-negative"); @@ -115,7 +116,8 @@ static Py_ssize_t internal_bisect_left(PyObject *list, PyObject *item, Py_ssize_t lo, Py_ssize_t hi) { PyObject *litem; - Py_ssize_t mid, res; + Py_ssize_t mid; + int res; if (lo < 0) { PyErr_SetString(PyExc_ValueError, "lo must be non-negative"); -- cgit v1.2.1 From d55d46b927f328ee1cba766ae2997302cf0f0e43 Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Mon, 15 Feb 2016 16:54:08 +1100 Subject: Issue #25924: Avoid unnecessary serialization of getaddrinfo(3) calls on OS X versions 10.5 or higher. Original patch by A. Jesse Jiryu Davis. --- Modules/socketmodule.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 90aa3afcc1..0b679dfaa3 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -84,6 +84,11 @@ Local naming conventions: */ #ifdef __APPLE__ +#include +/* for getaddrinfo thread safety test on old versions of OS X */ +#ifndef MAC_OS_X_VERSION_10_5 +#define MAC_OS_X_VERSION_10_5 1050 +#endif /* * inet_aton is not available on OSX 10.3, yet we want to use a binary * that was build on 10.4 or later to work on that release, weak linking @@ -184,8 +189,19 @@ if_indextoname(index) -- return the corresponding interface name\n\ #include #endif /* On systems on which getaddrinfo() is believed to not be thread-safe, - (this includes the getaddrinfo emulation) protect access with a lock. */ -#if defined(WITH_THREAD) && (defined(__APPLE__) || \ + (this includes the getaddrinfo emulation) protect access with a lock. + + getaddrinfo is thread-safe on Mac OS X 10.5 and later. Originally it was + a mix of code including an unsafe implementation from an old BSD's + libresolv. In 10.5 Apple reimplemented it as a safe IPC call to the + mDNSResponder process. 10.5 is the first be UNIX '03 certified, which + includes the requirement that getaddrinfo be thread-safe. + + See issue #25924 for details. + */ +#if defined(WITH_THREAD) && ( \ + (defined(__APPLE__) && \ + MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) || \ (defined(__FreeBSD__) && __FreeBSD_version+0 < 503000) || \ defined(__OpenBSD__) || defined(__NetBSD__) || \ !defined(HAVE_GETADDRINFO)) -- cgit v1.2.1 From b69c7f79168566f5e7b15872157cce2d0fcbbbdb Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Tue, 23 Feb 2016 22:05:29 +1100 Subject: Issue #26406: Avoid unnecessary serialization of getaddrinfo(3) calls on current versions of OpenBSD and NetBSD. Patch by A. Jesse Jiryu Davis. --- Modules/socketmodule.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 0b679dfaa3..8f571a2eb4 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -184,7 +184,7 @@ if_indextoname(index) -- return the corresponding interface name\n\ # define USE_GETHOSTBYNAME_LOCK #endif -/* To use __FreeBSD_version */ +/* To use __FreeBSD_version, __OpenBSD__, and __NetBSD_Version__ */ #ifdef HAVE_SYS_PARAM_H #include #endif @@ -195,15 +195,21 @@ if_indextoname(index) -- return the corresponding interface name\n\ a mix of code including an unsafe implementation from an old BSD's libresolv. In 10.5 Apple reimplemented it as a safe IPC call to the mDNSResponder process. 10.5 is the first be UNIX '03 certified, which - includes the requirement that getaddrinfo be thread-safe. + includes the requirement that getaddrinfo be thread-safe. See issue #25924. - See issue #25924 for details. + It's thread-safe in OpenBSD starting with 5.4, released Nov 2013: + http://www.openbsd.org/plus54.html + + It's thread-safe in NetBSD starting with 4.0, released Dec 2007: + +http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/net/getaddrinfo.c.diff?r1=1.82&r2=1.83 */ #if defined(WITH_THREAD) && ( \ (defined(__APPLE__) && \ MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) || \ (defined(__FreeBSD__) && __FreeBSD_version+0 < 503000) || \ - defined(__OpenBSD__) || defined(__NetBSD__) || \ + (defined(__OpenBSD__) && OpenBSD+0 < 201311) || \ + (defined(__NetBSD__) && __NetBSD_Version__+0 < 400000000) || \ !defined(HAVE_GETADDRINFO)) #define USE_GETADDRINFO_LOCK #endif -- cgit v1.2.1 From a49619aa51ea57bb08b98eec185f0e8cb8f9bfd2 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 2 Mar 2016 00:06:21 -0800 Subject: Put block length computations in a more logical order. --- Modules/_collectionsmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 0b7a88f974..309dfd26a9 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -589,8 +589,8 @@ deque_clear(dequeobject *deque) /* Now the old size, leftblock, and leftindex are disconnected from the empty deque and we can use them to decref the pointers. */ - itemptr = &leftblock->data[leftindex]; m = (BLOCKLEN - leftindex > n) ? n : BLOCKLEN - leftindex; + itemptr = &leftblock->data[leftindex]; limit = &leftblock->data[leftindex + m]; n -= m; while (1) { @@ -600,8 +600,8 @@ deque_clear(dequeobject *deque) CHECK_NOT_END(leftblock->rightlink); prevblock = leftblock; leftblock = leftblock->rightlink; - itemptr = leftblock->data; m = (n > BLOCKLEN) ? BLOCKLEN : n; + itemptr = leftblock->data; limit = &leftblock->data[m]; n -= m; freeblock(prevblock); -- cgit v1.2.1 From babdcb1499ab821600a0f85b83df264521dd0d7f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 2 Mar 2016 00:30:58 -0800 Subject: Factor-out common subexpression. --- Modules/_collectionsmodule.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 309dfd26a9..7dcd7e79da 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -572,9 +572,9 @@ deque_clear(dequeobject *deque) } /* Remember the old size, leftblock, and leftindex */ + n = Py_SIZE(deque); leftblock = deque->leftblock; leftindex = deque->leftindex; - n = Py_SIZE(deque); /* Set the deque to be empty using the newly allocated block */ MARK_END(b->leftlink); @@ -591,7 +591,7 @@ deque_clear(dequeobject *deque) */ m = (BLOCKLEN - leftindex > n) ? n : BLOCKLEN - leftindex; itemptr = &leftblock->data[leftindex]; - limit = &leftblock->data[leftindex + m]; + limit = itemptr + m; n -= m; while (1) { if (itemptr == limit) { @@ -602,7 +602,7 @@ deque_clear(dequeobject *deque) leftblock = leftblock->rightlink; m = (n > BLOCKLEN) ? BLOCKLEN : n; itemptr = leftblock->data; - limit = &leftblock->data[m]; + limit = itemptr + m; n -= m; freeblock(prevblock); } -- cgit v1.2.1 From 0d5c3b1f4fc9f4035ff13b7ce996da35636b7d8d Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Wed, 2 Mar 2016 19:30:18 +0200 Subject: Issue #26335: Make mmap.write() return the number of bytes written like other write methods. Patch by Jakub Stasiak. --- Modules/mmapmodule.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index bb98a99427..50cec2498d 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -389,6 +389,7 @@ mmap_write_method(mmap_object *self, PyObject *args) { Py_buffer data; + PyObject *result; CHECK_VALID(NULL); if (!PyArg_ParseTuple(args, "y*:write", &data)) @@ -406,9 +407,9 @@ mmap_write_method(mmap_object *self, } memcpy(self->data + self->pos, data.buf, data.len); self->pos = self->pos + data.len; + result = PyLong_FromSsize_t(data.len); PyBuffer_Release(&data); - Py_INCREF(Py_None); - return Py_None; + return result; } static PyObject * -- cgit v1.2.1 From a85259cfdd7021cee34ad43f45610194e5f9cf00 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 4 Mar 2016 09:55:07 -0800 Subject: More logicial order. Move space saving step to just before it is used. --- Modules/_collectionsmodule.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 7dcd7e79da..19a86d113d 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -386,6 +386,13 @@ deque_extend(dequeobject *deque, PyObject *iterable) return result; } + it = PyObject_GetIter(iterable); + if (it == NULL) + return NULL; + + if (maxlen == 0) + return consume_iterator(it); + /* Space saving heuristic. Start filling from the left */ if (Py_SIZE(deque) == 0) { assert(deque->leftblock == deque->rightblock); @@ -394,13 +401,6 @@ deque_extend(dequeobject *deque, PyObject *iterable) deque->rightindex = 0; } - it = PyObject_GetIter(iterable); - if (it == NULL) - return NULL; - - if (maxlen == 0) - return consume_iterator(it); - iternext = *Py_TYPE(it)->tp_iternext; while ((item = iternext(it)) != NULL) { if (deque_append_internal(deque, item, maxlen) < 0) { @@ -433,6 +433,13 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) return result; } + it = PyObject_GetIter(iterable); + if (it == NULL) + return NULL; + + if (maxlen == 0) + return consume_iterator(it); + /* Space saving heuristic. Start filling from the right */ if (Py_SIZE(deque) == 0) { assert(deque->leftblock == deque->rightblock); @@ -441,13 +448,6 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) deque->rightindex = BLOCKLEN - 2; } - it = PyObject_GetIter(iterable); - if (it == NULL) - return NULL; - - if (maxlen == 0) - return consume_iterator(it); - iternext = *Py_TYPE(it)->tp_iternext; while ((item = iternext(it)) != NULL) { if (deque_appendleft_internal(deque, item, maxlen) < 0) { -- cgit v1.2.1 From 142ecf137ea9872507389b5d622582c2518998c9 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 6 Mar 2016 08:55:21 +0200 Subject: Issue #26482: Allowed pickling recursive dequeues. --- Modules/_collectionsmodule.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 19a86d113d..d57f1ba55a 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1296,31 +1296,31 @@ deque_traverse(dequeobject *deque, visitproc visit, void *arg) static PyObject * deque_reduce(dequeobject *deque) { - PyObject *dict, *result, *aslist; + PyObject *dict, *it; _Py_IDENTIFIER(__dict__); dict = _PyObject_GetAttrId((PyObject *)deque, &PyId___dict__); - if (dict == NULL) + if (dict == NULL) { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) { + return NULL; + } PyErr_Clear(); - aslist = PySequence_List((PyObject *)deque); - if (aslist == NULL) { - Py_XDECREF(dict); + dict = Py_None; + Py_INCREF(dict); + } + + it = PyObject_GetIter((PyObject *)deque); + if (it == NULL) { + Py_DECREF(dict); return NULL; } - if (dict == NULL) { - if (deque->maxlen < 0) - result = Py_BuildValue("O(O)", Py_TYPE(deque), aslist); - else - result = Py_BuildValue("O(On)", Py_TYPE(deque), aslist, deque->maxlen); - } else { - if (deque->maxlen < 0) - result = Py_BuildValue("O(OO)O", Py_TYPE(deque), aslist, Py_None, dict); - else - result = Py_BuildValue("O(On)O", Py_TYPE(deque), aslist, deque->maxlen, dict); + + if (deque->maxlen < 0) { + return Py_BuildValue("O()NN", Py_TYPE(deque), dict, it); + } + else { + return Py_BuildValue("O(()n)NN", Py_TYPE(deque), deque->maxlen, dict, it); } - Py_XDECREF(dict); - Py_DECREF(aslist); - return result; } PyDoc_STRVAR(reduce_doc, "Return state information for pickling."); -- cgit v1.2.1 From afed6d6bf9f30984d875b997b6b5c2918b195f16 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 6 Mar 2016 14:00:45 +0200 Subject: Issue #25718: Fixed pickling and copying the accumulate() iterator with total is None. --- Modules/itertoolsmodule.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'Modules') diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index cac02ad75a..11ce5ea075 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -3460,6 +3460,23 @@ accumulate_next(accumulateobject *lz) static PyObject * accumulate_reduce(accumulateobject *lz) { + if (lz->total == Py_None) { + PyObject *it; + + if (PyType_Ready(&chain_type) < 0) + return NULL; + if (PyType_Ready(&islice_type) < 0) + return NULL; + it = PyObject_CallFunction((PyObject *)&chain_type, "(O)O", + lz->total, lz->it); + if (it == NULL) + return NULL; + it = PyObject_CallFunction((PyObject *)Py_TYPE(lz), "NO", + it, lz->binop ? lz->binop : Py_None); + if (it == NULL) + return NULL; + return Py_BuildValue("O(NiO)", &islice_type, it, 1, Py_None); + } return Py_BuildValue("O(OO)O", Py_TYPE(lz), lz->it, lz->binop?lz->binop:Py_None, lz->total?lz->total:Py_None); -- cgit v1.2.1 From 6f3ccfa544b05258e64a99e1104d76cf9cd1b87d Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sun, 6 Mar 2016 14:58:43 -0500 Subject: Closes #19475: Added timespec to the datetime.isoformat() method. Added an optional argument timespec to the datetime isoformat() method to choose the precision of the time component. Original patch by Alessandro Cucci. --- Modules/_datetimemodule.c | 123 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 95 insertions(+), 28 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 4c8f3f6fa2..347a9d90dc 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3608,23 +3608,56 @@ time_str(PyDateTime_Time *self) } static PyObject * -time_isoformat(PyDateTime_Time *self, PyObject *unused) +time_isoformat(PyDateTime_Time *self, PyObject *args, PyObject *kw) { char buf[100]; + char *timespec = NULL; + static char *keywords[] = {"timespec", NULL}; PyObject *result; int us = TIME_GET_MICROSECOND(self); + static char *specs[][2] = { + {"hours", "%02d"}, + {"minutes", "%02d:%02d"}, + {"seconds", "%02d:%02d:%02d"}, + {"milliseconds", "%02d:%02d:%02d.%03d"}, + {"microseconds", "%02d:%02d:%02d.%06d"}, + }; + size_t given_spec; - if (us) - result = PyUnicode_FromFormat("%02d:%02d:%02d.%06d", - TIME_GET_HOUR(self), - TIME_GET_MINUTE(self), - TIME_GET_SECOND(self), - us); - else - result = PyUnicode_FromFormat("%02d:%02d:%02d", - TIME_GET_HOUR(self), - TIME_GET_MINUTE(self), - TIME_GET_SECOND(self)); + if (!PyArg_ParseTupleAndKeywords(args, kw, "|s:isoformat", keywords, ×pec)) + return NULL; + + if (timespec == NULL || strcmp(timespec, "auto") == 0) { + if (us == 0) { + /* seconds */ + given_spec = 2; + } + else { + /* microseconds */ + given_spec = 4; + } + } + else { + for (given_spec = 0; given_spec < Py_ARRAY_LENGTH(specs); given_spec++) { + if (strcmp(timespec, specs[given_spec][0]) == 0) { + if (given_spec == 3) { + /* milliseconds */ + us = us / 1000; + } + break; + } + } + } + + if (given_spec == Py_ARRAY_LENGTH(specs)) { + PyErr_Format(PyExc_ValueError, "Unknown timespec value"); + return NULL; + } + else { + result = PyUnicode_FromFormat(specs[given_spec][1], + TIME_GET_HOUR(self), TIME_GET_MINUTE(self), + TIME_GET_SECOND(self), us); + } if (result == NULL || !HASTZINFO(self) || self->tzinfo == Py_None) return result; @@ -3845,9 +3878,10 @@ time_reduce(PyDateTime_Time *self, PyObject *arg) static PyMethodDef time_methods[] = { - {"isoformat", (PyCFunction)time_isoformat, METH_NOARGS, - PyDoc_STR("Return string in ISO 8601 format, HH:MM:SS[.mmmmmm]" - "[+HH:MM].")}, + {"isoformat", (PyCFunction)time_isoformat, METH_VARARGS | METH_KEYWORDS, + PyDoc_STR("Return string in ISO 8601 format, [HH[:MM[:SS[.mmm[uuu]]]]]" + "[+HH:MM].\n\n" + "timespec specifies what components of the time to include.\n")}, {"strftime", (PyCFunction)time_strftime, METH_VARARGS | METH_KEYWORDS, PyDoc_STR("format -> strftime() style string.")}, @@ -4476,25 +4510,55 @@ static PyObject * datetime_isoformat(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) { int sep = 'T'; - static char *keywords[] = {"sep", NULL}; + char *timespec = NULL; + static char *keywords[] = {"sep", "timespec", NULL}; char buffer[100]; - PyObject *result; + PyObject *result = NULL; int us = DATE_GET_MICROSECOND(self); + static char *specs[][2] = { + {"hours", "%04d-%02d-%02d%c%02d"}, + {"minutes", "%04d-%02d-%02d%c%02d:%02d"}, + {"seconds", "%04d-%02d-%02d%c%02d:%02d:%02d"}, + {"milliseconds", "%04d-%02d-%02d%c%02d:%02d:%02d.%03d"}, + {"microseconds", "%04d-%02d-%02d%c%02d:%02d:%02d.%06d"}, + }; + size_t given_spec; - if (!PyArg_ParseTupleAndKeywords(args, kw, "|C:isoformat", keywords, &sep)) + if (!PyArg_ParseTupleAndKeywords(args, kw, "|Cs:isoformat", keywords, &sep, ×pec)) return NULL; - if (us) - result = PyUnicode_FromFormat("%04d-%02d-%02d%c%02d:%02d:%02d.%06d", + + if (timespec == NULL || strcmp(timespec, "auto") == 0) { + if (us == 0) { + /* seconds */ + given_spec = 2; + } + else { + /* microseconds */ + given_spec = 4; + } + } + else { + for (given_spec = 0; given_spec < Py_ARRAY_LENGTH(specs); given_spec++) { + if (strcmp(timespec, specs[given_spec][0]) == 0) { + if (given_spec == 3) { + us = us / 1000; + } + break; + } + } + } + + if (given_spec == Py_ARRAY_LENGTH(specs)) { + PyErr_Format(PyExc_ValueError, "Unknown timespec value"); + return NULL; + } + else { + result = PyUnicode_FromFormat(specs[given_spec][1], GET_YEAR(self), GET_MONTH(self), GET_DAY(self), (int)sep, DATE_GET_HOUR(self), DATE_GET_MINUTE(self), DATE_GET_SECOND(self), us); - else - result = PyUnicode_FromFormat("%04d-%02d-%02d%c%02d:%02d:%02d", - GET_YEAR(self), GET_MONTH(self), - GET_DAY(self), (int)sep, - DATE_GET_HOUR(self), DATE_GET_MINUTE(self), - DATE_GET_SECOND(self)); + } if (!result || !HASTZINFO(self)) return result; @@ -5028,9 +5092,12 @@ static PyMethodDef datetime_methods[] = { {"isoformat", (PyCFunction)datetime_isoformat, METH_VARARGS | METH_KEYWORDS, PyDoc_STR("[sep] -> string in ISO 8601 format, " - "YYYY-MM-DDTHH:MM:SS[.mmmmmm][+HH:MM].\n\n" + "YYYY-MM-DDT[HH[:MM[:SS[.mmm[uuu]]]]][+HH:MM].\n" "sep is used to separate the year from the time, and " - "defaults to 'T'.")}, + "defaults to 'T'.\n" + "timespec specifies what components of the time to include" + " (allowed values are 'auto', 'hours', 'minutes', 'seconds'," + " 'milliseconds', and 'microseconds').\n")}, {"utcoffset", (PyCFunction)datetime_utcoffset, METH_NOARGS, PyDoc_STR("Return self.tzinfo.utcoffset(self).")}, -- cgit v1.2.1 From 5f6395cfb6e105e82ed84d2e2b6b9cc92cc43569 Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Mon, 7 Mar 2016 14:51:59 -0500 Subject: Issue #26505: Fix typos in getaddrinfo license text. Patch by Alex Willmer. --- Modules/getaddrinfo.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/getaddrinfo.c b/Modules/getaddrinfo.c index e2a2edf82d..d8167eaf7c 100644 --- a/Modules/getaddrinfo.c +++ b/Modules/getaddrinfo.c @@ -15,14 +15,14 @@ * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND - * GAI_ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE - * FOR GAI_ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON GAI_ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN GAI_ANY WAY + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -- cgit v1.2.1 From d2f995ca30b1a4ec4bd04857fa7d3440dd373ec6 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 14 Mar 2016 12:04:26 +0100 Subject: Add PYTHONMALLOC env var Issue #26516: * Add PYTHONMALLOC environment variable to set the Python memory allocators and/or install debug hooks. * PyMem_SetupDebugHooks() can now also be used on Python compiled in release mode. * The PYTHONMALLOCSTATS environment variable can now also be used on Python compiled in release mode. It now has no effect if set to an empty string. * In debug mode, debug hooks are now also installed on Python memory allocators when Python is configured without pymalloc. --- Modules/_testcapimodule.c | 29 +++++++++++++++++++++++++++++ Modules/main.c | 25 +++++++++++++++++-------- 2 files changed, 46 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index a21a584db6..babffc4d67 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3616,6 +3616,33 @@ get_recursion_depth(PyObject *self, PyObject *args) return PyLong_FromLong(tstate->recursion_depth - 1); } +static PyObject* +pymem_buffer_overflow(PyObject *self, PyObject *args) +{ + char *buffer; + + /* Deliberate buffer overflow to check that PyMem_Free() detects + the overflow when debug hooks are installed. */ + buffer = PyMem_Malloc(16); + buffer[16] = 'x'; + PyMem_Free(buffer); + + Py_RETURN_NONE; +} + +static PyObject* +pymem_api_misuse(PyObject *self, PyObject *args) +{ + char *buffer; + + /* Deliberate misusage of Python allocators: + allococate with PyMem but release with PyMem_Raw. */ + buffer = PyMem_Malloc(16); + PyMem_RawFree(buffer); + + Py_RETURN_NONE; +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3798,6 +3825,8 @@ static PyMethodDef TestMethods[] = { {"PyTime_AsMilliseconds", test_PyTime_AsMilliseconds, METH_VARARGS}, {"PyTime_AsMicroseconds", test_PyTime_AsMicroseconds, METH_VARARGS}, {"get_recursion_depth", get_recursion_depth, METH_NOARGS}, + {"pymem_buffer_overflow", pymem_buffer_overflow, METH_NOARGS}, + {"pymem_api_misuse", pymem_api_misuse, METH_NOARGS}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/main.c b/Modules/main.c index ee129a50f5..b6dcdd0a30 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -93,14 +93,15 @@ static const char usage_5[] = " The default module search path uses %s.\n" "PYTHONCASEOK : ignore case in 'import' statements (Windows).\n" "PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n" -"PYTHONFAULTHANDLER: dump the Python traceback on fatal errors.\n\ -"; -static const char usage_6[] = "\ -PYTHONHASHSEED: if this variable is set to 'random', a random value is used\n\ - to seed the hashes of str, bytes and datetime objects. It can also be\n\ - set to an integer in the range [0,4294967295] to get hash values with a\n\ - predictable seed.\n\ -"; +"PYTHONFAULTHANDLER: dump the Python traceback on fatal errors.\n"; +static const char usage_6[] = +"PYTHONHASHSEED: if this variable is set to 'random', a random value is used\n" +" to seed the hashes of str, bytes and datetime objects. It can also be\n" +" set to an integer in the range [0,4294967295] to get hash values with a\n" +" predictable seed.\n" +"PYTHONMALLOC: set the Python memory allocators and/or install debug hooks\n" +" on Python memory allocators. Use PYTHONMALLOC=debug to install debug\n" +" hooks.\n"; static int usage(int exitcode, const wchar_t* program) @@ -341,6 +342,7 @@ Py_Main(int argc, wchar_t **argv) int help = 0; int version = 0; int saw_unbuffered_flag = 0; + char *opt; PyCompilerFlags cf; PyObject *warning_option = NULL; PyObject *warning_options = NULL; @@ -365,6 +367,13 @@ Py_Main(int argc, wchar_t **argv) } } + opt = Py_GETENV("PYTHONMALLOC"); + if (_PyMem_SetupAllocators(opt) < 0) { + fprintf(stderr, + "Error in PYTHONMALLOC: unknown allocator \"%s\"!\n", opt); + exit(1); + } + Py_HashRandomizationFlag = 1; _PyRandom_Init(); -- cgit v1.2.1 From 3c03d223b7807da99c0a4e03add5c9867283d0ca Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 14 Mar 2016 17:01:32 +0100 Subject: Issue #26558: Remove useless check in tracemalloc The first instruction of tracemalloc_add_trace() is traceback_new() which already checks the GIL. --- Modules/_tracemalloc.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 226a473b4c..d62e68254d 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -439,10 +439,6 @@ tracemalloc_add_trace(void *ptr, size_t size) trace_t trace; int res; -#ifdef WITH_THREAD - assert(PyGILState_Check()); -#endif - traceback = traceback_new(); if (traceback == NULL) return -1; -- cgit v1.2.1 From f77c9b6cdd2ce6984751d400bfe4ebf7e01fce8e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 14 Mar 2016 18:07:53 +0100 Subject: posix_getcwd(): limit to INT_MAX on Windows It's more to fix a conversion warning during compilation, I don't think that Windows support current working directory larger than 2 GB ... --- Modules/posixmodule.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 6e0081d0df..7e8987845b 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -3320,12 +3320,22 @@ posix_getcwd(int use_bytes) Py_BEGIN_ALLOW_THREADS do { buflen += chunk; +#ifdef MS_WINDOWS + if (buflen > INT_MAX) { + PyErr_NoMemory(); + break; + } +#endif tmpbuf = PyMem_RawRealloc(buf, buflen); if (tmpbuf == NULL) break; buf = tmpbuf; +#ifdef MS_WINDOWS + cwd = getcwd(buf, (int)buflen); +#else cwd = getcwd(buf, buflen); +#endif } while (cwd == NULL && errno == ERANGE); Py_END_ALLOW_THREADS -- cgit v1.2.1 From 10fa46499772b4689712a4d59f1bcbcdeab5d1a3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 14 Mar 2016 18:09:39 +0100 Subject: _pickle: Fix load_counted_tuple(), use Py_ssize_t for size Fix a warning on Windows 64-bit. --- Modules/_pickle.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index bb3330addb..5c3530b962 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -5056,7 +5056,7 @@ load_counted_binunicode(UnpicklerObject *self, int nbytes) } static int -load_counted_tuple(UnpicklerObject *self, int len) +load_counted_tuple(UnpicklerObject *self, Py_ssize_t len) { PyObject *tuple; -- cgit v1.2.1 From 8acb383a2d2cbdeb6885ba3cdf09d602f4abb041 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 14 Mar 2016 18:09:39 +0100 Subject: _pickle: Fix load_counted_tuple(), use Py_ssize_t for size Fix a warning on Windows 64-bit. --- Modules/_pickle.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 2a070e22e7..f500038de8 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -4982,7 +4982,7 @@ load_counted_binunicode(UnpicklerObject *self, int nbytes) } static int -load_counted_tuple(UnpicklerObject *self, int len) +load_counted_tuple(UnpicklerObject *self, Py_ssize_t len) { PyObject *tuple; -- cgit v1.2.1 From 450fd5d935b0c187e2a39624a42df0acfc3c4d77 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 14 Mar 2016 22:26:53 +0100 Subject: Check the GIL in PyObject_Malloc() Issue #26558: The debug hook of PyObject_Malloc() now checks that the GIL is held when the function is called. --- Modules/_testcapimodule.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index babffc4d67..b3d8818ac6 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3643,6 +3643,20 @@ pymem_api_misuse(PyObject *self, PyObject *args) Py_RETURN_NONE; } +static PyObject* +pyobject_malloc_without_gil(PyObject *self, PyObject *args) +{ + char *buffer; + + Py_BEGIN_ALLOW_THREADS + buffer = PyObject_Malloc(10); + Py_END_ALLOW_THREADS + + PyObject_Free(buffer); + + Py_RETURN_NONE; +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3827,6 +3841,7 @@ static PyMethodDef TestMethods[] = { {"get_recursion_depth", get_recursion_depth, METH_NOARGS}, {"pymem_buffer_overflow", pymem_buffer_overflow, METH_NOARGS}, {"pymem_api_misuse", pymem_api_misuse, METH_NOARGS}, + {"pyobject_malloc_without_gil", pyobject_malloc_without_gil, METH_NOARGS}, {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From a2fbf00372a9e70a001e1dc61b2c5e3f09815c62 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 15 Mar 2016 14:28:04 +0100 Subject: _tracemalloc: filename cannot be NULL --- Modules/_tracemalloc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index d62e68254d..2eb4dcad44 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -65,6 +65,8 @@ __attribute__((packed)) _declspec(align(4)) #endif { + /* filename cannot be NULL: "" is used if the Python frame + filename is NULL */ PyObject *filename; int lineno; } frame_t; @@ -987,8 +989,6 @@ frame_to_pyobject(frame_t *frame) if (frame_obj == NULL) return NULL; - if (frame->filename == NULL) - frame->filename = Py_None; Py_INCREF(frame->filename); PyTuple_SET_ITEM(frame_obj, 0, frame->filename); -- cgit v1.2.1 From 02e6e2b1d98abd5440c1565f958c6ba6f19796c4 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 15 Mar 2016 17:23:35 +0100 Subject: faulthandler: Test Py_FatalError() with GIL released Issue #26558. --- Modules/faulthandler.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 14384b5d1c..45c9fcb2af 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -935,10 +935,18 @@ static PyObject * faulthandler_fatal_error_py(PyObject *self, PyObject *args) { char *message; - if (!PyArg_ParseTuple(args, "y:fatal_error", &message)) + int release_gil = 0; + if (!PyArg_ParseTuple(args, "y|i:fatal_error", &message, &release_gil)) return NULL; faulthandler_suppress_crash_report(); - Py_FatalError(message); + if (release_gil) { + Py_BEGIN_ALLOW_THREADS + Py_FatalError(message); + Py_END_ALLOW_THREADS + } + else { + Py_FatalError(message); + } Py_RETURN_NONE; } -- cgit v1.2.1 From a89b494755360aa6c01dad2ab19af0ae16ffbf21 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 15 Mar 2016 21:57:02 +0100 Subject: _tracemalloc: store lineno as unsigned int Issue #26564. Cleanup the code, lineno is never negative. --- Modules/_tracemalloc.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 226a473b4c..fd520f3259 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -66,7 +66,7 @@ _declspec(align(4)) #endif { PyObject *filename; - int lineno; + unsigned int lineno; } frame_t; typedef struct { @@ -266,12 +266,13 @@ tracemalloc_get_frame(PyFrameObject *pyframe, frame_t *frame) PyCodeObject *code; PyObject *filename; _Py_hashtable_entry_t *entry; + int lineno; frame->filename = unknown_filename; - frame->lineno = PyFrame_GetLineNumber(pyframe); - assert(frame->lineno >= 0); - if (frame->lineno < 0) - frame->lineno = 0; + lineno = PyFrame_GetLineNumber(pyframe); + if (lineno < 0) + lineno = 0; + frame->lineno = (unsigned int)lineno; code = pyframe->f_code; if (code == NULL) { @@ -375,7 +376,6 @@ traceback_get_frames(traceback_t *traceback) for (pyframe = tstate->frame; pyframe != NULL; pyframe = pyframe->f_back) { tracemalloc_get_frame(pyframe, &traceback->frames[traceback->nframe]); assert(traceback->frames[traceback->nframe].filename != NULL); - assert(traceback->frames[traceback->nframe].lineno >= 0); traceback->nframe++; if (traceback->nframe == tracemalloc_config.max_nframe) break; @@ -943,15 +943,6 @@ tracemalloc_stop(void) tracemalloc_traceback = NULL; } -static PyObject* -lineno_as_obj(int lineno) -{ - if (lineno >= 0) - return PyLong_FromLong(lineno); - else - Py_RETURN_NONE; -} - PyDoc_STRVAR(tracemalloc_is_tracing_doc, "is_tracing()->bool\n" "\n" @@ -996,8 +987,7 @@ frame_to_pyobject(frame_t *frame) Py_INCREF(frame->filename); PyTuple_SET_ITEM(frame_obj, 0, frame->filename); - assert(frame->lineno >= 0); - lineno_obj = lineno_as_obj(frame->lineno); + lineno_obj = PyLong_FromUnsignedLong(frame->lineno); if (lineno_obj == NULL) { Py_DECREF(frame_obj); return NULL; -- cgit v1.2.1 From 2da2956057a94cdaa924b7326ab286a5148eeb28 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 15 Mar 2016 22:22:13 +0100 Subject: On memory error, dump the memory block traceback Issue #26564: _PyObject_DebugDumpAddress() now dumps the traceback where a memory block was allocated on memory block. Use the tracemalloc module to get the traceback. --- Modules/_tracemalloc.c | 67 +++++++++++++++++++++++++++++++++++++++++--------- Modules/hashtable.c | 6 ++--- 2 files changed, 59 insertions(+), 14 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 1940af429a..5752904d47 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -1161,6 +1161,25 @@ finally: return get_traces.list; } +static traceback_t* +tracemalloc_get_traceback(const void *ptr) +{ + trace_t trace; + int found; + + if (!tracemalloc_config.tracing) + return NULL; + + TABLES_LOCK(); + found = _Py_HASHTABLE_GET(tracemalloc_traces, ptr, trace); + TABLES_UNLOCK(); + + if (!found) + return NULL; + + return trace.traceback; +} + PyDoc_STRVAR(tracemalloc_get_object_traceback_doc, "_get_object_traceback(obj)\n" "\n" @@ -1175,11 +1194,7 @@ py_tracemalloc_get_object_traceback(PyObject *self, PyObject *obj) { PyTypeObject *type; void *ptr; - trace_t trace; - int found; - - if (!tracemalloc_config.tracing) - Py_RETURN_NONE; + traceback_t *traceback; type = Py_TYPE(obj); if (PyType_IS_GC(type)) @@ -1187,16 +1202,46 @@ py_tracemalloc_get_object_traceback(PyObject *self, PyObject *obj) else ptr = (void *)obj; - TABLES_LOCK(); - found = _Py_HASHTABLE_GET(tracemalloc_traces, ptr, trace); - TABLES_UNLOCK(); - - if (!found) + traceback = tracemalloc_get_traceback(ptr); + if (traceback == NULL) Py_RETURN_NONE; - return traceback_to_pyobject(trace.traceback, NULL); + return traceback_to_pyobject(traceback, NULL); +} + +#define PUTS(fd, str) _Py_write_noraise(fd, str, (int)strlen(str)) + +static void +_PyMem_DumpFrame(int fd, frame_t * frame) +{ + PUTS(fd, " File \""); + _Py_DumpASCII(fd, frame->filename); + PUTS(fd, "\", line "); + _Py_DumpDecimal(fd, frame->lineno); + PUTS(fd, "\n"); } +/* Dump the traceback where a memory block was allocated into file descriptor + fd. The function may block on TABLES_LOCK() but it is unlikely. */ +void +_PyMem_DumpTraceback(int fd, const void *ptr) +{ + traceback_t *traceback; + int i; + + traceback = tracemalloc_get_traceback(ptr); + if (traceback == NULL) + return; + + PUTS(fd, "Memory block allocated at (most recent call first):\n"); + for (i=0; i < traceback->nframe; i++) { + _PyMem_DumpFrame(fd, &traceback->frames[i]); + } + PUTS(fd, "\n"); +} + +#undef PUTS + PyDoc_STRVAR(tracemalloc_start_doc, "start(nframe: int=1)\n" "\n" diff --git a/Modules/hashtable.c b/Modules/hashtable.c index 133f3133ef..7de154b70a 100644 --- a/Modules/hashtable.c +++ b/Modules/hashtable.c @@ -486,9 +486,9 @@ _Py_hashtable_copy(_Py_hashtable_t *src) void *data, *new_data; dst = _Py_hashtable_new_full(src->data_size, src->num_buckets, - src->hash_func, src->compare_func, - src->copy_data_func, src->free_data_func, - src->get_data_size_func, &src->alloc); + src->hash_func, src->compare_func, + src->copy_data_func, src->free_data_func, + src->get_data_size_func, &src->alloc); if (dst == NULL) return NULL; -- cgit v1.2.1 From f6c2b7c1ca908c464adef81cf4539387606f917e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 16 Mar 2016 12:12:53 +0100 Subject: Fail if PyMem_Malloc() is called without holding the GIL Issue #26563: Debug hooks on Python memory allocators now raise a fatal error if functions of the PyMem_Malloc() family are called without holding the GIL. --- Modules/_testcapimodule.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index b3d8818ac6..0fc7cbc328 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3643,11 +3643,29 @@ pymem_api_misuse(PyObject *self, PyObject *args) Py_RETURN_NONE; } +static PyObject* +pymem_malloc_without_gil(PyObject *self, PyObject *args) +{ + char *buffer; + + /* Deliberate bug to test debug hooks on Python memory allocators: + call PyMem_Malloc() without holding the GIL */ + Py_BEGIN_ALLOW_THREADS + buffer = PyMem_Malloc(10); + Py_END_ALLOW_THREADS + + PyMem_Free(buffer); + + Py_RETURN_NONE; +} + static PyObject* pyobject_malloc_without_gil(PyObject *self, PyObject *args) { char *buffer; + /* Deliberate bug to test debug hooks on Python memory allocators: + call PyObject_Malloc() without holding the GIL */ Py_BEGIN_ALLOW_THREADS buffer = PyObject_Malloc(10); Py_END_ALLOW_THREADS @@ -3841,6 +3859,7 @@ static PyMethodDef TestMethods[] = { {"get_recursion_depth", get_recursion_depth, METH_NOARGS}, {"pymem_buffer_overflow", pymem_buffer_overflow, METH_NOARGS}, {"pymem_api_misuse", pymem_api_misuse, METH_NOARGS}, + {"pymem_malloc_without_gil", pymem_malloc_without_gil, METH_NOARGS}, {"pyobject_malloc_without_gil", pyobject_malloc_without_gil, METH_NOARGS}, {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From afdcb3072bfeb43e5abe1bc0f7b14feb9d24271d Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 16 Mar 2016 14:30:16 +0100 Subject: Fix usage of PyMem_Malloc() in os.stat() Issue #26563: Replace PyMem_Malloc() with PyMem_RawMalloc() in the Windows implementation of os.stat(), since the code is called without holding the GIL. --- Modules/posixmodule.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 7e8987845b..65b20be468 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1463,7 +1463,7 @@ get_target_path(HANDLE hdl, wchar_t **target_path) if(!buf_size) return FALSE; - buf = PyMem_New(wchar_t, buf_size+1); + buf = (wchar_t *)PyMem_RawMalloc((buf_size + 1) * sizeof(wchar_t)); if (!buf) { SetLastError(ERROR_OUTOFMEMORY); return FALSE; @@ -1473,12 +1473,12 @@ get_target_path(HANDLE hdl, wchar_t **target_path) buf, buf_size, VOLUME_NAME_DOS); if(!result_length) { - PyMem_Free(buf); + PyMem_RawFree(buf); return FALSE; } if(!CloseHandle(hdl)) { - PyMem_Free(buf); + PyMem_RawFree(buf); return FALSE; } @@ -1563,7 +1563,7 @@ win32_xstat_impl(const char *path, struct _Py_stat_struct *result, return -1; code = win32_xstat_impl_w(target_path, result, FALSE); - PyMem_Free(target_path); + PyMem_RawFree(target_path); return code; } } else @@ -1653,7 +1653,7 @@ win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, return -1; code = win32_xstat_impl_w(target_path, result, FALSE); - PyMem_Free(target_path); + PyMem_RawFree(target_path); return code; } } else -- cgit v1.2.1 From f170005bfdc09173b855048302a650fa3ef7d16f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 16 Mar 2016 22:45:24 +0100 Subject: faulthandler now works in non-Python threads Issue #26563: * Add _PyGILState_GetInterpreterStateUnsafe() function: the single PyInterpreterState used by this process' GILState implementation. * Enhance _Py_DumpTracebackThreads() to retrieve the interpreter state from autoInterpreterState in last resort. The function now accepts NULL for interp and current_tstate parameters. * test_faulthandler: fix a ResourceWarning when test is interrupted by CTRL+c --- Modules/faulthandler.c | 68 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 45c9fcb2af..1c247b72a8 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -202,8 +202,9 @@ faulthandler_get_fileno(PyObject **file_ptr) static PyThreadState* get_thread_state(void) { - PyThreadState *tstate = PyThreadState_Get(); + PyThreadState *tstate = _PyThreadState_UncheckedGet(); if (tstate == NULL) { + /* just in case but very unlikely... */ PyErr_SetString(PyExc_RuntimeError, "unable to get the current thread state"); return NULL; @@ -234,11 +235,12 @@ faulthandler_dump_traceback(int fd, int all_threads, PyGILState_GetThisThreadState(). */ tstate = PyGILState_GetThisThreadState(); #else - tstate = PyThreadState_Get(); + tstate = _PyThreadState_UncheckedGet(); #endif - if (all_threads) - _Py_DumpTracebackThreads(fd, interp, tstate); + if (all_threads) { + (void)_Py_DumpTracebackThreads(fd, NULL, tstate); + } else { if (tstate != NULL) _Py_DumpTraceback(fd, tstate); @@ -272,7 +274,7 @@ faulthandler_dump_traceback_py(PyObject *self, return NULL; if (all_threads) { - errmsg = _Py_DumpTracebackThreads(fd, tstate->interp, tstate); + errmsg = _Py_DumpTracebackThreads(fd, NULL, tstate); if (errmsg != NULL) { PyErr_SetString(PyExc_RuntimeError, errmsg); return NULL; @@ -469,7 +471,6 @@ faulthandler_thread(void *unused) { PyLockStatus st; const char* errmsg; - PyThreadState *current; int ok; #if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK) sigset_t set; @@ -489,12 +490,9 @@ faulthandler_thread(void *unused) /* Timeout => dump traceback */ assert(st == PY_LOCK_FAILURE); - /* get the thread holding the GIL, NULL if no thread hold the GIL */ - current = _PyThreadState_UncheckedGet(); - _Py_write_noraise(thread.fd, thread.header, (int)thread.header_len); - errmsg = _Py_DumpTracebackThreads(thread.fd, thread.interp, current); + errmsg = _Py_DumpTracebackThreads(thread.fd, thread.interp, NULL); ok = (errmsg == NULL); if (thread.exit) @@ -894,7 +892,7 @@ static PyObject * faulthandler_sigsegv(PyObject *self, PyObject *args) { int release_gil = 0; - if (!PyArg_ParseTuple(args, "|i:_read_null", &release_gil)) + if (!PyArg_ParseTuple(args, "|i:_sigsegv", &release_gil)) return NULL; if (release_gil) { @@ -907,6 +905,49 @@ faulthandler_sigsegv(PyObject *self, PyObject *args) Py_RETURN_NONE; } +#ifdef WITH_THREAD +static void +faulthandler_fatal_error_thread(void *plock) +{ + PyThread_type_lock *lock = (PyThread_type_lock *)plock; + + Py_FatalError("in new thread"); + + /* notify the caller that we are done */ + PyThread_release_lock(lock); +} + +static PyObject * +faulthandler_fatal_error_c_thread(PyObject *self, PyObject *args) +{ + long thread; + PyThread_type_lock lock; + + faulthandler_suppress_crash_report(); + + lock = PyThread_allocate_lock(); + if (lock == NULL) + return PyErr_NoMemory(); + + PyThread_acquire_lock(lock, WAIT_LOCK); + + thread = PyThread_start_new_thread(faulthandler_fatal_error_thread, lock); + if (thread == -1) { + PyThread_free_lock(lock); + PyErr_SetString(PyExc_RuntimeError, "unable to start the thread"); + return NULL; + } + + /* wait until the thread completes: it will never occur, since Py_FatalError() + exits the process immedialty. */ + PyThread_acquire_lock(lock, WAIT_LOCK); + PyThread_release_lock(lock); + PyThread_free_lock(lock); + + Py_RETURN_NONE; +} +#endif + static PyObject * faulthandler_sigfpe(PyObject *self, PyObject *args) { @@ -1065,6 +1106,11 @@ static PyMethodDef module_methods[] = { "a SIGSEGV or SIGBUS signal depending on the platform")}, {"_sigsegv", faulthandler_sigsegv, METH_VARARGS, PyDoc_STR("_sigsegv(release_gil=False): raise a SIGSEGV signal")}, +#ifdef WITH_THREAD + {"_fatal_error_c_thread", faulthandler_fatal_error_c_thread, METH_NOARGS, + PyDoc_STR("fatal_error_c_thread(): " + "call Py_FatalError() in a new C thread.")}, +#endif {"_sigabrt", faulthandler_sigabrt, METH_NOARGS, PyDoc_STR("_sigabrt(): raise a SIGABRT signal")}, {"_sigfpe", (PyCFunction)faulthandler_sigfpe, METH_NOARGS, -- cgit v1.2.1 From 41ccd306780d77f6cc3b09c10da1e1f837e77dca Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 16 Mar 2016 23:25:02 +0100 Subject: Fix usage of PyMem_Malloc() in overlapped.c Issue #26563: Replace PyMem_Malloc() with PyMem_RawFree() since PostToQueueCallback() calls PyMem_RawFree() (previously PyMem_Free()) in a new C thread which doesn't hold the GIL. --- Modules/overlapped.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/overlapped.c b/Modules/overlapped.c index ef77c8875a..8e6d397e22 100644 --- a/Modules/overlapped.c +++ b/Modules/overlapped.c @@ -238,7 +238,7 @@ PostToQueueCallback(PVOID lpParameter, BOOL TimerOrWaitFired) PostQueuedCompletionStatus(p->CompletionPort, TimerOrWaitFired, 0, p->Overlapped); /* ignore possible error! */ - PyMem_Free(p); + PyMem_RawFree(p); } PyDoc_STRVAR( @@ -262,7 +262,10 @@ overlapped_RegisterWaitWithQueue(PyObject *self, PyObject *args) &Milliseconds)) return NULL; - pdata = PyMem_Malloc(sizeof(struct PostCallbackData)); + /* Use PyMem_RawMalloc() rather than PyMem_Malloc(), since + PostToQueueCallback() will call PyMem_Free() from a new C thread + which doesn't hold the GIL. */ + pdata = PyMem_RawMalloc(sizeof(struct PostCallbackData)); if (pdata == NULL) return SetFromWindowsErr(0); @@ -273,7 +276,7 @@ overlapped_RegisterWaitWithQueue(PyObject *self, PyObject *args) pdata, Milliseconds, WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE)) { - PyMem_Free(pdata); + PyMem_RawFree(pdata); return SetFromWindowsErr(0); } -- cgit v1.2.1 From 0bbcf87807af0bda72d30fd0db47b3fa3fbc4de5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 16 Mar 2016 23:25:02 +0100 Subject: Fix usage of PyMem_Malloc() in overlapped.c Issue #26563: Replace PyMem_Malloc() with PyMem_RawFree() since PostToQueueCallback() calls PyMem_RawFree() (previously PyMem_Free()) in a new C thread which doesn't hold the GIL. --- Modules/overlapped.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/overlapped.c b/Modules/overlapped.c index ef77c8875a..8e6d397e22 100644 --- a/Modules/overlapped.c +++ b/Modules/overlapped.c @@ -238,7 +238,7 @@ PostToQueueCallback(PVOID lpParameter, BOOL TimerOrWaitFired) PostQueuedCompletionStatus(p->CompletionPort, TimerOrWaitFired, 0, p->Overlapped); /* ignore possible error! */ - PyMem_Free(p); + PyMem_RawFree(p); } PyDoc_STRVAR( @@ -262,7 +262,10 @@ overlapped_RegisterWaitWithQueue(PyObject *self, PyObject *args) &Milliseconds)) return NULL; - pdata = PyMem_Malloc(sizeof(struct PostCallbackData)); + /* Use PyMem_RawMalloc() rather than PyMem_Malloc(), since + PostToQueueCallback() will call PyMem_Free() from a new C thread + which doesn't hold the GIL. */ + pdata = PyMem_RawMalloc(sizeof(struct PostCallbackData)); if (pdata == NULL) return SetFromWindowsErr(0); @@ -273,7 +276,7 @@ overlapped_RegisterWaitWithQueue(PyObject *self, PyObject *args) pdata, Milliseconds, WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE)) { - PyMem_Free(pdata); + PyMem_RawFree(pdata); return SetFromWindowsErr(0); } -- cgit v1.2.1 From e6094ad533ed236d30c68e7225ac767d1ceac1f6 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 19 Mar 2016 01:03:51 +0100 Subject: On ResourceWarning, log traceback where the object was allocated Issue #26567: * Add a new function PyErr_ResourceWarning() function to pass the destroyed object * Add a source attribute to warnings.WarningMessage * Add warnings._showwarnmsg() which uses tracemalloc to get the traceback where source object was allocated. --- Modules/_io/fileio.c | 3 +-- Modules/posixmodule.c | 4 ++-- Modules/socketmodule.c | 3 +-- 3 files changed, 4 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 8bf3922676..a02a9c1be3 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -92,8 +92,7 @@ fileio_dealloc_warn(fileio *self, PyObject *source) if (self->fd >= 0 && self->closefd) { PyObject *exc, *val, *tb; PyErr_Fetch(&exc, &val, &tb); - if (PyErr_WarnFormat(PyExc_ResourceWarning, 1, - "unclosed file %R", source)) { + if (PyErr_ResourceWarning(source, 1, "unclosed file %R", source)) { /* Spurious errors can appear at shutdown */ if (PyErr_ExceptionMatches(PyExc_Warning)) PyErr_WriteUnraisable((PyObject *) self); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 65b20be468..3f22d14ffb 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12111,8 +12111,8 @@ ScandirIterator_dealloc(ScandirIterator *iterator) */ ++Py_REFCNT(iterator); PyErr_Fetch(&exc, &val, &tb); - if (PyErr_WarnFormat(PyExc_ResourceWarning, 1, - "unclosed scandir iterator %R", iterator)) { + if (PyErr_ResourceWarning((PyObject *)iterator, 1, + "unclosed scandir iterator %R", iterator)) { /* Spurious errors can appear at shutdown */ if (PyErr_ExceptionMatches(PyExc_Warning)) PyErr_WriteUnraisable((PyObject *) iterator); diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 77a6b313b0..657b04b7a6 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -4170,8 +4170,7 @@ sock_dealloc(PySocketSockObject *s) Py_ssize_t old_refcount = Py_REFCNT(s); ++Py_REFCNT(s); PyErr_Fetch(&exc, &val, &tb); - if (PyErr_WarnFormat(PyExc_ResourceWarning, 1, - "unclosed %R", s)) + if (PyErr_ResourceWarning(s, 1, "unclosed %R", s)) /* Spurious errors can appear at shutdown */ if (PyErr_ExceptionMatches(PyExc_Warning)) PyErr_WriteUnraisable((PyObject *) s); -- cgit v1.2.1 From 5f0c633fe6c5733eacf9f996e5debf29b8326cdb Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 19 Mar 2016 02:01:48 +0100 Subject: ResourceWarning: Revert change on socket and scandir io.FileIO has a safe implementation of destructor, but not socket nor scandir. --- Modules/posixmodule.c | 4 ++-- Modules/socketmodule.c | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 3f22d14ffb..65b20be468 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12111,8 +12111,8 @@ ScandirIterator_dealloc(ScandirIterator *iterator) */ ++Py_REFCNT(iterator); PyErr_Fetch(&exc, &val, &tb); - if (PyErr_ResourceWarning((PyObject *)iterator, 1, - "unclosed scandir iterator %R", iterator)) { + if (PyErr_WarnFormat(PyExc_ResourceWarning, 1, + "unclosed scandir iterator %R", iterator)) { /* Spurious errors can appear at shutdown */ if (PyErr_ExceptionMatches(PyExc_Warning)) PyErr_WriteUnraisable((PyObject *) iterator); diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 657b04b7a6..77a6b313b0 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -4170,7 +4170,8 @@ sock_dealloc(PySocketSockObject *s) Py_ssize_t old_refcount = Py_REFCNT(s); ++Py_REFCNT(s); PyErr_Fetch(&exc, &val, &tb); - if (PyErr_ResourceWarning(s, 1, "unclosed %R", s)) + if (PyErr_WarnFormat(PyExc_ResourceWarning, 1, + "unclosed %R", s)) /* Spurious errors can appear at shutdown */ if (PyErr_ExceptionMatches(PyExc_Warning)) PyErr_WriteUnraisable((PyObject *) s); -- cgit v1.2.1 From e760fe305dec8952fa632cd0edb1cb2e439ec0f4 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sat, 19 Mar 2016 11:44:17 +0200 Subject: Issue #18787: spwd.getspnam() now raises a PermissionError if the user doesn't have privileges. --- Modules/spwdmodule.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c index 49324d50f8..e715d01b64 100644 --- a/Modules/spwdmodule.c +++ b/Modules/spwdmodule.c @@ -137,7 +137,10 @@ spwd_getspnam_impl(PyModuleDef *module, PyObject *arg) if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1) goto out; if ((p = getspnam(name)) == NULL) { - PyErr_SetString(PyExc_KeyError, "getspnam(): name not found"); + if (errno != 0) + PyErr_SetFromErrno(PyExc_OSError); + else + PyErr_SetString(PyExc_KeyError, "getspnam(): name not found"); goto out; } retval = mkspent(p); -- cgit v1.2.1 From 480900011c18266464da20e649cb5fcd6e0b759e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 18 Mar 2016 21:52:22 +0100 Subject: _tracemalloc: add domain to trace keys * hashtable.h: key has now a variable size * _tracemalloc uses (pointer: void*, domain: unsigned int) as key for traces --- Modules/_tracemalloc.c | 186 ++++++++++++++++++++++++++++++++++++------------- Modules/hashtable.c | 105 ++++++++++++++++------------ Modules/hashtable.h | 89 ++++++++++++++++------- 3 files changed, 263 insertions(+), 117 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 5752904d47..73aa53b76d 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -3,6 +3,7 @@ #include "frameobject.h" #include "pythread.h" #include "osdefs.h" +#include /* For offsetof */ /* Trace memory blocks allocated by PyMem_RawMalloc() */ #define TRACE_RAW_MALLOC @@ -54,6 +55,26 @@ static PyThread_type_lock tables_lock; # define TABLES_UNLOCK() #endif +typedef unsigned int domain_t; + +/* FIXME: pack also? */ +typedef struct { + void *ptr; + domain_t domain; +} pointer_t; + +/* Size of pointer_t content, it can be smaller than sizeof(pointer_t) */ +#define POINTER_T_SIZE \ + (offsetof(pointer_t, domain) + sizeof(domain_t)) + +#define POINTER_T_FILL_PADDING(key) \ + do { \ + if (POINTER_T_SIZE != sizeof(pointer_t)) { \ + memset((char *)&(key) + POINTER_T_SIZE, 0, \ + sizeof(pointer_t) - POINTER_T_SIZE); \ + } \ + } while (0) + /* Pack the frame_t structure to reduce the memory footprint on 64-bit architectures: 12 bytes instead of 16. This optimization might produce SIGBUS on architectures not supporting unaligned memory accesses (64-bit @@ -196,23 +217,56 @@ set_reentrant(int reentrant) } #endif +static Py_uhash_t +hashtable_hash_pointer(size_t key_size, const void *pkey) +{ + pointer_t ptr; + Py_uhash_t hash; + + assert(sizeof(ptr) == key_size); + ptr = *(pointer_t *)pkey; + + hash = (Py_uhash_t)_Py_HashPointer(ptr.ptr); + hash ^= ptr.domain; + return hash; +} + +static Py_uhash_t +hashtable_hash_pyobject(size_t key_size, const void *pkey) +{ + PyObject *obj; + + assert(key_size == sizeof(PyObject *)); + obj = *(PyObject **)pkey; + + return PyObject_Hash(obj); +} + static int -hashtable_compare_unicode(const void *key, const _Py_hashtable_entry_t *entry) +hashtable_compare_unicode(size_t key_size, const void *pkey, + const _Py_hashtable_entry_t *entry) { - if (key != NULL && entry->key != NULL) - return (PyUnicode_Compare((PyObject *)key, (PyObject *)entry->key) == 0); + PyObject *key, *entry_key; + + assert(sizeof(key) == key_size); + key = *(PyObject **)pkey; + assert(sizeof(entry_key) == key_size); + entry_key = *(PyObject **)_Py_HASHTABLE_ENTRY_KEY(entry); + + if (key != NULL && entry_key != NULL) + return (PyUnicode_Compare(key, entry_key) == 0); else - return key == entry->key; + return key == entry_key; } static _Py_hashtable_allocator_t hashtable_alloc = {malloc, free}; static _Py_hashtable_t * -hashtable_new(size_t data_size, +hashtable_new(size_t key_size, size_t data_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func) { - return _Py_hashtable_new_full(data_size, 0, + return _Py_hashtable_new_full(key_size, data_size, 0, hash_func, compare_func, NULL, NULL, NULL, &hashtable_alloc); } @@ -230,20 +284,26 @@ raw_free(void *ptr) } static Py_uhash_t -hashtable_hash_traceback(const void *key) +hashtable_hash_traceback(size_t key_size, const void *pkey) { - const traceback_t *traceback = key; + const traceback_t *traceback = *(const traceback_t **)pkey; + assert(key_size == sizeof(const traceback_t *)); return traceback->hash; } static int -hashtable_compare_traceback(const traceback_t *traceback1, +hashtable_compare_traceback(size_t key_size, const void *pkey, const _Py_hashtable_entry_t *he) { - const traceback_t *traceback2 = he->key; + traceback_t *traceback1, *traceback2; const frame_t *frame1, *frame2; int i; + assert(sizeof(traceback1) == key_size); + assert(sizeof(traceback2) == key_size); + traceback1 = *(traceback_t **)pkey; + traceback2 = *(traceback_t **)_Py_HASHTABLE_ENTRY_KEY(he); + if (traceback1->nframe != traceback2->nframe) return 0; @@ -312,15 +372,16 @@ tracemalloc_get_frame(PyFrameObject *pyframe, frame_t *frame) } /* intern the filename */ - entry = _Py_hashtable_get_entry(tracemalloc_filenames, filename); + entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_filenames, filename); if (entry != NULL) { - filename = (PyObject *)entry->key; + assert(sizeof(filename) == tracemalloc_filenames->key_size); + filename = *(PyObject **)_Py_HASHTABLE_ENTRY_KEY(entry); } else { /* tracemalloc_filenames is responsible to keep a reference to the filename */ Py_INCREF(filename); - if (_Py_hashtable_set(tracemalloc_filenames, filename, NULL, 0) < 0) { + if (_Py_HASHTABLE_SET_NODATA(tracemalloc_filenames, filename) < 0) { Py_DECREF(filename); #ifdef TRACE_DEBUG tracemalloc_error("failed to intern the filename"); @@ -403,9 +464,10 @@ traceback_new(void) traceback->hash = traceback_hash(traceback); /* intern the traceback */ - entry = _Py_hashtable_get_entry(tracemalloc_tracebacks, traceback); + entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_tracebacks, traceback); if (entry != NULL) { - traceback = (traceback_t *)entry->key; + assert(sizeof(traceback) == tracemalloc_tracebacks->key_size); + traceback = *(traceback_t **)_Py_HASHTABLE_ENTRY_KEY(entry); } else { traceback_t *copy; @@ -422,7 +484,7 @@ traceback_new(void) } memcpy(copy, traceback, traceback_size); - if (_Py_hashtable_set(tracemalloc_tracebacks, copy, NULL, 0) < 0) { + if (_Py_HASHTABLE_SET_NODATA(tracemalloc_tracebacks, copy) < 0) { raw_free(copy); #ifdef TRACE_DEBUG tracemalloc_error("failed to intern the traceback: putdata failed"); @@ -435,8 +497,9 @@ traceback_new(void) } static int -tracemalloc_add_trace(void *ptr, size_t size) +tracemalloc_add_trace(void *ptr, domain_t domain, size_t size) { + pointer_t key; traceback_t *traceback; trace_t trace; int res; @@ -445,10 +508,14 @@ tracemalloc_add_trace(void *ptr, size_t size) if (traceback == NULL) return -1; + key.ptr = ptr; + key.domain = 0; + POINTER_T_FILL_PADDING(key); + trace.size = size; trace.traceback = traceback; - res = _Py_HASHTABLE_SET(tracemalloc_traces, ptr, trace); + res = _Py_HASHTABLE_SET(tracemalloc_traces, key, trace); if (res == 0) { assert(tracemalloc_traced_memory <= PY_SIZE_MAX - size); tracemalloc_traced_memory += size; @@ -460,11 +527,16 @@ tracemalloc_add_trace(void *ptr, size_t size) } static void -tracemalloc_remove_trace(void *ptr) +tracemalloc_remove_trace(void *ptr, domain_t domain) { + pointer_t key; trace_t trace; - if (_Py_hashtable_pop(tracemalloc_traces, ptr, &trace, sizeof(trace))) { + key.ptr = ptr; + key.domain = domain; + POINTER_T_FILL_PADDING(key); + + if (_Py_HASHTABLE_POP(tracemalloc_traces, key, trace)) { assert(tracemalloc_traced_memory >= trace.size); tracemalloc_traced_memory -= trace.size; } @@ -486,7 +558,7 @@ tracemalloc_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) return NULL; TABLES_LOCK(); - if (tracemalloc_add_trace(ptr, nelem * elsize) < 0) { + if (tracemalloc_add_trace(ptr, 0, nelem * elsize) < 0) { /* Failed to allocate a trace for the new memory block */ TABLES_UNLOCK(); alloc->free(alloc->ctx, ptr); @@ -510,9 +582,9 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) /* an existing memory block has been resized */ TABLES_LOCK(); - tracemalloc_remove_trace(ptr); + tracemalloc_remove_trace(ptr, 0); - if (tracemalloc_add_trace(ptr2, new_size) < 0) { + if (tracemalloc_add_trace(ptr2, 0, new_size) < 0) { /* Memory allocation failed. The error cannot be reported to the caller, because realloc() may already have shrinked the memory block and so removed bytes. @@ -530,7 +602,7 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) /* new allocation */ TABLES_LOCK(); - if (tracemalloc_add_trace(ptr2, new_size) < 0) { + if (tracemalloc_add_trace(ptr2, 0, new_size) < 0) { /* Failed to allocate a trace for the new memory block */ TABLES_UNLOCK(); alloc->free(alloc->ctx, ptr2); @@ -555,7 +627,7 @@ tracemalloc_free(void *ctx, void *ptr) alloc->free(alloc->ctx, ptr); TABLES_LOCK(); - tracemalloc_remove_trace(ptr); + tracemalloc_remove_trace(ptr, 0); TABLES_UNLOCK(); } @@ -610,7 +682,7 @@ tracemalloc_realloc_gil(void *ctx, void *ptr, size_t new_size) ptr2 = alloc->realloc(alloc->ctx, ptr, new_size); if (ptr2 != NULL && ptr != NULL) { TABLES_LOCK(); - tracemalloc_remove_trace(ptr); + tracemalloc_remove_trace(ptr, 0); TABLES_UNLOCK(); } return ptr2; @@ -689,7 +761,7 @@ tracemalloc_raw_realloc(void *ctx, void *ptr, size_t new_size) if (ptr2 != NULL && ptr != NULL) { TABLES_LOCK(); - tracemalloc_remove_trace(ptr); + tracemalloc_remove_trace(ptr, 0); TABLES_UNLOCK(); } return ptr2; @@ -714,17 +786,27 @@ tracemalloc_raw_realloc(void *ctx, void *ptr, size_t new_size) #endif /* TRACE_RAW_MALLOC */ static int -tracemalloc_clear_filename(_Py_hashtable_entry_t *entry, void *user_data) +tracemalloc_clear_filename(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, + void *user_data) { - PyObject *filename = (PyObject *)entry->key; + PyObject *filename; + + assert(sizeof(filename) == ht->key_size); + filename = *(PyObject **)_Py_HASHTABLE_ENTRY_KEY(entry); + Py_DECREF(filename); return 0; } static int -traceback_free_traceback(_Py_hashtable_entry_t *entry, void *user_data) +traceback_free_traceback(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, + void *user_data) { - traceback_t *traceback = (traceback_t *)entry->key; + traceback_t *traceback; + + assert(sizeof(traceback) == ht->key_size); + traceback = *(traceback_t **)_Py_HASHTABLE_ENTRY_KEY(entry); + raw_free(traceback); return 0; } @@ -791,16 +873,16 @@ tracemalloc_init(void) } #endif - tracemalloc_filenames = hashtable_new(0, - (_Py_hashtable_hash_func)PyObject_Hash, + tracemalloc_filenames = hashtable_new(sizeof(PyObject *), 0, + hashtable_hash_pyobject, hashtable_compare_unicode); - tracemalloc_tracebacks = hashtable_new(0, - (_Py_hashtable_hash_func)hashtable_hash_traceback, - (_Py_hashtable_compare_func)hashtable_compare_traceback); + tracemalloc_tracebacks = hashtable_new(sizeof(traceback_t *), 0, + hashtable_hash_traceback, + hashtable_compare_traceback); - tracemalloc_traces = hashtable_new(sizeof(trace_t), - _Py_hashtable_hash_ptr, + tracemalloc_traces = hashtable_new(sizeof(pointer_t), sizeof(trace_t), + hashtable_hash_pointer, _Py_hashtable_compare_direct); if (tracemalloc_filenames == NULL || tracemalloc_tracebacks == NULL @@ -1065,14 +1147,15 @@ typedef struct { } get_traces_t; static int -tracemalloc_get_traces_fill(_Py_hashtable_entry_t *entry, void *user_data) +tracemalloc_get_traces_fill(_Py_hashtable_t *traces, _Py_hashtable_entry_t *entry, + void *user_data) { get_traces_t *get_traces = user_data; trace_t *trace; PyObject *tracemalloc_obj; int res; - trace = (trace_t *)_Py_HASHTABLE_ENTRY_DATA(entry); + trace = (trace_t *)_Py_HASHTABLE_ENTRY_DATA(traces, entry); tracemalloc_obj = trace_to_pyobject(trace, get_traces->tracebacks); if (tracemalloc_obj == NULL) @@ -1087,9 +1170,11 @@ tracemalloc_get_traces_fill(_Py_hashtable_entry_t *entry, void *user_data) } static int -tracemalloc_pyobject_decref_cb(_Py_hashtable_entry_t *entry, void *user_data) +tracemalloc_pyobject_decref_cb(_Py_hashtable_t *tracebacks, + _Py_hashtable_entry_t *entry, + void *user_data) { - PyObject *obj = (PyObject *)_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry); + PyObject *obj = (PyObject *)_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(tracebacks, entry); Py_DECREF(obj); return 0; } @@ -1120,7 +1205,7 @@ py_tracemalloc_get_traces(PyObject *self, PyObject *obj) /* the traceback hash table is used temporarily to intern traceback tuple of (filename, lineno) tuples */ - get_traces.tracebacks = hashtable_new(sizeof(PyObject *), + get_traces.tracebacks = hashtable_new(sizeof(traceback_t *), sizeof(PyObject *), _Py_hashtable_hash_ptr, _Py_hashtable_compare_direct); if (get_traces.tracebacks == NULL) { @@ -1152,7 +1237,7 @@ error: finally: if (get_traces.tracebacks != NULL) { _Py_hashtable_foreach(get_traces.tracebacks, - tracemalloc_pyobject_decref_cb, NULL); + tracemalloc_pyobject_decref_cb, NULL); _Py_hashtable_destroy(get_traces.tracebacks); } if (get_traces.traces != NULL) @@ -1162,16 +1247,21 @@ finally: } static traceback_t* -tracemalloc_get_traceback(const void *ptr) +tracemalloc_get_traceback(const void *ptr, domain_t domain) { + pointer_t key; trace_t trace; int found; if (!tracemalloc_config.tracing) return NULL; + key.ptr = (void *)ptr; + key.domain = domain; + POINTER_T_FILL_PADDING(key); + TABLES_LOCK(); - found = _Py_HASHTABLE_GET(tracemalloc_traces, ptr, trace); + found = _Py_HASHTABLE_GET(tracemalloc_traces, key, trace); TABLES_UNLOCK(); if (!found) @@ -1202,7 +1292,7 @@ py_tracemalloc_get_object_traceback(PyObject *self, PyObject *obj) else ptr = (void *)obj; - traceback = tracemalloc_get_traceback(ptr); + traceback = tracemalloc_get_traceback(ptr, 0); if (traceback == NULL) Py_RETURN_NONE; @@ -1229,7 +1319,7 @@ _PyMem_DumpTraceback(int fd, const void *ptr) traceback_t *traceback; int i; - traceback = tracemalloc_get_traceback(ptr); + traceback = tracemalloc_get_traceback(ptr, 0); if (traceback == NULL) return; diff --git a/Modules/hashtable.c b/Modules/hashtable.c index 7de154b70a..002c0a9342 100644 --- a/Modules/hashtable.c +++ b/Modules/hashtable.c @@ -59,7 +59,7 @@ #define ENTRY_NEXT(ENTRY) \ ((_Py_hashtable_entry_t *)_Py_SLIST_ITEM_NEXT(ENTRY)) #define HASHTABLE_ITEM_SIZE(HT) \ - (sizeof(_Py_hashtable_entry_t) + (HT)->data_size) + (sizeof(_Py_hashtable_entry_t) + (HT)->key_size + (HT)->data_size) /* Forward declaration */ static void hashtable_rehash(_Py_hashtable_t *ht); @@ -88,21 +88,21 @@ _Py_slist_remove(_Py_slist_t *list, _Py_slist_item_t *previous, } Py_uhash_t -_Py_hashtable_hash_int(const void *key) +_Py_hashtable_hash_ptr(size_t key_size, const void *pkey) { - return (Py_uhash_t)key; -} + void *key; + + assert(key_size == sizeof(void *)); + key = *(void**)pkey; -Py_uhash_t -_Py_hashtable_hash_ptr(const void *key) -{ return (Py_uhash_t)_Py_HashPointer((void *)key); } int -_Py_hashtable_compare_direct(const void *key, const _Py_hashtable_entry_t *entry) +_Py_hashtable_compare_direct(size_t key_size, const void *pkey, + const _Py_hashtable_entry_t *entry) { - return entry->key == key; + return (memcmp(pkey, _Py_HASHTABLE_ENTRY_KEY(entry), key_size) == 0); } /* makes sure the real size of the buckets array is a power of 2 */ @@ -119,7 +119,8 @@ round_size(size_t s) } _Py_hashtable_t * -_Py_hashtable_new_full(size_t data_size, size_t init_size, +_Py_hashtable_new_full(size_t key_size, size_t data_size, + size_t init_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func, _Py_hashtable_copy_data_func copy_data_func, @@ -144,6 +145,7 @@ _Py_hashtable_new_full(size_t data_size, size_t init_size, ht->num_buckets = round_size(init_size); ht->entries = 0; + ht->key_size = key_size; ht->data_size = data_size; buckets_size = ht->num_buckets * sizeof(ht->buckets[0]); @@ -164,11 +166,12 @@ _Py_hashtable_new_full(size_t data_size, size_t init_size, } _Py_hashtable_t * -_Py_hashtable_new(size_t data_size, +_Py_hashtable_new(size_t key_size, size_t data_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func) { - return _Py_hashtable_new_full(data_size, HASHTABLE_MIN_SIZE, + return _Py_hashtable_new_full(key_size, data_size, + HASHTABLE_MIN_SIZE, hash_func, compare_func, NULL, NULL, NULL, NULL); } @@ -195,7 +198,7 @@ _Py_hashtable_size(_Py_hashtable_t *ht) for (entry = TABLE_HEAD(ht, hv); entry; entry = ENTRY_NEXT(entry)) { void *data; - data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry); + data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry); size += ht->get_data_size_func(data); } } @@ -245,17 +248,21 @@ _Py_hashtable_print_stats(_Py_hashtable_t *ht) /* Get an entry. Return NULL if the key does not exist. */ _Py_hashtable_entry_t * -_Py_hashtable_get_entry(_Py_hashtable_t *ht, const void *key) +_Py_hashtable_get_entry(_Py_hashtable_t *ht, + size_t key_size, const void *pkey) { Py_uhash_t key_hash; size_t index; _Py_hashtable_entry_t *entry; - key_hash = ht->hash_func(key); + assert(key_size == ht->key_size); + + key_hash = ht->hash_func(key_size, pkey); index = key_hash & (ht->num_buckets - 1); for (entry = TABLE_HEAD(ht, index); entry != NULL; entry = ENTRY_NEXT(entry)) { - if (entry->key_hash == key_hash && ht->compare_func(key, entry)) + if (entry->key_hash == key_hash + && ht->compare_func(key_size, pkey, entry)) break; } @@ -263,18 +270,20 @@ _Py_hashtable_get_entry(_Py_hashtable_t *ht, const void *key) } static int -_hashtable_pop_entry(_Py_hashtable_t *ht, const void *key, void *data, size_t data_size) +_hashtable_pop_entry(_Py_hashtable_t *ht, size_t key_size, const void *pkey, + void *data, size_t data_size) { Py_uhash_t key_hash; size_t index; _Py_hashtable_entry_t *entry, *previous; - key_hash = ht->hash_func(key); + key_hash = ht->hash_func(key_size, pkey); index = key_hash & (ht->num_buckets - 1); previous = NULL; for (entry = TABLE_HEAD(ht, index); entry != NULL; entry = ENTRY_NEXT(entry)) { - if (entry->key_hash == key_hash && ht->compare_func(key, entry)) + if (entry->key_hash == key_hash + && ht->compare_func(key_size, pkey, entry)) break; previous = entry; } @@ -298,8 +307,8 @@ _hashtable_pop_entry(_Py_hashtable_t *ht, const void *key, void *data, size_t da /* Add a new entry to the hash. The key must not be present in the hash table. Return 0 on success, -1 on memory error. */ int -_Py_hashtable_set(_Py_hashtable_t *ht, const void *key, - void *data, size_t data_size) +_Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, + size_t data_size, void *data) { Py_uhash_t key_hash; size_t index; @@ -310,11 +319,11 @@ _Py_hashtable_set(_Py_hashtable_t *ht, const void *key, /* Don't write the assertion on a single line because it is interesting to know the duplicated entry if the assertion failed. The entry can be read using a debugger. */ - entry = _Py_hashtable_get_entry(ht, key); + entry = _Py_hashtable_get_entry(ht, key_size, pkey); assert(entry == NULL); #endif - key_hash = ht->hash_func(key); + key_hash = ht->hash_func(key_size, pkey); index = key_hash & (ht->num_buckets - 1); entry = ht->alloc.malloc(HASHTABLE_ITEM_SIZE(ht)); @@ -323,11 +332,11 @@ _Py_hashtable_set(_Py_hashtable_t *ht, const void *key, return -1; } - entry->key = (void *)key; entry->key_hash = key_hash; + memcpy(_Py_HASHTABLE_ENTRY_KEY(entry), pkey, key_size); assert(data_size == ht->data_size); - memcpy(_Py_HASHTABLE_ENTRY_DATA(entry), data, data_size); + memcpy(_Py_HASHTABLE_ENTRY_DATA(ht, entry), data, data_size); _Py_slist_prepend(&ht->buckets[index], (_Py_slist_item_t*)entry); ht->entries++; @@ -340,13 +349,14 @@ _Py_hashtable_set(_Py_hashtable_t *ht, const void *key, /* Get data from an entry. Copy entry data into data and return 1 if the entry exists, return 0 if the entry does not exist. */ int -_Py_hashtable_get(_Py_hashtable_t *ht, const void *key, void *data, size_t data_size) +_Py_hashtable_get(_Py_hashtable_t *ht, size_t key_size,const void *pkey, + size_t data_size, void *data) { _Py_hashtable_entry_t *entry; assert(data != NULL); - entry = _Py_hashtable_get_entry(ht, key); + entry = _Py_hashtable_get_entry(ht, key_size, pkey); if (entry == NULL) return 0; _Py_HASHTABLE_ENTRY_READ_DATA(ht, data, data_size, entry); @@ -354,22 +364,23 @@ _Py_hashtable_get(_Py_hashtable_t *ht, const void *key, void *data, size_t data_ } int -_Py_hashtable_pop(_Py_hashtable_t *ht, const void *key, void *data, size_t data_size) +_Py_hashtable_pop(_Py_hashtable_t *ht, size_t key_size, const void *pkey, + size_t data_size, void *data) { assert(data != NULL); assert(ht->free_data_func == NULL); - return _hashtable_pop_entry(ht, key, data, data_size); + return _hashtable_pop_entry(ht, key_size, pkey, data, data_size); } /* Delete an entry. The entry must exist. */ void -_Py_hashtable_delete(_Py_hashtable_t *ht, const void *key) +_Py_hashtable_delete(_Py_hashtable_t *ht, size_t key_size, const void *pkey) { #ifndef NDEBUG - int found = _hashtable_pop_entry(ht, key, NULL, 0); + int found = _hashtable_pop_entry(ht, key_size, pkey, NULL, 0); assert(found); #else - (void)_hashtable_pop_entry(ht, key, NULL, 0); + (void)_hashtable_pop_entry(ht, key_size, pkey, NULL, 0); #endif } @@ -378,7 +389,7 @@ _Py_hashtable_delete(_Py_hashtable_t *ht, const void *key) stops if a non-zero value is returned. */ int _Py_hashtable_foreach(_Py_hashtable_t *ht, - int (*func) (_Py_hashtable_entry_t *entry, void *arg), + _Py_hashtable_foreach_func func, void *arg) { _Py_hashtable_entry_t *entry; @@ -386,7 +397,7 @@ _Py_hashtable_foreach(_Py_hashtable_t *ht, for (hv = 0; hv < ht->num_buckets; hv++) { for (entry = TABLE_HEAD(ht, hv); entry; entry = ENTRY_NEXT(entry)) { - int res = func(entry, arg); + int res = func(ht, entry, arg); if (res) return res; } @@ -397,6 +408,7 @@ _Py_hashtable_foreach(_Py_hashtable_t *ht, static void hashtable_rehash(_Py_hashtable_t *ht) { + const size_t key_size = ht->key_size; size_t buckets_size, new_size, bucket; _Py_slist_t *old_buckets = NULL; size_t old_num_buckets; @@ -425,7 +437,8 @@ hashtable_rehash(_Py_hashtable_t *ht) for (entry = BUCKETS_HEAD(old_buckets[bucket]); entry != NULL; entry = next) { size_t entry_index; - assert(ht->hash_func(entry->key) == entry->key_hash); + + assert(ht->hash_func(key_size, _Py_HASHTABLE_ENTRY_KEY(entry)) == entry->key_hash); next = ENTRY_NEXT(entry); entry_index = entry->key_hash & (new_size - 1); @@ -446,7 +459,7 @@ _Py_hashtable_clear(_Py_hashtable_t *ht) for (entry = TABLE_HEAD(ht, i); entry != NULL; entry = next) { next = ENTRY_NEXT(entry); if (ht->free_data_func) - ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry)); + ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry)); ht->alloc.free(entry); } _Py_slist_init(&ht->buckets[i]); @@ -465,7 +478,7 @@ _Py_hashtable_destroy(_Py_hashtable_t *ht) while (entry) { _Py_slist_item_t *entry_next = entry->next; if (ht->free_data_func) - ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry)); + ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry)); ht->alloc.free(entry); entry = entry_next; } @@ -479,13 +492,16 @@ _Py_hashtable_destroy(_Py_hashtable_t *ht) _Py_hashtable_t * _Py_hashtable_copy(_Py_hashtable_t *src) { + const size_t key_size = src->key_size; + const size_t data_size = src->data_size; _Py_hashtable_t *dst; _Py_hashtable_entry_t *entry; size_t bucket; int err; void *data, *new_data; - dst = _Py_hashtable_new_full(src->data_size, src->num_buckets, + dst = _Py_hashtable_new_full(key_size, data_size, + src->num_buckets, src->hash_func, src->compare_func, src->copy_data_func, src->free_data_func, src->get_data_size_func, &src->alloc); @@ -496,17 +512,20 @@ _Py_hashtable_copy(_Py_hashtable_t *src) entry = TABLE_HEAD(src, bucket); for (; entry; entry = ENTRY_NEXT(entry)) { if (src->copy_data_func) { - data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry); + data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(src, entry); new_data = src->copy_data_func(data); if (new_data != NULL) - err = _Py_hashtable_set(dst, entry->key, - &new_data, src->data_size); + err = _Py_hashtable_set(dst, key_size, + _Py_HASHTABLE_ENTRY_KEY(entry), + data_size, &new_data); else err = 1; } else { - data = _Py_HASHTABLE_ENTRY_DATA(entry); - err = _Py_hashtable_set(dst, entry->key, data, src->data_size); + data = _Py_HASHTABLE_ENTRY_DATA(src, entry); + err = _Py_hashtable_set(dst, key_size, + _Py_HASHTABLE_ENTRY_KEY(entry), + data_size, data); } if (err) { _Py_hashtable_destroy(dst); diff --git a/Modules/hashtable.h b/Modules/hashtable.h index a9f9993bfd..aed3ed07d9 100644 --- a/Modules/hashtable.h +++ b/Modules/hashtable.h @@ -20,26 +20,31 @@ typedef struct { /* used by _Py_hashtable_t.buckets to link entries */ _Py_slist_item_t _Py_slist_item; - const void *key; Py_uhash_t key_hash; /* data follows */ } _Py_hashtable_entry_t; -#define _Py_HASHTABLE_ENTRY_DATA(ENTRY) \ - ((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t)) +#define _Py_HASHTABLE_ENTRY_KEY(ENTRY) \ + ((void *)((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t))) -#define _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ENTRY) \ - (*(void **)_Py_HASHTABLE_ENTRY_DATA(ENTRY)) +#define _Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY) \ + ((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t) + (TABLE)->key_size) + +#define _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(TABLE, ENTRY) \ + (*(void **)_Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY)) #define _Py_HASHTABLE_ENTRY_READ_DATA(TABLE, DATA, DATA_SIZE, ENTRY) \ do { \ assert((DATA_SIZE) == (TABLE)->data_size); \ - memcpy(DATA, _Py_HASHTABLE_ENTRY_DATA(ENTRY), DATA_SIZE); \ + memcpy(DATA, _Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY), DATA_SIZE); \ } while (0) -typedef Py_uhash_t (*_Py_hashtable_hash_func) (const void *key); -typedef int (*_Py_hashtable_compare_func) (const void *key, const _Py_hashtable_entry_t *he); +typedef Py_uhash_t (*_Py_hashtable_hash_func) (size_t key_size, + const void *pkey); +typedef int (*_Py_hashtable_compare_func) (size_t key_size, + const void *pkey, + const _Py_hashtable_entry_t *he); typedef void* (*_Py_hashtable_copy_data_func)(void *data); typedef void (*_Py_hashtable_free_data_func)(void *data); typedef size_t (*_Py_hashtable_get_data_size_func)(void *data); @@ -56,6 +61,7 @@ typedef struct { size_t num_buckets; size_t entries; /* Total number of entries in the table. */ _Py_slist_t *buckets; + size_t key_size; size_t data_size; _Py_hashtable_hash_func hash_func; @@ -67,15 +73,21 @@ typedef struct { } _Py_hashtable_t; /* hash and compare functions for integers and pointers */ -PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr(const void *key); -PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_int(const void *key); -PyAPI_FUNC(int) _Py_hashtable_compare_direct(const void *key, const _Py_hashtable_entry_t *entry); +PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr( + size_t key_size, + const void *pkey); +PyAPI_FUNC(int) _Py_hashtable_compare_direct( + size_t key_size, + const void *pkey, + const _Py_hashtable_entry_t *entry); PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new( + size_t key_size, size_t data_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func); PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new_full( + size_t key_size, size_t data_size, size_t init_size, _Py_hashtable_hash_func hash_func, @@ -88,40 +100,65 @@ PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_copy(_Py_hashtable_t *src); PyAPI_FUNC(void) _Py_hashtable_clear(_Py_hashtable_t *ht); PyAPI_FUNC(void) _Py_hashtable_destroy(_Py_hashtable_t *ht); -typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_entry_t *entry, void *arg); +typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_t *ht, + _Py_hashtable_entry_t *entry, + void *arg); PyAPI_FUNC(int) _Py_hashtable_foreach( _Py_hashtable_t *ht, - _Py_hashtable_foreach_func func, void *arg); + _Py_hashtable_foreach_func func, + void *arg); PyAPI_FUNC(size_t) _Py_hashtable_size(_Py_hashtable_t *ht); PyAPI_FUNC(_Py_hashtable_entry_t*) _Py_hashtable_get_entry( _Py_hashtable_t *ht, - const void *key); + size_t key_size, + const void *pkey); + +/* Don't call directly this function, + but use _Py_HASHTABLE_SET() and _Py_HASHTABLE_SET_NODATA() macros */ PyAPI_FUNC(int) _Py_hashtable_set( _Py_hashtable_t *ht, - const void *key, - void *data, - size_t data_size); + size_t key_size, + const void *pkey, + size_t data_size, + void *data); + +/* Don't call directly this function, but use _Py_HASHTABLE_GET() macro */ PyAPI_FUNC(int) _Py_hashtable_get( _Py_hashtable_t *ht, - const void *key, - void *data, - size_t data_size); + size_t key_size, + const void *pkey, + size_t data_size, + void *data); + +/* Don't call directly this function, but use _Py_HASHTABLE_POP() macro */ PyAPI_FUNC(int) _Py_hashtable_pop( _Py_hashtable_t *ht, - const void *key, - void *data, - size_t data_size); + size_t key_size, + const void *pkey, + size_t data_size, + void *data); + PyAPI_FUNC(void) _Py_hashtable_delete( _Py_hashtable_t *ht, - const void *key); + size_t key_size, + const void *pkey); #define _Py_HASHTABLE_SET(TABLE, KEY, DATA) \ - _Py_hashtable_set(TABLE, KEY, &(DATA), sizeof(DATA)) + _Py_hashtable_set(TABLE, sizeof(KEY), &KEY, sizeof(DATA), &(DATA)) + +#define _Py_HASHTABLE_SET_NODATA(TABLE, KEY) \ + _Py_hashtable_set(TABLE, sizeof(KEY), &KEY, 0, NULL) + +#define _Py_HASHTABLE_GET_ENTRY(TABLE, KEY) \ + _Py_hashtable_get_entry(TABLE, sizeof(KEY), &(KEY)) #define _Py_HASHTABLE_GET(TABLE, KEY, DATA) \ - _Py_hashtable_get(TABLE, KEY, &(DATA), sizeof(DATA)) + _Py_hashtable_get(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA)) + +#define _Py_HASHTABLE_POP(TABLE, KEY, DATA) \ + _Py_hashtable_pop(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA)) #endif /* Py_LIMITED_API */ -- cgit v1.2.1 From 8dfb07a75eb73008ce70f9dd2dbea346c0e45b18 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 21 Mar 2016 14:36:39 +0100 Subject: Ooops, revert changeset ea9efa06c137 Change pushed by mistake, the patch is still under review :-/ """ _tracemalloc: add domain to trace keys * hashtable.h: key has now a variable size * _tracemalloc uses (pointer: void*, domain: unsigned int) as key for traces """ --- Modules/_tracemalloc.c | 186 +++++++++++++------------------------------------ Modules/hashtable.c | 105 ++++++++++++---------------- Modules/hashtable.h | 89 +++++++---------------- 3 files changed, 117 insertions(+), 263 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 73aa53b76d..5752904d47 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -3,7 +3,6 @@ #include "frameobject.h" #include "pythread.h" #include "osdefs.h" -#include /* For offsetof */ /* Trace memory blocks allocated by PyMem_RawMalloc() */ #define TRACE_RAW_MALLOC @@ -55,26 +54,6 @@ static PyThread_type_lock tables_lock; # define TABLES_UNLOCK() #endif -typedef unsigned int domain_t; - -/* FIXME: pack also? */ -typedef struct { - void *ptr; - domain_t domain; -} pointer_t; - -/* Size of pointer_t content, it can be smaller than sizeof(pointer_t) */ -#define POINTER_T_SIZE \ - (offsetof(pointer_t, domain) + sizeof(domain_t)) - -#define POINTER_T_FILL_PADDING(key) \ - do { \ - if (POINTER_T_SIZE != sizeof(pointer_t)) { \ - memset((char *)&(key) + POINTER_T_SIZE, 0, \ - sizeof(pointer_t) - POINTER_T_SIZE); \ - } \ - } while (0) - /* Pack the frame_t structure to reduce the memory footprint on 64-bit architectures: 12 bytes instead of 16. This optimization might produce SIGBUS on architectures not supporting unaligned memory accesses (64-bit @@ -217,56 +196,23 @@ set_reentrant(int reentrant) } #endif -static Py_uhash_t -hashtable_hash_pointer(size_t key_size, const void *pkey) -{ - pointer_t ptr; - Py_uhash_t hash; - - assert(sizeof(ptr) == key_size); - ptr = *(pointer_t *)pkey; - - hash = (Py_uhash_t)_Py_HashPointer(ptr.ptr); - hash ^= ptr.domain; - return hash; -} - -static Py_uhash_t -hashtable_hash_pyobject(size_t key_size, const void *pkey) -{ - PyObject *obj; - - assert(key_size == sizeof(PyObject *)); - obj = *(PyObject **)pkey; - - return PyObject_Hash(obj); -} - static int -hashtable_compare_unicode(size_t key_size, const void *pkey, - const _Py_hashtable_entry_t *entry) +hashtable_compare_unicode(const void *key, const _Py_hashtable_entry_t *entry) { - PyObject *key, *entry_key; - - assert(sizeof(key) == key_size); - key = *(PyObject **)pkey; - assert(sizeof(entry_key) == key_size); - entry_key = *(PyObject **)_Py_HASHTABLE_ENTRY_KEY(entry); - - if (key != NULL && entry_key != NULL) - return (PyUnicode_Compare(key, entry_key) == 0); + if (key != NULL && entry->key != NULL) + return (PyUnicode_Compare((PyObject *)key, (PyObject *)entry->key) == 0); else - return key == entry_key; + return key == entry->key; } static _Py_hashtable_allocator_t hashtable_alloc = {malloc, free}; static _Py_hashtable_t * -hashtable_new(size_t key_size, size_t data_size, +hashtable_new(size_t data_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func) { - return _Py_hashtable_new_full(key_size, data_size, 0, + return _Py_hashtable_new_full(data_size, 0, hash_func, compare_func, NULL, NULL, NULL, &hashtable_alloc); } @@ -284,26 +230,20 @@ raw_free(void *ptr) } static Py_uhash_t -hashtable_hash_traceback(size_t key_size, const void *pkey) +hashtable_hash_traceback(const void *key) { - const traceback_t *traceback = *(const traceback_t **)pkey; - assert(key_size == sizeof(const traceback_t *)); + const traceback_t *traceback = key; return traceback->hash; } static int -hashtable_compare_traceback(size_t key_size, const void *pkey, +hashtable_compare_traceback(const traceback_t *traceback1, const _Py_hashtable_entry_t *he) { - traceback_t *traceback1, *traceback2; + const traceback_t *traceback2 = he->key; const frame_t *frame1, *frame2; int i; - assert(sizeof(traceback1) == key_size); - assert(sizeof(traceback2) == key_size); - traceback1 = *(traceback_t **)pkey; - traceback2 = *(traceback_t **)_Py_HASHTABLE_ENTRY_KEY(he); - if (traceback1->nframe != traceback2->nframe) return 0; @@ -372,16 +312,15 @@ tracemalloc_get_frame(PyFrameObject *pyframe, frame_t *frame) } /* intern the filename */ - entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_filenames, filename); + entry = _Py_hashtable_get_entry(tracemalloc_filenames, filename); if (entry != NULL) { - assert(sizeof(filename) == tracemalloc_filenames->key_size); - filename = *(PyObject **)_Py_HASHTABLE_ENTRY_KEY(entry); + filename = (PyObject *)entry->key; } else { /* tracemalloc_filenames is responsible to keep a reference to the filename */ Py_INCREF(filename); - if (_Py_HASHTABLE_SET_NODATA(tracemalloc_filenames, filename) < 0) { + if (_Py_hashtable_set(tracemalloc_filenames, filename, NULL, 0) < 0) { Py_DECREF(filename); #ifdef TRACE_DEBUG tracemalloc_error("failed to intern the filename"); @@ -464,10 +403,9 @@ traceback_new(void) traceback->hash = traceback_hash(traceback); /* intern the traceback */ - entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_tracebacks, traceback); + entry = _Py_hashtable_get_entry(tracemalloc_tracebacks, traceback); if (entry != NULL) { - assert(sizeof(traceback) == tracemalloc_tracebacks->key_size); - traceback = *(traceback_t **)_Py_HASHTABLE_ENTRY_KEY(entry); + traceback = (traceback_t *)entry->key; } else { traceback_t *copy; @@ -484,7 +422,7 @@ traceback_new(void) } memcpy(copy, traceback, traceback_size); - if (_Py_HASHTABLE_SET_NODATA(tracemalloc_tracebacks, copy) < 0) { + if (_Py_hashtable_set(tracemalloc_tracebacks, copy, NULL, 0) < 0) { raw_free(copy); #ifdef TRACE_DEBUG tracemalloc_error("failed to intern the traceback: putdata failed"); @@ -497,9 +435,8 @@ traceback_new(void) } static int -tracemalloc_add_trace(void *ptr, domain_t domain, size_t size) +tracemalloc_add_trace(void *ptr, size_t size) { - pointer_t key; traceback_t *traceback; trace_t trace; int res; @@ -508,14 +445,10 @@ tracemalloc_add_trace(void *ptr, domain_t domain, size_t size) if (traceback == NULL) return -1; - key.ptr = ptr; - key.domain = 0; - POINTER_T_FILL_PADDING(key); - trace.size = size; trace.traceback = traceback; - res = _Py_HASHTABLE_SET(tracemalloc_traces, key, trace); + res = _Py_HASHTABLE_SET(tracemalloc_traces, ptr, trace); if (res == 0) { assert(tracemalloc_traced_memory <= PY_SIZE_MAX - size); tracemalloc_traced_memory += size; @@ -527,16 +460,11 @@ tracemalloc_add_trace(void *ptr, domain_t domain, size_t size) } static void -tracemalloc_remove_trace(void *ptr, domain_t domain) +tracemalloc_remove_trace(void *ptr) { - pointer_t key; trace_t trace; - key.ptr = ptr; - key.domain = domain; - POINTER_T_FILL_PADDING(key); - - if (_Py_HASHTABLE_POP(tracemalloc_traces, key, trace)) { + if (_Py_hashtable_pop(tracemalloc_traces, ptr, &trace, sizeof(trace))) { assert(tracemalloc_traced_memory >= trace.size); tracemalloc_traced_memory -= trace.size; } @@ -558,7 +486,7 @@ tracemalloc_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) return NULL; TABLES_LOCK(); - if (tracemalloc_add_trace(ptr, 0, nelem * elsize) < 0) { + if (tracemalloc_add_trace(ptr, nelem * elsize) < 0) { /* Failed to allocate a trace for the new memory block */ TABLES_UNLOCK(); alloc->free(alloc->ctx, ptr); @@ -582,9 +510,9 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) /* an existing memory block has been resized */ TABLES_LOCK(); - tracemalloc_remove_trace(ptr, 0); + tracemalloc_remove_trace(ptr); - if (tracemalloc_add_trace(ptr2, 0, new_size) < 0) { + if (tracemalloc_add_trace(ptr2, new_size) < 0) { /* Memory allocation failed. The error cannot be reported to the caller, because realloc() may already have shrinked the memory block and so removed bytes. @@ -602,7 +530,7 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) /* new allocation */ TABLES_LOCK(); - if (tracemalloc_add_trace(ptr2, 0, new_size) < 0) { + if (tracemalloc_add_trace(ptr2, new_size) < 0) { /* Failed to allocate a trace for the new memory block */ TABLES_UNLOCK(); alloc->free(alloc->ctx, ptr2); @@ -627,7 +555,7 @@ tracemalloc_free(void *ctx, void *ptr) alloc->free(alloc->ctx, ptr); TABLES_LOCK(); - tracemalloc_remove_trace(ptr, 0); + tracemalloc_remove_trace(ptr); TABLES_UNLOCK(); } @@ -682,7 +610,7 @@ tracemalloc_realloc_gil(void *ctx, void *ptr, size_t new_size) ptr2 = alloc->realloc(alloc->ctx, ptr, new_size); if (ptr2 != NULL && ptr != NULL) { TABLES_LOCK(); - tracemalloc_remove_trace(ptr, 0); + tracemalloc_remove_trace(ptr); TABLES_UNLOCK(); } return ptr2; @@ -761,7 +689,7 @@ tracemalloc_raw_realloc(void *ctx, void *ptr, size_t new_size) if (ptr2 != NULL && ptr != NULL) { TABLES_LOCK(); - tracemalloc_remove_trace(ptr, 0); + tracemalloc_remove_trace(ptr); TABLES_UNLOCK(); } return ptr2; @@ -786,27 +714,17 @@ tracemalloc_raw_realloc(void *ctx, void *ptr, size_t new_size) #endif /* TRACE_RAW_MALLOC */ static int -tracemalloc_clear_filename(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, - void *user_data) +tracemalloc_clear_filename(_Py_hashtable_entry_t *entry, void *user_data) { - PyObject *filename; - - assert(sizeof(filename) == ht->key_size); - filename = *(PyObject **)_Py_HASHTABLE_ENTRY_KEY(entry); - + PyObject *filename = (PyObject *)entry->key; Py_DECREF(filename); return 0; } static int -traceback_free_traceback(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, - void *user_data) +traceback_free_traceback(_Py_hashtable_entry_t *entry, void *user_data) { - traceback_t *traceback; - - assert(sizeof(traceback) == ht->key_size); - traceback = *(traceback_t **)_Py_HASHTABLE_ENTRY_KEY(entry); - + traceback_t *traceback = (traceback_t *)entry->key; raw_free(traceback); return 0; } @@ -873,16 +791,16 @@ tracemalloc_init(void) } #endif - tracemalloc_filenames = hashtable_new(sizeof(PyObject *), 0, - hashtable_hash_pyobject, + tracemalloc_filenames = hashtable_new(0, + (_Py_hashtable_hash_func)PyObject_Hash, hashtable_compare_unicode); - tracemalloc_tracebacks = hashtable_new(sizeof(traceback_t *), 0, - hashtable_hash_traceback, - hashtable_compare_traceback); + tracemalloc_tracebacks = hashtable_new(0, + (_Py_hashtable_hash_func)hashtable_hash_traceback, + (_Py_hashtable_compare_func)hashtable_compare_traceback); - tracemalloc_traces = hashtable_new(sizeof(pointer_t), sizeof(trace_t), - hashtable_hash_pointer, + tracemalloc_traces = hashtable_new(sizeof(trace_t), + _Py_hashtable_hash_ptr, _Py_hashtable_compare_direct); if (tracemalloc_filenames == NULL || tracemalloc_tracebacks == NULL @@ -1147,15 +1065,14 @@ typedef struct { } get_traces_t; static int -tracemalloc_get_traces_fill(_Py_hashtable_t *traces, _Py_hashtable_entry_t *entry, - void *user_data) +tracemalloc_get_traces_fill(_Py_hashtable_entry_t *entry, void *user_data) { get_traces_t *get_traces = user_data; trace_t *trace; PyObject *tracemalloc_obj; int res; - trace = (trace_t *)_Py_HASHTABLE_ENTRY_DATA(traces, entry); + trace = (trace_t *)_Py_HASHTABLE_ENTRY_DATA(entry); tracemalloc_obj = trace_to_pyobject(trace, get_traces->tracebacks); if (tracemalloc_obj == NULL) @@ -1170,11 +1087,9 @@ tracemalloc_get_traces_fill(_Py_hashtable_t *traces, _Py_hashtable_entry_t *entr } static int -tracemalloc_pyobject_decref_cb(_Py_hashtable_t *tracebacks, - _Py_hashtable_entry_t *entry, - void *user_data) +tracemalloc_pyobject_decref_cb(_Py_hashtable_entry_t *entry, void *user_data) { - PyObject *obj = (PyObject *)_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(tracebacks, entry); + PyObject *obj = (PyObject *)_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry); Py_DECREF(obj); return 0; } @@ -1205,7 +1120,7 @@ py_tracemalloc_get_traces(PyObject *self, PyObject *obj) /* the traceback hash table is used temporarily to intern traceback tuple of (filename, lineno) tuples */ - get_traces.tracebacks = hashtable_new(sizeof(traceback_t *), sizeof(PyObject *), + get_traces.tracebacks = hashtable_new(sizeof(PyObject *), _Py_hashtable_hash_ptr, _Py_hashtable_compare_direct); if (get_traces.tracebacks == NULL) { @@ -1237,7 +1152,7 @@ error: finally: if (get_traces.tracebacks != NULL) { _Py_hashtable_foreach(get_traces.tracebacks, - tracemalloc_pyobject_decref_cb, NULL); + tracemalloc_pyobject_decref_cb, NULL); _Py_hashtable_destroy(get_traces.tracebacks); } if (get_traces.traces != NULL) @@ -1247,21 +1162,16 @@ finally: } static traceback_t* -tracemalloc_get_traceback(const void *ptr, domain_t domain) +tracemalloc_get_traceback(const void *ptr) { - pointer_t key; trace_t trace; int found; if (!tracemalloc_config.tracing) return NULL; - key.ptr = (void *)ptr; - key.domain = domain; - POINTER_T_FILL_PADDING(key); - TABLES_LOCK(); - found = _Py_HASHTABLE_GET(tracemalloc_traces, key, trace); + found = _Py_HASHTABLE_GET(tracemalloc_traces, ptr, trace); TABLES_UNLOCK(); if (!found) @@ -1292,7 +1202,7 @@ py_tracemalloc_get_object_traceback(PyObject *self, PyObject *obj) else ptr = (void *)obj; - traceback = tracemalloc_get_traceback(ptr, 0); + traceback = tracemalloc_get_traceback(ptr); if (traceback == NULL) Py_RETURN_NONE; @@ -1319,7 +1229,7 @@ _PyMem_DumpTraceback(int fd, const void *ptr) traceback_t *traceback; int i; - traceback = tracemalloc_get_traceback(ptr, 0); + traceback = tracemalloc_get_traceback(ptr); if (traceback == NULL) return; diff --git a/Modules/hashtable.c b/Modules/hashtable.c index 002c0a9342..7de154b70a 100644 --- a/Modules/hashtable.c +++ b/Modules/hashtable.c @@ -59,7 +59,7 @@ #define ENTRY_NEXT(ENTRY) \ ((_Py_hashtable_entry_t *)_Py_SLIST_ITEM_NEXT(ENTRY)) #define HASHTABLE_ITEM_SIZE(HT) \ - (sizeof(_Py_hashtable_entry_t) + (HT)->key_size + (HT)->data_size) + (sizeof(_Py_hashtable_entry_t) + (HT)->data_size) /* Forward declaration */ static void hashtable_rehash(_Py_hashtable_t *ht); @@ -88,21 +88,21 @@ _Py_slist_remove(_Py_slist_t *list, _Py_slist_item_t *previous, } Py_uhash_t -_Py_hashtable_hash_ptr(size_t key_size, const void *pkey) +_Py_hashtable_hash_int(const void *key) { - void *key; - - assert(key_size == sizeof(void *)); - key = *(void**)pkey; + return (Py_uhash_t)key; +} +Py_uhash_t +_Py_hashtable_hash_ptr(const void *key) +{ return (Py_uhash_t)_Py_HashPointer((void *)key); } int -_Py_hashtable_compare_direct(size_t key_size, const void *pkey, - const _Py_hashtable_entry_t *entry) +_Py_hashtable_compare_direct(const void *key, const _Py_hashtable_entry_t *entry) { - return (memcmp(pkey, _Py_HASHTABLE_ENTRY_KEY(entry), key_size) == 0); + return entry->key == key; } /* makes sure the real size of the buckets array is a power of 2 */ @@ -119,8 +119,7 @@ round_size(size_t s) } _Py_hashtable_t * -_Py_hashtable_new_full(size_t key_size, size_t data_size, - size_t init_size, +_Py_hashtable_new_full(size_t data_size, size_t init_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func, _Py_hashtable_copy_data_func copy_data_func, @@ -145,7 +144,6 @@ _Py_hashtable_new_full(size_t key_size, size_t data_size, ht->num_buckets = round_size(init_size); ht->entries = 0; - ht->key_size = key_size; ht->data_size = data_size; buckets_size = ht->num_buckets * sizeof(ht->buckets[0]); @@ -166,12 +164,11 @@ _Py_hashtable_new_full(size_t key_size, size_t data_size, } _Py_hashtable_t * -_Py_hashtable_new(size_t key_size, size_t data_size, +_Py_hashtable_new(size_t data_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func) { - return _Py_hashtable_new_full(key_size, data_size, - HASHTABLE_MIN_SIZE, + return _Py_hashtable_new_full(data_size, HASHTABLE_MIN_SIZE, hash_func, compare_func, NULL, NULL, NULL, NULL); } @@ -198,7 +195,7 @@ _Py_hashtable_size(_Py_hashtable_t *ht) for (entry = TABLE_HEAD(ht, hv); entry; entry = ENTRY_NEXT(entry)) { void *data; - data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry); + data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry); size += ht->get_data_size_func(data); } } @@ -248,21 +245,17 @@ _Py_hashtable_print_stats(_Py_hashtable_t *ht) /* Get an entry. Return NULL if the key does not exist. */ _Py_hashtable_entry_t * -_Py_hashtable_get_entry(_Py_hashtable_t *ht, - size_t key_size, const void *pkey) +_Py_hashtable_get_entry(_Py_hashtable_t *ht, const void *key) { Py_uhash_t key_hash; size_t index; _Py_hashtable_entry_t *entry; - assert(key_size == ht->key_size); - - key_hash = ht->hash_func(key_size, pkey); + key_hash = ht->hash_func(key); index = key_hash & (ht->num_buckets - 1); for (entry = TABLE_HEAD(ht, index); entry != NULL; entry = ENTRY_NEXT(entry)) { - if (entry->key_hash == key_hash - && ht->compare_func(key_size, pkey, entry)) + if (entry->key_hash == key_hash && ht->compare_func(key, entry)) break; } @@ -270,20 +263,18 @@ _Py_hashtable_get_entry(_Py_hashtable_t *ht, } static int -_hashtable_pop_entry(_Py_hashtable_t *ht, size_t key_size, const void *pkey, - void *data, size_t data_size) +_hashtable_pop_entry(_Py_hashtable_t *ht, const void *key, void *data, size_t data_size) { Py_uhash_t key_hash; size_t index; _Py_hashtable_entry_t *entry, *previous; - key_hash = ht->hash_func(key_size, pkey); + key_hash = ht->hash_func(key); index = key_hash & (ht->num_buckets - 1); previous = NULL; for (entry = TABLE_HEAD(ht, index); entry != NULL; entry = ENTRY_NEXT(entry)) { - if (entry->key_hash == key_hash - && ht->compare_func(key_size, pkey, entry)) + if (entry->key_hash == key_hash && ht->compare_func(key, entry)) break; previous = entry; } @@ -307,8 +298,8 @@ _hashtable_pop_entry(_Py_hashtable_t *ht, size_t key_size, const void *pkey, /* Add a new entry to the hash. The key must not be present in the hash table. Return 0 on success, -1 on memory error. */ int -_Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, - size_t data_size, void *data) +_Py_hashtable_set(_Py_hashtable_t *ht, const void *key, + void *data, size_t data_size) { Py_uhash_t key_hash; size_t index; @@ -319,11 +310,11 @@ _Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, /* Don't write the assertion on a single line because it is interesting to know the duplicated entry if the assertion failed. The entry can be read using a debugger. */ - entry = _Py_hashtable_get_entry(ht, key_size, pkey); + entry = _Py_hashtable_get_entry(ht, key); assert(entry == NULL); #endif - key_hash = ht->hash_func(key_size, pkey); + key_hash = ht->hash_func(key); index = key_hash & (ht->num_buckets - 1); entry = ht->alloc.malloc(HASHTABLE_ITEM_SIZE(ht)); @@ -332,11 +323,11 @@ _Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, return -1; } + entry->key = (void *)key; entry->key_hash = key_hash; - memcpy(_Py_HASHTABLE_ENTRY_KEY(entry), pkey, key_size); assert(data_size == ht->data_size); - memcpy(_Py_HASHTABLE_ENTRY_DATA(ht, entry), data, data_size); + memcpy(_Py_HASHTABLE_ENTRY_DATA(entry), data, data_size); _Py_slist_prepend(&ht->buckets[index], (_Py_slist_item_t*)entry); ht->entries++; @@ -349,14 +340,13 @@ _Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, /* Get data from an entry. Copy entry data into data and return 1 if the entry exists, return 0 if the entry does not exist. */ int -_Py_hashtable_get(_Py_hashtable_t *ht, size_t key_size,const void *pkey, - size_t data_size, void *data) +_Py_hashtable_get(_Py_hashtable_t *ht, const void *key, void *data, size_t data_size) { _Py_hashtable_entry_t *entry; assert(data != NULL); - entry = _Py_hashtable_get_entry(ht, key_size, pkey); + entry = _Py_hashtable_get_entry(ht, key); if (entry == NULL) return 0; _Py_HASHTABLE_ENTRY_READ_DATA(ht, data, data_size, entry); @@ -364,23 +354,22 @@ _Py_hashtable_get(_Py_hashtable_t *ht, size_t key_size,const void *pkey, } int -_Py_hashtable_pop(_Py_hashtable_t *ht, size_t key_size, const void *pkey, - size_t data_size, void *data) +_Py_hashtable_pop(_Py_hashtable_t *ht, const void *key, void *data, size_t data_size) { assert(data != NULL); assert(ht->free_data_func == NULL); - return _hashtable_pop_entry(ht, key_size, pkey, data, data_size); + return _hashtable_pop_entry(ht, key, data, data_size); } /* Delete an entry. The entry must exist. */ void -_Py_hashtable_delete(_Py_hashtable_t *ht, size_t key_size, const void *pkey) +_Py_hashtable_delete(_Py_hashtable_t *ht, const void *key) { #ifndef NDEBUG - int found = _hashtable_pop_entry(ht, key_size, pkey, NULL, 0); + int found = _hashtable_pop_entry(ht, key, NULL, 0); assert(found); #else - (void)_hashtable_pop_entry(ht, key_size, pkey, NULL, 0); + (void)_hashtable_pop_entry(ht, key, NULL, 0); #endif } @@ -389,7 +378,7 @@ _Py_hashtable_delete(_Py_hashtable_t *ht, size_t key_size, const void *pkey) stops if a non-zero value is returned. */ int _Py_hashtable_foreach(_Py_hashtable_t *ht, - _Py_hashtable_foreach_func func, + int (*func) (_Py_hashtable_entry_t *entry, void *arg), void *arg) { _Py_hashtable_entry_t *entry; @@ -397,7 +386,7 @@ _Py_hashtable_foreach(_Py_hashtable_t *ht, for (hv = 0; hv < ht->num_buckets; hv++) { for (entry = TABLE_HEAD(ht, hv); entry; entry = ENTRY_NEXT(entry)) { - int res = func(ht, entry, arg); + int res = func(entry, arg); if (res) return res; } @@ -408,7 +397,6 @@ _Py_hashtable_foreach(_Py_hashtable_t *ht, static void hashtable_rehash(_Py_hashtable_t *ht) { - const size_t key_size = ht->key_size; size_t buckets_size, new_size, bucket; _Py_slist_t *old_buckets = NULL; size_t old_num_buckets; @@ -437,8 +425,7 @@ hashtable_rehash(_Py_hashtable_t *ht) for (entry = BUCKETS_HEAD(old_buckets[bucket]); entry != NULL; entry = next) { size_t entry_index; - - assert(ht->hash_func(key_size, _Py_HASHTABLE_ENTRY_KEY(entry)) == entry->key_hash); + assert(ht->hash_func(entry->key) == entry->key_hash); next = ENTRY_NEXT(entry); entry_index = entry->key_hash & (new_size - 1); @@ -459,7 +446,7 @@ _Py_hashtable_clear(_Py_hashtable_t *ht) for (entry = TABLE_HEAD(ht, i); entry != NULL; entry = next) { next = ENTRY_NEXT(entry); if (ht->free_data_func) - ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry)); + ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry)); ht->alloc.free(entry); } _Py_slist_init(&ht->buckets[i]); @@ -478,7 +465,7 @@ _Py_hashtable_destroy(_Py_hashtable_t *ht) while (entry) { _Py_slist_item_t *entry_next = entry->next; if (ht->free_data_func) - ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry)); + ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry)); ht->alloc.free(entry); entry = entry_next; } @@ -492,16 +479,13 @@ _Py_hashtable_destroy(_Py_hashtable_t *ht) _Py_hashtable_t * _Py_hashtable_copy(_Py_hashtable_t *src) { - const size_t key_size = src->key_size; - const size_t data_size = src->data_size; _Py_hashtable_t *dst; _Py_hashtable_entry_t *entry; size_t bucket; int err; void *data, *new_data; - dst = _Py_hashtable_new_full(key_size, data_size, - src->num_buckets, + dst = _Py_hashtable_new_full(src->data_size, src->num_buckets, src->hash_func, src->compare_func, src->copy_data_func, src->free_data_func, src->get_data_size_func, &src->alloc); @@ -512,20 +496,17 @@ _Py_hashtable_copy(_Py_hashtable_t *src) entry = TABLE_HEAD(src, bucket); for (; entry; entry = ENTRY_NEXT(entry)) { if (src->copy_data_func) { - data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(src, entry); + data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry); new_data = src->copy_data_func(data); if (new_data != NULL) - err = _Py_hashtable_set(dst, key_size, - _Py_HASHTABLE_ENTRY_KEY(entry), - data_size, &new_data); + err = _Py_hashtable_set(dst, entry->key, + &new_data, src->data_size); else err = 1; } else { - data = _Py_HASHTABLE_ENTRY_DATA(src, entry); - err = _Py_hashtable_set(dst, key_size, - _Py_HASHTABLE_ENTRY_KEY(entry), - data_size, data); + data = _Py_HASHTABLE_ENTRY_DATA(entry); + err = _Py_hashtable_set(dst, entry->key, data, src->data_size); } if (err) { _Py_hashtable_destroy(dst); diff --git a/Modules/hashtable.h b/Modules/hashtable.h index aed3ed07d9..a9f9993bfd 100644 --- a/Modules/hashtable.h +++ b/Modules/hashtable.h @@ -20,31 +20,26 @@ typedef struct { /* used by _Py_hashtable_t.buckets to link entries */ _Py_slist_item_t _Py_slist_item; + const void *key; Py_uhash_t key_hash; /* data follows */ } _Py_hashtable_entry_t; -#define _Py_HASHTABLE_ENTRY_KEY(ENTRY) \ - ((void *)((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t))) +#define _Py_HASHTABLE_ENTRY_DATA(ENTRY) \ + ((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t)) -#define _Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY) \ - ((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t) + (TABLE)->key_size) - -#define _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(TABLE, ENTRY) \ - (*(void **)_Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY)) +#define _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ENTRY) \ + (*(void **)_Py_HASHTABLE_ENTRY_DATA(ENTRY)) #define _Py_HASHTABLE_ENTRY_READ_DATA(TABLE, DATA, DATA_SIZE, ENTRY) \ do { \ assert((DATA_SIZE) == (TABLE)->data_size); \ - memcpy(DATA, _Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY), DATA_SIZE); \ + memcpy(DATA, _Py_HASHTABLE_ENTRY_DATA(ENTRY), DATA_SIZE); \ } while (0) -typedef Py_uhash_t (*_Py_hashtable_hash_func) (size_t key_size, - const void *pkey); -typedef int (*_Py_hashtable_compare_func) (size_t key_size, - const void *pkey, - const _Py_hashtable_entry_t *he); +typedef Py_uhash_t (*_Py_hashtable_hash_func) (const void *key); +typedef int (*_Py_hashtable_compare_func) (const void *key, const _Py_hashtable_entry_t *he); typedef void* (*_Py_hashtable_copy_data_func)(void *data); typedef void (*_Py_hashtable_free_data_func)(void *data); typedef size_t (*_Py_hashtable_get_data_size_func)(void *data); @@ -61,7 +56,6 @@ typedef struct { size_t num_buckets; size_t entries; /* Total number of entries in the table. */ _Py_slist_t *buckets; - size_t key_size; size_t data_size; _Py_hashtable_hash_func hash_func; @@ -73,21 +67,15 @@ typedef struct { } _Py_hashtable_t; /* hash and compare functions for integers and pointers */ -PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr( - size_t key_size, - const void *pkey); -PyAPI_FUNC(int) _Py_hashtable_compare_direct( - size_t key_size, - const void *pkey, - const _Py_hashtable_entry_t *entry); +PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr(const void *key); +PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_int(const void *key); +PyAPI_FUNC(int) _Py_hashtable_compare_direct(const void *key, const _Py_hashtable_entry_t *entry); PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new( - size_t key_size, size_t data_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func); PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new_full( - size_t key_size, size_t data_size, size_t init_size, _Py_hashtable_hash_func hash_func, @@ -100,65 +88,40 @@ PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_copy(_Py_hashtable_t *src); PyAPI_FUNC(void) _Py_hashtable_clear(_Py_hashtable_t *ht); PyAPI_FUNC(void) _Py_hashtable_destroy(_Py_hashtable_t *ht); -typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_t *ht, - _Py_hashtable_entry_t *entry, - void *arg); +typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_entry_t *entry, void *arg); PyAPI_FUNC(int) _Py_hashtable_foreach( _Py_hashtable_t *ht, - _Py_hashtable_foreach_func func, - void *arg); + _Py_hashtable_foreach_func func, void *arg); PyAPI_FUNC(size_t) _Py_hashtable_size(_Py_hashtable_t *ht); PyAPI_FUNC(_Py_hashtable_entry_t*) _Py_hashtable_get_entry( _Py_hashtable_t *ht, - size_t key_size, - const void *pkey); - -/* Don't call directly this function, - but use _Py_HASHTABLE_SET() and _Py_HASHTABLE_SET_NODATA() macros */ + const void *key); PyAPI_FUNC(int) _Py_hashtable_set( _Py_hashtable_t *ht, - size_t key_size, - const void *pkey, - size_t data_size, - void *data); - -/* Don't call directly this function, but use _Py_HASHTABLE_GET() macro */ + const void *key, + void *data, + size_t data_size); PyAPI_FUNC(int) _Py_hashtable_get( _Py_hashtable_t *ht, - size_t key_size, - const void *pkey, - size_t data_size, - void *data); - -/* Don't call directly this function, but use _Py_HASHTABLE_POP() macro */ + const void *key, + void *data, + size_t data_size); PyAPI_FUNC(int) _Py_hashtable_pop( _Py_hashtable_t *ht, - size_t key_size, - const void *pkey, - size_t data_size, - void *data); - + const void *key, + void *data, + size_t data_size); PyAPI_FUNC(void) _Py_hashtable_delete( _Py_hashtable_t *ht, - size_t key_size, - const void *pkey); + const void *key); #define _Py_HASHTABLE_SET(TABLE, KEY, DATA) \ - _Py_hashtable_set(TABLE, sizeof(KEY), &KEY, sizeof(DATA), &(DATA)) - -#define _Py_HASHTABLE_SET_NODATA(TABLE, KEY) \ - _Py_hashtable_set(TABLE, sizeof(KEY), &KEY, 0, NULL) - -#define _Py_HASHTABLE_GET_ENTRY(TABLE, KEY) \ - _Py_hashtable_get_entry(TABLE, sizeof(KEY), &(KEY)) + _Py_hashtable_set(TABLE, KEY, &(DATA), sizeof(DATA)) #define _Py_HASHTABLE_GET(TABLE, KEY, DATA) \ - _Py_hashtable_get(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA)) - -#define _Py_HASHTABLE_POP(TABLE, KEY, DATA) \ - _Py_hashtable_pop(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA)) + _Py_hashtable_get(TABLE, KEY, &(DATA), sizeof(DATA)) #endif /* Py_LIMITED_API */ -- cgit v1.2.1 From 83b687215d79ae5893ffd419863423767f043661 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 21 Mar 2016 16:36:48 +0100 Subject: Add socket finalizer Issue #26590: Implement a safe finalizer for the _socket.socket type. It now releases the GIL to close the socket. Use PyErr_ResourceWarning() to raise the ResourceWarning to pass the socket object to the warning logger, to get the traceback where the socket was created (allocated). --- Modules/socketmodule.c | 71 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 18 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 77a6b313b0..ba3cefd177 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2564,12 +2564,14 @@ sock_close(PySocketSockObject *s) { SOCKET_T fd; - /* We do not want to retry upon EINTR: see http://lwn.net/Articles/576478/ - * and http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html - * for more details. - */ - if ((fd = s->sock_fd) != -1) { + fd = s->sock_fd; + if (fd != -1) { s->sock_fd = -1; + + /* We do not want to retry upon EINTR: see + http://lwn.net/Articles/576478/ and + http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html + for more details. */ Py_BEGIN_ALLOW_THREADS (void) SOCKETCLOSE(fd); Py_END_ALLOW_THREADS @@ -4163,22 +4165,45 @@ static PyGetSetDef sock_getsetlist[] = { First close the file description. */ static void -sock_dealloc(PySocketSockObject *s) +sock_finalize(PySocketSockObject *s) { + SOCKET_T fd; + PyObject *error_type, *error_value, *error_traceback; + + /* Save the current exception, if any. */ + PyErr_Fetch(&error_type, &error_value, &error_traceback); + if (s->sock_fd != -1) { - PyObject *exc, *val, *tb; - Py_ssize_t old_refcount = Py_REFCNT(s); - ++Py_REFCNT(s); - PyErr_Fetch(&exc, &val, &tb); - if (PyErr_WarnFormat(PyExc_ResourceWarning, 1, - "unclosed %R", s)) + if (PyErr_ResourceWarning((PyObject *)s, 1, "unclosed %R", s)) { /* Spurious errors can appear at shutdown */ - if (PyErr_ExceptionMatches(PyExc_Warning)) - PyErr_WriteUnraisable((PyObject *) s); - PyErr_Restore(exc, val, tb); - (void) SOCKETCLOSE(s->sock_fd); - Py_REFCNT(s) = old_refcount; + if (PyErr_ExceptionMatches(PyExc_Warning)) { + PyErr_WriteUnraisable((PyObject *)s); + } + } + + /* Only close the socket *after* logging the ResourceWarning warning + to allow the logger to call socket methods like + socket.getsockname(). If the socket is closed before, socket + methods fails with the EBADF error. */ + fd = s->sock_fd; + s->sock_fd = -1; + + /* We do not want to retry upon EINTR: see sock_close() */ + Py_BEGIN_ALLOW_THREADS + (void) SOCKETCLOSE(fd); + Py_END_ALLOW_THREADS } + + /* Restore the saved exception. */ + PyErr_Restore(error_type, error_value, error_traceback); +} + +static void +sock_dealloc(PySocketSockObject *s) +{ + if (PyObject_CallFinalizerFromDealloc((PyObject *)s) < 0) + return; + Py_TYPE(s)->tp_free((PyObject *)s); } @@ -4395,7 +4420,8 @@ static PyTypeObject sock_type = { PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE + | Py_TPFLAGS_HAVE_FINALIZE, /* tp_flags */ sock_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ @@ -4415,6 +4441,15 @@ static PyTypeObject sock_type = { PyType_GenericAlloc, /* tp_alloc */ sock_new, /* tp_new */ PyObject_Del, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ + 0, /* tp_del */ + 0, /* tp_version_tag */ + (destructor)sock_finalize, /* tp_finalize */ }; -- cgit v1.2.1 From d7dada55a8f204345b6d5e1dc8c127ebf7e0efe9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 19 Mar 2016 10:36:36 +0100 Subject: cleanup iobase.c casting iobase_finalize to destructor is not needed --- Modules/_io/iobase.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index 025007e40d..e289a10d96 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -827,7 +827,7 @@ PyTypeObject PyIOBase_Type = { 0, /* tp_weaklist */ 0, /* tp_del */ 0, /* tp_version_tag */ - (destructor)iobase_finalize, /* tp_finalize */ + iobase_finalize, /* tp_finalize */ }; -- cgit v1.2.1 From c444230504eb916c4762c632bc724b3c27725a89 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 21 Mar 2016 22:00:58 +0100 Subject: hashtable.h now supports keys of any size Issue #26588: hashtable.h now supports keys of any size, not only sizeof(void*). It allows to support key larger than sizeof(void*), but also to use less memory for key smaller than sizeof(void*). --- Modules/_tracemalloc.c | 105 ++++++++++++++++++++----------- Modules/hashtable.c | 147 ++++++++++++++++++++++++++----------------- Modules/hashtable.h | 165 +++++++++++++++++++++++++++++++++++++------------ 3 files changed, 284 insertions(+), 133 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 5752904d47..6799eb6b64 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -196,23 +196,38 @@ set_reentrant(int reentrant) } #endif +static Py_uhash_t +hashtable_hash_pyobject(size_t key_size, const void *pkey) +{ + PyObject *obj; + + _Py_HASHTABLE_READ_KEY(key_size, pkey, obj); + return PyObject_Hash(obj); +} + static int -hashtable_compare_unicode(const void *key, const _Py_hashtable_entry_t *entry) +hashtable_compare_unicode(size_t key_size, const void *pkey, + const _Py_hashtable_entry_t *entry) { - if (key != NULL && entry->key != NULL) - return (PyUnicode_Compare((PyObject *)key, (PyObject *)entry->key) == 0); + PyObject *key, *entry_key; + + _Py_HASHTABLE_READ_KEY(key_size, pkey, key); + _Py_HASHTABLE_ENTRY_READ_KEY(key_size, entry, entry_key); + + if (key != NULL && entry_key != NULL) + return (PyUnicode_Compare(key, entry_key) == 0); else - return key == entry->key; + return key == entry_key; } static _Py_hashtable_allocator_t hashtable_alloc = {malloc, free}; static _Py_hashtable_t * -hashtable_new(size_t data_size, +hashtable_new(size_t key_size, size_t data_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func) { - return _Py_hashtable_new_full(data_size, 0, + return _Py_hashtable_new_full(key_size, data_size, 0, hash_func, compare_func, NULL, NULL, NULL, &hashtable_alloc); } @@ -230,20 +245,25 @@ raw_free(void *ptr) } static Py_uhash_t -hashtable_hash_traceback(const void *key) +hashtable_hash_traceback(size_t key_size, const void *pkey) { - const traceback_t *traceback = key; + const traceback_t *traceback; + + _Py_HASHTABLE_READ_KEY(key_size, pkey, traceback); return traceback->hash; } static int -hashtable_compare_traceback(const traceback_t *traceback1, +hashtable_compare_traceback(size_t key_size, const void *pkey, const _Py_hashtable_entry_t *he) { - const traceback_t *traceback2 = he->key; + traceback_t *traceback1, *traceback2; const frame_t *frame1, *frame2; int i; + _Py_HASHTABLE_READ_KEY(key_size, pkey, traceback1); + _Py_HASHTABLE_ENTRY_READ_KEY(key_size, he, traceback2); + if (traceback1->nframe != traceback2->nframe) return 0; @@ -312,15 +332,16 @@ tracemalloc_get_frame(PyFrameObject *pyframe, frame_t *frame) } /* intern the filename */ - entry = _Py_hashtable_get_entry(tracemalloc_filenames, filename); + entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_filenames, filename); if (entry != NULL) { - filename = (PyObject *)entry->key; + _Py_HASHTABLE_ENTRY_READ_KEY(tracemalloc_filenames->key_size, entry, + filename); } else { /* tracemalloc_filenames is responsible to keep a reference to the filename */ Py_INCREF(filename); - if (_Py_hashtable_set(tracemalloc_filenames, filename, NULL, 0) < 0) { + if (_Py_HASHTABLE_SET_NODATA(tracemalloc_filenames, filename) < 0) { Py_DECREF(filename); #ifdef TRACE_DEBUG tracemalloc_error("failed to intern the filename"); @@ -403,9 +424,10 @@ traceback_new(void) traceback->hash = traceback_hash(traceback); /* intern the traceback */ - entry = _Py_hashtable_get_entry(tracemalloc_tracebacks, traceback); + entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_tracebacks, traceback); if (entry != NULL) { - traceback = (traceback_t *)entry->key; + _Py_HASHTABLE_ENTRY_READ_KEY(tracemalloc_tracebacks->key_size, entry, + traceback); } else { traceback_t *copy; @@ -422,7 +444,7 @@ traceback_new(void) } memcpy(copy, traceback, traceback_size); - if (_Py_hashtable_set(tracemalloc_tracebacks, copy, NULL, 0) < 0) { + if (_Py_HASHTABLE_SET_NODATA(tracemalloc_tracebacks, copy) < 0) { raw_free(copy); #ifdef TRACE_DEBUG tracemalloc_error("failed to intern the traceback: putdata failed"); @@ -464,7 +486,7 @@ tracemalloc_remove_trace(void *ptr) { trace_t trace; - if (_Py_hashtable_pop(tracemalloc_traces, ptr, &trace, sizeof(trace))) { + if (_Py_HASHTABLE_POP(tracemalloc_traces, ptr, trace)) { assert(tracemalloc_traced_memory >= trace.size); tracemalloc_traced_memory -= trace.size; } @@ -714,17 +736,23 @@ tracemalloc_raw_realloc(void *ctx, void *ptr, size_t new_size) #endif /* TRACE_RAW_MALLOC */ static int -tracemalloc_clear_filename(_Py_hashtable_entry_t *entry, void *user_data) +tracemalloc_clear_filename(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, + void *user_data) { - PyObject *filename = (PyObject *)entry->key; + PyObject *filename; + + _Py_HASHTABLE_ENTRY_READ_KEY(ht->key_size, entry, filename); Py_DECREF(filename); return 0; } static int -traceback_free_traceback(_Py_hashtable_entry_t *entry, void *user_data) +traceback_free_traceback(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, + void *user_data) { - traceback_t *traceback = (traceback_t *)entry->key; + traceback_t *traceback; + + _Py_HASHTABLE_ENTRY_READ_KEY(ht->key_size, entry, traceback); raw_free(traceback); return 0; } @@ -791,21 +819,20 @@ tracemalloc_init(void) } #endif - tracemalloc_filenames = hashtable_new(0, - (_Py_hashtable_hash_func)PyObject_Hash, + tracemalloc_filenames = hashtable_new(sizeof(PyObject *), 0, + hashtable_hash_pyobject, hashtable_compare_unicode); - tracemalloc_tracebacks = hashtable_new(0, - (_Py_hashtable_hash_func)hashtable_hash_traceback, - (_Py_hashtable_compare_func)hashtable_compare_traceback); + tracemalloc_tracebacks = hashtable_new(sizeof(traceback_t *), 0, + hashtable_hash_traceback, + hashtable_compare_traceback); - tracemalloc_traces = hashtable_new(sizeof(trace_t), + tracemalloc_traces = hashtable_new(sizeof(void*), sizeof(trace_t), _Py_hashtable_hash_ptr, _Py_hashtable_compare_direct); if (tracemalloc_filenames == NULL || tracemalloc_tracebacks == NULL - || tracemalloc_traces == NULL) - { + || tracemalloc_traces == NULL) { PyErr_NoMemory(); return -1; } @@ -840,9 +867,9 @@ tracemalloc_deinit(void) tracemalloc_stop(); /* destroy hash tables */ - _Py_hashtable_destroy(tracemalloc_traces); _Py_hashtable_destroy(tracemalloc_tracebacks); _Py_hashtable_destroy(tracemalloc_filenames); + _Py_hashtable_destroy(tracemalloc_traces); #if defined(WITH_THREAD) && defined(TRACE_RAW_MALLOC) if (tables_lock != NULL) { @@ -935,8 +962,9 @@ tracemalloc_stop(void) PyMem_SetAllocator(PYMEM_DOMAIN_MEM, &allocators.mem); PyMem_SetAllocator(PYMEM_DOMAIN_OBJ, &allocators.obj); - /* release memory */ tracemalloc_clear_traces(); + + /* release memory */ raw_free(tracemalloc_traceback); tracemalloc_traceback = NULL; } @@ -1065,14 +1093,15 @@ typedef struct { } get_traces_t; static int -tracemalloc_get_traces_fill(_Py_hashtable_entry_t *entry, void *user_data) +tracemalloc_get_traces_fill(_Py_hashtable_t *traces, _Py_hashtable_entry_t *entry, + void *user_data) { get_traces_t *get_traces = user_data; trace_t *trace; PyObject *tracemalloc_obj; int res; - trace = (trace_t *)_Py_HASHTABLE_ENTRY_DATA(entry); + trace = (trace_t *)_Py_HASHTABLE_ENTRY_DATA(traces, entry); tracemalloc_obj = trace_to_pyobject(trace, get_traces->tracebacks); if (tracemalloc_obj == NULL) @@ -1087,9 +1116,11 @@ tracemalloc_get_traces_fill(_Py_hashtable_entry_t *entry, void *user_data) } static int -tracemalloc_pyobject_decref_cb(_Py_hashtable_entry_t *entry, void *user_data) +tracemalloc_pyobject_decref_cb(_Py_hashtable_t *tracebacks, + _Py_hashtable_entry_t *entry, + void *user_data) { - PyObject *obj = (PyObject *)_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry); + PyObject *obj = (PyObject *)_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(tracebacks, entry); Py_DECREF(obj); return 0; } @@ -1120,7 +1151,7 @@ py_tracemalloc_get_traces(PyObject *self, PyObject *obj) /* the traceback hash table is used temporarily to intern traceback tuple of (filename, lineno) tuples */ - get_traces.tracebacks = hashtable_new(sizeof(PyObject *), + get_traces.tracebacks = hashtable_new(sizeof(traceback_t *), sizeof(PyObject *), _Py_hashtable_hash_ptr, _Py_hashtable_compare_direct); if (get_traces.tracebacks == NULL) { @@ -1152,7 +1183,7 @@ error: finally: if (get_traces.tracebacks != NULL) { _Py_hashtable_foreach(get_traces.tracebacks, - tracemalloc_pyobject_decref_cb, NULL); + tracemalloc_pyobject_decref_cb, NULL); _Py_hashtable_destroy(get_traces.tracebacks); } if (get_traces.traces != NULL) diff --git a/Modules/hashtable.c b/Modules/hashtable.c index 7de154b70a..d33f0d744e 100644 --- a/Modules/hashtable.c +++ b/Modules/hashtable.c @@ -1,5 +1,5 @@ -/* The implementation of the hash table (_Py_hashtable_t) is based on the cfuhash - project: +/* The implementation of the hash table (_Py_hashtable_t) is based on the + cfuhash project: http://sourceforge.net/projects/libcfu/ Copyright of cfuhash: @@ -59,7 +59,7 @@ #define ENTRY_NEXT(ENTRY) \ ((_Py_hashtable_entry_t *)_Py_SLIST_ITEM_NEXT(ENTRY)) #define HASHTABLE_ITEM_SIZE(HT) \ - (sizeof(_Py_hashtable_entry_t) + (HT)->data_size) + (sizeof(_Py_hashtable_entry_t) + (HT)->key_size + (HT)->data_size) /* Forward declaration */ static void hashtable_rehash(_Py_hashtable_t *ht); @@ -70,6 +70,7 @@ _Py_slist_init(_Py_slist_t *list) list->head = NULL; } + static void _Py_slist_prepend(_Py_slist_t *list, _Py_slist_item_t *item) { @@ -77,6 +78,7 @@ _Py_slist_prepend(_Py_slist_t *list, _Py_slist_item_t *item) list->head = item; } + static void _Py_slist_remove(_Py_slist_t *list, _Py_slist_item_t *previous, _Py_slist_item_t *item) @@ -87,24 +89,26 @@ _Py_slist_remove(_Py_slist_t *list, _Py_slist_item_t *previous, list->head = item->next; } -Py_uhash_t -_Py_hashtable_hash_int(const void *key) -{ - return (Py_uhash_t)key; -} Py_uhash_t -_Py_hashtable_hash_ptr(const void *key) +_Py_hashtable_hash_ptr(size_t key_size, const void *pkey) { + void *key; + + _Py_HASHTABLE_READ_KEY(key_size, pkey, key); return (Py_uhash_t)_Py_HashPointer((void *)key); } + int -_Py_hashtable_compare_direct(const void *key, const _Py_hashtable_entry_t *entry) +_Py_hashtable_compare_direct(size_t key_size, const void *pkey, + const _Py_hashtable_entry_t *entry) { - return entry->key == key; + const void *pkey2 = _Py_HASHTABLE_ENTRY_KEY(entry); + return (memcmp(pkey, pkey2, key_size) == 0); } + /* makes sure the real size of the buckets array is a power of 2 */ static size_t round_size(size_t s) @@ -118,8 +122,10 @@ round_size(size_t s) return i; } + _Py_hashtable_t * -_Py_hashtable_new_full(size_t data_size, size_t init_size, +_Py_hashtable_new_full(size_t key_size, size_t data_size, + size_t init_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func, _Py_hashtable_copy_data_func copy_data_func, @@ -144,6 +150,7 @@ _Py_hashtable_new_full(size_t data_size, size_t init_size, ht->num_buckets = round_size(init_size); ht->entries = 0; + ht->key_size = key_size; ht->data_size = data_size; buckets_size = ht->num_buckets * sizeof(ht->buckets[0]); @@ -163,16 +170,19 @@ _Py_hashtable_new_full(size_t data_size, size_t init_size, return ht; } + _Py_hashtable_t * -_Py_hashtable_new(size_t data_size, +_Py_hashtable_new(size_t key_size, size_t data_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func) { - return _Py_hashtable_new_full(data_size, HASHTABLE_MIN_SIZE, + return _Py_hashtable_new_full(key_size, data_size, + HASHTABLE_MIN_SIZE, hash_func, compare_func, NULL, NULL, NULL, NULL); } + size_t _Py_hashtable_size(_Py_hashtable_t *ht) { @@ -195,7 +205,7 @@ _Py_hashtable_size(_Py_hashtable_t *ht) for (entry = TABLE_HEAD(ht, hv); entry; entry = ENTRY_NEXT(entry)) { void *data; - data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry); + data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry); size += ht->get_data_size_func(data); } } @@ -203,6 +213,7 @@ _Py_hashtable_size(_Py_hashtable_t *ht) return size; } + #ifdef Py_DEBUG void _Py_hashtable_print_stats(_Py_hashtable_t *ht) @@ -243,38 +254,47 @@ _Py_hashtable_print_stats(_Py_hashtable_t *ht) } #endif -/* Get an entry. Return NULL if the key does not exist. */ + _Py_hashtable_entry_t * -_Py_hashtable_get_entry(_Py_hashtable_t *ht, const void *key) +_Py_hashtable_get_entry(_Py_hashtable_t *ht, + size_t key_size, const void *pkey) { Py_uhash_t key_hash; size_t index; _Py_hashtable_entry_t *entry; - key_hash = ht->hash_func(key); + assert(key_size == ht->key_size); + + key_hash = ht->hash_func(key_size, pkey); index = key_hash & (ht->num_buckets - 1); for (entry = TABLE_HEAD(ht, index); entry != NULL; entry = ENTRY_NEXT(entry)) { - if (entry->key_hash == key_hash && ht->compare_func(key, entry)) + if (entry->key_hash == key_hash + && ht->compare_func(key_size, pkey, entry)) break; } return entry; } + static int -_hashtable_pop_entry(_Py_hashtable_t *ht, const void *key, void *data, size_t data_size) +_Py_hashtable_pop_entry(_Py_hashtable_t *ht, size_t key_size, const void *pkey, + void *data, size_t data_size) { Py_uhash_t key_hash; size_t index; _Py_hashtable_entry_t *entry, *previous; - key_hash = ht->hash_func(key); + assert(key_size == ht->key_size); + + key_hash = ht->hash_func(key_size, pkey); index = key_hash & (ht->num_buckets - 1); previous = NULL; for (entry = TABLE_HEAD(ht, index); entry != NULL; entry = ENTRY_NEXT(entry)) { - if (entry->key_hash == key_hash && ht->compare_func(key, entry)) + if (entry->key_hash == key_hash + && ht->compare_func(key_size, pkey, entry)) break; previous = entry; } @@ -287,7 +307,7 @@ _hashtable_pop_entry(_Py_hashtable_t *ht, const void *key, void *data, size_t da ht->entries--; if (data != NULL) - _Py_HASHTABLE_ENTRY_READ_DATA(ht, data, data_size, entry); + _Py_HASHTABLE_ENTRY_READ_DATA(ht, entry, data_size, data); ht->alloc.free(entry); if ((float)ht->entries / (float)ht->num_buckets < HASHTABLE_LOW) @@ -295,26 +315,27 @@ _hashtable_pop_entry(_Py_hashtable_t *ht, const void *key, void *data, size_t da return 1; } -/* Add a new entry to the hash. The key must not be present in the hash table. - Return 0 on success, -1 on memory error. */ + int -_Py_hashtable_set(_Py_hashtable_t *ht, const void *key, - void *data, size_t data_size) +_Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, + size_t data_size, void *data) { Py_uhash_t key_hash; size_t index; _Py_hashtable_entry_t *entry; + assert(key_size == ht->key_size); + assert(data != NULL || data_size == 0); #ifndef NDEBUG /* Don't write the assertion on a single line because it is interesting to know the duplicated entry if the assertion failed. The entry can be read using a debugger. */ - entry = _Py_hashtable_get_entry(ht, key); + entry = _Py_hashtable_get_entry(ht, key_size, pkey); assert(entry == NULL); #endif - key_hash = ht->hash_func(key); + key_hash = ht->hash_func(key_size, pkey); index = key_hash & (ht->num_buckets - 1); entry = ht->alloc.malloc(HASHTABLE_ITEM_SIZE(ht)); @@ -323,11 +344,11 @@ _Py_hashtable_set(_Py_hashtable_t *ht, const void *key, return -1; } - entry->key = (void *)key; entry->key_hash = key_hash; + memcpy((void *)_Py_HASHTABLE_ENTRY_KEY(entry), pkey, key_size); assert(data_size == ht->data_size); - memcpy(_Py_HASHTABLE_ENTRY_DATA(entry), data, data_size); + memcpy(_Py_HASHTABLE_ENTRY_DATA(ht, entry), data, data_size); _Py_slist_prepend(&ht->buckets[index], (_Py_slist_item_t*)entry); ht->entries++; @@ -337,48 +358,48 @@ _Py_hashtable_set(_Py_hashtable_t *ht, const void *key, return 0; } -/* Get data from an entry. Copy entry data into data and return 1 if the entry - exists, return 0 if the entry does not exist. */ + int -_Py_hashtable_get(_Py_hashtable_t *ht, const void *key, void *data, size_t data_size) +_Py_hashtable_get(_Py_hashtable_t *ht, size_t key_size,const void *pkey, + size_t data_size, void *data) { _Py_hashtable_entry_t *entry; assert(data != NULL); - entry = _Py_hashtable_get_entry(ht, key); + entry = _Py_hashtable_get_entry(ht, key_size, pkey); if (entry == NULL) return 0; - _Py_HASHTABLE_ENTRY_READ_DATA(ht, data, data_size, entry); + _Py_HASHTABLE_ENTRY_READ_DATA(ht, entry, data_size, data); return 1; } + int -_Py_hashtable_pop(_Py_hashtable_t *ht, const void *key, void *data, size_t data_size) +_Py_hashtable_pop(_Py_hashtable_t *ht, size_t key_size, const void *pkey, + size_t data_size, void *data) { assert(data != NULL); assert(ht->free_data_func == NULL); - return _hashtable_pop_entry(ht, key, data, data_size); + return _Py_hashtable_pop_entry(ht, key_size, pkey, data, data_size); } -/* Delete an entry. The entry must exist. */ + void -_Py_hashtable_delete(_Py_hashtable_t *ht, const void *key) +_Py_hashtable_delete(_Py_hashtable_t *ht, size_t key_size, const void *pkey) { #ifndef NDEBUG - int found = _hashtable_pop_entry(ht, key, NULL, 0); + int found = _Py_hashtable_pop_entry(ht, key_size, pkey, NULL, 0); assert(found); #else - (void)_hashtable_pop_entry(ht, key, NULL, 0); + (void)_Py_hashtable_pop_entry(ht, key_size, pkey, NULL, 0); #endif } -/* Prototype for a pointer to a function to be called foreach - key/value pair in the hash by hashtable_foreach(). Iteration - stops if a non-zero value is returned. */ + int _Py_hashtable_foreach(_Py_hashtable_t *ht, - int (*func) (_Py_hashtable_entry_t *entry, void *arg), + _Py_hashtable_foreach_func func, void *arg) { _Py_hashtable_entry_t *entry; @@ -386,7 +407,7 @@ _Py_hashtable_foreach(_Py_hashtable_t *ht, for (hv = 0; hv < ht->num_buckets; hv++) { for (entry = TABLE_HEAD(ht, hv); entry; entry = ENTRY_NEXT(entry)) { - int res = func(entry, arg); + int res = func(ht, entry, arg); if (res) return res; } @@ -394,9 +415,11 @@ _Py_hashtable_foreach(_Py_hashtable_t *ht, return 0; } + static void hashtable_rehash(_Py_hashtable_t *ht) { + const size_t key_size = ht->key_size; size_t buckets_size, new_size, bucket; _Py_slist_t *old_buckets = NULL; size_t old_num_buckets; @@ -425,7 +448,8 @@ hashtable_rehash(_Py_hashtable_t *ht) for (entry = BUCKETS_HEAD(old_buckets[bucket]); entry != NULL; entry = next) { size_t entry_index; - assert(ht->hash_func(entry->key) == entry->key_hash); + + assert(ht->hash_func(key_size, _Py_HASHTABLE_ENTRY_KEY(entry)) == entry->key_hash); next = ENTRY_NEXT(entry); entry_index = entry->key_hash & (new_size - 1); @@ -436,6 +460,7 @@ hashtable_rehash(_Py_hashtable_t *ht) ht->alloc.free(old_buckets); } + void _Py_hashtable_clear(_Py_hashtable_t *ht) { @@ -446,7 +471,7 @@ _Py_hashtable_clear(_Py_hashtable_t *ht) for (entry = TABLE_HEAD(ht, i); entry != NULL; entry = next) { next = ENTRY_NEXT(entry); if (ht->free_data_func) - ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry)); + ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry)); ht->alloc.free(entry); } _Py_slist_init(&ht->buckets[i]); @@ -455,6 +480,7 @@ _Py_hashtable_clear(_Py_hashtable_t *ht) hashtable_rehash(ht); } + void _Py_hashtable_destroy(_Py_hashtable_t *ht) { @@ -465,7 +491,7 @@ _Py_hashtable_destroy(_Py_hashtable_t *ht) while (entry) { _Py_slist_item_t *entry_next = entry->next; if (ht->free_data_func) - ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry)); + ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry)); ht->alloc.free(entry); entry = entry_next; } @@ -475,17 +501,20 @@ _Py_hashtable_destroy(_Py_hashtable_t *ht) ht->alloc.free(ht); } -/* Return a copy of the hash table */ + _Py_hashtable_t * _Py_hashtable_copy(_Py_hashtable_t *src) { + const size_t key_size = src->key_size; + const size_t data_size = src->data_size; _Py_hashtable_t *dst; _Py_hashtable_entry_t *entry; size_t bucket; int err; void *data, *new_data; - dst = _Py_hashtable_new_full(src->data_size, src->num_buckets, + dst = _Py_hashtable_new_full(key_size, data_size, + src->num_buckets, src->hash_func, src->compare_func, src->copy_data_func, src->free_data_func, src->get_data_size_func, &src->alloc); @@ -496,17 +525,20 @@ _Py_hashtable_copy(_Py_hashtable_t *src) entry = TABLE_HEAD(src, bucket); for (; entry; entry = ENTRY_NEXT(entry)) { if (src->copy_data_func) { - data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(entry); + data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(src, entry); new_data = src->copy_data_func(data); if (new_data != NULL) - err = _Py_hashtable_set(dst, entry->key, - &new_data, src->data_size); + err = _Py_hashtable_set(dst, key_size, + _Py_HASHTABLE_ENTRY_KEY(entry), + data_size, &new_data); else err = 1; } else { - data = _Py_HASHTABLE_ENTRY_DATA(entry); - err = _Py_hashtable_set(dst, entry->key, data, src->data_size); + data = _Py_HASHTABLE_ENTRY_DATA(src, entry); + err = _Py_hashtable_set(dst, key_size, + _Py_HASHTABLE_ENTRY_KEY(entry), + data_size, data); } if (err) { _Py_hashtable_destroy(dst); @@ -516,4 +548,3 @@ _Py_hashtable_copy(_Py_hashtable_t *src) } return dst; } - diff --git a/Modules/hashtable.h b/Modules/hashtable.h index a9f9993bfd..6eb57371b2 100644 --- a/Modules/hashtable.h +++ b/Modules/hashtable.h @@ -1,9 +1,10 @@ #ifndef Py_HASHTABLE_H #define Py_HASHTABLE_H - /* The whole API is private */ #ifndef Py_LIMITED_API +/* Single linked list */ + typedef struct _Py_slist_item_s { struct _Py_slist_item_s *next; } _Py_slist_item_t; @@ -16,30 +17,55 @@ typedef struct { #define _Py_SLIST_HEAD(SLIST) (((_Py_slist_t *)SLIST)->head) + +/* _Py_hashtable: table entry */ + typedef struct { /* used by _Py_hashtable_t.buckets to link entries */ _Py_slist_item_t _Py_slist_item; - const void *key; Py_uhash_t key_hash; - /* data follows */ + /* key (key_size bytes) and then data (data_size bytes) follows */ } _Py_hashtable_entry_t; -#define _Py_HASHTABLE_ENTRY_DATA(ENTRY) \ - ((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t)) +#define _Py_HASHTABLE_ENTRY_KEY(ENTRY) \ + ((const void *)((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t))) + +#define _Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY) \ + ((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t) + (TABLE)->key_size) + +#define _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(TABLE, ENTRY) \ + (*(void **)_Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY)) + +/* Get a key value from pkey: use memcpy() rather than a pointer dereference + to avoid memory alignment issues. */ +#define _Py_HASHTABLE_READ_KEY(KEY_SIZE, PKEY, DST_KEY) \ + do { \ + assert(sizeof(DST_KEY) == (KEY_SIZE)); \ + memcpy(&(DST_KEY), (PKEY), sizeof(DST_KEY)); \ + } while (0) -#define _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ENTRY) \ - (*(void **)_Py_HASHTABLE_ENTRY_DATA(ENTRY)) +#define _Py_HASHTABLE_ENTRY_READ_KEY(KEY_SIZE, ENTRY, KEY) \ + do { \ + assert(sizeof(KEY) == (KEY_SIZE)); \ + memcpy(&(KEY), _Py_HASHTABLE_ENTRY_KEY(ENTRY), sizeof(KEY)); \ + } while (0) -#define _Py_HASHTABLE_ENTRY_READ_DATA(TABLE, DATA, DATA_SIZE, ENTRY) \ +#define _Py_HASHTABLE_ENTRY_READ_DATA(TABLE, ENTRY, DATA_SIZE, DATA) \ do { \ assert((DATA_SIZE) == (TABLE)->data_size); \ - memcpy(DATA, _Py_HASHTABLE_ENTRY_DATA(ENTRY), DATA_SIZE); \ + memcpy(DATA, _Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY), DATA_SIZE); \ } while (0) -typedef Py_uhash_t (*_Py_hashtable_hash_func) (const void *key); -typedef int (*_Py_hashtable_compare_func) (const void *key, const _Py_hashtable_entry_t *he); + +/* _Py_hashtable: prototypes */ + +typedef Py_uhash_t (*_Py_hashtable_hash_func) (size_t key_size, + const void *pkey); +typedef int (*_Py_hashtable_compare_func) (size_t key_size, + const void *pkey, + const _Py_hashtable_entry_t *he); typedef void* (*_Py_hashtable_copy_data_func)(void *data); typedef void (*_Py_hashtable_free_data_func)(void *data); typedef size_t (*_Py_hashtable_get_data_size_func)(void *data); @@ -52,10 +78,14 @@ typedef struct { void (*free) (void *ptr); } _Py_hashtable_allocator_t; + +/* _Py_hashtable: table */ + typedef struct { size_t num_buckets; size_t entries; /* Total number of entries in the table. */ _Py_slist_t *buckets; + size_t key_size; size_t data_size; _Py_hashtable_hash_func hash_func; @@ -66,16 +96,25 @@ typedef struct { _Py_hashtable_allocator_t alloc; } _Py_hashtable_t; -/* hash and compare functions for integers and pointers */ -PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr(const void *key); -PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_int(const void *key); -PyAPI_FUNC(int) _Py_hashtable_compare_direct(const void *key, const _Py_hashtable_entry_t *entry); +/* hash a pointer (void*) */ +PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr( + size_t key_size, + const void *pkey); + +/* comparison using memcmp() */ +PyAPI_FUNC(int) _Py_hashtable_compare_direct( + size_t key_size, + const void *pkey, + const _Py_hashtable_entry_t *entry); PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new( + size_t key_size, size_t data_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func); + PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new_full( + size_t key_size, size_t data_size, size_t init_size, _Py_hashtable_hash_func hash_func, @@ -84,45 +123,95 @@ PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new_full( _Py_hashtable_free_data_func free_data_func, _Py_hashtable_get_data_size_func get_data_size_func, _Py_hashtable_allocator_t *allocator); + +PyAPI_FUNC(void) _Py_hashtable_destroy(_Py_hashtable_t *ht); + +/* Return a copy of the hash table */ PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_copy(_Py_hashtable_t *src); + PyAPI_FUNC(void) _Py_hashtable_clear(_Py_hashtable_t *ht); -PyAPI_FUNC(void) _Py_hashtable_destroy(_Py_hashtable_t *ht); -typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_entry_t *entry, void *arg); +typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_t *ht, + _Py_hashtable_entry_t *entry, + void *arg); +/* Call func() on each entry of the hashtable. + Iteration stops if func() result is non-zero, in this case it's the result + of the call. Otherwise, the function returns 0. */ PyAPI_FUNC(int) _Py_hashtable_foreach( _Py_hashtable_t *ht, - _Py_hashtable_foreach_func func, void *arg); + _Py_hashtable_foreach_func func, + void *arg); + PyAPI_FUNC(size_t) _Py_hashtable_size(_Py_hashtable_t *ht); -PyAPI_FUNC(_Py_hashtable_entry_t*) _Py_hashtable_get_entry( - _Py_hashtable_t *ht, - const void *key); +/* Add a new entry to the hash. The key must not be present in the hash table. + Return 0 on success, -1 on memory error. + + Don't call directly this function, + but use _Py_HASHTABLE_SET() and _Py_HASHTABLE_SET_NODATA() macros */ PyAPI_FUNC(int) _Py_hashtable_set( _Py_hashtable_t *ht, - const void *key, - void *data, - size_t data_size); + size_t key_size, + const void *pkey, + size_t data_size, + void *data); + +#define _Py_HASHTABLE_SET(TABLE, KEY, DATA) \ + _Py_hashtable_set(TABLE, sizeof(KEY), &KEY, sizeof(DATA), &(DATA)) + +#define _Py_HASHTABLE_SET_NODATA(TABLE, KEY) \ + _Py_hashtable_set(TABLE, sizeof(KEY), &KEY, 0, NULL) + + +/* Get an entry. + Return NULL if the key does not exist. + + Don't call directly this function, but use _Py_HASHTABLE_GET_ENTRY() + macro */ +PyAPI_FUNC(_Py_hashtable_entry_t*) _Py_hashtable_get_entry( + _Py_hashtable_t *ht, + size_t key_size, + const void *pkey); + +#define _Py_HASHTABLE_GET_ENTRY(TABLE, KEY) \ + _Py_hashtable_get_entry(TABLE, sizeof(KEY), &(KEY)) + + +/* Get data from an entry. Copy entry data into data and return 1 if the entry + exists, return 0 if the entry does not exist. + + Don't call directly this function, but use _Py_HASHTABLE_GET() macro */ PyAPI_FUNC(int) _Py_hashtable_get( _Py_hashtable_t *ht, - const void *key, - void *data, - size_t data_size); + size_t key_size, + const void *pkey, + size_t data_size, + void *data); + +#define _Py_HASHTABLE_GET(TABLE, KEY, DATA) \ + _Py_hashtable_get(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA)) + + +/* Don't call directly this function, but use _Py_HASHTABLE_POP() macro */ PyAPI_FUNC(int) _Py_hashtable_pop( _Py_hashtable_t *ht, - const void *key, - void *data, - size_t data_size); -PyAPI_FUNC(void) _Py_hashtable_delete( - _Py_hashtable_t *ht, - const void *key); + size_t key_size, + const void *pkey, + size_t data_size, + void *data); -#define _Py_HASHTABLE_SET(TABLE, KEY, DATA) \ - _Py_hashtable_set(TABLE, KEY, &(DATA), sizeof(DATA)) +#define _Py_HASHTABLE_POP(TABLE, KEY, DATA) \ + _Py_hashtable_pop(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA)) -#define _Py_HASHTABLE_GET(TABLE, KEY, DATA) \ - _Py_hashtable_get(TABLE, KEY, &(DATA), sizeof(DATA)) -#endif /* Py_LIMITED_API */ +/* Delete an entry. + + WARNING: The entry must exist. */ +PyAPI_FUNC(void) _Py_hashtable_delete( + _Py_hashtable_t *ht, + size_t key_size, + const void *pkey); +#endif /* Py_LIMITED_API */ #endif -- cgit v1.2.1 From 2fdff7a67fc9d31180eb6833e212295c8add137b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 21 Mar 2016 23:05:08 +0100 Subject: Issue #26588: Fix compilation warning on Windows --- Modules/_tracemalloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 6799eb6b64..3c5319b734 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -247,7 +247,7 @@ raw_free(void *ptr) static Py_uhash_t hashtable_hash_traceback(size_t key_size, const void *pkey) { - const traceback_t *traceback; + traceback_t *traceback; _Py_HASHTABLE_READ_KEY(key_size, pkey, traceback); return traceback->hash; -- cgit v1.2.1 From 4b52661e121d12acf4db7f2842e72b14f1fc4f60 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Tue, 22 Mar 2016 02:19:29 +0000 Subject: Issue #15699: Reunite comment with variable --- Modules/readline.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) (limited to 'Modules') diff --git a/Modules/readline.c b/Modules/readline.c index a6581b0b72..1fee935d34 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -78,10 +78,12 @@ on_completion_display_matches_hook(char **matches, static char *completer_word_break_characters; typedef struct { + /* Specify hook functions in Python */ PyObject *completion_display_matches_hook; PyObject *startup_hook; PyObject *pre_input_hook; - PyObject *completer; + + PyObject *completer; /* Specify a word completer in Python */ PyObject *begidx; PyObject *endidx; } readlinestate; @@ -336,13 +338,6 @@ set_hook(const char *funcname, PyObject **hook_var, PyObject *args) } -/* Exported functions to specify hook functions in Python */ - - -#ifdef HAVE_RL_PRE_INPUT_HOOK - -#endif - static PyObject * set_completion_display_matches_hook(PyObject *self, PyObject *args) { @@ -403,14 +398,6 @@ characters."); #endif -/* Exported function to specify a word completer in Python */ - - - - - - - /* Get the completion type for the scope of the tab-completion */ static PyObject * get_completion_type(PyObject *self, PyObject *noarg) -- cgit v1.2.1 From ec184701725dd336f66a95229e15bff3f12248ae Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Tue, 22 Mar 2016 07:24:05 +0000 Subject: Issue #24266: Cancel history search mode with Ctrl+C in Readline 7 --- Modules/readline.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/readline.c b/Modules/readline.c index 1fee935d34..401300395d 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -1140,6 +1140,9 @@ readline_until_enter_or_signal(const char *prompt, int *signal) #endif if (s < 0) { rl_free_line_state(); +#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0700 + rl_callback_sigcleanup(); +#endif rl_cleanup_after_signal(); rl_callback_handler_remove(); *signal = 1; -- cgit v1.2.1 From 3896db03c029f4ef919e06ce5e1713f3fcdb22cc Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 12:13:01 +0100 Subject: Simplify implementation of hashtable.c Issue #26588: Remove copy_data, free_data and get_data_size callbacks from hashtable.h. These callbacks are not used in Python and makes the code more complex. Remove also the _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P() macro which uses an unsafe pointer dereference (can cause memory alignment issue). Replace the macro usage with _Py_HASHTABLE_ENTRY_READ_DATA() which is implemented with the safe memcpy() function. --- Modules/_tracemalloc.c | 14 +++++++------ Modules/hashtable.c | 55 ++++++++------------------------------------------ Modules/hashtable.h | 14 +------------ 3 files changed, 17 insertions(+), 66 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 3c5319b734..c48dd08a4b 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -220,16 +220,15 @@ hashtable_compare_unicode(size_t key_size, const void *pkey, return key == entry_key; } -static _Py_hashtable_allocator_t hashtable_alloc = {malloc, free}; - static _Py_hashtable_t * hashtable_new(size_t key_size, size_t data_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func) { + _Py_hashtable_allocator_t hashtable_alloc = {malloc, free}; return _Py_hashtable_new_full(key_size, data_size, 0, hash_func, compare_func, - NULL, NULL, NULL, &hashtable_alloc); + &hashtable_alloc); } static void* @@ -1120,7 +1119,8 @@ tracemalloc_pyobject_decref_cb(_Py_hashtable_t *tracebacks, _Py_hashtable_entry_t *entry, void *user_data) { - PyObject *obj = (PyObject *)_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(tracebacks, entry); + PyObject *obj; + _Py_HASHTABLE_ENTRY_READ_DATA(tracebacks, entry, sizeof(obj), &obj); Py_DECREF(obj); return 0; } @@ -1151,7 +1151,8 @@ py_tracemalloc_get_traces(PyObject *self, PyObject *obj) /* the traceback hash table is used temporarily to intern traceback tuple of (filename, lineno) tuples */ - get_traces.tracebacks = hashtable_new(sizeof(traceback_t *), sizeof(PyObject *), + get_traces.tracebacks = hashtable_new(sizeof(traceback_t *), + sizeof(PyObject *), _Py_hashtable_hash_ptr, _Py_hashtable_compare_direct); if (get_traces.tracebacks == NULL) { @@ -1186,8 +1187,9 @@ finally: tracemalloc_pyobject_decref_cb, NULL); _Py_hashtable_destroy(get_traces.tracebacks); } - if (get_traces.traces != NULL) + if (get_traces.traces != NULL) { _Py_hashtable_destroy(get_traces.traces); + } return get_traces.list; } diff --git a/Modules/hashtable.c b/Modules/hashtable.c index d33f0d744e..7094b954ea 100644 --- a/Modules/hashtable.c +++ b/Modules/hashtable.c @@ -128,9 +128,6 @@ _Py_hashtable_new_full(size_t key_size, size_t data_size, size_t init_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func, - _Py_hashtable_copy_data_func copy_data_func, - _Py_hashtable_free_data_func free_data_func, - _Py_hashtable_get_data_size_func get_data_size_func, _Py_hashtable_allocator_t *allocator) { _Py_hashtable_t *ht; @@ -163,9 +160,6 @@ _Py_hashtable_new_full(size_t key_size, size_t data_size, ht->hash_func = hash_func; ht->compare_func = compare_func; - ht->copy_data_func = copy_data_func; - ht->free_data_func = free_data_func; - ht->get_data_size_func = get_data_size_func; ht->alloc = alloc; return ht; } @@ -179,7 +173,7 @@ _Py_hashtable_new(size_t key_size, size_t data_size, return _Py_hashtable_new_full(key_size, data_size, HASHTABLE_MIN_SIZE, hash_func, compare_func, - NULL, NULL, NULL, NULL); + NULL); } @@ -187,7 +181,6 @@ size_t _Py_hashtable_size(_Py_hashtable_t *ht) { size_t size; - size_t hv; size = sizeof(_Py_hashtable_t); @@ -197,19 +190,6 @@ _Py_hashtable_size(_Py_hashtable_t *ht) /* entries */ size += ht->entries * HASHTABLE_ITEM_SIZE(ht); - /* data linked from entries */ - if (ht->get_data_size_func) { - for (hv = 0; hv < ht->num_buckets; hv++) { - _Py_hashtable_entry_t *entry; - - for (entry = TABLE_HEAD(ht, hv); entry; entry = ENTRY_NEXT(entry)) { - void *data; - - data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry); - size += ht->get_data_size_func(data); - } - } - } return size; } @@ -318,7 +298,7 @@ _Py_hashtable_pop_entry(_Py_hashtable_t *ht, size_t key_size, const void *pkey, int _Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, - size_t data_size, void *data) + size_t data_size, const void *data) { Py_uhash_t key_hash; size_t index; @@ -380,7 +360,6 @@ _Py_hashtable_pop(_Py_hashtable_t *ht, size_t key_size, const void *pkey, size_t data_size, void *data) { assert(data != NULL); - assert(ht->free_data_func == NULL); return _Py_hashtable_pop_entry(ht, key_size, pkey, data, data_size); } @@ -470,8 +449,6 @@ _Py_hashtable_clear(_Py_hashtable_t *ht) for (i=0; i < ht->num_buckets; i++) { for (entry = TABLE_HEAD(ht, i); entry != NULL; entry = next) { next = ENTRY_NEXT(entry); - if (ht->free_data_func) - ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry)); ht->alloc.free(entry); } _Py_slist_init(&ht->buckets[i]); @@ -490,8 +467,6 @@ _Py_hashtable_destroy(_Py_hashtable_t *ht) _Py_slist_item_t *entry = ht->buckets[i].head; while (entry) { _Py_slist_item_t *entry_next = entry->next; - if (ht->free_data_func) - ht->free_data_func(_Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(ht, entry)); ht->alloc.free(entry); entry = entry_next; } @@ -511,35 +486,21 @@ _Py_hashtable_copy(_Py_hashtable_t *src) _Py_hashtable_entry_t *entry; size_t bucket; int err; - void *data, *new_data; dst = _Py_hashtable_new_full(key_size, data_size, src->num_buckets, - src->hash_func, src->compare_func, - src->copy_data_func, src->free_data_func, - src->get_data_size_func, &src->alloc); + src->hash_func, + src->compare_func, + &src->alloc); if (dst == NULL) return NULL; for (bucket=0; bucket < src->num_buckets; bucket++) { entry = TABLE_HEAD(src, bucket); for (; entry; entry = ENTRY_NEXT(entry)) { - if (src->copy_data_func) { - data = _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(src, entry); - new_data = src->copy_data_func(data); - if (new_data != NULL) - err = _Py_hashtable_set(dst, key_size, - _Py_HASHTABLE_ENTRY_KEY(entry), - data_size, &new_data); - else - err = 1; - } - else { - data = _Py_HASHTABLE_ENTRY_DATA(src, entry); - err = _Py_hashtable_set(dst, key_size, - _Py_HASHTABLE_ENTRY_KEY(entry), - data_size, data); - } + const void *pkey = _Py_HASHTABLE_ENTRY_KEY(entry); + const void *data = _Py_HASHTABLE_ENTRY_DATA(src, entry); + err = _Py_hashtable_set(dst, key_size, pkey, data_size, data); if (err) { _Py_hashtable_destroy(dst); return NULL; diff --git a/Modules/hashtable.h b/Modules/hashtable.h index 6eb57371b2..eede038388 100644 --- a/Modules/hashtable.h +++ b/Modules/hashtable.h @@ -35,9 +35,6 @@ typedef struct { #define _Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY) \ ((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t) + (TABLE)->key_size) -#define _Py_HASHTABLE_ENTRY_DATA_AS_VOID_P(TABLE, ENTRY) \ - (*(void **)_Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY)) - /* Get a key value from pkey: use memcpy() rather than a pointer dereference to avoid memory alignment issues. */ #define _Py_HASHTABLE_READ_KEY(KEY_SIZE, PKEY, DST_KEY) \ @@ -66,9 +63,6 @@ typedef Py_uhash_t (*_Py_hashtable_hash_func) (size_t key_size, typedef int (*_Py_hashtable_compare_func) (size_t key_size, const void *pkey, const _Py_hashtable_entry_t *he); -typedef void* (*_Py_hashtable_copy_data_func)(void *data); -typedef void (*_Py_hashtable_free_data_func)(void *data); -typedef size_t (*_Py_hashtable_get_data_size_func)(void *data); typedef struct { /* allocate a memory block */ @@ -90,9 +84,6 @@ typedef struct { _Py_hashtable_hash_func hash_func; _Py_hashtable_compare_func compare_func; - _Py_hashtable_copy_data_func copy_data_func; - _Py_hashtable_free_data_func free_data_func; - _Py_hashtable_get_data_size_func get_data_size_func; _Py_hashtable_allocator_t alloc; } _Py_hashtable_t; @@ -119,9 +110,6 @@ PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new_full( size_t init_size, _Py_hashtable_hash_func hash_func, _Py_hashtable_compare_func compare_func, - _Py_hashtable_copy_data_func copy_data_func, - _Py_hashtable_free_data_func free_data_func, - _Py_hashtable_get_data_size_func get_data_size_func, _Py_hashtable_allocator_t *allocator); PyAPI_FUNC(void) _Py_hashtable_destroy(_Py_hashtable_t *ht); @@ -155,7 +143,7 @@ PyAPI_FUNC(int) _Py_hashtable_set( size_t key_size, const void *pkey, size_t data_size, - void *data); + const void *data); #define _Py_HASHTABLE_SET(TABLE, KEY, DATA) \ _Py_hashtable_set(TABLE, sizeof(KEY), &KEY, sizeof(DATA), &(DATA)) -- cgit v1.2.1 From 70a9f8625ce627c1b1aae8713980ab5181d3c3b3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 12:25:04 +0100 Subject: Remove _Py_hashtable_delete() Issue #26588: Remove _Py_hashtable_delete() from hashtable.h since the function is not used. Keep the C code in hashtable.c as commented code if someone needs it later. --- Modules/hashtable.c | 3 +++ Modules/hashtable.h | 8 -------- 2 files changed, 3 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/hashtable.c b/Modules/hashtable.c index 7094b954ea..bb20cce589 100644 --- a/Modules/hashtable.c +++ b/Modules/hashtable.c @@ -364,6 +364,8 @@ _Py_hashtable_pop(_Py_hashtable_t *ht, size_t key_size, const void *pkey, } +/* Code commented since the function is not needed in Python */ +#if 0 void _Py_hashtable_delete(_Py_hashtable_t *ht, size_t key_size, const void *pkey) { @@ -374,6 +376,7 @@ _Py_hashtable_delete(_Py_hashtable_t *ht, size_t key_size, const void *pkey) (void)_Py_hashtable_pop_entry(ht, key_size, pkey, NULL, 0); #endif } +#endif int diff --git a/Modules/hashtable.h b/Modules/hashtable.h index eede038388..41542d279e 100644 --- a/Modules/hashtable.h +++ b/Modules/hashtable.h @@ -193,13 +193,5 @@ PyAPI_FUNC(int) _Py_hashtable_pop( _Py_hashtable_pop(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA)) -/* Delete an entry. - - WARNING: The entry must exist. */ -PyAPI_FUNC(void) _Py_hashtable_delete( - _Py_hashtable_t *ht, - size_t key_size, - const void *pkey); - #endif /* Py_LIMITED_API */ #endif -- cgit v1.2.1 From 65301ee9538baccd738acf3040b2fa4b1a1a47dc Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 12:58:23 +0100 Subject: tracemalloc now supports domains Issue #26588: * The _tracemalloc now supports tracing memory allocations of multiple address spaces (domains). * Add domain parameter to tracemalloc_add_trace() and tracemalloc_remove_trace(). * tracemalloc_add_trace() now starts by removing the previous trace, if any. * _tracemalloc._get_traces() now returns a list of (domain, size, traceback_frames): the domain is new. * Add tracemalloc.DomainFilter * tracemalloc.Filter: add an optional domain parameter to the constructor and a domain attribute * Sublte change: use Py_uintptr_t rather than void* in the traces key. * Add tracemalloc_config.use_domain, currently hardcoded to 1 --- Modules/_tracemalloc.c | 267 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 214 insertions(+), 53 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index c48dd08a4b..784157fb2c 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -39,7 +39,11 @@ static struct { /* limit of the number of frames in a traceback, 1 by default. Variable protected by the GIL. */ int max_nframe; -} tracemalloc_config = {TRACEMALLOC_NOT_INITIALIZED, 0, 1}; + + /* use domain in trace key? + Variable protected by the GIL. */ + int use_domain; +} tracemalloc_config = {TRACEMALLOC_NOT_INITIALIZED, 0, 1, 1}; #if defined(TRACE_RAW_MALLOC) && defined(WITH_THREAD) /* This lock is needed because tracemalloc_free() is called without @@ -54,10 +58,23 @@ static PyThread_type_lock tables_lock; # define TABLES_UNLOCK() #endif + +#define DEFAULT_DOMAIN 0 + +typedef unsigned int domain_t; + +/* Pack the frame_t structure to reduce the memory footprint. */ +typedef struct +#ifdef __GNUC__ +__attribute__((packed)) +#endif +{ + Py_uintptr_t ptr; + domain_t domain; +} pointer_t; + /* Pack the frame_t structure to reduce the memory footprint on 64-bit - architectures: 12 bytes instead of 16. This optimization might produce - SIGBUS on architectures not supporting unaligned memory accesses (64-bit - MIPS CPU?): on such architecture, the structure must not be packed. */ + architectures: 12 bytes instead of 16. */ typedef struct #ifdef __GNUC__ __attribute__((packed)) @@ -71,6 +88,7 @@ _declspec(align(4)) unsigned int lineno; } frame_t; + typedef struct { Py_uhash_t hash; int nframe; @@ -83,6 +101,7 @@ typedef struct { #define MAX_NFRAME \ ((INT_MAX - (int)sizeof(traceback_t)) / (int)sizeof(frame_t) + 1) + static PyObject *unknown_filename = NULL; static traceback_t tracemalloc_empty_traceback; @@ -95,6 +114,7 @@ typedef struct { traceback_t *traceback; } trace_t; + /* Size in bytes of currently traced memory. Protected by TABLES_LOCK(). */ static size_t tracemalloc_traced_memory = 0; @@ -121,6 +141,7 @@ static _Py_hashtable_t *tracemalloc_tracebacks = NULL; Protected by TABLES_LOCK(). */ static _Py_hashtable_t *tracemalloc_traces = NULL; + #ifdef TRACE_DEBUG static void tracemalloc_error(const char *format, ...) @@ -135,6 +156,7 @@ tracemalloc_error(const char *format, ...) } #endif + #if defined(WITH_THREAD) && defined(TRACE_RAW_MALLOC) #define REENTRANT_THREADLOCAL @@ -196,6 +218,7 @@ set_reentrant(int reentrant) } #endif + static Py_uhash_t hashtable_hash_pyobject(size_t key_size, const void *pkey) { @@ -205,21 +228,53 @@ hashtable_hash_pyobject(size_t key_size, const void *pkey) return PyObject_Hash(obj); } + static int hashtable_compare_unicode(size_t key_size, const void *pkey, const _Py_hashtable_entry_t *entry) { - PyObject *key, *entry_key; + PyObject *key1, *key2; - _Py_HASHTABLE_READ_KEY(key_size, pkey, key); - _Py_HASHTABLE_ENTRY_READ_KEY(key_size, entry, entry_key); + _Py_HASHTABLE_READ_KEY(key_size, pkey, key1); + _Py_HASHTABLE_ENTRY_READ_KEY(key_size, entry, key2); - if (key != NULL && entry_key != NULL) - return (PyUnicode_Compare(key, entry_key) == 0); + if (key1 != NULL && key2 != NULL) + return (PyUnicode_Compare(key1, key2) == 0); else - return key == entry_key; + return key1 == key2; +} + + +static Py_uhash_t +hashtable_hash_pointer_t(size_t key_size, const void *pkey) +{ + pointer_t ptr; + Py_uhash_t hash; + + _Py_HASHTABLE_READ_KEY(key_size, pkey, ptr); + + hash = (Py_uhash_t)_Py_HashPointer((void*)ptr.ptr); + hash ^= ptr.domain; + return hash; +} + + +int +hashtable_compare_pointer_t(size_t key_size, const void *pkey, + const _Py_hashtable_entry_t *entry) +{ + pointer_t ptr1, ptr2; + + _Py_HASHTABLE_READ_KEY(key_size, pkey, ptr1); + _Py_HASHTABLE_ENTRY_READ_KEY(key_size, entry, ptr2); + + /* compare pointer before domain, because pointer is more likely to be + different */ + return (ptr1.ptr == ptr2.ptr && ptr1.domain == ptr2.domain); + } + static _Py_hashtable_t * hashtable_new(size_t key_size, size_t data_size, _Py_hashtable_hash_func hash_func, @@ -231,6 +286,7 @@ hashtable_new(size_t key_size, size_t data_size, &hashtable_alloc); } + static void* raw_malloc(size_t size) { @@ -243,6 +299,7 @@ raw_free(void *ptr) allocators.raw.free(allocators.raw.ctx, ptr); } + static Py_uhash_t hashtable_hash_traceback(size_t key_size, const void *pkey) { @@ -252,6 +309,7 @@ hashtable_hash_traceback(size_t key_size, const void *pkey) return traceback->hash; } + static int hashtable_compare_traceback(size_t key_size, const void *pkey, const _Py_hashtable_entry_t *he) @@ -281,6 +339,7 @@ hashtable_compare_traceback(size_t key_size, const void *pkey, return 1; } + static void tracemalloc_get_frame(PyFrameObject *pyframe, frame_t *frame) { @@ -353,6 +412,7 @@ tracemalloc_get_frame(PyFrameObject *pyframe, frame_t *frame) frame->filename = filename; } + static Py_uhash_t traceback_hash(traceback_t *traceback) { @@ -377,6 +437,7 @@ traceback_hash(traceback_t *traceback) return x; } + static void traceback_get_frames(traceback_t *traceback) { @@ -404,6 +465,7 @@ traceback_get_frames(traceback_t *traceback) } } + static traceback_t * traceback_new(void) { @@ -455,41 +517,72 @@ traceback_new(void) return traceback; } + +static void +tracemalloc_remove_trace(domain_t domain, Py_uintptr_t ptr) +{ + trace_t trace; + int removed; + + if (tracemalloc_config.use_domain) { + pointer_t key = {ptr, domain}; + removed = _Py_HASHTABLE_POP(tracemalloc_traces, key, trace); + } + else { + removed = _Py_HASHTABLE_POP(tracemalloc_traces, ptr, trace); + } + if (!removed) { + return; + } + + assert(tracemalloc_traced_memory >= trace.size); + tracemalloc_traced_memory -= trace.size; +} + +#define REMOVE_TRACE(ptr) \ + tracemalloc_remove_trace(DEFAULT_DOMAIN, (Py_uintptr_t)(ptr)) + + static int -tracemalloc_add_trace(void *ptr, size_t size) +tracemalloc_add_trace(domain_t domain, Py_uintptr_t ptr, size_t size) { traceback_t *traceback; trace_t trace; int res; + /* first, remove the previous trace (if any) */ + tracemalloc_remove_trace(domain, ptr); + traceback = traceback_new(); - if (traceback == NULL) + if (traceback == NULL) { return -1; + } trace.size = size; trace.traceback = traceback; - res = _Py_HASHTABLE_SET(tracemalloc_traces, ptr, trace); - if (res == 0) { - assert(tracemalloc_traced_memory <= PY_SIZE_MAX - size); - tracemalloc_traced_memory += size; - if (tracemalloc_traced_memory > tracemalloc_peak_traced_memory) - tracemalloc_peak_traced_memory = tracemalloc_traced_memory; + if (tracemalloc_config.use_domain) { + pointer_t key = {ptr, domain}; + res = _Py_HASHTABLE_SET(tracemalloc_traces, key, trace); + } + else { + res = _Py_HASHTABLE_SET(tracemalloc_traces, ptr, trace); + } + + if (res != 0) { + return res; } - return res; + assert(tracemalloc_traced_memory <= PY_SIZE_MAX - size); + tracemalloc_traced_memory += size; + if (tracemalloc_traced_memory > tracemalloc_peak_traced_memory) + tracemalloc_peak_traced_memory = tracemalloc_traced_memory; + return 0; } -static void -tracemalloc_remove_trace(void *ptr) -{ - trace_t trace; +#define ADD_TRACE(ptr, size) \ + tracemalloc_add_trace(DEFAULT_DOMAIN, (Py_uintptr_t)(ptr), size) - if (_Py_HASHTABLE_POP(tracemalloc_traces, ptr, trace)) { - assert(tracemalloc_traced_memory >= trace.size); - tracemalloc_traced_memory -= trace.size; - } -} static void* tracemalloc_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) @@ -507,7 +600,7 @@ tracemalloc_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) return NULL; TABLES_LOCK(); - if (tracemalloc_add_trace(ptr, nelem * elsize) < 0) { + if (ADD_TRACE(ptr, nelem * elsize) < 0) { /* Failed to allocate a trace for the new memory block */ TABLES_UNLOCK(); alloc->free(alloc->ctx, ptr); @@ -517,6 +610,7 @@ tracemalloc_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) return ptr; } + static void* tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) { @@ -531,9 +625,9 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) /* an existing memory block has been resized */ TABLES_LOCK(); - tracemalloc_remove_trace(ptr); + REMOVE_TRACE(ptr); - if (tracemalloc_add_trace(ptr2, new_size) < 0) { + if (ADD_TRACE(ptr2, new_size) < 0) { /* Memory allocation failed. The error cannot be reported to the caller, because realloc() may already have shrinked the memory block and so removed bytes. @@ -551,7 +645,7 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) /* new allocation */ TABLES_LOCK(); - if (tracemalloc_add_trace(ptr2, new_size) < 0) { + if (ADD_TRACE(ptr2, new_size) < 0) { /* Failed to allocate a trace for the new memory block */ TABLES_UNLOCK(); alloc->free(alloc->ctx, ptr2); @@ -562,6 +656,7 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) return ptr2; } + static void tracemalloc_free(void *ctx, void *ptr) { @@ -576,10 +671,11 @@ tracemalloc_free(void *ctx, void *ptr) alloc->free(alloc->ctx, ptr); TABLES_LOCK(); - tracemalloc_remove_trace(ptr); + REMOVE_TRACE(ptr); TABLES_UNLOCK(); } + static void* tracemalloc_alloc_gil(int use_calloc, void *ctx, size_t nelem, size_t elsize) { @@ -604,18 +700,21 @@ tracemalloc_alloc_gil(int use_calloc, void *ctx, size_t nelem, size_t elsize) return ptr; } + static void* tracemalloc_malloc_gil(void *ctx, size_t size) { return tracemalloc_alloc_gil(0, ctx, 1, size); } + static void* tracemalloc_calloc_gil(void *ctx, size_t nelem, size_t elsize) { return tracemalloc_alloc_gil(1, ctx, nelem, elsize); } + static void* tracemalloc_realloc_gil(void *ctx, void *ptr, size_t new_size) { @@ -631,7 +730,7 @@ tracemalloc_realloc_gil(void *ctx, void *ptr, size_t new_size) ptr2 = alloc->realloc(alloc->ctx, ptr, new_size); if (ptr2 != NULL && ptr != NULL) { TABLES_LOCK(); - tracemalloc_remove_trace(ptr); + REMOVE_TRACE(ptr); TABLES_UNLOCK(); } return ptr2; @@ -648,6 +747,7 @@ tracemalloc_realloc_gil(void *ctx, void *ptr, size_t new_size) return ptr2; } + #ifdef TRACE_RAW_MALLOC static void* tracemalloc_raw_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) @@ -682,18 +782,21 @@ tracemalloc_raw_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) return ptr; } + static void* tracemalloc_raw_malloc(void *ctx, size_t size) { return tracemalloc_raw_alloc(0, ctx, 1, size); } + static void* tracemalloc_raw_calloc(void *ctx, size_t nelem, size_t elsize) { return tracemalloc_raw_alloc(1, ctx, nelem, elsize); } + static void* tracemalloc_raw_realloc(void *ctx, void *ptr, size_t new_size) { @@ -710,7 +813,7 @@ tracemalloc_raw_realloc(void *ctx, void *ptr, size_t new_size) if (ptr2 != NULL && ptr != NULL) { TABLES_LOCK(); - tracemalloc_remove_trace(ptr); + REMOVE_TRACE(ptr); TABLES_UNLOCK(); } return ptr2; @@ -734,6 +837,7 @@ tracemalloc_raw_realloc(void *ctx, void *ptr, size_t new_size) } #endif /* TRACE_RAW_MALLOC */ + static int tracemalloc_clear_filename(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, void *user_data) @@ -745,6 +849,7 @@ tracemalloc_clear_filename(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, return 0; } + static int traceback_free_traceback(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, void *user_data) @@ -756,6 +861,7 @@ traceback_free_traceback(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, return 0; } + /* reentrant flag must be set to call this function and GIL must be held */ static void tracemalloc_clear_traces(void) @@ -782,6 +888,7 @@ tracemalloc_clear_traces(void) _Py_hashtable_clear(tracemalloc_filenames); } + static int tracemalloc_init(void) { @@ -826,9 +933,18 @@ tracemalloc_init(void) hashtable_hash_traceback, hashtable_compare_traceback); - tracemalloc_traces = hashtable_new(sizeof(void*), sizeof(trace_t), - _Py_hashtable_hash_ptr, - _Py_hashtable_compare_direct); + if (tracemalloc_config.use_domain) { + tracemalloc_traces = hashtable_new(sizeof(pointer_t), + sizeof(trace_t), + hashtable_hash_pointer_t, + hashtable_compare_pointer_t); + } + else { + tracemalloc_traces = hashtable_new(sizeof(Py_uintptr_t), + sizeof(trace_t), + _Py_hashtable_hash_ptr, + _Py_hashtable_compare_direct); + } if (tracemalloc_filenames == NULL || tracemalloc_tracebacks == NULL || tracemalloc_traces == NULL) { @@ -856,6 +972,7 @@ tracemalloc_init(void) return 0; } + static void tracemalloc_deinit(void) { @@ -884,6 +1001,7 @@ tracemalloc_deinit(void) Py_XDECREF(unknown_filename); } + static int tracemalloc_start(int max_nframe) { @@ -941,6 +1059,7 @@ tracemalloc_start(int max_nframe) return 0; } + static void tracemalloc_stop(void) { @@ -974,6 +1093,7 @@ PyDoc_STRVAR(tracemalloc_is_tracing_doc, "True if the tracemalloc module is tracing Python memory allocations,\n" "False otherwise."); + static PyObject* py_tracemalloc_is_tracing(PyObject *self) { @@ -985,6 +1105,7 @@ PyDoc_STRVAR(tracemalloc_clear_traces_doc, "\n" "Clear traces of memory blocks allocated by Python."); + static PyObject* py_tracemalloc_clear_traces(PyObject *self) { @@ -998,6 +1119,7 @@ py_tracemalloc_clear_traces(PyObject *self) Py_RETURN_NONE; } + static PyObject* frame_to_pyobject(frame_t *frame) { @@ -1020,6 +1142,7 @@ frame_to_pyobject(frame_t *frame) return frame_obj; } + static PyObject* traceback_to_pyobject(traceback_t *traceback, _Py_hashtable_t *intern_table) { @@ -1058,33 +1181,43 @@ traceback_to_pyobject(traceback_t *traceback, _Py_hashtable_t *intern_table) return frames; } + static PyObject* -trace_to_pyobject(trace_t *trace, _Py_hashtable_t *intern_tracebacks) +trace_to_pyobject(domain_t domain, trace_t *trace, + _Py_hashtable_t *intern_tracebacks) { PyObject *trace_obj = NULL; - PyObject *size, *traceback; + PyObject *obj; - trace_obj = PyTuple_New(2); + trace_obj = PyTuple_New(3); if (trace_obj == NULL) return NULL; - size = PyLong_FromSize_t(trace->size); - if (size == NULL) { + obj = PyLong_FromSize_t(domain); + if (obj == NULL) { Py_DECREF(trace_obj); return NULL; } - PyTuple_SET_ITEM(trace_obj, 0, size); + PyTuple_SET_ITEM(trace_obj, 0, obj); - traceback = traceback_to_pyobject(trace->traceback, intern_tracebacks); - if (traceback == NULL) { + obj = PyLong_FromSize_t(trace->size); + if (obj == NULL) { + Py_DECREF(trace_obj); + return NULL; + } + PyTuple_SET_ITEM(trace_obj, 1, obj); + + obj = traceback_to_pyobject(trace->traceback, intern_tracebacks); + if (obj == NULL) { Py_DECREF(trace_obj); return NULL; } - PyTuple_SET_ITEM(trace_obj, 1, traceback); + PyTuple_SET_ITEM(trace_obj, 2, obj); return trace_obj; } + typedef struct { _Py_hashtable_t *traces; _Py_hashtable_t *tracebacks; @@ -1096,13 +1229,22 @@ tracemalloc_get_traces_fill(_Py_hashtable_t *traces, _Py_hashtable_entry_t *entr void *user_data) { get_traces_t *get_traces = user_data; + domain_t domain; trace_t *trace; PyObject *tracemalloc_obj; int res; + if (tracemalloc_config.use_domain) { + pointer_t key; + _Py_HASHTABLE_ENTRY_READ_KEY(traces->key_size, entry, key); + domain = key.domain; + } + else { + domain = DEFAULT_DOMAIN; + } trace = (trace_t *)_Py_HASHTABLE_ENTRY_DATA(traces, entry); - tracemalloc_obj = trace_to_pyobject(trace, get_traces->tracebacks); + tracemalloc_obj = trace_to_pyobject(domain, trace, get_traces->tracebacks); if (tracemalloc_obj == NULL) return 1; @@ -1114,6 +1256,7 @@ tracemalloc_get_traces_fill(_Py_hashtable_t *traces, _Py_hashtable_entry_t *entr return 0; } + static int tracemalloc_pyobject_decref_cb(_Py_hashtable_t *tracebacks, _Py_hashtable_entry_t *entry, @@ -1125,6 +1268,7 @@ tracemalloc_pyobject_decref_cb(_Py_hashtable_t *tracebacks, return 0; } + PyDoc_STRVAR(tracemalloc_get_traces_doc, "_get_traces() -> list\n" "\n" @@ -1194,8 +1338,9 @@ finally: return get_traces.list; } + static traceback_t* -tracemalloc_get_traceback(const void *ptr) +tracemalloc_get_traceback(domain_t domain, const void *ptr) { trace_t trace; int found; @@ -1204,7 +1349,13 @@ tracemalloc_get_traceback(const void *ptr) return NULL; TABLES_LOCK(); - found = _Py_HASHTABLE_GET(tracemalloc_traces, ptr, trace); + if (tracemalloc_config.use_domain) { + pointer_t key = {(Py_uintptr_t)ptr, domain}; + found = _Py_HASHTABLE_GET(tracemalloc_traces, key, trace); + } + else { + found = _Py_HASHTABLE_GET(tracemalloc_traces, ptr, trace); + } TABLES_UNLOCK(); if (!found) @@ -1213,6 +1364,7 @@ tracemalloc_get_traceback(const void *ptr) return trace.traceback; } + PyDoc_STRVAR(tracemalloc_get_object_traceback_doc, "_get_object_traceback(obj)\n" "\n" @@ -1235,13 +1387,14 @@ py_tracemalloc_get_object_traceback(PyObject *self, PyObject *obj) else ptr = (void *)obj; - traceback = tracemalloc_get_traceback(ptr); + traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, ptr); if (traceback == NULL) Py_RETURN_NONE; return traceback_to_pyobject(traceback, NULL); } + #define PUTS(fd, str) _Py_write_noraise(fd, str, (int)strlen(str)) static void @@ -1262,7 +1415,7 @@ _PyMem_DumpTraceback(int fd, const void *ptr) traceback_t *traceback; int i; - traceback = tracemalloc_get_traceback(ptr); + traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, ptr); if (traceback == NULL) return; @@ -1275,6 +1428,7 @@ _PyMem_DumpTraceback(int fd, const void *ptr) #undef PUTS + PyDoc_STRVAR(tracemalloc_start_doc, "start(nframe: int=1)\n" "\n" @@ -1310,6 +1464,7 @@ PyDoc_STRVAR(tracemalloc_stop_doc, "Stop tracing Python memory allocations and clear traces\n" "of memory blocks allocated by Python."); + static PyObject* py_tracemalloc_stop(PyObject *self) { @@ -1317,6 +1472,7 @@ py_tracemalloc_stop(PyObject *self) Py_RETURN_NONE; } + PyDoc_STRVAR(tracemalloc_get_traceback_limit_doc, "get_traceback_limit() -> int\n" "\n" @@ -1332,6 +1488,7 @@ py_tracemalloc_get_traceback_limit(PyObject *self) return PyLong_FromLong(tracemalloc_config.max_nframe); } + PyDoc_STRVAR(tracemalloc_get_tracemalloc_memory_doc, "get_tracemalloc_memory() -> int\n" "\n" @@ -1355,6 +1512,7 @@ tracemalloc_get_tracemalloc_memory(PyObject *self) return Py_BuildValue("N", size_obj); } + PyDoc_STRVAR(tracemalloc_get_traced_memory_doc, "get_traced_memory() -> (int, int)\n" "\n" @@ -1380,6 +1538,7 @@ tracemalloc_get_traced_memory(PyObject *self) return Py_BuildValue("NN", size_obj, peak_size_obj); } + static PyMethodDef module_methods[] = { {"is_tracing", (PyCFunction)py_tracemalloc_is_tracing, METH_NOARGS, tracemalloc_is_tracing_doc}, @@ -1430,6 +1589,7 @@ PyInit__tracemalloc(void) return m; } + static int parse_sys_xoptions(PyObject *value) { @@ -1458,6 +1618,7 @@ parse_sys_xoptions(PyObject *value) return Py_SAFE_DOWNCAST(nframe, long, int); } + int _PyTraceMalloc_Init(void) { @@ -1516,6 +1677,7 @@ _PyTraceMalloc_Init(void) return tracemalloc_start(nframe); } + void _PyTraceMalloc_Fini(void) { @@ -1524,4 +1686,3 @@ _PyTraceMalloc_Fini(void) #endif tracemalloc_deinit(); } - -- cgit v1.2.1 From 584c58a91d859782dad800727476f3fe44ddad0a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 13:39:05 +0100 Subject: Add C functions _PyTraceMalloc_Track() Issue #26530: * Add C functions _PyTraceMalloc_Track() and _PyTraceMalloc_Untrack() to track memory blocks using the tracemalloc module. * Add _PyTraceMalloc_GetTraceback() to get the traceback of an object. --- Modules/_testcapimodule.c | 75 +++++++++++++++++++++++++++++++++++++++++++ Modules/_tracemalloc.c | 82 ++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 146 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 0fc7cbc328..8c794859eb 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3675,6 +3675,78 @@ pyobject_malloc_without_gil(PyObject *self, PyObject *args) Py_RETURN_NONE; } +static PyObject * +tracemalloc_track(PyObject *self, PyObject *args) +{ + unsigned int domain; + PyObject *ptr_obj; + void *ptr; + Py_ssize_t size; + int release_gil = 0; + int res; + + if (!PyArg_ParseTuple(args, "IOn|i", &domain, &ptr_obj, &size, &release_gil)) + return NULL; + ptr = PyLong_AsVoidPtr(ptr_obj); + if (PyErr_Occurred()) + return NULL; + + if (release_gil) { + Py_BEGIN_ALLOW_THREADS + res = _PyTraceMalloc_Track(domain, (Py_uintptr_t)ptr, size); + Py_END_ALLOW_THREADS + } + else { + res = _PyTraceMalloc_Track(domain, (Py_uintptr_t)ptr, size); + } + + if (res < 0) { + PyErr_SetString(PyExc_RuntimeError, "_PyTraceMalloc_Track error"); + return NULL; + } + + Py_RETURN_NONE; +} + +static PyObject * +tracemalloc_untrack(PyObject *self, PyObject *args) +{ + unsigned int domain; + PyObject *ptr_obj; + void *ptr; + int res; + + if (!PyArg_ParseTuple(args, "IO", &domain, &ptr_obj)) + return NULL; + ptr = PyLong_AsVoidPtr(ptr_obj); + if (PyErr_Occurred()) + return NULL; + + res = _PyTraceMalloc_Untrack(domain, (Py_uintptr_t)ptr); + if (res < 0) { + PyErr_SetString(PyExc_RuntimeError, "_PyTraceMalloc_Track error"); + return NULL; + } + + Py_RETURN_NONE; +} + +static PyObject * +tracemalloc_get_traceback(PyObject *self, PyObject *args) +{ + unsigned int domain; + PyObject *ptr_obj; + void *ptr; + + if (!PyArg_ParseTuple(args, "IO", &domain, &ptr_obj)) + return NULL; + ptr = PyLong_AsVoidPtr(ptr_obj); + if (PyErr_Occurred()) + return NULL; + + return _PyTraceMalloc_GetTraceback(domain, (Py_uintptr_t)ptr); +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3861,6 +3933,9 @@ static PyMethodDef TestMethods[] = { {"pymem_api_misuse", pymem_api_misuse, METH_NOARGS}, {"pymem_malloc_without_gil", pymem_malloc_without_gil, METH_NOARGS}, {"pyobject_malloc_without_gil", pyobject_malloc_without_gil, METH_NOARGS}, + {"tracemalloc_track", tracemalloc_track, METH_VARARGS}, + {"tracemalloc_untrack", tracemalloc_untrack, METH_VARARGS}, + {"tracemalloc_get_traceback", tracemalloc_get_traceback, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 784157fb2c..5ff1f846cd 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -61,8 +61,6 @@ static PyThread_type_lock tables_lock; #define DEFAULT_DOMAIN 0 -typedef unsigned int domain_t; - /* Pack the frame_t structure to reduce the memory footprint. */ typedef struct #ifdef __GNUC__ @@ -70,7 +68,7 @@ __attribute__((packed)) #endif { Py_uintptr_t ptr; - domain_t domain; + _PyTraceMalloc_domain_t domain; } pointer_t; /* Pack the frame_t structure to reduce the memory footprint on 64-bit @@ -519,11 +517,13 @@ traceback_new(void) static void -tracemalloc_remove_trace(domain_t domain, Py_uintptr_t ptr) +tracemalloc_remove_trace(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) { trace_t trace; int removed; + assert(tracemalloc_config.tracing); + if (tracemalloc_config.use_domain) { pointer_t key = {ptr, domain}; removed = _Py_HASHTABLE_POP(tracemalloc_traces, key, trace); @@ -544,12 +544,15 @@ tracemalloc_remove_trace(domain_t domain, Py_uintptr_t ptr) static int -tracemalloc_add_trace(domain_t domain, Py_uintptr_t ptr, size_t size) +tracemalloc_add_trace(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr, + size_t size) { traceback_t *traceback; trace_t trace; int res; + assert(tracemalloc_config.tracing); + /* first, remove the previous trace (if any) */ tracemalloc_remove_trace(domain, ptr); @@ -1183,7 +1186,7 @@ traceback_to_pyobject(traceback_t *traceback, _Py_hashtable_t *intern_table) static PyObject* -trace_to_pyobject(domain_t domain, trace_t *trace, +trace_to_pyobject(_PyTraceMalloc_domain_t domain, trace_t *trace, _Py_hashtable_t *intern_tracebacks) { PyObject *trace_obj = NULL; @@ -1229,7 +1232,7 @@ tracemalloc_get_traces_fill(_Py_hashtable_t *traces, _Py_hashtable_entry_t *entr void *user_data) { get_traces_t *get_traces = user_data; - domain_t domain; + _PyTraceMalloc_domain_t domain; trace_t *trace; PyObject *tracemalloc_obj; int res; @@ -1340,7 +1343,7 @@ finally: static traceback_t* -tracemalloc_get_traceback(domain_t domain, const void *ptr) +tracemalloc_get_traceback(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) { trace_t trace; int found; @@ -1350,7 +1353,7 @@ tracemalloc_get_traceback(domain_t domain, const void *ptr) TABLES_LOCK(); if (tracemalloc_config.use_domain) { - pointer_t key = {(Py_uintptr_t)ptr, domain}; + pointer_t key = {ptr, domain}; found = _Py_HASHTABLE_GET(tracemalloc_traces, key, trace); } else { @@ -1387,7 +1390,7 @@ py_tracemalloc_get_object_traceback(PyObject *self, PyObject *obj) else ptr = (void *)obj; - traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, ptr); + traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, (Py_uintptr_t)ptr); if (traceback == NULL) Py_RETURN_NONE; @@ -1415,7 +1418,7 @@ _PyMem_DumpTraceback(int fd, const void *ptr) traceback_t *traceback; int i; - traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, ptr); + traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, (Py_uintptr_t)ptr); if (traceback == NULL) return; @@ -1686,3 +1689,60 @@ _PyTraceMalloc_Fini(void) #endif tracemalloc_deinit(); } + +int +_PyTraceMalloc_Track(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr, + size_t size) +{ + int res; +#ifdef WITH_THREAD + PyGILState_STATE gil_state; +#endif + + if (!tracemalloc_config.tracing) { + /* tracemalloc is not tracing: do nothing */ + return -2; + } + +#ifdef WITH_THREAD + gil_state = PyGILState_Ensure(); +#endif + + TABLES_LOCK(); + res = tracemalloc_add_trace(domain, ptr, size); + TABLES_UNLOCK(); + +#ifdef WITH_THREAD + PyGILState_Release(gil_state); +#endif + return res; +} + + +int +_PyTraceMalloc_Untrack(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) +{ + if (!tracemalloc_config.tracing) { + /* tracemalloc is not tracing: do nothing */ + return -2; + } + + TABLES_LOCK(); + tracemalloc_remove_trace(domain, ptr); + TABLES_UNLOCK(); + + return 0; +} + + +PyObject* +_PyTraceMalloc_GetTraceback(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) +{ + traceback_t *traceback; + + traceback = tracemalloc_get_traceback(domain, ptr); + if (traceback == NULL) + Py_RETURN_NONE; + + return traceback_to_pyobject(traceback, NULL); +} -- cgit v1.2.1 From b441b8565bacd1e6b769f50634014e706c10db03 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 16:13:31 +0100 Subject: Issue #26588: add debug traces Try to debug random failure on buildbots. --- Modules/_testcapimodule.c | 14 ++++++++++++++ Modules/_tracemalloc.c | 40 +++++++++++++++++++++++++++++++++++----- 2 files changed, 49 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 8c794859eb..f952aec36f 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3747,6 +3747,19 @@ tracemalloc_get_traceback(PyObject *self, PyObject *args) return _PyTraceMalloc_GetTraceback(domain, (Py_uintptr_t)ptr); } +PyObject* +tracemalloc_set_debug(PyObject *self, PyObject *args) +{ + int debug; + extern int tracemalloc_debug; + + if (!PyArg_ParseTuple(args, "i", &debug)) + return NULL; + + tracemalloc_debug = debug; + Py_RETURN_NONE; +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3936,6 +3949,7 @@ static PyMethodDef TestMethods[] = { {"tracemalloc_track", tracemalloc_track, METH_VARARGS}, {"tracemalloc_untrack", tracemalloc_untrack, METH_VARARGS}, {"tracemalloc_get_traceback", tracemalloc_get_traceback, METH_VARARGS}, + {"tracemalloc_set_debug", tracemalloc_set_debug, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 5ff1f846cd..551badee57 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -45,6 +45,8 @@ static struct { int use_domain; } tracemalloc_config = {TRACEMALLOC_NOT_INITIALIZED, 0, 1, 1}; +int tracemalloc_debug = 0; + #if defined(TRACE_RAW_MALLOC) && defined(WITH_THREAD) /* This lock is needed because tracemalloc_free() is called without the GIL held from PyMem_RawFree(). It cannot acquire the lock because it @@ -891,18 +893,24 @@ tracemalloc_clear_traces(void) _Py_hashtable_clear(tracemalloc_filenames); } +#define DEBUG(MSG) \ + if (tracemalloc_debug) { fprintf(stderr, "[pid %li, tid %li] " MSG "\n", (long)getpid(), PyThread_get_thread_ident()); fflush(stderr); } + static int tracemalloc_init(void) { +DEBUG("tracemalloc_init()"); if (tracemalloc_config.initialized == TRACEMALLOC_FINALIZED) { PyErr_SetString(PyExc_RuntimeError, "the tracemalloc module has been unloaded"); return -1; } - if (tracemalloc_config.initialized == TRACEMALLOC_INITIALIZED) + if (tracemalloc_config.initialized == TRACEMALLOC_INITIALIZED) { +DEBUG("tracemalloc_init(): exit (already initialized)"); return 0; + } PyMem_GetAllocator(PYMEM_DOMAIN_RAW, &allocators.raw); @@ -969,9 +977,11 @@ tracemalloc_init(void) /* Disable tracing allocations until hooks are installed. Set also the reentrant flag to detect bugs: fail with an assertion error if set_reentrant(1) is called while tracing is disabled. */ +DEBUG("tracemalloc_init(): set_reentrant(1)"); set_reentrant(1); tracemalloc_config.initialized = TRACEMALLOC_INITIALIZED; +DEBUG("tracemalloc_init(): done"); return 0; } @@ -979,8 +989,11 @@ tracemalloc_init(void) static void tracemalloc_deinit(void) { - if (tracemalloc_config.initialized != TRACEMALLOC_INITIALIZED) +DEBUG("tracemalloc_deinit()"); + if (tracemalloc_config.initialized != TRACEMALLOC_INITIALIZED) { +DEBUG("tracemalloc_deinit(): exit (not initialized)"); return; + } tracemalloc_config.initialized = TRACEMALLOC_FINALIZED; tracemalloc_stop(); @@ -997,11 +1010,13 @@ tracemalloc_deinit(void) } #endif +DEBUG("tracemalloc_deinit(): delete reentrant key"); #ifdef REENTRANT_THREADLOCAL PyThread_delete_key(tracemalloc_reentrant_key); #endif Py_XDECREF(unknown_filename); +DEBUG("tracemalloc_deinit(): done"); } @@ -1011,11 +1026,15 @@ tracemalloc_start(int max_nframe) PyMemAllocatorEx alloc; size_t size; - if (tracemalloc_init() < 0) +DEBUG("tracemalloc_start()"); + if (tracemalloc_init() < 0) { +DEBUG("tracemalloc_start(): ERROR! init failed!"); return -1; + } if (tracemalloc_config.tracing) { /* hook already installed: do nothing */ +DEBUG("tracemalloc_start(): exit (already tracing)"); return 0; } @@ -1057,8 +1076,11 @@ tracemalloc_start(int max_nframe) /* everything is ready: start tracing Python memory allocations */ tracemalloc_config.tracing = 1; + +DEBUG("tracemalloc_start(): set_reentrant(0)"); set_reentrant(0); +DEBUG("tracemalloc_start(): done"); return 0; } @@ -1066,14 +1088,18 @@ tracemalloc_start(int max_nframe) static void tracemalloc_stop(void) { - if (!tracemalloc_config.tracing) +DEBUG("tracemalloc_stop()"); + if (!tracemalloc_config.tracing) { +DEBUG("tracemalloc_stop(): exit (not tracing)"); return; + } /* stop tracing Python memory allocations */ tracemalloc_config.tracing = 0; /* set the reentrant flag to detect bugs: fail with an assertion error if set_reentrant(1) is called while tracing is disabled. */ +DEBUG("tracemalloc_stop(): set_reentrant(1)"); set_reentrant(1); /* unregister the hook on memory allocators */ @@ -1088,6 +1114,7 @@ tracemalloc_stop(void) /* release memory */ raw_free(tracemalloc_traceback); tracemalloc_traceback = NULL; +DEBUG("tracemalloc_stop(): done"); } PyDoc_STRVAR(tracemalloc_is_tracing_doc, @@ -1455,8 +1482,11 @@ py_tracemalloc_start(PyObject *self, PyObject *args) } nframe_int = Py_SAFE_DOWNCAST(nframe, Py_ssize_t, int); - if (tracemalloc_start(nframe_int) < 0) + if (tracemalloc_start(nframe_int) < 0) { +DEBUG("start(): ERROR!"); return NULL; + } +DEBUG("start(): done"); Py_RETURN_NONE; } -- cgit v1.2.1 From 52ea25e31ef4150919814055ab402bf346f57dea Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 17:40:07 +0100 Subject: Issue #26588: more assertions --- Modules/_tracemalloc.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 551badee57..baeb58c16e 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -189,11 +189,11 @@ set_reentrant(int reentrant) { assert(reentrant == 0 || reentrant == 1); if (reentrant) { - assert(PyThread_get_key_value(tracemalloc_reentrant_key) == NULL); + assert(!get_reentrant()); PyThread_set_key_value(tracemalloc_reentrant_key, REENTRANT); } else { - assert(PyThread_get_key_value(tracemalloc_reentrant_key) == REENTRANT); + assert(get_reentrant()); PyThread_set_key_value(tracemalloc_reentrant_key, NULL); } } @@ -901,6 +901,11 @@ static int tracemalloc_init(void) { DEBUG("tracemalloc_init()"); + +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif + if (tracemalloc_config.initialized == TRACEMALLOC_FINALIZED) { PyErr_SetString(PyExc_RuntimeError, "the tracemalloc module has been unloaded"); @@ -1027,6 +1032,11 @@ tracemalloc_start(int max_nframe) size_t size; DEBUG("tracemalloc_start()"); + +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif + if (tracemalloc_init() < 0) { DEBUG("tracemalloc_start(): ERROR! init failed!"); return -1; @@ -1035,8 +1045,10 @@ DEBUG("tracemalloc_start(): ERROR! init failed!"); if (tracemalloc_config.tracing) { /* hook already installed: do nothing */ DEBUG("tracemalloc_start(): exit (already tracing)"); +assert(!get_reentrant()); return 0; } +assert(get_reentrant()); assert(1 <= max_nframe && max_nframe <= MAX_NFRAME); tracemalloc_config.max_nframe = max_nframe; @@ -1081,6 +1093,7 @@ DEBUG("tracemalloc_start(): set_reentrant(0)"); set_reentrant(0); DEBUG("tracemalloc_start(): done"); +assert(!get_reentrant()); return 0; } @@ -1089,10 +1102,17 @@ static void tracemalloc_stop(void) { DEBUG("tracemalloc_stop()"); + +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif + if (!tracemalloc_config.tracing) { DEBUG("tracemalloc_stop(): exit (not tracing)"); +assert(get_reentrant()); return; } +assert(!get_reentrant()); /* stop tracing Python memory allocations */ tracemalloc_config.tracing = 0; @@ -1115,6 +1135,7 @@ DEBUG("tracemalloc_stop(): set_reentrant(1)"); raw_free(tracemalloc_traceback); tracemalloc_traceback = NULL; DEBUG("tracemalloc_stop(): done"); +assert(get_reentrant()); } PyDoc_STRVAR(tracemalloc_is_tracing_doc, -- cgit v1.2.1 From 430af2279718b9657e894bee1a2fbf704850a5cf Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 17:45:09 +0100 Subject: Add assertions on tracemalloc_reentrant_key Issue #26588. --- Modules/_tracemalloc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index baeb58c16e..5c9f69e5d6 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -167,7 +167,7 @@ tracemalloc_error(const char *format, ...) # error "need native thread local storage (TLS)" #endif -static int tracemalloc_reentrant_key; +static int tracemalloc_reentrant_key = -1; /* Any non-NULL pointer can be used */ #define REENTRANT Py_True @@ -175,7 +175,10 @@ static int tracemalloc_reentrant_key; static int get_reentrant(void) { - void *ptr = PyThread_get_key_value(tracemalloc_reentrant_key); + void *ptr; + + assert(tracemalloc_reentrant_key != -1); + ptr = PyThread_get_key_value(tracemalloc_reentrant_key); if (ptr != NULL) { assert(ptr == REENTRANT); return 1; @@ -188,6 +191,8 @@ static void set_reentrant(int reentrant) { assert(reentrant == 0 || reentrant == 1); + assert(tracemalloc_reentrant_key != -1); + if (reentrant) { assert(!get_reentrant()); PyThread_set_key_value(tracemalloc_reentrant_key, REENTRANT); @@ -1018,6 +1023,7 @@ DEBUG("tracemalloc_deinit(): exit (not initialized)"); DEBUG("tracemalloc_deinit(): delete reentrant key"); #ifdef REENTRANT_THREADLOCAL PyThread_delete_key(tracemalloc_reentrant_key); + tracemalloc_reentrant_key = -1; #endif Py_XDECREF(unknown_filename); -- cgit v1.2.1 From abd7097958dacf7f8d2d55f5e6eb4af5070de78e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 18:48:50 +0100 Subject: Issue #26588: one more assertion --- Modules/_tracemalloc.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 5c9f69e5d6..288942a904 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -992,6 +992,7 @@ DEBUG("tracemalloc_init(): set_reentrant(1)"); tracemalloc_config.initialized = TRACEMALLOC_INITIALIZED; DEBUG("tracemalloc_init(): done"); +assert(get_reentrant()); return 0; } -- cgit v1.2.1 From a44328874ef2c1c50946d0494cbf3d980d4efa39 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 20:56:49 +0100 Subject: Issue #26588: Don't call tracemalloc_init() at module initilization So it's possible to get debug messages in test_tracemalloc. --- Modules/_tracemalloc.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 288942a904..79a716461d 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -1644,8 +1644,10 @@ PyInit__tracemalloc(void) if (m == NULL) return NULL; +#if 0 if (tracemalloc_init() < 0) return NULL; +#endif return m; } -- cgit v1.2.1 From 2aa9a6403aff1f2949f49176f96075c87631db68 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 21:06:07 +0100 Subject: Issue #26588: more debug traces --- Modules/_tracemalloc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 79a716461d..a674d0c604 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -899,7 +899,7 @@ tracemalloc_clear_traces(void) } #define DEBUG(MSG) \ - if (tracemalloc_debug) { fprintf(stderr, "[pid %li, tid %li] " MSG "\n", (long)getpid(), PyThread_get_thread_ident()); fflush(stderr); } + if (tracemalloc_debug) { fprintf(stderr, "[pid %li, tid %li, reentrant key %i] " MSG "\n", (long)getpid(), PyThread_get_thread_ident(), tracemalloc_reentrant_key); fflush(stderr); } static int @@ -926,6 +926,7 @@ DEBUG("tracemalloc_init(): exit (already initialized)"); #ifdef REENTRANT_THREADLOCAL tracemalloc_reentrant_key = PyThread_create_key(); +fprintf(stderr, "[pid %li, tid %li] PyThread_create_key() -> %i\n", (long)getpid(), PyThread_get_thread_ident(), tracemalloc_reentrant_key); fflush(stderr); if (tracemalloc_reentrant_key == -1) { #ifdef MS_WINDOWS PyErr_SetFromWindowsErr(0); @@ -1023,6 +1024,7 @@ DEBUG("tracemalloc_deinit(): exit (not initialized)"); DEBUG("tracemalloc_deinit(): delete reentrant key"); #ifdef REENTRANT_THREADLOCAL +fprintf(stderr, "[pid %li, tid %li] PyThread_delete_key(%i)\n", (long)getpid(), PyThread_get_thread_ident(), tracemalloc_reentrant_key); fflush(stderr); PyThread_delete_key(tracemalloc_reentrant_key); tracemalloc_reentrant_key = -1; #endif @@ -1640,6 +1642,9 @@ PyMODINIT_FUNC PyInit__tracemalloc(void) { PyObject *m; + +fprintf(stderr, "[pid %li, tid %li] PyInit__tracemalloc\n", (long)getpid(), PyThread_get_thread_ident()); fflush(stderr); + m = PyModule_Create(&module_def); if (m == NULL) return NULL; -- cgit v1.2.1 From f0a7b6d3ae5cf94517c2d1dcca9d872cea0da9c1 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Mar 2016 23:54:42 +0100 Subject: Issue #26588: remove debug traces from _tracemalloc. --- Modules/_testcapimodule.c | 14 ---------- Modules/_tracemalloc.c | 69 ++++------------------------------------------- 2 files changed, 5 insertions(+), 78 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index f952aec36f..8c794859eb 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3747,19 +3747,6 @@ tracemalloc_get_traceback(PyObject *self, PyObject *args) return _PyTraceMalloc_GetTraceback(domain, (Py_uintptr_t)ptr); } -PyObject* -tracemalloc_set_debug(PyObject *self, PyObject *args) -{ - int debug; - extern int tracemalloc_debug; - - if (!PyArg_ParseTuple(args, "i", &debug)) - return NULL; - - tracemalloc_debug = debug; - Py_RETURN_NONE; -} - static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -3949,7 +3936,6 @@ static PyMethodDef TestMethods[] = { {"tracemalloc_track", tracemalloc_track, METH_VARARGS}, {"tracemalloc_untrack", tracemalloc_untrack, METH_VARARGS}, {"tracemalloc_get_traceback", tracemalloc_get_traceback, METH_VARARGS}, - {"tracemalloc_set_debug", tracemalloc_set_debug, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index a674d0c604..77742dec11 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -45,8 +45,6 @@ static struct { int use_domain; } tracemalloc_config = {TRACEMALLOC_NOT_INITIALIZED, 0, 1, 1}; -int tracemalloc_debug = 0; - #if defined(TRACE_RAW_MALLOC) && defined(WITH_THREAD) /* This lock is needed because tracemalloc_free() is called without the GIL held from PyMem_RawFree(). It cannot acquire the lock because it @@ -898,35 +896,23 @@ tracemalloc_clear_traces(void) _Py_hashtable_clear(tracemalloc_filenames); } -#define DEBUG(MSG) \ - if (tracemalloc_debug) { fprintf(stderr, "[pid %li, tid %li, reentrant key %i] " MSG "\n", (long)getpid(), PyThread_get_thread_ident(), tracemalloc_reentrant_key); fflush(stderr); } - static int tracemalloc_init(void) { -DEBUG("tracemalloc_init()"); - -#ifdef WITH_THREAD - assert(PyGILState_Check()); -#endif - if (tracemalloc_config.initialized == TRACEMALLOC_FINALIZED) { PyErr_SetString(PyExc_RuntimeError, "the tracemalloc module has been unloaded"); return -1; } - if (tracemalloc_config.initialized == TRACEMALLOC_INITIALIZED) { -DEBUG("tracemalloc_init(): exit (already initialized)"); + if (tracemalloc_config.initialized == TRACEMALLOC_INITIALIZED) return 0; - } PyMem_GetAllocator(PYMEM_DOMAIN_RAW, &allocators.raw); #ifdef REENTRANT_THREADLOCAL tracemalloc_reentrant_key = PyThread_create_key(); -fprintf(stderr, "[pid %li, tid %li] PyThread_create_key() -> %i\n", (long)getpid(), PyThread_get_thread_ident(), tracemalloc_reentrant_key); fflush(stderr); if (tracemalloc_reentrant_key == -1) { #ifdef MS_WINDOWS PyErr_SetFromWindowsErr(0); @@ -988,12 +974,9 @@ fprintf(stderr, "[pid %li, tid %li] PyThread_create_key() -> %i\n", (long)getpid /* Disable tracing allocations until hooks are installed. Set also the reentrant flag to detect bugs: fail with an assertion error if set_reentrant(1) is called while tracing is disabled. */ -DEBUG("tracemalloc_init(): set_reentrant(1)"); set_reentrant(1); tracemalloc_config.initialized = TRACEMALLOC_INITIALIZED; -DEBUG("tracemalloc_init(): done"); -assert(get_reentrant()); return 0; } @@ -1001,11 +984,8 @@ assert(get_reentrant()); static void tracemalloc_deinit(void) { -DEBUG("tracemalloc_deinit()"); - if (tracemalloc_config.initialized != TRACEMALLOC_INITIALIZED) { -DEBUG("tracemalloc_deinit(): exit (not initialized)"); + if (tracemalloc_config.initialized != TRACEMALLOC_INITIALIZED) return; - } tracemalloc_config.initialized = TRACEMALLOC_FINALIZED; tracemalloc_stop(); @@ -1022,15 +1002,12 @@ DEBUG("tracemalloc_deinit(): exit (not initialized)"); } #endif -DEBUG("tracemalloc_deinit(): delete reentrant key"); #ifdef REENTRANT_THREADLOCAL -fprintf(stderr, "[pid %li, tid %li] PyThread_delete_key(%i)\n", (long)getpid(), PyThread_get_thread_ident(), tracemalloc_reentrant_key); fflush(stderr); PyThread_delete_key(tracemalloc_reentrant_key); tracemalloc_reentrant_key = -1; #endif Py_XDECREF(unknown_filename); -DEBUG("tracemalloc_deinit(): done"); } @@ -1040,24 +1017,13 @@ tracemalloc_start(int max_nframe) PyMemAllocatorEx alloc; size_t size; -DEBUG("tracemalloc_start()"); - -#ifdef WITH_THREAD - assert(PyGILState_Check()); -#endif - - if (tracemalloc_init() < 0) { -DEBUG("tracemalloc_start(): ERROR! init failed!"); + if (tracemalloc_init() < 0) return -1; - } if (tracemalloc_config.tracing) { /* hook already installed: do nothing */ -DEBUG("tracemalloc_start(): exit (already tracing)"); -assert(!get_reentrant()); return 0; } -assert(get_reentrant()); assert(1 <= max_nframe && max_nframe <= MAX_NFRAME); tracemalloc_config.max_nframe = max_nframe; @@ -1097,12 +1063,8 @@ assert(get_reentrant()); /* everything is ready: start tracing Python memory allocations */ tracemalloc_config.tracing = 1; - -DEBUG("tracemalloc_start(): set_reentrant(0)"); set_reentrant(0); -DEBUG("tracemalloc_start(): done"); -assert(!get_reentrant()); return 0; } @@ -1110,25 +1072,14 @@ assert(!get_reentrant()); static void tracemalloc_stop(void) { -DEBUG("tracemalloc_stop()"); - -#ifdef WITH_THREAD - assert(PyGILState_Check()); -#endif - - if (!tracemalloc_config.tracing) { -DEBUG("tracemalloc_stop(): exit (not tracing)"); -assert(get_reentrant()); + if (!tracemalloc_config.tracing) return; - } -assert(!get_reentrant()); /* stop tracing Python memory allocations */ tracemalloc_config.tracing = 0; /* set the reentrant flag to detect bugs: fail with an assertion error if set_reentrant(1) is called while tracing is disabled. */ -DEBUG("tracemalloc_stop(): set_reentrant(1)"); set_reentrant(1); /* unregister the hook on memory allocators */ @@ -1143,8 +1094,6 @@ DEBUG("tracemalloc_stop(): set_reentrant(1)"); /* release memory */ raw_free(tracemalloc_traceback); tracemalloc_traceback = NULL; -DEBUG("tracemalloc_stop(): done"); -assert(get_reentrant()); } PyDoc_STRVAR(tracemalloc_is_tracing_doc, @@ -1512,11 +1461,8 @@ py_tracemalloc_start(PyObject *self, PyObject *args) } nframe_int = Py_SAFE_DOWNCAST(nframe, Py_ssize_t, int); - if (tracemalloc_start(nframe_int) < 0) { -DEBUG("start(): ERROR!"); + if (tracemalloc_start(nframe_int) < 0) return NULL; - } -DEBUG("start(): done"); Py_RETURN_NONE; } @@ -1642,17 +1588,12 @@ PyMODINIT_FUNC PyInit__tracemalloc(void) { PyObject *m; - -fprintf(stderr, "[pid %li, tid %li] PyInit__tracemalloc\n", (long)getpid(), PyThread_get_thread_ident()); fflush(stderr); - m = PyModule_Create(&module_def); if (m == NULL) return NULL; -#if 0 if (tracemalloc_init() < 0) return NULL; -#endif return m; } -- cgit v1.2.1 From 1109cb004527c790c9063f05795568715d394ec5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 00:10:24 +0100 Subject: Fix _tracemalloc start/stop Issue #26588: Fix _tracemalloc start/stop: don't play with the reentrant flag. set_reentrant(1) fails with an assertion error if tracemalloc_init() is called first in a thread A and tracemalloc_start() is called second in a thread B. The tracemalloc is imported in a thread A. Importing the module calls tracemalloc_init(). tracemalloc.start() is called in a thread B. --- Modules/_tracemalloc.c | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index fd520f3259..0e5f84699c 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -740,10 +740,6 @@ tracemalloc_clear_traces(void) assert(PyGILState_Check()); #endif - /* Disable also reentrant calls to tracemalloc_malloc() to not add a new - trace while we are clearing traces */ - assert(get_reentrant()); - TABLES_LOCK(); _Py_hashtable_clear(tracemalloc_traces); tracemalloc_traced_memory = 0; @@ -823,11 +819,6 @@ tracemalloc_init(void) tracemalloc_empty_traceback.frames[0].lineno = 0; tracemalloc_empty_traceback.hash = traceback_hash(&tracemalloc_empty_traceback); - /* Disable tracing allocations until hooks are installed. Set - also the reentrant flag to detect bugs: fail with an assertion error - if set_reentrant(1) is called while tracing is disabled. */ - set_reentrant(1); - tracemalloc_config.initialized = TRACEMALLOC_INITIALIZED; return 0; } @@ -912,7 +903,6 @@ tracemalloc_start(int max_nframe) /* everything is ready: start tracing Python memory allocations */ tracemalloc_config.tracing = 1; - set_reentrant(0); return 0; } @@ -926,10 +916,6 @@ tracemalloc_stop(void) /* stop tracing Python memory allocations */ tracemalloc_config.tracing = 0; - /* set the reentrant flag to detect bugs: fail with an assertion error if - set_reentrant(1) is called while tracing is disabled. */ - set_reentrant(1); - /* unregister the hook on memory allocators */ #ifdef TRACE_RAW_MALLOC PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &allocators.raw); -- cgit v1.2.1 From 2ae9d8ac2d493bab21254ed975d00e26fc336698 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 00:17:04 +0100 Subject: Enhance _tracemalloc debug mode Issue #26588: Enhance assertion in set_reentrant() --- Modules/_tracemalloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 0e5f84699c..6327c95d2a 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -189,7 +189,7 @@ get_reentrant(void) static void set_reentrant(int reentrant) { - assert(!reentrant || !get_reentrant()); + assert(reentrant != tracemalloc_reentrant); tracemalloc_reentrant = reentrant; } #endif -- cgit v1.2.1 From 10b6e2cec2c90e81ce17899dc2a5cf06b1d7c1a5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 00:18:36 +0100 Subject: Fix macros in hashtable.h Add parenthesis. --- Modules/hashtable.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/hashtable.h b/Modules/hashtable.h index 41542d279e..4199aab314 100644 --- a/Modules/hashtable.h +++ b/Modules/hashtable.h @@ -146,10 +146,10 @@ PyAPI_FUNC(int) _Py_hashtable_set( const void *data); #define _Py_HASHTABLE_SET(TABLE, KEY, DATA) \ - _Py_hashtable_set(TABLE, sizeof(KEY), &KEY, sizeof(DATA), &(DATA)) + _Py_hashtable_set(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA)) #define _Py_HASHTABLE_SET_NODATA(TABLE, KEY) \ - _Py_hashtable_set(TABLE, sizeof(KEY), &KEY, 0, NULL) + _Py_hashtable_set(TABLE, sizeof(KEY), &(KEY), 0, NULL) /* Get an entry. -- cgit v1.2.1 From fb5da839c5e36fda12ffe359a0f231b683c0e860 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 00:43:54 +0100 Subject: Implement finalizer for os.scandir() iterator Issue #26603: * Implement finalizer for os.scandir() iterator * Set the source parameter when emitting the ResourceWarning warning * Close the iterator before emitting the warning --- Modules/posixmodule.c | 64 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 65b20be468..1cd0f24148 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12101,29 +12101,38 @@ ScandirIterator_exit(ScandirIterator *self, PyObject *args) } static void -ScandirIterator_dealloc(ScandirIterator *iterator) +ScandirIterator_finalize(ScandirIterator *iterator) { + PyObject *error_type, *error_value, *error_traceback; + + /* Save the current exception, if any. */ + PyErr_Fetch(&error_type, &error_value, &error_traceback); + if (!ScandirIterator_is_closed(iterator)) { - PyObject *exc, *val, *tb; - Py_ssize_t old_refcount = Py_REFCNT(iterator); - /* Py_INCREF/Py_DECREF cannot be used, because the refcount is - * likely zero, Py_DECREF would call again the destructor. - */ - ++Py_REFCNT(iterator); - PyErr_Fetch(&exc, &val, &tb); - if (PyErr_WarnFormat(PyExc_ResourceWarning, 1, - "unclosed scandir iterator %R", iterator)) { + ScandirIterator_closedir(iterator); + + if (PyErr_ResourceWarning((PyObject *)iterator, 1, + "unclosed scandir iterator %R", iterator)) { /* Spurious errors can appear at shutdown */ - if (PyErr_ExceptionMatches(PyExc_Warning)) + if (PyErr_ExceptionMatches(PyExc_Warning)) { PyErr_WriteUnraisable((PyObject *) iterator); + } } - PyErr_Restore(exc, val, tb); - Py_REFCNT(iterator) = old_refcount; - - ScandirIterator_closedir(iterator); } - Py_XDECREF(iterator->path.object); + + Py_CLEAR(iterator->path.object); path_cleanup(&iterator->path); + + /* Restore the saved exception. */ + PyErr_Restore(error_type, error_value, error_traceback); +} + +static void +ScandirIterator_dealloc(ScandirIterator *iterator) +{ + if (PyObject_CallFinalizerFromDealloc((PyObject *)iterator) < 0) + return; + Py_TYPE(iterator)->tp_free((PyObject *)iterator); } @@ -12155,7 +12164,8 @@ static PyTypeObject ScandirIteratorType = { 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ + Py_TPFLAGS_DEFAULT + | Py_TPFLAGS_HAVE_FINALIZE, /* tp_flags */ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ @@ -12164,6 +12174,26 @@ static PyTypeObject ScandirIteratorType = { PyObject_SelfIter, /* tp_iter */ (iternextfunc)ScandirIterator_iternext, /* tp_iternext */ ScandirIterator_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 */ + 0, /* tp_del */ + 0, /* tp_version_tag */ + (destructor)ScandirIterator_finalize, /* tp_finalize */ }; static PyObject * -- cgit v1.2.1 From 8fff5d882687dcb2ca6c655860bbd3b9c54fd7da Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 09:08:08 +0100 Subject: Issue #26588: Optimize tracemalloc_realloc() No need to remove the old trace if the memory block didn't move. --- Modules/_tracemalloc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 3d96860f53..139b16963c 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -633,7 +633,12 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) /* an existing memory block has been resized */ TABLES_LOCK(); - REMOVE_TRACE(ptr); + + /* tracemalloc_add_trace() updates the trace if there is already + a trace at address (domain, ptr2) */ + if (ptr2 != ptr) { + REMOVE_TRACE(ptr); + } if (ADD_TRACE(ptr2, new_size) < 0) { /* Memory allocation failed. The error cannot be reported to -- cgit v1.2.1 From a5624f4f81d487af1520f790b894f6f9e519de7b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 09:25:01 +0100 Subject: Issue #26588: * _Py_HASHTABLE_ENTRY_DATA: change type from "char *" to "const void *" * Add _Py_HASHTABLE_ENTRY_WRITE_PKEY() macro * Rename _Py_HASHTABLE_ENTRY_WRITE_DATA() macro to _Py_HASHTABLE_ENTRY_WRITE_PDATA() * Add _Py_HASHTABLE_ENTRY_WRITE_DATA() macro --- Modules/_tracemalloc.c | 2 +- Modules/hashtable.c | 10 ++++------ Modules/hashtable.h | 27 +++++++++++++++++++++++---- 3 files changed, 28 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 139b16963c..0bab540ee1 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -1263,7 +1263,7 @@ tracemalloc_pyobject_decref_cb(_Py_hashtable_t *tracebacks, void *user_data) { PyObject *obj; - _Py_HASHTABLE_ENTRY_READ_DATA(tracebacks, entry, sizeof(obj), &obj); + _Py_HASHTABLE_ENTRY_READ_DATA(tracebacks, entry, obj); Py_DECREF(obj); return 0; } diff --git a/Modules/hashtable.c b/Modules/hashtable.c index bb20cce589..d80acc6b21 100644 --- a/Modules/hashtable.c +++ b/Modules/hashtable.c @@ -287,7 +287,7 @@ _Py_hashtable_pop_entry(_Py_hashtable_t *ht, size_t key_size, const void *pkey, ht->entries--; if (data != NULL) - _Py_HASHTABLE_ENTRY_READ_DATA(ht, entry, data_size, data); + _Py_HASHTABLE_ENTRY_READ_PDATA(ht, entry, data_size, data); ht->alloc.free(entry); if ((float)ht->entries / (float)ht->num_buckets < HASHTABLE_LOW) @@ -325,10 +325,8 @@ _Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, } entry->key_hash = key_hash; - memcpy((void *)_Py_HASHTABLE_ENTRY_KEY(entry), pkey, key_size); - - assert(data_size == ht->data_size); - memcpy(_Py_HASHTABLE_ENTRY_DATA(ht, entry), data, data_size); + _Py_HASHTABLE_ENTRY_WRITE_PKEY(key_size, entry, pkey); + _Py_HASHTABLE_ENTRY_WRITE_PDATA(ht, entry, data_size, data); _Py_slist_prepend(&ht->buckets[index], (_Py_slist_item_t*)entry); ht->entries++; @@ -350,7 +348,7 @@ _Py_hashtable_get(_Py_hashtable_t *ht, size_t key_size,const void *pkey, entry = _Py_hashtable_get_entry(ht, key_size, pkey); if (entry == NULL) return 0; - _Py_HASHTABLE_ENTRY_READ_DATA(ht, entry, data_size, data); + _Py_HASHTABLE_ENTRY_READ_PDATA(ht, entry, data_size, data); return 1; } diff --git a/Modules/hashtable.h b/Modules/hashtable.h index 4199aab314..9c3fbdd671 100644 --- a/Modules/hashtable.h +++ b/Modules/hashtable.h @@ -30,10 +30,13 @@ typedef struct { } _Py_hashtable_entry_t; #define _Py_HASHTABLE_ENTRY_KEY(ENTRY) \ - ((const void *)((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t))) + ((const void *)((char *)(ENTRY) \ + + sizeof(_Py_hashtable_entry_t))) #define _Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY) \ - ((char *)(ENTRY) + sizeof(_Py_hashtable_entry_t) + (TABLE)->key_size) + ((const void *)((char *)(ENTRY) \ + + sizeof(_Py_hashtable_entry_t) \ + + (TABLE)->key_size)) /* Get a key value from pkey: use memcpy() rather than a pointer dereference to avoid memory alignment issues. */ @@ -49,10 +52,26 @@ typedef struct { memcpy(&(KEY), _Py_HASHTABLE_ENTRY_KEY(ENTRY), sizeof(KEY)); \ } while (0) -#define _Py_HASHTABLE_ENTRY_READ_DATA(TABLE, ENTRY, DATA_SIZE, DATA) \ +#define _Py_HASHTABLE_ENTRY_WRITE_PKEY(KEY_SIZE, ENTRY, PKEY) \ + do { \ + memcpy((void *)_Py_HASHTABLE_ENTRY_KEY(ENTRY), (PKEY), (KEY_SIZE)); \ + } while (0) + +#define _Py_HASHTABLE_ENTRY_READ_PDATA(TABLE, ENTRY, DATA_SIZE, PDATA) \ + do { \ + assert((DATA_SIZE) == (TABLE)->data_size); \ + memcpy((PDATA), _Py_HASHTABLE_ENTRY_DATA(TABLE, (ENTRY)), \ + (DATA_SIZE)); \ + } while (0) + +#define _Py_HASHTABLE_ENTRY_READ_DATA(TABLE, ENTRY, DATA) \ + _Py_HASHTABLE_ENTRY_READ_PDATA((TABLE), (ENTRY), sizeof(DATA), &(DATA)) + +#define _Py_HASHTABLE_ENTRY_WRITE_PDATA(TABLE, ENTRY, DATA_SIZE, PDATA) \ do { \ assert((DATA_SIZE) == (TABLE)->data_size); \ - memcpy(DATA, _Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY), DATA_SIZE); \ + memcpy((void *)_Py_HASHTABLE_ENTRY_DATA((TABLE), (ENTRY)), \ + (PDATA), (DATA_SIZE)); \ } while (0) -- cgit v1.2.1 From 7a36eb4afb410c63b561b8b598cb114bd87a9893 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 09:38:54 +0100 Subject: Issue #26588: * Optimize tracemalloc_add_trace(): modify hashtable entry data (trace) if the memory block is already tracked, rather than trying to remove the old trace and then add a new trace. * Add _Py_HASHTABLE_ENTRY_WRITE_DATA() macro --- Modules/_tracemalloc.c | 38 +++++++++++++++++++++++++++----------- Modules/hashtable.h | 3 +++ 2 files changed, 30 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 0bab540ee1..e6465a3b74 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -552,33 +552,49 @@ static int tracemalloc_add_trace(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr, size_t size) { + pointer_t key = {ptr, domain}; traceback_t *traceback; trace_t trace; + _Py_hashtable_entry_t* entry; int res; assert(tracemalloc_config.tracing); - /* first, remove the previous trace (if any) */ - tracemalloc_remove_trace(domain, ptr); - traceback = traceback_new(); if (traceback == NULL) { return -1; } - trace.size = size; - trace.traceback = traceback; - if (tracemalloc_config.use_domain) { - pointer_t key = {ptr, domain}; - res = _Py_HASHTABLE_SET(tracemalloc_traces, key, trace); + entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_traces, key); } else { - res = _Py_HASHTABLE_SET(tracemalloc_traces, ptr, trace); + entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_traces, ptr); } - if (res != 0) { - return res; + if (entry != NULL) { + /* the memory block is already tracked */ + _Py_HASHTABLE_ENTRY_READ_DATA(tracemalloc_traces, entry, trace); + assert(tracemalloc_traced_memory >= trace.size); + tracemalloc_traced_memory -= trace.size; + + trace.size = size; + trace.traceback = traceback; + _Py_HASHTABLE_ENTRY_WRITE_DATA(tracemalloc_traces, entry, trace); + } + else { + trace.size = size; + trace.traceback = traceback; + + if (tracemalloc_config.use_domain) { + res = _Py_HASHTABLE_SET(tracemalloc_traces, key, trace); + } + else { + res = _Py_HASHTABLE_SET(tracemalloc_traces, ptr, trace); + } + if (res != 0) { + return res; + } } assert(tracemalloc_traced_memory <= PY_SIZE_MAX - size); diff --git a/Modules/hashtable.h b/Modules/hashtable.h index 9c3fbdd671..e3e8148fcc 100644 --- a/Modules/hashtable.h +++ b/Modules/hashtable.h @@ -74,6 +74,9 @@ typedef struct { (PDATA), (DATA_SIZE)); \ } while (0) +#define _Py_HASHTABLE_ENTRY_WRITE_DATA(TABLE, ENTRY, DATA) \ + _Py_HASHTABLE_ENTRY_WRITE_PDATA(TABLE, ENTRY, sizeof(DATA), &(DATA)) + /* _Py_hashtable: prototypes */ -- cgit v1.2.1 From 61adfb874498d243f5bea2da569368f2b8b392a2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 09:52:13 +0100 Subject: Cleanup hashtable.h Issue #26588: * Pass the hash table rather than the key size to hash and compare functions * _Py_HASHTABLE_READ_KEY() and _Py_HASHTABLE_ENTRY_READ_KEY() macros now expect the hash table as the first parameter, rather than the key size * tracemalloc_get_traces_fill(): use _Py_HASHTABLE_ENTRY_READ_DATA() rather than pointer dereference * Remove the _Py_HASHTABLE_ENTRY_WRITE_PKEY() macro * Move "PKEY" and "PDATA" macros inside hashtable.c --- Modules/_tracemalloc.c | 50 ++++++++++++++++++++++---------------------- Modules/hashtable.c | 55 +++++++++++++++++++++++++++++-------------------- Modules/hashtable.h | 56 ++++++++++++++++++++++---------------------------- 3 files changed, 81 insertions(+), 80 deletions(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index e6465a3b74..169fd2c57d 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -223,23 +223,23 @@ set_reentrant(int reentrant) static Py_uhash_t -hashtable_hash_pyobject(size_t key_size, const void *pkey) +hashtable_hash_pyobject(_Py_hashtable_t *ht, const void *pkey) { PyObject *obj; - _Py_HASHTABLE_READ_KEY(key_size, pkey, obj); + _Py_HASHTABLE_READ_KEY(ht, pkey, obj); return PyObject_Hash(obj); } static int -hashtable_compare_unicode(size_t key_size, const void *pkey, +hashtable_compare_unicode(_Py_hashtable_t *ht, const void *pkey, const _Py_hashtable_entry_t *entry) { PyObject *key1, *key2; - _Py_HASHTABLE_READ_KEY(key_size, pkey, key1); - _Py_HASHTABLE_ENTRY_READ_KEY(key_size, entry, key2); + _Py_HASHTABLE_READ_KEY(ht, pkey, key1); + _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, key2); if (key1 != NULL && key2 != NULL) return (PyUnicode_Compare(key1, key2) == 0); @@ -249,12 +249,12 @@ hashtable_compare_unicode(size_t key_size, const void *pkey, static Py_uhash_t -hashtable_hash_pointer_t(size_t key_size, const void *pkey) +hashtable_hash_pointer_t(_Py_hashtable_t *ht, const void *pkey) { pointer_t ptr; Py_uhash_t hash; - _Py_HASHTABLE_READ_KEY(key_size, pkey, ptr); + _Py_HASHTABLE_READ_KEY(ht, pkey, ptr); hash = (Py_uhash_t)_Py_HashPointer((void*)ptr.ptr); hash ^= ptr.domain; @@ -263,13 +263,13 @@ hashtable_hash_pointer_t(size_t key_size, const void *pkey) int -hashtable_compare_pointer_t(size_t key_size, const void *pkey, +hashtable_compare_pointer_t(_Py_hashtable_t *ht, const void *pkey, const _Py_hashtable_entry_t *entry) { pointer_t ptr1, ptr2; - _Py_HASHTABLE_READ_KEY(key_size, pkey, ptr1); - _Py_HASHTABLE_ENTRY_READ_KEY(key_size, entry, ptr2); + _Py_HASHTABLE_READ_KEY(ht, pkey, ptr1); + _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, ptr2); /* compare pointer before domain, because pointer is more likely to be different */ @@ -304,25 +304,25 @@ raw_free(void *ptr) static Py_uhash_t -hashtable_hash_traceback(size_t key_size, const void *pkey) +hashtable_hash_traceback(_Py_hashtable_t *ht, const void *pkey) { traceback_t *traceback; - _Py_HASHTABLE_READ_KEY(key_size, pkey, traceback); + _Py_HASHTABLE_READ_KEY(ht, pkey, traceback); return traceback->hash; } static int -hashtable_compare_traceback(size_t key_size, const void *pkey, - const _Py_hashtable_entry_t *he) +hashtable_compare_traceback(_Py_hashtable_t *ht, const void *pkey, + const _Py_hashtable_entry_t *entry) { traceback_t *traceback1, *traceback2; const frame_t *frame1, *frame2; int i; - _Py_HASHTABLE_READ_KEY(key_size, pkey, traceback1); - _Py_HASHTABLE_ENTRY_READ_KEY(key_size, he, traceback2); + _Py_HASHTABLE_READ_KEY(ht, pkey, traceback1); + _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, traceback2); if (traceback1->nframe != traceback2->nframe) return 0; @@ -395,8 +395,7 @@ tracemalloc_get_frame(PyFrameObject *pyframe, frame_t *frame) /* intern the filename */ entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_filenames, filename); if (entry != NULL) { - _Py_HASHTABLE_ENTRY_READ_KEY(tracemalloc_filenames->key_size, entry, - filename); + _Py_HASHTABLE_ENTRY_READ_KEY(tracemalloc_filenames, entry, filename); } else { /* tracemalloc_filenames is responsible to keep a reference @@ -490,8 +489,7 @@ traceback_new(void) /* intern the traceback */ entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_tracebacks, traceback); if (entry != NULL) { - _Py_HASHTABLE_ENTRY_READ_KEY(tracemalloc_tracebacks->key_size, entry, - traceback); + _Py_HASHTABLE_ENTRY_READ_KEY(tracemalloc_tracebacks, entry, traceback); } else { traceback_t *copy; @@ -873,7 +871,7 @@ tracemalloc_clear_filename(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, { PyObject *filename; - _Py_HASHTABLE_ENTRY_READ_KEY(ht->key_size, entry, filename); + _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, filename); Py_DECREF(filename); return 0; } @@ -885,7 +883,7 @@ traceback_free_traceback(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, { traceback_t *traceback; - _Py_HASHTABLE_ENTRY_READ_KEY(ht->key_size, entry, traceback); + _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, traceback); raw_free(traceback); return 0; } @@ -1246,21 +1244,21 @@ tracemalloc_get_traces_fill(_Py_hashtable_t *traces, _Py_hashtable_entry_t *entr { get_traces_t *get_traces = user_data; _PyTraceMalloc_domain_t domain; - trace_t *trace; + trace_t trace; PyObject *tracemalloc_obj; int res; if (tracemalloc_config.use_domain) { pointer_t key; - _Py_HASHTABLE_ENTRY_READ_KEY(traces->key_size, entry, key); + _Py_HASHTABLE_ENTRY_READ_KEY(traces, entry, key); domain = key.domain; } else { domain = DEFAULT_DOMAIN; } - trace = (trace_t *)_Py_HASHTABLE_ENTRY_DATA(traces, entry); + _Py_HASHTABLE_ENTRY_READ_DATA(traces, entry, trace); - tracemalloc_obj = trace_to_pyobject(domain, trace, get_traces->tracebacks); + tracemalloc_obj = trace_to_pyobject(domain, &trace, get_traces->tracebacks); if (tracemalloc_obj == NULL) return 1; diff --git a/Modules/hashtable.c b/Modules/hashtable.c index d80acc6b21..b53cc24083 100644 --- a/Modules/hashtable.c +++ b/Modules/hashtable.c @@ -61,6 +61,20 @@ #define HASHTABLE_ITEM_SIZE(HT) \ (sizeof(_Py_hashtable_entry_t) + (HT)->key_size + (HT)->data_size) +#define ENTRY_READ_PDATA(TABLE, ENTRY, DATA_SIZE, PDATA) \ + do { \ + assert((DATA_SIZE) == (TABLE)->data_size); \ + Py_MEMCPY((PDATA), _Py_HASHTABLE_ENTRY_PDATA(TABLE, (ENTRY)), \ + (DATA_SIZE)); \ + } while (0) + +#define ENTRY_WRITE_PDATA(TABLE, ENTRY, DATA_SIZE, PDATA) \ + do { \ + assert((DATA_SIZE) == (TABLE)->data_size); \ + Py_MEMCPY((void *)_Py_HASHTABLE_ENTRY_PDATA((TABLE), (ENTRY)), \ + (PDATA), (DATA_SIZE)); \ + } while (0) + /* Forward declaration */ static void hashtable_rehash(_Py_hashtable_t *ht); @@ -91,21 +105,21 @@ _Py_slist_remove(_Py_slist_t *list, _Py_slist_item_t *previous, Py_uhash_t -_Py_hashtable_hash_ptr(size_t key_size, const void *pkey) +_Py_hashtable_hash_ptr(struct _Py_hashtable_t *ht, const void *pkey) { void *key; - _Py_HASHTABLE_READ_KEY(key_size, pkey, key); - return (Py_uhash_t)_Py_HashPointer((void *)key); + _Py_HASHTABLE_READ_KEY(ht, pkey, key); + return (Py_uhash_t)_Py_HashPointer(key); } int -_Py_hashtable_compare_direct(size_t key_size, const void *pkey, +_Py_hashtable_compare_direct(_Py_hashtable_t *ht, const void *pkey, const _Py_hashtable_entry_t *entry) { - const void *pkey2 = _Py_HASHTABLE_ENTRY_KEY(entry); - return (memcmp(pkey, pkey2, key_size) == 0); + const void *pkey2 = _Py_HASHTABLE_ENTRY_PKEY(entry); + return (memcmp(pkey, pkey2, ht->key_size) == 0); } @@ -245,12 +259,11 @@ _Py_hashtable_get_entry(_Py_hashtable_t *ht, assert(key_size == ht->key_size); - key_hash = ht->hash_func(key_size, pkey); + key_hash = ht->hash_func(ht, pkey); index = key_hash & (ht->num_buckets - 1); for (entry = TABLE_HEAD(ht, index); entry != NULL; entry = ENTRY_NEXT(entry)) { - if (entry->key_hash == key_hash - && ht->compare_func(key_size, pkey, entry)) + if (entry->key_hash == key_hash && ht->compare_func(ht, pkey, entry)) break; } @@ -268,13 +281,12 @@ _Py_hashtable_pop_entry(_Py_hashtable_t *ht, size_t key_size, const void *pkey, assert(key_size == ht->key_size); - key_hash = ht->hash_func(key_size, pkey); + key_hash = ht->hash_func(ht, pkey); index = key_hash & (ht->num_buckets - 1); previous = NULL; for (entry = TABLE_HEAD(ht, index); entry != NULL; entry = ENTRY_NEXT(entry)) { - if (entry->key_hash == key_hash - && ht->compare_func(key_size, pkey, entry)) + if (entry->key_hash == key_hash && ht->compare_func(ht, pkey, entry)) break; previous = entry; } @@ -287,7 +299,7 @@ _Py_hashtable_pop_entry(_Py_hashtable_t *ht, size_t key_size, const void *pkey, ht->entries--; if (data != NULL) - _Py_HASHTABLE_ENTRY_READ_PDATA(ht, entry, data_size, data); + ENTRY_READ_PDATA(ht, entry, data_size, data); ht->alloc.free(entry); if ((float)ht->entries / (float)ht->num_buckets < HASHTABLE_LOW) @@ -315,7 +327,7 @@ _Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, assert(entry == NULL); #endif - key_hash = ht->hash_func(key_size, pkey); + key_hash = ht->hash_func(ht, pkey); index = key_hash & (ht->num_buckets - 1); entry = ht->alloc.malloc(HASHTABLE_ITEM_SIZE(ht)); @@ -325,8 +337,8 @@ _Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, } entry->key_hash = key_hash; - _Py_HASHTABLE_ENTRY_WRITE_PKEY(key_size, entry, pkey); - _Py_HASHTABLE_ENTRY_WRITE_PDATA(ht, entry, data_size, data); + Py_MEMCPY((void *)_Py_HASHTABLE_ENTRY_PKEY(entry), pkey, ht->key_size); + ENTRY_WRITE_PDATA(ht, entry, data_size, data); _Py_slist_prepend(&ht->buckets[index], (_Py_slist_item_t*)entry); ht->entries++; @@ -348,7 +360,7 @@ _Py_hashtable_get(_Py_hashtable_t *ht, size_t key_size,const void *pkey, entry = _Py_hashtable_get_entry(ht, key_size, pkey); if (entry == NULL) return 0; - _Py_HASHTABLE_ENTRY_READ_PDATA(ht, entry, data_size, data); + ENTRY_READ_PDATA(ht, entry, data_size, data); return 1; } @@ -399,7 +411,6 @@ _Py_hashtable_foreach(_Py_hashtable_t *ht, static void hashtable_rehash(_Py_hashtable_t *ht) { - const size_t key_size = ht->key_size; size_t buckets_size, new_size, bucket; _Py_slist_t *old_buckets = NULL; size_t old_num_buckets; @@ -429,7 +440,7 @@ hashtable_rehash(_Py_hashtable_t *ht) size_t entry_index; - assert(ht->hash_func(key_size, _Py_HASHTABLE_ENTRY_KEY(entry)) == entry->key_hash); + assert(ht->hash_func(ht, _Py_HASHTABLE_ENTRY_PKEY(entry)) == entry->key_hash); next = ENTRY_NEXT(entry); entry_index = entry->key_hash & (new_size - 1); @@ -499,9 +510,9 @@ _Py_hashtable_copy(_Py_hashtable_t *src) for (bucket=0; bucket < src->num_buckets; bucket++) { entry = TABLE_HEAD(src, bucket); for (; entry; entry = ENTRY_NEXT(entry)) { - const void *pkey = _Py_HASHTABLE_ENTRY_KEY(entry); - const void *data = _Py_HASHTABLE_ENTRY_DATA(src, entry); - err = _Py_hashtable_set(dst, key_size, pkey, data_size, data); + const void *pkey = _Py_HASHTABLE_ENTRY_PKEY(entry); + const void *pdata = _Py_HASHTABLE_ENTRY_PDATA(src, entry); + err = _Py_hashtable_set(dst, key_size, pkey, data_size, pdata); if (err) { _Py_hashtable_destroy(dst); return NULL; diff --git a/Modules/hashtable.h b/Modules/hashtable.h index e3e8148fcc..18fed096c1 100644 --- a/Modules/hashtable.h +++ b/Modules/hashtable.h @@ -29,60 +29,52 @@ typedef struct { /* key (key_size bytes) and then data (data_size bytes) follows */ } _Py_hashtable_entry_t; -#define _Py_HASHTABLE_ENTRY_KEY(ENTRY) \ +#define _Py_HASHTABLE_ENTRY_PKEY(ENTRY) \ ((const void *)((char *)(ENTRY) \ + sizeof(_Py_hashtable_entry_t))) -#define _Py_HASHTABLE_ENTRY_DATA(TABLE, ENTRY) \ +#define _Py_HASHTABLE_ENTRY_PDATA(TABLE, ENTRY) \ ((const void *)((char *)(ENTRY) \ + sizeof(_Py_hashtable_entry_t) \ + (TABLE)->key_size)) /* Get a key value from pkey: use memcpy() rather than a pointer dereference to avoid memory alignment issues. */ -#define _Py_HASHTABLE_READ_KEY(KEY_SIZE, PKEY, DST_KEY) \ +#define _Py_HASHTABLE_READ_KEY(TABLE, PKEY, DST_KEY) \ do { \ - assert(sizeof(DST_KEY) == (KEY_SIZE)); \ - memcpy(&(DST_KEY), (PKEY), sizeof(DST_KEY)); \ + assert(sizeof(DST_KEY) == (TABLE)->key_size); \ + Py_MEMCPY(&(DST_KEY), (PKEY), sizeof(DST_KEY)); \ } while (0) -#define _Py_HASHTABLE_ENTRY_READ_KEY(KEY_SIZE, ENTRY, KEY) \ +#define _Py_HASHTABLE_ENTRY_READ_KEY(TABLE, ENTRY, KEY) \ do { \ - assert(sizeof(KEY) == (KEY_SIZE)); \ - memcpy(&(KEY), _Py_HASHTABLE_ENTRY_KEY(ENTRY), sizeof(KEY)); \ - } while (0) - -#define _Py_HASHTABLE_ENTRY_WRITE_PKEY(KEY_SIZE, ENTRY, PKEY) \ - do { \ - memcpy((void *)_Py_HASHTABLE_ENTRY_KEY(ENTRY), (PKEY), (KEY_SIZE)); \ - } while (0) - -#define _Py_HASHTABLE_ENTRY_READ_PDATA(TABLE, ENTRY, DATA_SIZE, PDATA) \ - do { \ - assert((DATA_SIZE) == (TABLE)->data_size); \ - memcpy((PDATA), _Py_HASHTABLE_ENTRY_DATA(TABLE, (ENTRY)), \ - (DATA_SIZE)); \ + assert(sizeof(KEY) == (TABLE)->key_size); \ + Py_MEMCPY(&(KEY), _Py_HASHTABLE_ENTRY_PKEY(ENTRY), sizeof(KEY)); \ } while (0) #define _Py_HASHTABLE_ENTRY_READ_DATA(TABLE, ENTRY, DATA) \ - _Py_HASHTABLE_ENTRY_READ_PDATA((TABLE), (ENTRY), sizeof(DATA), &(DATA)) - -#define _Py_HASHTABLE_ENTRY_WRITE_PDATA(TABLE, ENTRY, DATA_SIZE, PDATA) \ do { \ - assert((DATA_SIZE) == (TABLE)->data_size); \ - memcpy((void *)_Py_HASHTABLE_ENTRY_DATA((TABLE), (ENTRY)), \ - (PDATA), (DATA_SIZE)); \ + assert(sizeof(DATA) == (TABLE)->data_size); \ + Py_MEMCPY(&(DATA), _Py_HASHTABLE_ENTRY_PDATA(TABLE, (ENTRY)), \ + sizeof(DATA)); \ } while (0) #define _Py_HASHTABLE_ENTRY_WRITE_DATA(TABLE, ENTRY, DATA) \ - _Py_HASHTABLE_ENTRY_WRITE_PDATA(TABLE, ENTRY, sizeof(DATA), &(DATA)) + do { \ + assert(sizeof(DATA) == (TABLE)->data_size); \ + Py_MEMCPY((void *)_Py_HASHTABLE_ENTRY_PDATA((TABLE), (ENTRY)), \ + &(DATA), sizeof(DATA)); \ + } while (0) /* _Py_hashtable: prototypes */ -typedef Py_uhash_t (*_Py_hashtable_hash_func) (size_t key_size, +/* Forward declaration */ +struct _Py_hashtable_t; + +typedef Py_uhash_t (*_Py_hashtable_hash_func) (struct _Py_hashtable_t *ht, const void *pkey); -typedef int (*_Py_hashtable_compare_func) (size_t key_size, +typedef int (*_Py_hashtable_compare_func) (struct _Py_hashtable_t *ht, const void *pkey, const _Py_hashtable_entry_t *he); @@ -97,7 +89,7 @@ typedef struct { /* _Py_hashtable: table */ -typedef struct { +typedef struct _Py_hashtable_t { size_t num_buckets; size_t entries; /* Total number of entries in the table. */ _Py_slist_t *buckets; @@ -111,12 +103,12 @@ typedef struct { /* hash a pointer (void*) */ PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr( - size_t key_size, + struct _Py_hashtable_t *ht, const void *pkey); /* comparison using memcmp() */ PyAPI_FUNC(int) _Py_hashtable_compare_direct( - size_t key_size, + _Py_hashtable_t *ht, const void *pkey, const _Py_hashtable_entry_t *entry); -- cgit v1.2.1 From 07acdea31d8d72dcb427beafa5d0565fdb1c4448 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 10:39:17 +0100 Subject: faulthandler: add Windows exception handler Issue #23848: On Windows, faulthandler.enable() now also installs an exception handler to dump the traceback of all Python threads on any Windows exception, not only on UNIX signals (SIGSEGV, SIGFPE, SIGABRT). --- Modules/faulthandler.c | 253 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 189 insertions(+), 64 deletions(-) (limited to 'Modules') diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 1c247b72a8..22144661bc 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -119,7 +119,7 @@ static fault_handler_t faulthandler_handlers[] = { handler fails in faulthandler_fatal_error() */ {SIGSEGV, 0, "Segmentation fault", } }; -static const unsigned char faulthandler_nsignals = \ +static const size_t faulthandler_nsignals = \ Py_ARRAY_LENGTH(faulthandler_handlers); #ifdef HAVE_SIGALTSTACK @@ -290,6 +290,19 @@ faulthandler_dump_traceback_py(PyObject *self, Py_RETURN_NONE; } +static void +faulthandler_disable_fatal_handler(fault_handler_t *handler) +{ + if (!handler->enabled) + return; + handler->enabled = 0; +#ifdef HAVE_SIGACTION + (void)sigaction(handler->signum, &handler->previous, NULL); +#else + (void)signal(handler->signum, handler->previous); +#endif +} + /* Handler for SIGSEGV, SIGFPE, SIGABRT, SIGBUS and SIGILL signals. @@ -308,7 +321,7 @@ static void faulthandler_fatal_error(int signum) { const int fd = fatal_error.fd; - unsigned int i; + size_t i; fault_handler_t *handler = NULL; int save_errno = errno; @@ -326,12 +339,7 @@ faulthandler_fatal_error(int signum) } /* restore the previous handler */ -#ifdef HAVE_SIGACTION - (void)sigaction(signum, &handler->previous, NULL); -#else - (void)signal(signum, handler->previous); -#endif - handler->enabled = 0; + faulthandler_disable_fatal_handler(handler); PUTS(fd, "Fatal Python error: "); PUTS(fd, handler->name); @@ -353,20 +361,110 @@ faulthandler_fatal_error(int signum) raise(signum); } +#ifdef MS_WINDOWS +static LONG WINAPI +faulthandler_exc_handler(struct _EXCEPTION_POINTERS *exc_info) +{ + const int fd = fatal_error.fd; + DWORD code = exc_info->ExceptionRecord->ExceptionCode; + + PUTS(fd, "Windows exception: "); + switch (code) + { + /* only format most common errors */ + case EXCEPTION_ACCESS_VIOLATION: PUTS(fd, "access violation"); break; + case EXCEPTION_FLT_DIVIDE_BY_ZERO: PUTS(fd, "float divide by zero"); break; + case EXCEPTION_FLT_OVERFLOW: PUTS(fd, "float overflow"); break; + case EXCEPTION_INT_DIVIDE_BY_ZERO: PUTS(fd, "int divide by zero"); break; + case EXCEPTION_INT_OVERFLOW: PUTS(fd, "integer overflow"); break; + case EXCEPTION_IN_PAGE_ERROR: PUTS(fd, "page error"); break; + case EXCEPTION_STACK_OVERFLOW: PUTS(fd, "stack overflow"); break; + default: + PUTS(fd, "code 0x"); + _Py_DumpHexadecimal(fd, code, sizeof(DWORD)); + } + PUTS(fd, "\n\n"); + + if (code == EXCEPTION_ACCESS_VIOLATION) { + /* disable signal handler for SIGSEGV */ + size_t i; + for (i=0; i < faulthandler_nsignals; i++) { + fault_handler_t *handler = &faulthandler_handlers[i]; + if (handler->signum == SIGSEGV) { + faulthandler_disable_fatal_handler(handler); + break; + } + } + } + + faulthandler_dump_traceback(fd, fatal_error.all_threads, + fatal_error.interp); + + /* call the next exception handler */ + return EXCEPTION_CONTINUE_SEARCH; +} +#endif + /* Install the handler for fatal signals, faulthandler_fatal_error(). */ -static PyObject* -faulthandler_enable(PyObject *self, PyObject *args, PyObject *kwargs) +int +faulthandler_enable(void) { - static char *kwlist[] = {"file", "all_threads", NULL}; - PyObject *file = NULL; - int all_threads = 1; - unsigned int i; + size_t i; fault_handler_t *handler; #ifdef HAVE_SIGACTION struct sigaction action; #endif int err; + + if (fatal_error.enabled) { + return 0; + } + + fatal_error.enabled = 1; + + for (i=0; i < faulthandler_nsignals; i++) { + handler = &faulthandler_handlers[i]; + +#ifdef HAVE_SIGACTION + action.sa_handler = faulthandler_fatal_error; + sigemptyset(&action.sa_mask); + /* Do not prevent the signal from being received from within + its own signal handler */ + action.sa_flags = SA_NODEFER; +#ifdef HAVE_SIGALTSTACK + if (stack.ss_sp != NULL) { + /* Call the signal handler on an alternate signal stack + provided by sigaltstack() */ + action.sa_flags |= SA_ONSTACK; + } +#endif + err = sigaction(handler->signum, &action, &handler->previous); +#else + handler->previous = signal(handler->signum, + faulthandler_fatal_error); + err = (handler->previous == SIG_ERR); +#endif + if (err) { + PyErr_SetFromErrno(PyExc_RuntimeError); + return -1; + } + + handler->enabled = 1; + } + +#ifdef MS_WINDOWS + AddVectoredExceptionHandler(1, faulthandler_exc_handler); +#endif + return 0; +} + +static PyObject* +faulthandler_py_enable(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = {"file", "all_threads", NULL}; + PyObject *file = NULL; + int all_threads = 1; int fd; PyThreadState *tstate; @@ -388,37 +486,10 @@ faulthandler_enable(PyObject *self, PyObject *args, PyObject *kwargs) fatal_error.all_threads = all_threads; fatal_error.interp = tstate->interp; - if (!fatal_error.enabled) { - fatal_error.enabled = 1; - - for (i=0; i < faulthandler_nsignals; i++) { - handler = &faulthandler_handlers[i]; -#ifdef HAVE_SIGACTION - action.sa_handler = faulthandler_fatal_error; - sigemptyset(&action.sa_mask); - /* Do not prevent the signal from being received from within - its own signal handler */ - action.sa_flags = SA_NODEFER; -#ifdef HAVE_SIGALTSTACK - if (stack.ss_sp != NULL) { - /* Call the signal handler on an alternate signal stack - provided by sigaltstack() */ - action.sa_flags |= SA_ONSTACK; - } -#endif - err = sigaction(handler->signum, &action, &handler->previous); -#else - handler->previous = signal(handler->signum, - faulthandler_fatal_error); - err = (handler->previous == SIG_ERR); -#endif - if (err) { - PyErr_SetFromErrno(PyExc_RuntimeError); - return NULL; - } - handler->enabled = 1; - } + if (faulthandler_enable() < 0) { + return NULL; } + Py_RETURN_NONE; } @@ -432,14 +503,7 @@ faulthandler_disable(void) fatal_error.enabled = 0; for (i=0; i < faulthandler_nsignals; i++) { handler = &faulthandler_handlers[i]; - if (!handler->enabled) - continue; -#ifdef HAVE_SIGACTION - (void)sigaction(handler->signum, &handler->previous, NULL); -#else - (void)signal(handler->signum, handler->previous); -#endif - handler->enabled = 0; + faulthandler_disable_fatal_handler(handler); } } @@ -991,7 +1055,10 @@ faulthandler_fatal_error_py(PyObject *self, PyObject *args) Py_RETURN_NONE; } + #if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION) +#define FAULTHANDLER_STACK_OVERFLOW + #ifdef __INTEL_COMPILER /* Issue #23654: Turn off ICC's tail call optimization for the * stack_overflow generator. ICC turns the recursive tail call into @@ -1005,12 +1072,21 @@ stack_overflow(Py_uintptr_t min_sp, Py_uintptr_t max_sp, size_t *depth) /* allocate 4096 bytes on the stack at each call */ unsigned char buffer[4096]; Py_uintptr_t sp = (Py_uintptr_t)&buffer; + Py_uintptr_t stop; + *depth += 1; - if (sp < min_sp || max_sp < sp) + if (sp < min_sp || max_sp < sp) { + printf("call #%lu\n", (unsigned long)*depth); return sp; - buffer[0] = 1; - buffer[4095] = 0; - return stack_overflow(min_sp, max_sp, depth); + } + + memset(buffer, (unsigned char)*depth, sizeof(buffer)); + stop = stack_overflow(min_sp, max_sp, depth) + buffer[0]; + + memset(buffer, (unsigned char)stop, sizeof(buffer)); + stop = stack_overflow(min_sp, max_sp, depth) + buffer[0]; + + return stop; } static PyObject * @@ -1018,13 +1094,19 @@ faulthandler_stack_overflow(PyObject *self) { size_t depth, size; Py_uintptr_t sp = (Py_uintptr_t)&depth; - Py_uintptr_t stop; + Py_uintptr_t min_sp, max_sp, stop; faulthandler_suppress_crash_report(); + depth = 0; - stop = stack_overflow(sp - STACK_OVERFLOW_MAX_SIZE, - sp + STACK_OVERFLOW_MAX_SIZE, - &depth); + if (sp > STACK_OVERFLOW_MAX_SIZE) + min_sp = sp - STACK_OVERFLOW_MAX_SIZE; + else + min_sp = 0; + max_sp = sp + STACK_OVERFLOW_MAX_SIZE; + + stop = stack_overflow(min_sp, max_sp, &depth); + if (sp < stop) size = stop - sp; else @@ -1035,7 +1117,7 @@ faulthandler_stack_overflow(PyObject *self) size, depth); return NULL; } -#endif +#endif /* (defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION)) ... */ static int @@ -1058,12 +1140,25 @@ faulthandler_traverse(PyObject *module, visitproc visit, void *arg) return 0; } +#ifdef MS_WINDOWS +static PyObject * +faulthandler_raise_exception(PyObject *self, PyObject *args) +{ + unsigned int code, flags = 0; + if (!PyArg_ParseTuple(args, "I|I:_raise_exception", &code, &flags)) + return NULL; + faulthandler_suppress_crash_report(); + RaiseException(code, flags, 0, NULL); + Py_RETURN_NONE; +} +#endif + PyDoc_STRVAR(module_doc, "faulthandler module."); static PyMethodDef module_methods[] = { {"enable", - (PyCFunction)faulthandler_enable, METH_VARARGS|METH_KEYWORDS, + (PyCFunction)faulthandler_py_enable, METH_VARARGS|METH_KEYWORDS, PyDoc_STR("enable(file=sys.stderr, all_threads=True): " "enable the fault handler")}, {"disable", (PyCFunction)faulthandler_disable_py, METH_NOARGS, @@ -1117,9 +1212,13 @@ static PyMethodDef module_methods[] = { PyDoc_STR("_sigfpe(): raise a SIGFPE signal")}, {"_fatal_error", faulthandler_fatal_error_py, METH_VARARGS, PyDoc_STR("_fatal_error(message): call Py_FatalError(message)")}, -#if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION) +#ifdef FAULTHANDLER_STACK_OVERFLOW {"_stack_overflow", (PyCFunction)faulthandler_stack_overflow, METH_NOARGS, PyDoc_STR("_stack_overflow(): recursive call to raise a stack overflow")}, +#endif +#ifdef MS_WINDOWS + {"_raise_exception", faulthandler_raise_exception, METH_VARARGS, + PyDoc_STR("raise_exception(code, flags=0): Call RaiseException(code, flags).")}, #endif {NULL, NULL} /* sentinel */ }; @@ -1139,7 +1238,33 @@ static struct PyModuleDef module_def = { PyMODINIT_FUNC PyInit_faulthandler(void) { - return PyModule_Create(&module_def); + PyObject *m = PyModule_Create(&module_def); + if (m == NULL) + return NULL; + + /* Add constants for unit tests */ +#ifdef MS_WINDOWS + /* RaiseException() codes (prefixed by an underscore) */ + if (PyModule_AddIntConstant(m, "_EXCEPTION_ACCESS_VIOLATION", + EXCEPTION_ACCESS_VIOLATION)) + return NULL; + if (PyModule_AddIntConstant(m, "_EXCEPTION_INT_DIVIDE_BY_ZERO", + EXCEPTION_INT_DIVIDE_BY_ZERO)) + return NULL; + if (PyModule_AddIntConstant(m, "_EXCEPTION_STACK_OVERFLOW", + EXCEPTION_STACK_OVERFLOW)) + return NULL; + + /* RaiseException() flags (prefixed by an underscore) */ + if (PyModule_AddIntConstant(m, "_EXCEPTION_NONCONTINUABLE", + EXCEPTION_NONCONTINUABLE)) + return NULL; + if (PyModule_AddIntConstant(m, "_EXCEPTION_NONCONTINUABLE_EXCEPTION", + EXCEPTION_NONCONTINUABLE_EXCEPTION)) + return NULL; +#endif + + return m; } /* Call faulthandler.enable() if the PYTHONFAULTHANDLER environment variable -- cgit v1.2.1 From a37389c1fa02e2a9c0bb545753c52fe9c4083c41 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 14:44:14 +0100 Subject: faulthandler: only log fatal exceptions Issue #23848, #26622: * faulthandler now only logs fatal Windows exceptions. * write error code as decimal, not as hexadecimal * replace "Windows exception" with "Windows fatal exception" --- Modules/faulthandler.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 22144661bc..e86f2bbc84 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -367,8 +367,15 @@ faulthandler_exc_handler(struct _EXCEPTION_POINTERS *exc_info) { const int fd = fatal_error.fd; DWORD code = exc_info->ExceptionRecord->ExceptionCode; + DWORD flags = exc_info->ExceptionRecord->ExceptionFlags; - PUTS(fd, "Windows exception: "); + /* only log fatal exceptions */ + if (flags & EXCEPTION_NONCONTINUABLE) { + /* call the next exception handler */ + return EXCEPTION_CONTINUE_SEARCH; + } + + PUTS(fd, "Windows fatal exception: "); switch (code) { /* only format most common errors */ @@ -380,8 +387,8 @@ faulthandler_exc_handler(struct _EXCEPTION_POINTERS *exc_info) case EXCEPTION_IN_PAGE_ERROR: PUTS(fd, "page error"); break; case EXCEPTION_STACK_OVERFLOW: PUTS(fd, "stack overflow"); break; default: - PUTS(fd, "code 0x"); - _Py_DumpHexadecimal(fd, code, sizeof(DWORD)); + PUTS(fd, "code "); + _Py_DumpDecimal(fd, code, sizeof(DWORD)); } PUTS(fd, "\n\n"); -- cgit v1.2.1 From 193ee835692b9b25cfca607f348a2e75eb21e2e1 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 15:19:12 +0100 Subject: Issue #23848: Try to fix test_faulthandler on ARM Restore the previous code for stack_overflow(). --- Modules/faulthandler.c | 48 ++++++++++++++++-------------------------------- 1 file changed, 16 insertions(+), 32 deletions(-) (limited to 'Modules') diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index e86f2bbc84..03afe0e6a3 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -418,21 +418,21 @@ int faulthandler_enable(void) { size_t i; - fault_handler_t *handler; -#ifdef HAVE_SIGACTION - struct sigaction action; -#endif - int err; if (fatal_error.enabled) { return 0; } - fatal_error.enabled = 1; for (i=0; i < faulthandler_nsignals; i++) { - handler = &faulthandler_handlers[i]; + fault_handler_t *handler; +#ifdef HAVE_SIGACTION + struct sigaction action; +#endif + int err; + handler = &faulthandler_handlers[i]; + assert(!handler->enabled); #ifdef HAVE_SIGACTION action.sa_handler = faulthandler_fatal_error; sigemptyset(&action.sa_mask); @@ -1062,7 +1062,6 @@ faulthandler_fatal_error_py(PyObject *self, PyObject *args) Py_RETURN_NONE; } - #if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION) #define FAULTHANDLER_STACK_OVERFLOW @@ -1079,21 +1078,12 @@ stack_overflow(Py_uintptr_t min_sp, Py_uintptr_t max_sp, size_t *depth) /* allocate 4096 bytes on the stack at each call */ unsigned char buffer[4096]; Py_uintptr_t sp = (Py_uintptr_t)&buffer; - Py_uintptr_t stop; - *depth += 1; - if (sp < min_sp || max_sp < sp) { - printf("call #%lu\n", (unsigned long)*depth); + if (sp < min_sp || max_sp < sp) return sp; - } - - memset(buffer, (unsigned char)*depth, sizeof(buffer)); - stop = stack_overflow(min_sp, max_sp, depth) + buffer[0]; - - memset(buffer, (unsigned char)stop, sizeof(buffer)); - stop = stack_overflow(min_sp, max_sp, depth) + buffer[0]; - - return stop; + buffer[0] = 1; + buffer[4095] = 0; + return stack_overflow(min_sp, max_sp, depth); } static PyObject * @@ -1101,19 +1091,13 @@ faulthandler_stack_overflow(PyObject *self) { size_t depth, size; Py_uintptr_t sp = (Py_uintptr_t)&depth; - Py_uintptr_t min_sp, max_sp, stop; + Py_uintptr_t stop; faulthandler_suppress_crash_report(); - depth = 0; - if (sp > STACK_OVERFLOW_MAX_SIZE) - min_sp = sp - STACK_OVERFLOW_MAX_SIZE; - else - min_sp = 0; - max_sp = sp + STACK_OVERFLOW_MAX_SIZE; - - stop = stack_overflow(min_sp, max_sp, &depth); - + stop = stack_overflow(sp - STACK_OVERFLOW_MAX_SIZE, + sp + STACK_OVERFLOW_MAX_SIZE, + &depth); if (sp < stop) size = stop - sp; else @@ -1124,7 +1108,7 @@ faulthandler_stack_overflow(PyObject *self) size, depth); return NULL; } -#endif /* (defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION)) ... */ +#endif /* defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION) */ static int -- cgit v1.2.1 From 1f05a9d54d296833bf48a9b7c71def914c2b19b9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 18:37:54 +0100 Subject: Issue #23848: Fix usage of _Py_DumpDecimal() --- Modules/faulthandler.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 03afe0e6a3..a990d252d1 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -388,7 +388,7 @@ faulthandler_exc_handler(struct _EXCEPTION_POINTERS *exc_info) case EXCEPTION_STACK_OVERFLOW: PUTS(fd, "stack overflow"); break; default: PUTS(fd, "code "); - _Py_DumpDecimal(fd, code, sizeof(DWORD)); + _Py_DumpDecimal(fd, code); } PUTS(fd, "\n\n"); -- cgit v1.2.1 From ff386be3722c00318ba58eb41f4b3f909ea9c0a0 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Wed, 23 Mar 2016 20:50:10 +0100 Subject: Issue #26621: Update libmpdec version and remove unnecessary test case. --- Modules/_decimal/libmpdec/mpdecimal.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index 5ca74135bf..56e4887cc8 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -108,9 +108,9 @@ MPD_PRAGMA(MPD_HIDE_SYMBOLS_START) #define MPD_MAJOR_VERSION 2 #define MPD_MINOR_VERSION 4 -#define MPD_MICRO_VERSION 1 +#define MPD_MICRO_VERSION 2 -#define MPD_VERSION "2.4.1" +#define MPD_VERSION "2.4.2" #define MPD_VERSION_HEX ((MPD_MAJOR_VERSION << 24) | \ (MPD_MINOR_VERSION << 16) | \ -- cgit v1.2.1 From 925d6b7c1e5276314961e5a2c0ce170552c88423 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 21:35:29 +0100 Subject: socketmodule.c: error if option larger than INT_MAX On Windows, socket.setsockopt() raises an OverflowError if the socket option is larger than INT_MAX bytes. --- Modules/socketmodule.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index ba3cefd177..8df735d204 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2458,13 +2458,26 @@ sock_setsockopt(PySocketSockObject *s, PyObject *args) if (!PyArg_ParseTuple(args, "iiy*:setsockopt", &level, &optname, &optval)) return NULL; +#ifdef MS_WINDOWS + if (optval.len > INT_MAX) { + PyBuffer_Release(&optval); + PyErr_Format(PyExc_OverflowError, + "socket option is larger than %i bytes", + INT_MAX); + return NULL; + } + res = setsockopt(s->sock_fd, level, optname, + optval.buf, (int)optval.len); +#else res = setsockopt(s->sock_fd, level, optname, optval.buf, optval.len); +#endif PyBuffer_Release(&optval); } - if (res < 0) + if (res < 0) { return s->errorhandler(); - Py_INCREF(Py_None); - return Py_None; + } + + Py_RETURN_NONE; } PyDoc_STRVAR(setsockopt_doc, -- cgit v1.2.1 From 92f44f40ad452222219ce66d6a5fef8c5938e8e5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Mar 2016 22:03:55 +0100 Subject: _tracemalloc: use compact key for traces Issue #26588: Optimize memory footprint of _tracemalloc before non-zero domain is used. Start with compact key (Py_uintptr_t) and also switch to pointer_t key when the first memory block with a non-zero domain is tracked. --- Modules/_tracemalloc.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 169fd2c57d..ca0ed3b071 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -43,7 +43,7 @@ static struct { /* use domain in trace key? Variable protected by the GIL. */ int use_domain; -} tracemalloc_config = {TRACEMALLOC_NOT_INITIALIZED, 0, 1, 1}; +} tracemalloc_config = {TRACEMALLOC_NOT_INITIALIZED, 0, 1, 0}; #if defined(TRACE_RAW_MALLOC) && defined(WITH_THREAD) /* This lock is needed because tracemalloc_free() is called without @@ -519,6 +519,58 @@ traceback_new(void) } +static int +tracemalloc_use_domain_cb(_Py_hashtable_t *old_traces, + _Py_hashtable_entry_t *entry, void *user_data) +{ + Py_uintptr_t ptr; + pointer_t key; + _Py_hashtable_t *new_traces = (_Py_hashtable_t *)user_data; + const void *pdata = _Py_HASHTABLE_ENTRY_PDATA(old_traces, entry); + + _Py_HASHTABLE_ENTRY_READ_KEY(old_traces, entry, ptr); + key.ptr = ptr; + key.domain = DEFAULT_DOMAIN; + + return _Py_hashtable_set(new_traces, + sizeof(key), &key, + old_traces->data_size, pdata); +} + + +/* Convert tracemalloc_traces from compact key (Py_uintptr_t) to pointer_t key. + * Return 0 on success, -1 on error. */ +static int +tracemalloc_use_domain(void) +{ + _Py_hashtable_t *new_traces = NULL; + + assert(!tracemalloc_config.use_domain); + + new_traces = hashtable_new(sizeof(pointer_t), + sizeof(trace_t), + hashtable_hash_pointer_t, + hashtable_compare_pointer_t); + if (new_traces == NULL) { + return -1; + } + + if (_Py_hashtable_foreach(tracemalloc_traces, tracemalloc_use_domain_cb, + new_traces) < 0) + { + _Py_hashtable_destroy(new_traces); + return -1; + } + + _Py_hashtable_destroy(tracemalloc_traces); + tracemalloc_traces = new_traces; + + tracemalloc_config.use_domain = 1; + + return 0; +} + + static void tracemalloc_remove_trace(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) { @@ -563,6 +615,14 @@ tracemalloc_add_trace(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr, return -1; } + if (!tracemalloc_config.use_domain && domain != DEFAULT_DOMAIN) { + /* first trace using a non-zero domain whereas traces use compact + (Py_uintptr_t) keys: switch to pointer_t keys. */ + if (tracemalloc_use_domain() < 0) { + return -1; + } + } + if (tracemalloc_config.use_domain) { entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_traces, key); } -- cgit v1.2.1 From 4a570a7b8a14db38813500e24ed316e22221ed81 Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Fri, 25 Mar 2016 15:42:59 -0400 Subject: Issue#26616:Fixed a bug in datetime.astimezone() method. --- Modules/_datetimemodule.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index e3de537a8d..0e50023eea 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4749,7 +4749,12 @@ local_timezone(PyDateTime_DateTime *utc_time) PyObject *nameo = NULL; const char *zone = NULL; - delta = datetime_subtract((PyObject *)utc_time, PyDateTime_Epoch); + delta = new_delta(ymd_to_ord(GET_YEAR(utc_time), GET_MONTH(utc_time), + GET_DAY(utc_time)) - 719163, + 60 * (60 * DATE_GET_HOUR(utc_time) + + DATE_GET_MINUTE(utc_time)) + + DATE_GET_SECOND(utc_time), + 0, 0); if (delta == NULL) return NULL; one_second = new_delta(0, 1, 0, 0); -- cgit v1.2.1 From 6c997f0d5ea893cf22119fc2f81f6228f4bd80d7 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Sun, 27 Mar 2016 05:35:19 +0000 Subject: Issue #26644: Raise ValueError for negative SSLSocket.recv() and read() --- Modules/_ssl.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 3377138f61..51b5399ab1 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1895,6 +1895,11 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, _PyTime_t timeout, deadline = 0; int has_timeout; + if (!group_right_1 && len < 0) { + PyErr_SetString(PyExc_ValueError, "size should not be negative"); + return NULL; + } + if (sock != NULL) { if (((PyObject*)sock) == Py_None) { _setSSLError("Underlying socket connection gone", -- cgit v1.2.1 From 3d50f38849cb50ac6366dd38c93d21631e4fc844 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 30 Mar 2016 21:11:16 +0300 Subject: Issue #26492: Exhausted iterator of array.array now conforms with the behavior of iterators of other mutable sequences: it lefts exhausted even if iterated array is extended. --- Modules/arraymodule.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 1b0a2823a1..323e0c1fff 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2875,9 +2875,20 @@ array_iter(arrayobject *ao) static PyObject * arrayiter_next(arrayiterobject *it) { + arrayobject *ao; + + assert(it != NULL); assert(PyArrayIter_Check(it)); - if (it->index < Py_SIZE(it->ao)) - return (*it->getitem)(it->ao, it->index++); + ao = it->ao; + if (ao == NULL) { + return NULL; + } + assert(array_Check(ao)); + if (it->index < Py_SIZE(ao)) { + return (*it->getitem)(ao, it->index++); + } + it->ao = NULL; + Py_DECREF(ao); return NULL; } @@ -2906,8 +2917,11 @@ static PyObject * array_arrayiterator___reduce___impl(arrayiterobject *self) /*[clinic end generated code: output=7898a52e8e66e016 input=a062ea1e9951417a]*/ { - return Py_BuildValue("N(O)n", _PyObject_GetBuiltin("iter"), - self->ao, self->index); + PyObject *func = _PyObject_GetBuiltin("iter"); + if (self->ao == NULL) { + return Py_BuildValue("N(())", func); + } + return Py_BuildValue("N(O)n", func, self->ao, self->index); } /*[clinic input] -- cgit v1.2.1 From aa7016a515fbd8ce16d346d36a58e01080c9fd97 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 6 Apr 2016 22:17:52 +0300 Subject: Issue #26671: Enhanced path_converter. Exceptions raised during converting argument of correct type are no longer overridded with TypeError. Some error messages are now more detailed. --- Modules/posixmodule.c | 106 ++++++++++++++++++++++++-------------------------- 1 file changed, 50 insertions(+), 56 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 9013888f29..e6704aced3 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -669,21 +669,20 @@ _Py_Dev_Converter(PyObject *obj, void *p) #endif static int -_fd_converter(PyObject *o, int *p, const char *allowed) +_fd_converter(PyObject *o, int *p) { int overflow; long long_value; PyObject *index = PyNumber_Index(o); if (index == NULL) { - PyErr_Format(PyExc_TypeError, - "argument should be %s, not %.200s", - allowed, Py_TYPE(o)->tp_name); return 0; } + assert(PyLong_Check(index)); long_value = PyLong_AsLongAndOverflow(index, &overflow); Py_DECREF(index); + assert(!PyErr_Occurred()); if (overflow > 0 || long_value > INT_MAX) { PyErr_SetString(PyExc_OverflowError, "fd is greater than maximum"); @@ -706,7 +705,15 @@ dir_fd_converter(PyObject *o, void *p) *(int *)p = DEFAULT_DIR_FD; return 1; } - return _fd_converter(o, (int *)p, "integer"); + else if (PyIndex_Check(o)) { + return _fd_converter(o, (int *)p); + } + else { + PyErr_Format(PyExc_TypeError, + "argument should be integer or None, not %.200s", + Py_TYPE(o)->tp_name); + return 0; + } } @@ -816,9 +823,10 @@ path_cleanup(path_t *path) { } static int -path_converter(PyObject *o, void *p) { +path_converter(PyObject *o, void *p) +{ path_t *path = (path_t *)p; - PyObject *unicode, *bytes; + PyObject *bytes; Py_ssize_t length; char *narrow; @@ -837,12 +845,7 @@ path_converter(PyObject *o, void *p) { /* ensure it's always safe to call path_cleanup() */ path->cleanup = NULL; - if (o == Py_None) { - if (!path->nullable) { - FORMAT_EXCEPTION(PyExc_TypeError, - "can't specify None for %s argument"); - return 0; - } + if ((o == Py_None) && path->nullable) { path->wide = NULL; path->narrow = NULL; path->length = 0; @@ -851,24 +854,20 @@ path_converter(PyObject *o, void *p) { return 1; } - unicode = PyUnicode_FromObject(o); - if (unicode) { + if (PyUnicode_Check(o)) { #ifdef MS_WINDOWS wchar_t *wide; - wide = PyUnicode_AsUnicodeAndSize(unicode, &length); + wide = PyUnicode_AsUnicodeAndSize(o, &length); if (!wide) { - Py_DECREF(unicode); return 0; } if (length > 32767) { FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows"); - Py_DECREF(unicode); return 0; } if (wcslen(wide) != length) { - FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character"); - Py_DECREF(unicode); + FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s"); return 0; } @@ -877,51 +876,46 @@ path_converter(PyObject *o, void *p) { path->length = length; path->object = o; path->fd = -1; - path->cleanup = unicode; - return Py_CLEANUP_SUPPORTED; + return 1; #else - int converted = PyUnicode_FSConverter(unicode, &bytes); - Py_DECREF(unicode); - if (!converted) - bytes = NULL; + if (!PyUnicode_FSConverter(o, &bytes)) { + return 0; + } #endif } - else { - PyErr_Clear(); - if (PyObject_CheckBuffer(o)) - bytes = PyBytes_FromObject(o); - else - bytes = NULL; + else if (PyObject_CheckBuffer(o)) { +# ifdef MS_WINDOWS + if (win32_warn_bytes_api()) { + return 0; + } +# endif + bytes = PyBytes_FromObject(o); if (!bytes) { - PyErr_Clear(); - if (path->allow_fd) { - int fd; - int result = _fd_converter(o, &fd, - "string, bytes or integer"); - if (result) { - path->wide = NULL; - path->narrow = NULL; - path->length = 0; - path->object = o; - path->fd = fd; - return result; - } - } + return 0; } } - - if (!bytes) { - if (!PyErr_Occurred()) - FORMAT_EXCEPTION(PyExc_TypeError, "illegal type for %s parameter"); - return 0; + else if (path->allow_fd && PyIndex_Check(o)) { + if (!_fd_converter(o, &path->fd)) { + return 0; + } + path->wide = NULL; + path->narrow = NULL; + path->length = 0; + path->object = o; + return 1; } - -#ifdef MS_WINDOWS - if (win32_warn_bytes_api()) { - Py_DECREF(bytes); + else { + PyErr_Format(PyExc_TypeError, "%s%s%s should be %s, not %.200s", + path->function_name ? path->function_name : "", + path->function_name ? ": " : "", + path->argument_name ? path->argument_name : "path", + path->allow_fd && path->nullable ? "string, bytes, integer or None" : + path->allow_fd ? "string, bytes or integer" : + path->nullable ? "string, bytes or None" : + "string or bytes", + Py_TYPE(o)->tp_name); return 0; } -#endif length = PyBytes_GET_SIZE(bytes); #ifdef MS_WINDOWS -- cgit v1.2.1 From 930c131ac2f8b6f4d13f313c2bd442248c4dec18 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 6 Apr 2016 22:55:31 +0300 Subject: Issue #26671: Fixed #ifdef indentation. --- Modules/posixmodule.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e6704aced3..bc41d935b6 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -884,11 +884,11 @@ path_converter(PyObject *o, void *p) #endif } else if (PyObject_CheckBuffer(o)) { -# ifdef MS_WINDOWS +#ifdef MS_WINDOWS if (win32_warn_bytes_api()) { return 0; } -# endif +#endif bytes = PyBytes_FromObject(o); if (!bytes) { return 0; @@ -905,6 +905,30 @@ path_converter(PyObject *o, void *p) return 1; } else { + PyObject *pathattr; + _Py_IDENTIFIER(path); + + pathattr = _PyObject_GetAttrId(o, &PyId_path); + if (pathattr == NULL) { + PyErr_Clear(); + } + else if (PyUnicode_Check(pathattr) || PyObject_CheckBuffer(pathattr)) { + if (!path_converter(pathattr, path)) { + Py_DECREF(pathattr); + return 0; + } + if (path->cleanup == NULL) { + path->cleanup = pathattr; + } + else { + Py_DECREF(pathattr); + } + return Py_CLEANUP_SUPPORTED; + } + else { + Py_DECREF(pathattr); + } + PyErr_Format(PyExc_TypeError, "%s%s%s should be %s, not %.200s", path->function_name ? path->function_name : "", path->function_name ? ": " : "", -- cgit v1.2.1 From c126ebede1830965d39a798cd053763860ef3b9f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 6 Apr 2016 23:02:25 +0300 Subject: Backed out changeset 8dc144e47252 --- Modules/posixmodule.c | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index bc41d935b6..e6704aced3 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -884,11 +884,11 @@ path_converter(PyObject *o, void *p) #endif } else if (PyObject_CheckBuffer(o)) { -#ifdef MS_WINDOWS +# ifdef MS_WINDOWS if (win32_warn_bytes_api()) { return 0; } -#endif +# endif bytes = PyBytes_FromObject(o); if (!bytes) { return 0; @@ -905,30 +905,6 @@ path_converter(PyObject *o, void *p) return 1; } else { - PyObject *pathattr; - _Py_IDENTIFIER(path); - - pathattr = _PyObject_GetAttrId(o, &PyId_path); - if (pathattr == NULL) { - PyErr_Clear(); - } - else if (PyUnicode_Check(pathattr) || PyObject_CheckBuffer(pathattr)) { - if (!path_converter(pathattr, path)) { - Py_DECREF(pathattr); - return 0; - } - if (path->cleanup == NULL) { - path->cleanup = pathattr; - } - else { - Py_DECREF(pathattr); - } - return Py_CLEANUP_SUPPORTED; - } - else { - Py_DECREF(pathattr); - } - PyErr_Format(PyExc_TypeError, "%s%s%s should be %s, not %.200s", path->function_name ? path->function_name : "", path->function_name ? ": " : "", -- cgit v1.2.1 From 0752a12a7b4b9248d9a6cf7d1370191b4613ee4e Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 6 Apr 2016 23:02:46 +0300 Subject: Issue #26671: Fixed #ifdef indentation. --- Modules/posixmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e6704aced3..a87bbbd6b4 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -884,11 +884,11 @@ path_converter(PyObject *o, void *p) #endif } else if (PyObject_CheckBuffer(o)) { -# ifdef MS_WINDOWS +#ifdef MS_WINDOWS if (win32_warn_bytes_api()) { return 0; } -# endif +#endif bytes = PyBytes_FromObject(o); if (!bytes) { return 0; -- cgit v1.2.1 From 761a6321bef6acb401263b2b1fcf415487839bf8 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sat, 9 Apr 2016 07:34:39 +0300 Subject: Issue #26687: Use Py_RETURN_NONE macro in sqlite3 module --- Modules/_sqlite/cache.c | 3 +-- Modules/_sqlite/connection.c | 24 ++++++++---------------- Modules/_sqlite/cursor.c | 12 ++++-------- Modules/_sqlite/module.c | 9 +++------ 4 files changed, 16 insertions(+), 32 deletions(-) (limited to 'Modules') diff --git a/Modules/_sqlite/cache.c b/Modules/_sqlite/cache.c index 3689a4e387..62c58931fa 100644 --- a/Modules/_sqlite/cache.c +++ b/Modules/_sqlite/cache.c @@ -244,8 +244,7 @@ PyObject* pysqlite_cache_display(pysqlite_Cache* self, PyObject* args) ptr = ptr->next; } - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } static PyMethodDef cache_methods[] = { diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 22298d9976..f63487751b 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -348,8 +348,7 @@ PyObject* pysqlite_connection_close(pysqlite_Connection* self, PyObject* args) } } - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } /* @@ -857,8 +856,7 @@ PyObject* pysqlite_connection_create_function(pysqlite_Connection* self, PyObjec if (PyDict_SetItem(self->function_pinboard, func, Py_None) == -1) return NULL; - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } } @@ -889,8 +887,7 @@ PyObject* pysqlite_connection_create_aggregate(pysqlite_Connection* self, PyObje if (PyDict_SetItem(self->function_pinboard, aggregate_class, Py_None) == -1) return NULL; - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } } @@ -1025,8 +1022,7 @@ static PyObject* pysqlite_connection_set_authorizer(pysqlite_Connection* self, P if (PyDict_SetItem(self->function_pinboard, authorizer_cb, Py_None) == -1) return NULL; - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } } @@ -1055,8 +1051,7 @@ static PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* s return NULL; } - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } static PyObject* pysqlite_connection_set_trace_callback(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) @@ -1083,8 +1078,7 @@ static PyObject* pysqlite_connection_set_trace_callback(pysqlite_Connection* sel sqlite3_trace(self->db, _trace_callback, trace_callback); } - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } #ifdef HAVE_LOAD_EXTENSION @@ -1107,8 +1101,7 @@ static PyObject* pysqlite_enable_load_extension(pysqlite_Connection* self, PyObj PyErr_SetString(pysqlite_OperationalError, "Error enabling load extension"); return NULL; } else { - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } } @@ -1131,8 +1124,7 @@ static PyObject* pysqlite_load_extension(pysqlite_Connection* self, PyObject* ar PyErr_SetString(pysqlite_OperationalError, errmsg); return NULL; } else { - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } } #endif diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 63d705e774..552c8bb0cd 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -242,8 +242,7 @@ PyObject* _pysqlite_build_column_name(const char* colname) const char* pos; if (!colname) { - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } for (pos = colname;; pos++) { @@ -914,8 +913,7 @@ PyObject* pysqlite_cursor_fetchone(pysqlite_Cursor* self, PyObject* args) row = pysqlite_cursor_iternext(self); if (!row && !PyErr_Occurred()) { - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } return row; @@ -996,8 +994,7 @@ PyObject* pysqlite_cursor_fetchall(pysqlite_Cursor* self, PyObject* args) PyObject* pysqlite_noop(pysqlite_Connection* self, PyObject* args) { /* don't care, return None */ - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } PyObject* pysqlite_cursor_close(pysqlite_Cursor* self, PyObject* args) @@ -1013,8 +1010,7 @@ PyObject* pysqlite_cursor_close(pysqlite_Cursor* self, PyObject* args) self->closed = 1; - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } static PyMethodDef cursor_methods[] = { diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index ff2e3a5dff..7cd6d2abeb 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -139,8 +139,7 @@ static PyObject* module_enable_shared_cache(PyObject* self, PyObject* args, PyOb PyErr_SetString(pysqlite_OperationalError, "Changing the shared_cache flag failed"); return NULL; } else { - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } } @@ -172,8 +171,7 @@ static PyObject* module_register_adapter(PyObject* self, PyObject* args) if (rc == -1) return NULL; - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } PyDoc_STRVAR(module_register_adapter_doc, @@ -221,8 +219,7 @@ static PyObject* enable_callback_tracebacks(PyObject* self, PyObject* args) return NULL; } - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } PyDoc_STRVAR(enable_callback_tracebacks_doc, -- cgit v1.2.1 From 284701640bf7ddcb1fa0869661ec622d6b7010ce Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Mon, 11 Apr 2016 00:38:12 +0000 Subject: Issue #26685: Raise OSError if closing a socket fails --- Modules/socketmodule.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 8df735d204..bcff00458c 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2576,6 +2576,7 @@ static PyObject * sock_close(PySocketSockObject *s) { SOCKET_T fd; + int res; fd = s->sock_fd; if (fd != -1) { @@ -2586,8 +2587,11 @@ sock_close(PySocketSockObject *s) http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html for more details. */ Py_BEGIN_ALLOW_THREADS - (void) SOCKETCLOSE(fd); + res = SOCKETCLOSE(fd); Py_END_ALLOW_THREADS + if (res < 0) { + return s->errorhandler(); + } } Py_INCREF(Py_None); return Py_None; -- cgit v1.2.1 From 5c655b38b844fb6e540c6db65d505d63c89fde74 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 13 Apr 2016 15:37:23 +0300 Subject: Issue #26057: Got rid of nonneeded use of PyUnicode_FromObject(). --- Modules/_codecsmodule.c | 231 ++++++++++-------------------------------------- Modules/socketmodule.c | 44 +++++---- 2 files changed, 65 insertions(+), 210 deletions(-) (limited to 'Modules') diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index 7575773f45..1951da9624 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -20,10 +20,6 @@ _decode(char_buffer_obj[,errors='strict']) -> (Unicode object, bytes consumed) - _encode() interfaces also accept non-Unicode object as - input. The objects are then converted to Unicode using - PyUnicode_FromObject() prior to applying the conversion. - These s are available: utf_8, unicode_escape, raw_unicode_escape, unicode_internal, latin_1, ascii (7-bit), mbcs (on win32). @@ -718,7 +714,7 @@ _codecs_unicode_internal_encode_impl(PyModuleDef *module, PyObject *obj, /*[clinic input] _codecs.utf_7_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -728,22 +724,13 @@ _codecs_utf_7_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=a7accc496a32b759 input=fd91a78f103b0421]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(_PyUnicode_EncodeUTF7(str, 0, 0, errors), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_EncodeUTF7(str, 0, 0, errors), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.utf_8_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -753,17 +740,8 @@ _codecs_utf_8_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=ec831d80e7aedede input=2c22d40532f071f3]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(PyUnicode_AsEncodedString(str, "utf-8", errors), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_AsUTF8String(str, errors), + PyUnicode_GET_LENGTH(str)); } /* This version provides access to the byteorder parameter of the @@ -775,7 +753,7 @@ _codecs_utf_8_encode_impl(PyModuleDef *module, PyObject *str, /*[clinic input] _codecs.utf_16_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL byteorder: int = 0 / @@ -786,22 +764,13 @@ _codecs_utf_16_encode_impl(PyModuleDef *module, PyObject *str, const char *errors, int byteorder) /*[clinic end generated code: output=93ac58e960a9ee4d input=3935a489b2d5385e]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(_PyUnicode_EncodeUTF16(str, errors, byteorder), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_EncodeUTF16(str, errors, byteorder), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.utf_16_le_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -811,22 +780,13 @@ _codecs_utf_16_le_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=422bedb8da34fb66 input=bc27df05d1d20dfe]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(_PyUnicode_EncodeUTF16(str, errors, -1), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_EncodeUTF16(str, errors, -1), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.utf_16_be_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -836,17 +796,8 @@ _codecs_utf_16_be_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=3aa7ee9502acdd77 input=5a69d4112763462b]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(_PyUnicode_EncodeUTF16(str, errors, +1), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_EncodeUTF16(str, errors, +1), + PyUnicode_GET_LENGTH(str)); } /* This version provides access to the byteorder parameter of the @@ -858,7 +809,7 @@ _codecs_utf_16_be_encode_impl(PyModuleDef *module, PyObject *str, /*[clinic input] _codecs.utf_32_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL byteorder: int = 0 / @@ -869,22 +820,13 @@ _codecs_utf_32_encode_impl(PyModuleDef *module, PyObject *str, const char *errors, int byteorder) /*[clinic end generated code: output=3e7d5a003b02baed input=434a1efa492b8d58]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(_PyUnicode_EncodeUTF32(str, errors, byteorder), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_EncodeUTF32(str, errors, byteorder), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.utf_32_le_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -894,22 +836,13 @@ _codecs_utf_32_le_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=5dda641cd33dbfc2 input=dfa2d7dc78b99422]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(_PyUnicode_EncodeUTF32(str, errors, -1), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_EncodeUTF32(str, errors, -1), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.utf_32_be_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -919,22 +852,13 @@ _codecs_utf_32_be_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=ccca8b44d91a7c7a input=4595617b18169002]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(_PyUnicode_EncodeUTF32(str, errors, +1), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_EncodeUTF32(str, errors, +1), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.unicode_escape_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -944,22 +868,13 @@ _codecs_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=389f23d2b8f8d80b input=8273506f14076912]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(PyUnicode_AsUnicodeEscapeString(str), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(PyUnicode_AsUnicodeEscapeString(str), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.raw_unicode_escape_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -969,22 +884,13 @@ _codecs_raw_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=fec4e39d6ec37a62 input=181755d5dfacef3c]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(PyUnicode_AsRawUnicodeEscapeString(str), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(PyUnicode_AsRawUnicodeEscapeString(str), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.latin_1_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -994,22 +900,13 @@ _codecs_latin_1_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=ecf00eb8e48c889c input=f03f6dcf1d84bee4]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(_PyUnicode_AsLatin1String(str, errors), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_AsLatin1String(str, errors), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.ascii_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -1019,22 +916,13 @@ _codecs_ascii_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=a9d18fc6b6b91cfb input=d87e25a10a593fee]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(_PyUnicode_AsASCIIString(str, errors), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_AsASCIIString(str, errors), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.charmap_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL mapping: object = NULL / @@ -1045,20 +933,11 @@ _codecs_charmap_encode_impl(PyModuleDef *module, PyObject *str, const char *errors, PyObject *mapping) /*[clinic end generated code: output=14ca42b83853c643 input=85f4172661e8dad9]*/ { - PyObject *v; - if (mapping == Py_None) mapping = NULL; - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(_PyUnicode_EncodeCharmap(str, mapping, errors), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(_PyUnicode_EncodeCharmap(str, mapping, errors), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] @@ -1078,7 +957,7 @@ _codecs_charmap_build_impl(PyModuleDef *module, PyObject *map) /*[clinic input] _codecs.mbcs_encode - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -1088,23 +967,14 @@ _codecs_mbcs_encode_impl(PyModuleDef *module, PyObject *str, const char *errors) /*[clinic end generated code: output=d1a013bc68798bd7 input=65c09ee1e4203263]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(PyUnicode_EncodeCodePage(CP_ACP, str, errors), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(PyUnicode_EncodeCodePage(CP_ACP, str, errors), + PyUnicode_GET_LENGTH(str)); } /*[clinic input] _codecs.code_page_encode code_page: int - str: object + str: unicode errors: str(accept={str, NoneType}) = NULL / [clinic start generated code]*/ @@ -1114,19 +984,8 @@ _codecs_code_page_encode_impl(PyModuleDef *module, int code_page, PyObject *str, const char *errors) /*[clinic end generated code: output=3b406618dbfbce25 input=c8562ec460c2e309]*/ { - PyObject *v; - - str = PyUnicode_FromObject(str); - if (str == NULL || PyUnicode_READY(str) < 0) { - Py_XDECREF(str); - return NULL; - } - v = codec_tuple(PyUnicode_EncodeCodePage(code_page, - str, - errors), - PyUnicode_GET_LENGTH(str)); - Py_DECREF(str); - return v; + return codec_tuple(PyUnicode_EncodeCodePage(code_page, str, errors), + PyUnicode_GET_LENGTH(str)); } #endif /* HAVE_MBCS */ diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index bcff00458c..ec35fb9533 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1401,7 +1401,7 @@ static int idna_converter(PyObject *obj, struct maybe_idna *data) { size_t len; - PyObject *obj2, *obj3; + PyObject *obj2; if (obj == NULL) { idna_cleanup(data); return 1; @@ -1416,31 +1416,27 @@ idna_converter(PyObject *obj, struct maybe_idna *data) data->buf = PyByteArray_AsString(obj); len = PyByteArray_Size(obj); } - else if (PyUnicode_Check(obj) && PyUnicode_READY(obj) == 0 && PyUnicode_IS_COMPACT_ASCII(obj)) { - data->buf = PyUnicode_DATA(obj); - len = PyUnicode_GET_LENGTH(obj); - } - else { - obj2 = PyUnicode_FromObject(obj); - if (!obj2) { - PyErr_Format(PyExc_TypeError, "string or unicode text buffer expected, not %s", - obj->ob_type->tp_name); - return 0; + else if (PyUnicode_Check(obj)) { + if (PyUnicode_READY(obj) == 0 && PyUnicode_IS_COMPACT_ASCII(obj)) { + data->buf = PyUnicode_DATA(obj); + len = PyUnicode_GET_LENGTH(obj); } - obj3 = PyUnicode_AsEncodedString(obj2, "idna", NULL); - Py_DECREF(obj2); - if (!obj3) { - PyErr_SetString(PyExc_TypeError, "encoding of hostname failed"); - return 0; - } - if (!PyBytes_Check(obj3)) { - Py_DECREF(obj3); - PyErr_SetString(PyExc_TypeError, "encoding of hostname failed to return bytes"); - return 0; + else { + obj2 = PyUnicode_AsEncodedString(obj, "idna", NULL); + if (!obj2) { + PyErr_SetString(PyExc_TypeError, "encoding of hostname failed"); + return 0; + } + assert(PyBytes_Check(obj2)); + data->obj = obj2; + data->buf = PyBytes_AS_STRING(obj2); + len = PyBytes_GET_SIZE(obj2); } - data->obj = obj3; - data->buf = PyBytes_AS_STRING(obj3); - len = PyBytes_GET_SIZE(obj3); + } + else { + PyErr_Format(PyExc_TypeError, "str, bytes or bytearray expected, not %s", + obj->ob_type->tp_name); + return 0; } if (strlen(data->buf) != len) { Py_CLEAR(data->obj); -- cgit v1.2.1 From 78d2c0db91df7aed91a9e8b1007f2beae80ada25 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Mon, 25 Apr 2016 22:48:42 +0200 Subject: Issue #26846: Workaround for non-standard stdlib.h on Android. --- Modules/_decimal/libmpdec/basearith.c | 1 - Modules/_decimal/libmpdec/io.c | 1 - Modules/_decimal/libmpdec/memory.c | 2 +- Modules/_decimal/libmpdec/memory.h | 51 ----------------------------------- Modules/_decimal/libmpdec/mpalloc.h | 51 +++++++++++++++++++++++++++++++++++ Modules/_decimal/libmpdec/mpdecimal.c | 2 +- 6 files changed, 53 insertions(+), 55 deletions(-) delete mode 100644 Modules/_decimal/libmpdec/memory.h create mode 100644 Modules/_decimal/libmpdec/mpalloc.h (limited to 'Modules') diff --git a/Modules/_decimal/libmpdec/basearith.c b/Modules/_decimal/libmpdec/basearith.c index 35de6b8284..dfe1523927 100644 --- a/Modules/_decimal/libmpdec/basearith.c +++ b/Modules/_decimal/libmpdec/basearith.c @@ -32,7 +32,6 @@ #include #include #include "constants.h" -#include "memory.h" #include "typearith.h" #include "basearith.h" diff --git a/Modules/_decimal/libmpdec/io.c b/Modules/_decimal/libmpdec/io.c index a45a429dbf..3aadfb0437 100644 --- a/Modules/_decimal/libmpdec/io.c +++ b/Modules/_decimal/libmpdec/io.c @@ -37,7 +37,6 @@ #include #include "bits.h" #include "constants.h" -#include "memory.h" #include "typearith.h" #include "io.h" diff --git a/Modules/_decimal/libmpdec/memory.c b/Modules/_decimal/libmpdec/memory.c index 61eb6336eb..a854e09911 100644 --- a/Modules/_decimal/libmpdec/memory.c +++ b/Modules/_decimal/libmpdec/memory.c @@ -30,7 +30,7 @@ #include #include #include "typearith.h" -#include "memory.h" +#include "mpalloc.h" #if defined(_MSC_VER) diff --git a/Modules/_decimal/libmpdec/memory.h b/Modules/_decimal/libmpdec/memory.h deleted file mode 100644 index 9c98d1a400..0000000000 --- a/Modules/_decimal/libmpdec/memory.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2008-2016 Stefan Krah. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -#ifndef MEMORY_H -#define MEMORY_H - - -#include "mpdecimal.h" - - -/* Internal header file: all symbols have local scope in the DSO */ -MPD_PRAGMA(MPD_HIDE_SYMBOLS_START) - - -int mpd_switch_to_dyn(mpd_t *result, mpd_ssize_t size, uint32_t *status); -int mpd_switch_to_dyn_zero(mpd_t *result, mpd_ssize_t size, uint32_t *status); -int mpd_realloc_dyn(mpd_t *result, mpd_ssize_t size, uint32_t *status); - - -MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */ - - -#endif - - - diff --git a/Modules/_decimal/libmpdec/mpalloc.h b/Modules/_decimal/libmpdec/mpalloc.h new file mode 100644 index 0000000000..efd711953a --- /dev/null +++ b/Modules/_decimal/libmpdec/mpalloc.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2008-2016 Stefan Krah. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + + +#ifndef MPALLOC_H +#define MPALLOC_H + + +#include "mpdecimal.h" + + +/* Internal header file: all symbols have local scope in the DSO */ +MPD_PRAGMA(MPD_HIDE_SYMBOLS_START) + + +int mpd_switch_to_dyn(mpd_t *result, mpd_ssize_t size, uint32_t *status); +int mpd_switch_to_dyn_zero(mpd_t *result, mpd_ssize_t size, uint32_t *status); +int mpd_realloc_dyn(mpd_t *result, mpd_ssize_t size, uint32_t *status); + + +MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */ + + +#endif + + + diff --git a/Modules/_decimal/libmpdec/mpdecimal.c b/Modules/_decimal/libmpdec/mpdecimal.c index 593f9f5e03..328ab92246 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.c +++ b/Modules/_decimal/libmpdec/mpdecimal.c @@ -36,7 +36,7 @@ #include "bits.h" #include "convolute.h" #include "crt.h" -#include "memory.h" +#include "mpalloc.h" #include "typearith.h" #include "umodarith.h" -- cgit v1.2.1 From 8d42903a3dba7e0cfe15445906d07f33b2867229 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Tue, 26 Apr 2016 01:09:18 +0200 Subject: Issue #20306: The pw_gecos and pw_passwd fields are not required by POSIX. If they aren't present, set them to an empty string. --- Modules/pwdmodule.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'Modules') diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c index 281c30b26e..c5032562e6 100644 --- a/Modules/pwdmodule.c +++ b/Modules/pwdmodule.c @@ -75,10 +75,18 @@ mkpwent(struct passwd *p) #define SETS(i,val) sets(v, i, val) SETS(setIndex++, p->pw_name); +#if defined(HAVE_STRUCT_PASSWD_PW_PASSWD) SETS(setIndex++, p->pw_passwd); +#else + SETS(setIndex++, ""); +#endif PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromUid(p->pw_uid)); PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromGid(p->pw_gid)); +#if defined(HAVE_STRUCT_PASSWD_PW_GECOS) SETS(setIndex++, p->pw_gecos); +#else + SETS(setIndex++, ""); +#endif SETS(setIndex++, p->pw_dir); SETS(setIndex++, p->pw_shell); -- cgit v1.2.1 From 7791d6a9f3f99432210d00368ca84795ce76d938 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Tue, 26 Apr 2016 11:43:21 +0200 Subject: Issue #20306: Android is the only system that returns NULL for the pw_passwd field. Rather than cluttering the tests, translate the arguably more correct "None" to an empty string. --- Modules/pwdmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c index c5032562e6..61be3b2157 100644 --- a/Modules/pwdmodule.c +++ b/Modules/pwdmodule.c @@ -75,7 +75,7 @@ mkpwent(struct passwd *p) #define SETS(i,val) sets(v, i, val) SETS(setIndex++, p->pw_name); -#if defined(HAVE_STRUCT_PASSWD_PW_PASSWD) +#if defined(HAVE_STRUCT_PASSWD_PW_PASSWD) && !defined(__ANDROID__) SETS(setIndex++, p->pw_passwd); #else SETS(setIndex++, ""); -- cgit v1.2.1 From 7f7991ceee8b497acc9e00ce6e29b8c7340966b1 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Tue, 26 Apr 2016 16:20:17 +0200 Subject: Issue #26857: Workaround for missing symbol "gethostbyaddr_r" on Android. --- Modules/socketmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index ec35fb9533..46eeed1ab9 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -163,7 +163,7 @@ if_indextoname(index) -- return the corresponding interface name\n\ # include #endif -#ifndef WITH_THREAD +#if !defined(WITH_THREAD) || defined(__ANDROID__) # undef HAVE_GETHOSTBYNAME_R #endif -- cgit v1.2.1 From 74ca89030c4b3e62e1dbdef6155c5fa4004dd469 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Tue, 26 Apr 2016 16:34:41 +0200 Subject: Issue #26846: Post commit cleanup. --- Modules/_decimal/_decimal.c | 1 - 1 file changed, 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index 3c2ad851ba..e19bbf224e 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -36,7 +36,6 @@ #include #include "docstrings.h" -#include "memory.h" #if !defined(MPD_VERSION_HEX) || MPD_VERSION_HEX < 0x02040100 -- cgit v1.2.1 From 84e46b7d75463be6ebc913bdaeccb46dcb8055f3 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Tue, 26 Apr 2016 16:48:48 +0200 Subject: Issue #26854: Android has a different include path for soundcard.h. --- Modules/ossaudiodev.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Modules') diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index d2fd5c81d1..2b7d71f64f 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -31,7 +31,11 @@ #endif #include +#ifdef __ANDROID__ +#include +#else #include +#endif #if defined(linux) -- cgit v1.2.1 From 42bc6af276008ed85bb68bf0316f4a25cd3588ed Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Tue, 26 Apr 2016 17:04:18 +0200 Subject: Issue #26863: HAVE_FACCESSAT should (currently) not be defined on Android. --- Modules/posixmodule.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index a87bbbd6b4..03ad07d813 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -32,6 +32,12 @@ #include "winreparse.h" #endif +/* On android API level 21, 'AT_EACCESS' is not declared although + * HAVE_FACCESSAT is defined. */ +#ifdef __ANDROID__ +#undef HAVE_FACCESSAT +#endif + #ifdef __cplusplus extern "C" { #endif @@ -5933,7 +5939,7 @@ os_openpty_impl(PyModuleDef *module) if (_Py_set_inheritable(master_fd, 0, NULL) < 0) goto posix_error; -#if !defined(__CYGWIN__) && !defined(HAVE_DEV_PTC) +#if !defined(__CYGWIN__) && !defined(__ANDROID__) && !defined(HAVE_DEV_PTC) ioctl(slave_fd, I_PUSH, "ptem"); /* push ptem */ ioctl(slave_fd, I_PUSH, "ldterm"); /* push ldterm */ #ifndef __hpux -- cgit v1.2.1 From 04feb0393f788b3479a8d13b2bf4aaa9bb431c99 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Fri, 29 Apr 2016 16:54:10 +0300 Subject: Fix typos. Reported by andportnoy on GitHub. --- Modules/_randommodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index a85d905c52..fd6b230e85 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -136,7 +136,7 @@ genrand_int32(RandomObject *self) * optimize the division away at compile-time. 67108864 is 2**26. In * effect, a contains 27 random bits shifted left 26, and b fills in the * lower 26 bits of the 53-bit numerator. - * The orginal code credited Isaku Wada for this algorithm, 2002/01/09. + * The original code credited Isaku Wada for this algorithm, 2002/01/09. */ static PyObject * random_random(RandomObject *self) -- cgit v1.2.1 From 7f0c226988cdf7fc1e7d4f855df55a3ff36eb8a0 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 2 May 2016 13:45:20 +0300 Subject: Got rid of redundand "self" parameter declarations. Argument Clinic is now able to infer all needed information. --- Modules/_bz2module.c | 3 +-- Modules/_lzmamodule.c | 14 ++++---------- Modules/_tkinter.c | 17 +++++------------ 3 files changed, 10 insertions(+), 24 deletions(-) (limited to 'Modules') diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index e3e0eb1f23..f4077faa06 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -592,7 +592,6 @@ error: /*[clinic input] _bz2.BZ2Decompressor.decompress - self: self(type="BZ2Decompressor *") data: Py_buffer max_length: Py_ssize_t=-1 @@ -615,7 +614,7 @@ the unused_data attribute. static PyObject * _bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=23e41045deb240a3 input=9558b424c8b00516]*/ +/*[clinic end generated code: output=23e41045deb240a3 input=52e1ffc66a8ea624]*/ { PyObject *result = NULL; diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index f3bcd76d2c..4126b0c7ed 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -553,7 +553,6 @@ error: /*[clinic input] _lzma.LZMACompressor.compress - self: self(type="Compressor *") data: Py_buffer / @@ -567,7 +566,7 @@ flush() method to finish the compression process. static PyObject * _lzma_LZMACompressor_compress_impl(Compressor *self, Py_buffer *data) -/*[clinic end generated code: output=31f615136963e00f input=8b60cb13e0ce6420]*/ +/*[clinic end generated code: output=31f615136963e00f input=64019eac7f2cc8d0]*/ { PyObject *result = NULL; @@ -583,8 +582,6 @@ _lzma_LZMACompressor_compress_impl(Compressor *self, Py_buffer *data) /*[clinic input] _lzma.LZMACompressor.flush - self: self(type="Compressor *") - Finish the compression process. Returns the compressed data left in internal buffers. @@ -594,7 +591,7 @@ The compressor object may not be used after this method is called. static PyObject * _lzma_LZMACompressor_flush_impl(Compressor *self) -/*[clinic end generated code: output=fec21f3e22504f50 input=3060fb26f9b4042c]*/ +/*[clinic end generated code: output=fec21f3e22504f50 input=6b369303f67ad0a8]*/ { PyObject *result = NULL; @@ -698,7 +695,6 @@ Compressor_init_raw(lzma_stream *lzs, PyObject *filterspecs) /*[-clinic input] _lzma.LZMACompressor.__init__ - self: self(type="Compressor *") format: int(c_default="FORMAT_XZ") = FORMAT_XZ The container format to use for the output. This can be FORMAT_XZ (default), FORMAT_ALONE, or FORMAT_RAW. @@ -1063,7 +1059,6 @@ error: /*[clinic input] _lzma.LZMADecompressor.decompress - self: self(type="Decompressor *") data: Py_buffer max_length: Py_ssize_t=-1 @@ -1086,7 +1081,7 @@ the unused_data attribute. static PyObject * _lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=ef4e20ec7122241d input=f2bb902cc1caf203]*/ +/*[clinic end generated code: output=ef4e20ec7122241d input=60c1f135820e309d]*/ { PyObject *result = NULL; @@ -1126,7 +1121,6 @@ Decompressor_init_raw(lzma_stream *lzs, PyObject *filterspecs) /*[clinic input] _lzma.LZMADecompressor.__init__ - self: self(type="Decompressor *") format: int(c_default="FORMAT_AUTO") = FORMAT_AUTO Specifies the container format of the input stream. If this is FORMAT_AUTO (the default), the decompressor will automatically detect @@ -1152,7 +1146,7 @@ For one-shot decompression, use the decompress() function instead. static int _lzma_LZMADecompressor___init___impl(Decompressor *self, int format, PyObject *memlimit, PyObject *filters) -/*[clinic end generated code: output=3e1821f8aa36564c input=458ca6132ef29801]*/ +/*[clinic end generated code: output=3e1821f8aa36564c input=81fe684a6c2f8a27]*/ { const uint32_t decoder_flags = LZMA_TELL_ANY_CHECK | LZMA_TELL_NO_CHECK; uint64_t memlimit_ = UINT64_MAX; diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 768df81c1e..a4f0042511 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -2485,7 +2485,6 @@ Tkapp_CommandProc(CommandEvent *ev, int flags) /*[clinic input] _tkinter.tkapp.createcommand - self: self(type="TkappObject *") name: str func: object / @@ -2495,7 +2494,7 @@ _tkinter.tkapp.createcommand static PyObject * _tkinter_tkapp_createcommand_impl(TkappObject *self, const char *name, PyObject *func) -/*[clinic end generated code: output=2a1c79a4ee2af410 input=2bc2c046a0914234]*/ +/*[clinic end generated code: output=2a1c79a4ee2af410 input=255785cb70edc6a0]*/ { PythonCmd_ClientData *data; int err; @@ -2561,7 +2560,6 @@ _tkinter_tkapp_createcommand_impl(TkappObject *self, const char *name, /*[clinic input] _tkinter.tkapp.deletecommand - self: self(type="TkappObject *") name: str / @@ -2569,7 +2567,7 @@ _tkinter.tkapp.deletecommand static PyObject * _tkinter_tkapp_deletecommand_impl(TkappObject *self, const char *name) -/*[clinic end generated code: output=a67e8cb5845e0d2d input=b6306468f10b219c]*/ +/*[clinic end generated code: output=a67e8cb5845e0d2d input=53e9952eae1f85f5]*/ { int err; @@ -2762,13 +2760,11 @@ typedef struct { /*[clinic input] _tkinter.tktimertoken.deletetimerhandler - self: self(type="TkttObject *") - [clinic start generated code]*/ static PyObject * _tkinter_tktimertoken_deletetimerhandler_impl(TkttObject *self) -/*[clinic end generated code: output=bd7fe17f328cfa55 input=25ba5dd594e52084]*/ +/*[clinic end generated code: output=bd7fe17f328cfa55 input=40bd070ff85f5cf3]*/ { TkttObject *v = self; PyObject *func = v->func; @@ -2894,7 +2890,6 @@ _tkinter_tkapp_createtimerhandler_impl(TkappObject *self, int milliseconds, /*[clinic input] _tkinter.tkapp.mainloop - self: self(type="TkappObject *") threshold: int = 0 / @@ -2902,7 +2897,7 @@ _tkinter.tkapp.mainloop static PyObject * _tkinter_tkapp_mainloop_impl(TkappObject *self, int threshold) -/*[clinic end generated code: output=0ba8eabbe57841b0 input=ad57c9c1dd2b9470]*/ +/*[clinic end generated code: output=0ba8eabbe57841b0 input=036bcdcf03d5eca0]*/ { #ifdef WITH_THREAD PyThreadState *tstate = PyThreadState_Get(); @@ -3072,13 +3067,11 @@ Tkapp_WantObjects(PyObject *self, PyObject *args) /*[clinic input] _tkinter.tkapp.willdispatch - self: self(type="TkappObject *") - [clinic start generated code]*/ static PyObject * _tkinter_tkapp_willdispatch_impl(TkappObject *self) -/*[clinic end generated code: output=0e3f46d244642155 input=2630699767808970]*/ +/*[clinic end generated code: output=0e3f46d244642155 input=d88f5970843d6dab]*/ { self->dispatching = 1; -- cgit v1.2.1 From b7f049ff2025c759f7c52ced5204cc05ef22fe86 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 4 May 2016 09:44:44 +0300 Subject: Issue #26932: Fixed support of RTLD_* constants defined as enum values, not via macros (in particular on Android). Patch by Chi Hsuan Yen. --- Modules/_ctypes/_ctypes.c | 4 ++-- Modules/_ctypes/callproc.c | 2 +- Modules/posixmodule.c | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 6b1e74434f..33a7f90233 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -5480,14 +5480,14 @@ PyInit__ctypes(void) #endif /* If RTLD_LOCAL is not defined (Windows!), set it to zero. */ -#ifndef RTLD_LOCAL +#if !HAVE_DECL_RTLD_LOCAL #define RTLD_LOCAL 0 #endif /* If RTLD_GLOBAL is not defined (cygwin), set it to the same value as RTLD_LOCAL. */ -#ifndef RTLD_GLOBAL +#if !HAVE_DECL_RTLD_GLOBAL #define RTLD_GLOBAL RTLD_LOCAL #endif diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 870a0d4428..9ab0723c65 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -1307,7 +1307,7 @@ static PyObject *py_dl_open(PyObject *self, PyObject *args) PyObject *name, *name2; char *name_str; void * handle; -#ifdef RTLD_LOCAL +#if HAVE_DECL_RTLD_LOCAL int mode = RTLD_NOW | RTLD_LOCAL; #else /* cygwin doesn't define RTLD_LOCAL */ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 03ad07d813..23b2a3c59b 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12895,25 +12895,25 @@ all_ins(PyObject *m) if (PyModule_AddIntMacro(m, XATTR_SIZE_MAX)) return -1; #endif -#ifdef RTLD_LAZY +#if HAVE_DECL_RTLD_LAZY if (PyModule_AddIntMacro(m, RTLD_LAZY)) return -1; #endif -#ifdef RTLD_NOW +#if HAVE_DECL_RTLD_NOW if (PyModule_AddIntMacro(m, RTLD_NOW)) return -1; #endif -#ifdef RTLD_GLOBAL +#if HAVE_DECL_RTLD_GLOBAL if (PyModule_AddIntMacro(m, RTLD_GLOBAL)) return -1; #endif -#ifdef RTLD_LOCAL +#if HAVE_DECL_RTLD_LOCAL if (PyModule_AddIntMacro(m, RTLD_LOCAL)) return -1; #endif -#ifdef RTLD_NODELETE +#if HAVE_DECL_RTLD_NODELETE if (PyModule_AddIntMacro(m, RTLD_NODELETE)) return -1; #endif -#ifdef RTLD_NOLOAD +#if HAVE_DECL_RTLD_NOLOAD if (PyModule_AddIntMacro(m, RTLD_NOLOAD)) return -1; #endif -#ifdef RTLD_DEEPBIND +#if HAVE_DECL_RTLD_DEEPBIND if (PyModule_AddIntMacro(m, RTLD_DEEPBIND)) return -1; #endif -- cgit v1.2.1 From 01fa60ca85da598543f5fbe77ad30087d2f47cf6 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 7 May 2016 16:45:18 +0300 Subject: Issue #26708: Use the "const" qualifier for immutable strings. This can help to avoid unintentional modification. --- Modules/posixmodule.c | 76 ++++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 37 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 23b2a3c59b..92478433f8 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -810,8 +810,8 @@ typedef struct { const char *argument_name; int nullable; int allow_fd; - wchar_t *wide; - char *narrow; + const wchar_t *wide; + const char *narrow; int fd; Py_ssize_t length; PyObject *object; @@ -834,7 +834,7 @@ path_converter(PyObject *o, void *p) path_t *path = (path_t *)p; PyObject *bytes; Py_ssize_t length; - char *narrow; + const char *narrow; #define FORMAT_EXCEPTION(exc, fmt) \ PyErr_Format(exc, "%s%s" fmt, \ @@ -862,7 +862,7 @@ path_converter(PyObject *o, void *p) if (PyUnicode_Check(o)) { #ifdef MS_WINDOWS - wchar_t *wide; + const wchar_t *wide; wide = PyUnicode_AsUnicodeAndSize(o, &length); if (!wide) { @@ -1164,7 +1164,7 @@ convertenviron(void) for (e = _wenviron; *e != NULL; e++) { PyObject *k; PyObject *v; - wchar_t *p = wcschr(*e, L'='); + const wchar_t *p = wcschr(*e, L'='); if (p == NULL) continue; k = PyUnicode_FromWideChar(*e, (Py_ssize_t)(p-*e)); @@ -1192,7 +1192,7 @@ convertenviron(void) for (e = environ; *e != NULL; e++) { PyObject *k; PyObject *v; - char *p = strchr(*e, '='); + const char *p = strchr(*e, '='); if (p == NULL) continue; k = PyBytes_FromStringAndSize(*e, (int)(p-*e)); @@ -3483,7 +3483,7 @@ _listdir_windows_no_opendir(path_t *path, PyObject *list) if (!path->narrow) { WIN32_FIND_DATAW wFileData; - wchar_t *po_wchars; + const wchar_t *po_wchars; if (!path->wide) { /* Default arg: "." */ po_wchars = L"."; @@ -3649,7 +3649,7 @@ _posix_listdir(path_t *path, PyObject *list) else #endif { - char *name; + const char *name; if (path->narrow) { name = path->narrow; /* only return bytes if they specified a bytes object */ @@ -3831,7 +3831,7 @@ os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) wchar_t *target_path; int result_length; PyObject *result; - wchar_t *path_wchar; + const wchar_t *path_wchar; path_wchar = PyUnicode_AsUnicode(path); if (path_wchar == NULL) @@ -3920,7 +3920,8 @@ os__getvolumepathname_impl(PyModuleDef *module, PyObject *path) /*[clinic end generated code: output=79a0ba729f956dbe input=7eacadc40acbda6b]*/ { PyObject *result; - wchar_t *path_wchar, *mountpath=NULL; + const wchar_t *path_wchar; + wchar_t *mountpath=NULL; size_t buflen; BOOL ret; @@ -4118,7 +4119,7 @@ os_setpriority_impl(PyModuleDef *module, int which, int who, int priority) static PyObject * internal_rename(path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int is_replace) { - char *function_name = is_replace ? "replace" : "rename"; + const char *function_name = is_replace ? "replace" : "rename"; int dir_fd_specified; #ifdef MS_WINDOWS @@ -4298,7 +4299,7 @@ os_system_impl(PyModuleDef *module, PyObject *command) /*[clinic end generated code: output=800f775e10b7be55 input=86a58554ba6094af]*/ { long result; - char *bytes = PyBytes_AsString(command); + const char *bytes = PyBytes_AsString(command); Py_BEGIN_ALLOW_THREADS result = system(bytes); Py_END_ALLOW_THREADS @@ -4937,7 +4938,8 @@ parse_envlist(PyObject* env, Py_ssize_t *envc_ptr) Py_ssize_t i, pos, envc; PyObject *keys=NULL, *vals=NULL; PyObject *key, *val, *key2, *val2; - char *p, *k, *v; + char *p; + const char *k, *v; size_t len; i = PyMapping_Size(env); @@ -5052,7 +5054,7 @@ static PyObject * os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv) /*[clinic end generated code: output=9221f08143146fff input=96041559925e5229]*/ { - char *path_char; + const char *path_char; char **argvlist; Py_ssize_t argc; @@ -5173,7 +5175,7 @@ static PyObject * os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv) /*[clinic end generated code: output=140a7945484c8cc5 input=042c91dfc1e6debc]*/ { - char *path_char; + const char *path_char; char **argvlist; int i; Py_ssize_t argc; @@ -5251,7 +5253,7 @@ os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv, PyObject *env) /*[clinic end generated code: output=e7f5f0703610531f input=02362fd937963f8f]*/ { - char *path_char; + const char *path_char; char **argvlist; char **envlist; PyObject *res = NULL; @@ -6264,7 +6266,7 @@ static PyObject * posix_initgroups(PyObject *self, PyObject *args) { PyObject *oname; - char *username; + const char *username; int res; #ifdef __APPLE__ int gid; @@ -7138,16 +7140,16 @@ exit: static PyObject * win_readlink(PyObject *self, PyObject *args, PyObject *kwargs) { - wchar_t *path; + const wchar_t *path; DWORD n_bytes_returned; DWORD io_result; PyObject *po, *result; - int dir_fd; + int dir_fd; HANDLE reparse_point_handle; char target_buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; REPARSE_DATA_BUFFER *rdb = (REPARSE_DATA_BUFFER *)target_buffer; - wchar_t *print_name; + const wchar_t *print_name; static char *keywords[] = {"path", "dir_fd", NULL}; @@ -7215,8 +7217,8 @@ win_readlink(PyObject *self, PyObject *args, PyObject *kwargs) #if defined(MS_WINDOWS) /* Grab CreateSymbolicLinkW dynamically from kernel32 */ -static DWORD (CALLBACK *Py_CreateSymbolicLinkW)(LPWSTR, LPWSTR, DWORD) = NULL; -static DWORD (CALLBACK *Py_CreateSymbolicLinkA)(LPSTR, LPSTR, DWORD) = NULL; +static DWORD (CALLBACK *Py_CreateSymbolicLinkW)(LPCWSTR, LPCWSTR, DWORD) = NULL; +static DWORD (CALLBACK *Py_CreateSymbolicLinkA)(LPCSTR, LPCSTR, DWORD) = NULL; static int check_CreateSymbolicLink(void) @@ -7321,7 +7323,7 @@ _joinA(char *dest_path, const char *root, const char *rest) /* Return True if the path at src relative to dest is a directory */ static int -_check_dirW(WCHAR *src, WCHAR *dest) +_check_dirW(LPCWSTR src, LPCWSTR dest) { WIN32_FILE_ATTRIBUTE_DATA src_info; WCHAR dest_parent[MAX_PATH]; @@ -7340,7 +7342,7 @@ _check_dirW(WCHAR *src, WCHAR *dest) /* Return True if the path at src relative to dest is a directory */ static int -_check_dirA(const char *src, char *dest) +_check_dirA(LPCSTR src, LPCSTR dest) { WIN32_FILE_ATTRIBUTE_DATA src_info; char dest_parent[MAX_PATH]; @@ -9030,7 +9032,7 @@ static PyObject * os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) /*[clinic end generated code: output=a2438cf95e5a0c1c input=ba586581c2e6105f]*/ { - wchar_t *env; + const wchar_t *env; PyObject *unicode = PyUnicode_FromFormat("%U=%U", name, value); if (unicode == NULL) { @@ -9076,8 +9078,8 @@ os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) { PyObject *bytes = NULL; char *env; - char *name_string = PyBytes_AsString(name); - char *value_string = PyBytes_AsString(value); + const char *name_string = PyBytes_AsString(name); + const char *value_string = PyBytes_AsString(value); bytes = PyBytes_FromFormat("%s=%s", name_string, value_string); if (bytes == NULL) { @@ -10469,7 +10471,7 @@ cmp_constdefs(const void *v1, const void *v2) static int setup_confname_table(struct constdef *table, size_t tablesize, - char *tablename, PyObject *module) + const char *tablename, PyObject *module) { PyObject *d = NULL; size_t i; @@ -10596,9 +10598,9 @@ static PyObject * win32_startfile(PyObject *self, PyObject *args) { PyObject *ofilepath; - char *filepath; - char *operation = NULL; - wchar_t *wpath, *woperation; + const char *filepath; + const char *operation = NULL; + const wchar_t *wpath, *woperation; HINSTANCE rc; PyObject *unipath, *uoperation = NULL; @@ -11003,7 +11005,7 @@ os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks) name = path->narrow ? path->narrow : "."; for (i = 0; ; i++) { - char *start, *trace, *end; + const char *start, *trace, *end; ssize_t length; static const Py_ssize_t buffer_sizes[] = { 256, XATTR_LIST_MAX, 0 }; Py_ssize_t buffer_size = buffer_sizes[i]; @@ -11482,7 +11484,7 @@ DirEntry_fetch_stat(DirEntry *self, int follow_symlinks) struct _Py_stat_struct st; #ifdef MS_WINDOWS - wchar_t *path; + const wchar_t *path; path = PyUnicode_AsUnicode(self->path); if (!path) @@ -11499,7 +11501,7 @@ DirEntry_fetch_stat(DirEntry *self, int follow_symlinks) } #else /* POSIX */ PyObject *bytes; - char *path; + const char *path; if (!PyUnicode_FSConverter(self->path, &bytes)) return NULL; @@ -11683,7 +11685,7 @@ DirEntry_inode(DirEntry *self) { #ifdef MS_WINDOWS if (!self->got_file_index) { - wchar_t *path; + const wchar_t *path; struct _Py_stat_struct stat; path = PyUnicode_AsUnicode(self->path); @@ -11777,7 +11779,7 @@ static PyTypeObject DirEntryType = { #ifdef MS_WINDOWS static wchar_t * -join_path_filenameW(wchar_t *path_wide, wchar_t* filename) +join_path_filenameW(const wchar_t *path_wide, const wchar_t *filename) { Py_ssize_t path_len; Py_ssize_t size; @@ -12208,7 +12210,7 @@ posix_scandir(PyObject *self, PyObject *args, PyObject *kwargs) #ifdef MS_WINDOWS wchar_t *path_strW; #else - char *path; + const char *path; #endif iterator = PyObject_New(ScandirIterator, &ScandirIteratorType); -- cgit v1.2.1 From 8b79e0959ff9c267c26be96cf740f1f712f97a02 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sat, 7 May 2016 20:39:20 +0300 Subject: Issue #26924: Do not define _multiprocessing.sem_unlink under Android Android declares sem_unlink but doesn't implement it. --- Modules/_multiprocessing/multiprocessing.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_multiprocessing/multiprocessing.c b/Modules/_multiprocessing/multiprocessing.c index 4ae638eea5..f6938f979d 100644 --- a/Modules/_multiprocessing/multiprocessing.c +++ b/Modules/_multiprocessing/multiprocessing.c @@ -128,7 +128,7 @@ static PyMethodDef module_methods[] = { {"recv", multiprocessing_recv, METH_VARARGS, ""}, {"send", multiprocessing_send, METH_VARARGS, ""}, #endif -#ifndef POSIX_SEMAPHORES_NOT_ENABLED +#if defined(HAVE_SEM_UNLINK) && !defined(POSIX_SEMAPHORES_NOT_ENABLED) && !defined(__ANDROID__) {"sem_unlink", _PyMp_sem_unlink, METH_VARARGS, ""}, #endif {NULL} -- cgit v1.2.1 From c2d970d7571c2a233aeb7e84e87cab74f2ce551b Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sat, 7 May 2016 21:13:50 +0300 Subject: Issue #26924: Fix Windows buildbots sem_unlink is defined as #define SEM_UNLINK(name) 0 under Windows. --- Modules/_multiprocessing/multiprocessing.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_multiprocessing/multiprocessing.c b/Modules/_multiprocessing/multiprocessing.c index f6938f979d..d92a8bf21c 100644 --- a/Modules/_multiprocessing/multiprocessing.c +++ b/Modules/_multiprocessing/multiprocessing.c @@ -128,7 +128,7 @@ static PyMethodDef module_methods[] = { {"recv", multiprocessing_recv, METH_VARARGS, ""}, {"send", multiprocessing_send, METH_VARARGS, ""}, #endif -#if defined(HAVE_SEM_UNLINK) && !defined(POSIX_SEMAPHORES_NOT_ENABLED) && !defined(__ANDROID__) +#if !defined(POSIX_SEMAPHORES_NOT_ENABLED) && !defined(__ANDROID__) {"sem_unlink", _PyMp_sem_unlink, METH_VARARGS, ""}, #endif {NULL} -- cgit v1.2.1 From 43db0a5e63391ae17f825f5f01f62811bd299b8e Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 8 May 2016 23:36:44 +0300 Subject: Issue #18531: Single var-keyword argument of dict subtype was passed unscathed to the C-defined function. Now it is converted to exact dict. --- Modules/_testcapimodule.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 8c794859eb..5083be6402 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -872,6 +872,26 @@ test_L_code(PyObject *self) #endif /* ifdef HAVE_LONG_LONG */ +static PyObject * +get_args(PyObject *self, PyObject *args) +{ + if (args == NULL) { + args = Py_None; + } + Py_INCREF(args); + return args; +} + +static PyObject * +get_kwargs(PyObject *self, PyObject *args, PyObject *kwargs) +{ + if (kwargs == NULL) { + kwargs = Py_None; + } + Py_INCREF(kwargs); + return kwargs; +} + /* Test tuple argument processing */ static PyObject * getargs_tuple(PyObject *self, PyObject *args) @@ -3784,6 +3804,8 @@ static PyMethodDef TestMethods[] = { {"test_pep3118_obsolete_write_locks", (PyCFunction)test_pep3118_obsolete_write_locks, METH_NOARGS}, #endif {"getbuffer_with_null_view", getbuffer_with_null_view, METH_O}, + {"get_args", get_args, METH_VARARGS}, + {"get_kwargs", (PyCFunction)get_kwargs, METH_VARARGS|METH_KEYWORDS}, {"getargs_tuple", getargs_tuple, METH_VARARGS}, {"getargs_keywords", (PyCFunction)getargs_keywords, METH_VARARGS|METH_KEYWORDS}, -- cgit v1.2.1 From bdaa07074a00413ee8f1f9cce20ecf9f06bd7345 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Sun, 15 May 2016 01:26:25 +0000 Subject: Issue #26870: Add readline.set_auto_history(), originally by Tyler Crompton --- Modules/readline.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/readline.c b/Modules/readline.c index a323b69622..de1cc17d18 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -575,6 +575,24 @@ PyDoc_STRVAR(doc_add_history, "add_history(string) -> None\n\ add an item to the history buffer"); +static int should_auto_add_history = 1; + +/* Enable or disable automatic history */ + +static PyObject * +py_set_auto_history(PyObject *self, PyObject *args) +{ + if (!PyArg_ParseTuple(args, "p:set_auto_history", + &should_auto_add_history)) { + return NULL; + } + Py_RETURN_NONE; +} + +PyDoc_STRVAR(doc_set_auto_history, +"set_auto_history(enabled) -> None\n\ +Enables or disables automatic history."); + /* Get the tab-completion word-delimiters that readline uses */ @@ -791,6 +809,7 @@ static struct PyMethodDef readline_methods[] = {"set_completer_delims", set_completer_delims, METH_VARARGS, doc_set_completer_delims}, + {"set_auto_history", py_set_auto_history, METH_VARARGS, doc_set_auto_history}, {"add_history", py_add_history, METH_VARARGS, doc_add_history}, {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history}, {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history}, @@ -1266,7 +1285,7 @@ call_readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt) /* we have a valid line */ n = strlen(p); - if (n > 0) { + if (should_auto_add_history && n > 0) { const char *line; int length = _py_get_history_length(); if (length > 0) -- cgit v1.2.1 From 13550a8f6a685bf76ce5b4691623550258e2375c Mon Sep 17 00:00:00 2001 From: doko Date: Wed, 18 May 2016 01:06:01 +0200 Subject: - make some internal symbols static --- Modules/_collectionsmodule.c | 2 +- Modules/_tracemalloc.c | 2 +- Modules/faulthandler.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index d57f1ba55a..3008879f98 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -264,7 +264,7 @@ PyDoc_STRVAR(popleft_doc, "Remove and return the leftmost element."); #define NEEDS_TRIM(deque, maxlen) ((size_t)(maxlen) < (size_t)(Py_SIZE(deque))) -int +static int deque_append_internal(dequeobject *deque, PyObject *item, Py_ssize_t maxlen) { if (deque->rightindex == BLOCKLEN - 1) { diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index beda2b612d..e3329c722f 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -262,7 +262,7 @@ hashtable_hash_pointer_t(_Py_hashtable_t *ht, const void *pkey) } -int +static int hashtable_compare_pointer_t(_Py_hashtable_t *ht, const void *pkey, const _Py_hashtable_entry_t *entry) { diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 570c87520f..d6322d0f3f 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -414,7 +414,7 @@ faulthandler_exc_handler(struct _EXCEPTION_POINTERS *exc_info) /* Install the handler for fatal signals, faulthandler_fatal_error(). */ -int +static int faulthandler_enable(void) { size_t i; -- cgit v1.2.1 From a1c55127cf0c8bc21d73629fa5483d622cfba4bc Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 May 2016 11:42:37 +0200 Subject: Optimize pickle.load() and pickle.loads() Issue #27056: Optimize pickle.load() and pickle.loads(), up to 10% faster to deserialize a lot of small objects. --- Modules/_pickle.c | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index fdd60e0155..e3aa7c50ef 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1197,21 +1197,9 @@ _Unpickler_ReadFromFile(UnpicklerObject *self, Py_ssize_t n) return read_size; } -/* Read `n` bytes from the unpickler's data source, storing the result in `*s`. - - This should be used for all data reads, rather than accessing the unpickler's - input buffer directly. This method deals correctly with reading from input - streams, which the input buffer doesn't deal with. - - Note that when reading from a file-like object, self->next_read_idx won't - be updated (it should remain at 0 for the entire unpickling process). You - should use this function's return value to know how many bytes you can - consume. - - Returns -1 (with an exception set) on failure. On success, return the - number of chars read. */ +/* Don't call it directly: use _Unpickler_Read() */ static Py_ssize_t -_Unpickler_Read(UnpicklerObject *self, char **s, Py_ssize_t n) +_Unpickler_ReadImpl(UnpicklerObject *self, char **s, Py_ssize_t n) { Py_ssize_t num_read; @@ -1222,11 +1210,10 @@ _Unpickler_Read(UnpicklerObject *self, char **s, Py_ssize_t n) "read would overflow (invalid bytecode)"); return -1; } - if (self->next_read_idx + n <= self->input_len) { - *s = self->input_buffer + self->next_read_idx; - self->next_read_idx += n; - return n; - } + + /* This case is handled by the _Unpickler_Read() macro for efficiency */ + assert(self->next_read_idx + n > self->input_len); + if (!self->read) { PyErr_Format(PyExc_EOFError, "Ran out of input"); return -1; @@ -1243,6 +1230,26 @@ _Unpickler_Read(UnpicklerObject *self, char **s, Py_ssize_t n) return n; } +/* Read `n` bytes from the unpickler's data source, storing the result in `*s`. + + This should be used for all data reads, rather than accessing the unpickler's + input buffer directly. This method deals correctly with reading from input + streams, which the input buffer doesn't deal with. + + Note that when reading from a file-like object, self->next_read_idx won't + be updated (it should remain at 0 for the entire unpickling process). You + should use this function's return value to know how many bytes you can + consume. + + Returns -1 (with an exception set) on failure. On success, return the + number of chars read. */ +#define _Unpickler_Read(self, s, n) \ + (((self)->next_read_idx + (n) <= (self)->input_len) \ + ? (*(s) = (self)->input_buffer + (self)->next_read_idx, \ + (self)->next_read_idx += (n), \ + (n)) \ + : _Unpickler_ReadImpl(self, (s), (n))) + static Py_ssize_t _Unpickler_CopyLine(UnpicklerObject *self, char *line, Py_ssize_t len, char **result) -- cgit v1.2.1 From 2fd7f6b1df8ed2d79830e2f044b3b70bd8f70197 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 May 2016 21:16:59 +0200 Subject: Issue #27056: Fix _Unpickler_Read() to avoid integer overflow --- Modules/_pickle.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index e3aa7c50ef..1c9b9eb112 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1244,7 +1244,7 @@ _Unpickler_ReadImpl(UnpicklerObject *self, char **s, Py_ssize_t n) Returns -1 (with an exception set) on failure. On success, return the number of chars read. */ #define _Unpickler_Read(self, s, n) \ - (((self)->next_read_idx + (n) <= (self)->input_len) \ + (((n) <= (self)->input_len - (self)->next_read_idx) \ ? (*(s) = (self)->input_buffer + (self)->next_read_idx, \ (self)->next_read_idx += (n), \ (n)) \ -- cgit v1.2.1 From 9fff9314df3e08dc29a1810700e370fc90679ce0 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Sun, 22 May 2016 17:35:34 +0200 Subject: Issue #26857: The gethostbyaddr_r() workaround is no longer needed with api-level >= 23. Patch by Xavier de Gaye. --- Modules/socketmodule.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 46eeed1ab9..dc57810a07 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -163,7 +163,11 @@ if_indextoname(index) -- return the corresponding interface name\n\ # include #endif -#if !defined(WITH_THREAD) || defined(__ANDROID__) +#if !defined(WITH_THREAD) +# undef HAVE_GETHOSTBYNAME_R +#endif + +#if defined(__ANDROID__) && __ANDROID_API__ < 23 # undef HAVE_GETHOSTBYNAME_R #endif -- cgit v1.2.1 From 6fe6574a91f807647f6b31cf67bdbbe4327f5717 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Thu, 2 Jun 2016 10:13:47 +0000 Subject: Issue #27171: Fix typo in exception message --- Modules/_ctypes/callproc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 9ab0723c65..9136a3e9e9 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -380,7 +380,7 @@ static void SetException(DWORD code, EXCEPTION_RECORD *pr) whose operation is not allowed in the current machine mode. */ PyErr_SetString(PyExc_OSError, - "exception: priviledged instruction"); + "exception: privileged instruction"); break; case EXCEPTION_NONCONTINUABLE_EXCEPTION: -- cgit v1.2.1 From 041096d59e86c801fc9d97be3f072c528d4a53df Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Thu, 2 Jun 2016 11:30:18 -0700 Subject: replace custom validation logic in the parse module with a simple DFA validator (closes #26526) Patch from A. Skrobov. --- Modules/parsermodule.c | 2545 ++---------------------------------------------- 1 file changed, 93 insertions(+), 2452 deletions(-) (limited to 'Modules') diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index deae0493f9..82770a52ff 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -670,9 +670,75 @@ parser_suite(PyST_Object *self, PyObject *args, PyObject *kw) static node* build_node_tree(PyObject *tuple); -static int validate_expr_tree(node *tree); -static int validate_file_input(node *tree); -static int validate_encoding_decl(node *tree); + +static int +validate_node(node *tree) +{ + int type = TYPE(tree); + int nch = NCH(tree); + dfa *nt_dfa; + state *dfa_state; + int pos, arc; + + assert(ISNONTERMINAL(type)); + type -= NT_OFFSET; + if (type >= _PyParser_Grammar.g_ndfas) { + PyErr_Format(parser_error, "Unrecognized node type %d.", TYPE(tree)); + return 0; + } + nt_dfa = &_PyParser_Grammar.g_dfa[type]; + REQ(tree, nt_dfa->d_type); + + /* Run the DFA for this nonterminal. */ + dfa_state = &nt_dfa->d_state[nt_dfa->d_initial]; + for (pos = 0; pos < nch; ++pos) { + node *ch = CHILD(tree, pos); + int ch_type = TYPE(ch); + for (arc = 0; arc < dfa_state->s_narcs; ++arc) { + short a_label = dfa_state->s_arc[arc].a_lbl; + assert(a_label < _PyParser_Grammar.g_ll.ll_nlabels); + if (_PyParser_Grammar.g_ll.ll_label[a_label].lb_type == ch_type) { + /* The child is acceptable; if non-terminal, validate it recursively. */ + if (ISNONTERMINAL(ch_type) && !validate_node(ch)) + return 0; + + /* Update the state, and move on to the next child. */ + dfa_state = &nt_dfa->d_state[dfa_state->s_arc[arc].a_arrow]; + goto arc_found; + } + } + /* What would this state have accepted? */ + { + short a_label = dfa_state->s_arc->a_lbl; + int next_type; + if (!a_label) /* Wouldn't accept any more children */ + goto illegal_num_children; + + next_type = _PyParser_Grammar.g_ll.ll_label[a_label].lb_type; + if (ISNONTERMINAL(next_type)) + PyErr_Format(parser_error, "Expected node type %d, got %d.", + next_type, ch_type); + else + PyErr_Format(parser_error, "Illegal terminal: expected %s.", + _PyParser_TokenNames[next_type]); + return 0; + } + +arc_found: + continue; + } + /* Are we in a final state? If so, return 1 for successful validation. */ + for (arc = 0; arc < dfa_state->s_narcs; ++arc) { + if (!dfa_state->s_arc[arc].a_lbl) { + return 1; + } + } + +illegal_num_children: + PyErr_Format(parser_error, + "Illegal number of children for %s node.", nt_dfa->d_name); + return 0; +} /* PyObject* parser_tuple2st(PyObject* self, PyObject* args) * @@ -681,7 +747,7 @@ static int validate_encoding_decl(node *tree); * tuple can be validated. It does this by checking the first code of the * tuple, and, if acceptable, builds the internal representation. If this * step succeeds, the internal representation is validated as fully as - * possible with the various validate_*() routines defined below. + * possible with the recursive validate_node() routine defined above. * * This function must be changed if support is to be added for PyST_FRAGMENT * ST objects. @@ -710,33 +776,35 @@ parser_tuple2st(PyST_Object *self, PyObject *args, PyObject *kw) */ tree = build_node_tree(tuple); if (tree != 0) { - int start_sym = TYPE(tree); - if (start_sym == eval_input) { + node *validation_root = tree; + int tree_type = 0; + switch (TYPE(tree)) { + case eval_input: /* Might be an eval form. */ - if (validate_expr_tree(tree)) - st = parser_newstobject(tree, PyST_EXPR); - else - PyNode_Free(tree); - } - else if (start_sym == file_input) { - /* This looks like an exec form so far. */ - if (validate_file_input(tree)) - st = parser_newstobject(tree, PyST_SUITE); - else - PyNode_Free(tree); - } - else if (start_sym == encoding_decl) { + tree_type = PyST_EXPR; + break; + case encoding_decl: /* This looks like an encoding_decl so far. */ - if (validate_encoding_decl(tree)) - st = parser_newstobject(tree, PyST_SUITE); - else - PyNode_Free(tree); - } - else { + if (NCH(tree) != 1) + err_string("Error Parsing encoding_decl"); + validation_root = CHILD(tree, 0); + /* Fall through */ + case file_input: + /* This looks like an exec form so far. */ + + tree_type = PyST_SUITE; + break; + default: /* This is a fragment, at best. */ PyNode_Free(tree); err_string("parse tree does not use a valid start symbol"); + return (0); } + + if (validate_node(validation_root)) + st = parser_newstobject(tree, tree_type); + else + PyNode_Free(tree); } /* Make sure we raise an exception on all errors. We should never * get this, but we'd do well to be sure something is done. @@ -981,2433 +1049,6 @@ build_node_tree(PyObject *tuple) } -/* - * Validation routines used within the validation section: - */ -static int validate_terminal(node *terminal, int type, const char *string); - -#define validate_ampersand(ch) validate_terminal(ch, AMPER, "&") -#define validate_circumflex(ch) validate_terminal(ch, CIRCUMFLEX, "^") -#define validate_colon(ch) validate_terminal(ch, COLON, ":") -#define validate_comma(ch) validate_terminal(ch, COMMA, ",") -#define validate_dedent(ch) validate_terminal(ch, DEDENT, "") -#define validate_equal(ch) validate_terminal(ch, EQUAL, "=") -#define validate_indent(ch) validate_terminal(ch, INDENT, (char*)NULL) -#define validate_lparen(ch) validate_terminal(ch, LPAR, "(") -#define validate_newline(ch) validate_terminal(ch, NEWLINE, (char*)NULL) -#define validate_rparen(ch) validate_terminal(ch, RPAR, ")") -#define validate_semi(ch) validate_terminal(ch, SEMI, ";") -#define validate_star(ch) validate_terminal(ch, STAR, "*") -#define validate_vbar(ch) validate_terminal(ch, VBAR, "|") -#define validate_doublestar(ch) validate_terminal(ch, DOUBLESTAR, "**") -#define validate_dot(ch) validate_terminal(ch, DOT, ".") -#define validate_at(ch) validate_terminal(ch, AT, "@") -#define validate_rarrow(ch) validate_terminal(ch, RARROW, "->") -#define validate_name(ch, str) validate_terminal(ch, NAME, str) - -#define VALIDATER(n) static int validate_##n(node *tree) - -VALIDATER(node); VALIDATER(small_stmt); -VALIDATER(class); VALIDATER(node); -VALIDATER(parameters); VALIDATER(suite); -VALIDATER(testlist); VALIDATER(varargslist); -VALIDATER(vfpdef); -VALIDATER(stmt); VALIDATER(simple_stmt); -VALIDATER(expr_stmt); VALIDATER(power); -VALIDATER(del_stmt); -VALIDATER(return_stmt); VALIDATER(raise_stmt); -VALIDATER(import_stmt); VALIDATER(import_stmt); -VALIDATER(import_name); VALIDATER(yield_stmt); -VALIDATER(global_stmt); VALIDATER(nonlocal_stmt); -VALIDATER(assert_stmt); -VALIDATER(compound_stmt); VALIDATER(test_or_star_expr); -VALIDATER(while); VALIDATER(for); -VALIDATER(try); VALIDATER(except_clause); -VALIDATER(test); VALIDATER(and_test); -VALIDATER(not_test); VALIDATER(comparison); -VALIDATER(comp_op); -VALIDATER(star_expr); VALIDATER(expr); -VALIDATER(xor_expr); VALIDATER(and_expr); -VALIDATER(shift_expr); VALIDATER(arith_expr); -VALIDATER(term); VALIDATER(factor); -VALIDATER(atom); VALIDATER(lambdef); -VALIDATER(trailer); VALIDATER(subscript); -VALIDATER(subscriptlist); VALIDATER(sliceop); -VALIDATER(exprlist); VALIDATER(dictorsetmaker); -VALIDATER(arglist); VALIDATER(argument); -VALIDATER(comp_for); -VALIDATER(comp_iter); VALIDATER(comp_if); -VALIDATER(testlist_comp); VALIDATER(yield_expr); -VALIDATER(or_test); -VALIDATER(test_nocond); VALIDATER(lambdef_nocond); -VALIDATER(yield_arg); -VALIDATER(async_funcdef); VALIDATER(async_stmt); -VALIDATER(atom_expr); - -#undef VALIDATER - -#define is_even(n) (((n) & 1) == 0) -#define is_odd(n) (((n) & 1) == 1) - - -static int -validate_ntype(node *n, int t) -{ - if (TYPE(n) != t) { - PyErr_Format(parser_error, "Expected node type %d, got %d.", - t, TYPE(n)); - return 0; - } - return 1; -} - - -/* Verifies that the number of child nodes is exactly 'num', raising - * an exception if it isn't. The exception message does not indicate - * the exact number of nodes, allowing this to be used to raise the - * "right" exception when the wrong number of nodes is present in a - * specific variant of a statement's syntax. This is commonly used - * in that fashion. - */ -static int -validate_numnodes(node *n, int num, const char *const name) -{ - if (NCH(n) != num) { - PyErr_Format(parser_error, - "Illegal number of children for %s node.", name); - return 0; - } - return 1; -} - - -static int -validate_terminal(node *terminal, int type, const char *string) -{ - int res = (validate_ntype(terminal, type) - && ((string == 0) || (strcmp(string, STR(terminal)) == 0))); - - if (!res && !PyErr_Occurred()) { - PyErr_Format(parser_error, - "Illegal terminal: expected \"%s\"", string); - } - return (res); -} - -/* X (',' X) [','] */ -static int -validate_repeating_list_variable(node *tree, - int list_node_type, - int (*validate_child_func_inc)(node *, int *), - int *pos, - const char *const list_node_type_name) -{ - int nch = NCH(tree); - int res = (nch && validate_ntype(tree, list_node_type)); - - if (!res && !PyErr_Occurred()) { - /* Unconditionally raise. */ - (void) validate_numnodes(tree, 1, list_node_type_name); - } - else { - for ( ; res && *pos < nch; ) { - res = validate_child_func_inc(tree, pos); - if (!res || *pos >= nch) - break; - res = validate_comma(CHILD(tree, (*pos)++)); - } - } - return res; -} - -/* X (',' X) [','] */ -static int -validate_repeating_list(node *tree, - int list_node_type, - int (*validate_child_func)(node *), - const char *const list_node_type_name) -{ - int nch = NCH(tree); - int res = (nch && validate_ntype(tree, list_node_type)); - int pos = 0; - - if (!res && !PyErr_Occurred()) { - /* Unconditionally raise. */ - (void) validate_numnodes(tree, 1, list_node_type_name); - } - else { - for ( ; res && pos < nch; ) { - res = validate_child_func(CHILD(tree, pos++)); - if (!res || pos >= nch) - break; - res = validate_comma(CHILD(tree, pos++)); - } - } - return res; -} - - -/* validate_class() - * - * classdef: - * 'class' NAME ['(' testlist ')'] ':' suite - */ -static int -validate_class(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, classdef) && - ((nch == 4) || (nch == 6) || (nch == 7))); - - if (res) { - res = (validate_name(CHILD(tree, 0), "class") - && validate_ntype(CHILD(tree, 1), NAME) - && validate_colon(CHILD(tree, nch - 2)) - && validate_suite(CHILD(tree, nch - 1))); - } - else { - (void) validate_numnodes(tree, 4, "class"); - } - - if (res) { - if (nch == 7) { - res = ((validate_lparen(CHILD(tree, 2)) && - validate_arglist(CHILD(tree, 3)) && - validate_rparen(CHILD(tree, 4)))); - } - else if (nch == 6) { - res = (validate_lparen(CHILD(tree,2)) && - validate_rparen(CHILD(tree,3))); - } - } - return (res); -} - - -/* if_stmt: - * 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] - */ -static int -validate_if(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, if_stmt) - && (nch >= 4) - && validate_name(CHILD(tree, 0), "if") - && validate_test(CHILD(tree, 1)) - && validate_colon(CHILD(tree, 2)) - && validate_suite(CHILD(tree, 3))); - - if (res && ((nch % 4) == 3)) { - /* ... 'else' ':' suite */ - res = (validate_name(CHILD(tree, nch - 3), "else") - && validate_colon(CHILD(tree, nch - 2)) - && validate_suite(CHILD(tree, nch - 1))); - nch -= 3; - } - else if (!res && !PyErr_Occurred()) - (void) validate_numnodes(tree, 4, "if"); - if ((nch % 4) != 0) - /* Will catch the case for nch < 4 */ - res = validate_numnodes(tree, 0, "if"); - else if (res && (nch > 4)) { - /* ... ('elif' test ':' suite)+ ... */ - int j = 4; - while ((j < nch) && res) { - res = (validate_name(CHILD(tree, j), "elif") - && validate_colon(CHILD(tree, j + 2)) - && validate_test(CHILD(tree, j + 1)) - && validate_suite(CHILD(tree, j + 3))); - j += 4; - } - } - return (res); -} - - -/* parameters: - * '(' [varargslist] ')' - * - */ -static int -validate_parameters(node *tree) -{ - int nch = NCH(tree); - int res = validate_ntype(tree, parameters) && ((nch == 2) || (nch == 3)); - - if (res) { - res = (validate_lparen(CHILD(tree, 0)) - && validate_rparen(CHILD(tree, nch - 1))); - if (res && (nch == 3)) - res = validate_varargslist(CHILD(tree, 1)); - } - else { - (void) validate_numnodes(tree, 2, "parameters"); - } - return (res); -} - - -/* validate_suite() - * - * suite: - * simple_stmt - * | NEWLINE INDENT stmt+ DEDENT - */ -static int -validate_suite(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, suite) && ((nch == 1) || (nch >= 4))); - - if (res && (nch == 1)) - res = validate_simple_stmt(CHILD(tree, 0)); - else if (res) { - /* NEWLINE INDENT stmt+ DEDENT */ - res = (validate_newline(CHILD(tree, 0)) - && validate_indent(CHILD(tree, 1)) - && validate_stmt(CHILD(tree, 2)) - && validate_dedent(CHILD(tree, nch - 1))); - - if (res && (nch > 4)) { - int i = 3; - --nch; /* forget the DEDENT */ - for ( ; res && (i < nch); ++i) - res = validate_stmt(CHILD(tree, i)); - } - else if (nch < 4) - res = validate_numnodes(tree, 4, "suite"); - } - return (res); -} - - -static int -validate_testlist(node *tree) -{ - return (validate_repeating_list(tree, testlist, - validate_test, "testlist")); -} - -static int -validate_testlist_star_expr(node *tl) -{ - return (validate_repeating_list(tl, testlist_star_expr, validate_test_or_star_expr, - "testlist")); -} - - -/* validate either vfpdef or tfpdef. - * vfpdef: NAME - * tfpdef: NAME [':' test] - */ -static int -validate_vfpdef(node *tree) -{ - int nch = NCH(tree); - if (TYPE(tree) == vfpdef) { - return nch == 1 && validate_name(CHILD(tree, 0), NULL); - } - else if (TYPE(tree) == tfpdef) { - if (nch == 1) { - return validate_name(CHILD(tree, 0), NULL); - } - else if (nch == 3) { - return validate_name(CHILD(tree, 0), NULL) && - validate_colon(CHILD(tree, 1)) && - validate_test(CHILD(tree, 2)); - } - } - return 0; -} - -/* '*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef - * ..or tfpdef in place of vfpdef. vfpdef: NAME; tfpdef: NAME [':' test] - */ -static int -validate_varargslist_trailer(node *tree, int start) -{ - int nch = NCH(tree); - int res = 0; - - if (nch <= start) { - err_string("expected variable argument trailer for varargslist"); - return 0; - } - if (TYPE(CHILD(tree, start)) == STAR) { - /* - * '*' [vfpdef] - */ - res = validate_star(CHILD(tree, start++)); - if (res && start < nch && (TYPE(CHILD(tree, start)) == vfpdef || - TYPE(CHILD(tree, start)) == tfpdef)) - res = validate_vfpdef(CHILD(tree, start++)); - /* - * (',' vfpdef ['=' test])* - */ - while (res && start + 1 < nch && ( - TYPE(CHILD(tree, start + 1)) == vfpdef || - TYPE(CHILD(tree, start + 1)) == tfpdef)) { - res = (validate_comma(CHILD(tree, start++)) - && validate_vfpdef(CHILD(tree, start++))); - if (res && start + 1 < nch && TYPE(CHILD(tree, start)) == EQUAL) - res = (validate_equal(CHILD(tree, start++)) - && validate_test(CHILD(tree, start++))); - } - /* - * [',' '**' vfpdef] - */ - if (res && start + 2 < nch && TYPE(CHILD(tree, start+1)) == DOUBLESTAR) - res = (validate_comma(CHILD(tree, start++)) - && validate_doublestar(CHILD(tree, start++)) - && validate_vfpdef(CHILD(tree, start++))); - } - else if (TYPE(CHILD(tree, start)) == DOUBLESTAR) { - /* - * '**' vfpdef - */ - if (start + 1 < nch) - res = (validate_doublestar(CHILD(tree, start++)) - && validate_vfpdef(CHILD(tree, start++))); - else { - res = 0; - err_string("expected vfpdef after ** in varargslist trailer"); - } - } - else { - res = 0; - err_string("expected * or ** in varargslist trailer"); - } - - if (res && start != nch) { - res = 0; - err_string("unexpected extra children in varargslist trailer"); - } - return res; -} - - -/* validate_varargslist() - * - * Validate typedargslist or varargslist. - * - * typedargslist: ((tfpdef ['=' test] ',')* - * ('*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | - * '**' tfpdef) - * | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) - * tfpdef: NAME [':' test] - * varargslist: ((vfpdef ['=' test] ',')* - * ('*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | - * '**' vfpdef) - * | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) - * vfpdef: NAME - * - */ -static int -validate_varargslist(node *tree) -{ - int nch = NCH(tree); - int res = (TYPE(tree) == varargslist || - TYPE(tree) == typedargslist) && - (nch != 0); - int sym; - node *ch; - int i = 0; - - if (!res) - return 0; - if (nch < 1) { - err_string("varargslist missing child nodes"); - return 0; - } - while (i < nch) { - ch = CHILD(tree, i); - sym = TYPE(ch); - if (sym == vfpdef || sym == tfpdef) { - /* validate (vfpdef ['=' test] ',')+ */ - res = validate_vfpdef(ch); - ++i; - if (res && (i+2 <= nch) && TYPE(CHILD(tree, i)) == EQUAL) { - res = (validate_equal(CHILD(tree, i)) - && validate_test(CHILD(tree, i+1))); - if (res) - i += 2; - } - if (res && i < nch) { - res = validate_comma(CHILD(tree, i)); - ++i; - } - } else if (sym == DOUBLESTAR || sym == STAR) { - res = validate_varargslist_trailer(tree, i); - break; - } else { - res = 0; - err_string("illegal formation for varargslist"); - } - } - return res; -} - - -/* comp_iter: comp_for | comp_if - */ -static int -validate_comp_iter(node *tree) -{ - int res = (validate_ntype(tree, comp_iter) - && validate_numnodes(tree, 1, "comp_iter")); - if (res && TYPE(CHILD(tree, 0)) == comp_for) - res = validate_comp_for(CHILD(tree, 0)); - else - res = validate_comp_if(CHILD(tree, 0)); - - return res; -} - -/* comp_for: 'for' exprlist 'in' test [comp_iter] - */ -static int -validate_comp_for(node *tree) -{ - int nch = NCH(tree); - int res; - - if (nch == 5) - res = validate_comp_iter(CHILD(tree, 4)); - else - res = validate_numnodes(tree, 4, "comp_for"); - - if (res) - res = (validate_name(CHILD(tree, 0), "for") - && validate_exprlist(CHILD(tree, 1)) - && validate_name(CHILD(tree, 2), "in") - && validate_or_test(CHILD(tree, 3))); - - return res; -} - -/* comp_if: 'if' test_nocond [comp_iter] - */ -static int -validate_comp_if(node *tree) -{ - int nch = NCH(tree); - int res; - - if (nch == 3) - res = validate_comp_iter(CHILD(tree, 2)); - else - res = validate_numnodes(tree, 2, "comp_if"); - - if (res) - res = (validate_name(CHILD(tree, 0), "if") - && validate_test_nocond(CHILD(tree, 1))); - - return res; -} - - -/* simple_stmt | compound_stmt - * - */ -static int -validate_stmt(node *tree) -{ - int res = (validate_ntype(tree, stmt) - && validate_numnodes(tree, 1, "stmt")); - - if (res) { - tree = CHILD(tree, 0); - - if (TYPE(tree) == simple_stmt) - res = validate_simple_stmt(tree); - else - res = validate_compound_stmt(tree); - } - return (res); -} - - -/* small_stmt (';' small_stmt)* [';'] NEWLINE - * - */ -static int -validate_simple_stmt(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, simple_stmt) - && (nch >= 2) - && validate_small_stmt(CHILD(tree, 0)) - && validate_newline(CHILD(tree, nch - 1))); - - if (nch < 2) - res = validate_numnodes(tree, 2, "simple_stmt"); - --nch; /* forget the NEWLINE */ - if (res && is_even(nch)) - res = validate_semi(CHILD(tree, --nch)); - if (res && (nch > 2)) { - int i; - - for (i = 1; res && (i < nch); i += 2) - res = (validate_semi(CHILD(tree, i)) - && validate_small_stmt(CHILD(tree, i + 1))); - } - return (res); -} - - -static int -validate_small_stmt(node *tree) -{ - int nch = NCH(tree); - int res = validate_numnodes(tree, 1, "small_stmt"); - - if (res) { - int ntype = TYPE(CHILD(tree, 0)); - - if ( (ntype == expr_stmt) - || (ntype == del_stmt) - || (ntype == pass_stmt) - || (ntype == flow_stmt) - || (ntype == import_stmt) - || (ntype == global_stmt) - || (ntype == nonlocal_stmt) - || (ntype == assert_stmt)) - res = validate_node(CHILD(tree, 0)); - else { - res = 0; - err_string("illegal small_stmt child type"); - } - } - else if (nch == 1) { - res = 0; - PyErr_Format(parser_error, - "Unrecognized child node of small_stmt: %d.", - TYPE(CHILD(tree, 0))); - } - return (res); -} - - -/* compound_stmt: - * if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated - */ -static int -validate_compound_stmt(node *tree) -{ - int res = (validate_ntype(tree, compound_stmt) - && validate_numnodes(tree, 1, "compound_stmt")); - int ntype; - - if (!res) - return (0); - - tree = CHILD(tree, 0); - ntype = TYPE(tree); - if ( (ntype == if_stmt) - || (ntype == while_stmt) - || (ntype == for_stmt) - || (ntype == try_stmt) - || (ntype == with_stmt) - || (ntype == funcdef) - || (ntype == async_stmt) - || (ntype == classdef) - || (ntype == decorated)) - res = validate_node(tree); - else { - res = 0; - PyErr_Format(parser_error, - "Illegal compound statement type: %d.", TYPE(tree)); - } - return (res); -} - -static int -validate_yield_or_testlist(node *tree, int tse) -{ - if (TYPE(tree) == yield_expr) { - return validate_yield_expr(tree); - } - else { - if (tse) - return validate_testlist_star_expr(tree); - else - return validate_testlist(tree); - } -} - -static int -validate_expr_stmt(node *tree) -{ - int j; - int nch = NCH(tree); - int res = (validate_ntype(tree, expr_stmt) - && is_odd(nch) - && validate_testlist_star_expr(CHILD(tree, 0))); - - if (res && nch == 3 - && TYPE(CHILD(tree, 1)) == augassign) { - res = validate_numnodes(CHILD(tree, 1), 1, "augassign") - && validate_yield_or_testlist(CHILD(tree, 2), 0); - - if (res) { - char *s = STR(CHILD(CHILD(tree, 1), 0)); - - res = (strcmp(s, "+=") == 0 - || strcmp(s, "-=") == 0 - || strcmp(s, "*=") == 0 - || strcmp(s, "/=") == 0 - || strcmp(s, "//=") == 0 - || strcmp(s, "%=") == 0 - || strcmp(s, "&=") == 0 - || strcmp(s, "|=") == 0 - || strcmp(s, "^=") == 0 - || strcmp(s, "<<=") == 0 - || strcmp(s, ">>=") == 0 - || strcmp(s, "**=") == 0); - if (!res) - err_string("illegal augmented assignment operator"); - } - } - else { - for (j = 1; res && (j < nch); j += 2) - res = validate_equal(CHILD(tree, j)) - && validate_yield_or_testlist(CHILD(tree, j + 1), 1); - } - return (res); -} - - -static int -validate_del_stmt(node *tree) -{ - return (validate_numnodes(tree, 2, "del_stmt") - && validate_name(CHILD(tree, 0), "del") - && validate_exprlist(CHILD(tree, 1))); -} - - -static int -validate_return_stmt(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, return_stmt) - && ((nch == 1) || (nch == 2)) - && validate_name(CHILD(tree, 0), "return")); - - if (res && (nch == 2)) - res = validate_testlist(CHILD(tree, 1)); - - return (res); -} - - -/* - * raise_stmt: - * - * 'raise' [test ['from' test]] - */ -static int -validate_raise_stmt(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, raise_stmt) - && ((nch == 1) || (nch == 2) || (nch == 4))); - - if (!res && !PyErr_Occurred()) - (void) validate_numnodes(tree, 2, "raise"); - - if (res) { - res = validate_name(CHILD(tree, 0), "raise"); - if (res && (nch >= 2)) - res = validate_test(CHILD(tree, 1)); - if (res && (nch == 4)) { - res = (validate_name(CHILD(tree, 2), "from") - && validate_test(CHILD(tree, 3))); - } - } - return (res); -} - - -/* yield_expr: 'yield' [yield_arg] - */ -static int -validate_yield_expr(node *tree) -{ - int nch = NCH(tree); - if (nch < 1 || nch > 2) - return 0; - if (!validate_ntype(tree, yield_expr)) - return 0; - if (!validate_name(CHILD(tree, 0), "yield")) - return 0; - if (nch == 2) { - if (!validate_yield_arg(CHILD(tree, 1))) - return 0; - } - return 1; -} - -/* yield_arg: 'from' test | testlist - */ -static int -validate_yield_arg(node *tree) -{ - int nch = NCH(tree); - if (!validate_ntype(tree, yield_arg)) - return 0; - switch (nch) { - case 1: - if (!validate_testlist(CHILD(tree, nch - 1))) - return 0; - break; - case 2: - if (!validate_name(CHILD(tree, 0), "from")) - return 0; - if (!validate_test(CHILD(tree, 1))) - return 0; - break; - default: - return 0; - } - return 1; -} - -/* yield_stmt: yield_expr - */ -static int -validate_yield_stmt(node *tree) -{ - return (validate_ntype(tree, yield_stmt) - && validate_numnodes(tree, 1, "yield_stmt") - && validate_yield_expr(CHILD(tree, 0))); -} - - -static int -validate_import_as_name(node *tree) -{ - int nch = NCH(tree); - int ok = validate_ntype(tree, import_as_name); - - if (ok) { - if (nch == 1) - ok = validate_name(CHILD(tree, 0), NULL); - else if (nch == 3) - ok = (validate_name(CHILD(tree, 0), NULL) - && validate_name(CHILD(tree, 1), "as") - && validate_name(CHILD(tree, 2), NULL)); - else - ok = validate_numnodes(tree, 3, "import_as_name"); - } - return ok; -} - - -/* dotted_name: NAME ("." NAME)* - */ -static int -validate_dotted_name(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, dotted_name) - && is_odd(nch) - && validate_name(CHILD(tree, 0), NULL)); - int i; - - for (i = 1; res && (i < nch); i += 2) { - res = (validate_dot(CHILD(tree, i)) - && validate_name(CHILD(tree, i+1), NULL)); - } - return res; -} - - -/* dotted_as_name: dotted_name [NAME NAME] - */ -static int -validate_dotted_as_name(node *tree) -{ - int nch = NCH(tree); - int res = validate_ntype(tree, dotted_as_name); - - if (res) { - if (nch == 1) - res = validate_dotted_name(CHILD(tree, 0)); - else if (nch == 3) - res = (validate_dotted_name(CHILD(tree, 0)) - && validate_name(CHILD(tree, 1), "as") - && validate_name(CHILD(tree, 2), NULL)); - else { - res = 0; - err_string("illegal number of children for dotted_as_name"); - } - } - return res; -} - - -/* dotted_as_name (',' dotted_as_name)* */ -static int -validate_dotted_as_names(node *tree) -{ - int nch = NCH(tree); - int res = is_odd(nch) && validate_dotted_as_name(CHILD(tree, 0)); - int i; - - for (i = 1; res && (i < nch); i += 2) - res = (validate_comma(CHILD(tree, i)) - && validate_dotted_as_name(CHILD(tree, i + 1))); - return (res); -} - - -/* import_as_name (',' import_as_name)* [','] */ -static int -validate_import_as_names(node *tree) -{ - int nch = NCH(tree); - int res = validate_import_as_name(CHILD(tree, 0)); - int i; - - for (i = 1; res && (i + 1 < nch); i += 2) - res = (validate_comma(CHILD(tree, i)) - && validate_import_as_name(CHILD(tree, i + 1))); - return (res); -} - - -/* 'import' dotted_as_names */ -static int -validate_import_name(node *tree) -{ - return (validate_ntype(tree, import_name) - && validate_numnodes(tree, 2, "import_name") - && validate_name(CHILD(tree, 0), "import") - && validate_dotted_as_names(CHILD(tree, 1))); -} - -/* Helper function to count the number of leading dots (or ellipsis tokens) in - * 'from ...module import name' - */ -static int -count_from_dots(node *tree) -{ - int i; - for (i = 1; i < NCH(tree); i++) - if (TYPE(CHILD(tree, i)) != DOT && TYPE(CHILD(tree, i)) != ELLIPSIS) - break; - return i - 1; -} - -/* import_from: ('from' ('.'* dotted_name | '.'+) - * 'import' ('*' | '(' import_as_names ')' | import_as_names)) - */ -static int -validate_import_from(node *tree) -{ - int nch = NCH(tree); - int ndots = count_from_dots(tree); - int havename = (TYPE(CHILD(tree, ndots + 1)) == dotted_name); - int offset = ndots + havename; - int res = validate_ntype(tree, import_from) - && (offset >= 1) - && (nch >= 3 + offset) - && validate_name(CHILD(tree, 0), "from") - && (!havename || validate_dotted_name(CHILD(tree, ndots + 1))) - && validate_name(CHILD(tree, offset + 1), "import"); - - if (res && TYPE(CHILD(tree, offset + 2)) == LPAR) - res = ((nch == offset + 5) - && validate_lparen(CHILD(tree, offset + 2)) - && validate_import_as_names(CHILD(tree, offset + 3)) - && validate_rparen(CHILD(tree, offset + 4))); - else if (res && TYPE(CHILD(tree, offset + 2)) != STAR) - res = validate_import_as_names(CHILD(tree, offset + 2)); - return (res); -} - - -/* import_stmt: import_name | import_from */ -static int -validate_import_stmt(node *tree) -{ - int nch = NCH(tree); - int res = validate_numnodes(tree, 1, "import_stmt"); - - if (res) { - int ntype = TYPE(CHILD(tree, 0)); - - if (ntype == import_name || ntype == import_from) - res = validate_node(CHILD(tree, 0)); - else { - res = 0; - err_string("illegal import_stmt child type"); - } - } - else if (nch == 1) { - res = 0; - PyErr_Format(parser_error, - "Unrecognized child node of import_stmt: %d.", - TYPE(CHILD(tree, 0))); - } - return (res); -} - - -/* global_stmt: - * - * 'global' NAME (',' NAME)* - */ -static int -validate_global_stmt(node *tree) -{ - int j; - int nch = NCH(tree); - int res = (validate_ntype(tree, global_stmt) - && is_even(nch) && (nch >= 2)); - - if (!res && !PyErr_Occurred()) - err_string("illegal global statement"); - - if (res) - res = (validate_name(CHILD(tree, 0), "global") - && validate_ntype(CHILD(tree, 1), NAME)); - for (j = 2; res && (j < nch); j += 2) - res = (validate_comma(CHILD(tree, j)) - && validate_ntype(CHILD(tree, j + 1), NAME)); - - return (res); -} - -/* nonlocal_stmt: - * - * 'nonlocal' NAME (',' NAME)* - */ -static int -validate_nonlocal_stmt(node *tree) -{ - int j; - int nch = NCH(tree); - int res = (validate_ntype(tree, nonlocal_stmt) - && is_even(nch) && (nch >= 2)); - - if (!res && !PyErr_Occurred()) - err_string("illegal nonlocal statement"); - - if (res) - res = (validate_name(CHILD(tree, 0), "nonlocal") - && validate_ntype(CHILD(tree, 1), NAME)); - for (j = 2; res && (j < nch); j += 2) - res = (validate_comma(CHILD(tree, j)) - && validate_ntype(CHILD(tree, j + 1), NAME)); - - return res; -} - -/* assert_stmt: - * - * 'assert' test [',' test] - */ -static int -validate_assert_stmt(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, assert_stmt) - && ((nch == 2) || (nch == 4)) - && (validate_name(CHILD(tree, 0), "assert")) - && validate_test(CHILD(tree, 1))); - - if (!res && !PyErr_Occurred()) - err_string("illegal assert statement"); - if (res && (nch > 2)) - res = (validate_comma(CHILD(tree, 2)) - && validate_test(CHILD(tree, 3))); - - return (res); -} - - -static int -validate_while(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, while_stmt) - && ((nch == 4) || (nch == 7)) - && validate_name(CHILD(tree, 0), "while") - && validate_test(CHILD(tree, 1)) - && validate_colon(CHILD(tree, 2)) - && validate_suite(CHILD(tree, 3))); - - if (res && (nch == 7)) - res = (validate_name(CHILD(tree, 4), "else") - && validate_colon(CHILD(tree, 5)) - && validate_suite(CHILD(tree, 6))); - - return (res); -} - - -static int -validate_for(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, for_stmt) - && ((nch == 6) || (nch == 9)) - && validate_name(CHILD(tree, 0), "for") - && validate_exprlist(CHILD(tree, 1)) - && validate_name(CHILD(tree, 2), "in") - && validate_testlist(CHILD(tree, 3)) - && validate_colon(CHILD(tree, 4)) - && validate_suite(CHILD(tree, 5))); - - if (res && (nch == 9)) - res = (validate_name(CHILD(tree, 6), "else") - && validate_colon(CHILD(tree, 7)) - && validate_suite(CHILD(tree, 8))); - - return (res); -} - - -/* try_stmt: - * 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] - ['finally' ':' suite] - * | 'try' ':' suite 'finally' ':' suite - * - */ -static int -validate_try(node *tree) -{ - int nch = NCH(tree); - int pos = 3; - int res = (validate_ntype(tree, try_stmt) - && (nch >= 6) && ((nch % 3) == 0)); - - if (res) - res = (validate_name(CHILD(tree, 0), "try") - && validate_colon(CHILD(tree, 1)) - && validate_suite(CHILD(tree, 2)) - && validate_colon(CHILD(tree, nch - 2)) - && validate_suite(CHILD(tree, nch - 1))); - else if (!PyErr_Occurred()) { - const char* name = "except"; - if (TYPE(CHILD(tree, nch - 3)) != except_clause) - name = STR(CHILD(tree, nch - 3)); - - PyErr_Format(parser_error, - "Illegal number of children for try/%s node.", name); - } - /* Handle try/finally statement */ - if (res && (TYPE(CHILD(tree, pos)) == NAME) && - (strcmp(STR(CHILD(tree, pos)), "finally") == 0)) { - res = (validate_numnodes(tree, 6, "try/finally") - && validate_colon(CHILD(tree, 4)) - && validate_suite(CHILD(tree, 5))); - return (res); - } - /* try/except statement: skip past except_clause sections */ - while (res && pos < nch && (TYPE(CHILD(tree, pos)) == except_clause)) { - res = (validate_except_clause(CHILD(tree, pos)) - && validate_colon(CHILD(tree, pos + 1)) - && validate_suite(CHILD(tree, pos + 2))); - pos += 3; - } - /* skip else clause */ - if (res && pos < nch && (TYPE(CHILD(tree, pos)) == NAME) && - (strcmp(STR(CHILD(tree, pos)), "else") == 0)) { - res = (validate_colon(CHILD(tree, pos + 1)) - && validate_suite(CHILD(tree, pos + 2))); - pos += 3; - } - if (res && pos < nch) { - /* last clause must be a finally */ - res = (validate_name(CHILD(tree, pos), "finally") - && validate_numnodes(tree, pos + 3, "try/except/finally") - && validate_colon(CHILD(tree, pos + 1)) - && validate_suite(CHILD(tree, pos + 2))); - } - return (res); -} - - -static int -validate_except_clause(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, except_clause) - && ((nch == 1) || (nch == 2) || (nch == 4)) - && validate_name(CHILD(tree, 0), "except")); - - if (res && (nch > 1)) - res = validate_test(CHILD(tree, 1)); - if (res && (nch == 4)) - res = (validate_name(CHILD(tree, 2), "as") - && validate_ntype(CHILD(tree, 3), NAME)); - - return (res); -} - - -static int -validate_test(node *tree) -{ - int nch = NCH(tree); - int res = validate_ntype(tree, test) && is_odd(nch); - - if (res && (TYPE(CHILD(tree, 0)) == lambdef)) - res = ((nch == 1) - && validate_lambdef(CHILD(tree, 0))); - else if (res) { - res = validate_or_test(CHILD(tree, 0)); - res = (res && (nch == 1 || (nch == 5 && - validate_name(CHILD(tree, 1), "if") && - validate_or_test(CHILD(tree, 2)) && - validate_name(CHILD(tree, 3), "else") && - validate_test(CHILD(tree, 4))))); - } - return (res); -} - -static int -validate_test_nocond(node *tree) -{ - int nch = NCH(tree); - int res = validate_ntype(tree, test_nocond) && (nch == 1); - - if (res && (TYPE(CHILD(tree, 0)) == lambdef_nocond)) - res = (validate_lambdef_nocond(CHILD(tree, 0))); - else if (res) { - res = (validate_or_test(CHILD(tree, 0))); - } - return (res); -} - -static int -validate_or_test(node *tree) -{ - int nch = NCH(tree); - int res = validate_ntype(tree, or_test) && is_odd(nch); - - if (res) { - int pos; - res = validate_and_test(CHILD(tree, 0)); - for (pos = 1; res && (pos < nch); pos += 2) - res = (validate_name(CHILD(tree, pos), "or") - && validate_and_test(CHILD(tree, pos + 1))); - } - return (res); -} - - -static int -validate_and_test(node *tree) -{ - int pos; - int nch = NCH(tree); - int res = (validate_ntype(tree, and_test) - && is_odd(nch) - && validate_not_test(CHILD(tree, 0))); - - for (pos = 1; res && (pos < nch); pos += 2) - res = (validate_name(CHILD(tree, pos), "and") - && validate_not_test(CHILD(tree, 0))); - - return (res); -} - - -static int -validate_not_test(node *tree) -{ - int nch = NCH(tree); - int res = validate_ntype(tree, not_test) && ((nch == 1) || (nch == 2)); - - if (res) { - if (nch == 2) - res = (validate_name(CHILD(tree, 0), "not") - && validate_not_test(CHILD(tree, 1))); - else if (nch == 1) - res = validate_comparison(CHILD(tree, 0)); - } - return (res); -} - - -static int -validate_comparison(node *tree) -{ - int pos; - int nch = NCH(tree); - int res = (validate_ntype(tree, comparison) - && is_odd(nch) - && validate_expr(CHILD(tree, 0))); - - for (pos = 1; res && (pos < nch); pos += 2) - res = (validate_comp_op(CHILD(tree, pos)) - && validate_expr(CHILD(tree, pos + 1))); - - return (res); -} - - -static int -validate_comp_op(node *tree) -{ - int res = 0; - int nch = NCH(tree); - - if (!validate_ntype(tree, comp_op)) - return (0); - if (nch == 1) { - /* - * Only child will be a terminal with a well-defined symbolic name - * or a NAME with a string of either 'is' or 'in' - */ - tree = CHILD(tree, 0); - switch (TYPE(tree)) { - case LESS: - case GREATER: - case EQEQUAL: - case EQUAL: - case LESSEQUAL: - case GREATEREQUAL: - case NOTEQUAL: - res = 1; - break; - case NAME: - res = ((strcmp(STR(tree), "in") == 0) - || (strcmp(STR(tree), "is") == 0)); - if (!res) { - PyErr_Format(parser_error, - "illegal operator '%s'", STR(tree)); - } - break; - default: - err_string("illegal comparison operator type"); - break; - } - } - else if ((res = validate_numnodes(tree, 2, "comp_op")) != 0) { - res = (validate_ntype(CHILD(tree, 0), NAME) - && validate_ntype(CHILD(tree, 1), NAME) - && (((strcmp(STR(CHILD(tree, 0)), "is") == 0) - && (strcmp(STR(CHILD(tree, 1)), "not") == 0)) - || ((strcmp(STR(CHILD(tree, 0)), "not") == 0) - && (strcmp(STR(CHILD(tree, 1)), "in") == 0)))); - if (!res && !PyErr_Occurred()) - err_string("unknown comparison operator"); - } - return (res); -} - - -static int -validate_star_expr(node *tree) -{ - int res = validate_ntype(tree, star_expr); - if (!res) return res; - if (!validate_numnodes(tree, 2, "star_expr")) - return 0; - return validate_ntype(CHILD(tree, 0), STAR) && \ - validate_expr(CHILD(tree, 1)); -} - - -static int -validate_expr(node *tree) -{ - int j; - int nch = NCH(tree); - int res = (validate_ntype(tree, expr) - && is_odd(nch) - && validate_xor_expr(CHILD(tree, 0))); - - for (j = 2; res && (j < nch); j += 2) - res = (validate_xor_expr(CHILD(tree, j)) - && validate_vbar(CHILD(tree, j - 1))); - - return (res); -} - - -static int -validate_xor_expr(node *tree) -{ - int j; - int nch = NCH(tree); - int res = (validate_ntype(tree, xor_expr) - && is_odd(nch) - && validate_and_expr(CHILD(tree, 0))); - - for (j = 2; res && (j < nch); j += 2) - res = (validate_circumflex(CHILD(tree, j - 1)) - && validate_and_expr(CHILD(tree, j))); - - return (res); -} - - -static int -validate_and_expr(node *tree) -{ - int pos; - int nch = NCH(tree); - int res = (validate_ntype(tree, and_expr) - && is_odd(nch) - && validate_shift_expr(CHILD(tree, 0))); - - for (pos = 1; res && (pos < nch); pos += 2) - res = (validate_ampersand(CHILD(tree, pos)) - && validate_shift_expr(CHILD(tree, pos + 1))); - - return (res); -} - - -static int -validate_chain_two_ops(node *tree, int (*termvalid)(node *), int op1, int op2) - { - int pos = 1; - int nch = NCH(tree); - int res = (is_odd(nch) - && (*termvalid)(CHILD(tree, 0))); - - for ( ; res && (pos < nch); pos += 2) { - if (TYPE(CHILD(tree, pos)) != op1) - res = validate_ntype(CHILD(tree, pos), op2); - if (res) - res = (*termvalid)(CHILD(tree, pos + 1)); - } - return (res); -} - - -static int -validate_shift_expr(node *tree) -{ - return (validate_ntype(tree, shift_expr) - && validate_chain_two_ops(tree, validate_arith_expr, - LEFTSHIFT, RIGHTSHIFT)); -} - - -static int -validate_arith_expr(node *tree) -{ - return (validate_ntype(tree, arith_expr) - && validate_chain_two_ops(tree, validate_term, PLUS, MINUS)); -} - - -static int -validate_term(node *tree) -{ - int pos = 1; - int nch = NCH(tree); - int res = (validate_ntype(tree, term) - && is_odd(nch) - && validate_factor(CHILD(tree, 0))); - - for ( ; res && (pos < nch); pos += 2) - res = (((TYPE(CHILD(tree, pos)) == STAR) - || (TYPE(CHILD(tree, pos)) == SLASH) - || (TYPE(CHILD(tree, pos)) == DOUBLESLASH) - || (TYPE(CHILD(tree, pos)) == PERCENT)) - && validate_factor(CHILD(tree, pos + 1))); - - return (res); -} - - -/* factor: - * - * factor: ('+'|'-'|'~') factor | power - */ -static int -validate_factor(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, factor) - && (((nch == 2) - && ((TYPE(CHILD(tree, 0)) == PLUS) - || (TYPE(CHILD(tree, 0)) == MINUS) - || (TYPE(CHILD(tree, 0)) == TILDE)) - && validate_factor(CHILD(tree, 1))) - || ((nch == 1) - && validate_power(CHILD(tree, 0))))); - return (res); -} - - -/* power: - * - * power: atom_expr trailer* ['**' factor] - */ -static int -validate_power(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, power) && (nch >= 1) - && validate_atom_expr(CHILD(tree, 0))); - - if (nch > 1) { - if (nch != 3) { - err_string("illegal number of nodes for 'power'"); - return (0); - } - res = (validate_doublestar(CHILD(tree, 1)) - && validate_factor(CHILD(tree, 2))); - } - - return (res); -} - - -/* atom_expr: - * - * atom_expr: [AWAIT] atom trailer* - */ -static int -validate_atom_expr(node *tree) -{ - int start = 0; - int nch = NCH(tree); - int res; - int pos; - - res = validate_ntype(tree, atom_expr) && (nch >= 1); - if (!res) { - return (res); - } - - if (TYPE(CHILD(tree, 0)) == AWAIT) { - start = 1; - if (nch < 2) { - err_string("illegal number of nodes for 'atom_expr'"); - return (0); - } - } - - res = validate_atom(CHILD(tree, start)); - if (res) { - pos = start + 1; - while (res && (pos < nch) && (TYPE(CHILD(tree, pos)) == trailer)) - res = validate_trailer(CHILD(tree, pos++)); - } - - return (res); -} - - -static int -validate_atom(node *tree) -{ - int pos; - int nch = NCH(tree); - int res = validate_ntype(tree, atom); - - if (res && nch < 1) - res = validate_numnodes(tree, nch+1, "atom"); - if (res) { - switch (TYPE(CHILD(tree, 0))) { - case LPAR: - res = ((nch <= 3) - && (validate_rparen(CHILD(tree, nch - 1)))); - - if (res && (nch == 3)) { - if (TYPE(CHILD(tree, 1))==yield_expr) - res = validate_yield_expr(CHILD(tree, 1)); - else - res = validate_testlist_comp(CHILD(tree, 1)); - } - break; - case LSQB: - if (nch == 2) - res = validate_ntype(CHILD(tree, 1), RSQB); - else if (nch == 3) - res = (validate_testlist_comp(CHILD(tree, 1)) - && validate_ntype(CHILD(tree, 2), RSQB)); - else { - res = 0; - err_string("illegal list display atom"); - } - break; - case LBRACE: - res = ((nch <= 3) - && validate_ntype(CHILD(tree, nch - 1), RBRACE)); - - if (res && (nch == 3)) - res = validate_dictorsetmaker(CHILD(tree, 1)); - break; - case NAME: - case NUMBER: - case ELLIPSIS: - res = (nch == 1); - break; - case STRING: - for (pos = 1; res && (pos < nch); ++pos) - res = validate_ntype(CHILD(tree, pos), STRING); - break; - default: - res = 0; - break; - } - } - return (res); -} - - -/* testlist_comp: - * (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] ) - */ -static int -validate_testlist_comp(node *tree) -{ - int nch = NCH(tree); - int ok; - - if (nch == 0) { - err_string("missing child nodes of testlist_comp"); - return 0; - } - - if (nch == 2 && TYPE(CHILD(tree, 1)) == comp_for) { - ok = (validate_test(CHILD(tree, 0)) - && validate_comp_for(CHILD(tree, 1))); - } - else { - ok = validate_repeating_list(tree, - testlist_comp, - validate_test_or_star_expr, - "testlist_comp"); - } - return ok; -} - -/* decorator: - * '@' dotted_name [ '(' [arglist] ')' ] NEWLINE - */ -static int -validate_decorator(node *tree) -{ - int ok; - int nch = NCH(tree); - ok = (validate_ntype(tree, decorator) && - (nch == 3 || nch == 5 || nch == 6) && - validate_at(CHILD(tree, 0)) && - validate_dotted_name(CHILD(tree, 1)) && - validate_newline(RCHILD(tree, -1))); - - if (ok && nch != 3) { - ok = (validate_lparen(CHILD(tree, 2)) && - validate_rparen(RCHILD(tree, -2))); - - if (ok && nch == 6) - ok = validate_arglist(CHILD(tree, 3)); - } - - return ok; -} - -/* decorators: - * decorator+ - */ -static int -validate_decorators(node *tree) -{ - int i, nch, ok; - nch = NCH(tree); - ok = validate_ntype(tree, decorators) && nch >= 1; - - for (i = 0; ok && i < nch; ++i) - ok = validate_decorator(CHILD(tree, i)); - - return ok; -} - -/* with_item: - * test ['as' expr] - */ -static int -validate_with_item(node *tree) -{ - int nch = NCH(tree); - int ok = (validate_ntype(tree, with_item) - && (nch == 1 || nch == 3) - && validate_test(CHILD(tree, 0))); - if (ok && nch == 3) - ok = (validate_name(CHILD(tree, 1), "as") - && validate_expr(CHILD(tree, 2))); - return ok; -} - -/* with_stmt: - * 0 1 ... -2 -1 - * 'with' with_item (',' with_item)* ':' suite - */ -static int -validate_with_stmt(node *tree) -{ - int i; - int nch = NCH(tree); - int ok = (validate_ntype(tree, with_stmt) - && (nch % 2 == 0) - && validate_name(CHILD(tree, 0), "with") - && validate_colon(RCHILD(tree, -2)) - && validate_suite(RCHILD(tree, -1))); - for (i = 1; ok && i < nch - 2; i += 2) - ok = validate_with_item(CHILD(tree, i)); - return ok; -} - -/* funcdef: 'def' NAME parameters ['->' test] ':' suite */ - -static int -validate_funcdef(node *tree) -{ - int nch = NCH(tree); - int res = validate_ntype(tree, funcdef); - if (res) { - if (nch == 5) { - res = (validate_name(CHILD(tree, 0), "def") - && validate_ntype(CHILD(tree, 1), NAME) - && validate_parameters(CHILD(tree, 2)) - && validate_colon(CHILD(tree, 3)) - && validate_suite(CHILD(tree, 4))); - } - else if (nch == 7) { - res = (validate_name(CHILD(tree, 0), "def") - && validate_ntype(CHILD(tree, 1), NAME) - && validate_parameters(CHILD(tree, 2)) - && validate_rarrow(CHILD(tree, 3)) - && validate_test(CHILD(tree, 4)) - && validate_colon(CHILD(tree, 5)) - && validate_suite(CHILD(tree, 6))); - } - else { - res = 0; - err_string("illegal number of children for funcdef"); - } - } - return res; -} - -/* async_funcdef: ASYNC funcdef */ - -static int -validate_async_funcdef(node *tree) -{ - int nch = NCH(tree); - int res = validate_ntype(tree, async_funcdef); - if (res) { - if (nch == 2) { - res = (validate_ntype(CHILD(tree, 0), ASYNC) - && validate_funcdef(CHILD(tree, 1))); - } - else { - res = 0; - err_string("illegal number of children for async_funcdef"); - } - } - return res; -} - - -/* async_stmt: ASYNC (funcdef | with_stmt | for_stmt) */ - -static int -validate_async_stmt(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, async_stmt) - && validate_ntype(CHILD(tree, 0), ASYNC)); - - if (nch != 2) { - res = 0; - err_string("illegal number of children for async_stmt"); - } else { - if (TYPE(CHILD(tree, 1)) == funcdef) { - res = validate_funcdef(CHILD(tree, 1)); - } - else if (TYPE(CHILD(tree, 1)) == with_stmt) { - res = validate_with_stmt(CHILD(tree, 1)); - } - else if (TYPE(CHILD(tree, 1)) == for_stmt) { - res = validate_for(CHILD(tree, 1)); - } - } - - return res; -} - - - -/* decorated - * decorators (classdef | funcdef) - */ -static int -validate_decorated(node *tree) -{ - int nch = NCH(tree); - int ok = (validate_ntype(tree, decorated) - && (nch == 2) - && validate_decorators(RCHILD(tree, -2))); - if (TYPE(RCHILD(tree, -1)) == funcdef) - ok = ok && validate_funcdef(RCHILD(tree, -1)); - else - ok = ok && validate_class(RCHILD(tree, -1)); - return ok; -} - -static int -validate_lambdef(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, lambdef) - && ((nch == 3) || (nch == 4)) - && validate_name(CHILD(tree, 0), "lambda") - && validate_colon(CHILD(tree, nch - 2)) - && validate_test(CHILD(tree, nch - 1))); - - if (res && (nch == 4)) - res = validate_varargslist(CHILD(tree, 1)); - else if (!res && !PyErr_Occurred()) - (void) validate_numnodes(tree, 3, "lambdef"); - - return (res); -} - - -static int -validate_lambdef_nocond(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, lambdef_nocond) - && ((nch == 3) || (nch == 4)) - && validate_name(CHILD(tree, 0), "lambda") - && validate_colon(CHILD(tree, nch - 2)) - && validate_test(CHILD(tree, nch - 1))); - - if (res && (nch == 4)) - res = validate_varargslist(CHILD(tree, 1)); - else if (!res && !PyErr_Occurred()) - (void) validate_numnodes(tree, 3, "lambdef_nocond"); - - return (res); -} - - -/* arglist: - * - * (argument ',')* (argument [','] | '*' test [',' '**' test] | '**' test) - */ -static int -validate_arglist(node *tree) -{ - int nch = NCH(tree); - int i = 0; - int ok = 1; - - if (nch <= 0) - /* raise the right error from having an invalid number of children */ - return validate_numnodes(tree, nch + 1, "arglist"); - - if (nch > 1) { - for (i=0; i= 2) { - /* skip leading (argument ',') */ - ok = (validate_argument(CHILD(tree, i)) - && validate_comma(CHILD(tree, i+1))); - if (ok) - i += 2; - else - PyErr_Clear(); - } - ok = 1; - if (nch-i > 0) { - int sym = TYPE(CHILD(tree, i)); - - if (sym == argument) { - ok = validate_argument(CHILD(tree, i)); - if (ok && i+1 != nch) { - err_string("illegal arglist specification" - " (extra stuff on end)"); - ok = 0; - } - } - else { - err_string("illegal arglist specification"); - ok = 0; - } - } - return (ok); -} - - - -/* argument: ( test [comp_for] | - * test '=' test | - * '**' test | - * '*' test ) - */ -static int -validate_argument(node *tree) -{ - int nch = NCH(tree); - int res = (validate_ntype(tree, argument) - && ((nch == 1) || (nch == 2) || (nch == 3))); - - if (res) { - if (TYPE(CHILD(tree, 0)) == DOUBLESTAR) { - res = validate_test(CHILD(tree, 1)); - } - else if (TYPE(CHILD(tree, 0)) == STAR) { - res = validate_test(CHILD(tree, 1)); - } - else if (nch == 1) { - res = validate_test(CHILD(tree, 0)); - } - else if (nch == 2) { - res = (validate_test(CHILD(tree, 0)) - && validate_comp_for(CHILD(tree, 1))); - } - else if (res && (nch == 3)) { - res = (validate_test(CHILD(tree, 0)) - && validate_equal(CHILD(tree, 1)) - && validate_test(CHILD(tree, 2))); - } - } - return (res); -} - - - -/* trailer: - * - * '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME - */ -static int -validate_trailer(node *tree) -{ - int nch = NCH(tree); - int res = validate_ntype(tree, trailer) && ((nch == 2) || (nch == 3)); - - if (res) { - switch (TYPE(CHILD(tree, 0))) { - case LPAR: - res = validate_rparen(CHILD(tree, nch - 1)); - if (res && (nch == 3)) - res = validate_arglist(CHILD(tree, 1)); - break; - case LSQB: - res = (validate_numnodes(tree, 3, "trailer") - && validate_subscriptlist(CHILD(tree, 1)) - && validate_ntype(CHILD(tree, 2), RSQB)); - break; - case DOT: - res = (validate_numnodes(tree, 2, "trailer") - && validate_ntype(CHILD(tree, 1), NAME)); - break; - default: - res = 0; - break; - } - } - else { - (void) validate_numnodes(tree, 2, "trailer"); - } - return (res); -} - - -/* subscriptlist: - * - * subscript (',' subscript)* [','] - */ -static int -validate_subscriptlist(node *tree) -{ - return (validate_repeating_list(tree, subscriptlist, - validate_subscript, "subscriptlist")); -} - - -/* subscript: - * - * '.' '.' '.' | test | [test] ':' [test] [sliceop] - */ -static int -validate_subscript(node *tree) -{ - int offset = 0; - int nch = NCH(tree); - int res = validate_ntype(tree, subscript) && (nch >= 1) && (nch <= 4); - - if (!res) { - if (!PyErr_Occurred()) - err_string("invalid number of arguments for subscript node"); - return (0); - } - if (TYPE(CHILD(tree, 0)) == DOT) - /* take care of ('.' '.' '.') possibility */ - return (validate_numnodes(tree, 3, "subscript") - && validate_dot(CHILD(tree, 0)) - && validate_dot(CHILD(tree, 1)) - && validate_dot(CHILD(tree, 2))); - if (nch == 1) { - if (TYPE(CHILD(tree, 0)) == test) - res = validate_test(CHILD(tree, 0)); - else - res = validate_colon(CHILD(tree, 0)); - return (res); - } - /* Must be [test] ':' [test] [sliceop], - * but at least one of the optional components will - * be present, but we don't know which yet. - */ - if ((TYPE(CHILD(tree, 0)) != COLON) || (nch == 4)) { - res = validate_test(CHILD(tree, 0)); - offset = 1; - } - if (res) - res = validate_colon(CHILD(tree, offset)); - if (res) { - int rem = nch - ++offset; - if (rem) { - if (TYPE(CHILD(tree, offset)) == test) { - res = validate_test(CHILD(tree, offset)); - ++offset; - --rem; - } - if (res && rem) - res = validate_sliceop(CHILD(tree, offset)); - } - } - return (res); -} - - -static int -validate_sliceop(node *tree) -{ - int nch = NCH(tree); - int res = ((nch == 1) || validate_numnodes(tree, 2, "sliceop")) - && validate_ntype(tree, sliceop); - if (!res && !PyErr_Occurred()) { - res = validate_numnodes(tree, 1, "sliceop"); - } - if (res) - res = validate_colon(CHILD(tree, 0)); - if (res && (nch == 2)) - res = validate_test(CHILD(tree, 1)); - - return (res); -} - - -static int -validate_test_or_star_expr(node *n) -{ - if (TYPE(n) == test) - return validate_test(n); - return validate_star_expr(n); -} - -static int -validate_expr_or_star_expr(node *n) -{ - if (TYPE(n) == expr) - return validate_expr(n); - return validate_star_expr(n); -} - - -static int -validate_exprlist(node *tree) -{ - return (validate_repeating_list(tree, exprlist, - validate_expr_or_star_expr, "exprlist")); -} - -/* Incrementing validate functions returns nonzero iff success (like other - * validate functions, and advance *i by the length of the matched pattern. */ - -/* test ':' test */ -static int -validate_test_colon_test_inc(node *tree, int *i) -{ - return (validate_test(CHILD(tree, (*i)++)) - && validate_colon(CHILD(tree, (*i)++)) - && validate_test(CHILD(tree, (*i)++))); -} - -/* test ':' test | '**' expr */ -static int -validate_dict_element_inc(node *tree, int *i) -{ - int nch = NCH(tree); - int res = 0; - if (nch - *i >= 2) { - if (TYPE(CHILD(tree, *i+1)) == COLON) { - /* test ':' test */ - res = validate_test_colon_test_inc(tree, i); - } else { - /* '**' expr */ - res = (validate_doublestar(CHILD(tree, (*i)++)) - && validate_expr(CHILD(tree, (*i)++))); - } - } - return res; -} - -/* - * dictorsetmaker: - * - * ( ((test ':' test | '**' expr) - * (comp_for | (',' (test ':' test | '**' expr))* [','])) | - * ((test | '*' test) - * (comp_for | (',' (test | '*' test))* [','])) ) - */ -static int -validate_dictorsetmaker(node *tree) -{ - int nch = NCH(tree); - int res; - int i = 0; - - res = validate_ntype(tree, dictorsetmaker); - if (!res) - return 0; - - if (nch - i < 1) { - /* Unconditionally raise. */ - (void) validate_numnodes(tree, 1, "dictorsetmaker"); - return 0; - } - - if (nch - i >= 2 - && ((TYPE(CHILD(tree, i+1)) == COLON) || - (TYPE(CHILD(tree, i)) == DOUBLESTAR))) { - /* Dictionary display or dictionary comprehension. */ - if (nch - i >= 4 && TYPE(CHILD(tree, i+3)) == comp_for) { - /* Dictionary comprehension. */ - res = (validate_test_colon_test_inc(tree, &i) - && validate_comp_for(CHILD(tree, i++))); - if (!res) - return 0; - } else { - /* Dictionary display. */ - return validate_repeating_list_variable( - tree, - dictorsetmaker, - validate_dict_element_inc, - &i, - "dictorsetmaker"); - } - } else { - /* Set display or set comprehension. */ - if (nch - i >= 2 && TYPE(CHILD(tree, i + 1)) == comp_for) { - /* Set comprehension. */ - res = (validate_test(CHILD(tree, i++)) - && validate_comp_for(CHILD(tree, i++))); - if (!res) - return 0; - } else { - /* Set display. */ - return validate_repeating_list(tree, - dictorsetmaker, - validate_test_or_star_expr, - "dictorsetmaker"); - } - } - - if (nch - i > 0) { - err_string("Illegal trailing nodes for dictorsetmaker."); - return 0; - } - - return 1; -} - - -static int -validate_eval_input(node *tree) -{ - int pos; - int nch = NCH(tree); - int res = (validate_ntype(tree, eval_input) - && (nch >= 2) - && validate_testlist(CHILD(tree, 0)) - && validate_ntype(CHILD(tree, nch - 1), ENDMARKER)); - - for (pos = 1; res && (pos < (nch - 1)); ++pos) - res = validate_ntype(CHILD(tree, pos), NEWLINE); - - return (res); -} - - -static int -validate_node(node *tree) -{ - int nch = 0; /* num. children on current node */ - int res = 1; /* result value */ - node* next = 0; /* node to process after this one */ - - while (res && (tree != 0)) { - nch = NCH(tree); - next = 0; - switch (TYPE(tree)) { - /* - * Definition nodes. - */ - case async_funcdef: - res = validate_async_funcdef(tree); - break; - case async_stmt: - res = validate_async_stmt(tree); - break; - case funcdef: - res = validate_funcdef(tree); - break; - case with_stmt: - res = validate_with_stmt(tree); - break; - case classdef: - res = validate_class(tree); - break; - case decorated: - res = validate_decorated(tree); - break; - /* - * "Trivial" parse tree nodes. - * (Why did I call these trivial?) - */ - case stmt: - res = validate_stmt(tree); - break; - case small_stmt: - /* - * expr_stmt | del_stmt | pass_stmt | flow_stmt | - * import_stmt | global_stmt | nonlocal_stmt | assert_stmt - */ - res = validate_small_stmt(tree); - break; - case flow_stmt: - res = (validate_numnodes(tree, 1, "flow_stmt") - && ((TYPE(CHILD(tree, 0)) == break_stmt) - || (TYPE(CHILD(tree, 0)) == continue_stmt) - || (TYPE(CHILD(tree, 0)) == yield_stmt) - || (TYPE(CHILD(tree, 0)) == return_stmt) - || (TYPE(CHILD(tree, 0)) == raise_stmt))); - if (res) - next = CHILD(tree, 0); - else if (nch == 1) - err_string("illegal flow_stmt type"); - break; - case yield_stmt: - res = validate_yield_stmt(tree); - break; - /* - * Compound statements. - */ - case simple_stmt: - res = validate_simple_stmt(tree); - break; - case compound_stmt: - res = validate_compound_stmt(tree); - break; - /* - * Fundamental statements. - */ - case expr_stmt: - res = validate_expr_stmt(tree); - break; - case del_stmt: - res = validate_del_stmt(tree); - break; - case pass_stmt: - res = (validate_numnodes(tree, 1, "pass") - && validate_name(CHILD(tree, 0), "pass")); - break; - case break_stmt: - res = (validate_numnodes(tree, 1, "break") - && validate_name(CHILD(tree, 0), "break")); - break; - case continue_stmt: - res = (validate_numnodes(tree, 1, "continue") - && validate_name(CHILD(tree, 0), "continue")); - break; - case return_stmt: - res = validate_return_stmt(tree); - break; - case raise_stmt: - res = validate_raise_stmt(tree); - break; - case import_stmt: - res = validate_import_stmt(tree); - break; - case import_name: - res = validate_import_name(tree); - break; - case import_from: - res = validate_import_from(tree); - break; - case global_stmt: - res = validate_global_stmt(tree); - break; - case nonlocal_stmt: - res = validate_nonlocal_stmt(tree); - break; - case assert_stmt: - res = validate_assert_stmt(tree); - break; - case if_stmt: - res = validate_if(tree); - break; - case while_stmt: - res = validate_while(tree); - break; - case for_stmt: - res = validate_for(tree); - break; - case try_stmt: - res = validate_try(tree); - break; - case suite: - res = validate_suite(tree); - break; - /* - * Expression nodes. - */ - case testlist: - res = validate_testlist(tree); - break; - case yield_expr: - res = validate_yield_expr(tree); - break; - case test: - res = validate_test(tree); - break; - case and_test: - res = validate_and_test(tree); - break; - case not_test: - res = validate_not_test(tree); - break; - case comparison: - res = validate_comparison(tree); - break; - case exprlist: - res = validate_exprlist(tree); - break; - case comp_op: - res = validate_comp_op(tree); - break; - case expr: - res = validate_expr(tree); - break; - case xor_expr: - res = validate_xor_expr(tree); - break; - case and_expr: - res = validate_and_expr(tree); - break; - case shift_expr: - res = validate_shift_expr(tree); - break; - case arith_expr: - res = validate_arith_expr(tree); - break; - case term: - res = validate_term(tree); - break; - case factor: - res = validate_factor(tree); - break; - case power: - res = validate_power(tree); - break; - case atom: - res = validate_atom(tree); - break; - - default: - /* Hopefully never reached! */ - err_string("unrecognized node type"); - res = 0; - break; - } - tree = next; - } - return (res); -} - - -static int -validate_expr_tree(node *tree) -{ - int res = validate_eval_input(tree); - - if (!res && !PyErr_Occurred()) - err_string("could not validate expression tuple"); - - return (res); -} - - -/* file_input: - * (NEWLINE | stmt)* ENDMARKER - */ -static int -validate_file_input(node *tree) -{ - int j; - int nch = NCH(tree) - 1; - int res = ((nch >= 0) - && validate_ntype(CHILD(tree, nch), ENDMARKER)); - - for (j = 0; res && (j < nch); ++j) { - if (TYPE(CHILD(tree, j)) == stmt) - res = validate_stmt(CHILD(tree, j)); - else - res = validate_newline(CHILD(tree, j)); - } - /* This stays in to prevent any internal failures from getting to the - * user. Hopefully, this won't be needed. If a user reports getting - * this, we have some debugging to do. - */ - if (!res && !PyErr_Occurred()) - err_string("VALIDATION FAILURE: report this to the maintainer!"); - - return (res); -} - -static int -validate_encoding_decl(node *tree) -{ - int nch = NCH(tree); - int res = ((nch == 1) - && validate_file_input(CHILD(tree, 0))); - - if (!res && !PyErr_Occurred()) - err_string("Error Parsing encoding_decl"); - - return res; -} - static PyObject* pickle_constructor = NULL; -- cgit v1.2.1 From 740ae7d4e192f389a9695844313e73d987800fbf Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Sat, 4 Jun 2016 12:06:26 -0700 Subject: issue27186: add C version of os.fspath(); patch by Jelle Zijlstra --- Modules/clinic/posixmodule.c.h | 34 +++++++++++++++++++++++++++- Modules/posixmodule.c | 51 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index a48de6ac88..2758d48cf0 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -5321,6 +5321,38 @@ exit: #endif /* defined(MS_WINDOWS) */ +PyDoc_STRVAR(os_fspath__doc__, +"fspath($module, /, path)\n" +"--\n" +"\n" +"Return the file system path representation of the object.\n" +"\n" +"If the object is str or bytes, then allow it to pass through with\n" +"an incremented refcount. If the object defines __fspath__(), then\n" +"return the result of that method. All other types raise a TypeError."); + +#define OS_FSPATH_METHODDEF \ + {"fspath", (PyCFunction)os_fspath, METH_VARARGS|METH_KEYWORDS, os_fspath__doc__}, + +static PyObject * +os_fspath_impl(PyModuleDef *module, PyObject *path); + +static PyObject * +os_fspath(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"path", NULL}; + PyObject *path; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:fspath", _keywords, + &path)) + goto exit; + return_value = os_fspath_impl(module, path); + +exit: + return return_value; +} + #ifndef OS_TTYNAME_METHODDEF #define OS_TTYNAME_METHODDEF #endif /* !defined(OS_TTYNAME_METHODDEF) */ @@ -5792,4 +5824,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=a5c9bef9ad11a20b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e64e246b8270abda input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index ded6d716eb..c55226576c 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12284,6 +12284,56 @@ error: return NULL; } +/* + Return the file system path representation of the object. + + If the object is str or bytes, then allow it to pass through with + an incremented refcount. If the object defines __fspath__(), then + return the result of that method. All other types raise a TypeError. +*/ +PyObject * +PyOS_FSPath(PyObject *path) +{ + _Py_IDENTIFIER(__fspath__); + PyObject *func = NULL; + PyObject *path_repr = NULL; + + if (PyUnicode_Check(path) || PyBytes_Check(path)) { + Py_INCREF(path); + return path; + } + + func = _PyObject_LookupSpecial(path, &PyId___fspath__); + if (NULL == func) { + return PyErr_Format(PyExc_TypeError, + "expected str, bytes or os.PathLike object, " + "not %S", + path->ob_type); + } + + path_repr = PyObject_CallFunctionObjArgs(func, NULL); + Py_DECREF(func); + return path_repr; +} + +/*[clinic input] +os.fspath + + path: object + +Return the file system path representation of the object. + +If the object is str or bytes, then allow it to pass through with +an incremented refcount. If the object defines __fspath__(), then +return the result of that method. All other types raise a TypeError. +[clinic start generated code]*/ + +static PyObject * +os_fspath_impl(PyModuleDef *module, PyObject *path) +/*[clinic end generated code: output=51ef0c2772c1932a input=652c7c37e4be1c13]*/ +{ + return PyOS_FSPath(path); +} #include "clinic/posixmodule.c.h" @@ -12484,6 +12534,7 @@ static PyMethodDef posix_methods[] = { {"scandir", (PyCFunction)posix_scandir, METH_VARARGS | METH_KEYWORDS, posix_scandir__doc__}, + OS_FSPATH_METHODDEF {NULL, NULL} /* Sentinel */ }; -- cgit v1.2.1 From 3f04a353d7bac512bee38f15e8a12269a868d356 Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Sat, 4 Jun 2016 14:38:43 -0700 Subject: issue27186: add open/io.open; patch by Jelle Zijlstra --- Modules/_io/_iomodule.c | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index d8aa1df432..85b1813c92 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -238,21 +238,33 @@ _io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, int text = 0, binary = 0, universal = 0; char rawmode[6], *m; - int line_buffering; + int line_buffering, is_number; long isatty; - PyObject *raw, *modeobj = NULL, *buffer, *wrapper, *result = NULL; + PyObject *raw, *modeobj = NULL, *buffer, *wrapper, *result = NULL, *path_or_fd = NULL; _Py_IDENTIFIER(_blksize); _Py_IDENTIFIER(isatty); _Py_IDENTIFIER(mode); _Py_IDENTIFIER(close); - if (!PyUnicode_Check(file) && - !PyBytes_Check(file) && - !PyNumber_Check(file)) { + is_number = PyNumber_Check(file); + + if (is_number) { + path_or_fd = file; + Py_INCREF(path_or_fd); + } else { + path_or_fd = PyOS_FSPath(file); + if (path_or_fd == NULL) { + return NULL; + } + } + + if (!is_number && + !PyUnicode_Check(path_or_fd) && + !PyBytes_Check(path_or_fd)) { PyErr_Format(PyExc_TypeError, "invalid file: %R", file); - return NULL; + goto error; } /* Decode mode */ @@ -293,7 +305,7 @@ _io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, if (strchr(mode+i+1, c)) { invalid_mode: PyErr_Format(PyExc_ValueError, "invalid mode: '%s'", mode); - return NULL; + goto error; } } @@ -311,51 +323,54 @@ _io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, if (creating || writing || appending || updating) { PyErr_SetString(PyExc_ValueError, "mode U cannot be combined with x', 'w', 'a', or '+'"); - return NULL; + goto error; } if (PyErr_WarnEx(PyExc_DeprecationWarning, "'U' mode is deprecated", 1) < 0) - return NULL; + goto error; reading = 1; } if (text && binary) { PyErr_SetString(PyExc_ValueError, "can't have text and binary mode at once"); - return NULL; + goto error; } if (creating + reading + writing + appending > 1) { PyErr_SetString(PyExc_ValueError, "must have exactly one of create/read/write/append mode"); - return NULL; + goto error; } if (binary && encoding != NULL) { PyErr_SetString(PyExc_ValueError, "binary mode doesn't take an encoding argument"); - return NULL; + goto error; } if (binary && errors != NULL) { PyErr_SetString(PyExc_ValueError, "binary mode doesn't take an errors argument"); - return NULL; + goto error; } if (binary && newline != NULL) { PyErr_SetString(PyExc_ValueError, "binary mode doesn't take a newline argument"); - return NULL; + goto error; } /* Create the Raw file stream */ raw = PyObject_CallFunction((PyObject *)&PyFileIO_Type, - "OsiO", file, rawmode, closefd, opener); + "OsiO", path_or_fd, rawmode, closefd, opener); if (raw == NULL) - return NULL; + goto error; result = raw; + Py_DECREF(path_or_fd); + path_or_fd = NULL; + modeobj = PyUnicode_FromString(mode); if (modeobj == NULL) goto error; @@ -461,6 +476,7 @@ _io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, Py_XDECREF(close_result); Py_DECREF(result); } + Py_XDECREF(path_or_fd); Py_XDECREF(modeobj); return NULL; } -- cgit v1.2.1 From a397e56d2aad76fe5cacd54a2ecbdb03702985c7 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 9 Jun 2016 16:16:06 +0300 Subject: Issue #26305: Argument Clinic now uses braces in C code as required by PEP 7. --- Modules/_io/clinic/_iomodule.c.h | 5 +- Modules/_io/clinic/bufferedio.c.h | 65 ++-- Modules/_io/clinic/bytesio.c.h | 26 +- Modules/_io/clinic/fileio.c.h | 26 +- Modules/_io/clinic/iobase.c.h | 11 +- Modules/_io/clinic/stringio.c.h | 17 +- Modules/_io/clinic/textio.c.h | 26 +- Modules/_winapi.c | 4 +- Modules/cjkcodecs/clinic/multibytecodec.c.h | 29 +- Modules/clinic/_bz2module.c.h | 26 +- Modules/clinic/_codecsmodule.c.h | 191 +++++++---- Modules/clinic/_cryptmodule.c.h | 5 +- Modules/clinic/_cursesmodule.c.h | 14 +- Modules/clinic/_datetimemodule.c.h | 5 +- Modules/clinic/_dbmmodule.c.h | 11 +- Modules/clinic/_elementtree.c.h | 53 +-- Modules/clinic/_gdbmmodule.c.h | 14 +- Modules/clinic/_lzmamodule.c.h | 29 +- Modules/clinic/_opcode.c.h | 8 +- Modules/clinic/_pickle.c.h | 29 +- Modules/clinic/_sre.c.h | 71 ++-- Modules/clinic/_ssl.c.h | 101 ++++-- Modules/clinic/_tkinter.c.h | 53 +-- Modules/clinic/_weakref.c.h | 5 +- Modules/clinic/_winapi.c.h | 116 ++++--- Modules/clinic/arraymodule.c.h | 29 +- Modules/clinic/audioop.c.h | 167 ++++++---- Modules/clinic/binascii.c.h | 86 +++-- Modules/clinic/cmathmodule.c.h | 74 +++-- Modules/clinic/fcntlmodule.c.h | 14 +- Modules/clinic/grpmodule.c.h | 8 +- Modules/clinic/md5module.c.h | 5 +- Modules/clinic/posixmodule.c.h | 482 ++++++++++++++++++---------- Modules/clinic/pwdmodule.c.h | 5 +- Modules/clinic/pyexpat.c.h | 23 +- Modules/clinic/sha1module.c.h | 5 +- Modules/clinic/sha256module.c.h | 8 +- Modules/clinic/sha512module.c.h | 8 +- Modules/clinic/signalmodule.c.h | 32 +- Modules/clinic/spwdmodule.c.h | 5 +- Modules/clinic/unicodedata.c.h | 44 ++- Modules/clinic/zlibmodule.c.h | 53 +-- 42 files changed, 1311 insertions(+), 677 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/clinic/_iomodule.c.h b/Modules/_io/clinic/_iomodule.c.h index a3abb93cc7..6dcfc0812d 100644 --- a/Modules/_io/clinic/_iomodule.c.h +++ b/Modules/_io/clinic/_iomodule.c.h @@ -149,11 +149,12 @@ _io_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *opener = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|sizzziO:open", _keywords, - &file, &mode, &buffering, &encoding, &errors, &newline, &closefd, &opener)) + &file, &mode, &buffering, &encoding, &errors, &newline, &closefd, &opener)) { goto exit; + } return_value = _io_open_impl(module, file, mode, buffering, encoding, errors, newline, closefd, opener); exit: return return_value; } -/*[clinic end generated code: output=97cdc09bf68a8064 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=079f597e71e9f0c6 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/bufferedio.c.h b/Modules/_io/clinic/bufferedio.c.h index 437e275730..c4dfc1640e 100644 --- a/Modules/_io/clinic/bufferedio.c.h +++ b/Modules/_io/clinic/bufferedio.c.h @@ -19,14 +19,16 @@ _io__BufferedIOBase_readinto(PyObject *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, "w*:readinto", &buffer)) + if (!PyArg_Parse(arg, "w*:readinto", &buffer)) { goto exit; + } return_value = _io__BufferedIOBase_readinto_impl(self, &buffer); exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -48,14 +50,16 @@ _io__BufferedIOBase_readinto1(PyObject *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, "w*:readinto1", &buffer)) + if (!PyArg_Parse(arg, "w*:readinto1", &buffer)) { goto exit; + } return_value = _io__BufferedIOBase_readinto1_impl(self, &buffer); exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -99,8 +103,9 @@ _io__Buffered_peek(buffered *self, PyObject *args) Py_ssize_t size = 0; if (!PyArg_ParseTuple(args, "|n:peek", - &size)) + &size)) { goto exit; + } return_value = _io__Buffered_peek_impl(self, size); exit: @@ -125,8 +130,9 @@ _io__Buffered_read(buffered *self, PyObject *args) Py_ssize_t n = -1; if (!PyArg_ParseTuple(args, "|O&:read", - _PyIO_ConvertSsize_t, &n)) + _PyIO_ConvertSsize_t, &n)) { goto exit; + } return_value = _io__Buffered_read_impl(self, n); exit: @@ -150,8 +156,9 @@ _io__Buffered_read1(buffered *self, PyObject *arg) PyObject *return_value = NULL; Py_ssize_t n; - if (!PyArg_Parse(arg, "n:read1", &n)) + if (!PyArg_Parse(arg, "n:read1", &n)) { goto exit; + } return_value = _io__Buffered_read1_impl(self, n); exit: @@ -175,14 +182,16 @@ _io__Buffered_readinto(buffered *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, "w*:readinto", &buffer)) + if (!PyArg_Parse(arg, "w*:readinto", &buffer)) { goto exit; + } return_value = _io__Buffered_readinto_impl(self, &buffer); exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -204,14 +213,16 @@ _io__Buffered_readinto1(buffered *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, "w*:readinto1", &buffer)) + if (!PyArg_Parse(arg, "w*:readinto1", &buffer)) { goto exit; + } return_value = _io__Buffered_readinto1_impl(self, &buffer); exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -234,8 +245,9 @@ _io__Buffered_readline(buffered *self, PyObject *args) Py_ssize_t size = -1; if (!PyArg_ParseTuple(args, "|O&:readline", - _PyIO_ConvertSsize_t, &size)) + _PyIO_ConvertSsize_t, &size)) { goto exit; + } return_value = _io__Buffered_readline_impl(self, size); exit: @@ -261,8 +273,9 @@ _io__Buffered_seek(buffered *self, PyObject *args) int whence = 0; if (!PyArg_ParseTuple(args, "O|i:seek", - &targetobj, &whence)) + &targetobj, &whence)) { goto exit; + } return_value = _io__Buffered_seek_impl(self, targetobj, whence); exit: @@ -288,8 +301,9 @@ _io__Buffered_truncate(buffered *self, PyObject *args) if (!PyArg_UnpackTuple(args, "truncate", 0, 1, - &pos)) + &pos)) { goto exit; + } return_value = _io__Buffered_truncate_impl(self, pos); exit: @@ -315,8 +329,9 @@ _io_BufferedReader___init__(PyObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|n:BufferedReader", _keywords, - &raw, &buffer_size)) + &raw, &buffer_size)) { goto exit; + } return_value = _io_BufferedReader___init___impl((buffered *)self, raw, buffer_size); exit: @@ -346,8 +361,9 @@ _io_BufferedWriter___init__(PyObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|n:BufferedWriter", _keywords, - &raw, &buffer_size)) + &raw, &buffer_size)) { goto exit; + } return_value = _io_BufferedWriter___init___impl((buffered *)self, raw, buffer_size); exit: @@ -371,14 +387,16 @@ _io_BufferedWriter_write(buffered *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:write", &buffer)) + if (!PyArg_Parse(arg, "y*:write", &buffer)) { goto exit; + } return_value = _io_BufferedWriter_write_impl(self, &buffer); exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -410,11 +428,13 @@ _io_BufferedRWPair___init__(PyObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; if ((Py_TYPE(self) == &PyBufferedRWPair_Type) && - !_PyArg_NoKeywords("BufferedRWPair", kwargs)) + !_PyArg_NoKeywords("BufferedRWPair", kwargs)) { goto exit; + } if (!PyArg_ParseTuple(args, "OO|n:BufferedRWPair", - &reader, &writer, &buffer_size)) + &reader, &writer, &buffer_size)) { goto exit; + } return_value = _io_BufferedRWPair___init___impl((rwpair *)self, reader, writer, buffer_size); exit: @@ -444,11 +464,12 @@ _io_BufferedRandom___init__(PyObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|n:BufferedRandom", _keywords, - &raw, &buffer_size)) + &raw, &buffer_size)) { goto exit; + } return_value = _io_BufferedRandom___init___impl((buffered *)self, raw, buffer_size); exit: return return_value; } -/*[clinic end generated code: output=2bbb5e239b4ffe6f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4f6196c756b880c8 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/bytesio.c.h b/Modules/_io/clinic/bytesio.c.h index 5f2abb03a7..1f736fed80 100644 --- a/Modules/_io/clinic/bytesio.c.h +++ b/Modules/_io/clinic/bytesio.c.h @@ -171,8 +171,9 @@ _io_BytesIO_read(bytesio *self, PyObject *args) if (!PyArg_UnpackTuple(args, "read", 0, 1, - &arg)) + &arg)) { goto exit; + } return_value = _io_BytesIO_read_impl(self, arg); exit: @@ -215,8 +216,9 @@ _io_BytesIO_readline(bytesio *self, PyObject *args) if (!PyArg_UnpackTuple(args, "readline", 0, 1, - &arg)) + &arg)) { goto exit; + } return_value = _io_BytesIO_readline_impl(self, arg); exit: @@ -247,8 +249,9 @@ _io_BytesIO_readlines(bytesio *self, PyObject *args) if (!PyArg_UnpackTuple(args, "readlines", 0, 1, - &arg)) + &arg)) { goto exit; + } return_value = _io_BytesIO_readlines_impl(self, arg); exit: @@ -276,14 +279,16 @@ _io_BytesIO_readinto(bytesio *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, "w*:readinto", &buffer)) + if (!PyArg_Parse(arg, "w*:readinto", &buffer)) { goto exit; + } return_value = _io_BytesIO_readinto_impl(self, &buffer); exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -311,8 +316,9 @@ _io_BytesIO_truncate(bytesio *self, PyObject *args) if (!PyArg_UnpackTuple(args, "truncate", 0, 1, - &arg)) + &arg)) { goto exit; + } return_value = _io_BytesIO_truncate_impl(self, arg); exit: @@ -345,8 +351,9 @@ _io_BytesIO_seek(bytesio *self, PyObject *args) int whence = 0; if (!PyArg_ParseTuple(args, "n|i:seek", - &pos, &whence)) + &pos, &whence)) { goto exit; + } return_value = _io_BytesIO_seek_impl(self, pos, whence); exit: @@ -412,11 +419,12 @@ _io_BytesIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) PyObject *initvalue = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:BytesIO", _keywords, - &initvalue)) + &initvalue)) { goto exit; + } return_value = _io_BytesIO___init___impl((bytesio *)self, initvalue); exit: return return_value; } -/*[clinic end generated code: output=60ce2c6272718431 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=3fdb62f3e3b0544d input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/fileio.c.h b/Modules/_io/clinic/fileio.c.h index 10420082ac..038836a2c1 100644 --- a/Modules/_io/clinic/fileio.c.h +++ b/Modules/_io/clinic/fileio.c.h @@ -56,8 +56,9 @@ _io_FileIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) PyObject *opener = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|siO:FileIO", _keywords, - &nameobj, &mode, &closefd, &opener)) + &nameobj, &mode, &closefd, &opener)) { goto exit; + } return_value = _io_FileIO___init___impl((fileio *)self, nameobj, mode, closefd, opener); exit: @@ -154,14 +155,16 @@ _io_FileIO_readinto(fileio *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, "w*:readinto", &buffer)) + if (!PyArg_Parse(arg, "w*:readinto", &buffer)) { goto exit; + } return_value = _io_FileIO_readinto_impl(self, &buffer); exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -210,8 +213,9 @@ _io_FileIO_read(fileio *self, PyObject *args) Py_ssize_t size = -1; if (!PyArg_ParseTuple(args, "|O&:read", - _PyIO_ConvertSsize_t, &size)) + _PyIO_ConvertSsize_t, &size)) { goto exit; + } return_value = _io_FileIO_read_impl(self, size); exit: @@ -240,14 +244,16 @@ _io_FileIO_write(fileio *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer b = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:write", &b)) + if (!PyArg_Parse(arg, "y*:write", &b)) { goto exit; + } return_value = _io_FileIO_write_impl(self, &b); exit: /* Cleanup for b */ - if (b.obj) + if (b.obj) { PyBuffer_Release(&b); + } return return_value; } @@ -280,8 +286,9 @@ _io_FileIO_seek(fileio *self, PyObject *args) int whence = 0; if (!PyArg_ParseTuple(args, "O|i:seek", - &pos, &whence)) + &pos, &whence)) { goto exit; + } return_value = _io_FileIO_seek_impl(self, pos, whence); exit: @@ -333,8 +340,9 @@ _io_FileIO_truncate(fileio *self, PyObject *args) if (!PyArg_UnpackTuple(args, "truncate", 0, 1, - &posobj)) + &posobj)) { goto exit; + } return_value = _io_FileIO_truncate_impl(self, posobj); exit: @@ -364,4 +372,4 @@ _io_FileIO_isatty(fileio *self, PyObject *Py_UNUSED(ignored)) #ifndef _IO_FILEIO_TRUNCATE_METHODDEF #define _IO_FILEIO_TRUNCATE_METHODDEF #endif /* !defined(_IO_FILEIO_TRUNCATE_METHODDEF) */ -/*[clinic end generated code: output=dcbc39b466598492 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=bf4b4bd6b976346d input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/iobase.c.h b/Modules/_io/clinic/iobase.c.h index 9762f11222..edbf73a40b 100644 --- a/Modules/_io/clinic/iobase.c.h +++ b/Modules/_io/clinic/iobase.c.h @@ -186,8 +186,9 @@ _io__IOBase_readline(PyObject *self, PyObject *args) Py_ssize_t limit = -1; if (!PyArg_ParseTuple(args, "|O&:readline", - _PyIO_ConvertSsize_t, &limit)) + _PyIO_ConvertSsize_t, &limit)) { goto exit; + } return_value = _io__IOBase_readline_impl(self, limit); exit: @@ -217,8 +218,9 @@ _io__IOBase_readlines(PyObject *self, PyObject *args) Py_ssize_t hint = -1; if (!PyArg_ParseTuple(args, "|O&:readlines", - _PyIO_ConvertSsize_t, &hint)) + _PyIO_ConvertSsize_t, &hint)) { goto exit; + } return_value = _io__IOBase_readlines_impl(self, hint); exit: @@ -251,8 +253,9 @@ _io__RawIOBase_read(PyObject *self, PyObject *args) Py_ssize_t n = -1; if (!PyArg_ParseTuple(args, "|n:read", - &n)) + &n)) { goto exit; + } return_value = _io__RawIOBase_read_impl(self, n); exit: @@ -276,4 +279,4 @@ _io__RawIOBase_readall(PyObject *self, PyObject *Py_UNUSED(ignored)) { return _io__RawIOBase_readall_impl(self); } -/*[clinic end generated code: output=b874952f5cc248a4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0f53fed928d8e02f input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/stringio.c.h b/Modules/_io/clinic/stringio.c.h index a8e32a3376..ce9f46e879 100644 --- a/Modules/_io/clinic/stringio.c.h +++ b/Modules/_io/clinic/stringio.c.h @@ -61,8 +61,9 @@ _io_StringIO_read(stringio *self, PyObject *args) if (!PyArg_UnpackTuple(args, "read", 0, 1, - &arg)) + &arg)) { goto exit; + } return_value = _io_StringIO_read_impl(self, arg); exit: @@ -91,8 +92,9 @@ _io_StringIO_readline(stringio *self, PyObject *args) if (!PyArg_UnpackTuple(args, "readline", 0, 1, - &arg)) + &arg)) { goto exit; + } return_value = _io_StringIO_readline_impl(self, arg); exit: @@ -123,8 +125,9 @@ _io_StringIO_truncate(stringio *self, PyObject *args) if (!PyArg_UnpackTuple(args, "truncate", 0, 1, - &arg)) + &arg)) { goto exit; + } return_value = _io_StringIO_truncate_impl(self, arg); exit: @@ -157,8 +160,9 @@ _io_StringIO_seek(stringio *self, PyObject *args) int whence = 0; if (!PyArg_ParseTuple(args, "n|i:seek", - &pos, &whence)) + &pos, &whence)) { goto exit; + } return_value = _io_StringIO_seek_impl(self, pos, whence); exit: @@ -222,8 +226,9 @@ _io_StringIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) PyObject *newline_obj = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OO:StringIO", _keywords, - &value, &newline_obj)) + &value, &newline_obj)) { goto exit; + } return_value = _io_StringIO___init___impl((stringio *)self, value, newline_obj); exit: @@ -283,4 +288,4 @@ _io_StringIO_seekable(stringio *self, PyObject *Py_UNUSED(ignored)) { return _io_StringIO_seekable_impl(self); } -/*[clinic end generated code: output=f061cf3a20cd14ed input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0513219581cbe952 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/textio.c.h b/Modules/_io/clinic/textio.c.h index dc7e8c7584..f115326a00 100644 --- a/Modules/_io/clinic/textio.c.h +++ b/Modules/_io/clinic/textio.c.h @@ -30,8 +30,9 @@ _io_IncrementalNewlineDecoder___init__(PyObject *self, PyObject *args, PyObject PyObject *errors = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi|O:IncrementalNewlineDecoder", _keywords, - &decoder, &translate, &errors)) + &decoder, &translate, &errors)) { goto exit; + } return_value = _io_IncrementalNewlineDecoder___init___impl((nldecoder_object *)self, decoder, translate, errors); exit: @@ -59,8 +60,9 @@ _io_IncrementalNewlineDecoder_decode(nldecoder_object *self, PyObject *args, PyO int final = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|i:decode", _keywords, - &input, &final)) + &input, &final)) { goto exit; + } return_value = _io_IncrementalNewlineDecoder_decode_impl(self, input, final); exit: @@ -162,8 +164,9 @@ _io_TextIOWrapper___init__(PyObject *self, PyObject *args, PyObject *kwargs) int write_through = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|zzzii:TextIOWrapper", _keywords, - &buffer, &encoding, &errors, &newline, &line_buffering, &write_through)) + &buffer, &encoding, &errors, &newline, &line_buffering, &write_through)) { goto exit; + } return_value = _io_TextIOWrapper___init___impl((textio *)self, buffer, encoding, errors, newline, line_buffering, write_through); exit: @@ -204,8 +207,9 @@ _io_TextIOWrapper_write(textio *self, PyObject *arg) PyObject *return_value = NULL; PyObject *text; - if (!PyArg_Parse(arg, "U:write", &text)) + if (!PyArg_Parse(arg, "U:write", &text)) { goto exit; + } return_value = _io_TextIOWrapper_write_impl(self, text); exit: @@ -230,8 +234,9 @@ _io_TextIOWrapper_read(textio *self, PyObject *args) Py_ssize_t n = -1; if (!PyArg_ParseTuple(args, "|O&:read", - _PyIO_ConvertSsize_t, &n)) + _PyIO_ConvertSsize_t, &n)) { goto exit; + } return_value = _io_TextIOWrapper_read_impl(self, n); exit: @@ -256,8 +261,9 @@ _io_TextIOWrapper_readline(textio *self, PyObject *args) Py_ssize_t size = -1; if (!PyArg_ParseTuple(args, "|n:readline", - &size)) + &size)) { goto exit; + } return_value = _io_TextIOWrapper_readline_impl(self, size); exit: @@ -283,8 +289,9 @@ _io_TextIOWrapper_seek(textio *self, PyObject *args) int whence = 0; if (!PyArg_ParseTuple(args, "O|i:seek", - &cookieObj, &whence)) + &cookieObj, &whence)) { goto exit; + } return_value = _io_TextIOWrapper_seek_impl(self, cookieObj, whence); exit: @@ -327,8 +334,9 @@ _io_TextIOWrapper_truncate(textio *self, PyObject *args) if (!PyArg_UnpackTuple(args, "truncate", 0, 1, - &pos)) + &pos)) { goto exit; + } return_value = _io_TextIOWrapper_truncate_impl(self, pos); exit: @@ -453,4 +461,4 @@ _io_TextIOWrapper_close(textio *self, PyObject *Py_UNUSED(ignored)) { return _io_TextIOWrapper_close_impl(self); } -/*[clinic end generated code: output=690608f85aab8ba5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=31a39bbbe07ae4e7 input=a9049054013a1b77]*/ diff --git a/Modules/_winapi.c b/Modules/_winapi.c index c4d4264226..2396fe29e6 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -175,7 +175,7 @@ class HANDLE_return_converter(CReturnConverter): self.declare(data) self.err_occurred_if("_return_value == INVALID_HANDLE_VALUE", data) data.return_conversion.append( - 'if (_return_value == NULL)\n Py_RETURN_NONE;\n') + 'if (_return_value == NULL) {\n Py_RETURN_NONE;\n}\n') data.return_conversion.append( 'return_value = HANDLE_TO_PYNUM(_return_value);\n') @@ -188,7 +188,7 @@ class DWORD_return_converter(CReturnConverter): data.return_conversion.append( 'return_value = Py_BuildValue("k", _return_value);\n') [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=374076979596ebba]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=94819e72d2c6d558]*/ #include "clinic/_winapi.c.h" diff --git a/Modules/cjkcodecs/clinic/multibytecodec.c.h b/Modules/cjkcodecs/clinic/multibytecodec.c.h index 8a47ff88a6..0d8a3e0e0d 100644 --- a/Modules/cjkcodecs/clinic/multibytecodec.c.h +++ b/Modules/cjkcodecs/clinic/multibytecodec.c.h @@ -30,8 +30,9 @@ _multibytecodec_MultibyteCodec_encode(MultibyteCodecObject *self, PyObject *args const char *errors = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|z:encode", _keywords, - &input, &errors)) + &input, &errors)) { goto exit; + } return_value = _multibytecodec_MultibyteCodec_encode_impl(self, input, errors); exit: @@ -66,14 +67,16 @@ _multibytecodec_MultibyteCodec_decode(MultibyteCodecObject *self, PyObject *args const char *errors = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|z:decode", _keywords, - &input, &errors)) + &input, &errors)) { goto exit; + } return_value = _multibytecodec_MultibyteCodec_decode_impl(self, &input, errors); exit: /* Cleanup for input */ - if (input.obj) + if (input.obj) { PyBuffer_Release(&input); + } return return_value; } @@ -100,8 +103,9 @@ _multibytecodec_MultibyteIncrementalEncoder_encode(MultibyteIncrementalEncoderOb int final = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|i:encode", _keywords, - &input, &final)) + &input, &final)) { goto exit; + } return_value = _multibytecodec_MultibyteIncrementalEncoder_encode_impl(self, input, final); exit: @@ -147,14 +151,16 @@ _multibytecodec_MultibyteIncrementalDecoder_decode(MultibyteIncrementalDecoderOb int final = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|i:decode", _keywords, - &input, &final)) + &input, &final)) { goto exit; + } return_value = _multibytecodec_MultibyteIncrementalDecoder_decode_impl(self, &input, final); exit: /* Cleanup for input */ - if (input.obj) + if (input.obj) { PyBuffer_Release(&input); + } return return_value; } @@ -196,8 +202,9 @@ _multibytecodec_MultibyteStreamReader_read(MultibyteStreamReaderObject *self, Py if (!PyArg_UnpackTuple(args, "read", 0, 1, - &sizeobj)) + &sizeobj)) { goto exit; + } return_value = _multibytecodec_MultibyteStreamReader_read_impl(self, sizeobj); exit: @@ -224,8 +231,9 @@ _multibytecodec_MultibyteStreamReader_readline(MultibyteStreamReaderObject *self if (!PyArg_UnpackTuple(args, "readline", 0, 1, - &sizeobj)) + &sizeobj)) { goto exit; + } return_value = _multibytecodec_MultibyteStreamReader_readline_impl(self, sizeobj); exit: @@ -252,8 +260,9 @@ _multibytecodec_MultibyteStreamReader_readlines(MultibyteStreamReaderObject *sel if (!PyArg_UnpackTuple(args, "readlines", 0, 1, - &sizehintobj)) + &sizehintobj)) { goto exit; + } return_value = _multibytecodec_MultibyteStreamReader_readlines_impl(self, sizehintobj); exit: @@ -317,4 +326,4 @@ PyDoc_STRVAR(_multibytecodec___create_codec__doc__, #define _MULTIBYTECODEC___CREATE_CODEC_METHODDEF \ {"__create_codec", (PyCFunction)_multibytecodec___create_codec, METH_O, _multibytecodec___create_codec__doc__}, -/*[clinic end generated code: output=eebb21e18c3043d1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f837bc56b2fa2a4e input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_bz2module.c.h b/Modules/clinic/_bz2module.c.h index 3ed8303e95..9451fd3b15 100644 --- a/Modules/clinic/_bz2module.c.h +++ b/Modules/clinic/_bz2module.c.h @@ -25,14 +25,16 @@ _bz2_BZ2Compressor_compress(BZ2Compressor *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:compress", &data)) + if (!PyArg_Parse(arg, "y*:compress", &data)) { goto exit; + } return_value = _bz2_BZ2Compressor_compress_impl(self, &data); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -80,11 +82,13 @@ _bz2_BZ2Compressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) int compresslevel = 9; if ((Py_TYPE(self) == &BZ2Compressor_Type) && - !_PyArg_NoKeywords("BZ2Compressor", kwargs)) + !_PyArg_NoKeywords("BZ2Compressor", kwargs)) { goto exit; + } if (!PyArg_ParseTuple(args, "|i:BZ2Compressor", - &compresslevel)) + &compresslevel)) { goto exit; + } return_value = _bz2_BZ2Compressor___init___impl((BZ2Compressor *)self, compresslevel); exit: @@ -126,14 +130,16 @@ _bz2_BZ2Decompressor_decompress(BZ2Decompressor *self, PyObject *args, PyObject Py_ssize_t max_length = -1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|n:decompress", _keywords, - &data, &max_length)) + &data, &max_length)) { goto exit; + } return_value = _bz2_BZ2Decompressor_decompress_impl(self, &data, max_length); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -155,14 +161,16 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) int return_value = -1; if ((Py_TYPE(self) == &BZ2Decompressor_Type) && - !_PyArg_NoPositional("BZ2Decompressor", args)) + !_PyArg_NoPositional("BZ2Decompressor", args)) { goto exit; + } if ((Py_TYPE(self) == &BZ2Decompressor_Type) && - !_PyArg_NoKeywords("BZ2Decompressor", kwargs)) + !_PyArg_NoKeywords("BZ2Decompressor", kwargs)) { goto exit; + } return_value = _bz2_BZ2Decompressor___init___impl((BZ2Decompressor *)self); exit: return return_value; } -/*[clinic end generated code: output=fef29b76b3314fc7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=71be22f38224fe84 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index 29f46bbb04..a7ca79e1bf 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -33,8 +33,9 @@ _codecs_lookup(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; const char *encoding; - if (!PyArg_Parse(arg, "s:lookup", &encoding)) + if (!PyArg_Parse(arg, "s:lookup", &encoding)) { goto exit; + } return_value = _codecs_lookup_impl(module, encoding); exit: @@ -70,8 +71,9 @@ _codecs_encode(PyModuleDef *module, PyObject *args, PyObject *kwargs) const char *errors = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:encode", _keywords, - &obj, &encoding, &errors)) + &obj, &encoding, &errors)) { goto exit; + } return_value = _codecs_encode_impl(module, obj, encoding, errors); exit: @@ -107,8 +109,9 @@ _codecs_decode(PyModuleDef *module, PyObject *args, PyObject *kwargs) const char *errors = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:decode", _keywords, - &obj, &encoding, &errors)) + &obj, &encoding, &errors)) { goto exit; + } return_value = _codecs_decode_impl(module, obj, encoding, errors); exit: @@ -133,8 +136,9 @@ _codecs__forget_codec(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; const char *encoding; - if (!PyArg_Parse(arg, "s:_forget_codec", &encoding)) + if (!PyArg_Parse(arg, "s:_forget_codec", &encoding)) { goto exit; + } return_value = _codecs__forget_codec_impl(module, encoding); exit: @@ -161,14 +165,16 @@ _codecs_escape_decode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "s*|z:escape_decode", - &data, &errors)) + &data, &errors)) { goto exit; + } return_value = _codecs_escape_decode_impl(module, &data, errors); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -193,8 +199,9 @@ _codecs_escape_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "O!|z:escape_encode", - &PyBytes_Type, &data, &errors)) + &PyBytes_Type, &data, &errors)) { goto exit; + } return_value = _codecs_escape_encode_impl(module, data, errors); exit: @@ -221,8 +228,9 @@ _codecs_unicode_internal_decode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "O|z:unicode_internal_decode", - &obj, &errors)) + &obj, &errors)) { goto exit; + } return_value = _codecs_unicode_internal_decode_impl(module, obj, errors); exit: @@ -250,14 +258,16 @@ _codecs_utf_7_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zi:utf_7_decode", - &data, &errors, &final)) + &data, &errors, &final)) { goto exit; + } return_value = _codecs_utf_7_decode_impl(module, &data, errors, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -283,14 +293,16 @@ _codecs_utf_8_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zi:utf_8_decode", - &data, &errors, &final)) + &data, &errors, &final)) { goto exit; + } return_value = _codecs_utf_8_decode_impl(module, &data, errors, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -316,14 +328,16 @@ _codecs_utf_16_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zi:utf_16_decode", - &data, &errors, &final)) + &data, &errors, &final)) { goto exit; + } return_value = _codecs_utf_16_decode_impl(module, &data, errors, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -349,14 +363,16 @@ _codecs_utf_16_le_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zi:utf_16_le_decode", - &data, &errors, &final)) + &data, &errors, &final)) { goto exit; + } return_value = _codecs_utf_16_le_decode_impl(module, &data, errors, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -382,14 +398,16 @@ _codecs_utf_16_be_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zi:utf_16_be_decode", - &data, &errors, &final)) + &data, &errors, &final)) { goto exit; + } return_value = _codecs_utf_16_be_decode_impl(module, &data, errors, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -417,14 +435,16 @@ _codecs_utf_16_ex_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zii:utf_16_ex_decode", - &data, &errors, &byteorder, &final)) + &data, &errors, &byteorder, &final)) { goto exit; + } return_value = _codecs_utf_16_ex_decode_impl(module, &data, errors, byteorder, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -450,14 +470,16 @@ _codecs_utf_32_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zi:utf_32_decode", - &data, &errors, &final)) + &data, &errors, &final)) { goto exit; + } return_value = _codecs_utf_32_decode_impl(module, &data, errors, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -483,14 +505,16 @@ _codecs_utf_32_le_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zi:utf_32_le_decode", - &data, &errors, &final)) + &data, &errors, &final)) { goto exit; + } return_value = _codecs_utf_32_le_decode_impl(module, &data, errors, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -516,14 +540,16 @@ _codecs_utf_32_be_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zi:utf_32_be_decode", - &data, &errors, &final)) + &data, &errors, &final)) { goto exit; + } return_value = _codecs_utf_32_be_decode_impl(module, &data, errors, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -551,14 +577,16 @@ _codecs_utf_32_ex_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zii:utf_32_ex_decode", - &data, &errors, &byteorder, &final)) + &data, &errors, &byteorder, &final)) { goto exit; + } return_value = _codecs_utf_32_ex_decode_impl(module, &data, errors, byteorder, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -583,14 +611,16 @@ _codecs_unicode_escape_decode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "s*|z:unicode_escape_decode", - &data, &errors)) + &data, &errors)) { goto exit; + } return_value = _codecs_unicode_escape_decode_impl(module, &data, errors); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -615,14 +645,16 @@ _codecs_raw_unicode_escape_decode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "s*|z:raw_unicode_escape_decode", - &data, &errors)) + &data, &errors)) { goto exit; + } return_value = _codecs_raw_unicode_escape_decode_impl(module, &data, errors); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -647,14 +679,16 @@ _codecs_latin_1_decode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "y*|z:latin_1_decode", - &data, &errors)) + &data, &errors)) { goto exit; + } return_value = _codecs_latin_1_decode_impl(module, &data, errors); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -679,14 +713,16 @@ _codecs_ascii_decode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "y*|z:ascii_decode", - &data, &errors)) + &data, &errors)) { goto exit; + } return_value = _codecs_ascii_decode_impl(module, &data, errors); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -712,14 +748,16 @@ _codecs_charmap_decode(PyModuleDef *module, PyObject *args) PyObject *mapping = NULL; if (!PyArg_ParseTuple(args, "y*|zO:charmap_decode", - &data, &errors, &mapping)) + &data, &errors, &mapping)) { goto exit; + } return_value = _codecs_charmap_decode_impl(module, &data, errors, mapping); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -747,14 +785,16 @@ _codecs_mbcs_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "y*|zi:mbcs_decode", - &data, &errors, &final)) + &data, &errors, &final)) { goto exit; + } return_value = _codecs_mbcs_decode_impl(module, &data, errors, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -785,14 +825,16 @@ _codecs_code_page_decode(PyModuleDef *module, PyObject *args) int final = 0; if (!PyArg_ParseTuple(args, "iy*|zi:code_page_decode", - &codepage, &data, &errors, &final)) + &codepage, &data, &errors, &final)) { goto exit; + } return_value = _codecs_code_page_decode_impl(module, codepage, &data, errors, final); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -819,14 +861,16 @@ _codecs_readbuffer_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "s*|z:readbuffer_encode", - &data, &errors)) + &data, &errors)) { goto exit; + } return_value = _codecs_readbuffer_encode_impl(module, &data, errors); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -851,8 +895,9 @@ _codecs_unicode_internal_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "O|z:unicode_internal_encode", - &obj, &errors)) + &obj, &errors)) { goto exit; + } return_value = _codecs_unicode_internal_encode_impl(module, obj, errors); exit: @@ -879,8 +924,9 @@ _codecs_utf_7_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:utf_7_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_utf_7_encode_impl(module, str, errors); exit: @@ -907,8 +953,9 @@ _codecs_utf_8_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:utf_8_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_utf_8_encode_impl(module, str, errors); exit: @@ -936,8 +983,9 @@ _codecs_utf_16_encode(PyModuleDef *module, PyObject *args) int byteorder = 0; if (!PyArg_ParseTuple(args, "U|zi:utf_16_encode", - &str, &errors, &byteorder)) + &str, &errors, &byteorder)) { goto exit; + } return_value = _codecs_utf_16_encode_impl(module, str, errors, byteorder); exit: @@ -964,8 +1012,9 @@ _codecs_utf_16_le_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:utf_16_le_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_utf_16_le_encode_impl(module, str, errors); exit: @@ -992,8 +1041,9 @@ _codecs_utf_16_be_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:utf_16_be_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_utf_16_be_encode_impl(module, str, errors); exit: @@ -1021,8 +1071,9 @@ _codecs_utf_32_encode(PyModuleDef *module, PyObject *args) int byteorder = 0; if (!PyArg_ParseTuple(args, "U|zi:utf_32_encode", - &str, &errors, &byteorder)) + &str, &errors, &byteorder)) { goto exit; + } return_value = _codecs_utf_32_encode_impl(module, str, errors, byteorder); exit: @@ -1049,8 +1100,9 @@ _codecs_utf_32_le_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:utf_32_le_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_utf_32_le_encode_impl(module, str, errors); exit: @@ -1077,8 +1129,9 @@ _codecs_utf_32_be_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:utf_32_be_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_utf_32_be_encode_impl(module, str, errors); exit: @@ -1105,8 +1158,9 @@ _codecs_unicode_escape_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:unicode_escape_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_unicode_escape_encode_impl(module, str, errors); exit: @@ -1133,8 +1187,9 @@ _codecs_raw_unicode_escape_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:raw_unicode_escape_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_raw_unicode_escape_encode_impl(module, str, errors); exit: @@ -1161,8 +1216,9 @@ _codecs_latin_1_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:latin_1_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_latin_1_encode_impl(module, str, errors); exit: @@ -1189,8 +1245,9 @@ _codecs_ascii_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:ascii_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_ascii_encode_impl(module, str, errors); exit: @@ -1218,8 +1275,9 @@ _codecs_charmap_encode(PyModuleDef *module, PyObject *args) PyObject *mapping = NULL; if (!PyArg_ParseTuple(args, "U|zO:charmap_encode", - &str, &errors, &mapping)) + &str, &errors, &mapping)) { goto exit; + } return_value = _codecs_charmap_encode_impl(module, str, errors, mapping); exit: @@ -1243,8 +1301,9 @@ _codecs_charmap_build(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *map; - if (!PyArg_Parse(arg, "U:charmap_build", &map)) + if (!PyArg_Parse(arg, "U:charmap_build", &map)) { goto exit; + } return_value = _codecs_charmap_build_impl(module, map); exit: @@ -1273,8 +1332,9 @@ _codecs_mbcs_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "U|z:mbcs_encode", - &str, &errors)) + &str, &errors)) { goto exit; + } return_value = _codecs_mbcs_encode_impl(module, str, errors); exit: @@ -1306,8 +1366,9 @@ _codecs_code_page_encode(PyModuleDef *module, PyObject *args) const char *errors = NULL; if (!PyArg_ParseTuple(args, "iU|z:code_page_encode", - &code_page, &str, &errors)) + &code_page, &str, &errors)) { goto exit; + } return_value = _codecs_code_page_encode_impl(module, code_page, str, errors); exit: @@ -1341,8 +1402,9 @@ _codecs_register_error(PyModuleDef *module, PyObject *args) PyObject *handler; if (!PyArg_ParseTuple(args, "sO:register_error", - &errors, &handler)) + &errors, &handler)) { goto exit; + } return_value = _codecs_register_error_impl(module, errors, handler); exit: @@ -1370,8 +1432,9 @@ _codecs_lookup_error(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; const char *name; - if (!PyArg_Parse(arg, "s:lookup_error", &name)) + if (!PyArg_Parse(arg, "s:lookup_error", &name)) { goto exit; + } return_value = _codecs_lookup_error_impl(module, name); exit: @@ -1393,4 +1456,4 @@ exit: #ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF #define _CODECS_CODE_PAGE_ENCODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ -/*[clinic end generated code: output=04007a13c8387689 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=120320fe2ac32085 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_cryptmodule.c.h b/Modules/clinic/_cryptmodule.c.h index b8ec31e003..664cba8dfb 100644 --- a/Modules/clinic/_cryptmodule.c.h +++ b/Modules/clinic/_cryptmodule.c.h @@ -27,11 +27,12 @@ crypt_crypt(PyModuleDef *module, PyObject *args) const char *salt; if (!PyArg_ParseTuple(args, "ss:crypt", - &word, &salt)) + &word, &salt)) { goto exit; + } return_value = crypt_crypt_impl(module, word, salt); exit: return return_value; } -/*[clinic end generated code: output=22c295c9bce018c4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6977cf9917d9a684 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_cursesmodule.c.h b/Modules/clinic/_cursesmodule.c.h index 5e11742499..62ff1c8ae1 100644 --- a/Modules/clinic/_cursesmodule.c.h +++ b/Modules/clinic/_cursesmodule.c.h @@ -40,22 +40,26 @@ curses_window_addch(PyCursesWindowObject *self, PyObject *args) switch (PyTuple_GET_SIZE(args)) { case 1: - if (!PyArg_ParseTuple(args, "O:addch", &ch)) + if (!PyArg_ParseTuple(args, "O:addch", &ch)) { goto exit; + } break; case 2: - if (!PyArg_ParseTuple(args, "Ol:addch", &ch, &attr)) + if (!PyArg_ParseTuple(args, "Ol:addch", &ch, &attr)) { goto exit; + } group_right_1 = 1; break; case 3: - if (!PyArg_ParseTuple(args, "iiO:addch", &y, &x, &ch)) + if (!PyArg_ParseTuple(args, "iiO:addch", &y, &x, &ch)) { goto exit; + } group_left_1 = 1; break; case 4: - if (!PyArg_ParseTuple(args, "iiOl:addch", &y, &x, &ch, &attr)) + if (!PyArg_ParseTuple(args, "iiOl:addch", &y, &x, &ch, &attr)) { goto exit; + } group_right_1 = 1; group_left_1 = 1; break; @@ -68,4 +72,4 @@ curses_window_addch(PyCursesWindowObject *self, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=982b1e709577f3ec input=a9049054013a1b77]*/ +/*[clinic end generated code: output=13ffc5f8d79cbfbf input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_datetimemodule.c.h b/Modules/clinic/_datetimemodule.c.h index 688c903e2f..cf9860b574 100644 --- a/Modules/clinic/_datetimemodule.c.h +++ b/Modules/clinic/_datetimemodule.c.h @@ -27,11 +27,12 @@ datetime_datetime_now(PyTypeObject *type, PyObject *args, PyObject *kwargs) PyObject *tz = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:now", _keywords, - &tz)) + &tz)) { goto exit; + } return_value = datetime_datetime_now_impl(type, tz); exit: return return_value; } -/*[clinic end generated code: output=7f45c670d6e4953a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a82e6bd057a5dab9 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_dbmmodule.c.h b/Modules/clinic/_dbmmodule.c.h index 8474e02828..b31da71eb9 100644 --- a/Modules/clinic/_dbmmodule.c.h +++ b/Modules/clinic/_dbmmodule.c.h @@ -60,8 +60,9 @@ _dbm_dbm_get(dbmobject *self, PyObject *args) PyObject *default_value = NULL; if (!PyArg_ParseTuple(args, "s#|O:get", - &key, &key_length, &default_value)) + &key, &key_length, &default_value)) { goto exit; + } return_value = _dbm_dbm_get_impl(self, key, key_length, default_value); exit: @@ -93,8 +94,9 @@ _dbm_dbm_setdefault(dbmobject *self, PyObject *args) PyObject *default_value = NULL; if (!PyArg_ParseTuple(args, "s#|O:setdefault", - &key, &key_length, &default_value)) + &key, &key_length, &default_value)) { goto exit; + } return_value = _dbm_dbm_setdefault_impl(self, key, key_length, default_value); exit: @@ -131,11 +133,12 @@ dbmopen(PyModuleDef *module, PyObject *args) int mode = 438; if (!PyArg_ParseTuple(args, "s|si:open", - &filename, &flags, &mode)) + &filename, &flags, &mode)) { goto exit; + } return_value = dbmopen_impl(module, filename, flags, mode); exit: return return_value; } -/*[clinic end generated code: output=1d92e81b28c558d0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=97f8b6f542973b71 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_elementtree.c.h b/Modules/clinic/_elementtree.c.h index 92e98cf0a2..266b92f85f 100644 --- a/Modules/clinic/_elementtree.c.h +++ b/Modules/clinic/_elementtree.c.h @@ -19,8 +19,9 @@ _elementtree_Element_append(ElementObject *self, PyObject *arg) PyObject *return_value = NULL; PyObject *subelement; - if (!PyArg_Parse(arg, "O!:append", &Element_Type, &subelement)) + if (!PyArg_Parse(arg, "O!:append", &Element_Type, &subelement)) { goto exit; + } return_value = _elementtree_Element_append_impl(self, subelement); exit: @@ -87,8 +88,9 @@ _elementtree_Element___sizeof__(ElementObject *self, PyObject *Py_UNUSED(ignored Py_ssize_t _return_value; _return_value = _elementtree_Element___sizeof___impl(self); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromSsize_t(_return_value); exit: @@ -149,8 +151,9 @@ _elementtree_Element_find(ElementObject *self, PyObject *args, PyObject *kwargs) PyObject *namespaces = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:find", _keywords, - &path, &namespaces)) + &path, &namespaces)) { goto exit; + } return_value = _elementtree_Element_find_impl(self, path, namespaces); exit: @@ -180,8 +183,9 @@ _elementtree_Element_findtext(ElementObject *self, PyObject *args, PyObject *kwa PyObject *namespaces = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OO:findtext", _keywords, - &path, &default_value, &namespaces)) + &path, &default_value, &namespaces)) { goto exit; + } return_value = _elementtree_Element_findtext_impl(self, path, default_value, namespaces); exit: @@ -209,8 +213,9 @@ _elementtree_Element_findall(ElementObject *self, PyObject *args, PyObject *kwar PyObject *namespaces = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:findall", _keywords, - &path, &namespaces)) + &path, &namespaces)) { goto exit; + } return_value = _elementtree_Element_findall_impl(self, path, namespaces); exit: @@ -238,8 +243,9 @@ _elementtree_Element_iterfind(ElementObject *self, PyObject *args, PyObject *kwa PyObject *namespaces = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:iterfind", _keywords, - &path, &namespaces)) + &path, &namespaces)) { goto exit; + } return_value = _elementtree_Element_iterfind_impl(self, path, namespaces); exit: @@ -267,8 +273,9 @@ _elementtree_Element_get(ElementObject *self, PyObject *args, PyObject *kwargs) PyObject *default_value = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:get", _keywords, - &key, &default_value)) + &key, &default_value)) { goto exit; + } return_value = _elementtree_Element_get_impl(self, key, default_value); exit: @@ -311,8 +318,9 @@ _elementtree_Element_iter(ElementObject *self, PyObject *args, PyObject *kwargs) PyObject *tag = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:iter", _keywords, - &tag)) + &tag)) { goto exit; + } return_value = _elementtree_Element_iter_impl(self, tag); exit: @@ -356,8 +364,9 @@ _elementtree_Element_insert(ElementObject *self, PyObject *args) PyObject *subelement; if (!PyArg_ParseTuple(args, "nO!:insert", - &index, &Element_Type, &subelement)) + &index, &Element_Type, &subelement)) { goto exit; + } return_value = _elementtree_Element_insert_impl(self, index, subelement); exit: @@ -419,8 +428,9 @@ _elementtree_Element_makeelement(ElementObject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "makeelement", 2, 2, - &tag, &attrib)) + &tag, &attrib)) { goto exit; + } return_value = _elementtree_Element_makeelement_impl(self, tag, attrib); exit: @@ -444,8 +454,9 @@ _elementtree_Element_remove(ElementObject *self, PyObject *arg) PyObject *return_value = NULL; PyObject *subelement; - if (!PyArg_Parse(arg, "O!:remove", &Element_Type, &subelement)) + if (!PyArg_Parse(arg, "O!:remove", &Element_Type, &subelement)) { goto exit; + } return_value = _elementtree_Element_remove_impl(self, subelement); exit: @@ -473,8 +484,9 @@ _elementtree_Element_set(ElementObject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "set", 2, 2, - &key, &value)) + &key, &value)) { goto exit; + } return_value = _elementtree_Element_set_impl(self, key, value); exit: @@ -493,8 +505,9 @@ _elementtree_TreeBuilder___init__(PyObject *self, PyObject *args, PyObject *kwar PyObject *element_factory = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:TreeBuilder", _keywords, - &element_factory)) + &element_factory)) { goto exit; + } return_value = _elementtree_TreeBuilder___init___impl((TreeBuilderObject *)self, element_factory); exit: @@ -555,8 +568,9 @@ _elementtree_TreeBuilder_start(TreeBuilderObject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "start", 1, 2, - &tag, &attrs)) + &tag, &attrs)) { goto exit; + } return_value = _elementtree_TreeBuilder_start_impl(self, tag, attrs); exit: @@ -577,8 +591,9 @@ _elementtree_XMLParser___init__(PyObject *self, PyObject *args, PyObject *kwargs const char *encoding = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OOz:XMLParser", _keywords, - &html, &target, &encoding)) + &html, &target, &encoding)) { goto exit; + } return_value = _elementtree_XMLParser___init___impl((XMLParserObject *)self, html, target, encoding); exit: @@ -640,8 +655,9 @@ _elementtree_XMLParser_doctype(XMLParserObject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "doctype", 3, 3, - &name, &pubid, &system)) + &name, &pubid, &system)) { goto exit; + } return_value = _elementtree_XMLParser_doctype_impl(self, name, pubid, system); exit: @@ -670,11 +686,12 @@ _elementtree_XMLParser__setevents(XMLParserObject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "_setevents", 1, 2, - &events_queue, &events_to_report)) + &events_queue, &events_to_report)) { goto exit; + } return_value = _elementtree_XMLParser__setevents_impl(self, events_queue, events_to_report); exit: return return_value; } -/*[clinic end generated code: output=19d94e2d2726d3aa input=a9049054013a1b77]*/ +/*[clinic end generated code: output=491eb5718c1ae64b input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_gdbmmodule.c.h b/Modules/clinic/_gdbmmodule.c.h index 110ad9a539..23182c8712 100644 --- a/Modules/clinic/_gdbmmodule.c.h +++ b/Modules/clinic/_gdbmmodule.c.h @@ -23,8 +23,9 @@ _gdbm_gdbm_get(dbmobject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "get", 1, 2, - &key, &default_value)) + &key, &default_value)) { goto exit; + } return_value = _gdbm_gdbm_get_impl(self, key, default_value); exit: @@ -53,8 +54,9 @@ _gdbm_gdbm_setdefault(dbmobject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "setdefault", 1, 2, - &key, &default_value)) + &key, &default_value)) { goto exit; + } return_value = _gdbm_gdbm_setdefault_impl(self, key, default_value); exit: @@ -147,8 +149,9 @@ _gdbm_gdbm_nextkey(dbmobject *self, PyObject *arg) const char *key; Py_ssize_clean_t key_length; - if (!PyArg_Parse(arg, "s#:nextkey", &key, &key_length)) + if (!PyArg_Parse(arg, "s#:nextkey", &key, &key_length)) { goto exit; + } return_value = _gdbm_gdbm_nextkey_impl(self, key, key_length); exit: @@ -243,11 +246,12 @@ dbmopen(PyModuleDef *module, PyObject *args) int mode = 438; if (!PyArg_ParseTuple(args, "s|si:open", - &name, &flags, &mode)) + &name, &flags, &mode)) { goto exit; + } return_value = dbmopen_impl(module, name, flags, mode); exit: return return_value; } -/*[clinic end generated code: output=d3d8d871bcccb68a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=418849fb5dbe69a5 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h index 59d9d51026..b78dbcd06c 100644 --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -25,14 +25,16 @@ _lzma_LZMACompressor_compress(Compressor *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:compress", &data)) + if (!PyArg_Parse(arg, "y*:compress", &data)) { goto exit; + } return_value = _lzma_LZMACompressor_compress_impl(self, &data); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -94,14 +96,16 @@ _lzma_LZMADecompressor_decompress(Decompressor *self, PyObject *args, PyObject * Py_ssize_t max_length = -1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|n:decompress", _keywords, - &data, &max_length)) + &data, &max_length)) { goto exit; + } return_value = _lzma_LZMADecompressor_decompress_impl(self, &data, max_length); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -143,8 +147,9 @@ _lzma_LZMADecompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs PyObject *filters = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iOO:LZMADecompressor", _keywords, - &format, &memlimit, &filters)) + &format, &memlimit, &filters)) { goto exit; + } return_value = _lzma_LZMADecompressor___init___impl((Decompressor *)self, format, memlimit, filters); exit: @@ -171,8 +176,9 @@ _lzma_is_check_supported(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int check_id; - if (!PyArg_Parse(arg, "i:is_check_supported", &check_id)) + if (!PyArg_Parse(arg, "i:is_check_supported", &check_id)) { goto exit; + } return_value = _lzma_is_check_supported_impl(module, check_id); exit: @@ -199,8 +205,9 @@ _lzma__encode_filter_properties(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; lzma_filter filter = {LZMA_VLI_UNKNOWN, NULL}; - if (!PyArg_Parse(arg, "O&:_encode_filter_properties", lzma_filter_converter, &filter)) + if (!PyArg_Parse(arg, "O&:_encode_filter_properties", lzma_filter_converter, &filter)) { goto exit; + } return_value = _lzma__encode_filter_properties_impl(module, filter); exit: @@ -234,15 +241,17 @@ _lzma__decode_filter_properties(PyModuleDef *module, PyObject *args) Py_buffer encoded_props = {NULL, NULL}; if (!PyArg_ParseTuple(args, "O&y*:_decode_filter_properties", - lzma_vli_converter, &filter_id, &encoded_props)) + lzma_vli_converter, &filter_id, &encoded_props)) { goto exit; + } return_value = _lzma__decode_filter_properties_impl(module, filter_id, &encoded_props); exit: /* Cleanup for encoded_props */ - if (encoded_props.obj) + if (encoded_props.obj) { PyBuffer_Release(&encoded_props); + } return return_value; } -/*[clinic end generated code: output=2d3e0842be3d3fe1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=804aed7d196ba52e input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_opcode.c.h b/Modules/clinic/_opcode.c.h index 196a2eefd3..68652b0388 100644 --- a/Modules/clinic/_opcode.c.h +++ b/Modules/clinic/_opcode.c.h @@ -23,14 +23,16 @@ _opcode_stack_effect(PyModuleDef *module, PyObject *args) int _return_value; if (!PyArg_ParseTuple(args, "i|O:stack_effect", - &opcode, &oparg)) + &opcode, &oparg)) { goto exit; + } _return_value = _opcode_stack_effect_impl(module, opcode, oparg); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: return return_value; } -/*[clinic end generated code: output=8ee7cb735705e8b3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5bd7c1c113e6526a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h index ab4d205620..11299e97e6 100644 --- a/Modules/clinic/_pickle.c.h +++ b/Modules/clinic/_pickle.c.h @@ -53,8 +53,9 @@ _pickle_Pickler___sizeof__(PicklerObject *self, PyObject *Py_UNUSED(ignored)) Py_ssize_t _return_value; _return_value = _pickle_Pickler___sizeof___impl(self); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromSsize_t(_return_value); exit: @@ -98,8 +99,9 @@ _pickle_Pickler___init__(PyObject *self, PyObject *args, PyObject *kwargs) int fix_imports = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Op:Pickler", _keywords, - &file, &protocol, &fix_imports)) + &file, &protocol, &fix_imports)) { goto exit; + } return_value = _pickle_Pickler___init___impl((PicklerObject *)self, file, protocol, fix_imports); exit: @@ -212,8 +214,9 @@ _pickle_Unpickler_find_class(UnpicklerObject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "find_class", 2, 2, - &module_name, &global_name)) + &module_name, &global_name)) { goto exit; + } return_value = _pickle_Unpickler_find_class_impl(self, module_name, global_name); exit: @@ -239,8 +242,9 @@ _pickle_Unpickler___sizeof__(UnpicklerObject *self, PyObject *Py_UNUSED(ignored) Py_ssize_t _return_value; _return_value = _pickle_Unpickler___sizeof___impl(self); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromSsize_t(_return_value); exit: @@ -288,8 +292,9 @@ _pickle_Unpickler___init__(PyObject *self, PyObject *args, PyObject *kwargs) const char *errors = "strict"; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|$pss:Unpickler", _keywords, - &file, &fix_imports, &encoding, &errors)) + &file, &fix_imports, &encoding, &errors)) { goto exit; + } return_value = _pickle_Unpickler___init___impl((UnpicklerObject *)self, file, fix_imports, encoding, errors); exit: @@ -394,8 +399,9 @@ _pickle_dump(PyModuleDef *module, PyObject *args, PyObject *kwargs) int fix_imports = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|O$p:dump", _keywords, - &obj, &file, &protocol, &fix_imports)) + &obj, &file, &protocol, &fix_imports)) { goto exit; + } return_value = _pickle_dump_impl(module, obj, file, protocol, fix_imports); exit: @@ -437,8 +443,9 @@ _pickle_dumps(PyModuleDef *module, PyObject *args, PyObject *kwargs) int fix_imports = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O$p:dumps", _keywords, - &obj, &protocol, &fix_imports)) + &obj, &protocol, &fix_imports)) { goto exit; + } return_value = _pickle_dumps_impl(module, obj, protocol, fix_imports); exit: @@ -492,8 +499,9 @@ _pickle_load(PyModuleDef *module, PyObject *args, PyObject *kwargs) const char *errors = "strict"; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|$pss:load", _keywords, - &file, &fix_imports, &encoding, &errors)) + &file, &fix_imports, &encoding, &errors)) { goto exit; + } return_value = _pickle_load_impl(module, file, fix_imports, encoding, errors); exit: @@ -538,11 +546,12 @@ _pickle_loads(PyModuleDef *module, PyObject *args, PyObject *kwargs) const char *errors = "strict"; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|$pss:loads", _keywords, - &data, &fix_imports, &encoding, &errors)) + &data, &fix_imports, &encoding, &errors)) { goto exit; + } return_value = _pickle_loads_impl(module, data, fix_imports, encoding, errors); exit: return return_value; } -/*[clinic end generated code: output=a7169d4fbbeef827 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5e972f339d197760 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_sre.c.h b/Modules/clinic/_sre.c.h index 6de470847e..448d8afbc1 100644 --- a/Modules/clinic/_sre.c.h +++ b/Modules/clinic/_sre.c.h @@ -20,8 +20,9 @@ _sre_getcodesize(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) int _return_value; _return_value = _sre_getcodesize_impl(module); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -48,11 +49,13 @@ _sre_getlower(PyModuleDef *module, PyObject *args) int _return_value; if (!PyArg_ParseTuple(args, "ii:getlower", - &character, &flags)) + &character, &flags)) { goto exit; + } _return_value = _sre_getlower_impl(module, character, flags); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -84,8 +87,9 @@ _sre_SRE_Pattern_match(PatternObject *self, PyObject *args, PyObject *kwargs) PyObject *pattern = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:match", _keywords, - &string, &pos, &endpos, &pattern)) + &string, &pos, &endpos, &pattern)) { goto exit; + } return_value = _sre_SRE_Pattern_match_impl(self, string, pos, endpos, pattern); exit: @@ -118,8 +122,9 @@ _sre_SRE_Pattern_fullmatch(PatternObject *self, PyObject *args, PyObject *kwargs PyObject *pattern = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:fullmatch", _keywords, - &string, &pos, &endpos, &pattern)) + &string, &pos, &endpos, &pattern)) { goto exit; + } return_value = _sre_SRE_Pattern_fullmatch_impl(self, string, pos, endpos, pattern); exit: @@ -154,8 +159,9 @@ _sre_SRE_Pattern_search(PatternObject *self, PyObject *args, PyObject *kwargs) PyObject *pattern = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:search", _keywords, - &string, &pos, &endpos, &pattern)) + &string, &pos, &endpos, &pattern)) { goto exit; + } return_value = _sre_SRE_Pattern_search_impl(self, string, pos, endpos, pattern); exit: @@ -188,8 +194,9 @@ _sre_SRE_Pattern_findall(PatternObject *self, PyObject *args, PyObject *kwargs) PyObject *source = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:findall", _keywords, - &string, &pos, &endpos, &source)) + &string, &pos, &endpos, &source)) { goto exit; + } return_value = _sre_SRE_Pattern_findall_impl(self, string, pos, endpos, source); exit: @@ -221,8 +228,9 @@ _sre_SRE_Pattern_finditer(PatternObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t endpos = PY_SSIZE_T_MAX; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|nn:finditer", _keywords, - &string, &pos, &endpos)) + &string, &pos, &endpos)) { goto exit; + } return_value = _sre_SRE_Pattern_finditer_impl(self, string, pos, endpos); exit: @@ -251,8 +259,9 @@ _sre_SRE_Pattern_scanner(PatternObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t endpos = PY_SSIZE_T_MAX; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|nn:scanner", _keywords, - &string, &pos, &endpos)) + &string, &pos, &endpos)) { goto exit; + } return_value = _sre_SRE_Pattern_scanner_impl(self, string, pos, endpos); exit: @@ -282,8 +291,9 @@ _sre_SRE_Pattern_split(PatternObject *self, PyObject *args, PyObject *kwargs) PyObject *source = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|On$O:split", _keywords, - &string, &maxsplit, &source)) + &string, &maxsplit, &source)) { goto exit; + } return_value = _sre_SRE_Pattern_split_impl(self, string, maxsplit, source); exit: @@ -313,8 +323,9 @@ _sre_SRE_Pattern_sub(PatternObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t count = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|n:sub", _keywords, - &repl, &string, &count)) + &repl, &string, &count)) { goto exit; + } return_value = _sre_SRE_Pattern_sub_impl(self, repl, string, count); exit: @@ -344,8 +355,9 @@ _sre_SRE_Pattern_subn(PatternObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t count = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|n:subn", _keywords, - &repl, &string, &count)) + &repl, &string, &count)) { goto exit; + } return_value = _sre_SRE_Pattern_subn_impl(self, repl, string, count); exit: @@ -388,8 +400,9 @@ _sre_SRE_Pattern___deepcopy__(PatternObject *self, PyObject *args, PyObject *kwa PyObject *memo; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:__deepcopy__", _keywords, - &memo)) + &memo)) { goto exit; + } return_value = _sre_SRE_Pattern___deepcopy___impl(self, memo); exit: @@ -423,8 +436,9 @@ _sre_compile(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *indexgroup; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OiO!nOO:compile", _keywords, - &pattern, &flags, &PyList_Type, &code, &groups, &groupindex, &indexgroup)) + &pattern, &flags, &PyList_Type, &code, &groups, &groupindex, &indexgroup)) { goto exit; + } return_value = _sre_compile_impl(module, pattern, flags, code, groups, groupindex, indexgroup); exit: @@ -451,8 +465,9 @@ _sre_SRE_Match_expand(MatchObject *self, PyObject *args, PyObject *kwargs) PyObject *template; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:expand", _keywords, - &template)) + &template)) { goto exit; + } return_value = _sre_SRE_Match_expand_impl(self, template); exit: @@ -482,8 +497,9 @@ _sre_SRE_Match_groups(MatchObject *self, PyObject *args, PyObject *kwargs) PyObject *default_value = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:groups", _keywords, - &default_value)) + &default_value)) { goto exit; + } return_value = _sre_SRE_Match_groups_impl(self, default_value); exit: @@ -513,8 +529,9 @@ _sre_SRE_Match_groupdict(MatchObject *self, PyObject *args, PyObject *kwargs) PyObject *default_value = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:groupdict", _keywords, - &default_value)) + &default_value)) { goto exit; + } return_value = _sre_SRE_Match_groupdict_impl(self, default_value); exit: @@ -542,11 +559,13 @@ _sre_SRE_Match_start(MatchObject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "start", 0, 1, - &group)) + &group)) { goto exit; + } _return_value = _sre_SRE_Match_start_impl(self, group); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromSsize_t(_return_value); exit: @@ -574,11 +593,13 @@ _sre_SRE_Match_end(MatchObject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "end", 0, 1, - &group)) + &group)) { goto exit; + } _return_value = _sre_SRE_Match_end_impl(self, group); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromSsize_t(_return_value); exit: @@ -605,8 +626,9 @@ _sre_SRE_Match_span(MatchObject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "span", 0, 1, - &group)) + &group)) { goto exit; + } return_value = _sre_SRE_Match_span_impl(self, group); exit: @@ -649,8 +671,9 @@ _sre_SRE_Match___deepcopy__(MatchObject *self, PyObject *args, PyObject *kwargs) PyObject *memo; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:__deepcopy__", _keywords, - &memo)) + &memo)) { goto exit; + } return_value = _sre_SRE_Match___deepcopy___impl(self, memo); exit: @@ -690,4 +713,4 @@ _sre_SRE_Scanner_search(ScannerObject *self, PyObject *Py_UNUSED(ignored)) { return _sre_SRE_Scanner_search_impl(self); } -/*[clinic end generated code: output=d1d73ab2c5008bd4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=00f7bf869b3283bc input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index 4dbc5d0010..2bf46b5c1b 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -36,8 +36,9 @@ _ssl__test_decode_cert(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *path; - if (!PyArg_Parse(arg, "O&:_test_decode_cert", PyUnicode_FSConverter, &path)) + if (!PyArg_Parse(arg, "O&:_test_decode_cert", PyUnicode_FSConverter, &path)) { goto exit; + } return_value = _ssl__test_decode_cert_impl(module, path); exit: @@ -71,8 +72,9 @@ _ssl__SSLSocket_peer_certificate(PySSLSocket *self, PyObject *args) int binary_mode = 0; if (!PyArg_ParseTuple(args, "|p:peer_certificate", - &binary_mode)) + &binary_mode)) { goto exit; + } return_value = _ssl__SSLSocket_peer_certificate_impl(self, binary_mode); exit: @@ -209,14 +211,16 @@ _ssl__SSLSocket_write(PySSLSocket *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer b = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:write", &b)) + if (!PyArg_Parse(arg, "y*:write", &b)) { goto exit; + } return_value = _ssl__SSLSocket_write_impl(self, &b); exit: /* Cleanup for b */ - if (b.obj) + if (b.obj) { PyBuffer_Release(&b); + } return return_value; } @@ -260,12 +264,14 @@ _ssl__SSLSocket_read(PySSLSocket *self, PyObject *args) switch (PyTuple_GET_SIZE(args)) { case 1: - if (!PyArg_ParseTuple(args, "i:read", &len)) + if (!PyArg_ParseTuple(args, "i:read", &len)) { goto exit; + } break; case 2: - if (!PyArg_ParseTuple(args, "iw*:read", &len, &buffer)) + if (!PyArg_ParseTuple(args, "iw*:read", &len, &buffer)) { goto exit; + } group_right_1 = 1; break; default: @@ -276,8 +282,9 @@ _ssl__SSLSocket_read(PySSLSocket *self, PyObject *args) exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -332,11 +339,13 @@ _ssl__SSLContext(PyTypeObject *type, PyObject *args, PyObject *kwargs) int proto_version; if ((type == &PySSLContext_Type) && - !_PyArg_NoKeywords("_SSLContext", kwargs)) + !_PyArg_NoKeywords("_SSLContext", kwargs)) { goto exit; + } if (!PyArg_ParseTuple(args, "i:_SSLContext", - &proto_version)) + &proto_version)) { goto exit; + } return_value = _ssl__SSLContext_impl(type, proto_version); exit: @@ -360,8 +369,9 @@ _ssl__SSLContext_set_ciphers(PySSLContext *self, PyObject *arg) PyObject *return_value = NULL; const char *cipherlist; - if (!PyArg_Parse(arg, "s:set_ciphers", &cipherlist)) + if (!PyArg_Parse(arg, "s:set_ciphers", &cipherlist)) { goto exit; + } return_value = _ssl__SSLContext_set_ciphers_impl(self, cipherlist); exit: @@ -386,14 +396,16 @@ _ssl__SSLContext__set_npn_protocols(PySSLContext *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer protos = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:_set_npn_protocols", &protos)) + if (!PyArg_Parse(arg, "y*:_set_npn_protocols", &protos)) { goto exit; + } return_value = _ssl__SSLContext__set_npn_protocols_impl(self, &protos); exit: /* Cleanup for protos */ - if (protos.obj) + if (protos.obj) { PyBuffer_Release(&protos); + } return return_value; } @@ -416,14 +428,16 @@ _ssl__SSLContext__set_alpn_protocols(PySSLContext *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer protos = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:_set_alpn_protocols", &protos)) + if (!PyArg_Parse(arg, "y*:_set_alpn_protocols", &protos)) { goto exit; + } return_value = _ssl__SSLContext__set_alpn_protocols_impl(self, &protos); exit: /* Cleanup for protos */ - if (protos.obj) + if (protos.obj) { PyBuffer_Release(&protos); + } return return_value; } @@ -450,8 +464,9 @@ _ssl__SSLContext_load_cert_chain(PySSLContext *self, PyObject *args, PyObject *k PyObject *password = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OO:load_cert_chain", _keywords, - &certfile, &keyfile, &password)) + &certfile, &keyfile, &password)) { goto exit; + } return_value = _ssl__SSLContext_load_cert_chain_impl(self, certfile, keyfile, password); exit: @@ -482,8 +497,9 @@ _ssl__SSLContext_load_verify_locations(PySSLContext *self, PyObject *args, PyObj PyObject *cadata = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OOO:load_verify_locations", _keywords, - &cafile, &capath, &cadata)) + &cafile, &capath, &cadata)) { goto exit; + } return_value = _ssl__SSLContext_load_verify_locations_impl(self, cafile, capath, cadata); exit: @@ -520,8 +536,9 @@ _ssl__SSLContext__wrap_socket(PySSLContext *self, PyObject *args, PyObject *kwar PyObject *hostname_obj = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!i|O:_wrap_socket", _keywords, - PySocketModule.Sock_Type, &sock, &server_side, &hostname_obj)) + PySocketModule.Sock_Type, &sock, &server_side, &hostname_obj)) { goto exit; + } return_value = _ssl__SSLContext__wrap_socket_impl(self, sock, server_side, hostname_obj); exit: @@ -553,8 +570,9 @@ _ssl__SSLContext__wrap_bio(PySSLContext *self, PyObject *args, PyObject *kwargs) PyObject *hostname_obj = Py_None; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!i|O:_wrap_bio", _keywords, - &PySSLMemoryBIO_Type, &incoming, &PySSLMemoryBIO_Type, &outgoing, &server_side, &hostname_obj)) + &PySSLMemoryBIO_Type, &incoming, &PySSLMemoryBIO_Type, &outgoing, &server_side, &hostname_obj)) { goto exit; + } return_value = _ssl__SSLContext__wrap_bio_impl(self, incoming, outgoing, server_side, hostname_obj); exit: @@ -670,8 +688,9 @@ _ssl__SSLContext_get_ca_certs(PySSLContext *self, PyObject *args, PyObject *kwar int binary_form = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|p:get_ca_certs", _keywords, - &binary_form)) + &binary_form)) { goto exit; + } return_value = _ssl__SSLContext_get_ca_certs_impl(self, binary_form); exit: @@ -687,11 +706,13 @@ _ssl_MemoryBIO(PyTypeObject *type, PyObject *args, PyObject *kwargs) PyObject *return_value = NULL; if ((type == &PySSLMemoryBIO_Type) && - !_PyArg_NoPositional("MemoryBIO", args)) + !_PyArg_NoPositional("MemoryBIO", args)) { goto exit; + } if ((type == &PySSLMemoryBIO_Type) && - !_PyArg_NoKeywords("MemoryBIO", kwargs)) + !_PyArg_NoKeywords("MemoryBIO", kwargs)) { goto exit; + } return_value = _ssl_MemoryBIO_impl(type); exit: @@ -722,8 +743,9 @@ _ssl_MemoryBIO_read(PySSLMemoryBIO *self, PyObject *args) int len = -1; if (!PyArg_ParseTuple(args, "|i:read", - &len)) + &len)) { goto exit; + } return_value = _ssl_MemoryBIO_read_impl(self, len); exit: @@ -750,14 +772,16 @@ _ssl_MemoryBIO_write(PySSLMemoryBIO *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer b = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:write", &b)) + if (!PyArg_Parse(arg, "y*:write", &b)) { goto exit; + } return_value = _ssl_MemoryBIO_write_impl(self, &b); exit: /* Cleanup for b */ - if (b.obj) + if (b.obj) { PyBuffer_Release(&b); + } return return_value; } @@ -805,14 +829,16 @@ _ssl_RAND_add(PyModuleDef *module, PyObject *args) double entropy; if (!PyArg_ParseTuple(args, "s*d:RAND_add", - &view, &entropy)) + &view, &entropy)) { goto exit; + } return_value = _ssl_RAND_add_impl(module, &view, entropy); exit: /* Cleanup for view */ - if (view.obj) + if (view.obj) { PyBuffer_Release(&view); + } return return_value; } @@ -835,8 +861,9 @@ _ssl_RAND_bytes(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int n; - if (!PyArg_Parse(arg, "i:RAND_bytes", &n)) + if (!PyArg_Parse(arg, "i:RAND_bytes", &n)) { goto exit; + } return_value = _ssl_RAND_bytes_impl(module, n); exit: @@ -864,8 +891,9 @@ _ssl_RAND_pseudo_bytes(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int n; - if (!PyArg_Parse(arg, "i:RAND_pseudo_bytes", &n)) + if (!PyArg_Parse(arg, "i:RAND_pseudo_bytes", &n)) { goto exit; + } return_value = _ssl_RAND_pseudo_bytes_impl(module, n); exit: @@ -916,8 +944,9 @@ _ssl_RAND_egd(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *path; - if (!PyArg_Parse(arg, "O&:RAND_egd", PyUnicode_FSConverter, &path)) + if (!PyArg_Parse(arg, "O&:RAND_egd", PyUnicode_FSConverter, &path)) { goto exit; + } return_value = _ssl_RAND_egd_impl(module, path); exit: @@ -970,8 +999,9 @@ _ssl_txt2obj(PyModuleDef *module, PyObject *args, PyObject *kwargs) int name = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|p:txt2obj", _keywords, - &txt, &name)) + &txt, &name)) { goto exit; + } return_value = _ssl_txt2obj_impl(module, txt, name); exit: @@ -996,8 +1026,9 @@ _ssl_nid2obj(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int nid; - if (!PyArg_Parse(arg, "i:nid2obj", &nid)) + if (!PyArg_Parse(arg, "i:nid2obj", &nid)) { goto exit; + } return_value = _ssl_nid2obj_impl(module, nid); exit: @@ -1032,8 +1063,9 @@ _ssl_enum_certificates(PyModuleDef *module, PyObject *args, PyObject *kwargs) const char *store_name; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:enum_certificates", _keywords, - &store_name)) + &store_name)) { goto exit; + } return_value = _ssl_enum_certificates_impl(module, store_name); exit: @@ -1069,8 +1101,9 @@ _ssl_enum_crls(PyModuleDef *module, PyObject *args, PyObject *kwargs) const char *store_name; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:enum_crls", _keywords, - &store_name)) + &store_name)) { goto exit; + } return_value = _ssl_enum_crls_impl(module, store_name); exit: @@ -1102,4 +1135,4 @@ exit: #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=a14999cb565a69a2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c6fe203099a5aa89 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_tkinter.c.h b/Modules/clinic/_tkinter.c.h index 7917dec9c4..73527fc901 100644 --- a/Modules/clinic/_tkinter.c.h +++ b/Modules/clinic/_tkinter.c.h @@ -19,8 +19,9 @@ _tkinter_tkapp_eval(TkappObject *self, PyObject *arg) PyObject *return_value = NULL; const char *script; - if (!PyArg_Parse(arg, "s:eval", &script)) + if (!PyArg_Parse(arg, "s:eval", &script)) { goto exit; + } return_value = _tkinter_tkapp_eval_impl(self, script); exit: @@ -44,8 +45,9 @@ _tkinter_tkapp_evalfile(TkappObject *self, PyObject *arg) PyObject *return_value = NULL; const char *fileName; - if (!PyArg_Parse(arg, "s:evalfile", &fileName)) + if (!PyArg_Parse(arg, "s:evalfile", &fileName)) { goto exit; + } return_value = _tkinter_tkapp_evalfile_impl(self, fileName); exit: @@ -69,8 +71,9 @@ _tkinter_tkapp_record(TkappObject *self, PyObject *arg) PyObject *return_value = NULL; const char *script; - if (!PyArg_Parse(arg, "s:record", &script)) + if (!PyArg_Parse(arg, "s:record", &script)) { goto exit; + } return_value = _tkinter_tkapp_record_impl(self, script); exit: @@ -94,8 +97,9 @@ _tkinter_tkapp_adderrinfo(TkappObject *self, PyObject *arg) PyObject *return_value = NULL; const char *msg; - if (!PyArg_Parse(arg, "s:adderrinfo", &msg)) + if (!PyArg_Parse(arg, "s:adderrinfo", &msg)) { goto exit; + } return_value = _tkinter_tkapp_adderrinfo_impl(self, msg); exit: @@ -143,8 +147,9 @@ _tkinter_tkapp_exprstring(TkappObject *self, PyObject *arg) PyObject *return_value = NULL; const char *s; - if (!PyArg_Parse(arg, "s:exprstring", &s)) + if (!PyArg_Parse(arg, "s:exprstring", &s)) { goto exit; + } return_value = _tkinter_tkapp_exprstring_impl(self, s); exit: @@ -168,8 +173,9 @@ _tkinter_tkapp_exprlong(TkappObject *self, PyObject *arg) PyObject *return_value = NULL; const char *s; - if (!PyArg_Parse(arg, "s:exprlong", &s)) + if (!PyArg_Parse(arg, "s:exprlong", &s)) { goto exit; + } return_value = _tkinter_tkapp_exprlong_impl(self, s); exit: @@ -193,8 +199,9 @@ _tkinter_tkapp_exprdouble(TkappObject *self, PyObject *arg) PyObject *return_value = NULL; const char *s; - if (!PyArg_Parse(arg, "s:exprdouble", &s)) + if (!PyArg_Parse(arg, "s:exprdouble", &s)) { goto exit; + } return_value = _tkinter_tkapp_exprdouble_impl(self, s); exit: @@ -218,8 +225,9 @@ _tkinter_tkapp_exprboolean(TkappObject *self, PyObject *arg) PyObject *return_value = NULL; const char *s; - if (!PyArg_Parse(arg, "s:exprboolean", &s)) + if (!PyArg_Parse(arg, "s:exprboolean", &s)) { goto exit; + } return_value = _tkinter_tkapp_exprboolean_impl(self, s); exit: @@ -262,8 +270,9 @@ _tkinter_tkapp_createcommand(TkappObject *self, PyObject *args) PyObject *func; if (!PyArg_ParseTuple(args, "sO:createcommand", - &name, &func)) + &name, &func)) { goto exit; + } return_value = _tkinter_tkapp_createcommand_impl(self, name, func); exit: @@ -287,8 +296,9 @@ _tkinter_tkapp_deletecommand(TkappObject *self, PyObject *arg) PyObject *return_value = NULL; const char *name; - if (!PyArg_Parse(arg, "s:deletecommand", &name)) + if (!PyArg_Parse(arg, "s:deletecommand", &name)) { goto exit; + } return_value = _tkinter_tkapp_deletecommand_impl(self, name); exit: @@ -318,8 +328,9 @@ _tkinter_tkapp_createfilehandler(TkappObject *self, PyObject *args) PyObject *func; if (!PyArg_ParseTuple(args, "OiO:createfilehandler", - &file, &mask, &func)) + &file, &mask, &func)) { goto exit; + } return_value = _tkinter_tkapp_createfilehandler_impl(self, file, mask, func); exit: @@ -377,8 +388,9 @@ _tkinter_tkapp_createtimerhandler(TkappObject *self, PyObject *args) PyObject *func; if (!PyArg_ParseTuple(args, "iO:createtimerhandler", - &milliseconds, &func)) + &milliseconds, &func)) { goto exit; + } return_value = _tkinter_tkapp_createtimerhandler_impl(self, milliseconds, func); exit: @@ -403,8 +415,9 @@ _tkinter_tkapp_mainloop(TkappObject *self, PyObject *args) int threshold = 0; if (!PyArg_ParseTuple(args, "|i:mainloop", - &threshold)) + &threshold)) { goto exit; + } return_value = _tkinter_tkapp_mainloop_impl(self, threshold); exit: @@ -429,8 +442,9 @@ _tkinter_tkapp_dooneevent(TkappObject *self, PyObject *args) int flags = 0; if (!PyArg_ParseTuple(args, "|i:dooneevent", - &flags)) + &flags)) { goto exit; + } return_value = _tkinter_tkapp_dooneevent_impl(self, flags); exit: @@ -551,8 +565,9 @@ _tkinter_create(PyModuleDef *module, PyObject *args) const char *use = NULL; if (!PyArg_ParseTuple(args, "|zssiiiiz:create", - &screenName, &baseName, &className, &interactive, &wantobjects, &wantTk, &sync, &use)) + &screenName, &baseName, &className, &interactive, &wantobjects, &wantTk, &sync, &use)) { goto exit; + } return_value = _tkinter_create_impl(module, screenName, baseName, className, interactive, wantobjects, wantTk, sync, use); exit: @@ -579,8 +594,9 @@ _tkinter_setbusywaitinterval(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int new_val; - if (!PyArg_Parse(arg, "i:setbusywaitinterval", &new_val)) + if (!PyArg_Parse(arg, "i:setbusywaitinterval", &new_val)) { goto exit; + } return_value = _tkinter_setbusywaitinterval_impl(module, new_val); exit: @@ -606,8 +622,9 @@ _tkinter_getbusywaitinterval(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) int _return_value; _return_value = _tkinter_getbusywaitinterval_impl(module); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -621,4 +638,4 @@ exit: #ifndef _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF #define _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF #endif /* !defined(_TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF) */ -/*[clinic end generated code: output=6dd667b91cf8addd input=a9049054013a1b77]*/ +/*[clinic end generated code: output=13be3f8313bba3c7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_weakref.c.h b/Modules/clinic/_weakref.c.h index 87c701c52f..b93343b079 100644 --- a/Modules/clinic/_weakref.c.h +++ b/Modules/clinic/_weakref.c.h @@ -21,11 +21,12 @@ _weakref_getweakrefcount(PyModuleDef *module, PyObject *object) Py_ssize_t _return_value; _return_value = _weakref_getweakrefcount_impl(module, object); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromSsize_t(_return_value); exit: return return_value; } -/*[clinic end generated code: output=4da9aade63eed77f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=00e317cda5359ea3 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h index 34518e836b..2b8deeab2b 100644 --- a/Modules/clinic/_winapi.c.h +++ b/Modules/clinic/_winapi.c.h @@ -19,8 +19,9 @@ _winapi_Overlapped_GetOverlappedResult(OverlappedObject *self, PyObject *arg) PyObject *return_value = NULL; int wait; - if (!PyArg_Parse(arg, "p:GetOverlappedResult", &wait)) + if (!PyArg_Parse(arg, "p:GetOverlappedResult", &wait)) { goto exit; + } return_value = _winapi_Overlapped_GetOverlappedResult_impl(self, wait); exit: @@ -79,8 +80,9 @@ _winapi_CloseHandle(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; HANDLE handle; - if (!PyArg_Parse(arg, "" F_HANDLE ":CloseHandle", &handle)) + if (!PyArg_Parse(arg, "" F_HANDLE ":CloseHandle", &handle)) { goto exit; + } return_value = _winapi_CloseHandle_impl(module, handle); exit: @@ -108,8 +110,9 @@ _winapi_ConnectNamedPipe(PyModuleDef *module, PyObject *args, PyObject *kwargs) int use_overlapped = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" F_HANDLE "|i:ConnectNamedPipe", _keywords, - &handle, &use_overlapped)) + &handle, &use_overlapped)) { goto exit; + } return_value = _winapi_ConnectNamedPipe_impl(module, handle, use_overlapped); exit: @@ -147,13 +150,16 @@ _winapi_CreateFile(PyModuleDef *module, PyObject *args) HANDLE _return_value; if (!PyArg_ParseTuple(args, "skk" F_POINTER "kk" F_HANDLE ":CreateFile", - &file_name, &desired_access, &share_mode, &security_attributes, &creation_disposition, &flags_and_attributes, &template_file)) + &file_name, &desired_access, &share_mode, &security_attributes, &creation_disposition, &flags_and_attributes, &template_file)) { goto exit; + } _return_value = _winapi_CreateFile_impl(module, file_name, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file); - if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) { goto exit; - if (_return_value == NULL) + } + if (_return_value == NULL) { Py_RETURN_NONE; + } return_value = HANDLE_TO_PYNUM(_return_value); exit: @@ -180,8 +186,9 @@ _winapi_CreateJunction(PyModuleDef *module, PyObject *args) LPWSTR dst_path; if (!PyArg_ParseTuple(args, "uu:CreateJunction", - &src_path, &dst_path)) + &src_path, &dst_path)) { goto exit; + } return_value = _winapi_CreateJunction_impl(module, src_path, dst_path); exit: @@ -220,13 +227,16 @@ _winapi_CreateNamedPipe(PyModuleDef *module, PyObject *args) HANDLE _return_value; if (!PyArg_ParseTuple(args, "skkkkkk" F_POINTER ":CreateNamedPipe", - &name, &open_mode, &pipe_mode, &max_instances, &out_buffer_size, &in_buffer_size, &default_timeout, &security_attributes)) + &name, &open_mode, &pipe_mode, &max_instances, &out_buffer_size, &in_buffer_size, &default_timeout, &security_attributes)) { goto exit; + } _return_value = _winapi_CreateNamedPipe_impl(module, name, open_mode, pipe_mode, max_instances, out_buffer_size, in_buffer_size, default_timeout, security_attributes); - if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) { goto exit; - if (_return_value == NULL) + } + if (_return_value == NULL) { Py_RETURN_NONE; + } return_value = HANDLE_TO_PYNUM(_return_value); exit: @@ -259,8 +269,9 @@ _winapi_CreatePipe(PyModuleDef *module, PyObject *args) DWORD size; if (!PyArg_ParseTuple(args, "Ok:CreatePipe", - &pipe_attrs, &size)) + &pipe_attrs, &size)) { goto exit; + } return_value = _winapi_CreatePipe_impl(module, pipe_attrs, size); exit: @@ -309,8 +320,9 @@ _winapi_CreateProcess(PyModuleDef *module, PyObject *args) PyObject *startup_info; if (!PyArg_ParseTuple(args, "ZZOOikOZO:CreateProcess", - &application_name, &command_line, &proc_attrs, &thread_attrs, &inherit_handles, &creation_flags, &env_mapping, ¤t_directory, &startup_info)) + &application_name, &command_line, &proc_attrs, &thread_attrs, &inherit_handles, &creation_flags, &env_mapping, ¤t_directory, &startup_info)) { goto exit; + } return_value = _winapi_CreateProcess_impl(module, application_name, command_line, proc_attrs, thread_attrs, inherit_handles, creation_flags, env_mapping, current_directory, startup_info); exit: @@ -353,13 +365,16 @@ _winapi_DuplicateHandle(PyModuleDef *module, PyObject *args) HANDLE _return_value; if (!PyArg_ParseTuple(args, "" F_HANDLE "" F_HANDLE "" F_HANDLE "ki|k:DuplicateHandle", - &source_process_handle, &source_handle, &target_process_handle, &desired_access, &inherit_handle, &options)) + &source_process_handle, &source_handle, &target_process_handle, &desired_access, &inherit_handle, &options)) { goto exit; + } _return_value = _winapi_DuplicateHandle_impl(module, source_process_handle, source_handle, target_process_handle, desired_access, inherit_handle, options); - if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) { goto exit; - if (_return_value == NULL) + } + if (_return_value == NULL) { Py_RETURN_NONE; + } return_value = HANDLE_TO_PYNUM(_return_value); exit: @@ -383,8 +398,9 @@ _winapi_ExitProcess(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; UINT ExitCode; - if (!PyArg_Parse(arg, "I:ExitProcess", &ExitCode)) + if (!PyArg_Parse(arg, "I:ExitProcess", &ExitCode)) { goto exit; + } return_value = _winapi_ExitProcess_impl(module, ExitCode); exit: @@ -410,10 +426,12 @@ _winapi_GetCurrentProcess(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) HANDLE _return_value; _return_value = _winapi_GetCurrentProcess_impl(module); - if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) { goto exit; - if (_return_value == NULL) + } + if (_return_value == NULL) { Py_RETURN_NONE; + } return_value = HANDLE_TO_PYNUM(_return_value); exit: @@ -439,11 +457,13 @@ _winapi_GetExitCodeProcess(PyModuleDef *module, PyObject *arg) HANDLE process; DWORD _return_value; - if (!PyArg_Parse(arg, "" F_HANDLE ":GetExitCodeProcess", &process)) + if (!PyArg_Parse(arg, "" F_HANDLE ":GetExitCodeProcess", &process)) { goto exit; + } _return_value = _winapi_GetExitCodeProcess_impl(module, process); - if ((_return_value == DWORD_MAX) && PyErr_Occurred()) + if ((_return_value == DWORD_MAX) && PyErr_Occurred()) { goto exit; + } return_value = Py_BuildValue("k", _return_value); exit: @@ -468,8 +488,9 @@ _winapi_GetLastError(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) DWORD _return_value; _return_value = _winapi_GetLastError_impl(module); - if ((_return_value == DWORD_MAX) && PyErr_Occurred()) + if ((_return_value == DWORD_MAX) && PyErr_Occurred()) { goto exit; + } return_value = Py_BuildValue("k", _return_value); exit: @@ -501,8 +522,9 @@ _winapi_GetModuleFileName(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; HMODULE module_handle; - if (!PyArg_Parse(arg, "" F_HANDLE ":GetModuleFileName", &module_handle)) + if (!PyArg_Parse(arg, "" F_HANDLE ":GetModuleFileName", &module_handle)) { goto exit; + } return_value = _winapi_GetModuleFileName_impl(module, module_handle); exit: @@ -533,13 +555,16 @@ _winapi_GetStdHandle(PyModuleDef *module, PyObject *arg) DWORD std_handle; HANDLE _return_value; - if (!PyArg_Parse(arg, "k:GetStdHandle", &std_handle)) + if (!PyArg_Parse(arg, "k:GetStdHandle", &std_handle)) { goto exit; + } _return_value = _winapi_GetStdHandle_impl(module, std_handle); - if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) { goto exit; - if (_return_value == NULL) + } + if (_return_value == NULL) { Py_RETURN_NONE; + } return_value = HANDLE_TO_PYNUM(_return_value); exit: @@ -565,8 +590,9 @@ _winapi_GetVersion(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) long _return_value; _return_value = _winapi_GetVersion_impl(module); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong(_return_value); exit: @@ -595,13 +621,16 @@ _winapi_OpenProcess(PyModuleDef *module, PyObject *args) HANDLE _return_value; if (!PyArg_ParseTuple(args, "kik:OpenProcess", - &desired_access, &inherit_handle, &process_id)) + &desired_access, &inherit_handle, &process_id)) { goto exit; + } _return_value = _winapi_OpenProcess_impl(module, desired_access, inherit_handle, process_id); - if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) + if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) { goto exit; - if (_return_value == NULL) + } + if (_return_value == NULL) { Py_RETURN_NONE; + } return_value = HANDLE_TO_PYNUM(_return_value); exit: @@ -627,8 +656,9 @@ _winapi_PeekNamedPipe(PyModuleDef *module, PyObject *args) int size = 0; if (!PyArg_ParseTuple(args, "" F_HANDLE "|i:PeekNamedPipe", - &handle, &size)) + &handle, &size)) { goto exit; + } return_value = _winapi_PeekNamedPipe_impl(module, handle, size); exit: @@ -657,8 +687,9 @@ _winapi_ReadFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) int use_overlapped = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" F_HANDLE "i|i:ReadFile", _keywords, - &handle, &size, &use_overlapped)) + &handle, &size, &use_overlapped)) { goto exit; + } return_value = _winapi_ReadFile_impl(module, handle, size, use_overlapped); exit: @@ -690,8 +721,9 @@ _winapi_SetNamedPipeHandleState(PyModuleDef *module, PyObject *args) PyObject *collect_data_timeout; if (!PyArg_ParseTuple(args, "" F_HANDLE "OOO:SetNamedPipeHandleState", - &named_pipe, &mode, &max_collection_count, &collect_data_timeout)) + &named_pipe, &mode, &max_collection_count, &collect_data_timeout)) { goto exit; + } return_value = _winapi_SetNamedPipeHandleState_impl(module, named_pipe, mode, max_collection_count, collect_data_timeout); exit: @@ -719,8 +751,9 @@ _winapi_TerminateProcess(PyModuleDef *module, PyObject *args) UINT exit_code; if (!PyArg_ParseTuple(args, "" F_HANDLE "I:TerminateProcess", - &handle, &exit_code)) + &handle, &exit_code)) { goto exit; + } return_value = _winapi_TerminateProcess_impl(module, handle, exit_code); exit: @@ -746,8 +779,9 @@ _winapi_WaitNamedPipe(PyModuleDef *module, PyObject *args) DWORD timeout; if (!PyArg_ParseTuple(args, "sk:WaitNamedPipe", - &name, &timeout)) + &name, &timeout)) { goto exit; + } return_value = _winapi_WaitNamedPipe_impl(module, name, timeout); exit: @@ -777,8 +811,9 @@ _winapi_WaitForMultipleObjects(PyModuleDef *module, PyObject *args) DWORD milliseconds = INFINITE; if (!PyArg_ParseTuple(args, "Oi|k:WaitForMultipleObjects", - &handle_seq, &wait_flag, &milliseconds)) + &handle_seq, &wait_flag, &milliseconds)) { goto exit; + } return_value = _winapi_WaitForMultipleObjects_impl(module, handle_seq, wait_flag, milliseconds); exit: @@ -811,11 +846,13 @@ _winapi_WaitForSingleObject(PyModuleDef *module, PyObject *args) long _return_value; if (!PyArg_ParseTuple(args, "" F_HANDLE "k:WaitForSingleObject", - &handle, &milliseconds)) + &handle, &milliseconds)) { goto exit; + } _return_value = _winapi_WaitForSingleObject_impl(module, handle, milliseconds); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong(_return_value); exit: @@ -844,11 +881,12 @@ _winapi_WriteFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) int use_overlapped = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" F_HANDLE "O|i:WriteFile", _keywords, - &handle, &buffer, &use_overlapped)) + &handle, &buffer, &use_overlapped)) { goto exit; + } return_value = _winapi_WriteFile_impl(module, handle, buffer, use_overlapped); exit: return return_value; } -/*[clinic end generated code: output=98771c6584056d19 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d099ee4fbcdd5bc0 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h index fdf247e2ca..ced17aaf88 100644 --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -77,8 +77,9 @@ array_array_pop(arrayobject *self, PyObject *args) Py_ssize_t i = -1; if (!PyArg_ParseTuple(args, "|n:pop", - &i)) + &i)) { goto exit; + } return_value = array_array_pop_impl(self, i); exit: @@ -114,8 +115,9 @@ array_array_insert(arrayobject *self, PyObject *args) PyObject *v; if (!PyArg_ParseTuple(args, "nO:insert", - &i, &v)) + &i, &v)) { goto exit; + } return_value = array_array_insert_impl(self, i, v); exit: @@ -211,8 +213,9 @@ array_array_fromfile(arrayobject *self, PyObject *args) Py_ssize_t n; if (!PyArg_ParseTuple(args, "On:fromfile", - &f, &n)) + &f, &n)) { goto exit; + } return_value = array_array_fromfile_impl(self, f, n); exit: @@ -275,14 +278,16 @@ array_array_fromstring(arrayobject *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, "s*:fromstring", &buffer)) + if (!PyArg_Parse(arg, "s*:fromstring", &buffer)) { goto exit; + } return_value = array_array_fromstring_impl(self, &buffer); exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -305,14 +310,16 @@ array_array_frombytes(arrayobject *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer buffer = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:frombytes", &buffer)) + if (!PyArg_Parse(arg, "y*:frombytes", &buffer)) { goto exit; + } return_value = array_array_frombytes_impl(self, &buffer); exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -379,8 +386,9 @@ array_array_fromunicode(arrayobject *self, PyObject *arg) Py_UNICODE *ustr; Py_ssize_clean_t ustr_length; - if (!PyArg_Parse(arg, "u#:fromunicode", &ustr, &ustr_length)) + if (!PyArg_Parse(arg, "u#:fromunicode", &ustr, &ustr_length)) { goto exit; + } return_value = array_array_fromunicode_impl(self, ustr, ustr_length); exit: @@ -453,8 +461,9 @@ array__array_reconstructor(PyModuleDef *module, PyObject *args) PyObject *items; if (!PyArg_ParseTuple(args, "OCiO:_array_reconstructor", - &arraytype, &typecode, &mformat_code, &items)) + &arraytype, &typecode, &mformat_code, &items)) { goto exit; + } return_value = array__array_reconstructor_impl(module, arraytype, typecode, mformat_code, items); exit: @@ -496,4 +505,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__, #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, -/*[clinic end generated code: output=d2e82c65ea841cfc input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0b99c89275eda265 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/audioop.c.h b/Modules/clinic/audioop.c.h index 3ee29666cc..4baba27cfd 100644 --- a/Modules/clinic/audioop.c.h +++ b/Modules/clinic/audioop.c.h @@ -24,14 +24,16 @@ audioop_getsample(PyModuleDef *module, PyObject *args) Py_ssize_t index; if (!PyArg_ParseTuple(args, "y*in:getsample", - &fragment, &width, &index)) + &fragment, &width, &index)) { goto exit; + } return_value = audioop_getsample_impl(module, &fragment, width, index); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -56,14 +58,16 @@ audioop_max(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:max", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_max_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -88,14 +92,16 @@ audioop_minmax(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:minmax", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_minmax_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -120,14 +126,16 @@ audioop_avg(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:avg", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_avg_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -152,14 +160,16 @@ audioop_rms(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:rms", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_rms_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -185,17 +195,20 @@ audioop_findfit(PyModuleDef *module, PyObject *args) Py_buffer reference = {NULL, NULL}; if (!PyArg_ParseTuple(args, "y*y*:findfit", - &fragment, &reference)) + &fragment, &reference)) { goto exit; + } return_value = audioop_findfit_impl(module, &fragment, &reference); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } /* Cleanup for reference */ - if (reference.obj) + if (reference.obj) { PyBuffer_Release(&reference); + } return return_value; } @@ -221,17 +234,20 @@ audioop_findfactor(PyModuleDef *module, PyObject *args) Py_buffer reference = {NULL, NULL}; if (!PyArg_ParseTuple(args, "y*y*:findfactor", - &fragment, &reference)) + &fragment, &reference)) { goto exit; + } return_value = audioop_findfactor_impl(module, &fragment, &reference); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } /* Cleanup for reference */ - if (reference.obj) + if (reference.obj) { PyBuffer_Release(&reference); + } return return_value; } @@ -257,14 +273,16 @@ audioop_findmax(PyModuleDef *module, PyObject *args) Py_ssize_t length; if (!PyArg_ParseTuple(args, "y*n:findmax", - &fragment, &length)) + &fragment, &length)) { goto exit; + } return_value = audioop_findmax_impl(module, &fragment, length); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -289,14 +307,16 @@ audioop_avgpp(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:avgpp", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_avgpp_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -321,14 +341,16 @@ audioop_maxpp(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:maxpp", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_maxpp_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -353,14 +375,16 @@ audioop_cross(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:cross", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_cross_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -387,14 +411,16 @@ audioop_mul(PyModuleDef *module, PyObject *args) double factor; if (!PyArg_ParseTuple(args, "y*id:mul", - &fragment, &width, &factor)) + &fragment, &width, &factor)) { goto exit; + } return_value = audioop_mul_impl(module, &fragment, width, factor); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -422,14 +448,16 @@ audioop_tomono(PyModuleDef *module, PyObject *args) double rfactor; if (!PyArg_ParseTuple(args, "y*idd:tomono", - &fragment, &width, &lfactor, &rfactor)) + &fragment, &width, &lfactor, &rfactor)) { goto exit; + } return_value = audioop_tomono_impl(module, &fragment, width, lfactor, rfactor); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -457,14 +485,16 @@ audioop_tostereo(PyModuleDef *module, PyObject *args) double rfactor; if (!PyArg_ParseTuple(args, "y*idd:tostereo", - &fragment, &width, &lfactor, &rfactor)) + &fragment, &width, &lfactor, &rfactor)) { goto exit; + } return_value = audioop_tostereo_impl(module, &fragment, width, lfactor, rfactor); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -491,17 +521,20 @@ audioop_add(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*y*i:add", - &fragment1, &fragment2, &width)) + &fragment1, &fragment2, &width)) { goto exit; + } return_value = audioop_add_impl(module, &fragment1, &fragment2, width); exit: /* Cleanup for fragment1 */ - if (fragment1.obj) + if (fragment1.obj) { PyBuffer_Release(&fragment1); + } /* Cleanup for fragment2 */ - if (fragment2.obj) + if (fragment2.obj) { PyBuffer_Release(&fragment2); + } return return_value; } @@ -528,14 +561,16 @@ audioop_bias(PyModuleDef *module, PyObject *args) int bias; if (!PyArg_ParseTuple(args, "y*ii:bias", - &fragment, &width, &bias)) + &fragment, &width, &bias)) { goto exit; + } return_value = audioop_bias_impl(module, &fragment, width, bias); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -560,14 +595,16 @@ audioop_reverse(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:reverse", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_reverse_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -592,14 +629,16 @@ audioop_byteswap(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:byteswap", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_byteswap_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -626,14 +665,16 @@ audioop_lin2lin(PyModuleDef *module, PyObject *args) int newwidth; if (!PyArg_ParseTuple(args, "y*ii:lin2lin", - &fragment, &width, &newwidth)) + &fragment, &width, &newwidth)) { goto exit; + } return_value = audioop_lin2lin_impl(module, &fragment, width, newwidth); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -667,14 +708,16 @@ audioop_ratecv(PyModuleDef *module, PyObject *args) int weightB = 0; if (!PyArg_ParseTuple(args, "y*iiiiO|ii:ratecv", - &fragment, &width, &nchannels, &inrate, &outrate, &state, &weightA, &weightB)) + &fragment, &width, &nchannels, &inrate, &outrate, &state, &weightA, &weightB)) { goto exit; + } return_value = audioop_ratecv_impl(module, &fragment, width, nchannels, inrate, outrate, state, weightA, weightB); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -699,14 +742,16 @@ audioop_lin2ulaw(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:lin2ulaw", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_lin2ulaw_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -731,14 +776,16 @@ audioop_ulaw2lin(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:ulaw2lin", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_ulaw2lin_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -763,14 +810,16 @@ audioop_lin2alaw(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:lin2alaw", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_lin2alaw_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -795,14 +844,16 @@ audioop_alaw2lin(PyModuleDef *module, PyObject *args) int width; if (!PyArg_ParseTuple(args, "y*i:alaw2lin", - &fragment, &width)) + &fragment, &width)) { goto exit; + } return_value = audioop_alaw2lin_impl(module, &fragment, width); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -829,14 +880,16 @@ audioop_lin2adpcm(PyModuleDef *module, PyObject *args) PyObject *state; if (!PyArg_ParseTuple(args, "y*iO:lin2adpcm", - &fragment, &width, &state)) + &fragment, &width, &state)) { goto exit; + } return_value = audioop_lin2adpcm_impl(module, &fragment, width, state); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } @@ -863,15 +916,17 @@ audioop_adpcm2lin(PyModuleDef *module, PyObject *args) PyObject *state; if (!PyArg_ParseTuple(args, "y*iO:adpcm2lin", - &fragment, &width, &state)) + &fragment, &width, &state)) { goto exit; + } return_value = audioop_adpcm2lin_impl(module, &fragment, width, state); exit: /* Cleanup for fragment */ - if (fragment.obj) + if (fragment.obj) { PyBuffer_Release(&fragment); + } return return_value; } -/*[clinic end generated code: output=a076e1b213a8727b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=af5b025f0241fee2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h index 46cfb8ec3d..e297f1d53e 100644 --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -20,8 +20,9 @@ binascii_a2b_uu(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "O&:a2b_uu", ascii_buffer_converter, &data)) + if (!PyArg_Parse(arg, "O&:a2b_uu", ascii_buffer_converter, &data)) { goto exit; + } return_value = binascii_a2b_uu_impl(module, &data); exit: @@ -50,14 +51,16 @@ binascii_b2a_uu(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:b2a_uu", &data)) + if (!PyArg_Parse(arg, "y*:b2a_uu", &data)) { goto exit; + } return_value = binascii_b2a_uu_impl(module, &data); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -80,8 +83,9 @@ binascii_a2b_base64(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "O&:a2b_base64", ascii_buffer_converter, &data)) + if (!PyArg_Parse(arg, "O&:a2b_base64", ascii_buffer_converter, &data)) { goto exit; + } return_value = binascii_a2b_base64_impl(module, &data); exit: @@ -113,14 +117,16 @@ binascii_b2a_base64(PyModuleDef *module, PyObject *args, PyObject *kwargs) int newline = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|$i:b2a_base64", _keywords, - &data, &newline)) + &data, &newline)) { goto exit; + } return_value = binascii_b2a_base64_impl(module, &data, newline); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -143,8 +149,9 @@ binascii_a2b_hqx(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "O&:a2b_hqx", ascii_buffer_converter, &data)) + if (!PyArg_Parse(arg, "O&:a2b_hqx", ascii_buffer_converter, &data)) { goto exit; + } return_value = binascii_a2b_hqx_impl(module, &data); exit: @@ -173,14 +180,16 @@ binascii_rlecode_hqx(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:rlecode_hqx", &data)) + if (!PyArg_Parse(arg, "y*:rlecode_hqx", &data)) { goto exit; + } return_value = binascii_rlecode_hqx_impl(module, &data); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -203,14 +212,16 @@ binascii_b2a_hqx(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:b2a_hqx", &data)) + if (!PyArg_Parse(arg, "y*:b2a_hqx", &data)) { goto exit; + } return_value = binascii_b2a_hqx_impl(module, &data); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -233,14 +244,16 @@ binascii_rledecode_hqx(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:rledecode_hqx", &data)) + if (!PyArg_Parse(arg, "y*:rledecode_hqx", &data)) { goto exit; + } return_value = binascii_rledecode_hqx_impl(module, &data); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -266,17 +279,20 @@ binascii_crc_hqx(PyModuleDef *module, PyObject *args) unsigned int _return_value; if (!PyArg_ParseTuple(args, "y*I:crc_hqx", - &data, &crc)) + &data, &crc)) { goto exit; + } _return_value = binascii_crc_hqx_impl(module, &data, crc); - if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) + if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -302,17 +318,20 @@ binascii_crc32(PyModuleDef *module, PyObject *args) unsigned int _return_value; if (!PyArg_ParseTuple(args, "y*|I:crc32", - &data, &crc)) + &data, &crc)) { goto exit; + } _return_value = binascii_crc32_impl(module, &data, crc); - if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) + if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -338,14 +357,16 @@ binascii_b2a_hex(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:b2a_hex", &data)) + if (!PyArg_Parse(arg, "y*:b2a_hex", &data)) { goto exit; + } return_value = binascii_b2a_hex_impl(module, &data); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -370,14 +391,16 @@ binascii_hexlify(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:hexlify", &data)) + if (!PyArg_Parse(arg, "y*:hexlify", &data)) { goto exit; + } return_value = binascii_hexlify_impl(module, &data); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -403,8 +426,9 @@ binascii_a2b_hex(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; - if (!PyArg_Parse(arg, "O&:a2b_hex", ascii_buffer_converter, &hexstr)) + if (!PyArg_Parse(arg, "O&:a2b_hex", ascii_buffer_converter, &hexstr)) { goto exit; + } return_value = binascii_a2b_hex_impl(module, &hexstr); exit: @@ -435,8 +459,9 @@ binascii_unhexlify(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; - if (!PyArg_Parse(arg, "O&:unhexlify", ascii_buffer_converter, &hexstr)) + if (!PyArg_Parse(arg, "O&:unhexlify", ascii_buffer_converter, &hexstr)) { goto exit; + } return_value = binascii_unhexlify_impl(module, &hexstr); exit: @@ -468,8 +493,9 @@ binascii_a2b_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) int header = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i:a2b_qp", _keywords, - ascii_buffer_converter, &data, &header)) + ascii_buffer_converter, &data, &header)) { goto exit; + } return_value = binascii_a2b_qp_impl(module, &data, header); exit: @@ -508,15 +534,17 @@ binascii_b2a_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) int header = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|iii:b2a_qp", _keywords, - &data, "etabs, &istext, &header)) + &data, "etabs, &istext, &header)) { goto exit; + } return_value = binascii_b2a_qp_impl(module, &data, quotetabs, istext, header); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } -/*[clinic end generated code: output=b15a24350d105251 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7fb420392d78ac4d input=a9049054013a1b77]*/ diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h index 7d61649783..5899348c87 100644 --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -21,8 +21,9 @@ cmath_acos(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:acos", &z)) + if (!PyArg_Parse(arg, "D:acos", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_acos_impl(module, z); @@ -62,8 +63,9 @@ cmath_acosh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:acosh", &z)) + if (!PyArg_Parse(arg, "D:acosh", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_acosh_impl(module, z); @@ -103,8 +105,9 @@ cmath_asin(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:asin", &z)) + if (!PyArg_Parse(arg, "D:asin", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_asin_impl(module, z); @@ -144,8 +147,9 @@ cmath_asinh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:asinh", &z)) + if (!PyArg_Parse(arg, "D:asinh", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_asinh_impl(module, z); @@ -185,8 +189,9 @@ cmath_atan(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:atan", &z)) + if (!PyArg_Parse(arg, "D:atan", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_atan_impl(module, z); @@ -226,8 +231,9 @@ cmath_atanh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:atanh", &z)) + if (!PyArg_Parse(arg, "D:atanh", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_atanh_impl(module, z); @@ -267,8 +273,9 @@ cmath_cos(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:cos", &z)) + if (!PyArg_Parse(arg, "D:cos", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_cos_impl(module, z); @@ -308,8 +315,9 @@ cmath_cosh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:cosh", &z)) + if (!PyArg_Parse(arg, "D:cosh", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_cosh_impl(module, z); @@ -349,8 +357,9 @@ cmath_exp(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:exp", &z)) + if (!PyArg_Parse(arg, "D:exp", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_exp_impl(module, z); @@ -390,8 +399,9 @@ cmath_log10(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:log10", &z)) + if (!PyArg_Parse(arg, "D:log10", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_log10_impl(module, z); @@ -431,8 +441,9 @@ cmath_sin(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:sin", &z)) + if (!PyArg_Parse(arg, "D:sin", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_sin_impl(module, z); @@ -472,8 +483,9 @@ cmath_sinh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:sinh", &z)) + if (!PyArg_Parse(arg, "D:sinh", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_sinh_impl(module, z); @@ -513,8 +525,9 @@ cmath_sqrt(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:sqrt", &z)) + if (!PyArg_Parse(arg, "D:sqrt", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_sqrt_impl(module, z); @@ -554,8 +567,9 @@ cmath_tan(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:tan", &z)) + if (!PyArg_Parse(arg, "D:tan", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_tan_impl(module, z); @@ -595,8 +609,9 @@ cmath_tanh(PyModuleDef *module, PyObject *arg) Py_complex z; Py_complex _return_value; - if (!PyArg_Parse(arg, "D:tanh", &z)) + if (!PyArg_Parse(arg, "D:tanh", &z)) { goto exit; + } /* modifications for z */ errno = 0; PyFPE_START_PROTECT("complex function", goto exit); _return_value = cmath_tanh_impl(module, z); @@ -639,8 +654,9 @@ cmath_log(PyModuleDef *module, PyObject *args) PyObject *y_obj = NULL; if (!PyArg_ParseTuple(args, "D|O:log", - &x, &y_obj)) + &x, &y_obj)) { goto exit; + } return_value = cmath_log_impl(module, x, y_obj); exit: @@ -665,8 +681,9 @@ cmath_phase(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_complex z; - if (!PyArg_Parse(arg, "D:phase", &z)) + if (!PyArg_Parse(arg, "D:phase", &z)) { goto exit; + } return_value = cmath_phase_impl(module, z); exit: @@ -693,8 +710,9 @@ cmath_polar(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_complex z; - if (!PyArg_Parse(arg, "D:polar", &z)) + if (!PyArg_Parse(arg, "D:polar", &z)) { goto exit; + } return_value = cmath_polar_impl(module, z); exit: @@ -721,8 +739,9 @@ cmath_rect(PyModuleDef *module, PyObject *args) double phi; if (!PyArg_ParseTuple(args, "dd:rect", - &r, &phi)) + &r, &phi)) { goto exit; + } return_value = cmath_rect_impl(module, r, phi); exit: @@ -747,8 +766,9 @@ cmath_isfinite(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_complex z; - if (!PyArg_Parse(arg, "D:isfinite", &z)) + if (!PyArg_Parse(arg, "D:isfinite", &z)) { goto exit; + } return_value = cmath_isfinite_impl(module, z); exit: @@ -773,8 +793,9 @@ cmath_isnan(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_complex z; - if (!PyArg_Parse(arg, "D:isnan", &z)) + if (!PyArg_Parse(arg, "D:isnan", &z)) { goto exit; + } return_value = cmath_isnan_impl(module, z); exit: @@ -799,8 +820,9 @@ cmath_isinf(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_complex z; - if (!PyArg_Parse(arg, "D:isinf", &z)) + if (!PyArg_Parse(arg, "D:isinf", &z)) { goto exit; + } return_value = cmath_isinf_impl(module, z); exit: @@ -847,14 +869,16 @@ cmath_isclose(PyModuleDef *module, PyObject *args, PyObject *kwargs) int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "DD|$dd:isclose", _keywords, - &a, &b, &rel_tol, &abs_tol)) + &a, &b, &rel_tol, &abs_tol)) { goto exit; + } _return_value = cmath_isclose_impl(module, a, b, rel_tol, abs_tol); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyBool_FromLong((long)_return_value); exit: return return_value; } -/*[clinic end generated code: output=229e9c48c9d27362 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f166205b4beb1826 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/fcntlmodule.c.h b/Modules/clinic/fcntlmodule.c.h index d9a151797e..104b4823f9 100644 --- a/Modules/clinic/fcntlmodule.c.h +++ b/Modules/clinic/fcntlmodule.c.h @@ -33,8 +33,9 @@ fcntl_fcntl(PyModuleDef *module, PyObject *args) PyObject *arg = NULL; if (!PyArg_ParseTuple(args, "O&i|O:fcntl", - conv_descriptor, &fd, &code, &arg)) + conv_descriptor, &fd, &code, &arg)) { goto exit; + } return_value = fcntl_fcntl_impl(module, fd, code, arg); exit: @@ -91,8 +92,9 @@ fcntl_ioctl(PyModuleDef *module, PyObject *args) int mutate_arg = 1; if (!PyArg_ParseTuple(args, "O&I|Op:ioctl", - conv_descriptor, &fd, &code, &ob_arg, &mutate_arg)) + conv_descriptor, &fd, &code, &ob_arg, &mutate_arg)) { goto exit; + } return_value = fcntl_ioctl_impl(module, fd, code, ob_arg, mutate_arg); exit: @@ -122,8 +124,9 @@ fcntl_flock(PyModuleDef *module, PyObject *args) int code; if (!PyArg_ParseTuple(args, "O&i:flock", - conv_descriptor, &fd, &code)) + conv_descriptor, &fd, &code)) { goto exit; + } return_value = fcntl_flock_impl(module, fd, code); exit: @@ -175,11 +178,12 @@ fcntl_lockf(PyModuleDef *module, PyObject *args) int whence = 0; if (!PyArg_ParseTuple(args, "O&i|OOi:lockf", - conv_descriptor, &fd, &code, &lenobj, &startobj, &whence)) + conv_descriptor, &fd, &code, &lenobj, &startobj, &whence)) { goto exit; + } return_value = fcntl_lockf_impl(module, fd, code, lenobj, startobj, whence); exit: return return_value; } -/*[clinic end generated code: output=b7d6e8fc2ad09c48 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b08537e9adc04ca2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/grpmodule.c.h b/Modules/clinic/grpmodule.c.h index eb5b59d29b..cd111aa4d6 100644 --- a/Modules/clinic/grpmodule.c.h +++ b/Modules/clinic/grpmodule.c.h @@ -24,8 +24,9 @@ grp_getgrgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *id; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:getgrgid", _keywords, - &id)) + &id)) { goto exit; + } return_value = grp_getgrgid_impl(module, id); exit: @@ -54,8 +55,9 @@ grp_getgrnam(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *name; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "U:getgrnam", _keywords, - &name)) + &name)) { goto exit; + } return_value = grp_getgrnam_impl(module, name); exit: @@ -82,4 +84,4 @@ grp_getgrall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) { return grp_getgrall_impl(module); } -/*[clinic end generated code: output=5191c25600afb1bd input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a8a097520206ccd6 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/md5module.c.h b/Modules/clinic/md5module.c.h index f5a3117f10..9c8987eb5e 100644 --- a/Modules/clinic/md5module.c.h +++ b/Modules/clinic/md5module.c.h @@ -85,11 +85,12 @@ _md5_md5(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *string = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:md5", _keywords, - &string)) + &string)) { goto exit; + } return_value = _md5_md5_impl(module, string); exit: return return_value; } -/*[clinic end generated code: output=0f803ded701aca54 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d701d041d387b081 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 2758d48cf0..158f94b73b 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -43,8 +43,9 @@ os_stat(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&p:stat", _keywords, - path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; + } return_value = os_stat_impl(module, &path, dir_fd, follow_symlinks); exit: @@ -78,8 +79,9 @@ os_lstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:lstat", _keywords, - path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd)) + path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; + } return_value = os_lstat_impl(module, &path, dir_fd); exit: @@ -141,11 +143,13 @@ os_access(PyModuleDef *module, PyObject *args, PyObject *kwargs) int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&pp:access", _keywords, - path_converter, &path, &mode, FACCESSAT_DIR_FD_CONVERTER, &dir_fd, &effective_ids, &follow_symlinks)) + path_converter, &path, &mode, FACCESSAT_DIR_FD_CONVERTER, &dir_fd, &effective_ids, &follow_symlinks)) { goto exit; + } _return_value = os_access_impl(module, &path, mode, dir_fd, effective_ids, follow_symlinks); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyBool_FromLong((long)_return_value); exit: @@ -179,11 +183,13 @@ os_ttyname(PyModuleDef *module, PyObject *arg) int fd; char *_return_value; - if (!PyArg_Parse(arg, "i:ttyname", &fd)) + if (!PyArg_Parse(arg, "i:ttyname", &fd)) { goto exit; + } _return_value = os_ttyname_impl(module, fd); - if (_return_value == NULL) + if (_return_value == NULL) { goto exit; + } return_value = PyUnicode_DecodeFSDefault(_return_value); exit: @@ -238,8 +244,9 @@ os_chdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("chdir", "path", 0, PATH_HAVE_FCHDIR); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:chdir", _keywords, - path_converter, &path)) + path_converter, &path)) { goto exit; + } return_value = os_chdir_impl(module, &path); exit: @@ -274,8 +281,9 @@ os_fchdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) int fd; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:fchdir", _keywords, - fildes_converter, &fd)) + fildes_converter, &fd)) { goto exit; + } return_value = os_fchdir_impl(module, fd); exit: @@ -328,8 +336,9 @@ os_chmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&p:chmod", _keywords, - path_converter, &path, &mode, FCHMODAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + path_converter, &path, &mode, FCHMODAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; + } return_value = os_chmod_impl(module, &path, mode, dir_fd, follow_symlinks); exit: @@ -364,8 +373,9 @@ os_fchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) int mode; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii:fchmod", _keywords, - &fd, &mode)) + &fd, &mode)) { goto exit; + } return_value = os_fchmod_impl(module, fd, mode); exit: @@ -400,8 +410,9 @@ os_lchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) int mode; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i:lchmod", _keywords, - path_converter, &path, &mode)) + path_converter, &path, &mode)) { goto exit; + } return_value = os_lchmod_impl(module, &path, mode); exit: @@ -444,8 +455,9 @@ os_chflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&k|p:chflags", _keywords, - path_converter, &path, &flags, &follow_symlinks)) + path_converter, &path, &flags, &follow_symlinks)) { goto exit; + } return_value = os_chflags_impl(module, &path, flags, follow_symlinks); exit: @@ -483,8 +495,9 @@ os_lchflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) unsigned long flags; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&k:lchflags", _keywords, - path_converter, &path, &flags)) + path_converter, &path, &flags)) { goto exit; + } return_value = os_lchflags_impl(module, &path, flags); exit: @@ -518,8 +531,9 @@ os_chroot(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("chroot", "path", 0, 0); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:chroot", _keywords, - path_converter, &path)) + path_converter, &path)) { goto exit; + } return_value = os_chroot_impl(module, &path); exit: @@ -553,8 +567,9 @@ os_fsync(PyModuleDef *module, PyObject *args, PyObject *kwargs) int fd; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:fsync", _keywords, - fildes_converter, &fd)) + fildes_converter, &fd)) { goto exit; + } return_value = os_fsync_impl(module, fd); exit: @@ -607,8 +622,9 @@ os_fdatasync(PyModuleDef *module, PyObject *args, PyObject *kwargs) int fd; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:fdatasync", _keywords, - fildes_converter, &fd)) + fildes_converter, &fd)) { goto exit; + } return_value = os_fdatasync_impl(module, fd); exit: @@ -668,8 +684,9 @@ os_chown(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&|$O&p:chown", _keywords, - path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid, FCHOWNAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid, FCHOWNAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; + } return_value = os_chown_impl(module, &path, uid, gid, dir_fd, follow_symlinks); exit: @@ -707,8 +724,9 @@ os_fchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) gid_t gid; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iO&O&:fchown", _keywords, - &fd, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) + &fd, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) { goto exit; + } return_value = os_fchown_impl(module, fd, uid, gid); exit: @@ -744,8 +762,9 @@ os_lchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) gid_t gid; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&:lchown", _keywords, - path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) + path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) { goto exit; + } return_value = os_lchown_impl(module, &path, uid, gid); exit: @@ -831,8 +850,9 @@ os_link(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$O&O&p:link", _keywords, - path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd, &follow_symlinks)) + path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd, &follow_symlinks)) { goto exit; + } return_value = os_link_impl(module, &src, &dst, src_dir_fd, dst_dir_fd, follow_symlinks); exit: @@ -877,8 +897,9 @@ os_listdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("listdir", "path", 1, PATH_HAVE_FDOPENDIR); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&:listdir", _keywords, - path_converter, &path)) + path_converter, &path)) { goto exit; + } return_value = os_listdir_impl(module, &path); exit: @@ -907,8 +928,9 @@ os__getfullpathname(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; path_t path = PATH_T_INITIALIZE("_getfullpathname", "path", 0, 0); - if (!PyArg_Parse(arg, "O&:_getfullpathname", path_converter, &path)) + if (!PyArg_Parse(arg, "O&:_getfullpathname", path_converter, &path)) { goto exit; + } return_value = os__getfullpathname_impl(module, &path); exit: @@ -940,8 +962,9 @@ os__getfinalpathname(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *path; - if (!PyArg_Parse(arg, "U:_getfinalpathname", &path)) + if (!PyArg_Parse(arg, "U:_getfinalpathname", &path)) { goto exit; + } return_value = os__getfinalpathname_impl(module, path); exit: @@ -969,8 +992,9 @@ os__isdir(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; path_t path = PATH_T_INITIALIZE("_isdir", "path", 0, 0); - if (!PyArg_Parse(arg, "O&:_isdir", path_converter, &path)) + if (!PyArg_Parse(arg, "O&:_isdir", path_converter, &path)) { goto exit; + } return_value = os__isdir_impl(module, &path); exit: @@ -1004,8 +1028,9 @@ os__getvolumepathname(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *path; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "U:_getvolumepathname", _keywords, - &path)) + &path)) { goto exit; + } return_value = os__getvolumepathname_impl(module, path); exit: @@ -1043,8 +1068,9 @@ os_mkdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i$O&:mkdir", _keywords, - path_converter, &path, &mode, MKDIRAT_DIR_FD_CONVERTER, &dir_fd)) + path_converter, &path, &mode, MKDIRAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; + } return_value = os_mkdir_impl(module, &path, mode, dir_fd); exit: @@ -1074,8 +1100,9 @@ os_nice(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int increment; - if (!PyArg_Parse(arg, "i:nice", &increment)) + if (!PyArg_Parse(arg, "i:nice", &increment)) { goto exit; + } return_value = os_nice_impl(module, increment); exit: @@ -1107,8 +1134,9 @@ os_getpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) int who; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii:getpriority", _keywords, - &which, &who)) + &which, &who)) { goto exit; + } return_value = os_getpriority_impl(module, which, who); exit: @@ -1141,8 +1169,9 @@ os_setpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) int priority; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iii:setpriority", _keywords, - &which, &who, &priority)) + &which, &who, &priority)) { goto exit; + } return_value = os_setpriority_impl(module, which, who, priority); exit: @@ -1181,8 +1210,9 @@ os_rename(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dst_dir_fd = DEFAULT_DIR_FD; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$O&O&:rename", _keywords, - path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) + path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) { goto exit; + } return_value = os_rename_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); exit: @@ -1224,8 +1254,9 @@ os_replace(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dst_dir_fd = DEFAULT_DIR_FD; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$O&O&:replace", _keywords, - path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) + path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) { goto exit; + } return_value = os_replace_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); exit: @@ -1263,8 +1294,9 @@ os_rmdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:rmdir", _keywords, - path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) + path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; + } return_value = os_rmdir_impl(module, &path, dir_fd); exit: @@ -1297,11 +1329,13 @@ os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) long _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "u:system", _keywords, - &command)) + &command)) { goto exit; + } _return_value = os_system_impl(module, command); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong(_return_value); exit: @@ -1333,11 +1367,13 @@ os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) long _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:system", _keywords, - PyUnicode_FSConverter, &command)) + PyUnicode_FSConverter, &command)) { goto exit; + } _return_value = os_system_impl(module, command); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong(_return_value); exit: @@ -1367,8 +1403,9 @@ os_umask(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int mask; - if (!PyArg_Parse(arg, "i:umask", &mask)) + if (!PyArg_Parse(arg, "i:umask", &mask)) { goto exit; + } return_value = os_umask_impl(module, mask); exit: @@ -1401,8 +1438,9 @@ os_unlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:unlink", _keywords, - path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) + path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; + } return_value = os_unlink_impl(module, &path, dir_fd); exit: @@ -1438,8 +1476,9 @@ os_remove(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:remove", _keywords, - path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) + path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; + } return_value = os_remove_impl(module, &path, dir_fd); exit: @@ -1522,8 +1561,9 @@ os_utime(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|O$OO&p:utime", _keywords, - path_converter, &path, ×, &ns, FUTIMENSAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) + path_converter, &path, ×, &ns, FUTIMENSAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; + } return_value = os_utime_impl(module, &path, times, ns, dir_fd, follow_symlinks); exit: @@ -1553,8 +1593,9 @@ os__exit(PyModuleDef *module, PyObject *args, PyObject *kwargs) int status; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:_exit", _keywords, - &status)) + &status)) { goto exit; + } return_value = os__exit_impl(module, status); exit: @@ -1588,8 +1629,9 @@ os_execv(PyModuleDef *module, PyObject *args) PyObject *argv; if (!PyArg_ParseTuple(args, "O&O:execv", - PyUnicode_FSConverter, &path, &argv)) + PyUnicode_FSConverter, &path, &argv)) { goto exit; + } return_value = os_execv_impl(module, path, argv); exit: @@ -1633,8 +1675,9 @@ os_execve(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *env; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&OO:execve", _keywords, - path_converter, &path, &argv, &env)) + path_converter, &path, &argv, &env)) { goto exit; + } return_value = os_execve_impl(module, &path, argv, env); exit: @@ -1676,8 +1719,9 @@ os_spawnv(PyModuleDef *module, PyObject *args) PyObject *argv; if (!PyArg_ParseTuple(args, "iO&O:spawnv", - &mode, PyUnicode_FSConverter, &path, &argv)) + &mode, PyUnicode_FSConverter, &path, &argv)) { goto exit; + } return_value = os_spawnv_impl(module, mode, path, argv); exit: @@ -1723,8 +1767,9 @@ os_spawnve(PyModuleDef *module, PyObject *args) PyObject *env; if (!PyArg_ParseTuple(args, "iO&OO:spawnve", - &mode, PyUnicode_FSConverter, &path, &argv, &env)) + &mode, PyUnicode_FSConverter, &path, &argv, &env)) { goto exit; + } return_value = os_spawnve_impl(module, mode, path, argv, env); exit: @@ -1806,8 +1851,9 @@ os_sched_get_priority_max(PyModuleDef *module, PyObject *args, PyObject *kwargs) int policy; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:sched_get_priority_max", _keywords, - &policy)) + &policy)) { goto exit; + } return_value = os_sched_get_priority_max_impl(module, policy); exit: @@ -1838,8 +1884,9 @@ os_sched_get_priority_min(PyModuleDef *module, PyObject *args, PyObject *kwargs) int policy; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:sched_get_priority_min", _keywords, - &policy)) + &policy)) { goto exit; + } return_value = os_sched_get_priority_min_impl(module, policy); exit: @@ -1870,8 +1917,9 @@ os_sched_getscheduler(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; pid_t pid; - if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getscheduler", &pid)) + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getscheduler", &pid)) { goto exit; + } return_value = os_sched_getscheduler_impl(module, pid); exit: @@ -1902,8 +1950,9 @@ os_sched_param(PyTypeObject *type, PyObject *args, PyObject *kwargs) PyObject *sched_priority; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:sched_param", _keywords, - &sched_priority)) + &sched_priority)) { goto exit; + } return_value = os_sched_param_impl(type, sched_priority); exit: @@ -1939,8 +1988,9 @@ os_sched_setscheduler(PyModuleDef *module, PyObject *args) struct sched_param param; if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "iO&:sched_setscheduler", - &pid, &policy, convert_sched_param, ¶m)) + &pid, &policy, convert_sched_param, ¶m)) { goto exit; + } return_value = os_sched_setscheduler_impl(module, pid, policy, ¶m); exit: @@ -1972,8 +2022,9 @@ os_sched_getparam(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; pid_t pid; - if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getparam", &pid)) + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getparam", &pid)) { goto exit; + } return_value = os_sched_getparam_impl(module, pid); exit: @@ -2008,8 +2059,9 @@ os_sched_setparam(PyModuleDef *module, PyObject *args) struct sched_param param; if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "O&:sched_setparam", - &pid, convert_sched_param, ¶m)) + &pid, convert_sched_param, ¶m)) { goto exit; + } return_value = os_sched_setparam_impl(module, pid, ¶m); exit: @@ -2041,11 +2093,13 @@ os_sched_rr_get_interval(PyModuleDef *module, PyObject *arg) pid_t pid; double _return_value; - if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_rr_get_interval", &pid)) + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_rr_get_interval", &pid)) { goto exit; + } _return_value = os_sched_rr_get_interval_impl(module, pid); - if ((_return_value == -1.0) && PyErr_Occurred()) + if ((_return_value == -1.0) && PyErr_Occurred()) { goto exit; + } return_value = PyFloat_FromDouble(_return_value); exit: @@ -2100,8 +2154,9 @@ os_sched_setaffinity(PyModuleDef *module, PyObject *args) PyObject *mask; if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "O:sched_setaffinity", - &pid, &mask)) + &pid, &mask)) { goto exit; + } return_value = os_sched_setaffinity_impl(module, pid, mask); exit: @@ -2132,8 +2187,9 @@ os_sched_getaffinity(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; pid_t pid; - if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getaffinity", &pid)) + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getaffinity", &pid)) { goto exit; + } return_value = os_sched_getaffinity_impl(module, pid); exit: @@ -2322,8 +2378,9 @@ os_getpgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) pid_t pid; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" _Py_PARSE_PID ":getpgid", _keywords, - &pid)) + &pid)) { goto exit; + } return_value = os_getpgid_impl(module, pid); exit: @@ -2467,8 +2524,9 @@ os_kill(PyModuleDef *module, PyObject *args) Py_ssize_t signal; if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "n:kill", - &pid, &signal)) + &pid, &signal)) { goto exit; + } return_value = os_kill_impl(module, pid, signal); exit: @@ -2499,8 +2557,9 @@ os_killpg(PyModuleDef *module, PyObject *args) int signal; if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "i:killpg", - &pgid, &signal)) + &pgid, &signal)) { goto exit; + } return_value = os_killpg_impl(module, pgid, signal); exit: @@ -2529,8 +2588,9 @@ os_plock(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int op; - if (!PyArg_Parse(arg, "i:plock", &op)) + if (!PyArg_Parse(arg, "i:plock", &op)) { goto exit; + } return_value = os_plock_impl(module, op); exit: @@ -2559,8 +2619,9 @@ os_setuid(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; uid_t uid; - if (!PyArg_Parse(arg, "O&:setuid", _Py_Uid_Converter, &uid)) + if (!PyArg_Parse(arg, "O&:setuid", _Py_Uid_Converter, &uid)) { goto exit; + } return_value = os_setuid_impl(module, uid); exit: @@ -2589,8 +2650,9 @@ os_seteuid(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; uid_t euid; - if (!PyArg_Parse(arg, "O&:seteuid", _Py_Uid_Converter, &euid)) + if (!PyArg_Parse(arg, "O&:seteuid", _Py_Uid_Converter, &euid)) { goto exit; + } return_value = os_seteuid_impl(module, euid); exit: @@ -2619,8 +2681,9 @@ os_setegid(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; gid_t egid; - if (!PyArg_Parse(arg, "O&:setegid", _Py_Gid_Converter, &egid)) + if (!PyArg_Parse(arg, "O&:setegid", _Py_Gid_Converter, &egid)) { goto exit; + } return_value = os_setegid_impl(module, egid); exit: @@ -2651,8 +2714,9 @@ os_setreuid(PyModuleDef *module, PyObject *args) uid_t euid; if (!PyArg_ParseTuple(args, "O&O&:setreuid", - _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid)) + _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid)) { goto exit; + } return_value = os_setreuid_impl(module, ruid, euid); exit: @@ -2683,8 +2747,9 @@ os_setregid(PyModuleDef *module, PyObject *args) gid_t egid; if (!PyArg_ParseTuple(args, "O&O&:setregid", - _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid)) + _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid)) { goto exit; + } return_value = os_setregid_impl(module, rgid, egid); exit: @@ -2713,8 +2778,9 @@ os_setgid(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; gid_t gid; - if (!PyArg_Parse(arg, "O&:setgid", _Py_Gid_Converter, &gid)) + if (!PyArg_Parse(arg, "O&:setgid", _Py_Gid_Converter, &gid)) { goto exit; + } return_value = os_setgid_impl(module, gid); exit: @@ -2761,8 +2827,9 @@ os_wait3(PyModuleDef *module, PyObject *args, PyObject *kwargs) int options; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:wait3", _keywords, - &options)) + &options)) { goto exit; + } return_value = os_wait3_impl(module, options); exit: @@ -2797,8 +2864,9 @@ os_wait4(PyModuleDef *module, PyObject *args, PyObject *kwargs) int options; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" _Py_PARSE_PID "i:wait4", _keywords, - &pid, &options)) + &pid, &options)) { goto exit; + } return_value = os_wait4_impl(module, pid, options); exit: @@ -2841,8 +2909,9 @@ os_waitid(PyModuleDef *module, PyObject *args) int options; if (!PyArg_ParseTuple(args, "i" _Py_PARSE_PID "i:waitid", - &idtype, &id, &options)) + &idtype, &id, &options)) { goto exit; + } return_value = os_waitid_impl(module, idtype, id, options); exit: @@ -2878,8 +2947,9 @@ os_waitpid(PyModuleDef *module, PyObject *args) int options; if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "i:waitpid", - &pid, &options)) + &pid, &options)) { goto exit; + } return_value = os_waitpid_impl(module, pid, options); exit: @@ -2915,8 +2985,9 @@ os_waitpid(PyModuleDef *module, PyObject *args) int options; if (!PyArg_ParseTuple(args, "" _Py_PARSE_INTPTR "i:waitpid", - &pid, &options)) + &pid, &options)) { goto exit; + } return_value = os_waitpid_impl(module, pid, options); exit: @@ -2986,8 +3057,9 @@ os_symlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|p$O&:symlink", _keywords, - path_converter, &src, path_converter, &dst, &target_is_directory, SYMLINKAT_DIR_FD_CONVERTER, &dir_fd)) + path_converter, &src, path_converter, &dst, &target_is_directory, SYMLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; + } return_value = os_symlink_impl(module, &src, &dst, target_is_directory, dir_fd); exit: @@ -3047,8 +3119,9 @@ os_getsid(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; pid_t pid; - if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":getsid", &pid)) + if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":getsid", &pid)) { goto exit; + } return_value = os_getsid_impl(module, pid); exit: @@ -3101,8 +3174,9 @@ os_setpgid(PyModuleDef *module, PyObject *args) pid_t pgrp; if (!PyArg_ParseTuple(args, "" _Py_PARSE_PID "" _Py_PARSE_PID ":setpgid", - &pid, &pgrp)) + &pid, &pgrp)) { goto exit; + } return_value = os_setpgid_impl(module, pid, pgrp); exit: @@ -3131,8 +3205,9 @@ os_tcgetpgrp(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int fd; - if (!PyArg_Parse(arg, "i:tcgetpgrp", &fd)) + if (!PyArg_Parse(arg, "i:tcgetpgrp", &fd)) { goto exit; + } return_value = os_tcgetpgrp_impl(module, fd); exit: @@ -3163,8 +3238,9 @@ os_tcsetpgrp(PyModuleDef *module, PyObject *args) pid_t pgid; if (!PyArg_ParseTuple(args, "i" _Py_PARSE_PID ":tcsetpgrp", - &fd, &pgid)) + &fd, &pgid)) { goto exit; + } return_value = os_tcsetpgrp_impl(module, fd, pgid); exit: @@ -3203,11 +3279,13 @@ os_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|i$O&:open", _keywords, - path_converter, &path, &flags, &mode, OPENAT_DIR_FD_CONVERTER, &dir_fd)) + path_converter, &path, &flags, &mode, OPENAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; + } _return_value = os_open_impl(module, &path, flags, mode, dir_fd); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -3237,8 +3315,9 @@ os_close(PyModuleDef *module, PyObject *args, PyObject *kwargs) int fd; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:close", _keywords, - &fd)) + &fd)) { goto exit; + } return_value = os_close_impl(module, fd); exit: @@ -3265,8 +3344,9 @@ os_closerange(PyModuleDef *module, PyObject *args) int fd_high; if (!PyArg_ParseTuple(args, "ii:closerange", - &fd_low, &fd_high)) + &fd_low, &fd_high)) { goto exit; + } return_value = os_closerange_impl(module, fd_low, fd_high); exit: @@ -3292,11 +3372,13 @@ os_dup(PyModuleDef *module, PyObject *arg) int fd; int _return_value; - if (!PyArg_Parse(arg, "i:dup", &fd)) + if (!PyArg_Parse(arg, "i:dup", &fd)) { goto exit; + } _return_value = os_dup_impl(module, fd); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -3325,8 +3407,9 @@ os_dup2(PyModuleDef *module, PyObject *args, PyObject *kwargs) int inheritable = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii|p:dup2", _keywords, - &fd, &fd2, &inheritable)) + &fd, &fd2, &inheritable)) { goto exit; + } return_value = os_dup2_impl(module, fd, fd2, inheritable); exit: @@ -3363,8 +3446,9 @@ os_lockf(PyModuleDef *module, PyObject *args) Py_off_t length; if (!PyArg_ParseTuple(args, "iiO&:lockf", - &fd, &command, Py_off_t_converter, &length)) + &fd, &command, Py_off_t_converter, &length)) { goto exit; + } return_value = os_lockf_impl(module, fd, command, length); exit: @@ -3398,11 +3482,13 @@ os_lseek(PyModuleDef *module, PyObject *args) Py_off_t _return_value; if (!PyArg_ParseTuple(args, "iO&i:lseek", - &fd, Py_off_t_converter, &position, &how)) + &fd, Py_off_t_converter, &position, &how)) { goto exit; + } _return_value = os_lseek_impl(module, fd, position, how); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromPy_off_t(_return_value); exit: @@ -3429,8 +3515,9 @@ os_read(PyModuleDef *module, PyObject *args) Py_ssize_t length; if (!PyArg_ParseTuple(args, "in:read", - &fd, &length)) + &fd, &length)) { goto exit; + } return_value = os_read_impl(module, fd, length); exit: @@ -3468,11 +3555,13 @@ os_readv(PyModuleDef *module, PyObject *args) Py_ssize_t _return_value; if (!PyArg_ParseTuple(args, "iO:readv", - &fd, &buffers)) + &fd, &buffers)) { goto exit; + } _return_value = os_readv_impl(module, fd, buffers); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromSsize_t(_return_value); exit: @@ -3507,8 +3596,9 @@ os_pread(PyModuleDef *module, PyObject *args) Py_off_t offset; if (!PyArg_ParseTuple(args, "iiO&:pread", - &fd, &length, Py_off_t_converter, &offset)) + &fd, &length, Py_off_t_converter, &offset)) { goto exit; + } return_value = os_pread_impl(module, fd, length, offset); exit: @@ -3538,17 +3628,20 @@ os_write(PyModuleDef *module, PyObject *args) Py_ssize_t _return_value; if (!PyArg_ParseTuple(args, "iy*:write", - &fd, &data)) + &fd, &data)) { goto exit; + } _return_value = os_write_impl(module, fd, &data); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromSsize_t(_return_value); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -3576,8 +3669,9 @@ os_fstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) int fd; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:fstat", _keywords, - &fd)) + &fd)) { goto exit; + } return_value = os_fstat_impl(module, fd); exit: @@ -3606,11 +3700,13 @@ os_isatty(PyModuleDef *module, PyObject *arg) int fd; int _return_value; - if (!PyArg_Parse(arg, "i:isatty", &fd)) + if (!PyArg_Parse(arg, "i:isatty", &fd)) { goto exit; + } _return_value = os_isatty_impl(module, fd); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyBool_FromLong((long)_return_value); exit: @@ -3668,8 +3764,9 @@ os_pipe2(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int flags; - if (!PyArg_Parse(arg, "i:pipe2", &flags)) + if (!PyArg_Parse(arg, "i:pipe2", &flags)) { goto exit; + } return_value = os_pipe2_impl(module, flags); exit: @@ -3704,11 +3801,13 @@ os_writev(PyModuleDef *module, PyObject *args) Py_ssize_t _return_value; if (!PyArg_ParseTuple(args, "iO:writev", - &fd, &buffers)) + &fd, &buffers)) { goto exit; + } _return_value = os_writev_impl(module, fd, buffers); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromSsize_t(_return_value); exit: @@ -3746,17 +3845,20 @@ os_pwrite(PyModuleDef *module, PyObject *args) Py_ssize_t _return_value; if (!PyArg_ParseTuple(args, "iy*O&:pwrite", - &fd, &buffer, Py_off_t_converter, &offset)) + &fd, &buffer, Py_off_t_converter, &offset)) { goto exit; + } _return_value = os_pwrite_impl(module, fd, &buffer, offset); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromSsize_t(_return_value); exit: /* Cleanup for buffer */ - if (buffer.obj) + if (buffer.obj) { PyBuffer_Release(&buffer); + } return return_value; } @@ -3792,8 +3894,9 @@ os_mkfifo(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i$O&:mkfifo", _keywords, - path_converter, &path, &mode, MKFIFOAT_DIR_FD_CONVERTER, &dir_fd)) + path_converter, &path, &mode, MKFIFOAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; + } return_value = os_mkfifo_impl(module, &path, mode, dir_fd); exit: @@ -3843,8 +3946,9 @@ os_mknod(PyModuleDef *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|iO&$O&:mknod", _keywords, - path_converter, &path, &mode, _Py_Dev_Converter, &device, MKNODAT_DIR_FD_CONVERTER, &dir_fd)) + path_converter, &path, &mode, _Py_Dev_Converter, &device, MKNODAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; + } return_value = os_mknod_impl(module, &path, mode, device, dir_fd); exit: @@ -3877,11 +3981,13 @@ os_major(PyModuleDef *module, PyObject *arg) dev_t device; unsigned int _return_value; - if (!PyArg_Parse(arg, "O&:major", _Py_Dev_Converter, &device)) + if (!PyArg_Parse(arg, "O&:major", _Py_Dev_Converter, &device)) { goto exit; + } _return_value = os_major_impl(module, device); - if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) + if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); exit: @@ -3911,11 +4017,13 @@ os_minor(PyModuleDef *module, PyObject *arg) dev_t device; unsigned int _return_value; - if (!PyArg_Parse(arg, "O&:minor", _Py_Dev_Converter, &device)) + if (!PyArg_Parse(arg, "O&:minor", _Py_Dev_Converter, &device)) { goto exit; + } _return_value = os_minor_impl(module, device); - if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) + if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); exit: @@ -3947,11 +4055,13 @@ os_makedev(PyModuleDef *module, PyObject *args) dev_t _return_value; if (!PyArg_ParseTuple(args, "ii:makedev", - &major, &minor)) + &major, &minor)) { goto exit; + } _return_value = os_makedev_impl(module, major, minor); - if ((_return_value == (dev_t)-1) && PyErr_Occurred()) + if ((_return_value == (dev_t)-1) && PyErr_Occurred()) { goto exit; + } return_value = _PyLong_FromDev(_return_value); exit: @@ -3982,8 +4092,9 @@ os_ftruncate(PyModuleDef *module, PyObject *args) Py_off_t length; if (!PyArg_ParseTuple(args, "iO&:ftruncate", - &fd, Py_off_t_converter, &length)) + &fd, Py_off_t_converter, &length)) { goto exit; + } return_value = os_ftruncate_impl(module, fd, length); exit: @@ -4018,8 +4129,9 @@ os_truncate(PyModuleDef *module, PyObject *args, PyObject *kwargs) Py_off_t length; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&:truncate", _keywords, - path_converter, &path, Py_off_t_converter, &length)) + path_converter, &path, Py_off_t_converter, &length)) { goto exit; + } return_value = os_truncate_impl(module, &path, length); exit: @@ -4058,8 +4170,9 @@ os_posix_fallocate(PyModuleDef *module, PyObject *args) Py_off_t length; if (!PyArg_ParseTuple(args, "iO&O&:posix_fallocate", - &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length)) + &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length)) { goto exit; + } return_value = os_posix_fallocate_impl(module, fd, offset, length); exit: @@ -4101,8 +4214,9 @@ os_posix_fadvise(PyModuleDef *module, PyObject *args) int advice; if (!PyArg_ParseTuple(args, "iO&O&i:posix_fadvise", - &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length, &advice)) + &fd, Py_off_t_converter, &offset, Py_off_t_converter, &length, &advice)) { goto exit; + } return_value = os_posix_fadvise_impl(module, fd, offset, length, advice); exit: @@ -4133,8 +4247,9 @@ os_putenv(PyModuleDef *module, PyObject *args) PyObject *value; if (!PyArg_ParseTuple(args, "UU:putenv", - &name, &value)) + &name, &value)) { goto exit; + } return_value = os_putenv_impl(module, name, value); exit: @@ -4165,8 +4280,9 @@ os_putenv(PyModuleDef *module, PyObject *args) PyObject *value = NULL; if (!PyArg_ParseTuple(args, "O&O&:putenv", - PyUnicode_FSConverter, &name, PyUnicode_FSConverter, &value)) + PyUnicode_FSConverter, &name, PyUnicode_FSConverter, &value)) { goto exit; + } return_value = os_putenv_impl(module, name, value); exit: @@ -4200,8 +4316,9 @@ os_unsetenv(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name = NULL; - if (!PyArg_Parse(arg, "O&:unsetenv", PyUnicode_FSConverter, &name)) + if (!PyArg_Parse(arg, "O&:unsetenv", PyUnicode_FSConverter, &name)) { goto exit; + } return_value = os_unsetenv_impl(module, name); exit: @@ -4231,8 +4348,9 @@ os_strerror(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int code; - if (!PyArg_Parse(arg, "i:strerror", &code)) + if (!PyArg_Parse(arg, "i:strerror", &code)) { goto exit; + } return_value = os_strerror_impl(module, code); exit: @@ -4260,11 +4378,13 @@ os_WCOREDUMP(PyModuleDef *module, PyObject *arg) int status; int _return_value; - if (!PyArg_Parse(arg, "i:WCOREDUMP", &status)) + if (!PyArg_Parse(arg, "i:WCOREDUMP", &status)) { goto exit; + } _return_value = os_WCOREDUMP_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyBool_FromLong((long)_return_value); exit: @@ -4299,11 +4419,13 @@ os_WIFCONTINUED(PyModuleDef *module, PyObject *args, PyObject *kwargs) int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFCONTINUED", _keywords, - &status)) + &status)) { goto exit; + } _return_value = os_WIFCONTINUED_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyBool_FromLong((long)_return_value); exit: @@ -4335,11 +4457,13 @@ os_WIFSTOPPED(PyModuleDef *module, PyObject *args, PyObject *kwargs) int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFSTOPPED", _keywords, - &status)) + &status)) { goto exit; + } _return_value = os_WIFSTOPPED_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyBool_FromLong((long)_return_value); exit: @@ -4371,11 +4495,13 @@ os_WIFSIGNALED(PyModuleDef *module, PyObject *args, PyObject *kwargs) int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFSIGNALED", _keywords, - &status)) + &status)) { goto exit; + } _return_value = os_WIFSIGNALED_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyBool_FromLong((long)_return_value); exit: @@ -4407,11 +4533,13 @@ os_WIFEXITED(PyModuleDef *module, PyObject *args, PyObject *kwargs) int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFEXITED", _keywords, - &status)) + &status)) { goto exit; + } _return_value = os_WIFEXITED_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyBool_FromLong((long)_return_value); exit: @@ -4443,11 +4571,13 @@ os_WEXITSTATUS(PyModuleDef *module, PyObject *args, PyObject *kwargs) int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WEXITSTATUS", _keywords, - &status)) + &status)) { goto exit; + } _return_value = os_WEXITSTATUS_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -4479,11 +4609,13 @@ os_WTERMSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WTERMSIG", _keywords, - &status)) + &status)) { goto exit; + } _return_value = os_WTERMSIG_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -4515,11 +4647,13 @@ os_WSTOPSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) int _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WSTOPSIG", _keywords, - &status)) + &status)) { goto exit; + } _return_value = os_WSTOPSIG_impl(module, status); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -4550,8 +4684,9 @@ os_fstatvfs(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int fd; - if (!PyArg_Parse(arg, "i:fstatvfs", &fd)) + if (!PyArg_Parse(arg, "i:fstatvfs", &fd)) { goto exit; + } return_value = os_fstatvfs_impl(module, fd); exit: @@ -4586,8 +4721,9 @@ os_statvfs(PyModuleDef *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("statvfs", "path", 0, PATH_HAVE_FSTATVFS); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:statvfs", _keywords, - path_converter, &path)) + path_converter, &path)) { goto exit; + } return_value = os_statvfs_impl(module, &path); exit: @@ -4621,8 +4757,9 @@ os__getdiskusage(PyModuleDef *module, PyObject *args, PyObject *kwargs) Py_UNICODE *path; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "u:_getdiskusage", _keywords, - &path)) + &path)) { goto exit; + } return_value = os__getdiskusage_impl(module, path); exit: @@ -4656,11 +4793,13 @@ os_fpathconf(PyModuleDef *module, PyObject *args) long _return_value; if (!PyArg_ParseTuple(args, "iO&:fpathconf", - &fd, conv_path_confname, &name)) + &fd, conv_path_confname, &name)) { goto exit; + } _return_value = os_fpathconf_impl(module, fd, name); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong(_return_value); exit: @@ -4697,11 +4836,13 @@ os_pathconf(PyModuleDef *module, PyObject *args, PyObject *kwargs) long _return_value; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&:pathconf", _keywords, - path_converter, &path, conv_path_confname, &name)) + path_converter, &path, conv_path_confname, &name)) { goto exit; + } _return_value = os_pathconf_impl(module, &path, name); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong(_return_value); exit: @@ -4733,8 +4874,9 @@ os_confstr(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int name; - if (!PyArg_Parse(arg, "O&:confstr", conv_confstr_confname, &name)) + if (!PyArg_Parse(arg, "O&:confstr", conv_confstr_confname, &name)) { goto exit; + } return_value = os_confstr_impl(module, name); exit: @@ -4764,11 +4906,13 @@ os_sysconf(PyModuleDef *module, PyObject *arg) int name; long _return_value; - if (!PyArg_Parse(arg, "O&:sysconf", conv_sysconf_confname, &name)) + if (!PyArg_Parse(arg, "O&:sysconf", conv_sysconf_confname, &name)) { goto exit; + } _return_value = os_sysconf_impl(module, name); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong(_return_value); exit: @@ -4847,8 +4991,9 @@ os_device_encoding(PyModuleDef *module, PyObject *args, PyObject *kwargs) int fd; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:device_encoding", _keywords, - &fd)) + &fd)) { goto exit; + } return_value = os_device_encoding_impl(module, fd); exit: @@ -4878,8 +5023,9 @@ os_setresuid(PyModuleDef *module, PyObject *args) uid_t suid; if (!PyArg_ParseTuple(args, "O&O&O&:setresuid", - _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid, _Py_Uid_Converter, &suid)) + _Py_Uid_Converter, &ruid, _Py_Uid_Converter, &euid, _Py_Uid_Converter, &suid)) { goto exit; + } return_value = os_setresuid_impl(module, ruid, euid, suid); exit: @@ -4911,8 +5057,9 @@ os_setresgid(PyModuleDef *module, PyObject *args) gid_t sgid; if (!PyArg_ParseTuple(args, "O&O&O&:setresgid", - _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid, _Py_Gid_Converter, &sgid)) + _Py_Gid_Converter, &rgid, _Py_Gid_Converter, &egid, _Py_Gid_Converter, &sgid)) { goto exit; + } return_value = os_setresgid_impl(module, rgid, egid, sgid); exit: @@ -4995,8 +5142,9 @@ os_getxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$p:getxattr", _keywords, - path_converter, &path, path_converter, &attribute, &follow_symlinks)) + path_converter, &path, path_converter, &attribute, &follow_symlinks)) { goto exit; + } return_value = os_getxattr_impl(module, &path, &attribute, follow_symlinks); exit: @@ -5043,8 +5191,9 @@ os_setxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&y*|i$p:setxattr", _keywords, - path_converter, &path, path_converter, &attribute, &value, &flags, &follow_symlinks)) + path_converter, &path, path_converter, &attribute, &value, &flags, &follow_symlinks)) { goto exit; + } return_value = os_setxattr_impl(module, &path, &attribute, &value, flags, follow_symlinks); exit: @@ -5053,8 +5202,9 @@ exit: /* Cleanup for attribute */ path_cleanup(&attribute); /* Cleanup for value */ - if (value.obj) + if (value.obj) { PyBuffer_Release(&value); + } return return_value; } @@ -5091,8 +5241,9 @@ os_removexattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$p:removexattr", _keywords, - path_converter, &path, path_converter, &attribute, &follow_symlinks)) + path_converter, &path, path_converter, &attribute, &follow_symlinks)) { goto exit; + } return_value = os_removexattr_impl(module, &path, &attribute, follow_symlinks); exit: @@ -5135,8 +5286,9 @@ os_listxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&$p:listxattr", _keywords, - path_converter, &path, &follow_symlinks)) + path_converter, &path, &follow_symlinks)) { goto exit; + } return_value = os_listxattr_impl(module, &path, follow_symlinks); exit: @@ -5166,8 +5318,9 @@ os_urandom(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; Py_ssize_t size; - if (!PyArg_Parse(arg, "n:urandom", &size)) + if (!PyArg_Parse(arg, "n:urandom", &size)) { goto exit; + } return_value = os_urandom_impl(module, size); exit: @@ -5215,11 +5368,13 @@ os_get_inheritable(PyModuleDef *module, PyObject *arg) int fd; int _return_value; - if (!PyArg_Parse(arg, "i:get_inheritable", &fd)) + if (!PyArg_Parse(arg, "i:get_inheritable", &fd)) { goto exit; + } _return_value = os_get_inheritable_impl(module, fd); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyBool_FromLong((long)_return_value); exit: @@ -5246,8 +5401,9 @@ os_set_inheritable(PyModuleDef *module, PyObject *args) int inheritable; if (!PyArg_ParseTuple(args, "ii:set_inheritable", - &fd, &inheritable)) + &fd, &inheritable)) { goto exit; + } return_value = os_set_inheritable_impl(module, fd, inheritable); exit: @@ -5275,11 +5431,13 @@ os_get_handle_inheritable(PyModuleDef *module, PyObject *arg) Py_intptr_t handle; int _return_value; - if (!PyArg_Parse(arg, "" _Py_PARSE_INTPTR ":get_handle_inheritable", &handle)) + if (!PyArg_Parse(arg, "" _Py_PARSE_INTPTR ":get_handle_inheritable", &handle)) { goto exit; + } _return_value = os_get_handle_inheritable_impl(module, handle); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyBool_FromLong((long)_return_value); exit: @@ -5311,8 +5469,9 @@ os_set_handle_inheritable(PyModuleDef *module, PyObject *args) int inheritable; if (!PyArg_ParseTuple(args, "" _Py_PARSE_INTPTR "p:set_handle_inheritable", - &handle, &inheritable)) + &handle, &inheritable)) { goto exit; + } return_value = os_set_handle_inheritable_impl(module, handle, inheritable); exit: @@ -5345,8 +5504,9 @@ os_fspath(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *path; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:fspath", _keywords, - &path)) + &path)) { goto exit; + } return_value = os_fspath_impl(module, path); exit: @@ -5824,4 +5984,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=e64e246b8270abda input=a9049054013a1b77]*/ +/*[clinic end generated code: output=31dd4f672c8a6f8c input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pwdmodule.c.h b/Modules/clinic/pwdmodule.c.h index 9de2e4ff2a..6b50464b00 100644 --- a/Modules/clinic/pwdmodule.c.h +++ b/Modules/clinic/pwdmodule.c.h @@ -33,8 +33,9 @@ pwd_getpwnam(PyModuleDef *module, PyObject *arg_) PyObject *return_value = NULL; PyObject *arg; - if (!PyArg_Parse(arg_, "U:getpwnam", &arg)) + if (!PyArg_Parse(arg_, "U:getpwnam", &arg)) { goto exit; + } return_value = pwd_getpwnam_impl(module, arg); exit: @@ -68,4 +69,4 @@ pwd_getpwall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) #ifndef PWD_GETPWALL_METHODDEF #define PWD_GETPWALL_METHODDEF #endif /* !defined(PWD_GETPWALL_METHODDEF) */ -/*[clinic end generated code: output=2ed0ecf34fd3f98f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f807c89b44be0fde input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h index 379c5db637..0c1f3fc0fc 100644 --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -25,8 +25,9 @@ pyexpat_xmlparser_Parse(xmlparseobject *self, PyObject *args) int isfinal = 0; if (!PyArg_ParseTuple(args, "O|i:Parse", - &data, &isfinal)) + &data, &isfinal)) { goto exit; + } return_value = pyexpat_xmlparser_Parse_impl(self, data, isfinal); exit: @@ -60,8 +61,9 @@ pyexpat_xmlparser_SetBase(xmlparseobject *self, PyObject *arg) PyObject *return_value = NULL; const char *base; - if (!PyArg_Parse(arg, "s:SetBase", &base)) + if (!PyArg_Parse(arg, "s:SetBase", &base)) { goto exit; + } return_value = pyexpat_xmlparser_SetBase_impl(self, base); exit: @@ -129,8 +131,9 @@ pyexpat_xmlparser_ExternalEntityParserCreate(xmlparseobject *self, PyObject *arg const char *encoding = NULL; if (!PyArg_ParseTuple(args, "z|s:ExternalEntityParserCreate", - &context, &encoding)) + &context, &encoding)) { goto exit; + } return_value = pyexpat_xmlparser_ExternalEntityParserCreate_impl(self, context, encoding); exit: @@ -160,8 +163,9 @@ pyexpat_xmlparser_SetParamEntityParsing(xmlparseobject *self, PyObject *arg) PyObject *return_value = NULL; int flag; - if (!PyArg_Parse(arg, "i:SetParamEntityParsing", &flag)) + if (!PyArg_Parse(arg, "i:SetParamEntityParsing", &flag)) { goto exit; + } return_value = pyexpat_xmlparser_SetParamEntityParsing_impl(self, flag); exit: @@ -193,8 +197,9 @@ pyexpat_xmlparser_UseForeignDTD(xmlparseobject *self, PyObject *args) int flag = 1; if (!PyArg_ParseTuple(args, "|p:UseForeignDTD", - &flag)) + &flag)) { goto exit; + } return_value = pyexpat_xmlparser_UseForeignDTD_impl(self, flag); exit: @@ -244,8 +249,9 @@ pyexpat_ParserCreate(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *intern = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|zzO:ParserCreate", _keywords, - &encoding, &namespace_separator, &intern)) + &encoding, &namespace_separator, &intern)) { goto exit; + } return_value = pyexpat_ParserCreate_impl(module, encoding, namespace_separator, intern); exit: @@ -270,8 +276,9 @@ pyexpat_ErrorString(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; long code; - if (!PyArg_Parse(arg, "l:ErrorString", &code)) + if (!PyArg_Parse(arg, "l:ErrorString", &code)) { goto exit; + } return_value = pyexpat_ErrorString_impl(module, code); exit: @@ -281,4 +288,4 @@ exit: #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=bf4d99c9702d8a6c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=71a60d709647fbe3 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha1module.c.h b/Modules/clinic/sha1module.c.h index fa865baec8..6d3fa64334 100644 --- a/Modules/clinic/sha1module.c.h +++ b/Modules/clinic/sha1module.c.h @@ -85,11 +85,12 @@ _sha1_sha1(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *string = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha1", _keywords, - &string)) + &string)) { goto exit; + } return_value = _sha1_sha1_impl(module, string); exit: return return_value; } -/*[clinic end generated code: output=be19102f3120490a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=40df3f8955919e72 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha256module.c.h b/Modules/clinic/sha256module.c.h index c5fe188a9c..c429800118 100644 --- a/Modules/clinic/sha256module.c.h +++ b/Modules/clinic/sha256module.c.h @@ -85,8 +85,9 @@ _sha256_sha256(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *string = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha256", _keywords, - &string)) + &string)) { goto exit; + } return_value = _sha256_sha256_impl(module, string); exit: @@ -113,11 +114,12 @@ _sha256_sha224(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *string = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha224", _keywords, - &string)) + &string)) { goto exit; + } return_value = _sha256_sha224_impl(module, string); exit: return return_value; } -/*[clinic end generated code: output=354cedf3b632c7b2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e85cc4a223371d84 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha512module.c.h b/Modules/clinic/sha512module.c.h index c308739d44..94fb15ca84 100644 --- a/Modules/clinic/sha512module.c.h +++ b/Modules/clinic/sha512module.c.h @@ -103,8 +103,9 @@ _sha512_sha512(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *string = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha512", _keywords, - &string)) + &string)) { goto exit; + } return_value = _sha512_sha512_impl(module, string); exit: @@ -135,8 +136,9 @@ _sha512_sha384(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *string = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha384", _keywords, - &string)) + &string)) { goto exit; + } return_value = _sha512_sha384_impl(module, string); exit: @@ -168,4 +170,4 @@ exit: #ifndef _SHA512_SHA384_METHODDEF #define _SHA512_SHA384_METHODDEF #endif /* !defined(_SHA512_SHA384_METHODDEF) */ -/*[clinic end generated code: output=1c7d385731fee7c0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=845af47cea22e2a1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/signalmodule.c.h b/Modules/clinic/signalmodule.c.h index ec07ef1f8e..e0aaab67a6 100644 --- a/Modules/clinic/signalmodule.c.h +++ b/Modules/clinic/signalmodule.c.h @@ -23,11 +23,13 @@ signal_alarm(PyModuleDef *module, PyObject *arg) int seconds; long _return_value; - if (!PyArg_Parse(arg, "i:alarm", &seconds)) + if (!PyArg_Parse(arg, "i:alarm", &seconds)) { goto exit; + } _return_value = signal_alarm_impl(module, seconds); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong(_return_value); exit: @@ -85,8 +87,9 @@ signal_signal(PyModuleDef *module, PyObject *args) PyObject *handler; if (!PyArg_ParseTuple(args, "iO:signal", - &signalnum, &handler)) + &signalnum, &handler)) { goto exit; + } return_value = signal_signal_impl(module, signalnum, handler); exit: @@ -117,8 +120,9 @@ signal_getsignal(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int signalnum; - if (!PyArg_Parse(arg, "i:getsignal", &signalnum)) + if (!PyArg_Parse(arg, "i:getsignal", &signalnum)) { goto exit; + } return_value = signal_getsignal_impl(module, signalnum); exit: @@ -150,8 +154,9 @@ signal_siginterrupt(PyModuleDef *module, PyObject *args) int flag; if (!PyArg_ParseTuple(args, "ii:siginterrupt", - &signalnum, &flag)) + &signalnum, &flag)) { goto exit; + } return_value = signal_siginterrupt_impl(module, signalnum, flag); exit: @@ -189,8 +194,9 @@ signal_setitimer(PyModuleDef *module, PyObject *args) double interval = 0.0; if (!PyArg_ParseTuple(args, "id|d:setitimer", - &which, &seconds, &interval)) + &which, &seconds, &interval)) { goto exit; + } return_value = signal_setitimer_impl(module, which, seconds, interval); exit: @@ -219,8 +225,9 @@ signal_getitimer(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int which; - if (!PyArg_Parse(arg, "i:getitimer", &which)) + if (!PyArg_Parse(arg, "i:getitimer", &which)) { goto exit; + } return_value = signal_getitimer_impl(module, which); exit: @@ -251,8 +258,9 @@ signal_pthread_sigmask(PyModuleDef *module, PyObject *args) PyObject *mask; if (!PyArg_ParseTuple(args, "iO:pthread_sigmask", - &how, &mask)) + &how, &mask)) { goto exit; + } return_value = signal_pthread_sigmask_impl(module, how, mask); exit: @@ -344,8 +352,9 @@ signal_sigtimedwait(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "sigtimedwait", 2, 2, - &sigset, &timeout_obj)) + &sigset, &timeout_obj)) { goto exit; + } return_value = signal_sigtimedwait_impl(module, sigset, timeout_obj); exit: @@ -376,8 +385,9 @@ signal_pthread_kill(PyModuleDef *module, PyObject *args) int signalnum; if (!PyArg_ParseTuple(args, "li:pthread_kill", - &thread_id, &signalnum)) + &thread_id, &signalnum)) { goto exit; + } return_value = signal_pthread_kill_impl(module, thread_id, signalnum); exit: @@ -429,4 +439,4 @@ exit: #ifndef SIGNAL_PTHREAD_KILL_METHODDEF #define SIGNAL_PTHREAD_KILL_METHODDEF #endif /* !defined(SIGNAL_PTHREAD_KILL_METHODDEF) */ -/*[clinic end generated code: output=b99278c16c40ea43 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4b9519180a091536 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/spwdmodule.c.h b/Modules/clinic/spwdmodule.c.h index c0d18db589..51bda962c2 100644 --- a/Modules/clinic/spwdmodule.c.h +++ b/Modules/clinic/spwdmodule.c.h @@ -24,8 +24,9 @@ spwd_getspnam(PyModuleDef *module, PyObject *arg_) PyObject *return_value = NULL; PyObject *arg; - if (!PyArg_Parse(arg_, "U:getspnam", &arg)) + if (!PyArg_Parse(arg_, "U:getspnam", &arg)) { goto exit; + } return_value = spwd_getspnam_impl(module, arg); exit: @@ -65,4 +66,4 @@ spwd_getspall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) #ifndef SPWD_GETSPALL_METHODDEF #define SPWD_GETSPALL_METHODDEF #endif /* !defined(SPWD_GETSPALL_METHODDEF) */ -/*[clinic end generated code: output=6c178830413f7763 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2b7a384447e5f1e3 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/unicodedata.c.h b/Modules/clinic/unicodedata.c.h index d520c1e3dd..d481ccbe64 100644 --- a/Modules/clinic/unicodedata.c.h +++ b/Modules/clinic/unicodedata.c.h @@ -27,8 +27,9 @@ unicodedata_UCD_decimal(PyObject *self, PyObject *args) PyObject *default_value = NULL; if (!PyArg_ParseTuple(args, "C|O:decimal", - &chr, &default_value)) + &chr, &default_value)) { goto exit; + } return_value = unicodedata_UCD_decimal_impl(self, chr, default_value); exit: @@ -59,8 +60,9 @@ unicodedata_UCD_digit(PyObject *self, PyObject *args) PyObject *default_value = NULL; if (!PyArg_ParseTuple(args, "C|O:digit", - &chr, &default_value)) + &chr, &default_value)) { goto exit; + } return_value = unicodedata_UCD_digit_impl(self, chr, default_value); exit: @@ -92,8 +94,9 @@ unicodedata_UCD_numeric(PyObject *self, PyObject *args) PyObject *default_value = NULL; if (!PyArg_ParseTuple(args, "C|O:numeric", - &chr, &default_value)) + &chr, &default_value)) { goto exit; + } return_value = unicodedata_UCD_numeric_impl(self, chr, default_value); exit: @@ -118,8 +121,9 @@ unicodedata_UCD_category(PyObject *self, PyObject *arg) PyObject *return_value = NULL; int chr; - if (!PyArg_Parse(arg, "C:category", &chr)) + if (!PyArg_Parse(arg, "C:category", &chr)) { goto exit; + } return_value = unicodedata_UCD_category_impl(self, chr); exit: @@ -146,8 +150,9 @@ unicodedata_UCD_bidirectional(PyObject *self, PyObject *arg) PyObject *return_value = NULL; int chr; - if (!PyArg_Parse(arg, "C:bidirectional", &chr)) + if (!PyArg_Parse(arg, "C:bidirectional", &chr)) { goto exit; + } return_value = unicodedata_UCD_bidirectional_impl(self, chr); exit: @@ -175,11 +180,13 @@ unicodedata_UCD_combining(PyObject *self, PyObject *arg) int chr; int _return_value; - if (!PyArg_Parse(arg, "C:combining", &chr)) + if (!PyArg_Parse(arg, "C:combining", &chr)) { goto exit; + } _return_value = unicodedata_UCD_combining_impl(self, chr); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -208,11 +215,13 @@ unicodedata_UCD_mirrored(PyObject *self, PyObject *arg) int chr; int _return_value; - if (!PyArg_Parse(arg, "C:mirrored", &chr)) + if (!PyArg_Parse(arg, "C:mirrored", &chr)) { goto exit; + } _return_value = unicodedata_UCD_mirrored_impl(self, chr); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -237,8 +246,9 @@ unicodedata_UCD_east_asian_width(PyObject *self, PyObject *arg) PyObject *return_value = NULL; int chr; - if (!PyArg_Parse(arg, "C:east_asian_width", &chr)) + if (!PyArg_Parse(arg, "C:east_asian_width", &chr)) { goto exit; + } return_value = unicodedata_UCD_east_asian_width_impl(self, chr); exit: @@ -265,8 +275,9 @@ unicodedata_UCD_decomposition(PyObject *self, PyObject *arg) PyObject *return_value = NULL; int chr; - if (!PyArg_Parse(arg, "C:decomposition", &chr)) + if (!PyArg_Parse(arg, "C:decomposition", &chr)) { goto exit; + } return_value = unicodedata_UCD_decomposition_impl(self, chr); exit: @@ -296,8 +307,9 @@ unicodedata_UCD_normalize(PyObject *self, PyObject *args) PyObject *input; if (!PyArg_ParseTuple(args, "sO!:normalize", - &form, &PyUnicode_Type, &input)) + &form, &PyUnicode_Type, &input)) { goto exit; + } return_value = unicodedata_UCD_normalize_impl(self, form, input); exit: @@ -327,8 +339,9 @@ unicodedata_UCD_name(PyObject *self, PyObject *args) PyObject *default_value = NULL; if (!PyArg_ParseTuple(args, "C|O:name", - &chr, &default_value)) + &chr, &default_value)) { goto exit; + } return_value = unicodedata_UCD_name_impl(self, chr, default_value); exit: @@ -358,11 +371,12 @@ unicodedata_UCD_lookup(PyObject *self, PyObject *arg) const char *name; Py_ssize_clean_t name_length; - if (!PyArg_Parse(arg, "s#:lookup", &name, &name_length)) + if (!PyArg_Parse(arg, "s#:lookup", &name, &name_length)) { goto exit; + } return_value = unicodedata_UCD_lookup_impl(self, name, name_length); exit: return return_value; } -/*[clinic end generated code: output=4f8da33c6bc6efc9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5313ce129da87b2f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index 7ca48cb16b..c657bcb644 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -28,14 +28,16 @@ zlib_compress(PyModuleDef *module, PyObject *args, PyObject *kwargs) int level = Z_DEFAULT_COMPRESSION; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|i:compress", _keywords, - &data, &level)) + &data, &level)) { goto exit; + } return_value = zlib_compress_impl(module, &data, level); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -69,14 +71,16 @@ zlib_decompress(PyModuleDef *module, PyObject *args) unsigned int bufsize = DEF_BUF_SIZE; if (!PyArg_ParseTuple(args, "y*|iO&:decompress", - &data, &wbits, capped_uint_converter, &bufsize)) + &data, &wbits, capped_uint_converter, &bufsize)) { goto exit; + } return_value = zlib_decompress_impl(module, &data, wbits, bufsize); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -131,14 +135,16 @@ zlib_compressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) Py_buffer zdict = {NULL, NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iiiiiy*:compressobj", _keywords, - &level, &method, &wbits, &memLevel, &strategy, &zdict)) + &level, &method, &wbits, &memLevel, &strategy, &zdict)) { goto exit; + } return_value = zlib_compressobj_impl(module, level, method, wbits, memLevel, strategy, &zdict); exit: /* Cleanup for zdict */ - if (zdict.obj) + if (zdict.obj) { PyBuffer_Release(&zdict); + } return return_value; } @@ -170,8 +176,9 @@ zlib_decompressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) PyObject *zdict = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iO:decompressobj", _keywords, - &wbits, &zdict)) + &wbits, &zdict)) { goto exit; + } return_value = zlib_decompressobj_impl(module, wbits, zdict); exit: @@ -203,14 +210,16 @@ zlib_Compress_compress(compobject *self, PyObject *arg) PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - if (!PyArg_Parse(arg, "y*:compress", &data)) + if (!PyArg_Parse(arg, "y*:compress", &data)) { goto exit; + } return_value = zlib_Compress_compress_impl(self, &data); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -247,14 +256,16 @@ zlib_Decompress_decompress(compobject *self, PyObject *args) unsigned int max_length = 0; if (!PyArg_ParseTuple(args, "y*|O&:decompress", - &data, capped_uint_converter, &max_length)) + &data, capped_uint_converter, &max_length)) { goto exit; + } return_value = zlib_Decompress_decompress_impl(self, &data, max_length); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -284,8 +295,9 @@ zlib_Compress_flush(compobject *self, PyObject *args) int mode = Z_FINISH; if (!PyArg_ParseTuple(args, "|i:flush", - &mode)) + &mode)) { goto exit; + } return_value = zlib_Compress_flush_impl(self, mode); exit: @@ -358,8 +370,9 @@ zlib_Decompress_flush(compobject *self, PyObject *args) unsigned int length = DEF_BUF_SIZE; if (!PyArg_ParseTuple(args, "|O&:flush", - capped_uint_converter, &length)) + capped_uint_converter, &length)) { goto exit; + } return_value = zlib_Decompress_flush_impl(self, length); exit: @@ -391,14 +404,16 @@ zlib_adler32(PyModuleDef *module, PyObject *args) unsigned int value = 1; if (!PyArg_ParseTuple(args, "y*|I:adler32", - &data, &value)) + &data, &value)) { goto exit; + } return_value = zlib_adler32_impl(module, &data, value); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -428,14 +443,16 @@ zlib_crc32(PyModuleDef *module, PyObject *args) unsigned int value = 0; if (!PyArg_ParseTuple(args, "y*|I:crc32", - &data, &value)) + &data, &value)) { goto exit; + } return_value = zlib_crc32_impl(module, &data, value); exit: /* Cleanup for data */ - if (data.obj) + if (data.obj) { PyBuffer_Release(&data); + } return return_value; } @@ -443,4 +460,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=8669ba9266c78433 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9bd8a093baa653b2 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 1f48144f1b96cca0f69320e353810bc13b64f180 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Thu, 9 Jun 2016 14:32:08 -0700 Subject: Clarify documentation for os.fspath(). --- Modules/clinic/posixmodule.c.h | 8 ++++---- Modules/posixmodule.c | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 158f94b73b..33621d80d9 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -5486,9 +5486,9 @@ PyDoc_STRVAR(os_fspath__doc__, "\n" "Return the file system path representation of the object.\n" "\n" -"If the object is str or bytes, then allow it to pass through with\n" -"an incremented refcount. If the object defines __fspath__(), then\n" -"return the result of that method. All other types raise a TypeError."); +"If the object is str or bytes, then allow it to pass through as-is. If the\n" +"object defines __fspath__(), then return the result of that method. All other\n" +"types raise a TypeError."); #define OS_FSPATH_METHODDEF \ {"fspath", (PyCFunction)os_fspath, METH_VARARGS|METH_KEYWORDS, os_fspath__doc__}, @@ -5984,4 +5984,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=31dd4f672c8a6f8c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1b91c3a100e75a4d input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index c55226576c..f4510dbec9 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12323,14 +12323,14 @@ os.fspath Return the file system path representation of the object. -If the object is str or bytes, then allow it to pass through with -an incremented refcount. If the object defines __fspath__(), then -return the result of that method. All other types raise a TypeError. +If the object is str or bytes, then allow it to pass through as-is. If the +object defines __fspath__(), then return the result of that method. All other +types raise a TypeError. [clinic start generated code]*/ static PyObject * os_fspath_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=51ef0c2772c1932a input=652c7c37e4be1c13]*/ +/*[clinic end generated code: output=51ef0c2772c1932a input=e357165f7b22490f]*/ { return PyOS_FSPath(path); } -- cgit v1.2.1 From 6562977b6a026761071df890854ac71d446bb3b1 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 9 Jun 2016 16:30:29 +0300 Subject: Issue #26282: PyArg_ParseTupleAndKeywords() and Argument Clinic now support positional-only and keyword parameters in the same function. --- Modules/_testcapimodule.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 3893523751..5d661f7235 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -1028,6 +1028,21 @@ getargs_keyword_only(PyObject *self, PyObject *args, PyObject *kwargs) return Py_BuildValue("iii", required, optional, keyword_only); } +/* test PyArg_ParseTupleAndKeywords positional-only arguments */ +static PyObject * +getargs_positional_only_and_keywords(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *keywords[] = {"", "", "keyword", NULL}; + int required = -1; + int optional = -1; + int keyword = -1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|ii", keywords, + &required, &optional, &keyword)) + return NULL; + return Py_BuildValue("iii", required, optional, keyword); +} + /* Functions to call PyArg_ParseTuple with integer format codes, and return the result. */ @@ -3963,6 +3978,9 @@ static PyMethodDef TestMethods[] = { METH_VARARGS|METH_KEYWORDS}, {"getargs_keyword_only", (PyCFunction)getargs_keyword_only, METH_VARARGS|METH_KEYWORDS}, + {"getargs_positional_only_and_keywords", + (PyCFunction)getargs_positional_only_and_keywords, + METH_VARARGS|METH_KEYWORDS}, {"getargs_b", getargs_b, METH_VARARGS}, {"getargs_B", getargs_B, METH_VARARGS}, {"getargs_h", getargs_h, METH_VARARGS}, -- cgit v1.2.1 From 2d3cd9e42e536185d9b1c6acbb4b900a848f5204 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 10 Jun 2016 14:37:21 -0700 Subject: Issue #27186: Add os.PathLike support to DirEntry Initial patch thanks to Jelle Zijlstra. --- Modules/posixmodule.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index f4510dbec9..ecdeab4925 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -11718,6 +11718,13 @@ DirEntry_repr(DirEntry *self) return PyUnicode_FromFormat("", self->name); } +static PyObject * +DirEntry_fspath(DirEntry *self) +{ + Py_INCREF(self->path); + return self->path; +} + static PyMemberDef DirEntry_members[] = { {"name", T_OBJECT_EX, offsetof(DirEntry, name), READONLY, "the entry's base filename, relative to scandir() \"path\" argument"}, @@ -11742,6 +11749,9 @@ static PyMethodDef DirEntry_methods[] = { {"inode", (PyCFunction)DirEntry_inode, METH_NOARGS, "return inode of the entry; cached per entry", }, + {"__fspath__", (PyCFunction)DirEntry_fspath, METH_NOARGS, + "returns the path for the entry", + }, {NULL} }; -- cgit v1.2.1 From 70619426311f86acbcade7d399288baa9c5cba52 Mon Sep 17 00:00:00 2001 From: doko Date: Mon, 13 Jun 2016 16:33:04 +0200 Subject: - Comment out socket (SO_REUSEPORT) and posix (O_SHLOCK, O_EXLOCK) constants exposed on the API which are not implemented on GNU/Hurd. They would not work at runtime anyway. --- Modules/posixmodule.c | 2 ++ Modules/socketmodule.c | 2 ++ 2 files changed, 4 insertions(+) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index ecdeab4925..7d8249095d 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12658,12 +12658,14 @@ all_ins(PyObject *m) #ifdef O_LARGEFILE if (PyModule_AddIntMacro(m, O_LARGEFILE)) return -1; #endif +#ifndef __GNU__ #ifdef O_SHLOCK if (PyModule_AddIntMacro(m, O_SHLOCK)) return -1; #endif #ifdef O_EXLOCK if (PyModule_AddIntMacro(m, O_EXLOCK)) return -1; #endif +#endif #ifdef O_EXEC if (PyModule_AddIntMacro(m, O_EXEC)) return -1; #endif diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index dc57810a07..6355e4a59a 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -6529,9 +6529,11 @@ PyInit__socket(void) #ifdef SO_OOBINLINE PyModule_AddIntMacro(m, SO_OOBINLINE); #endif +#ifndef __GNU__ #ifdef SO_REUSEPORT PyModule_AddIntMacro(m, SO_REUSEPORT); #endif +#endif #ifdef SO_SNDBUF PyModule_AddIntMacro(m, SO_SNDBUF); #endif -- cgit v1.2.1 From 2d3662708fb9ec5a153b8e27edac40036b91afd9 Mon Sep 17 00:00:00 2001 From: doko Date: Tue, 14 Jun 2016 07:27:58 +0200 Subject: - Modules/_collectionsmodule.c: Mark one more internal symbol as static. --- Modules/_collectionsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 3008879f98..3410dfec07 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -301,7 +301,7 @@ deque_append(dequeobject *deque, PyObject *item) PyDoc_STRVAR(append_doc, "Add an element to the right side of the deque."); -int +static int deque_appendleft_internal(dequeobject *deque, PyObject *item, Py_ssize_t maxlen) { if (deque->leftindex == 0) { -- cgit v1.2.1 From 23644a94ef72f52069c54ffa65a39267880b1e5e Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Tue, 14 Jun 2016 15:25:36 +0300 Subject: Issue #16864: Cursor.lastrowid now supports REPLACE statement Initial patch by Alex LordThorsen. --- Modules/_sqlite/cursor.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 23f30575cd..9b206785e5 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -698,7 +698,9 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* } Py_DECREF(self->lastrowid); - if (!multiple && statement_type == STATEMENT_INSERT) { + if (!multiple && + /* REPLACE is an alias for INSERT OR REPLACE */ + (statement_type == STATEMENT_INSERT || statement_type == STATEMENT_REPLACE)) { sqlite_int64 lastrowid; Py_BEGIN_ALLOW_THREADS lastrowid = sqlite3_last_insert_rowid(self->connection->db); -- cgit v1.2.1 From f32e3185f3655b7bafb6c0b1f9d1d3a70f07ca80 Mon Sep 17 00:00:00 2001 From: Xavier de Gaye Date: Wed, 15 Jun 2016 11:35:29 +0200 Subject: Issue #26862: SYS_getdents64 does not need to be defined on android API 21. --- Modules/_posixsubprocess.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index a0109fb270..0ca0aa5cda 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -21,8 +21,7 @@ #include #endif -#if defined(__ANDROID__) && !defined(SYS_getdents64) -/* Android doesn't expose syscalls, add the definition manually. */ +#if defined(__ANDROID__) && __ANDROID_API__ < 21 && !defined(SYS_getdents64) # include # define SYS_getdents64 __NR_getdents64 #endif -- cgit v1.2.1 From 7cf8527b1cd148771bd4ac2581a429db0bb95b81 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 17 Jun 2016 12:52:18 -0700 Subject: Issue #26536: socket.ioctl now supports SIO_LOOPBACK_FAST_PATH. Patch by Daniel Stokes. --- Modules/socketmodule.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 6355e4a59a..a8bdfe3e94 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -4053,6 +4053,17 @@ sock_ioctl(PySocketSockObject *s, PyObject *arg) return set_error(); } return PyLong_FromUnsignedLong(recv); } +#if defined(SIO_LOOPBACK_FAST_PATH) + case SIO_LOOPBACK_FAST_PATH: { + unsigned int option; + if (!PyArg_ParseTuple(arg, "kI:ioctl", &cmd, &option)) + return NULL; + if (WSAIoctl(s->sock_fd, cmd, &option, sizeof(option), + NULL, 0, &recv, NULL, NULL) == SOCKET_ERROR) { + return set_error(); + } + return PyLong_FromUnsignedLong(recv); } +#endif default: PyErr_Format(PyExc_ValueError, "invalid ioctl command %d", cmd); return NULL; @@ -4063,7 +4074,8 @@ PyDoc_STRVAR(sock_ioctl_doc, \n\ Control the socket with WSAIoctl syscall. Currently supported 'cmd' values are\n\ SIO_RCVALL: 'option' must be one of the socket.RCVALL_* constants.\n\ -SIO_KEEPALIVE_VALS: 'option' is a tuple of (onoff, timeout, interval)."); +SIO_KEEPALIVE_VALS: 'option' is a tuple of (onoff, timeout, interval).\n\ +SIO_LOOPBACK_FAST_PATH: 'option' is a boolean value, and is disabled by default"); #endif #if defined(MS_WINDOWS) @@ -7274,8 +7286,16 @@ PyInit__socket(void) #ifdef SIO_RCVALL { - DWORD codes[] = {SIO_RCVALL, SIO_KEEPALIVE_VALS}; - const char *names[] = {"SIO_RCVALL", "SIO_KEEPALIVE_VALS"}; + DWORD codes[] = {SIO_RCVALL, SIO_KEEPALIVE_VALS, +#if defined(SIO_LOOPBACK_FAST_PATH) + SIO_LOOPBACK_FAST_PATH +#endif + }; + const char *names[] = {"SIO_RCVALL", "SIO_KEEPALIVE_VALS", +#if defined(SIO_LOOPBACK_FAST_PATH) + "SIO_LOOPBACK_FAST_PATH" +#endif + }; int i; for(i = 0; i Date: Sat, 18 Jun 2016 16:43:25 +0300 Subject: Issue #26536: Use spaces instead of tabs --- Modules/socketmodule.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index a8bdfe3e94..175e82f9bf 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -7288,14 +7288,14 @@ PyInit__socket(void) { DWORD codes[] = {SIO_RCVALL, SIO_KEEPALIVE_VALS, #if defined(SIO_LOOPBACK_FAST_PATH) - SIO_LOOPBACK_FAST_PATH + SIO_LOOPBACK_FAST_PATH #endif - }; + }; const char *names[] = {"SIO_RCVALL", "SIO_KEEPALIVE_VALS", #if defined(SIO_LOOPBACK_FAST_PATH) - "SIO_LOOPBACK_FAST_PATH" + "SIO_LOOPBACK_FAST_PATH" #endif - }; + }; int i; for(i = 0; i Date: Sat, 18 Jun 2016 16:48:07 +0300 Subject: Issue #27177: Match objects in the re module now support index-like objects as group indices. Based on patches by Jeroen Demeyer and Xiang Zhang. --- Modules/_sre.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index fb0ab033c5..d379363729 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2049,8 +2049,9 @@ match_getindex(MatchObject* self, PyObject* index) /* Default value */ return 0; - if (PyLong_Check(index)) - return PyLong_AsSsize_t(index); + if (PyIndex_Check(index)) { + return PyNumber_AsSsize_t(index, NULL); + } i = -1; -- cgit v1.2.1 From bc74de72ee985b9e7e1f7404e58bf72ea1c32f36 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 19 Jun 2016 11:22:47 +0300 Subject: Use macros instead of corresponding functions (they never fail) in _tkinter.c. --- Modules/_tkinter.c | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) (limited to 'Modules') diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index c4e6b95a7d..761ec0db8f 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -462,7 +462,7 @@ Split(const char *list) v = NULL; break; } - PyTuple_SetItem(v, i, w); + PyTuple_SET_ITEM(v, i, w); } } Tcl_Free(FREECAST argv); @@ -480,13 +480,13 @@ SplitObj(PyObject *arg) Py_ssize_t i, size; PyObject *elem, *newelem, *result; - size = PyTuple_Size(arg); + size = PyTuple_GET_SIZE(arg); result = NULL; /* Recursively invoke SplitObj for all tuple items. If this does not return a new object, no action is needed. */ for(i = 0; i < size; i++) { - elem = PyTuple_GetItem(arg, i); + elem = PyTuple_GET_ITEM(arg, i); newelem = SplitObj(elem); if (!newelem) { Py_XDECREF(result); @@ -502,12 +502,12 @@ SplitObj(PyObject *arg) if (!result) return NULL; for(k = 0; k < i; k++) { - elem = PyTuple_GetItem(arg, k); + elem = PyTuple_GET_ITEM(arg, k); Py_INCREF(elem); - PyTuple_SetItem(result, k, elem); + PyTuple_SET_ITEM(result, k, elem); } } - PyTuple_SetItem(result, i, newelem); + PyTuple_SET_ITEM(result, i, newelem); } if (result) return result; @@ -529,7 +529,7 @@ SplitObj(PyObject *arg) Py_XDECREF(result); return NULL; } - PyTuple_SetItem(result, i, newelem); + PyTuple_SET_ITEM(result, i, newelem); } return result; } @@ -551,7 +551,7 @@ SplitObj(PyObject *arg) else if (PyBytes_Check(arg)) { int argc; const char **argv; - char *list = PyBytes_AsString(arg); + char *list = PyBytes_AS_STRING(arg); if (Tcl_SplitList((Tcl_Interp *)NULL, list, &argc, &argv) != TCL_OK) { Py_INCREF(arg); @@ -559,7 +559,7 @@ SplitObj(PyObject *arg) } Tcl_Free(FREECAST argv); if (argc > 1) - return Split(PyBytes_AsString(arg)); + return Split(PyBytes_AS_STRING(arg)); /* Fall through, returning arg. */ } Py_INCREF(arg); @@ -758,7 +758,7 @@ Tkapp_New(const char *screenName, const char *className, } Tcl_SetVar(v->interp, "tcl_library", - PyBytes_AsString(utf8_path), + PyBytes_AS_STRING(utf8_path), TCL_GLOBAL_ONLY); Py_DECREF(utf8_path); } @@ -1306,7 +1306,7 @@ FromObj(PyObject* tkapp, Tcl_Obj *value) Py_DECREF(result); return NULL; } - PyTuple_SetItem(result, i, elem); + PyTuple_SET_ITEM(result, i, elem); } return result; } @@ -1517,8 +1517,8 @@ Tkapp_Call(PyObject *selfptr, PyObject *args) int flags = TCL_EVAL_DIRECT | TCL_EVAL_GLOBAL; /* If args is a single tuple, replace with contents of tuple */ - if (1 == PyTuple_Size(args)){ - PyObject* item = PyTuple_GetItem(args, 0); + if (PyTuple_GET_SIZE(args) == 1) { + PyObject *item = PyTuple_GET_ITEM(args, 0); if (PyTuple_Check(item)) args = item; } @@ -1728,12 +1728,12 @@ varname_converter(PyObject *in, void *_out) char *s; const char **out = (const char**)_out; if (PyBytes_Check(in)) { - if (PyBytes_Size(in) > INT_MAX) { + if (PyBytes_GET_SIZE(in) > INT_MAX) { PyErr_SetString(PyExc_OverflowError, "bytes object is too long"); return 0; } - s = PyBytes_AsString(in); - if (strlen(s) != (size_t)PyBytes_Size(in)) { + s = PyBytes_AS_STRING(in); + if (strlen(s) != (size_t)PyBytes_GET_SIZE(in)) { PyErr_SetString(PyExc_ValueError, "embedded null byte"); return 0; } @@ -2274,10 +2274,11 @@ _tkinter_tkapp_splitlist(TkappObject *self, PyObject *arg) return NULL; for (i = 0; i < objc; i++) { PyObject *s = FromObj((PyObject*)self, objv[i]); - if (!s || PyTuple_SetItem(v, i, s)) { + if (!s) { Py_DECREF(v); return NULL; } + PyTuple_SET_ITEM(v, i, s); } return v; } @@ -2304,11 +2305,12 @@ _tkinter_tkapp_splitlist(TkappObject *self, PyObject *arg) for (i = 0; i < argc; i++) { PyObject *s = unicodeFromTclString(argv[i]); - if (!s || PyTuple_SetItem(v, i, s)) { + if (!s) { Py_DECREF(v); v = NULL; goto finally; } + PyTuple_SET_ITEM(v, i, s); } finally: @@ -2349,10 +2351,11 @@ _tkinter_tkapp_split(TkappObject *self, PyObject *arg) return NULL; for (i = 0; i < objc; i++) { PyObject *s = FromObj((PyObject*)self, objv[i]); - if (!s || PyTuple_SetItem(v, i, s)) { + if (!s) { Py_DECREF(v); return NULL; } + PyTuple_SET_ITEM(v, i, s); } return v; } @@ -2410,10 +2413,11 @@ PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[ for (i = 0; i < (argc - 1); i++) { PyObject *s = unicodeFromTclString(argv[i + 1]); - if (!s || PyTuple_SetItem(arg, i, s)) { + if (!s) { Py_DECREF(arg); return PythonCmd_Error(interp); } + PyTuple_SET_ITEM(arg, i, s); } res = PyEval_CallObject(func, arg); Py_DECREF(arg); @@ -3622,14 +3626,14 @@ PyInit__tkinter(void) } } - Tcl_FindExecutable(PyBytes_AsString(cexe)); + Tcl_FindExecutable(PyBytes_AS_STRING(cexe)); if (set_var) { SetEnvironmentVariableW(L"TCL_LIBRARY", NULL); PyMem_Free(wcs_path); } #else - Tcl_FindExecutable(PyBytes_AsString(cexe)); + Tcl_FindExecutable(PyBytes_AS_STRING(cexe)); #endif /* MS_WINDOWS */ } Py_XDECREF(cexe); -- cgit v1.2.1 From a52c718a5d46902bbe429710e02f45f738565889 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 24 Jun 2016 12:03:43 -0700 Subject: Issue #27186: Update os.fspath()/PyOS_FSPath() to check the return type of __fspath__(). As part of this change, also make sure that the pure Python implementation of os.fspath() is tested. --- Modules/posixmodule.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 7d8249095d..df802cbc09 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12317,12 +12317,21 @@ PyOS_FSPath(PyObject *path) if (NULL == func) { return PyErr_Format(PyExc_TypeError, "expected str, bytes or os.PathLike object, " - "not %S", - path->ob_type); + "not %.200s", + Py_TYPE(path)->tp_name); } path_repr = PyObject_CallFunctionObjArgs(func, NULL); Py_DECREF(func); + if (!(PyUnicode_Check(path_repr) || PyBytes_Check(path_repr))) { + PyErr_Format(PyExc_TypeError, + "expected %.200s.__fspath__() to return str or bytes, " + "not %.200s", Py_TYPE(path)->tp_name, + Py_TYPE(path_repr)->tp_name); + Py_DECREF(path_repr); + return NULL; + } + return path_repr; } -- cgit v1.2.1 From 8ecaa879ea3137279269eb78ead7ad57c1d269e0 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 24 Jun 2016 14:14:44 -0700 Subject: Issue #27038: Expose DirEntry as os.DirEntry. Thanks to Jelle Zijlstra for the code portion of the patch. --- Modules/posixmodule.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index df802cbc09..4dc7c49465 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -13320,6 +13320,7 @@ INITFUNC(void) Py_DECREF(unicode); } PyModule_AddObject(m, "_have_functions", list); + PyModule_AddObject(m, "DirEntry", (PyObject *)&DirEntryType); initialized = 1; -- cgit v1.2.1 From 648451a242499fff285764fcbe90cf953a3592f1 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Sat, 25 Jun 2016 03:06:58 +0000 Subject: Remove duplicate AF_INET6 addition --- Modules/socketmodule.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 175e82f9bf..f7fe218c45 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -6247,9 +6247,6 @@ PyInit__socket(void) PyModule_AddIntMacro(m, AF_UNSPEC); #endif PyModule_AddIntMacro(m, AF_INET); -#ifdef AF_INET6 - PyModule_AddIntMacro(m, AF_INET6); -#endif /* AF_INET6 */ #if defined(AF_UNIX) PyModule_AddIntMacro(m, AF_UNIX); #endif /* AF_UNIX */ -- cgit v1.2.1 From 4a078bdcc0f92d69fe95398c9036f1a28c44c230 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 25 Jun 2016 22:43:05 +0300 Subject: Issue #26243: Only the level argument to zlib.compress() is keyword argument now. The first argument is positional-only. --- Modules/clinic/zlibmodule.c.h | 6 +++--- Modules/zlibmodule.c | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index c657bcb644..dcaeef81e6 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -3,7 +3,7 @@ preserve [clinic start generated code]*/ PyDoc_STRVAR(zlib_compress__doc__, -"compress($module, /, data, level=Z_DEFAULT_COMPRESSION)\n" +"compress($module, data, /, level=Z_DEFAULT_COMPRESSION)\n" "--\n" "\n" "Returns a bytes object containing compressed data.\n" @@ -23,7 +23,7 @@ static PyObject * zlib_compress(PyModuleDef *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"data", "level", NULL}; + static char *_keywords[] = {"", "level", NULL}; Py_buffer data = {NULL, NULL}; int level = Z_DEFAULT_COMPRESSION; @@ -460,4 +460,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=9bd8a093baa653b2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ba904dec30cc1a1a input=a9049054013a1b77]*/ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index ad6f28d7bc..3a459a58f4 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -143,6 +143,7 @@ zlib.compress data: Py_buffer Binary data to be compressed. + / level: int(c_default="Z_DEFAULT_COMPRESSION") = Z_DEFAULT_COMPRESSION Compression level, in 0-9 or -1. @@ -151,7 +152,7 @@ Returns a bytes object containing compressed data. static PyObject * zlib_compress_impl(PyModuleDef *module, Py_buffer *data, int level) -/*[clinic end generated code: output=1b97589132b203b4 input=abed30f4fa14e213]*/ +/*[clinic end generated code: output=1b97589132b203b4 input=638d54b6315dbed3]*/ { PyObject *ReturnVal = NULL; Byte *input, *output = NULL; -- cgit v1.2.1 From 7b59cdb7a19db2ff19fc7e2108ad754006965975 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 8 Jul 2016 17:55:01 +0200 Subject: Issue #22624: Python 3 requires clock() to build --- Modules/timemodule.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 0b6d461870..94746444cf 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1034,6 +1034,7 @@ py_process_time(_Py_clock_info_t *info) } #endif + /* Currently, Python 3 requires clock() to build: see issue #22624 */ return floatclock(info); #endif } -- cgit v1.2.1 From 03e4d0c5c6c7af36230ec72d1ad7842cf1e887ef Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 15 Jul 2016 10:41:49 -0700 Subject: Issue #27512: Don't segfault when os.fspath() calls an object whose __fspath__() raises an exception. Thanks to Xiang Zhang for the patch. --- Modules/posixmodule.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 4c0f26e89c..7f16a83e78 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12319,6 +12319,10 @@ PyOS_FSPath(PyObject *path) path_repr = PyObject_CallFunctionObjArgs(func, NULL); Py_DECREF(func); + if (NULL == path_repr) { + return NULL; + } + if (!(PyUnicode_Check(path_repr) || PyBytes_Check(path_repr))) { PyErr_Format(PyExc_TypeError, "expected %.200s.__fspath__() to return str or bytes, " -- cgit v1.2.1 From 20753b0afba40c3ff5ff1ff3fc435c8b3ba9ad60 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Tue, 19 Jul 2016 03:05:42 +0000 Subject: Issue #1621: Avoid signed int negation overflow in audioop --- Modules/audioop.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/audioop.c b/Modules/audioop.c index 8ca64c6956..ed1eca3c1d 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -446,7 +446,9 @@ audioop_max_impl(PyObject *module, Py_buffer *fragment, int width) return NULL; for (i = 0; i < fragment->len; i += width) { int val = GETRAWSAMPLE(width, fragment->buf, i); - if (val < 0) absval = (-val); + /* Cast to unsigned before negating. Unsigned overflow is well- + defined, but signed overflow is not. */ + if (val < 0) absval = -(unsigned int)val; else absval = val; if (absval > max) max = absval; } -- cgit v1.2.1 From 27bf2c814efc5dc7ae7db48eaefeacc5ec4349de Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 18 Jul 2016 21:47:39 -0700 Subject: expose EPOLLRDHUP (closes #27567) --- Modules/selectmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index a6b63d22e5..fa71d6e7f4 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -2473,12 +2473,12 @@ PyInit_select(void) PyModule_AddIntMacro(m, EPOLLPRI); PyModule_AddIntMacro(m, EPOLLERR); PyModule_AddIntMacro(m, EPOLLHUP); + PyModule_AddIntMacro(m, EPOLLRDHUP); PyModule_AddIntMacro(m, EPOLLET); #ifdef EPOLLONESHOT /* Kernel 2.6.2+ */ PyModule_AddIntMacro(m, EPOLLONESHOT); #endif - /* PyModule_AddIntConstant(m, "EPOLL_RDHUP", EPOLLRDHUP); */ #ifdef EPOLLRDNORM PyModule_AddIntMacro(m, EPOLLRDNORM); -- cgit v1.2.1 From d938acb6af84576378a3a95efd86c47509da0d1a Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 18 Jul 2016 22:02:44 -0700 Subject: add EPOLLEXCLUSIVE --- Modules/selectmodule.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index fa71d6e7f4..c84c3cc26b 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -2479,6 +2479,9 @@ PyInit_select(void) /* Kernel 2.6.2+ */ PyModule_AddIntMacro(m, EPOLLONESHOT); #endif +#ifdef EPOLLEXCLUSIVE + PyModule_AddIntMacro(m, EPOLLEXCLUSIVE); +#endif #ifdef EPOLLRDNORM PyModule_AddIntMacro(m, EPOLLRDNORM); -- cgit v1.2.1 From cd4990ad718b8bcdb3c0781cec94f2509c382f61 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Tue, 19 Jul 2016 21:09:26 +0300 Subject: Issue #27567: Expose the POLLRDHUP constant in the select module --- Modules/selectmodule.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index c84c3cc26b..0f90ce259a 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -4,6 +4,10 @@ have any value except INVALID_SOCKET. */ +#if defined(HAVE_POLL_H) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE +#endif + #include "Python.h" #include @@ -2451,6 +2455,10 @@ PyInit_select(void) #endif #ifdef POLLMSG PyModule_AddIntMacro(m, POLLMSG); +#endif +#ifdef POLLRDHUP + /* Kernel 2.6.17+ */ + PyModule_AddIntMacro(m, POLLRDHUP); #endif } #endif /* HAVE_POLL */ -- cgit v1.2.1 From f81de5e1946bcc07b86bac16f51ac0b4d0208da6 Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Fri, 22 Jul 2016 18:47:04 -0400 Subject: Closes issue #24773: Implement PEP 495 (Local Time Disambiguation). --- Modules/_datetimemodule.c | 675 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 526 insertions(+), 149 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 61b66a66cb..1157859ae3 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -9,6 +9,12 @@ #ifdef MS_WINDOWS # include /* struct timeval */ +static struct tm *localtime_r(const time_t *timep, struct tm *result) +{ + if (localtime_s(result, timep) == 0) + return result; + return NULL; +} #endif /* Differentiate between building the core module and building extension @@ -56,6 +62,7 @@ class datetime.datetime "PyDateTime_DateTime *" "&PyDateTime_DateTimeType" #define DATE_GET_MINUTE PyDateTime_DATE_GET_MINUTE #define DATE_GET_SECOND PyDateTime_DATE_GET_SECOND #define DATE_GET_MICROSECOND PyDateTime_DATE_GET_MICROSECOND +#define DATE_GET_FOLD PyDateTime_DATE_GET_FOLD /* Date accessors for date and datetime. */ #define SET_YEAR(o, v) (((o)->data[0] = ((v) & 0xff00) >> 8), \ @@ -71,12 +78,14 @@ class datetime.datetime "PyDateTime_DateTime *" "&PyDateTime_DateTimeType" (((o)->data[7] = ((v) & 0xff0000) >> 16), \ ((o)->data[8] = ((v) & 0x00ff00) >> 8), \ ((o)->data[9] = ((v) & 0x0000ff))) +#define DATE_SET_FOLD(o, v) (PyDateTime_DATE_GET_FOLD(o) = (v)) /* Time accessors for time. */ #define TIME_GET_HOUR PyDateTime_TIME_GET_HOUR #define TIME_GET_MINUTE PyDateTime_TIME_GET_MINUTE #define TIME_GET_SECOND PyDateTime_TIME_GET_SECOND #define TIME_GET_MICROSECOND PyDateTime_TIME_GET_MICROSECOND +#define TIME_GET_FOLD PyDateTime_TIME_GET_FOLD #define TIME_SET_HOUR(o, v) (PyDateTime_TIME_GET_HOUR(o) = (v)) #define TIME_SET_MINUTE(o, v) (PyDateTime_TIME_GET_MINUTE(o) = (v)) #define TIME_SET_SECOND(o, v) (PyDateTime_TIME_GET_SECOND(o) = (v)) @@ -84,6 +93,7 @@ class datetime.datetime "PyDateTime_DateTime *" "&PyDateTime_DateTimeType" (((o)->data[3] = ((v) & 0xff0000) >> 16), \ ((o)->data[4] = ((v) & 0x00ff00) >> 8), \ ((o)->data[5] = ((v) & 0x0000ff))) +#define TIME_SET_FOLD(o, v) (PyDateTime_TIME_GET_FOLD(o) = (v)) /* Delta accessors for timedelta. */ #define GET_TD_DAYS(o) (((PyDateTime_Delta *)(o))->days) @@ -674,8 +684,8 @@ new_date_ex(int year, int month, int day, PyTypeObject *type) /* Create a datetime instance with no range checking. */ static PyObject * -new_datetime_ex(int year, int month, int day, int hour, int minute, - int second, int usecond, PyObject *tzinfo, PyTypeObject *type) +new_datetime_ex2(int year, int month, int day, int hour, int minute, + int second, int usecond, PyObject *tzinfo, int fold, PyTypeObject *type) { PyDateTime_DateTime *self; char aware = tzinfo != Py_None; @@ -692,18 +702,27 @@ new_datetime_ex(int year, int month, int day, int hour, int minute, Py_INCREF(tzinfo); self->tzinfo = tzinfo; } + DATE_SET_FOLD(self, fold); } return (PyObject *)self; } -#define new_datetime(y, m, d, hh, mm, ss, us, tzinfo) \ - new_datetime_ex(y, m, d, hh, mm, ss, us, tzinfo, \ +static PyObject * +new_datetime_ex(int year, int month, int day, int hour, int minute, + int second, int usecond, PyObject *tzinfo, PyTypeObject *type) +{ + return new_datetime_ex2(year, month, day, hour, minute, second, usecond, + tzinfo, 0, type); +} + +#define new_datetime(y, m, d, hh, mm, ss, us, tzinfo, fold) \ + new_datetime_ex2(y, m, d, hh, mm, ss, us, tzinfo, fold, \ &PyDateTime_DateTimeType) /* Create a time instance with no range checking. */ static PyObject * -new_time_ex(int hour, int minute, int second, int usecond, - PyObject *tzinfo, PyTypeObject *type) +new_time_ex2(int hour, int minute, int second, int usecond, + PyObject *tzinfo, int fold, PyTypeObject *type) { PyDateTime_Time *self; char aware = tzinfo != Py_None; @@ -720,12 +739,20 @@ new_time_ex(int hour, int minute, int second, int usecond, Py_INCREF(tzinfo); self->tzinfo = tzinfo; } + TIME_SET_FOLD(self, fold); } return (PyObject *)self; } -#define new_time(hh, mm, ss, us, tzinfo) \ - new_time_ex(hh, mm, ss, us, tzinfo, &PyDateTime_TimeType) +static PyObject * +new_time_ex(int hour, int minute, int second, int usecond, + PyObject *tzinfo, PyTypeObject *type) +{ + return new_time_ex2(hour, minute, second, usecond, tzinfo, 0, type); +} + +#define new_time(hh, mm, ss, us, tzinfo, fold) \ + new_time_ex2(hh, mm, ss, us, tzinfo, fold, &PyDateTime_TimeType) /* Create a timedelta instance. Normalize the members iff normalize is * true. Passing false is a speed optimization, if you know for sure @@ -887,10 +914,10 @@ call_tzinfo_method(PyObject *tzinfo, const char *name, PyObject *tzinfoarg) if (offset == Py_None || offset == NULL) return offset; if (PyDelta_Check(offset)) { - if (GET_TD_MICROSECONDS(offset) != 0 || GET_TD_SECONDS(offset) % 60 != 0) { + if (GET_TD_MICROSECONDS(offset) != 0) { Py_DECREF(offset); PyErr_Format(PyExc_ValueError, "offset must be a timedelta" - " representing a whole number of minutes"); + " representing a whole number of seconds"); return NULL; } if ((GET_TD_DAYS(offset) == -1 && GET_TD_SECONDS(offset) == 0) || @@ -1002,6 +1029,30 @@ append_keyword_tzinfo(PyObject *repr, PyObject *tzinfo) return repr; } +/* repr is like "someclass(arg1, arg2)". If fold isn't 0, + * stuff + * ", fold=" + repr(tzinfo) + * before the closing ")". + */ +static PyObject * +append_keyword_fold(PyObject *repr, int fold) +{ + PyObject *temp; + + assert(PyUnicode_Check(repr)); + if (fold == 0) + return repr; + /* Get rid of the trailing ')'. */ + assert(PyUnicode_READ_CHAR(repr, PyUnicode_GET_LENGTH(repr)-1) == ')'); + temp = PyUnicode_Substring(repr, 0, PyUnicode_GET_LENGTH(repr) - 1); + Py_DECREF(repr); + if (temp == NULL) + return NULL; + repr = PyUnicode_FromFormat("%U, fold=%d)", temp, fold); + Py_DECREF(temp); + return repr; +} + /* --------------------------------------------------------------------------- * String format helpers. */ @@ -1070,10 +1121,11 @@ format_utcoffset(char *buf, size_t buflen, const char *sep, Py_DECREF(offset); minutes = divmod(seconds, 60, &seconds); hours = divmod(minutes, 60, &minutes); - assert(seconds == 0); - /* XXX ignore sub-minute data, currently not allowed. */ - PyOS_snprintf(buf, buflen, "%c%02d%s%02d", sign, hours, sep, minutes); - + if (seconds == 0) + PyOS_snprintf(buf, buflen, "%c%02d%s%02d", sign, hours, sep, minutes); + else + PyOS_snprintf(buf, buflen, "%c%02d%s%02d%s%02d", sign, hours, + sep, minutes, sep, seconds); return 0; } @@ -3467,12 +3519,19 @@ time_tzinfo(PyDateTime_Time *self, void *unused) return result; } +static PyObject * +time_fold(PyDateTime_Time *self, void *unused) +{ + return PyLong_FromLong(TIME_GET_FOLD(self)); +} + static PyGetSetDef time_getset[] = { {"hour", (getter)time_hour}, {"minute", (getter)time_minute}, {"second", (getter)py_time_second}, {"microsecond", (getter)time_microsecond}, - {"tzinfo", (getter)time_tzinfo}, + {"tzinfo", (getter)time_tzinfo}, + {"fold", (getter)time_fold}, {NULL} }; @@ -3481,7 +3540,7 @@ static PyGetSetDef time_getset[] = { */ static char *time_kws[] = {"hour", "minute", "second", "microsecond", - "tzinfo", NULL}; + "tzinfo", "fold", NULL}; static PyObject * time_new(PyTypeObject *type, PyObject *args, PyObject *kw) @@ -3493,13 +3552,14 @@ time_new(PyTypeObject *type, PyObject *args, PyObject *kw) int second = 0; int usecond = 0; PyObject *tzinfo = Py_None; + int fold = 0; /* Check for invocation from pickle with __getstate__ state */ if (PyTuple_GET_SIZE(args) >= 1 && PyTuple_GET_SIZE(args) <= 2 && PyBytes_Check(state = PyTuple_GET_ITEM(args, 0)) && PyBytes_GET_SIZE(state) == _PyDateTime_TIME_DATASIZE && - ((unsigned char) (PyBytes_AS_STRING(state)[0])) < 24) + (0x7F & ((unsigned char) (PyBytes_AS_STRING(state)[0]))) < 24) { PyDateTime_Time *me; char aware; @@ -3524,19 +3584,26 @@ time_new(PyTypeObject *type, PyObject *args, PyObject *kw) Py_INCREF(tzinfo); me->tzinfo = tzinfo; } + if (pdata[0] & (1 << 7)) { + me->data[0] -= 128; + me->fold = 1; + } + else { + me->fold = 0; + } } return (PyObject *)me; } - if (PyArg_ParseTupleAndKeywords(args, kw, "|iiiiO", time_kws, + if (PyArg_ParseTupleAndKeywords(args, kw, "|iiiiO$i", time_kws, &hour, &minute, &second, &usecond, - &tzinfo)) { + &tzinfo, &fold)) { if (check_time_args(hour, minute, second, usecond) < 0) return NULL; if (check_tzinfo_subclass(tzinfo) < 0) return NULL; - self = new_time_ex(hour, minute, second, usecond, tzinfo, - type); + self = new_time_ex2(hour, minute, second, usecond, tzinfo, fold, + type); } return self; } @@ -3586,6 +3653,7 @@ time_repr(PyDateTime_Time *self) int m = TIME_GET_MINUTE(self); int s = TIME_GET_SECOND(self); int us = TIME_GET_MICROSECOND(self); + int fold = TIME_GET_FOLD(self); PyObject *result = NULL; if (us) @@ -3598,6 +3666,8 @@ time_repr(PyDateTime_Time *self) result = PyUnicode_FromFormat("%s(%d, %d)", type_name, h, m); if (result != NULL && HASTZINFO(self)) result = append_keyword_tzinfo(result, self->tzinfo); + if (result != NULL && fold) + result = append_keyword_fold(result, fold); return result; } @@ -3784,9 +3854,23 @@ static Py_hash_t time_hash(PyDateTime_Time *self) { if (self->hashcode == -1) { - PyObject *offset; - - offset = time_utcoffset((PyObject *)self, NULL); + PyObject *offset, *self0; + if (DATE_GET_FOLD(self)) { + self0 = new_time_ex2(DATE_GET_HOUR(self), + DATE_GET_MINUTE(self), + DATE_GET_SECOND(self), + DATE_GET_MICROSECOND(self), + HASTZINFO(self) ? self->tzinfo : Py_None, + 0, Py_TYPE(self)); + if (self0 == NULL) + return -1; + } + else { + self0 = (PyObject *)self; + Py_INCREF(self0); + } + offset = time_utcoffset(self0, NULL); + Py_DECREF(self0); if (offset == NULL) return -1; @@ -3832,15 +3916,18 @@ time_replace(PyDateTime_Time *self, PyObject *args, PyObject *kw) int ss = TIME_GET_SECOND(self); int us = TIME_GET_MICROSECOND(self); PyObject *tzinfo = HASTZINFO(self) ? self->tzinfo : Py_None; + int fold = TIME_GET_FOLD(self); - if (! PyArg_ParseTupleAndKeywords(args, kw, "|iiiiO:replace", + if (! PyArg_ParseTupleAndKeywords(args, kw, "|iiiiO$i:replace", time_kws, - &hh, &mm, &ss, &us, &tzinfo)) + &hh, &mm, &ss, &us, &tzinfo, &fold)) return NULL; tuple = Py_BuildValue("iiiiO", hh, mm, ss, us, tzinfo); if (tuple == NULL) return NULL; clone = time_new(Py_TYPE(self), tuple, NULL); + if (clone != NULL) + TIME_SET_FOLD(clone, fold); Py_DECREF(tuple); return clone; } @@ -3853,7 +3940,7 @@ time_replace(PyDateTime_Time *self, PyObject *args, PyObject *kw) * __getstate__ isn't exposed. */ static PyObject * -time_getstate(PyDateTime_Time *self) +time_getstate(PyDateTime_Time *self, int proto) { PyObject *basestate; PyObject *result = NULL; @@ -3861,6 +3948,9 @@ time_getstate(PyDateTime_Time *self) basestate = PyBytes_FromStringAndSize((char *)self->data, _PyDateTime_TIME_DATASIZE); if (basestate != NULL) { + if (proto > 3 && TIME_GET_FOLD(self)) + /* Set the first bit of the first byte */ + PyBytes_AS_STRING(basestate)[0] |= (1 << 7); if (! HASTZINFO(self) || self->tzinfo == Py_None) result = PyTuple_Pack(1, basestate); else @@ -3871,9 +3961,13 @@ time_getstate(PyDateTime_Time *self) } static PyObject * -time_reduce(PyDateTime_Time *self, PyObject *arg) +time_reduce(PyDateTime_Time *self, PyObject *args) { - return Py_BuildValue("(ON)", Py_TYPE(self), time_getstate(self)); + int proto = 0; + if (!PyArg_ParseTuple(args, "|i:__reduce_ex__", &proto)) + return NULL; + + return Py_BuildValue("(ON)", Py_TYPE(self), time_getstate(self, proto)); } static PyMethodDef time_methods[] = { @@ -3901,8 +3995,8 @@ static PyMethodDef time_methods[] = { {"replace", (PyCFunction)time_replace, METH_VARARGS | METH_KEYWORDS, PyDoc_STR("Return time with new specified fields.")}, - {"__reduce__", (PyCFunction)time_reduce, METH_NOARGS, - PyDoc_STR("__reduce__() -> (cls, state)")}, + {"__reduce_ex__", (PyCFunction)time_reduce, METH_VARARGS, + PyDoc_STR("__reduce_ex__(proto) -> (cls, state)")}, {NULL, NULL} }; @@ -3995,12 +4089,19 @@ datetime_tzinfo(PyDateTime_DateTime *self, void *unused) return result; } +static PyObject * +datetime_fold(PyDateTime_DateTime *self, void *unused) +{ + return PyLong_FromLong(DATE_GET_FOLD(self)); +} + static PyGetSetDef datetime_getset[] = { {"hour", (getter)datetime_hour}, {"minute", (getter)datetime_minute}, {"second", (getter)datetime_second}, {"microsecond", (getter)datetime_microsecond}, - {"tzinfo", (getter)datetime_tzinfo}, + {"tzinfo", (getter)datetime_tzinfo}, + {"fold", (getter)datetime_fold}, {NULL} }; @@ -4010,7 +4111,7 @@ static PyGetSetDef datetime_getset[] = { static char *datetime_kws[] = { "year", "month", "day", "hour", "minute", "second", - "microsecond", "tzinfo", NULL + "microsecond", "tzinfo", "fold", NULL }; static PyObject * @@ -4025,6 +4126,7 @@ datetime_new(PyTypeObject *type, PyObject *args, PyObject *kw) int minute = 0; int second = 0; int usecond = 0; + int fold = 0; PyObject *tzinfo = Py_None; /* Check for invocation from pickle with __getstate__ state */ @@ -4032,7 +4134,7 @@ datetime_new(PyTypeObject *type, PyObject *args, PyObject *kw) PyTuple_GET_SIZE(args) <= 2 && PyBytes_Check(state = PyTuple_GET_ITEM(args, 0)) && PyBytes_GET_SIZE(state) == _PyDateTime_DATETIME_DATASIZE && - MONTH_IS_SANE(PyBytes_AS_STRING(state)[2])) + MONTH_IS_SANE(PyBytes_AS_STRING(state)[2] & 0x7F)) { PyDateTime_DateTime *me; char aware; @@ -4057,22 +4159,29 @@ datetime_new(PyTypeObject *type, PyObject *args, PyObject *kw) Py_INCREF(tzinfo); me->tzinfo = tzinfo; } + if (pdata[2] & (1 << 7)) { + me->data[2] -= 128; + me->fold = 1; + } + else { + me->fold = 0; + } } return (PyObject *)me; } - if (PyArg_ParseTupleAndKeywords(args, kw, "iii|iiiiO", datetime_kws, + if (PyArg_ParseTupleAndKeywords(args, kw, "iii|iiiiO$i", datetime_kws, &year, &month, &day, &hour, &minute, - &second, &usecond, &tzinfo)) { + &second, &usecond, &tzinfo, &fold)) { if (check_date_args(year, month, day) < 0) return NULL; if (check_time_args(hour, minute, second, usecond) < 0) return NULL; if (check_tzinfo_subclass(tzinfo) < 0) return NULL; - self = new_datetime_ex(year, month, day, + self = new_datetime_ex2(year, month, day, hour, minute, second, usecond, - tzinfo, type); + tzinfo, fold, type); } return self; } @@ -4080,6 +4189,38 @@ datetime_new(PyTypeObject *type, PyObject *args, PyObject *kw) /* TM_FUNC is the shared type of localtime() and gmtime(). */ typedef struct tm *(*TM_FUNC)(const time_t *timer); +/* As of version 2015f max fold in IANA database is + * 23 hours at 1969-09-30 13:00:00 in Kwajalein. */ +static PY_LONG_LONG max_fold_seconds = 24 * 3600; +/* NB: date(1970,1,1).toordinal() == 719163 */ +static PY_LONG_LONG epoch = Py_LL(719163) * 24 * 60 * 60; + +static PY_LONG_LONG +utc_to_seconds(int year, int month, int day, + int hour, int minute, int second) +{ + PY_LONG_LONG ordinal = ymd_to_ord(year, month, day); + return ((ordinal * 24 + hour) * 60 + minute) * 60 + second; +} + +static PY_LONG_LONG +local(PY_LONG_LONG u) +{ + struct tm local_time; + time_t t = u - epoch; + /* XXX: add bounds checking */ + if (localtime_r(&t, &local_time) == NULL) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return utc_to_seconds(local_time.tm_year + 1900, + local_time.tm_mon + 1, + local_time.tm_mday, + local_time.tm_hour, + local_time.tm_min, + local_time.tm_sec); +} + /* Internal helper. * Build datetime from a time_t and a distinct count of microseconds. * Pass localtime or gmtime for f, to control the interpretation of timet. @@ -4089,6 +4230,7 @@ datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us, PyObject *tzinfo) { struct tm *tm; + int year, month, day, hour, minute, second, fold = 0; tm = f(&timet); if (tm == NULL) { @@ -4099,23 +4241,40 @@ datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us, return PyErr_SetFromErrno(PyExc_OSError); } + year = tm->tm_year + 1900; + month = tm->tm_mon + 1; + day = tm->tm_mday; + hour = tm->tm_hour; + minute = tm->tm_min; /* The platform localtime/gmtime may insert leap seconds, * indicated by tm->tm_sec > 59. We don't care about them, * except to the extent that passing them on to the datetime * constructor would raise ValueError for a reason that * made no sense to the user. */ - if (tm->tm_sec > 59) - tm->tm_sec = 59; - return PyObject_CallFunction(cls, "iiiiiiiO", - tm->tm_year + 1900, - tm->tm_mon + 1, - tm->tm_mday, - tm->tm_hour, - tm->tm_min, - tm->tm_sec, - us, - tzinfo); + second = Py_MIN(59, tm->tm_sec); + + if (tzinfo == Py_None && f == localtime) { + PY_LONG_LONG probe_seconds, result_seconds, transition; + + result_seconds = utc_to_seconds(year, month, day, + hour, minute, second); + /* Probe max_fold_seconds to detect a fold. */ + probe_seconds = local(epoch + timet - max_fold_seconds); + if (probe_seconds == -1) + return NULL; + transition = result_seconds - probe_seconds - max_fold_seconds; + if (transition < 0) { + probe_seconds = local(epoch + timet + transition); + if (probe_seconds == -1) + return NULL; + if (probe_seconds == result_seconds) + fold = 1; + } + } + return new_datetime_ex2(year, month, day, hour, + minute, second, us, tzinfo, fold, + (PyTypeObject *)cls); } /* Internal helper. @@ -4285,6 +4444,7 @@ datetime_combine(PyObject *cls, PyObject *args, PyObject *kw) TIME_GET_SECOND(time), TIME_GET_MICROSECOND(time), tzinfo); + DATE_SET_FOLD(result, TIME_GET_FOLD(time)); } return result; } @@ -4352,7 +4512,7 @@ add_datetime_timedelta(PyDateTime_DateTime *date, PyDateTime_Delta *delta, else return new_datetime(year, month, day, hour, minute, second, microsecond, - HASTZINFO(date) ? date->tzinfo : Py_None); + HASTZINFO(date) ? date->tzinfo : Py_None, 0); } static PyObject * @@ -4495,6 +4655,8 @@ datetime_repr(PyDateTime_DateTime *self) GET_YEAR(self), GET_MONTH(self), GET_DAY(self), DATE_GET_HOUR(self), DATE_GET_MINUTE(self)); } + if (baserepr != NULL && DATE_GET_FOLD(self) != 0) + baserepr = append_keyword_fold(baserepr, DATE_GET_FOLD(self)); if (baserepr == NULL || ! HASTZINFO(self)) return baserepr; return append_keyword_tzinfo(baserepr, self->tzinfo); @@ -4584,6 +4746,70 @@ datetime_ctime(PyDateTime_DateTime *self) /* Miscellaneous methods. */ +static PyObject * +flip_fold(PyObject *dt) +{ + return new_datetime_ex2(GET_YEAR(dt), + GET_MONTH(dt), + GET_DAY(dt), + DATE_GET_HOUR(dt), + DATE_GET_MINUTE(dt), + DATE_GET_SECOND(dt), + DATE_GET_MICROSECOND(dt), + HASTZINFO(dt) ? + ((PyDateTime_DateTime *)dt)->tzinfo : Py_None, + !DATE_GET_FOLD(dt), + Py_TYPE(dt)); +} + +static PyObject * +get_flip_fold_offset(PyObject *dt) +{ + PyObject *result, *flip_dt; + + flip_dt = flip_fold(dt); + if (flip_dt == NULL) + return NULL; + result = datetime_utcoffset(flip_dt, NULL); + Py_DECREF(flip_dt); + return result; +} + +/* PEP 495 exception: Whenever one or both of the operands in + * inter-zone comparison is such that its utcoffset() depends + * on the value of its fold fold attribute, the result is False. + * + * Return 1 if exception applies, 0 if not, and -1 on error. + */ +static int +pep495_eq_exception(PyObject *self, PyObject *other, + PyObject *offset_self, PyObject *offset_other) +{ + int result = 0; + PyObject *flip_offset; + + flip_offset = get_flip_fold_offset(self); + if (flip_offset == NULL) + return -1; + if (flip_offset != offset_self && + delta_cmp(flip_offset, offset_self)) + { + result = 1; + goto done; + } + Py_DECREF(flip_offset); + + flip_offset = get_flip_fold_offset(other); + if (flip_offset == NULL) + return -1; + if (flip_offset != offset_other && + delta_cmp(flip_offset, offset_other)) + result = 1; + done: + Py_DECREF(flip_offset); + return result; +} + static PyObject * datetime_richcompare(PyObject *self, PyObject *other, int op) { @@ -4631,6 +4857,13 @@ datetime_richcompare(PyObject *self, PyObject *other, int op) diff = memcmp(((PyDateTime_DateTime *)self)->data, ((PyDateTime_DateTime *)other)->data, _PyDateTime_DATETIME_DATASIZE); + if ((op == Py_EQ || op == Py_NE) && diff == 0) { + int ex = pep495_eq_exception(self, other, offset1, offset2); + if (ex == -1) + goto done; + if (ex) + diff = 1; + } result = diff_to_bool(diff, op); } else if (offset1 != Py_None && offset2 != Py_None) { @@ -4646,6 +4879,13 @@ datetime_richcompare(PyObject *self, PyObject *other, int op) diff = GET_TD_SECONDS(delta) | GET_TD_MICROSECONDS(delta); Py_DECREF(delta); + if ((op == Py_EQ || op == Py_NE) && diff == 0) { + int ex = pep495_eq_exception(self, other, offset1, offset2); + if (ex == -1) + goto done; + if (ex) + diff = 1; + } result = diff_to_bool(diff, op); } else if (op == Py_EQ) { @@ -4671,9 +4911,26 @@ static Py_hash_t datetime_hash(PyDateTime_DateTime *self) { if (self->hashcode == -1) { - PyObject *offset; - - offset = datetime_utcoffset((PyObject *)self, NULL); + PyObject *offset, *self0; + if (DATE_GET_FOLD(self)) { + self0 = new_datetime_ex2(GET_YEAR(self), + GET_MONTH(self), + GET_DAY(self), + DATE_GET_HOUR(self), + DATE_GET_MINUTE(self), + DATE_GET_SECOND(self), + DATE_GET_MICROSECOND(self), + HASTZINFO(self) ? self->tzinfo : Py_None, + 0, Py_TYPE(self)); + if (self0 == NULL) + return -1; + } + else { + self0 = (PyObject *)self; + Py_INCREF(self0); + } + offset = datetime_utcoffset(self0, NULL); + Py_DECREF(self0); if (offset == NULL) return -1; @@ -4727,76 +4984,71 @@ datetime_replace(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) int ss = DATE_GET_SECOND(self); int us = DATE_GET_MICROSECOND(self); PyObject *tzinfo = HASTZINFO(self) ? self->tzinfo : Py_None; + int fold = DATE_GET_FOLD(self); - if (! PyArg_ParseTupleAndKeywords(args, kw, "|iiiiiiiO:replace", + if (! PyArg_ParseTupleAndKeywords(args, kw, "|iiiiiiiO$i:replace", datetime_kws, &y, &m, &d, &hh, &mm, &ss, &us, - &tzinfo)) + &tzinfo, &fold)) return NULL; tuple = Py_BuildValue("iiiiiiiO", y, m, d, hh, mm, ss, us, tzinfo); if (tuple == NULL) return NULL; clone = datetime_new(Py_TYPE(self), tuple, NULL); + if (clone != NULL) + DATE_SET_FOLD(clone, fold); Py_DECREF(tuple); return clone; } static PyObject * -local_timezone(PyDateTime_DateTime *utc_time) +local_timezone_from_timestamp(time_t timestamp) { PyObject *result = NULL; - struct tm *timep; - time_t timestamp; PyObject *delta; - PyObject *one_second; - PyObject *seconds; + struct tm *local_time_tm; PyObject *nameo = NULL; const char *zone = NULL; - delta = new_delta(ymd_to_ord(GET_YEAR(utc_time), GET_MONTH(utc_time), - GET_DAY(utc_time)) - 719163, - 60 * (60 * DATE_GET_HOUR(utc_time) + - DATE_GET_MINUTE(utc_time)) + - DATE_GET_SECOND(utc_time), - 0, 0); - if (delta == NULL) - return NULL; - one_second = new_delta(0, 1, 0, 0); - if (one_second == NULL) - goto error; - seconds = divide_timedelta_timedelta((PyDateTime_Delta *)delta, - (PyDateTime_Delta *)one_second); - Py_DECREF(one_second); - if (seconds == NULL) - goto error; - Py_DECREF(delta); - timestamp = _PyLong_AsTime_t(seconds); - Py_DECREF(seconds); - if (timestamp == -1 && PyErr_Occurred()) - return NULL; - timep = localtime(×tamp); + local_time_tm = localtime(×tamp); #ifdef HAVE_STRUCT_TM_TM_ZONE - zone = timep->tm_zone; - delta = new_delta(0, timep->tm_gmtoff, 0, 1); + zone = local_time_tm->tm_zone; + delta = new_delta(0, local_time_tm->tm_gmtoff, 0, 1); #else /* HAVE_STRUCT_TM_TM_ZONE */ { - PyObject *local_time; - local_time = new_datetime(timep->tm_year + 1900, timep->tm_mon + 1, - timep->tm_mday, timep->tm_hour, timep->tm_min, - timep->tm_sec, DATE_GET_MICROSECOND(utc_time), - utc_time->tzinfo); - if (local_time == NULL) - goto error; - delta = datetime_subtract(local_time, (PyObject*)utc_time); - /* XXX: before relying on tzname, we should compare delta - to the offset implied by timezone/altzone */ - if (daylight && timep->tm_isdst >= 0) - zone = tzname[timep->tm_isdst % 2]; - else - zone = tzname[0]; + PyObject *local_time, *utc_time; + struct tm *utc_time_tm; + char buf[100]; + strftime(buf, sizeof(buf), "%Z", local_time_tm); + zone = buf; + local_time = new_datetime(local_time_tm->tm_year + 1900, + local_time_tm->tm_mon + 1, + local_time_tm->tm_mday, + local_time_tm->tm_hour, + local_time_tm->tm_min, + local_time_tm->tm_sec, 0, Py_None, 0); + if (local_time == NULL) { + return NULL; + } + utc_time_tm = gmtime(×tamp); + utc_time = new_datetime(utc_time_tm->tm_year + 1900, + utc_time_tm->tm_mon + 1, + utc_time_tm->tm_mday, + utc_time_tm->tm_hour, + utc_time_tm->tm_min, + utc_time_tm->tm_sec, 0, Py_None, 0); + if (utc_time == NULL) { + Py_DECREF(local_time); + return NULL; + } + delta = datetime_subtract(local_time, utc_time); Py_DECREF(local_time); + Py_DECREF(utc_time); } #endif /* HAVE_STRUCT_TM_TM_ZONE */ + if (delta == NULL) { + return NULL; + } if (zone != NULL) { nameo = PyUnicode_DecodeLocale(zone, "surrogateescape"); if (nameo == NULL) @@ -4809,12 +5061,65 @@ local_timezone(PyDateTime_DateTime *utc_time) return result; } +static PyObject * +local_timezone(PyDateTime_DateTime *utc_time) +{ + time_t timestamp; + PyObject *delta; + PyObject *one_second; + PyObject *seconds; + + delta = datetime_subtract((PyObject *)utc_time, PyDateTime_Epoch); + if (delta == NULL) + return NULL; + one_second = new_delta(0, 1, 0, 0); + if (one_second == NULL) { + Py_DECREF(delta); + return NULL; + } + seconds = divide_timedelta_timedelta((PyDateTime_Delta *)delta, + (PyDateTime_Delta *)one_second); + Py_DECREF(one_second); + Py_DECREF(delta); + if (seconds == NULL) + return NULL; + timestamp = _PyLong_AsTime_t(seconds); + Py_DECREF(seconds); + if (timestamp == -1 && PyErr_Occurred()) + return NULL; + return local_timezone_from_timestamp(timestamp); +} + +static PY_LONG_LONG +local_to_seconds(int year, int month, int day, + int hour, int minute, int second, int fold); + +static PyObject * +local_timezone_from_local(PyDateTime_DateTime *local_dt) +{ + PY_LONG_LONG seconds; + time_t timestamp; + seconds = local_to_seconds(GET_YEAR(local_dt), + GET_MONTH(local_dt), + GET_DAY(local_dt), + DATE_GET_HOUR(local_dt), + DATE_GET_MINUTE(local_dt), + DATE_GET_SECOND(local_dt), + DATE_GET_FOLD(local_dt)); + if (seconds == -1) + return NULL; + /* XXX: add bounds check */ + timestamp = seconds - epoch; + return local_timezone_from_timestamp(timestamp); +} + static PyDateTime_DateTime * datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) { PyDateTime_DateTime *result; PyObject *offset; PyObject *temp; + PyObject *self_tzinfo; PyObject *tzinfo = Py_None; static char *keywords[] = {"tz", NULL}; @@ -4825,27 +5130,27 @@ datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) if (check_tzinfo_subclass(tzinfo) == -1) return NULL; - if (!HASTZINFO(self) || self->tzinfo == Py_None) - goto NeedAware; + if (!HASTZINFO(self) || self->tzinfo == Py_None) { + self_tzinfo = local_timezone_from_local(self); + if (self_tzinfo == NULL) + return NULL; + } else { + self_tzinfo = self->tzinfo; + Py_INCREF(self_tzinfo); + } /* Conversion to self's own time zone is a NOP. */ - if (self->tzinfo == tzinfo) { + if (self_tzinfo == tzinfo) { + Py_DECREF(self_tzinfo); Py_INCREF(self); return self; } /* Convert self to UTC. */ - offset = datetime_utcoffset((PyObject *)self, NULL); + offset = call_utcoffset(self_tzinfo, (PyObject *)self); + Py_DECREF(self_tzinfo); if (offset == NULL) return NULL; - if (offset == Py_None) { - Py_DECREF(offset); - NeedAware: - PyErr_SetString(PyExc_ValueError, "astimezone() cannot be applied to " - "a naive datetime"); - return NULL; - } - /* result = self - offset */ result = (PyDateTime_DateTime *)add_datetime_timedelta(self, (PyDateTime_Delta *)offset, -1); @@ -4853,6 +5158,32 @@ datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) if (result == NULL) return NULL; + /* Make sure result is aware and UTC. */ + if (!HASTZINFO(result)) { + temp = (PyObject *)result; + result = (PyDateTime_DateTime *) + new_datetime_ex2(GET_YEAR(result), + GET_MONTH(result), + GET_DAY(result), + DATE_GET_HOUR(result), + DATE_GET_MINUTE(result), + DATE_GET_SECOND(result), + DATE_GET_MICROSECOND(result), + PyDateTime_TimeZone_UTC, + DATE_GET_FOLD(result), + Py_TYPE(result)); + Py_DECREF(temp); + if (result == NULL) + return NULL; + } + else { + /* Result is already aware - just replace tzinfo. */ + temp = result->tzinfo; + result->tzinfo = PyDateTime_TimeZone_UTC; + Py_INCREF(result->tzinfo); + Py_DECREF(temp); + } + /* Attach new tzinfo and let fromutc() do the rest. */ temp = result->tzinfo; if (tzinfo == Py_None) { @@ -4900,6 +5231,56 @@ datetime_timetuple(PyDateTime_DateTime *self) dstflag); } +static PY_LONG_LONG +local_to_seconds(int year, int month, int day, + int hour, int minute, int second, int fold) +{ + PY_LONG_LONG t, a, b, u1, u2, t1, t2, lt; + t = utc_to_seconds(year, month, day, hour, minute, second); + /* Our goal is to solve t = local(u) for u. */ + lt = local(t); + if (lt == -1) + return -1; + a = lt - t; + u1 = t - a; + t1 = local(u1); + if (t1 == -1) + return -1; + if (t1 == t) { + /* We found one solution, but it may not be the one we need. + * Look for an earlier solution (if `fold` is 0), or a + * later one (if `fold` is 1). */ + if (fold) + u2 = u1 + max_fold_seconds; + else + u2 = u1 - max_fold_seconds; + lt = local(u2); + if (lt == -1) + return -1; + b = lt - u2; + if (a == b) + return u1; + } + else { + b = t1 - u1; + assert(a != b); + } + u2 = t - b; + t2 = local(u2); + if (t2 == -1) + return -1; + if (t2 == t) + return u2; + if (t1 == t) + return u1; + /* We have found both offsets a and b, but neither t - a nor t - b is + * a solution. This means t is in the gap. */ + return fold?Py_MIN(u1, u2):Py_MAX(u1, u2); +} + +/* date(1970,1,1).toordinal() == 719163 */ +#define EPOCH_SECONDS (719163LL * 24 * 60 * 60) + static PyObject * datetime_timestamp(PyDateTime_DateTime *self) { @@ -4914,33 +5295,18 @@ datetime_timestamp(PyDateTime_DateTime *self) Py_DECREF(delta); } else { - struct tm time; - time_t timestamp; - memset((void *) &time, '\0', sizeof(struct tm)); - time.tm_year = GET_YEAR(self) - 1900; - time.tm_mon = GET_MONTH(self) - 1; - time.tm_mday = GET_DAY(self); - time.tm_hour = DATE_GET_HOUR(self); - time.tm_min = DATE_GET_MINUTE(self); - time.tm_sec = DATE_GET_SECOND(self); - time.tm_wday = -1; - time.tm_isdst = -1; - timestamp = mktime(&time); - if (timestamp == (time_t)(-1) -#ifndef _AIX - /* Return value of -1 does not necessarily mean an error, - * but tm_wday cannot remain set to -1 if mktime succeeded. */ - && time.tm_wday == -1 -#else - /* on AIX, tm_wday is always sets, even on error */ -#endif - ) - { - PyErr_SetString(PyExc_OverflowError, - "timestamp out of range"); + PY_LONG_LONG seconds; + seconds = local_to_seconds(GET_YEAR(self), + GET_MONTH(self), + GET_DAY(self), + DATE_GET_HOUR(self), + DATE_GET_MINUTE(self), + DATE_GET_SECOND(self), + DATE_GET_FOLD(self)); + if (seconds == -1) return NULL; - } - result = PyFloat_FromDouble(timestamp + DATE_GET_MICROSECOND(self) / 1e6); + result = PyFloat_FromDouble(seconds - EPOCH_SECONDS + + DATE_GET_MICROSECOND(self) / 1e6); } return result; } @@ -4960,7 +5326,8 @@ datetime_gettime(PyDateTime_DateTime *self) DATE_GET_MINUTE(self), DATE_GET_SECOND(self), DATE_GET_MICROSECOND(self), - Py_None); + Py_None, + DATE_GET_FOLD(self)); } static PyObject * @@ -4970,7 +5337,8 @@ datetime_gettimetz(PyDateTime_DateTime *self) DATE_GET_MINUTE(self), DATE_GET_SECOND(self), DATE_GET_MICROSECOND(self), - GET_DT_TZINFO(self)); + GET_DT_TZINFO(self), + DATE_GET_FOLD(self)); } static PyObject * @@ -5022,7 +5390,7 @@ datetime_utctimetuple(PyDateTime_DateTime *self) * __getstate__ isn't exposed. */ static PyObject * -datetime_getstate(PyDateTime_DateTime *self) +datetime_getstate(PyDateTime_DateTime *self, int proto) { PyObject *basestate; PyObject *result = NULL; @@ -5030,6 +5398,9 @@ datetime_getstate(PyDateTime_DateTime *self) basestate = PyBytes_FromStringAndSize((char *)self->data, _PyDateTime_DATETIME_DATASIZE); if (basestate != NULL) { + if (proto > 3 && DATE_GET_FOLD(self)) + /* Set the first bit of the third byte */ + PyBytes_AS_STRING(basestate)[2] |= (1 << 7); if (! HASTZINFO(self) || self->tzinfo == Py_None) result = PyTuple_Pack(1, basestate); else @@ -5040,9 +5411,13 @@ datetime_getstate(PyDateTime_DateTime *self) } static PyObject * -datetime_reduce(PyDateTime_DateTime *self, PyObject *arg) +datetime_reduce(PyDateTime_DateTime *self, PyObject *args) { - return Py_BuildValue("(ON)", Py_TYPE(self), datetime_getstate(self)); + int proto = 0; + if (!PyArg_ParseTuple(args, "|i:__reduce_ex__", &proto)) + return NULL; + + return Py_BuildValue("(ON)", Py_TYPE(self), datetime_getstate(self, proto)); } static PyMethodDef datetime_methods[] = { @@ -5119,8 +5494,8 @@ static PyMethodDef datetime_methods[] = { {"astimezone", (PyCFunction)datetime_astimezone, METH_VARARGS | METH_KEYWORDS, PyDoc_STR("tz -> convert to local time in new timezone tz\n")}, - {"__reduce__", (PyCFunction)datetime_reduce, METH_NOARGS, - PyDoc_STR("__reduce__() -> (cls, state)")}, + {"__reduce_ex__", (PyCFunction)datetime_reduce, METH_VARARGS, + PyDoc_STR("__reduce_ex__(proto) -> (cls, state)")}, {NULL, NULL} }; @@ -5208,7 +5583,9 @@ static PyDateTime_CAPI CAPI = { new_time_ex, new_delta_ex, datetime_fromtimestamp, - date_fromtimestamp + date_fromtimestamp, + new_datetime_ex2, + new_time_ex2 }; @@ -5289,12 +5666,12 @@ PyInit__datetime(void) /* time values */ d = PyDateTime_TimeType.tp_dict; - x = new_time(0, 0, 0, 0, Py_None); + x = new_time(0, 0, 0, 0, Py_None, 0); if (x == NULL || PyDict_SetItemString(d, "min", x) < 0) return NULL; Py_DECREF(x); - x = new_time(23, 59, 59, 999999, Py_None); + x = new_time(23, 59, 59, 999999, Py_None, 0); if (x == NULL || PyDict_SetItemString(d, "max", x) < 0) return NULL; Py_DECREF(x); @@ -5307,12 +5684,12 @@ PyInit__datetime(void) /* datetime values */ d = PyDateTime_DateTimeType.tp_dict; - x = new_datetime(1, 1, 1, 0, 0, 0, 0, Py_None); + x = new_datetime(1, 1, 1, 0, 0, 0, 0, Py_None, 0); if (x == NULL || PyDict_SetItemString(d, "min", x) < 0) return NULL; Py_DECREF(x); - x = new_datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, Py_None); + x = new_datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, Py_None, 0); if (x == NULL || PyDict_SetItemString(d, "max", x) < 0) return NULL; Py_DECREF(x); @@ -5354,7 +5731,7 @@ PyInit__datetime(void) /* Epoch */ PyDateTime_Epoch = new_datetime(1970, 1, 1, 0, 0, 0, 0, - PyDateTime_TimeZone_UTC); + PyDateTime_TimeZone_UTC, 0); if (PyDateTime_Epoch == NULL) return NULL; -- cgit v1.2.1 From 232355ea845c6fc7b9e7228bf62909dc83f3dbdf Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Mon, 25 Jul 2016 02:21:14 +0000 Subject: Issue #7063: Remove dead code from array slice handling Patch by Chuck. --- Modules/arraymodule.c | 55 ++++++++------------------------------------------- 1 file changed, 8 insertions(+), 47 deletions(-) (limited to 'Modules') diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index c785872a5f..4d9a23fb99 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -846,37 +846,10 @@ array_repeat(arrayobject *a, Py_ssize_t n) } static int -array_ass_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v) +array_del_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh) { char *item; - Py_ssize_t n; /* Size of replacement array */ Py_ssize_t d; /* Change in size */ -#define b ((arrayobject *)v) - if (v == NULL) - n = 0; - else if (array_Check(v)) { - n = Py_SIZE(b); - if (a == b) { - /* Special case "a[i:j] = a" -- copy b first */ - int ret; - v = array_slice(b, 0, n); - if (!v) - return -1; - ret = array_ass_slice(a, ilow, ihigh, v); - Py_DECREF(v); - return ret; - } - if (b->ob_descr != a->ob_descr) { - PyErr_BadArgument(); - return -1; - } - } - else { - PyErr_Format(PyExc_TypeError, - "can only assign array (not \"%.200s\") to array slice", - Py_TYPE(v)->tp_name); - return -1; - } if (ilow < 0) ilow = 0; else if (ilow > Py_SIZE(a)) @@ -888,7 +861,7 @@ array_ass_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v) else if (ihigh > Py_SIZE(a)) ihigh = Py_SIZE(a); item = a->ob_item; - d = n - (ihigh-ilow); + d = ihigh-ilow; /* Issue #4509: If the array has exported buffers and the slice assignment would change the size of the array, fail early to make sure we don't modify it. */ @@ -897,25 +870,14 @@ array_ass_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v) "cannot resize an array that is exporting buffers"); return -1; } - if (d < 0) { /* Delete -d items */ - memmove(item + (ihigh+d)*a->ob_descr->itemsize, + if (d > 0) { /* Delete d items */ + memmove(item + (ihigh-d)*a->ob_descr->itemsize, item + ihigh*a->ob_descr->itemsize, (Py_SIZE(a)-ihigh)*a->ob_descr->itemsize); - if (array_resize(a, Py_SIZE(a) + d) == -1) + if (array_resize(a, Py_SIZE(a) - d) == -1) return -1; } - else if (d > 0) { /* Insert d items */ - if (array_resize(a, Py_SIZE(a) + d)) - return -1; - memmove(item + (ihigh+d)*a->ob_descr->itemsize, - item + ihigh*a->ob_descr->itemsize, - (Py_SIZE(a)-ihigh)*a->ob_descr->itemsize); - } - if (n > 0) - memcpy(item + ilow*a->ob_descr->itemsize, b->ob_item, - n*b->ob_descr->itemsize); return 0; -#undef b } static int @@ -927,7 +889,7 @@ array_ass_item(arrayobject *a, Py_ssize_t i, PyObject *v) return -1; } if (v == NULL) - return array_ass_slice(a, i, i+1, v); + return array_del_slice(a, i, i+1); return (*a->ob_descr->setitem)(a, i, v); } @@ -1155,8 +1117,7 @@ array_array_remove(arrayobject *self, PyObject *v) cmp = PyObject_RichCompareBool(selfi, v, Py_EQ); Py_DECREF(selfi); if (cmp > 0) { - if (array_ass_slice(self, i, i+1, - (PyObject *)NULL) != 0) + if (array_del_slice(self, i, i+1) != 0) return NULL; Py_INCREF(Py_None); return Py_None; @@ -1199,7 +1160,7 @@ array_array_pop_impl(arrayobject *self, Py_ssize_t i) v = getarrayitem((PyObject *)self, i); if (v == NULL) return NULL; - if (array_ass_slice(self, i, i+1, (PyObject *)NULL) != 0) { + if (array_del_slice(self, i, i+1) != 0) { Py_DECREF(v); return NULL; } -- cgit v1.2.1 From 959856e054e50bc4a05532f0678b2bc3ee867f97 Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Mon, 25 Jul 2016 13:54:51 -0400 Subject: Issue 24773: Added a time_t overflow check. --- Modules/_datetimemodule.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 1157859ae3..7dfb0c2684 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4207,7 +4207,14 @@ static PY_LONG_LONG local(PY_LONG_LONG u) { struct tm local_time; - time_t t = u - epoch; + time_t t; + u -= epoch; + t = u; + if (t != u) { + PyErr_SetString(PyExc_OverflowError, + "timestamp out of range for platform time_t"); + return -1; + } /* XXX: add bounds checking */ if (localtime_r(&t, &local_time) == NULL) { PyErr_SetFromErrno(PyExc_OSError); -- cgit v1.2.1 From 397036ed027b18e04743c0808399debc0338f336 Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Tue, 2 Aug 2016 17:49:30 -0400 Subject: Closes #27661: Added tzinfo keyword argument to datetime.combine. --- Modules/_datetimemodule.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 7dfb0c2684..3048762034 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4430,28 +4430,32 @@ datetime_strptime(PyObject *cls, PyObject *args) static PyObject * datetime_combine(PyObject *cls, PyObject *args, PyObject *kw) { - static char *keywords[] = {"date", "time", NULL}; + static char *keywords[] = {"date", "time", "tzinfo", NULL}; PyObject *date; PyObject *time; + PyObject *tzinfo = NULL; PyObject *result = NULL; - if (PyArg_ParseTupleAndKeywords(args, kw, "O!O!:combine", keywords, + if (PyArg_ParseTupleAndKeywords(args, kw, "O!O!|O:combine", keywords, &PyDateTime_DateType, &date, - &PyDateTime_TimeType, &time)) { - PyObject *tzinfo = Py_None; - - if (HASTZINFO(time)) - tzinfo = ((PyDateTime_Time *)time)->tzinfo; + &PyDateTime_TimeType, &time, &tzinfo)) { + if (tzinfo == NULL) { + if (HASTZINFO(time)) + tzinfo = ((PyDateTime_Time *)time)->tzinfo; + else + tzinfo = Py_None; + } result = PyObject_CallFunction(cls, "iiiiiiiO", - GET_YEAR(date), - GET_MONTH(date), - GET_DAY(date), - TIME_GET_HOUR(time), - TIME_GET_MINUTE(time), - TIME_GET_SECOND(time), - TIME_GET_MICROSECOND(time), - tzinfo); - DATE_SET_FOLD(result, TIME_GET_FOLD(time)); + GET_YEAR(date), + GET_MONTH(date), + GET_DAY(date), + TIME_GET_HOUR(time), + TIME_GET_MINUTE(time), + TIME_GET_SECOND(time), + TIME_GET_MICROSECOND(time), + tzinfo); + if (result) + DATE_SET_FOLD(result, TIME_GET_FOLD(time)); } return result; } -- cgit v1.2.1 From 21ba6ba34d5b3648d13f9944dc9a66c29893edf3 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Thu, 4 Aug 2016 02:38:59 +0000 Subject: Issue #17599: Use unique _Py_REPARSE_DATA_BUFFER etc names to avoid conflict The conflict occurs with Min GW, which already defines REPARSE_DATA_BUFFER. Also, Min GW uses a lowercase filename. --- Modules/_winapi.c | 8 ++++---- Modules/posixmodule.c | 8 ++++---- Modules/winreparse.h | 17 +++++++++-------- 3 files changed, 17 insertions(+), 16 deletions(-) (limited to 'Modules') diff --git a/Modules/_winapi.c b/Modules/_winapi.c index f4da8aaffe..91d4f0172c 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -486,7 +486,7 @@ _winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path, const USHORT prefix_len = 4; USHORT print_len = 0; USHORT rdb_size = 0; - PREPARSE_DATA_BUFFER rdb = NULL; + _Py_PREPARSE_DATA_BUFFER rdb = NULL; /* Junction point creation */ HANDLE junction = NULL; @@ -542,18 +542,18 @@ _winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path, - the size of the print name in bytes - the size of the substitute name in bytes - the size of two NUL terminators in bytes */ - rdb_size = REPARSE_DATA_BUFFER_HEADER_SIZE + + rdb_size = _Py_REPARSE_DATA_BUFFER_HEADER_SIZE + sizeof(rdb->MountPointReparseBuffer) - sizeof(rdb->MountPointReparseBuffer.PathBuffer) + /* Two +1's for NUL terminators. */ (prefix_len + print_len + 1 + print_len + 1) * sizeof(WCHAR); - rdb = (PREPARSE_DATA_BUFFER)PyMem_RawMalloc(rdb_size); + rdb = (_Py_PREPARSE_DATA_BUFFER)PyMem_RawMalloc(rdb_size); if (rdb == NULL) goto cleanup; memset(rdb, 0, rdb_size); rdb->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT; - rdb->ReparseDataLength = rdb_size - REPARSE_DATA_BUFFER_HEADER_SIZE; + rdb->ReparseDataLength = rdb_size - _Py_REPARSE_DATA_BUFFER_HEADER_SIZE; rdb->MountPointReparseBuffer.SubstituteNameOffset = 0; rdb->MountPointReparseBuffer.SubstituteNameLength = (prefix_len + print_len) * sizeof(WCHAR); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 54685ae7f0..6adc7f44db 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1106,8 +1106,8 @@ _PyVerify_fd_dup2(int fd1, int fd2) static int win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag) { - char target_buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; - REPARSE_DATA_BUFFER *rdb = (REPARSE_DATA_BUFFER *)target_buffer; + char target_buffer[_Py_MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; + _Py_REPARSE_DATA_BUFFER *rdb = (_Py_REPARSE_DATA_BUFFER *)target_buffer; DWORD n_bytes_returned; if (0 == DeviceIoControl( @@ -7149,8 +7149,8 @@ win_readlink(PyObject *self, PyObject *args, PyObject *kwargs) int dir_fd; HANDLE reparse_point_handle; - char target_buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; - REPARSE_DATA_BUFFER *rdb = (REPARSE_DATA_BUFFER *)target_buffer; + char target_buffer[_Py_MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; + _Py_REPARSE_DATA_BUFFER *rdb = (_Py_REPARSE_DATA_BUFFER *)target_buffer; const wchar_t *print_name; static char *keywords[] = {"path", "dir_fd", NULL}; diff --git a/Modules/winreparse.h b/Modules/winreparse.h index 66f7775dd2..28049c9af9 100644 --- a/Modules/winreparse.h +++ b/Modules/winreparse.h @@ -2,7 +2,7 @@ #define Py_WINREPARSE_H #ifdef MS_WINDOWS -#include +#include #ifdef __cplusplus extern "C" { @@ -10,9 +10,10 @@ extern "C" { /* The following structure was copied from http://msdn.microsoft.com/en-us/library/ff552012.aspx as the required - include doesn't seem to be present in the Windows SDK (at least as included - with Visual Studio Express). */ -typedef struct _REPARSE_DATA_BUFFER { + include km\ntifs.h isn't present in the Windows SDK (at least as included + with Visual Studio Express). Use unique names to avoid conflicting with + the structure as defined by Min GW. */ +typedef struct { ULONG ReparseTag; USHORT ReparseDataLength; USHORT Reserved; @@ -38,11 +39,11 @@ typedef struct _REPARSE_DATA_BUFFER { UCHAR DataBuffer[1]; } GenericReparseBuffer; }; -} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; +} _Py_REPARSE_DATA_BUFFER, *_Py_PREPARSE_DATA_BUFFER; -#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER,\ - GenericReparseBuffer) -#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) +#define _Py_REPARSE_DATA_BUFFER_HEADER_SIZE \ + FIELD_OFFSET(_Py_REPARSE_DATA_BUFFER, GenericReparseBuffer) +#define _Py_MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) #ifdef __cplusplus } -- cgit v1.2.1 From bb2540a70ca8864f8c62210872762fc7d0cc3a01 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 6 Aug 2016 23:22:08 +0300 Subject: Issue #26800: Undocumented support of general bytes-like objects as paths in os functions is now deprecated. --- Modules/posixmodule.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 6adc7f44db..52e465f1ff 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -891,7 +891,28 @@ path_converter(PyObject *o, void *p) } #endif } + else if (PyBytes_Check(o)) { +#ifdef MS_WINDOWS + if (win32_warn_bytes_api()) { + return 0; + } +#endif + bytes = o; + Py_INCREF(bytes); + } else if (PyObject_CheckBuffer(o)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "%s%s%s should be %s, not %.200s", + path->function_name ? path->function_name : "", + path->function_name ? ": " : "", + path->argument_name ? path->argument_name : "path", + path->allow_fd && path->nullable ? "string, bytes, integer or None" : + path->allow_fd ? "string, bytes or integer" : + path->nullable ? "string, bytes or None" : + "string or bytes", + Py_TYPE(o)->tp_name)) { + return 0; + } #ifdef MS_WINDOWS if (win32_warn_bytes_api()) { return 0; @@ -946,8 +967,14 @@ path_converter(PyObject *o, void *p) path->length = length; path->object = o; path->fd = -1; - path->cleanup = bytes; - return Py_CLEANUP_SUPPORTED; + if (bytes == o) { + Py_DECREF(bytes); + return 1; + } + else { + path->cleanup = bytes; + return Py_CLEANUP_SUPPORTED; + } } static void -- cgit v1.2.1 From cbca4ace80518d8230e721f0a5db9dab0695c5a1 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Mon, 8 Aug 2016 13:39:43 +0300 Subject: Expose EPOLLRDHUP conditionally --- Modules/selectmodule.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 0f90ce259a..80e7873465 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -2481,7 +2481,10 @@ PyInit_select(void) PyModule_AddIntMacro(m, EPOLLPRI); PyModule_AddIntMacro(m, EPOLLERR); PyModule_AddIntMacro(m, EPOLLHUP); +#ifdef EPOLLRDHUP + /* Kernel 2.6.17 */ PyModule_AddIntMacro(m, EPOLLRDHUP); +#endif PyModule_AddIntMacro(m, EPOLLET); #ifdef EPOLLONESHOT /* Kernel 2.6.2+ */ -- cgit v1.2.1 From 623c8ac405d257c05dfcc609ee45aa2232e57019 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Mon, 8 Aug 2016 14:07:05 +0300 Subject: Issue #27702: Only expose SOCK_RAW when defined SOCK_RAW is marked as optional in the POSIX specification: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_socket.h.html Patch by Ed Schouten. --- Modules/socketmodule.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index d21d18f7e3..d21509e9eb 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -6495,7 +6495,10 @@ PyInit__socket(void) PyModule_AddIntMacro(m, SOCK_STREAM); PyModule_AddIntMacro(m, SOCK_DGRAM); /* We have incomplete socket support. */ +#ifdef SOCK_RAW + /* SOCK_RAW is marked as optional in the POSIX specification */ PyModule_AddIntMacro(m, SOCK_RAW); +#endif PyModule_AddIntMacro(m, SOCK_SEQPACKET); #if defined(SOCK_RDM) PyModule_AddIntMacro(m, SOCK_RDM); -- cgit v1.2.1 From 9162f0b2df3927f38d4ed66abc3e27cd6b4db3b5 Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Mon, 8 Aug 2016 17:05:40 -0400 Subject: Closes #27710: Disallow fold not in [0, 1] in time and datetime constructors. --- Modules/_datetimemodule.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 3048762034..a62f592957 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -427,7 +427,7 @@ check_date_args(int year, int month, int day) * aren't, raise ValueError and return -1. */ static int -check_time_args(int h, int m, int s, int us) +check_time_args(int h, int m, int s, int us, int fold) { if (h < 0 || h > 23) { PyErr_SetString(PyExc_ValueError, @@ -449,6 +449,11 @@ check_time_args(int h, int m, int s, int us) "microsecond must be in 0..999999"); return -1; } + if (fold != 0 && fold != 1) { + PyErr_SetString(PyExc_ValueError, + "fold must be either 0 or 1"); + return -1; + } return 0; } @@ -3598,7 +3603,7 @@ time_new(PyTypeObject *type, PyObject *args, PyObject *kw) if (PyArg_ParseTupleAndKeywords(args, kw, "|iiiiO$i", time_kws, &hour, &minute, &second, &usecond, &tzinfo, &fold)) { - if (check_time_args(hour, minute, second, usecond) < 0) + if (check_time_args(hour, minute, second, usecond, fold) < 0) return NULL; if (check_tzinfo_subclass(tzinfo) < 0) return NULL; @@ -3926,8 +3931,14 @@ time_replace(PyDateTime_Time *self, PyObject *args, PyObject *kw) if (tuple == NULL) return NULL; clone = time_new(Py_TYPE(self), tuple, NULL); - if (clone != NULL) + if (clone != NULL) { + if (fold != 0 && fold != 1) { + PyErr_SetString(PyExc_ValueError, + "fold must be either 0 or 1"); + return NULL; + } TIME_SET_FOLD(clone, fold); + } Py_DECREF(tuple); return clone; } @@ -4175,7 +4186,7 @@ datetime_new(PyTypeObject *type, PyObject *args, PyObject *kw) &second, &usecond, &tzinfo, &fold)) { if (check_date_args(year, month, day) < 0) return NULL; - if (check_time_args(hour, minute, second, usecond) < 0) + if (check_time_args(hour, minute, second, usecond, fold) < 0) return NULL; if (check_tzinfo_subclass(tzinfo) < 0) return NULL; @@ -5006,8 +5017,15 @@ datetime_replace(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) if (tuple == NULL) return NULL; clone = datetime_new(Py_TYPE(self), tuple, NULL); - if (clone != NULL) + + if (clone != NULL) { + if (fold != 0 && fold != 1) { + PyErr_SetString(PyExc_ValueError, + "fold must be either 0 or 1"); + return NULL; + } DATE_SET_FOLD(clone, fold); + } Py_DECREF(tuple); return clone; } -- cgit v1.2.1 From 96d299b2b87dd2311bcc94cbab7b1cfa2c30ccba Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 14 Aug 2016 10:52:18 +0300 Subject: Issue #27574: Decreased an overhead of parsing keyword arguments in functions implemented with using Argument Clinic. --- Modules/_io/clinic/_iomodule.c.h | 7 +- Modules/_io/clinic/bufferedio.c.h | 17 +- Modules/_io/clinic/bytesio.c.h | 7 +- Modules/_io/clinic/fileio.c.h | 7 +- Modules/_io/clinic/stringio.c.h | 7 +- Modules/_io/clinic/textio.c.h | 17 +- Modules/cjkcodecs/clinic/multibytecodec.c.h | 22 +- Modules/clinic/_bz2module.c.h | 7 +- Modules/clinic/_codecsmodule.c.h | 12 +- Modules/clinic/_datetimemodule.c.h | 7 +- Modules/clinic/_elementtree.c.h | 42 ++-- Modules/clinic/_lzmamodule.c.h | 12 +- Modules/clinic/_pickle.c.h | 32 +-- Modules/clinic/_sre.c.h | 77 ++++--- Modules/clinic/_ssl.c.h | 42 ++-- Modules/clinic/_winapi.c.h | 17 +- Modules/clinic/binascii.c.h | 17 +- Modules/clinic/cmathmodule.c.h | 7 +- Modules/clinic/grpmodule.c.h | 12 +- Modules/clinic/md5module.c.h | 7 +- Modules/clinic/posixmodule.c.h | 312 +++++++++++++++++----------- Modules/clinic/pyexpat.c.h | 7 +- Modules/clinic/sha1module.c.h | 7 +- Modules/clinic/sha256module.c.h | 12 +- Modules/clinic/sha512module.c.h | 12 +- Modules/clinic/zlibmodule.c.h | 17 +- 26 files changed, 440 insertions(+), 302 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/clinic/_iomodule.c.h b/Modules/_io/clinic/_iomodule.c.h index ee01cfb7b3..50891c59d1 100644 --- a/Modules/_io/clinic/_iomodule.c.h +++ b/Modules/_io/clinic/_iomodule.c.h @@ -138,7 +138,8 @@ static PyObject * _io_open(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"file", "mode", "buffering", "encoding", "errors", "newline", "closefd", "opener", NULL}; + static const char * const _keywords[] = {"file", "mode", "buffering", "encoding", "errors", "newline", "closefd", "opener", NULL}; + static _PyArg_Parser _parser = {"O|sizzziO:open", _keywords, 0}; PyObject *file; const char *mode = "r"; int buffering = -1; @@ -148,7 +149,7 @@ _io_open(PyObject *module, PyObject *args, PyObject *kwargs) int closefd = 1; PyObject *opener = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|sizzziO:open", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &file, &mode, &buffering, &encoding, &errors, &newline, &closefd, &opener)) { goto exit; } @@ -157,4 +158,4 @@ _io_open(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=ae2facf262cf464e input=a9049054013a1b77]*/ +/*[clinic end generated code: output=14769629391a3130 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/bufferedio.c.h b/Modules/_io/clinic/bufferedio.c.h index c4dfc1640e..58144a4015 100644 --- a/Modules/_io/clinic/bufferedio.c.h +++ b/Modules/_io/clinic/bufferedio.c.h @@ -324,11 +324,12 @@ static int _io_BufferedReader___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"raw", "buffer_size", NULL}; + static const char * const _keywords[] = {"raw", "buffer_size", NULL}; + static _PyArg_Parser _parser = {"O|n:BufferedReader", _keywords, 0}; PyObject *raw; Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|n:BufferedReader", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &raw, &buffer_size)) { goto exit; } @@ -356,11 +357,12 @@ static int _io_BufferedWriter___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"raw", "buffer_size", NULL}; + static const char * const _keywords[] = {"raw", "buffer_size", NULL}; + static _PyArg_Parser _parser = {"O|n:BufferedWriter", _keywords, 0}; PyObject *raw; Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|n:BufferedWriter", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &raw, &buffer_size)) { goto exit; } @@ -459,11 +461,12 @@ static int _io_BufferedRandom___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"raw", "buffer_size", NULL}; + static const char * const _keywords[] = {"raw", "buffer_size", NULL}; + static _PyArg_Parser _parser = {"O|n:BufferedRandom", _keywords, 0}; PyObject *raw; Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|n:BufferedRandom", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &raw, &buffer_size)) { goto exit; } @@ -472,4 +475,4 @@ _io_BufferedRandom___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=4f6196c756b880c8 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a956f394ecde4cf9 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/bytesio.c.h b/Modules/_io/clinic/bytesio.c.h index 1f736fed80..c64ce5c77c 100644 --- a/Modules/_io/clinic/bytesio.c.h +++ b/Modules/_io/clinic/bytesio.c.h @@ -415,10 +415,11 @@ static int _io_BytesIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"initial_bytes", NULL}; + static const char * const _keywords[] = {"initial_bytes", NULL}; + static _PyArg_Parser _parser = {"|O:BytesIO", _keywords, 0}; PyObject *initvalue = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:BytesIO", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &initvalue)) { goto exit; } @@ -427,4 +428,4 @@ _io_BytesIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=3fdb62f3e3b0544d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6382e8eb578eea64 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/fileio.c.h b/Modules/_io/clinic/fileio.c.h index 038836a2c1..908fe0f8c8 100644 --- a/Modules/_io/clinic/fileio.c.h +++ b/Modules/_io/clinic/fileio.c.h @@ -49,13 +49,14 @@ static int _io_FileIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"file", "mode", "closefd", "opener", NULL}; + static const char * const _keywords[] = {"file", "mode", "closefd", "opener", NULL}; + static _PyArg_Parser _parser = {"O|siO:FileIO", _keywords, 0}; PyObject *nameobj; const char *mode = "r"; int closefd = 1; PyObject *opener = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|siO:FileIO", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &nameobj, &mode, &closefd, &opener)) { goto exit; } @@ -372,4 +373,4 @@ _io_FileIO_isatty(fileio *self, PyObject *Py_UNUSED(ignored)) #ifndef _IO_FILEIO_TRUNCATE_METHODDEF #define _IO_FILEIO_TRUNCATE_METHODDEF #endif /* !defined(_IO_FILEIO_TRUNCATE_METHODDEF) */ -/*[clinic end generated code: output=bf4b4bd6b976346d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=51924bc0ee11d58e input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/stringio.c.h b/Modules/_io/clinic/stringio.c.h index ce9f46e879..d2c05d7cb1 100644 --- a/Modules/_io/clinic/stringio.c.h +++ b/Modules/_io/clinic/stringio.c.h @@ -221,11 +221,12 @@ static int _io_StringIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"initial_value", "newline", NULL}; + static const char * const _keywords[] = {"initial_value", "newline", NULL}; + static _PyArg_Parser _parser = {"|OO:StringIO", _keywords, 0}; PyObject *value = NULL; PyObject *newline_obj = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OO:StringIO", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &value, &newline_obj)) { goto exit; } @@ -288,4 +289,4 @@ _io_StringIO_seekable(stringio *self, PyObject *Py_UNUSED(ignored)) { return _io_StringIO_seekable_impl(self); } -/*[clinic end generated code: output=0513219581cbe952 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5dd5c2a213e75405 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/textio.c.h b/Modules/_io/clinic/textio.c.h index f115326a00..6c40819c5c 100644 --- a/Modules/_io/clinic/textio.c.h +++ b/Modules/_io/clinic/textio.c.h @@ -24,12 +24,13 @@ static int _io_IncrementalNewlineDecoder___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"decoder", "translate", "errors", NULL}; + static const char * const _keywords[] = {"decoder", "translate", "errors", NULL}; + static _PyArg_Parser _parser = {"Oi|O:IncrementalNewlineDecoder", _keywords, 0}; PyObject *decoder; int translate; PyObject *errors = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi|O:IncrementalNewlineDecoder", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &decoder, &translate, &errors)) { goto exit; } @@ -55,11 +56,12 @@ static PyObject * _io_IncrementalNewlineDecoder_decode(nldecoder_object *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"input", "final", NULL}; + static const char * const _keywords[] = {"input", "final", NULL}; + static _PyArg_Parser _parser = {"O|i:decode", _keywords, 0}; PyObject *input; int final = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|i:decode", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &input, &final)) { goto exit; } @@ -155,7 +157,8 @@ static int _io_TextIOWrapper___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"buffer", "encoding", "errors", "newline", "line_buffering", "write_through", NULL}; + static const char * const _keywords[] = {"buffer", "encoding", "errors", "newline", "line_buffering", "write_through", NULL}; + static _PyArg_Parser _parser = {"O|zzzii:TextIOWrapper", _keywords, 0}; PyObject *buffer; const char *encoding = NULL; const char *errors = NULL; @@ -163,7 +166,7 @@ _io_TextIOWrapper___init__(PyObject *self, PyObject *args, PyObject *kwargs) int line_buffering = 0; int write_through = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|zzzii:TextIOWrapper", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &buffer, &encoding, &errors, &newline, &line_buffering, &write_through)) { goto exit; } @@ -461,4 +464,4 @@ _io_TextIOWrapper_close(textio *self, PyObject *Py_UNUSED(ignored)) { return _io_TextIOWrapper_close_impl(self); } -/*[clinic end generated code: output=31a39bbbe07ae4e7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7ec624a9bf6393f5 input=a9049054013a1b77]*/ diff --git a/Modules/cjkcodecs/clinic/multibytecodec.c.h b/Modules/cjkcodecs/clinic/multibytecodec.c.h index 0d8a3e0e0d..c9c58cd8ed 100644 --- a/Modules/cjkcodecs/clinic/multibytecodec.c.h +++ b/Modules/cjkcodecs/clinic/multibytecodec.c.h @@ -25,11 +25,12 @@ static PyObject * _multibytecodec_MultibyteCodec_encode(MultibyteCodecObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"input", "errors", NULL}; + static const char * const _keywords[] = {"input", "errors", NULL}; + static _PyArg_Parser _parser = {"O|z:encode", _keywords, 0}; PyObject *input; const char *errors = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|z:encode", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &input, &errors)) { goto exit; } @@ -62,11 +63,12 @@ static PyObject * _multibytecodec_MultibyteCodec_decode(MultibyteCodecObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"input", "errors", NULL}; + static const char * const _keywords[] = {"input", "errors", NULL}; + static _PyArg_Parser _parser = {"y*|z:decode", _keywords, 0}; Py_buffer input = {NULL, NULL}; const char *errors = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|z:decode", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &input, &errors)) { goto exit; } @@ -98,11 +100,12 @@ static PyObject * _multibytecodec_MultibyteIncrementalEncoder_encode(MultibyteIncrementalEncoderObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"input", "final", NULL}; + static const char * const _keywords[] = {"input", "final", NULL}; + static _PyArg_Parser _parser = {"O|i:encode", _keywords, 0}; PyObject *input; int final = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|i:encode", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &input, &final)) { goto exit; } @@ -146,11 +149,12 @@ static PyObject * _multibytecodec_MultibyteIncrementalDecoder_decode(MultibyteIncrementalDecoderObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"input", "final", NULL}; + static const char * const _keywords[] = {"input", "final", NULL}; + static _PyArg_Parser _parser = {"y*|i:decode", _keywords, 0}; Py_buffer input = {NULL, NULL}; int final = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|i:decode", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &input, &final)) { goto exit; } @@ -326,4 +330,4 @@ PyDoc_STRVAR(_multibytecodec___create_codec__doc__, #define _MULTIBYTECODEC___CREATE_CODEC_METHODDEF \ {"__create_codec", (PyCFunction)_multibytecodec___create_codec, METH_O, _multibytecodec___create_codec__doc__}, -/*[clinic end generated code: output=f837bc56b2fa2a4e input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8e86fa162c85230b input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_bz2module.c.h b/Modules/clinic/_bz2module.c.h index 9451fd3b15..c4032ea37f 100644 --- a/Modules/clinic/_bz2module.c.h +++ b/Modules/clinic/_bz2module.c.h @@ -125,11 +125,12 @@ static PyObject * _bz2_BZ2Decompressor_decompress(BZ2Decompressor *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"data", "max_length", NULL}; + static const char * const _keywords[] = {"data", "max_length", NULL}; + static _PyArg_Parser _parser = {"y*|n:decompress", _keywords, 0}; Py_buffer data = {NULL, NULL}; Py_ssize_t max_length = -1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|n:decompress", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &data, &max_length)) { goto exit; } @@ -173,4 +174,4 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=71be22f38224fe84 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=40e5ef049f9e719b input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index 52c61c597a..090b1efd9e 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -65,12 +65,13 @@ static PyObject * _codecs_encode(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"obj", "encoding", "errors", NULL}; + static const char * const _keywords[] = {"obj", "encoding", "errors", NULL}; + static _PyArg_Parser _parser = {"O|ss:encode", _keywords, 0}; PyObject *obj; const char *encoding = NULL; const char *errors = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:encode", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &obj, &encoding, &errors)) { goto exit; } @@ -103,12 +104,13 @@ static PyObject * _codecs_decode(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"obj", "encoding", "errors", NULL}; + static const char * const _keywords[] = {"obj", "encoding", "errors", NULL}; + static _PyArg_Parser _parser = {"O|ss:decode", _keywords, 0}; PyObject *obj; const char *encoding = NULL; const char *errors = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:decode", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &obj, &encoding, &errors)) { goto exit; } @@ -1455,4 +1457,4 @@ exit: #ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF #define _CODECS_CODE_PAGE_ENCODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ -/*[clinic end generated code: output=6e89ff4423c12a9b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0221e4eece62c905 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_datetimemodule.c.h b/Modules/clinic/_datetimemodule.c.h index cf9860b574..cf0920777a 100644 --- a/Modules/clinic/_datetimemodule.c.h +++ b/Modules/clinic/_datetimemodule.c.h @@ -23,10 +23,11 @@ static PyObject * datetime_datetime_now(PyTypeObject *type, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"tz", NULL}; + static const char * const _keywords[] = {"tz", NULL}; + static _PyArg_Parser _parser = {"|O:now", _keywords, 0}; PyObject *tz = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:now", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &tz)) { goto exit; } @@ -35,4 +36,4 @@ datetime_datetime_now(PyTypeObject *type, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=a82e6bd057a5dab9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=61f85af5637df8b5 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_elementtree.c.h b/Modules/clinic/_elementtree.c.h index 266b92f85f..c91dfbf4b9 100644 --- a/Modules/clinic/_elementtree.c.h +++ b/Modules/clinic/_elementtree.c.h @@ -146,11 +146,12 @@ static PyObject * _elementtree_Element_find(ElementObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "namespaces", NULL}; + static const char * const _keywords[] = {"path", "namespaces", NULL}; + static _PyArg_Parser _parser = {"O|O:find", _keywords, 0}; PyObject *path; PyObject *namespaces = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:find", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &path, &namespaces)) { goto exit; } @@ -177,12 +178,13 @@ static PyObject * _elementtree_Element_findtext(ElementObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "default", "namespaces", NULL}; + static const char * const _keywords[] = {"path", "default", "namespaces", NULL}; + static _PyArg_Parser _parser = {"O|OO:findtext", _keywords, 0}; PyObject *path; PyObject *default_value = Py_None; PyObject *namespaces = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OO:findtext", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &path, &default_value, &namespaces)) { goto exit; } @@ -208,11 +210,12 @@ static PyObject * _elementtree_Element_findall(ElementObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "namespaces", NULL}; + static const char * const _keywords[] = {"path", "namespaces", NULL}; + static _PyArg_Parser _parser = {"O|O:findall", _keywords, 0}; PyObject *path; PyObject *namespaces = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:findall", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &path, &namespaces)) { goto exit; } @@ -238,11 +241,12 @@ static PyObject * _elementtree_Element_iterfind(ElementObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "namespaces", NULL}; + static const char * const _keywords[] = {"path", "namespaces", NULL}; + static _PyArg_Parser _parser = {"O|O:iterfind", _keywords, 0}; PyObject *path; PyObject *namespaces = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:iterfind", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &path, &namespaces)) { goto exit; } @@ -268,11 +272,12 @@ static PyObject * _elementtree_Element_get(ElementObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"key", "default", NULL}; + static const char * const _keywords[] = {"key", "default", NULL}; + static _PyArg_Parser _parser = {"O|O:get", _keywords, 0}; PyObject *key; PyObject *default_value = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:get", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &key, &default_value)) { goto exit; } @@ -314,10 +319,11 @@ static PyObject * _elementtree_Element_iter(ElementObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"tag", NULL}; + static const char * const _keywords[] = {"tag", NULL}; + static _PyArg_Parser _parser = {"|O:iter", _keywords, 0}; PyObject *tag = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:iter", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &tag)) { goto exit; } @@ -501,10 +507,11 @@ static int _elementtree_TreeBuilder___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"element_factory", NULL}; + static const char * const _keywords[] = {"element_factory", NULL}; + static _PyArg_Parser _parser = {"|O:TreeBuilder", _keywords, 0}; PyObject *element_factory = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:TreeBuilder", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &element_factory)) { goto exit; } @@ -585,12 +592,13 @@ static int _elementtree_XMLParser___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"html", "target", "encoding", NULL}; + static const char * const _keywords[] = {"html", "target", "encoding", NULL}; + static _PyArg_Parser _parser = {"|OOz:XMLParser", _keywords, 0}; PyObject *html = NULL; PyObject *target = NULL; const char *encoding = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OOz:XMLParser", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &html, &target, &encoding)) { goto exit; } @@ -694,4 +702,4 @@ _elementtree_XMLParser__setevents(XMLParserObject *self, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=491eb5718c1ae64b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4c5e94c28a009ce6 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h index 899d5c0e33..c2ac89a9cd 100644 --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -91,11 +91,12 @@ static PyObject * _lzma_LZMADecompressor_decompress(Decompressor *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"data", "max_length", NULL}; + static const char * const _keywords[] = {"data", "max_length", NULL}; + static _PyArg_Parser _parser = {"y*|n:decompress", _keywords, 0}; Py_buffer data = {NULL, NULL}; Py_ssize_t max_length = -1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|n:decompress", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &data, &max_length)) { goto exit; } @@ -141,12 +142,13 @@ static int _lzma_LZMADecompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"format", "memlimit", "filters", NULL}; + static const char * const _keywords[] = {"format", "memlimit", "filters", NULL}; + static _PyArg_Parser _parser = {"|iOO:LZMADecompressor", _keywords, 0}; int format = FORMAT_AUTO; PyObject *memlimit = Py_None; PyObject *filters = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iOO:LZMADecompressor", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &format, &memlimit, &filters)) { goto exit; } @@ -254,4 +256,4 @@ exit: return return_value; } -/*[clinic end generated code: output=25bf57a0845d147a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9434583fe111c771 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h index 0528615bbe..b8eec333cd 100644 --- a/Modules/clinic/_pickle.c.h +++ b/Modules/clinic/_pickle.c.h @@ -93,12 +93,13 @@ static int _pickle_Pickler___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"file", "protocol", "fix_imports", NULL}; + static const char * const _keywords[] = {"file", "protocol", "fix_imports", NULL}; + static _PyArg_Parser _parser = {"O|Op:Pickler", _keywords, 0}; PyObject *file; PyObject *protocol = NULL; int fix_imports = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Op:Pickler", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &file, &protocol, &fix_imports)) { goto exit; } @@ -285,13 +286,14 @@ static int _pickle_Unpickler___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - static char *_keywords[] = {"file", "fix_imports", "encoding", "errors", NULL}; + static const char * const _keywords[] = {"file", "fix_imports", "encoding", "errors", NULL}; + static _PyArg_Parser _parser = {"O|$pss:Unpickler", _keywords, 0}; PyObject *file; int fix_imports = 1; const char *encoding = "ASCII"; const char *errors = "strict"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|$pss:Unpickler", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &file, &fix_imports, &encoding, &errors)) { goto exit; } @@ -392,13 +394,14 @@ static PyObject * _pickle_dump(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"obj", "file", "protocol", "fix_imports", NULL}; + static const char * const _keywords[] = {"obj", "file", "protocol", "fix_imports", NULL}; + static _PyArg_Parser _parser = {"OO|O$p:dump", _keywords, 0}; PyObject *obj; PyObject *file; PyObject *protocol = NULL; int fix_imports = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|O$p:dump", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &obj, &file, &protocol, &fix_imports)) { goto exit; } @@ -437,12 +440,13 @@ static PyObject * _pickle_dumps(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"obj", "protocol", "fix_imports", NULL}; + static const char * const _keywords[] = {"obj", "protocol", "fix_imports", NULL}; + static _PyArg_Parser _parser = {"O|O$p:dumps", _keywords, 0}; PyObject *obj; PyObject *protocol = NULL; int fix_imports = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O$p:dumps", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &obj, &protocol, &fix_imports)) { goto exit; } @@ -492,13 +496,14 @@ static PyObject * _pickle_load(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"file", "fix_imports", "encoding", "errors", NULL}; + static const char * const _keywords[] = {"file", "fix_imports", "encoding", "errors", NULL}; + static _PyArg_Parser _parser = {"O|$pss:load", _keywords, 0}; PyObject *file; int fix_imports = 1; const char *encoding = "ASCII"; const char *errors = "strict"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|$pss:load", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &file, &fix_imports, &encoding, &errors)) { goto exit; } @@ -539,13 +544,14 @@ static PyObject * _pickle_loads(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"data", "fix_imports", "encoding", "errors", NULL}; + static const char * const _keywords[] = {"data", "fix_imports", "encoding", "errors", NULL}; + static _PyArg_Parser _parser = {"O|$pss:loads", _keywords, 0}; PyObject *data; int fix_imports = 1; const char *encoding = "ASCII"; const char *errors = "strict"; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|$pss:loads", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &data, &fix_imports, &encoding, &errors)) { goto exit; } @@ -554,4 +560,4 @@ _pickle_loads(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=5c5f9149df292ce4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=50f9127109673c98 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_sre.c.h b/Modules/clinic/_sre.c.h index 2a8b220377..9aba13efda 100644 --- a/Modules/clinic/_sre.c.h +++ b/Modules/clinic/_sre.c.h @@ -80,13 +80,14 @@ static PyObject * _sre_SRE_Pattern_match(PatternObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", "pos", "endpos", "pattern", NULL}; + static const char * const _keywords[] = {"string", "pos", "endpos", "pattern", NULL}; + static _PyArg_Parser _parser = {"|Onn$O:match", _keywords, 0}; PyObject *string = NULL; Py_ssize_t pos = 0; Py_ssize_t endpos = PY_SSIZE_T_MAX; PyObject *pattern = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:match", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string, &pos, &endpos, &pattern)) { goto exit; } @@ -115,13 +116,14 @@ static PyObject * _sre_SRE_Pattern_fullmatch(PatternObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", "pos", "endpos", "pattern", NULL}; + static const char * const _keywords[] = {"string", "pos", "endpos", "pattern", NULL}; + static _PyArg_Parser _parser = {"|Onn$O:fullmatch", _keywords, 0}; PyObject *string = NULL; Py_ssize_t pos = 0; Py_ssize_t endpos = PY_SSIZE_T_MAX; PyObject *pattern = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:fullmatch", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string, &pos, &endpos, &pattern)) { goto exit; } @@ -152,13 +154,14 @@ static PyObject * _sre_SRE_Pattern_search(PatternObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", "pos", "endpos", "pattern", NULL}; + static const char * const _keywords[] = {"string", "pos", "endpos", "pattern", NULL}; + static _PyArg_Parser _parser = {"|Onn$O:search", _keywords, 0}; PyObject *string = NULL; Py_ssize_t pos = 0; Py_ssize_t endpos = PY_SSIZE_T_MAX; PyObject *pattern = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:search", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string, &pos, &endpos, &pattern)) { goto exit; } @@ -187,13 +190,14 @@ static PyObject * _sre_SRE_Pattern_findall(PatternObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", "pos", "endpos", "source", NULL}; + static const char * const _keywords[] = {"string", "pos", "endpos", "source", NULL}; + static _PyArg_Parser _parser = {"|Onn$O:findall", _keywords, 0}; PyObject *string = NULL; Py_ssize_t pos = 0; Py_ssize_t endpos = PY_SSIZE_T_MAX; PyObject *source = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Onn$O:findall", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string, &pos, &endpos, &source)) { goto exit; } @@ -222,12 +226,13 @@ static PyObject * _sre_SRE_Pattern_finditer(PatternObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", "pos", "endpos", NULL}; + static const char * const _keywords[] = {"string", "pos", "endpos", NULL}; + static _PyArg_Parser _parser = {"O|nn:finditer", _keywords, 0}; PyObject *string; Py_ssize_t pos = 0; Py_ssize_t endpos = PY_SSIZE_T_MAX; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|nn:finditer", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string, &pos, &endpos)) { goto exit; } @@ -253,12 +258,13 @@ static PyObject * _sre_SRE_Pattern_scanner(PatternObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", "pos", "endpos", NULL}; + static const char * const _keywords[] = {"string", "pos", "endpos", NULL}; + static _PyArg_Parser _parser = {"O|nn:scanner", _keywords, 0}; PyObject *string; Py_ssize_t pos = 0; Py_ssize_t endpos = PY_SSIZE_T_MAX; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|nn:scanner", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string, &pos, &endpos)) { goto exit; } @@ -285,12 +291,13 @@ static PyObject * _sre_SRE_Pattern_split(PatternObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", "maxsplit", "source", NULL}; + static const char * const _keywords[] = {"string", "maxsplit", "source", NULL}; + static _PyArg_Parser _parser = {"|On$O:split", _keywords, 0}; PyObject *string = NULL; Py_ssize_t maxsplit = 0; PyObject *source = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|On$O:split", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string, &maxsplit, &source)) { goto exit; } @@ -317,12 +324,13 @@ static PyObject * _sre_SRE_Pattern_sub(PatternObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"repl", "string", "count", NULL}; + static const char * const _keywords[] = {"repl", "string", "count", NULL}; + static _PyArg_Parser _parser = {"OO|n:sub", _keywords, 0}; PyObject *repl; PyObject *string; Py_ssize_t count = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|n:sub", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &repl, &string, &count)) { goto exit; } @@ -349,12 +357,13 @@ static PyObject * _sre_SRE_Pattern_subn(PatternObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"repl", "string", "count", NULL}; + static const char * const _keywords[] = {"repl", "string", "count", NULL}; + static _PyArg_Parser _parser = {"OO|n:subn", _keywords, 0}; PyObject *repl; PyObject *string; Py_ssize_t count = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|n:subn", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &repl, &string, &count)) { goto exit; } @@ -396,10 +405,11 @@ static PyObject * _sre_SRE_Pattern___deepcopy__(PatternObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"memo", NULL}; + static const char * const _keywords[] = {"memo", NULL}; + static _PyArg_Parser _parser = {"O:__deepcopy__", _keywords, 0}; PyObject *memo; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:__deepcopy__", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &memo)) { goto exit; } @@ -427,7 +437,8 @@ static PyObject * _sre_compile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL}; + static const char * const _keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL}; + static _PyArg_Parser _parser = {"OiO!nOO:compile", _keywords, 0}; PyObject *pattern; int flags; PyObject *code; @@ -435,7 +446,7 @@ _sre_compile(PyObject *module, PyObject *args, PyObject *kwargs) PyObject *groupindex; PyObject *indexgroup; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OiO!nOO:compile", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &pattern, &flags, &PyList_Type, &code, &groups, &groupindex, &indexgroup)) { goto exit; } @@ -461,10 +472,11 @@ static PyObject * _sre_SRE_Match_expand(MatchObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"template", NULL}; + static const char * const _keywords[] = {"template", NULL}; + static _PyArg_Parser _parser = {"O:expand", _keywords, 0}; PyObject *template; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:expand", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &template)) { goto exit; } @@ -493,10 +505,11 @@ static PyObject * _sre_SRE_Match_groups(MatchObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"default", NULL}; + static const char * const _keywords[] = {"default", NULL}; + static _PyArg_Parser _parser = {"|O:groups", _keywords, 0}; PyObject *default_value = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:groups", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &default_value)) { goto exit; } @@ -525,10 +538,11 @@ static PyObject * _sre_SRE_Match_groupdict(MatchObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"default", NULL}; + static const char * const _keywords[] = {"default", NULL}; + static _PyArg_Parser _parser = {"|O:groupdict", _keywords, 0}; PyObject *default_value = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:groupdict", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &default_value)) { goto exit; } @@ -667,10 +681,11 @@ static PyObject * _sre_SRE_Match___deepcopy__(MatchObject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"memo", NULL}; + static const char * const _keywords[] = {"memo", NULL}; + static _PyArg_Parser _parser = {"O:__deepcopy__", _keywords, 0}; PyObject *memo; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:__deepcopy__", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &memo)) { goto exit; } @@ -713,4 +728,4 @@ _sre_SRE_Scanner_search(ScannerObject *self, PyObject *Py_UNUSED(ignored)) { return _sre_SRE_Scanner_search_impl(self); } -/*[clinic end generated code: output=af9455cb54b2a907 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2cbc2b1482738e54 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index fd184d5f0f..0bdc35e5f9 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -458,12 +458,13 @@ static PyObject * _ssl__SSLContext_load_cert_chain(PySSLContext *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"certfile", "keyfile", "password", NULL}; + static const char * const _keywords[] = {"certfile", "keyfile", "password", NULL}; + static _PyArg_Parser _parser = {"O|OO:load_cert_chain", _keywords, 0}; PyObject *certfile; PyObject *keyfile = NULL; PyObject *password = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OO:load_cert_chain", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &certfile, &keyfile, &password)) { goto exit; } @@ -491,12 +492,13 @@ static PyObject * _ssl__SSLContext_load_verify_locations(PySSLContext *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"cafile", "capath", "cadata", NULL}; + static const char * const _keywords[] = {"cafile", "capath", "cadata", NULL}; + static _PyArg_Parser _parser = {"|OOO:load_verify_locations", _keywords, 0}; PyObject *cafile = NULL; PyObject *capath = NULL; PyObject *cadata = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OOO:load_verify_locations", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &cafile, &capath, &cadata)) { goto exit; } @@ -530,12 +532,13 @@ static PyObject * _ssl__SSLContext__wrap_socket(PySSLContext *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"sock", "server_side", "server_hostname", NULL}; + static const char * const _keywords[] = {"sock", "server_side", "server_hostname", NULL}; + static _PyArg_Parser _parser = {"O!i|O:_wrap_socket", _keywords, 0}; PyObject *sock; int server_side; PyObject *hostname_obj = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!i|O:_wrap_socket", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, PySocketModule.Sock_Type, &sock, &server_side, &hostname_obj)) { goto exit; } @@ -563,13 +566,14 @@ static PyObject * _ssl__SSLContext__wrap_bio(PySSLContext *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"incoming", "outgoing", "server_side", "server_hostname", NULL}; + static const char * const _keywords[] = {"incoming", "outgoing", "server_side", "server_hostname", NULL}; + static _PyArg_Parser _parser = {"O!O!i|O:_wrap_bio", _keywords, 0}; PySSLMemoryBIO *incoming; PySSLMemoryBIO *outgoing; int server_side; PyObject *hostname_obj = Py_None; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!i|O:_wrap_bio", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &PySSLMemoryBIO_Type, &incoming, &PySSLMemoryBIO_Type, &outgoing, &server_side, &hostname_obj)) { goto exit; } @@ -684,10 +688,11 @@ static PyObject * _ssl__SSLContext_get_ca_certs(PySSLContext *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"binary_form", NULL}; + static const char * const _keywords[] = {"binary_form", NULL}; + static _PyArg_Parser _parser = {"|p:get_ca_certs", _keywords, 0}; int binary_form = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|p:get_ca_certs", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &binary_form)) { goto exit; } @@ -994,11 +999,12 @@ static PyObject * _ssl_txt2obj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"txt", "name", NULL}; + static const char * const _keywords[] = {"txt", "name", NULL}; + static _PyArg_Parser _parser = {"s|p:txt2obj", _keywords, 0}; const char *txt; int name = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|p:txt2obj", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &txt, &name)) { goto exit; } @@ -1059,10 +1065,11 @@ static PyObject * _ssl_enum_certificates(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"store_name", NULL}; + static const char * const _keywords[] = {"store_name", NULL}; + static _PyArg_Parser _parser = {"s:enum_certificates", _keywords, 0}; const char *store_name; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:enum_certificates", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &store_name)) { goto exit; } @@ -1097,10 +1104,11 @@ static PyObject * _ssl_enum_crls(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"store_name", NULL}; + static const char * const _keywords[] = {"store_name", NULL}; + static _PyArg_Parser _parser = {"s:enum_crls", _keywords, 0}; const char *store_name; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:enum_crls", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &store_name)) { goto exit; } @@ -1135,4 +1143,4 @@ exit: #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=02444732c19722b3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6057f95343369849 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h index e0c7d6c62d..44d48a9dd5 100644 --- a/Modules/clinic/_winapi.c.h +++ b/Modules/clinic/_winapi.c.h @@ -105,11 +105,12 @@ static PyObject * _winapi_ConnectNamedPipe(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"handle", "overlapped", NULL}; + static const char * const _keywords[] = {"handle", "overlapped", NULL}; + static _PyArg_Parser _parser = {"" F_HANDLE "|i:ConnectNamedPipe", _keywords, 0}; HANDLE handle; int use_overlapped = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" F_HANDLE "|i:ConnectNamedPipe", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &handle, &use_overlapped)) { goto exit; } @@ -679,12 +680,13 @@ static PyObject * _winapi_ReadFile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"handle", "size", "overlapped", NULL}; + static const char * const _keywords[] = {"handle", "size", "overlapped", NULL}; + static _PyArg_Parser _parser = {"" F_HANDLE "i|i:ReadFile", _keywords, 0}; HANDLE handle; int size; int use_overlapped = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" F_HANDLE "i|i:ReadFile", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &handle, &size, &use_overlapped)) { goto exit; } @@ -872,12 +874,13 @@ static PyObject * _winapi_WriteFile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"handle", "buffer", "overlapped", NULL}; + static const char * const _keywords[] = {"handle", "buffer", "overlapped", NULL}; + static _PyArg_Parser _parser = {"" F_HANDLE "O|i:WriteFile", _keywords, 0}; HANDLE handle; PyObject *buffer; int use_overlapped = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" F_HANDLE "O|i:WriteFile", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &handle, &buffer, &use_overlapped)) { goto exit; } @@ -886,4 +889,4 @@ _winapi_WriteFile(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=8032f3371c14749e input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4bfccfb32ab726e8 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h index 68c34f9750..0ee7f57959 100644 --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -112,11 +112,12 @@ static PyObject * binascii_b2a_base64(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"data", "newline", NULL}; + static const char * const _keywords[] = {"data", "newline", NULL}; + static _PyArg_Parser _parser = {"y*|$i:b2a_base64", _keywords, 0}; Py_buffer data = {NULL, NULL}; int newline = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|$i:b2a_base64", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &data, &newline)) { goto exit; } @@ -488,11 +489,12 @@ static PyObject * binascii_a2b_qp(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"data", "header", NULL}; + static const char * const _keywords[] = {"data", "header", NULL}; + static _PyArg_Parser _parser = {"O&|i:a2b_qp", _keywords, 0}; Py_buffer data = {NULL, NULL}; int header = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i:a2b_qp", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, ascii_buffer_converter, &data, &header)) { goto exit; } @@ -527,13 +529,14 @@ static PyObject * binascii_b2a_qp(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"data", "quotetabs", "istext", "header", NULL}; + static const char * const _keywords[] = {"data", "quotetabs", "istext", "header", NULL}; + static _PyArg_Parser _parser = {"y*|iii:b2a_qp", _keywords, 0}; Py_buffer data = {NULL, NULL}; int quotetabs = 0; int istext = 1; int header = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|iii:b2a_qp", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &data, "etabs, &istext, &header)) { goto exit; } @@ -547,4 +550,4 @@ exit: return return_value; } -/*[clinic end generated code: output=d91d1058dc0590e1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=12611b05d8bf4a9c input=a9049054013a1b77]*/ diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h index cba035f150..e46c31420e 100644 --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -861,14 +861,15 @@ static PyObject * cmath_isclose(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL}; + static const char * const _keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL}; + static _PyArg_Parser _parser = {"DD|$dd:isclose", _keywords, 0}; Py_complex a; Py_complex b; double rel_tol = 1e-09; double abs_tol = 0.0; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "DD|$dd:isclose", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &a, &b, &rel_tol, &abs_tol)) { goto exit; } @@ -881,4 +882,4 @@ cmath_isclose(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=0f49dd11b50175bc input=a9049054013a1b77]*/ +/*[clinic end generated code: output=aa2e77ca9fc26928 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/grpmodule.c.h b/Modules/clinic/grpmodule.c.h index 82dcd53780..9c9d595c2a 100644 --- a/Modules/clinic/grpmodule.c.h +++ b/Modules/clinic/grpmodule.c.h @@ -20,10 +20,11 @@ static PyObject * grp_getgrgid(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"id", NULL}; + static const char * const _keywords[] = {"id", NULL}; + static _PyArg_Parser _parser = {"O:getgrgid", _keywords, 0}; PyObject *id; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:getgrgid", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &id)) { goto exit; } @@ -51,10 +52,11 @@ static PyObject * grp_getgrnam(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"name", NULL}; + static const char * const _keywords[] = {"name", NULL}; + static _PyArg_Parser _parser = {"U:getgrnam", _keywords, 0}; PyObject *name; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "U:getgrnam", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &name)) { goto exit; } @@ -84,4 +86,4 @@ grp_getgrall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return grp_getgrall_impl(module); } -/*[clinic end generated code: output=8b7502970a29e7f1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c06081097b7fffe7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/md5module.c.h b/Modules/clinic/md5module.c.h index 25dc7bb462..aeb1c41118 100644 --- a/Modules/clinic/md5module.c.h +++ b/Modules/clinic/md5module.c.h @@ -81,10 +81,11 @@ static PyObject * _md5_md5(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; + static const char * const _keywords[] = {"string", NULL}; + static _PyArg_Parser _parser = {"|O:md5", _keywords, 0}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:md5", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string)) { goto exit; } @@ -93,4 +94,4 @@ _md5_md5(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=8f640a98761daffe input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f86fc2f3f21831e2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index c550b9ddc7..26dedd1a73 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -36,12 +36,13 @@ static PyObject * os_stat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "dir_fd", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"path", "dir_fd", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"O&|$O&p:stat", _keywords, 0}; path_t path = PATH_T_INITIALIZE("stat", "path", 0, 1); int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&p:stat", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; } @@ -73,11 +74,12 @@ static PyObject * os_lstat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "dir_fd", NULL}; + static const char * const _keywords[] = {"path", "dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&|$O&:lstat", _keywords, 0}; path_t path = PATH_T_INITIALIZE("lstat", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:lstat", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -133,7 +135,8 @@ static PyObject * os_access(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"O&i|$O&pp:access", _keywords, 0}; path_t path = PATH_T_INITIALIZE("access", "path", 0, 1); int mode; int dir_fd = DEFAULT_DIR_FD; @@ -141,7 +144,7 @@ os_access(PyObject *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&pp:access", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &mode, FACCESSAT_DIR_FD_CONVERTER, &dir_fd, &effective_ids, &follow_symlinks)) { goto exit; } @@ -239,10 +242,11 @@ static PyObject * os_chdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = {"O&:chdir", _keywords, 0}; path_t path = PATH_T_INITIALIZE("chdir", "path", 0, PATH_HAVE_FCHDIR); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:chdir", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path)) { goto exit; } @@ -276,10 +280,11 @@ static PyObject * os_fchdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; + static const char * const _keywords[] = {"fd", NULL}; + static _PyArg_Parser _parser = {"O&:fchdir", _keywords, 0}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:fchdir", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, fildes_converter, &fd)) { goto exit; } @@ -328,13 +333,14 @@ static PyObject * os_chmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"O&i|$O&p:chmod", _keywords, 0}; path_t path = PATH_T_INITIALIZE("chmod", "path", 0, PATH_HAVE_FCHMOD); int mode; int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&p:chmod", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &mode, FCHMODAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; } @@ -367,11 +373,12 @@ static PyObject * os_fchmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"fd", "mode", NULL}; + static const char * const _keywords[] = {"fd", "mode", NULL}; + static _PyArg_Parser _parser = {"ii:fchmod", _keywords, 0}; int fd; int mode; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii:fchmod", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &fd, &mode)) { goto exit; } @@ -404,11 +411,12 @@ static PyObject * os_lchmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", NULL}; + static const char * const _keywords[] = {"path", "mode", NULL}; + static _PyArg_Parser _parser = {"O&i:lchmod", _keywords, 0}; path_t path = PATH_T_INITIALIZE("lchmod", "path", 0, 0); int mode; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i:lchmod", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &mode)) { goto exit; } @@ -448,12 +456,13 @@ static PyObject * os_chflags(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "flags", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"path", "flags", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"O&k|p:chflags", _keywords, 0}; path_t path = PATH_T_INITIALIZE("chflags", "path", 0, 0); unsigned long flags; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&k|p:chflags", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &flags, &follow_symlinks)) { goto exit; } @@ -489,11 +498,12 @@ static PyObject * os_lchflags(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "flags", NULL}; + static const char * const _keywords[] = {"path", "flags", NULL}; + static _PyArg_Parser _parser = {"O&k:lchflags", _keywords, 0}; path_t path = PATH_T_INITIALIZE("lchflags", "path", 0, 0); unsigned long flags; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&k:lchflags", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &flags)) { goto exit; } @@ -526,10 +536,11 @@ static PyObject * os_chroot(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = {"O&:chroot", _keywords, 0}; path_t path = PATH_T_INITIALIZE("chroot", "path", 0, 0); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:chroot", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path)) { goto exit; } @@ -562,10 +573,11 @@ static PyObject * os_fsync(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; + static const char * const _keywords[] = {"fd", NULL}; + static _PyArg_Parser _parser = {"O&:fsync", _keywords, 0}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:fsync", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, fildes_converter, &fd)) { goto exit; } @@ -617,10 +629,11 @@ static PyObject * os_fdatasync(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; + static const char * const _keywords[] = {"fd", NULL}; + static _PyArg_Parser _parser = {"O&:fdatasync", _keywords, 0}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:fdatasync", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, fildes_converter, &fd)) { goto exit; } @@ -675,14 +688,15 @@ static PyObject * os_chown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"O&O&O&|$O&p:chown", _keywords, 0}; path_t path = PATH_T_INITIALIZE("chown", "path", 0, PATH_HAVE_FCHOWN); uid_t uid; gid_t gid; int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&|$O&p:chown", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid, FCHOWNAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; } @@ -717,12 +731,13 @@ static PyObject * os_fchown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"fd", "uid", "gid", NULL}; + static const char * const _keywords[] = {"fd", "uid", "gid", NULL}; + static _PyArg_Parser _parser = {"iO&O&:fchown", _keywords, 0}; int fd; uid_t uid; gid_t gid; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iO&O&:fchown", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &fd, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) { goto exit; } @@ -755,12 +770,13 @@ static PyObject * os_lchown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "uid", "gid", NULL}; + static const char * const _keywords[] = {"path", "uid", "gid", NULL}; + static _PyArg_Parser _parser = {"O&O&O&:lchown", _keywords, 0}; path_t path = PATH_T_INITIALIZE("lchown", "path", 0, 0); uid_t uid; gid_t gid; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&:lchown", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) { goto exit; } @@ -841,14 +857,15 @@ static PyObject * os_link(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"O&O&|$O&O&p:link", _keywords, 0}; path_t src = PATH_T_INITIALIZE("link", "src", 0, 0); path_t dst = PATH_T_INITIALIZE("link", "dst", 0, 0); int src_dir_fd = DEFAULT_DIR_FD; int dst_dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$O&O&p:link", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd, &follow_symlinks)) { goto exit; } @@ -892,10 +909,11 @@ static PyObject * os_listdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = {"|O&:listdir", _keywords, 0}; path_t path = PATH_T_INITIALIZE("listdir", "path", 1, PATH_HAVE_FDOPENDIR); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&:listdir", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path)) { goto exit; } @@ -1023,10 +1041,11 @@ static PyObject * os__getvolumepathname(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = {"U:_getvolumepathname", _keywords, 0}; PyObject *path; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "U:_getvolumepathname", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &path)) { goto exit; } @@ -1061,12 +1080,13 @@ static PyObject * os_mkdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; + static const char * const _keywords[] = {"path", "mode", "dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&|i$O&:mkdir", _keywords, 0}; path_t path = PATH_T_INITIALIZE("mkdir", "path", 0, 0); int mode = 511; int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i$O&:mkdir", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &mode, MKDIRAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -1128,11 +1148,12 @@ static PyObject * os_getpriority(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"which", "who", NULL}; + static const char * const _keywords[] = {"which", "who", NULL}; + static _PyArg_Parser _parser = {"ii:getpriority", _keywords, 0}; int which; int who; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii:getpriority", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &which, &who)) { goto exit; } @@ -1162,12 +1183,13 @@ static PyObject * os_setpriority(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"which", "who", "priority", NULL}; + static const char * const _keywords[] = {"which", "who", "priority", NULL}; + static _PyArg_Parser _parser = {"iii:setpriority", _keywords, 0}; int which; int who; int priority; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iii:setpriority", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &which, &who, &priority)) { goto exit; } @@ -1202,13 +1224,14 @@ static PyObject * os_rename(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; + static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&O&|$O&O&:rename", _keywords, 0}; path_t src = PATH_T_INITIALIZE("rename", "src", 0, 0); path_t dst = PATH_T_INITIALIZE("rename", "dst", 0, 0); int src_dir_fd = DEFAULT_DIR_FD; int dst_dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$O&O&:rename", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) { goto exit; } @@ -1246,13 +1269,14 @@ static PyObject * os_replace(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; + static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&O&|$O&O&:replace", _keywords, 0}; path_t src = PATH_T_INITIALIZE("replace", "src", 0, 0); path_t dst = PATH_T_INITIALIZE("replace", "dst", 0, 0); int src_dir_fd = DEFAULT_DIR_FD; int dst_dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$O&O&:replace", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) { goto exit; } @@ -1288,11 +1312,12 @@ static PyObject * os_rmdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "dir_fd", NULL}; + static const char * const _keywords[] = {"path", "dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&|$O&:rmdir", _keywords, 0}; path_t path = PATH_T_INITIALIZE("rmdir", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:rmdir", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -1323,11 +1348,12 @@ static PyObject * os_system(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"command", NULL}; + static const char * const _keywords[] = {"command", NULL}; + static _PyArg_Parser _parser = {"u:system", _keywords, 0}; Py_UNICODE *command; long _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "u:system", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &command)) { goto exit; } @@ -1361,11 +1387,12 @@ static PyObject * os_system(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"command", NULL}; + static const char * const _keywords[] = {"command", NULL}; + static _PyArg_Parser _parser = {"O&:system", _keywords, 0}; PyObject *command = NULL; long _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:system", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, PyUnicode_FSConverter, &command)) { goto exit; } @@ -1432,11 +1459,12 @@ static PyObject * os_unlink(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "dir_fd", NULL}; + static const char * const _keywords[] = {"path", "dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&|$O&:unlink", _keywords, 0}; path_t path = PATH_T_INITIALIZE("unlink", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:unlink", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -1470,11 +1498,12 @@ static PyObject * os_remove(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "dir_fd", NULL}; + static const char * const _keywords[] = {"path", "dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&|$O&:remove", _keywords, 0}; path_t path = PATH_T_INITIALIZE("remove", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&:remove", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -1552,14 +1581,15 @@ static PyObject * os_utime(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "times", "ns", "dir_fd", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"path", "times", "ns", "dir_fd", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"O&|O$OO&p:utime", _keywords, 0}; path_t path = PATH_T_INITIALIZE("utime", "path", 0, PATH_UTIME_HAVE_FD); PyObject *times = NULL; PyObject *ns = NULL; int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|O$OO&p:utime", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, ×, &ns, FUTIMENSAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; } @@ -1588,10 +1618,11 @@ static PyObject * os__exit(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; + static const char * const _keywords[] = {"status", NULL}; + static _PyArg_Parser _parser = {"i:_exit", _keywords, 0}; int status; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:_exit", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &status)) { goto exit; } @@ -1667,12 +1698,13 @@ static PyObject * os_execve(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "argv", "env", NULL}; + static const char * const _keywords[] = {"path", "argv", "env", NULL}; + static _PyArg_Parser _parser = {"O&OO:execve", _keywords, 0}; path_t path = PATH_T_INITIALIZE("execve", "path", 0, PATH_HAVE_FEXECVE); PyObject *argv; PyObject *env; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&OO:execve", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &argv, &env)) { goto exit; } @@ -1845,10 +1877,11 @@ static PyObject * os_sched_get_priority_max(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"policy", NULL}; + static const char * const _keywords[] = {"policy", NULL}; + static _PyArg_Parser _parser = {"i:sched_get_priority_max", _keywords, 0}; int policy; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:sched_get_priority_max", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &policy)) { goto exit; } @@ -1878,10 +1911,11 @@ static PyObject * os_sched_get_priority_min(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"policy", NULL}; + static const char * const _keywords[] = {"policy", NULL}; + static _PyArg_Parser _parser = {"i:sched_get_priority_min", _keywords, 0}; int policy; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:sched_get_priority_min", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &policy)) { goto exit; } @@ -1944,10 +1978,11 @@ static PyObject * os_sched_param(PyTypeObject *type, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"sched_priority", NULL}; + static const char * const _keywords[] = {"sched_priority", NULL}; + static _PyArg_Parser _parser = {"O:sched_param", _keywords, 0}; PyObject *sched_priority; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:sched_param", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &sched_priority)) { goto exit; } @@ -2372,10 +2407,11 @@ static PyObject * os_getpgid(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"pid", NULL}; + static const char * const _keywords[] = {"pid", NULL}; + static _PyArg_Parser _parser = {"" _Py_PARSE_PID ":getpgid", _keywords, 0}; pid_t pid; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" _Py_PARSE_PID ":getpgid", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &pid)) { goto exit; } @@ -2821,10 +2857,11 @@ static PyObject * os_wait3(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"options", NULL}; + static const char * const _keywords[] = {"options", NULL}; + static _PyArg_Parser _parser = {"i:wait3", _keywords, 0}; int options; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:wait3", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &options)) { goto exit; } @@ -2857,11 +2894,12 @@ static PyObject * os_wait4(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"pid", "options", NULL}; + static const char * const _keywords[] = {"pid", "options", NULL}; + static _PyArg_Parser _parser = {"" _Py_PARSE_PID "i:wait4", _keywords, 0}; pid_t pid; int options; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "" _Py_PARSE_PID "i:wait4", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &pid, &options)) { goto exit; } @@ -3048,13 +3086,14 @@ static PyObject * os_symlink(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"src", "dst", "target_is_directory", "dir_fd", NULL}; + static const char * const _keywords[] = {"src", "dst", "target_is_directory", "dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&O&|p$O&:symlink", _keywords, 0}; path_t src = PATH_T_INITIALIZE("symlink", "src", 0, 0); path_t dst = PATH_T_INITIALIZE("symlink", "dst", 0, 0); int target_is_directory = 0; int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|p$O&:symlink", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &src, path_converter, &dst, &target_is_directory, SYMLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -3268,14 +3307,15 @@ static PyObject * os_open(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "flags", "mode", "dir_fd", NULL}; + static const char * const _keywords[] = {"path", "flags", "mode", "dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&i|i$O&:open", _keywords, 0}; path_t path = PATH_T_INITIALIZE("open", "path", 0, 0); int flags; int mode = 511; int dir_fd = DEFAULT_DIR_FD; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|i$O&:open", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &flags, &mode, OPENAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -3308,10 +3348,11 @@ static PyObject * os_close(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; + static const char * const _keywords[] = {"fd", NULL}; + static _PyArg_Parser _parser = {"i:close", _keywords, 0}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:close", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &fd)) { goto exit; } @@ -3398,12 +3439,13 @@ static PyObject * os_dup2(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"fd", "fd2", "inheritable", NULL}; + static const char * const _keywords[] = {"fd", "fd2", "inheritable", NULL}; + static _PyArg_Parser _parser = {"ii|p:dup2", _keywords, 0}; int fd; int fd2; int inheritable = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii|p:dup2", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &fd, &fd2, &inheritable)) { goto exit; } @@ -3662,10 +3704,11 @@ static PyObject * os_fstat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; + static const char * const _keywords[] = {"fd", NULL}; + static _PyArg_Parser _parser = {"i:fstat", _keywords, 0}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:fstat", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &fd)) { goto exit; } @@ -3884,12 +3927,13 @@ static PyObject * os_mkfifo(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; + static const char * const _keywords[] = {"path", "mode", "dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&|i$O&:mkfifo", _keywords, 0}; path_t path = PATH_T_INITIALIZE("mkfifo", "path", 0, 0); int mode = 438; int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i$O&:mkfifo", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &mode, MKFIFOAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -3935,13 +3979,14 @@ static PyObject * os_mknod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "mode", "device", "dir_fd", NULL}; + static const char * const _keywords[] = {"path", "mode", "device", "dir_fd", NULL}; + static _PyArg_Parser _parser = {"O&|iO&$O&:mknod", _keywords, 0}; path_t path = PATH_T_INITIALIZE("mknod", "path", 0, 0); int mode = 384; dev_t device = 0; int dir_fd = DEFAULT_DIR_FD; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|iO&$O&:mknod", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &mode, _Py_Dev_Converter, &device, MKNODAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -4120,11 +4165,12 @@ static PyObject * os_truncate(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "length", NULL}; + static const char * const _keywords[] = {"path", "length", NULL}; + static _PyArg_Parser _parser = {"O&O&:truncate", _keywords, 0}; path_t path = PATH_T_INITIALIZE("truncate", "path", 0, PATH_HAVE_FTRUNCATE); Py_off_t length; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&:truncate", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, Py_off_t_converter, &length)) { goto exit; } @@ -4410,11 +4456,12 @@ static PyObject * os_WIFCONTINUED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; + static const char * const _keywords[] = {"status", NULL}; + static _PyArg_Parser _parser = {"i:WIFCONTINUED", _keywords, 0}; int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFCONTINUED", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &status)) { goto exit; } @@ -4448,11 +4495,12 @@ static PyObject * os_WIFSTOPPED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; + static const char * const _keywords[] = {"status", NULL}; + static _PyArg_Parser _parser = {"i:WIFSTOPPED", _keywords, 0}; int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFSTOPPED", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &status)) { goto exit; } @@ -4486,11 +4534,12 @@ static PyObject * os_WIFSIGNALED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; + static const char * const _keywords[] = {"status", NULL}; + static _PyArg_Parser _parser = {"i:WIFSIGNALED", _keywords, 0}; int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFSIGNALED", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &status)) { goto exit; } @@ -4524,11 +4573,12 @@ static PyObject * os_WIFEXITED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; + static const char * const _keywords[] = {"status", NULL}; + static _PyArg_Parser _parser = {"i:WIFEXITED", _keywords, 0}; int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WIFEXITED", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &status)) { goto exit; } @@ -4562,11 +4612,12 @@ static PyObject * os_WEXITSTATUS(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; + static const char * const _keywords[] = {"status", NULL}; + static _PyArg_Parser _parser = {"i:WEXITSTATUS", _keywords, 0}; int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WEXITSTATUS", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &status)) { goto exit; } @@ -4600,11 +4651,12 @@ static PyObject * os_WTERMSIG(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; + static const char * const _keywords[] = {"status", NULL}; + static _PyArg_Parser _parser = {"i:WTERMSIG", _keywords, 0}; int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WTERMSIG", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &status)) { goto exit; } @@ -4638,11 +4690,12 @@ static PyObject * os_WSTOPSIG(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"status", NULL}; + static const char * const _keywords[] = {"status", NULL}; + static _PyArg_Parser _parser = {"i:WSTOPSIG", _keywords, 0}; int status; int _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:WSTOPSIG", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &status)) { goto exit; } @@ -4713,10 +4766,11 @@ static PyObject * os_statvfs(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = {"O&:statvfs", _keywords, 0}; path_t path = PATH_T_INITIALIZE("statvfs", "path", 0, PATH_HAVE_FSTATVFS); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&:statvfs", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path)) { goto exit; } @@ -4749,10 +4803,11 @@ static PyObject * os__getdiskusage(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = {"u:_getdiskusage", _keywords, 0}; Py_UNICODE *path; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "u:_getdiskusage", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &path)) { goto exit; } @@ -4826,12 +4881,13 @@ static PyObject * os_pathconf(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "name", NULL}; + static const char * const _keywords[] = {"path", "name", NULL}; + static _PyArg_Parser _parser = {"O&O&:pathconf", _keywords, 0}; path_t path = PATH_T_INITIALIZE("pathconf", "path", 0, PATH_HAVE_FPATHCONF); int name; long _return_value; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&:pathconf", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, conv_path_confname, &name)) { goto exit; } @@ -4983,10 +5039,11 @@ static PyObject * os_device_encoding(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"fd", NULL}; + static const char * const _keywords[] = {"fd", NULL}; + static _PyArg_Parser _parser = {"i:device_encoding", _keywords, 0}; int fd; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:device_encoding", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &fd)) { goto exit; } @@ -5132,12 +5189,13 @@ static PyObject * os_getxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"path", "attribute", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"O&O&|$p:getxattr", _keywords, 0}; path_t path = PATH_T_INITIALIZE("getxattr", "path", 0, 1); path_t attribute = PATH_T_INITIALIZE("getxattr", "attribute", 0, 0); int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$p:getxattr", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, path_converter, &attribute, &follow_symlinks)) { goto exit; } @@ -5179,14 +5237,15 @@ static PyObject * os_setxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "attribute", "value", "flags", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"path", "attribute", "value", "flags", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"O&O&y*|i$p:setxattr", _keywords, 0}; path_t path = PATH_T_INITIALIZE("setxattr", "path", 0, 1); path_t attribute = PATH_T_INITIALIZE("setxattr", "attribute", 0, 0); Py_buffer value = {NULL, NULL}; int flags = 0; int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&y*|i$p:setxattr", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, path_converter, &attribute, &value, &flags, &follow_symlinks)) { goto exit; } @@ -5231,12 +5290,13 @@ static PyObject * os_removexattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"path", "attribute", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"O&O&|$p:removexattr", _keywords, 0}; path_t path = PATH_T_INITIALIZE("removexattr", "path", 0, 1); path_t attribute = PATH_T_INITIALIZE("removexattr", "attribute", 0, 0); int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&|$p:removexattr", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, path_converter, &attribute, &follow_symlinks)) { goto exit; } @@ -5277,11 +5337,12 @@ static PyObject * os_listxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", "follow_symlinks", NULL}; + static const char * const _keywords[] = {"path", "follow_symlinks", NULL}; + static _PyArg_Parser _parser = {"|O&$p:listxattr", _keywords, 0}; path_t path = PATH_T_INITIALIZE("listxattr", "path", 1, 1); int follow_symlinks = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&$p:listxattr", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, path_converter, &path, &follow_symlinks)) { goto exit; } @@ -5496,10 +5557,11 @@ static PyObject * os_fspath(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"path", NULL}; + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = {"O:fspath", _keywords, 0}; PyObject *path; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:fspath", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &path)) { goto exit; } @@ -5980,4 +6042,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=e91e62d8e8f1b6ac input=a9049054013a1b77]*/ +/*[clinic end generated code: output=97180b6734421a7d input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h index d9cf73dc6e..8a03f67e45 100644 --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -243,12 +243,13 @@ static PyObject * pyexpat_ParserCreate(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"encoding", "namespace_separator", "intern", NULL}; + static const char * const _keywords[] = {"encoding", "namespace_separator", "intern", NULL}; + static _PyArg_Parser _parser = {"|zzO:ParserCreate", _keywords, 0}; const char *encoding = NULL; const char *namespace_separator = NULL; PyObject *intern = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|zzO:ParserCreate", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &encoding, &namespace_separator, &intern)) { goto exit; } @@ -288,4 +289,4 @@ exit: #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=9de21f46734b1311 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=93cfe662f2bc48e5 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha1module.c.h b/Modules/clinic/sha1module.c.h index 8030fbde00..19727621d4 100644 --- a/Modules/clinic/sha1module.c.h +++ b/Modules/clinic/sha1module.c.h @@ -81,10 +81,11 @@ static PyObject * _sha1_sha1(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; + static const char * const _keywords[] = {"string", NULL}; + static _PyArg_Parser _parser = {"|O:sha1", _keywords, 0}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha1", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string)) { goto exit; } @@ -93,4 +94,4 @@ _sha1_sha1(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=475c4cc749ab31b1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=549a5d08c248337d input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha256module.c.h b/Modules/clinic/sha256module.c.h index 483109f936..4239ab8ca9 100644 --- a/Modules/clinic/sha256module.c.h +++ b/Modules/clinic/sha256module.c.h @@ -81,10 +81,11 @@ static PyObject * _sha256_sha256(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; + static const char * const _keywords[] = {"string", NULL}; + static _PyArg_Parser _parser = {"|O:sha256", _keywords, 0}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha256", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string)) { goto exit; } @@ -110,10 +111,11 @@ static PyObject * _sha256_sha224(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; + static const char * const _keywords[] = {"string", NULL}; + static _PyArg_Parser _parser = {"|O:sha224", _keywords, 0}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha224", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string)) { goto exit; } @@ -122,4 +124,4 @@ _sha256_sha224(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=a41a21c08fcddd70 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a1296ba6d0780051 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha512module.c.h b/Modules/clinic/sha512module.c.h index ec5a0c3402..78f7743480 100644 --- a/Modules/clinic/sha512module.c.h +++ b/Modules/clinic/sha512module.c.h @@ -99,10 +99,11 @@ static PyObject * _sha512_sha512(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; + static const char * const _keywords[] = {"string", NULL}; + static _PyArg_Parser _parser = {"|O:sha512", _keywords, 0}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha512", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string)) { goto exit; } @@ -132,10 +133,11 @@ static PyObject * _sha512_sha384(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; + static const char * const _keywords[] = {"string", NULL}; + static _PyArg_Parser _parser = {"|O:sha384", _keywords, 0}; PyObject *string = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha384", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &string)) { goto exit; } @@ -170,4 +172,4 @@ exit: #ifndef _SHA512_SHA384_METHODDEF #define _SHA512_SHA384_METHODDEF #endif /* !defined(_SHA512_SHA384_METHODDEF) */ -/*[clinic end generated code: output=e314c0f773abd5d7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=cf0da76cb603d1bf input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index 506d5503c7..e4e2c0dc75 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -23,11 +23,12 @@ static PyObject * zlib_compress(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"", "level", NULL}; + static const char * const _keywords[] = {"", "level", NULL}; + static _PyArg_Parser _parser = {"y*|i:compress", _keywords, 0}; Py_buffer data = {NULL, NULL}; int level = Z_DEFAULT_COMPRESSION; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|i:compress", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &data, &level)) { goto exit; } @@ -126,7 +127,8 @@ static PyObject * zlib_compressobj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"level", "method", "wbits", "memLevel", "strategy", "zdict", NULL}; + static const char * const _keywords[] = {"level", "method", "wbits", "memLevel", "strategy", "zdict", NULL}; + static _PyArg_Parser _parser = {"|iiiiiy*:compressobj", _keywords, 0}; int level = Z_DEFAULT_COMPRESSION; int method = DEFLATED; int wbits = MAX_WBITS; @@ -134,7 +136,7 @@ zlib_compressobj(PyObject *module, PyObject *args, PyObject *kwargs) int strategy = Z_DEFAULT_STRATEGY; Py_buffer zdict = {NULL, NULL}; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iiiiiy*:compressobj", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &level, &method, &wbits, &memLevel, &strategy, &zdict)) { goto exit; } @@ -171,11 +173,12 @@ static PyObject * zlib_decompressobj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"wbits", "zdict", NULL}; + static const char * const _keywords[] = {"wbits", "zdict", NULL}; + static _PyArg_Parser _parser = {"|iO:decompressobj", _keywords, 0}; int wbits = MAX_WBITS; PyObject *zdict = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iO:decompressobj", _keywords, + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &wbits, &zdict)) { goto exit; } @@ -460,4 +463,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=9046866b1ac5de7e input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1fed251c15a9bffa input=a9049054013a1b77]*/ -- cgit v1.2.1 From ce08dc2936ca4cb2f7f65f8122055390211bd797 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 15 Aug 2016 10:06:16 +0300 Subject: Issue #16764: Support keyword arguments to zlib.decompress(). Patch by Xiang Zhang. --- Modules/clinic/zlibmodule.c.h | 22 +++++++++++++--------- Modules/zlibmodule.c | 8 ++++---- 2 files changed, 17 insertions(+), 13 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index e4e2c0dc75..172308ac5e 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -44,7 +44,7 @@ exit: } PyDoc_STRVAR(zlib_decompress__doc__, -"decompress($module, data, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE, /)\n" +"decompress($module, data, /, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)\n" "--\n" "\n" "Returns a bytes object containing the uncompressed data.\n" @@ -57,21 +57,23 @@ PyDoc_STRVAR(zlib_decompress__doc__, " The initial output buffer size."); #define ZLIB_DECOMPRESS_METHODDEF \ - {"decompress", (PyCFunction)zlib_decompress, METH_VARARGS, zlib_decompress__doc__}, + {"decompress", (PyCFunction)zlib_decompress, METH_VARARGS|METH_KEYWORDS, zlib_decompress__doc__}, static PyObject * zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, Py_ssize_t bufsize); static PyObject * -zlib_decompress(PyObject *module, PyObject *args) +zlib_decompress(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; + static const char * const _keywords[] = {"", "wbits", "bufsize", NULL}; + static _PyArg_Parser _parser = {"y*|iO&:decompress", _keywords, 0}; Py_buffer data = {NULL, NULL}; int wbits = MAX_WBITS; Py_ssize_t bufsize = DEF_BUF_SIZE; - if (!PyArg_ParseTuple(args, "y*|iO&:decompress", + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &data, &wbits, ssize_t_converter, &bufsize)) { goto exit; } @@ -228,7 +230,7 @@ exit: } PyDoc_STRVAR(zlib_Decompress_decompress__doc__, -"decompress($self, data, max_length=0, /)\n" +"decompress($self, data, /, max_length=0)\n" "--\n" "\n" "Return a bytes object containing the decompressed version of the data.\n" @@ -245,20 +247,22 @@ PyDoc_STRVAR(zlib_Decompress_decompress__doc__, "Call the flush() method to clear these buffers."); #define ZLIB_DECOMPRESS_DECOMPRESS_METHODDEF \ - {"decompress", (PyCFunction)zlib_Decompress_decompress, METH_VARARGS, zlib_Decompress_decompress__doc__}, + {"decompress", (PyCFunction)zlib_Decompress_decompress, METH_VARARGS|METH_KEYWORDS, zlib_Decompress_decompress__doc__}, static PyObject * zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, Py_ssize_t max_length); static PyObject * -zlib_Decompress_decompress(compobject *self, PyObject *args) +zlib_Decompress_decompress(compobject *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; + static const char * const _keywords[] = {"", "max_length", NULL}; + static _PyArg_Parser _parser = {"y*|O&:decompress", _keywords, 0}; Py_buffer data = {NULL, NULL}; Py_ssize_t max_length = 0; - if (!PyArg_ParseTuple(args, "y*|O&:decompress", + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, &data, ssize_t_converter, &max_length)) { goto exit; } @@ -463,4 +467,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=1fed251c15a9bffa input=a9049054013a1b77]*/ +/*[clinic end generated code: output=48911ef429b65903 input=a9049054013a1b77]*/ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 491bc8551c..4cded311ea 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -318,11 +318,11 @@ zlib.decompress data: Py_buffer Compressed data. + / wbits: int(c_default="MAX_WBITS") = MAX_WBITS The window buffer size and container format. bufsize: ssize_t(c_default="DEF_BUF_SIZE") = DEF_BUF_SIZE The initial output buffer size. - / Returns a bytes object containing the uncompressed data. [clinic start generated code]*/ @@ -330,7 +330,7 @@ Returns a bytes object containing the uncompressed data. static PyObject * zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, Py_ssize_t bufsize) -/*[clinic end generated code: output=77c7e35111dc8c42 input=c13dd2c5696cd17f]*/ +/*[clinic end generated code: output=77c7e35111dc8c42 input=21960936208e9a5b]*/ { PyObject *RetVal = NULL; Byte *ibuf; @@ -750,11 +750,11 @@ zlib.Decompress.decompress data: Py_buffer The binary data to decompress. + / max_length: ssize_t = 0 The maximum allowable length of the decompressed data. Unconsumed input data will be stored in the unconsumed_tail attribute. - / Return a bytes object containing the decompressed version of the data. @@ -766,7 +766,7 @@ Call the flush() method to clear these buffers. static PyObject * zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=6e5173c74e710352 input=d6de9b53c4566b8a]*/ +/*[clinic end generated code: output=6e5173c74e710352 input=b85a212a012b770a]*/ { int err = Z_OK; Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE, hard_limit; -- cgit v1.2.1 From 2cc8235deb4eb24b5fbbc9446a5eb291fb89ee73 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 15 Aug 2016 09:12:52 -0700 Subject: Issue #12345: Add mathemathcal constant tau to math and cmath. Patch by Lisa Roach. See also PEP 628. --- Modules/cmathmodule.c | 1 + Modules/mathmodule.c | 1 + 2 files changed, 2 insertions(+) (limited to 'Modules') diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index cba42a7257..0e7d4db96d 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -1239,6 +1239,7 @@ PyInit_cmath(void) PyModule_AddObject(m, "pi", PyFloat_FromDouble(Py_MATH_PI)); PyModule_AddObject(m, "e", PyFloat_FromDouble(Py_MATH_E)); + PyModule_AddObject(m, "tau", PyFloat_FromDouble(Py_MATH_TAU)); /* 2pi */ /* initialize special value tables */ diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index cf049010ea..43aa229eb7 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -2144,6 +2144,7 @@ PyInit_math(void) PyModule_AddObject(m, "pi", PyFloat_FromDouble(Py_MATH_PI)); PyModule_AddObject(m, "e", PyFloat_FromDouble(Py_MATH_E)); + PyModule_AddObject(m, "tau", PyFloat_FromDouble(Py_MATH_TAU)); /* 2pi */ PyModule_AddObject(m, "inf", PyFloat_FromDouble(m_inf())); #if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN) PyModule_AddObject(m, "nan", PyFloat_FromDouble(m_nan())); -- cgit v1.2.1 From c5a43ba5e7f08d539f3ed286d5b2781d9597caa1 Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Mon, 15 Aug 2016 14:40:38 -0400 Subject: Issue #27736: Prevent segfault after interpreter re-initialization due to ref count problem introduced in code for Issue #27038 in 3.6.0a3. Patch by Xiang Zhang. --- Modules/posixmodule.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 52e465f1ff..10d6bcbba9 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -13355,6 +13355,8 @@ INITFUNC(void) Py_DECREF(unicode); } PyModule_AddObject(m, "_have_functions", list); + + Py_INCREF((PyObject *) &DirEntryType); PyModule_AddObject(m, "DirEntry", (PyObject *)&DirEntryType); initialized = 1; -- cgit v1.2.1 From 1a0abdbc9986efa7f054e4e16b5a1d0329e8bca3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 19 Aug 2016 18:52:35 +0200 Subject: keyobject_richcompare() now uses fast call Issue #27128: keyobject_richcompare() now calls _PyObject_FastCall() using a small stack allocated on the C stack to avoid a temporary tuple. --- Modules/_functoolsmodule.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index d785c4932b..f7dbf15ab3 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -461,12 +461,12 @@ static PyObject * keyobject_richcompare(PyObject *ko, PyObject *other, int op) { PyObject *res; - PyObject *args; PyObject *x; PyObject *y; PyObject *compare; PyObject *answer; static PyObject *zero; + PyObject* stack[2]; if (zero == NULL) { zero = PyLong_FromLong(0); @@ -490,17 +490,13 @@ keyobject_richcompare(PyObject *ko, PyObject *other, int op) /* Call the user's comparison function and translate the 3-way * result into true or false (or error). */ - args = PyTuple_New(2); - if (args == NULL) - return NULL; - Py_INCREF(x); - Py_INCREF(y); - PyTuple_SET_ITEM(args, 0, x); - PyTuple_SET_ITEM(args, 1, y); - res = PyObject_Call(compare, args, NULL); - Py_DECREF(args); - if (res == NULL) + stack[0] = x; + stack[1] = y; + res = _PyObject_FastCall(compare, stack, 2, NULL); + if (res == NULL) { return NULL; + } + answer = PyObject_RichCompare(res, zero, op); Py_DECREF(res); return answer; -- cgit v1.2.1 From 167b86de6ea9042eebc59c190996e6aed6e994ae Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 19 Aug 2016 18:59:15 +0200 Subject: Issue #27128: _pickle uses fast call Use _PyObject_FastCall() to avoid the creation of temporary tuple. --- Modules/_pickle.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index ddac24334d..b454134270 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -345,7 +345,6 @@ static PyObject * _Pickle_FastCall(PyObject *func, PyObject *obj) { PyObject *result; - PyObject *arg_tuple = PyTuple_New(1); /* Note: this function used to reuse the argument tuple. This used to give a slight performance boost with older pickle implementations where many @@ -358,13 +357,8 @@ _Pickle_FastCall(PyObject *func, PyObject *obj) significantly reduced the number of function calls we do. Thus, the benefits became marginal at best. */ - if (arg_tuple == NULL) { - Py_DECREF(obj); - return NULL; - } - PyTuple_SET_ITEM(arg_tuple, 0, obj); - result = PyObject_Call(func, arg_tuple, NULL); - Py_CLEAR(arg_tuple); + result = _PyObject_FastCall(func, &obj, 1, NULL); + Py_DECREF(obj); return result; } @@ -1157,9 +1151,7 @@ _Unpickler_ReadFromFile(UnpicklerObject *self, Py_ssize_t n) return -1; if (n == READ_WHOLE_LINE) { - PyObject *empty_tuple = PyTuple_New(0); - data = PyObject_Call(self->readline, empty_tuple, NULL); - Py_DECREF(empty_tuple); + data = _PyObject_FastCall(self->readline, NULL, 0, NULL); } else { PyObject *len; @@ -3956,10 +3948,7 @@ save(PicklerObject *self, PyObject *obj, int pers_save) /* Check for a __reduce__ method. */ reduce_func = _PyObject_GetAttrId(obj, &PyId___reduce__); if (reduce_func != NULL) { - PyObject *empty_tuple = PyTuple_New(0); - reduce_value = PyObject_Call(reduce_func, empty_tuple, - NULL); - Py_DECREF(empty_tuple); + reduce_value = _PyObject_FastCall(reduce_func, NULL, 0, NULL); } else { PyErr_Format(st->PicklingError, -- cgit v1.2.1 From 9dcdddcbdd0ebe8d3419cd35ac7523243a719dd7 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 20 Aug 2016 01:34:44 +0200 Subject: _elementtree: deepcopy() now uses fast call Issue #27128. --- Modules/_elementtree.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index b32f2ad283..5d124b3b42 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -819,9 +819,8 @@ LOCAL(PyObject *) deepcopy(PyObject *object, PyObject *memo) { /* do a deep copy of the given object */ - PyObject *args; - PyObject *result; elementtreestate *st; + PyObject *stack[2]; /* Fast paths */ if (object == Py_None || PyUnicode_CheckExact(object)) { @@ -857,12 +856,9 @@ deepcopy(PyObject *object, PyObject *memo) return NULL; } - args = PyTuple_Pack(2, object, memo); - if (!args) - return NULL; - result = PyObject_CallObject(st->deepcopy_obj, args); - Py_DECREF(args); - return result; + stack[0] = object; + stack[1] = memo; + return _PyObject_FastCall(st->deepcopy_obj, stack, 2, NULL); } -- cgit v1.2.1 From 201647d227de4a4d8e2830c081567716ee92e8d3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 20 Aug 2016 01:38:00 +0200 Subject: pattern_subx() now uses fast call Issue #27128. --- Modules/_sre.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 6f8ec0e538..3e8d7f8b48 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -1056,7 +1056,6 @@ pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string, PyObject* joiner; PyObject* item; PyObject* filter; - PyObject* args; PyObject* match; void* ptr; Py_ssize_t status; @@ -1158,13 +1157,7 @@ pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string, match = pattern_new_match(self, &state, 1); if (!match) goto error; - args = PyTuple_Pack(1, match); - if (!args) { - Py_DECREF(match); - goto error; - } - item = PyObject_CallObject(filter, args); - Py_DECREF(args); + item = _PyObject_FastCall(filter, &match, 1, NULL); Py_DECREF(match); if (!item) goto error; -- cgit v1.2.1 From de03c6d8066496680a1ea99ff9e67e28852b0007 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 22 Aug 2016 22:48:54 +0200 Subject: Rename _PyObject_FastCall() to _PyObject_FastCallDict() Issue #27809: * Rename _PyObject_FastCall() function to _PyObject_FastCallDict() * Add _PyObject_FastCall(), _PyObject_CallNoArg() and _PyObject_CallArg1() macros calling _PyObject_FastCallDict() --- Modules/_elementtree.c | 2 +- Modules/_functoolsmodule.c | 2 +- Modules/_pickle.c | 6 +++--- Modules/_sre.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 5d124b3b42..721293aabe 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -858,7 +858,7 @@ deepcopy(PyObject *object, PyObject *memo) stack[0] = object; stack[1] = memo; - return _PyObject_FastCall(st->deepcopy_obj, stack, 2, NULL); + return _PyObject_FastCall(st->deepcopy_obj, stack, 2); } diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index f7dbf15ab3..22e8088890 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -492,7 +492,7 @@ keyobject_richcompare(PyObject *ko, PyObject *other, int op) */ stack[0] = x; stack[1] = y; - res = _PyObject_FastCall(compare, stack, 2, NULL); + res = _PyObject_FastCall(compare, stack, 2); if (res == NULL) { return NULL; } diff --git a/Modules/_pickle.c b/Modules/_pickle.c index b454134270..fed3fa221e 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -357,7 +357,7 @@ _Pickle_FastCall(PyObject *func, PyObject *obj) significantly reduced the number of function calls we do. Thus, the benefits became marginal at best. */ - result = _PyObject_FastCall(func, &obj, 1, NULL); + result = _PyObject_CallArg1(func, obj); Py_DECREF(obj); return result; } @@ -1151,7 +1151,7 @@ _Unpickler_ReadFromFile(UnpicklerObject *self, Py_ssize_t n) return -1; if (n == READ_WHOLE_LINE) { - data = _PyObject_FastCall(self->readline, NULL, 0, NULL); + data = _PyObject_CallNoArg(self->readline); } else { PyObject *len; @@ -3948,7 +3948,7 @@ save(PicklerObject *self, PyObject *obj, int pers_save) /* Check for a __reduce__ method. */ reduce_func = _PyObject_GetAttrId(obj, &PyId___reduce__); if (reduce_func != NULL) { - reduce_value = _PyObject_FastCall(reduce_func, NULL, 0, NULL); + reduce_value = _PyObject_CallNoArg(reduce_func); } else { PyErr_Format(st->PicklingError, diff --git a/Modules/_sre.c b/Modules/_sre.c index 3e8d7f8b48..0a62f62dc6 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -1157,7 +1157,7 @@ pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string, match = pattern_new_match(self, &state, 1); if (!match) goto error; - item = _PyObject_FastCall(filter, &match, 1, NULL); + item = _PyObject_CallArg1(filter, match); Py_DECREF(match); if (!item) goto error; -- cgit v1.2.1 From e0bf28e269303aba2c9bdea07b40f01cc8354e04 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 23 Aug 2016 00:11:04 +0200 Subject: Issue #27809: tzinfo_reduce() uses fast call --- Modules/_datetimemodule.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index a62f592957..7e95af7497 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3133,37 +3133,34 @@ Fail: static PyObject * tzinfo_reduce(PyObject *self) { - PyObject *args, *state, *tmp; + PyObject *args, *state; PyObject *getinitargs, *getstate; _Py_IDENTIFIER(__getinitargs__); _Py_IDENTIFIER(__getstate__); - tmp = PyTuple_New(0); - if (tmp == NULL) - return NULL; - getinitargs = _PyObject_GetAttrId(self, &PyId___getinitargs__); if (getinitargs != NULL) { - args = PyObject_CallObject(getinitargs, tmp); + args = _PyObject_CallNoArg(getinitargs); Py_DECREF(getinitargs); if (args == NULL) { - Py_DECREF(tmp); return NULL; } } else { PyErr_Clear(); - args = tmp; - Py_INCREF(args); + + args = PyTuple_New(0); + if (args == NULL) { + return NULL; + } } getstate = _PyObject_GetAttrId(self, &PyId___getstate__); if (getstate != NULL) { - state = PyObject_CallObject(getstate, tmp); + state = _PyObject_CallNoArg(getstate); Py_DECREF(getstate); if (state == NULL) { Py_DECREF(args); - Py_DECREF(tmp); return NULL; } } @@ -3172,13 +3169,12 @@ tzinfo_reduce(PyObject *self) PyErr_Clear(); state = Py_None; dictptr = _PyObject_GetDictPtr(self); - if (dictptr && *dictptr && PyDict_Size(*dictptr)) + if (dictptr && *dictptr && PyDict_Size(*dictptr)) { state = *dictptr; + } Py_INCREF(state); } - Py_DECREF(tmp); - if (state == Py_None) { Py_DECREF(state); return Py_BuildValue("(ON)", Py_TYPE(self), args); -- cgit v1.2.1 From 38275fbafe3017aa917070f58145c1f4d1ff769c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 23 Aug 2016 00:21:34 +0200 Subject: Issue #27809: _csv: _call_dialect() uses fast call --- Modules/_csv.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_csv.c b/Modules/_csv.c index ef2e7d7846..7a78541bf2 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -518,15 +518,13 @@ static PyTypeObject Dialect_Type = { static PyObject * _call_dialect(PyObject *dialect_inst, PyObject *kwargs) { - PyObject *ctor_args; - PyObject *dialect; - - ctor_args = Py_BuildValue(dialect_inst ? "(O)" : "()", dialect_inst); - if (ctor_args == NULL) - return NULL; - dialect = PyObject_Call((PyObject *)&Dialect_Type, ctor_args, kwargs); - Py_DECREF(ctor_args); - return dialect; + PyObject *type = (PyObject *)&Dialect_Type; + if (dialect_inst) { + return _PyObject_FastCallDict(type, &dialect_inst, 1, kwargs); + } + else { + return _PyObject_FastCallDict(type, NULL, 0, kwargs); + } } /* -- cgit v1.2.1 From a50750d18931d26248ce52951838a605dca9651a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 23 Aug 2016 00:23:23 +0200 Subject: Issue #27809: methodcaller_reduce() uses fast call --- Modules/_operator.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_operator.c b/Modules/_operator.c index dfff1d2faa..fb8eafc679 100644 --- a/Modules/_operator.c +++ b/Modules/_operator.c @@ -1111,6 +1111,8 @@ methodcaller_reduce(methodcallerobject *mc) PyObject *functools; PyObject *partial; PyObject *constructor; + PyObject *newargs[2]; + _Py_IDENTIFIER(partial); functools = PyImport_ImportModule("functools"); if (!functools) @@ -1119,17 +1121,11 @@ methodcaller_reduce(methodcallerobject *mc) Py_DECREF(functools); if (!partial) return NULL; - newargs = PyTuple_New(2); - if (newargs == NULL) { - Py_DECREF(partial); - return NULL; - } - Py_INCREF(Py_TYPE(mc)); - PyTuple_SET_ITEM(newargs, 0, (PyObject *)Py_TYPE(mc)); - Py_INCREF(mc->name); - PyTuple_SET_ITEM(newargs, 1, mc->name); - constructor = PyObject_Call(partial, newargs, mc->kwds); - Py_DECREF(newargs); + + newargs[0] = (PyObject *)Py_TYPE(mc); + newargs[1] = mc->name; + constructor = _PyObject_FastCallDict(partial, newargs, 2, mc->kwds); + Py_DECREF(partial); return Py_BuildValue("NO", constructor, mc->args); } -- cgit v1.2.1 From da9d0a5d894b1d4bdb0ed10d97656cdc3250c885 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 23 Aug 2016 16:22:35 +0200 Subject: Issue #27809: partial_call() uses fast call for positional args --- Modules/_functoolsmodule.c | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 22e8088890..848a03cb07 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -128,44 +128,60 @@ partial_call(partialobject *pto, PyObject *args, PyObject *kw) { PyObject *ret; PyObject *argappl, *kwappl; + PyObject **stack; + Py_ssize_t nargs; assert (PyCallable_Check(pto->fn)); assert (PyTuple_Check(pto->args)); assert (PyDict_Check(pto->kw)); if (PyTuple_GET_SIZE(pto->args) == 0) { - argappl = args; - Py_INCREF(args); - } else if (PyTuple_GET_SIZE(args) == 0) { - argappl = pto->args; - Py_INCREF(pto->args); - } else { + stack = &PyTuple_GET_ITEM(args, 0); + nargs = PyTuple_GET_SIZE(args); + argappl = NULL; + } + else if (PyTuple_GET_SIZE(args) == 0) { + stack = &PyTuple_GET_ITEM(pto->args, 0); + nargs = PyTuple_GET_SIZE(pto->args); + argappl = NULL; + } + else { + stack = NULL; argappl = PySequence_Concat(pto->args, args); - if (argappl == NULL) + if (argappl == NULL) { return NULL; + } + assert(PyTuple_Check(argappl)); } if (PyDict_Size(pto->kw) == 0) { kwappl = kw; Py_XINCREF(kwappl); - } else { + } + else { kwappl = PyDict_Copy(pto->kw); if (kwappl == NULL) { - Py_DECREF(argappl); + Py_XDECREF(argappl); return NULL; } + if (kw != NULL) { if (PyDict_Merge(kwappl, kw, 1) != 0) { - Py_DECREF(argappl); + Py_XDECREF(argappl); Py_DECREF(kwappl); return NULL; } } } - ret = PyObject_Call(pto->fn, argappl, kwappl); - Py_DECREF(argappl); + if (stack) { + ret = _PyObject_FastCallDict(pto->fn, stack, nargs, kwappl); + } + else { + ret = PyObject_Call(pto->fn, argappl, kwappl); + Py_DECREF(argappl); + } Py_XDECREF(kwappl); return ret; } -- cgit v1.2.1 From 4598391a5a9e9a231bbd0f401760e3058f5d1212 Mon Sep 17 00:00:00 2001 From: R David Murray Date: Tue, 23 Aug 2016 21:12:40 -0400 Subject: #26907: add some missing getsockopt constants. Patch by Christian Heimes, reviewed by Martin Panter. --- Modules/socketmodule.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index d21509e9eb..d896cc0240 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -6582,6 +6582,12 @@ PyInit__socket(void) #ifdef LOCAL_PEERCRED PyModule_AddIntMacro(m, LOCAL_PEERCRED); #endif +#ifdef SO_PASSSEC + PyModule_AddIntMacro(m, SO_PASSSEC); +#endif +#ifdef SO_PEERSEC + PyModule_AddIntMacro(m, SO_PEERSEC); +#endif #ifdef SO_BINDTODEVICE PyModule_AddIntMacro(m, SO_BINDTODEVICE); #endif @@ -6591,6 +6597,12 @@ PyInit__socket(void) #ifdef SO_MARK PyModule_AddIntMacro(m, SO_MARK); #endif +#ifdef SO_DOMAIN + PyModule_AddIntMacro(m, SO_DOMAIN); +#endif +#ifdef SO_PROTOCOL + PyModule_AddIntMacro(m, SO_PROTOCOL); +#endif /* Maximum number of connections for "listen" */ #ifdef SOMAXCONN -- cgit v1.2.1 From 464f0a23bb9d36dcbd84a9535e62475a957e55c6 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 25 Aug 2016 00:58:58 +0200 Subject: _pickle: remove outdated comment _Pickle_FastCall() is now fast again! The optimization was introduced in Python 3.2, removed in Python 3.4 and reintroduced in Python 3.6 (thanks to the new generic fastcall functions). --- Modules/_pickle.c | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index fed3fa221e..f029ed6645 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -346,17 +346,6 @@ _Pickle_FastCall(PyObject *func, PyObject *obj) { PyObject *result; - /* Note: this function used to reuse the argument tuple. This used to give - a slight performance boost with older pickle implementations where many - unbuffered reads occurred (thus needing many function calls). - - However, this optimization was removed because it was too complicated - to get right. It abused the C API for tuples to mutate them which led - to subtle reference counting and concurrency bugs. Furthermore, the - introduction of protocol 4 and the prefetching optimization via peek() - significantly reduced the number of function calls we do. Thus, the - benefits became marginal at best. */ - result = _PyObject_CallArg1(func, obj); Py_DECREF(obj); return result; -- cgit v1.2.1 From af8fbafe368b5cc4432e47bb0e38fd1e5c119840 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 26 Aug 2016 14:44:48 -0700 Subject: Issue #26027, #27524: Add PEP 519/__fspath__() support to os and os.path. Thanks to Jelle Zijlstra for the initial patch against posixmodule.c. --- Modules/posixmodule.c | 104 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 75 insertions(+), 29 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 10d6bcbba9..f9693e8d57 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -834,8 +834,11 @@ static int path_converter(PyObject *o, void *p) { path_t *path = (path_t *)p; - PyObject *bytes; + PyObject *bytes, *to_cleanup = NULL; Py_ssize_t length; + int is_index, is_buffer, is_bytes, is_unicode; + /* Default to failure, forcing explicit signaling of succcess. */ + int ret = 0; const char *narrow; #define FORMAT_EXCEPTION(exc, fmt) \ @@ -850,7 +853,7 @@ path_converter(PyObject *o, void *p) return 1; } - /* ensure it's always safe to call path_cleanup() */ + /* Ensure it's always safe to call path_cleanup(). */ path->cleanup = NULL; if ((o == Py_None) && path->nullable) { @@ -862,21 +865,54 @@ path_converter(PyObject *o, void *p) return 1; } - if (PyUnicode_Check(o)) { + /* Only call this here so that we don't treat the return value of + os.fspath() as an fd or buffer. */ + is_index = path->allow_fd && PyIndex_Check(o); + is_buffer = PyObject_CheckBuffer(o); + is_bytes = PyBytes_Check(o); + is_unicode = PyUnicode_Check(o); + + if (!is_index && !is_buffer && !is_unicode && !is_bytes) { + /* Inline PyOS_FSPath() for better error messages. */ + _Py_IDENTIFIER(__fspath__); + PyObject *func = NULL; + + func = _PyObject_LookupSpecial(o, &PyId___fspath__); + if (NULL == func) { + goto error_exit; + } + + o = to_cleanup = PyObject_CallFunctionObjArgs(func, NULL); + Py_DECREF(func); + if (NULL == o) { + goto error_exit; + } + else if (PyUnicode_Check(o)) { + is_unicode = 1; + } + else if (PyBytes_Check(o)) { + is_bytes = 1; + } + else { + goto error_exit; + } + } + + if (is_unicode) { #ifdef MS_WINDOWS const wchar_t *wide; wide = PyUnicode_AsUnicodeAndSize(o, &length); if (!wide) { - return 0; + goto exit; } if (length > 32767) { FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows"); - return 0; + goto exit; } if (wcslen(wide) != length) { FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s"); - return 0; + goto exit; } path->wide = wide; @@ -884,66 +920,71 @@ path_converter(PyObject *o, void *p) path->length = length; path->object = o; path->fd = -1; - return 1; + ret = 1; + goto exit; #else if (!PyUnicode_FSConverter(o, &bytes)) { - return 0; + goto exit; } #endif } - else if (PyBytes_Check(o)) { + else if (is_bytes) { #ifdef MS_WINDOWS if (win32_warn_bytes_api()) { - return 0; + goto exit; } #endif bytes = o; Py_INCREF(bytes); } - else if (PyObject_CheckBuffer(o)) { + else if (is_buffer) { if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, "%s%s%s should be %s, not %.200s", path->function_name ? path->function_name : "", path->function_name ? ": " : "", path->argument_name ? path->argument_name : "path", - path->allow_fd && path->nullable ? "string, bytes, integer or None" : - path->allow_fd ? "string, bytes or integer" : - path->nullable ? "string, bytes or None" : - "string or bytes", + path->allow_fd && path->nullable ? "string, bytes, os.PathLike, " + "integer or None" : + path->allow_fd ? "string, bytes, os.PathLike or integer" : + path->nullable ? "string, bytes, os.PathLike or None" : + "string, bytes or os.PathLike", Py_TYPE(o)->tp_name)) { - return 0; + goto exit; } #ifdef MS_WINDOWS if (win32_warn_bytes_api()) { - return 0; + goto exit; } #endif bytes = PyBytes_FromObject(o); if (!bytes) { - return 0; + goto exit; } } else if (path->allow_fd && PyIndex_Check(o)) { if (!_fd_converter(o, &path->fd)) { - return 0; + goto exit; } path->wide = NULL; path->narrow = NULL; path->length = 0; path->object = o; - return 1; + ret = 1; + goto exit; } else { + error_exit: PyErr_Format(PyExc_TypeError, "%s%s%s should be %s, not %.200s", path->function_name ? path->function_name : "", path->function_name ? ": " : "", path->argument_name ? path->argument_name : "path", - path->allow_fd && path->nullable ? "string, bytes, integer or None" : - path->allow_fd ? "string, bytes or integer" : - path->nullable ? "string, bytes or None" : - "string or bytes", + path->allow_fd && path->nullable ? "string, bytes, os.PathLike, " + "integer or None" : + path->allow_fd ? "string, bytes, os.PathLike or integer" : + path->nullable ? "string, bytes, os.PathLike or None" : + "string, bytes or os.PathLike", Py_TYPE(o)->tp_name); - return 0; + goto exit; } length = PyBytes_GET_SIZE(bytes); @@ -951,7 +992,7 @@ path_converter(PyObject *o, void *p) if (length > MAX_PATH-1) { FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows"); Py_DECREF(bytes); - return 0; + goto exit; } #endif @@ -959,7 +1000,7 @@ path_converter(PyObject *o, void *p) if ((size_t)length != strlen(narrow)) { FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s"); Py_DECREF(bytes); - return 0; + goto exit; } path->wide = NULL; @@ -969,12 +1010,15 @@ path_converter(PyObject *o, void *p) path->fd = -1; if (bytes == o) { Py_DECREF(bytes); - return 1; + ret = 1; } else { path->cleanup = bytes; - return Py_CLEANUP_SUPPORTED; + ret = Py_CLEANUP_SUPPORTED; } + exit: + Py_XDECREF(to_cleanup); + return ret; } static void @@ -12329,6 +12373,8 @@ error: PyObject * PyOS_FSPath(PyObject *path) { + /* For error message reasons, this function is manually inlined in + path_converter(). */ _Py_IDENTIFIER(__fspath__); PyObject *func = NULL; PyObject *path_repr = NULL; -- cgit v1.2.1 From 4ba2ef99caecb18be5348f1bbf8c4000c59cd884 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Mon, 29 Aug 2016 13:56:58 +0100 Subject: Issue 23229: add cmath.inf, cmath.nan, cmath.infj and cmath.nanj. --- Modules/cmathmodule.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'Modules') diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 0e7d4db96d..8319767b8a 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -81,6 +81,54 @@ else { #endif #define CM_SCALE_DOWN (-(CM_SCALE_UP+1)/2) +/* Constants cmath.inf, cmath.infj, cmath.nan, cmath.nanj. + cmath.nan and cmath.nanj are defined only when either + PY_NO_SHORT_FLOAT_REPR is *not* defined (which should be + the most common situation on machines using an IEEE 754 + representation), or Py_NAN is defined. */ + +static double +m_inf(void) +{ +#ifndef PY_NO_SHORT_FLOAT_REPR + return _Py_dg_infinity(0); +#else + return Py_HUGE_VAL; +#endif +} + +static Py_complex +c_infj(void) +{ + Py_complex r; + r.real = 0.0; + r.imag = m_inf(); + return r; +} + +#if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN) + +static double +m_nan(void) +{ +#ifndef PY_NO_SHORT_FLOAT_REPR + return _Py_dg_stdnan(0); +#else + return Py_NAN; +#endif +} + +static Py_complex +c_nanj(void) +{ + Py_complex r; + r.real = 0.0; + r.imag = m_nan(); + return r; +} + +#endif + /* forward declarations */ static Py_complex cmath_asinh_impl(PyObject *, Py_complex); static Py_complex cmath_atanh_impl(PyObject *, Py_complex); @@ -1240,6 +1288,12 @@ PyInit_cmath(void) PyFloat_FromDouble(Py_MATH_PI)); PyModule_AddObject(m, "e", PyFloat_FromDouble(Py_MATH_E)); PyModule_AddObject(m, "tau", PyFloat_FromDouble(Py_MATH_TAU)); /* 2pi */ + PyModule_AddObject(m, "inf", PyFloat_FromDouble(m_inf())); + PyModule_AddObject(m, "infj", PyComplex_FromCComplex(c_infj())); +#if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN) + PyModule_AddObject(m, "nan", PyFloat_FromDouble(m_nan())); + PyModule_AddObject(m, "nanj", PyComplex_FromCComplex(c_nanj())); +#endif /* initialize special value tables */ -- cgit v1.2.1 From 4846ba81c69ebc815b35a89ed54fef7b5ffb1417 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 30 Aug 2016 10:47:49 -0700 Subject: Issue #27895: Spelling fixes (Contributed by Ville Skytt?). --- Modules/_ctypes/ctypes.h | 2 +- Modules/_hashopenssl.c | 2 +- Modules/_io/iobase.c | 2 +- Modules/_pickle.c | 4 ++-- Modules/_testcapimodule.c | 2 +- Modules/_threadmodule.c | 2 +- Modules/_tracemalloc.c | 2 +- Modules/binascii.c | 4 ++-- Modules/mathmodule.c | 2 +- Modules/socketmodule.c | 2 +- Modules/zipimport.c | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index b06ba8ae46..b4a9b78e2f 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -238,7 +238,7 @@ typedef struct { StgDictObject function to a generic one. Currently, PyCFuncPtr types have 'converters' and 'checker' entries in their - type dict. They are only used to cache attributes from other entries, whihc + type dict. They are only used to cache attributes from other entries, which is wrong. One use case is the .value attribute that all simple types have. But some diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index 44765acf31..f45744a435 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -724,7 +724,7 @@ generate_hash_name_list(void) /* * This macro generates constructor function definitions for specific * hash algorithms. These constructors are much faster than calling - * the generic one passing it a python string and are noticably + * the generic one passing it a python string and are noticeably * faster than calling a python new() wrapper. Thats important for * code that wants to make hashes of a bunch of small strings. */ diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index f07a0ca295..472ef3b97c 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -90,7 +90,7 @@ iobase_unsupported(const char *message) return NULL; } -/* Positionning */ +/* Positioning */ PyDoc_STRVAR(iobase_seek_doc, "Change stream position.\n" diff --git a/Modules/_pickle.c b/Modules/_pickle.c index f029ed6645..a8d414e713 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -2131,7 +2131,7 @@ raw_unicode_escape(PyObject *obj) Py_UCS4 ch = PyUnicode_READ(kind, data, i); /* Map 32-bit characters to '\Uxxxxxxxx' */ if (ch >= 0x10000) { - /* -1: substract 1 preallocated byte */ + /* -1: subtract 1 preallocated byte */ p = _PyBytesWriter_Prepare(&writer, p, 10-1); if (p == NULL) goto error; @@ -2149,7 +2149,7 @@ raw_unicode_escape(PyObject *obj) } /* Map 16-bit characters, '\\' and '\n' to '\uxxxx' */ else if (ch >= 256 || ch == '\\' || ch == '\n') { - /* -1: substract 1 preallocated byte */ + /* -1: subtract 1 preallocated byte */ p = _PyBytesWriter_Prepare(&writer, p, 6-1); if (p == NULL) goto error; diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 5d661f7235..6fabc40964 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3798,7 +3798,7 @@ get_recursion_depth(PyObject *self, PyObject *args) { PyThreadState *tstate = PyThreadState_GET(); - /* substract one to ignore the frame of the get_recursion_depth() call */ + /* subtract one to ignore the frame of the get_recursion_depth() call */ return PyLong_FromLong(tstate->recursion_depth - 1); } diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 968181cd8a..0219559609 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -45,7 +45,7 @@ lock_dealloc(lockobject *self) /* Helper to acquire an interruptible lock with a timeout. If the lock acquire * is interrupted, signal handlers are run, and if they raise an exception, * PY_LOCK_INTR is returned. Otherwise, PY_LOCK_ACQUIRED or PY_LOCK_FAILURE - * are returned, depending on whether the lock can be acquired withing the + * are returned, depending on whether the lock can be acquired within the * timeout. */ static PyLockStatus diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index e3329c722f..48f5b47025 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -716,7 +716,7 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) if (ADD_TRACE(ptr2, new_size) < 0) { /* Memory allocation failed. The error cannot be reported to - the caller, because realloc() may already have shrinked the + the caller, because realloc() may already have shrunk the memory block and so removed bytes. This case is very unlikely: a hash entry has just been diff --git a/Modules/binascii.c b/Modules/binascii.c index 50b09fe4f0..c3320cea2c 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -837,7 +837,7 @@ binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data) if (in_byte == RUNCHAR) { INBYTE(in_repeat); /* only 1 byte will be written, but 2 bytes were preallocated: - substract 1 byte to prevent overallocation */ + subtract 1 byte to prevent overallocation */ writer.min_size--; if (in_repeat != 0) { @@ -858,7 +858,7 @@ binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data) if (in_byte == RUNCHAR) { INBYTE(in_repeat); /* only 1 byte will be written, but 2 bytes were preallocated: - substract 1 byte to prevent overallocation */ + subtract 1 byte to prevent overallocation */ writer.min_size--; if ( in_repeat == 0 ) { diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 43aa229eb7..95ea4f7fef 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -1274,7 +1274,7 @@ count_set_bits(unsigned long n) /* Divide-and-conquer factorial algorithm * - * Based on the formula and psuedo-code provided at: + * Based on the formula and pseudo-code provided at: * http://www.luschny.de/math/factorial/binarysplitfact.html * * Faster algorithms exist, but they're more complicated and depend on diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index d896cc0240..f94c3224a2 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -6611,7 +6611,7 @@ PyInit__socket(void) PyModule_AddIntConstant(m, "SOMAXCONN", 5); /* Common value */ #endif - /* Ancilliary message types */ + /* Ancillary message types */ #ifdef SCM_RIGHTS PyModule_AddIntMacro(m, SCM_RIGHTS); #endif diff --git a/Modules/zipimport.c b/Modules/zipimport.c index e840271bfd..6d5c68a61e 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -1315,7 +1315,7 @@ unmarshal_code(PyObject *pathname, PyObject *data, time_t mtime) return code; } -/* Replace any occurances of "\r\n?" in the input string with "\n". +/* Replace any occurrences of "\r\n?" in the input string with "\n". This converts DOS and Mac line endings to Unix line endings. Also append a trailing "\n" to be compatible with PyParser_SimpleParseFile(). Returns a new reference. */ -- cgit v1.2.1 From 0a6df009f15614433b04a5640f5167a1d99245ff Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sat, 3 Sep 2016 17:21:29 +0100 Subject: Issue #11734: Add support for IEEE 754 half-precision floats to the struct module. Original patch by Eli Stevens. --- Modules/_struct.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_struct.c b/Modules/_struct.c index df81900d6d..2bcd492a29 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -266,6 +266,33 @@ get_size_t(PyObject *v, size_t *p) /* Floating point helpers */ +static PyObject * +unpack_halffloat(const char *p, /* start of 2-byte string */ + int le) /* true for little-endian, false for big-endian */ +{ + double x; + + x = _PyFloat_Unpack2((unsigned char *)p, le); + if (x == -1.0 && PyErr_Occurred()) { + return NULL; + } + return PyFloat_FromDouble(x); +} + +static int +pack_halffloat(char *p, /* start of 2-byte string */ + PyObject *v, /* value to pack */ + int le) /* true for little-endian, false for big-endian */ +{ + double x = PyFloat_AsDouble(v); + if (x == -1.0 && PyErr_Occurred()) { + PyErr_SetString(StructError, + "required argument is not a float"); + return -1; + } + return _PyFloat_Pack2(x, (unsigned char *)p, le); +} + static PyObject * unpack_float(const char *p, /* start of 4-byte string */ int le) /* true for little-endian, false for big-endian */ @@ -469,6 +496,16 @@ nu_bool(const char *p, const formatdef *f) } +static PyObject * +nu_halffloat(const char *p, const formatdef *f) +{ +#if PY_LITTLE_ENDIAN + return unpack_halffloat(p, 1); +#else + return unpack_halffloat(p, 0); +#endif +} + static PyObject * nu_float(const char *p, const formatdef *f) { @@ -680,6 +717,16 @@ np_bool(char *p, PyObject *v, const formatdef *f) return 0; } +static int +np_halffloat(char *p, PyObject *v, const formatdef *f) +{ +#if PY_LITTLE_ENDIAN + return pack_halffloat(p, v, 1); +#else + return pack_halffloat(p, v, 0); +#endif +} + static int np_float(char *p, PyObject *v, const formatdef *f) { @@ -743,6 +790,7 @@ static const formatdef native_table[] = { {'Q', sizeof(PY_LONG_LONG), LONG_LONG_ALIGN, nu_ulonglong,np_ulonglong}, #endif {'?', sizeof(BOOL_TYPE), BOOL_ALIGN, nu_bool, np_bool}, + {'e', sizeof(short), SHORT_ALIGN, nu_halffloat, np_halffloat}, {'f', sizeof(float), FLOAT_ALIGN, nu_float, np_float}, {'d', sizeof(double), DOUBLE_ALIGN, nu_double, np_double}, {'P', sizeof(void *), VOID_P_ALIGN, nu_void_p, np_void_p}, @@ -825,6 +873,12 @@ bu_ulonglong(const char *p, const formatdef *f) #endif } +static PyObject * +bu_halffloat(const char *p, const formatdef *f) +{ + return unpack_halffloat(p, 0); +} + static PyObject * bu_float(const char *p, const formatdef *f) { @@ -921,6 +975,12 @@ bp_ulonglong(char *p, PyObject *v, const formatdef *f) return res; } +static int +bp_halffloat(char *p, PyObject *v, const formatdef *f) +{ + return pack_halffloat(p, v, 0); +} + static int bp_float(char *p, PyObject *v, const formatdef *f) { @@ -972,6 +1032,7 @@ static formatdef bigendian_table[] = { {'q', 8, 0, bu_longlong, bp_longlong}, {'Q', 8, 0, bu_ulonglong, bp_ulonglong}, {'?', 1, 0, bu_bool, bp_bool}, + {'e', 2, 0, bu_halffloat, bp_halffloat}, {'f', 4, 0, bu_float, bp_float}, {'d', 8, 0, bu_double, bp_double}, {0} @@ -1053,6 +1114,12 @@ lu_ulonglong(const char *p, const formatdef *f) #endif } +static PyObject * +lu_halffloat(const char *p, const formatdef *f) +{ + return unpack_halffloat(p, 1); +} + static PyObject * lu_float(const char *p, const formatdef *f) { @@ -1141,6 +1208,12 @@ lp_ulonglong(char *p, PyObject *v, const formatdef *f) return res; } +static int +lp_halffloat(char *p, PyObject *v, const formatdef *f) +{ + return pack_halffloat(p, v, 1); +} + static int lp_float(char *p, PyObject *v, const formatdef *f) { @@ -1182,6 +1255,7 @@ static formatdef lilendian_table[] = { {'Q', 8, 0, lu_ulonglong, lp_ulonglong}, {'?', 1, 0, bu_bool, bp_bool}, /* Std rep not endian dep, but potentially different from native rep -- reuse bx_bool funcs. */ + {'e', 2, 0, lu_halffloat, lp_halffloat}, {'f', 4, 0, lu_float, lp_float}, {'d', 8, 0, lu_double, lp_double}, {0} @@ -2239,7 +2313,7 @@ these can be preceded by a decimal repeat count:\n\ x: pad byte (no data); c:char; b:signed byte; B:unsigned byte;\n\ ?: _Bool (requires C99; if not available, char is used instead)\n\ h:short; H:unsigned short; i:int; I:unsigned int;\n\ - l:long; L:unsigned long; f:float; d:double.\n\ + l:long; L:unsigned long; f:float; d:double; e:half-float.\n\ Special cases (preceding decimal count indicates length):\n\ s:string (array of char); p: pascal string (with count byte).\n\ Special cases (only available in native format):\n\ -- cgit v1.2.1 From c4a3f724702fba76349034c07e43915d221fcf4d Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 5 Sep 2016 23:54:41 +0200 Subject: Issue #27744: Add AF_ALG (Linux Kernel crypto) to socket module. --- Modules/socketmodule.c | 431 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 378 insertions(+), 53 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index f94c3224a2..42ae2fbc54 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -136,7 +136,7 @@ sendall(data[, flags]) -- send all data\n\ send(data[, flags]) -- send data, may not send all of it\n\ sendto(data[, flags], addr) -- send data to a given address\n\ setblocking(0 | 1) -- set or clear the blocking I/O flag\n\ -setsockopt(level, optname, value) -- set socket options\n\ +setsockopt(level, optname, value[, optlen]) -- set socket options\n\ settimeout(None | float) -- set or clear the timeout\n\ shutdown(how) -- shut down traffic in one or both directions\n\ if_nameindex() -- return all network interface indices and names\n\ @@ -286,6 +286,36 @@ http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/net/getaddrinfo.c.diff?r1=1.82& #include #endif +#ifdef HAVE_SOCKADDR_ALG +#include +#ifndef AF_ALG +#define AF_ALG 38 +#endif +#ifndef SOL_ALG +#define SOL_ALG 279 +#endif + +/* Linux 3.19 */ +#ifndef ALG_SET_AEAD_ASSOCLEN +#define ALG_SET_AEAD_ASSOCLEN 4 +#endif +#ifndef ALG_SET_AEAD_AUTHSIZE +#define ALG_SET_AEAD_AUTHSIZE 5 +#endif +/* Linux 4.8 */ +#ifndef ALG_SET_PUBKEY +#define ALG_SET_PUBKEY 6 +#endif + +#ifndef ALG_OP_SIGN +#define ALG_OP_SIGN 2 +#endif +#ifndef ALG_OP_VERIFY +#define ALG_OP_VERIFY 3 +#endif + +#endif /* HAVE_SOCKADDR_ALG */ + /* Generic socket object definitions and includes */ #define PySocket_BUILDING_SOCKET #include "socketmodule.h" @@ -1375,6 +1405,22 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) } #endif +#ifdef HAVE_SOCKADDR_ALG + case AF_ALG: + { + struct sockaddr_alg *a = (struct sockaddr_alg *)addr; + return Py_BuildValue("s#s#HH", + a->salg_type, + strnlen((const char*)a->salg_type, + sizeof(a->salg_type)), + a->salg_name, + strnlen((const char*)a->salg_name, + sizeof(a->salg_name)), + a->salg_feat, + a->salg_mask); + } +#endif + /* More cases here... */ default: @@ -1940,6 +1986,36 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, return 0; } #endif +#ifdef HAVE_SOCKADDR_ALG + case AF_ALG: + { + struct sockaddr_alg *sa; + char *type; + char *name; + sa = (struct sockaddr_alg *)addr_ret; + + memset(sa, 0, sizeof(*sa)); + sa->salg_family = AF_ALG; + + if (!PyArg_ParseTuple(args, "ss|HH:getsockaddrarg", + &type, &name, &sa->salg_feat, &sa->salg_mask)) + return 0; + /* sockaddr_alg has fixed-sized char arrays for type and name */ + if (strlen(type) > sizeof(sa->salg_type)) { + PyErr_SetString(PyExc_ValueError, "AF_ALG type too long."); + return 0; + } + strncpy((char *)sa->salg_type, type, sizeof(sa->salg_type)); + if (strlen(name) > sizeof(sa->salg_name)) { + PyErr_SetString(PyExc_ValueError, "AF_ALG name too long."); + return 0; + } + strncpy((char *)sa->salg_name, name, sizeof(sa->salg_name)); + + *len_ret = sizeof(*sa); + return 1; + } +#endif /* More cases here... */ @@ -2061,6 +2137,13 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret) return 0; } #endif +#ifdef HAVE_SOCKADDR_ALG + case AF_ALG: + { + *len_ret = sizeof (struct sockaddr_alg); + return 1; + } +#endif /* More cases here... */ @@ -2220,10 +2303,21 @@ static int sock_accept_impl(PySocketSockObject *s, void *data) { struct sock_accept *ctx = data; + struct sockaddr *addr = SAS2SA(ctx->addrbuf); + socklen_t *paddrlen = ctx->addrlen; +#ifdef HAVE_SOCKADDR_ALG + /* AF_ALG does not support accept() with addr and raises + * ECONNABORTED instead. */ + if (s->sock_family == AF_ALG) { + addr = NULL; + paddrlen = NULL; + *ctx->addrlen = 0; + } +#endif #if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) if (accept4_works != 0) { - ctx->result = accept4(s->sock_fd, SAS2SA(ctx->addrbuf), ctx->addrlen, + ctx->result = accept4(s->sock_fd, addr, paddrlen, SOCK_CLOEXEC); if (ctx->result == INVALID_SOCKET && accept4_works == -1) { /* On Linux older than 2.6.28, accept4() fails with ENOSYS */ @@ -2231,9 +2325,9 @@ sock_accept_impl(PySocketSockObject *s, void *data) } } if (accept4_works == 0) - ctx->result = accept(s->sock_fd, SAS2SA(ctx->addrbuf), ctx->addrlen); + ctx->result = accept(s->sock_fd, addr, paddrlen); #else - ctx->result = accept(s->sock_fd, SAS2SA(ctx->addrbuf), ctx->addrlen); + ctx->result = accept(s->sock_fd, addr, paddrlen); #endif #ifdef MS_WINDOWS @@ -2435,9 +2529,12 @@ operations. A timeout of None indicates that timeouts on socket \n\ operations are disabled."); /* s.setsockopt() method. - With an integer third argument, sets an integer option. + With an integer third argument, sets an integer optval with optlen=4. + With None as third argument and an integer fourth argument, set + optval=NULL with unsigned int as optlen. With a string third argument, sets an option from a buffer; - use optional built-in module 'struct' to encode the string. */ + use optional built-in module 'struct' to encode the string. +*/ static PyObject * sock_setsockopt(PySocketSockObject *s, PyObject *args) @@ -2447,32 +2544,49 @@ sock_setsockopt(PySocketSockObject *s, PyObject *args) int res; Py_buffer optval; int flag; + unsigned int optlen; + PyObject *none; + /* setsockopt(level, opt, flag) */ if (PyArg_ParseTuple(args, "iii:setsockopt", &level, &optname, &flag)) { res = setsockopt(s->sock_fd, level, optname, (char*)&flag, sizeof flag); + goto done; } - else { - PyErr_Clear(); - if (!PyArg_ParseTuple(args, "iiy*:setsockopt", - &level, &optname, &optval)) - return NULL; -#ifdef MS_WINDOWS - if (optval.len > INT_MAX) { - PyBuffer_Release(&optval); - PyErr_Format(PyExc_OverflowError, - "socket option is larger than %i bytes", - INT_MAX); - return NULL; - } + + PyErr_Clear(); + /* setsockopt(level, opt, (None, flag)) */ + if (PyArg_ParseTuple(args, "iiO!I:setsockopt", + &level, &optname, Py_TYPE(Py_None), &none, &optlen)) { + assert(sizeof(socklen_t) >= sizeof(unsigned int)); res = setsockopt(s->sock_fd, level, optname, - optval.buf, (int)optval.len); -#else - res = setsockopt(s->sock_fd, level, optname, optval.buf, optval.len); -#endif + NULL, (socklen_t)optlen); + goto done; + } + + PyErr_Clear(); + /* setsockopt(level, opt, buffer) */ + if (!PyArg_ParseTuple(args, "iiy*:setsockopt", + &level, &optname, &optval)) + return NULL; + +#ifdef MS_WINDOWS + if (optval.len > INT_MAX) { PyBuffer_Release(&optval); + PyErr_Format(PyExc_OverflowError, + "socket option is larger than %i bytes", + INT_MAX); + return NULL; } + res = setsockopt(s->sock_fd, level, optname, + optval.buf, (int)optval.len); +#else + res = setsockopt(s->sock_fd, level, optname, optval.buf, optval.len); +#endif + PyBuffer_Release(&optval); + +done: if (res < 0) { return s->errorhandler(); } @@ -2481,10 +2595,13 @@ sock_setsockopt(PySocketSockObject *s, PyObject *args) } PyDoc_STRVAR(setsockopt_doc, -"setsockopt(level, option, value)\n\ +"setsockopt(level, option, value: int)\n\ +setsockopt(level, option, value: buffer)\n\ +setsockopt(level, option, None, optlen: int)\n\ \n\ Set a socket option. See the Unix manual for level and option.\n\ -The value argument can either be an integer or a string."); +The value argument can either be an integer, a string buffer, or \n\ +None, optlen."); /* s.getsockopt() method. @@ -3773,6 +3890,51 @@ struct sock_sendmsg { ssize_t result; }; +static int +sock_sendmsg_iovec(PySocketSockObject *s, PyObject *data_arg, + struct msghdr *msg, + Py_buffer **databufsout, Py_ssize_t *ndatabufsout) { + Py_ssize_t ndataparts, ndatabufs = 0; + int result = -1; + struct iovec *iovs = NULL; + PyObject *data_fast = NULL; + Py_buffer *databufs = NULL; + + /* Fill in an iovec for each message part, and save the Py_buffer + structs to release afterwards. */ + if ((data_fast = PySequence_Fast(data_arg, + "sendmsg() argument 1 must be an " + "iterable")) == NULL) + goto finally; + ndataparts = PySequence_Fast_GET_SIZE(data_fast); + if (ndataparts > INT_MAX) { + PyErr_SetString(PyExc_OSError, "sendmsg() argument 1 is too long"); + goto finally; + } + msg->msg_iovlen = ndataparts; + if (ndataparts > 0 && + ((msg->msg_iov = iovs = PyMem_New(struct iovec, ndataparts)) == NULL || + (databufs = PyMem_New(Py_buffer, ndataparts)) == NULL)) { + PyErr_NoMemory(); + goto finally; + } + for (; ndatabufs < ndataparts; ndatabufs++) { + if (!PyArg_Parse(PySequence_Fast_GET_ITEM(data_fast, ndatabufs), + "y*;sendmsg() argument 1 must be an iterable of " + "bytes-like objects", + &databufs[ndatabufs])) + goto finally; + iovs[ndatabufs].iov_base = databufs[ndatabufs].buf; + iovs[ndatabufs].iov_len = databufs[ndatabufs].len; + } + result = 0; + finally: + *databufsout = databufs; + *ndatabufsout = ndatabufs; + Py_XDECREF(data_fast); + return result; +} + static int sock_sendmsg_impl(PySocketSockObject *s, void *data) { @@ -3787,9 +3949,8 @@ sock_sendmsg_impl(PySocketSockObject *s, void *data) static PyObject * sock_sendmsg(PySocketSockObject *s, PyObject *args) { - Py_ssize_t i, ndataparts, ndatabufs = 0, ncmsgs, ncmsgbufs = 0; + Py_ssize_t i, ndatabufs = 0, ncmsgs, ncmsgbufs = 0; Py_buffer *databufs = NULL; - struct iovec *iovs = NULL; sock_addr_t addrbuf; struct msghdr msg = {0}; struct cmsginfo { @@ -3800,7 +3961,7 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) void *controlbuf = NULL; size_t controllen, controllen_last; int addrlen, flags = 0; - PyObject *data_arg, *cmsg_arg = NULL, *addr_arg = NULL, *data_fast = NULL, + PyObject *data_arg, *cmsg_arg = NULL, *addr_arg = NULL, *cmsg_fast = NULL, *retval = NULL; struct sock_sendmsg ctx; @@ -3818,31 +3979,9 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) /* Fill in an iovec for each message part, and save the Py_buffer structs to release afterwards. */ - if ((data_fast = PySequence_Fast(data_arg, - "sendmsg() argument 1 must be an " - "iterable")) == NULL) - goto finally; - ndataparts = PySequence_Fast_GET_SIZE(data_fast); - if (ndataparts > INT_MAX) { - PyErr_SetString(PyExc_OSError, "sendmsg() argument 1 is too long"); - goto finally; - } - msg.msg_iovlen = ndataparts; - if (ndataparts > 0 && - ((msg.msg_iov = iovs = PyMem_New(struct iovec, ndataparts)) == NULL || - (databufs = PyMem_New(Py_buffer, ndataparts)) == NULL)) { - PyErr_NoMemory(); + if (sock_sendmsg_iovec(s, data_arg, &msg, &databufs, &ndatabufs) == -1) { goto finally; } - for (; ndatabufs < ndataparts; ndatabufs++) { - if (!PyArg_Parse(PySequence_Fast_GET_ITEM(data_fast, ndatabufs), - "y*;sendmsg() argument 1 must be an iterable of " - "bytes-like objects", - &databufs[ndatabufs])) - goto finally; - iovs[ndatabufs].iov_base = databufs[ndatabufs].buf; - iovs[ndatabufs].iov_len = databufs[ndatabufs].len; - } if (cmsg_arg == NULL) ncmsgs = 0; @@ -3972,8 +4111,6 @@ finally: for (i = 0; i < ndatabufs; i++) PyBuffer_Release(&databufs[i]); PyMem_Free(databufs); - PyMem_Free(iovs); - Py_XDECREF(data_fast); return retval; } @@ -3995,6 +4132,165 @@ the message. The return value is the number of bytes of non-ancillary\n\ data sent."); #endif /* CMSG_LEN */ +#ifdef HAVE_SOCKADDR_ALG +static PyObject* +sock_sendmsg_afalg(PySocketSockObject *self, PyObject *args, PyObject *kwds) +{ + PyObject *retval = NULL; + + Py_ssize_t i, ndatabufs = 0; + Py_buffer *databufs = NULL; + PyObject *data_arg = NULL; + + Py_buffer iv = {NULL, NULL}; + + PyObject *opobj = NULL; + int op = -1; + + PyObject *assoclenobj = NULL; + int assoclen = -1; + + unsigned int *uiptr; + int flags = 0; + + struct msghdr msg; + struct cmsghdr *header = NULL; + struct af_alg_iv *alg_iv = NULL; + struct sock_sendmsg ctx; + Py_ssize_t controllen; + void *controlbuf = NULL; + static char *keywords[] = {"msg", "op", "iv", "assoclen", "flags", 0}; + + if (self->sock_family != AF_ALG) { + PyErr_SetString(PyExc_OSError, + "algset is only supported for AF_ALG"); + return NULL; + } + + if (!PyArg_ParseTupleAndKeywords(args, kwds, + "|O$O!y*O!i:sendmsg_afalg", keywords, + &data_arg, + &PyLong_Type, &opobj, &iv, + &PyLong_Type, &assoclenobj, &flags)) + return NULL; + + /* op is a required, keyword-only argument >= 0 */ + if (opobj != NULL) { + op = _PyLong_AsInt(opobj); + } + if (op < 0) { + /* override exception from _PyLong_AsInt() */ + PyErr_SetString(PyExc_TypeError, + "Invalid or missing argument 'op'"); + goto finally; + } + /* assoclen is optional but must be >= 0 */ + if (assoclenobj != NULL) { + assoclen = _PyLong_AsInt(assoclenobj); + if (assoclen == -1 && PyErr_Occurred()) { + goto finally; + } + if (assoclen < 0) { + PyErr_SetString(PyExc_TypeError, + "assoclen must be positive"); + goto finally; + } + } + + controllen = CMSG_SPACE(4); + if (iv.buf != NULL) { + controllen += CMSG_SPACE(sizeof(*alg_iv) + iv.len); + } + if (assoclen >= 0) { + controllen += CMSG_SPACE(4); + } + + controlbuf = PyMem_Malloc(controllen); + if (controlbuf == NULL) { + return PyErr_NoMemory(); + } + memset(controlbuf, 0, controllen); + + memset(&msg, 0, sizeof(msg)); + msg.msg_controllen = controllen; + msg.msg_control = controlbuf; + + /* Fill in an iovec for each message part, and save the Py_buffer + structs to release afterwards. */ + if (data_arg != NULL) { + if (sock_sendmsg_iovec(self, data_arg, &msg, &databufs, &ndatabufs) == -1) { + goto finally; + } + } + + /* set operation to encrypt or decrypt */ + header = CMSG_FIRSTHDR(&msg); + if (header == NULL) { + PyErr_SetString(PyExc_RuntimeError, + "unexpected NULL result from CMSG_FIRSTHDR"); + goto finally; + } + header->cmsg_level = SOL_ALG; + header->cmsg_type = ALG_SET_OP; + header->cmsg_len = CMSG_LEN(4); + uiptr = (void*)CMSG_DATA(header); + *uiptr = (unsigned int)op; + + /* set initialization vector */ + if (iv.buf != NULL) { + header = CMSG_NXTHDR(&msg, header); + if (header == NULL) { + PyErr_SetString(PyExc_RuntimeError, + "unexpected NULL result from CMSG_NXTHDR(iv)"); + goto finally; + } + header->cmsg_level = SOL_ALG; + header->cmsg_type = ALG_SET_IV; + header->cmsg_len = CMSG_SPACE(sizeof(*alg_iv) + iv.len); + alg_iv = (void*)CMSG_DATA(header); + alg_iv->ivlen = iv.len; + memcpy(alg_iv->iv, iv.buf, iv.len); + } + + /* set length of associated data for AEAD */ + if (assoclen >= 0) { + header = CMSG_NXTHDR(&msg, header); + if (header == NULL) { + PyErr_SetString(PyExc_RuntimeError, + "unexpected NULL result from CMSG_NXTHDR(assoc)"); + goto finally; + } + header->cmsg_level = SOL_ALG; + header->cmsg_type = ALG_SET_AEAD_ASSOCLEN; + header->cmsg_len = CMSG_LEN(4); + uiptr = (void*)CMSG_DATA(header); + *uiptr = (unsigned int)assoclen; + } + + ctx.msg = &msg; + ctx.flags = flags; + if (sock_call(self, 1, sock_sendmsg_impl, &ctx) < 0) + goto finally; + + retval = PyLong_FromSsize_t(ctx.result); + + finally: + PyMem_Free(controlbuf); + if (iv.buf != NULL) { + PyBuffer_Release(&iv); + } + for (i = 0; i < ndatabufs; i++) + PyBuffer_Release(&databufs[i]); + PyMem_Free(databufs); + return retval; +} + +PyDoc_STRVAR(sendmsg_afalg_doc, +"sendmsg_afalg([msg], *, op[, iv[, assoclen[, flags=MSG_MORE]]])\n\ +\n\ +Set operation mode, IV and length of associated data for an AF_ALG\n\ +operation socket."); +#endif /* s.shutdown(how) method */ @@ -4173,6 +4469,10 @@ static PyMethodDef sock_methods[] = { recvmsg_into_doc,}, {"sendmsg", (PyCFunction)sock_sendmsg, METH_VARARGS, sendmsg_doc}, +#endif +#ifdef HAVE_SOCKADDR_ALG + {"sendmsg_afalg", (PyCFunction)sock_sendmsg_afalg, METH_VARARGS | METH_KEYWORDS, + sendmsg_afalg_doc}, #endif {NULL, NULL} /* sentinel */ }; @@ -6277,6 +6577,9 @@ PyInit__socket(void) /* Reserved for Werner's ATM */ PyModule_AddIntMacro(m, AF_AAL5); #endif +#ifdef HAVE_SOCKADDR_ALG + PyModule_AddIntMacro(m, AF_ALG); /* Linux crypto */ +#endif #ifdef AF_X25 /* Reserved for X.25 project */ PyModule_AddIntMacro(m, AF_X25); @@ -6338,6 +6641,9 @@ PyInit__socket(void) #ifdef NETLINK_TAPBASE PyModule_AddIntMacro(m, NETLINK_TAPBASE); #endif +#ifdef NETLINK_CRYPTO + PyModule_AddIntMacro(m, NETLINK_CRYPTO); +#endif #endif /* AF_NETLINK */ #ifdef AF_ROUTE /* Alias to emulate 4.4BSD */ @@ -6491,6 +6797,22 @@ PyInit__socket(void) PyModule_AddIntMacro(m, TIPC_TOP_SRV); #endif +#ifdef HAVE_SOCKADDR_ALG + /* Socket options */ + PyModule_AddIntMacro(m, ALG_SET_KEY); + PyModule_AddIntMacro(m, ALG_SET_IV); + PyModule_AddIntMacro(m, ALG_SET_OP); + PyModule_AddIntMacro(m, ALG_SET_AEAD_ASSOCLEN); + PyModule_AddIntMacro(m, ALG_SET_AEAD_AUTHSIZE); + PyModule_AddIntMacro(m, ALG_SET_PUBKEY); + + /* Operations */ + PyModule_AddIntMacro(m, ALG_OP_DECRYPT); + PyModule_AddIntMacro(m, ALG_OP_ENCRYPT); + PyModule_AddIntMacro(m, ALG_OP_SIGN); + PyModule_AddIntMacro(m, ALG_OP_VERIFY); +#endif + /* Socket types */ PyModule_AddIntMacro(m, SOCK_STREAM); PyModule_AddIntMacro(m, SOCK_DGRAM); @@ -6761,6 +7083,9 @@ PyInit__socket(void) #ifdef SOL_RDS PyModule_AddIntMacro(m, SOL_RDS); #endif +#ifdef HAVE_SOCKADDR_ALG + PyModule_AddIntMacro(m, SOL_ALG); +#endif #ifdef RDS_CANCEL_SENT_TO PyModule_AddIntMacro(m, RDS_CANCEL_SENT_TO); #endif -- cgit v1.2.1 From 8b5d969b2f06427f0460be47b20e0e2bc9400535 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 6 Sep 2016 00:04:45 +0200 Subject: Issue #27866: Add SSLContext.get_ciphers() method to get a list of all enabled ciphers. --- Modules/_ssl.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++++ Modules/clinic/_ssl.c.h | 27 ++++++++++- 2 files changed, 143 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 151029a50b..fe19195366 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1519,6 +1519,76 @@ cipher_to_tuple(const SSL_CIPHER *cipher) return NULL; } +#if OPENSSL_VERSION_NUMBER >= 0x10002000UL +static PyObject * +cipher_to_dict(const SSL_CIPHER *cipher) +{ + const char *cipher_name, *cipher_protocol; + + unsigned long cipher_id; + int alg_bits, strength_bits, len; + char buf[512] = {0}; +#if OPENSSL_VERSION_1_1 + int aead, nid; + const char *skcipher = NULL, *digest = NULL, *kx = NULL, *auth = NULL; +#endif + PyObject *retval; + + retval = PyDict_New(); + if (retval == NULL) { + goto error; + } + + /* can be NULL */ + cipher_name = SSL_CIPHER_get_name(cipher); + cipher_protocol = SSL_CIPHER_get_version(cipher); + cipher_id = SSL_CIPHER_get_id(cipher); + SSL_CIPHER_description(cipher, buf, sizeof(buf) - 1); + len = strlen(buf); + if (len > 1 && buf[len-1] == '\n') + buf[len-1] = '\0'; + strength_bits = SSL_CIPHER_get_bits(cipher, &alg_bits); + +#if OPENSSL_VERSION_1_1 + aead = SSL_CIPHER_is_aead(cipher); + nid = SSL_CIPHER_get_cipher_nid(cipher); + skcipher = nid != NID_undef ? OBJ_nid2ln(nid) : NULL; + nid = SSL_CIPHER_get_digest_nid(cipher); + digest = nid != NID_undef ? OBJ_nid2ln(nid) : NULL; + nid = SSL_CIPHER_get_kx_nid(cipher); + kx = nid != NID_undef ? OBJ_nid2ln(nid) : NULL; + nid = SSL_CIPHER_get_auth_nid(cipher); + auth = nid != NID_undef ? OBJ_nid2ln(nid) : NULL; +#endif + + retval = Py_BuildValue( + "{sksssssssisi" +#if OPENSSL_VERSION_1_1 + "sOssssssss" +#endif + "}", + "id", cipher_id, + "name", cipher_name, + "protocol", cipher_protocol, + "description", buf, + "strength_bits", strength_bits, + "alg_bits", alg_bits +#if OPENSSL_VERSION_1_1 + ,"aead", aead ? Py_True : Py_False, + "symmetric", skcipher, + "digest", digest, + "kea", kx, + "auth", auth +#endif + ); + return retval; + + error: + Py_XDECREF(retval); + return NULL; +} +#endif + /*[clinic input] _ssl._SSLSocket.shared_ciphers [clinic start generated code]*/ @@ -2478,6 +2548,52 @@ _ssl__SSLContext_set_ciphers_impl(PySSLContext *self, const char *cipherlist) Py_RETURN_NONE; } +#if OPENSSL_VERSION_NUMBER >= 0x10002000UL +/*[clinic input] +_ssl._SSLContext.get_ciphers +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLContext_get_ciphers_impl(PySSLContext *self) +/*[clinic end generated code: output=a56e4d68a406dfc4 input=a2aadc9af89b79c5]*/ +{ + SSL *ssl = NULL; + STACK_OF(SSL_CIPHER) *sk = NULL; + SSL_CIPHER *cipher; + int i=0; + PyObject *result = NULL, *dct; + + ssl = SSL_new(self->ctx); + if (ssl == NULL) { + _setSSLError(NULL, 0, __FILE__, __LINE__); + goto exit; + } + sk = SSL_get_ciphers(ssl); + + result = PyList_New(sk_SSL_CIPHER_num(sk)); + if (result == NULL) { + goto exit; + } + + for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) { + cipher = sk_SSL_CIPHER_value(sk, i); + dct = cipher_to_dict(cipher); + if (dct == NULL) { + Py_CLEAR(result); + goto exit; + } + PyList_SET_ITEM(result, i, dct); + } + + exit: + if (ssl != NULL) + SSL_free(ssl); + return result; + +} +#endif + + #ifdef OPENSSL_NPN_NEGOTIATED static int do_protocol_selection(int alpn, unsigned char **out, unsigned char *outlen, @@ -3645,6 +3761,7 @@ static struct PyMethodDef context_methods[] = { _SSL__SSLCONTEXT_SET_SERVERNAME_CALLBACK_METHODDEF _SSL__SSLCONTEXT_CERT_STORE_STATS_METHODDEF _SSL__SSLCONTEXT_GET_CA_CERTS_METHODDEF + _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF {NULL, NULL} /* sentinel */ }; diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index 0bdc35e5f9..ee8213a1a4 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -378,6 +378,27 @@ exit: return return_value; } +#if (OPENSSL_VERSION_NUMBER >= 0x10002000UL) + +PyDoc_STRVAR(_ssl__SSLContext_get_ciphers__doc__, +"get_ciphers($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF \ + {"get_ciphers", (PyCFunction)_ssl__SSLContext_get_ciphers, METH_NOARGS, _ssl__SSLContext_get_ciphers__doc__}, + +static PyObject * +_ssl__SSLContext_get_ciphers_impl(PySSLContext *self); + +static PyObject * +_ssl__SSLContext_get_ciphers(PySSLContext *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLContext_get_ciphers_impl(self); +} + +#endif /* (OPENSSL_VERSION_NUMBER >= 0x10002000UL) */ + PyDoc_STRVAR(_ssl__SSLContext__set_npn_protocols__doc__, "_set_npn_protocols($self, protos, /)\n" "--\n" @@ -1128,6 +1149,10 @@ exit: #define _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF #endif /* !defined(_SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF) */ +#ifndef _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF + #define _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF +#endif /* !defined(_SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF) */ + #ifndef _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF #define _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF #endif /* !defined(_SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF) */ @@ -1143,4 +1168,4 @@ exit: #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=6057f95343369849 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2e7907a7d8f97ccf input=a9049054013a1b77]*/ -- cgit v1.2.1 From eef0808012356b625e5a55dd635378b18f6c200c Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 6 Sep 2016 00:07:02 +0200 Subject: Issue #27744: correct comment and markup --- Modules/socketmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 42ae2fbc54..0b45c334f4 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2556,7 +2556,7 @@ sock_setsockopt(PySocketSockObject *s, PyObject *args) } PyErr_Clear(); - /* setsockopt(level, opt, (None, flag)) */ + /* setsockopt(level, opt, None, flag) */ if (PyArg_ParseTuple(args, "iiO!I:setsockopt", &level, &optname, Py_TYPE(Py_None), &none, &optlen)) { assert(sizeof(socklen_t) >= sizeof(unsigned int)); -- cgit v1.2.1 From bb0ec1fc07628252f17d66a58a4a4b3654e571c3 Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Mon, 5 Sep 2016 15:11:23 -0700 Subject: Issue #27355: Removed support for Windows CE. It was never finished, and Windows CE is no longer a relevant platform for Python. --- Modules/_ctypes/_ctypes.c | 6 - Modules/_ctypes/libffi_arm_wince/debug.c | 59 ----- Modules/_ctypes/libffi_arm_wince/ffi.c | 310 ------------------------- Modules/_ctypes/libffi_arm_wince/ffi.h | 317 -------------------------- Modules/_ctypes/libffi_arm_wince/ffi_common.h | 111 --------- Modules/_ctypes/libffi_arm_wince/fficonfig.h | 152 ------------ Modules/_ctypes/libffi_arm_wince/ffitarget.h | 49 ---- Modules/_ctypes/libffi_arm_wince/prep_cif.c | 175 -------------- Modules/_ctypes/libffi_arm_wince/sysv.asm | 228 ------------------ 9 files changed, 1407 deletions(-) delete mode 100644 Modules/_ctypes/libffi_arm_wince/debug.c delete mode 100644 Modules/_ctypes/libffi_arm_wince/ffi.c delete mode 100644 Modules/_ctypes/libffi_arm_wince/ffi.h delete mode 100644 Modules/_ctypes/libffi_arm_wince/ffi_common.h delete mode 100644 Modules/_ctypes/libffi_arm_wince/fficonfig.h delete mode 100644 Modules/_ctypes/libffi_arm_wince/ffitarget.h delete mode 100644 Modules/_ctypes/libffi_arm_wince/prep_cif.c delete mode 100644 Modules/_ctypes/libffi_arm_wince/sysv.asm (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index cd5b4aac1f..98433e12f5 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -111,12 +111,6 @@ bytes(cdata) #ifndef IS_INTRESOURCE #define IS_INTRESOURCE(x) (((size_t)(x) >> 16) == 0) #endif -# ifdef _WIN32_WCE -/* Unlike desktop Windows, WinCE has both W and A variants of - GetProcAddress, but the default W version is not what we want */ -# undef GetProcAddress -# define GetProcAddress GetProcAddressA -# endif #else #include "ctypes_dlfcn.h" #endif diff --git a/Modules/_ctypes/libffi_arm_wince/debug.c b/Modules/_ctypes/libffi_arm_wince/debug.c deleted file mode 100644 index 98f1f9f0b4..0000000000 --- a/Modules/_ctypes/libffi_arm_wince/debug.c +++ /dev/null @@ -1,59 +0,0 @@ -/* ----------------------------------------------------------------------- - debug.c - Copyright (c) 1996 Red Hat, Inc. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include -#include -#include - -/* General debugging routines */ - -void ffi_stop_here(void) -{ - /* This function is only useful for debugging purposes. - Place a breakpoint on ffi_stop_here to be notified of - significant events. */ -} - -/* This function should only be called via the FFI_ASSERT() macro */ - -void ffi_assert(char *expr, char *file, int line) -{ - fprintf(stderr, "ASSERTION FAILURE: %s at %s:%d\n", expr, file, line); - ffi_stop_here(); - abort(); -} - -/* Perform a sanity check on an ffi_type structure */ - -void ffi_type_test(ffi_type *a, char *file, int line) -{ - FFI_ASSERT_AT(a != NULL, file, line); - - /*@-usedef@*/ - FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line); - FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line); - FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line); - FFI_ASSERT_AT(a->type != FFI_TYPE_STRUCT || a->elements != NULL, file, line); - /*@=usedef@*/ -} diff --git a/Modules/_ctypes/libffi_arm_wince/ffi.c b/Modules/_ctypes/libffi_arm_wince/ffi.c deleted file mode 100644 index 1193aaac6b..0000000000 --- a/Modules/_ctypes/libffi_arm_wince/ffi.c +++ /dev/null @@ -1,310 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1998 Red Hat, Inc. - - ARM Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -#ifdef _WIN32_WCE -#pragma warning (disable : 4142) /* benign redefinition of type */ -#include -#endif - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -/*@-exportheader@*/ -void ffi_prep_args(char *stack, extended_cif *ecif) -/*@=exportheader@*/ -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - - argp = stack; - - if ( ecif->cif->rtype->type == FFI_TYPE_STRUCT ) { - *(void **) argp = ecif->rvalue; - argp += 4; - } - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); - i--, p_arg++) - { - size_t z; - size_t argalign = (*p_arg)->alignment; - -#ifdef _WIN32_WCE - if (argalign > 4) - argalign = 4; -#endif - /* Align if necessary */ - if ((argalign - 1) & (unsigned) argp) { - argp = (char *) ALIGN(argp, argalign); - } - - z = (*p_arg)->size; - if (z < sizeof(int)) - { - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - /* *p_argv may not be aligned for a UINT32 */ - memcpy(argp, *p_argv, z); - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof(int)) - { - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - } - else - { - memcpy(argp, *p_argv, z); - } - p_argv++; - argp += z; - } - - return; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_STRUCT: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - case FFI_TYPE_SINT64: - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_UINT64: - cif->flags = FFI_TYPE_SINT64; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - -/*@-declundef@*/ -/*@-exportheader@*/ -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), - /*@out@*/ extended_cif *, - unsigned, unsigned, - /*@out@*/ unsigned *, - void (*fn)()); -/*@=declundef@*/ -/*@=exportheader@*/ - -/* Return type changed from void for ctypes */ -int ffi_call(/*@dependent@*/ ffi_cif *cif, - void (*fn)(), - /*@out@*/ void *rvalue, - /*@dependent@*/ void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - /*@-sysunrecog@*/ - ecif.rvalue = alloca(cif->rtype->size); - /*@=sysunrecog@*/ - } - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { - case FFI_SYSV: - /*@-usedef@*/ - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - /*@=usedef@*/ - break; - default: - FFI_ASSERT(0); - break; - } - /* I think calculating the real stack pointer delta is not useful - because stdcall is not supported */ - return 0; -} - -/** private members **/ - -static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, - void** args, ffi_cif* cif); - -/* This function is called by ffi_closure_SYSV in sysv.asm */ - -unsigned int -ffi_closure_SYSV_inner (ffi_closure *closure, char *in_args, void *rvalue) -{ - ffi_cif *cif = closure->cif; - void **out_args; - - out_args = (void **) alloca(cif->nargs * sizeof (void *)); - - /* this call will initialize out_args, such that each - * element in that array points to the corresponding - * value on the stack; and if the function returns - * a structure, it will re-set rvalue to point to the - * structure return address. */ - - ffi_prep_incoming_args_SYSV(in_args, &rvalue, out_args, cif); - - (closure->fun)(cif, rvalue, out_args, closure->user_data); - - /* Tell ffi_closure_SYSV what the returntype is */ - return cif->flags; -} - -/*@-exportheader@*/ -static void -ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, - void **avalue, ffi_cif *cif) -/*@=exportheader@*/ -{ - unsigned int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - - argp = stack; - - if ( cif->rtype->type == FFI_TYPE_STRUCT ) { - *rvalue = *(void **) argp; - argp += 4; - } - - p_argv = avalue; - - for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) - { - size_t z; - size_t argalign = (*p_arg)->alignment; - -#ifdef _WIN32_WCE - if (argalign > 4) - argalign = 4; -#endif - /* Align if necessary */ - if ((argalign - 1) & (unsigned) argp) { - argp = (char *) ALIGN(argp, argalign); - } - - z = (*p_arg)->size; - if (z < sizeof(int)) - z = sizeof(int); - - *p_argv = (void*) argp; - - p_argv++; - argp += z; - } -} - -/* - add ip, pc, #-8 ; ip = address of this trampoline == address of ffi_closure - ldr pc, [pc, #-4] ; jump to __fun - DCD __fun -*/ -#define FFI_INIT_TRAMPOLINE(TRAMP,FUN) \ -{ \ - unsigned int *__tramp = (unsigned int *)(TRAMP); \ - __tramp[0] = 0xe24fc008; /* add ip, pc, #-8 */ \ - __tramp[1] = 0xe51ff004; /* ldr pc, [pc, #-4] */ \ - __tramp[2] = (unsigned int)(FUN); \ - } - -/* the cif must already be prep'ed */ - -/* defined in sysv.asm */ -void ffi_closure_SYSV(void); - -ffi_status -ffi_prep_closure (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data) -{ - FFI_ASSERT (cif->abi == FFI_SYSV); - - FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_SYSV); - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - -#ifdef _WIN32_WCE - /* This is important to allow calling the trampoline safely */ - FlushInstructionCache(GetCurrentProcess(), 0, 0); -#endif - - return FFI_OK; -} - diff --git a/Modules/_ctypes/libffi_arm_wince/ffi.h b/Modules/_ctypes/libffi_arm_wince/ffi.h deleted file mode 100644 index 67975b6b44..0000000000 --- a/Modules/_ctypes/libffi_arm_wince/ffi.h +++ /dev/null @@ -1,317 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - libffi 2.00-beta-wince - Copyright (c) 1996-2003 Red Hat, Inc. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------- - The basic API is described in the README file. - - The raw API is designed to bypass some of the argument packing - and unpacking on architectures for which it can be avoided. - - The closure API allows interpreted functions to be packaged up - inside a C function pointer, so that they can be called as C functions, - with no understanding on the client side that they are interpreted. - It can also be used in other cases in which it is necessary to package - up a user specified parameter and a function pointer as a single - function pointer. - - The closure API must be implemented in order to get its functionality, - e.g. for use by gij. Routines are provided to emulate the raw API - if the underlying platform doesn't allow faster implementation. - - More details on the raw and cloure API can be found in: - - http://gcc.gnu.org/ml/java/1999-q3/msg00138.html - - and - - http://gcc.gnu.org/ml/java/1999-q3/msg00174.html - -------------------------------------------------------------------- */ - -#ifndef LIBFFI_H -#define LIBFFI_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Specify which architecture libffi is configured for. */ -/*#define @TARGET@*/ - -/* ---- System configuration information --------------------------------- */ - -#include - -#ifndef LIBFFI_ASM - -#include -#include - -/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). - But we can find it either under the correct ANSI name, or under GNU - C's internal name. */ -#ifdef LONG_LONG_MAX -# define FFI_LONG_LONG_MAX LONG_LONG_MAX -#else -# ifdef LLONG_MAX -# define FFI_LONG_LONG_MAX LLONG_MAX -# else -# ifdef __GNUC__ -# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -# endif -# ifdef _MSC_VER -# define FFI_LONG_LONG_MAX _I64_MAX -# endif -# endif -#endif - -#if SCHAR_MAX == 127 -# define ffi_type_uchar ffi_type_uint8 -# define ffi_type_schar ffi_type_sint8 -#else - #error "char size not supported" -#endif - -#if SHRT_MAX == 32767 -# define ffi_type_ushort ffi_type_uint16 -# define ffi_type_sshort ffi_type_sint16 -#elif SHRT_MAX == 2147483647 -# define ffi_type_ushort ffi_type_uint32 -# define ffi_type_sshort ffi_type_sint32 -#else - #error "short size not supported" -#endif - -#if INT_MAX == 32767 -# define ffi_type_uint ffi_type_uint16 -# define ffi_type_sint ffi_type_sint16 -#elif INT_MAX == 2147483647 -# define ffi_type_uint ffi_type_uint32 -# define ffi_type_sint ffi_type_sint32 -#elif INT_MAX == 9223372036854775807 -# define ffi_type_uint ffi_type_uint64 -# define ffi_type_sint ffi_type_sint64 -#else - #error "int size not supported" -#endif - -#define ffi_type_ulong ffi_type_uint64 -#define ffi_type_slong ffi_type_sint64 -#if LONG_MAX == 2147483647 -# if FFI_LONG_LONG_MAX != 9223372036854775807 - #error "no 64-bit data type supported" -# endif -#elif LONG_MAX != 9223372036854775807 - #error "long size not supported" -#endif - -/* The closure code assumes that this works on pointers, i.e. a size_t */ -/* can hold a pointer. */ - -typedef struct _ffi_type -{ - size_t size; - unsigned short alignment; - unsigned short type; - /*@null@*/ struct _ffi_type **elements; -} ffi_type; - -/* These are defined in types.c */ -extern ffi_type ffi_type_void; -extern ffi_type ffi_type_uint8; -extern ffi_type ffi_type_sint8; -extern ffi_type ffi_type_uint16; -extern ffi_type ffi_type_sint16; -extern ffi_type ffi_type_uint32; -extern ffi_type ffi_type_sint32; -extern ffi_type ffi_type_uint64; -extern ffi_type ffi_type_sint64; -extern ffi_type ffi_type_float; -extern ffi_type ffi_type_double; -extern ffi_type ffi_type_longdouble; -extern ffi_type ffi_type_pointer; - - -typedef enum { - FFI_OK = 0, - FFI_BAD_TYPEDEF, - FFI_BAD_ABI -} ffi_status; - -typedef unsigned FFI_TYPE; - -typedef struct { - ffi_abi abi; - unsigned nargs; - /*@dependent@*/ ffi_type **arg_types; - /*@dependent@*/ ffi_type *rtype; - unsigned bytes; - unsigned flags; -#ifdef FFI_EXTRA_CIF_FIELDS - FFI_EXTRA_CIF_FIELDS; -#endif -} ffi_cif; - -/* ---- Definitions for the raw API -------------------------------------- */ - -#ifndef FFI_SIZEOF_ARG -# if LONG_MAX == 2147483647 -# define FFI_SIZEOF_ARG 4 -# elif LONG_MAX == 9223372036854775807 -# define FFI_SIZEOF_ARG 8 -# endif -#endif - -typedef union { - ffi_sarg sint; - ffi_arg uint; - float flt; - char data[FFI_SIZEOF_ARG]; - void* ptr; -} ffi_raw; - -void ffi_raw_call (/*@dependent@*/ ffi_cif *cif, - void (*fn)(), - /*@out@*/ void *rvalue, - /*@dependent@*/ ffi_raw *avalue); - -void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -size_t ffi_raw_size (ffi_cif *cif); - -/* This is analogous to the raw API, except it uses Java parameter */ -/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -/* longs and doubles are followed by an empty 64-bit word. */ - -void ffi_java_raw_call (/*@dependent@*/ ffi_cif *cif, - void (*fn)(), - /*@out@*/ void *rvalue, - /*@dependent@*/ ffi_raw *avalue); - -void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -size_t ffi_java_raw_size (ffi_cif *cif); - -/* ---- Definitions for closures ----------------------------------------- */ - -#if FFI_CLOSURES - -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - ffi_cif *cif; - void (*fun)(ffi_cif*,void*,void**,void*); - void *user_data; -} ffi_closure; - -ffi_status -ffi_prep_closure (ffi_closure*, - ffi_cif *, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data); - -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - - ffi_cif *cif; - -#if !FFI_NATIVE_RAW_API - - /* if this is enabled, then a raw closure has the same layout - as a regular closure. We use this to install an intermediate - handler to do the transaltion, void** -> ffi_raw*. */ - - void (*translate_args)(ffi_cif*,void*,void**,void*); - void *this_closure; - -#endif - - void (*fun)(ffi_cif*,void*,ffi_raw*,void*); - void *user_data; - -} ffi_raw_closure; - -ffi_status -ffi_prep_raw_closure (ffi_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data); - -ffi_status -ffi_prep_java_raw_closure (ffi_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data); - -#endif /* FFI_CLOSURES */ - -/* ---- Public interface definition -------------------------------------- */ - -ffi_status ffi_prep_cif(/*@out@*/ /*@partial@*/ ffi_cif *cif, - ffi_abi abi, - unsigned int nargs, - /*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type *rtype, - /*@dependent@*/ ffi_type **atypes); - -/* Return type changed from void for ctypes */ -int ffi_call(/*@dependent@*/ ffi_cif *cif, - void (*fn)(), - /*@out@*/ void *rvalue, - /*@dependent@*/ void **avalue); - -/* Useful for eliminating compiler warnings */ -#define FFI_FN(f) ((void (*)())f) - -/* ---- Definitions shared with assembly code ---------------------------- */ - -#endif - -/* If these change, update src/mips/ffitarget.h. */ -#define FFI_TYPE_VOID 0 -#define FFI_TYPE_INT 1 -#define FFI_TYPE_FLOAT 2 -#define FFI_TYPE_DOUBLE 3 -#if 0 /*@HAVE_LONG_DOUBLE@*/ -#define FFI_TYPE_LONGDOUBLE 4 -#else -#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -#endif -#define FFI_TYPE_UINT8 5 -#define FFI_TYPE_SINT8 6 -#define FFI_TYPE_UINT16 7 -#define FFI_TYPE_SINT16 8 -#define FFI_TYPE_UINT32 9 -#define FFI_TYPE_SINT32 10 -#define FFI_TYPE_UINT64 11 -#define FFI_TYPE_SINT64 12 -#define FFI_TYPE_STRUCT 13 -#define FFI_TYPE_POINTER 14 - -/* This should always refer to the last type code (for sanity checks) */ -#define FFI_TYPE_LAST FFI_TYPE_POINTER - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/Modules/_ctypes/libffi_arm_wince/ffi_common.h b/Modules/_ctypes/libffi_arm_wince/ffi_common.h deleted file mode 100644 index bf879d11da..0000000000 --- a/Modules/_ctypes/libffi_arm_wince/ffi_common.h +++ /dev/null @@ -1,111 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi_common.h - Copyright (c) 1996 Red Hat, Inc. - - Common internal definitions and macros. Only necessary for building - libffi. - ----------------------------------------------------------------------- */ - -#ifndef FFI_COMMON_H -#define FFI_COMMON_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/* Do not move this. Some versions of AIX are very picky about where - this is positioned. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# if HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -#endif - -/* Check for the existence of memcpy. */ -#if STDC_HEADERS -# include -#else -# ifndef HAVE_MEMCPY -# define memcpy(d, s, n) bcopy ((s), (d), (n)) -# endif -#endif - -#if defined(FFI_DEBUG) -#include -#endif - -#ifdef FFI_DEBUG -/*@exits@*/ void ffi_assert(/*@temp@*/ char *expr, /*@temp@*/ char *file, int line); -void ffi_stop_here(void); -void ffi_type_test(/*@temp@*/ /*@out@*/ ffi_type *a, /*@temp@*/ char *file, int line); - -#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) -#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) -#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) -#else -#define FFI_ASSERT(x) -#define FFI_ASSERT_AT(x, f, l) -#define FFI_ASSERT_VALID_TYPE(x) -#endif - -#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif); - -/* Extended cif, used in callback from assembly routine */ -typedef struct -{ - /*@dependent@*/ ffi_cif *cif; - /*@dependent@*/ void *rvalue; - /*@dependent@*/ void **avalue; -} extended_cif; - -/* Terse sized type definitions. */ -#if defined(__GNUC__) - -typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); -typedef signed int SINT8 __attribute__((__mode__(__QI__))); -typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); -typedef signed int SINT16 __attribute__((__mode__(__HI__))); -typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); -typedef signed int SINT32 __attribute__((__mode__(__SI__))); -typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); -typedef signed int SINT64 __attribute__((__mode__(__DI__))); - -#elif defined(_MSC_VER) - -typedef unsigned __int8 UINT8; -typedef signed __int8 SINT8; -typedef unsigned __int16 UINT16; -typedef signed __int16 SINT16; -typedef unsigned __int32 UINT32; -typedef signed __int32 SINT32; -typedef unsigned __int64 UINT64; -typedef signed __int64 SINT64; - -#else -#error "Need typedefs here" -#endif - -typedef float FLOAT32; - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/Modules/_ctypes/libffi_arm_wince/fficonfig.h b/Modules/_ctypes/libffi_arm_wince/fficonfig.h deleted file mode 100644 index 3c7964c934..0000000000 --- a/Modules/_ctypes/libffi_arm_wince/fficonfig.h +++ /dev/null @@ -1,152 +0,0 @@ -/* fficonfig.h created manually for Windows CE on ARM */ -/* fficonfig.h.in. Generated from configure.ac by autoheader. */ - -/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ -#define BYTEORDER 1234 - -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c' support on those systems. - */ -/* #undef CRAY_STACKSEG_END */ - -/* Define to 1 if using `alloca.c'. */ -/* #undef C_ALLOCA */ - -/* Define to the flags needed for the .section .eh_frame directive. */ -/* #undef EH_FRAME_FLAGS */ - -/* Define this if you want extra debugging. */ -#ifdef DEBUG /* Defined by the project settings for Debug builds */ -#define FFI_DEBUG -#else -#undef FFI_DEBUG -#endif - -/* Define this is you do not want support for the raw API. */ -/* #undef FFI_NO_RAW_API */ - -/* Define this is you do not want support for aggregate types. */ -/* #undef FFI_NO_STRUCTS */ - -/* Define to 1 if you have `alloca', as a function or macro. */ -#define HAVE_ALLOCA 1 - -/* Define to 1 if you have and it should be used (not on Ultrix). - */ -/* #undef HAVE_ALLOCA_H */ - -/* Define if your assembler supports .register. */ -/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ - -/* Define if your assembler and linker support unaligned PC relative relocs. - */ -/* #undef HAVE_AS_SPARC_UA_PCREL */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_INTTYPES_H */ - -/* Define if you have the long double type and it is bigger than a double */ -/* This differs from the MSVC build, but even there it should not be defined */ -/* #undef HAVE_LONG_DOUBLE */ - -/* Define to 1 if you have the `memcpy' function. */ -#define HAVE_MEMCPY 1 - -/* Define to 1 if you have the header file. */ -/* WinCE has this but I don't think we need to use it */ -/* #undef HAVE_MEMORY_H */ - -/* Define to 1 if you have the `mmap' function. */ -/* #undef HAVE_MMAP */ - -/* Define if mmap with MAP_ANON(YMOUS) works. */ -/* #undef HAVE_MMAP_ANON */ - -/* Define if mmap of /dev/zero works. */ -/* #undef HAVE_MMAP_DEV_ZERO */ - -/* Define if read-only mmap of a plain file works. */ -/* #undef HAVE_MMAP_FILE */ - -/* Define if .eh_frame sections should be read-only. */ -/* #undef HAVE_RO_EH_FRAME */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STDINT_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STRINGS_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_MMAN_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_STAT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_TYPES_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_UNISTD_H */ - -/* Define if the host machine stores words of multi-word integers in - big-endian order. */ -/* #undef HOST_WORDS_BIG_ENDIAN */ - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -/* #undef NO_MINUS_C_MINUS_O */ - -/* Name of package */ -/* #undef PACKAGE */ - -/* Define to the address where bug reports for this package should be sent. */ -/* #undef PACKAGE_BUGREPORT */ - -/* Define to the full name of this package. */ -/* #undef PACKAGE_NAME */ - -/* Define to the full name and version of this package. */ -/* #undef PACKAGE_STRING */ - -/* Define to the one symbol short name of this package. */ -/* #undef PACKAGE_TARNAME */ - -/* Define to the version of this package. */ -/* #undef PACKAGE_VERSION */ - -/* The number of bytes in type double */ -#define SIZEOF_DOUBLE 8 - -/* The number of bytes in type long double */ -#define SIZEOF_LONG_DOUBLE 8 - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -/* #undef STACK_DIRECTION */ - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define this if you are using Purify and want to suppress spurious messages. - */ -/* #undef USING_PURIFY */ - -/* Version number of package */ -/* #undef VERSION */ - -/* whether byteorder is bigendian */ -/* #undef WORDS_BIGENDIAN */ - -#define alloca _alloca - -#define abort() exit(999) diff --git a/Modules/_ctypes/libffi_arm_wince/ffitarget.h b/Modules/_ctypes/libffi_arm_wince/ffitarget.h deleted file mode 100644 index 2627b25777..0000000000 --- a/Modules/_ctypes/libffi_arm_wince/ffitarget.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for ARM. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_DEFAULT_ABI = FFI_SYSV, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 12 - -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/Modules/_ctypes/libffi_arm_wince/prep_cif.c b/Modules/_ctypes/libffi_arm_wince/prep_cif.c deleted file mode 100644 index 9edce2f65b..0000000000 --- a/Modules/_ctypes/libffi_arm_wince/prep_cif.c +++ /dev/null @@ -1,175 +0,0 @@ -/* ----------------------------------------------------------------------- - prep_cif.c - Copyright (c) 1996, 1998 Red Hat, Inc. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include -#include - - -/* Round up to FFI_SIZEOF_ARG. */ - -#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) - -/* Perform machine independent initialization of aggregate type - specifications. */ - -static ffi_status initialize_aggregate(/*@out@*/ ffi_type *arg) -{ - ffi_type **ptr; - - FFI_ASSERT(arg != NULL); - - /*@-usedef@*/ - - FFI_ASSERT(arg->elements != NULL); - FFI_ASSERT(arg->size == 0); - FFI_ASSERT(arg->alignment == 0); - - ptr = &(arg->elements[0]); - - while ((*ptr) != NULL) - { - if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) - return FFI_BAD_TYPEDEF; - - /* Perform a sanity check on the argument type */ - FFI_ASSERT_VALID_TYPE(*ptr); - - arg->size = ALIGN(arg->size, (*ptr)->alignment); - arg->size += (*ptr)->size; - - arg->alignment = (arg->alignment > (*ptr)->alignment) ? - arg->alignment : (*ptr)->alignment; - - ptr++; - } - - /* Structure size includes tail padding. This is important for - structures that fit in one register on ABIs like the PowerPC64 - Linux ABI that right justify small structs in a register. - It's also needed for nested structure layout, for example - struct A { long a; char b; }; struct B { struct A x; char y; }; - should find y at an offset of 2*sizeof(long) and result in a - total size of 3*sizeof(long). */ - arg->size = ALIGN (arg->size, arg->alignment); - - if (arg->size == 0) - return FFI_BAD_TYPEDEF; - else - return FFI_OK; - - /*@=usedef@*/ -} - -/* Perform machine independent ffi_cif preparation, then call - machine dependent routine. */ - -ffi_status ffi_prep_cif(/*@out@*/ /*@partial@*/ ffi_cif *cif, - ffi_abi abi, unsigned int nargs, - /*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type *rtype, - /*@dependent@*/ ffi_type **atypes) -{ - unsigned bytes = 0; - unsigned int i; - ffi_type **ptr; - - FFI_ASSERT(cif != NULL); - FFI_ASSERT((abi > FFI_FIRST_ABI) && (abi <= FFI_DEFAULT_ABI)); - - cif->abi = abi; - cif->arg_types = atypes; - cif->nargs = nargs; - cif->rtype = rtype; - - cif->flags = 0; - - /* Initialize the return type if necessary */ - /*@-usedef@*/ - if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) - return FFI_BAD_TYPEDEF; - /*@=usedef@*/ - - /* Perform a sanity check on the return type */ - FFI_ASSERT_VALID_TYPE(cif->rtype); - - /* x86-64 and s390 stack space allocation is handled in prep_machdep. */ -#if !defined M68K && !defined __x86_64__ && !defined S390 - /* Make space for the return structure pointer */ - if (cif->rtype->type == FFI_TYPE_STRUCT - /* MSVC returns small structures in registers. But we have a different - workaround: pretend int32 or int64 return type, and converting to - structure afterwards. */ -#ifdef SPARC - && (cif->abi != FFI_V9 || cif->rtype->size > 32) -#endif - ) - bytes = STACK_ARG_SIZE(sizeof(void*)); -#endif - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - - /* Initialize any uninitialized aggregate type definitions */ - if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) - return FFI_BAD_TYPEDEF; - - /* Perform a sanity check on the argument type, do this - check after the initialization. */ - FFI_ASSERT_VALID_TYPE(*ptr); - -#if !defined __x86_64__ && !defined S390 -#ifdef SPARC - if (((*ptr)->type == FFI_TYPE_STRUCT - && ((*ptr)->size > 16 || cif->abi != FFI_V9)) - || ((*ptr)->type == FFI_TYPE_LONGDOUBLE - && cif->abi != FFI_V9)) - bytes += sizeof(void*); - else -#endif - { -#ifndef _MSC_VER - /* Don't know if this is a libffi bug or not. At least on - Windows with MSVC, function call parameters are *not* - aligned in the same way as structure fields are, they are - only aligned in integer boundaries. - - This doesn't do any harm for cdecl functions and closures, - since the caller cleans up the stack, but it is wrong for - stdcall functions where the callee cleans. - */ - - /* Add any padding if necessary */ - if (((*ptr)->alignment - 1) & bytes) - bytes = ALIGN(bytes, (*ptr)->alignment); - -#endif - bytes += STACK_ARG_SIZE((*ptr)->size); - } -#endif - } - - cif->bytes = bytes; - - /* Perform machine dependent cif processing */ - return ffi_prep_cif_machdep(cif); -} diff --git a/Modules/_ctypes/libffi_arm_wince/sysv.asm b/Modules/_ctypes/libffi_arm_wince/sysv.asm deleted file mode 100644 index db78b9085e..0000000000 --- a/Modules/_ctypes/libffi_arm_wince/sysv.asm +++ /dev/null @@ -1,228 +0,0 @@ -; ----------------------------------------------------------------------- -; sysv.S - Copyright (c) 1998 Red Hat, Inc. -; -; ARM Foreign Function Interface -; -; Permission is hereby granted, free of charge, to any person obtaining -; a copy of this software and associated documentation files (the -; ``Software''), to deal in the Software without restriction, including -; without limitation the rights to use, copy, modify, merge, publish, -; distribute, sublicense, and/or sell copies of the Software, and to -; permit persons to whom the Software is furnished to do so, subject to -; the following conditions: -; -; The above copyright notice and this permission notice shall be included -; in all copies or substantial portions of the Software. -; -; THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS -; OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -; IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR -; OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -; ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -; OTHER DEALINGS IN THE SOFTWARE. -; ----------------------------------------------------------------------- */ - -;#define LIBFFI_ASM -;#include -;#include -;#ifdef HAVE_MACHINE_ASM_H -;#include -;#else -;#ifdef __USER_LABEL_PREFIX__ -;#define CONCAT1(a, b) CONCAT2(a, b) -;#define CONCAT2(a, b) a ## b - -;/* Use the right prefix for global labels. */ -;#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) -;#else -;#define CNAME(x) x -;#endif -;#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): -;#endif - - -FFI_TYPE_VOID EQU 0 -FFI_TYPE_INT EQU 1 -FFI_TYPE_FLOAT EQU 2 -FFI_TYPE_DOUBLE EQU 3 -;FFI_TYPE_LONGDOUBLE EQU 4 -FFI_TYPE_UINT8 EQU 5 -FFI_TYPE_SINT8 EQU 6 -FFI_TYPE_UINT16 EQU 7 -FFI_TYPE_SINT16 EQU 8 -FFI_TYPE_UINT32 EQU 9 -FFI_TYPE_SINT32 EQU 10 -FFI_TYPE_UINT64 EQU 11 -FFI_TYPE_SINT64 EQU 12 -FFI_TYPE_STRUCT EQU 13 -FFI_TYPE_POINTER EQU 14 - -; WinCE always uses software floating point (I think) -__SOFTFP__ EQU {TRUE} - - - AREA |.text|, CODE, ARM ; .text - - - ; a1: ffi_prep_args - ; a2: &ecif - ; a3: cif->bytes - ; a4: fig->flags - ; sp+0: ecif.rvalue - ; sp+4: fn - - ; This assumes we are using gas. -;ENTRY(ffi_call_SYSV) - - EXPORT |ffi_call_SYSV| - -|ffi_call_SYSV| PROC - - ; Save registers - stmfd sp!, {a1-a4, fp, lr} - mov fp, sp - - ; Make room for all of the new args. - sub sp, fp, a3 - - ; Place all of the ffi_prep_args in position - mov ip, a1 - mov a1, sp - ; a2 already set - - ; And call - mov lr, pc - mov pc, ip - - ; move first 4 parameters in registers - ldr a1, [sp, #0] - ldr a2, [sp, #4] - ldr a3, [sp, #8] - ldr a4, [sp, #12] - - ; and adjust stack - ldr ip, [fp, #8] - cmp ip, #16 - movge ip, #16 - add sp, sp, ip - - ; call function - mov lr, pc - ldr pc, [fp, #28] - - ; Remove the space we pushed for the args - mov sp, fp - - ; Load a3 with the pointer to storage for the return value - ldr a3, [sp, #24] - - ; Load a4 with the return type code - ldr a4, [sp, #12] - - ; If the return value pointer is NULL, assume no return value. - cmp a3, #0 - beq call_epilogue - -; return INT - cmp a4, #FFI_TYPE_INT - streq a1, [a3] - beq call_epilogue - -; return FLOAT - cmp a4, #FFI_TYPE_FLOAT - [ __SOFTFP__ ;ifdef __SOFTFP__ - streq a1, [a3] - | ;else - stfeqs f0, [a3] - ] ;endif - beq call_epilogue - -; return DOUBLE or LONGDOUBLE - cmp a4, #FFI_TYPE_DOUBLE - [ __SOFTFP__ ;ifdef __SOFTFP__ - stmeqia a3, {a1, a2} - | ;else - stfeqd f0, [a3] - ] ;endif - beq call_epilogue - -; return SINT64 or UINT64 - cmp a4, #FFI_TYPE_SINT64 - stmeqia a3, {a1, a2} - -call_epilogue - ldmfd sp!, {a1-a4, fp, pc} - -;.ffi_call_SYSV_end: - ;.size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) - ENDP - - -RESERVE_RETURN EQU 16 - - ; This function is called by the trampoline - ; It is NOT callable from C - ; ip = pointer to struct ffi_closure - - IMPORT |ffi_closure_SYSV_inner| - - EXPORT |ffi_closure_SYSV| -|ffi_closure_SYSV| PROC - - ; Store the argument registers on the stack - stmfd sp!, {a1-a4} - ; Push the return address onto the stack - stmfd sp!, {lr} - - mov a1, ip ; first arg = address of ffi_closure - add a2, sp, #4 ; second arg = sp+4 (points to saved a1) - - ; Allocate space for a non-struct return value - sub sp, sp, #RESERVE_RETURN - mov a3, sp ; third arg = return value address - - ; static unsigned int - ; ffi_closure_SYSV_inner (ffi_closure *closure, char *in_args, void *rvalue) - bl ffi_closure_SYSV_inner - ; a1 now contains the return type code - - ; At this point the return value is on the stack - ; Transfer it to the correct registers if necessary - -; return INT - cmp a1, #FFI_TYPE_INT - ldreq a1, [sp] - beq closure_epilogue - -; return FLOAT - cmp a1, #FFI_TYPE_FLOAT - [ __SOFTFP__ ;ifdef __SOFTFP__ - ldreq a1, [sp] - | ;else - stfeqs f0, [sp] - ] ;endif - beq closure_epilogue - -; return DOUBLE or LONGDOUBLE - cmp a1, #FFI_TYPE_DOUBLE - [ __SOFTFP__ ;ifdef __SOFTFP__ - ldmeqia sp, {a1, a2} - | ;else - stfeqd f0, [sp] - ] ;endif - beq closure_epilogue - -; return SINT64 or UINT64 - cmp a1, #FFI_TYPE_SINT64 - ldmeqia sp, {a1, a2} - -closure_epilogue - add sp, sp, #RESERVE_RETURN ; remove return value buffer - ldmfd sp!, {ip} ; ip = pop return address - add sp, sp, #16 ; remove saved argument registers {a1-a4} from the stack - mov pc, ip ; return - - ENDP ; ffi_closure_SYSV - - END -- cgit v1.2.1 From 907ccded8b6fa68f6f572ae5de6760595df0d5a1 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 5 Sep 2016 17:44:18 -0700 Subject: require a long long data type (closes #27961) --- Modules/_ctypes/_ctypes_test.c | 3 --- Modules/_ctypes/callproc.c | 4 --- Modules/_ctypes/cfield.c | 14 +--------- Modules/_ctypes/ctypes.h | 4 --- Modules/_io/_iomodule.h | 2 +- Modules/_lsprof.c | 4 --- Modules/_multiprocessing/multiprocessing.h | 2 +- Modules/_sqlite/util.c | 19 ------------- Modules/_struct.c | 43 ------------------------------ Modules/_testcapimodule.c | 28 ++----------------- Modules/_tkinter.c | 2 -- Modules/addrinfo.h | 8 ------ Modules/arraymodule.c | 11 -------- Modules/posixmodule.c | 10 +------ Modules/resource.c | 4 --- 15 files changed, 6 insertions(+), 152 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes_test.c b/Modules/_ctypes/_ctypes_test.c index 3c7f89249a..92c3b9e810 100644 --- a/Modules/_ctypes/_ctypes_test.c +++ b/Modules/_ctypes/_ctypes_test.c @@ -233,7 +233,6 @@ EXPORT(int) _testfunc_callback_with_pointer(int (*func)(int *)) return (*func)(table); } -#ifdef HAVE_LONG_LONG EXPORT(PY_LONG_LONG) _testfunc_q_bhilfdq(signed char b, short h, int i, long l, float f, double d, PY_LONG_LONG q) { @@ -267,8 +266,6 @@ EXPORT(PY_LONG_LONG) _testfunc_callback_q_qf(PY_LONG_LONG value, return sum; } -#endif - typedef struct { char *name; char *value; diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index a276fcdfdf..5fc96f7633 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -474,7 +474,6 @@ PyCArg_repr(PyCArgObject *self) self->tag, self->value.l); break; -#ifdef HAVE_LONG_LONG case 'q': case 'Q': sprintf(buffer, @@ -485,7 +484,6 @@ PyCArg_repr(PyCArgObject *self) #endif self->tag, self->value.q); break; -#endif case 'd': sprintf(buffer, "", self->tag, self->value.d); @@ -593,9 +591,7 @@ union result { short h; int i; long l; -#ifdef HAVE_LONG_LONG PY_LONG_LONG q; -#endif long double D; double d; float f; diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index d666be5d92..06835cc78f 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -379,8 +379,6 @@ get_ulong(PyObject *v, unsigned long *p) return 0; } -#ifdef HAVE_LONG_LONG - /* Same, but handling native long long. */ static int @@ -417,8 +415,6 @@ get_ulonglong(PyObject *v, unsigned PY_LONG_LONG *p) return 0; } -#endif - /***************************************************************** * Integer fields, with bitfield support */ @@ -888,7 +884,6 @@ L_get_sw(void *ptr, Py_ssize_t size) return PyLong_FromUnsignedLong(val); } -#ifdef HAVE_LONG_LONG static PyObject * q_set(void *ptr, PyObject *value, Py_ssize_t size) { @@ -982,7 +977,6 @@ Q_get_sw(void *ptr, Py_ssize_t size) GET_BITFIELD(val, size); return PyLong_FromUnsignedLongLong(val); } -#endif /***************************************************************** * non-integer accessor methods, not supporting bit fields @@ -1490,9 +1484,7 @@ P_set(void *ptr, PyObject *value, Py_ssize_t size) #if SIZEOF_VOID_P <= SIZEOF_LONG v = (void *)PyLong_AsUnsignedLongMask(value); #else -#ifndef HAVE_LONG_LONG -# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long" -#elif SIZEOF_LONG_LONG < SIZEOF_VOID_P +#if SIZEOF_LONG_LONG < SIZEOF_VOID_P # error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)" #endif v = (void *)PyLong_AsUnsignedLongLongMask(value); @@ -1538,13 +1530,11 @@ static struct fielddesc formattable[] = { #else # error #endif -#ifdef HAVE_LONG_LONG #if SIZEOF_LONG_LONG == 8 { 'q', q_set, q_get, &ffi_type_sint64, q_set_sw, q_get_sw}, { 'Q', Q_set, Q_get, &ffi_type_uint64, Q_set_sw, Q_get_sw}, #else # error -#endif #endif { 'P', P_set, P_get, &ffi_type_pointer}, { 'z', z_set, z_get, &ffi_type_pointer}, @@ -1635,10 +1625,8 @@ typedef struct { char c; wchar_t *x; } s_wchar_p; #endif */ -#ifdef HAVE_LONG_LONG typedef struct { char c; PY_LONG_LONG x; } s_long_long; #define LONG_LONG_ALIGN (sizeof(s_long_long) - sizeof(PY_LONG_LONG)) -#endif /* from ffi.h: typedef struct _ffi_type diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index b4a9b78e2f..64cb69fa2b 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -31,9 +31,7 @@ union value { long l; float f; double d; -#ifdef HAVE_LONG_LONG PY_LONG_LONG ll; -#endif long double D; }; @@ -303,9 +301,7 @@ struct tagPyCArgObject { short h; int i; long l; -#ifdef HAVE_LONG_LONG PY_LONG_LONG q; -#endif long double D; double d; float f; diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h index 3c48ff3aac..007e0c4b32 100644 --- a/Modules/_io/_iomodule.h +++ b/Modules/_io/_iomodule.h @@ -104,7 +104,7 @@ typedef off_t Py_off_t; # define PY_OFF_T_MIN PY_SSIZE_T_MIN # define PY_OFF_T_COMPAT Py_ssize_t # define PY_PRIdOFF "zd" -#elif (HAVE_LONG_LONG && SIZEOF_OFF_T == SIZEOF_LONG_LONG) +#elif (SIZEOF_OFF_T == SIZEOF_LONG_LONG) # define PyLong_AsOff_t PyLong_AsLongLong # define PyLong_FromOff_t PyLong_FromLongLong # define PY_OFF_T_MAX PY_LLONG_MAX diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c index ccfb513038..788d9064e9 100644 --- a/Modules/_lsprof.c +++ b/Modules/_lsprof.c @@ -2,10 +2,6 @@ #include "frameobject.h" #include "rotatingtree.h" -#if !defined(HAVE_LONG_LONG) -#error "This module requires long longs!" -#endif - /*** Selection of a high-precision timer ***/ #ifdef MS_WINDOWS diff --git a/Modules/_multiprocessing/multiprocessing.h b/Modules/_multiprocessing/multiprocessing.h index 9aeea8d618..512bc17f23 100644 --- a/Modules/_multiprocessing/multiprocessing.h +++ b/Modules/_multiprocessing/multiprocessing.h @@ -60,7 +60,7 @@ #if SIZEOF_VOID_P == SIZEOF_LONG # define F_POINTER "k" # define T_POINTER T_ULONG -#elif defined(HAVE_LONG_LONG) && (SIZEOF_VOID_P == SIZEOF_LONG_LONG) +#elif SIZEOF_VOID_P == SIZEOF_LONG_LONG # define F_POINTER "K" # define T_POINTER T_ULONGLONG #else diff --git a/Modules/_sqlite/util.c b/Modules/_sqlite/util.c index 312fe3be11..a276dadc65 100644 --- a/Modules/_sqlite/util.c +++ b/Modules/_sqlite/util.c @@ -113,7 +113,6 @@ int _pysqlite_seterror(sqlite3* db, sqlite3_stmt* st) PyObject * _pysqlite_long_from_int64(sqlite_int64 value) { -#ifdef HAVE_LONG_LONG # if SIZEOF_LONG_LONG < 8 if (value > PY_LLONG_MAX || value < PY_LLONG_MIN) { return _PyLong_FromByteArray(&value, sizeof(value), @@ -124,14 +123,6 @@ _pysqlite_long_from_int64(sqlite_int64 value) if (value > LONG_MAX || value < LONG_MIN) return PyLong_FromLongLong(value); # endif -#else -# if SIZEOF_LONG < 8 - if (value > LONG_MAX || value < LONG_MIN) { - return _PyLong_FromByteArray(&value, sizeof(value), - IS_LITTLE_ENDIAN, 1 /* signed */); - } -# endif -#endif return PyLong_FromLong(Py_SAFE_DOWNCAST(value, sqlite_int64, long)); } @@ -139,23 +130,13 @@ sqlite_int64 _pysqlite_long_as_int64(PyObject * py_val) { int overflow; -#ifdef HAVE_LONG_LONG PY_LONG_LONG value = PyLong_AsLongLongAndOverflow(py_val, &overflow); -#else - long value = PyLong_AsLongAndOverflow(py_val, &overflow); -#endif if (value == -1 && PyErr_Occurred()) return -1; if (!overflow) { -#ifdef HAVE_LONG_LONG # if SIZEOF_LONG_LONG > 8 if (-0x8000000000000000LL <= value && value <= 0x7FFFFFFFFFFFFFFFLL) # endif -#else -# if SIZEOF_LONG > 8 - if (-0x8000000000000000L <= value && value <= 0x7FFFFFFFFFFFFFFFL) -# endif -#endif return value; } else if (sizeof(value) < sizeof(sqlite_int64)) { diff --git a/Modules/_struct.c b/Modules/_struct.c index 2bcd492a29..ba60ba6133 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -71,10 +71,8 @@ typedef struct { char c; size_t x; } st_size_t; /* We can't support q and Q in native mode unless the compiler does; in std mode, they're 8 bytes on all platforms. */ -#ifdef HAVE_LONG_LONG typedef struct { char c; PY_LONG_LONG x; } s_long_long; #define LONG_LONG_ALIGN (sizeof(s_long_long) - sizeof(PY_LONG_LONG)) -#endif #ifdef HAVE_C99_BOOL #define BOOL_TYPE _Bool @@ -164,8 +162,6 @@ get_ulong(PyObject *v, unsigned long *p) return 0; } -#ifdef HAVE_LONG_LONG - /* Same, but handling native long long. */ static int @@ -212,8 +208,6 @@ get_ulonglong(PyObject *v, unsigned PY_LONG_LONG *p) return 0; } -#endif - /* Same, but handling Py_ssize_t */ static int @@ -463,8 +457,6 @@ nu_size_t(const char *p, const formatdef *f) /* Native mode doesn't support q or Q unless the platform C supports long long (or, on Windows, __int64). */ -#ifdef HAVE_LONG_LONG - static PyObject * nu_longlong(const char *p, const formatdef *f) { @@ -485,8 +477,6 @@ nu_ulonglong(const char *p, const formatdef *f) return PyLong_FromUnsignedLongLong(x); } -#endif - static PyObject * nu_bool(const char *p, const formatdef *f) { @@ -680,8 +670,6 @@ np_size_t(char *p, PyObject *v, const formatdef *f) return 0; } -#ifdef HAVE_LONG_LONG - static int np_longlong(char *p, PyObject *v, const formatdef *f) { @@ -701,7 +689,6 @@ np_ulonglong(char *p, PyObject *v, const formatdef *f) memcpy(p, (char *)&x, sizeof x); return 0; } -#endif static int @@ -785,10 +772,8 @@ static const formatdef native_table[] = { {'L', sizeof(long), LONG_ALIGN, nu_ulong, np_ulong}, {'n', sizeof(size_t), SIZE_T_ALIGN, nu_ssize_t, np_ssize_t}, {'N', sizeof(size_t), SIZE_T_ALIGN, nu_size_t, np_size_t}, -#ifdef HAVE_LONG_LONG {'q', sizeof(PY_LONG_LONG), LONG_LONG_ALIGN, nu_longlong, np_longlong}, {'Q', sizeof(PY_LONG_LONG), LONG_LONG_ALIGN, nu_ulonglong,np_ulonglong}, -#endif {'?', sizeof(BOOL_TYPE), BOOL_ALIGN, nu_bool, np_bool}, {'e', sizeof(short), SHORT_ALIGN, nu_halffloat, np_halffloat}, {'f', sizeof(float), FLOAT_ALIGN, nu_float, np_float}, @@ -831,7 +816,6 @@ bu_uint(const char *p, const formatdef *f) static PyObject * bu_longlong(const char *p, const formatdef *f) { -#ifdef HAVE_LONG_LONG PY_LONG_LONG x = 0; Py_ssize_t i = f->size; const unsigned char *bytes = (const unsigned char *)p; @@ -844,18 +828,11 @@ bu_longlong(const char *p, const formatdef *f) if (x >= LONG_MIN && x <= LONG_MAX) return PyLong_FromLong(Py_SAFE_DOWNCAST(x, PY_LONG_LONG, long)); return PyLong_FromLongLong(x); -#else - return _PyLong_FromByteArray((const unsigned char *)p, - 8, - 0, /* little-endian */ - 1 /* signed */); -#endif } static PyObject * bu_ulonglong(const char *p, const formatdef *f) { -#ifdef HAVE_LONG_LONG unsigned PY_LONG_LONG x = 0; Py_ssize_t i = f->size; const unsigned char *bytes = (const unsigned char *)p; @@ -865,12 +842,6 @@ bu_ulonglong(const char *p, const formatdef *f) if (x <= LONG_MAX) return PyLong_FromLong(Py_SAFE_DOWNCAST(x, unsigned PY_LONG_LONG, long)); return PyLong_FromUnsignedLongLong(x); -#else - return _PyLong_FromByteArray((const unsigned char *)p, - 8, - 0, /* little-endian */ - 0 /* signed */); -#endif } static PyObject * @@ -1072,7 +1043,6 @@ lu_uint(const char *p, const formatdef *f) static PyObject * lu_longlong(const char *p, const formatdef *f) { -#ifdef HAVE_LONG_LONG PY_LONG_LONG x = 0; Py_ssize_t i = f->size; const unsigned char *bytes = (const unsigned char *)p; @@ -1085,18 +1055,11 @@ lu_longlong(const char *p, const formatdef *f) if (x >= LONG_MIN && x <= LONG_MAX) return PyLong_FromLong(Py_SAFE_DOWNCAST(x, PY_LONG_LONG, long)); return PyLong_FromLongLong(x); -#else - return _PyLong_FromByteArray((const unsigned char *)p, - 8, - 1, /* little-endian */ - 1 /* signed */); -#endif } static PyObject * lu_ulonglong(const char *p, const formatdef *f) { -#ifdef HAVE_LONG_LONG unsigned PY_LONG_LONG x = 0; Py_ssize_t i = f->size; const unsigned char *bytes = (const unsigned char *)p; @@ -1106,12 +1069,6 @@ lu_ulonglong(const char *p, const formatdef *f) if (x <= LONG_MAX) return PyLong_FromLong(Py_SAFE_DOWNCAST(x, unsigned PY_LONG_LONG, long)); return PyLong_FromUnsignedLongLong(x); -#else - return _PyLong_FromByteArray((const unsigned char *)p, - 8, - 1, /* little-endian */ - 0 /* signed */); -#endif } static PyObject * diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 6fabc40964..7b6c2c1579 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -60,9 +60,7 @@ test_config(PyObject *self) CHECK_SIZEOF(SIZEOF_LONG, long); CHECK_SIZEOF(SIZEOF_VOID_P, void*); CHECK_SIZEOF(SIZEOF_TIME_T, time_t); -#ifdef HAVE_LONG_LONG CHECK_SIZEOF(SIZEOF_LONG_LONG, PY_LONG_LONG); -#endif #undef CHECK_SIZEOF @@ -357,7 +355,7 @@ test_lazy_hash_inheritance(PyObject* self) } -/* Tests of PyLong_{As, From}{Unsigned,}Long(), and (#ifdef HAVE_LONG_LONG) +/* Tests of PyLong_{As, From}{Unsigned,}Long(), and PyLong_{As, From}{Unsigned,}LongLong(). Note that the meat of the test is contained in testcapi_long.h. @@ -402,8 +400,6 @@ test_long_api(PyObject* self) #undef F_U_TO_PY #undef F_PY_TO_U -#ifdef HAVE_LONG_LONG - static PyObject * raise_test_longlong_error(const char* msg) { @@ -870,8 +866,6 @@ test_L_code(PyObject *self) return Py_None; } -#endif /* ifdef HAVE_LONG_LONG */ - static PyObject * return_none(void *unused) { @@ -1136,7 +1130,6 @@ getargs_p(PyObject *self, PyObject *args) return PyLong_FromLong(value); } -#ifdef HAVE_LONG_LONG static PyObject * getargs_L(PyObject *self, PyObject *args) { @@ -1154,7 +1147,6 @@ getargs_K(PyObject *self, PyObject *args) return NULL; return PyLong_FromUnsignedLongLong(value); } -#endif /* This function not only tests the 'k' getargs code, but also the PyLong_AsUnsignedLongMask() and PyLong_AsUnsignedLongMask() functions. */ @@ -2279,10 +2271,8 @@ test_string_from_format(PyObject *self, PyObject *args) CHECK_1_FORMAT("%zu", size_t); /* "%lld" and "%llu" support added in Python 2.7. */ -#ifdef HAVE_LONG_LONG CHECK_1_FORMAT("%llu", unsigned PY_LONG_LONG); CHECK_1_FORMAT("%lld", PY_LONG_LONG); -#endif Py_RETURN_NONE; @@ -3991,14 +3981,12 @@ static PyMethodDef TestMethods[] = { {"getargs_l", getargs_l, METH_VARARGS}, {"getargs_n", getargs_n, METH_VARARGS}, {"getargs_p", getargs_p, METH_VARARGS}, -#ifdef HAVE_LONG_LONG {"getargs_L", getargs_L, METH_VARARGS}, {"getargs_K", getargs_K, METH_VARARGS}, {"test_longlong_api", test_longlong_api, METH_NOARGS}, {"test_long_long_and_overflow", (PyCFunction)test_long_long_and_overflow, METH_NOARGS}, {"test_L_code", (PyCFunction)test_L_code, METH_NOARGS}, -#endif {"getargs_f", getargs_f, METH_VARARGS}, {"getargs_d", getargs_d, METH_VARARGS}, {"getargs_D", getargs_D, METH_VARARGS}, @@ -4153,10 +4141,8 @@ typedef struct { float float_member; double double_member; char inplace_member[6]; -#ifdef HAVE_LONG_LONG PY_LONG_LONG longlong_member; unsigned PY_LONG_LONG ulonglong_member; -#endif } all_structmembers; typedef struct { @@ -4178,10 +4164,8 @@ static struct PyMemberDef test_members[] = { {"T_FLOAT", T_FLOAT, offsetof(test_structmembers, structmembers.float_member), 0, NULL}, {"T_DOUBLE", T_DOUBLE, offsetof(test_structmembers, structmembers.double_member), 0, NULL}, {"T_STRING_INPLACE", T_STRING_INPLACE, offsetof(test_structmembers, structmembers.inplace_member), 0, NULL}, -#ifdef HAVE_LONG_LONG {"T_LONGLONG", T_LONGLONG, offsetof(test_structmembers, structmembers.longlong_member), 0, NULL}, {"T_ULONGLONG", T_ULONGLONG, offsetof(test_structmembers, structmembers.ulonglong_member), 0, NULL}, -#endif {NULL} }; @@ -4193,15 +4177,9 @@ test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) "T_BOOL", "T_BYTE", "T_UBYTE", "T_SHORT", "T_USHORT", "T_INT", "T_UINT", "T_LONG", "T_ULONG", "T_PYSSIZET", "T_FLOAT", "T_DOUBLE", "T_STRING_INPLACE", -#ifdef HAVE_LONG_LONG "T_LONGLONG", "T_ULONGLONG", -#endif NULL}; - static const char fmt[] = "|bbBhHiIlknfds#" -#ifdef HAVE_LONG_LONG - "LK" -#endif - ; + static const char fmt[] = "|bbBhHiIlknfds#LK"; test_structmembers *ob; const char *s = NULL; Py_ssize_t string_len = 0; @@ -4223,10 +4201,8 @@ test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) &ob->structmembers.float_member, &ob->structmembers.double_member, &s, &string_len -#ifdef HAVE_LONG_LONG , &ob->structmembers.longlong_member, &ob->structmembers.ulonglong_member -#endif )) { Py_DECREF(ob); return NULL; diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 42771e3b02..8afc4d59f0 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -1182,10 +1182,8 @@ fromWideIntObj(PyObject* tkapp, Tcl_Obj *value) { Tcl_WideInt wideValue; if (Tcl_GetWideIntFromObj(Tkapp_Interp(tkapp), value, &wideValue) == TCL_OK) { -#ifdef HAVE_LONG_LONG if (sizeof(wideValue) <= SIZEOF_LONG_LONG) return PyLong_FromLongLong(wideValue); -#endif return _PyLong_FromByteArray((unsigned char *)(void *)&wideValue, sizeof(wideValue), PY_LITTLE_ENDIAN, diff --git a/Modules/addrinfo.h b/Modules/addrinfo.h index 1cb6f0e9d4..20f7650641 100644 --- a/Modules/addrinfo.h +++ b/Modules/addrinfo.h @@ -141,11 +141,7 @@ struct addrinfo { * RFC 2553: protocol-independent placeholder for socket addresses */ #define _SS_MAXSIZE 128 -#ifdef HAVE_LONG_LONG #define _SS_ALIGNSIZE (sizeof(PY_LONG_LONG)) -#else -#define _SS_ALIGNSIZE (sizeof(double)) -#endif /* HAVE_LONG_LONG */ #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(u_char) * 2) #define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(u_char) * 2 - \ _SS_PAD1SIZE - _SS_ALIGNSIZE) @@ -158,11 +154,7 @@ struct sockaddr_storage { unsigned short ss_family; /* address family */ #endif /* HAVE_SOCKADDR_SA_LEN */ char __ss_pad1[_SS_PAD1SIZE]; -#ifdef HAVE_LONG_LONG PY_LONG_LONG __ss_align; /* force desired structure storage alignment */ -#else - double __ss_align; /* force desired structure storage alignment */ -#endif /* HAVE_LONG_LONG */ char __ss_pad2[_SS_PAD2SIZE]; }; #endif /* !HAVE_SOCKADDR_STORAGE */ diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 4d9a23fb99..8637cb52b1 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -418,8 +418,6 @@ LL_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) return 0; } -#ifdef HAVE_LONG_LONG - static PyObject * q_getitem(arrayobject *ap, Py_ssize_t i) { @@ -469,7 +467,6 @@ QQ_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) ((unsigned PY_LONG_LONG *)ap->ob_item)[i] = x; return 0; } -#endif static PyObject * f_getitem(arrayobject *ap, Py_ssize_t i) @@ -521,10 +518,8 @@ static const struct arraydescr descriptors[] = { {'I', sizeof(int), II_getitem, II_setitem, "I", 1, 0}, {'l', sizeof(long), l_getitem, l_setitem, "l", 1, 1}, {'L', sizeof(long), LL_getitem, LL_setitem, "L", 1, 0}, -#ifdef HAVE_LONG_LONG {'q', sizeof(PY_LONG_LONG), q_getitem, q_setitem, "q", 1, 1}, {'Q', sizeof(PY_LONG_LONG), QQ_getitem, QQ_setitem, "Q", 1, 0}, -#endif {'f', sizeof(float), f_getitem, f_setitem, "f", 0, 0}, {'d', sizeof(double), d_getitem, d_setitem, "d", 0, 0}, {'\0', 0, 0, 0, 0, 0, 0} /* Sentinel */ @@ -1814,7 +1809,6 @@ typecode_to_mformat_code(char typecode) intsize = sizeof(long); is_signed = 0; break; -#if HAVE_LONG_LONG case 'q': intsize = sizeof(PY_LONG_LONG); is_signed = 1; @@ -1823,7 +1817,6 @@ typecode_to_mformat_code(char typecode) intsize = sizeof(PY_LONG_LONG); is_signed = 0; break; -#endif default: return UNKNOWN_FORMAT; } @@ -2685,11 +2678,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } } PyErr_SetString(PyExc_ValueError, -#ifdef HAVE_LONG_LONG "bad typecode (must be b, B, u, h, H, i, I, l, L, q, Q, f or d)"); -#else - "bad typecode (must be b, B, u, h, H, i, I, l, L, f or d)"); -#endif return NULL; } diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index c9ac1f783e..21d91b03df 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -640,22 +640,14 @@ fail: #endif /* MS_WINDOWS */ -#ifdef HAVE_LONG_LONG -# define _PyLong_FromDev PyLong_FromLongLong -#else -# define _PyLong_FromDev PyLong_FromLong -#endif +#define _PyLong_FromDev PyLong_FromLongLong #if defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV) static int _Py_Dev_Converter(PyObject *obj, void *p) { -#ifdef HAVE_LONG_LONG *((dev_t *)p) = PyLong_AsUnsignedLongLong(obj); -#else - *((dev_t *)p) = PyLong_AsUnsignedLong(obj); -#endif if (PyErr_Occurred()) return 0; return 1; diff --git a/Modules/resource.c b/Modules/resource.c index 3a1cf094c7..bbe8aefef1 100644 --- a/Modules/resource.c +++ b/Modules/resource.c @@ -135,13 +135,11 @@ py2rlimit(PyObject *curobj, PyObject *maxobj, struct rlimit *rl_out) static PyObject* rlimit2py(struct rlimit rl) { -#if defined(HAVE_LONG_LONG) if (sizeof(rl.rlim_cur) > sizeof(long)) { return Py_BuildValue("LL", (PY_LONG_LONG) rl.rlim_cur, (PY_LONG_LONG) rl.rlim_max); } -#endif return Py_BuildValue("ll", (long) rl.rlim_cur, (long) rl.rlim_max); } @@ -438,11 +436,9 @@ PyInit_resource(void) PyModule_AddIntMacro(m, RLIMIT_NPTS); #endif -#if defined(HAVE_LONG_LONG) if (sizeof(RLIM_INFINITY) > sizeof(long)) { v = PyLong_FromLongLong((PY_LONG_LONG) RLIM_INFINITY); } else -#endif { v = PyLong_FromLong((long) RLIM_INFINITY); } -- cgit v1.2.1 From b10682a8d65eacac79b39a62ff45a15e0ac95f05 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 5 Sep 2016 17:53:15 -0700 Subject: Avoid inefficient way to call functions without argument Don't pass "()" format to PyObject_CallXXX() to call a function without argument: pass NULL as the format string instead. It avoids to have to parse a string to produce 0 argument. --- Modules/_collectionsmodule.c | 2 +- Modules/_datetimemodule.c | 8 ++++---- Modules/_pickle.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 3410dfec07..1675102681 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -2009,7 +2009,7 @@ defdict_reduce(defdictobject *dd) args = PyTuple_Pack(1, dd->default_factory); if (args == NULL) return NULL; - items = _PyObject_CallMethodId((PyObject *)dd, &PyId_items, "()"); + items = _PyObject_CallMethodId((PyObject *)dd, &PyId_items, NULL); if (items == NULL) { Py_DECREF(args); return NULL; diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 7e95af7497..b48dc2dff3 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -1378,7 +1378,7 @@ time_time(void) if (time != NULL) { _Py_IDENTIFIER(time); - result = _PyObject_CallMethodId(time, &PyId_time, "()"); + result = _PyObject_CallMethodId(time, &PyId_time, NULL); Py_DECREF(time); } return result; @@ -2703,7 +2703,7 @@ date_isoformat(PyDateTime_Date *self) static PyObject * date_str(PyDateTime_Date *self) { - return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "()"); + return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, NULL); } @@ -2729,7 +2729,7 @@ date_strftime(PyDateTime_Date *self, PyObject *args, PyObject *kw) &format)) return NULL; - tuple = _PyObject_CallMethodId((PyObject *)self, &PyId_timetuple, "()"); + tuple = _PyObject_CallMethodId((PyObject *)self, &PyId_timetuple, NULL); if (tuple == NULL) return NULL; result = wrap_strftime((PyObject *)self, format, tuple, @@ -3675,7 +3675,7 @@ time_repr(PyDateTime_Time *self) static PyObject * time_str(PyDateTime_Time *self) { - return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "()"); + return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, NULL); } static PyObject * diff --git a/Modules/_pickle.c b/Modules/_pickle.c index a8d414e713..eae3394533 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -2873,7 +2873,7 @@ save_dict(PicklerObject *self, PyObject *obj) } else { _Py_IDENTIFIER(items); - items = _PyObject_CallMethodId(obj, &PyId_items, "()"); + items = _PyObject_CallMethodId(obj, &PyId_items, NULL); if (items == NULL) goto error; iter = PyObject_GetIter(items); -- cgit v1.2.1 From 06d0337c7565e35432fe744713260e2ef3e8a545 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 5 Sep 2016 18:16:01 -0700 Subject: Avoid calling functions with an empty string as format string Directly pass NULL rather than an empty string. --- Modules/_cursesmodule.c | 2 +- Modules/_elementtree.c | 2 +- Modules/_sqlite/connection.c | 16 ++++++++-------- Modules/_sqlite/cursor.c | 2 +- Modules/_sqlite/module.c | 2 +- Modules/_testcapimodule.c | 4 ++-- Modules/faulthandler.c | 6 +++--- 7 files changed, 17 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 960752cce3..a48735f51f 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -2306,7 +2306,7 @@ PyCurses_GetWin(PyCursesWindowObject *self, PyObject *stream) goto error; } - data = _PyObject_CallMethodId(stream, &PyId_read, ""); + data = _PyObject_CallMethodId(stream, &PyId_read, NULL); if (data == NULL) goto error; if (!PyBytes_Check(data)) { diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 721293aabe..39eba7c825 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -3399,7 +3399,7 @@ _elementtree_XMLParser_close_impl(XMLParserObject *self) } else if (self->handle_close) { Py_DECREF(res); - return PyObject_CallFunction(self->handle_close, ""); + return _PyObject_CallNoArg(self->handle_close); } else { return res; diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 409fa74f16..4a10ce5ad5 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -672,7 +672,7 @@ static void _pysqlite_step_callback(sqlite3_context *context, int argc, sqlite3_ aggregate_instance = (PyObject**)sqlite3_aggregate_context(context, sizeof(PyObject*)); if (*aggregate_instance == 0) { - *aggregate_instance = PyObject_CallFunction(aggregate_class, ""); + *aggregate_instance = PyObject_CallFunction(aggregate_class, NULL); if (PyErr_Occurred()) { *aggregate_instance = 0; @@ -744,7 +744,7 @@ void _pysqlite_final_callback(sqlite3_context* context) PyErr_Fetch(&exception, &value, &tb); restore = 1; - function_result = _PyObject_CallMethodId(*aggregate_instance, &PyId_finalize, ""); + function_result = _PyObject_CallMethodId(*aggregate_instance, &PyId_finalize, NULL); Py_DECREF(*aggregate_instance); @@ -960,7 +960,7 @@ static int _progress_handler(void* user_arg) gilstate = PyGILState_Ensure(); #endif - ret = PyObject_CallFunction((PyObject*)user_arg, ""); + ret = PyObject_CallFunction((PyObject*)user_arg, NULL); if (!ret) { if (_enable_callback_tracebacks) { @@ -1291,7 +1291,7 @@ PyObject* pysqlite_connection_execute(pysqlite_Connection* self, PyObject* args) PyObject* result = 0; PyObject* method = 0; - cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, ""); + cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL); if (!cursor) { goto error; } @@ -1320,7 +1320,7 @@ PyObject* pysqlite_connection_executemany(pysqlite_Connection* self, PyObject* a PyObject* result = 0; PyObject* method = 0; - cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, ""); + cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL); if (!cursor) { goto error; } @@ -1349,7 +1349,7 @@ PyObject* pysqlite_connection_executescript(pysqlite_Connection* self, PyObject* PyObject* result = 0; PyObject* method = 0; - cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, ""); + cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL); if (!cursor) { goto error; } @@ -1519,7 +1519,7 @@ pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args) goto finally; } - uppercase_name = _PyObject_CallMethodId(name, &PyId_upper, ""); + uppercase_name = _PyObject_CallMethodId(name, &PyId_upper, NULL); if (!uppercase_name) { goto finally; } @@ -1611,7 +1611,7 @@ pysqlite_connection_exit(pysqlite_Connection* self, PyObject* args) method_name = "rollback"; } - result = PyObject_CallMethod((PyObject*)self, method_name, ""); + result = PyObject_CallMethod((PyObject*)self, method_name, NULL); if (!result) { return NULL; } diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 98eb9616e5..e2c7a3469a 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -143,7 +143,7 @@ PyObject* _pysqlite_get_converter(PyObject* key) PyObject* retval; _Py_IDENTIFIER(upper); - upcase_key = _PyObject_CallMethodId(key, &PyId_upper, ""); + upcase_key = _PyObject_CallMethodId(key, &PyId_upper, NULL); if (!upcase_key) { return NULL; } diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 7cd6d2abeb..cc45331ab5 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -192,7 +192,7 @@ static PyObject* module_register_converter(PyObject* self, PyObject* args) } /* convert the name to upper case */ - name = _PyObject_CallMethodId(orig_name, &PyId_upper, ""); + name = _PyObject_CallMethodId(orig_name, &PyId_upper, NULL); if (!name) { goto error; } diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 7b6c2c1579..2fb5a14c5f 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2137,7 +2137,7 @@ _make_call(void *callable) PyObject *rc; int success; PyGILState_STATE s = PyGILState_Ensure(); - rc = PyObject_CallFunction((PyObject *)callable, ""); + rc = _PyObject_CallNoArg((PyObject *)callable); success = (rc != NULL); Py_XDECREF(rc); PyGILState_Release(s); @@ -3406,7 +3406,7 @@ temporary_c_thread(void *data) /* Allocate a Python thread state for this thread */ state = PyGILState_Ensure(); - res = PyObject_CallFunction(test_c_thread->callback, "", NULL); + res = _PyObject_CallNoArg(test_c_thread->callback); Py_CLEAR(test_c_thread->callback); if (res == NULL) { diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index d6322d0f3f..8969b4ce5c 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -168,7 +168,7 @@ faulthandler_get_fileno(PyObject **file_ptr) return fd; } - result = _PyObject_CallMethodId(file, &PyId_fileno, ""); + result = _PyObject_CallMethodId(file, &PyId_fileno, NULL); if (result == NULL) return -1; @@ -186,7 +186,7 @@ faulthandler_get_fileno(PyObject **file_ptr) return -1; } - result = _PyObject_CallMethodId(file, &PyId_flush, ""); + result = _PyObject_CallMethodId(file, &PyId_flush, NULL); if (result != NULL) Py_DECREF(result); else { @@ -1290,7 +1290,7 @@ faulthandler_env_options(void) if (module == NULL) { return -1; } - res = _PyObject_CallMethodId(module, &PyId_enable, ""); + res = _PyObject_CallMethodId(module, &PyId_enable, NULL); Py_DECREF(module); if (res == NULL) return -1; -- cgit v1.2.1 From 914b59533a094e815809f62441d02b560e23057b Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 6 Sep 2016 10:46:49 -0700 Subject: replace PY_LONG_LONG with long long --- Modules/_datetimemodule.c | 24 +++++++++++----------- Modules/_lsprof.c | 30 +++++++++++++-------------- Modules/_lzmamodule.c | 16 +++++---------- Modules/_struct.c | 52 +++++++++++++++++++++++------------------------ Modules/_testcapimodule.c | 38 +++++++++++++++++----------------- Modules/addrinfo.h | 4 ++-- Modules/arraymodule.c | 26 ++++++++++++------------ Modules/md5module.c | 2 +- Modules/mmapmodule.c | 12 +++++------ Modules/posixmodule.c | 22 ++++++++++---------- Modules/resource.c | 6 +++--- Modules/sha1module.c | 2 +- Modules/sha512module.c | 12 ++++------- 13 files changed, 118 insertions(+), 128 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index b48dc2dff3..6597cb7ad5 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4198,20 +4198,20 @@ typedef struct tm *(*TM_FUNC)(const time_t *timer); /* As of version 2015f max fold in IANA database is * 23 hours at 1969-09-30 13:00:00 in Kwajalein. */ -static PY_LONG_LONG max_fold_seconds = 24 * 3600; +static long long max_fold_seconds = 24 * 3600; /* NB: date(1970,1,1).toordinal() == 719163 */ -static PY_LONG_LONG epoch = Py_LL(719163) * 24 * 60 * 60; +static long long epoch = Py_LL(719163) * 24 * 60 * 60; -static PY_LONG_LONG +static long long utc_to_seconds(int year, int month, int day, int hour, int minute, int second) { - PY_LONG_LONG ordinal = ymd_to_ord(year, month, day); + long long ordinal = ymd_to_ord(year, month, day); return ((ordinal * 24 + hour) * 60 + minute) * 60 + second; } -static PY_LONG_LONG -local(PY_LONG_LONG u) +static long long +local(long long u) { struct tm local_time; time_t t; @@ -4269,7 +4269,7 @@ datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us, second = Py_MIN(59, tm->tm_sec); if (tzinfo == Py_None && f == localtime) { - PY_LONG_LONG probe_seconds, result_seconds, transition; + long long probe_seconds, result_seconds, transition; result_seconds = utc_to_seconds(year, month, day, hour, minute, second); @@ -5115,14 +5115,14 @@ local_timezone(PyDateTime_DateTime *utc_time) return local_timezone_from_timestamp(timestamp); } -static PY_LONG_LONG +static long long local_to_seconds(int year, int month, int day, int hour, int minute, int second, int fold); static PyObject * local_timezone_from_local(PyDateTime_DateTime *local_dt) { - PY_LONG_LONG seconds; + long long seconds; time_t timestamp; seconds = local_to_seconds(GET_YEAR(local_dt), GET_MONTH(local_dt), @@ -5256,11 +5256,11 @@ datetime_timetuple(PyDateTime_DateTime *self) dstflag); } -static PY_LONG_LONG +static long long local_to_seconds(int year, int month, int day, int hour, int minute, int second, int fold) { - PY_LONG_LONG t, a, b, u1, u2, t1, t2, lt; + long long t, a, b, u1, u2, t1, t2, lt; t = utc_to_seconds(year, month, day, hour, minute, second); /* Our goal is to solve t = local(u) for u. */ lt = local(t); @@ -5320,7 +5320,7 @@ datetime_timestamp(PyDateTime_DateTime *self) Py_DECREF(delta); } else { - PY_LONG_LONG seconds; + long long seconds; seconds = local_to_seconds(GET_YEAR(self), GET_MONTH(self), GET_DAY(self), diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c index 788d9064e9..dc3f8ab2fa 100644 --- a/Modules/_lsprof.c +++ b/Modules/_lsprof.c @@ -8,7 +8,7 @@ #include -static PY_LONG_LONG +static long long hpTimer(void) { LARGE_INTEGER li; @@ -35,11 +35,11 @@ hpTimerUnit(void) #include #include -static PY_LONG_LONG +static long long hpTimer(void) { struct timeval tv; - PY_LONG_LONG ret; + long long ret; #ifdef GETTIMEOFDAY_NO_TZ gettimeofday(&tv); #else @@ -66,8 +66,8 @@ struct _ProfilerEntry; /* represents a function called from another function */ typedef struct _ProfilerSubEntry { rotating_node_t header; - PY_LONG_LONG tt; - PY_LONG_LONG it; + long long tt; + long long it; long callcount; long recursivecallcount; long recursionLevel; @@ -77,8 +77,8 @@ typedef struct _ProfilerSubEntry { typedef struct _ProfilerEntry { rotating_node_t header; PyObject *userObj; /* PyCodeObject, or a descriptive str for builtins */ - PY_LONG_LONG tt; /* total time in this entry */ - PY_LONG_LONG it; /* inline time in this entry (not in subcalls) */ + long long tt; /* total time in this entry */ + long long it; /* inline time in this entry (not in subcalls) */ long callcount; /* how many times this was called */ long recursivecallcount; /* how many times called recursively */ long recursionLevel; @@ -86,8 +86,8 @@ typedef struct _ProfilerEntry { } ProfilerEntry; typedef struct _ProfilerContext { - PY_LONG_LONG t0; - PY_LONG_LONG subt; + long long t0; + long long subt; struct _ProfilerContext *previous; ProfilerEntry *ctxEntry; } ProfilerContext; @@ -117,9 +117,9 @@ static PyTypeObject PyProfiler_Type; #define DOUBLE_TIMER_PRECISION 4294967296.0 static PyObject *empty_tuple; -static PY_LONG_LONG CallExternalTimer(ProfilerObject *pObj) +static long long CallExternalTimer(ProfilerObject *pObj) { - PY_LONG_LONG result; + long long result; PyObject *o = PyObject_Call(pObj->externalTimer, empty_tuple, NULL); if (o == NULL) { PyErr_WriteUnraisable(pObj->externalTimer); @@ -132,11 +132,11 @@ static PY_LONG_LONG CallExternalTimer(ProfilerObject *pObj) } else { /* interpret the result as a double measured in seconds. - As the profiler works with PY_LONG_LONG internally + As the profiler works with long long internally we convert it to a large integer */ double val = PyFloat_AsDouble(o); /* error handling delayed to the code below */ - result = (PY_LONG_LONG) (val * DOUBLE_TIMER_PRECISION); + result = (long long) (val * DOUBLE_TIMER_PRECISION); } Py_DECREF(o); if (PyErr_Occurred()) { @@ -338,8 +338,8 @@ initContext(ProfilerObject *pObj, ProfilerContext *self, ProfilerEntry *entry) static void Stop(ProfilerObject *pObj, ProfilerContext *self, ProfilerEntry *entry) { - PY_LONG_LONG tt = CALL_TIMER(pObj) - self->t0; - PY_LONG_LONG it = tt - self->subt; + long long tt = CALL_TIMER(pObj) - self->t0; + long long it = tt - self->subt; if (self->previous) self->previous->subt += tt; pObj->currentProfilerContext = self->previous; diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index ce4e17fc86..5e158fd07d 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -18,12 +18,6 @@ #include - -#ifndef PY_LONG_LONG -#error "This module requires PY_LONG_LONG to be defined" -#endif - - #ifdef WITH_THREAD #define ACQUIRE_LOCK(obj) do { \ if (!PyThread_acquire_lock((obj)->lock, 0)) { \ @@ -163,7 +157,7 @@ grow_buffer(PyObject **buf, Py_ssize_t max_length) uint32_t - the "I" (unsigned int) specifier is the right size, but silently ignores overflows on conversion. - lzma_vli - the "K" (unsigned PY_LONG_LONG) specifier is the right + lzma_vli - the "K" (unsigned long long) specifier is the right size, but like "I" it silently ignores overflows on conversion. lzma_mode and lzma_match_finder - these are enumeration types, and @@ -176,12 +170,12 @@ grow_buffer(PyObject **buf, Py_ssize_t max_length) static int \ FUNCNAME(PyObject *obj, void *ptr) \ { \ - unsigned PY_LONG_LONG val; \ + unsigned long long val; \ \ val = PyLong_AsUnsignedLongLong(obj); \ if (PyErr_Occurred()) \ return 0; \ - if ((unsigned PY_LONG_LONG)(TYPE)val != val) { \ + if ((unsigned long long)(TYPE)val != val) { \ PyErr_SetString(PyExc_OverflowError, \ "Value too large for " #TYPE " type"); \ return 0; \ @@ -398,7 +392,7 @@ parse_filter_chain_spec(lzma_filter filters[], PyObject *filterspecs) Python-level filter specifiers (represented as dicts). */ static int -spec_add_field(PyObject *spec, _Py_Identifier *key, unsigned PY_LONG_LONG value) +spec_add_field(PyObject *spec, _Py_Identifier *key, unsigned long long value) { int status; PyObject *value_object; @@ -1441,7 +1435,7 @@ static PyModuleDef _lzmamodule = { /* Some of our constants are more than 32 bits wide, so PyModule_AddIntConstant would not work correctly on platforms with 32-bit longs. */ static int -module_add_int_constant(PyObject *m, const char *name, PY_LONG_LONG value) +module_add_int_constant(PyObject *m, const char *name, long long value) { PyObject *o = PyLong_FromLongLong(value); if (o == NULL) diff --git a/Modules/_struct.c b/Modules/_struct.c index ba60ba6133..a601f03ce7 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -71,8 +71,8 @@ typedef struct { char c; size_t x; } st_size_t; /* We can't support q and Q in native mode unless the compiler does; in std mode, they're 8 bytes on all platforms. */ -typedef struct { char c; PY_LONG_LONG x; } s_long_long; -#define LONG_LONG_ALIGN (sizeof(s_long_long) - sizeof(PY_LONG_LONG)) +typedef struct { char c; long long x; } s_long_long; +#define LONG_LONG_ALIGN (sizeof(s_long_long) - sizeof(long long)) #ifdef HAVE_C99_BOOL #define BOOL_TYPE _Bool @@ -165,9 +165,9 @@ get_ulong(PyObject *v, unsigned long *p) /* Same, but handling native long long. */ static int -get_longlong(PyObject *v, PY_LONG_LONG *p) +get_longlong(PyObject *v, long long *p) { - PY_LONG_LONG x; + long long x; v = get_pylong(v); if (v == NULL) @@ -175,7 +175,7 @@ get_longlong(PyObject *v, PY_LONG_LONG *p) assert(PyLong_Check(v)); x = PyLong_AsLongLong(v); Py_DECREF(v); - if (x == (PY_LONG_LONG)-1 && PyErr_Occurred()) { + if (x == (long long)-1 && PyErr_Occurred()) { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_SetString(StructError, "argument out of range"); @@ -188,9 +188,9 @@ get_longlong(PyObject *v, PY_LONG_LONG *p) /* Same, but handling native unsigned long long. */ static int -get_ulonglong(PyObject *v, unsigned PY_LONG_LONG *p) +get_ulonglong(PyObject *v, unsigned long long *p) { - unsigned PY_LONG_LONG x; + unsigned long long x; v = get_pylong(v); if (v == NULL) @@ -198,7 +198,7 @@ get_ulonglong(PyObject *v, unsigned PY_LONG_LONG *p) assert(PyLong_Check(v)); x = PyLong_AsUnsignedLongLong(v); Py_DECREF(v); - if (x == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred()) { + if (x == (unsigned long long)-1 && PyErr_Occurred()) { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_SetString(StructError, "argument out of range"); @@ -460,20 +460,20 @@ nu_size_t(const char *p, const formatdef *f) static PyObject * nu_longlong(const char *p, const formatdef *f) { - PY_LONG_LONG x; + long long x; memcpy((char *)&x, p, sizeof x); if (x >= LONG_MIN && x <= LONG_MAX) - return PyLong_FromLong(Py_SAFE_DOWNCAST(x, PY_LONG_LONG, long)); + return PyLong_FromLong(Py_SAFE_DOWNCAST(x, long long, long)); return PyLong_FromLongLong(x); } static PyObject * nu_ulonglong(const char *p, const formatdef *f) { - unsigned PY_LONG_LONG x; + unsigned long long x; memcpy((char *)&x, p, sizeof x); if (x <= LONG_MAX) - return PyLong_FromLong(Py_SAFE_DOWNCAST(x, unsigned PY_LONG_LONG, long)); + return PyLong_FromLong(Py_SAFE_DOWNCAST(x, unsigned long long, long)); return PyLong_FromUnsignedLongLong(x); } @@ -673,7 +673,7 @@ np_size_t(char *p, PyObject *v, const formatdef *f) static int np_longlong(char *p, PyObject *v, const formatdef *f) { - PY_LONG_LONG x; + long long x; if (get_longlong(v, &x) < 0) return -1; memcpy(p, (char *)&x, sizeof x); @@ -683,7 +683,7 @@ np_longlong(char *p, PyObject *v, const formatdef *f) static int np_ulonglong(char *p, PyObject *v, const formatdef *f) { - unsigned PY_LONG_LONG x; + unsigned long long x; if (get_ulonglong(v, &x) < 0) return -1; memcpy(p, (char *)&x, sizeof x); @@ -772,8 +772,8 @@ static const formatdef native_table[] = { {'L', sizeof(long), LONG_ALIGN, nu_ulong, np_ulong}, {'n', sizeof(size_t), SIZE_T_ALIGN, nu_ssize_t, np_ssize_t}, {'N', sizeof(size_t), SIZE_T_ALIGN, nu_size_t, np_size_t}, - {'q', sizeof(PY_LONG_LONG), LONG_LONG_ALIGN, nu_longlong, np_longlong}, - {'Q', sizeof(PY_LONG_LONG), LONG_LONG_ALIGN, nu_ulonglong,np_ulonglong}, + {'q', sizeof(long long), LONG_LONG_ALIGN, nu_longlong, np_longlong}, + {'Q', sizeof(long long), LONG_LONG_ALIGN, nu_ulonglong,np_ulonglong}, {'?', sizeof(BOOL_TYPE), BOOL_ALIGN, nu_bool, np_bool}, {'e', sizeof(short), SHORT_ALIGN, nu_halffloat, np_halffloat}, {'f', sizeof(float), FLOAT_ALIGN, nu_float, np_float}, @@ -816,7 +816,7 @@ bu_uint(const char *p, const formatdef *f) static PyObject * bu_longlong(const char *p, const formatdef *f) { - PY_LONG_LONG x = 0; + long long x = 0; Py_ssize_t i = f->size; const unsigned char *bytes = (const unsigned char *)p; do { @@ -824,23 +824,23 @@ bu_longlong(const char *p, const formatdef *f) } while (--i > 0); /* Extend the sign bit. */ if (SIZEOF_LONG_LONG > f->size) - x |= -(x & ((PY_LONG_LONG)1 << ((8 * f->size) - 1))); + x |= -(x & ((long long)1 << ((8 * f->size) - 1))); if (x >= LONG_MIN && x <= LONG_MAX) - return PyLong_FromLong(Py_SAFE_DOWNCAST(x, PY_LONG_LONG, long)); + return PyLong_FromLong(Py_SAFE_DOWNCAST(x, long long, long)); return PyLong_FromLongLong(x); } static PyObject * bu_ulonglong(const char *p, const formatdef *f) { - unsigned PY_LONG_LONG x = 0; + unsigned long long x = 0; Py_ssize_t i = f->size; const unsigned char *bytes = (const unsigned char *)p; do { x = (x<<8) | *bytes++; } while (--i > 0); if (x <= LONG_MAX) - return PyLong_FromLong(Py_SAFE_DOWNCAST(x, unsigned PY_LONG_LONG, long)); + return PyLong_FromLong(Py_SAFE_DOWNCAST(x, unsigned long long, long)); return PyLong_FromUnsignedLongLong(x); } @@ -1043,7 +1043,7 @@ lu_uint(const char *p, const formatdef *f) static PyObject * lu_longlong(const char *p, const formatdef *f) { - PY_LONG_LONG x = 0; + long long x = 0; Py_ssize_t i = f->size; const unsigned char *bytes = (const unsigned char *)p; do { @@ -1051,23 +1051,23 @@ lu_longlong(const char *p, const formatdef *f) } while (i > 0); /* Extend the sign bit. */ if (SIZEOF_LONG_LONG > f->size) - x |= -(x & ((PY_LONG_LONG)1 << ((8 * f->size) - 1))); + x |= -(x & ((long long)1 << ((8 * f->size) - 1))); if (x >= LONG_MIN && x <= LONG_MAX) - return PyLong_FromLong(Py_SAFE_DOWNCAST(x, PY_LONG_LONG, long)); + return PyLong_FromLong(Py_SAFE_DOWNCAST(x, long long, long)); return PyLong_FromLongLong(x); } static PyObject * lu_ulonglong(const char *p, const formatdef *f) { - unsigned PY_LONG_LONG x = 0; + unsigned long long x = 0; Py_ssize_t i = f->size; const unsigned char *bytes = (const unsigned char *)p; do { x = (x<<8) | bytes[--i]; } while (i > 0); if (x <= LONG_MAX) - return PyLong_FromLong(Py_SAFE_DOWNCAST(x, unsigned PY_LONG_LONG, long)); + return PyLong_FromLong(Py_SAFE_DOWNCAST(x, unsigned long long, long)); return PyLong_FromUnsignedLongLong(x); } diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 2fb5a14c5f..e9a0f12885 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -60,7 +60,7 @@ test_config(PyObject *self) CHECK_SIZEOF(SIZEOF_LONG, long); CHECK_SIZEOF(SIZEOF_VOID_P, void*); CHECK_SIZEOF(SIZEOF_TIME_T, time_t); - CHECK_SIZEOF(SIZEOF_LONG_LONG, PY_LONG_LONG); + CHECK_SIZEOF(SIZEOF_LONG_LONG, long long); #undef CHECK_SIZEOF @@ -360,7 +360,7 @@ test_lazy_hash_inheritance(PyObject* self) Note that the meat of the test is contained in testcapi_long.h. This is revolting, but delicate code duplication is worse: "almost - exactly the same" code is needed to test PY_LONG_LONG, but the ubiquitous + exactly the same" code is needed to test long long, but the ubiquitous dependence on type names makes it impossible to use a parameterized function. A giant macro would be even worse than this. A C++ template would be perfect. @@ -407,7 +407,7 @@ raise_test_longlong_error(const char* msg) } #define TESTNAME test_longlong_api_inner -#define TYPENAME PY_LONG_LONG +#define TYPENAME long long #define F_S_TO_PY PyLong_FromLongLong #define F_PY_TO_S PyLong_AsLongLong #define F_U_TO_PY PyLong_FromUnsignedLongLong @@ -594,7 +594,7 @@ test_long_and_overflow(PyObject *self) } /* Test the PyLong_AsLongLongAndOverflow API. General conversion to - PY_LONG_LONG is tested by test_long_api_inner. This test will + long long is tested by test_long_api_inner. This test will concentrate on proper handling of overflow. */ @@ -602,7 +602,7 @@ static PyObject * test_long_long_and_overflow(PyObject *self) { PyObject *num, *one, *temp; - PY_LONG_LONG value; + long long value; int overflow; /* Test that overflow is set properly for a large value. */ @@ -820,7 +820,7 @@ test_long_as_double(PyObject *self) return Py_None; } -/* Test the L code for PyArg_ParseTuple. This should deliver a PY_LONG_LONG +/* Test the L code for PyArg_ParseTuple. This should deliver a long long for both long and int arguments. The test may leak a little memory if it fails. */ @@ -828,7 +828,7 @@ static PyObject * test_L_code(PyObject *self) { PyObject *tuple, *num; - PY_LONG_LONG value; + long long value; tuple = PyTuple_New(1); if (tuple == NULL) @@ -1133,7 +1133,7 @@ getargs_p(PyObject *self, PyObject *args) static PyObject * getargs_L(PyObject *self, PyObject *args) { - PY_LONG_LONG value; + long long value; if (!PyArg_ParseTuple(args, "L", &value)) return NULL; return PyLong_FromLongLong(value); @@ -1142,7 +1142,7 @@ getargs_L(PyObject *self, PyObject *args) static PyObject * getargs_K(PyObject *self, PyObject *args) { - unsigned PY_LONG_LONG value; + unsigned long long value; if (!PyArg_ParseTuple(args, "K", &value)) return NULL; return PyLong_FromUnsignedLongLong(value); @@ -2271,8 +2271,8 @@ test_string_from_format(PyObject *self, PyObject *args) CHECK_1_FORMAT("%zu", size_t); /* "%lld" and "%llu" support added in Python 2.7. */ - CHECK_1_FORMAT("%llu", unsigned PY_LONG_LONG); - CHECK_1_FORMAT("%lld", PY_LONG_LONG); + CHECK_1_FORMAT("%llu", unsigned long long); + CHECK_1_FORMAT("%lld", long long); Py_RETURN_NONE; @@ -3696,7 +3696,7 @@ test_pytime_fromsecondsobject(PyObject *self, PyObject *args) static PyObject * test_pytime_assecondsdouble(PyObject *self, PyObject *args) { - PY_LONG_LONG ns; + long long ns; _PyTime_t ts; double d; @@ -3710,7 +3710,7 @@ test_pytime_assecondsdouble(PyObject *self, PyObject *args) static PyObject * test_PyTime_AsTimeval(PyObject *self, PyObject *args) { - PY_LONG_LONG ns; + long long ns; int round; _PyTime_t t; struct timeval tv; @@ -3724,7 +3724,7 @@ test_PyTime_AsTimeval(PyObject *self, PyObject *args) if (_PyTime_AsTimeval(t, &tv, round) < 0) return NULL; - seconds = PyLong_FromLong((PY_LONG_LONG)tv.tv_sec); + seconds = PyLong_FromLong((long long)tv.tv_sec); if (seconds == NULL) return NULL; return Py_BuildValue("Nl", seconds, tv.tv_usec); @@ -3734,7 +3734,7 @@ test_PyTime_AsTimeval(PyObject *self, PyObject *args) static PyObject * test_PyTime_AsTimespec(PyObject *self, PyObject *args) { - PY_LONG_LONG ns; + long long ns; _PyTime_t t; struct timespec ts; @@ -3750,7 +3750,7 @@ test_PyTime_AsTimespec(PyObject *self, PyObject *args) static PyObject * test_PyTime_AsMilliseconds(PyObject *self, PyObject *args) { - PY_LONG_LONG ns; + long long ns; int round; _PyTime_t t, ms; @@ -3768,7 +3768,7 @@ test_PyTime_AsMilliseconds(PyObject *self, PyObject *args) static PyObject * test_PyTime_AsMicroseconds(PyObject *self, PyObject *args) { - PY_LONG_LONG ns; + long long ns; int round; _PyTime_t t, ms; @@ -4141,8 +4141,8 @@ typedef struct { float float_member; double double_member; char inplace_member[6]; - PY_LONG_LONG longlong_member; - unsigned PY_LONG_LONG ulonglong_member; + long long longlong_member; + unsigned long long ulonglong_member; } all_structmembers; typedef struct { diff --git a/Modules/addrinfo.h b/Modules/addrinfo.h index 20f7650641..c3c86248dd 100644 --- a/Modules/addrinfo.h +++ b/Modules/addrinfo.h @@ -141,7 +141,7 @@ struct addrinfo { * RFC 2553: protocol-independent placeholder for socket addresses */ #define _SS_MAXSIZE 128 -#define _SS_ALIGNSIZE (sizeof(PY_LONG_LONG)) +#define _SS_ALIGNSIZE (sizeof(long long)) #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(u_char) * 2) #define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(u_char) * 2 - \ _SS_PAD1SIZE - _SS_ALIGNSIZE) @@ -154,7 +154,7 @@ struct sockaddr_storage { unsigned short ss_family; /* address family */ #endif /* HAVE_SOCKADDR_SA_LEN */ char __ss_pad1[_SS_PAD1SIZE]; - PY_LONG_LONG __ss_align; /* force desired structure storage alignment */ + long long __ss_align; /* force desired structure storage alignment */ char __ss_pad2[_SS_PAD2SIZE]; }; #endif /* !HAVE_SOCKADDR_STORAGE */ diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 8637cb52b1..86a58d9170 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -421,17 +421,17 @@ LL_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) static PyObject * q_getitem(arrayobject *ap, Py_ssize_t i) { - return PyLong_FromLongLong(((PY_LONG_LONG *)ap->ob_item)[i]); + return PyLong_FromLongLong(((long long *)ap->ob_item)[i]); } static int q_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) { - PY_LONG_LONG x; + long long x; if (!PyArg_Parse(v, "L;array item must be integer", &x)) return -1; if (i >= 0) - ((PY_LONG_LONG *)ap->ob_item)[i] = x; + ((long long *)ap->ob_item)[i] = x; return 0; } @@ -439,20 +439,20 @@ static PyObject * QQ_getitem(arrayobject *ap, Py_ssize_t i) { return PyLong_FromUnsignedLongLong( - ((unsigned PY_LONG_LONG *)ap->ob_item)[i]); + ((unsigned long long *)ap->ob_item)[i]); } static int QQ_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) { - unsigned PY_LONG_LONG x; + unsigned long long x; if (PyLong_Check(v)) { x = PyLong_AsUnsignedLongLong(v); - if (x == (unsigned PY_LONG_LONG) -1 && PyErr_Occurred()) + if (x == (unsigned long long) -1 && PyErr_Occurred()) return -1; } else { - PY_LONG_LONG y; + long long y; if (!PyArg_Parse(v, "L;array item must be integer", &y)) return -1; if (y < 0) { @@ -460,11 +460,11 @@ QQ_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) "unsigned long long is less than minimum"); return -1; } - x = (unsigned PY_LONG_LONG)y; + x = (unsigned long long)y; } if (i >= 0) - ((unsigned PY_LONG_LONG *)ap->ob_item)[i] = x; + ((unsigned long long *)ap->ob_item)[i] = x; return 0; } @@ -518,8 +518,8 @@ static const struct arraydescr descriptors[] = { {'I', sizeof(int), II_getitem, II_setitem, "I", 1, 0}, {'l', sizeof(long), l_getitem, l_setitem, "l", 1, 1}, {'L', sizeof(long), LL_getitem, LL_setitem, "L", 1, 0}, - {'q', sizeof(PY_LONG_LONG), q_getitem, q_setitem, "q", 1, 1}, - {'Q', sizeof(PY_LONG_LONG), QQ_getitem, QQ_setitem, "Q", 1, 0}, + {'q', sizeof(long long), q_getitem, q_setitem, "q", 1, 1}, + {'Q', sizeof(long long), QQ_getitem, QQ_setitem, "Q", 1, 0}, {'f', sizeof(float), f_getitem, f_setitem, "f", 0, 0}, {'d', sizeof(double), d_getitem, d_setitem, "d", 0, 0}, {'\0', 0, 0, 0, 0, 0, 0} /* Sentinel */ @@ -1810,11 +1810,11 @@ typecode_to_mformat_code(char typecode) is_signed = 0; break; case 'q': - intsize = sizeof(PY_LONG_LONG); + intsize = sizeof(long long); is_signed = 1; break; case 'Q': - intsize = sizeof(PY_LONG_LONG); + intsize = sizeof(long long); is_signed = 0; break; default: diff --git a/Modules/md5module.c b/Modules/md5module.c index f94acc7513..04bc06e4b7 100644 --- a/Modules/md5module.c +++ b/Modules/md5module.c @@ -30,7 +30,7 @@ class MD5Type "MD5object *" "&PyType_Type" #if SIZEOF_INT == 4 typedef unsigned int MD5_INT32; /* 32-bit integer */ -typedef PY_LONG_LONG MD5_INT64; /* 64-bit integer */ +typedef long long MD5_INT64; /* 64-bit integer */ #else /* not defined. compilation will die. */ #endif diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 50cec2498d..b0015a5756 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -93,7 +93,7 @@ typedef struct { size_t size; size_t pos; /* relative to offset */ #ifdef MS_WINDOWS - PY_LONG_LONG offset; + long long offset; #else off_t offset; #endif @@ -446,7 +446,7 @@ mmap_size_method(mmap_object *self, #ifdef MS_WINDOWS if (self->file_handle != INVALID_HANDLE_VALUE) { DWORD low,high; - PY_LONG_LONG size; + long long size; low = GetFileSize(self->file_handle, &high); if (low == INVALID_FILE_SIZE) { /* It might be that the function appears to have failed, @@ -457,7 +457,7 @@ mmap_size_method(mmap_object *self, } if (!high && low < LONG_MAX) return PyLong_FromLong((long)low); - size = (((PY_LONG_LONG)high)<<32) + low; + size = (((long long)high)<<32) + low; return PyLong_FromLongLong(size); } else { return PyLong_FromSsize_t(self->size); @@ -1258,7 +1258,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) /* A note on sizes and offsets: while the actual map size must hold in a Py_ssize_t, both the total file size and the start offset can be longer - than a Py_ssize_t, so we use PY_LONG_LONG which is always 64-bit. + than a Py_ssize_t, so we use long long which is always 64-bit. */ static PyObject * @@ -1267,7 +1267,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) mmap_object *m_obj; PyObject *map_size_obj = NULL; Py_ssize_t map_size; - PY_LONG_LONG offset = 0, size; + long long offset = 0, size; DWORD off_hi; /* upper 32 bits of offset */ DWORD off_lo; /* lower 32 bits of offset */ DWORD size_hi; /* upper 32 bits of size */ @@ -1379,7 +1379,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) return PyErr_SetFromWindowsErr(dwErr); } - size = (((PY_LONG_LONG) high) << 32) + low; + size = (((long long) high) << 32) + low; if (size == 0) { PyErr_SetString(PyExc_ValueError, "cannot mmap an empty file"); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 21d91b03df..df295c25b6 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1108,7 +1108,7 @@ dir_fd_and_follow_symlinks_invalid(const char *function_name, int dir_fd, } #ifdef MS_WINDOWS - typedef PY_LONG_LONG Py_off_t; + typedef long long Py_off_t; #else typedef off_t Py_off_t; #endif @@ -2073,7 +2073,7 @@ _pystat_fromstructstat(STRUCT_STAT *st) PyStructSequence_SET_ITEM(v, 0, PyLong_FromLong((long)st->st_mode)); #ifdef HAVE_LARGEFILE_SUPPORT PyStructSequence_SET_ITEM(v, 1, - PyLong_FromLongLong((PY_LONG_LONG)st->st_ino)); + PyLong_FromLongLong((long long)st->st_ino)); #else PyStructSequence_SET_ITEM(v, 1, PyLong_FromLong((long)st->st_ino)); #endif @@ -2092,7 +2092,7 @@ _pystat_fromstructstat(STRUCT_STAT *st) #endif #ifdef HAVE_LARGEFILE_SUPPORT PyStructSequence_SET_ITEM(v, 6, - PyLong_FromLongLong((PY_LONG_LONG)st->st_size)); + PyLong_FromLongLong((long long)st->st_size)); #else PyStructSequence_SET_ITEM(v, 6, PyLong_FromLong(st->st_size)); #endif @@ -9420,17 +9420,17 @@ _pystatvfs_fromstructstatvfs(struct statvfs st) { PyStructSequence_SET_ITEM(v, 0, PyLong_FromLong((long) st.f_bsize)); PyStructSequence_SET_ITEM(v, 1, PyLong_FromLong((long) st.f_frsize)); PyStructSequence_SET_ITEM(v, 2, - PyLong_FromLongLong((PY_LONG_LONG) st.f_blocks)); + PyLong_FromLongLong((long long) st.f_blocks)); PyStructSequence_SET_ITEM(v, 3, - PyLong_FromLongLong((PY_LONG_LONG) st.f_bfree)); + PyLong_FromLongLong((long long) st.f_bfree)); PyStructSequence_SET_ITEM(v, 4, - PyLong_FromLongLong((PY_LONG_LONG) st.f_bavail)); + PyLong_FromLongLong((long long) st.f_bavail)); PyStructSequence_SET_ITEM(v, 5, - PyLong_FromLongLong((PY_LONG_LONG) st.f_files)); + PyLong_FromLongLong((long long) st.f_files)); PyStructSequence_SET_ITEM(v, 6, - PyLong_FromLongLong((PY_LONG_LONG) st.f_ffree)); + PyLong_FromLongLong((long long) st.f_ffree)); PyStructSequence_SET_ITEM(v, 7, - PyLong_FromLongLong((PY_LONG_LONG) st.f_favail)); + PyLong_FromLongLong((long long) st.f_favail)); PyStructSequence_SET_ITEM(v, 8, PyLong_FromLong((long) st.f_flag)); PyStructSequence_SET_ITEM(v, 9, PyLong_FromLong((long) st.f_namemax)); #endif @@ -11763,10 +11763,10 @@ DirEntry_inode(DirEntry *self) self->win32_file_index = stat.st_ino; self->got_file_index = 1; } - return PyLong_FromLongLong((PY_LONG_LONG)self->win32_file_index); + return PyLong_FromLongLong((long long)self->win32_file_index); #else /* POSIX */ #ifdef HAVE_LARGEFILE_SUPPORT - return PyLong_FromLongLong((PY_LONG_LONG)self->d_ino); + return PyLong_FromLongLong((long long)self->d_ino); #else return PyLong_FromLong((long)self->d_ino); #endif diff --git a/Modules/resource.c b/Modules/resource.c index bbe8aefef1..6702b7a7c4 100644 --- a/Modules/resource.c +++ b/Modules/resource.c @@ -137,8 +137,8 @@ rlimit2py(struct rlimit rl) { if (sizeof(rl.rlim_cur) > sizeof(long)) { return Py_BuildValue("LL", - (PY_LONG_LONG) rl.rlim_cur, - (PY_LONG_LONG) rl.rlim_max); + (long long) rl.rlim_cur, + (long long) rl.rlim_max); } return Py_BuildValue("ll", (long) rl.rlim_cur, (long) rl.rlim_max); } @@ -437,7 +437,7 @@ PyInit_resource(void) #endif if (sizeof(RLIM_INFINITY) > sizeof(long)) { - v = PyLong_FromLongLong((PY_LONG_LONG) RLIM_INFINITY); + v = PyLong_FromLongLong((long long) RLIM_INFINITY); } else { v = PyLong_FromLong((long) RLIM_INFINITY); diff --git a/Modules/sha1module.c b/Modules/sha1module.c index 6cb32ed69c..d5065ce134 100644 --- a/Modules/sha1module.c +++ b/Modules/sha1module.c @@ -30,7 +30,7 @@ class SHA1Type "SHA1object *" "&PyType_Type" #if SIZEOF_INT == 4 typedef unsigned int SHA1_INT32; /* 32-bit integer */ -typedef PY_LONG_LONG SHA1_INT64; /* 64-bit integer */ +typedef long long SHA1_INT64; /* 64-bit integer */ #else /* not defined. compilation will die. */ #endif diff --git a/Modules/sha512module.c b/Modules/sha512module.c index f9ff0eaf2d..f5f9e18768 100644 --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -27,15 +27,13 @@ class SHA512Type "SHAobject *" "&PyType_Type" [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=81a3ccde92bcfe8d]*/ -#ifdef PY_LONG_LONG /* If no PY_LONG_LONG, don't compile anything! */ - /* Some useful types */ typedef unsigned char SHA_BYTE; #if SIZEOF_INT == 4 typedef unsigned int SHA_INT32; /* 32-bit integer */ -typedef unsigned PY_LONG_LONG SHA_INT64; /* 64-bit integer */ +typedef unsigned long long SHA_INT64; /* 64-bit integer */ #else /* not defined. compilation will die. */ #endif @@ -121,12 +119,12 @@ static void SHAcopy(SHAobject *src, SHAobject *dest) /* Various logical functions */ #define ROR64(x, y) \ - ( ((((x) & Py_ULL(0xFFFFFFFFFFFFFFFF))>>((unsigned PY_LONG_LONG)(y) & 63)) | \ - ((x)<<((unsigned PY_LONG_LONG)(64-((y) & 63))))) & Py_ULL(0xFFFFFFFFFFFFFFFF)) + ( ((((x) & Py_ULL(0xFFFFFFFFFFFFFFFF))>>((unsigned long long)(y) & 63)) | \ + ((x)<<((unsigned long long)(64-((y) & 63))))) & Py_ULL(0xFFFFFFFFFFFFFFFF)) #define Ch(x,y,z) (z ^ (x & (y ^ z))) #define Maj(x,y,z) (((x | y) & z) | (x & y)) #define S(x, n) ROR64((x),(n)) -#define R(x, n) (((x) & Py_ULL(0xFFFFFFFFFFFFFFFF)) >> ((unsigned PY_LONG_LONG)n)) +#define R(x, n) (((x) & Py_ULL(0xFFFFFFFFFFFFFFFF)) >> ((unsigned long long)n)) #define Sigma0(x) (S(x, 28) ^ S(x, 34) ^ S(x, 39)) #define Sigma1(x) (S(x, 14) ^ S(x, 18) ^ S(x, 41)) #define Gamma0(x) (S(x, 1) ^ S(x, 8) ^ R(x, 7)) @@ -803,5 +801,3 @@ PyInit__sha512(void) PyModule_AddObject(m, "SHA512Type", (PyObject *)&SHA512type); return m; } - -#endif -- cgit v1.2.1 From 205ba651be1bebdc2c1fffd368feebe82783541b Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 6 Sep 2016 20:22:28 +0200 Subject: Issue #27928: Add scrypt (password-based key derivation function) to hashlib module (requires OpenSSL 1.1.0). --- Modules/_hashopenssl.c | 129 ++++++++++++++++++++++++++++++++++++++++ Modules/clinic/_hashopenssl.c.h | 60 +++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 Modules/clinic/_hashopenssl.c.h (limited to 'Modules') diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index ff576144df..daa4f3db2e 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -25,6 +25,12 @@ #include #include "openssl/err.h" +#include "clinic/_hashopenssl.c.h" +/*[clinic input] +module _hashlib +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=c2b4ff081bac4be1]*/ + #define MUNCH_SIZE INT_MAX #ifndef HASH_OBJ_CONSTRUCTOR @@ -713,6 +719,128 @@ pbkdf2_hmac(PyObject *self, PyObject *args, PyObject *kwdict) #endif +#if OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(OPENSSL_NO_SCRYPT) && !defined(LIBRESSL_VERSION_NUMBER) +#define PY_SCRYPT 1 + +/*[clinic input] +_hashlib.scrypt + + password: Py_buffer + * + salt: Py_buffer = None + n as n_obj: object(subclass_of='&PyLong_Type') = None + r as r_obj: object(subclass_of='&PyLong_Type') = None + p as p_obj: object(subclass_of='&PyLong_Type') = None + maxmem: long = 0 + dklen: long = 64 + + +scrypt password-based key derivation function. +[clinic start generated code]*/ + +static PyObject * +_hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt, + PyObject *n_obj, PyObject *r_obj, PyObject *p_obj, + long maxmem, long dklen) +/*[clinic end generated code: output=14849e2aa2b7b46c input=48a7d63bf3f75c42]*/ +{ + PyObject *key_obj = NULL; + char *key; + int retval; + unsigned long n, r, p; + + if (password->len > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "password is too long."); + return NULL; + } + + if (salt->buf == NULL) { + PyErr_SetString(PyExc_TypeError, + "salt is required"); + return NULL; + } + if (salt->len > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "salt is too long."); + return NULL; + } + + n = PyLong_AsUnsignedLong(n_obj); + if (n == (unsigned long) -1 && PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "n is required and must be an unsigned int"); + return NULL; + } + if (n < 2 || n & (n - 1)) { + PyErr_SetString(PyExc_ValueError, + "n must be a power of 2."); + return NULL; + } + + r = PyLong_AsUnsignedLong(r_obj); + if (r == (unsigned long) -1 && PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "r is required and must be an unsigned int"); + return NULL; + } + + p = PyLong_AsUnsignedLong(p_obj); + if (p == (unsigned long) -1 && PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "p is required and must be an unsigned int"); + return NULL; + } + + if (maxmem < 0 || maxmem > INT_MAX) { + /* OpenSSL 1.1.0 restricts maxmem to 32MB. It may change in the + future. The maxmem constant is private to OpenSSL. */ + PyErr_Format(PyExc_ValueError, + "maxmem must be positive and smaller than %d", + INT_MAX); + return NULL; + } + + if (dklen < 1 || dklen > INT_MAX) { + PyErr_Format(PyExc_ValueError, + "dklen must be greater than 0 and smaller than %d", + INT_MAX); + return NULL; + } + + /* let OpenSSL validate the rest */ + retval = EVP_PBE_scrypt(NULL, 0, NULL, 0, n, r, p, maxmem, NULL, 0); + if (!retval) { + /* sorry, can't do much better */ + PyErr_SetString(PyExc_ValueError, + "Invalid paramemter combination for n, r, p, maxmem."); + return NULL; + } + + key_obj = PyBytes_FromStringAndSize(NULL, dklen); + if (key_obj == NULL) { + return NULL; + } + key = PyBytes_AS_STRING(key_obj); + + Py_BEGIN_ALLOW_THREADS + retval = EVP_PBE_scrypt( + (const char*)password->buf, (size_t)password->len, + (const unsigned char *)salt->buf, (size_t)salt->len, + n, r, p, maxmem, + (unsigned char *)key, (size_t)dklen + ); + Py_END_ALLOW_THREADS + + if (!retval) { + Py_CLEAR(key_obj); + _setException(PyExc_ValueError); + return NULL; + } + return key_obj; +} +#endif + /* State for our callback function so that it can accumulate a result. */ typedef struct _internal_name_mapper_state { PyObject *set; @@ -836,6 +964,7 @@ static struct PyMethodDef EVP_functions[] = { {"pbkdf2_hmac", (PyCFunction)pbkdf2_hmac, METH_VARARGS|METH_KEYWORDS, pbkdf2_hmac__doc__}, #endif + _HASHLIB_SCRYPT_METHODDEF CONSTRUCTOR_METH_DEF(md5), CONSTRUCTOR_METH_DEF(sha1), CONSTRUCTOR_METH_DEF(sha224), diff --git a/Modules/clinic/_hashopenssl.c.h b/Modules/clinic/_hashopenssl.c.h new file mode 100644 index 0000000000..96e6cfe0e4 --- /dev/null +++ b/Modules/clinic/_hashopenssl.c.h @@ -0,0 +1,60 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +#if (OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(OPENSSL_NO_SCRYPT) && !defined(LIBRESSL_VERSION_NUMBER)) + +PyDoc_STRVAR(_hashlib_scrypt__doc__, +"scrypt($module, /, password, *, salt=None, n=None, r=None, p=None,\n" +" maxmem=0, dklen=64)\n" +"--\n" +"\n" +"scrypt password-based key derivation function."); + +#define _HASHLIB_SCRYPT_METHODDEF \ + {"scrypt", (PyCFunction)_hashlib_scrypt, METH_VARARGS|METH_KEYWORDS, _hashlib_scrypt__doc__}, + +static PyObject * +_hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt, + PyObject *n_obj, PyObject *r_obj, PyObject *p_obj, + long maxmem, long dklen); + +static PyObject * +_hashlib_scrypt(PyObject *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"password", "salt", "n", "r", "p", "maxmem", "dklen", NULL}; + static _PyArg_Parser _parser = {"y*|$y*O!O!O!ll:scrypt", _keywords, 0}; + Py_buffer password = {NULL, NULL}; + Py_buffer salt = {NULL, NULL}; + PyObject *n_obj = Py_None; + PyObject *r_obj = Py_None; + PyObject *p_obj = Py_None; + long maxmem = 0; + long dklen = 64; + + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + &password, &salt, &PyLong_Type, &n_obj, &PyLong_Type, &r_obj, &PyLong_Type, &p_obj, &maxmem, &dklen)) { + goto exit; + } + return_value = _hashlib_scrypt_impl(module, &password, &salt, n_obj, r_obj, p_obj, maxmem, dklen); + +exit: + /* Cleanup for password */ + if (password.obj) { + PyBuffer_Release(&password); + } + /* Cleanup for salt */ + if (salt.obj) { + PyBuffer_Release(&salt); + } + + return return_value; +} + +#endif /* (OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(OPENSSL_NO_SCRYPT) && !defined(LIBRESSL_VERSION_NUMBER)) */ + +#ifndef _HASHLIB_SCRYPT_METHODDEF + #define _HASHLIB_SCRYPT_METHODDEF +#endif /* !defined(_HASHLIB_SCRYPT_METHODDEF) */ +/*[clinic end generated code: output=8c5386789f77430a input=a9049054013a1b77]*/ -- cgit v1.2.1 From cf6adf24ceeab86dfeee86c57d3c01e61740b665 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 6 Sep 2016 11:58:01 -0700 Subject: require standard int types to be defined (#17884) --- Modules/_testcapimodule.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index e9a0f12885..290797f6b7 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -98,22 +98,14 @@ test_sizeof_c_types(PyObject *self) CHECK_SIGNNESS(Py_UCS1, 0); CHECK_SIGNNESS(Py_UCS2, 0); CHECK_SIGNNESS(Py_UCS4, 0); -#ifdef HAVE_INT32_T CHECK_SIZEOF(PY_INT32_T, 4); CHECK_SIGNNESS(PY_INT32_T, 1); -#endif -#ifdef HAVE_UINT32_T CHECK_SIZEOF(PY_UINT32_T, 4); CHECK_SIGNNESS(PY_UINT32_T, 0); -#endif -#ifdef HAVE_INT64_T CHECK_SIZEOF(PY_INT64_T, 8); CHECK_SIGNNESS(PY_INT64_T, 1); -#endif -#ifdef HAVE_UINT64_T CHECK_SIZEOF(PY_UINT64_T, 8); CHECK_SIGNNESS(PY_UINT64_T, 0); -#endif /* pointer/size types */ CHECK_SIZEOF(size_t, sizeof(void *)); -- cgit v1.2.1 From 55696581b31632957c73d9e838d7db7cdb90a88c Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 6 Sep 2016 12:07:53 -0700 Subject: do not need vcstdint.h anymore --- Modules/_decimal/libmpdec/vccompat.h | 1 - 1 file changed, 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_decimal/libmpdec/vccompat.h b/Modules/_decimal/libmpdec/vccompat.h index f58e023c62..564eaa8140 100644 --- a/Modules/_decimal/libmpdec/vccompat.h +++ b/Modules/_decimal/libmpdec/vccompat.h @@ -32,7 +32,6 @@ /* Visual C fixes: no stdint.h, no snprintf ... */ #ifdef _MSC_VER - #include "vcstdint.h" #undef inline #define inline __inline #undef random -- cgit v1.2.1 From caf79c35b905a78303db25418eb8331f5490a72c Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 6 Sep 2016 12:41:06 -0700 Subject: include (now) int standard headers --- Modules/_decimal/libmpdec/mpdecimal.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index 56e4887cc8..daf2b9da38 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -48,6 +48,8 @@ extern "C" { #include #include #include +#include +#include #ifdef _MSC_VER #include "vccompat.h" @@ -59,12 +61,6 @@ extern "C" { #define MPD_HIDE_SYMBOLS_END #define EXTINLINE extern inline #else - #ifdef HAVE_STDINT_H - #include - #endif - #ifdef HAVE_INTTYPES_H - #include - #endif #ifndef __GNUC_STDC_INLINE__ #define __GNUC_STDC_INLINE__ 1 #endif -- cgit v1.2.1 From cb9bcb8b55671d4dac0f2cc4998da3d961bd88d4 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 6 Sep 2016 22:03:25 +0200 Subject: Issue #26798: Add BLAKE2 (blake2b and blake2s) to hashlib. --- Modules/_blake2/blake2b2s.py | 49 ++++ Modules/_blake2/blake2b_impl.c | 460 ++++++++++++++++++++++++++++++ Modules/_blake2/blake2module.c | 105 +++++++ Modules/_blake2/blake2ns.h | 32 +++ Modules/_blake2/blake2s_impl.c | 460 ++++++++++++++++++++++++++++++ Modules/_blake2/clinic/blake2b_impl.c.h | 125 ++++++++ Modules/_blake2/clinic/blake2s_impl.c.h | 125 ++++++++ Modules/_blake2/impl/blake2-config.h | 74 +++++ Modules/_blake2/impl/blake2-impl.h | 139 +++++++++ Modules/_blake2/impl/blake2.h | 161 +++++++++++ Modules/_blake2/impl/blake2b-load-sse2.h | 70 +++++ Modules/_blake2/impl/blake2b-load-sse41.h | 404 ++++++++++++++++++++++++++ Modules/_blake2/impl/blake2b-ref.c | 416 +++++++++++++++++++++++++++ Modules/_blake2/impl/blake2b-round.h | 159 +++++++++++ Modules/_blake2/impl/blake2b.c | 450 +++++++++++++++++++++++++++++ Modules/_blake2/impl/blake2s-load-sse2.h | 61 ++++ Modules/_blake2/impl/blake2s-load-sse41.h | 231 +++++++++++++++ Modules/_blake2/impl/blake2s-load-xop.h | 191 +++++++++++++ Modules/_blake2/impl/blake2s-ref.c | 406 ++++++++++++++++++++++++++ Modules/_blake2/impl/blake2s-round.h | 90 ++++++ Modules/_blake2/impl/blake2s.c | 431 ++++++++++++++++++++++++++++ Modules/hashlib.h | 19 +- 22 files changed, 4650 insertions(+), 8 deletions(-) create mode 100755 Modules/_blake2/blake2b2s.py create mode 100644 Modules/_blake2/blake2b_impl.c create mode 100644 Modules/_blake2/blake2module.c create mode 100644 Modules/_blake2/blake2ns.h create mode 100644 Modules/_blake2/blake2s_impl.c create mode 100644 Modules/_blake2/clinic/blake2b_impl.c.h create mode 100644 Modules/_blake2/clinic/blake2s_impl.c.h create mode 100644 Modules/_blake2/impl/blake2-config.h create mode 100644 Modules/_blake2/impl/blake2-impl.h create mode 100644 Modules/_blake2/impl/blake2.h create mode 100644 Modules/_blake2/impl/blake2b-load-sse2.h create mode 100644 Modules/_blake2/impl/blake2b-load-sse41.h create mode 100644 Modules/_blake2/impl/blake2b-ref.c create mode 100644 Modules/_blake2/impl/blake2b-round.h create mode 100644 Modules/_blake2/impl/blake2b.c create mode 100644 Modules/_blake2/impl/blake2s-load-sse2.h create mode 100644 Modules/_blake2/impl/blake2s-load-sse41.h create mode 100644 Modules/_blake2/impl/blake2s-load-xop.h create mode 100644 Modules/_blake2/impl/blake2s-ref.c create mode 100644 Modules/_blake2/impl/blake2s-round.h create mode 100644 Modules/_blake2/impl/blake2s.c (limited to 'Modules') diff --git a/Modules/_blake2/blake2b2s.py b/Modules/_blake2/blake2b2s.py new file mode 100755 index 0000000000..01cf26521b --- /dev/null +++ b/Modules/_blake2/blake2b2s.py @@ -0,0 +1,49 @@ +#!/usr/bin/python3 + +import os +import re + +HERE = os.path.dirname(os.path.abspath(__file__)) +BLAKE2 = os.path.join(HERE, 'impl') + +PUBLIC_SEARCH = re.compile(r'\ int (blake2[bs]p?[a-z_]*)\(') + + +def getfiles(): + for name in os.listdir(BLAKE2): + name = os.path.join(BLAKE2, name) + if os.path.isfile(name): + yield name + + +def find_public(): + public_funcs = set() + for name in getfiles(): + with open(name) as f: + for line in f: + # find public functions + mo = PUBLIC_SEARCH.search(line) + if mo: + public_funcs.add(mo.group(1)) + + for f in sorted(public_funcs): + print('#define {0:<18} PyBlake2_{0}'.format(f)) + + return public_funcs + + +def main(): + lines = [] + with open(os.path.join(HERE, 'blake2b_impl.c')) as f: + for line in f: + line = line.replace('blake2b', 'blake2s') + line = line.replace('BLAKE2b', 'BLAKE2s') + line = line.replace('BLAKE2B', 'BLAKE2S') + lines.append(line) + with open(os.path.join(HERE, 'blake2s_impl.c'), 'w') as f: + f.write(''.join(lines)) + # find_public() + + +if __name__ == '__main__': + main() diff --git a/Modules/_blake2/blake2b_impl.c b/Modules/_blake2/blake2b_impl.c new file mode 100644 index 0000000000..1c67744f75 --- /dev/null +++ b/Modules/_blake2/blake2b_impl.c @@ -0,0 +1,460 @@ +/* + * Written in 2013 by Dmitry Chestnykh + * Modified for CPython by Christian Heimes + * + * To the extent possible under law, the author have dedicated all + * copyright and related and neighboring rights to this software to + * the public domain worldwide. This software is distributed without + * any warranty. http://creativecommons.org/publicdomain/zero/1.0/ + */ + +/* WARNING: autogenerated file! + * + * The blake2s_impl.c is autogenerated from blake2b_impl.c. + */ + +#include "Python.h" +#include "pystrhex.h" +#ifdef WITH_THREAD +#include "pythread.h" +#endif + +#include "../hashlib.h" +#include "blake2ns.h" + +#define HAVE_BLAKE2B 1 +#define BLAKE2_LOCAL_INLINE(type) Py_LOCAL_INLINE(type) + +#include "impl/blake2.h" +#include "impl/blake2-impl.h" /* for secure_zero_memory() and store48() */ + +#ifdef BLAKE2_USE_SSE +#include "impl/blake2b.c" +#else +#include "impl/blake2b-ref.c" +#endif + + +extern PyTypeObject PyBlake2_BLAKE2bType; + +typedef struct { + PyObject_HEAD + blake2b_param param; + blake2b_state state; +#ifdef WITH_THREAD + PyThread_type_lock lock; +#endif +} BLAKE2bObject; + +#include "clinic/blake2b_impl.c.h" + +/*[clinic input] +module _blake2b +class _blake2b.blake2b "BLAKE2bObject *" "&PyBlake2_BLAKE2bType" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=6893358c6622aecf]*/ + + +static BLAKE2bObject * +new_BLAKE2bObject(PyTypeObject *type) +{ + BLAKE2bObject *self; + self = (BLAKE2bObject *)type->tp_alloc(type, 0); +#ifdef WITH_THREAD + if (self != NULL) { + self->lock = NULL; + } +#endif + return self; +} + +/*[clinic input] +@classmethod +_blake2b.blake2b.__new__ as py_blake2b_new + string as data: object = NULL + * + digest_size: int(c_default="BLAKE2B_OUTBYTES") = _blake2b.blake2b.MAX_DIGEST_SIZE + key: Py_buffer = None + salt: Py_buffer = None + person: Py_buffer = None + fanout: int = 1 + depth: int = 1 + leaf_size as leaf_size_obj: object = NULL + node_offset as node_offset_obj: object = NULL + node_depth: int = 0 + inner_size: int = 0 + last_node: bool = False + +Return a new BLAKE2b hash object. +[clinic start generated code]*/ + +static PyObject * +py_blake2b_new_impl(PyTypeObject *type, PyObject *data, int digest_size, + Py_buffer *key, Py_buffer *salt, Py_buffer *person, + int fanout, int depth, PyObject *leaf_size_obj, + PyObject *node_offset_obj, int node_depth, + int inner_size, int last_node) +/*[clinic end generated code: output=7506d8d890e5f13b input=e41548dfa0866031]*/ +{ + BLAKE2bObject *self = NULL; + Py_buffer buf; + + unsigned long leaf_size = 0; + unsigned PY_LONG_LONG node_offset = 0; + + self = new_BLAKE2bObject(type); + if (self == NULL) { + goto error; + } + + /* Zero parameter block. */ + memset(&self->param, 0, sizeof(self->param)); + + /* Set digest size. */ + if (digest_size <= 0 || digest_size > BLAKE2B_OUTBYTES) { + PyErr_Format(PyExc_ValueError, + "digest_size must be between 1 and %d bytes", + BLAKE2B_OUTBYTES); + goto error; + } + self->param.digest_length = digest_size; + + /* Set salt parameter. */ + if ((salt->obj != NULL) && salt->len) { + if (salt->len > BLAKE2B_SALTBYTES) { + PyErr_Format(PyExc_ValueError, + "maximum salt length is %d bytes", + BLAKE2B_SALTBYTES); + goto error; + } + memcpy(self->param.salt, salt->buf, salt->len); + } + + /* Set personalization parameter. */ + if ((person->obj != NULL) && person->len) { + if (person->len > BLAKE2B_PERSONALBYTES) { + PyErr_Format(PyExc_ValueError, + "maximum person length is %d bytes", + BLAKE2B_PERSONALBYTES); + goto error; + } + memcpy(self->param.personal, person->buf, person->len); + } + + /* Set tree parameters. */ + if (fanout < 0 || fanout > 255) { + PyErr_SetString(PyExc_ValueError, + "fanout must be between 0 and 255"); + goto error; + } + self->param.fanout = (uint8_t)fanout; + + if (depth <= 0 || depth > 255) { + PyErr_SetString(PyExc_ValueError, + "depth must be between 1 and 255"); + goto error; + } + self->param.depth = (uint8_t)depth; + + if (leaf_size_obj != NULL) { + leaf_size = PyLong_AsUnsignedLong(leaf_size_obj); + if (leaf_size == (unsigned long) -1 && PyErr_Occurred()) { + goto error; + } + if (leaf_size > 0xFFFFFFFFU) { + PyErr_SetString(PyExc_OverflowError, "leaf_size is too large"); + goto error; + } + } + self->param.leaf_length = (unsigned int)leaf_size; + + if (node_offset_obj != NULL) { + node_offset = PyLong_AsUnsignedLongLong(node_offset_obj); + if (node_offset == (unsigned PY_LONG_LONG) -1 && PyErr_Occurred()) { + goto error; + } + } +#ifdef HAVE_BLAKE2S + if (node_offset > 0xFFFFFFFFFFFFULL) { + /* maximum 2**48 - 1 */ + PyErr_SetString(PyExc_OverflowError, "node_offset is too large"); + goto error; + } + store48(&(self->param.node_offset), node_offset); +#else + self->param.node_offset = node_offset; +#endif + + if (node_depth < 0 || node_depth > 255) { + PyErr_SetString(PyExc_ValueError, + "node_depth must be between 0 and 255"); + goto error; + } + self->param.node_depth = node_depth; + + if (inner_size < 0 || inner_size > BLAKE2B_OUTBYTES) { + PyErr_Format(PyExc_ValueError, + "inner_size must be between 0 and is %d", + BLAKE2B_OUTBYTES); + goto error; + } + self->param.inner_length = inner_size; + + /* Set key length. */ + if ((key->obj != NULL) && key->len) { + if (key->len > BLAKE2B_KEYBYTES) { + PyErr_Format(PyExc_ValueError, + "maximum key length is %d bytes", + BLAKE2B_KEYBYTES); + goto error; + } + self->param.key_length = key->len; + } + + /* Initialize hash state. */ + if (blake2b_init_param(&self->state, &self->param) < 0) { + PyErr_SetString(PyExc_RuntimeError, + "error initializing hash state"); + goto error; + } + + /* Set last node flag (must come after initialization). */ + self->state.last_node = last_node; + + /* Process key block if any. */ + if (self->param.key_length) { + uint8_t block[BLAKE2B_BLOCKBYTES]; + memset(block, 0, sizeof(block)); + memcpy(block, key->buf, key->len); + blake2b_update(&self->state, block, sizeof(block)); + secure_zero_memory(block, sizeof(block)); + } + + /* Process initial data if any. */ + if (data != NULL) { + GET_BUFFER_VIEW_OR_ERROR(data, &buf, goto error); + + if (buf.len >= HASHLIB_GIL_MINSIZE) { + Py_BEGIN_ALLOW_THREADS + blake2b_update(&self->state, buf.buf, buf.len); + Py_END_ALLOW_THREADS + } else { + blake2b_update(&self->state, buf.buf, buf.len); + } + PyBuffer_Release(&buf); + } + + return (PyObject *)self; + + error: + if (self != NULL) { + Py_DECREF(self); + } + return NULL; +} + +/*[clinic input] +_blake2b.blake2b.copy + +Return a copy of the hash object. +[clinic start generated code]*/ + +static PyObject * +_blake2b_blake2b_copy_impl(BLAKE2bObject *self) +/*[clinic end generated code: output=c89cd33550ab1543 input=4c9c319f18f10747]*/ +{ + BLAKE2bObject *cpy; + + if ((cpy = new_BLAKE2bObject(Py_TYPE(self))) == NULL) + return NULL; + + ENTER_HASHLIB(self); + cpy->param = self->param; + cpy->state = self->state; + LEAVE_HASHLIB(self); + return (PyObject *)cpy; +} + +/*[clinic input] +_blake2b.blake2b.update + + obj: object + / + +Update this hash object's state with the provided string. +[clinic start generated code]*/ + +static PyObject * +_blake2b_blake2b_update(BLAKE2bObject *self, PyObject *obj) +/*[clinic end generated code: output=a888f07c4cddbe94 input=3ecb8c13ee4260f2]*/ +{ + Py_buffer buf; + + GET_BUFFER_VIEW_OR_ERROUT(obj, &buf); + +#ifdef WITH_THREAD + if (self->lock == NULL && buf.len >= HASHLIB_GIL_MINSIZE) + self->lock = PyThread_allocate_lock(); + + if (self->lock != NULL) { + Py_BEGIN_ALLOW_THREADS + PyThread_acquire_lock(self->lock, 1); + blake2b_update(&self->state, buf.buf, buf.len); + PyThread_release_lock(self->lock); + Py_END_ALLOW_THREADS + } else { + blake2b_update(&self->state, buf.buf, buf.len); + } +#else + blake2b_update(&self->state, buf.buf, buf.len); +#endif /* !WITH_THREAD */ + PyBuffer_Release(&buf); + + Py_INCREF(Py_None); + return Py_None; +} + +/*[clinic input] +_blake2b.blake2b.digest + +Return the digest value as a string of binary data. +[clinic start generated code]*/ + +static PyObject * +_blake2b_blake2b_digest_impl(BLAKE2bObject *self) +/*[clinic end generated code: output=b13a79360d984740 input=ac2fa462ebb1b9c7]*/ +{ + uint8_t digest[BLAKE2B_OUTBYTES]; + blake2b_state state_cpy; + + ENTER_HASHLIB(self); + state_cpy = self->state; + blake2b_final(&state_cpy, digest, self->param.digest_length); + LEAVE_HASHLIB(self); + return PyBytes_FromStringAndSize((const char *)digest, + self->param.digest_length); +} + +/*[clinic input] +_blake2b.blake2b.hexdigest + +Return the digest value as a string of hexadecimal digits. +[clinic start generated code]*/ + +static PyObject * +_blake2b_blake2b_hexdigest_impl(BLAKE2bObject *self) +/*[clinic end generated code: output=6a503611715b24bd input=d58f0b2f37812e33]*/ +{ + uint8_t digest[BLAKE2B_OUTBYTES]; + blake2b_state state_cpy; + + ENTER_HASHLIB(self); + state_cpy = self->state; + blake2b_final(&state_cpy, digest, self->param.digest_length); + LEAVE_HASHLIB(self); + return _Py_strhex((const char *)digest, self->param.digest_length); +} + + +static PyMethodDef py_blake2b_methods[] = { + _BLAKE2B_BLAKE2B_COPY_METHODDEF + _BLAKE2B_BLAKE2B_DIGEST_METHODDEF + _BLAKE2B_BLAKE2B_HEXDIGEST_METHODDEF + _BLAKE2B_BLAKE2B_UPDATE_METHODDEF + {NULL, NULL} +}; + + + +static PyObject * +py_blake2b_get_name(BLAKE2bObject *self, void *closure) +{ + return PyUnicode_FromString("blake2b"); +} + + + +static PyObject * +py_blake2b_get_block_size(BLAKE2bObject *self, void *closure) +{ + return PyLong_FromLong(BLAKE2B_BLOCKBYTES); +} + + + +static PyObject * +py_blake2b_get_digest_size(BLAKE2bObject *self, void *closure) +{ + return PyLong_FromLong(self->param.digest_length); +} + + +static PyGetSetDef py_blake2b_getsetters[] = { + {"name", (getter)py_blake2b_get_name, + NULL, NULL, NULL}, + {"block_size", (getter)py_blake2b_get_block_size, + NULL, NULL, NULL}, + {"digest_size", (getter)py_blake2b_get_digest_size, + NULL, NULL, NULL}, + {NULL} +}; + + +static void +py_blake2b_dealloc(PyObject *self) +{ + BLAKE2bObject *obj = (BLAKE2bObject *)self; + + /* Try not to leave state in memory. */ + secure_zero_memory(&obj->param, sizeof(obj->param)); + secure_zero_memory(&obj->state, sizeof(obj->state)); +#ifdef WITH_THREAD + if (obj->lock) { + PyThread_free_lock(obj->lock); + obj->lock = NULL; + } +#endif + PyObject_Del(self); +} + + +PyTypeObject PyBlake2_BLAKE2bType = { + PyVarObject_HEAD_INIT(NULL, 0) + "_blake2.blake2b", /* tp_name */ + sizeof(BLAKE2bObject), /* tp_size */ + 0, /* tp_itemsize */ + py_blake2b_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + py_blake2b_new__doc__, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + py_blake2b_methods, /* tp_methods */ + 0, /* tp_members */ + py_blake2b_getsetters, /* 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 */ + py_blake2b_new, /* tp_new */ +}; diff --git a/Modules/_blake2/blake2module.c b/Modules/_blake2/blake2module.c new file mode 100644 index 0000000000..e2a3d420d4 --- /dev/null +++ b/Modules/_blake2/blake2module.c @@ -0,0 +1,105 @@ +/* + * Written in 2013 by Dmitry Chestnykh + * Modified for CPython by Christian Heimes + * + * To the extent possible under law, the author have dedicated all + * copyright and related and neighboring rights to this software to + * the public domain worldwide. This software is distributed without + * any warranty. http://creativecommons.org/publicdomain/zero/1.0/ + */ + +#include "Python.h" + +#include "impl/blake2.h" + +extern PyTypeObject PyBlake2_BLAKE2bType; +extern PyTypeObject PyBlake2_BLAKE2sType; + + +PyDoc_STRVAR(blake2mod__doc__, +"_blake2b provides BLAKE2b for hashlib\n" +); + + +static struct PyMethodDef blake2mod_functions[] = { + {NULL, NULL} +}; + +static struct PyModuleDef blake2_module = { + PyModuleDef_HEAD_INIT, + "_blake2", + blake2mod__doc__, + -1, + blake2mod_functions, + NULL, + NULL, + NULL, + NULL +}; + +#define ADD_INT(d, name, value) do { \ + PyObject *x = PyLong_FromLong(value); \ + if (!x) { \ + Py_DECREF(m); \ + return NULL; \ + } \ + if (PyDict_SetItemString(d, name, x) < 0) { \ + Py_DECREF(m); \ + return NULL; \ + } \ + Py_DECREF(x); \ +} while(0) + + +PyMODINIT_FUNC +PyInit__blake2(void) +{ + PyObject *m; + PyObject *d; + + m = PyModule_Create(&blake2_module); + if (m == NULL) + return NULL; + + /* BLAKE2b */ + Py_TYPE(&PyBlake2_BLAKE2bType) = &PyType_Type; + if (PyType_Ready(&PyBlake2_BLAKE2bType) < 0) { + return NULL; + } + + Py_INCREF(&PyBlake2_BLAKE2bType); + PyModule_AddObject(m, "blake2b", (PyObject *)&PyBlake2_BLAKE2bType); + + d = PyBlake2_BLAKE2bType.tp_dict; + ADD_INT(d, "SALT_SIZE", BLAKE2B_SALTBYTES); + ADD_INT(d, "PERSON_SIZE", BLAKE2B_PERSONALBYTES); + ADD_INT(d, "MAX_KEY_SIZE", BLAKE2B_KEYBYTES); + ADD_INT(d, "MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES); + + PyModule_AddIntConstant(m, "BLAKE2B_SALT_SIZE", BLAKE2B_SALTBYTES); + PyModule_AddIntConstant(m, "BLAKE2B_PERSON_SIZE", BLAKE2B_PERSONALBYTES); + PyModule_AddIntConstant(m, "BLAKE2B_MAX_KEY_SIZE", BLAKE2B_KEYBYTES); + PyModule_AddIntConstant(m, "BLAKE2B_MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES); + + /* BLAKE2s */ + Py_TYPE(&PyBlake2_BLAKE2sType) = &PyType_Type; + if (PyType_Ready(&PyBlake2_BLAKE2sType) < 0) { + return NULL; + } + + Py_INCREF(&PyBlake2_BLAKE2sType); + PyModule_AddObject(m, "blake2s", (PyObject *)&PyBlake2_BLAKE2sType); + + d = PyBlake2_BLAKE2sType.tp_dict; + ADD_INT(d, "SALT_SIZE", BLAKE2S_SALTBYTES); + ADD_INT(d, "PERSON_SIZE", BLAKE2S_PERSONALBYTES); + ADD_INT(d, "MAX_KEY_SIZE", BLAKE2S_KEYBYTES); + ADD_INT(d, "MAX_DIGEST_SIZE", BLAKE2S_OUTBYTES); + + PyModule_AddIntConstant(m, "BLAKE2S_SALT_SIZE", BLAKE2S_SALTBYTES); + PyModule_AddIntConstant(m, "BLAKE2S_PERSON_SIZE", BLAKE2S_PERSONALBYTES); + PyModule_AddIntConstant(m, "BLAKE2S_MAX_KEY_SIZE", BLAKE2S_KEYBYTES); + PyModule_AddIntConstant(m, "BLAKE2S_MAX_DIGEST_SIZE", BLAKE2S_OUTBYTES); + + return m; +} diff --git a/Modules/_blake2/blake2ns.h b/Modules/_blake2/blake2ns.h new file mode 100644 index 0000000000..53bce8e0fc --- /dev/null +++ b/Modules/_blake2/blake2ns.h @@ -0,0 +1,32 @@ +/* Prefix all public blake2 symbols with PyBlake2_ + */ + +#ifndef Py_BLAKE2_NS +#define Py_BLAKE2_NS + +#define blake2b PyBlake2_blake2b +#define blake2b_compress PyBlake2_blake2b_compress +#define blake2b_final PyBlake2_blake2b_final +#define blake2b_init PyBlake2_blake2b_init +#define blake2b_init_key PyBlake2_blake2b_init_key +#define blake2b_init_param PyBlake2_blake2b_init_param +#define blake2b_update PyBlake2_blake2b_update +#define blake2bp PyBlake2_blake2bp +#define blake2bp_final PyBlake2_blake2bp_final +#define blake2bp_init PyBlake2_blake2bp_init +#define blake2bp_init_key PyBlake2_blake2bp_init_key +#define blake2bp_update PyBlake2_blake2bp_update +#define blake2s PyBlake2_blake2s +#define blake2s_compress PyBlake2_blake2s_compress +#define blake2s_final PyBlake2_blake2s_final +#define blake2s_init PyBlake2_blake2s_init +#define blake2s_init_key PyBlake2_blake2s_init_key +#define blake2s_init_param PyBlake2_blake2s_init_param +#define blake2s_update PyBlake2_blake2s_update +#define blake2sp PyBlake2_blake2sp +#define blake2sp_final PyBlake2_blake2sp_final +#define blake2sp_init PyBlake2_blake2sp_init +#define blake2sp_init_key PyBlake2_blake2sp_init_key +#define blake2sp_update PyBlake2_blake2sp_update + +#endif /* Py_BLAKE2_NS */ diff --git a/Modules/_blake2/blake2s_impl.c b/Modules/_blake2/blake2s_impl.c new file mode 100644 index 0000000000..8b38270ae8 --- /dev/null +++ b/Modules/_blake2/blake2s_impl.c @@ -0,0 +1,460 @@ +/* + * Written in 2013 by Dmitry Chestnykh + * Modified for CPython by Christian Heimes + * + * To the extent possible under law, the author have dedicated all + * copyright and related and neighboring rights to this software to + * the public domain worldwide. This software is distributed without + * any warranty. http://creativecommons.org/publicdomain/zero/1.0/ + */ + +/* WARNING: autogenerated file! + * + * The blake2s_impl.c is autogenerated from blake2s_impl.c. + */ + +#include "Python.h" +#include "pystrhex.h" +#ifdef WITH_THREAD +#include "pythread.h" +#endif + +#include "../hashlib.h" +#include "blake2ns.h" + +#define HAVE_BLAKE2S 1 +#define BLAKE2_LOCAL_INLINE(type) Py_LOCAL_INLINE(type) + +#include "impl/blake2.h" +#include "impl/blake2-impl.h" /* for secure_zero_memory() and store48() */ + +#ifdef BLAKE2_USE_SSE +#include "impl/blake2s.c" +#else +#include "impl/blake2s-ref.c" +#endif + + +extern PyTypeObject PyBlake2_BLAKE2sType; + +typedef struct { + PyObject_HEAD + blake2s_param param; + blake2s_state state; +#ifdef WITH_THREAD + PyThread_type_lock lock; +#endif +} BLAKE2sObject; + +#include "clinic/blake2s_impl.c.h" + +/*[clinic input] +module _blake2s +class _blake2s.blake2s "BLAKE2sObject *" "&PyBlake2_BLAKE2sType" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=edbfcf7557a685a7]*/ + + +static BLAKE2sObject * +new_BLAKE2sObject(PyTypeObject *type) +{ + BLAKE2sObject *self; + self = (BLAKE2sObject *)type->tp_alloc(type, 0); +#ifdef WITH_THREAD + if (self != NULL) { + self->lock = NULL; + } +#endif + return self; +} + +/*[clinic input] +@classmethod +_blake2s.blake2s.__new__ as py_blake2s_new + string as data: object = NULL + * + digest_size: int(c_default="BLAKE2S_OUTBYTES") = _blake2s.blake2s.MAX_DIGEST_SIZE + key: Py_buffer = None + salt: Py_buffer = None + person: Py_buffer = None + fanout: int = 1 + depth: int = 1 + leaf_size as leaf_size_obj: object = NULL + node_offset as node_offset_obj: object = NULL + node_depth: int = 0 + inner_size: int = 0 + last_node: bool = False + +Return a new BLAKE2s hash object. +[clinic start generated code]*/ + +static PyObject * +py_blake2s_new_impl(PyTypeObject *type, PyObject *data, int digest_size, + Py_buffer *key, Py_buffer *salt, Py_buffer *person, + int fanout, int depth, PyObject *leaf_size_obj, + PyObject *node_offset_obj, int node_depth, + int inner_size, int last_node) +/*[clinic end generated code: output=fe060b258a8cbfc6 input=458cfdcb3d0d47ff]*/ +{ + BLAKE2sObject *self = NULL; + Py_buffer buf; + + unsigned long leaf_size = 0; + unsigned PY_LONG_LONG node_offset = 0; + + self = new_BLAKE2sObject(type); + if (self == NULL) { + goto error; + } + + /* Zero parameter block. */ + memset(&self->param, 0, sizeof(self->param)); + + /* Set digest size. */ + if (digest_size <= 0 || digest_size > BLAKE2S_OUTBYTES) { + PyErr_Format(PyExc_ValueError, + "digest_size must be between 1 and %d bytes", + BLAKE2S_OUTBYTES); + goto error; + } + self->param.digest_length = digest_size; + + /* Set salt parameter. */ + if ((salt->obj != NULL) && salt->len) { + if (salt->len > BLAKE2S_SALTBYTES) { + PyErr_Format(PyExc_ValueError, + "maximum salt length is %d bytes", + BLAKE2S_SALTBYTES); + goto error; + } + memcpy(self->param.salt, salt->buf, salt->len); + } + + /* Set personalization parameter. */ + if ((person->obj != NULL) && person->len) { + if (person->len > BLAKE2S_PERSONALBYTES) { + PyErr_Format(PyExc_ValueError, + "maximum person length is %d bytes", + BLAKE2S_PERSONALBYTES); + goto error; + } + memcpy(self->param.personal, person->buf, person->len); + } + + /* Set tree parameters. */ + if (fanout < 0 || fanout > 255) { + PyErr_SetString(PyExc_ValueError, + "fanout must be between 0 and 255"); + goto error; + } + self->param.fanout = (uint8_t)fanout; + + if (depth <= 0 || depth > 255) { + PyErr_SetString(PyExc_ValueError, + "depth must be between 1 and 255"); + goto error; + } + self->param.depth = (uint8_t)depth; + + if (leaf_size_obj != NULL) { + leaf_size = PyLong_AsUnsignedLong(leaf_size_obj); + if (leaf_size == (unsigned long) -1 && PyErr_Occurred()) { + goto error; + } + if (leaf_size > 0xFFFFFFFFU) { + PyErr_SetString(PyExc_OverflowError, "leaf_size is too large"); + goto error; + } + } + self->param.leaf_length = (unsigned int)leaf_size; + + if (node_offset_obj != NULL) { + node_offset = PyLong_AsUnsignedLongLong(node_offset_obj); + if (node_offset == (unsigned PY_LONG_LONG) -1 && PyErr_Occurred()) { + goto error; + } + } +#ifdef HAVE_BLAKE2S + if (node_offset > 0xFFFFFFFFFFFFULL) { + /* maximum 2**48 - 1 */ + PyErr_SetString(PyExc_OverflowError, "node_offset is too large"); + goto error; + } + store48(&(self->param.node_offset), node_offset); +#else + self->param.node_offset = node_offset; +#endif + + if (node_depth < 0 || node_depth > 255) { + PyErr_SetString(PyExc_ValueError, + "node_depth must be between 0 and 255"); + goto error; + } + self->param.node_depth = node_depth; + + if (inner_size < 0 || inner_size > BLAKE2S_OUTBYTES) { + PyErr_Format(PyExc_ValueError, + "inner_size must be between 0 and is %d", + BLAKE2S_OUTBYTES); + goto error; + } + self->param.inner_length = inner_size; + + /* Set key length. */ + if ((key->obj != NULL) && key->len) { + if (key->len > BLAKE2S_KEYBYTES) { + PyErr_Format(PyExc_ValueError, + "maximum key length is %d bytes", + BLAKE2S_KEYBYTES); + goto error; + } + self->param.key_length = key->len; + } + + /* Initialize hash state. */ + if (blake2s_init_param(&self->state, &self->param) < 0) { + PyErr_SetString(PyExc_RuntimeError, + "error initializing hash state"); + goto error; + } + + /* Set last node flag (must come after initialization). */ + self->state.last_node = last_node; + + /* Process key block if any. */ + if (self->param.key_length) { + uint8_t block[BLAKE2S_BLOCKBYTES]; + memset(block, 0, sizeof(block)); + memcpy(block, key->buf, key->len); + blake2s_update(&self->state, block, sizeof(block)); + secure_zero_memory(block, sizeof(block)); + } + + /* Process initial data if any. */ + if (data != NULL) { + GET_BUFFER_VIEW_OR_ERROR(data, &buf, goto error); + + if (buf.len >= HASHLIB_GIL_MINSIZE) { + Py_BEGIN_ALLOW_THREADS + blake2s_update(&self->state, buf.buf, buf.len); + Py_END_ALLOW_THREADS + } else { + blake2s_update(&self->state, buf.buf, buf.len); + } + PyBuffer_Release(&buf); + } + + return (PyObject *)self; + + error: + if (self != NULL) { + Py_DECREF(self); + } + return NULL; +} + +/*[clinic input] +_blake2s.blake2s.copy + +Return a copy of the hash object. +[clinic start generated code]*/ + +static PyObject * +_blake2s_blake2s_copy_impl(BLAKE2sObject *self) +/*[clinic end generated code: output=6c5bada404b7aed7 input=c8858e887ae4a07a]*/ +{ + BLAKE2sObject *cpy; + + if ((cpy = new_BLAKE2sObject(Py_TYPE(self))) == NULL) + return NULL; + + ENTER_HASHLIB(self); + cpy->param = self->param; + cpy->state = self->state; + LEAVE_HASHLIB(self); + return (PyObject *)cpy; +} + +/*[clinic input] +_blake2s.blake2s.update + + obj: object + / + +Update this hash object's state with the provided string. +[clinic start generated code]*/ + +static PyObject * +_blake2s_blake2s_update(BLAKE2sObject *self, PyObject *obj) +/*[clinic end generated code: output=fe8438a1d3cede87 input=47a408b9a3cc05c5]*/ +{ + Py_buffer buf; + + GET_BUFFER_VIEW_OR_ERROUT(obj, &buf); + +#ifdef WITH_THREAD + if (self->lock == NULL && buf.len >= HASHLIB_GIL_MINSIZE) + self->lock = PyThread_allocate_lock(); + + if (self->lock != NULL) { + Py_BEGIN_ALLOW_THREADS + PyThread_acquire_lock(self->lock, 1); + blake2s_update(&self->state, buf.buf, buf.len); + PyThread_release_lock(self->lock); + Py_END_ALLOW_THREADS + } else { + blake2s_update(&self->state, buf.buf, buf.len); + } +#else + blake2s_update(&self->state, buf.buf, buf.len); +#endif /* !WITH_THREAD */ + PyBuffer_Release(&buf); + + Py_INCREF(Py_None); + return Py_None; +} + +/*[clinic input] +_blake2s.blake2s.digest + +Return the digest value as a string of binary data. +[clinic start generated code]*/ + +static PyObject * +_blake2s_blake2s_digest_impl(BLAKE2sObject *self) +/*[clinic end generated code: output=80e81a48c6f79cf9 input=feb9a220135bdeba]*/ +{ + uint8_t digest[BLAKE2S_OUTBYTES]; + blake2s_state state_cpy; + + ENTER_HASHLIB(self); + state_cpy = self->state; + blake2s_final(&state_cpy, digest, self->param.digest_length); + LEAVE_HASHLIB(self); + return PyBytes_FromStringAndSize((const char *)digest, + self->param.digest_length); +} + +/*[clinic input] +_blake2s.blake2s.hexdigest + +Return the digest value as a string of hexadecimal digits. +[clinic start generated code]*/ + +static PyObject * +_blake2s_blake2s_hexdigest_impl(BLAKE2sObject *self) +/*[clinic end generated code: output=db6c5028c0a3c2e5 input=4e4877b8bd7aea91]*/ +{ + uint8_t digest[BLAKE2S_OUTBYTES]; + blake2s_state state_cpy; + + ENTER_HASHLIB(self); + state_cpy = self->state; + blake2s_final(&state_cpy, digest, self->param.digest_length); + LEAVE_HASHLIB(self); + return _Py_strhex((const char *)digest, self->param.digest_length); +} + + +static PyMethodDef py_blake2s_methods[] = { + _BLAKE2S_BLAKE2S_COPY_METHODDEF + _BLAKE2S_BLAKE2S_DIGEST_METHODDEF + _BLAKE2S_BLAKE2S_HEXDIGEST_METHODDEF + _BLAKE2S_BLAKE2S_UPDATE_METHODDEF + {NULL, NULL} +}; + + + +static PyObject * +py_blake2s_get_name(BLAKE2sObject *self, void *closure) +{ + return PyUnicode_FromString("blake2s"); +} + + + +static PyObject * +py_blake2s_get_block_size(BLAKE2sObject *self, void *closure) +{ + return PyLong_FromLong(BLAKE2S_BLOCKBYTES); +} + + + +static PyObject * +py_blake2s_get_digest_size(BLAKE2sObject *self, void *closure) +{ + return PyLong_FromLong(self->param.digest_length); +} + + +static PyGetSetDef py_blake2s_getsetters[] = { + {"name", (getter)py_blake2s_get_name, + NULL, NULL, NULL}, + {"block_size", (getter)py_blake2s_get_block_size, + NULL, NULL, NULL}, + {"digest_size", (getter)py_blake2s_get_digest_size, + NULL, NULL, NULL}, + {NULL} +}; + + +static void +py_blake2s_dealloc(PyObject *self) +{ + BLAKE2sObject *obj = (BLAKE2sObject *)self; + + /* Try not to leave state in memory. */ + secure_zero_memory(&obj->param, sizeof(obj->param)); + secure_zero_memory(&obj->state, sizeof(obj->state)); +#ifdef WITH_THREAD + if (obj->lock) { + PyThread_free_lock(obj->lock); + obj->lock = NULL; + } +#endif + PyObject_Del(self); +} + + +PyTypeObject PyBlake2_BLAKE2sType = { + PyVarObject_HEAD_INIT(NULL, 0) + "_blake2.blake2s", /* tp_name */ + sizeof(BLAKE2sObject), /* tp_size */ + 0, /* tp_itemsize */ + py_blake2s_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + py_blake2s_new__doc__, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + py_blake2s_methods, /* tp_methods */ + 0, /* tp_members */ + py_blake2s_getsetters, /* 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 */ + py_blake2s_new, /* tp_new */ +}; diff --git a/Modules/_blake2/clinic/blake2b_impl.c.h b/Modules/_blake2/clinic/blake2b_impl.c.h new file mode 100644 index 0000000000..71c073aa36 --- /dev/null +++ b/Modules/_blake2/clinic/blake2b_impl.c.h @@ -0,0 +1,125 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(py_blake2b_new__doc__, +"blake2b(string=None, *, digest_size=_blake2b.blake2b.MAX_DIGEST_SIZE,\n" +" key=None, salt=None, person=None, fanout=1, depth=1,\n" +" leaf_size=None, node_offset=None, node_depth=0, inner_size=0,\n" +" last_node=False)\n" +"--\n" +"\n" +"Return a new BLAKE2b hash object."); + +static PyObject * +py_blake2b_new_impl(PyTypeObject *type, PyObject *data, int digest_size, + Py_buffer *key, Py_buffer *salt, Py_buffer *person, + int fanout, int depth, PyObject *leaf_size_obj, + PyObject *node_offset_obj, int node_depth, + int inner_size, int last_node); + +static PyObject * +py_blake2b_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"string", "digest_size", "key", "salt", "person", "fanout", "depth", "leaf_size", "node_offset", "node_depth", "inner_size", "last_node", NULL}; + static _PyArg_Parser _parser = {"|O$iy*y*y*iiOOiip:blake2b", _keywords, 0}; + PyObject *data = NULL; + int digest_size = BLAKE2B_OUTBYTES; + Py_buffer key = {NULL, NULL}; + Py_buffer salt = {NULL, NULL}; + Py_buffer person = {NULL, NULL}; + int fanout = 1; + int depth = 1; + PyObject *leaf_size_obj = NULL; + PyObject *node_offset_obj = NULL; + int node_depth = 0; + int inner_size = 0; + int last_node = 0; + + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + &data, &digest_size, &key, &salt, &person, &fanout, &depth, &leaf_size_obj, &node_offset_obj, &node_depth, &inner_size, &last_node)) { + goto exit; + } + return_value = py_blake2b_new_impl(type, data, digest_size, &key, &salt, &person, fanout, depth, leaf_size_obj, node_offset_obj, node_depth, inner_size, last_node); + +exit: + /* Cleanup for key */ + if (key.obj) { + PyBuffer_Release(&key); + } + /* Cleanup for salt */ + if (salt.obj) { + PyBuffer_Release(&salt); + } + /* Cleanup for person */ + if (person.obj) { + PyBuffer_Release(&person); + } + + return return_value; +} + +PyDoc_STRVAR(_blake2b_blake2b_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define _BLAKE2B_BLAKE2B_COPY_METHODDEF \ + {"copy", (PyCFunction)_blake2b_blake2b_copy, METH_NOARGS, _blake2b_blake2b_copy__doc__}, + +static PyObject * +_blake2b_blake2b_copy_impl(BLAKE2bObject *self); + +static PyObject * +_blake2b_blake2b_copy(BLAKE2bObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _blake2b_blake2b_copy_impl(self); +} + +PyDoc_STRVAR(_blake2b_blake2b_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define _BLAKE2B_BLAKE2B_UPDATE_METHODDEF \ + {"update", (PyCFunction)_blake2b_blake2b_update, METH_O, _blake2b_blake2b_update__doc__}, + +PyDoc_STRVAR(_blake2b_blake2b_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of binary data."); + +#define _BLAKE2B_BLAKE2B_DIGEST_METHODDEF \ + {"digest", (PyCFunction)_blake2b_blake2b_digest, METH_NOARGS, _blake2b_blake2b_digest__doc__}, + +static PyObject * +_blake2b_blake2b_digest_impl(BLAKE2bObject *self); + +static PyObject * +_blake2b_blake2b_digest(BLAKE2bObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _blake2b_blake2b_digest_impl(self); +} + +PyDoc_STRVAR(_blake2b_blake2b_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of hexadecimal digits."); + +#define _BLAKE2B_BLAKE2B_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)_blake2b_blake2b_hexdigest, METH_NOARGS, _blake2b_blake2b_hexdigest__doc__}, + +static PyObject * +_blake2b_blake2b_hexdigest_impl(BLAKE2bObject *self); + +static PyObject * +_blake2b_blake2b_hexdigest(BLAKE2bObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _blake2b_blake2b_hexdigest_impl(self); +} +/*[clinic end generated code: output=535a54852c98e51c input=a9049054013a1b77]*/ diff --git a/Modules/_blake2/clinic/blake2s_impl.c.h b/Modules/_blake2/clinic/blake2s_impl.c.h new file mode 100644 index 0000000000..ca908d393b --- /dev/null +++ b/Modules/_blake2/clinic/blake2s_impl.c.h @@ -0,0 +1,125 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(py_blake2s_new__doc__, +"blake2s(string=None, *, digest_size=_blake2s.blake2s.MAX_DIGEST_SIZE,\n" +" key=None, salt=None, person=None, fanout=1, depth=1,\n" +" leaf_size=None, node_offset=None, node_depth=0, inner_size=0,\n" +" last_node=False)\n" +"--\n" +"\n" +"Return a new BLAKE2s hash object."); + +static PyObject * +py_blake2s_new_impl(PyTypeObject *type, PyObject *data, int digest_size, + Py_buffer *key, Py_buffer *salt, Py_buffer *person, + int fanout, int depth, PyObject *leaf_size_obj, + PyObject *node_offset_obj, int node_depth, + int inner_size, int last_node); + +static PyObject * +py_blake2s_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"string", "digest_size", "key", "salt", "person", "fanout", "depth", "leaf_size", "node_offset", "node_depth", "inner_size", "last_node", NULL}; + static _PyArg_Parser _parser = {"|O$iy*y*y*iiOOiip:blake2s", _keywords, 0}; + PyObject *data = NULL; + int digest_size = BLAKE2S_OUTBYTES; + Py_buffer key = {NULL, NULL}; + Py_buffer salt = {NULL, NULL}; + Py_buffer person = {NULL, NULL}; + int fanout = 1; + int depth = 1; + PyObject *leaf_size_obj = NULL; + PyObject *node_offset_obj = NULL; + int node_depth = 0; + int inner_size = 0; + int last_node = 0; + + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + &data, &digest_size, &key, &salt, &person, &fanout, &depth, &leaf_size_obj, &node_offset_obj, &node_depth, &inner_size, &last_node)) { + goto exit; + } + return_value = py_blake2s_new_impl(type, data, digest_size, &key, &salt, &person, fanout, depth, leaf_size_obj, node_offset_obj, node_depth, inner_size, last_node); + +exit: + /* Cleanup for key */ + if (key.obj) { + PyBuffer_Release(&key); + } + /* Cleanup for salt */ + if (salt.obj) { + PyBuffer_Release(&salt); + } + /* Cleanup for person */ + if (person.obj) { + PyBuffer_Release(&person); + } + + return return_value; +} + +PyDoc_STRVAR(_blake2s_blake2s_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define _BLAKE2S_BLAKE2S_COPY_METHODDEF \ + {"copy", (PyCFunction)_blake2s_blake2s_copy, METH_NOARGS, _blake2s_blake2s_copy__doc__}, + +static PyObject * +_blake2s_blake2s_copy_impl(BLAKE2sObject *self); + +static PyObject * +_blake2s_blake2s_copy(BLAKE2sObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _blake2s_blake2s_copy_impl(self); +} + +PyDoc_STRVAR(_blake2s_blake2s_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define _BLAKE2S_BLAKE2S_UPDATE_METHODDEF \ + {"update", (PyCFunction)_blake2s_blake2s_update, METH_O, _blake2s_blake2s_update__doc__}, + +PyDoc_STRVAR(_blake2s_blake2s_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of binary data."); + +#define _BLAKE2S_BLAKE2S_DIGEST_METHODDEF \ + {"digest", (PyCFunction)_blake2s_blake2s_digest, METH_NOARGS, _blake2s_blake2s_digest__doc__}, + +static PyObject * +_blake2s_blake2s_digest_impl(BLAKE2sObject *self); + +static PyObject * +_blake2s_blake2s_digest(BLAKE2sObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _blake2s_blake2s_digest_impl(self); +} + +PyDoc_STRVAR(_blake2s_blake2s_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of hexadecimal digits."); + +#define _BLAKE2S_BLAKE2S_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)_blake2s_blake2s_hexdigest, METH_NOARGS, _blake2s_blake2s_hexdigest__doc__}, + +static PyObject * +_blake2s_blake2s_hexdigest_impl(BLAKE2sObject *self); + +static PyObject * +_blake2s_blake2s_hexdigest(BLAKE2sObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _blake2s_blake2s_hexdigest_impl(self); +} +/*[clinic end generated code: output=535ea7903f9ccf76 input=a9049054013a1b77]*/ diff --git a/Modules/_blake2/impl/blake2-config.h b/Modules/_blake2/impl/blake2-config.h new file mode 100644 index 0000000000..40455b120f --- /dev/null +++ b/Modules/_blake2/impl/blake2-config.h @@ -0,0 +1,74 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#pragma once +#ifndef __BLAKE2_CONFIG_H__ +#define __BLAKE2_CONFIG_H__ + +/* These don't work everywhere */ +#if defined(__SSE2__) || defined(__x86_64__) || defined(__amd64__) +#define HAVE_SSE2 +#endif + +#if defined(__SSSE3__) +#define HAVE_SSSE3 +#endif + +#if defined(__SSE4_1__) +#define HAVE_SSE41 +#endif + +#if defined(__AVX__) +#define HAVE_AVX +#endif + +#if defined(__XOP__) +#define HAVE_XOP +#endif + + +#ifdef HAVE_AVX2 +#ifndef HAVE_AVX +#define HAVE_AVX +#endif +#endif + +#ifdef HAVE_XOP +#ifndef HAVE_AVX +#define HAVE_AVX +#endif +#endif + +#ifdef HAVE_AVX +#ifndef HAVE_SSE41 +#define HAVE_SSE41 +#endif +#endif + +#ifdef HAVE_SSE41 +#ifndef HAVE_SSSE3 +#define HAVE_SSSE3 +#endif +#endif + +#ifdef HAVE_SSSE3 +#define HAVE_SSE2 +#endif + +#if !defined(HAVE_SSE2) +#error "This code requires at least SSE2." +#endif + +#endif + diff --git a/Modules/_blake2/impl/blake2-impl.h b/Modules/_blake2/impl/blake2-impl.h new file mode 100644 index 0000000000..bbe3c0f1cf --- /dev/null +++ b/Modules/_blake2/impl/blake2-impl.h @@ -0,0 +1,139 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#pragma once +#ifndef __BLAKE2_IMPL_H__ +#define __BLAKE2_IMPL_H__ + +#include +#include + +BLAKE2_LOCAL_INLINE(uint32_t) load32( const void *src ) +{ +#if defined(NATIVE_LITTLE_ENDIAN) + uint32_t w; + memcpy(&w, src, sizeof w); + return w; +#else + const uint8_t *p = ( const uint8_t * )src; + uint32_t w = *p++; + w |= ( uint32_t )( *p++ ) << 8; + w |= ( uint32_t )( *p++ ) << 16; + w |= ( uint32_t )( *p++ ) << 24; + return w; +#endif +} + +BLAKE2_LOCAL_INLINE(uint64_t) load64( const void *src ) +{ +#if defined(NATIVE_LITTLE_ENDIAN) + uint64_t w; + memcpy(&w, src, sizeof w); + return w; +#else + const uint8_t *p = ( const uint8_t * )src; + uint64_t w = *p++; + w |= ( uint64_t )( *p++ ) << 8; + w |= ( uint64_t )( *p++ ) << 16; + w |= ( uint64_t )( *p++ ) << 24; + w |= ( uint64_t )( *p++ ) << 32; + w |= ( uint64_t )( *p++ ) << 40; + w |= ( uint64_t )( *p++ ) << 48; + w |= ( uint64_t )( *p++ ) << 56; + return w; +#endif +} + +BLAKE2_LOCAL_INLINE(void) store32( void *dst, uint32_t w ) +{ +#if defined(NATIVE_LITTLE_ENDIAN) + memcpy(dst, &w, sizeof w); +#else + uint8_t *p = ( uint8_t * )dst; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; +#endif +} + +BLAKE2_LOCAL_INLINE(void) store64( void *dst, uint64_t w ) +{ +#if defined(NATIVE_LITTLE_ENDIAN) + memcpy(dst, &w, sizeof w); +#else + uint8_t *p = ( uint8_t * )dst; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; +#endif +} + +BLAKE2_LOCAL_INLINE(uint64_t) load48( const void *src ) +{ + const uint8_t *p = ( const uint8_t * )src; + uint64_t w = *p++; + w |= ( uint64_t )( *p++ ) << 8; + w |= ( uint64_t )( *p++ ) << 16; + w |= ( uint64_t )( *p++ ) << 24; + w |= ( uint64_t )( *p++ ) << 32; + w |= ( uint64_t )( *p++ ) << 40; + return w; +} + +BLAKE2_LOCAL_INLINE(void) store48( void *dst, uint64_t w ) +{ + uint8_t *p = ( uint8_t * )dst; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; +} + +BLAKE2_LOCAL_INLINE(uint32_t) rotl32( const uint32_t w, const unsigned c ) +{ + return ( w << c ) | ( w >> ( 32 - c ) ); +} + +BLAKE2_LOCAL_INLINE(uint64_t) rotl64( const uint64_t w, const unsigned c ) +{ + return ( w << c ) | ( w >> ( 64 - c ) ); +} + +BLAKE2_LOCAL_INLINE(uint32_t) rotr32( const uint32_t w, const unsigned c ) +{ + return ( w >> c ) | ( w << ( 32 - c ) ); +} + +BLAKE2_LOCAL_INLINE(uint64_t) rotr64( const uint64_t w, const unsigned c ) +{ + return ( w >> c ) | ( w << ( 64 - c ) ); +} + +/* prevents compiler optimizing out memset() */ +BLAKE2_LOCAL_INLINE(void) secure_zero_memory(void *v, size_t n) +{ + static void *(*const volatile memset_v)(void *, int, size_t) = &memset; + memset_v(v, 0, n); +} + +#endif + diff --git a/Modules/_blake2/impl/blake2.h b/Modules/_blake2/impl/blake2.h new file mode 100644 index 0000000000..1a9fdf4302 --- /dev/null +++ b/Modules/_blake2/impl/blake2.h @@ -0,0 +1,161 @@ +/* + BLAKE2 reference source code package - reference C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#pragma once +#ifndef __BLAKE2_H__ +#define __BLAKE2_H__ + +#include +#include + +#ifdef BLAKE2_NO_INLINE +#define BLAKE2_LOCAL_INLINE(type) static type +#endif + +#ifndef BLAKE2_LOCAL_INLINE +#define BLAKE2_LOCAL_INLINE(type) static inline type +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + + enum blake2s_constant + { + BLAKE2S_BLOCKBYTES = 64, + BLAKE2S_OUTBYTES = 32, + BLAKE2S_KEYBYTES = 32, + BLAKE2S_SALTBYTES = 8, + BLAKE2S_PERSONALBYTES = 8 + }; + + enum blake2b_constant + { + BLAKE2B_BLOCKBYTES = 128, + BLAKE2B_OUTBYTES = 64, + BLAKE2B_KEYBYTES = 64, + BLAKE2B_SALTBYTES = 16, + BLAKE2B_PERSONALBYTES = 16 + }; + + typedef struct __blake2s_state + { + uint32_t h[8]; + uint32_t t[2]; + uint32_t f[2]; + uint8_t buf[2 * BLAKE2S_BLOCKBYTES]; + size_t buflen; + uint8_t last_node; + } blake2s_state; + + typedef struct __blake2b_state + { + uint64_t h[8]; + uint64_t t[2]; + uint64_t f[2]; + uint8_t buf[2 * BLAKE2B_BLOCKBYTES]; + size_t buflen; + uint8_t last_node; + } blake2b_state; + + typedef struct __blake2sp_state + { + blake2s_state S[8][1]; + blake2s_state R[1]; + uint8_t buf[8 * BLAKE2S_BLOCKBYTES]; + size_t buflen; + } blake2sp_state; + + typedef struct __blake2bp_state + { + blake2b_state S[4][1]; + blake2b_state R[1]; + uint8_t buf[4 * BLAKE2B_BLOCKBYTES]; + size_t buflen; + } blake2bp_state; + + +#pragma pack(push, 1) + typedef struct __blake2s_param + { + uint8_t digest_length; /* 1 */ + uint8_t key_length; /* 2 */ + uint8_t fanout; /* 3 */ + uint8_t depth; /* 4 */ + uint32_t leaf_length; /* 8 */ + uint8_t node_offset[6];// 14 + uint8_t node_depth; /* 15 */ + uint8_t inner_length; /* 16 */ + /* uint8_t reserved[0]; */ + uint8_t salt[BLAKE2S_SALTBYTES]; /* 24 */ + uint8_t personal[BLAKE2S_PERSONALBYTES]; /* 32 */ + } blake2s_param; + + typedef struct __blake2b_param + { + uint8_t digest_length; /* 1 */ + uint8_t key_length; /* 2 */ + uint8_t fanout; /* 3 */ + uint8_t depth; /* 4 */ + uint32_t leaf_length; /* 8 */ + uint64_t node_offset; /* 16 */ + uint8_t node_depth; /* 17 */ + uint8_t inner_length; /* 18 */ + uint8_t reserved[14]; /* 32 */ + uint8_t salt[BLAKE2B_SALTBYTES]; /* 48 */ + uint8_t personal[BLAKE2B_PERSONALBYTES]; /* 64 */ + } blake2b_param; +#pragma pack(pop) + + /* Streaming API */ + int blake2s_init( blake2s_state *S, const uint8_t outlen ); + int blake2s_init_key( blake2s_state *S, const uint8_t outlen, const void *key, const uint8_t keylen ); + int blake2s_init_param( blake2s_state *S, const blake2s_param *P ); + int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen ); + int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen ); + + int blake2b_init( blake2b_state *S, const uint8_t outlen ); + int blake2b_init_key( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen ); + int blake2b_init_param( blake2b_state *S, const blake2b_param *P ); + int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen ); + int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen ); + + int blake2sp_init( blake2sp_state *S, const uint8_t outlen ); + int blake2sp_init_key( blake2sp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen ); + int blake2sp_update( blake2sp_state *S, const uint8_t *in, uint64_t inlen ); + int blake2sp_final( blake2sp_state *S, uint8_t *out, uint8_t outlen ); + + int blake2bp_init( blake2bp_state *S, const uint8_t outlen ); + int blake2bp_init_key( blake2bp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen ); + int blake2bp_update( blake2bp_state *S, const uint8_t *in, uint64_t inlen ); + int blake2bp_final( blake2bp_state *S, uint8_t *out, uint8_t outlen ); + + /* Simple API */ + int blake2s( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen ); + int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen ); + + int blake2sp( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen ); + int blake2bp( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen ); + + static inline int blake2( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen ) + { + return blake2b( out, in, key, outlen, inlen, keylen ); + } + +#if defined(__cplusplus) +} +#endif + +#endif + diff --git a/Modules/_blake2/impl/blake2b-load-sse2.h b/Modules/_blake2/impl/blake2b-load-sse2.h new file mode 100644 index 0000000000..0004a98564 --- /dev/null +++ b/Modules/_blake2/impl/blake2b-load-sse2.h @@ -0,0 +1,70 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#pragma once +#ifndef __BLAKE2B_LOAD_SSE2_H__ +#define __BLAKE2B_LOAD_SSE2_H__ + +#define LOAD_MSG_0_1(b0, b1) b0 = _mm_set_epi64x(m2, m0); b1 = _mm_set_epi64x(m6, m4) +#define LOAD_MSG_0_2(b0, b1) b0 = _mm_set_epi64x(m3, m1); b1 = _mm_set_epi64x(m7, m5) +#define LOAD_MSG_0_3(b0, b1) b0 = _mm_set_epi64x(m10, m8); b1 = _mm_set_epi64x(m14, m12) +#define LOAD_MSG_0_4(b0, b1) b0 = _mm_set_epi64x(m11, m9); b1 = _mm_set_epi64x(m15, m13) +#define LOAD_MSG_1_1(b0, b1) b0 = _mm_set_epi64x(m4, m14); b1 = _mm_set_epi64x(m13, m9) +#define LOAD_MSG_1_2(b0, b1) b0 = _mm_set_epi64x(m8, m10); b1 = _mm_set_epi64x(m6, m15) +#define LOAD_MSG_1_3(b0, b1) b0 = _mm_set_epi64x(m0, m1); b1 = _mm_set_epi64x(m5, m11) +#define LOAD_MSG_1_4(b0, b1) b0 = _mm_set_epi64x(m2, m12); b1 = _mm_set_epi64x(m3, m7) +#define LOAD_MSG_2_1(b0, b1) b0 = _mm_set_epi64x(m12, m11); b1 = _mm_set_epi64x(m15, m5) +#define LOAD_MSG_2_2(b0, b1) b0 = _mm_set_epi64x(m0, m8); b1 = _mm_set_epi64x(m13, m2) +#define LOAD_MSG_2_3(b0, b1) b0 = _mm_set_epi64x(m3, m10); b1 = _mm_set_epi64x(m9, m7) +#define LOAD_MSG_2_4(b0, b1) b0 = _mm_set_epi64x(m6, m14); b1 = _mm_set_epi64x(m4, m1) +#define LOAD_MSG_3_1(b0, b1) b0 = _mm_set_epi64x(m3, m7); b1 = _mm_set_epi64x(m11, m13) +#define LOAD_MSG_3_2(b0, b1) b0 = _mm_set_epi64x(m1, m9); b1 = _mm_set_epi64x(m14, m12) +#define LOAD_MSG_3_3(b0, b1) b0 = _mm_set_epi64x(m5, m2); b1 = _mm_set_epi64x(m15, m4) +#define LOAD_MSG_3_4(b0, b1) b0 = _mm_set_epi64x(m10, m6); b1 = _mm_set_epi64x(m8, m0) +#define LOAD_MSG_4_1(b0, b1) b0 = _mm_set_epi64x(m5, m9); b1 = _mm_set_epi64x(m10, m2) +#define LOAD_MSG_4_2(b0, b1) b0 = _mm_set_epi64x(m7, m0); b1 = _mm_set_epi64x(m15, m4) +#define LOAD_MSG_4_3(b0, b1) b0 = _mm_set_epi64x(m11, m14); b1 = _mm_set_epi64x(m3, m6) +#define LOAD_MSG_4_4(b0, b1) b0 = _mm_set_epi64x(m12, m1); b1 = _mm_set_epi64x(m13, m8) +#define LOAD_MSG_5_1(b0, b1) b0 = _mm_set_epi64x(m6, m2); b1 = _mm_set_epi64x(m8, m0) +#define LOAD_MSG_5_2(b0, b1) b0 = _mm_set_epi64x(m10, m12); b1 = _mm_set_epi64x(m3, m11) +#define LOAD_MSG_5_3(b0, b1) b0 = _mm_set_epi64x(m7, m4); b1 = _mm_set_epi64x(m1, m15) +#define LOAD_MSG_5_4(b0, b1) b0 = _mm_set_epi64x(m5, m13); b1 = _mm_set_epi64x(m9, m14) +#define LOAD_MSG_6_1(b0, b1) b0 = _mm_set_epi64x(m1, m12); b1 = _mm_set_epi64x(m4, m14) +#define LOAD_MSG_6_2(b0, b1) b0 = _mm_set_epi64x(m15, m5); b1 = _mm_set_epi64x(m10, m13) +#define LOAD_MSG_6_3(b0, b1) b0 = _mm_set_epi64x(m6, m0); b1 = _mm_set_epi64x(m8, m9) +#define LOAD_MSG_6_4(b0, b1) b0 = _mm_set_epi64x(m3, m7); b1 = _mm_set_epi64x(m11, m2) +#define LOAD_MSG_7_1(b0, b1) b0 = _mm_set_epi64x(m7, m13); b1 = _mm_set_epi64x(m3, m12) +#define LOAD_MSG_7_2(b0, b1) b0 = _mm_set_epi64x(m14, m11); b1 = _mm_set_epi64x(m9, m1) +#define LOAD_MSG_7_3(b0, b1) b0 = _mm_set_epi64x(m15, m5); b1 = _mm_set_epi64x(m2, m8) +#define LOAD_MSG_7_4(b0, b1) b0 = _mm_set_epi64x(m4, m0); b1 = _mm_set_epi64x(m10, m6) +#define LOAD_MSG_8_1(b0, b1) b0 = _mm_set_epi64x(m14, m6); b1 = _mm_set_epi64x(m0, m11) +#define LOAD_MSG_8_2(b0, b1) b0 = _mm_set_epi64x(m9, m15); b1 = _mm_set_epi64x(m8, m3) +#define LOAD_MSG_8_3(b0, b1) b0 = _mm_set_epi64x(m13, m12); b1 = _mm_set_epi64x(m10, m1) +#define LOAD_MSG_8_4(b0, b1) b0 = _mm_set_epi64x(m7, m2); b1 = _mm_set_epi64x(m5, m4) +#define LOAD_MSG_9_1(b0, b1) b0 = _mm_set_epi64x(m8, m10); b1 = _mm_set_epi64x(m1, m7) +#define LOAD_MSG_9_2(b0, b1) b0 = _mm_set_epi64x(m4, m2); b1 = _mm_set_epi64x(m5, m6) +#define LOAD_MSG_9_3(b0, b1) b0 = _mm_set_epi64x(m9, m15); b1 = _mm_set_epi64x(m13, m3) +#define LOAD_MSG_9_4(b0, b1) b0 = _mm_set_epi64x(m14, m11); b1 = _mm_set_epi64x(m0, m12) +#define LOAD_MSG_10_1(b0, b1) b0 = _mm_set_epi64x(m2, m0); b1 = _mm_set_epi64x(m6, m4) +#define LOAD_MSG_10_2(b0, b1) b0 = _mm_set_epi64x(m3, m1); b1 = _mm_set_epi64x(m7, m5) +#define LOAD_MSG_10_3(b0, b1) b0 = _mm_set_epi64x(m10, m8); b1 = _mm_set_epi64x(m14, m12) +#define LOAD_MSG_10_4(b0, b1) b0 = _mm_set_epi64x(m11, m9); b1 = _mm_set_epi64x(m15, m13) +#define LOAD_MSG_11_1(b0, b1) b0 = _mm_set_epi64x(m4, m14); b1 = _mm_set_epi64x(m13, m9) +#define LOAD_MSG_11_2(b0, b1) b0 = _mm_set_epi64x(m8, m10); b1 = _mm_set_epi64x(m6, m15) +#define LOAD_MSG_11_3(b0, b1) b0 = _mm_set_epi64x(m0, m1); b1 = _mm_set_epi64x(m5, m11) +#define LOAD_MSG_11_4(b0, b1) b0 = _mm_set_epi64x(m2, m12); b1 = _mm_set_epi64x(m3, m7) + + +#endif + diff --git a/Modules/_blake2/impl/blake2b-load-sse41.h b/Modules/_blake2/impl/blake2b-load-sse41.h new file mode 100644 index 0000000000..42a1349351 --- /dev/null +++ b/Modules/_blake2/impl/blake2b-load-sse41.h @@ -0,0 +1,404 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#pragma once +#ifndef __BLAKE2B_LOAD_SSE41_H__ +#define __BLAKE2B_LOAD_SSE41_H__ + +#define LOAD_MSG_0_1(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m0, m1); \ +b1 = _mm_unpacklo_epi64(m2, m3); \ +} while(0) + + +#define LOAD_MSG_0_2(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m0, m1); \ +b1 = _mm_unpackhi_epi64(m2, m3); \ +} while(0) + + +#define LOAD_MSG_0_3(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m4, m5); \ +b1 = _mm_unpacklo_epi64(m6, m7); \ +} while(0) + + +#define LOAD_MSG_0_4(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m4, m5); \ +b1 = _mm_unpackhi_epi64(m6, m7); \ +} while(0) + + +#define LOAD_MSG_1_1(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m7, m2); \ +b1 = _mm_unpackhi_epi64(m4, m6); \ +} while(0) + + +#define LOAD_MSG_1_2(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m5, m4); \ +b1 = _mm_alignr_epi8(m3, m7, 8); \ +} while(0) + + +#define LOAD_MSG_1_3(b0, b1) \ +do \ +{ \ +b0 = _mm_shuffle_epi32(m0, _MM_SHUFFLE(1,0,3,2)); \ +b1 = _mm_unpackhi_epi64(m5, m2); \ +} while(0) + + +#define LOAD_MSG_1_4(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m6, m1); \ +b1 = _mm_unpackhi_epi64(m3, m1); \ +} while(0) + + +#define LOAD_MSG_2_1(b0, b1) \ +do \ +{ \ +b0 = _mm_alignr_epi8(m6, m5, 8); \ +b1 = _mm_unpackhi_epi64(m2, m7); \ +} while(0) + + +#define LOAD_MSG_2_2(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m4, m0); \ +b1 = _mm_blend_epi16(m1, m6, 0xF0); \ +} while(0) + + +#define LOAD_MSG_2_3(b0, b1) \ +do \ +{ \ +b0 = _mm_blend_epi16(m5, m1, 0xF0); \ +b1 = _mm_unpackhi_epi64(m3, m4); \ +} while(0) + + +#define LOAD_MSG_2_4(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m7, m3); \ +b1 = _mm_alignr_epi8(m2, m0, 8); \ +} while(0) + + +#define LOAD_MSG_3_1(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m3, m1); \ +b1 = _mm_unpackhi_epi64(m6, m5); \ +} while(0) + + +#define LOAD_MSG_3_2(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m4, m0); \ +b1 = _mm_unpacklo_epi64(m6, m7); \ +} while(0) + + +#define LOAD_MSG_3_3(b0, b1) \ +do \ +{ \ +b0 = _mm_blend_epi16(m1, m2, 0xF0); \ +b1 = _mm_blend_epi16(m2, m7, 0xF0); \ +} while(0) + + +#define LOAD_MSG_3_4(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m3, m5); \ +b1 = _mm_unpacklo_epi64(m0, m4); \ +} while(0) + + +#define LOAD_MSG_4_1(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m4, m2); \ +b1 = _mm_unpacklo_epi64(m1, m5); \ +} while(0) + + +#define LOAD_MSG_4_2(b0, b1) \ +do \ +{ \ +b0 = _mm_blend_epi16(m0, m3, 0xF0); \ +b1 = _mm_blend_epi16(m2, m7, 0xF0); \ +} while(0) + + +#define LOAD_MSG_4_3(b0, b1) \ +do \ +{ \ +b0 = _mm_blend_epi16(m7, m5, 0xF0); \ +b1 = _mm_blend_epi16(m3, m1, 0xF0); \ +} while(0) + + +#define LOAD_MSG_4_4(b0, b1) \ +do \ +{ \ +b0 = _mm_alignr_epi8(m6, m0, 8); \ +b1 = _mm_blend_epi16(m4, m6, 0xF0); \ +} while(0) + + +#define LOAD_MSG_5_1(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m1, m3); \ +b1 = _mm_unpacklo_epi64(m0, m4); \ +} while(0) + + +#define LOAD_MSG_5_2(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m6, m5); \ +b1 = _mm_unpackhi_epi64(m5, m1); \ +} while(0) + + +#define LOAD_MSG_5_3(b0, b1) \ +do \ +{ \ +b0 = _mm_blend_epi16(m2, m3, 0xF0); \ +b1 = _mm_unpackhi_epi64(m7, m0); \ +} while(0) + + +#define LOAD_MSG_5_4(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m6, m2); \ +b1 = _mm_blend_epi16(m7, m4, 0xF0); \ +} while(0) + + +#define LOAD_MSG_6_1(b0, b1) \ +do \ +{ \ +b0 = _mm_blend_epi16(m6, m0, 0xF0); \ +b1 = _mm_unpacklo_epi64(m7, m2); \ +} while(0) + + +#define LOAD_MSG_6_2(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m2, m7); \ +b1 = _mm_alignr_epi8(m5, m6, 8); \ +} while(0) + + +#define LOAD_MSG_6_3(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m0, m3); \ +b1 = _mm_shuffle_epi32(m4, _MM_SHUFFLE(1,0,3,2)); \ +} while(0) + + +#define LOAD_MSG_6_4(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m3, m1); \ +b1 = _mm_blend_epi16(m1, m5, 0xF0); \ +} while(0) + + +#define LOAD_MSG_7_1(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m6, m3); \ +b1 = _mm_blend_epi16(m6, m1, 0xF0); \ +} while(0) + + +#define LOAD_MSG_7_2(b0, b1) \ +do \ +{ \ +b0 = _mm_alignr_epi8(m7, m5, 8); \ +b1 = _mm_unpackhi_epi64(m0, m4); \ +} while(0) + + +#define LOAD_MSG_7_3(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m2, m7); \ +b1 = _mm_unpacklo_epi64(m4, m1); \ +} while(0) + + +#define LOAD_MSG_7_4(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m0, m2); \ +b1 = _mm_unpacklo_epi64(m3, m5); \ +} while(0) + + +#define LOAD_MSG_8_1(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m3, m7); \ +b1 = _mm_alignr_epi8(m0, m5, 8); \ +} while(0) + + +#define LOAD_MSG_8_2(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m7, m4); \ +b1 = _mm_alignr_epi8(m4, m1, 8); \ +} while(0) + + +#define LOAD_MSG_8_3(b0, b1) \ +do \ +{ \ +b0 = m6; \ +b1 = _mm_alignr_epi8(m5, m0, 8); \ +} while(0) + + +#define LOAD_MSG_8_4(b0, b1) \ +do \ +{ \ +b0 = _mm_blend_epi16(m1, m3, 0xF0); \ +b1 = m2; \ +} while(0) + + +#define LOAD_MSG_9_1(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m5, m4); \ +b1 = _mm_unpackhi_epi64(m3, m0); \ +} while(0) + + +#define LOAD_MSG_9_2(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m1, m2); \ +b1 = _mm_blend_epi16(m3, m2, 0xF0); \ +} while(0) + + +#define LOAD_MSG_9_3(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m7, m4); \ +b1 = _mm_unpackhi_epi64(m1, m6); \ +} while(0) + + +#define LOAD_MSG_9_4(b0, b1) \ +do \ +{ \ +b0 = _mm_alignr_epi8(m7, m5, 8); \ +b1 = _mm_unpacklo_epi64(m6, m0); \ +} while(0) + + +#define LOAD_MSG_10_1(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m0, m1); \ +b1 = _mm_unpacklo_epi64(m2, m3); \ +} while(0) + + +#define LOAD_MSG_10_2(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m0, m1); \ +b1 = _mm_unpackhi_epi64(m2, m3); \ +} while(0) + + +#define LOAD_MSG_10_3(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m4, m5); \ +b1 = _mm_unpacklo_epi64(m6, m7); \ +} while(0) + + +#define LOAD_MSG_10_4(b0, b1) \ +do \ +{ \ +b0 = _mm_unpackhi_epi64(m4, m5); \ +b1 = _mm_unpackhi_epi64(m6, m7); \ +} while(0) + + +#define LOAD_MSG_11_1(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m7, m2); \ +b1 = _mm_unpackhi_epi64(m4, m6); \ +} while(0) + + +#define LOAD_MSG_11_2(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m5, m4); \ +b1 = _mm_alignr_epi8(m3, m7, 8); \ +} while(0) + + +#define LOAD_MSG_11_3(b0, b1) \ +do \ +{ \ +b0 = _mm_shuffle_epi32(m0, _MM_SHUFFLE(1,0,3,2)); \ +b1 = _mm_unpackhi_epi64(m5, m2); \ +} while(0) + + +#define LOAD_MSG_11_4(b0, b1) \ +do \ +{ \ +b0 = _mm_unpacklo_epi64(m6, m1); \ +b1 = _mm_unpackhi_epi64(m3, m1); \ +} while(0) + + +#endif + diff --git a/Modules/_blake2/impl/blake2b-ref.c b/Modules/_blake2/impl/blake2b-ref.c new file mode 100644 index 0000000000..ac91568d2b --- /dev/null +++ b/Modules/_blake2/impl/blake2b-ref.c @@ -0,0 +1,416 @@ +/* + BLAKE2 reference source code package - reference C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ + +#include +#include +#include + +#include "blake2.h" +#include "blake2-impl.h" + +static const uint64_t blake2b_IV[8] = +{ + 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, + 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, + 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, + 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL +}; + +static const uint8_t blake2b_sigma[12][16] = +{ + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } +}; + + +BLAKE2_LOCAL_INLINE(int) blake2b_set_lastnode( blake2b_state *S ) +{ + S->f[1] = -1; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_clear_lastnode( blake2b_state *S ) +{ + S->f[1] = 0; + return 0; +} + +/* Some helper functions, not necessarily useful */ +BLAKE2_LOCAL_INLINE(int) blake2b_is_lastblock( const blake2b_state *S ) +{ + return S->f[0] != 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_set_lastblock( blake2b_state *S ) +{ + if( S->last_node ) blake2b_set_lastnode( S ); + + S->f[0] = -1; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_clear_lastblock( blake2b_state *S ) +{ + if( S->last_node ) blake2b_clear_lastnode( S ); + + S->f[0] = 0; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_increment_counter( blake2b_state *S, const uint64_t inc ) +{ + S->t[0] += inc; + S->t[1] += ( S->t[0] < inc ); + return 0; +} + + + +/* Parameter-related functions */ +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_digest_length( blake2b_param *P, const uint8_t digest_length ) +{ + P->digest_length = digest_length; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_fanout( blake2b_param *P, const uint8_t fanout ) +{ + P->fanout = fanout; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_max_depth( blake2b_param *P, const uint8_t depth ) +{ + P->depth = depth; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_leaf_length( blake2b_param *P, const uint32_t leaf_length ) +{ + store32( &P->leaf_length, leaf_length ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_node_offset( blake2b_param *P, const uint64_t node_offset ) +{ + store64( &P->node_offset, node_offset ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_node_depth( blake2b_param *P, const uint8_t node_depth ) +{ + P->node_depth = node_depth; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_inner_length( blake2b_param *P, const uint8_t inner_length ) +{ + P->inner_length = inner_length; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_salt( blake2b_param *P, const uint8_t salt[BLAKE2B_SALTBYTES] ) +{ + memcpy( P->salt, salt, BLAKE2B_SALTBYTES ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_personal( blake2b_param *P, const uint8_t personal[BLAKE2B_PERSONALBYTES] ) +{ + memcpy( P->personal, personal, BLAKE2B_PERSONALBYTES ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_init0( blake2b_state *S ) +{ + memset( S, 0, sizeof( blake2b_state ) ); + + for( int i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i]; + + return 0; +} + +/* init xors IV with input parameter block */ +int blake2b_init_param( blake2b_state *S, const blake2b_param *P ) +{ + const uint8_t *p = ( const uint8_t * )( P ); + + blake2b_init0( S ); + + /* IV XOR ParamBlock */ + for( size_t i = 0; i < 8; ++i ) + S->h[i] ^= load64( p + sizeof( S->h[i] ) * i ); + + return 0; +} + + + +int blake2b_init( blake2b_state *S, const uint8_t outlen ) +{ + blake2b_param P[1]; + + if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; + + P->digest_length = outlen; + P->key_length = 0; + P->fanout = 1; + P->depth = 1; + store32( &P->leaf_length, 0 ); + store64( &P->node_offset, 0 ); + P->node_depth = 0; + P->inner_length = 0; + memset( P->reserved, 0, sizeof( P->reserved ) ); + memset( P->salt, 0, sizeof( P->salt ) ); + memset( P->personal, 0, sizeof( P->personal ) ); + return blake2b_init_param( S, P ); +} + + +int blake2b_init_key( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen ) +{ + blake2b_param P[1]; + + if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; + + if ( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return -1; + + P->digest_length = outlen; + P->key_length = keylen; + P->fanout = 1; + P->depth = 1; + store32( &P->leaf_length, 0 ); + store64( &P->node_offset, 0 ); + P->node_depth = 0; + P->inner_length = 0; + memset( P->reserved, 0, sizeof( P->reserved ) ); + memset( P->salt, 0, sizeof( P->salt ) ); + memset( P->personal, 0, sizeof( P->personal ) ); + + if( blake2b_init_param( S, P ) < 0 ) return -1; + + { + uint8_t block[BLAKE2B_BLOCKBYTES]; + memset( block, 0, BLAKE2B_BLOCKBYTES ); + memcpy( block, key, keylen ); + blake2b_update( S, block, BLAKE2B_BLOCKBYTES ); + secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ + } + return 0; +} + +static int blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] ) +{ + uint64_t m[16]; + uint64_t v[16]; + int i; + + for( i = 0; i < 16; ++i ) + m[i] = load64( block + i * sizeof( m[i] ) ); + + for( i = 0; i < 8; ++i ) + v[i] = S->h[i]; + + v[ 8] = blake2b_IV[0]; + v[ 9] = blake2b_IV[1]; + v[10] = blake2b_IV[2]; + v[11] = blake2b_IV[3]; + v[12] = S->t[0] ^ blake2b_IV[4]; + v[13] = S->t[1] ^ blake2b_IV[5]; + v[14] = S->f[0] ^ blake2b_IV[6]; + v[15] = S->f[1] ^ blake2b_IV[7]; +#define G(r,i,a,b,c,d) \ + do { \ + a = a + b + m[blake2b_sigma[r][2*i+0]]; \ + d = rotr64(d ^ a, 32); \ + c = c + d; \ + b = rotr64(b ^ c, 24); \ + a = a + b + m[blake2b_sigma[r][2*i+1]]; \ + d = rotr64(d ^ a, 16); \ + c = c + d; \ + b = rotr64(b ^ c, 63); \ + } while(0) +#define ROUND(r) \ + do { \ + G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \ + G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \ + G(r,2,v[ 2],v[ 6],v[10],v[14]); \ + G(r,3,v[ 3],v[ 7],v[11],v[15]); \ + G(r,4,v[ 0],v[ 5],v[10],v[15]); \ + G(r,5,v[ 1],v[ 6],v[11],v[12]); \ + G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \ + G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \ + } while(0) + ROUND( 0 ); + ROUND( 1 ); + ROUND( 2 ); + ROUND( 3 ); + ROUND( 4 ); + ROUND( 5 ); + ROUND( 6 ); + ROUND( 7 ); + ROUND( 8 ); + ROUND( 9 ); + ROUND( 10 ); + ROUND( 11 ); + + for( i = 0; i < 8; ++i ) + S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; + +#undef G +#undef ROUND + return 0; +} + +/* inlen now in bytes */ +int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen ) +{ + while( inlen > 0 ) + { + size_t left = S->buflen; + size_t fill = 2 * BLAKE2B_BLOCKBYTES - left; + + if( inlen > fill ) + { + memcpy( S->buf + left, in, fill ); /* Fill buffer */ + S->buflen += fill; + blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); + blake2b_compress( S, S->buf ); /* Compress */ + memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); /* Shift buffer left */ + S->buflen -= BLAKE2B_BLOCKBYTES; + in += fill; + inlen -= fill; + } + else /* inlen <= fill */ + { + memcpy( S->buf + left, in, inlen ); + S->buflen += inlen; /* Be lazy, do not compress */ + in += inlen; + inlen -= inlen; + } + } + + return 0; +} + +/* Is this correct? */ +int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen ) +{ + uint8_t buffer[BLAKE2B_OUTBYTES] = {0}; + + if( out == NULL || outlen == 0 || outlen > BLAKE2B_OUTBYTES ) + return -1; + + if( blake2b_is_lastblock( S ) ) + return -1; + + if( S->buflen > BLAKE2B_BLOCKBYTES ) + { + blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); + blake2b_compress( S, S->buf ); + S->buflen -= BLAKE2B_BLOCKBYTES; + memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, S->buflen ); + } + + blake2b_increment_counter( S, S->buflen ); + blake2b_set_lastblock( S ); + memset( S->buf + S->buflen, 0, 2 * BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */ + blake2b_compress( S, S->buf ); + + for( int i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ + store64( buffer + sizeof( S->h[i] ) * i, S->h[i] ); + + memcpy( out, buffer, outlen ); + return 0; +} + +/* inlen, at least, should be uint64_t. Others can be size_t. */ +int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen ) +{ + blake2b_state S[1]; + + /* Verify parameters */ + if ( NULL == in && inlen > 0 ) return -1; + + if ( NULL == out ) return -1; + + if( NULL == key && keylen > 0 ) return -1; + + if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; + + if( keylen > BLAKE2B_KEYBYTES ) return -1; + + if( keylen > 0 ) + { + if( blake2b_init_key( S, outlen, key, keylen ) < 0 ) return -1; + } + else + { + if( blake2b_init( S, outlen ) < 0 ) return -1; + } + + blake2b_update( S, ( const uint8_t * )in, inlen ); + blake2b_final( S, out, outlen ); + return 0; +} + +#if defined(SUPERCOP) +int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) +{ + return blake2b( out, in, NULL, BLAKE2B_OUTBYTES, inlen, 0 ); +} +#endif + +#if defined(BLAKE2B_SELFTEST) +#include +#include "blake2-kat.h" +int main( int argc, char **argv ) +{ + uint8_t key[BLAKE2B_KEYBYTES]; + uint8_t buf[KAT_LENGTH]; + + for( size_t i = 0; i < BLAKE2B_KEYBYTES; ++i ) + key[i] = ( uint8_t )i; + + for( size_t i = 0; i < KAT_LENGTH; ++i ) + buf[i] = ( uint8_t )i; + + for( size_t i = 0; i < KAT_LENGTH; ++i ) + { + uint8_t hash[BLAKE2B_OUTBYTES]; + blake2b( hash, buf, key, BLAKE2B_OUTBYTES, i, BLAKE2B_KEYBYTES ); + + if( 0 != memcmp( hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES ) ) + { + puts( "error" ); + return -1; + } + } + + puts( "ok" ); + return 0; +} +#endif + diff --git a/Modules/_blake2/impl/blake2b-round.h b/Modules/_blake2/impl/blake2b-round.h new file mode 100644 index 0000000000..4ce2255409 --- /dev/null +++ b/Modules/_blake2/impl/blake2b-round.h @@ -0,0 +1,159 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#pragma once +#ifndef __BLAKE2B_ROUND_H__ +#define __BLAKE2B_ROUND_H__ + +#define LOADU(p) _mm_loadu_si128( (const __m128i *)(p) ) +#define STOREU(p,r) _mm_storeu_si128((__m128i *)(p), r) + +#define TOF(reg) _mm_castsi128_ps((reg)) +#define TOI(reg) _mm_castps_si128((reg)) + +#define LIKELY(x) __builtin_expect((x),1) + + +/* Microarchitecture-specific macros */ +#ifndef HAVE_XOP +#ifdef HAVE_SSSE3 +#define _mm_roti_epi64(x, c) \ + (-(c) == 32) ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2,3,0,1)) \ + : (-(c) == 24) ? _mm_shuffle_epi8((x), r24) \ + : (-(c) == 16) ? _mm_shuffle_epi8((x), r16) \ + : (-(c) == 63) ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), _mm_add_epi64((x), (x))) \ + : _mm_xor_si128(_mm_srli_epi64((x), -(c)), _mm_slli_epi64((x), 64-(-(c)))) +#else +#define _mm_roti_epi64(r, c) _mm_xor_si128(_mm_srli_epi64( (r), -(c) ),_mm_slli_epi64( (r), 64-(-(c)) )) +#endif +#else +/* ... */ +#endif + + + +#define G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \ + row1l = _mm_add_epi64(_mm_add_epi64(row1l, b0), row2l); \ + row1h = _mm_add_epi64(_mm_add_epi64(row1h, b1), row2h); \ + \ + row4l = _mm_xor_si128(row4l, row1l); \ + row4h = _mm_xor_si128(row4h, row1h); \ + \ + row4l = _mm_roti_epi64(row4l, -32); \ + row4h = _mm_roti_epi64(row4h, -32); \ + \ + row3l = _mm_add_epi64(row3l, row4l); \ + row3h = _mm_add_epi64(row3h, row4h); \ + \ + row2l = _mm_xor_si128(row2l, row3l); \ + row2h = _mm_xor_si128(row2h, row3h); \ + \ + row2l = _mm_roti_epi64(row2l, -24); \ + row2h = _mm_roti_epi64(row2h, -24); \ + +#define G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \ + row1l = _mm_add_epi64(_mm_add_epi64(row1l, b0), row2l); \ + row1h = _mm_add_epi64(_mm_add_epi64(row1h, b1), row2h); \ + \ + row4l = _mm_xor_si128(row4l, row1l); \ + row4h = _mm_xor_si128(row4h, row1h); \ + \ + row4l = _mm_roti_epi64(row4l, -16); \ + row4h = _mm_roti_epi64(row4h, -16); \ + \ + row3l = _mm_add_epi64(row3l, row4l); \ + row3h = _mm_add_epi64(row3h, row4h); \ + \ + row2l = _mm_xor_si128(row2l, row3l); \ + row2h = _mm_xor_si128(row2h, row3h); \ + \ + row2l = _mm_roti_epi64(row2l, -63); \ + row2h = _mm_roti_epi64(row2h, -63); \ + +#if defined(HAVE_SSSE3) +#define DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ + t0 = _mm_alignr_epi8(row2h, row2l, 8); \ + t1 = _mm_alignr_epi8(row2l, row2h, 8); \ + row2l = t0; \ + row2h = t1; \ + \ + t0 = row3l; \ + row3l = row3h; \ + row3h = t0; \ + \ + t0 = _mm_alignr_epi8(row4h, row4l, 8); \ + t1 = _mm_alignr_epi8(row4l, row4h, 8); \ + row4l = t1; \ + row4h = t0; + +#define UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ + t0 = _mm_alignr_epi8(row2l, row2h, 8); \ + t1 = _mm_alignr_epi8(row2h, row2l, 8); \ + row2l = t0; \ + row2h = t1; \ + \ + t0 = row3l; \ + row3l = row3h; \ + row3h = t0; \ + \ + t0 = _mm_alignr_epi8(row4l, row4h, 8); \ + t1 = _mm_alignr_epi8(row4h, row4l, 8); \ + row4l = t1; \ + row4h = t0; +#else + +#define DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ + t0 = row4l;\ + t1 = row2l;\ + row4l = row3l;\ + row3l = row3h;\ + row3h = row4l;\ + row4l = _mm_unpackhi_epi64(row4h, _mm_unpacklo_epi64(t0, t0)); \ + row4h = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(row4h, row4h)); \ + row2l = _mm_unpackhi_epi64(row2l, _mm_unpacklo_epi64(row2h, row2h)); \ + row2h = _mm_unpackhi_epi64(row2h, _mm_unpacklo_epi64(t1, t1)) + +#define UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \ + t0 = row3l;\ + row3l = row3h;\ + row3h = t0;\ + t0 = row2l;\ + t1 = row4l;\ + row2l = _mm_unpackhi_epi64(row2h, _mm_unpacklo_epi64(row2l, row2l)); \ + row2h = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(row2h, row2h)); \ + row4l = _mm_unpackhi_epi64(row4l, _mm_unpacklo_epi64(row4h, row4h)); \ + row4h = _mm_unpackhi_epi64(row4h, _mm_unpacklo_epi64(t1, t1)) + +#endif + +#if defined(HAVE_SSE41) +#include "blake2b-load-sse41.h" +#else +#include "blake2b-load-sse2.h" +#endif + +#define ROUND(r) \ + LOAD_MSG_ ##r ##_1(b0, b1); \ + G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ + LOAD_MSG_ ##r ##_2(b0, b1); \ + G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ + DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h); \ + LOAD_MSG_ ##r ##_3(b0, b1); \ + G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ + LOAD_MSG_ ##r ##_4(b0, b1); \ + G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \ + UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h); + +#endif + diff --git a/Modules/_blake2/impl/blake2b.c b/Modules/_blake2/impl/blake2b.c new file mode 100644 index 0000000000..f9090a1770 --- /dev/null +++ b/Modules/_blake2/impl/blake2b.c @@ -0,0 +1,450 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ + +#include +#include +#include + +#include "blake2.h" +#include "blake2-impl.h" + +#include "blake2-config.h" + +#ifdef _MSC_VER +#include /* for _mm_set_epi64x */ +#endif +#include +#if defined(HAVE_SSSE3) +#include +#endif +#if defined(HAVE_SSE41) +#include +#endif +#if defined(HAVE_AVX) +#include +#endif +#if defined(HAVE_XOP) +#include +#endif + +#include "blake2b-round.h" + +static const uint64_t blake2b_IV[8] = +{ + 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, + 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, + 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, + 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL +}; + +static const uint8_t blake2b_sigma[12][16] = +{ + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } +}; + + +/* Some helper functions, not necessarily useful */ +BLAKE2_LOCAL_INLINE(int) blake2b_set_lastnode( blake2b_state *S ) +{ + S->f[1] = -1; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_clear_lastnode( blake2b_state *S ) +{ + S->f[1] = 0; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_is_lastblock( const blake2b_state *S ) +{ + return S->f[0] != 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_set_lastblock( blake2b_state *S ) +{ + if( S->last_node ) blake2b_set_lastnode( S ); + + S->f[0] = -1; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_clear_lastblock( blake2b_state *S ) +{ + if( S->last_node ) blake2b_clear_lastnode( S ); + + S->f[0] = 0; + return 0; +} + + +BLAKE2_LOCAL_INLINE(int) blake2b_increment_counter( blake2b_state *S, const uint64_t inc ) +{ +#if __x86_64__ + /* ADD/ADC chain */ + __uint128_t t = ( ( __uint128_t )S->t[1] << 64 ) | S->t[0]; + t += inc; + S->t[0] = ( uint64_t )( t >> 0 ); + S->t[1] = ( uint64_t )( t >> 64 ); +#else + S->t[0] += inc; + S->t[1] += ( S->t[0] < inc ); +#endif + return 0; +} + + +/* Parameter-related functions */ +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_digest_length( blake2b_param *P, const uint8_t digest_length ) +{ + P->digest_length = digest_length; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_fanout( blake2b_param *P, const uint8_t fanout ) +{ + P->fanout = fanout; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_max_depth( blake2b_param *P, const uint8_t depth ) +{ + P->depth = depth; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_leaf_length( blake2b_param *P, const uint32_t leaf_length ) +{ + P->leaf_length = leaf_length; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_node_offset( blake2b_param *P, const uint64_t node_offset ) +{ + P->node_offset = node_offset; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_node_depth( blake2b_param *P, const uint8_t node_depth ) +{ + P->node_depth = node_depth; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_inner_length( blake2b_param *P, const uint8_t inner_length ) +{ + P->inner_length = inner_length; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_salt( blake2b_param *P, const uint8_t salt[BLAKE2B_SALTBYTES] ) +{ + memcpy( P->salt, salt, BLAKE2B_SALTBYTES ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_param_set_personal( blake2b_param *P, const uint8_t personal[BLAKE2B_PERSONALBYTES] ) +{ + memcpy( P->personal, personal, BLAKE2B_PERSONALBYTES ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_init0( blake2b_state *S ) +{ + memset( S, 0, sizeof( blake2b_state ) ); + + for( int i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i]; + + return 0; +} + +/* init xors IV with input parameter block */ +int blake2b_init_param( blake2b_state *S, const blake2b_param *P ) +{ + /*blake2b_init0( S ); */ + const uint8_t * v = ( const uint8_t * )( blake2b_IV ); + const uint8_t * p = ( const uint8_t * )( P ); + uint8_t * h = ( uint8_t * )( S->h ); + /* IV XOR ParamBlock */ + memset( S, 0, sizeof( blake2b_state ) ); + + for( int i = 0; i < BLAKE2B_OUTBYTES; ++i ) h[i] = v[i] ^ p[i]; + + return 0; +} + + +/* Some sort of default parameter block initialization, for sequential blake2b */ +int blake2b_init( blake2b_state *S, const uint8_t outlen ) +{ + const blake2b_param P = + { + outlen, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + {0}, + {0}, + {0} + }; + + if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; + + return blake2b_init_param( S, &P ); +} + +int blake2b_init_key( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen ) +{ + const blake2b_param P = + { + outlen, + keylen, + 1, + 1, + 0, + 0, + 0, + 0, + {0}, + {0}, + {0} + }; + + if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return -1; + + if ( ( !keylen ) || keylen > BLAKE2B_KEYBYTES ) return -1; + + if( blake2b_init_param( S, &P ) < 0 ) + return 0; + + { + uint8_t block[BLAKE2B_BLOCKBYTES]; + memset( block, 0, BLAKE2B_BLOCKBYTES ); + memcpy( block, key, keylen ); + blake2b_update( S, block, BLAKE2B_BLOCKBYTES ); + secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */ + } + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] ) +{ + __m128i row1l, row1h; + __m128i row2l, row2h; + __m128i row3l, row3h; + __m128i row4l, row4h; + __m128i b0, b1; + __m128i t0, t1; +#if defined(HAVE_SSSE3) && !defined(HAVE_XOP) + const __m128i r16 = _mm_setr_epi8( 2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9 ); + const __m128i r24 = _mm_setr_epi8( 3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10 ); +#endif +#if defined(HAVE_SSE41) + const __m128i m0 = LOADU( block + 00 ); + const __m128i m1 = LOADU( block + 16 ); + const __m128i m2 = LOADU( block + 32 ); + const __m128i m3 = LOADU( block + 48 ); + const __m128i m4 = LOADU( block + 64 ); + const __m128i m5 = LOADU( block + 80 ); + const __m128i m6 = LOADU( block + 96 ); + const __m128i m7 = LOADU( block + 112 ); +#else + const uint64_t m0 = ( ( uint64_t * )block )[ 0]; + const uint64_t m1 = ( ( uint64_t * )block )[ 1]; + const uint64_t m2 = ( ( uint64_t * )block )[ 2]; + const uint64_t m3 = ( ( uint64_t * )block )[ 3]; + const uint64_t m4 = ( ( uint64_t * )block )[ 4]; + const uint64_t m5 = ( ( uint64_t * )block )[ 5]; + const uint64_t m6 = ( ( uint64_t * )block )[ 6]; + const uint64_t m7 = ( ( uint64_t * )block )[ 7]; + const uint64_t m8 = ( ( uint64_t * )block )[ 8]; + const uint64_t m9 = ( ( uint64_t * )block )[ 9]; + const uint64_t m10 = ( ( uint64_t * )block )[10]; + const uint64_t m11 = ( ( uint64_t * )block )[11]; + const uint64_t m12 = ( ( uint64_t * )block )[12]; + const uint64_t m13 = ( ( uint64_t * )block )[13]; + const uint64_t m14 = ( ( uint64_t * )block )[14]; + const uint64_t m15 = ( ( uint64_t * )block )[15]; +#endif + row1l = LOADU( &S->h[0] ); + row1h = LOADU( &S->h[2] ); + row2l = LOADU( &S->h[4] ); + row2h = LOADU( &S->h[6] ); + row3l = LOADU( &blake2b_IV[0] ); + row3h = LOADU( &blake2b_IV[2] ); + row4l = _mm_xor_si128( LOADU( &blake2b_IV[4] ), LOADU( &S->t[0] ) ); + row4h = _mm_xor_si128( LOADU( &blake2b_IV[6] ), LOADU( &S->f[0] ) ); + ROUND( 0 ); + ROUND( 1 ); + ROUND( 2 ); + ROUND( 3 ); + ROUND( 4 ); + ROUND( 5 ); + ROUND( 6 ); + ROUND( 7 ); + ROUND( 8 ); + ROUND( 9 ); + ROUND( 10 ); + ROUND( 11 ); + row1l = _mm_xor_si128( row3l, row1l ); + row1h = _mm_xor_si128( row3h, row1h ); + STOREU( &S->h[0], _mm_xor_si128( LOADU( &S->h[0] ), row1l ) ); + STOREU( &S->h[2], _mm_xor_si128( LOADU( &S->h[2] ), row1h ) ); + row2l = _mm_xor_si128( row4l, row2l ); + row2h = _mm_xor_si128( row4h, row2h ); + STOREU( &S->h[4], _mm_xor_si128( LOADU( &S->h[4] ), row2l ) ); + STOREU( &S->h[6], _mm_xor_si128( LOADU( &S->h[6] ), row2h ) ); + return 0; +} + + +int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen ) +{ + while( inlen > 0 ) + { + size_t left = S->buflen; + size_t fill = 2 * BLAKE2B_BLOCKBYTES - left; + + if( inlen > fill ) + { + memcpy( S->buf + left, in, fill ); /* Fill buffer */ + S->buflen += fill; + blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); + blake2b_compress( S, S->buf ); /* Compress */ + memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); /* Shift buffer left */ + S->buflen -= BLAKE2B_BLOCKBYTES; + in += fill; + inlen -= fill; + } + else /* inlen <= fill */ + { + memcpy( S->buf + left, in, inlen ); + S->buflen += inlen; /* Be lazy, do not compress */ + in += inlen; + inlen -= inlen; + } + } + + return 0; +} + + +int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen ) +{ + if( outlen > BLAKE2B_OUTBYTES ) + return -1; + + if( blake2b_is_lastblock( S ) ) + return -1; + + if( S->buflen > BLAKE2B_BLOCKBYTES ) + { + blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); + blake2b_compress( S, S->buf ); + S->buflen -= BLAKE2B_BLOCKBYTES; + memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, S->buflen ); + } + + blake2b_increment_counter( S, S->buflen ); + blake2b_set_lastblock( S ); + memset( S->buf + S->buflen, 0, 2 * BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */ + blake2b_compress( S, S->buf ); + memcpy( out, &S->h[0], outlen ); + return 0; +} + + +int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen ) +{ + blake2b_state S[1]; + + /* Verify parameters */ + if ( NULL == in && inlen > 0 ) return -1; + + if ( NULL == out ) return -1; + + if( NULL == key && keylen > 0 ) return -1; + + if( !outlen || outlen > BLAKE2B_OUTBYTES ) return -1; + + if( keylen > BLAKE2B_KEYBYTES ) return -1; + + if( keylen ) + { + if( blake2b_init_key( S, outlen, key, keylen ) < 0 ) return -1; + } + else + { + if( blake2b_init( S, outlen ) < 0 ) return -1; + } + + blake2b_update( S, ( const uint8_t * )in, inlen ); + blake2b_final( S, out, outlen ); + return 0; +} + +#if defined(SUPERCOP) +int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) +{ + return blake2b( out, in, NULL, BLAKE2B_OUTBYTES, inlen, 0 ); +} +#endif + +#if defined(BLAKE2B_SELFTEST) +#include +#include "blake2-kat.h" +int main( int argc, char **argv ) +{ + uint8_t key[BLAKE2B_KEYBYTES]; + uint8_t buf[KAT_LENGTH]; + + for( size_t i = 0; i < BLAKE2B_KEYBYTES; ++i ) + key[i] = ( uint8_t )i; + + for( size_t i = 0; i < KAT_LENGTH; ++i ) + buf[i] = ( uint8_t )i; + + for( size_t i = 0; i < KAT_LENGTH; ++i ) + { + uint8_t hash[BLAKE2B_OUTBYTES]; + blake2b( hash, buf, key, BLAKE2B_OUTBYTES, i, BLAKE2B_KEYBYTES ); + + if( 0 != memcmp( hash, blake2b_keyed_kat[i], BLAKE2B_OUTBYTES ) ) + { + puts( "error" ); + return -1; + } + } + + puts( "ok" ); + return 0; +} +#endif + diff --git a/Modules/_blake2/impl/blake2s-load-sse2.h b/Modules/_blake2/impl/blake2s-load-sse2.h new file mode 100644 index 0000000000..eadefa7a52 --- /dev/null +++ b/Modules/_blake2/impl/blake2s-load-sse2.h @@ -0,0 +1,61 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#pragma once +#ifndef __BLAKE2S_LOAD_SSE2_H__ +#define __BLAKE2S_LOAD_SSE2_H__ + +#define LOAD_MSG_0_1(buf) buf = _mm_set_epi32(m6,m4,m2,m0) +#define LOAD_MSG_0_2(buf) buf = _mm_set_epi32(m7,m5,m3,m1) +#define LOAD_MSG_0_3(buf) buf = _mm_set_epi32(m14,m12,m10,m8) +#define LOAD_MSG_0_4(buf) buf = _mm_set_epi32(m15,m13,m11,m9) +#define LOAD_MSG_1_1(buf) buf = _mm_set_epi32(m13,m9,m4,m14) +#define LOAD_MSG_1_2(buf) buf = _mm_set_epi32(m6,m15,m8,m10) +#define LOAD_MSG_1_3(buf) buf = _mm_set_epi32(m5,m11,m0,m1) +#define LOAD_MSG_1_4(buf) buf = _mm_set_epi32(m3,m7,m2,m12) +#define LOAD_MSG_2_1(buf) buf = _mm_set_epi32(m15,m5,m12,m11) +#define LOAD_MSG_2_2(buf) buf = _mm_set_epi32(m13,m2,m0,m8) +#define LOAD_MSG_2_3(buf) buf = _mm_set_epi32(m9,m7,m3,m10) +#define LOAD_MSG_2_4(buf) buf = _mm_set_epi32(m4,m1,m6,m14) +#define LOAD_MSG_3_1(buf) buf = _mm_set_epi32(m11,m13,m3,m7) +#define LOAD_MSG_3_2(buf) buf = _mm_set_epi32(m14,m12,m1,m9) +#define LOAD_MSG_3_3(buf) buf = _mm_set_epi32(m15,m4,m5,m2) +#define LOAD_MSG_3_4(buf) buf = _mm_set_epi32(m8,m0,m10,m6) +#define LOAD_MSG_4_1(buf) buf = _mm_set_epi32(m10,m2,m5,m9) +#define LOAD_MSG_4_2(buf) buf = _mm_set_epi32(m15,m4,m7,m0) +#define LOAD_MSG_4_3(buf) buf = _mm_set_epi32(m3,m6,m11,m14) +#define LOAD_MSG_4_4(buf) buf = _mm_set_epi32(m13,m8,m12,m1) +#define LOAD_MSG_5_1(buf) buf = _mm_set_epi32(m8,m0,m6,m2) +#define LOAD_MSG_5_2(buf) buf = _mm_set_epi32(m3,m11,m10,m12) +#define LOAD_MSG_5_3(buf) buf = _mm_set_epi32(m1,m15,m7,m4) +#define LOAD_MSG_5_4(buf) buf = _mm_set_epi32(m9,m14,m5,m13) +#define LOAD_MSG_6_1(buf) buf = _mm_set_epi32(m4,m14,m1,m12) +#define LOAD_MSG_6_2(buf) buf = _mm_set_epi32(m10,m13,m15,m5) +#define LOAD_MSG_6_3(buf) buf = _mm_set_epi32(m8,m9,m6,m0) +#define LOAD_MSG_6_4(buf) buf = _mm_set_epi32(m11,m2,m3,m7) +#define LOAD_MSG_7_1(buf) buf = _mm_set_epi32(m3,m12,m7,m13) +#define LOAD_MSG_7_2(buf) buf = _mm_set_epi32(m9,m1,m14,m11) +#define LOAD_MSG_7_3(buf) buf = _mm_set_epi32(m2,m8,m15,m5) +#define LOAD_MSG_7_4(buf) buf = _mm_set_epi32(m10,m6,m4,m0) +#define LOAD_MSG_8_1(buf) buf = _mm_set_epi32(m0,m11,m14,m6) +#define LOAD_MSG_8_2(buf) buf = _mm_set_epi32(m8,m3,m9,m15) +#define LOAD_MSG_8_3(buf) buf = _mm_set_epi32(m10,m1,m13,m12) +#define LOAD_MSG_8_4(buf) buf = _mm_set_epi32(m5,m4,m7,m2) +#define LOAD_MSG_9_1(buf) buf = _mm_set_epi32(m1,m7,m8,m10) +#define LOAD_MSG_9_2(buf) buf = _mm_set_epi32(m5,m6,m4,m2) +#define LOAD_MSG_9_3(buf) buf = _mm_set_epi32(m13,m3,m9,m15) +#define LOAD_MSG_9_4(buf) buf = _mm_set_epi32(m0,m12,m14,m11) + + +#endif diff --git a/Modules/_blake2/impl/blake2s-load-sse41.h b/Modules/_blake2/impl/blake2s-load-sse41.h new file mode 100644 index 0000000000..54bf0cdd61 --- /dev/null +++ b/Modules/_blake2/impl/blake2s-load-sse41.h @@ -0,0 +1,231 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#pragma once +#ifndef __BLAKE2S_LOAD_SSE41_H__ +#define __BLAKE2S_LOAD_SSE41_H__ + +#define LOAD_MSG_0_1(buf) \ +buf = TOI(_mm_shuffle_ps(TOF(m0), TOF(m1), _MM_SHUFFLE(2,0,2,0))); + +#define LOAD_MSG_0_2(buf) \ +buf = TOI(_mm_shuffle_ps(TOF(m0), TOF(m1), _MM_SHUFFLE(3,1,3,1))); + +#define LOAD_MSG_0_3(buf) \ +buf = TOI(_mm_shuffle_ps(TOF(m2), TOF(m3), _MM_SHUFFLE(2,0,2,0))); + +#define LOAD_MSG_0_4(buf) \ +buf = TOI(_mm_shuffle_ps(TOF(m2), TOF(m3), _MM_SHUFFLE(3,1,3,1))); + +#define LOAD_MSG_1_1(buf) \ +t0 = _mm_blend_epi16(m1, m2, 0x0C); \ +t1 = _mm_slli_si128(m3, 4); \ +t2 = _mm_blend_epi16(t0, t1, 0xF0); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,1,0,3)); + +#define LOAD_MSG_1_2(buf) \ +t0 = _mm_shuffle_epi32(m2,_MM_SHUFFLE(0,0,2,0)); \ +t1 = _mm_blend_epi16(m1,m3,0xC0); \ +t2 = _mm_blend_epi16(t0, t1, 0xF0); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,3,0,1)); + +#define LOAD_MSG_1_3(buf) \ +t0 = _mm_slli_si128(m1, 4); \ +t1 = _mm_blend_epi16(m2, t0, 0x30); \ +t2 = _mm_blend_epi16(m0, t1, 0xF0); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,3,0,1)); + +#define LOAD_MSG_1_4(buf) \ +t0 = _mm_unpackhi_epi32(m0,m1); \ +t1 = _mm_slli_si128(m3, 4); \ +t2 = _mm_blend_epi16(t0, t1, 0x0C); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,3,0,1)); + +#define LOAD_MSG_2_1(buf) \ +t0 = _mm_unpackhi_epi32(m2,m3); \ +t1 = _mm_blend_epi16(m3,m1,0x0C); \ +t2 = _mm_blend_epi16(t0, t1, 0x0F); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(3,1,0,2)); + +#define LOAD_MSG_2_2(buf) \ +t0 = _mm_unpacklo_epi32(m2,m0); \ +t1 = _mm_blend_epi16(t0, m0, 0xF0); \ +t2 = _mm_slli_si128(m3, 8); \ +buf = _mm_blend_epi16(t1, t2, 0xC0); + +#define LOAD_MSG_2_3(buf) \ +t0 = _mm_blend_epi16(m0, m2, 0x3C); \ +t1 = _mm_srli_si128(m1, 12); \ +t2 = _mm_blend_epi16(t0,t1,0x03); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(1,0,3,2)); + +#define LOAD_MSG_2_4(buf) \ +t0 = _mm_slli_si128(m3, 4); \ +t1 = _mm_blend_epi16(m0, m1, 0x33); \ +t2 = _mm_blend_epi16(t1, t0, 0xC0); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(0,1,2,3)); + +#define LOAD_MSG_3_1(buf) \ +t0 = _mm_unpackhi_epi32(m0,m1); \ +t1 = _mm_unpackhi_epi32(t0, m2); \ +t2 = _mm_blend_epi16(t1, m3, 0x0C); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(3,1,0,2)); + +#define LOAD_MSG_3_2(buf) \ +t0 = _mm_slli_si128(m2, 8); \ +t1 = _mm_blend_epi16(m3,m0,0x0C); \ +t2 = _mm_blend_epi16(t1, t0, 0xC0); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,0,1,3)); + +#define LOAD_MSG_3_3(buf) \ +t0 = _mm_blend_epi16(m0,m1,0x0F); \ +t1 = _mm_blend_epi16(t0, m3, 0xC0); \ +buf = _mm_shuffle_epi32(t1, _MM_SHUFFLE(3,0,1,2)); + +#define LOAD_MSG_3_4(buf) \ +t0 = _mm_unpacklo_epi32(m0,m2); \ +t1 = _mm_unpackhi_epi32(m1,m2); \ +buf = _mm_unpacklo_epi64(t1,t0); + +#define LOAD_MSG_4_1(buf) \ +t0 = _mm_unpacklo_epi64(m1,m2); \ +t1 = _mm_unpackhi_epi64(m0,m2); \ +t2 = _mm_blend_epi16(t0,t1,0x33); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,0,1,3)); + +#define LOAD_MSG_4_2(buf) \ +t0 = _mm_unpackhi_epi64(m1,m3); \ +t1 = _mm_unpacklo_epi64(m0,m1); \ +buf = _mm_blend_epi16(t0,t1,0x33); + +#define LOAD_MSG_4_3(buf) \ +t0 = _mm_unpackhi_epi64(m3,m1); \ +t1 = _mm_unpackhi_epi64(m2,m0); \ +buf = _mm_blend_epi16(t1,t0,0x33); + +#define LOAD_MSG_4_4(buf) \ +t0 = _mm_blend_epi16(m0,m2,0x03); \ +t1 = _mm_slli_si128(t0, 8); \ +t2 = _mm_blend_epi16(t1,m3,0x0F); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(1,2,0,3)); + +#define LOAD_MSG_5_1(buf) \ +t0 = _mm_unpackhi_epi32(m0,m1); \ +t1 = _mm_unpacklo_epi32(m0,m2); \ +buf = _mm_unpacklo_epi64(t0,t1); + +#define LOAD_MSG_5_2(buf) \ +t0 = _mm_srli_si128(m2, 4); \ +t1 = _mm_blend_epi16(m0,m3,0x03); \ +buf = _mm_blend_epi16(t1,t0,0x3C); + +#define LOAD_MSG_5_3(buf) \ +t0 = _mm_blend_epi16(m1,m0,0x0C); \ +t1 = _mm_srli_si128(m3, 4); \ +t2 = _mm_blend_epi16(t0,t1,0x30); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(1,2,3,0)); + +#define LOAD_MSG_5_4(buf) \ +t0 = _mm_unpacklo_epi64(m1,m2); \ +t1= _mm_shuffle_epi32(m3, _MM_SHUFFLE(0,2,0,1)); \ +buf = _mm_blend_epi16(t0,t1,0x33); + +#define LOAD_MSG_6_1(buf) \ +t0 = _mm_slli_si128(m1, 12); \ +t1 = _mm_blend_epi16(m0,m3,0x33); \ +buf = _mm_blend_epi16(t1,t0,0xC0); + +#define LOAD_MSG_6_2(buf) \ +t0 = _mm_blend_epi16(m3,m2,0x30); \ +t1 = _mm_srli_si128(m1, 4); \ +t2 = _mm_blend_epi16(t0,t1,0x03); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(2,1,3,0)); + +#define LOAD_MSG_6_3(buf) \ +t0 = _mm_unpacklo_epi64(m0,m2); \ +t1 = _mm_srli_si128(m1, 4); \ +buf = _mm_shuffle_epi32(_mm_blend_epi16(t0,t1,0x0C), _MM_SHUFFLE(2,3,1,0)); + +#define LOAD_MSG_6_4(buf) \ +t0 = _mm_unpackhi_epi32(m1,m2); \ +t1 = _mm_unpackhi_epi64(m0,t0); \ +buf = _mm_shuffle_epi32(t1, _MM_SHUFFLE(3,0,1,2)); + +#define LOAD_MSG_7_1(buf) \ +t0 = _mm_unpackhi_epi32(m0,m1); \ +t1 = _mm_blend_epi16(t0,m3,0x0F); \ +buf = _mm_shuffle_epi32(t1,_MM_SHUFFLE(2,0,3,1)); + +#define LOAD_MSG_7_2(buf) \ +t0 = _mm_blend_epi16(m2,m3,0x30); \ +t1 = _mm_srli_si128(m0,4); \ +t2 = _mm_blend_epi16(t0,t1,0x03); \ +buf = _mm_shuffle_epi32(t2, _MM_SHUFFLE(1,0,2,3)); + +#define LOAD_MSG_7_3(buf) \ +t0 = _mm_unpackhi_epi64(m0,m3); \ +t1 = _mm_unpacklo_epi64(m1,m2); \ +t2 = _mm_blend_epi16(t0,t1,0x3C); \ +buf = _mm_shuffle_epi32(t2,_MM_SHUFFLE(0,2,3,1)); + +#define LOAD_MSG_7_4(buf) \ +t0 = _mm_unpacklo_epi32(m0,m1); \ +t1 = _mm_unpackhi_epi32(m1,m2); \ +buf = _mm_unpacklo_epi64(t0,t1); + +#define LOAD_MSG_8_1(buf) \ +t0 = _mm_unpackhi_epi32(m1,m3); \ +t1 = _mm_unpacklo_epi64(t0,m0); \ +t2 = _mm_blend_epi16(t1,m2,0xC0); \ +buf = _mm_shufflehi_epi16(t2,_MM_SHUFFLE(1,0,3,2)); + +#define LOAD_MSG_8_2(buf) \ +t0 = _mm_unpackhi_epi32(m0,m3); \ +t1 = _mm_blend_epi16(m2,t0,0xF0); \ +buf = _mm_shuffle_epi32(t1,_MM_SHUFFLE(0,2,1,3)); + +#define LOAD_MSG_8_3(buf) \ +t0 = _mm_blend_epi16(m2,m0,0x0C); \ +t1 = _mm_slli_si128(t0,4); \ +buf = _mm_blend_epi16(t1,m3,0x0F); + +#define LOAD_MSG_8_4(buf) \ +t0 = _mm_blend_epi16(m1,m0,0x30); \ +buf = _mm_shuffle_epi32(t0,_MM_SHUFFLE(1,0,3,2)); + +#define LOAD_MSG_9_1(buf) \ +t0 = _mm_blend_epi16(m0,m2,0x03); \ +t1 = _mm_blend_epi16(m1,m2,0x30); \ +t2 = _mm_blend_epi16(t1,t0,0x0F); \ +buf = _mm_shuffle_epi32(t2,_MM_SHUFFLE(1,3,0,2)); + +#define LOAD_MSG_9_2(buf) \ +t0 = _mm_slli_si128(m0,4); \ +t1 = _mm_blend_epi16(m1,t0,0xC0); \ +buf = _mm_shuffle_epi32(t1,_MM_SHUFFLE(1,2,0,3)); + +#define LOAD_MSG_9_3(buf) \ +t0 = _mm_unpackhi_epi32(m0,m3); \ +t1 = _mm_unpacklo_epi32(m2,m3); \ +t2 = _mm_unpackhi_epi64(t0,t1); \ +buf = _mm_shuffle_epi32(t2,_MM_SHUFFLE(3,0,2,1)); + +#define LOAD_MSG_9_4(buf) \ +t0 = _mm_blend_epi16(m3,m2,0xC0); \ +t1 = _mm_unpacklo_epi32(m0,m3); \ +t2 = _mm_blend_epi16(t0,t1,0x0F); \ +buf = _mm_shuffle_epi32(t2,_MM_SHUFFLE(0,1,2,3)); + +#endif + diff --git a/Modules/_blake2/impl/blake2s-load-xop.h b/Modules/_blake2/impl/blake2s-load-xop.h new file mode 100644 index 0000000000..a3b5d65e2d --- /dev/null +++ b/Modules/_blake2/impl/blake2s-load-xop.h @@ -0,0 +1,191 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#pragma once +#ifndef __BLAKE2S_LOAD_XOP_H__ +#define __BLAKE2S_LOAD_XOP_H__ + +#define TOB(x) ((x)*4*0x01010101 + 0x03020100) /* ..or not TOB */ + +/* Basic VPPERM emulation, for testing purposes */ +/*static __m128i _mm_perm_epi8(const __m128i src1, const __m128i src2, const __m128i sel) +{ + const __m128i sixteen = _mm_set1_epi8(16); + const __m128i t0 = _mm_shuffle_epi8(src1, sel); + const __m128i s1 = _mm_shuffle_epi8(src2, _mm_sub_epi8(sel, sixteen)); + const __m128i mask = _mm_or_si128(_mm_cmpeq_epi8(sel, sixteen), + _mm_cmpgt_epi8(sel, sixteen)); /* (>=16) = 0xff : 00 */ + return _mm_blendv_epi8(t0, s1, mask); +}*/ + +#define LOAD_MSG_0_1(buf) \ +buf = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(6),TOB(4),TOB(2),TOB(0)) ); + +#define LOAD_MSG_0_2(buf) \ +buf = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(7),TOB(5),TOB(3),TOB(1)) ); + +#define LOAD_MSG_0_3(buf) \ +buf = _mm_perm_epi8(m2, m3, _mm_set_epi32(TOB(6),TOB(4),TOB(2),TOB(0)) ); + +#define LOAD_MSG_0_4(buf) \ +buf = _mm_perm_epi8(m2, m3, _mm_set_epi32(TOB(7),TOB(5),TOB(3),TOB(1)) ); + +#define LOAD_MSG_1_1(buf) \ +t0 = _mm_perm_epi8(m1, m2, _mm_set_epi32(TOB(0),TOB(5),TOB(0),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(5),TOB(2),TOB(1),TOB(6)) ); + +#define LOAD_MSG_1_2(buf) \ +t1 = _mm_perm_epi8(m1, m2, _mm_set_epi32(TOB(2),TOB(0),TOB(4),TOB(6)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(7),TOB(1),TOB(0)) ); + +#define LOAD_MSG_1_3(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(5),TOB(0),TOB(0),TOB(1)) ); \ +buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(3),TOB(7),TOB(1),TOB(0)) ); + +#define LOAD_MSG_1_4(buf) \ +t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(3),TOB(7),TOB(2),TOB(0)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(1),TOB(4)) ); + +#define LOAD_MSG_2_1(buf) \ +t0 = _mm_perm_epi8(m1, m2, _mm_set_epi32(TOB(0),TOB(1),TOB(0),TOB(7)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(7),TOB(2),TOB(4),TOB(0)) ); + +#define LOAD_MSG_2_2(buf) \ +t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(0),TOB(2),TOB(0),TOB(4)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(5),TOB(2),TOB(1),TOB(0)) ); + +#define LOAD_MSG_2_3(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(7),TOB(3),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(5),TOB(2),TOB(1),TOB(6)) ); + +#define LOAD_MSG_2_4(buf) \ +t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(4),TOB(1),TOB(6),TOB(0)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(1),TOB(6)) ); + +#define LOAD_MSG_3_1(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(0),TOB(3),TOB(7)) ); \ +t0 = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(7),TOB(2),TOB(1),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(5),TOB(1),TOB(0)) ); + +#define LOAD_MSG_3_2(buf) \ +t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(0),TOB(0),TOB(1),TOB(5)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(6),TOB(4),TOB(1),TOB(0)) ); + +#define LOAD_MSG_3_3(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(4),TOB(5),TOB(2)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(7),TOB(2),TOB(1),TOB(0)) ); + +#define LOAD_MSG_3_4(buf) \ +t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(0),TOB(0),TOB(6)) ); \ +buf = _mm_perm_epi8(t1, m2, _mm_set_epi32(TOB(4),TOB(2),TOB(6),TOB(0)) ); + +#define LOAD_MSG_4_1(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(2),TOB(5),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(6),TOB(2),TOB(1),TOB(5)) ); + +#define LOAD_MSG_4_2(buf) \ +t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(4),TOB(7),TOB(0)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(7),TOB(2),TOB(1),TOB(0)) ); + +#define LOAD_MSG_4_3(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(3),TOB(6),TOB(0),TOB(0)) ); \ +t0 = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(3),TOB(2),TOB(7),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(1),TOB(6)) ); + +#define LOAD_MSG_4_4(buf) \ +t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(0),TOB(4),TOB(0),TOB(1)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(5),TOB(2),TOB(4),TOB(0)) ); + +#define LOAD_MSG_5_1(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(0),TOB(6),TOB(2)) ); \ +buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(4),TOB(2),TOB(1),TOB(0)) ); + +#define LOAD_MSG_5_2(buf) \ +t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(3),TOB(7),TOB(6),TOB(0)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(1),TOB(4)) ); + +#define LOAD_MSG_5_3(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(1),TOB(0),TOB(7),TOB(4)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(7),TOB(1),TOB(0)) ); + +#define LOAD_MSG_5_4(buf) \ +t1 = _mm_perm_epi8(m1, m2, _mm_set_epi32(TOB(5),TOB(0),TOB(1),TOB(0)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(6),TOB(1),TOB(5)) ); + +#define LOAD_MSG_6_1(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(4),TOB(0),TOB(1),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(6),TOB(1),TOB(4)) ); + +#define LOAD_MSG_6_2(buf) \ +t1 = _mm_perm_epi8(m1, m2, _mm_set_epi32(TOB(6),TOB(0),TOB(0),TOB(1)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(5),TOB(7),TOB(0)) ); + +#define LOAD_MSG_6_3(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(0),TOB(6),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(4),TOB(5),TOB(1),TOB(0)) ); + +#define LOAD_MSG_6_4(buf) \ +t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(2),TOB(3),TOB(7)) ); \ +buf = _mm_perm_epi8(t1, m2, _mm_set_epi32(TOB(7),TOB(2),TOB(1),TOB(0)) ); + +#define LOAD_MSG_7_1(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(3),TOB(0),TOB(7),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(4),TOB(1),TOB(5)) ); + +#define LOAD_MSG_7_2(buf) \ +t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(5),TOB(1),TOB(0),TOB(7)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(6),TOB(0)) ); + +#define LOAD_MSG_7_3(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(2),TOB(0),TOB(0),TOB(5)) ); \ +t0 = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(3),TOB(4),TOB(1),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(7),TOB(0)) ); + +#define LOAD_MSG_7_4(buf) \ +t1 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(6),TOB(4),TOB(0)) ); \ +buf = _mm_perm_epi8(t1, m2, _mm_set_epi32(TOB(6),TOB(2),TOB(1),TOB(0)) ); + +#define LOAD_MSG_8_1(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(0),TOB(0),TOB(0),TOB(6)) ); \ +t0 = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(3),TOB(7),TOB(1),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(6),TOB(0)) ); + +#define LOAD_MSG_8_2(buf) \ +t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(4),TOB(3),TOB(5),TOB(0)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(1),TOB(7)) ); + +#define LOAD_MSG_8_3(buf) \ +t0 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(6),TOB(1),TOB(0),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(3),TOB(2),TOB(5),TOB(4)) ); \ + +#define LOAD_MSG_8_4(buf) \ +buf = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(5),TOB(4),TOB(7),TOB(2)) ); + +#define LOAD_MSG_9_1(buf) \ +t0 = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(1),TOB(7),TOB(0),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m2, _mm_set_epi32(TOB(3),TOB(2),TOB(4),TOB(6)) ); + +#define LOAD_MSG_9_2(buf) \ +buf = _mm_perm_epi8(m0, m1, _mm_set_epi32(TOB(5),TOB(6),TOB(4),TOB(2)) ); + +#define LOAD_MSG_9_3(buf) \ +t0 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(0),TOB(3),TOB(5),TOB(0)) ); \ +buf = _mm_perm_epi8(t0, m3, _mm_set_epi32(TOB(5),TOB(2),TOB(1),TOB(7)) ); + +#define LOAD_MSG_9_4(buf) \ +t1 = _mm_perm_epi8(m0, m2, _mm_set_epi32(TOB(0),TOB(0),TOB(0),TOB(7)) ); \ +buf = _mm_perm_epi8(t1, m3, _mm_set_epi32(TOB(3),TOB(4),TOB(6),TOB(0)) ); + +#endif + diff --git a/Modules/_blake2/impl/blake2s-ref.c b/Modules/_blake2/impl/blake2s-ref.c new file mode 100644 index 0000000000..0e246c3ce1 --- /dev/null +++ b/Modules/_blake2/impl/blake2s-ref.c @@ -0,0 +1,406 @@ +/* + BLAKE2 reference source code package - reference C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ + +#include +#include +#include + +#include "blake2.h" +#include "blake2-impl.h" + +static const uint32_t blake2s_IV[8] = +{ + 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, + 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL +}; + +static const uint8_t blake2s_sigma[10][16] = +{ + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , +}; + +BLAKE2_LOCAL_INLINE(int) blake2s_set_lastnode( blake2s_state *S ) +{ + S->f[1] = -1; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_clear_lastnode( blake2s_state *S ) +{ + S->f[1] = 0; + return 0; +} + +/* Some helper functions, not necessarily useful */ +BLAKE2_LOCAL_INLINE(int) blake2s_is_lastblock( const blake2s_state *S ) +{ + return S->f[0] != 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_set_lastblock( blake2s_state *S ) +{ + if( S->last_node ) blake2s_set_lastnode( S ); + + S->f[0] = -1; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_clear_lastblock( blake2s_state *S ) +{ + if( S->last_node ) blake2s_clear_lastnode( S ); + + S->f[0] = 0; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_increment_counter( blake2s_state *S, const uint32_t inc ) +{ + S->t[0] += inc; + S->t[1] += ( S->t[0] < inc ); + return 0; +} + +/* Parameter-related functions */ +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_digest_length( blake2s_param *P, const uint8_t digest_length ) +{ + P->digest_length = digest_length; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_fanout( blake2s_param *P, const uint8_t fanout ) +{ + P->fanout = fanout; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_max_depth( blake2s_param *P, const uint8_t depth ) +{ + P->depth = depth; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_leaf_length( blake2s_param *P, const uint32_t leaf_length ) +{ + store32( &P->leaf_length, leaf_length ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_node_offset( blake2s_param *P, const uint64_t node_offset ) +{ + store48( P->node_offset, node_offset ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_node_depth( blake2s_param *P, const uint8_t node_depth ) +{ + P->node_depth = node_depth; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_inner_length( blake2s_param *P, const uint8_t inner_length ) +{ + P->inner_length = inner_length; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_salt( blake2s_param *P, const uint8_t salt[BLAKE2S_SALTBYTES] ) +{ + memcpy( P->salt, salt, BLAKE2S_SALTBYTES ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_personal( blake2s_param *P, const uint8_t personal[BLAKE2S_PERSONALBYTES] ) +{ + memcpy( P->personal, personal, BLAKE2S_PERSONALBYTES ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_init0( blake2s_state *S ) +{ + memset( S, 0, sizeof( blake2s_state ) ); + + for( int i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; + + return 0; +} + +/* init2 xors IV with input parameter block */ +int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) +{ + const uint32_t *p = ( const uint32_t * )( P ); + + blake2s_init0( S ); + + /* IV XOR ParamBlock */ + for( size_t i = 0; i < 8; ++i ) + S->h[i] ^= load32( &p[i] ); + + return 0; +} + + +/* Sequential blake2s initialization */ +int blake2s_init( blake2s_state *S, const uint8_t outlen ) +{ + blake2s_param P[1]; + + /* Move interval verification here? */ + if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; + + P->digest_length = outlen; + P->key_length = 0; + P->fanout = 1; + P->depth = 1; + store32( &P->leaf_length, 0 ); + store48( &P->node_offset, 0 ); + P->node_depth = 0; + P->inner_length = 0; + /* memset(P->reserved, 0, sizeof(P->reserved) ); */ + memset( P->salt, 0, sizeof( P->salt ) ); + memset( P->personal, 0, sizeof( P->personal ) ); + return blake2s_init_param( S, P ); +} + +int blake2s_init_key( blake2s_state *S, const uint8_t outlen, const void *key, const uint8_t keylen ) +{ + blake2s_param P[1]; + + if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; + + if ( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1; + + P->digest_length = outlen; + P->key_length = keylen; + P->fanout = 1; + P->depth = 1; + store32( &P->leaf_length, 0 ); + store48( &P->node_offset, 0 ); + P->node_depth = 0; + P->inner_length = 0; + /* memset(P->reserved, 0, sizeof(P->reserved) ); */ + memset( P->salt, 0, sizeof( P->salt ) ); + memset( P->personal, 0, sizeof( P->personal ) ); + + if( blake2s_init_param( S, P ) < 0 ) return -1; + + { + uint8_t block[BLAKE2S_BLOCKBYTES]; + memset( block, 0, BLAKE2S_BLOCKBYTES ); + memcpy( block, key, keylen ); + blake2s_update( S, block, BLAKE2S_BLOCKBYTES ); + secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ + } + return 0; +} + +static int blake2s_compress( blake2s_state *S, const uint8_t block[BLAKE2S_BLOCKBYTES] ) +{ + uint32_t m[16]; + uint32_t v[16]; + + for( size_t i = 0; i < 16; ++i ) + m[i] = load32( block + i * sizeof( m[i] ) ); + + for( size_t i = 0; i < 8; ++i ) + v[i] = S->h[i]; + + v[ 8] = blake2s_IV[0]; + v[ 9] = blake2s_IV[1]; + v[10] = blake2s_IV[2]; + v[11] = blake2s_IV[3]; + v[12] = S->t[0] ^ blake2s_IV[4]; + v[13] = S->t[1] ^ blake2s_IV[5]; + v[14] = S->f[0] ^ blake2s_IV[6]; + v[15] = S->f[1] ^ blake2s_IV[7]; +#define G(r,i,a,b,c,d) \ + do { \ + a = a + b + m[blake2s_sigma[r][2*i+0]]; \ + d = rotr32(d ^ a, 16); \ + c = c + d; \ + b = rotr32(b ^ c, 12); \ + a = a + b + m[blake2s_sigma[r][2*i+1]]; \ + d = rotr32(d ^ a, 8); \ + c = c + d; \ + b = rotr32(b ^ c, 7); \ + } while(0) +#define ROUND(r) \ + do { \ + G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \ + G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \ + G(r,2,v[ 2],v[ 6],v[10],v[14]); \ + G(r,3,v[ 3],v[ 7],v[11],v[15]); \ + G(r,4,v[ 0],v[ 5],v[10],v[15]); \ + G(r,5,v[ 1],v[ 6],v[11],v[12]); \ + G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \ + G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \ + } while(0) + ROUND( 0 ); + ROUND( 1 ); + ROUND( 2 ); + ROUND( 3 ); + ROUND( 4 ); + ROUND( 5 ); + ROUND( 6 ); + ROUND( 7 ); + ROUND( 8 ); + ROUND( 9 ); + + for( size_t i = 0; i < 8; ++i ) + S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; + +#undef G +#undef ROUND + return 0; +} + + +int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen ) +{ + while( inlen > 0 ) + { + size_t left = S->buflen; + size_t fill = 2 * BLAKE2S_BLOCKBYTES - left; + + if( inlen > fill ) + { + memcpy( S->buf + left, in, fill ); /* Fill buffer */ + S->buflen += fill; + blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); + blake2s_compress( S, S->buf ); /* Compress */ + memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); /* Shift buffer left */ + S->buflen -= BLAKE2S_BLOCKBYTES; + in += fill; + inlen -= fill; + } + else /* inlen <= fill */ + { + memcpy( S->buf + left, in, inlen ); + S->buflen += inlen; /* Be lazy, do not compress */ + in += inlen; + inlen -= inlen; + } + } + + return 0; +} + +int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen ) +{ + uint8_t buffer[BLAKE2S_OUTBYTES] = {0}; + + if( out == NULL || outlen == 0 || outlen > BLAKE2S_OUTBYTES ) + return -1; + + if( blake2s_is_lastblock( S ) ) + return -1; + + + if( S->buflen > BLAKE2S_BLOCKBYTES ) + { + blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); + blake2s_compress( S, S->buf ); + S->buflen -= BLAKE2S_BLOCKBYTES; + memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, S->buflen ); + } + + blake2s_increment_counter( S, ( uint32_t )S->buflen ); + blake2s_set_lastblock( S ); + memset( S->buf + S->buflen, 0, 2 * BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */ + blake2s_compress( S, S->buf ); + + for( int i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ + store32( buffer + sizeof( S->h[i] ) * i, S->h[i] ); + + memcpy( out, buffer, outlen ); + return 0; +} + +int blake2s( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen ) +{ + blake2s_state S[1]; + + /* Verify parameters */ + if ( NULL == in && inlen > 0 ) return -1; + + if ( NULL == out ) return -1; + + if ( NULL == key && keylen > 0) return -1; + + if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; + + if( keylen > BLAKE2S_KEYBYTES ) return -1; + + if( keylen > 0 ) + { + if( blake2s_init_key( S, outlen, key, keylen ) < 0 ) return -1; + } + else + { + if( blake2s_init( S, outlen ) < 0 ) return -1; + } + + blake2s_update( S, ( const uint8_t * )in, inlen ); + blake2s_final( S, out, outlen ); + return 0; +} + +#if defined(SUPERCOP) +int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) +{ + return blake2s( out, in, NULL, BLAKE2S_OUTBYTES, inlen, 0 ); +} +#endif + +#if defined(BLAKE2S_SELFTEST) +#include +#include "blake2-kat.h" +int main( int argc, char **argv ) +{ + uint8_t key[BLAKE2S_KEYBYTES]; + uint8_t buf[KAT_LENGTH]; + + for( size_t i = 0; i < BLAKE2S_KEYBYTES; ++i ) + key[i] = ( uint8_t )i; + + for( size_t i = 0; i < KAT_LENGTH; ++i ) + buf[i] = ( uint8_t )i; + + for( size_t i = 0; i < KAT_LENGTH; ++i ) + { + uint8_t hash[BLAKE2S_OUTBYTES]; + blake2s( hash, buf, key, BLAKE2S_OUTBYTES, i, BLAKE2S_KEYBYTES ); + + if( 0 != memcmp( hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES ) ) + { + puts( "error" ); + return -1; + } + } + + puts( "ok" ); + return 0; +} +#endif + + diff --git a/Modules/_blake2/impl/blake2s-round.h b/Modules/_blake2/impl/blake2s-round.h new file mode 100644 index 0000000000..7470d928a2 --- /dev/null +++ b/Modules/_blake2/impl/blake2s-round.h @@ -0,0 +1,90 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#pragma once +#ifndef __BLAKE2S_ROUND_H__ +#define __BLAKE2S_ROUND_H__ + +#define LOADU(p) _mm_loadu_si128( (const __m128i *)(p) ) +#define STOREU(p,r) _mm_storeu_si128((__m128i *)(p), r) + +#define TOF(reg) _mm_castsi128_ps((reg)) +#define TOI(reg) _mm_castps_si128((reg)) + +#define LIKELY(x) __builtin_expect((x),1) + + +/* Microarchitecture-specific macros */ +#ifndef HAVE_XOP +#ifdef HAVE_SSSE3 +#define _mm_roti_epi32(r, c) ( \ + (8==-(c)) ? _mm_shuffle_epi8(r,r8) \ + : (16==-(c)) ? _mm_shuffle_epi8(r,r16) \ + : _mm_xor_si128(_mm_srli_epi32( (r), -(c) ),_mm_slli_epi32( (r), 32-(-(c)) )) ) +#else +#define _mm_roti_epi32(r, c) _mm_xor_si128(_mm_srli_epi32( (r), -(c) ),_mm_slli_epi32( (r), 32-(-(c)) )) +#endif +#else +/* ... */ +#endif + + +#define G1(row1,row2,row3,row4,buf) \ + row1 = _mm_add_epi32( _mm_add_epi32( row1, buf), row2 ); \ + row4 = _mm_xor_si128( row4, row1 ); \ + row4 = _mm_roti_epi32(row4, -16); \ + row3 = _mm_add_epi32( row3, row4 ); \ + row2 = _mm_xor_si128( row2, row3 ); \ + row2 = _mm_roti_epi32(row2, -12); + +#define G2(row1,row2,row3,row4,buf) \ + row1 = _mm_add_epi32( _mm_add_epi32( row1, buf), row2 ); \ + row4 = _mm_xor_si128( row4, row1 ); \ + row4 = _mm_roti_epi32(row4, -8); \ + row3 = _mm_add_epi32( row3, row4 ); \ + row2 = _mm_xor_si128( row2, row3 ); \ + row2 = _mm_roti_epi32(row2, -7); + +#define DIAGONALIZE(row1,row2,row3,row4) \ + row4 = _mm_shuffle_epi32( row4, _MM_SHUFFLE(2,1,0,3) ); \ + row3 = _mm_shuffle_epi32( row3, _MM_SHUFFLE(1,0,3,2) ); \ + row2 = _mm_shuffle_epi32( row2, _MM_SHUFFLE(0,3,2,1) ); + +#define UNDIAGONALIZE(row1,row2,row3,row4) \ + row4 = _mm_shuffle_epi32( row4, _MM_SHUFFLE(0,3,2,1) ); \ + row3 = _mm_shuffle_epi32( row3, _MM_SHUFFLE(1,0,3,2) ); \ + row2 = _mm_shuffle_epi32( row2, _MM_SHUFFLE(2,1,0,3) ); + +#if defined(HAVE_XOP) +#include "blake2s-load-xop.h" +#elif defined(HAVE_SSE41) +#include "blake2s-load-sse41.h" +#else +#include "blake2s-load-sse2.h" +#endif + +#define ROUND(r) \ + LOAD_MSG_ ##r ##_1(buf1); \ + G1(row1,row2,row3,row4,buf1); \ + LOAD_MSG_ ##r ##_2(buf2); \ + G2(row1,row2,row3,row4,buf2); \ + DIAGONALIZE(row1,row2,row3,row4); \ + LOAD_MSG_ ##r ##_3(buf3); \ + G1(row1,row2,row3,row4,buf3); \ + LOAD_MSG_ ##r ##_4(buf4); \ + G2(row1,row2,row3,row4,buf4); \ + UNDIAGONALIZE(row1,row2,row3,row4); \ + +#endif + diff --git a/Modules/_blake2/impl/blake2s.c b/Modules/_blake2/impl/blake2s.c new file mode 100644 index 0000000000..030a85e6ce --- /dev/null +++ b/Modules/_blake2/impl/blake2s.c @@ -0,0 +1,431 @@ +/* + BLAKE2 reference source code package - optimized C implementations + + Copyright 2012, Samuel Neves . You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ + +#include +#include +#include + +#include "blake2.h" +#include "blake2-impl.h" + +#include "blake2-config.h" + + +#include +#if defined(HAVE_SSSE3) +#include +#endif +#if defined(HAVE_SSE41) +#include +#endif +#if defined(HAVE_AVX) +#include +#endif +#if defined(HAVE_XOP) +#include +#endif + +#include "blake2s-round.h" + +static const uint32_t blake2s_IV[8] = +{ + 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, + 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL +}; + +static const uint8_t blake2s_sigma[10][16] = +{ + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , +}; + + +/* Some helper functions, not necessarily useful */ +BLAKE2_LOCAL_INLINE(int) blake2s_set_lastnode( blake2s_state *S ) +{ + S->f[1] = -1; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_clear_lastnode( blake2s_state *S ) +{ + S->f[1] = 0; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_is_lastblock( const blake2s_state *S ) +{ + return S->f[0] != 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_set_lastblock( blake2s_state *S ) +{ + if( S->last_node ) blake2s_set_lastnode( S ); + + S->f[0] = -1; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_clear_lastblock( blake2s_state *S ) +{ + if( S->last_node ) blake2s_clear_lastnode( S ); + + S->f[0] = 0; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_increment_counter( blake2s_state *S, const uint32_t inc ) +{ + uint64_t t = ( ( uint64_t )S->t[1] << 32 ) | S->t[0]; + t += inc; + S->t[0] = ( uint32_t )( t >> 0 ); + S->t[1] = ( uint32_t )( t >> 32 ); + return 0; +} + + +/* Parameter-related functions */ +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_digest_length( blake2s_param *P, const uint8_t digest_length ) +{ + P->digest_length = digest_length; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_fanout( blake2s_param *P, const uint8_t fanout ) +{ + P->fanout = fanout; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_max_depth( blake2s_param *P, const uint8_t depth ) +{ + P->depth = depth; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_leaf_length( blake2s_param *P, const uint32_t leaf_length ) +{ + P->leaf_length = leaf_length; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_node_offset( blake2s_param *P, const uint64_t node_offset ) +{ + store48( P->node_offset, node_offset ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_node_depth( blake2s_param *P, const uint8_t node_depth ) +{ + P->node_depth = node_depth; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_inner_length( blake2s_param *P, const uint8_t inner_length ) +{ + P->inner_length = inner_length; + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_salt( blake2s_param *P, const uint8_t salt[BLAKE2S_SALTBYTES] ) +{ + memcpy( P->salt, salt, BLAKE2S_SALTBYTES ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_param_set_personal( blake2s_param *P, const uint8_t personal[BLAKE2S_PERSONALBYTES] ) +{ + memcpy( P->personal, personal, BLAKE2S_PERSONALBYTES ); + return 0; +} + +BLAKE2_LOCAL_INLINE(int) blake2s_init0( blake2s_state *S ) +{ + memset( S, 0, sizeof( blake2s_state ) ); + + for( int i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; + + return 0; +} + +/* init2 xors IV with input parameter block */ +int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) +{ + /*blake2s_init0( S ); */ + const uint8_t * v = ( const uint8_t * )( blake2s_IV ); + const uint8_t * p = ( const uint8_t * )( P ); + uint8_t * h = ( uint8_t * )( S->h ); + /* IV XOR ParamBlock */ + memset( S, 0, sizeof( blake2s_state ) ); + + for( int i = 0; i < BLAKE2S_OUTBYTES; ++i ) h[i] = v[i] ^ p[i]; + + return 0; +} + + +/* Some sort of default parameter block initialization, for sequential blake2s */ +int blake2s_init( blake2s_state *S, const uint8_t outlen ) +{ + const blake2s_param P = + { + outlen, + 0, + 1, + 1, + 0, + {0}, + 0, + 0, + {0}, + {0} + }; + /* Move interval verification here? */ + if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; + return blake2s_init_param( S, &P ); +} + + +int blake2s_init_key( blake2s_state *S, const uint8_t outlen, const void *key, const uint8_t keylen ) +{ + const blake2s_param P = + { + outlen, + keylen, + 1, + 1, + 0, + {0}, + 0, + 0, + {0}, + {0} + }; + + /* Move interval verification here? */ + if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; + + if ( ( !key ) || ( !keylen ) || keylen > BLAKE2S_KEYBYTES ) return -1; + + if( blake2s_init_param( S, &P ) < 0 ) + return -1; + + { + uint8_t block[BLAKE2S_BLOCKBYTES]; + memset( block, 0, BLAKE2S_BLOCKBYTES ); + memcpy( block, key, keylen ); + blake2s_update( S, block, BLAKE2S_BLOCKBYTES ); + secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ + } + return 0; +} + + +BLAKE2_LOCAL_INLINE(int) blake2s_compress( blake2s_state *S, const uint8_t block[BLAKE2S_BLOCKBYTES] ) +{ + __m128i row1, row2, row3, row4; + __m128i buf1, buf2, buf3, buf4; +#if defined(HAVE_SSE41) + __m128i t0, t1; +#if !defined(HAVE_XOP) + __m128i t2; +#endif +#endif + __m128i ff0, ff1; +#if defined(HAVE_SSSE3) && !defined(HAVE_XOP) + const __m128i r8 = _mm_set_epi8( 12, 15, 14, 13, 8, 11, 10, 9, 4, 7, 6, 5, 0, 3, 2, 1 ); + const __m128i r16 = _mm_set_epi8( 13, 12, 15, 14, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2 ); +#endif +#if defined(HAVE_SSE41) + const __m128i m0 = LOADU( block + 00 ); + const __m128i m1 = LOADU( block + 16 ); + const __m128i m2 = LOADU( block + 32 ); + const __m128i m3 = LOADU( block + 48 ); +#else + const uint32_t m0 = ( ( uint32_t * )block )[ 0]; + const uint32_t m1 = ( ( uint32_t * )block )[ 1]; + const uint32_t m2 = ( ( uint32_t * )block )[ 2]; + const uint32_t m3 = ( ( uint32_t * )block )[ 3]; + const uint32_t m4 = ( ( uint32_t * )block )[ 4]; + const uint32_t m5 = ( ( uint32_t * )block )[ 5]; + const uint32_t m6 = ( ( uint32_t * )block )[ 6]; + const uint32_t m7 = ( ( uint32_t * )block )[ 7]; + const uint32_t m8 = ( ( uint32_t * )block )[ 8]; + const uint32_t m9 = ( ( uint32_t * )block )[ 9]; + const uint32_t m10 = ( ( uint32_t * )block )[10]; + const uint32_t m11 = ( ( uint32_t * )block )[11]; + const uint32_t m12 = ( ( uint32_t * )block )[12]; + const uint32_t m13 = ( ( uint32_t * )block )[13]; + const uint32_t m14 = ( ( uint32_t * )block )[14]; + const uint32_t m15 = ( ( uint32_t * )block )[15]; +#endif + row1 = ff0 = LOADU( &S->h[0] ); + row2 = ff1 = LOADU( &S->h[4] ); + row3 = _mm_setr_epi32( 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A ); + row4 = _mm_xor_si128( _mm_setr_epi32( 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19 ), LOADU( &S->t[0] ) ); + ROUND( 0 ); + ROUND( 1 ); + ROUND( 2 ); + ROUND( 3 ); + ROUND( 4 ); + ROUND( 5 ); + ROUND( 6 ); + ROUND( 7 ); + ROUND( 8 ); + ROUND( 9 ); + STOREU( &S->h[0], _mm_xor_si128( ff0, _mm_xor_si128( row1, row3 ) ) ); + STOREU( &S->h[4], _mm_xor_si128( ff1, _mm_xor_si128( row2, row4 ) ) ); + return 0; +} + +/* inlen now in bytes */ +int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen ) +{ + while( inlen > 0 ) + { + size_t left = S->buflen; + size_t fill = 2 * BLAKE2S_BLOCKBYTES - left; + + if( inlen > fill ) + { + memcpy( S->buf + left, in, fill ); /* Fill buffer */ + S->buflen += fill; + blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); + blake2s_compress( S, S->buf ); /* Compress */ + memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); /* Shift buffer left */ + S->buflen -= BLAKE2S_BLOCKBYTES; + in += fill; + inlen -= fill; + } + else /* inlen <= fill */ + { + memcpy( S->buf + left, in, inlen ); + S->buflen += inlen; /* Be lazy, do not compress */ + in += inlen; + inlen -= inlen; + } + } + + return 0; +} + +/* Is this correct? */ +int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen ) +{ + uint8_t buffer[BLAKE2S_OUTBYTES] = {0}; + + if( outlen > BLAKE2S_OUTBYTES ) + return -1; + + if( blake2s_is_lastblock( S ) ) + return -1; + + if( S->buflen > BLAKE2S_BLOCKBYTES ) + { + blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); + blake2s_compress( S, S->buf ); + S->buflen -= BLAKE2S_BLOCKBYTES; + memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, S->buflen ); + } + + blake2s_increment_counter( S, ( uint32_t )S->buflen ); + blake2s_set_lastblock( S ); + memset( S->buf + S->buflen, 0, 2 * BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */ + blake2s_compress( S, S->buf ); + + for( int i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ + store32( buffer + sizeof( S->h[i] ) * i, S->h[i] ); + + memcpy( out, buffer, outlen ); + return 0; +} + +/* inlen, at least, should be uint64_t. Others can be size_t. */ +int blake2s( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen ) +{ + blake2s_state S[1]; + + /* Verify parameters */ + if ( NULL == in && inlen > 0 ) return -1; + + if ( NULL == out ) return -1; + + if ( NULL == key && keylen > 0) return -1; + + if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; + + if( keylen > BLAKE2S_KEYBYTES ) return -1; + + if( keylen > 0 ) + { + if( blake2s_init_key( S, outlen, key, keylen ) < 0 ) return -1; + } + else + { + if( blake2s_init( S, outlen ) < 0 ) return -1; + } + + blake2s_update( S, ( const uint8_t * )in, inlen ); + blake2s_final( S, out, outlen ); + return 0; +} + +#if defined(SUPERCOP) +int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) +{ + return blake2s( out, in, NULL, BLAKE2S_OUTBYTES, inlen, 0 ); +} +#endif + +#if defined(BLAKE2S_SELFTEST) +#include +#include "blake2-kat.h" +int main( int argc, char **argv ) +{ + uint8_t key[BLAKE2S_KEYBYTES]; + uint8_t buf[KAT_LENGTH]; + + for( size_t i = 0; i < BLAKE2S_KEYBYTES; ++i ) + key[i] = ( uint8_t )i; + + for( size_t i = 0; i < KAT_LENGTH; ++i ) + buf[i] = ( uint8_t )i; + + for( size_t i = 0; i < KAT_LENGTH; ++i ) + { + uint8_t hash[BLAKE2S_OUTBYTES]; + + if( blake2s( hash, buf, key, BLAKE2S_OUTBYTES, i, BLAKE2S_KEYBYTES ) < 0 || + 0 != memcmp( hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES ) ) + { + puts( "error" ); + return -1; + } + } + + puts( "ok" ); + return 0; +} +#endif + + diff --git a/Modules/hashlib.h b/Modules/hashlib.h index 358045364c..530b6b1723 100644 --- a/Modules/hashlib.h +++ b/Modules/hashlib.h @@ -2,30 +2,33 @@ /* * Given a PyObject* obj, fill in the Py_buffer* viewp with the result - * of PyObject_GetBuffer. Sets an exception and issues a return NULL - * on any errors. + * of PyObject_GetBuffer. Sets an exception and issues the erraction + * on any errors, e.g. 'return NULL' or 'goto error'. */ -#define GET_BUFFER_VIEW_OR_ERROUT(obj, viewp) do { \ +#define GET_BUFFER_VIEW_OR_ERROR(obj, viewp, erraction) do { \ if (PyUnicode_Check((obj))) { \ PyErr_SetString(PyExc_TypeError, \ "Unicode-objects must be encoded before hashing");\ - return NULL; \ + erraction; \ } \ if (!PyObject_CheckBuffer((obj))) { \ PyErr_SetString(PyExc_TypeError, \ "object supporting the buffer API required"); \ - return NULL; \ + erraction; \ } \ if (PyObject_GetBuffer((obj), (viewp), PyBUF_SIMPLE) == -1) { \ - return NULL; \ + erraction; \ } \ if ((viewp)->ndim > 1) { \ PyErr_SetString(PyExc_BufferError, \ "Buffer must be single dimension"); \ PyBuffer_Release((viewp)); \ - return NULL; \ + erraction; \ } \ - } while(0); + } while(0) + +#define GET_BUFFER_VIEW_OR_ERROUT(obj, viewp) \ + GET_BUFFER_VIEW_OR_ERROR(obj, viewp, return NULL) /* * Helper code to synchronize access to the hash object when the GIL is -- cgit v1.2.1 From d541e7ad34b152da0aa475e55a21edbc477091ff Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 6 Sep 2016 13:24:00 -0700 Subject: replace Python aliases for standard integer types with the standard integer types (#17884) --- Modules/_randommodule.c | 44 ++++++++++++++++++++------------------------ Modules/_testcapimodule.c | 16 ++++++++-------- Modules/audioop.c | 8 ++++---- 3 files changed, 32 insertions(+), 36 deletions(-) (limited to 'Modules') diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index fd6b230e85..63a060c1ea 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -69,10 +69,6 @@ #include "Python.h" #include /* for seeding to current time */ -#ifndef PY_UINT32_T -# error "Failed to find an exact-width 32-bit integer type" -#endif - /* Period parameters -- These are all magic. Don't change. */ #define N 624 #define M 397 @@ -83,7 +79,7 @@ typedef struct { PyObject_HEAD int index; - PY_UINT32_T state[N]; + uint32_t state[N]; } RandomObject; static PyTypeObject Random_Type; @@ -95,13 +91,13 @@ static PyTypeObject Random_Type; /* generates a random number on [0,0xffffffff]-interval */ -static PY_UINT32_T +static uint32_t genrand_int32(RandomObject *self) { - PY_UINT32_T y; - static const PY_UINT32_T mag01[2] = {0x0U, MATRIX_A}; + uint32_t y; + static const uint32_t mag01[2] = {0x0U, MATRIX_A}; /* mag01[x] = x * MATRIX_A for x=0,1 */ - PY_UINT32_T *mt; + uint32_t *mt; mt = self->state; if (self->index >= N) { /* generate N words at one time */ @@ -141,16 +137,16 @@ genrand_int32(RandomObject *self) static PyObject * random_random(RandomObject *self) { - PY_UINT32_T a=genrand_int32(self)>>5, b=genrand_int32(self)>>6; + uint32_t a=genrand_int32(self)>>5, b=genrand_int32(self)>>6; return PyFloat_FromDouble((a*67108864.0+b)*(1.0/9007199254740992.0)); } /* initializes mt[N] with a seed */ static void -init_genrand(RandomObject *self, PY_UINT32_T s) +init_genrand(RandomObject *self, uint32_t s) { int mti; - PY_UINT32_T *mt; + uint32_t *mt; mt = self->state; mt[0]= s; @@ -170,10 +166,10 @@ init_genrand(RandomObject *self, PY_UINT32_T s) /* init_key is the array for initializing keys */ /* key_length is its length */ static PyObject * -init_by_array(RandomObject *self, PY_UINT32_T init_key[], size_t key_length) +init_by_array(RandomObject *self, uint32_t init_key[], size_t key_length) { size_t i, j, k; /* was signed in the original code. RDH 12/16/2002 */ - PY_UINT32_T *mt; + uint32_t *mt; mt = self->state; init_genrand(self, 19650218U); @@ -181,14 +177,14 @@ init_by_array(RandomObject *self, PY_UINT32_T init_key[], size_t key_length) k = (N>key_length ? N : key_length); for (; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525U)) - + init_key[j] + (PY_UINT32_T)j; /* non linear */ + + init_key[j] + (uint32_t)j; /* non linear */ i++; j++; if (i>=N) { mt[0] = mt[N-1]; i=1; } if (j>=key_length) j=0; } for (k=N-1; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941U)) - - (PY_UINT32_T)i; /* non linear */ + - (uint32_t)i; /* non linear */ i++; if (i>=N) { mt[0] = mt[N-1]; i=1; } } @@ -208,7 +204,7 @@ random_seed(RandomObject *self, PyObject *args) { PyObject *result = NULL; /* guilty until proved innocent */ PyObject *n = NULL; - PY_UINT32_T *key = NULL; + uint32_t *key = NULL; size_t bits, keyused; int res; PyObject *arg = NULL; @@ -220,7 +216,7 @@ random_seed(RandomObject *self, PyObject *args) time_t now; time(&now); - init_genrand(self, (PY_UINT32_T)now); + init_genrand(self, (uint32_t)now); Py_INCREF(Py_None); return Py_None; } @@ -248,7 +244,7 @@ random_seed(RandomObject *self, PyObject *args) keyused = bits == 0 ? 1 : (bits - 1) / 32 + 1; /* Convert seed to byte sequence. */ - key = (PY_UINT32_T *)PyMem_Malloc((size_t)4 * keyused); + key = (uint32_t *)PyMem_Malloc((size_t)4 * keyused); if (key == NULL) { PyErr_NoMemory(); goto Done; @@ -267,7 +263,7 @@ random_seed(RandomObject *self, PyObject *args) size_t i, j; /* Reverse an array. */ for (i = 0, j = keyused - 1; i < j; i++, j--) { - PY_UINT32_T tmp = key[i]; + uint32_t tmp = key[i]; key[i] = key[j]; key[j] = tmp; } @@ -329,7 +325,7 @@ random_setstate(RandomObject *self, PyObject *state) element = PyLong_AsUnsignedLong(PyTuple_GET_ITEM(state, i)); if (element == (unsigned long)-1 && PyErr_Occurred()) return NULL; - self->state[i] = (PY_UINT32_T)element; + self->state[i] = (uint32_t)element; } index = PyLong_AsLong(PyTuple_GET_ITEM(state, i)); @@ -349,8 +345,8 @@ static PyObject * random_getrandbits(RandomObject *self, PyObject *args) { int k, i, words; - PY_UINT32_T r; - PY_UINT32_T *wordarray; + uint32_t r; + uint32_t *wordarray; PyObject *result; if (!PyArg_ParseTuple(args, "i:getrandbits", &k)) @@ -366,7 +362,7 @@ random_getrandbits(RandomObject *self, PyObject *args) return PyLong_FromUnsignedLong(genrand_int32(self) >> (32 - k)); words = (k - 1) / 32 + 1; - wordarray = (PY_UINT32_T *)PyMem_Malloc(words * 4); + wordarray = (uint32_t *)PyMem_Malloc(words * 4); if (wordarray == NULL) { PyErr_NoMemory(); return NULL; diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 290797f6b7..8d2cf31693 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -98,14 +98,14 @@ test_sizeof_c_types(PyObject *self) CHECK_SIGNNESS(Py_UCS1, 0); CHECK_SIGNNESS(Py_UCS2, 0); CHECK_SIGNNESS(Py_UCS4, 0); - CHECK_SIZEOF(PY_INT32_T, 4); - CHECK_SIGNNESS(PY_INT32_T, 1); - CHECK_SIZEOF(PY_UINT32_T, 4); - CHECK_SIGNNESS(PY_UINT32_T, 0); - CHECK_SIZEOF(PY_INT64_T, 8); - CHECK_SIGNNESS(PY_INT64_T, 1); - CHECK_SIZEOF(PY_UINT64_T, 8); - CHECK_SIGNNESS(PY_UINT64_T, 0); + CHECK_SIZEOF(int32_t, 4); + CHECK_SIGNNESS(int32_t, 1); + CHECK_SIZEOF(uint32_t, 4); + CHECK_SIGNNESS(uint32_t, 0); + CHECK_SIZEOF(int64_t, 8); + CHECK_SIGNNESS(int64_t, 1); + CHECK_SIZEOF(uint64_t, 8); + CHECK_SIGNNESS(uint64_t, 0); /* pointer/size types */ CHECK_SIZEOF(size_t, sizeof(void *)); diff --git a/Modules/audioop.c b/Modules/audioop.c index ed1eca3c1d..c11506c4c1 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -297,7 +297,7 @@ static const int stepsizeTable[89] = { #define GETINT8(cp, i) GETINTX(signed char, (cp), (i)) #define GETINT16(cp, i) GETINTX(short, (cp), (i)) -#define GETINT32(cp, i) GETINTX(PY_INT32_T, (cp), (i)) +#define GETINT32(cp, i) GETINTX(int32_t, (cp), (i)) #if WORDS_BIGENDIAN #define GETINT24(cp, i) ( \ @@ -314,7 +314,7 @@ static const int stepsizeTable[89] = { #define SETINT8(cp, i, val) SETINTX(signed char, (cp), (i), (val)) #define SETINT16(cp, i, val) SETINTX(short, (cp), (i), (val)) -#define SETINT32(cp, i, val) SETINTX(PY_INT32_T, (cp), (i), (val)) +#define SETINT32(cp, i, val) SETINTX(int32_t, (cp), (i), (val)) #if WORDS_BIGENDIAN #define SETINT24(cp, i, val) do { \ @@ -1129,7 +1129,7 @@ audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias) val = ((unsigned int)GETINT24(fragment->buf, i)) & 0xffffffu; else { assert(width == 4); - val = GETINTX(PY_UINT32_T, fragment->buf, i); + val = GETINTX(uint32_t, fragment->buf, i); } val += (unsigned int)bias; @@ -1144,7 +1144,7 @@ audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias) SETINT24(ncp, i, (int)val); else { assert(width == 4); - SETINTX(PY_UINT32_T, ncp, i, val); + SETINTX(uint32_t, ncp, i, val); } } return rv; -- cgit v1.2.1 From 82b75eb31160ec9c025e450ac9fa3300d560a245 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 6 Sep 2016 13:47:26 -0700 Subject: replace Py_(u)intptr_t with the c99 standard types --- Modules/_elementtree.c | 8 ++++---- Modules/_sre.c | 14 +++++++------- Modules/_testcapimodule.c | 16 ++++++++-------- Modules/_tracemalloc.c | 30 +++++++++++++++--------------- Modules/faulthandler.c | 10 +++++----- Modules/posixmodule.c | 26 +++++++++++++------------- Modules/selectmodule.c | 4 ++-- Modules/signalmodule.c | 4 ++-- Modules/sre_lib.h | 2 +- 9 files changed, 57 insertions(+), 57 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 39eba7c825..ca5ab2cbe2 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -57,9 +57,9 @@ do { memory -= size; printf("%8d - %s\n", memory, comment); } while (0) that all use of text and tail as object pointers must be wrapped in JOIN_OBJ. see comments in the ElementObject definition for more info. */ -#define JOIN_GET(p) ((Py_uintptr_t) (p) & 1) -#define JOIN_SET(p, flag) ((void*) ((Py_uintptr_t) (JOIN_OBJ(p)) | (flag))) -#define JOIN_OBJ(p) ((PyObject*) ((Py_uintptr_t) (p) & ~(Py_uintptr_t)1)) +#define JOIN_GET(p) ((uintptr_t) (p) & 1) +#define JOIN_SET(p, flag) ((void*) ((uintptr_t) (JOIN_OBJ(p)) | (flag))) +#define JOIN_OBJ(p) ((PyObject*) ((uintptr_t) (p) & ~(uintptr_t)1)) /* Py_CLEAR for a PyObject* that uses a join flag. Pass the pointer by * reference since this function sets it to NULL. @@ -797,7 +797,7 @@ _elementtree_Element___deepcopy__(ElementObject *self, PyObject *memo) } /* add object to memo dictionary (so deepcopy won't visit it again) */ - id = PyLong_FromSsize_t((Py_uintptr_t) self); + id = PyLong_FromSsize_t((uintptr_t) self); if (!id) goto error; diff --git a/Modules/_sre.c b/Modules/_sre.c index 0a62f62dc6..afa90999ac 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -1582,7 +1582,7 @@ _sre_compile_impl(PyObject *module, PyObject *pattern, int flags, skip = *code; \ VTRACE(("%lu (skip to %p)\n", \ (unsigned long)skip, code+skip)); \ - if (skip-adj > (Py_uintptr_t)(end - code)) \ + if (skip-adj > (uintptr_t)(end - code)) \ FAIL; \ code++; \ } while (0) @@ -1616,7 +1616,7 @@ _validate_charset(SRE_CODE *code, SRE_CODE *end) case SRE_OP_CHARSET: offset = 256/SRE_CODE_BITS; /* 256-bit bitmap */ - if (offset > (Py_uintptr_t)(end - code)) + if (offset > (uintptr_t)(end - code)) FAIL; code += offset; break; @@ -1624,7 +1624,7 @@ _validate_charset(SRE_CODE *code, SRE_CODE *end) case SRE_OP_BIGCHARSET: GET_ARG; /* Number of blocks */ offset = 256/sizeof(SRE_CODE); /* 256-byte table */ - if (offset > (Py_uintptr_t)(end - code)) + if (offset > (uintptr_t)(end - code)) FAIL; /* Make sure that each byte points to a valid block */ for (i = 0; i < 256; i++) { @@ -1633,7 +1633,7 @@ _validate_charset(SRE_CODE *code, SRE_CODE *end) } code += offset; offset = arg * (256/SRE_CODE_BITS); /* 256-bit bitmap times arg */ - if (offset > (Py_uintptr_t)(end - code)) + if (offset > (uintptr_t)(end - code)) FAIL; code += offset; break; @@ -1784,11 +1784,11 @@ _validate_inner(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups) GET_ARG; prefix_len = arg; GET_ARG; /* Here comes the prefix string */ - if (prefix_len > (Py_uintptr_t)(newcode - code)) + if (prefix_len > (uintptr_t)(newcode - code)) FAIL; code += prefix_len; /* And here comes the overlap table */ - if (prefix_len > (Py_uintptr_t)(newcode - code)) + if (prefix_len > (uintptr_t)(newcode - code)) FAIL; /* Each overlap value should be < prefix_len */ for (i = 0; i < prefix_len; i++) { @@ -1917,7 +1917,7 @@ _validate_inner(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups) to allow arbitrary jumps anywhere in the code; so we just look for a JUMP opcode preceding our skip target. */ - if (skip >= 3 && skip-3 < (Py_uintptr_t)(end - code) && + if (skip >= 3 && skip-3 < (uintptr_t)(end - code) && code[skip-3] == SRE_OP_JUMP) { VTRACE(("both then and else parts present\n")); diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 8d2cf31693..87cf4b271a 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -113,10 +113,10 @@ test_sizeof_c_types(PyObject *self) CHECK_SIZEOF(Py_ssize_t, sizeof(void *)); CHECK_SIGNNESS(Py_ssize_t, 1); - CHECK_SIZEOF(Py_uintptr_t, sizeof(void *)); - CHECK_SIGNNESS(Py_uintptr_t, 0); - CHECK_SIZEOF(Py_intptr_t, sizeof(void *)); - CHECK_SIGNNESS(Py_intptr_t, 1); + CHECK_SIZEOF(uintptr_t, sizeof(void *)); + CHECK_SIGNNESS(uintptr_t, 0); + CHECK_SIZEOF(intptr_t, sizeof(void *)); + CHECK_SIGNNESS(intptr_t, 1); Py_INCREF(Py_None); return Py_None; @@ -3861,11 +3861,11 @@ tracemalloc_track(PyObject *self, PyObject *args) if (release_gil) { Py_BEGIN_ALLOW_THREADS - res = _PyTraceMalloc_Track(domain, (Py_uintptr_t)ptr, size); + res = _PyTraceMalloc_Track(domain, (uintptr_t)ptr, size); Py_END_ALLOW_THREADS } else { - res = _PyTraceMalloc_Track(domain, (Py_uintptr_t)ptr, size); + res = _PyTraceMalloc_Track(domain, (uintptr_t)ptr, size); } if (res < 0) { @@ -3890,7 +3890,7 @@ tracemalloc_untrack(PyObject *self, PyObject *args) if (PyErr_Occurred()) return NULL; - res = _PyTraceMalloc_Untrack(domain, (Py_uintptr_t)ptr); + res = _PyTraceMalloc_Untrack(domain, (uintptr_t)ptr); if (res < 0) { PyErr_SetString(PyExc_RuntimeError, "_PyTraceMalloc_Track error"); return NULL; @@ -3912,7 +3912,7 @@ tracemalloc_get_traceback(PyObject *self, PyObject *args) if (PyErr_Occurred()) return NULL; - return _PyTraceMalloc_GetTraceback(domain, (Py_uintptr_t)ptr); + return _PyTraceMalloc_GetTraceback(domain, (uintptr_t)ptr); } diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 48f5b47025..1a53cfec25 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -67,7 +67,7 @@ typedef struct __attribute__((packed)) #endif { - Py_uintptr_t ptr; + uintptr_t ptr; _PyTraceMalloc_domain_t domain; } pointer_t; @@ -523,7 +523,7 @@ static int tracemalloc_use_domain_cb(_Py_hashtable_t *old_traces, _Py_hashtable_entry_t *entry, void *user_data) { - Py_uintptr_t ptr; + uintptr_t ptr; pointer_t key; _Py_hashtable_t *new_traces = (_Py_hashtable_t *)user_data; const void *pdata = _Py_HASHTABLE_ENTRY_PDATA(old_traces, entry); @@ -538,7 +538,7 @@ tracemalloc_use_domain_cb(_Py_hashtable_t *old_traces, } -/* Convert tracemalloc_traces from compact key (Py_uintptr_t) to pointer_t key. +/* Convert tracemalloc_traces from compact key (uintptr_t) to pointer_t key. * Return 0 on success, -1 on error. */ static int tracemalloc_use_domain(void) @@ -572,7 +572,7 @@ tracemalloc_use_domain(void) static void -tracemalloc_remove_trace(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) +tracemalloc_remove_trace(_PyTraceMalloc_domain_t domain, uintptr_t ptr) { trace_t trace; int removed; @@ -595,11 +595,11 @@ tracemalloc_remove_trace(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) } #define REMOVE_TRACE(ptr) \ - tracemalloc_remove_trace(DEFAULT_DOMAIN, (Py_uintptr_t)(ptr)) + tracemalloc_remove_trace(DEFAULT_DOMAIN, (uintptr_t)(ptr)) static int -tracemalloc_add_trace(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr, +tracemalloc_add_trace(_PyTraceMalloc_domain_t domain, uintptr_t ptr, size_t size) { pointer_t key = {ptr, domain}; @@ -617,7 +617,7 @@ tracemalloc_add_trace(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr, if (!tracemalloc_config.use_domain && domain != DEFAULT_DOMAIN) { /* first trace using a non-zero domain whereas traces use compact - (Py_uintptr_t) keys: switch to pointer_t keys. */ + (uintptr_t) keys: switch to pointer_t keys. */ if (tracemalloc_use_domain() < 0) { return -1; } @@ -663,7 +663,7 @@ tracemalloc_add_trace(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr, } #define ADD_TRACE(ptr, size) \ - tracemalloc_add_trace(DEFAULT_DOMAIN, (Py_uintptr_t)(ptr), size) + tracemalloc_add_trace(DEFAULT_DOMAIN, (uintptr_t)(ptr), size) static void* @@ -1023,7 +1023,7 @@ tracemalloc_init(void) hashtable_compare_pointer_t); } else { - tracemalloc_traces = hashtable_new(sizeof(Py_uintptr_t), + tracemalloc_traces = hashtable_new(sizeof(uintptr_t), sizeof(trace_t), _Py_hashtable_hash_ptr, _Py_hashtable_compare_direct); @@ -1414,7 +1414,7 @@ finally: static traceback_t* -tracemalloc_get_traceback(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) +tracemalloc_get_traceback(_PyTraceMalloc_domain_t domain, uintptr_t ptr) { trace_t trace; int found; @@ -1461,7 +1461,7 @@ py_tracemalloc_get_object_traceback(PyObject *self, PyObject *obj) else ptr = (void *)obj; - traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, (Py_uintptr_t)ptr); + traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, (uintptr_t)ptr); if (traceback == NULL) Py_RETURN_NONE; @@ -1489,7 +1489,7 @@ _PyMem_DumpTraceback(int fd, const void *ptr) traceback_t *traceback; int i; - traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, (Py_uintptr_t)ptr); + traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, (uintptr_t)ptr); if (traceback == NULL) return; @@ -1762,7 +1762,7 @@ _PyTraceMalloc_Fini(void) } int -_PyTraceMalloc_Track(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr, +_PyTraceMalloc_Track(_PyTraceMalloc_domain_t domain, uintptr_t ptr, size_t size) { int res; @@ -1791,7 +1791,7 @@ _PyTraceMalloc_Track(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr, int -_PyTraceMalloc_Untrack(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) +_PyTraceMalloc_Untrack(_PyTraceMalloc_domain_t domain, uintptr_t ptr) { if (!tracemalloc_config.tracing) { /* tracemalloc is not tracing: do nothing */ @@ -1807,7 +1807,7 @@ _PyTraceMalloc_Untrack(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) PyObject* -_PyTraceMalloc_GetTraceback(_PyTraceMalloc_domain_t domain, Py_uintptr_t ptr) +_PyTraceMalloc_GetTraceback(_PyTraceMalloc_domain_t domain, uintptr_t ptr) { traceback_t *traceback; diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 8969b4ce5c..c2d30008fc 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -1072,12 +1072,12 @@ faulthandler_fatal_error_py(PyObject *self, PyObject *args) # pragma intel optimization_level 0 #endif static -Py_uintptr_t -stack_overflow(Py_uintptr_t min_sp, Py_uintptr_t max_sp, size_t *depth) +uintptr_t +stack_overflow(uintptr_t min_sp, uintptr_t max_sp, size_t *depth) { /* allocate 4096 bytes on the stack at each call */ unsigned char buffer[4096]; - Py_uintptr_t sp = (Py_uintptr_t)&buffer; + uintptr_t sp = (uintptr_t)&buffer; *depth += 1; if (sp < min_sp || max_sp < sp) return sp; @@ -1090,8 +1090,8 @@ static PyObject * faulthandler_stack_overflow(PyObject *self) { size_t depth, size; - Py_uintptr_t sp = (Py_uintptr_t)&depth; - Py_uintptr_t stop; + uintptr_t sp = (uintptr_t)&depth; + uintptr_t stop; faulthandler_suppress_crash_report(); depth = 0; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index df295c25b6..e88ee56fa0 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2492,8 +2492,8 @@ class id_t_converter(CConverter): type = 'id_t' format_unit = '" _Py_PARSE_PID "' -class Py_intptr_t_converter(CConverter): - type = 'Py_intptr_t' +class intptr_t_converter(CConverter): + type = 'intptr_t' format_unit = '" _Py_PARSE_INTPTR "' class Py_off_t_converter(CConverter): @@ -5244,7 +5244,7 @@ os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv) char **argvlist; int i; Py_ssize_t argc; - Py_intptr_t spawnval; + intptr_t spawnval; PyObject *(*getitem)(PyObject *, Py_ssize_t); /* spawnv has three arguments: (mode, path, argv), where @@ -5323,7 +5323,7 @@ os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, char **envlist; PyObject *res = NULL; Py_ssize_t argc, i, envc; - Py_intptr_t spawnval; + intptr_t spawnval; PyObject *(*getitem)(PyObject *, Py_ssize_t); Py_ssize_t lastarg = 0; @@ -7078,7 +7078,7 @@ os_waitpid_impl(PyObject *module, pid_t pid, int options) /* MS C has a variant of waitpid() that's usable for most purposes. */ /*[clinic input] os.waitpid - pid: Py_intptr_t + pid: intptr_t options: int / @@ -7091,11 +7091,11 @@ The options argument is ignored on Windows. [clinic start generated code]*/ static PyObject * -os_waitpid_impl(PyObject *module, Py_intptr_t pid, int options) +os_waitpid_impl(PyObject *module, intptr_t pid, int options) /*[clinic end generated code: output=15f1ce005a346b09 input=444c8f51cca5b862]*/ { int status; - Py_intptr_t res; + intptr_t res; int async_err = 0; do { @@ -8559,8 +8559,8 @@ os_pipe_impl(PyObject *module) Py_BEGIN_ALLOW_THREADS ok = CreatePipe(&read, &write, &attr, 0); if (ok) { - fds[0] = _open_osfhandle((Py_intptr_t)read, _O_RDONLY); - fds[1] = _open_osfhandle((Py_intptr_t)write, _O_WRONLY); + fds[0] = _open_osfhandle((intptr_t)read, _O_RDONLY); + fds[1] = _open_osfhandle((intptr_t)write, _O_WRONLY); if (fds[0] == -1 || fds[1] == -1) { CloseHandle(read); CloseHandle(write); @@ -11375,14 +11375,14 @@ os_set_inheritable_impl(PyObject *module, int fd, int inheritable) #ifdef MS_WINDOWS /*[clinic input] os.get_handle_inheritable -> bool - handle: Py_intptr_t + handle: intptr_t / Get the close-on-exe flag of the specified file descriptor. [clinic start generated code]*/ static int -os_get_handle_inheritable_impl(PyObject *module, Py_intptr_t handle) +os_get_handle_inheritable_impl(PyObject *module, intptr_t handle) /*[clinic end generated code: output=9e5389b0aa0916ce input=5f7759443aae3dc5]*/ { DWORD flags; @@ -11398,7 +11398,7 @@ os_get_handle_inheritable_impl(PyObject *module, Py_intptr_t handle) /*[clinic input] os.set_handle_inheritable - handle: Py_intptr_t + handle: intptr_t inheritable: bool / @@ -11406,7 +11406,7 @@ Set the inheritable flag of the specified handle. [clinic start generated code]*/ static PyObject * -os_set_handle_inheritable_impl(PyObject *module, Py_intptr_t handle, +os_set_handle_inheritable_impl(PyObject *module, intptr_t handle, int inheritable) /*[clinic end generated code: output=b1e67bfa3213d745 input=e64b2b2730469def]*/ { diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 80e7873465..49fa1f5268 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -1797,7 +1797,7 @@ static PyTypeObject kqueue_queue_Type; */ #if !defined(__OpenBSD__) # define IDENT_TYPE T_UINTPTRT -# define IDENT_CAST Py_intptr_t +# define IDENT_CAST intptr_t # define DATA_TYPE T_INTPTRT # define DATA_FMT_UNIT INTPTRT_FMT_UNIT # define IDENT_AsType PyLong_AsUintptr_t @@ -1876,7 +1876,7 @@ static PyObject * kqueue_event_richcompare(kqueue_event_Object *s, kqueue_event_Object *o, int op) { - Py_intptr_t result = 0; + intptr_t result = 0; if (!kqueue_event_Check(o)) { if (op == Py_EQ || op == Py_NE) { diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index a1a18b062d..e0780917c8 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -198,7 +198,7 @@ static int report_wakeup_write_error(void *data) { int save_errno = errno; - errno = (int) (Py_intptr_t) data; + errno = (int) (intptr_t) data; PyErr_SetFromErrno(PyExc_OSError); PySys_WriteStderr("Exception ignored when trying to write to the " "signal wakeup fd:\n"); @@ -277,7 +277,7 @@ trip_signal(int sig_num) if (rc < 0) { Py_AddPendingCall(report_wakeup_write_error, - (void *)(Py_intptr_t)errno); + (void *)(intptr_t)errno); } } } diff --git a/Modules/sre_lib.h b/Modules/sre_lib.h index 78f7ac745e..0865fc63a0 100644 --- a/Modules/sre_lib.h +++ b/Modules/sre_lib.h @@ -529,7 +529,7 @@ entrance: if (ctx->pattern[0] == SRE_OP_INFO) { /* optimization info block */ /* <1=skip> <2=flags> <3=min> ... */ - if (ctx->pattern[3] && (Py_uintptr_t)(end - ctx->ptr) < ctx->pattern[3]) { + if (ctx->pattern[3] && (uintptr_t)(end - ctx->ptr) < ctx->pattern[3]) { TRACE(("reject (got %" PY_FORMAT_SIZE_T "d chars, " "need %" PY_FORMAT_SIZE_T "d)\n", end - ctx->ptr, (Py_ssize_t) ctx->pattern[3])); -- cgit v1.2.1 From b04d7bfe501cbc6990d2d24ff41308c74e7299fa Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 6 Sep 2016 23:55:11 +0300 Subject: Issue #25761: Improved error reporting about truncated pickle data in C implementation of unpickler. UnpicklingError is now raised instead of AttributeError and ValueError in some cases. --- Modules/_pickle.c | 80 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 41 insertions(+), 39 deletions(-) (limited to 'Modules') diff --git a/Modules/_pickle.c b/Modules/_pickle.c index eae3394533..fc16c63f75 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1091,6 +1091,14 @@ _Unpickler_SetStringInput(UnpicklerObject *self, PyObject *input) return self->input_len; } +static int +bad_readline(void) +{ + PickleState *st = _Pickle_GetGlobalState(); + PyErr_SetString(st->UnpicklingError, "pickle data was truncated"); + return -1; +} + static int _Unpickler_SkipConsumed(UnpicklerObject *self) { @@ -1195,17 +1203,14 @@ _Unpickler_ReadImpl(UnpicklerObject *self, char **s, Py_ssize_t n) /* This case is handled by the _Unpickler_Read() macro for efficiency */ assert(self->next_read_idx + n > self->input_len); - if (!self->read) { - PyErr_Format(PyExc_EOFError, "Ran out of input"); - return -1; - } + if (!self->read) + return bad_readline(); + num_read = _Unpickler_ReadFromFile(self, n); if (num_read < 0) return -1; - if (num_read < n) { - PyErr_Format(PyExc_EOFError, "Ran out of input"); - return -1; - } + if (num_read < n) + return bad_readline(); *s = self->input_buffer; self->next_read_idx = n; return n; @@ -1249,7 +1254,7 @@ _Unpickler_CopyLine(UnpicklerObject *self, char *line, Py_ssize_t len, } /* Read a line from the input stream/buffer. If we run off the end of the input - before hitting \n, return the data we found. + before hitting \n, raise an error. Returns the number of chars read, or -1 on failure. */ static Py_ssize_t @@ -1265,20 +1270,16 @@ _Unpickler_Readline(UnpicklerObject *self, char **result) return _Unpickler_CopyLine(self, line_start, num_read, result); } } - if (self->read) { - num_read = _Unpickler_ReadFromFile(self, READ_WHOLE_LINE); - if (num_read < 0) - return -1; - self->next_read_idx = num_read; - return _Unpickler_CopyLine(self, self->input_buffer, num_read, result); - } + if (!self->read) + return bad_readline(); - /* If we get here, we've run off the end of the input string. Return the - remaining string and let the caller figure it out. */ - *result = self->input_buffer + self->next_read_idx; - num_read = i - self->next_read_idx; - self->next_read_idx = i; - return num_read; + num_read = _Unpickler_ReadFromFile(self, READ_WHOLE_LINE); + if (num_read < 0) + return -1; + if (num_read == 0 || self->input_buffer[num_read - 1] != '\n') + return bad_readline(); + self->next_read_idx = num_read; + return _Unpickler_CopyLine(self, self->input_buffer, num_read, result); } /* Returns -1 (with an exception set) on failure, 0 on success. The memo array @@ -4599,14 +4600,6 @@ load_none(UnpicklerObject *self) return 0; } -static int -bad_readline(void) -{ - PickleState *st = _Pickle_GetGlobalState(); - PyErr_SetString(st->UnpicklingError, "pickle data was truncated"); - return -1; -} - static int load_int(UnpicklerObject *self) { @@ -6245,8 +6238,13 @@ load(UnpicklerObject *self) case opcode: if (load_func(self, (arg)) < 0) break; continue; while (1) { - if (_Unpickler_Read(self, &s, 1) < 0) - break; + if (_Unpickler_Read(self, &s, 1) < 0) { + PickleState *st = _Pickle_GetGlobalState(); + if (PyErr_ExceptionMatches(st->UnpicklingError)) { + PyErr_Format(PyExc_EOFError, "Ran out of input"); + } + return NULL; + } switch ((enum opcode)s[0]) { OP(NONE, load_none) @@ -6318,15 +6316,19 @@ load(UnpicklerObject *self) break; default: - if (s[0] == '\0') { - PyErr_SetNone(PyExc_EOFError); - } - else { + { PickleState *st = _Pickle_GetGlobalState(); - PyErr_Format(st->UnpicklingError, - "invalid load key, '%c'.", s[0]); + unsigned char c = (unsigned char) *s; + if (0x20 <= c && c <= 0x7e && c != '\'' && c != '\\') { + PyErr_Format(st->UnpicklingError, + "invalid load key, '%c'.", c); + } + else { + PyErr_Format(st->UnpicklingError, + "invalid load key, '\\x%02x'.", c); + } + return NULL; } - return NULL; } break; /* and we are done! */ -- cgit v1.2.1 From dc659cc7eadb1ac32426e00730fe1c25837c966d Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 6 Sep 2016 23:18:03 +0200 Subject: Issue #26798: for loop initial declarations are only allowed in C99 or C11 mode --- Modules/_blake2/impl/blake2b-ref.c | 6 ++++-- Modules/_blake2/impl/blake2b.c | 6 ++++-- Modules/_blake2/impl/blake2s-ref.c | 6 ++++-- Modules/_blake2/impl/blake2s.c | 9 ++++++--- 4 files changed, 18 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_blake2/impl/blake2b-ref.c b/Modules/_blake2/impl/blake2b-ref.c index ac91568d2b..6b56fce377 100644 --- a/Modules/_blake2/impl/blake2b-ref.c +++ b/Modules/_blake2/impl/blake2b-ref.c @@ -145,9 +145,10 @@ BLAKE2_LOCAL_INLINE(int) blake2b_param_set_personal( blake2b_param *P, const uin BLAKE2_LOCAL_INLINE(int) blake2b_init0( blake2b_state *S ) { + int i; memset( S, 0, sizeof( blake2b_state ) ); - for( int i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i]; + for( i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i]; return 0; } @@ -319,6 +320,7 @@ int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen ) int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen ) { uint8_t buffer[BLAKE2B_OUTBYTES] = {0}; + int i; if( out == NULL || outlen == 0 || outlen > BLAKE2B_OUTBYTES ) return -1; @@ -339,7 +341,7 @@ int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen ) memset( S->buf + S->buflen, 0, 2 * BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */ blake2b_compress( S, S->buf ); - for( int i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ + for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ store64( buffer + sizeof( S->h[i] ) * i, S->h[i] ); memcpy( out, buffer, outlen ); diff --git a/Modules/_blake2/impl/blake2b.c b/Modules/_blake2/impl/blake2b.c index f9090a1770..784ec00434 100644 --- a/Modules/_blake2/impl/blake2b.c +++ b/Modules/_blake2/impl/blake2b.c @@ -174,9 +174,10 @@ BLAKE2_LOCAL_INLINE(int) blake2b_param_set_personal( blake2b_param *P, const uin BLAKE2_LOCAL_INLINE(int) blake2b_init0( blake2b_state *S ) { + int i; memset( S, 0, sizeof( blake2b_state ) ); - for( int i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i]; + for( i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i]; return 0; } @@ -188,10 +189,11 @@ int blake2b_init_param( blake2b_state *S, const blake2b_param *P ) const uint8_t * v = ( const uint8_t * )( blake2b_IV ); const uint8_t * p = ( const uint8_t * )( P ); uint8_t * h = ( uint8_t * )( S->h ); + int i; /* IV XOR ParamBlock */ memset( S, 0, sizeof( blake2b_state ) ); - for( int i = 0; i < BLAKE2B_OUTBYTES; ++i ) h[i] = v[i] ^ p[i]; + for( i = 0; i < BLAKE2B_OUTBYTES; ++i ) h[i] = v[i] ^ p[i]; return 0; } diff --git a/Modules/_blake2/impl/blake2s-ref.c b/Modules/_blake2/impl/blake2s-ref.c index 0e246c3ce1..0cf4707da1 100644 --- a/Modules/_blake2/impl/blake2s-ref.c +++ b/Modules/_blake2/impl/blake2s-ref.c @@ -138,9 +138,10 @@ BLAKE2_LOCAL_INLINE(int) blake2s_param_set_personal( blake2s_param *P, const uin BLAKE2_LOCAL_INLINE(int) blake2s_init0( blake2s_state *S ) { + int i; memset( S, 0, sizeof( blake2s_state ) ); - for( int i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; + for( i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; return 0; } @@ -308,6 +309,7 @@ int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen ) int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen ) { uint8_t buffer[BLAKE2S_OUTBYTES] = {0}; + int i; if( out == NULL || outlen == 0 || outlen > BLAKE2S_OUTBYTES ) return -1; @@ -329,7 +331,7 @@ int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen ) memset( S->buf + S->buflen, 0, 2 * BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */ blake2s_compress( S, S->buf ); - for( int i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ + for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ store32( buffer + sizeof( S->h[i] ) * i, S->h[i] ); memcpy( out, buffer, outlen ); diff --git a/Modules/_blake2/impl/blake2s.c b/Modules/_blake2/impl/blake2s.c index 030a85e6ce..3aea4af303 100644 --- a/Modules/_blake2/impl/blake2s.c +++ b/Modules/_blake2/impl/blake2s.c @@ -161,9 +161,10 @@ BLAKE2_LOCAL_INLINE(int) blake2s_param_set_personal( blake2s_param *P, const uin BLAKE2_LOCAL_INLINE(int) blake2s_init0( blake2s_state *S ) { + int i; memset( S, 0, sizeof( blake2s_state ) ); - for( int i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; + for( i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; return 0; } @@ -175,10 +176,11 @@ int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) const uint8_t * v = ( const uint8_t * )( blake2s_IV ); const uint8_t * p = ( const uint8_t * )( P ); uint8_t * h = ( uint8_t * )( S->h ); + int i; /* IV XOR ParamBlock */ memset( S, 0, sizeof( blake2s_state ) ); - for( int i = 0; i < BLAKE2S_OUTBYTES; ++i ) h[i] = v[i] ^ p[i]; + for( i = 0; i < BLAKE2S_OUTBYTES; ++i ) h[i] = v[i] ^ p[i]; return 0; } @@ -333,6 +335,7 @@ int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen ) int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen ) { uint8_t buffer[BLAKE2S_OUTBYTES] = {0}; + int i; if( outlen > BLAKE2S_OUTBYTES ) return -1; @@ -353,7 +356,7 @@ int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen ) memset( S->buf + S->buflen, 0, 2 * BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */ blake2s_compress( S, S->buf ); - for( int i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ + for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ store32( buffer + sizeof( S->h[i] ) * i, S->h[i] ); memcpy( out, buffer, outlen ); -- cgit v1.2.1 From ba9c1ae957e913fec78c41601e915a397f8f53d3 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 7 Sep 2016 00:09:22 +0200 Subject: Issue #26798: for loop initial declarations, take 2 --- Modules/_blake2/impl/blake2b-ref.c | 10 ++++++---- Modules/_blake2/impl/blake2b.c | 7 ++++--- Modules/_blake2/impl/blake2s-ref.c | 16 +++++++++------- Modules/_blake2/impl/blake2s.c | 7 ++++--- 4 files changed, 23 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/_blake2/impl/blake2b-ref.c b/Modules/_blake2/impl/blake2b-ref.c index 6b56fce377..7c1301bef6 100644 --- a/Modules/_blake2/impl/blake2b-ref.c +++ b/Modules/_blake2/impl/blake2b-ref.c @@ -157,11 +157,12 @@ BLAKE2_LOCAL_INLINE(int) blake2b_init0( blake2b_state *S ) int blake2b_init_param( blake2b_state *S, const blake2b_param *P ) { const uint8_t *p = ( const uint8_t * )( P ); + size_t i; blake2b_init0( S ); /* IV XOR ParamBlock */ - for( size_t i = 0; i < 8; ++i ) + for( i = 0; i < 8; ++i ) S->h[i] ^= load64( p + sizeof( S->h[i] ) * i ); return 0; @@ -392,14 +393,15 @@ int main( int argc, char **argv ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[KAT_LENGTH]; + size_t i; - for( size_t i = 0; i < BLAKE2B_KEYBYTES; ++i ) + for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) key[i] = ( uint8_t )i; - for( size_t i = 0; i < KAT_LENGTH; ++i ) + for( i = 0; i < KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; - for( size_t i = 0; i < KAT_LENGTH; ++i ) + for( i = 0; i < KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2b( hash, buf, key, BLAKE2B_OUTBYTES, i, BLAKE2B_KEYBYTES ); diff --git a/Modules/_blake2/impl/blake2b.c b/Modules/_blake2/impl/blake2b.c index 784ec00434..58c79fa848 100644 --- a/Modules/_blake2/impl/blake2b.c +++ b/Modules/_blake2/impl/blake2b.c @@ -426,14 +426,15 @@ int main( int argc, char **argv ) { uint8_t key[BLAKE2B_KEYBYTES]; uint8_t buf[KAT_LENGTH]; + size_t i; - for( size_t i = 0; i < BLAKE2B_KEYBYTES; ++i ) + for( i = 0; i < BLAKE2B_KEYBYTES; ++i ) key[i] = ( uint8_t )i; - for( size_t i = 0; i < KAT_LENGTH; ++i ) + for( i = 0; i < KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; - for( size_t i = 0; i < KAT_LENGTH; ++i ) + for( i = 0; i < KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2B_OUTBYTES]; blake2b( hash, buf, key, BLAKE2B_OUTBYTES, i, BLAKE2B_KEYBYTES ); diff --git a/Modules/_blake2/impl/blake2s-ref.c b/Modules/_blake2/impl/blake2s-ref.c index 0cf4707da1..157e9a2298 100644 --- a/Modules/_blake2/impl/blake2s-ref.c +++ b/Modules/_blake2/impl/blake2s-ref.c @@ -154,7 +154,7 @@ int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) blake2s_init0( S ); /* IV XOR ParamBlock */ - for( size_t i = 0; i < 8; ++i ) + for( i = 0; i < 8; ++i ) S->h[i] ^= load32( &p[i] ); return 0; @@ -219,11 +219,12 @@ static int blake2s_compress( blake2s_state *S, const uint8_t block[BLAKE2S_BLOCK { uint32_t m[16]; uint32_t v[16]; + size_t i; - for( size_t i = 0; i < 16; ++i ) + for( i = 0; i < 16; ++i ) m[i] = load32( block + i * sizeof( m[i] ) ); - for( size_t i = 0; i < 8; ++i ) + for( i = 0; i < 8; ++i ) v[i] = S->h[i]; v[ 8] = blake2s_IV[0]; @@ -267,7 +268,7 @@ static int blake2s_compress( blake2s_state *S, const uint8_t block[BLAKE2S_BLOCK ROUND( 8 ); ROUND( 9 ); - for( size_t i = 0; i < 8; ++i ) + for( i = 0; i < 8; ++i ) S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; #undef G @@ -381,14 +382,15 @@ int main( int argc, char **argv ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[KAT_LENGTH]; + size_t i; - for( size_t i = 0; i < BLAKE2S_KEYBYTES; ++i ) + for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) key[i] = ( uint8_t )i; - for( size_t i = 0; i < KAT_LENGTH; ++i ) + for( i = 0; i < KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; - for( size_t i = 0; i < KAT_LENGTH; ++i ) + for( i = 0; i < KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2S_OUTBYTES]; blake2s( hash, buf, key, BLAKE2S_OUTBYTES, i, BLAKE2S_KEYBYTES ); diff --git a/Modules/_blake2/impl/blake2s.c b/Modules/_blake2/impl/blake2s.c index 3aea4af303..ccad66266b 100644 --- a/Modules/_blake2/impl/blake2s.c +++ b/Modules/_blake2/impl/blake2s.c @@ -407,14 +407,15 @@ int main( int argc, char **argv ) { uint8_t key[BLAKE2S_KEYBYTES]; uint8_t buf[KAT_LENGTH]; + size_t i; - for( size_t i = 0; i < BLAKE2S_KEYBYTES; ++i ) + for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) key[i] = ( uint8_t )i; - for( size_t i = 0; i < KAT_LENGTH; ++i ) + for( i = 0; i < KAT_LENGTH; ++i ) buf[i] = ( uint8_t )i; - for( size_t i = 0; i < KAT_LENGTH; ++i ) + for( i = 0; i < KAT_LENGTH; ++i ) { uint8_t hash[BLAKE2S_OUTBYTES]; -- cgit v1.2.1 From a6e36dc17b59768ce0308c5e03981ba96a26c469 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 7 Sep 2016 00:32:06 +0200 Subject: Issue #26798: for loop initial declarations, take 3 --- Modules/_blake2/impl/blake2s-ref.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/_blake2/impl/blake2s-ref.c b/Modules/_blake2/impl/blake2s-ref.c index 157e9a2298..b90e8efc4e 100644 --- a/Modules/_blake2/impl/blake2s-ref.c +++ b/Modules/_blake2/impl/blake2s-ref.c @@ -150,6 +150,7 @@ BLAKE2_LOCAL_INLINE(int) blake2s_init0( blake2s_state *S ) int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) { const uint32_t *p = ( const uint32_t * )( P ); + size_t i; blake2s_init0( S ); -- cgit v1.2.1 From 903d792642f162c92dede5edc166c9696f45c7ee Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 6 Sep 2016 15:54:20 -0700 Subject: Run Argument Clinic on posixmodule.c Issue #17884. --- Modules/clinic/posixmodule.c.h | 14 +++++++------- Modules/posixmodule.c | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 4b44257cfb..b99f1806f3 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -3011,13 +3011,13 @@ PyDoc_STRVAR(os_waitpid__doc__, {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, static PyObject * -os_waitpid_impl(PyObject *module, Py_intptr_t pid, int options); +os_waitpid_impl(PyObject *module, intptr_t pid, int options); static PyObject * os_waitpid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; - Py_intptr_t pid; + intptr_t pid; int options; if (!PyArg_ParseTuple(args, "" _Py_PARSE_INTPTR "i:waitpid", @@ -5479,13 +5479,13 @@ PyDoc_STRVAR(os_get_handle_inheritable__doc__, {"get_handle_inheritable", (PyCFunction)os_get_handle_inheritable, METH_O, os_get_handle_inheritable__doc__}, static int -os_get_handle_inheritable_impl(PyObject *module, Py_intptr_t handle); +os_get_handle_inheritable_impl(PyObject *module, intptr_t handle); static PyObject * os_get_handle_inheritable(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; - Py_intptr_t handle; + intptr_t handle; int _return_value; if (!PyArg_Parse(arg, "" _Py_PARSE_INTPTR ":get_handle_inheritable", &handle)) { @@ -5515,14 +5515,14 @@ PyDoc_STRVAR(os_set_handle_inheritable__doc__, {"set_handle_inheritable", (PyCFunction)os_set_handle_inheritable, METH_VARARGS, os_set_handle_inheritable__doc__}, static PyObject * -os_set_handle_inheritable_impl(PyObject *module, Py_intptr_t handle, +os_set_handle_inheritable_impl(PyObject *module, intptr_t handle, int inheritable); static PyObject * os_set_handle_inheritable(PyObject *module, PyObject *args) { PyObject *return_value = NULL; - Py_intptr_t handle; + intptr_t handle; int inheritable; if (!PyArg_ParseTuple(args, "" _Py_PARSE_INTPTR "p:set_handle_inheritable", @@ -6042,4 +6042,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=2b85bb3703a6488a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=677ce794fb126161 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e88ee56fa0..beea9e0812 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2520,7 +2520,7 @@ class sched_param_converter(CConverter): impl_by_reference = True; [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=affe68316f160401]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=418fce0e01144461]*/ /*[clinic input] @@ -7092,7 +7092,7 @@ The options argument is ignored on Windows. static PyObject * os_waitpid_impl(PyObject *module, intptr_t pid, int options) -/*[clinic end generated code: output=15f1ce005a346b09 input=444c8f51cca5b862]*/ +/*[clinic end generated code: output=be836b221271d538 input=40f2440c515410f8]*/ { int status; intptr_t res; @@ -11383,7 +11383,7 @@ Get the close-on-exe flag of the specified file descriptor. static int os_get_handle_inheritable_impl(PyObject *module, intptr_t handle) -/*[clinic end generated code: output=9e5389b0aa0916ce input=5f7759443aae3dc5]*/ +/*[clinic end generated code: output=36be5afca6ea84d8 input=cfe99f9c05c70ad1]*/ { DWORD flags; @@ -11408,7 +11408,7 @@ Set the inheritable flag of the specified handle. static PyObject * os_set_handle_inheritable_impl(PyObject *module, intptr_t handle, int inheritable) -/*[clinic end generated code: output=b1e67bfa3213d745 input=e64b2b2730469def]*/ +/*[clinic end generated code: output=021d74fe6c96baa3 input=7a7641390d8364fc]*/ { DWORD flags = inheritable ? HANDLE_FLAG_INHERIT : 0; if (!SetHandleInformation((HANDLE)handle, HANDLE_FLAG_INHERIT, flags)) { -- cgit v1.2.1 From b0d817f3e501393694cb1b6ffd47c60195578ce1 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 6 Sep 2016 16:18:52 -0700 Subject: Add os.getrandom() Issue #27778: Expose the Linux getrandom() syscall as a new os.getrandom() function. This change is part of the PEP 524. --- Modules/clinic/posixmodule.c.h | 41 +++++++++++++++++++++++++- Modules/posixmodule.c | 66 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index b99f1806f3..e543db4957 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -5571,6 +5571,41 @@ exit: return return_value; } +#if defined(HAVE_GETRANDOM_SYSCALL) + +PyDoc_STRVAR(os_getrandom__doc__, +"getrandom($module, /, size, flags=0)\n" +"--\n" +"\n" +"Obtain a series of random bytes."); + +#define OS_GETRANDOM_METHODDEF \ + {"getrandom", (PyCFunction)os_getrandom, METH_VARARGS|METH_KEYWORDS, os_getrandom__doc__}, + +static PyObject * +os_getrandom_impl(PyObject *module, Py_ssize_t size, int flags); + +static PyObject * +os_getrandom(PyObject *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"size", "flags", NULL}; + static _PyArg_Parser _parser = {"n|i:getrandom", _keywords, 0}; + Py_ssize_t size; + int flags = 0; + + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + &size, &flags)) { + goto exit; + } + return_value = os_getrandom_impl(module, size, flags); + +exit: + return return_value; +} + +#endif /* defined(HAVE_GETRANDOM_SYSCALL) */ + #ifndef OS_TTYNAME_METHODDEF #define OS_TTYNAME_METHODDEF #endif /* !defined(OS_TTYNAME_METHODDEF) */ @@ -6042,4 +6077,8 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=677ce794fb126161 input=a9049054013a1b77]*/ + +#ifndef OS_GETRANDOM_METHODDEF + #define OS_GETRANDOM_METHODDEF +#endif /* !defined(OS_GETRANDOM_METHODDEF) */ +/*[clinic end generated code: output=fce51c7d432662c2 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index beea9e0812..2dc6d7b940 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -133,6 +133,13 @@ corresponding Unix manual entries for more information on calls."); #include #endif +#ifdef HAVE_LINUX_RANDOM_H +# include +#endif +#ifdef HAVE_GETRANDOM_SYSCALL +# include +#endif + #if defined(MS_WINDOWS) # define TERMSIZE_USE_CONIO #elif defined(HAVE_SYS_IOCTL_H) @@ -12421,6 +12428,59 @@ os_fspath_impl(PyObject *module, PyObject *path) return PyOS_FSPath(path); } +#ifdef HAVE_GETRANDOM_SYSCALL +/*[clinic input] +os.getrandom + + size: Py_ssize_t + flags: int=0 + +Obtain a series of random bytes. +[clinic start generated code]*/ + +static PyObject * +os_getrandom_impl(PyObject *module, Py_ssize_t size, int flags) +/*[clinic end generated code: output=b3a618196a61409c input=59bafac39c594947]*/ +{ + char *buffer; + Py_ssize_t n; + PyObject *bytes; + + if (size < 0) { + errno = EINVAL; + return posix_error(); + } + + buffer = PyMem_Malloc(size); + if (buffer == NULL) { + PyErr_NoMemory(); + return NULL; + } + + while (1) { + n = syscall(SYS_getrandom, buffer, size, flags); + if (n < 0 && errno == EINTR) { + if (PyErr_CheckSignals() < 0) { + return NULL; + } + continue; + } + break; + } + + if (n < 0) { + PyMem_Free(buffer); + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } + + bytes = PyBytes_FromStringAndSize(buffer, n); + PyMem_Free(buffer); + + return bytes; +} +#endif /* HAVE_GETRANDOM_SYSCALL */ + #include "clinic/posixmodule.c.h" /*[clinic input] @@ -12621,6 +12681,7 @@ static PyMethodDef posix_methods[] = { METH_VARARGS | METH_KEYWORDS, posix_scandir__doc__}, OS_FSPATH_METHODDEF + OS_GETRANDOM_METHODDEF {NULL, NULL} /* Sentinel */ }; @@ -13066,6 +13127,11 @@ all_ins(PyObject *m) if (PyModule_AddIntMacro(m, RTLD_DEEPBIND)) return -1; #endif +#ifdef HAVE_GETRANDOM_SYSCALL + if (PyModule_AddIntMacro(m, GRND_RANDOM)) return -1; + if (PyModule_AddIntMacro(m, GRND_NONBLOCK)) return -1; +#endif + return 0; } -- cgit v1.2.1 From 87da9f01c3bc74aebedc52a91aa908ddae83a579 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 6 Sep 2016 16:33:52 -0700 Subject: os.urandom() now blocks on Linux Issue #27776: The os.urandom() function does now block on Linux 3.17 and newer until the system urandom entropy pool is initialized to increase the security. This change is part of the PEP 524. --- Modules/_randommodule.c | 56 ++++++++++++++++++++++++++++++++++++++++--------- Modules/posixmodule.c | 3 +-- 2 files changed, 47 insertions(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 63a060c1ea..1cf57aea18 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -165,7 +165,7 @@ init_genrand(RandomObject *self, uint32_t s) /* initialize by an array with array-length */ /* init_key is the array for initializing keys */ /* key_length is its length */ -static PyObject * +static void init_by_array(RandomObject *self, uint32_t init_key[], size_t key_length) { size_t i, j, k; /* was signed in the original code. RDH 12/16/2002 */ @@ -190,8 +190,6 @@ init_by_array(RandomObject *self, uint32_t init_key[], size_t key_length) } mt[0] = 0x80000000U; /* MSB is 1; assuring non-zero initial array */ - Py_INCREF(Py_None); - return Py_None; } /* @@ -199,6 +197,37 @@ init_by_array(RandomObject *self, uint32_t init_key[], size_t key_length) * Twister download. */ +static int +random_seed_urandom(RandomObject *self) +{ + PY_UINT32_T key[N]; + + if (_PyOS_URandomNonblock(key, sizeof(key)) < 0) { + return -1; + } + init_by_array(self, key, Py_ARRAY_LENGTH(key)); + return 0; +} + +static void +random_seed_time_pid(RandomObject *self) +{ + _PyTime_t now; + uint32_t key[5]; + + now = _PyTime_GetSystemClock(); + key[0] = (PY_UINT32_T)(now & 0xffffffffU); + key[1] = (PY_UINT32_T)(now >> 32); + + key[2] = (PY_UINT32_T)getpid(); + + now = _PyTime_GetMonotonicClock(); + key[3] = (PY_UINT32_T)(now & 0xffffffffU); + key[4] = (PY_UINT32_T)(now >> 32); + + init_by_array(self, key, Py_ARRAY_LENGTH(key)); +} + static PyObject * random_seed(RandomObject *self, PyObject *args) { @@ -212,14 +241,17 @@ random_seed(RandomObject *self, PyObject *args) if (!PyArg_UnpackTuple(args, "seed", 0, 1, &arg)) return NULL; - if (arg == NULL || arg == Py_None) { - time_t now; + if (arg == NULL || arg == Py_None) { + if (random_seed_urandom(self) >= 0) { + PyErr_Clear(); - time(&now); - init_genrand(self, (uint32_t)now); - Py_INCREF(Py_None); - return Py_None; + /* Reading system entropy failed, fall back on the worst entropy: + use the current time and process identifier. */ + random_seed_time_pid(self); + } + Py_RETURN_NONE; } + /* This algorithm relies on the number being unsigned. * So: if the arg is a PyLong, use its absolute value. * Otherwise use its hash value, cast to unsigned. @@ -269,7 +301,11 @@ random_seed(RandomObject *self, PyObject *args) } } #endif - result = init_by_array(self, key, keyused); + init_by_array(self, key, keyused); + + Py_INCREF(Py_None); + result = Py_None; + Done: Py_XDECREF(n); PyMem_Free(key); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 2dc6d7b940..0b9b3f617f 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -11168,8 +11168,7 @@ os_urandom_impl(PyObject *module, Py_ssize_t size) if (bytes == NULL) return NULL; - result = _PyOS_URandom(PyBytes_AS_STRING(bytes), - PyBytes_GET_SIZE(bytes)); + result = _PyOS_URandom(PyBytes_AS_STRING(bytes), PyBytes_GET_SIZE(bytes)); if (result == -1) { Py_DECREF(bytes); return NULL; -- cgit v1.2.1 From 81fcd610f43d28afbf8dabd25a8e40570ca3d92d Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 6 Sep 2016 17:03:03 -0700 Subject: Issue #27776: include process.h on Windows for getpid() --- Modules/_randommodule.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Modules') diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 1cf57aea18..63759d5562 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -68,6 +68,9 @@ #include "Python.h" #include /* for seeding to current time */ +#ifdef HAVE_PROCESS_H +# include /* needed for getpid() */ +#endif /* Period parameters -- These are all magic. Don't change. */ #define N 624 -- cgit v1.2.1 From 810e6d95c8844e80d133bf640bfe0594a9bb6144 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 7 Sep 2016 02:49:11 +0200 Subject: Silence two warnings in blake2. key_length is between 0 and 64 (block size). --- Modules/_blake2/blake2b_impl.c | 2 +- Modules/_blake2/blake2s_impl.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_blake2/blake2b_impl.c b/Modules/_blake2/blake2b_impl.c index 1c67744f75..9c3d8f54d5 100644 --- a/Modules/_blake2/blake2b_impl.c +++ b/Modules/_blake2/blake2b_impl.c @@ -208,7 +208,7 @@ py_blake2b_new_impl(PyTypeObject *type, PyObject *data, int digest_size, BLAKE2B_KEYBYTES); goto error; } - self->param.key_length = key->len; + self->param.key_length = (uint8_t)key->len; } /* Initialize hash state. */ diff --git a/Modules/_blake2/blake2s_impl.c b/Modules/_blake2/blake2s_impl.c index 8b38270ae8..53c22c2a9b 100644 --- a/Modules/_blake2/blake2s_impl.c +++ b/Modules/_blake2/blake2s_impl.c @@ -208,7 +208,7 @@ py_blake2s_new_impl(PyTypeObject *type, PyObject *data, int digest_size, BLAKE2S_KEYBYTES); goto error; } - self->param.key_length = key->len; + self->param.key_length = (uint8_t)key->len; } /* Initialize hash state. */ -- cgit v1.2.1 From fa21afe8f3a8ce6facac8d692766eb8fd87e8bac Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Tue, 6 Sep 2016 19:09:15 -0700 Subject: Fix some warnings from MSVC --- Modules/_ctypes/_ctypes.c | 2 +- Modules/_decimal/libmpdec/vccompat.h | 4 ---- Modules/audioop.c | 3 ++- 3 files changed, 3 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 98433e12f5..f8407298fe 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3067,7 +3067,7 @@ static PyGetSetDef PyCFuncPtr_getsets[] = { }; #ifdef MS_WIN32 -static PPROC FindAddress(void *handle, char *name, PyObject *type) +static PPROC FindAddress(void *handle, const char *name, PyObject *type) { #ifdef MS_WIN64 /* win64 has no stdcall calling conv, so it should diff --git a/Modules/_decimal/libmpdec/vccompat.h b/Modules/_decimal/libmpdec/vccompat.h index 564eaa8140..dd131d8da2 100644 --- a/Modules/_decimal/libmpdec/vccompat.h +++ b/Modules/_decimal/libmpdec/vccompat.h @@ -48,10 +48,6 @@ #undef strtoll #define strtoll _strtoi64 #define strdup _strdup - #define PRIi64 "I64i" - #define PRIu64 "I64u" - #define PRIi32 "I32i" - #define PRIu32 "I32u" #endif diff --git a/Modules/audioop.c b/Modules/audioop.c index c11506c4c1..d715783d52 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -4,6 +4,7 @@ #define PY_SSIZE_T_CLEAN #include "Python.h" +#include typedef short PyInt16; @@ -448,7 +449,7 @@ audioop_max_impl(PyObject *module, Py_buffer *fragment, int width) int val = GETRAWSAMPLE(width, fragment->buf, i); /* Cast to unsigned before negating. Unsigned overflow is well- defined, but signed overflow is not. */ - if (val < 0) absval = -(unsigned int)val; + if (val < 0) absval = (unsigned int)-(int64_t)val; else absval = val; if (absval > max) max = absval; } -- cgit v1.2.1 From 7bbc40238d3182b2d495024df0e473cd2ab03bce Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Tue, 6 Sep 2016 19:42:27 -0700 Subject: Issue #27959: Adds oem encoding, alias ansi to mbcs, move aliasmbcs to codec lookup --- Modules/_codecsmodule.c | 36 ++++++++++++++++++ Modules/clinic/_codecsmodule.c.h | 81 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 116 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index 4e75995bbf..4d25a53f68 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -625,6 +625,25 @@ _codecs_mbcs_decode_impl(PyObject *module, Py_buffer *data, return codec_tuple(decoded, consumed); } +/*[clinic input] +_codecs.oem_decode + data: Py_buffer + errors: str(accept={str, NoneType}) = NULL + final: int(c_default="0") = False + / +[clinic start generated code]*/ + +static PyObject * +_codecs_oem_decode_impl(PyObject *module, Py_buffer *data, + const char *errors, int final) +/*[clinic end generated code: output=da1617612f3fcad8 input=95b8a92c446b03cd]*/ +{ + Py_ssize_t consumed = data->len; + PyObject *decoded = PyUnicode_DecodeCodePageStateful(CP_OEMCP, + data->buf, data->len, errors, final ? NULL : &consumed); + return codec_tuple(decoded, consumed); +} + /*[clinic input] _codecs.code_page_decode codepage: int @@ -970,6 +989,21 @@ _codecs_mbcs_encode_impl(PyObject *module, PyObject *str, const char *errors) PyUnicode_GET_LENGTH(str)); } +/*[clinic input] +_codecs.oem_encode + str: unicode + errors: str(accept={str, NoneType}) = NULL + / +[clinic start generated code]*/ + +static PyObject * +_codecs_oem_encode_impl(PyObject *module, PyObject *str, const char *errors) +/*[clinic end generated code: output=65d5982c737de649 input=3fc5f0028aad3cda]*/ +{ + return codec_tuple(PyUnicode_EncodeCodePage(CP_OEMCP, str, errors), + PyUnicode_GET_LENGTH(str)); +} + /*[clinic input] _codecs.code_page_encode code_page: int @@ -1075,6 +1109,8 @@ static PyMethodDef _codecs_functions[] = { _CODECS_READBUFFER_ENCODE_METHODDEF _CODECS_MBCS_ENCODE_METHODDEF _CODECS_MBCS_DECODE_METHODDEF + _CODECS_OEM_ENCODE_METHODDEF + _CODECS_OEM_DECODE_METHODDEF _CODECS_CODE_PAGE_ENCODE_METHODDEF _CODECS_CODE_PAGE_DECODE_METHODDEF _CODECS_REGISTER_ERROR_METHODDEF diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index 090b1efd9e..6a63cec66c 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -805,6 +805,45 @@ exit: #if defined(HAVE_MBCS) +PyDoc_STRVAR(_codecs_oem_decode__doc__, +"oem_decode($module, data, errors=None, final=False, /)\n" +"--\n" +"\n"); + +#define _CODECS_OEM_DECODE_METHODDEF \ + {"oem_decode", (PyCFunction)_codecs_oem_decode, METH_VARARGS, _codecs_oem_decode__doc__}, + +static PyObject * +_codecs_oem_decode_impl(PyObject *module, Py_buffer *data, + const char *errors, int final); + +static PyObject * +_codecs_oem_decode(PyObject *module, PyObject *args) +{ + PyObject *return_value = NULL; + Py_buffer data = {NULL, NULL}; + const char *errors = NULL; + int final = 0; + + if (!PyArg_ParseTuple(args, "y*|zi:oem_decode", + &data, &errors, &final)) { + goto exit; + } + return_value = _codecs_oem_decode_impl(module, &data, errors, final); + +exit: + /* Cleanup for data */ + if (data.obj) { + PyBuffer_Release(&data); + } + + return return_value; +} + +#endif /* defined(HAVE_MBCS) */ + +#if defined(HAVE_MBCS) + PyDoc_STRVAR(_codecs_code_page_decode__doc__, "code_page_decode($module, codepage, data, errors=None, final=False, /)\n" "--\n" @@ -1346,6 +1385,38 @@ exit: #if defined(HAVE_MBCS) +PyDoc_STRVAR(_codecs_oem_encode__doc__, +"oem_encode($module, str, errors=None, /)\n" +"--\n" +"\n"); + +#define _CODECS_OEM_ENCODE_METHODDEF \ + {"oem_encode", (PyCFunction)_codecs_oem_encode, METH_VARARGS, _codecs_oem_encode__doc__}, + +static PyObject * +_codecs_oem_encode_impl(PyObject *module, PyObject *str, const char *errors); + +static PyObject * +_codecs_oem_encode(PyObject *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *str; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "U|z:oem_encode", + &str, &errors)) { + goto exit; + } + return_value = _codecs_oem_encode_impl(module, str, errors); + +exit: + return return_value; +} + +#endif /* defined(HAVE_MBCS) */ + +#if defined(HAVE_MBCS) + PyDoc_STRVAR(_codecs_code_page_encode__doc__, "code_page_encode($module, code_page, str, errors=None, /)\n" "--\n" @@ -1446,6 +1517,10 @@ exit: #define _CODECS_MBCS_DECODE_METHODDEF #endif /* !defined(_CODECS_MBCS_DECODE_METHODDEF) */ +#ifndef _CODECS_OEM_DECODE_METHODDEF + #define _CODECS_OEM_DECODE_METHODDEF +#endif /* !defined(_CODECS_OEM_DECODE_METHODDEF) */ + #ifndef _CODECS_CODE_PAGE_DECODE_METHODDEF #define _CODECS_CODE_PAGE_DECODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_DECODE_METHODDEF) */ @@ -1454,7 +1529,11 @@ exit: #define _CODECS_MBCS_ENCODE_METHODDEF #endif /* !defined(_CODECS_MBCS_ENCODE_METHODDEF) */ +#ifndef _CODECS_OEM_ENCODE_METHODDEF + #define _CODECS_OEM_ENCODE_METHODDEF +#endif /* !defined(_CODECS_OEM_ENCODE_METHODDEF) */ + #ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF #define _CODECS_CODE_PAGE_ENCODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ -/*[clinic end generated code: output=0221e4eece62c905 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7874e2d559d49368 input=a9049054013a1b77]*/ -- cgit v1.2.1 From ee0f0fcd4d917637c9f0dec4f07a39b2e912e873 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 7 Sep 2016 11:39:21 +0200 Subject: blake2: silence two more warnings on platforms with size_t < uint64_t. Don't use SSE2 when cross-compiling --- Modules/_blake2/impl/blake2b-ref.c | 4 ++-- Modules/_blake2/impl/blake2s-ref.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_blake2/impl/blake2b-ref.c b/Modules/_blake2/impl/blake2b-ref.c index 7c1301bef6..ec775b4d4b 100644 --- a/Modules/_blake2/impl/blake2b-ref.c +++ b/Modules/_blake2/impl/blake2b-ref.c @@ -307,8 +307,8 @@ int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen ) } else /* inlen <= fill */ { - memcpy( S->buf + left, in, inlen ); - S->buflen += inlen; /* Be lazy, do not compress */ + memcpy( S->buf + left, in, (size_t)inlen ); + S->buflen += (size_t)inlen; /* Be lazy, do not compress */ in += inlen; inlen -= inlen; } diff --git a/Modules/_blake2/impl/blake2s-ref.c b/Modules/_blake2/impl/blake2s-ref.c index b90e8efc4e..b08e72b737 100644 --- a/Modules/_blake2/impl/blake2s-ref.c +++ b/Modules/_blake2/impl/blake2s-ref.c @@ -298,8 +298,8 @@ int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen ) } else /* inlen <= fill */ { - memcpy( S->buf + left, in, inlen ); - S->buflen += inlen; /* Be lazy, do not compress */ + memcpy( S->buf + left, in, (size_t)inlen ); + S->buflen += (size_t)inlen; /* Be lazy, do not compress */ in += inlen; inlen -= inlen; } -- cgit v1.2.1 From 1f47f54b74c6838a93b43b485a290c7463f2531b Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 7 Sep 2016 11:58:24 +0200 Subject: Issue #16113: Add SHA-3 and SHAKE support to hashlib module. --- Modules/_sha3/README.txt | 11 + Modules/_sha3/cleanup.py | 50 + Modules/_sha3/clinic/sha3module.c.h | 148 ++ Modules/_sha3/kcp/KeccakHash.c | 82 + Modules/_sha3/kcp/KeccakHash.h | 114 ++ Modules/_sha3/kcp/KeccakP-1600-64.macros | 2208 +++++++++++++++++++++++ Modules/_sha3/kcp/KeccakP-1600-SnP-opt32.h | 37 + Modules/_sha3/kcp/KeccakP-1600-SnP-opt64.h | 49 + Modules/_sha3/kcp/KeccakP-1600-SnP.h | 7 + Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c | 1160 ++++++++++++ Modules/_sha3/kcp/KeccakP-1600-opt64-config.h | 3 + Modules/_sha3/kcp/KeccakP-1600-opt64.c | 474 +++++ Modules/_sha3/kcp/KeccakP-1600-unrolling.macros | 185 ++ Modules/_sha3/kcp/KeccakSponge.c | 92 + Modules/_sha3/kcp/KeccakSponge.h | 172 ++ Modules/_sha3/kcp/KeccakSponge.inc | 332 ++++ Modules/_sha3/kcp/PlSnP-Fallback.inc | 257 +++ Modules/_sha3/kcp/SnP-Relaned.h | 134 ++ Modules/_sha3/kcp/align.h | 35 + Modules/_sha3/sha3module.c | 749 ++++++++ 20 files changed, 6299 insertions(+) create mode 100644 Modules/_sha3/README.txt create mode 100755 Modules/_sha3/cleanup.py create mode 100644 Modules/_sha3/clinic/sha3module.c.h create mode 100644 Modules/_sha3/kcp/KeccakHash.c create mode 100644 Modules/_sha3/kcp/KeccakHash.h create mode 100644 Modules/_sha3/kcp/KeccakP-1600-64.macros create mode 100644 Modules/_sha3/kcp/KeccakP-1600-SnP-opt32.h create mode 100644 Modules/_sha3/kcp/KeccakP-1600-SnP-opt64.h create mode 100644 Modules/_sha3/kcp/KeccakP-1600-SnP.h create mode 100644 Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c create mode 100644 Modules/_sha3/kcp/KeccakP-1600-opt64-config.h create mode 100644 Modules/_sha3/kcp/KeccakP-1600-opt64.c create mode 100644 Modules/_sha3/kcp/KeccakP-1600-unrolling.macros create mode 100644 Modules/_sha3/kcp/KeccakSponge.c create mode 100644 Modules/_sha3/kcp/KeccakSponge.h create mode 100644 Modules/_sha3/kcp/KeccakSponge.inc create mode 100644 Modules/_sha3/kcp/PlSnP-Fallback.inc create mode 100644 Modules/_sha3/kcp/SnP-Relaned.h create mode 100644 Modules/_sha3/kcp/align.h create mode 100644 Modules/_sha3/sha3module.c (limited to 'Modules') diff --git a/Modules/_sha3/README.txt b/Modules/_sha3/README.txt new file mode 100644 index 0000000000..e34b1d12f7 --- /dev/null +++ b/Modules/_sha3/README.txt @@ -0,0 +1,11 @@ +Keccak Code Package +=================== + +The files in kcp are taken from the Keccak Code Package. They have been +slightly to be C89 compatible. The architecture specific header file +KeccakP-1600-SnP.h ha been renamed to KeccakP-1600-SnP-opt32.h or +KeccakP-1600-SnP-opt64.h. + +The 64bit files were generated with generic64lc/libkeccak.a.pack target, the +32bit files with generic32lc/libkeccak.a.pack. + diff --git a/Modules/_sha3/cleanup.py b/Modules/_sha3/cleanup.py new file mode 100755 index 0000000000..17c56b34b2 --- /dev/null +++ b/Modules/_sha3/cleanup.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +# Copyright (C) 2012 Christian Heimes (christian@python.org) +# Licensed to PSF under a Contributor Agreement. +# +# cleanup Keccak sources + +import os +import re + +CPP1 = re.compile("^//(.*)") +CPP2 = re.compile("\ //(.*)") + +STATICS = ("void ", "int ", "HashReturn ", + "const UINT64 ", "UINT16 ", " int prefix##") + +HERE = os.path.dirname(os.path.abspath(__file__)) +KECCAK = os.path.join(HERE, "kcp") + +def getfiles(): + for name in os.listdir(KECCAK): + name = os.path.join(KECCAK, name) + if os.path.isfile(name): + yield name + +def cleanup(f): + buf = [] + for line in f: + # mark all functions and global data as static + #if line.startswith(STATICS): + # buf.append("static " + line) + # continue + # remove UINT64 typedef, we have our own + if line.startswith("typedef unsigned long long int"): + buf.append("/* %s */\n" % line.strip()) + continue + ## remove #include "brg_endian.h" + if "brg_endian.h" in line: + buf.append("/* %s */\n" % line.strip()) + continue + # transform C++ comments into ANSI C comments + line = CPP1.sub(r"/*\1 */\n", line) + line = CPP2.sub(r" /*\1 */\n", line) + buf.append(line) + return "".join(buf) + +for name in getfiles(): + with open(name) as f: + res = cleanup(f) + with open(name, "w") as f: + f.write(res) diff --git a/Modules/_sha3/clinic/sha3module.c.h b/Modules/_sha3/clinic/sha3module.c.h new file mode 100644 index 0000000000..bfd95cd6ef --- /dev/null +++ b/Modules/_sha3/clinic/sha3module.c.h @@ -0,0 +1,148 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(py_sha3_new__doc__, +"sha3_224(string=None)\n" +"--\n" +"\n" +"Return a new SHA3 hash object with a hashbit length of 28 bytes."); + +static PyObject * +py_sha3_new_impl(PyTypeObject *type, PyObject *data); + +static PyObject * +py_sha3_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"string", NULL}; + PyObject *data = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha3_224", _keywords, + &data)) + goto exit; + return_value = py_sha3_new_impl(type, data); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sha3_sha3_224_copy__doc__, +"copy($self, /)\n" +"--\n" +"\n" +"Return a copy of the hash object."); + +#define _SHA3_SHA3_224_COPY_METHODDEF \ + {"copy", (PyCFunction)_sha3_sha3_224_copy, METH_NOARGS, _sha3_sha3_224_copy__doc__}, + +static PyObject * +_sha3_sha3_224_copy_impl(SHA3object *self); + +static PyObject * +_sha3_sha3_224_copy(SHA3object *self, PyObject *Py_UNUSED(ignored)) +{ + return _sha3_sha3_224_copy_impl(self); +} + +PyDoc_STRVAR(_sha3_sha3_224_digest__doc__, +"digest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of binary data."); + +#define _SHA3_SHA3_224_DIGEST_METHODDEF \ + {"digest", (PyCFunction)_sha3_sha3_224_digest, METH_NOARGS, _sha3_sha3_224_digest__doc__}, + +static PyObject * +_sha3_sha3_224_digest_impl(SHA3object *self); + +static PyObject * +_sha3_sha3_224_digest(SHA3object *self, PyObject *Py_UNUSED(ignored)) +{ + return _sha3_sha3_224_digest_impl(self); +} + +PyDoc_STRVAR(_sha3_sha3_224_hexdigest__doc__, +"hexdigest($self, /)\n" +"--\n" +"\n" +"Return the digest value as a string of hexadecimal digits."); + +#define _SHA3_SHA3_224_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)_sha3_sha3_224_hexdigest, METH_NOARGS, _sha3_sha3_224_hexdigest__doc__}, + +static PyObject * +_sha3_sha3_224_hexdigest_impl(SHA3object *self); + +static PyObject * +_sha3_sha3_224_hexdigest(SHA3object *self, PyObject *Py_UNUSED(ignored)) +{ + return _sha3_sha3_224_hexdigest_impl(self); +} + +PyDoc_STRVAR(_sha3_sha3_224_update__doc__, +"update($self, obj, /)\n" +"--\n" +"\n" +"Update this hash object\'s state with the provided string."); + +#define _SHA3_SHA3_224_UPDATE_METHODDEF \ + {"update", (PyCFunction)_sha3_sha3_224_update, METH_O, _sha3_sha3_224_update__doc__}, + +PyDoc_STRVAR(_sha3_shake_128_digest__doc__, +"digest($self, /, length)\n" +"--\n" +"\n" +"Return the digest value as a string of binary data."); + +#define _SHA3_SHAKE_128_DIGEST_METHODDEF \ + {"digest", (PyCFunction)_sha3_shake_128_digest, METH_VARARGS|METH_KEYWORDS, _sha3_shake_128_digest__doc__}, + +static PyObject * +_sha3_shake_128_digest_impl(SHA3object *self, unsigned long length); + +static PyObject * +_sha3_shake_128_digest(SHA3object *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"length", NULL}; + unsigned long length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "k:digest", _keywords, + &length)) + goto exit; + return_value = _sha3_shake_128_digest_impl(self, length); + +exit: + return return_value; +} + +PyDoc_STRVAR(_sha3_shake_128_hexdigest__doc__, +"hexdigest($self, /, length)\n" +"--\n" +"\n" +"Return the digest value as a string of hexadecimal digits."); + +#define _SHA3_SHAKE_128_HEXDIGEST_METHODDEF \ + {"hexdigest", (PyCFunction)_sha3_shake_128_hexdigest, METH_VARARGS|METH_KEYWORDS, _sha3_shake_128_hexdigest__doc__}, + +static PyObject * +_sha3_shake_128_hexdigest_impl(SHA3object *self, unsigned long length); + +static PyObject * +_sha3_shake_128_hexdigest(SHA3object *self, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"length", NULL}; + unsigned long length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "k:hexdigest", _keywords, + &length)) + goto exit; + return_value = _sha3_shake_128_hexdigest_impl(self, length); + +exit: + return return_value; +} +/*[clinic end generated code: output=2eb6db41778eeb50 input=a9049054013a1b77]*/ diff --git a/Modules/_sha3/kcp/KeccakHash.c b/Modules/_sha3/kcp/KeccakHash.c new file mode 100644 index 0000000000..e09fb43cac --- /dev/null +++ b/Modules/_sha3/kcp/KeccakHash.c @@ -0,0 +1,82 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#include +#include "KeccakHash.h" + +/* ---------------------------------------------------------------- */ + +HashReturn Keccak_HashInitialize(Keccak_HashInstance *instance, unsigned int rate, unsigned int capacity, unsigned int hashbitlen, unsigned char delimitedSuffix) +{ + HashReturn result; + + if (delimitedSuffix == 0) + return FAIL; + result = (HashReturn)KeccakWidth1600_SpongeInitialize(&instance->sponge, rate, capacity); + if (result != SUCCESS) + return result; + instance->fixedOutputLength = hashbitlen; + instance->delimitedSuffix = delimitedSuffix; + return SUCCESS; +} + +/* ---------------------------------------------------------------- */ + +HashReturn Keccak_HashUpdate(Keccak_HashInstance *instance, const BitSequence *data, DataLength databitlen) +{ + if ((databitlen % 8) == 0) + return (HashReturn)KeccakWidth1600_SpongeAbsorb(&instance->sponge, data, databitlen/8); + else { + HashReturn ret = (HashReturn)KeccakWidth1600_SpongeAbsorb(&instance->sponge, data, databitlen/8); + if (ret == SUCCESS) { + /* The last partial byte is assumed to be aligned on the least significant bits */ + + unsigned char lastByte = data[databitlen/8]; + /* Concatenate the last few bits provided here with those of the suffix */ + + unsigned short delimitedLastBytes = (unsigned short)((unsigned short)lastByte | ((unsigned short)instance->delimitedSuffix << (databitlen % 8))); + if ((delimitedLastBytes & 0xFF00) == 0x0000) { + instance->delimitedSuffix = delimitedLastBytes & 0xFF; + } + else { + unsigned char oneByte[1]; + oneByte[0] = delimitedLastBytes & 0xFF; + ret = (HashReturn)KeccakWidth1600_SpongeAbsorb(&instance->sponge, oneByte, 1); + instance->delimitedSuffix = (delimitedLastBytes >> 8) & 0xFF; + } + } + return ret; + } +} + +/* ---------------------------------------------------------------- */ + +HashReturn Keccak_HashFinal(Keccak_HashInstance *instance, BitSequence *hashval) +{ + HashReturn ret = (HashReturn)KeccakWidth1600_SpongeAbsorbLastFewBits(&instance->sponge, instance->delimitedSuffix); + if (ret == SUCCESS) + return (HashReturn)KeccakWidth1600_SpongeSqueeze(&instance->sponge, hashval, instance->fixedOutputLength/8); + else + return ret; +} + +/* ---------------------------------------------------------------- */ + +HashReturn Keccak_HashSqueeze(Keccak_HashInstance *instance, BitSequence *data, DataLength databitlen) +{ + if ((databitlen % 8) != 0) + return FAIL; + return (HashReturn)KeccakWidth1600_SpongeSqueeze(&instance->sponge, data, databitlen/8); +} diff --git a/Modules/_sha3/kcp/KeccakHash.h b/Modules/_sha3/kcp/KeccakHash.h new file mode 100644 index 0000000000..bbd3dc64a2 --- /dev/null +++ b/Modules/_sha3/kcp/KeccakHash.h @@ -0,0 +1,114 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#ifndef _KeccakHashInterface_h_ +#define _KeccakHashInterface_h_ + +#ifndef KeccakP1600_excluded + +#include "KeccakSponge.h" +#include + +typedef unsigned char BitSequence; +typedef size_t DataLength; +typedef enum { SUCCESS = 0, FAIL = 1, BAD_HASHLEN = 2 } HashReturn; + +typedef struct { + KeccakWidth1600_SpongeInstance sponge; + unsigned int fixedOutputLength; + unsigned char delimitedSuffix; +} Keccak_HashInstance; + +/** + * Function to initialize the Keccak[r, c] sponge function instance used in sequential hashing mode. + * @param hashInstance Pointer to the hash instance to be initialized. + * @param rate The value of the rate r. + * @param capacity The value of the capacity c. + * @param hashbitlen The desired number of output bits, + * or 0 for an arbitrarily-long output. + * @param delimitedSuffix Bits that will be automatically appended to the end + * of the input message, as in domain separation. + * This is a byte containing from 0 to 7 bits + * formatted like the @a delimitedData parameter of + * the Keccak_SpongeAbsorbLastFewBits() function. + * @pre One must have r+c=1600 and the rate a multiple of 8 bits in this implementation. + * @return SUCCESS if successful, FAIL otherwise. + */ +HashReturn Keccak_HashInitialize(Keccak_HashInstance *hashInstance, unsigned int rate, unsigned int capacity, unsigned int hashbitlen, unsigned char delimitedSuffix); + +/** Macro to initialize a SHAKE128 instance as specified in the FIPS 202 standard. + */ +#define Keccak_HashInitialize_SHAKE128(hashInstance) Keccak_HashInitialize(hashInstance, 1344, 256, 0, 0x1F) + +/** Macro to initialize a SHAKE256 instance as specified in the FIPS 202 standard. + */ +#define Keccak_HashInitialize_SHAKE256(hashInstance) Keccak_HashInitialize(hashInstance, 1088, 512, 0, 0x1F) + +/** Macro to initialize a SHA3-224 instance as specified in the FIPS 202 standard. + */ +#define Keccak_HashInitialize_SHA3_224(hashInstance) Keccak_HashInitialize(hashInstance, 1152, 448, 224, 0x06) + +/** Macro to initialize a SHA3-256 instance as specified in the FIPS 202 standard. + */ +#define Keccak_HashInitialize_SHA3_256(hashInstance) Keccak_HashInitialize(hashInstance, 1088, 512, 256, 0x06) + +/** Macro to initialize a SHA3-384 instance as specified in the FIPS 202 standard. + */ +#define Keccak_HashInitialize_SHA3_384(hashInstance) Keccak_HashInitialize(hashInstance, 832, 768, 384, 0x06) + +/** Macro to initialize a SHA3-512 instance as specified in the FIPS 202 standard. + */ +#define Keccak_HashInitialize_SHA3_512(hashInstance) Keccak_HashInitialize(hashInstance, 576, 1024, 512, 0x06) + +/** + * Function to give input data to be absorbed. + * @param hashInstance Pointer to the hash instance initialized by Keccak_HashInitialize(). + * @param data Pointer to the input data. + * When @a databitLen is not a multiple of 8, the last bits of data must be + * in the least significant bits of the last byte (little-endian convention). + * @param databitLen The number of input bits provided in the input data. + * @pre In the previous call to Keccak_HashUpdate(), databitlen was a multiple of 8. + * @return SUCCESS if successful, FAIL otherwise. + */ +HashReturn Keccak_HashUpdate(Keccak_HashInstance *hashInstance, const BitSequence *data, DataLength databitlen); + +/** + * Function to call after all input blocks have been input and to get + * output bits if the length was specified when calling Keccak_HashInitialize(). + * @param hashInstance Pointer to the hash instance initialized by Keccak_HashInitialize(). + * If @a hashbitlen was not 0 in the call to Keccak_HashInitialize(), the number of + * output bits is equal to @a hashbitlen. + * If @a hashbitlen was 0 in the call to Keccak_HashInitialize(), the output bits + * must be extracted using the Keccak_HashSqueeze() function. + * @param state Pointer to the state of the sponge function initialized by Init(). + * @param hashval Pointer to the buffer where to store the output data. + * @return SUCCESS if successful, FAIL otherwise. + */ +HashReturn Keccak_HashFinal(Keccak_HashInstance *hashInstance, BitSequence *hashval); + + /** + * Function to squeeze output data. + * @param hashInstance Pointer to the hash instance initialized by Keccak_HashInitialize(). + * @param data Pointer to the buffer where to store the output data. + * @param databitlen The number of output bits desired (must be a multiple of 8). + * @pre Keccak_HashFinal() must have been already called. + * @pre @a databitlen is a multiple of 8. + * @return SUCCESS if successful, FAIL otherwise. + */ +HashReturn Keccak_HashSqueeze(Keccak_HashInstance *hashInstance, BitSequence *data, DataLength databitlen); + +#endif + +#endif diff --git a/Modules/_sha3/kcp/KeccakP-1600-64.macros b/Modules/_sha3/kcp/KeccakP-1600-64.macros new file mode 100644 index 0000000000..1f11fe3e79 --- /dev/null +++ b/Modules/_sha3/kcp/KeccakP-1600-64.macros @@ -0,0 +1,2208 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#define declareABCDE \ + UINT64 Aba, Abe, Abi, Abo, Abu; \ + UINT64 Aga, Age, Agi, Ago, Agu; \ + UINT64 Aka, Ake, Aki, Ako, Aku; \ + UINT64 Ama, Ame, Ami, Amo, Amu; \ + UINT64 Asa, Ase, Asi, Aso, Asu; \ + UINT64 Bba, Bbe, Bbi, Bbo, Bbu; \ + UINT64 Bga, Bge, Bgi, Bgo, Bgu; \ + UINT64 Bka, Bke, Bki, Bko, Bku; \ + UINT64 Bma, Bme, Bmi, Bmo, Bmu; \ + UINT64 Bsa, Bse, Bsi, Bso, Bsu; \ + UINT64 Ca, Ce, Ci, Co, Cu; \ + UINT64 Da, De, Di, Do, Du; \ + UINT64 Eba, Ebe, Ebi, Ebo, Ebu; \ + UINT64 Ega, Ege, Egi, Ego, Egu; \ + UINT64 Eka, Eke, Eki, Eko, Eku; \ + UINT64 Ema, Eme, Emi, Emo, Emu; \ + UINT64 Esa, Ese, Esi, Eso, Esu; \ + +#define prepareTheta \ + Ca = Aba^Aga^Aka^Ama^Asa; \ + Ce = Abe^Age^Ake^Ame^Ase; \ + Ci = Abi^Agi^Aki^Ami^Asi; \ + Co = Abo^Ago^Ako^Amo^Aso; \ + Cu = Abu^Agu^Aku^Amu^Asu; \ + +#ifdef UseBebigokimisa +/* --- Code for round, with prepare-theta (lane complementing pattern 'bebigokimisa') */ + +/* --- 64-bit lanes mapped to 64-bit words */ + +#define thetaRhoPiChiIotaPrepareTheta(i, A, E) \ + Da = Cu^ROL64(Ce, 1); \ + De = Ca^ROL64(Ci, 1); \ + Di = Ce^ROL64(Co, 1); \ + Do = Ci^ROL64(Cu, 1); \ + Du = Co^ROL64(Ca, 1); \ +\ + A##ba ^= Da; \ + Bba = A##ba; \ + A##ge ^= De; \ + Bbe = ROL64(A##ge, 44); \ + A##ki ^= Di; \ + Bbi = ROL64(A##ki, 43); \ + A##mo ^= Do; \ + Bbo = ROL64(A##mo, 21); \ + A##su ^= Du; \ + Bbu = ROL64(A##su, 14); \ + E##ba = Bba ^( Bbe | Bbi ); \ + E##ba ^= KeccakF1600RoundConstants[i]; \ + Ca = E##ba; \ + E##be = Bbe ^((~Bbi)| Bbo ); \ + Ce = E##be; \ + E##bi = Bbi ^( Bbo & Bbu ); \ + Ci = E##bi; \ + E##bo = Bbo ^( Bbu | Bba ); \ + Co = E##bo; \ + E##bu = Bbu ^( Bba & Bbe ); \ + Cu = E##bu; \ +\ + A##bo ^= Do; \ + Bga = ROL64(A##bo, 28); \ + A##gu ^= Du; \ + Bge = ROL64(A##gu, 20); \ + A##ka ^= Da; \ + Bgi = ROL64(A##ka, 3); \ + A##me ^= De; \ + Bgo = ROL64(A##me, 45); \ + A##si ^= Di; \ + Bgu = ROL64(A##si, 61); \ + E##ga = Bga ^( Bge | Bgi ); \ + Ca ^= E##ga; \ + E##ge = Bge ^( Bgi & Bgo ); \ + Ce ^= E##ge; \ + E##gi = Bgi ^( Bgo |(~Bgu)); \ + Ci ^= E##gi; \ + E##go = Bgo ^( Bgu | Bga ); \ + Co ^= E##go; \ + E##gu = Bgu ^( Bga & Bge ); \ + Cu ^= E##gu; \ +\ + A##be ^= De; \ + Bka = ROL64(A##be, 1); \ + A##gi ^= Di; \ + Bke = ROL64(A##gi, 6); \ + A##ko ^= Do; \ + Bki = ROL64(A##ko, 25); \ + A##mu ^= Du; \ + Bko = ROL64(A##mu, 8); \ + A##sa ^= Da; \ + Bku = ROL64(A##sa, 18); \ + E##ka = Bka ^( Bke | Bki ); \ + Ca ^= E##ka; \ + E##ke = Bke ^( Bki & Bko ); \ + Ce ^= E##ke; \ + E##ki = Bki ^((~Bko)& Bku ); \ + Ci ^= E##ki; \ + E##ko = (~Bko)^( Bku | Bka ); \ + Co ^= E##ko; \ + E##ku = Bku ^( Bka & Bke ); \ + Cu ^= E##ku; \ +\ + A##bu ^= Du; \ + Bma = ROL64(A##bu, 27); \ + A##ga ^= Da; \ + Bme = ROL64(A##ga, 36); \ + A##ke ^= De; \ + Bmi = ROL64(A##ke, 10); \ + A##mi ^= Di; \ + Bmo = ROL64(A##mi, 15); \ + A##so ^= Do; \ + Bmu = ROL64(A##so, 56); \ + E##ma = Bma ^( Bme & Bmi ); \ + Ca ^= E##ma; \ + E##me = Bme ^( Bmi | Bmo ); \ + Ce ^= E##me; \ + E##mi = Bmi ^((~Bmo)| Bmu ); \ + Ci ^= E##mi; \ + E##mo = (~Bmo)^( Bmu & Bma ); \ + Co ^= E##mo; \ + E##mu = Bmu ^( Bma | Bme ); \ + Cu ^= E##mu; \ +\ + A##bi ^= Di; \ + Bsa = ROL64(A##bi, 62); \ + A##go ^= Do; \ + Bse = ROL64(A##go, 55); \ + A##ku ^= Du; \ + Bsi = ROL64(A##ku, 39); \ + A##ma ^= Da; \ + Bso = ROL64(A##ma, 41); \ + A##se ^= De; \ + Bsu = ROL64(A##se, 2); \ + E##sa = Bsa ^((~Bse)& Bsi ); \ + Ca ^= E##sa; \ + E##se = (~Bse)^( Bsi | Bso ); \ + Ce ^= E##se; \ + E##si = Bsi ^( Bso & Bsu ); \ + Ci ^= E##si; \ + E##so = Bso ^( Bsu | Bsa ); \ + Co ^= E##so; \ + E##su = Bsu ^( Bsa & Bse ); \ + Cu ^= E##su; \ +\ + +/* --- Code for round (lane complementing pattern 'bebigokimisa') */ + +/* --- 64-bit lanes mapped to 64-bit words */ + +#define thetaRhoPiChiIota(i, A, E) \ + Da = Cu^ROL64(Ce, 1); \ + De = Ca^ROL64(Ci, 1); \ + Di = Ce^ROL64(Co, 1); \ + Do = Ci^ROL64(Cu, 1); \ + Du = Co^ROL64(Ca, 1); \ +\ + A##ba ^= Da; \ + Bba = A##ba; \ + A##ge ^= De; \ + Bbe = ROL64(A##ge, 44); \ + A##ki ^= Di; \ + Bbi = ROL64(A##ki, 43); \ + A##mo ^= Do; \ + Bbo = ROL64(A##mo, 21); \ + A##su ^= Du; \ + Bbu = ROL64(A##su, 14); \ + E##ba = Bba ^( Bbe | Bbi ); \ + E##ba ^= KeccakF1600RoundConstants[i]; \ + E##be = Bbe ^((~Bbi)| Bbo ); \ + E##bi = Bbi ^( Bbo & Bbu ); \ + E##bo = Bbo ^( Bbu | Bba ); \ + E##bu = Bbu ^( Bba & Bbe ); \ +\ + A##bo ^= Do; \ + Bga = ROL64(A##bo, 28); \ + A##gu ^= Du; \ + Bge = ROL64(A##gu, 20); \ + A##ka ^= Da; \ + Bgi = ROL64(A##ka, 3); \ + A##me ^= De; \ + Bgo = ROL64(A##me, 45); \ + A##si ^= Di; \ + Bgu = ROL64(A##si, 61); \ + E##ga = Bga ^( Bge | Bgi ); \ + E##ge = Bge ^( Bgi & Bgo ); \ + E##gi = Bgi ^( Bgo |(~Bgu)); \ + E##go = Bgo ^( Bgu | Bga ); \ + E##gu = Bgu ^( Bga & Bge ); \ +\ + A##be ^= De; \ + Bka = ROL64(A##be, 1); \ + A##gi ^= Di; \ + Bke = ROL64(A##gi, 6); \ + A##ko ^= Do; \ + Bki = ROL64(A##ko, 25); \ + A##mu ^= Du; \ + Bko = ROL64(A##mu, 8); \ + A##sa ^= Da; \ + Bku = ROL64(A##sa, 18); \ + E##ka = Bka ^( Bke | Bki ); \ + E##ke = Bke ^( Bki & Bko ); \ + E##ki = Bki ^((~Bko)& Bku ); \ + E##ko = (~Bko)^( Bku | Bka ); \ + E##ku = Bku ^( Bka & Bke ); \ +\ + A##bu ^= Du; \ + Bma = ROL64(A##bu, 27); \ + A##ga ^= Da; \ + Bme = ROL64(A##ga, 36); \ + A##ke ^= De; \ + Bmi = ROL64(A##ke, 10); \ + A##mi ^= Di; \ + Bmo = ROL64(A##mi, 15); \ + A##so ^= Do; \ + Bmu = ROL64(A##so, 56); \ + E##ma = Bma ^( Bme & Bmi ); \ + E##me = Bme ^( Bmi | Bmo ); \ + E##mi = Bmi ^((~Bmo)| Bmu ); \ + E##mo = (~Bmo)^( Bmu & Bma ); \ + E##mu = Bmu ^( Bma | Bme ); \ +\ + A##bi ^= Di; \ + Bsa = ROL64(A##bi, 62); \ + A##go ^= Do; \ + Bse = ROL64(A##go, 55); \ + A##ku ^= Du; \ + Bsi = ROL64(A##ku, 39); \ + A##ma ^= Da; \ + Bso = ROL64(A##ma, 41); \ + A##se ^= De; \ + Bsu = ROL64(A##se, 2); \ + E##sa = Bsa ^((~Bse)& Bsi ); \ + E##se = (~Bse)^( Bsi | Bso ); \ + E##si = Bsi ^( Bso & Bsu ); \ + E##so = Bso ^( Bsu | Bsa ); \ + E##su = Bsu ^( Bsa & Bse ); \ +\ + +#else /* UseBebigokimisa */ + +/* --- Code for round, with prepare-theta */ + +/* --- 64-bit lanes mapped to 64-bit words */ + +#define thetaRhoPiChiIotaPrepareTheta(i, A, E) \ + Da = Cu^ROL64(Ce, 1); \ + De = Ca^ROL64(Ci, 1); \ + Di = Ce^ROL64(Co, 1); \ + Do = Ci^ROL64(Cu, 1); \ + Du = Co^ROL64(Ca, 1); \ +\ + A##ba ^= Da; \ + Bba = A##ba; \ + A##ge ^= De; \ + Bbe = ROL64(A##ge, 44); \ + A##ki ^= Di; \ + Bbi = ROL64(A##ki, 43); \ + A##mo ^= Do; \ + Bbo = ROL64(A##mo, 21); \ + A##su ^= Du; \ + Bbu = ROL64(A##su, 14); \ + E##ba = Bba ^((~Bbe)& Bbi ); \ + E##ba ^= KeccakF1600RoundConstants[i]; \ + Ca = E##ba; \ + E##be = Bbe ^((~Bbi)& Bbo ); \ + Ce = E##be; \ + E##bi = Bbi ^((~Bbo)& Bbu ); \ + Ci = E##bi; \ + E##bo = Bbo ^((~Bbu)& Bba ); \ + Co = E##bo; \ + E##bu = Bbu ^((~Bba)& Bbe ); \ + Cu = E##bu; \ +\ + A##bo ^= Do; \ + Bga = ROL64(A##bo, 28); \ + A##gu ^= Du; \ + Bge = ROL64(A##gu, 20); \ + A##ka ^= Da; \ + Bgi = ROL64(A##ka, 3); \ + A##me ^= De; \ + Bgo = ROL64(A##me, 45); \ + A##si ^= Di; \ + Bgu = ROL64(A##si, 61); \ + E##ga = Bga ^((~Bge)& Bgi ); \ + Ca ^= E##ga; \ + E##ge = Bge ^((~Bgi)& Bgo ); \ + Ce ^= E##ge; \ + E##gi = Bgi ^((~Bgo)& Bgu ); \ + Ci ^= E##gi; \ + E##go = Bgo ^((~Bgu)& Bga ); \ + Co ^= E##go; \ + E##gu = Bgu ^((~Bga)& Bge ); \ + Cu ^= E##gu; \ +\ + A##be ^= De; \ + Bka = ROL64(A##be, 1); \ + A##gi ^= Di; \ + Bke = ROL64(A##gi, 6); \ + A##ko ^= Do; \ + Bki = ROL64(A##ko, 25); \ + A##mu ^= Du; \ + Bko = ROL64(A##mu, 8); \ + A##sa ^= Da; \ + Bku = ROL64(A##sa, 18); \ + E##ka = Bka ^((~Bke)& Bki ); \ + Ca ^= E##ka; \ + E##ke = Bke ^((~Bki)& Bko ); \ + Ce ^= E##ke; \ + E##ki = Bki ^((~Bko)& Bku ); \ + Ci ^= E##ki; \ + E##ko = Bko ^((~Bku)& Bka ); \ + Co ^= E##ko; \ + E##ku = Bku ^((~Bka)& Bke ); \ + Cu ^= E##ku; \ +\ + A##bu ^= Du; \ + Bma = ROL64(A##bu, 27); \ + A##ga ^= Da; \ + Bme = ROL64(A##ga, 36); \ + A##ke ^= De; \ + Bmi = ROL64(A##ke, 10); \ + A##mi ^= Di; \ + Bmo = ROL64(A##mi, 15); \ + A##so ^= Do; \ + Bmu = ROL64(A##so, 56); \ + E##ma = Bma ^((~Bme)& Bmi ); \ + Ca ^= E##ma; \ + E##me = Bme ^((~Bmi)& Bmo ); \ + Ce ^= E##me; \ + E##mi = Bmi ^((~Bmo)& Bmu ); \ + Ci ^= E##mi; \ + E##mo = Bmo ^((~Bmu)& Bma ); \ + Co ^= E##mo; \ + E##mu = Bmu ^((~Bma)& Bme ); \ + Cu ^= E##mu; \ +\ + A##bi ^= Di; \ + Bsa = ROL64(A##bi, 62); \ + A##go ^= Do; \ + Bse = ROL64(A##go, 55); \ + A##ku ^= Du; \ + Bsi = ROL64(A##ku, 39); \ + A##ma ^= Da; \ + Bso = ROL64(A##ma, 41); \ + A##se ^= De; \ + Bsu = ROL64(A##se, 2); \ + E##sa = Bsa ^((~Bse)& Bsi ); \ + Ca ^= E##sa; \ + E##se = Bse ^((~Bsi)& Bso ); \ + Ce ^= E##se; \ + E##si = Bsi ^((~Bso)& Bsu ); \ + Ci ^= E##si; \ + E##so = Bso ^((~Bsu)& Bsa ); \ + Co ^= E##so; \ + E##su = Bsu ^((~Bsa)& Bse ); \ + Cu ^= E##su; \ +\ + +/* --- Code for round */ + +/* --- 64-bit lanes mapped to 64-bit words */ + +#define thetaRhoPiChiIota(i, A, E) \ + Da = Cu^ROL64(Ce, 1); \ + De = Ca^ROL64(Ci, 1); \ + Di = Ce^ROL64(Co, 1); \ + Do = Ci^ROL64(Cu, 1); \ + Du = Co^ROL64(Ca, 1); \ +\ + A##ba ^= Da; \ + Bba = A##ba; \ + A##ge ^= De; \ + Bbe = ROL64(A##ge, 44); \ + A##ki ^= Di; \ + Bbi = ROL64(A##ki, 43); \ + A##mo ^= Do; \ + Bbo = ROL64(A##mo, 21); \ + A##su ^= Du; \ + Bbu = ROL64(A##su, 14); \ + E##ba = Bba ^((~Bbe)& Bbi ); \ + E##ba ^= KeccakF1600RoundConstants[i]; \ + E##be = Bbe ^((~Bbi)& Bbo ); \ + E##bi = Bbi ^((~Bbo)& Bbu ); \ + E##bo = Bbo ^((~Bbu)& Bba ); \ + E##bu = Bbu ^((~Bba)& Bbe ); \ +\ + A##bo ^= Do; \ + Bga = ROL64(A##bo, 28); \ + A##gu ^= Du; \ + Bge = ROL64(A##gu, 20); \ + A##ka ^= Da; \ + Bgi = ROL64(A##ka, 3); \ + A##me ^= De; \ + Bgo = ROL64(A##me, 45); \ + A##si ^= Di; \ + Bgu = ROL64(A##si, 61); \ + E##ga = Bga ^((~Bge)& Bgi ); \ + E##ge = Bge ^((~Bgi)& Bgo ); \ + E##gi = Bgi ^((~Bgo)& Bgu ); \ + E##go = Bgo ^((~Bgu)& Bga ); \ + E##gu = Bgu ^((~Bga)& Bge ); \ +\ + A##be ^= De; \ + Bka = ROL64(A##be, 1); \ + A##gi ^= Di; \ + Bke = ROL64(A##gi, 6); \ + A##ko ^= Do; \ + Bki = ROL64(A##ko, 25); \ + A##mu ^= Du; \ + Bko = ROL64(A##mu, 8); \ + A##sa ^= Da; \ + Bku = ROL64(A##sa, 18); \ + E##ka = Bka ^((~Bke)& Bki ); \ + E##ke = Bke ^((~Bki)& Bko ); \ + E##ki = Bki ^((~Bko)& Bku ); \ + E##ko = Bko ^((~Bku)& Bka ); \ + E##ku = Bku ^((~Bka)& Bke ); \ +\ + A##bu ^= Du; \ + Bma = ROL64(A##bu, 27); \ + A##ga ^= Da; \ + Bme = ROL64(A##ga, 36); \ + A##ke ^= De; \ + Bmi = ROL64(A##ke, 10); \ + A##mi ^= Di; \ + Bmo = ROL64(A##mi, 15); \ + A##so ^= Do; \ + Bmu = ROL64(A##so, 56); \ + E##ma = Bma ^((~Bme)& Bmi ); \ + E##me = Bme ^((~Bmi)& Bmo ); \ + E##mi = Bmi ^((~Bmo)& Bmu ); \ + E##mo = Bmo ^((~Bmu)& Bma ); \ + E##mu = Bmu ^((~Bma)& Bme ); \ +\ + A##bi ^= Di; \ + Bsa = ROL64(A##bi, 62); \ + A##go ^= Do; \ + Bse = ROL64(A##go, 55); \ + A##ku ^= Du; \ + Bsi = ROL64(A##ku, 39); \ + A##ma ^= Da; \ + Bso = ROL64(A##ma, 41); \ + A##se ^= De; \ + Bsu = ROL64(A##se, 2); \ + E##sa = Bsa ^((~Bse)& Bsi ); \ + E##se = Bse ^((~Bsi)& Bso ); \ + E##si = Bsi ^((~Bso)& Bsu ); \ + E##so = Bso ^((~Bsu)& Bsa ); \ + E##su = Bsu ^((~Bsa)& Bse ); \ +\ + +#endif /* UseBebigokimisa */ + + +#define copyFromState(X, state) \ + X##ba = state[ 0]; \ + X##be = state[ 1]; \ + X##bi = state[ 2]; \ + X##bo = state[ 3]; \ + X##bu = state[ 4]; \ + X##ga = state[ 5]; \ + X##ge = state[ 6]; \ + X##gi = state[ 7]; \ + X##go = state[ 8]; \ + X##gu = state[ 9]; \ + X##ka = state[10]; \ + X##ke = state[11]; \ + X##ki = state[12]; \ + X##ko = state[13]; \ + X##ku = state[14]; \ + X##ma = state[15]; \ + X##me = state[16]; \ + X##mi = state[17]; \ + X##mo = state[18]; \ + X##mu = state[19]; \ + X##sa = state[20]; \ + X##se = state[21]; \ + X##si = state[22]; \ + X##so = state[23]; \ + X##su = state[24]; \ + +#define copyToState(state, X) \ + state[ 0] = X##ba; \ + state[ 1] = X##be; \ + state[ 2] = X##bi; \ + state[ 3] = X##bo; \ + state[ 4] = X##bu; \ + state[ 5] = X##ga; \ + state[ 6] = X##ge; \ + state[ 7] = X##gi; \ + state[ 8] = X##go; \ + state[ 9] = X##gu; \ + state[10] = X##ka; \ + state[11] = X##ke; \ + state[12] = X##ki; \ + state[13] = X##ko; \ + state[14] = X##ku; \ + state[15] = X##ma; \ + state[16] = X##me; \ + state[17] = X##mi; \ + state[18] = X##mo; \ + state[19] = X##mu; \ + state[20] = X##sa; \ + state[21] = X##se; \ + state[22] = X##si; \ + state[23] = X##so; \ + state[24] = X##su; \ + +#define copyStateVariables(X, Y) \ + X##ba = Y##ba; \ + X##be = Y##be; \ + X##bi = Y##bi; \ + X##bo = Y##bo; \ + X##bu = Y##bu; \ + X##ga = Y##ga; \ + X##ge = Y##ge; \ + X##gi = Y##gi; \ + X##go = Y##go; \ + X##gu = Y##gu; \ + X##ka = Y##ka; \ + X##ke = Y##ke; \ + X##ki = Y##ki; \ + X##ko = Y##ko; \ + X##ku = Y##ku; \ + X##ma = Y##ma; \ + X##me = Y##me; \ + X##mi = Y##mi; \ + X##mo = Y##mo; \ + X##mu = Y##mu; \ + X##sa = Y##sa; \ + X##se = Y##se; \ + X##si = Y##si; \ + X##so = Y##so; \ + X##su = Y##su; \ + +#define copyFromStateAndAdd(X, state, input, laneCount) \ + if (laneCount < 16) { \ + if (laneCount < 8) { \ + if (laneCount < 4) { \ + if (laneCount < 2) { \ + if (laneCount < 1) { \ + X##ba = state[ 0]; \ + } \ + else { \ + X##ba = state[ 0]^input[ 0]; \ + } \ + X##be = state[ 1]; \ + X##bi = state[ 2]; \ + } \ + else { \ + X##ba = state[ 0]^input[ 0]; \ + X##be = state[ 1]^input[ 1]; \ + if (laneCount < 3) { \ + X##bi = state[ 2]; \ + } \ + else { \ + X##bi = state[ 2]^input[ 2]; \ + } \ + } \ + X##bo = state[ 3]; \ + X##bu = state[ 4]; \ + X##ga = state[ 5]; \ + X##ge = state[ 6]; \ + } \ + else { \ + X##ba = state[ 0]^input[ 0]; \ + X##be = state[ 1]^input[ 1]; \ + X##bi = state[ 2]^input[ 2]; \ + X##bo = state[ 3]^input[ 3]; \ + if (laneCount < 6) { \ + if (laneCount < 5) { \ + X##bu = state[ 4]; \ + } \ + else { \ + X##bu = state[ 4]^input[ 4]; \ + } \ + X##ga = state[ 5]; \ + X##ge = state[ 6]; \ + } \ + else { \ + X##bu = state[ 4]^input[ 4]; \ + X##ga = state[ 5]^input[ 5]; \ + if (laneCount < 7) { \ + X##ge = state[ 6]; \ + } \ + else { \ + X##ge = state[ 6]^input[ 6]; \ + } \ + } \ + } \ + X##gi = state[ 7]; \ + X##go = state[ 8]; \ + X##gu = state[ 9]; \ + X##ka = state[10]; \ + X##ke = state[11]; \ + X##ki = state[12]; \ + X##ko = state[13]; \ + X##ku = state[14]; \ + } \ + else { \ + X##ba = state[ 0]^input[ 0]; \ + X##be = state[ 1]^input[ 1]; \ + X##bi = state[ 2]^input[ 2]; \ + X##bo = state[ 3]^input[ 3]; \ + X##bu = state[ 4]^input[ 4]; \ + X##ga = state[ 5]^input[ 5]; \ + X##ge = state[ 6]^input[ 6]; \ + X##gi = state[ 7]^input[ 7]; \ + if (laneCount < 12) { \ + if (laneCount < 10) { \ + if (laneCount < 9) { \ + X##go = state[ 8]; \ + } \ + else { \ + X##go = state[ 8]^input[ 8]; \ + } \ + X##gu = state[ 9]; \ + X##ka = state[10]; \ + } \ + else { \ + X##go = state[ 8]^input[ 8]; \ + X##gu = state[ 9]^input[ 9]; \ + if (laneCount < 11) { \ + X##ka = state[10]; \ + } \ + else { \ + X##ka = state[10]^input[10]; \ + } \ + } \ + X##ke = state[11]; \ + X##ki = state[12]; \ + X##ko = state[13]; \ + X##ku = state[14]; \ + } \ + else { \ + X##go = state[ 8]^input[ 8]; \ + X##gu = state[ 9]^input[ 9]; \ + X##ka = state[10]^input[10]; \ + X##ke = state[11]^input[11]; \ + if (laneCount < 14) { \ + if (laneCount < 13) { \ + X##ki = state[12]; \ + } \ + else { \ + X##ki = state[12]^input[12]; \ + } \ + X##ko = state[13]; \ + X##ku = state[14]; \ + } \ + else { \ + X##ki = state[12]^input[12]; \ + X##ko = state[13]^input[13]; \ + if (laneCount < 15) { \ + X##ku = state[14]; \ + } \ + else { \ + X##ku = state[14]^input[14]; \ + } \ + } \ + } \ + } \ + X##ma = state[15]; \ + X##me = state[16]; \ + X##mi = state[17]; \ + X##mo = state[18]; \ + X##mu = state[19]; \ + X##sa = state[20]; \ + X##se = state[21]; \ + X##si = state[22]; \ + X##so = state[23]; \ + X##su = state[24]; \ + } \ + else { \ + X##ba = state[ 0]^input[ 0]; \ + X##be = state[ 1]^input[ 1]; \ + X##bi = state[ 2]^input[ 2]; \ + X##bo = state[ 3]^input[ 3]; \ + X##bu = state[ 4]^input[ 4]; \ + X##ga = state[ 5]^input[ 5]; \ + X##ge = state[ 6]^input[ 6]; \ + X##gi = state[ 7]^input[ 7]; \ + X##go = state[ 8]^input[ 8]; \ + X##gu = state[ 9]^input[ 9]; \ + X##ka = state[10]^input[10]; \ + X##ke = state[11]^input[11]; \ + X##ki = state[12]^input[12]; \ + X##ko = state[13]^input[13]; \ + X##ku = state[14]^input[14]; \ + X##ma = state[15]^input[15]; \ + if (laneCount < 24) { \ + if (laneCount < 20) { \ + if (laneCount < 18) { \ + if (laneCount < 17) { \ + X##me = state[16]; \ + } \ + else { \ + X##me = state[16]^input[16]; \ + } \ + X##mi = state[17]; \ + X##mo = state[18]; \ + } \ + else { \ + X##me = state[16]^input[16]; \ + X##mi = state[17]^input[17]; \ + if (laneCount < 19) { \ + X##mo = state[18]; \ + } \ + else { \ + X##mo = state[18]^input[18]; \ + } \ + } \ + X##mu = state[19]; \ + X##sa = state[20]; \ + X##se = state[21]; \ + X##si = state[22]; \ + } \ + else { \ + X##me = state[16]^input[16]; \ + X##mi = state[17]^input[17]; \ + X##mo = state[18]^input[18]; \ + X##mu = state[19]^input[19]; \ + if (laneCount < 22) { \ + if (laneCount < 21) { \ + X##sa = state[20]; \ + } \ + else { \ + X##sa = state[20]^input[20]; \ + } \ + X##se = state[21]; \ + X##si = state[22]; \ + } \ + else { \ + X##sa = state[20]^input[20]; \ + X##se = state[21]^input[21]; \ + if (laneCount < 23) { \ + X##si = state[22]; \ + } \ + else { \ + X##si = state[22]^input[22]; \ + } \ + } \ + } \ + X##so = state[23]; \ + X##su = state[24]; \ + } \ + else { \ + X##me = state[16]^input[16]; \ + X##mi = state[17]^input[17]; \ + X##mo = state[18]^input[18]; \ + X##mu = state[19]^input[19]; \ + X##sa = state[20]^input[20]; \ + X##se = state[21]^input[21]; \ + X##si = state[22]^input[22]; \ + X##so = state[23]^input[23]; \ + if (laneCount < 25) { \ + X##su = state[24]; \ + } \ + else { \ + X##su = state[24]^input[24]; \ + } \ + } \ + } + +#define addInput(X, input, laneCount) \ + if (laneCount == 21) { \ + X##ba ^= input[ 0]; \ + X##be ^= input[ 1]; \ + X##bi ^= input[ 2]; \ + X##bo ^= input[ 3]; \ + X##bu ^= input[ 4]; \ + X##ga ^= input[ 5]; \ + X##ge ^= input[ 6]; \ + X##gi ^= input[ 7]; \ + X##go ^= input[ 8]; \ + X##gu ^= input[ 9]; \ + X##ka ^= input[10]; \ + X##ke ^= input[11]; \ + X##ki ^= input[12]; \ + X##ko ^= input[13]; \ + X##ku ^= input[14]; \ + X##ma ^= input[15]; \ + X##me ^= input[16]; \ + X##mi ^= input[17]; \ + X##mo ^= input[18]; \ + X##mu ^= input[19]; \ + X##sa ^= input[20]; \ + } \ + else if (laneCount < 16) { \ + if (laneCount < 8) { \ + if (laneCount < 4) { \ + if (laneCount < 2) { \ + if (laneCount < 1) { \ + } \ + else { \ + X##ba ^= input[ 0]; \ + } \ + } \ + else { \ + X##ba ^= input[ 0]; \ + X##be ^= input[ 1]; \ + if (laneCount < 3) { \ + } \ + else { \ + X##bi ^= input[ 2]; \ + } \ + } \ + } \ + else { \ + X##ba ^= input[ 0]; \ + X##be ^= input[ 1]; \ + X##bi ^= input[ 2]; \ + X##bo ^= input[ 3]; \ + if (laneCount < 6) { \ + if (laneCount < 5) { \ + } \ + else { \ + X##bu ^= input[ 4]; \ + } \ + } \ + else { \ + X##bu ^= input[ 4]; \ + X##ga ^= input[ 5]; \ + if (laneCount < 7) { \ + } \ + else { \ + X##ge ^= input[ 6]; \ + } \ + } \ + } \ + } \ + else { \ + X##ba ^= input[ 0]; \ + X##be ^= input[ 1]; \ + X##bi ^= input[ 2]; \ + X##bo ^= input[ 3]; \ + X##bu ^= input[ 4]; \ + X##ga ^= input[ 5]; \ + X##ge ^= input[ 6]; \ + X##gi ^= input[ 7]; \ + if (laneCount < 12) { \ + if (laneCount < 10) { \ + if (laneCount < 9) { \ + } \ + else { \ + X##go ^= input[ 8]; \ + } \ + } \ + else { \ + X##go ^= input[ 8]; \ + X##gu ^= input[ 9]; \ + if (laneCount < 11) { \ + } \ + else { \ + X##ka ^= input[10]; \ + } \ + } \ + } \ + else { \ + X##go ^= input[ 8]; \ + X##gu ^= input[ 9]; \ + X##ka ^= input[10]; \ + X##ke ^= input[11]; \ + if (laneCount < 14) { \ + if (laneCount < 13) { \ + } \ + else { \ + X##ki ^= input[12]; \ + } \ + } \ + else { \ + X##ki ^= input[12]; \ + X##ko ^= input[13]; \ + if (laneCount < 15) { \ + } \ + else { \ + X##ku ^= input[14]; \ + } \ + } \ + } \ + } \ + } \ + else { \ + X##ba ^= input[ 0]; \ + X##be ^= input[ 1]; \ + X##bi ^= input[ 2]; \ + X##bo ^= input[ 3]; \ + X##bu ^= input[ 4]; \ + X##ga ^= input[ 5]; \ + X##ge ^= input[ 6]; \ + X##gi ^= input[ 7]; \ + X##go ^= input[ 8]; \ + X##gu ^= input[ 9]; \ + X##ka ^= input[10]; \ + X##ke ^= input[11]; \ + X##ki ^= input[12]; \ + X##ko ^= input[13]; \ + X##ku ^= input[14]; \ + X##ma ^= input[15]; \ + if (laneCount < 24) { \ + if (laneCount < 20) { \ + if (laneCount < 18) { \ + if (laneCount < 17) { \ + } \ + else { \ + X##me ^= input[16]; \ + } \ + } \ + else { \ + X##me ^= input[16]; \ + X##mi ^= input[17]; \ + if (laneCount < 19) { \ + } \ + else { \ + X##mo ^= input[18]; \ + } \ + } \ + } \ + else { \ + X##me ^= input[16]; \ + X##mi ^= input[17]; \ + X##mo ^= input[18]; \ + X##mu ^= input[19]; \ + if (laneCount < 22) { \ + if (laneCount < 21) { \ + } \ + else { \ + X##sa ^= input[20]; \ + } \ + } \ + else { \ + X##sa ^= input[20]; \ + X##se ^= input[21]; \ + if (laneCount < 23) { \ + } \ + else { \ + X##si ^= input[22]; \ + } \ + } \ + } \ + } \ + else { \ + X##me ^= input[16]; \ + X##mi ^= input[17]; \ + X##mo ^= input[18]; \ + X##mu ^= input[19]; \ + X##sa ^= input[20]; \ + X##se ^= input[21]; \ + X##si ^= input[22]; \ + X##so ^= input[23]; \ + if (laneCount < 25) { \ + } \ + else { \ + X##su ^= input[24]; \ + } \ + } \ + } + +#ifdef UseBebigokimisa + +#define copyToStateAndOutput(X, state, output, laneCount) \ + if (laneCount < 16) { \ + if (laneCount < 8) { \ + if (laneCount < 4) { \ + if (laneCount < 2) { \ + state[ 0] = X##ba; \ + if (laneCount >= 1) { \ + output[ 0] = X##ba; \ + } \ + state[ 1] = X##be; \ + state[ 2] = X##bi; \ + } \ + else { \ + state[ 0] = X##ba; \ + output[ 0] = X##ba; \ + state[ 1] = X##be; \ + output[ 1] = ~X##be; \ + state[ 2] = X##bi; \ + if (laneCount >= 3) { \ + output[ 2] = ~X##bi; \ + } \ + } \ + state[ 3] = X##bo; \ + state[ 4] = X##bu; \ + state[ 5] = X##ga; \ + state[ 6] = X##ge; \ + } \ + else { \ + state[ 0] = X##ba; \ + output[ 0] = X##ba; \ + state[ 1] = X##be; \ + output[ 1] = ~X##be; \ + state[ 2] = X##bi; \ + output[ 2] = ~X##bi; \ + state[ 3] = X##bo; \ + output[ 3] = X##bo; \ + if (laneCount < 6) { \ + state[ 4] = X##bu; \ + if (laneCount >= 5) { \ + output[ 4] = X##bu; \ + } \ + state[ 5] = X##ga; \ + state[ 6] = X##ge; \ + } \ + else { \ + state[ 4] = X##bu; \ + output[ 4] = X##bu; \ + state[ 5] = X##ga; \ + output[ 5] = X##ga; \ + state[ 6] = X##ge; \ + if (laneCount >= 7) { \ + output[ 6] = X##ge; \ + } \ + } \ + } \ + state[ 7] = X##gi; \ + state[ 8] = X##go; \ + state[ 9] = X##gu; \ + state[10] = X##ka; \ + state[11] = X##ke; \ + state[12] = X##ki; \ + state[13] = X##ko; \ + state[14] = X##ku; \ + } \ + else { \ + state[ 0] = X##ba; \ + output[ 0] = X##ba; \ + state[ 1] = X##be; \ + output[ 1] = ~X##be; \ + state[ 2] = X##bi; \ + output[ 2] = ~X##bi; \ + state[ 3] = X##bo; \ + output[ 3] = X##bo; \ + state[ 4] = X##bu; \ + output[ 4] = X##bu; \ + state[ 5] = X##ga; \ + output[ 5] = X##ga; \ + state[ 6] = X##ge; \ + output[ 6] = X##ge; \ + state[ 7] = X##gi; \ + output[ 7] = X##gi; \ + if (laneCount < 12) { \ + if (laneCount < 10) { \ + state[ 8] = X##go; \ + if (laneCount >= 9) { \ + output[ 8] = ~X##go; \ + } \ + state[ 9] = X##gu; \ + state[10] = X##ka; \ + } \ + else { \ + state[ 8] = X##go; \ + output[ 8] = ~X##go; \ + state[ 9] = X##gu; \ + output[ 9] = X##gu; \ + state[10] = X##ka; \ + if (laneCount >= 11) { \ + output[10] = X##ka; \ + } \ + } \ + state[11] = X##ke; \ + state[12] = X##ki; \ + state[13] = X##ko; \ + state[14] = X##ku; \ + } \ + else { \ + state[ 8] = X##go; \ + output[ 8] = ~X##go; \ + state[ 9] = X##gu; \ + output[ 9] = X##gu; \ + state[10] = X##ka; \ + output[10] = X##ka; \ + state[11] = X##ke; \ + output[11] = X##ke; \ + if (laneCount < 14) { \ + state[12] = X##ki; \ + if (laneCount >= 13) { \ + output[12] = ~X##ki; \ + } \ + state[13] = X##ko; \ + state[14] = X##ku; \ + } \ + else { \ + state[12] = X##ki; \ + output[12] = ~X##ki; \ + state[13] = X##ko; \ + output[13] = X##ko; \ + state[14] = X##ku; \ + if (laneCount >= 15) { \ + output[14] = X##ku; \ + } \ + } \ + } \ + } \ + state[15] = X##ma; \ + state[16] = X##me; \ + state[17] = X##mi; \ + state[18] = X##mo; \ + state[19] = X##mu; \ + state[20] = X##sa; \ + state[21] = X##se; \ + state[22] = X##si; \ + state[23] = X##so; \ + state[24] = X##su; \ + } \ + else { \ + state[ 0] = X##ba; \ + output[ 0] = X##ba; \ + state[ 1] = X##be; \ + output[ 1] = ~X##be; \ + state[ 2] = X##bi; \ + output[ 2] = ~X##bi; \ + state[ 3] = X##bo; \ + output[ 3] = X##bo; \ + state[ 4] = X##bu; \ + output[ 4] = X##bu; \ + state[ 5] = X##ga; \ + output[ 5] = X##ga; \ + state[ 6] = X##ge; \ + output[ 6] = X##ge; \ + state[ 7] = X##gi; \ + output[ 7] = X##gi; \ + state[ 8] = X##go; \ + output[ 8] = ~X##go; \ + state[ 9] = X##gu; \ + output[ 9] = X##gu; \ + state[10] = X##ka; \ + output[10] = X##ka; \ + state[11] = X##ke; \ + output[11] = X##ke; \ + state[12] = X##ki; \ + output[12] = ~X##ki; \ + state[13] = X##ko; \ + output[13] = X##ko; \ + state[14] = X##ku; \ + output[14] = X##ku; \ + state[15] = X##ma; \ + output[15] = X##ma; \ + if (laneCount < 24) { \ + if (laneCount < 20) { \ + if (laneCount < 18) { \ + state[16] = X##me; \ + if (laneCount >= 17) { \ + output[16] = X##me; \ + } \ + state[17] = X##mi; \ + state[18] = X##mo; \ + } \ + else { \ + state[16] = X##me; \ + output[16] = X##me; \ + state[17] = X##mi; \ + output[17] = ~X##mi; \ + state[18] = X##mo; \ + if (laneCount >= 19) { \ + output[18] = X##mo; \ + } \ + } \ + state[19] = X##mu; \ + state[20] = X##sa; \ + state[21] = X##se; \ + state[22] = X##si; \ + } \ + else { \ + state[16] = X##me; \ + output[16] = X##me; \ + state[17] = X##mi; \ + output[17] = ~X##mi; \ + state[18] = X##mo; \ + output[18] = X##mo; \ + state[19] = X##mu; \ + output[19] = X##mu; \ + if (laneCount < 22) { \ + state[20] = X##sa; \ + if (laneCount >= 21) { \ + output[20] = ~X##sa; \ + } \ + state[21] = X##se; \ + state[22] = X##si; \ + } \ + else { \ + state[20] = X##sa; \ + output[20] = ~X##sa; \ + state[21] = X##se; \ + output[21] = X##se; \ + state[22] = X##si; \ + if (laneCount >= 23) { \ + output[22] = X##si; \ + } \ + } \ + } \ + state[23] = X##so; \ + state[24] = X##su; \ + } \ + else { \ + state[16] = X##me; \ + output[16] = X##me; \ + state[17] = X##mi; \ + output[17] = ~X##mi; \ + state[18] = X##mo; \ + output[18] = X##mo; \ + state[19] = X##mu; \ + output[19] = X##mu; \ + state[20] = X##sa; \ + output[20] = ~X##sa; \ + state[21] = X##se; \ + output[21] = X##se; \ + state[22] = X##si; \ + output[22] = X##si; \ + state[23] = X##so; \ + output[23] = X##so; \ + state[24] = X##su; \ + if (laneCount >= 25) { \ + output[24] = X##su; \ + } \ + } \ + } + +#define output(X, output, laneCount) \ + if (laneCount < 16) { \ + if (laneCount < 8) { \ + if (laneCount < 4) { \ + if (laneCount < 2) { \ + if (laneCount >= 1) { \ + output[ 0] = X##ba; \ + } \ + } \ + else { \ + output[ 0] = X##ba; \ + output[ 1] = ~X##be; \ + if (laneCount >= 3) { \ + output[ 2] = ~X##bi; \ + } \ + } \ + } \ + else { \ + output[ 0] = X##ba; \ + output[ 1] = ~X##be; \ + output[ 2] = ~X##bi; \ + output[ 3] = X##bo; \ + if (laneCount < 6) { \ + if (laneCount >= 5) { \ + output[ 4] = X##bu; \ + } \ + } \ + else { \ + output[ 4] = X##bu; \ + output[ 5] = X##ga; \ + if (laneCount >= 7) { \ + output[ 6] = X##ge; \ + } \ + } \ + } \ + } \ + else { \ + output[ 0] = X##ba; \ + output[ 1] = ~X##be; \ + output[ 2] = ~X##bi; \ + output[ 3] = X##bo; \ + output[ 4] = X##bu; \ + output[ 5] = X##ga; \ + output[ 6] = X##ge; \ + output[ 7] = X##gi; \ + if (laneCount < 12) { \ + if (laneCount < 10) { \ + if (laneCount >= 9) { \ + output[ 8] = ~X##go; \ + } \ + } \ + else { \ + output[ 8] = ~X##go; \ + output[ 9] = X##gu; \ + if (laneCount >= 11) { \ + output[10] = X##ka; \ + } \ + } \ + } \ + else { \ + output[ 8] = ~X##go; \ + output[ 9] = X##gu; \ + output[10] = X##ka; \ + output[11] = X##ke; \ + if (laneCount < 14) { \ + if (laneCount >= 13) { \ + output[12] = ~X##ki; \ + } \ + } \ + else { \ + output[12] = ~X##ki; \ + output[13] = X##ko; \ + if (laneCount >= 15) { \ + output[14] = X##ku; \ + } \ + } \ + } \ + } \ + } \ + else { \ + output[ 0] = X##ba; \ + output[ 1] = ~X##be; \ + output[ 2] = ~X##bi; \ + output[ 3] = X##bo; \ + output[ 4] = X##bu; \ + output[ 5] = X##ga; \ + output[ 6] = X##ge; \ + output[ 7] = X##gi; \ + output[ 8] = ~X##go; \ + output[ 9] = X##gu; \ + output[10] = X##ka; \ + output[11] = X##ke; \ + output[12] = ~X##ki; \ + output[13] = X##ko; \ + output[14] = X##ku; \ + output[15] = X##ma; \ + if (laneCount < 24) { \ + if (laneCount < 20) { \ + if (laneCount < 18) { \ + if (laneCount >= 17) { \ + output[16] = X##me; \ + } \ + } \ + else { \ + output[16] = X##me; \ + output[17] = ~X##mi; \ + if (laneCount >= 19) { \ + output[18] = X##mo; \ + } \ + } \ + } \ + else { \ + output[16] = X##me; \ + output[17] = ~X##mi; \ + output[18] = X##mo; \ + output[19] = X##mu; \ + if (laneCount < 22) { \ + if (laneCount >= 21) { \ + output[20] = ~X##sa; \ + } \ + } \ + else { \ + output[20] = ~X##sa; \ + output[21] = X##se; \ + if (laneCount >= 23) { \ + output[22] = X##si; \ + } \ + } \ + } \ + } \ + else { \ + output[16] = X##me; \ + output[17] = ~X##mi; \ + output[18] = X##mo; \ + output[19] = X##mu; \ + output[20] = ~X##sa; \ + output[21] = X##se; \ + output[22] = X##si; \ + output[23] = X##so; \ + if (laneCount >= 25) { \ + output[24] = X##su; \ + } \ + } \ + } + +#define wrapOne(X, input, output, index, name) \ + X##name ^= input[index]; \ + output[index] = X##name; + +#define wrapOneInvert(X, input, output, index, name) \ + X##name ^= input[index]; \ + output[index] = ~X##name; + +#define unwrapOne(X, input, output, index, name) \ + output[index] = input[index] ^ X##name; \ + X##name ^= output[index]; + +#define unwrapOneInvert(X, input, output, index, name) \ + output[index] = ~(input[index] ^ X##name); \ + X##name ^= output[index]; \ + +#else /* UseBebigokimisa */ + + +#define copyToStateAndOutput(X, state, output, laneCount) \ + if (laneCount < 16) { \ + if (laneCount < 8) { \ + if (laneCount < 4) { \ + if (laneCount < 2) { \ + state[ 0] = X##ba; \ + if (laneCount >= 1) { \ + output[ 0] = X##ba; \ + } \ + state[ 1] = X##be; \ + state[ 2] = X##bi; \ + } \ + else { \ + state[ 0] = X##ba; \ + output[ 0] = X##ba; \ + state[ 1] = X##be; \ + output[ 1] = X##be; \ + state[ 2] = X##bi; \ + if (laneCount >= 3) { \ + output[ 2] = X##bi; \ + } \ + } \ + state[ 3] = X##bo; \ + state[ 4] = X##bu; \ + state[ 5] = X##ga; \ + state[ 6] = X##ge; \ + } \ + else { \ + state[ 0] = X##ba; \ + output[ 0] = X##ba; \ + state[ 1] = X##be; \ + output[ 1] = X##be; \ + state[ 2] = X##bi; \ + output[ 2] = X##bi; \ + state[ 3] = X##bo; \ + output[ 3] = X##bo; \ + if (laneCount < 6) { \ + state[ 4] = X##bu; \ + if (laneCount >= 5) { \ + output[ 4] = X##bu; \ + } \ + state[ 5] = X##ga; \ + state[ 6] = X##ge; \ + } \ + else { \ + state[ 4] = X##bu; \ + output[ 4] = X##bu; \ + state[ 5] = X##ga; \ + output[ 5] = X##ga; \ + state[ 6] = X##ge; \ + if (laneCount >= 7) { \ + output[ 6] = X##ge; \ + } \ + } \ + } \ + state[ 7] = X##gi; \ + state[ 8] = X##go; \ + state[ 9] = X##gu; \ + state[10] = X##ka; \ + state[11] = X##ke; \ + state[12] = X##ki; \ + state[13] = X##ko; \ + state[14] = X##ku; \ + } \ + else { \ + state[ 0] = X##ba; \ + output[ 0] = X##ba; \ + state[ 1] = X##be; \ + output[ 1] = X##be; \ + state[ 2] = X##bi; \ + output[ 2] = X##bi; \ + state[ 3] = X##bo; \ + output[ 3] = X##bo; \ + state[ 4] = X##bu; \ + output[ 4] = X##bu; \ + state[ 5] = X##ga; \ + output[ 5] = X##ga; \ + state[ 6] = X##ge; \ + output[ 6] = X##ge; \ + state[ 7] = X##gi; \ + output[ 7] = X##gi; \ + if (laneCount < 12) { \ + if (laneCount < 10) { \ + state[ 8] = X##go; \ + if (laneCount >= 9) { \ + output[ 8] = X##go; \ + } \ + state[ 9] = X##gu; \ + state[10] = X##ka; \ + } \ + else { \ + state[ 8] = X##go; \ + output[ 8] = X##go; \ + state[ 9] = X##gu; \ + output[ 9] = X##gu; \ + state[10] = X##ka; \ + if (laneCount >= 11) { \ + output[10] = X##ka; \ + } \ + } \ + state[11] = X##ke; \ + state[12] = X##ki; \ + state[13] = X##ko; \ + state[14] = X##ku; \ + } \ + else { \ + state[ 8] = X##go; \ + output[ 8] = X##go; \ + state[ 9] = X##gu; \ + output[ 9] = X##gu; \ + state[10] = X##ka; \ + output[10] = X##ka; \ + state[11] = X##ke; \ + output[11] = X##ke; \ + if (laneCount < 14) { \ + state[12] = X##ki; \ + if (laneCount >= 13) { \ + output[12]= X##ki; \ + } \ + state[13] = X##ko; \ + state[14] = X##ku; \ + } \ + else { \ + state[12] = X##ki; \ + output[12]= X##ki; \ + state[13] = X##ko; \ + output[13] = X##ko; \ + state[14] = X##ku; \ + if (laneCount >= 15) { \ + output[14] = X##ku; \ + } \ + } \ + } \ + } \ + state[15] = X##ma; \ + state[16] = X##me; \ + state[17] = X##mi; \ + state[18] = X##mo; \ + state[19] = X##mu; \ + state[20] = X##sa; \ + state[21] = X##se; \ + state[22] = X##si; \ + state[23] = X##so; \ + state[24] = X##su; \ + } \ + else { \ + state[ 0] = X##ba; \ + output[ 0] = X##ba; \ + state[ 1] = X##be; \ + output[ 1] = X##be; \ + state[ 2] = X##bi; \ + output[ 2] = X##bi; \ + state[ 3] = X##bo; \ + output[ 3] = X##bo; \ + state[ 4] = X##bu; \ + output[ 4] = X##bu; \ + state[ 5] = X##ga; \ + output[ 5] = X##ga; \ + state[ 6] = X##ge; \ + output[ 6] = X##ge; \ + state[ 7] = X##gi; \ + output[ 7] = X##gi; \ + state[ 8] = X##go; \ + output[ 8] = X##go; \ + state[ 9] = X##gu; \ + output[ 9] = X##gu; \ + state[10] = X##ka; \ + output[10] = X##ka; \ + state[11] = X##ke; \ + output[11] = X##ke; \ + state[12] = X##ki; \ + output[12]= X##ki; \ + state[13] = X##ko; \ + output[13] = X##ko; \ + state[14] = X##ku; \ + output[14] = X##ku; \ + state[15] = X##ma; \ + output[15] = X##ma; \ + if (laneCount < 24) { \ + if (laneCount < 20) { \ + if (laneCount < 18) { \ + state[16] = X##me; \ + if (laneCount >= 17) { \ + output[16] = X##me; \ + } \ + state[17] = X##mi; \ + state[18] = X##mo; \ + } \ + else { \ + state[16] = X##me; \ + output[16] = X##me; \ + state[17] = X##mi; \ + output[17] = X##mi; \ + state[18] = X##mo; \ + if (laneCount >= 19) { \ + output[18] = X##mo; \ + } \ + } \ + state[19] = X##mu; \ + state[20] = X##sa; \ + state[21] = X##se; \ + state[22] = X##si; \ + } \ + else { \ + state[16] = X##me; \ + output[16] = X##me; \ + state[17] = X##mi; \ + output[17] = X##mi; \ + state[18] = X##mo; \ + output[18] = X##mo; \ + state[19] = X##mu; \ + output[19] = X##mu; \ + if (laneCount < 22) { \ + state[20] = X##sa; \ + if (laneCount >= 21) { \ + output[20] = X##sa; \ + } \ + state[21] = X##se; \ + state[22] = X##si; \ + } \ + else { \ + state[20] = X##sa; \ + output[20] = X##sa; \ + state[21] = X##se; \ + output[21] = X##se; \ + state[22] = X##si; \ + if (laneCount >= 23) { \ + output[22] = X##si; \ + } \ + } \ + } \ + state[23] = X##so; \ + state[24] = X##su; \ + } \ + else { \ + state[16] = X##me; \ + output[16] = X##me; \ + state[17] = X##mi; \ + output[17] = X##mi; \ + state[18] = X##mo; \ + output[18] = X##mo; \ + state[19] = X##mu; \ + output[19] = X##mu; \ + state[20] = X##sa; \ + output[20] = X##sa; \ + state[21] = X##se; \ + output[21] = X##se; \ + state[22] = X##si; \ + output[22] = X##si; \ + state[23] = X##so; \ + output[23] = X##so; \ + state[24] = X##su; \ + if (laneCount >= 25) { \ + output[24] = X##su; \ + } \ + } \ + } + +#define output(X, output, laneCount) \ + if (laneCount < 16) { \ + if (laneCount < 8) { \ + if (laneCount < 4) { \ + if (laneCount < 2) { \ + if (laneCount >= 1) { \ + output[ 0] = X##ba; \ + } \ + } \ + else { \ + output[ 0] = X##ba; \ + output[ 1] = X##be; \ + if (laneCount >= 3) { \ + output[ 2] = X##bi; \ + } \ + } \ + } \ + else { \ + output[ 0] = X##ba; \ + output[ 1] = X##be; \ + output[ 2] = X##bi; \ + output[ 3] = X##bo; \ + if (laneCount < 6) { \ + if (laneCount >= 5) { \ + output[ 4] = X##bu; \ + } \ + } \ + else { \ + output[ 4] = X##bu; \ + output[ 5] = X##ga; \ + if (laneCount >= 7) { \ + output[ 6] = X##ge; \ + } \ + } \ + } \ + } \ + else { \ + output[ 0] = X##ba; \ + output[ 1] = X##be; \ + output[ 2] = X##bi; \ + output[ 3] = X##bo; \ + output[ 4] = X##bu; \ + output[ 5] = X##ga; \ + output[ 6] = X##ge; \ + output[ 7] = X##gi; \ + if (laneCount < 12) { \ + if (laneCount < 10) { \ + if (laneCount >= 9) { \ + output[ 8] = X##go; \ + } \ + } \ + else { \ + output[ 8] = X##go; \ + output[ 9] = X##gu; \ + if (laneCount >= 11) { \ + output[10] = X##ka; \ + } \ + } \ + } \ + else { \ + output[ 8] = X##go; \ + output[ 9] = X##gu; \ + output[10] = X##ka; \ + output[11] = X##ke; \ + if (laneCount < 14) { \ + if (laneCount >= 13) { \ + output[12] = X##ki; \ + } \ + } \ + else { \ + output[12] = X##ki; \ + output[13] = X##ko; \ + if (laneCount >= 15) { \ + output[14] = X##ku; \ + } \ + } \ + } \ + } \ + } \ + else { \ + output[ 0] = X##ba; \ + output[ 1] = X##be; \ + output[ 2] = X##bi; \ + output[ 3] = X##bo; \ + output[ 4] = X##bu; \ + output[ 5] = X##ga; \ + output[ 6] = X##ge; \ + output[ 7] = X##gi; \ + output[ 8] = X##go; \ + output[ 9] = X##gu; \ + output[10] = X##ka; \ + output[11] = X##ke; \ + output[12] = X##ki; \ + output[13] = X##ko; \ + output[14] = X##ku; \ + output[15] = X##ma; \ + if (laneCount < 24) { \ + if (laneCount < 20) { \ + if (laneCount < 18) { \ + if (laneCount >= 17) { \ + output[16] = X##me; \ + } \ + } \ + else { \ + output[16] = X##me; \ + output[17] = X##mi; \ + if (laneCount >= 19) { \ + output[18] = X##mo; \ + } \ + } \ + } \ + else { \ + output[16] = X##me; \ + output[17] = X##mi; \ + output[18] = X##mo; \ + output[19] = X##mu; \ + if (laneCount < 22) { \ + if (laneCount >= 21) { \ + output[20] = X##sa; \ + } \ + } \ + else { \ + output[20] = X##sa; \ + output[21] = X##se; \ + if (laneCount >= 23) { \ + output[22] = X##si; \ + } \ + } \ + } \ + } \ + else { \ + output[16] = X##me; \ + output[17] = X##mi; \ + output[18] = X##mo; \ + output[19] = X##mu; \ + output[20] = X##sa; \ + output[21] = X##se; \ + output[22] = X##si; \ + output[23] = X##so; \ + if (laneCount >= 25) { \ + output[24] = X##su; \ + } \ + } \ + } + +#define wrapOne(X, input, output, index, name) \ + X##name ^= input[index]; \ + output[index] = X##name; + +#define wrapOneInvert(X, input, output, index, name) \ + X##name ^= input[index]; \ + output[index] = X##name; + +#define unwrapOne(X, input, output, index, name) \ + output[index] = input[index] ^ X##name; \ + X##name ^= output[index]; + +#define unwrapOneInvert(X, input, output, index, name) \ + output[index] = input[index] ^ X##name; \ + X##name ^= output[index]; + +#endif + +#define wrap(X, input, output, laneCount, trailingBits) \ + if (laneCount < 16) { \ + if (laneCount < 8) { \ + if (laneCount < 4) { \ + if (laneCount < 2) { \ + if (laneCount < 1) { \ + X##ba ^= trailingBits; \ + } \ + else { \ + wrapOne(X, input, output, 0, ba) \ + X##be ^= trailingBits; \ + } \ + } \ + else { \ + wrapOne(X, input, output, 0, ba) \ + wrapOneInvert(X, input, output, 1, be) \ + if (laneCount < 3) { \ + X##bi ^= trailingBits; \ + } \ + else { \ + wrapOneInvert(X, input, output, 2, bi) \ + X##bo ^= trailingBits; \ + } \ + } \ + } \ + else { \ + wrapOne(X, input, output, 0, ba) \ + wrapOneInvert(X, input, output, 1, be) \ + wrapOneInvert(X, input, output, 2, bi) \ + wrapOne(X, input, output, 3, bo) \ + if (laneCount < 6) { \ + if (laneCount < 5) { \ + X##bu ^= trailingBits; \ + } \ + else { \ + wrapOne(X, input, output, 4, bu) \ + X##ga ^= trailingBits; \ + } \ + } \ + else { \ + wrapOne(X, input, output, 4, bu) \ + wrapOne(X, input, output, 5, ga) \ + if (laneCount < 7) { \ + X##ge ^= trailingBits; \ + } \ + else { \ + wrapOne(X, input, output, 6, ge) \ + X##gi ^= trailingBits; \ + } \ + } \ + } \ + } \ + else { \ + wrapOne(X, input, output, 0, ba) \ + wrapOneInvert(X, input, output, 1, be) \ + wrapOneInvert(X, input, output, 2, bi) \ + wrapOne(X, input, output, 3, bo) \ + wrapOne(X, input, output, 4, bu) \ + wrapOne(X, input, output, 5, ga) \ + wrapOne(X, input, output, 6, ge) \ + wrapOne(X, input, output, 7, gi) \ + if (laneCount < 12) { \ + if (laneCount < 10) { \ + if (laneCount < 9) { \ + X##go ^= trailingBits; \ + } \ + else { \ + wrapOneInvert(X, input, output, 8, go) \ + X##gu ^= trailingBits; \ + } \ + } \ + else { \ + wrapOneInvert(X, input, output, 8, go) \ + wrapOne(X, input, output, 9, gu) \ + if (laneCount < 11) { \ + X##ka ^= trailingBits; \ + } \ + else { \ + wrapOne(X, input, output, 10, ka) \ + X##ke ^= trailingBits; \ + } \ + } \ + } \ + else { \ + wrapOneInvert(X, input, output, 8, go) \ + wrapOne(X, input, output, 9, gu) \ + wrapOne(X, input, output, 10, ka) \ + wrapOne(X, input, output, 11, ke) \ + if (laneCount < 14) { \ + if (laneCount < 13) { \ + X##ki ^= trailingBits; \ + } \ + else { \ + wrapOneInvert(X, input, output, 12, ki) \ + X##ko ^= trailingBits; \ + } \ + } \ + else { \ + wrapOneInvert(X, input, output, 12, ki) \ + wrapOne(X, input, output, 13, ko) \ + if (laneCount < 15) { \ + X##ku ^= trailingBits; \ + } \ + else { \ + wrapOne(X, input, output, 14, ku) \ + X##ma ^= trailingBits; \ + } \ + } \ + } \ + } \ + } \ + else { \ + wrapOne(X, input, output, 0, ba) \ + wrapOneInvert(X, input, output, 1, be) \ + wrapOneInvert(X, input, output, 2, bi) \ + wrapOne(X, input, output, 3, bo) \ + wrapOne(X, input, output, 4, bu) \ + wrapOne(X, input, output, 5, ga) \ + wrapOne(X, input, output, 6, ge) \ + wrapOne(X, input, output, 7, gi) \ + wrapOneInvert(X, input, output, 8, go) \ + wrapOne(X, input, output, 9, gu) \ + wrapOne(X, input, output, 10, ka) \ + wrapOne(X, input, output, 11, ke) \ + wrapOneInvert(X, input, output, 12, ki) \ + wrapOne(X, input, output, 13, ko) \ + wrapOne(X, input, output, 14, ku) \ + wrapOne(X, input, output, 15, ma) \ + if (laneCount < 24) { \ + if (laneCount < 20) { \ + if (laneCount < 18) { \ + if (laneCount < 17) { \ + X##me ^= trailingBits; \ + } \ + else { \ + wrapOne(X, input, output, 16, me) \ + X##mi ^= trailingBits; \ + } \ + } \ + else { \ + wrapOne(X, input, output, 16, me) \ + wrapOneInvert(X, input, output, 17, mi) \ + if (laneCount < 19) { \ + X##mo ^= trailingBits; \ + } \ + else { \ + wrapOne(X, input, output, 18, mo) \ + X##mu ^= trailingBits; \ + } \ + } \ + } \ + else { \ + wrapOne(X, input, output, 16, me) \ + wrapOneInvert(X, input, output, 17, mi) \ + wrapOne(X, input, output, 18, mo) \ + wrapOne(X, input, output, 19, mu) \ + if (laneCount < 22) { \ + if (laneCount < 21) { \ + X##sa ^= trailingBits; \ + } \ + else { \ + wrapOneInvert(X, input, output, 20, sa) \ + X##se ^= trailingBits; \ + } \ + } \ + else { \ + wrapOneInvert(X, input, output, 20, sa) \ + wrapOne(X, input, output, 21, se) \ + if (laneCount < 23) { \ + X##si ^= trailingBits; \ + } \ + else { \ + wrapOne(X, input, output, 22, si) \ + X##so ^= trailingBits; \ + } \ + } \ + } \ + } \ + else { \ + wrapOne(X, input, output, 16, me) \ + wrapOneInvert(X, input, output, 17, mi) \ + wrapOne(X, input, output, 18, mo) \ + wrapOne(X, input, output, 19, mu) \ + wrapOneInvert(X, input, output, 20, sa) \ + wrapOne(X, input, output, 21, se) \ + wrapOne(X, input, output, 22, si) \ + wrapOne(X, input, output, 23, so) \ + if (laneCount < 25) { \ + X##su ^= trailingBits; \ + } \ + else { \ + wrapOne(X, input, output, 24, su) \ + } \ + } \ + } + +#define unwrap(X, input, output, laneCount, trailingBits) \ + if (laneCount < 16) { \ + if (laneCount < 8) { \ + if (laneCount < 4) { \ + if (laneCount < 2) { \ + if (laneCount < 1) { \ + X##ba ^= trailingBits; \ + } \ + else { \ + unwrapOne(X, input, output, 0, ba) \ + X##be ^= trailingBits; \ + } \ + } \ + else { \ + unwrapOne(X, input, output, 0, ba) \ + unwrapOneInvert(X, input, output, 1, be) \ + if (laneCount < 3) { \ + X##bi ^= trailingBits; \ + } \ + else { \ + unwrapOneInvert(X, input, output, 2, bi) \ + X##bo ^= trailingBits; \ + } \ + } \ + } \ + else { \ + unwrapOne(X, input, output, 0, ba) \ + unwrapOneInvert(X, input, output, 1, be) \ + unwrapOneInvert(X, input, output, 2, bi) \ + unwrapOne(X, input, output, 3, bo) \ + if (laneCount < 6) { \ + if (laneCount < 5) { \ + X##bu ^= trailingBits; \ + } \ + else { \ + unwrapOne(X, input, output, 4, bu) \ + X##ga ^= trailingBits; \ + } \ + } \ + else { \ + unwrapOne(X, input, output, 4, bu) \ + unwrapOne(X, input, output, 5, ga) \ + if (laneCount < 7) { \ + X##ge ^= trailingBits; \ + } \ + else { \ + unwrapOne(X, input, output, 6, ge) \ + X##gi ^= trailingBits; \ + } \ + } \ + } \ + } \ + else { \ + unwrapOne(X, input, output, 0, ba) \ + unwrapOneInvert(X, input, output, 1, be) \ + unwrapOneInvert(X, input, output, 2, bi) \ + unwrapOne(X, input, output, 3, bo) \ + unwrapOne(X, input, output, 4, bu) \ + unwrapOne(X, input, output, 5, ga) \ + unwrapOne(X, input, output, 6, ge) \ + unwrapOne(X, input, output, 7, gi) \ + if (laneCount < 12) { \ + if (laneCount < 10) { \ + if (laneCount < 9) { \ + X##go ^= trailingBits; \ + } \ + else { \ + unwrapOneInvert(X, input, output, 8, go) \ + X##gu ^= trailingBits; \ + } \ + } \ + else { \ + unwrapOneInvert(X, input, output, 8, go) \ + unwrapOne(X, input, output, 9, gu) \ + if (laneCount < 11) { \ + X##ka ^= trailingBits; \ + } \ + else { \ + unwrapOne(X, input, output, 10, ka) \ + X##ke ^= trailingBits; \ + } \ + } \ + } \ + else { \ + unwrapOneInvert(X, input, output, 8, go) \ + unwrapOne(X, input, output, 9, gu) \ + unwrapOne(X, input, output, 10, ka) \ + unwrapOne(X, input, output, 11, ke) \ + if (laneCount < 14) { \ + if (laneCount < 13) { \ + X##ki ^= trailingBits; \ + } \ + else { \ + unwrapOneInvert(X, input, output, 12, ki) \ + X##ko ^= trailingBits; \ + } \ + } \ + else { \ + unwrapOneInvert(X, input, output, 12, ki) \ + unwrapOne(X, input, output, 13, ko) \ + if (laneCount < 15) { \ + X##ku ^= trailingBits; \ + } \ + else { \ + unwrapOne(X, input, output, 14, ku) \ + X##ma ^= trailingBits; \ + } \ + } \ + } \ + } \ + } \ + else { \ + unwrapOne(X, input, output, 0, ba) \ + unwrapOneInvert(X, input, output, 1, be) \ + unwrapOneInvert(X, input, output, 2, bi) \ + unwrapOne(X, input, output, 3, bo) \ + unwrapOne(X, input, output, 4, bu) \ + unwrapOne(X, input, output, 5, ga) \ + unwrapOne(X, input, output, 6, ge) \ + unwrapOne(X, input, output, 7, gi) \ + unwrapOneInvert(X, input, output, 8, go) \ + unwrapOne(X, input, output, 9, gu) \ + unwrapOne(X, input, output, 10, ka) \ + unwrapOne(X, input, output, 11, ke) \ + unwrapOneInvert(X, input, output, 12, ki) \ + unwrapOne(X, input, output, 13, ko) \ + unwrapOne(X, input, output, 14, ku) \ + unwrapOne(X, input, output, 15, ma) \ + if (laneCount < 24) { \ + if (laneCount < 20) { \ + if (laneCount < 18) { \ + if (laneCount < 17) { \ + X##me ^= trailingBits; \ + } \ + else { \ + unwrapOne(X, input, output, 16, me) \ + X##mi ^= trailingBits; \ + } \ + } \ + else { \ + unwrapOne(X, input, output, 16, me) \ + unwrapOneInvert(X, input, output, 17, mi) \ + if (laneCount < 19) { \ + X##mo ^= trailingBits; \ + } \ + else { \ + unwrapOne(X, input, output, 18, mo) \ + X##mu ^= trailingBits; \ + } \ + } \ + } \ + else { \ + unwrapOne(X, input, output, 16, me) \ + unwrapOneInvert(X, input, output, 17, mi) \ + unwrapOne(X, input, output, 18, mo) \ + unwrapOne(X, input, output, 19, mu) \ + if (laneCount < 22) { \ + if (laneCount < 21) { \ + X##sa ^= trailingBits; \ + } \ + else { \ + unwrapOneInvert(X, input, output, 20, sa) \ + X##se ^= trailingBits; \ + } \ + } \ + else { \ + unwrapOneInvert(X, input, output, 20, sa) \ + unwrapOne(X, input, output, 21, se) \ + if (laneCount < 23) { \ + X##si ^= trailingBits; \ + } \ + else { \ + unwrapOne(X, input, output, 22, si) \ + X##so ^= trailingBits; \ + } \ + } \ + } \ + } \ + else { \ + unwrapOne(X, input, output, 16, me) \ + unwrapOneInvert(X, input, output, 17, mi) \ + unwrapOne(X, input, output, 18, mo) \ + unwrapOne(X, input, output, 19, mu) \ + unwrapOneInvert(X, input, output, 20, sa) \ + unwrapOne(X, input, output, 21, se) \ + unwrapOne(X, input, output, 22, si) \ + unwrapOne(X, input, output, 23, so) \ + if (laneCount < 25) { \ + X##su ^= trailingBits; \ + } \ + else { \ + unwrapOne(X, input, output, 24, su) \ + } \ + } \ + } diff --git a/Modules/_sha3/kcp/KeccakP-1600-SnP-opt32.h b/Modules/_sha3/kcp/KeccakP-1600-SnP-opt32.h new file mode 100644 index 0000000000..6cf765e6ce --- /dev/null +++ b/Modules/_sha3/kcp/KeccakP-1600-SnP-opt32.h @@ -0,0 +1,37 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#ifndef _KeccakP_1600_SnP_h_ +#define _KeccakP_1600_SnP_h_ + +/** For the documentation, see SnP-documentation.h. + */ + +#define KeccakP1600_implementation "in-place 32-bit optimized implementation" +#define KeccakP1600_stateSizeInBytes 200 +#define KeccakP1600_stateAlignment 8 + +#define KeccakP1600_StaticInitialize() +void KeccakP1600_Initialize(void *state); +void KeccakP1600_AddByte(void *state, unsigned char data, unsigned int offset); +void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length); +void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length); +void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount); +void KeccakP1600_Permute_12rounds(void *state); +void KeccakP1600_Permute_24rounds(void *state); +void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length); +void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length); + +#endif diff --git a/Modules/_sha3/kcp/KeccakP-1600-SnP-opt64.h b/Modules/_sha3/kcp/KeccakP-1600-SnP-opt64.h new file mode 100644 index 0000000000..889a31a794 --- /dev/null +++ b/Modules/_sha3/kcp/KeccakP-1600-SnP-opt64.h @@ -0,0 +1,49 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#ifndef _KeccakP_1600_SnP_h_ +#define _KeccakP_1600_SnP_h_ + +/** For the documentation, see SnP-documentation.h. + */ + +/* #include "brg_endian.h" */ +#include "KeccakP-1600-opt64-config.h" + +#define KeccakP1600_implementation "generic 64-bit optimized implementation (" KeccakP1600_implementation_config ")" +#define KeccakP1600_stateSizeInBytes 200 +#define KeccakP1600_stateAlignment 8 +#define KeccakF1600_FastLoop_supported + +#include + +#define KeccakP1600_StaticInitialize() +void KeccakP1600_Initialize(void *state); +#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) +#define KeccakP1600_AddByte(state, byte, offset) \ + ((unsigned char*)(state))[(offset)] ^= (byte) +#else +void KeccakP1600_AddByte(void *state, unsigned char data, unsigned int offset); +#endif +void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length); +void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length); +void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount); +void KeccakP1600_Permute_12rounds(void *state); +void KeccakP1600_Permute_24rounds(void *state); +void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length); +void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length); +size_t KeccakF1600_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen); + +#endif diff --git a/Modules/_sha3/kcp/KeccakP-1600-SnP.h b/Modules/_sha3/kcp/KeccakP-1600-SnP.h new file mode 100644 index 0000000000..0b23f09a6a --- /dev/null +++ b/Modules/_sha3/kcp/KeccakP-1600-SnP.h @@ -0,0 +1,7 @@ +#if KeccakOpt == 64 + #include "KeccakP-1600-SnP-opt64.h" +#elif KeccakOpt == 32 + #include "KeccakP-1600-SnP-opt32.h" +#else + #error "No KeccakOpt" +#endif diff --git a/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c b/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c new file mode 100644 index 0000000000..886dc44197 --- /dev/null +++ b/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c @@ -0,0 +1,1160 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#include +/* #include "brg_endian.h" */ +#include "KeccakP-1600-SnP.h" +#include "SnP-Relaned.h" + +typedef unsigned char UINT8; +typedef unsigned int UINT32; +/* WARNING: on 8-bit and 16-bit platforms, this should be replaced by: */ + +/*typedef unsigned long UINT32; */ + + +#define ROL32(a, offset) ((((UINT32)a) << (offset)) ^ (((UINT32)a) >> (32-(offset)))) + +/* Credit to Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002 */ + +#define prepareToBitInterleaving(low, high, temp, temp0, temp1) \ + temp0 = (low); \ + temp = (temp0 ^ (temp0 >> 1)) & 0x22222222UL; temp0 = temp0 ^ temp ^ (temp << 1); \ + temp = (temp0 ^ (temp0 >> 2)) & 0x0C0C0C0CUL; temp0 = temp0 ^ temp ^ (temp << 2); \ + temp = (temp0 ^ (temp0 >> 4)) & 0x00F000F0UL; temp0 = temp0 ^ temp ^ (temp << 4); \ + temp = (temp0 ^ (temp0 >> 8)) & 0x0000FF00UL; temp0 = temp0 ^ temp ^ (temp << 8); \ + temp1 = (high); \ + temp = (temp1 ^ (temp1 >> 1)) & 0x22222222UL; temp1 = temp1 ^ temp ^ (temp << 1); \ + temp = (temp1 ^ (temp1 >> 2)) & 0x0C0C0C0CUL; temp1 = temp1 ^ temp ^ (temp << 2); \ + temp = (temp1 ^ (temp1 >> 4)) & 0x00F000F0UL; temp1 = temp1 ^ temp ^ (temp << 4); \ + temp = (temp1 ^ (temp1 >> 8)) & 0x0000FF00UL; temp1 = temp1 ^ temp ^ (temp << 8); + +#define toBitInterleavingAndXOR(low, high, even, odd, temp, temp0, temp1) \ + prepareToBitInterleaving(low, high, temp, temp0, temp1) \ + even ^= (temp0 & 0x0000FFFF) | (temp1 << 16); \ + odd ^= (temp0 >> 16) | (temp1 & 0xFFFF0000); + +#define toBitInterleavingAndAND(low, high, even, odd, temp, temp0, temp1) \ + prepareToBitInterleaving(low, high, temp, temp0, temp1) \ + even &= (temp0 & 0x0000FFFF) | (temp1 << 16); \ + odd &= (temp0 >> 16) | (temp1 & 0xFFFF0000); + +#define toBitInterleavingAndSet(low, high, even, odd, temp, temp0, temp1) \ + prepareToBitInterleaving(low, high, temp, temp0, temp1) \ + even = (temp0 & 0x0000FFFF) | (temp1 << 16); \ + odd = (temp0 >> 16) | (temp1 & 0xFFFF0000); + +/* Credit to Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002 */ + +#define prepareFromBitInterleaving(even, odd, temp, temp0, temp1) \ + temp0 = (even); \ + temp1 = (odd); \ + temp = (temp0 & 0x0000FFFF) | (temp1 << 16); \ + temp1 = (temp0 >> 16) | (temp1 & 0xFFFF0000); \ + temp0 = temp; \ + temp = (temp0 ^ (temp0 >> 8)) & 0x0000FF00UL; temp0 = temp0 ^ temp ^ (temp << 8); \ + temp = (temp0 ^ (temp0 >> 4)) & 0x00F000F0UL; temp0 = temp0 ^ temp ^ (temp << 4); \ + temp = (temp0 ^ (temp0 >> 2)) & 0x0C0C0C0CUL; temp0 = temp0 ^ temp ^ (temp << 2); \ + temp = (temp0 ^ (temp0 >> 1)) & 0x22222222UL; temp0 = temp0 ^ temp ^ (temp << 1); \ + temp = (temp1 ^ (temp1 >> 8)) & 0x0000FF00UL; temp1 = temp1 ^ temp ^ (temp << 8); \ + temp = (temp1 ^ (temp1 >> 4)) & 0x00F000F0UL; temp1 = temp1 ^ temp ^ (temp << 4); \ + temp = (temp1 ^ (temp1 >> 2)) & 0x0C0C0C0CUL; temp1 = temp1 ^ temp ^ (temp << 2); \ + temp = (temp1 ^ (temp1 >> 1)) & 0x22222222UL; temp1 = temp1 ^ temp ^ (temp << 1); + +#define fromBitInterleaving(even, odd, low, high, temp, temp0, temp1) \ + prepareFromBitInterleaving(even, odd, temp, temp0, temp1) \ + low = temp0; \ + high = temp1; + +#define fromBitInterleavingAndXOR(even, odd, lowIn, highIn, lowOut, highOut, temp, temp0, temp1) \ + prepareFromBitInterleaving(even, odd, temp, temp0, temp1) \ + lowOut = lowIn ^ temp0; \ + highOut = highIn ^ temp1; + +void KeccakP1600_SetBytesInLaneToZero(void *state, unsigned int lanePosition, unsigned int offset, unsigned int length) +{ + UINT8 laneAsBytes[8]; + UINT32 low, high; + UINT32 temp, temp0, temp1; + UINT32 *stateAsHalfLanes = (UINT32*)state; + + memset(laneAsBytes, 0xFF, offset); + memset(laneAsBytes+offset, 0x00, length); + memset(laneAsBytes+offset+length, 0xFF, 8-offset-length); +#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) + low = *((UINT32*)(laneAsBytes+0)); + high = *((UINT32*)(laneAsBytes+4)); +#else + low = laneAsBytes[0] + | ((UINT32)(laneAsBytes[1]) << 8) + | ((UINT32)(laneAsBytes[2]) << 16) + | ((UINT32)(laneAsBytes[3]) << 24); + high = laneAsBytes[4] + | ((UINT32)(laneAsBytes[5]) << 8) + | ((UINT32)(laneAsBytes[6]) << 16) + | ((UINT32)(laneAsBytes[7]) << 24); +#endif + toBitInterleavingAndAND(low, high, stateAsHalfLanes[lanePosition*2+0], stateAsHalfLanes[lanePosition*2+1], temp, temp0, temp1); +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_Initialize(void *state) +{ + memset(state, 0, 200); +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset) +{ + unsigned int lanePosition = offset/8; + unsigned int offsetInLane = offset%8; + UINT32 low, high; + UINT32 temp, temp0, temp1; + UINT32 *stateAsHalfLanes = (UINT32*)state; + + if (offsetInLane < 4) { + low = (UINT32)byte << (offsetInLane*8); + high = 0; + } + else { + low = 0; + high = (UINT32)byte << ((offsetInLane-4)*8); + } + toBitInterleavingAndXOR(low, high, stateAsHalfLanes[lanePosition*2+0], stateAsHalfLanes[lanePosition*2+1], temp, temp0, temp1); +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_AddBytesInLane(void *state, unsigned int lanePosition, const unsigned char *data, unsigned int offset, unsigned int length) +{ + UINT8 laneAsBytes[8]; + UINT32 low, high; + UINT32 temp, temp0, temp1; + UINT32 *stateAsHalfLanes = (UINT32*)state; + + memset(laneAsBytes, 0, 8); + memcpy(laneAsBytes+offset, data, length); +#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) + low = *((UINT32*)(laneAsBytes+0)); + high = *((UINT32*)(laneAsBytes+4)); +#else + low = laneAsBytes[0] + | ((UINT32)(laneAsBytes[1]) << 8) + | ((UINT32)(laneAsBytes[2]) << 16) + | ((UINT32)(laneAsBytes[3]) << 24); + high = laneAsBytes[4] + | ((UINT32)(laneAsBytes[5]) << 8) + | ((UINT32)(laneAsBytes[6]) << 16) + | ((UINT32)(laneAsBytes[7]) << 24); +#endif + toBitInterleavingAndXOR(low, high, stateAsHalfLanes[lanePosition*2+0], stateAsHalfLanes[lanePosition*2+1], temp, temp0, temp1); +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int laneCount) +{ +#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) + const UINT32 * pI = (const UINT32 *)data; + UINT32 * pS = (UINT32*)state; + UINT32 t, x0, x1; + int i; + for (i = laneCount-1; i >= 0; --i) { +#ifdef NO_MISALIGNED_ACCESSES + UINT32 low; + UINT32 high; + memcpy(&low, pI++, 4); + memcpy(&high, pI++, 4); + toBitInterleavingAndXOR(low, high, *(pS++), *(pS++), t, x0, x1); +#else + toBitInterleavingAndXOR(*(pI++), *(pI++), *(pS++), *(pS++), t, x0, x1) +#endif + } +#else + unsigned int lanePosition; + for(lanePosition=0; lanePosition= 0; --i) { +#ifdef NO_MISALIGNED_ACCESSES + UINT32 low; + UINT32 high; + memcpy(&low, pI++, 4); + memcpy(&high, pI++, 4); + toBitInterleavingAndSet(low, high, *(pS++), *(pS++), t, x0, x1); +#else + toBitInterleavingAndSet(*(pI++), *(pI++), *(pS++), *(pS++), t, x0, x1) +#endif + } +#else + unsigned int lanePosition; + for(lanePosition=0; lanePosition> 8) & 0xFF; + laneAsBytes[2] = (low >> 16) & 0xFF; + laneAsBytes[3] = (low >> 24) & 0xFF; + laneAsBytes[4] = high & 0xFF; + laneAsBytes[5] = (high >> 8) & 0xFF; + laneAsBytes[6] = (high >> 16) & 0xFF; + laneAsBytes[7] = (high >> 24) & 0xFF; +#endif + memcpy(data, laneAsBytes+offset, length); +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_ExtractLanes(const void *state, unsigned char *data, unsigned int laneCount) +{ +#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) + UINT32 * pI = (UINT32 *)data; + const UINT32 * pS = ( const UINT32 *)state; + UINT32 t, x0, x1; + int i; + for (i = laneCount-1; i >= 0; --i) { +#ifdef NO_MISALIGNED_ACCESSES + UINT32 low; + UINT32 high; + fromBitInterleaving(*(pS++), *(pS++), low, high, t, x0, x1); + memcpy(pI++, &low, 4); + memcpy(pI++, &high, 4); +#else + fromBitInterleaving(*(pS++), *(pS++), *(pI++), *(pI++), t, x0, x1) +#endif + } +#else + unsigned int lanePosition; + for(lanePosition=0; lanePosition> 8) & 0xFF; + laneAsBytes[2] = (low >> 16) & 0xFF; + laneAsBytes[3] = (low >> 24) & 0xFF; + laneAsBytes[4] = high & 0xFF; + laneAsBytes[5] = (high >> 8) & 0xFF; + laneAsBytes[6] = (high >> 16) & 0xFF; + laneAsBytes[7] = (high >> 24) & 0xFF; + memcpy(data+lanePosition*8, laneAsBytes, 8); + } +#endif +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length) +{ + SnP_ExtractBytes(state, data, offset, length, KeccakP1600_ExtractLanes, KeccakP1600_ExtractBytesInLane, 8); +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_ExtractAndAddBytesInLane(const void *state, unsigned int lanePosition, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length) +{ + UINT32 *stateAsHalfLanes = (UINT32*)state; + UINT32 low, high, temp, temp0, temp1; + UINT8 laneAsBytes[8]; + unsigned int i; + + fromBitInterleaving(stateAsHalfLanes[lanePosition*2], stateAsHalfLanes[lanePosition*2+1], low, high, temp, temp0, temp1); +#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) + *((UINT32*)(laneAsBytes+0)) = low; + *((UINT32*)(laneAsBytes+4)) = high; +#else + laneAsBytes[0] = low & 0xFF; + laneAsBytes[1] = (low >> 8) & 0xFF; + laneAsBytes[2] = (low >> 16) & 0xFF; + laneAsBytes[3] = (low >> 24) & 0xFF; + laneAsBytes[4] = high & 0xFF; + laneAsBytes[5] = (high >> 8) & 0xFF; + laneAsBytes[6] = (high >> 16) & 0xFF; + laneAsBytes[7] = (high >> 24) & 0xFF; +#endif + for(i=0; i= 0; --i) { +#ifdef NO_MISALIGNED_ACCESSES + UINT32 low; + UINT32 high; + fromBitInterleaving(*(pS++), *(pS++), low, high, t, x0, x1); + *(pO++) = *(pI++) ^ low; + *(pO++) = *(pI++) ^ high; +#else + fromBitInterleavingAndXOR(*(pS++), *(pS++), *(pI++), *(pI++), *(pO++), *(pO++), t, x0, x1) +#endif + } +#else + unsigned int lanePosition; + for(lanePosition=0; lanePosition> 8) & 0xFF; + laneAsBytes[2] = (low >> 16) & 0xFF; + laneAsBytes[3] = (low >> 24) & 0xFF; + laneAsBytes[4] = high & 0xFF; + laneAsBytes[5] = (high >> 8) & 0xFF; + laneAsBytes[6] = (high >> 16) & 0xFF; + laneAsBytes[7] = (high >> 24) & 0xFF; + ((UINT32*)(output+lanePosition*8))[0] = ((UINT32*)(input+lanePosition*8))[0] ^ (*(const UINT32*)(laneAsBytes+0)); + ((UINT32*)(output+lanePosition*8))[1] = ((UINT32*)(input+lanePosition*8))[0] ^ (*(const UINT32*)(laneAsBytes+4)); + } +#endif +} +/* ---------------------------------------------------------------- */ + +void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length) +{ + SnP_ExtractAndAddBytes(state, input, output, offset, length, KeccakP1600_ExtractAndAddLanes, KeccakP1600_ExtractAndAddBytesInLane, 8); +} + +/* ---------------------------------------------------------------- */ + +static const UINT32 KeccakF1600RoundConstants_int2[2*24+1] = +{ + 0x00000001UL, 0x00000000UL, + 0x00000000UL, 0x00000089UL, + 0x00000000UL, 0x8000008bUL, + 0x00000000UL, 0x80008080UL, + 0x00000001UL, 0x0000008bUL, + 0x00000001UL, 0x00008000UL, + 0x00000001UL, 0x80008088UL, + 0x00000001UL, 0x80000082UL, + 0x00000000UL, 0x0000000bUL, + 0x00000000UL, 0x0000000aUL, + 0x00000001UL, 0x00008082UL, + 0x00000000UL, 0x00008003UL, + 0x00000001UL, 0x0000808bUL, + 0x00000001UL, 0x8000000bUL, + 0x00000001UL, 0x8000008aUL, + 0x00000001UL, 0x80000081UL, + 0x00000000UL, 0x80000081UL, + 0x00000000UL, 0x80000008UL, + 0x00000000UL, 0x00000083UL, + 0x00000000UL, 0x80008003UL, + 0x00000001UL, 0x80008088UL, + 0x00000000UL, 0x80000088UL, + 0x00000001UL, 0x00008000UL, + 0x00000000UL, 0x80008082UL, + 0x000000FFUL +}; + +#define KeccakAtoD_round0() \ + Cx = Abu0^Agu0^Aku0^Amu0^Asu0; \ + Du1 = Abe1^Age1^Ake1^Ame1^Ase1; \ + Da0 = Cx^ROL32(Du1, 1); \ + Cz = Abu1^Agu1^Aku1^Amu1^Asu1; \ + Du0 = Abe0^Age0^Ake0^Ame0^Ase0; \ + Da1 = Cz^Du0; \ +\ + Cw = Abi0^Agi0^Aki0^Ami0^Asi0; \ + Do0 = Cw^ROL32(Cz, 1); \ + Cy = Abi1^Agi1^Aki1^Ami1^Asi1; \ + Do1 = Cy^Cx; \ +\ + Cx = Aba0^Aga0^Aka0^Ama0^Asa0; \ + De0 = Cx^ROL32(Cy, 1); \ + Cz = Aba1^Aga1^Aka1^Ama1^Asa1; \ + De1 = Cz^Cw; \ +\ + Cy = Abo1^Ago1^Ako1^Amo1^Aso1; \ + Di0 = Du0^ROL32(Cy, 1); \ + Cw = Abo0^Ago0^Ako0^Amo0^Aso0; \ + Di1 = Du1^Cw; \ +\ + Du0 = Cw^ROL32(Cz, 1); \ + Du1 = Cy^Cx; \ + +#define KeccakAtoD_round1() \ + Cx = Asu0^Agu0^Amu0^Abu1^Aku1; \ + Du1 = Age1^Ame0^Abe0^Ake1^Ase1; \ + Da0 = Cx^ROL32(Du1, 1); \ + Cz = Asu1^Agu1^Amu1^Abu0^Aku0; \ + Du0 = Age0^Ame1^Abe1^Ake0^Ase0; \ + Da1 = Cz^Du0; \ +\ + Cw = Aki1^Asi1^Agi0^Ami1^Abi0; \ + Do0 = Cw^ROL32(Cz, 1); \ + Cy = Aki0^Asi0^Agi1^Ami0^Abi1; \ + Do1 = Cy^Cx; \ +\ + Cx = Aba0^Aka1^Asa0^Aga0^Ama1; \ + De0 = Cx^ROL32(Cy, 1); \ + Cz = Aba1^Aka0^Asa1^Aga1^Ama0; \ + De1 = Cz^Cw; \ +\ + Cy = Amo0^Abo1^Ako0^Aso1^Ago0; \ + Di0 = Du0^ROL32(Cy, 1); \ + Cw = Amo1^Abo0^Ako1^Aso0^Ago1; \ + Di1 = Du1^Cw; \ +\ + Du0 = Cw^ROL32(Cz, 1); \ + Du1 = Cy^Cx; \ + +#define KeccakAtoD_round2() \ + Cx = Aku1^Agu0^Abu1^Asu1^Amu1; \ + Du1 = Ame0^Ake0^Age0^Abe0^Ase1; \ + Da0 = Cx^ROL32(Du1, 1); \ + Cz = Aku0^Agu1^Abu0^Asu0^Amu0; \ + Du0 = Ame1^Ake1^Age1^Abe1^Ase0; \ + Da1 = Cz^Du0; \ +\ + Cw = Agi1^Abi1^Asi1^Ami0^Aki1; \ + Do0 = Cw^ROL32(Cz, 1); \ + Cy = Agi0^Abi0^Asi0^Ami1^Aki0; \ + Do1 = Cy^Cx; \ +\ + Cx = Aba0^Asa1^Ama1^Aka1^Aga1; \ + De0 = Cx^ROL32(Cy, 1); \ + Cz = Aba1^Asa0^Ama0^Aka0^Aga0; \ + De1 = Cz^Cw; \ +\ + Cy = Aso0^Amo0^Ako1^Ago0^Abo0; \ + Di0 = Du0^ROL32(Cy, 1); \ + Cw = Aso1^Amo1^Ako0^Ago1^Abo1; \ + Di1 = Du1^Cw; \ +\ + Du0 = Cw^ROL32(Cz, 1); \ + Du1 = Cy^Cx; \ + +#define KeccakAtoD_round3() \ + Cx = Amu1^Agu0^Asu1^Aku0^Abu0; \ + Du1 = Ake0^Abe1^Ame1^Age0^Ase1; \ + Da0 = Cx^ROL32(Du1, 1); \ + Cz = Amu0^Agu1^Asu0^Aku1^Abu1; \ + Du0 = Ake1^Abe0^Ame0^Age1^Ase0; \ + Da1 = Cz^Du0; \ +\ + Cw = Asi0^Aki0^Abi1^Ami1^Agi1; \ + Do0 = Cw^ROL32(Cz, 1); \ + Cy = Asi1^Aki1^Abi0^Ami0^Agi0; \ + Do1 = Cy^Cx; \ +\ + Cx = Aba0^Ama0^Aga1^Asa1^Aka0; \ + De0 = Cx^ROL32(Cy, 1); \ + Cz = Aba1^Ama1^Aga0^Asa0^Aka1; \ + De1 = Cz^Cw; \ +\ + Cy = Ago1^Aso0^Ako0^Abo0^Amo1; \ + Di0 = Du0^ROL32(Cy, 1); \ + Cw = Ago0^Aso1^Ako1^Abo1^Amo0; \ + Di1 = Du1^Cw; \ +\ + Du0 = Cw^ROL32(Cz, 1); \ + Du1 = Cy^Cx; \ + +void KeccakP1600_Permute_Nrounds(void *state, unsigned int nRounds) +{ + { + UINT32 Da0, De0, Di0, Do0, Du0; + UINT32 Da1, De1, Di1, Do1, Du1; + UINT32 Ca0, Ce0, Ci0, Co0, Cu0; + UINT32 Cx, Cy, Cz, Cw; + #define Ba Ca0 + #define Be Ce0 + #define Bi Ci0 + #define Bo Co0 + #define Bu Cu0 + const UINT32 *pRoundConstants = KeccakF1600RoundConstants_int2+(24-nRounds)*2; + UINT32 *stateAsHalfLanes = (UINT32*)state; + #define Aba0 stateAsHalfLanes[ 0] + #define Aba1 stateAsHalfLanes[ 1] + #define Abe0 stateAsHalfLanes[ 2] + #define Abe1 stateAsHalfLanes[ 3] + #define Abi0 stateAsHalfLanes[ 4] + #define Abi1 stateAsHalfLanes[ 5] + #define Abo0 stateAsHalfLanes[ 6] + #define Abo1 stateAsHalfLanes[ 7] + #define Abu0 stateAsHalfLanes[ 8] + #define Abu1 stateAsHalfLanes[ 9] + #define Aga0 stateAsHalfLanes[10] + #define Aga1 stateAsHalfLanes[11] + #define Age0 stateAsHalfLanes[12] + #define Age1 stateAsHalfLanes[13] + #define Agi0 stateAsHalfLanes[14] + #define Agi1 stateAsHalfLanes[15] + #define Ago0 stateAsHalfLanes[16] + #define Ago1 stateAsHalfLanes[17] + #define Agu0 stateAsHalfLanes[18] + #define Agu1 stateAsHalfLanes[19] + #define Aka0 stateAsHalfLanes[20] + #define Aka1 stateAsHalfLanes[21] + #define Ake0 stateAsHalfLanes[22] + #define Ake1 stateAsHalfLanes[23] + #define Aki0 stateAsHalfLanes[24] + #define Aki1 stateAsHalfLanes[25] + #define Ako0 stateAsHalfLanes[26] + #define Ako1 stateAsHalfLanes[27] + #define Aku0 stateAsHalfLanes[28] + #define Aku1 stateAsHalfLanes[29] + #define Ama0 stateAsHalfLanes[30] + #define Ama1 stateAsHalfLanes[31] + #define Ame0 stateAsHalfLanes[32] + #define Ame1 stateAsHalfLanes[33] + #define Ami0 stateAsHalfLanes[34] + #define Ami1 stateAsHalfLanes[35] + #define Amo0 stateAsHalfLanes[36] + #define Amo1 stateAsHalfLanes[37] + #define Amu0 stateAsHalfLanes[38] + #define Amu1 stateAsHalfLanes[39] + #define Asa0 stateAsHalfLanes[40] + #define Asa1 stateAsHalfLanes[41] + #define Ase0 stateAsHalfLanes[42] + #define Ase1 stateAsHalfLanes[43] + #define Asi0 stateAsHalfLanes[44] + #define Asi1 stateAsHalfLanes[45] + #define Aso0 stateAsHalfLanes[46] + #define Aso1 stateAsHalfLanes[47] + #define Asu0 stateAsHalfLanes[48] + #define Asu1 stateAsHalfLanes[49] + + do + { + /* --- Code for 4 rounds */ + + /* --- using factor 2 interleaving, 64-bit lanes mapped to 32-bit words */ + + KeccakAtoD_round0(); + + Ba = (Aba0^Da0); + Be = ROL32((Age0^De0), 22); + Bi = ROL32((Aki1^Di1), 22); + Bo = ROL32((Amo1^Do1), 11); + Bu = ROL32((Asu0^Du0), 7); + Aba0 = Ba ^((~Be)& Bi ); + Aba0 ^= *(pRoundConstants++); + Age0 = Be ^((~Bi)& Bo ); + Aki1 = Bi ^((~Bo)& Bu ); + Amo1 = Bo ^((~Bu)& Ba ); + Asu0 = Bu ^((~Ba)& Be ); + + Ba = (Aba1^Da1); + Be = ROL32((Age1^De1), 22); + Bi = ROL32((Aki0^Di0), 21); + Bo = ROL32((Amo0^Do0), 10); + Bu = ROL32((Asu1^Du1), 7); + Aba1 = Ba ^((~Be)& Bi ); + Aba1 ^= *(pRoundConstants++); + Age1 = Be ^((~Bi)& Bo ); + Aki0 = Bi ^((~Bo)& Bu ); + Amo0 = Bo ^((~Bu)& Ba ); + Asu1 = Bu ^((~Ba)& Be ); + + Bi = ROL32((Aka1^Da1), 2); + Bo = ROL32((Ame1^De1), 23); + Bu = ROL32((Asi1^Di1), 31); + Ba = ROL32((Abo0^Do0), 14); + Be = ROL32((Agu0^Du0), 10); + Aka1 = Ba ^((~Be)& Bi ); + Ame1 = Be ^((~Bi)& Bo ); + Asi1 = Bi ^((~Bo)& Bu ); + Abo0 = Bo ^((~Bu)& Ba ); + Agu0 = Bu ^((~Ba)& Be ); + + Bi = ROL32((Aka0^Da0), 1); + Bo = ROL32((Ame0^De0), 22); + Bu = ROL32((Asi0^Di0), 30); + Ba = ROL32((Abo1^Do1), 14); + Be = ROL32((Agu1^Du1), 10); + Aka0 = Ba ^((~Be)& Bi ); + Ame0 = Be ^((~Bi)& Bo ); + Asi0 = Bi ^((~Bo)& Bu ); + Abo1 = Bo ^((~Bu)& Ba ); + Agu1 = Bu ^((~Ba)& Be ); + + Bu = ROL32((Asa0^Da0), 9); + Ba = ROL32((Abe1^De1), 1); + Be = ROL32((Agi0^Di0), 3); + Bi = ROL32((Ako1^Do1), 13); + Bo = ROL32((Amu0^Du0), 4); + Asa0 = Ba ^((~Be)& Bi ); + Abe1 = Be ^((~Bi)& Bo ); + Agi0 = Bi ^((~Bo)& Bu ); + Ako1 = Bo ^((~Bu)& Ba ); + Amu0 = Bu ^((~Ba)& Be ); + + Bu = ROL32((Asa1^Da1), 9); + Ba = (Abe0^De0); + Be = ROL32((Agi1^Di1), 3); + Bi = ROL32((Ako0^Do0), 12); + Bo = ROL32((Amu1^Du1), 4); + Asa1 = Ba ^((~Be)& Bi ); + Abe0 = Be ^((~Bi)& Bo ); + Agi1 = Bi ^((~Bo)& Bu ); + Ako0 = Bo ^((~Bu)& Ba ); + Amu1 = Bu ^((~Ba)& Be ); + + Be = ROL32((Aga0^Da0), 18); + Bi = ROL32((Ake0^De0), 5); + Bo = ROL32((Ami1^Di1), 8); + Bu = ROL32((Aso0^Do0), 28); + Ba = ROL32((Abu1^Du1), 14); + Aga0 = Ba ^((~Be)& Bi ); + Ake0 = Be ^((~Bi)& Bo ); + Ami1 = Bi ^((~Bo)& Bu ); + Aso0 = Bo ^((~Bu)& Ba ); + Abu1 = Bu ^((~Ba)& Be ); + + Be = ROL32((Aga1^Da1), 18); + Bi = ROL32((Ake1^De1), 5); + Bo = ROL32((Ami0^Di0), 7); + Bu = ROL32((Aso1^Do1), 28); + Ba = ROL32((Abu0^Du0), 13); + Aga1 = Ba ^((~Be)& Bi ); + Ake1 = Be ^((~Bi)& Bo ); + Ami0 = Bi ^((~Bo)& Bu ); + Aso1 = Bo ^((~Bu)& Ba ); + Abu0 = Bu ^((~Ba)& Be ); + + Bo = ROL32((Ama1^Da1), 21); + Bu = ROL32((Ase0^De0), 1); + Ba = ROL32((Abi0^Di0), 31); + Be = ROL32((Ago1^Do1), 28); + Bi = ROL32((Aku1^Du1), 20); + Ama1 = Ba ^((~Be)& Bi ); + Ase0 = Be ^((~Bi)& Bo ); + Abi0 = Bi ^((~Bo)& Bu ); + Ago1 = Bo ^((~Bu)& Ba ); + Aku1 = Bu ^((~Ba)& Be ); + + Bo = ROL32((Ama0^Da0), 20); + Bu = ROL32((Ase1^De1), 1); + Ba = ROL32((Abi1^Di1), 31); + Be = ROL32((Ago0^Do0), 27); + Bi = ROL32((Aku0^Du0), 19); + Ama0 = Ba ^((~Be)& Bi ); + Ase1 = Be ^((~Bi)& Bo ); + Abi1 = Bi ^((~Bo)& Bu ); + Ago0 = Bo ^((~Bu)& Ba ); + Aku0 = Bu ^((~Ba)& Be ); + + KeccakAtoD_round1(); + + Ba = (Aba0^Da0); + Be = ROL32((Ame1^De0), 22); + Bi = ROL32((Agi1^Di1), 22); + Bo = ROL32((Aso1^Do1), 11); + Bu = ROL32((Aku1^Du0), 7); + Aba0 = Ba ^((~Be)& Bi ); + Aba0 ^= *(pRoundConstants++); + Ame1 = Be ^((~Bi)& Bo ); + Agi1 = Bi ^((~Bo)& Bu ); + Aso1 = Bo ^((~Bu)& Ba ); + Aku1 = Bu ^((~Ba)& Be ); + + Ba = (Aba1^Da1); + Be = ROL32((Ame0^De1), 22); + Bi = ROL32((Agi0^Di0), 21); + Bo = ROL32((Aso0^Do0), 10); + Bu = ROL32((Aku0^Du1), 7); + Aba1 = Ba ^((~Be)& Bi ); + Aba1 ^= *(pRoundConstants++); + Ame0 = Be ^((~Bi)& Bo ); + Agi0 = Bi ^((~Bo)& Bu ); + Aso0 = Bo ^((~Bu)& Ba ); + Aku0 = Bu ^((~Ba)& Be ); + + Bi = ROL32((Asa1^Da1), 2); + Bo = ROL32((Ake1^De1), 23); + Bu = ROL32((Abi1^Di1), 31); + Ba = ROL32((Amo1^Do0), 14); + Be = ROL32((Agu0^Du0), 10); + Asa1 = Ba ^((~Be)& Bi ); + Ake1 = Be ^((~Bi)& Bo ); + Abi1 = Bi ^((~Bo)& Bu ); + Amo1 = Bo ^((~Bu)& Ba ); + Agu0 = Bu ^((~Ba)& Be ); + + Bi = ROL32((Asa0^Da0), 1); + Bo = ROL32((Ake0^De0), 22); + Bu = ROL32((Abi0^Di0), 30); + Ba = ROL32((Amo0^Do1), 14); + Be = ROL32((Agu1^Du1), 10); + Asa0 = Ba ^((~Be)& Bi ); + Ake0 = Be ^((~Bi)& Bo ); + Abi0 = Bi ^((~Bo)& Bu ); + Amo0 = Bo ^((~Bu)& Ba ); + Agu1 = Bu ^((~Ba)& Be ); + + Bu = ROL32((Ama1^Da0), 9); + Ba = ROL32((Age1^De1), 1); + Be = ROL32((Asi1^Di0), 3); + Bi = ROL32((Ako0^Do1), 13); + Bo = ROL32((Abu1^Du0), 4); + Ama1 = Ba ^((~Be)& Bi ); + Age1 = Be ^((~Bi)& Bo ); + Asi1 = Bi ^((~Bo)& Bu ); + Ako0 = Bo ^((~Bu)& Ba ); + Abu1 = Bu ^((~Ba)& Be ); + + Bu = ROL32((Ama0^Da1), 9); + Ba = (Age0^De0); + Be = ROL32((Asi0^Di1), 3); + Bi = ROL32((Ako1^Do0), 12); + Bo = ROL32((Abu0^Du1), 4); + Ama0 = Ba ^((~Be)& Bi ); + Age0 = Be ^((~Bi)& Bo ); + Asi0 = Bi ^((~Bo)& Bu ); + Ako1 = Bo ^((~Bu)& Ba ); + Abu0 = Bu ^((~Ba)& Be ); + + Be = ROL32((Aka1^Da0), 18); + Bi = ROL32((Abe1^De0), 5); + Bo = ROL32((Ami0^Di1), 8); + Bu = ROL32((Ago1^Do0), 28); + Ba = ROL32((Asu1^Du1), 14); + Aka1 = Ba ^((~Be)& Bi ); + Abe1 = Be ^((~Bi)& Bo ); + Ami0 = Bi ^((~Bo)& Bu ); + Ago1 = Bo ^((~Bu)& Ba ); + Asu1 = Bu ^((~Ba)& Be ); + + Be = ROL32((Aka0^Da1), 18); + Bi = ROL32((Abe0^De1), 5); + Bo = ROL32((Ami1^Di0), 7); + Bu = ROL32((Ago0^Do1), 28); + Ba = ROL32((Asu0^Du0), 13); + Aka0 = Ba ^((~Be)& Bi ); + Abe0 = Be ^((~Bi)& Bo ); + Ami1 = Bi ^((~Bo)& Bu ); + Ago0 = Bo ^((~Bu)& Ba ); + Asu0 = Bu ^((~Ba)& Be ); + + Bo = ROL32((Aga1^Da1), 21); + Bu = ROL32((Ase0^De0), 1); + Ba = ROL32((Aki1^Di0), 31); + Be = ROL32((Abo1^Do1), 28); + Bi = ROL32((Amu1^Du1), 20); + Aga1 = Ba ^((~Be)& Bi ); + Ase0 = Be ^((~Bi)& Bo ); + Aki1 = Bi ^((~Bo)& Bu ); + Abo1 = Bo ^((~Bu)& Ba ); + Amu1 = Bu ^((~Ba)& Be ); + + Bo = ROL32((Aga0^Da0), 20); + Bu = ROL32((Ase1^De1), 1); + Ba = ROL32((Aki0^Di1), 31); + Be = ROL32((Abo0^Do0), 27); + Bi = ROL32((Amu0^Du0), 19); + Aga0 = Ba ^((~Be)& Bi ); + Ase1 = Be ^((~Bi)& Bo ); + Aki0 = Bi ^((~Bo)& Bu ); + Abo0 = Bo ^((~Bu)& Ba ); + Amu0 = Bu ^((~Ba)& Be ); + + KeccakAtoD_round2(); + + Ba = (Aba0^Da0); + Be = ROL32((Ake1^De0), 22); + Bi = ROL32((Asi0^Di1), 22); + Bo = ROL32((Ago0^Do1), 11); + Bu = ROL32((Amu1^Du0), 7); + Aba0 = Ba ^((~Be)& Bi ); + Aba0 ^= *(pRoundConstants++); + Ake1 = Be ^((~Bi)& Bo ); + Asi0 = Bi ^((~Bo)& Bu ); + Ago0 = Bo ^((~Bu)& Ba ); + Amu1 = Bu ^((~Ba)& Be ); + + Ba = (Aba1^Da1); + Be = ROL32((Ake0^De1), 22); + Bi = ROL32((Asi1^Di0), 21); + Bo = ROL32((Ago1^Do0), 10); + Bu = ROL32((Amu0^Du1), 7); + Aba1 = Ba ^((~Be)& Bi ); + Aba1 ^= *(pRoundConstants++); + Ake0 = Be ^((~Bi)& Bo ); + Asi1 = Bi ^((~Bo)& Bu ); + Ago1 = Bo ^((~Bu)& Ba ); + Amu0 = Bu ^((~Ba)& Be ); + + Bi = ROL32((Ama0^Da1), 2); + Bo = ROL32((Abe0^De1), 23); + Bu = ROL32((Aki0^Di1), 31); + Ba = ROL32((Aso1^Do0), 14); + Be = ROL32((Agu0^Du0), 10); + Ama0 = Ba ^((~Be)& Bi ); + Abe0 = Be ^((~Bi)& Bo ); + Aki0 = Bi ^((~Bo)& Bu ); + Aso1 = Bo ^((~Bu)& Ba ); + Agu0 = Bu ^((~Ba)& Be ); + + Bi = ROL32((Ama1^Da0), 1); + Bo = ROL32((Abe1^De0), 22); + Bu = ROL32((Aki1^Di0), 30); + Ba = ROL32((Aso0^Do1), 14); + Be = ROL32((Agu1^Du1), 10); + Ama1 = Ba ^((~Be)& Bi ); + Abe1 = Be ^((~Bi)& Bo ); + Aki1 = Bi ^((~Bo)& Bu ); + Aso0 = Bo ^((~Bu)& Ba ); + Agu1 = Bu ^((~Ba)& Be ); + + Bu = ROL32((Aga1^Da0), 9); + Ba = ROL32((Ame0^De1), 1); + Be = ROL32((Abi1^Di0), 3); + Bi = ROL32((Ako1^Do1), 13); + Bo = ROL32((Asu1^Du0), 4); + Aga1 = Ba ^((~Be)& Bi ); + Ame0 = Be ^((~Bi)& Bo ); + Abi1 = Bi ^((~Bo)& Bu ); + Ako1 = Bo ^((~Bu)& Ba ); + Asu1 = Bu ^((~Ba)& Be ); + + Bu = ROL32((Aga0^Da1), 9); + Ba = (Ame1^De0); + Be = ROL32((Abi0^Di1), 3); + Bi = ROL32((Ako0^Do0), 12); + Bo = ROL32((Asu0^Du1), 4); + Aga0 = Ba ^((~Be)& Bi ); + Ame1 = Be ^((~Bi)& Bo ); + Abi0 = Bi ^((~Bo)& Bu ); + Ako0 = Bo ^((~Bu)& Ba ); + Asu0 = Bu ^((~Ba)& Be ); + + Be = ROL32((Asa1^Da0), 18); + Bi = ROL32((Age1^De0), 5); + Bo = ROL32((Ami1^Di1), 8); + Bu = ROL32((Abo1^Do0), 28); + Ba = ROL32((Aku0^Du1), 14); + Asa1 = Ba ^((~Be)& Bi ); + Age1 = Be ^((~Bi)& Bo ); + Ami1 = Bi ^((~Bo)& Bu ); + Abo1 = Bo ^((~Bu)& Ba ); + Aku0 = Bu ^((~Ba)& Be ); + + Be = ROL32((Asa0^Da1), 18); + Bi = ROL32((Age0^De1), 5); + Bo = ROL32((Ami0^Di0), 7); + Bu = ROL32((Abo0^Do1), 28); + Ba = ROL32((Aku1^Du0), 13); + Asa0 = Ba ^((~Be)& Bi ); + Age0 = Be ^((~Bi)& Bo ); + Ami0 = Bi ^((~Bo)& Bu ); + Abo0 = Bo ^((~Bu)& Ba ); + Aku1 = Bu ^((~Ba)& Be ); + + Bo = ROL32((Aka0^Da1), 21); + Bu = ROL32((Ase0^De0), 1); + Ba = ROL32((Agi1^Di0), 31); + Be = ROL32((Amo0^Do1), 28); + Bi = ROL32((Abu0^Du1), 20); + Aka0 = Ba ^((~Be)& Bi ); + Ase0 = Be ^((~Bi)& Bo ); + Agi1 = Bi ^((~Bo)& Bu ); + Amo0 = Bo ^((~Bu)& Ba ); + Abu0 = Bu ^((~Ba)& Be ); + + Bo = ROL32((Aka1^Da0), 20); + Bu = ROL32((Ase1^De1), 1); + Ba = ROL32((Agi0^Di1), 31); + Be = ROL32((Amo1^Do0), 27); + Bi = ROL32((Abu1^Du0), 19); + Aka1 = Ba ^((~Be)& Bi ); + Ase1 = Be ^((~Bi)& Bo ); + Agi0 = Bi ^((~Bo)& Bu ); + Amo1 = Bo ^((~Bu)& Ba ); + Abu1 = Bu ^((~Ba)& Be ); + + KeccakAtoD_round3(); + + Ba = (Aba0^Da0); + Be = ROL32((Abe0^De0), 22); + Bi = ROL32((Abi0^Di1), 22); + Bo = ROL32((Abo0^Do1), 11); + Bu = ROL32((Abu0^Du0), 7); + Aba0 = Ba ^((~Be)& Bi ); + Aba0 ^= *(pRoundConstants++); + Abe0 = Be ^((~Bi)& Bo ); + Abi0 = Bi ^((~Bo)& Bu ); + Abo0 = Bo ^((~Bu)& Ba ); + Abu0 = Bu ^((~Ba)& Be ); + + Ba = (Aba1^Da1); + Be = ROL32((Abe1^De1), 22); + Bi = ROL32((Abi1^Di0), 21); + Bo = ROL32((Abo1^Do0), 10); + Bu = ROL32((Abu1^Du1), 7); + Aba1 = Ba ^((~Be)& Bi ); + Aba1 ^= *(pRoundConstants++); + Abe1 = Be ^((~Bi)& Bo ); + Abi1 = Bi ^((~Bo)& Bu ); + Abo1 = Bo ^((~Bu)& Ba ); + Abu1 = Bu ^((~Ba)& Be ); + + Bi = ROL32((Aga0^Da1), 2); + Bo = ROL32((Age0^De1), 23); + Bu = ROL32((Agi0^Di1), 31); + Ba = ROL32((Ago0^Do0), 14); + Be = ROL32((Agu0^Du0), 10); + Aga0 = Ba ^((~Be)& Bi ); + Age0 = Be ^((~Bi)& Bo ); + Agi0 = Bi ^((~Bo)& Bu ); + Ago0 = Bo ^((~Bu)& Ba ); + Agu0 = Bu ^((~Ba)& Be ); + + Bi = ROL32((Aga1^Da0), 1); + Bo = ROL32((Age1^De0), 22); + Bu = ROL32((Agi1^Di0), 30); + Ba = ROL32((Ago1^Do1), 14); + Be = ROL32((Agu1^Du1), 10); + Aga1 = Ba ^((~Be)& Bi ); + Age1 = Be ^((~Bi)& Bo ); + Agi1 = Bi ^((~Bo)& Bu ); + Ago1 = Bo ^((~Bu)& Ba ); + Agu1 = Bu ^((~Ba)& Be ); + + Bu = ROL32((Aka0^Da0), 9); + Ba = ROL32((Ake0^De1), 1); + Be = ROL32((Aki0^Di0), 3); + Bi = ROL32((Ako0^Do1), 13); + Bo = ROL32((Aku0^Du0), 4); + Aka0 = Ba ^((~Be)& Bi ); + Ake0 = Be ^((~Bi)& Bo ); + Aki0 = Bi ^((~Bo)& Bu ); + Ako0 = Bo ^((~Bu)& Ba ); + Aku0 = Bu ^((~Ba)& Be ); + + Bu = ROL32((Aka1^Da1), 9); + Ba = (Ake1^De0); + Be = ROL32((Aki1^Di1), 3); + Bi = ROL32((Ako1^Do0), 12); + Bo = ROL32((Aku1^Du1), 4); + Aka1 = Ba ^((~Be)& Bi ); + Ake1 = Be ^((~Bi)& Bo ); + Aki1 = Bi ^((~Bo)& Bu ); + Ako1 = Bo ^((~Bu)& Ba ); + Aku1 = Bu ^((~Ba)& Be ); + + Be = ROL32((Ama0^Da0), 18); + Bi = ROL32((Ame0^De0), 5); + Bo = ROL32((Ami0^Di1), 8); + Bu = ROL32((Amo0^Do0), 28); + Ba = ROL32((Amu0^Du1), 14); + Ama0 = Ba ^((~Be)& Bi ); + Ame0 = Be ^((~Bi)& Bo ); + Ami0 = Bi ^((~Bo)& Bu ); + Amo0 = Bo ^((~Bu)& Ba ); + Amu0 = Bu ^((~Ba)& Be ); + + Be = ROL32((Ama1^Da1), 18); + Bi = ROL32((Ame1^De1), 5); + Bo = ROL32((Ami1^Di0), 7); + Bu = ROL32((Amo1^Do1), 28); + Ba = ROL32((Amu1^Du0), 13); + Ama1 = Ba ^((~Be)& Bi ); + Ame1 = Be ^((~Bi)& Bo ); + Ami1 = Bi ^((~Bo)& Bu ); + Amo1 = Bo ^((~Bu)& Ba ); + Amu1 = Bu ^((~Ba)& Be ); + + Bo = ROL32((Asa0^Da1), 21); + Bu = ROL32((Ase0^De0), 1); + Ba = ROL32((Asi0^Di0), 31); + Be = ROL32((Aso0^Do1), 28); + Bi = ROL32((Asu0^Du1), 20); + Asa0 = Ba ^((~Be)& Bi ); + Ase0 = Be ^((~Bi)& Bo ); + Asi0 = Bi ^((~Bo)& Bu ); + Aso0 = Bo ^((~Bu)& Ba ); + Asu0 = Bu ^((~Ba)& Be ); + + Bo = ROL32((Asa1^Da0), 20); + Bu = ROL32((Ase1^De1), 1); + Ba = ROL32((Asi1^Di1), 31); + Be = ROL32((Aso1^Do0), 27); + Bi = ROL32((Asu1^Du0), 19); + Asa1 = Ba ^((~Be)& Bi ); + Ase1 = Be ^((~Bi)& Bo ); + Asi1 = Bi ^((~Bo)& Bu ); + Aso1 = Bo ^((~Bu)& Ba ); + Asu1 = Bu ^((~Ba)& Be ); + } + while ( *pRoundConstants != 0xFF ); + + #undef Aba0 + #undef Aba1 + #undef Abe0 + #undef Abe1 + #undef Abi0 + #undef Abi1 + #undef Abo0 + #undef Abo1 + #undef Abu0 + #undef Abu1 + #undef Aga0 + #undef Aga1 + #undef Age0 + #undef Age1 + #undef Agi0 + #undef Agi1 + #undef Ago0 + #undef Ago1 + #undef Agu0 + #undef Agu1 + #undef Aka0 + #undef Aka1 + #undef Ake0 + #undef Ake1 + #undef Aki0 + #undef Aki1 + #undef Ako0 + #undef Ako1 + #undef Aku0 + #undef Aku1 + #undef Ama0 + #undef Ama1 + #undef Ame0 + #undef Ame1 + #undef Ami0 + #undef Ami1 + #undef Amo0 + #undef Amo1 + #undef Amu0 + #undef Amu1 + #undef Asa0 + #undef Asa1 + #undef Ase0 + #undef Ase1 + #undef Asi0 + #undef Asi1 + #undef Aso0 + #undef Aso1 + #undef Asu0 + #undef Asu1 + } +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_Permute_12rounds(void *state) +{ + KeccakP1600_Permute_Nrounds(state, 12); +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_Permute_24rounds(void *state) +{ + KeccakP1600_Permute_Nrounds(state, 24); +} diff --git a/Modules/_sha3/kcp/KeccakP-1600-opt64-config.h b/Modules/_sha3/kcp/KeccakP-1600-opt64-config.h new file mode 100644 index 0000000000..9501c64b18 --- /dev/null +++ b/Modules/_sha3/kcp/KeccakP-1600-opt64-config.h @@ -0,0 +1,3 @@ +#define KeccakP1600_implementation_config "lane complementing, all rounds unrolled" +#define KeccakP1600_fullUnrolling +#define KeccakP1600_useLaneComplementing diff --git a/Modules/_sha3/kcp/KeccakP-1600-opt64.c b/Modules/_sha3/kcp/KeccakP-1600-opt64.c new file mode 100644 index 0000000000..c90010dd92 --- /dev/null +++ b/Modules/_sha3/kcp/KeccakP-1600-opt64.c @@ -0,0 +1,474 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#include +#include +/* #include "brg_endian.h" */ +#include "KeccakP-1600-opt64-config.h" + +#if NOT_PYTHON +typedef unsigned char UINT8; +/* typedef unsigned long long int UINT64; */ +#endif + +#if defined(KeccakP1600_useLaneComplementing) +#define UseBebigokimisa +#endif + +#if defined(_MSC_VER) +#define ROL64(a, offset) _rotl64(a, offset) +#elif defined(KeccakP1600_useSHLD) + #define ROL64(x,N) ({ \ + register UINT64 __out; \ + register UINT64 __in = x; \ + __asm__ ("shld %2,%0,%0" : "=r"(__out) : "0"(__in), "i"(N)); \ + __out; \ + }) +#else +#define ROL64(a, offset) ((((UINT64)a) << offset) ^ (((UINT64)a) >> (64-offset))) +#endif + +#include "KeccakP-1600-64.macros" +#ifdef KeccakP1600_fullUnrolling +#define FullUnrolling +#else +#define Unrolling KeccakP1600_unrolling +#endif +#include "KeccakP-1600-unrolling.macros" +#include "SnP-Relaned.h" + +static const UINT64 KeccakF1600RoundConstants[24] = { + 0x0000000000000001ULL, + 0x0000000000008082ULL, + 0x800000000000808aULL, + 0x8000000080008000ULL, + 0x000000000000808bULL, + 0x0000000080000001ULL, + 0x8000000080008081ULL, + 0x8000000000008009ULL, + 0x000000000000008aULL, + 0x0000000000000088ULL, + 0x0000000080008009ULL, + 0x000000008000000aULL, + 0x000000008000808bULL, + 0x800000000000008bULL, + 0x8000000000008089ULL, + 0x8000000000008003ULL, + 0x8000000000008002ULL, + 0x8000000000000080ULL, + 0x000000000000800aULL, + 0x800000008000000aULL, + 0x8000000080008081ULL, + 0x8000000000008080ULL, + 0x0000000080000001ULL, + 0x8000000080008008ULL }; + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_Initialize(void *state) +{ + memset(state, 0, 200); +#ifdef KeccakP1600_useLaneComplementing + ((UINT64*)state)[ 1] = ~(UINT64)0; + ((UINT64*)state)[ 2] = ~(UINT64)0; + ((UINT64*)state)[ 8] = ~(UINT64)0; + ((UINT64*)state)[12] = ~(UINT64)0; + ((UINT64*)state)[17] = ~(UINT64)0; + ((UINT64*)state)[20] = ~(UINT64)0; +#endif +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_AddBytesInLane(void *state, unsigned int lanePosition, const unsigned char *data, unsigned int offset, unsigned int length) +{ +#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) + UINT64 lane; + if (length == 0) + return; + if (length == 1) + lane = data[0]; + else { + lane = 0; + memcpy(&lane, data, length); + } + lane <<= offset*8; +#else + UINT64 lane = 0; + unsigned int i; + for(i=0; i>= offset*8; + for(i=0; i>= 8; + } +#endif +} + +/* ---------------------------------------------------------------- */ + +#if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN) +void fromWordToBytes(UINT8 *bytes, const UINT64 word) +{ + unsigned int i; + + for(i=0; i<(64/8); i++) + bytes[i] = (word >> (8*i)) & 0xFF; +} +#endif + +void KeccakP1600_ExtractLanes(const void *state, unsigned char *data, unsigned int laneCount) +{ +#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) + memcpy(data, state, laneCount*8); +#else + unsigned int i; + + for(i=0; i 1) { + ((UINT64*)data)[ 1] = ~((UINT64*)data)[ 1]; + if (laneCount > 2) { + ((UINT64*)data)[ 2] = ~((UINT64*)data)[ 2]; + if (laneCount > 8) { + ((UINT64*)data)[ 8] = ~((UINT64*)data)[ 8]; + if (laneCount > 12) { + ((UINT64*)data)[12] = ~((UINT64*)data)[12]; + if (laneCount > 17) { + ((UINT64*)data)[17] = ~((UINT64*)data)[17]; + if (laneCount > 20) { + ((UINT64*)data)[20] = ~((UINT64*)data)[20]; + } + } + } + } + } + } +#endif +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length) +{ + SnP_ExtractBytes(state, data, offset, length, KeccakP1600_ExtractLanes, KeccakP1600_ExtractBytesInLane, 8); +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_ExtractAndAddBytesInLane(const void *state, unsigned int lanePosition, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length) +{ + UINT64 lane = ((UINT64*)state)[lanePosition]; +#ifdef KeccakP1600_useLaneComplementing + if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20)) + lane = ~lane; +#endif +#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) + { + unsigned int i; + UINT64 lane1[1]; + lane1[0] = lane; + for(i=0; i>= offset*8; + for(i=0; i>= 8; + } +#endif +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_ExtractAndAddLanes(const void *state, const unsigned char *input, unsigned char *output, unsigned int laneCount) +{ + unsigned int i; +#if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN) + unsigned char temp[8]; + unsigned int j; +#endif + + for(i=0; i 1) { + ((UINT64*)output)[ 1] = ~((UINT64*)output)[ 1]; + if (laneCount > 2) { + ((UINT64*)output)[ 2] = ~((UINT64*)output)[ 2]; + if (laneCount > 8) { + ((UINT64*)output)[ 8] = ~((UINT64*)output)[ 8]; + if (laneCount > 12) { + ((UINT64*)output)[12] = ~((UINT64*)output)[12]; + if (laneCount > 17) { + ((UINT64*)output)[17] = ~((UINT64*)output)[17]; + if (laneCount > 20) { + ((UINT64*)output)[20] = ~((UINT64*)output)[20]; + } + } + } + } + } + } +#endif +} + +/* ---------------------------------------------------------------- */ + +void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length) +{ + SnP_ExtractAndAddBytes(state, input, output, offset, length, KeccakP1600_ExtractAndAddLanes, KeccakP1600_ExtractAndAddBytesInLane, 8); +} + +/* ---------------------------------------------------------------- */ + +size_t KeccakF1600_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen) +{ + size_t originalDataByteLen = dataByteLen; + declareABCDE + #ifndef KeccakP1600_fullUnrolling + unsigned int i; + #endif + UINT64 *stateAsLanes = (UINT64*)state; + UINT64 *inDataAsLanes = (UINT64*)data; + + copyFromState(A, stateAsLanes) + while(dataByteLen >= laneCount*8) { + addInput(A, inDataAsLanes, laneCount) + rounds24 + inDataAsLanes += laneCount; + dataByteLen -= laneCount*8; + } + copyToState(stateAsLanes, A) + return originalDataByteLen - dataByteLen; +} diff --git a/Modules/_sha3/kcp/KeccakP-1600-unrolling.macros b/Modules/_sha3/kcp/KeccakP-1600-unrolling.macros new file mode 100644 index 0000000000..405ce29724 --- /dev/null +++ b/Modules/_sha3/kcp/KeccakP-1600-unrolling.macros @@ -0,0 +1,185 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#if (defined(FullUnrolling)) +#define rounds24 \ + prepareTheta \ + thetaRhoPiChiIotaPrepareTheta( 0, A, E) \ + thetaRhoPiChiIotaPrepareTheta( 1, E, A) \ + thetaRhoPiChiIotaPrepareTheta( 2, A, E) \ + thetaRhoPiChiIotaPrepareTheta( 3, E, A) \ + thetaRhoPiChiIotaPrepareTheta( 4, A, E) \ + thetaRhoPiChiIotaPrepareTheta( 5, E, A) \ + thetaRhoPiChiIotaPrepareTheta( 6, A, E) \ + thetaRhoPiChiIotaPrepareTheta( 7, E, A) \ + thetaRhoPiChiIotaPrepareTheta( 8, A, E) \ + thetaRhoPiChiIotaPrepareTheta( 9, E, A) \ + thetaRhoPiChiIotaPrepareTheta(10, A, E) \ + thetaRhoPiChiIotaPrepareTheta(11, E, A) \ + thetaRhoPiChiIotaPrepareTheta(12, A, E) \ + thetaRhoPiChiIotaPrepareTheta(13, E, A) \ + thetaRhoPiChiIotaPrepareTheta(14, A, E) \ + thetaRhoPiChiIotaPrepareTheta(15, E, A) \ + thetaRhoPiChiIotaPrepareTheta(16, A, E) \ + thetaRhoPiChiIotaPrepareTheta(17, E, A) \ + thetaRhoPiChiIotaPrepareTheta(18, A, E) \ + thetaRhoPiChiIotaPrepareTheta(19, E, A) \ + thetaRhoPiChiIotaPrepareTheta(20, A, E) \ + thetaRhoPiChiIotaPrepareTheta(21, E, A) \ + thetaRhoPiChiIotaPrepareTheta(22, A, E) \ + thetaRhoPiChiIota(23, E, A) \ + +#define rounds12 \ + prepareTheta \ + thetaRhoPiChiIotaPrepareTheta(12, A, E) \ + thetaRhoPiChiIotaPrepareTheta(13, E, A) \ + thetaRhoPiChiIotaPrepareTheta(14, A, E) \ + thetaRhoPiChiIotaPrepareTheta(15, E, A) \ + thetaRhoPiChiIotaPrepareTheta(16, A, E) \ + thetaRhoPiChiIotaPrepareTheta(17, E, A) \ + thetaRhoPiChiIotaPrepareTheta(18, A, E) \ + thetaRhoPiChiIotaPrepareTheta(19, E, A) \ + thetaRhoPiChiIotaPrepareTheta(20, A, E) \ + thetaRhoPiChiIotaPrepareTheta(21, E, A) \ + thetaRhoPiChiIotaPrepareTheta(22, A, E) \ + thetaRhoPiChiIota(23, E, A) \ + +#elif (Unrolling == 12) +#define rounds24 \ + prepareTheta \ + for(i=0; i<24; i+=12) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+ 1, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+ 2, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+ 3, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+ 4, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+ 5, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+ 6, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+ 7, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+ 8, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+ 9, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+10, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+11, E, A) \ + } \ + +#define rounds12 \ + prepareTheta \ + thetaRhoPiChiIotaPrepareTheta(12, A, E) \ + thetaRhoPiChiIotaPrepareTheta(13, E, A) \ + thetaRhoPiChiIotaPrepareTheta(14, A, E) \ + thetaRhoPiChiIotaPrepareTheta(15, E, A) \ + thetaRhoPiChiIotaPrepareTheta(16, A, E) \ + thetaRhoPiChiIotaPrepareTheta(17, E, A) \ + thetaRhoPiChiIotaPrepareTheta(18, A, E) \ + thetaRhoPiChiIotaPrepareTheta(19, E, A) \ + thetaRhoPiChiIotaPrepareTheta(20, A, E) \ + thetaRhoPiChiIotaPrepareTheta(21, E, A) \ + thetaRhoPiChiIotaPrepareTheta(22, A, E) \ + thetaRhoPiChiIota(23, E, A) \ + +#elif (Unrolling == 6) +#define rounds24 \ + prepareTheta \ + for(i=0; i<24; i+=6) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+3, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+4, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+5, E, A) \ + } \ + +#define rounds12 \ + prepareTheta \ + for(i=12; i<24; i+=6) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+3, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+4, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+5, E, A) \ + } \ + +#elif (Unrolling == 4) +#define rounds24 \ + prepareTheta \ + for(i=0; i<24; i+=4) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+3, E, A) \ + } \ + +#define rounds12 \ + prepareTheta \ + for(i=12; i<24; i+=4) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+3, E, A) \ + } \ + +#elif (Unrolling == 3) +#define rounds24 \ + prepareTheta \ + for(i=0; i<24; i+=3) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ + copyStateVariables(A, E) \ + } \ + +#define rounds12 \ + prepareTheta \ + for(i=12; i<24; i+=3) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ + thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ + copyStateVariables(A, E) \ + } \ + +#elif (Unrolling == 2) +#define rounds24 \ + prepareTheta \ + for(i=0; i<24; i+=2) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ + } \ + +#define rounds12 \ + prepareTheta \ + for(i=12; i<24; i+=2) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ + } \ + +#elif (Unrolling == 1) +#define rounds24 \ + prepareTheta \ + for(i=0; i<24; i++) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + copyStateVariables(A, E) \ + } \ + +#define rounds12 \ + prepareTheta \ + for(i=12; i<24; i++) { \ + thetaRhoPiChiIotaPrepareTheta(i , A, E) \ + copyStateVariables(A, E) \ + } \ + +#else +#error "Unrolling is not correctly specified!" +#endif diff --git a/Modules/_sha3/kcp/KeccakSponge.c b/Modules/_sha3/kcp/KeccakSponge.c new file mode 100644 index 0000000000..afdb73172f --- /dev/null +++ b/Modules/_sha3/kcp/KeccakSponge.c @@ -0,0 +1,92 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#include "KeccakSponge.h" + +#ifdef KeccakReference + #include "displayIntermediateValues.h" +#endif + +#ifndef KeccakP200_excluded + #include "KeccakP-200-SnP.h" + + #define prefix KeccakWidth200 + #define SnP KeccakP200 + #define SnP_width 200 + #define SnP_Permute KeccakP200_Permute_18rounds + #if defined(KeccakF200_FastLoop_supported) + #define SnP_FastLoop_Absorb KeccakF200_FastLoop_Absorb + #endif + #include "KeccakSponge.inc" + #undef prefix + #undef SnP + #undef SnP_width + #undef SnP_Permute + #undef SnP_FastLoop_Absorb +#endif + +#ifndef KeccakP400_excluded + #include "KeccakP-400-SnP.h" + + #define prefix KeccakWidth400 + #define SnP KeccakP400 + #define SnP_width 400 + #define SnP_Permute KeccakP400_Permute_20rounds + #if defined(KeccakF400_FastLoop_supported) + #define SnP_FastLoop_Absorb KeccakF400_FastLoop_Absorb + #endif + #include "KeccakSponge.inc" + #undef prefix + #undef SnP + #undef SnP_width + #undef SnP_Permute + #undef SnP_FastLoop_Absorb +#endif + +#ifndef KeccakP800_excluded + #include "KeccakP-800-SnP.h" + + #define prefix KeccakWidth800 + #define SnP KeccakP800 + #define SnP_width 800 + #define SnP_Permute KeccakP800_Permute_22rounds + #if defined(KeccakF800_FastLoop_supported) + #define SnP_FastLoop_Absorb KeccakF800_FastLoop_Absorb + #endif + #include "KeccakSponge.inc" + #undef prefix + #undef SnP + #undef SnP_width + #undef SnP_Permute + #undef SnP_FastLoop_Absorb +#endif + +#ifndef KeccakP1600_excluded + #include "KeccakP-1600-SnP.h" + + #define prefix KeccakWidth1600 + #define SnP KeccakP1600 + #define SnP_width 1600 + #define SnP_Permute KeccakP1600_Permute_24rounds + #if defined(KeccakF1600_FastLoop_supported) + #define SnP_FastLoop_Absorb KeccakF1600_FastLoop_Absorb + #endif + #include "KeccakSponge.inc" + #undef prefix + #undef SnP + #undef SnP_width + #undef SnP_Permute + #undef SnP_FastLoop_Absorb +#endif diff --git a/Modules/_sha3/kcp/KeccakSponge.h b/Modules/_sha3/kcp/KeccakSponge.h new file mode 100644 index 0000000000..0f4badcac0 --- /dev/null +++ b/Modules/_sha3/kcp/KeccakSponge.h @@ -0,0 +1,172 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#ifndef _KeccakSponge_h_ +#define _KeccakSponge_h_ + +/** General information + * + * The following type and functions are not actually implemented. Their + * documentation is generic, with the prefix Prefix replaced by + * - KeccakWidth200 for a sponge function based on Keccak-f[200] + * - KeccakWidth400 for a sponge function based on Keccak-f[400] + * - KeccakWidth800 for a sponge function based on Keccak-f[800] + * - KeccakWidth1600 for a sponge function based on Keccak-f[1600] + * + * In all these functions, the rate and capacity must sum to the width of the + * chosen permutation. For instance, to use the sponge function + * Keccak[r=1344, c=256], one must use KeccakWidth1600_Sponge() or a combination + * of KeccakWidth1600_SpongeInitialize(), KeccakWidth1600_SpongeAbsorb(), + * KeccakWidth1600_SpongeAbsorbLastFewBits() and + * KeccakWidth1600_SpongeSqueeze(). + * + * The Prefix_SpongeInstance contains the sponge instance attributes for use + * with the Prefix_Sponge* functions. + * It gathers the state processed by the permutation as well as the rate, + * the position of input/output bytes in the state and the phase + * (absorbing or squeezing). + */ + +#ifdef DontReallyInclude_DocumentationOnly +/** Function to evaluate the sponge function Keccak[r, c] in a single call. + * @param rate The value of the rate r. + * @param capacity The value of the capacity c. + * @param input Pointer to the input message (before the suffix). + * @param inputByteLen The length of the input message in bytes. + * @param suffix Byte containing from 0 to 7 suffix bits + * that must be absorbed after @a input. + * These n bits must be in the least significant bit positions. + * These bits must be delimited with a bit 1 at position n + * (counting from 0=LSB to 7=MSB) and followed by bits 0 + * from position n+1 to position 7. + * Some examples: + * - If no bits are to be absorbed, then @a suffix must be 0x01. + * - If the 2-bit sequence 0,0 is to be absorbed, @a suffix must be 0x04. + * - If the 5-bit sequence 0,1,0,0,1 is to be absorbed, @a suffix must be 0x32. + * - If the 7-bit sequence 1,1,0,1,0,0,0 is to be absorbed, @a suffix must be 0x8B. + * . + * @param output Pointer to the output buffer. + * @param outputByteLen The desired number of output bytes. + * @pre One must have r+c equal to the supported width of this implementation + * and the rate a multiple of 8 bits (one byte) in this implementation. + * @pre @a suffix ≠ 0x00 + * @return Zero if successful, 1 otherwise. + */ +int Prefix_Sponge(unsigned int rate, unsigned int capacity, const unsigned char *input, size_t inputByteLen, unsigned char suffix, unsigned char *output, size_t outputByteLen); + +/** + * Function to initialize the state of the Keccak[r, c] sponge function. + * The phase of the sponge function is set to absorbing. + * @param spongeInstance Pointer to the sponge instance to be initialized. + * @param rate The value of the rate r. + * @param capacity The value of the capacity c. + * @pre One must have r+c equal to the supported width of this implementation + * and the rate a multiple of 8 bits (one byte) in this implementation. + * @return Zero if successful, 1 otherwise. + */ +int Prefix_SpongeInitialize(Prefix_SpongeInstance *spongeInstance, unsigned int rate, unsigned int capacity); + +/** + * Function to give input data bytes for the sponge function to absorb. + * @param spongeInstance Pointer to the sponge instance initialized by Prefix_SpongeInitialize(). + * @param data Pointer to the input data. + * @param dataByteLen The number of input bytes provided in the input data. + * @pre The sponge function must be in the absorbing phase, + * i.e., Prefix_SpongeSqueeze() or Prefix_SpongeAbsorbLastFewBits() + * must not have been called before. + * @return Zero if successful, 1 otherwise. + */ +int Prefix_SpongeAbsorb(Prefix_SpongeInstance *spongeInstance, const unsigned char *data, size_t dataByteLen); + +/** + * Function to give input data bits for the sponge function to absorb + * and then to switch to the squeezing phase. + * @param spongeInstance Pointer to the sponge instance initialized by Prefix_SpongeInitialize(). + * @param delimitedData Byte containing from 0 to 7 trailing bits + * that must be absorbed. + * These n bits must be in the least significant bit positions. + * These bits must be delimited with a bit 1 at position n + * (counting from 0=LSB to 7=MSB) and followed by bits 0 + * from position n+1 to position 7. + * Some examples: + * - If no bits are to be absorbed, then @a delimitedData must be 0x01. + * - If the 2-bit sequence 0,0 is to be absorbed, @a delimitedData must be 0x04. + * - If the 5-bit sequence 0,1,0,0,1 is to be absorbed, @a delimitedData must be 0x32. + * - If the 7-bit sequence 1,1,0,1,0,0,0 is to be absorbed, @a delimitedData must be 0x8B. + * . + * @pre The sponge function must be in the absorbing phase, + * i.e., Prefix_SpongeSqueeze() or Prefix_SpongeAbsorbLastFewBits() + * must not have been called before. + * @pre @a delimitedData ≠ 0x00 + * @return Zero if successful, 1 otherwise. + */ +int Prefix_SpongeAbsorbLastFewBits(Prefix_SpongeInstance *spongeInstance, unsigned char delimitedData); + +/** + * Function to squeeze output data from the sponge function. + * If the sponge function was in the absorbing phase, this function + * switches it to the squeezing phase + * as if Prefix_SpongeAbsorbLastFewBits(spongeInstance, 0x01) was called. + * @param spongeInstance Pointer to the sponge instance initialized by Prefix_SpongeInitialize(). + * @param data Pointer to the buffer where to store the output data. + * @param dataByteLen The number of output bytes desired. + * @return Zero if successful, 1 otherwise. + */ +int Prefix_SpongeSqueeze(Prefix_SpongeInstance *spongeInstance, unsigned char *data, size_t dataByteLen); +#endif + +#include +#include "align.h" + +#define KCP_DeclareSpongeStructure(prefix, size, alignment) \ + ALIGN(alignment) typedef struct prefix##_SpongeInstanceStruct { \ + unsigned char state[size]; \ + unsigned int rate; \ + unsigned int byteIOIndex; \ + int squeezing; \ + } prefix##_SpongeInstance; + +#define KCP_DeclareSpongeFunctions(prefix) \ + int prefix##_Sponge(unsigned int rate, unsigned int capacity, const unsigned char *input, size_t inputByteLen, unsigned char suffix, unsigned char *output, size_t outputByteLen); \ + int prefix##_SpongeInitialize(prefix##_SpongeInstance *spongeInstance, unsigned int rate, unsigned int capacity); \ + int prefix##_SpongeAbsorb(prefix##_SpongeInstance *spongeInstance, const unsigned char *data, size_t dataByteLen); \ + int prefix##_SpongeAbsorbLastFewBits(prefix##_SpongeInstance *spongeInstance, unsigned char delimitedData); \ + int prefix##_SpongeSqueeze(prefix##_SpongeInstance *spongeInstance, unsigned char *data, size_t dataByteLen); + +#ifndef KeccakP200_excluded + #include "KeccakP-200-SnP.h" + KCP_DeclareSpongeStructure(KeccakWidth200, KeccakP200_stateSizeInBytes, KeccakP200_stateAlignment) + KCP_DeclareSpongeFunctions(KeccakWidth200) +#endif + +#ifndef KeccakP400_excluded + #include "KeccakP-400-SnP.h" + KCP_DeclareSpongeStructure(KeccakWidth400, KeccakP400_stateSizeInBytes, KeccakP400_stateAlignment) + KCP_DeclareSpongeFunctions(KeccakWidth400) +#endif + +#ifndef KeccakP800_excluded + #include "KeccakP-800-SnP.h" + KCP_DeclareSpongeStructure(KeccakWidth800, KeccakP800_stateSizeInBytes, KeccakP800_stateAlignment) + KCP_DeclareSpongeFunctions(KeccakWidth800) +#endif + +#ifndef KeccakP1600_excluded + #include "KeccakP-1600-SnP.h" + KCP_DeclareSpongeStructure(KeccakWidth1600, KeccakP1600_stateSizeInBytes, KeccakP1600_stateAlignment) + KCP_DeclareSpongeFunctions(KeccakWidth1600) +#endif + +#endif diff --git a/Modules/_sha3/kcp/KeccakSponge.inc b/Modules/_sha3/kcp/KeccakSponge.inc new file mode 100644 index 0000000000..e10739deaf --- /dev/null +++ b/Modules/_sha3/kcp/KeccakSponge.inc @@ -0,0 +1,332 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#define JOIN0(a, b) a ## b +#define JOIN(a, b) JOIN0(a, b) + +#define Sponge JOIN(prefix, _Sponge) +#define SpongeInstance JOIN(prefix, _SpongeInstance) +#define SpongeInitialize JOIN(prefix, _SpongeInitialize) +#define SpongeAbsorb JOIN(prefix, _SpongeAbsorb) +#define SpongeAbsorbLastFewBits JOIN(prefix, _SpongeAbsorbLastFewBits) +#define SpongeSqueeze JOIN(prefix, _SpongeSqueeze) + +#define SnP_stateSizeInBytes JOIN(SnP, _stateSizeInBytes) +#define SnP_stateAlignment JOIN(SnP, _stateAlignment) +#define SnP_StaticInitialize JOIN(SnP, _StaticInitialize) +#define SnP_Initialize JOIN(SnP, _Initialize) +#define SnP_AddByte JOIN(SnP, _AddByte) +#define SnP_AddBytes JOIN(SnP, _AddBytes) +#define SnP_ExtractBytes JOIN(SnP, _ExtractBytes) + +int Sponge(unsigned int rate, unsigned int capacity, const unsigned char *input, size_t inputByteLen, unsigned char suffix, unsigned char *output, size_t outputByteLen) +{ + ALIGN(SnP_stateAlignment) unsigned char state[SnP_stateSizeInBytes]; + unsigned int partialBlock; + const unsigned char *curInput = input; + unsigned char *curOutput = output; + unsigned int rateInBytes = rate/8; + + if (rate+capacity != SnP_width) + return 1; + if ((rate <= 0) || (rate > SnP_width) || ((rate % 8) != 0)) + return 1; + if (suffix == 0) + return 1; + + /* Initialize the state */ + + SnP_StaticInitialize(); + SnP_Initialize(state); + + /* First, absorb whole blocks */ + +#ifdef SnP_FastLoop_Absorb + if (((rateInBytes % (SnP_width/200)) == 0) && (inputByteLen >= rateInBytes)) { + /* fast lane: whole lane rate */ + + size_t j; + j = SnP_FastLoop_Absorb(state, rateInBytes/(SnP_width/200), curInput, inputByteLen); + curInput += j; + inputByteLen -= j; + } +#endif + while(inputByteLen >= (size_t)rateInBytes) { + #ifdef KeccakReference + displayBytes(1, "Block to be absorbed", curInput, rateInBytes); + #endif + SnP_AddBytes(state, curInput, 0, rateInBytes); + SnP_Permute(state); + curInput += rateInBytes; + inputByteLen -= rateInBytes; + } + + /* Then, absorb what remains */ + + partialBlock = (unsigned int)inputByteLen; + #ifdef KeccakReference + displayBytes(1, "Block to be absorbed (part)", curInput, partialBlock); + #endif + SnP_AddBytes(state, curInput, 0, partialBlock); + + /* Finally, absorb the suffix */ + + #ifdef KeccakReference + { + unsigned char delimitedData1[1]; + delimitedData1[0] = suffix; + displayBytes(1, "Block to be absorbed (last few bits + first bit of padding)", delimitedData1, 1); + } + #endif + /* Last few bits, whose delimiter coincides with first bit of padding */ + + SnP_AddByte(state, suffix, partialBlock); + /* If the first bit of padding is at position rate-1, we need a whole new block for the second bit of padding */ + + if ((suffix >= 0x80) && (partialBlock == (rateInBytes-1))) + SnP_Permute(state); + /* Second bit of padding */ + + SnP_AddByte(state, 0x80, rateInBytes-1); + #ifdef KeccakReference + { + unsigned char block[SnP_width/8]; + memset(block, 0, SnP_width/8); + block[rateInBytes-1] = 0x80; + displayBytes(1, "Second bit of padding", block, rateInBytes); + } + #endif + SnP_Permute(state); + #ifdef KeccakReference + displayText(1, "--- Switching to squeezing phase ---"); + #endif + + /* First, output whole blocks */ + + while(outputByteLen > (size_t)rateInBytes) { + SnP_ExtractBytes(state, curOutput, 0, rateInBytes); + SnP_Permute(state); + #ifdef KeccakReference + displayBytes(1, "Squeezed block", curOutput, rateInBytes); + #endif + curOutput += rateInBytes; + outputByteLen -= rateInBytes; + } + + /* Finally, output what remains */ + + partialBlock = (unsigned int)outputByteLen; + SnP_ExtractBytes(state, curOutput, 0, partialBlock); + #ifdef KeccakReference + displayBytes(1, "Squeezed block (part)", curOutput, partialBlock); + #endif + + return 0; +} + +/* ---------------------------------------------------------------- */ +/* ---------------------------------------------------------------- */ +/* ---------------------------------------------------------------- */ + +int SpongeInitialize(SpongeInstance *instance, unsigned int rate, unsigned int capacity) +{ + if (rate+capacity != SnP_width) + return 1; + if ((rate <= 0) || (rate > SnP_width) || ((rate % 8) != 0)) + return 1; + SnP_StaticInitialize(); + SnP_Initialize(instance->state); + instance->rate = rate; + instance->byteIOIndex = 0; + instance->squeezing = 0; + + return 0; +} + +/* ---------------------------------------------------------------- */ + +int SpongeAbsorb(SpongeInstance *instance, const unsigned char *data, size_t dataByteLen) +{ + size_t i, j; + unsigned int partialBlock; + const unsigned char *curData; + unsigned int rateInBytes = instance->rate/8; + + if (instance->squeezing) + return 1; /* Too late for additional input */ + + + i = 0; + curData = data; + while(i < dataByteLen) { + if ((instance->byteIOIndex == 0) && (dataByteLen >= (i + rateInBytes))) { +#ifdef SnP_FastLoop_Absorb + /* processing full blocks first */ + + if ((rateInBytes % (SnP_width/200)) == 0) { + /* fast lane: whole lane rate */ + + j = SnP_FastLoop_Absorb(instance->state, rateInBytes/(SnP_width/200), curData, dataByteLen - i); + i += j; + curData += j; + } + else { +#endif + for(j=dataByteLen-i; j>=rateInBytes; j-=rateInBytes) { + #ifdef KeccakReference + displayBytes(1, "Block to be absorbed", curData, rateInBytes); + #endif + SnP_AddBytes(instance->state, curData, 0, rateInBytes); + SnP_Permute(instance->state); + curData+=rateInBytes; + } + i = dataByteLen - j; +#ifdef SnP_FastLoop_Absorb + } +#endif + } + else { + /* normal lane: using the message queue */ + + partialBlock = (unsigned int)(dataByteLen - i); + if (partialBlock+instance->byteIOIndex > rateInBytes) + partialBlock = rateInBytes-instance->byteIOIndex; + #ifdef KeccakReference + displayBytes(1, "Block to be absorbed (part)", curData, partialBlock); + #endif + i += partialBlock; + + SnP_AddBytes(instance->state, curData, instance->byteIOIndex, partialBlock); + curData += partialBlock; + instance->byteIOIndex += partialBlock; + if (instance->byteIOIndex == rateInBytes) { + SnP_Permute(instance->state); + instance->byteIOIndex = 0; + } + } + } + return 0; +} + +/* ---------------------------------------------------------------- */ + +int SpongeAbsorbLastFewBits(SpongeInstance *instance, unsigned char delimitedData) +{ + unsigned int rateInBytes = instance->rate/8; + + if (delimitedData == 0) + return 1; + if (instance->squeezing) + return 1; /* Too late for additional input */ + + + #ifdef KeccakReference + { + unsigned char delimitedData1[1]; + delimitedData1[0] = delimitedData; + displayBytes(1, "Block to be absorbed (last few bits + first bit of padding)", delimitedData1, 1); + } + #endif + /* Last few bits, whose delimiter coincides with first bit of padding */ + + SnP_AddByte(instance->state, delimitedData, instance->byteIOIndex); + /* If the first bit of padding is at position rate-1, we need a whole new block for the second bit of padding */ + + if ((delimitedData >= 0x80) && (instance->byteIOIndex == (rateInBytes-1))) + SnP_Permute(instance->state); + /* Second bit of padding */ + + SnP_AddByte(instance->state, 0x80, rateInBytes-1); + #ifdef KeccakReference + { + unsigned char block[SnP_width/8]; + memset(block, 0, SnP_width/8); + block[rateInBytes-1] = 0x80; + displayBytes(1, "Second bit of padding", block, rateInBytes); + } + #endif + SnP_Permute(instance->state); + instance->byteIOIndex = 0; + instance->squeezing = 1; + #ifdef KeccakReference + displayText(1, "--- Switching to squeezing phase ---"); + #endif + return 0; +} + +/* ---------------------------------------------------------------- */ + +int SpongeSqueeze(SpongeInstance *instance, unsigned char *data, size_t dataByteLen) +{ + size_t i, j; + unsigned int partialBlock; + unsigned int rateInBytes = instance->rate/8; + unsigned char *curData; + + if (!instance->squeezing) + SpongeAbsorbLastFewBits(instance, 0x01); + + i = 0; + curData = data; + while(i < dataByteLen) { + if ((instance->byteIOIndex == rateInBytes) && (dataByteLen >= (i + rateInBytes))) { + for(j=dataByteLen-i; j>=rateInBytes; j-=rateInBytes) { + SnP_Permute(instance->state); + SnP_ExtractBytes(instance->state, curData, 0, rateInBytes); + #ifdef KeccakReference + displayBytes(1, "Squeezed block", curData, rateInBytes); + #endif + curData+=rateInBytes; + } + i = dataByteLen - j; + } + else { + /* normal lane: using the message queue */ + + if (instance->byteIOIndex == rateInBytes) { + SnP_Permute(instance->state); + instance->byteIOIndex = 0; + } + partialBlock = (unsigned int)(dataByteLen - i); + if (partialBlock+instance->byteIOIndex > rateInBytes) + partialBlock = rateInBytes-instance->byteIOIndex; + i += partialBlock; + + SnP_ExtractBytes(instance->state, curData, instance->byteIOIndex, partialBlock); + #ifdef KeccakReference + displayBytes(1, "Squeezed block (part)", curData, partialBlock); + #endif + curData += partialBlock; + instance->byteIOIndex += partialBlock; + } + } + return 0; +} + +/* ---------------------------------------------------------------- */ + +#undef Sponge +#undef SpongeInstance +#undef SpongeInitialize +#undef SpongeAbsorb +#undef SpongeAbsorbLastFewBits +#undef SpongeSqueeze +#undef SnP_stateSizeInBytes +#undef SnP_stateAlignment +#undef SnP_StaticInitialize +#undef SnP_Initialize +#undef SnP_AddByte +#undef SnP_AddBytes +#undef SnP_ExtractBytes diff --git a/Modules/_sha3/kcp/PlSnP-Fallback.inc b/Modules/_sha3/kcp/PlSnP-Fallback.inc new file mode 100644 index 0000000000..3a9119ab4b --- /dev/null +++ b/Modules/_sha3/kcp/PlSnP-Fallback.inc @@ -0,0 +1,257 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +/* expect PlSnP_baseParallelism, PlSnP_targetParallelism */ + +/* expect SnP_stateSizeInBytes, SnP_stateAlignment */ + +/* expect prefix */ + +/* expect SnP_* */ + + +#define JOIN0(a, b) a ## b +#define JOIN(a, b) JOIN0(a, b) + +#define PlSnP_StaticInitialize JOIN(prefix, _StaticInitialize) +#define PlSnP_InitializeAll JOIN(prefix, _InitializeAll) +#define PlSnP_AddByte JOIN(prefix, _AddByte) +#define PlSnP_AddBytes JOIN(prefix, _AddBytes) +#define PlSnP_AddLanesAll JOIN(prefix, _AddLanesAll) +#define PlSnP_OverwriteBytes JOIN(prefix, _OverwriteBytes) +#define PlSnP_OverwriteLanesAll JOIN(prefix, _OverwriteLanesAll) +#define PlSnP_OverwriteWithZeroes JOIN(prefix, _OverwriteWithZeroes) +#define PlSnP_ExtractBytes JOIN(prefix, _ExtractBytes) +#define PlSnP_ExtractLanesAll JOIN(prefix, _ExtractLanesAll) +#define PlSnP_ExtractAndAddBytes JOIN(prefix, _ExtractAndAddBytes) +#define PlSnP_ExtractAndAddLanesAll JOIN(prefix, _ExtractAndAddLanesAll) + +#if (PlSnP_baseParallelism == 1) + #define SnP_stateSizeInBytes JOIN(SnP, _stateSizeInBytes) + #define SnP_stateAlignment JOIN(SnP, _stateAlignment) +#else + #define SnP_stateSizeInBytes JOIN(SnP, _statesSizeInBytes) + #define SnP_stateAlignment JOIN(SnP, _statesAlignment) +#endif +#define PlSnP_factor ((PlSnP_targetParallelism)/(PlSnP_baseParallelism)) +#define SnP_stateOffset (((SnP_stateSizeInBytes+(SnP_stateAlignment-1))/SnP_stateAlignment)*SnP_stateAlignment) +#define stateWithIndex(i) ((unsigned char *)states+((i)*SnP_stateOffset)) + +#define SnP_StaticInitialize JOIN(SnP, _StaticInitialize) +#define SnP_Initialize JOIN(SnP, _Initialize) +#define SnP_InitializeAll JOIN(SnP, _InitializeAll) +#define SnP_AddByte JOIN(SnP, _AddByte) +#define SnP_AddBytes JOIN(SnP, _AddBytes) +#define SnP_AddLanesAll JOIN(SnP, _AddLanesAll) +#define SnP_OverwriteBytes JOIN(SnP, _OverwriteBytes) +#define SnP_OverwriteLanesAll JOIN(SnP, _OverwriteLanesAll) +#define SnP_OverwriteWithZeroes JOIN(SnP, _OverwriteWithZeroes) +#define SnP_ExtractBytes JOIN(SnP, _ExtractBytes) +#define SnP_ExtractLanesAll JOIN(SnP, _ExtractLanesAll) +#define SnP_ExtractAndAddBytes JOIN(SnP, _ExtractAndAddBytes) +#define SnP_ExtractAndAddLanesAll JOIN(SnP, _ExtractAndAddLanesAll) + +void PlSnP_StaticInitialize( void ) +{ + SnP_StaticInitialize(); +} + +void PlSnP_InitializeAll(void *states) +{ + unsigned int i; + + for(i=0; i 0) { \ + unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \ + if (_bytesInLane > _sizeLeft) \ + _bytesInLane = _sizeLeft; \ + SnP_AddBytesInLane(state, _lanePosition, _curData, _offsetInLane, _bytesInLane); \ + _sizeLeft -= _bytesInLane; \ + _lanePosition++; \ + _offsetInLane = 0; \ + _curData += _bytesInLane; \ + } \ + } \ + } + +#define SnP_OverwriteBytes(state, data, offset, length, SnP_OverwriteLanes, SnP_OverwriteBytesInLane, SnP_laneLengthInBytes) \ + { \ + if ((offset) == 0) { \ + SnP_OverwriteLanes(state, data, (length)/SnP_laneLengthInBytes); \ + SnP_OverwriteBytesInLane(state, \ + (length)/SnP_laneLengthInBytes, \ + (data)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \ + 0, \ + (length)%SnP_laneLengthInBytes); \ + } \ + else { \ + unsigned int _sizeLeft = (length); \ + unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \ + unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \ + const unsigned char *_curData = (data); \ + while(_sizeLeft > 0) { \ + unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \ + if (_bytesInLane > _sizeLeft) \ + _bytesInLane = _sizeLeft; \ + SnP_OverwriteBytesInLane(state, _lanePosition, _curData, _offsetInLane, _bytesInLane); \ + _sizeLeft -= _bytesInLane; \ + _lanePosition++; \ + _offsetInLane = 0; \ + _curData += _bytesInLane; \ + } \ + } \ + } + +#define SnP_ExtractBytes(state, data, offset, length, SnP_ExtractLanes, SnP_ExtractBytesInLane, SnP_laneLengthInBytes) \ + { \ + if ((offset) == 0) { \ + SnP_ExtractLanes(state, data, (length)/SnP_laneLengthInBytes); \ + SnP_ExtractBytesInLane(state, \ + (length)/SnP_laneLengthInBytes, \ + (data)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \ + 0, \ + (length)%SnP_laneLengthInBytes); \ + } \ + else { \ + unsigned int _sizeLeft = (length); \ + unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \ + unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \ + unsigned char *_curData = (data); \ + while(_sizeLeft > 0) { \ + unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \ + if (_bytesInLane > _sizeLeft) \ + _bytesInLane = _sizeLeft; \ + SnP_ExtractBytesInLane(state, _lanePosition, _curData, _offsetInLane, _bytesInLane); \ + _sizeLeft -= _bytesInLane; \ + _lanePosition++; \ + _offsetInLane = 0; \ + _curData += _bytesInLane; \ + } \ + } \ + } + +#define SnP_ExtractAndAddBytes(state, input, output, offset, length, SnP_ExtractAndAddLanes, SnP_ExtractAndAddBytesInLane, SnP_laneLengthInBytes) \ + { \ + if ((offset) == 0) { \ + SnP_ExtractAndAddLanes(state, input, output, (length)/SnP_laneLengthInBytes); \ + SnP_ExtractAndAddBytesInLane(state, \ + (length)/SnP_laneLengthInBytes, \ + (input)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \ + (output)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \ + 0, \ + (length)%SnP_laneLengthInBytes); \ + } \ + else { \ + unsigned int _sizeLeft = (length); \ + unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \ + unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \ + const unsigned char *_curInput = (input); \ + unsigned char *_curOutput = (output); \ + while(_sizeLeft > 0) { \ + unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \ + if (_bytesInLane > _sizeLeft) \ + _bytesInLane = _sizeLeft; \ + SnP_ExtractAndAddBytesInLane(state, _lanePosition, _curInput, _curOutput, _offsetInLane, _bytesInLane); \ + _sizeLeft -= _bytesInLane; \ + _lanePosition++; \ + _offsetInLane = 0; \ + _curInput += _bytesInLane; \ + _curOutput += _bytesInLane; \ + } \ + } \ + } + +#endif diff --git a/Modules/_sha3/kcp/align.h b/Modules/_sha3/kcp/align.h new file mode 100644 index 0000000000..6650fe8c3c --- /dev/null +++ b/Modules/_sha3/kcp/align.h @@ -0,0 +1,35 @@ +/* +Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, +Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby +denoted as "the implementer". + +For more information, feedback or questions, please refer to our websites: +http://keccak.noekeon.org/ +http://keyak.noekeon.org/ +http://ketje.noekeon.org/ + +To the extent possible under law, the implementer has waived all copyright +and related or neighboring rights to the source code in this file. +http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +#ifndef _align_h_ +#define _align_h_ + +/* on Mac OS-X and possibly others, ALIGN(x) is defined in param.h, and -Werror chokes on the redef. */ + +#ifdef ALIGN +#undef ALIGN +#endif + +#if defined(__GNUC__) +#define ALIGN(x) __attribute__ ((aligned(x))) +#elif defined(_MSC_VER) +#define ALIGN(x) __declspec(align(x)) +#elif defined(__ARMCC_VERSION) +#define ALIGN(x) __align(x) +#else +#define ALIGN(x) +#endif + +#endif diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c new file mode 100644 index 0000000000..67c69f2c85 --- /dev/null +++ b/Modules/_sha3/sha3module.c @@ -0,0 +1,749 @@ +/* SHA3 module + * + * This module provides an interface to the SHA3 algorithm + * + * See below for information about the original code this module was + * based upon. Additional work performed by: + * + * Andrew Kuchling (amk@amk.ca) + * Greg Stein (gstein@lyra.org) + * Trevor Perrin (trevp@trevp.net) + * Gregory P. Smith (greg@krypto.org) + * + * Copyright (C) 2012-2016 Christian Heimes (christian@python.org) + * Licensed to PSF under a Contributor Agreement. + * + */ + +#include "Python.h" +#include "pystrhex.h" +#include "../hashlib.h" + +/* ************************************************************************** + * SHA-3 (Keccak) and SHAKE + * + * The code is based on KeccakCodePackage from 2016-04-23 + * commit 647f93079afc4ada3d23737477a6e52511ca41fd + * + * The reference implementation is altered in this points: + * - C++ comments are converted to ANSI C comments. + * - all function names are mangled + * - typedef for UINT64 is commented out. + * - brg_endian.h is removed + * + * *************************************************************************/ + +#ifdef __sparc + /* opt64 uses un-aligned memory access that causes a BUS error with msg + * 'invalid address alignment' on SPARC. */ + #define KeccakOpt 32 +#elif SIZEOF_VOID_P == 8 && defined(PY_UINT64_T) + /* opt64 works only for 64bit platforms with unsigned int64 */ + #define KeccakOpt 64 +#else + /* opt32 is used for the remaining 32 and 64bit platforms */ + #define KeccakOpt 32 +#endif + +#if KeccakOpt == 64 && defined(PY_UINT64_T) + /* 64bit platforms with unsigned int64 */ + typedef PY_UINT64_T UINT64; + typedef unsigned char UINT8; +#endif + +/* replacement for brg_endian.h */ +#define IS_LITTLE_ENDIAN 1234 +#define IS_BIG_ENDIAN 4321 +#if PY_LITTLE_ENDIAN +#define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN +#endif +#if PY_BIG_ENDIAN +#define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN +#endif + +/* mangle names */ +#define KeccakF1600_FastLoop_Absorb _PySHA3_KeccakF1600_FastLoop_Absorb +#define Keccak_HashFinal _PySHA3_Keccak_HashFinal +#define Keccak_HashInitialize _PySHA3_Keccak_HashInitialize +#define Keccak_HashSqueeze _PySHA3_Keccak_HashSqueeze +#define Keccak_HashUpdate _PySHA3_Keccak_HashUpdate +#define KeccakP1600_AddBytes _PySHA3_KeccakP1600_AddBytes +#define KeccakP1600_AddBytesInLane _PySHA3_KeccakP1600_AddBytesInLane +#define KeccakP1600_AddLanes _PySHA3_KeccakP1600_AddLanes +#define KeccakP1600_ExtractAndAddBytes _PySHA3_KeccakP1600_ExtractAndAddBytes +#define KeccakP1600_ExtractAndAddBytesInLane _PySHA3_KeccakP1600_ExtractAndAddBytesInLane +#define KeccakP1600_ExtractAndAddLanes _PySHA3_KeccakP1600_ExtractAndAddLanes +#define KeccakP1600_ExtractBytes _PySHA3_KeccakP1600_ExtractBytes +#define KeccakP1600_ExtractBytesInLane _PySHA3_KeccakP1600_ExtractBytesInLane +#define KeccakP1600_ExtractLanes _PySHA3_KeccakP1600_ExtractLanes +#define KeccakP1600_Initialize _PySHA3_KeccakP1600_Initialize +#define KeccakP1600_OverwriteBytes _PySHA3_KeccakP1600_OverwriteBytes +#define KeccakP1600_OverwriteBytesInLane _PySHA3_KeccakP1600_OverwriteBytesInLane +#define KeccakP1600_OverwriteLanes _PySHA3_KeccakP1600_OverwriteLanes +#define KeccakP1600_OverwriteWithZeroes _PySHA3_KeccakP1600_OverwriteWithZeroes +#define KeccakP1600_Permute_12rounds _PySHA3_KeccakP1600_Permute_12rounds +#define KeccakP1600_Permute_24rounds _PySHA3_KeccakP1600_Permute_24rounds +#define KeccakWidth1600_Sponge _PySHA3_KeccakWidth1600_Sponge +#define KeccakWidth1600_SpongeAbsorb _PySHA3_KeccakWidth1600_SpongeAbsorb +#define KeccakWidth1600_SpongeAbsorbLastFewBits _PySHA3_KeccakWidth1600_SpongeAbsorbLastFewBits +#define KeccakWidth1600_SpongeInitialize _PySHA3_KeccakWidth1600_SpongeInitialize +#define KeccakWidth1600_SpongeSqueeze _PySHA3_KeccakWidth1600_SpongeSqueeze +#if KeccakOpt == 32 +#define KeccakP1600_AddByte _PySHA3_KeccakP1600_AddByte +#define KeccakP1600_Permute_Nrounds _PySHA3_KeccakP1600_Permute_Nrounds +#define KeccakP1600_SetBytesInLaneToZero _PySHA3_KeccakP1600_SetBytesInLaneToZero +#endif + +/* we are only interested in KeccakP1600 */ +#define KeccakP200_excluded 1 +#define KeccakP400_excluded 1 +#define KeccakP800_excluded 1 + +/* inline all Keccak dependencies */ +#include "kcp/KeccakHash.h" +#include "kcp/KeccakSponge.h" +#include "kcp/KeccakHash.c" +#include "kcp/KeccakSponge.c" +#if KeccakOpt == 64 + #include "kcp/KeccakP-1600-opt64.c" +#elif KeccakOpt == 32 + #include "kcp/KeccakP-1600-inplace32BI.c" +#endif + +#define SHA3_MAX_DIGESTSIZE 64 /* 64 Bytes (512 Bits) for 224 to 512 */ +#define SHA3_state Keccak_HashInstance +#define SHA3_init Keccak_HashInitialize +#define SHA3_process Keccak_HashUpdate +#define SHA3_done Keccak_HashFinal +#define SHA3_squeeze Keccak_HashSqueeze +#define SHA3_copystate(dest, src) memcpy(&(dest), &(src), sizeof(SHA3_state)) + + +/*[clinic input] +module _sha3 +class _sha3.sha3_224 "SHA3object *" "&SHA3_224typ" +class _sha3.sha3_256 "SHA3object *" "&SHA3_256typ" +class _sha3.sha3_384 "SHA3object *" "&SHA3_384typ" +class _sha3.sha3_512 "SHA3object *" "&SHA3_512typ" +class _sha3.shake_128 "SHA3object *" "&SHAKE128type" +class _sha3.shake_256 "SHA3object *" "&SHAKE256type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b8a53680f370285a]*/ + +/* The structure for storing SHA3 info */ + +#define PY_WITH_KECCAK 0 + +typedef struct { + PyObject_HEAD + SHA3_state hash_state; +#ifdef WITH_THREAD + PyThread_type_lock lock; +#endif +} SHA3object; + +static PyTypeObject SHA3_224type; +static PyTypeObject SHA3_256type; +static PyTypeObject SHA3_384type; +static PyTypeObject SHA3_512type; +#ifdef PY_WITH_KECCAK +static PyTypeObject Keccak_224type; +static PyTypeObject Keccak_256type; +static PyTypeObject Keccak_384type; +static PyTypeObject Keccak_512type; +#endif +static PyTypeObject SHAKE128type; +static PyTypeObject SHAKE256type; + +#include "clinic/sha3module.c.h" + +static SHA3object * +newSHA3object(PyTypeObject *type) +{ + SHA3object *newobj; + newobj = (SHA3object *)PyObject_New(SHA3object, type); + if (newobj == NULL) { + return NULL; + } +#ifdef WITH_THREAD + newobj->lock = NULL; +#endif + return newobj; +} + + +/*[clinic input] +@classmethod +_sha3.sha3_224.__new__ as py_sha3_new + string as data: object = NULL + +Return a new SHA3 hash object with a hashbit length of 28 bytes. +[clinic start generated code]*/ + +static PyObject * +py_sha3_new_impl(PyTypeObject *type, PyObject *data) +/*[clinic end generated code: output=8d5c34279e69bf09 input=d7c582b950a858b6]*/ +{ + SHA3object *self = NULL; + Py_buffer buf = {NULL, NULL}; + HashReturn res; + + self = newSHA3object(type); + if (self == NULL) { + goto error; + } + + if (type == &SHA3_224type) { + res = Keccak_HashInitialize_SHA3_224(&self->hash_state); + } else if (type == &SHA3_256type) { + res = Keccak_HashInitialize_SHA3_256(&self->hash_state); + } else if (type == &SHA3_384type) { + res = Keccak_HashInitialize_SHA3_384(&self->hash_state); + } else if (type == &SHA3_512type) { + res = Keccak_HashInitialize_SHA3_512(&self->hash_state); +#ifdef PY_WITH_KECCAK + } else if (type == &Keccak_224type) { + res = Keccak_HashInitialize(&self->hash_state, 1152, 448, 224, 0x01); + } else if (type == &Keccak_256type) { + res = Keccak_HashInitialize(&self->hash_state, 1088, 512, 256, 0x01); + } else if (type == &Keccak_384type) { + res = Keccak_HashInitialize(&self->hash_state, 832, 768, 384, 0x01); + } else if (type == &Keccak_512type) { + res = Keccak_HashInitialize(&self->hash_state, 576, 1024, 512, 0x01); +#endif + } else if (type == &SHAKE128type) { + res = Keccak_HashInitialize_SHAKE128(&self->hash_state); + } else if (type == &SHAKE256type) { + res = Keccak_HashInitialize_SHAKE256(&self->hash_state); + } else { + PyErr_BadInternalCall(); + goto error; + } + + if (data) { + GET_BUFFER_VIEW_OR_ERROR(data, &buf, goto error); +#ifdef WITH_THREAD + if (buf.len >= HASHLIB_GIL_MINSIZE) { + /* invariant: New objects can't be accessed by other code yet, + * thus it's safe to release the GIL without locking the object. + */ + Py_BEGIN_ALLOW_THREADS + res = SHA3_process(&self->hash_state, buf.buf, buf.len * 8); + Py_END_ALLOW_THREADS + } + else { + res = SHA3_process(&self->hash_state, buf.buf, buf.len * 8); + } +#else + res = SHA3_process(&self->hash_state, buf.buf, buf.len * 8); +#endif + if (res != SUCCESS) { + PyErr_SetString(PyExc_RuntimeError, + "internal error in SHA3 Update()"); + goto error; + } + PyBuffer_Release(&buf); + } + + return (PyObject *)self; + + error: + if (self) { + Py_DECREF(self); + } + if (data && buf.obj) { + PyBuffer_Release(&buf); + } + return NULL; +} + + +/* Internal methods for a hash object */ + +static void +SHA3_dealloc(SHA3object *self) +{ +#ifdef WITH_THREAD + if (self->lock) { + PyThread_free_lock(self->lock); + } +#endif + PyObject_Del(self); +} + + +/* External methods for a hash object */ + + +/*[clinic input] +_sha3.sha3_224.copy + +Return a copy of the hash object. +[clinic start generated code]*/ + +static PyObject * +_sha3_sha3_224_copy_impl(SHA3object *self) +/*[clinic end generated code: output=6c537411ecdcda4c input=93a44aaebea51ba8]*/ +{ + SHA3object *newobj; + + if ((newobj = newSHA3object(Py_TYPE(self))) == NULL) { + return NULL; + } + ENTER_HASHLIB(self); + SHA3_copystate(newobj->hash_state, self->hash_state); + LEAVE_HASHLIB(self); + return (PyObject *)newobj; +} + + +/*[clinic input] +_sha3.sha3_224.digest + +Return the digest value as a string of binary data. +[clinic start generated code]*/ + +static PyObject * +_sha3_sha3_224_digest_impl(SHA3object *self) +/*[clinic end generated code: output=fd531842e20b2d5b input=a5807917d219b30e]*/ +{ + unsigned char digest[SHA3_MAX_DIGESTSIZE]; + SHA3_state temp; + HashReturn res; + + ENTER_HASHLIB(self); + SHA3_copystate(temp, self->hash_state); + LEAVE_HASHLIB(self); + res = SHA3_done(&temp, digest); + if (res != SUCCESS) { + PyErr_SetString(PyExc_RuntimeError, "internal error in SHA3 Final()"); + return NULL; + } + return PyBytes_FromStringAndSize((const char *)digest, + self->hash_state.fixedOutputLength / 8); +} + + +/*[clinic input] +_sha3.sha3_224.hexdigest + +Return the digest value as a string of hexadecimal digits. +[clinic start generated code]*/ + +static PyObject * +_sha3_sha3_224_hexdigest_impl(SHA3object *self) +/*[clinic end generated code: output=75ad03257906918d input=2d91bb6e0d114ee3]*/ +{ + unsigned char digest[SHA3_MAX_DIGESTSIZE]; + SHA3_state temp; + HashReturn res; + + /* Get the raw (binary) digest value */ + ENTER_HASHLIB(self); + SHA3_copystate(temp, self->hash_state); + LEAVE_HASHLIB(self); + res = SHA3_done(&temp, digest); + if (res != SUCCESS) { + PyErr_SetString(PyExc_RuntimeError, "internal error in SHA3 Final()"); + return NULL; + } + return _Py_strhex((const char *)digest, + self->hash_state.fixedOutputLength / 8); +} + + +/*[clinic input] +_sha3.sha3_224.update + + obj: object + / + +Update this hash object's state with the provided string. +[clinic start generated code]*/ + +static PyObject * +_sha3_sha3_224_update(SHA3object *self, PyObject *obj) +/*[clinic end generated code: output=06721d55b483e0af input=be44bf0d1c279791]*/ +{ + Py_buffer buf; + HashReturn res; + + GET_BUFFER_VIEW_OR_ERROUT(obj, &buf); + + /* add new data, the function takes the length in bits not bytes */ +#ifdef WITH_THREAD + if (self->lock == NULL && buf.len >= HASHLIB_GIL_MINSIZE) { + self->lock = PyThread_allocate_lock(); + } + /* Once a lock exists all code paths must be synchronized. We have to + * release the GIL even for small buffers as acquiring the lock may take + * an unlimited amount of time when another thread updates this object + * with lots of data. */ + if (self->lock) { + Py_BEGIN_ALLOW_THREADS + PyThread_acquire_lock(self->lock, 1); + res = SHA3_process(&self->hash_state, buf.buf, buf.len * 8); + PyThread_release_lock(self->lock); + Py_END_ALLOW_THREADS + } + else { + res = SHA3_process(&self->hash_state, buf.buf, buf.len * 8); + } +#else + res = SHA3_process(&self->hash_state, buf.buf, buf.len * 8); +#endif + + if (res != SUCCESS) { + PyBuffer_Release(&buf); + PyErr_SetString(PyExc_RuntimeError, + "internal error in SHA3 Update()"); + return NULL; + } + + PyBuffer_Release(&buf); + Py_INCREF(Py_None); + return Py_None; +} + + +static PyMethodDef SHA3_methods[] = { + _SHA3_SHA3_224_COPY_METHODDEF + _SHA3_SHA3_224_DIGEST_METHODDEF + _SHA3_SHA3_224_HEXDIGEST_METHODDEF + _SHA3_SHA3_224_UPDATE_METHODDEF + {NULL, NULL} /* sentinel */ +}; + + +static PyObject * +SHA3_get_block_size(SHA3object *self, void *closure) +{ + int rate = self->hash_state.sponge.rate; + return PyLong_FromLong(rate / 8); +} + + +static PyObject * +SHA3_get_name(SHA3object *self, void *closure) +{ + PyTypeObject *type = Py_TYPE(self); + if (type == &SHA3_224type) { + return PyUnicode_FromString("sha3_224"); + } else if (type == &SHA3_256type) { + return PyUnicode_FromString("sha3_256"); + } else if (type == &SHA3_384type) { + return PyUnicode_FromString("sha3_384"); + } else if (type == &SHA3_512type) { + return PyUnicode_FromString("sha3_512"); +#ifdef PY_WITH_KECCAK + } else if (type == &Keccak_224type) { + return PyUnicode_FromString("keccak_224"); + } else if (type == &Keccak_256type) { + return PyUnicode_FromString("keccak_256"); + } else if (type == &Keccak_384type) { + return PyUnicode_FromString("keccak_384"); + } else if (type == &Keccak_512type) { + return PyUnicode_FromString("keccak_512"); +#endif + } else if (type == &SHAKE128type) { + return PyUnicode_FromString("shake_128"); + } else if (type == &SHAKE256type) { + return PyUnicode_FromString("shake_256"); + } else { + PyErr_BadInternalCall(); + return NULL; + } +} + + +static PyObject * +SHA3_get_digest_size(SHA3object *self, void *closure) +{ + return PyLong_FromLong(self->hash_state.fixedOutputLength / 8); +} + + +static PyObject * +SHA3_get_capacity_bits(SHA3object *self, void *closure) +{ + int capacity = 1600 - self->hash_state.sponge.rate; + return PyLong_FromLong(capacity); +} + + +static PyObject * +SHA3_get_rate_bits(SHA3object *self, void *closure) +{ + unsigned int rate = self->hash_state.sponge.rate; + return PyLong_FromLong(rate); +} + +static PyObject * +SHA3_get_suffix(SHA3object *self, void *closure) +{ + unsigned char suffix[2]; + suffix[0] = self->hash_state.delimitedSuffix; + suffix[1] = 0; + return PyBytes_FromStringAndSize((const char *)suffix, 1); +} + + +static PyGetSetDef SHA3_getseters[] = { + {"block_size", (getter)SHA3_get_block_size, NULL, NULL, NULL}, + {"name", (getter)SHA3_get_name, NULL, NULL, NULL}, + {"digest_size", (getter)SHA3_get_digest_size, NULL, NULL, NULL}, + {"_capacity_bits", (getter)SHA3_get_capacity_bits, NULL, NULL, NULL}, + {"_rate_bits", (getter)SHA3_get_rate_bits, NULL, NULL, NULL}, + {"_suffix", (getter)SHA3_get_suffix, NULL, NULL, NULL}, + {NULL} /* Sentinel */ +}; + + +#define SHA3_TYPE(type_obj, type_name, type_doc, type_methods) \ + static PyTypeObject type_obj = { \ + PyVarObject_HEAD_INIT(NULL, 0) \ + type_name, /* tp_name */ \ + sizeof(SHA3object), /* tp_size */ \ + 0, /* tp_itemsize */ \ + /* methods */ \ + (destructor)SHA3_dealloc, /* tp_dealloc */ \ + 0, /* tp_print */ \ + 0, /* tp_getattr */ \ + 0, /* tp_setattr */ \ + 0, /* tp_reserved */ \ + 0, /* tp_repr */ \ + 0, /* tp_as_number */ \ + 0, /* tp_as_sequence */ \ + 0, /* tp_as_mapping */ \ + 0, /* tp_hash */ \ + 0, /* tp_call */ \ + 0, /* tp_str */ \ + 0, /* tp_getattro */ \ + 0, /* tp_setattro */ \ + 0, /* tp_as_buffer */ \ + Py_TPFLAGS_DEFAULT, /* tp_flags */ \ + type_doc, /* tp_doc */ \ + 0, /* tp_traverse */ \ + 0, /* tp_clear */ \ + 0, /* tp_richcompare */ \ + 0, /* tp_weaklistoffset */ \ + 0, /* tp_iter */ \ + 0, /* tp_iternext */ \ + type_methods, /* tp_methods */ \ + NULL, /* tp_members */ \ + SHA3_getseters, /* 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 */ \ + py_sha3_new, /* tp_new */ \ + } + +PyDoc_STRVAR(sha3_256__doc__, +"sha3_256([string]) -> SHA3 object\n\ +\n\ +Return a new SHA3 hash object with a hashbit length of 32 bytes."); + +PyDoc_STRVAR(sha3_384__doc__, +"sha3_384([string]) -> SHA3 object\n\ +\n\ +Return a new SHA3 hash object with a hashbit length of 48 bytes."); + +PyDoc_STRVAR(sha3_512__doc__, +"sha3_512([string]) -> SHA3 object\n\ +\n\ +Return a new SHA3 hash object with a hashbit length of 64 bytes."); + +SHA3_TYPE(SHA3_224type, "_sha3.sha3_224", py_sha3_new__doc__, SHA3_methods); +SHA3_TYPE(SHA3_256type, "_sha3.sha3_256", sha3_256__doc__, SHA3_methods); +SHA3_TYPE(SHA3_384type, "_sha3.sha3_384", sha3_384__doc__, SHA3_methods); +SHA3_TYPE(SHA3_512type, "_sha3.sha3_512", sha3_512__doc__, SHA3_methods); + +#ifdef PY_WITH_KECCAK +PyDoc_STRVAR(keccak_224__doc__, +"keccak_224([string]) -> Keccak object\n\ +\n\ +Return a new Keccak hash object with a hashbit length of 28 bytes."); + +PyDoc_STRVAR(keccak_256__doc__, +"keccak_256([string]) -> Keccak object\n\ +\n\ +Return a new Keccak hash object with a hashbit length of 32 bytes."); + +PyDoc_STRVAR(keccak_384__doc__, +"keccak_384([string]) -> Keccak object\n\ +\n\ +Return a new Keccak hash object with a hashbit length of 48 bytes."); + +PyDoc_STRVAR(keccak_512__doc__, +"keccak_512([string]) -> Keccak object\n\ +\n\ +Return a new Keccak hash object with a hashbit length of 64 bytes."); + +SHA3_TYPE(Keccak_224type, "_sha3.keccak_224", keccak_224__doc__, SHA3_methods); +SHA3_TYPE(Keccak_256type, "_sha3.keccak_256", keccak_256__doc__, SHA3_methods); +SHA3_TYPE(Keccak_384type, "_sha3.keccak_384", keccak_384__doc__, SHA3_methods); +SHA3_TYPE(Keccak_512type, "_sha3.keccak_512", keccak_512__doc__, SHA3_methods); +#endif + + +static PyObject * +_SHAKE_digest(SHA3object *self, unsigned long digestlen, int hex) +{ + unsigned char *digest = NULL; + SHA3_state temp; + int res; + PyObject *result = NULL; + + if ((digest = (unsigned char*)PyMem_Malloc(digestlen)) == NULL) { + return PyErr_NoMemory(); + } + + /* Get the raw (binary) digest value */ + ENTER_HASHLIB(self); + SHA3_copystate(temp, self->hash_state); + LEAVE_HASHLIB(self); + res = SHA3_done(&temp, NULL); + if (res != SUCCESS) { + PyErr_SetString(PyExc_RuntimeError, "internal error in SHA3 done()"); + goto error; + } + res = SHA3_squeeze(&temp, digest, digestlen * 8); + if (res != SUCCESS) { + PyErr_SetString(PyExc_RuntimeError, "internal error in SHA3 Squeeze()"); + return NULL; + } + if (hex) { + result = _Py_strhex((const char *)digest, digestlen); + } else { + result = PyBytes_FromStringAndSize((const char *)digest, + digestlen); + } + error: + if (digest != NULL) { + PyMem_Free(digest); + } + return result; +} + + +/*[clinic input] +_sha3.shake_128.digest + + length: unsigned_long(bitwise=True) + \ + +Return the digest value as a string of binary data. +[clinic start generated code]*/ + +static PyObject * +_sha3_shake_128_digest_impl(SHA3object *self, unsigned long length) +/*[clinic end generated code: output=2313605e2f87bb8f input=608c8ca80ae9d115]*/ +{ + return _SHAKE_digest(self, length, 0); +} + + +/*[clinic input] +_sha3.shake_128.hexdigest + + length: unsigned_long(bitwise=True) + \ + +Return the digest value as a string of hexadecimal digits. +[clinic start generated code]*/ + +static PyObject * +_sha3_shake_128_hexdigest_impl(SHA3object *self, unsigned long length) +/*[clinic end generated code: output=bf8e2f1e490944a8 input=64e56b4760db4573]*/ +{ + return _SHAKE_digest(self, length, 1); +} + + +static PyMethodDef SHAKE_methods[] = { + _SHA3_SHA3_224_COPY_METHODDEF + _SHA3_SHAKE_128_DIGEST_METHODDEF + _SHA3_SHAKE_128_HEXDIGEST_METHODDEF + _SHA3_SHA3_224_UPDATE_METHODDEF + {NULL, NULL} /* sentinel */ +}; + +PyDoc_STRVAR(shake_128__doc__, +"shake_128([string]) -> SHAKE object\n\ +\n\ +Return a new SHAKE hash object."); + +PyDoc_STRVAR(shake_256__doc__, +"shake_256([string]) -> SHAKE object\n\ +\n\ +Return a new SHAKE hash object."); + +SHA3_TYPE(SHAKE128type, "_sha3.shake_128", shake_128__doc__, SHAKE_methods); +SHA3_TYPE(SHAKE256type, "_sha3.shake_256", shake_256__doc__, SHAKE_methods); + + +/* Initialize this module. */ +static struct PyModuleDef _SHA3module = { + PyModuleDef_HEAD_INIT, + "_sha3", + NULL, + -1, + NULL, + NULL, + NULL, + NULL, + NULL +}; + + +PyMODINIT_FUNC +PyInit__sha3(void) +{ + PyObject *m = NULL; + + m = PyModule_Create(&_SHA3module); + +#define init_sha3type(name, type) \ + do { \ + Py_TYPE(type) = &PyType_Type; \ + if (PyType_Ready(type) < 0) { \ + goto error; \ + } \ + Py_INCREF((PyObject *)type); \ + if (PyModule_AddObject(m, name, (PyObject *)type) < 0) { \ + goto error; \ + } \ + } while(0) + + init_sha3type("sha3_224", &SHA3_224type); + init_sha3type("sha3_256", &SHA3_256type); + init_sha3type("sha3_384", &SHA3_384type); + init_sha3type("sha3_512", &SHA3_512type); +#ifdef PY_WITH_KECCAK + init_sha3type("keccak_224", &Keccak_224type); + init_sha3type("keccak_256", &Keccak_256type); + init_sha3type("keccak_384", &Keccak_384type); + init_sha3type("keccak_512", &Keccak_512type); +#endif + init_sha3type("shake_128", &SHAKE128type); + init_sha3type("shake_256", &SHAKE256type); + +#undef init_sha3type + + if (PyModule_AddIntConstant(m, "keccakopt", KeccakOpt) < 0) { + goto error; + } + if (PyModule_AddStringConstant(m, "implementation", + KeccakP1600_implementation) < 0) { + goto error; + } + + return m; + error: + Py_DECREF(m); + return NULL; +} -- cgit v1.2.1 From 817286f65a4ab1e308e5e133ffa8d639d1228e51 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 7 Sep 2016 12:42:47 +0200 Subject: Issue #16113: KeccakP-1600-opt64 does not support big endian platforms yet. --- Modules/_sha3/sha3module.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c index 67c69f2c85..c236387faf 100644 --- a/Modules/_sha3/sha3module.c +++ b/Modules/_sha3/sha3module.c @@ -37,8 +37,11 @@ /* opt64 uses un-aligned memory access that causes a BUS error with msg * 'invalid address alignment' on SPARC. */ #define KeccakOpt 32 +#elif PY_BIG_ENDIAN + /* opt64 is not yet supported on big endian platforms */ + #define KeccakOpt 32 #elif SIZEOF_VOID_P == 8 && defined(PY_UINT64_T) - /* opt64 works only for 64bit platforms with unsigned int64 */ + /* opt64 works only on little-endian 64bit platforms with unsigned int64 */ #define KeccakOpt 64 #else /* opt32 is used for the remaining 32 and 64bit platforms */ -- cgit v1.2.1 From 55cf9cbe72f66a00f6a52af63369e06f307ea9b1 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 7 Sep 2016 13:01:15 +0200 Subject: Issue #16113: take 2 on big endian machines. --- Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c b/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c index 886dc44197..8382ae53b4 100644 --- a/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c +++ b/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c @@ -188,17 +188,18 @@ void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int l unsigned int lanePosition; for(lanePosition=0; lanePosition> 8) & 0xFF; laneAsBytes[2] = (low >> 16) & 0xFF; -- cgit v1.2.1 From 8ed3683bb6900b0f86c348dd1caf6411222722c4 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 7 Sep 2016 13:18:40 +0200 Subject: Issue #16113: one more C90 violation in big endian code. --- Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c b/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c index 8382ae53b4..a2f9ffea93 100644 --- a/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c +++ b/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c @@ -333,8 +333,8 @@ void KeccakP1600_ExtractLanes(const void *state, unsigned char *data, unsigned i for(lanePosition=0; lanePosition> 8) & 0xFF; laneAsBytes[2] = (low >> 16) & 0xFF; -- cgit v1.2.1 From 58a260158ae807ba57a7f83d13543907c13bc415 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 7 Sep 2016 09:26:18 -0700 Subject: replace PY_SIZE_MAX with SIZE_MAX --- Modules/_elementtree.c | 2 +- Modules/_tkinter.c | 2 +- Modules/_tracemalloc.c | 4 ++-- Modules/audioop.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index ca5ab2cbe2..dd8417a1ac 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -1787,7 +1787,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) step = -step; } - assert((size_t)slicelen <= PY_SIZE_MAX / sizeof(PyObject *)); + assert((size_t)slicelen <= SIZE_MAX / sizeof(PyObject *)); /* recycle is a list that will contain all the children * scheduled for removal. diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 8afc4d59f0..21f063d20a 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -976,7 +976,7 @@ static PyType_Spec PyTclObject_Type_spec = { }; -#if PY_SIZE_MAX > INT_MAX +#if SIZE_MAX > INT_MAX #define CHECK_STRING_LENGTH(s) do { \ if (s != NULL && strlen(s) >= INT_MAX) { \ PyErr_SetString(PyExc_OverflowError, "string is too long"); \ diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 1a53cfec25..ec8bd960a7 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -655,7 +655,7 @@ tracemalloc_add_trace(_PyTraceMalloc_domain_t domain, uintptr_t ptr, } } - assert(tracemalloc_traced_memory <= PY_SIZE_MAX - size); + assert(tracemalloc_traced_memory <= SIZE_MAX - size); tracemalloc_traced_memory += size; if (tracemalloc_traced_memory > tracemalloc_peak_traced_memory) tracemalloc_peak_traced_memory = tracemalloc_traced_memory; @@ -672,7 +672,7 @@ tracemalloc_alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize) PyMemAllocatorEx *alloc = (PyMemAllocatorEx *)ctx; void *ptr; - assert(elsize == 0 || nelem <= PY_SIZE_MAX / elsize); + assert(elsize == 0 || nelem <= SIZE_MAX / elsize); if (use_calloc) ptr = alloc->calloc(alloc->ctx, nelem, elsize); diff --git a/Modules/audioop.c b/Modules/audioop.c index d715783d52..44e5198b3c 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -1337,7 +1337,7 @@ audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width, weightA /= d; weightB /= d; - if ((size_t)nchannels > PY_SIZE_MAX/sizeof(int)) { + if ((size_t)nchannels > SIZE_MAX/sizeof(int)) { PyErr_SetString(PyExc_MemoryError, "not enough memory for output buffer"); return NULL; -- cgit v1.2.1 From 06c2472156a7ab7650b0683f656b2a71193f2952 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 7 Sep 2016 11:06:17 -0700 Subject: require C99 bool --- Modules/_ctypes/cfield.c | 14 +++----------- Modules/_struct.c | 17 +++++------------ 2 files changed, 8 insertions(+), 23 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 06835cc78f..782336dd31 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -711,14 +711,6 @@ vBOOL_get(void *ptr, Py_ssize_t size) } #endif -#ifdef HAVE_C99_BOOL -#define BOOL_TYPE _Bool -#else -#define BOOL_TYPE char -#undef SIZEOF__BOOL -#define SIZEOF__BOOL 1 -#endif - static PyObject * bool_set(void *ptr, PyObject *value, Py_ssize_t size) { @@ -726,10 +718,10 @@ bool_set(void *ptr, PyObject *value, Py_ssize_t size) case -1: return NULL; case 0: - *(BOOL_TYPE *)ptr = 0; + *(_Bool *)ptr = 0; _RET(value); default: - *(BOOL_TYPE *)ptr = 1; + *(_Bool *)ptr = 1; _RET(value); } } @@ -737,7 +729,7 @@ bool_set(void *ptr, PyObject *value, Py_ssize_t size) static PyObject * bool_get(void *ptr, Py_ssize_t size) { - return PyBool_FromLong((long)*(BOOL_TYPE *)ptr); + return PyBool_FromLong((long)*(_Bool *)ptr); } static PyObject * diff --git a/Modules/_struct.c b/Modules/_struct.c index a601f03ce7..082096186e 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -60,6 +60,7 @@ typedef struct { char c; float x; } st_float; typedef struct { char c; double x; } st_double; typedef struct { char c; void *x; } st_void_p; typedef struct { char c; size_t x; } st_size_t; +typedef struct { char c; _Bool x; } st_bool; #define SHORT_ALIGN (sizeof(st_short) - sizeof(short)) #define INT_ALIGN (sizeof(st_int) - sizeof(int)) @@ -68,21 +69,13 @@ typedef struct { char c; size_t x; } st_size_t; #define DOUBLE_ALIGN (sizeof(st_double) - sizeof(double)) #define VOID_P_ALIGN (sizeof(st_void_p) - sizeof(void *)) #define SIZE_T_ALIGN (sizeof(st_size_t) - sizeof(size_t)) +#define BOOL_ALIGN (sizeof(st_bool) - sizeof(_Bool)) /* We can't support q and Q in native mode unless the compiler does; in std mode, they're 8 bytes on all platforms. */ typedef struct { char c; long long x; } s_long_long; #define LONG_LONG_ALIGN (sizeof(s_long_long) - sizeof(long long)) -#ifdef HAVE_C99_BOOL -#define BOOL_TYPE _Bool -typedef struct { char c; _Bool x; } s_bool; -#define BOOL_ALIGN (sizeof(s_bool) - sizeof(BOOL_TYPE)) -#else -#define BOOL_TYPE char -#define BOOL_ALIGN 0 -#endif - #ifdef __powerc #pragma options align=reset #endif @@ -480,7 +473,7 @@ nu_ulonglong(const char *p, const formatdef *f) static PyObject * nu_bool(const char *p, const formatdef *f) { - BOOL_TYPE x; + _Bool x; memcpy((char *)&x, p, sizeof x); return PyBool_FromLong(x != 0); } @@ -695,7 +688,7 @@ static int np_bool(char *p, PyObject *v, const formatdef *f) { int y; - BOOL_TYPE x; + _Bool x; y = PyObject_IsTrue(v); if (y < 0) return -1; @@ -774,7 +767,7 @@ static const formatdef native_table[] = { {'N', sizeof(size_t), SIZE_T_ALIGN, nu_size_t, np_size_t}, {'q', sizeof(long long), LONG_LONG_ALIGN, nu_longlong, np_longlong}, {'Q', sizeof(long long), LONG_LONG_ALIGN, nu_ulonglong,np_ulonglong}, - {'?', sizeof(BOOL_TYPE), BOOL_ALIGN, nu_bool, np_bool}, + {'?', sizeof(_Bool), BOOL_ALIGN, nu_bool, np_bool}, {'e', sizeof(short), SHORT_ALIGN, nu_halffloat, np_halffloat}, {'f', sizeof(float), FLOAT_ALIGN, nu_float, np_float}, {'d', sizeof(double), DOUBLE_ALIGN, nu_double, np_double}, -- cgit v1.2.1 From 6de3349a3e37c47b23ddf1465ceab227d067650a Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Wed, 7 Sep 2016 14:07:16 -0700 Subject: Eliminate a tautological-pointer-compare warning found by Clang. --- Modules/_scproxy.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_scproxy.c b/Modules/_scproxy.c index 68be458bf4..1ce4b776f3 100644 --- a/Modules/_scproxy.c +++ b/Modules/_scproxy.c @@ -71,16 +71,12 @@ get_proxy_settings(PyObject* mod __attribute__((__unused__))) result = PyDict_New(); if (result == NULL) goto error; - if (&kSCPropNetProxiesExcludeSimpleHostnames != NULL) { - aNum = CFDictionaryGetValue(proxyDict, - kSCPropNetProxiesExcludeSimpleHostnames); - if (aNum == NULL) { - v = PyBool_FromLong(0); - } else { - v = PyBool_FromLong(cfnum_to_int32(aNum)); - } - } else { + aNum = CFDictionaryGetValue(proxyDict, + kSCPropNetProxiesExcludeSimpleHostnames); + if (aNum == NULL) { v = PyBool_FromLong(0); + } else { + v = PyBool_FromLong(cfnum_to_int32(aNum)); } if (v == NULL) goto error; -- cgit v1.2.1 From 05d633561c34706f71e5680d8f8ff9454bce6261 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 7 Sep 2016 14:08:34 -0700 Subject: use the '__linux__' instead 'linux' preprocessor define --- Modules/socketmodule.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 0b45c334f4..1f529228b7 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -153,7 +153,7 @@ if_indextoname(index) -- return the corresponding interface name\n\ On the other hand, not all Linux versions agree, so there the settings computed by the configure script are needed! */ -#ifndef linux +#ifndef __linux__ # undef HAVE_GETHOSTBYNAME_R_3_ARG # undef HAVE_GETHOSTBYNAME_R_5_ARG # undef HAVE_GETHOSTBYNAME_R_6_ARG @@ -176,7 +176,7 @@ if_indextoname(index) -- return the corresponding interface name\n\ # define HAVE_GETHOSTBYNAME_R_3_ARG # elif defined(__sun) || defined(__sgi) # define HAVE_GETHOSTBYNAME_R_5_ARG -# elif defined(linux) +# elif defined(__linux__) /* Rely on the configure script */ # else # undef HAVE_GETHOSTBYNAME_R @@ -1214,7 +1214,7 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) case AF_UNIX: { struct sockaddr_un *a = (struct sockaddr_un *) addr; -#ifdef linux +#ifdef __linux__ if (a->sun_path[0] == 0) { /* Linux abstract namespace */ addrlen -= offsetof(struct sockaddr_un, sun_path); return PyBytes_FromStringAndSize(a->sun_path, addrlen); @@ -1529,7 +1529,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, assert(path.len >= 0); addr = (struct sockaddr_un*)addr_ret; -#ifdef linux +#ifdef __linux__ if (path.len > 0 && *(const char *)path.buf == 0) { /* Linux abstract namespace extension */ if ((size_t)path.len > sizeof addr->sun_path) { -- cgit v1.2.1 From 1f022f2790687b29bbf555d0e18fcc4486cd48dc Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 7 Sep 2016 14:45:10 -0700 Subject: more linux -> __linux__ --- Modules/_ctypes/libffi/src/dlmalloc.c | 2 +- Modules/ossaudiodev.c | 2 +- Modules/posixmodule.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/libffi/src/dlmalloc.c b/Modules/_ctypes/libffi/src/dlmalloc.c index 6e474b7c4f..55c2d768b2 100644 --- a/Modules/_ctypes/libffi/src/dlmalloc.c +++ b/Modules/_ctypes/libffi/src/dlmalloc.c @@ -525,7 +525,7 @@ DEFAULT_MMAP_THRESHOLD default: 256K #define MMAP_CLEARS 1 #endif /* MMAP_CLEARS */ #ifndef HAVE_MREMAP -#ifdef linux +#ifdef __linux__ #define HAVE_MREMAP 1 #else /* linux */ #define HAVE_MREMAP 0 diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index 2b7d71f64f..4796203e57 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -37,7 +37,7 @@ #include #endif -#if defined(linux) +#ifdef __linux__ #ifndef HAVE_STDINT_H typedef unsigned long uint32_t; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 0b9b3f617f..161704fcae 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -8446,7 +8446,7 @@ done: if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iiOn:sendfile", keywords, &out, &in, &offobj, &count)) return NULL; -#ifdef linux +#ifdef __linux__ if (offobj == Py_None) { do { Py_BEGIN_ALLOW_THREADS -- cgit v1.2.1 From 11624fd224029b4b12b10eb2ec1a5274a4a19777 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 7 Sep 2016 18:09:22 -0700 Subject: make sure expected values are interpreted as doubles --- Modules/_testcapimodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 87cf4b271a..7d7fa40be2 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2309,7 +2309,7 @@ test_string_to_double(PyObject *self) { result = PyOS_string_to_double(STR, NULL, NULL); \ if (result == -1.0 && PyErr_Occurred()) \ return NULL; \ - if (result != expected) { \ + if (result != (double)expected) { \ msg = "conversion of " STR " to float failed"; \ goto fail; \ } -- cgit v1.2.1 From e4fbc9e118c9b627ddfc71018c1b0db6e2a15fe0 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Thu, 8 Sep 2016 13:35:00 +0200 Subject: Issue #16113: SHA3: allocate extra memory for lane extraction and check return value of PyModule_Create() --- Modules/_sha3/sha3module.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c index c236387faf..8d7eff4880 100644 --- a/Modules/_sha3/sha3module.c +++ b/Modules/_sha3/sha3module.c @@ -114,6 +114,7 @@ #endif #define SHA3_MAX_DIGESTSIZE 64 /* 64 Bytes (512 Bits) for 224 to 512 */ +#define SHA3_LANESIZE 96 /* ExtractLane needs an extra 96 bytes */ #define SHA3_state Keccak_HashInstance #define SHA3_init Keccak_HashInitialize #define SHA3_process Keccak_HashUpdate @@ -310,7 +311,7 @@ static PyObject * _sha3_sha3_224_digest_impl(SHA3object *self) /*[clinic end generated code: output=fd531842e20b2d5b input=a5807917d219b30e]*/ { - unsigned char digest[SHA3_MAX_DIGESTSIZE]; + unsigned char digest[SHA3_MAX_DIGESTSIZE + SHA3_LANESIZE]; SHA3_state temp; HashReturn res; @@ -337,7 +338,7 @@ static PyObject * _sha3_sha3_224_hexdigest_impl(SHA3object *self) /*[clinic end generated code: output=75ad03257906918d input=2d91bb6e0d114ee3]*/ { - unsigned char digest[SHA3_MAX_DIGESTSIZE]; + unsigned char digest[SHA3_MAX_DIGESTSIZE + SHA3_LANESIZE]; SHA3_state temp; HashReturn res; @@ -601,7 +602,12 @@ _SHAKE_digest(SHA3object *self, unsigned long digestlen, int hex) int res; PyObject *result = NULL; - if ((digest = (unsigned char*)PyMem_Malloc(digestlen)) == NULL) { + /* ExtractLane needs at least SHA3_MAX_DIGESTSIZE + SHA3_LANESIZE and + * SHA3_LANESIZE extra space. + */ + digest = (unsigned char*)PyMem_Malloc(SHA3_LANESIZE + + ((digestlen > SHA3_MAX_DIGESTSIZE) ? digestlen : SHA3_MAX_DIGESTSIZE)); + if (digest == NULL) { return PyErr_NoMemory(); } @@ -708,7 +714,9 @@ PyInit__sha3(void) { PyObject *m = NULL; - m = PyModule_Create(&_SHA3module); + if ((m = PyModule_Create(&_SHA3module)) == NULL) { + return NULL; + } #define init_sha3type(name, type) \ do { \ -- cgit v1.2.1 From 85a346b27d547f429cb0d712336594a9b5021e89 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Thu, 8 Sep 2016 13:40:25 +0200 Subject: Issue #26798: Coverity complains about potential memcpy() of overlapped regions. It doesn't hurt to use memmove() here. CID 1372514 / CID 1372515. Upstream https://github.com/BLAKE2/BLAKE2/issues/32 --- Modules/_blake2/impl/blake2b-ref.c | 2 +- Modules/_blake2/impl/blake2b.c | 2 +- Modules/_blake2/impl/blake2s-ref.c | 2 +- Modules/_blake2/impl/blake2s.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_blake2/impl/blake2b-ref.c b/Modules/_blake2/impl/blake2b-ref.c index ec775b4d4b..ab375a499c 100644 --- a/Modules/_blake2/impl/blake2b-ref.c +++ b/Modules/_blake2/impl/blake2b-ref.c @@ -334,7 +334,7 @@ int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen ) blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); blake2b_compress( S, S->buf ); S->buflen -= BLAKE2B_BLOCKBYTES; - memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, S->buflen ); + memmove( S->buf, S->buf + BLAKE2B_BLOCKBYTES, S->buflen ); } blake2b_increment_counter( S, S->buflen ); diff --git a/Modules/_blake2/impl/blake2b.c b/Modules/_blake2/impl/blake2b.c index 58c79fa848..ebb65bb139 100644 --- a/Modules/_blake2/impl/blake2b.c +++ b/Modules/_blake2/impl/blake2b.c @@ -371,7 +371,7 @@ int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen ) blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); blake2b_compress( S, S->buf ); S->buflen -= BLAKE2B_BLOCKBYTES; - memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, S->buflen ); + memmove( S->buf, S->buf + BLAKE2B_BLOCKBYTES, S->buflen ); } blake2b_increment_counter( S, S->buflen ); diff --git a/Modules/_blake2/impl/blake2s-ref.c b/Modules/_blake2/impl/blake2s-ref.c index b08e72b737..6636753bf4 100644 --- a/Modules/_blake2/impl/blake2s-ref.c +++ b/Modules/_blake2/impl/blake2s-ref.c @@ -325,7 +325,7 @@ int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen ) blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); blake2s_compress( S, S->buf ); S->buflen -= BLAKE2S_BLOCKBYTES; - memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, S->buflen ); + memmove( S->buf, S->buf + BLAKE2S_BLOCKBYTES, S->buflen ); } blake2s_increment_counter( S, ( uint32_t )S->buflen ); diff --git a/Modules/_blake2/impl/blake2s.c b/Modules/_blake2/impl/blake2s.c index ccad66266b..69385dcc38 100644 --- a/Modules/_blake2/impl/blake2s.c +++ b/Modules/_blake2/impl/blake2s.c @@ -348,7 +348,7 @@ int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen ) blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); blake2s_compress( S, S->buf ); S->buflen -= BLAKE2S_BLOCKBYTES; - memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, S->buflen ); + memmove( S->buf, S->buf + BLAKE2S_BLOCKBYTES, S->buflen ); } blake2s_increment_counter( S, ( uint32_t )S->buflen ); -- cgit v1.2.1 From 0b4a1a6239c06dd275ba65001232aeabd823bfc7 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Thu, 8 Sep 2016 15:04:38 +0200 Subject: sha3: let's keep it simple and always allocate enough extra space for uint64_t[20]. --- Modules/_sha3/sha3module.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c index 8d7eff4880..04ac6318b2 100644 --- a/Modules/_sha3/sha3module.c +++ b/Modules/_sha3/sha3module.c @@ -114,7 +114,7 @@ #endif #define SHA3_MAX_DIGESTSIZE 64 /* 64 Bytes (512 Bits) for 224 to 512 */ -#define SHA3_LANESIZE 96 /* ExtractLane needs an extra 96 bytes */ +#define SHA3_LANESIZE (20 * 8) /* ExtractLane needs max uint64_t[20] extra. */ #define SHA3_state Keccak_HashInstance #define SHA3_init Keccak_HashInitialize #define SHA3_process Keccak_HashUpdate @@ -605,8 +605,7 @@ _SHAKE_digest(SHA3object *self, unsigned long digestlen, int hex) /* ExtractLane needs at least SHA3_MAX_DIGESTSIZE + SHA3_LANESIZE and * SHA3_LANESIZE extra space. */ - digest = (unsigned char*)PyMem_Malloc(SHA3_LANESIZE + - ((digestlen > SHA3_MAX_DIGESTSIZE) ? digestlen : SHA3_MAX_DIGESTSIZE)); + digest = (unsigned char*)PyMem_Malloc(digestlen + SHA3_LANESIZE); if (digest == NULL) { return PyErr_NoMemory(); } -- cgit v1.2.1 From 16bd0974887b5c50b726c4455107daad3b0d41cf Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Thu, 8 Sep 2016 09:15:54 -0700 Subject: more PY_LONG_LONG to long long --- Modules/_blake2/blake2b_impl.c | 4 ++-- Modules/_blake2/blake2s_impl.c | 4 ++-- Modules/_ctypes/_ctypes_test.c | 40 +++++++++++++++++------------------ Modules/_ctypes/callproc.c | 2 +- Modules/_ctypes/cfield.c | 48 +++++++++++++++++++++--------------------- Modules/_ctypes/ctypes.h | 2 +- Modules/_io/_iomodule.h | 14 ++++++------ Modules/_io/textio.c | 4 ++-- Modules/_sqlite/util.c | 2 +- 9 files changed, 60 insertions(+), 60 deletions(-) (limited to 'Modules') diff --git a/Modules/_blake2/blake2b_impl.c b/Modules/_blake2/blake2b_impl.c index 9c3d8f54d5..58b502bb34 100644 --- a/Modules/_blake2/blake2b_impl.c +++ b/Modules/_blake2/blake2b_impl.c @@ -100,7 +100,7 @@ py_blake2b_new_impl(PyTypeObject *type, PyObject *data, int digest_size, Py_buffer buf; unsigned long leaf_size = 0; - unsigned PY_LONG_LONG node_offset = 0; + unsigned long long node_offset = 0; self = new_BLAKE2bObject(type); if (self == NULL) { @@ -170,7 +170,7 @@ py_blake2b_new_impl(PyTypeObject *type, PyObject *data, int digest_size, if (node_offset_obj != NULL) { node_offset = PyLong_AsUnsignedLongLong(node_offset_obj); - if (node_offset == (unsigned PY_LONG_LONG) -1 && PyErr_Occurred()) { + if (node_offset == (unsigned long long) -1 && PyErr_Occurred()) { goto error; } } diff --git a/Modules/_blake2/blake2s_impl.c b/Modules/_blake2/blake2s_impl.c index 53c22c2a9b..11d2e02251 100644 --- a/Modules/_blake2/blake2s_impl.c +++ b/Modules/_blake2/blake2s_impl.c @@ -100,7 +100,7 @@ py_blake2s_new_impl(PyTypeObject *type, PyObject *data, int digest_size, Py_buffer buf; unsigned long leaf_size = 0; - unsigned PY_LONG_LONG node_offset = 0; + unsigned long long node_offset = 0; self = new_BLAKE2sObject(type); if (self == NULL) { @@ -170,7 +170,7 @@ py_blake2s_new_impl(PyTypeObject *type, PyObject *data, int digest_size, if (node_offset_obj != NULL) { node_offset = PyLong_AsUnsignedLongLong(node_offset_obj); - if (node_offset == (unsigned PY_LONG_LONG) -1 && PyErr_Occurred()) { + if (node_offset == (unsigned long long) -1 && PyErr_Occurred()) { goto error; } } diff --git a/Modules/_ctypes/_ctypes_test.c b/Modules/_ctypes/_ctypes_test.c index 92c3b9e810..629ddf66bc 100644 --- a/Modules/_ctypes/_ctypes_test.c +++ b/Modules/_ctypes/_ctypes_test.c @@ -233,15 +233,15 @@ EXPORT(int) _testfunc_callback_with_pointer(int (*func)(int *)) return (*func)(table); } -EXPORT(PY_LONG_LONG) _testfunc_q_bhilfdq(signed char b, short h, int i, long l, float f, - double d, PY_LONG_LONG q) +EXPORT(long long) _testfunc_q_bhilfdq(signed char b, short h, int i, long l, float f, + double d, long long q) { - return (PY_LONG_LONG)(b + h + i + l + f + d + q); + return (long long)(b + h + i + l + f + d + q); } -EXPORT(PY_LONG_LONG) _testfunc_q_bhilfd(signed char b, short h, int i, long l, float f, double d) +EXPORT(long long) _testfunc_q_bhilfd(signed char b, short h, int i, long l, float f, double d) { - return (PY_LONG_LONG)(b + h + i + l + f + d); + return (long long)(b + h + i + l + f + d); } EXPORT(int) _testfunc_callback_i_if(int value, int (*func)(int)) @@ -254,10 +254,10 @@ EXPORT(int) _testfunc_callback_i_if(int value, int (*func)(int)) return sum; } -EXPORT(PY_LONG_LONG) _testfunc_callback_q_qf(PY_LONG_LONG value, - PY_LONG_LONG (*func)(PY_LONG_LONG)) +EXPORT(long long) _testfunc_callback_q_qf(long long value, + long long (*func)(long long)) { - PY_LONG_LONG sum = 0; + long long sum = 0; while (value != 0) { sum += func(value); @@ -381,8 +381,8 @@ EXPORT(void) _py_func(void) { } -EXPORT(PY_LONG_LONG) last_tf_arg_s; -EXPORT(unsigned PY_LONG_LONG) last_tf_arg_u; +EXPORT(long long) last_tf_arg_s; +EXPORT(unsigned long long) last_tf_arg_u; struct BITS { int A: 1, B:2, C:3, D:4, E: 5, F: 6, G: 7, H: 8, I: 9; @@ -445,8 +445,8 @@ static PyMethodDef module_methods[] = { { NULL, NULL, 0, NULL}, }; -#define S last_tf_arg_s = (PY_LONG_LONG)c -#define U last_tf_arg_u = (unsigned PY_LONG_LONG)c +#define S last_tf_arg_s = (long long)c +#define U last_tf_arg_u = (unsigned long long)c EXPORT(signed char) tf_b(signed char c) { S; return c/3; } EXPORT(unsigned char) tf_B(unsigned char c) { U; return c/3; } @@ -456,8 +456,8 @@ EXPORT(int) tf_i(int c) { S; return c/3; } EXPORT(unsigned int) tf_I(unsigned int c) { U; return c/3; } EXPORT(long) tf_l(long c) { S; return c/3; } EXPORT(unsigned long) tf_L(unsigned long c) { U; return c/3; } -EXPORT(PY_LONG_LONG) tf_q(PY_LONG_LONG c) { S; return c/3; } -EXPORT(unsigned PY_LONG_LONG) tf_Q(unsigned PY_LONG_LONG c) { U; return c/3; } +EXPORT(long long) tf_q(long long c) { S; return c/3; } +EXPORT(unsigned long long) tf_Q(unsigned long long c) { U; return c/3; } EXPORT(float) tf_f(float c) { S; return c/3; } EXPORT(double) tf_d(double c) { S; return c/3; } EXPORT(long double) tf_D(long double c) { S; return c/3; } @@ -471,8 +471,8 @@ EXPORT(int) __stdcall s_tf_i(int c) { S; return c/3; } EXPORT(unsigned int) __stdcall s_tf_I(unsigned int c) { U; return c/3; } EXPORT(long) __stdcall s_tf_l(long c) { S; return c/3; } EXPORT(unsigned long) __stdcall s_tf_L(unsigned long c) { U; return c/3; } -EXPORT(PY_LONG_LONG) __stdcall s_tf_q(PY_LONG_LONG c) { S; return c/3; } -EXPORT(unsigned PY_LONG_LONG) __stdcall s_tf_Q(unsigned PY_LONG_LONG c) { U; return c/3; } +EXPORT(long long) __stdcall s_tf_q(long long c) { S; return c/3; } +EXPORT(unsigned long long) __stdcall s_tf_Q(unsigned long long c) { U; return c/3; } EXPORT(float) __stdcall s_tf_f(float c) { S; return c/3; } EXPORT(double) __stdcall s_tf_d(double c) { S; return c/3; } EXPORT(long double) __stdcall s_tf_D(long double c) { S; return c/3; } @@ -487,8 +487,8 @@ EXPORT(int) tf_bi(signed char x, int c) { S; return c/3; } EXPORT(unsigned int) tf_bI(signed char x, unsigned int c) { U; return c/3; } EXPORT(long) tf_bl(signed char x, long c) { S; return c/3; } EXPORT(unsigned long) tf_bL(signed char x, unsigned long c) { U; return c/3; } -EXPORT(PY_LONG_LONG) tf_bq(signed char x, PY_LONG_LONG c) { S; return c/3; } -EXPORT(unsigned PY_LONG_LONG) tf_bQ(signed char x, unsigned PY_LONG_LONG c) { U; return c/3; } +EXPORT(long long) tf_bq(signed char x, long long c) { S; return c/3; } +EXPORT(unsigned long long) tf_bQ(signed char x, unsigned long long c) { U; return c/3; } EXPORT(float) tf_bf(signed char x, float c) { S; return c/3; } EXPORT(double) tf_bd(signed char x, double c) { S; return c/3; } EXPORT(long double) tf_bD(signed char x, long double c) { S; return c/3; } @@ -503,8 +503,8 @@ EXPORT(int) __stdcall s_tf_bi(signed char x, int c) { S; return c/3; } EXPORT(unsigned int) __stdcall s_tf_bI(signed char x, unsigned int c) { U; return c/3; } EXPORT(long) __stdcall s_tf_bl(signed char x, long c) { S; return c/3; } EXPORT(unsigned long) __stdcall s_tf_bL(signed char x, unsigned long c) { U; return c/3; } -EXPORT(PY_LONG_LONG) __stdcall s_tf_bq(signed char x, PY_LONG_LONG c) { S; return c/3; } -EXPORT(unsigned PY_LONG_LONG) __stdcall s_tf_bQ(signed char x, unsigned PY_LONG_LONG c) { U; return c/3; } +EXPORT(long long) __stdcall s_tf_bq(signed char x, long long c) { S; return c/3; } +EXPORT(unsigned long long) __stdcall s_tf_bQ(signed char x, unsigned long long c) { U; return c/3; } EXPORT(float) __stdcall s_tf_bf(signed char x, float c) { S; return c/3; } EXPORT(double) __stdcall s_tf_bd(signed char x, double c) { S; return c/3; } EXPORT(long double) __stdcall s_tf_bD(signed char x, long double c) { S; return c/3; } diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 5fc96f7633..d3044f3af8 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -591,7 +591,7 @@ union result { short h; int i; long l; - PY_LONG_LONG q; + long long q; long double D; double d; float f; diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 782336dd31..a43585f1b8 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -382,9 +382,9 @@ get_ulong(PyObject *v, unsigned long *p) /* Same, but handling native long long. */ static int -get_longlong(PyObject *v, PY_LONG_LONG *p) +get_longlong(PyObject *v, long long *p) { - PY_LONG_LONG x; + long long x; if (PyFloat_Check(v)) { PyErr_SetString(PyExc_TypeError, "int expected instead of float"); @@ -400,16 +400,16 @@ get_longlong(PyObject *v, PY_LONG_LONG *p) /* Same, but handling native unsigned long long. */ static int -get_ulonglong(PyObject *v, unsigned PY_LONG_LONG *p) +get_ulonglong(PyObject *v, unsigned long long *p) { - unsigned PY_LONG_LONG x; + unsigned long long x; if (PyFloat_Check(v)) { PyErr_SetString(PyExc_TypeError, "int expected instead of float"); return -1; } x = PyLong_AsUnsignedLongLongMask(v); - if (x == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred()) + if (x == (unsigned long long)-1 && PyErr_Occurred()) return -1; *p = x; return 0; @@ -879,12 +879,12 @@ L_get_sw(void *ptr, Py_ssize_t size) static PyObject * q_set(void *ptr, PyObject *value, Py_ssize_t size) { - PY_LONG_LONG val; - PY_LONG_LONG x; + long long val; + long long x; if (get_longlong(value, &val) < 0) return NULL; memcpy(&x, ptr, sizeof(x)); - x = SET(PY_LONG_LONG, x, val, size); + x = SET(long long, x, val, size); memcpy(ptr, &x, sizeof(x)); _RET(value); } @@ -892,13 +892,13 @@ q_set(void *ptr, PyObject *value, Py_ssize_t size) static PyObject * q_set_sw(void *ptr, PyObject *value, Py_ssize_t size) { - PY_LONG_LONG val; - PY_LONG_LONG field; + long long val; + long long field; if (get_longlong(value, &val) < 0) return NULL; memcpy(&field, ptr, sizeof(field)); field = SWAP_8(field); - field = SET(PY_LONG_LONG, field, val, size); + field = SET(long long, field, val, size); field = SWAP_8(field); memcpy(ptr, &field, sizeof(field)); _RET(value); @@ -907,7 +907,7 @@ q_set_sw(void *ptr, PyObject *value, Py_ssize_t size) static PyObject * q_get(void *ptr, Py_ssize_t size) { - PY_LONG_LONG val; + long long val; memcpy(&val, ptr, sizeof(val)); GET_BITFIELD(val, size); return PyLong_FromLongLong(val); @@ -916,7 +916,7 @@ q_get(void *ptr, Py_ssize_t size) static PyObject * q_get_sw(void *ptr, Py_ssize_t size) { - PY_LONG_LONG val; + long long val; memcpy(&val, ptr, sizeof(val)); val = SWAP_8(val); GET_BITFIELD(val, size); @@ -926,12 +926,12 @@ q_get_sw(void *ptr, Py_ssize_t size) static PyObject * Q_set(void *ptr, PyObject *value, Py_ssize_t size) { - unsigned PY_LONG_LONG val; - unsigned PY_LONG_LONG x; + unsigned long long val; + unsigned long long x; if (get_ulonglong(value, &val) < 0) return NULL; memcpy(&x, ptr, sizeof(x)); - x = SET(PY_LONG_LONG, x, val, size); + x = SET(long long, x, val, size); memcpy(ptr, &x, sizeof(x)); _RET(value); } @@ -939,13 +939,13 @@ Q_set(void *ptr, PyObject *value, Py_ssize_t size) static PyObject * Q_set_sw(void *ptr, PyObject *value, Py_ssize_t size) { - unsigned PY_LONG_LONG val; - unsigned PY_LONG_LONG field; + unsigned long long val; + unsigned long long field; if (get_ulonglong(value, &val) < 0) return NULL; memcpy(&field, ptr, sizeof(field)); field = SWAP_8(field); - field = SET(unsigned PY_LONG_LONG, field, val, size); + field = SET(unsigned long long, field, val, size); field = SWAP_8(field); memcpy(ptr, &field, sizeof(field)); _RET(value); @@ -954,7 +954,7 @@ Q_set_sw(void *ptr, PyObject *value, Py_ssize_t size) static PyObject * Q_get(void *ptr, Py_ssize_t size) { - unsigned PY_LONG_LONG val; + unsigned long long val; memcpy(&val, ptr, sizeof(val)); GET_BITFIELD(val, size); return PyLong_FromUnsignedLongLong(val); @@ -963,7 +963,7 @@ Q_get(void *ptr, Py_ssize_t size) static PyObject * Q_get_sw(void *ptr, Py_ssize_t size) { - unsigned PY_LONG_LONG val; + unsigned long long val; memcpy(&val, ptr, sizeof(val)); val = SWAP_8(val); GET_BITFIELD(val, size); @@ -1477,7 +1477,7 @@ P_set(void *ptr, PyObject *value, Py_ssize_t size) v = (void *)PyLong_AsUnsignedLongMask(value); #else #if SIZEOF_LONG_LONG < SIZEOF_VOID_P -# error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)" +# error "PyLong_AsVoidPtr: sizeof(long long) < sizeof(void*)" #endif v = (void *)PyLong_AsUnsignedLongLongMask(value); #endif @@ -1617,8 +1617,8 @@ typedef struct { char c; wchar_t *x; } s_wchar_p; #endif */ -typedef struct { char c; PY_LONG_LONG x; } s_long_long; -#define LONG_LONG_ALIGN (sizeof(s_long_long) - sizeof(PY_LONG_LONG)) +typedef struct { char c; long long x; } s_long_long; +#define LONG_LONG_ALIGN (sizeof(s_long_long) - sizeof(long long)) /* from ffi.h: typedef struct _ffi_type diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index 64cb69fa2b..b71f139f8b 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -301,7 +301,7 @@ struct tagPyCArgObject { short h; int i; long l; - PY_LONG_LONG q; + long long q; long double D; double d; float f; diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h index 007e0c4b32..8b5ec88948 100644 --- a/Modules/_io/_iomodule.h +++ b/Modules/_io/_iomodule.h @@ -85,12 +85,12 @@ extern int _PyIO_trap_eintr(void); #ifdef MS_WINDOWS /* Windows uses long long for offsets */ -typedef PY_LONG_LONG Py_off_t; +typedef long long Py_off_t; # define PyLong_AsOff_t PyLong_AsLongLong # define PyLong_FromOff_t PyLong_FromLongLong -# define PY_OFF_T_MAX PY_LLONG_MAX -# define PY_OFF_T_MIN PY_LLONG_MIN -# define PY_OFF_T_COMPAT PY_LONG_LONG /* type compatible with off_t */ +# define PY_OFF_T_MAX LLONG_MAX +# define PY_OFF_T_MIN LLONG_MIN +# define PY_OFF_T_COMPAT long long /* type compatible with off_t */ # define PY_PRIdOFF "lld" /* format to use for that type */ #else @@ -107,9 +107,9 @@ typedef off_t Py_off_t; #elif (SIZEOF_OFF_T == SIZEOF_LONG_LONG) # define PyLong_AsOff_t PyLong_AsLongLong # define PyLong_FromOff_t PyLong_FromLongLong -# define PY_OFF_T_MAX PY_LLONG_MAX -# define PY_OFF_T_MIN PY_LLONG_MIN -# define PY_OFF_T_COMPAT PY_LONG_LONG +# define PY_OFF_T_MAX LLONG_MAX +# define PY_OFF_T_MIN LLONG_MIN +# define PY_OFF_T_COMPAT long long # define PY_PRIdOFF "lld" #elif (SIZEOF_OFF_T == SIZEOF_LONG) # define PyLong_AsOff_t PyLong_AsLong diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 96c8e7b453..508e46e713 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -531,7 +531,7 @@ _io_IncrementalNewlineDecoder_getstate_impl(nldecoder_object *self) /*[clinic end generated code: output=f0d2c9c136f4e0d0 input=f8ff101825e32e7f]*/ { PyObject *buffer; - unsigned PY_LONG_LONG flag; + unsigned long long flag; if (self->decoder != Py_None) { PyObject *state = PyObject_CallMethodObjArgs(self->decoder, @@ -567,7 +567,7 @@ _io_IncrementalNewlineDecoder_setstate(nldecoder_object *self, /*[clinic end generated code: output=c10c622508b576cb input=c53fb505a76dbbe2]*/ { PyObject *buffer; - unsigned PY_LONG_LONG flag; + unsigned long long flag; if (!PyArg_ParseTuple(state, "OK", &buffer, &flag)) return NULL; diff --git a/Modules/_sqlite/util.c b/Modules/_sqlite/util.c index a276dadc65..351b1b47a4 100644 --- a/Modules/_sqlite/util.c +++ b/Modules/_sqlite/util.c @@ -130,7 +130,7 @@ sqlite_int64 _pysqlite_long_as_int64(PyObject * py_val) { int overflow; - PY_LONG_LONG value = PyLong_AsLongLongAndOverflow(py_val, &overflow); + long long value = PyLong_AsLongLongAndOverflow(py_val, &overflow); if (value == -1 && PyErr_Occurred()) return -1; if (!overflow) { -- cgit v1.2.1 From 6650a6cffdaee05e86c33a76f40e018c132c461f Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Thu, 8 Sep 2016 09:25:03 -0700 Subject: fix a PY_LONG_LONG straggler --- Modules/_ctypes/ctypes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index b71f139f8b..5d3b966338 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -31,7 +31,7 @@ union value { long l; float f; double d; - PY_LONG_LONG ll; + long long ll; long double D; }; -- cgit v1.2.1 From b799c960150c910abd8e633001f14079a6360a7e Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Thu, 8 Sep 2016 09:29:11 -0700 Subject: clinic: PY_LONG_LONG -> long long --- Modules/_sha3/clinic/sha3module.c.h | 26 +++++++++++-------- Modules/clinic/sha512module.c.h | 50 +------------------------------------ 2 files changed, 17 insertions(+), 59 deletions(-) (limited to 'Modules') diff --git a/Modules/_sha3/clinic/sha3module.c.h b/Modules/_sha3/clinic/sha3module.c.h index bfd95cd6ef..704dc00f56 100644 --- a/Modules/_sha3/clinic/sha3module.c.h +++ b/Modules/_sha3/clinic/sha3module.c.h @@ -15,12 +15,14 @@ static PyObject * py_sha3_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"string", NULL}; + static const char * const _keywords[] = {"string", NULL}; + static _PyArg_Parser _parser = {"|O:sha3_224", _keywords, 0}; PyObject *data = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O:sha3_224", _keywords, - &data)) + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + &data)) { goto exit; + } return_value = py_sha3_new_impl(type, data); exit: @@ -106,12 +108,14 @@ static PyObject * _sha3_shake_128_digest(SHA3object *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"length", NULL}; + static const char * const _keywords[] = {"length", NULL}; + static _PyArg_Parser _parser = {"k:digest", _keywords, 0}; unsigned long length; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "k:digest", _keywords, - &length)) + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + &length)) { goto exit; + } return_value = _sha3_shake_128_digest_impl(self, length); exit: @@ -134,15 +138,17 @@ static PyObject * _sha3_shake_128_hexdigest(SHA3object *self, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - static char *_keywords[] = {"length", NULL}; + static const char * const _keywords[] = {"length", NULL}; + static _PyArg_Parser _parser = {"k:hexdigest", _keywords, 0}; unsigned long length; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "k:hexdigest", _keywords, - &length)) + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + &length)) { goto exit; + } return_value = _sha3_shake_128_hexdigest_impl(self, length); exit: return return_value; } -/*[clinic end generated code: output=2eb6db41778eeb50 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=50cff05f2c74d41e input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha512module.c.h b/Modules/clinic/sha512module.c.h index 78f7743480..9680ea228a 100644 --- a/Modules/clinic/sha512module.c.h +++ b/Modules/clinic/sha512module.c.h @@ -2,8 +2,6 @@ preserve [clinic start generated code]*/ -#if defined(PY_LONG_LONG) - PyDoc_STRVAR(SHA512Type_copy__doc__, "copy($self, /)\n" "--\n" @@ -22,10 +20,6 @@ SHA512Type_copy(SHAobject *self, PyObject *Py_UNUSED(ignored)) return SHA512Type_copy_impl(self); } -#endif /* defined(PY_LONG_LONG) */ - -#if defined(PY_LONG_LONG) - PyDoc_STRVAR(SHA512Type_digest__doc__, "digest($self, /)\n" "--\n" @@ -44,10 +38,6 @@ SHA512Type_digest(SHAobject *self, PyObject *Py_UNUSED(ignored)) return SHA512Type_digest_impl(self); } -#endif /* defined(PY_LONG_LONG) */ - -#if defined(PY_LONG_LONG) - PyDoc_STRVAR(SHA512Type_hexdigest__doc__, "hexdigest($self, /)\n" "--\n" @@ -66,10 +56,6 @@ SHA512Type_hexdigest(SHAobject *self, PyObject *Py_UNUSED(ignored)) return SHA512Type_hexdigest_impl(self); } -#endif /* defined(PY_LONG_LONG) */ - -#if defined(PY_LONG_LONG) - PyDoc_STRVAR(SHA512Type_update__doc__, "update($self, obj, /)\n" "--\n" @@ -79,10 +65,6 @@ PyDoc_STRVAR(SHA512Type_update__doc__, #define SHA512TYPE_UPDATE_METHODDEF \ {"update", (PyCFunction)SHA512Type_update, METH_O, SHA512Type_update__doc__}, -#endif /* defined(PY_LONG_LONG) */ - -#if defined(PY_LONG_LONG) - PyDoc_STRVAR(_sha512_sha512__doc__, "sha512($module, /, string=b\'\')\n" "--\n" @@ -113,10 +95,6 @@ exit: return return_value; } -#endif /* defined(PY_LONG_LONG) */ - -#if defined(PY_LONG_LONG) - PyDoc_STRVAR(_sha512_sha384__doc__, "sha384($module, /, string=b\'\')\n" "--\n" @@ -146,30 +124,4 @@ _sha512_sha384(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } - -#endif /* defined(PY_LONG_LONG) */ - -#ifndef SHA512TYPE_COPY_METHODDEF - #define SHA512TYPE_COPY_METHODDEF -#endif /* !defined(SHA512TYPE_COPY_METHODDEF) */ - -#ifndef SHA512TYPE_DIGEST_METHODDEF - #define SHA512TYPE_DIGEST_METHODDEF -#endif /* !defined(SHA512TYPE_DIGEST_METHODDEF) */ - -#ifndef SHA512TYPE_HEXDIGEST_METHODDEF - #define SHA512TYPE_HEXDIGEST_METHODDEF -#endif /* !defined(SHA512TYPE_HEXDIGEST_METHODDEF) */ - -#ifndef SHA512TYPE_UPDATE_METHODDEF - #define SHA512TYPE_UPDATE_METHODDEF -#endif /* !defined(SHA512TYPE_UPDATE_METHODDEF) */ - -#ifndef _SHA512_SHA512_METHODDEF - #define _SHA512_SHA512_METHODDEF -#endif /* !defined(_SHA512_SHA512_METHODDEF) */ - -#ifndef _SHA512_SHA384_METHODDEF - #define _SHA512_SHA384_METHODDEF -#endif /* !defined(_SHA512_SHA384_METHODDEF) */ -/*[clinic end generated code: output=cf0da76cb603d1bf input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8f7f6603a9c4e910 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 9c9a45c1f0a264d3006971b8211d948d6883a05b Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Thu, 8 Sep 2016 10:35:16 -0700 Subject: Issue #27781: Change file system encoding on Windows to UTF-8 (PEP 529) --- Modules/_codecsmodule.c | 8 +- Modules/clinic/_codecsmodule.c.h | 26 +- Modules/clinic/posixmodule.c.h | 96 +++- Modules/overlapped.c | 10 +- Modules/posixmodule.c | 925 ++++++++++++--------------------------- 5 files changed, 384 insertions(+), 681 deletions(-) (limited to 'Modules') diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index 4d25a53f68..586b73ad38 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -604,7 +604,7 @@ _codecs_charmap_decode_impl(PyObject *module, Py_buffer *data, return codec_tuple(decoded, data->len); } -#ifdef HAVE_MBCS +#ifdef MS_WINDOWS /*[clinic input] _codecs.mbcs_decode @@ -666,7 +666,7 @@ _codecs_code_page_decode_impl(PyObject *module, int codepage, return codec_tuple(decoded, consumed); } -#endif /* HAVE_MBCS */ +#endif /* MS_WINDOWS */ /* --- Encoder ------------------------------------------------------------ */ @@ -972,7 +972,7 @@ _codecs_charmap_build_impl(PyObject *module, PyObject *map) return PyUnicode_BuildEncodingMap(map); } -#ifdef HAVE_MBCS +#ifdef MS_WINDOWS /*[clinic input] _codecs.mbcs_encode @@ -1021,7 +1021,7 @@ _codecs_code_page_encode_impl(PyObject *module, int code_page, PyObject *str, PyUnicode_GET_LENGTH(str)); } -#endif /* HAVE_MBCS */ +#endif /* MS_WINDOWS */ /* --- Error handler registry --------------------------------------------- */ diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index 6a63cec66c..c7fd66ffb8 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -764,7 +764,7 @@ exit: return return_value; } -#if defined(HAVE_MBCS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(_codecs_mbcs_decode__doc__, "mbcs_decode($module, data, errors=None, final=False, /)\n" @@ -801,9 +801,9 @@ exit: return return_value; } -#endif /* defined(HAVE_MBCS) */ +#endif /* defined(MS_WINDOWS) */ -#if defined(HAVE_MBCS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(_codecs_oem_decode__doc__, "oem_decode($module, data, errors=None, final=False, /)\n" @@ -840,9 +840,9 @@ exit: return return_value; } -#endif /* defined(HAVE_MBCS) */ +#endif /* defined(MS_WINDOWS) */ -#if defined(HAVE_MBCS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(_codecs_code_page_decode__doc__, "code_page_decode($module, codepage, data, errors=None, final=False, /)\n" @@ -880,7 +880,7 @@ exit: return return_value; } -#endif /* defined(HAVE_MBCS) */ +#endif /* defined(MS_WINDOWS) */ PyDoc_STRVAR(_codecs_readbuffer_encode__doc__, "readbuffer_encode($module, data, errors=None, /)\n" @@ -1351,7 +1351,7 @@ exit: return return_value; } -#if defined(HAVE_MBCS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(_codecs_mbcs_encode__doc__, "mbcs_encode($module, str, errors=None, /)\n" @@ -1381,9 +1381,9 @@ exit: return return_value; } -#endif /* defined(HAVE_MBCS) */ +#endif /* defined(MS_WINDOWS) */ -#if defined(HAVE_MBCS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(_codecs_oem_encode__doc__, "oem_encode($module, str, errors=None, /)\n" @@ -1413,9 +1413,9 @@ exit: return return_value; } -#endif /* defined(HAVE_MBCS) */ +#endif /* defined(MS_WINDOWS) */ -#if defined(HAVE_MBCS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(_codecs_code_page_encode__doc__, "code_page_encode($module, code_page, str, errors=None, /)\n" @@ -1447,7 +1447,7 @@ exit: return return_value; } -#endif /* defined(HAVE_MBCS) */ +#endif /* defined(MS_WINDOWS) */ PyDoc_STRVAR(_codecs_register_error__doc__, "register_error($module, errors, handler, /)\n" @@ -1536,4 +1536,4 @@ exit: #ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF #define _CODECS_CODE_PAGE_ENCODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ -/*[clinic end generated code: output=7874e2d559d49368 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ebe313ab417b17bb input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index e543db4957..6088eec393 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -1649,24 +1649,24 @@ PyDoc_STRVAR(os_execv__doc__, {"execv", (PyCFunction)os_execv, METH_VARARGS, os_execv__doc__}, static PyObject * -os_execv_impl(PyObject *module, PyObject *path, PyObject *argv); +os_execv_impl(PyObject *module, path_t *path, PyObject *argv); static PyObject * os_execv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; - PyObject *path = NULL; + path_t path = PATH_T_INITIALIZE("execv", "path", 0, 0); PyObject *argv; if (!PyArg_ParseTuple(args, "O&O:execv", - PyUnicode_FSConverter, &path, &argv)) { + path_converter, &path, &argv)) { goto exit; } - return_value = os_execv_impl(module, path, argv); + return_value = os_execv_impl(module, &path, argv); exit: /* Cleanup for path */ - Py_XDECREF(path); + path_cleanup(&path); return return_value; } @@ -1719,7 +1719,7 @@ exit: #endif /* defined(HAVE_EXECV) */ -#if defined(HAVE_SPAWNV) +#if (defined(HAVE_SPAWNV) || defined(HAVE_WSPAWNV)) PyDoc_STRVAR(os_spawnv__doc__, "spawnv($module, mode, path, argv, /)\n" @@ -1738,32 +1738,32 @@ PyDoc_STRVAR(os_spawnv__doc__, {"spawnv", (PyCFunction)os_spawnv, METH_VARARGS, os_spawnv__doc__}, static PyObject * -os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv); +os_spawnv_impl(PyObject *module, int mode, path_t *path, PyObject *argv); static PyObject * os_spawnv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int mode; - PyObject *path = NULL; + path_t path = PATH_T_INITIALIZE("spawnv", "path", 0, 0); PyObject *argv; if (!PyArg_ParseTuple(args, "iO&O:spawnv", - &mode, PyUnicode_FSConverter, &path, &argv)) { + &mode, path_converter, &path, &argv)) { goto exit; } - return_value = os_spawnv_impl(module, mode, path, argv); + return_value = os_spawnv_impl(module, mode, &path, argv); exit: /* Cleanup for path */ - Py_XDECREF(path); + path_cleanup(&path); return return_value; } -#endif /* defined(HAVE_SPAWNV) */ +#endif /* (defined(HAVE_SPAWNV) || defined(HAVE_WSPAWNV)) */ -#if defined(HAVE_SPAWNV) +#if (defined(HAVE_SPAWNV) || defined(HAVE_WSPAWNV)) PyDoc_STRVAR(os_spawnve__doc__, "spawnve($module, mode, path, argv, env, /)\n" @@ -1784,7 +1784,7 @@ PyDoc_STRVAR(os_spawnve__doc__, {"spawnve", (PyCFunction)os_spawnve, METH_VARARGS, os_spawnve__doc__}, static PyObject * -os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, +os_spawnve_impl(PyObject *module, int mode, path_t *path, PyObject *argv, PyObject *env); static PyObject * @@ -1792,24 +1792,24 @@ os_spawnve(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int mode; - PyObject *path = NULL; + path_t path = PATH_T_INITIALIZE("spawnve", "path", 0, 0); PyObject *argv; PyObject *env; if (!PyArg_ParseTuple(args, "iO&OO:spawnve", - &mode, PyUnicode_FSConverter, &path, &argv, &env)) { + &mode, path_converter, &path, &argv, &env)) { goto exit; } - return_value = os_spawnve_impl(module, mode, path, argv, env); + return_value = os_spawnve_impl(module, mode, &path, argv, env); exit: /* Cleanup for path */ - Py_XDECREF(path); + path_cleanup(&path); return return_value; } -#endif /* defined(HAVE_SPAWNV) */ +#endif /* (defined(HAVE_SPAWNV) || defined(HAVE_WSPAWNV)) */ #if defined(HAVE_FORK1) @@ -4994,6 +4994,60 @@ os_abort(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_abort_impl(module); } +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(os_startfile__doc__, +"startfile($module, /, filepath, operation=None)\n" +"--\n" +"\n" +"startfile(filepath [, operation])\n" +"\n" +"Start a file with its associated application.\n" +"\n" +"When \"operation\" is not specified or \"open\", this acts like\n" +"double-clicking the file in Explorer, or giving the file name as an\n" +"argument to the DOS \"start\" command: the file is opened with whatever\n" +"application (if any) its extension is associated.\n" +"When another \"operation\" is given, it specifies what should be done with\n" +"the file. A typical operation is \"print\".\n" +"\n" +"startfile returns as soon as the associated application is launched.\n" +"There is no option to wait for the application to close, and no way\n" +"to retrieve the application\'s exit status.\n" +"\n" +"The filepath is relative to the current directory. If you want to use\n" +"an absolute path, make sure the first character is not a slash (\"/\");\n" +"the underlying Win32 ShellExecute function doesn\'t work if it is."); + +#define OS_STARTFILE_METHODDEF \ + {"startfile", (PyCFunction)os_startfile, METH_VARARGS|METH_KEYWORDS, os_startfile__doc__}, + +static PyObject * +os_startfile_impl(PyObject *module, path_t *filepath, Py_UNICODE *operation); + +static PyObject * +os_startfile(PyObject *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"filepath", "operation", NULL}; + path_t filepath = PATH_T_INITIALIZE("startfile", "filepath", 0, 0); + Py_UNICODE *operation = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|u:startfile", _keywords, + path_converter, &filepath, &operation)) { + goto exit; + } + return_value = os_startfile_impl(module, &filepath, operation); + +exit: + /* Cleanup for filepath */ + path_cleanup(&filepath); + + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + #if defined(HAVE_GETLOADAVG) PyDoc_STRVAR(os_getloadavg__doc__, @@ -6034,6 +6088,10 @@ exit: #define OS_SYSCONF_METHODDEF #endif /* !defined(OS_SYSCONF_METHODDEF) */ +#ifndef OS_STARTFILE_METHODDEF + #define OS_STARTFILE_METHODDEF +#endif /* !defined(OS_STARTFILE_METHODDEF) */ + #ifndef OS_GETLOADAVG_METHODDEF #define OS_GETLOADAVG_METHODDEF #endif /* !defined(OS_GETLOADAVG_METHODDEF) */ diff --git a/Modules/overlapped.c b/Modules/overlapped.c index f85e5bc736..0aa8657898 100644 --- a/Modules/overlapped.c +++ b/Modules/overlapped.c @@ -973,28 +973,28 @@ Overlapped_AcceptEx(OverlappedObject *self, PyObject *args) static int parse_address(PyObject *obj, SOCKADDR *Address, int Length) { - char *Host; + Py_UNICODE *Host; unsigned short Port; unsigned long FlowInfo; unsigned long ScopeId; memset(Address, 0, Length); - if (PyArg_ParseTuple(obj, "sH", &Host, &Port)) + if (PyArg_ParseTuple(obj, "uH", &Host, &Port)) { Address->sa_family = AF_INET; - if (WSAStringToAddressA(Host, AF_INET, NULL, Address, &Length) < 0) { + if (WSAStringToAddressW(Host, AF_INET, NULL, Address, &Length) < 0) { SetFromWindowsErr(WSAGetLastError()); return -1; } ((SOCKADDR_IN*)Address)->sin_port = htons(Port); return Length; } - else if (PyArg_ParseTuple(obj, "sHkk", &Host, &Port, &FlowInfo, &ScopeId)) + else if (PyArg_ParseTuple(obj, "uHkk", &Host, &Port, &FlowInfo, &ScopeId)) { PyErr_Clear(); Address->sa_family = AF_INET6; - if (WSAStringToAddressA(Host, AF_INET6, NULL, Address, &Length) < 0) { + if (WSAStringToAddressW(Host, AF_INET6, NULL, Address, &Length) < 0) { SetFromWindowsErr(WSAGetLastError()); return -1; } diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 161704fcae..a39ea651fd 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -164,6 +164,8 @@ corresponding Unix manual entries for more information on calls."); #define HAVE_GETLOGIN 1 #define HAVE_SPAWNV 1 #define HAVE_EXECV 1 +#define HAVE_WSPAWNV 1 +#define HAVE_WEXECV 1 #define HAVE_PIPE 1 #define HAVE_SYSTEM 1 #define HAVE_CWAIT 1 @@ -735,7 +737,7 @@ dir_fd_converter(PyObject *o, void *p) * * * On Windows, if we get a (Unicode) string we * extract the wchar_t * and return it; if we get - * bytes we extract the char * and return that. + * bytes we decode to wchar_t * and return that. * * * On all other platforms, strings are encoded * to bytes using PyUnicode_FSConverter, then we @@ -767,7 +769,9 @@ dir_fd_converter(PyObject *o, void *p) * and was not encoded. (Only used on Windows.) * path.narrow * Points to the path if it was expressed as bytes, - * or it was Unicode and was encoded to bytes. + * or it was Unicode and was encoded to bytes. (On Windows, + * is an non-zero integer if the path was expressed as bytes. + * The type is deliberately incompatible to prevent misuse.) * path.fd * Contains a file descriptor if path.accept_fd was true * and the caller provided a signed integer instead of any @@ -812,15 +816,24 @@ typedef struct { int nullable; int allow_fd; const wchar_t *wide; +#ifdef MS_WINDOWS + BOOL narrow; +#else const char *narrow; +#endif int fd; Py_ssize_t length; PyObject *object; PyObject *cleanup; } path_t; +#ifdef MS_WINDOWS +#define PATH_T_INITIALIZE(function_name, argument_name, nullable, allow_fd) \ + {function_name, argument_name, nullable, allow_fd, NULL, FALSE, -1, 0, NULL, NULL} +#else #define PATH_T_INITIALIZE(function_name, argument_name, nullable, allow_fd) \ {function_name, argument_name, nullable, allow_fd, NULL, NULL, -1, 0, NULL, NULL} +#endif static void path_cleanup(path_t *path) { @@ -839,6 +852,10 @@ path_converter(PyObject *o, void *p) /* Default to failure, forcing explicit signaling of succcess. */ int ret = 0; const char *narrow; +#ifdef MS_WINDOWS + PyObject *wo; + const wchar_t *wide; +#endif #define FORMAT_EXCEPTION(exc, fmt) \ PyErr_Format(exc, "%s%s" fmt, \ @@ -857,7 +874,11 @@ path_converter(PyObject *o, void *p) if ((o == Py_None) && path->nullable) { path->wide = NULL; +#ifdef MS_WINDOWS + path->narrow = FALSE; +#else path->narrow = NULL; +#endif path->length = 0; path->object = o; path->fd = -1; @@ -899,9 +920,7 @@ path_converter(PyObject *o, void *p) if (is_unicode) { #ifdef MS_WINDOWS - const wchar_t *wide; - - wide = PyUnicode_AsUnicodeAndSize(o, &length); + wide = PyUnicode_AsWideCharString(o, &length); if (!wide) { goto exit; } @@ -915,7 +934,6 @@ path_converter(PyObject *o, void *p) } path->wide = wide; - path->narrow = NULL; path->length = length; path->object = o; path->fd = -1; @@ -928,11 +946,6 @@ path_converter(PyObject *o, void *p) #endif } else if (is_bytes) { -#ifdef MS_WINDOWS - if (win32_warn_bytes_api()) { - goto exit; - } -#endif bytes = o; Py_INCREF(bytes); } @@ -950,22 +963,21 @@ path_converter(PyObject *o, void *p) Py_TYPE(o)->tp_name)) { goto exit; } -#ifdef MS_WINDOWS - if (win32_warn_bytes_api()) { - goto exit; - } -#endif bytes = PyBytes_FromObject(o); if (!bytes) { goto exit; } } - else if (path->allow_fd && PyIndex_Check(o)) { + else if (is_index) { if (!_fd_converter(o, &path->fd)) { goto exit; } path->wide = NULL; +#ifdef MS_WINDOWS + path->narrow = FALSE; +#else path->narrow = NULL; +#endif path->length = 0; path->object = o; ret = 1; @@ -987,14 +999,6 @@ path_converter(PyObject *o, void *p) } length = PyBytes_GET_SIZE(bytes); -#ifdef MS_WINDOWS - if (length > MAX_PATH-1) { - FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows"); - Py_DECREF(bytes); - goto exit; - } -#endif - narrow = PyBytes_AS_STRING(bytes); if ((size_t)length != strlen(narrow)) { FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s"); @@ -1002,8 +1006,35 @@ path_converter(PyObject *o, void *p) goto exit; } +#ifdef MS_WINDOWS + wo = PyUnicode_DecodeFSDefaultAndSize( + narrow, + length + ); + if (!wo) { + goto exit; + } + + wide = PyUnicode_AsWideCharString(wo, &length); + Py_DECREF(wo); + + if (!wide) { + goto exit; + } + if (length > 32767) { + FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows"); + goto exit; + } + if (wcslen(wide) != length) { + FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s"); + goto exit; + } + path->wide = wide; + path->narrow = TRUE; +#else path->wide = NULL; path->narrow = narrow; +#endif path->length = length; path->object = o; path->fd = -1; @@ -1067,7 +1098,11 @@ follow_symlinks_specified(const char *function_name, int follow_symlinks) static int path_and_dir_fd_invalid(const char *function_name, path_t *path, int dir_fd) { - if (!path->narrow && !path->wide && (dir_fd != DEFAULT_DIR_FD)) { + if (!path->wide && (dir_fd != DEFAULT_DIR_FD) +#ifndef MS_WINDOWS + && !path->narrow +#endif + ) { PyErr_Format(PyExc_ValueError, "%s: can't specify dir_fd without matching path", function_name); @@ -1397,31 +1432,6 @@ posix_fildes_fd(int fd, int (*func)(int)) it also needs to set "magic" environment variables indicating the per-drive current directory, which are of the form =: */ static BOOL __stdcall -win32_chdir(LPCSTR path) -{ - char new_path[MAX_PATH]; - int result; - char env[4] = "=x:"; - - if(!SetCurrentDirectoryA(path)) - return FALSE; - result = GetCurrentDirectoryA(Py_ARRAY_LENGTH(new_path), new_path); - if (!result) - return FALSE; - /* In the ANSI API, there should not be any paths longer - than MAX_PATH-1 (not including the final null character). */ - assert(result < Py_ARRAY_LENGTH(new_path)); - if (strncmp(new_path, "\\\\", 2) == 0 || - strncmp(new_path, "//", 2) == 0) - /* UNC path, nothing to do. */ - return TRUE; - env[1] = new_path[0]; - return SetEnvironmentVariableA(env, new_path); -} - -/* The Unicode version differs from the ANSI version - since the current directory might exceed MAX_PATH characters */ -static BOOL __stdcall win32_wchdir(LPCWSTR path) { wchar_t path_buf[MAX_PATH], *new_path = path_buf; @@ -1467,33 +1477,10 @@ win32_wchdir(LPCWSTR path) #define HAVE_STAT_NSEC 1 #define HAVE_STRUCT_STAT_ST_FILE_ATTRIBUTES 1 -static BOOL -attributes_from_dir(LPCSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *reparse_tag) -{ - HANDLE hFindFile; - WIN32_FIND_DATAA FileData; - hFindFile = FindFirstFileA(pszFile, &FileData); - if (hFindFile == INVALID_HANDLE_VALUE) - return FALSE; - FindClose(hFindFile); - memset(info, 0, sizeof(*info)); - *reparse_tag = 0; - info->dwFileAttributes = FileData.dwFileAttributes; - info->ftCreationTime = FileData.ftCreationTime; - info->ftLastAccessTime = FileData.ftLastAccessTime; - info->ftLastWriteTime = FileData.ftLastWriteTime; - info->nFileSizeHigh = FileData.nFileSizeHigh; - info->nFileSizeLow = FileData.nFileSizeLow; -/* info->nNumberOfLinks = 1; */ - if (FileData.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) - *reparse_tag = FileData.dwReserved0; - return TRUE; -} - static void -find_data_to_file_info_w(WIN32_FIND_DATAW *pFileData, - BY_HANDLE_FILE_INFORMATION *info, - ULONG *reparse_tag) +find_data_to_file_info(WIN32_FIND_DATAW *pFileData, + BY_HANDLE_FILE_INFORMATION *info, + ULONG *reparse_tag) { memset(info, 0, sizeof(*info)); info->dwFileAttributes = pFileData->dwFileAttributes; @@ -1510,7 +1497,7 @@ find_data_to_file_info_w(WIN32_FIND_DATAW *pFileData, } static BOOL -attributes_from_dir_w(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *reparse_tag) +attributes_from_dir(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *reparse_tag) { HANDLE hFindFile; WIN32_FIND_DATAW FileData; @@ -1518,7 +1505,7 @@ attributes_from_dir_w(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG * if (hFindFile == INVALID_HANDLE_VALUE) return FALSE; FindClose(hFindFile); - find_data_to_file_info_w(&FileData, info, reparse_tag); + find_data_to_file_info(&FileData, info, reparse_tag); return TRUE; } @@ -1561,101 +1548,8 @@ get_target_path(HANDLE hdl, wchar_t **target_path) } static int -win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, - BOOL traverse); -static int -win32_xstat_impl(const char *path, struct _Py_stat_struct *result, +win32_xstat_impl(const wchar_t *path, struct _Py_stat_struct *result, BOOL traverse) -{ - int code; - HANDLE hFile, hFile2; - BY_HANDLE_FILE_INFORMATION info; - ULONG reparse_tag = 0; - wchar_t *target_path; - const char *dot; - - hFile = CreateFileA( - path, - FILE_READ_ATTRIBUTES, /* desired access */ - 0, /* share mode */ - NULL, /* security attributes */ - OPEN_EXISTING, - /* FILE_FLAG_BACKUP_SEMANTICS is required to open a directory */ - /* FILE_FLAG_OPEN_REPARSE_POINT does not follow the symlink. - Because of this, calls like GetFinalPathNameByHandle will return - the symlink path again and not the actual final path. */ - FILE_ATTRIBUTE_NORMAL|FILE_FLAG_BACKUP_SEMANTICS| - FILE_FLAG_OPEN_REPARSE_POINT, - NULL); - - if (hFile == INVALID_HANDLE_VALUE) { - /* Either the target doesn't exist, or we don't have access to - get a handle to it. If the former, we need to return an error. - If the latter, we can use attributes_from_dir. */ - if (GetLastError() != ERROR_SHARING_VIOLATION) - return -1; - /* Could not get attributes on open file. Fall back to - reading the directory. */ - if (!attributes_from_dir(path, &info, &reparse_tag)) - /* Very strange. This should not fail now */ - return -1; - if (info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) { - if (traverse) { - /* Should traverse, but could not open reparse point handle */ - SetLastError(ERROR_SHARING_VIOLATION); - return -1; - } - } - } else { - if (!GetFileInformationByHandle(hFile, &info)) { - CloseHandle(hFile); - return -1; - } - if (info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) { - if (!win32_get_reparse_tag(hFile, &reparse_tag)) - return -1; - - /* Close the outer open file handle now that we're about to - reopen it with different flags. */ - if (!CloseHandle(hFile)) - return -1; - - if (traverse) { - /* In order to call GetFinalPathNameByHandle we need to open - the file without the reparse handling flag set. */ - hFile2 = CreateFileA( - path, FILE_READ_ATTRIBUTES, FILE_SHARE_READ, - NULL, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL|FILE_FLAG_BACKUP_SEMANTICS, - NULL); - if (hFile2 == INVALID_HANDLE_VALUE) - return -1; - - if (!get_target_path(hFile2, &target_path)) - return -1; - - code = win32_xstat_impl_w(target_path, result, FALSE); - PyMem_RawFree(target_path); - return code; - } - } else - CloseHandle(hFile); - } - _Py_attribute_data_to_stat(&info, reparse_tag, result); - - /* Set S_IEXEC if it is an .exe, .bat, ... */ - dot = strrchr(path, '.'); - if (dot) { - if (stricmp(dot, ".bat") == 0 || stricmp(dot, ".cmd") == 0 || - stricmp(dot, ".exe") == 0 || stricmp(dot, ".com") == 0) - result->st_mode |= 0111; - } - return 0; -} - -static int -win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, - BOOL traverse) { int code; HANDLE hFile, hFile2; @@ -1686,7 +1580,7 @@ win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, return -1; /* Could not get attributes on open file. Fall back to reading the directory. */ - if (!attributes_from_dir_w(path, &info, &reparse_tag)) + if (!attributes_from_dir(path, &info, &reparse_tag)) /* Very strange. This should not fail now */ return -1; if (info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) { @@ -1724,7 +1618,7 @@ win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, if (!get_target_path(hFile2, &target_path)) return -1; - code = win32_xstat_impl_w(target_path, result, FALSE); + code = win32_xstat_impl(target_path, result, FALSE); PyMem_RawFree(target_path); return code; } @@ -1744,7 +1638,7 @@ win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, } static int -win32_xstat(const char *path, struct _Py_stat_struct *result, BOOL traverse) +win32_xstat(const wchar_t *path, struct _Py_stat_struct *result, BOOL traverse) { /* Protocol violation: we explicitly clear errno, instead of setting it to a POSIX error. Callers should use GetLastError. */ @@ -1752,16 +1646,6 @@ win32_xstat(const char *path, struct _Py_stat_struct *result, BOOL traverse) errno = 0; return code; } - -static int -win32_xstat_w(const wchar_t *path, struct _Py_stat_struct *result, BOOL traverse) -{ - /* Protocol violation: we explicitly clear errno, instead of - setting it to a POSIX error. Callers should use GetLastError. */ - int code = win32_xstat_impl_w(path, result, traverse); - errno = 0; - return code; -} /* About the following functions: win32_lstat_w, win32_stat, win32_stat_w In Posix, stat automatically traverses symlinks and returns the stat @@ -1771,34 +1655,20 @@ win32_xstat_w(const wchar_t *path, struct _Py_stat_struct *result, BOOL traverse Therefore, win32_lstat will get the attributes traditionally, and win32_stat will first explicitly resolve the symlink target and then will - call win32_lstat on that result. - - The _w represent Unicode equivalents of the aforementioned ANSI functions. */ + call win32_lstat on that result. */ static int -win32_lstat(const char* path, struct _Py_stat_struct *result) +win32_lstat(const wchar_t* path, struct _Py_stat_struct *result) { return win32_xstat(path, result, FALSE); } static int -win32_lstat_w(const wchar_t* path, struct _Py_stat_struct *result) -{ - return win32_xstat_w(path, result, FALSE); -} - -static int -win32_stat(const char* path, struct _Py_stat_struct *result) +win32_stat(const wchar_t* path, struct _Py_stat_struct *result) { return win32_xstat(path, result, TRUE); } -static int -win32_stat_w(const wchar_t* path, struct _Py_stat_struct *result) -{ - return win32_xstat_w(path, result, TRUE); -} - #endif /* MS_WINDOWS */ PyDoc_STRVAR(stat_result__doc__, @@ -2200,26 +2070,25 @@ posix_do_stat(const char *function_name, path_t *path, result = FSTAT(path->fd, &st); else #ifdef MS_WINDOWS - if (path->wide) { - if (follow_symlinks) - result = win32_stat_w(path->wide, &st); - else - result = win32_lstat_w(path->wide, &st); - } + if (follow_symlinks) + result = win32_stat(path->wide, &st); else -#endif -#if defined(HAVE_LSTAT) || defined(MS_WINDOWS) + result = win32_lstat(path->wide, &st); +#else + else +#if defined(HAVE_LSTAT) if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD)) result = LSTAT(path->narrow, &st); else -#endif +#endif /* HAVE_LSTAT */ #ifdef HAVE_FSTATAT if ((dir_fd != DEFAULT_DIR_FD) || !follow_symlinks) result = fstatat(dir_fd, path->narrow, &st, follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW); else -#endif +#endif /* HAVE_FSTATAT */ result = STAT(path->narrow, &st); +#endif /* MS_WINDOWS */ Py_END_ALLOW_THREADS if (result != 0) { @@ -2655,10 +2524,7 @@ os_access_impl(PyObject *module, path_t *path, int mode, int dir_fd, #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (path->wide != NULL) - attr = GetFileAttributesW(path->wide); - else - attr = GetFileAttributesA(path->narrow); + attr = GetFileAttributesW(path->wide); Py_END_ALLOW_THREADS /* @@ -2782,11 +2648,8 @@ os_chdir_impl(PyObject *module, path_t *path) Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - if (path->wide) - result = win32_wchdir(path->wide); - else - result = win32_chdir(path->narrow); - result = !result; /* on unix, success = 0, on windows, success = !0 */ + /* on unix, success = 0, on windows, success = !0 */ + result = !win32_wchdir(path->wide); #else #ifdef HAVE_FCHDIR if (path->fd != -1) @@ -2881,10 +2744,7 @@ os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (path->wide) - attr = GetFileAttributesW(path->wide); - else - attr = GetFileAttributesA(path->narrow); + attr = GetFileAttributesW(path->wide); if (attr == INVALID_FILE_ATTRIBUTES) result = 0; else { @@ -2892,10 +2752,7 @@ os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, attr &= ~FILE_ATTRIBUTE_READONLY; else attr |= FILE_ATTRIBUTE_READONLY; - if (path->wide) - result = SetFileAttributesW(path->wide, attr); - else - result = SetFileAttributesA(path->narrow, attr); + result = SetFileAttributesW(path->wide, attr); } Py_END_ALLOW_THREADS @@ -3488,7 +3345,7 @@ os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, /*[clinic end generated code: output=7f00f6007fd5269a input=b0095ebbcbaa7e04]*/ { #ifdef MS_WINDOWS - BOOL result; + BOOL result = FALSE; #else int result; #endif @@ -3500,18 +3357,18 @@ os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, } #endif +#ifndef MS_WINDOWS if ((src->narrow && dst->wide) || (src->wide && dst->narrow)) { PyErr_SetString(PyExc_NotImplementedError, "link: src and dst must be the same type"); return NULL; } +#endif #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS if (src->wide) result = CreateHardLinkW(dst->wide, src->wide, NULL); - else - result = CreateHardLinkA(dst->narrow, src->narrow, NULL); Py_END_ALLOW_THREADS if (!result) @@ -3526,13 +3383,13 @@ os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, dst_dir_fd, dst->narrow, follow_symlinks ? AT_SYMLINK_FOLLOW : 0); else -#endif +#endif /* HAVE_LINKAT */ result = link(src->narrow, dst->narrow); Py_END_ALLOW_THREADS if (result) return path_error2(src, dst); -#endif +#endif /* MS_WINDOWS */ Py_RETURN_NONE; } @@ -3546,97 +3403,39 @@ _listdir_windows_no_opendir(path_t *path, PyObject *list) PyObject *v; HANDLE hFindFile = INVALID_HANDLE_VALUE; BOOL result; - WIN32_FIND_DATA FileData; - char namebuf[MAX_PATH+4]; /* Overallocate for "\*.*" */ + wchar_t namebuf[MAX_PATH+4]; /* Overallocate for "\*.*" */ /* only claim to have space for MAX_PATH */ Py_ssize_t len = Py_ARRAY_LENGTH(namebuf)-4; wchar_t *wnamebuf = NULL; - if (!path->narrow) { - WIN32_FIND_DATAW wFileData; - const wchar_t *po_wchars; - - if (!path->wide) { /* Default arg: "." */ - po_wchars = L"."; - len = 1; - } else { - po_wchars = path->wide; - len = wcslen(path->wide); - } - /* The +5 is so we can append "\\*.*\0" */ - wnamebuf = PyMem_New(wchar_t, len + 5); - if (!wnamebuf) { - PyErr_NoMemory(); - goto exit; - } - wcscpy(wnamebuf, po_wchars); - if (len > 0) { - wchar_t wch = wnamebuf[len-1]; - if (wch != SEP && wch != ALTSEP && wch != L':') - wnamebuf[len++] = SEP; - wcscpy(wnamebuf + len, L"*.*"); - } - if ((list = PyList_New(0)) == NULL) { - goto exit; - } - Py_BEGIN_ALLOW_THREADS - hFindFile = FindFirstFileW(wnamebuf, &wFileData); - Py_END_ALLOW_THREADS - if (hFindFile == INVALID_HANDLE_VALUE) { - int error = GetLastError(); - if (error == ERROR_FILE_NOT_FOUND) - goto exit; - Py_DECREF(list); - list = path_error(path); - goto exit; - } - do { - /* Skip over . and .. */ - if (wcscmp(wFileData.cFileName, L".") != 0 && - wcscmp(wFileData.cFileName, L"..") != 0) { - v = PyUnicode_FromWideChar(wFileData.cFileName, - wcslen(wFileData.cFileName)); - if (v == NULL) { - Py_DECREF(list); - list = NULL; - break; - } - if (PyList_Append(list, v) != 0) { - Py_DECREF(v); - Py_DECREF(list); - list = NULL; - break; - } - Py_DECREF(v); - } - Py_BEGIN_ALLOW_THREADS - result = FindNextFileW(hFindFile, &wFileData); - Py_END_ALLOW_THREADS - /* FindNextFile sets error to ERROR_NO_MORE_FILES if - it got to the end of the directory. */ - if (!result && GetLastError() != ERROR_NO_MORE_FILES) { - Py_DECREF(list); - list = path_error(path); - goto exit; - } - } while (result == TRUE); + WIN32_FIND_DATAW wFileData; + const wchar_t *po_wchars; + if (!path->wide) { /* Default arg: "." */ + po_wchars = L"."; + len = 1; + } else { + po_wchars = path->wide; + len = wcslen(path->wide); + } + /* The +5 is so we can append "\\*.*\0" */ + wnamebuf = PyMem_New(wchar_t, len + 5); + if (!wnamebuf) { + PyErr_NoMemory(); goto exit; } - strcpy(namebuf, path->narrow); - len = path->length; + wcscpy(wnamebuf, po_wchars); if (len > 0) { - char ch = namebuf[len-1]; - if (ch != '\\' && ch != '/' && ch != ':') - namebuf[len++] = '\\'; - strcpy(namebuf + len, "*.*"); + wchar_t wch = wnamebuf[len-1]; + if (wch != SEP && wch != ALTSEP && wch != L':') + wnamebuf[len++] = SEP; + wcscpy(wnamebuf + len, L"*.*"); + } + if ((list = PyList_New(0)) == NULL) { + goto exit; } - - if ((list = PyList_New(0)) == NULL) - return NULL; - Py_BEGIN_ALLOW_THREADS - hFindFile = FindFirstFile(namebuf, &FileData); + hFindFile = FindFirstFileW(wnamebuf, &wFileData); Py_END_ALLOW_THREADS if (hFindFile == INVALID_HANDLE_VALUE) { int error = GetLastError(); @@ -3648,9 +3447,13 @@ _listdir_windows_no_opendir(path_t *path, PyObject *list) } do { /* Skip over . and .. */ - if (strcmp(FileData.cFileName, ".") != 0 && - strcmp(FileData.cFileName, "..") != 0) { - v = PyBytes_FromString(FileData.cFileName); + if (wcscmp(wFileData.cFileName, L".") != 0 && + wcscmp(wFileData.cFileName, L"..") != 0) { + v = PyUnicode_FromWideChar(wFileData.cFileName, + wcslen(wFileData.cFileName)); + if (path->narrow && v) { + Py_SETREF(v, PyUnicode_EncodeFSDefault(v)); + } if (v == NULL) { Py_DECREF(list); list = NULL; @@ -3665,7 +3468,7 @@ _listdir_windows_no_opendir(path_t *path, PyObject *list) Py_DECREF(v); } Py_BEGIN_ALLOW_THREADS - result = FindNextFile(hFindFile, &FileData); + result = FindNextFileW(hFindFile, &wFileData); Py_END_ALLOW_THREADS /* FindNextFile sets error to ERROR_NO_MORE_FILES if it got to the end of the directory. */ @@ -3846,41 +3649,29 @@ static PyObject * os__getfullpathname_impl(PyObject *module, path_t *path) /*[clinic end generated code: output=bb8679d56845bc9b input=332ed537c29d0a3e]*/ { - if (!path->narrow) - { - wchar_t woutbuf[MAX_PATH], *woutbufp = woutbuf; - wchar_t *wtemp; - DWORD result; - PyObject *v; - - result = GetFullPathNameW(path->wide, - Py_ARRAY_LENGTH(woutbuf), - woutbuf, &wtemp); - if (result > Py_ARRAY_LENGTH(woutbuf)) { - woutbufp = PyMem_New(wchar_t, result); - if (!woutbufp) - return PyErr_NoMemory(); - result = GetFullPathNameW(path->wide, result, woutbufp, &wtemp); - } - if (result) - v = PyUnicode_FromWideChar(woutbufp, wcslen(woutbufp)); - else - v = win32_error_object("GetFullPathNameW", path->object); - if (woutbufp != woutbuf) - PyMem_Free(woutbufp); - return v; - } - else { - char outbuf[MAX_PATH]; - char *temp; + wchar_t woutbuf[MAX_PATH], *woutbufp = woutbuf; + wchar_t *wtemp; + DWORD result; + PyObject *v; - if (!GetFullPathName(path->narrow, Py_ARRAY_LENGTH(outbuf), - outbuf, &temp)) { - win32_error_object("GetFullPathName", path->object); - return NULL; - } - return PyBytes_FromString(outbuf); + result = GetFullPathNameW(path->wide, + Py_ARRAY_LENGTH(woutbuf), + woutbuf, &wtemp); + if (result > Py_ARRAY_LENGTH(woutbuf)) { + woutbufp = PyMem_New(wchar_t, result); + if (!woutbufp) + return PyErr_NoMemory(); + result = GetFullPathNameW(path->wide, result, woutbufp, &wtemp); } + if (result) { + v = PyUnicode_FromWideChar(woutbufp, wcslen(woutbufp)); + if (path->narrow) + Py_SETREF(v, PyUnicode_EncodeFSDefault(v)); + } else + v = win32_error_object("GetFullPathNameW", path->object); + if (woutbufp != woutbuf) + PyMem_Free(woutbufp); + return v; } @@ -3964,10 +3755,7 @@ os__isdir_impl(PyObject *module, path_t *path) DWORD attributes; Py_BEGIN_ALLOW_THREADS - if (!path->narrow) - attributes = GetFileAttributesW(path->wide); - else - attributes = GetFileAttributesA(path->narrow); + attributes = GetFileAttributesW(path->wide); Py_END_ALLOW_THREADS if (attributes == INVALID_FILE_ATTRIBUTES) @@ -4065,10 +3853,7 @@ os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd) #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (path->wide) - result = CreateDirectoryW(path->wide, NULL); - else - result = CreateDirectoryA(path->narrow, NULL); + result = CreateDirectoryW(path->wide, NULL); Py_END_ALLOW_THREADS if (!result) @@ -4088,7 +3873,7 @@ os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd) Py_END_ALLOW_THREADS if (result < 0) return path_error(path); -#endif +#endif /* MS_WINDOWS */ Py_RETURN_NONE; } @@ -4211,31 +3996,28 @@ internal_rename(path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int is } #endif - if ((src->narrow && dst->wide) || (src->wide && dst->narrow)) { - PyErr_Format(PyExc_ValueError, - "%s: src and dst must be the same type", function_name); - return NULL; - } - #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (src->wide) - result = MoveFileExW(src->wide, dst->wide, flags); - else - result = MoveFileExA(src->narrow, dst->narrow, flags); + result = MoveFileExW(src->wide, dst->wide, flags); Py_END_ALLOW_THREADS if (!result) return path_error2(src, dst); #else + if ((src->narrow && dst->wide) || (src->wide && dst->narrow)) { + PyErr_Format(PyExc_ValueError, + "%s: src and dst must be the same type", function_name); + return NULL; + } + Py_BEGIN_ALLOW_THREADS #ifdef HAVE_RENAMEAT if (dir_fd_specified) result = renameat(src_dir_fd, src->narrow, dst_dir_fd, dst->narrow); else #endif - result = rename(src->narrow, dst->narrow); + result = rename(src->narrow, dst->narrow); Py_END_ALLOW_THREADS if (result) @@ -4316,11 +4098,8 @@ os_rmdir_impl(PyObject *module, path_t *path, int dir_fd) Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - if (path->wide) - result = RemoveDirectoryW(path->wide); - else - result = RemoveDirectoryA(path->narrow); - result = !result; /* Windows, success=1, UNIX, success=0 */ + /* Windows, success=1, UNIX, success=0 */ + result = !RemoveDirectoryW(path->wide); #else #ifdef HAVE_UNLINKAT if (dir_fd != DEFAULT_DIR_FD) @@ -4466,11 +4245,8 @@ os_unlink_impl(PyObject *module, path_t *path, int dir_fd) Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS - if (path->wide) - result = Py_DeleteFileW(path->wide); - else - result = DeleteFileA(path->narrow); - result = !result; /* Windows, success=1, UNIX, success=0 */ + /* Windows, success=1, UNIX, success=0 */ + result = !Py_DeleteFileW(path->wide); #else #ifdef HAVE_UNLINKAT if (dir_fd != DEFAULT_DIR_FD) @@ -4881,14 +4657,9 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (path->wide) - hFile = CreateFileW(path->wide, FILE_WRITE_ATTRIBUTES, 0, - NULL, OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, NULL); - else - hFile = CreateFileA(path->narrow, FILE_WRITE_ATTRIBUTES, 0, - NULL, OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, NULL); + hFile = CreateFileW(path->wide, FILE_WRITE_ATTRIBUTES, 0, + NULL, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, NULL); Py_END_ALLOW_THREADS if (hFile == INVALID_HANDLE_VALUE) { path_error(path); @@ -4974,9 +4745,15 @@ os__exit_impl(PyObject *module, int status) return NULL; /* Make gcc -Wall happy */ } +#if defined(HAVE_WEXECV) || defined(HAVE_WSPAWNV) +#define EXECV_CHAR wchar_t +#else +#define EXECV_CHAR char +#endif + #if defined(HAVE_EXECV) || defined(HAVE_SPAWNV) static void -free_string_array(char **array, Py_ssize_t count) +free_string_array(EXECV_CHAR **array, Py_ssize_t count) { Py_ssize_t i; for (i = 0; i < count; i++) @@ -4985,10 +4762,15 @@ free_string_array(char **array, Py_ssize_t count) } static -int fsconvert_strdup(PyObject *o, char**out) +int fsconvert_strdup(PyObject *o, EXECV_CHAR**out) { - PyObject *bytes; Py_ssize_t size; +#if defined(HAVE_WEXECV) || defined(HAVE_WSPAWNV) + *out = PyUnicode_AsWideCharString(o, &size); + if (!*out) + return 0; +#else + PyObject *bytes; if (!PyUnicode_FSConverter(o, &bytes)) return 0; size = PyBytes_GET_SIZE(bytes); @@ -4999,26 +4781,24 @@ int fsconvert_strdup(PyObject *o, char**out) } memcpy(*out, PyBytes_AsString(bytes), size+1); Py_DECREF(bytes); +#endif return 1; } #endif #if defined(HAVE_EXECV) || defined (HAVE_FEXECVE) -static char** +static EXECV_CHAR** parse_envlist(PyObject* env, Py_ssize_t *envc_ptr) { - char **envlist; Py_ssize_t i, pos, envc; PyObject *keys=NULL, *vals=NULL; - PyObject *key, *val, *key2, *val2; - char *p; - const char *k, *v; - size_t len; + PyObject *key, *val, *keyval; + EXECV_CHAR **envlist; i = PyMapping_Size(env); if (i < 0) return NULL; - envlist = PyMem_NEW(char *, i + 1); + envlist = PyMem_NEW(EXECV_CHAR *, i + 1); if (envlist == NULL) { PyErr_NoMemory(); return NULL; @@ -5042,28 +4822,16 @@ parse_envlist(PyObject* env, Py_ssize_t *envc_ptr) if (!key || !val) goto error; - if (PyUnicode_FSConverter(key, &key2) == 0) - goto error; - if (PyUnicode_FSConverter(val, &val2) == 0) { - Py_DECREF(key2); + keyval = PyUnicode_FromFormat("%U=%U", key, val); + if (!keyval) goto error; - } - k = PyBytes_AsString(key2); - v = PyBytes_AsString(val2); - len = PyBytes_GET_SIZE(key2) + PyBytes_GET_SIZE(val2) + 2; - - p = PyMem_NEW(char, len); - if (p == NULL) { - PyErr_NoMemory(); - Py_DECREF(key2); - Py_DECREF(val2); + if (!fsconvert_strdup(keyval, &envlist[envc++])) { + Py_DECREF(keyval); goto error; } - PyOS_snprintf(p, len, "%s=%s", k, v); - envlist[envc++] = p; - Py_DECREF(key2); - Py_DECREF(val2); + + Py_DECREF(keyval); } Py_DECREF(vals); Py_DECREF(keys); @@ -5075,17 +4843,15 @@ parse_envlist(PyObject* env, Py_ssize_t *envc_ptr) error: Py_XDECREF(keys); Py_XDECREF(vals); - while (--envc >= 0) - PyMem_DEL(envlist[envc]); - PyMem_DEL(envlist); + free_string_array(envlist, envc); return NULL; } -static char** +static EXECV_CHAR** parse_arglist(PyObject* argv, Py_ssize_t *argc) { int i; - char **argvlist = PyMem_NEW(char *, *argc+1); + EXECV_CHAR **argvlist = PyMem_NEW(EXECV_CHAR *, *argc+1); if (argvlist == NULL) { PyErr_NoMemory(); return NULL; @@ -5107,6 +4873,7 @@ fail: free_string_array(argvlist, *argc); return NULL; } + #endif @@ -5114,7 +4881,7 @@ fail: /*[clinic input] os.execv - path: FSConverter + path: path_t Path of executable file. argv: object Tuple or list of strings. @@ -5124,17 +4891,15 @@ Execute an executable path with arguments, replacing current process. [clinic start generated code]*/ static PyObject * -os_execv_impl(PyObject *module, PyObject *path, PyObject *argv) -/*[clinic end generated code: output=b21dc34deeb5b004 input=96041559925e5229]*/ +os_execv_impl(PyObject *module, path_t *path, PyObject *argv) +/*[clinic end generated code: output=3b52fec34cd0dafd input=9bac31efae07dac7]*/ { - const char *path_char; - char **argvlist; + EXECV_CHAR **argvlist; Py_ssize_t argc; /* execv has two arguments: (path, argv), where argv is a list or tuple of strings. */ - path_char = PyBytes_AsString(path); if (!PyList_Check(argv) && !PyTuple_Check(argv)) { PyErr_SetString(PyExc_TypeError, "execv() arg 2 must be a tuple or list"); @@ -5151,7 +4916,11 @@ os_execv_impl(PyObject *module, PyObject *path, PyObject *argv) return NULL; } - execv(path_char, argvlist); +#ifdef HAVE_WEXECV + _wexecv(path->wide, argvlist); +#else + execv(path->narrow, argvlist); +#endif /* If we get here it's definitely an error */ @@ -5177,8 +4946,8 @@ static PyObject * os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env) /*[clinic end generated code: output=ff9fa8e4da8bde58 input=626804fa092606d9]*/ { - char **argvlist = NULL; - char **envlist; + EXECV_CHAR **argvlist = NULL; + EXECV_CHAR **envlist; Py_ssize_t argc, envc; /* execve has three arguments: (path, argv, env), where @@ -5211,30 +4980,33 @@ os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env) fexecve(path->fd, argvlist, envlist); else #endif +#ifdef HAVE_WEXECV + _wexecve(path->wide, argvlist, envlist); +#else execve(path->narrow, argvlist, envlist); +#endif /* If we get here it's definitely an error */ path_error(path); - while (--envc >= 0) - PyMem_DEL(envlist[envc]); - PyMem_DEL(envlist); + free_string_array(envlist, envc); fail: if (argvlist) free_string_array(argvlist, argc); return NULL; } + #endif /* HAVE_EXECV */ -#ifdef HAVE_SPAWNV +#if defined(HAVE_SPAWNV) || defined(HAVE_WSPAWNV) /*[clinic input] os.spawnv mode: int Mode of process creation. - path: FSConverter + path: path_t Path of executable file. argv: object Tuple or list of strings. @@ -5244,11 +5016,10 @@ Execute the program specified by path in a new process. [clinic start generated code]*/ static PyObject * -os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv) -/*[clinic end generated code: output=c427c0ce40f10638 input=042c91dfc1e6debc]*/ +os_spawnv_impl(PyObject *module, int mode, path_t *path, PyObject *argv) +/*[clinic end generated code: output=71cd037a9d96b816 input=43224242303291be]*/ { - const char *path_char; - char **argvlist; + EXECV_CHAR **argvlist; int i; Py_ssize_t argc; intptr_t spawnval; @@ -5257,7 +5028,6 @@ os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv) /* spawnv has three arguments: (mode, path, argv), where argv is a list or tuple of strings. */ - path_char = PyBytes_AsString(path); if (PyList_Check(argv)) { argc = PyList_Size(argv); getitem = PyList_GetItem; @@ -5272,7 +5042,7 @@ os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv) return NULL; } - argvlist = PyMem_NEW(char *, argc+1); + argvlist = PyMem_NEW(EXECV_CHAR *, argc+1); if (argvlist == NULL) { return PyErr_NoMemory(); } @@ -5292,7 +5062,11 @@ os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv) mode = _P_OVERLAY; Py_BEGIN_ALLOW_THREADS - spawnval = _spawnv(mode, path_char, argvlist); +#ifdef HAVE_WSPAWNV + spawnval = _wspawnv(mode, path->wide, argvlist); +#else + spawnval = _spawnv(mode, path->narrow, argvlist); +#endif Py_END_ALLOW_THREADS free_string_array(argvlist, argc); @@ -5309,7 +5083,7 @@ os.spawnve mode: int Mode of process creation. - path: FSConverter + path: path_t Path of executable file. argv: object Tuple or list of strings. @@ -5321,13 +5095,12 @@ Execute the program specified by path in a new process. [clinic start generated code]*/ static PyObject * -os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, +os_spawnve_impl(PyObject *module, int mode, path_t *path, PyObject *argv, PyObject *env) -/*[clinic end generated code: output=ebcfa5f7ba2f4219 input=02362fd937963f8f]*/ +/*[clinic end generated code: output=30fe85be56fe37ad input=3e40803ee7c4c586]*/ { - const char *path_char; - char **argvlist; - char **envlist; + EXECV_CHAR **argvlist; + EXECV_CHAR **envlist; PyObject *res = NULL; Py_ssize_t argc, i, envc; intptr_t spawnval; @@ -5338,7 +5111,6 @@ os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, argv is a list or tuple of strings and env is a dictionary like posix.environ. */ - path_char = PyBytes_AsString(path); if (PyList_Check(argv)) { argc = PyList_Size(argv); getitem = PyList_GetItem; @@ -5358,7 +5130,7 @@ os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, goto fail_0; } - argvlist = PyMem_NEW(char *, argc+1); + argvlist = PyMem_NEW(EXECV_CHAR *, argc+1); if (argvlist == NULL) { PyErr_NoMemory(); goto fail_0; @@ -5382,7 +5154,11 @@ os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, mode = _P_OVERLAY; Py_BEGIN_ALLOW_THREADS - spawnval = _spawnve(mode, path_char, argvlist, envlist); +#ifdef HAVE_WSPAWNV + spawnval = _wspawnve(mode, path->wide, argvlist, envlist); +#else + spawnval = _spawnve(mode, path->narrow, argvlist, envlist); +#endif Py_END_ALLOW_THREADS if (spawnval == -1) @@ -7290,21 +7066,18 @@ win_readlink(PyObject *self, PyObject *args, PyObject *kwargs) /* Grab CreateSymbolicLinkW dynamically from kernel32 */ static DWORD (CALLBACK *Py_CreateSymbolicLinkW)(LPCWSTR, LPCWSTR, DWORD) = NULL; -static DWORD (CALLBACK *Py_CreateSymbolicLinkA)(LPCSTR, LPCSTR, DWORD) = NULL; static int check_CreateSymbolicLink(void) { HINSTANCE hKernel32; /* only recheck */ - if (Py_CreateSymbolicLinkW && Py_CreateSymbolicLinkA) + if (Py_CreateSymbolicLinkW) return 1; hKernel32 = GetModuleHandleW(L"KERNEL32"); *(FARPROC*)&Py_CreateSymbolicLinkW = GetProcAddress(hKernel32, "CreateSymbolicLinkW"); - *(FARPROC*)&Py_CreateSymbolicLinkA = GetProcAddress(hKernel32, - "CreateSymbolicLinkA"); - return (Py_CreateSymbolicLinkW && Py_CreateSymbolicLinkA); + return Py_CreateSymbolicLinkW != NULL; } /* Remove the last portion of the path */ @@ -7321,20 +7094,6 @@ _dirnameW(WCHAR *path) *ptr = 0; } -/* Remove the last portion of the path */ -static void -_dirnameA(char *path) -{ - char *ptr; - - /* walk the path from the end until a backslash is encountered */ - for(ptr = path + strlen(path); ptr != path; ptr--) { - if (*ptr == '\\' || *ptr == '/') - break; - } - *ptr = 0; -} - /* Is this path absolute? */ static int _is_absW(const WCHAR *path) @@ -7343,14 +7102,6 @@ _is_absW(const WCHAR *path) } -/* Is this path absolute? */ -static int -_is_absA(const char *path) -{ - return path[0] == '\\' || path[0] == '/' || path[1] == ':'; - -} - /* join root and rest with a backslash */ static void _joinW(WCHAR *dest_path, const WCHAR *root, const WCHAR *rest) @@ -7372,27 +7123,6 @@ _joinW(WCHAR *dest_path, const WCHAR *root, const WCHAR *rest) wcscpy(dest_path+root_len, rest); } -/* join root and rest with a backslash */ -static void -_joinA(char *dest_path, const char *root, const char *rest) -{ - size_t root_len; - - if (_is_absA(rest)) { - strcpy(dest_path, rest); - return; - } - - root_len = strlen(root); - - strcpy(dest_path, root); - if(root_len) { - dest_path[root_len] = '\\'; - root_len++; - } - strcpy(dest_path+root_len, rest); -} - /* Return True if the path at src relative to dest is a directory */ static int _check_dirW(LPCWSTR src, LPCWSTR dest) @@ -7411,25 +7141,6 @@ _check_dirW(LPCWSTR src, LPCWSTR dest) && src_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ); } - -/* Return True if the path at src relative to dest is a directory */ -static int -_check_dirA(LPCSTR src, LPCSTR dest) -{ - WIN32_FILE_ATTRIBUTE_DATA src_info; - char dest_parent[MAX_PATH]; - char src_resolved[MAX_PATH] = ""; - - /* dest_parent = os.path.dirname(dest) */ - strcpy(dest_parent, dest); - _dirnameA(dest_parent); - /* src_resolved = os.path.join(dest_parent, src) */ - _joinA(src_resolved, dest_parent, src); - return ( - GetFileAttributesExA(src_resolved, GetFileExInfoStandard, &src_info) - && src_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY - ); -} #endif @@ -7489,18 +7200,10 @@ os_symlink_impl(PyObject *module, path_t *src, path_t *dst, #ifdef MS_WINDOWS Py_BEGIN_ALLOW_THREADS - if (dst->wide) { - /* if src is a directory, ensure target_is_directory==1 */ - target_is_directory |= _check_dirW(src->wide, dst->wide); - result = Py_CreateSymbolicLinkW(dst->wide, src->wide, - target_is_directory); - } - else { - /* if src is a directory, ensure target_is_directory==1 */ - target_is_directory |= _check_dirA(src->narrow, dst->narrow); - result = Py_CreateSymbolicLinkA(dst->narrow, src->narrow, - target_is_directory); - } + /* if src is a directory, ensure target_is_directory==1 */ + target_is_directory |= _check_dirW(src->wide, dst->wide); + result = Py_CreateSymbolicLinkW(dst->wide, src->wide, + target_is_directory); Py_END_ALLOW_THREADS if (!result) @@ -7805,16 +7508,14 @@ os_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd) do { Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS - if (path->wide) - fd = _wopen(path->wide, flags, mode); - else + fd = _wopen(path->wide, flags, mode); #endif #ifdef HAVE_OPENAT if (dir_fd != DEFAULT_DIR_FD) fd = openat(dir_fd, path->narrow, flags, mode); else -#endif fd = open(path->narrow, flags, mode); +#endif Py_END_ALLOW_THREADS } while (fd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); _Py_END_SUPPRESS_IPH @@ -8955,10 +8656,7 @@ os_truncate_impl(PyObject *module, path_t *path, Py_off_t length) Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS - if (path->wide) - fd = _wopen(path->wide, _O_WRONLY | _O_BINARY | _O_NOINHERIT); - else - fd = _open(path->narrow, _O_WRONLY | _O_BINARY | _O_NOINHERIT); + fd = _wopen(path->wide, _O_WRONLY | _O_BINARY | _O_NOINHERIT); if (fd < 0) result = -1; else { @@ -10612,31 +10310,8 @@ os_abort_impl(PyObject *module) } #ifdef MS_WINDOWS -/* AC 3.5: change to path_t? but that might change exceptions */ -PyDoc_STRVAR(win32_startfile__doc__, -"startfile(filepath [, operation])\n\ -\n\ -Start a file with its associated application.\n\ -\n\ -When \"operation\" is not specified or \"open\", this acts like\n\ -double-clicking the file in Explorer, or giving the file name as an\n\ -argument to the DOS \"start\" command: the file is opened with whatever\n\ -application (if any) its extension is associated.\n\ -When another \"operation\" is given, it specifies what should be done with\n\ -the file. A typical operation is \"print\".\n\ -\n\ -startfile returns as soon as the associated application is launched.\n\ -There is no option to wait for the application to close, and no way\n\ -to retrieve the application's exit status.\n\ -\n\ -The filepath is relative to the current directory. If you want to use\n\ -an absolute path, make sure the first character is not a slash (\"/\");\n\ -the underlying Win32 ShellExecute function doesn't work if it is."); - /* Grab ShellExecute dynamically from shell32 */ static int has_ShellExecute = -1; -static HINSTANCE (CALLBACK *Py_ShellExecuteA)(HWND, LPCSTR, LPCSTR, LPCSTR, - LPCSTR, INT); static HINSTANCE (CALLBACK *Py_ShellExecuteW)(HWND, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, INT); static int @@ -10650,12 +10325,9 @@ check_ShellExecute() hShell32 = LoadLibraryW(L"SHELL32"); Py_END_ALLOW_THREADS if (hShell32) { - *(FARPROC*)&Py_ShellExecuteA = GetProcAddress(hShell32, - "ShellExecuteA"); *(FARPROC*)&Py_ShellExecuteW = GetProcAddress(hShell32, "ShellExecuteW"); - has_ShellExecute = Py_ShellExecuteA && - Py_ShellExecuteW; + has_ShellExecute = Py_ShellExecuteW != NULL; } else { has_ShellExecute = 0; } @@ -10664,17 +10336,37 @@ check_ShellExecute() } +/*[clinic input] +os.startfile + filepath: path_t + operation: Py_UNICODE = NULL + +startfile(filepath [, operation]) + +Start a file with its associated application. + +When "operation" is not specified or "open", this acts like +double-clicking the file in Explorer, or giving the file name as an +argument to the DOS "start" command: the file is opened with whatever +application (if any) its extension is associated. +When another "operation" is given, it specifies what should be done with +the file. A typical operation is "print". + +startfile returns as soon as the associated application is launched. +There is no option to wait for the application to close, and no way +to retrieve the application's exit status. + +The filepath is relative to the current directory. If you want to use +an absolute path, make sure the first character is not a slash ("/"); +the underlying Win32 ShellExecute function doesn't work if it is. +[clinic start generated code]*/ + static PyObject * -win32_startfile(PyObject *self, PyObject *args) +os_startfile_impl(PyObject *module, path_t *filepath, Py_UNICODE *operation) +/*[clinic end generated code: output=912ceba79acfa1c9 input=63950bf2986380d0]*/ { - PyObject *ofilepath; - const char *filepath; - const char *operation = NULL; - const wchar_t *wpath, *woperation; HINSTANCE rc; - PyObject *unipath, *uoperation = NULL; - if(!check_ShellExecute()) { /* If the OS doesn't have ShellExecute, return a NotImplementedError. */ @@ -10682,68 +10374,16 @@ win32_startfile(PyObject *self, PyObject *args) "startfile not available on this platform"); } - if (!PyArg_ParseTuple(args, "U|s:startfile", - &unipath, &operation)) { - PyErr_Clear(); - goto normal; - } - - if (operation) { - uoperation = PyUnicode_DecodeASCII(operation, - strlen(operation), NULL); - if (!uoperation) { - PyErr_Clear(); - operation = NULL; - goto normal; - } - } - - wpath = PyUnicode_AsUnicode(unipath); - if (wpath == NULL) - goto normal; - if (uoperation) { - woperation = PyUnicode_AsUnicode(uoperation); - if (woperation == NULL) - goto normal; - } - else - woperation = NULL; - Py_BEGIN_ALLOW_THREADS - rc = Py_ShellExecuteW((HWND)0, woperation, wpath, + rc = Py_ShellExecuteW((HWND)0, operation, filepath->wide, NULL, NULL, SW_SHOWNORMAL); Py_END_ALLOW_THREADS - Py_XDECREF(uoperation); if (rc <= (HINSTANCE)32) { - win32_error_object("startfile", unipath); - return NULL; - } - Py_INCREF(Py_None); - return Py_None; - -normal: - if (!PyArg_ParseTuple(args, "O&|s:startfile", - PyUnicode_FSConverter, &ofilepath, - &operation)) - return NULL; - if (win32_warn_bytes_api()) { - Py_DECREF(ofilepath); + win32_error_object("startfile", filepath->object); return NULL; } - filepath = PyBytes_AsString(ofilepath); - Py_BEGIN_ALLOW_THREADS - rc = Py_ShellExecuteA((HWND)0, operation, filepath, - NULL, NULL, SW_SHOWNORMAL); - Py_END_ALLOW_THREADS - if (rc <= (HINSTANCE)32) { - PyObject *errval = win32_error("startfile", filepath); - Py_DECREF(ofilepath); - return errval; - } - Py_DECREF(ofilepath); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } #endif /* MS_WINDOWS */ @@ -11560,9 +11200,9 @@ DirEntry_fetch_stat(DirEntry *self, int follow_symlinks) return NULL; if (follow_symlinks) - result = win32_stat_w(path, &st); + result = win32_stat(path, &st); else - result = win32_lstat_w(path, &st); + result = win32_lstat(path, &st); if (result != 0) { return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, @@ -11761,7 +11401,7 @@ DirEntry_inode(DirEntry *self) if (!path) return NULL; - if (win32_lstat_w(path, &stat) != 0) { + if (win32_lstat(path, &stat) != 0) { return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, 0, self->path); } @@ -11910,6 +11550,11 @@ DirEntry_from_find_data(path_t *path, WIN32_FIND_DATAW *dataW) entry->name = PyUnicode_FromWideChar(dataW->cFileName, -1); if (!entry->name) goto error; + if (path->narrow) { + Py_SETREF(entry->name, PyUnicode_EncodeFSDefault(entry->name)); + if (!entry->name) + goto error; + } joined_path = join_path_filenameW(path->wide, dataW->cFileName); if (!joined_path) @@ -11919,8 +11564,13 @@ DirEntry_from_find_data(path_t *path, WIN32_FIND_DATAW *dataW) PyMem_Free(joined_path); if (!entry->path) goto error; + if (path->narrow) { + Py_SETREF(entry->path, PyUnicode_EncodeFSDefault(entry->path)); + if (!entry->path) + goto error; + } - find_data_to_file_info_w(dataW, &file_info, &reparse_tag); + find_data_to_file_info(dataW, &file_info, &reparse_tag); _Py_attribute_data_to_stat(&file_info, reparse_tag, &entry->win32_lstat); return (PyObject *)entry; @@ -12316,11 +11966,6 @@ posix_scandir(PyObject *self, PyObject *args, PyObject *kwargs) Py_XINCREF(iterator->path.object); #ifdef MS_WINDOWS - if (iterator->path.narrow) { - PyErr_SetString(PyExc_TypeError, - "os.scandir() doesn't support bytes path on Windows, use Unicode instead"); - goto error; - } iterator->first_time = 1; path_strW = join_path_filenameW(iterator->path.wide, L"*.*"); @@ -12570,7 +12215,7 @@ static PyMethodDef posix_methods[] = { OS_KILLPG_METHODDEF OS_PLOCK_METHODDEF #ifdef MS_WINDOWS - {"startfile", win32_startfile, METH_VARARGS, win32_startfile__doc__}, + OS_STARTFILE_METHODDEF #endif OS_SETUID_METHODDEF OS_SETEUID_METHODDEF -- cgit v1.2.1 From d3d81bf758e1b6a25c9f3e66d5e49e366a805365 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Thu, 8 Sep 2016 10:41:50 -0700 Subject: Fix mismatched if blocks in posixmodule.c. --- Modules/posixmodule.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index a39ea651fd..4f5ec99e4a 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2068,9 +2068,8 @@ posix_do_stat(const char *function_name, path_t *path, Py_BEGIN_ALLOW_THREADS if (path->fd != -1) result = FSTAT(path->fd, &st); - else #ifdef MS_WINDOWS - if (follow_symlinks) + else if (follow_symlinks) result = win32_stat(path->wide, &st); else result = win32_lstat(path->wide, &st); -- cgit v1.2.1 From 0b262da03401df836e0d2cd8b20412aeeaec6af8 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Thu, 8 Sep 2016 11:21:54 -0700 Subject: Issue #23524: Finish removing _PyVerify_fd from sources --- Modules/_io/fileio.c | 39 +++++++++----------------- Modules/faulthandler.c | 2 +- Modules/mmapmodule.c | 4 --- Modules/posixmodule.c | 75 ++------------------------------------------------ Modules/signalmodule.c | 7 +---- 5 files changed, 18 insertions(+), 109 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 12e5156fbb..54cfb7fa7d 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -117,18 +117,13 @@ internal_close(fileio *self) int fd = self->fd; self->fd = -1; /* fd is accessible and someone else may have closed it */ - if (_PyVerify_fd(fd)) { - Py_BEGIN_ALLOW_THREADS - _Py_BEGIN_SUPPRESS_IPH - err = close(fd); - if (err < 0) - save_errno = errno; - _Py_END_SUPPRESS_IPH - Py_END_ALLOW_THREADS - } else { + Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH + err = close(fd); + if (err < 0) save_errno = errno; - err = -1; - } + _Py_END_SUPPRESS_IPH + Py_END_ALLOW_THREADS } if (err < 0) { errno = save_errno; @@ -700,8 +695,6 @@ _io_FileIO_readall_impl(fileio *self) if (self->fd < 0) return err_closed(); - if (!_PyVerify_fd(self->fd)) - return PyErr_SetFromErrno(PyExc_IOError); _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS @@ -914,18 +907,15 @@ portable_lseek(int fd, PyObject *posobj, int whence) return NULL; } - if (_PyVerify_fd(fd)) { - Py_BEGIN_ALLOW_THREADS - _Py_BEGIN_SUPPRESS_IPH + Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS - res = _lseeki64(fd, pos, whence); + res = _lseeki64(fd, pos, whence); #else - res = lseek(fd, pos, whence); + res = lseek(fd, pos, whence); #endif - _Py_END_SUPPRESS_IPH - Py_END_ALLOW_THREADS - } else - res = -1; + _Py_END_SUPPRESS_IPH + Py_END_ALLOW_THREADS if (res < 0) return PyErr_SetFromErrno(PyExc_IOError); @@ -1116,10 +1106,7 @@ _io_FileIO_isatty_impl(fileio *self) return err_closed(); Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH - if (_PyVerify_fd(self->fd)) - res = isatty(self->fd); - else - res = 0; + res = isatty(self->fd); _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS return PyBool_FromLong(res); diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index c2d30008fc..1c1e4fb7d1 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -159,7 +159,7 @@ faulthandler_get_fileno(PyObject **file_ptr) fd = _PyLong_AsInt(file); if (fd == -1 && PyErr_Occurred()) return -1; - if (fd < 0 || !_PyVerify_fd(fd)) { + if (fd < 0) { PyErr_SetString(PyExc_ValueError, "file is not a valid file descripter"); return -1; diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index b0015a5756..73c37d0712 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -1326,10 +1326,6 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) */ if (fileno != -1 && fileno != 0) { /* Ensure that fileno is within the CRT's valid range */ - if (!_PyVerify_fd(fileno)) { - PyErr_SetFromErrno(PyExc_OSError); - return NULL; - } _Py_BEGIN_SUPPRESS_IPH fh = (HANDLE)_get_osfhandle(fileno); _Py_END_SUPPRESS_IPH diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 4f5ec99e4a..957a5f2b7d 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1178,34 +1178,6 @@ PyLong_FromPy_off_t(Py_off_t offset) #endif } - -#if defined _MSC_VER && _MSC_VER >= 1400 && _MSC_VER < 1900 -/* Legacy implementation of _PyVerify_fd_dup2 while transitioning to - * MSVC 14.0. This should eventually be removed. (issue23524) - */ -#define IOINFO_L2E 5 -#define IOINFO_ARRAYS 64 -#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E) -#define _NHANDLE_ (IOINFO_ARRAYS * IOINFO_ARRAY_ELTS) -#define _NO_CONSOLE_FILENO (intptr_t)-2 - -/* the special case of checking dup2. The target fd must be in a sensible range */ -static int -_PyVerify_fd_dup2(int fd1, int fd2) -{ - if (!_PyVerify_fd(fd1)) - return 0; - if (fd2 == _NO_CONSOLE_FILENO) - return 0; - if ((unsigned)fd2 < _NHANDLE_) - return 1; - else - return 0; -} -#else -#define _PyVerify_fd_dup2(fd1, fd2) (_PyVerify_fd(fd1) && (fd2) >= 0) -#endif - #ifdef MS_WINDOWS static int @@ -1409,9 +1381,6 @@ posix_fildes_fd(int fd, int (*func)(int)) int res; int async_err = 0; - if (!_PyVerify_fd(fd)) - return posix_error(); - do { Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH @@ -7549,8 +7518,6 @@ os_close_impl(PyObject *module, int fd) /*[clinic end generated code: output=2fe4e93602822c14 input=2bc42451ca5c3223]*/ { int res; - if (!_PyVerify_fd(fd)) - return posix_error(); /* We do not want to retry upon EINTR: see http://lwn.net/Articles/576478/ * and http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html * for more details. @@ -7583,9 +7550,8 @@ os_closerange_impl(PyObject *module, int fd_low, int fd_high) int i; Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH - for (i = fd_low; i < fd_high; i++) - if (_PyVerify_fd(i)) - close(i); + for (i = max(fd_low, 0); i < fd_high; i++) + close(i); _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS Py_RETURN_NONE; @@ -7629,7 +7595,7 @@ os_dup2_impl(PyObject *module, int fd, int fd2, int inheritable) int dup3_works = -1; #endif - if (!_PyVerify_fd_dup2(fd, fd2)) + if (fd < 0 || fd2 < 0) return posix_error(); /* dup2() can fail with EINTR if the target FD is already open, because it @@ -7753,10 +7719,6 @@ os_lseek_impl(PyObject *module, int fd, Py_off_t position, int how) { Py_off_t result; - if (!_PyVerify_fd(fd)) { - posix_error(); - return -1; - } #ifdef SEEK_SET /* Turn 0, 1, 2 into SEEK_{SET,CUR,END} */ switch (how) { @@ -7769,10 +7731,6 @@ os_lseek_impl(PyObject *module, int fd, Py_off_t position, int how) if (PyErr_Occurred()) return -1; - if (!_PyVerify_fd(fd)) { - posix_error(); - return -1; - } Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS @@ -7980,10 +7938,6 @@ os_pread_impl(PyObject *module, int fd, int length, Py_off_t offset) buffer = PyBytes_FromStringAndSize((char *)NULL, length); if (buffer == NULL) return NULL; - if (!_PyVerify_fd(fd)) { - Py_DECREF(buffer); - return posix_error(); - } do { Py_BEGIN_ALLOW_THREADS @@ -8226,8 +8180,6 @@ os_isatty_impl(PyObject *module, int fd) /*[clinic end generated code: output=6a48c8b4e644ca00 input=08ce94aa1eaf7b5e]*/ { int return_value; - if (!_PyVerify_fd(fd)) - return 0; _Py_BEGIN_SUPPRESS_IPH return_value = isatty(fd); _Py_END_SUPPRESS_IPH @@ -8419,11 +8371,6 @@ os_pwrite_impl(PyObject *module, int fd, Py_buffer *buffer, Py_off_t offset) Py_ssize_t size; int async_err = 0; - if (!_PyVerify_fd(fd)) { - posix_error(); - return -1; - } - do { Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH @@ -8606,9 +8553,6 @@ os_ftruncate_impl(PyObject *module, int fd, Py_off_t length) int result; int async_err = 0; - if (!_PyVerify_fd(fd)) - return posix_error(); - do { Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH @@ -10979,11 +10923,6 @@ os_get_inheritable_impl(PyObject *module, int fd) /*[clinic end generated code: output=0445e20e149aa5b8 input=89ac008dc9ab6b95]*/ { int return_value; - if (!_PyVerify_fd(fd)) { - posix_error(); - return -1; - } - _Py_BEGIN_SUPPRESS_IPH return_value = _Py_get_inheritable(fd); _Py_END_SUPPRESS_IPH @@ -11005,8 +10944,6 @@ os_set_inheritable_impl(PyObject *module, int fd, int inheritable) /*[clinic end generated code: output=f1b1918a2f3c38c2 input=9ceaead87a1e2402]*/ { int result; - if (!_PyVerify_fd(fd)) - return posix_error(); _Py_BEGIN_SUPPRESS_IPH result = _Py_set_inheritable(fd, inheritable, NULL); @@ -11080,9 +11017,6 @@ posix_get_blocking(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "i:get_blocking", &fd)) return NULL; - if (!_PyVerify_fd(fd)) - return posix_error(); - _Py_BEGIN_SUPPRESS_IPH blocking = _Py_get_blocking(fd); _Py_END_SUPPRESS_IPH @@ -11106,9 +11040,6 @@ posix_set_blocking(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "ii:set_blocking", &fd, &blocking)) return NULL; - if (!_PyVerify_fd(fd)) - return posix_error(); - _Py_BEGIN_SUPPRESS_IPH result = _Py_set_blocking(fd, blocking); _Py_END_SUPPRESS_IPH diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index e0780917c8..7eef0b5e59 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -579,7 +579,7 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) } fd = (int)sockfd; - if ((SOCKET_T)fd != sockfd || !_PyVerify_fd(fd)) { + if ((SOCKET_T)fd != sockfd) { PyErr_SetString(PyExc_ValueError, "invalid fd"); return NULL; } @@ -609,11 +609,6 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) if (fd != -1) { int blocking; - if (!_PyVerify_fd(fd)) { - PyErr_SetString(PyExc_ValueError, "invalid fd"); - return NULL; - } - if (_Py_fstat(fd, &status) != 0) return NULL; -- cgit v1.2.1 From 44907aa3bd6ad5b4547a4633a1b0146408099964 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Thu, 8 Sep 2016 11:28:06 -0700 Subject: use Py_MAX --- Modules/posixmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 957a5f2b7d..c1ba7ba9a6 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -7550,7 +7550,7 @@ os_closerange_impl(PyObject *module, int fd_low, int fd_high) int i; Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH - for (i = max(fd_low, 0); i < fd_high; i++) + for (i = Py_MAX(fd_low, 0); i < fd_high; i++) close(i); _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS -- cgit v1.2.1 From 1c4aac5fbe8b35924cb164acb8e4c39dba9451c1 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 8 Sep 2016 12:51:24 -0700 Subject: Add a new private version to the builtin dict type Issue #26058: Add a new private version to the builtin dict type, incremented at each dictionary creation and at each dictionary change. Implementation of the PEP 509. --- Modules/_testcapimodule.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 7d7fa40be2..b5b8f1a579 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3915,6 +3915,21 @@ tracemalloc_get_traceback(PyObject *self, PyObject *args) return _PyTraceMalloc_GetTraceback(domain, (uintptr_t)ptr); } +static PyObject * +dict_get_version(PyObject *self, PyObject *args) +{ + PyDictObject *dict; + uint64_t version; + + if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) + return NULL; + + version = dict->ma_version_tag; + + Py_BUILD_ASSERT(sizeof(unsigned PY_LONG_LONG) >= sizeof(version)); + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)version); +} + static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -4114,6 +4129,7 @@ static PyMethodDef TestMethods[] = { {"tracemalloc_track", tracemalloc_track, METH_VARARGS}, {"tracemalloc_untrack", tracemalloc_untrack, METH_VARARGS}, {"tracemalloc_get_traceback", tracemalloc_get_traceback, METH_VARARGS}, + {"dict_get_version", dict_get_version, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; -- cgit v1.2.1 From 73392d64a0328bce848b448206b668f695640538 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Tue, 30 Aug 2016 21:22:36 -0700 Subject: Issue #1602: Windows console doesn't input or print Unicode (PEP 528) Closes #17602: Adds a readline implementation for the Windows console --- Modules/_io/_iomodule.c | 24 +- Modules/_io/_iomodule.h | 10 + Modules/_io/clinic/winconsoleio.c.h | 331 +++++++++++ Modules/_io/winconsoleio.c | 1096 +++++++++++++++++++++++++++++++++++ 4 files changed, 1458 insertions(+), 3 deletions(-) create mode 100644 Modules/_io/clinic/winconsoleio.c.h create mode 100644 Modules/_io/winconsoleio.c (limited to 'Modules') diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index ec700f64c8..60f8b549a8 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -20,6 +20,9 @@ #include #endif /* HAVE_SYS_STAT_H */ +#ifdef MS_WINDOWS +#include +#endif /* Various interned strings */ @@ -52,7 +55,6 @@ PyObject *_PyIO_empty_str; PyObject *_PyIO_empty_bytes; PyObject *_PyIO_zero; - PyDoc_STRVAR(module_doc, "The io module provides the Python interfaces to stream handling. The\n" "builtin open function is defined in this module.\n" @@ -362,8 +364,18 @@ _io_open_impl(PyObject *module, PyObject *file, const char *mode, } /* Create the Raw file stream */ - raw = PyObject_CallFunction((PyObject *)&PyFileIO_Type, - "OsiO", path_or_fd, rawmode, closefd, opener); + { + PyObject *RawIO_class = (PyObject *)&PyFileIO_Type; +#ifdef MS_WINDOWS + if (!Py_LegacyWindowsStdioFlag && _PyIO_get_console_type(path_or_fd) != '\0') { + RawIO_class = (PyObject *)&PyWindowsConsoleIO_Type; + encoding = "utf-8"; + } +#endif + raw = PyObject_CallFunction(RawIO_class, + "OsiO", path_or_fd, rawmode, closefd, opener); + } + if (raw == NULL) goto error; result = raw; @@ -708,6 +720,12 @@ PyInit__io(void) PyStringIO_Type.tp_base = &PyTextIOBase_Type; ADD_TYPE(&PyStringIO_Type, "StringIO"); +#ifdef MS_WINDOWS + /* WindowsConsoleIO */ + PyWindowsConsoleIO_Type.tp_base = &PyRawIOBase_Type; + ADD_TYPE(&PyWindowsConsoleIO_Type, "_WindowsConsoleIO"); +#endif + /* BufferedReader */ PyBufferedReader_Type.tp_base = &PyBufferedIOBase_Type; ADD_TYPE(&PyBufferedReader_Type, "BufferedReader"); diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h index 8b5ec88948..5d3da29ce1 100644 --- a/Modules/_io/_iomodule.h +++ b/Modules/_io/_iomodule.h @@ -19,6 +19,12 @@ extern PyTypeObject PyBufferedRandom_Type; extern PyTypeObject PyTextIOWrapper_Type; extern PyTypeObject PyIncrementalNewlineDecoder_Type; +#ifndef Py_LIMITED_API +#ifdef MS_WINDOWS +extern PyTypeObject PyWindowsConsoleIO_Type; +#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type)) +#endif /* MS_WINDOWS */ +#endif /* Py_LIMITED_API */ extern int _PyIO_ConvertSsize_t(PyObject *, void *); @@ -145,6 +151,10 @@ typedef struct { extern _PyIO_State *_PyIO_get_module_state(void); extern PyObject *_PyIO_get_locale_module(_PyIO_State *); +#ifdef MS_WINDOWS +extern char _PyIO_get_console_type(PyObject *); +#endif + extern PyObject *_PyIO_str_close; extern PyObject *_PyIO_str_closed; extern PyObject *_PyIO_str_decode; diff --git a/Modules/_io/clinic/winconsoleio.c.h b/Modules/_io/clinic/winconsoleio.c.h new file mode 100644 index 0000000000..e44fcbb7a1 --- /dev/null +++ b/Modules/_io/clinic/winconsoleio.c.h @@ -0,0 +1,331 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_io__WindowsConsoleIO_close__doc__, +"close($self, /)\n" +"--\n" +"\n" +"Close the handle.\n" +"\n" +"A closed handle cannot be used for further I/O operations. close() may be\n" +"called more than once without error."); + +#define _IO__WINDOWSCONSOLEIO_CLOSE_METHODDEF \ + {"close", (PyCFunction)_io__WindowsConsoleIO_close, METH_NOARGS, _io__WindowsConsoleIO_close__doc__}, + +static PyObject * +_io__WindowsConsoleIO_close_impl(winconsoleio *self); + +static PyObject * +_io__WindowsConsoleIO_close(winconsoleio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__WindowsConsoleIO_close_impl(self); +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_io__WindowsConsoleIO___init____doc__, +"_WindowsConsoleIO(file, mode=\'r\', closefd=True, opener=None)\n" +"--\n" +"\n" +"Open a console buffer by file descriptor.\n" +"\n" +"The mode can be \'rb\' (default), or \'wb\' for reading or writing bytes. All\n" +"other mode characters will be ignored. Mode \'b\' will be assumed if it is\n" +"omitted. The *opener* parameter is always ignored."); + +static int +_io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, + const char *mode, int closefd, + PyObject *opener); + +static int +_io__WindowsConsoleIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static const char * const _keywords[] = {"file", "mode", "closefd", "opener", NULL}; + static _PyArg_Parser _parser = {"O|siO:_WindowsConsoleIO", _keywords, 0}; + PyObject *nameobj; + const char *mode = "r"; + int closefd = 1; + PyObject *opener = Py_None; + + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + &nameobj, &mode, &closefd, &opener)) { + goto exit; + } + return_value = _io__WindowsConsoleIO___init___impl((winconsoleio *)self, nameobj, mode, closefd, opener); + +exit: + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_io__WindowsConsoleIO_fileno__doc__, +"fileno($self, /)\n" +"--\n" +"\n" +"Return the underlying file descriptor (an integer).\n" +"\n" +"fileno is only set when a file descriptor is used to open\n" +"one of the standard streams."); + +#define _IO__WINDOWSCONSOLEIO_FILENO_METHODDEF \ + {"fileno", (PyCFunction)_io__WindowsConsoleIO_fileno, METH_NOARGS, _io__WindowsConsoleIO_fileno__doc__}, + +static PyObject * +_io__WindowsConsoleIO_fileno_impl(winconsoleio *self); + +static PyObject * +_io__WindowsConsoleIO_fileno(winconsoleio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__WindowsConsoleIO_fileno_impl(self); +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_io__WindowsConsoleIO_readable__doc__, +"readable($self, /)\n" +"--\n" +"\n" +"True if console is an input buffer."); + +#define _IO__WINDOWSCONSOLEIO_READABLE_METHODDEF \ + {"readable", (PyCFunction)_io__WindowsConsoleIO_readable, METH_NOARGS, _io__WindowsConsoleIO_readable__doc__}, + +static PyObject * +_io__WindowsConsoleIO_readable_impl(winconsoleio *self); + +static PyObject * +_io__WindowsConsoleIO_readable(winconsoleio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__WindowsConsoleIO_readable_impl(self); +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_io__WindowsConsoleIO_writable__doc__, +"writable($self, /)\n" +"--\n" +"\n" +"True if console is an output buffer."); + +#define _IO__WINDOWSCONSOLEIO_WRITABLE_METHODDEF \ + {"writable", (PyCFunction)_io__WindowsConsoleIO_writable, METH_NOARGS, _io__WindowsConsoleIO_writable__doc__}, + +static PyObject * +_io__WindowsConsoleIO_writable_impl(winconsoleio *self); + +static PyObject * +_io__WindowsConsoleIO_writable(winconsoleio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__WindowsConsoleIO_writable_impl(self); +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_io__WindowsConsoleIO_readinto__doc__, +"readinto($self, buffer, /)\n" +"--\n" +"\n" +"Same as RawIOBase.readinto()."); + +#define _IO__WINDOWSCONSOLEIO_READINTO_METHODDEF \ + {"readinto", (PyCFunction)_io__WindowsConsoleIO_readinto, METH_O, _io__WindowsConsoleIO_readinto__doc__}, + +static PyObject * +_io__WindowsConsoleIO_readinto_impl(winconsoleio *self, Py_buffer *buffer); + +static PyObject * +_io__WindowsConsoleIO_readinto(winconsoleio *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer buffer = {NULL, NULL}; + + if (!PyArg_Parse(arg, "w*:readinto", &buffer)) { + goto exit; + } + return_value = _io__WindowsConsoleIO_readinto_impl(self, &buffer); + +exit: + /* Cleanup for buffer */ + if (buffer.obj) { + PyBuffer_Release(&buffer); + } + + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_io__WindowsConsoleIO_readall__doc__, +"readall($self, /)\n" +"--\n" +"\n" +"Read all data from the console, returned as bytes.\n" +"\n" +"Return an empty bytes object at EOF."); + +#define _IO__WINDOWSCONSOLEIO_READALL_METHODDEF \ + {"readall", (PyCFunction)_io__WindowsConsoleIO_readall, METH_NOARGS, _io__WindowsConsoleIO_readall__doc__}, + +static PyObject * +_io__WindowsConsoleIO_readall_impl(winconsoleio *self); + +static PyObject * +_io__WindowsConsoleIO_readall(winconsoleio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__WindowsConsoleIO_readall_impl(self); +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_io__WindowsConsoleIO_read__doc__, +"read($self, size=-1, /)\n" +"--\n" +"\n" +"Read at most size bytes, returned as bytes.\n" +"\n" +"Only makes one system call when size is a positive integer,\n" +"so less data may be returned than requested.\n" +"Return an empty bytes object at EOF."); + +#define _IO__WINDOWSCONSOLEIO_READ_METHODDEF \ + {"read", (PyCFunction)_io__WindowsConsoleIO_read, METH_VARARGS, _io__WindowsConsoleIO_read__doc__}, + +static PyObject * +_io__WindowsConsoleIO_read_impl(winconsoleio *self, Py_ssize_t size); + +static PyObject * +_io__WindowsConsoleIO_read(winconsoleio *self, PyObject *args) +{ + PyObject *return_value = NULL; + Py_ssize_t size = -1; + + if (!PyArg_ParseTuple(args, "|O&:read", + _PyIO_ConvertSsize_t, &size)) { + goto exit; + } + return_value = _io__WindowsConsoleIO_read_impl(self, size); + +exit: + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_io__WindowsConsoleIO_write__doc__, +"write($self, b, /)\n" +"--\n" +"\n" +"Write buffer b to file, return number of bytes written.\n" +"\n" +"Only makes one system call, so not all of the data may be written.\n" +"The number of bytes actually written is returned."); + +#define _IO__WINDOWSCONSOLEIO_WRITE_METHODDEF \ + {"write", (PyCFunction)_io__WindowsConsoleIO_write, METH_O, _io__WindowsConsoleIO_write__doc__}, + +static PyObject * +_io__WindowsConsoleIO_write_impl(winconsoleio *self, Py_buffer *b); + +static PyObject * +_io__WindowsConsoleIO_write(winconsoleio *self, PyObject *arg) +{ + PyObject *return_value = NULL; + Py_buffer b = {NULL, NULL}; + + if (!PyArg_Parse(arg, "y*:write", &b)) { + goto exit; + } + return_value = _io__WindowsConsoleIO_write_impl(self, &b); + +exit: + /* Cleanup for b */ + if (b.obj) { + PyBuffer_Release(&b); + } + + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_io__WindowsConsoleIO_isatty__doc__, +"isatty($self, /)\n" +"--\n" +"\n" +"Always True."); + +#define _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF \ + {"isatty", (PyCFunction)_io__WindowsConsoleIO_isatty, METH_NOARGS, _io__WindowsConsoleIO_isatty__doc__}, + +static PyObject * +_io__WindowsConsoleIO_isatty_impl(winconsoleio *self); + +static PyObject * +_io__WindowsConsoleIO_isatty(winconsoleio *self, PyObject *Py_UNUSED(ignored)) +{ + return _io__WindowsConsoleIO_isatty_impl(self); +} + +#endif /* defined(MS_WINDOWS) */ + +#ifndef _IO__WINDOWSCONSOLEIO_CLOSE_METHODDEF + #define _IO__WINDOWSCONSOLEIO_CLOSE_METHODDEF +#endif /* !defined(_IO__WINDOWSCONSOLEIO_CLOSE_METHODDEF) */ + +#ifndef _IO__WINDOWSCONSOLEIO_FILENO_METHODDEF + #define _IO__WINDOWSCONSOLEIO_FILENO_METHODDEF +#endif /* !defined(_IO__WINDOWSCONSOLEIO_FILENO_METHODDEF) */ + +#ifndef _IO__WINDOWSCONSOLEIO_READABLE_METHODDEF + #define _IO__WINDOWSCONSOLEIO_READABLE_METHODDEF +#endif /* !defined(_IO__WINDOWSCONSOLEIO_READABLE_METHODDEF) */ + +#ifndef _IO__WINDOWSCONSOLEIO_WRITABLE_METHODDEF + #define _IO__WINDOWSCONSOLEIO_WRITABLE_METHODDEF +#endif /* !defined(_IO__WINDOWSCONSOLEIO_WRITABLE_METHODDEF) */ + +#ifndef _IO__WINDOWSCONSOLEIO_READINTO_METHODDEF + #define _IO__WINDOWSCONSOLEIO_READINTO_METHODDEF +#endif /* !defined(_IO__WINDOWSCONSOLEIO_READINTO_METHODDEF) */ + +#ifndef _IO__WINDOWSCONSOLEIO_READALL_METHODDEF + #define _IO__WINDOWSCONSOLEIO_READALL_METHODDEF +#endif /* !defined(_IO__WINDOWSCONSOLEIO_READALL_METHODDEF) */ + +#ifndef _IO__WINDOWSCONSOLEIO_READ_METHODDEF + #define _IO__WINDOWSCONSOLEIO_READ_METHODDEF +#endif /* !defined(_IO__WINDOWSCONSOLEIO_READ_METHODDEF) */ + +#ifndef _IO__WINDOWSCONSOLEIO_WRITE_METHODDEF + #define _IO__WINDOWSCONSOLEIO_WRITE_METHODDEF +#endif /* !defined(_IO__WINDOWSCONSOLEIO_WRITE_METHODDEF) */ + +#ifndef _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF + #define _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF +#endif /* !defined(_IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF) */ +/*[clinic end generated code: output=9eba916f8537fff7 input=a9049054013a1b77]*/ diff --git a/Modules/_io/winconsoleio.c b/Modules/_io/winconsoleio.c new file mode 100644 index 0000000000..2527ff13ca --- /dev/null +++ b/Modules/_io/winconsoleio.c @@ -0,0 +1,1096 @@ +/* + An implementation of Windows console I/O + + Classes defined here: _WindowsConsoleIO + + Written by Steve Dower +*/ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" + +#ifdef MS_WINDOWS + +#include "structmember.h" +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif +#include /* For offsetof */ + +#define WIN32_LEAN_AND_MEAN +#include + +#include "_iomodule.h" + +/* BUFSIZ determines how many characters can be typed at the console + before it starts blocking. */ +#if BUFSIZ < (16*1024) +#define SMALLCHUNK (2*1024) +#elif (BUFSIZ >= (2 << 25)) +#error "unreasonable BUFSIZ > 64MB defined" +#else +#define SMALLCHUNK BUFSIZ +#endif + +/* BUFMAX determines how many bytes can be read in one go. */ +#define BUFMAX (32*1024*1024) + +char _get_console_type(HANDLE handle) { + DWORD mode, peek_count; + + if (handle == INVALID_HANDLE_VALUE) + return '\0'; + + if (!GetConsoleMode(handle, &mode)) + return '\0'; + + /* Peek at the handle to see whether it is an input or output handle */ + if (GetNumberOfConsoleInputEvents(handle, &peek_count)) + return 'r'; + return 'w'; +} + +char _PyIO_get_console_type(PyObject *path_or_fd) { + int fd; + + fd = PyLong_AsLong(path_or_fd); + PyErr_Clear(); + if (fd >= 0) { + HANDLE handle; + _Py_BEGIN_SUPPRESS_IPH + handle = (HANDLE)_get_osfhandle(fd); + _Py_END_SUPPRESS_IPH + if (!handle) + return '\0'; + return _get_console_type(handle); + } + + PyObject *decoded = Py_None; + Py_INCREF(decoded); + + int d = PyUnicode_FSDecoder(path_or_fd, &decoded); + if (!d) { + PyErr_Clear(); + Py_CLEAR(decoded); + return '\0'; + } + + char m = '\0'; + if (!PyUnicode_Check(decoded)) { + return '\0'; + } else if (PyUnicode_CompareWithASCIIString(decoded, "CONIN$") == 0) { + m = 'r'; + } else if (PyUnicode_CompareWithASCIIString(decoded, "CONOUT$") == 0 || + PyUnicode_CompareWithASCIIString(decoded, "CON") == 0) { + m = 'w'; + } + + Py_CLEAR(decoded); + return m; +} + +/*[clinic input] +module _io +class _io._WindowsConsoleIO "winconsoleio *" "&PyWindowsConsoleIO_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=e897fdc1fba4e131]*/ + +/*[python input] +class io_ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = '_PyIO_ConvertSsize_t' +[python start generated code]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=d0a811d3cbfd1b33]*/ + +typedef struct { + PyObject_HEAD + HANDLE handle; + int fd; + unsigned int created : 1; + unsigned int readable : 1; + unsigned int writable : 1; + unsigned int closehandle : 1; + char finalizing; + unsigned int blksize; + PyObject *weakreflist; + PyObject *dict; + char buf[4]; +} winconsoleio; + +PyTypeObject PyWindowsConsoleIO_Type; + +_Py_IDENTIFIER(name); + +int +_PyWindowsConsoleIO_closed(PyObject *self) +{ + return ((winconsoleio *)self)->handle == INVALID_HANDLE_VALUE; +} + + +/* Returns 0 on success, -1 with exception set on failure. */ +static int +internal_close(winconsoleio *self) +{ + if (self->handle != INVALID_HANDLE_VALUE) { + if (self->closehandle) { + if (self->fd >= 0) { + _Py_BEGIN_SUPPRESS_IPH + close(self->fd); + _Py_END_SUPPRESS_IPH + } + CloseHandle(self->handle); + } + self->handle = INVALID_HANDLE_VALUE; + self->fd = -1; + } + return 0; +} + +/*[clinic input] +_io._WindowsConsoleIO.close + +Close the handle. + +A closed handle cannot be used for further I/O operations. close() may be +called more than once without error. +[clinic start generated code]*/ + +static PyObject * +_io__WindowsConsoleIO_close_impl(winconsoleio *self) +/*[clinic end generated code: output=27ef95b66c29057b input=185617e349ae4c7b]*/ +{ + PyObject *res; + PyObject *exc, *val, *tb; + int rc; + _Py_IDENTIFIER(close); + res = _PyObject_CallMethodId((PyObject*)&PyRawIOBase_Type, + &PyId_close, "O", self); + if (!self->closehandle) { + self->handle = INVALID_HANDLE_VALUE; + return res; + } + if (res == NULL) + PyErr_Fetch(&exc, &val, &tb); + rc = internal_close(self); + if (res == NULL) + _PyErr_ChainExceptions(exc, val, tb); + if (rc < 0) + Py_CLEAR(res); + return res; +} + +static PyObject * +winconsoleio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + winconsoleio *self; + + assert(type != NULL && type->tp_alloc != NULL); + + self = (winconsoleio *) type->tp_alloc(type, 0); + if (self != NULL) { + self->handle = INVALID_HANDLE_VALUE; + self->fd = -1; + self->created = 0; + self->readable = 0; + self->writable = 0; + self->closehandle = 0; + self->blksize = 0; + self->weakreflist = NULL; + } + + return (PyObject *) self; +} + +/*[clinic input] +_io._WindowsConsoleIO.__init__ + file as nameobj: object + mode: str = "r" + closefd: int(c_default="1") = True + opener: object = None + +Open a console buffer by file descriptor. + +The mode can be 'rb' (default), or 'wb' for reading or writing bytes. All +other mode characters will be ignored. Mode 'b' will be assumed if it is +omitted. The *opener* parameter is always ignored. +[clinic start generated code]*/ + +static int +_io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, + const char *mode, int closefd, + PyObject *opener) +/*[clinic end generated code: output=3fd9cbcdd8d95429 input=61be39633a86f5d7]*/ +{ + const char *s; + wchar_t *name = NULL; + int ret = 0; + int rwa = 0; + int fd = -1; + int fd_is_own = 0; + + assert(PyWindowsConsoleIO_Check(self)); + if (self->handle >= 0) { + if (self->closehandle) { + /* Have to close the existing file first. */ + if (internal_close(self) < 0) + return -1; + } + else + self->handle = INVALID_HANDLE_VALUE; + } + + if (PyFloat_Check(nameobj)) { + PyErr_SetString(PyExc_TypeError, + "integer argument expected, got float"); + return -1; + } + + fd = _PyLong_AsInt(nameobj); + if (fd < 0) { + if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ValueError, + "negative file descriptor"); + return -1; + } + PyErr_Clear(); + } + self->fd = fd; + + if (fd < 0) { + PyObject *decodedname = Py_None; + Py_INCREF(decodedname); + + int d = PyUnicode_FSDecoder(nameobj, (void*)&decodedname); + if (!d) + return -1; + + Py_ssize_t length; + name = PyUnicode_AsWideCharString(decodedname, &length); + Py_CLEAR(decodedname); + if (name == NULL) + return -1; + + if (wcslen(name) != length) { + PyMem_Free(name); + PyErr_SetString(PyExc_ValueError, "embedded null character"); + return -1; + } + } + + s = mode; + while (*s) { + switch (*s++) { + case '+': + case 'a': + case 'b': + case 'x': + break; + case 'r': + if (rwa) + goto bad_mode; + rwa = 1; + self->readable = 1; + break; + case 'w': + if (rwa) + goto bad_mode; + rwa = 1; + self->writable = 1; + break; + default: + PyErr_Format(PyExc_ValueError, + "invalid mode: %.200s", mode); + goto error; + } + } + + if (!rwa) + goto bad_mode; + + if (fd >= 0) { + _Py_BEGIN_SUPPRESS_IPH + self->handle = (HANDLE)_get_osfhandle(fd); + _Py_END_SUPPRESS_IPH + self->closehandle = 0; + } else { + DWORD access = GENERIC_READ; + + self->closehandle = 1; + if (!closefd) { + PyErr_SetString(PyExc_ValueError, + "Cannot use closefd=False with file name"); + goto error; + } + + if (self->writable) + access |= GENERIC_WRITE; + + Py_BEGIN_ALLOW_THREADS + /* Attempt to open for read/write initially, then fall back + on the specific access. This is required for modern names + CONIN$ and CONOUT$, which allow reading/writing state as + well as reading/writing content. */ + self->handle = CreateFileW(name, GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); + if (self->handle == INVALID_HANDLE_VALUE) + self->handle = CreateFileW(name, access, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); + Py_END_ALLOW_THREADS + + if (self->handle == INVALID_HANDLE_VALUE) { + PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, GetLastError(), nameobj); + goto error; + } + } + + if (self->writable && _get_console_type(self->handle) != 'w') { + PyErr_SetString(PyExc_ValueError, + "Cannot open console input buffer for writing"); + goto error; + } + if (self->readable && _get_console_type(self->handle) != 'r') { + PyErr_SetString(PyExc_ValueError, + "Cannot open console output buffer for reading"); + goto error; + } + + self->blksize = DEFAULT_BUFFER_SIZE; + memset(self->buf, 0, 4); + + if (_PyObject_SetAttrId((PyObject *)self, &PyId_name, nameobj) < 0) + goto error; + + goto done; + +bad_mode: + PyErr_SetString(PyExc_ValueError, + "Must have exactly one of read or write mode"); +error: + ret = -1; + internal_close(self); + +done: + if (name) + PyMem_Free(name); + return ret; +} + +static int +winconsoleio_traverse(winconsoleio *self, visitproc visit, void *arg) +{ + Py_VISIT(self->dict); + return 0; +} + +static int +winconsoleio_clear(winconsoleio *self) +{ + Py_CLEAR(self->dict); + return 0; +} + +static void +winconsoleio_dealloc(winconsoleio *self) +{ + self->finalizing = 1; + if (_PyIOBase_finalize((PyObject *) self) < 0) + return; + _PyObject_GC_UNTRACK(self); + if (self->weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject *) self); + Py_CLEAR(self->dict); + Py_TYPE(self)->tp_free((PyObject *)self); +} + +static PyObject * +err_closed(void) +{ + PyErr_SetString(PyExc_ValueError, "I/O operation on closed file"); + return NULL; +} + +static PyObject * +err_mode(const char *action) +{ + _PyIO_State *state = IO_STATE(); + if (state != NULL) + PyErr_Format(state->unsupported_operation, + "Console buffer does not support %s", action); + return NULL; +} + +/*[clinic input] +_io._WindowsConsoleIO.fileno + +Return the underlying file descriptor (an integer). + +fileno is only set when a file descriptor is used to open +one of the standard streams. + +[clinic start generated code]*/ + +static PyObject * +_io__WindowsConsoleIO_fileno_impl(winconsoleio *self) +/*[clinic end generated code: output=006fa74ce3b5cfbf input=079adc330ddaabe6]*/ +{ + if (self->fd < 0 && self->handle != INVALID_HANDLE_VALUE) { + _Py_BEGIN_SUPPRESS_IPH + if (self->writable) + self->fd = _open_osfhandle((intptr_t)self->handle, 'wb'); + else + self->fd = _open_osfhandle((intptr_t)self->handle, 'rb'); + _Py_END_SUPPRESS_IPH + } + if (self->fd < 0) + return err_mode("fileno"); + return PyLong_FromLong(self->fd); +} + +/*[clinic input] +_io._WindowsConsoleIO.readable + +True if console is an input buffer. +[clinic start generated code]*/ + +static PyObject * +_io__WindowsConsoleIO_readable_impl(winconsoleio *self) +/*[clinic end generated code: output=daf9cef2743becf0 input=6be9defb5302daae]*/ +{ + if (self->handle == INVALID_HANDLE_VALUE) + return err_closed(); + return PyBool_FromLong((long) self->readable); +} + +/*[clinic input] +_io._WindowsConsoleIO.writable + +True if console is an output buffer. +[clinic start generated code]*/ + +static PyObject * +_io__WindowsConsoleIO_writable_impl(winconsoleio *self) +/*[clinic end generated code: output=e0a2ad7eae5abf67 input=cefbd8abc24df6a0]*/ +{ + if (self->handle == INVALID_HANDLE_VALUE) + return err_closed(); + return PyBool_FromLong((long) self->writable); +} + +static DWORD +_buflen(winconsoleio *self) +{ + for (DWORD i = 0; i < 4; ++i) { + if (!self->buf[i]) + return i; + } + return 4; +} + +static DWORD +_copyfrombuf(winconsoleio *self, char *buf, DWORD len) +{ + DWORD n = 0; + + while (self->buf[0] && len--) { + n += 1; + buf[0] = self->buf[0]; + self->buf[0] = self->buf[1]; + self->buf[1] = self->buf[2]; + self->buf[2] = self->buf[3]; + self->buf[3] = 0; + } + + return n; +} + +static wchar_t * +read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) { + int err = 0, sig = 0; + + wchar_t *buf = (wchar_t*)PyMem_Malloc(maxlen * sizeof(wchar_t)); + if (!buf) + goto error; + *readlen = 0; + + Py_BEGIN_ALLOW_THREADS + for (DWORD off = 0; off < maxlen; off += BUFSIZ) { + DWORD n, len = min(maxlen - off, BUFSIZ); + SetLastError(0); + BOOL res = ReadConsoleW(handle, &buf[off], len, &n, NULL); + + if (!res) { + err = GetLastError(); + break; + } + if (n == 0) { + err = GetLastError(); + if (err != ERROR_OPERATION_ABORTED) + break; + err = 0; + HANDLE hInterruptEvent = _PyOS_SigintEvent(); + if (WaitForSingleObjectEx(hInterruptEvent, 100, FALSE) + == WAIT_OBJECT_0) { + ResetEvent(hInterruptEvent); + Py_BLOCK_THREADS + sig = PyErr_CheckSignals(); + Py_UNBLOCK_THREADS + if (sig < 0) + break; + } + } + *readlen += n; + + /* If we didn't read a full buffer that time, don't try + again or we will block a second time. */ + if (n < len) + break; + /* If the buffer ended with a newline, break out */ + if (buf[*readlen - 1] == '\n') + break; + } + Py_END_ALLOW_THREADS + + if (sig) + goto error; + if (err) { + PyErr_SetFromWindowsErr(err); + goto error; + } + + if (*readlen > 0 && buf[0] == L'\x1a') { + PyMem_Free(buf); + buf = (wchar_t *)PyMem_Malloc(sizeof(wchar_t)); + if (!buf) + goto error; + buf[0] = L'\0'; + *readlen = 0; + } + + return buf; + +error: + if (buf) + PyMem_Free(buf); + return NULL; +} + + +static Py_ssize_t +readinto(winconsoleio *self, char *buf, Py_ssize_t len) +{ + if (self->handle == INVALID_HANDLE_VALUE) { + err_closed(); + return -1; + } + if (!self->readable) { + err_mode("reading"); + return -1; + } + if (len == 0) + return 0; + if (len > BUFMAX) { + PyErr_Format(PyExc_ValueError, "cannot read more than %d bytes", BUFMAX); + return -1; + } + + /* Each character may take up to 4 bytes in the final buffer. + This is highly conservative, but necessary to avoid + failure for any given Unicode input (e.g. \U0010ffff). + If the caller requests fewer than 4 bytes, we buffer one + character. + */ + DWORD wlen = (DWORD)(len / 4); + if (wlen == 0) { + wlen = 1; + } + + DWORD read_len = _copyfrombuf(self, buf, (DWORD)len); + if (read_len) { + buf = &buf[read_len]; + len -= read_len; + wlen -= 1; + } + if (len == read_len || wlen == 0) + return read_len; + + DWORD n; + wchar_t *wbuf = read_console_w(self->handle, wlen, &n); + if (wbuf == NULL) + return -1; + if (n == 0) { + PyMem_Free(wbuf); + return read_len; + } + + int err = 0; + DWORD u8n = 0; + + Py_BEGIN_ALLOW_THREADS + if (len < 4) { + if (WideCharToMultiByte(CP_UTF8, 0, wbuf, n, + self->buf, sizeof(self->buf) / sizeof(self->buf[0]), + NULL, NULL)) + u8n = _copyfrombuf(self, buf, (DWORD)len); + } else { + u8n = WideCharToMultiByte(CP_UTF8, 0, wbuf, n, + buf, (DWORD)len, NULL, NULL); + } + + if (u8n) { + read_len += u8n; + u8n = 0; + } else { + err = GetLastError(); + if (err == ERROR_INSUFFICIENT_BUFFER) { + /* Calculate the needed buffer for a more useful error, as this + means our "/ 4" logic above is insufficient for some input. + */ + u8n = WideCharToMultiByte(CP_UTF8, 0, wbuf, n, + NULL, 0, NULL, NULL); + } + } + Py_END_ALLOW_THREADS + + PyMem_Free(wbuf); + + if (u8n) { + PyErr_Format(PyExc_SystemError, + "Buffer had room for %d bytes but %d bytes required", + len, u8n); + return -1; + } + if (err) { + PyErr_SetFromWindowsErr(err); + return -1; + } + + return read_len; +} + +/*[clinic input] +_io._WindowsConsoleIO.readinto + buffer: Py_buffer(accept={rwbuffer}) + / + +Same as RawIOBase.readinto(). +[clinic start generated code]*/ + +static PyObject * +_io__WindowsConsoleIO_readinto_impl(winconsoleio *self, Py_buffer *buffer) +/*[clinic end generated code: output=66d1bdfa3f20af39 input=4ed68da48a6baffe]*/ +{ + Py_ssize_t len = readinto(self, buffer->buf, buffer->len); + if (len < 0) + return NULL; + + return PyLong_FromSsize_t(len); +} + +static DWORD +new_buffersize(winconsoleio *self, DWORD currentsize) +{ + DWORD addend; + + /* Expand the buffer by an amount proportional to the current size, + giving us amortized linear-time behavior. For bigger sizes, use a + less-than-double growth factor to avoid excessive allocation. */ + if (currentsize > 65536) + addend = currentsize >> 3; + else + addend = 256 + currentsize; + if (addend < SMALLCHUNK) + /* Avoid tiny read() calls. */ + addend = SMALLCHUNK; + return addend + currentsize; +} + +/*[clinic input] +_io._WindowsConsoleIO.readall + +Read all data from the console, returned as bytes. + +Return an empty bytes object at EOF. +[clinic start generated code]*/ + +static PyObject * +_io__WindowsConsoleIO_readall_impl(winconsoleio *self) +/*[clinic end generated code: output=e6d312c684f6e23b input=4024d649a1006e69]*/ +{ + wchar_t *buf; + DWORD bufsize, n, len = 0; + PyObject *bytes; + DWORD bytes_size, rn; + + if (self->handle == INVALID_HANDLE_VALUE) + return err_closed(); + + bufsize = BUFSIZ; + + buf = (wchar_t*)PyMem_Malloc((bufsize + 1) * sizeof(wchar_t)); + if (buf == NULL) + return NULL; + + while (1) { + wchar_t *subbuf; + + if (len >= (Py_ssize_t)bufsize) { + DWORD newsize = new_buffersize(self, len); + if (newsize > BUFMAX) + break; + if (newsize < bufsize) { + PyErr_SetString(PyExc_OverflowError, + "unbounded read returned more bytes " + "than a Python bytes object can hold"); + PyMem_Free(buf); + return NULL; + } + bufsize = newsize; + + buf = PyMem_Realloc(buf, (bufsize + 1) * sizeof(wchar_t)); + if (!buf) { + PyMem_Free(buf); + return NULL; + } + } + + subbuf = read_console_w(self->handle, bufsize - len, &n); + + if (subbuf == NULL) { + PyMem_Free(buf); + return NULL; + } + + if (n > 0) + wcsncpy_s(&buf[len], bufsize - len + 1, subbuf, n); + + PyMem_Free(subbuf); + + /* when the read starts with ^Z or is empty we break */ + if (n == 0 || buf[len] == '\x1a') + break; + + len += n; + } + + if (len > 0 && buf[0] == '\x1a' && _buflen(self) == 0) { + /* when the result starts with ^Z we return an empty buffer */ + PyMem_Free(buf); + return PyBytes_FromStringAndSize(NULL, 0); + } + + Py_BEGIN_ALLOW_THREADS + bytes_size = WideCharToMultiByte(CP_UTF8, 0, buf, len, + NULL, 0, NULL, NULL); + Py_END_ALLOW_THREADS + + if (!bytes_size) { + DWORD err = GetLastError(); + PyMem_Free(buf); + return PyErr_SetFromWindowsErr(err); + } + + bytes_size += _buflen(self); + bytes = PyBytes_FromStringAndSize(NULL, bytes_size); + rn = _copyfrombuf(self, PyBytes_AS_STRING(bytes), bytes_size); + + Py_BEGIN_ALLOW_THREADS + bytes_size = WideCharToMultiByte(CP_UTF8, 0, buf, len, + &PyBytes_AS_STRING(bytes)[rn], bytes_size - rn, NULL, NULL); + Py_END_ALLOW_THREADS + + if (!bytes_size) { + DWORD err = GetLastError(); + PyMem_Free(buf); + Py_CLEAR(bytes); + return PyErr_SetFromWindowsErr(err); + } + + PyMem_Free(buf); + if (bytes_size < (size_t)PyBytes_GET_SIZE(bytes)) { + if (_PyBytes_Resize(&bytes, n * sizeof(wchar_t)) < 0) { + Py_CLEAR(bytes); + return NULL; + } + } + return bytes; +} + +/*[clinic input] +_io._WindowsConsoleIO.read + size: io_ssize_t = -1 + / + +Read at most size bytes, returned as bytes. + +Only makes one system call when size is a positive integer, +so less data may be returned than requested. +Return an empty bytes object at EOF. +[clinic start generated code]*/ + +static PyObject * +_io__WindowsConsoleIO_read_impl(winconsoleio *self, Py_ssize_t size) +/*[clinic end generated code: output=57df68af9f4b22d0 input=6c56fceec460f1dd]*/ +{ + PyObject *bytes; + Py_ssize_t bytes_size; + + if (self->handle == INVALID_HANDLE_VALUE) + return err_closed(); + if (!self->readable) + return err_mode("reading"); + + if (size < 0) + return _io__WindowsConsoleIO_readall_impl(self); + if (size > BUFMAX) { + PyErr_Format(PyExc_ValueError, "cannot read more than %d bytes", BUFMAX); + return NULL; + } + + bytes = PyBytes_FromStringAndSize(NULL, size); + if (bytes == NULL) + return NULL; + + bytes_size = readinto(self, PyBytes_AS_STRING(bytes), PyBytes_GET_SIZE(bytes)); + if (bytes_size < 0) { + Py_CLEAR(bytes); + return NULL; + } + + if (bytes_size < PyBytes_GET_SIZE(bytes)) { + if (_PyBytes_Resize(&bytes, bytes_size) < 0) { + Py_CLEAR(bytes); + return NULL; + } + } + + return bytes; +} + +/*[clinic input] +_io._WindowsConsoleIO.write + b: Py_buffer + / + +Write buffer b to file, return number of bytes written. + +Only makes one system call, so not all of the data may be written. +The number of bytes actually written is returned. +[clinic start generated code]*/ + +static PyObject * +_io__WindowsConsoleIO_write_impl(winconsoleio *self, Py_buffer *b) +/*[clinic end generated code: output=775bdb16fbf9137b input=be35fb624f97c941]*/ +{ + BOOL res = TRUE; + wchar_t *wbuf; + DWORD len, wlen, n = 0; + + if (self->handle == INVALID_HANDLE_VALUE) + return err_closed(); + if (!self->writable) + return err_mode("writing"); + + if (b->len > BUFMAX) + len = BUFMAX; + else + len = (DWORD)b->len; + + Py_BEGIN_ALLOW_THREADS + wlen = MultiByteToWideChar(CP_UTF8, 0, b->buf, len, NULL, 0); + + /* issue11395 there is an unspecified upper bound on how many bytes + can be written at once. We cap at 32k - the caller will have to + handle partial writes. + Since we don't know how many input bytes are being ignored, we + have to reduce and recalculate. */ + while (wlen > 32766 / sizeof(wchar_t)) { + len /= 2; + wlen = MultiByteToWideChar(CP_UTF8, 0, b->buf, len, NULL, 0); + } + Py_END_ALLOW_THREADS + + if (!wlen) + return PyErr_SetFromWindowsErr(0); + + wbuf = (wchar_t*)PyMem_Malloc(wlen * sizeof(wchar_t)); + + Py_BEGIN_ALLOW_THREADS + wlen = MultiByteToWideChar(CP_UTF8, 0, b->buf, len, wbuf, wlen); + if (wlen) { + res = WriteConsoleW(self->handle, wbuf, wlen, &n, NULL); + if (n < wlen) { + /* Wrote fewer characters than expected, which means our + * len value may be wrong. So recalculate it from the + * characters that were written. As this could potentially + * result in a different value, we also validate that value. + */ + len = WideCharToMultiByte(CP_UTF8, 0, wbuf, n, + NULL, 0, NULL, NULL); + if (len) { + wlen = MultiByteToWideChar(CP_UTF8, 0, b->buf, len, + NULL, 0); + assert(wlen == len); + } + } + } else + res = 0; + Py_END_ALLOW_THREADS + + if (!res) { + DWORD err = GetLastError(); + PyMem_Free(wbuf); + return PyErr_SetFromWindowsErr(err); + } + + PyMem_Free(wbuf); + return PyLong_FromSsize_t(len); +} + +static PyObject * +winconsoleio_repr(winconsoleio *self) +{ + if (self->handle == INVALID_HANDLE_VALUE) + return PyUnicode_FromFormat("<_io._WindowsConsoleIO [closed]>"); + + if (self->readable) + return PyUnicode_FromFormat("<_io._WindowsConsoleIO mode='rb' closefd=%s>", + self->closehandle ? "True" : "False"); + if (self->writable) + return PyUnicode_FromFormat("<_io._WindowsConsoleIO mode='wb' closefd=%s>", + self->closehandle ? "True" : "False"); + + PyErr_SetString(PyExc_SystemError, "_WindowsConsoleIO has invalid mode"); + return NULL; +} + +/*[clinic input] +_io._WindowsConsoleIO.isatty + +Always True. +[clinic start generated code]*/ + +static PyObject * +_io__WindowsConsoleIO_isatty_impl(winconsoleio *self) +/*[clinic end generated code: output=9eac09d287c11bd7 input=9b91591dbe356f86]*/ +{ + if (self->handle == INVALID_HANDLE_VALUE) + return err_closed(); + + Py_RETURN_TRUE; +} + +static PyObject * +winconsoleio_getstate(winconsoleio *self) +{ + PyErr_Format(PyExc_TypeError, + "cannot serialize '%s' object", Py_TYPE(self)->tp_name); + return NULL; +} + +#include "clinic/winconsoleio.c.h" + +static PyMethodDef winconsoleio_methods[] = { + _IO__WINDOWSCONSOLEIO_READ_METHODDEF + _IO__WINDOWSCONSOLEIO_READALL_METHODDEF + _IO__WINDOWSCONSOLEIO_READINTO_METHODDEF + _IO__WINDOWSCONSOLEIO_WRITE_METHODDEF + _IO__WINDOWSCONSOLEIO_CLOSE_METHODDEF + _IO__WINDOWSCONSOLEIO_READABLE_METHODDEF + _IO__WINDOWSCONSOLEIO_WRITABLE_METHODDEF + _IO__WINDOWSCONSOLEIO_FILENO_METHODDEF + _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF + {"__getstate__", (PyCFunction)winconsoleio_getstate, METH_NOARGS, NULL}, + {NULL, NULL} /* sentinel */ +}; + +/* 'closed' and 'mode' are attributes for compatibility with FileIO. */ + +static PyObject * +get_closed(winconsoleio *self, void *closure) +{ + return PyBool_FromLong((long)(self->handle == INVALID_HANDLE_VALUE)); +} + +static PyObject * +get_closefd(winconsoleio *self, void *closure) +{ + return PyBool_FromLong((long)(self->closehandle)); +} + +static PyObject * +get_mode(winconsoleio *self, void *closure) +{ + return PyUnicode_FromString(self->readable ? "rb" : "wb"); +} + +static PyGetSetDef winconsoleio_getsetlist[] = { + {"closed", (getter)get_closed, NULL, "True if the file is closed"}, + {"closefd", (getter)get_closefd, NULL, + "True if the file descriptor will be closed by close()."}, + {"mode", (getter)get_mode, NULL, "String giving the file mode"}, + {NULL}, +}; + +static PyMemberDef winconsoleio_members[] = { + {"_blksize", T_UINT, offsetof(winconsoleio, blksize), 0}, + {"_finalizing", T_BOOL, offsetof(winconsoleio, finalizing), 0}, + {NULL} +}; + +PyTypeObject PyWindowsConsoleIO_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "_io._WindowsConsoleIO", + sizeof(winconsoleio), + 0, + (destructor)winconsoleio_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + (reprfunc)winconsoleio_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE + | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, /* tp_flags */ + _io__WindowsConsoleIO___init____doc__, /* tp_doc */ + (traverseproc)winconsoleio_traverse, /* tp_traverse */ + (inquiry)winconsoleio_clear, /* tp_clear */ + 0, /* tp_richcompare */ + offsetof(winconsoleio, weakreflist), /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + winconsoleio_methods, /* tp_methods */ + winconsoleio_members, /* tp_members */ + winconsoleio_getsetlist, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + offsetof(winconsoleio, dict), /* tp_dictoffset */ + _io__WindowsConsoleIO___init__, /* tp_init */ + PyType_GenericAlloc, /* tp_alloc */ + winconsoleio_new, /* tp_new */ + PyObject_GC_Del, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ + 0, /* tp_del */ + 0, /* tp_version_tag */ + 0, /* tp_finalize */ +}; + +#endif /* MS_WINDOWS */ -- cgit v1.2.1 From dfc087b884d2487421fb0241bd8abe3f5e0d4e88 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Fri, 9 Sep 2016 00:08:35 +0200 Subject: Check return value of PyList_Append() in Py_Main(). CID 1353200 --- Modules/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/main.c b/Modules/main.c index b6dcdd0a30..0b82f480a6 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -482,7 +482,8 @@ Py_Main(int argc, wchar_t **argv) warning_option = PyUnicode_FromWideChar(_PyOS_optarg, -1); if (warning_option == NULL) Py_FatalError("failure in handling of -W argument"); - PyList_Append(warning_options, warning_option); + if (PyList_Append(warning_options, warning_option) == -1) + Py_FatalError("failure in handling of -W argument"); Py_DECREF(warning_option); break; -- cgit v1.2.1 From 24d53e6093946b20c4dfb4b6896d3d0b9033cdd3 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Fri, 9 Sep 2016 00:11:45 +0200 Subject: Use PyModule_AddIntMacro() in signal module The signal module was using old-style module initialization with potential NULL dereferencing. CID 1295026 --- Modules/signalmodule.c | 215 ++++++++++++++++++++----------------------------- 1 file changed, 86 insertions(+), 129 deletions(-) (limited to 'Modules') diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 7eef0b5e59..8ca579185e 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -1266,210 +1266,169 @@ PyInit__signal(void) } #ifdef SIGHUP - x = PyLong_FromLong(SIGHUP); - PyDict_SetItemString(d, "SIGHUP", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGHUP)) + goto finally; #endif #ifdef SIGINT - x = PyLong_FromLong(SIGINT); - PyDict_SetItemString(d, "SIGINT", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGINT)) + goto finally; #endif #ifdef SIGBREAK - x = PyLong_FromLong(SIGBREAK); - PyDict_SetItemString(d, "SIGBREAK", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGBREAK)) + goto finally; #endif #ifdef SIGQUIT - x = PyLong_FromLong(SIGQUIT); - PyDict_SetItemString(d, "SIGQUIT", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGQUIT)) + goto finally; #endif #ifdef SIGILL - x = PyLong_FromLong(SIGILL); - PyDict_SetItemString(d, "SIGILL", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGILL)) + goto finally; #endif #ifdef SIGTRAP - x = PyLong_FromLong(SIGTRAP); - PyDict_SetItemString(d, "SIGTRAP", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGTRAP)) + goto finally; #endif #ifdef SIGIOT - x = PyLong_FromLong(SIGIOT); - PyDict_SetItemString(d, "SIGIOT", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGIOT)) + goto finally; #endif #ifdef SIGABRT - x = PyLong_FromLong(SIGABRT); - PyDict_SetItemString(d, "SIGABRT", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGABRT)) + goto finally; #endif #ifdef SIGEMT - x = PyLong_FromLong(SIGEMT); - PyDict_SetItemString(d, "SIGEMT", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGEMT)) + goto finally; #endif #ifdef SIGFPE - x = PyLong_FromLong(SIGFPE); - PyDict_SetItemString(d, "SIGFPE", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGFPE)) + goto finally; #endif #ifdef SIGKILL - x = PyLong_FromLong(SIGKILL); - PyDict_SetItemString(d, "SIGKILL", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGKILL)) + goto finally; #endif #ifdef SIGBUS - x = PyLong_FromLong(SIGBUS); - PyDict_SetItemString(d, "SIGBUS", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGBUS)) + goto finally; #endif #ifdef SIGSEGV - x = PyLong_FromLong(SIGSEGV); - PyDict_SetItemString(d, "SIGSEGV", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGSEGV)) + goto finally; #endif #ifdef SIGSYS - x = PyLong_FromLong(SIGSYS); - PyDict_SetItemString(d, "SIGSYS", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGSYS)) + goto finally; #endif #ifdef SIGPIPE - x = PyLong_FromLong(SIGPIPE); - PyDict_SetItemString(d, "SIGPIPE", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGPIPE)) + goto finally; #endif #ifdef SIGALRM - x = PyLong_FromLong(SIGALRM); - PyDict_SetItemString(d, "SIGALRM", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGALRM)) + goto finally; #endif #ifdef SIGTERM - x = PyLong_FromLong(SIGTERM); - PyDict_SetItemString(d, "SIGTERM", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGTERM)) + goto finally; #endif #ifdef SIGUSR1 - x = PyLong_FromLong(SIGUSR1); - PyDict_SetItemString(d, "SIGUSR1", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGUSR1)) + goto finally; #endif #ifdef SIGUSR2 - x = PyLong_FromLong(SIGUSR2); - PyDict_SetItemString(d, "SIGUSR2", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGUSR2)) + goto finally; #endif #ifdef SIGCLD - x = PyLong_FromLong(SIGCLD); - PyDict_SetItemString(d, "SIGCLD", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGCLD)) + goto finally; #endif #ifdef SIGCHLD - x = PyLong_FromLong(SIGCHLD); - PyDict_SetItemString(d, "SIGCHLD", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGCHLD)) + goto finally; #endif #ifdef SIGPWR - x = PyLong_FromLong(SIGPWR); - PyDict_SetItemString(d, "SIGPWR", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGPWR)) + goto finally; #endif #ifdef SIGIO - x = PyLong_FromLong(SIGIO); - PyDict_SetItemString(d, "SIGIO", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGIO)) + goto finally; #endif #ifdef SIGURG - x = PyLong_FromLong(SIGURG); - PyDict_SetItemString(d, "SIGURG", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGURG)) + goto finally; #endif #ifdef SIGWINCH - x = PyLong_FromLong(SIGWINCH); - PyDict_SetItemString(d, "SIGWINCH", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGWINCH)) + goto finally; #endif #ifdef SIGPOLL - x = PyLong_FromLong(SIGPOLL); - PyDict_SetItemString(d, "SIGPOLL", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGPOLL)) + goto finally; #endif #ifdef SIGSTOP - x = PyLong_FromLong(SIGSTOP); - PyDict_SetItemString(d, "SIGSTOP", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGSTOP)) + goto finally; #endif #ifdef SIGTSTP - x = PyLong_FromLong(SIGTSTP); - PyDict_SetItemString(d, "SIGTSTP", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGTSTP)) + goto finally; #endif #ifdef SIGCONT - x = PyLong_FromLong(SIGCONT); - PyDict_SetItemString(d, "SIGCONT", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGCONT)) + goto finally; #endif #ifdef SIGTTIN - x = PyLong_FromLong(SIGTTIN); - PyDict_SetItemString(d, "SIGTTIN", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGTTIN)) + goto finally; #endif #ifdef SIGTTOU - x = PyLong_FromLong(SIGTTOU); - PyDict_SetItemString(d, "SIGTTOU", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGTTOU)) + goto finally; #endif #ifdef SIGVTALRM - x = PyLong_FromLong(SIGVTALRM); - PyDict_SetItemString(d, "SIGVTALRM", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGVTALRM)) + goto finally; #endif #ifdef SIGPROF - x = PyLong_FromLong(SIGPROF); - PyDict_SetItemString(d, "SIGPROF", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGPROF)) + goto finally; #endif #ifdef SIGXCPU - x = PyLong_FromLong(SIGXCPU); - PyDict_SetItemString(d, "SIGXCPU", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGXCPU)) + goto finally; #endif #ifdef SIGXFSZ - x = PyLong_FromLong(SIGXFSZ); - PyDict_SetItemString(d, "SIGXFSZ", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGXFSZ)) + goto finally; #endif #ifdef SIGRTMIN - x = PyLong_FromLong(SIGRTMIN); - PyDict_SetItemString(d, "SIGRTMIN", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGRTMIN)) + goto finally; #endif #ifdef SIGRTMAX - x = PyLong_FromLong(SIGRTMAX); - PyDict_SetItemString(d, "SIGRTMAX", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGRTMAX)) + goto finally; #endif #ifdef SIGINFO - x = PyLong_FromLong(SIGINFO); - PyDict_SetItemString(d, "SIGINFO", x); - Py_XDECREF(x); + if (PyModule_AddIntMacro(m, SIGINFO)) + goto finally; #endif #ifdef ITIMER_REAL - x = PyLong_FromLong(ITIMER_REAL); - PyDict_SetItemString(d, "ITIMER_REAL", x); - Py_DECREF(x); + if (PyModule_AddIntMacro(m, ITIMER_REAL)) + goto finally; #endif #ifdef ITIMER_VIRTUAL - x = PyLong_FromLong(ITIMER_VIRTUAL); - PyDict_SetItemString(d, "ITIMER_VIRTUAL", x); - Py_DECREF(x); + if (PyModule_AddIntMacro(m, ITIMER_VIRTUAL)) + goto finally; #endif #ifdef ITIMER_PROF - x = PyLong_FromLong(ITIMER_PROF); - PyDict_SetItemString(d, "ITIMER_PROF", x); - Py_DECREF(x); + if (PyModule_AddIntMacro(m, ITIMER_PROF)) + goto finally; #endif #if defined (HAVE_SETITIMER) || defined (HAVE_GETITIMER) @@ -1480,15 +1439,13 @@ PyInit__signal(void) #endif #ifdef CTRL_C_EVENT - x = PyLong_FromLong(CTRL_C_EVENT); - PyDict_SetItemString(d, "CTRL_C_EVENT", x); - Py_DECREF(x); + if (PyModule_AddIntMacro(m, CTRL_C_EVENT)) + goto finally; #endif #ifdef CTRL_BREAK_EVENT - x = PyLong_FromLong(CTRL_BREAK_EVENT); - PyDict_SetItemString(d, "CTRL_BREAK_EVENT", x); - Py_DECREF(x); + if (PyModule_AddIntMacro(m, CTRL_BREAK_EVENT)) + goto finally; #endif #ifdef MS_WINDOWS -- cgit v1.2.1 From 168a05331ed1762f75a2d91ffd6d5b81e63d4437 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Fri, 9 Sep 2016 00:13:35 +0200 Subject: Add error checking to PyInit_pyexpact The module initializer of the pyexpat module failed to check the return value of PySys_GetObject() for NULL. CID 982779 --- Modules/pyexpat.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index dc97e9d2bf..b19b7be160 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1701,7 +1701,15 @@ MODULE_INITFUNC(void) PyModule_AddStringConstant(m, "native_encoding", "UTF-8"); sys_modules = PySys_GetObject("modules"); + if (sys_modules == NULL) { + Py_DECREF(m); + return NULL; + } d = PyModule_GetDict(m); + if (d == NULL) { + Py_DECREF(m); + return NULL; + } errors_module = PyDict_GetItem(d, errmod_name); if (errors_module == NULL) { errors_module = PyModule_New(MODULE_NAME ".errors"); @@ -1722,9 +1730,11 @@ MODULE_INITFUNC(void) } } Py_DECREF(modelmod_name); - if (errors_module == NULL || model_module == NULL) + if (errors_module == NULL || model_module == NULL) { /* Don't core dump later! */ + Py_DECREF(m); return NULL; + } #if XML_COMBINED_VERSION > 19505 { -- cgit v1.2.1 From 40c31391286f094111dd940af4c4fb83d8d4c865 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Thu, 8 Sep 2016 15:08:02 -0700 Subject: replace PyInt16 with int16_t --- Modules/audioop.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'Modules') diff --git a/Modules/audioop.c b/Modules/audioop.c index 44e5198b3c..3f31a2b35b 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -4,9 +4,6 @@ #define PY_SSIZE_T_CLEAN #include "Python.h" -#include - -typedef short PyInt16; #if defined(__CHAR_UNSIGNED__) #if defined(signed) @@ -52,15 +49,15 @@ fbound(double val, double minval, double maxval) #define SEG_SHIFT (4) /* Left shift for segment number. */ #define SEG_MASK (0x70) /* Segment field mask. */ -static const PyInt16 seg_aend[8] = { +static const int16_t seg_aend[8] = { 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF }; -static const PyInt16 seg_uend[8] = { +static const int16_t seg_uend[8] = { 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF }; -static PyInt16 -search(PyInt16 val, const PyInt16 *table, int size) +static int16_t +search(int16_t val, const int16_t *table, int size) { int i; @@ -73,7 +70,7 @@ search(PyInt16 val, const PyInt16 *table, int size) #define st_ulaw2linear16(uc) (_st_ulaw2linear16[uc]) #define st_alaw2linear16(uc) (_st_alaw2linear16[uc]) -static const PyInt16 _st_ulaw2linear16[256] = { +static const int16_t _st_ulaw2linear16[256] = { -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956, -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764, -15996, -15484, -14972, -14460, -13948, @@ -146,10 +143,10 @@ static const PyInt16 _st_ulaw2linear16[256] = { * John Wiley & Sons, pps 98-111 and 472-476. */ static unsigned char -st_14linear2ulaw(PyInt16 pcm_val) /* 2's complement (14-bit range) */ +st_14linear2ulaw(int16_t pcm_val) /* 2's complement (14-bit range) */ { - PyInt16 mask; - PyInt16 seg; + int16_t mask; + int16_t seg; unsigned char uval; /* u-law inverts all bits */ @@ -179,7 +176,7 @@ st_14linear2ulaw(PyInt16 pcm_val) /* 2's complement (14-bit range) */ } -static const PyInt16 _st_alaw2linear16[256] = { +static const int16_t _st_alaw2linear16[256] = { -5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736, -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784, -2752, -2624, -3008, -2880, -2240, @@ -240,9 +237,9 @@ static const PyInt16 _st_alaw2linear16[256] = { * John Wiley & Sons, pps 98-111 and 472-476. */ static unsigned char -st_linear2alaw(PyInt16 pcm_val) /* 2's complement (13-bit range) */ +st_linear2alaw(int16_t pcm_val) /* 2's complement (13-bit range) */ { - PyInt16 mask; + int16_t mask; short seg; unsigned char aval; -- cgit v1.2.1 From 6d087657502bab3c1e78c721d478e97b1ce89491 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Fri, 9 Sep 2016 00:24:12 +0200 Subject: Add NULL checks to the initializer of the locale module The _locale module was using old-style APIs to set numeric module constants from macros. The new way requires less code and properly checks for NULL. CID 1295027 --- Modules/_localemodule.c | 54 ++++++++++++++++++------------------------------- 1 file changed, 20 insertions(+), 34 deletions(-) (limited to 'Modules') diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index a92fb10dd2..8259180f82 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -621,53 +621,34 @@ static struct PyModuleDef _localemodule = { PyMODINIT_FUNC PyInit__locale(void) { - PyObject *m, *d, *x; + PyObject *m; #ifdef HAVE_LANGINFO_H int i; #endif m = PyModule_Create(&_localemodule); if (m == NULL) - return NULL; - - d = PyModule_GetDict(m); - - x = PyLong_FromLong(LC_CTYPE); - PyDict_SetItemString(d, "LC_CTYPE", x); - Py_XDECREF(x); - - x = PyLong_FromLong(LC_TIME); - PyDict_SetItemString(d, "LC_TIME", x); - Py_XDECREF(x); - - x = PyLong_FromLong(LC_COLLATE); - PyDict_SetItemString(d, "LC_COLLATE", x); - Py_XDECREF(x); + return NULL; - x = PyLong_FromLong(LC_MONETARY); - PyDict_SetItemString(d, "LC_MONETARY", x); - Py_XDECREF(x); + PyModule_AddIntMacro(m, LC_CTYPE); + PyModule_AddIntMacro(m, LC_TIME); + PyModule_AddIntMacro(m, LC_COLLATE); + PyModule_AddIntMacro(m, LC_MONETARY); #ifdef LC_MESSAGES - x = PyLong_FromLong(LC_MESSAGES); - PyDict_SetItemString(d, "LC_MESSAGES", x); - Py_XDECREF(x); + PyModule_AddIntMacro(m, LC_MESSAGES); #endif /* LC_MESSAGES */ - x = PyLong_FromLong(LC_NUMERIC); - PyDict_SetItemString(d, "LC_NUMERIC", x); - Py_XDECREF(x); - - x = PyLong_FromLong(LC_ALL); - PyDict_SetItemString(d, "LC_ALL", x); - Py_XDECREF(x); - - x = PyLong_FromLong(CHAR_MAX); - PyDict_SetItemString(d, "CHAR_MAX", x); - Py_XDECREF(x); + PyModule_AddIntMacro(m, LC_NUMERIC); + PyModule_AddIntMacro(m, LC_ALL); + PyModule_AddIntMacro(m, CHAR_MAX); Error = PyErr_NewException("locale.Error", NULL, NULL); - PyDict_SetItemString(d, "Error", Error); + if (Error == NULL) { + Py_DECREF(m); + return NULL; + } + PyModule_AddObject(m, "Error", Error); #ifdef HAVE_LANGINFO_H for (i = 0; langinfo_constants[i].name; i++) { @@ -675,6 +656,11 @@ PyInit__locale(void) langinfo_constants[i].value); } #endif + + if (PyErr_Occurred()) { + Py_DECREF(m); + return NULL; + } return m; } -- cgit v1.2.1 From 176d4e2a24d764050194d9e3e4abafa8154da1fc Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Fri, 9 Sep 2016 00:28:57 +0200 Subject: Issue 18550: Check return value of ioctl() / fnctl() in internal_setblocking The function internal_setblocking() of the socket module did not check the return values of ioctl() and fnctl(). CID 1294328 --- Modules/socketmodule.c | 61 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 20 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 1f529228b7..dd8bfb0296 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -640,24 +640,35 @@ internal_setblocking(PySocketSockObject *s, int block) #ifndef MS_WINDOWS #if (defined(HAVE_SYS_IOCTL_H) && defined(FIONBIO)) block = !block; - ioctl(s->sock_fd, FIONBIO, (unsigned int *)&block); + if (ioctl(s->sock_fd, FIONBIO, (unsigned int *)&block) == -1) + goto error; #else delay_flag = fcntl(s->sock_fd, F_GETFL, 0); + if (delay_flag == -1) + goto error; if (block) new_delay_flag = delay_flag & (~O_NONBLOCK); else new_delay_flag = delay_flag | O_NONBLOCK; if (new_delay_flag != delay_flag) - fcntl(s->sock_fd, F_SETFL, new_delay_flag); + if (fcntl(s->sock_fd, F_SETFL, new_delay_flag) == -1) + goto error; #endif #else /* MS_WINDOWS */ arg = !block; - ioctlsocket(s->sock_fd, FIONBIO, &arg); + if (ioctlsocket(s->sock_fd, FIONBIO, &arg) != 0) + goto error; #endif /* MS_WINDOWS */ Py_END_ALLOW_THREADS - /* Since these don't return anything */ - return 1; + return 0; + error: +#ifndef MS_WINDOWS + PyErr_SetFromErrno(PyExc_OSError); +#else + PyErr_SetExcFromWindowsErr(PyExc_OSError, WSAGetLastError()); +#endif + return -1; } static int @@ -905,7 +916,7 @@ sock_call(PySocketSockObject *s, /* Default timeout for new sockets */ static _PyTime_t defaulttimeout = _PYTIME_FROMSECONDS(-1); -static void +static int init_sockobject(PySocketSockObject *s, SOCKET_T fd, int family, int type, int proto) { @@ -922,10 +933,13 @@ init_sockobject(PySocketSockObject *s, #endif { s->sock_timeout = defaulttimeout; - if (defaulttimeout >= 0) - internal_setblocking(s, 0); + if (defaulttimeout >= 0) { + if (internal_setblocking(s, 0) == -1) { + return -1; + } + } } - + return 0; } @@ -940,8 +954,12 @@ new_sockobject(SOCKET_T fd, int family, int type, int proto) PySocketSockObject *s; s = (PySocketSockObject *) PyType_GenericNew(&sock_type, NULL, NULL); - if (s != NULL) - init_sockobject(s, fd, family, type, proto); + if (s == NULL) + return NULL; + if (init_sockobject(s, fd, family, type, proto) == -1) { + Py_DECREF(s); + return NULL; + } return s; } @@ -2423,10 +2441,10 @@ sock_setblocking(PySocketSockObject *s, PyObject *arg) return NULL; s->sock_timeout = _PyTime_FromSeconds(block ? -1 : 0); - internal_setblocking(s, block); - - Py_INCREF(Py_None); - return Py_None; + if (internal_setblocking(s, block) == -1) { + return NULL; + } + Py_RETURN_NONE; } PyDoc_STRVAR(setblocking_doc, @@ -2492,10 +2510,10 @@ sock_settimeout(PySocketSockObject *s, PyObject *arg) return NULL; s->sock_timeout = timeout; - internal_setblocking(s, timeout < 0); - - Py_INCREF(Py_None); - return Py_None; + if (internal_setblocking(s, timeout < 0) == -1) { + return NULL; + } + Py_RETURN_NONE; } PyDoc_STRVAR(settimeout_doc, @@ -4720,7 +4738,10 @@ sock_initobj(PyObject *self, PyObject *args, PyObject *kwds) } #endif } - init_sockobject(s, fd, family, type, proto); + if (init_sockobject(s, fd, family, type, proto) == -1) { + SOCKETCLOSE(fd); + return -1; + } return 0; -- cgit v1.2.1 From b164476aaf77ceffac36ddbbdc7f4df90fbfebd3 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Thu, 8 Sep 2016 20:50:03 -0700 Subject: Issue #27985: Implement PEP 526 -- Syntax for Variable Annotations. Patch by Ivan Levkivskyi. --- Modules/symtablemodule.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c index f84cc78b73..34a6fc56f9 100644 --- a/Modules/symtablemodule.c +++ b/Modules/symtablemodule.c @@ -79,6 +79,7 @@ PyInit__symtable(void) PyModule_AddIntMacro(m, DEF_FREE_CLASS); PyModule_AddIntMacro(m, DEF_IMPORT); PyModule_AddIntMacro(m, DEF_BOUND); + PyModule_AddIntMacro(m, DEF_ANNOT); PyModule_AddIntConstant(m, "TYPE_FUNCTION", FunctionBlock); PyModule_AddIntConstant(m, "TYPE_CLASS", ClassBlock); -- cgit v1.2.1 From 17668cfa5e0e6f50376cc233d9b063b908a19845 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Thu, 8 Sep 2016 22:01:51 -0700 Subject: Issue #28003: Implement PEP 525 -- Asynchronous Generators. --- Modules/gcmodule.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 0c6f4448f0..07950a6228 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -892,6 +892,7 @@ clear_freelists(void) (void)PyList_ClearFreeList(); (void)PyDict_ClearFreeList(); (void)PySet_ClearFreeList(); + (void)PyAsyncGen_ClearFreeLists(); } /* This is the main function. Read this to understand how the -- cgit v1.2.1 From 39ea75b1547851f03587418f6668a2a01d3c2194 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 9 Sep 2016 09:03:15 -0700 Subject: Issue #27781: Fixes uninitialized fd when !MS_WINDOWS and !HAVE_OPENAT --- Modules/posixmodule.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index c1ba7ba9a6..ce646846df 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -7477,13 +7477,14 @@ os_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd) Py_BEGIN_ALLOW_THREADS #ifdef MS_WINDOWS fd = _wopen(path->wide, flags, mode); -#endif +#else #ifdef HAVE_OPENAT if (dir_fd != DEFAULT_DIR_FD) fd = openat(dir_fd, path->narrow, flags, mode); else +#endif /* HAVE_OPENAT */ fd = open(path->narrow, flags, mode); -#endif +#endif /* !MS_WINDOWS */ Py_END_ALLOW_THREADS } while (fd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); _Py_END_SUPPRESS_IPH -- cgit v1.2.1 From e920f62ce6131c83acb33d0457c8ed05d5acce23 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 9 Sep 2016 12:01:10 -0700 Subject: remove --with(out)-signal-module, since the signal module is non-optional --- Modules/Setup.config.in | 3 --- Modules/Setup.dist | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/Setup.config.in b/Modules/Setup.config.in index adac030b6a..645052873d 100644 --- a/Modules/Setup.config.in +++ b/Modules/Setup.config.in @@ -6,8 +6,5 @@ # Threading @USE_THREAD_MODULE@_thread _threadmodule.c -# The signal module -@USE_SIGNAL_MODULE@_signal signalmodule.c - # The rest of the modules previously listed in this file are built # by the setup.py script in Python 2.1 and later. diff --git a/Modules/Setup.dist b/Modules/Setup.dist index 06ba6adf24..e17ff1212b 100644 --- a/Modules/Setup.dist +++ b/Modules/Setup.dist @@ -117,6 +117,7 @@ _operator _operator.c # operator.add() and similar goodies _collections _collectionsmodule.c # Container types itertools itertoolsmodule.c # Functions creating iterators for efficient looping atexit atexitmodule.c # Register functions to be run at interpreter-shutdown +_signal signalmodule.c _stat _stat.c # stat.h interface time timemodule.c # -lm # time operations and variables -- cgit v1.2.1 From 033712922fc31dd53c74ed2d299f81b969ae7e98 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 9 Sep 2016 14:57:09 -0700 Subject: Issue #26331: Implement the parsing part of PEP 515. Thanks to Georg Brandl for the patch. --- Modules/_decimal/_decimal.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index 3ba8e35ce9..fcc1f151cf 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -1889,12 +1889,13 @@ is_space(enum PyUnicode_Kind kind, void *data, Py_ssize_t pos) /* Return the ASCII representation of a numeric Unicode string. The numeric string may contain ascii characters in the range [1, 127], any Unicode space and any unicode digit. If strip_ws is true, leading and trailing - whitespace is stripped. + whitespace is stripped. If ignore_underscores is true, underscores are + ignored. Return NULL if malloc fails and an empty string if invalid characters are found. */ static char * -numeric_as_ascii(const PyObject *u, int strip_ws) +numeric_as_ascii(const PyObject *u, int strip_ws, int ignore_underscores) { enum PyUnicode_Kind kind; void *data; @@ -1929,6 +1930,9 @@ numeric_as_ascii(const PyObject *u, int strip_ws) for (; j < len; j++) { ch = PyUnicode_READ(kind, data, j); + if (ignore_underscores && ch == '_') { + continue; + } if (0 < ch && ch <= 127) { *cp++ = ch; continue; @@ -2011,7 +2015,7 @@ PyDecType_FromUnicode(PyTypeObject *type, const PyObject *u, PyObject *dec; char *s; - s = numeric_as_ascii(u, 0); + s = numeric_as_ascii(u, 0, 0); if (s == NULL) { return NULL; } @@ -2031,7 +2035,7 @@ PyDecType_FromUnicodeExactWS(PyTypeObject *type, const PyObject *u, PyObject *dec; char *s; - s = numeric_as_ascii(u, 1); + s = numeric_as_ascii(u, 1, 1); if (s == NULL) { return NULL; } -- cgit v1.2.1 From 7d9e9f40d8903147693be8d2bbb4a129005ca49e Mon Sep 17 00:00:00 2001 From: ?ukasz Langa Date: Fri, 9 Sep 2016 17:37:37 -0700 Subject: DTrace support: function calls, GC activity, line execution Tested on macOS 10.11 dtrace, Ubuntu 16.04 SystemTap, and libbcc. Largely based by an initial patch by Jes?s Cea Avi?n, with some influence from Dave Malcolm's SystemTap patch and Nikhil Benesch's unification patch. Things deliberately left out for simplicity: - ustack helpers, I have no way of testing them at this point since they are Solaris-specific - PyFrameObject * in function__entry/function__return, this is SystemTap-specific - SPARC support - dynamic tracing - sys module dtrace facility introspection All of those might be added later. --- Modules/gcmodule.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'Modules') diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 07950a6228..2575d96d71 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -25,6 +25,7 @@ #include "Python.h" #include "frameobject.h" /* for PyFrame_ClearFreeList */ +#include "pydtrace.h" #include "pytime.h" /* for _PyTime_GetMonotonicClock() */ /* Get an object's GC head */ @@ -925,6 +926,9 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, PySys_WriteStderr("\n"); } + if (PyDTrace_GC_START_ENABLED()) + PyDTrace_GC_START(generation); + /* update collection and allocation counters */ if (generation+1 < NUM_GENERATIONS) generations[generation+1].count += 1; @@ -1069,6 +1073,10 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, stats->collections++; stats->collected += m; stats->uncollectable += n; + + if (PyDTrace_GC_DONE_ENABLED()) + PyDTrace_GC_DONE(n+m); + return n+m; } -- cgit v1.2.1 From d260629756a13ffcb359fe487c7261adbb4751c1 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 9 Sep 2016 17:46:24 -0700 Subject: fix dummy macro --- Modules/_datetimemodule.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 6597cb7ad5..13c9d2ff4f 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -2841,9 +2841,10 @@ static PyObject *date_getstate(PyDateTime_Date *self); static Py_hash_t date_hash(PyDateTime_Date *self) { - if (self->hashcode == -1) + if (self->hashcode == -1) { self->hashcode = generic_hash( (unsigned char *)self->data, _PyDateTime_DATE_DATASIZE); + } return self->hashcode; } -- cgit v1.2.1 From daa2ed44798ad45ac665321cae21a23661d0e044 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 9 Sep 2016 20:00:13 -0700 Subject: Issue #27810: Rerun Argument Clinic on all modules --- Modules/clinic/_bz2module.c.h | 8 +- Modules/clinic/_codecsmodule.c.h | 14 +- Modules/clinic/_datetimemodule.c.h | 8 +- Modules/clinic/_elementtree.c.h | 38 ++-- Modules/clinic/_hashopenssl.c.h | 8 +- Modules/clinic/_lzmamodule.c.h | 8 +- Modules/clinic/_pickle.c.h | 26 +-- Modules/clinic/_sre.c.h | 92 ++++----- Modules/clinic/_ssl.c.h | 50 ++--- Modules/clinic/_winapi.c.h | 20 +- Modules/clinic/binascii.c.h | 20 +- Modules/clinic/cmathmodule.c.h | 8 +- Modules/clinic/grpmodule.c.h | 14 +- Modules/clinic/md5module.c.h | 8 +- Modules/clinic/posixmodule.c.h | 383 +++++++++++++++++++------------------ Modules/clinic/pyexpat.c.h | 8 +- Modules/clinic/sha1module.c.h | 8 +- Modules/clinic/sha256module.c.h | 14 +- Modules/clinic/sha512module.c.h | 14 +- Modules/clinic/zlibmodule.c.h | 32 ++-- 20 files changed, 391 insertions(+), 390 deletions(-) (limited to 'Modules') diff --git a/Modules/clinic/_bz2module.c.h b/Modules/clinic/_bz2module.c.h index c4032ea37f..1ca810c9e7 100644 --- a/Modules/clinic/_bz2module.c.h +++ b/Modules/clinic/_bz2module.c.h @@ -115,14 +115,14 @@ PyDoc_STRVAR(_bz2_BZ2Decompressor_decompress__doc__, "the unused_data attribute."); #define _BZ2_BZ2DECOMPRESSOR_DECOMPRESS_METHODDEF \ - {"decompress", (PyCFunction)_bz2_BZ2Decompressor_decompress, METH_VARARGS|METH_KEYWORDS, _bz2_BZ2Decompressor_decompress__doc__}, + {"decompress", (PyCFunction)_bz2_BZ2Decompressor_decompress, METH_FASTCALL, _bz2_BZ2Decompressor_decompress__doc__}, static PyObject * _bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data, Py_ssize_t max_length); static PyObject * -_bz2_BZ2Decompressor_decompress(BZ2Decompressor *self, PyObject *args, PyObject *kwargs) +_bz2_BZ2Decompressor_decompress(BZ2Decompressor *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"data", "max_length", NULL}; @@ -130,7 +130,7 @@ _bz2_BZ2Decompressor_decompress(BZ2Decompressor *self, PyObject *args, PyObject Py_buffer data = {NULL, NULL}; Py_ssize_t max_length = -1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &data, &max_length)) { goto exit; } @@ -174,4 +174,4 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=40e5ef049f9e719b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7e57af0b368d3e55 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index c7fd66ffb8..056287d06a 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -55,14 +55,14 @@ PyDoc_STRVAR(_codecs_encode__doc__, "codecs.register_error that can handle ValueErrors."); #define _CODECS_ENCODE_METHODDEF \ - {"encode", (PyCFunction)_codecs_encode, METH_VARARGS|METH_KEYWORDS, _codecs_encode__doc__}, + {"encode", (PyCFunction)_codecs_encode, METH_FASTCALL, _codecs_encode__doc__}, static PyObject * _codecs_encode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors); static PyObject * -_codecs_encode(PyObject *module, PyObject *args, PyObject *kwargs) +_codecs_encode(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"obj", "encoding", "errors", NULL}; @@ -71,7 +71,7 @@ _codecs_encode(PyObject *module, PyObject *args, PyObject *kwargs) const char *encoding = NULL; const char *errors = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &obj, &encoding, &errors)) { goto exit; } @@ -94,14 +94,14 @@ PyDoc_STRVAR(_codecs_decode__doc__, "codecs.register_error that can handle ValueErrors."); #define _CODECS_DECODE_METHODDEF \ - {"decode", (PyCFunction)_codecs_decode, METH_VARARGS|METH_KEYWORDS, _codecs_decode__doc__}, + {"decode", (PyCFunction)_codecs_decode, METH_FASTCALL, _codecs_decode__doc__}, static PyObject * _codecs_decode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors); static PyObject * -_codecs_decode(PyObject *module, PyObject *args, PyObject *kwargs) +_codecs_decode(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"obj", "encoding", "errors", NULL}; @@ -110,7 +110,7 @@ _codecs_decode(PyObject *module, PyObject *args, PyObject *kwargs) const char *encoding = NULL; const char *errors = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &obj, &encoding, &errors)) { goto exit; } @@ -1536,4 +1536,4 @@ exit: #ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF #define _CODECS_CODE_PAGE_ENCODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ -/*[clinic end generated code: output=ebe313ab417b17bb input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6d6afcabde10ed79 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_datetimemodule.c.h b/Modules/clinic/_datetimemodule.c.h index cf0920777a..dcb992b1af 100644 --- a/Modules/clinic/_datetimemodule.c.h +++ b/Modules/clinic/_datetimemodule.c.h @@ -14,20 +14,20 @@ PyDoc_STRVAR(datetime_datetime_now__doc__, "If no tz is specified, uses local timezone."); #define DATETIME_DATETIME_NOW_METHODDEF \ - {"now", (PyCFunction)datetime_datetime_now, METH_VARARGS|METH_KEYWORDS|METH_CLASS, datetime_datetime_now__doc__}, + {"now", (PyCFunction)datetime_datetime_now, METH_FASTCALL|METH_CLASS, datetime_datetime_now__doc__}, static PyObject * datetime_datetime_now_impl(PyTypeObject *type, PyObject *tz); static PyObject * -datetime_datetime_now(PyTypeObject *type, PyObject *args, PyObject *kwargs) +datetime_datetime_now(PyTypeObject *type, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"tz", NULL}; static _PyArg_Parser _parser = {"|O:now", _keywords, 0}; PyObject *tz = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &tz)) { goto exit; } @@ -36,4 +36,4 @@ datetime_datetime_now(PyTypeObject *type, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=61f85af5637df8b5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8aaac0705add61ca input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_elementtree.c.h b/Modules/clinic/_elementtree.c.h index c91dfbf4b9..1b309cd88c 100644 --- a/Modules/clinic/_elementtree.c.h +++ b/Modules/clinic/_elementtree.c.h @@ -136,14 +136,14 @@ PyDoc_STRVAR(_elementtree_Element_find__doc__, "\n"); #define _ELEMENTTREE_ELEMENT_FIND_METHODDEF \ - {"find", (PyCFunction)_elementtree_Element_find, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_find__doc__}, + {"find", (PyCFunction)_elementtree_Element_find, METH_FASTCALL, _elementtree_Element_find__doc__}, static PyObject * _elementtree_Element_find_impl(ElementObject *self, PyObject *path, PyObject *namespaces); static PyObject * -_elementtree_Element_find(ElementObject *self, PyObject *args, PyObject *kwargs) +_elementtree_Element_find(ElementObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "namespaces", NULL}; @@ -151,7 +151,7 @@ _elementtree_Element_find(ElementObject *self, PyObject *args, PyObject *kwargs) PyObject *path; PyObject *namespaces = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &path, &namespaces)) { goto exit; } @@ -167,7 +167,7 @@ PyDoc_STRVAR(_elementtree_Element_findtext__doc__, "\n"); #define _ELEMENTTREE_ELEMENT_FINDTEXT_METHODDEF \ - {"findtext", (PyCFunction)_elementtree_Element_findtext, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_findtext__doc__}, + {"findtext", (PyCFunction)_elementtree_Element_findtext, METH_FASTCALL, _elementtree_Element_findtext__doc__}, static PyObject * _elementtree_Element_findtext_impl(ElementObject *self, PyObject *path, @@ -175,7 +175,7 @@ _elementtree_Element_findtext_impl(ElementObject *self, PyObject *path, PyObject *namespaces); static PyObject * -_elementtree_Element_findtext(ElementObject *self, PyObject *args, PyObject *kwargs) +_elementtree_Element_findtext(ElementObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "default", "namespaces", NULL}; @@ -184,7 +184,7 @@ _elementtree_Element_findtext(ElementObject *self, PyObject *args, PyObject *kwa PyObject *default_value = Py_None; PyObject *namespaces = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &path, &default_value, &namespaces)) { goto exit; } @@ -200,14 +200,14 @@ PyDoc_STRVAR(_elementtree_Element_findall__doc__, "\n"); #define _ELEMENTTREE_ELEMENT_FINDALL_METHODDEF \ - {"findall", (PyCFunction)_elementtree_Element_findall, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_findall__doc__}, + {"findall", (PyCFunction)_elementtree_Element_findall, METH_FASTCALL, _elementtree_Element_findall__doc__}, static PyObject * _elementtree_Element_findall_impl(ElementObject *self, PyObject *path, PyObject *namespaces); static PyObject * -_elementtree_Element_findall(ElementObject *self, PyObject *args, PyObject *kwargs) +_elementtree_Element_findall(ElementObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "namespaces", NULL}; @@ -215,7 +215,7 @@ _elementtree_Element_findall(ElementObject *self, PyObject *args, PyObject *kwar PyObject *path; PyObject *namespaces = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &path, &namespaces)) { goto exit; } @@ -231,14 +231,14 @@ PyDoc_STRVAR(_elementtree_Element_iterfind__doc__, "\n"); #define _ELEMENTTREE_ELEMENT_ITERFIND_METHODDEF \ - {"iterfind", (PyCFunction)_elementtree_Element_iterfind, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_iterfind__doc__}, + {"iterfind", (PyCFunction)_elementtree_Element_iterfind, METH_FASTCALL, _elementtree_Element_iterfind__doc__}, static PyObject * _elementtree_Element_iterfind_impl(ElementObject *self, PyObject *path, PyObject *namespaces); static PyObject * -_elementtree_Element_iterfind(ElementObject *self, PyObject *args, PyObject *kwargs) +_elementtree_Element_iterfind(ElementObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "namespaces", NULL}; @@ -246,7 +246,7 @@ _elementtree_Element_iterfind(ElementObject *self, PyObject *args, PyObject *kwa PyObject *path; PyObject *namespaces = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &path, &namespaces)) { goto exit; } @@ -262,14 +262,14 @@ PyDoc_STRVAR(_elementtree_Element_get__doc__, "\n"); #define _ELEMENTTREE_ELEMENT_GET_METHODDEF \ - {"get", (PyCFunction)_elementtree_Element_get, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_get__doc__}, + {"get", (PyCFunction)_elementtree_Element_get, METH_FASTCALL, _elementtree_Element_get__doc__}, static PyObject * _elementtree_Element_get_impl(ElementObject *self, PyObject *key, PyObject *default_value); static PyObject * -_elementtree_Element_get(ElementObject *self, PyObject *args, PyObject *kwargs) +_elementtree_Element_get(ElementObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"key", "default", NULL}; @@ -277,7 +277,7 @@ _elementtree_Element_get(ElementObject *self, PyObject *args, PyObject *kwargs) PyObject *key; PyObject *default_value = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &key, &default_value)) { goto exit; } @@ -310,20 +310,20 @@ PyDoc_STRVAR(_elementtree_Element_iter__doc__, "\n"); #define _ELEMENTTREE_ELEMENT_ITER_METHODDEF \ - {"iter", (PyCFunction)_elementtree_Element_iter, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_iter__doc__}, + {"iter", (PyCFunction)_elementtree_Element_iter, METH_FASTCALL, _elementtree_Element_iter__doc__}, static PyObject * _elementtree_Element_iter_impl(ElementObject *self, PyObject *tag); static PyObject * -_elementtree_Element_iter(ElementObject *self, PyObject *args, PyObject *kwargs) +_elementtree_Element_iter(ElementObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"tag", NULL}; static _PyArg_Parser _parser = {"|O:iter", _keywords, 0}; PyObject *tag = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &tag)) { goto exit; } @@ -702,4 +702,4 @@ _elementtree_XMLParser__setevents(XMLParserObject *self, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=4c5e94c28a009ce6 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b4a571a98ced3163 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_hashopenssl.c.h b/Modules/clinic/_hashopenssl.c.h index 96e6cfe0e4..0445352604 100644 --- a/Modules/clinic/_hashopenssl.c.h +++ b/Modules/clinic/_hashopenssl.c.h @@ -12,7 +12,7 @@ PyDoc_STRVAR(_hashlib_scrypt__doc__, "scrypt password-based key derivation function."); #define _HASHLIB_SCRYPT_METHODDEF \ - {"scrypt", (PyCFunction)_hashlib_scrypt, METH_VARARGS|METH_KEYWORDS, _hashlib_scrypt__doc__}, + {"scrypt", (PyCFunction)_hashlib_scrypt, METH_FASTCALL, _hashlib_scrypt__doc__}, static PyObject * _hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt, @@ -20,7 +20,7 @@ _hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt, long maxmem, long dklen); static PyObject * -_hashlib_scrypt(PyObject *module, PyObject *args, PyObject *kwargs) +_hashlib_scrypt(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"password", "salt", "n", "r", "p", "maxmem", "dklen", NULL}; @@ -33,7 +33,7 @@ _hashlib_scrypt(PyObject *module, PyObject *args, PyObject *kwargs) long maxmem = 0; long dklen = 64; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &password, &salt, &PyLong_Type, &n_obj, &PyLong_Type, &r_obj, &PyLong_Type, &p_obj, &maxmem, &dklen)) { goto exit; } @@ -57,4 +57,4 @@ exit: #ifndef _HASHLIB_SCRYPT_METHODDEF #define _HASHLIB_SCRYPT_METHODDEF #endif /* !defined(_HASHLIB_SCRYPT_METHODDEF) */ -/*[clinic end generated code: output=8c5386789f77430a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=118cd7036fa0fb52 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h index c2ac89a9cd..9e6075954a 100644 --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -81,14 +81,14 @@ PyDoc_STRVAR(_lzma_LZMADecompressor_decompress__doc__, "the unused_data attribute."); #define _LZMA_LZMADECOMPRESSOR_DECOMPRESS_METHODDEF \ - {"decompress", (PyCFunction)_lzma_LZMADecompressor_decompress, METH_VARARGS|METH_KEYWORDS, _lzma_LZMADecompressor_decompress__doc__}, + {"decompress", (PyCFunction)_lzma_LZMADecompressor_decompress, METH_FASTCALL, _lzma_LZMADecompressor_decompress__doc__}, static PyObject * _lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data, Py_ssize_t max_length); static PyObject * -_lzma_LZMADecompressor_decompress(Decompressor *self, PyObject *args, PyObject *kwargs) +_lzma_LZMADecompressor_decompress(Decompressor *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"data", "max_length", NULL}; @@ -96,7 +96,7 @@ _lzma_LZMADecompressor_decompress(Decompressor *self, PyObject *args, PyObject * Py_buffer data = {NULL, NULL}; Py_ssize_t max_length = -1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &data, &max_length)) { goto exit; } @@ -256,4 +256,4 @@ exit: return return_value; } -/*[clinic end generated code: output=9434583fe111c771 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f27abae460122706 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h index b8eec333cd..9ad4c37f47 100644 --- a/Modules/clinic/_pickle.c.h +++ b/Modules/clinic/_pickle.c.h @@ -384,14 +384,14 @@ PyDoc_STRVAR(_pickle_dump__doc__, "2, so that the pickle data stream is readable with Python 2."); #define _PICKLE_DUMP_METHODDEF \ - {"dump", (PyCFunction)_pickle_dump, METH_VARARGS|METH_KEYWORDS, _pickle_dump__doc__}, + {"dump", (PyCFunction)_pickle_dump, METH_FASTCALL, _pickle_dump__doc__}, static PyObject * _pickle_dump_impl(PyObject *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports); static PyObject * -_pickle_dump(PyObject *module, PyObject *args, PyObject *kwargs) +_pickle_dump(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"obj", "file", "protocol", "fix_imports", NULL}; @@ -401,7 +401,7 @@ _pickle_dump(PyObject *module, PyObject *args, PyObject *kwargs) PyObject *protocol = NULL; int fix_imports = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &obj, &file, &protocol, &fix_imports)) { goto exit; } @@ -430,14 +430,14 @@ PyDoc_STRVAR(_pickle_dumps__doc__, "Python 2, so that the pickle data stream is readable with Python 2."); #define _PICKLE_DUMPS_METHODDEF \ - {"dumps", (PyCFunction)_pickle_dumps, METH_VARARGS|METH_KEYWORDS, _pickle_dumps__doc__}, + {"dumps", (PyCFunction)_pickle_dumps, METH_FASTCALL, _pickle_dumps__doc__}, static PyObject * _pickle_dumps_impl(PyObject *module, PyObject *obj, PyObject *protocol, int fix_imports); static PyObject * -_pickle_dumps(PyObject *module, PyObject *args, PyObject *kwargs) +_pickle_dumps(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"obj", "protocol", "fix_imports", NULL}; @@ -446,7 +446,7 @@ _pickle_dumps(PyObject *module, PyObject *args, PyObject *kwargs) PyObject *protocol = NULL; int fix_imports = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &obj, &protocol, &fix_imports)) { goto exit; } @@ -486,14 +486,14 @@ PyDoc_STRVAR(_pickle_load__doc__, "string instances as bytes objects."); #define _PICKLE_LOAD_METHODDEF \ - {"load", (PyCFunction)_pickle_load, METH_VARARGS|METH_KEYWORDS, _pickle_load__doc__}, + {"load", (PyCFunction)_pickle_load, METH_FASTCALL, _pickle_load__doc__}, static PyObject * _pickle_load_impl(PyObject *module, PyObject *file, int fix_imports, const char *encoding, const char *errors); static PyObject * -_pickle_load(PyObject *module, PyObject *args, PyObject *kwargs) +_pickle_load(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"file", "fix_imports", "encoding", "errors", NULL}; @@ -503,7 +503,7 @@ _pickle_load(PyObject *module, PyObject *args, PyObject *kwargs) const char *encoding = "ASCII"; const char *errors = "strict"; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &file, &fix_imports, &encoding, &errors)) { goto exit; } @@ -534,14 +534,14 @@ PyDoc_STRVAR(_pickle_loads__doc__, "string instances as bytes objects."); #define _PICKLE_LOADS_METHODDEF \ - {"loads", (PyCFunction)_pickle_loads, METH_VARARGS|METH_KEYWORDS, _pickle_loads__doc__}, + {"loads", (PyCFunction)_pickle_loads, METH_FASTCALL, _pickle_loads__doc__}, static PyObject * _pickle_loads_impl(PyObject *module, PyObject *data, int fix_imports, const char *encoding, const char *errors); static PyObject * -_pickle_loads(PyObject *module, PyObject *args, PyObject *kwargs) +_pickle_loads(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"data", "fix_imports", "encoding", "errors", NULL}; @@ -551,7 +551,7 @@ _pickle_loads(PyObject *module, PyObject *args, PyObject *kwargs) const char *encoding = "ASCII"; const char *errors = "strict"; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &data, &fix_imports, &encoding, &errors)) { goto exit; } @@ -560,4 +560,4 @@ _pickle_loads(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=50f9127109673c98 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=82be137b3c09cb9f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_sre.c.h b/Modules/clinic/_sre.c.h index 9aba13efda..0612005d1e 100644 --- a/Modules/clinic/_sre.c.h +++ b/Modules/clinic/_sre.c.h @@ -69,7 +69,7 @@ PyDoc_STRVAR(_sre_SRE_Pattern_match__doc__, "Matches zero or more characters at the beginning of the string."); #define _SRE_SRE_PATTERN_MATCH_METHODDEF \ - {"match", (PyCFunction)_sre_SRE_Pattern_match, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_match__doc__}, + {"match", (PyCFunction)_sre_SRE_Pattern_match, METH_FASTCALL, _sre_SRE_Pattern_match__doc__}, static PyObject * _sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string, @@ -77,7 +77,7 @@ _sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string, PyObject *pattern); static PyObject * -_sre_SRE_Pattern_match(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern_match(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", "pos", "endpos", "pattern", NULL}; @@ -87,7 +87,7 @@ _sre_SRE_Pattern_match(PatternObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t endpos = PY_SSIZE_T_MAX; PyObject *pattern = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string, &pos, &endpos, &pattern)) { goto exit; } @@ -105,7 +105,7 @@ PyDoc_STRVAR(_sre_SRE_Pattern_fullmatch__doc__, "Matches against all of the string"); #define _SRE_SRE_PATTERN_FULLMATCH_METHODDEF \ - {"fullmatch", (PyCFunction)_sre_SRE_Pattern_fullmatch, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_fullmatch__doc__}, + {"fullmatch", (PyCFunction)_sre_SRE_Pattern_fullmatch, METH_FASTCALL, _sre_SRE_Pattern_fullmatch__doc__}, static PyObject * _sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string, @@ -113,7 +113,7 @@ _sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string, PyObject *pattern); static PyObject * -_sre_SRE_Pattern_fullmatch(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern_fullmatch(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", "pos", "endpos", "pattern", NULL}; @@ -123,7 +123,7 @@ _sre_SRE_Pattern_fullmatch(PatternObject *self, PyObject *args, PyObject *kwargs Py_ssize_t endpos = PY_SSIZE_T_MAX; PyObject *pattern = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string, &pos, &endpos, &pattern)) { goto exit; } @@ -143,7 +143,7 @@ PyDoc_STRVAR(_sre_SRE_Pattern_search__doc__, "Return None if no position in the string matches."); #define _SRE_SRE_PATTERN_SEARCH_METHODDEF \ - {"search", (PyCFunction)_sre_SRE_Pattern_search, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_search__doc__}, + {"search", (PyCFunction)_sre_SRE_Pattern_search, METH_FASTCALL, _sre_SRE_Pattern_search__doc__}, static PyObject * _sre_SRE_Pattern_search_impl(PatternObject *self, PyObject *string, @@ -151,7 +151,7 @@ _sre_SRE_Pattern_search_impl(PatternObject *self, PyObject *string, PyObject *pattern); static PyObject * -_sre_SRE_Pattern_search(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern_search(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", "pos", "endpos", "pattern", NULL}; @@ -161,7 +161,7 @@ _sre_SRE_Pattern_search(PatternObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t endpos = PY_SSIZE_T_MAX; PyObject *pattern = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string, &pos, &endpos, &pattern)) { goto exit; } @@ -179,7 +179,7 @@ PyDoc_STRVAR(_sre_SRE_Pattern_findall__doc__, "Return a list of all non-overlapping matches of pattern in string."); #define _SRE_SRE_PATTERN_FINDALL_METHODDEF \ - {"findall", (PyCFunction)_sre_SRE_Pattern_findall, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_findall__doc__}, + {"findall", (PyCFunction)_sre_SRE_Pattern_findall, METH_FASTCALL, _sre_SRE_Pattern_findall__doc__}, static PyObject * _sre_SRE_Pattern_findall_impl(PatternObject *self, PyObject *string, @@ -187,7 +187,7 @@ _sre_SRE_Pattern_findall_impl(PatternObject *self, PyObject *string, PyObject *source); static PyObject * -_sre_SRE_Pattern_findall(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern_findall(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", "pos", "endpos", "source", NULL}; @@ -197,7 +197,7 @@ _sre_SRE_Pattern_findall(PatternObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t endpos = PY_SSIZE_T_MAX; PyObject *source = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string, &pos, &endpos, &source)) { goto exit; } @@ -216,14 +216,14 @@ PyDoc_STRVAR(_sre_SRE_Pattern_finditer__doc__, "For each match, the iterator returns a match object."); #define _SRE_SRE_PATTERN_FINDITER_METHODDEF \ - {"finditer", (PyCFunction)_sre_SRE_Pattern_finditer, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_finditer__doc__}, + {"finditer", (PyCFunction)_sre_SRE_Pattern_finditer, METH_FASTCALL, _sre_SRE_Pattern_finditer__doc__}, static PyObject * _sre_SRE_Pattern_finditer_impl(PatternObject *self, PyObject *string, Py_ssize_t pos, Py_ssize_t endpos); static PyObject * -_sre_SRE_Pattern_finditer(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern_finditer(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", "pos", "endpos", NULL}; @@ -232,7 +232,7 @@ _sre_SRE_Pattern_finditer(PatternObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t pos = 0; Py_ssize_t endpos = PY_SSIZE_T_MAX; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string, &pos, &endpos)) { goto exit; } @@ -248,14 +248,14 @@ PyDoc_STRVAR(_sre_SRE_Pattern_scanner__doc__, "\n"); #define _SRE_SRE_PATTERN_SCANNER_METHODDEF \ - {"scanner", (PyCFunction)_sre_SRE_Pattern_scanner, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_scanner__doc__}, + {"scanner", (PyCFunction)_sre_SRE_Pattern_scanner, METH_FASTCALL, _sre_SRE_Pattern_scanner__doc__}, static PyObject * _sre_SRE_Pattern_scanner_impl(PatternObject *self, PyObject *string, Py_ssize_t pos, Py_ssize_t endpos); static PyObject * -_sre_SRE_Pattern_scanner(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern_scanner(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", "pos", "endpos", NULL}; @@ -264,7 +264,7 @@ _sre_SRE_Pattern_scanner(PatternObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t pos = 0; Py_ssize_t endpos = PY_SSIZE_T_MAX; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string, &pos, &endpos)) { goto exit; } @@ -281,14 +281,14 @@ PyDoc_STRVAR(_sre_SRE_Pattern_split__doc__, "Split string by the occurrences of pattern."); #define _SRE_SRE_PATTERN_SPLIT_METHODDEF \ - {"split", (PyCFunction)_sre_SRE_Pattern_split, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_split__doc__}, + {"split", (PyCFunction)_sre_SRE_Pattern_split, METH_FASTCALL, _sre_SRE_Pattern_split__doc__}, static PyObject * _sre_SRE_Pattern_split_impl(PatternObject *self, PyObject *string, Py_ssize_t maxsplit, PyObject *source); static PyObject * -_sre_SRE_Pattern_split(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern_split(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", "maxsplit", "source", NULL}; @@ -297,7 +297,7 @@ _sre_SRE_Pattern_split(PatternObject *self, PyObject *args, PyObject *kwargs) Py_ssize_t maxsplit = 0; PyObject *source = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string, &maxsplit, &source)) { goto exit; } @@ -314,14 +314,14 @@ PyDoc_STRVAR(_sre_SRE_Pattern_sub__doc__, "Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl."); #define _SRE_SRE_PATTERN_SUB_METHODDEF \ - {"sub", (PyCFunction)_sre_SRE_Pattern_sub, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_sub__doc__}, + {"sub", (PyCFunction)_sre_SRE_Pattern_sub, METH_FASTCALL, _sre_SRE_Pattern_sub__doc__}, static PyObject * _sre_SRE_Pattern_sub_impl(PatternObject *self, PyObject *repl, PyObject *string, Py_ssize_t count); static PyObject * -_sre_SRE_Pattern_sub(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern_sub(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"repl", "string", "count", NULL}; @@ -330,7 +330,7 @@ _sre_SRE_Pattern_sub(PatternObject *self, PyObject *args, PyObject *kwargs) PyObject *string; Py_ssize_t count = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &repl, &string, &count)) { goto exit; } @@ -347,14 +347,14 @@ PyDoc_STRVAR(_sre_SRE_Pattern_subn__doc__, "Return the tuple (new_string, number_of_subs_made) found by replacing the leftmost non-overlapping occurrences of pattern with the replacement repl."); #define _SRE_SRE_PATTERN_SUBN_METHODDEF \ - {"subn", (PyCFunction)_sre_SRE_Pattern_subn, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern_subn__doc__}, + {"subn", (PyCFunction)_sre_SRE_Pattern_subn, METH_FASTCALL, _sre_SRE_Pattern_subn__doc__}, static PyObject * _sre_SRE_Pattern_subn_impl(PatternObject *self, PyObject *repl, PyObject *string, Py_ssize_t count); static PyObject * -_sre_SRE_Pattern_subn(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern_subn(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"repl", "string", "count", NULL}; @@ -363,7 +363,7 @@ _sre_SRE_Pattern_subn(PatternObject *self, PyObject *args, PyObject *kwargs) PyObject *string; Py_ssize_t count = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &repl, &string, &count)) { goto exit; } @@ -396,20 +396,20 @@ PyDoc_STRVAR(_sre_SRE_Pattern___deepcopy____doc__, "\n"); #define _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF \ - {"__deepcopy__", (PyCFunction)_sre_SRE_Pattern___deepcopy__, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Pattern___deepcopy____doc__}, + {"__deepcopy__", (PyCFunction)_sre_SRE_Pattern___deepcopy__, METH_FASTCALL, _sre_SRE_Pattern___deepcopy____doc__}, static PyObject * _sre_SRE_Pattern___deepcopy___impl(PatternObject *self, PyObject *memo); static PyObject * -_sre_SRE_Pattern___deepcopy__(PatternObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Pattern___deepcopy__(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"memo", NULL}; static _PyArg_Parser _parser = {"O:__deepcopy__", _keywords, 0}; PyObject *memo; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &memo)) { goto exit; } @@ -426,7 +426,7 @@ PyDoc_STRVAR(_sre_compile__doc__, "\n"); #define _SRE_COMPILE_METHODDEF \ - {"compile", (PyCFunction)_sre_compile, METH_VARARGS|METH_KEYWORDS, _sre_compile__doc__}, + {"compile", (PyCFunction)_sre_compile, METH_FASTCALL, _sre_compile__doc__}, static PyObject * _sre_compile_impl(PyObject *module, PyObject *pattern, int flags, @@ -434,7 +434,7 @@ _sre_compile_impl(PyObject *module, PyObject *pattern, int flags, PyObject *indexgroup); static PyObject * -_sre_compile(PyObject *module, PyObject *args, PyObject *kwargs) +_sre_compile(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL}; @@ -446,7 +446,7 @@ _sre_compile(PyObject *module, PyObject *args, PyObject *kwargs) PyObject *groupindex; PyObject *indexgroup; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &pattern, &flags, &PyList_Type, &code, &groups, &groupindex, &indexgroup)) { goto exit; } @@ -463,20 +463,20 @@ PyDoc_STRVAR(_sre_SRE_Match_expand__doc__, "Return the string obtained by doing backslash substitution on the string template, as done by the sub() method."); #define _SRE_SRE_MATCH_EXPAND_METHODDEF \ - {"expand", (PyCFunction)_sre_SRE_Match_expand, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Match_expand__doc__}, + {"expand", (PyCFunction)_sre_SRE_Match_expand, METH_FASTCALL, _sre_SRE_Match_expand__doc__}, static PyObject * _sre_SRE_Match_expand_impl(MatchObject *self, PyObject *template); static PyObject * -_sre_SRE_Match_expand(MatchObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Match_expand(MatchObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"template", NULL}; static _PyArg_Parser _parser = {"O:expand", _keywords, 0}; PyObject *template; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &template)) { goto exit; } @@ -496,20 +496,20 @@ PyDoc_STRVAR(_sre_SRE_Match_groups__doc__, " Is used for groups that did not participate in the match."); #define _SRE_SRE_MATCH_GROUPS_METHODDEF \ - {"groups", (PyCFunction)_sre_SRE_Match_groups, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Match_groups__doc__}, + {"groups", (PyCFunction)_sre_SRE_Match_groups, METH_FASTCALL, _sre_SRE_Match_groups__doc__}, static PyObject * _sre_SRE_Match_groups_impl(MatchObject *self, PyObject *default_value); static PyObject * -_sre_SRE_Match_groups(MatchObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Match_groups(MatchObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"default", NULL}; static _PyArg_Parser _parser = {"|O:groups", _keywords, 0}; PyObject *default_value = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &default_value)) { goto exit; } @@ -529,20 +529,20 @@ PyDoc_STRVAR(_sre_SRE_Match_groupdict__doc__, " Is used for groups that did not participate in the match."); #define _SRE_SRE_MATCH_GROUPDICT_METHODDEF \ - {"groupdict", (PyCFunction)_sre_SRE_Match_groupdict, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Match_groupdict__doc__}, + {"groupdict", (PyCFunction)_sre_SRE_Match_groupdict, METH_FASTCALL, _sre_SRE_Match_groupdict__doc__}, static PyObject * _sre_SRE_Match_groupdict_impl(MatchObject *self, PyObject *default_value); static PyObject * -_sre_SRE_Match_groupdict(MatchObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Match_groupdict(MatchObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"default", NULL}; static _PyArg_Parser _parser = {"|O:groupdict", _keywords, 0}; PyObject *default_value = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &default_value)) { goto exit; } @@ -672,20 +672,20 @@ PyDoc_STRVAR(_sre_SRE_Match___deepcopy____doc__, "\n"); #define _SRE_SRE_MATCH___DEEPCOPY___METHODDEF \ - {"__deepcopy__", (PyCFunction)_sre_SRE_Match___deepcopy__, METH_VARARGS|METH_KEYWORDS, _sre_SRE_Match___deepcopy____doc__}, + {"__deepcopy__", (PyCFunction)_sre_SRE_Match___deepcopy__, METH_FASTCALL, _sre_SRE_Match___deepcopy____doc__}, static PyObject * _sre_SRE_Match___deepcopy___impl(MatchObject *self, PyObject *memo); static PyObject * -_sre_SRE_Match___deepcopy__(MatchObject *self, PyObject *args, PyObject *kwargs) +_sre_SRE_Match___deepcopy__(MatchObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"memo", NULL}; static _PyArg_Parser _parser = {"O:__deepcopy__", _keywords, 0}; PyObject *memo; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &memo)) { goto exit; } @@ -728,4 +728,4 @@ _sre_SRE_Scanner_search(ScannerObject *self, PyObject *Py_UNUSED(ignored)) { return _sre_SRE_Scanner_search_impl(self); } -/*[clinic end generated code: output=2cbc2b1482738e54 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a4a246bca1963bc9 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index ee8213a1a4..29f5838439 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -469,14 +469,14 @@ PyDoc_STRVAR(_ssl__SSLContext_load_cert_chain__doc__, "\n"); #define _SSL__SSLCONTEXT_LOAD_CERT_CHAIN_METHODDEF \ - {"load_cert_chain", (PyCFunction)_ssl__SSLContext_load_cert_chain, METH_VARARGS|METH_KEYWORDS, _ssl__SSLContext_load_cert_chain__doc__}, + {"load_cert_chain", (PyCFunction)_ssl__SSLContext_load_cert_chain, METH_FASTCALL, _ssl__SSLContext_load_cert_chain__doc__}, static PyObject * _ssl__SSLContext_load_cert_chain_impl(PySSLContext *self, PyObject *certfile, PyObject *keyfile, PyObject *password); static PyObject * -_ssl__SSLContext_load_cert_chain(PySSLContext *self, PyObject *args, PyObject *kwargs) +_ssl__SSLContext_load_cert_chain(PySSLContext *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"certfile", "keyfile", "password", NULL}; @@ -485,7 +485,7 @@ _ssl__SSLContext_load_cert_chain(PySSLContext *self, PyObject *args, PyObject *k PyObject *keyfile = NULL; PyObject *password = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &certfile, &keyfile, &password)) { goto exit; } @@ -501,7 +501,7 @@ PyDoc_STRVAR(_ssl__SSLContext_load_verify_locations__doc__, "\n"); #define _SSL__SSLCONTEXT_LOAD_VERIFY_LOCATIONS_METHODDEF \ - {"load_verify_locations", (PyCFunction)_ssl__SSLContext_load_verify_locations, METH_VARARGS|METH_KEYWORDS, _ssl__SSLContext_load_verify_locations__doc__}, + {"load_verify_locations", (PyCFunction)_ssl__SSLContext_load_verify_locations, METH_FASTCALL, _ssl__SSLContext_load_verify_locations__doc__}, static PyObject * _ssl__SSLContext_load_verify_locations_impl(PySSLContext *self, @@ -510,7 +510,7 @@ _ssl__SSLContext_load_verify_locations_impl(PySSLContext *self, PyObject *cadata); static PyObject * -_ssl__SSLContext_load_verify_locations(PySSLContext *self, PyObject *args, PyObject *kwargs) +_ssl__SSLContext_load_verify_locations(PySSLContext *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"cafile", "capath", "cadata", NULL}; @@ -519,7 +519,7 @@ _ssl__SSLContext_load_verify_locations(PySSLContext *self, PyObject *args, PyObj PyObject *capath = NULL; PyObject *cadata = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &cafile, &capath, &cadata)) { goto exit; } @@ -543,14 +543,14 @@ PyDoc_STRVAR(_ssl__SSLContext__wrap_socket__doc__, "\n"); #define _SSL__SSLCONTEXT__WRAP_SOCKET_METHODDEF \ - {"_wrap_socket", (PyCFunction)_ssl__SSLContext__wrap_socket, METH_VARARGS|METH_KEYWORDS, _ssl__SSLContext__wrap_socket__doc__}, + {"_wrap_socket", (PyCFunction)_ssl__SSLContext__wrap_socket, METH_FASTCALL, _ssl__SSLContext__wrap_socket__doc__}, static PyObject * _ssl__SSLContext__wrap_socket_impl(PySSLContext *self, PyObject *sock, int server_side, PyObject *hostname_obj); static PyObject * -_ssl__SSLContext__wrap_socket(PySSLContext *self, PyObject *args, PyObject *kwargs) +_ssl__SSLContext__wrap_socket(PySSLContext *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"sock", "server_side", "server_hostname", NULL}; @@ -559,7 +559,7 @@ _ssl__SSLContext__wrap_socket(PySSLContext *self, PyObject *args, PyObject *kwar int server_side; PyObject *hostname_obj = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, PySocketModule.Sock_Type, &sock, &server_side, &hostname_obj)) { goto exit; } @@ -576,7 +576,7 @@ PyDoc_STRVAR(_ssl__SSLContext__wrap_bio__doc__, "\n"); #define _SSL__SSLCONTEXT__WRAP_BIO_METHODDEF \ - {"_wrap_bio", (PyCFunction)_ssl__SSLContext__wrap_bio, METH_VARARGS|METH_KEYWORDS, _ssl__SSLContext__wrap_bio__doc__}, + {"_wrap_bio", (PyCFunction)_ssl__SSLContext__wrap_bio, METH_FASTCALL, _ssl__SSLContext__wrap_bio__doc__}, static PyObject * _ssl__SSLContext__wrap_bio_impl(PySSLContext *self, PySSLMemoryBIO *incoming, @@ -584,7 +584,7 @@ _ssl__SSLContext__wrap_bio_impl(PySSLContext *self, PySSLMemoryBIO *incoming, PyObject *hostname_obj); static PyObject * -_ssl__SSLContext__wrap_bio(PySSLContext *self, PyObject *args, PyObject *kwargs) +_ssl__SSLContext__wrap_bio(PySSLContext *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"incoming", "outgoing", "server_side", "server_hostname", NULL}; @@ -594,7 +594,7 @@ _ssl__SSLContext__wrap_bio(PySSLContext *self, PyObject *args, PyObject *kwargs) int server_side; PyObject *hostname_obj = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &PySSLMemoryBIO_Type, &incoming, &PySSLMemoryBIO_Type, &outgoing, &server_side, &hostname_obj)) { goto exit; } @@ -700,20 +700,20 @@ PyDoc_STRVAR(_ssl__SSLContext_get_ca_certs__doc__, "been used at least once."); #define _SSL__SSLCONTEXT_GET_CA_CERTS_METHODDEF \ - {"get_ca_certs", (PyCFunction)_ssl__SSLContext_get_ca_certs, METH_VARARGS|METH_KEYWORDS, _ssl__SSLContext_get_ca_certs__doc__}, + {"get_ca_certs", (PyCFunction)_ssl__SSLContext_get_ca_certs, METH_FASTCALL, _ssl__SSLContext_get_ca_certs__doc__}, static PyObject * _ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form); static PyObject * -_ssl__SSLContext_get_ca_certs(PySSLContext *self, PyObject *args, PyObject *kwargs) +_ssl__SSLContext_get_ca_certs(PySSLContext *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"binary_form", NULL}; static _PyArg_Parser _parser = {"|p:get_ca_certs", _keywords, 0}; int binary_form = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &binary_form)) { goto exit; } @@ -1011,13 +1011,13 @@ PyDoc_STRVAR(_ssl_txt2obj__doc__, "long name are also matched."); #define _SSL_TXT2OBJ_METHODDEF \ - {"txt2obj", (PyCFunction)_ssl_txt2obj, METH_VARARGS|METH_KEYWORDS, _ssl_txt2obj__doc__}, + {"txt2obj", (PyCFunction)_ssl_txt2obj, METH_FASTCALL, _ssl_txt2obj__doc__}, static PyObject * _ssl_txt2obj_impl(PyObject *module, const char *txt, int name); static PyObject * -_ssl_txt2obj(PyObject *module, PyObject *args, PyObject *kwargs) +_ssl_txt2obj(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"txt", "name", NULL}; @@ -1025,7 +1025,7 @@ _ssl_txt2obj(PyObject *module, PyObject *args, PyObject *kwargs) const char *txt; int name = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &txt, &name)) { goto exit; } @@ -1077,20 +1077,20 @@ PyDoc_STRVAR(_ssl_enum_certificates__doc__, "a set of OIDs or the boolean True."); #define _SSL_ENUM_CERTIFICATES_METHODDEF \ - {"enum_certificates", (PyCFunction)_ssl_enum_certificates, METH_VARARGS|METH_KEYWORDS, _ssl_enum_certificates__doc__}, + {"enum_certificates", (PyCFunction)_ssl_enum_certificates, METH_FASTCALL, _ssl_enum_certificates__doc__}, static PyObject * _ssl_enum_certificates_impl(PyObject *module, const char *store_name); static PyObject * -_ssl_enum_certificates(PyObject *module, PyObject *args, PyObject *kwargs) +_ssl_enum_certificates(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"store_name", NULL}; static _PyArg_Parser _parser = {"s:enum_certificates", _keywords, 0}; const char *store_name; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &store_name)) { goto exit; } @@ -1116,20 +1116,20 @@ PyDoc_STRVAR(_ssl_enum_crls__doc__, "X509_ASN_ENCODING or PKCS_7_ASN_ENCODING."); #define _SSL_ENUM_CRLS_METHODDEF \ - {"enum_crls", (PyCFunction)_ssl_enum_crls, METH_VARARGS|METH_KEYWORDS, _ssl_enum_crls__doc__}, + {"enum_crls", (PyCFunction)_ssl_enum_crls, METH_FASTCALL, _ssl_enum_crls__doc__}, static PyObject * _ssl_enum_crls_impl(PyObject *module, const char *store_name); static PyObject * -_ssl_enum_crls(PyObject *module, PyObject *args, PyObject *kwargs) +_ssl_enum_crls(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"store_name", NULL}; static _PyArg_Parser _parser = {"s:enum_crls", _keywords, 0}; const char *store_name; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &store_name)) { goto exit; } @@ -1168,4 +1168,4 @@ exit: #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=2e7907a7d8f97ccf input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a859b21fe68a6115 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h index 44d48a9dd5..5bfbaf0d56 100644 --- a/Modules/clinic/_winapi.c.h +++ b/Modules/clinic/_winapi.c.h @@ -95,14 +95,14 @@ PyDoc_STRVAR(_winapi_ConnectNamedPipe__doc__, "\n"); #define _WINAPI_CONNECTNAMEDPIPE_METHODDEF \ - {"ConnectNamedPipe", (PyCFunction)_winapi_ConnectNamedPipe, METH_VARARGS|METH_KEYWORDS, _winapi_ConnectNamedPipe__doc__}, + {"ConnectNamedPipe", (PyCFunction)_winapi_ConnectNamedPipe, METH_FASTCALL, _winapi_ConnectNamedPipe__doc__}, static PyObject * _winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle, int use_overlapped); static PyObject * -_winapi_ConnectNamedPipe(PyObject *module, PyObject *args, PyObject *kwargs) +_winapi_ConnectNamedPipe(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"handle", "overlapped", NULL}; @@ -110,7 +110,7 @@ _winapi_ConnectNamedPipe(PyObject *module, PyObject *args, PyObject *kwargs) HANDLE handle; int use_overlapped = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &handle, &use_overlapped)) { goto exit; } @@ -670,14 +670,14 @@ PyDoc_STRVAR(_winapi_ReadFile__doc__, "\n"); #define _WINAPI_READFILE_METHODDEF \ - {"ReadFile", (PyCFunction)_winapi_ReadFile, METH_VARARGS|METH_KEYWORDS, _winapi_ReadFile__doc__}, + {"ReadFile", (PyCFunction)_winapi_ReadFile, METH_FASTCALL, _winapi_ReadFile__doc__}, static PyObject * _winapi_ReadFile_impl(PyObject *module, HANDLE handle, int size, int use_overlapped); static PyObject * -_winapi_ReadFile(PyObject *module, PyObject *args, PyObject *kwargs) +_winapi_ReadFile(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"handle", "size", "overlapped", NULL}; @@ -686,7 +686,7 @@ _winapi_ReadFile(PyObject *module, PyObject *args, PyObject *kwargs) int size; int use_overlapped = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &handle, &size, &use_overlapped)) { goto exit; } @@ -864,14 +864,14 @@ PyDoc_STRVAR(_winapi_WriteFile__doc__, "\n"); #define _WINAPI_WRITEFILE_METHODDEF \ - {"WriteFile", (PyCFunction)_winapi_WriteFile, METH_VARARGS|METH_KEYWORDS, _winapi_WriteFile__doc__}, + {"WriteFile", (PyCFunction)_winapi_WriteFile, METH_FASTCALL, _winapi_WriteFile__doc__}, static PyObject * _winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer, int use_overlapped); static PyObject * -_winapi_WriteFile(PyObject *module, PyObject *args, PyObject *kwargs) +_winapi_WriteFile(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"handle", "buffer", "overlapped", NULL}; @@ -880,7 +880,7 @@ _winapi_WriteFile(PyObject *module, PyObject *args, PyObject *kwargs) PyObject *buffer; int use_overlapped = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &handle, &buffer, &use_overlapped)) { goto exit; } @@ -889,4 +889,4 @@ _winapi_WriteFile(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=4bfccfb32ab726e8 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=46d6382a6662c4a9 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h index 0ee7f57959..acafcbf701 100644 --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -103,13 +103,13 @@ PyDoc_STRVAR(binascii_b2a_base64__doc__, "Base64-code line of data."); #define BINASCII_B2A_BASE64_METHODDEF \ - {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_VARARGS|METH_KEYWORDS, binascii_b2a_base64__doc__}, + {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_FASTCALL, binascii_b2a_base64__doc__}, static PyObject * binascii_b2a_base64_impl(PyObject *module, Py_buffer *data, int newline); static PyObject * -binascii_b2a_base64(PyObject *module, PyObject *args, PyObject *kwargs) +binascii_b2a_base64(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"data", "newline", NULL}; @@ -117,7 +117,7 @@ binascii_b2a_base64(PyObject *module, PyObject *args, PyObject *kwargs) Py_buffer data = {NULL, NULL}; int newline = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &data, &newline)) { goto exit; } @@ -480,13 +480,13 @@ PyDoc_STRVAR(binascii_a2b_qp__doc__, "Decode a string of qp-encoded data."); #define BINASCII_A2B_QP_METHODDEF \ - {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_VARARGS|METH_KEYWORDS, binascii_a2b_qp__doc__}, + {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_FASTCALL, binascii_a2b_qp__doc__}, static PyObject * binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header); static PyObject * -binascii_a2b_qp(PyObject *module, PyObject *args, PyObject *kwargs) +binascii_a2b_qp(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"data", "header", NULL}; @@ -494,7 +494,7 @@ binascii_a2b_qp(PyObject *module, PyObject *args, PyObject *kwargs) Py_buffer data = {NULL, NULL}; int header = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, ascii_buffer_converter, &data, &header)) { goto exit; } @@ -519,14 +519,14 @@ PyDoc_STRVAR(binascii_b2a_qp__doc__, "are both encoded. When quotetabs is set, space and tabs are encoded."); #define BINASCII_B2A_QP_METHODDEF \ - {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_VARARGS|METH_KEYWORDS, binascii_b2a_qp__doc__}, + {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_FASTCALL, binascii_b2a_qp__doc__}, static PyObject * binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs, int istext, int header); static PyObject * -binascii_b2a_qp(PyObject *module, PyObject *args, PyObject *kwargs) +binascii_b2a_qp(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"data", "quotetabs", "istext", "header", NULL}; @@ -536,7 +536,7 @@ binascii_b2a_qp(PyObject *module, PyObject *args, PyObject *kwargs) int istext = 1; int header = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &data, "etabs, &istext, &header)) { goto exit; } @@ -550,4 +550,4 @@ exit: return return_value; } -/*[clinic end generated code: output=12611b05d8bf4a9c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1f8d6e48f75f6d1e input=a9049054013a1b77]*/ diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h index e46c31420e..05431fa7af 100644 --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -851,14 +851,14 @@ PyDoc_STRVAR(cmath_isclose__doc__, "not close to anything, even itself. inf and -inf are only close to themselves."); #define CMATH_ISCLOSE_METHODDEF \ - {"isclose", (PyCFunction)cmath_isclose, METH_VARARGS|METH_KEYWORDS, cmath_isclose__doc__}, + {"isclose", (PyCFunction)cmath_isclose, METH_FASTCALL, cmath_isclose__doc__}, static int cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b, double rel_tol, double abs_tol); static PyObject * -cmath_isclose(PyObject *module, PyObject *args, PyObject *kwargs) +cmath_isclose(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL}; @@ -869,7 +869,7 @@ cmath_isclose(PyObject *module, PyObject *args, PyObject *kwargs) double abs_tol = 0.0; int _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &a, &b, &rel_tol, &abs_tol)) { goto exit; } @@ -882,4 +882,4 @@ cmath_isclose(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=aa2e77ca9fc26928 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=978f59702b41655f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/grpmodule.c.h b/Modules/clinic/grpmodule.c.h index 9c9d595c2a..0282b4e477 100644 --- a/Modules/clinic/grpmodule.c.h +++ b/Modules/clinic/grpmodule.c.h @@ -11,20 +11,20 @@ PyDoc_STRVAR(grp_getgrgid__doc__, "If id is not valid, raise KeyError."); #define GRP_GETGRGID_METHODDEF \ - {"getgrgid", (PyCFunction)grp_getgrgid, METH_VARARGS|METH_KEYWORDS, grp_getgrgid__doc__}, + {"getgrgid", (PyCFunction)grp_getgrgid, METH_FASTCALL, grp_getgrgid__doc__}, static PyObject * grp_getgrgid_impl(PyObject *module, PyObject *id); static PyObject * -grp_getgrgid(PyObject *module, PyObject *args, PyObject *kwargs) +grp_getgrgid(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"id", NULL}; static _PyArg_Parser _parser = {"O:getgrgid", _keywords, 0}; PyObject *id; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &id)) { goto exit; } @@ -43,20 +43,20 @@ PyDoc_STRVAR(grp_getgrnam__doc__, "If name is not valid, raise KeyError."); #define GRP_GETGRNAM_METHODDEF \ - {"getgrnam", (PyCFunction)grp_getgrnam, METH_VARARGS|METH_KEYWORDS, grp_getgrnam__doc__}, + {"getgrnam", (PyCFunction)grp_getgrnam, METH_FASTCALL, grp_getgrnam__doc__}, static PyObject * grp_getgrnam_impl(PyObject *module, PyObject *name); static PyObject * -grp_getgrnam(PyObject *module, PyObject *args, PyObject *kwargs) +grp_getgrnam(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"name", NULL}; static _PyArg_Parser _parser = {"U:getgrnam", _keywords, 0}; PyObject *name; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &name)) { goto exit; } @@ -86,4 +86,4 @@ grp_getgrall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return grp_getgrall_impl(module); } -/*[clinic end generated code: output=c06081097b7fffe7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d6417ae0a7298e0e input=a9049054013a1b77]*/ diff --git a/Modules/clinic/md5module.c.h b/Modules/clinic/md5module.c.h index aeb1c41118..a841fe5786 100644 --- a/Modules/clinic/md5module.c.h +++ b/Modules/clinic/md5module.c.h @@ -72,20 +72,20 @@ PyDoc_STRVAR(_md5_md5__doc__, "Return a new MD5 hash object; optionally initialized with a string."); #define _MD5_MD5_METHODDEF \ - {"md5", (PyCFunction)_md5_md5, METH_VARARGS|METH_KEYWORDS, _md5_md5__doc__}, + {"md5", (PyCFunction)_md5_md5, METH_FASTCALL, _md5_md5__doc__}, static PyObject * _md5_md5_impl(PyObject *module, PyObject *string); static PyObject * -_md5_md5(PyObject *module, PyObject *args, PyObject *kwargs) +_md5_md5(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", NULL}; static _PyArg_Parser _parser = {"|O:md5", _keywords, 0}; PyObject *string = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string)) { goto exit; } @@ -94,4 +94,4 @@ _md5_md5(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=f86fc2f3f21831e2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=54cd50db050f2589 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 6088eec393..fdb3970425 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -27,13 +27,13 @@ PyDoc_STRVAR(os_stat__doc__, " an open file descriptor."); #define OS_STAT_METHODDEF \ - {"stat", (PyCFunction)os_stat, METH_VARARGS|METH_KEYWORDS, os_stat__doc__}, + {"stat", (PyCFunction)os_stat, METH_FASTCALL, os_stat__doc__}, static PyObject * os_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks); static PyObject * -os_stat(PyObject *module, PyObject *args, PyObject *kwargs) +os_stat(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "dir_fd", "follow_symlinks", NULL}; @@ -42,7 +42,7 @@ os_stat(PyObject *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; } @@ -65,13 +65,13 @@ PyDoc_STRVAR(os_lstat__doc__, "Equivalent to stat(path, follow_symlinks=False)."); #define OS_LSTAT_METHODDEF \ - {"lstat", (PyCFunction)os_lstat, METH_VARARGS|METH_KEYWORDS, os_lstat__doc__}, + {"lstat", (PyCFunction)os_lstat, METH_FASTCALL, os_lstat__doc__}, static PyObject * os_lstat_impl(PyObject *module, path_t *path, int dir_fd); static PyObject * -os_lstat(PyObject *module, PyObject *args, PyObject *kwargs) +os_lstat(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "dir_fd", NULL}; @@ -79,7 +79,7 @@ os_lstat(PyObject *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("lstat", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, FSTATAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -125,14 +125,14 @@ PyDoc_STRVAR(os_access__doc__, " has the specified access to the path."); #define OS_ACCESS_METHODDEF \ - {"access", (PyCFunction)os_access, METH_VARARGS|METH_KEYWORDS, os_access__doc__}, + {"access", (PyCFunction)os_access, METH_FASTCALL, os_access__doc__}, static int os_access_impl(PyObject *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks); static PyObject * -os_access(PyObject *module, PyObject *args, PyObject *kwargs) +os_access(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL}; @@ -144,7 +144,7 @@ os_access(PyObject *module, PyObject *args, PyObject *kwargs) int follow_symlinks = 1; int _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &mode, FACCESSAT_DIR_FD_CONVERTER, &dir_fd, &effective_ids, &follow_symlinks)) { goto exit; } @@ -233,20 +233,20 @@ PyDoc_STRVAR(os_chdir__doc__, " If this functionality is unavailable, using it raises an exception."); #define OS_CHDIR_METHODDEF \ - {"chdir", (PyCFunction)os_chdir, METH_VARARGS|METH_KEYWORDS, os_chdir__doc__}, + {"chdir", (PyCFunction)os_chdir, METH_FASTCALL, os_chdir__doc__}, static PyObject * os_chdir_impl(PyObject *module, path_t *path); static PyObject * -os_chdir(PyObject *module, PyObject *args, PyObject *kwargs) +os_chdir(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", NULL}; static _PyArg_Parser _parser = {"O&:chdir", _keywords, 0}; path_t path = PATH_T_INITIALIZE("chdir", "path", 0, PATH_HAVE_FCHDIR); - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path)) { goto exit; } @@ -271,20 +271,20 @@ PyDoc_STRVAR(os_fchdir__doc__, "Equivalent to os.chdir(fd)."); #define OS_FCHDIR_METHODDEF \ - {"fchdir", (PyCFunction)os_fchdir, METH_VARARGS|METH_KEYWORDS, os_fchdir__doc__}, + {"fchdir", (PyCFunction)os_fchdir, METH_FASTCALL, os_fchdir__doc__}, static PyObject * os_fchdir_impl(PyObject *module, int fd); static PyObject * -os_fchdir(PyObject *module, PyObject *args, PyObject *kwargs) +os_fchdir(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"fd", NULL}; static _PyArg_Parser _parser = {"O&:fchdir", _keywords, 0}; int fd; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, fildes_converter, &fd)) { goto exit; } @@ -323,14 +323,14 @@ PyDoc_STRVAR(os_chmod__doc__, " If they are unavailable, using them will raise a NotImplementedError."); #define OS_CHMOD_METHODDEF \ - {"chmod", (PyCFunction)os_chmod, METH_VARARGS|METH_KEYWORDS, os_chmod__doc__}, + {"chmod", (PyCFunction)os_chmod, METH_FASTCALL, os_chmod__doc__}, static PyObject * os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, int follow_symlinks); static PyObject * -os_chmod(PyObject *module, PyObject *args, PyObject *kwargs) +os_chmod(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL}; @@ -340,7 +340,7 @@ os_chmod(PyObject *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &mode, FCHMODAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; } @@ -364,13 +364,13 @@ PyDoc_STRVAR(os_fchmod__doc__, "Equivalent to os.chmod(fd, mode)."); #define OS_FCHMOD_METHODDEF \ - {"fchmod", (PyCFunction)os_fchmod, METH_VARARGS|METH_KEYWORDS, os_fchmod__doc__}, + {"fchmod", (PyCFunction)os_fchmod, METH_FASTCALL, os_fchmod__doc__}, static PyObject * os_fchmod_impl(PyObject *module, int fd, int mode); static PyObject * -os_fchmod(PyObject *module, PyObject *args, PyObject *kwargs) +os_fchmod(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"fd", "mode", NULL}; @@ -378,7 +378,7 @@ os_fchmod(PyObject *module, PyObject *args, PyObject *kwargs) int fd; int mode; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &fd, &mode)) { goto exit; } @@ -402,13 +402,13 @@ PyDoc_STRVAR(os_lchmod__doc__, "Equivalent to chmod(path, mode, follow_symlinks=False).\""); #define OS_LCHMOD_METHODDEF \ - {"lchmod", (PyCFunction)os_lchmod, METH_VARARGS|METH_KEYWORDS, os_lchmod__doc__}, + {"lchmod", (PyCFunction)os_lchmod, METH_FASTCALL, os_lchmod__doc__}, static PyObject * os_lchmod_impl(PyObject *module, path_t *path, int mode); static PyObject * -os_lchmod(PyObject *module, PyObject *args, PyObject *kwargs) +os_lchmod(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "mode", NULL}; @@ -416,7 +416,7 @@ os_lchmod(PyObject *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("lchmod", "path", 0, 0); int mode; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &mode)) { goto exit; } @@ -446,14 +446,14 @@ PyDoc_STRVAR(os_chflags__doc__, "unavailable, using it will raise a NotImplementedError."); #define OS_CHFLAGS_METHODDEF \ - {"chflags", (PyCFunction)os_chflags, METH_VARARGS|METH_KEYWORDS, os_chflags__doc__}, + {"chflags", (PyCFunction)os_chflags, METH_FASTCALL, os_chflags__doc__}, static PyObject * os_chflags_impl(PyObject *module, path_t *path, unsigned long flags, int follow_symlinks); static PyObject * -os_chflags(PyObject *module, PyObject *args, PyObject *kwargs) +os_chflags(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "flags", "follow_symlinks", NULL}; @@ -462,7 +462,7 @@ os_chflags(PyObject *module, PyObject *args, PyObject *kwargs) unsigned long flags; int follow_symlinks = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &flags, &follow_symlinks)) { goto exit; } @@ -489,13 +489,13 @@ PyDoc_STRVAR(os_lchflags__doc__, "Equivalent to chflags(path, flags, follow_symlinks=False)."); #define OS_LCHFLAGS_METHODDEF \ - {"lchflags", (PyCFunction)os_lchflags, METH_VARARGS|METH_KEYWORDS, os_lchflags__doc__}, + {"lchflags", (PyCFunction)os_lchflags, METH_FASTCALL, os_lchflags__doc__}, static PyObject * os_lchflags_impl(PyObject *module, path_t *path, unsigned long flags); static PyObject * -os_lchflags(PyObject *module, PyObject *args, PyObject *kwargs) +os_lchflags(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "flags", NULL}; @@ -503,7 +503,7 @@ os_lchflags(PyObject *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("lchflags", "path", 0, 0); unsigned long flags; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &flags)) { goto exit; } @@ -527,20 +527,20 @@ PyDoc_STRVAR(os_chroot__doc__, "Change root directory to path."); #define OS_CHROOT_METHODDEF \ - {"chroot", (PyCFunction)os_chroot, METH_VARARGS|METH_KEYWORDS, os_chroot__doc__}, + {"chroot", (PyCFunction)os_chroot, METH_FASTCALL, os_chroot__doc__}, static PyObject * os_chroot_impl(PyObject *module, path_t *path); static PyObject * -os_chroot(PyObject *module, PyObject *args, PyObject *kwargs) +os_chroot(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", NULL}; static _PyArg_Parser _parser = {"O&:chroot", _keywords, 0}; path_t path = PATH_T_INITIALIZE("chroot", "path", 0, 0); - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path)) { goto exit; } @@ -564,20 +564,20 @@ PyDoc_STRVAR(os_fsync__doc__, "Force write of fd to disk."); #define OS_FSYNC_METHODDEF \ - {"fsync", (PyCFunction)os_fsync, METH_VARARGS|METH_KEYWORDS, os_fsync__doc__}, + {"fsync", (PyCFunction)os_fsync, METH_FASTCALL, os_fsync__doc__}, static PyObject * os_fsync_impl(PyObject *module, int fd); static PyObject * -os_fsync(PyObject *module, PyObject *args, PyObject *kwargs) +os_fsync(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"fd", NULL}; static _PyArg_Parser _parser = {"O&:fsync", _keywords, 0}; int fd; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, fildes_converter, &fd)) { goto exit; } @@ -620,20 +620,20 @@ PyDoc_STRVAR(os_fdatasync__doc__, "Force write of fd to disk without forcing update of metadata."); #define OS_FDATASYNC_METHODDEF \ - {"fdatasync", (PyCFunction)os_fdatasync, METH_VARARGS|METH_KEYWORDS, os_fdatasync__doc__}, + {"fdatasync", (PyCFunction)os_fdatasync, METH_FASTCALL, os_fdatasync__doc__}, static PyObject * os_fdatasync_impl(PyObject *module, int fd); static PyObject * -os_fdatasync(PyObject *module, PyObject *args, PyObject *kwargs) +os_fdatasync(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"fd", NULL}; static _PyArg_Parser _parser = {"O&:fdatasync", _keywords, 0}; int fd; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, fildes_converter, &fd)) { goto exit; } @@ -678,14 +678,14 @@ PyDoc_STRVAR(os_chown__doc__, " If they are unavailable, using them will raise a NotImplementedError."); #define OS_CHOWN_METHODDEF \ - {"chown", (PyCFunction)os_chown, METH_VARARGS|METH_KEYWORDS, os_chown__doc__}, + {"chown", (PyCFunction)os_chown, METH_FASTCALL, os_chown__doc__}, static PyObject * os_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks); static PyObject * -os_chown(PyObject *module, PyObject *args, PyObject *kwargs) +os_chown(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL}; @@ -696,7 +696,7 @@ os_chown(PyObject *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid, FCHOWNAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; } @@ -722,13 +722,13 @@ PyDoc_STRVAR(os_fchown__doc__, "Equivalent to os.chown(fd, uid, gid)."); #define OS_FCHOWN_METHODDEF \ - {"fchown", (PyCFunction)os_fchown, METH_VARARGS|METH_KEYWORDS, os_fchown__doc__}, + {"fchown", (PyCFunction)os_fchown, METH_FASTCALL, os_fchown__doc__}, static PyObject * os_fchown_impl(PyObject *module, int fd, uid_t uid, gid_t gid); static PyObject * -os_fchown(PyObject *module, PyObject *args, PyObject *kwargs) +os_fchown(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"fd", "uid", "gid", NULL}; @@ -737,7 +737,7 @@ os_fchown(PyObject *module, PyObject *args, PyObject *kwargs) uid_t uid; gid_t gid; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &fd, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) { goto exit; } @@ -761,13 +761,13 @@ PyDoc_STRVAR(os_lchown__doc__, "Equivalent to os.chown(path, uid, gid, follow_symlinks=False)."); #define OS_LCHOWN_METHODDEF \ - {"lchown", (PyCFunction)os_lchown, METH_VARARGS|METH_KEYWORDS, os_lchown__doc__}, + {"lchown", (PyCFunction)os_lchown, METH_FASTCALL, os_lchown__doc__}, static PyObject * os_lchown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid); static PyObject * -os_lchown(PyObject *module, PyObject *args, PyObject *kwargs) +os_lchown(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "uid", "gid", NULL}; @@ -776,7 +776,7 @@ os_lchown(PyObject *module, PyObject *args, PyObject *kwargs) uid_t uid; gid_t gid; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, _Py_Uid_Converter, &uid, _Py_Gid_Converter, &gid)) { goto exit; } @@ -847,14 +847,14 @@ PyDoc_STRVAR(os_link__doc__, " NotImplementedError."); #define OS_LINK_METHODDEF \ - {"link", (PyCFunction)os_link, METH_VARARGS|METH_KEYWORDS, os_link__doc__}, + {"link", (PyCFunction)os_link, METH_FASTCALL, os_link__doc__}, static PyObject * os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks); static PyObject * -os_link(PyObject *module, PyObject *args, PyObject *kwargs) +os_link(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL}; @@ -865,7 +865,7 @@ os_link(PyObject *module, PyObject *args, PyObject *kwargs) int dst_dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd, &follow_symlinks)) { goto exit; } @@ -900,20 +900,20 @@ PyDoc_STRVAR(os_listdir__doc__, "entries \'.\' and \'..\' even if they are present in the directory."); #define OS_LISTDIR_METHODDEF \ - {"listdir", (PyCFunction)os_listdir, METH_VARARGS|METH_KEYWORDS, os_listdir__doc__}, + {"listdir", (PyCFunction)os_listdir, METH_FASTCALL, os_listdir__doc__}, static PyObject * os_listdir_impl(PyObject *module, path_t *path); static PyObject * -os_listdir(PyObject *module, PyObject *args, PyObject *kwargs) +os_listdir(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", NULL}; static _PyArg_Parser _parser = {"|O&:listdir", _keywords, 0}; path_t path = PATH_T_INITIALIZE("listdir", "path", 1, PATH_HAVE_FDOPENDIR); - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path)) { goto exit; } @@ -1032,20 +1032,20 @@ PyDoc_STRVAR(os__getvolumepathname__doc__, "A helper function for ismount on Win32."); #define OS__GETVOLUMEPATHNAME_METHODDEF \ - {"_getvolumepathname", (PyCFunction)os__getvolumepathname, METH_VARARGS|METH_KEYWORDS, os__getvolumepathname__doc__}, + {"_getvolumepathname", (PyCFunction)os__getvolumepathname, METH_FASTCALL, os__getvolumepathname__doc__}, static PyObject * os__getvolumepathname_impl(PyObject *module, PyObject *path); static PyObject * -os__getvolumepathname(PyObject *module, PyObject *args, PyObject *kwargs) +os__getvolumepathname(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", NULL}; static _PyArg_Parser _parser = {"U:_getvolumepathname", _keywords, 0}; PyObject *path; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &path)) { goto exit; } @@ -1071,13 +1071,13 @@ PyDoc_STRVAR(os_mkdir__doc__, "The mode argument is ignored on Windows."); #define OS_MKDIR_METHODDEF \ - {"mkdir", (PyCFunction)os_mkdir, METH_VARARGS|METH_KEYWORDS, os_mkdir__doc__}, + {"mkdir", (PyCFunction)os_mkdir, METH_FASTCALL, os_mkdir__doc__}, static PyObject * os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd); static PyObject * -os_mkdir(PyObject *module, PyObject *args, PyObject *kwargs) +os_mkdir(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "mode", "dir_fd", NULL}; @@ -1086,7 +1086,7 @@ os_mkdir(PyObject *module, PyObject *args, PyObject *kwargs) int mode = 511; int dir_fd = DEFAULT_DIR_FD; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &mode, MKDIRAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -1139,13 +1139,13 @@ PyDoc_STRVAR(os_getpriority__doc__, "Return program scheduling priority."); #define OS_GETPRIORITY_METHODDEF \ - {"getpriority", (PyCFunction)os_getpriority, METH_VARARGS|METH_KEYWORDS, os_getpriority__doc__}, + {"getpriority", (PyCFunction)os_getpriority, METH_FASTCALL, os_getpriority__doc__}, static PyObject * os_getpriority_impl(PyObject *module, int which, int who); static PyObject * -os_getpriority(PyObject *module, PyObject *args, PyObject *kwargs) +os_getpriority(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"which", "who", NULL}; @@ -1153,7 +1153,7 @@ os_getpriority(PyObject *module, PyObject *args, PyObject *kwargs) int which; int who; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &which, &who)) { goto exit; } @@ -1174,13 +1174,13 @@ PyDoc_STRVAR(os_setpriority__doc__, "Set program scheduling priority."); #define OS_SETPRIORITY_METHODDEF \ - {"setpriority", (PyCFunction)os_setpriority, METH_VARARGS|METH_KEYWORDS, os_setpriority__doc__}, + {"setpriority", (PyCFunction)os_setpriority, METH_FASTCALL, os_setpriority__doc__}, static PyObject * os_setpriority_impl(PyObject *module, int which, int who, int priority); static PyObject * -os_setpriority(PyObject *module, PyObject *args, PyObject *kwargs) +os_setpriority(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"which", "who", "priority", NULL}; @@ -1189,7 +1189,7 @@ os_setpriority(PyObject *module, PyObject *args, PyObject *kwargs) int who; int priority; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &which, &who, &priority)) { goto exit; } @@ -1214,14 +1214,14 @@ PyDoc_STRVAR(os_rename__doc__, " If they are unavailable, using them will raise a NotImplementedError."); #define OS_RENAME_METHODDEF \ - {"rename", (PyCFunction)os_rename, METH_VARARGS|METH_KEYWORDS, os_rename__doc__}, + {"rename", (PyCFunction)os_rename, METH_FASTCALL, os_rename__doc__}, static PyObject * os_rename_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); static PyObject * -os_rename(PyObject *module, PyObject *args, PyObject *kwargs) +os_rename(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; @@ -1231,7 +1231,7 @@ os_rename(PyObject *module, PyObject *args, PyObject *kwargs) int src_dir_fd = DEFAULT_DIR_FD; int dst_dir_fd = DEFAULT_DIR_FD; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) { goto exit; } @@ -1259,14 +1259,14 @@ PyDoc_STRVAR(os_replace__doc__, " If they are unavailable, using them will raise a NotImplementedError.\""); #define OS_REPLACE_METHODDEF \ - {"replace", (PyCFunction)os_replace, METH_VARARGS|METH_KEYWORDS, os_replace__doc__}, + {"replace", (PyCFunction)os_replace, METH_FASTCALL, os_replace__doc__}, static PyObject * os_replace_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); static PyObject * -os_replace(PyObject *module, PyObject *args, PyObject *kwargs) +os_replace(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; @@ -1276,7 +1276,7 @@ os_replace(PyObject *module, PyObject *args, PyObject *kwargs) int src_dir_fd = DEFAULT_DIR_FD; int dst_dir_fd = DEFAULT_DIR_FD; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &src, path_converter, &dst, dir_fd_converter, &src_dir_fd, dir_fd_converter, &dst_dir_fd)) { goto exit; } @@ -1303,13 +1303,13 @@ PyDoc_STRVAR(os_rmdir__doc__, " If it is unavailable, using it will raise a NotImplementedError."); #define OS_RMDIR_METHODDEF \ - {"rmdir", (PyCFunction)os_rmdir, METH_VARARGS|METH_KEYWORDS, os_rmdir__doc__}, + {"rmdir", (PyCFunction)os_rmdir, METH_FASTCALL, os_rmdir__doc__}, static PyObject * os_rmdir_impl(PyObject *module, path_t *path, int dir_fd); static PyObject * -os_rmdir(PyObject *module, PyObject *args, PyObject *kwargs) +os_rmdir(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "dir_fd", NULL}; @@ -1317,7 +1317,7 @@ os_rmdir(PyObject *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("rmdir", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -1339,13 +1339,13 @@ PyDoc_STRVAR(os_system__doc__, "Execute the command in a subshell."); #define OS_SYSTEM_METHODDEF \ - {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, + {"system", (PyCFunction)os_system, METH_FASTCALL, os_system__doc__}, static long os_system_impl(PyObject *module, Py_UNICODE *command); static PyObject * -os_system(PyObject *module, PyObject *args, PyObject *kwargs) +os_system(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"command", NULL}; @@ -1353,7 +1353,7 @@ os_system(PyObject *module, PyObject *args, PyObject *kwargs) Py_UNICODE *command; long _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &command)) { goto exit; } @@ -1378,13 +1378,13 @@ PyDoc_STRVAR(os_system__doc__, "Execute the command in a subshell."); #define OS_SYSTEM_METHODDEF \ - {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, + {"system", (PyCFunction)os_system, METH_FASTCALL, os_system__doc__}, static long os_system_impl(PyObject *module, PyObject *command); static PyObject * -os_system(PyObject *module, PyObject *args, PyObject *kwargs) +os_system(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"command", NULL}; @@ -1392,7 +1392,7 @@ os_system(PyObject *module, PyObject *args, PyObject *kwargs) PyObject *command = NULL; long _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, PyUnicode_FSConverter, &command)) { goto exit; } @@ -1450,13 +1450,13 @@ PyDoc_STRVAR(os_unlink__doc__, " If it is unavailable, using it will raise a NotImplementedError."); #define OS_UNLINK_METHODDEF \ - {"unlink", (PyCFunction)os_unlink, METH_VARARGS|METH_KEYWORDS, os_unlink__doc__}, + {"unlink", (PyCFunction)os_unlink, METH_FASTCALL, os_unlink__doc__}, static PyObject * os_unlink_impl(PyObject *module, path_t *path, int dir_fd); static PyObject * -os_unlink(PyObject *module, PyObject *args, PyObject *kwargs) +os_unlink(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "dir_fd", NULL}; @@ -1464,7 +1464,7 @@ os_unlink(PyObject *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("unlink", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -1489,13 +1489,13 @@ PyDoc_STRVAR(os_remove__doc__, " If it is unavailable, using it will raise a NotImplementedError."); #define OS_REMOVE_METHODDEF \ - {"remove", (PyCFunction)os_remove, METH_VARARGS|METH_KEYWORDS, os_remove__doc__}, + {"remove", (PyCFunction)os_remove, METH_FASTCALL, os_remove__doc__}, static PyObject * os_remove_impl(PyObject *module, path_t *path, int dir_fd); static PyObject * -os_remove(PyObject *module, PyObject *args, PyObject *kwargs) +os_remove(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "dir_fd", NULL}; @@ -1503,7 +1503,7 @@ os_remove(PyObject *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("remove", "path", 0, 0); int dir_fd = DEFAULT_DIR_FD; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, UNLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -1571,14 +1571,14 @@ PyDoc_STRVAR(os_utime__doc__, " If they are unavailable, using them will raise a NotImplementedError."); #define OS_UTIME_METHODDEF \ - {"utime", (PyCFunction)os_utime, METH_VARARGS|METH_KEYWORDS, os_utime__doc__}, + {"utime", (PyCFunction)os_utime, METH_FASTCALL, os_utime__doc__}, static PyObject * os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks); static PyObject * -os_utime(PyObject *module, PyObject *args, PyObject *kwargs) +os_utime(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "times", "ns", "dir_fd", "follow_symlinks", NULL}; @@ -1589,7 +1589,7 @@ os_utime(PyObject *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; int follow_symlinks = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, ×, &ns, FUTIMENSAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks)) { goto exit; } @@ -1609,20 +1609,20 @@ PyDoc_STRVAR(os__exit__doc__, "Exit to the system with specified status, without normal exit processing."); #define OS__EXIT_METHODDEF \ - {"_exit", (PyCFunction)os__exit, METH_VARARGS|METH_KEYWORDS, os__exit__doc__}, + {"_exit", (PyCFunction)os__exit, METH_FASTCALL, os__exit__doc__}, static PyObject * os__exit_impl(PyObject *module, int status); static PyObject * -os__exit(PyObject *module, PyObject *args, PyObject *kwargs) +os__exit(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"status", NULL}; static _PyArg_Parser _parser = {"i:_exit", _keywords, 0}; int status; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &status)) { goto exit; } @@ -1689,13 +1689,13 @@ PyDoc_STRVAR(os_execve__doc__, " Dictionary of strings mapping to strings."); #define OS_EXECVE_METHODDEF \ - {"execve", (PyCFunction)os_execve, METH_VARARGS|METH_KEYWORDS, os_execve__doc__}, + {"execve", (PyCFunction)os_execve, METH_FASTCALL, os_execve__doc__}, static PyObject * os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env); static PyObject * -os_execve(PyObject *module, PyObject *args, PyObject *kwargs) +os_execve(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "argv", "env", NULL}; @@ -1704,7 +1704,7 @@ os_execve(PyObject *module, PyObject *args, PyObject *kwargs) PyObject *argv; PyObject *env; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &argv, &env)) { goto exit; } @@ -1868,20 +1868,20 @@ PyDoc_STRVAR(os_sched_get_priority_max__doc__, "Get the maximum scheduling priority for policy."); #define OS_SCHED_GET_PRIORITY_MAX_METHODDEF \ - {"sched_get_priority_max", (PyCFunction)os_sched_get_priority_max, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_max__doc__}, + {"sched_get_priority_max", (PyCFunction)os_sched_get_priority_max, METH_FASTCALL, os_sched_get_priority_max__doc__}, static PyObject * os_sched_get_priority_max_impl(PyObject *module, int policy); static PyObject * -os_sched_get_priority_max(PyObject *module, PyObject *args, PyObject *kwargs) +os_sched_get_priority_max(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"policy", NULL}; static _PyArg_Parser _parser = {"i:sched_get_priority_max", _keywords, 0}; int policy; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &policy)) { goto exit; } @@ -1902,20 +1902,20 @@ PyDoc_STRVAR(os_sched_get_priority_min__doc__, "Get the minimum scheduling priority for policy."); #define OS_SCHED_GET_PRIORITY_MIN_METHODDEF \ - {"sched_get_priority_min", (PyCFunction)os_sched_get_priority_min, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_min__doc__}, + {"sched_get_priority_min", (PyCFunction)os_sched_get_priority_min, METH_FASTCALL, os_sched_get_priority_min__doc__}, static PyObject * os_sched_get_priority_min_impl(PyObject *module, int policy); static PyObject * -os_sched_get_priority_min(PyObject *module, PyObject *args, PyObject *kwargs) +os_sched_get_priority_min(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"policy", NULL}; static _PyArg_Parser _parser = {"i:sched_get_priority_min", _keywords, 0}; int policy; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &policy)) { goto exit; } @@ -2398,20 +2398,20 @@ PyDoc_STRVAR(os_getpgid__doc__, "Call the system call getpgid(), and return the result."); #define OS_GETPGID_METHODDEF \ - {"getpgid", (PyCFunction)os_getpgid, METH_VARARGS|METH_KEYWORDS, os_getpgid__doc__}, + {"getpgid", (PyCFunction)os_getpgid, METH_FASTCALL, os_getpgid__doc__}, static PyObject * os_getpgid_impl(PyObject *module, pid_t pid); static PyObject * -os_getpgid(PyObject *module, PyObject *args, PyObject *kwargs) +os_getpgid(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"pid", NULL}; static _PyArg_Parser _parser = {"" _Py_PARSE_PID ":getpgid", _keywords, 0}; pid_t pid; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &pid)) { goto exit; } @@ -2848,20 +2848,20 @@ PyDoc_STRVAR(os_wait3__doc__, " (pid, status, rusage)"); #define OS_WAIT3_METHODDEF \ - {"wait3", (PyCFunction)os_wait3, METH_VARARGS|METH_KEYWORDS, os_wait3__doc__}, + {"wait3", (PyCFunction)os_wait3, METH_FASTCALL, os_wait3__doc__}, static PyObject * os_wait3_impl(PyObject *module, int options); static PyObject * -os_wait3(PyObject *module, PyObject *args, PyObject *kwargs) +os_wait3(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"options", NULL}; static _PyArg_Parser _parser = {"i:wait3", _keywords, 0}; int options; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &options)) { goto exit; } @@ -2885,13 +2885,13 @@ PyDoc_STRVAR(os_wait4__doc__, " (pid, status, rusage)"); #define OS_WAIT4_METHODDEF \ - {"wait4", (PyCFunction)os_wait4, METH_VARARGS|METH_KEYWORDS, os_wait4__doc__}, + {"wait4", (PyCFunction)os_wait4, METH_FASTCALL, os_wait4__doc__}, static PyObject * os_wait4_impl(PyObject *module, pid_t pid, int options); static PyObject * -os_wait4(PyObject *module, PyObject *args, PyObject *kwargs) +os_wait4(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"pid", "options", NULL}; @@ -2899,7 +2899,7 @@ os_wait4(PyObject *module, PyObject *args, PyObject *kwargs) pid_t pid; int options; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &pid, &options)) { goto exit; } @@ -3076,14 +3076,14 @@ PyDoc_STRVAR(os_symlink__doc__, " If it is unavailable, using it will raise a NotImplementedError."); #define OS_SYMLINK_METHODDEF \ - {"symlink", (PyCFunction)os_symlink, METH_VARARGS|METH_KEYWORDS, os_symlink__doc__}, + {"symlink", (PyCFunction)os_symlink, METH_FASTCALL, os_symlink__doc__}, static PyObject * os_symlink_impl(PyObject *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd); static PyObject * -os_symlink(PyObject *module, PyObject *args, PyObject *kwargs) +os_symlink(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"src", "dst", "target_is_directory", "dir_fd", NULL}; @@ -3093,7 +3093,7 @@ os_symlink(PyObject *module, PyObject *args, PyObject *kwargs) int target_is_directory = 0; int dir_fd = DEFAULT_DIR_FD; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &src, path_converter, &dst, &target_is_directory, SYMLINKAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -3298,13 +3298,13 @@ PyDoc_STRVAR(os_open__doc__, " If it is unavailable, using it will raise a NotImplementedError."); #define OS_OPEN_METHODDEF \ - {"open", (PyCFunction)os_open, METH_VARARGS|METH_KEYWORDS, os_open__doc__}, + {"open", (PyCFunction)os_open, METH_FASTCALL, os_open__doc__}, static int os_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd); static PyObject * -os_open(PyObject *module, PyObject *args, PyObject *kwargs) +os_open(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "flags", "mode", "dir_fd", NULL}; @@ -3315,7 +3315,7 @@ os_open(PyObject *module, PyObject *args, PyObject *kwargs) int dir_fd = DEFAULT_DIR_FD; int _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &flags, &mode, OPENAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -3339,20 +3339,20 @@ PyDoc_STRVAR(os_close__doc__, "Close a file descriptor."); #define OS_CLOSE_METHODDEF \ - {"close", (PyCFunction)os_close, METH_VARARGS|METH_KEYWORDS, os_close__doc__}, + {"close", (PyCFunction)os_close, METH_FASTCALL, os_close__doc__}, static PyObject * os_close_impl(PyObject *module, int fd); static PyObject * -os_close(PyObject *module, PyObject *args, PyObject *kwargs) +os_close(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"fd", NULL}; static _PyArg_Parser _parser = {"i:close", _keywords, 0}; int fd; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &fd)) { goto exit; } @@ -3430,13 +3430,13 @@ PyDoc_STRVAR(os_dup2__doc__, "Duplicate file descriptor."); #define OS_DUP2_METHODDEF \ - {"dup2", (PyCFunction)os_dup2, METH_VARARGS|METH_KEYWORDS, os_dup2__doc__}, + {"dup2", (PyCFunction)os_dup2, METH_FASTCALL, os_dup2__doc__}, static PyObject * os_dup2_impl(PyObject *module, int fd, int fd2, int inheritable); static PyObject * -os_dup2(PyObject *module, PyObject *args, PyObject *kwargs) +os_dup2(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"fd", "fd2", "inheritable", NULL}; @@ -3445,7 +3445,7 @@ os_dup2(PyObject *module, PyObject *args, PyObject *kwargs) int fd2; int inheritable = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &fd, &fd2, &inheritable)) { goto exit; } @@ -3695,20 +3695,20 @@ PyDoc_STRVAR(os_fstat__doc__, "Equivalent to os.stat(fd)."); #define OS_FSTAT_METHODDEF \ - {"fstat", (PyCFunction)os_fstat, METH_VARARGS|METH_KEYWORDS, os_fstat__doc__}, + {"fstat", (PyCFunction)os_fstat, METH_FASTCALL, os_fstat__doc__}, static PyObject * os_fstat_impl(PyObject *module, int fd); static PyObject * -os_fstat(PyObject *module, PyObject *args, PyObject *kwargs) +os_fstat(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"fd", NULL}; static _PyArg_Parser _parser = {"i:fstat", _keywords, 0}; int fd; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &fd)) { goto exit; } @@ -3918,13 +3918,13 @@ PyDoc_STRVAR(os_mkfifo__doc__, " If it is unavailable, using it will raise a NotImplementedError."); #define OS_MKFIFO_METHODDEF \ - {"mkfifo", (PyCFunction)os_mkfifo, METH_VARARGS|METH_KEYWORDS, os_mkfifo__doc__}, + {"mkfifo", (PyCFunction)os_mkfifo, METH_FASTCALL, os_mkfifo__doc__}, static PyObject * os_mkfifo_impl(PyObject *module, path_t *path, int mode, int dir_fd); static PyObject * -os_mkfifo(PyObject *module, PyObject *args, PyObject *kwargs) +os_mkfifo(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "mode", "dir_fd", NULL}; @@ -3933,7 +3933,7 @@ os_mkfifo(PyObject *module, PyObject *args, PyObject *kwargs) int mode = 438; int dir_fd = DEFAULT_DIR_FD; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &mode, MKFIFOAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -3969,14 +3969,14 @@ PyDoc_STRVAR(os_mknod__doc__, " If it is unavailable, using it will raise a NotImplementedError."); #define OS_MKNOD_METHODDEF \ - {"mknod", (PyCFunction)os_mknod, METH_VARARGS|METH_KEYWORDS, os_mknod__doc__}, + {"mknod", (PyCFunction)os_mknod, METH_FASTCALL, os_mknod__doc__}, static PyObject * os_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device, int dir_fd); static PyObject * -os_mknod(PyObject *module, PyObject *args, PyObject *kwargs) +os_mknod(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "mode", "device", "dir_fd", NULL}; @@ -3986,7 +3986,7 @@ os_mknod(PyObject *module, PyObject *args, PyObject *kwargs) dev_t device = 0; int dir_fd = DEFAULT_DIR_FD; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &mode, _Py_Dev_Converter, &device, MKNODAT_DIR_FD_CONVERTER, &dir_fd)) { goto exit; } @@ -4156,13 +4156,13 @@ PyDoc_STRVAR(os_truncate__doc__, " If this functionality is unavailable, using it raises an exception."); #define OS_TRUNCATE_METHODDEF \ - {"truncate", (PyCFunction)os_truncate, METH_VARARGS|METH_KEYWORDS, os_truncate__doc__}, + {"truncate", (PyCFunction)os_truncate, METH_FASTCALL, os_truncate__doc__}, static PyObject * os_truncate_impl(PyObject *module, path_t *path, Py_off_t length); static PyObject * -os_truncate(PyObject *module, PyObject *args, PyObject *kwargs) +os_truncate(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "length", NULL}; @@ -4170,7 +4170,7 @@ os_truncate(PyObject *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("truncate", "path", 0, PATH_HAVE_FTRUNCATE); Py_off_t length; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, Py_off_t_converter, &length)) { goto exit; } @@ -4447,13 +4447,13 @@ PyDoc_STRVAR(os_WIFCONTINUED__doc__, "job control stop."); #define OS_WIFCONTINUED_METHODDEF \ - {"WIFCONTINUED", (PyCFunction)os_WIFCONTINUED, METH_VARARGS|METH_KEYWORDS, os_WIFCONTINUED__doc__}, + {"WIFCONTINUED", (PyCFunction)os_WIFCONTINUED, METH_FASTCALL, os_WIFCONTINUED__doc__}, static int os_WIFCONTINUED_impl(PyObject *module, int status); static PyObject * -os_WIFCONTINUED(PyObject *module, PyObject *args, PyObject *kwargs) +os_WIFCONTINUED(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"status", NULL}; @@ -4461,7 +4461,7 @@ os_WIFCONTINUED(PyObject *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &status)) { goto exit; } @@ -4486,13 +4486,13 @@ PyDoc_STRVAR(os_WIFSTOPPED__doc__, "Return True if the process returning status was stopped."); #define OS_WIFSTOPPED_METHODDEF \ - {"WIFSTOPPED", (PyCFunction)os_WIFSTOPPED, METH_VARARGS|METH_KEYWORDS, os_WIFSTOPPED__doc__}, + {"WIFSTOPPED", (PyCFunction)os_WIFSTOPPED, METH_FASTCALL, os_WIFSTOPPED__doc__}, static int os_WIFSTOPPED_impl(PyObject *module, int status); static PyObject * -os_WIFSTOPPED(PyObject *module, PyObject *args, PyObject *kwargs) +os_WIFSTOPPED(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"status", NULL}; @@ -4500,7 +4500,7 @@ os_WIFSTOPPED(PyObject *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &status)) { goto exit; } @@ -4525,13 +4525,13 @@ PyDoc_STRVAR(os_WIFSIGNALED__doc__, "Return True if the process returning status was terminated by a signal."); #define OS_WIFSIGNALED_METHODDEF \ - {"WIFSIGNALED", (PyCFunction)os_WIFSIGNALED, METH_VARARGS|METH_KEYWORDS, os_WIFSIGNALED__doc__}, + {"WIFSIGNALED", (PyCFunction)os_WIFSIGNALED, METH_FASTCALL, os_WIFSIGNALED__doc__}, static int os_WIFSIGNALED_impl(PyObject *module, int status); static PyObject * -os_WIFSIGNALED(PyObject *module, PyObject *args, PyObject *kwargs) +os_WIFSIGNALED(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"status", NULL}; @@ -4539,7 +4539,7 @@ os_WIFSIGNALED(PyObject *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &status)) { goto exit; } @@ -4564,13 +4564,13 @@ PyDoc_STRVAR(os_WIFEXITED__doc__, "Return True if the process returning status exited via the exit() system call."); #define OS_WIFEXITED_METHODDEF \ - {"WIFEXITED", (PyCFunction)os_WIFEXITED, METH_VARARGS|METH_KEYWORDS, os_WIFEXITED__doc__}, + {"WIFEXITED", (PyCFunction)os_WIFEXITED, METH_FASTCALL, os_WIFEXITED__doc__}, static int os_WIFEXITED_impl(PyObject *module, int status); static PyObject * -os_WIFEXITED(PyObject *module, PyObject *args, PyObject *kwargs) +os_WIFEXITED(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"status", NULL}; @@ -4578,7 +4578,7 @@ os_WIFEXITED(PyObject *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &status)) { goto exit; } @@ -4603,13 +4603,13 @@ PyDoc_STRVAR(os_WEXITSTATUS__doc__, "Return the process return code from status."); #define OS_WEXITSTATUS_METHODDEF \ - {"WEXITSTATUS", (PyCFunction)os_WEXITSTATUS, METH_VARARGS|METH_KEYWORDS, os_WEXITSTATUS__doc__}, + {"WEXITSTATUS", (PyCFunction)os_WEXITSTATUS, METH_FASTCALL, os_WEXITSTATUS__doc__}, static int os_WEXITSTATUS_impl(PyObject *module, int status); static PyObject * -os_WEXITSTATUS(PyObject *module, PyObject *args, PyObject *kwargs) +os_WEXITSTATUS(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"status", NULL}; @@ -4617,7 +4617,7 @@ os_WEXITSTATUS(PyObject *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &status)) { goto exit; } @@ -4642,13 +4642,13 @@ PyDoc_STRVAR(os_WTERMSIG__doc__, "Return the signal that terminated the process that provided the status value."); #define OS_WTERMSIG_METHODDEF \ - {"WTERMSIG", (PyCFunction)os_WTERMSIG, METH_VARARGS|METH_KEYWORDS, os_WTERMSIG__doc__}, + {"WTERMSIG", (PyCFunction)os_WTERMSIG, METH_FASTCALL, os_WTERMSIG__doc__}, static int os_WTERMSIG_impl(PyObject *module, int status); static PyObject * -os_WTERMSIG(PyObject *module, PyObject *args, PyObject *kwargs) +os_WTERMSIG(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"status", NULL}; @@ -4656,7 +4656,7 @@ os_WTERMSIG(PyObject *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &status)) { goto exit; } @@ -4681,13 +4681,13 @@ PyDoc_STRVAR(os_WSTOPSIG__doc__, "Return the signal that stopped the process that provided the status value."); #define OS_WSTOPSIG_METHODDEF \ - {"WSTOPSIG", (PyCFunction)os_WSTOPSIG, METH_VARARGS|METH_KEYWORDS, os_WSTOPSIG__doc__}, + {"WSTOPSIG", (PyCFunction)os_WSTOPSIG, METH_FASTCALL, os_WSTOPSIG__doc__}, static int os_WSTOPSIG_impl(PyObject *module, int status); static PyObject * -os_WSTOPSIG(PyObject *module, PyObject *args, PyObject *kwargs) +os_WSTOPSIG(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"status", NULL}; @@ -4695,7 +4695,7 @@ os_WSTOPSIG(PyObject *module, PyObject *args, PyObject *kwargs) int status; int _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &status)) { goto exit; } @@ -4757,20 +4757,20 @@ PyDoc_STRVAR(os_statvfs__doc__, " If this functionality is unavailable, using it raises an exception."); #define OS_STATVFS_METHODDEF \ - {"statvfs", (PyCFunction)os_statvfs, METH_VARARGS|METH_KEYWORDS, os_statvfs__doc__}, + {"statvfs", (PyCFunction)os_statvfs, METH_FASTCALL, os_statvfs__doc__}, static PyObject * os_statvfs_impl(PyObject *module, path_t *path); static PyObject * -os_statvfs(PyObject *module, PyObject *args, PyObject *kwargs) +os_statvfs(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", NULL}; static _PyArg_Parser _parser = {"O&:statvfs", _keywords, 0}; path_t path = PATH_T_INITIALIZE("statvfs", "path", 0, PATH_HAVE_FSTATVFS); - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path)) { goto exit; } @@ -4794,20 +4794,20 @@ PyDoc_STRVAR(os__getdiskusage__doc__, "Return disk usage statistics about the given path as a (total, free) tuple."); #define OS__GETDISKUSAGE_METHODDEF \ - {"_getdiskusage", (PyCFunction)os__getdiskusage, METH_VARARGS|METH_KEYWORDS, os__getdiskusage__doc__}, + {"_getdiskusage", (PyCFunction)os__getdiskusage, METH_FASTCALL, os__getdiskusage__doc__}, static PyObject * os__getdiskusage_impl(PyObject *module, Py_UNICODE *path); static PyObject * -os__getdiskusage(PyObject *module, PyObject *args, PyObject *kwargs) +os__getdiskusage(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", NULL}; static _PyArg_Parser _parser = {"u:_getdiskusage", _keywords, 0}; Py_UNICODE *path; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &path)) { goto exit; } @@ -4872,13 +4872,13 @@ PyDoc_STRVAR(os_pathconf__doc__, " If this functionality is unavailable, using it raises an exception."); #define OS_PATHCONF_METHODDEF \ - {"pathconf", (PyCFunction)os_pathconf, METH_VARARGS|METH_KEYWORDS, os_pathconf__doc__}, + {"pathconf", (PyCFunction)os_pathconf, METH_FASTCALL, os_pathconf__doc__}, static long os_pathconf_impl(PyObject *module, path_t *path, int name); static PyObject * -os_pathconf(PyObject *module, PyObject *args, PyObject *kwargs) +os_pathconf(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "name", NULL}; @@ -4887,7 +4887,7 @@ os_pathconf(PyObject *module, PyObject *args, PyObject *kwargs) int name; long _return_value; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, conv_path_confname, &name)) { goto exit; } @@ -5020,20 +5020,21 @@ PyDoc_STRVAR(os_startfile__doc__, "the underlying Win32 ShellExecute function doesn\'t work if it is."); #define OS_STARTFILE_METHODDEF \ - {"startfile", (PyCFunction)os_startfile, METH_VARARGS|METH_KEYWORDS, os_startfile__doc__}, + {"startfile", (PyCFunction)os_startfile, METH_FASTCALL, os_startfile__doc__}, static PyObject * os_startfile_impl(PyObject *module, path_t *filepath, Py_UNICODE *operation); static PyObject * -os_startfile(PyObject *module, PyObject *args, PyObject *kwargs) +os_startfile(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; - static char *_keywords[] = {"filepath", "operation", NULL}; + static const char * const _keywords[] = {"filepath", "operation", NULL}; + static _PyArg_Parser _parser = {"O&|u:startfile", _keywords, 0}; path_t filepath = PATH_T_INITIALIZE("startfile", "filepath", 0, 0); Py_UNICODE *operation = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|u:startfile", _keywords, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &filepath, &operation)) { goto exit; } @@ -5084,20 +5085,20 @@ PyDoc_STRVAR(os_device_encoding__doc__, "If the device is not a terminal, return None."); #define OS_DEVICE_ENCODING_METHODDEF \ - {"device_encoding", (PyCFunction)os_device_encoding, METH_VARARGS|METH_KEYWORDS, os_device_encoding__doc__}, + {"device_encoding", (PyCFunction)os_device_encoding, METH_FASTCALL, os_device_encoding__doc__}, static PyObject * os_device_encoding_impl(PyObject *module, int fd); static PyObject * -os_device_encoding(PyObject *module, PyObject *args, PyObject *kwargs) +os_device_encoding(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"fd", NULL}; static _PyArg_Parser _parser = {"i:device_encoding", _keywords, 0}; int fd; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &fd)) { goto exit; } @@ -5233,14 +5234,14 @@ PyDoc_STRVAR(os_getxattr__doc__, " the link points to."); #define OS_GETXATTR_METHODDEF \ - {"getxattr", (PyCFunction)os_getxattr, METH_VARARGS|METH_KEYWORDS, os_getxattr__doc__}, + {"getxattr", (PyCFunction)os_getxattr, METH_FASTCALL, os_getxattr__doc__}, static PyObject * os_getxattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks); static PyObject * -os_getxattr(PyObject *module, PyObject *args, PyObject *kwargs) +os_getxattr(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "attribute", "follow_symlinks", NULL}; @@ -5249,7 +5250,7 @@ os_getxattr(PyObject *module, PyObject *args, PyObject *kwargs) path_t attribute = PATH_T_INITIALIZE("getxattr", "attribute", 0, 0); int follow_symlinks = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, path_converter, &attribute, &follow_symlinks)) { goto exit; } @@ -5281,14 +5282,14 @@ PyDoc_STRVAR(os_setxattr__doc__, " the link points to."); #define OS_SETXATTR_METHODDEF \ - {"setxattr", (PyCFunction)os_setxattr, METH_VARARGS|METH_KEYWORDS, os_setxattr__doc__}, + {"setxattr", (PyCFunction)os_setxattr, METH_FASTCALL, os_setxattr__doc__}, static PyObject * os_setxattr_impl(PyObject *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks); static PyObject * -os_setxattr(PyObject *module, PyObject *args, PyObject *kwargs) +os_setxattr(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "attribute", "value", "flags", "follow_symlinks", NULL}; @@ -5299,7 +5300,7 @@ os_setxattr(PyObject *module, PyObject *args, PyObject *kwargs) int flags = 0; int follow_symlinks = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, path_converter, &attribute, &value, &flags, &follow_symlinks)) { goto exit; } @@ -5334,14 +5335,14 @@ PyDoc_STRVAR(os_removexattr__doc__, " the link points to."); #define OS_REMOVEXATTR_METHODDEF \ - {"removexattr", (PyCFunction)os_removexattr, METH_VARARGS|METH_KEYWORDS, os_removexattr__doc__}, + {"removexattr", (PyCFunction)os_removexattr, METH_FASTCALL, os_removexattr__doc__}, static PyObject * os_removexattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks); static PyObject * -os_removexattr(PyObject *module, PyObject *args, PyObject *kwargs) +os_removexattr(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "attribute", "follow_symlinks", NULL}; @@ -5350,7 +5351,7 @@ os_removexattr(PyObject *module, PyObject *args, PyObject *kwargs) path_t attribute = PATH_T_INITIALIZE("removexattr", "attribute", 0, 0); int follow_symlinks = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, path_converter, &attribute, &follow_symlinks)) { goto exit; } @@ -5382,13 +5383,13 @@ PyDoc_STRVAR(os_listxattr__doc__, " the link points to."); #define OS_LISTXATTR_METHODDEF \ - {"listxattr", (PyCFunction)os_listxattr, METH_VARARGS|METH_KEYWORDS, os_listxattr__doc__}, + {"listxattr", (PyCFunction)os_listxattr, METH_FASTCALL, os_listxattr__doc__}, static PyObject * os_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks); static PyObject * -os_listxattr(PyObject *module, PyObject *args, PyObject *kwargs) +os_listxattr(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", "follow_symlinks", NULL}; @@ -5396,7 +5397,7 @@ os_listxattr(PyObject *module, PyObject *args, PyObject *kwargs) path_t path = PATH_T_INITIALIZE("listxattr", "path", 1, 1); int follow_symlinks = 1; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, path_converter, &path, &follow_symlinks)) { goto exit; } @@ -5602,20 +5603,20 @@ PyDoc_STRVAR(os_fspath__doc__, "types raise a TypeError."); #define OS_FSPATH_METHODDEF \ - {"fspath", (PyCFunction)os_fspath, METH_VARARGS|METH_KEYWORDS, os_fspath__doc__}, + {"fspath", (PyCFunction)os_fspath, METH_FASTCALL, os_fspath__doc__}, static PyObject * os_fspath_impl(PyObject *module, PyObject *path); static PyObject * -os_fspath(PyObject *module, PyObject *args, PyObject *kwargs) +os_fspath(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"path", NULL}; static _PyArg_Parser _parser = {"O:fspath", _keywords, 0}; PyObject *path; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &path)) { goto exit; } @@ -5634,13 +5635,13 @@ PyDoc_STRVAR(os_getrandom__doc__, "Obtain a series of random bytes."); #define OS_GETRANDOM_METHODDEF \ - {"getrandom", (PyCFunction)os_getrandom, METH_VARARGS|METH_KEYWORDS, os_getrandom__doc__}, + {"getrandom", (PyCFunction)os_getrandom, METH_FASTCALL, os_getrandom__doc__}, static PyObject * os_getrandom_impl(PyObject *module, Py_ssize_t size, int flags); static PyObject * -os_getrandom(PyObject *module, PyObject *args, PyObject *kwargs) +os_getrandom(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"size", "flags", NULL}; @@ -5648,7 +5649,7 @@ os_getrandom(PyObject *module, PyObject *args, PyObject *kwargs) Py_ssize_t size; int flags = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &size, &flags)) { goto exit; } @@ -6139,4 +6140,4 @@ exit: #ifndef OS_GETRANDOM_METHODDEF #define OS_GETRANDOM_METHODDEF #endif /* !defined(OS_GETRANDOM_METHODDEF) */ -/*[clinic end generated code: output=fce51c7d432662c2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=dfa6bc9d1f2db750 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h index 8a03f67e45..75a096cdff 100644 --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -233,14 +233,14 @@ PyDoc_STRVAR(pyexpat_ParserCreate__doc__, "Return a new XML parser object."); #define PYEXPAT_PARSERCREATE_METHODDEF \ - {"ParserCreate", (PyCFunction)pyexpat_ParserCreate, METH_VARARGS|METH_KEYWORDS, pyexpat_ParserCreate__doc__}, + {"ParserCreate", (PyCFunction)pyexpat_ParserCreate, METH_FASTCALL, pyexpat_ParserCreate__doc__}, static PyObject * pyexpat_ParserCreate_impl(PyObject *module, const char *encoding, const char *namespace_separator, PyObject *intern); static PyObject * -pyexpat_ParserCreate(PyObject *module, PyObject *args, PyObject *kwargs) +pyexpat_ParserCreate(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"encoding", "namespace_separator", "intern", NULL}; @@ -249,7 +249,7 @@ pyexpat_ParserCreate(PyObject *module, PyObject *args, PyObject *kwargs) const char *namespace_separator = NULL; PyObject *intern = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &encoding, &namespace_separator, &intern)) { goto exit; } @@ -289,4 +289,4 @@ exit: #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=93cfe662f2bc48e5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e889f7c6af6cc42f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha1module.c.h b/Modules/clinic/sha1module.c.h index 19727621d4..b08e92d099 100644 --- a/Modules/clinic/sha1module.c.h +++ b/Modules/clinic/sha1module.c.h @@ -72,20 +72,20 @@ PyDoc_STRVAR(_sha1_sha1__doc__, "Return a new SHA1 hash object; optionally initialized with a string."); #define _SHA1_SHA1_METHODDEF \ - {"sha1", (PyCFunction)_sha1_sha1, METH_VARARGS|METH_KEYWORDS, _sha1_sha1__doc__}, + {"sha1", (PyCFunction)_sha1_sha1, METH_FASTCALL, _sha1_sha1__doc__}, static PyObject * _sha1_sha1_impl(PyObject *module, PyObject *string); static PyObject * -_sha1_sha1(PyObject *module, PyObject *args, PyObject *kwargs) +_sha1_sha1(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", NULL}; static _PyArg_Parser _parser = {"|O:sha1", _keywords, 0}; PyObject *string = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string)) { goto exit; } @@ -94,4 +94,4 @@ _sha1_sha1(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=549a5d08c248337d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1430450f3f806895 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha256module.c.h b/Modules/clinic/sha256module.c.h index 4239ab8ca9..115db500f4 100644 --- a/Modules/clinic/sha256module.c.h +++ b/Modules/clinic/sha256module.c.h @@ -72,20 +72,20 @@ PyDoc_STRVAR(_sha256_sha256__doc__, "Return a new SHA-256 hash object; optionally initialized with a string."); #define _SHA256_SHA256_METHODDEF \ - {"sha256", (PyCFunction)_sha256_sha256, METH_VARARGS|METH_KEYWORDS, _sha256_sha256__doc__}, + {"sha256", (PyCFunction)_sha256_sha256, METH_FASTCALL, _sha256_sha256__doc__}, static PyObject * _sha256_sha256_impl(PyObject *module, PyObject *string); static PyObject * -_sha256_sha256(PyObject *module, PyObject *args, PyObject *kwargs) +_sha256_sha256(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", NULL}; static _PyArg_Parser _parser = {"|O:sha256", _keywords, 0}; PyObject *string = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string)) { goto exit; } @@ -102,20 +102,20 @@ PyDoc_STRVAR(_sha256_sha224__doc__, "Return a new SHA-224 hash object; optionally initialized with a string."); #define _SHA256_SHA224_METHODDEF \ - {"sha224", (PyCFunction)_sha256_sha224, METH_VARARGS|METH_KEYWORDS, _sha256_sha224__doc__}, + {"sha224", (PyCFunction)_sha256_sha224, METH_FASTCALL, _sha256_sha224__doc__}, static PyObject * _sha256_sha224_impl(PyObject *module, PyObject *string); static PyObject * -_sha256_sha224(PyObject *module, PyObject *args, PyObject *kwargs) +_sha256_sha224(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", NULL}; static _PyArg_Parser _parser = {"|O:sha224", _keywords, 0}; PyObject *string = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string)) { goto exit; } @@ -124,4 +124,4 @@ _sha256_sha224(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=a1296ba6d0780051 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=19439d70db7ead5c input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha512module.c.h b/Modules/clinic/sha512module.c.h index 9680ea228a..a2b57f71b5 100644 --- a/Modules/clinic/sha512module.c.h +++ b/Modules/clinic/sha512module.c.h @@ -72,20 +72,20 @@ PyDoc_STRVAR(_sha512_sha512__doc__, "Return a new SHA-512 hash object; optionally initialized with a string."); #define _SHA512_SHA512_METHODDEF \ - {"sha512", (PyCFunction)_sha512_sha512, METH_VARARGS|METH_KEYWORDS, _sha512_sha512__doc__}, + {"sha512", (PyCFunction)_sha512_sha512, METH_FASTCALL, _sha512_sha512__doc__}, static PyObject * _sha512_sha512_impl(PyObject *module, PyObject *string); static PyObject * -_sha512_sha512(PyObject *module, PyObject *args, PyObject *kwargs) +_sha512_sha512(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", NULL}; static _PyArg_Parser _parser = {"|O:sha512", _keywords, 0}; PyObject *string = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string)) { goto exit; } @@ -102,20 +102,20 @@ PyDoc_STRVAR(_sha512_sha384__doc__, "Return a new SHA-384 hash object; optionally initialized with a string."); #define _SHA512_SHA384_METHODDEF \ - {"sha384", (PyCFunction)_sha512_sha384, METH_VARARGS|METH_KEYWORDS, _sha512_sha384__doc__}, + {"sha384", (PyCFunction)_sha512_sha384, METH_FASTCALL, _sha512_sha384__doc__}, static PyObject * _sha512_sha384_impl(PyObject *module, PyObject *string); static PyObject * -_sha512_sha384(PyObject *module, PyObject *args, PyObject *kwargs) +_sha512_sha384(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"string", NULL}; static _PyArg_Parser _parser = {"|O:sha384", _keywords, 0}; PyObject *string = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &string)) { goto exit; } @@ -124,4 +124,4 @@ _sha512_sha384(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=8f7f6603a9c4e910 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=18f15598c3487045 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index 172308ac5e..fda392a9cd 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -14,13 +14,13 @@ PyDoc_STRVAR(zlib_compress__doc__, " Compression level, in 0-9 or -1."); #define ZLIB_COMPRESS_METHODDEF \ - {"compress", (PyCFunction)zlib_compress, METH_VARARGS|METH_KEYWORDS, zlib_compress__doc__}, + {"compress", (PyCFunction)zlib_compress, METH_FASTCALL, zlib_compress__doc__}, static PyObject * zlib_compress_impl(PyObject *module, Py_buffer *data, int level); static PyObject * -zlib_compress(PyObject *module, PyObject *args, PyObject *kwargs) +zlib_compress(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"", "level", NULL}; @@ -28,7 +28,7 @@ zlib_compress(PyObject *module, PyObject *args, PyObject *kwargs) Py_buffer data = {NULL, NULL}; int level = Z_DEFAULT_COMPRESSION; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &data, &level)) { goto exit; } @@ -57,14 +57,14 @@ PyDoc_STRVAR(zlib_decompress__doc__, " The initial output buffer size."); #define ZLIB_DECOMPRESS_METHODDEF \ - {"decompress", (PyCFunction)zlib_decompress, METH_VARARGS|METH_KEYWORDS, zlib_decompress__doc__}, + {"decompress", (PyCFunction)zlib_decompress, METH_FASTCALL, zlib_decompress__doc__}, static PyObject * zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, Py_ssize_t bufsize); static PyObject * -zlib_decompress(PyObject *module, PyObject *args, PyObject *kwargs) +zlib_decompress(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"", "wbits", "bufsize", NULL}; @@ -73,7 +73,7 @@ zlib_decompress(PyObject *module, PyObject *args, PyObject *kwargs) int wbits = MAX_WBITS; Py_ssize_t bufsize = DEF_BUF_SIZE; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &data, &wbits, ssize_t_converter, &bufsize)) { goto exit; } @@ -119,14 +119,14 @@ PyDoc_STRVAR(zlib_compressobj__doc__, " containing subsequences that are likely to occur in the input data."); #define ZLIB_COMPRESSOBJ_METHODDEF \ - {"compressobj", (PyCFunction)zlib_compressobj, METH_VARARGS|METH_KEYWORDS, zlib_compressobj__doc__}, + {"compressobj", (PyCFunction)zlib_compressobj, METH_FASTCALL, zlib_compressobj__doc__}, static PyObject * zlib_compressobj_impl(PyObject *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict); static PyObject * -zlib_compressobj(PyObject *module, PyObject *args, PyObject *kwargs) +zlib_compressobj(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"level", "method", "wbits", "memLevel", "strategy", "zdict", NULL}; @@ -138,7 +138,7 @@ zlib_compressobj(PyObject *module, PyObject *args, PyObject *kwargs) int strategy = Z_DEFAULT_STRATEGY; Py_buffer zdict = {NULL, NULL}; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &level, &method, &wbits, &memLevel, &strategy, &zdict)) { goto exit; } @@ -166,13 +166,13 @@ PyDoc_STRVAR(zlib_decompressobj__doc__, " dictionary as used by the compressor that produced the input data."); #define ZLIB_DECOMPRESSOBJ_METHODDEF \ - {"decompressobj", (PyCFunction)zlib_decompressobj, METH_VARARGS|METH_KEYWORDS, zlib_decompressobj__doc__}, + {"decompressobj", (PyCFunction)zlib_decompressobj, METH_FASTCALL, zlib_decompressobj__doc__}, static PyObject * zlib_decompressobj_impl(PyObject *module, int wbits, PyObject *zdict); static PyObject * -zlib_decompressobj(PyObject *module, PyObject *args, PyObject *kwargs) +zlib_decompressobj(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"wbits", "zdict", NULL}; @@ -180,7 +180,7 @@ zlib_decompressobj(PyObject *module, PyObject *args, PyObject *kwargs) int wbits = MAX_WBITS; PyObject *zdict = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &wbits, &zdict)) { goto exit; } @@ -247,14 +247,14 @@ PyDoc_STRVAR(zlib_Decompress_decompress__doc__, "Call the flush() method to clear these buffers."); #define ZLIB_DECOMPRESS_DECOMPRESS_METHODDEF \ - {"decompress", (PyCFunction)zlib_Decompress_decompress, METH_VARARGS|METH_KEYWORDS, zlib_Decompress_decompress__doc__}, + {"decompress", (PyCFunction)zlib_Decompress_decompress, METH_FASTCALL, zlib_Decompress_decompress__doc__}, static PyObject * zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, Py_ssize_t max_length); static PyObject * -zlib_Decompress_decompress(compobject *self, PyObject *args, PyObject *kwargs) +zlib_Decompress_decompress(compobject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"", "max_length", NULL}; @@ -262,7 +262,7 @@ zlib_Decompress_decompress(compobject *self, PyObject *args, PyObject *kwargs) Py_buffer data = {NULL, NULL}; Py_ssize_t max_length = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &data, ssize_t_converter, &max_length)) { goto exit; } @@ -467,4 +467,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=48911ef429b65903 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=3a4e2bfe750423a3 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 2286749cb025118308ce513a1b4ba90daa6e968e Mon Sep 17 00:00:00 2001 From: ?ukasz Langa Date: Fri, 9 Sep 2016 21:47:46 -0700 Subject: Don't run garbage collection on interpreter exit if it was explicitly disabled by the user. --- Modules/gcmodule.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'Modules') diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 2575d96d71..754348e20a 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -1596,6 +1596,15 @@ PyGC_Collect(void) return n; } +Py_ssize_t +_PyGC_CollectIfEnabled(void) +{ + if (!enabled) + return 0; + + return PyGC_Collect(); +} + Py_ssize_t _PyGC_CollectNoFail(void) { -- cgit v1.2.1 From c82774eb054aaaf80c65e2dd72c56b5d4735993b Mon Sep 17 00:00:00 2001 From: Nick Coghlan Date: Sat, 10 Sep 2016 20:00:02 +1000 Subject: Issue #27137: align Python & C implementations of functools.partial The pure Python fallback implementation of functools.partial now matches the behaviour of its accelerated C counterpart for subclassing, pickling and text representation purposes. Patch by Emanuel Barry and Serhiy Storchaka. --- Modules/_functoolsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 848a03cb07..fa5fad3e75 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -229,7 +229,7 @@ partial_repr(partialobject *pto) if (status != 0) { if (status < 0) return NULL; - return PyUnicode_FromFormat("%s(...)", Py_TYPE(pto)->tp_name); + return PyUnicode_FromString("..."); } arglist = PyUnicode_FromString(""); -- cgit v1.2.1 From 59a1a7d58e815bb1f195529d796a98a4cedbb560 Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sat, 10 Sep 2016 15:58:31 -0400 Subject: Closes #28067: Do not call localtime (gmtime) in datetime module. --- Modules/_datetimemodule.c | 102 +++++++++++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 42 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 13c9d2ff4f..99556c3fe7 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -15,6 +15,12 @@ static struct tm *localtime_r(const time_t *timep, struct tm *result) return result; return NULL; } +static struct tm *gmtime_r(const time_t *timep, struct tm *result) +{ + if (gmime_s(result, timep) == 0) + return result; + return NULL; +} #endif /* Differentiate between building the core module and building extension @@ -2517,14 +2523,13 @@ date_new(PyTypeObject *type, PyObject *args, PyObject *kw) static PyObject * date_local_from_object(PyObject *cls, PyObject *obj) { - struct tm *tm; + struct tm tm; time_t t; if (_PyTime_ObjectToTime_t(obj, &t, _PyTime_ROUND_FLOOR) == -1) return NULL; - tm = localtime(&t); - if (tm == NULL) { + if (localtime_r(&t, &tm) == NULL) { /* unconvertible time */ #ifdef EINVAL if (errno == 0) @@ -2535,9 +2540,9 @@ date_local_from_object(PyObject *cls, PyObject *obj) } return PyObject_CallFunction(cls, "iii", - tm->tm_year + 1900, - tm->tm_mon + 1, - tm->tm_mday); + tm.tm_year + 1900, + tm.tm_mon + 1, + tm.tm_mday); } /* Return new date from current time. @@ -4194,8 +4199,8 @@ datetime_new(PyTypeObject *type, PyObject *args, PyObject *kw) return self; } -/* TM_FUNC is the shared type of localtime() and gmtime(). */ -typedef struct tm *(*TM_FUNC)(const time_t *timer); +/* TM_FUNC is the shared type of localtime_r() and gmtime_r(). */ +typedef struct tm *(*TM_FUNC)(const time_t *timer, struct tm*); /* As of version 2015f max fold in IANA database is * 23 hours at 1969-09-30 13:00:00 in Kwajalein. */ @@ -4244,11 +4249,10 @@ static PyObject * datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us, PyObject *tzinfo) { - struct tm *tm; + struct tm tm; int year, month, day, hour, minute, second, fold = 0; - tm = f(&timet); - if (tm == NULL) { + if (f(&timet, &tm) == NULL) { #ifdef EINVAL if (errno == 0) errno = EINVAL; @@ -4256,20 +4260,20 @@ datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us, return PyErr_SetFromErrno(PyExc_OSError); } - year = tm->tm_year + 1900; - month = tm->tm_mon + 1; - day = tm->tm_mday; - hour = tm->tm_hour; - minute = tm->tm_min; + year = tm.tm_year + 1900; + month = tm.tm_mon + 1; + day = tm.tm_mday; + hour = tm.tm_hour; + minute = tm.tm_min; /* The platform localtime/gmtime may insert leap seconds, - * indicated by tm->tm_sec > 59. We don't care about them, + * indicated by tm.tm_sec > 59. We don't care about them, * except to the extent that passing them on to the datetime * constructor would raise ValueError for a reason that * made no sense to the user. */ - second = Py_MIN(59, tm->tm_sec); + second = Py_MIN(59, tm.tm_sec); - if (tzinfo == Py_None && f == localtime) { + if (tzinfo == Py_None && f == localtime_r) { long long probe_seconds, result_seconds, transition; result_seconds = utc_to_seconds(year, month, day, @@ -4357,7 +4361,7 @@ datetime_datetime_now_impl(PyTypeObject *type, PyObject *tz) return NULL; self = datetime_best_possible((PyObject *)type, - tz == Py_None ? localtime : gmtime, + tz == Py_None ? localtime_r : gmtime_r, tz); if (self != NULL && tz != Py_None) { /* Convert UTC to tzinfo's zone. */ @@ -4372,7 +4376,7 @@ datetime_datetime_now_impl(PyTypeObject *type, PyObject *tz) static PyObject * datetime_utcnow(PyObject *cls, PyObject *dummy) { - return datetime_best_possible(cls, gmtime, Py_None); + return datetime_best_possible(cls, gmtime_r, Py_None); } /* Return new local datetime from timestamp (Python timestamp -- a double). */ @@ -4391,7 +4395,7 @@ datetime_fromtimestamp(PyObject *cls, PyObject *args, PyObject *kw) return NULL; self = datetime_from_timestamp(cls, - tzinfo == Py_None ? localtime : gmtime, + tzinfo == Py_None ? localtime_r : gmtime_r, timestamp, tzinfo); if (self != NULL && tzinfo != Py_None) { @@ -4409,7 +4413,7 @@ datetime_utcfromtimestamp(PyObject *cls, PyObject *args) PyObject *result = NULL; if (PyArg_ParseTuple(args, "O:utcfromtimestamp", ×tamp)) - result = datetime_from_timestamp(cls, gmtime, timestamp, + result = datetime_from_timestamp(cls, gmtime_r, timestamp, Py_None); return result; } @@ -5032,37 +5036,51 @@ local_timezone_from_timestamp(time_t timestamp) { PyObject *result = NULL; PyObject *delta; - struct tm *local_time_tm; + struct tm local_time_tm; PyObject *nameo = NULL; const char *zone = NULL; - local_time_tm = localtime(×tamp); + if (localtime_r(×tamp, &local_time_tm) == NULL) { +#ifdef EINVAL + if (errno == 0) + errno = EINVAL; +#endif + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } #ifdef HAVE_STRUCT_TM_TM_ZONE - zone = local_time_tm->tm_zone; - delta = new_delta(0, local_time_tm->tm_gmtoff, 0, 1); + zone = local_time_tm.tm_zone; + delta = new_delta(0, local_time_tm.tm_gmtoff, 0, 1); #else /* HAVE_STRUCT_TM_TM_ZONE */ { PyObject *local_time, *utc_time; - struct tm *utc_time_tm; + struct tm utc_time_tm; char buf[100]; - strftime(buf, sizeof(buf), "%Z", local_time_tm); + strftime(buf, sizeof(buf), "%Z", &local_time_tm); zone = buf; - local_time = new_datetime(local_time_tm->tm_year + 1900, - local_time_tm->tm_mon + 1, - local_time_tm->tm_mday, - local_time_tm->tm_hour, - local_time_tm->tm_min, - local_time_tm->tm_sec, 0, Py_None, 0); + local_time = new_datetime(local_time_tm.tm_year + 1900, + local_time_tm.tm_mon + 1, + local_time_tm.tm_mday, + local_time_tm.tm_hour, + local_time_tm.tm_min, + local_time_tm.tm_sec, 0, Py_None, 0); if (local_time == NULL) { return NULL; } - utc_time_tm = gmtime(×tamp); - utc_time = new_datetime(utc_time_tm->tm_year + 1900, - utc_time_tm->tm_mon + 1, - utc_time_tm->tm_mday, - utc_time_tm->tm_hour, - utc_time_tm->tm_min, - utc_time_tm->tm_sec, 0, Py_None, 0); + if (gmtime(×tamp, &utc_time_tm) == NULL) { +#ifdef EINVAL + if (errno == 0) + errno = EINVAL; +#endif + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } + utc_time = new_datetime(utc_time_tm.tm_year + 1900, + utc_time_tm.tm_mon + 1, + utc_time_tm.tm_mday, + utc_time_tm.tm_hour, + utc_time_tm.tm_min, + utc_time_tm.tm_sec, 0, Py_None, 0); if (utc_time == NULL) { Py_DECREF(local_time); return NULL; -- cgit v1.2.1 From cc05c5691513e6a3b84e661e9640e99d7cf238d8 Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sat, 10 Sep 2016 16:08:26 -0400 Subject: #28067: Fixed a typo. --- Modules/_datetimemodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 99556c3fe7..892772ffab 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -17,7 +17,7 @@ static struct tm *localtime_r(const time_t *timep, struct tm *result) } static struct tm *gmtime_r(const time_t *timep, struct tm *result) { - if (gmime_s(result, timep) == 0) + if (gmtime_s(result, timep) == 0) return result; return NULL; } -- cgit v1.2.1 From 945180b06b9c2a5b60c68d3b950d29b13beada58 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Sat, 10 Sep 2016 22:43:48 +0200 Subject: Issue 28043: SSLContext has improved default settings The options OP_NO_COMPRESSION, OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE, OP_SINGLE_ECDH_USE, OP_NO_SSLv2 (except for PROTOCOL_SSLv2), and OP_NO_SSLv3 (except for PROTOCOL_SSLv3) are set by default. The initial cipher suite list contains only HIGH ciphers, no NULL ciphers and MD5 ciphers (except for PROTOCOL_SSLv2). --- Modules/_ssl.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index b4fac44b62..d6054059ac 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -2407,6 +2407,7 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) PySSLContext *self; long options; SSL_CTX *ctx = NULL; + int result; #if defined(SSL_MODE_RELEASE_BUFFERS) unsigned long libver; #endif @@ -2470,8 +2471,38 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) options |= SSL_OP_NO_SSLv2; if (proto_version != PY_SSL_VERSION_SSL3) options |= SSL_OP_NO_SSLv3; + /* Minimal security flags for server and client side context. + * Client sockets ignore server-side parameters. */ +#ifdef SSL_OP_NO_COMPRESSION + options |= SSL_OP_NO_COMPRESSION; +#endif +#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE + options |= SSL_OP_CIPHER_SERVER_PREFERENCE; +#endif +#ifdef SSL_OP_SINGLE_DH_USE + options |= SSL_OP_SINGLE_DH_USE; +#endif +#ifdef SSL_OP_SINGLE_ECDH_USE + options |= SSL_OP_SINGLE_ECDH_USE; +#endif SSL_CTX_set_options(self->ctx, options); + /* A bare minimum cipher list without completly broken cipher suites. + * It's far from perfect but gives users a better head start. */ + if (proto_version != PY_SSL_VERSION_SSL2) { + result = SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!eNULL:!MD5"); + } else { + /* SSLv2 needs MD5 */ + result = SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!eNULL"); + } + if (result == 0) { + Py_DECREF(self); + ERR_clear_error(); + PyErr_SetString(PySSLErrorObject, + "No cipher can be selected."); + return NULL; + } + #if defined(SSL_MODE_RELEASE_BUFFERS) /* Set SSL_MODE_RELEASE_BUFFERS. This potentially greatly reduces memory usage for no cost at all. However, don't do this for OpenSSL versions -- cgit v1.2.1 From 1dd2bfbd07e5256cb9b5fe0696026ee4798674ac Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sat, 10 Sep 2016 16:51:17 -0400 Subject: #28067: Fixed another typo. --- Modules/_datetimemodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 892772ffab..381835ddd2 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -5067,7 +5067,7 @@ local_timezone_from_timestamp(time_t timestamp) if (local_time == NULL) { return NULL; } - if (gmtime(×tamp, &utc_time_tm) == NULL) { + if (gmtime_r(×tamp, &utc_time_tm) == NULL) { #ifdef EINVAL if (errno == 0) errno = EINVAL; -- cgit v1.2.1 From 7f85dccc70da5218cbd16e4c0a35e9b7cf349276 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Sat, 10 Sep 2016 23:44:53 +0200 Subject: Issue #19500: Add client-side SSL session resumption to the ssl module. --- Modules/_ssl.c | 372 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 370 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index d6054059ac..4d8e7e7a39 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -187,6 +187,19 @@ static X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *store) { return store->param; } + +static int +SSL_SESSION_has_ticket(const SSL_SESSION *s) +{ + return (s->tlsext_ticklen > 0) ? 1 : 0; +} + +static unsigned long +SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s) +{ + return s->tlsext_tick_lifetime_hint; +} + #endif /* OpenSSL < 1.1.0 or LibreSSL */ @@ -293,25 +306,35 @@ typedef struct { int eof_written; } PySSLMemoryBIO; +typedef struct { + PyObject_HEAD + SSL_SESSION *session; + PySSLContext *ctx; +} PySSLSession; + static PyTypeObject PySSLContext_Type; static PyTypeObject PySSLSocket_Type; static PyTypeObject PySSLMemoryBIO_Type; +static PyTypeObject PySSLSession_Type; /*[clinic input] module _ssl class _ssl._SSLContext "PySSLContext *" "&PySSLContext_Type" class _ssl._SSLSocket "PySSLSocket *" "&PySSLSocket_Type" class _ssl.MemoryBIO "PySSLMemoryBIO *" "&PySSLMemoryBIO_Type" +class _ssl.SSLSession "PySSLSession *" "&PySSLSession_Type" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=7bf7cb832638e2e1]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=bdc67fafeeaa8109]*/ #include "clinic/_ssl.c.h" static int PySSL_select(PySocketSockObject *s, int writing, _PyTime_t timeout); + #define PySSLContext_Check(v) (Py_TYPE(v) == &PySSLContext_Type) #define PySSLSocket_Check(v) (Py_TYPE(v) == &PySSLSocket_Type) #define PySSLMemoryBIO_Check(v) (Py_TYPE(v) == &PySSLMemoryBIO_Type) +#define PySSLSession_Check(v) (Py_TYPE(v) == &PySSLSession_Type) typedef enum { SOCKET_IS_NONBLOCKING, @@ -2325,6 +2348,152 @@ _ssl__SSLSocket_tls_unique_cb_impl(PySSLSocket *self) return retval; } +#ifdef OPENSSL_VERSION_1_1 + +static SSL_SESSION* +_ssl_session_dup(SSL_SESSION *session) { + SSL_SESSION *newsession = NULL; + int slen; + unsigned char *senc = NULL, *p; + const unsigned char *const_p; + + if (session == NULL) { + PyErr_SetString(PyExc_ValueError, "Invalid session"); + goto error; + } + + /* get length */ + slen = i2d_SSL_SESSION(session, NULL); + if (slen == 0 || slen > 0xFF00) { + PyErr_SetString(PyExc_ValueError, "i2d() failed."); + goto error; + } + if ((senc = PyMem_Malloc(slen)) == NULL) { + PyErr_NoMemory(); + goto error; + } + p = senc; + if (!i2d_SSL_SESSION(session, &p)) { + PyErr_SetString(PyExc_ValueError, "i2d() failed."); + goto error; + } + const_p = senc; + newsession = d2i_SSL_SESSION(NULL, &const_p, slen); + if (session == NULL) { + goto error; + } + PyMem_Free(senc); + return newsession; + error: + if (senc != NULL) { + PyMem_Free(senc); + } + return NULL; +} +#endif + +static PyObject * +PySSL_get_session(PySSLSocket *self, void *closure) { + /* get_session can return sessions from a server-side connection, + * it does not check for handshake done or client socket. */ + PySSLSession *pysess; + SSL_SESSION *session; + +#ifdef OPENSSL_VERSION_1_1 + /* duplicate session as workaround for session bug in OpenSSL 1.1.0, + * https://github.com/openssl/openssl/issues/1550 */ + session = SSL_get0_session(self->ssl); /* borrowed reference */ + if (session == NULL) { + Py_RETURN_NONE; + } + if ((session = _ssl_session_dup(session)) == NULL) { + return NULL; + } +#else + session = SSL_get1_session(self->ssl); + if (session == NULL) { + Py_RETURN_NONE; + } +#endif + + pysess = PyObject_New(PySSLSession, &PySSLSession_Type); + if (pysess == NULL) { + SSL_SESSION_free(session); + return NULL; + } + + assert(self->ctx); + pysess->ctx = self->ctx; + Py_INCREF(pysess->ctx); + pysess->session = session; + return (PyObject *)pysess; +} + +static int PySSL_set_session(PySSLSocket *self, PyObject *value, + void *closure) + { + PySSLSession *pysess; +#ifdef OPENSSL_VERSION_1_1 + SSL_SESSION *session; +#endif + int result; + + if (!PySSLSession_Check(value)) { + PyErr_SetString(PyExc_TypeError, "Value is not a SSLSession."); + return -1; + } + pysess = (PySSLSession *)value; + + if (self->ctx->ctx != pysess->ctx->ctx) { + PyErr_SetString(PyExc_ValueError, + "Session refers to a different SSLContext."); + return -1; + } + if (self->socket_type != PY_SSL_CLIENT) { + PyErr_SetString(PyExc_ValueError, + "Cannot set session for server-side SSLSocket."); + return -1; + } + if (self->handshake_done) { + PyErr_SetString(PyExc_ValueError, + "Cannot set session after handshake."); + return -1; + } +#ifdef OPENSSL_VERSION_1_1 + /* duplicate session */ + if ((session = _ssl_session_dup(pysess->session)) == NULL) { + return -1; + } + result = SSL_set_session(self->ssl, session); + /* free duplicate, SSL_set_session() bumps ref count */ + SSL_SESSION_free(session); +#else + result = SSL_set_session(self->ssl, pysess->session); +#endif + if (result == 0) { + _setSSLError(NULL, 0, __FILE__, __LINE__); + return -1; + } + return 0; +} + +PyDoc_STRVAR(PySSL_set_session_doc, +"_setter_session(session)\n\ +\ +Get / set SSLSession."); + +static PyObject * +PySSL_get_session_reused(PySSLSocket *self, void *closure) { + if (SSL_session_reused(self->ssl)) { + Py_RETURN_TRUE; + } else { + Py_RETURN_FALSE; + } +} + +PyDoc_STRVAR(PySSL_get_session_reused_doc, +"Was the client session reused during handshake?"); + static PyGetSetDef ssl_getsetlist[] = { {"context", (getter) PySSL_get_context, (setter) PySSL_set_context, PySSL_set_context_doc}, @@ -2334,6 +2503,10 @@ static PyGetSetDef ssl_getsetlist[] = { PySSL_get_server_hostname_doc}, {"owner", (getter) PySSL_get_owner, (setter) PySSL_set_owner, PySSL_get_owner_doc}, + {"session", (getter) PySSL_get_session, + (setter) PySSL_set_session, PySSL_set_session_doc}, + {"session_reused", (getter) PySSL_get_session_reused, NULL, + PySSL_get_session_reused_doc}, {NULL}, /* sentinel */ }; @@ -2618,7 +2791,7 @@ _ssl__SSLContext_get_ciphers_impl(PySSLContext *self) { SSL *ssl = NULL; STACK_OF(SSL_CIPHER) *sk = NULL; - SSL_CIPHER *cipher; + const SSL_CIPHER *cipher; int i=0; PyObject *result = NULL, *dct; @@ -4086,6 +4259,193 @@ static PyTypeObject PySSLMemoryBIO_Type = { }; +/* + * SSL Session object + */ + +static void +PySSLSession_dealloc(PySSLSession *self) +{ + Py_XDECREF(self->ctx); + if (self->session != NULL) { + SSL_SESSION_free(self->session); + } + PyObject_Del(self); +} + +static PyObject * +PySSLSession_richcompare(PyObject *left, PyObject *right, int op) +{ + int result; + + if (left == NULL || right == NULL) { + PyErr_BadInternalCall(); + return NULL; + } + + if (!PySSLSession_Check(left) || !PySSLSession_Check(right)) { + Py_RETURN_NOTIMPLEMENTED; + } + + if (left == right) { + result = 0; + } else { + const unsigned char *left_id, *right_id; + unsigned int left_len, right_len; + left_id = SSL_SESSION_get_id(((PySSLSession *)left)->session, + &left_len); + right_id = SSL_SESSION_get_id(((PySSLSession *)right)->session, + &right_len); + if (left_len == right_len) { + result = memcmp(left_id, right_id, left_len); + } else { + result = 1; + } + } + + switch (op) { + case Py_EQ: + if (result == 0) { + Py_RETURN_TRUE; + } else { + Py_RETURN_FALSE; + } + break; + case Py_NE: + if (result != 0) { + Py_RETURN_TRUE; + } else { + Py_RETURN_FALSE; + } + break; + case Py_LT: + case Py_LE: + case Py_GT: + case Py_GE: + Py_RETURN_NOTIMPLEMENTED; + break; + default: + PyErr_BadArgument(); + return NULL; + } +} + +static int +PySSLSession_traverse(PySSLSession *self, visitproc visit, void *arg) +{ + Py_VISIT(self->ctx); + return 0; +} + +static int +PySSLSession_clear(PySSLSession *self) +{ + Py_CLEAR(self->ctx); + return 0; +} + + +static PyObject * +PySSLSession_get_time(PySSLSession *self, void *closure) { + return PyLong_FromLong(SSL_SESSION_get_time(self->session)); +} + +PyDoc_STRVAR(PySSLSession_get_time_doc, +"Session creation time (seconds since epoch)."); + + +static PyObject * +PySSLSession_get_timeout(PySSLSession *self, void *closure) { + return PyLong_FromLong(SSL_SESSION_get_timeout(self->session)); +} + +PyDoc_STRVAR(PySSLSession_get_timeout_doc, +"Session timeout (delta in seconds)."); + + +static PyObject * +PySSLSession_get_ticket_lifetime_hint(PySSLSession *self, void *closure) { + unsigned long hint = SSL_SESSION_get_ticket_lifetime_hint(self->session); + return PyLong_FromUnsignedLong(hint); +} + +PyDoc_STRVAR(PySSLSession_get_ticket_lifetime_hint_doc, +"Ticket life time hint."); + + +static PyObject * +PySSLSession_get_session_id(PySSLSession *self, void *closure) { + const unsigned char *id; + unsigned int len; + id = SSL_SESSION_get_id(self->session, &len); + return PyBytes_FromStringAndSize((const char *)id, len); +} + +PyDoc_STRVAR(PySSLSession_get_session_id_doc, +"Session id"); + + +static PyObject * +PySSLSession_get_has_ticket(PySSLSession *self, void *closure) { + if (SSL_SESSION_has_ticket(self->session)) { + Py_RETURN_TRUE; + } else { + Py_RETURN_FALSE; + } +} + +PyDoc_STRVAR(PySSLSession_get_has_ticket_doc, +"Does the session contain a ticket?"); + + +static PyGetSetDef PySSLSession_getsetlist[] = { + {"has_ticket", (getter) PySSLSession_get_has_ticket, NULL, + PySSLSession_get_has_ticket_doc}, + {"id", (getter) PySSLSession_get_session_id, NULL, + PySSLSession_get_session_id_doc}, + {"ticket_lifetime_hint", (getter) PySSLSession_get_ticket_lifetime_hint, + NULL, PySSLSession_get_ticket_lifetime_hint_doc}, + {"time", (getter) PySSLSession_get_time, NULL, + PySSLSession_get_time_doc}, + {"timeout", (getter) PySSLSession_get_timeout, NULL, + PySSLSession_get_timeout_doc}, + {NULL}, /* sentinel */ +}; + +static PyTypeObject PySSLSession_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "_ssl.Session", /*tp_name*/ + sizeof(PySSLSession), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)PySSLSession_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + (traverseproc)PySSLSession_traverse, /*tp_traverse*/ + (inquiry)PySSLSession_clear, /*tp_clear*/ + PySSLSession_richcompare, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + PySSLSession_getsetlist, /*tp_getset*/ +}; + + /* helper routines for seeding the SSL PRNG */ /*[clinic input] _ssl.RAND_add @@ -4771,6 +5131,9 @@ PyInit__ssl(void) return NULL; if (PyType_Ready(&PySSLMemoryBIO_Type) < 0) return NULL; + if (PyType_Ready(&PySSLSession_Type) < 0) + return NULL; + m = PyModule_Create(&_sslmodule); if (m == NULL) @@ -4842,6 +5205,10 @@ PyInit__ssl(void) if (PyDict_SetItemString(d, "MemoryBIO", (PyObject *)&PySSLMemoryBIO_Type) != 0) return NULL; + if (PyDict_SetItemString(d, "SSLSession", + (PyObject *)&PySSLSession_Type) != 0) + return NULL; + PyModule_AddIntConstant(m, "SSL_ERROR_ZERO_RETURN", PY_SSL_ERROR_ZERO_RETURN); PyModule_AddIntConstant(m, "SSL_ERROR_WANT_READ", @@ -4968,6 +5335,7 @@ PyInit__ssl(void) PyModule_AddIntConstant(m, "OP_CIPHER_SERVER_PREFERENCE", SSL_OP_CIPHER_SERVER_PREFERENCE); PyModule_AddIntConstant(m, "OP_SINGLE_DH_USE", SSL_OP_SINGLE_DH_USE); + PyModule_AddIntConstant(m, "OP_NO_TICKET", SSL_OP_NO_TICKET); #ifdef SSL_OP_SINGLE_ECDH_USE PyModule_AddIntConstant(m, "OP_SINGLE_ECDH_USE", SSL_OP_SINGLE_ECDH_USE); #endif -- cgit v1.2.1 From c3f22afb19d63bf7bc3f4bde75887f2f236a0187 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sun, 11 Sep 2016 12:57:15 +0300 Subject: Issue #10740: sqlite3 no longer implicitly commit an open transaction before DDL statements This commit contains the following commits from ghaering/pysqlite: * https://github.com/ghaering/pysqlite/commit/f254c534948c41c0ceb8cbabf0d4a2f547754739 * https://github.com/ghaering/pysqlite/commit/796b3afe38cfdac5d7d5ec260826b0a596554631 * https://github.com/ghaering/pysqlite/commit/cae87ee68613697a5f4947b4a0941f59a28da1b6 * https://github.com/ghaering/pysqlite/commit/3567b31bb5e5b226ba006213a9c69dde3f155faf With the following additions: * Fixed a refcount error * Fixed a compiler warning * Made the string comparison a little more robust * Added a whatsnew entry --- Modules/_sqlite/cursor.c | 125 +++++++++----------------------------------- Modules/_sqlite/cursor.h | 6 --- Modules/_sqlite/statement.c | 18 +++++++ Modules/_sqlite/statement.h | 1 + 4 files changed, 45 insertions(+), 105 deletions(-) (limited to 'Modules') diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index e2c7a3469a..020f93107e 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -29,44 +29,6 @@ PyObject* pysqlite_cursor_iternext(pysqlite_Cursor* self); static const char errmsg_fetch_across_rollback[] = "Cursor needed to be reset because of commit/rollback and can no longer be fetched from."; -static pysqlite_StatementKind detect_statement_type(const char* statement) -{ - char buf[20]; - const char* src; - char* dst; - - src = statement; - /* skip over whitepace */ - while (*src == '\r' || *src == '\n' || *src == ' ' || *src == '\t') { - src++; - } - - if (*src == 0) - return STATEMENT_INVALID; - - dst = buf; - *dst = 0; - while (Py_ISALPHA(*src) && (dst - buf) < ((Py_ssize_t)sizeof(buf) - 2)) { - *dst++ = Py_TOLOWER(*src++); - } - - *dst = 0; - - if (!strcmp(buf, "select")) { - return STATEMENT_SELECT; - } else if (!strcmp(buf, "insert")) { - return STATEMENT_INSERT; - } else if (!strcmp(buf, "update")) { - return STATEMENT_UPDATE; - } else if (!strcmp(buf, "delete")) { - return STATEMENT_DELETE; - } else if (!strcmp(buf, "replace")) { - return STATEMENT_REPLACE; - } else { - return STATEMENT_OTHER; - } -} - static int pysqlite_cursor_init(pysqlite_Cursor* self, PyObject* args, PyObject* kwargs) { pysqlite_Connection* connection; @@ -427,9 +389,9 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* PyObject* func_args; PyObject* result; int numcols; - int statement_type; PyObject* descriptor; PyObject* second_argument = NULL; + sqlite_int64 lastrowid; if (!check_cursor(self)) { goto error; @@ -510,7 +472,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* /* reset description and rowcount */ Py_INCREF(Py_None); Py_SETREF(self->description, Py_None); - self->rowcount = -1L; + self->rowcount = 0L; func_args = PyTuple_New(1); if (!func_args) { @@ -549,43 +511,19 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* pysqlite_statement_reset(self->statement); pysqlite_statement_mark_dirty(self->statement); - statement_type = detect_statement_type(operation_cstr); - if (self->connection->begin_statement) { - switch (statement_type) { - case STATEMENT_UPDATE: - case STATEMENT_DELETE: - case STATEMENT_INSERT: - case STATEMENT_REPLACE: - if (!self->connection->inTransaction) { - result = _pysqlite_connection_begin(self->connection); - if (!result) { - goto error; - } - Py_DECREF(result); - } - break; - case STATEMENT_OTHER: - /* it's a DDL statement or something similar - - we better COMMIT first so it works for all cases */ - if (self->connection->inTransaction) { - result = pysqlite_connection_commit(self->connection, NULL); - if (!result) { - goto error; - } - Py_DECREF(result); - } - break; - case STATEMENT_SELECT: - if (multiple) { - PyErr_SetString(pysqlite_ProgrammingError, - "You cannot execute SELECT statements in executemany()."); - goto error; - } - break; + /* For backwards compatibility reasons, do not start a transaction if a + DDL statement is encountered. If anybody wants transactional DDL, + they can issue a BEGIN statement manually. */ + if (self->connection->begin_statement && !sqlite3_stmt_readonly(self->statement->st) && !self->statement->is_ddl) { + if (sqlite3_get_autocommit(self->connection->db)) { + result = _pysqlite_connection_begin(self->connection); + if (!result) { + goto error; + } + Py_DECREF(result); } } - while (1) { parameters = PyIter_Next(parameters_iter); if (!parameters) { @@ -671,6 +609,20 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* } } + if (!sqlite3_stmt_readonly(self->statement->st)) { + self->rowcount += (long)sqlite3_changes(self->connection->db); + } else { + self->rowcount= -1L; + } + + if (!multiple) { + Py_DECREF(self->lastrowid); + Py_BEGIN_ALLOW_THREADS + lastrowid = sqlite3_last_insert_rowid(self->connection->db); + Py_END_ALLOW_THREADS + self->lastrowid = _pysqlite_long_from_int64(lastrowid); + } + if (rc == SQLITE_ROW) { if (multiple) { PyErr_SetString(pysqlite_ProgrammingError, "executemany() can only execute DML statements."); @@ -685,31 +637,6 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* Py_CLEAR(self->statement); } - switch (statement_type) { - case STATEMENT_UPDATE: - case STATEMENT_DELETE: - case STATEMENT_INSERT: - case STATEMENT_REPLACE: - if (self->rowcount == -1L) { - self->rowcount = 0L; - } - self->rowcount += (long)sqlite3_changes(self->connection->db); - } - - Py_DECREF(self->lastrowid); - if (!multiple && - /* REPLACE is an alias for INSERT OR REPLACE */ - (statement_type == STATEMENT_INSERT || statement_type == STATEMENT_REPLACE)) { - sqlite_int64 lastrowid; - Py_BEGIN_ALLOW_THREADS - lastrowid = sqlite3_last_insert_rowid(self->connection->db); - Py_END_ALLOW_THREADS - self->lastrowid = _pysqlite_long_from_int64(lastrowid); - } else { - Py_INCREF(Py_None); - self->lastrowid = Py_None; - } - if (multiple) { pysqlite_statement_reset(self->statement); } diff --git a/Modules/_sqlite/cursor.h b/Modules/_sqlite/cursor.h index 118ba388a4..28bbd5f911 100644 --- a/Modules/_sqlite/cursor.h +++ b/Modules/_sqlite/cursor.h @@ -51,12 +51,6 @@ typedef struct PyObject* in_weakreflist; /* List of weak references */ } pysqlite_Cursor; -typedef enum { - STATEMENT_INVALID, STATEMENT_INSERT, STATEMENT_DELETE, - STATEMENT_UPDATE, STATEMENT_REPLACE, STATEMENT_SELECT, - STATEMENT_OTHER -} pysqlite_StatementKind; - extern PyTypeObject pysqlite_CursorType; PyObject* pysqlite_cursor_execute(pysqlite_Cursor* self, PyObject* args); diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c index e87063341d..7b980135ed 100644 --- a/Modules/_sqlite/statement.c +++ b/Modules/_sqlite/statement.c @@ -54,6 +54,7 @@ int pysqlite_statement_create(pysqlite_Statement* self, pysqlite_Connection* con int rc; const char* sql_cstr; Py_ssize_t sql_cstr_len; + const char* p; self->st = NULL; self->in_use = 0; @@ -72,6 +73,23 @@ int pysqlite_statement_create(pysqlite_Statement* self, pysqlite_Connection* con Py_INCREF(sql); self->sql = sql; + /* determine if the statement is a DDL statement */ + self->is_ddl = 0; + for (p = sql_cstr; *p != 0; p++) { + switch (*p) { + case ' ': + case '\r': + case '\n': + case '\t': + continue; + } + + self->is_ddl = (PyOS_strnicmp(p, "create ", 7) == 0) + || (PyOS_strnicmp(p, "drop ", 5) == 0) + || (PyOS_strnicmp(p, "reindex ", 8) == 0); + break; + } + Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(connection->db, sql_cstr, diff --git a/Modules/_sqlite/statement.h b/Modules/_sqlite/statement.h index 4681443e76..6eef16857f 100644 --- a/Modules/_sqlite/statement.h +++ b/Modules/_sqlite/statement.h @@ -38,6 +38,7 @@ typedef struct sqlite3_stmt* st; PyObject* sql; int in_use; + int is_ddl; PyObject* in_weakreflist; /* List of weak references */ } pysqlite_Statement; -- cgit v1.2.1 From 1095c0bda8b866b2ed1253a460d53b6668aa44fa Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 11 Sep 2016 14:48:16 +0300 Subject: Use uint16_t instead of short in audioop. --- Modules/audioop.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'Modules') diff --git a/Modules/audioop.c b/Modules/audioop.c index 3f31a2b35b..dcd7788d62 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -240,7 +240,7 @@ static unsigned char st_linear2alaw(int16_t pcm_val) /* 2's complement (13-bit range) */ { int16_t mask; - short seg; + int16_t seg; unsigned char aval; /* A-law using even bit inversion */ @@ -294,7 +294,7 @@ static const int stepsizeTable[89] = { #define GETINT8(cp, i) GETINTX(signed char, (cp), (i)) -#define GETINT16(cp, i) GETINTX(short, (cp), (i)) +#define GETINT16(cp, i) GETINTX(int16_t, (cp), (i)) #define GETINT32(cp, i) GETINTX(int32_t, (cp), (i)) #if WORDS_BIGENDIAN @@ -311,7 +311,7 @@ static const int stepsizeTable[89] = { #define SETINT8(cp, i, val) SETINTX(signed char, (cp), (i), (val)) -#define SETINT16(cp, i, val) SETINTX(short, (cp), (i), (val)) +#define SETINT16(cp, i, val) SETINTX(int16_t, (cp), (i), (val)) #define SETINT32(cp, i, val) SETINTX(int32_t, (cp), (i), (val)) #if WORDS_BIGENDIAN @@ -542,7 +542,7 @@ audioop_rms_impl(PyObject *module, Py_buffer *fragment, int width) return PyLong_FromUnsignedLong(res); } -static double _sum2(const short *a, const short *b, Py_ssize_t len) +static double _sum2(const int16_t *a, const int16_t *b, Py_ssize_t len) { Py_ssize_t i; double sum = 0.0; @@ -600,7 +600,7 @@ audioop_findfit_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference) /*[clinic end generated code: output=5752306d83cbbada input=62c305605e183c9a]*/ { - const short *cp1, *cp2; + const int16_t *cp1, *cp2; Py_ssize_t len1, len2; Py_ssize_t j, best_j; double aj_m1, aj_lm1; @@ -610,9 +610,9 @@ audioop_findfit_impl(PyObject *module, Py_buffer *fragment, PyErr_SetString(AudioopError, "Strings should be even-sized"); return NULL; } - cp1 = (const short *)fragment->buf; + cp1 = (const int16_t *)fragment->buf; len1 = fragment->len >> 1; - cp2 = (const short *)reference->buf; + cp2 = (const int16_t *)reference->buf; len2 = reference->len >> 1; if (len1 < len2) { @@ -669,7 +669,7 @@ audioop_findfactor_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference) /*[clinic end generated code: output=14ea95652c1afcf8 input=816680301d012b21]*/ { - const short *cp1, *cp2; + const int16_t *cp1, *cp2; Py_ssize_t len; double sum_ri_2, sum_aij_ri, result; @@ -681,8 +681,8 @@ audioop_findfactor_impl(PyObject *module, Py_buffer *fragment, PyErr_SetString(AudioopError, "Samples should be same size"); return NULL; } - cp1 = (const short *)fragment->buf; - cp2 = (const short *)reference->buf; + cp1 = (const int16_t *)fragment->buf; + cp2 = (const int16_t *)reference->buf; len = fragment->len >> 1; sum_ri_2 = _sum2(cp2, cp2, len); sum_aij_ri = _sum2(cp1, cp2, len); @@ -711,7 +711,7 @@ audioop_findmax_impl(PyObject *module, Py_buffer *fragment, Py_ssize_t length) /*[clinic end generated code: output=f008128233523040 input=2f304801ed42383c]*/ { - const short *cp1; + const int16_t *cp1; Py_ssize_t len1; Py_ssize_t j, best_j; double aj_m1, aj_lm1; @@ -721,7 +721,7 @@ audioop_findmax_impl(PyObject *module, Py_buffer *fragment, PyErr_SetString(AudioopError, "Strings should be even-sized"); return NULL; } - cp1 = (const short *)fragment->buf; + cp1 = (const int16_t *)fragment->buf; len1 = fragment->len >> 1; if (length < 0 || len1 < length) { @@ -1122,7 +1122,7 @@ audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias) if (width == 1) val = GETINTX(unsigned char, fragment->buf, i); else if (width == 2) - val = GETINTX(unsigned short, fragment->buf, i); + val = GETINTX(uint16_t, fragment->buf, i); else if (width == 3) val = ((unsigned int)GETINT24(fragment->buf, i)) & 0xffffffu; else { @@ -1137,7 +1137,7 @@ audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias) if (width == 1) SETINTX(unsigned char, ncp, i, val); else if (width == 2) - SETINTX(unsigned short, ncp, i, val); + SETINTX(uint16_t, ncp, i, val); else if (width == 3) SETINT24(ncp, i, (int)val); else { -- cgit v1.2.1 From b7c6a1e345172f19f51922a7e6e1490e109e9aa7 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sun, 11 Sep 2016 15:37:30 +0300 Subject: Issue #28036: Remove unused pysqlite_flush_statement_cache function --- Modules/_sqlite/connection.c | 20 -------------------- 1 file changed, 20 deletions(-) (limited to 'Modules') diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 4a10ce5ad5..aca66fed08 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -202,26 +202,6 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject return 0; } -/* Empty the entire statement cache of this connection */ -void pysqlite_flush_statement_cache(pysqlite_Connection* self) -{ - pysqlite_Node* node; - pysqlite_Statement* statement; - - node = self->statement_cache->first; - - while (node) { - statement = (pysqlite_Statement*)(node->data); - (void)pysqlite_statement_finalize(statement); - node = node->next; - } - - Py_SETREF(self->statement_cache, - (pysqlite_Cache *)PyObject_CallFunction((PyObject *)&pysqlite_CacheType, "O", self)); - Py_DECREF(self); - self->statement_cache->decref_factory = 0; -} - /* action in (ACTION_RESET, ACTION_FINALIZE) */ void pysqlite_do_all_statements(pysqlite_Connection* self, int action, int reset_cursors) { -- cgit v1.2.1 From e45f1d22ce9cb300fa52ba1037a83efa5dc90b3d Mon Sep 17 00:00:00 2001 From: "Eric V. Smith" Date: Sun, 11 Sep 2016 08:55:43 -0400 Subject: Issue 24454: Improve the usability of the re match object named group API --- Modules/_sre.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index afa90999ac..e4372bedb6 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2121,6 +2121,12 @@ match_group(MatchObject* self, PyObject* args) return result; } +static PyObject* +match_getitem(MatchObject* self, PyObject* name) +{ + return match_getslice(self, name, Py_None); +} + /*[clinic input] _sre.SRE_Match.groups @@ -2416,6 +2422,9 @@ PyDoc_STRVAR(match_group_doc, Return subgroup(s) of the match by indices or names.\n\ For 0 returns the entire match."); +PyDoc_STRVAR(match_getitem_doc, +"__getitem__(name) <==> group(name).\n"); + static PyObject * match_lastindex_get(MatchObject *self) { @@ -2706,6 +2715,13 @@ static PyTypeObject Pattern_Type = { pattern_getset, /* tp_getset */ }; +/* Match objects do not support length or assignment, but do support + __getitem__. */ +static PyMappingMethods match_as_mapping = { + NULL, + (binaryfunc)match_getitem, + NULL +}; static PyMethodDef match_methods[] = { {"group", (PyCFunction) match_group, METH_VARARGS, match_group_doc}, @@ -2717,6 +2733,7 @@ static PyMethodDef match_methods[] = { _SRE_SRE_MATCH_EXPAND_METHODDEF _SRE_SRE_MATCH___COPY___METHODDEF _SRE_SRE_MATCH___DEEPCOPY___METHODDEF + {"__getitem__", (PyCFunction)match_getitem, METH_O|METH_COEXIST, match_getitem_doc}, {NULL, NULL} }; @@ -2751,7 +2768,7 @@ static PyTypeObject Match_Type = { (reprfunc)match_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ + &match_as_mapping, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ -- cgit v1.2.1 From d6b9d0686ef3554c80161789b37b4dcfa4528b23 Mon Sep 17 00:00:00 2001 From: "Eric V. Smith" Date: Sun, 11 Sep 2016 09:50:47 -0400 Subject: Issue 24454: Added whatsnew entry, removed __getitem__ from match_methods. Thanks Serhiy Storchaka. --- Modules/_sre.c | 1 - 1 file changed, 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index e4372bedb6..a25d935a20 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2733,7 +2733,6 @@ static PyMethodDef match_methods[] = { _SRE_SRE_MATCH_EXPAND_METHODDEF _SRE_SRE_MATCH___COPY___METHODDEF _SRE_SRE_MATCH___DEEPCOPY___METHODDEF - {"__getitem__", (PyCFunction)match_getitem, METH_O|METH_COEXIST, match_getitem_doc}, {NULL, NULL} }; -- cgit v1.2.1 From 6ff17c29ca92c2ce3d90e312866f969d69da2768 Mon Sep 17 00:00:00 2001 From: "Eric V. Smith" Date: Sun, 11 Sep 2016 10:20:27 -0400 Subject: Issue 24454: Removed unused match_getitem_doc. --- Modules/_sre.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index a25d935a20..69c7bc0de6 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2422,9 +2422,6 @@ PyDoc_STRVAR(match_group_doc, Return subgroup(s) of the match by indices or names.\n\ For 0 returns the entire match."); -PyDoc_STRVAR(match_getitem_doc, -"__getitem__(name) <==> group(name).\n"); - static PyObject * match_lastindex_get(MatchObject *self) { -- cgit v1.2.1 From cbe82eb2f490b35235e2bfc4a5687b69514d2bd2 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 11 Sep 2016 21:25:45 +0300 Subject: Issue #27810: Regenerate Argument Clinic. --- Modules/_io/clinic/_iomodule.c.h | 8 ++++---- Modules/_io/clinic/textio.c.h | 8 ++++---- Modules/_sha3/clinic/sha3module.c.h | 14 +++++++------- Modules/cjkcodecs/clinic/multibytecodec.c.h | 26 +++++++++++++------------- 4 files changed, 28 insertions(+), 28 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/clinic/_iomodule.c.h b/Modules/_io/clinic/_iomodule.c.h index 50891c59d1..f2e91a9fe6 100644 --- a/Modules/_io/clinic/_iomodule.c.h +++ b/Modules/_io/clinic/_iomodule.c.h @@ -127,7 +127,7 @@ PyDoc_STRVAR(_io_open__doc__, "opened in a binary mode."); #define _IO_OPEN_METHODDEF \ - {"open", (PyCFunction)_io_open, METH_VARARGS|METH_KEYWORDS, _io_open__doc__}, + {"open", (PyCFunction)_io_open, METH_FASTCALL, _io_open__doc__}, static PyObject * _io_open_impl(PyObject *module, PyObject *file, const char *mode, @@ -135,7 +135,7 @@ _io_open_impl(PyObject *module, PyObject *file, const char *mode, const char *newline, int closefd, PyObject *opener); static PyObject * -_io_open(PyObject *module, PyObject *args, PyObject *kwargs) +_io_open(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"file", "mode", "buffering", "encoding", "errors", "newline", "closefd", "opener", NULL}; @@ -149,7 +149,7 @@ _io_open(PyObject *module, PyObject *args, PyObject *kwargs) int closefd = 1; PyObject *opener = Py_None; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &file, &mode, &buffering, &encoding, &errors, &newline, &closefd, &opener)) { goto exit; } @@ -158,4 +158,4 @@ _io_open(PyObject *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=14769629391a3130 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c5b8fc8b83102bbf input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/textio.c.h b/Modules/_io/clinic/textio.c.h index 6c40819c5c..f39c35581e 100644 --- a/Modules/_io/clinic/textio.c.h +++ b/Modules/_io/clinic/textio.c.h @@ -46,14 +46,14 @@ PyDoc_STRVAR(_io_IncrementalNewlineDecoder_decode__doc__, "\n"); #define _IO_INCREMENTALNEWLINEDECODER_DECODE_METHODDEF \ - {"decode", (PyCFunction)_io_IncrementalNewlineDecoder_decode, METH_VARARGS|METH_KEYWORDS, _io_IncrementalNewlineDecoder_decode__doc__}, + {"decode", (PyCFunction)_io_IncrementalNewlineDecoder_decode, METH_FASTCALL, _io_IncrementalNewlineDecoder_decode__doc__}, static PyObject * _io_IncrementalNewlineDecoder_decode_impl(nldecoder_object *self, PyObject *input, int final); static PyObject * -_io_IncrementalNewlineDecoder_decode(nldecoder_object *self, PyObject *args, PyObject *kwargs) +_io_IncrementalNewlineDecoder_decode(nldecoder_object *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"input", "final", NULL}; @@ -61,7 +61,7 @@ _io_IncrementalNewlineDecoder_decode(nldecoder_object *self, PyObject *args, PyO PyObject *input; int final = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &input, &final)) { goto exit; } @@ -464,4 +464,4 @@ _io_TextIOWrapper_close(textio *self, PyObject *Py_UNUSED(ignored)) { return _io_TextIOWrapper_close_impl(self); } -/*[clinic end generated code: output=7ec624a9bf6393f5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=78ad14eba1667254 input=a9049054013a1b77]*/ diff --git a/Modules/_sha3/clinic/sha3module.c.h b/Modules/_sha3/clinic/sha3module.c.h index 704dc00f56..7688e7de29 100644 --- a/Modules/_sha3/clinic/sha3module.c.h +++ b/Modules/_sha3/clinic/sha3module.c.h @@ -99,20 +99,20 @@ PyDoc_STRVAR(_sha3_shake_128_digest__doc__, "Return the digest value as a string of binary data."); #define _SHA3_SHAKE_128_DIGEST_METHODDEF \ - {"digest", (PyCFunction)_sha3_shake_128_digest, METH_VARARGS|METH_KEYWORDS, _sha3_shake_128_digest__doc__}, + {"digest", (PyCFunction)_sha3_shake_128_digest, METH_FASTCALL, _sha3_shake_128_digest__doc__}, static PyObject * _sha3_shake_128_digest_impl(SHA3object *self, unsigned long length); static PyObject * -_sha3_shake_128_digest(SHA3object *self, PyObject *args, PyObject *kwargs) +_sha3_shake_128_digest(SHA3object *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"length", NULL}; static _PyArg_Parser _parser = {"k:digest", _keywords, 0}; unsigned long length; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &length)) { goto exit; } @@ -129,20 +129,20 @@ PyDoc_STRVAR(_sha3_shake_128_hexdigest__doc__, "Return the digest value as a string of hexadecimal digits."); #define _SHA3_SHAKE_128_HEXDIGEST_METHODDEF \ - {"hexdigest", (PyCFunction)_sha3_shake_128_hexdigest, METH_VARARGS|METH_KEYWORDS, _sha3_shake_128_hexdigest__doc__}, + {"hexdigest", (PyCFunction)_sha3_shake_128_hexdigest, METH_FASTCALL, _sha3_shake_128_hexdigest__doc__}, static PyObject * _sha3_shake_128_hexdigest_impl(SHA3object *self, unsigned long length); static PyObject * -_sha3_shake_128_hexdigest(SHA3object *self, PyObject *args, PyObject *kwargs) +_sha3_shake_128_hexdigest(SHA3object *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"length", NULL}; static _PyArg_Parser _parser = {"k:hexdigest", _keywords, 0}; unsigned long length; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &length)) { goto exit; } @@ -151,4 +151,4 @@ _sha3_shake_128_hexdigest(SHA3object *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=50cff05f2c74d41e input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9888beab45136a56 input=a9049054013a1b77]*/ diff --git a/Modules/cjkcodecs/clinic/multibytecodec.c.h b/Modules/cjkcodecs/clinic/multibytecodec.c.h index c9c58cd8ed..84ffd12c63 100644 --- a/Modules/cjkcodecs/clinic/multibytecodec.c.h +++ b/Modules/cjkcodecs/clinic/multibytecodec.c.h @@ -14,7 +14,7 @@ PyDoc_STRVAR(_multibytecodec_MultibyteCodec_encode__doc__, "registered with codecs.register_error that can handle UnicodeEncodeErrors."); #define _MULTIBYTECODEC_MULTIBYTECODEC_ENCODE_METHODDEF \ - {"encode", (PyCFunction)_multibytecodec_MultibyteCodec_encode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteCodec_encode__doc__}, + {"encode", (PyCFunction)_multibytecodec_MultibyteCodec_encode, METH_FASTCALL, _multibytecodec_MultibyteCodec_encode__doc__}, static PyObject * _multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, @@ -22,7 +22,7 @@ _multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, const char *errors); static PyObject * -_multibytecodec_MultibyteCodec_encode(MultibyteCodecObject *self, PyObject *args, PyObject *kwargs) +_multibytecodec_MultibyteCodec_encode(MultibyteCodecObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"input", "errors", NULL}; @@ -30,7 +30,7 @@ _multibytecodec_MultibyteCodec_encode(MultibyteCodecObject *self, PyObject *args PyObject *input; const char *errors = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &input, &errors)) { goto exit; } @@ -52,7 +52,7 @@ PyDoc_STRVAR(_multibytecodec_MultibyteCodec_decode__doc__, "codecs.register_error that is able to handle UnicodeDecodeErrors.\""); #define _MULTIBYTECODEC_MULTIBYTECODEC_DECODE_METHODDEF \ - {"decode", (PyCFunction)_multibytecodec_MultibyteCodec_decode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteCodec_decode__doc__}, + {"decode", (PyCFunction)_multibytecodec_MultibyteCodec_decode, METH_FASTCALL, _multibytecodec_MultibyteCodec_decode__doc__}, static PyObject * _multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self, @@ -60,7 +60,7 @@ _multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self, const char *errors); static PyObject * -_multibytecodec_MultibyteCodec_decode(MultibyteCodecObject *self, PyObject *args, PyObject *kwargs) +_multibytecodec_MultibyteCodec_decode(MultibyteCodecObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"input", "errors", NULL}; @@ -68,7 +68,7 @@ _multibytecodec_MultibyteCodec_decode(MultibyteCodecObject *self, PyObject *args Py_buffer input = {NULL, NULL}; const char *errors = NULL; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &input, &errors)) { goto exit; } @@ -89,7 +89,7 @@ PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalEncoder_encode__doc__, "\n"); #define _MULTIBYTECODEC_MULTIBYTEINCREMENTALENCODER_ENCODE_METHODDEF \ - {"encode", (PyCFunction)_multibytecodec_MultibyteIncrementalEncoder_encode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteIncrementalEncoder_encode__doc__}, + {"encode", (PyCFunction)_multibytecodec_MultibyteIncrementalEncoder_encode, METH_FASTCALL, _multibytecodec_MultibyteIncrementalEncoder_encode__doc__}, static PyObject * _multibytecodec_MultibyteIncrementalEncoder_encode_impl(MultibyteIncrementalEncoderObject *self, @@ -97,7 +97,7 @@ _multibytecodec_MultibyteIncrementalEncoder_encode_impl(MultibyteIncrementalEnco int final); static PyObject * -_multibytecodec_MultibyteIncrementalEncoder_encode(MultibyteIncrementalEncoderObject *self, PyObject *args, PyObject *kwargs) +_multibytecodec_MultibyteIncrementalEncoder_encode(MultibyteIncrementalEncoderObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"input", "final", NULL}; @@ -105,7 +105,7 @@ _multibytecodec_MultibyteIncrementalEncoder_encode(MultibyteIncrementalEncoderOb PyObject *input; int final = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &input, &final)) { goto exit; } @@ -138,7 +138,7 @@ PyDoc_STRVAR(_multibytecodec_MultibyteIncrementalDecoder_decode__doc__, "\n"); #define _MULTIBYTECODEC_MULTIBYTEINCREMENTALDECODER_DECODE_METHODDEF \ - {"decode", (PyCFunction)_multibytecodec_MultibyteIncrementalDecoder_decode, METH_VARARGS|METH_KEYWORDS, _multibytecodec_MultibyteIncrementalDecoder_decode__doc__}, + {"decode", (PyCFunction)_multibytecodec_MultibyteIncrementalDecoder_decode, METH_FASTCALL, _multibytecodec_MultibyteIncrementalDecoder_decode__doc__}, static PyObject * _multibytecodec_MultibyteIncrementalDecoder_decode_impl(MultibyteIncrementalDecoderObject *self, @@ -146,7 +146,7 @@ _multibytecodec_MultibyteIncrementalDecoder_decode_impl(MultibyteIncrementalDeco int final); static PyObject * -_multibytecodec_MultibyteIncrementalDecoder_decode(MultibyteIncrementalDecoderObject *self, PyObject *args, PyObject *kwargs) +_multibytecodec_MultibyteIncrementalDecoder_decode(MultibyteIncrementalDecoderObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; static const char * const _keywords[] = {"input", "final", NULL}; @@ -154,7 +154,7 @@ _multibytecodec_MultibyteIncrementalDecoder_decode(MultibyteIncrementalDecoderOb Py_buffer input = {NULL, NULL}; int final = 0; - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, &input, &final)) { goto exit; } @@ -330,4 +330,4 @@ PyDoc_STRVAR(_multibytecodec___create_codec__doc__, #define _MULTIBYTECODEC___CREATE_CODEC_METHODDEF \ {"__create_codec", (PyCFunction)_multibytecodec___create_codec, METH_O, _multibytecodec___create_codec__doc__}, -/*[clinic end generated code: output=8e86fa162c85230b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=134b9e36cb985939 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 99829a612c71c4fed8ac55e921f27a19a74bc634 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 12 Sep 2016 00:01:11 +0200 Subject: Issue #28085: Add PROTOCOL_TLS_CLIENT and PROTOCOL_TLS_SERVER for SSLContext --- Modules/_ssl.c | 80 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 21 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 4d8e7e7a39..736fc1d810 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -140,6 +140,8 @@ struct py_ssl_library_code { #endif #define TLS_method SSLv23_method +#define TLS_client_method SSLv23_client_method +#define TLS_server_method SSLv23_server_method static int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne) { @@ -233,14 +235,16 @@ enum py_ssl_cert_requirements { enum py_ssl_version { PY_SSL_VERSION_SSL2, PY_SSL_VERSION_SSL3=1, - PY_SSL_VERSION_TLS, + PY_SSL_VERSION_TLS, /* SSLv23 */ #if HAVE_TLSv1_2 PY_SSL_VERSION_TLS1, PY_SSL_VERSION_TLS1_1, - PY_SSL_VERSION_TLS1_2 + PY_SSL_VERSION_TLS1_2, #else - PY_SSL_VERSION_TLS1 + PY_SSL_VERSION_TLS1, #endif + PY_SSL_VERSION_TLS_CLIENT=0x10, + PY_SSL_VERSION_TLS_SERVER, }; #ifdef WITH_THREAD @@ -2566,6 +2570,33 @@ static PyTypeObject PySSLSocket_Type = { * _SSLContext objects */ +static int +_set_verify_mode(SSL_CTX *ctx, enum py_ssl_cert_requirements n) +{ + int mode; + int (*verify_cb)(int, X509_STORE_CTX *) = NULL; + + switch(n) { + case PY_SSL_CERT_NONE: + mode = SSL_VERIFY_NONE; + break; + case PY_SSL_CERT_OPTIONAL: + mode = SSL_VERIFY_PEER; + break; + case PY_SSL_CERT_REQUIRED: + mode = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT; + break; + default: + PyErr_SetString(PyExc_ValueError, + "invalid value for verify_mode"); + return -1; + } + /* keep current verify cb */ + verify_cb = SSL_CTX_get_verify_callback(ctx); + SSL_CTX_set_verify(ctx, mode, verify_cb); + return 0; +} + /*[clinic input] @classmethod _ssl._SSLContext.__new__ @@ -2602,8 +2633,12 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); #endif - else if (proto_version == PY_SSL_VERSION_TLS) + else if (proto_version == PY_SSL_VERSION_TLS) /* SSLv23 */ ctx = SSL_CTX_new(TLS_method()); + else if (proto_version == PY_SSL_VERSION_TLS_CLIENT) + ctx = SSL_CTX_new(TLS_client_method()); + else if (proto_version == PY_SSL_VERSION_TLS_SERVER) + ctx = SSL_CTX_new(TLS_server_method()); else proto_version = -1; PySSL_END_ALLOW_THREADS @@ -2636,9 +2671,20 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) self->set_hostname = NULL; #endif /* Don't check host name by default */ - self->check_hostname = 0; + if (proto_version == PY_SSL_VERSION_TLS_CLIENT) { + self->check_hostname = 1; + if (_set_verify_mode(self->ctx, PY_SSL_CERT_REQUIRED) == -1) { + Py_DECREF(self); + return NULL; + } + } else { + self->check_hostname = 0; + if (_set_verify_mode(self->ctx, PY_SSL_CERT_NONE) == -1) { + Py_DECREF(self); + return NULL; + } + } /* Defaults */ - SSL_CTX_set_verify(self->ctx, SSL_VERIFY_NONE, NULL); options = SSL_OP_ALL & ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; if (proto_version != PY_SSL_VERSION_SSL2) options |= SSL_OP_NO_SSLv2; @@ -2982,28 +3028,16 @@ get_verify_mode(PySSLContext *self, void *c) static int set_verify_mode(PySSLContext *self, PyObject *arg, void *c) { - int n, mode; + int n; if (!PyArg_Parse(arg, "i", &n)) return -1; - if (n == PY_SSL_CERT_NONE) - mode = SSL_VERIFY_NONE; - else if (n == PY_SSL_CERT_OPTIONAL) - mode = SSL_VERIFY_PEER; - else if (n == PY_SSL_CERT_REQUIRED) - mode = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT; - else { - PyErr_SetString(PyExc_ValueError, - "invalid value for verify_mode"); - return -1; - } - if (mode == SSL_VERIFY_NONE && self->check_hostname) { + if (n == PY_SSL_CERT_NONE && self->check_hostname) { PyErr_SetString(PyExc_ValueError, "Cannot set verify_mode to CERT_NONE when " "check_hostname is enabled."); return -1; } - SSL_CTX_set_verify(self->ctx, mode, NULL); - return 0; + return _set_verify_mode(self->ctx, n); } static PyObject * @@ -5313,6 +5347,10 @@ PyInit__ssl(void) PY_SSL_VERSION_TLS); PyModule_AddIntConstant(m, "PROTOCOL_TLS", PY_SSL_VERSION_TLS); + PyModule_AddIntConstant(m, "PROTOCOL_TLS_CLIENT", + PY_SSL_VERSION_TLS_CLIENT); + PyModule_AddIntConstant(m, "PROTOCOL_TLS_SERVER", + PY_SSL_VERSION_TLS_SERVER); PyModule_AddIntConstant(m, "PROTOCOL_TLSv1", PY_SSL_VERSION_TLS1); #if HAVE_TLSv1_2 -- cgit v1.2.1 From a958773a5c4536bce07440d936c1e41b0ce9471c Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sun, 11 Sep 2016 22:55:16 -0400 Subject: Closes #25283: Make tm_gmtoff and tm_zone available on all platforms. --- Modules/timemodule.c | 114 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 81 insertions(+), 33 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 94746444cf..ea7d906480 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -250,10 +250,8 @@ static PyStructSequence_Field struct_time_type_fields[] = { {"tm_wday", "day of week, range [0, 6], Monday is 0"}, {"tm_yday", "day of year, range [1, 366]"}, {"tm_isdst", "1 if summer time is in effect, 0 if not, and -1 if unknown"}, -#ifdef HAVE_STRUCT_TM_TM_ZONE {"tm_zone", "abbreviation of timezone name"}, {"tm_gmtoff", "offset from UTC in seconds"}, -#endif /* HAVE_STRUCT_TM_TM_ZONE */ {0} }; @@ -275,7 +273,11 @@ static PyTypeObject StructTimeType; static PyObject * -tmtotuple(struct tm *p) +tmtotuple(struct tm *p +#ifndef HAVE_STRUCT_TM_TM_ZONE + , const char *zone, int gmtoff +#endif +) { PyObject *v = PyStructSequence_New(&StructTimeType); if (v == NULL) @@ -296,6 +298,10 @@ tmtotuple(struct tm *p) PyStructSequence_SET_ITEM(v, 9, PyUnicode_DecodeLocale(p->tm_zone, "surrogateescape")); SET(10, p->tm_gmtoff); +#else + PyStructSequence_SET_ITEM(v, 9, + PyUnicode_DecodeLocale(zone, "surrogateescape")); + SET(10, gmtoff); #endif /* HAVE_STRUCT_TM_TM_ZONE */ #undef SET if (PyErr_Occurred()) { @@ -348,9 +354,26 @@ time_gmtime(PyObject *self, PyObject *args) return PyErr_SetFromErrno(PyExc_OSError); } buf = *local; +#ifdef HAVE_STRUCT_TM_TM_ZONE return tmtotuple(&buf); +#else + return tmtotuple(&buf, "UTC", 0); +#endif } +#ifndef HAVE_TIMEGM +static time_t +timegm(struct tm *p) +{ + /* XXX: the following implementation will not work for tm_year < 1970. + but it is likely that platforms that don't have timegm do not support + negative timestamps anyways. */ + return p->tm_sec + p->tm_min*60 + p->tm_hour*3600 + p->tm_yday*86400 + + (p->tm_year-70)*31536000 + ((p->tm_year-69)/4)*86400 - + ((p->tm_year-1)/100)*86400 + ((p->tm_year+299)/400)*86400; +} +#endif + PyDoc_STRVAR(gmtime_doc, "gmtime([seconds]) -> (tm_year, tm_mon, tm_mday, tm_hour, tm_min,\n\ tm_sec, tm_wday, tm_yday, tm_isdst)\n\ @@ -391,7 +414,18 @@ time_localtime(PyObject *self, PyObject *args) return NULL; if (pylocaltime(&when, &buf) == -1) return NULL; +#ifdef HAVE_STRUCT_TM_TM_ZONE return tmtotuple(&buf); +#else + { + struct tm local = buf; + char zone[100]; + int gmtoff; + strftime(zone, sizeof(buf), "%Z", &buf); + gmtoff = timegm(&buf) - when; + return tmtotuple(&local, zone, gmtoff); + } +#endif } PyDoc_STRVAR(localtime_doc, @@ -1145,6 +1179,27 @@ PyDoc_STRVAR(get_clock_info_doc, \n\ Get information of the specified clock."); +static void +get_zone(char *zone, int n, struct tm *p) +{ +#ifdef HAVE_STRUCT_TM_TM_ZONE + strncpy(zone, p->tm_zone ? p->tm_zone : " ", n); +#else + tzset(); + strftime(zone, n, "%Z", p); +#endif +} + +static int +get_gmtoff(time_t t, struct tm *p) +{ +#ifdef HAVE_STRUCT_TM_TM_ZONE + return p->tm_gmtoff; +#else + return timegm(p) - t; +#endif +} + static void PyInit_timezone(PyObject *m) { /* This code moved from PyInit_time wholesale to allow calling it from @@ -1177,7 +1232,6 @@ PyInit_timezone(PyObject *m) { otz1 = PyUnicode_DecodeLocale(tzname[1], "surrogateescape"); PyModule_AddObject(m, "tzname", Py_BuildValue("(NN)", otz0, otz1)); #else /* !HAVE_TZNAME || __GLIBC__ || __CYGWIN__*/ -#ifdef HAVE_STRUCT_TM_TM_ZONE { #define YEAR ((time_t)((365 * 24 + 6) * 3600)) time_t t; @@ -1186,13 +1240,13 @@ PyInit_timezone(PyObject *m) { char janname[10], julyname[10]; t = (time((time_t *)0) / YEAR) * YEAR; p = localtime(&t); - janzone = -p->tm_gmtoff; - strncpy(janname, p->tm_zone ? p->tm_zone : " ", 9); + get_zone(janname, 9, p); + janzone = -get_gmtoff(t, p); janname[9] = '\0'; t += YEAR/2; p = localtime(&t); - julyzone = -p->tm_gmtoff; - strncpy(julyname, p->tm_zone ? p->tm_zone : " ", 9); + get_zone(julyname, 9, p); + julyzone = -get_gmtoff(t, p); julyname[9] = '\0'; if( janzone < julyzone ) { @@ -1214,8 +1268,6 @@ PyInit_timezone(PyObject *m) { janname, julyname)); } } -#else -#endif /* HAVE_STRUCT_TM_TM_ZONE */ #ifdef __CYGWIN__ tzset(); PyModule_AddIntConstant(m, "timezone", _timezone); @@ -1225,25 +1277,6 @@ PyInit_timezone(PyObject *m) { Py_BuildValue("(zz)", _tzname[0], _tzname[1])); #endif /* __CYGWIN__ */ #endif /* !HAVE_TZNAME || __GLIBC__ || __CYGWIN__*/ - -#if defined(HAVE_CLOCK_GETTIME) - PyModule_AddIntMacro(m, CLOCK_REALTIME); -#ifdef CLOCK_MONOTONIC - PyModule_AddIntMacro(m, CLOCK_MONOTONIC); -#endif -#ifdef CLOCK_MONOTONIC_RAW - PyModule_AddIntMacro(m, CLOCK_MONOTONIC_RAW); -#endif -#ifdef CLOCK_HIGHRES - PyModule_AddIntMacro(m, CLOCK_HIGHRES); -#endif -#ifdef CLOCK_PROCESS_CPUTIME_ID - PyModule_AddIntMacro(m, CLOCK_PROCESS_CPUTIME_ID); -#endif -#ifdef CLOCK_THREAD_CPUTIME_ID - PyModule_AddIntMacro(m, CLOCK_THREAD_CPUTIME_ID); -#endif -#endif /* HAVE_CLOCK_GETTIME */ } @@ -1350,17 +1383,32 @@ PyInit_time(void) /* Set, or reset, module variables like time.timezone */ PyInit_timezone(m); +#if defined(HAVE_CLOCK_GETTIME) + PyModule_AddIntMacro(m, CLOCK_REALTIME); +#ifdef CLOCK_MONOTONIC + PyModule_AddIntMacro(m, CLOCK_MONOTONIC); +#endif +#ifdef CLOCK_MONOTONIC_RAW + PyModule_AddIntMacro(m, CLOCK_MONOTONIC_RAW); +#endif +#ifdef CLOCK_HIGHRES + PyModule_AddIntMacro(m, CLOCK_HIGHRES); +#endif +#ifdef CLOCK_PROCESS_CPUTIME_ID + PyModule_AddIntMacro(m, CLOCK_PROCESS_CPUTIME_ID); +#endif +#ifdef CLOCK_THREAD_CPUTIME_ID + PyModule_AddIntMacro(m, CLOCK_THREAD_CPUTIME_ID); +#endif +#endif /* HAVE_CLOCK_GETTIME */ + if (!initialized) { if (PyStructSequence_InitType2(&StructTimeType, &struct_time_type_desc) < 0) return NULL; } Py_INCREF(&StructTimeType); -#ifdef HAVE_STRUCT_TM_TM_ZONE PyModule_AddIntConstant(m, "_STRUCT_TM_ITEMS", 11); -#else - PyModule_AddIntConstant(m, "_STRUCT_TM_ITEMS", 9); -#endif PyModule_AddObject(m, "struct_time", (PyObject*) &StructTimeType); initialized = 1; return m; -- cgit v1.2.1 From cb4ad5cff9012b50a5b727b9e95f57c1199db640 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sun, 11 Sep 2016 20:19:32 -0700 Subject: Adds missing assert suppression. --- Modules/posixmodule.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index ce646846df..43e3c77cbb 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -5030,11 +5030,13 @@ os_spawnv_impl(PyObject *module, int mode, path_t *path, PyObject *argv) mode = _P_OVERLAY; Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH #ifdef HAVE_WSPAWNV spawnval = _wspawnv(mode, path->wide, argvlist); #else spawnval = _spawnv(mode, path->narrow, argvlist); #endif + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS free_string_array(argvlist, argc); @@ -5122,11 +5124,13 @@ os_spawnve_impl(PyObject *module, int mode, path_t *path, PyObject *argv, mode = _P_OVERLAY; Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH #ifdef HAVE_WSPAWNV spawnval = _wspawnve(mode, path->wide, argvlist, envlist); #else spawnval = _spawnve(mode, path->narrow, argvlist, envlist); #endif + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (spawnval == -1) -- cgit v1.2.1 From 1755aae76a4eed379286a660de1be8edb99b44ae Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Mon, 12 Sep 2016 07:16:43 +0300 Subject: Issue #28037: Use sqlite3_get_autocommit() instead of setting Connection->inTransaction manually Patch adapted from https://github.com/ghaering/pysqlite/commit/9b79188edbc50faa24dc178afe24a10454f3fcad --- Modules/_sqlite/connection.c | 31 +++++++++++++++++-------------- Modules/_sqlite/connection.h | 4 ---- Modules/_sqlite/cursor.c | 9 --------- 3 files changed, 17 insertions(+), 27 deletions(-) (limited to 'Modules') diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index aca66fed08..d29fafe3fa 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -165,7 +165,6 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject self->statement_cache->decref_factory = 0; Py_DECREF(self); - self->inTransaction = 0; self->detect_types = detect_types; self->timeout = timeout; (void)sqlite3_busy_timeout(self->db, (int)(timeout*1000)); @@ -385,9 +384,7 @@ PyObject* _pysqlite_connection_begin(pysqlite_Connection* self) } rc = pysqlite_step(statement, self); - if (rc == SQLITE_DONE) { - self->inTransaction = 1; - } else { + if (rc != SQLITE_DONE) { _pysqlite_seterror(self->db, statement); } @@ -418,7 +415,7 @@ PyObject* pysqlite_connection_commit(pysqlite_Connection* self, PyObject* args) return NULL; } - if (self->inTransaction) { + if (!sqlite3_get_autocommit(self->db)) { Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->db, "COMMIT", -1, &statement, &tail); @@ -429,9 +426,7 @@ PyObject* pysqlite_connection_commit(pysqlite_Connection* self, PyObject* args) } rc = pysqlite_step(statement, self); - if (rc == SQLITE_DONE) { - self->inTransaction = 0; - } else { + if (rc != SQLITE_DONE) { _pysqlite_seterror(self->db, statement); } @@ -463,7 +458,7 @@ PyObject* pysqlite_connection_rollback(pysqlite_Connection* self, PyObject* args return NULL; } - if (self->inTransaction) { + if (!sqlite3_get_autocommit(self->db)) { pysqlite_do_all_statements(self, ACTION_RESET, 1); Py_BEGIN_ALLOW_THREADS @@ -475,9 +470,7 @@ PyObject* pysqlite_connection_rollback(pysqlite_Connection* self, PyObject* args } rc = pysqlite_step(statement, self); - if (rc == SQLITE_DONE) { - self->inTransaction = 0; - } else { + if (rc != SQLITE_DONE) { _pysqlite_seterror(self->db, statement); } @@ -1158,6 +1151,17 @@ static PyObject* pysqlite_connection_get_total_changes(pysqlite_Connection* self } } +static PyObject* pysqlite_connection_get_in_transaction(pysqlite_Connection* self, void* unused) +{ + if (!pysqlite_check_connection(self)) { + return NULL; + } + if (!sqlite3_get_autocommit(self->db)) { + Py_RETURN_TRUE; + } + Py_RETURN_FALSE; +} + static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level) { if (isolation_level == Py_None) { @@ -1168,7 +1172,6 @@ static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, Py Py_DECREF(res); self->begin_statement = NULL; - self->inTransaction = 0; } else { const char * const *candidate; PyObject *uppercase_level; @@ -1606,6 +1609,7 @@ PyDoc_STR("SQLite database connection object."); static PyGetSetDef connection_getset[] = { {"isolation_level", (getter)pysqlite_connection_get_isolation_level, (setter)pysqlite_connection_set_isolation_level}, {"total_changes", (getter)pysqlite_connection_get_total_changes, (setter)0}, + {"in_transaction", (getter)pysqlite_connection_get_in_transaction, (setter)0}, {NULL} }; @@ -1667,7 +1671,6 @@ static struct PyMemberDef connection_members[] = {"NotSupportedError", T_OBJECT, offsetof(pysqlite_Connection, NotSupportedError), READONLY}, {"row_factory", T_OBJECT, offsetof(pysqlite_Connection, row_factory)}, {"text_factory", T_OBJECT, offsetof(pysqlite_Connection, text_factory)}, - {"in_transaction", T_BOOL, offsetof(pysqlite_Connection, inTransaction), READONLY}, {NULL} }; diff --git a/Modules/_sqlite/connection.h b/Modules/_sqlite/connection.h index adbfb54523..2860a0c6f9 100644 --- a/Modules/_sqlite/connection.h +++ b/Modules/_sqlite/connection.h @@ -37,10 +37,6 @@ typedef struct PyObject_HEAD sqlite3* db; - /* 1 if we are currently within a transaction, i. e. if a BEGIN has been - * issued */ - char inTransaction; - /* the type detection mode. Only 0, PARSE_DECLTYPES, PARSE_COLNAMES or a * bitwise combination thereof makes sense */ int detect_types; diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 020f93107e..c7169f6d6e 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -644,15 +644,6 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* } error: - /* just to be sure (implicit ROLLBACKs with ON CONFLICT ROLLBACK/OR - * ROLLBACK could have happened */ - #ifdef SQLITE_VERSION_NUMBER - #if SQLITE_VERSION_NUMBER >= 3002002 - if (self->connection && self->connection->db) - self->connection->inTransaction = !sqlite3_get_autocommit(self->connection->db); - #endif - #endif - Py_XDECREF(parameters); Py_XDECREF(parameters_iter); Py_XDECREF(parameters_list); -- cgit v1.2.1 From 0224fbd4dfd393e44cbde8d4dfc835fc78d6eb93 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 11 Sep 2016 22:45:53 -0700 Subject: Revert part of 3471a3515827 that caused a performance regression --- Modules/_collectionsmodule.c | 52 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 1675102681..9ed6f14bec 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -403,10 +403,28 @@ deque_extend(dequeobject *deque, PyObject *iterable) iternext = *Py_TYPE(it)->tp_iternext; while ((item = iternext(it)) != NULL) { - if (deque_append_internal(deque, item, maxlen) < 0) { - Py_DECREF(item); - Py_DECREF(it); - return NULL; + if (deque->rightindex == BLOCKLEN - 1) { + block *b = newblock(); + if (b == NULL) { + Py_DECREF(item); + Py_DECREF(it); + return NULL; + } + b->leftlink = deque->rightblock; + CHECK_END(deque->rightblock->rightlink); + deque->rightblock->rightlink = b; + deque->rightblock = b; + MARK_END(b->rightlink); + deque->rightindex = -1; + } + Py_SIZE(deque)++; + deque->rightindex++; + deque->rightblock->data[deque->rightindex] = item; + if (NEEDS_TRIM(deque, maxlen)) { + PyObject *olditem = deque_popleft(deque, NULL); + Py_DECREF(olditem); + } else { + deque->state++; } } return finalize_iterator(it); @@ -450,10 +468,28 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) iternext = *Py_TYPE(it)->tp_iternext; while ((item = iternext(it)) != NULL) { - if (deque_appendleft_internal(deque, item, maxlen) < 0) { - Py_DECREF(item); - Py_DECREF(it); - return NULL; + if (deque->leftindex == 0) { + block *b = newblock(); + if (b == NULL) { + Py_DECREF(item); + Py_DECREF(it); + return NULL; + } + b->rightlink = deque->leftblock; + CHECK_END(deque->leftblock->leftlink); + deque->leftblock->leftlink = b; + deque->leftblock = b; + MARK_END(b->leftlink); + deque->leftindex = BLOCKLEN; + } + Py_SIZE(deque)++; + deque->leftindex--; + deque->leftblock->data[deque->leftindex] = item; + if (NEEDS_TRIM(deque, maxlen)) { + PyObject *olditem = deque_pop(deque, NULL); + Py_DECREF(olditem); + } else { + deque->state++; } } return finalize_iterator(it); -- cgit v1.2.1 From 8c8f9f16a30f9b0953998dec38aa00abdbc3ec2d Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 12 Sep 2016 11:45:59 +0200 Subject: Cleanup socketmodule.c Issue #27744: * PEP 7: add {...} around if blocks * assign variables and then check their value in if() to make the code easier to read and to debug. --- Modules/socketmodule.c | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index dd8bfb0296..0490d71b41 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -3920,21 +3920,33 @@ sock_sendmsg_iovec(PySocketSockObject *s, PyObject *data_arg, /* Fill in an iovec for each message part, and save the Py_buffer structs to release afterwards. */ - if ((data_fast = PySequence_Fast(data_arg, - "sendmsg() argument 1 must be an " - "iterable")) == NULL) + data_fast = PySequence_Fast(data_arg, + "sendmsg() argument 1 must be an " + "iterable"); + if (data_fast == NULL) { goto finally; + } + ndataparts = PySequence_Fast_GET_SIZE(data_fast); if (ndataparts > INT_MAX) { PyErr_SetString(PyExc_OSError, "sendmsg() argument 1 is too long"); goto finally; } + msg->msg_iovlen = ndataparts; - if (ndataparts > 0 && - ((msg->msg_iov = iovs = PyMem_New(struct iovec, ndataparts)) == NULL || - (databufs = PyMem_New(Py_buffer, ndataparts)) == NULL)) { - PyErr_NoMemory(); - goto finally; + if (ndataparts > 0) { + iovs = PyMem_New(struct iovec, ndataparts); + if (iovs == NULL) { + PyErr_NoMemory(); + goto finally; + } + msg->msg_iov = iovs; + + databufs = PyMem_New(Py_buffer, ndataparts); + if (iovs == NULL) { + PyErr_NoMemory(); + goto finally; + } } for (; ndatabufs < ndataparts; ndatabufs++) { if (!PyArg_Parse(PySequence_Fast_GET_ITEM(data_fast, ndatabufs), @@ -3970,7 +3982,7 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) Py_ssize_t i, ndatabufs = 0, ncmsgs, ncmsgbufs = 0; Py_buffer *databufs = NULL; sock_addr_t addrbuf; - struct msghdr msg = {0}; + struct msghdr msg; struct cmsginfo { int level; int type; @@ -3984,8 +3996,11 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) struct sock_sendmsg ctx; if (!PyArg_ParseTuple(args, "O|OiO:sendmsg", - &data_arg, &cmsg_arg, &flags, &addr_arg)) + &data_arg, &cmsg_arg, &flags, &addr_arg)) { return NULL; + } + + memset(&msg, 0, sizeof(msg)); /* Parse destination address. */ if (addr_arg != NULL && addr_arg != Py_None) { @@ -4189,8 +4204,11 @@ sock_sendmsg_afalg(PySocketSockObject *self, PyObject *args, PyObject *kwds) "|O$O!y*O!i:sendmsg_afalg", keywords, &data_arg, &PyLong_Type, &opobj, &iv, - &PyLong_Type, &assoclenobj, &flags)) + &PyLong_Type, &assoclenobj, &flags)) { return NULL; + } + + memset(&msg, 0, sizeof(msg)); /* op is a required, keyword-only argument >= 0 */ if (opobj != NULL) { @@ -4229,7 +4247,6 @@ sock_sendmsg_afalg(PySocketSockObject *self, PyObject *args, PyObject *kwds) } memset(controlbuf, 0, controllen); - memset(&msg, 0, sizeof(msg)); msg.msg_controllen = controllen; msg.msg_control = controlbuf; @@ -4287,8 +4304,9 @@ sock_sendmsg_afalg(PySocketSockObject *self, PyObject *args, PyObject *kwds) ctx.msg = &msg; ctx.flags = flags; - if (sock_call(self, 1, sock_sendmsg_impl, &ctx) < 0) + if (sock_call(self, 1, sock_sendmsg_impl, &ctx) < 0) { goto finally; + } retval = PyLong_FromSsize_t(ctx.result); -- cgit v1.2.1 From acc4f29a688b1a80d01e07f7fdaecece45f1bf71 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 12 Sep 2016 11:41:58 +0200 Subject: socket: Fix memory leak in sendmsg() and sendmsg_afalg() Issue #27744: * Release msg.msg_iov memory block. * Release memory on PyMem_Malloc(controllen) failure --- Modules/socketmodule.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 0490d71b41..eee607fd13 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -4072,11 +4072,13 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args) if (ncmsgbufs > 0) { struct cmsghdr *cmsgh = NULL; - if ((msg.msg_control = controlbuf = - PyMem_Malloc(controllen)) == NULL) { + controlbuf = PyMem_Malloc(controllen); + if (controlbuf == NULL) { PyErr_NoMemory(); goto finally; } + msg.msg_control = controlbuf; + msg.msg_controllen = controllen; /* Need to zero out the buffer as a workaround for glibc's @@ -4141,8 +4143,10 @@ finally: PyBuffer_Release(&cmsgs[i].data); PyMem_Free(cmsgs); Py_XDECREF(cmsg_fast); - for (i = 0; i < ndatabufs; i++) + PyMem_Free(msg.msg_iov); + for (i = 0; i < ndatabufs; i++) { PyBuffer_Release(&databufs[i]); + } PyMem_Free(databufs); return retval; } @@ -4243,7 +4247,8 @@ sock_sendmsg_afalg(PySocketSockObject *self, PyObject *args, PyObject *kwds) controlbuf = PyMem_Malloc(controllen); if (controlbuf == NULL) { - return PyErr_NoMemory(); + PyErr_NoMemory(); + goto finally; } memset(controlbuf, 0, controllen); @@ -4315,8 +4320,10 @@ sock_sendmsg_afalg(PySocketSockObject *self, PyObject *args, PyObject *kwds) if (iv.buf != NULL) { PyBuffer_Release(&iv); } - for (i = 0; i < ndatabufs; i++) + PyMem_Free(msg.msg_iov); + for (i = 0; i < ndatabufs; i++) { PyBuffer_Release(&databufs[i]); + } PyMem_Free(databufs); return retval; } -- cgit v1.2.1 From 77a7af6e74595e3b80742b8bca3ff0b2d56737df Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 12 Sep 2016 12:00:23 +0200 Subject: Issue #27866: Fix refleak in cipher_to_dict() --- Modules/_ssl.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 736fc1d810..b32d1c1756 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1587,12 +1587,6 @@ cipher_to_dict(const SSL_CIPHER *cipher) int aead, nid; const char *skcipher = NULL, *digest = NULL, *kx = NULL, *auth = NULL; #endif - PyObject *retval; - - retval = PyDict_New(); - if (retval == NULL) { - goto error; - } /* can be NULL */ cipher_name = SSL_CIPHER_get_name(cipher); @@ -1616,7 +1610,7 @@ cipher_to_dict(const SSL_CIPHER *cipher) auth = nid != NID_undef ? OBJ_nid2ln(nid) : NULL; #endif - retval = Py_BuildValue( + return Py_BuildValue( "{sksssssssisi" #if OPENSSL_VERSION_1_1 "sOssssssss" @@ -1636,11 +1630,6 @@ cipher_to_dict(const SSL_CIPHER *cipher) "auth", auth #endif ); - return retval; - - error: - Py_XDECREF(retval); - return NULL; } #endif -- cgit v1.2.1 From 16e06dae93ce6dba9e408abf9794f8549fbf936c Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 13 Sep 2016 10:07:16 +0200 Subject: Fix NULL check in sock_sendmsg_iovec. CID 1372885 --- Modules/socketmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index eee607fd13..e87f790fb0 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -3943,7 +3943,7 @@ sock_sendmsg_iovec(PySocketSockObject *s, PyObject *data_arg, msg->msg_iov = iovs; databufs = PyMem_New(Py_buffer, ndataparts); - if (iovs == NULL) { + if (databufs == NULL) { PyErr_NoMemory(); goto finally; } -- cgit v1.2.1 From a516e391d34bf1983282a237d9eb60d7c2cbb82f Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 13 Sep 2016 20:22:02 +0200 Subject: Issue #28126: Replace Py_MEMCPY with memcpy(). Visual Studio can properly optimize memcpy(). --- Modules/arraymodule.c | 4 ++-- Modules/hashtable.c | 6 +++--- Modules/hashtable.h | 8 ++++---- Modules/zlibmodule.c | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) (limited to 'Modules') diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 5868c52ca8..2caa8ee5a8 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -836,10 +836,10 @@ array_repeat(arrayobject *a, Py_ssize_t n) memset(np->ob_item, a->ob_item[0], newbytes); } else { Py_ssize_t done = oldbytes; - Py_MEMCPY(np->ob_item, a->ob_item, oldbytes); + memcpy(np->ob_item, a->ob_item, oldbytes); while (done < newbytes) { Py_ssize_t ncopy = (done <= newbytes-done) ? done : newbytes-done; - Py_MEMCPY(np->ob_item+done, np->ob_item, ncopy); + memcpy(np->ob_item+done, np->ob_item, ncopy); done += ncopy; } } diff --git a/Modules/hashtable.c b/Modules/hashtable.c index 3462fef19e..0547a6def2 100644 --- a/Modules/hashtable.c +++ b/Modules/hashtable.c @@ -64,14 +64,14 @@ #define ENTRY_READ_PDATA(TABLE, ENTRY, DATA_SIZE, PDATA) \ do { \ assert((DATA_SIZE) == (TABLE)->data_size); \ - Py_MEMCPY((PDATA), _Py_HASHTABLE_ENTRY_PDATA(TABLE, (ENTRY)), \ + memcpy((PDATA), _Py_HASHTABLE_ENTRY_PDATA(TABLE, (ENTRY)), \ (DATA_SIZE)); \ } while (0) #define ENTRY_WRITE_PDATA(TABLE, ENTRY, DATA_SIZE, PDATA) \ do { \ assert((DATA_SIZE) == (TABLE)->data_size); \ - Py_MEMCPY((void *)_Py_HASHTABLE_ENTRY_PDATA((TABLE), (ENTRY)), \ + memcpy((void *)_Py_HASHTABLE_ENTRY_PDATA((TABLE), (ENTRY)), \ (PDATA), (DATA_SIZE)); \ } while (0) @@ -337,7 +337,7 @@ _Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey, } entry->key_hash = key_hash; - Py_MEMCPY((void *)_Py_HASHTABLE_ENTRY_PKEY(entry), pkey, ht->key_size); + memcpy((void *)_Py_HASHTABLE_ENTRY_PKEY(entry), pkey, ht->key_size); if (data) ENTRY_WRITE_PDATA(ht, entry, data_size, data); diff --git a/Modules/hashtable.h b/Modules/hashtable.h index 18fed096c1..dbec23d285 100644 --- a/Modules/hashtable.h +++ b/Modules/hashtable.h @@ -43,26 +43,26 @@ typedef struct { #define _Py_HASHTABLE_READ_KEY(TABLE, PKEY, DST_KEY) \ do { \ assert(sizeof(DST_KEY) == (TABLE)->key_size); \ - Py_MEMCPY(&(DST_KEY), (PKEY), sizeof(DST_KEY)); \ + memcpy(&(DST_KEY), (PKEY), sizeof(DST_KEY)); \ } while (0) #define _Py_HASHTABLE_ENTRY_READ_KEY(TABLE, ENTRY, KEY) \ do { \ assert(sizeof(KEY) == (TABLE)->key_size); \ - Py_MEMCPY(&(KEY), _Py_HASHTABLE_ENTRY_PKEY(ENTRY), sizeof(KEY)); \ + memcpy(&(KEY), _Py_HASHTABLE_ENTRY_PKEY(ENTRY), sizeof(KEY)); \ } while (0) #define _Py_HASHTABLE_ENTRY_READ_DATA(TABLE, ENTRY, DATA) \ do { \ assert(sizeof(DATA) == (TABLE)->data_size); \ - Py_MEMCPY(&(DATA), _Py_HASHTABLE_ENTRY_PDATA(TABLE, (ENTRY)), \ + memcpy(&(DATA), _Py_HASHTABLE_ENTRY_PDATA(TABLE, (ENTRY)), \ sizeof(DATA)); \ } while (0) #define _Py_HASHTABLE_ENTRY_WRITE_DATA(TABLE, ENTRY, DATA) \ do { \ assert(sizeof(DATA) == (TABLE)->data_size); \ - Py_MEMCPY((void *)_Py_HASHTABLE_ENTRY_PDATA((TABLE), (ENTRY)), \ + memcpy((void *)_Py_HASHTABLE_ENTRY_PDATA((TABLE), (ENTRY)), \ &(DATA), sizeof(DATA)); \ } while (0) diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 4cded311ea..cfe7f88dc5 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -721,9 +721,9 @@ save_unconsumed_input(compobject *self, Py_buffer *data, int err) new_data = PyBytes_FromStringAndSize(NULL, new_size); if (new_data == NULL) return -1; - Py_MEMCPY(PyBytes_AS_STRING(new_data), + memcpy(PyBytes_AS_STRING(new_data), PyBytes_AS_STRING(self->unused_data), old_size); - Py_MEMCPY(PyBytes_AS_STRING(new_data) + old_size, + memcpy(PyBytes_AS_STRING(new_data) + old_size, self->zst.next_in, left_size); Py_SETREF(self->unused_data, new_data); self->zst.avail_in = 0; -- cgit v1.2.1 From c96535e2933c5337b4a632ccb9d751c153a8e2c2 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 13 Sep 2016 20:48:13 +0200 Subject: Issue #28188: Use PyMem_Calloc() to get rid of a type-limits warning and an extra memset() call in _ssl.c. --- Modules/_ssl.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index b32d1c1756..fc7a989a8d 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -5073,13 +5073,12 @@ static int _setup_ssl_threads(void) { if (_ssl_locks == NULL) { _ssl_locks_count = CRYPTO_num_locks(); - _ssl_locks = PyMem_New(PyThread_type_lock, _ssl_locks_count); + _ssl_locks = PyMem_Calloc(_ssl_locks_count, + sizeof(PyThread_type_lock)); if (_ssl_locks == NULL) { PyErr_NoMemory(); return 0; } - memset(_ssl_locks, 0, - sizeof(PyThread_type_lock) * _ssl_locks_count); for (i = 0; i < _ssl_locks_count; i++) { _ssl_locks[i] = PyThread_allocate_lock(); if (_ssl_locks[i] == NULL) { -- cgit v1.2.1 From c70561b7894365a98df3ca9c8e4e39de9c0f08e3 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 13 Sep 2016 22:55:09 -0700 Subject: more granular configure checks for clock_* functions (closes #28081) --- Modules/timemodule.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index ea7d906480..8194fd9a35 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -160,7 +160,9 @@ PyDoc_STRVAR(clock_gettime_doc, "clock_gettime(clk_id) -> floating point number\n\ \n\ Return the time of the specified clock clk_id."); +#endif /* HAVE_CLOCK_GETTIME */ +#ifdef HAVE_CLOCK_SETTIME static PyObject * time_clock_settime(PyObject *self, PyObject *args) { @@ -191,7 +193,9 @@ PyDoc_STRVAR(clock_settime_doc, "clock_settime(clk_id, time)\n\ \n\ Set the time of the specified clock clk_id."); +#endif /* HAVE_CLOCK_SETTIME */ +#ifdef HAVE_CLOCK_GETRES static PyObject * time_clock_getres(PyObject *self, PyObject *args) { @@ -215,7 +219,7 @@ PyDoc_STRVAR(clock_getres_doc, "clock_getres(clk_id) -> floating point number\n\ \n\ Return the resolution (precision) of the specified clock clk_id."); -#endif /* HAVE_CLOCK_GETTIME */ +#endif /* HAVE_CLOCK_GETRES */ static PyObject * time_sleep(PyObject *self, PyObject *obj) @@ -1287,7 +1291,11 @@ static PyMethodDef time_methods[] = { #endif #ifdef HAVE_CLOCK_GETTIME {"clock_gettime", time_clock_gettime, METH_VARARGS, clock_gettime_doc}, +#endif +#ifdef HAVE_CLOCK_SETTIME {"clock_settime", time_clock_settime, METH_VARARGS, clock_settime_doc}, +#endif +#ifdef HAVE_CLOCK_GETRES {"clock_getres", time_clock_getres, METH_VARARGS, clock_getres_doc}, #endif {"sleep", time_sleep, METH_O, sleep_doc}, @@ -1383,8 +1391,9 @@ PyInit_time(void) /* Set, or reset, module variables like time.timezone */ PyInit_timezone(m); -#if defined(HAVE_CLOCK_GETTIME) +#ifdef CLOCK_REALTIME PyModule_AddIntMacro(m, CLOCK_REALTIME); +#endif #ifdef CLOCK_MONOTONIC PyModule_AddIntMacro(m, CLOCK_MONOTONIC); #endif @@ -1400,7 +1409,6 @@ PyInit_time(void) #ifdef CLOCK_THREAD_CPUTIME_ID PyModule_AddIntMacro(m, CLOCK_THREAD_CPUTIME_ID); #endif -#endif /* HAVE_CLOCK_GETTIME */ if (!initialized) { if (PyStructSequence_InitType2(&StructTimeType, -- cgit v1.2.1 From 1a489e2c5b307305f8cb11a7a1e8a729384dbb6c Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Wed, 14 Sep 2016 18:16:59 +0300 Subject: Issue #28153: Make kqueue()'s event filters optional Patch by Ed Schouten. --- Modules/selectmodule.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'Modules') diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 49fa1f5268..47da49399f 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -2533,13 +2533,21 @@ PyInit_select(void) /* event filters */ PyModule_AddIntConstant(m, "KQ_FILTER_READ", EVFILT_READ); PyModule_AddIntConstant(m, "KQ_FILTER_WRITE", EVFILT_WRITE); +#ifdef EVFILT_AIO PyModule_AddIntConstant(m, "KQ_FILTER_AIO", EVFILT_AIO); +#endif +#ifdef EVFILT_VNODE PyModule_AddIntConstant(m, "KQ_FILTER_VNODE", EVFILT_VNODE); +#endif +#ifdef EVFILT_PROC PyModule_AddIntConstant(m, "KQ_FILTER_PROC", EVFILT_PROC); +#endif #ifdef EVFILT_NETDEV PyModule_AddIntConstant(m, "KQ_FILTER_NETDEV", EVFILT_NETDEV); #endif +#ifdef EVFILT_SIGNAL PyModule_AddIntConstant(m, "KQ_FILTER_SIGNAL", EVFILT_SIGNAL); +#endif PyModule_AddIntConstant(m, "KQ_FILTER_TIMER", EVFILT_TIMER); /* event flags */ @@ -2550,16 +2558,23 @@ PyInit_select(void) PyModule_AddIntConstant(m, "KQ_EV_ONESHOT", EV_ONESHOT); PyModule_AddIntConstant(m, "KQ_EV_CLEAR", EV_CLEAR); +#ifdef EV_SYSFLAGS PyModule_AddIntConstant(m, "KQ_EV_SYSFLAGS", EV_SYSFLAGS); +#endif +#ifdef EV_FLAG1 PyModule_AddIntConstant(m, "KQ_EV_FLAG1", EV_FLAG1); +#endif PyModule_AddIntConstant(m, "KQ_EV_EOF", EV_EOF); PyModule_AddIntConstant(m, "KQ_EV_ERROR", EV_ERROR); /* READ WRITE filter flag */ +#ifdef NOTE_LOWAT PyModule_AddIntConstant(m, "KQ_NOTE_LOWAT", NOTE_LOWAT); +#endif /* VNODE filter flags */ +#ifdef EVFILT_VNODE PyModule_AddIntConstant(m, "KQ_NOTE_DELETE", NOTE_DELETE); PyModule_AddIntConstant(m, "KQ_NOTE_WRITE", NOTE_WRITE); PyModule_AddIntConstant(m, "KQ_NOTE_EXTEND", NOTE_EXTEND); @@ -2567,8 +2582,10 @@ PyInit_select(void) PyModule_AddIntConstant(m, "KQ_NOTE_LINK", NOTE_LINK); PyModule_AddIntConstant(m, "KQ_NOTE_RENAME", NOTE_RENAME); PyModule_AddIntConstant(m, "KQ_NOTE_REVOKE", NOTE_REVOKE); +#endif /* PROC filter flags */ +#ifdef EVFILT_PROC PyModule_AddIntConstant(m, "KQ_NOTE_EXIT", NOTE_EXIT); PyModule_AddIntConstant(m, "KQ_NOTE_FORK", NOTE_FORK); PyModule_AddIntConstant(m, "KQ_NOTE_EXEC", NOTE_EXEC); @@ -2578,6 +2595,7 @@ PyInit_select(void) PyModule_AddIntConstant(m, "KQ_NOTE_TRACK", NOTE_TRACK); PyModule_AddIntConstant(m, "KQ_NOTE_CHILD", NOTE_CHILD); PyModule_AddIntConstant(m, "KQ_NOTE_TRACKERR", NOTE_TRACKERR); +#endif /* NETDEV filter flags */ #ifdef EVFILT_NETDEV -- cgit v1.2.1 From d734fb01a2767352005604619186787d4fad1810 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 14 Sep 2016 23:53:47 -0700 Subject: Unicode 9.0.0 Not completely mechanical since support for East Asian Width changes?emoji codepoints became Wide?had to be added to unicodedata. --- Modules/unicodedata.c | 3 + Modules/unicodedata_db.h | 3241 ++-- Modules/unicodename_db.h | 45498 +++++++++++++++++++++++---------------------- 3 files changed, 25120 insertions(+), 23622 deletions(-) (limited to 'Modules') diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index b07d9410e5..c86fe23b9d 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -45,6 +45,7 @@ typedef struct change_record { const unsigned char category_changed; const unsigned char decimal_changed; const unsigned char mirrored_changed; + const unsigned char east_asian_width_changed; const double numeric_changed; } change_record; @@ -375,6 +376,8 @@ unicodedata_UCD_east_asian_width_impl(PyObject *self, int chr) const change_record *old = get_old_record(self, c); if (old->category_changed == 0) index = 0; /* unassigned */ + else if (old->east_asian_width_changed != 0xFF) + index = old->east_asian_width_changed; } return PyUnicode_FromString(_PyUnicode_EastAsianWidthNames[index]); } diff --git a/Modules/unicodedata_db.h b/Modules/unicodedata_db.h index 89d8768dd9..ea40c2bf5d 100644 --- a/Modules/unicodedata_db.h +++ b/Modules/unicodedata_db.h @@ -1,6 +1,6 @@ /* this file was generated by Tools/unicode/makeunicodedata.py 3.2 */ -#define UNIDATA_VERSION "8.0.0" +#define UNIDATA_VERSION "9.0.0" /* a list of unique database records */ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {0, 0, 0, 0, 0, 0}, @@ -242,12 +242,13 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {27, 0, 11, 0, 5, 0}, {27, 0, 19, 1, 4, 136}, {27, 0, 19, 1, 4, 10}, + {30, 0, 19, 0, 2, 0}, {22, 0, 19, 1, 2, 170}, {23, 0, 19, 1, 2, 170}, {30, 0, 1, 0, 4, 136}, {9, 0, 19, 0, 4, 0}, + {27, 0, 19, 0, 2, 0}, {27, 0, 19, 1, 5, 170}, - {30, 0, 19, 0, 2, 0}, {30, 0, 19, 0, 2, 136}, {10, 0, 18, 0, 0, 136}, {26, 0, 19, 0, 2, 0}, @@ -329,6 +330,7 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {1, 0, 4, 0, 5, 0}, {2, 0, 4, 0, 5, 0}, {9, 0, 12, 0, 5, 0}, + {4, 9, 1, 0, 5, 0}, {30, 0, 1, 0, 5, 170}, {5, 216, 1, 0, 5, 0}, {5, 226, 1, 0, 5, 0}, @@ -336,6 +338,7 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {7, 0, 9, 0, 5, 136}, {30, 0, 1, 0, 5, 136}, {30, 0, 1, 0, 4, 0}, + {29, 0, 19, 0, 2, 0}, }; /* Reindexing of NFC first characters. */ @@ -730,39 +733,39 @@ static unsigned char index1[] = { 125, 126, 127, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 138, 41, 41, 145, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 138, 138, 156, 138, 138, 138, 157, - 158, 159, 160, 161, 162, 163, 138, 138, 164, 138, 165, 166, 167, 168, - 138, 138, 169, 138, 138, 138, 170, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 171, 172, 41, 173, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 41, 174, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 158, 159, 160, 161, 162, 163, 138, 164, 165, 138, 166, 167, 168, 169, + 138, 138, 170, 138, 138, 138, 171, 138, 138, 172, 173, 138, 138, 138, + 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 174, 175, 41, 176, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 41, 41, 41, 41, 175, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 41, 177, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 41, 41, 41, 41, 176, 177, 178, 179, 138, 138, 138, 138, 138, - 138, 180, 181, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 41, 41, 41, 41, 178, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 41, 41, 41, 41, 179, 180, 181, 182, 138, 138, 138, 138, 138, + 138, 183, 184, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 185, 101, 101, 101, 101, 101, + 186, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 182, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 183, 184, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 187, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 78, 185, - 186, 187, 188, 138, 189, 138, 190, 191, 192, 193, 194, 195, 196, 197, 78, - 78, 78, 78, 198, 199, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 188, 189, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 200, 201, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 202, 203, 138, 138, 204, 205, 206, 207, 208, 138, 209, 210, 209, 209, - 211, 212, 209, 213, 214, 215, 216, 217, 218, 219, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 78, 190, + 191, 192, 193, 138, 194, 138, 195, 196, 197, 198, 199, 200, 201, 202, 78, + 78, 78, 78, 203, 204, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 205, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 206, 207, 208, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 209, 210, 138, 138, 211, 212, 213, 214, 215, 138, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, @@ -787,19 +790,19 @@ static unsigned char index1[] = { 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 220, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 230, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 221, 101, 222, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 231, 101, 232, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 223, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 101, 233, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 122, 122, 122, 122, 224, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 122, 122, 122, 122, 234, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, @@ -1202,7 +1205,7 @@ static unsigned char index1[] = { 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 225, 138, 226, 227, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 235, 138, 236, 237, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, @@ -1275,7 +1278,7 @@ static unsigned char index1[] = { 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 228, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 238, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, @@ -1312,7 +1315,7 @@ static unsigned char index1[] = { 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 228, + 121, 238, }; static unsigned short index2[] = { @@ -1444,170 +1447,171 @@ static unsigned short index2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 81, 81, 86, 81, 81, 86, 81, - 81, 81, 86, 86, 86, 121, 122, 123, 81, 81, 81, 86, 81, 81, 86, 86, 81, - 81, 81, 81, 81, 135, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, 48, 48, 48, - 140, 48, 48, 140, 48, 48, 48, 48, 48, 135, 139, 141, 48, 139, 139, 139, - 135, 135, 135, 135, 135, 135, 135, 135, 139, 139, 139, 139, 142, 139, - 139, 48, 81, 86, 81, 81, 135, 135, 135, 143, 143, 143, 143, 143, 143, - 143, 143, 48, 48, 135, 135, 83, 83, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 83, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, - 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, - 48, 48, 48, 48, 0, 0, 145, 48, 146, 139, 139, 135, 135, 135, 135, 0, 0, - 139, 139, 0, 0, 147, 147, 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, - 0, 143, 143, 0, 143, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 48, 48, 85, 85, 148, 148, 148, 148, 148, 148, - 80, 85, 0, 0, 0, 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, - 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 143, 0, 48, 143, 0, 48, 48, 0, 0, 145, 0, 139, 139, 139, 135, 135, 0, 0, - 0, 0, 135, 135, 0, 0, 135, 135, 142, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, - 143, 143, 143, 48, 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 135, 135, 48, 48, 48, 135, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, - 48, 48, 48, 48, 48, 0, 0, 145, 48, 139, 139, 139, 135, 135, 135, 135, - 135, 0, 135, 135, 139, 0, 139, 139, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 83, 85, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, - 0, 0, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, - 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, - 48, 48, 48, 0, 0, 145, 48, 146, 135, 139, 135, 135, 135, 135, 0, 0, 139, - 147, 0, 0, 147, 147, 142, 0, 0, 0, 0, 0, 0, 0, 0, 149, 146, 0, 0, 0, 0, - 143, 143, 0, 48, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 80, 48, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 135, 48, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, - 0, 48, 48, 140, 48, 0, 0, 0, 48, 48, 0, 48, 0, 48, 48, 0, 0, 0, 48, 48, - 0, 0, 0, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 0, 0, 0, 146, 139, 135, 139, 139, 0, 0, 0, 139, 139, 139, 0, 147, - 147, 147, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, - 148, 148, 26, 26, 26, 26, 26, 26, 85, 26, 0, 0, 0, 0, 0, 135, 139, 139, - 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, - 0, 0, 48, 135, 135, 135, 139, 139, 139, 139, 0, 135, 135, 150, 0, 135, - 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 151, 152, 0, 48, 48, 48, 0, 0, 0, 0, - 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 0, 0, 0, 0, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, 80, 0, - 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, - 48, 48, 0, 0, 145, 48, 139, 154, 147, 139, 146, 139, 139, 0, 154, 147, - 147, 0, 147, 147, 135, 142, 0, 0, 0, 0, 0, 0, 0, 146, 146, 0, 0, 0, 0, 0, - 0, 0, 48, 0, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 0, 48, 146, 139, 139, 135, 135, 135, 135, 0, 139, 139, - 139, 0, 147, 147, 147, 142, 48, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, - 0, 0, 0, 48, 48, 48, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 148, 148, 148, 148, 148, 148, 0, 0, 0, 80, 48, 48, 48, 48, - 48, 48, 0, 0, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, - 0, 0, 155, 0, 0, 0, 0, 146, 139, 139, 135, 135, 135, 0, 135, 0, 139, 139, - 147, 139, 147, 147, 147, 146, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 0, 0, 139, 139, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 48, 156, - 135, 135, 135, 135, 157, 157, 142, 0, 0, 0, 0, 85, 48, 48, 48, 48, 48, - 48, 53, 135, 158, 158, 158, 158, 135, 135, 135, 83, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 48, 0, 48, 0, 0, 48, 48, 0, 48, 0, 0, 48, 0, 0, 0, 0, 0, 0, 48, - 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 0, 48, - 0, 0, 48, 48, 0, 48, 48, 48, 48, 135, 48, 156, 135, 135, 135, 135, 159, - 159, 0, 135, 135, 48, 0, 0, 48, 48, 48, 48, 48, 0, 53, 0, 160, 160, 160, - 160, 135, 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, - 0, 156, 156, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 80, 80, 80, 83, 83, 83, - 83, 83, 83, 83, 83, 161, 83, 83, 83, 83, 83, 83, 80, 83, 80, 80, 80, 86, - 86, 80, 80, 80, 80, 80, 80, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 80, 86, 80, 86, - 80, 162, 163, 164, 163, 164, 139, 139, 48, 48, 48, 143, 48, 48, 48, 48, - 0, 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, - 48, 48, 143, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 143, 48, 48, - 48, 0, 0, 0, 0, 165, 166, 167, 168, 167, 167, 169, 167, 169, 166, 166, - 166, 166, 135, 139, 166, 167, 81, 81, 142, 83, 81, 81, 48, 48, 48, 48, - 48, 135, 135, 135, 135, 135, 135, 167, 135, 135, 135, 135, 0, 135, 135, - 135, 135, 167, 135, 135, 135, 135, 167, 135, 135, 135, 135, 167, 135, - 135, 135, 135, 167, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 167, 135, 135, 135, 0, 80, 80, 80, 80, 80, 80, 80, 80, 86, 80, - 80, 80, 80, 80, 80, 0, 80, 80, 83, 83, 83, 83, 83, 80, 80, 80, 80, 83, - 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0, 118, 118, 118, 118, + 118, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 108, + 86, 81, 81, 86, 81, 81, 86, 81, 81, 81, 86, 86, 86, 121, 122, 123, 81, + 81, 81, 86, 81, 81, 86, 86, 81, 81, 81, 81, 81, 135, 135, 135, 139, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 140, 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 140, 48, 48, 48, 48, 48, + 135, 139, 141, 48, 139, 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, + 139, 139, 139, 139, 142, 139, 139, 48, 81, 86, 81, 81, 135, 135, 135, + 143, 143, 143, 143, 143, 143, 143, 143, 48, 48, 135, 135, 83, 83, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 83, 53, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 139, 0, 48, 48, 48, 48, + 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, + 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, 0, 0, 145, 48, 146, 139, 139, + 135, 135, 135, 135, 0, 0, 139, 139, 0, 0, 147, 147, 142, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 146, 0, 0, 0, 0, 143, 143, 0, 143, 48, 48, 135, 135, 0, 0, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 85, 85, 148, + 148, 148, 148, 148, 148, 80, 85, 0, 0, 0, 0, 0, 135, 135, 139, 0, 48, 48, + 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, + 48, 48, 48, 48, 0, 48, 143, 0, 48, 143, 0, 48, 48, 0, 0, 145, 0, 139, + 139, 139, 135, 135, 0, 0, 0, 0, 135, 135, 0, 0, 135, 135, 142, 0, 0, 0, + 135, 0, 0, 0, 0, 0, 0, 0, 143, 143, 143, 48, 0, 143, 0, 0, 0, 0, 0, 0, 0, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 135, 135, 48, 48, 48, + 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 139, 0, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, + 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 0, 0, 145, 48, 139, 139, + 139, 135, 135, 135, 135, 135, 0, 135, 135, 139, 0, 139, 139, 142, 0, 0, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 135, 135, 0, 0, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 83, 85, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 0, 0, 145, 48, 146, 135, 139, 135, + 135, 135, 135, 0, 0, 139, 147, 0, 0, 147, 147, 142, 0, 0, 0, 0, 0, 0, 0, + 0, 149, 146, 0, 0, 0, 0, 143, 143, 0, 48, 48, 48, 135, 135, 0, 0, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 80, 48, 148, 148, 148, 148, + 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 48, 0, 48, 48, 48, 48, 48, + 48, 0, 0, 0, 48, 48, 48, 0, 48, 48, 140, 48, 0, 0, 0, 48, 48, 0, 48, 0, + 48, 48, 0, 0, 0, 48, 48, 0, 0, 0, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 146, 139, 135, 139, 139, 0, + 0, 0, 139, 139, 139, 0, 147, 147, 147, 142, 0, 0, 48, 0, 0, 0, 0, 0, 0, + 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 148, 148, 148, 26, 26, 26, 26, 26, 26, 85, 26, + 0, 0, 0, 0, 0, 135, 139, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, + 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 135, 135, 135, 139, 139, + 139, 139, 0, 135, 135, 150, 0, 135, 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, + 151, 152, 0, 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 135, 135, 0, 0, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 153, 153, + 153, 153, 153, 153, 153, 80, 48, 135, 139, 139, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 0, 145, 48, 139, 154, 147, + 139, 146, 139, 139, 0, 154, 147, 147, 0, 147, 147, 135, 142, 0, 0, 0, 0, + 0, 0, 0, 146, 146, 0, 0, 0, 0, 0, 0, 0, 48, 0, 48, 48, 135, 135, 0, 0, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 48, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 146, 139, 139, 135, + 135, 135, 135, 0, 139, 139, 139, 0, 147, 147, 147, 142, 48, 80, 0, 0, 0, + 0, 48, 48, 48, 146, 148, 148, 148, 148, 148, 148, 148, 48, 48, 48, 135, + 135, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 80, 48, 48, 48, 48, 48, 48, 0, 0, 139, + 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 155, 0, 0, 0, + 0, 146, 139, 139, 135, 135, 135, 0, 135, 0, 139, 139, 147, 139, 147, 147, + 147, 146, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 0, 0, 139, 139, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 48, 156, 135, 135, 135, 135, + 157, 157, 142, 0, 0, 0, 0, 85, 48, 48, 48, 48, 48, 48, 53, 135, 158, 158, + 158, 158, 135, 135, 135, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 48, 0, 0, + 48, 48, 0, 48, 0, 0, 48, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, + 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 0, 48, 0, 0, 48, 48, 0, 48, 48, 48, + 48, 135, 48, 156, 135, 135, 135, 135, 159, 159, 0, 135, 135, 48, 0, 0, + 48, 48, 48, 48, 48, 0, 53, 0, 160, 160, 160, 160, 135, 135, 0, 0, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 156, 156, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 80, 80, 80, 83, 83, 83, 83, 83, 83, 83, 83, 161, + 83, 83, 83, 83, 83, 83, 80, 83, 80, 80, 80, 86, 86, 80, 80, 80, 80, 80, + 80, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 80, 86, 80, 86, 80, 162, 163, 164, 163, + 164, 139, 139, 48, 48, 48, 143, 48, 48, 48, 48, 0, 48, 48, 48, 48, 143, + 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, 48, 48, 143, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 143, 48, 48, 48, 0, 0, 0, 0, 165, + 166, 167, 168, 167, 167, 169, 167, 169, 166, 166, 166, 166, 135, 139, + 166, 167, 81, 81, 142, 83, 81, 81, 48, 48, 48, 48, 48, 135, 135, 135, + 135, 135, 135, 167, 135, 135, 135, 135, 0, 135, 135, 135, 135, 167, 135, + 135, 135, 135, 167, 135, 135, 135, 135, 167, 135, 135, 135, 135, 167, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 167, 135, + 135, 135, 0, 80, 80, 80, 80, 80, 80, 80, 80, 86, 80, 80, 80, 80, 80, 80, + 0, 80, 80, 83, 83, 83, 83, 83, 80, 80, 80, 80, 83, 83, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, 139, - 139, 135, 149, 135, 135, 139, 135, 135, 135, 135, 135, 145, 139, 142, - 142, 139, 139, 135, 135, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 83, 83, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 139, 139, 135, 135, - 48, 48, 48, 48, 135, 135, 135, 48, 139, 139, 139, 48, 48, 139, 139, 139, - 139, 139, 139, 139, 48, 48, 48, 135, 135, 135, 135, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 139, 135, 135, 139, 139, 139, - 139, 139, 139, 86, 48, 139, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 139, 139, 139, 135, 80, 80, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 48, 48, 48, 48, 48, 48, 48, 140, 48, 48, 48, 48, 139, 139, 135, 149, 135, + 135, 139, 135, 135, 135, 135, 135, 145, 139, 142, 142, 139, 139, 135, + 135, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 83, 83, 83, + 83, 83, 83, 48, 48, 48, 48, 48, 48, 139, 139, 135, 135, 48, 48, 48, 48, + 135, 135, 135, 48, 139, 139, 139, 48, 48, 139, 139, 139, 139, 139, 139, + 139, 48, 48, 48, 135, 135, 135, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 135, 139, 139, 135, 135, 139, 139, 139, 139, 139, 139, + 86, 48, 139, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 139, 139, + 139, 135, 80, 80, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 44, 0, 0, 0, 0, 0, 44, 0, 0, + 44, 44, 44, 44, 44, 44, 0, 44, 0, 0, 0, 0, 0, 44, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 83, 51, 48, 48, 48, 170, 170, 170, 170, 170, + 48, 48, 48, 83, 51, 48, 48, 48, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 48, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 48, + 170, 170, 170, 170, 48, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 171, 171, 171, 171, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, 171, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 171, 171, 171, 171, 171, 171, 171, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, - 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, + 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, + 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, - 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, + 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, + 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, - 81, 81, 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 44, 44, 44, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 81, 81, + 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 47, 47, 47, 47, 47, 47, - 0, 0, 84, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 47, 47, 47, 47, 47, 47, 0, 0, + 84, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, @@ -1627,45 +1631,45 @@ static unsigned short index2[] = { 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 172, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 163, 164, - 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 172, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 163, 164, 0, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 83, 83, 83, 173, 173, 173, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 48, 48, 48, 48, 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 135, 135, 142, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 48, 48, 48, 0, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, + 48, 48, 48, 48, 83, 83, 83, 173, 173, 173, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 48, 48, 48, 135, 135, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 135, 135, 142, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 48, 48, 48, 0, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, - 139, 135, 135, 135, 135, 135, 135, 135, 139, 139, 139, 139, 139, 139, - 139, 139, 135, 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 142, 135, 83, 83, 83, 53, 83, 83, 83, 85, 48, 81, 0, 0, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, - 138, 84, 138, 138, 138, 138, 135, 135, 135, 174, 0, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 139, + 135, 135, 135, 135, 135, 135, 135, 139, 139, 139, 139, 139, 139, 139, + 139, 135, 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, 135, 142, + 135, 83, 83, 83, 53, 83, 83, 83, 85, 48, 81, 0, 0, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, 138, + 84, 138, 138, 138, 138, 135, 135, 135, 174, 0, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, + 48, 48, 135, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 88, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 88, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 135, 135, 135, 139, 139, 139, 139, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 135, 135, 135, 139, 139, 139, 139, 135, 135, 139, 139, 139, 0, 0, 0, 0, 139, 139, 135, 139, 139, 139, 139, 139, 139, 87, 81, 86, 0, 0, 0, 0, 26, 0, 0, 0, 138, 138, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, @@ -1714,27 +1718,27 @@ static unsigned short index2[] = { 144, 144, 144, 144, 144, 0, 0, 0, 48, 48, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 53, 53, 53, 53, 53, 53, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 53, 53, 53, 53, 53, 83, 83, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, - 83, 176, 86, 86, 86, 86, 86, 81, 81, 86, 86, 86, 86, 81, 139, 176, 176, - 176, 176, 176, 176, 176, 48, 48, 48, 48, 86, 48, 48, 48, 48, 139, 139, - 81, 48, 48, 0, 81, 81, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 0, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, + 81, 81, 81, 83, 176, 86, 86, 86, 86, 86, 81, 81, 86, 86, 86, 86, 81, 139, + 176, 176, 176, 176, 176, 176, 176, 48, 48, 48, 48, 86, 48, 48, 48, 48, + 139, 139, 81, 48, 48, 0, 81, 81, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 51, 51, 51, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 51, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 51, 51, 51, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 51, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 47, 47, 47, 47, 47, 47, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 81, 81, 86, 81, 81, 81, 81, 81, 81, 81, 86, 81, 81, 177, - 178, 86, 179, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 51, 51, 51, 51, 51, 51, 51, 81, 81, 86, 81, 81, 81, 81, 81, 81, 81, 86, + 81, 81, 177, 178, 86, 179, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 180, 86, 81, 86, 38, 43, 38, 43, 38, + 81, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 81, 180, 86, 81, 86, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, @@ -1743,332 +1747,333 @@ static unsigned short index2[] = { 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, - 43, 43, 43, 43, 43, 35, 181, 47, 47, 44, 47, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 43, 43, 43, 43, 35, 181, 47, 47, 44, 47, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, - 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 47, 44, 47, 44, 47, 43, - 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 43, - 43, 43, 43, 0, 0, 38, 38, 38, 38, 38, 38, 0, 0, 43, 43, 43, 43, 43, 43, - 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 43, 43, 43, 43, 43, 43, - 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 43, 43, 43, 43, 0, 0, 38, 38, 38, - 38, 38, 38, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 0, 38, 0, 38, 0, 38, 0, - 38, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, - 182, 43, 182, 43, 182, 43, 182, 43, 182, 43, 182, 43, 182, 0, 0, 43, 43, - 43, 43, 43, 43, 43, 43, 183, 183, 183, 183, 183, 183, 183, 183, 43, 43, - 43, 43, 43, 43, 43, 43, 183, 183, 183, 183, 183, 183, 183, 183, 43, 43, - 43, 43, 43, 43, 43, 43, 183, 183, 183, 183, 183, 183, 183, 183, 43, 43, - 43, 43, 43, 0, 43, 43, 38, 38, 38, 184, 183, 58, 182, 58, 58, 76, 43, 43, - 43, 0, 43, 43, 38, 184, 38, 184, 183, 76, 76, 76, 43, 43, 43, 182, 0, 0, - 43, 43, 38, 38, 38, 184, 0, 76, 76, 76, 43, 43, 43, 182, 43, 43, 43, 43, - 38, 38, 38, 184, 38, 76, 185, 185, 0, 0, 43, 43, 43, 0, 43, 43, 38, 184, - 38, 184, 183, 185, 58, 0, 186, 186, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 174, 174, 174, 188, 189, 190, 191, 84, 190, 190, 190, 22, 192, - 193, 194, 195, 196, 193, 194, 195, 196, 22, 22, 22, 138, 197, 197, 197, - 22, 198, 199, 200, 201, 202, 203, 204, 21, 205, 110, 205, 206, 207, 22, - 192, 192, 138, 28, 36, 22, 192, 138, 197, 208, 208, 138, 138, 138, 209, - 163, 164, 192, 192, 192, 138, 138, 138, 138, 138, 138, 138, 138, 78, 138, - 208, 138, 138, 192, 138, 138, 138, 138, 138, 138, 138, 187, 174, 174, - 174, 174, 174, 0, 210, 211, 212, 213, 174, 174, 174, 174, 174, 174, 214, - 51, 0, 0, 34, 214, 214, 214, 214, 214, 215, 215, 216, 217, 218, 219, 214, - 34, 34, 34, 34, 214, 214, 214, 214, 214, 215, 215, 216, 217, 218, 0, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 85, 85, 85, 85, - 85, 85, 85, 85, 220, 221, 85, 85, 23, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 81, 81, 176, 176, 81, 81, 81, 81, 176, 176, 176, 81, 81, - 82, 82, 82, 82, 81, 82, 82, 82, 176, 176, 81, 86, 81, 176, 176, 86, 86, - 86, 86, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 49, - 223, 26, 223, 222, 49, 26, 223, 35, 49, 49, 49, 35, 35, 49, 49, 49, 46, - 26, 49, 223, 26, 78, 49, 49, 49, 49, 49, 26, 26, 222, 223, 223, 26, 49, - 26, 224, 26, 49, 26, 184, 224, 49, 49, 225, 35, 49, 49, 44, 49, 35, 156, - 156, 156, 156, 35, 26, 222, 35, 35, 49, 49, 226, 78, 78, 78, 78, 49, 35, - 35, 35, 35, 26, 78, 26, 26, 47, 80, 227, 227, 227, 37, 37, 227, 227, 227, - 227, 227, 227, 37, 37, 37, 37, 227, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 229, 229, 229, 229, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 173, 173, 173, 44, - 47, 173, 173, 173, 173, 37, 26, 26, 0, 0, 0, 0, 40, 40, 40, 40, 40, 30, - 30, 30, 30, 30, 230, 230, 26, 26, 26, 26, 78, 26, 26, 78, 26, 26, 78, 26, - 26, 26, 26, 26, 26, 26, 230, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 231, 230, 230, 26, 26, 40, 26, 40, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 40, - 232, 233, 233, 234, 78, 78, 40, 233, 234, 232, 233, 234, 232, 78, 40, 78, - 233, 235, 236, 78, 233, 232, 78, 78, 78, 233, 232, 232, 233, 40, 233, - 233, 232, 232, 40, 234, 40, 234, 40, 40, 40, 40, 233, 237, 226, 233, 226, - 226, 232, 232, 232, 40, 40, 40, 40, 78, 232, 78, 232, 233, 233, 232, 232, - 232, 234, 232, 232, 234, 232, 232, 234, 233, 234, 232, 232, 233, 78, 78, - 78, 78, 78, 233, 232, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, - 238, 40, 234, 78, 233, 233, 233, 233, 232, 232, 233, 233, 78, 230, 238, - 238, 234, 234, 232, 232, 234, 234, 232, 232, 234, 234, 232, 232, 232, - 232, 232, 232, 234, 234, 233, 233, 234, 234, 233, 233, 234, 234, 232, - 232, 232, 78, 78, 232, 232, 232, 232, 78, 78, 40, 78, 78, 232, 40, 78, - 78, 78, 78, 78, 78, 78, 78, 232, 232, 78, 40, 232, 232, 232, 232, 232, - 232, 234, 234, 234, 234, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, - 78, 78, 78, 78, 232, 233, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, - 232, 232, 232, 78, 78, 232, 232, 78, 78, 78, 78, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 234, 234, 234, 234, 232, 232, 232, 232, 232, - 232, 234, 234, 234, 234, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 26, 26, 26, 26, 26, 26, 26, 26, - 163, 164, 163, 164, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 232, 232, 26, 26, 26, 26, 26, 26, 26, 239, - 240, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 80, 80, 80, 80, 80, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 47, 44, + 47, 44, 47, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, + 38, 43, 43, 43, 43, 43, 43, 0, 0, 38, 38, 38, 38, 38, 38, 0, 0, 43, 43, + 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 43, 43, + 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 43, 43, 43, 43, + 0, 0, 38, 38, 38, 38, 38, 38, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 0, + 38, 0, 38, 0, 38, 0, 38, 43, 43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, + 38, 38, 38, 38, 43, 182, 43, 182, 43, 182, 43, 182, 43, 182, 43, 182, 43, + 182, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 183, 183, 183, 183, 183, 183, + 183, 183, 43, 43, 43, 43, 43, 43, 43, 43, 183, 183, 183, 183, 183, 183, + 183, 183, 43, 43, 43, 43, 43, 43, 43, 43, 183, 183, 183, 183, 183, 183, + 183, 183, 43, 43, 43, 43, 43, 0, 43, 43, 38, 38, 38, 184, 183, 58, 182, + 58, 58, 76, 43, 43, 43, 0, 43, 43, 38, 184, 38, 184, 183, 76, 76, 76, 43, + 43, 43, 182, 0, 0, 43, 43, 38, 38, 38, 184, 0, 76, 76, 76, 43, 43, 43, + 182, 43, 43, 43, 43, 38, 38, 38, 184, 38, 76, 185, 185, 0, 0, 43, 43, 43, + 0, 43, 43, 38, 184, 38, 184, 183, 185, 58, 0, 186, 186, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 174, 174, 174, 188, 189, 190, 191, 84, 190, + 190, 190, 22, 192, 193, 194, 195, 196, 193, 194, 195, 196, 22, 22, 22, + 138, 197, 197, 197, 22, 198, 199, 200, 201, 202, 203, 204, 21, 205, 110, + 205, 206, 207, 22, 192, 192, 138, 28, 36, 22, 192, 138, 197, 208, 208, + 138, 138, 138, 209, 163, 164, 192, 192, 192, 138, 138, 138, 138, 138, + 138, 138, 138, 78, 138, 208, 138, 138, 192, 138, 138, 138, 138, 138, 138, + 138, 187, 174, 174, 174, 174, 174, 0, 210, 211, 212, 213, 174, 174, 174, + 174, 174, 174, 214, 51, 0, 0, 34, 214, 214, 214, 214, 214, 215, 215, 216, + 217, 218, 219, 214, 34, 34, 34, 34, 214, 214, 214, 214, 214, 215, 215, + 216, 217, 218, 0, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, + 0, 0, 85, 85, 85, 85, 85, 85, 85, 85, 220, 221, 85, 85, 23, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 176, 176, 81, 81, 81, 81, + 176, 176, 176, 81, 81, 82, 82, 82, 82, 81, 82, 82, 82, 176, 176, 81, 86, + 81, 176, 176, 86, 86, 86, 86, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 222, 222, 49, 223, 26, 223, 222, 49, 26, 223, 35, 49, 49, 49, 35, + 35, 49, 49, 49, 46, 26, 49, 223, 26, 78, 49, 49, 49, 49, 49, 26, 26, 222, + 223, 223, 26, 49, 26, 224, 26, 49, 26, 184, 224, 49, 49, 225, 35, 49, 49, + 44, 49, 35, 156, 156, 156, 156, 35, 26, 222, 35, 35, 49, 49, 226, 78, 78, + 78, 78, 49, 35, 35, 35, 35, 26, 78, 26, 26, 47, 80, 227, 227, 227, 37, + 37, 227, 227, 227, 227, 227, 227, 37, 37, 37, 37, 227, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, + 229, 173, 173, 173, 44, 47, 173, 173, 173, 173, 37, 26, 26, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 30, 30, 30, 30, 30, 230, 230, 26, 26, 26, 26, 78, 26, + 26, 78, 26, 26, 78, 26, 26, 26, 26, 26, 26, 26, 230, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 231, 230, 230, 26, 26, 40, 26, 40, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 40, 232, 233, 233, 234, 78, 78, 40, 233, 234, 232, + 233, 234, 232, 78, 40, 78, 233, 235, 236, 78, 233, 232, 78, 78, 78, 233, + 232, 232, 233, 40, 233, 233, 232, 232, 40, 234, 40, 234, 40, 40, 40, 40, + 233, 237, 226, 233, 226, 226, 232, 232, 232, 40, 40, 40, 40, 78, 232, 78, + 232, 233, 233, 232, 232, 232, 234, 232, 232, 234, 232, 232, 234, 233, + 234, 232, 232, 233, 78, 78, 78, 78, 78, 233, 232, 232, 232, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 232, 238, 40, 234, 78, 233, 233, 233, 233, 232, + 232, 233, 233, 78, 230, 238, 238, 234, 234, 232, 232, 234, 234, 232, 232, + 234, 234, 232, 232, 232, 232, 232, 232, 234, 234, 233, 233, 234, 234, + 233, 233, 234, 234, 232, 232, 232, 78, 78, 232, 232, 232, 232, 78, 78, + 40, 78, 78, 232, 40, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, 78, 40, + 232, 232, 232, 232, 232, 232, 234, 234, 234, 234, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 78, 78, 78, 78, 78, 232, 233, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 232, 232, 232, 232, 232, 78, 78, 232, 232, 78, 78, + 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 234, 234, 234, + 234, 232, 232, 232, 232, 232, 232, 234, 234, 234, 234, 78, 78, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 26, + 26, 26, 26, 26, 26, 26, 26, 163, 164, 163, 164, 26, 26, 26, 26, 26, 26, + 30, 26, 26, 26, 26, 26, 26, 26, 239, 239, 26, 26, 26, 26, 232, 232, 26, + 26, 26, 26, 26, 26, 26, 240, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 26, 78, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, - 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 26, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, - 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 80, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, + 239, 239, 239, 239, 26, 26, 26, 239, 26, 26, 239, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 227, 242, 242, 242, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 37, 37, 37, 37, 37, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 227, + 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, + 243, 243, 243, 243, 243, 243, 243, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, - 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, - 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, - 26, 30, 40, 26, 26, 26, 26, 30, 30, 26, 26, 30, 40, 26, 26, 26, 26, 30, - 30, 30, 26, 26, 30, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, - 78, 78, 78, 26, 26, 26, 26, 26, 30, 30, 26, 26, 30, 26, 26, 26, 26, 30, - 30, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 30, 26, 30, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 30, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, 30, 26, 30, 30, - 30, 30, 26, 30, 30, 26, 40, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 26, 30, 30, 30, 30, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 30, 30, 30, 30, 30, 30, 30, 26, + 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 30, 40, 26, 26, 26, 26, 30, + 30, 26, 26, 30, 40, 26, 26, 26, 26, 30, 30, 30, 26, 26, 30, 26, 26, 30, + 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, + 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 244, 244, 78, 26, 26, 26, 26, 26, + 30, 30, 26, 26, 30, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 239, 239, 26, + 26, 26, 26, 26, 26, 30, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, - 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 80, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, - 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 26, 26, 26, - 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 30, 26, 30, 26, 26, 26, 26, 26, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 30, 30, 26, 30, 30, 30, 26, 30, 30, 30, 30, 26, 30, 30, + 26, 40, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 239, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 26, 239, 26, 26, + 26, 26, 26, 26, 26, 26, 239, 239, 80, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 239, 239, 30, 26, 26, 26, 26, 239, 239, 30, + 30, 30, 30, 30, 30, 30, 30, 239, 30, 30, 30, 30, 30, 239, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 26, 30, 26, 26, 26, 26, 30, 30, 239, + 30, 30, 30, 30, 30, 30, 30, 239, 239, 30, 239, 30, 30, 30, 30, 239, 30, + 30, 239, 30, 30, 26, 26, 26, 26, 26, 239, 26, 26, 26, 26, 239, 239, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 26, 239, 26, 26, 26, 26, 239, + 239, 239, 26, 239, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, - 163, 164, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 153, 153, + 163, 164, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 232, 78, 78, 232, - 232, 163, 164, 78, 232, 232, 78, 232, 232, 232, 78, 78, 78, 78, 78, 232, - 232, 232, 232, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 232, 232, - 232, 232, 9, 10, 9, 10, 9, 10, 9, 10, 163, 164, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, + 153, 153, 153, 153, 26, 239, 239, 239, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 232, 78, 78, + 232, 232, 163, 164, 78, 232, 232, 78, 232, 232, 232, 78, 78, 78, 78, 78, + 232, 232, 232, 232, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 232, + 232, 232, 232, 9, 10, 9, 10, 9, 10, 9, 10, 163, 164, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, 78, 78, 78, 78, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 163, - 164, 9, 10, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, - 163, 164, 163, 164, 163, 164, 78, 78, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, - 78, 78, 78, 78, 78, 78, 78, 232, 78, 78, 78, 78, 78, 78, 78, 232, 232, - 232, 232, 232, 232, 78, 78, 78, 232, 78, 78, 78, 78, 232, 232, 232, 232, - 232, 78, 232, 232, 78, 78, 163, 164, 163, 164, 232, 78, 78, 78, 78, 232, - 78, 232, 232, 232, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 232, 232, 232, 232, 232, 232, 78, 78, 163, 164, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 232, 232, 226, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, 232, 232, - 78, 78, 232, 78, 232, 78, 78, 232, 78, 232, 232, 232, 232, 78, 78, 78, - 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, - 78, 78, 78, 78, 232, 232, 232, 232, 78, 232, 232, 78, 78, 232, 226, 216, - 216, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 163, 164, 9, 10, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, + 164, 163, 164, 163, 164, 163, 164, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 78, 78, 78, 78, 78, 78, 78, 78, 232, 78, 78, 78, 78, 78, 78, 78, + 232, 232, 232, 232, 232, 232, 78, 78, 78, 232, 78, 78, 78, 78, 232, 232, + 232, 232, 232, 78, 232, 232, 78, 78, 163, 164, 163, 164, 232, 78, 78, 78, + 78, 232, 78, 232, 232, 232, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 232, 232, 232, 232, 232, 232, 78, 78, 163, 164, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, 226, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, + 232, 232, 78, 78, 232, 78, 232, 78, 78, 232, 78, 232, 232, 232, 232, 78, + 78, 78, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 232, 232, 78, 78, 78, 78, 232, 232, 232, 232, 78, 232, 232, 78, 78, 232, + 226, 216, 216, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, + 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, 78, - 78, 243, 78, 232, 78, 78, 78, 232, 232, 232, 232, 232, 78, 78, 78, 78, - 78, 232, 232, 232, 78, 78, 78, 78, 232, 78, 78, 78, 232, 232, 232, 232, - 232, 78, 232, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, + 78, 78, 245, 78, 232, 78, 78, 78, 232, 232, 232, 232, 232, 78, 78, 78, + 78, 78, 232, 232, 232, 78, 78, 78, 78, 232, 78, 78, 78, 232, 232, 232, + 232, 232, 78, 232, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 239, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 26, 26, 78, 78, 78, 78, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, - 30, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, + 26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 26, 26, 78, 78, 78, 78, 78, 78, 26, 26, 26, 239, 26, 26, + 26, 26, 239, 30, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, + 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 44, 44, 44, 44, 44, 44, 44, 44, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 0, 44, 47, 44, 44, 44, 47, 47, 44, 47, 44, 47, 44, 47, 44, 44, 44, 44, - 47, 44, 47, 47, 44, 47, 47, 47, 47, 47, 47, 51, 51, 44, 44, 44, 47, 44, + 47, 47, 0, 44, 47, 44, 44, 44, 47, 47, 44, 47, 44, 47, 44, 47, 44, 44, + 44, 44, 47, 44, 47, 47, 44, 47, 47, 47, 47, 47, 47, 51, 51, 44, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, - 47, 44, 47, 44, 47, 44, 47, 47, 26, 26, 26, 26, 26, 26, 44, 47, 44, 47, - 81, 81, 81, 44, 47, 0, 0, 0, 0, 0, 138, 138, 138, 138, 153, 138, 138, 47, + 47, 44, 47, 44, 47, 44, 47, 44, 47, 47, 26, 26, 26, 26, 26, 26, 44, 47, + 44, 47, 81, 81, 81, 44, 47, 0, 0, 0, 0, 0, 138, 138, 138, 138, 153, 138, + 138, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 0, 0, 0, 0, 0, 47, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 47, 47, 47, 0, 47, 0, 0, 0, 0, 0, 47, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 51, 83, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, - 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, - 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, - 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 81, 81, 81, 81, 81, 81, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, + 51, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, + 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, + 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, 138, 138, 28, 36, 28, 36, 138, 138, 138, - 28, 36, 138, 28, 36, 138, 138, 138, 138, 138, 138, 138, 138, 138, 84, - 138, 138, 84, 138, 28, 36, 138, 138, 28, 36, 163, 164, 163, 164, 163, - 164, 163, 164, 138, 138, 138, 138, 138, 52, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 84, 84, 138, 138, 138, 138, 84, 138, 195, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 0, 244, 244, 244, 244, 245, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 0, 0, 0, 0, 246, 247, 247, 247, 244, 248, 170, 249, 250, 251, - 250, 251, 250, 251, 250, 251, 250, 251, 244, 244, 250, 251, 250, 251, - 250, 251, 250, 251, 252, 253, 254, 254, 244, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 255, 256, 257, 258, 259, 259, 252, 248, 248, 248, - 248, 248, 245, 244, 260, 260, 260, 248, 170, 247, 244, 26, 0, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 261, 170, 261, 170, 261, - 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, - 170, 261, 170, 261, 170, 170, 261, 170, 261, 170, 261, 170, 170, 170, - 170, 170, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, - 170, 261, 261, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 261, 170, 170, 0, - 0, 262, 262, 263, 263, 248, 264, 265, 252, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, - 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, - 170, 170, 261, 170, 261, 170, 261, 170, 170, 170, 170, 170, 170, 261, - 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 261, 261, 170, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 138, 138, 28, 36, 28, 36, 138, + 138, 138, 28, 36, 138, 28, 36, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 84, 138, 138, 84, 138, 28, 36, 138, 138, 28, 36, 163, 164, 163, 164, + 163, 164, 163, 164, 138, 138, 138, 138, 138, 52, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 84, 84, 138, 138, 138, 138, 84, 138, 195, 138, + 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 0, 239, 239, 239, 239, 246, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 246, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 0, 0, 0, 0, 247, 248, 248, 248, 239, 249, 170, + 250, 251, 252, 251, 252, 251, 252, 251, 252, 251, 252, 239, 239, 251, + 252, 251, 252, 251, 252, 251, 252, 253, 254, 255, 255, 239, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 256, 257, 258, 259, 260, 260, 253, + 249, 249, 249, 249, 249, 246, 239, 261, 261, 261, 249, 170, 248, 239, 26, + 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 262, 170, 262, + 170, 262, 170, 262, 170, 262, 170, 262, 170, 262, 170, 262, 170, 262, + 170, 262, 170, 262, 170, 262, 170, 170, 262, 170, 262, 170, 262, 170, + 170, 170, 170, 170, 170, 262, 262, 170, 262, 262, 170, 262, 262, 170, + 262, 262, 170, 262, 262, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 262, + 170, 170, 0, 0, 263, 263, 264, 264, 249, 265, 266, 253, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 262, 170, 262, 170, 262, 170, + 262, 170, 262, 170, 262, 170, 262, 170, 262, 170, 262, 170, 262, 170, + 262, 170, 262, 170, 170, 262, 170, 262, 170, 262, 170, 170, 170, 170, + 170, 170, 262, 262, 170, 262, 262, 170, 262, 262, 170, 262, 262, 170, + 262, 262, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 262, 170, 170, 262, + 262, 262, 262, 248, 249, 249, 265, 266, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 261, 170, 170, 261, 261, 261, 261, - 247, 248, 248, 264, 265, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 0, 267, 267, 268, 268, 268, 268, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 0, 266, 266, 267, 267, 267, 267, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 0, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 269, - 269, 269, 269, 269, 269, 269, 245, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, 270, 270, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 245, 266, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 245, 245, 245, 245, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 245, 245, 245, 245, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 245, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 246, 246, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 270, 270, 270, 270, 270, 270, 270, 270, 246, 271, 271, 271, 271, + 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 246, 246, 246, + 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 271, 271, 271, 271, 271, 271, + 271, 271, 271, 271, 271, 271, 271, 271, 271, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 246, 246, 246, 246, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 0, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 246, 246, 246, 246, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 246, 246, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 246, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, @@ -2081,20 +2086,21 @@ static unsigned short index2[] = { 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, + 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 26, 26, 26, 26, 26, 26, 26, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 249, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 248, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, @@ -2102,125 +2108,115 @@ static unsigned short index2[] = { 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, 53, - 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 138, 138, - 138, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 47, 44, 47, 44, 47, 44, 47, + 170, 170, 170, 170, 0, 0, 0, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 53, + 53, 53, 53, 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 53, 138, 138, 138, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 48, 81, 82, 82, 82, 138, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 138, 52, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 51, 51, 81, 81, 48, 48, + 44, 47, 44, 47, 44, 47, 48, 81, 82, 82, 82, 138, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 138, 52, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 51, 51, + 81, 81, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 173, 173, 173, - 173, 173, 173, 173, 173, 173, 173, 81, 81, 83, 83, 83, 83, 83, 83, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 54, 54, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 47, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 81, 81, 83, 83, 83, 83, + 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 54, 54, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 44, 47, 47, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 51, 47, 47, 47, 47, 47, 47, 47, 47, 44, - 47, 44, 47, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 52, 271, 271, 44, - 47, 44, 47, 48, 44, 47, 44, 47, 47, 47, 44, 47, 44, 47, 44, 47, 44, 47, - 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 44, 44, 44, 0, 0, 44, - 44, 44, 44, 44, 47, 44, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 51, 47, 47, 47, 47, 47, + 47, 47, 47, 44, 47, 44, 47, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, + 52, 272, 272, 44, 47, 44, 47, 48, 44, 47, 44, 47, 47, 47, 44, 47, 44, 47, + 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 44, + 44, 44, 44, 0, 44, 44, 44, 44, 44, 47, 44, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 51, 51, 47, 48, 48, 48, 48, 48, 48, 48, 135, 48, 48, 48, 142, 48, 48, - 48, 48, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 135, 135, 139, 26, 26, 26, 26, - 0, 0, 0, 0, 148, 148, 148, 148, 148, 148, 80, 80, 85, 225, 0, 0, 0, 0, 0, - 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 138, - 138, 138, 138, 0, 0, 0, 0, 0, 0, 0, 0, 139, 139, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 48, 51, 51, 47, 48, 48, 48, 48, 48, 48, 48, 135, 48, + 48, 48, 142, 48, 48, 48, 48, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 135, 135, + 139, 26, 26, 26, 26, 0, 0, 0, 0, 148, 148, 148, 148, 148, 148, 80, 80, + 85, 225, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, - 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 48, 48, 48, 48, 48, 48, 83, 83, 83, 48, 83, 48, 0, 0, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 135, 135, 135, 135, 135, 86, 86, 86, 83, 83, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 139, 175, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 83, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 0, 0, 0, 135, 135, 135, 139, 48, 48, 48, + 48, 48, 48, 48, 48, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0, 0, 0, 139, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 145, 139, 139, 135, 135, 135, 135, 139, - 139, 135, 139, 139, 139, 175, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 0, 53, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, - 0, 83, 83, 48, 48, 48, 48, 48, 135, 53, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, - 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 142, + 135, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 48, 48, 48, 48, 48, 48, 83, 83, 83, 48, + 83, 48, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 139, 139, 135, 135, - 139, 139, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 135, 48, 48, - 48, 48, 48, 48, 48, 48, 135, 139, 0, 0, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 0, 0, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, 80, 80, 80, - 48, 139, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 81, 48, 81, 81, 86, 48, 48, 81, 81, 48, 48, 48, 48, 48, 81, 81, 48, - 81, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 48, 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 139, 135, 135, 139, 139, 83, 83, 48, 53, 53, 139, 142, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, - 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, - 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 86, 86, 86, 83, + 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 139, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 135, 135, + 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 139, 139, 135, + 135, 135, 135, 139, 139, 135, 139, 139, 139, 175, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 0, 53, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 0, 0, 0, 0, 83, 83, 48, 48, 48, 48, 48, 135, 53, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, + 135, 139, 139, 135, 135, 139, 139, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 135, 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 0, 0, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 83, 83, 83, 83, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 48, + 48, 48, 48, 48, 80, 80, 80, 48, 139, 135, 139, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 81, 48, 81, 81, 86, 48, 48, 81, 81, 48, + 48, 48, 48, 48, 81, 81, 48, 81, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 53, 83, 83, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 139, 135, 135, 139, 139, 83, 83, 48, 53, 53, + 139, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, 48, + 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 271, - 51, 51, 51, 51, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 272, 51, 51, 51, 51, 47, 47, 47, 47, 47, 47, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 139, 139, 135, 139, 139, 135, 139, 139, 83, 139, - 142, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, - 0, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 273, 273, 273, 273, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 135, 139, 139, + 135, 139, 139, 83, 139, 142, 0, 0, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 0, 0, 0, 0, 0, 0, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, @@ -2229,24 +2225,9 @@ static unsigned short index2[] = { 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 170, 170, 274, 170, 274, 170, 170, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 170, 274, 170, 274, 170, 170, 274, 274, 170, 170, 170, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 0, 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, @@ -2254,24 +2235,47 @@ static unsigned short index2[] = { 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, - 35, 35, 35, 35, 0, 0, 0, 0, 0, 275, 276, 275, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 215, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 275, 275, 275, 0, 275, 275, 275, 275, 275, 0, 275, 0, 275, 275, 0, - 275, 275, 0, 275, 275, 275, 275, 275, 275, 275, 275, 275, 277, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 170, 170, 275, 170, 275, 170, 170, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 170, 275, 170, 275, 170, 170, + 275, 275, 170, 170, 170, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 0, 0, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 276, 277, 276, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 215, 276, 276, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 0, 276, 276, 276, 276, 276, + 0, 276, 0, 276, 276, 0, 276, 276, 0, 276, 276, 276, 276, 276, 276, 276, + 276, 276, 278, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 278, 278, - 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, + 279, 279, 279, 279, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, @@ -2286,27 +2290,28 @@ static unsigned short index2[] = { 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 279, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 280, 195, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 280, 26, 0, 0, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 281, 281, 281, 281, 281, 281, 281, 282, 283, 281, 0, 0, - 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86, 86, 86, 81, - 81, 281, 284, 284, 285, 285, 282, 283, 282, 283, 282, 283, 282, 283, 282, - 283, 282, 283, 282, 283, 282, 283, 247, 247, 282, 283, 281, 281, 281, - 281, 285, 285, 285, 286, 281, 286, 0, 281, 286, 281, 281, 284, 287, 288, - 287, 288, 287, 288, 289, 281, 281, 290, 291, 292, 292, 293, 0, 281, 294, - 289, 281, 0, 0, 0, 0, 131, 131, 131, 118, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 281, 26, 0, 0, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 282, 282, 282, 282, 282, 282, + 282, 283, 284, 282, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 86, 86, + 86, 86, 86, 86, 86, 81, 81, 282, 285, 285, 286, 286, 283, 284, 283, 284, + 283, 284, 283, 284, 283, 284, 283, 284, 283, 284, 283, 284, 248, 248, + 283, 284, 282, 282, 282, 282, 286, 286, 286, 287, 282, 287, 0, 282, 287, + 282, 282, 285, 288, 289, 288, 289, 288, 289, 290, 282, 282, 291, 292, + 293, 293, 294, 0, 282, 295, 290, 282, 0, 0, 0, 0, 131, 131, 131, 118, + 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, @@ -2315,164 +2320,165 @@ static unsigned short index2[] = { 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 0, 0, 174, 0, 295, 295, 296, 297, 296, 295, 295, - 298, 299, 295, 300, 301, 302, 301, 301, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 301, 295, 304, 305, 304, 295, 295, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 298, 295, 299, 307, 308, - 307, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 298, - 305, 299, 305, 298, 299, 310, 311, 312, 310, 310, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 314, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 314, 314, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 0, 0, 0, 313, 313, 313, 313, 313, 313, 0, 0, 313, 313, 313, 313, - 313, 313, 0, 0, 313, 313, 313, 313, 313, 313, 0, 0, 313, 313, 313, 0, 0, - 0, 297, 297, 305, 307, 315, 297, 297, 0, 316, 317, 317, 317, 317, 316, - 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 318, 318, 26, 30, 0, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 174, 0, 296, 296, + 297, 298, 297, 296, 296, 299, 300, 296, 301, 302, 303, 302, 302, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 302, 296, 305, 306, 305, + 296, 296, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 299, 296, 300, 308, 309, 308, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 299, 306, 300, 306, 299, 300, 311, 312, 313, 311, + 311, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 315, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 315, 315, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 0, 0, 0, 314, 314, 314, 314, 314, 314, 0, + 0, 314, 314, 314, 314, 314, 314, 0, 0, 314, 314, 314, 314, 314, 314, 0, + 0, 314, 314, 314, 0, 0, 0, 298, 298, 306, 308, 316, 298, 298, 0, 317, + 318, 318, 318, 318, 317, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 319, + 319, 26, 30, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 0, 0, 0, 0, 0, 83, 138, 83, 0, 0, 0, 0, 148, 148, 148, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 83, 138, 83, 0, 0, + 0, 0, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, - 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 153, 153, 153, 153, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 153, 153, 26, 0, 0, 0, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 148, 148, 148, 148, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 320, + 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, + 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, + 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, + 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 153, 153, 153, 153, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 153, 153, + 26, 80, 80, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, + 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 148, 148, 148, 148, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 173, 48, 48, 48, 48, 48, 48, 48, 48, 173, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 86, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 148, 148, + 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 173, 48, 48, 48, 48, 48, 48, 48, + 48, 173, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 0, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, - 48, 48, 83, 173, 173, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 83, 173, 173, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 0, 0, 107, 0, + 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 0, + 0, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 0, 107, 107, 0, 0, 0, 107, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 0, 107, 107, 0, 0, 0, 107, 0, 0, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 0, 104, 322, 322, 322, 322, 322, 322, 322, 322, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 0, 104, 321, 321, 321, 321, 321, 321, 321, 321, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 323, 323, 322, 322, 322, + 322, 322, 322, 322, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 322, 322, 321, 321, 321, 321, 321, - 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 322, 322, 322, + 322, 322, 322, 322, 322, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 0, 0, + 0, 0, 0, 322, 322, 322, 322, 322, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 0, 0, 0, 0, 0, 321, - 321, 321, 321, 321, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 321, 321, - 321, 321, 321, 321, 0, 0, 0, 138, 107, 107, 107, 107, 107, 107, 107, 107, + 322, 322, 322, 322, 322, 322, 0, 0, 0, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 0, 0, 0, 0, 321, 321, 107, 107, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 0, 0, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 321, 107, 135, 135, 135, 0, 135, 135, 0, 0, 0, 0, 0, 135, 86, 135, - 81, 107, 107, 107, 107, 0, 107, 107, 107, 0, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 0, 0, 0, 0, 322, 322, 107, 107, 322, 322, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 0, 0, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + 322, 322, 322, 107, 135, 135, 135, 0, 135, 135, 0, 0, 0, 0, 0, 135, 86, + 135, 81, 107, 107, 107, 107, 0, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 81, 176, 86, 0, 0, 0, - 0, 142, 321, 321, 321, 321, 321, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 81, 176, 86, 0, + 0, 0, 0, 142, 322, 322, 322, 322, 322, 322, 322, 322, 0, 0, 0, 0, 0, 0, + 0, 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 321, 321, 104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 322, 322, 104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, - 107, 107, 107, 107, 107, 322, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 322, 322, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, + 107, 107, 107, 107, 107, 107, 323, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 81, 86, 0, 0, 0, 0, 321, 321, 321, 321, - 321, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, + 107, 107, 107, 107, 107, 107, 107, 81, 86, 0, 0, 0, 0, 322, 322, 322, + 322, 322, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 138, 138, - 138, 138, 138, 138, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, - 321, 321, 321, 321, 321, 321, 321, 321, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 138, + 138, 138, 138, 138, 138, 138, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, + 0, 322, 322, 322, 322, 322, 322, 322, 322, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, - 0, 0, 321, 321, 321, 321, 321, 321, 321, 321, 107, 107, 107, 107, 107, + 0, 0, 322, 322, 322, 322, 322, 322, 322, 322, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, - 0, 0, 0, 0, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 321, 321, 321, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, + 322, 322, 322, 322, 322, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, @@ -2483,21 +2489,21 @@ static unsigned short index2[] = { 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, + 0, 0, 0, 0, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, - 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 0, 0, 0, - 0, 0, 0, 0, 321, 321, 321, 321, 321, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 0, 0, 0, + 0, 0, 0, 0, 322, 322, 322, 322, 322, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 0, 139, 135, 139, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 0, 139, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, @@ -2530,15 +2536,15 @@ static unsigned short index2[] = { 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, 135, 139, - 139, 135, 175, 145, 135, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, + 139, 135, 175, 145, 135, 83, 83, 83, 83, 83, 83, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, - 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 83, 0, 0, 0, 0, 0, 0, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, + 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 83, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 139, 139, 135, 135, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 139, 139, 135, 135, 135, 135, 135, 135, 145, 142, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 135, 135, 139, 139, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, @@ -2550,6 +2556,13 @@ static unsigned short index2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, 135, 135, 135, 135, 135, + 135, 139, 139, 142, 135, 135, 139, 145, 48, 48, 48, 48, 83, 83, 83, 83, + 83, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 83, 0, 83, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 146, 139, 139, 135, 135, 135, 135, 135, 135, 139, 149, 147, 147, 146, 147, 135, 135, 139, 142, 145, 48, 48, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2566,40 +2579,54 @@ static unsigned short index2[] = { 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, 135, 135, 135, 135, 135, 135, 139, 139, 135, 139, 142, 135, 83, 83, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, + 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 135, 139, 135, 139, 139, 135, 135, 135, 135, 135, 135, - 175, 145, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 139, 135, 139, 139, 135, + 135, 135, 135, 135, 135, 175, 145, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 135, - 135, 135, 139, 139, 135, 135, 135, 135, 139, 135, 135, 135, 135, 142, 0, - 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, 83, - 83, 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 0, 0, 135, 135, 135, 139, 139, 135, 135, 135, 135, 139, + 135, 135, 135, 135, 142, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 148, 148, 83, 83, 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 47, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, 135, 135, 135, 135, + 135, 135, 0, 135, 135, 135, 135, 135, 135, 139, 327, 48, 83, 83, 83, 83, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 83, 83, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, + 139, 135, 135, 135, 135, 135, 135, 135, 139, 135, 135, 139, 135, 135, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 173, 173, 173, 173, 173, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, @@ -2607,189 +2634,213 @@ static unsigned short index2[] = { 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, - 173, 173, 173, 173, 173, 0, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 173, 173, 173, 173, 173, 173, 173, 173, 0, 83, 83, 83, 83, 83, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, - 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 83, 83, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 83, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 176, 176, 176, 176, 176, - 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 176, 176, 176, + 176, 176, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 80, 80, 80, 80, - 53, 53, 53, 53, 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 0, 148, 148, 148, 148, 148, 148, 148, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 80, + 80, 80, 80, 53, 53, 53, 53, 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 148, 148, 148, 148, 148, + 148, 148, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, - 0, 80, 135, 176, 83, 174, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 80, 135, 176, 83, 174, 174, 174, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 326, 326, 326, 326, 326, 326, 326, - 327, 327, 176, 176, 176, 80, 80, 80, 328, 327, 327, 327, 327, 327, 174, - 174, 174, 174, 174, 174, 174, 174, 86, 86, 86, 86, 86, 86, 86, 86, 80, - 80, 81, 81, 81, 81, 81, 86, 86, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 326, 326, 326, 326, 326, 326, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 328, 328, 328, 328, 328, 328, 328, 329, 329, 176, 176, 176, 80, 80, 80, + 330, 329, 329, 329, 329, 329, 174, 174, 174, 174, 174, 174, 174, 174, 86, + 86, 86, 86, 86, 86, 86, 86, 80, 80, 81, 81, 81, 81, 81, 86, 86, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 328, 328, 328, 328, 328, 328, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 81, 81, 81, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 81, 81, 81, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, + 35, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 49, 0, 49, 49, 0, 0, 49, 0, 0, 49, 49, 0, 0, 49, 49, 49, 49, 0, 49, 49, + 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 0, 35, 0, 35, 35, 35, 35, 35, 35, + 35, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 0, 49, 49, 49, 49, 0, + 0, 49, 49, 49, 49, 49, 49, 49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 0, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 49, 49, 0, 49, 49, 49, 49, 0, 49, 49, 49, 49, + 49, 0, 49, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 0, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, + 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 0, 49, 49, 0, 0, 49, 0, - 0, 49, 49, 0, 0, 49, 49, 49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 49, 35, - 35, 35, 35, 0, 35, 0, 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 49, 49, 0, 49, 49, 49, 49, 0, 0, 49, 49, 49, 49, 49, 49, - 49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 49, 49, 0, 49, 49, 49, 49, 0, 49, 49, 49, 49, 49, 0, 49, 0, 0, 0, 49, 49, - 49, 49, 49, 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, + 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 331, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 49, 49, 49, 49, 49, 331, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, + 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 331, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 329, 35, 35, 35, 35, 35, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 331, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 329, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 329, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 329, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, - 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 329, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 331, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 226, 35, 35, 35, 35, 35, 35, 49, 35, 0, 0, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 35, 0, 0, + 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 80, 80, 80, 80, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 80, 80, 80, 80, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 80, 80, 80, - 80, 80, 80, 80, 80, 135, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 135, 80, 80, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 135, 135, 135, 135, 80, 80, 80, 80, 80, 80, 80, 80, 135, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 135, 80, 80, 83, 83, 83, 83, 83, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 135, 0, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 0, 0, 81, 81, 81, 81, + 81, 81, 81, 0, 81, 81, 0, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, @@ -2803,11 +2854,18 @@ static unsigned short index2[] = { 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, - 0, 321, 321, 321, 321, 321, 321, 321, 321, 321, 86, 86, 86, 86, 86, 86, - 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, - 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 107, 107, 107, 0, 0, 322, 322, 322, 322, 322, 322, 322, 322, 322, 86, 86, + 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, + 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 325, 325, 325, 325, 325, 325, 325, 325, 325, + 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 81, 81, 81, 81, + 81, 81, 145, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 0, 0, 0, 0, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 0, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, 131, 0, 131, 0, 0, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 0, 131, 0, 131, 0, 0, 0, 0, 0, 0, 131, 0, 0, @@ -2821,7 +2879,7 @@ static unsigned short index2[] = { 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 26, 26, 26, 26, 239, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, @@ -2832,123 +2890,157 @@ static unsigned short index2[] = { 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 239, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 153, 153, 0, 0, 0, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 331, 0, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 222, 222, 0, 0, 0, 0, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 241, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 268, 268, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 0, 0, 0, 0, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 0, 0, 0, 0, 0, 0, 268, - 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 153, 153, 0, 0, 0, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 333, 0, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 222, 222, 0, 0, 0, 0, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 267, 334, 242, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 269, 269, 269, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 0, 0, 0, 0, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 0, 0, 0, 0, 0, 0, 0, 269, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 26, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 26, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 26, 26, 26, 26, 239, 239, 239, 239, 239, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 26, 26, 26, 239, + 26, 26, 26, 239, 239, 239, 335, 335, 335, 335, 335, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 26, 239, 26, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 26, 26, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 239, 239, 239, 239, 26, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 239, 239, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 239, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 26, 26, 26, 26, + 26, 26, 239, 26, 26, 26, 239, 239, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 239, 239, 0, 0, 0, 26, + 26, 26, 26, 239, 239, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 54, 54, - 54, 54, 54, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 0, 239, 239, 239, 239, 239, 239, + 239, 239, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 0, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 0, 0, 0, 0, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, @@ -2957,25 +3049,26 @@ static unsigned short index2[] = { 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 174, 174, 174, 174, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, 174, 174, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 174, 174, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, @@ -2988,17 +3081,17 @@ static unsigned short index2[] = { 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 273, 273, 273, 273, 0, 0, + 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 0, 0, }; /* decomposition data */ @@ -3970,102 +4063,102 @@ static unsigned int decomp_data[] = { 266, 28436, 266, 25237, 266, 25429, 266, 19968, 266, 19977, 266, 36938, 266, 24038, 266, 20013, 266, 21491, 266, 25351, 266, 36208, 266, 25171, 266, 31105, 266, 31354, 266, 21512, 266, 28288, 266, 26377, 266, 26376, - 266, 30003, 266, 21106, 266, 21942, 770, 12308, 26412, 12309, 770, 12308, - 19977, 12309, 770, 12308, 20108, 12309, 770, 12308, 23433, 12309, 770, - 12308, 28857, 12309, 770, 12308, 25171, 12309, 770, 12308, 30423, 12309, - 770, 12308, 21213, 12309, 770, 12308, 25943, 12309, 263, 24471, 263, - 21487, 256, 20029, 256, 20024, 256, 20033, 256, 131362, 256, 20320, 256, - 20398, 256, 20411, 256, 20482, 256, 20602, 256, 20633, 256, 20711, 256, - 20687, 256, 13470, 256, 132666, 256, 20813, 256, 20820, 256, 20836, 256, - 20855, 256, 132380, 256, 13497, 256, 20839, 256, 20877, 256, 132427, 256, - 20887, 256, 20900, 256, 20172, 256, 20908, 256, 20917, 256, 168415, 256, - 20981, 256, 20995, 256, 13535, 256, 21051, 256, 21062, 256, 21106, 256, - 21111, 256, 13589, 256, 21191, 256, 21193, 256, 21220, 256, 21242, 256, - 21253, 256, 21254, 256, 21271, 256, 21321, 256, 21329, 256, 21338, 256, - 21363, 256, 21373, 256, 21375, 256, 21375, 256, 21375, 256, 133676, 256, - 28784, 256, 21450, 256, 21471, 256, 133987, 256, 21483, 256, 21489, 256, - 21510, 256, 21662, 256, 21560, 256, 21576, 256, 21608, 256, 21666, 256, - 21750, 256, 21776, 256, 21843, 256, 21859, 256, 21892, 256, 21892, 256, - 21913, 256, 21931, 256, 21939, 256, 21954, 256, 22294, 256, 22022, 256, - 22295, 256, 22097, 256, 22132, 256, 20999, 256, 22766, 256, 22478, 256, - 22516, 256, 22541, 256, 22411, 256, 22578, 256, 22577, 256, 22700, 256, - 136420, 256, 22770, 256, 22775, 256, 22790, 256, 22810, 256, 22818, 256, - 22882, 256, 136872, 256, 136938, 256, 23020, 256, 23067, 256, 23079, 256, - 23000, 256, 23142, 256, 14062, 256, 14076, 256, 23304, 256, 23358, 256, - 23358, 256, 137672, 256, 23491, 256, 23512, 256, 23527, 256, 23539, 256, - 138008, 256, 23551, 256, 23558, 256, 24403, 256, 23586, 256, 14209, 256, - 23648, 256, 23662, 256, 23744, 256, 23693, 256, 138724, 256, 23875, 256, - 138726, 256, 23918, 256, 23915, 256, 23932, 256, 24033, 256, 24034, 256, - 14383, 256, 24061, 256, 24104, 256, 24125, 256, 24169, 256, 14434, 256, - 139651, 256, 14460, 256, 24240, 256, 24243, 256, 24246, 256, 24266, 256, - 172946, 256, 24318, 256, 140081, 256, 140081, 256, 33281, 256, 24354, - 256, 24354, 256, 14535, 256, 144056, 256, 156122, 256, 24418, 256, 24427, - 256, 14563, 256, 24474, 256, 24525, 256, 24535, 256, 24569, 256, 24705, - 256, 14650, 256, 14620, 256, 24724, 256, 141012, 256, 24775, 256, 24904, - 256, 24908, 256, 24910, 256, 24908, 256, 24954, 256, 24974, 256, 25010, - 256, 24996, 256, 25007, 256, 25054, 256, 25074, 256, 25078, 256, 25104, - 256, 25115, 256, 25181, 256, 25265, 256, 25300, 256, 25424, 256, 142092, - 256, 25405, 256, 25340, 256, 25448, 256, 25475, 256, 25572, 256, 142321, - 256, 25634, 256, 25541, 256, 25513, 256, 14894, 256, 25705, 256, 25726, - 256, 25757, 256, 25719, 256, 14956, 256, 25935, 256, 25964, 256, 143370, - 256, 26083, 256, 26360, 256, 26185, 256, 15129, 256, 26257, 256, 15112, - 256, 15076, 256, 20882, 256, 20885, 256, 26368, 256, 26268, 256, 32941, - 256, 17369, 256, 26391, 256, 26395, 256, 26401, 256, 26462, 256, 26451, - 256, 144323, 256, 15177, 256, 26618, 256, 26501, 256, 26706, 256, 26757, - 256, 144493, 256, 26766, 256, 26655, 256, 26900, 256, 15261, 256, 26946, - 256, 27043, 256, 27114, 256, 27304, 256, 145059, 256, 27355, 256, 15384, - 256, 27425, 256, 145575, 256, 27476, 256, 15438, 256, 27506, 256, 27551, - 256, 27578, 256, 27579, 256, 146061, 256, 138507, 256, 146170, 256, - 27726, 256, 146620, 256, 27839, 256, 27853, 256, 27751, 256, 27926, 256, - 27966, 256, 28023, 256, 27969, 256, 28009, 256, 28024, 256, 28037, 256, - 146718, 256, 27956, 256, 28207, 256, 28270, 256, 15667, 256, 28363, 256, - 28359, 256, 147153, 256, 28153, 256, 28526, 256, 147294, 256, 147342, - 256, 28614, 256, 28729, 256, 28702, 256, 28699, 256, 15766, 256, 28746, - 256, 28797, 256, 28791, 256, 28845, 256, 132389, 256, 28997, 256, 148067, - 256, 29084, 256, 148395, 256, 29224, 256, 29237, 256, 29264, 256, 149000, - 256, 29312, 256, 29333, 256, 149301, 256, 149524, 256, 29562, 256, 29579, - 256, 16044, 256, 29605, 256, 16056, 256, 16056, 256, 29767, 256, 29788, - 256, 29809, 256, 29829, 256, 29898, 256, 16155, 256, 29988, 256, 150582, - 256, 30014, 256, 150674, 256, 30064, 256, 139679, 256, 30224, 256, - 151457, 256, 151480, 256, 151620, 256, 16380, 256, 16392, 256, 30452, - 256, 151795, 256, 151794, 256, 151833, 256, 151859, 256, 30494, 256, - 30495, 256, 30495, 256, 30538, 256, 16441, 256, 30603, 256, 16454, 256, - 16534, 256, 152605, 256, 30798, 256, 30860, 256, 30924, 256, 16611, 256, - 153126, 256, 31062, 256, 153242, 256, 153285, 256, 31119, 256, 31211, - 256, 16687, 256, 31296, 256, 31306, 256, 31311, 256, 153980, 256, 154279, - 256, 154279, 256, 31470, 256, 16898, 256, 154539, 256, 31686, 256, 31689, - 256, 16935, 256, 154752, 256, 31954, 256, 17056, 256, 31976, 256, 31971, - 256, 32000, 256, 155526, 256, 32099, 256, 17153, 256, 32199, 256, 32258, - 256, 32325, 256, 17204, 256, 156200, 256, 156231, 256, 17241, 256, - 156377, 256, 32634, 256, 156478, 256, 32661, 256, 32762, 256, 32773, 256, - 156890, 256, 156963, 256, 32864, 256, 157096, 256, 32880, 256, 144223, - 256, 17365, 256, 32946, 256, 33027, 256, 17419, 256, 33086, 256, 23221, - 256, 157607, 256, 157621, 256, 144275, 256, 144284, 256, 33281, 256, - 33284, 256, 36766, 256, 17515, 256, 33425, 256, 33419, 256, 33437, 256, - 21171, 256, 33457, 256, 33459, 256, 33469, 256, 33510, 256, 158524, 256, - 33509, 256, 33565, 256, 33635, 256, 33709, 256, 33571, 256, 33725, 256, - 33767, 256, 33879, 256, 33619, 256, 33738, 256, 33740, 256, 33756, 256, - 158774, 256, 159083, 256, 158933, 256, 17707, 256, 34033, 256, 34035, - 256, 34070, 256, 160714, 256, 34148, 256, 159532, 256, 17757, 256, 17761, - 256, 159665, 256, 159954, 256, 17771, 256, 34384, 256, 34396, 256, 34407, - 256, 34409, 256, 34473, 256, 34440, 256, 34574, 256, 34530, 256, 34681, - 256, 34600, 256, 34667, 256, 34694, 256, 17879, 256, 34785, 256, 34817, - 256, 17913, 256, 34912, 256, 34915, 256, 161383, 256, 35031, 256, 35038, - 256, 17973, 256, 35066, 256, 13499, 256, 161966, 256, 162150, 256, 18110, - 256, 18119, 256, 35488, 256, 35565, 256, 35722, 256, 35925, 256, 162984, - 256, 36011, 256, 36033, 256, 36123, 256, 36215, 256, 163631, 256, 133124, - 256, 36299, 256, 36284, 256, 36336, 256, 133342, 256, 36564, 256, 36664, - 256, 165330, 256, 165357, 256, 37012, 256, 37105, 256, 37137, 256, - 165678, 256, 37147, 256, 37432, 256, 37591, 256, 37592, 256, 37500, 256, - 37881, 256, 37909, 256, 166906, 256, 38283, 256, 18837, 256, 38327, 256, - 167287, 256, 18918, 256, 38595, 256, 23986, 256, 38691, 256, 168261, 256, - 168474, 256, 19054, 256, 19062, 256, 38880, 256, 168970, 256, 19122, 256, - 169110, 256, 38923, 256, 38923, 256, 38953, 256, 169398, 256, 39138, 256, - 19251, 256, 39209, 256, 39335, 256, 39362, 256, 39422, 256, 19406, 256, - 170800, 256, 39698, 256, 40000, 256, 40189, 256, 19662, 256, 19693, 256, - 40295, 256, 172238, 256, 19704, 256, 172293, 256, 172558, 256, 172689, - 256, 40635, 256, 19798, 256, 40697, 256, 40702, 256, 40709, 256, 40719, - 256, 40726, 256, 40763, 256, 173568, + 266, 30003, 266, 21106, 266, 21942, 266, 37197, 770, 12308, 26412, 12309, + 770, 12308, 19977, 12309, 770, 12308, 20108, 12309, 770, 12308, 23433, + 12309, 770, 12308, 28857, 12309, 770, 12308, 25171, 12309, 770, 12308, + 30423, 12309, 770, 12308, 21213, 12309, 770, 12308, 25943, 12309, 263, + 24471, 263, 21487, 256, 20029, 256, 20024, 256, 20033, 256, 131362, 256, + 20320, 256, 20398, 256, 20411, 256, 20482, 256, 20602, 256, 20633, 256, + 20711, 256, 20687, 256, 13470, 256, 132666, 256, 20813, 256, 20820, 256, + 20836, 256, 20855, 256, 132380, 256, 13497, 256, 20839, 256, 20877, 256, + 132427, 256, 20887, 256, 20900, 256, 20172, 256, 20908, 256, 20917, 256, + 168415, 256, 20981, 256, 20995, 256, 13535, 256, 21051, 256, 21062, 256, + 21106, 256, 21111, 256, 13589, 256, 21191, 256, 21193, 256, 21220, 256, + 21242, 256, 21253, 256, 21254, 256, 21271, 256, 21321, 256, 21329, 256, + 21338, 256, 21363, 256, 21373, 256, 21375, 256, 21375, 256, 21375, 256, + 133676, 256, 28784, 256, 21450, 256, 21471, 256, 133987, 256, 21483, 256, + 21489, 256, 21510, 256, 21662, 256, 21560, 256, 21576, 256, 21608, 256, + 21666, 256, 21750, 256, 21776, 256, 21843, 256, 21859, 256, 21892, 256, + 21892, 256, 21913, 256, 21931, 256, 21939, 256, 21954, 256, 22294, 256, + 22022, 256, 22295, 256, 22097, 256, 22132, 256, 20999, 256, 22766, 256, + 22478, 256, 22516, 256, 22541, 256, 22411, 256, 22578, 256, 22577, 256, + 22700, 256, 136420, 256, 22770, 256, 22775, 256, 22790, 256, 22810, 256, + 22818, 256, 22882, 256, 136872, 256, 136938, 256, 23020, 256, 23067, 256, + 23079, 256, 23000, 256, 23142, 256, 14062, 256, 14076, 256, 23304, 256, + 23358, 256, 23358, 256, 137672, 256, 23491, 256, 23512, 256, 23527, 256, + 23539, 256, 138008, 256, 23551, 256, 23558, 256, 24403, 256, 23586, 256, + 14209, 256, 23648, 256, 23662, 256, 23744, 256, 23693, 256, 138724, 256, + 23875, 256, 138726, 256, 23918, 256, 23915, 256, 23932, 256, 24033, 256, + 24034, 256, 14383, 256, 24061, 256, 24104, 256, 24125, 256, 24169, 256, + 14434, 256, 139651, 256, 14460, 256, 24240, 256, 24243, 256, 24246, 256, + 24266, 256, 172946, 256, 24318, 256, 140081, 256, 140081, 256, 33281, + 256, 24354, 256, 24354, 256, 14535, 256, 144056, 256, 156122, 256, 24418, + 256, 24427, 256, 14563, 256, 24474, 256, 24525, 256, 24535, 256, 24569, + 256, 24705, 256, 14650, 256, 14620, 256, 24724, 256, 141012, 256, 24775, + 256, 24904, 256, 24908, 256, 24910, 256, 24908, 256, 24954, 256, 24974, + 256, 25010, 256, 24996, 256, 25007, 256, 25054, 256, 25074, 256, 25078, + 256, 25104, 256, 25115, 256, 25181, 256, 25265, 256, 25300, 256, 25424, + 256, 142092, 256, 25405, 256, 25340, 256, 25448, 256, 25475, 256, 25572, + 256, 142321, 256, 25634, 256, 25541, 256, 25513, 256, 14894, 256, 25705, + 256, 25726, 256, 25757, 256, 25719, 256, 14956, 256, 25935, 256, 25964, + 256, 143370, 256, 26083, 256, 26360, 256, 26185, 256, 15129, 256, 26257, + 256, 15112, 256, 15076, 256, 20882, 256, 20885, 256, 26368, 256, 26268, + 256, 32941, 256, 17369, 256, 26391, 256, 26395, 256, 26401, 256, 26462, + 256, 26451, 256, 144323, 256, 15177, 256, 26618, 256, 26501, 256, 26706, + 256, 26757, 256, 144493, 256, 26766, 256, 26655, 256, 26900, 256, 15261, + 256, 26946, 256, 27043, 256, 27114, 256, 27304, 256, 145059, 256, 27355, + 256, 15384, 256, 27425, 256, 145575, 256, 27476, 256, 15438, 256, 27506, + 256, 27551, 256, 27578, 256, 27579, 256, 146061, 256, 138507, 256, + 146170, 256, 27726, 256, 146620, 256, 27839, 256, 27853, 256, 27751, 256, + 27926, 256, 27966, 256, 28023, 256, 27969, 256, 28009, 256, 28024, 256, + 28037, 256, 146718, 256, 27956, 256, 28207, 256, 28270, 256, 15667, 256, + 28363, 256, 28359, 256, 147153, 256, 28153, 256, 28526, 256, 147294, 256, + 147342, 256, 28614, 256, 28729, 256, 28702, 256, 28699, 256, 15766, 256, + 28746, 256, 28797, 256, 28791, 256, 28845, 256, 132389, 256, 28997, 256, + 148067, 256, 29084, 256, 148395, 256, 29224, 256, 29237, 256, 29264, 256, + 149000, 256, 29312, 256, 29333, 256, 149301, 256, 149524, 256, 29562, + 256, 29579, 256, 16044, 256, 29605, 256, 16056, 256, 16056, 256, 29767, + 256, 29788, 256, 29809, 256, 29829, 256, 29898, 256, 16155, 256, 29988, + 256, 150582, 256, 30014, 256, 150674, 256, 30064, 256, 139679, 256, + 30224, 256, 151457, 256, 151480, 256, 151620, 256, 16380, 256, 16392, + 256, 30452, 256, 151795, 256, 151794, 256, 151833, 256, 151859, 256, + 30494, 256, 30495, 256, 30495, 256, 30538, 256, 16441, 256, 30603, 256, + 16454, 256, 16534, 256, 152605, 256, 30798, 256, 30860, 256, 30924, 256, + 16611, 256, 153126, 256, 31062, 256, 153242, 256, 153285, 256, 31119, + 256, 31211, 256, 16687, 256, 31296, 256, 31306, 256, 31311, 256, 153980, + 256, 154279, 256, 154279, 256, 31470, 256, 16898, 256, 154539, 256, + 31686, 256, 31689, 256, 16935, 256, 154752, 256, 31954, 256, 17056, 256, + 31976, 256, 31971, 256, 32000, 256, 155526, 256, 32099, 256, 17153, 256, + 32199, 256, 32258, 256, 32325, 256, 17204, 256, 156200, 256, 156231, 256, + 17241, 256, 156377, 256, 32634, 256, 156478, 256, 32661, 256, 32762, 256, + 32773, 256, 156890, 256, 156963, 256, 32864, 256, 157096, 256, 32880, + 256, 144223, 256, 17365, 256, 32946, 256, 33027, 256, 17419, 256, 33086, + 256, 23221, 256, 157607, 256, 157621, 256, 144275, 256, 144284, 256, + 33281, 256, 33284, 256, 36766, 256, 17515, 256, 33425, 256, 33419, 256, + 33437, 256, 21171, 256, 33457, 256, 33459, 256, 33469, 256, 33510, 256, + 158524, 256, 33509, 256, 33565, 256, 33635, 256, 33709, 256, 33571, 256, + 33725, 256, 33767, 256, 33879, 256, 33619, 256, 33738, 256, 33740, 256, + 33756, 256, 158774, 256, 159083, 256, 158933, 256, 17707, 256, 34033, + 256, 34035, 256, 34070, 256, 160714, 256, 34148, 256, 159532, 256, 17757, + 256, 17761, 256, 159665, 256, 159954, 256, 17771, 256, 34384, 256, 34396, + 256, 34407, 256, 34409, 256, 34473, 256, 34440, 256, 34574, 256, 34530, + 256, 34681, 256, 34600, 256, 34667, 256, 34694, 256, 17879, 256, 34785, + 256, 34817, 256, 17913, 256, 34912, 256, 34915, 256, 161383, 256, 35031, + 256, 35038, 256, 17973, 256, 35066, 256, 13499, 256, 161966, 256, 162150, + 256, 18110, 256, 18119, 256, 35488, 256, 35565, 256, 35722, 256, 35925, + 256, 162984, 256, 36011, 256, 36033, 256, 36123, 256, 36215, 256, 163631, + 256, 133124, 256, 36299, 256, 36284, 256, 36336, 256, 133342, 256, 36564, + 256, 36664, 256, 165330, 256, 165357, 256, 37012, 256, 37105, 256, 37137, + 256, 165678, 256, 37147, 256, 37432, 256, 37591, 256, 37592, 256, 37500, + 256, 37881, 256, 37909, 256, 166906, 256, 38283, 256, 18837, 256, 38327, + 256, 167287, 256, 18918, 256, 38595, 256, 23986, 256, 38691, 256, 168261, + 256, 168474, 256, 19054, 256, 19062, 256, 38880, 256, 168970, 256, 19122, + 256, 169110, 256, 38923, 256, 38923, 256, 38953, 256, 169398, 256, 39138, + 256, 19251, 256, 39209, 256, 39335, 256, 39362, 256, 39422, 256, 19406, + 256, 170800, 256, 39698, 256, 40000, 256, 40189, 256, 19662, 256, 19693, + 256, 40295, 256, 172238, 256, 19704, 256, 172293, 256, 172558, 256, + 172689, 256, 40635, 256, 19798, 256, 40697, 256, 40702, 256, 40709, 256, + 40719, 256, 40726, 256, 40763, 256, 173568, }; /* index tables for the decomposition data */ @@ -5187,11 +5280,11 @@ static unsigned short decomp_index2[] = { 13044, 13046, 13048, 13050, 13052, 13054, 13056, 13058, 13060, 13062, 13064, 13066, 13068, 13070, 13072, 13074, 13076, 13078, 13080, 13082, 13084, 13086, 13088, 13090, 13092, 13094, 13096, 13098, 13100, 13102, - 13104, 13106, 13108, 13110, 13112, 13114, 13116, 13118, 13120, 0, 0, 0, - 0, 0, 13122, 13126, 13130, 13134, 13138, 13142, 13146, 13150, 13154, 0, - 0, 0, 0, 0, 0, 0, 13158, 13160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 13104, 13106, 13108, 13110, 13112, 13114, 13116, 13118, 13120, 13122, 0, + 0, 0, 0, 13124, 13128, 13132, 13136, 13140, 13144, 13148, 13152, 13156, + 0, 0, 0, 0, 0, 0, 0, 13160, 13162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13162, 13164, 13166, 13168, 13170, 13172, 13174, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13164, 13166, 13168, 13170, 13172, 13174, 13176, 13178, 13180, 13182, 13184, 13186, 13188, 13190, 13192, 13194, 13196, 13198, 13200, 13202, 13204, 13206, 13208, 13210, 13212, 13214, 13216, 13218, 13220, 13222, 13224, 13226, 13228, 13230, 13232, 13234, @@ -5245,11 +5338,11 @@ static unsigned short decomp_index2[] = { 14176, 14178, 14180, 14182, 14184, 14186, 14188, 14190, 14192, 14194, 14196, 14198, 14200, 14202, 14204, 14206, 14208, 14210, 14212, 14214, 14216, 14218, 14220, 14222, 14224, 14226, 14228, 14230, 14232, 14234, - 14236, 14238, 14240, 14242, 14244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14236, 14238, 14240, 14242, 14244, 14246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; /* NFC pairs */ @@ -5665,133 +5758,135 @@ static unsigned int comp_data[] = { }; static const change_record change_records_3_2_0[] = { - { 255, 255, 255, 255, 0 }, - { 11, 255, 255, 255, 0 }, - { 10, 255, 255, 255, 0 }, - { 255, 30, 255, 255, 0 }, - { 255, 2, 255, 255, 0 }, - { 19, 21, 255, 255, 0 }, - { 255, 255, 2, 255, 0 }, - { 255, 255, 3, 255, 0 }, - { 255, 255, 1, 255, 0 }, - { 255, 0, 255, 255, 0 }, - { 255, 29, 255, 255, 0 }, - { 255, 26, 255, 255, 0 }, - { 5, 255, 255, 255, 0 }, - { 14, 6, 255, 255, 0 }, - { 15, 255, 255, 255, 0 }, - { 255, 255, 255, 255, 1.0 }, - { 255, 255, 255, 255, 2.0 }, - { 255, 255, 255, 255, 3.0 }, - { 255, 255, 255, 255, 4.0 }, - { 255, 255, 255, 255, -1 }, - { 14, 255, 255, 255, 0 }, - { 255, 255, 255, 0, 0 }, - { 255, 7, 1, 255, 0 }, - { 255, 7, 2, 255, 0 }, - { 255, 7, 3, 255, 0 }, - { 255, 7, 4, 255, 0 }, - { 255, 7, 5, 255, 0 }, - { 255, 7, 6, 255, 0 }, - { 255, 7, 7, 255, 0 }, - { 255, 7, 8, 255, 0 }, - { 255, 7, 9, 255, 0 }, - { 255, 19, 255, 255, 0 }, - { 1, 5, 255, 255, 0 }, - { 255, 10, 255, 255, 0 }, - { 18, 255, 255, 255, 0 }, - { 19, 255, 255, 255, 0 }, - { 255, 255, 0, 255, 0 }, - { 255, 255, 4, 255, 0 }, - { 255, 255, 5, 255, 0 }, - { 255, 255, 6, 255, 0 }, - { 255, 255, 7, 255, 0 }, - { 255, 255, 8, 255, 0 }, - { 255, 255, 9, 255, 0 }, - { 19, 30, 255, 255, 0 }, - { 255, 8, 255, 255, 0 }, - { 255, 27, 255, 255, 0 }, - { 255, 22, 255, 255, 0 }, - { 255, 23, 255, 255, 0 }, - { 9, 255, 255, 255, 0 }, - { 14, 4, 255, 255, 0 }, - { 255, 20, 255, 255, 0 }, - { 255, 255, 255, 255, 1e+16 }, - { 255, 255, 255, 255, 1e+20 }, - { 255, 19, 255, 255, -1 }, - { 1, 255, 255, 0, 0 }, + { 255, 255, 255, 255, 255, 0 }, + { 11, 255, 255, 255, 255, 0 }, + { 10, 255, 255, 255, 255, 0 }, + { 255, 30, 255, 255, 255, 0 }, + { 255, 2, 255, 255, 255, 0 }, + { 19, 21, 255, 255, 255, 0 }, + { 255, 255, 2, 255, 255, 0 }, + { 255, 255, 3, 255, 255, 0 }, + { 255, 255, 1, 255, 255, 0 }, + { 255, 0, 255, 255, 255, 0 }, + { 255, 29, 255, 255, 255, 0 }, + { 255, 26, 255, 255, 255, 0 }, + { 5, 255, 255, 255, 255, 0 }, + { 14, 6, 255, 255, 255, 0 }, + { 15, 255, 255, 255, 255, 0 }, + { 255, 255, 255, 255, 255, 1.0 }, + { 255, 255, 255, 255, 255, 2.0 }, + { 255, 255, 255, 255, 255, 3.0 }, + { 255, 255, 255, 255, 255, 4.0 }, + { 255, 255, 255, 255, 255, -1 }, + { 14, 255, 255, 255, 255, 0 }, + { 255, 255, 255, 0, 255, 0 }, + { 255, 7, 1, 255, 255, 0 }, + { 255, 7, 2, 255, 255, 0 }, + { 255, 7, 3, 255, 255, 0 }, + { 255, 7, 4, 255, 255, 0 }, + { 255, 7, 5, 255, 255, 0 }, + { 255, 7, 6, 255, 255, 0 }, + { 255, 7, 7, 255, 255, 0 }, + { 255, 7, 8, 255, 255, 0 }, + { 255, 7, 9, 255, 255, 0 }, + { 255, 19, 255, 255, 255, 0 }, + { 1, 5, 255, 255, 255, 0 }, + { 1, 19, 255, 255, 255, 0 }, + { 255, 10, 255, 255, 255, 0 }, + { 18, 255, 255, 255, 255, 0 }, + { 19, 255, 255, 255, 255, 0 }, + { 255, 255, 0, 255, 255, 0 }, + { 255, 255, 4, 255, 255, 0 }, + { 255, 255, 5, 255, 255, 0 }, + { 255, 255, 6, 255, 255, 0 }, + { 255, 255, 7, 255, 255, 0 }, + { 255, 255, 8, 255, 255, 0 }, + { 255, 255, 9, 255, 255, 0 }, + { 19, 30, 255, 255, 255, 0 }, + { 255, 8, 255, 255, 255, 0 }, + { 255, 27, 255, 255, 255, 0 }, + { 255, 255, 255, 255, 5, 0 }, + { 255, 22, 255, 255, 255, 0 }, + { 255, 23, 255, 255, 255, 0 }, + { 9, 255, 255, 255, 255, 0 }, + { 14, 4, 255, 255, 255, 0 }, + { 255, 20, 255, 255, 255, 0 }, + { 255, 255, 255, 255, 255, 1e+16 }, + { 255, 255, 255, 255, 255, 1e+20 }, + { 255, 19, 255, 255, 255, -1 }, + { 1, 255, 255, 0, 255, 0 }, }; static unsigned char changes_3_2_0_index[] = { 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 2, 2, 2, 38, 39, 2, 40, 2, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 2, 52, 2, 2, 53, 54, 55, 56, 57, 2, 58, 59, 60, 61, 2, 2, 62, 63, - 64, 65, 66, 66, 2, 2, 2, 2, 67, 68, 69, 70, 71, 72, 73, 2, 2, 2, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 2, 2, 2, 2, 2, 2, 84, 2, 2, 2, 2, 2, 85, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 86, 2, 87, 2, 2, 2, 2, 2, 2, 2, 2, - 88, 89, 2, 2, 2, 2, 2, 2, 2, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 91, - 92, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 93, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 94, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 95, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 96, 97, 2, 2, 2, 2, 2, 2, 2, 2, 98, 50, 50, - 99, 100, 50, 101, 102, 103, 104, 105, 106, 107, 108, 109, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 50, 51, 2, 52, 2, 2, 53, 54, 55, 56, 57, 2, 58, 59, 60, 61, 2, 62, 63, + 64, 65, 66, 67, 67, 2, 2, 2, 2, 68, 69, 70, 71, 72, 73, 74, 2, 2, 2, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 2, 2, 2, 2, 2, 2, 85, 2, 2, 2, 2, 2, + 86, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 87, 2, 88, 2, 2, 2, 2, 2, 2, 2, 2, + 89, 90, 2, 2, 2, 2, 2, 2, 2, 91, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 92, + 93, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 94, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 95, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 96, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 97, 98, 2, 2, 2, 2, 2, 2, 2, 2, 99, 50, 50, + 100, 101, 50, 102, 103, 104, 105, 106, 107, 108, 109, 110, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 110, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 111, 112, 113, 114, 115, 116, 2, 2, 117, 118, 119, 2, 120, - 121, 122, 123, 124, 125, 2, 126, 127, 128, 129, 130, 131, 2, 50, 50, 132, - 2, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 2, 2, 143, 2, 2, 2, - 144, 145, 146, 147, 148, 149, 150, 2, 2, 151, 2, 152, 153, 154, 155, 2, - 2, 156, 2, 2, 2, 157, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, - 50, 50, 158, 159, 50, 160, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, 50, 50, 161, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 111, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 50, 50, 50, 50, 162, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 112, 113, 114, 115, 116, 117, 2, 2, 118, 119, 120, 2, 121, + 122, 123, 124, 125, 126, 2, 127, 128, 129, 130, 131, 132, 2, 50, 50, 133, + 2, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 2, 2, 144, 2, 2, 2, + 145, 146, 147, 148, 149, 150, 151, 2, 152, 153, 2, 154, 155, 156, 157, 2, + 2, 158, 2, 2, 2, 159, 2, 2, 160, 161, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, + 50, 50, 50, 162, 163, 50, 164, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, 50, 50, 165, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 50, 50, 50, 50, 163, 164, 165, 166, 2, 2, 2, 2, 2, 2, 167, 168, + 2, 2, 50, 50, 50, 50, 166, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 50, 50, 50, 50, 167, 168, 169, 170, 2, 2, 2, 2, 2, 2, 171, + 172, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 173, 50, 50, 50, 50, 50, + 174, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 175, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 176, 177, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 178, + 179, 180, 2, 181, 2, 2, 182, 2, 2, 2, 183, 184, 185, 50, 50, 50, 50, 50, + 186, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 187, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 50, 188, 189, 2, 2, 2, 2, 2, 2, 2, 2, 2, 190, 191, 2, 2, 192, + 193, 194, 195, 196, 2, 50, 50, 50, 50, 50, 50, 50, 197, 198, 199, 200, + 201, 202, 203, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 204, 205, 96, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 85, 206, 2, 207, 208, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 169, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 170, 171, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 172, 173, 174, 2, 175, 2, 2, 176, 2, 2, 2, 177, 178, 179, 50, - 50, 50, 50, 50, 180, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 181, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 182, - 183, 2, 2, 184, 185, 186, 187, 188, 2, 50, 50, 50, 50, 189, 190, 50, 191, - 192, 193, 194, 195, 196, 197, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 198, - 199, 95, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 84, 200, 2, 201, - 202, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 203, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 204, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 205, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 209, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 210, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 211, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 206, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 212, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 207, 50, 208, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 213, 50, 214, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 209, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 215, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 203, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 209, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6026,8 +6121,8 @@ static unsigned char changes_3_2_0_index[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 50, 210, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 50, 216, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6090,7 +6185,7 @@ static unsigned char changes_3_2_0_index[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; static unsigned char changes_3_2_0_data[] = { @@ -6176,9 +6271,9 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, @@ -6216,7 +6311,7 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 20, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, @@ -6225,9 +6320,9 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6314,7 +6409,7 @@ static unsigned char changes_3_2_0_data[] = { 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, @@ -6356,8 +6451,8 @@ static unsigned char changes_3_2_0_data[] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, @@ -6372,29 +6467,29 @@ static unsigned char changes_3_2_0_data[] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 36, 4, 0, 0, - 37, 38, 39, 40, 41, 42, 1, 1, 0, 0, 0, 4, 36, 8, 6, 7, 37, 38, 39, 40, - 41, 42, 1, 1, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 37, 4, 0, 0, + 38, 39, 40, 41, 42, 43, 1, 1, 0, 0, 0, 4, 37, 8, 6, 7, 38, 39, 40, 41, + 42, 43, 1, 1, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6405,180 +6500,187 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, - 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, + 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, + 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6586,37 +6688,35 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, - 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6624,549 +6724,576 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, + 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, + 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, + 21, 21, 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 14, 14, 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 9, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, + 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, - 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 9, 9, 0, 0, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, - 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, + 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, - 9, 9, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, - 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 9, 0, 9, - 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, - 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9, + 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 9, 0, 9, 0, 0, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7174,25 +7301,25 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7201,29 +7328,29 @@ static unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const change_record* get_change_3_2_0(Py_UCS4 n) diff --git a/Modules/unicodename_db.h b/Modules/unicodename_db.h index d0f9cb4dbc..a81d8e31e6 100644 --- a/Modules/unicodename_db.h +++ b/Modules/unicodename_db.h @@ -4,246 +4,247 @@ /* lexicon */ static unsigned char lexicon[] = { - 76, 69, 84, 84, 69, 210, 83, 73, 71, 206, 87, 73, 84, 200, 83, 89, 76, - 76, 65, 66, 76, 197, 83, 77, 65, 76, 204, 67, 65, 80, 73, 84, 65, 204, - 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 76, 65, 84, 73, 206, 67, 85, 78, - 69, 73, 70, 79, 82, 205, 65, 82, 65, 66, 73, 195, 89, 201, 67, 74, 203, + 76, 69, 84, 84, 69, 210, 83, 73, 71, 206, 87, 73, 84, 200, 83, 77, 65, + 76, 204, 83, 89, 76, 76, 65, 66, 76, 197, 67, 65, 80, 73, 84, 65, 204, + 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 76, 65, 84, 73, 206, 65, 82, 65, + 66, 73, 195, 67, 85, 78, 69, 73, 70, 79, 82, 205, 89, 201, 67, 74, 203, 77, 65, 84, 72, 69, 77, 65, 84, 73, 67, 65, 204, 69, 71, 89, 80, 84, 73, 65, 206, 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 83, 89, 77, - 66, 79, 204, 68, 73, 71, 73, 212, 70, 79, 82, 77, 128, 67, 65, 78, 65, - 68, 73, 65, 206, 83, 89, 76, 76, 65, 66, 73, 67, 211, 83, 73, 71, 78, 87, - 82, 73, 84, 73, 78, 199, 86, 79, 87, 69, 204, 84, 73, 77, 69, 211, 66, - 65, 77, 85, 205, 65, 78, 196, 66, 79, 76, 196, 65, 78, 65, 84, 79, 76, - 73, 65, 206, 72, 65, 78, 71, 85, 204, 76, 73, 78, 69, 65, 210, 71, 82, - 69, 69, 203, 77, 85, 83, 73, 67, 65, 204, 76, 73, 71, 65, 84, 85, 82, - 197, 69, 84, 72, 73, 79, 80, 73, 195, 193, 70, 79, 210, 67, 89, 82, 73, - 76, 76, 73, 195, 73, 84, 65, 76, 73, 195, 67, 79, 77, 66, 73, 78, 73, 78, - 199, 82, 65, 68, 73, 67, 65, 204, 83, 65, 78, 83, 45, 83, 69, 82, 73, - 198, 78, 85, 77, 66, 69, 210, 67, 73, 82, 67, 76, 69, 196, 84, 65, 77, - 73, 204, 84, 65, 201, 70, 73, 78, 65, 204, 65, 82, 82, 79, 87, 128, 86, - 65, 201, 76, 69, 70, 212, 82, 73, 71, 72, 212, 83, 81, 85, 65, 82, 197, - 68, 79, 85, 66, 76, 197, 65, 82, 82, 79, 215, 83, 73, 71, 78, 128, 65, - 66, 79, 86, 69, 128, 66, 69, 76, 79, 87, 128, 86, 65, 82, 73, 65, 84, 73, - 79, 206, 66, 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 66, - 89, 90, 65, 78, 84, 73, 78, 197, 87, 72, 73, 84, 197, 66, 76, 65, 67, - 203, 65, 128, 73, 83, 79, 76, 65, 84, 69, 196, 77, 79, 68, 73, 70, 73, - 69, 210, 194, 75, 65, 84, 65, 75, 65, 78, 193, 85, 128, 77, 89, 65, 78, - 77, 65, 210, 68, 79, 212, 75, 65, 78, 71, 88, 201, 75, 73, 75, 65, 75, - 85, 201, 77, 69, 78, 68, 197, 73, 128, 79, 198, 84, 73, 66, 69, 84, 65, - 206, 79, 128, 72, 69, 65, 86, 217, 86, 69, 82, 84, 73, 67, 65, 204, 73, - 78, 73, 84, 73, 65, 204, 77, 65, 82, 75, 128, 77, 69, 69, 205, 67, 79, - 80, 84, 73, 195, 75, 72, 77, 69, 210, 82, 73, 71, 72, 84, 87, 65, 82, 68, - 211, 65, 66, 79, 86, 197, 67, 65, 82, 82, 73, 69, 210, 89, 69, 200, 67, - 72, 69, 82, 79, 75, 69, 197, 80, 76, 85, 211, 68, 69, 86, 65, 78, 65, 71, - 65, 82, 201, 80, 72, 65, 83, 69, 45, 197, 77, 79, 78, 71, 79, 76, 73, 65, - 206, 83, 84, 82, 79, 75, 69, 128, 76, 69, 70, 84, 87, 65, 82, 68, 211, - 83, 89, 77, 66, 79, 76, 128, 66, 79, 216, 84, 73, 76, 197, 68, 85, 80, - 76, 79, 89, 65, 206, 77, 73, 68, 68, 76, 197, 80, 65, 82, 69, 78, 84, 72, - 69, 83, 73, 90, 69, 196, 83, 81, 85, 65, 82, 69, 196, 84, 72, 65, 205, - 79, 78, 69, 128, 213, 74, 79, 78, 71, 83, 69, 79, 78, 199, 84, 87, 79, - 128, 67, 79, 78, 83, 79, 78, 65, 78, 212, 72, 69, 66, 82, 69, 215, 77, - 73, 65, 207, 85, 208, 72, 79, 79, 75, 128, 71, 69, 79, 82, 71, 73, 65, - 206, 79, 86, 69, 210, 68, 82, 65, 87, 73, 78, 71, 211, 72, 77, 79, 78, - 199, 79, 78, 197, 80, 65, 72, 65, 87, 200, 84, 87, 207, 68, 79, 87, 206, - 73, 78, 68, 69, 216, 67, 72, 79, 83, 69, 79, 78, 199, 76, 79, 215, 86, - 79, 67, 65, 76, 73, 195, 84, 72, 82, 69, 197, 72, 65, 76, 70, 87, 73, 68, - 84, 200, 72, 65, 78, 68, 45, 70, 73, 83, 212, 77, 69, 82, 79, 73, 84, 73, - 195, 66, 65, 76, 73, 78, 69, 83, 197, 77, 65, 82, 203, 83, 67, 82, 73, - 80, 212, 73, 68, 69, 79, 71, 82, 65, 205, 80, 72, 65, 83, 69, 45, 196, - 84, 79, 128, 65, 76, 67, 72, 69, 77, 73, 67, 65, 204, 65, 76, 69, 198, - 72, 73, 71, 200, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 83, 73, 78, - 72, 65, 76, 193, 78, 85, 77, 69, 82, 73, 195, 66, 65, 82, 128, 84, 79, - 78, 197, 66, 82, 65, 72, 77, 201, 72, 85, 78, 71, 65, 82, 73, 65, 206, - 84, 72, 82, 69, 69, 128, 84, 72, 85, 77, 194, 70, 79, 85, 82, 128, 66, - 65, 82, 194, 72, 65, 200, 72, 65, 128, 78, 79, 82, 84, 200, 70, 85, 76, - 76, 87, 73, 68, 84, 200, 66, 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, - 204, 76, 73, 71, 72, 212, 84, 65, 199, 68, 79, 77, 73, 78, 207, 72, 65, - 76, 198, 76, 79, 78, 199, 77, 65, 76, 65, 89, 65, 76, 65, 205, 65, 67, - 85, 84, 69, 128, 70, 82, 65, 75, 84, 85, 210, 67, 72, 65, 82, 65, 67, 84, - 69, 210, 80, 72, 65, 83, 69, 45, 195, 68, 79, 85, 66, 76, 69, 45, 83, 84, - 82, 85, 67, 203, 70, 73, 86, 69, 128, 79, 80, 69, 206, 72, 73, 82, 65, - 71, 65, 78, 193, 75, 65, 128, 77, 69, 68, 73, 65, 204, 84, 69, 76, 85, + 66, 79, 204, 68, 73, 71, 73, 212, 84, 65, 78, 71, 85, 212, 70, 79, 82, + 77, 128, 67, 65, 78, 65, 68, 73, 65, 206, 83, 89, 76, 76, 65, 66, 73, 67, + 211, 86, 79, 87, 69, 204, 83, 73, 71, 78, 87, 82, 73, 84, 73, 78, 199, + 84, 73, 77, 69, 211, 66, 65, 77, 85, 205, 65, 78, 196, 66, 79, 76, 196, + 65, 78, 65, 84, 79, 76, 73, 65, 206, 72, 65, 78, 71, 85, 204, 76, 73, 78, + 69, 65, 210, 71, 82, 69, 69, 203, 77, 85, 83, 73, 67, 65, 204, 76, 73, + 71, 65, 84, 85, 82, 197, 69, 84, 72, 73, 79, 80, 73, 195, 193, 70, 79, + 210, 67, 89, 82, 73, 76, 76, 73, 195, 67, 79, 77, 66, 73, 78, 73, 78, + 199, 73, 84, 65, 76, 73, 195, 78, 85, 77, 66, 69, 210, 82, 65, 68, 73, + 67, 65, 204, 83, 65, 78, 83, 45, 83, 69, 82, 73, 198, 67, 73, 82, 67, 76, + 69, 196, 84, 65, 77, 73, 204, 84, 65, 201, 70, 73, 78, 65, 204, 65, 82, + 82, 79, 87, 128, 76, 69, 70, 212, 86, 65, 201, 82, 73, 71, 72, 212, 83, + 81, 85, 65, 82, 197, 68, 79, 85, 66, 76, 197, 83, 73, 71, 78, 128, 65, + 82, 82, 79, 215, 65, 66, 79, 86, 69, 128, 66, 69, 76, 79, 87, 128, 86, + 65, 82, 73, 65, 84, 73, 79, 206, 66, 82, 65, 73, 76, 76, 197, 80, 65, 84, + 84, 69, 82, 206, 66, 89, 90, 65, 78, 84, 73, 78, 197, 65, 128, 66, 76, + 65, 67, 203, 87, 72, 73, 84, 197, 73, 83, 79, 76, 65, 84, 69, 196, 85, + 128, 77, 79, 68, 73, 70, 73, 69, 210, 194, 75, 65, 84, 65, 75, 65, 78, + 193, 73, 128, 77, 89, 65, 78, 77, 65, 210, 68, 79, 212, 79, 128, 75, 65, + 78, 71, 88, 201, 79, 198, 75, 73, 75, 65, 75, 85, 201, 77, 69, 78, 68, + 197, 84, 73, 66, 69, 84, 65, 206, 72, 69, 65, 86, 217, 77, 65, 82, 75, + 128, 73, 78, 73, 84, 73, 65, 204, 86, 69, 82, 84, 73, 67, 65, 204, 77, + 69, 69, 205, 67, 79, 80, 84, 73, 195, 75, 72, 77, 69, 210, 82, 73, 71, + 72, 84, 87, 65, 82, 68, 211, 65, 66, 79, 86, 197, 67, 65, 82, 82, 73, 69, + 210, 89, 69, 200, 67, 72, 69, 82, 79, 75, 69, 197, 77, 79, 78, 71, 79, + 76, 73, 65, 206, 80, 76, 85, 211, 68, 69, 86, 65, 78, 65, 71, 65, 82, + 201, 83, 81, 85, 65, 82, 69, 196, 80, 72, 65, 83, 69, 45, 197, 83, 84, + 82, 79, 75, 69, 128, 76, 69, 70, 84, 87, 65, 82, 68, 211, 83, 89, 77, 66, + 79, 76, 128, 66, 79, 216, 77, 73, 68, 68, 76, 197, 79, 78, 69, 128, 84, + 73, 76, 197, 68, 85, 80, 76, 79, 89, 65, 206, 84, 87, 79, 128, 80, 65, + 82, 69, 78, 84, 72, 69, 83, 73, 90, 69, 196, 84, 72, 65, 205, 213, 86, + 79, 67, 65, 76, 73, 195, 74, 79, 78, 71, 83, 69, 79, 78, 199, 67, 79, 78, + 83, 79, 78, 65, 78, 212, 79, 78, 197, 72, 69, 66, 82, 69, 215, 77, 73, + 65, 207, 85, 208, 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, 72, 79, 79, + 75, 128, 71, 69, 79, 82, 71, 73, 65, 206, 79, 86, 69, 210, 84, 87, 207, + 68, 82, 65, 87, 73, 78, 71, 211, 72, 73, 71, 200, 72, 77, 79, 78, 199, + 73, 78, 68, 69, 216, 80, 65, 72, 65, 87, 200, 84, 72, 82, 69, 197, 68, + 79, 87, 206, 76, 79, 215, 67, 72, 79, 83, 69, 79, 78, 199, 72, 65, 76, + 70, 87, 73, 68, 84, 200, 72, 65, 78, 68, 45, 70, 73, 83, 212, 77, 69, 82, + 79, 73, 84, 73, 195, 66, 65, 76, 73, 78, 69, 83, 197, 77, 65, 82, 203, + 83, 67, 82, 73, 80, 212, 73, 68, 69, 79, 71, 82, 65, 205, 80, 72, 65, 83, + 69, 45, 196, 84, 79, 128, 65, 76, 67, 72, 69, 77, 73, 67, 65, 204, 65, + 76, 69, 198, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 77, 65, 76, 65, + 89, 65, 76, 65, 205, 83, 73, 78, 72, 65, 76, 193, 72, 65, 128, 78, 85, + 77, 69, 82, 73, 195, 82, 128, 84, 72, 82, 69, 69, 128, 66, 65, 82, 128, + 70, 79, 85, 82, 128, 84, 79, 78, 197, 66, 82, 65, 72, 77, 201, 72, 85, + 78, 71, 65, 82, 73, 65, 206, 84, 72, 85, 77, 194, 66, 65, 82, 194, 72, + 65, 200, 78, 79, 82, 84, 200, 70, 85, 76, 76, 87, 73, 68, 84, 200, 66, + 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, 204, 75, 65, 128, 76, 73, + 71, 72, 212, 70, 73, 86, 69, 128, 84, 65, 199, 68, 79, 77, 73, 78, 207, + 72, 65, 76, 198, 76, 79, 78, 199, 65, 67, 85, 84, 69, 128, 70, 82, 65, + 75, 84, 85, 210, 67, 72, 65, 82, 65, 67, 84, 69, 210, 80, 65, 128, 80, + 72, 65, 83, 69, 45, 195, 66, 72, 65, 73, 75, 83, 85, 75, 201, 68, 79, 85, + 66, 76, 69, 45, 83, 84, 82, 85, 67, 203, 79, 80, 69, 206, 72, 73, 82, 65, + 71, 65, 78, 193, 77, 65, 128, 77, 69, 68, 73, 65, 204, 84, 69, 76, 85, 71, 213, 74, 85, 78, 71, 83, 69, 79, 78, 199, 85, 80, 87, 65, 82, 68, - 211, 65, 82, 77, 69, 78, 73, 65, 206, 66, 69, 78, 71, 65, 76, 201, 71, - 76, 65, 71, 79, 76, 73, 84, 73, 195, 83, 72, 65, 82, 65, 68, 193, 78, 69, - 71, 65, 84, 73, 86, 197, 68, 79, 87, 78, 87, 65, 82, 68, 211, 74, 69, 69, - 205, 80, 65, 128, 83, 73, 68, 68, 72, 65, 205, 68, 79, 84, 211, 73, 68, - 69, 79, 71, 82, 65, 80, 200, 74, 65, 86, 65, 78, 69, 83, 197, 67, 85, 82, - 83, 73, 86, 197, 77, 65, 128, 79, 82, 73, 89, 193, 83, 128, 83, 73, 88, - 128, 87, 69, 83, 84, 45, 67, 82, 69, 197, 82, 85, 78, 73, 195, 89, 65, - 128, 69, 73, 71, 72, 84, 128, 75, 65, 78, 78, 65, 68, 193, 78, 65, 128, - 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, 88, 128, 90, - 90, 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89, 65, 128, 90, 90, 89, - 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90, 85, 82, 128, - 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83, 89, 65, 128, 90, 90, - 83, 65, 128, 90, 90, 79, 88, 128, 90, 90, 79, 80, 128, 90, 90, 79, 128, - 90, 90, 73, 88, 128, 90, 90, 73, 84, 128, 90, 90, 73, 80, 128, 90, 90, - 73, 69, 88, 128, 90, 90, 73, 69, 84, 128, 90, 90, 73, 69, 80, 128, 90, - 90, 73, 69, 128, 90, 90, 73, 128, 90, 90, 69, 88, 128, 90, 90, 69, 80, - 128, 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90, 65, 88, 128, 90, 90, - 65, 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65, 128, 90, 90, 65, 128, - 90, 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90, 87, 78, 74, 128, 90, - 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 202, 90, 87, 65, 82, - 65, 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, 85, 79, 88, - 128, 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, 90, 85, 66, - 85, 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 213, 90, 83, 72, 65, 128, - 90, 82, 65, 128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, 79, - 128, 90, 79, 65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, - 90, 74, 69, 128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, - 80, 80, 69, 82, 45, 77, 79, 85, 84, 200, 90, 73, 78, 79, 82, 128, 90, 73, - 76, 68, 69, 128, 90, 73, 71, 90, 65, 199, 90, 73, 71, 128, 90, 73, 68, - 193, 90, 73, 66, 128, 90, 73, 194, 90, 73, 51, 128, 90, 201, 90, 72, 89, - 88, 128, 90, 72, 89, 84, 128, 90, 72, 89, 82, 88, 128, 90, 72, 89, 82, - 128, 90, 72, 89, 80, 128, 90, 72, 89, 128, 90, 72, 87, 69, 128, 90, 72, - 87, 65, 128, 90, 72, 85, 88, 128, 90, 72, 85, 84, 128, 90, 72, 85, 82, - 88, 128, 90, 72, 85, 82, 128, 90, 72, 85, 80, 128, 90, 72, 85, 79, 88, - 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 128, 90, 72, 85, 128, 90, - 72, 79, 88, 128, 90, 72, 79, 84, 128, 90, 72, 79, 80, 128, 90, 72, 79, - 79, 128, 90, 72, 79, 73, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, - 69, 128, 90, 72, 73, 76, 128, 90, 72, 73, 128, 90, 72, 69, 88, 128, 90, - 72, 69, 84, 128, 90, 72, 69, 80, 128, 90, 72, 69, 69, 128, 90, 72, 69, - 128, 90, 72, 197, 90, 72, 65, 89, 73, 78, 128, 90, 72, 65, 88, 128, 90, - 72, 65, 84, 128, 90, 72, 65, 82, 128, 90, 72, 65, 80, 128, 90, 72, 65, - 73, 78, 128, 90, 72, 65, 65, 128, 90, 72, 65, 128, 90, 72, 128, 90, 69, - 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, 82, 207, 90, 69, 78, 128, 90, - 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, 74, 65, 128, 90, 69, 50, 128, - 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78, 128, 90, 65, 89, 73, - 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65, 128, 90, 65, - 82, 81, 65, 128, 90, 65, 82, 76, 128, 90, 65, 81, 69, 198, 90, 65, 77, - 88, 128, 90, 65, 204, 90, 65, 73, 78, 128, 90, 65, 73, 206, 90, 65, 73, - 128, 90, 65, 72, 128, 90, 65, 200, 90, 65, 71, 128, 90, 65, 69, 70, 128, - 90, 65, 55, 128, 90, 193, 90, 48, 49, 54, 72, 128, 90, 48, 49, 54, 71, - 128, 90, 48, 49, 54, 70, 128, 90, 48, 49, 54, 69, 128, 90, 48, 49, 54, - 68, 128, 90, 48, 49, 54, 67, 128, 90, 48, 49, 54, 66, 128, 90, 48, 49, - 54, 65, 128, 90, 48, 49, 54, 128, 90, 48, 49, 53, 73, 128, 90, 48, 49, - 53, 72, 128, 90, 48, 49, 53, 71, 128, 90, 48, 49, 53, 70, 128, 90, 48, - 49, 53, 69, 128, 90, 48, 49, 53, 68, 128, 90, 48, 49, 53, 67, 128, 90, - 48, 49, 53, 66, 128, 90, 48, 49, 53, 65, 128, 90, 48, 49, 53, 128, 90, - 48, 49, 52, 128, 90, 48, 49, 51, 128, 90, 48, 49, 50, 128, 90, 48, 49, - 49, 128, 90, 48, 49, 48, 128, 90, 48, 48, 57, 128, 90, 48, 48, 56, 128, - 90, 48, 48, 55, 128, 90, 48, 48, 54, 128, 90, 48, 48, 53, 65, 128, 90, - 48, 48, 53, 128, 90, 48, 48, 52, 65, 128, 90, 48, 48, 52, 128, 90, 48, - 48, 51, 66, 128, 90, 48, 48, 51, 65, 128, 90, 48, 48, 51, 128, 90, 48, - 48, 50, 68, 128, 90, 48, 48, 50, 67, 128, 90, 48, 48, 50, 66, 128, 90, - 48, 48, 50, 65, 128, 90, 48, 48, 50, 128, 90, 48, 48, 49, 128, 90, 128, - 218, 89, 89, 88, 128, 89, 89, 84, 128, 89, 89, 82, 88, 128, 89, 89, 82, - 128, 89, 89, 80, 128, 89, 89, 69, 128, 89, 89, 65, 65, 128, 89, 89, 65, - 128, 89, 89, 128, 89, 87, 79, 79, 128, 89, 87, 79, 128, 89, 87, 73, 73, - 128, 89, 87, 73, 128, 89, 87, 69, 128, 89, 87, 65, 65, 128, 89, 87, 65, - 128, 89, 86, 128, 89, 85, 88, 128, 89, 85, 87, 79, 81, 128, 89, 85, 85, - 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 85, 128, 89, 85, 84, - 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, 89, 85, 82, 128, - 89, 85, 81, 128, 89, 85, 209, 89, 85, 80, 128, 89, 85, 79, 88, 128, 89, - 85, 79, 84, 128, 89, 85, 79, 80, 128, 89, 85, 79, 77, 128, 89, 85, 79, - 128, 89, 85, 78, 128, 89, 85, 77, 128, 89, 85, 74, 128, 89, 85, 69, 81, - 128, 89, 85, 69, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200, 89, 85, 65, - 78, 128, 89, 85, 65, 69, 78, 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, - 45, 89, 69, 128, 89, 85, 45, 85, 128, 89, 85, 45, 79, 128, 89, 85, 45, - 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, 69, 128, 89, 85, 45, 65, - 69, 128, 89, 85, 45, 65, 128, 89, 85, 128, 89, 213, 89, 82, 89, 128, 89, - 80, 83, 73, 76, 73, 128, 89, 80, 79, 82, 82, 79, 73, 128, 89, 80, 79, 75, - 82, 73, 83, 73, 83, 128, 89, 80, 79, 75, 82, 73, 83, 73, 211, 89, 80, 79, - 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 89, 79, 89, 128, 89, 79, 88, - 128, 89, 79, 87, 68, 128, 89, 79, 85, 84, 72, 70, 85, 76, 78, 69, 83, 83, - 128, 89, 79, 85, 84, 72, 70, 85, 204, 89, 79, 84, 128, 89, 79, 82, 73, - 128, 89, 79, 81, 128, 89, 79, 209, 89, 79, 80, 128, 89, 79, 79, 128, 89, - 79, 77, 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, 72, 128, 89, 79, 68, - 128, 89, 79, 196, 89, 79, 65, 128, 89, 79, 45, 89, 69, 79, 128, 89, 79, - 45, 89, 65, 69, 128, 89, 79, 45, 89, 65, 128, 89, 79, 45, 79, 128, 89, - 79, 45, 73, 128, 89, 79, 45, 69, 79, 128, 89, 79, 45, 65, 69, 128, 89, - 79, 45, 65, 128, 89, 79, 128, 89, 207, 89, 73, 90, 69, 84, 128, 89, 73, - 88, 128, 89, 73, 87, 78, 128, 89, 73, 84, 128, 89, 73, 80, 128, 89, 73, - 78, 71, 128, 89, 73, 73, 128, 89, 73, 199, 89, 73, 69, 88, 128, 89, 73, - 69, 84, 128, 89, 73, 69, 80, 128, 89, 73, 69, 69, 128, 89, 73, 69, 128, - 89, 73, 68, 68, 73, 83, 200, 89, 73, 45, 85, 128, 89, 73, 128, 89, 70, - 69, 83, 73, 83, 128, 89, 70, 69, 83, 73, 211, 89, 70, 69, 206, 89, 69, - 89, 128, 89, 69, 87, 128, 89, 69, 85, 88, 128, 89, 69, 85, 82, 65, 69, - 128, 89, 69, 85, 81, 128, 89, 69, 85, 77, 128, 89, 69, 85, 65, 69, 84, - 128, 89, 69, 85, 65, 69, 128, 89, 69, 84, 73, 86, 128, 89, 69, 83, 84, - 85, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 83, 73, 79, 83, 128, 89, 69, - 83, 73, 69, 85, 78, 71, 45, 80, 65, 78, 83, 73, 79, 83, 128, 89, 69, 83, - 73, 69, 85, 78, 71, 45, 77, 73, 69, 85, 77, 128, 89, 69, 83, 73, 69, 85, - 78, 71, 45, 72, 73, 69, 85, 72, 128, 89, 69, 83, 73, 69, 85, 78, 71, 128, - 89, 69, 82, 85, 128, 89, 69, 82, 213, 89, 69, 82, 73, 128, 89, 69, 82, - 65, 200, 89, 69, 82, 128, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, - 128, 89, 69, 79, 45, 89, 65, 128, 89, 69, 79, 45, 85, 128, 89, 69, 79, - 45, 79, 128, 89, 69, 78, 73, 83, 69, 201, 89, 69, 78, 65, 80, 128, 89, - 69, 78, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, 128, 89, 69, 76, 76, - 79, 215, 89, 69, 73, 78, 128, 89, 69, 72, 128, 89, 69, 69, 71, 128, 89, - 69, 69, 128, 89, 69, 65, 210, 89, 69, 65, 128, 89, 65, 90, 90, 128, 89, - 65, 90, 72, 128, 89, 65, 90, 128, 89, 65, 89, 68, 128, 89, 65, 89, 65, - 78, 78, 65, 128, 89, 65, 89, 128, 89, 65, 87, 78, 128, 89, 65, 87, 128, - 89, 65, 86, 128, 89, 65, 85, 128, 89, 65, 84, 84, 128, 89, 65, 84, 73, - 128, 89, 65, 84, 72, 128, 89, 65, 84, 128, 89, 65, 83, 83, 128, 89, 65, - 83, 72, 128, 89, 65, 83, 128, 89, 65, 82, 82, 128, 89, 65, 82, 128, 89, - 65, 210, 89, 65, 81, 128, 89, 65, 80, 128, 89, 65, 78, 83, 65, 89, 65, - 128, 89, 65, 78, 71, 128, 89, 65, 78, 199, 89, 65, 78, 128, 89, 65, 77, - 79, 75, 128, 89, 65, 77, 65, 75, 75, 65, 78, 128, 89, 65, 77, 128, 89, - 65, 76, 128, 89, 65, 75, 72, 72, 128, 89, 65, 75, 72, 128, 89, 65, 75, - 65, 83, 72, 128, 89, 65, 75, 128, 89, 65, 74, 85, 82, 86, 69, 68, 73, - 195, 89, 65, 74, 128, 89, 65, 73, 128, 89, 65, 72, 72, 128, 89, 65, 72, - 128, 89, 65, 71, 78, 128, 89, 65, 71, 72, 72, 128, 89, 65, 71, 72, 128, - 89, 65, 71, 128, 89, 65, 70, 213, 89, 65, 70, 128, 89, 65, 69, 77, 77, - 65, 69, 128, 89, 65, 68, 72, 128, 89, 65, 68, 68, 72, 128, 89, 65, 68, - 68, 128, 89, 65, 68, 128, 89, 65, 67, 72, 128, 89, 65, 66, 72, 128, 89, - 65, 66, 128, 89, 65, 65, 82, 85, 128, 89, 65, 65, 73, 128, 89, 65, 65, - 68, 79, 128, 89, 65, 45, 89, 79, 128, 89, 65, 45, 85, 128, 89, 65, 45, - 79, 128, 89, 48, 48, 56, 128, 89, 48, 48, 55, 128, 89, 48, 48, 54, 128, - 89, 48, 48, 53, 128, 89, 48, 48, 52, 128, 89, 48, 48, 51, 128, 89, 48, - 48, 50, 128, 89, 48, 48, 49, 65, 128, 89, 48, 48, 49, 128, 89, 45, 67, - 82, 69, 197, 88, 89, 88, 128, 88, 89, 85, 128, 88, 89, 84, 128, 88, 89, - 82, 88, 128, 88, 89, 82, 128, 88, 89, 80, 128, 88, 89, 79, 79, 74, 128, - 88, 89, 79, 79, 128, 88, 89, 79, 128, 88, 89, 73, 128, 88, 89, 69, 69, - 205, 88, 89, 69, 69, 128, 88, 89, 69, 128, 88, 89, 65, 65, 128, 88, 89, - 65, 128, 88, 89, 128, 88, 87, 73, 128, 88, 87, 69, 69, 128, 88, 87, 69, - 128, 88, 87, 65, 65, 128, 88, 87, 65, 128, 88, 87, 128, 88, 86, 69, 128, - 88, 86, 65, 128, 88, 85, 79, 88, 128, 88, 85, 79, 128, 88, 85, 128, 88, - 83, 72, 65, 65, 89, 65, 84, 72, 73, 89, 65, 128, 88, 79, 88, 128, 88, 79, - 84, 128, 88, 79, 82, 128, 88, 79, 80, 72, 128, 88, 79, 80, 128, 88, 79, - 65, 128, 88, 79, 128, 88, 73, 88, 128, 88, 73, 84, 128, 88, 73, 82, 79, - 206, 88, 73, 80, 128, 88, 73, 69, 88, 128, 88, 73, 69, 84, 128, 88, 73, - 69, 80, 128, 88, 73, 69, 128, 88, 73, 65, 66, 128, 88, 73, 128, 88, 71, - 128, 88, 69, 89, 78, 128, 88, 69, 83, 84, 69, 211, 88, 69, 72, 128, 88, - 69, 69, 128, 88, 69, 128, 88, 65, 85, 83, 128, 88, 65, 85, 128, 88, 65, - 80, 72, 128, 88, 65, 78, 128, 88, 65, 65, 128, 88, 65, 128, 88, 48, 48, - 56, 65, 128, 88, 48, 48, 56, 128, 88, 48, 48, 55, 128, 88, 48, 48, 54, - 65, 128, 88, 48, 48, 54, 128, 88, 48, 48, 53, 128, 88, 48, 48, 52, 66, - 128, 88, 48, 48, 52, 65, 128, 88, 48, 48, 52, 128, 88, 48, 48, 51, 128, - 88, 48, 48, 50, 128, 88, 48, 48, 49, 128, 88, 45, 216, 87, 90, 128, 87, - 89, 78, 78, 128, 87, 89, 78, 206, 87, 86, 73, 128, 87, 86, 69, 128, 87, - 86, 65, 128, 87, 86, 128, 87, 85, 80, 128, 87, 85, 79, 88, 128, 87, 85, - 79, 80, 128, 87, 85, 79, 128, 87, 85, 78, 74, 207, 87, 85, 78, 128, 87, - 85, 76, 85, 128, 87, 85, 76, 213, 87, 85, 73, 128, 87, 85, 69, 128, 87, - 85, 65, 69, 84, 128, 87, 85, 65, 69, 78, 128, 87, 85, 128, 87, 82, 217, - 87, 82, 79, 78, 71, 128, 87, 82, 73, 83, 212, 87, 82, 73, 78, 75, 76, 69, - 83, 128, 87, 82, 73, 78, 75, 76, 69, 211, 87, 82, 73, 78, 75, 76, 69, 68, - 128, 87, 82, 69, 78, 67, 72, 128, 87, 82, 69, 65, 84, 200, 87, 82, 65, - 80, 80, 69, 196, 87, 82, 65, 80, 128, 87, 79, 88, 128, 87, 79, 87, 128, - 87, 79, 82, 83, 72, 73, 80, 128, 87, 79, 82, 82, 73, 69, 196, 87, 79, 82, - 76, 196, 87, 79, 82, 75, 69, 82, 128, 87, 79, 82, 75, 128, 87, 79, 82, - 203, 87, 79, 82, 68, 83, 80, 65, 67, 69, 128, 87, 79, 82, 196, 87, 79, - 80, 128, 87, 79, 79, 78, 128, 87, 79, 79, 76, 128, 87, 79, 79, 68, 83, - 45, 67, 82, 69, 197, 87, 79, 79, 68, 128, 87, 79, 78, 128, 87, 79, 206, - 87, 79, 77, 69, 78, 211, 87, 79, 77, 69, 206, 87, 79, 77, 65, 78, 211, - 87, 79, 77, 65, 78, 128, 87, 79, 77, 65, 206, 87, 79, 76, 79, 83, 79, - 128, 87, 79, 76, 198, 87, 79, 69, 128, 87, 79, 65, 128, 87, 73, 84, 72, - 79, 85, 212, 87, 73, 84, 72, 73, 78, 128, 87, 73, 84, 72, 73, 206, 87, - 73, 82, 69, 196, 87, 73, 78, 84, 69, 82, 128, 87, 73, 78, 75, 73, 78, - 199, 87, 73, 78, 75, 128, 87, 73, 78, 74, 65, 128, 87, 73, 78, 71, 83, - 128, 87, 73, 78, 69, 128, 87, 73, 78, 197, 87, 73, 78, 68, 85, 128, 87, - 73, 78, 68, 79, 87, 128, 87, 73, 78, 68, 128, 87, 73, 78, 196, 87, 73, - 78, 128, 87, 73, 71, 78, 89, 65, 78, 128, 87, 73, 71, 71, 76, 217, 87, - 73, 71, 71, 76, 69, 83, 128, 87, 73, 68, 84, 72, 128, 87, 73, 68, 69, 78, - 73, 78, 199, 87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68, - 197, 87, 73, 65, 78, 71, 87, 65, 65, 75, 128, 87, 73, 65, 78, 71, 128, - 87, 72, 79, 76, 197, 87, 72, 73, 84, 69, 45, 70, 69, 65, 84, 72, 69, 82, - 69, 196, 87, 72, 73, 84, 69, 128, 87, 72, 69, 69, 76, 69, 196, 87, 72, - 69, 69, 76, 67, 72, 65, 73, 210, 87, 72, 69, 69, 76, 128, 87, 72, 69, 69, - 204, 87, 72, 69, 65, 84, 128, 87, 72, 65, 76, 69, 128, 87, 72, 128, 87, - 71, 128, 87, 69, 88, 128, 87, 69, 85, 88, 128, 87, 69, 83, 84, 69, 82, - 206, 87, 69, 83, 84, 128, 87, 69, 83, 212, 87, 69, 80, 128, 87, 69, 79, - 128, 87, 69, 78, 128, 87, 69, 76, 76, 128, 87, 69, 73, 71, 72, 212, 87, - 69, 73, 69, 82, 83, 84, 82, 65, 83, 211, 87, 69, 73, 128, 87, 69, 69, 78, + 211, 89, 65, 128, 65, 82, 77, 69, 78, 73, 65, 206, 66, 69, 78, 71, 65, + 76, 201, 83, 72, 65, 82, 65, 68, 193, 83, 73, 88, 128, 78, 65, 128, 78, + 69, 71, 65, 84, 73, 86, 197, 68, 79, 84, 211, 68, 79, 87, 78, 87, 65, 82, + 68, 211, 69, 73, 71, 72, 84, 128, 74, 69, 69, 205, 76, 65, 128, 78, 69, + 87, 193, 83, 73, 68, 68, 72, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, + 200, 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, 88, 128, + 90, 90, 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89, 65, 128, 90, 90, + 89, 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90, 85, 82, + 128, 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83, 89, 65, 128, 90, + 90, 83, 65, 128, 90, 90, 79, 88, 128, 90, 90, 79, 80, 128, 90, 90, 79, + 128, 90, 90, 73, 88, 128, 90, 90, 73, 84, 128, 90, 90, 73, 80, 128, 90, + 90, 73, 69, 88, 128, 90, 90, 73, 69, 84, 128, 90, 90, 73, 69, 80, 128, + 90, 90, 73, 69, 128, 90, 90, 73, 128, 90, 90, 69, 88, 128, 90, 90, 69, + 80, 128, 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90, 65, 88, 128, 90, + 90, 65, 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65, 128, 90, 90, 65, + 128, 90, 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90, 87, 78, 74, 128, + 90, 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 202, 90, 87, 65, + 82, 65, 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, 85, 79, + 88, 128, 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, 90, 85, + 66, 85, 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 213, 90, 83, 72, 65, + 128, 90, 82, 65, 128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, + 79, 128, 90, 79, 65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, + 193, 90, 74, 69, 128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, + 73, 80, 80, 69, 82, 45, 77, 79, 85, 84, 200, 90, 73, 78, 79, 82, 128, 90, + 73, 76, 68, 69, 128, 90, 73, 71, 90, 65, 199, 90, 73, 71, 128, 90, 73, + 68, 193, 90, 73, 66, 128, 90, 73, 194, 90, 73, 51, 128, 90, 201, 90, 72, + 89, 88, 128, 90, 72, 89, 84, 128, 90, 72, 89, 82, 88, 128, 90, 72, 89, + 82, 128, 90, 72, 89, 80, 128, 90, 72, 89, 128, 90, 72, 87, 69, 128, 90, + 72, 87, 65, 128, 90, 72, 85, 88, 128, 90, 72, 85, 84, 128, 90, 72, 85, + 82, 88, 128, 90, 72, 85, 82, 128, 90, 72, 85, 80, 128, 90, 72, 85, 79, + 88, 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 128, 90, 72, 85, 128, + 90, 72, 79, 88, 128, 90, 72, 79, 84, 128, 90, 72, 79, 80, 128, 90, 72, + 79, 79, 128, 90, 72, 79, 73, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, + 84, 69, 128, 90, 72, 73, 76, 128, 90, 72, 73, 128, 90, 72, 69, 88, 128, + 90, 72, 69, 84, 128, 90, 72, 69, 80, 128, 90, 72, 69, 69, 128, 90, 72, + 69, 128, 90, 72, 197, 90, 72, 65, 89, 73, 78, 128, 90, 72, 65, 88, 128, + 90, 72, 65, 84, 128, 90, 72, 65, 82, 128, 90, 72, 65, 80, 128, 90, 72, + 65, 73, 78, 128, 90, 72, 65, 65, 128, 90, 72, 65, 128, 90, 72, 128, 90, + 69, 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, 82, 207, 90, 69, 78, 128, + 90, 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, 74, 65, 128, 90, 69, 50, + 128, 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78, 128, 90, 65, 89, + 73, 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65, 128, 90, + 65, 82, 81, 65, 128, 90, 65, 82, 76, 128, 90, 65, 81, 69, 198, 90, 65, + 77, 88, 128, 90, 65, 76, 128, 90, 65, 204, 90, 65, 73, 78, 128, 90, 65, + 73, 206, 90, 65, 73, 128, 90, 65, 72, 128, 90, 65, 200, 90, 65, 71, 128, + 90, 65, 69, 70, 128, 90, 65, 55, 128, 90, 193, 90, 48, 49, 54, 72, 128, + 90, 48, 49, 54, 71, 128, 90, 48, 49, 54, 70, 128, 90, 48, 49, 54, 69, + 128, 90, 48, 49, 54, 68, 128, 90, 48, 49, 54, 67, 128, 90, 48, 49, 54, + 66, 128, 90, 48, 49, 54, 65, 128, 90, 48, 49, 54, 128, 90, 48, 49, 53, + 73, 128, 90, 48, 49, 53, 72, 128, 90, 48, 49, 53, 71, 128, 90, 48, 49, + 53, 70, 128, 90, 48, 49, 53, 69, 128, 90, 48, 49, 53, 68, 128, 90, 48, + 49, 53, 67, 128, 90, 48, 49, 53, 66, 128, 90, 48, 49, 53, 65, 128, 90, + 48, 49, 53, 128, 90, 48, 49, 52, 128, 90, 48, 49, 51, 128, 90, 48, 49, + 50, 128, 90, 48, 49, 49, 128, 90, 48, 49, 48, 128, 90, 48, 48, 57, 128, + 90, 48, 48, 56, 128, 90, 48, 48, 55, 128, 90, 48, 48, 54, 128, 90, 48, + 48, 53, 65, 128, 90, 48, 48, 53, 128, 90, 48, 48, 52, 65, 128, 90, 48, + 48, 52, 128, 90, 48, 48, 51, 66, 128, 90, 48, 48, 51, 65, 128, 90, 48, + 48, 51, 128, 90, 48, 48, 50, 68, 128, 90, 48, 48, 50, 67, 128, 90, 48, + 48, 50, 66, 128, 90, 48, 48, 50, 65, 128, 90, 48, 48, 50, 128, 90, 48, + 48, 49, 128, 90, 128, 218, 89, 89, 88, 128, 89, 89, 84, 128, 89, 89, 82, + 88, 128, 89, 89, 82, 128, 89, 89, 80, 128, 89, 89, 69, 128, 89, 89, 65, + 65, 128, 89, 89, 65, 128, 89, 89, 128, 89, 87, 79, 79, 128, 89, 87, 79, + 128, 89, 87, 73, 73, 128, 89, 87, 73, 128, 89, 87, 69, 128, 89, 87, 65, + 65, 128, 89, 87, 65, 128, 89, 86, 128, 89, 85, 88, 128, 89, 85, 87, 79, + 81, 128, 89, 85, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, + 85, 128, 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, + 128, 89, 85, 82, 128, 89, 85, 81, 128, 89, 85, 209, 89, 85, 80, 128, 89, + 85, 79, 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, 128, 89, 85, 79, + 77, 128, 89, 85, 79, 128, 89, 85, 78, 128, 89, 85, 77, 128, 89, 85, 74, + 128, 89, 85, 69, 81, 128, 89, 85, 69, 128, 89, 85, 68, 72, 128, 89, 85, + 68, 200, 89, 85, 65, 78, 128, 89, 85, 65, 69, 78, 128, 89, 85, 45, 89, + 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85, 45, 85, 128, 89, 85, 45, + 79, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, 69, + 128, 89, 85, 45, 65, 69, 128, 89, 85, 45, 65, 128, 89, 85, 128, 89, 213, + 89, 82, 89, 128, 89, 80, 83, 73, 76, 73, 128, 89, 80, 79, 82, 82, 79, 73, + 128, 89, 80, 79, 75, 82, 73, 83, 73, 83, 128, 89, 80, 79, 75, 82, 73, 83, + 73, 211, 89, 80, 79, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 89, 79, + 89, 128, 89, 79, 88, 128, 89, 79, 87, 68, 128, 89, 79, 85, 84, 72, 70, + 85, 76, 78, 69, 83, 83, 128, 89, 79, 85, 84, 72, 70, 85, 204, 89, 79, 84, + 128, 89, 79, 82, 73, 128, 89, 79, 81, 128, 89, 79, 209, 89, 79, 80, 128, + 89, 79, 79, 128, 89, 79, 77, 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, + 72, 128, 89, 79, 68, 128, 89, 79, 196, 89, 79, 65, 128, 89, 79, 45, 89, + 69, 79, 128, 89, 79, 45, 89, 65, 69, 128, 89, 79, 45, 89, 65, 128, 89, + 79, 45, 79, 128, 89, 79, 45, 73, 128, 89, 79, 45, 69, 79, 128, 89, 79, + 45, 65, 69, 128, 89, 79, 45, 65, 128, 89, 79, 128, 89, 207, 89, 73, 90, + 69, 84, 128, 89, 73, 88, 128, 89, 73, 87, 78, 128, 89, 73, 84, 128, 89, + 73, 80, 128, 89, 73, 78, 71, 128, 89, 73, 73, 128, 89, 73, 199, 89, 73, + 69, 88, 128, 89, 73, 69, 84, 128, 89, 73, 69, 80, 128, 89, 73, 69, 69, + 128, 89, 73, 69, 128, 89, 73, 68, 68, 73, 83, 200, 89, 73, 45, 85, 128, + 89, 73, 128, 89, 72, 69, 128, 89, 70, 69, 83, 73, 83, 128, 89, 70, 69, + 83, 73, 211, 89, 70, 69, 206, 89, 69, 89, 128, 89, 69, 87, 128, 89, 69, + 85, 88, 128, 89, 69, 85, 82, 65, 69, 128, 89, 69, 85, 81, 128, 89, 69, + 85, 77, 128, 89, 69, 85, 65, 69, 84, 128, 89, 69, 85, 65, 69, 128, 89, + 69, 84, 73, 86, 128, 89, 69, 83, 84, 85, 128, 89, 69, 83, 73, 69, 85, 78, + 71, 45, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 80, 65, + 78, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 77, 73, 69, + 85, 77, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 72, 73, 69, 85, 72, 128, + 89, 69, 83, 73, 69, 85, 78, 71, 128, 89, 69, 82, 85, 128, 89, 69, 82, + 213, 89, 69, 82, 73, 128, 89, 69, 82, 65, 200, 89, 69, 82, 128, 89, 69, + 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 89, 69, 79, 45, 89, 65, 128, 89, + 69, 79, 45, 85, 128, 89, 69, 79, 45, 79, 128, 89, 69, 78, 73, 83, 69, + 201, 89, 69, 78, 65, 80, 128, 89, 69, 78, 128, 89, 69, 206, 89, 69, 76, + 76, 79, 87, 128, 89, 69, 76, 76, 79, 215, 89, 69, 73, 78, 128, 89, 69, + 72, 128, 89, 69, 69, 71, 128, 89, 69, 69, 128, 89, 69, 65, 210, 89, 69, + 65, 128, 89, 65, 90, 90, 128, 89, 65, 90, 72, 128, 89, 65, 90, 128, 89, + 65, 89, 68, 128, 89, 65, 89, 65, 78, 78, 65, 128, 89, 65, 89, 128, 89, + 65, 87, 78, 128, 89, 65, 87, 128, 89, 65, 86, 128, 89, 65, 85, 128, 89, + 65, 84, 84, 128, 89, 65, 84, 73, 128, 89, 65, 84, 72, 128, 89, 65, 84, + 128, 89, 65, 83, 83, 128, 89, 65, 83, 72, 128, 89, 65, 83, 128, 89, 65, + 82, 82, 128, 89, 65, 82, 128, 89, 65, 210, 89, 65, 81, 128, 89, 65, 80, + 128, 89, 65, 78, 83, 65, 89, 65, 128, 89, 65, 78, 71, 128, 89, 65, 78, + 199, 89, 65, 78, 128, 89, 65, 77, 79, 75, 128, 89, 65, 77, 65, 75, 75, + 65, 78, 128, 89, 65, 77, 128, 89, 65, 76, 128, 89, 65, 75, 72, 72, 128, + 89, 65, 75, 72, 128, 89, 65, 75, 65, 83, 72, 128, 89, 65, 75, 128, 89, + 65, 74, 85, 82, 86, 69, 68, 73, 195, 89, 65, 74, 128, 89, 65, 73, 128, + 89, 65, 72, 72, 128, 89, 65, 72, 128, 89, 65, 71, 78, 128, 89, 65, 71, + 72, 72, 128, 89, 65, 71, 72, 128, 89, 65, 71, 128, 89, 65, 70, 213, 89, + 65, 70, 128, 89, 65, 69, 77, 77, 65, 69, 128, 89, 65, 68, 72, 128, 89, + 65, 68, 68, 72, 128, 89, 65, 68, 68, 128, 89, 65, 68, 128, 89, 65, 67, + 72, 128, 89, 65, 66, 72, 128, 89, 65, 66, 128, 89, 65, 65, 82, 85, 128, + 89, 65, 65, 73, 128, 89, 65, 65, 68, 79, 128, 89, 65, 45, 89, 79, 128, + 89, 65, 45, 85, 128, 89, 65, 45, 79, 128, 89, 48, 48, 56, 128, 89, 48, + 48, 55, 128, 89, 48, 48, 54, 128, 89, 48, 48, 53, 128, 89, 48, 48, 52, + 128, 89, 48, 48, 51, 128, 89, 48, 48, 50, 128, 89, 48, 48, 49, 65, 128, + 89, 48, 48, 49, 128, 89, 45, 67, 82, 69, 197, 88, 89, 88, 128, 88, 89, + 85, 128, 88, 89, 84, 128, 88, 89, 82, 88, 128, 88, 89, 82, 128, 88, 89, + 80, 128, 88, 89, 79, 79, 74, 128, 88, 89, 79, 79, 128, 88, 89, 79, 128, + 88, 89, 73, 128, 88, 89, 69, 69, 205, 88, 89, 69, 69, 128, 88, 89, 69, + 128, 88, 89, 65, 65, 128, 88, 89, 65, 128, 88, 89, 128, 88, 87, 73, 128, + 88, 87, 69, 69, 128, 88, 87, 69, 128, 88, 87, 65, 65, 128, 88, 87, 65, + 128, 88, 87, 128, 88, 86, 69, 128, 88, 86, 65, 128, 88, 85, 79, 88, 128, + 88, 85, 79, 128, 88, 85, 128, 88, 83, 72, 65, 65, 89, 65, 84, 72, 73, 89, + 65, 128, 88, 79, 88, 128, 88, 79, 84, 128, 88, 79, 82, 128, 88, 79, 80, + 72, 128, 88, 79, 80, 128, 88, 79, 65, 128, 88, 79, 128, 88, 73, 88, 128, + 88, 73, 84, 128, 88, 73, 82, 79, 206, 88, 73, 80, 128, 88, 73, 69, 88, + 128, 88, 73, 69, 84, 128, 88, 73, 69, 80, 128, 88, 73, 69, 128, 88, 73, + 65, 66, 128, 88, 73, 128, 88, 71, 128, 88, 69, 89, 78, 128, 88, 69, 83, + 84, 69, 211, 88, 69, 72, 128, 88, 69, 69, 128, 88, 69, 128, 88, 65, 85, + 83, 128, 88, 65, 85, 128, 88, 65, 80, 72, 128, 88, 65, 78, 128, 88, 65, + 65, 128, 88, 65, 128, 88, 48, 48, 56, 65, 128, 88, 48, 48, 56, 128, 88, + 48, 48, 55, 128, 88, 48, 48, 54, 65, 128, 88, 48, 48, 54, 128, 88, 48, + 48, 53, 128, 88, 48, 48, 52, 66, 128, 88, 48, 48, 52, 65, 128, 88, 48, + 48, 52, 128, 88, 48, 48, 51, 128, 88, 48, 48, 50, 128, 88, 48, 48, 49, + 128, 88, 45, 216, 87, 90, 128, 87, 89, 78, 78, 128, 87, 89, 78, 206, 87, + 86, 73, 128, 87, 86, 69, 128, 87, 86, 65, 128, 87, 86, 128, 87, 85, 80, + 128, 87, 85, 79, 88, 128, 87, 85, 79, 80, 128, 87, 85, 79, 128, 87, 85, + 78, 74, 207, 87, 85, 78, 128, 87, 85, 76, 85, 128, 87, 85, 76, 213, 87, + 85, 73, 128, 87, 85, 69, 128, 87, 85, 65, 69, 84, 128, 87, 85, 65, 69, + 78, 128, 87, 85, 128, 87, 82, 217, 87, 82, 79, 78, 71, 128, 87, 82, 73, + 83, 212, 87, 82, 73, 78, 75, 76, 69, 83, 128, 87, 82, 73, 78, 75, 76, 69, + 211, 87, 82, 73, 78, 75, 76, 69, 68, 128, 87, 82, 69, 83, 84, 76, 69, 82, + 83, 128, 87, 82, 69, 78, 67, 72, 128, 87, 82, 69, 65, 84, 200, 87, 82, + 65, 80, 80, 69, 196, 87, 82, 65, 80, 128, 87, 79, 88, 128, 87, 79, 87, + 128, 87, 79, 82, 83, 72, 73, 80, 128, 87, 79, 82, 82, 73, 69, 196, 87, + 79, 82, 76, 196, 87, 79, 82, 75, 69, 82, 128, 87, 79, 82, 75, 128, 87, + 79, 82, 203, 87, 79, 82, 68, 83, 80, 65, 67, 69, 128, 87, 79, 82, 196, + 87, 79, 80, 128, 87, 79, 79, 78, 128, 87, 79, 79, 76, 128, 87, 79, 79, + 68, 83, 45, 67, 82, 69, 197, 87, 79, 79, 68, 128, 87, 79, 78, 128, 87, + 79, 206, 87, 79, 77, 69, 78, 211, 87, 79, 77, 69, 206, 87, 79, 77, 65, + 78, 211, 87, 79, 77, 65, 78, 128, 87, 79, 77, 65, 206, 87, 79, 76, 79, + 83, 79, 128, 87, 79, 76, 198, 87, 79, 69, 128, 87, 79, 65, 128, 87, 73, + 84, 72, 79, 85, 212, 87, 73, 84, 72, 73, 78, 128, 87, 73, 84, 72, 73, + 206, 87, 73, 82, 69, 196, 87, 73, 78, 84, 69, 82, 128, 87, 73, 78, 75, + 73, 78, 199, 87, 73, 78, 75, 128, 87, 73, 78, 74, 65, 128, 87, 73, 78, + 71, 83, 128, 87, 73, 78, 69, 128, 87, 73, 78, 197, 87, 73, 78, 68, 85, + 128, 87, 73, 78, 68, 79, 87, 128, 87, 73, 78, 68, 128, 87, 73, 78, 196, + 87, 73, 78, 128, 87, 73, 76, 84, 69, 196, 87, 73, 71, 78, 89, 65, 78, + 128, 87, 73, 71, 71, 76, 217, 87, 73, 71, 71, 76, 69, 83, 128, 87, 73, + 68, 84, 72, 128, 87, 73, 68, 69, 78, 73, 78, 199, 87, 73, 68, 69, 45, 72, + 69, 65, 68, 69, 196, 87, 73, 68, 197, 87, 73, 65, 78, 71, 87, 65, 65, 75, + 128, 87, 73, 65, 78, 71, 128, 87, 72, 79, 76, 197, 87, 72, 73, 84, 69, + 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 87, 72, 73, 84, 69, 128, 87, 72, + 69, 69, 76, 69, 196, 87, 72, 69, 69, 76, 67, 72, 65, 73, 210, 87, 72, 69, + 69, 76, 128, 87, 72, 69, 69, 204, 87, 72, 69, 65, 84, 128, 87, 72, 65, + 76, 69, 128, 87, 72, 128, 87, 71, 128, 87, 69, 88, 128, 87, 69, 85, 88, + 128, 87, 69, 83, 84, 69, 82, 206, 87, 69, 83, 84, 45, 67, 82, 69, 197, + 87, 69, 83, 84, 128, 87, 69, 83, 212, 87, 69, 80, 128, 87, 69, 79, 128, + 87, 69, 78, 128, 87, 69, 76, 76, 128, 87, 69, 73, 71, 72, 212, 87, 69, + 73, 69, 82, 83, 84, 82, 65, 83, 211, 87, 69, 73, 128, 87, 69, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, 68, 71, 69, 128, 87, 69, 68, 68, 73, 78, 71, 128, 87, 69, 66, 128, 87, 69, 65, 82, 217, 87, 69, 65, 80, 79, 78, 128, 87, 67, 128, 87, 66, 128, 87, 65, 89, @@ -257,251 +258,253 @@ static unsigned char lexicon[] = { 128, 87, 65, 83, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, 65, 128, 87, 65, 83, 76, 193, 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 65, 76, 76, 65, 205, 87, 65, 82, 78, 73, 78, 199, 87, 65, 82, 65, 78, 199, - 87, 65, 80, 128, 87, 65, 78, 73, 78, 199, 87, 65, 78, 71, 75, 85, 79, 81, - 128, 87, 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 78, 128, 87, 65, 76, - 76, 80, 76, 65, 78, 197, 87, 65, 76, 76, 128, 87, 65, 76, 204, 87, 65, - 76, 75, 128, 87, 65, 76, 203, 87, 65, 73, 84, 73, 78, 71, 128, 87, 65, - 73, 83, 84, 128, 87, 65, 73, 128, 87, 65, 69, 78, 128, 87, 65, 69, 128, - 87, 65, 68, 68, 65, 128, 87, 65, 65, 86, 85, 128, 87, 48, 50, 53, 128, - 87, 48, 50, 52, 65, 128, 87, 48, 50, 52, 128, 87, 48, 50, 51, 128, 87, - 48, 50, 50, 128, 87, 48, 50, 49, 128, 87, 48, 50, 48, 128, 87, 48, 49, - 57, 128, 87, 48, 49, 56, 65, 128, 87, 48, 49, 56, 128, 87, 48, 49, 55, - 65, 128, 87, 48, 49, 55, 128, 87, 48, 49, 54, 128, 87, 48, 49, 53, 128, - 87, 48, 49, 52, 65, 128, 87, 48, 49, 52, 128, 87, 48, 49, 51, 128, 87, - 48, 49, 50, 128, 87, 48, 49, 49, 128, 87, 48, 49, 48, 65, 128, 87, 48, - 49, 48, 128, 87, 48, 48, 57, 65, 128, 87, 48, 48, 57, 128, 87, 48, 48, - 56, 128, 87, 48, 48, 55, 128, 87, 48, 48, 54, 128, 87, 48, 48, 53, 128, - 87, 48, 48, 52, 128, 87, 48, 48, 51, 65, 128, 87, 48, 48, 51, 128, 87, - 48, 48, 50, 128, 87, 48, 48, 49, 128, 86, 90, 77, 69, 84, 128, 86, 89, - 88, 128, 86, 89, 84, 128, 86, 89, 82, 88, 128, 86, 89, 82, 128, 86, 89, - 80, 128, 86, 89, 128, 86, 87, 74, 128, 86, 87, 65, 128, 86, 85, 88, 128, - 86, 85, 85, 128, 86, 85, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, - 86, 85, 80, 128, 86, 85, 76, 71, 65, 210, 86, 85, 69, 81, 128, 86, 84, - 83, 128, 86, 84, 128, 86, 83, 57, 57, 128, 86, 83, 57, 56, 128, 86, 83, - 57, 55, 128, 86, 83, 57, 54, 128, 86, 83, 57, 53, 128, 86, 83, 57, 52, - 128, 86, 83, 57, 51, 128, 86, 83, 57, 50, 128, 86, 83, 57, 49, 128, 86, - 83, 57, 48, 128, 86, 83, 57, 128, 86, 83, 56, 57, 128, 86, 83, 56, 56, - 128, 86, 83, 56, 55, 128, 86, 83, 56, 54, 128, 86, 83, 56, 53, 128, 86, - 83, 56, 52, 128, 86, 83, 56, 51, 128, 86, 83, 56, 50, 128, 86, 83, 56, - 49, 128, 86, 83, 56, 48, 128, 86, 83, 56, 128, 86, 83, 55, 57, 128, 86, - 83, 55, 56, 128, 86, 83, 55, 55, 128, 86, 83, 55, 54, 128, 86, 83, 55, - 53, 128, 86, 83, 55, 52, 128, 86, 83, 55, 51, 128, 86, 83, 55, 50, 128, - 86, 83, 55, 49, 128, 86, 83, 55, 48, 128, 86, 83, 55, 128, 86, 83, 54, - 57, 128, 86, 83, 54, 56, 128, 86, 83, 54, 55, 128, 86, 83, 54, 54, 128, - 86, 83, 54, 53, 128, 86, 83, 54, 52, 128, 86, 83, 54, 51, 128, 86, 83, - 54, 50, 128, 86, 83, 54, 49, 128, 86, 83, 54, 48, 128, 86, 83, 54, 128, - 86, 83, 53, 57, 128, 86, 83, 53, 56, 128, 86, 83, 53, 55, 128, 86, 83, - 53, 54, 128, 86, 83, 53, 53, 128, 86, 83, 53, 52, 128, 86, 83, 53, 51, - 128, 86, 83, 53, 50, 128, 86, 83, 53, 49, 128, 86, 83, 53, 48, 128, 86, - 83, 53, 128, 86, 83, 52, 57, 128, 86, 83, 52, 56, 128, 86, 83, 52, 55, - 128, 86, 83, 52, 54, 128, 86, 83, 52, 53, 128, 86, 83, 52, 52, 128, 86, - 83, 52, 51, 128, 86, 83, 52, 50, 128, 86, 83, 52, 49, 128, 86, 83, 52, - 48, 128, 86, 83, 52, 128, 86, 83, 51, 57, 128, 86, 83, 51, 56, 128, 86, - 83, 51, 55, 128, 86, 83, 51, 54, 128, 86, 83, 51, 53, 128, 86, 83, 51, - 52, 128, 86, 83, 51, 51, 128, 86, 83, 51, 50, 128, 86, 83, 51, 49, 128, - 86, 83, 51, 48, 128, 86, 83, 51, 128, 86, 83, 50, 57, 128, 86, 83, 50, - 56, 128, 86, 83, 50, 55, 128, 86, 83, 50, 54, 128, 86, 83, 50, 53, 54, - 128, 86, 83, 50, 53, 53, 128, 86, 83, 50, 53, 52, 128, 86, 83, 50, 53, - 51, 128, 86, 83, 50, 53, 50, 128, 86, 83, 50, 53, 49, 128, 86, 83, 50, - 53, 48, 128, 86, 83, 50, 53, 128, 86, 83, 50, 52, 57, 128, 86, 83, 50, - 52, 56, 128, 86, 83, 50, 52, 55, 128, 86, 83, 50, 52, 54, 128, 86, 83, - 50, 52, 53, 128, 86, 83, 50, 52, 52, 128, 86, 83, 50, 52, 51, 128, 86, - 83, 50, 52, 50, 128, 86, 83, 50, 52, 49, 128, 86, 83, 50, 52, 48, 128, - 86, 83, 50, 52, 128, 86, 83, 50, 51, 57, 128, 86, 83, 50, 51, 56, 128, - 86, 83, 50, 51, 55, 128, 86, 83, 50, 51, 54, 128, 86, 83, 50, 51, 53, - 128, 86, 83, 50, 51, 52, 128, 86, 83, 50, 51, 51, 128, 86, 83, 50, 51, - 50, 128, 86, 83, 50, 51, 49, 128, 86, 83, 50, 51, 48, 128, 86, 83, 50, - 51, 128, 86, 83, 50, 50, 57, 128, 86, 83, 50, 50, 56, 128, 86, 83, 50, - 50, 55, 128, 86, 83, 50, 50, 54, 128, 86, 83, 50, 50, 53, 128, 86, 83, - 50, 50, 52, 128, 86, 83, 50, 50, 51, 128, 86, 83, 50, 50, 50, 128, 86, - 83, 50, 50, 49, 128, 86, 83, 50, 50, 48, 128, 86, 83, 50, 50, 128, 86, - 83, 50, 49, 57, 128, 86, 83, 50, 49, 56, 128, 86, 83, 50, 49, 55, 128, - 86, 83, 50, 49, 54, 128, 86, 83, 50, 49, 53, 128, 86, 83, 50, 49, 52, - 128, 86, 83, 50, 49, 51, 128, 86, 83, 50, 49, 50, 128, 86, 83, 50, 49, - 49, 128, 86, 83, 50, 49, 48, 128, 86, 83, 50, 49, 128, 86, 83, 50, 48, - 57, 128, 86, 83, 50, 48, 56, 128, 86, 83, 50, 48, 55, 128, 86, 83, 50, - 48, 54, 128, 86, 83, 50, 48, 53, 128, 86, 83, 50, 48, 52, 128, 86, 83, - 50, 48, 51, 128, 86, 83, 50, 48, 50, 128, 86, 83, 50, 48, 49, 128, 86, - 83, 50, 48, 48, 128, 86, 83, 50, 48, 128, 86, 83, 50, 128, 86, 83, 49, - 57, 57, 128, 86, 83, 49, 57, 56, 128, 86, 83, 49, 57, 55, 128, 86, 83, - 49, 57, 54, 128, 86, 83, 49, 57, 53, 128, 86, 83, 49, 57, 52, 128, 86, - 83, 49, 57, 51, 128, 86, 83, 49, 57, 50, 128, 86, 83, 49, 57, 49, 128, - 86, 83, 49, 57, 48, 128, 86, 83, 49, 57, 128, 86, 83, 49, 56, 57, 128, - 86, 83, 49, 56, 56, 128, 86, 83, 49, 56, 55, 128, 86, 83, 49, 56, 54, - 128, 86, 83, 49, 56, 53, 128, 86, 83, 49, 56, 52, 128, 86, 83, 49, 56, - 51, 128, 86, 83, 49, 56, 50, 128, 86, 83, 49, 56, 49, 128, 86, 83, 49, - 56, 48, 128, 86, 83, 49, 56, 128, 86, 83, 49, 55, 57, 128, 86, 83, 49, - 55, 56, 128, 86, 83, 49, 55, 55, 128, 86, 83, 49, 55, 54, 128, 86, 83, - 49, 55, 53, 128, 86, 83, 49, 55, 52, 128, 86, 83, 49, 55, 51, 128, 86, - 83, 49, 55, 50, 128, 86, 83, 49, 55, 49, 128, 86, 83, 49, 55, 48, 128, - 86, 83, 49, 55, 128, 86, 83, 49, 54, 57, 128, 86, 83, 49, 54, 56, 128, - 86, 83, 49, 54, 55, 128, 86, 83, 49, 54, 54, 128, 86, 83, 49, 54, 53, - 128, 86, 83, 49, 54, 52, 128, 86, 83, 49, 54, 51, 128, 86, 83, 49, 54, - 50, 128, 86, 83, 49, 54, 49, 128, 86, 83, 49, 54, 48, 128, 86, 83, 49, - 54, 128, 86, 83, 49, 53, 57, 128, 86, 83, 49, 53, 56, 128, 86, 83, 49, - 53, 55, 128, 86, 83, 49, 53, 54, 128, 86, 83, 49, 53, 53, 128, 86, 83, - 49, 53, 52, 128, 86, 83, 49, 53, 51, 128, 86, 83, 49, 53, 50, 128, 86, - 83, 49, 53, 49, 128, 86, 83, 49, 53, 48, 128, 86, 83, 49, 53, 128, 86, - 83, 49, 52, 57, 128, 86, 83, 49, 52, 56, 128, 86, 83, 49, 52, 55, 128, - 86, 83, 49, 52, 54, 128, 86, 83, 49, 52, 53, 128, 86, 83, 49, 52, 52, - 128, 86, 83, 49, 52, 51, 128, 86, 83, 49, 52, 50, 128, 86, 83, 49, 52, - 49, 128, 86, 83, 49, 52, 48, 128, 86, 83, 49, 52, 128, 86, 83, 49, 51, - 57, 128, 86, 83, 49, 51, 56, 128, 86, 83, 49, 51, 55, 128, 86, 83, 49, - 51, 54, 128, 86, 83, 49, 51, 53, 128, 86, 83, 49, 51, 52, 128, 86, 83, - 49, 51, 51, 128, 86, 83, 49, 51, 50, 128, 86, 83, 49, 51, 49, 128, 86, - 83, 49, 51, 48, 128, 86, 83, 49, 51, 128, 86, 83, 49, 50, 57, 128, 86, - 83, 49, 50, 56, 128, 86, 83, 49, 50, 55, 128, 86, 83, 49, 50, 54, 128, - 86, 83, 49, 50, 53, 128, 86, 83, 49, 50, 52, 128, 86, 83, 49, 50, 51, - 128, 86, 83, 49, 50, 50, 128, 86, 83, 49, 50, 49, 128, 86, 83, 49, 50, - 48, 128, 86, 83, 49, 50, 128, 86, 83, 49, 49, 57, 128, 86, 83, 49, 49, - 56, 128, 86, 83, 49, 49, 55, 128, 86, 83, 49, 49, 54, 128, 86, 83, 49, - 49, 53, 128, 86, 83, 49, 49, 52, 128, 86, 83, 49, 49, 51, 128, 86, 83, - 49, 49, 50, 128, 86, 83, 49, 49, 49, 128, 86, 83, 49, 49, 48, 128, 86, - 83, 49, 49, 128, 86, 83, 49, 48, 57, 128, 86, 83, 49, 48, 56, 128, 86, - 83, 49, 48, 55, 128, 86, 83, 49, 48, 54, 128, 86, 83, 49, 48, 53, 128, - 86, 83, 49, 48, 52, 128, 86, 83, 49, 48, 51, 128, 86, 83, 49, 48, 50, - 128, 86, 83, 49, 48, 49, 128, 86, 83, 49, 48, 48, 128, 86, 83, 49, 48, - 128, 86, 83, 49, 128, 86, 83, 128, 86, 82, 65, 67, 72, 89, 128, 86, 79, - 88, 128, 86, 79, 87, 69, 76, 45, 67, 65, 82, 82, 73, 69, 210, 86, 79, 87, - 128, 86, 79, 85, 128, 86, 79, 84, 128, 86, 79, 211, 86, 79, 80, 128, 86, - 79, 79, 73, 128, 86, 79, 79, 128, 86, 79, 77, 128, 86, 79, 76, 85, 77, - 197, 86, 79, 76, 84, 65, 71, 197, 86, 79, 76, 76, 69, 89, 66, 65, 76, 76, - 128, 86, 79, 76, 67, 65, 78, 79, 128, 86, 79, 76, 65, 80, 85, 203, 86, - 79, 73, 196, 86, 79, 73, 67, 73, 78, 71, 128, 86, 79, 73, 67, 69, 76, 69, - 83, 211, 86, 79, 73, 67, 69, 196, 86, 79, 67, 65, 76, 73, 90, 65, 84, 73, - 79, 206, 86, 79, 67, 65, 204, 86, 79, 128, 86, 73, 89, 79, 128, 86, 73, - 88, 128, 86, 73, 84, 82, 73, 79, 76, 45, 50, 128, 86, 73, 84, 82, 73, 79, - 76, 128, 86, 73, 84, 65, 69, 45, 50, 128, 86, 73, 84, 65, 69, 128, 86, - 73, 84, 128, 86, 73, 83, 73, 71, 79, 84, 72, 73, 195, 86, 73, 83, 65, 82, - 71, 65, 89, 65, 128, 86, 73, 83, 65, 82, 71, 65, 128, 86, 73, 83, 65, 82, - 71, 193, 86, 73, 82, 73, 65, 77, 128, 86, 73, 82, 71, 79, 128, 86, 73, - 82, 71, 65, 128, 86, 73, 82, 65, 77, 65, 128, 86, 73, 80, 128, 86, 73, - 79, 76, 73, 78, 128, 86, 73, 78, 69, 71, 65, 82, 45, 51, 128, 86, 73, 78, - 69, 71, 65, 82, 45, 50, 128, 86, 73, 78, 69, 71, 65, 82, 128, 86, 73, 78, - 69, 71, 65, 210, 86, 73, 78, 69, 128, 86, 73, 78, 197, 86, 73, 78, 128, - 86, 73, 76, 76, 65, 71, 69, 128, 86, 73, 73, 128, 86, 73, 69, 88, 128, - 86, 73, 69, 87, 73, 78, 199, 86, 73, 69, 87, 68, 65, 84, 193, 86, 73, 69, - 84, 128, 86, 73, 69, 212, 86, 73, 69, 80, 128, 86, 73, 69, 128, 86, 73, - 68, 74, 45, 50, 128, 86, 73, 68, 74, 128, 86, 73, 68, 69, 79, 67, 65, 83, - 83, 69, 84, 84, 69, 128, 86, 73, 68, 69, 207, 86, 73, 68, 65, 128, 86, - 73, 67, 84, 79, 82, 217, 86, 73, 66, 82, 65, 84, 73, 79, 206, 86, 70, 65, - 128, 86, 69, 89, 90, 128, 86, 69, 88, 128, 86, 69, 87, 128, 86, 69, 215, - 86, 69, 85, 88, 128, 86, 69, 85, 77, 128, 86, 69, 85, 65, 69, 80, 69, 78, - 128, 86, 69, 85, 65, 69, 128, 86, 69, 83, 84, 65, 128, 86, 69, 83, 83, - 69, 204, 86, 69, 82, 217, 86, 69, 82, 84, 73, 67, 65, 76, 76, 89, 128, - 86, 69, 82, 84, 73, 67, 65, 76, 76, 217, 86, 69, 82, 84, 73, 67, 65, 76, - 45, 48, 54, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, - 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 52, - 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 51, 128, 86, 69, - 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 50, 128, 86, 69, 82, 84, 73, - 67, 65, 76, 45, 48, 54, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, - 45, 48, 54, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, - 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 53, - 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 52, 128, 86, 69, - 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 51, 128, 86, 69, 82, 84, 73, - 67, 65, 76, 45, 48, 53, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, - 45, 48, 53, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, - 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 54, - 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 53, 128, 86, 69, - 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 52, 128, 86, 69, 82, 84, 73, - 67, 65, 76, 45, 48, 52, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, - 45, 48, 52, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, - 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 48, - 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 54, 128, 86, 69, - 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 53, 128, 86, 69, 82, 84, 73, - 67, 65, 76, 45, 48, 51, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, - 45, 48, 51, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, - 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 49, - 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 48, 128, 86, 69, - 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 54, 128, 86, 69, 82, 84, 73, - 67, 65, 76, 45, 48, 50, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, - 45, 48, 50, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, - 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 50, - 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 49, 128, 86, 69, - 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 48, 128, 86, 69, 82, 84, 73, - 67, 65, 76, 45, 48, 49, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, - 45, 48, 49, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, - 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 51, - 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 50, 128, 86, 69, - 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 49, 128, 86, 69, 82, 84, 73, - 67, 65, 76, 45, 48, 49, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, - 45, 48, 48, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, - 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 52, - 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 51, 128, 86, 69, - 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 50, 128, 86, 69, 82, 84, 73, - 67, 65, 76, 45, 48, 48, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, - 45, 48, 48, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 128, 86, 69, - 82, 83, 73, 67, 76, 69, 128, 86, 69, 82, 83, 197, 86, 69, 82, 71, 69, - 128, 86, 69, 82, 68, 73, 71, 82, 73, 83, 128, 86, 69, 82, 128, 86, 69, - 80, 128, 86, 69, 78, 68, 128, 86, 69, 73, 76, 128, 86, 69, 72, 73, 67, - 76, 69, 128, 86, 69, 72, 128, 86, 69, 200, 86, 69, 69, 128, 86, 69, 197, - 86, 69, 68, 69, 128, 86, 69, 67, 84, 79, 210, 86, 65, 89, 65, 78, 78, 65, - 128, 86, 65, 88, 128, 86, 65, 86, 128, 86, 65, 214, 86, 65, 85, 128, 86, - 65, 84, 72, 89, 128, 86, 65, 84, 128, 86, 65, 83, 84, 78, 69, 83, 211, - 86, 65, 83, 73, 83, 128, 86, 65, 82, 89, 211, 86, 65, 82, 73, 75, 65, - 128, 86, 65, 82, 73, 65, 78, 84, 128, 86, 65, 82, 73, 65, 78, 212, 86, - 65, 82, 73, 65, 128, 86, 65, 82, 73, 193, 86, 65, 82, 69, 73, 65, 201, - 86, 65, 82, 69, 73, 193, 86, 65, 80, 79, 85, 82, 83, 128, 86, 65, 80, - 128, 86, 65, 78, 69, 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 65, - 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 193, 86, 65, 76, 76, 69, 89, - 128, 86, 65, 74, 128, 86, 65, 73, 128, 86, 65, 72, 128, 86, 65, 200, 86, - 65, 65, 86, 85, 128, 86, 65, 65, 128, 86, 48, 52, 48, 65, 128, 86, 48, - 52, 48, 128, 86, 48, 51, 57, 128, 86, 48, 51, 56, 128, 86, 48, 51, 55, - 65, 128, 86, 48, 51, 55, 128, 86, 48, 51, 54, 128, 86, 48, 51, 53, 128, - 86, 48, 51, 52, 128, 86, 48, 51, 51, 65, 128, 86, 48, 51, 51, 128, 86, - 48, 51, 50, 128, 86, 48, 51, 49, 65, 128, 86, 48, 51, 49, 128, 86, 48, - 51, 48, 65, 128, 86, 48, 51, 48, 128, 86, 48, 50, 57, 65, 128, 86, 48, - 50, 57, 128, 86, 48, 50, 56, 65, 128, 86, 48, 50, 56, 128, 86, 48, 50, - 55, 128, 86, 48, 50, 54, 128, 86, 48, 50, 53, 128, 86, 48, 50, 52, 128, - 86, 48, 50, 51, 65, 128, 86, 48, 50, 51, 128, 86, 48, 50, 50, 128, 86, - 48, 50, 49, 128, 86, 48, 50, 48, 76, 128, 86, 48, 50, 48, 75, 128, 86, - 48, 50, 48, 74, 128, 86, 48, 50, 48, 73, 128, 86, 48, 50, 48, 72, 128, - 86, 48, 50, 48, 71, 128, 86, 48, 50, 48, 70, 128, 86, 48, 50, 48, 69, - 128, 86, 48, 50, 48, 68, 128, 86, 48, 50, 48, 67, 128, 86, 48, 50, 48, - 66, 128, 86, 48, 50, 48, 65, 128, 86, 48, 50, 48, 128, 86, 48, 49, 57, - 128, 86, 48, 49, 56, 128, 86, 48, 49, 55, 128, 86, 48, 49, 54, 128, 86, - 48, 49, 53, 128, 86, 48, 49, 52, 128, 86, 48, 49, 51, 128, 86, 48, 49, - 50, 66, 128, 86, 48, 49, 50, 65, 128, 86, 48, 49, 50, 128, 86, 48, 49, - 49, 67, 128, 86, 48, 49, 49, 66, 128, 86, 48, 49, 49, 65, 128, 86, 48, - 49, 49, 128, 86, 48, 49, 48, 128, 86, 48, 48, 57, 128, 86, 48, 48, 56, - 128, 86, 48, 48, 55, 66, 128, 86, 48, 48, 55, 65, 128, 86, 48, 48, 55, - 128, 86, 48, 48, 54, 128, 86, 48, 48, 53, 128, 86, 48, 48, 52, 128, 86, - 48, 48, 51, 128, 86, 48, 48, 50, 65, 128, 86, 48, 48, 50, 128, 86, 48, - 48, 49, 73, 128, 86, 48, 48, 49, 72, 128, 86, 48, 48, 49, 71, 128, 86, - 48, 48, 49, 70, 128, 86, 48, 48, 49, 69, 128, 86, 48, 48, 49, 68, 128, - 86, 48, 48, 49, 67, 128, 86, 48, 48, 49, 66, 128, 86, 48, 48, 49, 65, - 128, 86, 48, 48, 49, 128, 85, 90, 85, 128, 85, 90, 51, 128, 85, 90, 179, - 85, 89, 65, 78, 78, 65, 128, 85, 89, 128, 85, 87, 85, 128, 85, 85, 89, - 65, 78, 78, 65, 128, 85, 85, 85, 85, 128, 85, 85, 85, 51, 128, 85, 85, - 85, 50, 128, 85, 85, 69, 128, 85, 84, 85, 75, 73, 128, 85, 83, 83, 85, - 51, 128, 85, 83, 83, 85, 128, 85, 83, 72, 88, 128, 85, 83, 72, 85, 77, - 88, 128, 85, 83, 72, 69, 78, 78, 65, 128, 85, 83, 72, 50, 128, 85, 83, - 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 45, 50, 128, 85, 83, - 69, 45, 49, 128, 85, 83, 69, 128, 85, 83, 197, 85, 82, 85, 218, 85, 82, - 85, 83, 128, 85, 82, 85, 68, 65, 128, 85, 82, 85, 68, 193, 85, 82, 85, - 128, 85, 82, 213, 85, 82, 78, 128, 85, 82, 73, 78, 69, 128, 85, 82, 73, - 51, 128, 85, 82, 73, 128, 85, 82, 65, 78, 85, 83, 128, 85, 82, 65, 128, - 85, 82, 52, 128, 85, 82, 50, 128, 85, 82, 178, 85, 80, 87, 65, 82, 68, - 83, 128, 85, 80, 87, 65, 82, 68, 128, 85, 80, 87, 65, 82, 196, 85, 80, - 84, 85, 82, 78, 128, 85, 80, 83, 73, 76, 79, 78, 128, 85, 80, 83, 73, 76, - 79, 206, 85, 80, 83, 73, 68, 69, 45, 68, 79, 87, 206, 85, 80, 82, 73, 71, - 72, 212, 85, 80, 80, 69, 82, 128, 85, 80, 80, 69, 210, 85, 80, 65, 68, - 72, 77, 65, 78, 73, 89, 65, 128, 85, 80, 45, 80, 79, 73, 78, 84, 73, 78, - 199, 85, 79, 78, 128, 85, 78, 78, 128, 85, 78, 77, 65, 82, 82, 73, 69, - 196, 85, 78, 75, 78, 79, 87, 78, 128, 85, 78, 75, 128, 85, 78, 73, 86, - 69, 82, 83, 65, 204, 85, 78, 73, 84, 89, 128, 85, 78, 73, 84, 128, 85, - 78, 73, 212, 85, 78, 73, 79, 78, 128, 85, 78, 73, 79, 206, 85, 78, 73, - 70, 73, 69, 196, 85, 78, 73, 67, 79, 82, 206, 85, 78, 68, 207, 85, 78, - 68, 69, 82, 84, 73, 69, 128, 85, 78, 68, 69, 82, 76, 73, 78, 197, 85, 78, - 68, 69, 82, 68, 79, 84, 128, 85, 78, 68, 69, 82, 66, 65, 82, 128, 85, 78, - 68, 69, 82, 128, 85, 78, 68, 69, 210, 85, 78, 67, 73, 193, 85, 78, 67, - 69, 82, 84, 65, 73, 78, 84, 217, 85, 78, 65, 83, 80, 73, 82, 65, 84, 69, - 68, 128, 85, 78, 65, 80, 128, 85, 78, 65, 77, 85, 83, 69, 196, 85, 78, - 65, 128, 85, 206, 85, 77, 85, 77, 128, 85, 77, 85, 205, 85, 77, 66, 82, - 69, 76, 76, 65, 128, 85, 77, 66, 82, 69, 76, 76, 193, 85, 77, 66, 73, 78, - 128, 85, 75, 85, 128, 85, 75, 82, 65, 73, 78, 73, 65, 206, 85, 75, 65, - 82, 65, 128, 85, 75, 65, 82, 193, 85, 75, 128, 85, 73, 76, 76, 69, 65, - 78, 78, 128, 85, 73, 71, 72, 85, 210, 85, 71, 65, 82, 73, 84, 73, 195, + 87, 65, 81, 70, 65, 128, 87, 65, 80, 128, 87, 65, 78, 73, 78, 199, 87, + 65, 78, 71, 75, 85, 79, 81, 128, 87, 65, 78, 68, 69, 82, 69, 82, 128, 87, + 65, 78, 128, 87, 65, 76, 76, 80, 76, 65, 78, 197, 87, 65, 76, 76, 128, + 87, 65, 76, 204, 87, 65, 76, 75, 128, 87, 65, 76, 203, 87, 65, 73, 84, + 73, 78, 71, 128, 87, 65, 73, 83, 84, 128, 87, 65, 73, 128, 87, 65, 69, + 78, 128, 87, 65, 69, 128, 87, 65, 68, 68, 65, 128, 87, 65, 65, 86, 85, + 128, 87, 48, 50, 53, 128, 87, 48, 50, 52, 65, 128, 87, 48, 50, 52, 128, + 87, 48, 50, 51, 128, 87, 48, 50, 50, 128, 87, 48, 50, 49, 128, 87, 48, + 50, 48, 128, 87, 48, 49, 57, 128, 87, 48, 49, 56, 65, 128, 87, 48, 49, + 56, 128, 87, 48, 49, 55, 65, 128, 87, 48, 49, 55, 128, 87, 48, 49, 54, + 128, 87, 48, 49, 53, 128, 87, 48, 49, 52, 65, 128, 87, 48, 49, 52, 128, + 87, 48, 49, 51, 128, 87, 48, 49, 50, 128, 87, 48, 49, 49, 128, 87, 48, + 49, 48, 65, 128, 87, 48, 49, 48, 128, 87, 48, 48, 57, 65, 128, 87, 48, + 48, 57, 128, 87, 48, 48, 56, 128, 87, 48, 48, 55, 128, 87, 48, 48, 54, + 128, 87, 48, 48, 53, 128, 87, 48, 48, 52, 128, 87, 48, 48, 51, 65, 128, + 87, 48, 48, 51, 128, 87, 48, 48, 50, 128, 87, 48, 48, 49, 128, 86, 90, + 77, 69, 84, 128, 86, 89, 88, 128, 86, 89, 84, 128, 86, 89, 82, 88, 128, + 86, 89, 82, 128, 86, 89, 80, 128, 86, 89, 128, 86, 87, 74, 128, 86, 87, + 65, 128, 86, 85, 88, 128, 86, 85, 85, 128, 86, 85, 84, 128, 86, 85, 82, + 88, 128, 86, 85, 82, 128, 86, 85, 80, 128, 86, 85, 76, 71, 65, 210, 86, + 85, 69, 81, 128, 86, 84, 83, 128, 86, 84, 128, 86, 83, 57, 57, 128, 86, + 83, 57, 56, 128, 86, 83, 57, 55, 128, 86, 83, 57, 54, 128, 86, 83, 57, + 53, 128, 86, 83, 57, 52, 128, 86, 83, 57, 51, 128, 86, 83, 57, 50, 128, + 86, 83, 57, 49, 128, 86, 83, 57, 48, 128, 86, 83, 57, 128, 86, 83, 56, + 57, 128, 86, 83, 56, 56, 128, 86, 83, 56, 55, 128, 86, 83, 56, 54, 128, + 86, 83, 56, 53, 128, 86, 83, 56, 52, 128, 86, 83, 56, 51, 128, 86, 83, + 56, 50, 128, 86, 83, 56, 49, 128, 86, 83, 56, 48, 128, 86, 83, 56, 128, + 86, 83, 55, 57, 128, 86, 83, 55, 56, 128, 86, 83, 55, 55, 128, 86, 83, + 55, 54, 128, 86, 83, 55, 53, 128, 86, 83, 55, 52, 128, 86, 83, 55, 51, + 128, 86, 83, 55, 50, 128, 86, 83, 55, 49, 128, 86, 83, 55, 48, 128, 86, + 83, 55, 128, 86, 83, 54, 57, 128, 86, 83, 54, 56, 128, 86, 83, 54, 55, + 128, 86, 83, 54, 54, 128, 86, 83, 54, 53, 128, 86, 83, 54, 52, 128, 86, + 83, 54, 51, 128, 86, 83, 54, 50, 128, 86, 83, 54, 49, 128, 86, 83, 54, + 48, 128, 86, 83, 54, 128, 86, 83, 53, 57, 128, 86, 83, 53, 56, 128, 86, + 83, 53, 55, 128, 86, 83, 53, 54, 128, 86, 83, 53, 53, 128, 86, 83, 53, + 52, 128, 86, 83, 53, 51, 128, 86, 83, 53, 50, 128, 86, 83, 53, 49, 128, + 86, 83, 53, 48, 128, 86, 83, 53, 128, 86, 83, 52, 57, 128, 86, 83, 52, + 56, 128, 86, 83, 52, 55, 128, 86, 83, 52, 54, 128, 86, 83, 52, 53, 128, + 86, 83, 52, 52, 128, 86, 83, 52, 51, 128, 86, 83, 52, 50, 128, 86, 83, + 52, 49, 128, 86, 83, 52, 48, 128, 86, 83, 52, 128, 86, 83, 51, 57, 128, + 86, 83, 51, 56, 128, 86, 83, 51, 55, 128, 86, 83, 51, 54, 128, 86, 83, + 51, 53, 128, 86, 83, 51, 52, 128, 86, 83, 51, 51, 128, 86, 83, 51, 50, + 128, 86, 83, 51, 49, 128, 86, 83, 51, 48, 128, 86, 83, 51, 128, 86, 83, + 50, 57, 128, 86, 83, 50, 56, 128, 86, 83, 50, 55, 128, 86, 83, 50, 54, + 128, 86, 83, 50, 53, 54, 128, 86, 83, 50, 53, 53, 128, 86, 83, 50, 53, + 52, 128, 86, 83, 50, 53, 51, 128, 86, 83, 50, 53, 50, 128, 86, 83, 50, + 53, 49, 128, 86, 83, 50, 53, 48, 128, 86, 83, 50, 53, 128, 86, 83, 50, + 52, 57, 128, 86, 83, 50, 52, 56, 128, 86, 83, 50, 52, 55, 128, 86, 83, + 50, 52, 54, 128, 86, 83, 50, 52, 53, 128, 86, 83, 50, 52, 52, 128, 86, + 83, 50, 52, 51, 128, 86, 83, 50, 52, 50, 128, 86, 83, 50, 52, 49, 128, + 86, 83, 50, 52, 48, 128, 86, 83, 50, 52, 128, 86, 83, 50, 51, 57, 128, + 86, 83, 50, 51, 56, 128, 86, 83, 50, 51, 55, 128, 86, 83, 50, 51, 54, + 128, 86, 83, 50, 51, 53, 128, 86, 83, 50, 51, 52, 128, 86, 83, 50, 51, + 51, 128, 86, 83, 50, 51, 50, 128, 86, 83, 50, 51, 49, 128, 86, 83, 50, + 51, 48, 128, 86, 83, 50, 51, 128, 86, 83, 50, 50, 57, 128, 86, 83, 50, + 50, 56, 128, 86, 83, 50, 50, 55, 128, 86, 83, 50, 50, 54, 128, 86, 83, + 50, 50, 53, 128, 86, 83, 50, 50, 52, 128, 86, 83, 50, 50, 51, 128, 86, + 83, 50, 50, 50, 128, 86, 83, 50, 50, 49, 128, 86, 83, 50, 50, 48, 128, + 86, 83, 50, 50, 128, 86, 83, 50, 49, 57, 128, 86, 83, 50, 49, 56, 128, + 86, 83, 50, 49, 55, 128, 86, 83, 50, 49, 54, 128, 86, 83, 50, 49, 53, + 128, 86, 83, 50, 49, 52, 128, 86, 83, 50, 49, 51, 128, 86, 83, 50, 49, + 50, 128, 86, 83, 50, 49, 49, 128, 86, 83, 50, 49, 48, 128, 86, 83, 50, + 49, 128, 86, 83, 50, 48, 57, 128, 86, 83, 50, 48, 56, 128, 86, 83, 50, + 48, 55, 128, 86, 83, 50, 48, 54, 128, 86, 83, 50, 48, 53, 128, 86, 83, + 50, 48, 52, 128, 86, 83, 50, 48, 51, 128, 86, 83, 50, 48, 50, 128, 86, + 83, 50, 48, 49, 128, 86, 83, 50, 48, 48, 128, 86, 83, 50, 48, 128, 86, + 83, 50, 128, 86, 83, 49, 57, 57, 128, 86, 83, 49, 57, 56, 128, 86, 83, + 49, 57, 55, 128, 86, 83, 49, 57, 54, 128, 86, 83, 49, 57, 53, 128, 86, + 83, 49, 57, 52, 128, 86, 83, 49, 57, 51, 128, 86, 83, 49, 57, 50, 128, + 86, 83, 49, 57, 49, 128, 86, 83, 49, 57, 48, 128, 86, 83, 49, 57, 128, + 86, 83, 49, 56, 57, 128, 86, 83, 49, 56, 56, 128, 86, 83, 49, 56, 55, + 128, 86, 83, 49, 56, 54, 128, 86, 83, 49, 56, 53, 128, 86, 83, 49, 56, + 52, 128, 86, 83, 49, 56, 51, 128, 86, 83, 49, 56, 50, 128, 86, 83, 49, + 56, 49, 128, 86, 83, 49, 56, 48, 128, 86, 83, 49, 56, 128, 86, 83, 49, + 55, 57, 128, 86, 83, 49, 55, 56, 128, 86, 83, 49, 55, 55, 128, 86, 83, + 49, 55, 54, 128, 86, 83, 49, 55, 53, 128, 86, 83, 49, 55, 52, 128, 86, + 83, 49, 55, 51, 128, 86, 83, 49, 55, 50, 128, 86, 83, 49, 55, 49, 128, + 86, 83, 49, 55, 48, 128, 86, 83, 49, 55, 128, 86, 83, 49, 54, 57, 128, + 86, 83, 49, 54, 56, 128, 86, 83, 49, 54, 55, 128, 86, 83, 49, 54, 54, + 128, 86, 83, 49, 54, 53, 128, 86, 83, 49, 54, 52, 128, 86, 83, 49, 54, + 51, 128, 86, 83, 49, 54, 50, 128, 86, 83, 49, 54, 49, 128, 86, 83, 49, + 54, 48, 128, 86, 83, 49, 54, 128, 86, 83, 49, 53, 57, 128, 86, 83, 49, + 53, 56, 128, 86, 83, 49, 53, 55, 128, 86, 83, 49, 53, 54, 128, 86, 83, + 49, 53, 53, 128, 86, 83, 49, 53, 52, 128, 86, 83, 49, 53, 51, 128, 86, + 83, 49, 53, 50, 128, 86, 83, 49, 53, 49, 128, 86, 83, 49, 53, 48, 128, + 86, 83, 49, 53, 128, 86, 83, 49, 52, 57, 128, 86, 83, 49, 52, 56, 128, + 86, 83, 49, 52, 55, 128, 86, 83, 49, 52, 54, 128, 86, 83, 49, 52, 53, + 128, 86, 83, 49, 52, 52, 128, 86, 83, 49, 52, 51, 128, 86, 83, 49, 52, + 50, 128, 86, 83, 49, 52, 49, 128, 86, 83, 49, 52, 48, 128, 86, 83, 49, + 52, 128, 86, 83, 49, 51, 57, 128, 86, 83, 49, 51, 56, 128, 86, 83, 49, + 51, 55, 128, 86, 83, 49, 51, 54, 128, 86, 83, 49, 51, 53, 128, 86, 83, + 49, 51, 52, 128, 86, 83, 49, 51, 51, 128, 86, 83, 49, 51, 50, 128, 86, + 83, 49, 51, 49, 128, 86, 83, 49, 51, 48, 128, 86, 83, 49, 51, 128, 86, + 83, 49, 50, 57, 128, 86, 83, 49, 50, 56, 128, 86, 83, 49, 50, 55, 128, + 86, 83, 49, 50, 54, 128, 86, 83, 49, 50, 53, 128, 86, 83, 49, 50, 52, + 128, 86, 83, 49, 50, 51, 128, 86, 83, 49, 50, 50, 128, 86, 83, 49, 50, + 49, 128, 86, 83, 49, 50, 48, 128, 86, 83, 49, 50, 128, 86, 83, 49, 49, + 57, 128, 86, 83, 49, 49, 56, 128, 86, 83, 49, 49, 55, 128, 86, 83, 49, + 49, 54, 128, 86, 83, 49, 49, 53, 128, 86, 83, 49, 49, 52, 128, 86, 83, + 49, 49, 51, 128, 86, 83, 49, 49, 50, 128, 86, 83, 49, 49, 49, 128, 86, + 83, 49, 49, 48, 128, 86, 83, 49, 49, 128, 86, 83, 49, 48, 57, 128, 86, + 83, 49, 48, 56, 128, 86, 83, 49, 48, 55, 128, 86, 83, 49, 48, 54, 128, + 86, 83, 49, 48, 53, 128, 86, 83, 49, 48, 52, 128, 86, 83, 49, 48, 51, + 128, 86, 83, 49, 48, 50, 128, 86, 83, 49, 48, 49, 128, 86, 83, 49, 48, + 48, 128, 86, 83, 49, 48, 128, 86, 83, 49, 128, 86, 83, 128, 86, 82, 65, + 67, 72, 89, 128, 86, 79, 88, 128, 86, 79, 87, 69, 76, 45, 67, 65, 82, 82, + 73, 69, 210, 86, 79, 87, 128, 86, 79, 85, 128, 86, 79, 84, 128, 86, 79, + 211, 86, 79, 80, 128, 86, 79, 79, 73, 128, 86, 79, 79, 128, 86, 79, 77, + 128, 86, 79, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, 197, 86, 79, 76, + 76, 69, 89, 66, 65, 76, 76, 128, 86, 79, 76, 67, 65, 78, 79, 128, 86, 79, + 76, 65, 80, 85, 203, 86, 79, 73, 196, 86, 79, 73, 67, 73, 78, 71, 128, + 86, 79, 73, 67, 69, 76, 69, 83, 211, 86, 79, 73, 67, 69, 196, 86, 79, 68, + 128, 86, 79, 67, 65, 76, 73, 90, 65, 84, 73, 79, 206, 86, 79, 67, 65, + 204, 86, 79, 128, 86, 73, 89, 79, 128, 86, 73, 88, 128, 86, 73, 84, 82, + 73, 79, 76, 45, 50, 128, 86, 73, 84, 82, 73, 79, 76, 128, 86, 73, 84, 65, + 69, 45, 50, 128, 86, 73, 84, 65, 69, 128, 86, 73, 84, 128, 86, 73, 83, + 73, 71, 79, 84, 72, 73, 195, 86, 73, 83, 65, 82, 71, 65, 89, 65, 128, 86, + 73, 83, 65, 82, 71, 65, 128, 86, 73, 83, 65, 82, 71, 193, 86, 73, 82, 73, + 65, 77, 128, 86, 73, 82, 71, 79, 128, 86, 73, 82, 71, 65, 128, 86, 73, + 82, 65, 77, 65, 128, 86, 73, 80, 128, 86, 73, 79, 76, 73, 78, 128, 86, + 73, 78, 69, 71, 65, 82, 45, 51, 128, 86, 73, 78, 69, 71, 65, 82, 45, 50, + 128, 86, 73, 78, 69, 71, 65, 82, 128, 86, 73, 78, 69, 71, 65, 210, 86, + 73, 78, 69, 128, 86, 73, 78, 197, 86, 73, 78, 128, 86, 73, 76, 76, 65, + 71, 69, 128, 86, 73, 73, 128, 86, 73, 69, 88, 128, 86, 73, 69, 87, 73, + 78, 199, 86, 73, 69, 87, 68, 65, 84, 193, 86, 73, 69, 84, 128, 86, 73, + 69, 212, 86, 73, 69, 80, 128, 86, 73, 69, 128, 86, 73, 68, 74, 45, 50, + 128, 86, 73, 68, 74, 128, 86, 73, 68, 69, 79, 67, 65, 83, 83, 69, 84, 84, + 69, 128, 86, 73, 68, 69, 207, 86, 73, 68, 65, 128, 86, 73, 67, 84, 79, + 82, 217, 86, 73, 66, 82, 65, 84, 73, 79, 206, 86, 70, 65, 128, 86, 69, + 89, 90, 128, 86, 69, 88, 128, 86, 69, 87, 128, 86, 69, 215, 86, 69, 85, + 88, 128, 86, 69, 85, 77, 128, 86, 69, 85, 65, 69, 80, 69, 78, 128, 86, + 69, 85, 65, 69, 128, 86, 69, 83, 84, 65, 128, 86, 69, 83, 83, 69, 204, + 86, 69, 82, 217, 86, 69, 82, 84, 73, 67, 65, 76, 76, 89, 128, 86, 69, 82, + 84, 73, 67, 65, 76, 76, 217, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, + 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 53, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 52, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 51, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 54, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 54, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, + 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 54, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 53, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 52, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 53, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 53, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, + 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 48, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 54, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 53, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 52, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 52, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, + 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 49, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 48, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 54, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 51, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 51, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, + 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 50, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 49, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 48, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 50, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 50, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, + 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 51, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 50, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 49, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 50, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 49, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, + 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 52, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 51, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 50, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 49, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 49, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, + 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 53, + 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 52, 128, 86, 69, + 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 51, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 45, 48, 48, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, + 45, 48, 48, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, + 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 128, 86, 69, 82, 83, 73, + 67, 76, 69, 128, 86, 69, 82, 83, 197, 86, 69, 82, 71, 69, 128, 86, 69, + 82, 68, 73, 71, 82, 73, 83, 128, 86, 69, 82, 128, 86, 69, 80, 128, 86, + 69, 78, 68, 128, 86, 69, 73, 76, 128, 86, 69, 72, 73, 67, 76, 69, 128, + 86, 69, 72, 128, 86, 69, 200, 86, 69, 69, 128, 86, 69, 197, 86, 69, 68, + 69, 128, 86, 69, 67, 84, 79, 210, 86, 65, 89, 65, 78, 78, 65, 128, 86, + 65, 88, 128, 86, 65, 86, 128, 86, 65, 214, 86, 65, 85, 128, 86, 65, 84, + 72, 89, 128, 86, 65, 84, 128, 86, 65, 83, 84, 78, 69, 83, 211, 86, 65, + 83, 73, 83, 128, 86, 65, 82, 89, 211, 86, 65, 82, 73, 75, 65, 128, 86, + 65, 82, 73, 65, 78, 84, 128, 86, 65, 82, 73, 65, 78, 212, 86, 65, 82, 73, + 65, 128, 86, 65, 82, 73, 193, 86, 65, 82, 69, 73, 65, 201, 86, 65, 82, + 69, 73, 193, 86, 65, 80, 79, 85, 82, 83, 128, 86, 65, 80, 128, 86, 65, + 78, 69, 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 65, 128, 86, 65, 77, + 65, 71, 79, 77, 85, 75, 72, 193, 86, 65, 76, 76, 69, 89, 128, 86, 65, 74, + 128, 86, 65, 73, 128, 86, 65, 72, 128, 86, 65, 200, 86, 65, 65, 86, 85, + 128, 86, 65, 65, 128, 86, 48, 52, 48, 65, 128, 86, 48, 52, 48, 128, 86, + 48, 51, 57, 128, 86, 48, 51, 56, 128, 86, 48, 51, 55, 65, 128, 86, 48, + 51, 55, 128, 86, 48, 51, 54, 128, 86, 48, 51, 53, 128, 86, 48, 51, 52, + 128, 86, 48, 51, 51, 65, 128, 86, 48, 51, 51, 128, 86, 48, 51, 50, 128, + 86, 48, 51, 49, 65, 128, 86, 48, 51, 49, 128, 86, 48, 51, 48, 65, 128, + 86, 48, 51, 48, 128, 86, 48, 50, 57, 65, 128, 86, 48, 50, 57, 128, 86, + 48, 50, 56, 65, 128, 86, 48, 50, 56, 128, 86, 48, 50, 55, 128, 86, 48, + 50, 54, 128, 86, 48, 50, 53, 128, 86, 48, 50, 52, 128, 86, 48, 50, 51, + 65, 128, 86, 48, 50, 51, 128, 86, 48, 50, 50, 128, 86, 48, 50, 49, 128, + 86, 48, 50, 48, 76, 128, 86, 48, 50, 48, 75, 128, 86, 48, 50, 48, 74, + 128, 86, 48, 50, 48, 73, 128, 86, 48, 50, 48, 72, 128, 86, 48, 50, 48, + 71, 128, 86, 48, 50, 48, 70, 128, 86, 48, 50, 48, 69, 128, 86, 48, 50, + 48, 68, 128, 86, 48, 50, 48, 67, 128, 86, 48, 50, 48, 66, 128, 86, 48, + 50, 48, 65, 128, 86, 48, 50, 48, 128, 86, 48, 49, 57, 128, 86, 48, 49, + 56, 128, 86, 48, 49, 55, 128, 86, 48, 49, 54, 128, 86, 48, 49, 53, 128, + 86, 48, 49, 52, 128, 86, 48, 49, 51, 128, 86, 48, 49, 50, 66, 128, 86, + 48, 49, 50, 65, 128, 86, 48, 49, 50, 128, 86, 48, 49, 49, 67, 128, 86, + 48, 49, 49, 66, 128, 86, 48, 49, 49, 65, 128, 86, 48, 49, 49, 128, 86, + 48, 49, 48, 128, 86, 48, 48, 57, 128, 86, 48, 48, 56, 128, 86, 48, 48, + 55, 66, 128, 86, 48, 48, 55, 65, 128, 86, 48, 48, 55, 128, 86, 48, 48, + 54, 128, 86, 48, 48, 53, 128, 86, 48, 48, 52, 128, 86, 48, 48, 51, 128, + 86, 48, 48, 50, 65, 128, 86, 48, 48, 50, 128, 86, 48, 48, 49, 73, 128, + 86, 48, 48, 49, 72, 128, 86, 48, 48, 49, 71, 128, 86, 48, 48, 49, 70, + 128, 86, 48, 48, 49, 69, 128, 86, 48, 48, 49, 68, 128, 86, 48, 48, 49, + 67, 128, 86, 48, 48, 49, 66, 128, 86, 48, 48, 49, 65, 128, 86, 48, 48, + 49, 128, 85, 90, 85, 128, 85, 90, 51, 128, 85, 90, 179, 85, 89, 65, 78, + 78, 65, 128, 85, 89, 128, 85, 87, 85, 128, 85, 85, 89, 65, 78, 78, 65, + 128, 85, 85, 85, 85, 128, 85, 85, 85, 51, 128, 85, 85, 85, 50, 128, 85, + 85, 69, 128, 85, 84, 85, 75, 73, 128, 85, 83, 83, 85, 51, 128, 85, 83, + 83, 85, 128, 85, 83, 72, 88, 128, 85, 83, 72, 85, 77, 88, 128, 85, 83, + 72, 69, 78, 78, 65, 128, 85, 83, 72, 50, 128, 85, 83, 72, 128, 85, 83, + 200, 85, 83, 69, 196, 85, 83, 69, 45, 50, 128, 85, 83, 69, 45, 49, 128, + 85, 83, 69, 128, 85, 83, 197, 85, 82, 85, 218, 85, 82, 85, 83, 128, 85, + 82, 85, 68, 65, 128, 85, 82, 85, 68, 193, 85, 82, 85, 128, 85, 82, 213, + 85, 82, 78, 128, 85, 82, 73, 78, 69, 128, 85, 82, 73, 51, 128, 85, 82, + 73, 128, 85, 82, 65, 78, 85, 83, 128, 85, 82, 65, 128, 85, 82, 52, 128, + 85, 82, 50, 128, 85, 82, 178, 85, 80, 87, 65, 82, 68, 83, 128, 85, 80, + 87, 65, 82, 68, 128, 85, 80, 87, 65, 82, 196, 85, 80, 84, 85, 82, 78, + 128, 85, 80, 83, 73, 76, 79, 78, 128, 85, 80, 83, 73, 76, 79, 206, 85, + 80, 83, 73, 68, 69, 45, 68, 79, 87, 206, 85, 80, 82, 73, 71, 72, 212, 85, + 80, 80, 69, 82, 128, 85, 80, 80, 69, 210, 85, 80, 65, 68, 72, 77, 65, 78, + 73, 89, 65, 128, 85, 80, 45, 80, 79, 73, 78, 84, 73, 78, 199, 85, 79, 78, + 128, 85, 78, 78, 128, 85, 78, 77, 65, 82, 82, 73, 69, 196, 85, 78, 75, + 78, 79, 87, 78, 128, 85, 78, 75, 128, 85, 78, 73, 86, 69, 82, 83, 65, + 204, 85, 78, 73, 84, 89, 128, 85, 78, 73, 84, 128, 85, 78, 73, 212, 85, + 78, 73, 79, 78, 128, 85, 78, 73, 79, 206, 85, 78, 73, 70, 79, 82, 77, + 128, 85, 78, 73, 70, 73, 69, 196, 85, 78, 73, 67, 79, 82, 206, 85, 78, + 68, 207, 85, 78, 68, 69, 82, 84, 73, 69, 128, 85, 78, 68, 69, 82, 76, 73, + 78, 197, 85, 78, 68, 69, 82, 68, 79, 84, 128, 85, 78, 68, 69, 82, 66, 65, + 82, 128, 85, 78, 68, 69, 82, 128, 85, 78, 68, 69, 210, 85, 78, 67, 73, + 193, 85, 78, 67, 69, 82, 84, 65, 73, 78, 84, 217, 85, 78, 66, 76, 69, 78, + 68, 69, 196, 85, 78, 65, 83, 80, 73, 82, 65, 84, 69, 68, 128, 85, 78, 65, + 80, 128, 85, 78, 65, 77, 85, 83, 69, 196, 85, 78, 65, 128, 85, 206, 85, + 77, 85, 77, 128, 85, 77, 85, 205, 85, 77, 66, 82, 69, 76, 76, 65, 128, + 85, 77, 66, 82, 69, 76, 76, 193, 85, 77, 66, 73, 78, 128, 85, 75, 85, + 128, 85, 75, 82, 65, 73, 78, 73, 65, 206, 85, 75, 65, 82, 65, 128, 85, + 75, 65, 82, 193, 85, 75, 128, 85, 73, 76, 76, 69, 65, 78, 78, 128, 85, + 73, 71, 72, 85, 210, 85, 72, 68, 128, 85, 71, 65, 82, 73, 84, 73, 195, 85, 69, 89, 128, 85, 69, 73, 128, 85, 69, 69, 128, 85, 69, 65, 128, 85, 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 84, 84, 193, 85, 68, 65, 65, 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66, 85, @@ -538,68 +541,71 @@ static unsigned char lexicon[] = { 87, 79, 45, 69, 205, 84, 87, 79, 45, 67, 73, 82, 67, 76, 197, 84, 87, 73, 83, 84, 73, 78, 71, 128, 84, 87, 73, 83, 84, 69, 196, 84, 87, 73, 73, 128, 84, 87, 73, 128, 84, 87, 69, 78, 84, 89, 45, 84, 87, 79, 128, 84, - 87, 69, 78, 84, 89, 45, 84, 72, 82, 69, 69, 128, 84, 87, 69, 78, 84, 89, - 45, 83, 73, 88, 128, 84, 87, 69, 78, 84, 89, 45, 83, 69, 86, 69, 78, 128, - 84, 87, 69, 78, 84, 89, 45, 79, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, - 78, 73, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 70, 79, 85, 82, 128, 84, - 87, 69, 78, 84, 89, 45, 70, 73, 86, 69, 128, 84, 87, 69, 78, 84, 89, 45, - 69, 73, 71, 72, 84, 200, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, - 128, 84, 87, 69, 78, 84, 89, 128, 84, 87, 69, 78, 84, 217, 84, 87, 69, - 76, 86, 69, 45, 84, 72, 73, 82, 84, 89, 128, 84, 87, 69, 76, 86, 69, 128, - 84, 87, 69, 76, 86, 197, 84, 87, 69, 76, 70, 84, 72, 83, 128, 84, 87, 69, - 76, 70, 84, 72, 128, 84, 87, 69, 128, 84, 87, 65, 65, 128, 84, 87, 65, - 128, 84, 86, 82, 73, 68, 79, 128, 84, 86, 73, 77, 65, 68, 85, 210, 84, - 85, 88, 128, 84, 85, 85, 77, 85, 128, 84, 85, 85, 128, 84, 85, 84, 84, - 89, 128, 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 84, 85, 84, 128, 84, - 85, 82, 88, 128, 84, 85, 82, 85, 128, 84, 85, 82, 84, 76, 69, 128, 84, - 85, 82, 79, 50, 128, 84, 85, 82, 78, 83, 84, 73, 76, 69, 128, 84, 85, 82, - 78, 69, 196, 84, 85, 82, 206, 84, 85, 82, 75, 73, 83, 200, 84, 85, 82, - 75, 73, 195, 84, 85, 82, 75, 69, 89, 128, 84, 85, 82, 66, 65, 78, 128, - 84, 85, 82, 128, 84, 85, 80, 128, 84, 85, 79, 88, 128, 84, 85, 79, 84, - 128, 84, 85, 79, 80, 128, 84, 85, 79, 128, 84, 85, 78, 78, 89, 128, 84, - 85, 77, 69, 84, 69, 83, 128, 84, 85, 77, 65, 69, 128, 84, 85, 77, 128, - 84, 85, 205, 84, 85, 76, 73, 80, 128, 84, 85, 75, 87, 69, 78, 84, 73, 83, - 128, 84, 85, 75, 128, 84, 85, 71, 82, 73, 203, 84, 85, 71, 50, 128, 84, - 85, 71, 178, 84, 85, 66, 128, 84, 85, 65, 82, 69, 199, 84, 85, 65, 69, - 80, 128, 84, 85, 65, 69, 128, 84, 213, 84, 84, 85, 85, 128, 84, 84, 85, - 68, 68, 65, 71, 128, 84, 84, 85, 68, 68, 65, 65, 71, 128, 84, 84, 85, - 128, 84, 84, 84, 72, 65, 128, 84, 84, 84, 65, 128, 84, 84, 83, 85, 128, - 84, 84, 83, 79, 128, 84, 84, 83, 73, 128, 84, 84, 83, 69, 69, 128, 84, - 84, 83, 69, 128, 84, 84, 83, 65, 128, 84, 84, 79, 79, 128, 84, 84, 73, - 73, 128, 84, 84, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, 72, 85, 128, - 84, 84, 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, - 84, 72, 69, 69, 128, 84, 84, 72, 69, 128, 84, 84, 72, 65, 65, 128, 84, - 84, 72, 128, 84, 84, 69, 72, 69, 72, 128, 84, 84, 69, 72, 69, 200, 84, - 84, 69, 72, 128, 84, 84, 69, 200, 84, 84, 69, 69, 128, 84, 84, 65, 89, - 65, 78, 78, 65, 128, 84, 84, 65, 85, 128, 84, 84, 65, 73, 128, 84, 84, - 65, 65, 128, 84, 84, 50, 128, 84, 83, 87, 69, 128, 84, 83, 87, 66, 128, - 84, 83, 87, 65, 128, 84, 83, 86, 128, 84, 83, 83, 69, 128, 84, 83, 83, - 65, 128, 84, 83, 79, 214, 84, 83, 73, 85, 128, 84, 83, 72, 85, 71, 83, - 128, 84, 83, 72, 79, 79, 75, 128, 84, 83, 72, 79, 79, 203, 84, 83, 72, - 79, 79, 74, 128, 84, 83, 72, 69, 83, 128, 84, 83, 72, 69, 71, 128, 84, - 83, 72, 69, 199, 84, 83, 72, 69, 69, 74, 128, 84, 83, 72, 69, 128, 84, - 83, 72, 65, 194, 84, 83, 72, 65, 128, 84, 83, 69, 82, 69, 128, 84, 83, - 69, 69, 66, 128, 84, 83, 65, 68, 73, 128, 84, 83, 65, 68, 201, 84, 83, - 65, 66, 128, 84, 83, 65, 65, 68, 73, 89, 128, 84, 83, 65, 65, 128, 84, - 83, 193, 84, 82, 89, 66, 76, 73, 79, 206, 84, 82, 85, 84, 72, 128, 84, - 82, 85, 78, 75, 128, 84, 82, 85, 78, 67, 65, 84, 69, 196, 84, 82, 85, 77, - 80, 69, 84, 128, 84, 82, 85, 77, 80, 45, 57, 128, 84, 82, 85, 77, 80, 45, - 56, 128, 84, 82, 85, 77, 80, 45, 55, 128, 84, 82, 85, 77, 80, 45, 54, - 128, 84, 82, 85, 77, 80, 45, 53, 128, 84, 82, 85, 77, 80, 45, 52, 128, - 84, 82, 85, 77, 80, 45, 51, 128, 84, 82, 85, 77, 80, 45, 50, 49, 128, 84, - 82, 85, 77, 80, 45, 50, 48, 128, 84, 82, 85, 77, 80, 45, 50, 128, 84, 82, - 85, 77, 80, 45, 49, 57, 128, 84, 82, 85, 77, 80, 45, 49, 56, 128, 84, 82, - 85, 77, 80, 45, 49, 55, 128, 84, 82, 85, 77, 80, 45, 49, 54, 128, 84, 82, - 85, 77, 80, 45, 49, 53, 128, 84, 82, 85, 77, 80, 45, 49, 52, 128, 84, 82, - 85, 77, 80, 45, 49, 51, 128, 84, 82, 85, 77, 80, 45, 49, 50, 128, 84, 82, - 85, 77, 80, 45, 49, 49, 128, 84, 82, 85, 77, 80, 45, 49, 48, 128, 84, 82, - 85, 77, 80, 45, 49, 128, 84, 82, 85, 69, 128, 84, 82, 85, 67, 75, 128, - 84, 82, 79, 80, 73, 67, 65, 204, 84, 82, 79, 80, 72, 89, 128, 84, 82, 79, - 77, 73, 75, 79, 83, 89, 78, 65, 71, 77, 65, 128, 84, 82, 79, 77, 73, 75, - 79, 80, 83, 73, 70, 73, 83, 84, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, - 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 84, 82, 79, 77, 73, 75, - 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, 206, 84, 82, 79, 77, 73, 75, 79, - 76, 89, 71, 73, 83, 77, 65, 128, 84, 82, 79, 76, 76, 69, 89, 66, 85, 83, + 87, 69, 78, 84, 89, 45, 84, 87, 207, 84, 87, 69, 78, 84, 89, 45, 84, 72, + 82, 69, 69, 128, 84, 87, 69, 78, 84, 89, 45, 83, 73, 88, 128, 84, 87, 69, + 78, 84, 89, 45, 83, 69, 86, 69, 78, 128, 84, 87, 69, 78, 84, 89, 45, 79, + 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 78, 73, 78, 69, 128, 84, 87, 69, + 78, 84, 89, 45, 70, 79, 85, 82, 128, 84, 87, 69, 78, 84, 89, 45, 70, 73, + 86, 69, 128, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, 200, 84, 87, + 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, 128, 84, 87, 69, 78, 84, 89, 128, + 84, 87, 69, 78, 84, 217, 84, 87, 69, 78, 84, 73, 69, 84, 72, 83, 128, 84, + 87, 69, 78, 84, 73, 69, 84, 72, 128, 84, 87, 69, 76, 86, 69, 45, 84, 72, + 73, 82, 84, 89, 128, 84, 87, 69, 76, 86, 69, 128, 84, 87, 69, 76, 86, + 197, 84, 87, 69, 76, 70, 84, 72, 83, 128, 84, 87, 69, 76, 70, 84, 72, + 128, 84, 87, 69, 128, 84, 87, 65, 65, 128, 84, 87, 65, 128, 84, 86, 82, + 73, 68, 79, 128, 84, 86, 73, 77, 65, 68, 85, 210, 84, 85, 88, 69, 68, 79, + 128, 84, 85, 88, 128, 84, 85, 85, 77, 85, 128, 84, 85, 85, 128, 84, 85, + 84, 84, 89, 128, 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 84, 85, 84, + 128, 84, 85, 82, 88, 128, 84, 85, 82, 85, 128, 84, 85, 82, 84, 76, 69, + 128, 84, 85, 82, 79, 50, 128, 84, 85, 82, 78, 83, 84, 73, 76, 69, 128, + 84, 85, 82, 78, 69, 196, 84, 85, 82, 206, 84, 85, 82, 75, 73, 83, 200, + 84, 85, 82, 75, 73, 195, 84, 85, 82, 75, 69, 89, 128, 84, 85, 82, 66, 65, + 78, 128, 84, 85, 82, 128, 84, 85, 80, 128, 84, 85, 79, 88, 128, 84, 85, + 79, 84, 128, 84, 85, 79, 80, 128, 84, 85, 79, 128, 84, 85, 78, 78, 89, + 128, 84, 85, 77, 69, 84, 69, 83, 128, 84, 85, 77, 66, 76, 69, 210, 84, + 85, 77, 65, 69, 128, 84, 85, 77, 128, 84, 85, 205, 84, 85, 76, 73, 80, + 128, 84, 85, 75, 87, 69, 78, 84, 73, 83, 128, 84, 85, 75, 128, 84, 85, + 71, 82, 73, 203, 84, 85, 71, 50, 128, 84, 85, 71, 178, 84, 85, 66, 128, + 84, 85, 65, 82, 69, 199, 84, 85, 65, 69, 80, 128, 84, 85, 65, 69, 128, + 84, 213, 84, 84, 85, 85, 128, 84, 84, 85, 68, 68, 65, 71, 128, 84, 84, + 85, 68, 68, 65, 65, 71, 128, 84, 84, 85, 128, 84, 84, 84, 72, 65, 128, + 84, 84, 84, 65, 128, 84, 84, 83, 85, 128, 84, 84, 83, 79, 128, 84, 84, + 83, 73, 128, 84, 84, 83, 69, 69, 128, 84, 84, 83, 69, 128, 84, 84, 83, + 65, 128, 84, 84, 79, 79, 128, 84, 84, 73, 73, 128, 84, 84, 73, 128, 84, + 84, 72, 87, 69, 128, 84, 84, 72, 85, 128, 84, 84, 72, 79, 79, 128, 84, + 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, 84, 72, 69, 69, 128, 84, 84, + 72, 69, 128, 84, 84, 72, 65, 65, 128, 84, 84, 72, 128, 84, 84, 69, 72, + 69, 72, 128, 84, 84, 69, 72, 69, 200, 84, 84, 69, 72, 128, 84, 84, 69, + 200, 84, 84, 69, 69, 128, 84, 84, 65, 89, 65, 78, 78, 65, 128, 84, 84, + 65, 85, 128, 84, 84, 65, 73, 128, 84, 84, 65, 65, 128, 84, 84, 50, 128, + 84, 83, 87, 69, 128, 84, 83, 87, 66, 128, 84, 83, 87, 65, 128, 84, 83, + 86, 128, 84, 83, 83, 69, 128, 84, 83, 83, 65, 128, 84, 83, 79, 214, 84, + 83, 73, 85, 128, 84, 83, 72, 85, 71, 83, 128, 84, 83, 72, 79, 79, 75, + 128, 84, 83, 72, 79, 79, 203, 84, 83, 72, 79, 79, 74, 128, 84, 83, 72, + 69, 83, 128, 84, 83, 72, 69, 71, 128, 84, 83, 72, 69, 199, 84, 83, 72, + 69, 69, 74, 128, 84, 83, 72, 69, 128, 84, 83, 72, 65, 194, 84, 83, 72, + 65, 128, 84, 83, 69, 82, 69, 128, 84, 83, 69, 69, 66, 128, 84, 83, 65, + 68, 73, 128, 84, 83, 65, 68, 201, 84, 83, 65, 66, 128, 84, 83, 65, 65, + 68, 73, 89, 128, 84, 83, 65, 65, 128, 84, 83, 193, 84, 82, 89, 66, 76, + 73, 79, 206, 84, 82, 85, 84, 72, 128, 84, 82, 85, 78, 75, 128, 84, 82, + 85, 78, 67, 65, 84, 69, 196, 84, 82, 85, 77, 80, 69, 84, 128, 84, 82, 85, + 77, 80, 45, 57, 128, 84, 82, 85, 77, 80, 45, 56, 128, 84, 82, 85, 77, 80, + 45, 55, 128, 84, 82, 85, 77, 80, 45, 54, 128, 84, 82, 85, 77, 80, 45, 53, + 128, 84, 82, 85, 77, 80, 45, 52, 128, 84, 82, 85, 77, 80, 45, 51, 128, + 84, 82, 85, 77, 80, 45, 50, 49, 128, 84, 82, 85, 77, 80, 45, 50, 48, 128, + 84, 82, 85, 77, 80, 45, 50, 128, 84, 82, 85, 77, 80, 45, 49, 57, 128, 84, + 82, 85, 77, 80, 45, 49, 56, 128, 84, 82, 85, 77, 80, 45, 49, 55, 128, 84, + 82, 85, 77, 80, 45, 49, 54, 128, 84, 82, 85, 77, 80, 45, 49, 53, 128, 84, + 82, 85, 77, 80, 45, 49, 52, 128, 84, 82, 85, 77, 80, 45, 49, 51, 128, 84, + 82, 85, 77, 80, 45, 49, 50, 128, 84, 82, 85, 77, 80, 45, 49, 49, 128, 84, + 82, 85, 77, 80, 45, 49, 48, 128, 84, 82, 85, 77, 80, 45, 49, 128, 84, 82, + 85, 69, 128, 84, 82, 85, 67, 75, 128, 84, 82, 79, 80, 73, 67, 65, 204, + 84, 82, 79, 80, 72, 89, 128, 84, 82, 79, 77, 73, 75, 79, 83, 89, 78, 65, + 71, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79, 80, 83, 73, 70, 73, 83, 84, + 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, 80, 65, 82, 65, 75, 65, 76, 69, + 83, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79, 78, 128, 84, 82, 79, 77, 73, + 75, 79, 206, 84, 82, 79, 77, 73, 75, 79, 76, 89, 71, 73, 83, 77, 65, 128, + 84, 82, 79, 76, 76, 69, 89, 66, 85, 83, 128, 84, 82, 79, 76, 76, 69, 89, 128, 84, 82, 79, 75, 85, 84, 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, 84, 82, 73, 85, 77, 80, 72, 128, 84, 82, 73, 84, 79, 211, 84, 82, 73, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 82, 73, 83, 73, 77, @@ -688,249 +694,250 @@ static unsigned char lexicon[] = { 200, 84, 72, 82, 69, 69, 45, 84, 72, 73, 82, 84, 89, 128, 84, 72, 82, 69, 69, 45, 81, 85, 65, 82, 84, 69, 210, 84, 72, 82, 69, 69, 45, 80, 69, 82, 45, 69, 205, 84, 72, 82, 69, 69, 45, 76, 73, 78, 197, 84, 72, 82, 69, 69, - 45, 69, 205, 84, 72, 82, 69, 69, 45, 196, 84, 72, 82, 69, 69, 45, 67, 73, - 82, 67, 76, 197, 84, 72, 82, 69, 65, 68, 128, 84, 72, 79, 85, 83, 65, 78, - 68, 83, 128, 84, 72, 79, 85, 83, 65, 78, 68, 211, 84, 72, 79, 85, 83, 65, - 78, 68, 128, 84, 72, 79, 85, 83, 65, 78, 196, 84, 72, 79, 85, 71, 72, - 212, 84, 72, 79, 85, 128, 84, 72, 79, 82, 78, 128, 84, 72, 79, 82, 206, - 84, 72, 79, 78, 71, 128, 84, 72, 79, 77, 128, 84, 72, 79, 74, 128, 84, - 72, 79, 65, 128, 84, 72, 207, 84, 72, 73, 85, 84, 72, 128, 84, 72, 73, - 84, 65, 128, 84, 72, 73, 82, 84, 89, 45, 83, 69, 67, 79, 78, 196, 84, 72, - 73, 82, 84, 89, 45, 79, 78, 69, 128, 84, 72, 73, 82, 84, 217, 84, 72, 73, - 82, 84, 69, 69, 78, 128, 84, 72, 73, 82, 84, 69, 69, 206, 84, 72, 73, 82, - 68, 83, 128, 84, 72, 73, 82, 68, 211, 84, 72, 73, 82, 68, 45, 83, 84, 65, - 71, 197, 84, 72, 73, 82, 68, 128, 84, 72, 73, 82, 196, 84, 72, 73, 78, - 75, 73, 78, 199, 84, 72, 73, 73, 128, 84, 72, 73, 71, 72, 128, 84, 72, - 73, 69, 85, 84, 200, 84, 72, 73, 67, 203, 84, 72, 73, 65, 66, 128, 84, - 72, 69, 89, 128, 84, 72, 69, 84, 72, 69, 128, 84, 72, 69, 84, 72, 128, - 84, 72, 69, 84, 65, 128, 84, 72, 69, 84, 193, 84, 72, 69, 83, 80, 73, 65, - 206, 84, 72, 69, 83, 69, 79, 83, 128, 84, 72, 69, 83, 69, 79, 211, 84, - 72, 69, 211, 84, 72, 69, 82, 77, 79, 77, 69, 84, 69, 82, 128, 84, 72, 69, - 82, 77, 79, 68, 89, 78, 65, 77, 73, 67, 128, 84, 72, 69, 82, 69, 70, 79, - 82, 69, 128, 84, 72, 69, 82, 197, 84, 72, 69, 206, 84, 72, 69, 77, 65, - 84, 73, 83, 77, 79, 211, 84, 72, 69, 77, 65, 128, 84, 72, 69, 77, 193, - 84, 72, 69, 72, 128, 84, 72, 69, 200, 84, 72, 69, 65, 128, 84, 72, 197, - 84, 72, 65, 87, 128, 84, 72, 65, 78, 84, 72, 65, 75, 72, 65, 84, 128, 84, - 72, 65, 78, 78, 65, 128, 84, 72, 65, 78, 128, 84, 72, 65, 206, 84, 72, - 65, 77, 69, 68, 72, 128, 84, 72, 65, 76, 128, 84, 72, 65, 204, 84, 72, - 65, 74, 128, 84, 72, 65, 201, 84, 72, 65, 72, 65, 78, 128, 84, 72, 65, - 65, 78, 193, 84, 72, 65, 65, 76, 85, 128, 84, 72, 45, 67, 82, 69, 197, - 84, 69, 88, 84, 128, 84, 69, 88, 212, 84, 69, 88, 128, 84, 69, 86, 73, - 82, 128, 84, 69, 85, 84, 69, 85, 88, 128, 84, 69, 85, 84, 69, 85, 87, 69, - 78, 128, 84, 69, 85, 84, 128, 84, 69, 85, 78, 128, 84, 69, 85, 65, 69, - 81, 128, 84, 69, 85, 65, 69, 78, 128, 84, 69, 85, 128, 84, 69, 84, 82, - 65, 83, 73, 77, 79, 85, 128, 84, 69, 84, 82, 65, 83, 69, 77, 69, 128, 84, - 69, 84, 82, 65, 80, 76, 73, 128, 84, 69, 84, 82, 65, 71, 82, 65, 205, 84, - 69, 84, 82, 65, 70, 79, 78, 73, 65, 83, 128, 84, 69, 84, 72, 128, 84, 69, - 84, 200, 84, 69, 84, 65, 82, 84, 79, 211, 84, 69, 84, 65, 82, 84, 73, 77, - 79, 82, 73, 79, 78, 128, 84, 69, 84, 128, 84, 69, 212, 84, 69, 83, 83, - 69, 82, 65, 128, 84, 69, 83, 83, 69, 82, 193, 84, 69, 83, 83, 65, 82, 79, - 206, 84, 69, 83, 200, 84, 69, 82, 77, 73, 78, 65, 84, 79, 82, 128, 84, - 69, 80, 128, 84, 69, 78, 85, 84, 79, 128, 84, 69, 78, 85, 128, 84, 69, - 78, 213, 84, 69, 78, 84, 72, 128, 84, 69, 78, 84, 128, 84, 69, 78, 83, - 69, 128, 84, 69, 78, 83, 197, 84, 69, 78, 83, 128, 84, 69, 78, 211, 84, - 69, 78, 78, 73, 211, 84, 69, 78, 71, 197, 84, 69, 78, 45, 84, 72, 73, 82, - 84, 89, 128, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211, 84, - 69, 76, 85, 128, 84, 69, 76, 79, 85, 211, 84, 69, 76, 76, 69, 210, 84, - 69, 76, 73, 83, 72, 193, 84, 69, 76, 69, 86, 73, 83, 73, 79, 78, 128, 84, - 69, 76, 69, 83, 67, 79, 80, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78, 69, - 128, 84, 69, 76, 69, 80, 72, 79, 78, 197, 84, 69, 76, 69, 73, 65, 128, - 84, 69, 76, 69, 71, 82, 65, 80, 200, 84, 69, 75, 128, 84, 69, 73, 87, 83, - 128, 84, 69, 71, 69, 72, 128, 84, 69, 69, 84, 72, 128, 84, 69, 69, 84, - 200, 84, 69, 69, 78, 83, 128, 84, 69, 69, 69, 69, 128, 84, 69, 197, 84, - 69, 68, 85, 78, 71, 128, 84, 69, 65, 82, 211, 84, 69, 65, 82, 68, 82, 79, - 80, 45, 83, 80, 79, 75, 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, - 72, 65, 78, 75, 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, - 66, 69, 196, 84, 69, 65, 82, 45, 79, 70, 198, 84, 69, 65, 67, 85, 208, - 84, 69, 45, 85, 128, 84, 69, 45, 50, 128, 84, 67, 72, 69, 72, 69, 72, - 128, 84, 67, 72, 69, 72, 69, 200, 84, 67, 72, 69, 72, 128, 84, 67, 72, - 69, 200, 84, 67, 72, 69, 128, 84, 195, 84, 65, 89, 128, 84, 65, 88, 73, - 128, 84, 65, 88, 128, 84, 65, 87, 69, 76, 76, 69, 77, 69, 212, 84, 65, - 87, 65, 128, 84, 65, 87, 128, 84, 65, 86, 73, 89, 65, 78, 73, 128, 84, - 65, 86, 128, 84, 65, 214, 84, 65, 85, 82, 85, 83, 128, 84, 65, 85, 77, - 128, 84, 65, 213, 84, 65, 84, 87, 69, 69, 76, 128, 84, 65, 84, 87, 69, - 69, 204, 84, 65, 84, 84, 79, 79, 69, 196, 84, 65, 84, 128, 84, 65, 83, - 128, 84, 65, 82, 85, 78, 71, 128, 84, 65, 82, 84, 65, 82, 45, 50, 128, - 84, 65, 82, 84, 65, 82, 128, 84, 65, 82, 71, 69, 84, 128, 84, 65, 81, - 128, 84, 65, 80, 69, 82, 128, 84, 65, 80, 197, 84, 65, 80, 128, 84, 65, - 79, 128, 84, 65, 78, 78, 69, 196, 84, 65, 78, 71, 69, 82, 73, 78, 69, - 128, 84, 65, 78, 71, 69, 78, 84, 128, 84, 65, 78, 71, 69, 78, 212, 84, - 65, 78, 199, 84, 65, 78, 65, 66, 65, 84, 193, 84, 65, 78, 128, 84, 65, - 77, 73, 78, 71, 128, 84, 65, 77, 128, 84, 65, 76, 76, 128, 84, 65, 76, - 204, 84, 65, 76, 73, 78, 71, 128, 84, 65, 76, 73, 78, 199, 84, 65, 76, - 69, 78, 84, 83, 128, 84, 65, 76, 69, 78, 212, 84, 65, 75, 82, 201, 84, - 65, 75, 72, 65, 76, 76, 85, 83, 128, 84, 65, 75, 69, 128, 84, 65, 75, 52, - 128, 84, 65, 75, 180, 84, 65, 75, 128, 84, 65, 73, 83, 89, 79, 85, 128, - 84, 65, 73, 76, 76, 69, 83, 211, 84, 65, 73, 76, 128, 84, 65, 73, 204, - 84, 65, 72, 128, 84, 65, 200, 84, 65, 71, 66, 65, 78, 87, 193, 84, 65, - 71, 65, 76, 79, 199, 84, 65, 71, 128, 84, 65, 69, 206, 84, 65, 67, 79, - 128, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, 65, 84, - 73, 79, 78, 128, 84, 65, 66, 85, 76, 65, 84, 73, 79, 206, 84, 65, 66, 83, - 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 76, 197, 84, 65, 66, 128, 84, - 65, 194, 84, 65, 65, 83, 72, 65, 69, 128, 84, 65, 65, 81, 128, 84, 65, - 65, 77, 128, 84, 65, 65, 76, 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, - 65, 70, 128, 84, 65, 50, 128, 84, 65, 45, 82, 79, 76, 128, 84, 65, 45, - 50, 128, 84, 48, 51, 54, 128, 84, 48, 51, 53, 128, 84, 48, 51, 52, 128, - 84, 48, 51, 51, 65, 128, 84, 48, 51, 51, 128, 84, 48, 51, 50, 65, 128, - 84, 48, 51, 50, 128, 84, 48, 51, 49, 128, 84, 48, 51, 48, 128, 84, 48, - 50, 57, 128, 84, 48, 50, 56, 128, 84, 48, 50, 55, 128, 84, 48, 50, 54, - 128, 84, 48, 50, 53, 128, 84, 48, 50, 52, 128, 84, 48, 50, 51, 128, 84, - 48, 50, 50, 128, 84, 48, 50, 49, 128, 84, 48, 50, 48, 128, 84, 48, 49, - 57, 128, 84, 48, 49, 56, 128, 84, 48, 49, 55, 128, 84, 48, 49, 54, 65, - 128, 84, 48, 49, 54, 128, 84, 48, 49, 53, 128, 84, 48, 49, 52, 128, 84, - 48, 49, 51, 128, 84, 48, 49, 50, 128, 84, 48, 49, 49, 65, 128, 84, 48, - 49, 49, 128, 84, 48, 49, 48, 128, 84, 48, 48, 57, 65, 128, 84, 48, 48, - 57, 128, 84, 48, 48, 56, 65, 128, 84, 48, 48, 56, 128, 84, 48, 48, 55, - 65, 128, 84, 48, 48, 55, 128, 84, 48, 48, 54, 128, 84, 48, 48, 53, 128, - 84, 48, 48, 52, 128, 84, 48, 48, 51, 65, 128, 84, 48, 48, 51, 128, 84, - 48, 48, 50, 128, 84, 48, 48, 49, 128, 84, 45, 83, 72, 73, 82, 84, 128, - 83, 90, 90, 128, 83, 90, 87, 71, 128, 83, 90, 87, 65, 128, 83, 90, 85, - 128, 83, 90, 79, 128, 83, 90, 73, 128, 83, 90, 69, 69, 128, 83, 90, 69, - 128, 83, 90, 65, 65, 128, 83, 90, 65, 128, 83, 90, 128, 83, 89, 88, 128, - 83, 89, 84, 128, 83, 89, 83, 84, 69, 205, 83, 89, 82, 88, 128, 83, 89, - 82, 77, 65, 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 128, 83, 89, 82, 73, - 78, 71, 69, 128, 83, 89, 82, 73, 65, 195, 83, 89, 82, 128, 83, 89, 80, - 128, 83, 89, 79, 85, 87, 65, 128, 83, 89, 78, 69, 86, 77, 65, 128, 83, - 89, 78, 68, 69, 83, 77, 79, 211, 83, 89, 78, 67, 72, 82, 79, 78, 79, 85, - 211, 83, 89, 78, 65, 71, 79, 71, 85, 69, 128, 83, 89, 78, 65, 71, 77, - 193, 83, 89, 78, 65, 70, 73, 128, 83, 89, 78, 128, 83, 89, 77, 77, 69, - 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 83, 89, 77, 66, 79, - 76, 83, 128, 83, 89, 77, 66, 79, 76, 45, 57, 128, 83, 89, 77, 66, 79, 76, - 45, 56, 128, 83, 89, 77, 66, 79, 76, 45, 55, 128, 83, 89, 77, 66, 79, 76, - 45, 54, 128, 83, 89, 77, 66, 79, 76, 45, 53, 52, 128, 83, 89, 77, 66, 79, - 76, 45, 53, 51, 128, 83, 89, 77, 66, 79, 76, 45, 53, 50, 128, 83, 89, 77, - 66, 79, 76, 45, 53, 49, 128, 83, 89, 77, 66, 79, 76, 45, 53, 48, 128, 83, - 89, 77, 66, 79, 76, 45, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, 57, 128, - 83, 89, 77, 66, 79, 76, 45, 52, 56, 128, 83, 89, 77, 66, 79, 76, 45, 52, - 55, 128, 83, 89, 77, 66, 79, 76, 45, 52, 53, 128, 83, 89, 77, 66, 79, 76, - 45, 52, 51, 128, 83, 89, 77, 66, 79, 76, 45, 52, 50, 128, 83, 89, 77, 66, - 79, 76, 45, 52, 48, 128, 83, 89, 77, 66, 79, 76, 45, 52, 128, 83, 89, 77, - 66, 79, 76, 45, 51, 57, 128, 83, 89, 77, 66, 79, 76, 45, 51, 56, 128, 83, - 89, 77, 66, 79, 76, 45, 51, 55, 128, 83, 89, 77, 66, 79, 76, 45, 51, 54, - 128, 83, 89, 77, 66, 79, 76, 45, 51, 50, 128, 83, 89, 77, 66, 79, 76, 45, - 51, 48, 128, 83, 89, 77, 66, 79, 76, 45, 51, 128, 83, 89, 77, 66, 79, 76, - 45, 50, 57, 128, 83, 89, 77, 66, 79, 76, 45, 50, 55, 128, 83, 89, 77, 66, - 79, 76, 45, 50, 54, 128, 83, 89, 77, 66, 79, 76, 45, 50, 53, 128, 83, 89, - 77, 66, 79, 76, 45, 50, 52, 128, 83, 89, 77, 66, 79, 76, 45, 50, 51, 128, - 83, 89, 77, 66, 79, 76, 45, 50, 50, 128, 83, 89, 77, 66, 79, 76, 45, 50, - 49, 128, 83, 89, 77, 66, 79, 76, 45, 50, 48, 128, 83, 89, 77, 66, 79, 76, - 45, 50, 128, 83, 89, 77, 66, 79, 76, 45, 49, 57, 128, 83, 89, 77, 66, 79, - 76, 45, 49, 56, 128, 83, 89, 77, 66, 79, 76, 45, 49, 55, 128, 83, 89, 77, - 66, 79, 76, 45, 49, 54, 128, 83, 89, 77, 66, 79, 76, 45, 49, 53, 128, 83, - 89, 77, 66, 79, 76, 45, 49, 52, 128, 83, 89, 77, 66, 79, 76, 45, 49, 51, - 128, 83, 89, 77, 66, 79, 76, 45, 49, 50, 128, 83, 89, 77, 66, 79, 76, 45, - 49, 49, 128, 83, 89, 77, 66, 79, 76, 45, 49, 48, 128, 83, 89, 77, 66, 79, - 76, 45, 49, 128, 83, 89, 76, 79, 84, 201, 83, 89, 128, 83, 87, 90, 128, - 83, 87, 85, 78, 199, 83, 87, 79, 82, 68, 83, 128, 83, 87, 79, 82, 68, - 128, 83, 87, 79, 79, 128, 83, 87, 79, 128, 83, 87, 73, 82, 204, 83, 87, - 73, 77, 77, 73, 78, 71, 128, 83, 87, 73, 77, 77, 69, 82, 128, 83, 87, 73, - 73, 128, 83, 87, 73, 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 83, - 87, 69, 69, 212, 83, 87, 69, 65, 84, 128, 83, 87, 69, 65, 212, 83, 87, - 65, 83, 200, 83, 87, 65, 80, 80, 73, 78, 71, 128, 83, 87, 65, 65, 128, - 83, 87, 128, 83, 86, 65, 83, 84, 201, 83, 86, 65, 82, 73, 84, 65, 128, - 83, 86, 65, 82, 73, 84, 193, 83, 85, 88, 128, 83, 85, 85, 128, 83, 85, - 84, 82, 193, 83, 85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, - 83, 85, 83, 72, 73, 128, 83, 85, 82, 89, 65, 128, 83, 85, 82, 88, 128, - 83, 85, 82, 82, 79, 85, 78, 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 83, - 85, 82, 70, 69, 82, 128, 83, 85, 82, 70, 65, 67, 197, 83, 85, 82, 69, - 128, 83, 85, 82, 65, 78, 71, 128, 83, 85, 82, 57, 128, 83, 85, 82, 128, - 83, 85, 210, 83, 85, 80, 82, 65, 76, 73, 78, 69, 65, 210, 83, 85, 80, 69, - 82, 86, 73, 83, 69, 128, 83, 85, 80, 69, 82, 83, 69, 84, 128, 83, 85, 80, - 69, 82, 83, 69, 212, 83, 85, 80, 69, 82, 83, 67, 82, 73, 80, 212, 83, 85, - 80, 69, 82, 73, 77, 80, 79, 83, 69, 196, 83, 85, 80, 69, 82, 70, 73, 88, - 69, 196, 83, 85, 80, 69, 210, 83, 85, 80, 128, 83, 85, 79, 88, 128, 83, - 85, 79, 80, 128, 83, 85, 79, 128, 83, 85, 78, 83, 69, 212, 83, 85, 78, - 82, 73, 83, 69, 128, 83, 85, 78, 82, 73, 83, 197, 83, 85, 78, 71, 76, 65, - 83, 83, 69, 83, 128, 83, 85, 78, 71, 128, 83, 85, 78, 70, 76, 79, 87, 69, - 82, 128, 83, 85, 78, 68, 65, 78, 69, 83, 197, 83, 85, 78, 128, 83, 85, - 206, 83, 85, 77, 77, 69, 82, 128, 83, 85, 77, 77, 65, 84, 73, 79, 78, - 128, 83, 85, 77, 77, 65, 84, 73, 79, 206, 83, 85, 77, 65, 83, 72, 128, - 83, 85, 77, 128, 83, 85, 76, 70, 85, 82, 128, 83, 85, 75, 85, 78, 128, - 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, 213, 83, 85, 73, - 84, 65, 66, 76, 69, 128, 83, 85, 73, 84, 128, 83, 85, 73, 212, 83, 85, - 72, 85, 82, 128, 83, 85, 69, 128, 83, 85, 68, 50, 128, 83, 85, 68, 128, - 83, 85, 67, 75, 73, 78, 199, 83, 85, 67, 75, 69, 68, 128, 83, 85, 67, - 203, 83, 85, 67, 67, 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, - 211, 83, 85, 67, 67, 69, 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, - 85, 66, 85, 78, 73, 84, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, - 206, 83, 85, 66, 83, 84, 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, - 84, 85, 84, 197, 83, 85, 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, - 83, 85, 66, 83, 67, 82, 73, 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, - 83, 128, 83, 85, 66, 76, 73, 78, 69, 65, 210, 83, 85, 66, 76, 73, 77, 65, - 84, 73, 79, 78, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 45, 51, 128, 83, - 85, 66, 76, 73, 77, 65, 84, 69, 45, 50, 128, 83, 85, 66, 76, 73, 77, 65, - 84, 69, 128, 83, 85, 66, 76, 73, 77, 65, 84, 197, 83, 85, 66, 74, 79, 73, - 78, 69, 196, 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, 66, 73, 84, 79, - 128, 83, 85, 66, 71, 82, 79, 85, 80, 128, 83, 85, 66, 71, 82, 79, 85, - 208, 83, 85, 66, 128, 83, 85, 65, 77, 128, 83, 85, 65, 69, 84, 128, 83, - 85, 65, 69, 78, 128, 83, 85, 65, 69, 128, 83, 85, 65, 66, 128, 83, 85, - 65, 128, 83, 213, 83, 84, 88, 128, 83, 84, 87, 65, 128, 83, 84, 85, 68, - 89, 128, 83, 84, 85, 68, 73, 207, 83, 84, 85, 67, 75, 45, 79, 85, 212, - 83, 84, 83, 128, 83, 84, 82, 79, 78, 199, 83, 84, 82, 79, 75, 69, 83, - 128, 83, 84, 82, 79, 75, 69, 211, 83, 84, 82, 79, 75, 69, 45, 57, 128, - 83, 84, 82, 79, 75, 69, 45, 56, 128, 83, 84, 82, 79, 75, 69, 45, 55, 128, - 83, 84, 82, 79, 75, 69, 45, 54, 128, 83, 84, 82, 79, 75, 69, 45, 53, 128, - 83, 84, 82, 79, 75, 69, 45, 52, 128, 83, 84, 82, 79, 75, 69, 45, 51, 128, - 83, 84, 82, 79, 75, 69, 45, 50, 128, 83, 84, 82, 79, 75, 69, 45, 49, 49, - 128, 83, 84, 82, 79, 75, 69, 45, 49, 48, 128, 83, 84, 82, 79, 75, 69, 45, - 49, 128, 83, 84, 82, 79, 75, 197, 83, 84, 82, 73, 80, 69, 128, 83, 84, - 82, 73, 78, 71, 128, 83, 84, 82, 73, 78, 199, 83, 84, 82, 73, 75, 69, 84, - 72, 82, 79, 85, 71, 72, 128, 83, 84, 82, 73, 75, 197, 83, 84, 82, 73, 68, - 69, 128, 83, 84, 82, 73, 67, 84, 76, 217, 83, 84, 82, 69, 84, 67, 72, 69, - 196, 83, 84, 82, 69, 84, 67, 72, 128, 83, 84, 82, 69, 83, 211, 83, 84, - 82, 69, 78, 71, 84, 72, 128, 83, 84, 82, 69, 65, 77, 69, 82, 128, 83, 84, - 82, 65, 87, 66, 69, 82, 82, 89, 128, 83, 84, 82, 65, 84, 85, 77, 45, 50, - 128, 83, 84, 82, 65, 84, 85, 77, 128, 83, 84, 82, 65, 84, 85, 205, 83, - 84, 82, 65, 84, 73, 65, 206, 83, 84, 82, 65, 73, 78, 69, 82, 128, 83, 84, - 82, 65, 73, 71, 72, 84, 78, 69, 83, 83, 128, 83, 84, 82, 65, 73, 71, 72, - 84, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83, 84, 82, 65, 73, 70, 128, - 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65, 128, 83, 84, 79, 86, 69, - 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80, 87, 65, 84, 67, 72, 128, - 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79, 80, 80, 65, 71, 69, 128, - 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84, 79, 78, 69, 128, 83, 84, - 79, 67, 75, 128, 83, 84, 79, 67, 203, 83, 84, 73, 82, 82, 85, 208, 83, - 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204, 83, 84, 73, 76, 197, 83, - 84, 73, 71, 77, 65, 128, 83, 84, 73, 67, 75, 73, 78, 199, 83, 84, 73, 67, - 203, 83, 84, 69, 82, 69, 79, 128, 83, 84, 69, 80, 128, 83, 84, 69, 78, - 79, 71, 82, 65, 80, 72, 73, 195, 83, 84, 69, 77, 128, 83, 84, 69, 65, 77, - 73, 78, 199, 83, 84, 69, 65, 77, 128, 83, 84, 69, 65, 205, 83, 84, 65, - 86, 82, 79, 85, 128, 83, 84, 65, 86, 82, 79, 83, 128, 83, 84, 65, 86, 82, - 79, 211, 83, 84, 65, 85, 82, 79, 83, 128, 83, 84, 65, 84, 85, 197, 83, - 84, 65, 84, 73, 79, 78, 128, 83, 84, 65, 84, 69, 82, 83, 128, 83, 84, 65, - 84, 69, 128, 83, 84, 65, 82, 212, 83, 84, 65, 82, 83, 128, 83, 84, 65, - 82, 82, 69, 196, 83, 84, 65, 82, 75, 128, 83, 84, 65, 82, 128, 83, 84, - 65, 210, 83, 84, 65, 78, 68, 83, 84, 73, 76, 76, 128, 83, 84, 65, 78, 68, - 65, 82, 196, 83, 84, 65, 78, 68, 128, 83, 84, 65, 78, 128, 83, 84, 65, - 77, 80, 69, 196, 83, 84, 65, 76, 76, 73, 79, 78, 128, 83, 84, 65, 70, 70, - 128, 83, 84, 65, 70, 198, 83, 84, 65, 68, 73, 85, 77, 128, 83, 84, 65, - 67, 67, 65, 84, 79, 128, 83, 84, 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, - 79, 128, 83, 84, 50, 128, 83, 83, 89, 88, 128, 83, 83, 89, 84, 128, 83, - 83, 89, 82, 88, 128, 83, 83, 89, 82, 128, 83, 83, 89, 80, 128, 83, 83, - 89, 128, 83, 83, 85, 88, 128, 83, 83, 85, 85, 128, 83, 83, 85, 84, 128, - 83, 83, 85, 80, 128, 83, 83, 79, 88, 128, 83, 83, 79, 84, 128, 83, 83, - 79, 80, 128, 83, 83, 79, 79, 128, 83, 83, 79, 128, 83, 83, 73, 88, 128, - 83, 83, 73, 84, 128, 83, 83, 73, 80, 128, 83, 83, 73, 73, 128, 83, 83, - 73, 69, 88, 128, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, - 73, 128, 83, 83, 72, 73, 78, 128, 83, 83, 72, 69, 128, 83, 83, 69, 88, - 128, 83, 83, 69, 80, 128, 83, 83, 69, 69, 128, 83, 83, 65, 88, 128, 83, - 83, 65, 85, 128, 83, 83, 65, 84, 128, 83, 83, 65, 80, 128, 83, 83, 65, - 78, 71, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, - 71, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, - 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 84, 72, 73, 69, 85, - 84, 72, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, - 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, - 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 83, - 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 83, 65, 78, 71, 82, 73, 69, 85, - 76, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 83, 65, 78, 71, 82, 73, 69, - 85, 76, 128, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, - 71, 78, 73, 69, 85, 78, 128, 83, 83, 65, 78, 71, 77, 73, 69, 85, 77, 128, - 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 83, 83, 65, 78, 71, 73, - 69, 85, 78, 71, 128, 83, 83, 65, 78, 71, 72, 73, 69, 85, 72, 128, 83, 83, - 65, 78, 71, 67, 73, 69, 85, 67, 45, 72, 73, 69, 85, 72, 128, 83, 83, 65, - 78, 71, 67, 73, 69, 85, 67, 128, 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, - 128, 83, 83, 65, 73, 128, 83, 83, 65, 65, 128, 83, 83, 51, 128, 83, 83, - 50, 128, 83, 82, 128, 83, 81, 85, 73, 83, 200, 83, 81, 85, 73, 82, 82, - 69, 204, 83, 81, 85, 73, 71, 71, 76, 197, 83, 81, 85, 69, 69, 90, 69, 68, + 45, 76, 69, 71, 71, 69, 196, 84, 72, 82, 69, 69, 45, 69, 205, 84, 72, 82, + 69, 69, 45, 196, 84, 72, 82, 69, 69, 45, 67, 73, 82, 67, 76, 197, 84, 72, + 82, 69, 65, 68, 128, 84, 72, 79, 85, 83, 65, 78, 68, 83, 128, 84, 72, 79, + 85, 83, 65, 78, 68, 211, 84, 72, 79, 85, 83, 65, 78, 68, 128, 84, 72, 79, + 85, 83, 65, 78, 196, 84, 72, 79, 85, 71, 72, 212, 84, 72, 79, 85, 128, + 84, 72, 79, 82, 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, 78, 71, 128, + 84, 72, 79, 77, 128, 84, 72, 79, 74, 128, 84, 72, 79, 65, 128, 84, 72, + 207, 84, 72, 73, 85, 84, 72, 128, 84, 72, 73, 84, 65, 128, 84, 72, 73, + 82, 84, 89, 45, 83, 69, 67, 79, 78, 196, 84, 72, 73, 82, 84, 89, 45, 79, + 78, 69, 128, 84, 72, 73, 82, 84, 217, 84, 72, 73, 82, 84, 69, 69, 78, + 128, 84, 72, 73, 82, 84, 69, 69, 206, 84, 72, 73, 82, 68, 83, 128, 84, + 72, 73, 82, 68, 211, 84, 72, 73, 82, 68, 45, 83, 84, 65, 71, 197, 84, 72, + 73, 82, 68, 128, 84, 72, 73, 82, 196, 84, 72, 73, 78, 75, 73, 78, 199, + 84, 72, 73, 73, 128, 84, 72, 73, 71, 72, 128, 84, 72, 73, 69, 85, 84, + 200, 84, 72, 73, 67, 203, 84, 72, 73, 65, 66, 128, 84, 72, 69, 89, 128, + 84, 72, 69, 84, 72, 69, 128, 84, 72, 69, 84, 72, 128, 84, 72, 69, 84, 65, + 128, 84, 72, 69, 84, 193, 84, 72, 69, 83, 80, 73, 65, 206, 84, 72, 69, + 83, 69, 79, 83, 128, 84, 72, 69, 83, 69, 79, 211, 84, 72, 69, 211, 84, + 72, 69, 82, 77, 79, 77, 69, 84, 69, 82, 128, 84, 72, 69, 82, 77, 79, 68, + 89, 78, 65, 77, 73, 67, 128, 84, 72, 69, 82, 69, 70, 79, 82, 69, 128, 84, + 72, 69, 82, 197, 84, 72, 69, 206, 84, 72, 69, 77, 65, 84, 73, 83, 77, 79, + 211, 84, 72, 69, 77, 65, 128, 84, 72, 69, 77, 193, 84, 72, 69, 72, 128, + 84, 72, 69, 200, 84, 72, 69, 65, 128, 84, 72, 197, 84, 72, 65, 87, 128, + 84, 72, 65, 78, 84, 72, 65, 75, 72, 65, 84, 128, 84, 72, 65, 78, 78, 65, + 128, 84, 72, 65, 78, 128, 84, 72, 65, 206, 84, 72, 65, 77, 69, 68, 72, + 128, 84, 72, 65, 76, 128, 84, 72, 65, 204, 84, 72, 65, 74, 128, 84, 72, + 65, 201, 84, 72, 65, 72, 65, 78, 128, 84, 72, 65, 65, 78, 193, 84, 72, + 65, 65, 76, 85, 128, 84, 72, 45, 67, 82, 69, 197, 84, 69, 88, 84, 128, + 84, 69, 88, 212, 84, 69, 88, 128, 84, 69, 86, 73, 82, 128, 84, 69, 85, + 84, 69, 85, 88, 128, 84, 69, 85, 84, 69, 85, 87, 69, 78, 128, 84, 69, 85, + 84, 128, 84, 69, 85, 78, 128, 84, 69, 85, 65, 69, 81, 128, 84, 69, 85, + 65, 69, 78, 128, 84, 69, 85, 128, 84, 69, 84, 82, 65, 83, 73, 77, 79, 85, + 128, 84, 69, 84, 82, 65, 83, 69, 77, 69, 128, 84, 69, 84, 82, 65, 80, 76, + 73, 128, 84, 69, 84, 82, 65, 71, 82, 65, 205, 84, 69, 84, 82, 65, 70, 79, + 78, 73, 65, 83, 128, 84, 69, 84, 72, 128, 84, 69, 84, 200, 84, 69, 84, + 65, 82, 84, 79, 211, 84, 69, 84, 65, 82, 84, 73, 77, 79, 82, 73, 79, 78, + 128, 84, 69, 84, 128, 84, 69, 212, 84, 69, 83, 83, 69, 82, 65, 128, 84, + 69, 83, 83, 69, 82, 193, 84, 69, 83, 83, 65, 82, 79, 206, 84, 69, 83, + 200, 84, 69, 82, 77, 73, 78, 65, 84, 79, 82, 128, 84, 69, 80, 128, 84, + 69, 78, 85, 84, 79, 128, 84, 69, 78, 85, 128, 84, 69, 78, 213, 84, 69, + 78, 84, 72, 128, 84, 69, 78, 84, 128, 84, 69, 78, 83, 69, 128, 84, 69, + 78, 83, 197, 84, 69, 78, 83, 128, 84, 69, 78, 211, 84, 69, 78, 78, 73, + 211, 84, 69, 78, 71, 197, 84, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, + 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211, 84, 69, 76, 85, + 128, 84, 69, 76, 79, 85, 211, 84, 69, 76, 76, 69, 210, 84, 69, 76, 73, + 83, 72, 193, 84, 69, 76, 69, 86, 73, 83, 73, 79, 78, 128, 84, 69, 76, 69, + 83, 67, 79, 80, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78, 69, 128, 84, 69, + 76, 69, 80, 72, 79, 78, 197, 84, 69, 76, 69, 73, 65, 128, 84, 69, 76, 69, + 71, 82, 65, 80, 200, 84, 69, 75, 128, 84, 69, 73, 87, 83, 128, 84, 69, + 71, 69, 72, 128, 84, 69, 69, 84, 72, 128, 84, 69, 69, 84, 200, 84, 69, + 69, 78, 83, 128, 84, 69, 69, 69, 69, 128, 84, 69, 197, 84, 69, 68, 85, + 78, 71, 128, 84, 69, 65, 82, 211, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, + 80, 79, 75, 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78, + 75, 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196, + 84, 69, 65, 82, 45, 79, 70, 198, 84, 69, 65, 67, 85, 208, 84, 69, 45, 85, + 128, 84, 69, 45, 50, 128, 84, 67, 72, 69, 72, 69, 72, 128, 84, 67, 72, + 69, 72, 69, 200, 84, 67, 72, 69, 72, 128, 84, 67, 72, 69, 200, 84, 67, + 72, 69, 128, 84, 195, 84, 65, 89, 128, 84, 65, 88, 73, 128, 84, 65, 88, + 128, 84, 65, 87, 69, 76, 76, 69, 77, 69, 212, 84, 65, 87, 65, 128, 84, + 65, 87, 128, 84, 65, 86, 73, 89, 65, 78, 73, 128, 84, 65, 86, 128, 84, + 65, 214, 84, 65, 85, 82, 85, 83, 128, 84, 65, 85, 77, 128, 84, 65, 213, + 84, 65, 84, 87, 69, 69, 76, 128, 84, 65, 84, 87, 69, 69, 204, 84, 65, 84, + 84, 79, 79, 69, 196, 84, 65, 84, 128, 84, 65, 83, 128, 84, 65, 82, 85, + 78, 71, 128, 84, 65, 82, 84, 65, 82, 45, 50, 128, 84, 65, 82, 84, 65, 82, + 128, 84, 65, 82, 71, 69, 84, 128, 84, 65, 81, 128, 84, 65, 80, 69, 82, + 128, 84, 65, 80, 197, 84, 65, 80, 128, 84, 65, 79, 128, 84, 65, 78, 78, + 69, 196, 84, 65, 78, 71, 69, 82, 73, 78, 69, 128, 84, 65, 78, 71, 69, 78, + 84, 128, 84, 65, 78, 71, 69, 78, 212, 84, 65, 78, 199, 84, 65, 78, 65, + 66, 65, 84, 193, 84, 65, 78, 128, 84, 65, 77, 73, 78, 71, 128, 84, 65, + 77, 128, 84, 65, 76, 76, 128, 84, 65, 76, 204, 84, 65, 76, 73, 78, 71, + 128, 84, 65, 76, 73, 78, 199, 84, 65, 76, 69, 78, 84, 83, 128, 84, 65, + 76, 69, 78, 212, 84, 65, 75, 82, 201, 84, 65, 75, 72, 65, 76, 76, 85, 83, + 128, 84, 65, 75, 69, 128, 84, 65, 75, 52, 128, 84, 65, 75, 180, 84, 65, + 75, 128, 84, 65, 73, 83, 89, 79, 85, 128, 84, 65, 73, 76, 76, 69, 83, + 211, 84, 65, 73, 76, 128, 84, 65, 73, 204, 84, 65, 72, 128, 84, 65, 200, + 84, 65, 71, 66, 65, 78, 87, 193, 84, 65, 71, 65, 76, 79, 199, 84, 65, 71, + 128, 84, 65, 69, 206, 84, 65, 67, 79, 128, 84, 65, 67, 75, 128, 84, 65, + 67, 203, 84, 65, 66, 85, 76, 65, 84, 73, 79, 78, 128, 84, 65, 66, 85, 76, + 65, 84, 73, 79, 206, 84, 65, 66, 83, 128, 84, 65, 66, 76, 69, 128, 84, + 65, 66, 76, 197, 84, 65, 66, 128, 84, 65, 194, 84, 65, 65, 83, 72, 65, + 69, 128, 84, 65, 65, 81, 128, 84, 65, 65, 77, 128, 84, 65, 65, 76, 85, + 74, 193, 84, 65, 65, 73, 128, 84, 65, 65, 70, 128, 84, 65, 50, 128, 84, + 65, 45, 82, 79, 76, 128, 84, 65, 45, 50, 128, 84, 48, 51, 54, 128, 84, + 48, 51, 53, 128, 84, 48, 51, 52, 128, 84, 48, 51, 51, 65, 128, 84, 48, + 51, 51, 128, 84, 48, 51, 50, 65, 128, 84, 48, 51, 50, 128, 84, 48, 51, + 49, 128, 84, 48, 51, 48, 128, 84, 48, 50, 57, 128, 84, 48, 50, 56, 128, + 84, 48, 50, 55, 128, 84, 48, 50, 54, 128, 84, 48, 50, 53, 128, 84, 48, + 50, 52, 128, 84, 48, 50, 51, 128, 84, 48, 50, 50, 128, 84, 48, 50, 49, + 128, 84, 48, 50, 48, 128, 84, 48, 49, 57, 128, 84, 48, 49, 56, 128, 84, + 48, 49, 55, 128, 84, 48, 49, 54, 65, 128, 84, 48, 49, 54, 128, 84, 48, + 49, 53, 128, 84, 48, 49, 52, 128, 84, 48, 49, 51, 128, 84, 48, 49, 50, + 128, 84, 48, 49, 49, 65, 128, 84, 48, 49, 49, 128, 84, 48, 49, 48, 128, + 84, 48, 48, 57, 65, 128, 84, 48, 48, 57, 128, 84, 48, 48, 56, 65, 128, + 84, 48, 48, 56, 128, 84, 48, 48, 55, 65, 128, 84, 48, 48, 55, 128, 84, + 48, 48, 54, 128, 84, 48, 48, 53, 128, 84, 48, 48, 52, 128, 84, 48, 48, + 51, 65, 128, 84, 48, 48, 51, 128, 84, 48, 48, 50, 128, 84, 48, 48, 49, + 128, 84, 45, 83, 72, 73, 82, 84, 128, 83, 90, 90, 128, 83, 90, 87, 71, + 128, 83, 90, 87, 65, 128, 83, 90, 85, 128, 83, 90, 79, 128, 83, 90, 73, + 128, 83, 90, 69, 69, 128, 83, 90, 69, 128, 83, 90, 65, 65, 128, 83, 90, + 65, 128, 83, 90, 128, 83, 89, 88, 128, 83, 89, 84, 128, 83, 89, 83, 84, + 69, 205, 83, 89, 82, 88, 128, 83, 89, 82, 77, 65, 84, 73, 75, 73, 128, + 83, 89, 82, 77, 65, 128, 83, 89, 82, 73, 78, 71, 69, 128, 83, 89, 82, 73, + 65, 195, 83, 89, 82, 128, 83, 89, 80, 128, 83, 89, 79, 85, 87, 65, 128, + 83, 89, 78, 69, 86, 77, 65, 128, 83, 89, 78, 68, 69, 83, 77, 79, 211, 83, + 89, 78, 67, 72, 82, 79, 78, 79, 85, 211, 83, 89, 78, 65, 71, 79, 71, 85, + 69, 128, 83, 89, 78, 65, 71, 77, 193, 83, 89, 78, 65, 70, 73, 128, 83, + 89, 78, 128, 83, 89, 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, + 82, 73, 195, 83, 89, 77, 66, 79, 76, 83, 128, 83, 89, 77, 66, 79, 76, 45, + 57, 128, 83, 89, 77, 66, 79, 76, 45, 56, 128, 83, 89, 77, 66, 79, 76, 45, + 55, 128, 83, 89, 77, 66, 79, 76, 45, 54, 128, 83, 89, 77, 66, 79, 76, 45, + 53, 52, 128, 83, 89, 77, 66, 79, 76, 45, 53, 51, 128, 83, 89, 77, 66, 79, + 76, 45, 53, 50, 128, 83, 89, 77, 66, 79, 76, 45, 53, 49, 128, 83, 89, 77, + 66, 79, 76, 45, 53, 48, 128, 83, 89, 77, 66, 79, 76, 45, 53, 128, 83, 89, + 77, 66, 79, 76, 45, 52, 57, 128, 83, 89, 77, 66, 79, 76, 45, 52, 56, 128, + 83, 89, 77, 66, 79, 76, 45, 52, 55, 128, 83, 89, 77, 66, 79, 76, 45, 52, + 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, 51, 128, 83, 89, 77, 66, 79, 76, + 45, 52, 50, 128, 83, 89, 77, 66, 79, 76, 45, 52, 48, 128, 83, 89, 77, 66, + 79, 76, 45, 52, 128, 83, 89, 77, 66, 79, 76, 45, 51, 57, 128, 83, 89, 77, + 66, 79, 76, 45, 51, 56, 128, 83, 89, 77, 66, 79, 76, 45, 51, 55, 128, 83, + 89, 77, 66, 79, 76, 45, 51, 54, 128, 83, 89, 77, 66, 79, 76, 45, 51, 50, + 128, 83, 89, 77, 66, 79, 76, 45, 51, 48, 128, 83, 89, 77, 66, 79, 76, 45, + 51, 128, 83, 89, 77, 66, 79, 76, 45, 50, 57, 128, 83, 89, 77, 66, 79, 76, + 45, 50, 55, 128, 83, 89, 77, 66, 79, 76, 45, 50, 54, 128, 83, 89, 77, 66, + 79, 76, 45, 50, 53, 128, 83, 89, 77, 66, 79, 76, 45, 50, 52, 128, 83, 89, + 77, 66, 79, 76, 45, 50, 51, 128, 83, 89, 77, 66, 79, 76, 45, 50, 50, 128, + 83, 89, 77, 66, 79, 76, 45, 50, 49, 128, 83, 89, 77, 66, 79, 76, 45, 50, + 48, 128, 83, 89, 77, 66, 79, 76, 45, 50, 128, 83, 89, 77, 66, 79, 76, 45, + 49, 57, 128, 83, 89, 77, 66, 79, 76, 45, 49, 56, 128, 83, 89, 77, 66, 79, + 76, 45, 49, 55, 128, 83, 89, 77, 66, 79, 76, 45, 49, 54, 128, 83, 89, 77, + 66, 79, 76, 45, 49, 53, 128, 83, 89, 77, 66, 79, 76, 45, 49, 52, 128, 83, + 89, 77, 66, 79, 76, 45, 49, 51, 128, 83, 89, 77, 66, 79, 76, 45, 49, 50, + 128, 83, 89, 77, 66, 79, 76, 45, 49, 49, 128, 83, 89, 77, 66, 79, 76, 45, + 49, 48, 128, 83, 89, 77, 66, 79, 76, 45, 49, 128, 83, 89, 76, 79, 84, + 201, 83, 89, 128, 83, 87, 90, 128, 83, 87, 85, 78, 199, 83, 87, 79, 82, + 68, 83, 128, 83, 87, 79, 82, 68, 128, 83, 87, 79, 79, 128, 83, 87, 79, + 128, 83, 87, 73, 82, 204, 83, 87, 73, 77, 77, 73, 78, 71, 128, 83, 87, + 73, 77, 77, 69, 82, 128, 83, 87, 73, 73, 128, 83, 87, 73, 128, 83, 87, + 71, 128, 83, 87, 69, 69, 84, 128, 83, 87, 69, 69, 212, 83, 87, 69, 65, + 84, 128, 83, 87, 69, 65, 212, 83, 87, 65, 83, 200, 83, 87, 65, 80, 80, + 73, 78, 71, 128, 83, 87, 65, 65, 128, 83, 87, 128, 83, 86, 65, 83, 84, + 201, 83, 86, 65, 82, 73, 84, 65, 128, 83, 86, 65, 82, 73, 84, 193, 83, + 85, 88, 128, 83, 85, 85, 128, 83, 85, 84, 82, 193, 83, 85, 84, 128, 83, + 85, 83, 80, 69, 78, 83, 73, 79, 206, 83, 85, 83, 72, 73, 128, 83, 85, 82, + 89, 65, 128, 83, 85, 82, 88, 128, 83, 85, 82, 82, 79, 85, 78, 68, 128, + 83, 85, 82, 82, 79, 85, 78, 196, 83, 85, 82, 70, 69, 82, 128, 83, 85, 82, + 70, 65, 67, 197, 83, 85, 82, 69, 128, 83, 85, 82, 65, 78, 71, 128, 83, + 85, 82, 57, 128, 83, 85, 82, 128, 83, 85, 210, 83, 85, 80, 82, 65, 76, + 73, 78, 69, 65, 210, 83, 85, 80, 69, 82, 86, 73, 83, 69, 128, 83, 85, 80, + 69, 82, 83, 69, 84, 128, 83, 85, 80, 69, 82, 83, 69, 212, 83, 85, 80, 69, + 82, 83, 67, 82, 73, 80, 212, 83, 85, 80, 69, 82, 73, 77, 80, 79, 83, 69, + 196, 83, 85, 80, 69, 82, 70, 73, 88, 69, 196, 83, 85, 80, 69, 210, 83, + 85, 80, 128, 83, 85, 79, 88, 128, 83, 85, 79, 80, 128, 83, 85, 79, 128, + 83, 85, 78, 83, 69, 212, 83, 85, 78, 82, 73, 83, 69, 128, 83, 85, 78, 82, + 73, 83, 197, 83, 85, 78, 71, 76, 65, 83, 83, 69, 83, 128, 83, 85, 78, 71, + 128, 83, 85, 78, 70, 76, 79, 87, 69, 82, 128, 83, 85, 78, 68, 65, 78, 69, + 83, 197, 83, 85, 78, 128, 83, 85, 206, 83, 85, 77, 77, 69, 82, 128, 83, + 85, 77, 77, 65, 84, 73, 79, 78, 128, 83, 85, 77, 77, 65, 84, 73, 79, 206, + 83, 85, 77, 65, 83, 72, 128, 83, 85, 77, 128, 83, 85, 76, 70, 85, 82, + 128, 83, 85, 75, 85, 78, 128, 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, + 83, 85, 75, 213, 83, 85, 73, 84, 65, 66, 76, 69, 128, 83, 85, 73, 84, + 128, 83, 85, 73, 212, 83, 85, 72, 85, 82, 128, 83, 85, 69, 128, 83, 85, + 68, 50, 128, 83, 85, 68, 128, 83, 85, 67, 75, 73, 78, 199, 83, 85, 67, + 75, 69, 68, 128, 83, 85, 67, 203, 83, 85, 67, 67, 69, 69, 68, 83, 128, + 83, 85, 67, 67, 69, 69, 68, 211, 83, 85, 67, 67, 69, 69, 68, 128, 83, 85, + 67, 67, 69, 69, 196, 83, 85, 66, 85, 78, 73, 84, 128, 83, 85, 66, 83, 84, + 73, 84, 85, 84, 73, 79, 206, 83, 85, 66, 83, 84, 73, 84, 85, 84, 69, 128, + 83, 85, 66, 83, 84, 73, 84, 85, 84, 197, 83, 85, 66, 83, 69, 84, 128, 83, + 85, 66, 83, 69, 212, 83, 85, 66, 83, 67, 82, 73, 80, 212, 83, 85, 66, 80, + 85, 78, 67, 84, 73, 83, 128, 83, 85, 66, 76, 73, 78, 69, 65, 210, 83, 85, + 66, 76, 73, 77, 65, 84, 73, 79, 78, 128, 83, 85, 66, 76, 73, 77, 65, 84, + 69, 45, 51, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 45, 50, 128, 83, 85, + 66, 76, 73, 77, 65, 84, 69, 128, 83, 85, 66, 76, 73, 77, 65, 84, 197, 83, + 85, 66, 74, 79, 73, 78, 69, 196, 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, + 66, 73, 84, 79, 128, 83, 85, 66, 71, 82, 79, 85, 80, 128, 83, 85, 66, 71, + 82, 79, 85, 208, 83, 85, 66, 128, 83, 85, 65, 77, 128, 83, 85, 65, 69, + 84, 128, 83, 85, 65, 69, 78, 128, 83, 85, 65, 69, 128, 83, 85, 65, 66, + 128, 83, 85, 65, 128, 83, 213, 83, 84, 88, 128, 83, 84, 87, 65, 128, 83, + 84, 85, 70, 70, 69, 196, 83, 84, 85, 68, 89, 128, 83, 84, 85, 68, 73, + 207, 83, 84, 85, 67, 75, 45, 79, 85, 212, 83, 84, 83, 128, 83, 84, 82, + 79, 78, 199, 83, 84, 82, 79, 75, 69, 83, 128, 83, 84, 82, 79, 75, 69, + 211, 83, 84, 82, 79, 75, 69, 45, 57, 128, 83, 84, 82, 79, 75, 69, 45, 56, + 128, 83, 84, 82, 79, 75, 69, 45, 55, 128, 83, 84, 82, 79, 75, 69, 45, 54, + 128, 83, 84, 82, 79, 75, 69, 45, 53, 128, 83, 84, 82, 79, 75, 69, 45, 52, + 128, 83, 84, 82, 79, 75, 69, 45, 51, 128, 83, 84, 82, 79, 75, 69, 45, 50, + 128, 83, 84, 82, 79, 75, 69, 45, 49, 49, 128, 83, 84, 82, 79, 75, 69, 45, + 49, 48, 128, 83, 84, 82, 79, 75, 69, 45, 49, 128, 83, 84, 82, 79, 75, + 197, 83, 84, 82, 73, 80, 69, 128, 83, 84, 82, 73, 78, 71, 128, 83, 84, + 82, 73, 78, 199, 83, 84, 82, 73, 75, 69, 84, 72, 82, 79, 85, 71, 72, 128, + 83, 84, 82, 73, 75, 197, 83, 84, 82, 73, 68, 69, 128, 83, 84, 82, 73, 67, + 84, 76, 217, 83, 84, 82, 69, 84, 67, 72, 69, 196, 83, 84, 82, 69, 84, 67, + 72, 128, 83, 84, 82, 69, 83, 211, 83, 84, 82, 69, 78, 71, 84, 72, 128, + 83, 84, 82, 69, 65, 77, 69, 82, 128, 83, 84, 82, 65, 87, 66, 69, 82, 82, + 89, 128, 83, 84, 82, 65, 84, 85, 77, 45, 50, 128, 83, 84, 82, 65, 84, 85, + 77, 128, 83, 84, 82, 65, 84, 85, 205, 83, 84, 82, 65, 84, 73, 65, 206, + 83, 84, 82, 65, 73, 78, 69, 82, 128, 83, 84, 82, 65, 73, 71, 72, 84, 78, + 69, 83, 83, 128, 83, 84, 82, 65, 73, 71, 72, 84, 128, 83, 84, 82, 65, 73, + 71, 72, 212, 83, 84, 82, 65, 73, 70, 128, 83, 84, 82, 65, 71, 71, 73, 83, + 77, 65, 84, 65, 128, 83, 84, 79, 86, 69, 128, 83, 84, 79, 82, 69, 128, + 83, 84, 79, 80, 87, 65, 84, 67, 72, 128, 83, 84, 79, 80, 80, 73, 78, 71, + 128, 83, 84, 79, 80, 80, 65, 71, 69, 128, 83, 84, 79, 80, 128, 83, 84, + 79, 208, 83, 84, 79, 78, 69, 128, 83, 84, 79, 67, 75, 128, 83, 84, 79, + 67, 203, 83, 84, 73, 82, 82, 85, 208, 83, 84, 73, 77, 77, 69, 128, 83, + 84, 73, 76, 204, 83, 84, 73, 76, 197, 83, 84, 73, 71, 77, 65, 128, 83, + 84, 73, 67, 75, 73, 78, 199, 83, 84, 73, 67, 203, 83, 84, 69, 82, 69, 79, + 128, 83, 84, 69, 80, 128, 83, 84, 69, 78, 79, 71, 82, 65, 80, 72, 73, + 195, 83, 84, 69, 77, 128, 83, 84, 69, 65, 77, 73, 78, 199, 83, 84, 69, + 65, 77, 128, 83, 84, 69, 65, 205, 83, 84, 65, 86, 82, 79, 85, 128, 83, + 84, 65, 86, 82, 79, 83, 128, 83, 84, 65, 86, 82, 79, 211, 83, 84, 65, 85, + 82, 79, 83, 128, 83, 84, 65, 84, 85, 197, 83, 84, 65, 84, 73, 79, 78, + 128, 83, 84, 65, 84, 69, 82, 83, 128, 83, 84, 65, 84, 69, 128, 83, 84, + 65, 82, 212, 83, 84, 65, 82, 83, 128, 83, 84, 65, 82, 82, 69, 196, 83, + 84, 65, 82, 75, 128, 83, 84, 65, 82, 128, 83, 84, 65, 210, 83, 84, 65, + 78, 68, 83, 84, 73, 76, 76, 128, 83, 84, 65, 78, 68, 65, 82, 196, 83, 84, + 65, 78, 68, 128, 83, 84, 65, 78, 128, 83, 84, 65, 77, 80, 69, 196, 83, + 84, 65, 76, 76, 73, 79, 78, 128, 83, 84, 65, 70, 70, 128, 83, 84, 65, 70, + 198, 83, 84, 65, 68, 73, 85, 77, 128, 83, 84, 65, 67, 67, 65, 84, 79, + 128, 83, 84, 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, 79, 128, 83, 84, 50, + 128, 83, 83, 89, 88, 128, 83, 83, 89, 84, 128, 83, 83, 89, 82, 88, 128, + 83, 83, 89, 82, 128, 83, 83, 89, 80, 128, 83, 83, 89, 128, 83, 83, 85, + 88, 128, 83, 83, 85, 85, 128, 83, 83, 85, 84, 128, 83, 83, 85, 80, 128, + 83, 83, 79, 88, 128, 83, 83, 79, 84, 128, 83, 83, 79, 80, 128, 83, 83, + 79, 79, 128, 83, 83, 79, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, + 83, 83, 73, 80, 128, 83, 83, 73, 73, 128, 83, 83, 73, 69, 88, 128, 83, + 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, 73, 128, 83, 83, 72, + 73, 78, 128, 83, 83, 72, 69, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, + 128, 83, 83, 69, 69, 128, 83, 83, 65, 88, 128, 83, 83, 65, 85, 128, 83, + 83, 65, 84, 128, 83, 83, 65, 80, 128, 83, 83, 65, 78, 71, 89, 69, 79, 82, + 73, 78, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, + 84, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, + 84, 128, 83, 83, 65, 78, 71, 84, 72, 73, 69, 85, 84, 72, 128, 83, 83, 65, + 78, 71, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, + 71, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 83, + 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 83, 83, 65, 78, 71, 83, 73, + 79, 83, 128, 83, 83, 65, 78, 71, 82, 73, 69, 85, 76, 45, 75, 72, 73, 69, + 85, 75, 72, 128, 83, 83, 65, 78, 71, 82, 73, 69, 85, 76, 128, 83, 83, 65, + 78, 71, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, + 128, 83, 83, 65, 78, 71, 77, 73, 69, 85, 77, 128, 83, 83, 65, 78, 71, 75, + 73, 89, 69, 79, 75, 128, 83, 83, 65, 78, 71, 73, 69, 85, 78, 71, 128, 83, + 83, 65, 78, 71, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, + 85, 67, 45, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, + 67, 128, 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, 128, 83, 83, 65, 73, + 128, 83, 83, 65, 65, 128, 83, 83, 51, 128, 83, 83, 50, 128, 83, 82, 128, + 83, 81, 85, 73, 83, 200, 83, 81, 85, 73, 82, 82, 69, 204, 83, 81, 85, 73, + 71, 71, 76, 197, 83, 81, 85, 73, 68, 128, 83, 81, 85, 69, 69, 90, 69, 68, 128, 83, 81, 85, 69, 69, 90, 197, 83, 81, 85, 65, 212, 83, 81, 85, 65, 82, 69, 83, 128, 83, 81, 85, 65, 82, 69, 68, 128, 83, 81, 85, 65, 82, 69, 128, 83, 80, 89, 128, 83, 80, 87, 65, 128, 83, 80, 85, 78, 71, 211, 83, @@ -969,77 +976,79 @@ static unsigned char lexicon[] = { 65, 78, 128, 83, 78, 79, 87, 77, 65, 206, 83, 78, 79, 87, 70, 76, 65, 75, 69, 128, 83, 78, 79, 87, 66, 79, 65, 82, 68, 69, 82, 128, 83, 78, 79, 87, 128, 83, 78, 79, 215, 83, 78, 79, 85, 84, 128, 83, 78, 79, 85, 212, 83, - 78, 65, 208, 83, 78, 65, 75, 69, 128, 83, 78, 65, 75, 197, 83, 78, 65, - 73, 76, 128, 83, 78, 193, 83, 77, 79, 75, 73, 78, 199, 83, 77, 73, 82, - 75, 73, 78, 199, 83, 77, 73, 76, 73, 78, 199, 83, 77, 73, 76, 69, 128, - 83, 77, 73, 76, 197, 83, 77, 69, 65, 82, 128, 83, 77, 65, 83, 200, 83, - 77, 65, 76, 76, 69, 210, 83, 77, 65, 76, 76, 128, 83, 76, 85, 82, 128, - 83, 76, 79, 87, 76, 89, 128, 83, 76, 79, 87, 128, 83, 76, 79, 215, 83, - 76, 79, 86, 79, 128, 83, 76, 79, 212, 83, 76, 79, 80, 73, 78, 199, 83, - 76, 79, 80, 69, 128, 83, 76, 79, 65, 206, 83, 76, 73, 78, 71, 128, 83, - 76, 73, 71, 72, 84, 76, 217, 83, 76, 73, 68, 73, 78, 71, 128, 83, 76, 73, - 68, 69, 82, 128, 83, 76, 73, 67, 69, 128, 83, 76, 73, 67, 197, 83, 76, - 69, 85, 84, 200, 83, 76, 69, 69, 80, 217, 83, 76, 69, 69, 80, 73, 78, - 199, 83, 76, 65, 86, 79, 78, 73, 195, 83, 76, 65, 86, 69, 128, 83, 76, - 65, 83, 72, 128, 83, 76, 65, 83, 200, 83, 76, 65, 78, 84, 69, 196, 83, - 75, 87, 65, 128, 83, 75, 87, 128, 83, 75, 85, 76, 76, 128, 83, 75, 85, - 76, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, 78, 128, 83, 75, 73, - 69, 82, 128, 83, 75, 201, 83, 75, 69, 87, 69, 196, 83, 75, 65, 84, 69, - 128, 83, 75, 128, 83, 74, 69, 128, 83, 73, 90, 197, 83, 73, 88, 84, 89, - 45, 70, 79, 85, 82, 84, 200, 83, 73, 88, 84, 89, 128, 83, 73, 88, 84, - 217, 83, 73, 88, 84, 72, 83, 128, 83, 73, 88, 84, 72, 211, 83, 73, 88, - 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 83, 128, 83, 73, 88, 84, - 69, 69, 78, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 200, 83, 73, 88, - 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 83, 73, 88, 45, 84, 72, - 73, 82, 84, 89, 128, 83, 73, 88, 45, 83, 84, 82, 73, 78, 199, 83, 73, 88, - 45, 80, 69, 82, 45, 69, 205, 83, 73, 88, 45, 76, 73, 78, 197, 83, 73, - 216, 83, 73, 84, 69, 128, 83, 73, 83, 65, 128, 83, 73, 82, 73, 78, 71, - 85, 128, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 83, 73, 79, - 83, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, 82, - 73, 69, 85, 76, 128, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 45, 75, 73, - 89, 69, 79, 75, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, 128, - 83, 73, 79, 83, 45, 80, 65, 78, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, - 78, 73, 69, 85, 78, 128, 83, 73, 79, 83, 45, 77, 73, 69, 85, 77, 128, 83, - 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, 75, - 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45, - 73, 69, 85, 78, 71, 128, 83, 73, 79, 83, 45, 72, 73, 69, 85, 72, 128, 83, - 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 83, 73, 79, 83, 45, 67, 72, 73, - 69, 85, 67, 72, 128, 83, 73, 79, 211, 83, 73, 78, 85, 83, 79, 73, 196, - 83, 73, 78, 79, 76, 79, 71, 73, 67, 65, 204, 83, 73, 78, 75, 73, 78, 71, - 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 51, 128, 83, 73, - 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 50, 128, 83, 73, 78, 71, 76, - 69, 45, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, 73, 78, 71, 76, - 197, 83, 73, 78, 71, 65, 65, 84, 128, 83, 73, 78, 197, 83, 73, 78, 68, - 72, 201, 83, 73, 206, 83, 73, 77, 85, 76, 84, 65, 78, 69, 79, 85, 83, - 128, 83, 73, 77, 85, 76, 84, 65, 78, 69, 79, 85, 211, 83, 73, 77, 80, 76, - 73, 70, 73, 69, 196, 83, 73, 77, 73, 76, 65, 82, 128, 83, 73, 77, 73, 76, - 65, 210, 83, 73, 77, 65, 78, 83, 73, 211, 83, 73, 77, 65, 76, 85, 78, 71, - 85, 206, 83, 73, 77, 65, 128, 83, 73, 76, 86, 69, 82, 128, 83, 73, 76, - 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 72, 79, 85, 69, 84, 84, - 69, 128, 83, 73, 76, 72, 79, 85, 69, 84, 84, 197, 83, 73, 76, 65, 51, - 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, - 71, 78, 83, 128, 83, 73, 71, 77, 65, 128, 83, 73, 71, 77, 193, 83, 73, - 71, 69, 204, 83, 73, 71, 52, 128, 83, 73, 71, 180, 83, 73, 71, 128, 83, - 73, 69, 69, 128, 83, 73, 68, 69, 87, 65, 89, 211, 83, 73, 68, 69, 128, - 83, 73, 68, 197, 83, 73, 68, 68, 72, 65, 77, 128, 83, 73, 67, 75, 78, 69, - 83, 83, 128, 83, 73, 67, 75, 76, 69, 128, 83, 73, 66, 197, 83, 73, 65, - 128, 83, 201, 83, 72, 89, 88, 128, 83, 72, 89, 84, 128, 83, 72, 89, 82, - 88, 128, 83, 72, 89, 82, 128, 83, 72, 89, 80, 128, 83, 72, 89, 69, 128, - 83, 72, 89, 65, 128, 83, 72, 89, 128, 83, 72, 87, 79, 89, 128, 83, 72, - 87, 79, 79, 128, 83, 72, 87, 79, 128, 83, 72, 87, 73, 73, 128, 83, 72, - 87, 73, 128, 83, 72, 87, 69, 128, 83, 72, 87, 197, 83, 72, 87, 65, 65, - 128, 83, 72, 87, 65, 128, 83, 72, 85, 88, 128, 83, 72, 85, 85, 128, 83, - 72, 85, 84, 84, 76, 69, 67, 79, 67, 75, 128, 83, 72, 85, 84, 128, 83, 72, - 85, 82, 88, 128, 83, 72, 85, 82, 128, 83, 72, 85, 80, 128, 83, 72, 85, - 79, 88, 128, 83, 72, 85, 79, 80, 128, 83, 72, 85, 79, 128, 83, 72, 85, - 77, 128, 83, 72, 85, 76, 128, 83, 72, 85, 70, 70, 76, 197, 83, 72, 85, - 69, 81, 128, 83, 72, 85, 69, 78, 83, 72, 85, 69, 84, 128, 83, 72, 85, 66, - 85, 82, 128, 83, 72, 85, 50, 128, 83, 72, 85, 178, 83, 72, 85, 128, 83, - 72, 213, 83, 72, 84, 65, 80, 73, 67, 128, 83, 72, 84, 65, 128, 83, 72, - 82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80, 128, 83, 72, 82, 73, 73, - 128, 83, 72, 82, 73, 128, 83, 72, 79, 89, 128, 83, 72, 79, 88, 128, 83, - 72, 79, 87, 69, 82, 128, 83, 72, 79, 85, 76, 68, 69, 82, 69, 196, 83, 72, - 79, 85, 76, 68, 69, 210, 83, 72, 79, 84, 128, 83, 72, 79, 82, 84, 83, + 78, 69, 69, 90, 73, 78, 199, 83, 78, 65, 208, 83, 78, 65, 75, 69, 128, + 83, 78, 65, 75, 197, 83, 78, 65, 73, 76, 128, 83, 78, 193, 83, 77, 79, + 75, 73, 78, 199, 83, 77, 73, 82, 75, 73, 78, 199, 83, 77, 73, 76, 73, 78, + 199, 83, 77, 73, 76, 69, 128, 83, 77, 73, 76, 197, 83, 77, 69, 65, 82, + 128, 83, 77, 65, 83, 200, 83, 77, 65, 76, 76, 69, 210, 83, 77, 65, 76, + 76, 128, 83, 76, 85, 82, 128, 83, 76, 79, 87, 76, 89, 128, 83, 76, 79, + 87, 128, 83, 76, 79, 215, 83, 76, 79, 86, 79, 128, 83, 76, 79, 212, 83, + 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, 128, 83, 76, 79, 65, 206, + 83, 76, 73, 78, 71, 128, 83, 76, 73, 71, 72, 84, 76, 217, 83, 76, 73, 68, + 73, 78, 71, 128, 83, 76, 73, 68, 69, 82, 128, 83, 76, 73, 67, 69, 128, + 83, 76, 73, 67, 197, 83, 76, 69, 85, 84, 200, 83, 76, 69, 69, 80, 217, + 83, 76, 69, 69, 80, 73, 78, 199, 83, 76, 69, 69, 208, 83, 76, 65, 86, 79, + 78, 73, 195, 83, 76, 65, 86, 69, 128, 83, 76, 65, 83, 72, 128, 83, 76, + 65, 83, 200, 83, 76, 65, 78, 84, 69, 196, 83, 75, 87, 65, 128, 83, 75, + 87, 128, 83, 75, 85, 76, 76, 128, 83, 75, 85, 76, 204, 83, 75, 76, 73, + 82, 79, 206, 83, 75, 73, 78, 128, 83, 75, 73, 69, 82, 128, 83, 75, 201, + 83, 75, 69, 87, 69, 196, 83, 75, 65, 84, 69, 128, 83, 75, 128, 83, 74, + 69, 128, 83, 73, 90, 197, 83, 73, 88, 84, 89, 45, 70, 79, 85, 82, 84, + 200, 83, 73, 88, 84, 89, 128, 83, 73, 88, 84, 217, 83, 73, 88, 84, 72, + 83, 128, 83, 73, 88, 84, 72, 211, 83, 73, 88, 84, 72, 128, 83, 73, 88, + 84, 69, 69, 78, 84, 72, 83, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 128, + 83, 73, 88, 84, 69, 69, 78, 84, 200, 83, 73, 88, 84, 69, 69, 78, 128, 83, + 73, 88, 84, 69, 69, 206, 83, 73, 88, 45, 84, 72, 73, 82, 84, 89, 128, 83, + 73, 88, 45, 83, 84, 82, 73, 78, 199, 83, 73, 88, 45, 80, 69, 82, 45, 69, + 205, 83, 73, 88, 45, 76, 73, 78, 197, 83, 73, 216, 83, 73, 84, 69, 128, + 83, 73, 83, 65, 128, 83, 73, 82, 73, 78, 71, 85, 128, 83, 73, 79, 83, 45, + 84, 72, 73, 69, 85, 84, 72, 128, 83, 73, 79, 83, 45, 83, 83, 65, 78, 71, + 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, 82, 73, 69, 85, 76, 128, 83, 73, + 79, 83, 45, 80, 73, 69, 85, 80, 45, 75, 73, 89, 69, 79, 75, 128, 83, 73, + 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, 128, 83, 73, 79, 83, 45, 80, 65, + 78, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, 78, 73, 69, 85, 78, 128, 83, + 73, 79, 83, 45, 77, 73, 69, 85, 77, 128, 83, 73, 79, 83, 45, 75, 72, 73, + 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, 85, 78, + 80, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45, 73, 69, 85, 78, 71, 128, 83, + 73, 79, 83, 45, 72, 73, 69, 85, 72, 128, 83, 73, 79, 83, 45, 67, 73, 69, + 85, 67, 128, 83, 73, 79, 83, 45, 67, 72, 73, 69, 85, 67, 72, 128, 83, 73, + 79, 211, 83, 73, 78, 85, 83, 79, 73, 196, 83, 73, 78, 79, 76, 79, 71, 73, + 67, 65, 204, 83, 73, 78, 78, 89, 73, 73, 89, 72, 69, 128, 83, 73, 78, 75, + 73, 78, 71, 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 51, + 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 50, 128, 83, 73, + 78, 71, 76, 69, 45, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, 73, + 78, 71, 76, 197, 83, 73, 78, 71, 65, 65, 84, 128, 83, 73, 78, 197, 83, + 73, 78, 68, 72, 201, 83, 73, 206, 83, 73, 77, 85, 76, 84, 65, 78, 69, 79, + 85, 83, 128, 83, 73, 77, 85, 76, 84, 65, 78, 69, 79, 85, 211, 83, 73, 77, + 80, 76, 73, 70, 73, 69, 196, 83, 73, 77, 73, 76, 65, 82, 128, 83, 73, 77, + 73, 76, 65, 210, 83, 73, 77, 65, 78, 83, 73, 211, 83, 73, 77, 65, 76, 85, + 78, 71, 85, 206, 83, 73, 77, 65, 128, 83, 73, 76, 86, 69, 82, 128, 83, + 73, 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 72, 79, 85, 69, + 84, 84, 69, 128, 83, 73, 76, 72, 79, 85, 69, 84, 84, 197, 83, 73, 76, 65, + 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, + 73, 71, 78, 83, 128, 83, 73, 71, 77, 65, 128, 83, 73, 71, 77, 193, 83, + 73, 71, 69, 204, 83, 73, 71, 52, 128, 83, 73, 71, 180, 83, 73, 71, 128, + 83, 73, 69, 69, 128, 83, 73, 68, 69, 87, 65, 89, 211, 83, 73, 68, 69, + 128, 83, 73, 68, 197, 83, 73, 68, 68, 72, 73, 128, 83, 73, 68, 68, 72, + 65, 77, 128, 83, 73, 67, 75, 78, 69, 83, 83, 128, 83, 73, 67, 75, 76, 69, + 128, 83, 73, 66, 197, 83, 73, 65, 128, 83, 201, 83, 72, 89, 88, 128, 83, + 72, 89, 84, 128, 83, 72, 89, 82, 88, 128, 83, 72, 89, 82, 128, 83, 72, + 89, 80, 128, 83, 72, 89, 69, 128, 83, 72, 89, 65, 128, 83, 72, 89, 128, + 83, 72, 87, 79, 89, 128, 83, 72, 87, 79, 79, 128, 83, 72, 87, 79, 128, + 83, 72, 87, 73, 73, 128, 83, 72, 87, 73, 128, 83, 72, 87, 69, 128, 83, + 72, 87, 197, 83, 72, 87, 65, 65, 128, 83, 72, 87, 65, 128, 83, 72, 86, + 128, 83, 72, 85, 88, 128, 83, 72, 85, 85, 128, 83, 72, 85, 84, 84, 76, + 69, 67, 79, 67, 75, 128, 83, 72, 85, 84, 128, 83, 72, 85, 82, 88, 128, + 83, 72, 85, 82, 128, 83, 72, 85, 80, 128, 83, 72, 85, 79, 88, 128, 83, + 72, 85, 79, 80, 128, 83, 72, 85, 79, 128, 83, 72, 85, 77, 128, 83, 72, + 85, 76, 128, 83, 72, 85, 70, 70, 76, 197, 83, 72, 85, 69, 81, 128, 83, + 72, 85, 69, 78, 83, 72, 85, 69, 84, 128, 83, 72, 85, 66, 85, 82, 128, 83, + 72, 85, 50, 128, 83, 72, 85, 178, 83, 72, 85, 128, 83, 72, 213, 83, 72, + 84, 65, 80, 73, 67, 128, 83, 72, 84, 65, 128, 83, 72, 82, 85, 71, 128, + 83, 72, 82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80, 128, 83, 72, 82, 73, + 73, 128, 83, 72, 82, 73, 128, 83, 72, 79, 89, 128, 83, 72, 79, 88, 128, + 83, 72, 79, 87, 69, 82, 128, 83, 72, 79, 85, 76, 68, 69, 82, 69, 196, 83, + 72, 79, 85, 76, 68, 69, 210, 83, 72, 79, 84, 128, 83, 72, 79, 82, 84, 83, 128, 83, 72, 79, 82, 84, 211, 83, 72, 79, 82, 84, 72, 65, 78, 196, 83, 72, 79, 82, 84, 69, 78, 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 69, 128, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 79, @@ -1077,543 +1086,548 @@ static unsigned char lexicon[] = { 128, 83, 72, 65, 88, 128, 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 86, 73, 65, 206, 83, 72, 65, 86, 69, 196, 83, 72, 65, 85, 128, 83, 72, 65, 84, 128, 83, 72, 65, 82, 85, 128, 83, 72, 65, 82, 213, 83, - 72, 65, 82, 80, 128, 83, 72, 65, 82, 208, 83, 72, 65, 82, 65, 128, 83, - 72, 65, 82, 50, 128, 83, 72, 65, 82, 178, 83, 72, 65, 80, 73, 78, 71, - 128, 83, 72, 65, 80, 69, 83, 128, 83, 72, 65, 80, 197, 83, 72, 65, 80, - 128, 83, 72, 65, 78, 71, 128, 83, 72, 65, 78, 128, 83, 72, 65, 206, 83, - 72, 65, 77, 82, 79, 67, 75, 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, - 128, 83, 72, 65, 75, 84, 73, 128, 83, 72, 65, 75, 73, 78, 71, 128, 83, - 72, 65, 75, 73, 78, 199, 83, 72, 65, 75, 128, 83, 72, 65, 73, 128, 83, - 72, 65, 70, 84, 128, 83, 72, 65, 70, 212, 83, 72, 65, 68, 79, 87, 69, - 196, 83, 72, 65, 68, 69, 196, 83, 72, 65, 68, 69, 128, 83, 72, 65, 68, - 68, 65, 128, 83, 72, 65, 68, 68, 193, 83, 72, 65, 68, 128, 83, 72, 65, - 196, 83, 72, 65, 66, 54, 128, 83, 72, 65, 65, 128, 83, 72, 65, 54, 128, - 83, 72, 65, 182, 83, 72, 65, 51, 128, 83, 72, 65, 179, 83, 71, 82, 193, - 83, 71, 79, 210, 83, 71, 67, 128, 83, 71, 65, 215, 83, 71, 65, 194, 83, - 71, 128, 83, 69, 89, 75, 128, 83, 69, 88, 84, 85, 76, 193, 83, 69, 88, - 84, 73, 76, 69, 128, 83, 69, 88, 84, 65, 78, 211, 83, 69, 86, 69, 82, 65, - 78, 67, 69, 128, 83, 69, 86, 69, 78, 84, 89, 128, 83, 69, 86, 69, 78, 84, - 217, 83, 69, 86, 69, 78, 84, 72, 128, 83, 69, 86, 69, 78, 84, 69, 69, 78, - 128, 83, 69, 86, 69, 78, 84, 69, 69, 206, 83, 69, 86, 69, 78, 45, 84, 72, - 73, 82, 84, 89, 128, 83, 69, 86, 69, 206, 83, 69, 85, 88, 128, 83, 69, - 85, 78, 89, 65, 77, 128, 83, 69, 85, 65, 69, 81, 128, 83, 69, 84, 70, 79, - 78, 128, 83, 69, 83, 84, 69, 82, 84, 73, 85, 211, 83, 69, 83, 81, 85, 73, - 81, 85, 65, 68, 82, 65, 84, 69, 128, 83, 69, 83, 65, 77, 197, 83, 69, 82, - 86, 73, 67, 197, 83, 69, 82, 73, 70, 83, 128, 83, 69, 82, 73, 70, 211, - 83, 69, 82, 73, 70, 128, 83, 69, 81, 85, 69, 78, 84, 73, 65, 76, 128, 83, - 69, 81, 85, 69, 78, 67, 197, 83, 69, 80, 84, 85, 80, 76, 197, 83, 69, 80, - 84, 69, 77, 66, 69, 82, 128, 83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 83, - 69, 80, 65, 82, 65, 84, 79, 210, 83, 69, 78, 84, 79, 128, 83, 69, 78, 84, - 73, 128, 83, 69, 77, 85, 78, 67, 73, 193, 83, 69, 77, 75, 65, 84, 72, - 128, 83, 69, 77, 75, 128, 83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 69, - 77, 73, 83, 79, 70, 212, 83, 69, 77, 73, 83, 69, 88, 84, 73, 76, 69, 128, - 83, 69, 77, 73, 77, 73, 78, 73, 77, 193, 83, 69, 77, 73, 68, 73, 82, 69, - 67, 212, 83, 69, 77, 73, 67, 79, 76, 79, 78, 128, 83, 69, 77, 73, 67, 79, - 76, 79, 206, 83, 69, 77, 73, 67, 73, 82, 67, 85, 76, 65, 210, 83, 69, 77, - 73, 67, 73, 82, 67, 76, 197, 83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, - 69, 77, 73, 45, 86, 79, 73, 67, 69, 196, 83, 69, 76, 70, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 57, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 57, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 55, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 57, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 57, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 52, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 57, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 57, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 49, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 57, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, - 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 54, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, - 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 51, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, - 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 48, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 57, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 56, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 55, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 54, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 53, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 55, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 51, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 50, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 55, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 48, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 56, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 55, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 53, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 52, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 54, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 50, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 49, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 54, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 53, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 55, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 52, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 49, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 57, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 54, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 51, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 48, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 56, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 53, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 50, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 55, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 53, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 50, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 49, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 57, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 54, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 53, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 50, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 49, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 57, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 54, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 53, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, - 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 50, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 50, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 57, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 50, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, - 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 54, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 50, 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 51, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 50, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 50, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 50, 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 55, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 54, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 50, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 51, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 48, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 50, 48, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 48, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 55, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 48, 54, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 48, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 52, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 51, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 50, 48, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 50, 48, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 48, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 57, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 56, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, - 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 53, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 57, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 50, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 49, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 57, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 56, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 54, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 53, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 56, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 56, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 50, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 56, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 57, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 55, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 54, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 55, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 51, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 50, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 55, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 55, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 54, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 55, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 54, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 54, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 51, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 50, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, - 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 53, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 55, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 54, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, - 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 51, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 48, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, - 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 55, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 52, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 51, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 48, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 56, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 55, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 52, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 49, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 48, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 56, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, - 82, 45, 49, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 53, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 52, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 49, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 48, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 57, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 56, 128, 83, 69, 76, 69, - 67, 84, 79, 82, 45, 49, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 49, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 53, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 52, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, - 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 49, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 57, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 56, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 49, 48, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, - 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 53, 128, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 48, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 48, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 50, 128, - 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 49, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 49, 48, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, - 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 128, 83, 69, 76, 69, 67, 84, 79, 210, 83, 69, 76, 69, 67, 84, - 69, 196, 83, 69, 73, 83, 77, 65, 128, 83, 69, 73, 83, 77, 193, 83, 69, - 72, 128, 83, 69, 71, 79, 76, 128, 83, 69, 71, 78, 79, 128, 83, 69, 71, - 77, 69, 78, 84, 128, 83, 69, 69, 86, 128, 83, 69, 69, 78, 85, 128, 83, - 69, 69, 78, 128, 83, 69, 69, 206, 83, 69, 69, 68, 76, 73, 78, 71, 128, - 83, 69, 69, 45, 78, 79, 45, 69, 86, 73, 204, 83, 69, 67, 84, 79, 82, 128, - 83, 69, 67, 84, 73, 79, 78, 128, 83, 69, 67, 84, 73, 79, 206, 83, 69, 67, - 82, 69, 84, 128, 83, 69, 67, 79, 78, 68, 128, 83, 69, 67, 65, 78, 84, - 128, 83, 69, 66, 65, 84, 66, 69, 73, 212, 83, 69, 65, 84, 128, 83, 69, - 65, 76, 128, 83, 69, 65, 71, 85, 76, 204, 83, 68, 79, 78, 199, 83, 68, - 128, 83, 67, 87, 65, 128, 83, 67, 82, 85, 80, 76, 69, 128, 83, 67, 82, - 79, 76, 76, 128, 83, 67, 82, 73, 80, 84, 128, 83, 67, 82, 69, 69, 78, - 128, 83, 67, 82, 69, 69, 206, 83, 67, 82, 69, 65, 77, 73, 78, 199, 83, - 67, 79, 82, 80, 73, 85, 83, 128, 83, 67, 79, 82, 80, 73, 79, 78, 128, 83, - 67, 79, 82, 69, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, 73, - 128, 83, 67, 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 82, 79, - 69, 68, 69, 82, 128, 83, 67, 72, 79, 79, 76, 128, 83, 67, 72, 79, 79, - 204, 83, 67, 72, 79, 76, 65, 82, 128, 83, 67, 72, 69, 77, 193, 83, 67, - 69, 80, 84, 69, 210, 83, 67, 65, 78, 68, 73, 67, 85, 83, 128, 83, 67, 65, - 78, 68, 73, 67, 85, 211, 83, 67, 65, 206, 83, 67, 65, 76, 69, 83, 128, - 83, 66, 85, 194, 83, 66, 82, 85, 204, 83, 65, 89, 73, 83, 201, 83, 65, - 89, 65, 78, 78, 65, 128, 83, 65, 89, 128, 83, 65, 88, 79, 80, 72, 79, 78, - 69, 128, 83, 65, 88, 73, 77, 65, 84, 65, 128, 83, 65, 87, 65, 78, 128, - 83, 65, 87, 128, 83, 65, 86, 79, 85, 82, 73, 78, 199, 83, 65, 85, 82, 65, - 83, 72, 84, 82, 193, 83, 65, 85, 73, 76, 128, 83, 65, 84, 85, 82, 78, - 128, 83, 65, 84, 75, 65, 65, 78, 75, 85, 85, 128, 83, 65, 84, 75, 65, 65, - 78, 128, 83, 65, 84, 69, 76, 76, 73, 84, 69, 128, 83, 65, 84, 69, 76, 76, - 73, 84, 197, 83, 65, 84, 67, 72, 69, 76, 128, 83, 65, 84, 65, 78, 71, 65, - 128, 83, 65, 83, 72, 128, 83, 65, 83, 65, 75, 128, 83, 65, 82, 73, 128, - 83, 65, 82, 193, 83, 65, 82, 128, 83, 65, 81, 128, 83, 65, 80, 65, 128, - 83, 65, 78, 89, 79, 79, 71, 193, 83, 65, 78, 89, 65, 75, 193, 83, 65, 78, - 84, 73, 73, 77, 85, 128, 83, 65, 78, 78, 89, 65, 128, 83, 65, 78, 71, 65, - 50, 128, 83, 65, 78, 68, 72, 201, 83, 65, 78, 68, 65, 76, 128, 83, 65, - 78, 65, 72, 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, 203, 83, 65, 77, - 86, 65, 84, 128, 83, 65, 77, 80, 73, 128, 83, 65, 77, 80, 72, 65, 79, - 128, 83, 65, 77, 75, 65, 128, 83, 65, 77, 69, 75, 72, 128, 83, 65, 77, - 69, 75, 200, 83, 65, 77, 66, 65, 128, 83, 65, 77, 65, 82, 73, 84, 65, - 206, 83, 65, 77, 128, 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 76, 84, - 73, 76, 76, 79, 128, 83, 65, 76, 84, 45, 50, 128, 83, 65, 76, 84, 128, - 83, 65, 76, 212, 83, 65, 76, 76, 65, 76, 76, 65, 72, 79, 213, 83, 65, 76, - 76, 193, 83, 65, 76, 65, 205, 83, 65, 76, 65, 128, 83, 65, 76, 45, 65, - 77, 77, 79, 78, 73, 65, 67, 128, 83, 65, 76, 128, 83, 65, 75, 79, 84, - 128, 83, 65, 75, 72, 193, 83, 65, 75, 69, 85, 65, 69, 128, 83, 65, 75, - 197, 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 66, 79, 65, 84, 128, - 83, 65, 73, 76, 128, 83, 65, 73, 75, 85, 82, 85, 128, 83, 65, 72, 128, - 83, 65, 71, 73, 84, 84, 65, 82, 73, 85, 83, 128, 83, 65, 71, 65, 128, 83, - 65, 71, 128, 83, 65, 199, 83, 65, 70, 72, 65, 128, 83, 65, 70, 69, 84, - 217, 83, 65, 68, 72, 69, 128, 83, 65, 68, 69, 128, 83, 65, 68, 128, 83, - 65, 196, 83, 65, 67, 82, 73, 70, 73, 67, 73, 65, 204, 83, 65, 65, 73, - 128, 83, 65, 65, 68, 72, 85, 128, 83, 65, 45, 73, 128, 83, 65, 45, 50, - 128, 83, 48, 52, 54, 128, 83, 48, 52, 53, 128, 83, 48, 52, 52, 128, 83, - 48, 52, 51, 128, 83, 48, 52, 50, 128, 83, 48, 52, 49, 128, 83, 48, 52, - 48, 128, 83, 48, 51, 57, 128, 83, 48, 51, 56, 128, 83, 48, 51, 55, 128, - 83, 48, 51, 54, 128, 83, 48, 51, 53, 65, 128, 83, 48, 51, 53, 128, 83, - 48, 51, 52, 128, 83, 48, 51, 51, 128, 83, 48, 51, 50, 128, 83, 48, 51, - 49, 128, 83, 48, 51, 48, 128, 83, 48, 50, 57, 128, 83, 48, 50, 56, 128, - 83, 48, 50, 55, 128, 83, 48, 50, 54, 66, 128, 83, 48, 50, 54, 65, 128, - 83, 48, 50, 54, 128, 83, 48, 50, 53, 128, 83, 48, 50, 52, 128, 83, 48, - 50, 51, 128, 83, 48, 50, 50, 128, 83, 48, 50, 49, 128, 83, 48, 50, 48, - 128, 83, 48, 49, 57, 128, 83, 48, 49, 56, 128, 83, 48, 49, 55, 65, 128, - 83, 48, 49, 55, 128, 83, 48, 49, 54, 128, 83, 48, 49, 53, 128, 83, 48, - 49, 52, 66, 128, 83, 48, 49, 52, 65, 128, 83, 48, 49, 52, 128, 83, 48, - 49, 51, 128, 83, 48, 49, 50, 128, 83, 48, 49, 49, 128, 83, 48, 49, 48, - 128, 83, 48, 48, 57, 128, 83, 48, 48, 56, 128, 83, 48, 48, 55, 128, 83, - 48, 48, 54, 65, 128, 83, 48, 48, 54, 128, 83, 48, 48, 53, 128, 83, 48, - 48, 52, 128, 83, 48, 48, 51, 128, 83, 48, 48, 50, 65, 128, 83, 48, 48, - 50, 128, 83, 48, 48, 49, 128, 83, 45, 87, 128, 83, 45, 83, 72, 65, 80, - 69, 196, 82, 89, 89, 128, 82, 89, 88, 128, 82, 89, 84, 128, 82, 89, 82, - 88, 128, 82, 89, 82, 128, 82, 89, 80, 128, 82, 87, 79, 79, 128, 82, 87, - 79, 128, 82, 87, 73, 73, 128, 82, 87, 73, 128, 82, 87, 69, 69, 128, 82, - 87, 69, 128, 82, 87, 65, 72, 65, 128, 82, 87, 65, 65, 128, 82, 87, 65, - 128, 82, 85, 88, 128, 82, 85, 85, 66, 85, 82, 85, 128, 82, 85, 85, 128, - 82, 85, 84, 128, 82, 85, 83, 73, 128, 82, 85, 82, 88, 128, 82, 85, 82, - 128, 82, 85, 80, 73, 73, 128, 82, 85, 80, 69, 197, 82, 85, 80, 128, 82, - 85, 79, 88, 128, 82, 85, 79, 80, 128, 82, 85, 79, 128, 82, 85, 78, 79, - 85, 84, 128, 82, 85, 78, 78, 73, 78, 199, 82, 85, 78, 78, 69, 82, 128, - 82, 85, 78, 128, 82, 85, 77, 201, 82, 85, 77, 65, 201, 82, 85, 77, 128, - 82, 85, 205, 82, 85, 76, 69, 82, 128, 82, 85, 76, 69, 45, 68, 69, 76, 65, - 89, 69, 68, 128, 82, 85, 76, 69, 128, 82, 85, 76, 65, 73, 128, 82, 85, - 75, 75, 65, 75, 72, 65, 128, 82, 85, 73, 83, 128, 82, 85, 71, 66, 217, - 82, 85, 68, 73, 77, 69, 78, 84, 193, 82, 85, 66, 76, 197, 82, 85, 194, - 82, 85, 65, 128, 82, 84, 72, 65, 78, 199, 82, 84, 65, 71, 83, 128, 82, - 84, 65, 71, 211, 82, 82, 89, 88, 128, 82, 82, 89, 84, 128, 82, 82, 89, - 82, 88, 128, 82, 82, 89, 82, 128, 82, 82, 89, 80, 128, 82, 82, 85, 88, - 128, 82, 82, 85, 85, 128, 82, 82, 85, 84, 128, 82, 82, 85, 82, 88, 128, - 82, 82, 85, 82, 128, 82, 82, 85, 80, 128, 82, 82, 85, 79, 88, 128, 82, - 82, 85, 79, 128, 82, 82, 85, 128, 82, 82, 82, 65, 128, 82, 82, 79, 88, - 128, 82, 82, 79, 84, 128, 82, 82, 79, 80, 128, 82, 82, 79, 79, 128, 82, - 82, 79, 128, 82, 82, 73, 73, 128, 82, 82, 73, 128, 82, 82, 69, 88, 128, - 82, 82, 69, 84, 128, 82, 82, 69, 80, 128, 82, 82, 69, 72, 128, 82, 82, - 69, 200, 82, 82, 69, 69, 128, 82, 82, 69, 128, 82, 82, 65, 88, 128, 82, - 82, 65, 85, 128, 82, 82, 65, 73, 128, 82, 82, 65, 65, 128, 82, 79, 87, - 66, 79, 65, 84, 128, 82, 79, 85, 78, 68, 69, 196, 82, 79, 85, 78, 68, 45, - 84, 73, 80, 80, 69, 196, 82, 79, 84, 85, 78, 68, 65, 128, 82, 79, 84, 65, - 84, 73, 79, 78, 83, 128, 82, 79, 84, 65, 84, 73, 79, 78, 45, 87, 65, 76, - 76, 80, 76, 65, 78, 197, 82, 79, 84, 65, 84, 73, 79, 78, 45, 70, 76, 79, - 79, 82, 80, 76, 65, 78, 197, 82, 79, 84, 65, 84, 73, 79, 78, 128, 82, 79, - 84, 65, 84, 73, 79, 206, 82, 79, 84, 65, 84, 69, 196, 82, 79, 83, 72, - 128, 82, 79, 83, 69, 84, 84, 69, 128, 82, 79, 83, 69, 128, 82, 79, 79, - 84, 128, 82, 79, 79, 83, 84, 69, 82, 128, 82, 79, 79, 75, 128, 82, 79, - 79, 70, 128, 82, 79, 77, 65, 78, 73, 65, 206, 82, 79, 77, 65, 206, 82, - 79, 77, 128, 82, 79, 76, 76, 73, 78, 199, 82, 79, 76, 76, 69, 210, 82, - 79, 76, 76, 69, 68, 45, 85, 208, 82, 79, 72, 73, 78, 71, 89, 193, 82, 79, - 71, 128, 82, 79, 196, 82, 79, 67, 75, 69, 84, 128, 82, 79, 67, 203, 82, - 79, 67, 128, 82, 79, 66, 79, 212, 82, 79, 66, 65, 84, 128, 82, 79, 65, - 83, 84, 69, 196, 82, 79, 65, 82, 128, 82, 79, 65, 128, 82, 78, 89, 73, - 78, 199, 82, 78, 79, 79, 78, 128, 82, 78, 79, 79, 206, 82, 78, 65, 205, - 82, 77, 84, 128, 82, 76, 79, 128, 82, 76, 77, 128, 82, 76, 73, 128, 82, - 76, 69, 128, 82, 74, 69, 211, 82, 74, 69, 128, 82, 74, 197, 82, 73, 86, - 69, 82, 128, 82, 73, 84, 85, 65, 76, 128, 82, 73, 84, 84, 79, 82, 85, - 128, 82, 73, 84, 83, 73, 128, 82, 73, 83, 73, 78, 199, 82, 73, 83, 72, - 128, 82, 73, 82, 65, 128, 82, 73, 80, 80, 76, 197, 82, 73, 80, 128, 82, - 73, 78, 71, 211, 82, 73, 78, 71, 73, 78, 199, 82, 73, 78, 70, 79, 82, 90, - 65, 78, 68, 79, 128, 82, 73, 206, 82, 73, 77, 71, 66, 65, 128, 82, 73, - 77, 128, 82, 73, 75, 82, 73, 75, 128, 82, 73, 71, 86, 69, 68, 73, 195, - 82, 73, 71, 72, 84, 87, 65, 82, 68, 83, 128, 82, 73, 71, 72, 84, 72, 65, - 78, 196, 82, 73, 71, 72, 84, 45, 84, 79, 45, 76, 69, 70, 212, 82, 73, 71, - 72, 84, 45, 83, 73, 68, 197, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 79, - 87, 69, 196, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 69, 196, 82, 73, 71, - 72, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 82, 73, 71, 72, 84, 45, 76, - 73, 71, 72, 84, 69, 196, 82, 73, 71, 72, 84, 45, 72, 65, 78, 68, 69, 196, - 82, 73, 71, 72, 84, 45, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 70, 65, - 67, 73, 78, 199, 82, 73, 71, 72, 84, 128, 82, 73, 69, 85, 76, 45, 89, 69, - 83, 73, 69, 85, 78, 71, 128, 82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, - 78, 72, 73, 69, 85, 72, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, - 45, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, - 45, 84, 73, 75, 69, 85, 84, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, - 76, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 84, 72, 73, - 69, 85, 84, 72, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 84, 73, - 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 83, 73, - 79, 83, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, - 80, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, - 75, 128, 82, 73, 69, 85, 76, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, - 45, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, - 76, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, - 45, 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, - 85, 76, 45, 80, 73, 69, 85, 80, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, - 85, 76, 45, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 80, 72, 73, - 69, 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 65, 78, 83, 73, 79, 83, - 128, 82, 73, 69, 85, 76, 45, 78, 73, 69, 85, 78, 128, 82, 73, 69, 85, 76, - 45, 77, 73, 69, 85, 77, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, - 77, 73, 69, 85, 77, 45, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, - 45, 77, 73, 69, 85, 77, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, - 45, 77, 73, 69, 85, 77, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, - 75, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, - 75, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, - 79, 75, 128, 82, 73, 69, 85, 76, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, - 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 72, 73, 69, 85, 72, 128, 82, - 73, 69, 85, 76, 45, 67, 73, 69, 85, 67, 128, 82, 73, 69, 85, 204, 82, 73, - 69, 76, 128, 82, 73, 69, 69, 128, 82, 73, 67, 69, 77, 128, 82, 73, 67, - 69, 128, 82, 73, 67, 197, 82, 73, 66, 66, 79, 78, 128, 82, 73, 66, 66, - 79, 206, 82, 73, 65, 204, 82, 72, 79, 84, 73, 195, 82, 72, 79, 128, 82, - 72, 207, 82, 72, 65, 128, 82, 72, 128, 82, 71, 89, 73, 78, 71, 83, 128, - 82, 71, 89, 65, 78, 128, 82, 71, 89, 193, 82, 69, 86, 79, 76, 86, 73, 78, - 199, 82, 69, 86, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 86, 77, 65, - 128, 82, 69, 86, 73, 65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 45, 83, 67, - 72, 87, 65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 128, 82, 69, 86, 69, 82, - 83, 69, 196, 82, 69, 86, 69, 82, 83, 197, 82, 69, 85, 88, 128, 82, 69, - 85, 128, 82, 69, 84, 85, 82, 78, 128, 82, 69, 84, 85, 82, 206, 82, 69, - 84, 82, 79, 70, 76, 69, 216, 82, 69, 84, 82, 69, 65, 84, 128, 82, 69, 84, - 79, 82, 84, 128, 82, 69, 83, 85, 80, 73, 78, 85, 83, 128, 82, 69, 83, 84, - 82, 79, 79, 77, 128, 82, 69, 83, 84, 82, 73, 67, 84, 69, 196, 82, 69, 83, - 84, 128, 82, 69, 83, 80, 79, 78, 83, 69, 128, 82, 69, 83, 79, 85, 82, 67, - 69, 128, 82, 69, 83, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 83, 73, 83, - 84, 65, 78, 67, 69, 128, 82, 69, 83, 73, 68, 69, 78, 67, 69, 128, 82, 69, - 83, 200, 82, 69, 82, 69, 78, 71, 71, 65, 78, 128, 82, 69, 82, 69, 75, 65, - 78, 128, 82, 69, 80, 82, 69, 83, 69, 78, 84, 128, 82, 69, 80, 76, 65, 67, - 69, 77, 69, 78, 212, 82, 69, 80, 72, 128, 82, 69, 80, 69, 84, 73, 84, 73, - 79, 206, 82, 69, 80, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, 128, - 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 89, 65, 128, 82, 69, 80, 65, - 128, 82, 69, 80, 193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78, - 128, 82, 69, 206, 82, 69, 77, 85, 128, 82, 69, 77, 73, 78, 68, 69, 210, - 82, 69, 77, 69, 68, 89, 128, 82, 69, 76, 73, 71, 73, 79, 78, 128, 82, 69, - 76, 73, 69, 86, 69, 196, 82, 69, 76, 69, 65, 83, 69, 128, 82, 69, 76, 65, - 88, 69, 68, 128, 82, 69, 76, 65, 84, 73, 79, 78, 65, 204, 82, 69, 76, 65, - 84, 73, 79, 78, 128, 82, 69, 76, 65, 65, 128, 82, 69, 74, 65, 78, 199, - 82, 69, 73, 196, 82, 69, 73, 128, 82, 69, 71, 85, 76, 85, 83, 45, 52, - 128, 82, 69, 71, 85, 76, 85, 83, 45, 51, 128, 82, 69, 71, 85, 76, 85, 83, - 45, 50, 128, 82, 69, 71, 85, 76, 85, 83, 128, 82, 69, 71, 85, 76, 85, - 211, 82, 69, 71, 73, 83, 84, 69, 82, 69, 196, 82, 69, 71, 73, 79, 78, 65, - 204, 82, 69, 71, 73, 65, 45, 50, 128, 82, 69, 71, 73, 65, 128, 82, 69, - 70, 79, 82, 77, 69, 196, 82, 69, 70, 69, 82, 69, 78, 67, 197, 82, 69, 68, - 85, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 82, 69, 67, 89, 67, 76, 73, - 78, 199, 82, 69, 67, 89, 67, 76, 69, 196, 82, 69, 67, 84, 73, 76, 73, 78, - 69, 65, 210, 82, 69, 67, 84, 65, 78, 71, 85, 76, 65, 210, 82, 69, 67, 84, - 65, 78, 71, 76, 69, 128, 82, 69, 67, 84, 65, 78, 71, 76, 197, 82, 69, 67, - 82, 69, 65, 84, 73, 79, 78, 65, 204, 82, 69, 67, 79, 82, 68, 73, 78, 199, - 82, 69, 67, 79, 82, 68, 69, 82, 128, 82, 69, 67, 79, 82, 68, 128, 82, 69, - 67, 79, 82, 196, 82, 69, 67, 73, 84, 65, 84, 73, 86, 197, 82, 69, 67, 69, - 80, 84, 73, 86, 197, 82, 69, 67, 69, 73, 86, 69, 82, 128, 82, 69, 67, 69, - 73, 86, 69, 210, 82, 69, 65, 76, 71, 65, 82, 45, 50, 128, 82, 69, 65, 76, - 71, 65, 82, 128, 82, 69, 65, 72, 77, 85, 75, 128, 82, 69, 65, 67, 72, - 128, 82, 68, 207, 82, 68, 69, 204, 82, 66, 65, 83, 193, 82, 65, 89, 83, - 128, 82, 65, 89, 211, 82, 65, 89, 65, 78, 78, 65, 128, 82, 65, 84, 73, - 79, 128, 82, 65, 84, 72, 65, 128, 82, 65, 84, 72, 193, 82, 65, 84, 65, - 128, 82, 65, 84, 128, 82, 65, 83, 87, 65, 68, 73, 128, 82, 65, 83, 79, - 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 81, 128, 82, 65, 80, 73, 83, - 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 65, 128, 82, 65, 78, 128, - 82, 65, 77, 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 75, 72, 65, 78, 71, - 128, 82, 65, 75, 65, 65, 82, 65, 65, 78, 83, 65, 89, 65, 128, 82, 65, 73, - 83, 73, 78, 199, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 66, 79, 87, - 128, 82, 65, 73, 76, 87, 65, 89, 128, 82, 65, 73, 76, 87, 65, 217, 82, - 65, 73, 76, 128, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, - 72, 77, 65, 84, 85, 76, 76, 65, 200, 82, 65, 72, 128, 82, 65, 70, 69, - 128, 82, 65, 69, 77, 128, 82, 65, 68, 73, 79, 65, 67, 84, 73, 86, 197, - 82, 65, 68, 73, 79, 128, 82, 65, 68, 73, 207, 82, 65, 68, 201, 82, 65, - 68, 128, 82, 65, 196, 82, 65, 67, 81, 85, 69, 212, 82, 65, 67, 73, 78, - 71, 128, 82, 65, 67, 73, 78, 199, 82, 65, 66, 66, 73, 84, 128, 82, 65, - 66, 66, 73, 212, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 51, 128, - 82, 65, 50, 128, 82, 65, 45, 50, 128, 82, 48, 50, 57, 128, 82, 48, 50, - 56, 128, 82, 48, 50, 55, 128, 82, 48, 50, 54, 128, 82, 48, 50, 53, 128, - 82, 48, 50, 52, 128, 82, 48, 50, 51, 128, 82, 48, 50, 50, 128, 82, 48, - 50, 49, 128, 82, 48, 50, 48, 128, 82, 48, 49, 57, 128, 82, 48, 49, 56, - 128, 82, 48, 49, 55, 128, 82, 48, 49, 54, 65, 128, 82, 48, 49, 54, 128, - 82, 48, 49, 53, 128, 82, 48, 49, 52, 128, 82, 48, 49, 51, 128, 82, 48, - 49, 50, 128, 82, 48, 49, 49, 128, 82, 48, 49, 48, 65, 128, 82, 48, 49, - 48, 128, 82, 48, 48, 57, 128, 82, 48, 48, 56, 128, 82, 48, 48, 55, 128, - 82, 48, 48, 54, 128, 82, 48, 48, 53, 128, 82, 48, 48, 52, 128, 82, 48, - 48, 51, 66, 128, 82, 48, 48, 51, 65, 128, 82, 48, 48, 51, 128, 82, 48, - 48, 50, 65, 128, 82, 48, 48, 50, 128, 82, 48, 48, 49, 128, 82, 45, 67, - 82, 69, 197, 81, 89, 88, 128, 81, 89, 85, 128, 81, 89, 84, 128, 81, 89, - 82, 88, 128, 81, 89, 82, 128, 81, 89, 80, 128, 81, 89, 79, 128, 81, 89, - 73, 128, 81, 89, 69, 69, 128, 81, 89, 69, 128, 81, 89, 65, 65, 128, 81, - 89, 65, 128, 81, 89, 128, 81, 87, 73, 128, 81, 87, 69, 69, 128, 81, 87, - 69, 128, 81, 87, 65, 65, 128, 81, 87, 65, 128, 81, 85, 88, 128, 81, 85, - 86, 128, 81, 85, 85, 86, 128, 81, 85, 85, 128, 81, 85, 84, 128, 81, 85, - 83, 72, 83, 72, 65, 89, 65, 128, 81, 85, 82, 88, 128, 81, 85, 82, 128, - 81, 85, 80, 128, 81, 85, 79, 88, 128, 81, 85, 79, 84, 197, 81, 85, 79, - 84, 65, 84, 73, 79, 206, 81, 85, 79, 84, 128, 81, 85, 79, 80, 128, 81, - 85, 79, 128, 81, 85, 75, 128, 81, 85, 73, 78, 84, 69, 83, 83, 69, 78, 67, - 69, 128, 81, 85, 73, 78, 68, 73, 67, 69, 83, 73, 77, 193, 81, 85, 73, 78, - 67, 85, 78, 88, 128, 81, 85, 73, 78, 65, 82, 73, 85, 211, 81, 85, 73, 76, - 212, 81, 85, 73, 76, 76, 128, 81, 85, 73, 67, 203, 81, 85, 73, 128, 81, - 85, 70, 128, 81, 85, 69, 83, 84, 73, 79, 78, 69, 196, 81, 85, 69, 83, 84, - 73, 79, 78, 128, 81, 85, 69, 83, 84, 73, 79, 206, 81, 85, 69, 69, 78, - 128, 81, 85, 69, 69, 206, 81, 85, 69, 128, 81, 85, 66, 85, 84, 83, 128, - 81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, 85, 65, 82, 84, 69, 82, 83, - 128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, 65, 82, 84, 69, 82, 128, - 81, 85, 65, 78, 84, 73, 84, 217, 81, 85, 65, 68, 82, 85, 80, 76, 197, 81, - 85, 65, 68, 82, 65, 78, 84, 128, 81, 85, 65, 68, 82, 65, 78, 212, 81, 85, - 65, 68, 67, 79, 76, 79, 78, 128, 81, 85, 65, 68, 128, 81, 85, 65, 196, - 81, 85, 65, 128, 81, 85, 128, 81, 208, 81, 79, 88, 128, 81, 79, 84, 128, - 81, 79, 80, 72, 128, 81, 79, 80, 65, 128, 81, 79, 80, 128, 81, 79, 79, - 128, 81, 79, 207, 81, 79, 70, 128, 81, 79, 198, 81, 79, 65, 128, 81, 79, - 128, 81, 78, 128, 81, 73, 88, 128, 81, 73, 84, 83, 65, 128, 81, 73, 84, - 128, 81, 73, 80, 128, 81, 73, 73, 128, 81, 73, 69, 88, 128, 81, 73, 69, - 84, 128, 81, 73, 69, 80, 128, 81, 73, 69, 128, 81, 73, 128, 81, 72, 87, - 73, 128, 81, 72, 87, 69, 69, 128, 81, 72, 87, 69, 128, 81, 72, 87, 65, - 65, 128, 81, 72, 87, 65, 128, 81, 72, 85, 128, 81, 72, 79, 80, 72, 128, - 81, 72, 79, 128, 81, 72, 73, 128, 81, 72, 69, 69, 128, 81, 72, 69, 128, - 81, 72, 65, 85, 128, 81, 72, 65, 65, 128, 81, 72, 65, 128, 81, 71, 65, - 128, 81, 69, 84, 65, 78, 65, 128, 81, 69, 69, 128, 81, 69, 128, 81, 65, - 89, 128, 81, 65, 85, 128, 81, 65, 84, 65, 78, 128, 81, 65, 82, 78, 69, - 217, 81, 65, 82, 128, 81, 65, 81, 128, 81, 65, 80, 72, 128, 81, 65, 77, - 65, 84, 83, 128, 81, 65, 77, 65, 84, 211, 81, 65, 76, 193, 81, 65, 73, - 82, 84, 72, 82, 65, 128, 81, 65, 73, 128, 81, 65, 70, 128, 81, 65, 198, - 81, 65, 68, 77, 65, 128, 81, 65, 65, 73, 128, 81, 65, 65, 70, 85, 128, - 81, 65, 65, 70, 128, 81, 48, 48, 55, 128, 81, 48, 48, 54, 128, 81, 48, - 48, 53, 128, 81, 48, 48, 52, 128, 81, 48, 48, 51, 128, 81, 48, 48, 50, - 128, 81, 48, 48, 49, 128, 80, 90, 128, 80, 89, 88, 128, 80, 89, 84, 128, - 80, 89, 82, 88, 128, 80, 89, 82, 128, 80, 89, 80, 128, 80, 87, 79, 89, - 128, 80, 87, 79, 79, 128, 80, 87, 79, 128, 80, 87, 207, 80, 87, 73, 73, - 128, 80, 87, 73, 128, 80, 87, 69, 69, 128, 80, 87, 69, 128, 80, 87, 65, - 65, 128, 80, 87, 128, 80, 86, 128, 80, 85, 88, 128, 80, 85, 85, 84, 128, - 80, 85, 85, 128, 80, 85, 84, 82, 69, 70, 65, 67, 84, 73, 79, 78, 128, 80, - 85, 84, 128, 80, 85, 212, 80, 85, 83, 72, 80, 73, 78, 128, 80, 85, 83, - 72, 80, 73, 75, 65, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, - 128, 80, 85, 82, 83, 69, 128, 80, 85, 82, 80, 76, 197, 80, 85, 82, 78, - 65, 77, 65, 128, 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 73, 70, 89, - 128, 80, 85, 82, 128, 80, 85, 81, 128, 80, 85, 80, 128, 80, 85, 79, 88, - 128, 80, 85, 79, 80, 128, 80, 85, 79, 128, 80, 85, 78, 71, 65, 65, 77, - 128, 80, 85, 78, 71, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 78, - 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 206, 80, 85, 77, 80, 128, - 80, 85, 77, 128, 80, 85, 70, 70, 69, 68, 128, 80, 85, 69, 128, 80, 85, - 67, 75, 128, 80, 85, 66, 76, 73, 195, 80, 85, 194, 80, 85, 65, 81, 128, - 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, 85, 49, 128, 80, 85, 128, 80, - 84, 72, 65, 72, 193, 80, 84, 69, 128, 80, 83, 73, 76, 201, 80, 83, 73, - 70, 73, 83, 84, 79, 83, 89, 78, 65, 71, 77, 65, 128, 80, 83, 73, 70, 73, - 83, 84, 79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 80, 83, 73, - 70, 73, 83, 84, 79, 206, 80, 83, 73, 70, 73, 83, 84, 79, 76, 89, 71, 73, - 83, 77, 65, 128, 80, 83, 73, 128, 80, 83, 65, 76, 84, 69, 210, 80, 83, - 128, 80, 82, 79, 86, 69, 128, 80, 82, 79, 84, 79, 86, 65, 82, 89, 211, - 80, 82, 79, 84, 79, 211, 80, 82, 79, 84, 69, 67, 84, 69, 196, 80, 82, 79, - 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 80, 82, 79, 80, 79, 82, - 84, 73, 79, 78, 65, 204, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 128, 80, - 82, 79, 80, 69, 82, 84, 217, 80, 82, 79, 80, 69, 76, 76, 69, 210, 80, 82, - 79, 79, 70, 128, 80, 82, 79, 76, 79, 78, 71, 69, 196, 80, 82, 79, 76, 65, - 84, 73, 79, 78, 197, 80, 82, 79, 74, 69, 67, 84, 79, 82, 128, 80, 82, 79, - 74, 69, 67, 84, 73, 86, 69, 128, 80, 82, 79, 74, 69, 67, 84, 73, 79, 78, - 128, 80, 82, 79, 72, 73, 66, 73, 84, 69, 196, 80, 82, 79, 71, 82, 69, 83, - 83, 128, 80, 82, 79, 71, 82, 65, 205, 80, 82, 79, 70, 79, 85, 78, 68, - 128, 80, 82, 79, 68, 85, 67, 84, 128, 80, 82, 79, 68, 85, 67, 212, 80, - 82, 73, 86, 65, 84, 69, 128, 80, 82, 73, 86, 65, 84, 197, 80, 82, 73, 86, - 65, 67, 217, 80, 82, 73, 83, 72, 84, 72, 65, 77, 65, 84, 82, 193, 80, 82, - 73, 78, 84, 83, 128, 80, 82, 73, 78, 84, 69, 82, 128, 80, 82, 73, 78, 84, - 69, 210, 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 78, - 67, 69, 83, 83, 128, 80, 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, - 82, 69, 86, 73, 79, 85, 211, 80, 82, 69, 83, 83, 69, 196, 80, 82, 69, 83, - 69, 84, 128, 80, 82, 69, 83, 69, 78, 84, 65, 84, 73, 79, 206, 80, 82, 69, - 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, 82, 69, 80, 79, 78, 68, 69, 82, - 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, 72, 65, 128, 80, 82, 69, 70, 65, - 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, 69, 128, 80, 82, 69, 67, - 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, 83, 128, 80, 82, 69, 67, - 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69, 67, 69, 68, - 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, 82, 65, 89, 69, 210, 80, 82, - 65, 77, 45, 80, 73, 73, 128, 80, 82, 65, 77, 45, 80, 73, 201, 80, 82, 65, - 77, 45, 77, 85, 79, 89, 128, 80, 82, 65, 77, 45, 77, 85, 79, 217, 80, 82, - 65, 77, 45, 66, 85, 79, 78, 128, 80, 82, 65, 77, 45, 66, 85, 79, 206, 80, - 82, 65, 77, 45, 66, 69, 73, 128, 80, 82, 65, 77, 45, 66, 69, 201, 80, 82, - 65, 77, 128, 80, 82, 65, 205, 80, 82, 128, 80, 80, 86, 128, 80, 80, 77, - 128, 80, 80, 65, 128, 80, 79, 89, 128, 80, 79, 88, 128, 80, 79, 87, 69, - 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 87, 68, 69, 82, 69, 196, 80, - 79, 87, 68, 69, 82, 128, 80, 79, 85, 78, 196, 80, 79, 85, 76, 84, 82, - 217, 80, 79, 85, 67, 72, 128, 80, 79, 84, 65, 84, 79, 128, 80, 79, 84, - 65, 66, 76, 197, 80, 79, 212, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, - 206, 80, 79, 83, 84, 66, 79, 88, 128, 80, 79, 83, 84, 65, 204, 80, 79, - 83, 84, 128, 80, 79, 83, 212, 80, 79, 83, 83, 69, 83, 83, 73, 79, 78, - 128, 80, 79, 83, 73, 84, 73, 79, 78, 83, 128, 80, 79, 82, 84, 65, 66, 76, - 197, 80, 79, 82, 82, 69, 67, 84, 85, 83, 128, 80, 79, 82, 82, 69, 67, 84, - 85, 211, 80, 79, 80, 80, 73, 78, 199, 80, 79, 80, 80, 69, 82, 128, 80, - 79, 80, 67, 79, 82, 78, 128, 80, 79, 80, 128, 80, 79, 208, 80, 79, 79, - 68, 76, 69, 128, 80, 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 206, - 80, 79, 77, 77, 69, 69, 128, 80, 79, 77, 77, 69, 197, 80, 79, 76, 73, 83, + 72, 65, 82, 80, 128, 83, 72, 65, 82, 208, 83, 72, 65, 82, 75, 128, 83, + 72, 65, 82, 65, 128, 83, 72, 65, 82, 50, 128, 83, 72, 65, 82, 178, 83, + 72, 65, 80, 73, 78, 71, 128, 83, 72, 65, 80, 69, 83, 128, 83, 72, 65, 80, + 197, 83, 72, 65, 80, 128, 83, 72, 65, 78, 71, 128, 83, 72, 65, 78, 128, + 83, 72, 65, 206, 83, 72, 65, 77, 82, 79, 67, 75, 128, 83, 72, 65, 76, 83, + 72, 69, 76, 69, 84, 128, 83, 72, 65, 76, 76, 79, 215, 83, 72, 65, 75, 84, + 73, 128, 83, 72, 65, 75, 73, 78, 71, 128, 83, 72, 65, 75, 73, 78, 199, + 83, 72, 65, 75, 128, 83, 72, 65, 73, 128, 83, 72, 65, 70, 84, 128, 83, + 72, 65, 70, 212, 83, 72, 65, 68, 79, 87, 69, 196, 83, 72, 65, 68, 69, + 196, 83, 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65, + 68, 68, 193, 83, 72, 65, 68, 128, 83, 72, 65, 196, 83, 72, 65, 66, 54, + 128, 83, 72, 65, 65, 128, 83, 72, 65, 54, 128, 83, 72, 65, 182, 83, 72, + 65, 51, 128, 83, 72, 65, 179, 83, 71, 82, 193, 83, 71, 79, 210, 83, 71, + 67, 128, 83, 71, 65, 215, 83, 71, 65, 194, 83, 71, 128, 83, 69, 89, 75, + 128, 83, 69, 88, 84, 85, 76, 193, 83, 69, 88, 84, 73, 76, 69, 128, 83, + 69, 88, 84, 65, 78, 211, 83, 69, 86, 69, 82, 65, 78, 67, 69, 128, 83, 69, + 86, 69, 78, 84, 89, 128, 83, 69, 86, 69, 78, 84, 217, 83, 69, 86, 69, 78, + 84, 72, 128, 83, 69, 86, 69, 78, 84, 69, 69, 78, 128, 83, 69, 86, 69, 78, + 84, 69, 69, 206, 83, 69, 86, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, 83, + 69, 86, 69, 206, 83, 69, 85, 88, 128, 83, 69, 85, 78, 89, 65, 77, 128, + 83, 69, 85, 65, 69, 81, 128, 83, 69, 84, 70, 79, 78, 128, 83, 69, 83, 84, + 69, 82, 84, 73, 85, 211, 83, 69, 83, 81, 85, 73, 81, 85, 65, 68, 82, 65, + 84, 69, 128, 83, 69, 83, 65, 77, 197, 83, 69, 82, 86, 73, 67, 197, 83, + 69, 82, 73, 70, 83, 128, 83, 69, 82, 73, 70, 211, 83, 69, 82, 73, 70, + 128, 83, 69, 81, 85, 69, 78, 84, 73, 65, 76, 128, 83, 69, 81, 85, 69, 78, + 67, 197, 83, 69, 80, 84, 85, 80, 76, 197, 83, 69, 80, 84, 69, 77, 66, 69, + 82, 128, 83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 83, 69, 80, 65, 82, 65, + 84, 79, 210, 83, 69, 78, 84, 79, 128, 83, 69, 78, 84, 73, 128, 83, 69, + 77, 85, 78, 67, 73, 193, 83, 69, 77, 75, 65, 84, 72, 128, 83, 69, 77, 75, + 128, 83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 69, 77, 73, 83, 79, 70, + 212, 83, 69, 77, 73, 83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 77, 73, 77, + 73, 78, 73, 77, 193, 83, 69, 77, 73, 68, 73, 82, 69, 67, 212, 83, 69, 77, + 73, 67, 79, 76, 79, 78, 128, 83, 69, 77, 73, 67, 79, 76, 79, 206, 83, 69, + 77, 73, 67, 73, 82, 67, 85, 76, 65, 210, 83, 69, 77, 73, 67, 73, 82, 67, + 76, 197, 83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, 69, 77, 73, 45, 86, + 79, 73, 67, 69, 196, 83, 69, 76, 70, 73, 69, 128, 83, 69, 76, 70, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 57, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 57, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 55, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 54, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 57, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 52, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 51, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 57, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 49, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 48, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 57, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 56, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 54, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 56, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 51, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 48, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 55, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 56, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 55, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 55, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 53, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 55, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 55, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 50, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 55, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 55, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 54, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 55, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 54, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 52, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 54, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 54, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 49, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 54, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 57, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 53, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, + 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 54, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, + 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 51, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, + 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 48, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 57, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 56, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 54, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 53, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 51, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 50, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 48, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 56, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 55, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 53, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 52, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 50, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 49, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 55, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 53, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 52, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 49, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 48, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 57, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 56, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 53, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 52, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, + 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 49, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 50, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 57, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 56, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, + 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 53, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 50, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 50, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 50, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 49, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 50, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 57, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 50, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 50, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 54, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 53, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 50, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 50, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 57, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 50, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, + 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 54, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 51, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 50, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 50, 48, 57, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 50, 48, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 55, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 54, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 48, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 50, 48, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 51, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 50, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 50, 48, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, + 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, + 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 56, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 57, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 53, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 52, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 57, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 57, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 49, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 57, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 56, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 56, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 56, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 53, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 56, 52, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 56, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 50, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 49, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 56, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 57, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 55, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 54, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 53, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 55, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 55, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 50, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 49, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 55, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 57, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 54, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 54, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 54, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 53, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, + 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 50, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 54, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 57, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 53, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, + 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 54, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 51, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 50, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 55, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 54, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 51, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 48, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 55, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 52, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 51, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 48, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 56, + 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 55, 128, 83, 69, 76, 69, + 67, 84, 79, 82, 45, 49, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 52, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 51, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, + 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 48, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, + 49, 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 56, 128, 83, + 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 55, 128, 83, 69, 76, 69, 67, 84, + 79, 82, 45, 49, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, + 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 52, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 49, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 48, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, + 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 56, 128, 83, 69, 76, + 69, 67, 84, 79, 82, 45, 49, 48, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, + 45, 49, 48, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 53, 128, + 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 52, 128, 83, 69, 76, 69, 67, + 84, 79, 82, 45, 49, 48, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, + 48, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 49, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 45, 49, 48, 48, 128, 83, 69, 76, 69, 67, 84, 79, + 82, 45, 49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 128, 83, 69, + 76, 69, 67, 84, 79, 82, 128, 83, 69, 76, 69, 67, 84, 79, 210, 83, 69, 76, + 69, 67, 84, 69, 196, 83, 69, 73, 83, 77, 65, 128, 83, 69, 73, 83, 77, + 193, 83, 69, 72, 128, 83, 69, 71, 79, 76, 128, 83, 69, 71, 78, 79, 128, + 83, 69, 71, 77, 69, 78, 84, 128, 83, 69, 69, 86, 128, 83, 69, 69, 78, 85, + 128, 83, 69, 69, 78, 128, 83, 69, 69, 206, 83, 69, 69, 68, 76, 73, 78, + 71, 128, 83, 69, 69, 45, 78, 79, 45, 69, 86, 73, 204, 83, 69, 67, 84, 79, + 82, 128, 83, 69, 67, 84, 73, 79, 78, 128, 83, 69, 67, 84, 73, 79, 206, + 83, 69, 67, 82, 69, 84, 128, 83, 69, 67, 79, 78, 68, 128, 83, 69, 67, 65, + 78, 84, 128, 83, 69, 66, 65, 84, 66, 69, 73, 212, 83, 69, 65, 84, 128, + 83, 69, 65, 76, 128, 83, 69, 65, 71, 85, 76, 204, 83, 68, 79, 78, 199, + 83, 68, 128, 83, 67, 87, 65, 128, 83, 67, 82, 85, 80, 76, 69, 128, 83, + 67, 82, 79, 76, 76, 128, 83, 67, 82, 73, 80, 84, 128, 83, 67, 82, 69, 69, + 78, 128, 83, 67, 82, 69, 69, 206, 83, 67, 82, 69, 65, 77, 73, 78, 199, + 83, 67, 79, 82, 80, 73, 85, 83, 128, 83, 67, 79, 82, 80, 73, 79, 78, 128, + 83, 67, 79, 82, 69, 128, 83, 67, 79, 79, 84, 69, 82, 128, 83, 67, 73, 83, + 83, 79, 82, 83, 128, 83, 67, 73, 128, 83, 67, 72, 87, 65, 128, 83, 67, + 72, 87, 193, 83, 67, 72, 82, 79, 69, 68, 69, 82, 128, 83, 67, 72, 79, 79, + 76, 128, 83, 67, 72, 79, 79, 204, 83, 67, 72, 79, 76, 65, 82, 128, 83, + 67, 72, 69, 77, 193, 83, 67, 69, 80, 84, 69, 210, 83, 67, 65, 78, 68, 73, + 67, 85, 83, 128, 83, 67, 65, 78, 68, 73, 67, 85, 211, 83, 67, 65, 206, + 83, 67, 65, 76, 69, 83, 128, 83, 66, 85, 194, 83, 66, 82, 85, 204, 83, + 65, 89, 73, 83, 201, 83, 65, 89, 65, 78, 78, 65, 128, 83, 65, 89, 128, + 83, 65, 88, 79, 80, 72, 79, 78, 69, 128, 83, 65, 88, 73, 77, 65, 84, 65, + 128, 83, 65, 87, 65, 78, 128, 83, 65, 87, 128, 83, 65, 86, 79, 85, 82, + 73, 78, 199, 83, 65, 85, 82, 65, 83, 72, 84, 82, 193, 83, 65, 85, 73, 76, + 128, 83, 65, 84, 85, 82, 78, 128, 83, 65, 84, 75, 65, 65, 78, 75, 85, 85, + 128, 83, 65, 84, 75, 65, 65, 78, 128, 83, 65, 84, 69, 76, 76, 73, 84, 69, + 128, 83, 65, 84, 69, 76, 76, 73, 84, 197, 83, 65, 84, 67, 72, 69, 76, + 128, 83, 65, 84, 65, 78, 71, 65, 128, 83, 65, 83, 72, 128, 83, 65, 83, + 65, 75, 128, 83, 65, 82, 73, 128, 83, 65, 82, 193, 83, 65, 82, 128, 83, + 65, 81, 128, 83, 65, 80, 65, 128, 83, 65, 78, 89, 79, 79, 71, 193, 83, + 65, 78, 89, 65, 75, 193, 83, 65, 78, 84, 73, 73, 77, 85, 128, 83, 65, 78, + 78, 89, 65, 128, 83, 65, 78, 71, 65, 50, 128, 83, 65, 78, 68, 72, 201, + 83, 65, 78, 68, 65, 76, 128, 83, 65, 78, 65, 72, 128, 83, 65, 78, 128, + 83, 65, 77, 89, 79, 203, 83, 65, 77, 86, 65, 84, 128, 83, 65, 77, 80, 73, + 128, 83, 65, 77, 80, 72, 65, 79, 128, 83, 65, 77, 75, 65, 128, 83, 65, + 77, 69, 75, 72, 128, 83, 65, 77, 69, 75, 200, 83, 65, 77, 66, 65, 128, + 83, 65, 77, 65, 82, 73, 84, 65, 206, 83, 65, 77, 128, 83, 65, 76, 84, 73, + 82, 69, 128, 83, 65, 76, 84, 73, 76, 76, 79, 128, 83, 65, 76, 84, 45, 50, + 128, 83, 65, 76, 84, 128, 83, 65, 76, 212, 83, 65, 76, 76, 65, 76, 76, + 65, 72, 79, 213, 83, 65, 76, 76, 193, 83, 65, 76, 65, 205, 83, 65, 76, + 65, 68, 128, 83, 65, 76, 65, 128, 83, 65, 76, 45, 65, 77, 77, 79, 78, 73, + 65, 67, 128, 83, 65, 76, 128, 83, 65, 75, 84, 65, 128, 83, 65, 75, 79, + 84, 128, 83, 65, 75, 72, 193, 83, 65, 75, 69, 85, 65, 69, 128, 83, 65, + 75, 197, 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 66, 79, 65, 84, + 128, 83, 65, 73, 76, 128, 83, 65, 73, 75, 85, 82, 85, 128, 83, 65, 72, + 128, 83, 65, 71, 73, 84, 84, 65, 82, 73, 85, 83, 128, 83, 65, 71, 65, + 128, 83, 65, 71, 128, 83, 65, 199, 83, 65, 70, 72, 65, 128, 83, 65, 70, + 69, 84, 217, 83, 65, 68, 72, 69, 128, 83, 65, 68, 69, 128, 83, 65, 68, + 128, 83, 65, 196, 83, 65, 67, 82, 73, 70, 73, 67, 73, 65, 204, 83, 65, + 65, 73, 128, 83, 65, 65, 68, 72, 85, 128, 83, 65, 45, 73, 128, 83, 65, + 45, 50, 128, 83, 48, 52, 54, 128, 83, 48, 52, 53, 128, 83, 48, 52, 52, + 128, 83, 48, 52, 51, 128, 83, 48, 52, 50, 128, 83, 48, 52, 49, 128, 83, + 48, 52, 48, 128, 83, 48, 51, 57, 128, 83, 48, 51, 56, 128, 83, 48, 51, + 55, 128, 83, 48, 51, 54, 128, 83, 48, 51, 53, 65, 128, 83, 48, 51, 53, + 128, 83, 48, 51, 52, 128, 83, 48, 51, 51, 128, 83, 48, 51, 50, 128, 83, + 48, 51, 49, 128, 83, 48, 51, 48, 128, 83, 48, 50, 57, 128, 83, 48, 50, + 56, 128, 83, 48, 50, 55, 128, 83, 48, 50, 54, 66, 128, 83, 48, 50, 54, + 65, 128, 83, 48, 50, 54, 128, 83, 48, 50, 53, 128, 83, 48, 50, 52, 128, + 83, 48, 50, 51, 128, 83, 48, 50, 50, 128, 83, 48, 50, 49, 128, 83, 48, + 50, 48, 128, 83, 48, 49, 57, 128, 83, 48, 49, 56, 128, 83, 48, 49, 55, + 65, 128, 83, 48, 49, 55, 128, 83, 48, 49, 54, 128, 83, 48, 49, 53, 128, + 83, 48, 49, 52, 66, 128, 83, 48, 49, 52, 65, 128, 83, 48, 49, 52, 128, + 83, 48, 49, 51, 128, 83, 48, 49, 50, 128, 83, 48, 49, 49, 128, 83, 48, + 49, 48, 128, 83, 48, 48, 57, 128, 83, 48, 48, 56, 128, 83, 48, 48, 55, + 128, 83, 48, 48, 54, 65, 128, 83, 48, 48, 54, 128, 83, 48, 48, 53, 128, + 83, 48, 48, 52, 128, 83, 48, 48, 51, 128, 83, 48, 48, 50, 65, 128, 83, + 48, 48, 50, 128, 83, 48, 48, 49, 128, 83, 45, 87, 128, 83, 45, 83, 72, + 65, 80, 69, 196, 82, 89, 89, 128, 82, 89, 88, 128, 82, 89, 84, 128, 82, + 89, 82, 88, 128, 82, 89, 82, 128, 82, 89, 80, 128, 82, 87, 79, 79, 128, + 82, 87, 79, 128, 82, 87, 73, 73, 128, 82, 87, 73, 128, 82, 87, 69, 69, + 128, 82, 87, 69, 128, 82, 87, 65, 72, 65, 128, 82, 87, 65, 65, 128, 82, + 87, 65, 128, 82, 85, 88, 128, 82, 85, 85, 66, 85, 82, 85, 128, 82, 85, + 85, 128, 82, 85, 84, 128, 82, 85, 83, 73, 128, 82, 85, 82, 88, 128, 82, + 85, 82, 128, 82, 85, 80, 73, 73, 128, 82, 85, 80, 69, 197, 82, 85, 80, + 128, 82, 85, 79, 88, 128, 82, 85, 79, 80, 128, 82, 85, 79, 128, 82, 85, + 78, 79, 85, 84, 128, 82, 85, 78, 78, 73, 78, 199, 82, 85, 78, 78, 69, 82, + 128, 82, 85, 78, 73, 195, 82, 85, 78, 128, 82, 85, 77, 201, 82, 85, 77, + 65, 201, 82, 85, 77, 128, 82, 85, 205, 82, 85, 76, 69, 82, 128, 82, 85, + 76, 69, 45, 68, 69, 76, 65, 89, 69, 68, 128, 82, 85, 76, 69, 128, 82, 85, + 76, 65, 73, 128, 82, 85, 75, 75, 65, 75, 72, 65, 128, 82, 85, 73, 83, + 128, 82, 85, 71, 66, 217, 82, 85, 68, 73, 77, 69, 78, 84, 193, 82, 85, + 66, 76, 197, 82, 85, 194, 82, 85, 65, 128, 82, 84, 72, 65, 78, 199, 82, + 84, 65, 71, 83, 128, 82, 84, 65, 71, 211, 82, 82, 89, 88, 128, 82, 82, + 89, 84, 128, 82, 82, 89, 82, 88, 128, 82, 82, 89, 82, 128, 82, 82, 89, + 80, 128, 82, 82, 85, 88, 128, 82, 82, 85, 85, 128, 82, 82, 85, 84, 128, + 82, 82, 85, 82, 88, 128, 82, 82, 85, 82, 128, 82, 82, 85, 80, 128, 82, + 82, 85, 79, 88, 128, 82, 82, 85, 79, 128, 82, 82, 85, 128, 82, 82, 82, + 65, 128, 82, 82, 79, 88, 128, 82, 82, 79, 84, 128, 82, 82, 79, 80, 128, + 82, 82, 79, 79, 128, 82, 82, 79, 128, 82, 82, 73, 73, 128, 82, 82, 73, + 128, 82, 82, 69, 88, 128, 82, 82, 69, 84, 128, 82, 82, 69, 80, 128, 82, + 82, 69, 72, 128, 82, 82, 69, 200, 82, 82, 69, 69, 128, 82, 82, 69, 128, + 82, 82, 65, 88, 128, 82, 82, 65, 85, 128, 82, 82, 65, 73, 128, 82, 82, + 65, 65, 128, 82, 79, 87, 66, 79, 65, 84, 128, 82, 79, 85, 78, 68, 69, + 196, 82, 79, 85, 78, 68, 45, 84, 73, 80, 80, 69, 196, 82, 79, 84, 85, 78, + 68, 65, 128, 82, 79, 84, 65, 84, 73, 79, 78, 83, 128, 82, 79, 84, 65, 84, + 73, 79, 78, 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 82, 79, 84, 65, 84, + 73, 79, 78, 45, 70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 82, 79, 84, 65, + 84, 73, 79, 78, 128, 82, 79, 84, 65, 84, 73, 79, 206, 82, 79, 84, 65, 84, + 69, 196, 82, 79, 83, 72, 128, 82, 79, 83, 69, 84, 84, 69, 128, 82, 79, + 83, 69, 128, 82, 79, 79, 84, 128, 82, 79, 79, 83, 84, 69, 82, 128, 82, + 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 77, 65, 78, 73, 65, 206, + 82, 79, 77, 65, 206, 82, 79, 77, 128, 82, 79, 76, 76, 73, 78, 199, 82, + 79, 76, 76, 69, 210, 82, 79, 76, 76, 69, 68, 45, 85, 208, 82, 79, 72, 73, + 78, 71, 89, 193, 82, 79, 71, 128, 82, 79, 196, 82, 79, 67, 75, 69, 84, + 128, 82, 79, 67, 203, 82, 79, 67, 128, 82, 79, 66, 79, 212, 82, 79, 66, + 65, 84, 128, 82, 79, 65, 83, 84, 69, 196, 82, 79, 65, 82, 128, 82, 79, + 65, 128, 82, 78, 89, 73, 78, 199, 82, 78, 79, 79, 78, 128, 82, 78, 79, + 79, 206, 82, 78, 65, 205, 82, 77, 84, 128, 82, 76, 79, 128, 82, 76, 77, + 128, 82, 76, 73, 128, 82, 76, 69, 128, 82, 74, 69, 211, 82, 74, 69, 128, + 82, 74, 197, 82, 73, 86, 69, 82, 128, 82, 73, 84, 85, 65, 76, 128, 82, + 73, 84, 84, 79, 82, 85, 128, 82, 73, 84, 83, 73, 128, 82, 73, 83, 73, 78, + 199, 82, 73, 83, 72, 128, 82, 73, 82, 65, 128, 82, 73, 80, 80, 76, 197, + 82, 73, 80, 128, 82, 73, 78, 71, 211, 82, 73, 78, 71, 73, 78, 199, 82, + 73, 78, 70, 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, 206, 82, 73, 77, 71, + 66, 65, 128, 82, 73, 77, 128, 82, 73, 75, 82, 73, 75, 128, 82, 73, 71, + 86, 69, 68, 73, 195, 82, 73, 71, 72, 84, 87, 65, 82, 68, 83, 128, 82, 73, + 71, 72, 84, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 84, 79, 45, 76, 69, + 70, 212, 82, 73, 71, 72, 84, 45, 83, 73, 68, 197, 82, 73, 71, 72, 84, 45, + 83, 72, 65, 68, 79, 87, 69, 196, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, + 69, 196, 82, 73, 71, 72, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 82, 73, + 71, 72, 84, 45, 76, 73, 71, 72, 84, 69, 196, 82, 73, 71, 72, 84, 45, 72, + 65, 78, 68, 69, 196, 82, 73, 71, 72, 84, 45, 72, 65, 78, 196, 82, 73, 71, + 72, 84, 45, 70, 65, 67, 73, 78, 199, 82, 73, 71, 72, 84, 128, 82, 73, 70, + 76, 69, 128, 82, 73, 69, 85, 76, 45, 89, 69, 83, 73, 69, 85, 78, 71, 128, + 82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 45, + 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, + 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84, + 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 84, 73, 75, 69, 85, + 84, 128, 82, 73, 69, 85, 76, 45, 84, 72, 73, 69, 85, 84, 72, 128, 82, 73, + 69, 85, 76, 45, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 82, 73, + 69, 85, 76, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 82, 73, 69, 85, + 76, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, + 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, + 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, + 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, + 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, + 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, + 80, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, + 80, 128, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, + 69, 85, 76, 45, 80, 65, 78, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, + 78, 73, 69, 85, 78, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, + 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 75, + 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, + 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 128, + 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 45, 83, 73, 79, 83, 128, + 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 45, 72, 73, 69, 85, 72, + 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, + 76, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 82, 73, + 69, 85, 76, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 67, 73, + 69, 85, 67, 128, 82, 73, 69, 85, 204, 82, 73, 69, 76, 128, 82, 73, 69, + 69, 128, 82, 73, 67, 69, 77, 128, 82, 73, 67, 69, 128, 82, 73, 67, 197, + 82, 73, 66, 66, 79, 78, 128, 82, 73, 66, 66, 79, 206, 82, 73, 65, 204, + 82, 72, 79, 84, 73, 195, 82, 72, 79, 128, 82, 72, 207, 82, 72, 73, 78, + 79, 67, 69, 82, 79, 83, 128, 82, 72, 65, 128, 82, 72, 128, 82, 71, 89, + 73, 78, 71, 83, 128, 82, 71, 89, 65, 78, 128, 82, 71, 89, 193, 82, 69, + 86, 79, 76, 86, 73, 78, 199, 82, 69, 86, 79, 76, 85, 84, 73, 79, 78, 128, + 82, 69, 86, 77, 65, 128, 82, 69, 86, 73, 65, 128, 82, 69, 86, 69, 82, 83, + 69, 68, 45, 83, 67, 72, 87, 65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 128, + 82, 69, 86, 69, 82, 83, 69, 196, 82, 69, 86, 69, 82, 83, 197, 82, 69, 85, + 88, 128, 82, 69, 85, 128, 82, 69, 84, 85, 82, 78, 128, 82, 69, 84, 85, + 82, 206, 82, 69, 84, 82, 79, 70, 76, 69, 216, 82, 69, 84, 82, 69, 65, 84, + 128, 82, 69, 84, 79, 82, 84, 128, 82, 69, 83, 85, 80, 73, 78, 85, 83, + 128, 82, 69, 83, 84, 82, 79, 79, 77, 128, 82, 69, 83, 84, 82, 73, 67, 84, + 69, 196, 82, 69, 83, 84, 128, 82, 69, 83, 80, 79, 78, 83, 69, 128, 82, + 69, 83, 79, 85, 82, 67, 69, 128, 82, 69, 83, 79, 76, 85, 84, 73, 79, 78, + 128, 82, 69, 83, 73, 83, 84, 65, 78, 67, 69, 128, 82, 69, 83, 73, 68, 69, + 78, 67, 69, 128, 82, 69, 83, 200, 82, 69, 82, 69, 78, 71, 71, 65, 78, + 128, 82, 69, 82, 69, 75, 65, 78, 128, 82, 69, 80, 82, 69, 83, 69, 78, 84, + 128, 82, 69, 80, 76, 65, 67, 69, 77, 69, 78, 212, 82, 69, 80, 72, 128, + 82, 69, 80, 69, 84, 73, 84, 73, 79, 206, 82, 69, 80, 69, 65, 84, 69, 196, + 82, 69, 80, 69, 65, 84, 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 89, + 65, 128, 82, 69, 80, 65, 128, 82, 69, 80, 193, 82, 69, 78, 84, 79, 71, + 69, 78, 128, 82, 69, 78, 128, 82, 69, 206, 82, 69, 77, 85, 128, 82, 69, + 77, 73, 78, 68, 69, 210, 82, 69, 77, 69, 68, 89, 128, 82, 69, 76, 73, 71, + 73, 79, 78, 128, 82, 69, 76, 73, 69, 86, 69, 196, 82, 69, 76, 69, 65, 83, + 69, 128, 82, 69, 76, 65, 88, 69, 68, 128, 82, 69, 76, 65, 84, 73, 79, 78, + 65, 204, 82, 69, 76, 65, 84, 73, 79, 78, 128, 82, 69, 76, 65, 65, 128, + 82, 69, 74, 65, 78, 199, 82, 69, 73, 196, 82, 69, 73, 128, 82, 69, 71, + 85, 76, 85, 83, 45, 52, 128, 82, 69, 71, 85, 76, 85, 83, 45, 51, 128, 82, + 69, 71, 85, 76, 85, 83, 45, 50, 128, 82, 69, 71, 85, 76, 85, 83, 128, 82, + 69, 71, 85, 76, 85, 211, 82, 69, 71, 73, 83, 84, 69, 82, 69, 196, 82, 69, + 71, 73, 79, 78, 65, 204, 82, 69, 71, 73, 65, 45, 50, 128, 82, 69, 71, 73, + 65, 128, 82, 69, 70, 79, 82, 77, 69, 196, 82, 69, 70, 69, 82, 69, 78, 67, + 197, 82, 69, 68, 85, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 82, 69, 67, + 89, 67, 76, 73, 78, 199, 82, 69, 67, 89, 67, 76, 69, 196, 82, 69, 67, 84, + 73, 76, 73, 78, 69, 65, 210, 82, 69, 67, 84, 65, 78, 71, 85, 76, 65, 210, + 82, 69, 67, 84, 65, 78, 71, 76, 69, 128, 82, 69, 67, 84, 65, 78, 71, 76, + 197, 82, 69, 67, 82, 69, 65, 84, 73, 79, 78, 65, 204, 82, 69, 67, 79, 82, + 68, 73, 78, 199, 82, 69, 67, 79, 82, 68, 69, 82, 128, 82, 69, 67, 79, 82, + 68, 128, 82, 69, 67, 79, 82, 196, 82, 69, 67, 73, 84, 65, 84, 73, 86, + 197, 82, 69, 67, 69, 80, 84, 73, 86, 197, 82, 69, 67, 69, 73, 86, 69, 82, + 128, 82, 69, 67, 69, 73, 86, 69, 210, 82, 69, 65, 76, 71, 65, 82, 45, 50, + 128, 82, 69, 65, 76, 71, 65, 82, 128, 82, 69, 65, 72, 77, 85, 75, 128, + 82, 69, 65, 67, 72, 128, 82, 68, 207, 82, 68, 69, 204, 82, 66, 65, 83, + 193, 82, 65, 89, 83, 128, 82, 65, 89, 211, 82, 65, 89, 65, 78, 78, 65, + 128, 82, 65, 84, 73, 79, 128, 82, 65, 84, 72, 65, 128, 82, 65, 84, 72, + 193, 82, 65, 84, 65, 128, 82, 65, 84, 128, 82, 65, 83, 87, 65, 68, 73, + 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 81, 128, + 82, 65, 80, 73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 65, + 128, 82, 65, 78, 128, 82, 65, 77, 211, 82, 65, 77, 66, 65, 84, 128, 82, + 65, 75, 72, 65, 78, 71, 128, 82, 65, 75, 65, 65, 82, 65, 65, 78, 83, 65, + 89, 65, 128, 82, 65, 73, 83, 73, 78, 199, 82, 65, 73, 83, 69, 196, 82, + 65, 73, 78, 66, 79, 87, 128, 82, 65, 73, 76, 87, 65, 89, 128, 82, 65, 73, + 76, 87, 65, 217, 82, 65, 73, 76, 128, 82, 65, 73, 68, 207, 82, 65, 73, + 68, 65, 128, 82, 65, 72, 77, 65, 84, 85, 76, 76, 65, 200, 82, 65, 72, + 128, 82, 65, 70, 69, 128, 82, 65, 69, 77, 128, 82, 65, 68, 73, 79, 65, + 67, 84, 73, 86, 197, 82, 65, 68, 73, 79, 128, 82, 65, 68, 73, 207, 82, + 65, 68, 201, 82, 65, 68, 128, 82, 65, 196, 82, 65, 67, 81, 85, 69, 212, + 82, 65, 67, 73, 78, 71, 128, 82, 65, 67, 73, 78, 199, 82, 65, 66, 66, 73, + 84, 128, 82, 65, 66, 66, 73, 212, 82, 65, 66, 128, 82, 65, 65, 73, 128, + 82, 65, 51, 128, 82, 65, 50, 128, 82, 65, 45, 50, 128, 82, 48, 50, 57, + 128, 82, 48, 50, 56, 128, 82, 48, 50, 55, 128, 82, 48, 50, 54, 128, 82, + 48, 50, 53, 128, 82, 48, 50, 52, 128, 82, 48, 50, 51, 128, 82, 48, 50, + 50, 128, 82, 48, 50, 49, 128, 82, 48, 50, 48, 128, 82, 48, 49, 57, 128, + 82, 48, 49, 56, 128, 82, 48, 49, 55, 128, 82, 48, 49, 54, 65, 128, 82, + 48, 49, 54, 128, 82, 48, 49, 53, 128, 82, 48, 49, 52, 128, 82, 48, 49, + 51, 128, 82, 48, 49, 50, 128, 82, 48, 49, 49, 128, 82, 48, 49, 48, 65, + 128, 82, 48, 49, 48, 128, 82, 48, 48, 57, 128, 82, 48, 48, 56, 128, 82, + 48, 48, 55, 128, 82, 48, 48, 54, 128, 82, 48, 48, 53, 128, 82, 48, 48, + 52, 128, 82, 48, 48, 51, 66, 128, 82, 48, 48, 51, 65, 128, 82, 48, 48, + 51, 128, 82, 48, 48, 50, 65, 128, 82, 48, 48, 50, 128, 82, 48, 48, 49, + 128, 82, 45, 67, 82, 69, 197, 81, 89, 88, 128, 81, 89, 85, 128, 81, 89, + 84, 128, 81, 89, 82, 88, 128, 81, 89, 82, 128, 81, 89, 80, 128, 81, 89, + 79, 128, 81, 89, 73, 128, 81, 89, 69, 69, 128, 81, 89, 69, 128, 81, 89, + 65, 65, 128, 81, 89, 65, 128, 81, 89, 128, 81, 87, 73, 128, 81, 87, 69, + 69, 128, 81, 87, 69, 128, 81, 87, 65, 65, 128, 81, 87, 65, 128, 81, 85, + 88, 128, 81, 85, 86, 128, 81, 85, 85, 86, 128, 81, 85, 85, 128, 81, 85, + 84, 128, 81, 85, 83, 72, 83, 72, 65, 89, 65, 128, 81, 85, 82, 88, 128, + 81, 85, 82, 128, 81, 85, 80, 128, 81, 85, 79, 88, 128, 81, 85, 79, 84, + 197, 81, 85, 79, 84, 65, 84, 73, 79, 206, 81, 85, 79, 84, 128, 81, 85, + 79, 80, 128, 81, 85, 79, 128, 81, 85, 75, 128, 81, 85, 73, 78, 84, 69, + 83, 83, 69, 78, 67, 69, 128, 81, 85, 73, 78, 68, 73, 67, 69, 83, 73, 77, + 193, 81, 85, 73, 78, 67, 85, 78, 88, 128, 81, 85, 73, 78, 65, 82, 73, 85, + 211, 81, 85, 73, 76, 212, 81, 85, 73, 76, 76, 128, 81, 85, 73, 67, 203, + 81, 85, 73, 128, 81, 85, 70, 128, 81, 85, 69, 83, 84, 73, 79, 78, 69, + 196, 81, 85, 69, 83, 84, 73, 79, 78, 128, 81, 85, 69, 83, 84, 73, 79, + 206, 81, 85, 69, 69, 78, 128, 81, 85, 69, 69, 206, 81, 85, 69, 128, 81, + 85, 66, 85, 84, 83, 128, 81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, 85, + 65, 82, 84, 69, 82, 83, 128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, 65, + 82, 84, 69, 82, 128, 81, 85, 65, 78, 84, 73, 84, 217, 81, 85, 65, 68, 82, + 85, 80, 76, 197, 81, 85, 65, 68, 82, 65, 78, 84, 128, 81, 85, 65, 68, 82, + 65, 78, 212, 81, 85, 65, 68, 67, 79, 76, 79, 78, 128, 81, 85, 65, 68, + 128, 81, 85, 65, 196, 81, 85, 65, 128, 81, 85, 128, 81, 208, 81, 79, 88, + 128, 81, 79, 84, 128, 81, 79, 80, 72, 128, 81, 79, 80, 65, 128, 81, 79, + 80, 128, 81, 79, 79, 128, 81, 79, 207, 81, 79, 70, 128, 81, 79, 198, 81, + 79, 65, 128, 81, 79, 128, 81, 78, 128, 81, 73, 88, 128, 81, 73, 84, 83, + 65, 128, 81, 73, 84, 128, 81, 73, 80, 128, 81, 73, 73, 128, 81, 73, 70, + 128, 81, 73, 69, 88, 128, 81, 73, 69, 84, 128, 81, 73, 69, 80, 128, 81, + 73, 69, 128, 81, 73, 128, 81, 72, 87, 73, 128, 81, 72, 87, 69, 69, 128, + 81, 72, 87, 69, 128, 81, 72, 87, 65, 65, 128, 81, 72, 87, 65, 128, 81, + 72, 85, 128, 81, 72, 79, 80, 72, 128, 81, 72, 79, 128, 81, 72, 73, 128, + 81, 72, 69, 69, 128, 81, 72, 69, 128, 81, 72, 65, 85, 128, 81, 72, 65, + 65, 128, 81, 72, 65, 128, 81, 71, 65, 128, 81, 69, 84, 65, 78, 65, 128, + 81, 69, 69, 128, 81, 69, 128, 81, 65, 89, 128, 81, 65, 85, 128, 81, 65, + 84, 65, 78, 128, 81, 65, 82, 78, 69, 217, 81, 65, 82, 128, 81, 65, 81, + 128, 81, 65, 80, 72, 128, 81, 65, 77, 65, 84, 83, 128, 81, 65, 77, 65, + 84, 211, 81, 65, 76, 193, 81, 65, 73, 82, 84, 72, 82, 65, 128, 81, 65, + 73, 128, 81, 65, 70, 128, 81, 65, 198, 81, 65, 68, 77, 65, 128, 81, 65, + 65, 73, 128, 81, 65, 65, 70, 85, 128, 81, 65, 65, 70, 128, 81, 48, 48, + 55, 128, 81, 48, 48, 54, 128, 81, 48, 48, 53, 128, 81, 48, 48, 52, 128, + 81, 48, 48, 51, 128, 81, 48, 48, 50, 128, 81, 48, 48, 49, 128, 80, 90, + 128, 80, 89, 88, 128, 80, 89, 84, 128, 80, 89, 82, 88, 128, 80, 89, 82, + 128, 80, 89, 80, 128, 80, 87, 79, 89, 128, 80, 87, 79, 79, 128, 80, 87, + 79, 128, 80, 87, 207, 80, 87, 73, 73, 128, 80, 87, 73, 128, 80, 87, 69, + 69, 128, 80, 87, 69, 128, 80, 87, 65, 65, 128, 80, 87, 128, 80, 86, 128, + 80, 85, 88, 128, 80, 85, 85, 84, 128, 80, 85, 85, 128, 80, 85, 84, 82, + 69, 70, 65, 67, 84, 73, 79, 78, 128, 80, 85, 84, 128, 80, 85, 212, 80, + 85, 83, 72, 80, 73, 78, 128, 80, 85, 83, 72, 80, 73, 75, 65, 128, 80, 85, + 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, 80, 85, 82, 83, 69, 128, 80, + 85, 82, 80, 76, 197, 80, 85, 82, 78, 65, 77, 65, 128, 80, 85, 82, 73, 84, + 89, 128, 80, 85, 82, 73, 70, 89, 128, 80, 85, 82, 128, 80, 85, 81, 128, + 80, 85, 80, 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, + 128, 80, 85, 78, 71, 65, 65, 77, 128, 80, 85, 78, 71, 128, 80, 85, 78, + 67, 84, 85, 65, 84, 73, 79, 78, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, + 79, 206, 80, 85, 77, 80, 128, 80, 85, 77, 128, 80, 85, 70, 70, 69, 68, + 128, 80, 85, 69, 128, 80, 85, 67, 75, 128, 80, 85, 66, 76, 73, 195, 80, + 85, 194, 80, 85, 65, 81, 128, 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, + 85, 49, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, 128, 80, + 83, 73, 76, 201, 80, 83, 73, 70, 73, 83, 84, 79, 83, 89, 78, 65, 71, 77, + 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 80, 65, 82, 65, 75, 65, 76, 69, + 83, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 206, 80, 83, 73, 70, 73, + 83, 84, 79, 76, 89, 71, 73, 83, 77, 65, 128, 80, 83, 73, 128, 80, 83, 65, + 76, 84, 69, 210, 80, 83, 128, 80, 82, 79, 86, 69, 128, 80, 82, 79, 84, + 79, 86, 65, 82, 89, 211, 80, 82, 79, 84, 79, 211, 80, 82, 79, 84, 69, 67, + 84, 69, 196, 80, 82, 79, 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, + 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 65, 204, 80, 82, 79, 80, 79, 82, + 84, 73, 79, 78, 128, 80, 82, 79, 80, 69, 82, 84, 217, 80, 82, 79, 80, 69, + 76, 76, 69, 210, 80, 82, 79, 79, 70, 128, 80, 82, 79, 76, 79, 78, 71, 69, + 196, 80, 82, 79, 76, 65, 84, 73, 79, 78, 197, 80, 82, 79, 74, 69, 67, 84, + 79, 82, 128, 80, 82, 79, 74, 69, 67, 84, 73, 86, 69, 128, 80, 82, 79, 74, + 69, 67, 84, 73, 79, 78, 128, 80, 82, 79, 72, 73, 66, 73, 84, 69, 196, 80, + 82, 79, 71, 82, 69, 83, 83, 128, 80, 82, 79, 71, 82, 65, 205, 80, 82, 79, + 70, 79, 85, 78, 68, 128, 80, 82, 79, 68, 85, 67, 84, 128, 80, 82, 79, 68, + 85, 67, 212, 80, 82, 73, 86, 65, 84, 69, 128, 80, 82, 73, 86, 65, 84, + 197, 80, 82, 73, 86, 65, 67, 217, 80, 82, 73, 83, 72, 84, 72, 65, 77, 65, + 84, 82, 193, 80, 82, 73, 78, 84, 83, 128, 80, 82, 73, 78, 84, 69, 82, + 128, 80, 82, 73, 78, 84, 69, 210, 80, 82, 73, 78, 84, 128, 80, 82, 73, + 78, 212, 80, 82, 73, 78, 67, 69, 83, 83, 128, 80, 82, 73, 78, 67, 69, + 128, 80, 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, + 79, 85, 211, 80, 82, 69, 83, 83, 69, 196, 80, 82, 69, 83, 69, 84, 128, + 80, 82, 69, 83, 69, 78, 84, 65, 84, 73, 79, 206, 80, 82, 69, 83, 67, 82, + 73, 80, 84, 73, 79, 206, 80, 82, 69, 80, 79, 78, 68, 69, 82, 65, 78, 67, + 69, 128, 80, 82, 69, 78, 75, 72, 65, 128, 80, 82, 69, 71, 78, 65, 78, + 212, 80, 82, 69, 70, 65, 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, + 69, 128, 80, 82, 69, 67, 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, + 83, 128, 80, 82, 69, 67, 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, + 196, 80, 82, 69, 67, 69, 68, 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, + 82, 65, 89, 69, 210, 80, 82, 65, 77, 45, 80, 73, 73, 128, 80, 82, 65, 77, + 45, 80, 73, 201, 80, 82, 65, 77, 45, 77, 85, 79, 89, 128, 80, 82, 65, 77, + 45, 77, 85, 79, 217, 80, 82, 65, 77, 45, 66, 85, 79, 78, 128, 80, 82, 65, + 77, 45, 66, 85, 79, 206, 80, 82, 65, 77, 45, 66, 69, 73, 128, 80, 82, 65, + 77, 45, 66, 69, 201, 80, 82, 65, 77, 128, 80, 82, 65, 205, 80, 82, 128, + 80, 80, 86, 128, 80, 80, 77, 128, 80, 80, 65, 128, 80, 79, 89, 128, 80, + 79, 88, 128, 80, 79, 87, 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, + 87, 69, 210, 80, 79, 87, 68, 69, 82, 69, 196, 80, 79, 87, 68, 69, 82, + 128, 80, 79, 85, 78, 196, 80, 79, 85, 76, 84, 82, 217, 80, 79, 85, 67, + 72, 128, 80, 79, 84, 65, 84, 79, 128, 80, 79, 84, 65, 66, 76, 197, 80, + 79, 212, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, + 66, 79, 88, 128, 80, 79, 83, 84, 65, 204, 80, 79, 83, 84, 128, 80, 79, + 83, 212, 80, 79, 83, 83, 69, 83, 83, 73, 79, 78, 128, 80, 79, 83, 73, 84, + 73, 79, 78, 83, 128, 80, 79, 82, 84, 65, 66, 76, 197, 80, 79, 82, 82, 69, + 67, 84, 85, 83, 128, 80, 79, 82, 82, 69, 67, 84, 85, 211, 80, 79, 80, 80, + 73, 78, 199, 80, 79, 80, 80, 69, 82, 128, 80, 79, 80, 67, 79, 82, 78, + 128, 80, 79, 80, 128, 80, 79, 208, 80, 79, 79, 68, 76, 69, 128, 80, 79, + 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 206, 80, 79, 77, 77, 69, 69, + 128, 80, 79, 77, 77, 69, 197, 80, 79, 76, 79, 128, 80, 79, 76, 73, 83, 72, 128, 80, 79, 76, 73, 67, 197, 80, 79, 76, 201, 80, 79, 76, 69, 128, 80, 79, 76, 197, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, 80, 79, 73, 78, 84, 211, 80, 79, 73, 78, 84, 79, 128, 80, 79, @@ -1691,76 +1705,78 @@ static unsigned char lexicon[] = { 80, 69, 82, 70, 69, 67, 84, 193, 80, 69, 82, 67, 85, 83, 83, 73, 86, 69, 128, 80, 69, 82, 67, 69, 78, 212, 80, 69, 80, 80, 69, 82, 128, 80, 69, 80, 69, 84, 128, 80, 69, 80, 69, 212, 80, 69, 79, 82, 84, 200, 80, 69, - 79, 80, 76, 69, 128, 80, 69, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, - 84, 65, 71, 82, 65, 77, 128, 80, 69, 78, 84, 65, 71, 79, 78, 128, 80, 69, - 78, 83, 85, 128, 80, 69, 78, 83, 73, 86, 197, 80, 69, 78, 78, 217, 80, - 69, 78, 78, 65, 78, 84, 128, 80, 69, 78, 73, 72, 73, 128, 80, 69, 78, 71, - 85, 73, 78, 128, 80, 69, 78, 71, 75, 65, 76, 128, 80, 69, 78, 69, 84, 82, - 65, 84, 73, 79, 78, 128, 80, 69, 78, 67, 73, 76, 128, 80, 69, 76, 65, 83, - 84, 79, 78, 128, 80, 69, 76, 65, 83, 84, 79, 206, 80, 69, 73, 84, 72, - 128, 80, 69, 72, 69, 72, 128, 80, 69, 72, 69, 200, 80, 69, 72, 128, 80, - 69, 200, 80, 69, 69, 90, 73, 128, 80, 69, 69, 83, 72, 73, 128, 80, 69, - 69, 80, 128, 80, 69, 69, 77, 128, 80, 69, 69, 73, 128, 80, 69, 69, 128, - 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 83, 128, 80, 69, 68, 69, 83, 84, - 82, 73, 65, 78, 128, 80, 69, 68, 69, 83, 84, 65, 76, 128, 80, 69, 68, 69, - 83, 84, 65, 204, 80, 69, 68, 65, 204, 80, 69, 65, 75, 211, 80, 69, 65, - 67, 72, 128, 80, 69, 65, 67, 69, 128, 80, 69, 65, 67, 197, 80, 68, 73, - 128, 80, 68, 70, 128, 80, 68, 128, 80, 67, 128, 80, 65, 90, 69, 82, 128, - 80, 65, 89, 69, 82, 79, 75, 128, 80, 65, 89, 65, 78, 78, 65, 128, 80, 65, - 89, 128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 215, 80, 65, 86, - 73, 89, 65, 78, 73, 128, 80, 65, 85, 128, 80, 65, 213, 80, 65, 84, 84, - 69, 82, 78, 128, 80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, - 200, 80, 65, 84, 65, 75, 128, 80, 65, 84, 65, 72, 128, 80, 65, 84, 128, - 80, 65, 83, 85, 81, 128, 80, 65, 83, 83, 80, 79, 82, 212, 80, 65, 83, 83, - 73, 86, 69, 45, 80, 85, 76, 76, 45, 85, 80, 45, 79, 85, 84, 80, 85, 212, - 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, 76, 76, 45, 68, 79, 87, 78, 45, - 79, 85, 84, 80, 85, 212, 80, 65, 83, 83, 69, 78, 71, 69, 210, 80, 65, 83, - 72, 84, 65, 128, 80, 65, 83, 72, 65, 69, 128, 80, 65, 83, 69, 81, 128, - 80, 65, 83, 65, 78, 71, 65, 206, 80, 65, 82, 85, 77, 128, 80, 65, 82, 84, - 217, 80, 65, 82, 84, 78, 69, 82, 83, 72, 73, 208, 80, 65, 82, 84, 73, 65, - 76, 76, 89, 45, 82, 69, 67, 89, 67, 76, 69, 196, 80, 65, 82, 84, 73, 65, - 204, 80, 65, 82, 84, 72, 73, 65, 206, 80, 65, 82, 212, 80, 65, 82, 75, - 128, 80, 65, 82, 73, 67, 72, 79, 78, 128, 80, 65, 82, 69, 83, 84, 73, 71, - 77, 69, 78, 79, 206, 80, 65, 82, 69, 82, 69, 78, 128, 80, 65, 82, 69, 78, - 84, 72, 69, 83, 73, 83, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 211, - 80, 65, 82, 69, 78, 84, 72, 69, 83, 69, 211, 80, 65, 82, 65, 80, 72, 82, - 65, 83, 197, 80, 65, 82, 65, 76, 76, 69, 76, 79, 71, 82, 65, 77, 128, 80, - 65, 82, 65, 76, 76, 69, 76, 128, 80, 65, 82, 65, 76, 76, 69, 204, 80, 65, - 82, 65, 75, 76, 73, 84, 73, 75, 73, 128, 80, 65, 82, 65, 75, 76, 73, 84, - 73, 75, 201, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 193, 80, 65, 82, 65, - 71, 82, 65, 80, 72, 79, 83, 128, 80, 65, 82, 65, 71, 82, 65, 80, 72, 128, - 80, 65, 82, 65, 71, 82, 65, 80, 200, 80, 65, 82, 65, 128, 80, 65, 82, - 128, 80, 65, 80, 89, 82, 85, 83, 128, 80, 65, 80, 69, 82, 67, 76, 73, 80, - 83, 128, 80, 65, 80, 69, 82, 67, 76, 73, 80, 128, 80, 65, 80, 69, 210, - 80, 65, 80, 128, 80, 65, 208, 80, 65, 207, 80, 65, 78, 89, 85, 75, 85, - 128, 80, 65, 78, 89, 73, 75, 85, 128, 80, 65, 78, 89, 69, 67, 69, 75, - 128, 80, 65, 78, 89, 65, 78, 71, 71, 65, 128, 80, 65, 78, 89, 65, 75, 82, - 65, 128, 80, 65, 78, 84, 73, 128, 80, 65, 78, 83, 73, 79, 83, 45, 80, 73, - 69, 85, 80, 128, 80, 65, 78, 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, - 85, 78, 80, 73, 69, 85, 80, 128, 80, 65, 78, 79, 78, 71, 79, 78, 65, 78, - 128, 80, 65, 78, 79, 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, - 68, 128, 80, 65, 78, 71, 82, 65, 78, 71, 75, 69, 80, 128, 80, 65, 78, 71, - 79, 76, 65, 84, 128, 80, 65, 78, 71, 76, 79, 78, 71, 128, 80, 65, 78, 71, - 76, 65, 89, 65, 82, 128, 80, 65, 78, 71, 75, 79, 78, 128, 80, 65, 78, 71, - 75, 65, 84, 128, 80, 65, 78, 71, 72, 85, 76, 85, 128, 80, 65, 78, 71, + 79, 80, 76, 69, 128, 80, 69, 78, 84, 65, 84, 72, 76, 79, 78, 128, 80, 69, + 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, 84, 65, 71, 82, 65, 77, 128, + 80, 69, 78, 84, 65, 71, 79, 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, + 83, 73, 86, 197, 80, 69, 78, 78, 217, 80, 69, 78, 78, 65, 78, 84, 128, + 80, 69, 78, 73, 72, 73, 128, 80, 69, 78, 71, 85, 73, 78, 128, 80, 69, 78, + 71, 75, 65, 76, 128, 80, 69, 78, 69, 84, 82, 65, 84, 73, 79, 78, 128, 80, + 69, 78, 67, 73, 76, 128, 80, 69, 76, 65, 83, 84, 79, 78, 128, 80, 69, 76, + 65, 83, 84, 79, 206, 80, 69, 73, 84, 72, 128, 80, 69, 72, 69, 72, 128, + 80, 69, 72, 69, 200, 80, 69, 72, 128, 80, 69, 200, 80, 69, 69, 90, 73, + 128, 80, 69, 69, 83, 72, 73, 128, 80, 69, 69, 80, 128, 80, 69, 69, 77, + 128, 80, 69, 69, 73, 128, 80, 69, 69, 128, 80, 69, 68, 69, 83, 84, 82, + 73, 65, 78, 83, 128, 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 128, 80, 69, + 68, 69, 83, 84, 65, 76, 128, 80, 69, 68, 69, 83, 84, 65, 204, 80, 69, 68, + 65, 204, 80, 69, 65, 78, 85, 84, 83, 128, 80, 69, 65, 75, 211, 80, 69, + 65, 67, 72, 128, 80, 69, 65, 67, 69, 128, 80, 69, 65, 67, 197, 80, 68, + 73, 128, 80, 68, 70, 128, 80, 68, 128, 80, 67, 128, 80, 65, 90, 69, 82, + 128, 80, 65, 89, 69, 82, 79, 75, 128, 80, 65, 89, 65, 78, 78, 65, 128, + 80, 65, 89, 128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 215, 80, + 65, 86, 73, 89, 65, 78, 73, 128, 80, 65, 85, 128, 80, 65, 213, 80, 65, + 84, 84, 69, 82, 78, 128, 80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, + 65, 84, 200, 80, 65, 84, 65, 75, 128, 80, 65, 84, 65, 72, 128, 80, 65, + 84, 128, 80, 65, 83, 85, 81, 128, 80, 65, 83, 83, 80, 79, 82, 212, 80, + 65, 83, 83, 73, 86, 69, 45, 80, 85, 76, 76, 45, 85, 80, 45, 79, 85, 84, + 80, 85, 212, 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, 76, 76, 45, 68, 79, + 87, 78, 45, 79, 85, 84, 80, 85, 212, 80, 65, 83, 83, 69, 78, 71, 69, 210, + 80, 65, 83, 72, 84, 65, 128, 80, 65, 83, 72, 65, 69, 128, 80, 65, 83, 69, + 81, 128, 80, 65, 83, 65, 78, 71, 65, 206, 80, 65, 82, 85, 77, 128, 80, + 65, 82, 84, 217, 80, 65, 82, 84, 78, 69, 82, 83, 72, 73, 208, 80, 65, 82, + 84, 73, 65, 76, 76, 89, 45, 82, 69, 67, 89, 67, 76, 69, 196, 80, 65, 82, + 84, 73, 65, 204, 80, 65, 82, 84, 72, 73, 65, 206, 80, 65, 82, 212, 80, + 65, 82, 75, 128, 80, 65, 82, 73, 67, 72, 79, 78, 128, 80, 65, 82, 69, 83, + 84, 73, 71, 77, 69, 78, 79, 206, 80, 65, 82, 69, 82, 69, 78, 128, 80, 65, + 82, 69, 78, 84, 72, 69, 83, 73, 83, 128, 80, 65, 82, 69, 78, 84, 72, 69, + 83, 73, 211, 80, 65, 82, 69, 78, 84, 72, 69, 83, 69, 211, 80, 65, 82, 65, + 80, 72, 82, 65, 83, 197, 80, 65, 82, 65, 76, 76, 69, 76, 79, 71, 82, 65, + 77, 128, 80, 65, 82, 65, 76, 76, 69, 76, 128, 80, 65, 82, 65, 76, 76, 69, + 204, 80, 65, 82, 65, 75, 76, 73, 84, 73, 75, 73, 128, 80, 65, 82, 65, 75, + 76, 73, 84, 73, 75, 201, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 193, 80, + 65, 82, 65, 71, 82, 65, 80, 72, 79, 83, 128, 80, 65, 82, 65, 71, 82, 65, + 80, 72, 128, 80, 65, 82, 65, 71, 82, 65, 80, 200, 80, 65, 82, 65, 128, + 80, 65, 82, 128, 80, 65, 80, 89, 82, 85, 83, 128, 80, 65, 80, 69, 82, 67, + 76, 73, 80, 83, 128, 80, 65, 80, 69, 82, 67, 76, 73, 80, 128, 80, 65, 80, + 69, 210, 80, 65, 80, 128, 80, 65, 208, 80, 65, 207, 80, 65, 78, 89, 85, + 75, 85, 128, 80, 65, 78, 89, 73, 75, 85, 128, 80, 65, 78, 89, 69, 67, 69, + 75, 128, 80, 65, 78, 89, 65, 78, 71, 71, 65, 128, 80, 65, 78, 89, 65, 75, + 82, 65, 128, 80, 65, 78, 84, 73, 128, 80, 65, 78, 83, 73, 79, 83, 45, 80, + 73, 69, 85, 80, 128, 80, 65, 78, 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, + 79, 85, 78, 80, 73, 69, 85, 80, 128, 80, 65, 78, 79, 78, 71, 79, 78, 65, + 78, 128, 80, 65, 78, 79, 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, + 65, 68, 128, 80, 65, 78, 71, 82, 65, 78, 71, 75, 69, 80, 128, 80, 65, 78, + 71, 79, 76, 65, 84, 128, 80, 65, 78, 71, 76, 79, 78, 71, 128, 80, 65, 78, + 71, 76, 65, 89, 65, 82, 128, 80, 65, 78, 71, 75, 79, 78, 128, 80, 65, 78, + 71, 75, 65, 84, 128, 80, 65, 78, 71, 72, 85, 76, 85, 128, 80, 65, 78, 71, 128, 80, 65, 78, 69, 85, 76, 69, 85, 78, 71, 128, 80, 65, 78, 68, 193, - 80, 65, 78, 65, 69, 76, 65, 69, 78, 71, 128, 80, 65, 78, 128, 80, 65, 77, - 85, 78, 71, 75, 65, 72, 128, 80, 65, 77, 85, 68, 80, 79, 68, 128, 80, 65, - 77, 83, 72, 65, 69, 128, 80, 65, 77, 80, 72, 89, 76, 73, 65, 206, 80, 65, - 77, 73, 78, 71, 75, 65, 76, 128, 80, 65, 77, 69, 80, 69, 84, 128, 80, 65, - 77, 69, 78, 69, 78, 71, 128, 80, 65, 77, 65, 68, 65, 128, 80, 65, 77, 65, - 65, 69, 72, 128, 80, 65, 76, 85, 84, 65, 128, 80, 65, 76, 79, 67, 72, 75, - 65, 128, 80, 65, 76, 77, 89, 82, 69, 78, 197, 80, 65, 76, 205, 80, 65, - 76, 76, 65, 87, 65, 128, 80, 65, 76, 76, 65, 83, 128, 80, 65, 76, 69, 84, - 84, 69, 128, 80, 65, 76, 65, 85, 78, 199, 80, 65, 76, 65, 84, 65, 76, 73, - 90, 69, 196, 80, 65, 76, 65, 84, 65, 76, 73, 90, 65, 84, 73, 79, 78, 128, - 80, 65, 76, 65, 84, 65, 204, 80, 65, 75, 80, 65, 203, 80, 65, 73, 89, 65, - 78, 78, 79, 73, 128, 80, 65, 73, 82, 84, 72, 82, 65, 128, 80, 65, 73, 82, - 69, 196, 80, 65, 73, 78, 84, 66, 82, 85, 83, 72, 128, 80, 65, 73, 128, - 80, 65, 72, 76, 65, 86, 201, 80, 65, 72, 128, 80, 65, 71, 69, 83, 128, - 80, 65, 71, 69, 82, 128, 80, 65, 71, 197, 80, 65, 68, 77, 193, 80, 65, - 68, 68, 76, 197, 80, 65, 68, 68, 73, 78, 199, 80, 65, 68, 193, 80, 65, - 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 67, 75, 65, 71, 69, + 80, 65, 78, 67, 65, 75, 69, 83, 128, 80, 65, 78, 65, 69, 76, 65, 69, 78, + 71, 128, 80, 65, 78, 128, 80, 65, 206, 80, 65, 77, 85, 78, 71, 75, 65, + 72, 128, 80, 65, 77, 85, 68, 80, 79, 68, 128, 80, 65, 77, 83, 72, 65, 69, + 128, 80, 65, 77, 80, 72, 89, 76, 73, 65, 206, 80, 65, 77, 73, 78, 71, 75, + 65, 76, 128, 80, 65, 77, 69, 80, 69, 84, 128, 80, 65, 77, 69, 78, 69, 78, + 71, 128, 80, 65, 77, 65, 68, 65, 128, 80, 65, 77, 65, 65, 69, 72, 128, + 80, 65, 76, 85, 84, 65, 128, 80, 65, 76, 79, 67, 72, 75, 65, 128, 80, 65, + 76, 77, 89, 82, 69, 78, 197, 80, 65, 76, 77, 128, 80, 65, 76, 205, 80, + 65, 76, 76, 65, 87, 65, 128, 80, 65, 76, 76, 65, 83, 128, 80, 65, 76, 69, + 84, 84, 69, 128, 80, 65, 76, 65, 85, 78, 199, 80, 65, 76, 65, 84, 65, 76, + 73, 90, 69, 196, 80, 65, 76, 65, 84, 65, 76, 73, 90, 65, 84, 73, 79, 78, + 128, 80, 65, 76, 65, 84, 65, 204, 80, 65, 75, 80, 65, 203, 80, 65, 73, + 89, 65, 78, 78, 79, 73, 128, 80, 65, 73, 82, 84, 72, 82, 65, 128, 80, 65, + 73, 82, 69, 196, 80, 65, 73, 78, 84, 66, 82, 85, 83, 72, 128, 80, 65, 73, + 128, 80, 65, 72, 76, 65, 86, 201, 80, 65, 72, 128, 80, 65, 71, 69, 83, + 128, 80, 65, 71, 69, 82, 128, 80, 65, 71, 197, 80, 65, 68, 77, 193, 80, + 65, 68, 68, 76, 197, 80, 65, 68, 68, 73, 78, 199, 80, 65, 68, 193, 80, + 65, 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 67, 75, 65, 71, 69, 128, 80, 65, 65, 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 128, 80, 65, 65, 82, 65, 69, 128, 80, 65, 65, 77, 128, 80, 65, 65, 73, 128, 80, 65, 65, 45, 80, 73, 76, 76, 65, 128, 80, 65, 65, 128, 80, 50, 128, 80, @@ -1770,464 +1786,471 @@ static unsigned char lexicon[] = { 48, 48, 50, 128, 80, 48, 48, 49, 65, 128, 80, 48, 48, 49, 128, 79, 89, 82, 65, 78, 73, 83, 77, 193, 79, 89, 65, 78, 78, 65, 128, 79, 88, 73, 65, 128, 79, 88, 73, 193, 79, 88, 69, 73, 65, 201, 79, 88, 69, 73, 193, 79, - 86, 69, 82, 82, 73, 68, 69, 128, 79, 86, 69, 82, 76, 79, 78, 199, 79, 86, - 69, 82, 76, 73, 78, 69, 128, 79, 86, 69, 82, 76, 65, 89, 128, 79, 86, 69, - 82, 76, 65, 80, 80, 73, 78, 199, 79, 86, 69, 82, 76, 65, 80, 128, 79, 86, - 69, 82, 76, 65, 73, 68, 128, 79, 86, 69, 82, 66, 65, 82, 128, 79, 86, 65, - 76, 128, 79, 86, 65, 204, 79, 85, 84, 76, 73, 78, 69, 196, 79, 85, 84, - 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, 79, 85, 84, 66, 79, 216, 79, - 85, 78, 75, 73, 193, 79, 85, 78, 67, 69, 128, 79, 85, 78, 67, 197, 79, - 84, 85, 128, 79, 84, 84, 65, 86, 193, 79, 84, 84, 128, 79, 84, 72, 69, - 82, 211, 79, 84, 72, 69, 210, 79, 84, 72, 65, 76, 65, 206, 79, 84, 72, - 65, 76, 128, 79, 83, 77, 65, 78, 89, 193, 79, 83, 67, 128, 79, 82, 84, - 72, 79, 71, 79, 78, 65, 204, 79, 82, 84, 72, 79, 68, 79, 216, 79, 82, 78, - 65, 84, 197, 79, 82, 78, 65, 77, 69, 78, 84, 83, 128, 79, 82, 78, 65, 77, - 69, 78, 84, 128, 79, 82, 78, 65, 77, 69, 78, 212, 79, 82, 75, 72, 79, - 206, 79, 82, 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, - 82, 69, 45, 50, 128, 79, 82, 68, 73, 78, 65, 204, 79, 82, 68, 69, 210, - 79, 82, 67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 197, 79, 80, 84, 73, 79, - 206, 79, 80, 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83, 83, 73, 79, 78, - 128, 79, 80, 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, - 78, 199, 79, 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85, 67, 72, 85, 83, - 128, 79, 80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, - 210, 79, 80, 69, 82, 65, 84, 73, 78, 199, 79, 80, 69, 78, 73, 78, 199, - 79, 80, 69, 78, 45, 80, 128, 79, 80, 69, 78, 45, 79, 85, 84, 76, 73, 78, - 69, 196, 79, 80, 69, 78, 45, 79, 128, 79, 80, 69, 78, 45, 207, 79, 80, - 69, 78, 45, 72, 69, 65, 68, 69, 196, 79, 80, 69, 78, 45, 67, 73, 82, 67, - 85, 73, 84, 45, 79, 85, 84, 80, 85, 212, 79, 80, 69, 78, 128, 79, 79, 90, - 69, 128, 79, 79, 89, 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 77, - 85, 128, 79, 79, 72, 128, 79, 79, 69, 128, 79, 79, 66, 79, 79, 70, 73, - 76, 73, 128, 79, 78, 85, 128, 79, 78, 83, 85, 128, 79, 78, 78, 128, 79, - 78, 75, 65, 82, 128, 79, 78, 69, 83, 69, 76, 70, 128, 79, 78, 69, 45, 87, - 65, 217, 79, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 79, 78, 69, 45, 76, - 73, 78, 197, 79, 78, 67, 79, 77, 73, 78, 199, 79, 78, 65, 80, 128, 79, - 77, 73, 83, 83, 73, 79, 206, 79, 77, 73, 67, 82, 79, 78, 128, 79, 77, 73, - 67, 82, 79, 206, 79, 77, 69, 71, 65, 128, 79, 77, 69, 71, 193, 79, 77, - 65, 76, 79, 78, 128, 79, 76, 73, 86, 69, 128, 79, 76, 73, 71, 79, 206, - 79, 76, 68, 128, 79, 75, 84, 207, 79, 75, 65, 82, 65, 128, 79, 75, 65, - 82, 193, 79, 74, 73, 66, 87, 65, 217, 79, 74, 69, 79, 78, 128, 79, 73, - 76, 128, 79, 73, 204, 79, 72, 77, 128, 79, 72, 205, 79, 71, 82, 69, 128, - 79, 71, 79, 78, 69, 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, - 205, 79, 70, 70, 73, 67, 69, 82, 128, 79, 70, 70, 73, 67, 69, 128, 79, - 70, 70, 73, 67, 197, 79, 70, 70, 128, 79, 69, 89, 128, 79, 69, 75, 128, - 79, 69, 69, 128, 79, 68, 69, 78, 128, 79, 68, 68, 128, 79, 68, 196, 79, - 67, 84, 79, 80, 85, 83, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 84, - 69, 212, 79, 67, 84, 65, 71, 79, 78, 128, 79, 67, 210, 79, 67, 76, 79, - 67, 75, 128, 79, 67, 67, 76, 85, 83, 73, 79, 78, 128, 79, 66, 83, 84, 82, - 85, 67, 84, 73, 79, 78, 128, 79, 66, 79, 76, 211, 79, 66, 79, 204, 79, - 66, 79, 70, 73, 76, 73, 128, 79, 66, 76, 73, 81, 85, 197, 79, 66, 74, 69, - 67, 212, 79, 66, 69, 76, 85, 83, 128, 79, 66, 69, 76, 79, 83, 128, 79, - 66, 128, 79, 65, 89, 128, 79, 65, 75, 128, 79, 65, 66, 79, 65, 70, 73, - 76, 73, 128, 79, 193, 79, 48, 53, 49, 128, 79, 48, 53, 48, 66, 128, 79, - 48, 53, 48, 65, 128, 79, 48, 53, 48, 128, 79, 48, 52, 57, 128, 79, 48, - 52, 56, 128, 79, 48, 52, 55, 128, 79, 48, 52, 54, 128, 79, 48, 52, 53, - 128, 79, 48, 52, 52, 128, 79, 48, 52, 51, 128, 79, 48, 52, 50, 128, 79, - 48, 52, 49, 128, 79, 48, 52, 48, 128, 79, 48, 51, 57, 128, 79, 48, 51, - 56, 128, 79, 48, 51, 55, 128, 79, 48, 51, 54, 68, 128, 79, 48, 51, 54, - 67, 128, 79, 48, 51, 54, 66, 128, 79, 48, 51, 54, 65, 128, 79, 48, 51, - 54, 128, 79, 48, 51, 53, 128, 79, 48, 51, 52, 128, 79, 48, 51, 51, 65, - 128, 79, 48, 51, 51, 128, 79, 48, 51, 50, 128, 79, 48, 51, 49, 128, 79, - 48, 51, 48, 65, 128, 79, 48, 51, 48, 128, 79, 48, 50, 57, 65, 128, 79, - 48, 50, 57, 128, 79, 48, 50, 56, 128, 79, 48, 50, 55, 128, 79, 48, 50, - 54, 128, 79, 48, 50, 53, 65, 128, 79, 48, 50, 53, 128, 79, 48, 50, 52, - 65, 128, 79, 48, 50, 52, 128, 79, 48, 50, 51, 128, 79, 48, 50, 50, 128, - 79, 48, 50, 49, 128, 79, 48, 50, 48, 65, 128, 79, 48, 50, 48, 128, 79, - 48, 49, 57, 65, 128, 79, 48, 49, 57, 128, 79, 48, 49, 56, 128, 79, 48, - 49, 55, 128, 79, 48, 49, 54, 128, 79, 48, 49, 53, 128, 79, 48, 49, 52, - 128, 79, 48, 49, 51, 128, 79, 48, 49, 50, 128, 79, 48, 49, 49, 128, 79, - 48, 49, 48, 67, 128, 79, 48, 49, 48, 66, 128, 79, 48, 49, 48, 65, 128, - 79, 48, 49, 48, 128, 79, 48, 48, 57, 128, 79, 48, 48, 56, 128, 79, 48, - 48, 55, 128, 79, 48, 48, 54, 70, 128, 79, 48, 48, 54, 69, 128, 79, 48, - 48, 54, 68, 128, 79, 48, 48, 54, 67, 128, 79, 48, 48, 54, 66, 128, 79, - 48, 48, 54, 65, 128, 79, 48, 48, 54, 128, 79, 48, 48, 53, 65, 128, 79, - 48, 48, 53, 128, 79, 48, 48, 52, 128, 79, 48, 48, 51, 128, 79, 48, 48, - 50, 128, 79, 48, 48, 49, 65, 128, 79, 48, 48, 49, 128, 79, 45, 89, 69, - 128, 79, 45, 79, 45, 73, 128, 79, 45, 69, 128, 78, 90, 89, 88, 128, 78, - 90, 89, 84, 128, 78, 90, 89, 82, 88, 128, 78, 90, 89, 82, 128, 78, 90, - 89, 80, 128, 78, 90, 89, 128, 78, 90, 85, 88, 128, 78, 90, 85, 82, 88, - 128, 78, 90, 85, 82, 128, 78, 90, 85, 81, 128, 78, 90, 85, 80, 128, 78, - 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 78, 90, 85, 206, 78, 90, 85, - 128, 78, 90, 79, 88, 128, 78, 90, 79, 80, 128, 78, 90, 73, 88, 128, 78, - 90, 73, 84, 128, 78, 90, 73, 80, 128, 78, 90, 73, 69, 88, 128, 78, 90, - 73, 69, 80, 128, 78, 90, 73, 69, 128, 78, 90, 73, 128, 78, 90, 69, 88, - 128, 78, 90, 69, 85, 77, 128, 78, 90, 69, 128, 78, 90, 65, 88, 128, 78, - 90, 65, 84, 128, 78, 90, 65, 81, 128, 78, 90, 65, 80, 128, 78, 90, 65, - 128, 78, 90, 193, 78, 89, 87, 65, 128, 78, 89, 85, 88, 128, 78, 89, 85, - 85, 128, 78, 89, 85, 84, 128, 78, 89, 85, 80, 128, 78, 89, 85, 79, 88, - 128, 78, 89, 85, 79, 80, 128, 78, 89, 85, 79, 128, 78, 89, 85, 78, 128, - 78, 89, 85, 69, 128, 78, 89, 85, 128, 78, 89, 79, 88, 128, 78, 89, 79, - 84, 128, 78, 89, 79, 80, 128, 78, 89, 79, 79, 128, 78, 89, 79, 78, 128, - 78, 89, 79, 65, 128, 78, 89, 79, 128, 78, 89, 74, 65, 128, 78, 89, 73, - 88, 128, 78, 89, 73, 84, 128, 78, 89, 73, 212, 78, 89, 73, 211, 78, 89, - 73, 210, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, 68, 79, 128, 78, 89, - 73, 78, 128, 78, 89, 73, 73, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, - 69, 84, 128, 78, 89, 73, 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, - 128, 78, 89, 201, 78, 89, 72, 65, 128, 78, 89, 69, 84, 128, 78, 89, 69, - 212, 78, 89, 69, 78, 128, 78, 89, 69, 72, 128, 78, 89, 69, 200, 78, 89, - 69, 69, 128, 78, 89, 69, 128, 78, 89, 196, 78, 89, 67, 65, 128, 78, 89, - 65, 85, 128, 78, 89, 65, 73, 128, 78, 89, 65, 72, 128, 78, 89, 65, 69, - 77, 65, 69, 128, 78, 89, 65, 65, 128, 78, 87, 79, 79, 128, 78, 87, 79, - 128, 78, 87, 73, 73, 128, 78, 87, 73, 128, 78, 87, 69, 128, 78, 87, 65, - 65, 128, 78, 87, 65, 128, 78, 87, 128, 78, 86, 128, 78, 85, 88, 128, 78, - 85, 85, 78, 128, 78, 85, 85, 128, 78, 85, 84, 73, 76, 76, 85, 128, 78, - 85, 84, 128, 78, 85, 212, 78, 85, 82, 88, 128, 78, 85, 82, 128, 78, 85, - 80, 128, 78, 85, 79, 88, 128, 78, 85, 79, 80, 128, 78, 85, 79, 128, 78, - 85, 78, 85, 90, 128, 78, 85, 78, 85, 218, 78, 85, 78, 71, 128, 78, 85, - 78, 65, 86, 85, 212, 78, 85, 78, 65, 86, 73, 203, 78, 85, 78, 128, 78, - 85, 206, 78, 85, 77, 69, 82, 207, 78, 85, 77, 69, 82, 65, 84, 79, 210, - 78, 85, 77, 69, 82, 65, 204, 78, 85, 77, 66, 69, 82, 83, 128, 78, 85, 77, - 66, 69, 82, 128, 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, - 78, 85, 76, 128, 78, 85, 75, 84, 65, 128, 78, 85, 69, 78, 71, 128, 78, - 85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, 65, 69, 128, 78, 85, 49, - 49, 128, 78, 85, 49, 177, 78, 85, 48, 50, 50, 65, 128, 78, 85, 48, 50, - 50, 128, 78, 85, 48, 50, 49, 128, 78, 85, 48, 50, 48, 128, 78, 85, 48, - 49, 57, 128, 78, 85, 48, 49, 56, 65, 128, 78, 85, 48, 49, 56, 128, 78, - 85, 48, 49, 55, 128, 78, 85, 48, 49, 54, 128, 78, 85, 48, 49, 53, 128, - 78, 85, 48, 49, 52, 128, 78, 85, 48, 49, 51, 128, 78, 85, 48, 49, 50, - 128, 78, 85, 48, 49, 49, 65, 128, 78, 85, 48, 49, 49, 128, 78, 85, 48, - 49, 48, 65, 128, 78, 85, 48, 49, 48, 128, 78, 85, 48, 48, 57, 128, 78, - 85, 48, 48, 56, 128, 78, 85, 48, 48, 55, 128, 78, 85, 48, 48, 54, 128, - 78, 85, 48, 48, 53, 128, 78, 85, 48, 48, 52, 128, 78, 85, 48, 48, 51, - 128, 78, 85, 48, 48, 50, 128, 78, 85, 48, 48, 49, 128, 78, 84, 88, 73, - 86, 128, 78, 84, 85, 85, 128, 78, 84, 85, 77, 128, 78, 84, 85, 74, 128, - 78, 84, 213, 78, 84, 83, 65, 85, 128, 78, 84, 79, 81, 80, 69, 78, 128, - 78, 84, 79, 71, 128, 78, 84, 79, 199, 78, 84, 73, 69, 197, 78, 84, 72, - 65, 85, 128, 78, 84, 69, 85, 78, 71, 66, 65, 128, 78, 84, 69, 85, 77, - 128, 78, 84, 69, 78, 128, 78, 84, 69, 69, 128, 78, 84, 65, 80, 128, 78, - 84, 65, 208, 78, 84, 65, 65, 128, 78, 83, 85, 79, 212, 78, 83, 85, 78, - 128, 78, 83, 85, 77, 128, 78, 83, 79, 77, 128, 78, 83, 73, 69, 69, 84, - 128, 78, 83, 73, 69, 69, 80, 128, 78, 83, 73, 69, 69, 128, 78, 83, 72, - 85, 84, 128, 78, 83, 72, 85, 212, 78, 83, 72, 85, 79, 80, 128, 78, 83, - 72, 85, 69, 128, 78, 83, 72, 73, 69, 69, 128, 78, 83, 72, 69, 69, 128, - 78, 83, 72, 65, 81, 128, 78, 83, 72, 65, 128, 78, 83, 69, 85, 65, 69, 78, - 128, 78, 83, 69, 78, 128, 78, 83, 65, 128, 78, 82, 89, 88, 128, 78, 82, - 89, 84, 128, 78, 82, 89, 82, 88, 128, 78, 82, 89, 82, 128, 78, 82, 89, - 80, 128, 78, 82, 89, 128, 78, 82, 85, 88, 128, 78, 82, 85, 84, 128, 78, - 82, 85, 82, 88, 128, 78, 82, 85, 82, 128, 78, 82, 85, 80, 128, 78, 82, - 85, 65, 128, 78, 82, 85, 128, 78, 82, 79, 88, 128, 78, 82, 79, 80, 128, - 78, 82, 79, 128, 78, 82, 69, 88, 128, 78, 82, 69, 84, 128, 78, 82, 69, - 211, 78, 82, 69, 80, 128, 78, 82, 69, 128, 78, 82, 65, 88, 128, 78, 82, - 65, 84, 128, 78, 82, 65, 80, 128, 78, 82, 65, 128, 78, 81, 73, 71, 128, - 78, 79, 89, 128, 78, 79, 88, 128, 78, 79, 87, 67, 128, 78, 79, 86, 69, - 77, 66, 69, 82, 128, 78, 79, 84, 84, 79, 128, 78, 79, 84, 69, 83, 128, - 78, 79, 84, 69, 72, 69, 65, 68, 128, 78, 79, 84, 69, 72, 69, 65, 196, 78, - 79, 84, 69, 66, 79, 79, 75, 128, 78, 79, 84, 69, 66, 79, 79, 203, 78, 79, - 84, 69, 128, 78, 79, 84, 197, 78, 79, 84, 67, 72, 69, 196, 78, 79, 84, - 67, 72, 128, 78, 79, 84, 65, 84, 73, 79, 206, 78, 79, 84, 128, 78, 79, - 212, 78, 79, 83, 69, 128, 78, 79, 83, 197, 78, 79, 82, 84, 72, 87, 69, - 83, 212, 78, 79, 82, 84, 72, 69, 82, 206, 78, 79, 82, 84, 72, 69, 65, 83, - 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 78, 79, 82, 77, 65, 204, 78, 79, - 82, 68, 73, 195, 78, 79, 210, 78, 79, 80, 128, 78, 79, 79, 78, 85, 128, - 78, 79, 79, 128, 78, 79, 78, 70, 79, 82, 75, 73, 78, 71, 128, 78, 79, 78, - 45, 80, 79, 84, 65, 66, 76, 197, 78, 79, 78, 45, 74, 79, 73, 78, 69, 82, - 128, 78, 79, 78, 45, 66, 82, 69, 65, 75, 73, 78, 199, 78, 79, 78, 128, - 78, 79, 77, 73, 78, 65, 204, 78, 79, 75, 72, 85, 75, 128, 78, 79, 68, 69, - 128, 78, 79, 65, 128, 78, 79, 45, 66, 82, 69, 65, 203, 78, 78, 85, 85, - 128, 78, 78, 85, 128, 78, 78, 79, 79, 128, 78, 78, 79, 128, 78, 78, 78, - 85, 85, 128, 78, 78, 78, 85, 128, 78, 78, 78, 79, 79, 128, 78, 78, 78, - 79, 128, 78, 78, 78, 73, 73, 128, 78, 78, 78, 73, 128, 78, 78, 78, 69, - 69, 128, 78, 78, 78, 69, 128, 78, 78, 78, 65, 85, 128, 78, 78, 78, 65, - 73, 128, 78, 78, 78, 65, 65, 128, 78, 78, 78, 65, 128, 78, 78, 78, 128, - 78, 78, 72, 65, 128, 78, 78, 71, 79, 79, 128, 78, 78, 71, 79, 128, 78, - 78, 71, 73, 73, 128, 78, 78, 71, 73, 128, 78, 78, 71, 65, 65, 128, 78, - 78, 71, 65, 128, 78, 78, 71, 128, 78, 78, 66, 83, 80, 128, 78, 77, 128, - 78, 76, 65, 85, 128, 78, 76, 48, 50, 48, 128, 78, 76, 48, 49, 57, 128, - 78, 76, 48, 49, 56, 128, 78, 76, 48, 49, 55, 65, 128, 78, 76, 48, 49, 55, - 128, 78, 76, 48, 49, 54, 128, 78, 76, 48, 49, 53, 128, 78, 76, 48, 49, - 52, 128, 78, 76, 48, 49, 51, 128, 78, 76, 48, 49, 50, 128, 78, 76, 48, - 49, 49, 128, 78, 76, 48, 49, 48, 128, 78, 76, 48, 48, 57, 128, 78, 76, - 48, 48, 56, 128, 78, 76, 48, 48, 55, 128, 78, 76, 48, 48, 54, 128, 78, - 76, 48, 48, 53, 65, 128, 78, 76, 48, 48, 53, 128, 78, 76, 48, 48, 52, - 128, 78, 76, 48, 48, 51, 128, 78, 76, 48, 48, 50, 128, 78, 76, 48, 48, - 49, 128, 78, 76, 128, 78, 75, 79, 77, 128, 78, 75, 207, 78, 75, 73, 78, - 68, 73, 128, 78, 75, 65, 85, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78, - 74, 89, 88, 128, 78, 74, 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74, - 89, 82, 128, 78, 74, 89, 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128, - 78, 74, 85, 82, 88, 128, 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128, - 78, 74, 85, 80, 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, - 74, 85, 69, 81, 128, 78, 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74, - 79, 88, 128, 78, 74, 79, 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79, - 128, 78, 74, 79, 128, 78, 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74, - 73, 80, 128, 78, 74, 73, 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74, - 73, 69, 80, 128, 78, 74, 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74, - 73, 128, 78, 74, 201, 78, 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128, - 78, 74, 69, 85, 65, 69, 78, 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78, - 74, 69, 69, 69, 69, 128, 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74, - 69, 128, 78, 74, 65, 81, 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77, - 76, 73, 128, 78, 74, 65, 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88, - 128, 78, 73, 84, 82, 69, 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, - 71, 85, 128, 78, 73, 80, 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69, - 84, 89, 128, 78, 73, 78, 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78, - 128, 78, 73, 78, 69, 84, 69, 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82, - 84, 89, 128, 78, 73, 78, 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78, - 68, 65, 178, 78, 73, 78, 57, 128, 78, 73, 78, 128, 78, 73, 77, 128, 78, - 73, 205, 78, 73, 75, 79, 76, 83, 66, 85, 82, 199, 78, 73, 75, 72, 65, 72, - 73, 84, 128, 78, 73, 75, 65, 72, 73, 84, 128, 78, 73, 75, 65, 128, 78, - 73, 72, 83, 72, 86, 65, 83, 65, 128, 78, 73, 71, 73, 68, 65, 77, 73, 78, - 128, 78, 73, 71, 73, 68, 65, 69, 83, 72, 128, 78, 73, 71, 72, 84, 128, - 78, 73, 71, 72, 212, 78, 73, 71, 71, 65, 72, 73, 84, 65, 128, 78, 73, 69, - 88, 128, 78, 73, 69, 85, 78, 45, 84, 73, 75, 69, 85, 84, 128, 78, 73, 69, - 85, 78, 45, 84, 72, 73, 69, 85, 84, 72, 128, 78, 73, 69, 85, 78, 45, 83, - 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 82, 73, 69, 85, 76, 128, 78, 73, - 69, 85, 78, 45, 80, 73, 69, 85, 80, 128, 78, 73, 69, 85, 78, 45, 80, 65, - 78, 83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 75, 73, 89, 69, 79, 75, - 128, 78, 73, 69, 85, 78, 45, 72, 73, 69, 85, 72, 128, 78, 73, 69, 85, 78, - 45, 67, 73, 69, 85, 67, 128, 78, 73, 69, 85, 78, 45, 67, 72, 73, 69, 85, - 67, 72, 128, 78, 73, 69, 85, 206, 78, 73, 69, 80, 128, 78, 73, 69, 128, - 78, 73, 66, 128, 78, 73, 65, 128, 78, 73, 50, 128, 78, 72, 85, 69, 128, - 78, 72, 74, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, 71, 86, 69, - 128, 78, 71, 85, 85, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, - 128, 78, 71, 85, 79, 128, 78, 71, 85, 65, 78, 128, 78, 71, 85, 65, 69, - 84, 128, 78, 71, 85, 65, 69, 128, 78, 71, 79, 88, 128, 78, 71, 79, 85, - 128, 78, 71, 79, 213, 78, 71, 79, 84, 128, 78, 71, 79, 81, 128, 78, 71, - 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 77, 128, 78, 71, 79, 69, - 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 89, 69, 69, 128, - 78, 71, 75, 87, 65, 69, 78, 128, 78, 71, 75, 85, 80, 128, 78, 71, 75, 85, - 78, 128, 78, 71, 75, 85, 77, 128, 78, 71, 75, 85, 69, 78, 90, 69, 85, 77, - 128, 78, 71, 75, 85, 197, 78, 71, 75, 73, 78, 68, 201, 78, 71, 75, 73, - 69, 69, 128, 78, 71, 75, 69, 85, 88, 128, 78, 71, 75, 69, 85, 82, 73, - 128, 78, 71, 75, 69, 85, 65, 69, 81, 128, 78, 71, 75, 69, 85, 65, 69, 77, - 128, 78, 71, 75, 65, 81, 128, 78, 71, 75, 65, 80, 128, 78, 71, 75, 65, - 65, 77, 73, 128, 78, 71, 75, 65, 128, 78, 71, 73, 69, 88, 128, 78, 71, - 73, 69, 80, 128, 78, 71, 73, 69, 128, 78, 71, 72, 65, 128, 78, 71, 71, - 87, 65, 69, 78, 128, 78, 71, 71, 85, 82, 65, 69, 128, 78, 71, 71, 85, 80, - 128, 78, 71, 71, 85, 79, 81, 128, 78, 71, 71, 85, 79, 209, 78, 71, 71, - 85, 79, 78, 128, 78, 71, 71, 85, 79, 77, 128, 78, 71, 71, 85, 77, 128, - 78, 71, 71, 85, 69, 69, 84, 128, 78, 71, 71, 85, 65, 69, 83, 72, 65, 197, - 78, 71, 71, 85, 65, 69, 206, 78, 71, 71, 85, 65, 128, 78, 71, 71, 85, - 128, 78, 71, 71, 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, - 78, 71, 71, 69, 85, 88, 128, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 71, - 71, 69, 85, 65, 69, 128, 78, 71, 71, 69, 213, 78, 71, 71, 69, 78, 128, - 78, 71, 71, 69, 69, 84, 128, 78, 71, 71, 69, 69, 69, 69, 128, 78, 71, 71, - 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 65, 80, 128, 78, 71, 71, - 65, 65, 77, 65, 69, 128, 78, 71, 71, 65, 65, 77, 128, 78, 71, 71, 65, 65, - 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, 85, 82, 69, 85, - 84, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 69, 128, - 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, 65, 88, 128, 78, 71, 65, 85, - 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 81, 128, 78, 71, - 65, 80, 128, 78, 71, 65, 78, 71, 85, 128, 78, 71, 65, 78, 128, 78, 71, - 65, 73, 128, 78, 71, 65, 72, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, - 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 83, 80, 65, - 80, 69, 82, 128, 78, 69, 87, 76, 73, 78, 69, 128, 78, 69, 87, 76, 73, 78, - 197, 78, 69, 87, 128, 78, 69, 215, 78, 69, 85, 84, 82, 65, 76, 128, 78, - 69, 85, 84, 82, 65, 204, 78, 69, 85, 84, 69, 82, 128, 78, 69, 84, 87, 79, - 82, 75, 69, 196, 78, 69, 84, 128, 78, 69, 212, 78, 69, 83, 84, 69, 196, - 78, 69, 82, 196, 78, 69, 81, 85, 68, 65, 65, 128, 78, 69, 80, 84, 85, 78, - 69, 128, 78, 69, 80, 128, 78, 69, 79, 128, 78, 69, 207, 78, 69, 78, 79, - 69, 128, 78, 69, 78, 65, 78, 79, 128, 78, 69, 78, 128, 78, 69, 76, 128, - 78, 69, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 79, 206, 78, 69, 71, - 65, 84, 69, 196, 78, 69, 67, 75, 84, 73, 69, 128, 78, 69, 67, 75, 128, - 78, 69, 66, 69, 78, 83, 84, 73, 77, 77, 69, 128, 78, 68, 85, 88, 128, 78, - 68, 85, 84, 128, 78, 68, 85, 82, 88, 128, 78, 68, 85, 82, 128, 78, 68, - 85, 80, 128, 78, 68, 85, 78, 128, 78, 68, 213, 78, 68, 79, 88, 128, 78, - 68, 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, 79, 128, 78, 68, 79, - 78, 128, 78, 68, 79, 77, 66, 85, 128, 78, 68, 79, 76, 197, 78, 68, 73, - 88, 128, 78, 68, 73, 84, 128, 78, 68, 73, 81, 128, 78, 68, 73, 80, 128, - 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73, 68, 65, 128, - 78, 68, 73, 65, 81, 128, 78, 68, 69, 88, 128, 78, 68, 69, 85, 88, 128, - 78, 68, 69, 85, 84, 128, 78, 68, 69, 85, 65, 69, 82, 69, 69, 128, 78, 68, - 69, 80, 128, 78, 68, 69, 69, 128, 78, 68, 69, 128, 78, 68, 65, 88, 128, - 78, 68, 65, 84, 128, 78, 68, 65, 80, 128, 78, 68, 65, 77, 128, 78, 68, - 65, 65, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 68, 65, 65, 128, 78, 68, - 65, 193, 78, 67, 72, 65, 85, 128, 78, 66, 89, 88, 128, 78, 66, 89, 84, - 128, 78, 66, 89, 82, 88, 128, 78, 66, 89, 82, 128, 78, 66, 89, 80, 128, - 78, 66, 89, 128, 78, 66, 85, 88, 128, 78, 66, 85, 84, 128, 78, 66, 85, - 82, 88, 128, 78, 66, 85, 82, 128, 78, 66, 85, 80, 128, 78, 66, 85, 128, - 78, 66, 79, 88, 128, 78, 66, 79, 84, 128, 78, 66, 79, 80, 128, 78, 66, - 79, 128, 78, 66, 73, 88, 128, 78, 66, 73, 84, 128, 78, 66, 73, 80, 128, - 78, 66, 73, 69, 88, 128, 78, 66, 73, 69, 80, 128, 78, 66, 73, 69, 128, - 78, 66, 73, 128, 78, 66, 72, 128, 78, 66, 65, 88, 128, 78, 66, 65, 84, - 128, 78, 66, 65, 80, 128, 78, 66, 65, 128, 78, 65, 89, 65, 78, 78, 65, - 128, 78, 65, 89, 128, 78, 65, 88, 73, 65, 206, 78, 65, 88, 128, 78, 65, - 85, 84, 72, 83, 128, 78, 65, 85, 68, 73, 218, 78, 65, 84, 85, 82, 65, - 204, 78, 65, 84, 73, 79, 78, 65, 204, 78, 65, 83, 75, 65, 80, 201, 78, - 65, 83, 72, 73, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, 78, 128, - 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, 206, 78, 65, 83, 65, 204, 78, - 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 81, 128, 78, 65, 79, 211, - 78, 65, 78, 83, 65, 78, 65, 81, 128, 78, 65, 78, 71, 77, 79, 78, 84, 72, - 79, 128, 78, 65, 78, 68, 128, 78, 65, 78, 65, 128, 78, 65, 77, 69, 128, - 78, 65, 77, 197, 78, 65, 77, 50, 128, 78, 65, 77, 128, 78, 65, 75, 128, - 78, 65, 73, 82, 193, 78, 65, 73, 204, 78, 65, 71, 82, 201, 78, 65, 71, - 65, 82, 128, 78, 65, 71, 65, 128, 78, 65, 71, 193, 78, 65, 71, 128, 78, - 65, 199, 78, 65, 69, 128, 78, 65, 66, 76, 65, 128, 78, 65, 66, 65, 84, - 65, 69, 65, 206, 78, 65, 65, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, - 75, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, 73, 128, 78, 65, 193, - 78, 65, 52, 128, 78, 65, 50, 128, 78, 65, 45, 50, 128, 78, 48, 52, 50, - 128, 78, 48, 52, 49, 128, 78, 48, 52, 48, 128, 78, 48, 51, 57, 128, 78, - 48, 51, 56, 128, 78, 48, 51, 55, 65, 128, 78, 48, 51, 55, 128, 78, 48, - 51, 54, 128, 78, 48, 51, 53, 65, 128, 78, 48, 51, 53, 128, 78, 48, 51, - 52, 65, 128, 78, 48, 51, 52, 128, 78, 48, 51, 51, 65, 128, 78, 48, 51, - 51, 128, 78, 48, 51, 50, 128, 78, 48, 51, 49, 128, 78, 48, 51, 48, 128, - 78, 48, 50, 57, 128, 78, 48, 50, 56, 128, 78, 48, 50, 55, 128, 78, 48, - 50, 54, 128, 78, 48, 50, 53, 65, 128, 78, 48, 50, 53, 128, 78, 48, 50, - 52, 128, 78, 48, 50, 51, 128, 78, 48, 50, 50, 128, 78, 48, 50, 49, 128, - 78, 48, 50, 48, 128, 78, 48, 49, 57, 128, 78, 48, 49, 56, 66, 128, 78, - 48, 49, 56, 65, 128, 78, 48, 49, 56, 128, 78, 48, 49, 55, 128, 78, 48, - 49, 54, 128, 78, 48, 49, 53, 128, 78, 48, 49, 52, 128, 78, 48, 49, 51, - 128, 78, 48, 49, 50, 128, 78, 48, 49, 49, 128, 78, 48, 49, 48, 128, 78, - 48, 48, 57, 128, 78, 48, 48, 56, 128, 78, 48, 48, 55, 128, 78, 48, 48, - 54, 128, 78, 48, 48, 53, 128, 78, 48, 48, 52, 128, 78, 48, 48, 51, 128, - 78, 48, 48, 50, 128, 78, 48, 48, 49, 128, 78, 45, 67, 82, 69, 197, 78, - 45, 65, 82, 217, 77, 89, 88, 128, 77, 89, 84, 128, 77, 89, 83, 76, 73, - 84, 69, 128, 77, 89, 80, 128, 77, 89, 65, 128, 77, 89, 193, 77, 89, 128, - 77, 217, 77, 87, 79, 79, 128, 77, 87, 79, 128, 77, 87, 73, 73, 128, 77, - 87, 73, 128, 77, 87, 69, 69, 128, 77, 87, 69, 128, 77, 87, 65, 65, 128, - 77, 87, 65, 128, 77, 87, 128, 77, 215, 77, 86, 83, 128, 77, 86, 79, 80, - 128, 77, 86, 73, 128, 77, 86, 69, 85, 65, 69, 78, 71, 65, 77, 128, 77, - 86, 128, 77, 214, 77, 85, 88, 128, 77, 85, 85, 83, 73, 75, 65, 84, 79, - 65, 78, 128, 77, 85, 85, 82, 68, 72, 65, 74, 193, 77, 85, 85, 128, 77, - 85, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 77, 85, 83, - 72, 82, 79, 79, 77, 128, 77, 85, 83, 72, 51, 128, 77, 85, 83, 72, 179, - 77, 85, 83, 72, 128, 77, 85, 83, 200, 77, 85, 83, 128, 77, 85, 82, 88, - 128, 77, 85, 82, 71, 85, 50, 128, 77, 85, 82, 69, 128, 77, 85, 82, 68, - 65, 128, 77, 85, 82, 68, 193, 77, 85, 82, 128, 77, 85, 81, 68, 65, 77, - 128, 77, 85, 80, 128, 77, 85, 79, 88, 128, 77, 85, 79, 84, 128, 77, 85, - 79, 80, 128, 77, 85, 79, 77, 65, 69, 128, 77, 85, 79, 128, 77, 85, 78, - 83, 85, 66, 128, 77, 85, 78, 65, 72, 128, 77, 85, 78, 128, 77, 85, 76, - 84, 73, 83, 69, 84, 128, 77, 85, 76, 84, 73, 83, 69, 212, 77, 85, 76, 84, - 73, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 77, 85, 76, 84, 73, 80, 76, - 73, 67, 65, 84, 73, 79, 206, 77, 85, 76, 84, 73, 80, 76, 69, 128, 77, 85, - 76, 84, 73, 80, 76, 197, 77, 85, 76, 84, 73, 79, 67, 85, 76, 65, 210, 77, - 85, 76, 84, 73, 77, 65, 80, 128, 77, 85, 76, 84, 201, 77, 85, 76, 84, 65, - 78, 201, 77, 85, 75, 80, 72, 82, 69, 78, 71, 128, 77, 85, 73, 78, 128, - 77, 85, 71, 83, 128, 77, 85, 71, 128, 77, 85, 199, 77, 85, 69, 78, 128, - 77, 85, 69, 128, 77, 85, 67, 72, 128, 77, 85, 67, 200, 77, 85, 67, 65, - 65, 68, 128, 77, 85, 65, 83, 128, 77, 85, 65, 78, 128, 77, 85, 65, 69, - 128, 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, - 82, 207, 77, 80, 65, 128, 77, 79, 89, 65, 73, 128, 77, 79, 88, 128, 77, - 79, 86, 73, 197, 77, 79, 86, 69, 211, 77, 79, 86, 69, 77, 69, 78, 84, 45, - 87, 65, 76, 76, 80, 76, 65, 78, 197, 77, 79, 86, 69, 77, 69, 78, 84, 45, - 72, 73, 78, 71, 197, 77, 79, 86, 69, 77, 69, 78, 84, 45, 70, 76, 79, 79, - 82, 80, 76, 65, 78, 197, 77, 79, 86, 69, 77, 69, 78, 84, 45, 68, 73, 65, - 71, 79, 78, 65, 204, 77, 79, 86, 69, 77, 69, 78, 84, 128, 77, 79, 86, 69, - 77, 69, 78, 212, 77, 79, 86, 69, 196, 77, 79, 86, 69, 128, 77, 79, 85, - 84, 72, 128, 77, 79, 85, 83, 69, 128, 77, 79, 85, 83, 197, 77, 79, 85, - 78, 84, 65, 73, 78, 83, 128, 77, 79, 85, 78, 84, 65, 73, 78, 128, 77, 79, - 85, 78, 84, 65, 73, 206, 77, 79, 85, 78, 212, 77, 79, 85, 78, 68, 128, - 77, 79, 85, 78, 196, 77, 79, 84, 79, 82, 87, 65, 89, 128, 77, 79, 84, 79, - 82, 67, 89, 67, 76, 69, 128, 77, 79, 84, 79, 210, 77, 79, 84, 72, 69, 82, - 128, 77, 79, 84, 128, 77, 79, 83, 81, 85, 69, 128, 77, 79, 82, 84, 85, - 85, 77, 128, 77, 79, 82, 84, 65, 82, 128, 77, 79, 82, 80, 72, 79, 76, 79, - 71, 73, 67, 65, 204, 77, 79, 82, 78, 73, 78, 71, 128, 77, 79, 80, 128, - 77, 79, 79, 83, 69, 45, 67, 82, 69, 197, 77, 79, 79, 78, 128, 77, 79, 79, - 206, 77, 79, 79, 77, 80, 85, 81, 128, 77, 79, 79, 77, 69, 85, 84, 128, - 77, 79, 79, 68, 128, 77, 79, 79, 196, 77, 79, 79, 128, 77, 79, 78, 84, - 73, 69, 69, 78, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, - 79, 78, 83, 84, 69, 82, 128, 77, 79, 78, 79, 83, 84, 65, 66, 76, 197, 77, - 79, 78, 79, 83, 80, 65, 67, 197, 77, 79, 78, 79, 82, 65, 73, 76, 128, 77, - 79, 78, 79, 71, 82, 65, 80, 200, 77, 79, 78, 79, 71, 82, 65, 77, 77, 79, - 211, 77, 79, 78, 79, 71, 82, 65, 205, 77, 79, 78, 79, 70, 79, 78, 73, 65, - 83, 128, 77, 79, 78, 79, 67, 85, 76, 65, 210, 77, 79, 78, 75, 69, 89, - 128, 77, 79, 78, 75, 69, 217, 77, 79, 78, 73, 128, 77, 79, 78, 71, 75, - 69, 85, 65, 69, 81, 128, 77, 79, 78, 69, 89, 45, 77, 79, 85, 84, 200, 77, - 79, 78, 69, 217, 77, 79, 78, 128, 77, 79, 206, 77, 79, 76, 128, 77, 79, - 72, 65, 77, 77, 65, 196, 77, 79, 68, 85, 76, 207, 77, 79, 68, 73, 70, 73, - 69, 82, 45, 57, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 56, 128, 77, 79, - 68, 73, 70, 73, 69, 82, 45, 55, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, - 54, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 53, 128, 77, 79, 68, 73, 70, - 73, 69, 82, 45, 52, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 51, 128, 77, - 79, 68, 73, 70, 73, 69, 82, 45, 50, 128, 77, 79, 68, 73, 70, 73, 69, 82, - 45, 49, 54, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 53, 128, 77, 79, - 68, 73, 70, 73, 69, 82, 45, 49, 52, 128, 77, 79, 68, 73, 70, 73, 69, 82, - 45, 49, 51, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 50, 128, 77, 79, - 68, 73, 70, 73, 69, 82, 45, 49, 49, 128, 77, 79, 68, 73, 70, 73, 69, 82, - 45, 49, 48, 128, 77, 79, 68, 201, 77, 79, 68, 69, 83, 84, 89, 128, 77, - 79, 68, 69, 77, 128, 77, 79, 68, 69, 76, 83, 128, 77, 79, 68, 69, 76, - 128, 77, 79, 68, 69, 128, 77, 79, 66, 73, 76, 197, 77, 79, 65, 128, 77, - 207, 77, 78, 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 83, 80, 128, 77, - 77, 128, 77, 205, 77, 76, 65, 128, 77, 76, 128, 77, 75, 80, 65, 82, 65, - 209, 77, 73, 88, 128, 77, 73, 84, 128, 77, 73, 83, 82, 65, 128, 77, 73, - 82, 73, 66, 65, 65, 82, 85, 128, 77, 73, 82, 73, 128, 77, 73, 82, 69, 68, - 128, 77, 73, 80, 128, 77, 73, 78, 89, 128, 77, 73, 78, 85, 83, 45, 79, - 82, 45, 80, 76, 85, 211, 77, 73, 78, 85, 83, 128, 77, 73, 78, 73, 83, 84, - 69, 82, 128, 77, 73, 78, 73, 77, 73, 90, 69, 128, 77, 73, 78, 73, 77, 65, - 128, 77, 73, 78, 73, 68, 73, 83, 67, 128, 77, 73, 78, 73, 66, 85, 83, - 128, 77, 73, 77, 69, 128, 77, 73, 77, 128, 77, 73, 76, 76, 73, 79, 78, - 83, 128, 77, 73, 76, 76, 73, 79, 78, 211, 77, 73, 76, 76, 69, 84, 128, - 77, 73, 76, 76, 197, 77, 73, 76, 204, 77, 73, 76, 75, 217, 77, 73, 76, - 73, 84, 65, 82, 217, 77, 73, 76, 128, 77, 73, 75, 85, 82, 79, 78, 128, - 77, 73, 75, 82, 79, 206, 77, 73, 75, 82, 73, 128, 77, 73, 73, 78, 128, - 77, 73, 73, 128, 77, 73, 199, 77, 73, 69, 88, 128, 77, 73, 69, 85, 77, - 45, 84, 73, 75, 69, 85, 84, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, - 71, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, 71, 78, - 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 82, 73, 69, 85, 76, 128, 77, - 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 77, 73, - 69, 85, 77, 45, 80, 73, 69, 85, 80, 128, 77, 73, 69, 85, 77, 45, 80, 65, - 78, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 78, 73, 69, 85, 78, 128, - 77, 73, 69, 85, 77, 45, 67, 73, 69, 85, 67, 128, 77, 73, 69, 85, 77, 45, - 67, 72, 73, 69, 85, 67, 72, 128, 77, 73, 69, 85, 205, 77, 73, 69, 80, - 128, 77, 73, 69, 69, 128, 77, 73, 69, 128, 77, 73, 68, 76, 73, 78, 197, - 77, 73, 68, 68, 76, 69, 45, 87, 69, 76, 83, 200, 77, 73, 68, 68, 76, 69, - 128, 77, 73, 68, 45, 76, 69, 86, 69, 204, 77, 73, 196, 77, 73, 67, 82, - 79, 83, 67, 79, 80, 69, 128, 77, 73, 67, 82, 79, 80, 72, 79, 78, 69, 128, - 77, 73, 67, 82, 207, 77, 73, 67, 210, 77, 72, 90, 128, 77, 72, 65, 128, - 77, 72, 128, 77, 71, 85, 88, 128, 77, 71, 85, 84, 128, 77, 71, 85, 82, - 88, 128, 77, 71, 85, 82, 128, 77, 71, 85, 80, 128, 77, 71, 85, 79, 88, - 128, 77, 71, 85, 79, 80, 128, 77, 71, 85, 79, 128, 77, 71, 85, 128, 77, - 71, 79, 88, 128, 77, 71, 79, 84, 128, 77, 71, 79, 80, 128, 77, 71, 79, - 128, 77, 71, 207, 77, 71, 73, 69, 88, 128, 77, 71, 73, 69, 128, 77, 71, - 69, 88, 128, 77, 71, 69, 80, 128, 77, 71, 69, 128, 77, 71, 66, 85, 128, - 77, 71, 66, 79, 79, 128, 77, 71, 66, 79, 70, 85, 77, 128, 77, 71, 66, 79, - 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 85, 78, 128, 77, 71, 66, 69, - 78, 128, 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 65, - 83, 65, 81, 128, 77, 71, 66, 65, 83, 65, 128, 77, 71, 65, 88, 128, 77, - 71, 65, 84, 128, 77, 71, 65, 80, 128, 77, 71, 65, 128, 77, 71, 128, 77, - 70, 79, 78, 128, 77, 70, 79, 206, 77, 70, 79, 128, 77, 70, 73, 89, 65, - 81, 128, 77, 70, 73, 69, 69, 128, 77, 70, 69, 85, 84, 128, 77, 70, 69, - 85, 81, 128, 77, 70, 69, 85, 65, 69, 128, 77, 70, 65, 65, 128, 77, 69, - 90, 90, 79, 128, 77, 69, 88, 128, 77, 69, 85, 212, 77, 69, 85, 81, 128, - 77, 69, 85, 78, 74, 79, 77, 78, 68, 69, 85, 81, 128, 77, 69, 85, 78, 128, - 77, 69, 84, 82, 79, 128, 77, 69, 84, 82, 73, 67, 65, 204, 77, 69, 84, 82, - 73, 65, 128, 77, 69, 84, 82, 69, 84, 69, 211, 77, 69, 84, 79, 66, 69, 76, - 85, 83, 128, 77, 69, 84, 69, 75, 128, 77, 69, 84, 69, 71, 128, 77, 69, - 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206, - 77, 69, 83, 83, 65, 71, 69, 128, 77, 69, 83, 83, 65, 71, 197, 77, 69, 83, - 79, 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 77, 69, 82, 75, 72, - 65, 128, 77, 69, 82, 75, 72, 193, 77, 69, 82, 73, 68, 73, 65, 78, 83, - 128, 77, 69, 82, 73, 128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, - 82, 89, 128, 77, 69, 82, 67, 85, 82, 217, 77, 69, 78, 79, 82, 65, 200, - 77, 69, 78, 79, 69, 128, 77, 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, - 77, 69, 77, 79, 128, 77, 69, 77, 66, 69, 82, 83, 72, 73, 80, 128, 77, 69, - 77, 66, 69, 82, 128, 77, 69, 77, 66, 69, 210, 77, 69, 77, 45, 81, 79, 80, - 72, 128, 77, 69, 77, 128, 77, 69, 205, 77, 69, 76, 79, 68, 73, 195, 77, - 69, 76, 73, 75, 128, 77, 69, 73, 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, - 128, 77, 69, 71, 65, 80, 72, 79, 78, 69, 128, 77, 69, 71, 65, 76, 73, - 128, 77, 69, 69, 84, 79, 82, 85, 128, 77, 69, 69, 84, 69, 201, 77, 69, - 69, 84, 128, 77, 69, 69, 77, 85, 128, 77, 69, 69, 77, 128, 77, 69, 69, - 202, 77, 69, 69, 69, 69, 128, 77, 69, 68, 73, 85, 77, 128, 77, 69, 68, - 73, 85, 205, 77, 69, 68, 73, 67, 73, 78, 69, 128, 77, 69, 68, 73, 67, 65, - 204, 77, 69, 68, 65, 76, 128, 77, 69, 65, 84, 128, 77, 69, 65, 212, 77, - 69, 65, 83, 85, 82, 69, 196, 77, 69, 65, 83, 85, 82, 69, 128, 77, 69, 65, - 83, 85, 82, 197, 77, 68, 85, 206, 77, 196, 77, 67, 72, 213, 77, 67, 72, - 65, 206, 77, 195, 77, 66, 85, 85, 128, 77, 66, 85, 79, 81, 128, 77, 66, - 85, 79, 128, 77, 66, 85, 69, 128, 77, 66, 85, 65, 69, 77, 128, 77, 66, - 85, 65, 69, 128, 77, 66, 79, 79, 128, 77, 66, 79, 128, 77, 66, 73, 84, - 128, 77, 66, 73, 212, 77, 66, 73, 82, 73, 69, 69, 78, 128, 77, 66, 73, - 128, 77, 66, 69, 85, 88, 128, 77, 66, 69, 85, 82, 73, 128, 77, 66, 69, - 85, 77, 128, 77, 66, 69, 82, 65, 69, 128, 77, 66, 69, 78, 128, 77, 66, - 69, 69, 75, 69, 69, 84, 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, - 66, 65, 81, 128, 77, 66, 65, 78, 89, 73, 128, 77, 66, 65, 65, 82, 65, 69, - 128, 77, 66, 65, 65, 75, 69, 84, 128, 77, 66, 65, 65, 128, 77, 66, 65, - 193, 77, 66, 193, 77, 66, 52, 128, 77, 66, 51, 128, 77, 66, 50, 128, 77, - 65, 89, 69, 203, 77, 65, 89, 65, 78, 78, 65, 128, 77, 65, 89, 128, 77, - 65, 88, 73, 77, 73, 90, 69, 128, 77, 65, 88, 73, 77, 65, 128, 77, 65, 88, - 128, 77, 65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, 77, 65, 84, 82, - 73, 88, 128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, 65, 84, 128, - 77, 65, 83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, 83, 83, 65, 71, - 69, 128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, 77, 65, 83, 72, - 70, 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, - 78, 197, 77, 65, 82, 89, 128, 77, 65, 82, 87, 65, 82, 201, 77, 65, 82, - 85, 75, 85, 128, 77, 65, 82, 84, 89, 82, 73, 193, 77, 65, 82, 82, 89, 73, - 78, 199, 77, 65, 82, 82, 73, 65, 71, 197, 77, 65, 82, 75, 211, 77, 65, - 82, 75, 69, 82, 128, 77, 65, 82, 75, 45, 52, 128, 77, 65, 82, 75, 45, 51, - 128, 77, 65, 82, 75, 45, 50, 128, 77, 65, 82, 75, 45, 49, 128, 77, 65, - 82, 69, 128, 77, 65, 82, 67, 72, 128, 77, 65, 82, 67, 65, 84, 79, 45, 83, - 84, 65, 67, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65, 84, 79, 128, 77, 65, - 82, 67, 65, 83, 73, 84, 69, 128, 77, 65, 82, 66, 85, 84, 65, 128, 77, 65, - 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, 65, 70, 128, 77, 65, - 81, 128, 77, 65, 80, 76, 197, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, - 65, 79, 128, 77, 65, 78, 84, 69, 76, 80, 73, 69, 67, 197, 77, 65, 78, 83, - 89, 79, 78, 128, 77, 65, 78, 83, 85, 65, 69, 128, 77, 65, 78, 78, 65, + 87, 76, 128, 79, 86, 69, 82, 82, 73, 68, 69, 128, 79, 86, 69, 82, 76, 79, + 78, 199, 79, 86, 69, 82, 76, 73, 78, 69, 128, 79, 86, 69, 82, 76, 65, 89, + 128, 79, 86, 69, 82, 76, 65, 80, 80, 73, 78, 199, 79, 86, 69, 82, 76, 65, + 80, 128, 79, 86, 69, 82, 76, 65, 73, 68, 128, 79, 86, 69, 82, 66, 65, 82, + 128, 79, 86, 65, 76, 128, 79, 86, 65, 204, 79, 85, 84, 76, 73, 78, 69, + 196, 79, 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, 79, 85, 84, + 66, 79, 216, 79, 85, 78, 75, 73, 193, 79, 85, 78, 67, 69, 128, 79, 85, + 78, 67, 197, 79, 84, 85, 128, 79, 84, 84, 65, 86, 193, 79, 84, 84, 128, + 79, 84, 72, 69, 82, 211, 79, 84, 72, 69, 210, 79, 84, 72, 65, 76, 65, + 206, 79, 84, 72, 65, 76, 128, 79, 83, 77, 65, 78, 89, 193, 79, 83, 67, + 128, 79, 83, 65, 71, 197, 79, 82, 84, 72, 79, 71, 79, 78, 65, 204, 79, + 82, 84, 72, 79, 68, 79, 216, 79, 82, 78, 65, 84, 197, 79, 82, 78, 65, 77, + 69, 78, 84, 83, 128, 79, 82, 78, 65, 77, 69, 78, 84, 128, 79, 82, 78, 65, + 77, 69, 78, 212, 79, 82, 75, 72, 79, 206, 79, 82, 73, 89, 193, 79, 82, + 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, 82, 69, 45, 50, + 128, 79, 82, 68, 73, 78, 65, 204, 79, 82, 68, 69, 210, 79, 82, 67, 72, + 73, 68, 128, 79, 82, 65, 78, 71, 197, 79, 80, 84, 73, 79, 206, 79, 80, + 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83, 83, 73, 79, 78, 128, 79, 80, + 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, 78, 199, 79, + 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85, 67, 72, 85, 83, 128, 79, 80, + 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, 210, 79, 80, 69, + 82, 65, 84, 73, 78, 199, 79, 80, 69, 78, 73, 78, 199, 79, 80, 69, 78, 45, + 80, 128, 79, 80, 69, 78, 45, 79, 85, 84, 76, 73, 78, 69, 196, 79, 80, 69, + 78, 45, 79, 128, 79, 80, 69, 78, 45, 207, 79, 80, 69, 78, 45, 72, 69, 65, + 68, 69, 196, 79, 80, 69, 78, 45, 67, 73, 82, 67, 85, 73, 84, 45, 79, 85, + 84, 80, 85, 212, 79, 80, 69, 78, 128, 79, 79, 90, 69, 128, 79, 79, 89, + 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 77, 85, 128, 79, 79, 72, + 128, 79, 79, 69, 128, 79, 79, 66, 79, 79, 70, 73, 76, 73, 128, 79, 78, + 85, 128, 79, 78, 83, 85, 128, 79, 78, 78, 128, 79, 78, 75, 65, 82, 128, + 79, 78, 69, 83, 69, 76, 70, 128, 79, 78, 69, 45, 87, 65, 217, 79, 78, 69, + 45, 84, 72, 73, 82, 84, 89, 128, 79, 78, 69, 45, 76, 73, 78, 197, 79, 78, + 69, 45, 72, 85, 78, 68, 82, 69, 68, 45, 65, 78, 68, 45, 83, 73, 88, 84, + 73, 69, 84, 72, 128, 79, 78, 67, 79, 77, 73, 78, 199, 79, 78, 65, 80, + 128, 79, 78, 45, 79, 70, 198, 79, 77, 73, 83, 83, 73, 79, 206, 79, 77, + 73, 67, 82, 79, 78, 128, 79, 77, 73, 67, 82, 79, 206, 79, 77, 69, 71, 65, + 128, 79, 77, 69, 71, 193, 79, 77, 65, 76, 79, 78, 128, 79, 76, 73, 86, + 69, 128, 79, 76, 73, 71, 79, 206, 79, 76, 68, 128, 79, 75, 84, 207, 79, + 75, 65, 82, 65, 128, 79, 75, 65, 82, 193, 79, 74, 73, 66, 87, 65, 217, + 79, 74, 69, 79, 78, 128, 79, 73, 78, 128, 79, 73, 76, 128, 79, 73, 204, + 79, 72, 77, 128, 79, 72, 205, 79, 71, 82, 69, 128, 79, 71, 79, 78, 69, + 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 70, 70, 73, + 67, 69, 82, 128, 79, 70, 70, 73, 67, 69, 128, 79, 70, 70, 73, 67, 197, + 79, 70, 70, 128, 79, 69, 89, 128, 79, 69, 75, 128, 79, 69, 69, 128, 79, + 68, 69, 78, 128, 79, 68, 68, 128, 79, 68, 196, 79, 67, 84, 79, 80, 85, + 83, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 84, 69, 212, 79, 67, + 84, 65, 71, 79, 78, 65, 204, 79, 67, 84, 65, 71, 79, 78, 128, 79, 67, + 210, 79, 67, 76, 79, 67, 75, 128, 79, 67, 67, 76, 85, 83, 73, 79, 78, + 128, 79, 66, 83, 84, 82, 85, 67, 84, 73, 79, 78, 128, 79, 66, 79, 76, + 211, 79, 66, 79, 204, 79, 66, 79, 70, 73, 76, 73, 128, 79, 66, 76, 73, + 81, 85, 197, 79, 66, 74, 69, 67, 212, 79, 66, 69, 76, 85, 83, 128, 79, + 66, 69, 76, 79, 83, 128, 79, 66, 128, 79, 65, 89, 128, 79, 65, 75, 128, + 79, 65, 66, 79, 65, 70, 73, 76, 73, 128, 79, 193, 79, 48, 53, 49, 128, + 79, 48, 53, 48, 66, 128, 79, 48, 53, 48, 65, 128, 79, 48, 53, 48, 128, + 79, 48, 52, 57, 128, 79, 48, 52, 56, 128, 79, 48, 52, 55, 128, 79, 48, + 52, 54, 128, 79, 48, 52, 53, 128, 79, 48, 52, 52, 128, 79, 48, 52, 51, + 128, 79, 48, 52, 50, 128, 79, 48, 52, 49, 128, 79, 48, 52, 48, 128, 79, + 48, 51, 57, 128, 79, 48, 51, 56, 128, 79, 48, 51, 55, 128, 79, 48, 51, + 54, 68, 128, 79, 48, 51, 54, 67, 128, 79, 48, 51, 54, 66, 128, 79, 48, + 51, 54, 65, 128, 79, 48, 51, 54, 128, 79, 48, 51, 53, 128, 79, 48, 51, + 52, 128, 79, 48, 51, 51, 65, 128, 79, 48, 51, 51, 128, 79, 48, 51, 50, + 128, 79, 48, 51, 49, 128, 79, 48, 51, 48, 65, 128, 79, 48, 51, 48, 128, + 79, 48, 50, 57, 65, 128, 79, 48, 50, 57, 128, 79, 48, 50, 56, 128, 79, + 48, 50, 55, 128, 79, 48, 50, 54, 128, 79, 48, 50, 53, 65, 128, 79, 48, + 50, 53, 128, 79, 48, 50, 52, 65, 128, 79, 48, 50, 52, 128, 79, 48, 50, + 51, 128, 79, 48, 50, 50, 128, 79, 48, 50, 49, 128, 79, 48, 50, 48, 65, + 128, 79, 48, 50, 48, 128, 79, 48, 49, 57, 65, 128, 79, 48, 49, 57, 128, + 79, 48, 49, 56, 128, 79, 48, 49, 55, 128, 79, 48, 49, 54, 128, 79, 48, + 49, 53, 128, 79, 48, 49, 52, 128, 79, 48, 49, 51, 128, 79, 48, 49, 50, + 128, 79, 48, 49, 49, 128, 79, 48, 49, 48, 67, 128, 79, 48, 49, 48, 66, + 128, 79, 48, 49, 48, 65, 128, 79, 48, 49, 48, 128, 79, 48, 48, 57, 128, + 79, 48, 48, 56, 128, 79, 48, 48, 55, 128, 79, 48, 48, 54, 70, 128, 79, + 48, 48, 54, 69, 128, 79, 48, 48, 54, 68, 128, 79, 48, 48, 54, 67, 128, + 79, 48, 48, 54, 66, 128, 79, 48, 48, 54, 65, 128, 79, 48, 48, 54, 128, + 79, 48, 48, 53, 65, 128, 79, 48, 48, 53, 128, 79, 48, 48, 52, 128, 79, + 48, 48, 51, 128, 79, 48, 48, 50, 128, 79, 48, 48, 49, 65, 128, 79, 48, + 48, 49, 128, 79, 45, 89, 69, 128, 79, 45, 79, 45, 73, 128, 79, 45, 69, + 128, 78, 90, 89, 88, 128, 78, 90, 89, 84, 128, 78, 90, 89, 82, 88, 128, + 78, 90, 89, 82, 128, 78, 90, 89, 80, 128, 78, 90, 89, 128, 78, 90, 85, + 88, 128, 78, 90, 85, 82, 88, 128, 78, 90, 85, 82, 128, 78, 90, 85, 81, + 128, 78, 90, 85, 80, 128, 78, 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, + 78, 90, 85, 206, 78, 90, 85, 128, 78, 90, 79, 88, 128, 78, 90, 79, 80, + 128, 78, 90, 73, 88, 128, 78, 90, 73, 84, 128, 78, 90, 73, 80, 128, 78, + 90, 73, 69, 88, 128, 78, 90, 73, 69, 80, 128, 78, 90, 73, 69, 128, 78, + 90, 73, 128, 78, 90, 69, 88, 128, 78, 90, 69, 85, 77, 128, 78, 90, 69, + 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 81, 128, 78, + 90, 65, 80, 128, 78, 90, 65, 128, 78, 90, 193, 78, 89, 87, 65, 128, 78, + 89, 85, 88, 128, 78, 89, 85, 85, 128, 78, 89, 85, 84, 128, 78, 89, 85, + 80, 128, 78, 89, 85, 79, 88, 128, 78, 89, 85, 79, 80, 128, 78, 89, 85, + 79, 128, 78, 89, 85, 78, 128, 78, 89, 85, 69, 128, 78, 89, 85, 128, 78, + 89, 79, 88, 128, 78, 89, 79, 84, 128, 78, 89, 79, 80, 128, 78, 89, 79, + 79, 128, 78, 89, 79, 78, 128, 78, 89, 79, 65, 128, 78, 89, 79, 128, 78, + 89, 74, 65, 128, 78, 89, 73, 88, 128, 78, 89, 73, 84, 128, 78, 89, 73, + 212, 78, 89, 73, 211, 78, 89, 73, 210, 78, 89, 73, 80, 128, 78, 89, 73, + 78, 45, 68, 79, 128, 78, 89, 73, 78, 128, 78, 89, 73, 73, 128, 78, 89, + 73, 69, 88, 128, 78, 89, 73, 69, 84, 128, 78, 89, 73, 69, 80, 128, 78, + 89, 73, 69, 128, 78, 89, 73, 128, 78, 89, 201, 78, 89, 72, 65, 128, 78, + 89, 69, 84, 128, 78, 89, 69, 212, 78, 89, 69, 78, 128, 78, 89, 69, 72, + 128, 78, 89, 69, 200, 78, 89, 69, 69, 128, 78, 89, 69, 128, 78, 89, 196, + 78, 89, 67, 65, 128, 78, 89, 65, 85, 128, 78, 89, 65, 73, 128, 78, 89, + 65, 72, 128, 78, 89, 65, 69, 77, 65, 69, 128, 78, 89, 65, 65, 128, 78, + 87, 79, 79, 128, 78, 87, 79, 128, 78, 87, 73, 73, 128, 78, 87, 73, 128, + 78, 87, 69, 128, 78, 87, 65, 65, 128, 78, 87, 65, 128, 78, 87, 128, 78, + 86, 128, 78, 85, 88, 128, 78, 85, 85, 78, 128, 78, 85, 85, 128, 78, 85, + 84, 73, 76, 76, 85, 128, 78, 85, 84, 128, 78, 85, 212, 78, 85, 82, 88, + 128, 78, 85, 82, 128, 78, 85, 80, 128, 78, 85, 79, 88, 128, 78, 85, 79, + 80, 128, 78, 85, 79, 128, 78, 85, 78, 85, 90, 128, 78, 85, 78, 85, 218, + 78, 85, 78, 71, 128, 78, 85, 78, 65, 86, 85, 212, 78, 85, 78, 65, 86, 73, + 203, 78, 85, 78, 128, 78, 85, 206, 78, 85, 77, 69, 82, 207, 78, 85, 77, + 69, 82, 65, 84, 79, 210, 78, 85, 77, 69, 82, 65, 204, 78, 85, 77, 66, 69, + 82, 83, 128, 78, 85, 77, 66, 69, 82, 128, 78, 85, 77, 128, 78, 85, 76, + 76, 128, 78, 85, 76, 204, 78, 85, 76, 128, 78, 85, 75, 84, 65, 128, 78, + 85, 69, 78, 71, 128, 78, 85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, + 65, 69, 128, 78, 85, 49, 49, 128, 78, 85, 49, 177, 78, 85, 48, 50, 50, + 65, 128, 78, 85, 48, 50, 50, 128, 78, 85, 48, 50, 49, 128, 78, 85, 48, + 50, 48, 128, 78, 85, 48, 49, 57, 128, 78, 85, 48, 49, 56, 65, 128, 78, + 85, 48, 49, 56, 128, 78, 85, 48, 49, 55, 128, 78, 85, 48, 49, 54, 128, + 78, 85, 48, 49, 53, 128, 78, 85, 48, 49, 52, 128, 78, 85, 48, 49, 51, + 128, 78, 85, 48, 49, 50, 128, 78, 85, 48, 49, 49, 65, 128, 78, 85, 48, + 49, 49, 128, 78, 85, 48, 49, 48, 65, 128, 78, 85, 48, 49, 48, 128, 78, + 85, 48, 48, 57, 128, 78, 85, 48, 48, 56, 128, 78, 85, 48, 48, 55, 128, + 78, 85, 48, 48, 54, 128, 78, 85, 48, 48, 53, 128, 78, 85, 48, 48, 52, + 128, 78, 85, 48, 48, 51, 128, 78, 85, 48, 48, 50, 128, 78, 85, 48, 48, + 49, 128, 78, 84, 88, 73, 86, 128, 78, 84, 85, 85, 128, 78, 84, 85, 77, + 128, 78, 84, 85, 74, 128, 78, 84, 213, 78, 84, 83, 65, 85, 128, 78, 84, + 79, 81, 80, 69, 78, 128, 78, 84, 79, 71, 128, 78, 84, 79, 199, 78, 84, + 73, 69, 197, 78, 84, 72, 65, 85, 128, 78, 84, 69, 85, 78, 71, 66, 65, + 128, 78, 84, 69, 85, 77, 128, 78, 84, 69, 78, 128, 78, 84, 69, 69, 128, + 78, 84, 65, 80, 128, 78, 84, 65, 208, 78, 84, 65, 65, 128, 78, 83, 85, + 79, 212, 78, 83, 85, 78, 128, 78, 83, 85, 77, 128, 78, 83, 79, 77, 128, + 78, 83, 73, 69, 69, 84, 128, 78, 83, 73, 69, 69, 80, 128, 78, 83, 73, 69, + 69, 128, 78, 83, 72, 85, 84, 128, 78, 83, 72, 85, 212, 78, 83, 72, 85, + 79, 80, 128, 78, 83, 72, 85, 69, 128, 78, 83, 72, 73, 69, 69, 128, 78, + 83, 72, 69, 69, 128, 78, 83, 72, 65, 81, 128, 78, 83, 72, 65, 128, 78, + 83, 69, 85, 65, 69, 78, 128, 78, 83, 69, 78, 128, 78, 83, 65, 128, 78, + 82, 89, 88, 128, 78, 82, 89, 84, 128, 78, 82, 89, 82, 88, 128, 78, 82, + 89, 82, 128, 78, 82, 89, 80, 128, 78, 82, 89, 128, 78, 82, 85, 88, 128, + 78, 82, 85, 84, 128, 78, 82, 85, 82, 88, 128, 78, 82, 85, 82, 128, 78, + 82, 85, 80, 128, 78, 82, 85, 65, 128, 78, 82, 85, 128, 78, 82, 79, 88, + 128, 78, 82, 79, 80, 128, 78, 82, 79, 128, 78, 82, 69, 88, 128, 78, 82, + 69, 84, 128, 78, 82, 69, 211, 78, 82, 69, 80, 128, 78, 82, 69, 128, 78, + 82, 65, 88, 128, 78, 82, 65, 84, 128, 78, 82, 65, 80, 128, 78, 82, 65, + 128, 78, 81, 73, 71, 128, 78, 79, 89, 128, 78, 79, 88, 128, 78, 79, 87, + 67, 128, 78, 79, 86, 69, 77, 66, 69, 82, 128, 78, 79, 84, 84, 79, 128, + 78, 79, 84, 69, 83, 128, 78, 79, 84, 69, 72, 69, 65, 68, 128, 78, 79, 84, + 69, 72, 69, 65, 196, 78, 79, 84, 69, 66, 79, 79, 75, 128, 78, 79, 84, 69, + 66, 79, 79, 203, 78, 79, 84, 69, 128, 78, 79, 84, 197, 78, 79, 84, 67, + 72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84, 65, 84, 73, 79, 206, + 78, 79, 84, 128, 78, 79, 212, 78, 79, 83, 69, 128, 78, 79, 83, 197, 78, + 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 72, 69, 82, 206, 78, 79, + 82, 84, 72, 69, 65, 83, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 78, 79, + 82, 77, 65, 204, 78, 79, 82, 68, 73, 195, 78, 79, 210, 78, 79, 80, 128, + 78, 79, 79, 78, 85, 128, 78, 79, 79, 128, 78, 79, 78, 70, 79, 82, 75, 73, + 78, 71, 128, 78, 79, 78, 45, 80, 79, 84, 65, 66, 76, 197, 78, 79, 78, 45, + 74, 79, 73, 78, 69, 82, 128, 78, 79, 78, 45, 66, 82, 69, 65, 75, 73, 78, + 199, 78, 79, 78, 128, 78, 79, 77, 73, 83, 77, 193, 78, 79, 77, 73, 78, + 65, 204, 78, 79, 75, 72, 85, 75, 128, 78, 79, 68, 69, 128, 78, 79, 65, + 128, 78, 79, 45, 66, 82, 69, 65, 203, 78, 78, 85, 85, 128, 78, 78, 85, + 128, 78, 78, 79, 79, 128, 78, 78, 79, 128, 78, 78, 78, 85, 85, 128, 78, + 78, 78, 85, 128, 78, 78, 78, 79, 79, 128, 78, 78, 78, 79, 128, 78, 78, + 78, 73, 73, 128, 78, 78, 78, 73, 128, 78, 78, 78, 69, 69, 128, 78, 78, + 78, 69, 128, 78, 78, 78, 65, 85, 128, 78, 78, 78, 65, 73, 128, 78, 78, + 78, 65, 65, 128, 78, 78, 78, 65, 128, 78, 78, 78, 128, 78, 78, 72, 65, + 128, 78, 78, 71, 79, 79, 128, 78, 78, 71, 79, 128, 78, 78, 71, 73, 73, + 128, 78, 78, 71, 73, 128, 78, 78, 71, 65, 65, 128, 78, 78, 71, 65, 128, + 78, 78, 71, 128, 78, 78, 66, 83, 80, 128, 78, 77, 128, 78, 76, 65, 85, + 128, 78, 76, 48, 50, 48, 128, 78, 76, 48, 49, 57, 128, 78, 76, 48, 49, + 56, 128, 78, 76, 48, 49, 55, 65, 128, 78, 76, 48, 49, 55, 128, 78, 76, + 48, 49, 54, 128, 78, 76, 48, 49, 53, 128, 78, 76, 48, 49, 52, 128, 78, + 76, 48, 49, 51, 128, 78, 76, 48, 49, 50, 128, 78, 76, 48, 49, 49, 128, + 78, 76, 48, 49, 48, 128, 78, 76, 48, 48, 57, 128, 78, 76, 48, 48, 56, + 128, 78, 76, 48, 48, 55, 128, 78, 76, 48, 48, 54, 128, 78, 76, 48, 48, + 53, 65, 128, 78, 76, 48, 48, 53, 128, 78, 76, 48, 48, 52, 128, 78, 76, + 48, 48, 51, 128, 78, 76, 48, 48, 50, 128, 78, 76, 48, 48, 49, 128, 78, + 76, 128, 78, 75, 79, 77, 128, 78, 75, 207, 78, 75, 73, 78, 68, 73, 128, + 78, 75, 65, 85, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78, 74, 89, 88, + 128, 78, 74, 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74, 89, 82, 128, + 78, 74, 89, 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128, 78, 74, 85, + 82, 88, 128, 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128, 78, 74, 85, + 80, 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, 74, 85, 69, + 81, 128, 78, 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74, 79, 88, 128, + 78, 74, 79, 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79, 128, 78, 74, + 79, 128, 78, 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74, 73, 80, 128, + 78, 74, 73, 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74, 73, 69, 80, + 128, 78, 74, 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74, 73, 128, 78, + 74, 201, 78, 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128, 78, 74, 69, + 85, 65, 69, 78, 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78, 74, 69, 69, + 69, 69, 128, 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74, 69, 128, 78, + 74, 65, 81, 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77, 76, 73, 128, + 78, 74, 65, 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88, 128, 78, 73, + 84, 82, 69, 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, 71, 85, 128, + 78, 73, 80, 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69, 84, 89, 128, + 78, 73, 78, 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78, 128, 78, 73, 78, + 69, 84, 69, 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 78, + 73, 78, 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78, 68, 65, 178, 78, + 73, 78, 57, 128, 78, 73, 78, 128, 78, 73, 77, 128, 78, 73, 205, 78, 73, + 75, 79, 76, 83, 66, 85, 82, 199, 78, 73, 75, 72, 65, 72, 73, 84, 128, 78, + 73, 75, 65, 72, 73, 84, 128, 78, 73, 75, 65, 128, 78, 73, 72, 83, 72, 86, + 65, 83, 65, 128, 78, 73, 71, 73, 68, 65, 77, 73, 78, 128, 78, 73, 71, 73, + 68, 65, 69, 83, 72, 128, 78, 73, 71, 72, 84, 128, 78, 73, 71, 72, 212, + 78, 73, 71, 71, 65, 72, 73, 84, 65, 128, 78, 73, 69, 88, 128, 78, 73, 69, + 85, 78, 45, 84, 73, 75, 69, 85, 84, 128, 78, 73, 69, 85, 78, 45, 84, 72, + 73, 69, 85, 84, 72, 128, 78, 73, 69, 85, 78, 45, 83, 73, 79, 83, 128, 78, + 73, 69, 85, 78, 45, 82, 73, 69, 85, 76, 128, 78, 73, 69, 85, 78, 45, 80, + 73, 69, 85, 80, 128, 78, 73, 69, 85, 78, 45, 80, 65, 78, 83, 73, 79, 83, + 128, 78, 73, 69, 85, 78, 45, 75, 73, 89, 69, 79, 75, 128, 78, 73, 69, 85, + 78, 45, 72, 73, 69, 85, 72, 128, 78, 73, 69, 85, 78, 45, 67, 73, 69, 85, + 67, 128, 78, 73, 69, 85, 78, 45, 67, 72, 73, 69, 85, 67, 72, 128, 78, 73, + 69, 85, 206, 78, 73, 69, 80, 128, 78, 73, 69, 128, 78, 73, 66, 128, 78, + 73, 65, 128, 78, 73, 50, 128, 78, 72, 85, 69, 128, 78, 72, 74, 65, 128, + 78, 72, 128, 78, 71, 89, 69, 128, 78, 71, 86, 69, 128, 78, 71, 85, 85, + 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78, 71, 85, 79, + 128, 78, 71, 85, 65, 78, 128, 78, 71, 85, 65, 69, 84, 128, 78, 71, 85, + 65, 69, 128, 78, 71, 79, 88, 128, 78, 71, 79, 85, 128, 78, 71, 79, 213, + 78, 71, 79, 84, 128, 78, 71, 79, 81, 128, 78, 71, 79, 80, 128, 78, 71, + 79, 78, 128, 78, 71, 79, 77, 128, 78, 71, 79, 69, 72, 128, 78, 71, 79, + 69, 200, 78, 71, 207, 78, 71, 75, 89, 69, 69, 128, 78, 71, 75, 87, 65, + 69, 78, 128, 78, 71, 75, 85, 80, 128, 78, 71, 75, 85, 78, 128, 78, 71, + 75, 85, 77, 128, 78, 71, 75, 85, 69, 78, 90, 69, 85, 77, 128, 78, 71, 75, + 85, 197, 78, 71, 75, 73, 78, 68, 201, 78, 71, 75, 73, 69, 69, 128, 78, + 71, 75, 69, 85, 88, 128, 78, 71, 75, 69, 85, 82, 73, 128, 78, 71, 75, 69, + 85, 65, 69, 81, 128, 78, 71, 75, 69, 85, 65, 69, 77, 128, 78, 71, 75, 65, + 81, 128, 78, 71, 75, 65, 80, 128, 78, 71, 75, 65, 65, 77, 73, 128, 78, + 71, 75, 65, 128, 78, 71, 73, 69, 88, 128, 78, 71, 73, 69, 80, 128, 78, + 71, 73, 69, 128, 78, 71, 72, 65, 128, 78, 71, 71, 87, 65, 69, 78, 128, + 78, 71, 71, 85, 82, 65, 69, 128, 78, 71, 71, 85, 80, 128, 78, 71, 71, 85, + 79, 81, 128, 78, 71, 71, 85, 79, 209, 78, 71, 71, 85, 79, 78, 128, 78, + 71, 71, 85, 79, 77, 128, 78, 71, 71, 85, 77, 128, 78, 71, 71, 85, 69, 69, + 84, 128, 78, 71, 71, 85, 65, 69, 83, 72, 65, 197, 78, 71, 71, 85, 65, 69, + 206, 78, 71, 71, 85, 65, 128, 78, 71, 71, 85, 128, 78, 71, 71, 79, 79, + 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, 78, 71, 71, 69, 85, 88, + 128, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 71, 71, 69, 85, 65, 69, + 128, 78, 71, 71, 69, 213, 78, 71, 71, 69, 78, 128, 78, 71, 71, 69, 69, + 84, 128, 78, 71, 71, 69, 69, 69, 69, 128, 78, 71, 71, 69, 69, 128, 78, + 71, 71, 69, 128, 78, 71, 71, 65, 80, 128, 78, 71, 71, 65, 65, 77, 65, 69, + 128, 78, 71, 71, 65, 65, 77, 128, 78, 71, 71, 65, 65, 128, 78, 71, 71, + 128, 78, 71, 69, 88, 128, 78, 71, 69, 85, 82, 69, 85, 84, 128, 78, 71, + 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 69, 128, 78, 71, 69, 65, + 68, 65, 76, 128, 78, 71, 65, 88, 128, 78, 71, 65, 85, 128, 78, 71, 65, + 84, 128, 78, 71, 65, 211, 78, 71, 65, 81, 128, 78, 71, 65, 80, 128, 78, + 71, 65, 78, 71, 85, 128, 78, 71, 65, 78, 128, 78, 71, 65, 73, 128, 78, + 71, 65, 72, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, 78, 70, 128, 78, + 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 83, 80, 65, 80, 69, 82, 128, + 78, 69, 87, 76, 73, 78, 69, 128, 78, 69, 87, 76, 73, 78, 197, 78, 69, 87, + 128, 78, 69, 215, 78, 69, 85, 84, 82, 65, 76, 128, 78, 69, 85, 84, 82, + 65, 204, 78, 69, 85, 84, 69, 82, 128, 78, 69, 84, 87, 79, 82, 75, 69, + 196, 78, 69, 84, 128, 78, 69, 212, 78, 69, 83, 84, 69, 196, 78, 69, 82, + 196, 78, 69, 81, 85, 68, 65, 65, 128, 78, 69, 80, 84, 85, 78, 69, 128, + 78, 69, 80, 128, 78, 69, 79, 128, 78, 69, 207, 78, 69, 78, 79, 69, 128, + 78, 69, 78, 65, 78, 79, 128, 78, 69, 78, 128, 78, 69, 76, 128, 78, 69, + 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 79, 206, 78, 69, 71, 65, 84, + 69, 196, 78, 69, 67, 75, 84, 73, 69, 128, 78, 69, 67, 75, 128, 78, 69, + 66, 69, 78, 83, 84, 73, 77, 77, 69, 128, 78, 68, 85, 88, 128, 78, 68, 85, + 84, 128, 78, 68, 85, 82, 88, 128, 78, 68, 85, 82, 128, 78, 68, 85, 80, + 128, 78, 68, 85, 78, 128, 78, 68, 213, 78, 68, 79, 88, 128, 78, 68, 79, + 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, 79, 128, 78, 68, 79, 78, 128, + 78, 68, 79, 77, 66, 85, 128, 78, 68, 79, 76, 197, 78, 68, 73, 88, 128, + 78, 68, 73, 84, 128, 78, 68, 73, 81, 128, 78, 68, 73, 80, 128, 78, 68, + 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73, 68, 65, 128, 78, 68, + 73, 65, 81, 128, 78, 68, 69, 88, 128, 78, 68, 69, 85, 88, 128, 78, 68, + 69, 85, 84, 128, 78, 68, 69, 85, 65, 69, 82, 69, 69, 128, 78, 68, 69, 80, + 128, 78, 68, 69, 69, 128, 78, 68, 69, 128, 78, 68, 65, 88, 128, 78, 68, + 65, 84, 128, 78, 68, 65, 80, 128, 78, 68, 65, 77, 128, 78, 68, 65, 65, + 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 68, 65, 65, 128, 78, 68, 65, + 193, 78, 67, 72, 65, 85, 128, 78, 66, 89, 88, 128, 78, 66, 89, 84, 128, + 78, 66, 89, 82, 88, 128, 78, 66, 89, 82, 128, 78, 66, 89, 80, 128, 78, + 66, 89, 128, 78, 66, 85, 88, 128, 78, 66, 85, 84, 128, 78, 66, 85, 82, + 88, 128, 78, 66, 85, 82, 128, 78, 66, 85, 80, 128, 78, 66, 85, 128, 78, + 66, 79, 88, 128, 78, 66, 79, 84, 128, 78, 66, 79, 80, 128, 78, 66, 79, + 128, 78, 66, 73, 88, 128, 78, 66, 73, 84, 128, 78, 66, 73, 80, 128, 78, + 66, 73, 69, 88, 128, 78, 66, 73, 69, 80, 128, 78, 66, 73, 69, 128, 78, + 66, 73, 128, 78, 66, 72, 128, 78, 66, 65, 88, 128, 78, 66, 65, 84, 128, + 78, 66, 65, 80, 128, 78, 66, 65, 128, 78, 65, 89, 65, 78, 78, 65, 128, + 78, 65, 89, 128, 78, 65, 88, 73, 65, 206, 78, 65, 88, 128, 78, 65, 85, + 84, 72, 83, 128, 78, 65, 85, 83, 69, 65, 84, 69, 196, 78, 65, 85, 68, 73, + 218, 78, 65, 84, 85, 82, 65, 204, 78, 65, 84, 73, 79, 78, 65, 204, 78, + 65, 83, 75, 65, 80, 201, 78, 65, 83, 72, 73, 128, 78, 65, 83, 65, 76, 73, + 90, 65, 84, 73, 79, 78, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, + 206, 78, 65, 83, 65, 204, 78, 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, + 65, 81, 128, 78, 65, 79, 211, 78, 65, 78, 83, 65, 78, 65, 81, 128, 78, + 65, 78, 71, 77, 79, 78, 84, 72, 79, 128, 78, 65, 78, 68, 128, 78, 65, 78, + 65, 128, 78, 65, 77, 69, 128, 78, 65, 77, 197, 78, 65, 77, 50, 128, 78, + 65, 77, 128, 78, 65, 75, 128, 78, 65, 73, 82, 193, 78, 65, 73, 204, 78, + 65, 71, 82, 201, 78, 65, 71, 65, 82, 128, 78, 65, 71, 65, 128, 78, 65, + 71, 193, 78, 65, 71, 128, 78, 65, 199, 78, 65, 69, 128, 78, 65, 66, 76, + 65, 128, 78, 65, 66, 65, 84, 65, 69, 65, 206, 78, 65, 65, 83, 73, 75, 89, + 65, 89, 65, 128, 78, 65, 65, 75, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, + 65, 73, 128, 78, 65, 193, 78, 65, 52, 128, 78, 65, 50, 128, 78, 65, 45, + 50, 128, 78, 48, 52, 50, 128, 78, 48, 52, 49, 128, 78, 48, 52, 48, 128, + 78, 48, 51, 57, 128, 78, 48, 51, 56, 128, 78, 48, 51, 55, 65, 128, 78, + 48, 51, 55, 128, 78, 48, 51, 54, 128, 78, 48, 51, 53, 65, 128, 78, 48, + 51, 53, 128, 78, 48, 51, 52, 65, 128, 78, 48, 51, 52, 128, 78, 48, 51, + 51, 65, 128, 78, 48, 51, 51, 128, 78, 48, 51, 50, 128, 78, 48, 51, 49, + 128, 78, 48, 51, 48, 128, 78, 48, 50, 57, 128, 78, 48, 50, 56, 128, 78, + 48, 50, 55, 128, 78, 48, 50, 54, 128, 78, 48, 50, 53, 65, 128, 78, 48, + 50, 53, 128, 78, 48, 50, 52, 128, 78, 48, 50, 51, 128, 78, 48, 50, 50, + 128, 78, 48, 50, 49, 128, 78, 48, 50, 48, 128, 78, 48, 49, 57, 128, 78, + 48, 49, 56, 66, 128, 78, 48, 49, 56, 65, 128, 78, 48, 49, 56, 128, 78, + 48, 49, 55, 128, 78, 48, 49, 54, 128, 78, 48, 49, 53, 128, 78, 48, 49, + 52, 128, 78, 48, 49, 51, 128, 78, 48, 49, 50, 128, 78, 48, 49, 49, 128, + 78, 48, 49, 48, 128, 78, 48, 48, 57, 128, 78, 48, 48, 56, 128, 78, 48, + 48, 55, 128, 78, 48, 48, 54, 128, 78, 48, 48, 53, 128, 78, 48, 48, 52, + 128, 78, 48, 48, 51, 128, 78, 48, 48, 50, 128, 78, 48, 48, 49, 128, 78, + 45, 67, 82, 69, 197, 78, 45, 65, 82, 217, 77, 89, 88, 128, 77, 89, 84, + 128, 77, 89, 83, 76, 73, 84, 69, 128, 77, 89, 80, 128, 77, 89, 65, 128, + 77, 89, 193, 77, 89, 128, 77, 217, 77, 87, 79, 79, 128, 77, 87, 79, 128, + 77, 87, 73, 73, 128, 77, 87, 73, 128, 77, 87, 69, 69, 128, 77, 87, 69, + 128, 77, 87, 65, 65, 128, 77, 87, 65, 128, 77, 87, 128, 77, 215, 77, 86, + 83, 128, 77, 86, 79, 80, 128, 77, 86, 73, 128, 77, 86, 69, 85, 65, 69, + 78, 71, 65, 77, 128, 77, 86, 128, 77, 214, 77, 85, 88, 128, 77, 85, 85, + 83, 73, 75, 65, 84, 79, 65, 78, 128, 77, 85, 85, 82, 68, 72, 65, 74, 193, + 77, 85, 85, 128, 77, 85, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, + 73, 195, 77, 85, 83, 72, 82, 79, 79, 77, 128, 77, 85, 83, 72, 51, 128, + 77, 85, 83, 72, 179, 77, 85, 83, 72, 128, 77, 85, 83, 200, 77, 85, 83, + 128, 77, 85, 82, 88, 128, 77, 85, 82, 71, 85, 50, 128, 77, 85, 82, 69, + 128, 77, 85, 82, 68, 65, 128, 77, 85, 82, 68, 193, 77, 85, 82, 128, 77, + 85, 81, 68, 65, 77, 128, 77, 85, 80, 128, 77, 85, 79, 88, 128, 77, 85, + 79, 84, 128, 77, 85, 79, 80, 128, 77, 85, 79, 77, 65, 69, 128, 77, 85, + 79, 128, 77, 85, 78, 83, 85, 66, 128, 77, 85, 78, 65, 72, 128, 77, 85, + 78, 128, 77, 85, 76, 84, 73, 83, 69, 84, 128, 77, 85, 76, 84, 73, 83, 69, + 212, 77, 85, 76, 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 77, 85, + 76, 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 206, 77, 85, 76, 84, 73, 80, + 76, 69, 128, 77, 85, 76, 84, 73, 80, 76, 197, 77, 85, 76, 84, 73, 79, 67, + 85, 76, 65, 210, 77, 85, 76, 84, 73, 77, 65, 80, 128, 77, 85, 76, 84, + 201, 77, 85, 76, 84, 65, 78, 201, 77, 85, 75, 80, 72, 82, 69, 78, 71, + 128, 77, 85, 73, 78, 128, 77, 85, 71, 83, 128, 77, 85, 71, 128, 77, 85, + 199, 77, 85, 69, 78, 128, 77, 85, 69, 128, 77, 85, 67, 72, 128, 77, 85, + 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 83, 128, 77, 85, 65, + 78, 128, 77, 85, 65, 69, 128, 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, + 77, 213, 77, 83, 128, 77, 82, 207, 77, 80, 65, 128, 77, 79, 89, 65, 73, + 128, 77, 79, 88, 128, 77, 79, 86, 73, 197, 77, 79, 86, 69, 211, 77, 79, + 86, 69, 77, 69, 78, 84, 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 77, 79, + 86, 69, 77, 69, 78, 84, 45, 72, 73, 78, 71, 197, 77, 79, 86, 69, 77, 69, + 78, 84, 45, 70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 77, 79, 86, 69, 77, + 69, 78, 84, 45, 68, 73, 65, 71, 79, 78, 65, 204, 77, 79, 86, 69, 77, 69, + 78, 84, 128, 77, 79, 86, 69, 77, 69, 78, 212, 77, 79, 86, 69, 196, 77, + 79, 86, 69, 128, 77, 79, 85, 84, 72, 128, 77, 79, 85, 83, 69, 128, 77, + 79, 85, 83, 197, 77, 79, 85, 78, 84, 65, 73, 78, 83, 128, 77, 79, 85, 78, + 84, 65, 73, 78, 128, 77, 79, 85, 78, 84, 65, 73, 206, 77, 79, 85, 78, + 212, 77, 79, 85, 78, 68, 128, 77, 79, 85, 78, 196, 77, 79, 84, 79, 82, + 87, 65, 89, 128, 77, 79, 84, 79, 82, 67, 89, 67, 76, 69, 128, 77, 79, 84, + 79, 210, 77, 79, 84, 72, 69, 82, 128, 77, 79, 84, 72, 69, 210, 77, 79, + 84, 128, 77, 79, 83, 81, 85, 69, 128, 77, 79, 82, 84, 85, 85, 77, 128, + 77, 79, 82, 84, 65, 82, 128, 77, 79, 82, 80, 72, 79, 76, 79, 71, 73, 67, + 65, 204, 77, 79, 82, 78, 73, 78, 71, 128, 77, 79, 80, 128, 77, 79, 79, + 83, 69, 45, 67, 82, 69, 197, 77, 79, 79, 78, 128, 77, 79, 79, 206, 77, + 79, 79, 77, 80, 85, 81, 128, 77, 79, 79, 77, 69, 85, 84, 128, 77, 79, 79, + 68, 128, 77, 79, 79, 196, 77, 79, 79, 128, 77, 79, 78, 84, 73, 69, 69, + 78, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78, 83, + 84, 69, 82, 128, 77, 79, 78, 79, 83, 84, 65, 66, 76, 197, 77, 79, 78, 79, + 83, 80, 65, 67, 197, 77, 79, 78, 79, 82, 65, 73, 76, 128, 77, 79, 78, 79, + 71, 82, 65, 80, 200, 77, 79, 78, 79, 71, 82, 65, 77, 77, 79, 211, 77, 79, + 78, 79, 71, 82, 65, 205, 77, 79, 78, 79, 70, 79, 78, 73, 65, 83, 128, 77, + 79, 78, 79, 67, 85, 76, 65, 210, 77, 79, 78, 75, 69, 89, 128, 77, 79, 78, + 75, 69, 217, 77, 79, 78, 73, 128, 77, 79, 78, 71, 75, 69, 85, 65, 69, 81, + 128, 77, 79, 78, 69, 89, 45, 77, 79, 85, 84, 200, 77, 79, 78, 69, 217, + 77, 79, 78, 128, 77, 79, 206, 77, 79, 76, 128, 77, 79, 72, 65, 77, 77, + 65, 196, 77, 79, 68, 85, 76, 207, 77, 79, 68, 73, 70, 73, 69, 82, 45, 57, + 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 56, 128, 77, 79, 68, 73, 70, 73, + 69, 82, 45, 55, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 54, 128, 77, 79, + 68, 73, 70, 73, 69, 82, 45, 53, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, + 52, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 51, 128, 77, 79, 68, 73, 70, + 73, 69, 82, 45, 50, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 54, 128, + 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 53, 128, 77, 79, 68, 73, 70, 73, + 69, 82, 45, 49, 52, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 51, 128, + 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 50, 128, 77, 79, 68, 73, 70, 73, + 69, 82, 45, 49, 49, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 48, 128, + 77, 79, 68, 73, 70, 73, 69, 82, 128, 77, 79, 68, 201, 77, 79, 68, 69, 83, + 84, 89, 128, 77, 79, 68, 69, 82, 206, 77, 79, 68, 69, 77, 128, 77, 79, + 68, 69, 76, 83, 128, 77, 79, 68, 69, 76, 128, 77, 79, 68, 69, 128, 77, + 79, 66, 73, 76, 197, 77, 79, 65, 128, 77, 207, 77, 78, 89, 65, 205, 77, + 78, 65, 83, 128, 77, 77, 83, 80, 128, 77, 77, 128, 77, 205, 77, 76, 65, + 128, 77, 76, 128, 77, 75, 80, 65, 82, 65, 209, 77, 73, 88, 128, 77, 73, + 84, 128, 77, 73, 83, 82, 65, 128, 77, 73, 82, 73, 66, 65, 65, 82, 85, + 128, 77, 73, 82, 73, 128, 77, 73, 82, 69, 68, 128, 77, 73, 80, 128, 77, + 73, 78, 89, 128, 77, 73, 78, 85, 83, 45, 79, 82, 45, 80, 76, 85, 211, 77, + 73, 78, 85, 83, 128, 77, 73, 78, 73, 83, 84, 69, 82, 128, 77, 73, 78, 73, + 77, 73, 90, 69, 128, 77, 73, 78, 73, 77, 65, 128, 77, 73, 78, 73, 68, 73, + 83, 67, 128, 77, 73, 78, 73, 66, 85, 83, 128, 77, 73, 77, 69, 128, 77, + 73, 77, 128, 77, 73, 76, 76, 73, 79, 78, 83, 128, 77, 73, 76, 76, 73, 79, + 78, 211, 77, 73, 76, 76, 69, 84, 128, 77, 73, 76, 76, 197, 77, 73, 76, + 204, 77, 73, 76, 75, 217, 77, 73, 76, 75, 128, 77, 73, 76, 73, 84, 65, + 82, 217, 77, 73, 76, 128, 77, 73, 75, 85, 82, 79, 78, 128, 77, 73, 75, + 82, 79, 206, 77, 73, 75, 82, 73, 128, 77, 73, 73, 78, 128, 77, 73, 73, + 77, 128, 77, 73, 73, 128, 77, 73, 199, 77, 73, 69, 88, 128, 77, 73, 69, + 85, 77, 45, 84, 73, 75, 69, 85, 84, 128, 77, 73, 69, 85, 77, 45, 83, 83, + 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, + 71, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 82, 73, 69, 85, 76, + 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, + 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 128, 77, 73, 69, 85, 77, 45, + 80, 65, 78, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 78, 73, 69, 85, + 78, 128, 77, 73, 69, 85, 77, 45, 67, 73, 69, 85, 67, 128, 77, 73, 69, 85, + 77, 45, 67, 72, 73, 69, 85, 67, 72, 128, 77, 73, 69, 85, 205, 77, 73, 69, + 80, 128, 77, 73, 69, 69, 128, 77, 73, 69, 128, 77, 73, 68, 76, 73, 78, + 197, 77, 73, 68, 68, 76, 69, 45, 87, 69, 76, 83, 200, 77, 73, 68, 68, 76, + 69, 128, 77, 73, 68, 45, 76, 69, 86, 69, 204, 77, 73, 196, 77, 73, 67, + 82, 79, 83, 67, 79, 80, 69, 128, 77, 73, 67, 82, 79, 80, 72, 79, 78, 69, + 128, 77, 73, 67, 82, 207, 77, 73, 67, 210, 77, 72, 90, 128, 77, 72, 65, + 128, 77, 72, 128, 77, 71, 85, 88, 128, 77, 71, 85, 84, 128, 77, 71, 85, + 82, 88, 128, 77, 71, 85, 82, 128, 77, 71, 85, 80, 128, 77, 71, 85, 79, + 88, 128, 77, 71, 85, 79, 80, 128, 77, 71, 85, 79, 128, 77, 71, 85, 128, + 77, 71, 79, 88, 128, 77, 71, 79, 84, 128, 77, 71, 79, 80, 128, 77, 71, + 79, 128, 77, 71, 207, 77, 71, 73, 69, 88, 128, 77, 71, 73, 69, 128, 77, + 71, 69, 88, 128, 77, 71, 69, 80, 128, 77, 71, 69, 128, 77, 71, 66, 85, + 128, 77, 71, 66, 79, 79, 128, 77, 71, 66, 79, 70, 85, 77, 128, 77, 71, + 66, 79, 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 85, 78, 128, 77, 71, + 66, 69, 78, 128, 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, + 66, 65, 83, 65, 81, 128, 77, 71, 66, 65, 83, 65, 128, 77, 71, 65, 88, + 128, 77, 71, 65, 84, 128, 77, 71, 65, 80, 128, 77, 71, 65, 128, 77, 71, + 128, 77, 70, 79, 78, 128, 77, 70, 79, 206, 77, 70, 79, 128, 77, 70, 73, + 89, 65, 81, 128, 77, 70, 73, 69, 69, 128, 77, 70, 69, 85, 84, 128, 77, + 70, 69, 85, 81, 128, 77, 70, 69, 85, 65, 69, 128, 77, 70, 65, 65, 128, + 77, 69, 90, 90, 79, 128, 77, 69, 88, 128, 77, 69, 85, 212, 77, 69, 85, + 81, 128, 77, 69, 85, 78, 74, 79, 77, 78, 68, 69, 85, 81, 128, 77, 69, 85, + 78, 128, 77, 69, 84, 82, 79, 128, 77, 69, 84, 82, 73, 67, 65, 204, 77, + 69, 84, 82, 73, 65, 128, 77, 69, 84, 82, 69, 84, 69, 211, 77, 69, 84, 79, + 66, 69, 76, 85, 83, 128, 77, 69, 84, 69, 75, 128, 77, 69, 84, 69, 71, + 128, 77, 69, 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, + 73, 65, 206, 77, 69, 83, 83, 65, 71, 69, 128, 77, 69, 83, 83, 65, 71, + 197, 77, 69, 83, 79, 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 77, + 69, 82, 75, 72, 65, 128, 77, 69, 82, 75, 72, 193, 77, 69, 82, 73, 68, 73, + 65, 78, 83, 128, 77, 69, 82, 73, 128, 77, 69, 82, 71, 69, 128, 77, 69, + 82, 67, 85, 82, 89, 128, 77, 69, 82, 67, 85, 82, 217, 77, 69, 78, 79, 82, + 65, 200, 77, 69, 78, 79, 69, 128, 77, 69, 78, 68, 85, 84, 128, 77, 69, + 78, 128, 77, 69, 77, 79, 128, 77, 69, 77, 66, 69, 82, 83, 72, 73, 80, + 128, 77, 69, 77, 66, 69, 82, 128, 77, 69, 77, 66, 69, 210, 77, 69, 77, + 45, 81, 79, 80, 72, 128, 77, 69, 77, 128, 77, 69, 205, 77, 69, 76, 79, + 68, 73, 195, 77, 69, 76, 73, 75, 128, 77, 69, 73, 90, 73, 128, 77, 69, + 71, 65, 84, 79, 78, 128, 77, 69, 71, 65, 80, 72, 79, 78, 69, 128, 77, 69, + 71, 65, 76, 73, 128, 77, 69, 69, 84, 79, 82, 85, 128, 77, 69, 69, 84, 69, + 201, 77, 69, 69, 84, 128, 77, 69, 69, 77, 85, 128, 77, 69, 69, 77, 128, + 77, 69, 69, 202, 77, 69, 69, 69, 69, 128, 77, 69, 68, 73, 85, 77, 128, + 77, 69, 68, 73, 85, 205, 77, 69, 68, 73, 67, 73, 78, 69, 128, 77, 69, 68, + 73, 67, 65, 204, 77, 69, 68, 65, 76, 128, 77, 69, 65, 84, 128, 77, 69, + 65, 212, 77, 69, 65, 83, 85, 82, 69, 196, 77, 69, 65, 83, 85, 82, 69, + 128, 77, 69, 65, 83, 85, 82, 197, 77, 68, 85, 206, 77, 196, 77, 67, 72, + 213, 77, 67, 72, 65, 206, 77, 195, 77, 66, 85, 85, 128, 77, 66, 85, 79, + 81, 128, 77, 66, 85, 79, 128, 77, 66, 85, 69, 128, 77, 66, 85, 65, 69, + 77, 128, 77, 66, 85, 65, 69, 128, 77, 66, 79, 79, 128, 77, 66, 79, 128, + 77, 66, 73, 84, 128, 77, 66, 73, 212, 77, 66, 73, 82, 73, 69, 69, 78, + 128, 77, 66, 73, 128, 77, 66, 69, 85, 88, 128, 77, 66, 69, 85, 82, 73, + 128, 77, 66, 69, 85, 77, 128, 77, 66, 69, 82, 65, 69, 128, 77, 66, 69, + 78, 128, 77, 66, 69, 69, 75, 69, 69, 84, 128, 77, 66, 69, 69, 128, 77, + 66, 69, 128, 77, 66, 65, 81, 128, 77, 66, 65, 78, 89, 73, 128, 77, 66, + 65, 65, 82, 65, 69, 128, 77, 66, 65, 65, 75, 69, 84, 128, 77, 66, 65, 65, + 128, 77, 66, 65, 193, 77, 66, 193, 77, 66, 52, 128, 77, 66, 51, 128, 77, + 66, 50, 128, 77, 65, 89, 69, 203, 77, 65, 89, 65, 78, 78, 65, 128, 77, + 65, 89, 128, 77, 65, 88, 73, 77, 73, 90, 69, 128, 77, 65, 88, 73, 77, 65, + 128, 77, 65, 88, 128, 77, 65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, + 77, 65, 84, 82, 73, 88, 128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, + 65, 84, 128, 77, 65, 83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, + 83, 83, 65, 71, 69, 128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, + 77, 65, 83, 72, 70, 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, + 67, 85, 76, 73, 78, 197, 77, 65, 82, 89, 128, 77, 65, 82, 87, 65, 82, + 201, 77, 65, 82, 85, 75, 85, 128, 77, 65, 82, 84, 89, 82, 73, 193, 77, + 65, 82, 84, 73, 65, 204, 77, 65, 82, 82, 89, 73, 78, 199, 77, 65, 82, 82, + 73, 65, 71, 197, 77, 65, 82, 75, 211, 77, 65, 82, 75, 69, 82, 128, 77, + 65, 82, 75, 45, 52, 128, 77, 65, 82, 75, 45, 51, 128, 77, 65, 82, 75, 45, + 50, 128, 77, 65, 82, 75, 45, 49, 128, 77, 65, 82, 69, 128, 77, 65, 82, + 67, 72, 69, 206, 77, 65, 82, 67, 72, 128, 77, 65, 82, 67, 65, 84, 79, 45, + 83, 84, 65, 67, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65, 84, 79, 128, 77, + 65, 82, 67, 65, 83, 73, 84, 69, 128, 77, 65, 82, 66, 85, 84, 65, 128, 77, + 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, 65, 70, 128, 77, + 65, 81, 128, 77, 65, 80, 76, 197, 77, 65, 80, 73, 81, 128, 77, 65, 208, + 77, 65, 79, 128, 77, 65, 78, 84, 69, 76, 80, 73, 69, 67, 197, 77, 65, 78, + 83, 89, 79, 78, 128, 77, 65, 78, 83, 85, 65, 69, 128, 77, 65, 78, 78, 65, 218, 77, 65, 78, 78, 65, 128, 77, 65, 78, 73, 67, 72, 65, 69, 65, 206, 77, 65, 78, 71, 65, 76, 65, 77, 128, 77, 65, 78, 68, 65, 73, 76, 73, 78, 199, 77, 65, 78, 68, 65, 73, 195, 77, 65, 78, 67, 72, 213, 77, 65, 78, @@ -2322,1420 +2345,1426 @@ static unsigned char lexicon[] = { 48, 48, 178, 77, 48, 48, 49, 66, 128, 77, 48, 48, 49, 65, 128, 77, 48, 48, 49, 128, 77, 48, 48, 177, 76, 218, 76, 89, 89, 128, 76, 89, 88, 128, 76, 89, 84, 128, 76, 89, 82, 88, 128, 76, 89, 82, 128, 76, 89, 80, 128, - 76, 89, 73, 84, 128, 76, 89, 68, 73, 65, 206, 76, 89, 67, 73, 65, 206, - 76, 88, 128, 76, 87, 79, 79, 128, 76, 87, 79, 128, 76, 87, 73, 73, 128, - 76, 87, 73, 128, 76, 87, 69, 128, 76, 87, 65, 65, 128, 76, 87, 65, 128, - 76, 85, 88, 128, 76, 85, 85, 128, 76, 85, 84, 128, 76, 85, 82, 88, 128, - 76, 85, 80, 128, 76, 85, 79, 88, 128, 76, 85, 79, 84, 128, 76, 85, 79, - 80, 128, 76, 85, 79, 128, 76, 85, 78, 71, 83, 73, 128, 76, 85, 78, 65, - 84, 197, 76, 85, 205, 76, 85, 76, 128, 76, 85, 73, 83, 128, 76, 85, 72, - 85, 82, 128, 76, 85, 72, 128, 76, 85, 200, 76, 85, 71, 71, 65, 71, 69, - 128, 76, 85, 71, 65, 76, 128, 76, 85, 71, 65, 204, 76, 85, 69, 128, 76, - 85, 197, 76, 85, 66, 128, 76, 85, 65, 69, 80, 128, 76, 85, 51, 128, 76, - 85, 50, 128, 76, 85, 178, 76, 82, 79, 128, 76, 82, 77, 128, 76, 82, 73, - 128, 76, 82, 69, 128, 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, - 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 69, 82, 69, 196, 76, 79, 87, - 69, 210, 76, 79, 87, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 76, 79, - 87, 45, 77, 73, 196, 76, 79, 87, 45, 70, 65, 76, 76, 73, 78, 199, 76, 79, - 87, 45, 185, 76, 79, 86, 197, 76, 79, 85, 82, 69, 128, 76, 79, 85, 68, - 83, 80, 69, 65, 75, 69, 82, 128, 76, 79, 85, 68, 76, 217, 76, 79, 84, 85, - 83, 128, 76, 79, 84, 128, 76, 79, 82, 82, 89, 128, 76, 79, 82, 82, 65, - 73, 78, 69, 128, 76, 79, 81, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, - 76, 79, 79, 80, 69, 196, 76, 79, 79, 80, 128, 76, 79, 79, 208, 76, 79, - 79, 78, 128, 76, 79, 79, 203, 76, 79, 79, 128, 76, 79, 78, 83, 85, 77, - 128, 76, 79, 78, 71, 65, 128, 76, 79, 78, 71, 193, 76, 79, 78, 71, 45, - 66, 82, 65, 78, 67, 72, 45, 89, 82, 128, 76, 79, 78, 71, 45, 66, 82, 65, - 78, 67, 72, 45, 83, 79, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, - 45, 79, 83, 211, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 77, 65, - 68, 210, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 72, 65, 71, 65, - 76, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 65, 210, 76, 79, - 77, 77, 65, 69, 128, 76, 79, 77, 128, 76, 79, 205, 76, 79, 76, 76, 73, - 80, 79, 80, 128, 76, 79, 76, 76, 128, 76, 79, 71, 210, 76, 79, 71, 79, - 84, 89, 80, 197, 76, 79, 71, 79, 71, 82, 65, 205, 76, 79, 71, 128, 76, - 79, 68, 69, 83, 84, 79, 78, 69, 128, 76, 79, 67, 79, 77, 79, 84, 73, 86, - 69, 128, 76, 79, 67, 75, 73, 78, 71, 45, 83, 72, 73, 70, 212, 76, 79, 67, - 203, 76, 79, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, 73, 79, 78, - 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 76, 79, 67, 65, 84, 73, 79, 78, - 45, 70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 76, 79, 67, 65, 84, 73, 79, - 206, 76, 79, 65, 128, 76, 78, 128, 76, 76, 85, 85, 128, 76, 76, 79, 79, - 128, 76, 76, 76, 85, 85, 128, 76, 76, 76, 85, 128, 76, 76, 76, 79, 79, - 128, 76, 76, 76, 79, 128, 76, 76, 76, 73, 73, 128, 76, 76, 76, 73, 128, - 76, 76, 76, 69, 69, 128, 76, 76, 76, 69, 128, 76, 76, 76, 65, 85, 128, - 76, 76, 76, 65, 73, 128, 76, 76, 76, 65, 65, 128, 76, 76, 76, 65, 128, - 76, 76, 76, 128, 76, 74, 85, 68, 73, 74, 69, 128, 76, 74, 69, 128, 76, - 74, 128, 76, 73, 88, 128, 76, 73, 87, 78, 128, 76, 73, 86, 82, 197, 76, - 73, 84, 84, 76, 69, 128, 76, 73, 84, 84, 76, 197, 76, 73, 84, 84, 69, - 210, 76, 73, 84, 82, 193, 76, 73, 84, 200, 76, 73, 83, 213, 76, 73, 83, - 128, 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 81, 128, 76, 73, - 80, 83, 84, 73, 67, 75, 128, 76, 73, 80, 211, 76, 73, 208, 76, 73, 78, - 75, 73, 78, 199, 76, 73, 78, 75, 69, 196, 76, 73, 78, 203, 76, 73, 78, - 71, 83, 65, 128, 76, 73, 78, 69, 83, 128, 76, 73, 78, 69, 211, 76, 73, - 78, 69, 45, 57, 128, 76, 73, 78, 69, 45, 55, 128, 76, 73, 78, 69, 45, 51, - 128, 76, 73, 78, 69, 45, 49, 128, 76, 73, 77, 77, 85, 52, 128, 76, 73, - 77, 77, 85, 50, 128, 76, 73, 77, 77, 85, 128, 76, 73, 77, 77, 213, 76, - 73, 77, 73, 84, 69, 196, 76, 73, 77, 73, 84, 65, 84, 73, 79, 78, 128, 76, - 73, 77, 73, 84, 128, 76, 73, 77, 69, 128, 76, 73, 77, 66, 213, 76, 73, - 77, 66, 211, 76, 73, 77, 194, 76, 73, 76, 89, 128, 76, 73, 76, 73, 84, - 72, 128, 76, 73, 76, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, 128, 76, - 73, 71, 72, 84, 78, 73, 78, 199, 76, 73, 71, 72, 84, 72, 79, 85, 83, 69, - 128, 76, 73, 71, 72, 84, 128, 76, 73, 71, 65, 84, 73, 78, 199, 76, 73, - 70, 84, 69, 82, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 128, 76, 73, - 69, 84, 128, 76, 73, 69, 80, 128, 76, 73, 69, 69, 128, 76, 73, 69, 128, - 76, 73, 68, 128, 76, 73, 67, 75, 73, 78, 199, 76, 73, 66, 82, 65, 128, - 76, 73, 66, 69, 82, 84, 89, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, - 72, 73, 73, 128, 76, 72, 65, 86, 73, 89, 65, 78, 73, 128, 76, 72, 65, - 199, 76, 72, 65, 65, 128, 76, 72, 128, 76, 69, 90, 72, 128, 76, 69, 88, - 128, 76, 69, 86, 73, 84, 65, 84, 73, 78, 71, 128, 76, 69, 85, 77, 128, - 76, 69, 85, 65, 69, 80, 128, 76, 69, 85, 65, 69, 77, 128, 76, 69, 85, - 128, 76, 69, 213, 76, 69, 84, 84, 69, 82, 83, 128, 76, 69, 84, 84, 69, - 82, 128, 76, 69, 212, 76, 69, 83, 83, 69, 210, 76, 69, 83, 83, 45, 84, - 72, 65, 78, 128, 76, 69, 83, 83, 45, 84, 72, 65, 206, 76, 69, 80, 67, 72, - 193, 76, 69, 80, 128, 76, 69, 79, 80, 65, 82, 68, 128, 76, 69, 79, 128, - 76, 69, 78, 84, 73, 67, 85, 76, 65, 210, 76, 69, 78, 73, 83, 128, 76, 69, - 78, 73, 211, 76, 69, 78, 71, 84, 72, 69, 78, 69, 82, 128, 76, 69, 78, 71, - 84, 72, 45, 55, 128, 76, 69, 78, 71, 84, 72, 45, 54, 128, 76, 69, 78, 71, - 84, 72, 45, 53, 128, 76, 69, 78, 71, 84, 72, 45, 52, 128, 76, 69, 78, 71, - 84, 72, 45, 51, 128, 76, 69, 78, 71, 84, 72, 45, 50, 128, 76, 69, 78, 71, - 84, 72, 45, 49, 128, 76, 69, 78, 71, 84, 200, 76, 69, 78, 71, 65, 128, - 76, 69, 78, 71, 193, 76, 69, 77, 79, 78, 128, 76, 69, 77, 79, 73, 128, - 76, 69, 76, 69, 84, 128, 76, 69, 76, 69, 212, 76, 69, 203, 76, 69, 73, - 77, 77, 65, 128, 76, 69, 73, 77, 77, 193, 76, 69, 73, 128, 76, 69, 71, - 83, 128, 76, 69, 71, 73, 79, 78, 128, 76, 69, 71, 69, 84, 79, 211, 76, - 69, 71, 128, 76, 69, 199, 76, 69, 70, 84, 87, 65, 82, 68, 83, 128, 76, - 69, 70, 84, 45, 84, 79, 45, 82, 73, 71, 72, 212, 76, 69, 70, 84, 45, 83, - 84, 69, 205, 76, 69, 70, 84, 45, 83, 73, 68, 197, 76, 69, 70, 84, 45, 83, - 72, 65, 68, 69, 196, 76, 69, 70, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, - 76, 69, 70, 84, 45, 76, 73, 71, 72, 84, 69, 196, 76, 69, 70, 84, 45, 72, - 65, 78, 68, 69, 196, 76, 69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, 84, - 45, 70, 65, 67, 73, 78, 199, 76, 69, 70, 84, 128, 76, 69, 69, 82, 65, 69, - 87, 65, 128, 76, 69, 69, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 68, - 71, 69, 82, 128, 76, 69, 65, 84, 72, 69, 82, 128, 76, 69, 65, 70, 128, - 76, 69, 65, 198, 76, 69, 65, 68, 73, 78, 199, 76, 69, 65, 68, 69, 82, - 128, 76, 69, 65, 196, 76, 68, 65, 78, 128, 76, 68, 50, 128, 76, 67, 201, - 76, 67, 197, 76, 65, 90, 217, 76, 65, 89, 65, 78, 78, 65, 128, 76, 65, - 88, 128, 76, 65, 87, 128, 76, 65, 215, 76, 65, 85, 76, 65, 128, 76, 65, - 85, 75, 65, 218, 76, 65, 85, 74, 128, 76, 65, 84, 73, 78, 65, 84, 197, - 76, 65, 84, 73, 75, 128, 76, 65, 84, 69, 82, 65, 204, 76, 65, 84, 197, - 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 201, - 76, 65, 82, 71, 69, 83, 84, 128, 76, 65, 82, 71, 69, 210, 76, 65, 82, 71, - 69, 128, 76, 65, 82, 71, 197, 76, 65, 81, 128, 76, 65, 80, 65, 81, 128, - 76, 65, 207, 76, 65, 78, 84, 69, 82, 78, 128, 76, 65, 78, 71, 85, 65, 71, - 197, 76, 65, 78, 69, 83, 128, 76, 65, 78, 128, 76, 65, 77, 80, 128, 76, - 65, 77, 69, 68, 72, 128, 76, 65, 77, 69, 68, 128, 76, 65, 77, 69, 196, - 76, 65, 77, 69, 128, 76, 65, 77, 197, 76, 65, 77, 68, 65, 128, 76, 65, - 77, 68, 128, 76, 65, 77, 66, 68, 193, 76, 65, 77, 65, 68, 72, 128, 76, - 65, 76, 128, 76, 65, 204, 76, 65, 75, 75, 72, 65, 78, 71, 89, 65, 79, - 128, 76, 65, 75, 45, 55, 52, 57, 128, 76, 65, 75, 45, 55, 50, 52, 128, - 76, 65, 75, 45, 54, 54, 56, 128, 76, 65, 75, 45, 54, 52, 56, 128, 76, 65, - 75, 45, 54, 52, 184, 76, 65, 75, 45, 54, 51, 54, 128, 76, 65, 75, 45, 54, - 49, 55, 128, 76, 65, 75, 45, 54, 49, 183, 76, 65, 75, 45, 54, 48, 56, - 128, 76, 65, 75, 45, 53, 53, 48, 128, 76, 65, 75, 45, 52, 57, 53, 128, - 76, 65, 75, 45, 52, 57, 51, 128, 76, 65, 75, 45, 52, 57, 50, 128, 76, 65, - 75, 45, 52, 57, 48, 128, 76, 65, 75, 45, 52, 56, 51, 128, 76, 65, 75, 45, - 52, 55, 48, 128, 76, 65, 75, 45, 52, 53, 55, 128, 76, 65, 75, 45, 52, 53, - 48, 128, 76, 65, 75, 45, 52, 52, 57, 128, 76, 65, 75, 45, 52, 52, 185, - 76, 65, 75, 45, 52, 52, 49, 128, 76, 65, 75, 45, 51, 57, 48, 128, 76, 65, - 75, 45, 51, 56, 52, 128, 76, 65, 75, 45, 51, 56, 51, 128, 76, 65, 75, 45, - 51, 52, 56, 128, 76, 65, 75, 45, 51, 52, 55, 128, 76, 65, 75, 45, 51, 52, - 51, 128, 76, 65, 75, 45, 50, 54, 54, 128, 76, 65, 75, 45, 50, 54, 53, - 128, 76, 65, 75, 45, 50, 51, 56, 128, 76, 65, 75, 45, 50, 50, 56, 128, - 76, 65, 75, 45, 50, 50, 53, 128, 76, 65, 75, 45, 50, 50, 48, 128, 76, 65, - 75, 45, 50, 49, 57, 128, 76, 65, 75, 45, 50, 49, 48, 128, 76, 65, 75, 45, - 49, 52, 50, 128, 76, 65, 75, 45, 49, 51, 48, 128, 76, 65, 75, 45, 48, 57, - 50, 128, 76, 65, 75, 45, 48, 56, 49, 128, 76, 65, 75, 45, 48, 56, 177, - 76, 65, 75, 45, 48, 56, 48, 128, 76, 65, 75, 45, 48, 55, 185, 76, 65, 75, - 45, 48, 54, 50, 128, 76, 65, 75, 45, 48, 53, 49, 128, 76, 65, 75, 45, 48, - 53, 48, 128, 76, 65, 75, 45, 48, 51, 48, 128, 76, 65, 75, 45, 48, 50, 53, - 128, 76, 65, 75, 45, 48, 50, 49, 128, 76, 65, 75, 45, 48, 50, 48, 128, - 76, 65, 75, 45, 48, 48, 51, 128, 76, 65, 74, 65, 78, 89, 65, 76, 65, 78, - 128, 76, 65, 73, 78, 199, 76, 65, 201, 76, 65, 72, 83, 72, 85, 128, 76, - 65, 72, 128, 76, 65, 71, 85, 83, 128, 76, 65, 71, 213, 76, 65, 71, 65, - 82, 128, 76, 65, 71, 65, 210, 76, 65, 71, 65, 66, 128, 76, 65, 71, 65, - 194, 76, 65, 69, 86, 128, 76, 65, 69, 128, 76, 65, 68, 217, 76, 65, 67, - 75, 128, 76, 65, 67, 65, 128, 76, 65, 66, 79, 85, 82, 73, 78, 71, 128, - 76, 65, 66, 79, 82, 128, 76, 65, 66, 73, 65, 76, 73, 90, 65, 84, 73, 79, - 206, 76, 65, 66, 73, 65, 204, 76, 65, 66, 69, 76, 128, 76, 65, 66, 65, - 84, 128, 76, 65, 65, 78, 65, 69, 128, 76, 65, 65, 78, 128, 76, 65, 65, - 77, 85, 128, 76, 65, 65, 77, 128, 76, 65, 65, 73, 128, 76, 54, 128, 76, - 52, 128, 76, 51, 128, 76, 50, 128, 76, 48, 48, 54, 65, 128, 76, 48, 48, - 50, 65, 128, 76, 45, 84, 89, 80, 197, 76, 45, 83, 72, 65, 80, 69, 196, - 75, 89, 85, 82, 73, 73, 128, 75, 89, 85, 128, 75, 89, 79, 128, 75, 89, - 76, 73, 83, 77, 65, 128, 75, 89, 73, 128, 75, 89, 69, 128, 75, 89, 65, - 84, 72, 79, 211, 75, 89, 65, 65, 128, 75, 89, 65, 128, 75, 88, 87, 73, - 128, 75, 88, 87, 69, 69, 128, 75, 88, 87, 69, 128, 75, 88, 87, 65, 65, - 128, 75, 88, 87, 65, 128, 75, 88, 85, 128, 75, 88, 79, 128, 75, 88, 73, - 128, 75, 88, 69, 69, 128, 75, 88, 69, 128, 75, 88, 65, 65, 128, 75, 88, - 65, 128, 75, 87, 86, 128, 75, 87, 85, 51, 49, 56, 128, 75, 87, 79, 79, - 128, 75, 87, 79, 128, 75, 87, 77, 128, 75, 87, 73, 73, 128, 75, 87, 73, - 128, 75, 87, 69, 69, 128, 75, 87, 69, 128, 75, 87, 66, 128, 75, 87, 65, - 89, 128, 75, 87, 65, 69, 84, 128, 75, 87, 65, 65, 128, 75, 86, 65, 128, - 75, 86, 128, 75, 85, 88, 128, 75, 85, 86, 128, 75, 85, 85, 72, 128, 75, - 85, 84, 128, 75, 85, 83, 77, 65, 128, 75, 85, 83, 72, 85, 50, 128, 75, - 85, 83, 72, 85, 178, 75, 85, 82, 88, 128, 75, 85, 82, 85, 90, 69, 73, 82, - 79, 128, 75, 85, 82, 84, 128, 75, 85, 82, 79, 79, 78, 69, 128, 75, 85, - 82, 128, 75, 85, 210, 75, 85, 81, 128, 75, 85, 79, 88, 128, 75, 85, 79, - 80, 128, 75, 85, 79, 208, 75, 85, 79, 77, 128, 75, 85, 79, 128, 75, 85, - 78, 71, 128, 75, 85, 78, 68, 68, 65, 76, 73, 89, 65, 128, 75, 85, 76, - 128, 75, 85, 204, 75, 85, 71, 128, 75, 85, 69, 84, 128, 75, 85, 66, 128, - 75, 85, 65, 86, 128, 75, 85, 65, 66, 128, 75, 85, 65, 128, 75, 85, 55, - 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, - 128, 75, 83, 83, 85, 85, 128, 75, 83, 83, 85, 128, 75, 83, 83, 79, 79, - 128, 75, 83, 83, 79, 128, 75, 83, 83, 73, 73, 128, 75, 83, 83, 73, 128, - 75, 83, 83, 69, 69, 128, 75, 83, 83, 69, 128, 75, 83, 83, 65, 85, 128, - 75, 83, 83, 65, 73, 128, 75, 83, 83, 65, 65, 128, 75, 83, 83, 65, 128, - 75, 83, 83, 128, 75, 83, 73, 128, 75, 82, 69, 77, 65, 83, 84, 73, 128, - 75, 82, 65, 84, 73, 77, 79, 89, 80, 79, 82, 82, 79, 79, 78, 128, 75, 82, - 65, 84, 73, 77, 79, 75, 79, 85, 70, 73, 83, 77, 65, 128, 75, 82, 65, 84, - 73, 77, 65, 84, 65, 128, 75, 82, 65, 84, 73, 77, 193, 75, 80, 85, 128, - 75, 80, 79, 81, 128, 75, 80, 79, 79, 128, 75, 80, 79, 128, 75, 80, 73, - 128, 75, 80, 69, 85, 88, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, - 80, 65, 82, 65, 81, 128, 75, 80, 65, 78, 128, 75, 80, 65, 72, 128, 75, - 80, 65, 128, 75, 79, 88, 128, 75, 79, 86, 85, 85, 128, 75, 79, 86, 128, - 75, 79, 84, 79, 128, 75, 79, 82, 85, 78, 65, 128, 75, 79, 82, 79, 78, 73, - 83, 128, 75, 79, 82, 69, 65, 206, 75, 79, 82, 65, 78, 73, 195, 75, 79, - 81, 78, 68, 79, 78, 128, 75, 79, 80, 80, 65, 128, 75, 79, 80, 128, 75, - 79, 79, 86, 128, 75, 79, 79, 80, 79, 128, 75, 79, 79, 77, 85, 85, 84, - 128, 75, 79, 79, 66, 128, 75, 79, 79, 128, 75, 79, 78, 84, 69, 86, 77, - 65, 128, 75, 79, 78, 84, 69, 86, 77, 193, 75, 79, 77, 201, 75, 79, 77, - 66, 85, 86, 65, 128, 75, 79, 77, 66, 85, 86, 193, 75, 79, 77, 66, 213, - 75, 79, 75, 79, 128, 75, 79, 75, 69, 128, 75, 79, 75, 128, 75, 79, 203, - 75, 79, 73, 128, 75, 79, 201, 75, 79, 72, 128, 75, 79, 71, 72, 79, 77, - 128, 75, 79, 69, 84, 128, 75, 79, 66, 128, 75, 79, 65, 76, 65, 128, 75, - 79, 65, 128, 75, 78, 85, 67, 75, 76, 69, 83, 128, 75, 78, 85, 67, 75, 76, - 69, 128, 75, 78, 79, 66, 83, 128, 75, 78, 73, 71, 72, 84, 128, 75, 78, - 73, 71, 72, 212, 75, 78, 73, 70, 69, 128, 75, 78, 73, 70, 197, 75, 77, - 128, 75, 205, 75, 76, 73, 84, 79, 78, 128, 75, 76, 65, 83, 77, 65, 128, - 75, 76, 65, 83, 77, 193, 75, 76, 65, 128, 75, 76, 128, 75, 75, 85, 128, - 75, 75, 79, 128, 75, 75, 73, 128, 75, 75, 69, 69, 128, 75, 75, 69, 128, - 75, 75, 65, 128, 75, 75, 128, 75, 74, 69, 128, 75, 73, 89, 69, 79, 75, - 45, 84, 73, 75, 69, 85, 84, 128, 75, 73, 89, 69, 79, 75, 45, 83, 73, 79, - 83, 45, 75, 73, 89, 69, 79, 75, 128, 75, 73, 89, 69, 79, 75, 45, 82, 73, - 69, 85, 76, 128, 75, 73, 89, 69, 79, 75, 45, 80, 73, 69, 85, 80, 128, 75, - 73, 89, 69, 79, 75, 45, 78, 73, 69, 85, 78, 128, 75, 73, 89, 69, 79, 75, - 45, 75, 72, 73, 69, 85, 75, 72, 128, 75, 73, 89, 69, 79, 75, 45, 67, 72, - 73, 69, 85, 67, 72, 128, 75, 73, 89, 69, 79, 203, 75, 73, 88, 128, 75, - 73, 87, 128, 75, 73, 86, 128, 75, 73, 84, 128, 75, 73, 83, 83, 73, 78, - 199, 75, 73, 83, 83, 128, 75, 73, 83, 211, 75, 73, 83, 73, 77, 53, 128, - 75, 73, 83, 73, 77, 181, 75, 73, 83, 72, 128, 75, 73, 83, 65, 76, 128, - 75, 73, 82, 79, 87, 65, 84, 84, 79, 128, 75, 73, 82, 79, 77, 69, 69, 84, - 79, 82, 85, 128, 75, 73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 75, 73, 82, - 79, 128, 75, 73, 82, 71, 72, 73, 218, 75, 73, 81, 128, 75, 73, 80, 128, - 75, 73, 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 78, 68, 69, 82, 71, - 65, 82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128, 75, 73, 76, 76, 69, - 82, 128, 75, 73, 73, 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, - 69, 86, 65, 206, 75, 73, 69, 80, 128, 75, 73, 69, 69, 77, 128, 75, 73, - 69, 128, 75, 73, 68, 128, 75, 73, 196, 75, 73, 67, 75, 128, 75, 73, 66, - 128, 75, 73, 65, 86, 128, 75, 73, 65, 66, 128, 75, 72, 90, 128, 75, 72, - 87, 65, 73, 128, 75, 72, 85, 69, 78, 45, 76, 85, 197, 75, 72, 85, 69, - 206, 75, 72, 85, 68, 65, 87, 65, 68, 201, 75, 72, 85, 68, 65, 77, 128, - 75, 72, 85, 65, 84, 128, 75, 72, 79, 85, 128, 75, 72, 79, 212, 75, 72, - 79, 78, 128, 75, 72, 79, 77, 85, 84, 128, 75, 72, 79, 74, 75, 201, 75, - 72, 79, 128, 75, 72, 207, 75, 72, 77, 213, 75, 72, 73, 84, 128, 75, 72, - 73, 78, 89, 65, 128, 75, 72, 73, 69, 85, 75, 200, 75, 72, 73, 128, 75, - 72, 201, 75, 72, 72, 79, 128, 75, 72, 72, 65, 128, 75, 72, 69, 84, 72, - 128, 75, 72, 69, 73, 128, 75, 72, 69, 69, 128, 75, 72, 69, 128, 75, 72, - 65, 86, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 75, 72, 65, 82, - 128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199, 75, 72, 65, 78, 68, - 193, 75, 72, 65, 78, 128, 75, 72, 65, 77, 84, 201, 75, 72, 65, 75, 65, - 83, 83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, 72, 128, 75, 72, - 65, 200, 75, 72, 65, 66, 128, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, - 89, 67, 65, 80, 128, 75, 69, 89, 67, 65, 208, 75, 69, 89, 66, 79, 65, 82, - 68, 128, 75, 69, 89, 66, 79, 65, 82, 196, 75, 69, 88, 128, 75, 69, 86, - 128, 75, 69, 85, 89, 69, 85, 88, 128, 75, 69, 85, 83, 72, 69, 85, 65, 69, - 80, 128, 75, 69, 85, 83, 69, 85, 88, 128, 75, 69, 85, 80, 85, 81, 128, - 75, 69, 85, 79, 212, 75, 69, 85, 77, 128, 75, 69, 85, 75, 69, 85, 84, 78, - 68, 65, 128, 75, 69, 85, 75, 65, 81, 128, 75, 69, 85, 65, 69, 84, 77, 69, - 85, 78, 128, 75, 69, 85, 65, 69, 82, 73, 128, 75, 69, 84, 84, 201, 75, - 69, 83, 72, 50, 128, 75, 69, 82, 69, 84, 128, 75, 69, 79, 87, 128, 75, - 69, 78, 84, 73, 77, 65, 84, 65, 128, 75, 69, 78, 84, 73, 77, 65, 84, 193, - 75, 69, 78, 84, 73, 77, 193, 75, 69, 78, 65, 84, 128, 75, 69, 78, 128, - 75, 69, 206, 75, 69, 77, 80, 85, 76, 128, 75, 69, 77, 80, 85, 204, 75, - 69, 77, 80, 76, 73, 128, 75, 69, 77, 80, 76, 201, 75, 69, 77, 80, 72, 82, - 69, 78, 71, 128, 75, 69, 77, 66, 65, 78, 71, 128, 75, 69, 76, 86, 73, - 206, 75, 69, 72, 69, 72, 128, 75, 69, 72, 69, 200, 75, 69, 72, 128, 75, - 69, 70, 85, 76, 65, 128, 75, 69, 69, 86, 128, 75, 69, 69, 83, 85, 128, - 75, 69, 69, 80, 73, 78, 199, 75, 69, 69, 78, 71, 128, 75, 69, 69, 66, - 128, 75, 69, 66, 128, 75, 69, 65, 65, 69, 128, 75, 67, 65, 76, 128, 75, - 66, 128, 75, 65, 90, 65, 75, 200, 75, 65, 89, 65, 78, 78, 65, 128, 75, - 65, 89, 65, 200, 75, 65, 88, 128, 75, 65, 87, 86, 128, 75, 65, 87, 73, - 128, 75, 65, 87, 66, 128, 75, 65, 86, 89, 75, 65, 128, 75, 65, 86, 128, - 75, 65, 85, 86, 128, 75, 65, 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, - 85, 66, 128, 75, 65, 84, 79, 128, 75, 65, 84, 72, 73, 83, 84, 73, 128, - 75, 65, 84, 72, 65, 75, 193, 75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75, - 65, 84, 65, 86, 193, 75, 65, 84, 65, 75, 65, 78, 65, 45, 72, 73, 82, 65, - 71, 65, 78, 193, 75, 65, 83, 82, 65, 84, 65, 78, 128, 75, 65, 83, 82, 65, - 84, 65, 206, 75, 65, 83, 82, 65, 128, 75, 65, 83, 82, 193, 75, 65, 83, - 75, 65, 76, 128, 75, 65, 83, 75, 65, 204, 75, 65, 83, 72, 77, 73, 82, - 201, 75, 65, 82, 83, 72, 65, 78, 65, 128, 75, 65, 82, 79, 82, 73, 73, - 128, 75, 65, 82, 207, 75, 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, - 128, 75, 65, 82, 65, 78, 128, 75, 65, 80, 89, 69, 79, 85, 78, 83, 83, 65, - 78, 71, 80, 73, 69, 85, 80, 128, 75, 65, 80, 89, 69, 79, 85, 78, 82, 73, - 69, 85, 76, 128, 75, 65, 80, 89, 69, 79, 85, 78, 80, 72, 73, 69, 85, 80, - 72, 128, 75, 65, 80, 89, 69, 79, 85, 78, 77, 73, 69, 85, 77, 128, 75, 65, - 80, 80, 65, 128, 75, 65, 80, 80, 193, 75, 65, 80, 79, 128, 75, 65, 80, - 72, 128, 75, 65, 80, 65, 76, 128, 75, 65, 80, 65, 128, 75, 65, 208, 75, - 65, 78, 84, 65, 74, 193, 75, 65, 78, 71, 128, 75, 65, 78, 199, 75, 65, - 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, 65, 77, 50, 128, 75, 65, - 77, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, - 75, 128, 75, 65, 203, 75, 65, 73, 86, 128, 75, 65, 73, 84, 72, 201, 75, - 65, 73, 82, 73, 128, 75, 65, 73, 66, 128, 75, 65, 73, 128, 75, 65, 201, - 75, 65, 70, 65, 128, 75, 65, 70, 128, 75, 65, 198, 75, 65, 68, 53, 128, - 75, 65, 68, 181, 75, 65, 68, 52, 128, 75, 65, 68, 51, 128, 75, 65, 68, - 179, 75, 65, 68, 50, 128, 75, 65, 68, 128, 75, 65, 66, 193, 75, 65, 66, - 128, 75, 65, 65, 86, 128, 75, 65, 65, 73, 128, 75, 65, 65, 70, 85, 128, - 75, 65, 65, 70, 128, 75, 65, 65, 66, 65, 128, 75, 65, 65, 66, 128, 75, - 65, 50, 128, 75, 65, 178, 75, 48, 48, 56, 128, 75, 48, 48, 55, 128, 75, - 48, 48, 54, 128, 75, 48, 48, 53, 128, 75, 48, 48, 52, 128, 75, 48, 48, - 51, 128, 75, 48, 48, 50, 128, 75, 48, 48, 49, 128, 74, 87, 65, 128, 74, - 85, 85, 128, 74, 85, 84, 128, 74, 85, 83, 84, 73, 70, 73, 67, 65, 84, 73, - 79, 78, 128, 74, 85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84, 128, 74, - 85, 79, 80, 128, 74, 85, 78, 79, 128, 74, 85, 78, 69, 128, 74, 85, 76, - 89, 128, 74, 85, 69, 85, 73, 128, 74, 85, 68, 85, 76, 128, 74, 85, 68, - 71, 69, 128, 74, 85, 68, 69, 79, 45, 83, 80, 65, 78, 73, 83, 200, 74, 79, - 89, 83, 84, 73, 67, 75, 128, 74, 79, 89, 79, 85, 211, 74, 79, 89, 128, - 74, 79, 86, 69, 128, 74, 79, 212, 74, 79, 78, 71, 128, 74, 79, 78, 193, - 74, 79, 75, 69, 82, 128, 74, 79, 73, 78, 84, 83, 128, 74, 79, 73, 78, 69, - 68, 128, 74, 79, 73, 78, 128, 74, 79, 65, 128, 74, 74, 89, 88, 128, 74, - 74, 89, 84, 128, 74, 74, 89, 80, 128, 74, 74, 89, 128, 74, 74, 85, 88, - 128, 74, 74, 85, 84, 128, 74, 74, 85, 82, 88, 128, 74, 74, 85, 82, 128, - 74, 74, 85, 80, 128, 74, 74, 85, 79, 88, 128, 74, 74, 85, 79, 80, 128, - 74, 74, 85, 79, 128, 74, 74, 85, 128, 74, 74, 79, 88, 128, 74, 74, 79, - 84, 128, 74, 74, 79, 80, 128, 74, 74, 79, 128, 74, 74, 73, 88, 128, 74, - 74, 73, 84, 128, 74, 74, 73, 80, 128, 74, 74, 73, 69, 88, 128, 74, 74, - 73, 69, 84, 128, 74, 74, 73, 69, 80, 128, 74, 74, 73, 69, 128, 74, 74, - 73, 128, 74, 74, 69, 69, 128, 74, 74, 69, 128, 74, 74, 65, 128, 74, 73, - 76, 128, 74, 73, 73, 128, 74, 73, 72, 86, 65, 77, 85, 76, 73, 89, 65, - 128, 74, 73, 65, 128, 74, 72, 79, 88, 128, 74, 72, 79, 128, 74, 72, 69, - 72, 128, 74, 72, 65, 89, 73, 78, 128, 74, 72, 65, 78, 128, 74, 72, 65, - 77, 128, 74, 72, 65, 65, 128, 74, 72, 65, 128, 74, 69, 85, 128, 74, 69, - 82, 85, 83, 65, 76, 69, 77, 128, 74, 69, 82, 65, 206, 74, 69, 82, 65, - 128, 74, 69, 82, 128, 74, 69, 72, 128, 74, 69, 200, 74, 69, 71, 79, 71, - 65, 78, 128, 74, 69, 69, 77, 128, 74, 69, 65, 78, 83, 128, 74, 65, 89, - 78, 128, 74, 65, 89, 73, 78, 128, 74, 65, 89, 65, 78, 78, 65, 128, 74, - 65, 87, 128, 74, 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, 85, 128, 74, - 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 74, 65, 80, 65, 78, 128, - 74, 65, 78, 85, 65, 82, 89, 128, 74, 65, 76, 76, 65, 74, 65, 76, 65, 76, - 79, 85, 72, 79, 85, 128, 74, 65, 73, 206, 74, 65, 73, 128, 74, 65, 72, - 128, 74, 65, 68, 69, 128, 74, 65, 67, 75, 83, 128, 74, 65, 67, 75, 45, - 79, 45, 76, 65, 78, 84, 69, 82, 78, 128, 74, 65, 67, 203, 74, 45, 83, 73, - 77, 80, 76, 73, 70, 73, 69, 196, 73, 90, 72, 73, 84, 83, 65, 128, 73, 90, - 72, 73, 84, 83, 193, 73, 90, 72, 69, 128, 73, 90, 65, 75, 65, 89, 193, - 73, 89, 69, 75, 128, 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, - 73, 84, 211, 73, 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, - 73, 83, 83, 72, 65, 82, 128, 73, 83, 79, 83, 67, 69, 76, 69, 211, 73, 83, - 79, 78, 128, 73, 83, 79, 206, 73, 83, 79, 76, 65, 84, 69, 128, 73, 83, - 76, 65, 78, 68, 128, 73, 83, 69, 78, 45, 73, 83, 69, 78, 128, 73, 83, 65, - 75, 73, 193, 73, 83, 45, 80, 73, 76, 76, 65, 128, 73, 82, 85, 89, 65, 78, - 78, 65, 128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, 73, 82, 79, 78, 45, - 67, 79, 80, 80, 69, 210, 73, 82, 79, 78, 128, 73, 82, 66, 128, 73, 79, - 84, 73, 70, 73, 69, 196, 73, 79, 84, 65, 84, 69, 196, 73, 79, 84, 65, - 128, 73, 79, 84, 193, 73, 79, 82, 128, 73, 79, 68, 72, 65, 68, 72, 128, - 73, 78, 86, 73, 83, 73, 66, 76, 197, 73, 78, 86, 69, 82, 84, 69, 68, 128, - 73, 78, 86, 69, 82, 84, 69, 196, 73, 78, 86, 69, 82, 83, 197, 73, 78, 84, - 82, 79, 68, 85, 67, 69, 82, 128, 73, 78, 84, 73, 128, 73, 78, 84, 69, 82, - 83, 89, 76, 76, 65, 66, 73, 195, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, - 79, 78, 128, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 206, 73, 78, 84, - 69, 82, 83, 69, 67, 84, 73, 78, 199, 73, 78, 84, 69, 82, 82, 79, 66, 65, - 78, 71, 128, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 199, 73, 78, 84, 69, - 82, 80, 79, 76, 65, 84, 73, 79, 206, 73, 78, 84, 69, 82, 76, 79, 67, 75, - 69, 196, 73, 78, 84, 69, 82, 76, 73, 78, 69, 65, 210, 73, 78, 84, 69, 82, - 76, 65, 67, 69, 196, 73, 78, 84, 69, 82, 73, 79, 210, 73, 78, 84, 69, 82, - 69, 83, 212, 73, 78, 84, 69, 82, 67, 65, 76, 65, 84, 69, 128, 73, 78, 84, - 69, 71, 82, 65, 84, 73, 79, 78, 128, 73, 78, 84, 69, 71, 82, 65, 84, 73, - 79, 206, 73, 78, 84, 69, 71, 82, 65, 76, 128, 73, 78, 84, 69, 71, 82, 65, - 204, 73, 78, 83, 85, 76, 65, 210, 73, 78, 83, 84, 82, 85, 77, 69, 78, 84, - 65, 204, 73, 78, 83, 73, 68, 69, 128, 73, 78, 83, 73, 68, 197, 73, 78, - 83, 69, 82, 84, 73, 79, 206, 73, 78, 83, 69, 67, 84, 128, 73, 78, 83, 67, - 82, 73, 80, 84, 73, 79, 78, 65, 204, 73, 78, 80, 85, 212, 73, 78, 78, 79, - 67, 69, 78, 67, 69, 128, 73, 78, 78, 78, 128, 73, 78, 78, 69, 82, 128, - 73, 78, 78, 69, 210, 73, 78, 78, 128, 73, 78, 73, 78, 71, 85, 128, 73, - 78, 73, 128, 73, 78, 72, 73, 66, 73, 212, 73, 78, 72, 69, 82, 69, 78, - 212, 73, 78, 72, 65, 76, 69, 128, 73, 78, 71, 87, 65, 90, 128, 73, 78, - 70, 79, 82, 77, 65, 84, 73, 79, 206, 73, 78, 70, 76, 85, 69, 78, 67, 69, - 128, 73, 78, 70, 73, 78, 73, 84, 89, 128, 73, 78, 70, 73, 78, 73, 84, - 217, 73, 78, 68, 85, 83, 84, 82, 73, 65, 204, 73, 78, 68, 73, 82, 69, 67, - 212, 73, 78, 68, 73, 67, 65, 84, 79, 82, 128, 73, 78, 68, 73, 67, 65, 84, - 79, 210, 73, 78, 68, 73, 195, 73, 78, 68, 73, 65, 206, 73, 78, 68, 69, - 88, 128, 73, 78, 68, 69, 80, 69, 78, 68, 69, 78, 212, 73, 78, 67, 82, 69, - 77, 69, 78, 84, 128, 73, 78, 67, 82, 69, 65, 83, 69, 211, 73, 78, 67, 82, - 69, 65, 83, 69, 128, 73, 78, 67, 82, 69, 65, 83, 197, 73, 78, 67, 79, 77, - 80, 76, 69, 84, 197, 73, 78, 67, 79, 77, 73, 78, 199, 73, 78, 67, 76, 85, - 68, 73, 78, 199, 73, 78, 67, 72, 128, 73, 78, 66, 79, 216, 73, 78, 65, - 80, 128, 73, 78, 45, 65, 76, 65, 70, 128, 73, 77, 80, 69, 82, 73, 65, - 204, 73, 77, 80, 69, 82, 70, 69, 67, 84, 85, 205, 73, 77, 80, 69, 82, 70, - 69, 67, 84, 65, 128, 73, 77, 80, 69, 82, 70, 69, 67, 84, 193, 73, 77, 78, - 128, 73, 77, 73, 83, 69, 79, 211, 73, 77, 73, 78, 51, 128, 73, 77, 73, - 78, 128, 73, 77, 73, 206, 73, 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, - 73, 77, 73, 70, 84, 72, 79, 82, 65, 128, 73, 77, 73, 70, 79, 78, 79, 78, - 128, 73, 77, 73, 68, 73, 65, 82, 71, 79, 78, 128, 73, 77, 65, 71, 197, - 73, 76, 85, 89, 65, 78, 78, 65, 128, 73, 76, 85, 89, 128, 73, 76, 85, 85, - 89, 65, 78, 78, 65, 128, 73, 76, 85, 84, 128, 73, 76, 73, 77, 77, 85, 52, - 128, 73, 76, 73, 77, 77, 85, 51, 128, 73, 76, 73, 77, 77, 85, 128, 73, - 76, 73, 77, 77, 213, 73, 76, 50, 128, 73, 75, 65, 82, 65, 128, 73, 75, - 65, 82, 193, 73, 74, 128, 73, 73, 89, 65, 78, 78, 65, 128, 73, 71, 73, - 128, 73, 71, 201, 73, 71, 71, 87, 83, 128, 73, 70, 73, 78, 128, 73, 69, - 85, 78, 71, 45, 84, 73, 75, 69, 85, 84, 128, 73, 69, 85, 78, 71, 45, 84, - 72, 73, 69, 85, 84, 72, 128, 73, 69, 85, 78, 71, 45, 83, 83, 65, 78, 71, - 75, 73, 89, 69, 79, 75, 128, 73, 69, 85, 78, 71, 45, 82, 73, 69, 85, 76, - 128, 73, 69, 85, 78, 71, 45, 80, 73, 69, 85, 80, 128, 73, 69, 85, 78, 71, - 45, 80, 72, 73, 69, 85, 80, 72, 128, 73, 69, 85, 78, 71, 45, 75, 73, 89, - 69, 79, 75, 128, 73, 69, 85, 78, 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, - 73, 69, 85, 78, 71, 45, 67, 73, 69, 85, 67, 128, 73, 69, 85, 78, 71, 45, - 67, 72, 73, 69, 85, 67, 72, 128, 73, 69, 85, 78, 199, 73, 68, 76, 69, - 128, 73, 68, 73, 77, 128, 73, 68, 73, 205, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 70, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, - 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, - 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, - 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 55, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, - 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 66, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 53, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 57, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 70, 57, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 57, 48, 52, 65, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 56, 68, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 56, 67, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 56, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 68, 52, - 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 65, 55, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 57, 56, 49, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 55, 54, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 55, 53, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 55, 53, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 49, 50, - 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 48, 66, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 70, 49, 52, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 54, 69, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 54, 55, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 54, 55, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, - 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 54, 50, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 66, 48, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 54, 53, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 54, 53, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 54, 51, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 48, - 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 57, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 53, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 54, 50, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 53, 70, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 53, 68, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 66, 56, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 66, 53, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 57, 50, 57, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 53, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 53, 56, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 53, 53, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 52, 51, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 52, 48, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 51, 70, 51, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 53, 51, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 53, 50, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 53, 50, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 52, - 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 49, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 49, 56, 68, 128, 73, 68, 69, 79, - 71, 82, 65, 80, 72, 45, 52, 69, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 52, 69, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 52, 69, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 48, - 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 48, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 68, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 67, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 65, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, - 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 54, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 52, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 65, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 65, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 65, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, - 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 68, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 66, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 65, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 65, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, - 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 52, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 50, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 66, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 57, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 56, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 50, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 48, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 57, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 55, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 54, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 48, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 69, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 55, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 53, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 52, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 69, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 67, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 53, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 51, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 50, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 67, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 65, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 51, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 49, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 48, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 65, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 56, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 49, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 70, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 69, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 56, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 54, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 70, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 68, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 67, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 54, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 52, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 68, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 66, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 65, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 52, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 50, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 66, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 57, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 56, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 50, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 48, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 57, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 55, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 54, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 48, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 69, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 55, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 53, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 52, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 69, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 67, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 53, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 51, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 50, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 67, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 65, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 51, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 49, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 48, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 65, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 56, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 49, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 70, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 69, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 56, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 54, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 57, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 57, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 57, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, - 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 70, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 68, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 67, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 54, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 52, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 51, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 68, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 66, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 65, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 52, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 50, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 49, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 66, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 57, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 56, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 50, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 48, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 70, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 57, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 55, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 54, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 48, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 69, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 68, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 55, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 53, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 52, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 69, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 67, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 66, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 53, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 51, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 50, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 67, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 65, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 57, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 51, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 49, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 48, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 65, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 57, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 56, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 55, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 49, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 48, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 70, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 69, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 56, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 55, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 54, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 53, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 70, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 69, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 68, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 67, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 54, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 53, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 52, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 51, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 68, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 67, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 66, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 65, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 52, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 51, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 50, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 49, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 66, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 65, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 57, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 56, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 50, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 49, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 48, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 70, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 57, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 56, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 55, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 54, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 48, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 70, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 69, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 68, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 55, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 54, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 53, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 52, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 69, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 68, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 67, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 66, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 53, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 52, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 51, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 50, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 67, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 66, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 65, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 57, 128, 73, 68, 69, 79, 71, - 82, 65, 80, 72, 45, 50, 70, 56, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 50, 70, 56, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 45, 50, 70, 56, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, - 70, 56, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, - 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 51, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 50, 128, 73, - 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 49, 128, 73, 68, 69, - 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 48, 128, 73, 68, 69, 78, 84, - 73, 70, 73, 67, 65, 84, 73, 79, 78, 128, 73, 68, 69, 78, 84, 73, 67, 65, - 204, 73, 67, 79, 78, 128, 73, 67, 72, 79, 85, 128, 73, 67, 72, 79, 83, - 128, 73, 67, 72, 73, 77, 65, 84, 79, 83, 128, 73, 67, 72, 65, 68, 73, 78, - 128, 73, 67, 69, 76, 65, 78, 68, 73, 67, 45, 89, 82, 128, 73, 66, 73, 70, - 73, 76, 73, 128, 73, 65, 85, 68, 65, 128, 73, 48, 49, 53, 128, 73, 48, - 49, 52, 128, 73, 48, 49, 51, 128, 73, 48, 49, 50, 128, 73, 48, 49, 49, - 65, 128, 73, 48, 49, 49, 128, 73, 48, 49, 48, 65, 128, 73, 48, 49, 48, - 128, 73, 48, 48, 57, 65, 128, 73, 48, 48, 57, 128, 73, 48, 48, 56, 128, - 73, 48, 48, 55, 128, 73, 48, 48, 54, 128, 73, 48, 48, 53, 65, 128, 73, - 48, 48, 53, 128, 73, 48, 48, 52, 128, 73, 48, 48, 51, 128, 73, 48, 48, - 50, 128, 73, 48, 48, 49, 128, 73, 45, 89, 85, 128, 73, 45, 89, 79, 128, - 73, 45, 89, 69, 79, 128, 73, 45, 89, 69, 128, 73, 45, 89, 65, 69, 128, - 73, 45, 89, 65, 45, 79, 128, 73, 45, 89, 65, 128, 73, 45, 79, 45, 73, - 128, 73, 45, 79, 128, 73, 45, 69, 85, 128, 73, 45, 66, 69, 65, 77, 128, - 73, 45, 65, 82, 65, 69, 65, 128, 73, 45, 65, 128, 72, 90, 90, 90, 71, - 128, 72, 90, 90, 90, 128, 72, 90, 90, 80, 128, 72, 90, 90, 128, 72, 90, - 87, 71, 128, 72, 90, 87, 128, 72, 90, 84, 128, 72, 90, 71, 128, 72, 89, - 83, 84, 69, 82, 69, 83, 73, 211, 72, 89, 80, 79, 68, 73, 65, 83, 84, 79, - 76, 69, 128, 72, 89, 80, 72, 69, 78, 65, 84, 73, 79, 206, 72, 89, 80, 72, - 69, 78, 45, 77, 73, 78, 85, 83, 128, 72, 89, 80, 72, 69, 78, 128, 72, 89, - 80, 72, 69, 206, 72, 89, 71, 73, 69, 73, 65, 128, 72, 88, 87, 71, 128, - 72, 88, 85, 79, 88, 128, 72, 88, 85, 79, 84, 128, 72, 88, 85, 79, 80, - 128, 72, 88, 85, 79, 128, 72, 88, 79, 88, 128, 72, 88, 79, 84, 128, 72, - 88, 79, 80, 128, 72, 88, 79, 128, 72, 88, 73, 88, 128, 72, 88, 73, 84, - 128, 72, 88, 73, 80, 128, 72, 88, 73, 69, 88, 128, 72, 88, 73, 69, 84, - 128, 72, 88, 73, 69, 80, 128, 72, 88, 73, 69, 128, 72, 88, 73, 128, 72, - 88, 69, 88, 128, 72, 88, 69, 80, 128, 72, 88, 69, 128, 72, 88, 65, 88, - 128, 72, 88, 65, 84, 128, 72, 88, 65, 80, 128, 72, 88, 65, 128, 72, 87, - 85, 128, 72, 87, 65, 73, 82, 128, 72, 87, 65, 72, 128, 72, 86, 128, 72, - 85, 86, 65, 128, 72, 85, 83, 72, 69, 196, 72, 85, 83, 72, 128, 72, 85, - 82, 65, 78, 128, 72, 85, 79, 84, 128, 72, 85, 78, 68, 82, 69, 68, 83, - 128, 72, 85, 78, 68, 82, 69, 68, 128, 72, 85, 78, 68, 82, 69, 196, 72, - 85, 78, 128, 72, 85, 77, 208, 72, 85, 77, 65, 78, 128, 72, 85, 77, 65, - 206, 72, 85, 76, 50, 128, 72, 85, 73, 73, 84, 79, 128, 72, 85, 71, 71, - 73, 78, 199, 72, 85, 66, 50, 128, 72, 85, 66, 178, 72, 85, 66, 128, 72, - 85, 65, 82, 65, 68, 68, 79, 128, 72, 85, 65, 78, 128, 72, 84, 83, 128, - 72, 84, 74, 128, 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, - 80, 65, 128, 72, 80, 128, 72, 79, 85, 83, 197, 72, 79, 85, 82, 71, 76, - 65, 83, 83, 128, 72, 79, 85, 82, 71, 76, 65, 83, 211, 72, 79, 85, 82, - 128, 72, 79, 85, 210, 72, 79, 84, 69, 76, 128, 72, 79, 84, 65, 128, 72, - 79, 83, 80, 73, 84, 65, 76, 128, 72, 79, 82, 83, 69, 128, 72, 79, 82, 83, - 197, 72, 79, 82, 82, 128, 72, 79, 82, 78, 83, 128, 72, 79, 82, 73, 90, - 79, 78, 84, 65, 76, 76, 217, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, - 48, 54, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, - 54, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, - 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, - 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, - 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 49, - 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 48, 128, - 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 54, 128, 72, - 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 53, 128, 72, 79, - 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 52, 128, 72, 79, 82, - 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 51, 128, 72, 79, 82, 73, - 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 50, 128, 72, 79, 82, 73, 90, - 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, - 78, 84, 65, 76, 45, 48, 53, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, - 84, 65, 76, 45, 48, 52, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 76, 45, 48, 52, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, - 76, 45, 48, 52, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, - 45, 48, 52, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, - 48, 52, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, - 52, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, - 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, - 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, - 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 52, - 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 51, 128, - 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 50, 128, 72, - 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 49, 128, 72, 79, - 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 48, 128, 72, 79, 82, - 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 54, 128, 72, 79, 82, 73, - 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 53, 128, 72, 79, 82, 73, 90, - 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, - 78, 84, 65, 76, 45, 48, 50, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, - 84, 65, 76, 45, 48, 50, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 76, 45, 48, 50, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, - 76, 45, 48, 50, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, - 45, 48, 49, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, - 48, 49, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, - 49, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, - 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, - 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, - 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 48, - 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 54, 128, - 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 53, 128, 72, - 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 52, 128, 72, 79, - 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 51, 128, 72, 79, 82, - 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 50, 128, 72, 79, 82, 73, - 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 49, 128, 72, 79, 82, 73, 90, - 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, - 78, 84, 65, 76, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 72, 79, 82, - 73, 128, 72, 79, 82, 193, 72, 79, 79, 85, 128, 72, 79, 79, 82, 85, 128, - 72, 79, 79, 80, 128, 72, 79, 79, 78, 128, 72, 79, 79, 75, 69, 68, 128, - 72, 79, 79, 75, 69, 196, 72, 79, 78, 69, 89, 66, 69, 69, 128, 72, 79, 78, - 69, 217, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 79, 77, 79, 84, - 72, 69, 84, 73, 195, 72, 79, 76, 79, 128, 72, 79, 76, 76, 79, 215, 72, - 79, 76, 69, 128, 72, 79, 76, 68, 73, 78, 199, 72, 79, 76, 65, 77, 128, - 72, 79, 76, 65, 205, 72, 79, 75, 65, 128, 72, 79, 67, 75, 69, 217, 72, - 79, 67, 72, 79, 128, 72, 78, 85, 84, 128, 72, 78, 85, 79, 88, 128, 72, - 78, 85, 79, 128, 72, 78, 85, 66, 128, 72, 78, 79, 88, 128, 72, 78, 79, - 84, 128, 72, 78, 79, 80, 128, 72, 78, 73, 88, 128, 72, 78, 73, 84, 128, - 72, 78, 73, 80, 128, 72, 78, 73, 69, 88, 128, 72, 78, 73, 69, 84, 128, - 72, 78, 73, 69, 80, 128, 72, 78, 73, 69, 128, 72, 78, 73, 128, 72, 78, - 69, 88, 128, 72, 78, 69, 80, 128, 72, 78, 69, 128, 72, 78, 65, 88, 128, - 72, 78, 65, 85, 128, 72, 78, 65, 84, 128, 72, 78, 65, 80, 128, 72, 78, - 65, 128, 72, 77, 89, 88, 128, 72, 77, 89, 82, 88, 128, 72, 77, 89, 82, - 128, 72, 77, 89, 80, 128, 72, 77, 89, 128, 72, 77, 85, 88, 128, 72, 77, - 85, 84, 128, 72, 77, 85, 82, 88, 128, 72, 77, 85, 82, 128, 72, 77, 85, - 80, 128, 72, 77, 85, 79, 88, 128, 72, 77, 85, 79, 80, 128, 72, 77, 85, - 79, 128, 72, 77, 85, 128, 72, 77, 79, 88, 128, 72, 77, 79, 84, 128, 72, - 77, 79, 80, 128, 72, 77, 79, 128, 72, 77, 73, 88, 128, 72, 77, 73, 84, - 128, 72, 77, 73, 80, 128, 72, 77, 73, 69, 88, 128, 72, 77, 73, 69, 80, - 128, 72, 77, 73, 69, 128, 72, 77, 73, 128, 72, 77, 69, 128, 72, 77, 65, - 88, 128, 72, 77, 65, 84, 128, 72, 77, 65, 80, 128, 72, 77, 65, 128, 72, - 76, 89, 88, 128, 72, 76, 89, 84, 128, 72, 76, 89, 82, 88, 128, 72, 76, - 89, 82, 128, 72, 76, 89, 80, 128, 72, 76, 89, 128, 72, 76, 85, 88, 128, - 72, 76, 85, 84, 128, 72, 76, 85, 82, 88, 128, 72, 76, 85, 82, 128, 72, - 76, 85, 80, 128, 72, 76, 85, 79, 88, 128, 72, 76, 85, 79, 80, 128, 72, - 76, 85, 79, 128, 72, 76, 85, 128, 72, 76, 79, 88, 128, 72, 76, 79, 80, - 128, 72, 76, 79, 128, 72, 76, 73, 88, 128, 72, 76, 73, 84, 128, 72, 76, - 73, 80, 128, 72, 76, 73, 69, 88, 128, 72, 76, 73, 69, 80, 128, 72, 76, - 73, 69, 128, 72, 76, 73, 128, 72, 76, 69, 88, 128, 72, 76, 69, 80, 128, - 72, 76, 69, 128, 72, 76, 65, 88, 128, 72, 76, 65, 85, 128, 72, 76, 65, - 84, 128, 72, 76, 65, 80, 128, 72, 76, 65, 128, 72, 76, 128, 72, 75, 128, - 72, 73, 90, 66, 128, 72, 73, 89, 79, 128, 72, 73, 84, 84, 73, 78, 199, - 72, 73, 83, 84, 79, 82, 73, 195, 72, 73, 82, 73, 81, 128, 72, 73, 78, 71, - 69, 68, 128, 72, 73, 78, 71, 69, 196, 72, 73, 78, 71, 69, 128, 72, 73, - 71, 72, 45, 83, 80, 69, 69, 196, 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, - 83, 69, 68, 45, 185, 72, 73, 71, 72, 45, 76, 79, 215, 72, 73, 71, 72, 45, - 72, 69, 69, 76, 69, 196, 72, 73, 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, - 73, 79, 83, 128, 72, 73, 69, 85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, - 69, 85, 72, 45, 80, 73, 69, 85, 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, - 69, 85, 78, 128, 72, 73, 69, 85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, - 69, 85, 200, 72, 73, 69, 82, 79, 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, - 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, 69, 84, 128, 72, 73, 68, 69, - 128, 72, 73, 66, 73, 83, 67, 85, 83, 128, 72, 72, 87, 65, 128, 72, 72, - 85, 128, 72, 72, 73, 128, 72, 72, 69, 69, 128, 72, 72, 69, 128, 72, 72, - 65, 65, 128, 72, 71, 128, 72, 69, 89, 84, 128, 72, 69, 88, 73, 70, 79, - 82, 205, 72, 69, 88, 65, 71, 82, 65, 205, 72, 69, 88, 65, 71, 79, 78, + 76, 89, 73, 84, 128, 76, 89, 73, 78, 199, 76, 89, 68, 73, 65, 206, 76, + 89, 67, 73, 65, 206, 76, 88, 128, 76, 87, 79, 79, 128, 76, 87, 79, 128, + 76, 87, 73, 73, 128, 76, 87, 73, 128, 76, 87, 69, 128, 76, 87, 65, 65, + 128, 76, 87, 65, 128, 76, 85, 88, 128, 76, 85, 85, 128, 76, 85, 84, 128, + 76, 85, 82, 88, 128, 76, 85, 80, 128, 76, 85, 79, 88, 128, 76, 85, 79, + 84, 128, 76, 85, 79, 80, 128, 76, 85, 79, 128, 76, 85, 78, 71, 83, 73, + 128, 76, 85, 78, 65, 84, 197, 76, 85, 205, 76, 85, 76, 128, 76, 85, 73, + 83, 128, 76, 85, 72, 85, 82, 128, 76, 85, 72, 128, 76, 85, 200, 76, 85, + 71, 71, 65, 71, 69, 128, 76, 85, 71, 65, 76, 128, 76, 85, 71, 65, 204, + 76, 85, 69, 128, 76, 85, 197, 76, 85, 66, 128, 76, 85, 65, 69, 80, 128, + 76, 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, 76, 82, 79, 128, 76, 82, + 77, 128, 76, 82, 73, 128, 76, 82, 69, 128, 76, 79, 90, 69, 78, 71, 69, + 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 69, 82, + 69, 196, 76, 79, 87, 69, 210, 76, 79, 87, 45, 82, 69, 86, 69, 82, 83, 69, + 68, 45, 185, 76, 79, 87, 45, 77, 73, 196, 76, 79, 87, 45, 70, 65, 76, 76, + 73, 78, 199, 76, 79, 87, 45, 185, 76, 79, 86, 197, 76, 79, 85, 82, 69, + 128, 76, 79, 85, 68, 83, 80, 69, 65, 75, 69, 82, 128, 76, 79, 85, 68, 76, + 217, 76, 79, 84, 85, 83, 128, 76, 79, 84, 128, 76, 79, 83, 83, 76, 69, + 83, 83, 128, 76, 79, 82, 82, 89, 128, 76, 79, 82, 82, 65, 73, 78, 69, + 128, 76, 79, 81, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, 76, 79, 79, + 80, 69, 196, 76, 79, 79, 80, 128, 76, 79, 79, 208, 76, 79, 79, 78, 128, + 76, 79, 79, 203, 76, 79, 79, 128, 76, 79, 78, 83, 85, 77, 128, 76, 79, + 78, 71, 65, 128, 76, 79, 78, 71, 193, 76, 79, 78, 71, 45, 76, 69, 71, 71, + 69, 196, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 89, 82, 128, 76, + 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 83, 79, 204, 76, 79, 78, 71, + 45, 66, 82, 65, 78, 67, 72, 45, 79, 83, 211, 76, 79, 78, 71, 45, 66, 82, + 65, 78, 67, 72, 45, 77, 65, 68, 210, 76, 79, 78, 71, 45, 66, 82, 65, 78, + 67, 72, 45, 72, 65, 71, 65, 76, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, + 67, 72, 45, 65, 210, 76, 79, 77, 77, 65, 69, 128, 76, 79, 77, 128, 76, + 79, 205, 76, 79, 76, 76, 73, 80, 79, 80, 128, 76, 79, 76, 76, 128, 76, + 79, 71, 210, 76, 79, 71, 79, 84, 89, 80, 197, 76, 79, 71, 79, 71, 82, 65, + 205, 76, 79, 71, 128, 76, 79, 68, 69, 83, 84, 79, 78, 69, 128, 76, 79, + 67, 79, 77, 79, 84, 73, 86, 69, 128, 76, 79, 67, 75, 73, 78, 71, 45, 83, + 72, 73, 70, 212, 76, 79, 67, 203, 76, 79, 67, 65, 84, 73, 86, 69, 128, + 76, 79, 67, 65, 84, 73, 79, 78, 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, + 76, 79, 67, 65, 84, 73, 79, 78, 45, 70, 76, 79, 79, 82, 80, 76, 65, 78, + 197, 76, 79, 67, 65, 84, 73, 79, 206, 76, 79, 65, 128, 76, 78, 128, 76, + 76, 85, 85, 128, 76, 76, 79, 79, 128, 76, 76, 76, 85, 85, 128, 76, 76, + 76, 85, 128, 76, 76, 76, 79, 79, 128, 76, 76, 76, 79, 128, 76, 76, 76, + 73, 73, 128, 76, 76, 76, 73, 128, 76, 76, 76, 69, 69, 128, 76, 76, 76, + 69, 128, 76, 76, 76, 65, 85, 128, 76, 76, 76, 65, 73, 128, 76, 76, 76, + 65, 65, 128, 76, 76, 76, 65, 128, 76, 76, 76, 128, 76, 74, 85, 68, 73, + 74, 69, 128, 76, 74, 69, 128, 76, 74, 128, 76, 73, 90, 65, 82, 68, 128, + 76, 73, 88, 128, 76, 73, 87, 78, 128, 76, 73, 86, 82, 197, 76, 73, 84, + 84, 76, 69, 128, 76, 73, 84, 84, 76, 197, 76, 73, 84, 84, 69, 210, 76, + 73, 84, 82, 193, 76, 73, 84, 200, 76, 73, 83, 213, 76, 73, 83, 128, 76, + 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 81, 128, 76, 73, 80, 83, + 84, 73, 67, 75, 128, 76, 73, 80, 211, 76, 73, 208, 76, 73, 78, 75, 73, + 78, 199, 76, 73, 78, 75, 69, 196, 76, 73, 78, 203, 76, 73, 78, 71, 83, + 65, 128, 76, 73, 78, 69, 83, 128, 76, 73, 78, 69, 211, 76, 73, 78, 69, + 45, 57, 128, 76, 73, 78, 69, 45, 55, 128, 76, 73, 78, 69, 45, 51, 128, + 76, 73, 78, 69, 45, 49, 128, 76, 73, 77, 77, 85, 52, 128, 76, 73, 77, 77, + 85, 50, 128, 76, 73, 77, 77, 85, 128, 76, 73, 77, 77, 213, 76, 73, 77, + 73, 84, 69, 196, 76, 73, 77, 73, 84, 65, 84, 73, 79, 78, 128, 76, 73, 77, + 73, 84, 128, 76, 73, 77, 69, 128, 76, 73, 77, 66, 213, 76, 73, 77, 66, + 211, 76, 73, 77, 194, 76, 73, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, + 76, 73, 76, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, 128, 76, 73, 71, 72, + 84, 78, 73, 78, 199, 76, 73, 71, 72, 84, 72, 79, 85, 83, 69, 128, 76, 73, + 71, 72, 84, 128, 76, 73, 71, 65, 84, 73, 78, 199, 76, 73, 70, 84, 69, 82, + 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 128, 76, 73, 69, 84, 128, 76, + 73, 69, 80, 128, 76, 73, 69, 69, 128, 76, 73, 69, 128, 76, 73, 68, 128, + 76, 73, 67, 75, 73, 78, 199, 76, 73, 66, 82, 65, 128, 76, 73, 66, 69, 82, + 84, 89, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, 72, 73, 73, 128, + 76, 72, 65, 86, 73, 89, 65, 78, 73, 128, 76, 72, 65, 199, 76, 72, 65, 65, + 128, 76, 72, 128, 76, 69, 90, 72, 128, 76, 69, 88, 128, 76, 69, 86, 73, + 84, 65, 84, 73, 78, 71, 128, 76, 69, 85, 77, 128, 76, 69, 85, 65, 69, 80, + 128, 76, 69, 85, 65, 69, 77, 128, 76, 69, 85, 128, 76, 69, 213, 76, 69, + 84, 84, 69, 82, 83, 128, 76, 69, 84, 84, 69, 82, 128, 76, 69, 212, 76, + 69, 83, 83, 69, 210, 76, 69, 83, 83, 45, 84, 72, 65, 78, 128, 76, 69, 83, + 83, 45, 84, 72, 65, 206, 76, 69, 80, 67, 72, 193, 76, 69, 80, 128, 76, + 69, 79, 80, 65, 82, 68, 128, 76, 69, 79, 128, 76, 69, 78, 84, 73, 67, 85, + 76, 65, 210, 76, 69, 78, 73, 83, 128, 76, 69, 78, 73, 211, 76, 69, 78, + 71, 84, 72, 69, 78, 69, 82, 128, 76, 69, 78, 71, 84, 72, 45, 55, 128, 76, + 69, 78, 71, 84, 72, 45, 54, 128, 76, 69, 78, 71, 84, 72, 45, 53, 128, 76, + 69, 78, 71, 84, 72, 45, 52, 128, 76, 69, 78, 71, 84, 72, 45, 51, 128, 76, + 69, 78, 71, 84, 72, 45, 50, 128, 76, 69, 78, 71, 84, 72, 45, 49, 128, 76, + 69, 78, 71, 84, 200, 76, 69, 78, 71, 65, 128, 76, 69, 78, 71, 193, 76, + 69, 77, 79, 78, 128, 76, 69, 77, 79, 73, 128, 76, 69, 76, 69, 84, 128, + 76, 69, 76, 69, 212, 76, 69, 203, 76, 69, 73, 77, 77, 65, 128, 76, 69, + 73, 77, 77, 193, 76, 69, 73, 128, 76, 69, 71, 83, 128, 76, 69, 71, 73, + 79, 78, 128, 76, 69, 71, 69, 84, 79, 211, 76, 69, 71, 128, 76, 69, 199, + 76, 69, 70, 84, 87, 65, 82, 68, 83, 128, 76, 69, 70, 84, 45, 84, 79, 45, + 82, 73, 71, 72, 212, 76, 69, 70, 84, 45, 83, 84, 69, 205, 76, 69, 70, 84, + 45, 83, 73, 68, 197, 76, 69, 70, 84, 45, 83, 72, 65, 68, 69, 196, 76, 69, + 70, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 76, 69, 70, 84, 45, 76, 73, + 71, 72, 84, 69, 196, 76, 69, 70, 84, 45, 72, 65, 78, 68, 69, 196, 76, 69, + 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, 84, 45, 70, 65, 67, 73, 78, 199, + 76, 69, 70, 84, 128, 76, 69, 69, 82, 65, 69, 87, 65, 128, 76, 69, 69, 75, + 128, 76, 69, 69, 69, 69, 128, 76, 69, 68, 71, 69, 82, 128, 76, 69, 65, + 84, 72, 69, 82, 128, 76, 69, 65, 70, 128, 76, 69, 65, 198, 76, 69, 65, + 68, 73, 78, 199, 76, 69, 65, 68, 69, 82, 128, 76, 69, 65, 196, 76, 68, + 65, 78, 128, 76, 68, 50, 128, 76, 67, 201, 76, 67, 197, 76, 65, 90, 217, + 76, 65, 89, 65, 78, 78, 65, 128, 76, 65, 88, 128, 76, 65, 87, 128, 76, + 65, 215, 76, 65, 85, 76, 65, 128, 76, 65, 85, 75, 65, 218, 76, 65, 85, + 74, 128, 76, 65, 85, 71, 72, 73, 78, 71, 128, 76, 65, 84, 73, 78, 65, 84, + 197, 76, 65, 84, 73, 75, 128, 76, 65, 84, 69, 82, 65, 204, 76, 65, 84, + 197, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, + 201, 76, 65, 82, 71, 69, 83, 84, 128, 76, 65, 82, 71, 69, 210, 76, 65, + 82, 71, 69, 128, 76, 65, 82, 71, 197, 76, 65, 81, 128, 76, 65, 80, 65, + 81, 128, 76, 65, 207, 76, 65, 78, 84, 69, 82, 78, 128, 76, 65, 78, 71, + 85, 65, 71, 197, 76, 65, 78, 69, 83, 128, 76, 65, 78, 128, 76, 65, 77, + 80, 128, 76, 65, 77, 69, 68, 72, 128, 76, 65, 77, 69, 68, 128, 76, 65, + 77, 69, 196, 76, 65, 77, 69, 128, 76, 65, 77, 197, 76, 65, 77, 68, 65, + 128, 76, 65, 77, 68, 128, 76, 65, 77, 66, 68, 193, 76, 65, 77, 65, 68, + 72, 128, 76, 65, 76, 128, 76, 65, 204, 76, 65, 75, 75, 72, 65, 78, 71, + 89, 65, 79, 128, 76, 65, 75, 45, 55, 52, 57, 128, 76, 65, 75, 45, 55, 50, + 52, 128, 76, 65, 75, 45, 54, 54, 56, 128, 76, 65, 75, 45, 54, 52, 56, + 128, 76, 65, 75, 45, 54, 52, 184, 76, 65, 75, 45, 54, 51, 54, 128, 76, + 65, 75, 45, 54, 49, 55, 128, 76, 65, 75, 45, 54, 49, 183, 76, 65, 75, 45, + 54, 48, 56, 128, 76, 65, 75, 45, 53, 53, 48, 128, 76, 65, 75, 45, 52, 57, + 53, 128, 76, 65, 75, 45, 52, 57, 51, 128, 76, 65, 75, 45, 52, 57, 50, + 128, 76, 65, 75, 45, 52, 57, 48, 128, 76, 65, 75, 45, 52, 56, 51, 128, + 76, 65, 75, 45, 52, 55, 48, 128, 76, 65, 75, 45, 52, 53, 55, 128, 76, 65, + 75, 45, 52, 53, 48, 128, 76, 65, 75, 45, 52, 52, 57, 128, 76, 65, 75, 45, + 52, 52, 185, 76, 65, 75, 45, 52, 52, 49, 128, 76, 65, 75, 45, 51, 57, 48, + 128, 76, 65, 75, 45, 51, 56, 52, 128, 76, 65, 75, 45, 51, 56, 51, 128, + 76, 65, 75, 45, 51, 52, 56, 128, 76, 65, 75, 45, 51, 52, 55, 128, 76, 65, + 75, 45, 51, 52, 51, 128, 76, 65, 75, 45, 50, 54, 54, 128, 76, 65, 75, 45, + 50, 54, 53, 128, 76, 65, 75, 45, 50, 51, 56, 128, 76, 65, 75, 45, 50, 50, + 56, 128, 76, 65, 75, 45, 50, 50, 53, 128, 76, 65, 75, 45, 50, 50, 48, + 128, 76, 65, 75, 45, 50, 49, 57, 128, 76, 65, 75, 45, 50, 49, 48, 128, + 76, 65, 75, 45, 49, 52, 50, 128, 76, 65, 75, 45, 49, 51, 48, 128, 76, 65, + 75, 45, 48, 57, 50, 128, 76, 65, 75, 45, 48, 56, 49, 128, 76, 65, 75, 45, + 48, 56, 177, 76, 65, 75, 45, 48, 56, 48, 128, 76, 65, 75, 45, 48, 55, + 185, 76, 65, 75, 45, 48, 54, 50, 128, 76, 65, 75, 45, 48, 53, 49, 128, + 76, 65, 75, 45, 48, 53, 48, 128, 76, 65, 75, 45, 48, 51, 48, 128, 76, 65, + 75, 45, 48, 50, 53, 128, 76, 65, 75, 45, 48, 50, 49, 128, 76, 65, 75, 45, + 48, 50, 48, 128, 76, 65, 75, 45, 48, 48, 51, 128, 76, 65, 74, 65, 78, 89, + 65, 76, 65, 78, 128, 76, 65, 73, 78, 199, 76, 65, 201, 76, 65, 72, 83, + 72, 85, 128, 76, 65, 72, 128, 76, 65, 71, 85, 83, 128, 76, 65, 71, 213, + 76, 65, 71, 65, 82, 128, 76, 65, 71, 65, 210, 76, 65, 71, 65, 66, 128, + 76, 65, 71, 65, 194, 76, 65, 69, 86, 128, 76, 65, 69, 128, 76, 65, 68, + 217, 76, 65, 67, 75, 128, 76, 65, 67, 65, 128, 76, 65, 66, 79, 85, 82, + 73, 78, 71, 128, 76, 65, 66, 79, 82, 128, 76, 65, 66, 73, 65, 76, 73, 90, + 65, 84, 73, 79, 206, 76, 65, 66, 73, 65, 204, 76, 65, 66, 69, 76, 128, + 76, 65, 66, 65, 84, 128, 76, 65, 65, 78, 65, 69, 128, 76, 65, 65, 78, + 128, 76, 65, 65, 77, 85, 128, 76, 65, 65, 77, 128, 76, 65, 65, 73, 128, + 76, 54, 128, 76, 52, 128, 76, 51, 128, 76, 50, 128, 76, 48, 48, 54, 65, + 128, 76, 48, 48, 50, 65, 128, 76, 45, 84, 89, 80, 197, 76, 45, 83, 72, + 65, 80, 69, 196, 75, 89, 85, 82, 73, 73, 128, 75, 89, 85, 128, 75, 89, + 79, 128, 75, 89, 76, 73, 83, 77, 65, 128, 75, 89, 73, 128, 75, 89, 69, + 128, 75, 89, 65, 84, 72, 79, 211, 75, 89, 65, 65, 128, 75, 89, 65, 128, + 75, 88, 87, 73, 128, 75, 88, 87, 69, 69, 128, 75, 88, 87, 69, 128, 75, + 88, 87, 65, 65, 128, 75, 88, 87, 65, 128, 75, 88, 85, 128, 75, 88, 79, + 128, 75, 88, 73, 128, 75, 88, 69, 69, 128, 75, 88, 69, 128, 75, 88, 65, + 65, 128, 75, 88, 65, 128, 75, 87, 86, 128, 75, 87, 85, 51, 49, 56, 128, + 75, 87, 79, 79, 128, 75, 87, 79, 128, 75, 87, 77, 128, 75, 87, 73, 73, + 128, 75, 87, 73, 128, 75, 87, 69, 69, 128, 75, 87, 69, 128, 75, 87, 66, + 128, 75, 87, 65, 89, 128, 75, 87, 65, 69, 84, 128, 75, 87, 65, 65, 128, + 75, 86, 65, 128, 75, 86, 128, 75, 85, 88, 128, 75, 85, 86, 128, 75, 85, + 85, 72, 128, 75, 85, 84, 128, 75, 85, 83, 77, 65, 128, 75, 85, 83, 72, + 85, 50, 128, 75, 85, 83, 72, 85, 178, 75, 85, 82, 88, 128, 75, 85, 82, + 85, 90, 69, 73, 82, 79, 128, 75, 85, 82, 84, 128, 75, 85, 82, 79, 79, 78, + 69, 128, 75, 85, 82, 128, 75, 85, 210, 75, 85, 81, 128, 75, 85, 79, 88, + 128, 75, 85, 79, 80, 128, 75, 85, 79, 208, 75, 85, 79, 77, 128, 75, 85, + 79, 128, 75, 85, 78, 71, 128, 75, 85, 78, 68, 68, 65, 76, 73, 89, 65, + 128, 75, 85, 76, 128, 75, 85, 204, 75, 85, 71, 128, 75, 85, 69, 84, 128, + 75, 85, 66, 128, 75, 85, 65, 86, 128, 75, 85, 65, 66, 128, 75, 85, 65, + 128, 75, 85, 55, 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, + 85, 179, 75, 84, 128, 75, 83, 83, 85, 85, 128, 75, 83, 83, 85, 128, 75, + 83, 83, 79, 79, 128, 75, 83, 83, 79, 128, 75, 83, 83, 73, 73, 128, 75, + 83, 83, 73, 128, 75, 83, 83, 69, 69, 128, 75, 83, 83, 69, 128, 75, 83, + 83, 65, 85, 128, 75, 83, 83, 65, 73, 128, 75, 83, 83, 65, 65, 128, 75, + 83, 83, 65, 128, 75, 83, 83, 128, 75, 83, 73, 128, 75, 82, 69, 77, 65, + 83, 84, 73, 128, 75, 82, 65, 84, 73, 77, 79, 89, 80, 79, 82, 82, 79, 79, + 78, 128, 75, 82, 65, 84, 73, 77, 79, 75, 79, 85, 70, 73, 83, 77, 65, 128, + 75, 82, 65, 84, 73, 77, 65, 84, 65, 128, 75, 82, 65, 84, 73, 77, 193, 75, + 80, 85, 128, 75, 80, 79, 81, 128, 75, 80, 79, 79, 128, 75, 80, 79, 128, + 75, 80, 73, 128, 75, 80, 69, 85, 88, 128, 75, 80, 69, 69, 128, 75, 80, + 69, 128, 75, 80, 65, 82, 65, 81, 128, 75, 80, 65, 78, 128, 75, 80, 65, + 72, 128, 75, 80, 65, 128, 75, 79, 88, 128, 75, 79, 86, 85, 85, 128, 75, + 79, 86, 128, 75, 79, 84, 79, 128, 75, 79, 82, 85, 78, 65, 128, 75, 79, + 82, 79, 78, 73, 83, 128, 75, 79, 82, 69, 65, 206, 75, 79, 82, 65, 78, 73, + 195, 75, 79, 81, 78, 68, 79, 78, 128, 75, 79, 80, 80, 65, 128, 75, 79, + 80, 128, 75, 79, 79, 86, 128, 75, 79, 79, 80, 79, 128, 75, 79, 79, 77, + 85, 85, 84, 128, 75, 79, 79, 66, 128, 75, 79, 79, 128, 75, 79, 78, 84, + 69, 86, 77, 65, 128, 75, 79, 78, 84, 69, 86, 77, 193, 75, 79, 77, 201, + 75, 79, 77, 66, 85, 86, 65, 128, 75, 79, 77, 66, 85, 86, 193, 75, 79, 77, + 66, 213, 75, 79, 75, 79, 128, 75, 79, 75, 69, 128, 75, 79, 75, 128, 75, + 79, 203, 75, 79, 73, 128, 75, 79, 201, 75, 79, 72, 128, 75, 79, 71, 72, + 79, 77, 128, 75, 79, 69, 84, 128, 75, 79, 66, 128, 75, 79, 65, 76, 65, + 128, 75, 79, 65, 128, 75, 78, 85, 67, 75, 76, 69, 83, 128, 75, 78, 85, + 67, 75, 76, 69, 128, 75, 78, 79, 66, 83, 128, 75, 78, 73, 71, 72, 84, + 128, 75, 78, 73, 71, 72, 212, 75, 78, 73, 70, 69, 128, 75, 78, 73, 70, + 197, 75, 77, 128, 75, 205, 75, 76, 73, 84, 79, 78, 128, 75, 76, 65, 83, + 77, 65, 128, 75, 76, 65, 83, 77, 193, 75, 76, 65, 128, 75, 76, 128, 75, + 75, 85, 128, 75, 75, 79, 128, 75, 75, 73, 128, 75, 75, 69, 69, 128, 75, + 75, 69, 128, 75, 75, 65, 128, 75, 75, 128, 75, 74, 69, 128, 75, 73, 89, + 69, 79, 75, 45, 84, 73, 75, 69, 85, 84, 128, 75, 73, 89, 69, 79, 75, 45, + 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 75, 73, 89, 69, 79, 75, + 45, 82, 73, 69, 85, 76, 128, 75, 73, 89, 69, 79, 75, 45, 80, 73, 69, 85, + 80, 128, 75, 73, 89, 69, 79, 75, 45, 78, 73, 69, 85, 78, 128, 75, 73, 89, + 69, 79, 75, 45, 75, 72, 73, 69, 85, 75, 72, 128, 75, 73, 89, 69, 79, 75, + 45, 67, 72, 73, 69, 85, 67, 72, 128, 75, 73, 89, 69, 79, 203, 75, 73, 88, + 128, 75, 73, 87, 73, 70, 82, 85, 73, 84, 128, 75, 73, 87, 128, 75, 73, + 86, 128, 75, 73, 84, 128, 75, 73, 83, 83, 73, 78, 199, 75, 73, 83, 83, + 128, 75, 73, 83, 211, 75, 73, 83, 73, 77, 53, 128, 75, 73, 83, 73, 77, + 181, 75, 73, 83, 72, 128, 75, 73, 83, 65, 76, 128, 75, 73, 82, 79, 87, + 65, 84, 84, 79, 128, 75, 73, 82, 79, 77, 69, 69, 84, 79, 82, 85, 128, 75, + 73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 75, 73, 82, 79, 128, 75, 73, 82, + 71, 72, 73, 218, 75, 73, 81, 128, 75, 73, 80, 128, 75, 73, 208, 75, 73, + 78, 83, 72, 73, 80, 128, 75, 73, 78, 68, 69, 82, 71, 65, 82, 84, 69, 78, + 128, 75, 73, 77, 79, 78, 79, 128, 75, 73, 76, 76, 69, 82, 128, 75, 73, + 73, 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 86, 65, 206, + 75, 73, 69, 80, 128, 75, 73, 69, 69, 77, 128, 75, 73, 69, 128, 75, 73, + 68, 128, 75, 73, 196, 75, 73, 67, 75, 128, 75, 73, 66, 128, 75, 73, 65, + 86, 128, 75, 73, 65, 66, 128, 75, 72, 90, 128, 75, 72, 87, 65, 73, 128, + 75, 72, 85, 69, 78, 45, 76, 85, 197, 75, 72, 85, 69, 206, 75, 72, 85, 68, + 65, 87, 65, 68, 201, 75, 72, 85, 68, 65, 77, 128, 75, 72, 85, 65, 84, + 128, 75, 72, 79, 85, 128, 75, 72, 79, 212, 75, 72, 79, 78, 128, 75, 72, + 79, 77, 85, 84, 128, 75, 72, 79, 74, 75, 201, 75, 72, 79, 128, 75, 72, + 207, 75, 72, 77, 213, 75, 72, 73, 84, 128, 75, 72, 73, 78, 89, 65, 128, + 75, 72, 73, 69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 201, 75, 72, 72, + 79, 128, 75, 72, 72, 65, 128, 75, 72, 69, 84, 72, 128, 75, 72, 69, 73, + 128, 75, 72, 69, 69, 128, 75, 72, 69, 128, 75, 72, 65, 86, 128, 75, 72, + 65, 82, 79, 83, 72, 84, 72, 201, 75, 72, 65, 82, 128, 75, 72, 65, 80, 72, + 128, 75, 72, 65, 78, 199, 75, 72, 65, 78, 68, 193, 75, 72, 65, 78, 128, + 75, 72, 65, 77, 84, 201, 75, 72, 65, 75, 65, 83, 83, 73, 65, 206, 75, 72, + 65, 73, 128, 75, 72, 65, 72, 128, 75, 72, 65, 200, 75, 72, 65, 66, 128, + 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, 67, 65, 80, 128, 75, 69, + 89, 67, 65, 208, 75, 69, 89, 66, 79, 65, 82, 68, 128, 75, 69, 89, 66, 79, + 65, 82, 196, 75, 69, 88, 128, 75, 69, 86, 128, 75, 69, 85, 89, 69, 85, + 88, 128, 75, 69, 85, 83, 72, 69, 85, 65, 69, 80, 128, 75, 69, 85, 83, 69, + 85, 88, 128, 75, 69, 85, 80, 85, 81, 128, 75, 69, 85, 79, 212, 75, 69, + 85, 77, 128, 75, 69, 85, 75, 69, 85, 84, 78, 68, 65, 128, 75, 69, 85, 75, + 65, 81, 128, 75, 69, 85, 65, 69, 84, 77, 69, 85, 78, 128, 75, 69, 85, 65, + 69, 82, 73, 128, 75, 69, 84, 84, 201, 75, 69, 83, 72, 50, 128, 75, 69, + 82, 69, 84, 128, 75, 69, 79, 87, 128, 75, 69, 78, 84, 73, 77, 65, 84, 65, + 128, 75, 69, 78, 84, 73, 77, 65, 84, 193, 75, 69, 78, 84, 73, 77, 193, + 75, 69, 78, 65, 84, 128, 75, 69, 78, 128, 75, 69, 206, 75, 69, 77, 80, + 85, 76, 128, 75, 69, 77, 80, 85, 204, 75, 69, 77, 80, 76, 73, 128, 75, + 69, 77, 80, 76, 201, 75, 69, 77, 80, 72, 82, 69, 78, 71, 128, 75, 69, 77, + 66, 65, 78, 71, 128, 75, 69, 76, 86, 73, 206, 75, 69, 72, 69, 72, 128, + 75, 69, 72, 69, 200, 75, 69, 72, 128, 75, 69, 70, 85, 76, 65, 128, 75, + 69, 69, 86, 128, 75, 69, 69, 83, 85, 128, 75, 69, 69, 80, 73, 78, 199, + 75, 69, 69, 78, 71, 128, 75, 69, 69, 66, 128, 75, 69, 66, 128, 75, 69, + 65, 65, 69, 128, 75, 67, 65, 76, 128, 75, 66, 128, 75, 65, 90, 65, 75, + 200, 75, 65, 89, 65, 78, 78, 65, 128, 75, 65, 89, 65, 200, 75, 65, 88, + 128, 75, 65, 87, 86, 128, 75, 65, 87, 73, 128, 75, 65, 87, 66, 128, 75, + 65, 86, 89, 75, 65, 128, 75, 65, 86, 128, 75, 65, 85, 86, 128, 75, 65, + 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 85, 66, 128, 75, 65, 84, 79, + 128, 75, 65, 84, 72, 73, 83, 84, 73, 128, 75, 65, 84, 72, 65, 75, 193, + 75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75, 65, 84, 65, 86, 193, 75, 65, + 84, 65, 75, 65, 78, 65, 45, 72, 73, 82, 65, 71, 65, 78, 193, 75, 65, 83, + 82, 65, 84, 65, 78, 128, 75, 65, 83, 82, 65, 84, 65, 206, 75, 65, 83, 82, + 65, 128, 75, 65, 83, 82, 193, 75, 65, 83, 75, 65, 76, 128, 75, 65, 83, + 75, 65, 204, 75, 65, 83, 72, 77, 73, 82, 201, 75, 65, 82, 83, 72, 65, 78, + 65, 128, 75, 65, 82, 79, 82, 73, 73, 128, 75, 65, 82, 207, 75, 65, 82, + 69, 206, 75, 65, 82, 65, 84, 84, 79, 128, 75, 65, 82, 65, 78, 128, 75, + 65, 80, 89, 69, 79, 85, 78, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, + 75, 65, 80, 89, 69, 79, 85, 78, 82, 73, 69, 85, 76, 128, 75, 65, 80, 89, + 69, 79, 85, 78, 80, 72, 73, 69, 85, 80, 72, 128, 75, 65, 80, 89, 69, 79, + 85, 78, 77, 73, 69, 85, 77, 128, 75, 65, 80, 80, 65, 128, 75, 65, 80, 80, + 193, 75, 65, 80, 79, 128, 75, 65, 80, 72, 128, 75, 65, 80, 65, 76, 128, + 75, 65, 80, 65, 128, 75, 65, 208, 75, 65, 78, 84, 65, 74, 193, 75, 65, + 78, 78, 65, 68, 193, 75, 65, 78, 71, 128, 75, 65, 78, 199, 75, 65, 78, + 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, 65, 77, 50, 128, 75, 65, 77, + 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, 75, + 128, 75, 65, 203, 75, 65, 73, 86, 128, 75, 65, 73, 84, 72, 201, 75, 65, + 73, 82, 73, 128, 75, 65, 73, 66, 128, 75, 65, 73, 128, 75, 65, 201, 75, + 65, 70, 65, 128, 75, 65, 70, 128, 75, 65, 198, 75, 65, 68, 53, 128, 75, + 65, 68, 181, 75, 65, 68, 52, 128, 75, 65, 68, 51, 128, 75, 65, 68, 179, + 75, 65, 68, 50, 128, 75, 65, 68, 128, 75, 65, 66, 193, 75, 65, 66, 128, + 75, 65, 65, 86, 128, 75, 65, 65, 73, 128, 75, 65, 65, 70, 85, 128, 75, + 65, 65, 70, 128, 75, 65, 65, 66, 65, 128, 75, 65, 65, 66, 128, 75, 65, + 50, 128, 75, 65, 178, 75, 48, 48, 56, 128, 75, 48, 48, 55, 128, 75, 48, + 48, 54, 128, 75, 48, 48, 53, 128, 75, 48, 48, 52, 128, 75, 48, 48, 51, + 128, 75, 48, 48, 50, 128, 75, 48, 48, 49, 128, 74, 87, 65, 128, 74, 85, + 85, 128, 74, 85, 84, 128, 74, 85, 83, 84, 73, 70, 73, 67, 65, 84, 73, 79, + 78, 128, 74, 85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84, 128, 74, 85, + 79, 80, 128, 74, 85, 78, 79, 128, 74, 85, 78, 69, 128, 74, 85, 76, 89, + 128, 74, 85, 71, 71, 76, 73, 78, 71, 128, 74, 85, 69, 85, 73, 128, 74, + 85, 68, 85, 76, 128, 74, 85, 68, 71, 69, 128, 74, 85, 68, 69, 79, 45, 83, + 80, 65, 78, 73, 83, 200, 74, 79, 89, 83, 84, 73, 67, 75, 128, 74, 79, 89, + 79, 85, 211, 74, 79, 89, 128, 74, 79, 86, 69, 128, 74, 79, 212, 74, 79, + 78, 71, 128, 74, 79, 78, 193, 74, 79, 75, 69, 82, 128, 74, 79, 73, 78, + 84, 83, 128, 74, 79, 73, 78, 69, 68, 128, 74, 79, 73, 78, 128, 74, 79, + 65, 128, 74, 74, 89, 88, 128, 74, 74, 89, 84, 128, 74, 74, 89, 80, 128, + 74, 74, 89, 128, 74, 74, 85, 88, 128, 74, 74, 85, 84, 128, 74, 74, 85, + 82, 88, 128, 74, 74, 85, 82, 128, 74, 74, 85, 80, 128, 74, 74, 85, 79, + 88, 128, 74, 74, 85, 79, 80, 128, 74, 74, 85, 79, 128, 74, 74, 85, 128, + 74, 74, 79, 88, 128, 74, 74, 79, 84, 128, 74, 74, 79, 80, 128, 74, 74, + 79, 128, 74, 74, 73, 88, 128, 74, 74, 73, 84, 128, 74, 74, 73, 80, 128, + 74, 74, 73, 69, 88, 128, 74, 74, 73, 69, 84, 128, 74, 74, 73, 69, 80, + 128, 74, 74, 73, 69, 128, 74, 74, 73, 128, 74, 74, 69, 69, 128, 74, 74, + 69, 128, 74, 74, 65, 128, 74, 73, 76, 128, 74, 73, 73, 77, 128, 74, 73, + 73, 128, 74, 73, 72, 86, 65, 77, 85, 76, 73, 89, 65, 128, 74, 73, 65, + 128, 74, 72, 79, 88, 128, 74, 72, 79, 128, 74, 72, 69, 72, 128, 74, 72, + 65, 89, 73, 78, 128, 74, 72, 65, 78, 128, 74, 72, 65, 77, 128, 74, 72, + 65, 65, 128, 74, 72, 65, 128, 74, 69, 85, 128, 74, 69, 82, 85, 83, 65, + 76, 69, 77, 128, 74, 69, 82, 65, 206, 74, 69, 82, 65, 128, 74, 69, 82, + 128, 74, 69, 72, 128, 74, 69, 200, 74, 69, 71, 79, 71, 65, 78, 128, 74, + 69, 69, 77, 128, 74, 69, 65, 78, 83, 128, 74, 65, 89, 78, 128, 74, 65, + 89, 73, 78, 128, 74, 65, 89, 65, 78, 78, 65, 128, 74, 65, 87, 128, 74, + 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, 86, 65, 78, 69, 83, 197, 74, 65, + 85, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 74, 65, 80, + 65, 78, 128, 74, 65, 78, 85, 65, 82, 89, 128, 74, 65, 76, 76, 65, 74, 65, + 76, 65, 76, 79, 85, 72, 79, 85, 128, 74, 65, 73, 206, 74, 65, 73, 128, + 74, 65, 72, 128, 74, 65, 68, 69, 128, 74, 65, 67, 75, 83, 128, 74, 65, + 67, 75, 45, 79, 45, 76, 65, 78, 84, 69, 82, 78, 128, 74, 65, 67, 203, 74, + 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 73, 90, 72, 73, 84, 83, 65, + 128, 73, 90, 72, 73, 84, 83, 193, 73, 90, 72, 69, 128, 73, 90, 65, 75, + 65, 89, 193, 73, 89, 69, 75, 128, 73, 89, 65, 78, 78, 65, 128, 73, 85, + 74, 65, 128, 73, 84, 211, 73, 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, + 69, 77, 128, 73, 83, 83, 72, 65, 82, 128, 73, 83, 79, 83, 67, 69, 76, 69, + 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 73, 83, 79, 76, 65, 84, 69, + 128, 73, 83, 76, 65, 78, 68, 128, 73, 83, 69, 78, 45, 73, 83, 69, 78, + 128, 73, 83, 65, 75, 73, 193, 73, 83, 45, 80, 73, 76, 76, 65, 128, 73, + 82, 85, 89, 65, 78, 78, 65, 128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, + 73, 82, 79, 78, 45, 67, 79, 80, 80, 69, 210, 73, 82, 79, 78, 128, 73, 82, + 66, 128, 73, 79, 84, 73, 70, 73, 69, 196, 73, 79, 84, 65, 84, 69, 196, + 73, 79, 84, 65, 128, 73, 79, 84, 193, 73, 79, 82, 128, 73, 79, 68, 72, + 65, 68, 72, 128, 73, 78, 86, 73, 83, 73, 66, 76, 197, 73, 78, 86, 69, 82, + 84, 69, 68, 128, 73, 78, 86, 69, 82, 84, 69, 196, 73, 78, 86, 69, 82, 83, + 197, 73, 78, 84, 82, 79, 68, 85, 67, 69, 82, 128, 73, 78, 84, 73, 128, + 73, 78, 84, 69, 82, 83, 89, 76, 76, 65, 66, 73, 195, 73, 78, 84, 69, 82, + 83, 69, 67, 84, 73, 79, 78, 128, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, + 79, 206, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 78, 199, 73, 78, 84, 69, + 82, 82, 79, 66, 65, 78, 71, 128, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, + 199, 73, 78, 84, 69, 82, 80, 79, 76, 65, 84, 73, 79, 206, 73, 78, 84, 69, + 82, 76, 79, 67, 75, 69, 196, 73, 78, 84, 69, 82, 76, 73, 78, 69, 65, 210, + 73, 78, 84, 69, 82, 76, 65, 67, 69, 196, 73, 78, 84, 69, 82, 73, 79, 210, + 73, 78, 84, 69, 82, 69, 83, 212, 73, 78, 84, 69, 82, 67, 65, 76, 65, 84, + 69, 128, 73, 78, 84, 69, 71, 82, 65, 84, 73, 79, 78, 128, 73, 78, 84, 69, + 71, 82, 65, 84, 73, 79, 206, 73, 78, 84, 69, 71, 82, 65, 76, 128, 73, 78, + 84, 69, 71, 82, 65, 204, 73, 78, 83, 85, 76, 65, 210, 73, 78, 83, 84, 82, + 85, 77, 69, 78, 84, 65, 204, 73, 78, 83, 73, 68, 69, 128, 73, 78, 83, 73, + 68, 197, 73, 78, 83, 69, 82, 84, 73, 79, 206, 73, 78, 83, 69, 67, 84, + 128, 73, 78, 83, 67, 82, 73, 80, 84, 73, 79, 78, 65, 204, 73, 78, 80, 85, + 212, 73, 78, 78, 79, 67, 69, 78, 67, 69, 128, 73, 78, 78, 78, 128, 73, + 78, 78, 69, 82, 128, 73, 78, 78, 69, 210, 73, 78, 78, 128, 73, 78, 73, + 78, 71, 85, 128, 73, 78, 73, 128, 73, 78, 72, 73, 66, 73, 212, 73, 78, + 72, 69, 82, 69, 78, 212, 73, 78, 72, 65, 76, 69, 128, 73, 78, 71, 87, 65, + 90, 128, 73, 78, 70, 79, 82, 77, 65, 84, 73, 79, 206, 73, 78, 70, 76, 85, + 69, 78, 67, 69, 128, 73, 78, 70, 73, 78, 73, 84, 89, 128, 73, 78, 70, 73, + 78, 73, 84, 217, 73, 78, 68, 85, 83, 84, 82, 73, 65, 204, 73, 78, 68, 73, + 82, 69, 67, 212, 73, 78, 68, 73, 67, 84, 73, 79, 206, 73, 78, 68, 73, 67, + 65, 84, 79, 82, 128, 73, 78, 68, 73, 67, 65, 84, 79, 210, 73, 78, 68, 73, + 195, 73, 78, 68, 73, 65, 206, 73, 78, 68, 69, 88, 128, 73, 78, 68, 69, + 80, 69, 78, 68, 69, 78, 212, 73, 78, 67, 82, 69, 77, 69, 78, 84, 128, 73, + 78, 67, 82, 69, 65, 83, 69, 211, 73, 78, 67, 82, 69, 65, 83, 69, 128, 73, + 78, 67, 82, 69, 65, 83, 197, 73, 78, 67, 79, 77, 80, 76, 69, 84, 197, 73, + 78, 67, 79, 77, 73, 78, 199, 73, 78, 67, 76, 85, 68, 73, 78, 199, 73, 78, + 67, 72, 128, 73, 78, 66, 79, 216, 73, 78, 65, 80, 128, 73, 78, 45, 65, + 76, 65, 70, 128, 73, 77, 80, 69, 82, 73, 65, 204, 73, 77, 80, 69, 82, 70, + 69, 67, 84, 85, 205, 73, 77, 80, 69, 82, 70, 69, 67, 84, 65, 128, 73, 77, + 80, 69, 82, 70, 69, 67, 84, 193, 73, 77, 78, 128, 73, 77, 73, 83, 69, 79, + 211, 73, 77, 73, 78, 51, 128, 73, 77, 73, 78, 128, 73, 77, 73, 206, 73, + 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, 73, 77, 73, 70, 84, 72, 79, 82, + 65, 128, 73, 77, 73, 70, 79, 78, 79, 78, 128, 73, 77, 73, 68, 73, 65, 82, + 71, 79, 78, 128, 73, 77, 65, 71, 197, 73, 76, 85, 89, 65, 78, 78, 65, + 128, 73, 76, 85, 89, 128, 73, 76, 85, 85, 89, 65, 78, 78, 65, 128, 73, + 76, 85, 84, 128, 73, 76, 73, 77, 77, 85, 52, 128, 73, 76, 73, 77, 77, 85, + 51, 128, 73, 76, 73, 77, 77, 85, 128, 73, 76, 73, 77, 77, 213, 73, 76, + 50, 128, 73, 75, 65, 82, 65, 128, 73, 75, 65, 82, 193, 73, 74, 128, 73, + 73, 89, 65, 78, 78, 65, 128, 73, 71, 73, 128, 73, 71, 201, 73, 71, 71, + 87, 83, 128, 73, 70, 73, 78, 128, 73, 69, 85, 78, 71, 45, 84, 73, 75, 69, + 85, 84, 128, 73, 69, 85, 78, 71, 45, 84, 72, 73, 69, 85, 84, 72, 128, 73, + 69, 85, 78, 71, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 73, + 69, 85, 78, 71, 45, 82, 73, 69, 85, 76, 128, 73, 69, 85, 78, 71, 45, 80, + 73, 69, 85, 80, 128, 73, 69, 85, 78, 71, 45, 80, 72, 73, 69, 85, 80, 72, + 128, 73, 69, 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128, 73, 69, 85, 78, + 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, 73, 69, 85, 78, 71, 45, 67, 73, + 69, 85, 67, 128, 73, 69, 85, 78, 71, 45, 67, 72, 73, 69, 85, 67, 72, 128, + 73, 69, 85, 78, 199, 73, 68, 76, 69, 128, 73, 68, 73, 77, 128, 73, 68, + 73, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, + 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, + 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 54, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, + 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, + 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 65, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, + 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 52, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 69, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 56, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 50, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 70, 57, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 57, 49, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 57, 48, 52, + 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 68, 55, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 67, 65, 57, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 56, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 55, 68, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 55, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 57, 56, + 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 54, 68, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 51, 51, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 55, 53, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 55, 49, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 55, 48, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 70, 49, + 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 69, 56, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 50, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 54, 55, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 54, 55, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 54, 54, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 66, + 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 57, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 53, 55, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 54, 51, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 54, 51, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 54, 50, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 53, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 52, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 70, 56, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 53, 68, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 53, 66, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 53, 66, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 57, 50, + 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 57, 49, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 56, 70, 48, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 53, 53, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 53, 52, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 53, 52, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 51, 70, + 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 51, 67, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 68, 68, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 53, 50, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 53, 50, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 53, 50, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 49, 56, + 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 65, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 56, 67, 128, 73, 68, 69, 79, + 71, 82, 65, 80, 72, 45, 52, 69, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 52, 69, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, + 52, 69, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, + 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 67, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 65, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 65, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 65, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, + 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 51, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 49, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 48, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 65, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, + 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 65, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 56, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 65, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 65, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, + 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 49, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 70, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 69, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 56, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 54, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 70, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 68, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 67, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 54, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 52, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 68, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 66, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 65, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 52, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 50, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 66, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 57, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 56, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 50, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 48, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 57, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 55, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 54, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 48, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 69, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 55, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 53, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 52, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 69, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 67, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 53, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 51, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 50, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 67, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 65, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 51, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 49, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 48, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 65, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 56, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 49, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 70, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 69, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 56, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 54, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 70, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 68, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 67, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 54, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 52, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 68, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 66, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 65, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 52, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 50, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 66, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 57, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 56, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 50, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 48, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 57, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 55, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 54, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 48, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 69, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 55, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 53, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 52, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 69, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 67, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, + 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 53, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 51, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 50, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 57, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 67, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 65, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 57, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 51, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 49, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 48, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 65, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 56, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 55, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 49, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 70, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 69, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 56, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 54, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 53, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 70, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 68, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 67, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 54, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 52, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 51, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 68, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 66, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 65, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 52, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 50, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 49, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 66, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 57, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 56, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 50, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 48, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 70, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 57, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 55, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 54, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 48, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 70, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 69, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 68, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 55, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 54, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 53, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 52, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 69, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 68, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 67, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 66, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 53, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 52, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 51, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 50, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 67, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 66, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 65, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 57, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 51, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 50, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 49, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 48, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 65, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 57, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 56, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 55, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 49, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 48, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 70, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 69, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 56, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 55, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 54, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 53, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 70, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 69, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 68, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 67, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 54, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 53, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 52, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 51, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 68, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 67, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 66, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 65, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 52, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 51, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 50, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 49, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 66, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 65, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 57, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 56, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 50, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 49, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 48, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 70, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 57, + 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 56, 128, 73, + 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 55, 128, 73, 68, 69, + 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 54, 128, 73, 68, 69, 79, 71, + 82, 65, 80, 72, 45, 50, 70, 56, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, + 80, 72, 45, 50, 70, 56, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, + 45, 50, 70, 56, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, + 70, 56, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, + 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 48, + 128, 73, 68, 69, 78, 84, 73, 70, 73, 67, 65, 84, 73, 79, 78, 128, 73, 68, + 69, 78, 84, 73, 67, 65, 204, 73, 67, 79, 78, 128, 73, 67, 72, 79, 85, + 128, 73, 67, 72, 79, 83, 128, 73, 67, 72, 73, 77, 65, 84, 79, 83, 128, + 73, 67, 72, 65, 68, 73, 78, 128, 73, 67, 69, 76, 65, 78, 68, 73, 67, 45, + 89, 82, 128, 73, 66, 73, 70, 73, 76, 73, 128, 73, 65, 85, 68, 65, 128, + 73, 48, 49, 53, 128, 73, 48, 49, 52, 128, 73, 48, 49, 51, 128, 73, 48, + 49, 50, 128, 73, 48, 49, 49, 65, 128, 73, 48, 49, 49, 128, 73, 48, 49, + 48, 65, 128, 73, 48, 49, 48, 128, 73, 48, 48, 57, 65, 128, 73, 48, 48, + 57, 128, 73, 48, 48, 56, 128, 73, 48, 48, 55, 128, 73, 48, 48, 54, 128, + 73, 48, 48, 53, 65, 128, 73, 48, 48, 53, 128, 73, 48, 48, 52, 128, 73, + 48, 48, 51, 128, 73, 48, 48, 50, 128, 73, 48, 48, 49, 128, 73, 45, 89, + 85, 128, 73, 45, 89, 79, 128, 73, 45, 89, 69, 79, 128, 73, 45, 89, 69, + 128, 73, 45, 89, 65, 69, 128, 73, 45, 89, 65, 45, 79, 128, 73, 45, 89, + 65, 128, 73, 45, 79, 45, 73, 128, 73, 45, 79, 128, 73, 45, 69, 85, 128, + 73, 45, 66, 69, 65, 77, 128, 73, 45, 65, 82, 65, 69, 65, 128, 73, 45, 65, + 128, 72, 90, 90, 90, 71, 128, 72, 90, 90, 90, 128, 72, 90, 90, 80, 128, + 72, 90, 90, 128, 72, 90, 87, 71, 128, 72, 90, 87, 128, 72, 90, 84, 128, + 72, 90, 71, 128, 72, 89, 83, 84, 69, 82, 69, 83, 73, 211, 72, 89, 80, 79, + 68, 73, 65, 83, 84, 79, 76, 69, 128, 72, 89, 80, 72, 69, 78, 65, 84, 73, + 79, 206, 72, 89, 80, 72, 69, 78, 45, 77, 73, 78, 85, 83, 128, 72, 89, 80, + 72, 69, 78, 128, 72, 89, 80, 72, 69, 206, 72, 89, 71, 73, 69, 73, 65, + 128, 72, 88, 87, 71, 128, 72, 88, 85, 79, 88, 128, 72, 88, 85, 79, 84, + 128, 72, 88, 85, 79, 80, 128, 72, 88, 85, 79, 128, 72, 88, 79, 88, 128, + 72, 88, 79, 84, 128, 72, 88, 79, 80, 128, 72, 88, 79, 128, 72, 88, 73, + 88, 128, 72, 88, 73, 84, 128, 72, 88, 73, 80, 128, 72, 88, 73, 69, 88, + 128, 72, 88, 73, 69, 84, 128, 72, 88, 73, 69, 80, 128, 72, 88, 73, 69, + 128, 72, 88, 73, 128, 72, 88, 69, 88, 128, 72, 88, 69, 80, 128, 72, 88, + 69, 128, 72, 88, 65, 88, 128, 72, 88, 65, 84, 128, 72, 88, 65, 80, 128, + 72, 88, 65, 128, 72, 87, 85, 128, 72, 87, 65, 73, 82, 128, 72, 87, 65, + 72, 128, 72, 85, 86, 65, 128, 72, 85, 83, 72, 69, 196, 72, 85, 83, 72, + 128, 72, 85, 82, 65, 78, 128, 72, 85, 79, 84, 128, 72, 85, 78, 68, 82, + 69, 68, 83, 128, 72, 85, 78, 68, 82, 69, 68, 211, 72, 85, 78, 68, 82, 69, + 68, 128, 72, 85, 78, 68, 82, 69, 196, 72, 85, 78, 128, 72, 85, 77, 208, + 72, 85, 77, 65, 78, 128, 72, 85, 77, 65, 206, 72, 85, 76, 50, 128, 72, + 85, 73, 73, 84, 79, 128, 72, 85, 71, 71, 73, 78, 199, 72, 85, 66, 50, + 128, 72, 85, 66, 178, 72, 85, 66, 128, 72, 85, 65, 82, 65, 68, 68, 79, + 128, 72, 85, 65, 78, 128, 72, 84, 83, 128, 72, 84, 74, 128, 72, 82, 89, + 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, 80, 128, 72, + 79, 85, 83, 197, 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, 85, 82, + 71, 76, 65, 83, 211, 72, 79, 85, 82, 128, 72, 79, 85, 210, 72, 79, 84, + 69, 76, 128, 72, 79, 84, 65, 128, 72, 79, 83, 80, 73, 84, 65, 76, 128, + 72, 79, 82, 83, 69, 128, 72, 79, 82, 83, 197, 72, 79, 82, 82, 128, 72, + 79, 82, 78, 83, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 76, 217, 72, + 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 54, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 53, 128, 72, 79, 82, + 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 52, 128, 72, 79, 82, 73, + 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 51, 128, 72, 79, 82, 73, 90, + 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, + 78, 84, 65, 76, 45, 48, 54, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, + 84, 65, 76, 45, 48, 54, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, + 65, 76, 45, 48, 53, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, + 76, 45, 48, 53, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, + 45, 48, 53, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, + 48, 53, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, + 53, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, + 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, + 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, + 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 53, + 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 52, 128, + 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 51, 128, 72, + 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 50, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 49, 128, 72, 79, 82, + 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 48, 128, 72, 79, 82, 73, + 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 54, 128, 72, 79, 82, 73, 90, + 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, + 78, 84, 65, 76, 45, 48, 51, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, + 84, 65, 76, 45, 48, 51, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, + 65, 76, 45, 48, 51, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, + 76, 45, 48, 51, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, + 45, 48, 51, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, + 48, 50, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, + 50, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, + 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, + 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, + 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 49, + 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 48, 128, + 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 54, 128, 72, + 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 53, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 52, 128, 72, 79, 82, + 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 51, 128, 72, 79, 82, 73, + 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 50, 128, 72, 79, 82, 73, 90, + 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, + 78, 84, 65, 76, 45, 48, 49, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, + 84, 65, 76, 45, 48, 48, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, + 65, 76, 45, 48, 48, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, + 76, 45, 48, 48, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, + 45, 48, 48, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, + 48, 48, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, + 48, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, + 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 128, 72, 79, 82, + 73, 90, 79, 78, 84, 65, 204, 72, 79, 82, 73, 128, 72, 79, 82, 193, 72, + 79, 79, 85, 128, 72, 79, 79, 82, 85, 128, 72, 79, 79, 80, 128, 72, 79, + 79, 78, 128, 72, 79, 79, 75, 69, 68, 128, 72, 79, 79, 75, 69, 196, 72, + 79, 78, 69, 89, 66, 69, 69, 128, 72, 79, 78, 69, 217, 72, 79, 77, 79, 84, + 72, 69, 84, 73, 67, 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 195, 72, 79, + 76, 79, 128, 72, 79, 76, 76, 79, 215, 72, 79, 76, 69, 128, 72, 79, 76, + 68, 73, 78, 199, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, + 75, 65, 128, 72, 79, 67, 75, 69, 217, 72, 79, 67, 72, 79, 128, 72, 78, + 85, 84, 128, 72, 78, 85, 79, 88, 128, 72, 78, 85, 79, 128, 72, 78, 85, + 66, 128, 72, 78, 79, 88, 128, 72, 78, 79, 84, 128, 72, 78, 79, 80, 128, + 72, 78, 73, 88, 128, 72, 78, 73, 84, 128, 72, 78, 73, 80, 128, 72, 78, + 73, 69, 88, 128, 72, 78, 73, 69, 84, 128, 72, 78, 73, 69, 80, 128, 72, + 78, 73, 69, 128, 72, 78, 73, 128, 72, 78, 69, 88, 128, 72, 78, 69, 80, + 128, 72, 78, 69, 128, 72, 78, 65, 88, 128, 72, 78, 65, 85, 128, 72, 78, + 65, 84, 128, 72, 78, 65, 80, 128, 72, 78, 65, 128, 72, 77, 89, 88, 128, + 72, 77, 89, 82, 88, 128, 72, 77, 89, 82, 128, 72, 77, 89, 80, 128, 72, + 77, 89, 128, 72, 77, 85, 88, 128, 72, 77, 85, 84, 128, 72, 77, 85, 82, + 88, 128, 72, 77, 85, 82, 128, 72, 77, 85, 80, 128, 72, 77, 85, 79, 88, + 128, 72, 77, 85, 79, 80, 128, 72, 77, 85, 79, 128, 72, 77, 85, 128, 72, + 77, 79, 88, 128, 72, 77, 79, 84, 128, 72, 77, 79, 80, 128, 72, 77, 79, + 128, 72, 77, 73, 88, 128, 72, 77, 73, 84, 128, 72, 77, 73, 80, 128, 72, + 77, 73, 69, 88, 128, 72, 77, 73, 69, 80, 128, 72, 77, 73, 69, 128, 72, + 77, 73, 128, 72, 77, 69, 128, 72, 77, 65, 88, 128, 72, 77, 65, 84, 128, + 72, 77, 65, 80, 128, 72, 77, 65, 128, 72, 76, 89, 88, 128, 72, 76, 89, + 84, 128, 72, 76, 89, 82, 88, 128, 72, 76, 89, 82, 128, 72, 76, 89, 80, + 128, 72, 76, 89, 128, 72, 76, 85, 88, 128, 72, 76, 85, 84, 128, 72, 76, + 85, 82, 88, 128, 72, 76, 85, 82, 128, 72, 76, 85, 80, 128, 72, 76, 85, + 79, 88, 128, 72, 76, 85, 79, 80, 128, 72, 76, 85, 79, 128, 72, 76, 85, + 128, 72, 76, 79, 88, 128, 72, 76, 79, 80, 128, 72, 76, 79, 128, 72, 76, + 73, 88, 128, 72, 76, 73, 84, 128, 72, 76, 73, 80, 128, 72, 76, 73, 69, + 88, 128, 72, 76, 73, 69, 80, 128, 72, 76, 73, 69, 128, 72, 76, 73, 128, + 72, 76, 69, 88, 128, 72, 76, 69, 80, 128, 72, 76, 69, 128, 72, 76, 65, + 88, 128, 72, 76, 65, 85, 128, 72, 76, 65, 84, 128, 72, 76, 65, 80, 128, + 72, 76, 65, 128, 72, 76, 128, 72, 75, 128, 72, 73, 90, 66, 128, 72, 73, + 89, 79, 128, 72, 73, 84, 84, 73, 78, 199, 72, 73, 83, 84, 79, 82, 73, + 195, 72, 73, 82, 73, 81, 128, 72, 73, 78, 71, 69, 68, 128, 72, 73, 78, + 71, 69, 196, 72, 73, 78, 71, 69, 128, 72, 73, 71, 72, 45, 83, 80, 69, 69, + 196, 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, + 71, 72, 45, 76, 79, 215, 72, 73, 71, 72, 45, 72, 69, 69, 76, 69, 196, 72, + 73, 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, 73, 79, 83, 128, 72, 73, 69, + 85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, 69, 85, 72, 45, 80, 73, 69, + 85, 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, 69, 85, 78, 128, 72, 73, 69, + 85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, 69, 85, 200, 72, 73, 69, 82, + 79, 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, 128, 72, 73, 68, 73, 78, + 199, 72, 73, 68, 69, 84, 128, 72, 73, 68, 69, 128, 72, 73, 66, 73, 83, + 67, 85, 83, 128, 72, 73, 45, 82, 69, 83, 128, 72, 72, 87, 65, 128, 72, + 72, 85, 128, 72, 72, 73, 128, 72, 72, 69, 69, 128, 72, 72, 69, 128, 72, + 72, 65, 65, 128, 72, 71, 128, 72, 69, 89, 84, 128, 72, 69, 88, 73, 70, + 79, 82, 205, 72, 69, 88, 65, 71, 82, 65, 205, 72, 69, 88, 65, 71, 79, 78, 128, 72, 69, 82, 85, 84, 85, 128, 72, 69, 82, 85, 128, 72, 69, 82, 77, 73, 84, 73, 65, 206, 72, 69, 82, 77, 73, 79, 78, 73, 65, 206, 72, 69, 82, 77, 69, 83, 128, 72, 69, 82, 69, 128, 72, 69, 82, 66, 128, 72, 69, 82, @@ -3750,429 +3779,438 @@ static unsigned char lexicon[] = { 45, 69, 86, 73, 204, 72, 69, 65, 68, 83, 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, 83, 84, 79, 78, 197, 72, 69, 65, 68, 80, 72, 79, 78, 69, 128, 72, 69, 65, 68, 73, 78, 71, 128, 72, 69, 65, 68, 45, 66, 65, 78, 68, 65, 71, - 69, 128, 72, 66, 65, 83, 65, 45, 69, 83, 65, 83, 193, 72, 66, 65, 83, - 193, 72, 65, 89, 65, 78, 78, 65, 128, 72, 65, 87, 74, 128, 72, 65, 86, - 69, 128, 72, 65, 85, 80, 84, 83, 84, 73, 77, 77, 69, 128, 72, 65, 213, - 72, 65, 84, 82, 65, 206, 72, 65, 84, 72, 73, 128, 72, 65, 84, 69, 128, - 72, 65, 84, 67, 72, 73, 78, 199, 72, 65, 84, 65, 198, 72, 65, 83, 69, - 210, 72, 65, 83, 65, 78, 84, 65, 128, 72, 65, 82, 80, 79, 79, 78, 128, - 72, 65, 82, 80, 79, 79, 206, 72, 65, 82, 77, 79, 78, 73, 67, 128, 72, 65, - 82, 75, 76, 69, 65, 206, 72, 65, 82, 68, 78, 69, 83, 83, 128, 72, 65, 82, - 196, 72, 65, 80, 80, 217, 72, 65, 78, 85, 78, 79, 207, 72, 65, 78, 71, - 90, 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 211, 72, 65, - 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 76, 69, 128, 72, 65, 78, 68, 66, - 65, 71, 128, 72, 65, 78, 68, 45, 79, 86, 65, 76, 128, 72, 65, 78, 68, 45, - 79, 86, 65, 204, 72, 65, 78, 68, 45, 72, 79, 79, 75, 128, 72, 65, 78, 68, - 45, 72, 79, 79, 203, 72, 65, 78, 68, 45, 72, 73, 78, 71, 69, 128, 72, 65, - 78, 68, 45, 72, 73, 78, 71, 197, 72, 65, 78, 68, 45, 70, 76, 65, 84, 128, - 72, 65, 78, 68, 45, 70, 76, 65, 212, 72, 65, 78, 68, 45, 70, 73, 83, 84, - 128, 72, 65, 78, 68, 45, 67, 85, 82, 76, 73, 67, 85, 69, 128, 72, 65, 78, - 68, 45, 67, 85, 82, 76, 73, 67, 85, 197, 72, 65, 78, 68, 45, 67, 85, 80, - 128, 72, 65, 78, 68, 45, 67, 85, 208, 72, 65, 78, 68, 45, 67, 76, 65, 87, - 128, 72, 65, 78, 68, 45, 67, 76, 65, 215, 72, 65, 78, 68, 45, 67, 73, 82, - 67, 76, 69, 128, 72, 65, 78, 68, 45, 67, 73, 82, 67, 76, 197, 72, 65, 78, - 68, 45, 65, 78, 71, 76, 69, 128, 72, 65, 78, 68, 45, 65, 78, 71, 76, 197, - 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 128, 72, 65, 77, 90, - 65, 128, 72, 65, 77, 90, 193, 72, 65, 77, 83, 84, 69, 210, 72, 65, 77, - 77, 69, 82, 128, 72, 65, 77, 77, 69, 210, 72, 65, 77, 66, 85, 82, 71, 69, - 82, 128, 72, 65, 76, 81, 65, 128, 72, 65, 76, 79, 128, 72, 65, 76, 70, - 45, 67, 73, 82, 67, 76, 197, 72, 65, 76, 70, 128, 72, 65, 76, 66, 69, 82, - 68, 128, 72, 65, 76, 65, 78, 84, 65, 128, 72, 65, 73, 84, 85, 128, 72, - 65, 73, 211, 72, 65, 73, 82, 67, 85, 84, 128, 72, 65, 73, 82, 128, 72, - 65, 71, 76, 65, 218, 72, 65, 71, 76, 128, 72, 65, 70, 85, 75, 72, 65, - 128, 72, 65, 70, 85, 75, 72, 128, 72, 65, 69, 71, 204, 72, 65, 65, 82, - 85, 128, 72, 65, 65, 77, 128, 72, 65, 193, 72, 65, 45, 72, 65, 128, 72, - 48, 48, 56, 128, 72, 48, 48, 55, 128, 72, 48, 48, 54, 65, 128, 72, 48, - 48, 54, 128, 72, 48, 48, 53, 128, 72, 48, 48, 52, 128, 72, 48, 48, 51, - 128, 72, 48, 48, 50, 128, 72, 48, 48, 49, 128, 72, 45, 84, 89, 80, 197, - 71, 89, 85, 128, 71, 89, 79, 78, 128, 71, 89, 79, 128, 71, 89, 73, 128, - 71, 89, 70, 213, 71, 89, 69, 69, 128, 71, 89, 65, 83, 128, 71, 89, 65, - 65, 128, 71, 89, 65, 128, 71, 89, 128, 71, 87, 85, 128, 71, 87, 73, 128, - 71, 87, 69, 69, 128, 71, 87, 69, 128, 71, 87, 65, 65, 128, 71, 87, 65, - 128, 71, 86, 65, 78, 71, 128, 71, 86, 128, 71, 85, 82, 85, 83, 72, 128, - 71, 85, 82, 85, 78, 128, 71, 85, 82, 77, 85, 75, 72, 201, 71, 85, 82, 65, - 77, 85, 84, 79, 78, 128, 71, 85, 82, 55, 128, 71, 85, 78, 85, 128, 71, - 85, 78, 213, 71, 85, 205, 71, 85, 76, 128, 71, 85, 74, 65, 82, 65, 84, - 201, 71, 85, 73, 84, 65, 82, 128, 71, 85, 199, 71, 85, 69, 73, 128, 71, - 85, 69, 72, 128, 71, 85, 69, 200, 71, 85, 68, 128, 71, 85, 196, 71, 85, - 65, 82, 68, 83, 77, 65, 78, 128, 71, 85, 65, 82, 68, 69, 68, 78, 69, 83, - 83, 128, 71, 85, 65, 82, 68, 69, 196, 71, 85, 65, 82, 68, 128, 71, 85, - 65, 82, 65, 78, 201, 71, 85, 193, 71, 85, 178, 71, 84, 69, 210, 71, 83, - 85, 77, 128, 71, 83, 85, 205, 71, 82, 213, 71, 82, 79, 87, 73, 78, 199, - 71, 82, 79, 85, 78, 68, 128, 71, 82, 79, 78, 84, 72, 73, 83, 77, 65, 84, - 65, 128, 71, 82, 73, 78, 78, 73, 78, 199, 71, 82, 73, 77, 65, 67, 73, 78, - 199, 71, 82, 69, 71, 79, 82, 73, 65, 206, 71, 82, 69, 69, 206, 71, 82, - 69, 65, 84, 78, 69, 83, 83, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, - 65, 78, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 65, 206, 71, 82, 69, - 65, 84, 69, 210, 71, 82, 69, 65, 212, 71, 82, 65, 86, 69, 89, 65, 82, - 196, 71, 82, 65, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 71, 82, 65, 86, - 69, 45, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, 128, 71, 82, 65, 86, - 197, 71, 82, 65, 84, 69, 82, 128, 71, 82, 65, 83, 83, 128, 71, 82, 65, - 83, 211, 71, 82, 65, 83, 208, 71, 82, 65, 80, 72, 69, 77, 197, 71, 82, - 65, 80, 69, 83, 128, 71, 82, 65, 78, 84, 72, 193, 71, 82, 65, 77, 77, - 193, 71, 82, 65, 73, 78, 128, 71, 82, 65, 68, 85, 65, 84, 73, 79, 206, - 71, 82, 65, 68, 85, 65, 76, 128, 71, 82, 65, 67, 69, 128, 71, 82, 65, 67, - 197, 71, 80, 65, 128, 71, 79, 82, 84, 72, 77, 73, 75, 79, 206, 71, 79, - 82, 84, 128, 71, 79, 82, 71, 79, 84, 69, 82, 73, 128, 71, 79, 82, 71, 79, - 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 71, 79, 82, 71, 79, 206, 71, 79, - 82, 71, 73, 128, 71, 79, 82, 65, 128, 71, 79, 79, 196, 71, 79, 78, 71, - 128, 71, 79, 76, 70, 69, 82, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, - 71, 79, 73, 78, 199, 71, 79, 66, 76, 73, 78, 128, 71, 79, 65, 76, 128, - 71, 79, 65, 204, 71, 79, 65, 128, 71, 78, 89, 73, 83, 128, 71, 78, 65, - 86, 73, 89, 65, 78, 73, 128, 71, 76, 79, 87, 73, 78, 199, 71, 76, 79, 84, - 84, 65, 204, 71, 76, 79, 66, 197, 71, 76, 73, 83, 83, 65, 78, 68, 207, - 71, 76, 69, 73, 67, 200, 71, 76, 65, 71, 79, 76, 73, 128, 71, 76, 65, - 128, 71, 74, 69, 128, 71, 73, 88, 128, 71, 73, 84, 128, 71, 73, 83, 72, - 128, 71, 73, 83, 200, 71, 73, 83, 65, 76, 128, 71, 73, 82, 85, 68, 65, - 65, 128, 71, 73, 82, 76, 211, 71, 73, 82, 76, 128, 71, 73, 82, 51, 128, - 71, 73, 82, 179, 71, 73, 82, 50, 128, 71, 73, 82, 178, 71, 73, 80, 128, - 71, 73, 78, 73, 73, 128, 71, 73, 77, 69, 76, 128, 71, 73, 77, 69, 204, - 71, 73, 77, 128, 71, 73, 71, 65, 128, 71, 73, 71, 128, 71, 73, 69, 84, - 128, 71, 73, 68, 73, 77, 128, 71, 73, 66, 66, 79, 85, 211, 71, 73, 66, - 65, 128, 71, 73, 52, 128, 71, 73, 180, 71, 72, 90, 128, 71, 72, 87, 65, - 128, 71, 72, 85, 78, 78, 65, 128, 71, 72, 85, 78, 78, 193, 71, 72, 85, - 128, 71, 72, 79, 85, 128, 71, 72, 79, 83, 84, 128, 71, 72, 79, 128, 71, - 72, 73, 77, 69, 76, 128, 71, 72, 73, 128, 71, 72, 72, 65, 128, 71, 72, - 69, 89, 83, 128, 71, 72, 69, 85, 88, 128, 71, 72, 69, 85, 78, 128, 71, - 72, 69, 85, 71, 72, 69, 85, 65, 69, 77, 128, 71, 72, 69, 85, 71, 72, 69, - 78, 128, 71, 72, 69, 85, 65, 69, 82, 65, 69, 128, 71, 72, 69, 85, 65, 69, - 71, 72, 69, 85, 65, 69, 128, 71, 72, 69, 84, 128, 71, 72, 69, 69, 128, - 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 128, 71, 72, 65, 82, - 65, 69, 128, 71, 72, 65, 80, 128, 71, 72, 65, 78, 128, 71, 72, 65, 77, - 77, 65, 128, 71, 72, 65, 77, 65, 76, 128, 71, 72, 65, 73, 78, 85, 128, - 71, 72, 65, 73, 78, 128, 71, 72, 65, 73, 206, 71, 72, 65, 68, 128, 71, - 72, 65, 65, 77, 65, 69, 128, 71, 72, 65, 65, 128, 71, 71, 87, 73, 128, - 71, 71, 87, 69, 69, 128, 71, 71, 87, 69, 128, 71, 71, 87, 65, 65, 128, - 71, 71, 87, 65, 128, 71, 71, 85, 88, 128, 71, 71, 85, 84, 128, 71, 71, - 85, 82, 88, 128, 71, 71, 85, 82, 128, 71, 71, 85, 79, 88, 128, 71, 71, - 85, 79, 84, 128, 71, 71, 85, 79, 80, 128, 71, 71, 85, 79, 128, 71, 71, - 79, 88, 128, 71, 71, 79, 84, 128, 71, 71, 79, 80, 128, 71, 71, 73, 88, - 128, 71, 71, 73, 84, 128, 71, 71, 73, 69, 88, 128, 71, 71, 73, 69, 80, - 128, 71, 71, 73, 69, 128, 71, 71, 69, 88, 128, 71, 71, 69, 84, 128, 71, - 71, 69, 80, 128, 71, 71, 65, 88, 128, 71, 71, 65, 84, 128, 71, 69, 84, - 193, 71, 69, 83, 84, 85, 82, 69, 128, 71, 69, 83, 72, 85, 128, 71, 69, - 83, 72, 84, 73, 78, 128, 71, 69, 83, 72, 84, 73, 206, 71, 69, 83, 72, 50, - 128, 71, 69, 82, 83, 72, 65, 89, 73, 77, 128, 71, 69, 82, 77, 65, 206, - 71, 69, 82, 69, 83, 72, 128, 71, 69, 82, 69, 83, 200, 71, 69, 79, 77, 69, - 84, 82, 73, 67, 65, 76, 76, 217, 71, 69, 79, 77, 69, 84, 82, 73, 195, 71, - 69, 78, 84, 76, 197, 71, 69, 78, 73, 84, 73, 86, 69, 128, 71, 69, 78, 73, - 75, 201, 71, 69, 78, 69, 82, 73, 195, 71, 69, 77, 73, 78, 73, 128, 71, - 69, 77, 73, 78, 65, 84, 73, 79, 206, 71, 69, 205, 71, 69, 69, 77, 128, - 71, 69, 68, 79, 76, 65, 128, 71, 69, 68, 69, 128, 71, 69, 66, 207, 71, - 69, 66, 193, 71, 69, 65, 82, 128, 71, 69, 65, 210, 71, 69, 50, 50, 128, - 71, 68, 65, 78, 128, 71, 67, 73, 71, 128, 71, 67, 65, 206, 71, 66, 79, - 78, 128, 71, 66, 73, 69, 197, 71, 66, 69, 85, 88, 128, 71, 66, 69, 84, - 128, 71, 66, 65, 89, 73, 128, 71, 66, 65, 75, 85, 82, 85, 78, 69, 78, - 128, 71, 66, 128, 71, 65, 89, 65, 78, 85, 75, 73, 84, 84, 65, 128, 71, - 65, 89, 65, 78, 78, 65, 128, 71, 65, 89, 128, 71, 65, 85, 78, 84, 76, 69, - 84, 128, 71, 65, 84, 72, 69, 82, 73, 78, 71, 128, 71, 65, 84, 72, 69, 82, - 73, 78, 199, 71, 65, 84, 69, 128, 71, 65, 83, 72, 65, 78, 128, 71, 65, - 82, 83, 72, 85, 78, 73, 128, 71, 65, 82, 79, 78, 128, 71, 65, 82, 77, 69, - 78, 84, 128, 71, 65, 82, 68, 69, 78, 128, 71, 65, 82, 51, 128, 71, 65, - 80, 80, 69, 196, 71, 65, 208, 71, 65, 78, 77, 65, 128, 71, 65, 78, 71, - 73, 65, 128, 71, 65, 78, 68, 193, 71, 65, 78, 50, 128, 71, 65, 78, 178, - 71, 65, 77, 77, 65, 128, 71, 65, 77, 76, 65, 128, 71, 65, 77, 76, 128, - 71, 65, 77, 69, 128, 71, 65, 77, 197, 71, 65, 77, 65, 78, 128, 71, 65, - 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, 71, 128, 71, 65, 70, 128, - 71, 65, 198, 71, 65, 69, 84, 84, 65, 45, 80, 73, 76, 76, 65, 128, 71, 65, - 68, 79, 76, 128, 71, 65, 68, 128, 71, 65, 196, 71, 65, 66, 65, 128, 71, - 65, 66, 193, 71, 65, 65, 70, 85, 128, 71, 65, 178, 71, 48, 53, 52, 128, - 71, 48, 53, 51, 128, 71, 48, 53, 50, 128, 71, 48, 53, 49, 128, 71, 48, - 53, 48, 128, 71, 48, 52, 57, 128, 71, 48, 52, 56, 128, 71, 48, 52, 55, - 128, 71, 48, 52, 54, 128, 71, 48, 52, 53, 65, 128, 71, 48, 52, 53, 128, - 71, 48, 52, 52, 128, 71, 48, 52, 51, 65, 128, 71, 48, 52, 51, 128, 71, - 48, 52, 50, 128, 71, 48, 52, 49, 128, 71, 48, 52, 48, 128, 71, 48, 51, - 57, 128, 71, 48, 51, 56, 128, 71, 48, 51, 55, 65, 128, 71, 48, 51, 55, - 128, 71, 48, 51, 54, 65, 128, 71, 48, 51, 54, 128, 71, 48, 51, 53, 128, - 71, 48, 51, 52, 128, 71, 48, 51, 51, 128, 71, 48, 51, 50, 128, 71, 48, - 51, 49, 128, 71, 48, 51, 48, 128, 71, 48, 50, 57, 128, 71, 48, 50, 56, - 128, 71, 48, 50, 55, 128, 71, 48, 50, 54, 65, 128, 71, 48, 50, 54, 128, - 71, 48, 50, 53, 128, 71, 48, 50, 52, 128, 71, 48, 50, 51, 128, 71, 48, - 50, 50, 128, 71, 48, 50, 49, 128, 71, 48, 50, 48, 65, 128, 71, 48, 50, - 48, 128, 71, 48, 49, 57, 128, 71, 48, 49, 56, 128, 71, 48, 49, 55, 128, - 71, 48, 49, 54, 128, 71, 48, 49, 53, 128, 71, 48, 49, 52, 128, 71, 48, - 49, 51, 128, 71, 48, 49, 50, 128, 71, 48, 49, 49, 65, 128, 71, 48, 49, - 49, 128, 71, 48, 49, 48, 128, 71, 48, 48, 57, 128, 71, 48, 48, 56, 128, - 71, 48, 48, 55, 66, 128, 71, 48, 48, 55, 65, 128, 71, 48, 48, 55, 128, - 71, 48, 48, 54, 65, 128, 71, 48, 48, 54, 128, 71, 48, 48, 53, 128, 71, - 48, 48, 52, 128, 71, 48, 48, 51, 128, 71, 48, 48, 50, 128, 71, 48, 48, - 49, 128, 70, 89, 88, 128, 70, 89, 84, 128, 70, 89, 80, 128, 70, 89, 65, - 128, 70, 87, 73, 128, 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, - 65, 128, 70, 87, 65, 128, 70, 86, 83, 51, 128, 70, 86, 83, 50, 128, 70, - 86, 83, 49, 128, 70, 85, 88, 128, 70, 85, 84, 128, 70, 85, 83, 69, 128, - 70, 85, 83, 193, 70, 85, 82, 88, 128, 70, 85, 80, 128, 70, 85, 78, 69, - 82, 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 65, 204, 70, 85, 78, 67, 84, - 73, 79, 78, 128, 70, 85, 76, 76, 78, 69, 83, 83, 128, 70, 85, 76, 204, - 70, 85, 74, 73, 128, 70, 85, 69, 84, 128, 70, 85, 69, 204, 70, 85, 69, - 128, 70, 85, 65, 128, 70, 84, 72, 79, 82, 193, 70, 83, 73, 128, 70, 82, - 79, 87, 78, 73, 78, 71, 128, 70, 82, 79, 87, 78, 73, 78, 199, 70, 82, 79, - 87, 78, 128, 70, 82, 79, 87, 206, 70, 82, 79, 78, 84, 45, 84, 73, 76, 84, - 69, 196, 70, 82, 79, 78, 84, 45, 70, 65, 67, 73, 78, 199, 70, 82, 79, 78, - 212, 70, 82, 79, 205, 70, 82, 79, 71, 128, 70, 82, 79, 199, 70, 82, 73, - 84, 85, 128, 70, 82, 73, 69, 83, 128, 70, 82, 73, 69, 196, 70, 82, 73, - 67, 65, 84, 73, 86, 69, 128, 70, 82, 69, 84, 66, 79, 65, 82, 68, 128, 70, - 82, 69, 78, 67, 200, 70, 82, 69, 69, 128, 70, 82, 69, 197, 70, 82, 65, - 78, 75, 211, 70, 82, 65, 78, 195, 70, 82, 65, 77, 69, 83, 128, 70, 82, - 65, 77, 69, 128, 70, 82, 65, 77, 197, 70, 82, 65, 71, 82, 65, 78, 84, - 128, 70, 82, 65, 71, 77, 69, 78, 84, 128, 70, 82, 65, 67, 84, 73, 79, - 206, 70, 79, 88, 128, 70, 79, 85, 82, 84, 69, 69, 78, 128, 70, 79, 85, - 82, 84, 69, 69, 206, 70, 79, 85, 82, 45, 84, 72, 73, 82, 84, 89, 128, 70, - 79, 85, 82, 45, 83, 84, 82, 73, 78, 199, 70, 79, 85, 82, 45, 80, 69, 82, - 45, 69, 205, 70, 79, 85, 82, 45, 76, 73, 78, 197, 70, 79, 85, 210, 70, - 79, 85, 78, 84, 65, 73, 78, 128, 70, 79, 85, 78, 84, 65, 73, 206, 70, 79, - 83, 84, 69, 82, 73, 78, 71, 128, 70, 79, 82, 87, 65, 82, 68, 128, 70, 79, - 82, 87, 65, 82, 196, 70, 79, 82, 84, 89, 128, 70, 79, 82, 84, 217, 70, - 79, 82, 84, 69, 128, 70, 79, 82, 77, 211, 70, 79, 82, 77, 65, 84, 84, 73, - 78, 71, 128, 70, 79, 82, 77, 65, 212, 70, 79, 82, 75, 69, 196, 70, 79, - 82, 69, 72, 69, 65, 196, 70, 79, 82, 67, 69, 83, 128, 70, 79, 82, 67, 69, - 128, 70, 79, 80, 128, 70, 79, 79, 84, 83, 84, 79, 79, 76, 128, 70, 79, - 79, 84, 80, 82, 73, 78, 84, 83, 128, 70, 79, 79, 84, 78, 79, 84, 197, 70, - 79, 79, 84, 66, 65, 76, 76, 128, 70, 79, 79, 84, 128, 70, 79, 79, 76, - 128, 70, 79, 79, 68, 128, 70, 79, 79, 128, 70, 79, 78, 212, 70, 79, 78, - 71, 77, 65, 78, 128, 70, 79, 77, 128, 70, 79, 76, 76, 89, 128, 70, 79, - 76, 76, 79, 87, 73, 78, 71, 128, 70, 79, 76, 68, 69, 82, 128, 70, 79, 76, - 68, 69, 196, 70, 79, 71, 71, 89, 128, 70, 79, 71, 128, 70, 207, 70, 77, - 128, 70, 76, 89, 73, 78, 199, 70, 76, 89, 128, 70, 76, 85, 84, 84, 69, - 82, 73, 78, 71, 128, 70, 76, 85, 84, 84, 69, 82, 73, 78, 199, 70, 76, 85, - 84, 69, 128, 70, 76, 85, 83, 72, 69, 196, 70, 76, 79, 87, 73, 78, 199, - 70, 76, 79, 87, 69, 82, 83, 128, 70, 76, 79, 87, 69, 210, 70, 76, 79, 85, - 82, 73, 83, 72, 128, 70, 76, 79, 82, 69, 84, 84, 69, 128, 70, 76, 79, 82, - 65, 204, 70, 76, 79, 80, 80, 217, 70, 76, 79, 79, 82, 128, 70, 76, 79, - 79, 210, 70, 76, 73, 80, 128, 70, 76, 73, 71, 72, 84, 128, 70, 76, 73, - 67, 203, 70, 76, 69, 88, 85, 83, 128, 70, 76, 69, 88, 69, 196, 70, 76, - 69, 88, 128, 70, 76, 69, 85, 82, 79, 78, 128, 70, 76, 69, 85, 82, 45, 68, - 69, 45, 76, 73, 83, 128, 70, 76, 65, 84, 84, 69, 78, 69, 196, 70, 76, 65, - 84, 78, 69, 83, 83, 128, 70, 76, 65, 83, 72, 128, 70, 76, 65, 71, 83, - 128, 70, 76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45, 52, 128, 70, 76, - 65, 71, 45, 51, 128, 70, 76, 65, 71, 45, 50, 128, 70, 76, 65, 71, 45, 49, - 128, 70, 76, 65, 71, 128, 70, 76, 65, 199, 70, 76, 65, 128, 70, 76, 128, - 70, 73, 88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 88, 128, 70, 73, 86, 69, - 45, 84, 72, 73, 82, 84, 89, 128, 70, 73, 86, 69, 45, 76, 73, 78, 197, 70, - 73, 86, 197, 70, 73, 84, 90, 80, 65, 84, 82, 73, 67, 203, 70, 73, 84, 65, - 128, 70, 73, 84, 128, 70, 73, 83, 84, 69, 196, 70, 73, 83, 72, 73, 78, - 199, 70, 73, 83, 72, 72, 79, 79, 75, 128, 70, 73, 83, 72, 72, 79, 79, - 203, 70, 73, 83, 72, 69, 89, 69, 128, 70, 73, 83, 72, 128, 70, 73, 83, - 200, 70, 73, 82, 83, 212, 70, 73, 82, 73, 128, 70, 73, 82, 69, 87, 79, - 82, 75, 83, 128, 70, 73, 82, 69, 87, 79, 82, 203, 70, 73, 82, 69, 128, - 70, 73, 82, 197, 70, 73, 80, 128, 70, 73, 78, 73, 84, 197, 70, 73, 78, - 71, 69, 82, 83, 128, 70, 73, 78, 71, 69, 82, 211, 70, 73, 78, 71, 69, 82, - 78, 65, 73, 76, 83, 128, 70, 73, 78, 71, 69, 82, 69, 196, 70, 73, 78, 71, - 69, 82, 45, 80, 79, 83, 212, 70, 73, 78, 71, 69, 82, 128, 70, 73, 78, 71, - 69, 210, 70, 73, 78, 65, 78, 67, 73, 65, 76, 128, 70, 73, 78, 65, 76, - 128, 70, 73, 76, 205, 70, 73, 76, 76, 69, 82, 128, 70, 73, 76, 76, 69, - 196, 70, 73, 76, 76, 128, 70, 73, 76, 204, 70, 73, 76, 197, 70, 73, 73, - 128, 70, 73, 71, 85, 82, 69, 45, 51, 128, 70, 73, 71, 85, 82, 69, 45, 50, - 128, 70, 73, 71, 85, 82, 69, 45, 49, 128, 70, 73, 71, 85, 82, 197, 70, - 73, 71, 72, 84, 128, 70, 73, 70, 84, 89, 128, 70, 73, 70, 84, 217, 70, - 73, 70, 84, 72, 83, 128, 70, 73, 70, 84, 72, 128, 70, 73, 70, 84, 69, 69, - 78, 128, 70, 73, 70, 84, 69, 69, 206, 70, 73, 69, 76, 68, 128, 70, 73, - 69, 76, 196, 70, 72, 84, 79, 82, 193, 70, 70, 76, 128, 70, 70, 73, 128, - 70, 69, 85, 88, 128, 70, 69, 85, 70, 69, 85, 65, 69, 84, 128, 70, 69, 83, - 84, 73, 86, 65, 76, 128, 70, 69, 82, 82, 89, 128, 70, 69, 82, 82, 73, - 211, 70, 69, 82, 77, 65, 84, 65, 128, 70, 69, 82, 77, 65, 84, 193, 70, - 69, 79, 200, 70, 69, 78, 199, 70, 69, 78, 67, 69, 128, 70, 69, 77, 73, - 78, 73, 78, 197, 70, 69, 77, 65, 76, 69, 128, 70, 69, 77, 65, 76, 197, - 70, 69, 76, 76, 79, 87, 83, 72, 73, 80, 128, 70, 69, 73, 128, 70, 69, 72, - 213, 70, 69, 72, 128, 70, 69, 200, 70, 69, 69, 78, 71, 128, 70, 69, 69, - 77, 128, 70, 69, 69, 68, 128, 70, 69, 69, 196, 70, 69, 69, 128, 70, 69, - 66, 82, 85, 65, 82, 89, 128, 70, 69, 65, 84, 72, 69, 82, 128, 70, 69, 65, - 84, 72, 69, 210, 70, 69, 65, 82, 78, 128, 70, 69, 65, 82, 70, 85, 204, - 70, 69, 65, 82, 128, 70, 65, 89, 65, 78, 78, 65, 128, 70, 65, 89, 128, - 70, 65, 88, 128, 70, 65, 216, 70, 65, 84, 73, 71, 85, 69, 128, 70, 65, - 84, 72, 69, 82, 128, 70, 65, 84, 72, 69, 210, 70, 65, 84, 72, 65, 84, 65, - 78, 128, 70, 65, 84, 72, 65, 84, 65, 206, 70, 65, 84, 72, 65, 128, 70, - 65, 84, 72, 193, 70, 65, 84, 128, 70, 65, 83, 84, 128, 70, 65, 82, 83, - 201, 70, 65, 82, 128, 70, 65, 81, 128, 70, 65, 80, 128, 70, 65, 78, 71, - 128, 70, 65, 78, 69, 82, 79, 83, 73, 211, 70, 65, 78, 128, 70, 65, 77, - 73, 76, 89, 128, 70, 65, 77, 128, 70, 65, 76, 76, 69, 206, 70, 65, 74, - 128, 70, 65, 73, 76, 85, 82, 69, 128, 70, 65, 73, 72, 85, 128, 70, 65, - 73, 66, 128, 70, 65, 72, 82, 69, 78, 72, 69, 73, 84, 128, 70, 65, 67, 84, - 79, 82, 89, 128, 70, 65, 67, 84, 79, 210, 70, 65, 67, 83, 73, 77, 73, 76, - 197, 70, 65, 67, 73, 78, 71, 83, 128, 70, 65, 67, 69, 45, 54, 128, 70, - 65, 67, 69, 45, 53, 128, 70, 65, 67, 69, 45, 52, 128, 70, 65, 67, 69, 45, - 51, 128, 70, 65, 67, 69, 45, 50, 128, 70, 65, 67, 69, 45, 49, 128, 70, - 65, 65, 77, 65, 69, 128, 70, 65, 65, 73, 128, 70, 65, 65, 70, 85, 128, - 70, 48, 53, 51, 128, 70, 48, 53, 50, 128, 70, 48, 53, 49, 67, 128, 70, - 48, 53, 49, 66, 128, 70, 48, 53, 49, 65, 128, 70, 48, 53, 49, 128, 70, - 48, 53, 48, 128, 70, 48, 52, 57, 128, 70, 48, 52, 56, 128, 70, 48, 52, - 55, 65, 128, 70, 48, 52, 55, 128, 70, 48, 52, 54, 65, 128, 70, 48, 52, - 54, 128, 70, 48, 52, 53, 65, 128, 70, 48, 52, 53, 128, 70, 48, 52, 52, - 128, 70, 48, 52, 51, 128, 70, 48, 52, 50, 128, 70, 48, 52, 49, 128, 70, - 48, 52, 48, 128, 70, 48, 51, 57, 128, 70, 48, 51, 56, 65, 128, 70, 48, - 51, 56, 128, 70, 48, 51, 55, 65, 128, 70, 48, 51, 55, 128, 70, 48, 51, - 54, 128, 70, 48, 51, 53, 128, 70, 48, 51, 52, 128, 70, 48, 51, 51, 128, - 70, 48, 51, 50, 128, 70, 48, 51, 49, 65, 128, 70, 48, 51, 49, 128, 70, - 48, 51, 48, 128, 70, 48, 50, 57, 128, 70, 48, 50, 56, 128, 70, 48, 50, - 55, 128, 70, 48, 50, 54, 128, 70, 48, 50, 53, 128, 70, 48, 50, 52, 128, - 70, 48, 50, 51, 128, 70, 48, 50, 50, 128, 70, 48, 50, 49, 65, 128, 70, - 48, 50, 49, 128, 70, 48, 50, 48, 128, 70, 48, 49, 57, 128, 70, 48, 49, - 56, 128, 70, 48, 49, 55, 128, 70, 48, 49, 54, 128, 70, 48, 49, 53, 128, - 70, 48, 49, 52, 128, 70, 48, 49, 51, 65, 128, 70, 48, 49, 51, 128, 70, - 48, 49, 50, 128, 70, 48, 49, 49, 128, 70, 48, 49, 48, 128, 70, 48, 48, - 57, 128, 70, 48, 48, 56, 128, 70, 48, 48, 55, 128, 70, 48, 48, 54, 128, - 70, 48, 48, 53, 128, 70, 48, 48, 52, 128, 70, 48, 48, 51, 128, 70, 48, - 48, 50, 128, 70, 48, 48, 49, 65, 128, 70, 48, 48, 49, 128, 69, 90, 83, - 128, 69, 90, 200, 69, 90, 69, 78, 128, 69, 90, 69, 206, 69, 90, 128, 69, - 89, 89, 89, 128, 69, 89, 69, 83, 128, 69, 89, 69, 211, 69, 89, 69, 76, - 65, 83, 72, 69, 211, 69, 89, 69, 71, 76, 65, 83, 83, 69, 83, 128, 69, 89, - 69, 71, 65, 90, 69, 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 69, 89, 69, - 71, 65, 90, 69, 45, 70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 69, 89, 69, - 66, 82, 79, 87, 211, 69, 89, 197, 69, 89, 66, 69, 89, 70, 73, 76, 73, - 128, 69, 89, 65, 78, 78, 65, 128, 69, 88, 84, 82, 69, 77, 69, 76, 217, - 69, 88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82, 73, 65, 204, 69, 88, - 84, 82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45, 72, 73, 71, 200, 69, - 88, 84, 82, 193, 69, 88, 84, 69, 78, 83, 73, 79, 78, 128, 69, 88, 84, 69, - 78, 68, 69, 68, 128, 69, 88, 84, 69, 78, 68, 69, 196, 69, 88, 80, 82, 69, - 83, 83, 73, 79, 78, 76, 69, 83, 211, 69, 88, 80, 79, 78, 69, 78, 212, 69, - 88, 79, 128, 69, 88, 207, 69, 88, 73, 83, 84, 83, 128, 69, 88, 73, 83, - 84, 128, 69, 88, 72, 65, 85, 83, 84, 73, 79, 78, 128, 69, 88, 72, 65, 76, - 69, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 78, 128, 69, 88, 67, 76, - 65, 77, 65, 84, 73, 79, 206, 69, 88, 67, 73, 84, 69, 77, 69, 78, 84, 128, - 69, 88, 67, 72, 65, 78, 71, 69, 128, 69, 88, 67, 69, 83, 83, 128, 69, 88, - 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 82, 217, - 69, 86, 69, 82, 71, 82, 69, 69, 206, 69, 86, 69, 78, 73, 78, 71, 128, 69, - 85, 82, 79, 80, 69, 65, 206, 69, 85, 82, 79, 80, 69, 45, 65, 70, 82, 73, - 67, 65, 128, 69, 85, 82, 79, 45, 67, 85, 82, 82, 69, 78, 67, 217, 69, 85, - 82, 207, 69, 85, 76, 69, 210, 69, 85, 45, 85, 128, 69, 85, 45, 79, 128, - 69, 85, 45, 69, 85, 128, 69, 85, 45, 69, 79, 128, 69, 85, 45, 69, 128, - 69, 85, 45, 65, 128, 69, 84, 88, 128, 69, 84, 78, 65, 72, 84, 65, 128, - 69, 84, 72, 69, 204, 69, 84, 69, 82, 79, 206, 69, 84, 69, 82, 78, 73, 84, - 89, 128, 69, 84, 69, 82, 78, 73, 84, 217, 69, 84, 66, 128, 69, 83, 90, - 128, 69, 83, 85, 75, 85, 85, 68, 79, 128, 69, 83, 84, 73, 77, 65, 84, 69, - 83, 128, 69, 83, 84, 73, 77, 65, 84, 69, 196, 69, 83, 72, 69, 51, 128, - 69, 83, 72, 50, 49, 128, 69, 83, 72, 49, 54, 128, 69, 83, 67, 65, 80, 69, - 128, 69, 83, 67, 128, 69, 83, 65, 128, 69, 83, 45, 84, 69, 128, 69, 83, - 45, 51, 128, 69, 83, 45, 50, 128, 69, 83, 45, 49, 128, 69, 82, 82, 79, - 82, 45, 66, 65, 82, 82, 69, 196, 69, 82, 82, 128, 69, 82, 73, 78, 50, - 128, 69, 82, 73, 78, 178, 69, 82, 71, 128, 69, 82, 65, 83, 197, 69, 81, - 85, 73, 86, 65, 76, 69, 78, 212, 69, 81, 85, 73, 76, 65, 84, 69, 82, 65, - 204, 69, 81, 85, 73, 68, 128, 69, 81, 85, 73, 65, 78, 71, 85, 76, 65, - 210, 69, 81, 85, 65, 76, 83, 128, 69, 81, 85, 65, 76, 211, 69, 81, 85, - 65, 76, 128, 69, 80, 83, 73, 76, 79, 78, 128, 69, 80, 83, 73, 76, 79, - 206, 69, 80, 79, 67, 72, 128, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, - 69, 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69, 78, 84, 72, 69, 84, - 73, 195, 69, 80, 69, 71, 69, 82, 77, 65, 128, 69, 80, 65, 67, 212, 69, - 79, 84, 128, 69, 79, 77, 128, 69, 79, 76, 72, 88, 128, 69, 79, 76, 128, - 69, 79, 72, 128, 69, 78, 89, 128, 69, 78, 86, 69, 76, 79, 80, 69, 128, - 69, 78, 86, 69, 76, 79, 80, 197, 69, 78, 85, 77, 69, 82, 65, 84, 73, 79, - 206, 69, 78, 84, 82, 89, 45, 50, 128, 69, 78, 84, 82, 89, 45, 49, 128, - 69, 78, 84, 82, 89, 128, 69, 78, 84, 82, 217, 69, 78, 84, 72, 85, 83, 73, - 65, 83, 77, 128, 69, 78, 84, 69, 82, 80, 82, 73, 83, 69, 128, 69, 78, 84, - 69, 82, 73, 78, 199, 69, 78, 84, 69, 82, 128, 69, 78, 84, 69, 210, 69, - 78, 84, 45, 83, 72, 65, 80, 69, 196, 69, 78, 81, 85, 73, 82, 89, 128, 69, - 78, 81, 128, 69, 78, 79, 211, 69, 78, 78, 73, 128, 69, 78, 78, 128, 69, - 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 128, 69, 78, 71, 73, 78, 69, 128, - 69, 78, 68, 79, 70, 79, 78, 79, 78, 128, 69, 78, 68, 73, 78, 199, 69, 78, - 68, 69, 80, 128, 69, 78, 68, 69, 65, 86, 79, 85, 82, 128, 69, 78, 67, 79, - 85, 78, 84, 69, 82, 83, 128, 69, 78, 67, 76, 79, 83, 85, 82, 69, 83, 128, - 69, 78, 67, 76, 79, 83, 85, 82, 69, 128, 69, 78, 67, 76, 79, 83, 73, 78, - 199, 69, 78, 67, 128, 69, 78, 65, 82, 88, 73, 211, 69, 78, 65, 82, 77, - 79, 78, 73, 79, 211, 69, 77, 80, 84, 217, 69, 77, 80, 72, 65, 84, 73, - 195, 69, 77, 80, 72, 65, 83, 73, 211, 69, 77, 79, 74, 201, 69, 77, 66, - 82, 79, 73, 68, 69, 82, 89, 128, 69, 77, 66, 76, 69, 77, 128, 69, 77, 66, - 69, 76, 76, 73, 83, 72, 77, 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, - 78, 71, 128, 69, 76, 89, 128, 69, 76, 84, 128, 69, 76, 76, 73, 80, 84, - 73, 195, 69, 76, 76, 73, 80, 83, 73, 83, 128, 69, 76, 76, 73, 80, 83, 69, - 128, 69, 76, 73, 70, 73, 128, 69, 76, 69, 86, 69, 78, 45, 84, 72, 73, 82, - 84, 89, 128, 69, 76, 69, 86, 69, 78, 128, 69, 76, 69, 86, 69, 206, 69, - 76, 69, 80, 72, 65, 78, 84, 128, 69, 76, 69, 77, 69, 78, 212, 69, 76, 69, - 67, 84, 82, 73, 67, 65, 204, 69, 76, 69, 67, 84, 82, 73, 195, 69, 76, 66, - 65, 83, 65, 206, 69, 76, 65, 77, 73, 84, 69, 128, 69, 76, 65, 77, 73, 84, - 197, 69, 76, 65, 70, 82, 79, 78, 128, 69, 75, 83, 84, 82, 69, 80, 84, 79, - 78, 128, 69, 75, 83, 128, 69, 75, 70, 79, 78, 73, 84, 73, 75, 79, 78, - 128, 69, 75, 65, 82, 65, 128, 69, 75, 65, 77, 128, 69, 74, 69, 67, 212, - 69, 73, 83, 128, 69, 73, 71, 72, 84, 89, 128, 69, 73, 71, 72, 84, 217, - 69, 73, 71, 72, 84, 72, 83, 128, 69, 73, 71, 72, 84, 72, 211, 69, 73, 71, - 72, 84, 72, 128, 69, 73, 71, 72, 84, 69, 69, 78, 128, 69, 73, 71, 72, 84, - 69, 69, 206, 69, 73, 71, 72, 84, 45, 84, 72, 73, 82, 84, 89, 128, 69, 73, - 69, 128, 69, 72, 87, 65, 218, 69, 71, 89, 80, 84, 79, 76, 79, 71, 73, 67, - 65, 204, 69, 71, 89, 128, 69, 71, 73, 82, 128, 69, 71, 71, 128, 69, 69, - 89, 65, 78, 78, 65, 128, 69, 69, 75, 65, 65, 128, 69, 69, 72, 128, 69, - 69, 66, 69, 69, 70, 73, 76, 73, 128, 69, 68, 73, 84, 79, 82, 73, 65, 204, - 69, 68, 73, 78, 128, 69, 68, 68, 128, 69, 67, 83, 128, 69, 66, 69, 70, - 73, 76, 73, 128, 69, 65, 83, 84, 69, 82, 206, 69, 65, 83, 84, 128, 69, - 65, 83, 212, 69, 65, 82, 84, 72, 76, 217, 69, 65, 82, 84, 72, 128, 69, - 65, 82, 84, 200, 69, 65, 82, 83, 128, 69, 65, 82, 76, 217, 69, 65, 77, - 72, 65, 78, 67, 72, 79, 76, 76, 128, 69, 65, 71, 76, 69, 128, 69, 65, 68, - 72, 65, 68, 72, 128, 69, 65, 66, 72, 65, 68, 72, 128, 69, 178, 69, 48, - 51, 56, 128, 69, 48, 51, 55, 128, 69, 48, 51, 54, 128, 69, 48, 51, 52, - 65, 128, 69, 48, 51, 52, 128, 69, 48, 51, 51, 128, 69, 48, 51, 50, 128, - 69, 48, 51, 49, 128, 69, 48, 51, 48, 128, 69, 48, 50, 57, 128, 69, 48, - 50, 56, 65, 128, 69, 48, 50, 56, 128, 69, 48, 50, 55, 128, 69, 48, 50, - 54, 128, 69, 48, 50, 53, 128, 69, 48, 50, 52, 128, 69, 48, 50, 51, 128, - 69, 48, 50, 50, 128, 69, 48, 50, 49, 128, 69, 48, 50, 48, 65, 128, 69, - 48, 50, 48, 128, 69, 48, 49, 57, 128, 69, 48, 49, 56, 128, 69, 48, 49, - 55, 65, 128, 69, 48, 49, 55, 128, 69, 48, 49, 54, 65, 128, 69, 48, 49, - 54, 128, 69, 48, 49, 53, 128, 69, 48, 49, 52, 128, 69, 48, 49, 51, 128, - 69, 48, 49, 50, 128, 69, 48, 49, 49, 128, 69, 48, 49, 48, 128, 69, 48, - 48, 57, 65, 128, 69, 48, 48, 57, 128, 69, 48, 48, 56, 65, 128, 69, 48, - 48, 56, 128, 69, 48, 48, 55, 128, 69, 48, 48, 54, 128, 69, 48, 48, 53, - 128, 69, 48, 48, 52, 128, 69, 48, 48, 51, 128, 69, 48, 48, 50, 128, 69, - 48, 48, 49, 128, 69, 45, 77, 65, 73, 204, 68, 90, 90, 72, 69, 128, 68, - 90, 90, 69, 128, 68, 90, 90, 65, 128, 68, 90, 89, 65, 89, 128, 68, 90, - 87, 69, 128, 68, 90, 85, 128, 68, 90, 79, 128, 68, 90, 74, 69, 128, 68, - 90, 73, 84, 65, 128, 68, 90, 73, 128, 68, 90, 72, 79, 73, 128, 68, 90, - 72, 69, 128, 68, 90, 72, 65, 128, 68, 90, 69, 76, 79, 128, 68, 90, 69, - 69, 128, 68, 90, 69, 128, 68, 90, 65, 89, 128, 68, 90, 65, 65, 128, 68, - 90, 65, 128, 68, 90, 128, 68, 218, 68, 89, 79, 128, 68, 89, 207, 68, 89, - 78, 65, 77, 73, 195, 68, 89, 69, 72, 128, 68, 89, 69, 200, 68, 89, 65, - 78, 128, 68, 87, 79, 128, 68, 87, 69, 128, 68, 87, 65, 128, 68, 86, 73, - 83, 86, 65, 82, 65, 128, 68, 86, 68, 128, 68, 86, 128, 68, 85, 84, 73, - 69, 83, 128, 68, 85, 83, 75, 128, 68, 85, 83, 72, 69, 78, 78, 65, 128, - 68, 85, 82, 65, 84, 73, 79, 78, 128, 68, 85, 82, 50, 128, 68, 85, 80, 79, - 78, 68, 73, 85, 211, 68, 85, 79, 88, 128, 68, 85, 79, 128, 68, 85, 78, - 52, 128, 68, 85, 78, 51, 128, 68, 85, 78, 179, 68, 85, 77, 128, 68, 85, - 204, 68, 85, 72, 128, 68, 85, 71, 85, 68, 128, 68, 85, 199, 68, 85, 66, - 50, 128, 68, 85, 66, 128, 68, 85, 194, 68, 82, 89, 128, 68, 82, 217, 68, - 82, 85, 77, 128, 68, 82, 85, 205, 68, 82, 79, 80, 83, 128, 68, 82, 79, - 80, 76, 69, 84, 128, 68, 82, 79, 80, 45, 83, 72, 65, 68, 79, 87, 69, 196, - 68, 82, 79, 77, 69, 68, 65, 82, 217, 68, 82, 73, 86, 69, 128, 68, 82, 73, - 86, 197, 68, 82, 73, 78, 75, 128, 68, 82, 73, 204, 68, 82, 69, 83, 83, - 128, 68, 82, 69, 65, 77, 217, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, - 65, 77, 128, 68, 82, 65, 205, 68, 82, 65, 71, 79, 78, 128, 68, 82, 65, - 71, 79, 206, 68, 82, 65, 70, 84, 73, 78, 199, 68, 82, 65, 67, 72, 77, 65, - 83, 128, 68, 82, 65, 67, 72, 77, 65, 128, 68, 82, 65, 67, 72, 77, 193, - 68, 79, 87, 78, 87, 65, 82, 68, 83, 128, 68, 79, 87, 78, 45, 80, 79, 73, - 78, 84, 73, 78, 199, 68, 79, 87, 78, 128, 68, 79, 86, 69, 128, 68, 79, - 86, 197, 68, 79, 85, 71, 72, 78, 85, 84, 128, 68, 79, 85, 66, 84, 128, - 68, 79, 85, 66, 76, 69, 196, 68, 79, 85, 66, 76, 69, 45, 76, 73, 78, 197, - 68, 79, 85, 66, 76, 69, 45, 69, 78, 68, 69, 196, 68, 79, 85, 66, 76, 69, - 128, 68, 79, 84, 84, 69, 68, 45, 80, 128, 68, 79, 84, 84, 69, 68, 45, 78, - 128, 68, 79, 84, 84, 69, 68, 45, 76, 128, 68, 79, 84, 84, 69, 68, 128, - 68, 79, 84, 84, 69, 196, 68, 79, 84, 83, 45, 56, 128, 68, 79, 84, 83, 45, - 55, 56, 128, 68, 79, 84, 83, 45, 55, 128, 68, 79, 84, 83, 45, 54, 56, - 128, 68, 79, 84, 83, 45, 54, 55, 56, 128, 68, 79, 84, 83, 45, 54, 55, - 128, 68, 79, 84, 83, 45, 54, 128, 68, 79, 84, 83, 45, 53, 56, 128, 68, - 79, 84, 83, 45, 53, 55, 56, 128, 68, 79, 84, 83, 45, 53, 55, 128, 68, 79, - 84, 83, 45, 53, 54, 56, 128, 68, 79, 84, 83, 45, 53, 54, 55, 56, 128, 68, - 79, 84, 83, 45, 53, 54, 55, 128, 68, 79, 84, 83, 45, 53, 54, 128, 68, 79, - 84, 83, 45, 53, 128, 68, 79, 84, 83, 45, 52, 56, 128, 68, 79, 84, 83, 45, - 52, 55, 56, 128, 68, 79, 84, 83, 45, 52, 55, 128, 68, 79, 84, 83, 45, 52, - 54, 56, 128, 68, 79, 84, 83, 45, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, - 52, 54, 55, 128, 68, 79, 84, 83, 45, 52, 54, 128, 68, 79, 84, 83, 45, 52, - 53, 56, 128, 68, 79, 84, 83, 45, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, - 52, 53, 55, 128, 68, 79, 84, 83, 45, 52, 53, 54, 56, 128, 68, 79, 84, 83, - 45, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, 128, 68, - 79, 84, 83, 45, 52, 53, 54, 128, 68, 79, 84, 83, 45, 52, 53, 128, 68, 79, - 84, 83, 45, 52, 128, 68, 79, 84, 83, 45, 51, 56, 128, 68, 79, 84, 83, 45, - 51, 55, 56, 128, 68, 79, 84, 83, 45, 51, 55, 128, 68, 79, 84, 83, 45, 51, - 54, 56, 128, 68, 79, 84, 83, 45, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, - 51, 54, 55, 128, 68, 79, 84, 83, 45, 51, 54, 128, 68, 79, 84, 83, 45, 51, - 53, 56, 128, 68, 79, 84, 83, 45, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, - 51, 53, 55, 128, 68, 79, 84, 83, 45, 51, 53, 54, 56, 128, 68, 79, 84, 83, - 45, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53, 54, 55, 128, 68, - 79, 84, 83, 45, 51, 53, 54, 128, 68, 79, 84, 83, 45, 51, 53, 128, 68, 79, - 84, 83, 45, 51, 52, 56, 128, 68, 79, 84, 83, 45, 51, 52, 55, 56, 128, 68, - 79, 84, 83, 45, 51, 52, 55, 128, 68, 79, 84, 83, 45, 51, 52, 54, 56, 128, - 68, 79, 84, 83, 45, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, - 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 54, 128, 68, 79, 84, 83, 45, 51, - 52, 53, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55, 56, 128, 68, 79, 84, - 83, 45, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 56, 128, - 68, 79, 84, 83, 45, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, - 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 128, 68, 79, 84, - 83, 45, 51, 52, 53, 128, 68, 79, 84, 83, 45, 51, 52, 128, 68, 79, 84, 83, - 45, 51, 128, 68, 79, 84, 83, 45, 50, 56, 128, 68, 79, 84, 83, 45, 50, 55, - 56, 128, 68, 79, 84, 83, 45, 50, 55, 128, 68, 79, 84, 83, 45, 50, 54, 56, + 69, 128, 72, 68, 82, 128, 72, 67, 128, 72, 66, 65, 83, 65, 45, 69, 83, + 65, 83, 193, 72, 66, 65, 83, 193, 72, 65, 89, 65, 78, 78, 65, 128, 72, + 65, 87, 74, 128, 72, 65, 86, 69, 128, 72, 65, 85, 80, 84, 83, 84, 73, 77, + 77, 69, 128, 72, 65, 213, 72, 65, 84, 82, 65, 206, 72, 65, 84, 72, 73, + 128, 72, 65, 84, 69, 128, 72, 65, 84, 67, 72, 73, 78, 199, 72, 65, 84, + 65, 198, 72, 65, 83, 69, 210, 72, 65, 83, 65, 78, 84, 65, 128, 72, 65, + 82, 80, 79, 79, 78, 128, 72, 65, 82, 80, 79, 79, 206, 72, 65, 82, 77, 79, + 78, 73, 67, 128, 72, 65, 82, 75, 76, 69, 65, 206, 72, 65, 82, 68, 78, 69, + 83, 83, 128, 72, 65, 82, 196, 72, 65, 80, 80, 217, 72, 65, 78, 85, 78, + 79, 207, 72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, 72, 65, 75, + 69, 128, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 211, 72, 65, 78, 68, + 76, 69, 83, 128, 72, 65, 78, 68, 76, 69, 128, 72, 65, 78, 68, 66, 65, 76, + 76, 128, 72, 65, 78, 68, 66, 65, 71, 128, 72, 65, 78, 68, 45, 79, 86, 65, + 76, 128, 72, 65, 78, 68, 45, 79, 86, 65, 204, 72, 65, 78, 68, 45, 72, 79, + 79, 75, 128, 72, 65, 78, 68, 45, 72, 79, 79, 203, 72, 65, 78, 68, 45, 72, + 73, 78, 71, 69, 128, 72, 65, 78, 68, 45, 72, 73, 78, 71, 197, 72, 65, 78, + 68, 45, 70, 76, 65, 84, 128, 72, 65, 78, 68, 45, 70, 76, 65, 212, 72, 65, + 78, 68, 45, 70, 73, 83, 84, 128, 72, 65, 78, 68, 45, 67, 85, 82, 76, 73, + 67, 85, 69, 128, 72, 65, 78, 68, 45, 67, 85, 82, 76, 73, 67, 85, 197, 72, + 65, 78, 68, 45, 67, 85, 80, 128, 72, 65, 78, 68, 45, 67, 85, 208, 72, 65, + 78, 68, 45, 67, 76, 65, 87, 128, 72, 65, 78, 68, 45, 67, 76, 65, 215, 72, + 65, 78, 68, 45, 67, 73, 82, 67, 76, 69, 128, 72, 65, 78, 68, 45, 67, 73, + 82, 67, 76, 197, 72, 65, 78, 68, 45, 65, 78, 71, 76, 69, 128, 72, 65, 78, + 68, 45, 65, 78, 71, 76, 197, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, + 65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 90, 193, 72, 65, 77, + 83, 84, 69, 210, 72, 65, 77, 77, 69, 82, 128, 72, 65, 77, 77, 69, 210, + 72, 65, 77, 66, 85, 82, 71, 69, 82, 128, 72, 65, 76, 81, 65, 128, 72, 65, + 76, 79, 128, 72, 65, 76, 70, 45, 67, 73, 82, 67, 76, 197, 72, 65, 76, 70, + 128, 72, 65, 76, 66, 69, 82, 68, 128, 72, 65, 76, 65, 78, 84, 65, 128, + 72, 65, 73, 84, 85, 128, 72, 65, 73, 211, 72, 65, 73, 82, 67, 85, 84, + 128, 72, 65, 73, 82, 128, 72, 65, 71, 76, 65, 218, 72, 65, 71, 76, 128, + 72, 65, 70, 85, 75, 72, 65, 128, 72, 65, 70, 85, 75, 72, 128, 72, 65, 69, + 71, 204, 72, 65, 65, 82, 85, 128, 72, 65, 65, 77, 128, 72, 65, 193, 72, + 65, 45, 72, 65, 128, 72, 48, 48, 56, 128, 72, 48, 48, 55, 128, 72, 48, + 48, 54, 65, 128, 72, 48, 48, 54, 128, 72, 48, 48, 53, 128, 72, 48, 48, + 52, 128, 72, 48, 48, 51, 128, 72, 48, 48, 50, 128, 72, 48, 48, 49, 128, + 72, 45, 84, 89, 80, 197, 71, 89, 85, 128, 71, 89, 79, 78, 128, 71, 89, + 79, 128, 71, 89, 73, 128, 71, 89, 70, 213, 71, 89, 69, 69, 128, 71, 89, + 65, 83, 128, 71, 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 128, 71, 87, + 85, 128, 71, 87, 73, 128, 71, 87, 69, 69, 128, 71, 87, 69, 128, 71, 87, + 65, 65, 128, 71, 87, 65, 128, 71, 86, 65, 78, 71, 128, 71, 86, 128, 71, + 85, 82, 85, 83, 72, 128, 71, 85, 82, 85, 78, 128, 71, 85, 82, 77, 85, 75, + 72, 201, 71, 85, 82, 65, 77, 85, 84, 79, 78, 128, 71, 85, 82, 55, 128, + 71, 85, 78, 85, 128, 71, 85, 78, 213, 71, 85, 205, 71, 85, 76, 128, 71, + 85, 74, 65, 82, 65, 84, 201, 71, 85, 73, 84, 65, 82, 128, 71, 85, 199, + 71, 85, 69, 73, 128, 71, 85, 69, 72, 128, 71, 85, 69, 200, 71, 85, 68, + 128, 71, 85, 196, 71, 85, 65, 82, 68, 83, 77, 65, 78, 128, 71, 85, 65, + 82, 68, 69, 68, 78, 69, 83, 83, 128, 71, 85, 65, 82, 68, 69, 196, 71, 85, + 65, 82, 68, 128, 71, 85, 65, 82, 65, 78, 201, 71, 85, 193, 71, 85, 178, + 71, 84, 69, 210, 71, 83, 85, 77, 128, 71, 83, 85, 205, 71, 82, 213, 71, + 82, 79, 87, 73, 78, 199, 71, 82, 79, 85, 78, 68, 128, 71, 82, 79, 78, 84, + 72, 73, 83, 77, 65, 84, 65, 128, 71, 82, 73, 78, 78, 73, 78, 199, 71, 82, + 73, 77, 65, 67, 73, 78, 199, 71, 82, 69, 71, 79, 82, 73, 65, 206, 71, 82, + 69, 69, 206, 71, 82, 69, 65, 84, 78, 69, 83, 83, 128, 71, 82, 69, 65, 84, + 69, 82, 45, 84, 72, 65, 78, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, + 65, 206, 71, 82, 69, 65, 84, 69, 210, 71, 82, 69, 65, 212, 71, 82, 65, + 86, 69, 89, 65, 82, 196, 71, 82, 65, 86, 69, 45, 77, 65, 67, 82, 79, 78, + 128, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, + 128, 71, 82, 65, 86, 197, 71, 82, 65, 84, 69, 82, 128, 71, 82, 65, 83, + 83, 128, 71, 82, 65, 83, 211, 71, 82, 65, 83, 208, 71, 82, 65, 80, 72, + 69, 77, 197, 71, 82, 65, 80, 69, 83, 128, 71, 82, 65, 78, 84, 72, 193, + 71, 82, 65, 77, 77, 193, 71, 82, 65, 73, 78, 128, 71, 82, 65, 68, 85, 65, + 84, 73, 79, 206, 71, 82, 65, 68, 85, 65, 76, 128, 71, 82, 65, 67, 69, + 128, 71, 82, 65, 67, 197, 71, 80, 65, 128, 71, 79, 82, 84, 72, 77, 73, + 75, 79, 206, 71, 79, 82, 84, 128, 71, 79, 82, 73, 76, 76, 65, 128, 71, + 79, 82, 71, 79, 84, 69, 82, 73, 128, 71, 79, 82, 71, 79, 83, 89, 78, 84, + 72, 69, 84, 79, 78, 128, 71, 79, 82, 71, 79, 206, 71, 79, 82, 71, 73, + 128, 71, 79, 82, 65, 128, 71, 79, 79, 196, 71, 79, 78, 71, 128, 71, 79, + 76, 70, 69, 82, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, + 78, 199, 71, 79, 66, 76, 73, 78, 128, 71, 79, 65, 76, 128, 71, 79, 65, + 204, 71, 79, 65, 128, 71, 78, 89, 73, 83, 128, 71, 78, 65, 86, 73, 89, + 65, 78, 73, 128, 71, 76, 79, 87, 73, 78, 199, 71, 76, 79, 86, 69, 128, + 71, 76, 79, 84, 84, 65, 204, 71, 76, 79, 66, 197, 71, 76, 73, 83, 83, 65, + 78, 68, 207, 71, 76, 69, 73, 67, 200, 71, 76, 65, 71, 79, 76, 73, 128, + 71, 76, 65, 128, 71, 74, 69, 128, 71, 73, 88, 128, 71, 73, 84, 128, 71, + 73, 83, 72, 128, 71, 73, 83, 200, 71, 73, 83, 65, 76, 128, 71, 73, 82, + 85, 68, 65, 65, 128, 71, 73, 82, 76, 211, 71, 73, 82, 76, 128, 71, 73, + 82, 51, 128, 71, 73, 82, 179, 71, 73, 82, 50, 128, 71, 73, 82, 178, 71, + 73, 80, 128, 71, 73, 78, 73, 73, 128, 71, 73, 77, 69, 76, 128, 71, 73, + 77, 69, 204, 71, 73, 77, 128, 71, 73, 71, 65, 128, 71, 73, 71, 128, 71, + 73, 69, 84, 128, 71, 73, 68, 73, 77, 128, 71, 73, 66, 66, 79, 85, 211, + 71, 73, 66, 65, 128, 71, 73, 52, 128, 71, 73, 180, 71, 72, 90, 128, 71, + 72, 87, 65, 128, 71, 72, 85, 78, 78, 65, 128, 71, 72, 85, 78, 78, 193, + 71, 72, 85, 128, 71, 72, 79, 85, 128, 71, 72, 79, 83, 84, 128, 71, 72, + 79, 128, 71, 72, 73, 77, 69, 76, 128, 71, 72, 73, 128, 71, 72, 72, 65, + 128, 71, 72, 69, 89, 83, 128, 71, 72, 69, 85, 88, 128, 71, 72, 69, 85, + 78, 128, 71, 72, 69, 85, 71, 72, 69, 85, 65, 69, 77, 128, 71, 72, 69, 85, + 71, 72, 69, 78, 128, 71, 72, 69, 85, 65, 69, 82, 65, 69, 128, 71, 72, 69, + 85, 65, 69, 71, 72, 69, 85, 65, 69, 128, 71, 72, 69, 84, 128, 71, 72, 69, + 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 128, 71, 72, + 65, 82, 65, 69, 128, 71, 72, 65, 80, 128, 71, 72, 65, 78, 128, 71, 72, + 65, 77, 77, 65, 128, 71, 72, 65, 77, 65, 76, 128, 71, 72, 65, 73, 78, 85, + 128, 71, 72, 65, 73, 78, 128, 71, 72, 65, 73, 206, 71, 72, 65, 68, 128, + 71, 72, 65, 65, 77, 65, 69, 128, 71, 72, 65, 65, 128, 71, 71, 87, 73, + 128, 71, 71, 87, 69, 69, 128, 71, 71, 87, 69, 128, 71, 71, 87, 65, 65, + 128, 71, 71, 87, 65, 128, 71, 71, 85, 88, 128, 71, 71, 85, 84, 128, 71, + 71, 85, 82, 88, 128, 71, 71, 85, 82, 128, 71, 71, 85, 79, 88, 128, 71, + 71, 85, 79, 84, 128, 71, 71, 85, 79, 80, 128, 71, 71, 85, 79, 128, 71, + 71, 79, 88, 128, 71, 71, 79, 84, 128, 71, 71, 79, 80, 128, 71, 71, 73, + 88, 128, 71, 71, 73, 84, 128, 71, 71, 73, 69, 88, 128, 71, 71, 73, 69, + 80, 128, 71, 71, 73, 69, 128, 71, 71, 69, 88, 128, 71, 71, 69, 84, 128, + 71, 71, 69, 80, 128, 71, 71, 65, 88, 128, 71, 71, 65, 84, 128, 71, 69, + 84, 193, 71, 69, 83, 84, 85, 82, 69, 128, 71, 69, 83, 72, 85, 128, 71, + 69, 83, 72, 84, 73, 78, 128, 71, 69, 83, 72, 84, 73, 206, 71, 69, 83, 72, + 50, 128, 71, 69, 82, 83, 72, 65, 89, 73, 77, 128, 71, 69, 82, 77, 65, + 206, 71, 69, 82, 69, 83, 72, 128, 71, 69, 82, 69, 83, 200, 71, 69, 79, + 77, 69, 84, 82, 73, 67, 65, 76, 76, 217, 71, 69, 79, 77, 69, 84, 82, 73, + 195, 71, 69, 78, 84, 76, 197, 71, 69, 78, 73, 84, 73, 86, 69, 128, 71, + 69, 78, 73, 75, 201, 71, 69, 78, 69, 82, 73, 195, 71, 69, 77, 73, 78, 73, + 128, 71, 69, 77, 73, 78, 65, 84, 73, 79, 206, 71, 69, 77, 73, 78, 65, 84, + 197, 71, 69, 205, 71, 69, 69, 77, 128, 71, 69, 68, 79, 76, 65, 128, 71, + 69, 68, 69, 128, 71, 69, 66, 207, 71, 69, 66, 193, 71, 69, 65, 82, 128, + 71, 69, 65, 210, 71, 69, 50, 50, 128, 71, 68, 65, 78, 128, 71, 67, 73, + 71, 128, 71, 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 73, 69, 197, 71, + 66, 69, 85, 88, 128, 71, 66, 69, 84, 128, 71, 66, 65, 89, 73, 128, 71, + 66, 65, 75, 85, 82, 85, 78, 69, 78, 128, 71, 66, 128, 71, 65, 89, 65, 78, + 85, 75, 73, 84, 84, 65, 128, 71, 65, 89, 65, 78, 78, 65, 128, 71, 65, 89, + 128, 71, 65, 85, 78, 84, 76, 69, 84, 128, 71, 65, 84, 72, 69, 82, 73, 78, + 71, 128, 71, 65, 84, 72, 69, 82, 73, 78, 199, 71, 65, 84, 69, 128, 71, + 65, 83, 72, 65, 78, 128, 71, 65, 82, 83, 72, 85, 78, 73, 128, 71, 65, 82, + 79, 78, 128, 71, 65, 82, 77, 69, 78, 84, 128, 71, 65, 82, 68, 69, 78, + 128, 71, 65, 82, 51, 128, 71, 65, 80, 80, 69, 196, 71, 65, 208, 71, 65, + 78, 77, 65, 128, 71, 65, 78, 71, 73, 65, 128, 71, 65, 78, 68, 193, 71, + 65, 78, 50, 128, 71, 65, 78, 178, 71, 65, 77, 77, 65, 128, 71, 65, 77, + 76, 65, 128, 71, 65, 77, 76, 128, 71, 65, 77, 69, 128, 71, 65, 77, 197, + 71, 65, 77, 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, + 71, 65, 71, 128, 71, 65, 70, 128, 71, 65, 198, 71, 65, 69, 84, 84, 65, + 45, 80, 73, 76, 76, 65, 128, 71, 65, 68, 79, 76, 128, 71, 65, 68, 128, + 71, 65, 196, 71, 65, 66, 65, 128, 71, 65, 66, 193, 71, 65, 65, 70, 85, + 128, 71, 65, 178, 71, 48, 53, 52, 128, 71, 48, 53, 51, 128, 71, 48, 53, + 50, 128, 71, 48, 53, 49, 128, 71, 48, 53, 48, 128, 71, 48, 52, 57, 128, + 71, 48, 52, 56, 128, 71, 48, 52, 55, 128, 71, 48, 52, 54, 128, 71, 48, + 52, 53, 65, 128, 71, 48, 52, 53, 128, 71, 48, 52, 52, 128, 71, 48, 52, + 51, 65, 128, 71, 48, 52, 51, 128, 71, 48, 52, 50, 128, 71, 48, 52, 49, + 128, 71, 48, 52, 48, 128, 71, 48, 51, 57, 128, 71, 48, 51, 56, 128, 71, + 48, 51, 55, 65, 128, 71, 48, 51, 55, 128, 71, 48, 51, 54, 65, 128, 71, + 48, 51, 54, 128, 71, 48, 51, 53, 128, 71, 48, 51, 52, 128, 71, 48, 51, + 51, 128, 71, 48, 51, 50, 128, 71, 48, 51, 49, 128, 71, 48, 51, 48, 128, + 71, 48, 50, 57, 128, 71, 48, 50, 56, 128, 71, 48, 50, 55, 128, 71, 48, + 50, 54, 65, 128, 71, 48, 50, 54, 128, 71, 48, 50, 53, 128, 71, 48, 50, + 52, 128, 71, 48, 50, 51, 128, 71, 48, 50, 50, 128, 71, 48, 50, 49, 128, + 71, 48, 50, 48, 65, 128, 71, 48, 50, 48, 128, 71, 48, 49, 57, 128, 71, + 48, 49, 56, 128, 71, 48, 49, 55, 128, 71, 48, 49, 54, 128, 71, 48, 49, + 53, 128, 71, 48, 49, 52, 128, 71, 48, 49, 51, 128, 71, 48, 49, 50, 128, + 71, 48, 49, 49, 65, 128, 71, 48, 49, 49, 128, 71, 48, 49, 48, 128, 71, + 48, 48, 57, 128, 71, 48, 48, 56, 128, 71, 48, 48, 55, 66, 128, 71, 48, + 48, 55, 65, 128, 71, 48, 48, 55, 128, 71, 48, 48, 54, 65, 128, 71, 48, + 48, 54, 128, 71, 48, 48, 53, 128, 71, 48, 48, 52, 128, 71, 48, 48, 51, + 128, 71, 48, 48, 50, 128, 71, 48, 48, 49, 128, 70, 89, 88, 128, 70, 89, + 84, 128, 70, 89, 80, 128, 70, 89, 65, 128, 70, 87, 73, 128, 70, 87, 69, + 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, 128, 70, 86, + 83, 51, 128, 70, 86, 83, 50, 128, 70, 86, 83, 49, 128, 70, 85, 88, 128, + 70, 85, 84, 128, 70, 85, 83, 69, 128, 70, 85, 83, 193, 70, 85, 82, 88, + 128, 70, 85, 80, 128, 70, 85, 78, 69, 82, 65, 204, 70, 85, 78, 67, 84, + 73, 79, 78, 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 128, 70, 85, 76, 76, + 78, 69, 83, 83, 128, 70, 85, 76, 204, 70, 85, 74, 73, 128, 70, 85, 69, + 84, 128, 70, 85, 69, 204, 70, 85, 69, 128, 70, 85, 65, 128, 70, 84, 72, + 79, 82, 193, 70, 83, 73, 128, 70, 82, 79, 87, 78, 73, 78, 71, 128, 70, + 82, 79, 87, 78, 73, 78, 199, 70, 82, 79, 87, 78, 128, 70, 82, 79, 87, + 206, 70, 82, 79, 78, 84, 45, 84, 73, 76, 84, 69, 196, 70, 82, 79, 78, 84, + 45, 70, 65, 67, 73, 78, 199, 70, 82, 79, 78, 212, 70, 82, 79, 205, 70, + 82, 79, 71, 128, 70, 82, 79, 199, 70, 82, 73, 84, 85, 128, 70, 82, 73, + 69, 83, 128, 70, 82, 73, 69, 196, 70, 82, 73, 67, 65, 84, 73, 86, 69, + 128, 70, 82, 69, 84, 66, 79, 65, 82, 68, 128, 70, 82, 69, 78, 67, 200, + 70, 82, 69, 69, 128, 70, 82, 69, 197, 70, 82, 65, 78, 75, 211, 70, 82, + 65, 78, 195, 70, 82, 65, 77, 69, 83, 128, 70, 82, 65, 77, 69, 128, 70, + 82, 65, 77, 197, 70, 82, 65, 71, 82, 65, 78, 84, 128, 70, 82, 65, 71, 77, + 69, 78, 84, 128, 70, 82, 65, 67, 84, 73, 79, 206, 70, 79, 88, 128, 70, + 79, 216, 70, 79, 85, 82, 84, 69, 69, 78, 128, 70, 79, 85, 82, 84, 69, 69, + 206, 70, 79, 85, 82, 45, 84, 72, 73, 82, 84, 89, 128, 70, 79, 85, 82, 45, + 83, 84, 82, 73, 78, 199, 70, 79, 85, 82, 45, 80, 69, 82, 45, 69, 205, 70, + 79, 85, 82, 45, 76, 73, 78, 197, 70, 79, 85, 210, 70, 79, 85, 78, 84, 65, + 73, 78, 128, 70, 79, 85, 78, 84, 65, 73, 206, 70, 79, 83, 84, 69, 82, 73, + 78, 71, 128, 70, 79, 82, 87, 65, 82, 68, 128, 70, 79, 82, 87, 65, 82, + 196, 70, 79, 82, 84, 89, 128, 70, 79, 82, 84, 217, 70, 79, 82, 84, 73, + 69, 84, 72, 128, 70, 79, 82, 84, 69, 128, 70, 79, 82, 77, 211, 70, 79, + 82, 77, 65, 84, 84, 73, 78, 71, 128, 70, 79, 82, 77, 65, 212, 70, 79, 82, + 75, 69, 196, 70, 79, 82, 69, 72, 69, 65, 196, 70, 79, 82, 67, 69, 83, + 128, 70, 79, 82, 67, 69, 128, 70, 79, 80, 128, 70, 79, 79, 84, 83, 84, + 79, 79, 76, 128, 70, 79, 79, 84, 80, 82, 73, 78, 84, 83, 128, 70, 79, 79, + 84, 78, 79, 84, 197, 70, 79, 79, 84, 66, 65, 76, 76, 128, 70, 79, 79, 84, + 128, 70, 79, 79, 76, 128, 70, 79, 79, 68, 128, 70, 79, 79, 128, 70, 79, + 78, 212, 70, 79, 78, 71, 77, 65, 78, 128, 70, 79, 77, 128, 70, 79, 76, + 76, 89, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71, 128, 70, 79, 76, 68, 69, + 82, 128, 70, 79, 76, 68, 69, 196, 70, 79, 71, 71, 89, 128, 70, 79, 71, + 128, 70, 207, 70, 77, 128, 70, 76, 89, 73, 78, 199, 70, 76, 89, 128, 70, + 76, 85, 84, 84, 69, 82, 73, 78, 71, 128, 70, 76, 85, 84, 84, 69, 82, 73, + 78, 199, 70, 76, 85, 84, 69, 128, 70, 76, 85, 83, 72, 69, 196, 70, 76, + 79, 87, 73, 78, 199, 70, 76, 79, 87, 69, 82, 83, 128, 70, 76, 79, 87, 69, + 210, 70, 76, 79, 85, 82, 73, 83, 72, 128, 70, 76, 79, 82, 69, 84, 84, 69, + 128, 70, 76, 79, 82, 65, 204, 70, 76, 79, 80, 80, 217, 70, 76, 79, 79, + 82, 128, 70, 76, 79, 79, 210, 70, 76, 73, 80, 128, 70, 76, 73, 71, 72, + 84, 128, 70, 76, 73, 67, 203, 70, 76, 69, 88, 85, 83, 128, 70, 76, 69, + 88, 69, 196, 70, 76, 69, 88, 128, 70, 76, 69, 85, 82, 79, 78, 128, 70, + 76, 69, 85, 82, 45, 68, 69, 45, 76, 73, 83, 128, 70, 76, 65, 84, 84, 69, + 78, 69, 196, 70, 76, 65, 84, 78, 69, 83, 83, 128, 70, 76, 65, 84, 66, 82, + 69, 65, 68, 128, 70, 76, 65, 83, 72, 128, 70, 76, 65, 71, 83, 128, 70, + 76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45, 52, 128, 70, 76, 65, 71, 45, + 51, 128, 70, 76, 65, 71, 45, 50, 128, 70, 76, 65, 71, 45, 49, 128, 70, + 76, 65, 71, 128, 70, 76, 65, 199, 70, 76, 65, 128, 70, 76, 128, 70, 73, + 88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 88, 128, 70, 73, 86, 69, 45, 84, + 72, 73, 82, 84, 89, 128, 70, 73, 86, 69, 45, 76, 73, 78, 197, 70, 73, 86, + 197, 70, 73, 84, 90, 80, 65, 84, 82, 73, 67, 203, 70, 73, 84, 65, 128, + 70, 73, 84, 128, 70, 73, 83, 84, 69, 196, 70, 73, 83, 72, 73, 78, 199, + 70, 73, 83, 72, 72, 79, 79, 75, 128, 70, 73, 83, 72, 72, 79, 79, 203, 70, + 73, 83, 72, 69, 89, 69, 128, 70, 73, 83, 72, 128, 70, 73, 83, 200, 70, + 73, 82, 83, 212, 70, 73, 82, 73, 128, 70, 73, 82, 69, 87, 79, 82, 75, 83, + 128, 70, 73, 82, 69, 87, 79, 82, 203, 70, 73, 82, 69, 128, 70, 73, 82, + 197, 70, 73, 80, 128, 70, 73, 78, 73, 84, 197, 70, 73, 78, 71, 69, 82, + 83, 128, 70, 73, 78, 71, 69, 82, 211, 70, 73, 78, 71, 69, 82, 78, 65, 73, + 76, 83, 128, 70, 73, 78, 71, 69, 82, 69, 196, 70, 73, 78, 71, 69, 82, 45, + 80, 79, 83, 212, 70, 73, 78, 71, 69, 82, 128, 70, 73, 78, 71, 69, 210, + 70, 73, 78, 65, 78, 67, 73, 65, 76, 128, 70, 73, 78, 65, 76, 128, 70, 73, + 76, 205, 70, 73, 76, 76, 69, 82, 45, 50, 128, 70, 73, 76, 76, 69, 82, 45, + 49, 128, 70, 73, 76, 76, 69, 82, 128, 70, 73, 76, 76, 69, 196, 70, 73, + 76, 76, 128, 70, 73, 76, 204, 70, 73, 76, 197, 70, 73, 73, 128, 70, 73, + 71, 85, 82, 69, 45, 51, 128, 70, 73, 71, 85, 82, 69, 45, 50, 128, 70, 73, + 71, 85, 82, 69, 45, 49, 128, 70, 73, 71, 85, 82, 197, 70, 73, 71, 72, 84, + 128, 70, 73, 70, 84, 89, 128, 70, 73, 70, 84, 217, 70, 73, 70, 84, 72, + 83, 128, 70, 73, 70, 84, 72, 128, 70, 73, 70, 84, 69, 69, 78, 128, 70, + 73, 70, 84, 69, 69, 206, 70, 73, 69, 76, 68, 128, 70, 73, 69, 76, 196, + 70, 72, 84, 79, 82, 193, 70, 70, 76, 128, 70, 70, 73, 128, 70, 69, 85, + 88, 128, 70, 69, 85, 70, 69, 85, 65, 69, 84, 128, 70, 69, 83, 84, 73, 86, + 65, 76, 128, 70, 69, 82, 82, 89, 128, 70, 69, 82, 82, 73, 211, 70, 69, + 82, 77, 65, 84, 65, 128, 70, 69, 82, 77, 65, 84, 193, 70, 69, 79, 200, + 70, 69, 78, 199, 70, 69, 78, 67, 69, 82, 128, 70, 69, 78, 67, 69, 128, + 70, 69, 77, 73, 78, 73, 78, 197, 70, 69, 77, 65, 76, 69, 128, 70, 69, 77, + 65, 76, 197, 70, 69, 76, 76, 79, 87, 83, 72, 73, 80, 128, 70, 69, 73, + 128, 70, 69, 72, 213, 70, 69, 72, 128, 70, 69, 200, 70, 69, 69, 78, 71, + 128, 70, 69, 69, 77, 128, 70, 69, 69, 68, 128, 70, 69, 69, 196, 70, 69, + 69, 128, 70, 69, 66, 82, 85, 65, 82, 89, 128, 70, 69, 65, 84, 72, 69, 82, + 128, 70, 69, 65, 84, 72, 69, 210, 70, 69, 65, 82, 78, 128, 70, 69, 65, + 82, 70, 85, 204, 70, 69, 65, 82, 128, 70, 65, 89, 65, 78, 78, 65, 128, + 70, 65, 89, 128, 70, 65, 88, 128, 70, 65, 216, 70, 65, 84, 73, 71, 85, + 69, 128, 70, 65, 84, 72, 69, 82, 128, 70, 65, 84, 72, 69, 210, 70, 65, + 84, 72, 65, 84, 65, 78, 128, 70, 65, 84, 72, 65, 84, 65, 206, 70, 65, 84, + 72, 65, 128, 70, 65, 84, 72, 193, 70, 65, 84, 128, 70, 65, 83, 84, 128, + 70, 65, 82, 83, 201, 70, 65, 82, 128, 70, 65, 81, 128, 70, 65, 80, 128, + 70, 65, 78, 71, 128, 70, 65, 78, 69, 82, 79, 83, 73, 211, 70, 65, 78, + 128, 70, 65, 77, 73, 76, 89, 128, 70, 65, 77, 128, 70, 65, 76, 76, 69, + 206, 70, 65, 74, 128, 70, 65, 73, 76, 85, 82, 69, 128, 70, 65, 73, 72, + 85, 128, 70, 65, 73, 66, 128, 70, 65, 72, 82, 69, 78, 72, 69, 73, 84, + 128, 70, 65, 67, 84, 79, 82, 89, 128, 70, 65, 67, 84, 79, 210, 70, 65, + 67, 83, 73, 77, 73, 76, 197, 70, 65, 67, 73, 78, 71, 83, 128, 70, 65, 67, + 69, 45, 54, 128, 70, 65, 67, 69, 45, 53, 128, 70, 65, 67, 69, 45, 52, + 128, 70, 65, 67, 69, 45, 51, 128, 70, 65, 67, 69, 45, 50, 128, 70, 65, + 67, 69, 45, 49, 128, 70, 65, 65, 77, 65, 69, 128, 70, 65, 65, 73, 128, + 70, 65, 65, 70, 85, 128, 70, 48, 53, 51, 128, 70, 48, 53, 50, 128, 70, + 48, 53, 49, 67, 128, 70, 48, 53, 49, 66, 128, 70, 48, 53, 49, 65, 128, + 70, 48, 53, 49, 128, 70, 48, 53, 48, 128, 70, 48, 52, 57, 128, 70, 48, + 52, 56, 128, 70, 48, 52, 55, 65, 128, 70, 48, 52, 55, 128, 70, 48, 52, + 54, 65, 128, 70, 48, 52, 54, 128, 70, 48, 52, 53, 65, 128, 70, 48, 52, + 53, 128, 70, 48, 52, 52, 128, 70, 48, 52, 51, 128, 70, 48, 52, 50, 128, + 70, 48, 52, 49, 128, 70, 48, 52, 48, 128, 70, 48, 51, 57, 128, 70, 48, + 51, 56, 65, 128, 70, 48, 51, 56, 128, 70, 48, 51, 55, 65, 128, 70, 48, + 51, 55, 128, 70, 48, 51, 54, 128, 70, 48, 51, 53, 128, 70, 48, 51, 52, + 128, 70, 48, 51, 51, 128, 70, 48, 51, 50, 128, 70, 48, 51, 49, 65, 128, + 70, 48, 51, 49, 128, 70, 48, 51, 48, 128, 70, 48, 50, 57, 128, 70, 48, + 50, 56, 128, 70, 48, 50, 55, 128, 70, 48, 50, 54, 128, 70, 48, 50, 53, + 128, 70, 48, 50, 52, 128, 70, 48, 50, 51, 128, 70, 48, 50, 50, 128, 70, + 48, 50, 49, 65, 128, 70, 48, 50, 49, 128, 70, 48, 50, 48, 128, 70, 48, + 49, 57, 128, 70, 48, 49, 56, 128, 70, 48, 49, 55, 128, 70, 48, 49, 54, + 128, 70, 48, 49, 53, 128, 70, 48, 49, 52, 128, 70, 48, 49, 51, 65, 128, + 70, 48, 49, 51, 128, 70, 48, 49, 50, 128, 70, 48, 49, 49, 128, 70, 48, + 49, 48, 128, 70, 48, 48, 57, 128, 70, 48, 48, 56, 128, 70, 48, 48, 55, + 128, 70, 48, 48, 54, 128, 70, 48, 48, 53, 128, 70, 48, 48, 52, 128, 70, + 48, 48, 51, 128, 70, 48, 48, 50, 128, 70, 48, 48, 49, 65, 128, 70, 48, + 48, 49, 128, 69, 90, 83, 128, 69, 90, 200, 69, 90, 69, 78, 128, 69, 90, + 69, 206, 69, 90, 128, 69, 89, 89, 89, 128, 69, 89, 69, 83, 128, 69, 89, + 69, 211, 69, 89, 69, 76, 65, 83, 72, 69, 211, 69, 89, 69, 71, 76, 65, 83, + 83, 69, 83, 128, 69, 89, 69, 71, 65, 90, 69, 45, 87, 65, 76, 76, 80, 76, + 65, 78, 197, 69, 89, 69, 71, 65, 90, 69, 45, 70, 76, 79, 79, 82, 80, 76, + 65, 78, 197, 69, 89, 69, 66, 82, 79, 87, 211, 69, 89, 197, 69, 89, 66, + 69, 89, 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, 128, 69, 88, 84, 82, + 69, 77, 69, 76, 217, 69, 88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82, + 73, 65, 204, 69, 88, 84, 82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45, + 72, 73, 71, 200, 69, 88, 84, 82, 193, 69, 88, 84, 69, 78, 83, 73, 79, 78, + 128, 69, 88, 84, 69, 78, 68, 69, 68, 128, 69, 88, 84, 69, 78, 68, 69, + 196, 69, 88, 80, 82, 69, 83, 83, 73, 79, 78, 76, 69, 83, 211, 69, 88, 80, + 79, 78, 69, 78, 212, 69, 88, 79, 128, 69, 88, 207, 69, 88, 73, 83, 84, + 83, 128, 69, 88, 73, 83, 84, 128, 69, 88, 72, 65, 85, 83, 84, 73, 79, 78, + 128, 69, 88, 72, 65, 76, 69, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, + 78, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 206, 69, 88, 67, 73, 84, + 69, 77, 69, 78, 84, 128, 69, 88, 67, 72, 65, 78, 71, 69, 128, 69, 88, 67, + 69, 83, 83, 128, 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, + 128, 69, 86, 69, 82, 217, 69, 86, 69, 82, 71, 82, 69, 69, 206, 69, 86, + 69, 78, 73, 78, 71, 128, 69, 85, 82, 79, 80, 69, 65, 206, 69, 85, 82, 79, + 80, 69, 45, 65, 70, 82, 73, 67, 65, 128, 69, 85, 82, 79, 45, 67, 85, 82, + 82, 69, 78, 67, 217, 69, 85, 82, 207, 69, 85, 76, 69, 210, 69, 85, 45, + 85, 128, 69, 85, 45, 79, 128, 69, 85, 45, 69, 85, 128, 69, 85, 45, 69, + 79, 128, 69, 85, 45, 69, 128, 69, 85, 45, 65, 128, 69, 84, 88, 128, 69, + 84, 78, 65, 72, 84, 65, 128, 69, 84, 72, 69, 204, 69, 84, 69, 82, 79, + 206, 69, 84, 69, 82, 78, 73, 84, 89, 128, 69, 84, 69, 82, 78, 73, 84, + 217, 69, 84, 66, 128, 69, 83, 90, 128, 69, 83, 85, 75, 85, 85, 68, 79, + 128, 69, 83, 84, 73, 77, 65, 84, 69, 83, 128, 69, 83, 84, 73, 77, 65, 84, + 69, 196, 69, 83, 72, 69, 51, 128, 69, 83, 72, 50, 49, 128, 69, 83, 72, + 49, 54, 128, 69, 83, 67, 65, 80, 69, 128, 69, 83, 67, 128, 69, 83, 65, + 128, 69, 83, 45, 84, 69, 128, 69, 83, 45, 51, 128, 69, 83, 45, 50, 128, + 69, 83, 45, 49, 128, 69, 82, 82, 79, 82, 45, 66, 65, 82, 82, 69, 196, 69, + 82, 82, 128, 69, 82, 73, 78, 50, 128, 69, 82, 73, 78, 178, 69, 82, 71, + 128, 69, 82, 65, 83, 197, 69, 81, 85, 73, 86, 65, 76, 69, 78, 212, 69, + 81, 85, 73, 76, 65, 84, 69, 82, 65, 204, 69, 81, 85, 73, 68, 128, 69, 81, + 85, 73, 65, 78, 71, 85, 76, 65, 210, 69, 81, 85, 65, 76, 83, 128, 69, 81, + 85, 65, 76, 211, 69, 81, 85, 65, 76, 128, 69, 80, 83, 73, 76, 79, 78, + 128, 69, 80, 83, 73, 76, 79, 206, 69, 80, 79, 67, 72, 128, 69, 80, 73, + 71, 82, 65, 80, 72, 73, 195, 69, 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, + 80, 69, 78, 84, 72, 69, 84, 73, 195, 69, 80, 69, 71, 69, 82, 77, 65, 128, + 69, 80, 65, 67, 212, 69, 79, 84, 128, 69, 79, 77, 128, 69, 79, 76, 72, + 88, 128, 69, 79, 76, 128, 69, 79, 72, 128, 69, 78, 89, 128, 69, 78, 86, + 69, 76, 79, 80, 69, 128, 69, 78, 86, 69, 76, 79, 80, 197, 69, 78, 85, 77, + 69, 82, 65, 84, 73, 79, 206, 69, 78, 84, 82, 89, 45, 50, 128, 69, 78, 84, + 82, 89, 45, 49, 128, 69, 78, 84, 82, 89, 128, 69, 78, 84, 82, 217, 69, + 78, 84, 72, 85, 83, 73, 65, 83, 77, 128, 69, 78, 84, 69, 82, 80, 82, 73, + 83, 69, 128, 69, 78, 84, 69, 82, 73, 78, 199, 69, 78, 84, 69, 82, 128, + 69, 78, 84, 69, 210, 69, 78, 84, 45, 83, 72, 65, 80, 69, 196, 69, 78, 81, + 85, 73, 82, 89, 128, 69, 78, 81, 128, 69, 78, 79, 211, 69, 78, 78, 73, + 128, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 128, + 69, 78, 71, 73, 78, 69, 128, 69, 78, 68, 79, 70, 79, 78, 79, 78, 128, 69, + 78, 68, 73, 78, 199, 69, 78, 68, 69, 80, 128, 69, 78, 68, 69, 65, 86, 79, + 85, 82, 128, 69, 78, 67, 79, 85, 78, 84, 69, 82, 83, 128, 69, 78, 67, 76, + 79, 83, 85, 82, 69, 83, 128, 69, 78, 67, 76, 79, 83, 85, 82, 69, 128, 69, + 78, 67, 76, 79, 83, 73, 78, 199, 69, 78, 67, 128, 69, 78, 65, 82, 88, 73, + 211, 69, 78, 65, 82, 77, 79, 78, 73, 79, 211, 69, 77, 80, 84, 217, 69, + 77, 80, 72, 65, 84, 73, 195, 69, 77, 80, 72, 65, 83, 73, 211, 69, 77, 79, + 74, 201, 69, 77, 66, 82, 79, 73, 68, 69, 82, 89, 128, 69, 77, 66, 76, 69, + 77, 128, 69, 77, 66, 69, 76, 76, 73, 83, 72, 77, 69, 78, 84, 128, 69, 77, + 66, 69, 68, 68, 73, 78, 71, 128, 69, 76, 89, 128, 69, 76, 84, 128, 69, + 76, 76, 73, 80, 84, 73, 195, 69, 76, 76, 73, 80, 83, 73, 83, 128, 69, 76, + 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, 69, 86, 69, 78, + 45, 84, 72, 73, 82, 84, 89, 128, 69, 76, 69, 86, 69, 78, 128, 69, 76, 69, + 86, 69, 206, 69, 76, 69, 80, 72, 65, 78, 84, 128, 69, 76, 69, 77, 69, 78, + 212, 69, 76, 69, 67, 84, 82, 73, 67, 65, 204, 69, 76, 69, 67, 84, 82, 73, + 195, 69, 76, 66, 65, 83, 65, 206, 69, 76, 65, 77, 73, 84, 69, 128, 69, + 76, 65, 77, 73, 84, 197, 69, 76, 65, 70, 82, 79, 78, 128, 69, 75, 83, 84, + 82, 69, 80, 84, 79, 78, 128, 69, 75, 83, 128, 69, 75, 70, 79, 78, 73, 84, + 73, 75, 79, 78, 128, 69, 75, 65, 82, 65, 128, 69, 75, 65, 77, 128, 69, + 74, 69, 67, 212, 69, 73, 83, 128, 69, 73, 71, 72, 84, 89, 128, 69, 73, + 71, 72, 84, 217, 69, 73, 71, 72, 84, 73, 69, 84, 72, 83, 128, 69, 73, 71, + 72, 84, 72, 83, 128, 69, 73, 71, 72, 84, 72, 211, 69, 73, 71, 72, 84, 72, + 128, 69, 73, 71, 72, 84, 69, 69, 78, 128, 69, 73, 71, 72, 84, 69, 69, + 206, 69, 73, 71, 72, 84, 45, 84, 72, 73, 82, 84, 89, 128, 69, 73, 69, + 128, 69, 72, 87, 65, 218, 69, 72, 84, 83, 65, 128, 69, 72, 84, 65, 128, + 69, 72, 80, 65, 128, 69, 72, 75, 65, 128, 69, 72, 67, 72, 65, 128, 69, + 71, 89, 80, 84, 79, 76, 79, 71, 73, 67, 65, 204, 69, 71, 89, 128, 69, 71, + 73, 82, 128, 69, 71, 71, 128, 69, 69, 89, 65, 78, 78, 65, 128, 69, 69, + 75, 65, 65, 128, 69, 69, 72, 128, 69, 69, 66, 69, 69, 70, 73, 76, 73, + 128, 69, 68, 73, 84, 79, 82, 73, 65, 204, 69, 68, 73, 78, 128, 69, 68, + 68, 128, 69, 67, 83, 128, 69, 66, 69, 70, 73, 76, 73, 128, 69, 65, 83, + 84, 69, 82, 206, 69, 65, 83, 84, 128, 69, 65, 83, 212, 69, 65, 82, 84, + 72, 76, 217, 69, 65, 82, 84, 72, 128, 69, 65, 82, 84, 200, 69, 65, 82, + 83, 128, 69, 65, 82, 76, 217, 69, 65, 77, 72, 65, 78, 67, 72, 79, 76, 76, + 128, 69, 65, 71, 76, 69, 128, 69, 65, 68, 72, 65, 68, 72, 128, 69, 65, + 66, 72, 65, 68, 72, 128, 69, 178, 69, 48, 51, 56, 128, 69, 48, 51, 55, + 128, 69, 48, 51, 54, 128, 69, 48, 51, 52, 65, 128, 69, 48, 51, 52, 128, + 69, 48, 51, 51, 128, 69, 48, 51, 50, 128, 69, 48, 51, 49, 128, 69, 48, + 51, 48, 128, 69, 48, 50, 57, 128, 69, 48, 50, 56, 65, 128, 69, 48, 50, + 56, 128, 69, 48, 50, 55, 128, 69, 48, 50, 54, 128, 69, 48, 50, 53, 128, + 69, 48, 50, 52, 128, 69, 48, 50, 51, 128, 69, 48, 50, 50, 128, 69, 48, + 50, 49, 128, 69, 48, 50, 48, 65, 128, 69, 48, 50, 48, 128, 69, 48, 49, + 57, 128, 69, 48, 49, 56, 128, 69, 48, 49, 55, 65, 128, 69, 48, 49, 55, + 128, 69, 48, 49, 54, 65, 128, 69, 48, 49, 54, 128, 69, 48, 49, 53, 128, + 69, 48, 49, 52, 128, 69, 48, 49, 51, 128, 69, 48, 49, 50, 128, 69, 48, + 49, 49, 128, 69, 48, 49, 48, 128, 69, 48, 48, 57, 65, 128, 69, 48, 48, + 57, 128, 69, 48, 48, 56, 65, 128, 69, 48, 48, 56, 128, 69, 48, 48, 55, + 128, 69, 48, 48, 54, 128, 69, 48, 48, 53, 128, 69, 48, 48, 52, 128, 69, + 48, 48, 51, 128, 69, 48, 48, 50, 128, 69, 48, 48, 49, 128, 69, 45, 77, + 65, 73, 204, 68, 90, 90, 72, 69, 128, 68, 90, 90, 69, 128, 68, 90, 90, + 65, 128, 68, 90, 89, 65, 89, 128, 68, 90, 87, 69, 128, 68, 90, 85, 128, + 68, 90, 79, 128, 68, 90, 74, 69, 128, 68, 90, 73, 84, 65, 128, 68, 90, + 73, 128, 68, 90, 72, 79, 73, 128, 68, 90, 72, 69, 128, 68, 90, 72, 65, + 128, 68, 90, 69, 76, 79, 128, 68, 90, 69, 69, 128, 68, 90, 69, 128, 68, + 90, 65, 89, 128, 68, 90, 65, 65, 128, 68, 90, 65, 128, 68, 90, 128, 68, + 218, 68, 89, 79, 128, 68, 89, 207, 68, 89, 78, 65, 77, 73, 195, 68, 89, + 69, 72, 128, 68, 89, 69, 200, 68, 89, 65, 78, 128, 68, 87, 79, 128, 68, + 87, 69, 128, 68, 87, 65, 128, 68, 86, 73, 83, 86, 65, 82, 65, 128, 68, + 86, 68, 128, 68, 86, 128, 68, 85, 84, 73, 69, 83, 128, 68, 85, 83, 75, + 128, 68, 85, 83, 72, 69, 78, 78, 65, 128, 68, 85, 82, 65, 84, 73, 79, 78, + 128, 68, 85, 82, 50, 128, 68, 85, 80, 79, 78, 68, 73, 85, 211, 68, 85, + 79, 88, 128, 68, 85, 79, 128, 68, 85, 78, 52, 128, 68, 85, 78, 51, 128, + 68, 85, 78, 179, 68, 85, 77, 128, 68, 85, 204, 68, 85, 72, 128, 68, 85, + 71, 85, 68, 128, 68, 85, 199, 68, 85, 67, 75, 128, 68, 85, 66, 50, 128, + 68, 85, 66, 128, 68, 85, 194, 68, 82, 89, 128, 68, 82, 217, 68, 82, 85, + 77, 83, 84, 73, 67, 75, 83, 128, 68, 82, 85, 77, 128, 68, 82, 85, 205, + 68, 82, 79, 80, 83, 128, 68, 82, 79, 80, 76, 69, 84, 128, 68, 82, 79, 80, + 45, 83, 72, 65, 68, 79, 87, 69, 196, 68, 82, 79, 79, 76, 73, 78, 199, 68, + 82, 79, 77, 69, 68, 65, 82, 217, 68, 82, 73, 86, 69, 128, 68, 82, 73, 86, + 197, 68, 82, 73, 78, 75, 128, 68, 82, 73, 204, 68, 82, 69, 83, 83, 128, + 68, 82, 69, 65, 77, 217, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, 65, 77, + 128, 68, 82, 65, 205, 68, 82, 65, 71, 79, 78, 128, 68, 82, 65, 71, 79, + 206, 68, 82, 65, 70, 84, 73, 78, 199, 68, 82, 65, 67, 72, 77, 65, 83, + 128, 68, 82, 65, 67, 72, 77, 65, 128, 68, 82, 65, 67, 72, 77, 193, 68, + 79, 87, 78, 87, 65, 82, 68, 83, 128, 68, 79, 87, 78, 45, 80, 79, 73, 78, + 84, 73, 78, 199, 68, 79, 87, 78, 128, 68, 79, 86, 69, 128, 68, 79, 86, + 197, 68, 79, 85, 71, 72, 78, 85, 84, 128, 68, 79, 85, 66, 84, 128, 68, + 79, 85, 66, 76, 69, 196, 68, 79, 85, 66, 76, 69, 45, 76, 73, 78, 197, 68, + 79, 85, 66, 76, 69, 45, 69, 78, 68, 69, 196, 68, 79, 85, 66, 76, 69, 128, + 68, 79, 84, 84, 69, 68, 45, 80, 128, 68, 79, 84, 84, 69, 68, 45, 78, 128, + 68, 79, 84, 84, 69, 68, 45, 76, 128, 68, 79, 84, 84, 69, 68, 128, 68, 79, + 84, 84, 69, 196, 68, 79, 84, 83, 45, 56, 128, 68, 79, 84, 83, 45, 55, 56, + 128, 68, 79, 84, 83, 45, 55, 128, 68, 79, 84, 83, 45, 54, 56, 128, 68, + 79, 84, 83, 45, 54, 55, 56, 128, 68, 79, 84, 83, 45, 54, 55, 128, 68, 79, + 84, 83, 45, 54, 128, 68, 79, 84, 83, 45, 53, 56, 128, 68, 79, 84, 83, 45, + 53, 55, 56, 128, 68, 79, 84, 83, 45, 53, 55, 128, 68, 79, 84, 83, 45, 53, + 54, 56, 128, 68, 79, 84, 83, 45, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 53, 54, 128, 68, 79, 84, 83, 45, 53, + 128, 68, 79, 84, 83, 45, 52, 56, 128, 68, 79, 84, 83, 45, 52, 55, 56, + 128, 68, 79, 84, 83, 45, 52, 55, 128, 68, 79, 84, 83, 45, 52, 54, 56, + 128, 68, 79, 84, 83, 45, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 54, + 55, 128, 68, 79, 84, 83, 45, 52, 54, 128, 68, 79, 84, 83, 45, 52, 53, 56, + 128, 68, 79, 84, 83, 45, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, + 55, 128, 68, 79, 84, 83, 45, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 52, + 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, 128, 68, 79, 84, + 83, 45, 52, 53, 54, 128, 68, 79, 84, 83, 45, 52, 53, 128, 68, 79, 84, 83, + 45, 52, 128, 68, 79, 84, 83, 45, 51, 56, 128, 68, 79, 84, 83, 45, 51, 55, + 56, 128, 68, 79, 84, 83, 45, 51, 55, 128, 68, 79, 84, 83, 45, 51, 54, 56, + 128, 68, 79, 84, 83, 45, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 54, + 55, 128, 68, 79, 84, 83, 45, 51, 54, 128, 68, 79, 84, 83, 45, 51, 53, 56, + 128, 68, 79, 84, 83, 45, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53, + 55, 128, 68, 79, 84, 83, 45, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 51, + 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53, 54, 55, 128, 68, 79, 84, + 83, 45, 51, 53, 54, 128, 68, 79, 84, 83, 45, 51, 53, 128, 68, 79, 84, 83, + 45, 51, 52, 56, 128, 68, 79, 84, 83, 45, 51, 52, 55, 56, 128, 68, 79, 84, + 83, 45, 51, 52, 55, 128, 68, 79, 84, 83, 45, 51, 52, 54, 56, 128, 68, 79, + 84, 83, 45, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 54, 55, + 128, 68, 79, 84, 83, 45, 51, 52, 54, 128, 68, 79, 84, 83, 45, 51, 52, 53, + 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, + 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 56, 128, 68, 79, + 84, 83, 45, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, + 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, + 51, 52, 53, 128, 68, 79, 84, 83, 45, 51, 52, 128, 68, 79, 84, 83, 45, 51, + 128, 68, 79, 84, 83, 45, 50, 56, 128, 68, 79, 84, 83, 45, 50, 55, 56, + 128, 68, 79, 84, 83, 45, 50, 55, 128, 68, 79, 84, 83, 45, 50, 54, 56, 128, 68, 79, 84, 83, 45, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 54, 55, 128, 68, 79, 84, 83, 45, 50, 54, 128, 68, 79, 84, 83, 45, 50, 53, 56, 128, 68, 79, 84, 83, 45, 50, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, @@ -4286,263 +4324,854 @@ static unsigned char lexicon[] = { 71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65, 73, 206, 68, 79, 76, 80, 72, 73, 78, 128, 68, 79, 76, 76, 83, 128, 68, 79, 76, 76, 65, 210, 68, 79, 76, 73, 85, 77, 128, 68, 79, 75, 77, 65, 73, 128, 68, 79, 73, 84, - 128, 68, 79, 73, 128, 68, 79, 71, 128, 68, 79, 199, 68, 79, 69, 211, 68, - 79, 68, 69, 75, 65, 84, 65, 128, 68, 79, 67, 85, 77, 69, 78, 84, 128, 68, - 79, 67, 85, 77, 69, 78, 212, 68, 79, 66, 82, 79, 128, 68, 79, 65, 67, 72, - 65, 83, 72, 77, 69, 69, 128, 68, 79, 65, 67, 72, 65, 83, 72, 77, 69, 197, - 68, 79, 65, 128, 68, 79, 45, 79, 128, 68, 77, 128, 68, 205, 68, 76, 85, - 128, 68, 76, 79, 128, 68, 76, 73, 128, 68, 76, 72, 89, 65, 128, 68, 76, - 72, 65, 128, 68, 76, 69, 69, 128, 68, 76, 65, 128, 68, 76, 128, 68, 75, - 65, 82, 128, 68, 75, 65, 210, 68, 74, 69, 82, 86, 73, 128, 68, 74, 69, - 82, 86, 128, 68, 74, 69, 128, 68, 74, 65, 128, 68, 73, 90, 90, 217, 68, - 73, 86, 79, 82, 67, 197, 68, 73, 86, 73, 83, 73, 79, 78, 128, 68, 73, 86, - 73, 83, 73, 79, 206, 68, 73, 86, 73, 78, 65, 84, 73, 79, 78, 128, 68, 73, - 86, 73, 68, 69, 83, 128, 68, 73, 86, 73, 68, 69, 82, 83, 128, 68, 73, 86, - 73, 68, 69, 82, 128, 68, 73, 86, 73, 68, 69, 196, 68, 73, 86, 73, 68, 69, - 128, 68, 73, 86, 73, 68, 197, 68, 73, 86, 69, 82, 71, 69, 78, 67, 69, - 128, 68, 73, 84, 84, 207, 68, 73, 83, 84, 79, 82, 84, 73, 79, 78, 128, - 68, 73, 83, 84, 73, 78, 71, 85, 73, 83, 72, 128, 68, 73, 83, 84, 73, 76, - 76, 128, 68, 73, 83, 83, 79, 76, 86, 69, 45, 50, 128, 68, 73, 83, 83, 79, - 76, 86, 69, 128, 68, 73, 83, 80, 69, 82, 83, 73, 79, 78, 128, 68, 73, 83, - 75, 128, 68, 73, 83, 73, 77, 79, 85, 128, 68, 73, 83, 72, 128, 68, 73, - 83, 67, 79, 78, 84, 73, 78, 85, 79, 85, 211, 68, 73, 83, 195, 68, 73, 83, - 65, 80, 80, 79, 73, 78, 84, 69, 196, 68, 73, 83, 65, 66, 76, 69, 196, 68, - 73, 82, 71, 193, 68, 73, 82, 69, 67, 84, 76, 217, 68, 73, 82, 69, 67, 84, - 73, 79, 78, 65, 204, 68, 73, 82, 69, 67, 84, 73, 79, 206, 68, 73, 80, 84, - 69, 128, 68, 73, 80, 80, 69, 82, 128, 68, 73, 80, 76, 79, 85, 78, 128, - 68, 73, 80, 76, 73, 128, 68, 73, 80, 76, 201, 68, 73, 78, 71, 66, 65, - 212, 68, 73, 206, 68, 73, 77, 77, 73, 78, 71, 128, 68, 73, 77, 73, 78, - 85, 84, 73, 79, 78, 45, 51, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, - 45, 50, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 49, 128, 68, 73, - 77, 73, 78, 73, 83, 72, 77, 69, 78, 84, 128, 68, 73, 77, 73, 68, 73, 193, - 68, 73, 77, 69, 78, 83, 73, 79, 78, 65, 204, 68, 73, 77, 69, 78, 83, 73, - 79, 206, 68, 73, 77, 50, 128, 68, 73, 77, 178, 68, 73, 76, 128, 68, 73, - 71, 82, 65, 80, 72, 128, 68, 73, 71, 82, 65, 80, 200, 68, 73, 71, 82, 65, - 77, 77, 79, 211, 68, 73, 71, 82, 65, 77, 77, 193, 68, 73, 71, 82, 65, - 205, 68, 73, 71, 79, 82, 71, 79, 78, 128, 68, 73, 71, 79, 82, 71, 79, - 206, 68, 73, 71, 73, 84, 83, 128, 68, 73, 71, 65, 77, 77, 65, 128, 68, - 73, 71, 193, 68, 73, 70, 84, 79, 71, 71, 79, 211, 68, 73, 70, 79, 78, 73, - 65, 83, 128, 68, 73, 70, 70, 73, 67, 85, 76, 84, 217, 68, 73, 70, 70, 73, - 67, 85, 76, 84, 73, 69, 83, 128, 68, 73, 70, 70, 69, 82, 69, 78, 84, 73, - 65, 76, 128, 68, 73, 70, 70, 69, 82, 69, 78, 67, 197, 68, 73, 70, 65, 84, - 128, 68, 73, 69, 83, 73, 83, 128, 68, 73, 69, 83, 73, 211, 68, 73, 69, - 83, 69, 204, 68, 73, 69, 80, 128, 68, 73, 197, 68, 73, 66, 128, 68, 73, - 65, 84, 79, 78, 79, 206, 68, 73, 65, 84, 79, 78, 73, 75, 201, 68, 73, 65, - 83, 84, 79, 76, 201, 68, 73, 65, 77, 79, 78, 68, 83, 128, 68, 73, 65, 77, - 79, 78, 68, 128, 68, 73, 65, 77, 79, 78, 196, 68, 73, 65, 77, 69, 84, 69, - 210, 68, 73, 65, 76, 89, 84, 73, 75, 65, 128, 68, 73, 65, 76, 89, 84, 73, - 75, 193, 68, 73, 65, 76, 69, 67, 84, 45, 208, 68, 73, 65, 71, 79, 78, 65, - 76, 128, 68, 73, 65, 69, 82, 69, 83, 73, 90, 69, 196, 68, 73, 65, 69, 82, - 69, 83, 73, 83, 45, 82, 73, 78, 71, 128, 68, 73, 65, 69, 82, 69, 83, 73, - 83, 128, 68, 73, 65, 69, 82, 69, 83, 73, 211, 68, 72, 79, 85, 128, 68, - 72, 79, 79, 128, 68, 72, 79, 128, 68, 72, 73, 73, 128, 68, 72, 73, 128, - 68, 72, 72, 85, 128, 68, 72, 72, 79, 79, 128, 68, 72, 72, 79, 128, 68, - 72, 72, 73, 128, 68, 72, 72, 69, 69, 128, 68, 72, 72, 69, 128, 68, 72, - 72, 65, 128, 68, 72, 69, 69, 128, 68, 72, 65, 82, 77, 65, 128, 68, 72, - 65, 77, 69, 68, 72, 128, 68, 72, 65, 76, 69, 84, 72, 128, 68, 72, 65, 76, - 65, 84, 72, 128, 68, 72, 65, 76, 128, 68, 72, 65, 68, 72, 69, 128, 68, - 72, 65, 65, 76, 85, 128, 68, 72, 65, 65, 128, 68, 72, 65, 128, 68, 69, - 90, 200, 68, 69, 89, 84, 69, 82, 79, 213, 68, 69, 89, 84, 69, 82, 79, - 211, 68, 69, 88, 73, 65, 128, 68, 69, 86, 73, 67, 197, 68, 69, 86, 69, - 76, 79, 80, 77, 69, 78, 84, 128, 68, 69, 85, 78, 71, 128, 68, 69, 83, 75, - 84, 79, 208, 68, 69, 83, 203, 68, 69, 83, 73, 71, 78, 128, 68, 69, 83, - 73, 128, 68, 69, 83, 69, 82, 84, 128, 68, 69, 83, 69, 82, 212, 68, 69, - 83, 69, 82, 69, 212, 68, 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 68, 69, - 83, 67, 69, 78, 68, 73, 78, 199, 68, 69, 83, 67, 69, 78, 68, 69, 82, 128, - 68, 69, 82, 69, 84, 45, 72, 73, 68, 69, 84, 128, 68, 69, 82, 69, 84, 128, - 68, 69, 82, 69, 76, 73, 67, 212, 68, 69, 80, 84, 72, 128, 68, 69, 80, 65, - 82, 84, 85, 82, 69, 128, 68, 69, 80, 65, 82, 84, 77, 69, 78, 212, 68, 69, - 80, 65, 82, 84, 73, 78, 199, 68, 69, 78, 84, 73, 83, 84, 82, 217, 68, 69, - 78, 84, 65, 204, 68, 69, 78, 79, 77, 73, 78, 65, 84, 79, 82, 128, 68, 69, - 78, 79, 77, 73, 78, 65, 84, 79, 210, 68, 69, 78, 78, 69, 78, 128, 68, 69, - 78, 71, 128, 68, 69, 78, 197, 68, 69, 78, 65, 82, 73, 85, 211, 68, 69, - 76, 84, 65, 128, 68, 69, 76, 84, 193, 68, 69, 76, 84, 128, 68, 69, 76, - 80, 72, 73, 195, 68, 69, 76, 73, 86, 69, 82, 217, 68, 69, 76, 73, 86, 69, - 82, 65, 78, 67, 69, 128, 68, 69, 76, 73, 77, 73, 84, 69, 82, 128, 68, 69, - 76, 73, 77, 73, 84, 69, 210, 68, 69, 76, 73, 67, 73, 79, 85, 211, 68, 69, - 76, 69, 84, 69, 128, 68, 69, 76, 69, 84, 197, 68, 69, 75, 65, 128, 68, - 69, 75, 128, 68, 69, 73, 128, 68, 69, 72, 73, 128, 68, 69, 71, 82, 69, - 69, 83, 128, 68, 69, 71, 82, 69, 197, 68, 69, 70, 73, 78, 73, 84, 73, 79, - 78, 128, 68, 69, 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, - 82, 128, 68, 69, 69, 80, 76, 89, 128, 68, 69, 69, 76, 128, 68, 69, 67, - 82, 69, 83, 67, 69, 78, 68, 79, 128, 68, 69, 67, 82, 69, 65, 83, 69, 128, - 68, 69, 67, 82, 69, 65, 83, 197, 68, 69, 67, 79, 82, 65, 84, 73, 86, 197, - 68, 69, 67, 79, 82, 65, 84, 73, 79, 78, 128, 68, 69, 67, 73, 83, 73, 86, - 69, 78, 69, 83, 83, 128, 68, 69, 67, 73, 77, 65, 204, 68, 69, 67, 73, 68, - 85, 79, 85, 211, 68, 69, 67, 69, 77, 66, 69, 82, 128, 68, 69, 67, 65, 89, - 69, 68, 128, 68, 69, 66, 73, 212, 68, 69, 65, 84, 72, 128, 68, 69, 65, - 68, 128, 68, 68, 87, 65, 128, 68, 68, 85, 88, 128, 68, 68, 85, 84, 128, - 68, 68, 85, 82, 88, 128, 68, 68, 85, 82, 128, 68, 68, 85, 80, 128, 68, - 68, 85, 79, 88, 128, 68, 68, 85, 79, 80, 128, 68, 68, 85, 79, 128, 68, - 68, 85, 128, 68, 68, 79, 88, 128, 68, 68, 79, 84, 128, 68, 68, 79, 80, - 128, 68, 68, 79, 65, 128, 68, 68, 73, 88, 128, 68, 68, 73, 84, 128, 68, - 68, 73, 80, 128, 68, 68, 73, 69, 88, 128, 68, 68, 73, 69, 80, 128, 68, - 68, 73, 69, 128, 68, 68, 73, 128, 68, 68, 72, 85, 128, 68, 68, 72, 79, - 128, 68, 68, 72, 73, 128, 68, 68, 72, 69, 69, 128, 68, 68, 72, 69, 128, - 68, 68, 72, 65, 65, 128, 68, 68, 72, 65, 128, 68, 68, 69, 88, 128, 68, - 68, 69, 80, 128, 68, 68, 69, 69, 128, 68, 68, 69, 128, 68, 68, 68, 72, - 65, 128, 68, 68, 68, 65, 128, 68, 68, 65, 89, 65, 78, 78, 65, 128, 68, - 68, 65, 88, 128, 68, 68, 65, 84, 128, 68, 68, 65, 80, 128, 68, 68, 65, - 76, 128, 68, 68, 65, 204, 68, 68, 65, 72, 65, 76, 128, 68, 68, 65, 72, - 65, 204, 68, 68, 65, 65, 128, 68, 67, 83, 128, 68, 67, 72, 69, 128, 68, - 67, 52, 128, 68, 67, 51, 128, 68, 67, 50, 128, 68, 67, 49, 128, 68, 194, - 68, 65, 89, 45, 78, 73, 71, 72, 84, 128, 68, 65, 217, 68, 65, 87, 66, - 128, 68, 65, 86, 73, 89, 65, 78, 73, 128, 68, 65, 86, 73, 68, 128, 68, - 65, 84, 197, 68, 65, 83, 73, 65, 128, 68, 65, 83, 73, 193, 68, 65, 83, - 72, 69, 196, 68, 65, 83, 72, 128, 68, 65, 83, 200, 68, 65, 83, 69, 73, - 65, 128, 68, 65, 82, 84, 128, 68, 65, 82, 75, 69, 78, 73, 78, 71, 128, - 68, 65, 82, 75, 69, 78, 73, 78, 199, 68, 65, 82, 203, 68, 65, 82, 71, 65, - 128, 68, 65, 82, 65, 52, 128, 68, 65, 82, 65, 51, 128, 68, 65, 82, 128, - 68, 65, 80, 45, 80, 82, 65, 205, 68, 65, 80, 45, 80, 73, 201, 68, 65, 80, - 45, 77, 85, 79, 217, 68, 65, 80, 45, 66, 85, 79, 206, 68, 65, 80, 45, 66, - 69, 201, 68, 65, 208, 68, 65, 78, 84, 65, 74, 193, 68, 65, 78, 71, 79, - 128, 68, 65, 78, 71, 128, 68, 65, 78, 199, 68, 65, 78, 68, 65, 128, 68, - 65, 78, 67, 69, 82, 128, 68, 65, 77, 80, 128, 68, 65, 77, 208, 68, 65, - 77, 77, 65, 84, 65, 78, 128, 68, 65, 77, 77, 65, 84, 65, 206, 68, 65, 77, - 77, 65, 128, 68, 65, 77, 77, 193, 68, 65, 77, 65, 82, 85, 128, 68, 65, - 76, 69, 84, 72, 45, 82, 69, 83, 72, 128, 68, 65, 76, 69, 84, 72, 128, 68, - 65, 76, 69, 84, 128, 68, 65, 76, 69, 212, 68, 65, 76, 68, 65, 128, 68, - 65, 76, 65, 84, 72, 128, 68, 65, 76, 65, 84, 200, 68, 65, 76, 65, 84, - 128, 68, 65, 73, 82, 128, 68, 65, 73, 78, 71, 128, 68, 65, 73, 128, 68, - 65, 72, 89, 65, 65, 85, 83, 72, 45, 50, 128, 68, 65, 72, 89, 65, 65, 85, - 83, 72, 128, 68, 65, 71, 83, 128, 68, 65, 71, 71, 69, 82, 128, 68, 65, - 71, 71, 69, 210, 68, 65, 71, 69, 83, 72, 128, 68, 65, 71, 69, 83, 200, - 68, 65, 71, 66, 65, 83, 73, 78, 78, 65, 128, 68, 65, 71, 65, 218, 68, 65, - 71, 65, 76, 71, 65, 128, 68, 65, 71, 51, 128, 68, 65, 199, 68, 65, 69, - 78, 71, 128, 68, 65, 69, 199, 68, 65, 68, 128, 68, 65, 196, 68, 65, 65, - 83, 85, 128, 68, 65, 65, 68, 72, 85, 128, 68, 48, 54, 55, 72, 128, 68, - 48, 54, 55, 71, 128, 68, 48, 54, 55, 70, 128, 68, 48, 54, 55, 69, 128, - 68, 48, 54, 55, 68, 128, 68, 48, 54, 55, 67, 128, 68, 48, 54, 55, 66, - 128, 68, 48, 54, 55, 65, 128, 68, 48, 54, 55, 128, 68, 48, 54, 54, 128, - 68, 48, 54, 53, 128, 68, 48, 54, 52, 128, 68, 48, 54, 51, 128, 68, 48, - 54, 50, 128, 68, 48, 54, 49, 128, 68, 48, 54, 48, 128, 68, 48, 53, 57, - 128, 68, 48, 53, 56, 128, 68, 48, 53, 55, 128, 68, 48, 53, 54, 128, 68, - 48, 53, 53, 128, 68, 48, 53, 52, 65, 128, 68, 48, 53, 52, 128, 68, 48, - 53, 51, 128, 68, 48, 53, 50, 65, 128, 68, 48, 53, 50, 128, 68, 48, 53, - 49, 128, 68, 48, 53, 48, 73, 128, 68, 48, 53, 48, 72, 128, 68, 48, 53, - 48, 71, 128, 68, 48, 53, 48, 70, 128, 68, 48, 53, 48, 69, 128, 68, 48, - 53, 48, 68, 128, 68, 48, 53, 48, 67, 128, 68, 48, 53, 48, 66, 128, 68, - 48, 53, 48, 65, 128, 68, 48, 53, 48, 128, 68, 48, 52, 57, 128, 68, 48, - 52, 56, 65, 128, 68, 48, 52, 56, 128, 68, 48, 52, 55, 128, 68, 48, 52, - 54, 65, 128, 68, 48, 52, 54, 128, 68, 48, 52, 53, 128, 68, 48, 52, 52, - 128, 68, 48, 52, 51, 128, 68, 48, 52, 50, 128, 68, 48, 52, 49, 128, 68, - 48, 52, 48, 128, 68, 48, 51, 57, 128, 68, 48, 51, 56, 128, 68, 48, 51, - 55, 128, 68, 48, 51, 54, 128, 68, 48, 51, 53, 128, 68, 48, 51, 52, 65, - 128, 68, 48, 51, 52, 128, 68, 48, 51, 51, 128, 68, 48, 51, 50, 128, 68, - 48, 51, 49, 65, 128, 68, 48, 51, 49, 128, 68, 48, 51, 48, 128, 68, 48, - 50, 57, 128, 68, 48, 50, 56, 128, 68, 48, 50, 55, 65, 128, 68, 48, 50, - 55, 128, 68, 48, 50, 54, 128, 68, 48, 50, 53, 128, 68, 48, 50, 52, 128, - 68, 48, 50, 51, 128, 68, 48, 50, 50, 128, 68, 48, 50, 49, 128, 68, 48, - 50, 48, 128, 68, 48, 49, 57, 128, 68, 48, 49, 56, 128, 68, 48, 49, 55, - 128, 68, 48, 49, 54, 128, 68, 48, 49, 53, 128, 68, 48, 49, 52, 128, 68, - 48, 49, 51, 128, 68, 48, 49, 50, 128, 68, 48, 49, 49, 128, 68, 48, 49, - 48, 128, 68, 48, 48, 57, 128, 68, 48, 48, 56, 65, 128, 68, 48, 48, 56, - 128, 68, 48, 48, 55, 128, 68, 48, 48, 54, 128, 68, 48, 48, 53, 128, 68, - 48, 48, 52, 128, 68, 48, 48, 51, 128, 68, 48, 48, 50, 128, 68, 48, 48, - 49, 128, 67, 89, 88, 128, 67, 89, 84, 128, 67, 89, 82, 88, 128, 67, 89, - 82, 69, 78, 65, 73, 195, 67, 89, 82, 128, 67, 89, 80, 82, 73, 79, 212, - 67, 89, 80, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, - 82, 73, 67, 73, 84, 89, 128, 67, 89, 67, 76, 79, 78, 69, 128, 67, 89, 65, - 89, 128, 67, 89, 65, 87, 128, 67, 89, 65, 128, 67, 87, 79, 79, 128, 67, - 87, 79, 128, 67, 87, 73, 73, 128, 67, 87, 73, 128, 67, 87, 69, 79, 82, - 84, 72, 128, 67, 87, 69, 128, 67, 87, 65, 65, 128, 67, 85, 88, 128, 67, - 85, 85, 128, 67, 85, 212, 67, 85, 83, 84, 79, 77, 83, 128, 67, 85, 83, - 84, 79, 77, 69, 210, 67, 85, 83, 84, 65, 82, 68, 128, 67, 85, 83, 80, - 128, 67, 85, 82, 88, 128, 67, 85, 82, 86, 73, 78, 199, 67, 85, 82, 86, - 69, 68, 128, 67, 85, 82, 86, 69, 196, 67, 85, 82, 86, 69, 128, 67, 85, - 82, 86, 197, 67, 85, 82, 82, 217, 67, 85, 82, 82, 69, 78, 84, 128, 67, - 85, 82, 82, 69, 78, 212, 67, 85, 82, 76, 217, 67, 85, 82, 76, 128, 67, - 85, 82, 128, 67, 85, 80, 80, 69, 68, 128, 67, 85, 80, 80, 69, 196, 67, - 85, 79, 88, 128, 67, 85, 79, 80, 128, 67, 85, 79, 128, 67, 85, 205, 67, - 85, 66, 69, 68, 128, 67, 85, 66, 197, 67, 85, 65, 84, 82, 73, 76, 76, 79, - 128, 67, 85, 65, 84, 82, 73, 76, 76, 207, 67, 85, 65, 205, 67, 85, 128, - 67, 83, 73, 128, 67, 82, 89, 83, 84, 65, 204, 67, 82, 89, 80, 84, 79, 71, - 82, 65, 77, 77, 73, 195, 67, 82, 89, 73, 78, 199, 67, 82, 85, 90, 69, 73, - 82, 207, 67, 82, 85, 67, 73, 70, 79, 82, 205, 67, 82, 85, 67, 73, 66, 76, - 69, 45, 53, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 52, 128, 67, 82, 85, - 67, 73, 66, 76, 69, 45, 51, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 50, - 128, 67, 82, 85, 67, 73, 66, 76, 69, 128, 67, 82, 79, 87, 78, 128, 67, - 82, 79, 83, 83, 73, 78, 71, 128, 67, 82, 79, 83, 83, 73, 78, 199, 67, 82, - 79, 83, 83, 72, 65, 84, 67, 200, 67, 82, 79, 83, 83, 69, 68, 45, 84, 65, - 73, 76, 128, 67, 82, 79, 83, 83, 69, 68, 128, 67, 82, 79, 83, 83, 69, - 196, 67, 82, 79, 83, 83, 66, 79, 78, 69, 83, 128, 67, 82, 79, 83, 83, - 128, 67, 82, 79, 83, 211, 67, 82, 79, 80, 128, 67, 82, 79, 73, 88, 128, - 67, 82, 79, 67, 85, 211, 67, 82, 79, 67, 79, 68, 73, 76, 69, 128, 67, 82, - 73, 67, 75, 69, 212, 67, 82, 69, 83, 67, 69, 78, 84, 83, 128, 67, 82, 69, - 83, 67, 69, 78, 84, 128, 67, 82, 69, 83, 67, 69, 78, 212, 67, 82, 69, 68, - 73, 212, 67, 82, 69, 65, 84, 73, 86, 197, 67, 82, 69, 65, 77, 128, 67, - 82, 65, 89, 79, 78, 128, 67, 82, 65, 67, 75, 69, 82, 128, 67, 82, 65, 66, - 128, 67, 82, 128, 67, 79, 88, 128, 67, 79, 87, 128, 67, 79, 215, 67, 79, - 86, 69, 82, 128, 67, 79, 85, 80, 76, 197, 67, 79, 85, 78, 84, 73, 78, - 199, 67, 79, 85, 78, 84, 69, 82, 83, 73, 78, 75, 128, 67, 79, 85, 78, 84, - 69, 82, 66, 79, 82, 69, 128, 67, 79, 85, 78, 67, 73, 204, 67, 79, 85, 67, - 200, 67, 79, 84, 128, 67, 79, 82, 82, 69, 83, 80, 79, 78, 68, 211, 67, - 79, 82, 82, 69, 67, 84, 128, 67, 79, 82, 80, 83, 69, 128, 67, 79, 82, 80, - 79, 82, 65, 84, 73, 79, 78, 128, 67, 79, 82, 79, 78, 73, 83, 128, 67, 79, - 82, 78, 69, 82, 83, 128, 67, 79, 82, 78, 69, 82, 128, 67, 79, 82, 78, 69, - 210, 67, 79, 82, 75, 128, 67, 79, 80, 89, 82, 73, 71, 72, 84, 128, 67, - 79, 80, 89, 82, 73, 71, 72, 212, 67, 79, 80, 89, 128, 67, 79, 80, 82, 79, - 68, 85, 67, 84, 128, 67, 79, 80, 80, 69, 82, 45, 50, 128, 67, 79, 80, 80, - 69, 82, 128, 67, 79, 80, 128, 67, 79, 79, 76, 128, 67, 79, 79, 75, 73, - 78, 71, 128, 67, 79, 79, 75, 73, 69, 128, 67, 79, 79, 75, 69, 196, 67, - 79, 79, 128, 67, 79, 78, 86, 69, 82, 71, 73, 78, 199, 67, 79, 78, 86, 69, - 78, 73, 69, 78, 67, 197, 67, 79, 78, 84, 82, 79, 76, 128, 67, 79, 78, 84, - 82, 79, 204, 67, 79, 78, 84, 82, 65, 82, 73, 69, 84, 89, 128, 67, 79, 78, - 84, 82, 65, 67, 84, 73, 79, 78, 128, 67, 79, 78, 84, 79, 85, 82, 69, 196, - 67, 79, 78, 84, 79, 85, 210, 67, 79, 78, 84, 73, 78, 85, 73, 78, 199, 67, - 79, 78, 84, 73, 78, 85, 65, 84, 73, 79, 206, 67, 79, 78, 84, 69, 78, 84, - 73, 79, 78, 128, 67, 79, 78, 84, 69, 77, 80, 76, 65, 84, 73, 79, 78, 128, - 67, 79, 78, 84, 65, 73, 78, 211, 67, 79, 78, 84, 65, 73, 78, 73, 78, 199, - 67, 79, 78, 84, 65, 73, 206, 67, 79, 78, 84, 65, 67, 84, 128, 67, 79, 78, - 83, 84, 82, 85, 67, 84, 73, 79, 78, 128, 67, 79, 78, 83, 84, 82, 85, 67, - 84, 73, 79, 206, 67, 79, 78, 83, 84, 65, 78, 84, 128, 67, 79, 78, 83, 84, - 65, 78, 212, 67, 79, 78, 83, 84, 65, 78, 67, 89, 128, 67, 79, 78, 83, 69, - 67, 85, 84, 73, 86, 197, 67, 79, 78, 74, 85, 78, 67, 84, 73, 79, 78, 128, - 67, 79, 78, 74, 85, 71, 65, 84, 197, 67, 79, 78, 74, 79, 73, 78, 73, 78, - 199, 67, 79, 78, 74, 79, 73, 78, 69, 68, 128, 67, 79, 78, 74, 79, 73, 78, - 69, 196, 67, 79, 78, 73, 67, 65, 204, 67, 79, 78, 71, 82, 85, 69, 78, - 212, 67, 79, 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 128, 67, 79, - 78, 70, 85, 83, 69, 196, 67, 79, 78, 70, 79, 85, 78, 68, 69, 196, 67, 79, - 78, 70, 76, 73, 67, 84, 128, 67, 79, 78, 70, 69, 84, 84, 201, 67, 79, 78, - 67, 65, 86, 69, 45, 83, 73, 68, 69, 196, 67, 79, 78, 67, 65, 86, 69, 45, - 80, 79, 73, 78, 84, 69, 196, 67, 79, 77, 80, 85, 84, 69, 82, 83, 128, 67, - 79, 77, 80, 85, 84, 69, 82, 128, 67, 79, 77, 80, 82, 69, 83, 83, 73, 79, - 78, 128, 67, 79, 77, 80, 82, 69, 83, 83, 69, 196, 67, 79, 77, 80, 79, 83, - 73, 84, 73, 79, 78, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 206, 67, - 79, 77, 80, 76, 73, 65, 78, 67, 69, 128, 67, 79, 77, 80, 76, 69, 84, 73, - 79, 78, 128, 67, 79, 77, 80, 76, 69, 84, 69, 68, 128, 67, 79, 77, 80, 76, - 69, 77, 69, 78, 84, 128, 67, 79, 77, 80, 65, 82, 69, 128, 67, 79, 77, 77, - 79, 206, 67, 79, 77, 77, 69, 82, 67, 73, 65, 204, 67, 79, 77, 77, 65, 78, - 68, 128, 67, 79, 77, 77, 65, 128, 67, 79, 77, 77, 193, 67, 79, 77, 69, - 84, 128, 67, 79, 77, 66, 73, 78, 69, 68, 128, 67, 79, 77, 66, 73, 78, 65, - 84, 73, 79, 78, 128, 67, 79, 77, 66, 128, 67, 79, 76, 85, 77, 78, 128, - 67, 79, 76, 79, 82, 128, 67, 79, 76, 76, 73, 83, 73, 79, 206, 67, 79, 76, - 76, 128, 67, 79, 76, 196, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, 78, - 71, 128, 67, 79, 69, 78, 199, 67, 79, 68, 65, 128, 67, 79, 67, 75, 84, - 65, 73, 204, 67, 79, 65, 83, 84, 69, 82, 128, 67, 79, 65, 128, 67, 77, - 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 83, 128, 67, - 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, - 194, 67, 76, 79, 86, 69, 82, 128, 67, 76, 79, 85, 68, 128, 67, 76, 79, - 85, 196, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, 79, 84, 72, 128, 67, - 76, 79, 83, 69, 84, 128, 67, 76, 79, 83, 69, 78, 69, 83, 83, 128, 67, 76, - 79, 83, 69, 68, 128, 67, 76, 79, 83, 197, 67, 76, 79, 67, 75, 87, 73, 83, - 197, 67, 76, 79, 67, 203, 67, 76, 73, 86, 73, 83, 128, 67, 76, 73, 80, - 66, 79, 65, 82, 68, 128, 67, 76, 73, 78, 75, 73, 78, 199, 67, 76, 73, 78, - 71, 73, 78, 199, 67, 76, 73, 77, 65, 67, 85, 83, 128, 67, 76, 73, 70, 70, - 128, 67, 76, 73, 67, 75, 128, 67, 76, 69, 70, 45, 50, 128, 67, 76, 69, - 70, 45, 49, 128, 67, 76, 69, 70, 128, 67, 76, 69, 198, 67, 76, 69, 65, - 86, 69, 82, 128, 67, 76, 69, 65, 210, 67, 76, 65, 83, 83, 73, 67, 65, - 204, 67, 76, 65, 80, 80, 73, 78, 199, 67, 76, 65, 80, 80, 69, 210, 67, - 76, 65, 78, 128, 67, 76, 65, 206, 67, 76, 65, 77, 83, 72, 69, 76, 204, - 67, 76, 65, 73, 77, 128, 67, 76, 128, 67, 73, 88, 128, 67, 73, 86, 73, - 76, 73, 65, 78, 128, 67, 73, 84, 89, 83, 67, 65, 80, 69, 128, 67, 73, 84, - 89, 83, 67, 65, 80, 197, 67, 73, 84, 201, 67, 73, 84, 65, 84, 73, 79, - 206, 67, 73, 84, 128, 67, 73, 82, 67, 85, 211, 67, 73, 82, 67, 85, 77, - 70, 76, 69, 88, 128, 67, 73, 82, 67, 85, 77, 70, 76, 69, 216, 67, 73, 82, - 67, 85, 76, 65, 84, 73, 79, 206, 67, 73, 82, 67, 76, 73, 78, 71, 128, 67, - 73, 82, 67, 76, 73, 78, 199, 67, 73, 82, 67, 76, 69, 83, 128, 67, 73, 82, - 67, 76, 69, 211, 67, 73, 82, 67, 76, 69, 68, 128, 67, 73, 80, 128, 67, - 73, 78, 78, 65, 66, 65, 82, 128, 67, 73, 78, 69, 77, 65, 128, 67, 73, + 128, 68, 79, 73, 78, 199, 68, 79, 73, 128, 68, 79, 71, 128, 68, 79, 199, + 68, 79, 69, 211, 68, 79, 68, 69, 75, 65, 84, 65, 128, 68, 79, 67, 85, 77, + 69, 78, 84, 128, 68, 79, 67, 85, 77, 69, 78, 212, 68, 79, 66, 82, 79, + 128, 68, 79, 65, 67, 72, 65, 83, 72, 77, 69, 69, 128, 68, 79, 65, 67, 72, + 65, 83, 72, 77, 69, 197, 68, 79, 65, 128, 68, 79, 45, 79, 128, 68, 77, + 128, 68, 205, 68, 76, 85, 128, 68, 76, 79, 128, 68, 76, 73, 128, 68, 76, + 72, 89, 65, 128, 68, 76, 72, 65, 128, 68, 76, 69, 69, 128, 68, 76, 65, + 128, 68, 76, 128, 68, 75, 65, 82, 128, 68, 75, 65, 210, 68, 74, 69, 82, + 86, 73, 128, 68, 74, 69, 82, 86, 128, 68, 74, 69, 128, 68, 74, 65, 128, + 68, 73, 90, 90, 217, 68, 73, 86, 79, 82, 67, 197, 68, 73, 86, 73, 83, 73, + 79, 78, 128, 68, 73, 86, 73, 83, 73, 79, 206, 68, 73, 86, 73, 78, 65, 84, + 73, 79, 78, 128, 68, 73, 86, 73, 68, 69, 83, 128, 68, 73, 86, 73, 68, 69, + 82, 83, 128, 68, 73, 86, 73, 68, 69, 82, 128, 68, 73, 86, 73, 68, 69, + 196, 68, 73, 86, 73, 68, 69, 128, 68, 73, 86, 73, 68, 197, 68, 73, 86, + 69, 82, 71, 69, 78, 67, 69, 128, 68, 73, 84, 84, 207, 68, 73, 83, 84, 79, + 82, 84, 73, 79, 78, 128, 68, 73, 83, 84, 73, 78, 71, 85, 73, 83, 72, 128, + 68, 73, 83, 84, 73, 76, 76, 128, 68, 73, 83, 83, 79, 76, 86, 69, 45, 50, + 128, 68, 73, 83, 83, 79, 76, 86, 69, 128, 68, 73, 83, 80, 85, 84, 69, + 196, 68, 73, 83, 80, 69, 82, 83, 73, 79, 78, 128, 68, 73, 83, 75, 128, + 68, 73, 83, 73, 77, 79, 85, 128, 68, 73, 83, 72, 128, 68, 73, 83, 67, 79, + 78, 84, 73, 78, 85, 79, 85, 211, 68, 73, 83, 195, 68, 73, 83, 65, 80, 80, + 79, 73, 78, 84, 69, 196, 68, 73, 83, 65, 66, 76, 69, 196, 68, 73, 82, 71, + 193, 68, 73, 82, 69, 67, 84, 76, 217, 68, 73, 82, 69, 67, 84, 73, 79, 78, + 65, 204, 68, 73, 82, 69, 67, 84, 73, 79, 206, 68, 73, 80, 84, 69, 128, + 68, 73, 80, 80, 69, 82, 128, 68, 73, 80, 76, 79, 85, 78, 128, 68, 73, 80, + 76, 73, 128, 68, 73, 80, 76, 201, 68, 73, 78, 71, 66, 65, 212, 68, 73, + 206, 68, 73, 77, 77, 73, 78, 71, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, + 78, 45, 51, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 50, 128, 68, + 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 49, 128, 68, 73, 77, 73, 78, 73, + 83, 72, 77, 69, 78, 84, 128, 68, 73, 77, 73, 68, 73, 193, 68, 73, 77, 69, + 78, 83, 73, 79, 78, 65, 204, 68, 73, 77, 69, 78, 83, 73, 79, 206, 68, 73, + 77, 50, 128, 68, 73, 77, 178, 68, 73, 76, 128, 68, 73, 71, 82, 65, 80, + 72, 128, 68, 73, 71, 82, 65, 80, 200, 68, 73, 71, 82, 65, 77, 77, 79, + 211, 68, 73, 71, 82, 65, 77, 77, 193, 68, 73, 71, 82, 65, 205, 68, 73, + 71, 79, 82, 71, 79, 78, 128, 68, 73, 71, 79, 82, 71, 79, 206, 68, 73, 71, + 73, 84, 83, 128, 68, 73, 71, 65, 77, 77, 65, 128, 68, 73, 71, 193, 68, + 73, 70, 84, 79, 71, 71, 79, 211, 68, 73, 70, 79, 78, 73, 65, 83, 128, 68, + 73, 70, 70, 73, 67, 85, 76, 84, 217, 68, 73, 70, 70, 73, 67, 85, 76, 84, + 73, 69, 83, 128, 68, 73, 70, 70, 69, 82, 69, 78, 84, 73, 65, 76, 128, 68, + 73, 70, 70, 69, 82, 69, 78, 67, 197, 68, 73, 70, 65, 84, 128, 68, 73, 69, + 83, 73, 83, 128, 68, 73, 69, 83, 73, 211, 68, 73, 69, 83, 69, 204, 68, + 73, 69, 80, 128, 68, 73, 197, 68, 73, 66, 128, 68, 73, 65, 84, 79, 78, + 79, 206, 68, 73, 65, 84, 79, 78, 73, 75, 201, 68, 73, 65, 83, 84, 79, 76, + 201, 68, 73, 65, 77, 79, 78, 68, 83, 128, 68, 73, 65, 77, 79, 78, 68, + 128, 68, 73, 65, 77, 79, 78, 196, 68, 73, 65, 77, 69, 84, 69, 210, 68, + 73, 65, 76, 89, 84, 73, 75, 65, 128, 68, 73, 65, 76, 89, 84, 73, 75, 193, + 68, 73, 65, 76, 69, 67, 84, 45, 208, 68, 73, 65, 71, 79, 78, 65, 76, 128, + 68, 73, 65, 69, 82, 69, 83, 73, 90, 69, 196, 68, 73, 65, 69, 82, 69, 83, + 73, 83, 45, 82, 73, 78, 71, 128, 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, + 68, 73, 65, 69, 82, 69, 83, 73, 211, 68, 72, 79, 85, 128, 68, 72, 79, 79, + 128, 68, 72, 79, 128, 68, 72, 73, 73, 128, 68, 72, 72, 85, 128, 68, 72, + 72, 79, 79, 128, 68, 72, 72, 79, 128, 68, 72, 72, 73, 128, 68, 72, 72, + 69, 69, 128, 68, 72, 72, 69, 128, 68, 72, 72, 65, 128, 68, 72, 69, 69, + 128, 68, 72, 65, 82, 77, 65, 128, 68, 72, 65, 77, 69, 68, 72, 128, 68, + 72, 65, 76, 69, 84, 72, 128, 68, 72, 65, 76, 65, 84, 72, 128, 68, 72, 65, + 76, 128, 68, 72, 65, 68, 72, 69, 128, 68, 72, 65, 65, 76, 85, 128, 68, + 72, 65, 65, 128, 68, 72, 65, 128, 68, 69, 90, 200, 68, 69, 89, 84, 69, + 82, 79, 213, 68, 69, 89, 84, 69, 82, 79, 211, 68, 69, 88, 73, 65, 128, + 68, 69, 86, 73, 67, 197, 68, 69, 86, 69, 76, 79, 80, 77, 69, 78, 84, 128, + 68, 69, 85, 78, 71, 128, 68, 69, 83, 75, 84, 79, 208, 68, 69, 83, 203, + 68, 69, 83, 73, 71, 78, 128, 68, 69, 83, 73, 128, 68, 69, 83, 69, 82, 84, + 128, 68, 69, 83, 69, 82, 212, 68, 69, 83, 69, 82, 69, 212, 68, 69, 83, + 67, 82, 73, 80, 84, 73, 79, 206, 68, 69, 83, 67, 69, 78, 68, 73, 78, 199, + 68, 69, 83, 67, 69, 78, 68, 69, 82, 128, 68, 69, 82, 69, 84, 45, 72, 73, + 68, 69, 84, 128, 68, 69, 82, 69, 84, 128, 68, 69, 82, 69, 76, 73, 67, + 212, 68, 69, 80, 84, 72, 128, 68, 69, 80, 65, 82, 84, 85, 82, 69, 128, + 68, 69, 80, 65, 82, 84, 77, 69, 78, 212, 68, 69, 80, 65, 82, 84, 73, 78, + 199, 68, 69, 78, 84, 73, 83, 84, 82, 217, 68, 69, 78, 84, 65, 204, 68, + 69, 78, 79, 77, 73, 78, 65, 84, 79, 82, 128, 68, 69, 78, 79, 77, 73, 78, + 65, 84, 79, 210, 68, 69, 78, 78, 69, 78, 128, 68, 69, 78, 71, 128, 68, + 69, 78, 197, 68, 69, 78, 65, 82, 73, 85, 211, 68, 69, 76, 84, 65, 128, + 68, 69, 76, 84, 193, 68, 69, 76, 84, 128, 68, 69, 76, 80, 72, 73, 195, + 68, 69, 76, 73, 86, 69, 82, 217, 68, 69, 76, 73, 86, 69, 82, 65, 78, 67, + 69, 128, 68, 69, 76, 73, 77, 73, 84, 69, 82, 128, 68, 69, 76, 73, 77, 73, + 84, 69, 210, 68, 69, 76, 73, 67, 73, 79, 85, 211, 68, 69, 76, 69, 84, 73, + 79, 206, 68, 69, 76, 69, 84, 69, 128, 68, 69, 76, 69, 84, 197, 68, 69, + 75, 65, 128, 68, 69, 75, 128, 68, 69, 73, 128, 68, 69, 72, 73, 128, 68, + 69, 71, 82, 69, 69, 83, 128, 68, 69, 71, 82, 69, 197, 68, 69, 70, 73, 78, + 73, 84, 73, 79, 78, 128, 68, 69, 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, + 211, 68, 69, 69, 82, 128, 68, 69, 69, 80, 76, 89, 128, 68, 69, 69, 76, + 128, 68, 69, 67, 82, 69, 83, 67, 69, 78, 68, 79, 128, 68, 69, 67, 82, 69, + 65, 83, 69, 128, 68, 69, 67, 82, 69, 65, 83, 197, 68, 69, 67, 79, 82, 65, + 84, 73, 86, 197, 68, 69, 67, 79, 82, 65, 84, 73, 79, 78, 128, 68, 69, 67, + 73, 83, 73, 86, 69, 78, 69, 83, 83, 128, 68, 69, 67, 73, 77, 65, 204, 68, + 69, 67, 73, 68, 85, 79, 85, 211, 68, 69, 67, 69, 77, 66, 69, 82, 128, 68, + 69, 67, 65, 89, 69, 68, 128, 68, 69, 66, 73, 212, 68, 69, 65, 84, 72, + 128, 68, 69, 65, 68, 128, 68, 68, 87, 65, 128, 68, 68, 85, 88, 128, 68, + 68, 85, 84, 128, 68, 68, 85, 82, 88, 128, 68, 68, 85, 82, 128, 68, 68, + 85, 80, 128, 68, 68, 85, 79, 88, 128, 68, 68, 85, 79, 80, 128, 68, 68, + 85, 79, 128, 68, 68, 85, 128, 68, 68, 79, 88, 128, 68, 68, 79, 84, 128, + 68, 68, 79, 80, 128, 68, 68, 79, 65, 128, 68, 68, 73, 88, 128, 68, 68, + 73, 84, 128, 68, 68, 73, 80, 128, 68, 68, 73, 69, 88, 128, 68, 68, 73, + 69, 80, 128, 68, 68, 73, 69, 128, 68, 68, 73, 128, 68, 68, 72, 85, 128, + 68, 68, 72, 79, 128, 68, 68, 72, 69, 69, 128, 68, 68, 72, 69, 128, 68, + 68, 72, 65, 65, 128, 68, 68, 72, 65, 128, 68, 68, 69, 88, 128, 68, 68, + 69, 80, 128, 68, 68, 69, 69, 128, 68, 68, 69, 128, 68, 68, 68, 72, 65, + 128, 68, 68, 68, 65, 128, 68, 68, 65, 89, 65, 78, 78, 65, 128, 68, 68, + 65, 88, 128, 68, 68, 65, 84, 128, 68, 68, 65, 80, 128, 68, 68, 65, 76, + 128, 68, 68, 65, 204, 68, 68, 65, 72, 65, 76, 128, 68, 68, 65, 72, 65, + 204, 68, 68, 65, 65, 128, 68, 67, 83, 128, 68, 67, 72, 69, 128, 68, 67, + 52, 128, 68, 67, 51, 128, 68, 67, 50, 128, 68, 67, 49, 128, 68, 194, 68, + 65, 89, 45, 78, 73, 71, 72, 84, 128, 68, 65, 217, 68, 65, 87, 66, 128, + 68, 65, 86, 73, 89, 65, 78, 73, 128, 68, 65, 86, 73, 68, 128, 68, 65, 84, + 197, 68, 65, 83, 73, 65, 128, 68, 65, 83, 73, 193, 68, 65, 83, 72, 69, + 196, 68, 65, 83, 72, 128, 68, 65, 83, 200, 68, 65, 83, 69, 73, 65, 128, + 68, 65, 82, 84, 128, 68, 65, 82, 75, 69, 78, 73, 78, 71, 128, 68, 65, 82, + 75, 69, 78, 73, 78, 199, 68, 65, 82, 203, 68, 65, 82, 71, 65, 128, 68, + 65, 82, 65, 52, 128, 68, 65, 82, 65, 51, 128, 68, 65, 82, 128, 68, 65, + 80, 45, 80, 82, 65, 205, 68, 65, 80, 45, 80, 73, 201, 68, 65, 80, 45, 77, + 85, 79, 217, 68, 65, 80, 45, 66, 85, 79, 206, 68, 65, 80, 45, 66, 69, + 201, 68, 65, 208, 68, 65, 78, 84, 65, 74, 193, 68, 65, 78, 71, 79, 128, + 68, 65, 78, 71, 128, 68, 65, 78, 199, 68, 65, 78, 68, 65, 128, 68, 65, + 78, 67, 73, 78, 71, 128, 68, 65, 78, 67, 69, 82, 128, 68, 65, 77, 80, + 128, 68, 65, 77, 208, 68, 65, 77, 77, 65, 84, 65, 78, 128, 68, 65, 77, + 77, 65, 84, 65, 206, 68, 65, 77, 77, 65, 128, 68, 65, 77, 77, 193, 68, + 65, 77, 65, 82, 85, 128, 68, 65, 76, 69, 84, 72, 45, 82, 69, 83, 72, 128, + 68, 65, 76, 69, 84, 72, 128, 68, 65, 76, 69, 84, 128, 68, 65, 76, 69, + 212, 68, 65, 76, 68, 65, 128, 68, 65, 76, 65, 84, 72, 128, 68, 65, 76, + 65, 84, 200, 68, 65, 76, 65, 84, 128, 68, 65, 73, 82, 128, 68, 65, 73, + 78, 71, 128, 68, 65, 73, 128, 68, 65, 72, 89, 65, 65, 85, 83, 72, 45, 50, + 128, 68, 65, 72, 89, 65, 65, 85, 83, 72, 128, 68, 65, 71, 83, 128, 68, + 65, 71, 71, 69, 82, 128, 68, 65, 71, 71, 69, 210, 68, 65, 71, 69, 83, 72, + 128, 68, 65, 71, 69, 83, 200, 68, 65, 71, 66, 65, 83, 73, 78, 78, 65, + 128, 68, 65, 71, 65, 218, 68, 65, 71, 65, 76, 71, 65, 128, 68, 65, 71, + 51, 128, 68, 65, 199, 68, 65, 69, 78, 71, 128, 68, 65, 69, 199, 68, 65, + 68, 128, 68, 65, 196, 68, 65, 65, 83, 85, 128, 68, 65, 65, 76, 73, 128, + 68, 65, 65, 68, 72, 85, 128, 68, 48, 54, 55, 72, 128, 68, 48, 54, 55, 71, + 128, 68, 48, 54, 55, 70, 128, 68, 48, 54, 55, 69, 128, 68, 48, 54, 55, + 68, 128, 68, 48, 54, 55, 67, 128, 68, 48, 54, 55, 66, 128, 68, 48, 54, + 55, 65, 128, 68, 48, 54, 55, 128, 68, 48, 54, 54, 128, 68, 48, 54, 53, + 128, 68, 48, 54, 52, 128, 68, 48, 54, 51, 128, 68, 48, 54, 50, 128, 68, + 48, 54, 49, 128, 68, 48, 54, 48, 128, 68, 48, 53, 57, 128, 68, 48, 53, + 56, 128, 68, 48, 53, 55, 128, 68, 48, 53, 54, 128, 68, 48, 53, 53, 128, + 68, 48, 53, 52, 65, 128, 68, 48, 53, 52, 128, 68, 48, 53, 51, 128, 68, + 48, 53, 50, 65, 128, 68, 48, 53, 50, 128, 68, 48, 53, 49, 128, 68, 48, + 53, 48, 73, 128, 68, 48, 53, 48, 72, 128, 68, 48, 53, 48, 71, 128, 68, + 48, 53, 48, 70, 128, 68, 48, 53, 48, 69, 128, 68, 48, 53, 48, 68, 128, + 68, 48, 53, 48, 67, 128, 68, 48, 53, 48, 66, 128, 68, 48, 53, 48, 65, + 128, 68, 48, 53, 48, 128, 68, 48, 52, 57, 128, 68, 48, 52, 56, 65, 128, + 68, 48, 52, 56, 128, 68, 48, 52, 55, 128, 68, 48, 52, 54, 65, 128, 68, + 48, 52, 54, 128, 68, 48, 52, 53, 128, 68, 48, 52, 52, 128, 68, 48, 52, + 51, 128, 68, 48, 52, 50, 128, 68, 48, 52, 49, 128, 68, 48, 52, 48, 128, + 68, 48, 51, 57, 128, 68, 48, 51, 56, 128, 68, 48, 51, 55, 128, 68, 48, + 51, 54, 128, 68, 48, 51, 53, 128, 68, 48, 51, 52, 65, 128, 68, 48, 51, + 52, 128, 68, 48, 51, 51, 128, 68, 48, 51, 50, 128, 68, 48, 51, 49, 65, + 128, 68, 48, 51, 49, 128, 68, 48, 51, 48, 128, 68, 48, 50, 57, 128, 68, + 48, 50, 56, 128, 68, 48, 50, 55, 65, 128, 68, 48, 50, 55, 128, 68, 48, + 50, 54, 128, 68, 48, 50, 53, 128, 68, 48, 50, 52, 128, 68, 48, 50, 51, + 128, 68, 48, 50, 50, 128, 68, 48, 50, 49, 128, 68, 48, 50, 48, 128, 68, + 48, 49, 57, 128, 68, 48, 49, 56, 128, 68, 48, 49, 55, 128, 68, 48, 49, + 54, 128, 68, 48, 49, 53, 128, 68, 48, 49, 52, 128, 68, 48, 49, 51, 128, + 68, 48, 49, 50, 128, 68, 48, 49, 49, 128, 68, 48, 49, 48, 128, 68, 48, + 48, 57, 128, 68, 48, 48, 56, 65, 128, 68, 48, 48, 56, 128, 68, 48, 48, + 55, 128, 68, 48, 48, 54, 128, 68, 48, 48, 53, 128, 68, 48, 48, 52, 128, + 68, 48, 48, 51, 128, 68, 48, 48, 50, 128, 68, 48, 48, 49, 128, 67, 89, + 88, 128, 67, 89, 84, 128, 67, 89, 82, 88, 128, 67, 89, 82, 69, 78, 65, + 73, 195, 67, 89, 82, 128, 67, 89, 80, 82, 73, 79, 212, 67, 89, 80, 69, + 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, 82, 73, 67, 73, + 84, 89, 128, 67, 89, 67, 76, 79, 78, 69, 128, 67, 89, 65, 89, 128, 67, + 89, 65, 87, 128, 67, 89, 65, 128, 67, 87, 79, 79, 128, 67, 87, 79, 128, + 67, 87, 73, 73, 128, 67, 87, 73, 128, 67, 87, 69, 79, 82, 84, 72, 128, + 67, 87, 69, 128, 67, 87, 65, 65, 128, 67, 85, 88, 128, 67, 85, 85, 128, + 67, 85, 212, 67, 85, 83, 84, 79, 77, 83, 128, 67, 85, 83, 84, 79, 77, 69, + 210, 67, 85, 83, 84, 65, 82, 68, 128, 67, 85, 83, 80, 128, 67, 85, 82, + 88, 128, 67, 85, 82, 86, 73, 78, 199, 67, 85, 82, 86, 69, 68, 128, 67, + 85, 82, 86, 69, 196, 67, 85, 82, 86, 69, 128, 67, 85, 82, 86, 197, 67, + 85, 82, 83, 73, 86, 197, 67, 85, 82, 82, 217, 67, 85, 82, 82, 69, 78, 84, + 128, 67, 85, 82, 82, 69, 78, 212, 67, 85, 82, 76, 217, 67, 85, 82, 76, + 128, 67, 85, 82, 128, 67, 85, 80, 80, 69, 68, 128, 67, 85, 80, 80, 69, + 196, 67, 85, 79, 88, 128, 67, 85, 79, 80, 128, 67, 85, 79, 128, 67, 85, + 205, 67, 85, 67, 85, 77, 66, 69, 82, 128, 67, 85, 66, 69, 68, 128, 67, + 85, 66, 197, 67, 85, 65, 84, 82, 73, 76, 76, 79, 128, 67, 85, 65, 84, 82, + 73, 76, 76, 207, 67, 85, 65, 205, 67, 85, 128, 67, 83, 73, 128, 67, 82, + 89, 83, 84, 65, 204, 67, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, 195, + 67, 82, 89, 73, 78, 199, 67, 82, 85, 90, 69, 73, 82, 207, 67, 82, 85, 67, + 73, 70, 79, 82, 205, 67, 82, 85, 67, 73, 66, 76, 69, 45, 53, 128, 67, 82, + 85, 67, 73, 66, 76, 69, 45, 52, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, + 51, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 50, 128, 67, 82, 85, 67, 73, + 66, 76, 69, 128, 67, 82, 79, 87, 78, 128, 67, 82, 79, 83, 83, 73, 78, 71, + 128, 67, 82, 79, 83, 83, 73, 78, 199, 67, 82, 79, 83, 83, 72, 65, 84, 67, + 200, 67, 82, 79, 83, 83, 69, 68, 45, 84, 65, 73, 76, 128, 67, 82, 79, 83, + 83, 69, 68, 128, 67, 82, 79, 83, 83, 69, 196, 67, 82, 79, 83, 83, 66, 79, + 78, 69, 83, 128, 67, 82, 79, 83, 83, 128, 67, 82, 79, 83, 211, 67, 82, + 79, 80, 128, 67, 82, 79, 73, 88, 128, 67, 82, 79, 73, 83, 83, 65, 78, 84, + 128, 67, 82, 79, 67, 85, 211, 67, 82, 79, 67, 79, 68, 73, 76, 69, 128, + 67, 82, 73, 67, 75, 69, 212, 67, 82, 69, 83, 67, 69, 78, 84, 83, 128, 67, + 82, 69, 83, 67, 69, 78, 84, 128, 67, 82, 69, 83, 67, 69, 78, 212, 67, 82, + 69, 68, 73, 212, 67, 82, 69, 65, 84, 73, 86, 197, 67, 82, 69, 65, 77, + 128, 67, 82, 65, 89, 79, 78, 128, 67, 82, 65, 67, 75, 69, 82, 128, 67, + 82, 65, 66, 128, 67, 82, 128, 67, 79, 88, 128, 67, 79, 87, 66, 79, 217, + 67, 79, 87, 128, 67, 79, 215, 67, 79, 86, 69, 82, 128, 67, 79, 85, 80, + 76, 197, 67, 79, 85, 78, 84, 73, 78, 199, 67, 79, 85, 78, 84, 69, 82, 83, + 73, 78, 75, 128, 67, 79, 85, 78, 84, 69, 82, 66, 79, 82, 69, 128, 67, 79, + 85, 78, 67, 73, 204, 67, 79, 85, 67, 200, 67, 79, 84, 128, 67, 79, 82, + 82, 69, 83, 80, 79, 78, 68, 211, 67, 79, 82, 82, 69, 67, 84, 128, 67, 79, + 82, 80, 83, 69, 128, 67, 79, 82, 80, 79, 82, 65, 84, 73, 79, 78, 128, 67, + 79, 82, 79, 78, 73, 83, 128, 67, 79, 82, 78, 69, 82, 83, 128, 67, 79, 82, + 78, 69, 82, 128, 67, 79, 82, 78, 69, 210, 67, 79, 82, 75, 128, 67, 79, + 80, 89, 82, 73, 71, 72, 84, 128, 67, 79, 80, 89, 82, 73, 71, 72, 212, 67, + 79, 80, 89, 128, 67, 79, 80, 82, 79, 68, 85, 67, 84, 128, 67, 79, 80, 80, + 69, 82, 45, 50, 128, 67, 79, 80, 80, 69, 82, 128, 67, 79, 80, 128, 67, + 79, 79, 76, 128, 67, 79, 79, 75, 73, 78, 71, 128, 67, 79, 79, 75, 73, 69, + 128, 67, 79, 79, 75, 69, 196, 67, 79, 79, 128, 67, 79, 78, 86, 69, 82, + 71, 73, 78, 199, 67, 79, 78, 86, 69, 78, 73, 69, 78, 67, 197, 67, 79, 78, + 84, 82, 79, 76, 128, 67, 79, 78, 84, 82, 79, 204, 67, 79, 78, 84, 82, 65, + 82, 73, 69, 84, 89, 128, 67, 79, 78, 84, 82, 65, 67, 84, 73, 79, 78, 128, + 67, 79, 78, 84, 79, 85, 82, 69, 196, 67, 79, 78, 84, 79, 85, 210, 67, 79, + 78, 84, 73, 78, 85, 73, 78, 199, 67, 79, 78, 84, 73, 78, 85, 65, 84, 73, + 79, 206, 67, 79, 78, 84, 69, 78, 84, 73, 79, 78, 128, 67, 79, 78, 84, 69, + 77, 80, 76, 65, 84, 73, 79, 78, 128, 67, 79, 78, 84, 65, 73, 78, 211, 67, + 79, 78, 84, 65, 73, 78, 73, 78, 199, 67, 79, 78, 84, 65, 73, 206, 67, 79, + 78, 84, 65, 67, 84, 128, 67, 79, 78, 83, 84, 82, 85, 67, 84, 73, 79, 78, + 128, 67, 79, 78, 83, 84, 82, 85, 67, 84, 73, 79, 206, 67, 79, 78, 83, 84, + 65, 78, 84, 128, 67, 79, 78, 83, 84, 65, 78, 212, 67, 79, 78, 83, 84, 65, + 78, 67, 89, 128, 67, 79, 78, 83, 69, 67, 85, 84, 73, 86, 197, 67, 79, 78, + 74, 85, 78, 67, 84, 73, 79, 78, 128, 67, 79, 78, 74, 85, 71, 65, 84, 197, + 67, 79, 78, 74, 79, 73, 78, 73, 78, 199, 67, 79, 78, 74, 79, 73, 78, 69, + 68, 128, 67, 79, 78, 74, 79, 73, 78, 69, 196, 67, 79, 78, 73, 67, 65, + 204, 67, 79, 78, 71, 82, 85, 69, 78, 212, 67, 79, 78, 71, 82, 65, 84, 85, + 76, 65, 84, 73, 79, 78, 128, 67, 79, 78, 70, 85, 83, 69, 196, 67, 79, 78, + 70, 79, 85, 78, 68, 69, 196, 67, 79, 78, 70, 76, 73, 67, 84, 128, 67, 79, + 78, 70, 69, 84, 84, 201, 67, 79, 78, 67, 65, 86, 69, 45, 83, 73, 68, 69, + 196, 67, 79, 78, 67, 65, 86, 69, 45, 80, 79, 73, 78, 84, 69, 196, 67, 79, + 77, 80, 85, 84, 69, 82, 83, 128, 67, 79, 77, 80, 85, 84, 69, 82, 128, 67, + 79, 77, 80, 82, 69, 83, 83, 73, 79, 78, 128, 67, 79, 77, 80, 82, 69, 83, + 83, 69, 196, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 78, 128, 67, 79, 77, + 80, 79, 83, 73, 84, 73, 79, 206, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 55, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 53, 52, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 53, 51, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 55, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 55, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 53, + 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 57, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 56, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 55, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 55, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 53, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 52, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 55, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 55, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, + 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 48, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 57, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 55, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 55, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 54, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 53, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 55, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 55, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, + 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 49, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 48, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 55, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 55, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 55, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 54, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 55, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 55, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, + 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 50, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 49, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 55, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 55, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 56, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 55, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 55, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 55, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, + 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 51, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 50, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 55, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 55, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 57, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 56, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 55, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 55, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, + 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 52, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 51, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 55, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 55, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 48, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 57, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 57, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 57, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, + 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 53, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 52, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 57, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 49, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 48, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 56, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 56, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, + 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 54, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 53, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 56, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 50, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 49, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 56, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 55, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, + 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 55, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 54, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 55, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 51, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 50, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 55, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 55, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, + 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 56, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 55, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 54, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 52, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 51, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 54, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 54, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, + 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 57, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 56, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 53, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 53, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 52, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 53, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, + 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 48, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 57, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 52, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 54, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 53, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 52, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, + 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 49, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 48, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 51, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 55, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 54, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 51, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, + 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 50, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 49, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 51, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 56, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 55, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 50, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, + 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 51, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 50, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 50, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 57, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 56, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 49, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, + 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 52, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 51, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 49, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 48, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 57, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 54, 48, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 54, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, + 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 53, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 52, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 54, 48, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 54, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 49, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 48, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 57, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 57, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, + 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 54, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 53, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 57, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 57, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 50, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 49, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 57, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 56, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, + 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 55, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 54, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 56, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 56, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 51, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 50, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 56, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 56, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, + 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 56, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 55, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 55, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 55, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 52, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 51, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 55, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 55, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, + 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 57, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 56, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 54, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 54, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 53, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 52, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 54, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 54, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, + 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 48, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 57, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 53, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 53, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 54, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 53, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 53, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 53, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, + 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 49, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 48, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 52, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 52, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 55, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 54, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 52, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 52, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, + 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 50, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 49, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 52, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 51, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 56, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 55, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 51, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 51, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, + 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 51, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 50, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 51, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 51, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 57, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 56, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 50, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 50, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, + 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 52, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 51, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 50, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 50, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 48, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 57, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 49, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 49, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, + 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 53, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 52, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 49, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 49, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 49, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 48, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 48, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 53, 48, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, + 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 54, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 53, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 53, 48, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 53, 48, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 50, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 49, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 53, 48, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 57, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, + 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 55, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 54, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 57, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 57, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 51, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 50, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 57, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 57, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, + 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 56, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 55, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 56, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 56, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 52, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 51, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 56, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 56, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, + 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 57, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 56, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 55, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 55, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 53, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 52, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 55, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 55, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, + 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 48, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 57, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 54, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 54, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 54, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 53, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 54, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 54, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, + 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 49, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 48, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 53, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 53, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 55, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 54, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 53, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, + 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 50, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 49, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 52, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 56, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 55, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 52, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, + 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 51, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 50, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 52, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 57, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 56, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 51, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, + 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 52, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 51, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 51, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 48, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 57, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 50, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, + 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 53, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 52, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 50, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 49, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 48, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 49, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, + 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 54, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 53, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 49, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 50, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 49, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 48, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, + 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 55, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 54, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 52, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 52, 48, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 51, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 50, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 52, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 52, 48, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, + 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 56, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 55, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 57, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 57, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 52, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 51, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 57, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, + 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 57, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 56, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 56, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 56, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 53, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 52, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 56, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, + 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 48, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 57, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 55, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 55, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 54, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 53, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 55, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, + 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 49, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 48, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 54, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 54, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 55, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 54, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 54, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, + 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 50, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 49, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 54, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 53, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 56, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 55, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, + 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 51, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 50, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 57, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 56, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, + 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 52, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 51, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 48, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 57, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, + 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 53, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 52, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 49, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 48, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, + 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 54, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 53, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 50, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 49, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, + 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 55, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 54, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 51, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 50, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, + 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 56, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 55, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 51, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 51, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 52, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 51, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 51, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 51, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, + 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 57, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 56, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 57, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 57, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 53, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 52, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 57, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, + 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 48, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 57, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 56, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 56, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 54, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 53, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 56, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, + 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 49, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 48, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 55, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 55, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 55, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 54, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 55, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, + 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 50, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 49, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 55, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 54, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 56, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 55, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 54, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, + 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 51, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 50, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 54, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 54, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 57, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 56, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 53, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, + 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 52, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 51, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 48, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 57, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 52, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, + 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 53, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 52, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 49, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 48, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 51, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, + 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 54, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 53, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 50, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 49, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 51, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, + 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 55, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 54, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 51, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 50, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 50, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, + 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 56, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 55, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 52, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 51, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 49, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, + 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 57, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 56, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 50, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 50, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 53, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 52, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 50, 48, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 50, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, + 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 48, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 57, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 57, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 57, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 54, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 53, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 57, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 57, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, + 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 49, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 48, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 56, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 56, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 55, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 54, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 56, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 56, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, + 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 50, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 49, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 56, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 55, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 56, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 55, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 55, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 55, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, + 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 51, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 50, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 55, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 55, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 57, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 56, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 54, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 54, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, + 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 52, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 51, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 54, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 54, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 48, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 57, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 53, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 53, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, + 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 53, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 52, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 53, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 49, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 48, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 52, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 52, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, + 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 54, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 53, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 52, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 50, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 49, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 52, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 51, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, + 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 55, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 54, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 51, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 51, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 50, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 51, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 51, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, + 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 56, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 55, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 50, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 52, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 51, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 50, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 50, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, + 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 57, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 56, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 49, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 53, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 52, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 49, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 49, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, + 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 48, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 57, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 49, 48, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 49, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 54, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 53, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 49, 48, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 49, 48, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, + 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 49, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 48, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 57, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 57, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 55, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 54, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 57, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 57, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, + 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 50, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 49, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 57, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 56, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 56, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 55, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 56, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 56, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, + 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 51, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 50, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 56, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 56, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 57, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 56, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 55, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 55, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, + 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 52, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 51, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 55, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 55, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 48, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 57, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 54, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 54, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, + 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 53, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 52, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 54, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 54, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 49, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 48, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 53, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 53, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, + 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 54, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 53, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 53, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 53, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 50, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 49, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 52, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, + 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 55, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 54, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 52, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 52, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 51, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 50, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 52, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, + 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 56, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 55, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 51, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 51, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 52, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 51, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 51, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, + 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 57, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 56, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 50, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 50, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 53, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 52, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 50, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, + 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 48, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 57, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 49, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 49, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 54, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 53, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 49, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, + 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 49, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 48, 128, 67, 79, 77, 80, 79, 78, + 69, 78, 84, 45, 48, 48, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, + 48, 48, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 55, 128, + 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 54, 128, 67, 79, 77, 80, + 79, 78, 69, 78, 84, 45, 48, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, + 84, 45, 48, 48, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, + 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 50, 128, 67, 79, + 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 49, 128, 67, 79, 77, 80, 76, 73, + 65, 78, 67, 69, 128, 67, 79, 77, 80, 76, 69, 84, 73, 79, 78, 128, 67, 79, + 77, 80, 76, 69, 84, 69, 68, 128, 67, 79, 77, 80, 76, 69, 77, 69, 78, 84, + 128, 67, 79, 77, 80, 65, 82, 69, 128, 67, 79, 77, 77, 79, 206, 67, 79, + 77, 77, 69, 82, 67, 73, 65, 204, 67, 79, 77, 77, 65, 78, 68, 128, 67, 79, + 77, 77, 65, 128, 67, 79, 77, 77, 193, 67, 79, 77, 69, 84, 128, 67, 79, + 77, 66, 73, 78, 69, 68, 128, 67, 79, 77, 66, 73, 78, 65, 84, 73, 79, 78, + 128, 67, 79, 77, 66, 128, 67, 79, 76, 85, 77, 78, 128, 67, 79, 76, 79, + 82, 128, 67, 79, 76, 76, 73, 83, 73, 79, 206, 67, 79, 76, 76, 128, 67, + 79, 76, 196, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, 78, 71, 128, 67, + 79, 69, 78, 199, 67, 79, 68, 65, 128, 67, 79, 67, 75, 84, 65, 73, 204, + 67, 79, 65, 83, 84, 69, 82, 128, 67, 79, 65, 128, 67, 77, 128, 67, 205, + 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 83, 128, 67, 76, 85, 66, 45, + 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, 194, 67, 76, + 79, 87, 206, 67, 76, 79, 86, 69, 82, 128, 67, 76, 79, 85, 68, 128, 67, + 76, 79, 85, 196, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, 79, 84, 72, + 128, 67, 76, 79, 83, 69, 84, 128, 67, 76, 79, 83, 69, 78, 69, 83, 83, + 128, 67, 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 197, 67, 76, 79, 67, + 75, 87, 73, 83, 197, 67, 76, 79, 67, 203, 67, 76, 73, 86, 73, 83, 128, + 67, 76, 73, 80, 66, 79, 65, 82, 68, 128, 67, 76, 73, 78, 75, 73, 78, 199, + 67, 76, 73, 78, 71, 73, 78, 199, 67, 76, 73, 77, 65, 67, 85, 83, 128, 67, + 76, 73, 70, 70, 128, 67, 76, 73, 67, 75, 128, 67, 76, 69, 70, 45, 50, + 128, 67, 76, 69, 70, 45, 49, 128, 67, 76, 69, 70, 128, 67, 76, 69, 198, + 67, 76, 69, 65, 86, 69, 82, 128, 67, 76, 69, 65, 210, 67, 76, 65, 83, 83, + 73, 67, 65, 204, 67, 76, 65, 80, 80, 73, 78, 199, 67, 76, 65, 80, 80, 69, + 210, 67, 76, 65, 78, 128, 67, 76, 65, 206, 67, 76, 65, 77, 83, 72, 69, + 76, 204, 67, 76, 65, 73, 77, 128, 67, 76, 128, 67, 73, 88, 128, 67, 73, + 86, 73, 76, 73, 65, 78, 128, 67, 73, 84, 89, 83, 67, 65, 80, 69, 128, 67, + 73, 84, 89, 83, 67, 65, 80, 197, 67, 73, 84, 201, 67, 73, 84, 65, 84, 73, + 79, 206, 67, 73, 84, 128, 67, 73, 82, 67, 85, 211, 67, 73, 82, 67, 85, + 77, 70, 76, 69, 88, 128, 67, 73, 82, 67, 85, 77, 70, 76, 69, 216, 67, 73, + 82, 67, 85, 76, 65, 84, 73, 79, 206, 67, 73, 82, 67, 76, 73, 78, 71, 128, + 67, 73, 82, 67, 76, 73, 78, 199, 67, 73, 82, 67, 76, 69, 83, 128, 67, 73, + 82, 67, 76, 69, 211, 67, 73, 82, 67, 76, 69, 68, 128, 67, 73, 80, 128, + 67, 73, 78, 78, 65, 66, 65, 82, 128, 67, 73, 78, 69, 77, 65, 128, 67, 73, 206, 67, 73, 205, 67, 73, 73, 128, 67, 73, 69, 88, 128, 67, 73, 69, 85, 67, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, 45, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, 45, 73, 69, 85, 78, 71, @@ -4576,300 +5205,304 @@ static unsigned char lexicon[] = { 86, 82, 79, 206, 67, 72, 69, 84, 128, 67, 72, 69, 83, 84, 78, 85, 84, 128, 67, 72, 69, 83, 84, 128, 67, 72, 69, 83, 211, 67, 72, 69, 82, 89, 128, 67, 72, 69, 82, 82, 217, 67, 72, 69, 82, 82, 73, 69, 83, 128, 67, - 72, 69, 81, 85, 69, 82, 69, 196, 67, 72, 69, 80, 128, 67, 72, 69, 206, - 67, 72, 69, 73, 78, 65, 80, 128, 67, 72, 69, 73, 75, 72, 69, 73, 128, 67, - 72, 69, 73, 75, 72, 65, 78, 128, 67, 72, 69, 69, 83, 197, 67, 72, 69, 69, - 82, 73, 78, 199, 67, 72, 69, 69, 77, 128, 67, 72, 69, 69, 75, 211, 67, - 72, 69, 69, 75, 128, 67, 72, 69, 69, 128, 67, 72, 69, 67, 75, 69, 210, - 67, 72, 69, 67, 75, 128, 67, 72, 69, 67, 203, 67, 72, 197, 67, 72, 65, - 88, 128, 67, 72, 65, 86, 73, 89, 65, 78, 73, 128, 67, 72, 65, 84, 84, 65, - 87, 65, 128, 67, 72, 65, 84, 128, 67, 72, 65, 82, 84, 128, 67, 72, 65, - 82, 212, 67, 72, 65, 82, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, - 67, 72, 65, 82, 65, 67, 84, 69, 82, 83, 128, 67, 72, 65, 82, 65, 67, 84, - 69, 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 84, 69, 82, 128, 67, - 72, 65, 80, 128, 67, 72, 65, 78, 71, 128, 67, 72, 65, 78, 128, 67, 72, - 65, 77, 75, 79, 128, 67, 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65, 77, - 73, 76, 73, 128, 67, 72, 65, 205, 67, 72, 65, 75, 77, 193, 67, 72, 65, - 73, 82, 128, 67, 72, 65, 73, 78, 83, 128, 67, 72, 65, 68, 65, 128, 67, - 72, 65, 196, 67, 72, 65, 65, 128, 67, 71, 74, 128, 67, 69, 88, 128, 67, - 69, 82, 69, 83, 128, 67, 69, 82, 69, 77, 79, 78, 89, 128, 67, 69, 82, 69, - 75, 128, 67, 69, 82, 45, 87, 65, 128, 67, 69, 80, 128, 67, 69, 79, 78, - 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 67, - 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, 69, - 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 73, 79, 83, - 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 67, 73, 69, 85, 67, 128, - 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 67, 72, 73, 69, 85, 67, 72, - 128, 67, 69, 78, 84, 85, 82, 73, 65, 204, 67, 69, 78, 84, 82, 69, 76, 73, - 78, 197, 67, 69, 78, 84, 82, 69, 68, 128, 67, 69, 78, 84, 82, 69, 196, - 67, 69, 78, 84, 82, 69, 128, 67, 69, 78, 84, 82, 197, 67, 69, 78, 84, 82, - 65, 76, 73, 90, 65, 84, 73, 79, 206, 67, 69, 78, 128, 67, 69, 76, 84, 73, - 195, 67, 69, 76, 83, 73, 85, 83, 128, 67, 69, 76, 69, 66, 82, 65, 84, 73, - 79, 78, 128, 67, 69, 73, 82, 84, 128, 67, 69, 73, 76, 73, 78, 71, 128, - 67, 69, 73, 76, 73, 78, 199, 67, 69, 69, 86, 128, 67, 69, 69, 66, 128, - 67, 69, 69, 128, 67, 69, 68, 73, 76, 76, 65, 128, 67, 69, 68, 73, 76, 76, - 193, 67, 69, 68, 201, 67, 69, 67, 69, 75, 128, 67, 69, 67, 65, 75, 128, - 67, 69, 67, 65, 203, 67, 69, 65, 76, 67, 128, 67, 67, 85, 128, 67, 67, - 79, 128, 67, 67, 73, 128, 67, 67, 72, 85, 128, 67, 67, 72, 79, 128, 67, - 67, 72, 73, 128, 67, 67, 72, 72, 85, 128, 67, 67, 72, 72, 79, 128, 67, - 67, 72, 72, 73, 128, 67, 67, 72, 72, 69, 69, 128, 67, 67, 72, 72, 69, - 128, 67, 67, 72, 72, 65, 65, 128, 67, 67, 72, 72, 65, 128, 67, 67, 72, - 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, - 65, 128, 67, 67, 72, 128, 67, 67, 69, 69, 128, 67, 67, 69, 128, 67, 67, - 65, 65, 128, 67, 67, 65, 128, 67, 65, 89, 78, 128, 67, 65, 89, 65, 78, - 78, 65, 128, 67, 65, 88, 128, 67, 65, 86, 69, 128, 67, 65, 85, 84, 73, - 79, 206, 67, 65, 85, 76, 68, 82, 79, 78, 128, 67, 65, 85, 68, 65, 128, - 67, 65, 85, 67, 65, 83, 73, 65, 206, 67, 65, 85, 128, 67, 65, 84, 65, 87, - 65, 128, 67, 65, 84, 128, 67, 65, 212, 67, 65, 83, 84, 76, 69, 128, 67, - 65, 83, 75, 69, 212, 67, 65, 82, 89, 83, 84, 73, 65, 206, 67, 65, 82, 84, - 82, 73, 68, 71, 69, 128, 67, 65, 82, 84, 128, 67, 65, 82, 211, 67, 65, - 82, 82, 73, 65, 71, 197, 67, 65, 82, 80, 69, 78, 84, 82, 217, 67, 65, 82, - 208, 67, 65, 82, 79, 85, 83, 69, 204, 67, 65, 82, 79, 78, 128, 67, 65, - 82, 79, 206, 67, 65, 82, 73, 203, 67, 65, 82, 73, 65, 206, 67, 65, 82, - 69, 84, 128, 67, 65, 82, 69, 212, 67, 65, 82, 197, 67, 65, 82, 68, 83, - 128, 67, 65, 82, 68, 128, 67, 65, 82, 196, 67, 65, 82, 128, 67, 65, 210, - 67, 65, 80, 85, 212, 67, 65, 80, 84, 73, 86, 69, 128, 67, 65, 80, 82, 73, - 67, 79, 82, 78, 128, 67, 65, 80, 80, 69, 196, 67, 65, 80, 79, 128, 67, - 65, 80, 73, 84, 85, 76, 85, 77, 128, 67, 65, 80, 73, 84, 65, 76, 128, 67, - 65, 78, 84, 73, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 199, 67, 65, 78, - 68, 89, 128, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 85, 128, 67, 65, 78, - 68, 82, 65, 66, 73, 78, 68, 213, 67, 65, 78, 68, 82, 65, 128, 67, 65, 78, - 68, 82, 193, 67, 65, 78, 68, 76, 69, 128, 67, 65, 78, 67, 69, 82, 128, - 67, 65, 78, 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 67, 69, 76, - 128, 67, 65, 78, 67, 69, 204, 67, 65, 78, 128, 67, 65, 77, 80, 73, 78, - 71, 128, 67, 65, 77, 78, 85, 195, 67, 65, 77, 69, 82, 65, 128, 67, 65, - 77, 69, 82, 193, 67, 65, 77, 69, 76, 128, 67, 65, 76, 89, 65, 128, 67, - 65, 76, 89, 193, 67, 65, 76, 88, 128, 67, 65, 76, 76, 128, 67, 65, 76, - 69, 78, 68, 65, 82, 128, 67, 65, 76, 69, 78, 68, 65, 210, 67, 65, 76, 67, - 85, 76, 65, 84, 79, 82, 128, 67, 65, 76, 67, 128, 67, 65, 75, 82, 65, - 128, 67, 65, 75, 197, 67, 65, 73, 128, 67, 65, 72, 128, 67, 65, 69, 83, - 85, 82, 65, 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, - 67, 65, 67, 84, 85, 83, 128, 67, 65, 66, 76, 69, 87, 65, 89, 128, 67, 65, - 66, 73, 78, 69, 84, 128, 67, 65, 66, 66, 65, 71, 69, 45, 84, 82, 69, 69, - 128, 67, 65, 65, 78, 71, 128, 67, 65, 65, 73, 128, 67, 193, 67, 48, 50, - 52, 128, 67, 48, 50, 51, 128, 67, 48, 50, 50, 128, 67, 48, 50, 49, 128, - 67, 48, 50, 48, 128, 67, 48, 49, 57, 128, 67, 48, 49, 56, 128, 67, 48, - 49, 55, 128, 67, 48, 49, 54, 128, 67, 48, 49, 53, 128, 67, 48, 49, 52, - 128, 67, 48, 49, 51, 128, 67, 48, 49, 50, 128, 67, 48, 49, 49, 128, 67, - 48, 49, 48, 65, 128, 67, 48, 49, 48, 128, 67, 48, 48, 57, 128, 67, 48, - 48, 56, 128, 67, 48, 48, 55, 128, 67, 48, 48, 54, 128, 67, 48, 48, 53, - 128, 67, 48, 48, 52, 128, 67, 48, 48, 51, 128, 67, 48, 48, 50, 67, 128, - 67, 48, 48, 50, 66, 128, 67, 48, 48, 50, 65, 128, 67, 48, 48, 50, 128, - 67, 48, 48, 49, 128, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 67, - 45, 51, 57, 128, 67, 45, 49, 56, 128, 66, 90, 85, 78, 199, 66, 90, 72, - 201, 66, 89, 84, 197, 66, 89, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, - 85, 75, 82, 65, 73, 78, 73, 65, 206, 66, 88, 71, 128, 66, 87, 73, 128, - 66, 87, 69, 69, 128, 66, 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, 77, - 73, 83, 72, 128, 66, 85, 84, 84, 79, 78, 128, 66, 85, 84, 84, 79, 206, - 66, 85, 212, 66, 85, 83, 84, 211, 66, 85, 83, 212, 66, 85, 83, 83, 89, - 69, 82, 85, 128, 66, 85, 83, 73, 78, 69, 83, 211, 66, 85, 211, 66, 85, - 82, 213, 66, 85, 82, 82, 73, 84, 79, 128, 66, 85, 82, 50, 128, 66, 85, - 210, 66, 85, 79, 88, 128, 66, 85, 79, 80, 128, 66, 85, 78, 78, 217, 66, - 85, 78, 71, 128, 66, 85, 77, 80, 217, 66, 85, 76, 85, 71, 128, 66, 85, - 76, 85, 199, 66, 85, 76, 76, 83, 69, 89, 69, 128, 66, 85, 76, 76, 211, - 66, 85, 76, 76, 72, 79, 82, 78, 128, 66, 85, 76, 76, 72, 79, 82, 206, 66, - 85, 76, 76, 69, 84, 128, 66, 85, 76, 76, 69, 212, 66, 85, 76, 76, 128, - 66, 85, 76, 66, 128, 66, 85, 75, 89, 128, 66, 85, 73, 76, 68, 73, 78, 71, - 83, 128, 66, 85, 73, 76, 68, 73, 78, 71, 128, 66, 85, 73, 76, 68, 73, 78, - 199, 66, 85, 72, 73, 196, 66, 85, 71, 73, 78, 69, 83, 197, 66, 85, 71, - 128, 66, 85, 70, 70, 65, 76, 79, 128, 66, 85, 68, 128, 66, 85, 67, 75, - 76, 69, 128, 66, 85, 66, 66, 76, 69, 83, 128, 66, 85, 66, 66, 76, 69, - 128, 66, 83, 84, 65, 82, 128, 66, 83, 75, 85, 210, 66, 83, 75, 65, 173, - 66, 83, 68, 85, 211, 66, 82, 85, 83, 200, 66, 82, 79, 78, 90, 69, 128, - 66, 82, 79, 75, 69, 206, 66, 82, 79, 65, 196, 66, 82, 73, 83, 84, 76, 69, - 128, 66, 82, 73, 71, 72, 84, 78, 69, 83, 211, 66, 82, 73, 69, 70, 67, 65, - 83, 69, 128, 66, 82, 73, 68, 71, 197, 66, 82, 73, 68, 197, 66, 82, 73, - 67, 75, 128, 66, 82, 69, 86, 73, 83, 128, 66, 82, 69, 86, 69, 45, 77, 65, - 67, 82, 79, 78, 128, 66, 82, 69, 86, 197, 66, 82, 69, 65, 84, 200, 66, - 82, 69, 65, 75, 84, 72, 82, 79, 85, 71, 72, 128, 66, 82, 69, 65, 68, 128, - 66, 82, 68, 193, 66, 82, 65, 78, 67, 72, 73, 78, 199, 66, 82, 65, 78, 67, - 72, 69, 83, 128, 66, 82, 65, 78, 67, 72, 128, 66, 82, 65, 78, 67, 200, - 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, 84, 69, 196, 66, - 82, 65, 67, 75, 69, 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 80, - 72, 128, 66, 79, 89, 211, 66, 79, 89, 128, 66, 79, 87, 84, 73, 69, 128, - 66, 79, 87, 84, 73, 197, 66, 79, 87, 76, 73, 78, 71, 128, 66, 79, 87, 76, - 128, 66, 79, 87, 204, 66, 79, 87, 73, 78, 199, 66, 79, 215, 66, 79, 85, - 81, 85, 69, 84, 128, 66, 79, 85, 81, 85, 69, 212, 66, 79, 85, 78, 68, 65, - 82, 217, 66, 79, 84, 84, 79, 77, 45, 83, 72, 65, 68, 69, 196, 66, 79, 84, - 84, 79, 77, 45, 76, 73, 71, 72, 84, 69, 196, 66, 79, 84, 84, 79, 77, 128, - 66, 79, 84, 84, 79, 205, 66, 79, 84, 84, 76, 69, 128, 66, 79, 84, 84, 76, - 197, 66, 79, 84, 200, 66, 79, 82, 85, 84, 79, 128, 66, 79, 82, 65, 88, - 45, 51, 128, 66, 79, 82, 65, 88, 45, 50, 128, 66, 79, 82, 65, 88, 128, - 66, 79, 80, 79, 77, 79, 70, 207, 66, 79, 79, 84, 83, 128, 66, 79, 79, 84, - 128, 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 66, 79, 79, 75, 83, 128, - 66, 79, 79, 75, 77, 65, 82, 75, 128, 66, 79, 79, 75, 77, 65, 82, 203, 66, - 79, 78, 69, 128, 66, 79, 77, 66, 128, 66, 79, 77, 128, 66, 79, 76, 84, - 128, 66, 79, 76, 212, 66, 79, 72, 65, 73, 82, 73, 195, 66, 79, 68, 89, - 128, 66, 79, 68, 217, 66, 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, - 69, 128, 66, 76, 85, 197, 66, 76, 79, 87, 73, 78, 199, 66, 76, 79, 87, - 70, 73, 83, 72, 128, 66, 76, 79, 215, 66, 76, 79, 83, 83, 79, 77, 128, - 66, 76, 79, 79, 68, 128, 66, 76, 79, 78, 196, 66, 76, 79, 67, 75, 128, - 66, 76, 73, 78, 203, 66, 76, 69, 78, 68, 69, 196, 66, 76, 65, 78, 75, - 128, 66, 76, 65, 78, 203, 66, 76, 65, 68, 197, 66, 76, 65, 67, 75, 76, - 69, 84, 84, 69, 210, 66, 76, 65, 67, 75, 70, 79, 79, 212, 66, 76, 65, 67, - 75, 45, 76, 69, 84, 84, 69, 210, 66, 76, 65, 67, 75, 45, 70, 69, 65, 84, - 72, 69, 82, 69, 196, 66, 76, 65, 67, 75, 128, 66, 75, 65, 173, 66, 73, - 84, 84, 69, 82, 128, 66, 73, 84, 73, 78, 199, 66, 73, 84, 197, 66, 73, - 83, 77, 85, 84, 200, 66, 73, 83, 77, 73, 76, 76, 65, 200, 66, 73, 83, 72, - 79, 80, 128, 66, 73, 83, 69, 67, 84, 73, 78, 199, 66, 73, 83, 65, 72, - 128, 66, 73, 82, 85, 128, 66, 73, 82, 84, 72, 68, 65, 217, 66, 73, 82, - 71, 65, 128, 66, 73, 82, 68, 128, 66, 73, 79, 72, 65, 90, 65, 82, 196, - 66, 73, 78, 79, 67, 85, 76, 65, 210, 66, 73, 78, 68, 73, 78, 199, 66, 73, - 78, 68, 73, 128, 66, 73, 78, 65, 82, 217, 66, 73, 76, 76, 73, 79, 78, 83, - 128, 66, 73, 76, 76, 73, 65, 82, 68, 83, 128, 66, 73, 76, 65, 66, 73, 65, - 204, 66, 73, 75, 73, 78, 73, 128, 66, 73, 71, 128, 66, 73, 199, 66, 73, - 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 66, 73, 68, 65, 75, 85, 79, - 206, 66, 73, 67, 89, 67, 76, 73, 83, 84, 128, 66, 73, 67, 89, 67, 76, 69, - 83, 128, 66, 73, 67, 89, 67, 76, 69, 128, 66, 73, 67, 69, 80, 83, 128, - 66, 73, 66, 76, 69, 45, 67, 82, 69, 197, 66, 73, 66, 128, 66, 201, 66, - 72, 85, 128, 66, 72, 79, 79, 128, 66, 72, 79, 128, 66, 72, 73, 128, 66, - 72, 69, 84, 72, 128, 66, 72, 69, 69, 128, 66, 72, 69, 128, 66, 72, 65, - 84, 84, 73, 80, 82, 79, 76, 213, 66, 72, 65, 77, 128, 66, 72, 65, 65, - 128, 66, 72, 65, 128, 66, 69, 89, 89, 65, 76, 128, 66, 69, 88, 128, 66, - 69, 86, 69, 82, 65, 71, 69, 128, 66, 69, 84, 87, 69, 69, 78, 128, 66, 69, - 84, 87, 69, 69, 206, 66, 69, 84, 72, 128, 66, 69, 84, 65, 128, 66, 69, - 84, 193, 66, 69, 212, 66, 69, 83, 73, 68, 197, 66, 69, 82, 75, 65, 78, - 65, 206, 66, 69, 82, 66, 69, 210, 66, 69, 80, 128, 66, 69, 79, 82, 195, - 66, 69, 78, 90, 69, 78, 197, 66, 69, 78, 84, 207, 66, 69, 78, 84, 128, - 66, 69, 78, 212, 66, 69, 78, 68, 69, 128, 66, 69, 78, 68, 128, 66, 69, - 78, 196, 66, 69, 206, 66, 69, 76, 84, 128, 66, 69, 76, 212, 66, 69, 76, - 79, 215, 66, 69, 76, 76, 72, 79, 208, 66, 69, 76, 76, 128, 66, 69, 76, - 204, 66, 69, 76, 71, 84, 72, 79, 210, 66, 69, 73, 84, 72, 128, 66, 69, - 72, 73, 78, 196, 66, 69, 72, 69, 72, 128, 66, 69, 72, 69, 200, 66, 69, - 72, 128, 66, 69, 200, 66, 69, 71, 73, 78, 78, 73, 78, 71, 128, 66, 69, - 71, 73, 78, 78, 69, 82, 128, 66, 69, 71, 73, 206, 66, 69, 70, 79, 82, - 197, 66, 69, 69, 84, 76, 69, 128, 66, 69, 69, 84, 65, 128, 66, 69, 69, - 210, 66, 69, 69, 72, 73, 86, 69, 128, 66, 69, 69, 72, 128, 66, 69, 69, - 200, 66, 69, 67, 65, 85, 83, 69, 128, 66, 69, 65, 86, 69, 210, 66, 69, - 65, 84, 73, 78, 199, 66, 69, 65, 84, 128, 66, 69, 65, 210, 66, 69, 65, - 78, 128, 66, 69, 65, 77, 69, 196, 66, 69, 65, 68, 83, 128, 66, 69, 65, - 67, 200, 66, 67, 65, 68, 128, 66, 67, 65, 196, 66, 66, 89, 88, 128, 66, - 66, 89, 84, 128, 66, 66, 89, 80, 128, 66, 66, 89, 128, 66, 66, 85, 88, - 128, 66, 66, 85, 84, 128, 66, 66, 85, 82, 88, 128, 66, 66, 85, 82, 128, - 66, 66, 85, 80, 128, 66, 66, 85, 79, 88, 128, 66, 66, 85, 79, 80, 128, - 66, 66, 85, 79, 128, 66, 66, 85, 128, 66, 66, 79, 88, 128, 66, 66, 79, - 84, 128, 66, 66, 79, 80, 128, 66, 66, 79, 128, 66, 66, 73, 88, 128, 66, - 66, 73, 80, 128, 66, 66, 73, 69, 88, 128, 66, 66, 73, 69, 84, 128, 66, - 66, 73, 69, 80, 128, 66, 66, 73, 69, 128, 66, 66, 73, 128, 66, 66, 69, - 88, 128, 66, 66, 69, 80, 128, 66, 66, 69, 69, 128, 66, 66, 69, 128, 66, - 66, 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, - 65, 128, 66, 66, 65, 128, 66, 65, 89, 65, 78, 78, 65, 128, 66, 65, 85, - 128, 66, 65, 84, 84, 69, 82, 89, 128, 66, 65, 84, 72, 84, 85, 66, 128, - 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65, 84, 72, 128, 66, 65, - 84, 200, 66, 65, 84, 65, 203, 66, 65, 83, 83, 65, 128, 66, 65, 83, 83, - 193, 66, 65, 83, 75, 69, 84, 66, 65, 76, 204, 66, 65, 83, 72, 75, 73, - 210, 66, 65, 83, 72, 128, 66, 65, 83, 69, 76, 73, 78, 197, 66, 65, 83, - 69, 66, 65, 76, 76, 128, 66, 65, 83, 69, 128, 66, 65, 83, 197, 66, 65, - 82, 83, 128, 66, 65, 82, 82, 73, 69, 82, 128, 66, 65, 82, 82, 69, 75, 72, - 128, 66, 65, 82, 82, 69, 69, 128, 66, 65, 82, 82, 69, 197, 66, 65, 82, - 76, 73, 78, 69, 128, 66, 65, 82, 76, 69, 89, 128, 66, 65, 82, 73, 89, 79, - 79, 83, 65, 78, 128, 66, 65, 82, 66, 69, 210, 66, 65, 82, 65, 50, 128, - 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, 65, 78, 75, 78, 79, 84, - 197, 66, 65, 78, 75, 128, 66, 65, 78, 203, 66, 65, 78, 68, 128, 66, 65, - 78, 65, 78, 65, 128, 66, 65, 78, 50, 128, 66, 65, 78, 178, 66, 65, 77, - 66, 79, 79, 83, 128, 66, 65, 77, 66, 79, 79, 128, 66, 65, 76, 85, 68, 65, - 128, 66, 65, 76, 76, 80, 79, 73, 78, 212, 66, 65, 76, 76, 79, 84, 128, - 66, 65, 76, 76, 79, 212, 66, 65, 76, 76, 79, 79, 78, 45, 83, 80, 79, 75, - 69, 196, 66, 65, 76, 76, 79, 79, 78, 128, 66, 65, 76, 65, 71, 128, 66, - 65, 76, 128, 66, 65, 204, 66, 65, 73, 82, 75, 65, 78, 128, 66, 65, 73, - 77, 65, 73, 128, 66, 65, 72, 84, 128, 66, 65, 72, 73, 82, 71, 79, 77, 85, - 75, 72, 65, 128, 66, 65, 72, 65, 82, 50, 128, 66, 65, 72, 65, 82, 178, - 66, 65, 72, 128, 66, 65, 71, 83, 128, 66, 65, 71, 71, 65, 71, 197, 66, - 65, 71, 65, 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 77, 73, - 78, 84, 79, 206, 66, 65, 68, 71, 69, 82, 128, 66, 65, 68, 71, 69, 128, - 66, 65, 68, 128, 66, 65, 196, 66, 65, 67, 84, 82, 73, 65, 206, 66, 65, - 67, 75, 87, 65, 82, 68, 128, 66, 65, 67, 75, 83, 80, 65, 67, 69, 128, 66, - 65, 67, 75, 83, 76, 65, 83, 72, 128, 66, 65, 67, 75, 83, 76, 65, 83, 200, - 66, 65, 67, 75, 83, 76, 65, 78, 84, 69, 196, 66, 65, 67, 75, 72, 65, 78, - 196, 66, 65, 67, 75, 45, 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, - 66, 65, 67, 203, 66, 65, 66, 89, 128, 66, 65, 66, 217, 66, 65, 65, 82, - 69, 82, 85, 128, 66, 65, 45, 50, 128, 66, 51, 48, 53, 128, 66, 50, 53, - 57, 128, 66, 50, 53, 56, 128, 66, 50, 53, 55, 128, 66, 50, 53, 54, 128, - 66, 50, 53, 53, 128, 66, 50, 53, 180, 66, 50, 53, 51, 128, 66, 50, 53, - 50, 128, 66, 50, 53, 49, 128, 66, 50, 53, 48, 128, 66, 50, 52, 57, 128, - 66, 50, 52, 56, 128, 66, 50, 52, 183, 66, 50, 52, 54, 128, 66, 50, 52, - 53, 128, 66, 50, 52, 179, 66, 50, 52, 178, 66, 50, 52, 177, 66, 50, 52, - 176, 66, 50, 51, 54, 128, 66, 50, 51, 52, 128, 66, 50, 51, 179, 66, 50, - 51, 50, 128, 66, 50, 51, 177, 66, 50, 51, 176, 66, 50, 50, 57, 128, 66, - 50, 50, 56, 128, 66, 50, 50, 55, 128, 66, 50, 50, 54, 128, 66, 50, 50, - 181, 66, 50, 50, 50, 128, 66, 50, 50, 49, 128, 66, 50, 50, 176, 66, 50, - 49, 57, 128, 66, 50, 49, 56, 128, 66, 50, 49, 55, 128, 66, 50, 49, 54, - 128, 66, 50, 49, 53, 128, 66, 50, 49, 52, 128, 66, 50, 49, 51, 128, 66, - 50, 49, 50, 128, 66, 50, 49, 49, 128, 66, 50, 49, 48, 128, 66, 50, 48, - 57, 128, 66, 50, 48, 56, 128, 66, 50, 48, 55, 128, 66, 50, 48, 54, 128, - 66, 50, 48, 53, 128, 66, 50, 48, 52, 128, 66, 50, 48, 51, 128, 66, 50, - 48, 50, 128, 66, 50, 48, 49, 128, 66, 50, 48, 48, 128, 66, 49, 57, 177, - 66, 49, 57, 48, 128, 66, 49, 56, 57, 128, 66, 49, 56, 53, 128, 66, 49, - 56, 52, 128, 66, 49, 56, 51, 128, 66, 49, 56, 50, 128, 66, 49, 56, 49, - 128, 66, 49, 56, 48, 128, 66, 49, 55, 57, 128, 66, 49, 55, 56, 128, 66, - 49, 55, 55, 128, 66, 49, 55, 182, 66, 49, 55, 52, 128, 66, 49, 55, 179, - 66, 49, 55, 50, 128, 66, 49, 55, 49, 128, 66, 49, 55, 48, 128, 66, 49, - 54, 57, 128, 66, 49, 54, 56, 128, 66, 49, 54, 55, 128, 66, 49, 54, 54, - 128, 66, 49, 54, 53, 128, 66, 49, 54, 52, 128, 66, 49, 54, 179, 66, 49, - 54, 178, 66, 49, 54, 49, 128, 66, 49, 54, 48, 128, 66, 49, 53, 185, 66, - 49, 53, 56, 128, 66, 49, 53, 55, 128, 66, 49, 53, 182, 66, 49, 53, 53, - 128, 66, 49, 53, 52, 128, 66, 49, 53, 51, 128, 66, 49, 53, 50, 128, 66, - 49, 53, 177, 66, 49, 53, 48, 128, 66, 49, 52, 54, 128, 66, 49, 52, 181, - 66, 49, 52, 50, 128, 66, 49, 52, 177, 66, 49, 52, 176, 66, 49, 51, 181, - 66, 49, 51, 179, 66, 49, 51, 50, 128, 66, 49, 51, 177, 66, 49, 51, 176, - 66, 49, 50, 184, 66, 49, 50, 183, 66, 49, 50, 181, 66, 49, 50, 179, 66, - 49, 50, 178, 66, 49, 50, 177, 66, 49, 50, 176, 66, 49, 48, 57, 205, 66, - 49, 48, 57, 198, 66, 49, 48, 56, 205, 66, 49, 48, 56, 198, 66, 49, 48, - 55, 205, 66, 49, 48, 55, 198, 66, 49, 48, 54, 205, 66, 49, 48, 54, 198, - 66, 49, 48, 53, 205, 66, 49, 48, 53, 198, 66, 49, 48, 181, 66, 49, 48, - 180, 66, 49, 48, 178, 66, 49, 48, 176, 66, 48, 57, 177, 66, 48, 57, 176, - 66, 48, 56, 57, 128, 66, 48, 56, 183, 66, 48, 56, 54, 128, 66, 48, 56, - 181, 66, 48, 56, 51, 128, 66, 48, 56, 50, 128, 66, 48, 56, 177, 66, 48, - 56, 176, 66, 48, 55, 57, 128, 66, 48, 55, 184, 66, 48, 55, 183, 66, 48, - 55, 182, 66, 48, 55, 181, 66, 48, 55, 180, 66, 48, 55, 179, 66, 48, 55, - 178, 66, 48, 55, 177, 66, 48, 55, 176, 66, 48, 54, 185, 66, 48, 54, 184, - 66, 48, 54, 183, 66, 48, 54, 182, 66, 48, 54, 181, 66, 48, 54, 52, 128, - 66, 48, 54, 51, 128, 66, 48, 54, 178, 66, 48, 54, 177, 66, 48, 54, 176, - 66, 48, 53, 185, 66, 48, 53, 184, 66, 48, 53, 183, 66, 48, 53, 54, 128, - 66, 48, 53, 181, 66, 48, 53, 180, 66, 48, 53, 179, 66, 48, 53, 178, 66, - 48, 53, 177, 66, 48, 53, 176, 66, 48, 52, 57, 128, 66, 48, 52, 184, 66, - 48, 52, 55, 128, 66, 48, 52, 182, 66, 48, 52, 181, 66, 48, 52, 180, 66, - 48, 52, 179, 66, 48, 52, 178, 66, 48, 52, 177, 66, 48, 52, 176, 66, 48, - 51, 185, 66, 48, 51, 184, 66, 48, 51, 183, 66, 48, 51, 182, 66, 48, 51, - 52, 128, 66, 48, 51, 179, 66, 48, 51, 178, 66, 48, 51, 177, 66, 48, 51, - 176, 66, 48, 50, 185, 66, 48, 50, 184, 66, 48, 50, 183, 66, 48, 50, 182, - 66, 48, 50, 181, 66, 48, 50, 180, 66, 48, 50, 179, 66, 48, 50, 50, 128, - 66, 48, 50, 177, 66, 48, 50, 176, 66, 48, 49, 57, 128, 66, 48, 49, 56, - 128, 66, 48, 49, 183, 66, 48, 49, 182, 66, 48, 49, 181, 66, 48, 49, 180, - 66, 48, 49, 179, 66, 48, 49, 178, 66, 48, 49, 177, 66, 48, 49, 176, 66, - 48, 48, 57, 128, 66, 48, 48, 185, 66, 48, 48, 56, 128, 66, 48, 48, 184, - 66, 48, 48, 55, 128, 66, 48, 48, 183, 66, 48, 48, 54, 128, 66, 48, 48, - 182, 66, 48, 48, 53, 65, 128, 66, 48, 48, 53, 128, 66, 48, 48, 181, 66, - 48, 48, 52, 128, 66, 48, 48, 180, 66, 48, 48, 51, 128, 66, 48, 48, 179, - 66, 48, 48, 50, 128, 66, 48, 48, 178, 66, 48, 48, 49, 128, 66, 48, 48, - 177, 65, 90, 85, 128, 65, 89, 66, 128, 65, 89, 65, 72, 128, 65, 88, 69, - 128, 65, 87, 69, 128, 65, 87, 65, 217, 65, 86, 69, 83, 84, 65, 206, 65, - 86, 69, 82, 65, 71, 197, 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89, - 65, 128, 65, 86, 65, 71, 82, 65, 72, 65, 128, 65, 85, 89, 65, 78, 78, 65, - 128, 65, 85, 84, 85, 77, 78, 128, 65, 85, 84, 79, 77, 79, 66, 73, 76, 69, - 128, 65, 85, 84, 79, 77, 65, 84, 69, 196, 65, 85, 83, 84, 82, 65, 204, - 65, 85, 82, 73, 80, 73, 71, 77, 69, 78, 84, 128, 65, 85, 82, 65, 77, 65, - 90, 68, 65, 65, 72, 65, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 45, - 50, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 128, 65, 85, 78, 78, - 128, 65, 85, 71, 85, 83, 84, 128, 65, 85, 71, 77, 69, 78, 84, 65, 84, 73, - 79, 206, 65, 85, 69, 128, 65, 85, 66, 69, 82, 71, 73, 78, 69, 128, 65, - 84, 84, 73, 195, 65, 84, 84, 72, 65, 67, 65, 78, 128, 65, 84, 84, 69, 78, - 84, 73, 79, 78, 128, 65, 84, 84, 65, 203, 65, 84, 84, 65, 67, 72, 69, - 196, 65, 84, 79, 205, 65, 84, 78, 65, 200, 65, 84, 77, 65, 65, 85, 128, - 65, 84, 73, 89, 65, 128, 65, 84, 72, 76, 69, 84, 73, 195, 65, 84, 72, 65, - 82, 86, 65, 86, 69, 68, 73, 195, 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, - 65, 83, 90, 128, 65, 83, 89, 85, 82, 193, 65, 83, 89, 77, 80, 84, 79, 84, - 73, 67, 65, 76, 76, 217, 65, 83, 84, 82, 79, 78, 79, 77, 73, 67, 65, 204, - 65, 83, 84, 82, 79, 76, 79, 71, 73, 67, 65, 204, 65, 83, 84, 79, 78, 73, - 83, 72, 69, 196, 65, 83, 84, 69, 82, 73, 83, 77, 128, 65, 83, 84, 69, 82, - 73, 83, 75, 211, 65, 83, 84, 69, 82, 73, 83, 75, 128, 65, 83, 84, 69, 82, - 73, 83, 203, 65, 83, 84, 69, 82, 73, 83, 67, 85, 83, 128, 65, 83, 83, 89, - 82, 73, 65, 206, 65, 83, 83, 69, 82, 84, 73, 79, 78, 128, 65, 83, 80, 73, - 82, 65, 84, 73, 79, 78, 128, 65, 83, 80, 73, 82, 65, 84, 69, 196, 65, 83, - 80, 69, 82, 128, 65, 83, 73, 65, 45, 65, 85, 83, 84, 82, 65, 76, 73, 65, - 128, 65, 83, 72, 71, 65, 66, 128, 65, 83, 72, 69, 83, 128, 65, 83, 72, - 57, 128, 65, 83, 72, 51, 128, 65, 83, 72, 178, 65, 83, 67, 69, 78, 84, - 128, 65, 83, 67, 69, 78, 68, 73, 78, 199, 65, 83, 65, 76, 50, 128, 65, - 82, 85, 72, 85, 65, 128, 65, 82, 84, 73, 83, 212, 65, 82, 84, 73, 67, 85, + 72, 69, 81, 85, 69, 82, 69, 196, 67, 72, 69, 80, 128, 67, 72, 69, 73, 78, + 65, 80, 128, 67, 72, 69, 73, 75, 72, 69, 73, 128, 67, 72, 69, 73, 75, 72, + 65, 78, 128, 67, 72, 69, 69, 83, 197, 67, 72, 69, 69, 82, 73, 78, 199, + 67, 72, 69, 69, 77, 128, 67, 72, 69, 69, 75, 211, 67, 72, 69, 69, 75, + 128, 67, 72, 69, 69, 128, 67, 72, 69, 67, 75, 69, 210, 67, 72, 69, 67, + 75, 128, 67, 72, 69, 67, 203, 67, 72, 197, 67, 72, 65, 88, 128, 67, 72, + 65, 86, 73, 89, 65, 78, 73, 128, 67, 72, 65, 84, 84, 65, 87, 65, 128, 67, + 72, 65, 84, 128, 67, 72, 65, 82, 84, 128, 67, 72, 65, 82, 212, 67, 72, + 65, 82, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, 67, 72, 65, 82, 65, + 67, 84, 69, 82, 83, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 128, 67, 72, + 65, 82, 128, 67, 72, 65, 80, 84, 69, 82, 128, 67, 72, 65, 80, 128, 67, + 72, 65, 78, 71, 128, 67, 72, 65, 78, 128, 67, 72, 65, 77, 75, 79, 128, + 67, 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65, 77, 73, 76, 73, 128, 67, + 72, 65, 205, 67, 72, 65, 75, 77, 193, 67, 72, 65, 73, 82, 128, 67, 72, + 65, 73, 78, 83, 128, 67, 72, 65, 68, 65, 128, 67, 72, 65, 196, 67, 72, + 65, 65, 128, 67, 71, 74, 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 128, + 67, 69, 82, 69, 77, 79, 78, 89, 128, 67, 69, 82, 69, 75, 128, 67, 69, 82, + 45, 87, 65, 128, 67, 69, 80, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, + 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, + 73, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 67, 69, 79, + 78, 71, 67, 72, 73, 69, 85, 77, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, + 67, 72, 73, 69, 85, 77, 67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, + 72, 73, 69, 85, 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 69, 78, 84, 85, + 82, 73, 65, 204, 67, 69, 78, 84, 82, 69, 76, 73, 78, 197, 67, 69, 78, 84, + 82, 69, 68, 128, 67, 69, 78, 84, 82, 69, 196, 67, 69, 78, 84, 82, 69, + 128, 67, 69, 78, 84, 82, 197, 67, 69, 78, 84, 82, 65, 76, 73, 90, 65, 84, + 73, 79, 206, 67, 69, 78, 128, 67, 69, 76, 84, 73, 195, 67, 69, 76, 83, + 73, 85, 83, 128, 67, 69, 76, 69, 66, 82, 65, 84, 73, 79, 78, 128, 67, 69, + 73, 82, 84, 128, 67, 69, 73, 76, 73, 78, 71, 128, 67, 69, 73, 76, 73, 78, + 199, 67, 69, 69, 86, 128, 67, 69, 69, 66, 128, 67, 69, 69, 128, 67, 69, + 68, 73, 76, 76, 65, 128, 67, 69, 68, 73, 76, 76, 193, 67, 69, 68, 201, + 67, 69, 67, 69, 75, 128, 67, 69, 67, 65, 75, 128, 67, 69, 67, 65, 203, + 67, 69, 65, 76, 67, 128, 67, 67, 85, 128, 67, 67, 79, 128, 67, 67, 73, + 128, 67, 67, 72, 85, 128, 67, 67, 72, 79, 128, 67, 67, 72, 73, 128, 67, + 67, 72, 72, 85, 128, 67, 67, 72, 72, 79, 128, 67, 67, 72, 72, 73, 128, + 67, 67, 72, 72, 69, 69, 128, 67, 67, 72, 72, 69, 128, 67, 67, 72, 72, 65, + 65, 128, 67, 67, 72, 72, 65, 128, 67, 67, 72, 69, 69, 128, 67, 67, 72, + 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, 65, 128, 67, 67, 72, 128, + 67, 67, 69, 69, 128, 67, 67, 69, 128, 67, 67, 65, 65, 128, 67, 67, 65, + 128, 67, 65, 89, 78, 128, 67, 65, 89, 65, 78, 78, 65, 128, 67, 65, 88, + 128, 67, 65, 86, 69, 128, 67, 65, 85, 84, 73, 79, 206, 67, 65, 85, 76, + 68, 82, 79, 78, 128, 67, 65, 85, 68, 65, 128, 67, 65, 85, 67, 65, 83, 73, + 65, 206, 67, 65, 85, 128, 67, 65, 84, 65, 87, 65, 128, 67, 65, 84, 128, + 67, 65, 212, 67, 65, 83, 84, 76, 69, 128, 67, 65, 83, 75, 69, 212, 67, + 65, 82, 89, 83, 84, 73, 65, 206, 67, 65, 82, 84, 87, 72, 69, 69, 76, 128, + 67, 65, 82, 84, 82, 73, 68, 71, 69, 128, 67, 65, 82, 84, 128, 67, 65, 82, + 211, 67, 65, 82, 82, 79, 84, 128, 67, 65, 82, 82, 73, 65, 71, 197, 67, + 65, 82, 80, 69, 78, 84, 82, 217, 67, 65, 82, 208, 67, 65, 82, 79, 85, 83, + 69, 204, 67, 65, 82, 79, 78, 128, 67, 65, 82, 79, 206, 67, 65, 82, 73, + 203, 67, 65, 82, 73, 65, 206, 67, 65, 82, 69, 84, 128, 67, 65, 82, 69, + 212, 67, 65, 82, 197, 67, 65, 82, 68, 83, 128, 67, 65, 82, 68, 128, 67, + 65, 82, 196, 67, 65, 82, 128, 67, 65, 210, 67, 65, 80, 85, 212, 67, 65, + 80, 84, 73, 86, 69, 128, 67, 65, 80, 82, 73, 67, 79, 82, 78, 128, 67, 65, + 80, 80, 69, 196, 67, 65, 80, 79, 128, 67, 65, 80, 73, 84, 85, 76, 85, 77, + 128, 67, 65, 80, 73, 84, 65, 76, 128, 67, 65, 78, 84, 73, 76, 76, 65, 84, + 73, 79, 206, 67, 65, 78, 79, 69, 128, 67, 65, 78, 199, 67, 65, 78, 68, + 89, 128, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 85, 128, 67, 65, 78, 68, + 82, 65, 66, 73, 78, 68, 213, 67, 65, 78, 68, 82, 65, 128, 67, 65, 78, 68, + 82, 193, 67, 65, 78, 68, 76, 69, 128, 67, 65, 78, 67, 69, 82, 128, 67, + 65, 78, 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 67, 69, 76, 128, + 67, 65, 78, 67, 69, 204, 67, 65, 78, 128, 67, 65, 77, 80, 73, 78, 71, + 128, 67, 65, 77, 78, 85, 195, 67, 65, 77, 69, 82, 65, 128, 67, 65, 77, + 69, 82, 193, 67, 65, 77, 69, 76, 128, 67, 65, 76, 89, 65, 128, 67, 65, + 76, 89, 193, 67, 65, 76, 88, 128, 67, 65, 76, 76, 128, 67, 65, 76, 204, + 67, 65, 76, 69, 78, 68, 65, 82, 128, 67, 65, 76, 69, 78, 68, 65, 210, 67, + 65, 76, 67, 85, 76, 65, 84, 79, 82, 128, 67, 65, 76, 67, 128, 67, 65, 75, + 82, 65, 128, 67, 65, 75, 197, 67, 65, 73, 128, 67, 65, 72, 128, 67, 65, + 69, 83, 85, 82, 65, 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, + 193, 67, 65, 67, 84, 85, 83, 128, 67, 65, 66, 76, 69, 87, 65, 89, 128, + 67, 65, 66, 73, 78, 69, 84, 128, 67, 65, 66, 66, 65, 71, 69, 45, 84, 82, + 69, 69, 128, 67, 65, 65, 78, 71, 128, 67, 65, 65, 73, 128, 67, 193, 67, + 48, 50, 52, 128, 67, 48, 50, 51, 128, 67, 48, 50, 50, 128, 67, 48, 50, + 49, 128, 67, 48, 50, 48, 128, 67, 48, 49, 57, 128, 67, 48, 49, 56, 128, + 67, 48, 49, 55, 128, 67, 48, 49, 54, 128, 67, 48, 49, 53, 128, 67, 48, + 49, 52, 128, 67, 48, 49, 51, 128, 67, 48, 49, 50, 128, 67, 48, 49, 49, + 128, 67, 48, 49, 48, 65, 128, 67, 48, 49, 48, 128, 67, 48, 48, 57, 128, + 67, 48, 48, 56, 128, 67, 48, 48, 55, 128, 67, 48, 48, 54, 128, 67, 48, + 48, 53, 128, 67, 48, 48, 52, 128, 67, 48, 48, 51, 128, 67, 48, 48, 50, + 67, 128, 67, 48, 48, 50, 66, 128, 67, 48, 48, 50, 65, 128, 67, 48, 48, + 50, 128, 67, 48, 48, 49, 128, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, + 196, 67, 45, 51, 57, 128, 67, 45, 49, 56, 128, 66, 90, 85, 78, 199, 66, + 90, 72, 201, 66, 89, 84, 197, 66, 89, 69, 76, 79, 82, 85, 83, 83, 73, 65, + 78, 45, 85, 75, 82, 65, 73, 78, 73, 65, 206, 66, 88, 71, 128, 66, 87, 73, + 128, 66, 87, 69, 69, 128, 66, 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, + 77, 73, 83, 72, 128, 66, 85, 84, 84, 79, 78, 128, 66, 85, 84, 84, 79, + 206, 66, 85, 84, 84, 69, 82, 70, 76, 89, 128, 66, 85, 212, 66, 85, 83, + 84, 211, 66, 85, 83, 212, 66, 85, 83, 83, 89, 69, 82, 85, 128, 66, 85, + 83, 73, 78, 69, 83, 211, 66, 85, 211, 66, 85, 82, 213, 66, 85, 82, 82, + 73, 84, 79, 128, 66, 85, 82, 50, 128, 66, 85, 210, 66, 85, 79, 88, 128, + 66, 85, 79, 80, 128, 66, 85, 78, 78, 217, 66, 85, 78, 71, 128, 66, 85, + 77, 80, 217, 66, 85, 76, 85, 71, 128, 66, 85, 76, 85, 199, 66, 85, 76, + 76, 83, 69, 89, 69, 128, 66, 85, 76, 76, 211, 66, 85, 76, 76, 72, 79, 82, + 78, 128, 66, 85, 76, 76, 72, 79, 82, 206, 66, 85, 76, 76, 69, 84, 128, + 66, 85, 76, 76, 69, 212, 66, 85, 76, 76, 128, 66, 85, 76, 66, 128, 66, + 85, 75, 89, 128, 66, 85, 73, 76, 68, 73, 78, 71, 83, 128, 66, 85, 73, 76, + 68, 73, 78, 71, 128, 66, 85, 73, 76, 68, 73, 78, 199, 66, 85, 72, 73, + 196, 66, 85, 71, 73, 78, 69, 83, 197, 66, 85, 71, 128, 66, 85, 70, 70, + 65, 76, 79, 128, 66, 85, 68, 128, 66, 85, 67, 75, 76, 69, 128, 66, 85, + 66, 66, 76, 69, 83, 128, 66, 85, 66, 66, 76, 69, 128, 66, 83, 84, 65, 82, + 128, 66, 83, 75, 85, 210, 66, 83, 75, 65, 173, 66, 83, 68, 85, 211, 66, + 82, 85, 83, 200, 66, 82, 79, 78, 90, 69, 128, 66, 82, 79, 75, 69, 206, + 66, 82, 79, 65, 196, 66, 82, 73, 83, 84, 76, 69, 128, 66, 82, 73, 71, 72, + 84, 78, 69, 83, 211, 66, 82, 73, 69, 70, 67, 65, 83, 69, 128, 66, 82, 73, + 68, 71, 197, 66, 82, 73, 68, 197, 66, 82, 73, 67, 75, 128, 66, 82, 69, + 86, 73, 83, 128, 66, 82, 69, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 66, + 82, 69, 86, 197, 66, 82, 69, 65, 84, 200, 66, 82, 69, 65, 75, 84, 72, 82, + 79, 85, 71, 72, 128, 66, 82, 68, 193, 66, 82, 65, 78, 67, 72, 73, 78, + 199, 66, 82, 65, 78, 67, 72, 69, 83, 128, 66, 82, 65, 78, 67, 72, 128, + 66, 82, 65, 78, 67, 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, + 75, 69, 84, 69, 196, 66, 82, 65, 67, 75, 69, 212, 66, 82, 65, 67, 69, + 128, 66, 81, 128, 66, 80, 72, 128, 66, 79, 89, 211, 66, 79, 89, 128, 66, + 79, 88, 73, 78, 199, 66, 79, 87, 84, 73, 69, 128, 66, 79, 87, 84, 73, + 197, 66, 79, 87, 76, 73, 78, 71, 128, 66, 79, 87, 76, 128, 66, 79, 87, + 204, 66, 79, 87, 73, 78, 199, 66, 79, 215, 66, 79, 85, 81, 85, 69, 84, + 128, 66, 79, 85, 81, 85, 69, 212, 66, 79, 85, 78, 68, 65, 82, 217, 66, + 79, 84, 84, 79, 77, 45, 83, 72, 65, 68, 69, 196, 66, 79, 84, 84, 79, 77, + 45, 76, 73, 71, 72, 84, 69, 196, 66, 79, 84, 84, 79, 77, 128, 66, 79, 84, + 84, 79, 205, 66, 79, 84, 84, 76, 69, 128, 66, 79, 84, 84, 76, 197, 66, + 79, 84, 200, 66, 79, 82, 85, 84, 79, 128, 66, 79, 82, 65, 88, 45, 51, + 128, 66, 79, 82, 65, 88, 45, 50, 128, 66, 79, 82, 65, 88, 128, 66, 79, + 80, 79, 77, 79, 70, 207, 66, 79, 79, 84, 83, 128, 66, 79, 79, 84, 128, + 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 66, 79, 79, 75, 83, 128, 66, 79, + 79, 75, 77, 65, 82, 75, 128, 66, 79, 79, 75, 77, 65, 82, 203, 66, 79, 78, + 69, 128, 66, 79, 77, 66, 128, 66, 79, 77, 128, 66, 79, 76, 84, 128, 66, + 79, 76, 212, 66, 79, 72, 65, 73, 82, 73, 195, 66, 79, 68, 89, 128, 66, + 79, 68, 217, 66, 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, + 66, 76, 85, 197, 66, 76, 79, 87, 73, 78, 199, 66, 76, 79, 87, 70, 73, 83, + 72, 128, 66, 76, 79, 215, 66, 76, 79, 83, 83, 79, 77, 128, 66, 76, 79, + 79, 68, 128, 66, 76, 79, 78, 196, 66, 76, 79, 67, 75, 128, 66, 76, 73, + 78, 203, 66, 76, 65, 78, 75, 128, 66, 76, 65, 78, 203, 66, 76, 65, 68, + 197, 66, 76, 65, 67, 75, 76, 69, 84, 84, 69, 210, 66, 76, 65, 67, 75, 70, + 79, 79, 212, 66, 76, 65, 67, 75, 45, 76, 69, 84, 84, 69, 210, 66, 76, 65, + 67, 75, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 66, 76, 65, 67, 75, 128, + 66, 75, 65, 173, 66, 73, 84, 84, 69, 82, 128, 66, 73, 84, 73, 78, 199, + 66, 73, 84, 197, 66, 73, 83, 77, 85, 84, 200, 66, 73, 83, 77, 73, 76, 76, + 65, 200, 66, 73, 83, 72, 79, 80, 128, 66, 73, 83, 69, 67, 84, 73, 78, + 199, 66, 73, 83, 65, 72, 128, 66, 73, 82, 85, 128, 66, 73, 82, 84, 72, + 68, 65, 217, 66, 73, 82, 71, 65, 128, 66, 73, 82, 71, 193, 66, 73, 82, + 68, 128, 66, 73, 79, 72, 65, 90, 65, 82, 196, 66, 73, 78, 79, 67, 85, 76, + 65, 210, 66, 73, 78, 68, 73, 78, 199, 66, 73, 78, 68, 73, 128, 66, 73, + 78, 65, 82, 217, 66, 73, 76, 76, 73, 79, 78, 83, 128, 66, 73, 76, 76, 73, + 65, 82, 68, 83, 128, 66, 73, 76, 65, 66, 73, 65, 204, 66, 73, 75, 73, 78, + 73, 128, 66, 73, 71, 128, 66, 73, 199, 66, 73, 69, 84, 128, 66, 73, 68, + 69, 78, 84, 65, 204, 66, 73, 68, 65, 75, 85, 79, 206, 66, 73, 67, 89, 67, + 76, 73, 83, 84, 128, 66, 73, 67, 89, 67, 76, 69, 83, 128, 66, 73, 67, 89, + 67, 76, 69, 128, 66, 73, 67, 69, 80, 83, 128, 66, 73, 66, 76, 69, 45, 67, + 82, 69, 197, 66, 73, 66, 128, 66, 201, 66, 72, 85, 128, 66, 72, 79, 79, + 128, 66, 72, 79, 128, 66, 72, 73, 128, 66, 72, 69, 84, 72, 128, 66, 72, + 69, 69, 128, 66, 72, 69, 128, 66, 72, 65, 84, 84, 73, 80, 82, 79, 76, + 213, 66, 72, 65, 77, 128, 66, 72, 65, 65, 128, 66, 72, 65, 128, 66, 69, + 89, 89, 65, 76, 128, 66, 69, 88, 128, 66, 69, 86, 69, 82, 65, 71, 69, + 128, 66, 69, 84, 87, 69, 69, 78, 128, 66, 69, 84, 87, 69, 69, 206, 66, + 69, 84, 72, 128, 66, 69, 84, 65, 128, 66, 69, 84, 193, 66, 69, 212, 66, + 69, 83, 73, 68, 197, 66, 69, 82, 75, 65, 78, 65, 206, 66, 69, 82, 66, 69, + 210, 66, 69, 80, 128, 66, 69, 79, 82, 195, 66, 69, 78, 90, 69, 78, 197, + 66, 69, 78, 84, 207, 66, 69, 78, 84, 128, 66, 69, 78, 212, 66, 69, 78, + 68, 69, 128, 66, 69, 78, 68, 128, 66, 69, 78, 196, 66, 69, 206, 66, 69, + 76, 84, 128, 66, 69, 76, 212, 66, 69, 76, 79, 215, 66, 69, 76, 76, 72, + 79, 208, 66, 69, 76, 76, 128, 66, 69, 76, 204, 66, 69, 76, 71, 84, 72, + 79, 210, 66, 69, 73, 84, 72, 128, 66, 69, 72, 73, 78, 196, 66, 69, 72, + 69, 72, 128, 66, 69, 72, 69, 200, 66, 69, 72, 128, 66, 69, 200, 66, 69, + 71, 73, 78, 78, 73, 78, 71, 128, 66, 69, 71, 73, 78, 78, 69, 82, 128, 66, + 69, 71, 73, 206, 66, 69, 70, 79, 82, 197, 66, 69, 69, 84, 76, 69, 128, + 66, 69, 69, 84, 65, 128, 66, 69, 69, 210, 66, 69, 69, 72, 73, 86, 69, + 128, 66, 69, 69, 72, 128, 66, 69, 69, 200, 66, 69, 67, 65, 85, 83, 69, + 128, 66, 69, 65, 86, 69, 210, 66, 69, 65, 84, 73, 78, 199, 66, 69, 65, + 84, 128, 66, 69, 65, 210, 66, 69, 65, 78, 128, 66, 69, 65, 77, 69, 196, + 66, 69, 65, 68, 83, 128, 66, 69, 65, 67, 200, 66, 67, 65, 68, 128, 66, + 67, 65, 196, 66, 66, 89, 88, 128, 66, 66, 89, 84, 128, 66, 66, 89, 80, + 128, 66, 66, 89, 128, 66, 66, 85, 88, 128, 66, 66, 85, 84, 128, 66, 66, + 85, 82, 88, 128, 66, 66, 85, 82, 128, 66, 66, 85, 80, 128, 66, 66, 85, + 79, 88, 128, 66, 66, 85, 79, 80, 128, 66, 66, 85, 79, 128, 66, 66, 85, + 128, 66, 66, 79, 88, 128, 66, 66, 79, 84, 128, 66, 66, 79, 80, 128, 66, + 66, 79, 128, 66, 66, 73, 88, 128, 66, 66, 73, 80, 128, 66, 66, 73, 69, + 88, 128, 66, 66, 73, 69, 84, 128, 66, 66, 73, 69, 80, 128, 66, 66, 73, + 69, 128, 66, 66, 73, 128, 66, 66, 69, 88, 128, 66, 66, 69, 80, 128, 66, + 66, 69, 69, 128, 66, 66, 69, 128, 66, 66, 65, 88, 128, 66, 66, 65, 84, + 128, 66, 66, 65, 80, 128, 66, 66, 65, 65, 128, 66, 66, 65, 128, 66, 65, + 89, 65, 78, 78, 65, 128, 66, 65, 85, 128, 66, 65, 84, 84, 69, 82, 89, + 128, 66, 65, 84, 72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, + 84, 128, 66, 65, 84, 72, 128, 66, 65, 84, 200, 66, 65, 84, 65, 203, 66, + 65, 83, 83, 65, 128, 66, 65, 83, 83, 193, 66, 65, 83, 75, 69, 84, 66, 65, + 76, 204, 66, 65, 83, 72, 75, 73, 210, 66, 65, 83, 72, 128, 66, 65, 83, + 69, 76, 73, 78, 197, 66, 65, 83, 69, 66, 65, 76, 76, 128, 66, 65, 83, 69, + 128, 66, 65, 83, 197, 66, 65, 82, 83, 128, 66, 65, 82, 82, 73, 69, 82, + 128, 66, 65, 82, 82, 69, 75, 72, 128, 66, 65, 82, 82, 69, 69, 128, 66, + 65, 82, 82, 69, 197, 66, 65, 82, 76, 73, 78, 69, 128, 66, 65, 82, 76, 69, + 89, 128, 66, 65, 82, 73, 89, 79, 79, 83, 65, 78, 128, 66, 65, 82, 66, 69, + 210, 66, 65, 82, 65, 50, 128, 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, + 66, 65, 78, 75, 78, 79, 84, 197, 66, 65, 78, 75, 128, 66, 65, 78, 203, + 66, 65, 78, 68, 128, 66, 65, 78, 65, 78, 65, 128, 66, 65, 78, 50, 128, + 66, 65, 78, 178, 66, 65, 77, 66, 79, 79, 83, 128, 66, 65, 77, 66, 79, 79, + 128, 66, 65, 76, 85, 68, 65, 128, 66, 65, 76, 76, 80, 79, 73, 78, 212, + 66, 65, 76, 76, 79, 84, 128, 66, 65, 76, 76, 79, 212, 66, 65, 76, 76, 79, + 79, 78, 45, 83, 80, 79, 75, 69, 196, 66, 65, 76, 76, 79, 79, 78, 128, 66, + 65, 76, 65, 71, 128, 66, 65, 76, 128, 66, 65, 204, 66, 65, 73, 82, 75, + 65, 78, 128, 66, 65, 73, 77, 65, 73, 128, 66, 65, 72, 84, 128, 66, 65, + 72, 73, 82, 71, 79, 77, 85, 75, 72, 65, 128, 66, 65, 72, 65, 82, 50, 128, + 66, 65, 72, 65, 82, 178, 66, 65, 72, 128, 66, 65, 71, 85, 69, 84, 84, + 197, 66, 65, 71, 83, 128, 66, 65, 71, 71, 65, 71, 197, 66, 65, 71, 65, + 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 77, 73, 78, 84, 79, + 206, 66, 65, 68, 71, 69, 82, 128, 66, 65, 68, 71, 69, 128, 66, 65, 68, + 128, 66, 65, 196, 66, 65, 67, 84, 82, 73, 65, 206, 66, 65, 67, 79, 78, + 128, 66, 65, 67, 75, 87, 65, 82, 68, 128, 66, 65, 67, 75, 83, 80, 65, 67, + 69, 128, 66, 65, 67, 75, 83, 76, 65, 83, 72, 128, 66, 65, 67, 75, 83, 76, + 65, 83, 200, 66, 65, 67, 75, 83, 76, 65, 78, 84, 69, 196, 66, 65, 67, 75, + 72, 65, 78, 196, 66, 65, 67, 75, 45, 84, 73, 76, 84, 69, 196, 66, 65, 67, + 75, 128, 66, 65, 67, 203, 66, 65, 66, 89, 128, 66, 65, 66, 217, 66, 65, + 65, 82, 69, 82, 85, 128, 66, 65, 45, 50, 128, 66, 51, 48, 53, 128, 66, + 50, 53, 57, 128, 66, 50, 53, 56, 128, 66, 50, 53, 55, 128, 66, 50, 53, + 54, 128, 66, 50, 53, 53, 128, 66, 50, 53, 180, 66, 50, 53, 51, 128, 66, + 50, 53, 50, 128, 66, 50, 53, 49, 128, 66, 50, 53, 48, 128, 66, 50, 52, + 57, 128, 66, 50, 52, 56, 128, 66, 50, 52, 183, 66, 50, 52, 54, 128, 66, + 50, 52, 53, 128, 66, 50, 52, 179, 66, 50, 52, 178, 66, 50, 52, 177, 66, + 50, 52, 176, 66, 50, 51, 54, 128, 66, 50, 51, 52, 128, 66, 50, 51, 179, + 66, 50, 51, 50, 128, 66, 50, 51, 177, 66, 50, 51, 176, 66, 50, 50, 57, + 128, 66, 50, 50, 56, 128, 66, 50, 50, 55, 128, 66, 50, 50, 54, 128, 66, + 50, 50, 181, 66, 50, 50, 50, 128, 66, 50, 50, 49, 128, 66, 50, 50, 176, + 66, 50, 49, 57, 128, 66, 50, 49, 56, 128, 66, 50, 49, 55, 128, 66, 50, + 49, 54, 128, 66, 50, 49, 53, 128, 66, 50, 49, 52, 128, 66, 50, 49, 51, + 128, 66, 50, 49, 50, 128, 66, 50, 49, 49, 128, 66, 50, 49, 48, 128, 66, + 50, 48, 57, 128, 66, 50, 48, 56, 128, 66, 50, 48, 55, 128, 66, 50, 48, + 54, 128, 66, 50, 48, 53, 128, 66, 50, 48, 52, 128, 66, 50, 48, 51, 128, + 66, 50, 48, 50, 128, 66, 50, 48, 49, 128, 66, 50, 48, 48, 128, 66, 49, + 57, 177, 66, 49, 57, 48, 128, 66, 49, 56, 57, 128, 66, 49, 56, 53, 128, + 66, 49, 56, 52, 128, 66, 49, 56, 51, 128, 66, 49, 56, 50, 128, 66, 49, + 56, 49, 128, 66, 49, 56, 48, 128, 66, 49, 55, 57, 128, 66, 49, 55, 56, + 128, 66, 49, 55, 55, 128, 66, 49, 55, 182, 66, 49, 55, 52, 128, 66, 49, + 55, 179, 66, 49, 55, 50, 128, 66, 49, 55, 49, 128, 66, 49, 55, 48, 128, + 66, 49, 54, 57, 128, 66, 49, 54, 56, 128, 66, 49, 54, 55, 128, 66, 49, + 54, 54, 128, 66, 49, 54, 53, 128, 66, 49, 54, 52, 128, 66, 49, 54, 179, + 66, 49, 54, 178, 66, 49, 54, 49, 128, 66, 49, 54, 48, 128, 66, 49, 53, + 185, 66, 49, 53, 56, 128, 66, 49, 53, 55, 128, 66, 49, 53, 182, 66, 49, + 53, 53, 128, 66, 49, 53, 52, 128, 66, 49, 53, 51, 128, 66, 49, 53, 50, + 128, 66, 49, 53, 177, 66, 49, 53, 48, 128, 66, 49, 52, 54, 128, 66, 49, + 52, 181, 66, 49, 52, 50, 128, 66, 49, 52, 177, 66, 49, 52, 176, 66, 49, + 51, 181, 66, 49, 51, 179, 66, 49, 51, 50, 128, 66, 49, 51, 177, 66, 49, + 51, 176, 66, 49, 50, 184, 66, 49, 50, 183, 66, 49, 50, 181, 66, 49, 50, + 179, 66, 49, 50, 178, 66, 49, 50, 177, 66, 49, 50, 176, 66, 49, 48, 57, + 205, 66, 49, 48, 57, 198, 66, 49, 48, 56, 205, 66, 49, 48, 56, 198, 66, + 49, 48, 55, 205, 66, 49, 48, 55, 198, 66, 49, 48, 54, 205, 66, 49, 48, + 54, 198, 66, 49, 48, 53, 205, 66, 49, 48, 53, 198, 66, 49, 48, 181, 66, + 49, 48, 180, 66, 49, 48, 178, 66, 49, 48, 176, 66, 48, 57, 177, 66, 48, + 57, 176, 66, 48, 56, 57, 128, 66, 48, 56, 183, 66, 48, 56, 54, 128, 66, + 48, 56, 181, 66, 48, 56, 51, 128, 66, 48, 56, 50, 128, 66, 48, 56, 177, + 66, 48, 56, 176, 66, 48, 55, 57, 128, 66, 48, 55, 184, 66, 48, 55, 183, + 66, 48, 55, 182, 66, 48, 55, 181, 66, 48, 55, 180, 66, 48, 55, 179, 66, + 48, 55, 178, 66, 48, 55, 177, 66, 48, 55, 176, 66, 48, 54, 185, 66, 48, + 54, 184, 66, 48, 54, 183, 66, 48, 54, 182, 66, 48, 54, 181, 66, 48, 54, + 52, 128, 66, 48, 54, 51, 128, 66, 48, 54, 178, 66, 48, 54, 177, 66, 48, + 54, 176, 66, 48, 53, 185, 66, 48, 53, 184, 66, 48, 53, 183, 66, 48, 53, + 54, 128, 66, 48, 53, 181, 66, 48, 53, 180, 66, 48, 53, 179, 66, 48, 53, + 178, 66, 48, 53, 177, 66, 48, 53, 176, 66, 48, 52, 57, 128, 66, 48, 52, + 184, 66, 48, 52, 55, 128, 66, 48, 52, 182, 66, 48, 52, 181, 66, 48, 52, + 180, 66, 48, 52, 179, 66, 48, 52, 178, 66, 48, 52, 177, 66, 48, 52, 176, + 66, 48, 51, 185, 66, 48, 51, 184, 66, 48, 51, 183, 66, 48, 51, 182, 66, + 48, 51, 52, 128, 66, 48, 51, 179, 66, 48, 51, 178, 66, 48, 51, 177, 66, + 48, 51, 176, 66, 48, 50, 185, 66, 48, 50, 184, 66, 48, 50, 183, 66, 48, + 50, 182, 66, 48, 50, 181, 66, 48, 50, 180, 66, 48, 50, 179, 66, 48, 50, + 50, 128, 66, 48, 50, 177, 66, 48, 50, 176, 66, 48, 49, 57, 128, 66, 48, + 49, 56, 128, 66, 48, 49, 183, 66, 48, 49, 182, 66, 48, 49, 181, 66, 48, + 49, 180, 66, 48, 49, 179, 66, 48, 49, 178, 66, 48, 49, 177, 66, 48, 49, + 176, 66, 48, 48, 57, 128, 66, 48, 48, 185, 66, 48, 48, 56, 128, 66, 48, + 48, 184, 66, 48, 48, 55, 128, 66, 48, 48, 183, 66, 48, 48, 54, 128, 66, + 48, 48, 182, 66, 48, 48, 53, 65, 128, 66, 48, 48, 53, 128, 66, 48, 48, + 181, 66, 48, 48, 52, 128, 66, 48, 48, 180, 66, 48, 48, 51, 128, 66, 48, + 48, 179, 66, 48, 48, 50, 128, 66, 48, 48, 178, 66, 48, 48, 49, 128, 66, + 48, 48, 177, 65, 90, 85, 128, 65, 89, 66, 128, 65, 89, 65, 72, 128, 65, + 88, 69, 128, 65, 87, 69, 128, 65, 87, 65, 217, 65, 86, 79, 67, 65, 68, + 79, 128, 65, 86, 69, 83, 84, 65, 206, 65, 86, 69, 82, 65, 71, 197, 65, + 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89, 65, 128, 65, 86, 65, 71, 82, + 65, 72, 65, 128, 65, 85, 89, 65, 78, 78, 65, 128, 65, 85, 84, 85, 77, 78, + 128, 65, 85, 84, 79, 77, 79, 66, 73, 76, 69, 128, 65, 85, 84, 79, 77, 65, + 84, 69, 196, 65, 85, 83, 84, 82, 65, 204, 65, 85, 82, 73, 80, 73, 71, 77, + 69, 78, 84, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 72, 65, 128, 65, + 85, 82, 65, 77, 65, 90, 68, 65, 65, 45, 50, 128, 65, 85, 82, 65, 77, 65, + 90, 68, 65, 65, 128, 65, 85, 78, 78, 128, 65, 85, 71, 85, 83, 84, 128, + 65, 85, 71, 77, 69, 78, 84, 65, 84, 73, 79, 206, 65, 85, 69, 128, 65, 85, + 66, 69, 82, 71, 73, 78, 69, 128, 65, 84, 84, 73, 195, 65, 84, 84, 72, 65, + 67, 65, 78, 128, 65, 84, 84, 69, 78, 84, 73, 79, 78, 128, 65, 84, 84, 65, + 203, 65, 84, 84, 65, 67, 72, 69, 196, 65, 84, 79, 205, 65, 84, 78, 65, + 200, 65, 84, 77, 65, 65, 85, 128, 65, 84, 73, 89, 65, 128, 65, 84, 72, + 76, 69, 84, 73, 195, 65, 84, 72, 65, 82, 86, 65, 86, 69, 68, 73, 195, 65, + 84, 72, 65, 80, 65, 83, 67, 65, 206, 65, 84, 72, 45, 84, 72, 65, 76, 65, + 84, 72, 65, 128, 65, 83, 90, 128, 65, 83, 89, 85, 82, 193, 65, 83, 89, + 77, 80, 84, 79, 84, 73, 67, 65, 76, 76, 217, 65, 83, 84, 82, 79, 78, 79, + 77, 73, 67, 65, 204, 65, 83, 84, 82, 79, 76, 79, 71, 73, 67, 65, 204, 65, + 83, 84, 79, 78, 73, 83, 72, 69, 196, 65, 83, 84, 69, 82, 73, 83, 77, 128, + 65, 83, 84, 69, 82, 73, 83, 75, 211, 65, 83, 84, 69, 82, 73, 83, 75, 128, + 65, 83, 84, 69, 82, 73, 83, 203, 65, 83, 84, 69, 82, 73, 83, 67, 85, 83, + 128, 65, 83, 83, 89, 82, 73, 65, 206, 65, 83, 83, 69, 82, 84, 73, 79, 78, + 128, 65, 83, 80, 73, 82, 65, 84, 73, 79, 78, 128, 65, 83, 80, 73, 82, 65, + 84, 69, 196, 65, 83, 80, 69, 82, 128, 65, 83, 73, 65, 45, 65, 85, 83, 84, + 82, 65, 76, 73, 65, 128, 65, 83, 72, 71, 65, 66, 128, 65, 83, 72, 69, 83, + 128, 65, 83, 72, 57, 128, 65, 83, 72, 51, 128, 65, 83, 72, 178, 65, 83, + 67, 69, 78, 84, 128, 65, 83, 67, 69, 78, 68, 73, 78, 199, 65, 83, 65, 76, + 50, 128, 65, 83, 45, 83, 65, 74, 68, 65, 128, 65, 82, 85, 72, 85, 65, + 128, 65, 82, 84, 211, 65, 82, 84, 73, 83, 212, 65, 82, 84, 73, 67, 85, 76, 65, 84, 69, 196, 65, 82, 84, 65, 66, 197, 65, 82, 83, 69, 79, 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 83, 69, 78, 73, 67, 128, 65, 82, 82, 79, 87, 83, 128, 65, 82, 82, 79, 87, 211, 65, 82, 82, 79, 87, 72, 69, @@ -4892,42 +5525,43 @@ static unsigned char lexicon[] = { 65, 45, 85, 128, 65, 82, 65, 69, 65, 45, 73, 128, 65, 82, 65, 69, 65, 45, 69, 79, 128, 65, 82, 65, 69, 65, 45, 69, 128, 65, 82, 65, 69, 65, 45, 65, 128, 65, 82, 65, 68, 128, 65, 82, 65, 196, 65, 82, 65, 66, 73, 67, 45, - 73, 78, 68, 73, 195, 65, 82, 65, 66, 73, 65, 206, 65, 82, 45, 82, 65, 72, - 77, 65, 206, 65, 82, 45, 82, 65, 72, 69, 69, 77, 128, 65, 81, 85, 65, 82, - 73, 85, 83, 128, 65, 81, 85, 65, 70, 79, 82, 84, 73, 83, 128, 65, 81, 85, - 193, 65, 80, 85, 206, 65, 80, 82, 73, 76, 128, 65, 80, 80, 82, 79, 88, - 73, 77, 65, 84, 69, 76, 217, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, - 128, 65, 80, 80, 82, 79, 65, 67, 72, 69, 211, 65, 80, 80, 82, 79, 65, 67, - 72, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 65, 80, 80, 76, - 73, 67, 65, 84, 73, 79, 206, 65, 80, 79, 84, 72, 69, 83, 128, 65, 80, 79, - 84, 72, 69, 77, 65, 128, 65, 80, 79, 83, 84, 82, 79, 80, 72, 69, 128, 65, - 80, 79, 83, 84, 82, 79, 70, 79, 83, 128, 65, 80, 79, 83, 84, 82, 79, 70, - 79, 211, 65, 80, 79, 83, 84, 82, 79, 70, 79, 201, 65, 80, 79, 68, 69, 88, - 73, 65, 128, 65, 80, 79, 68, 69, 82, 77, 193, 65, 80, 76, 79, 85, 78, - 128, 65, 80, 76, 201, 65, 80, 204, 65, 80, 73, 78, 128, 65, 80, 69, 83, - 207, 65, 80, 67, 128, 65, 80, 65, 82, 84, 128, 65, 80, 65, 65, 84, 79, - 128, 65, 79, 85, 128, 65, 79, 82, 128, 65, 78, 85, 83, 86, 65, 82, 65, - 89, 65, 128, 65, 78, 85, 83, 86, 65, 82, 65, 128, 65, 78, 85, 83, 86, 65, - 82, 193, 65, 78, 85, 68, 65, 84, 84, 65, 128, 65, 78, 85, 68, 65, 84, 84, - 193, 65, 78, 84, 73, 82, 69, 83, 84, 82, 73, 67, 84, 73, 79, 78, 128, 65, - 78, 84, 73, 77, 79, 78, 89, 45, 50, 128, 65, 78, 84, 73, 77, 79, 78, 89, - 128, 65, 78, 84, 73, 77, 79, 78, 217, 65, 78, 84, 73, 77, 79, 78, 73, 65, - 84, 69, 128, 65, 78, 84, 73, 75, 69, 78, 79, 77, 65, 128, 65, 78, 84, 73, - 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, 65, 128, 65, 78, 84, 73, 70, 79, - 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, 83, 69, 45, - 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, - 83, 69, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, 83, 197, 65, 78, - 84, 69, 78, 78, 65, 128, 65, 78, 84, 69, 78, 78, 193, 65, 78, 84, 65, 82, - 71, 79, 77, 85, 75, 72, 65, 128, 65, 78, 83, 85, 218, 65, 78, 83, 72, 69, - 128, 65, 78, 80, 69, 65, 128, 65, 78, 207, 65, 78, 78, 85, 73, 84, 217, - 65, 78, 78, 79, 84, 65, 84, 73, 79, 206, 65, 78, 78, 65, 65, 85, 128, 65, - 78, 75, 72, 128, 65, 78, 74, 73, 128, 65, 78, 72, 85, 128, 65, 78, 71, - 85, 76, 65, 82, 128, 65, 78, 71, 85, 73, 83, 72, 69, 196, 65, 78, 71, 83, - 84, 82, 79, 205, 65, 78, 71, 82, 217, 65, 78, 71, 76, 69, 68, 128, 65, - 78, 71, 76, 69, 196, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, 128, 65, 78, - 71, 69, 210, 65, 78, 71, 69, 76, 128, 65, 78, 71, 69, 68, 128, 65, 78, - 68, 65, 80, 128, 65, 78, 67, 79, 82, 65, 128, 65, 78, 67, 72, 79, 82, - 128, 65, 78, 65, 84, 82, 73, 67, 72, 73, 83, 77, 65, 128, 65, 78, 65, 80, + 73, 78, 68, 73, 195, 65, 82, 65, 66, 73, 65, 206, 65, 82, 45, 82, 85, 66, + 128, 65, 82, 45, 82, 65, 72, 77, 65, 206, 65, 82, 45, 82, 65, 72, 69, 69, + 77, 128, 65, 81, 85, 65, 82, 73, 85, 83, 128, 65, 81, 85, 65, 70, 79, 82, + 84, 73, 83, 128, 65, 81, 85, 193, 65, 80, 85, 206, 65, 80, 82, 73, 76, + 128, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 76, 217, 65, 80, 80, 82, + 79, 88, 73, 77, 65, 84, 69, 128, 65, 80, 80, 82, 79, 65, 67, 72, 69, 211, + 65, 80, 80, 82, 79, 65, 67, 72, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73, + 79, 78, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73, 79, 206, 65, 80, 79, 84, + 72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, 128, 65, 80, 79, 83, 84, + 82, 79, 80, 72, 69, 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 83, 128, 65, + 80, 79, 83, 84, 82, 79, 70, 79, 211, 65, 80, 79, 83, 84, 82, 79, 70, 79, + 201, 65, 80, 79, 68, 69, 88, 73, 65, 128, 65, 80, 79, 68, 69, 82, 77, + 193, 65, 80, 76, 79, 85, 78, 128, 65, 80, 76, 201, 65, 80, 204, 65, 80, + 73, 78, 128, 65, 80, 69, 83, 207, 65, 80, 67, 128, 65, 80, 65, 82, 84, + 128, 65, 80, 65, 65, 84, 79, 128, 65, 79, 85, 128, 65, 79, 82, 128, 65, + 78, 85, 83, 86, 65, 82, 65, 89, 65, 128, 65, 78, 85, 83, 86, 65, 82, 65, + 128, 65, 78, 85, 83, 86, 65, 82, 193, 65, 78, 85, 68, 65, 84, 84, 65, + 128, 65, 78, 85, 68, 65, 84, 84, 193, 65, 78, 84, 73, 82, 69, 83, 84, 82, + 73, 67, 84, 73, 79, 78, 128, 65, 78, 84, 73, 77, 79, 78, 89, 45, 50, 128, + 65, 78, 84, 73, 77, 79, 78, 89, 128, 65, 78, 84, 73, 77, 79, 78, 217, 65, + 78, 84, 73, 77, 79, 78, 73, 65, 84, 69, 128, 65, 78, 84, 73, 75, 69, 78, + 79, 77, 65, 128, 65, 78, 84, 73, 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, + 65, 128, 65, 78, 84, 73, 70, 79, 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, + 79, 67, 75, 87, 73, 83, 69, 45, 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, + 73, 67, 76, 79, 67, 75, 87, 73, 83, 69, 128, 65, 78, 84, 73, 67, 76, 79, + 67, 75, 87, 73, 83, 197, 65, 78, 84, 69, 78, 78, 65, 128, 65, 78, 84, 69, + 78, 78, 193, 65, 78, 84, 65, 82, 71, 79, 77, 85, 75, 72, 65, 128, 65, 78, + 83, 85, 218, 65, 78, 83, 72, 69, 128, 65, 78, 80, 69, 65, 128, 65, 78, + 207, 65, 78, 78, 85, 73, 84, 217, 65, 78, 78, 79, 84, 65, 84, 73, 79, + 206, 65, 78, 78, 65, 65, 85, 128, 65, 78, 75, 72, 128, 65, 78, 74, 73, + 128, 65, 78, 72, 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, + 85, 73, 83, 72, 69, 196, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 82, + 217, 65, 78, 71, 76, 69, 68, 128, 65, 78, 71, 76, 69, 196, 65, 78, 71, + 75, 72, 65, 78, 75, 72, 85, 128, 65, 78, 71, 69, 210, 65, 78, 71, 69, 76, + 128, 65, 78, 71, 69, 68, 128, 65, 78, 68, 65, 80, 128, 65, 78, 67, 79, + 82, 65, 128, 65, 78, 67, 72, 79, 82, 128, 65, 78, 65, 84, 82, 73, 67, 72, + 73, 83, 77, 65, 128, 65, 78, 65, 80, 128, 65, 78, 45, 78, 73, 83, 70, 128, 65, 77, 80, 83, 128, 65, 77, 80, 72, 79, 82, 65, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 80, 69, 82, 83, 65, 78, 196, 65, 77, 79, 85, 78, 212, 65, 77, 69, 82, 73, 67, 65, 83, 128, 65, 77, 69, 82, 73, @@ -4941,11580 +5575,12062 @@ static unsigned char lexicon[] = { 65, 84, 197, 65, 76, 84, 65, 128, 65, 76, 80, 72, 65, 128, 65, 76, 80, 72, 193, 65, 76, 80, 65, 80, 82, 65, 78, 65, 128, 65, 76, 80, 65, 80, 82, 65, 65, 78, 193, 65, 76, 80, 65, 128, 65, 76, 77, 79, 83, 212, 65, 76, - 77, 128, 65, 76, 76, 79, 128, 65, 76, 76, 73, 65, 78, 67, 69, 128, 65, - 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 75, 65, 76, 73, 45, 50, 128, - 65, 76, 75, 65, 76, 73, 128, 65, 76, 73, 71, 78, 69, 196, 65, 76, 73, 70, - 85, 128, 65, 76, 73, 69, 78, 128, 65, 76, 73, 69, 206, 65, 76, 71, 73, - 218, 65, 76, 70, 65, 128, 65, 76, 69, 85, 212, 65, 76, 69, 82, 84, 128, - 65, 76, 69, 80, 72, 128, 65, 76, 69, 77, 66, 73, 67, 128, 65, 76, 69, 70, - 128, 65, 76, 66, 65, 78, 73, 65, 206, 65, 76, 65, 89, 72, 69, 128, 65, - 76, 65, 89, 72, 197, 65, 76, 65, 82, 205, 65, 76, 65, 80, 72, 128, 65, - 76, 45, 76, 65, 75, 85, 78, 65, 128, 65, 75, 84, 73, 69, 83, 69, 76, 83, - 75, 65, 66, 128, 65, 75, 83, 65, 128, 65, 75, 72, 77, 73, 77, 73, 195, - 65, 75, 66, 65, 210, 65, 75, 65, 82, 65, 128, 65, 75, 65, 82, 193, 65, - 73, 89, 65, 78, 78, 65, 128, 65, 73, 86, 73, 76, 73, 203, 65, 73, 84, 79, - 206, 65, 73, 82, 80, 76, 65, 78, 69, 128, 65, 73, 82, 80, 76, 65, 78, - 197, 65, 73, 78, 213, 65, 73, 78, 78, 128, 65, 73, 76, 77, 128, 65, 73, - 75, 65, 82, 65, 128, 65, 73, 72, 86, 85, 83, 128, 65, 72, 83, 68, 65, - 128, 65, 72, 83, 65, 128, 65, 72, 79, 205, 65, 72, 65, 78, 199, 65, 72, - 65, 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 85, 78, 71, 128, 65, - 71, 79, 71, 201, 65, 71, 71, 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, 71, - 71, 82, 65, 86, 65, 84, 69, 196, 65, 71, 65, 73, 78, 83, 212, 65, 71, 65, - 73, 78, 128, 65, 70, 84, 69, 210, 65, 70, 83, 65, 65, 81, 128, 65, 70, - 82, 73, 67, 65, 206, 65, 70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, - 68, 128, 65, 70, 71, 72, 65, 78, 201, 65, 70, 70, 82, 73, 67, 65, 84, 73, - 79, 206, 65, 70, 70, 73, 216, 65, 69, 89, 65, 78, 78, 65, 128, 65, 69, - 89, 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, 67, - 128, 65, 69, 83, 128, 65, 69, 82, 73, 65, 204, 65, 69, 82, 128, 65, 69, - 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 76, 128, 65, 69, 75, 128, - 65, 69, 71, 69, 65, 206, 65, 69, 71, 128, 65, 69, 69, 89, 65, 78, 78, 65, - 128, 65, 69, 69, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, - 69, 68, 128, 65, 69, 66, 128, 65, 68, 86, 65, 78, 84, 65, 71, 69, 128, - 65, 68, 86, 65, 78, 67, 69, 128, 65, 68, 77, 73, 83, 83, 73, 79, 206, 65, - 68, 69, 71, 128, 65, 68, 69, 199, 65, 68, 68, 82, 69, 83, 83, 69, 196, - 65, 68, 68, 82, 69, 83, 211, 65, 68, 68, 65, 75, 128, 65, 68, 65, 203, - 65, 67, 85, 84, 69, 45, 77, 65, 67, 82, 79, 78, 128, 65, 67, 85, 84, 69, - 45, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 128, 65, 67, 85, 84, 197, - 65, 67, 84, 85, 65, 76, 76, 217, 65, 67, 84, 73, 86, 65, 84, 197, 65, 67, - 82, 79, 80, 72, 79, 78, 73, 195, 65, 67, 75, 78, 79, 87, 76, 69, 68, 71, - 69, 128, 65, 67, 67, 85, 77, 85, 76, 65, 84, 73, 79, 78, 128, 65, 67, 67, - 79, 85, 78, 212, 65, 67, 67, 79, 77, 77, 79, 68, 65, 84, 73, 79, 78, 128, - 65, 67, 67, 69, 80, 84, 128, 65, 67, 67, 69, 78, 84, 45, 83, 84, 65, 67, - 67, 65, 84, 79, 128, 65, 67, 67, 69, 78, 84, 128, 65, 67, 67, 69, 78, - 212, 65, 67, 65, 68, 69, 77, 217, 65, 66, 89, 83, 77, 65, 204, 65, 66, - 85, 78, 68, 65, 78, 67, 69, 128, 65, 66, 75, 72, 65, 83, 73, 65, 206, 65, - 66, 66, 82, 69, 86, 73, 65, 84, 73, 79, 206, 65, 66, 65, 70, 73, 76, 73, - 128, 65, 66, 178, 65, 66, 49, 57, 49, 128, 65, 66, 49, 56, 56, 128, 65, - 66, 49, 56, 48, 128, 65, 66, 49, 55, 49, 128, 65, 66, 49, 54, 52, 128, - 65, 66, 49, 51, 49, 66, 128, 65, 66, 49, 51, 49, 65, 128, 65, 66, 49, 50, - 51, 128, 65, 66, 49, 50, 50, 128, 65, 66, 49, 50, 48, 128, 65, 66, 49, - 49, 56, 128, 65, 66, 48, 56, 55, 128, 65, 66, 48, 56, 54, 128, 65, 66, - 48, 56, 53, 128, 65, 66, 48, 56, 50, 128, 65, 66, 48, 56, 49, 128, 65, - 66, 48, 56, 48, 128, 65, 66, 48, 55, 57, 128, 65, 66, 48, 55, 56, 128, - 65, 66, 48, 55, 55, 128, 65, 66, 48, 55, 54, 128, 65, 66, 48, 55, 52, - 128, 65, 66, 48, 55, 51, 128, 65, 66, 48, 55, 48, 128, 65, 66, 48, 54, - 57, 128, 65, 66, 48, 54, 55, 128, 65, 66, 48, 54, 54, 128, 65, 66, 48, - 54, 53, 128, 65, 66, 48, 54, 49, 128, 65, 66, 48, 54, 48, 128, 65, 66, - 48, 53, 57, 128, 65, 66, 48, 53, 56, 128, 65, 66, 48, 53, 55, 128, 65, - 66, 48, 53, 54, 128, 65, 66, 48, 53, 53, 128, 65, 66, 48, 53, 52, 128, - 65, 66, 48, 53, 51, 128, 65, 66, 48, 53, 49, 128, 65, 66, 48, 53, 48, - 128, 65, 66, 48, 52, 57, 128, 65, 66, 48, 52, 56, 128, 65, 66, 48, 52, - 55, 128, 65, 66, 48, 52, 54, 128, 65, 66, 48, 52, 53, 128, 65, 66, 48, - 52, 52, 128, 65, 66, 48, 52, 49, 128, 65, 66, 48, 52, 48, 128, 65, 66, - 48, 51, 57, 128, 65, 66, 48, 51, 56, 128, 65, 66, 48, 51, 55, 128, 65, - 66, 48, 51, 52, 128, 65, 66, 48, 51, 49, 128, 65, 66, 48, 51, 48, 128, - 65, 66, 48, 50, 57, 128, 65, 66, 48, 50, 56, 128, 65, 66, 48, 50, 55, - 128, 65, 66, 48, 50, 54, 128, 65, 66, 48, 50, 52, 128, 65, 66, 48, 50, - 51, 77, 128, 65, 66, 48, 50, 51, 128, 65, 66, 48, 50, 50, 77, 128, 65, - 66, 48, 50, 50, 70, 128, 65, 66, 48, 50, 50, 128, 65, 66, 48, 50, 49, 77, - 128, 65, 66, 48, 50, 49, 70, 128, 65, 66, 48, 50, 49, 128, 65, 66, 48, - 50, 48, 128, 65, 66, 48, 49, 55, 128, 65, 66, 48, 49, 54, 128, 65, 66, - 48, 49, 51, 128, 65, 66, 48, 49, 49, 128, 65, 66, 48, 49, 48, 128, 65, - 66, 48, 48, 57, 128, 65, 66, 48, 48, 56, 128, 65, 66, 48, 48, 55, 128, - 65, 66, 48, 48, 54, 128, 65, 66, 48, 48, 53, 128, 65, 66, 48, 48, 52, - 128, 65, 66, 48, 48, 51, 128, 65, 66, 48, 48, 50, 128, 65, 66, 48, 48, - 49, 128, 65, 65, 89, 73, 78, 128, 65, 65, 89, 65, 78, 78, 65, 128, 65, - 65, 89, 128, 65, 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128, 65, 65, - 66, 65, 65, 70, 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65, 48, 51, - 49, 128, 65, 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65, 65, 48, - 50, 56, 128, 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128, 65, 65, - 48, 50, 53, 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51, 128, 65, - 65, 48, 50, 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50, 48, 128, - 65, 65, 48, 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48, 49, 55, - 128, 65, 65, 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65, 48, 49, - 52, 128, 65, 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65, 65, 48, - 49, 49, 128, 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128, 65, 65, - 48, 48, 56, 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, 65, - 128, 65, 65, 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, 48, - 53, 128, 65, 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, 48, - 48, 50, 128, 65, 65, 48, 48, 49, 128, 65, 56, 48, 55, 128, 65, 56, 48, - 54, 128, 65, 56, 48, 53, 128, 65, 56, 48, 52, 128, 65, 56, 48, 51, 128, - 65, 56, 48, 50, 128, 65, 56, 48, 49, 128, 65, 56, 48, 48, 128, 65, 55, - 51, 178, 65, 55, 50, 182, 65, 55, 49, 183, 65, 55, 49, 181, 65, 55, 49, - 180, 65, 55, 49, 179, 65, 55, 49, 178, 65, 55, 49, 177, 65, 55, 49, 176, - 65, 55, 48, 57, 45, 182, 65, 55, 48, 57, 45, 180, 65, 55, 48, 57, 45, - 179, 65, 55, 48, 57, 45, 178, 65, 55, 48, 185, 65, 55, 48, 184, 65, 55, - 48, 183, 65, 55, 48, 182, 65, 55, 48, 181, 65, 55, 48, 180, 65, 55, 48, - 179, 65, 55, 48, 178, 65, 55, 48, 177, 65, 54, 54, 52, 128, 65, 54, 54, - 51, 128, 65, 54, 54, 50, 128, 65, 54, 54, 49, 128, 65, 54, 54, 48, 128, - 65, 54, 53, 57, 128, 65, 54, 53, 56, 128, 65, 54, 53, 55, 128, 65, 54, - 53, 54, 128, 65, 54, 53, 53, 128, 65, 54, 53, 52, 128, 65, 54, 53, 51, - 128, 65, 54, 53, 50, 128, 65, 54, 53, 49, 128, 65, 54, 52, 57, 128, 65, - 54, 52, 56, 128, 65, 54, 52, 54, 128, 65, 54, 52, 53, 128, 65, 54, 52, - 52, 128, 65, 54, 52, 51, 128, 65, 54, 52, 50, 128, 65, 54, 52, 48, 128, - 65, 54, 51, 56, 128, 65, 54, 51, 55, 128, 65, 54, 51, 52, 128, 65, 54, - 50, 57, 128, 65, 54, 50, 56, 128, 65, 54, 50, 55, 128, 65, 54, 50, 54, - 128, 65, 54, 50, 52, 128, 65, 54, 50, 51, 128, 65, 54, 50, 50, 128, 65, - 54, 50, 49, 128, 65, 54, 50, 48, 128, 65, 54, 49, 57, 128, 65, 54, 49, - 56, 128, 65, 54, 49, 55, 128, 65, 54, 49, 54, 128, 65, 54, 49, 53, 128, - 65, 54, 49, 52, 128, 65, 54, 49, 51, 128, 65, 54, 49, 50, 128, 65, 54, - 49, 49, 128, 65, 54, 49, 48, 128, 65, 54, 48, 57, 128, 65, 54, 48, 56, - 128, 65, 54, 48, 54, 128, 65, 54, 48, 52, 128, 65, 54, 48, 51, 128, 65, - 54, 48, 50, 128, 65, 54, 48, 49, 128, 65, 54, 48, 48, 128, 65, 53, 57, - 56, 128, 65, 53, 57, 54, 128, 65, 53, 57, 53, 128, 65, 53, 57, 52, 128, - 65, 53, 57, 50, 128, 65, 53, 57, 49, 128, 65, 53, 56, 57, 128, 65, 53, - 56, 56, 128, 65, 53, 56, 55, 128, 65, 53, 56, 54, 128, 65, 53, 56, 53, - 128, 65, 53, 56, 52, 128, 65, 53, 56, 51, 128, 65, 53, 56, 50, 128, 65, - 53, 56, 49, 128, 65, 53, 56, 48, 128, 65, 53, 55, 57, 128, 65, 53, 55, - 56, 128, 65, 53, 55, 55, 128, 65, 53, 55, 54, 128, 65, 53, 55, 53, 128, - 65, 53, 55, 52, 128, 65, 53, 55, 51, 128, 65, 53, 55, 50, 128, 65, 53, - 55, 49, 128, 65, 53, 55, 48, 128, 65, 53, 54, 57, 128, 65, 53, 54, 56, - 128, 65, 53, 54, 54, 128, 65, 53, 54, 53, 128, 65, 53, 54, 52, 128, 65, - 53, 54, 51, 128, 65, 53, 53, 57, 128, 65, 53, 53, 55, 128, 65, 53, 53, - 54, 128, 65, 53, 53, 53, 128, 65, 53, 53, 52, 128, 65, 53, 53, 51, 128, - 65, 53, 53, 50, 128, 65, 53, 53, 49, 128, 65, 53, 53, 48, 128, 65, 53, - 52, 57, 128, 65, 53, 52, 56, 128, 65, 53, 52, 55, 128, 65, 53, 52, 53, - 128, 65, 53, 52, 50, 128, 65, 53, 52, 49, 128, 65, 53, 52, 48, 128, 65, - 53, 51, 57, 128, 65, 53, 51, 56, 128, 65, 53, 51, 55, 128, 65, 53, 51, - 54, 128, 65, 53, 51, 53, 128, 65, 53, 51, 52, 128, 65, 53, 51, 50, 128, - 65, 53, 51, 49, 128, 65, 53, 51, 48, 128, 65, 53, 50, 57, 128, 65, 53, - 50, 56, 128, 65, 53, 50, 55, 128, 65, 53, 50, 54, 128, 65, 53, 50, 53, - 128, 65, 53, 50, 52, 128, 65, 53, 50, 51, 128, 65, 53, 50, 50, 128, 65, - 53, 50, 49, 128, 65, 53, 50, 48, 128, 65, 53, 49, 57, 128, 65, 53, 49, - 56, 128, 65, 53, 49, 55, 128, 65, 53, 49, 54, 128, 65, 53, 49, 53, 128, - 65, 53, 49, 52, 128, 65, 53, 49, 51, 128, 65, 53, 49, 50, 128, 65, 53, - 49, 49, 128, 65, 53, 49, 48, 128, 65, 53, 48, 57, 128, 65, 53, 48, 56, - 128, 65, 53, 48, 55, 128, 65, 53, 48, 54, 128, 65, 53, 48, 53, 128, 65, - 53, 48, 52, 128, 65, 53, 48, 51, 128, 65, 53, 48, 50, 128, 65, 53, 48, - 49, 128, 65, 52, 57, 55, 128, 65, 52, 57, 54, 128, 65, 52, 57, 53, 128, - 65, 52, 57, 52, 128, 65, 52, 57, 51, 128, 65, 52, 57, 50, 128, 65, 52, - 57, 49, 128, 65, 52, 57, 48, 128, 65, 52, 56, 57, 128, 65, 52, 56, 56, - 128, 65, 52, 56, 55, 128, 65, 52, 56, 54, 128, 65, 52, 56, 53, 128, 65, - 52, 56, 52, 128, 65, 52, 56, 51, 128, 65, 52, 56, 50, 128, 65, 52, 56, - 49, 128, 65, 52, 56, 48, 128, 65, 52, 55, 57, 128, 65, 52, 55, 56, 128, - 65, 52, 55, 55, 128, 65, 52, 55, 54, 128, 65, 52, 55, 53, 128, 65, 52, - 55, 52, 128, 65, 52, 55, 51, 128, 65, 52, 55, 50, 128, 65, 52, 55, 49, - 128, 65, 52, 55, 48, 128, 65, 52, 54, 57, 128, 65, 52, 54, 56, 128, 65, - 52, 54, 55, 128, 65, 52, 54, 54, 128, 65, 52, 54, 53, 128, 65, 52, 54, - 52, 128, 65, 52, 54, 51, 128, 65, 52, 54, 50, 128, 65, 52, 54, 49, 128, - 65, 52, 54, 48, 128, 65, 52, 53, 57, 128, 65, 52, 53, 56, 128, 65, 52, - 53, 55, 65, 128, 65, 52, 53, 55, 128, 65, 52, 53, 54, 128, 65, 52, 53, - 53, 128, 65, 52, 53, 52, 128, 65, 52, 53, 51, 128, 65, 52, 53, 50, 128, - 65, 52, 53, 49, 128, 65, 52, 53, 48, 65, 128, 65, 52, 53, 48, 128, 65, - 52, 52, 57, 128, 65, 52, 52, 56, 128, 65, 52, 52, 55, 128, 65, 52, 52, - 54, 128, 65, 52, 52, 53, 128, 65, 52, 52, 52, 128, 65, 52, 52, 51, 128, - 65, 52, 52, 50, 128, 65, 52, 52, 49, 128, 65, 52, 52, 48, 128, 65, 52, - 51, 57, 128, 65, 52, 51, 56, 128, 65, 52, 51, 55, 128, 65, 52, 51, 54, - 128, 65, 52, 51, 53, 128, 65, 52, 51, 52, 128, 65, 52, 51, 51, 128, 65, - 52, 51, 50, 128, 65, 52, 51, 49, 128, 65, 52, 51, 48, 128, 65, 52, 50, - 57, 128, 65, 52, 50, 56, 128, 65, 52, 50, 55, 128, 65, 52, 50, 54, 128, - 65, 52, 50, 53, 128, 65, 52, 50, 52, 128, 65, 52, 50, 51, 128, 65, 52, - 50, 50, 128, 65, 52, 50, 49, 128, 65, 52, 50, 48, 128, 65, 52, 49, 57, - 128, 65, 52, 49, 56, 45, 86, 65, 83, 128, 65, 52, 49, 56, 128, 65, 52, - 49, 55, 45, 86, 65, 83, 128, 65, 52, 49, 55, 128, 65, 52, 49, 54, 45, 86, - 65, 83, 128, 65, 52, 49, 54, 128, 65, 52, 49, 53, 45, 86, 65, 83, 128, - 65, 52, 49, 53, 128, 65, 52, 49, 52, 45, 86, 65, 83, 128, 65, 52, 49, 52, - 128, 65, 52, 49, 51, 45, 86, 65, 83, 128, 65, 52, 49, 51, 128, 65, 52, - 49, 50, 45, 86, 65, 83, 128, 65, 52, 49, 50, 128, 65, 52, 49, 49, 45, 86, - 65, 83, 128, 65, 52, 49, 49, 128, 65, 52, 49, 48, 193, 65, 52, 49, 48, - 45, 86, 65, 83, 128, 65, 52, 49, 176, 65, 52, 48, 57, 45, 86, 65, 83, - 128, 65, 52, 48, 57, 128, 65, 52, 48, 56, 45, 86, 65, 83, 128, 65, 52, - 48, 56, 128, 65, 52, 48, 55, 45, 86, 65, 83, 128, 65, 52, 48, 55, 128, - 65, 52, 48, 54, 45, 86, 65, 83, 128, 65, 52, 48, 54, 128, 65, 52, 48, 53, - 45, 86, 65, 83, 128, 65, 52, 48, 53, 128, 65, 52, 48, 52, 45, 86, 65, 83, - 128, 65, 52, 48, 52, 128, 65, 52, 48, 51, 45, 86, 65, 83, 128, 65, 52, - 48, 51, 128, 65, 52, 48, 50, 45, 86, 65, 83, 128, 65, 52, 48, 50, 128, - 65, 52, 48, 49, 45, 86, 65, 83, 128, 65, 52, 48, 49, 128, 65, 52, 48, 48, - 45, 86, 65, 83, 128, 65, 52, 48, 48, 128, 65, 51, 57, 57, 128, 65, 51, - 57, 56, 128, 65, 51, 57, 55, 128, 65, 51, 57, 54, 128, 65, 51, 57, 53, - 128, 65, 51, 57, 52, 128, 65, 51, 57, 179, 65, 51, 57, 50, 128, 65, 51, - 57, 49, 128, 65, 51, 57, 48, 128, 65, 51, 56, 57, 128, 65, 51, 56, 56, - 128, 65, 51, 56, 55, 128, 65, 51, 56, 54, 65, 128, 65, 51, 56, 54, 128, - 65, 51, 56, 53, 128, 65, 51, 56, 52, 128, 65, 51, 56, 51, 65, 128, 65, - 51, 56, 179, 65, 51, 56, 50, 128, 65, 51, 56, 49, 65, 128, 65, 51, 56, - 49, 128, 65, 51, 56, 48, 128, 65, 51, 55, 57, 128, 65, 51, 55, 56, 128, - 65, 51, 55, 55, 128, 65, 51, 55, 54, 128, 65, 51, 55, 53, 128, 65, 51, - 55, 52, 128, 65, 51, 55, 51, 128, 65, 51, 55, 50, 128, 65, 51, 55, 49, - 65, 128, 65, 51, 55, 49, 128, 65, 51, 55, 48, 128, 65, 51, 54, 57, 128, - 65, 51, 54, 56, 65, 128, 65, 51, 54, 56, 128, 65, 51, 54, 55, 128, 65, - 51, 54, 54, 128, 65, 51, 54, 53, 128, 65, 51, 54, 52, 65, 128, 65, 51, - 54, 52, 128, 65, 51, 54, 51, 128, 65, 51, 54, 50, 128, 65, 51, 54, 49, - 128, 65, 51, 54, 48, 128, 65, 51, 53, 57, 65, 128, 65, 51, 53, 57, 128, - 65, 51, 53, 56, 128, 65, 51, 53, 55, 128, 65, 51, 53, 54, 128, 65, 51, - 53, 53, 128, 65, 51, 53, 52, 128, 65, 51, 53, 51, 128, 65, 51, 53, 50, - 128, 65, 51, 53, 49, 128, 65, 51, 53, 48, 128, 65, 51, 52, 57, 128, 65, - 51, 52, 56, 128, 65, 51, 52, 55, 128, 65, 51, 52, 54, 128, 65, 51, 52, - 53, 128, 65, 51, 52, 52, 128, 65, 51, 52, 51, 128, 65, 51, 52, 50, 128, - 65, 51, 52, 49, 128, 65, 51, 52, 48, 128, 65, 51, 51, 57, 128, 65, 51, - 51, 56, 128, 65, 51, 51, 55, 128, 65, 51, 51, 54, 67, 128, 65, 51, 51, - 54, 66, 128, 65, 51, 51, 54, 65, 128, 65, 51, 51, 54, 128, 65, 51, 51, - 53, 128, 65, 51, 51, 52, 128, 65, 51, 51, 51, 128, 65, 51, 51, 50, 67, - 128, 65, 51, 51, 50, 66, 128, 65, 51, 51, 50, 65, 128, 65, 51, 51, 50, - 128, 65, 51, 51, 49, 128, 65, 51, 51, 48, 128, 65, 51, 50, 57, 65, 128, - 65, 51, 50, 57, 128, 65, 51, 50, 56, 128, 65, 51, 50, 55, 128, 65, 51, - 50, 54, 128, 65, 51, 50, 53, 128, 65, 51, 50, 52, 128, 65, 51, 50, 51, - 128, 65, 51, 50, 50, 128, 65, 51, 50, 49, 128, 65, 51, 50, 48, 128, 65, - 51, 49, 57, 128, 65, 51, 49, 56, 128, 65, 51, 49, 55, 128, 65, 51, 49, - 54, 128, 65, 51, 49, 53, 128, 65, 51, 49, 52, 128, 65, 51, 49, 51, 67, - 128, 65, 51, 49, 51, 66, 128, 65, 51, 49, 51, 65, 128, 65, 51, 49, 51, - 128, 65, 51, 49, 50, 128, 65, 51, 49, 49, 128, 65, 51, 49, 48, 128, 65, - 51, 48, 57, 67, 128, 65, 51, 48, 57, 66, 128, 65, 51, 48, 57, 65, 128, - 65, 51, 48, 57, 128, 65, 51, 48, 56, 128, 65, 51, 48, 55, 128, 65, 51, - 48, 54, 128, 65, 51, 48, 53, 128, 65, 51, 48, 52, 128, 65, 51, 48, 51, - 128, 65, 51, 48, 50, 128, 65, 51, 48, 49, 128, 65, 51, 48, 48, 128, 65, - 50, 57, 57, 65, 128, 65, 50, 57, 57, 128, 65, 50, 57, 56, 128, 65, 50, - 57, 55, 128, 65, 50, 57, 54, 128, 65, 50, 57, 53, 128, 65, 50, 57, 52, - 65, 128, 65, 50, 57, 52, 128, 65, 50, 57, 51, 128, 65, 50, 57, 50, 128, - 65, 50, 57, 49, 128, 65, 50, 57, 48, 128, 65, 50, 56, 57, 65, 128, 65, - 50, 56, 57, 128, 65, 50, 56, 56, 128, 65, 50, 56, 55, 128, 65, 50, 56, - 54, 128, 65, 50, 56, 53, 128, 65, 50, 56, 52, 128, 65, 50, 56, 51, 128, - 65, 50, 56, 50, 128, 65, 50, 56, 49, 128, 65, 50, 56, 48, 128, 65, 50, - 55, 57, 128, 65, 50, 55, 56, 128, 65, 50, 55, 55, 128, 65, 50, 55, 54, - 128, 65, 50, 55, 53, 128, 65, 50, 55, 52, 128, 65, 50, 55, 51, 128, 65, - 50, 55, 50, 128, 65, 50, 55, 49, 128, 65, 50, 55, 48, 128, 65, 50, 54, - 57, 128, 65, 50, 54, 56, 128, 65, 50, 54, 55, 65, 128, 65, 50, 54, 55, - 128, 65, 50, 54, 54, 128, 65, 50, 54, 53, 128, 65, 50, 54, 52, 128, 65, - 50, 54, 51, 128, 65, 50, 54, 50, 128, 65, 50, 54, 49, 128, 65, 50, 54, - 48, 128, 65, 50, 53, 57, 128, 65, 50, 53, 56, 128, 65, 50, 53, 55, 128, - 65, 50, 53, 54, 128, 65, 50, 53, 53, 128, 65, 50, 53, 52, 128, 65, 50, - 53, 51, 128, 65, 50, 53, 50, 128, 65, 50, 53, 49, 128, 65, 50, 53, 48, - 128, 65, 50, 52, 57, 128, 65, 50, 52, 56, 128, 65, 50, 52, 55, 128, 65, - 50, 52, 54, 128, 65, 50, 52, 53, 128, 65, 50, 52, 52, 128, 65, 50, 52, - 51, 128, 65, 50, 52, 50, 128, 65, 50, 52, 49, 128, 65, 50, 52, 48, 128, - 65, 50, 51, 57, 128, 65, 50, 51, 56, 128, 65, 50, 51, 55, 128, 65, 50, - 51, 54, 128, 65, 50, 51, 53, 128, 65, 50, 51, 52, 128, 65, 50, 51, 51, - 128, 65, 50, 51, 50, 128, 65, 50, 51, 49, 128, 65, 50, 51, 48, 128, 65, - 50, 50, 57, 128, 65, 50, 50, 56, 128, 65, 50, 50, 55, 65, 128, 65, 50, - 50, 55, 128, 65, 50, 50, 54, 128, 65, 50, 50, 53, 128, 65, 50, 50, 52, - 128, 65, 50, 50, 51, 128, 65, 50, 50, 50, 128, 65, 50, 50, 49, 128, 65, - 50, 50, 48, 128, 65, 50, 49, 57, 128, 65, 50, 49, 56, 128, 65, 50, 49, - 55, 128, 65, 50, 49, 54, 65, 128, 65, 50, 49, 54, 128, 65, 50, 49, 53, - 65, 128, 65, 50, 49, 53, 128, 65, 50, 49, 52, 128, 65, 50, 49, 51, 128, - 65, 50, 49, 50, 128, 65, 50, 49, 49, 128, 65, 50, 49, 48, 128, 65, 50, - 48, 57, 65, 128, 65, 50, 48, 57, 128, 65, 50, 48, 56, 128, 65, 50, 48, - 55, 65, 128, 65, 50, 48, 55, 128, 65, 50, 48, 54, 128, 65, 50, 48, 53, - 128, 65, 50, 48, 52, 128, 65, 50, 48, 51, 128, 65, 50, 48, 50, 66, 128, - 65, 50, 48, 50, 65, 128, 65, 50, 48, 50, 128, 65, 50, 48, 49, 128, 65, - 50, 48, 48, 128, 65, 49, 57, 57, 128, 65, 49, 57, 56, 128, 65, 49, 57, - 55, 128, 65, 49, 57, 54, 128, 65, 49, 57, 53, 128, 65, 49, 57, 52, 128, - 65, 49, 57, 51, 128, 65, 49, 57, 50, 128, 65, 49, 57, 49, 128, 65, 49, - 57, 48, 128, 65, 49, 56, 57, 128, 65, 49, 56, 56, 128, 65, 49, 56, 55, - 128, 65, 49, 56, 54, 128, 65, 49, 56, 53, 128, 65, 49, 56, 52, 128, 65, - 49, 56, 51, 128, 65, 49, 56, 50, 128, 65, 49, 56, 49, 128, 65, 49, 56, - 48, 128, 65, 49, 55, 57, 128, 65, 49, 55, 56, 128, 65, 49, 55, 55, 128, - 65, 49, 55, 54, 128, 65, 49, 55, 53, 128, 65, 49, 55, 52, 128, 65, 49, - 55, 51, 128, 65, 49, 55, 50, 128, 65, 49, 55, 49, 128, 65, 49, 55, 48, - 128, 65, 49, 54, 57, 128, 65, 49, 54, 56, 128, 65, 49, 54, 55, 128, 65, - 49, 54, 54, 128, 65, 49, 54, 53, 128, 65, 49, 54, 52, 128, 65, 49, 54, - 51, 128, 65, 49, 54, 50, 128, 65, 49, 54, 49, 128, 65, 49, 54, 48, 128, - 65, 49, 53, 57, 128, 65, 49, 53, 56, 128, 65, 49, 53, 55, 128, 65, 49, - 53, 54, 128, 65, 49, 53, 53, 128, 65, 49, 53, 52, 128, 65, 49, 53, 51, - 128, 65, 49, 53, 50, 128, 65, 49, 53, 49, 128, 65, 49, 53, 48, 128, 65, - 49, 52, 57, 128, 65, 49, 52, 56, 128, 65, 49, 52, 55, 128, 65, 49, 52, - 54, 128, 65, 49, 52, 53, 128, 65, 49, 52, 52, 128, 65, 49, 52, 51, 128, - 65, 49, 52, 50, 128, 65, 49, 52, 49, 128, 65, 49, 52, 48, 128, 65, 49, - 51, 57, 128, 65, 49, 51, 56, 128, 65, 49, 51, 55, 128, 65, 49, 51, 54, - 128, 65, 49, 51, 53, 65, 128, 65, 49, 51, 53, 128, 65, 49, 51, 52, 128, - 65, 49, 51, 51, 128, 65, 49, 51, 50, 128, 65, 49, 51, 49, 67, 128, 65, - 49, 51, 49, 128, 65, 49, 51, 48, 128, 65, 49, 50, 57, 128, 65, 49, 50, - 56, 128, 65, 49, 50, 55, 128, 65, 49, 50, 54, 128, 65, 49, 50, 53, 65, - 128, 65, 49, 50, 53, 128, 65, 49, 50, 52, 128, 65, 49, 50, 51, 128, 65, - 49, 50, 50, 128, 65, 49, 50, 49, 128, 65, 49, 50, 48, 66, 128, 65, 49, - 50, 48, 128, 65, 49, 49, 57, 128, 65, 49, 49, 56, 128, 65, 49, 49, 55, - 128, 65, 49, 49, 54, 128, 65, 49, 49, 53, 65, 128, 65, 49, 49, 53, 128, - 65, 49, 49, 52, 128, 65, 49, 49, 51, 128, 65, 49, 49, 50, 128, 65, 49, - 49, 49, 128, 65, 49, 49, 48, 66, 128, 65, 49, 49, 48, 65, 128, 65, 49, - 49, 48, 128, 65, 49, 48, 57, 128, 65, 49, 48, 56, 128, 65, 49, 48, 55, - 67, 128, 65, 49, 48, 55, 66, 128, 65, 49, 48, 55, 65, 128, 65, 49, 48, - 55, 128, 65, 49, 48, 54, 128, 65, 49, 48, 53, 66, 128, 65, 49, 48, 53, - 65, 128, 65, 49, 48, 53, 128, 65, 49, 48, 52, 67, 128, 65, 49, 48, 52, - 66, 128, 65, 49, 48, 52, 65, 128, 65, 49, 48, 52, 128, 65, 49, 48, 51, - 128, 65, 49, 48, 50, 65, 128, 65, 49, 48, 50, 128, 65, 49, 48, 49, 65, - 128, 65, 49, 48, 49, 128, 65, 49, 48, 48, 65, 128, 65, 49, 48, 48, 45, - 49, 48, 50, 128, 65, 49, 48, 48, 128, 65, 48, 57, 57, 128, 65, 48, 57, - 56, 65, 128, 65, 48, 57, 56, 128, 65, 48, 57, 55, 65, 128, 65, 48, 57, - 55, 128, 65, 48, 57, 54, 128, 65, 48, 57, 53, 128, 65, 48, 57, 52, 128, - 65, 48, 57, 51, 128, 65, 48, 57, 50, 128, 65, 48, 57, 49, 128, 65, 48, - 57, 48, 128, 65, 48, 56, 57, 128, 65, 48, 56, 56, 128, 65, 48, 56, 55, - 128, 65, 48, 56, 54, 128, 65, 48, 56, 53, 128, 65, 48, 56, 52, 128, 65, - 48, 56, 51, 128, 65, 48, 56, 50, 128, 65, 48, 56, 49, 128, 65, 48, 56, - 48, 128, 65, 48, 55, 57, 128, 65, 48, 55, 56, 128, 65, 48, 55, 55, 128, - 65, 48, 55, 54, 128, 65, 48, 55, 53, 128, 65, 48, 55, 52, 128, 65, 48, - 55, 51, 128, 65, 48, 55, 50, 128, 65, 48, 55, 49, 128, 65, 48, 55, 48, - 128, 65, 48, 54, 57, 128, 65, 48, 54, 56, 128, 65, 48, 54, 55, 128, 65, - 48, 54, 54, 67, 128, 65, 48, 54, 54, 66, 128, 65, 48, 54, 54, 65, 128, - 65, 48, 54, 54, 128, 65, 48, 54, 53, 128, 65, 48, 54, 52, 128, 65, 48, - 54, 51, 128, 65, 48, 54, 50, 128, 65, 48, 54, 49, 128, 65, 48, 54, 48, - 128, 65, 48, 53, 57, 128, 65, 48, 53, 56, 128, 65, 48, 53, 55, 128, 65, - 48, 53, 54, 128, 65, 48, 53, 53, 128, 65, 48, 53, 52, 128, 65, 48, 53, - 51, 128, 65, 48, 53, 50, 128, 65, 48, 53, 49, 128, 65, 48, 53, 48, 128, - 65, 48, 52, 57, 128, 65, 48, 52, 56, 128, 65, 48, 52, 55, 128, 65, 48, - 52, 54, 66, 128, 65, 48, 52, 54, 65, 128, 65, 48, 52, 54, 128, 65, 48, - 52, 53, 65, 128, 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, 52, - 51, 65, 128, 65, 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, 52, - 50, 128, 65, 48, 52, 49, 65, 128, 65, 48, 52, 49, 128, 65, 48, 52, 48, - 65, 128, 65, 48, 52, 48, 128, 65, 48, 51, 57, 65, 128, 65, 48, 51, 57, - 128, 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, 65, 48, 51, 54, 128, 65, - 48, 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, 51, 51, 128, 65, 48, 51, - 50, 65, 128, 65, 48, 50, 56, 66, 128, 65, 48, 50, 54, 65, 128, 65, 48, - 49, 55, 65, 128, 65, 48, 49, 52, 65, 128, 65, 48, 49, 48, 65, 128, 65, - 48, 48, 54, 66, 128, 65, 48, 48, 54, 65, 128, 65, 48, 48, 53, 65, 128, - 65, 45, 69, 85, 128, 45, 85, 205, 45, 80, 72, 82, 85, 128, 45, 75, 72, - 89, 85, 196, 45, 75, 72, 89, 73, 76, 128, 45, 68, 90, 85, 196, 45, 67, - 72, 65, 210, 45, 67, 72, 65, 76, 128, + 76, 79, 128, 65, 76, 76, 73, 65, 78, 67, 69, 128, 65, 76, 76, 201, 65, + 76, 76, 65, 200, 65, 76, 75, 65, 76, 73, 45, 50, 128, 65, 76, 75, 65, 76, + 73, 128, 65, 76, 73, 71, 78, 69, 196, 65, 76, 73, 70, 85, 128, 65, 76, + 73, 70, 128, 65, 76, 73, 198, 65, 76, 73, 69, 78, 128, 65, 76, 73, 69, + 206, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 69, 85, 212, 65, + 76, 69, 82, 84, 128, 65, 76, 69, 80, 72, 128, 65, 76, 69, 77, 66, 73, 67, + 128, 65, 76, 69, 70, 128, 65, 76, 66, 65, 78, 73, 65, 206, 65, 76, 65, + 89, 72, 69, 128, 65, 76, 65, 89, 72, 197, 65, 76, 65, 82, 205, 65, 76, + 65, 80, 72, 128, 65, 76, 45, 76, 65, 75, 85, 78, 65, 128, 65, 75, 84, 73, + 69, 83, 69, 76, 83, 75, 65, 66, 128, 65, 75, 83, 65, 128, 65, 75, 72, 77, + 73, 77, 73, 195, 65, 75, 66, 65, 210, 65, 75, 65, 82, 65, 128, 65, 75, + 65, 82, 193, 65, 73, 89, 65, 78, 78, 65, 128, 65, 73, 86, 73, 76, 73, + 203, 65, 73, 84, 79, 206, 65, 73, 82, 80, 76, 65, 78, 69, 128, 65, 73, + 82, 80, 76, 65, 78, 197, 65, 73, 78, 213, 65, 73, 78, 78, 128, 65, 73, + 76, 77, 128, 65, 73, 75, 65, 82, 65, 128, 65, 73, 72, 86, 85, 83, 128, + 65, 72, 83, 68, 65, 128, 65, 72, 83, 65, 128, 65, 72, 79, 205, 65, 72, + 65, 78, 199, 65, 72, 65, 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, + 85, 78, 71, 128, 65, 71, 79, 71, 201, 65, 71, 71, 82, 65, 86, 65, 84, 73, + 79, 78, 128, 65, 71, 71, 82, 65, 86, 65, 84, 69, 196, 65, 71, 65, 73, 78, + 83, 212, 65, 71, 65, 73, 78, 128, 65, 70, 84, 69, 210, 65, 70, 83, 65, + 65, 81, 128, 65, 70, 82, 73, 67, 65, 206, 65, 70, 79, 82, 69, 77, 69, 78, + 84, 73, 79, 78, 69, 68, 128, 65, 70, 71, 72, 65, 78, 201, 65, 70, 70, 82, + 73, 67, 65, 84, 73, 79, 206, 65, 70, 70, 73, 216, 65, 69, 89, 65, 78, 78, + 65, 128, 65, 69, 89, 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, + 128, 65, 69, 83, 67, 128, 65, 69, 83, 128, 65, 69, 82, 73, 65, 204, 65, + 69, 82, 128, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 76, + 128, 65, 69, 75, 128, 65, 69, 71, 69, 65, 206, 65, 69, 71, 128, 65, 69, + 69, 89, 65, 78, 78, 65, 128, 65, 69, 69, 128, 65, 69, 68, 65, 45, 80, 73, + 76, 76, 65, 128, 65, 69, 68, 128, 65, 69, 66, 128, 65, 68, 86, 65, 78, + 84, 65, 71, 69, 128, 65, 68, 86, 65, 78, 67, 69, 128, 65, 68, 77, 73, 83, + 83, 73, 79, 206, 65, 68, 76, 65, 205, 65, 68, 69, 71, 128, 65, 68, 69, + 199, 65, 68, 68, 82, 69, 83, 83, 69, 196, 65, 68, 68, 82, 69, 83, 211, + 65, 68, 68, 65, 75, 128, 65, 68, 65, 203, 65, 67, 85, 84, 69, 45, 77, 65, + 67, 82, 79, 78, 128, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, 45, 65, + 67, 85, 84, 69, 128, 65, 67, 85, 84, 197, 65, 67, 84, 85, 65, 76, 76, + 217, 65, 67, 84, 73, 86, 65, 84, 197, 65, 67, 82, 79, 80, 72, 79, 78, 73, + 195, 65, 67, 75, 78, 79, 87, 76, 69, 68, 71, 69, 128, 65, 67, 67, 85, 77, + 85, 76, 65, 84, 73, 79, 78, 128, 65, 67, 67, 79, 85, 78, 212, 65, 67, 67, + 79, 77, 77, 79, 68, 65, 84, 73, 79, 78, 128, 65, 67, 67, 69, 80, 84, 128, + 65, 67, 67, 69, 78, 84, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, 65, 67, + 67, 69, 78, 84, 128, 65, 67, 67, 69, 78, 212, 65, 67, 65, 68, 69, 77, + 217, 65, 66, 89, 83, 77, 65, 204, 65, 66, 85, 78, 68, 65, 78, 67, 69, + 128, 65, 66, 75, 72, 65, 83, 73, 65, 206, 65, 66, 66, 82, 69, 86, 73, 65, + 84, 73, 79, 206, 65, 66, 65, 70, 73, 76, 73, 128, 65, 66, 178, 65, 66, + 49, 57, 49, 128, 65, 66, 49, 56, 56, 128, 65, 66, 49, 56, 48, 128, 65, + 66, 49, 55, 49, 128, 65, 66, 49, 54, 52, 128, 65, 66, 49, 51, 49, 66, + 128, 65, 66, 49, 51, 49, 65, 128, 65, 66, 49, 50, 51, 128, 65, 66, 49, + 50, 50, 128, 65, 66, 49, 50, 48, 128, 65, 66, 49, 49, 56, 128, 65, 66, + 48, 56, 55, 128, 65, 66, 48, 56, 54, 128, 65, 66, 48, 56, 53, 128, 65, + 66, 48, 56, 50, 128, 65, 66, 48, 56, 49, 128, 65, 66, 48, 56, 48, 128, + 65, 66, 48, 55, 57, 128, 65, 66, 48, 55, 56, 128, 65, 66, 48, 55, 55, + 128, 65, 66, 48, 55, 54, 128, 65, 66, 48, 55, 52, 128, 65, 66, 48, 55, + 51, 128, 65, 66, 48, 55, 48, 128, 65, 66, 48, 54, 57, 128, 65, 66, 48, + 54, 55, 128, 65, 66, 48, 54, 54, 128, 65, 66, 48, 54, 53, 128, 65, 66, + 48, 54, 49, 128, 65, 66, 48, 54, 48, 128, 65, 66, 48, 53, 57, 128, 65, + 66, 48, 53, 56, 128, 65, 66, 48, 53, 55, 128, 65, 66, 48, 53, 54, 128, + 65, 66, 48, 53, 53, 128, 65, 66, 48, 53, 52, 128, 65, 66, 48, 53, 51, + 128, 65, 66, 48, 53, 49, 128, 65, 66, 48, 53, 48, 128, 65, 66, 48, 52, + 57, 128, 65, 66, 48, 52, 56, 128, 65, 66, 48, 52, 55, 128, 65, 66, 48, + 52, 54, 128, 65, 66, 48, 52, 53, 128, 65, 66, 48, 52, 52, 128, 65, 66, + 48, 52, 49, 128, 65, 66, 48, 52, 48, 128, 65, 66, 48, 51, 57, 128, 65, + 66, 48, 51, 56, 128, 65, 66, 48, 51, 55, 128, 65, 66, 48, 51, 52, 128, + 65, 66, 48, 51, 49, 128, 65, 66, 48, 51, 48, 128, 65, 66, 48, 50, 57, + 128, 65, 66, 48, 50, 56, 128, 65, 66, 48, 50, 55, 128, 65, 66, 48, 50, + 54, 128, 65, 66, 48, 50, 52, 128, 65, 66, 48, 50, 51, 77, 128, 65, 66, + 48, 50, 51, 128, 65, 66, 48, 50, 50, 77, 128, 65, 66, 48, 50, 50, 70, + 128, 65, 66, 48, 50, 50, 128, 65, 66, 48, 50, 49, 77, 128, 65, 66, 48, + 50, 49, 70, 128, 65, 66, 48, 50, 49, 128, 65, 66, 48, 50, 48, 128, 65, + 66, 48, 49, 55, 128, 65, 66, 48, 49, 54, 128, 65, 66, 48, 49, 51, 128, + 65, 66, 48, 49, 49, 128, 65, 66, 48, 49, 48, 128, 65, 66, 48, 48, 57, + 128, 65, 66, 48, 48, 56, 128, 65, 66, 48, 48, 55, 128, 65, 66, 48, 48, + 54, 128, 65, 66, 48, 48, 53, 128, 65, 66, 48, 48, 52, 128, 65, 66, 48, + 48, 51, 128, 65, 66, 48, 48, 50, 128, 65, 66, 48, 48, 49, 128, 65, 65, + 89, 73, 78, 128, 65, 65, 89, 65, 78, 78, 65, 128, 65, 65, 89, 128, 65, + 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128, 65, 65, 66, 65, 65, 70, + 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65, 48, 51, 49, 128, 65, + 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65, 65, 48, 50, 56, 128, + 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128, 65, 65, 48, 50, 53, + 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51, 128, 65, 65, 48, 50, + 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50, 48, 128, 65, 65, 48, + 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48, 49, 55, 128, 65, 65, + 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65, 48, 49, 52, 128, 65, + 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65, 65, 48, 49, 49, 128, + 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128, 65, 65, 48, 48, 56, + 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, 65, 128, 65, 65, + 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, 48, 53, 128, 65, + 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, 48, 48, 50, 128, + 65, 65, 48, 48, 49, 128, 65, 56, 48, 55, 128, 65, 56, 48, 54, 128, 65, + 56, 48, 53, 128, 65, 56, 48, 52, 128, 65, 56, 48, 51, 128, 65, 56, 48, + 50, 128, 65, 56, 48, 49, 128, 65, 56, 48, 48, 128, 65, 55, 51, 178, 65, + 55, 50, 182, 65, 55, 49, 183, 65, 55, 49, 181, 65, 55, 49, 180, 65, 55, + 49, 179, 65, 55, 49, 178, 65, 55, 49, 177, 65, 55, 49, 176, 65, 55, 48, + 57, 45, 182, 65, 55, 48, 57, 45, 180, 65, 55, 48, 57, 45, 179, 65, 55, + 48, 57, 45, 178, 65, 55, 48, 185, 65, 55, 48, 184, 65, 55, 48, 183, 65, + 55, 48, 182, 65, 55, 48, 181, 65, 55, 48, 180, 65, 55, 48, 179, 65, 55, + 48, 178, 65, 55, 48, 177, 65, 54, 54, 52, 128, 65, 54, 54, 51, 128, 65, + 54, 54, 50, 128, 65, 54, 54, 49, 128, 65, 54, 54, 48, 128, 65, 54, 53, + 57, 128, 65, 54, 53, 56, 128, 65, 54, 53, 55, 128, 65, 54, 53, 54, 128, + 65, 54, 53, 53, 128, 65, 54, 53, 52, 128, 65, 54, 53, 51, 128, 65, 54, + 53, 50, 128, 65, 54, 53, 49, 128, 65, 54, 52, 57, 128, 65, 54, 52, 56, + 128, 65, 54, 52, 54, 128, 65, 54, 52, 53, 128, 65, 54, 52, 52, 128, 65, + 54, 52, 51, 128, 65, 54, 52, 50, 128, 65, 54, 52, 48, 128, 65, 54, 51, + 56, 128, 65, 54, 51, 55, 128, 65, 54, 51, 52, 128, 65, 54, 50, 57, 128, + 65, 54, 50, 56, 128, 65, 54, 50, 55, 128, 65, 54, 50, 54, 128, 65, 54, + 50, 52, 128, 65, 54, 50, 51, 128, 65, 54, 50, 50, 128, 65, 54, 50, 49, + 128, 65, 54, 50, 48, 128, 65, 54, 49, 57, 128, 65, 54, 49, 56, 128, 65, + 54, 49, 55, 128, 65, 54, 49, 54, 128, 65, 54, 49, 53, 128, 65, 54, 49, + 52, 128, 65, 54, 49, 51, 128, 65, 54, 49, 50, 128, 65, 54, 49, 49, 128, + 65, 54, 49, 48, 128, 65, 54, 48, 57, 128, 65, 54, 48, 56, 128, 65, 54, + 48, 54, 128, 65, 54, 48, 52, 128, 65, 54, 48, 51, 128, 65, 54, 48, 50, + 128, 65, 54, 48, 49, 128, 65, 54, 48, 48, 128, 65, 53, 57, 56, 128, 65, + 53, 57, 54, 128, 65, 53, 57, 53, 128, 65, 53, 57, 52, 128, 65, 53, 57, + 50, 128, 65, 53, 57, 49, 128, 65, 53, 56, 57, 128, 65, 53, 56, 56, 128, + 65, 53, 56, 55, 128, 65, 53, 56, 54, 128, 65, 53, 56, 53, 128, 65, 53, + 56, 52, 128, 65, 53, 56, 51, 128, 65, 53, 56, 50, 128, 65, 53, 56, 49, + 128, 65, 53, 56, 48, 128, 65, 53, 55, 57, 128, 65, 53, 55, 56, 128, 65, + 53, 55, 55, 128, 65, 53, 55, 54, 128, 65, 53, 55, 53, 128, 65, 53, 55, + 52, 128, 65, 53, 55, 51, 128, 65, 53, 55, 50, 128, 65, 53, 55, 49, 128, + 65, 53, 55, 48, 128, 65, 53, 54, 57, 128, 65, 53, 54, 56, 128, 65, 53, + 54, 54, 128, 65, 53, 54, 53, 128, 65, 53, 54, 52, 128, 65, 53, 54, 51, + 128, 65, 53, 53, 57, 128, 65, 53, 53, 55, 128, 65, 53, 53, 54, 128, 65, + 53, 53, 53, 128, 65, 53, 53, 52, 128, 65, 53, 53, 51, 128, 65, 53, 53, + 50, 128, 65, 53, 53, 49, 128, 65, 53, 53, 48, 128, 65, 53, 52, 57, 128, + 65, 53, 52, 56, 128, 65, 53, 52, 55, 128, 65, 53, 52, 53, 128, 65, 53, + 52, 50, 128, 65, 53, 52, 49, 128, 65, 53, 52, 48, 128, 65, 53, 51, 57, + 128, 65, 53, 51, 56, 128, 65, 53, 51, 55, 128, 65, 53, 51, 54, 128, 65, + 53, 51, 53, 128, 65, 53, 51, 52, 128, 65, 53, 51, 50, 128, 65, 53, 51, + 49, 128, 65, 53, 51, 48, 128, 65, 53, 50, 57, 128, 65, 53, 50, 56, 128, + 65, 53, 50, 55, 128, 65, 53, 50, 54, 128, 65, 53, 50, 53, 128, 65, 53, + 50, 52, 128, 65, 53, 50, 51, 128, 65, 53, 50, 50, 128, 65, 53, 50, 49, + 128, 65, 53, 50, 48, 128, 65, 53, 49, 57, 128, 65, 53, 49, 56, 128, 65, + 53, 49, 55, 128, 65, 53, 49, 54, 128, 65, 53, 49, 53, 128, 65, 53, 49, + 52, 128, 65, 53, 49, 51, 128, 65, 53, 49, 50, 128, 65, 53, 49, 49, 128, + 65, 53, 49, 48, 128, 65, 53, 48, 57, 128, 65, 53, 48, 56, 128, 65, 53, + 48, 55, 128, 65, 53, 48, 54, 128, 65, 53, 48, 53, 128, 65, 53, 48, 52, + 128, 65, 53, 48, 51, 128, 65, 53, 48, 50, 128, 65, 53, 48, 49, 128, 65, + 52, 57, 55, 128, 65, 52, 57, 54, 128, 65, 52, 57, 53, 128, 65, 52, 57, + 52, 128, 65, 52, 57, 51, 128, 65, 52, 57, 50, 128, 65, 52, 57, 49, 128, + 65, 52, 57, 48, 128, 65, 52, 56, 57, 128, 65, 52, 56, 56, 128, 65, 52, + 56, 55, 128, 65, 52, 56, 54, 128, 65, 52, 56, 53, 128, 65, 52, 56, 52, + 128, 65, 52, 56, 51, 128, 65, 52, 56, 50, 128, 65, 52, 56, 49, 128, 65, + 52, 56, 48, 128, 65, 52, 55, 57, 128, 65, 52, 55, 56, 128, 65, 52, 55, + 55, 128, 65, 52, 55, 54, 128, 65, 52, 55, 53, 128, 65, 52, 55, 52, 128, + 65, 52, 55, 51, 128, 65, 52, 55, 50, 128, 65, 52, 55, 49, 128, 65, 52, + 55, 48, 128, 65, 52, 54, 57, 128, 65, 52, 54, 56, 128, 65, 52, 54, 55, + 128, 65, 52, 54, 54, 128, 65, 52, 54, 53, 128, 65, 52, 54, 52, 128, 65, + 52, 54, 51, 128, 65, 52, 54, 50, 128, 65, 52, 54, 49, 128, 65, 52, 54, + 48, 128, 65, 52, 53, 57, 128, 65, 52, 53, 56, 128, 65, 52, 53, 55, 65, + 128, 65, 52, 53, 55, 128, 65, 52, 53, 54, 128, 65, 52, 53, 53, 128, 65, + 52, 53, 52, 128, 65, 52, 53, 51, 128, 65, 52, 53, 50, 128, 65, 52, 53, + 49, 128, 65, 52, 53, 48, 65, 128, 65, 52, 53, 48, 128, 65, 52, 52, 57, + 128, 65, 52, 52, 56, 128, 65, 52, 52, 55, 128, 65, 52, 52, 54, 128, 65, + 52, 52, 53, 128, 65, 52, 52, 52, 128, 65, 52, 52, 51, 128, 65, 52, 52, + 50, 128, 65, 52, 52, 49, 128, 65, 52, 52, 48, 128, 65, 52, 51, 57, 128, + 65, 52, 51, 56, 128, 65, 52, 51, 55, 128, 65, 52, 51, 54, 128, 65, 52, + 51, 53, 128, 65, 52, 51, 52, 128, 65, 52, 51, 51, 128, 65, 52, 51, 50, + 128, 65, 52, 51, 49, 128, 65, 52, 51, 48, 128, 65, 52, 50, 57, 128, 65, + 52, 50, 56, 128, 65, 52, 50, 55, 128, 65, 52, 50, 54, 128, 65, 52, 50, + 53, 128, 65, 52, 50, 52, 128, 65, 52, 50, 51, 128, 65, 52, 50, 50, 128, + 65, 52, 50, 49, 128, 65, 52, 50, 48, 128, 65, 52, 49, 57, 128, 65, 52, + 49, 56, 45, 86, 65, 83, 128, 65, 52, 49, 56, 128, 65, 52, 49, 55, 45, 86, + 65, 83, 128, 65, 52, 49, 55, 128, 65, 52, 49, 54, 45, 86, 65, 83, 128, + 65, 52, 49, 54, 128, 65, 52, 49, 53, 45, 86, 65, 83, 128, 65, 52, 49, 53, + 128, 65, 52, 49, 52, 45, 86, 65, 83, 128, 65, 52, 49, 52, 128, 65, 52, + 49, 51, 45, 86, 65, 83, 128, 65, 52, 49, 51, 128, 65, 52, 49, 50, 45, 86, + 65, 83, 128, 65, 52, 49, 50, 128, 65, 52, 49, 49, 45, 86, 65, 83, 128, + 65, 52, 49, 49, 128, 65, 52, 49, 48, 193, 65, 52, 49, 48, 45, 86, 65, 83, + 128, 65, 52, 49, 176, 65, 52, 48, 57, 45, 86, 65, 83, 128, 65, 52, 48, + 57, 128, 65, 52, 48, 56, 45, 86, 65, 83, 128, 65, 52, 48, 56, 128, 65, + 52, 48, 55, 45, 86, 65, 83, 128, 65, 52, 48, 55, 128, 65, 52, 48, 54, 45, + 86, 65, 83, 128, 65, 52, 48, 54, 128, 65, 52, 48, 53, 45, 86, 65, 83, + 128, 65, 52, 48, 53, 128, 65, 52, 48, 52, 45, 86, 65, 83, 128, 65, 52, + 48, 52, 128, 65, 52, 48, 51, 45, 86, 65, 83, 128, 65, 52, 48, 51, 128, + 65, 52, 48, 50, 45, 86, 65, 83, 128, 65, 52, 48, 50, 128, 65, 52, 48, 49, + 45, 86, 65, 83, 128, 65, 52, 48, 49, 128, 65, 52, 48, 48, 45, 86, 65, 83, + 128, 65, 52, 48, 48, 128, 65, 51, 57, 57, 128, 65, 51, 57, 56, 128, 65, + 51, 57, 55, 128, 65, 51, 57, 54, 128, 65, 51, 57, 53, 128, 65, 51, 57, + 52, 128, 65, 51, 57, 179, 65, 51, 57, 50, 128, 65, 51, 57, 49, 128, 65, + 51, 57, 48, 128, 65, 51, 56, 57, 128, 65, 51, 56, 56, 128, 65, 51, 56, + 55, 128, 65, 51, 56, 54, 65, 128, 65, 51, 56, 54, 128, 65, 51, 56, 53, + 128, 65, 51, 56, 52, 128, 65, 51, 56, 51, 65, 128, 65, 51, 56, 179, 65, + 51, 56, 50, 128, 65, 51, 56, 49, 65, 128, 65, 51, 56, 49, 128, 65, 51, + 56, 48, 128, 65, 51, 55, 57, 128, 65, 51, 55, 56, 128, 65, 51, 55, 55, + 128, 65, 51, 55, 54, 128, 65, 51, 55, 53, 128, 65, 51, 55, 52, 128, 65, + 51, 55, 51, 128, 65, 51, 55, 50, 128, 65, 51, 55, 49, 65, 128, 65, 51, + 55, 49, 128, 65, 51, 55, 48, 128, 65, 51, 54, 57, 128, 65, 51, 54, 56, + 65, 128, 65, 51, 54, 56, 128, 65, 51, 54, 55, 128, 65, 51, 54, 54, 128, + 65, 51, 54, 53, 128, 65, 51, 54, 52, 65, 128, 65, 51, 54, 52, 128, 65, + 51, 54, 51, 128, 65, 51, 54, 50, 128, 65, 51, 54, 49, 128, 65, 51, 54, + 48, 128, 65, 51, 53, 57, 65, 128, 65, 51, 53, 57, 128, 65, 51, 53, 56, + 128, 65, 51, 53, 55, 128, 65, 51, 53, 54, 128, 65, 51, 53, 53, 128, 65, + 51, 53, 52, 128, 65, 51, 53, 51, 128, 65, 51, 53, 50, 128, 65, 51, 53, + 49, 128, 65, 51, 53, 48, 128, 65, 51, 52, 57, 128, 65, 51, 52, 56, 128, + 65, 51, 52, 55, 128, 65, 51, 52, 54, 128, 65, 51, 52, 53, 128, 65, 51, + 52, 52, 128, 65, 51, 52, 51, 128, 65, 51, 52, 50, 128, 65, 51, 52, 49, + 128, 65, 51, 52, 48, 128, 65, 51, 51, 57, 128, 65, 51, 51, 56, 128, 65, + 51, 51, 55, 128, 65, 51, 51, 54, 67, 128, 65, 51, 51, 54, 66, 128, 65, + 51, 51, 54, 65, 128, 65, 51, 51, 54, 128, 65, 51, 51, 53, 128, 65, 51, + 51, 52, 128, 65, 51, 51, 51, 128, 65, 51, 51, 50, 67, 128, 65, 51, 51, + 50, 66, 128, 65, 51, 51, 50, 65, 128, 65, 51, 51, 50, 128, 65, 51, 51, + 49, 128, 65, 51, 51, 48, 128, 65, 51, 50, 57, 65, 128, 65, 51, 50, 57, + 128, 65, 51, 50, 56, 128, 65, 51, 50, 55, 128, 65, 51, 50, 54, 128, 65, + 51, 50, 53, 128, 65, 51, 50, 52, 128, 65, 51, 50, 51, 128, 65, 51, 50, + 50, 128, 65, 51, 50, 49, 128, 65, 51, 50, 48, 128, 65, 51, 49, 57, 128, + 65, 51, 49, 56, 128, 65, 51, 49, 55, 128, 65, 51, 49, 54, 128, 65, 51, + 49, 53, 128, 65, 51, 49, 52, 128, 65, 51, 49, 51, 67, 128, 65, 51, 49, + 51, 66, 128, 65, 51, 49, 51, 65, 128, 65, 51, 49, 51, 128, 65, 51, 49, + 50, 128, 65, 51, 49, 49, 128, 65, 51, 49, 48, 128, 65, 51, 48, 57, 67, + 128, 65, 51, 48, 57, 66, 128, 65, 51, 48, 57, 65, 128, 65, 51, 48, 57, + 128, 65, 51, 48, 56, 128, 65, 51, 48, 55, 128, 65, 51, 48, 54, 128, 65, + 51, 48, 53, 128, 65, 51, 48, 52, 128, 65, 51, 48, 51, 128, 65, 51, 48, + 50, 128, 65, 51, 48, 49, 128, 65, 51, 48, 48, 128, 65, 50, 57, 57, 65, + 128, 65, 50, 57, 57, 128, 65, 50, 57, 56, 128, 65, 50, 57, 55, 128, 65, + 50, 57, 54, 128, 65, 50, 57, 53, 128, 65, 50, 57, 52, 65, 128, 65, 50, + 57, 52, 128, 65, 50, 57, 51, 128, 65, 50, 57, 50, 128, 65, 50, 57, 49, + 128, 65, 50, 57, 48, 128, 65, 50, 56, 57, 65, 128, 65, 50, 56, 57, 128, + 65, 50, 56, 56, 128, 65, 50, 56, 55, 128, 65, 50, 56, 54, 128, 65, 50, + 56, 53, 128, 65, 50, 56, 52, 128, 65, 50, 56, 51, 128, 65, 50, 56, 50, + 128, 65, 50, 56, 49, 128, 65, 50, 56, 48, 128, 65, 50, 55, 57, 128, 65, + 50, 55, 56, 128, 65, 50, 55, 55, 128, 65, 50, 55, 54, 128, 65, 50, 55, + 53, 128, 65, 50, 55, 52, 128, 65, 50, 55, 51, 128, 65, 50, 55, 50, 128, + 65, 50, 55, 49, 128, 65, 50, 55, 48, 128, 65, 50, 54, 57, 128, 65, 50, + 54, 56, 128, 65, 50, 54, 55, 65, 128, 65, 50, 54, 55, 128, 65, 50, 54, + 54, 128, 65, 50, 54, 53, 128, 65, 50, 54, 52, 128, 65, 50, 54, 51, 128, + 65, 50, 54, 50, 128, 65, 50, 54, 49, 128, 65, 50, 54, 48, 128, 65, 50, + 53, 57, 128, 65, 50, 53, 56, 128, 65, 50, 53, 55, 128, 65, 50, 53, 54, + 128, 65, 50, 53, 53, 128, 65, 50, 53, 52, 128, 65, 50, 53, 51, 128, 65, + 50, 53, 50, 128, 65, 50, 53, 49, 128, 65, 50, 53, 48, 128, 65, 50, 52, + 57, 128, 65, 50, 52, 56, 128, 65, 50, 52, 55, 128, 65, 50, 52, 54, 128, + 65, 50, 52, 53, 128, 65, 50, 52, 52, 128, 65, 50, 52, 51, 128, 65, 50, + 52, 50, 128, 65, 50, 52, 49, 128, 65, 50, 52, 48, 128, 65, 50, 51, 57, + 128, 65, 50, 51, 56, 128, 65, 50, 51, 55, 128, 65, 50, 51, 54, 128, 65, + 50, 51, 53, 128, 65, 50, 51, 52, 128, 65, 50, 51, 51, 128, 65, 50, 51, + 50, 128, 65, 50, 51, 49, 128, 65, 50, 51, 48, 128, 65, 50, 50, 57, 128, + 65, 50, 50, 56, 128, 65, 50, 50, 55, 65, 128, 65, 50, 50, 55, 128, 65, + 50, 50, 54, 128, 65, 50, 50, 53, 128, 65, 50, 50, 52, 128, 65, 50, 50, + 51, 128, 65, 50, 50, 50, 128, 65, 50, 50, 49, 128, 65, 50, 50, 48, 128, + 65, 50, 49, 57, 128, 65, 50, 49, 56, 128, 65, 50, 49, 55, 128, 65, 50, + 49, 54, 65, 128, 65, 50, 49, 54, 128, 65, 50, 49, 53, 65, 128, 65, 50, + 49, 53, 128, 65, 50, 49, 52, 128, 65, 50, 49, 51, 128, 65, 50, 49, 50, + 128, 65, 50, 49, 49, 128, 65, 50, 49, 48, 128, 65, 50, 48, 57, 65, 128, + 65, 50, 48, 57, 128, 65, 50, 48, 56, 128, 65, 50, 48, 55, 65, 128, 65, + 50, 48, 55, 128, 65, 50, 48, 54, 128, 65, 50, 48, 53, 128, 65, 50, 48, + 52, 128, 65, 50, 48, 51, 128, 65, 50, 48, 50, 66, 128, 65, 50, 48, 50, + 65, 128, 65, 50, 48, 50, 128, 65, 50, 48, 49, 128, 65, 50, 48, 48, 128, + 65, 49, 57, 57, 128, 65, 49, 57, 56, 128, 65, 49, 57, 55, 128, 65, 49, + 57, 54, 128, 65, 49, 57, 53, 128, 65, 49, 57, 52, 128, 65, 49, 57, 51, + 128, 65, 49, 57, 50, 128, 65, 49, 57, 49, 128, 65, 49, 57, 48, 128, 65, + 49, 56, 57, 128, 65, 49, 56, 56, 128, 65, 49, 56, 55, 128, 65, 49, 56, + 54, 128, 65, 49, 56, 53, 128, 65, 49, 56, 52, 128, 65, 49, 56, 51, 128, + 65, 49, 56, 50, 128, 65, 49, 56, 49, 128, 65, 49, 56, 48, 128, 65, 49, + 55, 57, 128, 65, 49, 55, 56, 128, 65, 49, 55, 55, 128, 65, 49, 55, 54, + 128, 65, 49, 55, 53, 128, 65, 49, 55, 52, 128, 65, 49, 55, 51, 128, 65, + 49, 55, 50, 128, 65, 49, 55, 49, 128, 65, 49, 55, 48, 128, 65, 49, 54, + 57, 128, 65, 49, 54, 56, 128, 65, 49, 54, 55, 128, 65, 49, 54, 54, 128, + 65, 49, 54, 53, 128, 65, 49, 54, 52, 128, 65, 49, 54, 51, 128, 65, 49, + 54, 50, 128, 65, 49, 54, 49, 128, 65, 49, 54, 48, 128, 65, 49, 53, 57, + 128, 65, 49, 53, 56, 128, 65, 49, 53, 55, 128, 65, 49, 53, 54, 128, 65, + 49, 53, 53, 128, 65, 49, 53, 52, 128, 65, 49, 53, 51, 128, 65, 49, 53, + 50, 128, 65, 49, 53, 49, 128, 65, 49, 53, 48, 128, 65, 49, 52, 57, 128, + 65, 49, 52, 56, 128, 65, 49, 52, 55, 128, 65, 49, 52, 54, 128, 65, 49, + 52, 53, 128, 65, 49, 52, 52, 128, 65, 49, 52, 51, 128, 65, 49, 52, 50, + 128, 65, 49, 52, 49, 128, 65, 49, 52, 48, 128, 65, 49, 51, 57, 128, 65, + 49, 51, 56, 128, 65, 49, 51, 55, 128, 65, 49, 51, 54, 128, 65, 49, 51, + 53, 65, 128, 65, 49, 51, 53, 128, 65, 49, 51, 52, 128, 65, 49, 51, 51, + 128, 65, 49, 51, 50, 128, 65, 49, 51, 49, 67, 128, 65, 49, 51, 49, 128, + 65, 49, 51, 48, 128, 65, 49, 50, 57, 128, 65, 49, 50, 56, 128, 65, 49, + 50, 55, 128, 65, 49, 50, 54, 128, 65, 49, 50, 53, 65, 128, 65, 49, 50, + 53, 128, 65, 49, 50, 52, 128, 65, 49, 50, 51, 128, 65, 49, 50, 50, 128, + 65, 49, 50, 49, 128, 65, 49, 50, 48, 66, 128, 65, 49, 50, 48, 128, 65, + 49, 49, 57, 128, 65, 49, 49, 56, 128, 65, 49, 49, 55, 128, 65, 49, 49, + 54, 128, 65, 49, 49, 53, 65, 128, 65, 49, 49, 53, 128, 65, 49, 49, 52, + 128, 65, 49, 49, 51, 128, 65, 49, 49, 50, 128, 65, 49, 49, 49, 128, 65, + 49, 49, 48, 66, 128, 65, 49, 49, 48, 65, 128, 65, 49, 49, 48, 128, 65, + 49, 48, 57, 128, 65, 49, 48, 56, 128, 65, 49, 48, 55, 67, 128, 65, 49, + 48, 55, 66, 128, 65, 49, 48, 55, 65, 128, 65, 49, 48, 55, 128, 65, 49, + 48, 54, 128, 65, 49, 48, 53, 66, 128, 65, 49, 48, 53, 65, 128, 65, 49, + 48, 53, 128, 65, 49, 48, 52, 67, 128, 65, 49, 48, 52, 66, 128, 65, 49, + 48, 52, 65, 128, 65, 49, 48, 52, 128, 65, 49, 48, 51, 128, 65, 49, 48, + 50, 65, 128, 65, 49, 48, 50, 128, 65, 49, 48, 49, 65, 128, 65, 49, 48, + 49, 128, 65, 49, 48, 48, 65, 128, 65, 49, 48, 48, 45, 49, 48, 50, 128, + 65, 49, 48, 48, 128, 65, 48, 57, 57, 128, 65, 48, 57, 56, 65, 128, 65, + 48, 57, 56, 128, 65, 48, 57, 55, 65, 128, 65, 48, 57, 55, 128, 65, 48, + 57, 54, 128, 65, 48, 57, 53, 128, 65, 48, 57, 52, 128, 65, 48, 57, 51, + 128, 65, 48, 57, 50, 128, 65, 48, 57, 49, 128, 65, 48, 57, 48, 128, 65, + 48, 56, 57, 128, 65, 48, 56, 56, 128, 65, 48, 56, 55, 128, 65, 48, 56, + 54, 128, 65, 48, 56, 53, 128, 65, 48, 56, 52, 128, 65, 48, 56, 51, 128, + 65, 48, 56, 50, 128, 65, 48, 56, 49, 128, 65, 48, 56, 48, 128, 65, 48, + 55, 57, 128, 65, 48, 55, 56, 128, 65, 48, 55, 55, 128, 65, 48, 55, 54, + 128, 65, 48, 55, 53, 128, 65, 48, 55, 52, 128, 65, 48, 55, 51, 128, 65, + 48, 55, 50, 128, 65, 48, 55, 49, 128, 65, 48, 55, 48, 128, 65, 48, 54, + 57, 128, 65, 48, 54, 56, 128, 65, 48, 54, 55, 128, 65, 48, 54, 54, 67, + 128, 65, 48, 54, 54, 66, 128, 65, 48, 54, 54, 65, 128, 65, 48, 54, 54, + 128, 65, 48, 54, 53, 128, 65, 48, 54, 52, 128, 65, 48, 54, 51, 128, 65, + 48, 54, 50, 128, 65, 48, 54, 49, 128, 65, 48, 54, 48, 128, 65, 48, 53, + 57, 128, 65, 48, 53, 56, 128, 65, 48, 53, 55, 128, 65, 48, 53, 54, 128, + 65, 48, 53, 53, 128, 65, 48, 53, 52, 128, 65, 48, 53, 51, 128, 65, 48, + 53, 50, 128, 65, 48, 53, 49, 128, 65, 48, 53, 48, 128, 65, 48, 52, 57, + 128, 65, 48, 52, 56, 128, 65, 48, 52, 55, 128, 65, 48, 52, 54, 66, 128, + 65, 48, 52, 54, 65, 128, 65, 48, 52, 54, 128, 65, 48, 52, 53, 65, 128, + 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, 52, 51, 65, 128, 65, + 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, 52, 50, 128, 65, 48, + 52, 49, 65, 128, 65, 48, 52, 49, 128, 65, 48, 52, 48, 65, 128, 65, 48, + 52, 48, 128, 65, 48, 51, 57, 65, 128, 65, 48, 51, 57, 128, 65, 48, 51, + 56, 128, 65, 48, 51, 55, 128, 65, 48, 51, 54, 128, 65, 48, 51, 53, 128, + 65, 48, 51, 52, 128, 65, 48, 51, 51, 128, 65, 48, 51, 50, 65, 128, 65, + 48, 50, 56, 66, 128, 65, 48, 50, 54, 65, 128, 65, 48, 49, 55, 65, 128, + 65, 48, 49, 52, 65, 128, 65, 48, 49, 48, 65, 128, 65, 48, 48, 54, 66, + 128, 65, 48, 48, 54, 65, 128, 65, 48, 48, 53, 65, 128, 65, 45, 69, 85, + 128, 45, 85, 205, 45, 80, 72, 82, 85, 128, 45, 75, 72, 89, 85, 196, 45, + 75, 72, 89, 73, 76, 128, 45, 68, 90, 85, 196, 45, 67, 72, 65, 210, 45, + 67, 72, 65, 76, 128, }; static unsigned int lexicon_offset[] = { - 0, 0, 6, 10, 14, 22, 27, 34, 44, 49, 58, 64, 66, 69, 81, 89, 102, 108, - 113, 118, 126, 135, 146, 151, 156, 161, 164, 168, 177, 183, 189, 194, - 201, 209, 217, 218, 221, 229, 165, 235, 244, 251, 261, 267, 274, 279, - 282, 287, 293, 296, 300, 305, 311, 317, 322, 327, 333, 339, 348, 355, - 362, 371, 376, 381, 383, 391, 399, 400, 408, 410, 417, 420, 426, 433, - 331, 438, 440, 442, 449, 451, 456, 464, 471, 476, 480, 486, 491, 501, - 506, 513, 516, 524, 528, 538, 545, 554, 561, 570, 577, 580, 584, 592, - 598, 611, 618, 622, 626, 627, 636, 640, 649, 655, 659, 661, 666, 674, - 678, 686, 691, 694, 700, 703, 707, 712, 720, 723, 730, 735, 744, 753, - 761, 769, 773, 779, 787, 794, 797, 807, 811, 815, 826, 833, 840, 844, - 848, 854, 842, 863, 869, 874, 879, 883, 886, 889, 894, 903, 911, 916, - 658, 575, 921, 924, 930, 934, 938, 947, 953, 960, 969, 976, 989, 994, - 998, 1006, 1009, 1015, 1021, 1030, 1037, 1045, 1052, 1062, 1069, 1077, - 1086, 1090, 1093, 1100, 21, 1104, 1113, 1121, 1128, 1131, 1136, 1138, - 1142, 1151, 1156, 1159, 1165, 1172, 1175, 1180, 1185, 1191, 1196, 1201, - 1206, 1210, 1215, 1221, 1226, 1231, 1235, 1241, 1246, 1251, 1256, 1260, - 1265, 1270, 1275, 1281, 1287, 1293, 1298, 1302, 1307, 1312, 1317, 1321, - 1326, 1331, 1336, 1341, 1176, 1181, 1186, 1192, 1197, 1345, 1207, 1351, - 1356, 1361, 1368, 1372, 1375, 1384, 1211, 1388, 1216, 1222, 1227, 1392, - 1397, 1402, 1406, 1410, 1416, 1420, 1232, 1423, 1425, 1242, 1430, 1434, - 1247, 1440, 1252, 1444, 1448, 1257, 1452, 1457, 1461, 1464, 1468, 1261, - 1266, 1473, 1479, 1271, 1491, 1497, 1503, 1509, 1276, 1288, 1294, 1513, - 1517, 1521, 1524, 1299, 1528, 1530, 1535, 1540, 1546, 1551, 1556, 1560, - 1565, 1570, 1575, 1580, 1586, 1591, 1596, 1602, 1608, 1613, 1617, 1622, - 1627, 1632, 1637, 1642, 1646, 1654, 1659, 1663, 1668, 1673, 1678, 1683, - 1687, 1690, 1697, 1702, 1707, 1712, 1717, 1723, 1728, 1732, 1303, 1735, - 1740, 1745, 1308, 1749, 1753, 1760, 1313, 1767, 1318, 1771, 1773, 1778, - 1784, 1322, 1789, 1798, 1327, 1803, 1809, 1814, 1332, 1819, 1824, 1827, - 1832, 1836, 1840, 1844, 1847, 1851, 1337, 1856, 1342, 1860, 1862, 1868, - 1874, 1880, 1886, 1892, 1898, 1904, 1910, 1915, 1921, 1927, 1933, 1939, - 1945, 1951, 1957, 1963, 1969, 1974, 1979, 1984, 1989, 1994, 1999, 2004, - 2009, 2014, 2019, 2025, 2030, 2036, 2041, 2047, 2053, 2058, 2064, 2070, - 2076, 2082, 2087, 2092, 2094, 2095, 2099, 2103, 2108, 2112, 2116, 2120, - 2125, 2129, 2132, 2137, 2141, 2146, 2150, 2154, 2159, 2163, 2166, 2170, - 2176, 2190, 2194, 2198, 2202, 2205, 2210, 2214, 2218, 2221, 2225, 2230, - 2235, 2240, 2245, 2249, 2253, 2257, 2261, 2266, 2270, 2275, 2279, 2284, - 2290, 2297, 2303, 2308, 2313, 2318, 2324, 2329, 2335, 2340, 2343, 2345, - 1193, 2349, 2356, 2364, 2374, 2383, 2397, 2401, 2405, 2410, 2423, 2431, - 2435, 2440, 2444, 2447, 2451, 2455, 2460, 2465, 2470, 2474, 2477, 2481, - 2488, 2495, 2501, 2506, 2511, 2517, 2523, 2528, 2531, 1775, 2533, 2539, - 2543, 2548, 2552, 2556, 1693, 1786, 2561, 2565, 2568, 2573, 2578, 2583, - 2588, 2592, 2599, 2604, 2607, 2614, 2620, 2624, 2628, 2632, 2637, 2644, - 2649, 2654, 2661, 2667, 2673, 2679, 2693, 2710, 2725, 2740, 2749, 2754, - 2758, 2763, 2768, 2772, 2784, 2791, 2797, 2293, 2803, 2810, 2816, 2820, - 2823, 2830, 2836, 2841, 2845, 2850, 2854, 2858, 2117, 2862, 2867, 2872, - 2876, 2881, 2889, 2893, 2898, 2902, 2906, 2910, 2915, 2920, 2925, 2929, - 2934, 2939, 2943, 2948, 2952, 2955, 2959, 2963, 2971, 2976, 2980, 2984, - 2990, 2999, 3003, 3007, 3013, 3018, 3025, 3029, 3039, 3043, 3047, 3052, - 3056, 3061, 3067, 3072, 3076, 3080, 3084, 2491, 3092, 3097, 3103, 3108, - 3112, 3117, 3122, 3126, 3132, 3137, 2121, 3143, 3149, 3154, 3159, 3164, - 3169, 3174, 3179, 3184, 3189, 3194, 3200, 3205, 1208, 101, 3211, 3215, - 3219, 3223, 3228, 3232, 3236, 3242, 3247, 3251, 3255, 3260, 3265, 3269, - 3274, 3278, 3281, 3285, 3290, 3294, 3299, 3303, 3306, 3310, 3314, 3319, - 3323, 3326, 3339, 3343, 3347, 3351, 3356, 3360, 3364, 3367, 3371, 3375, - 3380, 3384, 3389, 3394, 3399, 3403, 3408, 3411, 3414, 3419, 3425, 3429, - 3433, 3436, 3441, 3445, 3450, 3454, 3458, 3461, 3467, 3472, 3477, 3483, - 3488, 3493, 3499, 3505, 3510, 3515, 3520, 3525, 1140, 579, 3528, 3531, - 3536, 3540, 3544, 3548, 3552, 3555, 3559, 3564, 3569, 3573, 3578, 3582, - 3587, 3591, 3595, 3599, 3605, 3611, 3614, 3617, 139, 3623, 3628, 3637, - 3645, 3654, 3661, 3667, 3674, 3679, 3683, 3687, 3695, 3702, 3707, 3714, - 3719, 3723, 3733, 3737, 3741, 3746, 3751, 3761, 2133, 3766, 3770, 3773, - 3779, 3784, 3790, 3796, 3801, 3808, 3812, 3816, 637, 701, 1369, 3820, - 3827, 3834, 3840, 3845, 3852, 3859, 3864, 3870, 3876, 3881, 3885, 3891, - 3898, 3903, 3907, 2142, 3911, 3919, 3925, 3933, 739, 3939, 3947, 3958, - 3962, 3972, 2147, 3978, 3983, 3998, 4004, 4011, 4021, 4027, 4032, 4038, - 4044, 4047, 4050, 4054, 4059, 4066, 4071, 4075, 4079, 4083, 4087, 4092, - 4098, 4109, 4113, 3286, 4118, 4130, 4136, 4144, 4148, 4153, 1562, 4160, - 4163, 4166, 4170, 4173, 4179, 4183, 4197, 4201, 4204, 4208, 4214, 4220, - 4225, 4229, 4233, 4239, 4250, 4256, 4261, 4267, 4271, 4279, 4291, 4301, - 4307, 4312, 4321, 4329, 4336, 4342, 4346, 4352, 4361, 4370, 4374, 4383, - 4388, 4392, 4397, 4401, 4409, 4415, 4419, 4424, 4428, 4434, 2155, 1385, - 4440, 4445, 4451, 4456, 4461, 4466, 4471, 4476, 4481, 4487, 4492, 4498, - 4503, 4508, 4513, 4519, 4524, 4529, 4534, 4539, 4545, 4550, 4556, 4561, - 4566, 4571, 4576, 4581, 4586, 4592, 4597, 4602, 291, 321, 4607, 4613, - 4617, 4621, 4626, 4630, 4634, 4637, 4641, 4645, 4649, 4653, 4657, 4662, - 4666, 4670, 4676, 4437, 4681, 4685, 4688, 4693, 4698, 4703, 4708, 4713, - 4718, 4723, 4728, 4733, 4738, 4742, 4747, 4752, 4757, 4762, 4767, 4772, - 4777, 4782, 4787, 4792, 4796, 4801, 4806, 4811, 4816, 4821, 4826, 4831, - 4836, 4841, 4846, 4850, 4855, 4860, 4865, 4870, 4875, 4880, 4885, 4890, - 4895, 4900, 4904, 4909, 4914, 4919, 4924, 4929, 4934, 4939, 4944, 4949, - 4954, 4958, 4963, 4968, 4973, 4978, 4983, 4988, 4993, 4998, 5003, 5008, - 5012, 5017, 5022, 5027, 5032, 5037, 5042, 5047, 5052, 5057, 5062, 5066, - 5071, 5076, 5081, 5086, 5092, 5098, 5104, 5110, 5116, 5122, 5128, 5133, - 5139, 5145, 5151, 5157, 5163, 5169, 5175, 5181, 5187, 5193, 5198, 5204, - 5210, 5216, 5222, 5228, 5234, 5240, 5246, 5252, 5258, 5263, 5269, 5275, - 5281, 5287, 5293, 5299, 5305, 5311, 5317, 5323, 5328, 5334, 5340, 5346, - 5352, 5358, 5364, 5370, 5376, 5382, 5388, 5393, 5399, 5405, 5411, 5417, - 5423, 5429, 5435, 5441, 5447, 5453, 5458, 5462, 5468, 5474, 5480, 5486, - 5492, 5498, 5504, 5510, 5516, 5522, 5527, 5533, 5539, 5545, 5551, 5557, - 5563, 5569, 5575, 5581, 5587, 5592, 5598, 5604, 5610, 5616, 5622, 5628, - 5634, 5640, 5646, 5652, 5657, 5663, 5669, 5675, 5681, 5687, 5693, 5699, - 5705, 5711, 5717, 5722, 5728, 5734, 5740, 5746, 5752, 5758, 5764, 5770, - 5776, 5782, 5787, 5793, 5799, 5805, 5811, 5817, 5823, 5829, 5835, 5841, - 5847, 5852, 5858, 5864, 5870, 5876, 5882, 5888, 5894, 5900, 5906, 5912, - 5917, 5923, 5929, 5935, 5941, 5947, 5953, 5959, 5965, 5971, 5977, 5982, - 5988, 5994, 6000, 6006, 6012, 6018, 6024, 6030, 6036, 6042, 6047, 6053, - 6059, 6065, 6071, 6077, 6083, 6089, 6095, 6101, 6107, 6112, 6116, 6119, - 6126, 6130, 6143, 6147, 6151, 6155, 6158, 6162, 6167, 6171, 6175, 6181, - 6188, 6199, 6207, 6214, 6218, 6226, 6235, 6241, 6253, 6258, 6261, 6266, - 6270, 6280, 6288, 6296, 6302, 6306, 6316, 6326, 6334, 6341, 6348, 6354, - 6360, 6367, 6371, 6378, 6388, 6398, 6406, 6413, 6418, 6422, 6426, 6434, - 6438, 6443, 6450, 6458, 6463, 6467, 6472, 6476, 6483, 6488, 6502, 6507, - 6512, 6519, 3541, 6528, 6532, 6537, 6541, 6545, 6548, 6553, 6558, 6567, - 6573, 6579, 6585, 6589, 6600, 6610, 6625, 6640, 6655, 6670, 6685, 6700, - 6715, 6730, 6745, 6760, 6775, 6790, 6805, 6820, 6835, 6850, 6865, 6880, - 6895, 6910, 6925, 6940, 6955, 6970, 6985, 7000, 7015, 7030, 7045, 7060, - 7075, 7090, 7105, 7120, 7135, 7150, 7165, 7180, 7195, 7210, 7225, 7240, - 7255, 7270, 7285, 7300, 7315, 7330, 7345, 7354, 7363, 7368, 7374, 7384, - 7388, 7392, 7397, 7402, 7410, 7414, 7417, 7421, 3034, 7424, 7429, 330, - 504, 7435, 7443, 7447, 7451, 7454, 7458, 7464, 7468, 7476, 7482, 7487, - 7494, 7502, 7509, 7515, 7520, 7527, 7533, 7541, 7545, 7550, 7562, 7573, - 7580, 7584, 7588, 7592, 7595, 7601, 3311, 7605, 7611, 7616, 7621, 7626, - 7632, 7637, 7642, 7647, 7652, 7658, 7663, 7668, 7674, 7679, 7685, 7690, - 7696, 7701, 7707, 7712, 7717, 7722, 7727, 7732, 7738, 7743, 7748, 7753, - 7759, 7765, 7771, 7777, 7783, 7789, 7795, 7801, 7807, 7813, 7819, 7825, - 7830, 7835, 7840, 7845, 7850, 7855, 7860, 7865, 7871, 7877, 7882, 7888, - 7894, 7900, 7905, 7910, 7915, 7920, 7926, 7932, 7937, 7942, 7947, 7952, - 7957, 7963, 7968, 7974, 7980, 7986, 7992, 7998, 8004, 8010, 8016, 8022, - 2164, 7453, 8027, 8031, 8035, 8038, 8045, 8048, 8052, 8060, 8065, 8070, - 8061, 8075, 2191, 8079, 8085, 8091, 8096, 8101, 8108, 8116, 8121, 8125, - 8128, 8132, 8138, 8144, 8148, 2199, 526, 8151, 8155, 8160, 8166, 8171, - 8175, 8178, 8182, 8188, 8193, 8197, 8204, 8208, 8212, 8216, 876, 958, - 8219, 8227, 8234, 8240, 8247, 8255, 8262, 8273, 8280, 8286, 8291, 8303, - 1228, 1393, 1398, 8314, 1403, 8318, 8322, 8331, 8339, 8343, 8352, 8358, - 8363, 8367, 8373, 8378, 8385, 2745, 8392, 8396, 8405, 8414, 8423, 8432, - 8438, 8443, 8448, 8459, 8471, 8476, 8484, 2250, 8488, 8490, 8495, 8499, - 8508, 8516, 1407, 159, 3583, 3588, 8522, 8526, 8535, 8541, 8546, 8549, - 8558, 3592, 2737, 8564, 8572, 8576, 8580, 8584, 2267, 8588, 8593, 8600, - 8606, 8612, 8615, 8617, 8620, 8628, 8636, 8644, 8647, 8652, 2280, 8657, - 8072, 8660, 8662, 8667, 8672, 8677, 8682, 8687, 8692, 8697, 8702, 8707, - 8712, 8718, 8723, 8728, 8733, 8739, 8744, 8749, 8754, 8759, 8764, 8769, - 8775, 8780, 8785, 8790, 8795, 8800, 8805, 8810, 8815, 8820, 8825, 8830, - 8835, 8840, 8845, 8850, 8855, 8860, 8866, 8872, 8877, 8882, 8887, 8892, - 8897, 2291, 2298, 2304, 8902, 8910, 8916, 8924, 2330, 2336, 8932, 8936, - 8941, 8945, 8949, 8953, 8958, 8962, 8967, 8971, 8974, 8977, 8983, 8990, - 8996, 9003, 9009, 9016, 9022, 9029, 9035, 9041, 9050, 9056, 9060, 9064, - 9068, 9072, 9077, 9081, 9086, 9090, 9096, 9101, 9108, 9119, 9127, 9137, - 9143, 9153, 9162, 9169, 9174, 9178, 9189, 9202, 9213, 9226, 9237, 9249, - 9261, 9273, 9286, 9299, 9306, 9312, 9326, 9333, 9339, 9348, 9356, 9360, - 9365, 9369, 9376, 9384, 9388, 9394, 9398, 9404, 9414, 9418, 9423, 9428, - 9435, 9441, 9451, 8242, 9457, 9461, 9468, 9474, 9481, 9488, 957, 9492, - 9496, 9501, 9506, 9511, 9515, 9521, 9529, 9535, 9539, 9542, 9548, 9558, - 9562, 9568, 9573, 9577, 9581, 9587, 9593, 2187, 9598, 9600, 9605, 9613, - 9622, 9626, 9632, 9637, 9642, 9647, 9652, 9658, 9663, 9668, 4235, 9673, - 9678, 9682, 9688, 9693, 9699, 9704, 9709, 9715, 9720, 9627, 9726, 9730, - 9737, 9743, 9748, 9752, 6498, 9757, 9766, 9771, 9776, 8596, 8603, 9781, - 2912, 9785, 9790, 9795, 9800, 9638, 9804, 9809, 9814, 9643, 9818, 9648, - 9823, 9830, 9837, 9843, 9850, 9856, 9862, 9867, 9874, 9879, 9884, 9889, - 9895, 9653, 9659, 9901, 9907, 9912, 9917, 9925, 9664, 9930, 1102, 9933, - 9941, 9947, 9953, 9962, 9970, 9978, 9986, 9994, 10002, 10010, 10018, - 10026, 10035, 10044, 10052, 10061, 10070, 10079, 10088, 10097, 10106, - 10115, 10124, 10133, 10142, 10150, 10155, 10161, 10169, 10176, 10191, - 10208, 10227, 10236, 10244, 10259, 10270, 10280, 10290, 10298, 10304, - 10316, 10325, 10333, 10340, 10347, 10354, 10360, 10365, 10375, 10383, - 10393, 10400, 10410, 10420, 10430, 10438, 10445, 10454, 10464, 10478, - 10493, 10502, 10510, 10515, 10519, 10528, 10534, 10539, 10549, 10559, - 10569, 10574, 10578, 10587, 10592, 10608, 10625, 10635, 10646, 10659, - 10667, 10680, 10692, 10700, 10705, 10709, 10715, 10720, 10728, 10736, - 10743, 10748, 10756, 10766, 10772, 10776, 10779, 10783, 10789, 10796, - 10800, 10808, 10817, 10825, 10832, 10837, 10842, 10846, 10850, 10858, - 10873, 10889, 10895, 10903, 10912, 10920, 10926, 10930, 10937, 10948, - 10952, 10955, 10961, 9669, 10966, 10972, 10979, 10985, 10990, 10997, - 11004, 11011, 11018, 11025, 11032, 11039, 11046, 11051, 10204, 11056, - 11062, 11069, 11076, 11081, 11088, 11097, 11101, 11113, 8634, 11117, - 11120, 11124, 11128, 11132, 11136, 11142, 11148, 11153, 11159, 11164, - 11169, 11175, 11180, 11185, 9431, 11190, 11194, 11198, 11202, 11207, - 11212, 11217, 11225, 11231, 11236, 11240, 11244, 11251, 11256, 11264, - 11271, 11276, 11280, 11283, 11289, 11296, 11300, 11303, 11308, 11312, - 4274, 11318, 11327, 46, 11335, 11341, 11346, 11351, 11359, 11366, 11371, - 9446, 11377, 11383, 11388, 11392, 11395, 11410, 11429, 11441, 11454, - 11467, 11480, 11494, 11507, 11522, 11529, 9674, 11535, 11549, 11554, - 11560, 11565, 11573, 11578, 8401, 11583, 11586, 11594, 11601, 11606, - 11610, 11616, 2917, 10278, 11620, 11624, 11630, 11636, 11641, 11647, - 11652, 9683, 11658, 11664, 11669, 11674, 11682, 11688, 11701, 11709, - 11716, 11722, 9689, 11728, 11736, 11744, 11751, 11764, 11777, 11789, - 11799, 11807, 11814, 11826, 11833, 11843, 11852, 11861, 11869, 11876, - 11881, 11887, 9694, 11892, 11898, 11903, 11908, 9700, 11913, 11916, - 11923, 11929, 11942, 9112, 11953, 11959, 11968, 11976, 11983, 11989, - 12000, 12006, 12011, 3836, 12019, 12024, 11402, 12030, 12037, 12042, - 9705, 12048, 12053, 12060, 12066, 12072, 12077, 12085, 12093, 12100, - 12104, 12116, 12130, 12140, 12145, 12149, 12160, 12166, 12171, 12176, - 9710, 12180, 9716, 12185, 12188, 12193, 12205, 12212, 12217, 12221, - 12229, 12234, 12238, 12243, 12247, 12254, 12260, 9721, 9628, 12267, 2922, - 12, 12274, 12279, 12283, 12287, 12293, 12301, 12311, 12316, 12321, 12328, - 12335, 12339, 12350, 12360, 12369, 12378, 12390, 12395, 12399, 12407, - 12421, 12425, 12428, 12436, 12443, 12451, 12455, 12466, 12470, 12477, - 12482, 12486, 12492, 12497, 12503, 12508, 12513, 12517, 12523, 12528, - 12539, 12543, 12546, 12552, 12557, 12563, 12569, 12576, 12587, 12597, - 12607, 12616, 12623, 12632, 12636, 9731, 9738, 9744, 9749, 12642, 12648, - 12654, 12659, 12665, 9753, 12671, 12674, 12681, 12686, 12701, 12717, - 12732, 12740, 12746, 12751, 950, 374, 12756, 12764, 12771, 12777, 12782, - 12787, 9758, 12789, 12793, 12798, 12802, 12812, 12817, 12821, 12830, - 12834, 12837, 12844, 9767, 12849, 12852, 12860, 12867, 12875, 12879, - 12883, 12890, 12899, 12906, 12902, 12913, 12917, 12923, 12927, 12931, - 12935, 12941, 12951, 12959, 12966, 12970, 12978, 12982, 12989, 12993, - 12998, 13002, 13009, 13015, 13023, 13029, 13034, 13044, 13049, 13054, - 13058, 13062, 13070, 4124, 13078, 13083, 9772, 13087, 13091, 13094, - 13102, 13109, 13113, 6298, 13117, 13122, 13127, 13131, 13142, 13152, - 13157, 13163, 13168, 13172, 13175, 13183, 13188, 13193, 13200, 13205, - 9777, 13210, 13214, 13221, 1737, 6456, 13226, 13231, 13236, 13241, 13247, - 13252, 13258, 13263, 13268, 13273, 13278, 13283, 13288, 13293, 13298, - 13303, 13308, 13313, 13318, 13323, 13328, 13333, 13338, 13344, 13349, - 13354, 13359, 13364, 13369, 13375, 13380, 13385, 13391, 13396, 13402, - 13407, 13413, 13418, 13423, 13428, 13433, 13439, 13444, 13449, 13454, - 909, 112, 13462, 13466, 13471, 13476, 13480, 13484, 13488, 13493, 13497, - 13502, 13506, 13509, 13513, 13517, 13523, 13528, 13538, 13544, 13552, - 13558, 13562, 13566, 13573, 13581, 13590, 13601, 13611, 13618, 13625, - 13629, 13638, 13647, 13655, 13664, 13673, 13682, 13691, 13701, 13711, - 13721, 13731, 13741, 13750, 13760, 13770, 13780, 13790, 13800, 13810, - 13820, 13829, 13839, 13849, 13859, 13869, 13879, 13889, 13898, 13908, - 13918, 13928, 13938, 13948, 13958, 13968, 13978, 13988, 13997, 14007, - 14017, 14027, 14037, 14047, 14057, 14067, 14077, 14087, 14097, 14106, - 1237, 14112, 14115, 14119, 14124, 14131, 14137, 14142, 14146, 14151, - 14160, 14168, 14173, 14177, 14181, 14187, 14192, 14198, 9786, 14203, - 14208, 14217, 9796, 14222, 14225, 14231, 14239, 9801, 14246, 14250, - 14254, 14259, 14263, 14273, 14279, 14285, 14290, 14299, 14307, 14314, - 14321, 14326, 14333, 14338, 14342, 14345, 14356, 14366, 14375, 14383, - 14394, 14406, 14416, 14421, 14425, 14430, 14435, 14439, 14445, 14453, - 14460, 14471, 14476, 14486, 14495, 14499, 14502, 14509, 14519, 14528, - 14535, 14539, 14546, 14552, 14557, 14562, 14566, 14575, 14580, 14584, - 14590, 14594, 14599, 14603, 14610, 14617, 14621, 14630, 14638, 14646, - 14653, 14661, 14673, 14684, 14694, 14701, 14707, 14716, 14727, 14736, - 14748, 14760, 14772, 14782, 14791, 14800, 14808, 14815, 14824, 14832, - 14836, 14841, 14847, 14853, 14858, 14863, 8093, 14867, 14869, 14873, - 14878, 14884, 14890, 14899, 14903, 14909, 14917, 14924, 14933, 14942, - 14951, 14960, 14969, 14978, 14987, 14996, 15006, 15016, 15025, 15031, - 15038, 15045, 15051, 15065, 15071, 15078, 15086, 15095, 15103, 15109, - 15118, 15127, 15138, 15148, 15156, 15163, 15171, 15180, 15193, 15202, - 15210, 15217, 15230, 15236, 15242, 15252, 15261, 15270, 15275, 15279, - 15285, 15291, 15296, 15303, 15310, 9445, 15315, 15320, 15327, 15335, - 15340, 15347, 15352, 15364, 13519, 15369, 15377, 15383, 15388, 15396, - 15404, 15411, 15419, 15425, 15433, 15441, 15447, 15452, 15458, 15465, - 15471, 15476, 15480, 15491, 15499, 15505, 15510, 15517, 15526, 15532, - 15537, 15545, 15554, 15568, 4068, 15572, 15577, 15582, 15588, 15593, - 15598, 15602, 15607, 15612, 15617, 8092, 15622, 15627, 15632, 15637, - 15642, 15646, 15651, 15656, 15661, 15666, 15672, 15678, 15683, 15687, - 15693, 15698, 15703, 15708, 9805, 15713, 15718, 15723, 15728, 15733, - 15750, 15768, 15780, 15793, 15810, 15826, 15843, 15853, 15872, 15883, - 15894, 15905, 15916, 15928, 15939, 15950, 15967, 15978, 15989, 15994, - 9810, 15999, 16003, 2420, 16007, 16010, 16016, 16024, 16032, 16041, - 16048, 16053, 16061, 16069, 16076, 16080, 16085, 16091, 16098, 16106, - 16113, 16125, 16132, 16138, 16146, 16151, 16157, 12695, 16163, 16172, - 16178, 16183, 16191, 16200, 16208, 16215, 16221, 16229, 16236, 16242, - 16248, 16255, 16262, 16268, 16274, 16283, 16291, 16301, 16308, 16314, - 16322, 16328, 16336, 16344, 16351, 16364, 16371, 16380, 16389, 16398, - 16406, 16416, 16423, 16428, 3727, 16435, 16440, 1353, 16444, 15623, - 16448, 16454, 16458, 16466, 16478, 16483, 16490, 16496, 16501, 16508, - 15628, 16512, 16516, 16520, 15633, 16524, 15638, 16528, 16535, 16540, - 16544, 16551, 16555, 16563, 16570, 16575, 16579, 16586, 16603, 16612, - 16616, 16619, 16627, 16633, 16638, 3805, 16642, 16644, 16652, 16659, - 16669, 16681, 16686, 16690, 16696, 16701, 16705, 16711, 16716, 16722, - 16725, 16732, 16740, 16747, 16753, 16758, 16764, 16769, 16776, 16782, - 16787, 16794, 16799, 16803, 16809, 16813, 16820, 16826, 16831, 16837, - 16845, 16853, 16860, 16866, 16871, 16877, 16883, 16891, 16899, 16905, - 16911, 16916, 16923, 16928, 16932, 16938, 16943, 16950, 16955, 16961, - 16964, 16970, 16976, 16979, 16983, 16987, 16999, 17005, 17010, 17017, - 17023, 17029, 17040, 17050, 17059, 17067, 17074, 17085, 17095, 17105, - 17113, 17116, 15652, 17121, 17126, 15657, 15798, 17134, 17147, 17162, - 17173, 15815, 17191, 17204, 17217, 17228, 11417, 17239, 17252, 17271, - 17282, 17293, 17304, 2688, 17317, 17321, 17329, 17340, 17348, 17363, - 17378, 17389, 17396, 17402, 17410, 17414, 17420, 17423, 17436, 17448, - 17458, 17466, 17473, 17481, 17491, 17496, 17503, 17508, 17515, 17526, - 17536, 17542, 17547, 17552, 15662, 17556, 17562, 17568, 17573, 17578, - 17583, 17587, 15667, 15673, 17591, 15679, 17596, 17604, 17609, 17613, - 17621, 17630, 17637, 17641, 9649, 17645, 17647, 17652, 17657, 17663, - 17668, 17673, 17678, 17683, 17687, 17693, 17699, 17704, 17710, 17715, - 17720, 17724, 17730, 17735, 17740, 17745, 17757, 17762, 17768, 17773, - 17778, 17784, 17790, 17795, 17800, 17805, 17812, 17818, 17829, 17836, - 17841, 17845, 17849, 17852, 17860, 17865, 17872, 17879, 17885, 17890, - 17895, 17900, 17907, 17917, 17925, 17930, 17937, 17943, 17952, 17962, - 17972, 17986, 18000, 18014, 18028, 18043, 18058, 18075, 18093, 18106, - 18112, 18117, 18122, 18126, 18134, 18139, 18147, 18153, 18159, 18164, - 18169, 18173, 18178, 18182, 18187, 18191, 18202, 18208, 18213, 18218, - 18225, 18230, 18234, 3690, 18239, 18245, 18252, 15688, 18258, 18262, - 18268, 18273, 18278, 18282, 18288, 18293, 18298, 18305, 18310, 14275, - 18314, 18319, 18323, 18328, 18334, 18340, 18347, 18357, 18365, 18372, - 18377, 18381, 18390, 18398, 18405, 18412, 18418, 18423, 18429, 18434, - 18439, 18445, 18450, 18456, 18461, 18467, 18473, 18480, 18486, 18491, - 18496, 9875, 18505, 18508, 18516, 18522, 18527, 18532, 18542, 18549, - 18555, 18560, 18565, 18571, 18576, 18582, 18587, 18593, 18599, 18604, - 18612, 18619, 18624, 18629, 18635, 18640, 18644, 18653, 18664, 18671, - 18679, 18686, 18691, 18696, 18702, 18707, 18715, 18721, 18727, 18734, - 18740, 18745, 18749, 18755, 18760, 18765, 18769, 18774, 1426, 8117, 2936, - 18778, 18782, 18786, 18790, 18794, 18798, 18801, 18806, 18813, 18821, - 15699, 18828, 18838, 18846, 18853, 18861, 18871, 18880, 9220, 18893, - 18898, 18903, 18911, 18918, 14371, 14380, 18925, 18935, 18950, 18956, - 18963, 18970, 18976, 18982, 18993, 19001, 19009, 19019, 19029, 15704, - 19038, 19044, 19050, 19058, 19066, 19071, 19080, 19088, 19100, 19110, - 19120, 19130, 19139, 19151, 19161, 19171, 19182, 19187, 19199, 19211, - 19223, 19235, 19247, 19259, 19271, 19283, 19295, 19307, 19318, 19330, - 19342, 19354, 19366, 19378, 19390, 19402, 19414, 19426, 19438, 19449, - 19461, 19473, 19485, 19497, 19509, 19521, 19533, 19545, 19557, 19569, - 19580, 19592, 19604, 19616, 19628, 19640, 19652, 19664, 19676, 19688, - 19700, 19711, 19723, 19735, 19747, 19759, 19771, 19783, 19795, 19807, - 19819, 19831, 19842, 19854, 19866, 19878, 19890, 19902, 19914, 19926, - 19938, 19950, 19962, 19973, 19985, 19997, 20009, 20021, 20033, 20045, - 20057, 20069, 20081, 20093, 20104, 20116, 20128, 20140, 20152, 20165, - 20178, 20191, 20204, 20217, 20230, 20243, 20255, 20268, 20281, 20294, - 20307, 20320, 20333, 20346, 20359, 20372, 20385, 20397, 20410, 20423, - 20436, 20449, 20462, 20475, 20488, 20501, 20514, 20527, 20539, 20552, - 20565, 20578, 20591, 20604, 20617, 20630, 20643, 20656, 20669, 20681, - 20694, 20707, 20720, 20733, 20746, 20759, 20772, 20785, 20798, 20811, - 20823, 20836, 20849, 20862, 20875, 20888, 20901, 20914, 20927, 20940, - 20953, 20965, 20976, 20989, 21002, 21015, 21028, 21041, 21054, 21067, - 21080, 21093, 21106, 21118, 21131, 21144, 21157, 21170, 21183, 21196, - 21209, 21222, 21235, 21248, 21260, 21273, 21286, 21299, 21312, 21325, - 21338, 21351, 21364, 21377, 21390, 21402, 21415, 21428, 21441, 21454, - 21467, 21480, 21493, 21506, 21519, 21532, 21544, 21557, 21570, 21583, - 21596, 21609, 21622, 21635, 21648, 21661, 21674, 21686, 21699, 21712, - 21725, 21738, 21751, 21764, 21777, 21790, 21803, 21816, 21828, 21841, - 21854, 21867, 21880, 21893, 21906, 21919, 21932, 21945, 21958, 21970, - 21983, 21996, 22009, 22022, 22035, 22048, 22061, 22074, 22087, 22100, - 22112, 22125, 22138, 22151, 22164, 22177, 22190, 22203, 22216, 22229, - 22242, 22254, 22267, 22280, 22293, 22306, 22319, 22332, 22345, 22358, - 22371, 22384, 22396, 22407, 22416, 22424, 22432, 22439, 22445, 22449, - 22455, 22461, 22469, 22474, 22480, 22485, 22489, 22498, 9654, 22509, - 22516, 22524, 22531, 22538, 11936, 22545, 22552, 22561, 22566, 22571, - 8145, 22578, 22583, 22586, 22591, 22599, 22606, 22613, 22620, 22626, - 22635, 22644, 22653, 22659, 22668, 22672, 22678, 22683, 22693, 22700, - 22706, 22714, 22720, 22727, 22737, 22746, 22750, 22757, 22761, 22766, - 22772, 22780, 22784, 22794, 15714, 22803, 22809, 22813, 22822, 22832, - 15719, 22838, 22845, 22856, 22864, 22874, 22883, 22891, 9410, 22899, - 22904, 22910, 22915, 22919, 22923, 22927, 10379, 22932, 22940, 22947, - 22956, 22963, 22970, 22976, 11856, 22983, 22989, 22993, 22999, 23006, - 23012, 23020, 23026, 23033, 23039, 23045, 23054, 23058, 23066, 23075, - 23082, 23087, 23091, 23102, 23107, 23112, 23117, 23130, 8349, 23134, - 23140, 23145, 23153, 23157, 23164, 23173, 23178, 15990, 23186, 23190, - 23202, 23207, 23211, 23214, 23220, 23226, 23232, 23237, 23241, 23244, - 23255, 23260, 9926, 23267, 23272, 1243, 9931, 23277, 23282, 23287, 23292, - 23297, 23302, 23307, 23312, 23317, 23322, 23327, 23332, 23338, 23343, - 23348, 23353, 23358, 23363, 23368, 23373, 23378, 23383, 23389, 23395, - 23400, 23405, 23410, 23415, 23420, 23425, 23430, 23435, 23440, 23446, - 23451, 23456, 23461, 23467, 23473, 23478, 23483, 23488, 23493, 23498, - 23503, 23508, 23513, 23519, 23524, 23529, 23534, 23539, 23545, 23550, - 23555, 23559, 134, 23567, 23571, 23575, 23579, 23584, 23588, 14281, 2346, - 23592, 23597, 23601, 23606, 23610, 23615, 23619, 23625, 23630, 23634, - 23638, 23646, 23650, 23654, 23659, 23664, 23668, 23674, 23679, 23683, - 23688, 23693, 23697, 23704, 23711, 23718, 23722, 23726, 23731, 23735, - 23738, 23744, 23757, 23762, 23768, 23777, 23782, 10151, 23787, 23796, - 23801, 23804, 2751, 2756, 23808, 23814, 23820, 7538, 23825, 23830, 23835, - 23841, 23846, 15134, 23851, 23856, 23861, 23866, 23872, 23877, 23882, - 23888, 23893, 23897, 23902, 23907, 23912, 23917, 23922, 23926, 23931, - 23935, 23940, 23945, 23950, 23955, 23959, 23964, 23968, 23973, 23978, - 23983, 23898, 2945, 23903, 23988, 23996, 24003, 10473, 24015, 24023, - 24033, 24051, 24070, 24079, 24087, 23908, 24094, 24099, 24107, 23913, - 24112, 24117, 24125, 24130, 23918, 24135, 24143, 24148, 24152, 24159, - 24165, 24174, 24182, 24186, 24189, 24196, 24200, 24204, 24209, 24215, - 24222, 24227, 9437, 1742, 1747, 24231, 24237, 24243, 24248, 24252, 24256, - 24260, 24264, 24268, 24272, 24276, 24280, 24283, 24289, 24296, 24304, - 24310, 24316, 24321, 24326, 24332, 24336, 24341, 15040, 15047, 24348, - 24360, 24363, 24370, 24374, 17881, 24381, 24389, 24400, 24409, 24422, - 24432, 24446, 24458, 24472, 24485, 24497, 24507, 24519, 24525, 24540, - 24564, 24582, 24601, 24614, 24628, 24646, 24662, 24679, 24697, 24708, - 24727, 24744, 24764, 24782, 24794, 24808, 24822, 24834, 24851, 24870, - 24888, 24900, 24918, 24937, 15858, 24950, 24970, 24982, 11448, 24994, - 24999, 25004, 25009, 25015, 25020, 25024, 25031, 25037, 2437, 25041, - 25047, 25051, 25054, 25058, 25061, 25069, 25075, 23936, 25079, 25088, - 25099, 25105, 25111, 25126, 25135, 25143, 25150, 25155, 25159, 25166, - 25172, 25181, 25189, 25196, 25206, 25215, 25225, 25230, 25239, 25248, - 25259, 25270, 4192, 25280, 25284, 25294, 25302, 25312, 25323, 25328, - 25338, 25346, 25353, 25359, 25366, 25371, 23946, 25375, 25384, 25388, - 25391, 25396, 25404, 25411, 25420, 25428, 25436, 25444, 25454, 25463, - 25469, 25475, 25479, 23951, 23956, 25483, 25493, 25503, 25513, 25521, - 25528, 25538, 25546, 25554, 25560, 25568, 865, 25577, 16065, 615, 25591, - 25600, 25608, 25619, 25630, 25640, 25649, 25661, 25670, 25679, 25686, - 25692, 25702, 25711, 25720, 25728, 25738, 25746, 25754, 9892, 25760, - 25763, 25767, 25772, 25777, 25781, 10588, 23969, 23974, 25789, 25795, - 25801, 25806, 25811, 25815, 25823, 25829, 25835, 25839, 3675, 25847, - 25852, 25857, 25861, 25865, 10701, 25872, 25880, 25894, 25901, 25907, - 10710, 10716, 25915, 25923, 25930, 25935, 25940, 23979, 25946, 25957, - 25961, 25966, 2640, 25971, 25982, 25988, 25993, 25997, 26001, 26004, - 26011, 26018, 26024, 26031, 26037, 26041, 23984, 26046, 26050, 26054, - 1431, 8544, 26059, 26064, 26069, 26074, 26079, 26084, 26089, 26094, - 26099, 26104, 26109, 26114, 26119, 26124, 26130, 26135, 26140, 26145, - 26150, 26155, 26160, 26166, 26171, 26176, 26181, 26186, 26191, 26196, - 26201, 26207, 26213, 26218, 26224, 26229, 26234, 5, 26240, 26244, 26248, - 26252, 26257, 26261, 26265, 26269, 26273, 26278, 26282, 26287, 26291, - 26294, 26298, 26303, 26307, 26312, 26316, 26320, 26324, 26329, 26333, - 26337, 26347, 26352, 26356, 26360, 26365, 26370, 26379, 26384, 26389, - 26393, 26397, 26410, 26422, 26431, 26440, 26445, 26451, 26456, 26460, - 26464, 26474, 26483, 26491, 26497, 26502, 26506, 26513, 26523, 26532, - 26540, 11770, 26548, 26556, 26565, 26574, 26582, 26592, 26597, 26601, - 26605, 26608, 26610, 26614, 26618, 26623, 26628, 26632, 26636, 26639, - 26643, 26646, 26650, 26653, 26656, 26660, 26666, 26670, 26674, 26678, - 26683, 26688, 26693, 26697, 26700, 26705, 26711, 26716, 26722, 26727, - 26731, 26737, 26741, 26745, 26750, 26754, 26759, 26764, 26768, 26772, - 26779, 26783, 26786, 26790, 26794, 26800, 26806, 26810, 26814, 26819, - 26826, 26832, 26836, 26845, 26849, 26853, 26856, 26862, 26867, 26873, - 1475, 1806, 26878, 26883, 26888, 26893, 26898, 26903, 26908, 2174, 2220, - 26913, 26916, 26920, 26924, 26929, 26933, 16077, 26937, 26942, 26947, - 26951, 26954, 26959, 26963, 26968, 26972, 16081, 26977, 26980, 26983, - 26987, 26992, 26996, 27009, 27013, 27016, 27024, 27033, 27040, 27045, - 27051, 27057, 27065, 27072, 27079, 27083, 27087, 27091, 27096, 27101, - 27105, 27113, 27118, 27130, 27141, 27146, 27150, 27157, 27161, 27166, - 27172, 27175, 27180, 27185, 27189, 27193, 27196, 27202, 8248, 2350, - 27206, 27211, 27227, 10198, 27247, 27256, 27272, 27276, 27283, 27286, - 27292, 27302, 27308, 27317, 27332, 27344, 27355, 27363, 27372, 27378, - 27387, 27397, 27407, 27418, 27429, 27439, 27448, 27455, 27464, 27472, - 27479, 27487, 27494, 27501, 27514, 27521, 27529, 27536, 27542, 27547, - 27556, 27562, 27567, 27575, 27582, 27589, 25304, 27601, 27613, 27627, - 27635, 27642, 27654, 27663, 27672, 27680, 27688, 27696, 27703, 27709, - 27718, 27726, 27736, 27745, 27755, 27764, 27773, 27781, 27786, 27790, - 27793, 27797, 27801, 27805, 27809, 27813, 27819, 27825, 27833, 16139, - 27840, 27845, 27852, 27858, 27865, 16147, 27872, 27875, 27887, 27895, - 27901, 27906, 27910, 27921, 10651, 27931, 27939, 27949, 27958, 27965, - 27972, 27980, 27984, 16158, 27987, 27994, 27998, 28004, 28007, 28014, - 28020, 28027, 28033, 28037, 28042, 28046, 28055, 28062, 28068, 8306, - 28075, 28083, 28090, 28096, 28101, 28107, 28113, 28121, 28127, 28131, - 28134, 28136, 27798, 28145, 28151, 28157, 28167, 28172, 28179, 28185, - 28190, 28195, 28200, 28204, 28209, 28216, 28222, 28231, 28235, 28242, - 28248, 28257, 4378, 28263, 28269, 28274, 28281, 28292, 28297, 28301, - 28311, 28317, 28321, 28326, 28336, 28345, 28349, 28356, 28364, 28371, - 28377, 28382, 28390, 28397, 28402, 28409, 28421, 28430, 28434, 14212, - 28442, 28452, 28456, 27020, 28467, 28472, 28476, 28483, 28490, 23670, - 27723, 28495, 28499, 28502, 24714, 28507, 28521, 28537, 28555, 28574, - 28591, 28609, 24733, 28626, 28646, 24750, 28658, 28670, 17178, 28682, - 24770, 28696, 28708, 11461, 28722, 28727, 28732, 28737, 28743, 28749, - 28755, 28759, 28767, 28774, 28779, 28789, 28795, 11059, 28801, 28803, - 28808, 28816, 28820, 28212, 28826, 28833, 12601, 12611, 28840, 28850, - 28855, 28859, 28862, 28868, 28876, 28888, 28898, 28914, 28927, 28941, - 17196, 28955, 28962, 28966, 28969, 28974, 28978, 28985, 28992, 28999, - 29009, 29014, 29019, 29024, 29032, 29040, 29045, 29054, 29059, 3353, - 29063, 29066, 29069, 29074, 29081, 29086, 29102, 29110, 29118, 9966, - 29126, 29131, 29135, 29141, 29146, 29152, 29155, 29161, 29173, 29181, - 29188, 29194, 29201, 29212, 29226, 29239, 29245, 29254, 29260, 29269, - 29281, 29292, 29302, 29311, 29320, 29328, 29339, 8288, 29346, 29353, - 29359, 29364, 29370, 29377, 29387, 29397, 29406, 29412, 29419, 29424, - 29432, 29439, 29447, 29455, 29467, 6563, 995, 29474, 29483, 29491, 29497, - 29503, 29508, 29512, 29515, 29521, 29528, 29533, 29538, 29543, 29547, - 29559, 29570, 29579, 29587, 16323, 29592, 29597, 29603, 29609, 12594, - 9058, 29614, 29618, 29622, 29625, 29628, 29634, 29642, 29650, 29654, - 29658, 29663, 29666, 29675, 29679, 29682, 29690, 29701, 29705, 29711, - 29717, 29721, 29727, 29735, 29757, 29781, 29790, 29797, 29804, 29810, - 29818, 29824, 29829, 29840, 29858, 29865, 29873, 29877, 29882, 29891, - 29904, 29912, 29924, 29935, 29946, 29956, 29970, 29979, 29987, 29999, - 10215, 30010, 30021, 30033, 30043, 30052, 30057, 30061, 30069, 30080, - 30090, 30095, 30099, 30102, 30105, 30113, 30121, 30130, 30140, 30149, - 30155, 30169, 2702, 30191, 30202, 30211, 30221, 30233, 30242, 30251, - 30261, 30269, 30277, 30286, 30291, 30302, 30307, 30318, 30322, 30332, - 30341, 30349, 30359, 30369, 30377, 30386, 30393, 30401, 30408, 30417, - 30426, 30430, 30438, 30445, 30453, 30460, 30471, 30486, 30493, 30499, - 30509, 30518, 30524, 30535, 30539, 30546, 30550, 30556, 15265, 30562, - 30566, 30571, 30577, 30584, 30588, 30592, 30600, 30608, 30614, 30623, - 30630, 30635, 30640, 30650, 25373, 30654, 30657, 30662, 30667, 30672, - 30677, 30682, 30687, 30692, 30697, 30703, 30708, 30713, 30719, 1199, 660, - 30724, 30733, 2398, 30740, 30745, 30749, 30755, 1248, 578, 290, 30760, - 30769, 30777, 30786, 30794, 30805, 30813, 30822, 30830, 30835, 10797, - 30839, 30847, 30855, 30860, 16094, 3824, 30866, 30872, 30878, 6148, - 30883, 30887, 30893, 30897, 30903, 30908, 30915, 1441, 30921, 30928, - 1348, 6156, 30932, 30942, 30950, 30956, 30966, 30975, 30983, 30989, - 30997, 31004, 12136, 31010, 31017, 31022, 31029, 1494, 219, 2173, 31035, - 31041, 31048, 31059, 31070, 31078, 31085, 31095, 31104, 31112, 31121, - 31128, 31135, 31148, 31155, 31161, 31172, 31191, 1253, 31196, 31201, - 31209, 3742, 31213, 31218, 31222, 31226, 1445, 26637, 31236, 31240, - 31245, 31249, 3619, 31255, 31263, 31270, 31281, 31289, 31297, 3743, 346, - 31302, 31310, 31318, 31325, 31331, 31336, 2242, 11628, 31343, 31349, - 28038, 28287, 31355, 574, 106, 31359, 31363, 31369, 663, 9841, 31374, - 31381, 31387, 31391, 1639, 31394, 31398, 16576, 31401, 31406, 31413, - 31419, 31424, 31432, 31439, 31445, 24132, 31449, 31453, 31457, 3813, - 18180, 31461, 31466, 31470, 31473, 31481, 31489, 31494, 31502, 31505, - 31512, 31522, 31534, 31539, 31543, 31551, 31558, 31564, 31571, 31578, - 31581, 31585, 31589, 1449, 31599, 31601, 31606, 31612, 31618, 31623, - 31628, 31633, 31638, 31643, 31648, 31653, 31658, 31663, 31668, 31673, - 31678, 31683, 31688, 31694, 31700, 31706, 31712, 31717, 31722, 31727, - 31733, 31738, 31743, 31748, 31754, 31759, 31765, 31770, 31775, 31780, - 31785, 31791, 31796, 31802, 31807, 31812, 31817, 31822, 31828, 31833, - 31839, 31844, 31849, 31854, 31859, 31864, 31869, 31874, 31879, 31884, - 31890, 31896, 31902, 31907, 31912, 31917, 31922, 31928, 31934, 31940, - 31946, 31952, 31958, 31963, 31969, 31974, 31979, 31984, 31989, 31995, - 2482, 32000, 2489, 2496, 2793, 32005, 2502, 2512, 32011, 32015, 32020, - 32025, 32031, 32036, 32041, 32045, 32050, 32056, 32061, 32066, 32071, - 32077, 32082, 32086, 32090, 32095, 32100, 32105, 32110, 32115, 32121, - 32127, 32132, 32136, 32141, 32147, 32151, 32156, 32161, 32166, 32171, - 32175, 32178, 32183, 32188, 32193, 32198, 32203, 32209, 32215, 32220, - 32225, 32230, 32234, 32239, 32244, 32249, 32254, 32259, 32264, 32268, - 32273, 32278, 32283, 32287, 32291, 32295, 32300, 32308, 32313, 32318, - 32324, 32330, 32336, 32341, 32345, 32348, 32353, 32358, 32362, 32367, - 32372, 32376, 32381, 32385, 32388, 32393, 3914, 18906, 32398, 32403, - 32408, 32416, 22959, 30925, 9518, 32421, 32426, 32430, 32435, 32439, - 32443, 32448, 32452, 32455, 32458, 32462, 32467, 32471, 32479, 32483, - 32486, 32491, 32495, 32499, 32504, 32509, 32513, 32519, 32524, 32529, - 32536, 32543, 32547, 32550, 32556, 32565, 32572, 32580, 32587, 32591, - 32596, 32600, 32604, 32610, 32616, 32620, 32626, 32631, 32636, 32640, - 32647, 32653, 32659, 32665, 32671, 32678, 32684, 32690, 32696, 32702, - 32708, 32714, 32720, 32727, 32733, 32740, 32746, 32752, 32758, 32764, - 32770, 32776, 32782, 32788, 32794, 12479, 32800, 32806, 32811, 32816, - 32821, 32824, 32830, 32838, 32843, 32847, 32852, 32858, 32867, 32873, - 32878, 32883, 32888, 32892, 32897, 32902, 32907, 32912, 32917, 32924, - 32931, 32937, 32943, 32948, 17822, 32955, 32961, 32968, 32974, 32980, - 32985, 32993, 32998, 10372, 33002, 33007, 33012, 33018, 33023, 33028, - 33032, 33037, 33042, 33048, 33053, 33058, 33063, 33067, 33072, 33077, - 33081, 33086, 33091, 33095, 33100, 33104, 33109, 33114, 33119, 33123, - 33128, 33132, 33136, 16682, 33141, 33150, 33156, 33162, 33171, 33179, - 33188, 33196, 33201, 33205, 33212, 33218, 33226, 33230, 33233, 33238, - 33242, 33251, 33259, 33277, 33283, 1493, 33289, 33292, 33296, 24238, - 24244, 33302, 33306, 33317, 33328, 33339, 33351, 33355, 33362, 33369, - 33374, 33378, 6204, 928, 22958, 33386, 33391, 33395, 33400, 33404, 33410, - 33415, 33421, 33426, 33432, 33437, 33443, 33448, 33454, 33460, 33466, - 33471, 33427, 33433, 33475, 33480, 33486, 33491, 33497, 33502, 33508, - 33513, 33438, 11314, 33517, 33449, 33455, 33461, 2885, 3533, 33523, - 33526, 33531, 33537, 33543, 33549, 33556, 33562, 33568, 33574, 33580, - 33586, 33592, 33598, 33604, 33610, 33616, 33622, 33628, 33635, 33641, - 33647, 33653, 33659, 33665, 33668, 33673, 33676, 33683, 33688, 33696, - 33701, 33706, 33712, 33717, 33722, 33726, 33731, 33737, 33742, 33748, - 33753, 33759, 33764, 33770, 33776, 33780, 33785, 33790, 33795, 33800, - 33804, 33809, 33814, 33819, 33825, 33831, 33837, 33843, 33848, 33852, - 33855, 33861, 33867, 33876, 33884, 33891, 33896, 33900, 33904, 33909, - 16530, 33914, 33922, 33928, 3866, 1358, 33933, 33937, 8359, 33943, 33949, - 33956, 8368, 33960, 33966, 33973, 33979, 33988, 33996, 9244, 34008, - 34012, 34019, 34025, 34030, 34034, 34038, 34041, 34051, 34060, 34068, - 33428, 34073, 34083, 34093, 34103, 34109, 34114, 34124, 34129, 34142, - 34156, 34167, 34179, 34191, 34205, 34218, 34230, 34242, 15899, 34256, - 34261, 34266, 34270, 34274, 34278, 1795, 29290, 34282, 34287, 33476, - 34292, 34295, 34300, 34305, 34310, 34316, 34322, 10974, 34327, 34333, - 34340, 17130, 34346, 34351, 34356, 34360, 34365, 34370, 33481, 34375, - 34380, 34385, 34391, 33487, 34396, 34399, 34406, 34414, 34420, 34426, - 34432, 34443, 34448, 34455, 34462, 34469, 34477, 34486, 34495, 34501, - 34507, 34515, 33492, 34520, 34526, 34532, 33498, 34537, 34542, 34550, - 34558, 34564, 34571, 34577, 34584, 34591, 34597, 34605, 34615, 34622, - 34628, 34633, 34639, 34644, 34649, 34656, 34665, 34673, 34678, 34684, - 34691, 34699, 34705, 34710, 34716, 34725, 34732, 30135, 34738, 34742, - 34747, 34756, 34761, 34766, 34771, 13548, 34779, 34784, 34789, 34794, - 34798, 34803, 34808, 34815, 34820, 34825, 34830, 33503, 22895, 34836, - 2558, 144, 34839, 34842, 34846, 34850, 34860, 34868, 34875, 34879, 34882, - 34890, 34897, 34904, 34913, 34917, 34920, 34926, 34930, 34938, 34946, - 34950, 34954, 34957, 34963, 34970, 34974, 34978, 34985, 34993, 33439, - 35000, 35008, 35013, 11034, 623, 369, 35025, 35030, 35035, 35041, 35046, - 35051, 3887, 35056, 35059, 35064, 35069, 35074, 35079, 35084, 35091, - 24356, 35096, 35101, 35106, 35111, 35116, 35122, 35127, 35133, 33679, - 35139, 35144, 35150, 35156, 35166, 35171, 35176, 35180, 35185, 35190, - 35195, 35200, 35213, 35218, 24019, 18255, 3900, 35222, 35228, 35233, - 35238, 35244, 35249, 35254, 35258, 35263, 35268, 35274, 35279, 35284, - 1363, 35288, 35293, 35298, 35303, 35307, 35312, 35317, 35322, 35328, - 35334, 35339, 35343, 35347, 35352, 35357, 35362, 35366, 35374, 35378, - 35384, 35388, 35395, 18039, 33450, 35401, 35408, 35416, 35423, 35429, - 35442, 35454, 35459, 35465, 35469, 2812, 35473, 35477, 34965, 35486, - 35497, 35502, 30198, 35507, 35512, 35516, 35521, 24249, 35525, 35529, - 35534, 33456, 22985, 35538, 35543, 35549, 35554, 35558, 35562, 35565, - 35569, 35575, 35584, 35595, 35607, 33462, 35612, 35615, 35619, 35623, - 406, 35628, 35633, 35638, 35643, 35648, 35653, 35659, 35664, 35669, - 35675, 35680, 35686, 35691, 35697, 35702, 35707, 35712, 35717, 35722, - 35727, 35732, 35737, 35743, 35748, 35753, 35758, 35763, 35768, 35773, - 35778, 35784, 35790, 35795, 35800, 35805, 35810, 35815, 35820, 35825, - 35830, 35835, 35840, 35845, 35850, 35855, 35860, 35865, 35870, 35875, - 35880, 35886, 325, 9, 35891, 35895, 35899, 35907, 35911, 35915, 35918, - 35921, 35923, 35928, 35932, 35937, 35941, 35946, 35950, 35955, 35959, - 35962, 35964, 35968, 35973, 35977, 35988, 35991, 35993, 35997, 36009, - 36018, 36022, 36026, 36032, 36037, 36046, 36052, 36057, 36062, 36066, - 36070, 36075, 36082, 36087, 36093, 36098, 36102, 36109, 27731, 27741, - 36113, 36118, 36123, 36128, 36135, 36139, 36146, 36152, 8491, 36156, - 36165, 36173, 36188, 36202, 36211, 36219, 36230, 36239, 36244, 36251, - 7556, 36261, 36266, 36271, 36275, 36278, 36283, 36287, 36292, 36296, - 36303, 36308, 36313, 36318, 9391, 36328, 36330, 36333, 36336, 36340, - 36346, 36350, 36355, 36360, 36378, 36392, 36411, 36428, 36437, 36445, - 36450, 36455, 1486, 36461, 36467, 36472, 36482, 36491, 36499, 36504, - 36510, 36515, 36524, 36535, 36540, 36547, 36551, 36558, 36566, 36573, - 36586, 36594, 36598, 36608, 36613, 36617, 36625, 36633, 36638, 36642, - 36646, 36655, 36661, 36666, 36674, 36684, 36693, 36702, 36711, 36722, - 36730, 36741, 36750, 36757, 36763, 36768, 36779, 36790, 36795, 36799, - 36802, 36806, 36814, 36820, 36831, 36842, 36853, 36864, 36875, 36886, - 36897, 36908, 36920, 36932, 36944, 36956, 36968, 36980, 36992, 36996, - 37004, 37010, 37017, 37023, 37028, 37034, 2457, 37038, 37040, 37045, - 37050, 37055, 37058, 37060, 37064, 37067, 37074, 37078, 10664, 37082, - 37088, 37098, 37103, 37109, 37113, 37118, 37131, 28162, 37137, 37146, - 37155, 19104, 37162, 37171, 34089, 37179, 37184, 37188, 37197, 37205, - 37212, 37217, 37221, 37226, 37234, 37238, 37246, 37252, 37258, 37263, - 37267, 37270, 37275, 37288, 37304, 24840, 37321, 37333, 37350, 37362, - 37376, 24857, 24876, 37388, 37400, 2719, 37414, 37419, 37424, 37429, - 37433, 37440, 37452, 37459, 37468, 37471, 37482, 37493, 37498, 34512, - 852, 37502, 37506, 37510, 37513, 37518, 37523, 37529, 37534, 37539, - 37545, 37551, 37556, 37560, 37565, 37570, 37575, 37579, 37582, 37588, - 37593, 37598, 37603, 37607, 37612, 37618, 37626, 28414, 37631, 37636, - 37643, 37649, 37655, 37660, 37668, 24365, 37675, 37680, 37685, 37690, - 37694, 37697, 37702, 37706, 37710, 37717, 37723, 37729, 37735, 37742, - 37747, 37753, 36628, 37757, 37761, 37766, 37779, 37784, 37790, 37798, - 37805, 37813, 37823, 37829, 37835, 37841, 37845, 37854, 37862, 37869, - 37874, 37879, 11337, 37884, 37891, 37897, 37907, 37912, 37918, 37926, - 3775, 37933, 37940, 37946, 37953, 3781, 37957, 37962, 37973, 37980, - 37986, 37995, 37999, 4244, 38002, 38009, 38015, 38021, 38029, 38039, - 31326, 38046, 38054, 38060, 38065, 38071, 38076, 38080, 28010, 38086, - 38093, 38099, 38108, 38115, 25565, 38121, 38126, 38130, 38138, 38146, - 10330, 6179, 38153, 38157, 38159, 38163, 38168, 38170, 38175, 38181, - 38186, 38191, 38198, 35087, 38204, 38209, 38213, 38218, 38222, 38231, - 38235, 38241, 38248, 38254, 38261, 38266, 38275, 38280, 38284, 38289, - 38296, 38304, 38312, 38317, 23041, 38321, 38324, 38328, 38332, 11725, - 872, 38336, 38341, 38349, 38353, 38362, 38369, 38373, 38377, 38385, - 38392, 38402, 38406, 38410, 38418, 38426, 38432, 38437, 38446, 14530, - 38452, 38461, 38466, 38473, 38480, 38488, 38496, 38504, 38509, 38516, - 38523, 38530, 38537, 38544, 38549, 38555, 38572, 38580, 38590, 38598, - 38605, 414, 38609, 38615, 38619, 38624, 36235, 38630, 38633, 38637, - 38648, 38656, 3786, 38664, 38670, 38676, 38686, 38695, 38705, 38712, - 38718, 38723, 3792, 3798, 38732, 38739, 38747, 38752, 38756, 38763, - 38771, 38778, 38784, 38793, 38803, 38809, 38817, 38826, 38833, 38841, - 38848, 23728, 38852, 38859, 38865, 38875, 38884, 38892, 38903, 38907, - 38917, 38923, 38930, 38938, 38947, 38956, 38966, 38977, 38984, 38989, - 38996, 3088, 39004, 39010, 39015, 39021, 39027, 39032, 39045, 39058, - 39071, 39078, 39084, 39092, 39100, 39105, 39109, 1455, 39113, 39117, - 39121, 39125, 39129, 39133, 39137, 39141, 39145, 39149, 39153, 39157, - 39161, 39165, 39169, 39173, 39177, 39181, 39185, 39189, 39193, 39197, - 39201, 39205, 39209, 39213, 39217, 39221, 39225, 39229, 39233, 39237, - 39241, 39245, 39249, 39253, 39257, 39261, 39265, 39269, 39273, 39277, - 39281, 39285, 39289, 39293, 39297, 39301, 39305, 39309, 39313, 39317, - 39321, 39325, 39329, 39333, 39337, 39341, 39345, 39349, 39353, 39357, - 39361, 39365, 39369, 39373, 39377, 39381, 39385, 39389, 39393, 39397, - 39401, 39405, 39409, 39413, 39417, 39421, 39425, 39429, 39433, 39437, - 39441, 39445, 39449, 39453, 39457, 39461, 39465, 39469, 39473, 39477, - 39481, 39485, 39489, 39493, 39497, 39501, 39505, 39509, 39513, 39517, - 39521, 39525, 39529, 39533, 39537, 39541, 39545, 39549, 39553, 39557, - 39561, 39565, 39569, 39573, 39577, 39581, 39585, 39589, 39593, 39597, - 39601, 39605, 39609, 39613, 39617, 39621, 39625, 39629, 39633, 39637, - 39641, 39645, 39649, 39653, 39657, 39661, 39665, 39669, 39673, 39677, - 39681, 39685, 39689, 39693, 39697, 39701, 39705, 39709, 39713, 39717, - 39721, 39725, 39730, 39734, 39739, 39743, 39748, 39752, 39757, 39761, - 39767, 39772, 39776, 39781, 39785, 39790, 39794, 39799, 39803, 39808, - 39812, 39817, 39821, 39826, 39830, 39836, 39842, 39847, 39851, 39856, - 39860, 39866, 39871, 39875, 39880, 39884, 39889, 39893, 39899, 39904, - 39908, 39913, 39917, 39922, 39926, 39931, 39935, 39941, 39946, 39950, - 39955, 39959, 39965, 39970, 39974, 39979, 39983, 39988, 39992, 39997, - 40001, 40006, 40010, 40016, 40021, 40025, 40031, 40036, 40040, 40046, - 40051, 40055, 40060, 40064, 40069, 40073, 40079, 40085, 40091, 40097, - 40103, 40109, 40115, 40121, 40126, 40130, 40135, 40139, 40145, 40150, - 40154, 40159, 40163, 40168, 40172, 40177, 40181, 40186, 40190, 40195, - 40199, 40204, 40208, 40214, 40219, 40223, 40228, 40232, 40238, 40244, - 40249, 116, 57, 40253, 40255, 40259, 40263, 40267, 40272, 40276, 40280, - 10251, 40285, 40291, 1756, 6597, 40297, 40300, 40305, 40309, 40314, - 40318, 40322, 40327, 11121, 40331, 40335, 40339, 525, 40343, 16783, - 40348, 40352, 40357, 40362, 40367, 40371, 40378, 28186, 40384, 40387, - 40391, 40396, 40402, 40406, 40409, 40417, 40423, 40428, 40432, 40435, - 40439, 40445, 40449, 40453, 3584, 3589, 31537, 40456, 40460, 40464, - 40468, 40472, 40480, 40487, 40491, 14480, 40498, 40503, 40517, 40524, - 40535, 335, 40540, 40544, 40550, 40562, 40568, 40574, 31574, 40578, - 40584, 40593, 40597, 40601, 40606, 40612, 40617, 40621, 40626, 40630, - 40634, 40641, 40647, 40652, 40667, 40682, 40697, 40713, 40731, 11071, - 40745, 40752, 40756, 40759, 40768, 40773, 40777, 40785, 17333, 40793, - 40797, 40807, 40818, 31507, 40831, 40835, 40844, 40862, 40881, 40889, - 10525, 11234, 40893, 24261, 40896, 32475, 40901, 10524, 40906, 40912, - 40917, 40923, 40928, 40934, 40939, 40945, 40950, 40956, 40962, 40968, - 40973, 40929, 40935, 40940, 40946, 40951, 40957, 40963, 8504, 4089, - 40977, 40985, 40989, 40992, 40996, 41001, 41006, 41013, 41019, 41025, - 41030, 16174, 41034, 28022, 41038, 41042, 41046, 41052, 41056, 30075, - 41065, 9544, 41069, 9937, 41072, 41079, 41085, 41089, 13004, 41096, - 41102, 41107, 41114, 41121, 41128, 30781, 8410, 41135, 41142, 41149, - 41155, 41160, 41167, 41178, 41184, 41189, 41194, 41199, 41203, 41208, - 41215, 40930, 41219, 41229, 41238, 41249, 41255, 41263, 41270, 41275, - 41280, 41285, 41290, 41295, 41299, 41303, 41310, 41316, 41324, 2353, - 1050, 11137, 11149, 11154, 11160, 41333, 11165, 11170, 11176, 41338, - 41348, 41352, 11181, 41357, 18453, 41360, 41365, 41369, 37463, 41380, - 41385, 41392, 41399, 41403, 41406, 41414, 11084, 41421, 41424, 41430, - 41440, 6231, 41449, 41455, 41459, 41467, 41471, 41481, 41487, 41492, - 41503, 41512, 41521, 41530, 41539, 41548, 41557, 41566, 41572, 41578, - 41583, 41589, 41595, 41601, 41606, 41609, 41616, 41622, 41626, 41631, - 41638, 41645, 41649, 41652, 41662, 41675, 41684, 41693, 41704, 41717, - 41729, 41740, 41749, 41760, 41765, 41774, 41779, 11186, 41785, 41792, - 41800, 41805, 41809, 41816, 41823, 4041, 20, 41827, 41832, 18302, 41836, - 41839, 41842, 30255, 41846, 30790, 41854, 41858, 41862, 41865, 41871, - 41877, 33527, 41882, 41890, 41896, 41903, 30238, 41907, 30441, 41911, - 41920, 41924, 41932, 41938, 41944, 41949, 41953, 30809, 41959, 41962, - 41970, 41978, 4379, 41984, 41988, 41993, 42000, 42006, 42011, 42016, - 42020, 42026, 42031, 42037, 4297, 944, 42044, 42048, 42051, 16664, 42063, - 42071, 42079, 42087, 42095, 42102, 42110, 42118, 42125, 42133, 42141, - 42149, 42157, 42165, 42173, 42181, 42189, 42197, 42205, 42213, 42220, - 42228, 42236, 42244, 42252, 42260, 42268, 42276, 42284, 42292, 42300, - 42308, 42316, 42324, 42332, 42340, 42348, 42356, 42364, 42372, 42379, - 42387, 42394, 42402, 42410, 42418, 42426, 42434, 42442, 42450, 42458, - 42469, 23764, 42474, 42477, 42484, 42488, 42494, 42498, 42504, 42509, - 42515, 42520, 42525, 42529, 42533, 42538, 42543, 42553, 42559, 42572, - 42578, 42584, 42590, 42597, 42602, 42608, 42613, 18198, 1458, 831, 42618, - 42621, 42624, 42627, 33611, 33617, 42630, 33623, 33636, 33642, 33648, - 42636, 33654, 33660, 42642, 42648, 26, 42656, 42663, 42667, 42671, 42679, - 34401, 42683, 42687, 42694, 42699, 42703, 42708, 42714, 42719, 42725, - 42730, 42734, 42738, 42742, 42747, 42751, 42756, 42760, 42764, 42771, - 42776, 42780, 42784, 42789, 42793, 42798, 42802, 42806, 42811, 42817, - 16924, 16929, 42822, 42826, 42829, 42833, 42837, 22852, 42842, 42846, - 42852, 42859, 42865, 42870, 42880, 42885, 42893, 42897, 42900, 34416, - 42904, 4356, 42909, 42914, 42918, 42923, 42927, 42932, 14548, 42943, - 42947, 42950, 42954, 42959, 42963, 42968, 42973, 42977, 42981, 42985, - 42988, 42992, 8523, 14564, 42995, 42998, 43004, 43009, 43015, 43020, - 43026, 43031, 43037, 43042, 43048, 43054, 43060, 43065, 43069, 43073, - 43082, 43098, 43114, 43124, 30145, 43131, 43135, 43140, 43145, 43149, - 43153, 38951, 43159, 43164, 43168, 43175, 43180, 43185, 43189, 43193, - 43199, 29093, 43203, 23136, 43208, 43215, 43223, 43229, 43236, 43244, - 43250, 43254, 43259, 43265, 43273, 43278, 43282, 43291, 10232, 43299, - 43303, 43311, 43318, 43323, 43328, 43333, 43337, 43340, 43344, 43347, - 43351, 43358, 43363, 43367, 43373, 28492, 33674, 43377, 43386, 43394, - 43400, 43407, 43413, 43419, 43424, 43427, 43429, 43436, 43443, 43449, - 43453, 43456, 43460, 43464, 43468, 43473, 43477, 43481, 43484, 43488, - 43502, 24906, 43521, 43534, 43547, 43560, 24924, 43575, 11422, 43590, - 43596, 43600, 43604, 43608, 43612, 43619, 43624, 43628, 43635, 43641, - 43646, 43652, 43662, 43674, 43685, 43690, 43697, 43701, 43705, 43708, - 17343, 3855, 43716, 16951, 43729, 43736, 43743, 43747, 43751, 43756, - 43762, 43767, 43773, 43777, 43781, 43784, 43789, 43793, 43798, 8082, - 16962, 43803, 43807, 43813, 43822, 43827, 43836, 43843, 38799, 43849, - 43854, 43858, 43863, 43870, 43876, 43880, 43883, 43887, 43892, 15864, - 43899, 43906, 43910, 43913, 43918, 43923, 43929, 43934, 43939, 43943, - 43948, 43958, 43963, 43969, 43974, 43980, 43985, 43991, 44001, 44006, - 44011, 44015, 44020, 7558, 7570, 44025, 44028, 44035, 44041, 44050, 9477, - 36760, 44058, 44062, 44066, 34464, 44074, 44085, 44093, 38999, 44100, - 44105, 44110, 44121, 44128, 44139, 34488, 23147, 44147, 907, 44152, - 14913, 44158, 30229, 44164, 44169, 44179, 44188, 44195, 44201, 44205, - 44208, 44215, 44221, 44228, 44234, 44244, 44252, 44258, 44264, 44269, - 44273, 44280, 44285, 44291, 44298, 44304, 43469, 44309, 44313, 558, - 15029, 44319, 44324, 44327, 44333, 44341, 1380, 44346, 44350, 44355, - 44360, 44365, 44372, 44376, 44381, 44387, 44391, 33684, 44396, 44401, - 44410, 44417, 44427, 44433, 30273, 44450, 44459, 44467, 44473, 44478, - 44485, 44491, 44499, 44508, 44516, 44520, 44525, 44533, 31251, 34497, - 44539, 44558, 17257, 44572, 44588, 44602, 44608, 44613, 44618, 44623, - 44629, 34503, 44634, 44637, 44644, 44649, 44653, 404, 2995, 44660, 44665, - 44670, 29451, 44488, 44674, 44679, 44687, 44691, 44694, 44699, 44705, - 44711, 44716, 44720, 30328, 44723, 44728, 44732, 44735, 44740, 44744, - 44749, 44754, 44758, 44763, 44767, 44771, 44775, 22848, 22859, 44780, - 44785, 44791, 44796, 44802, 29050, 44807, 44811, 22945, 17549, 44814, - 44819, 44824, 44829, 44834, 44839, 44844, 44849, 474, 68, 33697, 33702, - 33707, 33713, 33718, 33723, 44854, 33727, 44858, 44862, 44866, 33732, - 33738, 44880, 33749, 33754, 44888, 44893, 33760, 44898, 44903, 44908, - 44913, 44919, 44925, 44931, 33777, 44944, 44953, 44959, 33781, 44963, - 33786, 44968, 33791, 33796, 44971, 44976, 44980, 44986, 33332, 44993, - 14794, 45000, 45005, 33801, 45009, 45014, 45019, 45024, 45028, 45033, - 45038, 45044, 45049, 45054, 45060, 45066, 45071, 45075, 45080, 45085, - 45090, 45094, 45099, 45104, 45109, 45115, 45121, 45127, 45132, 45136, - 45141, 45145, 33805, 33810, 33815, 45149, 45153, 45157, 33820, 33826, - 33832, 33844, 45169, 28059, 45173, 45178, 45182, 45187, 45194, 45199, - 45204, 45209, 45213, 45217, 45227, 45232, 45237, 45241, 45245, 45248, - 45256, 33892, 45261, 1465, 45267, 45272, 45278, 45286, 45290, 45299, - 45303, 45307, 45315, 45321, 45329, 45345, 45349, 45353, 45357, 45362, - 45368, 45383, 33929, 1764, 13198, 45387, 1359, 1374, 45399, 45407, 45414, - 45419, 45426, 45431, 9922, 1139, 2544, 11213, 45438, 9820, 45443, 45446, - 45455, 1267, 45460, 43625, 45467, 45476, 45481, 45485, 45493, 24317, - 2596, 45500, 11678, 45510, 45516, 2371, 2381, 45525, 45534, 45544, 45555, - 3376, 37099, 45560, 11277, 4019, 18236, 1272, 45564, 45572, 45579, 45584, - 45588, 45592, 25792, 43894, 11304, 45600, 45609, 45618, 45626, 45633, - 45644, 45649, 45662, 45675, 45687, 45699, 45711, 45722, 45735, 45746, - 45757, 45767, 45775, 45783, 45795, 45807, 45818, 45827, 45835, 45842, - 45854, 45861, 45867, 45876, 45883, 45896, 45901, 45911, 45916, 45922, - 45927, 41086, 45931, 45938, 45942, 45949, 45957, 45964, 2557, 45971, - 45982, 45992, 46001, 46009, 46019, 46027, 46037, 46046, 46051, 46057, - 46063, 3899, 46074, 46084, 46093, 46102, 46110, 46120, 46128, 46137, - 46142, 46147, 46152, 1694, 47, 46160, 46168, 46179, 46190, 17875, 46200, - 46204, 46211, 46217, 46222, 46226, 46237, 46247, 46256, 46267, 18275, - 18280, 46272, 46281, 46286, 46296, 46301, 46309, 46317, 46324, 46330, - 1656, 277, 46334, 46340, 46345, 46348, 2143, 43748, 46356, 46360, 46363, - 1510, 46369, 15214, 1277, 46374, 46387, 46401, 2682, 46419, 46431, 46443, - 2696, 2713, 46457, 46470, 2728, 46484, 46496, 2743, 46510, 1283, 1289, - 1295, 11584, 46515, 46520, 46525, 46529, 46544, 46559, 46574, 46589, - 46604, 46619, 46634, 46649, 46664, 46679, 46694, 46709, 46724, 46739, - 46754, 46769, 46784, 46799, 46814, 46829, 46844, 46859, 46874, 46889, - 46904, 46919, 46934, 46949, 46964, 46979, 46994, 47009, 47024, 47039, - 47054, 47069, 47084, 47099, 47114, 47129, 47144, 47159, 47174, 47189, - 47204, 47219, 47234, 47249, 47264, 47279, 47294, 47309, 47324, 47339, - 47354, 47369, 47384, 47399, 47414, 47429, 47444, 47459, 47474, 47489, - 47504, 47519, 47534, 47549, 47564, 47579, 47594, 47609, 47624, 47639, - 47654, 47669, 47684, 47699, 47714, 47729, 47744, 47759, 47774, 47789, - 47804, 47819, 47834, 47849, 47864, 47879, 47894, 47909, 47924, 47939, - 47954, 47969, 47984, 47999, 48014, 48029, 48044, 48059, 48074, 48089, - 48104, 48119, 48134, 48149, 48164, 48179, 48194, 48209, 48224, 48239, - 48254, 48269, 48284, 48299, 48314, 48329, 48344, 48359, 48374, 48389, - 48404, 48419, 48434, 48449, 48464, 48479, 48494, 48509, 48524, 48539, - 48554, 48569, 48584, 48599, 48614, 48629, 48644, 48659, 48674, 48689, - 48704, 48719, 48734, 48749, 48764, 48779, 48794, 48809, 48824, 48839, - 48854, 48869, 48884, 48899, 48914, 48929, 48944, 48959, 48974, 48989, - 49004, 49019, 49034, 49049, 49064, 49079, 49094, 49109, 49124, 49139, - 49154, 49169, 49184, 49199, 49214, 49229, 49244, 49259, 49274, 49289, - 49304, 49319, 49334, 49349, 49364, 49379, 49394, 49409, 49424, 49439, - 49454, 49469, 49484, 49499, 49514, 49529, 49544, 49559, 49574, 49589, - 49604, 49619, 49634, 49649, 49664, 49679, 49694, 49709, 49724, 49739, - 49754, 49769, 49784, 49799, 49814, 49829, 49844, 49859, 49874, 49889, - 49904, 49919, 49934, 49949, 49964, 49979, 49994, 50009, 50024, 50039, - 50054, 50069, 50084, 50099, 50114, 50129, 50144, 50159, 50174, 50189, - 50204, 50219, 50234, 50249, 50264, 50279, 50294, 50309, 50324, 50339, - 50354, 50369, 50384, 50399, 50414, 50429, 50444, 50459, 50474, 50489, - 50504, 50519, 50534, 50549, 50564, 50579, 50594, 50609, 50624, 50639, - 50654, 50669, 50684, 50699, 50714, 50729, 50744, 50759, 50774, 50789, - 50804, 50819, 50834, 50849, 50864, 50879, 50894, 50909, 50924, 50939, - 50954, 50969, 50984, 50999, 51014, 51029, 51044, 51059, 51074, 51089, - 51104, 51119, 51134, 51149, 51164, 51179, 51194, 51209, 51224, 51239, - 51254, 51269, 51284, 51299, 51314, 51329, 51344, 51359, 51374, 51389, - 51404, 51419, 51434, 51449, 51464, 51479, 51494, 51509, 51524, 51539, - 51554, 51569, 51584, 51599, 51614, 51629, 51644, 51659, 51674, 51689, - 51704, 51719, 51734, 51749, 51764, 51779, 51794, 51809, 51824, 51839, - 51854, 51869, 51884, 51899, 51914, 51929, 51944, 51959, 51974, 51989, - 52004, 52019, 52034, 52049, 52064, 52079, 52094, 52109, 52124, 52139, - 52154, 52169, 52184, 52199, 52214, 52229, 52244, 52259, 52274, 52289, - 52304, 52319, 52334, 52349, 52364, 52379, 52394, 52409, 52424, 52439, - 52454, 52469, 52484, 52499, 52514, 52529, 52544, 52559, 52574, 52589, - 52604, 52619, 52634, 52649, 52664, 52679, 52694, 52709, 52724, 52739, - 52754, 52769, 52784, 52799, 52814, 52829, 52844, 52859, 52874, 52889, - 52904, 52919, 52934, 52949, 52964, 52979, 52994, 53009, 53024, 53039, - 53054, 53069, 53084, 53099, 53114, 53129, 53144, 53159, 53174, 53189, - 53204, 53219, 53234, 53249, 53264, 53279, 53294, 53309, 53324, 53339, - 53354, 53369, 53384, 53399, 53414, 53429, 53444, 53459, 53474, 53489, - 53504, 53519, 53534, 53549, 53564, 53579, 53594, 53609, 53624, 53639, - 53654, 53669, 53684, 53699, 53714, 53729, 53744, 53759, 53774, 53789, - 53804, 53819, 53834, 53849, 53864, 53879, 53894, 53909, 53924, 53939, - 53954, 53969, 53984, 53999, 54014, 54029, 54044, 54059, 54074, 54089, - 54104, 54119, 54134, 54149, 54164, 54179, 54194, 54209, 54224, 54239, - 54254, 54269, 54284, 54299, 54314, 54329, 54345, 54361, 54377, 54393, - 54409, 54425, 54441, 54457, 54473, 54489, 54505, 54521, 54537, 54553, - 54569, 54585, 54601, 54617, 54633, 54649, 54665, 54681, 54697, 54713, - 54729, 54745, 54761, 54777, 54793, 54809, 54825, 54841, 54857, 54873, - 54889, 54905, 54921, 54937, 54953, 54969, 54985, 55001, 55017, 55033, - 55049, 55065, 55081, 55097, 55113, 55129, 55145, 55161, 55177, 55193, - 55209, 55225, 55241, 55257, 55273, 55289, 55305, 55321, 55337, 55353, - 55369, 55385, 55401, 55417, 55433, 55449, 55465, 55481, 55497, 55513, - 55529, 55545, 55561, 55577, 55593, 55609, 55625, 55641, 55657, 55673, - 55689, 55705, 55721, 55737, 55753, 55769, 55785, 55801, 55817, 55833, - 55849, 55865, 55881, 55897, 55913, 55929, 55945, 55961, 55977, 55993, - 56009, 56025, 56041, 56057, 56073, 56089, 56105, 56121, 56137, 56153, - 56169, 56185, 56201, 56217, 56233, 56249, 56265, 56281, 56297, 56313, - 56329, 56345, 56361, 56377, 56393, 56409, 56425, 56441, 56457, 56473, - 56489, 56505, 56521, 56537, 56553, 56569, 56585, 56601, 56617, 56633, - 56649, 56665, 56681, 56697, 56713, 56729, 56745, 56761, 56777, 56793, - 56809, 56825, 56841, 56857, 56873, 56889, 56905, 56921, 56937, 56953, - 56969, 56985, 57001, 57017, 57033, 57049, 57065, 57081, 57097, 57113, - 57129, 57145, 57161, 57177, 57193, 57209, 57225, 57241, 57257, 57273, - 57289, 57305, 57321, 57337, 57353, 57369, 57385, 57401, 57417, 57433, - 57449, 57465, 57481, 57497, 57513, 57529, 57545, 57561, 57577, 57593, - 57609, 57625, 57641, 57657, 57673, 57689, 57705, 57721, 57737, 57753, - 57769, 57785, 57801, 57817, 57833, 57849, 57865, 57881, 57897, 57913, - 57929, 57945, 57961, 57977, 57993, 58009, 58025, 58041, 58057, 58073, - 58089, 58105, 58121, 58137, 58153, 58169, 58185, 58201, 58217, 58233, - 58249, 58265, 58281, 58297, 58313, 58329, 58345, 58361, 58377, 58393, - 58409, 58425, 58441, 58457, 58473, 58489, 58505, 58521, 58537, 58553, - 58569, 58585, 58601, 58617, 58633, 58649, 58665, 58681, 58697, 58713, - 58729, 58745, 58761, 58777, 58793, 58809, 58825, 58841, 58857, 58873, - 58889, 58905, 58921, 58937, 58953, 58969, 58985, 59001, 59017, 59033, - 59049, 59065, 59081, 59097, 59113, 59129, 59145, 59161, 59177, 59193, - 59209, 59225, 59241, 59257, 59273, 59289, 59305, 59321, 59337, 59353, - 59369, 59385, 59401, 59417, 59433, 59449, 59465, 59481, 59497, 59513, - 59529, 59545, 59561, 59577, 59593, 59609, 59625, 59641, 59657, 59673, - 59689, 59705, 59721, 59737, 59753, 59769, 59785, 59801, 59817, 59833, - 59849, 59865, 59881, 59897, 59913, 59929, 59945, 59961, 59977, 59993, - 60009, 60025, 60041, 60057, 60073, 60089, 60105, 60121, 60137, 60153, - 60169, 60185, 60201, 60217, 60233, 60249, 60265, 60281, 60297, 60313, - 60329, 60345, 60361, 60377, 60393, 60409, 60425, 60441, 60457, 60473, - 60489, 60505, 60521, 60537, 60553, 60569, 60585, 60601, 60617, 60633, - 60649, 60665, 60681, 60697, 60713, 60729, 60745, 60761, 60777, 60793, - 60809, 60825, 60841, 60857, 60873, 60889, 60905, 60921, 60937, 60953, - 60969, 60985, 61001, 61017, 61033, 61049, 61065, 61081, 61097, 61113, - 61129, 61145, 61161, 61177, 61193, 61209, 61225, 61241, 61257, 61273, - 61289, 61305, 61321, 61337, 61353, 61369, 61385, 61401, 61417, 61433, - 61449, 61465, 61481, 61497, 61513, 61529, 61545, 61561, 61577, 61593, - 61609, 61625, 61641, 61657, 61673, 61689, 61705, 61721, 61737, 61753, - 61769, 61785, 61801, 61817, 61833, 61849, 61865, 61881, 61897, 61913, - 61929, 61945, 61961, 61977, 61993, 62009, 62025, 62041, 62057, 62073, - 62089, 62105, 62121, 62137, 62153, 62169, 62185, 62201, 62217, 62233, - 62249, 62265, 62281, 62297, 62313, 62329, 62345, 62361, 62377, 62393, - 62409, 62425, 62441, 62457, 62473, 62489, 62505, 62521, 62537, 62553, - 62569, 62585, 62601, 62617, 62633, 62649, 62665, 62681, 62697, 62713, - 62729, 62745, 62761, 62777, 62793, 62809, 62825, 62841, 62857, 62873, - 62889, 62905, 62921, 62937, 62953, 62969, 62985, 63001, 63016, 18307, - 63025, 63030, 63036, 63042, 63052, 63060, 16270, 16868, 10733, 63073, - 1518, 1522, 63081, 3973, 29566, 7512, 63087, 63092, 63097, 63102, 63107, - 63113, 63118, 63124, 63129, 63135, 63140, 63145, 63150, 63155, 63161, - 63166, 63171, 63176, 63181, 63186, 63191, 63196, 63202, 63207, 63213, - 63220, 2600, 63225, 63231, 8912, 63235, 63240, 63247, 63255, 65, 63259, - 63265, 63270, 63275, 63279, 63284, 63288, 63292, 11621, 63296, 63306, - 63319, 63330, 63343, 63350, 63356, 63364, 63369, 63375, 63381, 63387, - 63392, 63397, 63402, 63407, 63411, 63416, 63421, 63426, 63432, 63438, - 63444, 63449, 63453, 63458, 63463, 63467, 63472, 63477, 63482, 63486, - 11637, 11648, 11653, 1561, 63490, 63496, 1566, 63501, 63504, 17741, - 63509, 63515, 63520, 1597, 63526, 1603, 1609, 11683, 63531, 63540, 63548, - 63555, 63559, 63563, 63569, 63574, 33365, 63579, 63586, 63593, 63598, - 63602, 63606, 63615, 1614, 17850, 63620, 63624, 17861, 1162, 63628, - 63635, 63640, 63644, 17891, 1618, 41243, 63647, 63652, 63662, 63671, - 63676, 63680, 63686, 1623, 43855, 63691, 63700, 63706, 63711, 63716, - 11882, 11888, 63722, 63734, 63751, 63768, 63785, 63802, 63819, 63836, - 63853, 63870, 63887, 63904, 63921, 63938, 63955, 63972, 63989, 64006, - 64023, 64040, 64057, 64074, 64091, 64108, 64125, 64142, 64159, 64176, - 64193, 64210, 64227, 64244, 64261, 64278, 64295, 64312, 64329, 64346, - 64363, 64380, 64397, 64414, 64431, 64448, 64465, 64482, 64499, 64516, - 64533, 64550, 64567, 64578, 64588, 64593, 1628, 64597, 64602, 64608, - 64613, 64618, 64625, 9839, 1633, 64631, 64640, 29887, 64645, 64656, - 11899, 64666, 64671, 64677, 64682, 64689, 64695, 64700, 1638, 18174, - 64705, 64711, 11909, 1643, 11914, 64717, 64722, 64728, 64733, 64738, - 64743, 64748, 64753, 64758, 64763, 64768, 64774, 64780, 64786, 64791, - 64795, 64800, 64805, 64809, 64814, 64819, 64824, 64829, 64833, 64838, - 64844, 64849, 64854, 64858, 64863, 64868, 64874, 64879, 64884, 64890, - 64896, 64901, 64905, 64910, 64915, 64920, 64924, 64929, 64934, 64939, - 64945, 64951, 64956, 64960, 64964, 64969, 64974, 64979, 31395, 64983, - 64988, 64993, 64999, 65004, 65009, 65013, 65018, 65023, 65029, 65034, - 65039, 65045, 65051, 65056, 65060, 65065, 65070, 65074, 65079, 65084, - 65089, 65095, 65101, 65106, 65110, 65115, 65120, 65124, 65129, 65134, - 65139, 65144, 65148, 65151, 65154, 65159, 65164, 34056, 65171, 65179, - 3691, 29837, 65185, 65192, 65198, 3830, 12020, 65204, 65214, 65229, - 65237, 12025, 65248, 65253, 65264, 65276, 65288, 65300, 2734, 65312, - 65317, 65329, 65333, 65339, 65345, 65350, 1660, 17418, 65359, 65364, - 43914, 65368, 65372, 65377, 65381, 18315, 65386, 65389, 65394, 65402, - 65410, 1664, 12061, 12067, 1669, 65418, 65425, 65430, 65439, 65449, - 65456, 65461, 65466, 1674, 65473, 65478, 18435, 65482, 65487, 65494, - 65500, 65504, 65515, 65525, 65532, 18457, 9733, 9740, 4022, 4028, 65539, - 1679, 65544, 65550, 65558, 65565, 65571, 65578, 65590, 65596, 65601, - 65613, 65624, 65633, 65643, 3952, 65651, 33166, 33175, 18497, 1684, 1688, - 65664, 65675, 65680, 1698, 65688, 65693, 65698, 18556, 65710, 65713, - 65719, 65725, 65730, 65738, 1703, 65743, 65748, 65756, 65764, 65771, - 65780, 65788, 65797, 1708, 65801, 1713, 23016, 65806, 65813, 18630, - 65821, 65827, 65832, 65840, 65847, 65855, 65865, 65874, 65884, 65893, - 65904, 65914, 65924, 65933, 65943, 65957, 65970, 65979, 65987, 65997, - 66006, 66018, 66029, 66040, 66050, 17948, 66055, 12213, 66064, 66070, - 66075, 66082, 66089, 66095, 17617, 66105, 66111, 66116, 66127, 66132, - 66140, 12230, 12235, 66148, 66154, 66158, 66166, 4017, 18692, 44007, - 66171, 66177, 66182, 66190, 66197, 13179, 66202, 66208, 1724, 66213, - 66216, 1438, 66222, 66227, 66232, 66238, 66243, 66248, 66253, 66258, - 66263, 66268, 1733, 13, 66274, 66278, 66283, 66287, 66291, 66295, 34296, - 66300, 25070, 66305, 66310, 66314, 66317, 66321, 66325, 66330, 66334, - 66339, 66343, 66349, 37514, 37519, 37524, 66352, 66359, 66365, 66373, - 43678, 66383, 37530, 34560, 34311, 34317, 37546, 34323, 66388, 66393, - 34593, 66397, 66400, 66404, 66412, 66419, 66422, 66427, 66432, 66436, - 66440, 66443, 66453, 66465, 66472, 66478, 34328, 66485, 36078, 66488, - 8929, 1019, 66491, 66495, 66500, 3873, 66504, 66507, 14827, 66514, 66521, - 66534, 66542, 66551, 66560, 66565, 66575, 66588, 66600, 66607, 66612, - 66621, 66634, 39039, 66652, 66657, 66664, 66670, 66675, 819, 66680, - 66688, 66695, 66702, 29392, 783, 66708, 66714, 66724, 66732, 66738, - 66743, 34347, 6310, 34361, 66747, 66757, 66762, 66772, 66787, 66793, - 66799, 34371, 66804, 33482, 66808, 66813, 66820, 66825, 66829, 66834, - 18500, 66841, 66846, 66850, 6351, 34397, 66854, 66860, 324, 66870, 66877, - 66884, 66889, 66898, 63656, 66904, 66912, 66916, 66920, 66924, 66928, - 66933, 66937, 66943, 66951, 66956, 66961, 66966, 66970, 66975, 66979, - 66983, 66989, 66995, 67000, 67004, 67009, 34521, 67013, 34527, 34533, - 67018, 67024, 67031, 67036, 67040, 33499, 18167, 67043, 67047, 67052, - 67059, 67065, 67069, 67074, 43353, 67080, 67084, 67091, 67095, 67100, - 67106, 67112, 67118, 67130, 67139, 67149, 67155, 67162, 67167, 67172, - 67176, 67179, 67185, 67192, 67197, 67202, 67209, 67216, 67223, 67229, - 67234, 67239, 67247, 34538, 2462, 67252, 67257, 67263, 67268, 67274, - 67279, 67284, 67289, 67295, 34559, 67300, 67306, 67312, 67318, 34629, - 67323, 67328, 67333, 34640, 67338, 67343, 67348, 67354, 67360, 34645, - 67365, 67370, 67375, 34700, 34706, 67380, 67385, 34711, 34733, 30136, - 34739, 34743, 67390, 12909, 67394, 67402, 67408, 67416, 67423, 67429, - 67439, 67445, 67452, 11556, 34757, 67458, 67471, 67480, 67486, 67495, - 67501, 25380, 67508, 67515, 67525, 67528, 34701, 67533, 67540, 67545, - 67549, 67553, 67558, 67562, 4133, 67567, 67572, 67577, 37608, 37613, - 67581, 37627, 67586, 37632, 67591, 67597, 37644, 37650, 37656, 67602, - 67608, 24366, 67619, 67622, 67634, 67642, 34780, 67646, 67655, 67665, - 67674, 34790, 67679, 67686, 67695, 67701, 67709, 67716, 6402, 4673, - 67721, 34712, 67727, 67730, 67736, 67743, 67748, 67753, 25290, 67757, - 67763, 67769, 67774, 67779, 67783, 67789, 67795, 35984, 1048, 38689, - 40419, 40425, 34821, 34826, 67800, 67804, 67808, 67811, 67824, 67830, - 67834, 67837, 67842, 36321, 67846, 33504, 22966, 67852, 6331, 6339, 9570, - 67855, 67860, 67865, 67870, 67875, 67880, 67885, 67890, 67895, 67900, - 67906, 67911, 67916, 67922, 67927, 67932, 67937, 67942, 67947, 67952, - 67958, 67963, 67969, 67974, 67979, 67984, 67989, 67994, 67999, 68004, - 68009, 68014, 68019, 68025, 68030, 68035, 68040, 68045, 68050, 68055, - 68061, 68066, 68071, 68076, 68081, 68086, 68091, 68096, 68101, 68106, - 68112, 68117, 68122, 68127, 68132, 68138, 68144, 68149, 68155, 68160, - 68165, 68170, 68175, 68180, 1511, 145, 68185, 68189, 68193, 68197, 27076, - 68201, 68205, 68210, 68214, 68219, 68223, 68228, 68233, 68238, 68242, - 68246, 68251, 68255, 14542, 68260, 68264, 68271, 68281, 16595, 68290, - 68299, 68303, 68308, 68313, 68317, 68321, 26870, 3078, 68325, 68331, - 18967, 68335, 68344, 68352, 68358, 68363, 68375, 68387, 68392, 68396, - 68401, 68405, 68411, 68417, 68422, 68432, 68442, 68448, 68453, 68457, - 68463, 68468, 68475, 68481, 68486, 68495, 68504, 68512, 16993, 68516, - 68525, 68533, 68545, 68556, 68567, 68576, 68580, 68589, 68597, 68607, - 68615, 68622, 68628, 68633, 68639, 68644, 68655, 54, 33309, 68661, 28331, - 28341, 68667, 68675, 68682, 68688, 68692, 68702, 68713, 68721, 68730, - 68735, 68740, 68745, 68749, 68753, 18921, 68761, 68765, 68771, 68781, - 68788, 68794, 68800, 37707, 68804, 68806, 68809, 68815, 68819, 68830, - 68840, 68846, 68853, 68860, 14479, 68868, 68874, 68883, 68892, 68898, - 10615, 68904, 68910, 68915, 68920, 68927, 68932, 68939, 68945, 68950, - 68958, 68971, 68980, 65919, 65929, 68989, 68995, 69001, 69008, 69015, - 69022, 69029, 69036, 69041, 69045, 69049, 69052, 69062, 69066, 69078, - 69087, 69091, 69102, 69107, 69111, 65938, 69117, 69124, 69133, 69141, - 69149, 69154, 69158, 69163, 69168, 69178, 69186, 69191, 69195, 69199, - 69205, 69213, 69220, 69232, 69240, 69251, 69258, 69264, 69274, 69280, - 69284, 69291, 69297, 69302, 69306, 69310, 69314, 69323, 69332, 69341, - 69347, 69353, 69359, 69364, 69371, 69377, 69385, 69392, 69398, 13622, - 69403, 69409, 69413, 15529, 69417, 69422, 69432, 69441, 69447, 69453, - 69461, 69468, 69472, 69476, 69482, 69490, 69497, 69503, 69514, 69518, - 69522, 69526, 69529, 69535, 69540, 69545, 69549, 69553, 69562, 69570, - 69577, 69583, 69590, 25963, 43422, 69595, 69603, 69607, 69611, 69614, - 69622, 69629, 69635, 69644, 69652, 69658, 69663, 69667, 69672, 69677, - 69681, 69685, 69689, 69694, 69703, 69707, 69714, 40528, 69718, 69724, - 69728, 69736, 69742, 69747, 69758, 69766, 69772, 69781, 24513, 69789, - 69796, 69803, 69810, 69817, 69824, 46704, 14317, 69831, 69838, 69843, - 37743, 6529, 69849, 69854, 69859, 69865, 69871, 69877, 69882, 69887, - 69892, 69897, 69903, 69908, 69914, 69919, 69925, 69930, 69935, 69940, - 69945, 69950, 69955, 69960, 69966, 69971, 69977, 69982, 69987, 69992, - 69997, 70002, 70007, 70013, 70018, 70023, 70028, 70033, 70038, 70043, - 70048, 70053, 70058, 70063, 70069, 70074, 70079, 70084, 70089, 70094, - 70099, 70104, 70109, 70115, 70120, 70125, 70130, 70135, 70140, 70145, - 70150, 70155, 70160, 70165, 70170, 70175, 70181, 1854, 260, 70186, 41361, - 70190, 70193, 70198, 70202, 70205, 3415, 70210, 70215, 70219, 70228, - 70239, 70256, 70274, 69145, 70282, 70285, 70295, 70302, 70311, 70327, - 70336, 70346, 70351, 70361, 70370, 70378, 70392, 70400, 70404, 70407, - 70414, 70420, 70431, 70438, 70450, 70461, 70472, 70481, 70488, 1278, 710, - 70498, 2629, 70502, 70507, 70516, 9221, 18894, 22471, 70524, 70532, - 70546, 70559, 70563, 70568, 70573, 70578, 70584, 70590, 70595, 8921, - 16623, 70600, 70604, 70612, 12062, 70617, 70623, 70632, 70640, 1736, - 12074, 908, 6465, 70644, 70648, 70657, 70667, 2419, 29127, 70676, 70682, - 18407, 29142, 70688, 4193, 12452, 70694, 70701, 65670, 70705, 70709, - 70715, 70720, 70725, 3634, 154, 15437, 70730, 70742, 70746, 70752, 70757, - 29907, 70761, 12440, 2769, 4, 70766, 70776, 70787, 70793, 70804, 70811, - 70817, 70823, 70831, 70838, 70844, 70854, 70864, 70874, 70883, 25367, - 1290, 70888, 70892, 70896, 70902, 70906, 2792, 2798, 8918, 2294, 70910, - 70914, 70923, 70931, 70942, 70950, 70958, 70964, 70969, 70980, 70991, - 70999, 71005, 71010, 10434, 71020, 71028, 71032, 71036, 71041, 71045, - 71057, 30314, 16548, 71064, 71074, 71080, 71086, 10536, 71096, 71107, - 71118, 71128, 71137, 71141, 71148, 1750, 996, 71158, 71163, 71171, 65483, - 71179, 71184, 71195, 71202, 71216, 15366, 478, 71226, 71230, 71234, - 71242, 71251, 71259, 71265, 71279, 71286, 71292, 71301, 71308, 71318, - 71326, 71333, 71341, 71348, 4024, 149, 71356, 71367, 71371, 71383, 71389, - 12633, 192, 71394, 9871, 71399, 71403, 71410, 71416, 71424, 71431, 9280, - 71438, 71447, 71455, 4093, 71468, 4110, 71472, 2842, 514, 71477, 71490, - 71494, 71499, 2847, 1853, 809, 71503, 4114, 71511, 71517, 71521, 866, - 71531, 71540, 71545, 3651, 71549, 16304, 16311, 50066, 71553, 4145, 4034, - 14200, 71561, 71568, 71573, 25431, 71577, 71584, 71590, 71595, 71600, - 16324, 186, 71605, 71617, 71623, 71631, 2859, 1768, 71639, 71641, 71646, - 71651, 71656, 71662, 71667, 71672, 71677, 71682, 71687, 71692, 71698, - 71703, 71708, 71713, 71718, 71723, 71728, 71733, 71738, 71744, 71749, - 71754, 71759, 71765, 71770, 71776, 71781, 71786, 71791, 71796, 71801, - 71806, 71811, 71817, 71822, 71828, 71833, 71838, 71843, 71848, 71853, - 71858, 71863, 71868, 71874, 71880, 71885, 71890, 71896, 71901, 71905, - 71909, 71914, 71920, 71924, 71930, 71935, 71940, 71946, 71951, 71955, - 71960, 71965, 71969, 71972, 71974, 71978, 71981, 71988, 71993, 71997, - 72002, 72006, 72010, 72014, 72023, 72027, 35026, 72030, 35031, 72037, - 72042, 35036, 72051, 72060, 35042, 72065, 35047, 72074, 72079, 12676, - 72083, 72088, 72093, 35052, 72097, 44921, 72101, 72104, 72108, 8589, - 72114, 72117, 72122, 72126, 3888, 35057, 72129, 72133, 72136, 72141, - 72145, 72151, 72159, 72172, 72181, 72187, 72192, 72198, 72202, 72208, - 72214, 72222, 72227, 72231, 72238, 72244, 72252, 72261, 72269, 35060, - 72276, 72286, 72299, 72304, 72309, 72313, 72322, 72328, 72335, 72346, - 72358, 72365, 72374, 72383, 72392, 72399, 72405, 72412, 72420, 72427, - 72435, 72444, 72452, 72459, 72467, 72476, 72484, 72493, 72503, 72512, - 72520, 72527, 72535, 72544, 72552, 72561, 72571, 72580, 72588, 72597, - 72607, 72616, 72626, 72637, 72647, 72656, 72664, 72671, 72679, 72688, - 72696, 72705, 72715, 72724, 72732, 72741, 72751, 72760, 72770, 72781, - 72791, 72800, 72808, 72817, 72827, 72836, 72846, 72857, 72867, 72876, - 72886, 72897, 72907, 72918, 72930, 72941, 72951, 72960, 72968, 72975, - 72983, 72992, 73000, 73009, 73019, 73028, 73036, 73045, 73055, 73064, - 73074, 73085, 73095, 73104, 73112, 73121, 73131, 73140, 73150, 73161, - 73171, 73180, 73190, 73201, 73211, 73222, 73234, 73245, 73255, 73264, - 73272, 73281, 73291, 73300, 73310, 73321, 73331, 73340, 73350, 73361, - 73371, 73382, 73394, 73405, 73415, 73424, 73434, 73445, 73455, 73466, - 73478, 73489, 73499, 73510, 73522, 73533, 73545, 73558, 73570, 73581, - 73591, 73600, 73608, 73615, 73623, 73632, 73640, 73649, 73659, 73668, - 73676, 73685, 73695, 73704, 73714, 73725, 73735, 73744, 73752, 73761, - 73771, 73780, 73790, 73801, 73811, 73820, 73830, 73841, 73851, 73862, - 73874, 73885, 73895, 73904, 73912, 73921, 73931, 73940, 73950, 73961, - 73971, 73980, 73990, 74001, 74011, 74022, 74034, 74045, 74055, 74064, - 74074, 74085, 74095, 74106, 74118, 74129, 74139, 74150, 74162, 74173, - 74185, 74198, 74210, 74221, 74231, 74240, 74248, 74257, 74267, 74276, - 74286, 74297, 74307, 74316, 74326, 74337, 74347, 74358, 74370, 74381, - 74391, 74400, 74410, 74421, 74431, 74442, 74454, 74465, 74475, 74486, - 74498, 74509, 74521, 74534, 74546, 74557, 74567, 74576, 74586, 74597, - 74607, 74618, 74630, 74641, 74651, 74662, 74674, 74685, 74697, 74710, - 74722, 74733, 74743, 74754, 74766, 74777, 74789, 74802, 74814, 74825, - 74837, 74850, 74862, 74875, 74889, 74902, 74914, 74925, 74935, 74944, - 74952, 74959, 74964, 8419, 74971, 35070, 74976, 74981, 35075, 74987, - 22579, 35080, 74992, 74998, 75006, 75012, 75018, 75025, 75032, 75037, - 75041, 75045, 75048, 75052, 75061, 75070, 75078, 75084, 75096, 75107, - 75111, 3140, 8394, 75116, 75119, 75121, 75125, 75129, 75133, 75139, - 75144, 27990, 75149, 75153, 75156, 75161, 75165, 75172, 75178, 75182, - 6485, 75186, 35097, 75191, 75198, 75207, 75215, 75226, 75234, 75243, - 75251, 75258, 75265, 75271, 75282, 35102, 75287, 75298, 75310, 75318, - 75329, 75338, 75349, 75354, 75362, 2595, 75367, 37166, 75380, 75384, - 75396, 75404, 75409, 75417, 75428, 19114, 75437, 75443, 75450, 75458, - 75464, 35112, 75469, 4139, 63056, 75476, 75479, 75487, 75500, 75513, - 75526, 75539, 75546, 75557, 75566, 75571, 46521, 46526, 75575, 75579, - 75587, 75594, 75603, 75611, 75617, 75626, 75634, 75641, 75649, 75653, - 75662, 75671, 75681, 75694, 75707, 75717, 35117, 75723, 75730, 75736, - 75742, 35123, 75747, 75750, 75754, 75762, 75771, 46259, 75779, 75788, - 75796, 75803, 75811, 75821, 75830, 75839, 36420, 75848, 75859, 75874, - 75884, 9904, 23263, 75893, 75898, 75903, 75907, 75912, 75916, 75921, - 75927, 75932, 75937, 75943, 75948, 75953, 23228, 75958, 75965, 75973, - 75981, 75989, 75994, 76001, 76008, 76013, 2272, 76017, 76021, 76029, - 76037, 35140, 76043, 76049, 76061, 76067, 76074, 76078, 76085, 76090, - 76097, 76103, 76110, 76121, 76131, 76141, 76153, 76159, 76167, 76173, - 76183, 76193, 35167, 76202, 76211, 76217, 76229, 76240, 76247, 76252, - 76256, 76264, 76270, 76275, 76280, 76287, 76295, 76307, 76317, 76326, - 76335, 76342, 37019, 25764, 76348, 76353, 76357, 76361, 76366, 76374, - 76380, 76391, 76404, 76409, 76416, 35172, 76421, 76433, 76442, 76450, - 76460, 76471, 76484, 76491, 76500, 76509, 76517, 76522, 76528, 1500, - 76533, 76538, 76543, 76548, 76554, 76559, 76564, 76570, 76576, 76581, - 76585, 76590, 76595, 76600, 63611, 76605, 76610, 76615, 76620, 76626, - 76632, 76637, 76641, 76646, 76651, 76656, 76662, 76667, 76673, 76678, - 76683, 76688, 76693, 76697, 76703, 76708, 76717, 76722, 76727, 76732, - 76737, 76741, 76748, 76754, 4430, 18737, 3105, 76759, 76763, 76768, - 76772, 76776, 76780, 50321, 76784, 76709, 76786, 76796, 35181, 76799, - 76804, 76813, 76819, 6454, 35186, 76823, 76829, 76834, 76840, 76845, - 76849, 76856, 76861, 76871, 76880, 76884, 76890, 76896, 76902, 76906, - 76914, 76921, 76929, 76937, 35191, 76944, 76947, 76954, 76960, 76965, - 76969, 76975, 76982, 76987, 76991, 77000, 77008, 77014, 77019, 35196, - 77026, 77038, 77045, 77051, 77056, 77062, 77069, 77075, 22979, 29589, - 77081, 77086, 77092, 77096, 77108, 76742, 76749, 23160, 77118, 77123, - 77130, 77136, 77143, 77149, 77160, 77165, 77173, 9609, 77178, 77181, - 77187, 77191, 77195, 77198, 77204, 34934, 4431, 1067, 14596, 77211, - 77217, 77223, 77229, 77235, 77241, 77247, 77253, 77259, 77264, 77269, - 77274, 77279, 77284, 77289, 77294, 77299, 77304, 77309, 77314, 77319, - 77324, 77330, 77335, 77340, 77346, 77351, 77356, 77362, 77368, 77374, - 77380, 77386, 77392, 77398, 77404, 77410, 77415, 77420, 77426, 77431, - 77436, 77442, 77447, 77452, 77457, 77462, 77467, 77472, 77477, 77482, - 77487, 77492, 77497, 77502, 77508, 77513, 77518, 77523, 77529, 77534, - 77539, 77544, 77549, 77555, 77560, 77565, 77570, 77575, 77580, 77585, - 77590, 77595, 77600, 77605, 77610, 77615, 77620, 77625, 77630, 77635, - 77640, 77645, 77650, 77656, 77661, 77666, 77671, 77676, 77681, 77686, - 77691, 1890, 163, 77696, 77700, 77704, 77709, 77717, 77721, 77728, 77736, - 77740, 77753, 77761, 77766, 77771, 28394, 77775, 77780, 77784, 77789, - 77793, 77801, 77805, 22587, 77810, 77814, 66162, 77818, 77821, 77829, - 77837, 77845, 77850, 77855, 77862, 77869, 77875, 77881, 77886, 77891, - 77899, 70551, 77906, 65948, 77911, 77916, 77920, 77927, 65975, 12743, - 77933, 77938, 77943, 77947, 77950, 77956, 77960, 77970, 77979, 77983, - 77986, 77990, 77997, 78010, 78016, 78024, 78033, 78044, 78055, 78066, - 78077, 78086, 78092, 78101, 78109, 78119, 78132, 78140, 78147, 78158, - 78164, 78169, 78174, 78180, 78186, 78196, 78203, 78213, 78222, 76423, - 78230, 78236, 78244, 78250, 78257, 78265, 78270, 78273, 78277, 78281, - 78284, 78290, 78296, 78304, 78316, 78328, 78335, 78340, 78344, 78355, - 78363, 78370, 78382, 78390, 78398, 78405, 78411, 78416, 78426, 78435, - 78440, 78450, 78459, 45549, 78466, 78470, 78475, 78483, 78490, 78496, - 78500, 78510, 78521, 78529, 78536, 78548, 78560, 78569, 75370, 78576, - 78586, 78598, 78609, 78623, 78631, 78641, 78648, 78656, 78669, 78681, - 78690, 78698, 78708, 78719, 78731, 78740, 78750, 78760, 78769, 78776, - 78785, 78800, 78808, 78818, 78827, 78835, 78848, 63026, 78863, 78873, - 78882, 78894, 78904, 78916, 78927, 78938, 78949, 78959, 78970, 78978, - 78984, 78994, 79002, 79008, 31291, 79013, 79019, 79028, 79040, 79045, - 79052, 10448, 19134, 79058, 79067, 79072, 79076, 79083, 79089, 79094, - 79099, 79107, 79115, 13119, 79119, 79122, 79124, 79131, 79137, 79148, - 79153, 79157, 79164, 79170, 79175, 79183, 71120, 71130, 79189, 79196, - 79206, 11543, 79213, 79218, 31506, 79227, 79232, 79239, 79249, 79257, - 79265, 79274, 79280, 79286, 79293, 79300, 79305, 79309, 79317, 65992, - 79322, 79331, 79339, 79346, 79351, 79355, 79364, 79370, 79373, 79377, - 79386, 79396, 77748, 79405, 79409, 79417, 79421, 79427, 79438, 79448, - 19143, 79459, 79468, 79476, 79484, 79491, 66011, 9147, 79499, 79503, - 79512, 79519, 79522, 29470, 79525, 79529, 79534, 79551, 79563, 11501, - 79575, 79580, 79585, 79590, 22669, 79594, 79599, 79604, 79610, 79615, - 6122, 79620, 22673, 79625, 79630, 79636, 79643, 79648, 79653, 79659, - 79665, 79671, 79676, 79682, 79686, 79700, 79708, 79716, 79722, 79727, - 79734, 79744, 79753, 79758, 79763, 79768, 79776, 79781, 79787, 79792, - 79801, 64713, 79806, 79809, 79827, 79846, 79859, 79873, 79889, 79896, - 79903, 79912, 79919, 79925, 79932, 79937, 79943, 79949, 79957, 79963, - 79968, 79973, 79989, 11514, 80003, 80010, 80018, 80024, 80028, 80031, - 80036, 80041, 80048, 80053, 80062, 80068, 80073, 80079, 80085, 80094, - 80103, 80108, 80112, 80120, 80129, 12772, 80138, 80144, 80152, 80158, - 80164, 80170, 80175, 80182, 80188, 12783, 80193, 80196, 80201, 35223, - 80211, 80220, 80225, 80231, 80236, 80244, 80251, 80262, 80272, 80277, - 80285, 70474, 80290, 80296, 80301, 80308, 80317, 80325, 80329, 80335, - 80341, 80348, 80354, 80358, 18518, 3114, 80363, 80367, 80371, 80377, - 80386, 80392, 80399, 80403, 80424, 80446, 80462, 80479, 80498, 80507, - 80517, 80525, 80532, 80539, 80545, 29342, 80559, 80563, 80569, 80577, - 80589, 80595, 80603, 80610, 80615, 80620, 80624, 80632, 80639, 80643, - 80649, 80655, 80660, 3730, 46721, 80666, 80670, 80674, 80678, 80683, - 80688, 80693, 80699, 80705, 80711, 80718, 80724, 80731, 80737, 80743, - 80748, 80754, 80759, 80763, 80768, 80772, 80777, 46736, 80781, 80786, - 80794, 80798, 80803, 80810, 80819, 80825, 80834, 80838, 80845, 80849, - 80852, 80859, 80865, 80874, 80884, 80889, 80893, 80901, 80910, 80914, - 80922, 80928, 80933, 80938, 80944, 80950, 80955, 80959, 80965, 80970, - 80974, 80978, 80981, 80986, 80994, 81004, 81010, 81015, 81025, 44031, - 81033, 81045, 81049, 81055, 81067, 81078, 81085, 81091, 81098, 81105, - 81117, 81124, 81130, 22747, 81134, 81142, 81148, 81155, 81161, 81167, - 81173, 81178, 81183, 81188, 81197, 81205, 81216, 7350, 81221, 17967, - 81227, 81231, 81235, 81239, 81247, 81256, 81260, 81267, 81276, 81284, - 81297, 81303, 80773, 32390, 81308, 81310, 81315, 81320, 81325, 81330, - 81335, 81340, 81345, 81350, 81355, 81360, 81365, 81370, 81375, 81380, - 81386, 81391, 81396, 81401, 81406, 81411, 81416, 81421, 81426, 81432, - 81438, 81444, 81449, 81454, 81466, 81471, 1896, 63, 81476, 81481, 35229, - 81485, 35234, 35239, 35245, 35250, 81489, 35255, 23785, 81511, 81515, - 81519, 81524, 81528, 35259, 81532, 81540, 81547, 35264, 81553, 81556, - 81561, 81565, 81574, 10266, 81582, 35269, 23641, 81585, 81589, 81597, - 1412, 81602, 35280, 81605, 81610, 27750, 27760, 38182, 81615, 81620, - 81625, 81630, 81636, 81641, 81650, 81655, 81664, 81672, 81679, 81685, - 81690, 81695, 81700, 81710, 81719, 81727, 81732, 81740, 81744, 81752, - 81756, 81763, 81771, 35088, 41192, 81778, 81784, 81789, 81794, 13154, - 30529, 81799, 81804, 81811, 81817, 81822, 81830, 81840, 81850, 81856, - 81861, 81867, 19165, 81874, 39052, 81887, 81892, 81898, 33381, 81911, - 81917, 81921, 81930, 81939, 81946, 81952, 81960, 81969, 81976, 81982, - 81985, 81989, 81993, 27891, 81997, 82004, 82010, 82018, 82023, 82027, - 25911, 82033, 82036, 82044, 82051, 82059, 82072, 82086, 82093, 82099, - 82106, 82112, 35294, 82116, 82123, 82131, 82139, 82145, 35299, 82153, - 82159, 82164, 82174, 82180, 82189, 33183, 37614, 82197, 82202, 82207, - 82211, 82216, 82220, 82228, 82233, 16296, 44044, 82237, 82242, 35304, - 67547, 82246, 82251, 82255, 82262, 82271, 82275, 82283, 82289, 82294, - 82300, 82305, 82312, 82318, 82323, 82328, 82339, 82348, 82360, 82375, - 35571, 82381, 18086, 35308, 82385, 82392, 82398, 26027, 82402, 82409, - 82418, 82425, 82434, 82440, 82445, 82453, 82459, 35318, 82464, 82473, - 81073, 82482, 82489, 82495, 82501, 82510, 82520, 82528, 82535, 82539, - 35323, 82542, 35329, 35335, 82547, 82555, 82563, 82573, 82582, 82590, - 82597, 82607, 35340, 82611, 82613, 82617, 82622, 82626, 82630, 82636, - 82641, 82645, 82656, 82661, 82666, 3119, 82670, 82677, 82681, 82690, - 82698, 82705, 82710, 82715, 67598, 82719, 82722, 82728, 82736, 82742, - 82746, 82751, 82758, 82763, 82768, 82772, 82778, 82783, 37645, 82787, - 82790, 82795, 82799, 82804, 82811, 82816, 82820, 42580, 82828, 27769, - 27778, 82834, 82840, 82846, 82851, 82855, 82858, 82868, 82877, 82882, - 82888, 82895, 82901, 82905, 82913, 82918, 37651, 77952, 82922, 82930, - 82936, 82943, 82948, 82952, 82957, 63242, 82963, 82969, 37657, 82974, - 82979, 82983, 82988, 82993, 82998, 83002, 83007, 83012, 83018, 83023, - 83028, 83034, 83040, 83045, 83049, 83054, 83059, 83064, 83068, 26026, - 83073, 83078, 83084, 83090, 83096, 83101, 83105, 83110, 83115, 83120, - 83124, 83129, 83134, 83139, 83144, 46991, 83148, 35348, 83156, 83160, - 83168, 83176, 83187, 83192, 83196, 24211, 75473, 83201, 83207, 83212, - 83222, 83229, 83234, 83242, 83251, 83256, 83260, 83265, 83273, 83281, - 83288, 70736, 83294, 83302, 83309, 83320, 83326, 83332, 35358, 83335, - 83342, 83350, 83355, 44247, 83359, 83364, 83371, 83376, 9484, 83380, - 83388, 83395, 83402, 83411, 83418, 83424, 83438, 6194, 83446, 83452, - 83456, 83459, 83467, 83474, 83479, 83492, 83499, 83505, 83509, 83514, - 83521, 83526, 65851, 83531, 83534, 83543, 83550, 83556, 83560, 83563, - 83571, 83580, 83590, 83600, 83609, 83620, 83628, 83639, 83644, 83648, - 83653, 83657, 38313, 83665, 23042, 38322, 83670, 83675, 83680, 83685, - 83690, 83695, 83700, 83704, 83709, 83714, 83719, 83724, 83729, 83734, - 83738, 83743, 83748, 83752, 83756, 83760, 83764, 83769, 83774, 83778, - 83783, 83787, 83791, 83796, 83801, 83806, 83811, 83815, 83820, 83825, - 83829, 83834, 83839, 83844, 83849, 83854, 83859, 83864, 83869, 83874, - 83879, 83884, 83889, 83894, 83899, 83904, 83909, 83914, 83919, 83924, - 83929, 83933, 83938, 83943, 83948, 83953, 83958, 83963, 83968, 83973, - 83978, 83983, 83988, 83992, 83997, 84001, 84006, 84011, 84016, 84021, - 84026, 84031, 84036, 84041, 84046, 84050, 84054, 84059, 84064, 84068, - 84073, 84078, 84082, 84087, 84092, 84097, 84102, 84106, 84111, 84116, - 84120, 84125, 84129, 84133, 84137, 84141, 84146, 84150, 84154, 84158, - 84162, 84166, 84170, 84174, 84178, 84182, 84187, 84192, 84197, 84202, - 84207, 84212, 84217, 84222, 84227, 84232, 84236, 84240, 84244, 84248, - 84252, 84256, 84261, 84265, 84270, 84274, 84279, 84284, 84288, 84292, - 84297, 84301, 84305, 84309, 84313, 84317, 84321, 84325, 84329, 84333, - 84337, 84341, 84345, 84349, 84353, 84358, 84363, 84367, 84371, 84375, - 84379, 84383, 84387, 84392, 84396, 84400, 84404, 84408, 84412, 84416, - 84421, 84425, 84430, 84434, 84438, 84442, 84446, 84450, 84454, 84458, - 84462, 84466, 84470, 84474, 84479, 84483, 84487, 84491, 84495, 84499, - 84503, 84507, 84511, 84515, 84519, 84523, 84528, 84532, 84536, 84541, - 84546, 84550, 84554, 84558, 84562, 84566, 84570, 84574, 84578, 84583, - 84587, 84592, 84596, 84601, 84605, 84610, 84614, 84620, 84625, 84629, - 84634, 84638, 84643, 84647, 84652, 84656, 84661, 1519, 84665, 2873, 1774, - 1692, 27705, 84669, 2882, 84673, 1381, 84678, 1323, 84682, 84686, 2899, - 84690, 84697, 84704, 84718, 2903, 7452, 84727, 84735, 84742, 84753, - 84762, 84769, 84781, 84794, 84807, 84818, 84823, 84830, 84842, 84846, - 2907, 12850, 84856, 84861, 84870, 84880, 84885, 2911, 84893, 84897, - 84902, 84909, 84915, 84923, 84935, 1328, 14201, 84945, 84949, 84955, - 84969, 84981, 84993, 85003, 85012, 85021, 85030, 85038, 85049, 85057, - 4292, 85067, 85078, 85087, 85093, 85108, 85115, 85121, 85126, 38447, - 85131, 2935, 14205, 85135, 85142, 9409, 85151, 2940, 34796, 85157, 65573, - 85164, 85170, 85181, 85187, 85194, 85200, 85208, 85215, 85221, 85232, - 85242, 85251, 85262, 85271, 85278, 85284, 85294, 85302, 85308, 85323, - 85329, 85334, 85341, 85344, 85350, 85357, 85363, 85371, 85380, 85388, - 85394, 85403, 46261, 85417, 85422, 85428, 16072, 85433, 85446, 85458, - 85467, 85475, 85482, 85486, 85490, 85493, 85500, 85507, 85515, 85523, - 85532, 85540, 15983, 85548, 85553, 85557, 85569, 85576, 85585, 841, - 85595, 85604, 85615, 2956, 85619, 85623, 85629, 85642, 85654, 85664, - 85673, 85685, 28446, 85696, 85704, 85713, 85724, 85735, 85745, 85755, - 85764, 85772, 12364, 85779, 85783, 85786, 85791, 85796, 85800, 85806, - 1333, 85813, 85817, 12932, 85821, 85832, 85841, 85849, 85858, 85866, - 85882, 85893, 85902, 85910, 85922, 85933, 85949, 85959, 85980, 85994, - 86007, 86015, 86022, 7498, 86035, 86040, 86046, 6203, 86052, 86055, - 86062, 86072, 8554, 86079, 86084, 86089, 86094, 86102, 86111, 86119, - 86124, 86131, 10496, 10505, 86137, 86148, 86153, 86159, 2972, 2977, - 86165, 11857, 86171, 86178, 86185, 86198, 2281, 87, 86203, 86208, 86216, - 86226, 86235, 86241, 86250, 86258, 86268, 86272, 86276, 86281, 86285, - 86297, 3000, 86305, 86313, 86318, 86329, 86340, 86352, 86363, 86373, - 86382, 23083, 86387, 86393, 86398, 86408, 86418, 86423, 86429, 86433, - 86438, 86447, 23095, 86451, 4384, 24, 86456, 86465, 86472, 86479, 86485, - 86491, 1049, 86496, 86501, 66128, 86506, 86511, 86517, 86523, 86531, - 86536, 86544, 86551, 86557, 86562, 42464, 46155, 86568, 3004, 32, 86578, - 86591, 86596, 86604, 86609, 86615, 3026, 30497, 86620, 86628, 86635, - 86640, 86649, 63492, 4018, 67218, 86657, 86661, 1719, 1833, 86666, 86671, - 86678, 1837, 280, 86685, 86691, 86696, 3048, 86700, 86705, 86712, 1841, - 86717, 86723, 86728, 86740, 6430, 86750, 86757, 1848, 86763, 86768, - 86775, 86782, 86797, 86804, 86815, 86820, 86828, 2657, 86832, 86844, - 86849, 86853, 86859, 30313, 2286, 86863, 86874, 86878, 86882, 86888, - 86892, 86901, 86905, 86916, 86920, 2332, 34613, 86924, 86934, 3139, - 86942, 9909, 86951, 86956, 86960, 86969, 86976, 86982, 3109, 16136, - 86986, 86999, 87017, 87022, 87030, 87038, 87048, 10768, 14318, 87060, - 87073, 87080, 87094, 87101, 87117, 87124, 87130, 23127, 13556, 87137, - 87144, 87154, 87163, 46990, 87175, 47125, 87183, 87186, 87192, 87198, - 87204, 87210, 87216, 87223, 87230, 87236, 87242, 87248, 87254, 87260, - 87266, 87272, 87278, 87284, 87290, 87296, 87302, 87308, 87314, 87320, - 87326, 87332, 87338, 87344, 87350, 87356, 87362, 87368, 87374, 87380, - 87386, 87392, 87398, 87404, 87410, 87416, 87422, 87428, 87434, 87440, - 87446, 87452, 87458, 87464, 87470, 87476, 87482, 87488, 87494, 87500, - 87506, 87512, 87518, 87524, 87530, 87536, 87543, 87549, 87556, 87563, - 87569, 87576, 87583, 87589, 87595, 87601, 87607, 87613, 87619, 87625, - 87631, 87637, 87643, 87649, 87655, 87661, 87667, 87673, 3123, 9882, - 87679, 87685, 87693, 87697, 84905, 3127, 87701, 22860, 13189, 3968, - 87705, 3133, 87709, 87719, 87725, 87731, 87737, 87743, 87749, 87755, - 87761, 87767, 87773, 87779, 87785, 87791, 87797, 87803, 87809, 87815, - 87821, 87827, 87833, 87839, 87845, 87851, 87857, 87863, 87869, 87876, - 87883, 87889, 87895, 87901, 87907, 87913, 87919, 1338, 87925, 87930, - 87935, 87940, 87945, 87950, 87955, 87960, 87965, 87969, 87973, 87977, - 87981, 87985, 87989, 87993, 87997, 88001, 88007, 88013, 88019, 88025, - 88029, 88033, 88037, 88041, 88045, 88049, 88053, 88057, 88061, 88066, - 88071, 88076, 88081, 88086, 88091, 88096, 88101, 88106, 88111, 88116, - 88121, 88126, 88131, 88136, 88141, 88146, 88151, 88156, 88161, 88166, - 88171, 88176, 88181, 88186, 88191, 88196, 88201, 88206, 88211, 88216, - 88221, 88226, 88231, 88236, 88241, 88246, 88251, 88256, 88261, 88266, - 88271, 88276, 88281, 88286, 88291, 88296, 88301, 88306, 88311, 88316, - 88321, 88326, 88331, 88336, 88341, 88346, 88351, 88356, 88361, 88366, - 88371, 88376, 88381, 88386, 88391, 88396, 88401, 88406, 88411, 88416, - 88421, 88426, 88431, 88436, 88441, 88446, 88451, 88456, 88461, 88466, - 88471, 88476, 88481, 88486, 88491, 88496, 88501, 88506, 88511, 88516, - 88521, 88526, 88531, 88536, 88541, 88546, 88551, 88556, 88561, 88566, - 88571, 88576, 88581, 88586, 88591, 88596, 88601, 88606, 88611, 88616, - 88621, 88626, 88631, 88636, 88641, 88646, 88651, 88656, 88661, 88666, - 88671, 88676, 88681, 88686, 88691, 88696, 88701, 88706, 88711, 88716, - 88721, 88726, 88731, 88736, 88741, 88746, 88751, 88756, 88761, 88766, - 88771, 88776, 88781, 88786, 88791, 88796, 88801, 88806, 88811, 88816, - 88821, 88826, 88831, 88836, 88841, 88846, 88851, 88856, 88861, 88866, - 88871, 88876, 88881, 88886, 88891, 88896, 88901, 88906, 88911, 88916, - 88921, 88926, 88931, 88936, 88941, 88946, 88951, 88957, 88962, 88967, - 88972, 88977, 88982, 88987, 88992, 88998, 89003, 89008, 89013, 89018, - 89023, 89028, 89033, 89038, 89043, 89048, 89053, 89058, 89063, 89068, - 89073, 89078, 89083, 89088, 89093, 89098, 89103, 89108, 89113, 89118, - 89123, 89128, 89133, 89138, 89143, 89148, 89153, 89158, 89167, 89172, - 89181, 89186, 89195, 89200, 89209, 89214, 89223, 89228, 89237, 89242, - 89251, 89256, 89265, 89270, 89275, 89284, 89288, 89297, 89302, 89311, - 89316, 89325, 89330, 89339, 89344, 89353, 89358, 89367, 89372, 89381, - 89386, 89395, 89400, 89409, 89414, 89423, 89428, 89433, 89438, 89443, - 89448, 89453, 89458, 89462, 89467, 89472, 89477, 89482, 89487, 89492, - 89498, 89503, 89508, 89513, 89519, 89523, 89528, 89534, 89539, 89544, - 89549, 89554, 89559, 89564, 89569, 89574, 89579, 89584, 89590, 89595, - 89600, 89605, 89611, 89616, 89621, 89626, 89631, 89637, 89642, 89647, - 89652, 89657, 89662, 89668, 89673, 89678, 89683, 89688, 89693, 89698, - 89703, 89708, 89713, 89718, 89723, 89728, 89733, 89738, 89743, 89748, - 89753, 89758, 89763, 89768, 89773, 89778, 89783, 89789, 89795, 89801, - 89806, 89811, 89816, 89821, 89827, 89833, 89839, 89844, 89849, 89854, - 89860, 89865, 89870, 89875, 89880, 89885, 89890, 89895, 89900, 89905, - 89910, 89915, 89920, 89925, 89930, 89935, 89940, 89946, 89952, 89958, - 89963, 89968, 89973, 89978, 89984, 89990, 89996, 90001, 90006, 90011, - 90016, 90021, 90026, 90031, 90036, 90041, 17539, 90046, 90052, 90057, - 90062, 90067, 90072, 90077, 90083, 90088, 90093, 90098, 90103, 90108, - 90114, 90119, 90124, 90129, 90134, 90139, 90144, 90149, 90154, 90159, - 90164, 90169, 90174, 90179, 90184, 90189, 90194, 90199, 90204, 90209, - 90214, 90219, 90224, 90230, 90235, 90240, 90245, 90250, 90255, 90260, - 90265, 90270, 90275, 90280, 90285, 90290, 90295, 90300, 90305, 90310, - 90315, 90320, 90325, 90330, 90335, 90340, 90345, 90350, 90355, 90360, - 90365, 90370, 90375, 90380, 90385, 90390, 90395, 90400, 90405, 90410, - 90415, 90420, 90425, 90430, 90436, 90441, 90446, 90451, 90456, 90461, - 90466, 90471, 90476, 90481, 90486, 90491, 90497, 90502, 90508, 90513, - 90518, 90523, 90528, 90533, 90538, 90544, 90549, 90554, 90560, 90565, - 90570, 90575, 90580, 90585, 90591, 90597, 90602, 90607, 13211, 90612, - 90617, 90622, 90627, 90632, 90637, 90642, 90647, 90652, 90657, 90662, - 90667, 90672, 90677, 90682, 90687, 90692, 90697, 90702, 90707, 90712, - 90717, 90722, 90727, 90732, 90737, 90742, 90747, 90752, 90757, 90762, - 90767, 90772, 90777, 90782, 90787, 90792, 90797, 90802, 90807, 90812, - 90817, 90822, 90827, 90832, 90837, 90842, 90847, 90852, 90857, 90862, - 90867, 90872, 90877, 90882, 90887, 90892, 90897, 90902, 90907, 90912, - 90917, 90922, 90927, 90932, 90938, 90943, 90948, 90953, 90958, 90964, - 90969, 90974, 90979, 90984, 90989, 90994, 91000, 91005, 91010, 91015, - 91020, 91025, 91031, 91036, 91041, 91046, 91051, 91056, 91062, 91067, - 91072, 91077, 91082, 91087, 91093, 91099, 91104, 91109, 91114, 91120, - 91126, 91132, 91137, 91142, 91148, 91154, 91159, 91165, 91171, 91177, - 91182, 91187, 91193, 91198, 91204, 91209, 91215, 91224, 91229, 91234, - 91240, 91245, 91251, 91256, 91261, 91266, 91271, 91276, 91281, 91286, - 91291, 91296, 91301, 91306, 91311, 91316, 91321, 91326, 91331, 91336, - 91341, 91346, 91351, 91356, 91361, 91366, 91371, 91376, 91381, 91386, - 91391, 91396, 91401, 91406, 91412, 91418, 91424, 91429, 91434, 91439, - 91444, 91449, 91454, 91459, 91464, 91469, 91474, 91479, 91484, 91489, - 91494, 91499, 91504, 91509, 91514, 91519, 91524, 91530, 91536, 91541, - 91547, 91552, 91557, 91563, 91568, 91574, 91579, 91585, 91590, 91596, - 91601, 91607, 91612, 91617, 91622, 91627, 91632, 91637, 91642, 87720, - 87726, 87732, 87738, 91648, 87744, 87750, 91654, 87756, 87762, 87768, - 87774, 87780, 87786, 87792, 87798, 87804, 91660, 87810, 87816, 87822, - 91666, 87828, 87834, 87840, 87846, 91672, 87852, 87858, 87864, 87884, - 91678, 91684, 87890, 91690, 87896, 87902, 87908, 87914, 87920, 3150, - 3155, 91696, 91701, 91704, 91710, 91716, 91723, 91728, 91733, 2337, + 0, 0, 6, 10, 14, 19, 27, 34, 44, 49, 55, 64, 66, 69, 81, 89, 102, 108, + 113, 119, 124, 132, 141, 146, 157, 162, 167, 170, 174, 183, 189, 195, + 200, 207, 215, 223, 224, 227, 235, 244, 171, 250, 256, 263, 273, 280, + 285, 288, 293, 299, 303, 306, 311, 317, 323, 328, 333, 339, 345, 354, + 361, 368, 377, 379, 384, 389, 397, 399, 407, 408, 416, 418, 337, 425, + 428, 430, 436, 438, 445, 450, 457, 462, 467, 474, 482, 486, 492, 497, + 507, 512, 519, 522, 530, 539, 543, 553, 560, 567, 574, 583, 590, 593, + 599, 603, 607, 615, 619, 632, 636, 637, 644, 653, 662, 665, 671, 675, + 677, 687, 692, 700, 704, 707, 715, 719, 724, 729, 735, 740, 744, 747, + 755, 764, 773, 781, 789, 793, 799, 807, 814, 817, 827, 831, 842, 851, + 858, 861, 868, 870, 876, 880, 885, 889, 895, 904, 909, 913, 588, 916, + 921, 930, 938, 943, 946, 674, 951, 956, 959, 965, 969, 973, 979, 986, + 995, 998, 1005, 1014, 1027, 1031, 1039, 1042, 1048, 1054, 1063, 1070, + 1073, 1081, 1088, 1095, 1099, 1102, 1110, 1114, 1123, 1129, 1133, 1136, + 1140, 26, 1147, 1156, 1161, 1166, 1172, 1177, 1182, 1187, 1191, 1196, + 1202, 1207, 1212, 1216, 1222, 1227, 1232, 1237, 1241, 1246, 1251, 1256, + 1262, 1268, 1274, 1279, 1283, 1288, 1293, 1298, 1302, 1307, 1312, 1317, + 1322, 1157, 1162, 1167, 1173, 1178, 1326, 1188, 1332, 1337, 1342, 1349, + 1353, 1356, 1365, 1192, 1369, 1197, 1203, 1208, 1373, 1378, 1383, 1387, + 1391, 1397, 1401, 1213, 1404, 1406, 1223, 1411, 1415, 1228, 1421, 1233, + 1425, 1429, 1238, 1433, 1438, 1442, 1445, 1449, 1242, 1247, 1454, 1460, + 1252, 1472, 1478, 1484, 1490, 1257, 1269, 1275, 1494, 1498, 1502, 1505, + 1280, 1509, 1511, 1516, 1521, 1527, 1532, 1537, 1541, 1546, 1551, 1556, + 1561, 1567, 1572, 1577, 1583, 1589, 1594, 1598, 1603, 1608, 1613, 1618, + 1623, 1627, 1635, 1640, 1644, 1649, 1654, 1659, 1664, 1668, 1671, 1678, + 1683, 1688, 1693, 1698, 1704, 1709, 1713, 1284, 1716, 1721, 1726, 1289, + 1730, 1734, 1741, 1294, 1748, 1299, 1752, 1754, 1759, 1765, 1303, 1770, + 1779, 1308, 1784, 1790, 1795, 1313, 1800, 1805, 1809, 1812, 1817, 1821, + 1825, 1829, 1832, 1836, 1318, 1841, 1323, 1845, 1847, 1853, 1859, 1865, + 1871, 1877, 1883, 1889, 1895, 1900, 1906, 1912, 1918, 1924, 1930, 1936, + 1942, 1948, 1954, 1959, 1964, 1969, 1974, 1979, 1984, 1989, 1994, 1999, + 2004, 2010, 2015, 2021, 2026, 2032, 2038, 2043, 2049, 2055, 2061, 2067, + 2072, 2077, 2079, 2080, 2084, 2088, 2093, 2097, 2101, 2105, 2110, 2114, + 2117, 2122, 2126, 2131, 2135, 2139, 2144, 2148, 2151, 2155, 2161, 2175, + 2179, 2183, 2187, 2190, 2195, 2199, 2203, 2206, 2210, 2215, 2220, 2225, + 2230, 2234, 2238, 2242, 2246, 2251, 2255, 2260, 2264, 2269, 2275, 2282, + 2288, 2293, 2298, 2303, 2309, 2314, 2320, 2325, 2328, 2330, 1174, 2334, + 2341, 2349, 2359, 2368, 2382, 2386, 2390, 2395, 2408, 2416, 2420, 2425, + 2429, 2432, 2436, 2440, 2445, 2450, 2455, 2459, 2462, 2466, 2473, 2480, + 2486, 2491, 2496, 2502, 2508, 2513, 2516, 1756, 2518, 2524, 2528, 2533, + 2537, 2541, 1674, 1767, 2546, 2550, 2553, 2558, 2563, 2568, 2573, 2577, + 2584, 2589, 2592, 2596, 2603, 2609, 2613, 2617, 2621, 2626, 2633, 2638, + 2643, 2650, 2656, 2662, 2668, 2682, 2699, 2714, 2729, 2738, 2743, 2747, + 2752, 2757, 2761, 2773, 2780, 2786, 2278, 2792, 2799, 2805, 2809, 2812, + 2819, 2825, 2830, 2834, 2839, 2843, 2847, 2102, 2851, 2856, 2861, 2865, + 2870, 2878, 2882, 2887, 2891, 2895, 2899, 2904, 2909, 2914, 2918, 2923, + 2928, 2932, 2937, 2941, 2944, 2948, 2952, 2960, 2965, 2969, 2973, 2979, + 2988, 2992, 2996, 3002, 3007, 3014, 3018, 3028, 3032, 3036, 3041, 3045, + 3050, 3056, 3061, 3065, 3069, 3073, 2476, 3081, 3086, 3092, 3097, 3101, + 3106, 3111, 3115, 3121, 3126, 2106, 3132, 3138, 3143, 3148, 3153, 3158, + 3163, 3168, 3173, 3178, 3183, 3189, 3194, 1189, 101, 3200, 3204, 3208, + 3212, 3217, 3221, 3225, 3231, 3236, 3240, 3244, 3249, 3254, 3258, 3263, + 3267, 3270, 3274, 3279, 3283, 3288, 3292, 3295, 3299, 3303, 3308, 3312, + 3315, 3328, 3332, 3336, 3340, 3345, 3349, 3353, 3356, 3360, 3364, 3369, + 3373, 3378, 3383, 3388, 3392, 3397, 3400, 3403, 3408, 3414, 3418, 3422, + 3425, 3430, 3434, 3439, 3443, 3447, 3450, 3456, 3461, 3466, 3472, 3477, + 3482, 3488, 3494, 3499, 3504, 3509, 3514, 1097, 592, 3517, 3520, 3525, + 3529, 3533, 3537, 3541, 3544, 3548, 3553, 3558, 3562, 3567, 3571, 3576, + 3580, 3584, 3588, 3594, 3600, 3603, 3606, 150, 3612, 3617, 3626, 3634, + 3643, 3653, 3660, 3666, 3673, 3678, 3682, 3686, 3694, 3701, 3706, 3713, + 3718, 3722, 3732, 3736, 3740, 3745, 3750, 3760, 2118, 3765, 3769, 3772, + 3778, 3783, 3789, 3795, 3800, 3807, 3811, 3815, 616, 705, 1350, 3819, + 3826, 3833, 3839, 3844, 3851, 3858, 3863, 3869, 3875, 3880, 3884, 3890, + 3897, 3902, 3906, 3910, 2127, 3916, 3924, 3930, 3938, 759, 3944, 3952, + 3963, 3967, 3977, 2132, 3983, 3988, 4003, 4009, 4016, 4026, 4032, 4037, + 4043, 4049, 4052, 4055, 4059, 4064, 4071, 4080, 4085, 4089, 4093, 4097, + 4101, 4106, 4112, 4123, 4127, 3275, 4132, 4144, 4150, 4158, 4162, 4167, + 1543, 4174, 4177, 4180, 4184, 4187, 4193, 4197, 4211, 4215, 4218, 4222, + 4228, 4234, 4239, 4243, 4247, 4253, 4264, 4270, 4275, 4281, 4285, 4293, + 4305, 4315, 4321, 4326, 4335, 4343, 4350, 4356, 4362, 4366, 4372, 4381, + 4390, 4394, 4403, 4408, 4412, 4417, 4421, 4429, 4435, 4439, 4444, 4448, + 4454, 2140, 1366, 4460, 4465, 4471, 4476, 4481, 4486, 4491, 4496, 4501, + 4507, 4512, 4518, 4523, 4528, 4533, 4539, 4544, 4549, 4554, 4559, 4565, + 4570, 4576, 4581, 4586, 4591, 4596, 4601, 4606, 4612, 4617, 4622, 297, + 332, 4627, 4633, 4637, 4641, 4646, 4650, 4654, 4657, 4661, 4665, 4669, + 4673, 4677, 4682, 4686, 4690, 4696, 4457, 4701, 4705, 4708, 4713, 4718, + 4723, 4728, 4733, 4738, 4743, 4748, 4753, 4758, 4762, 4767, 4772, 4777, + 4782, 4787, 4792, 4797, 4802, 4807, 4812, 4816, 4821, 4826, 4831, 4836, + 4841, 4846, 4851, 4856, 4861, 4866, 4870, 4875, 4880, 4885, 4890, 4895, + 4900, 4905, 4910, 4915, 4920, 4924, 4929, 4934, 4939, 4944, 4949, 4954, + 4959, 4964, 4969, 4974, 4978, 4983, 4988, 4993, 4998, 5003, 5008, 5013, + 5018, 5023, 5028, 5032, 5037, 5042, 5047, 5052, 5057, 5062, 5067, 5072, + 5077, 5082, 5086, 5091, 5096, 5101, 5106, 5112, 5118, 5124, 5130, 5136, + 5142, 5148, 5153, 5159, 5165, 5171, 5177, 5183, 5189, 5195, 5201, 5207, + 5213, 5218, 5224, 5230, 5236, 5242, 5248, 5254, 5260, 5266, 5272, 5278, + 5283, 5289, 5295, 5301, 5307, 5313, 5319, 5325, 5331, 5337, 5343, 5348, + 5354, 5360, 5366, 5372, 5378, 5384, 5390, 5396, 5402, 5408, 5413, 5419, + 5425, 5431, 5437, 5443, 5449, 5455, 5461, 5467, 5473, 5478, 5482, 5488, + 5494, 5500, 5506, 5512, 5518, 5524, 5530, 5536, 5542, 5547, 5553, 5559, + 5565, 5571, 5577, 5583, 5589, 5595, 5601, 5607, 5612, 5618, 5624, 5630, + 5636, 5642, 5648, 5654, 5660, 5666, 5672, 5677, 5683, 5689, 5695, 5701, + 5707, 5713, 5719, 5725, 5731, 5737, 5742, 5748, 5754, 5760, 5766, 5772, + 5778, 5784, 5790, 5796, 5802, 5807, 5813, 5819, 5825, 5831, 5837, 5843, + 5849, 5855, 5861, 5867, 5872, 5878, 5884, 5890, 5896, 5902, 5908, 5914, + 5920, 5926, 5932, 5937, 5943, 5949, 5955, 5961, 5967, 5973, 5979, 5985, + 5991, 5997, 6002, 6008, 6014, 6020, 6026, 6032, 6038, 6044, 6050, 6056, + 6062, 6067, 6073, 6079, 6085, 6091, 6097, 6103, 6109, 6115, 6121, 6127, + 6132, 6136, 6139, 6146, 6150, 6163, 6167, 6171, 6175, 6178, 6182, 6187, + 6191, 6195, 6201, 6208, 6219, 6227, 6234, 6238, 6246, 6255, 6261, 6265, + 6277, 6282, 6285, 6290, 6294, 6304, 6312, 6320, 6326, 6330, 6340, 6350, + 6358, 6365, 6372, 6378, 6384, 6391, 6395, 6402, 6412, 6422, 6430, 6437, + 6442, 6446, 6450, 6458, 6462, 6467, 6474, 6482, 6487, 6491, 6496, 6500, + 6507, 6512, 6526, 6531, 6536, 6543, 3530, 6552, 6556, 6561, 6565, 6569, + 6572, 6577, 6582, 6591, 6597, 6603, 6609, 6613, 6624, 6634, 6649, 6664, + 6679, 6694, 6709, 6724, 6739, 6754, 6769, 6784, 6799, 6814, 6829, 6844, + 6859, 6874, 6889, 6904, 6919, 6934, 6949, 6964, 6979, 6994, 7009, 7024, + 7039, 7054, 7069, 7084, 7099, 7114, 7129, 7144, 7159, 7174, 7189, 7204, + 7219, 7234, 7249, 7264, 7279, 7294, 7309, 7324, 7339, 7354, 7369, 7378, + 7387, 7392, 7398, 7408, 7412, 7416, 7421, 7426, 7434, 7438, 7441, 7445, + 3023, 7448, 7453, 336, 510, 7459, 7467, 7471, 7475, 7478, 7482, 7488, + 7492, 7500, 7506, 7511, 7518, 7526, 7533, 7539, 7544, 7551, 7557, 7565, + 7569, 7574, 7586, 7597, 7604, 7608, 7612, 7616, 7619, 7625, 3300, 7629, + 7635, 7640, 7645, 7650, 7656, 7661, 7666, 7671, 7676, 7682, 7687, 7692, + 7698, 7703, 7709, 7714, 7720, 7725, 7731, 7736, 7741, 7746, 7751, 7756, + 7762, 7767, 7772, 7777, 7783, 7789, 7795, 7801, 7807, 7813, 7819, 7825, + 7831, 7837, 7843, 7849, 7854, 7859, 7864, 7869, 7874, 7879, 7884, 7889, + 7895, 7901, 7906, 7912, 7918, 7924, 7929, 7934, 7939, 7944, 7950, 7956, + 7961, 7966, 7971, 7976, 7981, 7987, 7992, 7998, 8004, 8010, 8016, 8022, + 8028, 8034, 8040, 8046, 2149, 7477, 8051, 8055, 8059, 8062, 8069, 8072, + 8076, 8084, 8089, 8094, 8085, 8099, 2176, 8103, 8109, 8115, 8120, 8125, + 8132, 8140, 8145, 8149, 8152, 8156, 8162, 8168, 8172, 2184, 541, 8175, + 8179, 8184, 8190, 8195, 8199, 8202, 8206, 8212, 8217, 8221, 8228, 8232, + 8236, 8240, 882, 984, 8243, 8251, 8258, 8264, 8271, 8279, 8286, 8297, + 8304, 8310, 8315, 8327, 1209, 1374, 1379, 8338, 1384, 8342, 8346, 8355, + 8363, 8367, 8376, 8382, 8387, 8391, 8397, 8402, 8410, 8417, 2734, 8424, + 8428, 8437, 8446, 8455, 8464, 8470, 8475, 8480, 8491, 8500, 8512, 8517, + 8525, 2235, 8529, 8531, 8536, 8540, 8549, 8557, 1388, 165, 3572, 3577, + 8563, 8567, 8576, 8582, 8587, 8590, 8599, 3581, 8605, 2726, 8609, 8617, + 8621, 8625, 8629, 2252, 8633, 8638, 8645, 8651, 8657, 8660, 8662, 8665, + 8673, 8681, 8689, 8692, 8697, 2265, 8702, 8096, 8705, 8707, 8712, 8717, + 8722, 8727, 8732, 8737, 8742, 8747, 8752, 8757, 8763, 8768, 8773, 8778, + 8784, 8789, 8794, 8799, 8804, 8809, 8814, 8820, 8825, 8830, 8835, 8840, + 8845, 8850, 8855, 8860, 8865, 8870, 8875, 8880, 8885, 8890, 8895, 8900, + 8905, 8911, 8917, 8922, 8927, 8932, 8937, 8942, 2276, 2283, 2289, 8947, + 8955, 8961, 8969, 2315, 2321, 8977, 8981, 8986, 8990, 8994, 8998, 9003, + 9007, 9012, 9016, 9019, 9022, 9028, 9035, 9041, 9048, 9054, 9061, 9067, + 9074, 9080, 9086, 9095, 9101, 9105, 9109, 9113, 9117, 9122, 9126, 9131, + 9135, 9141, 9146, 9153, 9164, 9172, 9182, 9188, 9198, 9207, 9214, 9219, + 9223, 9234, 9244, 9257, 9268, 9281, 9292, 9304, 9316, 9328, 9341, 9354, + 9361, 9367, 9378, 9388, 9402, 9409, 9415, 9424, 9432, 9436, 9441, 9445, + 9452, 9460, 9467, 9471, 9477, 9481, 9487, 9497, 9501, 9506, 9511, 9518, + 9524, 9534, 8266, 9540, 9544, 9551, 9557, 9564, 9571, 983, 9575, 9579, + 9584, 9589, 9594, 9598, 9604, 9612, 9619, 9625, 9629, 9632, 9638, 9648, + 9652, 9658, 9663, 9667, 9671, 9677, 9683, 2172, 9688, 9690, 9695, 9703, + 9712, 9716, 9722, 9727, 9732, 9737, 9742, 9748, 9753, 9758, 4249, 9763, + 9768, 9772, 9778, 9783, 9789, 9794, 9799, 9805, 9810, 9717, 9816, 9820, + 9827, 9833, 9838, 9842, 6522, 9847, 9856, 9861, 9866, 8641, 8648, 9871, + 2901, 9875, 9880, 9885, 9890, 9728, 9894, 9899, 9904, 9733, 9908, 9738, + 9913, 9920, 9927, 9933, 9940, 9946, 9952, 9957, 9964, 9969, 9974, 9979, + 9985, 9743, 9749, 9991, 9997, 10002, 10007, 10015, 9754, 10020, 1112, + 10023, 10031, 10037, 10043, 10052, 10060, 10068, 10076, 10084, 10092, + 10100, 10108, 10116, 10125, 10134, 10142, 10151, 10160, 10169, 10178, + 10187, 10196, 10205, 10214, 10223, 10232, 10240, 10245, 10251, 10259, + 10266, 10281, 10298, 10317, 10326, 10334, 10349, 10360, 10368, 10378, + 10388, 10396, 10402, 10414, 10423, 10431, 10438, 10445, 10452, 10458, + 10463, 10473, 10481, 10491, 10498, 10508, 10518, 10528, 10536, 10543, + 10552, 10562, 10576, 10591, 10600, 10608, 10613, 10617, 10626, 10632, + 10637, 10647, 10657, 10667, 10672, 10676, 10685, 10690, 10706, 10723, + 10733, 10744, 10757, 10765, 10778, 10790, 10798, 10803, 10807, 10813, + 10818, 10826, 10834, 10841, 10846, 10854, 10864, 10870, 10874, 10877, + 10881, 10887, 10894, 10898, 10906, 10915, 10923, 10930, 10935, 10940, + 10944, 10948, 10956, 10971, 10987, 10993, 11001, 11010, 11018, 11024, + 11028, 11035, 11046, 11050, 11053, 11059, 9759, 11064, 11070, 11077, + 11083, 11088, 11095, 11102, 11109, 11116, 11123, 11130, 11137, 11144, + 11149, 10294, 11154, 11160, 11167, 11174, 11179, 11186, 11195, 11199, + 11211, 8679, 11215, 11218, 11222, 11226, 11230, 11234, 11240, 11246, + 11251, 11257, 11262, 11267, 11273, 11278, 11283, 9514, 11288, 11292, + 11296, 11300, 11305, 11310, 11315, 11323, 11329, 11334, 11338, 11342, + 11349, 11354, 11362, 11369, 11374, 11378, 11381, 11387, 11394, 11398, + 11401, 11406, 11410, 4288, 11416, 11425, 46, 11433, 11439, 11444, 11449, + 11457, 11464, 11469, 9529, 11475, 11481, 11486, 11490, 11493, 11508, + 11527, 11539, 11552, 11565, 11578, 11592, 11605, 11620, 11627, 9764, + 11633, 11647, 11652, 11658, 11663, 11671, 11676, 8433, 11681, 11684, + 11692, 11699, 11704, 11708, 11714, 2906, 10376, 11718, 11722, 11728, + 11734, 11739, 11745, 11750, 9773, 11756, 11762, 11767, 11772, 11780, + 11786, 11799, 11807, 11814, 11820, 9779, 11826, 11834, 11842, 11849, + 11862, 11875, 11887, 11897, 11909, 11917, 11924, 11936, 11943, 11953, + 11962, 11971, 11979, 11986, 11991, 11997, 9784, 12002, 12008, 12013, + 12018, 9790, 12023, 12026, 12033, 12039, 12052, 9157, 12063, 12069, + 12078, 12086, 12093, 12099, 12110, 12116, 12121, 3835, 12129, 12134, + 11500, 12140, 12147, 12152, 9795, 12158, 12163, 12170, 12176, 12182, + 12187, 12195, 12203, 12210, 12214, 12226, 12240, 12250, 12255, 12259, + 12270, 12276, 12281, 12286, 9800, 12290, 9806, 12295, 12298, 12303, + 12315, 12322, 12327, 12331, 12339, 12344, 12348, 12353, 12357, 12364, + 12370, 9811, 9718, 12377, 2911, 12, 12384, 12389, 12393, 12397, 12403, + 12411, 12421, 12426, 12431, 12438, 12445, 12449, 12460, 12470, 12479, + 12488, 12500, 12505, 12509, 12517, 12531, 12535, 12538, 12546, 12553, + 12561, 12565, 12576, 12580, 12587, 12592, 12596, 12602, 12607, 12613, + 12618, 12623, 12627, 12633, 12638, 12649, 12653, 12656, 12662, 12667, + 12673, 12679, 12686, 12697, 12707, 12717, 12726, 12733, 12742, 12746, + 9821, 9828, 9834, 9839, 12752, 12758, 12764, 12769, 12775, 9843, 12781, + 12784, 12791, 12796, 12811, 12827, 12842, 12850, 12856, 12861, 976, 387, + 12866, 12874, 12881, 12887, 12892, 12897, 9848, 12899, 12903, 12908, + 12912, 12922, 12927, 12931, 12940, 12944, 12947, 12954, 9857, 12959, + 12962, 12970, 12977, 12985, 12989, 12993, 13000, 13009, 13016, 13012, + 13023, 13027, 13033, 13037, 13041, 13045, 13051, 13061, 13069, 13076, + 13080, 13088, 13092, 13099, 13103, 13108, 13112, 13119, 13125, 13133, + 13139, 13144, 13154, 13159, 13164, 13168, 13172, 13180, 4138, 13188, + 13193, 9862, 13197, 13201, 13204, 13212, 13219, 13223, 6322, 13227, + 13232, 13237, 13241, 13252, 13262, 13267, 13273, 13278, 13282, 13285, + 13293, 13298, 13303, 13310, 13315, 9867, 13320, 13324, 13331, 1718, 6480, + 13336, 13341, 13346, 13351, 13357, 13362, 13368, 13373, 13378, 13383, + 13388, 13393, 13398, 13403, 13408, 13413, 13418, 13423, 13428, 13433, + 13438, 13443, 13448, 13454, 13459, 13464, 13469, 13474, 13479, 13485, + 13490, 13495, 13501, 13506, 13512, 13517, 13523, 13528, 13533, 13538, + 13543, 13549, 13554, 13559, 13564, 936, 112, 13572, 13576, 13581, 13586, + 13590, 13594, 13598, 13603, 13607, 13612, 13616, 13619, 13623, 13627, + 13633, 13638, 13648, 13654, 13662, 13668, 13672, 13676, 13683, 13691, + 13700, 13711, 13721, 13728, 13735, 13739, 13748, 13757, 13765, 13774, + 13783, 13792, 13801, 13811, 13821, 13831, 13841, 13851, 13860, 13870, + 13880, 13890, 13900, 13910, 13920, 13930, 13939, 13949, 13959, 13969, + 13979, 13989, 13999, 14008, 14018, 14028, 14038, 14048, 14058, 14068, + 14078, 14088, 14098, 14107, 14117, 14127, 14137, 14147, 14157, 14167, + 14177, 14187, 14197, 14207, 14216, 1218, 14222, 14225, 14229, 14234, + 14241, 14247, 14252, 14256, 14261, 14270, 14278, 14283, 14287, 14291, + 14297, 14302, 14308, 9876, 14313, 14318, 14327, 9886, 14332, 14335, + 14341, 14349, 9891, 14356, 14360, 14364, 14369, 14373, 14383, 14389, + 14395, 14400, 14409, 14417, 14424, 14431, 14436, 14443, 14448, 14452, + 14455, 14466, 14476, 14485, 14493, 14504, 14516, 14526, 14531, 14535, + 14540, 14545, 14549, 14555, 14563, 14570, 14581, 14586, 14596, 14605, + 14609, 14612, 14619, 14629, 14638, 14645, 14649, 14656, 14662, 14667, + 14672, 14676, 14685, 14690, 14694, 14700, 14704, 14709, 14713, 14720, + 14727, 14731, 14740, 14748, 14756, 14763, 14771, 14783, 14794, 14804, + 14811, 14817, 14826, 14837, 14846, 14858, 14870, 14882, 14892, 14901, + 14910, 14918, 14925, 14934, 14942, 14946, 14951, 14957, 14963, 14968, + 14973, 8117, 14977, 14979, 14983, 14988, 14995, 15001, 15007, 15016, + 15020, 15026, 15034, 15041, 15050, 15059, 15068, 15077, 15086, 15095, + 15104, 15113, 15123, 15133, 15142, 15148, 15155, 15162, 15168, 15182, + 15188, 15195, 15203, 15212, 15220, 15226, 15235, 15244, 15255, 15265, + 15273, 15280, 15288, 15297, 15310, 15319, 15327, 15334, 15347, 15353, + 15359, 15369, 15378, 15387, 15392, 15396, 15402, 15408, 15413, 15420, + 15427, 9528, 15432, 15437, 15444, 15452, 15457, 15464, 15469, 15481, + 13629, 15486, 15494, 15500, 15505, 15513, 15521, 15528, 15536, 15542, + 15550, 15558, 15564, 15569, 15575, 15582, 15588, 15593, 15597, 15608, + 15616, 15622, 15627, 15634, 15643, 15649, 15654, 15662, 15671, 15685, + 4082, 15689, 15694, 15699, 15705, 15710, 15715, 15719, 15724, 15729, + 15734, 8116, 15739, 15744, 15749, 15754, 15759, 15763, 15768, 15773, + 15778, 15783, 15789, 15795, 15800, 15804, 15810, 15815, 15820, 15825, + 9895, 15830, 15835, 15840, 15845, 15850, 15867, 15885, 15897, 15910, + 15927, 15943, 15960, 15970, 15989, 16000, 16011, 16022, 16033, 16045, + 16056, 16067, 16084, 16095, 16106, 16111, 9900, 16116, 16120, 2405, + 16124, 16127, 16133, 16141, 16149, 16155, 16164, 16171, 16176, 16184, + 16192, 16199, 16203, 16208, 16214, 16221, 16229, 16236, 16248, 16255, + 16261, 16269, 16274, 16280, 12805, 16286, 16295, 16301, 16306, 16314, + 16323, 16331, 16338, 16344, 16352, 16359, 16365, 16371, 16378, 16385, + 16391, 16397, 16406, 16414, 16424, 16431, 16437, 16445, 16451, 16459, + 16467, 16474, 16487, 16494, 16503, 16512, 16521, 16529, 16539, 16546, + 16551, 3726, 16558, 16563, 1334, 16567, 15740, 16571, 16577, 16581, + 16589, 16601, 16606, 16613, 16619, 16624, 16631, 15745, 16635, 16639, + 16643, 15750, 16647, 15755, 16651, 16658, 16663, 16667, 16674, 16678, + 16686, 16693, 16698, 16702, 16709, 16726, 16735, 16739, 16742, 16750, + 16756, 16761, 3804, 16765, 16767, 16775, 16782, 16792, 16804, 16809, + 16813, 16819, 16824, 16832, 16836, 16842, 16847, 16853, 16856, 16863, + 16871, 16878, 16884, 16889, 16895, 16900, 16907, 16913, 16918, 16925, + 16930, 16934, 16940, 16944, 16951, 16957, 16962, 16968, 16976, 16984, + 16991, 16997, 17002, 17008, 17014, 17022, 17027, 17035, 17041, 17047, + 17052, 17059, 17064, 17068, 17074, 17079, 17086, 17091, 17097, 17100, + 17106, 17112, 17115, 17119, 17123, 17135, 17141, 17146, 17153, 17159, + 17165, 17176, 17186, 17195, 17203, 17210, 17221, 17231, 17241, 17249, + 17252, 15769, 17257, 17262, 15774, 15915, 17270, 17283, 17298, 17309, + 15932, 17327, 17340, 17353, 17364, 11515, 17375, 17388, 17407, 17418, + 17429, 17440, 2677, 17453, 17457, 17465, 17476, 17487, 17495, 17510, + 17525, 17536, 17543, 17549, 17557, 17561, 17567, 17570, 17583, 17595, + 17605, 17613, 17620, 17628, 17638, 17643, 17650, 17655, 17662, 17673, + 17683, 17689, 17694, 17699, 15779, 17703, 17709, 17715, 17720, 17725, + 17730, 17734, 15784, 15790, 17738, 15796, 17743, 17751, 17756, 17760, + 17767, 17775, 17784, 17791, 17795, 9739, 17799, 17801, 17806, 17811, + 17817, 17822, 17827, 17832, 17837, 17841, 17847, 17853, 17858, 17864, + 17869, 17874, 17878, 17884, 17889, 17893, 17898, 17903, 17915, 17920, + 17926, 17931, 17936, 17942, 17948, 17953, 17958, 17963, 17970, 17976, + 17987, 17994, 17999, 18003, 18007, 18010, 18018, 18023, 18029, 18036, + 18043, 18049, 18054, 18059, 18064, 18071, 18081, 18089, 18094, 18101, + 18107, 18116, 18126, 18136, 18150, 18164, 18178, 18192, 18207, 18222, + 18239, 18257, 18270, 18276, 18281, 18286, 18290, 18298, 18303, 18311, + 18317, 18323, 18328, 18333, 18337, 18342, 18346, 18351, 18355, 18366, + 18372, 18377, 18382, 18389, 18394, 18398, 3689, 18403, 18409, 18416, + 15805, 18422, 18426, 18432, 18437, 18442, 18446, 18452, 18457, 18462, + 18469, 18474, 14385, 18478, 18483, 18487, 18492, 18498, 18504, 18511, + 18521, 18529, 18536, 18541, 18545, 18554, 18562, 18569, 18576, 18582, + 18587, 18593, 18598, 18603, 18609, 18614, 18620, 18625, 18631, 18637, + 18644, 18650, 18655, 18660, 9965, 18669, 18672, 18680, 18686, 18691, + 18696, 18706, 18713, 18719, 18724, 18729, 18735, 18740, 18746, 18751, + 18757, 18763, 18769, 18774, 18782, 18789, 18794, 18799, 18805, 18810, + 18814, 18823, 18834, 18841, 18848, 18856, 18863, 18868, 18873, 18879, + 18884, 18892, 18898, 18904, 18911, 18917, 18922, 18926, 18932, 18937, + 18942, 18946, 18951, 1407, 8141, 2925, 18955, 18959, 18963, 18967, 18971, + 18975, 18978, 18983, 18990, 18998, 15816, 19005, 19015, 19023, 19030, + 19038, 19048, 19057, 9275, 19070, 19075, 19080, 19088, 19095, 14481, + 14490, 19102, 19112, 19127, 19133, 19140, 19147, 19153, 19159, 19170, + 19178, 19186, 19196, 19206, 15821, 19215, 19221, 19227, 19235, 19243, + 19248, 19257, 19265, 19277, 19287, 19297, 19307, 19316, 19328, 19338, + 19348, 19359, 19366, 19371, 19383, 19395, 19407, 19419, 19431, 19443, + 19455, 19467, 19479, 19491, 19502, 19514, 19526, 19538, 19550, 19562, + 19574, 19586, 19598, 19610, 19622, 19633, 19645, 19657, 19669, 19681, + 19693, 19705, 19717, 19729, 19741, 19753, 19764, 19776, 19788, 19800, + 19812, 19824, 19836, 19848, 19860, 19872, 19884, 19895, 19907, 19919, + 19931, 19943, 19955, 19967, 19979, 19991, 20003, 20015, 20026, 20038, + 20050, 20062, 20074, 20086, 20098, 20110, 20122, 20134, 20146, 20157, + 20169, 20181, 20193, 20205, 20217, 20229, 20241, 20253, 20265, 20277, + 20288, 20300, 20312, 20324, 20336, 20349, 20362, 20375, 20388, 20401, + 20414, 20427, 20439, 20452, 20465, 20478, 20491, 20504, 20517, 20530, + 20543, 20556, 20569, 20581, 20594, 20607, 20620, 20633, 20646, 20659, + 20672, 20685, 20698, 20711, 20723, 20736, 20749, 20762, 20775, 20788, + 20801, 20814, 20827, 20840, 20853, 20865, 20878, 20891, 20904, 20917, + 20930, 20943, 20956, 20969, 20982, 20995, 21007, 21020, 21033, 21046, + 21059, 21072, 21085, 21098, 21111, 21124, 21137, 21149, 21160, 21173, + 21186, 21199, 21212, 21225, 21238, 21251, 21264, 21277, 21290, 21302, + 21315, 21328, 21341, 21354, 21367, 21380, 21393, 21406, 21419, 21432, + 21444, 21457, 21470, 21483, 21496, 21509, 21522, 21535, 21548, 21561, + 21574, 21586, 21599, 21612, 21625, 21638, 21651, 21664, 21677, 21690, + 21703, 21716, 21728, 21741, 21754, 21767, 21780, 21793, 21806, 21819, + 21832, 21845, 21858, 21870, 21883, 21896, 21909, 21922, 21935, 21948, + 21961, 21974, 21987, 22000, 22012, 22025, 22038, 22051, 22064, 22077, + 22090, 22103, 22116, 22129, 22142, 22154, 22167, 22180, 22193, 22206, + 22219, 22232, 22245, 22258, 22271, 22284, 22296, 22309, 22322, 22335, + 22348, 22361, 22374, 22387, 22400, 22413, 22426, 22438, 22451, 22464, + 22477, 22490, 22503, 22516, 22529, 22542, 22555, 22568, 22580, 22591, + 22600, 22608, 22616, 22623, 22629, 22633, 22639, 22645, 22653, 22658, + 22664, 22669, 22673, 22682, 9744, 22693, 22700, 22708, 22715, 22722, + 12046, 22729, 22736, 22745, 22750, 22755, 8169, 22762, 22767, 22770, + 22775, 22783, 22790, 22797, 22804, 22810, 22819, 22828, 22837, 22843, + 22851, 22860, 22864, 22870, 22875, 22885, 22892, 22898, 22906, 22912, + 22919, 22929, 22938, 22942, 22949, 22953, 22958, 22964, 22972, 22976, + 22986, 15831, 22995, 23001, 23005, 23014, 23024, 15836, 23030, 23037, + 23048, 23056, 23066, 23075, 23083, 9493, 23091, 23096, 23102, 23107, + 23111, 23115, 23119, 10477, 23124, 23132, 23139, 23148, 23155, 23162, + 23168, 11966, 23175, 23181, 23185, 23191, 23198, 23204, 23212, 23218, + 23225, 23231, 23237, 23246, 23250, 23258, 23267, 23274, 23279, 23283, + 23294, 23299, 23304, 23310, 23315, 23328, 8373, 23332, 23338, 23344, + 23349, 23357, 23361, 23368, 23377, 23382, 16107, 23390, 23394, 23406, + 23411, 23415, 23418, 23424, 23430, 23436, 23441, 23445, 23448, 23459, + 23464, 10016, 23471, 23476, 1224, 10021, 23481, 23486, 23491, 23496, + 23501, 23506, 23511, 23516, 23521, 23526, 23531, 23536, 23542, 23547, + 23552, 23557, 23562, 23567, 23572, 23577, 23582, 23587, 23593, 23599, + 23604, 23609, 23614, 23619, 23624, 23629, 23634, 23639, 23644, 23650, + 23655, 23660, 23665, 23671, 23677, 23682, 23687, 23692, 23697, 23702, + 23707, 23712, 23717, 23723, 23728, 23733, 23738, 23743, 23749, 23754, + 23759, 23763, 1330, 140, 23771, 23775, 23779, 23783, 23788, 23792, 14391, + 2331, 23796, 23801, 23805, 23810, 23814, 23819, 23823, 23829, 23834, + 23838, 23842, 23850, 23854, 23858, 23863, 23868, 23872, 23878, 23883, + 23887, 23892, 23897, 23901, 23908, 23915, 23922, 23927, 23931, 23935, + 23940, 23944, 23947, 23953, 23966, 23971, 23977, 23986, 23991, 10241, + 23996, 24005, 24010, 24013, 2740, 2745, 24017, 24023, 24029, 3650, 24034, + 24039, 24044, 24050, 24055, 15251, 24060, 24065, 24070, 24075, 24081, + 24086, 24091, 24097, 24102, 24106, 24111, 24116, 24121, 24126, 24131, + 24135, 24140, 24144, 24149, 24154, 24159, 24164, 24168, 24173, 24177, + 24182, 24187, 24192, 24107, 2934, 24112, 24197, 24205, 24212, 10571, + 24224, 24232, 24242, 24260, 24279, 24288, 24296, 24117, 24303, 24308, + 24316, 24122, 24321, 24326, 24334, 24339, 24127, 24344, 24352, 24357, + 24361, 24368, 24374, 24383, 24391, 24395, 24398, 24405, 24409, 24413, + 24418, 24424, 24431, 24436, 9520, 1723, 1728, 24440, 24446, 24452, 24457, + 24461, 24465, 24469, 24473, 24477, 24481, 24485, 24489, 24492, 24498, + 24505, 24513, 24519, 24525, 24530, 24535, 24541, 24545, 24550, 15157, + 15164, 24557, 24569, 24572, 24579, 24583, 18045, 24590, 24598, 24609, + 24618, 24631, 24641, 24655, 24667, 24681, 24694, 24706, 24716, 24728, + 24734, 24740, 24755, 24779, 24797, 24816, 24829, 24843, 24861, 24877, + 24894, 24912, 24923, 24942, 24959, 24979, 24997, 25009, 25023, 25037, + 25049, 25066, 25085, 25103, 25115, 25133, 25152, 15975, 25165, 25185, + 25197, 11546, 25209, 25214, 25219, 25224, 25230, 25235, 25239, 25246, + 25252, 2422, 25256, 25262, 25266, 25269, 25280, 25284, 25287, 25295, + 25301, 24145, 25305, 25314, 25325, 25331, 25337, 25352, 25361, 25369, + 25376, 25381, 25385, 25392, 25398, 25407, 25415, 25422, 25432, 25441, + 25451, 25456, 25465, 25474, 25485, 25496, 4206, 25506, 25510, 25520, + 25528, 25538, 25549, 25554, 25564, 25572, 25579, 25585, 25592, 25597, + 24155, 25601, 25610, 25614, 25617, 25622, 25630, 25637, 25646, 25654, + 25662, 25670, 25680, 25689, 25695, 25701, 25705, 24160, 24165, 25709, + 25719, 25729, 25739, 25747, 25754, 25764, 25772, 25780, 25786, 25794, + 872, 25803, 16188, 557, 25817, 25826, 25834, 25845, 25856, 25866, 25875, + 25887, 25896, 25905, 25912, 25918, 25928, 25937, 25946, 25954, 25964, + 25972, 25980, 9982, 25986, 25989, 25993, 25998, 26003, 26007, 10686, + 24178, 24183, 26015, 26021, 26027, 26032, 26037, 26041, 26049, 26055, + 26061, 26065, 3674, 26073, 26078, 26083, 26087, 26091, 10799, 26098, + 26106, 26120, 26127, 26133, 10808, 10814, 26141, 26149, 26156, 26161, + 26166, 24188, 26172, 26183, 26187, 26192, 2629, 26197, 26208, 26214, + 26219, 26223, 26227, 26230, 26237, 26244, 26250, 26257, 26263, 26267, + 24193, 26272, 26276, 26280, 1412, 8585, 26285, 26290, 26295, 26300, + 26305, 26310, 26315, 26320, 26325, 26330, 26335, 26340, 26345, 26350, + 26356, 26361, 26366, 26371, 26376, 26381, 26386, 26392, 26397, 26402, + 26407, 26412, 26417, 26422, 26427, 26433, 26439, 26444, 26450, 26455, + 26460, 5, 26466, 26470, 26474, 26478, 26483, 26487, 26491, 26495, 26499, + 26504, 26508, 26513, 26517, 26520, 26524, 26529, 26533, 26538, 26542, + 26546, 26550, 26555, 26559, 26563, 26573, 26578, 26582, 26586, 26591, + 26596, 26605, 26610, 26615, 26619, 26623, 26636, 26648, 26657, 26666, + 26671, 26677, 26682, 26686, 26690, 26700, 26709, 26717, 26723, 26728, + 26732, 26739, 26749, 26758, 26766, 11868, 26774, 26782, 26791, 26800, + 26808, 26818, 26823, 26827, 26831, 26834, 26836, 26840, 26844, 26849, + 26854, 26858, 26862, 26865, 26869, 26872, 26876, 26879, 26882, 26886, + 26892, 26896, 26900, 26904, 26908, 26913, 26918, 26923, 26927, 26930, + 26935, 26941, 26946, 26952, 26957, 26961, 26967, 26971, 26975, 26980, + 26984, 26989, 26994, 26998, 27002, 27009, 27013, 27016, 27020, 27024, + 27030, 27036, 27040, 27044, 27049, 27056, 27062, 27066, 27075, 27079, + 27083, 27086, 27092, 27097, 27103, 1456, 1787, 27108, 27113, 27118, + 27123, 27128, 27133, 27138, 2159, 2205, 27143, 27146, 27150, 27154, + 27159, 27163, 16200, 27167, 27172, 27177, 27181, 27184, 27189, 27193, + 27198, 27202, 16204, 27207, 27210, 27213, 27217, 27222, 27226, 27239, + 27243, 27246, 27254, 27263, 27270, 27275, 27281, 27287, 27295, 27302, + 27309, 27313, 27317, 27321, 27326, 27331, 27335, 27343, 27348, 27360, + 27371, 27376, 27380, 27387, 27391, 27396, 27402, 27405, 27410, 27415, + 27419, 27423, 27426, 27432, 8272, 2335, 27436, 27441, 27457, 10288, + 27477, 27486, 27502, 27506, 27513, 27516, 27522, 27532, 27538, 27547, + 27562, 27574, 27585, 27593, 27602, 27608, 27617, 27627, 27637, 27648, + 27659, 27669, 27678, 27685, 27694, 27702, 27709, 27717, 27724, 27731, + 27744, 27751, 27759, 27766, 27772, 27777, 27786, 27793, 27799, 27804, + 27812, 27819, 27826, 25530, 27838, 27850, 27864, 27872, 27880, 27887, + 27899, 27908, 27917, 27925, 27933, 27941, 27948, 27954, 27963, 27971, + 27981, 27990, 28000, 28009, 28018, 28026, 28031, 28035, 28038, 28042, + 28046, 28050, 28054, 28058, 28064, 28070, 28075, 28083, 16262, 28090, + 28095, 28102, 28108, 28115, 16270, 28122, 28125, 28137, 28145, 28151, + 28156, 28160, 28171, 10749, 28181, 28189, 28199, 28208, 28215, 28222, + 28230, 28234, 16281, 28237, 28244, 28248, 28254, 28257, 28264, 28270, + 28275, 28282, 28288, 28292, 28297, 28301, 28310, 28317, 28323, 8330, + 28330, 28338, 28345, 28351, 28356, 28362, 28368, 28376, 28382, 28386, + 28389, 28391, 28043, 28400, 28406, 28412, 28422, 28427, 28434, 28440, + 28445, 28450, 28455, 28459, 28464, 28471, 28477, 28486, 28490, 28497, + 28503, 28512, 4398, 28518, 28524, 28529, 28536, 28547, 28552, 28556, + 28566, 28572, 28576, 28581, 28591, 28600, 28604, 28611, 28619, 28626, + 28632, 28637, 28645, 28652, 28657, 28664, 28676, 28685, 28689, 14322, + 28697, 28707, 28711, 27250, 28722, 28727, 28731, 28738, 28745, 23874, + 27968, 28750, 28754, 28757, 24929, 28762, 28776, 28792, 28810, 28829, + 28846, 28864, 24948, 28881, 28901, 24965, 28913, 28925, 17314, 28937, + 24985, 28951, 28963, 11559, 28977, 28982, 28987, 28992, 28998, 29004, + 29010, 29014, 29022, 29029, 29034, 29044, 29050, 11157, 29056, 29058, + 29063, 29071, 29075, 28467, 29081, 29088, 12711, 12721, 29095, 29105, + 29110, 29114, 29117, 29123, 29131, 29143, 29153, 29169, 29182, 29196, + 17332, 29210, 29217, 29221, 29224, 29229, 29233, 29240, 29247, 29254, + 29264, 29269, 29274, 29279, 29287, 29295, 29300, 29309, 29314, 3342, + 29318, 29321, 29324, 29329, 29336, 29341, 29357, 29365, 29373, 10056, + 29381, 29386, 29390, 29396, 29401, 29407, 29410, 29416, 29428, 29436, + 29443, 29449, 29456, 29467, 29481, 29494, 29500, 29509, 29515, 29524, + 29536, 29547, 29557, 29566, 29575, 29583, 29594, 8312, 29601, 29608, + 29614, 29619, 29625, 29632, 29643, 29653, 29663, 29672, 29678, 29685, + 29690, 29698, 29705, 29713, 29721, 29733, 6587, 1028, 29740, 29749, + 29757, 29763, 29769, 29774, 29778, 29781, 29787, 29794, 29799, 29804, + 29809, 29813, 29825, 29836, 29845, 29853, 16446, 29858, 29866, 29871, + 29877, 29883, 12704, 9103, 29888, 29892, 29896, 29899, 29902, 29908, + 29916, 29924, 29928, 29932, 29937, 29940, 29949, 29953, 29956, 29964, + 29975, 29979, 29985, 29991, 29995, 30001, 30009, 30031, 30055, 30064, + 30071, 30078, 30084, 30092, 30098, 30103, 30114, 30132, 30139, 30147, + 30151, 30156, 30165, 30178, 30186, 30198, 30209, 30220, 30230, 30244, + 30253, 30261, 30273, 10305, 30284, 30295, 30307, 30317, 30326, 30331, + 30335, 30343, 30354, 30364, 30369, 30373, 30376, 30379, 30387, 30395, + 30404, 30414, 30423, 30429, 30443, 2691, 30465, 30476, 30485, 30495, + 30507, 30516, 30525, 30535, 30543, 30551, 30560, 30565, 30576, 30581, + 30590, 30601, 30605, 30608, 30618, 30627, 30635, 30645, 30655, 30663, + 30672, 30679, 30687, 30694, 30703, 30712, 30717, 30721, 30729, 30736, + 30744, 30751, 30762, 30777, 30784, 30790, 30800, 30809, 30815, 30826, + 30830, 30837, 30841, 30847, 15382, 30853, 30857, 30862, 30868, 30875, + 30879, 30883, 30891, 30899, 30905, 30914, 30921, 30926, 30931, 30941, + 25599, 30945, 30948, 30953, 30958, 30963, 30968, 30973, 30978, 30983, + 30988, 30994, 30999, 31004, 31010, 1180, 676, 31015, 31024, 2383, 31031, + 31036, 31040, 31046, 1229, 591, 31051, 296, 31055, 31064, 31072, 31081, + 31089, 31100, 31108, 31117, 31125, 31130, 10895, 31134, 31142, 31150, + 31155, 16217, 3823, 31161, 31167, 31173, 6168, 31178, 31182, 31188, + 31192, 31198, 31203, 31210, 1422, 31216, 31223, 31227, 1329, 6176, 31232, + 31242, 31250, 31256, 31266, 31275, 31283, 31289, 31294, 31302, 31309, + 12246, 31315, 31322, 31327, 31334, 1475, 225, 2158, 31340, 31346, 31353, + 31364, 31375, 31383, 31390, 31400, 31409, 31417, 31426, 31433, 31440, + 31453, 31460, 31466, 31477, 31496, 1234, 31501, 31506, 31514, 3741, + 31518, 31523, 31527, 31531, 1426, 26863, 31541, 31545, 31550, 31554, + 3608, 31560, 31568, 31575, 31586, 31594, 31619, 31627, 31632, 3742, 352, + 31638, 31646, 31654, 31661, 31667, 31672, 2227, 11726, 31679, 31685, + 28293, 28542, 31691, 587, 106, 31695, 31699, 31705, 689, 9931, 31710, + 31717, 31723, 31727, 31731, 1620, 31734, 31738, 16699, 31741, 31746, + 31753, 31759, 31764, 31772, 31779, 31785, 24341, 31789, 31793, 31797, + 3812, 18344, 31801, 31806, 31810, 31813, 31821, 31829, 31834, 31843, + 31851, 31854, 31861, 31871, 31883, 31888, 31892, 31900, 31907, 31913, + 31920, 31927, 31930, 31934, 31938, 1430, 31948, 31950, 31955, 31961, + 31967, 31972, 31977, 31982, 31987, 31992, 31997, 32002, 32007, 32012, + 32017, 32022, 32027, 32032, 32037, 32043, 32049, 32055, 32061, 32066, + 32071, 32076, 32082, 32087, 32092, 32097, 32103, 32108, 32114, 32119, + 32124, 32129, 32134, 32140, 32145, 32151, 32156, 32161, 32166, 32171, + 32177, 32182, 32188, 32193, 32198, 32203, 32208, 32213, 32218, 32223, + 32228, 32233, 32239, 32245, 32251, 32256, 32261, 32266, 32271, 32277, + 32283, 32289, 32295, 32301, 32307, 32312, 32318, 32323, 32328, 32333, + 32338, 32344, 2467, 32349, 2474, 2481, 2782, 32354, 2487, 2497, 32360, + 32364, 32369, 32374, 32380, 32385, 32390, 32394, 32399, 32405, 32410, + 32415, 32420, 32426, 32431, 32435, 32439, 32444, 32449, 32454, 32459, + 32464, 32470, 32476, 32481, 32485, 32490, 32496, 32500, 32505, 32510, + 32515, 32520, 32524, 32527, 32532, 32537, 32542, 32547, 32552, 32558, + 32564, 32569, 32574, 32579, 32583, 32588, 32593, 32598, 32603, 32608, + 32613, 32617, 32622, 32627, 32632, 32636, 32640, 32644, 32649, 32657, + 32662, 32667, 32673, 32679, 32685, 32690, 32694, 32697, 32702, 32707, + 32711, 32716, 32721, 32725, 32730, 32734, 32737, 32742, 3919, 19083, + 32747, 32752, 32757, 32765, 23151, 31220, 9601, 32770, 32775, 32779, + 32784, 32788, 32792, 32797, 32801, 32804, 32807, 32811, 32816, 32820, + 32828, 32832, 32835, 32840, 32844, 32848, 32853, 32858, 32862, 32868, + 32873, 32878, 32885, 32892, 32896, 32899, 32905, 32914, 32921, 32929, + 32936, 32940, 32945, 32949, 32953, 32959, 32965, 32969, 32975, 32980, + 32985, 32989, 32996, 33002, 33008, 33014, 33020, 33027, 33033, 33039, + 33045, 33051, 33057, 33063, 33069, 33076, 33082, 33089, 33095, 33101, + 33107, 33113, 33119, 33125, 33131, 33137, 33143, 12589, 33149, 33155, + 33160, 33165, 33170, 33173, 33179, 33187, 33192, 33196, 33201, 33207, + 33216, 33222, 33227, 33232, 33237, 33241, 33246, 33251, 33256, 33261, + 33266, 33273, 33280, 33286, 33292, 33297, 17980, 33304, 33310, 33317, + 33323, 33329, 33334, 33342, 33347, 10470, 33351, 33356, 33361, 33367, + 33372, 33377, 33381, 33386, 33391, 33397, 33402, 33407, 33412, 33416, + 33421, 33426, 33430, 33435, 33440, 33444, 33449, 33453, 33458, 33463, + 33468, 33472, 33477, 33481, 33485, 16805, 33490, 33499, 33505, 33511, + 33520, 33528, 33537, 33545, 33550, 33554, 33561, 33567, 33575, 33579, + 33582, 33587, 33591, 33600, 33608, 33626, 33632, 1474, 33638, 33641, + 33645, 24447, 24453, 33651, 33655, 33666, 33677, 33688, 33700, 33704, + 33711, 33718, 33725, 33730, 33734, 6224, 963, 23150, 33742, 33747, 33751, + 33756, 33760, 33766, 33771, 33777, 33782, 33788, 33793, 33799, 33804, + 33810, 33816, 33822, 33827, 33783, 33789, 33831, 33836, 33842, 33847, + 33853, 33858, 33864, 33869, 33794, 11412, 33873, 33805, 33811, 33817, + 2874, 3522, 33879, 33882, 33887, 33893, 33899, 33905, 33912, 33918, + 33924, 33930, 33936, 33942, 33948, 33954, 33960, 33966, 33972, 33978, + 33984, 33991, 33997, 34003, 34009, 34015, 34021, 34024, 34029, 34032, + 34039, 34044, 34052, 34057, 34062, 34068, 34073, 34078, 34082, 34087, + 34093, 34098, 34104, 34109, 34115, 34120, 34126, 34132, 34136, 34141, + 34146, 34151, 34156, 34160, 34165, 34170, 34175, 34181, 34187, 34193, + 34199, 34204, 34208, 34211, 34217, 34223, 34232, 34240, 34247, 34252, + 34256, 34260, 34265, 16653, 34270, 34278, 34284, 3865, 1339, 34289, + 34293, 8383, 34299, 34305, 34312, 8392, 34316, 34322, 34329, 34335, + 34344, 34352, 9299, 34364, 34368, 34375, 34381, 34386, 34390, 34394, + 34397, 34407, 34416, 34424, 33784, 34429, 34439, 34449, 34459, 34465, + 34470, 34480, 34485, 34498, 34512, 34523, 34535, 34547, 34561, 34574, + 34586, 34598, 16016, 34612, 34617, 34622, 34626, 34630, 34634, 1776, + 29545, 34638, 34643, 33832, 34648, 34651, 34656, 34661, 34666, 34672, + 34678, 11072, 34683, 34689, 34696, 17266, 34702, 34707, 34712, 34716, + 34721, 34726, 33837, 34731, 34736, 34741, 34747, 33843, 34752, 34755, + 34762, 34770, 34776, 34782, 34788, 34799, 34804, 34811, 34818, 34825, + 34833, 34842, 34851, 34857, 34863, 34871, 33848, 34876, 34882, 34888, + 33854, 34893, 34898, 34906, 34914, 34920, 34927, 34933, 34940, 34947, + 34953, 34961, 34971, 34978, 34984, 34989, 34995, 35000, 35005, 35012, + 35021, 35029, 35034, 35040, 35047, 35055, 35061, 35066, 35072, 35081, + 35088, 30409, 35094, 35098, 35103, 35112, 35117, 35122, 35127, 13658, + 35135, 35140, 35145, 35150, 35154, 35159, 35164, 35171, 35176, 35181, + 35186, 33859, 23087, 35192, 2543, 155, 35195, 35198, 35202, 35206, 35216, + 35224, 35231, 35235, 35238, 35246, 35253, 35260, 35269, 35273, 35276, + 35282, 35286, 35294, 35302, 35306, 35310, 35313, 35319, 35326, 35330, + 35334, 35341, 35349, 33795, 35356, 35364, 35369, 11132, 600, 375, 35381, + 35386, 35391, 35397, 35402, 35407, 3886, 35412, 35415, 35420, 35425, + 35430, 35435, 35440, 35447, 24565, 35452, 35457, 35462, 35467, 35472, + 35478, 35483, 35489, 34035, 35495, 35500, 35506, 35512, 35522, 35527, + 35532, 35536, 35541, 35546, 35551, 35556, 35569, 35574, 24228, 18419, + 3899, 35578, 35584, 35589, 35594, 35600, 35605, 35610, 35614, 35619, + 35624, 35630, 35635, 35640, 1344, 35644, 35649, 35654, 35659, 35663, + 35668, 35673, 35678, 35684, 35690, 35695, 35699, 35703, 35708, 35713, + 35718, 35722, 35730, 35734, 35740, 35744, 35751, 35760, 18203, 33806, + 35766, 35773, 35781, 35788, 35794, 35807, 35819, 35824, 35830, 35834, + 2801, 35838, 35842, 35321, 35851, 35862, 35867, 30472, 35872, 35877, + 35881, 35886, 24458, 35890, 35894, 35899, 33812, 23177, 35903, 35908, + 35914, 35919, 35923, 35927, 35930, 35934, 35940, 35949, 35960, 35972, + 33818, 35977, 35980, 35984, 35988, 414, 35993, 35998, 36003, 36008, + 36013, 36018, 36024, 36029, 36034, 36040, 36045, 36051, 36056, 36062, + 36067, 36072, 36077, 36082, 36087, 36092, 36097, 36102, 36108, 36113, + 36118, 36123, 36128, 36133, 36138, 36143, 36149, 36155, 36160, 36165, + 36170, 36175, 36180, 36185, 36190, 36195, 36200, 36205, 36210, 36215, + 36220, 36225, 36230, 36235, 36240, 36245, 36251, 326, 9, 36256, 36260, + 36264, 36272, 36276, 36280, 36283, 36286, 36288, 36293, 36297, 36302, + 36306, 36311, 36315, 36320, 36324, 36327, 36329, 36333, 36338, 36342, + 36353, 36356, 36358, 36362, 36374, 36383, 36387, 36391, 36397, 36402, + 36411, 36417, 36422, 36427, 36431, 36435, 36440, 36447, 36452, 36458, + 36463, 36467, 36474, 27976, 27986, 36478, 36483, 36488, 36493, 36500, + 36504, 36511, 36517, 8532, 36521, 36530, 36538, 36553, 36567, 36576, + 36584, 36595, 36604, 36609, 36616, 7580, 36626, 36631, 36636, 36640, + 36643, 36648, 36652, 36657, 36661, 36668, 36673, 36678, 36683, 9474, + 36693, 36695, 36698, 36701, 36705, 36711, 36715, 36720, 36725, 36743, + 36757, 36776, 36793, 36802, 36810, 36815, 36820, 1467, 36826, 36832, + 36837, 36847, 36856, 36864, 36869, 36875, 36880, 36889, 36900, 36905, + 36912, 36918, 36922, 36929, 36937, 36944, 36957, 36965, 36969, 36979, + 36984, 36988, 36996, 37004, 37009, 37013, 37017, 37026, 37032, 37037, + 37045, 37055, 37064, 37073, 37082, 37093, 37101, 37112, 37121, 37128, + 37134, 37139, 37150, 37161, 37166, 37170, 37173, 37177, 37185, 37191, + 37202, 37213, 37224, 37235, 37246, 37257, 37268, 37279, 37291, 37303, + 37315, 37327, 37339, 37351, 37363, 37372, 37376, 37384, 37390, 37396, + 37403, 37409, 37414, 37420, 2442, 37424, 37426, 37431, 37436, 37441, + 37444, 37446, 37450, 37453, 37460, 37464, 10762, 37468, 37474, 37484, + 37489, 37495, 37499, 37504, 37517, 28417, 37523, 37532, 37541, 19281, + 37548, 37557, 34445, 37565, 37570, 37574, 37583, 37591, 37598, 37603, + 37607, 37612, 37617, 37625, 37629, 37637, 37643, 37649, 37654, 37659, + 37663, 37666, 37671, 37684, 37700, 25055, 37717, 37729, 37746, 37758, + 37772, 25072, 25091, 37784, 37796, 2708, 37810, 37815, 37820, 37825, + 37829, 37836, 37848, 37855, 37864, 37867, 37878, 37889, 37894, 34868, + 893, 37898, 37902, 37906, 37909, 37914, 37919, 37925, 37930, 37935, + 37941, 37947, 37952, 37956, 37961, 37966, 37971, 37975, 37978, 37984, + 37989, 37994, 37999, 38003, 38008, 38014, 38022, 28669, 38027, 38032, + 38039, 38045, 38051, 38056, 38064, 24574, 38071, 38076, 38081, 38086, + 38090, 38093, 38098, 38102, 38106, 38113, 38119, 38125, 38131, 38138, + 38143, 38149, 36999, 38153, 38157, 38162, 38175, 38180, 38186, 38194, + 38201, 38209, 38219, 38225, 38231, 38237, 38241, 38250, 38258, 38265, + 38270, 38275, 11435, 38280, 38287, 38293, 38303, 38308, 38314, 38322, + 3774, 38329, 38336, 38342, 38349, 3780, 38353, 38358, 38369, 38376, + 38382, 38391, 38395, 4258, 38398, 38405, 38411, 38417, 38425, 38435, + 31662, 38442, 38450, 38456, 38461, 38467, 38472, 38476, 28260, 38482, + 38489, 38495, 38504, 38511, 25791, 38517, 38522, 38526, 38534, 38542, + 10428, 6199, 38549, 38553, 38555, 38559, 38564, 38566, 38571, 38577, + 38582, 38587, 38594, 35443, 38600, 38605, 38609, 38614, 38618, 38627, + 38631, 38637, 38644, 38650, 38657, 38662, 38671, 38676, 38680, 38685, + 38692, 38700, 38708, 38713, 23233, 38717, 38720, 38724, 38728, 11823, + 907, 38732, 38737, 38745, 38749, 38758, 38765, 38769, 38773, 38781, + 38788, 38798, 38802, 38806, 38814, 38822, 38828, 38833, 38842, 14640, + 38848, 38857, 38862, 38869, 38876, 38884, 38891, 38899, 38907, 38912, + 38919, 38926, 38933, 38940, 38947, 38952, 38959, 38965, 38982, 38990, + 39000, 39008, 39015, 422, 39019, 39025, 39029, 39034, 36600, 39040, + 39043, 39047, 39058, 39066, 3785, 39074, 39080, 39086, 39096, 39105, + 39115, 39122, 39128, 39133, 3791, 3797, 39142, 39149, 39157, 39162, + 39166, 39173, 39181, 39188, 39194, 39203, 39213, 39219, 39227, 39236, + 39243, 39251, 39258, 23937, 39262, 39269, 39275, 39285, 39294, 39302, + 39313, 39317, 39327, 39333, 39340, 39348, 39357, 39366, 39376, 39387, + 39394, 39399, 39406, 3077, 39414, 39420, 39425, 39431, 39437, 39442, + 39455, 39468, 39481, 39488, 39494, 39502, 39510, 39515, 39519, 1436, + 39523, 39527, 39531, 39535, 39539, 39543, 39547, 39551, 39555, 39559, + 39563, 39567, 39571, 39575, 39579, 39583, 39587, 39591, 39595, 39599, + 39603, 39607, 39611, 39615, 39619, 39623, 39627, 39631, 39635, 39639, + 39643, 39647, 39651, 39655, 39659, 39663, 39667, 39671, 39675, 39679, + 39683, 39687, 39691, 39695, 39699, 39703, 39707, 39711, 39715, 39719, + 39723, 39727, 39731, 39735, 39739, 39743, 39747, 39751, 39755, 39759, + 39763, 39767, 39771, 39775, 39779, 39783, 39787, 39791, 39795, 39799, + 39803, 39807, 39811, 39815, 39819, 39823, 39827, 39831, 39835, 39839, + 39843, 39847, 39851, 39855, 39859, 39863, 39867, 39871, 39875, 39879, + 39883, 39887, 39891, 39895, 39899, 39903, 39907, 39911, 39915, 39919, + 39923, 39927, 39931, 39935, 39939, 39943, 39947, 39951, 39955, 39959, + 39963, 39967, 39971, 39975, 39979, 39983, 39987, 39991, 39995, 39999, + 40003, 40007, 40011, 40015, 40019, 40023, 40027, 40031, 40035, 40039, + 40043, 40047, 40051, 40055, 40059, 40063, 40067, 40071, 40075, 40079, + 40083, 40087, 40091, 40095, 40099, 40103, 40107, 40111, 40115, 40119, + 40123, 40127, 40131, 40135, 40140, 40144, 40149, 40153, 40158, 40162, + 40167, 40171, 40177, 40182, 40186, 40191, 40195, 40200, 40204, 40209, + 40213, 40218, 40222, 40227, 40231, 40236, 40240, 40246, 40252, 40257, + 40261, 40266, 40270, 40276, 40281, 40285, 40290, 40294, 40299, 40303, + 40309, 40314, 40318, 40323, 40327, 40332, 40336, 40341, 40345, 40351, + 40356, 40360, 40365, 40369, 40375, 40380, 40384, 40389, 40393, 40398, + 40402, 40407, 40411, 40416, 40420, 40426, 40431, 40435, 40441, 40446, + 40450, 40456, 40461, 40465, 40470, 40474, 40479, 40483, 40489, 40495, + 40501, 40507, 40513, 40519, 40525, 40531, 40536, 40540, 40545, 40549, + 40555, 40560, 40564, 40569, 40573, 40578, 40582, 40587, 40591, 40596, + 40600, 40605, 40609, 40614, 40618, 40624, 40629, 40633, 40638, 40642, + 40648, 40654, 40659, 122, 63, 40663, 40665, 40669, 40673, 40677, 40682, + 40686, 40690, 40695, 10341, 40700, 40706, 1737, 6621, 40712, 40715, + 40720, 40724, 40729, 40733, 40737, 40742, 11219, 40746, 40750, 40754, + 540, 40758, 16914, 40763, 40767, 40772, 40777, 40782, 40786, 40793, + 28441, 40799, 40802, 40806, 40811, 40817, 40821, 40824, 40832, 40838, + 40843, 40847, 40850, 40854, 40860, 40864, 40868, 3573, 3578, 31886, + 40871, 40875, 40879, 40883, 40887, 40895, 40902, 40906, 14590, 40913, + 40918, 40932, 40939, 40950, 341, 40955, 40959, 40965, 40977, 40983, + 40989, 40993, 31923, 41002, 41008, 41017, 41021, 41025, 41030, 41036, + 41041, 41045, 41050, 41054, 41058, 41065, 41071, 41076, 41087, 41102, + 41117, 41132, 41148, 41166, 11169, 41180, 41187, 41191, 41194, 41203, + 41208, 41212, 41220, 17469, 41228, 41232, 41242, 41253, 31856, 41266, + 41270, 41279, 41297, 41316, 41324, 10623, 11332, 41328, 24470, 41331, + 32824, 41336, 10622, 41341, 41347, 41352, 41358, 41363, 41369, 41374, + 41380, 41385, 41391, 41397, 41403, 41408, 41364, 41370, 41375, 41381, + 41386, 41392, 41398, 8545, 4103, 41412, 41420, 41424, 41427, 41434, + 41438, 41443, 41448, 41455, 41461, 41467, 41472, 16297, 41476, 28277, + 41480, 41484, 41488, 41494, 41498, 30349, 41507, 9634, 41511, 10027, + 41514, 41521, 41527, 41531, 13114, 41538, 41544, 41549, 41556, 41563, + 41570, 31076, 8442, 41577, 41584, 41591, 41597, 41602, 41609, 41620, + 41626, 41631, 41636, 41641, 41645, 41650, 41657, 41365, 41661, 41671, + 41680, 41691, 41697, 41705, 41712, 41717, 41722, 41727, 41732, 41737, + 41741, 41745, 41752, 41758, 41766, 2338, 1086, 11235, 11247, 11252, + 11258, 41775, 11263, 11268, 11274, 41780, 41790, 41794, 11279, 41799, + 18617, 41802, 41807, 41811, 37859, 41822, 41827, 41834, 41841, 41845, + 41848, 41856, 11182, 41863, 41866, 41872, 41882, 6251, 41891, 41897, + 41901, 41909, 41913, 41923, 41929, 41934, 41945, 41954, 41963, 41972, + 41981, 41990, 41999, 42008, 42014, 42020, 42025, 42031, 42037, 42043, + 42048, 42051, 42058, 42064, 42068, 42073, 42080, 42087, 42091, 42094, + 42104, 42117, 42126, 42135, 42146, 42159, 42171, 42182, 42191, 42202, + 42207, 42216, 42221, 11284, 42227, 42234, 42242, 42247, 42251, 42258, + 42265, 4046, 25, 42269, 42274, 18466, 42278, 42281, 42284, 30529, 42288, + 31085, 42296, 42300, 42304, 42307, 42313, 42319, 42324, 33883, 42333, + 42341, 42347, 42354, 30512, 42358, 30732, 42362, 42371, 42375, 42383, + 42389, 42395, 42400, 42404, 31104, 42410, 42413, 42421, 42429, 4399, + 42435, 42439, 42444, 42451, 42457, 42462, 42467, 42471, 42477, 42482, + 42488, 4311, 848, 42495, 42499, 42502, 16787, 42514, 42522, 42530, 42538, + 42546, 42553, 42561, 42569, 42576, 42584, 42592, 42600, 42608, 42616, + 42624, 42632, 42640, 42648, 42656, 42664, 42671, 42679, 42687, 42695, + 42703, 42711, 42719, 42727, 42735, 42743, 42751, 42759, 42767, 42775, + 42783, 42791, 42799, 42807, 42815, 42823, 42830, 42838, 42845, 42853, + 42861, 42869, 42877, 42885, 42893, 42901, 42909, 42920, 23973, 42925, + 42928, 42935, 42939, 42945, 42949, 42955, 42960, 42966, 42971, 42976, + 42980, 42984, 42989, 42994, 43004, 43010, 43023, 43029, 43035, 43041, + 43048, 43053, 43059, 43064, 18362, 856, 43069, 43072, 43075, 43078, + 33967, 33973, 43081, 33979, 33992, 33998, 34004, 43087, 34010, 34016, + 43093, 43099, 18, 43107, 43114, 43118, 43122, 43130, 34757, 43134, 43138, + 43145, 43150, 43154, 43159, 43165, 43170, 43176, 43181, 43185, 43189, + 43193, 43198, 43202, 43207, 43211, 43215, 43222, 43227, 43231, 43235, + 43240, 43244, 43249, 43253, 43257, 43262, 43268, 17060, 17065, 43273, + 43277, 43280, 43284, 43288, 23044, 43293, 43297, 43303, 43310, 43316, + 43321, 43331, 43336, 43344, 43348, 43351, 34772, 43355, 4376, 43360, + 43365, 43369, 43374, 43378, 43383, 14658, 43394, 43398, 43401, 43405, + 43410, 43414, 43419, 43424, 43428, 43432, 43436, 43439, 43443, 8564, + 14674, 43446, 43449, 43455, 43460, 43466, 43471, 43477, 43482, 43488, + 43493, 43499, 43505, 43511, 43516, 43520, 43524, 43533, 43549, 43565, + 43575, 30419, 43582, 43586, 43591, 43596, 43600, 43604, 39361, 43610, + 43615, 43619, 43626, 43631, 43636, 43640, 43644, 43650, 29348, 43654, + 23340, 43659, 43666, 43674, 43680, 43687, 43695, 43701, 43705, 43710, + 43716, 43724, 43729, 43733, 43742, 10322, 43750, 43754, 43762, 43769, + 43774, 43779, 43784, 43788, 43791, 43795, 43798, 43802, 43809, 43814, + 43818, 43824, 28747, 34030, 43828, 43837, 43845, 43851, 43858, 43864, + 43870, 43875, 43878, 43880, 43887, 43894, 43900, 43904, 43907, 43911, + 43915, 43919, 43924, 43928, 43932, 43935, 43939, 43953, 25121, 43972, + 43985, 43998, 44011, 25139, 44026, 11520, 44041, 44047, 44051, 44061, + 44065, 44069, 44073, 44080, 44085, 44089, 44096, 44102, 44107, 44113, + 44123, 44135, 44146, 44151, 44158, 44162, 44166, 44169, 17490, 3854, + 44177, 17087, 44190, 44197, 44204, 44208, 44212, 44217, 44223, 44228, + 44234, 44238, 44242, 44245, 44250, 44254, 44259, 8106, 1012, 44264, + 44268, 44274, 44283, 44288, 44297, 44304, 39209, 44310, 44315, 44319, + 44324, 44331, 44337, 44341, 44344, 44348, 44353, 15981, 44360, 44367, + 44371, 44374, 44379, 44384, 44390, 44395, 44400, 44404, 44409, 44419, + 44424, 44430, 44435, 44441, 44446, 44452, 44462, 44467, 44472, 44476, + 44481, 7582, 7594, 44486, 44489, 44496, 44502, 44511, 9560, 37131, 44519, + 44523, 44527, 34820, 44535, 44546, 44554, 39409, 44561, 44566, 44571, + 44582, 44589, 44600, 34844, 23351, 44608, 934, 44613, 15030, 44619, + 30503, 44625, 44630, 44640, 44649, 44656, 44662, 44666, 44669, 44676, + 44682, 44689, 44695, 44705, 44713, 44719, 44725, 44730, 44734, 44741, + 44746, 44752, 44759, 44765, 43920, 44770, 44774, 571, 15146, 44780, + 44785, 44788, 44794, 44802, 1361, 44807, 44811, 44816, 44821, 44826, + 44833, 44837, 44842, 44848, 44852, 34040, 44857, 44862, 44871, 44878, + 44888, 44894, 30547, 44911, 44920, 44928, 44934, 44939, 44946, 44952, + 44960, 44969, 44977, 44981, 44986, 44994, 31556, 34853, 45000, 45019, + 17393, 45033, 45049, 45063, 45069, 45074, 45079, 45084, 45090, 34859, + 45095, 45098, 45105, 45112, 45117, 45121, 412, 2984, 45128, 45133, 45138, + 29717, 44949, 45142, 45147, 45155, 45159, 45162, 45167, 45173, 45179, + 45184, 45188, 30614, 45191, 45196, 45200, 45203, 45208, 45212, 45217, + 45222, 45226, 45231, 45235, 45239, 45243, 23040, 23051, 45248, 45253, + 45259, 45264, 45270, 29305, 45275, 45279, 23137, 17696, 45282, 45287, + 45292, 45297, 45302, 45307, 45312, 45317, 465, 68, 34053, 34058, 34063, + 34069, 34074, 34079, 45322, 34083, 45326, 45330, 45334, 34088, 34094, + 45348, 34105, 34110, 45356, 45361, 34116, 45366, 45371, 45376, 45381, + 45390, 45396, 45402, 45408, 34133, 45421, 45430, 45436, 34137, 45440, + 34142, 45445, 34147, 34152, 45448, 45453, 45457, 45463, 33681, 45470, + 14904, 45477, 45482, 34157, 45486, 45491, 45496, 45501, 45505, 45510, + 45515, 45521, 45526, 45531, 45537, 45543, 45548, 45552, 45557, 45562, + 45567, 45571, 45576, 45581, 45586, 45592, 45598, 45604, 45609, 45613, + 45618, 45622, 34161, 34166, 34171, 45626, 45630, 45635, 45639, 34176, + 34182, 34188, 34200, 45651, 28314, 45655, 45660, 45664, 45669, 45676, + 45681, 45686, 45691, 45695, 45699, 45709, 45714, 45719, 45723, 45727, + 45730, 45738, 34248, 45743, 1446, 45749, 45754, 45760, 45768, 45772, + 45781, 45789, 45793, 45797, 45805, 45811, 45819, 45835, 45839, 45843, + 45847, 45852, 45858, 45873, 34285, 1745, 13308, 45877, 1340, 1355, 45889, + 45897, 45904, 45909, 45916, 45921, 10012, 1096, 2529, 11311, 45928, 9910, + 45933, 45936, 45945, 1248, 45950, 44086, 45957, 45966, 45971, 45975, + 45983, 24526, 2581, 45990, 11776, 46000, 46006, 2356, 2366, 46015, 46024, + 46034, 46045, 3365, 37485, 46050, 11375, 4024, 18400, 1253, 46054, 46062, + 46069, 46074, 46078, 46082, 26018, 44355, 11402, 46090, 46099, 46108, + 46116, 46123, 46134, 46139, 46152, 46165, 46177, 46189, 46201, 46212, + 46225, 46236, 46247, 46257, 46265, 46273, 46285, 46297, 46308, 46317, + 46325, 46332, 46344, 46351, 46357, 46366, 46373, 46386, 46391, 46401, + 46406, 46412, 46417, 41528, 46421, 46428, 46432, 46439, 46447, 46454, + 2542, 46461, 46472, 46482, 46491, 46499, 46509, 46517, 46526, 46536, + 46545, 46550, 46556, 46562, 3898, 46573, 46583, 46592, 46601, 46609, + 46619, 46627, 46636, 46641, 46646, 46651, 1675, 47, 46659, 46667, 46678, + 46689, 18039, 46699, 46703, 46710, 46716, 46721, 46725, 46736, 46746, + 46755, 46766, 18439, 18444, 46771, 46780, 46785, 46795, 46800, 46808, + 46816, 46823, 46829, 1637, 283, 46833, 46839, 46844, 46847, 2128, 44209, + 46855, 46859, 46862, 1491, 46868, 15331, 1258, 46873, 46886, 46900, 2671, + 46918, 46930, 46942, 2685, 2702, 46956, 46969, 2717, 46983, 46995, 2732, + 47009, 1264, 1270, 1276, 11682, 47014, 47019, 47024, 47028, 47043, 47058, + 47073, 47088, 47103, 47118, 47133, 47148, 47163, 47178, 47193, 47208, + 47223, 47238, 47253, 47268, 47283, 47298, 47313, 47328, 47343, 47358, + 47373, 47388, 47403, 47418, 47433, 47448, 47463, 47478, 47493, 47508, + 47523, 47538, 47553, 47568, 47583, 47598, 47613, 47628, 47643, 47658, + 47673, 47688, 47703, 47718, 47733, 47748, 47763, 47778, 47793, 47808, + 47823, 47838, 47853, 47868, 47883, 47898, 47913, 47928, 47943, 47958, + 47973, 47988, 48003, 48018, 48033, 48048, 48063, 48078, 48093, 48108, + 48123, 48138, 48153, 48168, 48183, 48198, 48213, 48228, 48243, 48258, + 48273, 48288, 48303, 48318, 48333, 48348, 48363, 48378, 48393, 48408, + 48423, 48438, 48453, 48468, 48483, 48498, 48513, 48528, 48543, 48558, + 48573, 48588, 48603, 48618, 48633, 48648, 48663, 48678, 48693, 48708, + 48723, 48738, 48753, 48768, 48783, 48798, 48813, 48828, 48843, 48858, + 48873, 48888, 48903, 48918, 48933, 48948, 48963, 48978, 48993, 49008, + 49023, 49038, 49053, 49068, 49083, 49098, 49113, 49128, 49143, 49158, + 49173, 49188, 49203, 49218, 49233, 49248, 49263, 49278, 49293, 49308, + 49323, 49338, 49353, 49368, 49383, 49398, 49413, 49428, 49443, 49458, + 49473, 49488, 49503, 49518, 49533, 49548, 49563, 49578, 49593, 49608, + 49623, 49638, 49653, 49668, 49683, 49698, 49713, 49728, 49743, 49758, + 49773, 49788, 49803, 49818, 49833, 49848, 49863, 49878, 49893, 49908, + 49923, 49938, 49953, 49968, 49983, 49998, 50013, 50028, 50043, 50058, + 50073, 50088, 50103, 50118, 50133, 50148, 50163, 50178, 50193, 50208, + 50223, 50238, 50253, 50268, 50283, 50298, 50313, 50328, 50343, 50358, + 50373, 50388, 50403, 50418, 50433, 50448, 50463, 50478, 50493, 50508, + 50523, 50538, 50553, 50568, 50583, 50598, 50613, 50628, 50643, 50658, + 50673, 50688, 50703, 50718, 50733, 50748, 50763, 50778, 50793, 50808, + 50823, 50838, 50853, 50868, 50883, 50898, 50913, 50928, 50943, 50958, + 50973, 50988, 51003, 51018, 51033, 51048, 51063, 51078, 51093, 51108, + 51123, 51138, 51153, 51168, 51183, 51198, 51213, 51228, 51243, 51258, + 51273, 51288, 51303, 51318, 51333, 51348, 51363, 51378, 51393, 51408, + 51423, 51438, 51453, 51468, 51483, 51498, 51513, 51528, 51543, 51558, + 51573, 51588, 51603, 51618, 51633, 51648, 51663, 51678, 51693, 51708, + 51723, 51738, 51753, 51768, 51783, 51798, 51813, 51828, 51843, 51858, + 51873, 51888, 51903, 51918, 51933, 51948, 51963, 51978, 51993, 52008, + 52023, 52038, 52053, 52068, 52083, 52098, 52113, 52128, 52143, 52158, + 52173, 52188, 52203, 52218, 52233, 52248, 52263, 52278, 52293, 52308, + 52323, 52338, 52353, 52368, 52383, 52398, 52413, 52428, 52443, 52458, + 52473, 52488, 52503, 52518, 52533, 52548, 52563, 52578, 52593, 52608, + 52623, 52638, 52653, 52668, 52683, 52698, 52713, 52728, 52743, 52758, + 52773, 52788, 52803, 52818, 52833, 52848, 52863, 52878, 52893, 52908, + 52923, 52938, 52953, 52968, 52983, 52998, 53013, 53028, 53043, 53058, + 53073, 53088, 53103, 53118, 53133, 53148, 53163, 53178, 53193, 53208, + 53223, 53238, 53253, 53268, 53283, 53298, 53313, 53328, 53343, 53358, + 53373, 53388, 53403, 53418, 53433, 53448, 53463, 53478, 53493, 53508, + 53523, 53538, 53553, 53568, 53583, 53598, 53613, 53628, 53643, 53658, + 53673, 53688, 53703, 53718, 53733, 53748, 53763, 53778, 53793, 53808, + 53823, 53838, 53853, 53868, 53883, 53898, 53913, 53928, 53943, 53958, + 53973, 53988, 54003, 54018, 54033, 54048, 54063, 54078, 54093, 54108, + 54123, 54138, 54153, 54168, 54183, 54198, 54213, 54228, 54243, 54258, + 54273, 54288, 54303, 54318, 54333, 54348, 54363, 54378, 54393, 54408, + 54423, 54438, 54453, 54468, 54483, 54498, 54513, 54528, 54543, 54558, + 54573, 54588, 54603, 54618, 54633, 54648, 54663, 54678, 54693, 54708, + 54723, 54738, 54753, 54768, 54783, 54798, 54813, 54828, 54843, 54859, + 54875, 54891, 54907, 54923, 54939, 54955, 54971, 54987, 55003, 55019, + 55035, 55051, 55067, 55083, 55099, 55115, 55131, 55147, 55163, 55179, + 55195, 55211, 55227, 55243, 55259, 55275, 55291, 55307, 55323, 55339, + 55355, 55371, 55387, 55403, 55419, 55435, 55451, 55467, 55483, 55499, + 55515, 55531, 55547, 55563, 55579, 55595, 55611, 55627, 55643, 55659, + 55675, 55691, 55707, 55723, 55739, 55755, 55771, 55787, 55803, 55819, + 55835, 55851, 55867, 55883, 55899, 55915, 55931, 55947, 55963, 55979, + 55995, 56011, 56027, 56043, 56059, 56075, 56091, 56107, 56123, 56139, + 56155, 56171, 56187, 56203, 56219, 56235, 56251, 56267, 56283, 56299, + 56315, 56331, 56347, 56363, 56379, 56395, 56411, 56427, 56443, 56459, + 56475, 56491, 56507, 56523, 56539, 56555, 56571, 56587, 56603, 56619, + 56635, 56651, 56667, 56683, 56699, 56715, 56731, 56747, 56763, 56779, + 56795, 56811, 56827, 56843, 56859, 56875, 56891, 56907, 56923, 56939, + 56955, 56971, 56987, 57003, 57019, 57035, 57051, 57067, 57083, 57099, + 57115, 57131, 57147, 57163, 57179, 57195, 57211, 57227, 57243, 57259, + 57275, 57291, 57307, 57323, 57339, 57355, 57371, 57387, 57403, 57419, + 57435, 57451, 57467, 57483, 57499, 57515, 57531, 57547, 57563, 57579, + 57595, 57611, 57627, 57643, 57659, 57675, 57691, 57707, 57723, 57739, + 57755, 57771, 57787, 57803, 57819, 57835, 57851, 57867, 57883, 57899, + 57915, 57931, 57947, 57963, 57979, 57995, 58011, 58027, 58043, 58059, + 58075, 58091, 58107, 58123, 58139, 58155, 58171, 58187, 58203, 58219, + 58235, 58251, 58267, 58283, 58299, 58315, 58331, 58347, 58363, 58379, + 58395, 58411, 58427, 58443, 58459, 58475, 58491, 58507, 58523, 58539, + 58555, 58571, 58587, 58603, 58619, 58635, 58651, 58667, 58683, 58699, + 58715, 58731, 58747, 58763, 58779, 58795, 58811, 58827, 58843, 58859, + 58875, 58891, 58907, 58923, 58939, 58955, 58971, 58987, 59003, 59019, + 59035, 59051, 59067, 59083, 59099, 59115, 59131, 59147, 59163, 59179, + 59195, 59211, 59227, 59243, 59259, 59275, 59291, 59307, 59323, 59339, + 59355, 59371, 59387, 59403, 59419, 59435, 59451, 59467, 59483, 59499, + 59515, 59531, 59547, 59563, 59579, 59595, 59611, 59627, 59643, 59659, + 59675, 59691, 59707, 59723, 59739, 59755, 59771, 59787, 59803, 59819, + 59835, 59851, 59867, 59883, 59899, 59915, 59931, 59947, 59963, 59979, + 59995, 60011, 60027, 60043, 60059, 60075, 60091, 60107, 60123, 60139, + 60155, 60171, 60187, 60203, 60219, 60235, 60251, 60267, 60283, 60299, + 60315, 60331, 60347, 60363, 60379, 60395, 60411, 60427, 60443, 60459, + 60475, 60491, 60507, 60523, 60539, 60555, 60571, 60587, 60603, 60619, + 60635, 60651, 60667, 60683, 60699, 60715, 60731, 60747, 60763, 60779, + 60795, 60811, 60827, 60843, 60859, 60875, 60891, 60907, 60923, 60939, + 60955, 60971, 60987, 61003, 61019, 61035, 61051, 61067, 61083, 61099, + 61115, 61131, 61147, 61163, 61179, 61195, 61211, 61227, 61243, 61259, + 61275, 61291, 61307, 61323, 61339, 61355, 61371, 61387, 61403, 61419, + 61435, 61451, 61467, 61483, 61499, 61515, 61531, 61547, 61563, 61579, + 61595, 61611, 61627, 61643, 61659, 61675, 61691, 61707, 61723, 61739, + 61755, 61771, 61787, 61803, 61819, 61835, 61851, 61867, 61883, 61899, + 61915, 61931, 61947, 61963, 61979, 61995, 62011, 62027, 62043, 62059, + 62075, 62091, 62107, 62123, 62139, 62155, 62171, 62187, 62203, 62219, + 62235, 62251, 62267, 62283, 62299, 62315, 62331, 62347, 62363, 62379, + 62395, 62411, 62427, 62443, 62459, 62475, 62491, 62507, 62523, 62539, + 62555, 62571, 62587, 62603, 62619, 62635, 62651, 62667, 62683, 62699, + 62715, 62731, 62747, 62763, 62779, 62795, 62811, 62827, 62843, 62859, + 62875, 62891, 62907, 62923, 62939, 62955, 62971, 62987, 63003, 63019, + 63035, 63051, 63067, 63083, 63099, 63115, 63131, 63147, 63163, 63179, + 63195, 63211, 63227, 63243, 63259, 63275, 63291, 63307, 63323, 63339, + 63355, 63371, 63387, 63403, 63419, 63435, 63451, 63467, 63483, 63499, + 63515, 63530, 16152, 63539, 63544, 63550, 63556, 63566, 63574, 16393, + 16999, 10831, 63587, 1499, 1503, 63595, 3978, 29832, 7536, 63601, 63606, + 63611, 63616, 63621, 63627, 63632, 63638, 63643, 63649, 63654, 63659, + 63664, 63669, 63675, 63680, 63685, 63690, 63695, 63700, 63705, 63710, + 63716, 63721, 63727, 63734, 2585, 63739, 63745, 8957, 63749, 63754, + 63761, 63769, 65, 63773, 63779, 63784, 63789, 63793, 63798, 63802, 63806, + 11719, 63810, 63820, 63833, 63844, 63857, 63864, 63870, 11236, 63878, + 63883, 63889, 63895, 63901, 63906, 63911, 63916, 63921, 63925, 63930, + 63935, 63940, 63946, 63952, 63958, 63963, 63967, 63972, 63977, 63981, + 63986, 63991, 63996, 64000, 11735, 11746, 11751, 1542, 64004, 64010, + 1547, 17890, 64015, 17899, 64020, 64026, 64031, 1578, 64037, 1584, 1590, + 11781, 64042, 64051, 64059, 64067, 64074, 64078, 64082, 64088, 64093, + 33721, 64098, 64105, 64112, 64117, 64121, 64125, 64134, 1595, 18008, + 64139, 64143, 18019, 1126, 64147, 64154, 64159, 64163, 18055, 1599, + 41685, 64166, 64171, 64181, 64190, 64195, 64199, 64205, 1604, 44316, + 64210, 64219, 64225, 64230, 64235, 11992, 11998, 64241, 64253, 64270, + 64287, 64304, 64321, 64338, 64355, 64372, 64389, 64406, 64423, 64440, + 64457, 64474, 64491, 64508, 64525, 64542, 64559, 64576, 64593, 64610, + 64627, 64644, 64661, 64678, 64695, 64712, 64729, 64746, 64763, 64780, + 64797, 64814, 64831, 64848, 64865, 64882, 64899, 64916, 64933, 64950, + 64967, 64984, 65001, 65018, 65035, 65052, 65069, 65086, 65097, 65107, + 65112, 1609, 65116, 65121, 65127, 65132, 65137, 65144, 9929, 1614, 65150, + 65159, 30161, 65164, 65175, 12009, 65185, 65190, 65196, 65201, 65208, + 65214, 65219, 1619, 18338, 65224, 65230, 12019, 1624, 12024, 65236, + 65241, 65247, 65252, 65257, 65262, 65267, 65272, 65277, 65282, 65287, + 65293, 65299, 65305, 65310, 65314, 65319, 65324, 65328, 65333, 65338, + 65343, 65348, 65352, 65357, 65363, 65368, 65373, 65377, 65382, 65387, + 65393, 65398, 65403, 65409, 65415, 65420, 65424, 65429, 65434, 65439, + 65443, 65448, 65453, 65458, 65464, 65470, 65475, 65479, 65483, 65488, + 65493, 65498, 31735, 65502, 65507, 65512, 65518, 65523, 65528, 65532, + 65537, 65542, 65548, 65553, 65558, 65564, 65570, 65575, 65579, 65584, + 65589, 65593, 65598, 65603, 65608, 65614, 65620, 65625, 65629, 65634, + 65639, 65643, 65648, 65653, 65658, 65663, 65667, 65670, 65673, 65678, + 65683, 34412, 65690, 65698, 3690, 30111, 65704, 65711, 65717, 3829, + 12130, 65723, 65733, 65748, 65756, 12135, 65767, 65772, 65783, 65795, + 65807, 65819, 2723, 65831, 65836, 65848, 65852, 65858, 65864, 65869, + 65878, 1641, 17565, 65885, 65890, 44375, 65894, 65898, 65903, 65907, + 18479, 65912, 65915, 65920, 65928, 65936, 1645, 12171, 12177, 1650, + 65944, 65951, 65956, 65965, 65975, 65982, 65987, 65992, 1655, 65999, + 66004, 18599, 66008, 66013, 66020, 66026, 66030, 66041, 66051, 66058, + 18621, 9823, 9830, 4027, 4033, 66065, 1660, 66070, 66076, 66084, 66091, + 66097, 66104, 66116, 66122, 66127, 66139, 66150, 66159, 66169, 3957, + 66177, 33515, 33524, 18661, 1665, 1669, 66190, 66194, 66197, 66208, + 66213, 1679, 66221, 66226, 66231, 18720, 66243, 66246, 66252, 66258, + 66263, 66271, 1684, 66276, 66281, 66289, 66297, 66304, 66313, 66321, + 66330, 1689, 66334, 1694, 23208, 66339, 66346, 18800, 66354, 66364, + 66370, 66375, 66383, 66390, 66399, 66407, 66417, 66426, 66436, 66445, + 66456, 66466, 66476, 66485, 66495, 66509, 66522, 66531, 66539, 66549, + 66558, 66570, 66581, 66592, 66602, 18112, 66607, 12323, 66616, 66622, + 66627, 66634, 66641, 66647, 17771, 66657, 66663, 66668, 66679, 66684, + 66692, 12340, 12345, 66700, 66706, 66710, 66718, 4022, 18869, 44468, + 66723, 66729, 66734, 66742, 66749, 13289, 66754, 66760, 1705, 66765, + 66768, 1419, 66774, 66779, 66784, 66790, 66795, 66800, 66805, 66810, + 66815, 66820, 1714, 13, 66826, 66830, 66835, 66839, 66843, 66847, 34652, + 66852, 25296, 66857, 66862, 66866, 66869, 66873, 66877, 66882, 66886, + 66891, 66895, 66901, 37910, 37915, 37920, 66904, 66911, 66917, 66925, + 44139, 66935, 37926, 34916, 34667, 34673, 37942, 34679, 66940, 66945, + 34949, 66949, 66952, 66956, 66964, 66971, 66974, 66979, 66984, 66988, + 66992, 66995, 67005, 67017, 67024, 67030, 34684, 67037, 36443, 67040, + 8974, 1052, 67043, 67047, 67052, 3872, 67056, 67059, 14937, 67066, 67073, + 67086, 67094, 67103, 67112, 67117, 67127, 67140, 67152, 67159, 67164, + 67173, 67186, 39449, 67204, 67209, 67216, 67222, 67227, 835, 67232, + 67240, 67247, 67254, 29658, 803, 67260, 67266, 67276, 67284, 67290, + 67295, 34703, 6334, 34717, 67299, 67309, 67314, 67322, 67332, 67347, + 67353, 67359, 34727, 67364, 33838, 67368, 67373, 67380, 67385, 67389, + 67394, 18664, 67401, 67406, 67410, 6375, 34753, 67414, 67420, 325, 67430, + 67437, 67443, 67450, 67455, 67464, 14573, 64175, 64185, 67470, 67478, + 67482, 67486, 67490, 67494, 67499, 67503, 67509, 67517, 67522, 67527, + 67532, 67536, 67541, 67545, 67549, 67555, 67561, 67566, 67570, 67575, + 34877, 67579, 34883, 34889, 67584, 67590, 67597, 67602, 67606, 33855, + 18331, 67609, 67613, 67618, 67625, 67631, 67635, 67640, 43804, 67646, + 67650, 67657, 67661, 67666, 67672, 67678, 67684, 67696, 67705, 67715, + 67721, 67728, 67733, 67738, 67742, 67745, 67751, 67758, 67763, 67768, + 67775, 67782, 67789, 67795, 67800, 67805, 67813, 34894, 2447, 67818, + 67823, 67829, 67834, 67840, 67845, 67850, 67855, 67861, 34915, 67866, + 67872, 67878, 67884, 34985, 67889, 67894, 67899, 34996, 67904, 67909, + 67914, 67920, 67926, 35001, 67931, 67936, 67941, 35056, 35062, 67946, + 67951, 35067, 35089, 30410, 35095, 35099, 67956, 13019, 67960, 67968, + 67974, 67982, 67989, 67995, 68005, 68011, 68018, 11654, 35113, 68024, + 68037, 68046, 68052, 68061, 68067, 25606, 68074, 68081, 68091, 68099, + 68102, 35057, 68107, 68114, 68119, 68123, 68127, 68132, 68136, 4147, + 68141, 68146, 68151, 38004, 38009, 68155, 38023, 68160, 38028, 68165, + 68171, 38040, 38046, 38052, 68176, 68182, 24575, 68193, 68196, 68208, + 68216, 35136, 68220, 68229, 68239, 68248, 35146, 68253, 68260, 68269, + 68275, 68283, 68290, 6426, 4693, 68295, 35068, 68301, 68304, 68310, + 68317, 68322, 68327, 25516, 68331, 68337, 68343, 68348, 68353, 68357, + 68363, 68369, 36349, 1084, 39099, 40834, 40840, 35177, 35182, 68374, + 68378, 68382, 68385, 68398, 68404, 68408, 68411, 68416, 36686, 68420, + 33860, 23158, 68426, 6355, 6363, 9660, 68429, 68434, 68439, 68444, 68449, + 68454, 68459, 68464, 68469, 68474, 68480, 68485, 68490, 68496, 68501, + 68506, 68511, 68516, 68521, 68526, 68532, 68537, 68543, 68548, 68553, + 68558, 68563, 68568, 68573, 68578, 68583, 68588, 68593, 68599, 68604, + 68609, 68614, 68619, 68624, 68629, 68635, 68640, 68645, 68650, 68655, + 68660, 68665, 68670, 68675, 68680, 68686, 68691, 68696, 68701, 68706, + 68712, 68718, 68723, 68729, 68734, 68739, 68744, 68749, 68754, 1492, 156, + 68759, 68763, 68767, 68771, 27306, 68775, 68779, 68784, 68788, 68793, + 68797, 68802, 68807, 68812, 68816, 68820, 68825, 68829, 14652, 68834, + 68838, 68845, 68855, 16718, 68864, 68873, 68877, 68882, 68887, 68891, + 68895, 27100, 3067, 68899, 68905, 19144, 68909, 68918, 68926, 68932, + 68937, 68949, 68961, 68966, 68970, 68975, 68979, 68985, 68991, 68996, + 69006, 69016, 69022, 69027, 69031, 69037, 69042, 69049, 69055, 69060, + 69069, 69078, 69086, 69090, 17129, 69093, 69102, 69110, 69122, 69133, + 69144, 69153, 69157, 69166, 69174, 69184, 69192, 69199, 69205, 69210, + 69219, 69225, 69230, 69241, 60, 33658, 69247, 28586, 28596, 69253, 69261, + 69268, 69274, 69278, 69288, 69299, 69307, 69316, 69321, 69326, 69331, + 69335, 69339, 19098, 69347, 69351, 69357, 69367, 69374, 69380, 69386, + 38103, 69390, 69392, 69395, 69401, 69405, 69416, 69426, 69432, 69439, + 69446, 14589, 69454, 69460, 69469, 69478, 69484, 10713, 69490, 69496, + 69501, 69506, 69513, 69518, 69525, 69531, 69536, 69544, 69557, 69566, + 69575, 66471, 66481, 69585, 69591, 69597, 69604, 69611, 69618, 69625, + 69632, 69637, 69641, 69645, 69648, 69658, 69662, 69674, 69683, 69687, + 69698, 69703, 69707, 66490, 69713, 69720, 69729, 69737, 69745, 69750, + 69754, 69759, 69764, 69774, 69782, 69787, 69791, 69795, 69801, 69809, + 69816, 69828, 69836, 69847, 69854, 69860, 69870, 69876, 69880, 69889, + 69898, 69905, 69911, 69916, 69920, 69924, 69928, 69937, 69946, 69955, + 69961, 69967, 69973, 69978, 69985, 69991, 69999, 70006, 70012, 13732, + 70017, 70023, 70027, 15646, 70031, 70036, 70046, 70055, 70061, 70067, + 70075, 70082, 70086, 70090, 70097, 70103, 70111, 70118, 70124, 70135, + 70139, 70143, 70147, 70150, 70156, 70161, 70166, 70170, 70174, 70183, + 70191, 70198, 70204, 70211, 26189, 43873, 70216, 70224, 70228, 70232, + 70235, 70243, 70250, 70256, 70265, 70273, 70279, 70284, 70288, 70293, + 70298, 70302, 70306, 70310, 70315, 70324, 70328, 70335, 40943, 70339, + 70345, 70349, 70357, 70363, 70368, 70379, 70387, 70393, 70402, 24722, + 70410, 70417, 70424, 70431, 70438, 70445, 47203, 14427, 70452, 70459, + 70464, 38139, 4359, 70470, 70475, 70480, 70486, 70492, 70498, 70503, + 70508, 70513, 70518, 70524, 70529, 70535, 70540, 70546, 70551, 70556, + 70561, 70566, 70571, 70576, 70581, 70587, 70592, 70598, 70603, 70608, + 70613, 70618, 70623, 70628, 70634, 70639, 70644, 70649, 70654, 70659, + 70664, 70669, 70674, 70679, 70684, 70690, 70695, 70700, 70705, 70710, + 70715, 70720, 70725, 70730, 70736, 70741, 70746, 70751, 70756, 70761, + 70766, 70771, 70776, 70781, 70786, 70791, 70796, 70802, 1839, 272, 70807, + 41803, 70811, 70814, 70819, 70823, 70826, 3404, 70831, 70836, 70840, + 70849, 70860, 70877, 70895, 69741, 70903, 70906, 70916, 70923, 70932, + 70948, 70957, 70967, 70972, 70982, 70991, 70999, 71013, 71021, 71025, + 71028, 71035, 71041, 71052, 71059, 71071, 71082, 71093, 71102, 71109, + 1259, 727, 71119, 2618, 71123, 71128, 71137, 9276, 19071, 22655, 71145, + 71153, 71167, 71180, 71184, 71189, 71194, 71199, 71205, 71211, 71216, + 8966, 16746, 71221, 71225, 71233, 9384, 71238, 71244, 71253, 71261, 1717, + 12184, 935, 6489, 71265, 71269, 71278, 71288, 2404, 29382, 71297, 71303, + 18571, 29397, 71309, 4207, 12562, 71315, 71322, 66203, 71326, 71330, + 71336, 71341, 71346, 3623, 160, 3649, 71351, 71363, 71367, 71373, 71378, + 30181, 71382, 12550, 2758, 4, 71387, 71397, 71408, 71414, 71425, 71432, + 71438, 71444, 71452, 71459, 71465, 71475, 71485, 71495, 71504, 25593, + 1271, 71509, 71513, 71517, 71523, 71527, 2781, 2787, 8963, 2279, 71531, + 71535, 71544, 71552, 71563, 71571, 71579, 71585, 71590, 71601, 71612, + 71620, 71626, 71631, 10532, 71641, 71649, 71653, 71657, 71662, 71666, + 71678, 30597, 16671, 71685, 71695, 71701, 71707, 10634, 71717, 71728, + 71739, 71749, 71758, 71762, 71769, 1731, 1029, 71779, 71784, 71792, + 66009, 71800, 71805, 71816, 71823, 71837, 15483, 484, 71847, 71851, + 71855, 71863, 71872, 71880, 71886, 71900, 71907, 71913, 71922, 71929, + 71939, 71947, 71954, 71962, 71969, 4029, 144, 71977, 71988, 71992, 72004, + 72010, 12743, 198, 72015, 9961, 72020, 2826, 72024, 72031, 72037, 72048, + 72056, 72063, 9335, 72070, 72079, 72087, 4107, 72100, 4124, 72104, 72109, + 72115, 72120, 72125, 72130, 2831, 520, 72136, 72149, 72153, 72158, 2836, + 1838, 829, 72162, 4128, 72170, 72176, 72180, 873, 72190, 72199, 72204, + 3640, 72208, 16427, 16434, 50565, 72212, 4159, 4039, 14310, 72220, 72227, + 72232, 25657, 72236, 72243, 72249, 72254, 72259, 16447, 192, 72264, + 72276, 72282, 72290, 2848, 1749, 72298, 72300, 72305, 72310, 72315, + 72321, 72326, 72331, 72336, 72341, 72346, 72351, 72357, 72362, 72367, + 72372, 72377, 72382, 72387, 72392, 72397, 72403, 72408, 72413, 72418, + 72424, 72429, 72435, 72440, 72445, 72450, 72455, 72460, 72465, 72470, + 72476, 72481, 72487, 72492, 72497, 72502, 72507, 72512, 72517, 72522, + 72527, 72533, 72539, 72544, 72549, 72555, 72560, 72564, 72568, 72573, + 72579, 72583, 72589, 72594, 72599, 72605, 72610, 72614, 72619, 72624, + 72628, 72631, 72633, 72637, 72640, 72647, 72652, 72656, 72661, 72665, + 72669, 72673, 72682, 72686, 35382, 72689, 35387, 72696, 72701, 35392, + 72710, 72719, 35398, 72724, 35403, 72733, 72738, 12786, 72742, 72747, + 72752, 35408, 72756, 45398, 72760, 72763, 72767, 8634, 72773, 72776, + 72781, 72786, 72790, 3887, 35413, 72793, 72797, 72800, 72811, 72816, + 72820, 72826, 72834, 72847, 72855, 72864, 72870, 72875, 72881, 72885, + 72891, 72897, 72905, 72910, 72914, 72921, 72927, 72935, 72944, 72952, + 35416, 72959, 72969, 72982, 72987, 72992, 72996, 73005, 73011, 73018, + 73029, 73041, 73048, 73057, 73066, 73075, 73082, 73088, 73095, 73103, + 73110, 73118, 73127, 73135, 73142, 73150, 73159, 73167, 73176, 73186, + 73195, 73203, 73210, 73218, 73227, 73235, 73244, 73254, 73263, 73271, + 73280, 73290, 73299, 73309, 73320, 73330, 73339, 73347, 73354, 73362, + 73371, 73379, 73388, 73398, 73407, 73415, 73424, 73434, 73443, 73453, + 73464, 73474, 73483, 73491, 73500, 73510, 73519, 73529, 73540, 73550, + 73559, 73569, 73580, 73590, 73601, 73613, 73624, 73634, 73643, 73651, + 73658, 73666, 73675, 73683, 73692, 73702, 73711, 73719, 73728, 73738, + 73747, 73757, 73768, 73778, 73787, 73795, 73804, 73814, 73823, 73833, + 73844, 73854, 73863, 73873, 73884, 73894, 73905, 73917, 73928, 73938, + 73947, 73955, 73964, 73974, 73983, 73993, 74004, 74014, 74023, 74033, + 74044, 74054, 74065, 74077, 74088, 74098, 74107, 74117, 74128, 74138, + 74149, 74161, 74172, 74182, 74193, 74205, 74216, 74228, 74241, 74253, + 74264, 74274, 74283, 74291, 74298, 74306, 74315, 74323, 74332, 74342, + 74351, 74359, 74368, 74378, 74387, 74397, 74408, 74418, 74427, 74435, + 74444, 74454, 74463, 74473, 74484, 74494, 74503, 74513, 74524, 74534, + 74545, 74557, 74568, 74578, 74587, 74595, 74604, 74614, 74623, 74633, + 74644, 74654, 74663, 74673, 74684, 74694, 74705, 74717, 74728, 74738, + 74747, 74757, 74768, 74778, 74789, 74801, 74812, 74822, 74833, 74845, + 74856, 74868, 74881, 74893, 74904, 74914, 74923, 74931, 74940, 74950, + 74959, 74969, 74980, 74990, 74999, 75009, 75020, 75030, 75041, 75053, + 75064, 75074, 75083, 75093, 75104, 75114, 75125, 75137, 75148, 75158, + 75169, 75181, 75192, 75204, 75217, 75229, 75240, 75250, 75259, 75269, + 75280, 75290, 75301, 75313, 75324, 75334, 75345, 75357, 75368, 75380, + 75393, 75405, 75416, 75426, 75437, 75449, 75460, 75472, 75485, 75497, + 75508, 75520, 75533, 75545, 75558, 75572, 75585, 75597, 75608, 75618, + 75627, 75635, 75642, 75647, 8451, 75654, 35426, 75659, 75664, 35431, + 75670, 22763, 35436, 75675, 75681, 75689, 75695, 75701, 75708, 75715, + 75720, 75725, 75729, 75733, 75736, 75740, 75749, 75758, 75766, 75772, + 75784, 75795, 75799, 3129, 8426, 75804, 75807, 75809, 75813, 75817, + 75821, 75827, 75832, 28240, 75837, 75841, 75844, 75849, 75853, 75860, + 75866, 75870, 6509, 75874, 35453, 75879, 75886, 75895, 75903, 75914, + 75922, 75931, 75939, 75946, 75953, 75959, 75970, 35458, 75975, 75986, + 75998, 76006, 76017, 76026, 76034, 76045, 76050, 76058, 2580, 76063, + 37552, 76076, 76080, 76092, 76100, 76105, 76113, 76124, 19291, 76133, + 76139, 76146, 76154, 76160, 35468, 76165, 4153, 63570, 76172, 76175, + 76183, 76196, 76209, 76222, 76235, 76242, 76253, 76262, 76267, 47020, + 47025, 76271, 76275, 76283, 76290, 76299, 76307, 76313, 76322, 76330, + 76337, 76345, 76349, 76358, 76367, 76377, 76390, 76403, 76413, 35473, + 76419, 76426, 76432, 76438, 35479, 76443, 76446, 76450, 76458, 76467, + 46758, 76475, 76484, 76492, 76499, 76507, 76517, 76526, 76535, 36785, + 76544, 76555, 76570, 76580, 9994, 23467, 76589, 76594, 76599, 76603, + 17763, 76608, 76613, 76619, 76624, 76629, 76635, 76640, 76645, 23432, + 76650, 76657, 76665, 76673, 76681, 76686, 76693, 76700, 76705, 2257, + 76709, 76713, 76721, 76729, 35496, 76735, 76741, 76753, 76759, 76766, + 76770, 76777, 76782, 76789, 76795, 76802, 76813, 76823, 76833, 76845, + 76851, 76859, 76865, 76875, 76885, 35523, 76894, 76903, 76909, 76921, + 76932, 76939, 76944, 76948, 76956, 76962, 76967, 76972, 76979, 76987, + 76999, 77009, 77018, 77027, 77035, 77042, 37405, 25990, 77048, 77053, + 77057, 77061, 77066, 77074, 77080, 77091, 77104, 77109, 77116, 35528, + 77121, 77133, 77142, 77150, 77160, 77171, 77184, 77191, 77200, 77209, + 77217, 77222, 77228, 1481, 77233, 77238, 77243, 77248, 77254, 77259, + 77264, 77270, 77276, 77281, 77285, 77290, 77295, 77300, 64130, 77305, + 77310, 77315, 77320, 77326, 77332, 77337, 77341, 77346, 17762, 77351, + 77357, 77362, 77368, 77373, 77378, 77383, 77388, 77392, 77398, 77403, + 77412, 77417, 77422, 77427, 77432, 77436, 77443, 77449, 4450, 18914, + 3094, 77454, 77458, 77463, 77467, 77471, 77475, 50820, 77479, 77404, + 77481, 77491, 35537, 77494, 77499, 77508, 77514, 6478, 35542, 77518, + 77524, 77529, 77535, 77540, 77544, 77551, 77556, 77566, 77575, 77579, + 77585, 77591, 77597, 77601, 77609, 77616, 77624, 77632, 35547, 77639, + 77642, 77649, 77655, 77660, 77664, 77670, 77678, 77685, 77690, 77694, + 77703, 77711, 77717, 77722, 35552, 77729, 77741, 77748, 77754, 77759, + 77765, 77772, 77778, 23171, 29855, 77784, 77789, 77795, 77799, 77811, + 77437, 77444, 23364, 77821, 77826, 77833, 77839, 77846, 77852, 77863, + 77868, 77876, 9699, 77881, 77884, 77890, 77894, 77898, 77901, 77907, + 77913, 35290, 4451, 1093, 14706, 77920, 77926, 77932, 77938, 77944, + 77950, 77956, 77962, 77968, 77973, 77978, 77983, 77988, 77993, 77998, + 78003, 78008, 78013, 78018, 78023, 78028, 78033, 78039, 78044, 78049, + 78055, 78060, 78065, 78071, 78077, 78083, 78089, 78095, 78101, 78107, + 78113, 78119, 78124, 78129, 78135, 78140, 78145, 78151, 78156, 78161, + 78166, 78171, 78176, 78181, 78186, 78191, 78196, 78201, 78206, 78211, + 78217, 78222, 78227, 78232, 78238, 78243, 78248, 78253, 78258, 78264, + 78269, 78274, 78279, 78284, 78289, 78294, 78299, 78304, 78309, 78314, + 78319, 78324, 78329, 78334, 78339, 78344, 78349, 78354, 78359, 78365, + 78370, 78375, 78380, 78385, 78390, 78395, 78400, 1875, 169, 78405, 78409, + 78413, 78418, 78426, 78430, 78437, 78445, 78449, 78462, 78470, 78475, + 78480, 28649, 78484, 78489, 78493, 78498, 78502, 78510, 78514, 22771, + 78519, 78523, 66714, 78527, 78530, 78538, 78546, 78554, 78559, 78564, + 78571, 78578, 78584, 78590, 78595, 78602, 78607, 78615, 71172, 78622, + 66500, 78627, 78632, 78636, 78643, 66527, 12853, 78649, 78654, 78659, + 78663, 78666, 78675, 78681, 78685, 78695, 78704, 78708, 78711, 78715, + 78722, 78735, 78741, 78749, 78758, 78769, 78780, 78791, 78802, 78811, + 78817, 78826, 78834, 78844, 78857, 78865, 78872, 78883, 78889, 78894, + 78899, 78905, 78915, 78921, 78931, 78938, 78948, 78957, 77123, 78965, + 78971, 78979, 78985, 78992, 79000, 79005, 79008, 79012, 79018, 79022, + 79025, 79031, 79037, 79045, 79057, 79069, 79076, 79081, 79085, 79096, + 79104, 79111, 79123, 79131, 79139, 79146, 79152, 79157, 79167, 79176, + 79181, 79191, 79200, 46039, 79207, 79211, 79216, 79224, 79231, 79237, + 79241, 79251, 79262, 79270, 79277, 79289, 79301, 79310, 76066, 79317, + 79327, 79339, 79350, 79364, 79372, 79382, 79389, 79397, 79410, 79422, + 79431, 79439, 79449, 79460, 79472, 79481, 79491, 79501, 79510, 79517, + 79526, 79541, 79549, 79559, 79568, 79576, 79589, 63540, 79604, 79614, + 79623, 79635, 79645, 79657, 79668, 79682, 79696, 79710, 79724, 79738, + 79752, 79766, 79780, 79794, 79808, 79822, 79836, 79850, 79864, 79878, + 79892, 79906, 79920, 79934, 79948, 79962, 79976, 79990, 80004, 80018, + 80032, 80046, 80060, 80074, 80088, 80102, 80116, 80130, 80144, 80158, + 80172, 80186, 80200, 80214, 80228, 80242, 80256, 80270, 80284, 80298, + 80312, 80326, 80340, 80354, 80368, 80382, 80396, 80410, 80424, 80438, + 80452, 80466, 80480, 80494, 80508, 80522, 80536, 80550, 80564, 80578, + 80592, 80606, 80620, 80634, 80648, 80662, 80676, 80690, 80704, 80718, + 80732, 80746, 80760, 80774, 80788, 80802, 80816, 80830, 80844, 80858, + 80872, 80886, 80900, 80914, 80928, 80942, 80956, 80970, 80984, 80998, + 81012, 81026, 81040, 81054, 81068, 81082, 81096, 81110, 81124, 81138, + 81152, 81166, 81180, 81194, 81208, 81222, 81236, 81250, 81264, 81278, + 81292, 81306, 81320, 81334, 81348, 81362, 81376, 81390, 81404, 81418, + 81432, 81446, 81460, 81474, 81488, 81502, 81516, 81530, 81544, 81558, + 81572, 81586, 81600, 81614, 81628, 81642, 81656, 81670, 81684, 81698, + 81712, 81726, 81740, 81754, 81768, 81782, 81796, 81810, 81824, 81838, + 81852, 81866, 81880, 81894, 81908, 81922, 81936, 81950, 81964, 81978, + 81992, 82006, 82020, 82034, 82048, 82062, 82076, 82090, 82104, 82118, + 82132, 82146, 82160, 82174, 82188, 82202, 82216, 82230, 82244, 82258, + 82272, 82286, 82300, 82314, 82328, 82342, 82356, 82370, 82384, 82398, + 82412, 82426, 82440, 82454, 82468, 82482, 82496, 82510, 82524, 82538, + 82552, 82566, 82580, 82594, 82608, 82622, 82636, 82650, 82664, 82678, + 82692, 82706, 82720, 82734, 82748, 82762, 82776, 82790, 82804, 82818, + 82832, 82846, 82860, 82874, 82888, 82902, 82916, 82930, 82944, 82958, + 82972, 82986, 83000, 83014, 83028, 83042, 83056, 83070, 83084, 83098, + 83112, 83126, 83140, 83154, 83168, 83182, 83196, 83210, 83224, 83238, + 83252, 83266, 83280, 83294, 83308, 83322, 83336, 83350, 83364, 83378, + 83392, 83406, 83420, 83434, 83448, 83462, 83476, 83490, 83504, 83518, + 83532, 83546, 83560, 83574, 83588, 83602, 83616, 83630, 83644, 83658, + 83672, 83686, 83700, 83714, 83728, 83742, 83756, 83770, 83784, 83798, + 83812, 83826, 83840, 83854, 83868, 83882, 83896, 83910, 83924, 83938, + 83952, 83966, 83980, 83994, 84008, 84022, 84036, 84050, 84064, 84078, + 84092, 84106, 84120, 84134, 84148, 84162, 84176, 84190, 84204, 84218, + 84232, 84246, 84260, 84274, 84288, 84302, 84316, 84330, 84344, 84358, + 84372, 84386, 84400, 84414, 84428, 84442, 84456, 84470, 84484, 84498, + 84512, 84526, 84540, 84554, 84568, 84582, 84596, 84610, 84624, 84638, + 84652, 84666, 84680, 84694, 84708, 84722, 84736, 84750, 84764, 84778, + 84792, 84806, 84820, 84834, 84848, 84862, 84876, 84890, 84904, 84918, + 84932, 84946, 84960, 84974, 84988, 85002, 85016, 85030, 85044, 85058, + 85072, 85086, 85100, 85114, 85128, 85142, 85156, 85170, 85184, 85198, + 85212, 85226, 85240, 85254, 85268, 85282, 85296, 85310, 85324, 85338, + 85352, 85366, 85380, 85394, 85408, 85422, 85436, 85450, 85464, 85478, + 85492, 85506, 85520, 85534, 85548, 85562, 85576, 85590, 85604, 85618, + 85632, 85646, 85660, 85674, 85688, 85702, 85716, 85730, 85744, 85758, + 85772, 85786, 85800, 85814, 85828, 85842, 85856, 85870, 85884, 85898, + 85912, 85926, 85940, 85954, 85968, 85982, 85996, 86010, 86024, 86038, + 86052, 86066, 86080, 86094, 86108, 86122, 86136, 86150, 86164, 86178, + 86192, 86206, 86220, 86234, 86248, 86262, 86276, 86290, 86304, 86318, + 86332, 86346, 86360, 86374, 86388, 86402, 86416, 86430, 86444, 86458, + 86472, 86486, 86500, 86514, 86528, 86542, 86556, 86570, 86584, 86598, + 86612, 86626, 86640, 86654, 86668, 86682, 86696, 86710, 86724, 86738, + 86752, 86766, 86780, 86794, 86808, 86822, 86836, 86850, 86864, 86878, + 86892, 86906, 86920, 86934, 86948, 86962, 86976, 86990, 87004, 87018, + 87032, 87046, 87060, 87074, 87088, 87102, 87116, 87130, 87144, 87158, + 87172, 87186, 87200, 87214, 87228, 87242, 87256, 87270, 87284, 87298, + 87312, 87326, 87340, 87354, 87368, 87382, 87396, 87410, 87424, 87438, + 87452, 87466, 87480, 87494, 87508, 87522, 87536, 87550, 87564, 87578, + 87592, 87606, 87620, 87634, 87648, 87662, 87676, 87690, 87704, 87718, + 87732, 87746, 87760, 87774, 87788, 87802, 87816, 87830, 87844, 87858, + 87872, 87886, 87900, 87914, 87928, 87942, 87956, 87970, 87984, 87998, + 88012, 88026, 88040, 88054, 88068, 88082, 88096, 88110, 88124, 88138, + 88152, 88166, 88180, 88194, 88208, 88222, 88236, 88250, 88264, 88278, + 88292, 88306, 88320, 88334, 88348, 88362, 88376, 88390, 88404, 88418, + 88432, 88446, 88460, 88474, 88488, 88502, 88516, 88530, 88544, 88558, + 88572, 88586, 88600, 88614, 88628, 88642, 88656, 88670, 88684, 88698, + 88712, 88726, 88740, 88754, 88768, 88782, 88796, 88810, 88824, 88838, + 88852, 88866, 88880, 88894, 88908, 88922, 88936, 88950, 88964, 88978, + 88992, 89006, 89020, 89034, 89048, 89062, 89076, 89090, 89104, 89118, + 89132, 89146, 89160, 89174, 89188, 89202, 89216, 89230, 89244, 89258, + 89272, 89286, 89300, 89314, 89328, 89342, 89356, 89370, 89384, 89398, + 89412, 89426, 89440, 89454, 89468, 89482, 89496, 89510, 89524, 89538, + 89552, 89566, 89580, 89594, 89608, 89622, 89636, 89650, 89664, 89678, + 89692, 89706, 89720, 89734, 89748, 89762, 89776, 89790, 89804, 89818, + 89832, 89846, 89860, 89874, 89888, 89902, 89916, 89930, 89944, 89958, + 89972, 89986, 90000, 90014, 90028, 90042, 90056, 90070, 90084, 90098, + 90112, 90126, 90140, 90154, 90168, 90182, 90196, 90210, 90224, 90238, + 90249, 90260, 90270, 90281, 90289, 90295, 90305, 90313, 90319, 31621, + 90324, 90330, 90339, 90351, 90356, 90363, 10546, 19311, 90369, 90378, + 90383, 90387, 90394, 90400, 90405, 90410, 90418, 90426, 13229, 90430, + 90433, 90435, 90442, 90448, 90459, 90464, 90468, 90473, 90480, 90486, + 90491, 90499, 71741, 71751, 90505, 90512, 90522, 11641, 90529, 90534, + 31855, 90543, 90548, 90555, 90565, 90573, 90581, 90590, 90596, 90602, + 90609, 90616, 90621, 90625, 90633, 66544, 90638, 90647, 90655, 90662, + 90667, 90671, 90680, 90686, 90689, 90693, 90702, 90712, 78457, 90721, + 90725, 90733, 90737, 90743, 90754, 90764, 19320, 90775, 90784, 90792, + 90800, 90807, 66563, 9192, 90815, 90819, 90828, 90835, 90838, 29736, + 90841, 90845, 90850, 90867, 90879, 11599, 90891, 90896, 90901, 90906, + 22861, 90910, 90915, 90920, 90926, 90931, 6142, 90936, 22865, 90941, + 90946, 90952, 90959, 90964, 90969, 90975, 90981, 90987, 90992, 90998, + 91002, 91016, 91024, 91032, 91038, 91043, 91050, 91060, 91069, 91074, + 91079, 91084, 91092, 91097, 91103, 91108, 91117, 65232, 91122, 91125, + 91143, 91162, 91175, 91189, 91205, 91212, 91219, 91228, 91235, 91241, + 91248, 91253, 91259, 91265, 91273, 91279, 91284, 91289, 91305, 11612, + 91319, 91326, 91334, 91340, 91344, 91347, 91352, 91357, 91364, 91369, + 91378, 91384, 91389, 91395, 91401, 91410, 91419, 38955, 91424, 91432, + 91441, 12882, 91450, 91456, 91464, 91470, 91476, 91482, 91487, 91494, + 91500, 12893, 91505, 91508, 91513, 35579, 91523, 91532, 91537, 91543, + 91548, 91556, 91563, 91574, 91584, 91589, 91597, 71095, 91602, 91608, + 91613, 91620, 91629, 91637, 91641, 91647, 91653, 91660, 91666, 91670, + 18682, 3103, 91675, 91679, 91683, 91689, 91698, 91704, 91711, 91715, + 91736, 91758, 91774, 91791, 91810, 91819, 91829, 91837, 91844, 91851, + 91857, 29597, 91871, 91875, 91881, 91889, 91901, 91907, 91915, 91922, + 91927, 91932, 91936, 91944, 91951, 91955, 91961, 91967, 91972, 3729, + 47220, 91978, 91982, 91986, 91990, 91995, 92000, 92005, 92011, 92017, + 92023, 92030, 92036, 92043, 92049, 92055, 92060, 92066, 92071, 92075, + 92080, 92084, 92089, 47235, 92093, 92098, 92106, 92110, 92115, 92122, + 92131, 92137, 92146, 92150, 92157, 92161, 92164, 92171, 92177, 92186, + 92196, 92206, 92211, 92215, 92222, 92230, 92239, 92243, 92251, 92257, + 92262, 92267, 92273, 92279, 92284, 92288, 92294, 92299, 92303, 92307, + 92310, 92315, 92323, 92333, 92339, 92344, 92354, 44492, 92362, 92374, + 92380, 92384, 92390, 92402, 92413, 92420, 92426, 92433, 92440, 92452, + 92459, 92465, 22939, 92469, 92477, 92483, 92490, 92496, 92502, 92508, + 92513, 92518, 92523, 92527, 92536, 92544, 92555, 7374, 92560, 18131, + 92566, 92570, 92574, 92578, 92586, 92595, 92599, 92606, 92615, 92623, + 92636, 92642, 92085, 32739, 92647, 92649, 92654, 92659, 92664, 92669, + 92674, 92679, 92684, 92689, 92694, 92699, 92704, 92709, 92714, 92719, + 92725, 92730, 92735, 92740, 92745, 92750, 92755, 92760, 92765, 92771, + 92777, 92783, 92788, 92793, 92805, 92810, 1881, 54, 92815, 92820, 35585, + 92824, 35590, 35595, 35601, 35606, 92828, 35611, 23994, 92850, 92854, + 92858, 92863, 92867, 35615, 92871, 92879, 92886, 92892, 35620, 92902, + 92905, 92910, 92914, 92923, 10356, 92931, 35625, 23845, 92934, 92938, + 92946, 1393, 92951, 35636, 92954, 92959, 27995, 28005, 38578, 92964, + 92969, 92974, 92979, 92985, 92990, 92999, 93004, 93013, 93021, 93028, + 93034, 93039, 93044, 93049, 93059, 93068, 93076, 93081, 93089, 93093, + 93101, 93105, 93112, 93120, 35444, 41634, 93127, 93133, 93138, 93143, + 13264, 30820, 93148, 93153, 93160, 93166, 93171, 93179, 93189, 93199, + 93205, 93210, 93216, 19342, 93223, 39462, 93236, 93241, 93247, 33737, + 69579, 93260, 93264, 93273, 93282, 93289, 93295, 93303, 93312, 93319, + 41754, 93325, 93328, 93332, 93336, 93340, 28141, 93346, 93353, 93359, + 93367, 93372, 93376, 26137, 93382, 93385, 93393, 93400, 93408, 93421, + 93435, 93442, 93448, 93455, 93461, 35650, 93465, 93472, 93480, 93488, + 93494, 35655, 93502, 93508, 93513, 93523, 93529, 93538, 33532, 38010, + 93546, 93551, 93556, 93560, 93565, 93569, 93577, 93582, 16419, 44505, + 93586, 93591, 35660, 68121, 93595, 93600, 93604, 93611, 93620, 93624, + 93632, 93638, 93643, 93649, 8493, 93654, 93660, 93665, 93670, 93681, + 93690, 93702, 93717, 35936, 93723, 18250, 35664, 93727, 93734, 93740, + 26253, 93744, 93751, 93760, 93767, 93776, 93782, 93787, 93795, 93801, + 93806, 35674, 93811, 93820, 92408, 93829, 93836, 93842, 93848, 93857, + 93867, 93875, 93882, 93886, 35679, 93889, 35685, 35691, 93894, 93902, + 93910, 93920, 93929, 93937, 93944, 93954, 35696, 93958, 93960, 93964, + 93969, 93973, 93977, 93983, 93988, 93992, 94003, 94008, 94013, 3108, + 94017, 94024, 94028, 94037, 94045, 94052, 94057, 94062, 68172, 94066, + 94069, 94075, 94083, 94089, 94093, 94098, 94105, 94110, 94115, 94119, + 94125, 94130, 38041, 94134, 94137, 94142, 94146, 94151, 94158, 94163, + 94167, 43031, 94175, 28014, 28023, 94181, 94187, 94193, 94198, 94202, + 94205, 94215, 94224, 94229, 94235, 94242, 94248, 94252, 94260, 94265, + 38047, 78677, 94269, 94277, 94283, 94290, 94295, 94299, 94304, 63756, + 94310, 94316, 38053, 94321, 94326, 94330, 94335, 94340, 94345, 94349, + 94354, 94359, 94365, 94370, 94375, 94381, 94387, 94392, 94396, 94401, + 94406, 94411, 94415, 26252, 94420, 94425, 94431, 94437, 94443, 94448, + 94452, 94457, 94462, 94467, 94471, 94476, 94481, 94486, 94491, 47490, + 94495, 35704, 94503, 94507, 94515, 94523, 94534, 94539, 94543, 24420, + 76169, 94548, 94554, 94559, 94569, 94576, 94581, 94589, 94598, 94603, + 94607, 94612, 94620, 94628, 94635, 71357, 94641, 94649, 94656, 94667, + 94673, 94679, 35714, 94682, 94689, 94697, 94702, 44708, 94706, 94711, + 94718, 94723, 9567, 94727, 94735, 94742, 94749, 94758, 94765, 94771, + 94785, 6214, 94793, 94799, 94803, 94806, 94814, 94821, 94826, 94839, + 94846, 94852, 94856, 94864, 94869, 94876, 94881, 66403, 94886, 94889, + 94898, 94905, 94911, 94915, 94918, 94926, 94932, 94941, 94951, 94961, + 94970, 94981, 94989, 95000, 95005, 95009, 95014, 95018, 38709, 95026, + 23234, 38718, 95031, 95036, 95041, 95046, 95051, 95056, 95061, 95065, + 95070, 95075, 95080, 95085, 95090, 95095, 95099, 95104, 95109, 95113, + 95117, 95121, 95125, 95130, 95135, 95139, 95144, 95148, 95152, 95157, + 95162, 95167, 95172, 95176, 95181, 95186, 95190, 95195, 95200, 95205, + 95210, 95215, 95220, 95225, 95230, 95235, 95240, 95245, 95250, 95255, + 95260, 95265, 95270, 95275, 95280, 95285, 95290, 95294, 95299, 95304, + 95309, 95314, 95319, 95324, 95329, 95334, 95339, 95344, 95349, 95353, + 95358, 95362, 95367, 95372, 95377, 95382, 95387, 95392, 95397, 95402, + 95407, 95411, 95415, 95420, 95425, 95429, 95434, 95439, 95443, 95448, + 95453, 95458, 95463, 95467, 95472, 95477, 95481, 95486, 95490, 95494, + 95498, 95502, 95507, 95511, 95515, 95519, 95523, 95527, 95531, 95535, + 95539, 95543, 95548, 95553, 95558, 95563, 95568, 95573, 95578, 95583, + 95588, 95593, 95597, 95601, 95605, 95609, 95613, 95617, 95622, 95626, + 95631, 95635, 95640, 95645, 95649, 95653, 95658, 95662, 95666, 95670, + 95674, 95678, 95682, 95686, 95690, 95694, 95698, 95702, 95706, 95710, + 95714, 95719, 95724, 95728, 95732, 95736, 95740, 95744, 95748, 95753, + 95757, 95761, 95765, 95769, 95773, 95777, 95782, 95786, 95791, 95795, + 95799, 95803, 95807, 95811, 95815, 95819, 95823, 95827, 95831, 95835, + 95840, 95844, 95848, 95852, 95856, 95860, 95864, 95868, 95872, 95876, + 95880, 95884, 95889, 95893, 95897, 95902, 95907, 95911, 95915, 95919, + 95923, 95927, 95931, 95935, 95939, 95944, 95948, 95953, 95957, 95962, + 95966, 95971, 95975, 95981, 95986, 95990, 95995, 95999, 96004, 96008, + 96013, 96017, 96022, 1500, 96026, 2862, 1755, 1673, 27950, 96030, 2871, + 96034, 1362, 96039, 1304, 96043, 96047, 2888, 96051, 96059, 96066, 96073, + 96087, 2892, 7476, 96096, 96104, 96111, 96122, 96131, 96138, 96150, + 96163, 96176, 96187, 96192, 96199, 96211, 96215, 2896, 12960, 96225, + 96230, 96239, 96249, 96254, 2900, 96262, 96266, 96271, 96278, 96284, + 96292, 96304, 96314, 1309, 14311, 96327, 96331, 96337, 96351, 96363, + 96375, 96385, 96394, 96403, 96412, 96420, 96431, 96439, 4306, 96449, + 96460, 96469, 96475, 96490, 96497, 96503, 96508, 38843, 96513, 2924, + 14315, 96517, 96524, 9492, 96533, 96539, 2929, 35152, 96548, 66099, + 96555, 96559, 96565, 96576, 96582, 96589, 96595, 96603, 96610, 96616, + 96627, 96637, 96646, 96657, 96666, 96673, 96679, 96689, 96697, 96703, + 96718, 96724, 96729, 96736, 96739, 96745, 96752, 96758, 96766, 96775, + 96783, 96789, 96798, 46760, 96812, 96817, 96823, 16195, 96828, 96841, + 96853, 96862, 96870, 96877, 96881, 96885, 96888, 96895, 96902, 96910, + 96918, 96927, 96935, 16100, 96943, 96948, 96952, 96964, 96971, 96978, + 96987, 877, 96997, 97006, 97017, 2945, 97021, 97025, 97031, 97044, 97056, + 97066, 97075, 97087, 28701, 97098, 97106, 97115, 97126, 97137, 97147, + 97157, 97166, 97174, 12474, 97181, 97185, 97188, 97193, 97198, 97202, + 97208, 1314, 97215, 97219, 13042, 97223, 97234, 97243, 97251, 97260, + 97268, 97284, 97295, 97304, 97312, 97324, 97335, 97351, 97361, 97382, + 97396, 97409, 97417, 97424, 7522, 97437, 97442, 97448, 6223, 97454, + 97457, 97464, 97474, 8595, 97481, 97486, 97491, 97496, 97504, 97513, + 97521, 97526, 97533, 10594, 10603, 97539, 97550, 97555, 97561, 2961, + 2966, 97567, 11967, 97573, 97580, 97587, 97600, 97605, 2266, 87, 97613, + 97618, 97626, 97636, 97645, 97651, 97660, 97668, 97678, 97682, 97686, + 97691, 97695, 97707, 2989, 97715, 97723, 97728, 97739, 97750, 97762, + 97773, 97783, 97792, 23275, 97797, 97803, 97808, 97818, 97828, 97833, + 30713, 97839, 97844, 97853, 23287, 97857, 4404, 16, 97862, 97871, 97878, + 97885, 97891, 97896, 97900, 97906, 1085, 97911, 97916, 66680, 97921, + 97926, 97932, 97938, 97946, 97951, 97959, 97966, 97972, 97977, 42915, + 46654, 97983, 1806, 32, 97993, 98006, 98011, 98019, 98024, 98030, 3015, + 30788, 98035, 98043, 98050, 98055, 98064, 64006, 4023, 67784, 98072, + 98076, 1700, 1818, 98081, 98086, 98093, 1822, 286, 98100, 98106, 98111, + 3037, 98115, 98120, 98127, 1826, 98132, 98138, 98143, 98155, 6454, 98165, + 98172, 1833, 98178, 98183, 98190, 98197, 98212, 98219, 98230, 98235, + 98243, 2646, 98247, 98259, 98264, 98268, 98274, 30596, 2271, 98278, + 98289, 98293, 98297, 98303, 98307, 98316, 98320, 98331, 98335, 2317, + 34969, 98339, 98349, 3128, 98357, 98366, 9999, 98371, 98376, 98380, + 98389, 98396, 98402, 3098, 16259, 98406, 98419, 98437, 98442, 98450, + 98458, 98468, 10866, 14428, 98480, 98493, 98500, 98514, 98521, 98537, + 98544, 98550, 23325, 13666, 98557, 98564, 98574, 98583, 47489, 98595, + 47624, 98603, 98606, 98612, 98618, 98624, 98630, 98636, 98643, 98650, + 98656, 98662, 98668, 98674, 98680, 98686, 98692, 98698, 98704, 98710, + 98716, 98722, 98728, 98734, 98740, 98746, 98752, 98758, 98764, 98770, + 98776, 98782, 98788, 98794, 98800, 98806, 98812, 98818, 98824, 98830, + 98836, 98842, 98848, 98854, 98860, 98866, 98872, 98878, 98884, 98890, + 98896, 98902, 98908, 98914, 98920, 98926, 98932, 98938, 98944, 98950, + 98956, 98963, 98969, 98976, 98983, 98989, 98996, 99003, 99009, 99015, + 99021, 99027, 99033, 99039, 99045, 99051, 99057, 99063, 99069, 99075, + 99081, 99087, 99093, 3112, 9972, 99099, 99105, 99113, 99117, 96274, 3116, + 99121, 23052, 13299, 3973, 99125, 3122, 99129, 99139, 99145, 99151, + 99157, 99163, 99169, 99175, 99181, 99187, 99193, 99199, 99205, 99211, + 99217, 99223, 99229, 99235, 99241, 99247, 99253, 99259, 99265, 99271, + 99277, 99283, 99289, 99296, 99303, 99309, 99315, 99321, 99327, 99333, + 99339, 1319, 99345, 99350, 99355, 99360, 99365, 99370, 99375, 99380, + 99385, 99389, 99393, 99397, 99401, 99405, 99409, 99413, 99417, 99421, + 99427, 99433, 99439, 99445, 99449, 99453, 99457, 99461, 99465, 99469, + 99473, 99477, 99481, 99486, 99491, 99496, 99501, 99506, 99511, 99516, + 99521, 99526, 99531, 99536, 99541, 99546, 99551, 99556, 99561, 99566, + 99571, 99576, 99581, 99586, 99591, 99596, 99601, 99606, 99611, 99616, + 99621, 99626, 99631, 99636, 99641, 99646, 99651, 99656, 99661, 99666, + 99671, 99676, 99681, 99686, 99691, 99696, 99701, 99706, 99711, 99716, + 99721, 99726, 99731, 99736, 99741, 99746, 99751, 99756, 99761, 99766, + 99771, 99776, 99781, 99786, 99791, 99796, 99801, 99806, 99811, 99816, + 99821, 99826, 99831, 99836, 99841, 99846, 99851, 99856, 99861, 99866, + 99871, 99876, 99881, 99886, 99891, 99896, 99901, 99906, 99911, 99916, + 99921, 99926, 99931, 99936, 99941, 99946, 99951, 99956, 99961, 99966, + 99971, 99976, 99981, 99986, 99991, 99996, 100001, 100006, 100011, 100016, + 100021, 100026, 100031, 100036, 100041, 100046, 100051, 100056, 100061, + 100066, 100071, 100076, 100081, 100086, 100091, 100096, 100101, 100106, + 100111, 100116, 100121, 100126, 100131, 100136, 100141, 100146, 100151, + 100156, 100161, 100166, 100171, 100176, 100181, 100186, 100191, 100196, + 100201, 100206, 100211, 100216, 100221, 100226, 100231, 100236, 100241, + 100246, 100251, 100256, 100261, 100266, 100271, 100276, 100281, 100286, + 100291, 100296, 100301, 100306, 100311, 100316, 100321, 100326, 100331, + 100336, 100341, 100346, 100351, 100356, 100361, 100366, 100371, 100377, + 100382, 100387, 100392, 100397, 100402, 100407, 100412, 100418, 100423, + 100428, 100433, 100438, 100443, 100448, 100453, 100458, 100463, 100468, + 100473, 100478, 100483, 100488, 100493, 100498, 100503, 100508, 100513, + 100518, 100523, 100528, 100533, 100538, 100543, 100548, 100553, 100558, + 100563, 100568, 100573, 100578, 100587, 100592, 100601, 100606, 100615, + 100620, 100629, 100634, 100643, 100648, 100657, 100662, 100671, 100676, + 100685, 100690, 100695, 100704, 100708, 100717, 100722, 100731, 100736, + 100745, 100750, 100759, 100764, 100773, 100778, 100787, 100792, 100801, + 100806, 100815, 100820, 100829, 100834, 100843, 100848, 100853, 100858, + 100863, 100868, 100873, 100878, 100882, 100887, 100892, 100897, 100902, + 100907, 100912, 100918, 100923, 100928, 100933, 100939, 100943, 100948, + 100954, 100959, 100964, 100969, 100974, 100979, 100984, 100989, 100994, + 100999, 101004, 101010, 101015, 101020, 101025, 101031, 101036, 101041, + 101046, 101051, 101057, 101062, 101067, 101072, 101077, 101082, 101088, + 101093, 101098, 101103, 101108, 101113, 101118, 101123, 101128, 101133, + 101138, 101143, 101148, 101153, 101158, 101163, 101168, 101173, 101178, + 101183, 101188, 101193, 101198, 101203, 101209, 101215, 101221, 101226, + 101231, 101236, 101241, 101247, 101253, 101259, 101264, 101269, 101274, + 101280, 101285, 101290, 101295, 101300, 101305, 101310, 101315, 101320, + 101325, 101330, 101335, 101340, 101345, 101350, 101355, 101360, 101366, + 101372, 101378, 101383, 101388, 101393, 101398, 101404, 101410, 101416, + 101421, 101426, 101431, 101436, 101441, 101446, 101451, 101456, 101461, + 17686, 101466, 101472, 101477, 101482, 101487, 101492, 101497, 101503, + 101508, 101513, 101518, 101523, 101528, 101534, 101539, 101544, 101549, + 101554, 101559, 101564, 101569, 101574, 101579, 101584, 101589, 101594, + 101599, 101604, 101609, 101614, 101619, 101624, 101629, 101634, 101639, + 101644, 101650, 101655, 101660, 101665, 101670, 101675, 101680, 101685, + 101690, 101695, 101700, 101705, 101710, 101715, 101720, 101725, 101730, + 101735, 101740, 101745, 101750, 101755, 101760, 101765, 101770, 101775, + 101780, 101785, 101790, 101795, 101800, 101805, 101810, 101815, 101820, + 101825, 101830, 101835, 101840, 101845, 101850, 101856, 101861, 101866, + 101871, 101876, 101881, 101886, 101891, 101896, 101901, 101906, 101911, + 101917, 101922, 101928, 101933, 101938, 101943, 101948, 101953, 101958, + 101964, 101969, 101974, 101980, 101985, 101990, 101995, 102000, 102005, + 102011, 102017, 102022, 102027, 13321, 102032, 102037, 102042, 102047, + 102052, 102057, 102062, 102067, 102072, 102077, 102082, 102087, 102092, + 102097, 102102, 102107, 102112, 102117, 102122, 102127, 102132, 102137, + 102142, 102147, 102152, 102157, 102162, 102167, 102172, 102177, 102182, + 102187, 102192, 102197, 102202, 102207, 102212, 102217, 102222, 102227, + 102232, 102237, 102242, 102247, 102252, 102257, 102262, 102267, 102272, + 102277, 102282, 102287, 102292, 102297, 102302, 102307, 102312, 102317, + 102322, 102327, 102332, 102337, 102342, 102347, 102352, 102358, 102363, + 102368, 102373, 102378, 102384, 102389, 102394, 102399, 102404, 102409, + 102414, 102420, 102425, 102430, 102435, 102440, 102445, 102451, 102456, + 102461, 102466, 102471, 102476, 102482, 102487, 102492, 102497, 102502, + 102507, 102513, 102519, 102524, 102529, 102534, 102540, 102546, 102552, + 102557, 102562, 102568, 102574, 102579, 102585, 102591, 102597, 102602, + 102607, 102613, 102618, 102624, 102629, 102635, 102644, 102649, 102654, + 102660, 102665, 102671, 102676, 102681, 102686, 102691, 102696, 102701, + 102706, 102711, 102716, 102721, 102726, 102731, 102736, 102741, 102746, + 102751, 102756, 102761, 102766, 102771, 102776, 102781, 102786, 102791, + 102796, 102801, 102806, 102811, 102816, 102821, 102826, 102832, 102838, + 102844, 102849, 102854, 102859, 102864, 102869, 102874, 102879, 102884, + 102889, 102894, 102899, 102904, 102909, 102914, 102919, 102924, 102929, + 102934, 102939, 102944, 102950, 102956, 102961, 102967, 102972, 102977, + 102983, 102988, 102994, 102999, 103005, 103010, 103016, 103021, 103027, + 103032, 103037, 103042, 103047, 103052, 103057, 103062, 99140, 99146, + 99152, 99158, 103068, 99164, 99170, 103074, 99176, 99182, 99188, 99194, + 99200, 99206, 99212, 99218, 99224, 103080, 99230, 99236, 99242, 103086, + 99248, 99254, 99260, 99266, 103092, 99272, 99278, 99284, 99304, 103098, + 103104, 99310, 103110, 99316, 99322, 99328, 99334, 99340, 3139, 3144, + 103116, 103121, 103124, 103130, 103136, 103143, 103148, 103153, 2322, }; /* code->name phrasebook */ #define phrasebook_shift 8 -#define phrasebook_short 201 +#define phrasebook_short 198 static unsigned char phrasebook[] = { - 0, 211, 228, 240, 212, 82, 217, 31, 82, 42, 54, 243, 97, 54, 218, 246, - 54, 250, 235, 250, 160, 49, 219, 76, 50, 219, 76, 250, 59, 91, 54, 245, - 233, 235, 219, 239, 102, 211, 61, 212, 0, 17, 202, 84, 17, 105, 17, 108, - 17, 147, 17, 149, 17, 170, 17, 195, 17, 213, 111, 17, 199, 17, 222, 63, - 245, 242, 213, 143, 227, 179, 54, 241, 35, 54, 237, 247, 54, 217, 47, 82, - 245, 231, 250, 49, 8, 6, 1, 63, 8, 6, 1, 249, 255, 8, 6, 1, 247, 125, 8, - 6, 1, 245, 51, 8, 6, 1, 74, 8, 6, 1, 240, 174, 8, 6, 1, 239, 75, 8, 6, 1, - 237, 171, 8, 6, 1, 75, 8, 6, 1, 230, 184, 8, 6, 1, 230, 54, 8, 6, 1, 159, - 8, 6, 1, 226, 185, 8, 6, 1, 223, 163, 8, 6, 1, 78, 8, 6, 1, 219, 184, 8, - 6, 1, 217, 134, 8, 6, 1, 146, 8, 6, 1, 194, 8, 6, 1, 210, 69, 8, 6, 1, - 68, 8, 6, 1, 206, 164, 8, 6, 1, 204, 144, 8, 6, 1, 203, 196, 8, 6, 1, - 203, 124, 8, 6, 1, 202, 159, 49, 51, 155, 216, 74, 212, 0, 50, 51, 155, - 246, 53, 251, 138, 124, 227, 114, 237, 254, 251, 138, 8, 5, 1, 63, 8, 5, - 1, 249, 255, 8, 5, 1, 247, 125, 8, 5, 1, 245, 51, 8, 5, 1, 74, 8, 5, 1, - 240, 174, 8, 5, 1, 239, 75, 8, 5, 1, 237, 171, 8, 5, 1, 75, 8, 5, 1, 230, - 184, 8, 5, 1, 230, 54, 8, 5, 1, 159, 8, 5, 1, 226, 185, 8, 5, 1, 223, - 163, 8, 5, 1, 78, 8, 5, 1, 219, 184, 8, 5, 1, 217, 134, 8, 5, 1, 146, 8, - 5, 1, 194, 8, 5, 1, 210, 69, 8, 5, 1, 68, 8, 5, 1, 206, 164, 8, 5, 1, - 204, 144, 8, 5, 1, 203, 196, 8, 5, 1, 203, 124, 8, 5, 1, 202, 159, 49, - 245, 93, 155, 80, 227, 114, 50, 245, 93, 155, 208, 227, 221, 190, 211, - 228, 230, 239, 240, 212, 82, 246, 220, 54, 218, 20, 54, 245, 92, 54, 203, - 43, 54, 247, 203, 142, 214, 168, 54, 243, 231, 245, 169, 54, 240, 41, - 219, 240, 231, 31, 227, 217, 52, 250, 218, 217, 31, 82, 221, 166, 54, - 212, 7, 235, 220, 216, 129, 54, 225, 170, 244, 55, 54, 218, 75, 54, 210, - 199, 108, 210, 199, 147, 251, 126, 251, 138, 224, 153, 54, 218, 126, 54, - 101, 243, 85, 246, 231, 210, 199, 105, 225, 80, 219, 240, 231, 31, 216, - 11, 52, 250, 218, 217, 31, 82, 204, 161, 239, 138, 118, 217, 55, 204, - 161, 239, 138, 118, 237, 137, 204, 161, 239, 138, 126, 217, 53, 230, 239, - 217, 47, 82, 8, 6, 1, 34, 3, 237, 253, 8, 6, 1, 34, 3, 165, 8, 6, 1, 34, - 3, 246, 52, 8, 6, 1, 34, 3, 208, 227, 8, 6, 1, 34, 3, 243, 231, 8, 6, 1, - 34, 3, 215, 253, 55, 8, 6, 1, 251, 109, 8, 6, 1, 247, 126, 3, 246, 231, - 8, 6, 1, 188, 3, 237, 253, 8, 6, 1, 188, 3, 165, 8, 6, 1, 188, 3, 246, - 52, 8, 6, 1, 188, 3, 243, 231, 8, 6, 1, 235, 206, 3, 237, 253, 8, 6, 1, - 235, 206, 3, 165, 8, 6, 1, 235, 206, 3, 246, 52, 8, 6, 1, 235, 206, 3, - 243, 231, 8, 6, 1, 240, 243, 8, 6, 1, 223, 164, 3, 208, 227, 8, 6, 1, - 158, 3, 237, 253, 8, 6, 1, 158, 3, 165, 8, 6, 1, 158, 3, 246, 52, 8, 6, - 1, 158, 3, 208, 227, 8, 6, 1, 158, 3, 243, 231, 223, 224, 54, 8, 6, 1, - 158, 3, 95, 8, 6, 1, 106, 3, 237, 253, 8, 6, 1, 106, 3, 165, 8, 6, 1, - 106, 3, 246, 52, 8, 6, 1, 106, 3, 243, 231, 8, 6, 1, 203, 125, 3, 165, 8, - 6, 1, 209, 40, 8, 5, 1, 213, 57, 194, 8, 5, 1, 34, 3, 237, 253, 8, 5, 1, - 34, 3, 165, 8, 5, 1, 34, 3, 246, 52, 8, 5, 1, 34, 3, 208, 227, 8, 5, 1, - 34, 3, 243, 231, 8, 5, 1, 34, 3, 215, 253, 55, 8, 5, 1, 251, 109, 8, 5, - 1, 247, 126, 3, 246, 231, 8, 5, 1, 188, 3, 237, 253, 8, 5, 1, 188, 3, - 165, 8, 5, 1, 188, 3, 246, 52, 8, 5, 1, 188, 3, 243, 231, 8, 5, 1, 235, - 206, 3, 237, 253, 8, 5, 1, 235, 206, 3, 165, 8, 5, 1, 235, 206, 3, 246, - 52, 8, 5, 1, 235, 206, 3, 243, 231, 8, 5, 1, 240, 243, 8, 5, 1, 223, 164, - 3, 208, 227, 8, 5, 1, 158, 3, 237, 253, 8, 5, 1, 158, 3, 165, 8, 5, 1, - 158, 3, 246, 52, 8, 5, 1, 158, 3, 208, 227, 8, 5, 1, 158, 3, 243, 231, - 243, 137, 54, 8, 5, 1, 158, 3, 95, 8, 5, 1, 106, 3, 237, 253, 8, 5, 1, - 106, 3, 165, 8, 5, 1, 106, 3, 246, 52, 8, 5, 1, 106, 3, 243, 231, 8, 5, - 1, 203, 125, 3, 165, 8, 5, 1, 209, 40, 8, 5, 1, 203, 125, 3, 243, 231, 8, - 6, 1, 34, 3, 225, 170, 8, 5, 1, 34, 3, 225, 170, 8, 6, 1, 34, 3, 247, - 214, 8, 5, 1, 34, 3, 247, 214, 8, 6, 1, 34, 3, 220, 62, 8, 5, 1, 34, 3, - 220, 62, 8, 6, 1, 247, 126, 3, 165, 8, 5, 1, 247, 126, 3, 165, 8, 6, 1, - 247, 126, 3, 246, 52, 8, 5, 1, 247, 126, 3, 246, 52, 8, 6, 1, 247, 126, - 3, 70, 55, 8, 5, 1, 247, 126, 3, 70, 55, 8, 6, 1, 247, 126, 3, 247, 29, - 8, 5, 1, 247, 126, 3, 247, 29, 8, 6, 1, 245, 52, 3, 247, 29, 8, 5, 1, - 245, 52, 3, 247, 29, 8, 6, 1, 245, 52, 3, 95, 8, 5, 1, 245, 52, 3, 95, 8, - 6, 1, 188, 3, 225, 170, 8, 5, 1, 188, 3, 225, 170, 8, 6, 1, 188, 3, 247, - 214, 8, 5, 1, 188, 3, 247, 214, 8, 6, 1, 188, 3, 70, 55, 8, 5, 1, 188, 3, - 70, 55, 8, 6, 1, 188, 3, 220, 62, 8, 5, 1, 188, 3, 220, 62, 8, 6, 1, 188, - 3, 247, 29, 8, 5, 1, 188, 3, 247, 29, 8, 6, 1, 239, 76, 3, 246, 52, 8, 5, - 1, 239, 76, 3, 246, 52, 8, 6, 1, 239, 76, 3, 247, 214, 8, 5, 1, 239, 76, - 3, 247, 214, 8, 6, 1, 239, 76, 3, 70, 55, 8, 5, 1, 239, 76, 3, 70, 55, 8, - 6, 1, 239, 76, 3, 246, 231, 8, 5, 1, 239, 76, 3, 246, 231, 8, 6, 1, 237, - 172, 3, 246, 52, 8, 5, 1, 237, 172, 3, 246, 52, 8, 6, 1, 237, 172, 3, 95, - 8, 5, 1, 237, 172, 3, 95, 8, 6, 1, 235, 206, 3, 208, 227, 8, 5, 1, 235, - 206, 3, 208, 227, 8, 6, 1, 235, 206, 3, 225, 170, 8, 5, 1, 235, 206, 3, - 225, 170, 8, 6, 1, 235, 206, 3, 247, 214, 8, 5, 1, 235, 206, 3, 247, 214, - 8, 6, 1, 235, 206, 3, 220, 62, 8, 5, 1, 235, 206, 3, 220, 62, 8, 6, 1, - 235, 206, 3, 70, 55, 8, 5, 1, 243, 84, 75, 8, 6, 32, 231, 81, 8, 5, 32, - 231, 81, 8, 6, 1, 230, 185, 3, 246, 52, 8, 5, 1, 230, 185, 3, 246, 52, 8, - 6, 1, 230, 55, 3, 246, 231, 8, 5, 1, 230, 55, 3, 246, 231, 8, 5, 1, 228, - 231, 8, 6, 1, 228, 131, 3, 165, 8, 5, 1, 228, 131, 3, 165, 8, 6, 1, 228, - 131, 3, 246, 231, 8, 5, 1, 228, 131, 3, 246, 231, 8, 6, 1, 228, 131, 3, - 247, 29, 8, 5, 1, 228, 131, 3, 247, 29, 8, 6, 1, 228, 131, 3, 101, 243, - 85, 8, 5, 1, 228, 131, 3, 101, 243, 85, 8, 6, 1, 228, 131, 3, 95, 8, 5, - 1, 228, 131, 3, 95, 8, 6, 1, 223, 164, 3, 165, 8, 5, 1, 223, 164, 3, 165, - 8, 6, 1, 223, 164, 3, 246, 231, 8, 5, 1, 223, 164, 3, 246, 231, 8, 6, 1, - 223, 164, 3, 247, 29, 8, 5, 1, 223, 164, 3, 247, 29, 8, 5, 1, 223, 164, - 217, 251, 247, 137, 250, 160, 8, 6, 1, 241, 78, 8, 5, 1, 241, 78, 8, 6, - 1, 158, 3, 225, 170, 8, 5, 1, 158, 3, 225, 170, 8, 6, 1, 158, 3, 247, - 214, 8, 5, 1, 158, 3, 247, 214, 8, 6, 1, 158, 3, 52, 165, 8, 5, 1, 158, - 3, 52, 165, 8, 6, 32, 220, 73, 8, 5, 32, 220, 73, 8, 6, 1, 217, 1, 3, - 165, 8, 5, 1, 217, 1, 3, 165, 8, 6, 1, 217, 1, 3, 246, 231, 8, 5, 1, 217, - 1, 3, 246, 231, 8, 6, 1, 217, 1, 3, 247, 29, 8, 5, 1, 217, 1, 3, 247, 29, - 8, 6, 1, 215, 94, 3, 165, 8, 5, 1, 215, 94, 3, 165, 8, 6, 1, 215, 94, 3, - 246, 52, 8, 5, 1, 215, 94, 3, 246, 52, 8, 6, 1, 215, 94, 3, 246, 231, 8, - 5, 1, 215, 94, 3, 246, 231, 8, 6, 1, 215, 94, 3, 247, 29, 8, 5, 1, 215, - 94, 3, 247, 29, 8, 6, 1, 210, 70, 3, 246, 231, 8, 5, 1, 210, 70, 3, 246, - 231, 8, 6, 1, 210, 70, 3, 247, 29, 8, 5, 1, 210, 70, 3, 247, 29, 8, 6, 1, - 210, 70, 3, 95, 8, 5, 1, 210, 70, 3, 95, 8, 6, 1, 106, 3, 208, 227, 8, 5, - 1, 106, 3, 208, 227, 8, 6, 1, 106, 3, 225, 170, 8, 5, 1, 106, 3, 225, - 170, 8, 6, 1, 106, 3, 247, 214, 8, 5, 1, 106, 3, 247, 214, 8, 6, 1, 106, - 3, 215, 253, 55, 8, 5, 1, 106, 3, 215, 253, 55, 8, 6, 1, 106, 3, 52, 165, - 8, 5, 1, 106, 3, 52, 165, 8, 6, 1, 106, 3, 220, 62, 8, 5, 1, 106, 3, 220, - 62, 8, 6, 1, 204, 145, 3, 246, 52, 8, 5, 1, 204, 145, 3, 246, 52, 8, 6, - 1, 203, 125, 3, 246, 52, 8, 5, 1, 203, 125, 3, 246, 52, 8, 6, 1, 203, - 125, 3, 243, 231, 8, 6, 1, 202, 160, 3, 165, 8, 5, 1, 202, 160, 3, 165, - 8, 6, 1, 202, 160, 3, 70, 55, 8, 5, 1, 202, 160, 3, 70, 55, 8, 6, 1, 202, - 160, 3, 247, 29, 8, 5, 1, 202, 160, 3, 247, 29, 8, 5, 1, 163, 194, 8, 5, - 1, 66, 3, 95, 8, 6, 1, 66, 3, 113, 8, 6, 1, 66, 3, 208, 142, 8, 5, 1, 66, - 3, 208, 142, 8, 6, 1, 143, 195, 8, 5, 1, 143, 195, 8, 6, 1, 171, 78, 8, - 6, 1, 247, 126, 3, 113, 8, 5, 1, 247, 126, 3, 113, 8, 6, 1, 251, 84, 245, - 51, 8, 6, 1, 245, 52, 3, 113, 8, 6, 1, 245, 52, 3, 208, 142, 8, 5, 1, - 245, 52, 3, 208, 142, 8, 5, 1, 207, 174, 244, 37, 8, 6, 1, 216, 73, 74, - 8, 6, 1, 214, 192, 8, 6, 1, 171, 74, 8, 6, 1, 240, 175, 3, 113, 8, 5, 1, - 240, 175, 3, 113, 8, 6, 1, 239, 76, 3, 113, 8, 6, 1, 238, 235, 8, 5, 1, - 235, 255, 8, 6, 1, 230, 230, 8, 6, 1, 235, 206, 3, 95, 8, 6, 1, 230, 55, - 3, 113, 8, 5, 1, 230, 55, 3, 113, 8, 5, 1, 228, 131, 3, 142, 8, 5, 1, - 228, 26, 3, 95, 8, 6, 1, 207, 174, 226, 185, 8, 6, 1, 223, 164, 3, 49, - 113, 8, 5, 1, 223, 164, 3, 163, 50, 227, 210, 8, 6, 1, 158, 3, 101, 208, - 227, 8, 6, 1, 158, 3, 236, 53, 8, 5, 1, 158, 3, 236, 53, 8, 6, 1, 220, - 57, 8, 5, 1, 220, 57, 8, 6, 1, 219, 185, 3, 113, 8, 5, 1, 219, 185, 3, - 113, 8, 1, 202, 216, 8, 6, 1, 143, 108, 8, 5, 1, 143, 108, 8, 6, 1, 241, - 7, 8, 1, 216, 73, 241, 8, 227, 14, 8, 5, 1, 210, 70, 3, 219, 142, 113, 8, - 6, 1, 210, 70, 3, 113, 8, 5, 1, 210, 70, 3, 113, 8, 6, 1, 210, 70, 3, - 216, 79, 113, 8, 6, 1, 106, 3, 236, 53, 8, 5, 1, 106, 3, 236, 53, 8, 6, - 1, 206, 216, 8, 6, 1, 206, 165, 3, 113, 8, 6, 1, 203, 125, 3, 113, 8, 5, - 1, 203, 125, 3, 113, 8, 6, 1, 202, 160, 3, 95, 8, 5, 1, 202, 160, 3, 95, - 8, 6, 1, 240, 177, 8, 6, 1, 240, 178, 216, 72, 8, 5, 1, 240, 178, 216, - 72, 8, 5, 1, 240, 178, 3, 209, 248, 8, 1, 120, 3, 95, 8, 6, 1, 143, 170, - 8, 5, 1, 143, 170, 8, 1, 230, 239, 238, 45, 211, 62, 3, 95, 8, 1, 203, - 199, 8, 1, 244, 30, 246, 27, 8, 1, 227, 254, 246, 27, 8, 1, 250, 248, - 246, 27, 8, 1, 216, 79, 246, 27, 8, 6, 1, 242, 1, 3, 247, 29, 8, 6, 1, - 245, 52, 3, 5, 1, 202, 160, 3, 247, 29, 8, 5, 1, 242, 1, 3, 247, 29, 8, - 6, 1, 227, 81, 8, 6, 1, 228, 131, 3, 5, 1, 230, 184, 8, 5, 1, 227, 81, 8, - 6, 1, 222, 49, 8, 6, 1, 223, 164, 3, 5, 1, 230, 184, 8, 5, 1, 222, 49, 8, - 6, 1, 34, 3, 247, 29, 8, 5, 1, 34, 3, 247, 29, 8, 6, 1, 235, 206, 3, 247, - 29, 8, 5, 1, 235, 206, 3, 247, 29, 8, 6, 1, 158, 3, 247, 29, 8, 5, 1, - 158, 3, 247, 29, 8, 6, 1, 106, 3, 247, 29, 8, 5, 1, 106, 3, 247, 29, 8, - 6, 1, 106, 3, 243, 232, 25, 225, 170, 8, 5, 1, 106, 3, 243, 232, 25, 225, - 170, 8, 6, 1, 106, 3, 243, 232, 25, 165, 8, 5, 1, 106, 3, 243, 232, 25, - 165, 8, 6, 1, 106, 3, 243, 232, 25, 247, 29, 8, 5, 1, 106, 3, 243, 232, - 25, 247, 29, 8, 6, 1, 106, 3, 243, 232, 25, 237, 253, 8, 5, 1, 106, 3, - 243, 232, 25, 237, 253, 8, 5, 1, 207, 174, 74, 8, 6, 1, 34, 3, 243, 232, - 25, 225, 170, 8, 5, 1, 34, 3, 243, 232, 25, 225, 170, 8, 6, 1, 34, 3, 70, - 87, 25, 225, 170, 8, 5, 1, 34, 3, 70, 87, 25, 225, 170, 8, 6, 1, 251, - 110, 3, 225, 170, 8, 5, 1, 251, 110, 3, 225, 170, 8, 6, 1, 239, 76, 3, - 95, 8, 5, 1, 239, 76, 3, 95, 8, 6, 1, 239, 76, 3, 247, 29, 8, 5, 1, 239, - 76, 3, 247, 29, 8, 6, 1, 230, 55, 3, 247, 29, 8, 5, 1, 230, 55, 3, 247, - 29, 8, 6, 1, 158, 3, 220, 62, 8, 5, 1, 158, 3, 220, 62, 8, 6, 1, 158, 3, - 220, 63, 25, 225, 170, 8, 5, 1, 158, 3, 220, 63, 25, 225, 170, 8, 6, 1, - 240, 178, 3, 247, 29, 8, 5, 1, 240, 178, 3, 247, 29, 8, 5, 1, 230, 185, - 3, 247, 29, 8, 6, 1, 242, 0, 8, 6, 1, 245, 52, 3, 5, 1, 202, 159, 8, 5, - 1, 242, 0, 8, 6, 1, 239, 76, 3, 165, 8, 5, 1, 239, 76, 3, 165, 8, 6, 1, - 235, 252, 8, 6, 1, 203, 199, 8, 6, 1, 223, 164, 3, 237, 253, 8, 5, 1, - 223, 164, 3, 237, 253, 8, 6, 1, 34, 3, 215, 253, 87, 25, 165, 8, 5, 1, - 34, 3, 215, 253, 87, 25, 165, 8, 6, 1, 251, 110, 3, 165, 8, 5, 1, 251, - 110, 3, 165, 8, 6, 1, 158, 3, 211, 32, 25, 165, 8, 5, 1, 158, 3, 211, 32, - 25, 165, 8, 6, 1, 34, 3, 52, 237, 253, 8, 5, 1, 34, 3, 52, 237, 253, 8, - 6, 1, 34, 3, 230, 239, 247, 214, 8, 5, 1, 34, 3, 230, 239, 247, 214, 8, - 6, 1, 188, 3, 52, 237, 253, 8, 5, 1, 188, 3, 52, 237, 253, 8, 6, 1, 188, - 3, 230, 239, 247, 214, 8, 5, 1, 188, 3, 230, 239, 247, 214, 8, 6, 1, 235, - 206, 3, 52, 237, 253, 8, 5, 1, 235, 206, 3, 52, 237, 253, 8, 6, 1, 235, - 206, 3, 230, 239, 247, 214, 8, 5, 1, 235, 206, 3, 230, 239, 247, 214, 8, - 6, 1, 158, 3, 52, 237, 253, 8, 5, 1, 158, 3, 52, 237, 253, 8, 6, 1, 158, - 3, 230, 239, 247, 214, 8, 5, 1, 158, 3, 230, 239, 247, 214, 8, 6, 1, 217, - 1, 3, 52, 237, 253, 8, 5, 1, 217, 1, 3, 52, 237, 253, 8, 6, 1, 217, 1, 3, - 230, 239, 247, 214, 8, 5, 1, 217, 1, 3, 230, 239, 247, 214, 8, 6, 1, 106, - 3, 52, 237, 253, 8, 5, 1, 106, 3, 52, 237, 253, 8, 6, 1, 106, 3, 230, - 239, 247, 214, 8, 5, 1, 106, 3, 230, 239, 247, 214, 8, 6, 1, 215, 94, 3, - 245, 234, 56, 8, 5, 1, 215, 94, 3, 245, 234, 56, 8, 6, 1, 210, 70, 3, - 245, 234, 56, 8, 5, 1, 210, 70, 3, 245, 234, 56, 8, 6, 1, 202, 234, 8, 5, - 1, 202, 234, 8, 6, 1, 237, 172, 3, 247, 29, 8, 5, 1, 237, 172, 3, 247, - 29, 8, 6, 1, 223, 164, 3, 163, 50, 227, 210, 8, 5, 1, 245, 52, 3, 245, - 95, 8, 6, 1, 219, 216, 8, 5, 1, 219, 216, 8, 6, 1, 202, 160, 3, 113, 8, - 5, 1, 202, 160, 3, 113, 8, 6, 1, 34, 3, 70, 55, 8, 5, 1, 34, 3, 70, 55, - 8, 6, 1, 188, 3, 246, 231, 8, 5, 1, 188, 3, 246, 231, 8, 6, 1, 158, 3, - 243, 232, 25, 225, 170, 8, 5, 1, 158, 3, 243, 232, 25, 225, 170, 8, 6, 1, - 158, 3, 208, 228, 25, 225, 170, 8, 5, 1, 158, 3, 208, 228, 25, 225, 170, - 8, 6, 1, 158, 3, 70, 55, 8, 5, 1, 158, 3, 70, 55, 8, 6, 1, 158, 3, 70, - 87, 25, 225, 170, 8, 5, 1, 158, 3, 70, 87, 25, 225, 170, 8, 6, 1, 203, - 125, 3, 225, 170, 8, 5, 1, 203, 125, 3, 225, 170, 8, 5, 1, 228, 131, 3, - 245, 95, 8, 5, 1, 223, 164, 3, 245, 95, 8, 5, 1, 210, 70, 3, 245, 95, 8, - 5, 1, 243, 84, 230, 184, 8, 5, 1, 244, 130, 243, 191, 8, 5, 1, 217, 66, - 243, 191, 8, 6, 1, 34, 3, 95, 8, 6, 1, 247, 126, 3, 95, 8, 5, 1, 247, - 126, 3, 95, 8, 6, 1, 228, 131, 3, 142, 8, 6, 1, 210, 70, 3, 243, 228, 95, - 8, 5, 1, 215, 94, 3, 210, 169, 209, 248, 8, 5, 1, 202, 160, 3, 210, 169, - 209, 248, 8, 6, 1, 238, 45, 211, 61, 8, 5, 1, 238, 45, 211, 61, 8, 6, 1, - 66, 3, 95, 8, 6, 1, 106, 142, 8, 6, 1, 207, 174, 206, 164, 8, 6, 1, 188, - 3, 95, 8, 5, 1, 188, 3, 95, 8, 6, 1, 230, 185, 3, 95, 8, 5, 1, 230, 185, - 3, 95, 8, 6, 1, 5, 217, 135, 3, 236, 116, 209, 248, 8, 5, 1, 217, 135, 3, - 236, 116, 209, 248, 8, 6, 1, 217, 1, 3, 95, 8, 5, 1, 217, 1, 3, 95, 8, 6, - 1, 203, 125, 3, 95, 8, 5, 1, 203, 125, 3, 95, 8, 5, 1, 207, 174, 63, 8, - 5, 1, 251, 2, 8, 5, 1, 207, 174, 251, 2, 8, 5, 1, 66, 3, 113, 8, 5, 1, - 171, 78, 8, 5, 1, 247, 126, 3, 245, 95, 8, 5, 1, 245, 52, 3, 209, 248, 8, - 5, 1, 245, 52, 3, 113, 8, 5, 1, 216, 73, 74, 8, 5, 1, 214, 192, 8, 5, 1, - 214, 193, 3, 113, 8, 5, 1, 171, 74, 8, 5, 1, 216, 73, 171, 74, 8, 5, 1, - 216, 73, 171, 188, 3, 113, 8, 5, 1, 246, 16, 216, 73, 171, 74, 8, 5, 1, - 243, 84, 230, 185, 3, 95, 8, 5, 1, 239, 76, 3, 113, 8, 5, 1, 132, 239, - 75, 8, 1, 5, 6, 239, 75, 8, 5, 1, 238, 235, 8, 5, 1, 216, 182, 236, 53, - 8, 5, 1, 207, 174, 237, 171, 8, 5, 1, 237, 172, 3, 113, 8, 5, 1, 237, 32, - 3, 113, 8, 5, 1, 235, 206, 3, 95, 8, 5, 1, 230, 230, 8, 1, 5, 6, 75, 8, - 5, 1, 228, 131, 3, 101, 208, 227, 8, 5, 1, 228, 131, 3, 248, 124, 8, 5, - 1, 228, 131, 3, 216, 79, 113, 8, 5, 1, 227, 164, 8, 5, 1, 207, 174, 226, - 185, 8, 5, 1, 207, 174, 226, 186, 3, 163, 227, 210, 8, 5, 1, 226, 186, 3, - 113, 8, 5, 1, 223, 164, 3, 49, 113, 8, 5, 1, 223, 164, 3, 216, 79, 113, - 8, 1, 5, 6, 223, 163, 8, 5, 1, 248, 225, 78, 8, 1, 5, 6, 220, 73, 8, 5, - 1, 246, 16, 220, 36, 8, 5, 1, 218, 192, 8, 5, 1, 207, 174, 146, 8, 5, 1, - 207, 174, 217, 1, 3, 163, 227, 210, 8, 5, 1, 207, 174, 217, 1, 3, 113, 8, - 5, 1, 217, 1, 3, 163, 227, 210, 8, 5, 1, 217, 1, 3, 209, 248, 8, 5, 1, - 217, 1, 3, 239, 240, 8, 5, 1, 216, 73, 217, 1, 3, 239, 240, 8, 1, 5, 6, - 146, 8, 1, 5, 6, 230, 239, 146, 8, 5, 1, 215, 94, 3, 113, 8, 5, 1, 241, - 7, 8, 5, 1, 243, 84, 230, 185, 3, 211, 32, 25, 113, 8, 5, 1, 211, 174, - 216, 73, 241, 7, 8, 5, 1, 241, 8, 3, 245, 95, 8, 5, 1, 207, 174, 210, 69, - 8, 5, 1, 210, 70, 3, 216, 79, 113, 8, 5, 1, 106, 142, 8, 5, 1, 206, 216, - 8, 5, 1, 206, 165, 3, 113, 8, 5, 1, 207, 174, 206, 164, 8, 5, 1, 207, - 174, 204, 144, 8, 5, 1, 207, 174, 203, 124, 8, 1, 5, 6, 203, 124, 8, 5, - 1, 202, 160, 3, 216, 79, 113, 8, 5, 1, 202, 160, 3, 245, 95, 8, 5, 1, - 240, 177, 8, 5, 1, 240, 178, 3, 245, 95, 8, 1, 238, 45, 211, 61, 8, 1, - 218, 199, 205, 186, 239, 126, 8, 1, 230, 239, 238, 45, 211, 61, 8, 1, - 211, 40, 247, 125, 8, 1, 248, 70, 246, 27, 8, 1, 5, 6, 249, 255, 8, 5, 1, - 246, 16, 171, 74, 8, 1, 5, 6, 239, 76, 3, 113, 8, 1, 5, 6, 237, 171, 8, - 5, 1, 230, 185, 3, 245, 126, 8, 5, 1, 207, 174, 230, 54, 8, 1, 5, 6, 159, - 8, 5, 1, 217, 135, 3, 113, 8, 1, 238, 45, 211, 62, 3, 95, 8, 1, 216, 73, - 238, 45, 211, 62, 3, 95, 8, 5, 1, 242, 1, 243, 191, 8, 5, 1, 244, 3, 243, - 191, 8, 5, 1, 242, 1, 243, 192, 3, 245, 95, 8, 5, 1, 208, 22, 243, 191, - 8, 5, 1, 209, 137, 243, 191, 8, 5, 1, 209, 194, 243, 192, 3, 245, 95, 8, - 5, 1, 240, 39, 243, 191, 8, 5, 1, 226, 241, 243, 191, 8, 5, 1, 226, 187, - 243, 191, 8, 1, 248, 70, 218, 245, 8, 1, 248, 78, 218, 245, 8, 5, 1, 207, - 174, 237, 172, 3, 239, 240, 8, 5, 1, 207, 174, 237, 172, 3, 239, 241, 25, - 209, 248, 65, 1, 5, 237, 171, 65, 1, 5, 237, 172, 3, 113, 65, 1, 5, 230, - 184, 65, 1, 5, 146, 65, 1, 5, 207, 174, 146, 65, 1, 5, 207, 174, 217, 1, - 3, 113, 65, 1, 5, 6, 230, 239, 146, 65, 1, 5, 204, 144, 65, 1, 5, 203, - 124, 65, 1, 217, 236, 65, 1, 52, 217, 236, 65, 1, 207, 174, 245, 233, 65, - 1, 250, 160, 65, 1, 216, 73, 245, 233, 65, 1, 50, 162, 215, 252, 65, 1, - 49, 162, 215, 252, 65, 1, 238, 45, 211, 61, 65, 1, 216, 73, 238, 45, 211, - 61, 65, 1, 49, 250, 94, 65, 1, 50, 250, 94, 65, 1, 112, 250, 94, 65, 1, - 121, 250, 94, 65, 1, 246, 53, 251, 138, 247, 29, 65, 1, 80, 227, 114, 65, - 1, 225, 170, 65, 1, 251, 126, 251, 138, 65, 1, 237, 254, 251, 138, 65, 1, - 124, 80, 227, 114, 65, 1, 124, 225, 170, 65, 1, 124, 237, 254, 251, 138, - 65, 1, 124, 251, 126, 251, 138, 65, 1, 208, 82, 245, 242, 65, 1, 162, - 208, 82, 245, 242, 65, 1, 246, 216, 50, 162, 215, 252, 65, 1, 246, 216, - 49, 162, 215, 252, 65, 1, 112, 210, 3, 65, 1, 121, 210, 3, 65, 1, 91, 54, - 65, 1, 224, 103, 54, 247, 214, 70, 55, 215, 253, 55, 220, 62, 5, 208, - 227, 52, 251, 126, 251, 138, 65, 1, 216, 58, 113, 65, 1, 245, 131, 251, - 138, 65, 1, 5, 238, 235, 65, 1, 5, 159, 65, 1, 5, 194, 65, 1, 5, 203, - 196, 65, 1, 5, 216, 73, 238, 45, 211, 61, 65, 1, 240, 198, 143, 142, 65, - 1, 138, 143, 142, 65, 1, 224, 150, 143, 142, 65, 1, 124, 143, 142, 65, 1, - 240, 197, 143, 142, 65, 1, 203, 1, 244, 27, 143, 82, 65, 1, 203, 77, 244, - 27, 143, 82, 65, 1, 205, 184, 65, 1, 206, 251, 65, 1, 52, 250, 160, 65, - 1, 124, 121, 250, 94, 65, 1, 124, 112, 250, 94, 65, 1, 124, 49, 250, 94, - 65, 1, 124, 50, 250, 94, 65, 1, 124, 215, 252, 65, 1, 101, 237, 254, 251, - 138, 65, 1, 101, 52, 237, 254, 251, 138, 65, 1, 101, 52, 251, 126, 251, - 138, 65, 1, 124, 208, 227, 65, 1, 216, 188, 245, 242, 65, 1, 248, 142, - 138, 208, 161, 65, 1, 241, 84, 138, 208, 161, 65, 1, 248, 142, 124, 208, - 161, 65, 1, 241, 84, 124, 208, 161, 65, 1, 213, 34, 65, 1, 171, 213, 34, - 65, 1, 124, 49, 47, 39, 237, 254, 251, 138, 39, 251, 126, 251, 138, 39, - 246, 53, 251, 138, 39, 208, 227, 39, 225, 170, 39, 219, 198, 39, 247, - 214, 39, 70, 55, 39, 243, 231, 39, 236, 116, 55, 39, 215, 253, 55, 39, - 52, 251, 126, 251, 138, 39, 247, 29, 39, 80, 227, 115, 55, 39, 52, 80, - 227, 115, 55, 39, 52, 237, 254, 251, 138, 39, 247, 52, 39, 230, 239, 247, - 214, 39, 207, 174, 245, 234, 55, 39, 245, 234, 55, 39, 216, 73, 245, 234, - 55, 39, 245, 234, 87, 216, 16, 39, 237, 254, 251, 139, 56, 39, 251, 126, - 251, 139, 56, 39, 49, 210, 4, 56, 39, 50, 210, 4, 56, 39, 49, 250, 218, - 55, 39, 236, 53, 39, 49, 162, 215, 253, 56, 39, 112, 210, 4, 56, 39, 121, - 210, 4, 56, 39, 91, 2, 56, 39, 224, 103, 2, 56, 39, 219, 140, 236, 116, - 56, 39, 216, 79, 236, 116, 56, 39, 70, 56, 39, 243, 232, 56, 39, 215, - 253, 56, 39, 245, 234, 56, 39, 246, 231, 39, 220, 62, 39, 80, 227, 115, - 56, 39, 247, 208, 56, 39, 230, 239, 52, 250, 127, 56, 39, 247, 30, 56, - 39, 246, 53, 251, 139, 56, 39, 247, 215, 56, 39, 230, 239, 247, 215, 56, - 39, 208, 228, 56, 39, 225, 171, 56, 39, 124, 227, 114, 39, 52, 124, 227, - 114, 39, 208, 228, 219, 199, 39, 212, 228, 211, 32, 219, 199, 39, 163, - 211, 32, 219, 199, 39, 212, 228, 212, 1, 219, 199, 39, 163, 212, 1, 219, - 199, 39, 50, 162, 215, 253, 56, 39, 230, 239, 247, 208, 56, 39, 51, 56, - 39, 214, 176, 56, 39, 203, 197, 55, 39, 80, 208, 227, 39, 52, 219, 198, - 39, 237, 254, 143, 82, 39, 251, 126, 143, 82, 39, 30, 218, 239, 39, 30, - 228, 252, 39, 30, 243, 225, 208, 149, 39, 30, 202, 221, 39, 247, 208, 55, - 39, 241, 35, 2, 56, 39, 52, 80, 227, 115, 56, 39, 49, 250, 218, 56, 39, - 221, 166, 208, 228, 55, 39, 236, 122, 55, 39, 251, 7, 156, 208, 173, 55, - 39, 49, 50, 53, 56, 39, 177, 53, 56, 39, 238, 4, 230, 96, 39, 50, 250, - 95, 55, 39, 49, 162, 215, 253, 55, 39, 240, 36, 39, 203, 197, 56, 39, 49, - 250, 95, 56, 39, 50, 250, 95, 56, 39, 50, 250, 95, 25, 112, 250, 95, 56, - 39, 50, 162, 215, 253, 55, 39, 70, 87, 216, 16, 39, 250, 60, 56, 39, 52, - 215, 253, 56, 39, 202, 30, 55, 39, 52, 247, 215, 56, 39, 52, 247, 214, - 39, 52, 225, 170, 39, 52, 225, 171, 56, 39, 52, 208, 227, 39, 52, 230, - 239, 247, 214, 39, 52, 86, 53, 56, 39, 8, 5, 1, 63, 39, 8, 5, 1, 74, 39, - 8, 5, 1, 75, 39, 8, 5, 1, 78, 39, 8, 5, 1, 68, 39, 8, 5, 1, 247, 125, 39, - 8, 5, 1, 245, 51, 39, 8, 5, 1, 237, 171, 39, 8, 5, 1, 226, 185, 39, 8, 5, - 1, 146, 39, 8, 5, 1, 210, 69, 39, 8, 5, 1, 206, 164, 39, 8, 5, 1, 203, - 196, 30, 6, 1, 237, 20, 30, 5, 1, 237, 20, 30, 6, 1, 250, 126, 214, 246, - 30, 5, 1, 250, 126, 214, 246, 30, 221, 44, 54, 30, 226, 251, 221, 44, 54, - 30, 6, 1, 219, 126, 243, 199, 30, 5, 1, 219, 126, 243, 199, 30, 202, 221, - 30, 5, 216, 73, 226, 221, 212, 145, 97, 30, 5, 242, 83, 226, 221, 212, - 145, 97, 30, 5, 216, 73, 242, 83, 226, 221, 212, 145, 97, 30, 217, 47, - 82, 30, 6, 1, 202, 227, 30, 208, 149, 30, 243, 225, 208, 149, 30, 6, 1, - 251, 3, 3, 208, 149, 30, 250, 203, 209, 163, 30, 6, 1, 241, 38, 3, 208, - 149, 30, 6, 1, 240, 249, 3, 208, 149, 30, 6, 1, 230, 231, 3, 208, 149, - 30, 6, 1, 220, 35, 3, 208, 149, 30, 6, 1, 206, 217, 3, 208, 149, 30, 6, - 1, 220, 37, 3, 208, 149, 30, 5, 1, 230, 231, 3, 243, 225, 25, 208, 149, - 30, 6, 1, 251, 2, 30, 6, 1, 248, 106, 30, 6, 1, 238, 235, 30, 6, 1, 244, - 37, 30, 6, 1, 241, 37, 30, 6, 1, 202, 83, 30, 6, 1, 240, 248, 30, 6, 1, - 209, 74, 30, 6, 1, 230, 230, 30, 6, 1, 229, 247, 30, 6, 1, 228, 24, 30, - 6, 1, 223, 246, 30, 6, 1, 221, 84, 30, 6, 1, 203, 170, 30, 6, 1, 220, 34, - 30, 6, 1, 218, 167, 30, 6, 1, 216, 59, 30, 6, 1, 212, 144, 30, 6, 1, 209, - 207, 30, 6, 1, 206, 216, 30, 6, 1, 218, 192, 30, 6, 1, 246, 142, 30, 6, - 1, 217, 202, 30, 6, 1, 220, 36, 30, 6, 1, 230, 231, 3, 243, 224, 30, 6, - 1, 206, 217, 3, 243, 224, 30, 5, 1, 251, 3, 3, 208, 149, 30, 5, 1, 241, - 38, 3, 208, 149, 30, 5, 1, 240, 249, 3, 208, 149, 30, 5, 1, 230, 231, 3, - 208, 149, 30, 5, 1, 206, 217, 3, 243, 225, 25, 208, 149, 30, 5, 1, 251, - 2, 30, 5, 1, 248, 106, 30, 5, 1, 238, 235, 30, 5, 1, 244, 37, 30, 5, 1, - 241, 37, 30, 5, 1, 202, 83, 30, 5, 1, 240, 248, 30, 5, 1, 209, 74, 30, 5, - 1, 230, 230, 30, 5, 1, 229, 247, 30, 5, 1, 228, 24, 30, 5, 1, 223, 246, - 30, 5, 1, 221, 84, 30, 5, 1, 203, 170, 30, 5, 1, 220, 34, 30, 5, 1, 218, - 167, 30, 5, 1, 216, 59, 30, 5, 1, 46, 212, 144, 30, 5, 1, 212, 144, 30, - 5, 1, 209, 207, 30, 5, 1, 206, 216, 30, 5, 1, 218, 192, 30, 5, 1, 246, - 142, 30, 5, 1, 217, 202, 30, 5, 1, 220, 36, 30, 5, 1, 230, 231, 3, 243, - 224, 30, 5, 1, 206, 217, 3, 243, 224, 30, 5, 1, 220, 35, 3, 208, 149, 30, - 5, 1, 206, 217, 3, 208, 149, 30, 5, 1, 220, 37, 3, 208, 149, 30, 6, 230, - 19, 97, 30, 248, 107, 97, 30, 209, 75, 97, 30, 206, 217, 3, 236, 116, 97, - 30, 206, 217, 3, 251, 126, 25, 236, 116, 97, 30, 206, 217, 3, 243, 232, - 25, 236, 116, 97, 30, 218, 193, 97, 30, 218, 168, 97, 30, 230, 19, 97, - 30, 1, 250, 126, 229, 0, 30, 5, 1, 250, 126, 229, 0, 30, 1, 211, 71, 30, - 5, 1, 211, 71, 30, 1, 243, 199, 30, 5, 1, 243, 199, 30, 1, 229, 0, 30, 5, - 1, 229, 0, 30, 1, 214, 246, 30, 5, 1, 214, 246, 84, 6, 1, 213, 35, 84, 5, - 1, 213, 35, 84, 6, 1, 240, 45, 84, 5, 1, 240, 45, 84, 6, 1, 229, 127, 84, - 5, 1, 229, 127, 84, 6, 1, 236, 107, 84, 5, 1, 236, 107, 84, 6, 1, 238, - 230, 84, 5, 1, 238, 230, 84, 6, 1, 213, 1, 84, 5, 1, 213, 1, 84, 6, 1, - 244, 52, 84, 5, 1, 244, 52, 30, 229, 248, 97, 30, 216, 60, 97, 30, 226, - 221, 212, 145, 97, 30, 1, 202, 227, 30, 6, 209, 75, 97, 30, 226, 221, - 241, 38, 97, 30, 216, 73, 226, 221, 241, 38, 97, 30, 6, 1, 212, 242, 30, - 5, 1, 212, 242, 30, 6, 226, 221, 212, 145, 97, 30, 6, 1, 214, 243, 30, 5, - 1, 214, 243, 30, 216, 60, 3, 211, 32, 97, 30, 6, 216, 73, 226, 221, 212, - 145, 97, 30, 6, 242, 83, 226, 221, 212, 145, 97, 30, 6, 216, 73, 242, 83, - 226, 221, 212, 145, 97, 36, 6, 1, 231, 111, 3, 237, 253, 36, 6, 1, 230, - 234, 36, 6, 1, 243, 130, 36, 6, 1, 238, 52, 36, 6, 1, 207, 11, 231, 110, - 36, 6, 1, 241, 252, 36, 6, 1, 247, 135, 75, 36, 6, 1, 203, 11, 36, 6, 1, - 230, 161, 36, 6, 1, 227, 80, 36, 6, 1, 222, 41, 36, 6, 1, 208, 8, 36, 6, - 1, 229, 49, 36, 6, 1, 235, 206, 3, 237, 253, 36, 6, 1, 212, 228, 68, 36, - 6, 1, 241, 248, 36, 6, 1, 63, 36, 6, 1, 248, 162, 36, 6, 1, 206, 55, 36, - 6, 1, 238, 105, 36, 6, 1, 244, 75, 36, 6, 1, 231, 110, 36, 6, 1, 202, 71, - 36, 6, 1, 202, 92, 36, 6, 1, 75, 36, 6, 1, 212, 228, 75, 36, 6, 1, 173, - 36, 6, 1, 241, 122, 36, 6, 1, 241, 103, 36, 6, 1, 241, 92, 36, 6, 1, 78, - 36, 6, 1, 219, 34, 36, 6, 1, 241, 28, 36, 6, 1, 241, 17, 36, 6, 1, 209, - 187, 36, 6, 1, 68, 36, 6, 1, 241, 154, 36, 6, 1, 152, 36, 6, 1, 208, 14, - 36, 6, 1, 246, 170, 36, 6, 1, 213, 90, 36, 6, 1, 213, 46, 36, 6, 1, 237, - 91, 54, 36, 6, 1, 203, 30, 36, 6, 1, 212, 7, 54, 36, 6, 1, 74, 36, 6, 1, - 202, 213, 36, 6, 1, 198, 36, 5, 1, 63, 36, 5, 1, 248, 162, 36, 5, 1, 206, - 55, 36, 5, 1, 238, 105, 36, 5, 1, 244, 75, 36, 5, 1, 231, 110, 36, 5, 1, - 202, 71, 36, 5, 1, 202, 92, 36, 5, 1, 75, 36, 5, 1, 212, 228, 75, 36, 5, - 1, 173, 36, 5, 1, 241, 122, 36, 5, 1, 241, 103, 36, 5, 1, 241, 92, 36, 5, - 1, 78, 36, 5, 1, 219, 34, 36, 5, 1, 241, 28, 36, 5, 1, 241, 17, 36, 5, 1, - 209, 187, 36, 5, 1, 68, 36, 5, 1, 241, 154, 36, 5, 1, 152, 36, 5, 1, 208, - 14, 36, 5, 1, 246, 170, 36, 5, 1, 213, 90, 36, 5, 1, 213, 46, 36, 5, 1, - 237, 91, 54, 36, 5, 1, 203, 30, 36, 5, 1, 212, 7, 54, 36, 5, 1, 74, 36, - 5, 1, 202, 213, 36, 5, 1, 198, 36, 5, 1, 231, 111, 3, 237, 253, 36, 5, 1, - 230, 234, 36, 5, 1, 243, 130, 36, 5, 1, 238, 52, 36, 5, 1, 207, 11, 231, - 110, 36, 5, 1, 241, 252, 36, 5, 1, 247, 135, 75, 36, 5, 1, 203, 11, 36, - 5, 1, 230, 161, 36, 5, 1, 227, 80, 36, 5, 1, 222, 41, 36, 5, 1, 208, 8, - 36, 5, 1, 229, 49, 36, 5, 1, 235, 206, 3, 237, 253, 36, 5, 1, 212, 228, - 68, 36, 5, 1, 241, 248, 36, 6, 1, 220, 36, 36, 5, 1, 220, 36, 36, 6, 1, - 203, 66, 36, 5, 1, 203, 66, 36, 6, 1, 230, 228, 74, 36, 5, 1, 230, 228, - 74, 36, 6, 1, 227, 86, 202, 183, 36, 5, 1, 227, 86, 202, 183, 36, 6, 1, - 230, 228, 227, 86, 202, 183, 36, 5, 1, 230, 228, 227, 86, 202, 183, 36, - 6, 1, 248, 73, 202, 183, 36, 5, 1, 248, 73, 202, 183, 36, 6, 1, 230, 228, - 248, 73, 202, 183, 36, 5, 1, 230, 228, 248, 73, 202, 183, 36, 6, 1, 228, - 225, 36, 5, 1, 228, 225, 36, 6, 1, 217, 202, 36, 5, 1, 217, 202, 36, 6, - 1, 239, 235, 36, 5, 1, 239, 235, 36, 6, 1, 230, 186, 36, 5, 1, 230, 186, - 36, 6, 1, 230, 187, 3, 52, 237, 254, 251, 138, 36, 5, 1, 230, 187, 3, 52, - 237, 254, 251, 138, 36, 6, 1, 207, 14, 36, 5, 1, 207, 14, 36, 6, 1, 215, - 191, 220, 36, 36, 5, 1, 215, 191, 220, 36, 36, 6, 1, 220, 37, 3, 208, - 197, 36, 5, 1, 220, 37, 3, 208, 197, 36, 6, 1, 219, 224, 36, 5, 1, 219, - 224, 36, 6, 1, 229, 0, 36, 5, 1, 229, 0, 36, 209, 35, 54, 39, 36, 208, - 197, 39, 36, 219, 141, 39, 36, 244, 142, 218, 71, 39, 36, 217, 196, 218, - 71, 39, 36, 218, 55, 39, 36, 236, 12, 209, 35, 54, 39, 36, 224, 114, 54, - 36, 6, 1, 212, 228, 235, 206, 3, 209, 248, 36, 5, 1, 212, 228, 235, 206, - 3, 209, 248, 36, 6, 1, 213, 139, 54, 36, 5, 1, 213, 139, 54, 36, 6, 1, - 241, 29, 3, 208, 254, 36, 5, 1, 241, 29, 3, 208, 254, 36, 6, 1, 238, 106, - 3, 206, 215, 36, 5, 1, 238, 106, 3, 206, 215, 36, 6, 1, 238, 106, 3, 95, - 36, 5, 1, 238, 106, 3, 95, 36, 6, 1, 238, 106, 3, 101, 113, 36, 5, 1, - 238, 106, 3, 101, 113, 36, 6, 1, 202, 72, 3, 244, 20, 36, 5, 1, 202, 72, - 3, 244, 20, 36, 6, 1, 202, 93, 3, 244, 20, 36, 5, 1, 202, 93, 3, 244, 20, - 36, 6, 1, 230, 44, 3, 244, 20, 36, 5, 1, 230, 44, 3, 244, 20, 36, 6, 1, - 230, 44, 3, 80, 95, 36, 5, 1, 230, 44, 3, 80, 95, 36, 6, 1, 230, 44, 3, - 95, 36, 5, 1, 230, 44, 3, 95, 36, 6, 1, 248, 214, 173, 36, 5, 1, 248, - 214, 173, 36, 6, 1, 241, 93, 3, 244, 20, 36, 5, 1, 241, 93, 3, 244, 20, - 36, 6, 32, 241, 93, 238, 105, 36, 5, 32, 241, 93, 238, 105, 36, 6, 1, - 219, 35, 3, 101, 113, 36, 5, 1, 219, 35, 3, 101, 113, 36, 6, 1, 251, 145, - 152, 36, 5, 1, 251, 145, 152, 36, 6, 1, 241, 18, 3, 244, 20, 36, 5, 1, - 241, 18, 3, 244, 20, 36, 6, 1, 209, 188, 3, 244, 20, 36, 5, 1, 209, 188, - 3, 244, 20, 36, 6, 1, 211, 53, 68, 36, 5, 1, 211, 53, 68, 36, 6, 1, 211, - 53, 106, 3, 95, 36, 5, 1, 211, 53, 106, 3, 95, 36, 6, 1, 237, 160, 3, - 244, 20, 36, 5, 1, 237, 160, 3, 244, 20, 36, 6, 32, 209, 188, 208, 14, - 36, 5, 32, 209, 188, 208, 14, 36, 6, 1, 246, 171, 3, 244, 20, 36, 5, 1, - 246, 171, 3, 244, 20, 36, 6, 1, 246, 171, 3, 80, 95, 36, 5, 1, 246, 171, - 3, 80, 95, 36, 6, 1, 213, 12, 36, 5, 1, 213, 12, 36, 6, 1, 251, 145, 246, - 170, 36, 5, 1, 251, 145, 246, 170, 36, 6, 1, 251, 145, 246, 171, 3, 244, - 20, 36, 5, 1, 251, 145, 246, 171, 3, 244, 20, 36, 1, 219, 133, 36, 6, 1, - 202, 72, 3, 247, 214, 36, 5, 1, 202, 72, 3, 247, 214, 36, 6, 1, 230, 44, - 3, 113, 36, 5, 1, 230, 44, 3, 113, 36, 6, 1, 241, 123, 3, 209, 248, 36, - 5, 1, 241, 123, 3, 209, 248, 36, 6, 1, 241, 93, 3, 113, 36, 5, 1, 241, - 93, 3, 113, 36, 6, 1, 241, 93, 3, 209, 248, 36, 5, 1, 241, 93, 3, 209, - 248, 36, 6, 1, 229, 138, 246, 170, 36, 5, 1, 229, 138, 246, 170, 36, 6, - 1, 241, 104, 3, 209, 248, 36, 5, 1, 241, 104, 3, 209, 248, 36, 5, 1, 219, - 133, 36, 6, 1, 34, 3, 247, 214, 36, 5, 1, 34, 3, 247, 214, 36, 6, 1, 34, - 3, 243, 231, 36, 5, 1, 34, 3, 243, 231, 36, 6, 32, 34, 231, 110, 36, 5, - 32, 34, 231, 110, 36, 6, 1, 231, 111, 3, 247, 214, 36, 5, 1, 231, 111, 3, - 247, 214, 36, 6, 1, 214, 192, 36, 5, 1, 214, 192, 36, 6, 1, 214, 193, 3, - 243, 231, 36, 5, 1, 214, 193, 3, 243, 231, 36, 6, 1, 202, 72, 3, 243, - 231, 36, 5, 1, 202, 72, 3, 243, 231, 36, 6, 1, 202, 93, 3, 243, 231, 36, - 5, 1, 202, 93, 3, 243, 231, 36, 6, 1, 251, 145, 241, 252, 36, 5, 1, 251, - 145, 241, 252, 36, 6, 1, 235, 206, 3, 225, 170, 36, 5, 1, 235, 206, 3, - 225, 170, 36, 6, 1, 235, 206, 3, 243, 231, 36, 5, 1, 235, 206, 3, 243, - 231, 36, 6, 1, 158, 3, 243, 231, 36, 5, 1, 158, 3, 243, 231, 36, 6, 1, - 248, 225, 78, 36, 5, 1, 248, 225, 78, 36, 6, 1, 248, 225, 158, 3, 243, - 231, 36, 5, 1, 248, 225, 158, 3, 243, 231, 36, 6, 1, 188, 3, 243, 231, - 36, 5, 1, 188, 3, 243, 231, 36, 6, 1, 106, 3, 225, 170, 36, 5, 1, 106, 3, - 225, 170, 36, 6, 1, 106, 3, 243, 231, 36, 5, 1, 106, 3, 243, 231, 36, 6, - 1, 106, 3, 52, 165, 36, 5, 1, 106, 3, 52, 165, 36, 6, 1, 246, 171, 3, - 243, 231, 36, 5, 1, 246, 171, 3, 243, 231, 36, 6, 1, 238, 106, 3, 244, - 20, 36, 5, 1, 238, 106, 3, 244, 20, 36, 6, 1, 203, 31, 3, 243, 231, 36, - 5, 1, 203, 31, 3, 243, 231, 36, 6, 1, 238, 106, 3, 211, 32, 25, 113, 36, - 5, 1, 238, 106, 3, 211, 32, 25, 113, 36, 6, 1, 237, 160, 3, 113, 36, 5, - 1, 237, 160, 3, 113, 36, 6, 1, 237, 160, 3, 95, 36, 5, 1, 237, 160, 3, - 95, 36, 6, 1, 229, 10, 244, 75, 36, 5, 1, 229, 10, 244, 75, 36, 6, 1, - 229, 10, 243, 130, 36, 5, 1, 229, 10, 243, 130, 36, 6, 1, 229, 10, 202, - 21, 36, 5, 1, 229, 10, 202, 21, 36, 6, 1, 229, 10, 241, 244, 36, 5, 1, - 229, 10, 241, 244, 36, 6, 1, 229, 10, 227, 80, 36, 5, 1, 229, 10, 227, - 80, 36, 6, 1, 229, 10, 222, 41, 36, 5, 1, 229, 10, 222, 41, 36, 6, 1, - 229, 10, 212, 71, 36, 5, 1, 229, 10, 212, 71, 36, 6, 1, 229, 10, 208, - 191, 36, 5, 1, 229, 10, 208, 191, 36, 6, 1, 216, 73, 202, 92, 36, 5, 1, - 216, 73, 202, 92, 36, 6, 1, 241, 123, 3, 113, 36, 5, 1, 241, 123, 3, 113, - 36, 6, 1, 227, 161, 36, 5, 1, 227, 161, 36, 6, 1, 216, 61, 36, 5, 1, 216, - 61, 36, 6, 1, 203, 99, 36, 5, 1, 203, 99, 36, 6, 1, 217, 126, 36, 5, 1, - 217, 126, 36, 6, 1, 204, 62, 36, 5, 1, 204, 62, 36, 6, 1, 251, 26, 173, - 36, 5, 1, 251, 26, 173, 36, 6, 1, 241, 123, 3, 101, 113, 36, 5, 1, 241, - 123, 3, 101, 113, 36, 6, 1, 241, 93, 3, 101, 113, 36, 5, 1, 241, 93, 3, - 101, 113, 36, 6, 1, 219, 35, 3, 244, 20, 36, 5, 1, 219, 35, 3, 244, 20, - 36, 6, 1, 213, 13, 3, 244, 20, 36, 5, 1, 213, 13, 3, 244, 20, 36, 6, 1, - 241, 93, 3, 49, 113, 36, 5, 1, 241, 93, 3, 49, 113, 36, 6, 1, 241, 237, - 36, 5, 1, 241, 237, 36, 6, 1, 244, 124, 36, 5, 1, 244, 124, 36, 6, 1, - 241, 123, 3, 244, 20, 36, 5, 1, 241, 123, 3, 244, 20, 178, 6, 1, 250, 5, - 178, 6, 1, 248, 122, 178, 6, 1, 238, 69, 178, 6, 1, 244, 212, 178, 6, 1, - 241, 167, 178, 6, 1, 202, 116, 178, 6, 1, 241, 147, 178, 6, 1, 240, 250, - 178, 6, 1, 135, 178, 6, 1, 202, 71, 178, 6, 1, 231, 19, 178, 6, 1, 227, - 83, 178, 6, 1, 203, 174, 178, 6, 1, 247, 92, 178, 6, 1, 229, 180, 178, 6, - 1, 236, 136, 178, 6, 1, 230, 181, 178, 6, 1, 238, 116, 178, 6, 1, 246, - 160, 178, 6, 1, 224, 240, 178, 6, 1, 203, 11, 178, 6, 1, 221, 152, 178, - 6, 1, 213, 90, 178, 6, 1, 205, 189, 178, 6, 1, 246, 199, 178, 6, 1, 219, - 16, 178, 6, 1, 230, 144, 178, 6, 1, 216, 220, 178, 6, 1, 214, 155, 178, - 6, 1, 205, 234, 178, 6, 1, 208, 194, 178, 6, 1, 216, 122, 178, 6, 1, 245, - 254, 178, 6, 1, 202, 252, 178, 6, 1, 218, 102, 178, 6, 1, 229, 191, 178, - 6, 1, 220, 60, 178, 6, 1, 240, 47, 178, 65, 1, 49, 162, 215, 252, 178, - 250, 160, 178, 241, 96, 82, 178, 240, 212, 82, 178, 245, 233, 178, 217, - 47, 82, 178, 251, 146, 82, 178, 5, 1, 250, 5, 178, 5, 1, 248, 122, 178, - 5, 1, 238, 69, 178, 5, 1, 244, 212, 178, 5, 1, 241, 167, 178, 5, 1, 202, - 116, 178, 5, 1, 241, 147, 178, 5, 1, 240, 250, 178, 5, 1, 135, 178, 5, 1, - 202, 71, 178, 5, 1, 231, 19, 178, 5, 1, 227, 83, 178, 5, 1, 203, 174, - 178, 5, 1, 247, 92, 178, 5, 1, 229, 180, 178, 5, 1, 236, 136, 178, 5, 1, - 230, 181, 178, 5, 1, 238, 116, 178, 5, 1, 246, 160, 178, 5, 1, 224, 240, - 178, 5, 1, 203, 11, 178, 5, 1, 221, 152, 178, 5, 1, 213, 90, 178, 5, 1, - 205, 189, 178, 5, 1, 246, 199, 178, 5, 1, 219, 16, 178, 5, 1, 230, 144, - 178, 5, 1, 216, 220, 178, 5, 1, 214, 155, 178, 5, 1, 205, 234, 178, 5, 1, - 208, 194, 178, 5, 1, 216, 122, 178, 5, 1, 245, 254, 178, 5, 1, 202, 252, - 178, 5, 1, 218, 102, 178, 5, 1, 229, 191, 178, 5, 1, 220, 60, 178, 5, 1, - 240, 47, 178, 5, 32, 241, 168, 202, 252, 178, 239, 102, 211, 61, 178, - 235, 220, 216, 15, 178, 240, 246, 54, 227, 221, 178, 240, 246, 54, 178, - 242, 60, 54, 110, 251, 139, 240, 241, 110, 251, 139, 214, 156, 110, 251, - 139, 213, 69, 110, 251, 139, 202, 103, 217, 109, 110, 251, 139, 202, 103, - 238, 254, 110, 251, 139, 208, 209, 110, 251, 139, 216, 70, 110, 251, 139, - 202, 101, 110, 251, 139, 219, 61, 110, 251, 139, 203, 23, 110, 251, 139, - 209, 115, 110, 251, 139, 238, 167, 110, 251, 139, 238, 168, 223, 208, - 110, 251, 139, 238, 165, 110, 251, 139, 217, 110, 219, 90, 110, 251, 139, - 209, 158, 238, 183, 110, 251, 139, 219, 40, 110, 251, 139, 250, 43, 237, - 152, 110, 251, 139, 223, 218, 110, 251, 139, 225, 145, 110, 251, 139, - 224, 229, 110, 251, 139, 224, 230, 229, 192, 110, 251, 139, 244, 151, - 110, 251, 139, 217, 121, 110, 251, 139, 209, 158, 217, 104, 110, 251, - 139, 203, 33, 248, 123, 202, 233, 110, 251, 139, 220, 43, 110, 251, 139, - 231, 69, 110, 251, 139, 244, 53, 110, 251, 139, 202, 28, 110, 131, 225, - 75, 246, 61, 110, 218, 63, 213, 15, 110, 218, 63, 237, 82, 214, 156, 110, - 218, 63, 237, 82, 219, 54, 110, 218, 63, 237, 82, 217, 114, 110, 218, 63, - 236, 232, 110, 218, 63, 208, 11, 110, 218, 63, 214, 156, 110, 218, 63, - 219, 54, 110, 218, 63, 217, 114, 110, 218, 63, 236, 128, 110, 218, 63, - 236, 129, 237, 84, 35, 206, 59, 110, 218, 63, 217, 51, 110, 218, 63, 244, - 198, 219, 245, 225, 105, 110, 218, 63, 224, 219, 110, 217, 179, 225, 102, - 110, 218, 63, 216, 200, 110, 217, 179, 219, 63, 110, 218, 63, 213, 0, - 243, 85, 110, 218, 63, 212, 124, 243, 85, 110, 217, 179, 212, 8, 219, 56, - 110, 131, 206, 221, 243, 85, 110, 131, 226, 251, 243, 85, 110, 217, 179, - 221, 41, 237, 151, 110, 218, 63, 217, 115, 217, 109, 110, 1, 251, 30, - 110, 1, 248, 108, 110, 1, 238, 67, 110, 1, 244, 178, 110, 1, 237, 67, - 110, 1, 206, 59, 110, 1, 202, 95, 110, 1, 237, 21, 110, 1, 209, 132, 110, - 1, 202, 236, 110, 1, 46, 230, 22, 110, 1, 230, 22, 110, 1, 228, 20, 110, - 1, 46, 224, 247, 110, 1, 224, 247, 110, 1, 46, 221, 40, 110, 1, 221, 40, - 110, 1, 214, 249, 110, 1, 250, 3, 110, 1, 46, 219, 34, 110, 1, 219, 34, - 110, 1, 46, 208, 15, 110, 1, 208, 15, 110, 1, 217, 74, 110, 1, 216, 91, - 110, 1, 212, 255, 110, 1, 209, 203, 110, 32, 203, 9, 52, 206, 59, 110, - 32, 203, 9, 206, 60, 202, 236, 110, 32, 203, 9, 52, 202, 236, 110, 217, - 179, 238, 167, 110, 217, 179, 238, 165, 10, 42, 54, 10, 2, 214, 242, 10, - 239, 170, 225, 88, 10, 2, 215, 24, 10, 2, 214, 245, 10, 42, 131, 55, 250, - 140, 245, 106, 215, 204, 250, 140, 239, 140, 215, 204, 10, 216, 165, 250, - 140, 218, 247, 224, 116, 54, 250, 140, 218, 247, 209, 153, 209, 37, 54, - 251, 86, 54, 10, 245, 233, 10, 244, 138, 213, 130, 10, 218, 65, 206, 40, - 54, 10, 2, 224, 95, 10, 2, 215, 3, 251, 33, 204, 86, 10, 2, 251, 33, 250, - 64, 10, 2, 216, 198, 251, 32, 10, 2, 216, 206, 251, 12, 250, 210, 10, 2, - 209, 240, 10, 5, 138, 209, 251, 10, 5, 138, 32, 137, 3, 228, 29, 3, 203, - 47, 10, 5, 138, 202, 107, 10, 5, 240, 71, 10, 5, 244, 172, 10, 5, 229, - 229, 10, 213, 143, 10, 1, 82, 10, 208, 70, 70, 217, 179, 82, 10, 217, 47, - 82, 10, 1, 229, 233, 203, 47, 10, 1, 237, 127, 10, 1, 137, 3, 225, 166, - 55, 10, 1, 137, 3, 237, 128, 55, 10, 1, 204, 71, 3, 237, 128, 55, 10, 1, - 137, 3, 237, 128, 56, 10, 1, 89, 3, 237, 128, 55, 10, 1, 251, 30, 10, 1, - 248, 138, 10, 1, 209, 170, 225, 98, 10, 1, 209, 169, 10, 1, 209, 88, 10, - 1, 230, 158, 10, 1, 237, 148, 10, 1, 229, 140, 10, 1, 244, 184, 10, 1, - 209, 100, 10, 1, 216, 122, 10, 1, 202, 107, 10, 1, 214, 161, 10, 1, 213, - 39, 10, 1, 215, 28, 10, 1, 244, 207, 10, 1, 209, 251, 10, 1, 202, 110, - 10, 1, 251, 59, 10, 1, 238, 114, 10, 1, 229, 190, 3, 120, 187, 55, 10, 1, - 229, 190, 3, 126, 187, 56, 10, 1, 240, 75, 89, 3, 230, 239, 206, 164, 10, - 1, 240, 75, 89, 3, 120, 187, 55, 10, 1, 240, 75, 89, 3, 126, 187, 55, 10, - 209, 209, 10, 1, 240, 47, 10, 1, 217, 119, 10, 1, 230, 22, 10, 1, 228, - 28, 10, 1, 225, 5, 10, 1, 221, 178, 10, 1, 237, 43, 10, 1, 204, 70, 10, - 1, 137, 225, 129, 10, 1, 203, 47, 10, 240, 69, 10, 244, 170, 10, 229, - 227, 10, 240, 71, 10, 244, 172, 10, 229, 229, 10, 213, 80, 10, 210, 222, - 10, 225, 164, 55, 10, 237, 128, 55, 10, 237, 128, 56, 10, 210, 246, 251, - 30, 10, 230, 239, 244, 172, 10, 131, 221, 179, 238, 85, 10, 201, 248, 10, - 22, 2, 5, 206, 165, 55, 10, 22, 2, 230, 239, 5, 206, 165, 55, 10, 22, 2, - 70, 56, 10, 216, 73, 244, 172, 10, 240, 72, 3, 120, 243, 83, 10, 204, 72, - 237, 128, 56, 250, 140, 17, 202, 84, 250, 140, 17, 105, 250, 140, 17, - 108, 250, 140, 17, 147, 250, 140, 17, 149, 250, 140, 17, 170, 250, 140, - 17, 195, 250, 140, 17, 213, 111, 250, 140, 17, 199, 250, 140, 17, 222, - 63, 10, 218, 246, 54, 10, 244, 68, 213, 130, 10, 209, 35, 213, 130, 10, - 239, 233, 218, 61, 211, 94, 10, 1, 243, 84, 248, 138, 10, 1, 243, 84, - 217, 119, 10, 1, 210, 199, 251, 30, 10, 1, 137, 204, 87, 10, 1, 137, 3, - 204, 72, 237, 128, 55, 10, 1, 137, 3, 204, 72, 237, 128, 56, 10, 1, 138, - 237, 127, 10, 1, 138, 237, 128, 251, 30, 10, 1, 138, 237, 128, 204, 70, - 10, 1, 106, 3, 237, 128, 55, 10, 1, 138, 237, 128, 203, 47, 10, 1, 207, - 233, 10, 1, 207, 231, 10, 1, 248, 148, 10, 1, 209, 170, 3, 215, 252, 10, - 1, 209, 170, 3, 126, 187, 87, 242, 68, 10, 1, 219, 16, 10, 1, 209, 167, - 10, 1, 248, 136, 10, 1, 151, 3, 237, 128, 55, 10, 1, 151, 3, 120, 187, - 80, 55, 10, 1, 220, 254, 10, 1, 242, 5, 10, 1, 151, 3, 126, 187, 55, 10, - 1, 209, 191, 10, 1, 209, 189, 10, 1, 244, 115, 10, 1, 244, 185, 3, 215, - 252, 10, 1, 244, 185, 3, 70, 56, 10, 1, 244, 185, 3, 70, 248, 126, 25, 5, - 209, 251, 10, 1, 244, 191, 10, 1, 244, 117, 10, 1, 242, 33, 10, 1, 244, - 185, 3, 126, 187, 87, 242, 68, 10, 1, 244, 185, 3, 239, 147, 187, 55, 10, - 1, 215, 177, 10, 1, 216, 123, 3, 5, 206, 164, 10, 1, 216, 123, 3, 215, - 252, 10, 1, 216, 123, 3, 70, 56, 10, 1, 216, 123, 3, 5, 206, 165, 56, 10, - 1, 216, 123, 3, 70, 248, 126, 25, 70, 55, 10, 1, 216, 123, 3, 120, 187, - 55, 10, 1, 230, 155, 10, 1, 216, 123, 3, 239, 147, 187, 55, 10, 1, 214, - 162, 3, 70, 248, 126, 25, 70, 55, 10, 1, 214, 162, 3, 126, 187, 56, 10, - 1, 214, 162, 3, 126, 187, 248, 126, 25, 126, 187, 55, 10, 1, 215, 29, 3, - 120, 187, 56, 10, 1, 215, 29, 3, 126, 187, 55, 10, 1, 209, 252, 3, 126, - 187, 55, 10, 1, 251, 60, 3, 126, 187, 55, 10, 1, 243, 84, 240, 47, 10, 1, - 240, 48, 3, 70, 224, 5, 56, 10, 1, 240, 48, 3, 70, 56, 10, 1, 206, 48, - 10, 1, 240, 48, 3, 126, 187, 56, 10, 1, 219, 14, 10, 1, 217, 120, 3, 70, - 55, 10, 1, 217, 120, 3, 126, 187, 55, 10, 1, 229, 189, 10, 1, 210, 169, - 230, 22, 10, 1, 230, 23, 3, 215, 252, 10, 1, 230, 23, 3, 70, 55, 10, 1, - 222, 205, 10, 1, 230, 23, 3, 126, 187, 56, 10, 1, 238, 251, 10, 1, 238, - 252, 3, 215, 252, 10, 1, 222, 126, 10, 1, 238, 252, 3, 120, 187, 56, 10, - 1, 237, 217, 10, 1, 238, 252, 3, 126, 187, 55, 10, 1, 228, 29, 3, 5, 206, - 164, 10, 1, 228, 29, 3, 70, 55, 10, 1, 228, 29, 3, 126, 187, 55, 10, 1, - 228, 29, 3, 126, 187, 56, 10, 1, 221, 179, 3, 70, 56, 10, 1, 221, 179, - 238, 85, 10, 1, 215, 230, 10, 1, 221, 179, 3, 215, 252, 10, 1, 221, 179, - 3, 126, 187, 55, 10, 1, 237, 44, 243, 109, 10, 1, 209, 192, 3, 70, 55, - 10, 1, 237, 44, 3, 89, 55, 10, 1, 237, 44, 238, 36, 10, 1, 237, 44, 238, - 37, 3, 237, 128, 55, 10, 1, 209, 170, 225, 99, 238, 36, 10, 1, 204, 71, - 3, 215, 252, 10, 1, 229, 76, 220, 73, 10, 1, 220, 73, 10, 1, 68, 10, 1, - 202, 213, 10, 1, 229, 76, 202, 213, 10, 1, 204, 71, 3, 120, 187, 55, 10, - 1, 206, 55, 10, 1, 240, 75, 203, 47, 10, 1, 89, 3, 209, 248, 10, 1, 89, - 3, 5, 206, 164, 10, 1, 204, 71, 3, 70, 55, 10, 1, 74, 10, 1, 89, 3, 126, - 187, 56, 10, 1, 89, 248, 223, 10, 1, 89, 248, 224, 3, 237, 128, 55, 10, - 239, 102, 211, 61, 10, 1, 251, 109, 10, 5, 138, 32, 215, 29, 3, 228, 29, - 3, 137, 225, 129, 10, 5, 138, 32, 217, 120, 3, 228, 29, 3, 137, 225, 129, - 10, 5, 138, 83, 81, 18, 10, 5, 138, 228, 29, 251, 30, 10, 5, 138, 230, - 158, 10, 5, 138, 126, 243, 83, 10, 5, 138, 214, 161, 10, 241, 84, 76, - 250, 7, 10, 211, 90, 76, 215, 143, 241, 123, 236, 227, 10, 5, 138, 215, - 189, 202, 84, 10, 5, 138, 206, 219, 216, 142, 202, 84, 10, 5, 138, 243, - 84, 237, 65, 76, 229, 140, 10, 5, 138, 83, 64, 18, 10, 5, 124, 214, 161, - 10, 5, 138, 225, 165, 10, 5, 204, 70, 10, 5, 203, 47, 10, 5, 138, 203, - 47, 10, 5, 138, 221, 178, 10, 218, 97, 76, 215, 14, 10, 241, 94, 246, - 218, 124, 211, 61, 10, 241, 94, 246, 218, 138, 211, 61, 10, 215, 189, - 138, 211, 62, 3, 240, 8, 246, 217, 10, 5, 124, 225, 5, 10, 1, 244, 185, - 3, 230, 239, 206, 164, 10, 1, 216, 123, 3, 230, 239, 206, 164, 240, 202, - 250, 140, 17, 202, 84, 240, 202, 250, 140, 17, 105, 240, 202, 250, 140, - 17, 108, 240, 202, 250, 140, 17, 147, 240, 202, 250, 140, 17, 149, 240, - 202, 250, 140, 17, 170, 240, 202, 250, 140, 17, 195, 240, 202, 250, 140, - 17, 213, 111, 240, 202, 250, 140, 17, 199, 240, 202, 250, 140, 17, 222, - 63, 10, 1, 213, 40, 3, 70, 56, 10, 1, 244, 208, 3, 70, 56, 10, 1, 238, - 115, 3, 70, 56, 10, 2, 212, 123, 250, 235, 10, 2, 212, 123, 218, 27, 224, - 240, 10, 1, 237, 44, 3, 230, 239, 206, 164, 210, 89, 241, 84, 76, 219, - 88, 210, 89, 210, 195, 239, 102, 211, 61, 210, 89, 210, 248, 239, 102, - 211, 61, 210, 89, 210, 195, 245, 242, 210, 89, 210, 248, 245, 242, 210, - 89, 236, 106, 245, 242, 210, 89, 245, 243, 212, 68, 227, 222, 210, 89, - 245, 243, 212, 68, 216, 16, 210, 89, 210, 195, 245, 243, 212, 68, 227, - 222, 210, 89, 210, 248, 245, 243, 212, 68, 216, 16, 210, 89, 245, 186, - 210, 89, 237, 89, 220, 91, 210, 89, 237, 89, 224, 217, 210, 89, 237, 89, - 250, 61, 210, 89, 251, 146, 82, 210, 89, 1, 251, 35, 210, 89, 1, 210, - 199, 251, 35, 210, 89, 1, 248, 105, 210, 89, 1, 238, 241, 210, 89, 1, - 238, 242, 238, 219, 210, 89, 1, 244, 181, 210, 89, 1, 243, 84, 244, 182, - 215, 246, 210, 89, 1, 237, 67, 210, 89, 1, 204, 70, 210, 89, 1, 202, 107, - 210, 89, 1, 237, 19, 210, 89, 1, 209, 128, 210, 89, 1, 209, 129, 238, - 219, 210, 89, 1, 202, 200, 210, 89, 1, 202, 201, 237, 67, 210, 89, 1, - 229, 250, 210, 89, 1, 228, 27, 210, 89, 1, 224, 112, 210, 89, 1, 221, 40, - 210, 89, 1, 213, 136, 210, 89, 1, 46, 213, 136, 210, 89, 1, 74, 210, 89, - 1, 219, 34, 210, 89, 1, 216, 73, 219, 34, 210, 89, 1, 215, 26, 210, 89, - 1, 217, 113, 210, 89, 1, 215, 246, 210, 89, 1, 212, 255, 210, 89, 1, 209, - 201, 210, 89, 1, 218, 231, 248, 92, 210, 89, 1, 218, 231, 238, 112, 210, - 89, 1, 218, 231, 243, 252, 210, 89, 217, 192, 55, 210, 89, 217, 192, 56, - 210, 89, 217, 192, 242, 82, 210, 89, 202, 11, 55, 210, 89, 202, 11, 56, - 210, 89, 202, 11, 242, 82, 210, 89, 216, 161, 55, 210, 89, 216, 161, 56, - 210, 89, 242, 83, 202, 18, 236, 105, 210, 89, 242, 83, 202, 18, 250, 211, - 210, 89, 237, 70, 55, 210, 89, 237, 70, 56, 210, 89, 237, 69, 242, 82, - 210, 89, 241, 11, 55, 210, 89, 241, 11, 56, 210, 89, 215, 109, 210, 89, - 240, 41, 243, 85, 210, 89, 217, 25, 210, 89, 215, 137, 210, 89, 120, 80, - 187, 55, 210, 89, 120, 80, 187, 56, 210, 89, 126, 187, 55, 210, 89, 126, - 187, 56, 210, 89, 220, 89, 227, 115, 55, 210, 89, 220, 89, 227, 115, 56, - 210, 89, 223, 194, 210, 89, 248, 222, 210, 89, 1, 212, 4, 202, 78, 210, - 89, 1, 212, 4, 229, 133, 210, 89, 1, 212, 4, 240, 60, 10, 1, 248, 139, 3, - 126, 187, 236, 55, 56, 10, 1, 248, 139, 3, 70, 248, 126, 25, 126, 187, - 55, 10, 1, 248, 139, 3, 126, 187, 218, 59, 177, 56, 10, 1, 248, 139, 3, - 126, 187, 218, 59, 177, 248, 126, 25, 120, 187, 55, 10, 1, 248, 139, 3, - 120, 187, 248, 126, 25, 70, 55, 10, 1, 248, 139, 3, 230, 239, 5, 206, - 165, 56, 10, 1, 248, 139, 3, 5, 206, 164, 10, 1, 151, 3, 120, 187, 55, - 10, 1, 151, 3, 126, 187, 218, 59, 177, 56, 10, 1, 244, 185, 3, 120, 187, - 205, 244, 248, 126, 25, 5, 209, 251, 10, 1, 244, 185, 3, 230, 239, 5, - 206, 165, 56, 10, 1, 216, 123, 3, 95, 10, 1, 214, 162, 3, 239, 147, 187, - 55, 10, 1, 251, 60, 3, 120, 187, 55, 10, 1, 251, 60, 3, 126, 187, 218, - 59, 183, 55, 10, 1, 251, 60, 3, 120, 187, 205, 244, 55, 10, 1, 240, 48, - 3, 120, 187, 56, 10, 1, 240, 48, 3, 126, 187, 218, 59, 177, 56, 10, 1, - 229, 190, 3, 70, 55, 10, 1, 229, 190, 3, 126, 187, 55, 10, 1, 229, 190, - 3, 126, 187, 218, 59, 177, 56, 10, 1, 83, 3, 70, 55, 10, 1, 83, 3, 70, - 56, 10, 1, 221, 179, 3, 120, 187, 56, 10, 1, 221, 179, 3, 5, 209, 251, - 10, 1, 221, 179, 3, 5, 206, 164, 10, 1, 228, 29, 3, 142, 10, 1, 216, 123, - 3, 120, 187, 205, 244, 55, 10, 1, 216, 123, 3, 237, 128, 55, 10, 1, 214, - 162, 3, 120, 187, 205, 244, 55, 10, 1, 151, 3, 5, 10, 1, 209, 252, 56, - 10, 1, 151, 3, 5, 10, 1, 209, 252, 25, 120, 243, 83, 10, 1, 214, 162, 3, - 5, 10, 1, 209, 252, 25, 120, 243, 83, 10, 1, 216, 123, 3, 5, 10, 1, 209, - 252, 25, 120, 243, 83, 10, 1, 151, 3, 5, 10, 1, 209, 252, 55, 10, 1, 137, - 3, 240, 202, 250, 140, 17, 120, 55, 10, 1, 137, 3, 240, 202, 250, 140, - 17, 126, 55, 10, 1, 240, 75, 89, 3, 240, 202, 250, 140, 17, 120, 55, 10, - 1, 240, 75, 89, 3, 240, 202, 250, 140, 17, 126, 55, 10, 1, 240, 75, 89, - 3, 240, 202, 250, 140, 17, 239, 147, 56, 10, 1, 204, 71, 3, 240, 202, - 250, 140, 17, 120, 55, 10, 1, 204, 71, 3, 240, 202, 250, 140, 17, 126, - 55, 10, 1, 89, 248, 224, 3, 240, 202, 250, 140, 17, 120, 55, 10, 1, 89, - 248, 224, 3, 240, 202, 250, 140, 17, 126, 55, 10, 1, 151, 3, 240, 202, - 250, 140, 17, 239, 147, 56, 10, 1, 214, 162, 3, 240, 202, 250, 140, 17, - 239, 147, 55, 10, 1, 214, 162, 3, 230, 239, 206, 164, 10, 1, 230, 23, 3, - 120, 187, 55, 209, 105, 1, 237, 157, 209, 105, 1, 213, 49, 209, 105, 1, - 221, 177, 209, 105, 1, 216, 216, 209, 105, 1, 249, 30, 209, 105, 1, 227, - 158, 209, 105, 1, 230, 37, 209, 105, 1, 251, 19, 209, 105, 1, 206, 84, - 209, 105, 1, 225, 4, 209, 105, 1, 240, 106, 209, 105, 1, 243, 255, 209, - 105, 1, 209, 107, 209, 105, 1, 228, 109, 209, 105, 1, 239, 4, 209, 105, - 1, 238, 42, 209, 105, 1, 214, 160, 209, 105, 1, 244, 136, 209, 105, 1, - 202, 98, 209, 105, 1, 209, 202, 209, 105, 1, 203, 110, 209, 105, 1, 219, - 47, 209, 105, 1, 230, 166, 209, 105, 1, 246, 173, 209, 105, 1, 207, 240, - 209, 105, 1, 237, 11, 209, 105, 1, 229, 143, 209, 105, 1, 209, 106, 209, - 105, 1, 202, 114, 209, 105, 1, 213, 38, 209, 105, 1, 215, 32, 209, 105, - 1, 244, 210, 209, 105, 1, 135, 209, 105, 1, 202, 17, 209, 105, 1, 251, - 56, 209, 105, 1, 238, 113, 209, 105, 1, 217, 123, 209, 105, 1, 204, 109, - 209, 105, 251, 148, 209, 105, 251, 246, 209, 105, 235, 165, 209, 105, - 241, 160, 209, 105, 207, 32, 209, 105, 220, 17, 209, 105, 241, 170, 209, - 105, 240, 193, 209, 105, 220, 88, 209, 105, 220, 96, 209, 105, 210, 222, - 209, 105, 1, 223, 106, 221, 255, 17, 202, 84, 221, 255, 17, 105, 221, - 255, 17, 108, 221, 255, 17, 147, 221, 255, 17, 149, 221, 255, 17, 170, - 221, 255, 17, 195, 221, 255, 17, 213, 111, 221, 255, 17, 199, 221, 255, - 17, 222, 63, 221, 255, 1, 63, 221, 255, 1, 241, 161, 221, 255, 1, 75, - 221, 255, 1, 74, 221, 255, 1, 68, 221, 255, 1, 220, 18, 221, 255, 1, 78, - 221, 255, 1, 244, 199, 221, 255, 1, 223, 163, 221, 255, 1, 249, 32, 221, - 255, 1, 185, 221, 255, 1, 210, 22, 221, 255, 1, 230, 181, 221, 255, 1, - 246, 199, 221, 255, 1, 244, 212, 221, 255, 1, 216, 220, 221, 255, 1, 215, - 185, 221, 255, 1, 215, 36, 221, 255, 1, 238, 207, 221, 255, 1, 240, 108, - 221, 255, 1, 173, 221, 255, 1, 228, 113, 221, 255, 1, 223, 111, 203, 252, - 221, 255, 1, 192, 221, 255, 1, 221, 11, 221, 255, 1, 201, 201, 221, 255, - 1, 152, 221, 255, 1, 204, 111, 221, 255, 1, 198, 221, 255, 1, 221, 12, - 203, 252, 221, 255, 1, 230, 93, 230, 181, 221, 255, 1, 230, 93, 246, 199, - 221, 255, 1, 230, 93, 216, 220, 221, 255, 39, 212, 228, 138, 208, 161, - 221, 255, 39, 212, 228, 124, 208, 161, 221, 255, 39, 212, 228, 215, 245, - 208, 161, 221, 255, 39, 163, 244, 19, 208, 161, 221, 255, 39, 163, 138, - 208, 161, 221, 255, 39, 163, 124, 208, 161, 221, 255, 39, 163, 215, 245, - 208, 161, 221, 255, 39, 223, 71, 82, 221, 255, 39, 52, 70, 55, 221, 255, - 138, 143, 250, 160, 221, 255, 124, 143, 250, 160, 221, 255, 16, 220, 19, - 244, 33, 221, 255, 16, 238, 206, 221, 255, 245, 233, 221, 255, 240, 212, - 82, 221, 255, 228, 84, 214, 252, 1, 251, 37, 214, 252, 1, 248, 51, 214, - 252, 1, 238, 240, 214, 252, 1, 244, 183, 214, 252, 1, 230, 192, 214, 252, - 1, 249, 30, 214, 252, 1, 202, 87, 214, 252, 1, 230, 201, 214, 252, 1, - 208, 200, 214, 252, 1, 202, 182, 214, 252, 1, 230, 38, 214, 252, 1, 228, - 106, 214, 252, 1, 224, 112, 214, 252, 1, 221, 40, 214, 252, 1, 212, 121, - 214, 252, 1, 231, 49, 214, 252, 1, 240, 26, 214, 252, 1, 208, 18, 214, - 252, 1, 217, 44, 214, 252, 1, 215, 246, 214, 252, 1, 213, 66, 214, 252, - 1, 210, 17, 214, 252, 131, 231, 49, 214, 252, 131, 231, 48, 214, 252, - 131, 220, 84, 214, 252, 131, 244, 197, 214, 252, 65, 1, 241, 42, 202, - 182, 214, 252, 131, 241, 42, 202, 182, 214, 252, 22, 2, 163, 74, 214, - 252, 22, 2, 74, 214, 252, 22, 2, 219, 197, 252, 25, 214, 252, 22, 2, 163, - 252, 25, 214, 252, 22, 2, 252, 25, 214, 252, 22, 2, 219, 197, 63, 214, - 252, 22, 2, 163, 63, 214, 252, 22, 2, 63, 214, 252, 65, 1, 212, 228, 63, - 214, 252, 22, 2, 212, 228, 63, 214, 252, 22, 2, 163, 68, 214, 252, 22, 2, - 68, 214, 252, 65, 1, 75, 214, 252, 22, 2, 163, 75, 214, 252, 22, 2, 75, - 214, 252, 22, 2, 78, 214, 252, 22, 2, 210, 222, 214, 252, 131, 222, 223, - 214, 252, 217, 179, 222, 223, 214, 252, 217, 179, 251, 83, 214, 252, 217, - 179, 250, 222, 214, 252, 217, 179, 248, 202, 214, 252, 217, 179, 250, 44, - 214, 252, 217, 179, 212, 243, 214, 252, 251, 146, 82, 214, 252, 217, 179, - 224, 250, 217, 80, 214, 252, 217, 179, 202, 25, 214, 252, 217, 179, 217, - 80, 214, 252, 217, 179, 202, 113, 214, 252, 217, 179, 207, 170, 214, 252, - 217, 179, 250, 111, 214, 252, 217, 179, 212, 8, 225, 77, 214, 252, 217, - 179, 250, 206, 225, 118, 1, 237, 134, 225, 118, 1, 251, 232, 225, 118, 1, - 251, 81, 225, 118, 1, 251, 122, 225, 118, 1, 251, 73, 225, 118, 1, 206, - 184, 225, 118, 1, 250, 1, 225, 118, 1, 230, 201, 225, 118, 1, 250, 41, - 225, 118, 1, 251, 42, 225, 118, 1, 251, 47, 225, 118, 1, 251, 39, 225, - 118, 1, 250, 247, 225, 118, 1, 250, 231, 225, 118, 1, 250, 81, 225, 118, - 1, 231, 49, 225, 118, 1, 250, 175, 225, 118, 1, 250, 51, 225, 118, 1, - 250, 148, 225, 118, 1, 250, 144, 225, 118, 1, 250, 75, 225, 118, 1, 250, - 49, 225, 118, 1, 242, 18, 225, 118, 1, 230, 30, 225, 118, 1, 251, 59, - 225, 118, 251, 87, 82, 225, 118, 205, 187, 82, 225, 118, 238, 179, 82, - 225, 118, 217, 178, 10, 1, 248, 139, 3, 5, 206, 165, 56, 10, 1, 248, 139, - 3, 237, 128, 55, 10, 1, 184, 3, 120, 187, 55, 10, 1, 209, 252, 3, 120, - 187, 55, 10, 1, 240, 48, 3, 70, 248, 126, 25, 126, 187, 55, 10, 1, 217, - 120, 3, 70, 56, 10, 1, 228, 29, 3, 52, 142, 10, 1, 83, 3, 126, 187, 55, - 10, 1, 89, 3, 120, 187, 248, 126, 25, 237, 128, 55, 10, 1, 89, 3, 120, - 187, 248, 126, 25, 70, 55, 10, 1, 216, 123, 3, 227, 14, 10, 1, 204, 71, - 3, 70, 204, 4, 10, 1, 215, 215, 203, 47, 10, 1, 124, 251, 30, 10, 1, 244, - 185, 3, 126, 187, 56, 10, 1, 215, 29, 3, 126, 187, 56, 10, 1, 238, 252, - 3, 230, 239, 95, 10, 1, 211, 53, 204, 70, 10, 1, 202, 108, 3, 230, 239, - 206, 165, 55, 10, 1, 251, 60, 3, 126, 187, 56, 10, 1, 230, 23, 3, 70, 56, - 10, 207, 174, 244, 173, 56, 10, 245, 93, 240, 71, 10, 245, 93, 244, 172, - 10, 245, 93, 229, 229, 10, 245, 93, 240, 69, 10, 245, 93, 244, 170, 10, - 245, 93, 229, 227, 10, 143, 118, 70, 55, 10, 143, 120, 187, 55, 10, 143, - 227, 15, 55, 10, 143, 118, 70, 56, 10, 143, 120, 187, 56, 10, 143, 227, - 15, 56, 10, 171, 240, 69, 10, 171, 244, 170, 10, 171, 229, 227, 10, 5, - 138, 204, 70, 10, 240, 72, 3, 215, 252, 10, 240, 72, 3, 70, 55, 10, 229, - 230, 3, 70, 56, 10, 49, 250, 95, 55, 10, 50, 250, 95, 55, 10, 49, 250, - 95, 56, 10, 50, 250, 95, 56, 10, 52, 50, 250, 95, 55, 10, 52, 50, 250, - 95, 87, 3, 243, 85, 10, 50, 250, 95, 87, 3, 243, 85, 10, 244, 173, 3, - 243, 85, 10, 131, 212, 154, 221, 179, 238, 85, 92, 2, 230, 239, 247, 52, - 92, 2, 247, 52, 92, 2, 250, 180, 92, 2, 205, 199, 92, 1, 212, 228, 63, - 92, 1, 63, 92, 1, 252, 25, 92, 1, 75, 92, 1, 231, 83, 92, 1, 68, 92, 1, - 206, 178, 92, 1, 125, 146, 92, 1, 125, 159, 92, 1, 247, 55, 74, 92, 1, - 212, 228, 74, 92, 1, 74, 92, 1, 251, 64, 92, 1, 247, 55, 78, 92, 1, 212, - 228, 78, 92, 1, 78, 92, 1, 250, 34, 92, 1, 173, 92, 1, 229, 144, 92, 1, - 239, 8, 92, 1, 238, 119, 92, 1, 222, 203, 92, 1, 247, 92, 92, 1, 246, - 199, 92, 1, 230, 181, 92, 1, 230, 149, 92, 1, 221, 11, 92, 1, 207, 241, - 92, 1, 207, 229, 92, 1, 244, 120, 92, 1, 244, 104, 92, 1, 221, 227, 92, - 1, 210, 22, 92, 1, 209, 108, 92, 1, 244, 212, 92, 1, 244, 1, 92, 1, 201, - 201, 92, 1, 221, 209, 92, 1, 185, 92, 1, 218, 208, 92, 1, 249, 32, 92, 1, - 248, 98, 92, 1, 192, 92, 1, 198, 92, 1, 216, 220, 92, 1, 215, 185, 92, 1, - 228, 113, 92, 1, 227, 77, 92, 1, 227, 68, 92, 1, 206, 86, 92, 1, 213, 90, - 92, 1, 211, 164, 92, 1, 215, 36, 92, 1, 152, 92, 22, 2, 220, 73, 92, 22, - 2, 220, 16, 92, 2, 221, 51, 92, 2, 250, 17, 92, 22, 2, 252, 25, 92, 22, - 2, 75, 92, 22, 2, 231, 83, 92, 22, 2, 68, 92, 22, 2, 206, 178, 92, 22, 2, - 125, 146, 92, 22, 2, 125, 215, 186, 92, 22, 2, 247, 55, 74, 92, 22, 2, - 212, 228, 74, 92, 22, 2, 74, 92, 22, 2, 251, 64, 92, 22, 2, 247, 55, 78, - 92, 22, 2, 212, 228, 78, 92, 22, 2, 78, 92, 22, 2, 250, 34, 92, 2, 205, - 204, 92, 22, 2, 217, 229, 74, 92, 22, 2, 250, 13, 92, 220, 39, 92, 211, - 42, 2, 207, 26, 92, 211, 42, 2, 250, 182, 92, 237, 254, 251, 138, 92, - 251, 126, 251, 138, 92, 22, 2, 247, 55, 163, 74, 92, 22, 2, 207, 24, 92, - 22, 2, 206, 177, 92, 1, 217, 126, 92, 1, 229, 125, 92, 1, 238, 94, 92, 1, - 202, 116, 92, 1, 244, 109, 92, 1, 216, 61, 92, 1, 240, 108, 92, 1, 202, - 168, 92, 1, 125, 215, 186, 92, 1, 125, 227, 78, 92, 22, 2, 125, 159, 92, - 22, 2, 125, 227, 78, 92, 244, 166, 92, 52, 244, 166, 92, 17, 202, 84, 92, - 17, 105, 92, 17, 108, 92, 17, 147, 92, 17, 149, 92, 17, 170, 92, 17, 195, - 92, 17, 213, 111, 92, 17, 199, 92, 17, 222, 63, 92, 251, 146, 54, 92, 2, - 138, 211, 227, 243, 85, 92, 1, 247, 55, 63, 92, 1, 220, 73, 92, 1, 220, - 16, 92, 1, 250, 13, 92, 1, 207, 24, 92, 1, 206, 177, 92, 1, 225, 82, 244, - 120, 92, 1, 202, 80, 92, 1, 79, 198, 92, 1, 238, 155, 92, 1, 230, 129, - 92, 1, 238, 45, 211, 61, 92, 1, 244, 110, 92, 1, 248, 198, 179, 250, 209, - 179, 2, 247, 52, 179, 2, 250, 180, 179, 2, 205, 199, 179, 1, 63, 179, 1, - 252, 25, 179, 1, 75, 179, 1, 231, 83, 179, 1, 68, 179, 1, 206, 178, 179, - 1, 125, 146, 179, 1, 125, 159, 179, 1, 74, 179, 1, 251, 64, 179, 1, 78, - 179, 1, 250, 34, 179, 1, 173, 179, 1, 229, 144, 179, 1, 239, 8, 179, 1, - 238, 119, 179, 1, 222, 203, 179, 1, 247, 92, 179, 1, 246, 199, 179, 1, - 230, 181, 179, 1, 230, 149, 179, 1, 221, 11, 179, 1, 207, 241, 179, 1, - 207, 229, 179, 1, 244, 120, 179, 1, 244, 104, 179, 1, 221, 227, 179, 1, - 210, 22, 179, 1, 209, 108, 179, 1, 244, 212, 179, 1, 244, 1, 179, 1, 201, - 201, 179, 1, 185, 179, 1, 218, 208, 179, 1, 249, 32, 179, 1, 248, 98, - 179, 1, 192, 179, 1, 198, 179, 1, 216, 220, 179, 1, 228, 113, 179, 1, - 213, 90, 179, 1, 211, 164, 179, 1, 215, 36, 179, 1, 152, 179, 2, 221, 51, - 179, 2, 250, 17, 179, 22, 2, 252, 25, 179, 22, 2, 75, 179, 22, 2, 231, - 83, 179, 22, 2, 68, 179, 22, 2, 206, 178, 179, 22, 2, 125, 146, 179, 22, - 2, 125, 215, 186, 179, 22, 2, 74, 179, 22, 2, 251, 64, 179, 22, 2, 78, - 179, 22, 2, 250, 34, 179, 2, 205, 204, 179, 1, 229, 135, 210, 22, 179, - 250, 35, 227, 196, 82, 179, 1, 215, 185, 179, 1, 216, 61, 179, 1, 202, - 168, 179, 1, 125, 215, 186, 179, 1, 125, 227, 78, 179, 22, 2, 125, 159, - 179, 22, 2, 125, 227, 78, 179, 17, 202, 84, 179, 17, 105, 179, 17, 108, - 179, 17, 147, 179, 17, 149, 179, 17, 170, 179, 17, 195, 179, 17, 213, - 111, 179, 17, 199, 179, 17, 222, 63, 179, 1, 216, 221, 3, 101, 243, 227, - 179, 1, 216, 221, 3, 226, 251, 243, 227, 179, 215, 120, 82, 179, 215, - 120, 54, 179, 245, 92, 221, 43, 105, 179, 245, 92, 221, 43, 108, 179, - 245, 92, 221, 43, 147, 179, 245, 92, 221, 43, 149, 179, 245, 92, 221, 43, - 118, 227, 180, 209, 98, 209, 93, 244, 31, 179, 245, 92, 244, 32, 212, 82, - 179, 230, 202, 179, 238, 231, 82, 237, 198, 2, 251, 121, 248, 66, 237, - 198, 2, 248, 66, 237, 198, 2, 205, 199, 237, 198, 1, 63, 237, 198, 1, - 252, 25, 237, 198, 1, 75, 237, 198, 1, 231, 83, 237, 198, 1, 68, 237, - 198, 1, 206, 178, 237, 198, 1, 241, 161, 237, 198, 1, 251, 64, 237, 198, - 1, 220, 18, 237, 198, 1, 250, 34, 237, 198, 1, 173, 237, 198, 1, 229, - 144, 237, 198, 1, 239, 8, 237, 198, 1, 238, 119, 237, 198, 1, 222, 203, - 237, 198, 1, 247, 92, 237, 198, 1, 246, 199, 237, 198, 1, 230, 181, 237, - 198, 1, 230, 149, 237, 198, 1, 221, 11, 237, 198, 1, 207, 241, 237, 198, - 1, 207, 229, 237, 198, 1, 244, 120, 237, 198, 1, 244, 104, 237, 198, 1, - 221, 227, 237, 198, 1, 210, 22, 237, 198, 1, 209, 108, 237, 198, 1, 244, - 212, 237, 198, 1, 244, 1, 237, 198, 1, 201, 201, 237, 198, 1, 185, 237, - 198, 1, 218, 208, 237, 198, 1, 249, 32, 237, 198, 1, 248, 98, 237, 198, - 1, 192, 237, 198, 1, 198, 237, 198, 1, 216, 220, 237, 198, 1, 228, 113, - 237, 198, 1, 227, 77, 237, 198, 1, 206, 86, 237, 198, 1, 213, 90, 237, - 198, 1, 215, 36, 237, 198, 1, 152, 237, 198, 2, 221, 51, 237, 198, 22, 2, - 252, 25, 237, 198, 22, 2, 75, 237, 198, 22, 2, 231, 83, 237, 198, 22, 2, - 68, 237, 198, 22, 2, 206, 178, 237, 198, 22, 2, 241, 161, 237, 198, 22, - 2, 251, 64, 237, 198, 22, 2, 220, 18, 237, 198, 22, 2, 250, 34, 237, 198, - 2, 205, 204, 237, 198, 2, 207, 28, 237, 198, 1, 229, 125, 237, 198, 1, - 238, 94, 237, 198, 1, 202, 116, 237, 198, 1, 215, 185, 237, 198, 1, 240, - 108, 237, 198, 17, 202, 84, 237, 198, 17, 105, 237, 198, 17, 108, 237, - 198, 17, 147, 237, 198, 17, 149, 237, 198, 17, 170, 237, 198, 17, 195, - 237, 198, 17, 213, 111, 237, 198, 17, 199, 237, 198, 17, 222, 63, 237, - 198, 208, 208, 237, 198, 251, 120, 237, 198, 230, 222, 237, 198, 206, - 206, 237, 198, 241, 130, 220, 23, 237, 198, 2, 203, 85, 237, 213, 2, 247, - 52, 237, 213, 2, 250, 180, 237, 213, 2, 205, 199, 237, 213, 1, 63, 237, - 213, 1, 252, 25, 237, 213, 1, 75, 237, 213, 1, 231, 83, 237, 213, 1, 68, - 237, 213, 1, 206, 178, 237, 213, 1, 125, 146, 237, 213, 1, 125, 159, 237, - 213, 22, 247, 55, 74, 237, 213, 1, 74, 237, 213, 1, 251, 64, 237, 213, - 22, 247, 55, 78, 237, 213, 1, 78, 237, 213, 1, 250, 34, 237, 213, 1, 173, - 237, 213, 1, 229, 144, 237, 213, 1, 239, 8, 237, 213, 1, 238, 119, 237, - 213, 1, 222, 203, 237, 213, 1, 247, 92, 237, 213, 1, 246, 199, 237, 213, - 1, 230, 181, 237, 213, 1, 230, 149, 237, 213, 1, 221, 11, 237, 213, 1, - 207, 241, 237, 213, 1, 207, 229, 237, 213, 1, 244, 120, 237, 213, 1, 244, - 104, 237, 213, 1, 221, 227, 237, 213, 1, 210, 22, 237, 213, 1, 209, 108, - 237, 213, 1, 244, 212, 237, 213, 1, 244, 1, 237, 213, 1, 201, 201, 237, - 213, 1, 185, 237, 213, 1, 218, 208, 237, 213, 1, 249, 32, 237, 213, 1, - 248, 98, 237, 213, 1, 192, 237, 213, 1, 198, 237, 213, 1, 216, 220, 237, - 213, 1, 228, 113, 237, 213, 1, 227, 77, 237, 213, 1, 206, 86, 237, 213, - 1, 213, 90, 237, 213, 1, 211, 164, 237, 213, 1, 215, 36, 237, 213, 1, - 152, 237, 213, 2, 221, 51, 237, 213, 2, 250, 17, 237, 213, 22, 2, 252, - 25, 237, 213, 22, 2, 75, 237, 213, 22, 2, 231, 83, 237, 213, 22, 2, 68, - 237, 213, 22, 2, 206, 178, 237, 213, 22, 2, 125, 146, 237, 213, 22, 2, - 125, 215, 186, 237, 213, 22, 2, 247, 55, 74, 237, 213, 22, 2, 74, 237, - 213, 22, 2, 251, 64, 237, 213, 22, 2, 247, 55, 78, 237, 213, 22, 2, 78, - 237, 213, 22, 2, 250, 34, 237, 213, 2, 205, 204, 237, 213, 220, 39, 237, - 213, 1, 125, 215, 186, 237, 213, 1, 125, 227, 78, 237, 213, 22, 2, 125, - 159, 237, 213, 22, 2, 125, 227, 78, 237, 213, 17, 202, 84, 237, 213, 17, - 105, 237, 213, 17, 108, 237, 213, 17, 147, 237, 213, 17, 149, 237, 213, - 17, 170, 237, 213, 17, 195, 237, 213, 17, 213, 111, 237, 213, 17, 199, - 237, 213, 17, 222, 63, 237, 213, 251, 146, 54, 237, 213, 215, 120, 54, - 237, 213, 1, 202, 80, 193, 2, 247, 52, 193, 2, 250, 180, 193, 2, 205, - 199, 193, 1, 63, 193, 1, 252, 25, 193, 1, 75, 193, 1, 231, 83, 193, 1, - 68, 193, 1, 206, 178, 193, 1, 125, 146, 193, 1, 125, 159, 193, 1, 74, - 193, 1, 251, 64, 193, 1, 78, 193, 1, 250, 34, 193, 1, 173, 193, 1, 229, - 144, 193, 1, 239, 8, 193, 1, 238, 119, 193, 1, 222, 203, 193, 1, 247, 92, - 193, 1, 246, 199, 193, 1, 230, 181, 193, 1, 230, 149, 193, 1, 221, 11, - 193, 1, 207, 241, 193, 1, 207, 229, 193, 1, 244, 120, 193, 1, 244, 104, - 193, 1, 221, 227, 193, 1, 210, 22, 193, 1, 209, 108, 193, 1, 244, 212, - 193, 1, 244, 1, 193, 1, 201, 201, 193, 1, 185, 193, 1, 218, 208, 193, 1, - 249, 32, 193, 1, 248, 98, 193, 1, 192, 193, 1, 198, 193, 1, 216, 220, - 193, 1, 228, 113, 193, 1, 227, 77, 193, 1, 206, 86, 193, 1, 213, 90, 193, - 1, 211, 164, 193, 1, 215, 36, 193, 1, 152, 193, 2, 221, 51, 193, 2, 250, - 17, 193, 22, 2, 252, 25, 193, 22, 2, 75, 193, 22, 2, 231, 83, 193, 22, 2, - 68, 193, 22, 2, 206, 178, 193, 22, 2, 125, 146, 193, 22, 2, 125, 215, - 186, 193, 22, 2, 74, 193, 22, 2, 251, 64, 193, 22, 2, 78, 193, 22, 2, - 250, 34, 193, 2, 205, 204, 193, 251, 65, 227, 196, 82, 193, 250, 35, 227, - 196, 82, 193, 1, 215, 185, 193, 1, 216, 61, 193, 1, 202, 168, 193, 1, - 125, 215, 186, 193, 1, 125, 227, 78, 193, 22, 2, 125, 159, 193, 22, 2, - 125, 227, 78, 193, 17, 202, 84, 193, 17, 105, 193, 17, 108, 193, 17, 147, - 193, 17, 149, 193, 17, 170, 193, 17, 195, 193, 17, 213, 111, 193, 17, - 199, 193, 17, 222, 63, 193, 230, 202, 193, 1, 204, 111, 193, 239, 138, - 118, 217, 55, 193, 239, 138, 118, 237, 137, 193, 239, 138, 126, 217, 53, - 193, 239, 138, 118, 212, 80, 193, 239, 138, 118, 241, 138, 193, 239, 138, - 126, 212, 79, 44, 2, 250, 180, 44, 2, 205, 199, 44, 1, 63, 44, 1, 252, - 25, 44, 1, 75, 44, 1, 231, 83, 44, 1, 68, 44, 1, 206, 178, 44, 1, 74, 44, - 1, 241, 161, 44, 1, 251, 64, 44, 1, 78, 44, 1, 220, 18, 44, 1, 250, 34, - 44, 1, 173, 44, 1, 222, 203, 44, 1, 247, 92, 44, 1, 230, 181, 44, 1, 221, - 11, 44, 1, 207, 241, 44, 1, 221, 227, 44, 1, 210, 22, 44, 1, 201, 201, - 44, 1, 221, 209, 44, 1, 185, 44, 1, 192, 44, 1, 198, 44, 1, 216, 220, 44, - 1, 215, 185, 44, 1, 228, 113, 44, 1, 227, 77, 44, 1, 227, 68, 44, 1, 206, - 86, 44, 1, 213, 90, 44, 1, 211, 164, 44, 1, 215, 36, 44, 1, 152, 44, 22, - 2, 252, 25, 44, 22, 2, 75, 44, 22, 2, 231, 83, 44, 22, 2, 68, 44, 22, 2, - 206, 178, 44, 22, 2, 74, 44, 22, 2, 241, 161, 44, 22, 2, 251, 64, 44, 22, - 2, 78, 44, 22, 2, 220, 18, 44, 22, 2, 250, 34, 44, 2, 205, 204, 44, 220, - 39, 44, 250, 35, 227, 196, 82, 44, 17, 202, 84, 44, 17, 105, 44, 17, 108, - 44, 17, 147, 44, 17, 149, 44, 17, 170, 44, 17, 195, 44, 17, 213, 111, 44, - 17, 199, 44, 17, 222, 63, 44, 42, 209, 152, 44, 42, 118, 236, 11, 44, 42, - 118, 209, 36, 44, 244, 133, 54, 44, 224, 38, 54, 44, 203, 50, 54, 44, - 244, 72, 54, 44, 245, 141, 54, 44, 250, 82, 87, 54, 44, 215, 120, 54, 44, - 42, 54, 175, 2, 39, 247, 53, 55, 175, 2, 247, 52, 175, 2, 250, 180, 175, - 2, 205, 199, 175, 1, 63, 175, 1, 252, 25, 175, 1, 75, 175, 1, 231, 83, - 175, 1, 68, 175, 1, 206, 178, 175, 1, 125, 146, 175, 1, 125, 159, 175, 1, - 74, 175, 1, 241, 161, 175, 1, 251, 64, 175, 1, 78, 175, 1, 220, 18, 175, - 1, 250, 34, 175, 1, 173, 175, 1, 229, 144, 175, 1, 239, 8, 175, 1, 238, - 119, 175, 1, 222, 203, 175, 1, 247, 92, 175, 1, 246, 199, 175, 1, 230, - 181, 175, 1, 230, 149, 175, 1, 221, 11, 175, 1, 207, 241, 175, 1, 207, - 229, 175, 1, 244, 120, 175, 1, 244, 104, 175, 1, 221, 227, 175, 1, 210, - 22, 175, 1, 209, 108, 175, 1, 244, 212, 175, 1, 244, 1, 175, 1, 201, 201, - 175, 1, 185, 175, 1, 218, 208, 175, 1, 249, 32, 175, 1, 248, 98, 175, 1, - 192, 175, 1, 198, 175, 1, 216, 220, 175, 1, 215, 185, 175, 1, 228, 113, - 175, 1, 227, 77, 175, 1, 227, 68, 175, 1, 206, 86, 175, 1, 213, 90, 175, - 1, 211, 164, 175, 1, 215, 36, 175, 1, 152, 175, 2, 250, 17, 175, 22, 2, - 252, 25, 175, 22, 2, 75, 175, 22, 2, 231, 83, 175, 22, 2, 68, 175, 22, 2, - 206, 178, 175, 22, 2, 125, 146, 175, 22, 2, 125, 215, 186, 175, 22, 2, - 74, 175, 22, 2, 241, 161, 175, 22, 2, 251, 64, 175, 22, 2, 78, 175, 22, - 2, 220, 18, 175, 22, 2, 250, 34, 175, 2, 205, 204, 175, 227, 196, 82, - 175, 251, 65, 227, 196, 82, 175, 1, 208, 20, 175, 1, 241, 255, 175, 1, - 215, 166, 175, 1, 125, 215, 186, 175, 1, 125, 227, 78, 175, 22, 2, 125, - 159, 175, 22, 2, 125, 227, 78, 175, 17, 202, 84, 175, 17, 105, 175, 17, - 108, 175, 17, 147, 175, 17, 149, 175, 17, 170, 175, 17, 195, 175, 17, - 213, 111, 175, 17, 199, 175, 17, 222, 63, 175, 239, 138, 17, 202, 85, 35, - 220, 77, 218, 15, 76, 149, 175, 239, 138, 17, 118, 35, 220, 77, 218, 15, - 76, 149, 175, 239, 138, 17, 120, 35, 220, 77, 218, 15, 76, 149, 175, 239, - 138, 17, 126, 35, 220, 77, 218, 15, 76, 149, 175, 239, 138, 17, 118, 35, - 240, 225, 218, 15, 76, 149, 175, 239, 138, 17, 120, 35, 240, 225, 218, - 15, 76, 149, 175, 239, 138, 17, 126, 35, 240, 225, 218, 15, 76, 149, 175, - 2, 207, 164, 200, 2, 247, 52, 200, 2, 250, 180, 200, 2, 205, 199, 200, 1, - 63, 200, 1, 252, 25, 200, 1, 75, 200, 1, 231, 83, 200, 1, 68, 200, 1, - 206, 178, 200, 1, 125, 146, 200, 1, 125, 159, 200, 1, 74, 200, 1, 241, - 161, 200, 1, 251, 64, 200, 1, 78, 200, 1, 220, 18, 200, 1, 250, 34, 200, - 1, 173, 200, 1, 229, 144, 200, 1, 239, 8, 200, 1, 238, 119, 200, 1, 222, - 203, 200, 1, 247, 92, 200, 1, 246, 199, 200, 1, 230, 181, 200, 1, 230, - 149, 200, 1, 221, 11, 200, 1, 207, 241, 200, 1, 207, 229, 200, 1, 244, - 120, 200, 1, 244, 104, 200, 1, 221, 227, 200, 1, 210, 22, 200, 1, 209, - 108, 200, 1, 244, 212, 200, 1, 244, 1, 200, 1, 201, 201, 200, 1, 185, - 200, 1, 218, 208, 200, 1, 249, 32, 200, 1, 248, 98, 200, 1, 192, 200, 1, - 198, 200, 1, 216, 220, 200, 1, 215, 185, 200, 1, 228, 113, 200, 1, 227, - 77, 200, 1, 206, 86, 200, 1, 213, 90, 200, 1, 211, 164, 200, 1, 215, 36, - 200, 1, 152, 200, 2, 221, 51, 200, 2, 250, 17, 200, 22, 2, 252, 25, 200, - 22, 2, 75, 200, 22, 2, 231, 83, 200, 22, 2, 68, 200, 22, 2, 206, 178, - 200, 22, 2, 125, 146, 200, 22, 2, 125, 215, 186, 200, 22, 2, 74, 200, 22, - 2, 241, 161, 200, 22, 2, 251, 64, 200, 22, 2, 78, 200, 22, 2, 220, 18, - 200, 22, 2, 250, 34, 200, 2, 205, 204, 200, 227, 196, 82, 200, 251, 65, - 227, 196, 82, 200, 1, 240, 108, 200, 1, 125, 215, 186, 200, 1, 125, 227, - 78, 200, 22, 2, 125, 159, 200, 22, 2, 125, 227, 78, 200, 17, 202, 84, - 200, 17, 105, 200, 17, 108, 200, 17, 147, 200, 17, 149, 200, 17, 170, - 200, 17, 195, 200, 17, 213, 111, 200, 17, 199, 200, 17, 222, 63, 200, 2, - 230, 135, 200, 2, 206, 222, 164, 2, 247, 52, 164, 2, 250, 180, 164, 2, - 205, 199, 164, 1, 63, 164, 1, 252, 25, 164, 1, 75, 164, 1, 231, 83, 164, - 1, 68, 164, 1, 206, 178, 164, 1, 125, 146, 164, 1, 125, 159, 164, 1, 74, - 164, 1, 241, 161, 164, 1, 251, 64, 164, 1, 78, 164, 1, 220, 18, 164, 1, - 250, 34, 164, 1, 173, 164, 1, 229, 144, 164, 1, 239, 8, 164, 1, 238, 119, - 164, 1, 222, 203, 164, 1, 247, 92, 164, 1, 246, 199, 164, 1, 230, 181, - 164, 1, 230, 149, 164, 1, 221, 11, 164, 1, 207, 241, 164, 1, 207, 229, - 164, 1, 244, 120, 164, 1, 244, 104, 164, 1, 221, 227, 164, 1, 210, 22, - 164, 1, 209, 108, 164, 1, 244, 212, 164, 1, 244, 1, 164, 1, 201, 201, - 164, 1, 221, 209, 164, 1, 185, 164, 1, 218, 208, 164, 1, 249, 32, 164, 1, - 248, 98, 164, 1, 192, 164, 1, 198, 164, 1, 216, 220, 164, 1, 215, 185, - 164, 1, 228, 113, 164, 1, 227, 77, 164, 1, 227, 68, 164, 1, 206, 86, 164, - 1, 213, 90, 164, 1, 211, 164, 164, 1, 215, 36, 164, 1, 152, 164, 1, 207, - 210, 164, 2, 250, 17, 164, 22, 2, 252, 25, 164, 22, 2, 75, 164, 22, 2, - 231, 83, 164, 22, 2, 68, 164, 22, 2, 206, 178, 164, 22, 2, 125, 146, 164, - 22, 2, 125, 215, 186, 164, 22, 2, 74, 164, 22, 2, 241, 161, 164, 22, 2, - 251, 64, 164, 22, 2, 78, 164, 22, 2, 220, 18, 164, 22, 2, 250, 34, 164, - 2, 205, 204, 164, 1, 70, 216, 97, 164, 250, 35, 227, 196, 82, 164, 1, - 250, 126, 231, 83, 164, 1, 125, 215, 186, 164, 1, 125, 227, 78, 164, 22, - 2, 125, 159, 164, 22, 2, 125, 227, 78, 164, 17, 202, 84, 164, 17, 105, - 164, 17, 108, 164, 17, 147, 164, 17, 149, 164, 17, 170, 164, 17, 195, - 164, 17, 213, 111, 164, 17, 199, 164, 17, 222, 63, 164, 42, 209, 152, - 164, 42, 118, 236, 11, 164, 42, 118, 209, 36, 164, 239, 138, 118, 217, - 55, 164, 239, 138, 118, 237, 137, 164, 239, 138, 126, 217, 53, 164, 244, - 138, 82, 164, 1, 246, 131, 221, 228, 164, 1, 246, 131, 223, 163, 164, 1, - 246, 131, 215, 186, 164, 1, 246, 131, 159, 164, 1, 246, 131, 227, 78, - 164, 1, 246, 131, 230, 54, 140, 2, 250, 179, 140, 2, 205, 198, 140, 1, - 250, 6, 140, 1, 251, 235, 140, 1, 251, 89, 140, 1, 251, 104, 140, 1, 230, - 191, 140, 1, 231, 82, 140, 1, 206, 169, 140, 1, 206, 172, 140, 1, 230, - 217, 140, 1, 230, 218, 140, 1, 231, 68, 140, 1, 231, 70, 140, 1, 240, - 194, 140, 1, 241, 156, 140, 1, 251, 49, 140, 1, 219, 187, 140, 1, 220, - 11, 140, 1, 250, 20, 140, 1, 251, 5, 229, 206, 140, 1, 225, 147, 229, - 206, 140, 1, 251, 5, 238, 210, 140, 1, 225, 147, 238, 210, 140, 1, 229, - 255, 223, 103, 140, 1, 214, 235, 238, 210, 140, 1, 251, 5, 247, 8, 140, - 1, 225, 147, 247, 8, 140, 1, 251, 5, 230, 164, 140, 1, 225, 147, 230, - 164, 140, 1, 210, 15, 223, 103, 140, 1, 210, 15, 214, 234, 223, 104, 140, - 1, 214, 235, 230, 164, 140, 1, 251, 5, 207, 237, 140, 1, 225, 147, 207, - 237, 140, 1, 251, 5, 244, 111, 140, 1, 225, 147, 244, 111, 140, 1, 223, - 191, 223, 58, 140, 1, 214, 235, 244, 111, 140, 1, 251, 5, 209, 195, 140, - 1, 225, 147, 209, 195, 140, 1, 251, 5, 244, 131, 140, 1, 225, 147, 244, - 131, 140, 1, 244, 162, 223, 58, 140, 1, 214, 235, 244, 131, 140, 1, 251, - 5, 219, 42, 140, 1, 225, 147, 219, 42, 140, 1, 251, 5, 248, 200, 140, 1, - 225, 147, 248, 200, 140, 1, 225, 62, 140, 1, 250, 241, 248, 200, 140, 1, - 203, 57, 140, 1, 216, 164, 140, 1, 244, 162, 227, 243, 140, 1, 206, 57, - 140, 1, 210, 15, 214, 207, 140, 1, 223, 191, 214, 207, 140, 1, 244, 162, - 214, 207, 140, 1, 237, 71, 140, 1, 223, 191, 227, 243, 140, 1, 240, 62, - 140, 2, 251, 38, 140, 22, 2, 251, 99, 140, 22, 2, 229, 169, 251, 106, - 140, 22, 2, 243, 200, 251, 106, 140, 22, 2, 229, 169, 230, 214, 140, 22, - 2, 243, 200, 230, 214, 140, 22, 2, 229, 169, 219, 167, 140, 22, 2, 243, - 200, 219, 167, 140, 22, 2, 238, 253, 140, 22, 2, 229, 11, 140, 22, 2, - 243, 200, 229, 11, 140, 22, 2, 229, 13, 244, 50, 140, 22, 2, 229, 12, - 237, 158, 251, 99, 140, 22, 2, 229, 12, 237, 158, 243, 200, 251, 99, 140, - 22, 2, 229, 12, 237, 158, 238, 209, 140, 22, 2, 238, 209, 140, 227, 89, - 17, 202, 84, 140, 227, 89, 17, 105, 140, 227, 89, 17, 108, 140, 227, 89, - 17, 147, 140, 227, 89, 17, 149, 140, 227, 89, 17, 170, 140, 227, 89, 17, - 195, 140, 227, 89, 17, 213, 111, 140, 227, 89, 17, 199, 140, 227, 89, 17, - 222, 63, 140, 22, 2, 243, 200, 238, 253, 140, 22, 2, 243, 200, 238, 209, - 140, 217, 179, 228, 194, 209, 103, 167, 229, 27, 230, 18, 209, 103, 167, - 229, 116, 229, 139, 209, 103, 167, 229, 116, 229, 108, 209, 103, 167, - 229, 116, 229, 103, 209, 103, 167, 229, 116, 229, 112, 209, 103, 167, - 229, 116, 216, 185, 209, 103, 167, 222, 129, 222, 116, 209, 103, 167, - 246, 117, 246, 188, 209, 103, 167, 246, 117, 246, 127, 209, 103, 167, - 246, 117, 246, 187, 209, 103, 167, 212, 14, 212, 13, 209, 103, 167, 246, - 117, 246, 113, 209, 103, 167, 202, 248, 202, 255, 209, 103, 167, 243, - 114, 246, 196, 209, 103, 167, 208, 173, 219, 53, 209, 103, 167, 209, 48, - 209, 97, 209, 103, 167, 209, 48, 223, 80, 209, 103, 167, 209, 48, 218, - 170, 209, 103, 167, 221, 192, 222, 230, 209, 103, 167, 243, 114, 244, 51, - 209, 103, 167, 208, 173, 209, 223, 209, 103, 167, 209, 48, 209, 16, 209, - 103, 167, 209, 48, 209, 104, 209, 103, 167, 209, 48, 209, 43, 209, 103, - 167, 221, 192, 221, 84, 209, 103, 167, 248, 24, 249, 0, 209, 103, 167, - 218, 70, 218, 98, 209, 103, 167, 218, 181, 218, 172, 209, 103, 167, 239, - 187, 240, 108, 209, 103, 167, 218, 181, 218, 201, 209, 103, 167, 239, - 187, 240, 81, 209, 103, 167, 218, 181, 214, 247, 209, 103, 167, 224, 83, - 192, 209, 103, 167, 202, 248, 203, 86, 209, 103, 167, 215, 228, 215, 144, - 209, 103, 167, 215, 145, 209, 103, 167, 227, 50, 227, 107, 209, 103, 167, - 226, 239, 209, 103, 167, 204, 1, 204, 106, 209, 103, 167, 212, 14, 215, - 6, 209, 103, 167, 212, 14, 215, 116, 209, 103, 167, 212, 14, 211, 9, 209, - 103, 167, 236, 137, 236, 233, 209, 103, 167, 227, 50, 246, 97, 209, 103, - 167, 158, 250, 223, 209, 103, 167, 236, 137, 221, 187, 209, 103, 167, - 219, 144, 209, 103, 167, 214, 229, 63, 209, 103, 167, 225, 141, 237, 125, - 209, 103, 167, 214, 229, 252, 25, 209, 103, 167, 214, 229, 250, 247, 209, - 103, 167, 214, 229, 75, 209, 103, 167, 214, 229, 231, 83, 209, 103, 167, - 214, 229, 207, 24, 209, 103, 167, 214, 229, 207, 22, 209, 103, 167, 214, - 229, 68, 209, 103, 167, 214, 229, 206, 178, 209, 103, 167, 218, 183, 209, - 103, 245, 92, 16, 249, 1, 209, 103, 167, 214, 229, 74, 209, 103, 167, - 214, 229, 251, 109, 209, 103, 167, 214, 229, 78, 209, 103, 167, 214, 229, - 251, 65, 225, 135, 209, 103, 167, 214, 229, 251, 65, 225, 136, 209, 103, - 167, 228, 32, 209, 103, 167, 225, 132, 209, 103, 167, 225, 133, 209, 103, - 167, 225, 141, 241, 129, 209, 103, 167, 225, 141, 209, 47, 209, 103, 167, - 225, 141, 208, 88, 209, 103, 167, 225, 141, 246, 175, 209, 103, 167, 209, - 95, 209, 103, 167, 222, 72, 209, 103, 167, 203, 80, 209, 103, 167, 239, - 177, 209, 103, 17, 202, 84, 209, 103, 17, 105, 209, 103, 17, 108, 209, - 103, 17, 147, 209, 103, 17, 149, 209, 103, 17, 170, 209, 103, 17, 195, - 209, 103, 17, 213, 111, 209, 103, 17, 199, 209, 103, 17, 222, 63, 209, - 103, 167, 250, 219, 209, 103, 167, 229, 113, 228, 12, 1, 229, 26, 228, - 12, 1, 229, 116, 210, 211, 228, 12, 1, 229, 116, 209, 232, 228, 12, 1, - 222, 128, 228, 12, 1, 245, 254, 228, 12, 1, 212, 14, 209, 232, 228, 12, - 1, 220, 233, 228, 12, 1, 243, 113, 228, 12, 1, 135, 228, 12, 1, 209, 48, - 210, 211, 228, 12, 1, 209, 48, 209, 232, 228, 12, 1, 221, 191, 228, 12, - 1, 248, 23, 228, 12, 1, 218, 69, 228, 12, 1, 218, 181, 210, 211, 228, 12, - 1, 239, 187, 209, 232, 228, 12, 1, 218, 181, 209, 232, 228, 12, 1, 239, - 187, 210, 211, 228, 12, 1, 224, 82, 228, 12, 1, 202, 247, 228, 12, 1, - 227, 50, 227, 107, 228, 12, 1, 227, 50, 227, 12, 228, 12, 1, 204, 0, 228, - 12, 1, 212, 14, 210, 211, 228, 12, 1, 236, 137, 210, 211, 228, 12, 1, 78, - 228, 12, 1, 236, 137, 209, 232, 228, 12, 241, 108, 228, 12, 22, 2, 63, - 228, 12, 22, 2, 225, 141, 230, 4, 228, 12, 22, 2, 252, 25, 228, 12, 22, - 2, 250, 247, 228, 12, 22, 2, 75, 228, 12, 22, 2, 231, 83, 228, 12, 22, 2, - 203, 124, 228, 12, 22, 2, 202, 169, 228, 12, 22, 2, 68, 228, 12, 22, 2, - 206, 178, 228, 12, 22, 2, 225, 141, 229, 9, 228, 12, 213, 138, 2, 227, - 49, 228, 12, 213, 138, 2, 220, 233, 228, 12, 22, 2, 74, 228, 12, 22, 2, - 241, 145, 228, 12, 22, 2, 78, 228, 12, 22, 2, 250, 8, 228, 12, 22, 2, - 251, 64, 228, 12, 229, 27, 228, 113, 228, 12, 143, 225, 141, 241, 129, - 228, 12, 143, 225, 141, 209, 47, 228, 12, 143, 225, 141, 209, 2, 228, 12, - 143, 225, 141, 247, 16, 228, 12, 247, 58, 82, 228, 12, 222, 81, 228, 12, - 17, 202, 84, 228, 12, 17, 105, 228, 12, 17, 108, 228, 12, 17, 147, 228, - 12, 17, 149, 228, 12, 17, 170, 228, 12, 17, 195, 228, 12, 17, 213, 111, - 228, 12, 17, 199, 228, 12, 17, 222, 63, 228, 12, 236, 137, 221, 191, 228, - 12, 236, 137, 224, 82, 228, 12, 1, 229, 117, 238, 39, 228, 12, 1, 229, - 117, 220, 233, 77, 4, 220, 39, 77, 131, 237, 232, 203, 3, 224, 173, 208, - 26, 63, 77, 131, 237, 232, 203, 3, 224, 173, 255, 22, 215, 232, 248, 164, - 192, 77, 131, 237, 232, 203, 3, 224, 173, 255, 22, 237, 232, 208, 6, 192, - 77, 131, 81, 203, 3, 224, 173, 225, 22, 192, 77, 131, 246, 12, 203, 3, - 224, 173, 213, 97, 192, 77, 131, 247, 34, 203, 3, 224, 173, 218, 171, - 213, 83, 192, 77, 131, 203, 3, 224, 173, 208, 6, 213, 83, 192, 77, 131, - 214, 205, 213, 82, 77, 131, 247, 196, 203, 3, 224, 172, 77, 131, 248, 45, - 212, 238, 203, 3, 224, 172, 77, 131, 230, 243, 208, 5, 77, 131, 244, 44, - 208, 6, 247, 195, 77, 131, 213, 82, 77, 131, 220, 238, 213, 82, 77, 131, - 208, 6, 213, 82, 77, 131, 220, 238, 208, 6, 213, 82, 77, 131, 215, 255, - 246, 156, 211, 180, 213, 82, 77, 131, 216, 65, 238, 9, 213, 82, 77, 131, - 247, 34, 255, 26, 215, 149, 225, 21, 163, 247, 61, 77, 131, 237, 232, - 208, 5, 77, 227, 35, 2, 246, 197, 215, 148, 77, 227, 35, 2, 227, 159, - 215, 148, 77, 250, 55, 2, 213, 93, 238, 193, 255, 27, 215, 148, 77, 250, - 55, 2, 255, 24, 185, 77, 250, 55, 2, 214, 178, 208, 0, 77, 2, 216, 160, - 243, 127, 238, 192, 77, 2, 216, 160, 243, 127, 238, 41, 77, 2, 216, 160, - 243, 127, 237, 233, 77, 2, 216, 160, 223, 99, 238, 192, 77, 2, 216, 160, - 223, 99, 238, 41, 77, 2, 216, 160, 243, 127, 216, 160, 223, 98, 77, 17, - 202, 84, 77, 17, 105, 77, 17, 108, 77, 17, 147, 77, 17, 149, 77, 17, 170, - 77, 17, 195, 77, 17, 213, 111, 77, 17, 199, 77, 17, 222, 63, 77, 17, 162, - 105, 77, 17, 162, 108, 77, 17, 162, 147, 77, 17, 162, 149, 77, 17, 162, - 170, 77, 17, 162, 195, 77, 17, 162, 213, 111, 77, 17, 162, 199, 77, 17, - 162, 222, 63, 77, 17, 162, 202, 84, 77, 131, 247, 198, 215, 148, 77, 131, - 222, 194, 247, 127, 220, 249, 202, 19, 77, 131, 247, 34, 255, 26, 215, - 149, 247, 128, 224, 126, 247, 61, 77, 131, 222, 194, 247, 127, 213, 94, - 215, 148, 77, 131, 246, 171, 224, 172, 77, 131, 208, 21, 255, 23, 77, - 131, 237, 215, 215, 149, 237, 174, 77, 131, 237, 215, 215, 149, 237, 180, - 77, 131, 250, 224, 229, 134, 237, 174, 77, 131, 250, 224, 229, 134, 237, - 180, 77, 2, 203, 72, 208, 4, 77, 2, 225, 101, 208, 4, 77, 1, 173, 77, 1, - 229, 144, 77, 1, 239, 8, 77, 1, 238, 119, 77, 1, 222, 203, 77, 1, 247, - 92, 77, 1, 246, 199, 77, 1, 230, 181, 77, 1, 221, 11, 77, 1, 207, 241, - 77, 1, 207, 229, 77, 1, 244, 120, 77, 1, 244, 104, 77, 1, 221, 227, 77, - 1, 210, 22, 77, 1, 209, 108, 77, 1, 244, 212, 77, 1, 244, 1, 77, 1, 201, - 201, 77, 1, 185, 77, 1, 218, 208, 77, 1, 249, 32, 77, 1, 248, 98, 77, 1, - 192, 77, 1, 208, 20, 77, 1, 208, 10, 77, 1, 241, 255, 77, 1, 241, 249, - 77, 1, 204, 111, 77, 1, 202, 80, 77, 1, 202, 116, 77, 1, 255, 29, 77, 1, - 198, 77, 1, 216, 220, 77, 1, 228, 113, 77, 1, 213, 90, 77, 1, 211, 164, - 77, 1, 215, 36, 77, 1, 152, 77, 1, 63, 77, 1, 228, 223, 77, 1, 239, 229, - 216, 220, 77, 1, 229, 47, 77, 1, 215, 185, 77, 22, 2, 252, 25, 77, 22, 2, - 75, 77, 22, 2, 231, 83, 77, 22, 2, 68, 77, 22, 2, 206, 178, 77, 22, 2, - 125, 146, 77, 22, 2, 125, 215, 186, 77, 22, 2, 125, 159, 77, 22, 2, 125, - 227, 78, 77, 22, 2, 74, 77, 22, 2, 241, 161, 77, 22, 2, 78, 77, 22, 2, - 220, 18, 77, 2, 215, 238, 211, 11, 222, 204, 215, 227, 77, 2, 215, 232, - 248, 163, 77, 22, 2, 216, 73, 75, 77, 22, 2, 216, 73, 231, 83, 77, 2, - 220, 249, 202, 20, 223, 107, 244, 212, 77, 2, 212, 27, 227, 236, 77, 131, - 237, 139, 77, 131, 219, 132, 77, 2, 227, 239, 215, 148, 77, 2, 203, 77, - 215, 148, 77, 2, 227, 240, 208, 21, 247, 61, 77, 2, 225, 24, 247, 61, 77, - 2, 237, 236, 247, 62, 216, 63, 77, 2, 237, 236, 225, 14, 216, 63, 77, 2, - 230, 239, 225, 24, 247, 61, 77, 210, 254, 2, 227, 240, 208, 21, 247, 61, - 77, 210, 254, 2, 225, 24, 247, 61, 77, 210, 254, 2, 230, 239, 225, 24, - 247, 61, 77, 210, 254, 1, 173, 77, 210, 254, 1, 229, 144, 77, 210, 254, - 1, 239, 8, 77, 210, 254, 1, 238, 119, 77, 210, 254, 1, 222, 203, 77, 210, - 254, 1, 247, 92, 77, 210, 254, 1, 246, 199, 77, 210, 254, 1, 230, 181, - 77, 210, 254, 1, 221, 11, 77, 210, 254, 1, 207, 241, 77, 210, 254, 1, - 207, 229, 77, 210, 254, 1, 244, 120, 77, 210, 254, 1, 244, 104, 77, 210, - 254, 1, 221, 227, 77, 210, 254, 1, 210, 22, 77, 210, 254, 1, 209, 108, - 77, 210, 254, 1, 244, 212, 77, 210, 254, 1, 244, 1, 77, 210, 254, 1, 201, - 201, 77, 210, 254, 1, 185, 77, 210, 254, 1, 218, 208, 77, 210, 254, 1, - 249, 32, 77, 210, 254, 1, 248, 98, 77, 210, 254, 1, 192, 77, 210, 254, 1, - 208, 20, 77, 210, 254, 1, 208, 10, 77, 210, 254, 1, 241, 255, 77, 210, - 254, 1, 241, 249, 77, 210, 254, 1, 204, 111, 77, 210, 254, 1, 202, 80, - 77, 210, 254, 1, 202, 116, 77, 210, 254, 1, 255, 29, 77, 210, 254, 1, - 198, 77, 210, 254, 1, 216, 220, 77, 210, 254, 1, 228, 113, 77, 210, 254, - 1, 213, 90, 77, 210, 254, 1, 211, 164, 77, 210, 254, 1, 215, 36, 77, 210, - 254, 1, 152, 77, 210, 254, 1, 63, 77, 210, 254, 1, 228, 223, 77, 210, - 254, 1, 239, 229, 204, 111, 77, 210, 254, 1, 239, 229, 198, 77, 210, 254, - 1, 239, 229, 216, 220, 77, 228, 210, 215, 146, 229, 144, 77, 228, 210, - 215, 146, 229, 145, 247, 128, 224, 126, 247, 61, 77, 247, 49, 2, 79, 248, - 155, 77, 247, 49, 2, 157, 248, 155, 77, 247, 49, 2, 247, 50, 209, 185, - 77, 247, 49, 2, 214, 204, 255, 28, 77, 16, 242, 55, 247, 193, 77, 16, - 216, 159, 215, 239, 77, 16, 219, 155, 238, 191, 77, 16, 216, 159, 215, - 240, 216, 65, 238, 8, 77, 16, 218, 171, 185, 77, 16, 221, 175, 247, 193, - 77, 16, 221, 175, 247, 194, 220, 238, 255, 25, 77, 16, 221, 175, 247, - 194, 237, 234, 255, 25, 77, 16, 221, 175, 247, 194, 247, 128, 255, 25, - 77, 2, 216, 160, 223, 99, 216, 160, 243, 126, 77, 2, 216, 160, 223, 99, - 237, 233, 77, 131, 247, 197, 212, 238, 238, 82, 224, 173, 216, 64, 77, - 131, 224, 84, 203, 3, 238, 82, 224, 173, 216, 64, 77, 131, 220, 238, 208, - 5, 77, 131, 81, 247, 220, 215, 229, 203, 3, 224, 173, 225, 22, 192, 77, - 131, 246, 12, 247, 220, 215, 229, 203, 3, 224, 173, 213, 97, 192, 216, - 15, 210, 174, 54, 227, 221, 210, 174, 54, 216, 15, 210, 174, 2, 3, 243, - 83, 227, 221, 210, 174, 2, 3, 243, 83, 77, 131, 227, 231, 225, 25, 215, - 148, 77, 131, 208, 112, 225, 25, 215, 148, 69, 1, 173, 69, 1, 229, 144, - 69, 1, 239, 8, 69, 1, 238, 119, 69, 1, 222, 203, 69, 1, 247, 92, 69, 1, - 246, 199, 69, 1, 230, 181, 69, 1, 230, 149, 69, 1, 221, 11, 69, 1, 221, - 193, 69, 1, 207, 241, 69, 1, 207, 229, 69, 1, 244, 120, 69, 1, 244, 104, - 69, 1, 221, 227, 69, 1, 210, 22, 69, 1, 209, 108, 69, 1, 244, 212, 69, 1, - 244, 1, 69, 1, 201, 201, 69, 1, 185, 69, 1, 218, 208, 69, 1, 249, 32, 69, - 1, 248, 98, 69, 1, 192, 69, 1, 198, 69, 1, 216, 220, 69, 1, 228, 113, 69, - 1, 204, 111, 69, 1, 215, 36, 69, 1, 152, 69, 1, 227, 77, 69, 1, 63, 69, - 1, 213, 67, 63, 69, 1, 75, 69, 1, 231, 83, 69, 1, 68, 69, 1, 206, 178, - 69, 1, 74, 69, 1, 224, 55, 74, 69, 1, 78, 69, 1, 250, 34, 69, 22, 2, 209, - 234, 252, 25, 69, 22, 2, 252, 25, 69, 22, 2, 75, 69, 22, 2, 231, 83, 69, - 22, 2, 68, 69, 22, 2, 206, 178, 69, 22, 2, 74, 69, 22, 2, 251, 64, 69, - 22, 2, 224, 55, 231, 83, 69, 22, 2, 224, 55, 78, 69, 22, 2, 188, 55, 69, - 2, 250, 180, 69, 2, 70, 56, 69, 2, 205, 199, 69, 2, 205, 204, 69, 2, 250, - 79, 69, 109, 2, 174, 198, 69, 109, 2, 174, 216, 220, 69, 109, 2, 174, - 204, 111, 69, 109, 2, 174, 152, 69, 1, 237, 249, 215, 36, 69, 17, 202, - 84, 69, 17, 105, 69, 17, 108, 69, 17, 147, 69, 17, 149, 69, 17, 170, 69, - 17, 195, 69, 17, 213, 111, 69, 17, 199, 69, 17, 222, 63, 69, 2, 227, 86, - 214, 167, 69, 2, 214, 167, 69, 16, 227, 44, 69, 16, 245, 227, 69, 16, - 251, 85, 69, 16, 238, 174, 69, 1, 213, 90, 69, 1, 211, 164, 69, 1, 125, - 146, 69, 1, 125, 215, 186, 69, 1, 125, 159, 69, 1, 125, 227, 78, 69, 22, - 2, 125, 146, 69, 22, 2, 125, 215, 186, 69, 22, 2, 125, 159, 69, 22, 2, - 125, 227, 78, 69, 1, 224, 55, 222, 203, 69, 1, 224, 55, 230, 149, 69, 1, - 224, 55, 248, 198, 69, 1, 224, 55, 248, 193, 69, 109, 2, 224, 55, 174, - 201, 201, 69, 109, 2, 224, 55, 174, 192, 69, 109, 2, 224, 55, 174, 228, - 113, 69, 1, 213, 96, 229, 237, 213, 90, 69, 22, 2, 213, 96, 229, 237, - 240, 238, 69, 143, 131, 213, 96, 229, 237, 237, 79, 69, 143, 131, 213, - 96, 229, 237, 229, 202, 218, 180, 69, 1, 204, 44, 217, 146, 229, 237, - 209, 108, 69, 1, 204, 44, 217, 146, 229, 237, 217, 152, 69, 22, 2, 204, - 44, 217, 146, 229, 237, 240, 238, 69, 22, 2, 204, 44, 217, 146, 229, 237, - 207, 24, 69, 2, 204, 44, 217, 146, 229, 237, 208, 160, 69, 2, 204, 44, - 217, 146, 229, 237, 208, 159, 69, 2, 204, 44, 217, 146, 229, 237, 208, - 158, 69, 2, 204, 44, 217, 146, 229, 237, 208, 157, 69, 2, 204, 44, 217, - 146, 229, 237, 208, 156, 69, 1, 241, 174, 217, 146, 229, 237, 221, 227, - 69, 1, 241, 174, 217, 146, 229, 237, 202, 176, 69, 1, 241, 174, 217, 146, - 229, 237, 238, 84, 69, 22, 2, 238, 186, 229, 237, 75, 69, 22, 2, 229, - 207, 220, 73, 69, 22, 2, 229, 207, 68, 69, 22, 2, 229, 207, 241, 161, 69, - 1, 213, 67, 173, 69, 1, 213, 67, 229, 144, 69, 1, 213, 67, 239, 8, 69, 1, - 213, 67, 247, 92, 69, 1, 213, 67, 202, 116, 69, 1, 213, 67, 221, 11, 69, - 1, 213, 67, 244, 212, 69, 1, 213, 67, 201, 201, 69, 1, 213, 67, 218, 208, - 69, 1, 213, 67, 240, 108, 69, 1, 213, 67, 249, 32, 69, 1, 213, 67, 209, - 108, 69, 1, 213, 67, 152, 69, 109, 2, 213, 67, 174, 204, 111, 69, 22, 2, - 213, 67, 252, 25, 69, 22, 2, 213, 67, 74, 69, 22, 2, 213, 67, 188, 55, - 69, 22, 2, 213, 67, 46, 203, 124, 69, 2, 213, 67, 208, 159, 69, 2, 213, - 67, 208, 158, 69, 2, 213, 67, 208, 156, 69, 2, 213, 67, 208, 155, 69, 2, - 213, 67, 245, 156, 208, 159, 69, 2, 213, 67, 245, 156, 208, 158, 69, 2, - 213, 67, 245, 156, 241, 95, 208, 161, 69, 1, 215, 130, 219, 139, 240, - 108, 69, 2, 215, 130, 219, 139, 208, 156, 69, 213, 67, 17, 202, 84, 69, - 213, 67, 17, 105, 69, 213, 67, 17, 108, 69, 213, 67, 17, 147, 69, 213, - 67, 17, 149, 69, 213, 67, 17, 170, 69, 213, 67, 17, 195, 69, 213, 67, 17, - 213, 111, 69, 213, 67, 17, 199, 69, 213, 67, 17, 222, 63, 69, 2, 229, - 137, 208, 160, 69, 2, 229, 137, 208, 158, 69, 22, 2, 251, 51, 63, 69, 22, - 2, 251, 51, 251, 64, 69, 16, 213, 67, 105, 69, 16, 213, 67, 240, 211, - 114, 6, 1, 250, 231, 114, 6, 1, 248, 242, 114, 6, 1, 238, 234, 114, 6, 1, - 243, 93, 114, 6, 1, 241, 92, 114, 6, 1, 205, 213, 114, 6, 1, 202, 87, - 114, 6, 1, 209, 230, 114, 6, 1, 231, 49, 114, 6, 1, 230, 4, 114, 6, 1, - 228, 2, 114, 6, 1, 225, 122, 114, 6, 1, 223, 74, 114, 6, 1, 220, 31, 114, - 6, 1, 219, 91, 114, 6, 1, 202, 76, 114, 6, 1, 216, 202, 114, 6, 1, 214, - 243, 114, 6, 1, 209, 218, 114, 6, 1, 206, 255, 114, 6, 1, 218, 200, 114, - 6, 1, 229, 132, 114, 6, 1, 238, 110, 114, 6, 1, 217, 111, 114, 6, 1, 212, - 255, 114, 6, 1, 246, 129, 114, 6, 1, 247, 61, 114, 6, 1, 230, 133, 114, - 6, 1, 246, 68, 114, 6, 1, 246, 183, 114, 6, 1, 203, 180, 114, 6, 1, 230, - 146, 114, 6, 1, 237, 154, 114, 6, 1, 237, 67, 114, 6, 1, 236, 254, 114, - 6, 1, 204, 62, 114, 6, 1, 237, 92, 114, 6, 1, 236, 132, 114, 6, 1, 202, - 249, 114, 6, 1, 251, 98, 114, 1, 250, 231, 114, 1, 248, 242, 114, 1, 238, - 234, 114, 1, 243, 93, 114, 1, 241, 92, 114, 1, 205, 213, 114, 1, 202, 87, - 114, 1, 209, 230, 114, 1, 231, 49, 114, 1, 230, 4, 114, 1, 228, 2, 114, - 1, 225, 122, 114, 1, 223, 74, 114, 1, 220, 31, 114, 1, 219, 91, 114, 1, - 202, 76, 114, 1, 216, 202, 114, 1, 214, 243, 114, 1, 209, 218, 114, 1, - 206, 255, 114, 1, 218, 200, 114, 1, 229, 132, 114, 1, 238, 110, 114, 1, - 217, 111, 114, 1, 212, 255, 114, 1, 246, 129, 114, 1, 247, 61, 114, 1, - 230, 133, 114, 1, 246, 68, 114, 1, 246, 183, 114, 1, 203, 180, 114, 1, - 230, 146, 114, 1, 237, 154, 114, 1, 237, 67, 114, 1, 236, 254, 114, 1, - 204, 62, 114, 1, 237, 92, 114, 1, 236, 132, 114, 1, 240, 26, 114, 1, 202, - 249, 114, 1, 241, 110, 114, 1, 207, 174, 238, 234, 114, 1, 251, 59, 114, - 219, 89, 213, 130, 65, 1, 114, 223, 74, 114, 1, 251, 98, 114, 1, 237, 91, - 54, 114, 1, 228, 104, 54, 28, 123, 229, 59, 28, 123, 211, 156, 28, 123, - 222, 93, 28, 123, 208, 240, 28, 123, 211, 145, 28, 123, 216, 47, 28, 123, - 224, 141, 28, 123, 218, 153, 28, 123, 211, 153, 28, 123, 212, 111, 28, - 123, 211, 150, 28, 123, 231, 106, 28, 123, 246, 74, 28, 123, 211, 160, - 28, 123, 246, 138, 28, 123, 229, 120, 28, 123, 209, 66, 28, 123, 218, - 190, 28, 123, 236, 251, 28, 123, 222, 89, 28, 123, 211, 154, 28, 123, - 222, 83, 28, 123, 222, 87, 28, 123, 208, 237, 28, 123, 216, 35, 28, 123, - 211, 152, 28, 123, 216, 45, 28, 123, 229, 243, 28, 123, 224, 134, 28, - 123, 229, 246, 28, 123, 218, 148, 28, 123, 218, 146, 28, 123, 218, 134, - 28, 123, 218, 142, 28, 123, 218, 140, 28, 123, 218, 137, 28, 123, 218, - 139, 28, 123, 218, 136, 28, 123, 218, 141, 28, 123, 218, 151, 28, 123, - 218, 152, 28, 123, 218, 135, 28, 123, 218, 145, 28, 123, 229, 244, 28, - 123, 229, 242, 28, 123, 212, 104, 28, 123, 212, 102, 28, 123, 212, 94, - 28, 123, 212, 97, 28, 123, 212, 103, 28, 123, 212, 99, 28, 123, 212, 98, - 28, 123, 212, 96, 28, 123, 212, 107, 28, 123, 212, 109, 28, 123, 212, - 110, 28, 123, 212, 105, 28, 123, 212, 95, 28, 123, 212, 100, 28, 123, - 212, 108, 28, 123, 246, 120, 28, 123, 246, 118, 28, 123, 246, 210, 28, - 123, 246, 208, 28, 123, 219, 107, 28, 123, 231, 101, 28, 123, 231, 92, - 28, 123, 231, 100, 28, 123, 231, 97, 28, 123, 231, 95, 28, 123, 231, 99, - 28, 123, 211, 157, 28, 123, 231, 104, 28, 123, 231, 105, 28, 123, 231, - 93, 28, 123, 231, 98, 28, 123, 203, 29, 28, 123, 246, 73, 28, 123, 246, - 121, 28, 123, 246, 119, 28, 123, 246, 211, 28, 123, 246, 209, 28, 123, - 246, 136, 28, 123, 246, 137, 28, 123, 246, 122, 28, 123, 246, 212, 28, - 123, 218, 188, 28, 123, 229, 245, 28, 123, 211, 158, 28, 123, 203, 35, - 28, 123, 229, 50, 28, 123, 222, 85, 28, 123, 222, 91, 28, 123, 222, 90, - 28, 123, 208, 234, 28, 123, 240, 7, 28, 176, 240, 7, 28, 176, 63, 28, - 176, 251, 109, 28, 176, 198, 28, 176, 203, 99, 28, 176, 241, 55, 28, 176, - 74, 28, 176, 203, 39, 28, 176, 203, 52, 28, 176, 78, 28, 176, 204, 111, - 28, 176, 204, 107, 28, 176, 220, 73, 28, 176, 202, 247, 28, 176, 68, 28, - 176, 204, 48, 28, 176, 204, 62, 28, 176, 204, 30, 28, 176, 202, 213, 28, - 176, 240, 238, 28, 176, 203, 11, 28, 176, 75, 28, 176, 255, 20, 28, 176, - 255, 19, 28, 176, 203, 113, 28, 176, 203, 111, 28, 176, 241, 53, 28, 176, - 241, 52, 28, 176, 241, 54, 28, 176, 203, 38, 28, 176, 203, 37, 28, 176, - 220, 181, 28, 176, 220, 182, 28, 176, 220, 175, 28, 176, 220, 180, 28, - 176, 220, 178, 28, 176, 202, 241, 28, 176, 202, 240, 28, 176, 202, 239, - 28, 176, 202, 242, 28, 176, 202, 243, 28, 176, 207, 97, 28, 176, 207, 96, - 28, 176, 207, 94, 28, 176, 207, 90, 28, 176, 207, 91, 28, 176, 202, 212, - 28, 176, 202, 209, 28, 176, 202, 210, 28, 176, 202, 204, 28, 176, 202, - 205, 28, 176, 202, 206, 28, 176, 202, 208, 28, 176, 240, 232, 28, 176, - 240, 234, 28, 176, 203, 10, 28, 176, 235, 205, 28, 176, 235, 197, 28, - 176, 235, 200, 28, 176, 235, 198, 28, 176, 235, 202, 28, 176, 235, 204, - 28, 176, 250, 137, 28, 176, 250, 134, 28, 176, 250, 132, 28, 176, 250, - 133, 28, 176, 211, 161, 28, 176, 255, 21, 28, 176, 203, 112, 28, 176, - 203, 36, 28, 176, 220, 177, 28, 176, 220, 176, 28, 107, 229, 59, 28, 107, - 211, 156, 28, 107, 229, 52, 28, 107, 222, 93, 28, 107, 222, 91, 28, 107, - 222, 90, 28, 107, 208, 240, 28, 107, 216, 47, 28, 107, 216, 42, 28, 107, - 216, 39, 28, 107, 216, 32, 28, 107, 216, 27, 28, 107, 216, 22, 28, 107, - 216, 33, 28, 107, 216, 45, 28, 107, 224, 141, 28, 107, 218, 153, 28, 107, - 218, 142, 28, 107, 212, 111, 28, 107, 211, 150, 28, 107, 231, 106, 28, - 107, 246, 74, 28, 107, 246, 138, 28, 107, 229, 120, 28, 107, 209, 66, 28, - 107, 218, 190, 28, 107, 236, 251, 28, 107, 229, 53, 28, 107, 229, 51, 28, - 107, 222, 89, 28, 107, 222, 83, 28, 107, 222, 85, 28, 107, 222, 88, 28, - 107, 222, 84, 28, 107, 208, 237, 28, 107, 208, 234, 28, 107, 216, 40, 28, - 107, 216, 35, 28, 107, 216, 21, 28, 107, 216, 20, 28, 107, 211, 152, 28, - 107, 216, 37, 28, 107, 216, 36, 28, 107, 216, 29, 28, 107, 216, 31, 28, - 107, 216, 44, 28, 107, 216, 24, 28, 107, 216, 34, 28, 107, 216, 43, 28, - 107, 216, 19, 28, 107, 224, 137, 28, 107, 224, 132, 28, 107, 224, 134, - 28, 107, 224, 131, 28, 107, 224, 129, 28, 107, 224, 135, 28, 107, 224, - 140, 28, 107, 224, 138, 28, 107, 229, 246, 28, 107, 218, 144, 28, 107, - 218, 145, 28, 107, 218, 150, 28, 107, 229, 244, 28, 107, 212, 104, 28, - 107, 212, 94, 28, 107, 212, 97, 28, 107, 212, 99, 28, 107, 219, 107, 28, - 107, 231, 101, 28, 107, 231, 94, 28, 107, 211, 157, 28, 107, 231, 102, - 28, 107, 203, 29, 28, 107, 203, 25, 28, 107, 203, 26, 28, 107, 218, 188, - 28, 107, 229, 245, 28, 107, 236, 249, 28, 107, 236, 247, 28, 107, 236, - 250, 28, 107, 236, 248, 28, 107, 203, 35, 28, 107, 229, 55, 28, 107, 229, - 54, 28, 107, 229, 58, 28, 107, 229, 56, 28, 107, 229, 57, 28, 107, 211, - 154, 33, 4, 152, 33, 4, 236, 26, 33, 4, 237, 3, 33, 4, 237, 157, 33, 4, - 237, 48, 33, 4, 237, 67, 33, 4, 236, 136, 33, 4, 236, 135, 33, 4, 228, - 113, 33, 4, 226, 239, 33, 4, 227, 148, 33, 4, 228, 112, 33, 4, 227, 226, - 33, 4, 227, 234, 33, 4, 227, 49, 33, 4, 226, 207, 33, 4, 237, 12, 33, 4, - 237, 6, 33, 4, 237, 8, 33, 4, 237, 11, 33, 4, 237, 9, 33, 4, 237, 10, 33, - 4, 237, 7, 33, 4, 237, 5, 33, 4, 192, 33, 4, 223, 246, 33, 4, 224, 155, - 33, 4, 225, 175, 33, 4, 225, 8, 33, 4, 225, 20, 33, 4, 224, 82, 33, 4, - 223, 180, 33, 4, 210, 80, 33, 4, 210, 74, 33, 4, 210, 76, 33, 4, 210, 79, - 33, 4, 210, 77, 33, 4, 210, 78, 33, 4, 210, 75, 33, 4, 210, 73, 33, 4, - 216, 220, 33, 4, 215, 145, 33, 4, 216, 57, 33, 4, 216, 216, 33, 4, 216, - 135, 33, 4, 216, 158, 33, 4, 215, 227, 33, 4, 215, 111, 33, 4, 215, 36, - 33, 4, 211, 10, 33, 4, 212, 162, 33, 4, 215, 33, 33, 4, 214, 165, 33, 4, - 214, 177, 33, 4, 212, 13, 33, 4, 210, 172, 33, 4, 213, 90, 33, 4, 212, - 199, 33, 4, 213, 11, 33, 4, 213, 85, 33, 4, 213, 41, 33, 4, 213, 43, 33, - 4, 212, 242, 33, 4, 212, 180, 33, 4, 217, 126, 33, 4, 217, 65, 33, 4, - 217, 88, 33, 4, 217, 125, 33, 4, 217, 105, 33, 4, 217, 106, 33, 4, 217, - 77, 33, 4, 217, 76, 33, 4, 217, 19, 33, 4, 217, 15, 33, 4, 217, 18, 33, - 4, 217, 16, 33, 4, 217, 17, 33, 4, 217, 102, 33, 4, 217, 94, 33, 4, 217, - 97, 33, 4, 217, 101, 33, 4, 217, 98, 33, 4, 217, 99, 33, 4, 217, 96, 33, - 4, 217, 93, 33, 4, 217, 89, 33, 4, 217, 92, 33, 4, 217, 90, 33, 4, 217, - 91, 33, 4, 249, 32, 33, 4, 247, 193, 33, 4, 248, 86, 33, 4, 249, 30, 33, - 4, 248, 150, 33, 4, 248, 162, 33, 4, 248, 23, 33, 4, 247, 142, 33, 4, - 206, 86, 33, 4, 204, 163, 33, 4, 205, 230, 33, 4, 206, 85, 33, 4, 206, - 50, 33, 4, 206, 55, 33, 4, 205, 189, 33, 4, 204, 154, 33, 4, 210, 22, 33, - 4, 207, 203, 33, 4, 209, 2, 33, 4, 210, 18, 33, 4, 209, 176, 33, 4, 209, - 187, 33, 4, 135, 33, 4, 207, 160, 33, 4, 247, 92, 33, 4, 245, 110, 33, 4, - 246, 79, 33, 4, 247, 91, 33, 4, 246, 230, 33, 4, 246, 238, 33, 4, 245, - 254, 33, 4, 245, 74, 33, 4, 203, 182, 33, 4, 203, 152, 33, 4, 203, 170, - 33, 4, 203, 181, 33, 4, 203, 175, 33, 4, 203, 176, 33, 4, 203, 160, 33, - 4, 203, 159, 33, 4, 203, 146, 33, 4, 203, 142, 33, 4, 203, 145, 33, 4, - 203, 143, 33, 4, 203, 144, 33, 4, 201, 201, 33, 4, 221, 84, 33, 4, 222, - 100, 33, 4, 223, 106, 33, 4, 222, 235, 33, 4, 222, 240, 33, 4, 221, 191, - 33, 4, 221, 20, 33, 4, 221, 11, 33, 4, 220, 226, 33, 4, 220, 248, 33, 4, - 221, 10, 33, 4, 221, 0, 33, 4, 221, 1, 33, 4, 220, 233, 33, 4, 220, 216, - 33, 4, 238, 45, 63, 33, 4, 238, 45, 68, 33, 4, 238, 45, 75, 33, 4, 238, - 45, 252, 25, 33, 4, 238, 45, 241, 161, 33, 4, 238, 45, 74, 33, 4, 238, - 45, 78, 33, 4, 238, 45, 204, 111, 33, 4, 173, 33, 4, 228, 209, 33, 4, - 229, 100, 33, 4, 230, 41, 33, 4, 229, 198, 33, 4, 229, 201, 33, 4, 229, - 26, 33, 4, 229, 25, 33, 4, 228, 167, 33, 4, 228, 160, 33, 4, 228, 166, - 33, 4, 228, 161, 33, 4, 228, 162, 33, 4, 228, 153, 33, 4, 228, 147, 33, - 4, 228, 149, 33, 4, 228, 152, 33, 4, 228, 150, 33, 4, 228, 151, 33, 4, - 228, 148, 33, 4, 228, 146, 33, 4, 228, 142, 33, 4, 228, 145, 33, 4, 228, - 143, 33, 4, 228, 144, 33, 4, 204, 111, 33, 4, 203, 217, 33, 4, 204, 30, - 33, 4, 204, 110, 33, 4, 204, 55, 33, 4, 204, 62, 33, 4, 204, 0, 33, 4, - 203, 255, 33, 4, 218, 199, 63, 33, 4, 218, 199, 68, 33, 4, 218, 199, 75, - 33, 4, 218, 199, 252, 25, 33, 4, 218, 199, 241, 161, 33, 4, 218, 199, 74, - 33, 4, 218, 199, 78, 33, 4, 202, 116, 33, 4, 202, 6, 33, 4, 202, 39, 33, - 4, 202, 114, 33, 4, 202, 90, 33, 4, 202, 92, 33, 4, 202, 17, 33, 4, 201, - 249, 33, 4, 202, 80, 33, 4, 202, 57, 33, 4, 202, 66, 33, 4, 202, 79, 33, - 4, 202, 70, 33, 4, 202, 71, 33, 4, 202, 63, 33, 4, 202, 48, 33, 4, 198, - 33, 4, 202, 213, 33, 4, 203, 11, 33, 4, 203, 110, 33, 4, 203, 49, 33, 4, - 203, 52, 33, 4, 202, 247, 33, 4, 202, 238, 33, 4, 244, 212, 33, 4, 242, - 42, 33, 4, 243, 233, 33, 4, 244, 211, 33, 4, 244, 61, 33, 4, 244, 75, 33, - 4, 243, 113, 33, 4, 242, 10, 33, 4, 244, 120, 33, 4, 244, 85, 33, 4, 244, - 97, 33, 4, 244, 119, 33, 4, 244, 107, 33, 4, 244, 108, 33, 4, 244, 90, - 33, 4, 244, 76, 33, 4, 230, 181, 33, 4, 230, 82, 33, 4, 230, 141, 33, 4, - 230, 180, 33, 4, 230, 159, 33, 4, 230, 161, 33, 4, 230, 101, 33, 4, 230, - 62, 33, 4, 239, 8, 33, 4, 237, 230, 33, 4, 238, 81, 33, 4, 239, 5, 33, 4, - 238, 182, 33, 4, 238, 190, 33, 4, 238, 39, 33, 4, 238, 38, 33, 4, 237, - 190, 33, 4, 237, 186, 33, 4, 237, 189, 33, 4, 237, 187, 33, 4, 237, 188, - 33, 4, 238, 155, 33, 4, 238, 135, 33, 4, 238, 145, 33, 4, 238, 154, 33, - 4, 238, 149, 33, 4, 238, 150, 33, 4, 238, 139, 33, 4, 238, 124, 33, 4, - 209, 108, 33, 4, 209, 22, 33, 4, 209, 70, 33, 4, 209, 107, 33, 4, 209, - 90, 33, 4, 209, 92, 33, 4, 209, 47, 33, 4, 209, 13, 33, 4, 246, 199, 33, - 4, 246, 98, 33, 4, 246, 142, 33, 4, 246, 198, 33, 4, 246, 166, 33, 4, - 246, 170, 33, 4, 246, 116, 33, 4, 246, 87, 33, 4, 218, 208, 33, 4, 218, - 173, 33, 4, 218, 192, 33, 4, 218, 207, 33, 4, 218, 194, 33, 4, 218, 195, - 33, 4, 218, 180, 33, 4, 218, 169, 33, 4, 208, 20, 33, 4, 207, 249, 33, 4, - 207, 255, 33, 4, 208, 19, 33, 4, 208, 13, 33, 4, 208, 14, 33, 4, 207, - 253, 33, 4, 207, 247, 33, 4, 207, 106, 33, 4, 207, 98, 33, 4, 207, 102, - 33, 4, 207, 105, 33, 4, 207, 103, 33, 4, 207, 104, 33, 4, 207, 100, 33, - 4, 207, 99, 33, 4, 240, 108, 33, 4, 239, 108, 33, 4, 240, 26, 33, 4, 240, - 107, 33, 4, 240, 53, 33, 4, 240, 60, 33, 4, 239, 186, 33, 4, 239, 86, 33, - 4, 185, 33, 4, 217, 191, 33, 4, 218, 167, 33, 4, 219, 168, 33, 4, 219, - 23, 33, 4, 219, 34, 33, 4, 218, 69, 33, 4, 217, 152, 33, 4, 215, 101, 33, - 4, 223, 169, 33, 4, 239, 80, 33, 39, 238, 179, 25, 22, 227, 196, 82, 33, - 39, 22, 227, 196, 82, 33, 39, 238, 179, 82, 33, 214, 168, 82, 33, 203, - 237, 33, 239, 102, 211, 61, 33, 245, 233, 33, 213, 143, 33, 245, 242, 33, - 217, 246, 245, 242, 33, 217, 47, 82, 33, 219, 89, 213, 130, 33, 17, 105, - 33, 17, 108, 33, 17, 147, 33, 17, 149, 33, 17, 170, 33, 17, 195, 33, 17, - 213, 111, 33, 17, 199, 33, 17, 222, 63, 33, 42, 209, 152, 33, 42, 207, - 151, 33, 42, 209, 53, 33, 42, 239, 153, 33, 42, 240, 18, 33, 42, 212, 74, - 33, 42, 213, 105, 33, 42, 241, 134, 33, 42, 222, 58, 33, 42, 236, 11, 33, - 42, 209, 153, 209, 36, 33, 4, 214, 173, 223, 180, 33, 4, 223, 176, 33, 4, - 223, 177, 33, 4, 223, 178, 33, 4, 214, 173, 247, 142, 33, 4, 247, 139, - 33, 4, 247, 140, 33, 4, 247, 141, 33, 4, 214, 173, 239, 86, 33, 4, 239, - 82, 33, 4, 239, 83, 33, 4, 239, 84, 33, 4, 214, 173, 217, 152, 33, 4, - 217, 148, 33, 4, 217, 149, 33, 4, 217, 150, 33, 208, 162, 131, 202, 250, - 33, 208, 162, 131, 244, 22, 33, 208, 162, 131, 216, 2, 33, 208, 162, 131, - 212, 228, 216, 2, 33, 208, 162, 131, 243, 207, 33, 208, 162, 131, 229, - 179, 33, 208, 162, 131, 246, 124, 33, 208, 162, 131, 237, 0, 33, 208, - 162, 131, 244, 21, 33, 208, 162, 131, 228, 181, 90, 1, 63, 90, 1, 74, 90, - 1, 75, 90, 1, 78, 90, 1, 68, 90, 1, 206, 164, 90, 1, 239, 8, 90, 1, 173, - 90, 1, 238, 190, 90, 1, 238, 81, 90, 1, 238, 39, 90, 1, 237, 230, 90, 1, - 237, 192, 90, 1, 152, 90, 1, 237, 67, 90, 1, 237, 3, 90, 1, 236, 136, 90, - 1, 236, 26, 90, 1, 235, 255, 90, 1, 228, 113, 90, 1, 227, 234, 90, 1, - 227, 148, 90, 1, 227, 49, 90, 1, 226, 239, 90, 1, 226, 208, 90, 1, 192, - 90, 1, 225, 20, 90, 1, 224, 155, 90, 1, 224, 82, 90, 1, 223, 246, 90, 1, - 201, 201, 90, 1, 236, 160, 90, 1, 223, 93, 90, 1, 222, 240, 90, 1, 222, - 100, 90, 1, 221, 191, 90, 1, 221, 84, 90, 1, 221, 22, 90, 1, 217, 64, 90, - 1, 217, 50, 90, 1, 217, 43, 90, 1, 217, 34, 90, 1, 217, 23, 90, 1, 217, - 21, 90, 1, 215, 36, 90, 1, 194, 90, 1, 214, 177, 90, 1, 212, 162, 90, 1, - 212, 13, 90, 1, 211, 10, 90, 1, 210, 177, 90, 1, 244, 212, 90, 1, 210, - 22, 90, 1, 244, 75, 90, 1, 209, 187, 90, 1, 243, 233, 90, 1, 209, 2, 90, - 1, 243, 113, 90, 1, 242, 42, 90, 1, 242, 13, 90, 1, 243, 124, 90, 1, 208, - 190, 90, 1, 208, 189, 90, 1, 208, 178, 90, 1, 208, 177, 90, 1, 208, 176, - 90, 1, 208, 175, 90, 1, 208, 20, 90, 1, 208, 14, 90, 1, 207, 255, 90, 1, - 207, 253, 90, 1, 207, 249, 90, 1, 207, 248, 90, 1, 204, 111, 90, 1, 204, - 62, 90, 1, 204, 30, 90, 1, 204, 0, 90, 1, 203, 217, 90, 1, 203, 204, 90, - 1, 198, 90, 1, 203, 52, 90, 1, 203, 11, 90, 1, 202, 247, 90, 1, 202, 213, - 90, 1, 202, 177, 90, 1, 223, 187, 90, 5, 1, 203, 52, 90, 5, 1, 203, 11, - 90, 5, 1, 202, 247, 90, 5, 1, 202, 213, 90, 5, 1, 202, 177, 90, 5, 1, - 223, 187, 19, 20, 235, 220, 19, 20, 74, 19, 20, 251, 245, 19, 20, 75, 19, - 20, 231, 83, 19, 20, 78, 19, 20, 220, 18, 19, 20, 203, 123, 220, 18, 19, - 20, 88, 241, 161, 19, 20, 88, 75, 19, 20, 63, 19, 20, 252, 25, 19, 20, - 204, 62, 19, 20, 196, 204, 62, 19, 20, 204, 30, 19, 20, 196, 204, 30, 19, - 20, 204, 19, 19, 20, 196, 204, 19, 19, 20, 204, 0, 19, 20, 196, 204, 0, - 19, 20, 203, 244, 19, 20, 196, 203, 244, 19, 20, 223, 68, 203, 244, 19, - 20, 204, 111, 19, 20, 196, 204, 111, 19, 20, 204, 110, 19, 20, 196, 204, - 110, 19, 20, 223, 68, 204, 110, 19, 20, 251, 64, 19, 20, 203, 123, 204, - 144, 19, 20, 238, 45, 211, 61, 19, 20, 46, 165, 19, 20, 46, 237, 253, 19, - 20, 46, 247, 248, 162, 215, 252, 19, 20, 46, 208, 145, 162, 215, 252, 19, - 20, 46, 50, 162, 215, 252, 19, 20, 46, 215, 252, 19, 20, 46, 52, 165, 19, - 20, 46, 52, 212, 228, 80, 211, 19, 19, 20, 46, 101, 243, 85, 19, 20, 46, - 212, 228, 236, 106, 95, 19, 20, 46, 218, 76, 19, 20, 46, 121, 210, 3, 19, - 20, 241, 92, 19, 20, 231, 49, 19, 20, 220, 31, 19, 20, 250, 231, 19, 20, - 219, 34, 19, 20, 219, 166, 19, 20, 218, 167, 19, 20, 218, 129, 19, 20, - 218, 69, 19, 20, 218, 45, 19, 20, 203, 123, 218, 45, 19, 20, 88, 237, 48, - 19, 20, 88, 237, 3, 19, 20, 185, 19, 20, 219, 168, 19, 20, 217, 150, 19, - 20, 196, 217, 150, 19, 20, 217, 148, 19, 20, 196, 217, 148, 19, 20, 217, - 147, 19, 20, 196, 217, 147, 19, 20, 217, 145, 19, 20, 196, 217, 145, 19, - 20, 217, 144, 19, 20, 196, 217, 144, 19, 20, 217, 152, 19, 20, 196, 217, - 152, 19, 20, 217, 151, 19, 20, 196, 217, 151, 19, 20, 203, 123, 217, 151, - 19, 20, 219, 184, 19, 20, 196, 219, 184, 19, 20, 88, 237, 171, 19, 20, - 209, 187, 19, 20, 210, 16, 19, 20, 209, 2, 19, 20, 208, 242, 19, 20, 135, - 19, 20, 208, 148, 19, 20, 203, 123, 208, 148, 19, 20, 88, 244, 61, 19, - 20, 88, 243, 233, 19, 20, 210, 22, 19, 20, 210, 18, 19, 20, 207, 158, 19, - 20, 196, 207, 158, 19, 20, 207, 140, 19, 20, 196, 207, 140, 19, 20, 207, - 139, 19, 20, 196, 207, 139, 19, 20, 108, 19, 20, 196, 108, 19, 20, 207, - 130, 19, 20, 196, 207, 130, 19, 20, 207, 160, 19, 20, 196, 207, 160, 19, - 20, 207, 159, 19, 20, 196, 207, 159, 19, 20, 223, 68, 207, 159, 19, 20, - 210, 69, 19, 20, 207, 236, 19, 20, 207, 220, 19, 20, 207, 218, 19, 20, - 207, 241, 19, 20, 229, 201, 19, 20, 230, 36, 19, 20, 229, 100, 19, 20, - 229, 87, 19, 20, 229, 26, 19, 20, 229, 6, 19, 20, 203, 123, 229, 6, 19, - 20, 173, 19, 20, 230, 41, 19, 20, 228, 162, 19, 20, 196, 228, 162, 19, - 20, 228, 160, 19, 20, 196, 228, 160, 19, 20, 228, 159, 19, 20, 196, 228, - 159, 19, 20, 228, 157, 19, 20, 196, 228, 157, 19, 20, 228, 156, 19, 20, - 196, 228, 156, 19, 20, 228, 167, 19, 20, 196, 228, 167, 19, 20, 228, 166, - 19, 20, 196, 228, 166, 19, 20, 223, 68, 228, 166, 19, 20, 230, 54, 19, - 20, 228, 168, 19, 20, 211, 237, 229, 191, 19, 20, 211, 237, 229, 88, 19, - 20, 211, 237, 229, 20, 19, 20, 211, 237, 230, 20, 19, 20, 246, 238, 19, - 20, 247, 90, 19, 20, 246, 79, 19, 20, 246, 69, 19, 20, 245, 254, 19, 20, - 245, 180, 19, 20, 203, 123, 245, 180, 19, 20, 247, 92, 19, 20, 247, 91, - 19, 20, 245, 72, 19, 20, 196, 245, 72, 19, 20, 245, 70, 19, 20, 196, 245, - 70, 19, 20, 245, 69, 19, 20, 196, 245, 69, 19, 20, 245, 68, 19, 20, 196, - 245, 68, 19, 20, 245, 67, 19, 20, 196, 245, 67, 19, 20, 245, 74, 19, 20, - 196, 245, 74, 19, 20, 245, 73, 19, 20, 196, 245, 73, 19, 20, 223, 68, - 245, 73, 19, 20, 247, 125, 19, 20, 214, 206, 209, 110, 19, 20, 225, 20, - 19, 20, 225, 174, 19, 20, 224, 155, 19, 20, 224, 125, 19, 20, 224, 82, - 19, 20, 224, 35, 19, 20, 203, 123, 224, 35, 19, 20, 192, 19, 20, 225, - 175, 19, 20, 223, 178, 19, 20, 196, 223, 178, 19, 20, 223, 176, 19, 20, - 196, 223, 176, 19, 20, 223, 175, 19, 20, 196, 223, 175, 19, 20, 223, 174, - 19, 20, 196, 223, 174, 19, 20, 223, 173, 19, 20, 196, 223, 173, 19, 20, - 223, 180, 19, 20, 196, 223, 180, 19, 20, 223, 179, 19, 20, 196, 223, 179, - 19, 20, 223, 68, 223, 179, 19, 20, 226, 185, 19, 20, 196, 226, 185, 19, - 20, 224, 159, 19, 20, 250, 48, 226, 185, 19, 20, 214, 206, 226, 185, 19, - 20, 222, 240, 19, 20, 223, 105, 19, 20, 222, 100, 19, 20, 222, 75, 19, - 20, 221, 191, 19, 20, 221, 180, 19, 20, 203, 123, 221, 180, 19, 20, 201, - 201, 19, 20, 223, 106, 19, 20, 221, 18, 19, 20, 196, 221, 18, 19, 20, - 221, 20, 19, 20, 196, 221, 20, 19, 20, 221, 19, 19, 20, 196, 221, 19, 19, - 20, 223, 68, 221, 19, 19, 20, 223, 163, 19, 20, 88, 222, 205, 19, 20, - 222, 105, 19, 20, 227, 234, 19, 20, 228, 111, 19, 20, 227, 148, 19, 20, - 227, 130, 19, 20, 227, 49, 19, 20, 227, 18, 19, 20, 203, 123, 227, 18, - 19, 20, 228, 113, 19, 20, 228, 112, 19, 20, 226, 205, 19, 20, 196, 226, - 205, 19, 20, 226, 204, 19, 20, 196, 226, 204, 19, 20, 226, 203, 19, 20, - 196, 226, 203, 19, 20, 226, 202, 19, 20, 196, 226, 202, 19, 20, 226, 201, - 19, 20, 196, 226, 201, 19, 20, 226, 207, 19, 20, 196, 226, 207, 19, 20, - 226, 206, 19, 20, 196, 226, 206, 19, 20, 159, 19, 20, 196, 159, 19, 20, - 174, 159, 19, 20, 214, 177, 19, 20, 215, 31, 19, 20, 212, 162, 19, 20, - 212, 142, 19, 20, 212, 13, 19, 20, 211, 250, 19, 20, 203, 123, 211, 250, - 19, 20, 215, 36, 19, 20, 215, 33, 19, 20, 210, 168, 19, 20, 196, 210, - 168, 19, 20, 210, 162, 19, 20, 196, 210, 162, 19, 20, 210, 161, 19, 20, - 196, 210, 161, 19, 20, 210, 157, 19, 20, 196, 210, 157, 19, 20, 210, 156, - 19, 20, 196, 210, 156, 19, 20, 210, 172, 19, 20, 196, 210, 172, 19, 20, - 210, 171, 19, 20, 196, 210, 171, 19, 20, 223, 68, 210, 171, 19, 20, 194, - 19, 20, 250, 48, 194, 19, 20, 210, 173, 19, 20, 248, 40, 194, 19, 20, - 224, 28, 212, 70, 19, 20, 223, 68, 212, 61, 19, 20, 223, 68, 215, 92, 19, - 20, 223, 68, 211, 179, 19, 20, 223, 68, 211, 13, 19, 20, 223, 68, 212, - 60, 19, 20, 223, 68, 214, 180, 19, 20, 213, 43, 19, 20, 213, 11, 19, 20, - 213, 6, 19, 20, 212, 242, 19, 20, 212, 236, 19, 20, 213, 90, 19, 20, 213, - 85, 19, 20, 212, 177, 19, 20, 196, 212, 177, 19, 20, 212, 176, 19, 20, - 196, 212, 176, 19, 20, 212, 175, 19, 20, 196, 212, 175, 19, 20, 212, 174, - 19, 20, 196, 212, 174, 19, 20, 212, 173, 19, 20, 196, 212, 173, 19, 20, - 212, 180, 19, 20, 196, 212, 180, 19, 20, 212, 179, 19, 20, 196, 212, 179, - 19, 20, 213, 92, 19, 20, 203, 52, 19, 20, 203, 108, 19, 20, 203, 11, 19, - 20, 203, 2, 19, 20, 202, 247, 19, 20, 202, 232, 19, 20, 203, 123, 202, - 232, 19, 20, 198, 19, 20, 203, 110, 19, 20, 202, 174, 19, 20, 196, 202, - 174, 19, 20, 202, 173, 19, 20, 196, 202, 173, 19, 20, 202, 172, 19, 20, - 196, 202, 172, 19, 20, 202, 171, 19, 20, 196, 202, 171, 19, 20, 202, 170, - 19, 20, 196, 202, 170, 19, 20, 202, 176, 19, 20, 196, 202, 176, 19, 20, - 202, 175, 19, 20, 196, 202, 175, 19, 20, 223, 68, 202, 175, 19, 20, 203, - 124, 19, 20, 248, 84, 203, 124, 19, 20, 196, 203, 124, 19, 20, 214, 206, - 203, 11, 19, 20, 216, 158, 19, 20, 217, 0, 216, 158, 19, 20, 196, 227, - 234, 19, 20, 216, 215, 19, 20, 216, 57, 19, 20, 216, 3, 19, 20, 215, 227, - 19, 20, 215, 208, 19, 20, 196, 227, 49, 19, 20, 216, 220, 19, 20, 216, - 216, 19, 20, 196, 228, 113, 19, 20, 215, 110, 19, 20, 196, 215, 110, 19, - 20, 146, 19, 20, 196, 146, 19, 20, 174, 146, 19, 20, 240, 60, 19, 20, - 240, 105, 19, 20, 240, 26, 19, 20, 240, 12, 19, 20, 239, 186, 19, 20, - 239, 175, 19, 20, 240, 108, 19, 20, 240, 107, 19, 20, 239, 85, 19, 20, - 196, 239, 85, 19, 20, 240, 174, 19, 20, 209, 92, 19, 20, 223, 161, 209, - 92, 19, 20, 209, 70, 19, 20, 223, 161, 209, 70, 19, 20, 209, 64, 19, 20, - 223, 161, 209, 64, 19, 20, 209, 47, 19, 20, 209, 42, 19, 20, 209, 108, - 19, 20, 209, 107, 19, 20, 209, 12, 19, 20, 196, 209, 12, 19, 20, 209, - 110, 19, 20, 207, 227, 19, 20, 207, 225, 19, 20, 207, 224, 19, 20, 207, - 229, 19, 20, 207, 230, 19, 20, 207, 124, 19, 20, 207, 123, 19, 20, 207, - 122, 19, 20, 207, 126, 19, 20, 221, 39, 237, 67, 19, 20, 221, 39, 237, 3, - 19, 20, 221, 39, 236, 239, 19, 20, 221, 39, 236, 136, 19, 20, 221, 39, - 236, 117, 19, 20, 221, 39, 152, 19, 20, 221, 39, 237, 157, 19, 20, 221, - 39, 237, 171, 19, 20, 221, 38, 237, 171, 19, 20, 236, 226, 19, 20, 217, - 122, 19, 20, 217, 88, 19, 20, 217, 83, 19, 20, 217, 77, 19, 20, 217, 72, - 19, 20, 217, 126, 19, 20, 217, 125, 19, 20, 217, 134, 19, 20, 208, 186, - 19, 20, 208, 184, 19, 20, 208, 183, 19, 20, 208, 187, 19, 20, 196, 216, - 158, 19, 20, 196, 216, 57, 19, 20, 196, 215, 227, 19, 20, 196, 216, 220, - 19, 20, 222, 201, 19, 20, 222, 151, 19, 20, 222, 147, 19, 20, 222, 128, - 19, 20, 222, 123, 19, 20, 222, 203, 19, 20, 222, 202, 19, 20, 222, 205, - 19, 20, 221, 220, 19, 20, 214, 206, 213, 43, 19, 20, 214, 206, 213, 11, - 19, 20, 214, 206, 212, 242, 19, 20, 214, 206, 213, 90, 19, 20, 203, 242, - 209, 92, 19, 20, 203, 242, 209, 70, 19, 20, 203, 242, 209, 47, 19, 20, - 203, 242, 209, 108, 19, 20, 203, 242, 209, 110, 19, 20, 227, 155, 19, 20, - 227, 154, 19, 20, 227, 153, 19, 20, 227, 152, 19, 20, 227, 161, 19, 20, - 227, 160, 19, 20, 227, 162, 19, 20, 209, 109, 209, 92, 19, 20, 209, 109, - 209, 70, 19, 20, 209, 109, 209, 64, 19, 20, 209, 109, 209, 47, 19, 20, - 209, 109, 209, 42, 19, 20, 209, 109, 209, 108, 19, 20, 209, 109, 209, - 107, 19, 20, 209, 109, 209, 110, 19, 20, 251, 50, 249, 255, 19, 20, 248, - 40, 74, 19, 20, 248, 40, 75, 19, 20, 248, 40, 78, 19, 20, 248, 40, 63, - 19, 20, 248, 40, 204, 62, 19, 20, 248, 40, 204, 30, 19, 20, 248, 40, 204, - 0, 19, 20, 248, 40, 204, 111, 19, 20, 248, 40, 222, 240, 19, 20, 248, 40, - 222, 100, 19, 20, 248, 40, 221, 191, 19, 20, 248, 40, 201, 201, 19, 20, - 248, 40, 229, 201, 19, 20, 248, 40, 229, 100, 19, 20, 248, 40, 229, 26, - 19, 20, 248, 40, 173, 19, 20, 214, 206, 237, 67, 19, 20, 214, 206, 237, - 3, 19, 20, 214, 206, 236, 136, 19, 20, 214, 206, 152, 19, 20, 88, 238, - 87, 19, 20, 88, 238, 91, 19, 20, 88, 238, 105, 19, 20, 88, 238, 104, 19, - 20, 88, 238, 93, 19, 20, 88, 238, 119, 19, 20, 88, 215, 145, 19, 20, 88, - 215, 227, 19, 20, 88, 216, 158, 19, 20, 88, 216, 135, 19, 20, 88, 216, - 57, 19, 20, 88, 216, 220, 19, 20, 88, 203, 217, 19, 20, 88, 204, 0, 19, - 20, 88, 204, 62, 19, 20, 88, 204, 55, 19, 20, 88, 204, 30, 19, 20, 88, - 204, 111, 19, 20, 88, 235, 247, 19, 20, 88, 235, 248, 19, 20, 88, 235, - 251, 19, 20, 88, 235, 250, 19, 20, 88, 235, 249, 19, 20, 88, 235, 254, - 19, 20, 88, 209, 22, 19, 20, 88, 209, 47, 19, 20, 88, 209, 92, 19, 20, - 88, 209, 90, 19, 20, 88, 209, 70, 19, 20, 88, 209, 108, 19, 20, 88, 207, - 208, 19, 20, 88, 207, 218, 19, 20, 88, 207, 236, 19, 20, 88, 207, 235, - 19, 20, 88, 207, 220, 19, 20, 88, 207, 241, 19, 20, 88, 217, 191, 19, 20, - 88, 218, 69, 19, 20, 88, 219, 34, 19, 20, 88, 219, 23, 19, 20, 88, 218, - 167, 19, 20, 88, 185, 19, 20, 88, 219, 184, 19, 20, 88, 237, 230, 19, 20, - 88, 238, 39, 19, 20, 88, 238, 190, 19, 20, 88, 238, 182, 19, 20, 88, 238, - 81, 19, 20, 88, 239, 8, 19, 20, 88, 229, 109, 19, 20, 88, 229, 115, 19, - 20, 88, 229, 129, 19, 20, 88, 229, 128, 19, 20, 88, 229, 122, 19, 20, 88, - 229, 144, 19, 20, 88, 229, 42, 19, 20, 88, 229, 43, 19, 20, 88, 229, 46, - 19, 20, 88, 229, 45, 19, 20, 88, 229, 44, 19, 20, 88, 229, 47, 19, 20, - 88, 229, 48, 19, 20, 88, 221, 84, 19, 20, 88, 221, 191, 19, 20, 88, 222, - 240, 19, 20, 88, 222, 235, 19, 20, 88, 222, 100, 19, 20, 88, 201, 201, - 19, 20, 88, 223, 246, 19, 20, 88, 224, 82, 19, 20, 88, 225, 20, 19, 20, - 88, 225, 8, 19, 20, 88, 224, 155, 19, 20, 88, 192, 19, 20, 88, 202, 213, - 19, 20, 88, 202, 247, 19, 20, 88, 203, 52, 19, 20, 88, 203, 49, 19, 20, - 88, 203, 11, 19, 20, 88, 198, 19, 20, 88, 230, 82, 19, 20, 214, 206, 230, - 82, 19, 20, 88, 230, 101, 19, 20, 88, 230, 161, 19, 20, 88, 230, 159, 19, - 20, 88, 230, 141, 19, 20, 214, 206, 230, 141, 19, 20, 88, 230, 181, 19, - 20, 88, 230, 114, 19, 20, 88, 230, 118, 19, 20, 88, 230, 128, 19, 20, 88, - 230, 127, 19, 20, 88, 230, 126, 19, 20, 88, 230, 129, 19, 20, 88, 226, - 239, 19, 20, 88, 227, 49, 19, 20, 88, 227, 234, 19, 20, 88, 227, 226, 19, - 20, 88, 227, 148, 19, 20, 88, 228, 113, 19, 20, 88, 243, 117, 19, 20, 88, - 243, 118, 19, 20, 88, 243, 123, 19, 20, 88, 243, 122, 19, 20, 88, 243, - 119, 19, 20, 88, 243, 124, 19, 20, 88, 227, 151, 19, 20, 88, 227, 153, - 19, 20, 88, 227, 157, 19, 20, 88, 227, 156, 19, 20, 88, 227, 155, 19, 20, - 88, 227, 161, 19, 20, 88, 208, 181, 19, 20, 88, 208, 183, 19, 20, 88, - 208, 186, 19, 20, 88, 208, 185, 19, 20, 88, 208, 184, 19, 20, 88, 208, - 187, 19, 20, 88, 208, 176, 19, 20, 88, 208, 177, 19, 20, 88, 208, 189, - 19, 20, 88, 208, 188, 19, 20, 88, 208, 178, 19, 20, 88, 208, 190, 19, 20, - 88, 202, 6, 19, 20, 88, 202, 17, 19, 20, 88, 202, 92, 19, 20, 88, 202, - 90, 19, 20, 88, 202, 39, 19, 20, 88, 202, 116, 19, 20, 88, 202, 159, 19, - 20, 88, 81, 202, 159, 19, 20, 88, 241, 242, 19, 20, 88, 241, 243, 19, 20, - 88, 241, 252, 19, 20, 88, 241, 251, 19, 20, 88, 241, 246, 19, 20, 88, - 241, 255, 19, 20, 88, 211, 10, 19, 20, 88, 212, 13, 19, 20, 88, 214, 177, - 19, 20, 88, 214, 165, 19, 20, 88, 212, 162, 19, 20, 88, 215, 36, 19, 20, - 88, 212, 199, 19, 20, 88, 212, 242, 19, 20, 88, 213, 43, 19, 20, 88, 213, - 41, 19, 20, 88, 213, 11, 19, 20, 88, 213, 90, 19, 20, 88, 213, 92, 19, - 20, 88, 207, 249, 19, 20, 88, 207, 253, 19, 20, 88, 208, 14, 19, 20, 88, - 208, 13, 19, 20, 88, 207, 255, 19, 20, 88, 208, 20, 19, 20, 88, 246, 98, - 19, 20, 88, 246, 116, 19, 20, 88, 246, 170, 19, 20, 88, 246, 166, 19, 20, - 88, 246, 142, 19, 20, 88, 246, 199, 19, 20, 88, 207, 211, 19, 20, 88, - 207, 212, 19, 20, 88, 207, 215, 19, 20, 88, 207, 214, 19, 20, 88, 207, - 213, 19, 20, 88, 207, 216, 19, 20, 246, 143, 54, 19, 20, 239, 102, 211, - 61, 19, 20, 217, 118, 19, 20, 222, 199, 19, 20, 221, 217, 19, 20, 221, - 216, 19, 20, 221, 215, 19, 20, 221, 214, 19, 20, 221, 219, 19, 20, 221, - 218, 19, 20, 203, 242, 209, 10, 19, 20, 203, 242, 209, 9, 19, 20, 203, - 242, 209, 8, 19, 20, 203, 242, 209, 7, 19, 20, 203, 242, 209, 6, 19, 20, - 203, 242, 209, 13, 19, 20, 203, 242, 209, 12, 19, 20, 203, 242, 46, 209, - 110, 19, 20, 248, 40, 204, 144, 220, 64, 211, 229, 82, 220, 64, 1, 248, - 132, 220, 64, 1, 226, 225, 220, 64, 1, 240, 57, 220, 64, 1, 215, 16, 220, - 64, 1, 222, 56, 220, 64, 1, 207, 36, 220, 64, 1, 244, 186, 220, 64, 1, - 208, 214, 220, 64, 1, 245, 245, 220, 64, 1, 246, 225, 220, 64, 1, 223, - 233, 220, 64, 1, 238, 20, 220, 64, 1, 222, 189, 220, 64, 1, 211, 54, 220, - 64, 1, 215, 138, 220, 64, 1, 251, 61, 220, 64, 1, 220, 22, 220, 64, 1, - 206, 210, 220, 64, 1, 241, 187, 220, 64, 1, 230, 233, 220, 64, 1, 241, - 188, 220, 64, 1, 219, 244, 220, 64, 1, 207, 15, 220, 64, 1, 231, 89, 220, - 64, 1, 241, 185, 220, 64, 1, 219, 13, 220, 64, 240, 56, 82, 220, 64, 216, - 73, 240, 56, 82, 197, 1, 240, 46, 240, 38, 240, 61, 240, 174, 197, 1, - 206, 164, 197, 1, 206, 195, 206, 211, 68, 197, 1, 202, 216, 197, 1, 203, - 124, 197, 1, 204, 144, 197, 1, 209, 15, 209, 14, 209, 40, 197, 1, 240, - 243, 197, 1, 250, 199, 63, 197, 1, 219, 228, 78, 197, 1, 251, 142, 63, - 197, 1, 251, 93, 197, 1, 227, 24, 78, 197, 1, 212, 221, 78, 197, 1, 78, - 197, 1, 220, 73, 197, 1, 220, 31, 197, 1, 216, 195, 216, 208, 216, 120, - 146, 197, 1, 229, 216, 197, 1, 246, 221, 197, 1, 229, 217, 230, 54, 197, - 1, 239, 75, 197, 1, 241, 78, 197, 1, 238, 185, 237, 177, 239, 75, 197, 1, - 238, 224, 197, 1, 203, 209, 203, 200, 204, 144, 197, 1, 237, 149, 237, - 171, 197, 1, 237, 153, 237, 171, 197, 1, 227, 26, 237, 171, 197, 1, 212, - 224, 237, 171, 197, 1, 223, 63, 221, 2, 223, 64, 223, 163, 197, 1, 212, - 222, 223, 163, 197, 1, 242, 80, 197, 1, 230, 212, 230, 216, 230, 203, 75, - 197, 1, 74, 197, 1, 230, 152, 230, 184, 197, 1, 238, 169, 197, 1, 227, - 27, 251, 109, 197, 1, 212, 226, 63, 197, 1, 230, 195, 241, 51, 197, 1, - 218, 226, 218, 251, 219, 184, 197, 1, 251, 23, 241, 49, 197, 1, 211, 234, - 194, 197, 1, 212, 146, 227, 23, 194, 197, 1, 212, 220, 194, 197, 1, 247, - 125, 197, 1, 202, 159, 197, 1, 208, 195, 208, 207, 207, 108, 210, 69, - 197, 1, 212, 219, 210, 69, 197, 1, 245, 51, 197, 1, 248, 111, 248, 114, - 248, 46, 249, 255, 197, 1, 212, 225, 249, 255, 197, 1, 242, 79, 197, 1, - 220, 2, 197, 1, 241, 146, 241, 148, 74, 197, 1, 225, 113, 225, 123, 226, - 185, 197, 1, 227, 25, 226, 185, 197, 1, 212, 223, 226, 185, 197, 1, 227, - 249, 228, 91, 227, 34, 159, 197, 1, 242, 81, 197, 1, 231, 23, 197, 1, - 231, 24, 197, 1, 244, 200, 244, 206, 245, 51, 197, 1, 219, 222, 240, 242, - 78, 197, 1, 241, 183, 197, 1, 230, 232, 197, 1, 245, 71, 197, 1, 247, 75, - 197, 1, 246, 237, 197, 1, 211, 99, 197, 1, 227, 22, 197, 1, 212, 218, - 197, 1, 235, 161, 197, 1, 217, 134, 197, 1, 203, 196, 197, 212, 120, 217, - 178, 197, 223, 226, 217, 178, 197, 245, 131, 217, 178, 197, 250, 108, 97, - 197, 207, 162, 97, 197, 248, 130, 97, 197, 1, 230, 54, 197, 1, 213, 92, - 197, 1, 220, 18, 197, 1, 239, 131, 247, 20, 219, 227, 197, 1, 239, 131, - 247, 20, 230, 215, 197, 1, 239, 131, 247, 20, 241, 147, 197, 1, 239, 131, - 247, 20, 251, 141, 197, 1, 239, 131, 247, 20, 251, 93, 209, 254, 1, 63, - 209, 254, 1, 75, 209, 254, 1, 68, 209, 254, 1, 173, 209, 254, 1, 239, 8, - 209, 254, 1, 222, 203, 209, 254, 1, 210, 22, 209, 254, 1, 244, 212, 209, - 254, 1, 201, 201, 209, 254, 1, 185, 209, 254, 1, 249, 32, 209, 254, 1, - 192, 209, 254, 1, 198, 209, 254, 1, 228, 113, 209, 254, 1, 204, 111, 209, - 254, 1, 215, 36, 209, 254, 1, 152, 209, 254, 22, 2, 75, 209, 254, 22, 2, - 68, 209, 254, 2, 205, 204, 237, 96, 1, 63, 237, 96, 1, 75, 237, 96, 1, - 68, 237, 96, 1, 173, 237, 96, 1, 239, 8, 237, 96, 1, 222, 203, 237, 96, - 1, 210, 22, 237, 96, 1, 244, 212, 237, 96, 1, 201, 201, 237, 96, 1, 185, - 237, 96, 1, 249, 32, 237, 96, 1, 192, 237, 96, 1, 198, 237, 96, 1, 216, - 220, 237, 96, 1, 228, 113, 237, 96, 1, 204, 111, 237, 96, 1, 215, 36, - 237, 96, 1, 152, 237, 96, 22, 2, 75, 237, 96, 22, 2, 68, 237, 96, 2, 219, - 124, 218, 185, 212, 120, 217, 178, 218, 185, 52, 217, 178, 247, 185, 1, - 63, 247, 185, 1, 75, 247, 185, 1, 68, 247, 185, 1, 173, 247, 185, 1, 239, - 8, 247, 185, 1, 222, 203, 247, 185, 1, 210, 22, 247, 185, 1, 244, 212, - 247, 185, 1, 201, 201, 247, 185, 1, 185, 247, 185, 1, 249, 32, 247, 185, - 1, 192, 247, 185, 1, 198, 247, 185, 1, 216, 220, 247, 185, 1, 228, 113, - 247, 185, 1, 204, 111, 247, 185, 1, 215, 36, 247, 185, 1, 152, 247, 185, - 22, 2, 75, 247, 185, 22, 2, 68, 209, 253, 1, 63, 209, 253, 1, 75, 209, - 253, 1, 68, 209, 253, 1, 173, 209, 253, 1, 239, 8, 209, 253, 1, 222, 203, - 209, 253, 1, 210, 22, 209, 253, 1, 244, 212, 209, 253, 1, 201, 201, 209, - 253, 1, 185, 209, 253, 1, 249, 32, 209, 253, 1, 192, 209, 253, 1, 198, - 209, 253, 1, 228, 113, 209, 253, 1, 204, 111, 209, 253, 1, 215, 36, 209, - 253, 22, 2, 75, 209, 253, 22, 2, 68, 85, 1, 173, 85, 1, 229, 144, 85, 1, - 229, 26, 85, 1, 229, 115, 85, 1, 222, 128, 85, 1, 247, 92, 85, 1, 246, - 199, 85, 1, 245, 254, 85, 1, 246, 116, 85, 1, 220, 233, 85, 1, 244, 212, - 85, 1, 207, 229, 85, 1, 243, 113, 85, 1, 207, 224, 85, 1, 221, 197, 85, - 1, 210, 22, 85, 1, 209, 108, 85, 1, 135, 85, 1, 209, 47, 85, 1, 221, 191, - 85, 1, 249, 32, 85, 1, 218, 208, 85, 1, 218, 69, 85, 1, 218, 180, 85, 1, - 224, 82, 85, 1, 202, 247, 85, 1, 215, 227, 85, 1, 227, 49, 85, 1, 205, - 189, 85, 1, 213, 90, 85, 1, 211, 124, 85, 1, 215, 36, 85, 1, 152, 85, 1, - 228, 113, 85, 1, 217, 126, 85, 231, 36, 22, 217, 112, 85, 231, 36, 22, - 217, 125, 85, 231, 36, 22, 217, 88, 85, 231, 36, 22, 217, 83, 85, 231, - 36, 22, 217, 65, 85, 231, 36, 22, 217, 35, 85, 231, 36, 22, 217, 23, 85, - 231, 36, 22, 217, 22, 85, 231, 36, 22, 215, 102, 85, 231, 36, 22, 215, - 95, 85, 231, 36, 22, 226, 199, 85, 231, 36, 22, 226, 188, 85, 231, 36, - 22, 217, 106, 85, 231, 36, 22, 217, 118, 85, 231, 36, 22, 217, 73, 207, - 121, 105, 85, 231, 36, 22, 217, 73, 207, 121, 108, 85, 231, 36, 22, 217, - 108, 85, 22, 231, 21, 250, 148, 85, 22, 231, 21, 252, 25, 85, 22, 2, 252, - 25, 85, 22, 2, 75, 85, 22, 2, 231, 83, 85, 22, 2, 203, 124, 85, 22, 2, - 202, 169, 85, 22, 2, 68, 85, 22, 2, 206, 178, 85, 22, 2, 207, 39, 85, 22, - 2, 220, 73, 85, 22, 2, 198, 85, 22, 2, 231, 110, 85, 22, 2, 74, 85, 22, - 2, 251, 109, 85, 22, 2, 251, 64, 85, 22, 2, 220, 18, 85, 22, 2, 250, 34, - 85, 2, 222, 73, 85, 2, 216, 156, 85, 2, 202, 180, 85, 2, 223, 190, 85, 2, - 208, 73, 85, 2, 248, 233, 85, 2, 215, 222, 85, 2, 208, 171, 85, 2, 230, - 11, 85, 2, 251, 66, 85, 2, 214, 244, 214, 237, 85, 2, 205, 201, 85, 2, - 245, 248, 85, 2, 248, 205, 85, 2, 229, 136, 85, 2, 248, 228, 85, 2, 247, - 64, 218, 130, 228, 173, 85, 2, 227, 203, 208, 148, 85, 2, 248, 100, 85, - 2, 218, 182, 223, 243, 85, 2, 229, 4, 85, 245, 92, 16, 216, 49, 85, 2, - 250, 16, 85, 2, 250, 37, 85, 17, 202, 84, 85, 17, 105, 85, 17, 108, 85, - 17, 147, 85, 17, 149, 85, 17, 170, 85, 17, 195, 85, 17, 213, 111, 85, 17, - 199, 85, 17, 222, 63, 85, 16, 227, 203, 250, 39, 211, 253, 85, 16, 227, - 203, 250, 39, 223, 210, 85, 16, 227, 203, 250, 39, 218, 129, 85, 16, 227, - 203, 250, 39, 248, 133, 85, 16, 227, 203, 250, 39, 247, 165, 85, 16, 227, - 203, 250, 39, 218, 7, 85, 16, 227, 203, 250, 39, 218, 1, 85, 16, 227, - 203, 250, 39, 217, 255, 85, 16, 227, 203, 250, 39, 218, 5, 85, 16, 227, - 203, 250, 39, 218, 3, 94, 248, 59, 94, 241, 108, 94, 245, 233, 94, 239, - 102, 211, 61, 94, 245, 242, 94, 239, 147, 243, 83, 94, 208, 170, 212, 7, - 235, 220, 94, 212, 160, 4, 247, 244, 225, 88, 94, 225, 119, 245, 233, 94, - 225, 119, 239, 102, 211, 61, 94, 222, 54, 94, 239, 130, 57, 214, 151, - 105, 94, 239, 130, 57, 214, 151, 108, 94, 239, 130, 57, 214, 151, 147, - 94, 22, 213, 130, 94, 17, 202, 84, 94, 17, 105, 94, 17, 108, 94, 17, 147, - 94, 17, 149, 94, 17, 170, 94, 17, 195, 94, 17, 213, 111, 94, 17, 199, 94, - 17, 222, 63, 94, 1, 63, 94, 1, 74, 94, 1, 75, 94, 1, 78, 94, 1, 68, 94, - 1, 220, 73, 94, 1, 207, 24, 94, 1, 241, 161, 94, 1, 201, 201, 94, 1, 250, - 223, 94, 1, 249, 32, 94, 1, 185, 94, 1, 217, 126, 94, 1, 239, 8, 94, 1, - 192, 94, 1, 228, 113, 94, 1, 215, 36, 94, 1, 213, 90, 94, 1, 210, 22, 94, - 1, 244, 212, 94, 1, 246, 199, 94, 1, 230, 181, 94, 1, 198, 94, 1, 216, - 220, 94, 1, 204, 111, 94, 1, 240, 108, 94, 1, 173, 94, 1, 229, 144, 94, - 1, 208, 20, 94, 1, 202, 116, 94, 1, 237, 157, 94, 1, 202, 10, 94, 1, 227, - 161, 94, 1, 202, 66, 94, 1, 246, 142, 94, 1, 208, 170, 163, 22, 54, 94, - 1, 208, 170, 74, 94, 1, 208, 170, 75, 94, 1, 208, 170, 78, 94, 1, 208, - 170, 68, 94, 1, 208, 170, 220, 73, 94, 1, 208, 170, 207, 24, 94, 1, 208, - 170, 250, 223, 94, 1, 208, 170, 249, 32, 94, 1, 208, 170, 185, 94, 1, - 208, 170, 217, 126, 94, 1, 208, 170, 239, 8, 94, 1, 208, 170, 192, 94, 1, - 208, 170, 210, 22, 94, 1, 208, 170, 244, 212, 94, 1, 208, 170, 246, 199, - 94, 1, 208, 170, 230, 181, 94, 1, 208, 170, 208, 20, 94, 1, 208, 170, - 198, 94, 1, 208, 170, 204, 111, 94, 1, 208, 170, 173, 94, 1, 208, 170, - 239, 5, 94, 1, 208, 170, 237, 157, 94, 1, 208, 170, 230, 140, 94, 1, 208, - 170, 222, 98, 94, 1, 208, 170, 241, 255, 94, 1, 212, 160, 74, 94, 1, 212, - 160, 75, 94, 1, 212, 160, 230, 192, 94, 1, 212, 160, 207, 24, 94, 1, 212, - 160, 68, 94, 1, 212, 160, 250, 223, 94, 1, 212, 160, 173, 94, 1, 212, - 160, 239, 8, 94, 1, 212, 160, 152, 94, 1, 212, 160, 185, 94, 1, 212, 160, - 213, 90, 94, 1, 212, 160, 210, 22, 94, 1, 212, 160, 244, 212, 94, 1, 212, - 160, 230, 181, 94, 1, 212, 160, 240, 108, 94, 1, 212, 160, 239, 5, 94, 1, - 212, 160, 237, 157, 94, 1, 212, 160, 208, 20, 94, 1, 212, 160, 202, 116, - 94, 1, 212, 160, 216, 216, 94, 1, 212, 160, 246, 199, 94, 1, 212, 160, - 202, 80, 94, 1, 225, 119, 75, 94, 1, 225, 119, 173, 94, 1, 225, 119, 216, - 220, 94, 1, 225, 119, 240, 108, 94, 1, 225, 119, 202, 80, 94, 1, 251, 22, - 238, 244, 250, 181, 105, 94, 1, 251, 22, 238, 244, 205, 200, 105, 94, 1, - 251, 22, 238, 244, 244, 174, 94, 1, 251, 22, 238, 244, 207, 34, 94, 1, - 251, 22, 238, 244, 230, 239, 207, 34, 94, 1, 251, 22, 238, 244, 248, 245, - 94, 1, 251, 22, 238, 244, 126, 248, 245, 94, 1, 251, 22, 238, 244, 63, - 94, 1, 251, 22, 238, 244, 75, 94, 1, 251, 22, 238, 244, 173, 94, 1, 251, - 22, 238, 244, 222, 203, 94, 1, 251, 22, 238, 244, 247, 92, 94, 1, 251, - 22, 238, 244, 207, 241, 94, 1, 251, 22, 238, 244, 207, 229, 94, 1, 251, - 22, 238, 244, 244, 120, 94, 1, 251, 22, 238, 244, 221, 227, 94, 1, 251, - 22, 238, 244, 210, 22, 94, 1, 251, 22, 238, 244, 244, 212, 94, 1, 251, - 22, 238, 244, 185, 94, 1, 251, 22, 238, 244, 218, 208, 94, 1, 251, 22, - 238, 244, 211, 164, 94, 1, 251, 22, 238, 244, 202, 80, 94, 1, 251, 22, - 238, 244, 202, 116, 94, 1, 251, 22, 238, 244, 251, 73, 94, 1, 208, 170, - 251, 22, 238, 244, 210, 22, 94, 1, 208, 170, 251, 22, 238, 244, 202, 80, - 94, 1, 225, 119, 251, 22, 238, 244, 238, 119, 94, 1, 225, 119, 251, 22, - 238, 244, 222, 203, 94, 1, 225, 119, 251, 22, 238, 244, 247, 92, 94, 1, - 225, 119, 251, 22, 238, 244, 230, 149, 94, 1, 225, 119, 251, 22, 238, - 244, 207, 241, 94, 1, 225, 119, 251, 22, 238, 244, 244, 104, 94, 1, 225, - 119, 251, 22, 238, 244, 210, 22, 94, 1, 225, 119, 251, 22, 238, 244, 244, - 1, 94, 1, 225, 119, 251, 22, 238, 244, 211, 164, 94, 1, 225, 119, 251, - 22, 238, 244, 245, 65, 94, 1, 225, 119, 251, 22, 238, 244, 202, 80, 94, - 1, 225, 119, 251, 22, 238, 244, 202, 116, 94, 1, 251, 22, 238, 244, 162, - 68, 94, 1, 251, 22, 238, 244, 162, 198, 94, 1, 225, 119, 251, 22, 238, - 244, 248, 98, 94, 1, 251, 22, 238, 244, 244, 201, 94, 1, 225, 119, 251, - 22, 238, 244, 227, 161, 19, 20, 219, 188, 19, 20, 250, 8, 19, 20, 251, - 236, 19, 20, 204, 65, 19, 20, 218, 13, 19, 20, 219, 43, 19, 20, 217, 143, - 19, 20, 209, 196, 19, 20, 229, 208, 19, 20, 228, 164, 19, 20, 225, 63, - 19, 20, 221, 149, 19, 20, 223, 59, 19, 20, 227, 244, 19, 20, 211, 232, - 19, 20, 214, 208, 19, 20, 212, 207, 19, 20, 213, 47, 19, 20, 212, 172, - 19, 20, 202, 222, 19, 20, 203, 58, 19, 20, 216, 165, 19, 20, 221, 17, 19, - 20, 220, 53, 221, 17, 19, 20, 221, 16, 19, 20, 220, 53, 221, 16, 19, 20, - 221, 15, 19, 20, 220, 53, 221, 15, 19, 20, 221, 14, 19, 20, 220, 53, 221, - 14, 19, 20, 215, 107, 19, 20, 215, 106, 19, 20, 215, 105, 19, 20, 215, - 104, 19, 20, 215, 103, 19, 20, 215, 111, 19, 20, 220, 53, 219, 184, 19, - 20, 220, 53, 210, 69, 19, 20, 220, 53, 230, 54, 19, 20, 220, 53, 247, - 125, 19, 20, 220, 53, 226, 185, 19, 20, 220, 53, 223, 163, 19, 20, 220, - 53, 194, 19, 20, 220, 53, 213, 92, 19, 20, 241, 174, 204, 144, 19, 20, - 204, 44, 204, 144, 19, 20, 46, 5, 215, 252, 19, 20, 46, 216, 188, 243, - 85, 19, 20, 217, 0, 215, 108, 19, 20, 196, 227, 18, 19, 20, 196, 228, - 112, 19, 20, 209, 11, 19, 20, 209, 13, 19, 20, 207, 221, 19, 20, 207, - 223, 19, 20, 207, 228, 19, 20, 208, 180, 19, 20, 208, 182, 19, 20, 214, - 206, 212, 177, 19, 20, 214, 206, 212, 236, 19, 20, 214, 206, 236, 117, - 19, 20, 88, 237, 185, 19, 20, 88, 244, 35, 238, 182, 19, 20, 88, 239, 5, - 19, 20, 88, 237, 190, 19, 20, 214, 206, 230, 64, 19, 20, 88, 230, 62, 19, - 20, 248, 153, 244, 35, 159, 19, 20, 248, 153, 244, 35, 146, 19, 20, 88, - 244, 30, 194, 227, 124, 205, 169, 227, 174, 227, 124, 1, 173, 227, 124, - 1, 229, 144, 227, 124, 1, 239, 8, 227, 124, 1, 238, 119, 227, 124, 1, - 222, 203, 227, 124, 1, 247, 92, 227, 124, 1, 246, 199, 227, 124, 1, 230, - 181, 227, 124, 1, 230, 149, 227, 124, 1, 203, 78, 227, 124, 1, 210, 22, - 227, 124, 1, 209, 108, 227, 124, 1, 244, 212, 227, 124, 1, 244, 1, 227, - 124, 1, 201, 201, 227, 124, 1, 185, 227, 124, 1, 218, 208, 227, 124, 1, - 249, 32, 227, 124, 1, 248, 98, 227, 124, 1, 192, 227, 124, 1, 198, 227, - 124, 1, 216, 220, 227, 124, 1, 228, 113, 227, 124, 1, 204, 111, 227, 124, - 1, 213, 90, 227, 124, 1, 211, 164, 227, 124, 1, 215, 36, 227, 124, 1, - 152, 227, 124, 1, 237, 181, 227, 124, 1, 208, 119, 227, 124, 22, 2, 63, - 227, 124, 22, 2, 75, 227, 124, 22, 2, 68, 227, 124, 22, 2, 241, 161, 227, - 124, 22, 2, 251, 64, 227, 124, 22, 2, 220, 18, 227, 124, 22, 2, 250, 34, - 227, 124, 22, 2, 74, 227, 124, 22, 2, 78, 227, 124, 210, 254, 1, 198, - 227, 124, 210, 254, 1, 216, 220, 227, 124, 210, 254, 1, 204, 111, 227, - 124, 5, 1, 173, 227, 124, 5, 1, 222, 203, 227, 124, 5, 1, 250, 180, 227, - 124, 5, 1, 210, 22, 227, 124, 5, 1, 201, 201, 227, 124, 5, 1, 185, 227, - 124, 5, 1, 192, 227, 124, 5, 1, 216, 220, 227, 124, 5, 1, 228, 113, 227, - 124, 2, 223, 231, 227, 124, 2, 229, 186, 227, 124, 2, 215, 34, 227, 124, - 2, 227, 18, 227, 124, 240, 212, 82, 227, 124, 217, 47, 82, 227, 124, 17, - 202, 84, 227, 124, 17, 105, 227, 124, 17, 108, 227, 124, 17, 147, 227, - 124, 17, 149, 227, 124, 17, 170, 227, 124, 17, 195, 227, 124, 17, 213, - 111, 227, 124, 17, 199, 227, 124, 17, 222, 63, 45, 227, 235, 1, 173, 45, - 227, 235, 1, 203, 182, 45, 227, 235, 1, 222, 203, 45, 227, 235, 1, 208, - 20, 45, 227, 235, 1, 215, 36, 45, 227, 235, 1, 198, 45, 227, 235, 1, 210, - 22, 45, 227, 235, 1, 209, 108, 45, 227, 235, 1, 228, 113, 45, 227, 235, - 1, 185, 45, 227, 235, 1, 218, 208, 45, 227, 235, 1, 192, 45, 227, 235, 1, - 240, 108, 45, 227, 235, 1, 206, 86, 45, 227, 235, 1, 152, 45, 227, 235, - 1, 217, 126, 45, 227, 235, 1, 229, 144, 45, 227, 235, 1, 208, 10, 45, - 227, 235, 1, 201, 201, 45, 227, 235, 1, 63, 45, 227, 235, 1, 75, 45, 227, - 235, 1, 241, 161, 45, 227, 235, 1, 241, 147, 45, 227, 235, 1, 68, 45, - 227, 235, 1, 220, 18, 45, 227, 235, 1, 78, 45, 227, 235, 1, 207, 24, 45, - 227, 235, 1, 74, 45, 227, 235, 1, 250, 32, 45, 227, 235, 1, 251, 64, 45, - 227, 235, 1, 208, 159, 45, 227, 235, 1, 208, 158, 45, 227, 235, 1, 208, - 157, 45, 227, 235, 1, 208, 156, 45, 227, 235, 1, 208, 155, 222, 214, 45, - 226, 233, 1, 138, 217, 126, 222, 214, 45, 226, 233, 1, 124, 217, 126, - 222, 214, 45, 226, 233, 1, 138, 173, 222, 214, 45, 226, 233, 1, 138, 203, - 182, 222, 214, 45, 226, 233, 1, 138, 222, 203, 222, 214, 45, 226, 233, 1, - 124, 173, 222, 214, 45, 226, 233, 1, 124, 203, 182, 222, 214, 45, 226, - 233, 1, 124, 222, 203, 222, 214, 45, 226, 233, 1, 138, 208, 20, 222, 214, - 45, 226, 233, 1, 138, 215, 36, 222, 214, 45, 226, 233, 1, 138, 198, 222, - 214, 45, 226, 233, 1, 124, 208, 20, 222, 214, 45, 226, 233, 1, 124, 215, - 36, 222, 214, 45, 226, 233, 1, 124, 198, 222, 214, 45, 226, 233, 1, 138, - 210, 22, 222, 214, 45, 226, 233, 1, 138, 209, 108, 222, 214, 45, 226, - 233, 1, 138, 201, 201, 222, 214, 45, 226, 233, 1, 124, 210, 22, 222, 214, - 45, 226, 233, 1, 124, 209, 108, 222, 214, 45, 226, 233, 1, 124, 201, 201, - 222, 214, 45, 226, 233, 1, 138, 185, 222, 214, 45, 226, 233, 1, 138, 218, - 208, 222, 214, 45, 226, 233, 1, 138, 192, 222, 214, 45, 226, 233, 1, 124, - 185, 222, 214, 45, 226, 233, 1, 124, 218, 208, 222, 214, 45, 226, 233, 1, - 124, 192, 222, 214, 45, 226, 233, 1, 138, 240, 108, 222, 214, 45, 226, - 233, 1, 138, 206, 86, 222, 214, 45, 226, 233, 1, 138, 228, 113, 222, 214, - 45, 226, 233, 1, 124, 240, 108, 222, 214, 45, 226, 233, 1, 124, 206, 86, - 222, 214, 45, 226, 233, 1, 124, 228, 113, 222, 214, 45, 226, 233, 1, 138, - 152, 222, 214, 45, 226, 233, 1, 138, 244, 212, 222, 214, 45, 226, 233, 1, - 138, 249, 32, 222, 214, 45, 226, 233, 1, 124, 152, 222, 214, 45, 226, - 233, 1, 124, 244, 212, 222, 214, 45, 226, 233, 1, 124, 249, 32, 222, 214, - 45, 226, 233, 1, 138, 228, 169, 222, 214, 45, 226, 233, 1, 138, 203, 149, - 222, 214, 45, 226, 233, 1, 124, 228, 169, 222, 214, 45, 226, 233, 1, 124, - 203, 149, 222, 214, 45, 226, 233, 1, 138, 211, 9, 222, 214, 45, 226, 233, - 1, 124, 211, 9, 222, 214, 45, 226, 233, 22, 2, 22, 212, 216, 222, 214, - 45, 226, 233, 22, 2, 252, 25, 222, 214, 45, 226, 233, 22, 2, 231, 83, - 222, 214, 45, 226, 233, 22, 2, 68, 222, 214, 45, 226, 233, 22, 2, 206, - 178, 222, 214, 45, 226, 233, 22, 2, 74, 222, 214, 45, 226, 233, 22, 2, - 251, 109, 222, 214, 45, 226, 233, 22, 2, 78, 222, 214, 45, 226, 233, 22, - 2, 220, 97, 222, 214, 45, 226, 233, 22, 2, 207, 24, 222, 214, 45, 226, - 233, 22, 2, 250, 8, 222, 214, 45, 226, 233, 22, 2, 251, 236, 222, 214, - 45, 226, 233, 22, 2, 206, 170, 222, 214, 45, 226, 233, 22, 2, 219, 188, - 222, 214, 45, 226, 233, 22, 2, 220, 94, 222, 214, 45, 226, 233, 22, 2, - 207, 20, 222, 214, 45, 226, 233, 22, 2, 230, 192, 222, 214, 45, 226, 233, - 1, 46, 206, 164, 222, 214, 45, 226, 233, 1, 46, 222, 205, 222, 214, 45, - 226, 233, 1, 46, 223, 163, 222, 214, 45, 226, 233, 1, 46, 226, 185, 222, - 214, 45, 226, 233, 1, 46, 230, 54, 222, 214, 45, 226, 233, 1, 46, 245, - 51, 222, 214, 45, 226, 233, 1, 46, 249, 255, 222, 214, 45, 226, 233, 143, - 225, 92, 222, 214, 45, 226, 233, 143, 225, 91, 222, 214, 45, 226, 233, - 17, 202, 84, 222, 214, 45, 226, 233, 17, 105, 222, 214, 45, 226, 233, 17, - 108, 222, 214, 45, 226, 233, 17, 147, 222, 214, 45, 226, 233, 17, 149, - 222, 214, 45, 226, 233, 17, 170, 222, 214, 45, 226, 233, 17, 195, 222, - 214, 45, 226, 233, 17, 213, 111, 222, 214, 45, 226, 233, 17, 199, 222, - 214, 45, 226, 233, 17, 222, 63, 222, 214, 45, 226, 233, 104, 17, 105, - 222, 214, 45, 226, 233, 2, 228, 97, 222, 214, 45, 226, 233, 2, 228, 96, - 85, 16, 219, 51, 85, 16, 223, 211, 229, 22, 85, 16, 218, 130, 229, 22, - 85, 16, 248, 134, 229, 22, 85, 16, 247, 166, 229, 22, 85, 16, 218, 8, - 229, 22, 85, 16, 218, 2, 229, 22, 85, 16, 218, 0, 229, 22, 85, 16, 218, - 6, 229, 22, 85, 16, 218, 4, 229, 22, 85, 16, 244, 161, 229, 22, 85, 16, - 244, 157, 229, 22, 85, 16, 244, 156, 229, 22, 85, 16, 244, 159, 229, 22, - 85, 16, 244, 158, 229, 22, 85, 16, 244, 155, 229, 22, 85, 16, 207, 167, - 85, 16, 223, 211, 215, 220, 85, 16, 218, 130, 215, 220, 85, 16, 248, 134, - 215, 220, 85, 16, 247, 166, 215, 220, 85, 16, 218, 8, 215, 220, 85, 16, - 218, 2, 215, 220, 85, 16, 218, 0, 215, 220, 85, 16, 218, 6, 215, 220, 85, - 16, 218, 4, 215, 220, 85, 16, 244, 161, 215, 220, 85, 16, 244, 157, 215, - 220, 85, 16, 244, 156, 215, 220, 85, 16, 244, 159, 215, 220, 85, 16, 244, - 158, 215, 220, 85, 16, 244, 155, 215, 220, 247, 186, 1, 173, 247, 186, 1, - 239, 8, 247, 186, 1, 222, 203, 247, 186, 1, 222, 146, 247, 186, 1, 185, - 247, 186, 1, 249, 32, 247, 186, 1, 192, 247, 186, 1, 223, 250, 247, 186, - 1, 210, 22, 247, 186, 1, 244, 212, 247, 186, 1, 201, 201, 247, 186, 1, - 221, 147, 247, 186, 1, 247, 92, 247, 186, 1, 230, 181, 247, 186, 1, 221, - 11, 247, 186, 1, 221, 3, 247, 186, 1, 198, 247, 186, 1, 216, 220, 247, - 186, 1, 228, 113, 247, 186, 1, 206, 86, 247, 186, 1, 215, 36, 247, 186, - 1, 63, 247, 186, 1, 152, 247, 186, 22, 2, 75, 247, 186, 22, 2, 68, 247, - 186, 22, 2, 74, 247, 186, 22, 2, 78, 247, 186, 22, 2, 251, 109, 247, 186, - 219, 136, 247, 186, 241, 84, 76, 214, 167, 45, 104, 1, 138, 173, 45, 104, - 1, 138, 229, 144, 45, 104, 1, 138, 228, 153, 45, 104, 1, 124, 173, 45, - 104, 1, 124, 228, 153, 45, 104, 1, 124, 229, 144, 45, 104, 1, 222, 203, - 45, 104, 1, 138, 247, 92, 45, 104, 1, 138, 246, 199, 45, 104, 1, 124, - 247, 92, 45, 104, 1, 124, 215, 36, 45, 104, 1, 124, 246, 199, 45, 104, 1, - 221, 11, 45, 104, 1, 216, 171, 45, 104, 1, 138, 216, 169, 45, 104, 1, - 244, 212, 45, 104, 1, 124, 216, 169, 45, 104, 1, 216, 180, 45, 104, 1, - 138, 210, 22, 45, 104, 1, 138, 209, 108, 45, 104, 1, 124, 210, 22, 45, - 104, 1, 124, 209, 108, 45, 104, 1, 201, 201, 45, 104, 1, 249, 32, 45, - 104, 1, 138, 185, 45, 104, 1, 138, 218, 208, 45, 104, 1, 138, 240, 108, - 45, 104, 1, 124, 185, 45, 104, 1, 124, 240, 108, 45, 104, 1, 124, 218, - 208, 45, 104, 1, 192, 45, 104, 1, 124, 198, 45, 104, 1, 138, 198, 45, - 104, 1, 216, 220, 45, 104, 1, 215, 140, 45, 104, 1, 228, 113, 45, 104, 1, - 226, 232, 45, 104, 1, 204, 111, 45, 104, 1, 138, 213, 90, 45, 104, 1, - 138, 211, 164, 45, 104, 1, 138, 215, 36, 45, 104, 1, 138, 152, 45, 104, - 1, 227, 77, 45, 104, 1, 63, 45, 104, 1, 124, 152, 45, 104, 1, 75, 45, - 104, 1, 231, 83, 45, 104, 1, 68, 45, 104, 1, 206, 178, 45, 104, 1, 241, - 161, 45, 104, 1, 220, 18, 45, 104, 1, 228, 97, 45, 104, 1, 237, 249, 215, - 36, 45, 104, 109, 2, 174, 216, 220, 45, 104, 109, 2, 174, 228, 113, 45, - 104, 109, 2, 228, 114, 209, 228, 228, 86, 45, 104, 2, 225, 141, 230, 1, - 228, 86, 45, 104, 109, 2, 46, 222, 203, 45, 104, 109, 2, 124, 185, 45, - 104, 109, 2, 138, 216, 170, 219, 245, 124, 185, 45, 104, 109, 2, 192, 45, - 104, 109, 2, 249, 32, 45, 104, 109, 2, 215, 36, 45, 104, 2, 215, 10, 45, - 104, 22, 2, 63, 45, 104, 22, 2, 225, 141, 214, 225, 45, 104, 22, 2, 252, - 25, 45, 104, 22, 2, 209, 234, 252, 25, 45, 104, 22, 2, 75, 45, 104, 22, - 2, 231, 83, 45, 104, 22, 2, 207, 24, 45, 104, 22, 2, 206, 177, 45, 104, - 22, 2, 68, 45, 104, 22, 2, 206, 178, 45, 104, 22, 2, 78, 45, 104, 22, 2, - 220, 98, 56, 45, 104, 22, 2, 219, 188, 45, 104, 22, 2, 74, 45, 104, 22, - 2, 251, 109, 45, 104, 22, 2, 220, 18, 45, 104, 22, 2, 251, 64, 45, 104, - 22, 2, 104, 251, 64, 45, 104, 22, 2, 220, 98, 55, 45, 104, 2, 225, 141, - 230, 0, 45, 104, 2, 208, 160, 45, 104, 2, 208, 159, 45, 104, 2, 229, 105, - 208, 158, 45, 104, 2, 229, 105, 208, 157, 45, 104, 2, 229, 105, 208, 156, - 45, 104, 2, 216, 221, 237, 156, 45, 104, 2, 225, 141, 214, 253, 45, 104, - 2, 229, 104, 229, 239, 45, 104, 39, 245, 113, 243, 85, 45, 104, 236, 108, - 17, 202, 84, 45, 104, 236, 108, 17, 105, 45, 104, 236, 108, 17, 108, 45, - 104, 236, 108, 17, 147, 45, 104, 236, 108, 17, 149, 45, 104, 236, 108, - 17, 170, 45, 104, 236, 108, 17, 195, 45, 104, 236, 108, 17, 213, 111, 45, - 104, 236, 108, 17, 199, 45, 104, 236, 108, 17, 222, 63, 45, 104, 104, 17, - 202, 84, 45, 104, 104, 17, 105, 45, 104, 104, 17, 108, 45, 104, 104, 17, - 147, 45, 104, 104, 17, 149, 45, 104, 104, 17, 170, 45, 104, 104, 17, 195, - 45, 104, 104, 17, 213, 111, 45, 104, 104, 17, 199, 45, 104, 104, 17, 222, - 63, 45, 104, 2, 204, 29, 45, 104, 2, 204, 28, 45, 104, 2, 214, 212, 45, - 104, 2, 229, 175, 45, 104, 2, 236, 36, 45, 104, 2, 243, 99, 45, 104, 2, - 216, 73, 215, 198, 216, 180, 45, 104, 2, 225, 141, 203, 79, 45, 104, 2, - 230, 35, 45, 104, 2, 230, 34, 45, 104, 2, 214, 220, 45, 104, 2, 214, 219, - 45, 104, 2, 237, 98, 45, 104, 2, 247, 89, 39, 242, 75, 246, 53, 251, 138, - 39, 243, 230, 39, 231, 27, 39, 183, 47, 39, 208, 70, 243, 85, 39, 203, - 195, 56, 39, 204, 21, 227, 115, 56, 39, 171, 131, 56, 39, 52, 171, 131, - 56, 39, 157, 246, 219, 211, 32, 56, 39, 211, 18, 246, 219, 211, 32, 56, - 39, 219, 78, 55, 39, 52, 219, 78, 55, 39, 219, 78, 56, 39, 219, 78, 219, - 199, 130, 2, 207, 9, 216, 51, 130, 2, 207, 9, 247, 54, 130, 2, 246, 234, - 130, 2, 210, 191, 130, 2, 248, 56, 130, 1, 251, 45, 130, 1, 251, 46, 209, - 178, 130, 1, 231, 79, 130, 1, 231, 80, 209, 178, 130, 1, 207, 12, 130, 1, - 207, 13, 209, 178, 130, 1, 216, 221, 216, 103, 130, 1, 216, 221, 216, - 104, 209, 178, 130, 1, 228, 114, 227, 197, 130, 1, 228, 114, 227, 198, - 209, 178, 130, 1, 241, 127, 130, 1, 251, 62, 130, 1, 220, 49, 130, 1, - 220, 50, 209, 178, 130, 1, 173, 130, 1, 230, 44, 225, 144, 130, 1, 239, - 8, 130, 1, 239, 9, 238, 25, 130, 1, 222, 203, 130, 1, 247, 92, 130, 1, - 247, 93, 228, 100, 130, 1, 230, 181, 130, 1, 230, 182, 230, 153, 130, 1, - 221, 11, 130, 1, 210, 23, 227, 253, 130, 1, 210, 23, 223, 206, 225, 144, - 130, 1, 244, 213, 223, 206, 251, 4, 130, 1, 244, 213, 223, 206, 225, 144, - 130, 1, 223, 111, 216, 183, 130, 1, 210, 22, 130, 1, 210, 23, 209, 200, - 130, 1, 244, 212, 130, 1, 244, 213, 225, 163, 130, 1, 201, 201, 130, 1, - 185, 130, 1, 219, 169, 229, 251, 130, 1, 249, 32, 130, 1, 249, 33, 229, - 187, 130, 1, 192, 130, 1, 198, 130, 1, 216, 220, 130, 1, 228, 113, 130, - 1, 204, 111, 130, 1, 215, 37, 215, 21, 130, 1, 215, 37, 214, 232, 130, 1, - 215, 36, 130, 1, 152, 130, 2, 216, 94, 130, 22, 2, 209, 178, 130, 22, 2, - 207, 8, 130, 22, 2, 207, 9, 214, 228, 130, 22, 2, 210, 224, 130, 22, 2, - 210, 225, 231, 71, 130, 22, 2, 216, 221, 216, 103, 130, 22, 2, 216, 221, - 216, 104, 209, 178, 130, 22, 2, 228, 114, 227, 197, 130, 22, 2, 228, 114, - 227, 198, 209, 178, 130, 22, 2, 209, 235, 130, 22, 2, 209, 236, 216, 103, - 130, 22, 2, 209, 236, 209, 178, 130, 22, 2, 209, 236, 216, 104, 209, 178, - 130, 22, 2, 218, 249, 130, 22, 2, 218, 250, 209, 178, 130, 251, 117, 251, - 116, 130, 1, 230, 23, 214, 227, 130, 1, 229, 111, 214, 227, 130, 1, 207, - 101, 214, 227, 130, 1, 241, 155, 214, 227, 130, 1, 206, 56, 214, 227, - 130, 1, 202, 106, 214, 227, 130, 1, 250, 52, 214, 227, 130, 17, 202, 84, - 130, 17, 105, 130, 17, 108, 130, 17, 147, 130, 17, 149, 130, 17, 170, - 130, 17, 195, 130, 17, 213, 111, 130, 17, 199, 130, 17, 222, 63, 130, - 219, 104, 130, 219, 130, 130, 204, 14, 130, 247, 31, 219, 123, 130, 247, - 31, 212, 139, 130, 247, 31, 219, 75, 130, 219, 129, 130, 31, 16, 243, 91, - 130, 31, 16, 244, 34, 130, 31, 16, 242, 27, 130, 31, 16, 244, 164, 130, - 31, 16, 244, 165, 210, 191, 130, 31, 16, 243, 175, 130, 31, 16, 244, 205, - 130, 31, 16, 244, 10, 130, 31, 16, 244, 187, 130, 31, 16, 244, 165, 238, - 184, 130, 31, 16, 39, 209, 171, 130, 31, 16, 39, 241, 82, 130, 31, 16, - 39, 229, 182, 130, 31, 16, 39, 229, 184, 130, 31, 16, 39, 230, 157, 130, - 31, 16, 39, 229, 183, 3, 230, 157, 130, 31, 16, 39, 229, 185, 3, 230, - 157, 130, 31, 16, 39, 248, 119, 130, 31, 16, 39, 238, 29, 130, 31, 16, - 216, 14, 171, 242, 37, 130, 31, 16, 216, 14, 171, 244, 203, 130, 31, 16, - 216, 14, 246, 16, 207, 195, 130, 31, 16, 216, 14, 246, 16, 209, 244, 130, - 31, 16, 227, 220, 171, 219, 118, 130, 31, 16, 227, 220, 171, 217, 177, - 130, 31, 16, 227, 220, 246, 16, 218, 94, 130, 31, 16, 227, 220, 246, 16, - 218, 80, 130, 31, 16, 227, 220, 171, 218, 119, 210, 213, 2, 219, 101, - 210, 213, 2, 219, 114, 210, 213, 2, 219, 110, 210, 213, 1, 63, 210, 213, - 1, 75, 210, 213, 1, 68, 210, 213, 1, 251, 109, 210, 213, 1, 78, 210, 213, - 1, 74, 210, 213, 1, 240, 238, 210, 213, 1, 173, 210, 213, 1, 217, 126, - 210, 213, 1, 239, 8, 210, 213, 1, 222, 203, 210, 213, 1, 247, 92, 210, - 213, 1, 230, 181, 210, 213, 1, 202, 116, 210, 213, 1, 221, 11, 210, 213, - 1, 210, 22, 210, 213, 1, 244, 212, 210, 213, 1, 201, 201, 210, 213, 1, - 185, 210, 213, 1, 240, 108, 210, 213, 1, 206, 86, 210, 213, 1, 249, 32, - 210, 213, 1, 192, 210, 213, 1, 198, 210, 213, 1, 216, 220, 210, 213, 1, - 228, 113, 210, 213, 1, 204, 111, 210, 213, 1, 215, 36, 210, 213, 1, 203, - 182, 210, 213, 1, 152, 210, 213, 109, 2, 219, 127, 210, 213, 109, 2, 219, - 103, 210, 213, 109, 2, 219, 100, 210, 213, 22, 2, 219, 117, 210, 213, 22, - 2, 219, 99, 210, 213, 22, 2, 219, 121, 210, 213, 22, 2, 219, 109, 210, - 213, 22, 2, 219, 128, 210, 213, 22, 2, 219, 119, 210, 213, 2, 219, 131, - 210, 213, 2, 205, 204, 210, 213, 109, 2, 219, 64, 192, 210, 213, 109, 2, - 219, 64, 204, 111, 210, 213, 1, 229, 144, 210, 213, 1, 210, 150, 210, - 213, 17, 202, 84, 210, 213, 17, 105, 210, 213, 17, 108, 210, 213, 17, - 147, 210, 213, 17, 149, 210, 213, 17, 170, 210, 213, 17, 195, 210, 213, - 17, 213, 111, 210, 213, 17, 199, 210, 213, 17, 222, 63, 210, 213, 250, - 17, 210, 213, 1, 216, 76, 210, 213, 1, 227, 171, 210, 213, 1, 248, 98, - 210, 213, 1, 46, 230, 54, 210, 213, 1, 46, 226, 185, 248, 208, 1, 63, - 248, 208, 1, 212, 131, 63, 248, 208, 1, 152, 248, 208, 1, 212, 131, 152, - 248, 208, 1, 225, 117, 152, 248, 208, 1, 249, 32, 248, 208, 1, 229, 236, - 249, 32, 248, 208, 1, 185, 248, 208, 1, 212, 131, 185, 248, 208, 1, 201, - 201, 248, 208, 1, 225, 117, 201, 201, 248, 208, 1, 204, 111, 248, 208, 1, - 212, 131, 204, 111, 248, 208, 1, 219, 143, 204, 111, 248, 208, 1, 239, 8, - 248, 208, 1, 212, 131, 239, 8, 248, 208, 1, 230, 181, 248, 208, 1, 244, - 212, 248, 208, 1, 216, 220, 248, 208, 1, 212, 131, 216, 220, 248, 208, 1, - 192, 248, 208, 1, 212, 131, 192, 248, 208, 1, 211, 236, 210, 22, 248, - 208, 1, 221, 170, 210, 22, 248, 208, 1, 215, 36, 248, 208, 1, 212, 131, - 215, 36, 248, 208, 1, 225, 117, 215, 36, 248, 208, 1, 198, 248, 208, 1, - 212, 131, 198, 248, 208, 1, 222, 203, 248, 208, 1, 228, 113, 248, 208, 1, - 212, 131, 228, 113, 248, 208, 1, 221, 11, 248, 208, 1, 247, 92, 248, 208, - 1, 223, 25, 248, 208, 1, 225, 54, 248, 208, 1, 75, 248, 208, 1, 68, 248, - 208, 2, 208, 164, 248, 208, 22, 2, 74, 248, 208, 22, 2, 219, 143, 74, - 248, 208, 22, 2, 241, 161, 248, 208, 22, 2, 75, 248, 208, 22, 2, 229, - 236, 75, 248, 208, 22, 2, 78, 248, 208, 22, 2, 229, 236, 78, 248, 208, - 22, 2, 68, 248, 208, 22, 2, 106, 35, 212, 131, 215, 36, 248, 208, 109, 2, - 222, 205, 248, 208, 109, 2, 237, 171, 248, 208, 219, 112, 248, 208, 219, - 108, 248, 208, 16, 248, 64, 223, 111, 224, 218, 248, 208, 16, 248, 64, - 218, 122, 248, 208, 16, 248, 64, 230, 79, 248, 208, 16, 248, 64, 219, - 112, 227, 181, 1, 173, 227, 181, 1, 229, 40, 227, 181, 1, 229, 144, 227, - 181, 1, 239, 8, 227, 181, 1, 238, 51, 227, 181, 1, 222, 203, 227, 181, 1, - 247, 92, 227, 181, 1, 246, 199, 227, 181, 1, 230, 181, 227, 181, 1, 221, - 11, 227, 181, 1, 210, 22, 227, 181, 1, 209, 108, 227, 181, 1, 244, 212, - 227, 181, 1, 201, 201, 227, 181, 1, 185, 227, 181, 1, 218, 98, 227, 181, - 1, 218, 208, 227, 181, 1, 240, 108, 227, 181, 1, 239, 227, 227, 181, 1, - 249, 32, 227, 181, 1, 248, 44, 227, 181, 1, 192, 227, 181, 1, 224, 89, - 227, 181, 1, 208, 20, 227, 181, 1, 208, 10, 227, 181, 1, 241, 255, 227, - 181, 1, 198, 227, 181, 1, 216, 220, 227, 181, 1, 228, 113, 227, 181, 1, - 152, 227, 181, 1, 236, 224, 227, 181, 1, 206, 86, 227, 181, 1, 215, 36, - 227, 181, 1, 213, 90, 227, 181, 1, 204, 111, 227, 181, 1, 63, 227, 181, - 210, 254, 1, 198, 227, 181, 210, 254, 1, 216, 220, 227, 181, 22, 2, 252, - 25, 227, 181, 22, 2, 75, 227, 181, 22, 2, 78, 227, 181, 22, 2, 220, 18, - 227, 181, 22, 2, 68, 227, 181, 22, 2, 206, 178, 227, 181, 22, 2, 74, 227, - 181, 109, 2, 230, 54, 227, 181, 109, 2, 226, 185, 227, 181, 109, 2, 159, - 227, 181, 109, 2, 223, 163, 227, 181, 109, 2, 219, 184, 227, 181, 109, 2, - 146, 227, 181, 109, 2, 210, 69, 227, 181, 109, 2, 220, 241, 227, 181, - 109, 2, 230, 0, 227, 181, 2, 216, 181, 227, 181, 2, 221, 51, 227, 181, - 217, 179, 210, 20, 227, 181, 217, 179, 220, 252, 209, 5, 210, 20, 227, - 181, 217, 179, 246, 206, 227, 181, 217, 179, 208, 2, 246, 206, 227, 181, - 217, 179, 208, 1, 227, 181, 17, 202, 84, 227, 181, 17, 105, 227, 181, 17, - 108, 227, 181, 17, 147, 227, 181, 17, 149, 227, 181, 17, 170, 227, 181, - 17, 195, 227, 181, 17, 213, 111, 227, 181, 17, 199, 227, 181, 17, 222, - 63, 227, 181, 1, 207, 241, 227, 181, 1, 207, 229, 227, 181, 1, 244, 120, - 220, 47, 246, 135, 17, 202, 84, 220, 47, 246, 135, 17, 105, 220, 47, 246, - 135, 17, 108, 220, 47, 246, 135, 17, 147, 220, 47, 246, 135, 17, 149, - 220, 47, 246, 135, 17, 170, 220, 47, 246, 135, 17, 195, 220, 47, 246, - 135, 17, 213, 111, 220, 47, 246, 135, 17, 199, 220, 47, 246, 135, 17, - 222, 63, 220, 47, 246, 135, 1, 228, 113, 220, 47, 246, 135, 1, 250, 49, - 220, 47, 246, 135, 1, 251, 81, 220, 47, 246, 135, 1, 250, 223, 220, 47, - 246, 135, 1, 251, 39, 220, 47, 246, 135, 1, 228, 112, 220, 47, 246, 135, - 1, 251, 243, 220, 47, 246, 135, 1, 251, 244, 220, 47, 246, 135, 1, 251, - 242, 220, 47, 246, 135, 1, 251, 237, 220, 47, 246, 135, 1, 227, 148, 220, - 47, 246, 135, 1, 230, 215, 220, 47, 246, 135, 1, 231, 84, 220, 47, 246, - 135, 1, 230, 236, 220, 47, 246, 135, 1, 230, 224, 220, 47, 246, 135, 1, - 226, 239, 220, 47, 246, 135, 1, 207, 31, 220, 47, 246, 135, 1, 207, 29, - 220, 47, 246, 135, 1, 206, 229, 220, 47, 246, 135, 1, 206, 170, 220, 47, - 246, 135, 1, 227, 234, 220, 47, 246, 135, 1, 241, 46, 220, 47, 246, 135, - 1, 241, 164, 220, 47, 246, 135, 1, 241, 92, 220, 47, 246, 135, 1, 241, - 21, 220, 47, 246, 135, 1, 227, 49, 220, 47, 246, 135, 1, 219, 219, 220, - 47, 246, 135, 1, 220, 93, 220, 47, 246, 135, 1, 219, 206, 220, 47, 246, - 135, 1, 220, 60, 220, 47, 246, 135, 223, 247, 207, 206, 220, 47, 246, - 135, 239, 3, 207, 207, 220, 47, 246, 135, 223, 245, 207, 207, 220, 47, - 246, 135, 216, 118, 220, 47, 246, 135, 218, 206, 220, 47, 246, 135, 251, - 72, 220, 47, 246, 135, 217, 179, 223, 241, 220, 47, 246, 135, 217, 179, - 52, 223, 241, 210, 213, 217, 179, 248, 64, 210, 184, 210, 213, 217, 179, - 248, 64, 219, 113, 210, 213, 217, 179, 248, 64, 217, 167, 210, 213, 217, - 179, 248, 64, 247, 77, 210, 213, 217, 179, 248, 64, 227, 172, 214, 224, - 210, 213, 217, 179, 248, 64, 230, 44, 214, 224, 210, 213, 217, 179, 248, - 64, 244, 213, 214, 224, 210, 213, 217, 179, 248, 64, 249, 33, 214, 224, - 206, 52, 143, 229, 234, 206, 52, 143, 213, 58, 206, 52, 143, 217, 245, - 206, 52, 2, 222, 76, 206, 52, 2, 203, 87, 224, 146, 210, 175, 206, 52, - 143, 203, 87, 251, 77, 231, 36, 210, 175, 206, 52, 143, 203, 87, 231, 36, - 210, 175, 206, 52, 143, 203, 87, 229, 222, 231, 36, 210, 175, 206, 52, - 143, 247, 55, 56, 206, 52, 143, 203, 87, 229, 222, 231, 36, 210, 176, - 214, 194, 206, 52, 143, 52, 210, 175, 206, 52, 143, 208, 70, 210, 175, - 206, 52, 143, 229, 222, 250, 182, 206, 52, 143, 70, 56, 206, 52, 143, - 120, 187, 56, 206, 52, 143, 126, 187, 56, 206, 52, 143, 216, 4, 229, 233, - 231, 36, 210, 175, 206, 52, 143, 250, 47, 231, 36, 210, 175, 206, 52, 2, - 205, 200, 210, 175, 206, 52, 2, 205, 200, 207, 26, 206, 52, 2, 216, 73, - 205, 200, 207, 26, 206, 52, 2, 205, 200, 250, 182, 206, 52, 2, 216, 73, - 205, 200, 250, 182, 206, 52, 2, 205, 200, 207, 27, 3, 209, 248, 206, 52, - 2, 205, 200, 250, 183, 3, 209, 248, 206, 52, 2, 250, 181, 250, 197, 206, - 52, 2, 250, 181, 249, 2, 206, 52, 2, 250, 181, 206, 77, 206, 52, 2, 250, - 181, 206, 78, 3, 209, 248, 206, 52, 2, 208, 201, 206, 52, 2, 237, 15, - 163, 250, 180, 206, 52, 2, 163, 250, 180, 206, 52, 2, 215, 147, 163, 250, - 180, 206, 52, 2, 250, 181, 207, 33, 223, 232, 206, 52, 2, 250, 122, 206, - 52, 2, 215, 198, 250, 122, 206, 52, 143, 247, 55, 55, 206, 52, 2, 230, - 135, 206, 52, 2, 206, 222, 206, 52, 143, 215, 253, 55, 206, 52, 143, 52, - 215, 253, 55, 8, 1, 5, 6, 63, 8, 1, 5, 6, 251, 109, 8, 5, 1, 207, 174, - 251, 109, 8, 1, 5, 6, 248, 225, 249, 255, 8, 1, 5, 6, 247, 125, 8, 1, 5, - 6, 245, 51, 8, 1, 5, 6, 240, 243, 8, 1, 5, 6, 74, 8, 5, 1, 207, 174, 171, - 74, 8, 5, 1, 207, 174, 75, 8, 1, 5, 6, 230, 184, 8, 1, 5, 6, 230, 54, 8, - 1, 5, 6, 228, 131, 3, 95, 8, 1, 5, 6, 226, 185, 8, 1, 5, 6, 216, 73, 223, - 163, 8, 1, 5, 6, 78, 8, 1, 5, 6, 171, 78, 8, 5, 1, 212, 154, 78, 8, 5, 1, - 212, 154, 171, 78, 8, 5, 1, 212, 154, 158, 3, 95, 8, 5, 1, 207, 174, 220, - 73, 8, 1, 5, 6, 219, 216, 8, 5, 1, 208, 145, 162, 78, 8, 5, 1, 247, 248, - 162, 78, 8, 1, 5, 6, 219, 184, 8, 1, 5, 6, 216, 73, 146, 8, 1, 5, 6, 207, - 174, 146, 8, 1, 5, 6, 210, 69, 8, 1, 5, 6, 68, 8, 5, 1, 212, 154, 68, 8, - 5, 1, 212, 154, 243, 229, 68, 8, 5, 1, 212, 154, 207, 174, 226, 185, 8, - 1, 5, 6, 206, 164, 8, 1, 5, 6, 204, 144, 8, 1, 5, 6, 202, 159, 8, 1, 5, - 6, 240, 177, 8, 1, 205, 186, 228, 3, 211, 200, 8, 1, 251, 59, 30, 1, 5, - 6, 238, 235, 30, 1, 5, 6, 228, 24, 30, 1, 5, 6, 218, 167, 30, 1, 5, 6, - 216, 59, 30, 1, 5, 6, 217, 202, 36, 1, 5, 6, 241, 122, 65, 1, 6, 63, 65, - 1, 6, 251, 109, 65, 1, 6, 249, 255, 65, 1, 6, 248, 225, 249, 255, 65, 1, - 6, 245, 51, 65, 1, 6, 74, 65, 1, 6, 216, 73, 74, 65, 1, 6, 239, 75, 65, - 1, 6, 237, 171, 65, 1, 6, 75, 65, 1, 6, 230, 184, 65, 1, 6, 230, 54, 65, - 1, 6, 159, 65, 1, 6, 226, 185, 65, 1, 6, 223, 163, 65, 1, 6, 216, 73, - 223, 163, 65, 1, 6, 78, 65, 1, 6, 219, 216, 65, 1, 6, 219, 184, 65, 1, 6, - 146, 65, 1, 6, 210, 69, 65, 1, 6, 68, 65, 1, 6, 204, 144, 65, 1, 5, 63, - 65, 1, 5, 207, 174, 63, 65, 1, 5, 251, 2, 65, 1, 5, 207, 174, 251, 109, - 65, 1, 5, 249, 255, 65, 1, 5, 245, 51, 65, 1, 5, 74, 65, 1, 5, 214, 192, - 65, 1, 5, 171, 74, 65, 1, 5, 207, 174, 171, 74, 65, 1, 5, 239, 75, 65, 1, - 5, 207, 174, 75, 65, 1, 5, 230, 54, 65, 1, 5, 226, 185, 65, 1, 5, 241, - 78, 65, 1, 5, 78, 65, 1, 5, 171, 78, 65, 1, 5, 208, 145, 162, 78, 65, 1, - 5, 247, 248, 162, 78, 65, 1, 5, 219, 184, 65, 1, 5, 210, 69, 65, 1, 5, - 68, 65, 1, 5, 212, 154, 68, 65, 1, 5, 207, 174, 226, 185, 65, 1, 5, 206, - 164, 65, 1, 5, 251, 59, 65, 1, 5, 248, 106, 65, 1, 5, 30, 238, 235, 65, - 1, 5, 244, 37, 65, 1, 5, 30, 218, 192, 65, 1, 5, 246, 142, 8, 210, 246, - 5, 1, 75, 8, 210, 246, 5, 1, 146, 8, 210, 246, 5, 1, 68, 8, 210, 246, 5, - 1, 206, 164, 30, 210, 246, 5, 1, 248, 106, 30, 210, 246, 5, 1, 238, 235, - 30, 210, 246, 5, 1, 216, 59, 30, 210, 246, 5, 1, 218, 192, 30, 210, 246, - 5, 1, 246, 142, 8, 5, 1, 207, 24, 8, 5, 1, 66, 3, 101, 208, 227, 8, 5, 1, - 245, 52, 3, 101, 208, 227, 8, 5, 1, 240, 175, 3, 101, 208, 227, 8, 5, 1, - 226, 186, 3, 101, 208, 227, 8, 5, 1, 223, 164, 3, 101, 208, 227, 8, 5, 1, - 219, 185, 3, 101, 208, 227, 8, 5, 1, 217, 1, 3, 101, 208, 227, 8, 5, 1, - 217, 1, 3, 239, 241, 25, 101, 208, 227, 8, 5, 1, 215, 94, 3, 101, 208, - 227, 8, 5, 1, 210, 70, 3, 101, 208, 227, 8, 5, 1, 202, 160, 3, 101, 208, - 227, 8, 5, 1, 207, 174, 239, 75, 65, 1, 36, 241, 92, 8, 5, 1, 231, 4, - 239, 75, 8, 5, 1, 209, 111, 3, 211, 36, 8, 5, 6, 1, 235, 206, 3, 95, 8, - 5, 1, 230, 231, 3, 95, 8, 5, 1, 219, 185, 3, 95, 8, 5, 6, 1, 106, 3, 95, - 8, 5, 1, 206, 217, 3, 95, 8, 5, 1, 66, 3, 219, 142, 113, 8, 5, 1, 245, - 52, 3, 219, 142, 113, 8, 5, 1, 240, 175, 3, 219, 142, 113, 8, 5, 1, 239, - 76, 3, 219, 142, 113, 8, 5, 1, 230, 55, 3, 219, 142, 113, 8, 5, 1, 228, - 131, 3, 219, 142, 113, 8, 5, 1, 226, 186, 3, 219, 142, 113, 8, 5, 1, 223, - 164, 3, 219, 142, 113, 8, 5, 1, 219, 185, 3, 219, 142, 113, 8, 5, 1, 217, - 1, 3, 219, 142, 113, 8, 5, 1, 215, 94, 3, 219, 142, 113, 8, 5, 1, 241, 8, - 3, 219, 142, 113, 8, 5, 1, 206, 165, 3, 219, 142, 113, 8, 5, 1, 203, 197, - 3, 219, 142, 113, 8, 5, 1, 202, 160, 3, 219, 142, 113, 8, 5, 1, 34, 3, - 216, 79, 113, 8, 5, 1, 251, 3, 3, 216, 79, 113, 8, 5, 1, 245, 52, 3, 236, - 116, 25, 209, 248, 8, 5, 1, 188, 3, 216, 79, 113, 8, 5, 1, 171, 188, 3, - 216, 79, 113, 8, 5, 1, 216, 73, 171, 188, 3, 216, 79, 113, 8, 5, 1, 214, - 193, 3, 216, 79, 113, 8, 5, 1, 235, 206, 3, 216, 79, 113, 8, 5, 1, 171, - 158, 3, 216, 79, 113, 8, 5, 1, 241, 8, 3, 216, 79, 113, 8, 5, 1, 106, 3, - 216, 79, 113, 8, 5, 1, 240, 178, 3, 216, 79, 113, 65, 1, 5, 207, 174, - 251, 2, 65, 1, 5, 247, 125, 65, 1, 5, 247, 126, 3, 245, 95, 65, 1, 5, - 240, 243, 65, 1, 5, 216, 73, 171, 74, 65, 1, 5, 240, 174, 65, 1, 5, 243, - 84, 230, 185, 3, 95, 65, 1, 5, 132, 239, 75, 65, 1, 5, 207, 174, 237, - 171, 65, 1, 5, 235, 206, 3, 95, 65, 1, 5, 230, 230, 65, 1, 5, 6, 75, 65, - 1, 5, 6, 235, 206, 3, 95, 65, 1, 5, 230, 185, 3, 245, 126, 65, 1, 5, 228, - 131, 3, 216, 79, 113, 65, 1, 5, 228, 131, 3, 219, 142, 113, 65, 1, 5, 6, - 159, 65, 1, 5, 226, 186, 3, 113, 65, 1, 5, 207, 174, 226, 186, 3, 163, - 227, 210, 65, 1, 5, 223, 164, 3, 49, 113, 65, 1, 5, 223, 164, 3, 216, 79, - 113, 65, 1, 5, 6, 223, 163, 65, 1, 5, 248, 225, 78, 65, 1, 5, 218, 192, - 65, 1, 5, 215, 94, 3, 113, 65, 1, 5, 241, 7, 65, 1, 5, 210, 70, 3, 219, - 142, 113, 65, 1, 5, 106, 142, 65, 1, 5, 206, 216, 65, 1, 5, 6, 68, 65, 1, - 5, 206, 165, 3, 113, 65, 1, 5, 207, 174, 206, 164, 65, 1, 5, 202, 159, - 65, 1, 5, 202, 160, 3, 216, 79, 113, 65, 1, 5, 202, 160, 3, 245, 95, 65, - 1, 5, 240, 177, 65, 1, 5, 209, 74, 39, 242, 83, 237, 254, 251, 138, 39, - 242, 83, 251, 126, 251, 138, 39, 212, 25, 56, 39, 210, 182, 82, 39, 225, - 169, 39, 237, 251, 39, 225, 167, 39, 251, 124, 39, 237, 252, 39, 251, - 125, 39, 8, 5, 1, 217, 1, 56, 39, 247, 213, 39, 225, 168, 39, 52, 246, - 53, 55, 39, 220, 63, 55, 39, 202, 30, 56, 39, 230, 216, 56, 39, 206, 211, - 55, 39, 206, 194, 55, 39, 8, 5, 1, 239, 214, 171, 34, 55, 39, 8, 5, 1, - 251, 109, 39, 8, 5, 1, 250, 178, 39, 8, 5, 1, 250, 18, 39, 8, 5, 1, 247, - 126, 246, 231, 39, 8, 5, 1, 231, 4, 245, 51, 39, 8, 5, 1, 240, 243, 39, - 8, 5, 1, 239, 75, 39, 8, 1, 5, 6, 239, 75, 39, 8, 5, 1, 230, 54, 39, 8, - 5, 1, 159, 39, 8, 1, 5, 6, 159, 39, 8, 1, 5, 6, 226, 185, 39, 8, 5, 1, - 223, 163, 39, 8, 1, 5, 6, 223, 163, 39, 8, 1, 5, 6, 146, 39, 8, 5, 1, - 217, 1, 215, 192, 39, 8, 5, 1, 194, 39, 8, 5, 1, 163, 194, 39, 8, 5, 1, - 202, 159, 39, 8, 5, 1, 251, 2, 39, 8, 5, 1, 249, 255, 39, 8, 5, 1, 248, - 106, 39, 8, 5, 1, 214, 192, 39, 8, 5, 1, 240, 174, 39, 8, 5, 1, 228, 131, - 3, 52, 101, 208, 227, 39, 8, 5, 1, 158, 3, 157, 246, 219, 95, 39, 8, 5, - 1, 219, 184, 39, 8, 5, 1, 241, 7, 39, 8, 5, 1, 106, 3, 157, 246, 219, 95, - 39, 8, 5, 1, 204, 144, 39, 8, 5, 1, 34, 3, 243, 231, 39, 8, 5, 1, 158, 3, - 243, 231, 39, 8, 5, 1, 106, 3, 243, 231, 39, 112, 210, 4, 55, 39, 52, - 230, 239, 247, 215, 56, 39, 251, 7, 156, 208, 173, 56, 39, 49, 250, 95, - 55, 39, 50, 250, 95, 25, 121, 250, 95, 56, 8, 6, 1, 34, 3, 215, 253, 56, - 8, 5, 1, 34, 3, 215, 253, 56, 8, 6, 1, 66, 3, 70, 55, 8, 5, 1, 66, 3, 70, - 55, 8, 6, 1, 66, 3, 70, 56, 8, 5, 1, 66, 3, 70, 56, 8, 6, 1, 66, 3, 227, - 115, 56, 8, 5, 1, 66, 3, 227, 115, 56, 8, 6, 1, 247, 126, 3, 246, 232, - 25, 165, 8, 5, 1, 247, 126, 3, 246, 232, 25, 165, 8, 6, 1, 245, 52, 3, - 70, 55, 8, 5, 1, 245, 52, 3, 70, 55, 8, 6, 1, 245, 52, 3, 70, 56, 8, 5, - 1, 245, 52, 3, 70, 56, 8, 6, 1, 245, 52, 3, 227, 115, 56, 8, 5, 1, 245, - 52, 3, 227, 115, 56, 8, 6, 1, 245, 52, 3, 246, 231, 8, 5, 1, 245, 52, 3, - 246, 231, 8, 6, 1, 245, 52, 3, 246, 53, 56, 8, 5, 1, 245, 52, 3, 246, 53, - 56, 8, 6, 1, 188, 3, 225, 171, 25, 237, 253, 8, 5, 1, 188, 3, 225, 171, - 25, 237, 253, 8, 6, 1, 188, 3, 225, 171, 25, 165, 8, 5, 1, 188, 3, 225, - 171, 25, 165, 8, 6, 1, 188, 3, 246, 53, 56, 8, 5, 1, 188, 3, 246, 53, 56, - 8, 6, 1, 188, 3, 208, 228, 56, 8, 5, 1, 188, 3, 208, 228, 56, 8, 6, 1, - 188, 3, 246, 232, 25, 247, 214, 8, 5, 1, 188, 3, 246, 232, 25, 247, 214, - 8, 6, 1, 240, 175, 3, 70, 55, 8, 5, 1, 240, 175, 3, 70, 55, 8, 6, 1, 239, - 76, 3, 225, 170, 8, 5, 1, 239, 76, 3, 225, 170, 8, 6, 1, 237, 172, 3, 70, - 55, 8, 5, 1, 237, 172, 3, 70, 55, 8, 6, 1, 237, 172, 3, 70, 56, 8, 5, 1, - 237, 172, 3, 70, 56, 8, 6, 1, 237, 172, 3, 243, 231, 8, 5, 1, 237, 172, - 3, 243, 231, 8, 6, 1, 237, 172, 3, 246, 231, 8, 5, 1, 237, 172, 3, 246, - 231, 8, 6, 1, 237, 172, 3, 247, 215, 56, 8, 5, 1, 237, 172, 3, 247, 215, - 56, 8, 6, 1, 235, 206, 3, 208, 228, 56, 8, 5, 1, 235, 206, 3, 208, 228, - 56, 8, 6, 1, 235, 206, 3, 243, 232, 25, 165, 8, 5, 1, 235, 206, 3, 243, - 232, 25, 165, 8, 6, 1, 230, 55, 3, 165, 8, 5, 1, 230, 55, 3, 165, 8, 6, - 1, 230, 55, 3, 70, 56, 8, 5, 1, 230, 55, 3, 70, 56, 8, 6, 1, 230, 55, 3, - 227, 115, 56, 8, 5, 1, 230, 55, 3, 227, 115, 56, 8, 6, 1, 228, 131, 3, - 70, 56, 8, 5, 1, 228, 131, 3, 70, 56, 8, 6, 1, 228, 131, 3, 70, 248, 126, - 25, 225, 170, 8, 5, 1, 228, 131, 3, 70, 248, 126, 25, 225, 170, 8, 6, 1, - 228, 131, 3, 227, 115, 56, 8, 5, 1, 228, 131, 3, 227, 115, 56, 8, 6, 1, - 228, 131, 3, 246, 53, 56, 8, 5, 1, 228, 131, 3, 246, 53, 56, 8, 6, 1, - 226, 186, 3, 165, 8, 5, 1, 226, 186, 3, 165, 8, 6, 1, 226, 186, 3, 70, - 55, 8, 5, 1, 226, 186, 3, 70, 55, 8, 6, 1, 226, 186, 3, 70, 56, 8, 5, 1, - 226, 186, 3, 70, 56, 8, 6, 1, 223, 164, 3, 70, 55, 8, 5, 1, 223, 164, 3, - 70, 55, 8, 6, 1, 223, 164, 3, 70, 56, 8, 5, 1, 223, 164, 3, 70, 56, 8, 6, - 1, 223, 164, 3, 227, 115, 56, 8, 5, 1, 223, 164, 3, 227, 115, 56, 8, 6, - 1, 223, 164, 3, 246, 53, 56, 8, 5, 1, 223, 164, 3, 246, 53, 56, 8, 6, 1, - 158, 3, 208, 228, 25, 165, 8, 5, 1, 158, 3, 208, 228, 25, 165, 8, 6, 1, - 158, 3, 208, 228, 25, 243, 231, 8, 5, 1, 158, 3, 208, 228, 25, 243, 231, - 8, 6, 1, 158, 3, 225, 171, 25, 237, 253, 8, 5, 1, 158, 3, 225, 171, 25, - 237, 253, 8, 6, 1, 158, 3, 225, 171, 25, 165, 8, 5, 1, 158, 3, 225, 171, - 25, 165, 8, 6, 1, 219, 185, 3, 165, 8, 5, 1, 219, 185, 3, 165, 8, 6, 1, - 219, 185, 3, 70, 55, 8, 5, 1, 219, 185, 3, 70, 55, 8, 6, 1, 217, 1, 3, - 70, 55, 8, 5, 1, 217, 1, 3, 70, 55, 8, 6, 1, 217, 1, 3, 70, 56, 8, 5, 1, - 217, 1, 3, 70, 56, 8, 6, 1, 217, 1, 3, 70, 248, 126, 25, 225, 170, 8, 5, - 1, 217, 1, 3, 70, 248, 126, 25, 225, 170, 8, 6, 1, 217, 1, 3, 227, 115, - 56, 8, 5, 1, 217, 1, 3, 227, 115, 56, 8, 6, 1, 215, 94, 3, 70, 55, 8, 5, - 1, 215, 94, 3, 70, 55, 8, 6, 1, 215, 94, 3, 70, 56, 8, 5, 1, 215, 94, 3, - 70, 56, 8, 6, 1, 215, 94, 3, 251, 126, 25, 70, 55, 8, 5, 1, 215, 94, 3, - 251, 126, 25, 70, 55, 8, 6, 1, 215, 94, 3, 247, 30, 25, 70, 55, 8, 5, 1, - 215, 94, 3, 247, 30, 25, 70, 55, 8, 6, 1, 215, 94, 3, 70, 248, 126, 25, - 70, 55, 8, 5, 1, 215, 94, 3, 70, 248, 126, 25, 70, 55, 8, 6, 1, 210, 70, - 3, 70, 55, 8, 5, 1, 210, 70, 3, 70, 55, 8, 6, 1, 210, 70, 3, 70, 56, 8, - 5, 1, 210, 70, 3, 70, 56, 8, 6, 1, 210, 70, 3, 227, 115, 56, 8, 5, 1, - 210, 70, 3, 227, 115, 56, 8, 6, 1, 210, 70, 3, 246, 53, 56, 8, 5, 1, 210, - 70, 3, 246, 53, 56, 8, 6, 1, 106, 3, 243, 232, 56, 8, 5, 1, 106, 3, 243, - 232, 56, 8, 6, 1, 106, 3, 208, 228, 56, 8, 5, 1, 106, 3, 208, 228, 56, 8, - 6, 1, 106, 3, 246, 53, 56, 8, 5, 1, 106, 3, 246, 53, 56, 8, 6, 1, 106, 3, - 208, 228, 25, 165, 8, 5, 1, 106, 3, 208, 228, 25, 165, 8, 6, 1, 106, 3, - 225, 171, 25, 243, 231, 8, 5, 1, 106, 3, 225, 171, 25, 243, 231, 8, 6, 1, - 206, 165, 3, 208, 227, 8, 5, 1, 206, 165, 3, 208, 227, 8, 6, 1, 206, 165, - 3, 70, 56, 8, 5, 1, 206, 165, 3, 70, 56, 8, 6, 1, 204, 145, 3, 237, 253, - 8, 5, 1, 204, 145, 3, 237, 253, 8, 6, 1, 204, 145, 3, 165, 8, 5, 1, 204, - 145, 3, 165, 8, 6, 1, 204, 145, 3, 243, 231, 8, 5, 1, 204, 145, 3, 243, - 231, 8, 6, 1, 204, 145, 3, 70, 55, 8, 5, 1, 204, 145, 3, 70, 55, 8, 6, 1, - 204, 145, 3, 70, 56, 8, 5, 1, 204, 145, 3, 70, 56, 8, 6, 1, 203, 197, 3, - 70, 55, 8, 5, 1, 203, 197, 3, 70, 55, 8, 6, 1, 203, 197, 3, 243, 231, 8, - 5, 1, 203, 197, 3, 243, 231, 8, 6, 1, 203, 125, 3, 70, 55, 8, 5, 1, 203, - 125, 3, 70, 55, 8, 6, 1, 202, 160, 3, 246, 52, 8, 5, 1, 202, 160, 3, 246, - 52, 8, 6, 1, 202, 160, 3, 70, 56, 8, 5, 1, 202, 160, 3, 70, 56, 8, 6, 1, - 202, 160, 3, 227, 115, 56, 8, 5, 1, 202, 160, 3, 227, 115, 56, 8, 5, 1, - 237, 172, 3, 227, 115, 56, 8, 5, 1, 210, 70, 3, 243, 231, 8, 5, 1, 204, - 145, 3, 215, 253, 55, 8, 5, 1, 203, 125, 3, 215, 253, 55, 8, 5, 1, 34, 3, - 50, 162, 215, 252, 8, 5, 1, 163, 215, 94, 3, 70, 55, 8, 5, 1, 163, 215, - 94, 3, 243, 228, 95, 8, 5, 1, 163, 215, 94, 3, 138, 95, 8, 6, 1, 213, 57, - 194, 8, 5, 1, 244, 37, 8, 6, 1, 34, 3, 70, 56, 8, 5, 1, 34, 3, 70, 56, 8, - 6, 1, 34, 3, 236, 116, 55, 8, 5, 1, 34, 3, 236, 116, 55, 8, 6, 1, 34, 3, - 246, 53, 25, 165, 8, 5, 1, 34, 3, 246, 53, 25, 165, 8, 6, 1, 34, 3, 246, - 53, 25, 237, 253, 8, 5, 1, 34, 3, 246, 53, 25, 237, 253, 8, 6, 1, 34, 3, - 246, 53, 25, 236, 116, 55, 8, 5, 1, 34, 3, 246, 53, 25, 236, 116, 55, 8, - 6, 1, 34, 3, 246, 53, 25, 208, 227, 8, 5, 1, 34, 3, 246, 53, 25, 208, - 227, 8, 6, 1, 34, 3, 246, 53, 25, 70, 56, 8, 5, 1, 34, 3, 246, 53, 25, - 70, 56, 8, 6, 1, 34, 3, 247, 215, 25, 165, 8, 5, 1, 34, 3, 247, 215, 25, - 165, 8, 6, 1, 34, 3, 247, 215, 25, 237, 253, 8, 5, 1, 34, 3, 247, 215, - 25, 237, 253, 8, 6, 1, 34, 3, 247, 215, 25, 236, 116, 55, 8, 5, 1, 34, 3, - 247, 215, 25, 236, 116, 55, 8, 6, 1, 34, 3, 247, 215, 25, 208, 227, 8, 5, - 1, 34, 3, 247, 215, 25, 208, 227, 8, 6, 1, 34, 3, 247, 215, 25, 70, 56, - 8, 5, 1, 34, 3, 247, 215, 25, 70, 56, 8, 6, 1, 188, 3, 70, 56, 8, 5, 1, - 188, 3, 70, 56, 8, 6, 1, 188, 3, 236, 116, 55, 8, 5, 1, 188, 3, 236, 116, - 55, 8, 6, 1, 188, 3, 208, 227, 8, 5, 1, 188, 3, 208, 227, 8, 6, 1, 188, - 3, 246, 53, 25, 165, 8, 5, 1, 188, 3, 246, 53, 25, 165, 8, 6, 1, 188, 3, - 246, 53, 25, 237, 253, 8, 5, 1, 188, 3, 246, 53, 25, 237, 253, 8, 6, 1, - 188, 3, 246, 53, 25, 236, 116, 55, 8, 5, 1, 188, 3, 246, 53, 25, 236, - 116, 55, 8, 6, 1, 188, 3, 246, 53, 25, 208, 227, 8, 5, 1, 188, 3, 246, - 53, 25, 208, 227, 8, 6, 1, 188, 3, 246, 53, 25, 70, 56, 8, 5, 1, 188, 3, - 246, 53, 25, 70, 56, 8, 6, 1, 235, 206, 3, 236, 116, 55, 8, 5, 1, 235, - 206, 3, 236, 116, 55, 8, 6, 1, 235, 206, 3, 70, 56, 8, 5, 1, 235, 206, 3, - 70, 56, 8, 6, 1, 158, 3, 70, 56, 8, 5, 1, 158, 3, 70, 56, 8, 6, 1, 158, - 3, 236, 116, 55, 8, 5, 1, 158, 3, 236, 116, 55, 8, 6, 1, 158, 3, 246, 53, - 25, 165, 8, 5, 1, 158, 3, 246, 53, 25, 165, 8, 6, 1, 158, 3, 246, 53, 25, - 237, 253, 8, 5, 1, 158, 3, 246, 53, 25, 237, 253, 8, 6, 1, 158, 3, 246, - 53, 25, 236, 116, 55, 8, 5, 1, 158, 3, 246, 53, 25, 236, 116, 55, 8, 6, - 1, 158, 3, 246, 53, 25, 208, 227, 8, 5, 1, 158, 3, 246, 53, 25, 208, 227, - 8, 6, 1, 158, 3, 246, 53, 25, 70, 56, 8, 5, 1, 158, 3, 246, 53, 25, 70, - 56, 8, 6, 1, 158, 3, 236, 54, 25, 165, 8, 5, 1, 158, 3, 236, 54, 25, 165, - 8, 6, 1, 158, 3, 236, 54, 25, 237, 253, 8, 5, 1, 158, 3, 236, 54, 25, - 237, 253, 8, 6, 1, 158, 3, 236, 54, 25, 236, 116, 55, 8, 5, 1, 158, 3, - 236, 54, 25, 236, 116, 55, 8, 6, 1, 158, 3, 236, 54, 25, 208, 227, 8, 5, - 1, 158, 3, 236, 54, 25, 208, 227, 8, 6, 1, 158, 3, 236, 54, 25, 70, 56, - 8, 5, 1, 158, 3, 236, 54, 25, 70, 56, 8, 6, 1, 106, 3, 70, 56, 8, 5, 1, - 106, 3, 70, 56, 8, 6, 1, 106, 3, 236, 116, 55, 8, 5, 1, 106, 3, 236, 116, - 55, 8, 6, 1, 106, 3, 236, 54, 25, 165, 8, 5, 1, 106, 3, 236, 54, 25, 165, - 8, 6, 1, 106, 3, 236, 54, 25, 237, 253, 8, 5, 1, 106, 3, 236, 54, 25, - 237, 253, 8, 6, 1, 106, 3, 236, 54, 25, 236, 116, 55, 8, 5, 1, 106, 3, - 236, 54, 25, 236, 116, 55, 8, 6, 1, 106, 3, 236, 54, 25, 208, 227, 8, 5, - 1, 106, 3, 236, 54, 25, 208, 227, 8, 6, 1, 106, 3, 236, 54, 25, 70, 56, - 8, 5, 1, 106, 3, 236, 54, 25, 70, 56, 8, 6, 1, 203, 125, 3, 237, 253, 8, - 5, 1, 203, 125, 3, 237, 253, 8, 6, 1, 203, 125, 3, 70, 56, 8, 5, 1, 203, - 125, 3, 70, 56, 8, 6, 1, 203, 125, 3, 236, 116, 55, 8, 5, 1, 203, 125, 3, - 236, 116, 55, 8, 6, 1, 203, 125, 3, 208, 227, 8, 5, 1, 203, 125, 3, 208, - 227, 8, 6, 1, 224, 147, 227, 78, 8, 5, 1, 224, 147, 227, 78, 8, 6, 1, - 224, 147, 206, 164, 8, 5, 1, 224, 147, 206, 164, 8, 6, 1, 203, 125, 3, - 227, 14, 8, 5, 1, 203, 125, 3, 227, 14, 30, 5, 1, 251, 3, 3, 217, 195, - 30, 5, 1, 251, 3, 3, 244, 141, 30, 5, 1, 251, 3, 3, 217, 196, 25, 206, - 70, 30, 5, 1, 251, 3, 3, 244, 142, 25, 206, 70, 30, 5, 1, 251, 3, 3, 217, - 196, 25, 219, 189, 30, 5, 1, 251, 3, 3, 244, 142, 25, 219, 189, 30, 5, 1, - 251, 3, 3, 217, 196, 25, 218, 239, 30, 5, 1, 251, 3, 3, 244, 142, 25, - 218, 239, 30, 6, 1, 251, 3, 3, 217, 195, 30, 6, 1, 251, 3, 3, 244, 141, - 30, 6, 1, 251, 3, 3, 217, 196, 25, 206, 70, 30, 6, 1, 251, 3, 3, 244, - 142, 25, 206, 70, 30, 6, 1, 251, 3, 3, 217, 196, 25, 219, 189, 30, 6, 1, - 251, 3, 3, 244, 142, 25, 219, 189, 30, 6, 1, 251, 3, 3, 217, 196, 25, - 218, 239, 30, 6, 1, 251, 3, 3, 244, 142, 25, 218, 239, 30, 5, 1, 241, 38, - 3, 217, 195, 30, 5, 1, 241, 38, 3, 244, 141, 30, 5, 1, 241, 38, 3, 217, - 196, 25, 206, 70, 30, 5, 1, 241, 38, 3, 244, 142, 25, 206, 70, 30, 5, 1, - 241, 38, 3, 217, 196, 25, 219, 189, 30, 5, 1, 241, 38, 3, 244, 142, 25, - 219, 189, 30, 6, 1, 241, 38, 3, 217, 195, 30, 6, 1, 241, 38, 3, 244, 141, - 30, 6, 1, 241, 38, 3, 217, 196, 25, 206, 70, 30, 6, 1, 241, 38, 3, 244, - 142, 25, 206, 70, 30, 6, 1, 241, 38, 3, 217, 196, 25, 219, 189, 30, 6, 1, - 241, 38, 3, 244, 142, 25, 219, 189, 30, 5, 1, 240, 249, 3, 217, 195, 30, - 5, 1, 240, 249, 3, 244, 141, 30, 5, 1, 240, 249, 3, 217, 196, 25, 206, - 70, 30, 5, 1, 240, 249, 3, 244, 142, 25, 206, 70, 30, 5, 1, 240, 249, 3, - 217, 196, 25, 219, 189, 30, 5, 1, 240, 249, 3, 244, 142, 25, 219, 189, - 30, 5, 1, 240, 249, 3, 217, 196, 25, 218, 239, 30, 5, 1, 240, 249, 3, - 244, 142, 25, 218, 239, 30, 6, 1, 240, 249, 3, 217, 195, 30, 6, 1, 240, - 249, 3, 244, 141, 30, 6, 1, 240, 249, 3, 217, 196, 25, 206, 70, 30, 6, 1, - 240, 249, 3, 244, 142, 25, 206, 70, 30, 6, 1, 240, 249, 3, 217, 196, 25, - 219, 189, 30, 6, 1, 240, 249, 3, 244, 142, 25, 219, 189, 30, 6, 1, 240, - 249, 3, 217, 196, 25, 218, 239, 30, 6, 1, 240, 249, 3, 244, 142, 25, 218, - 239, 30, 5, 1, 230, 231, 3, 217, 195, 30, 5, 1, 230, 231, 3, 244, 141, - 30, 5, 1, 230, 231, 3, 217, 196, 25, 206, 70, 30, 5, 1, 230, 231, 3, 244, - 142, 25, 206, 70, 30, 5, 1, 230, 231, 3, 217, 196, 25, 219, 189, 30, 5, - 1, 230, 231, 3, 244, 142, 25, 219, 189, 30, 5, 1, 230, 231, 3, 217, 196, - 25, 218, 239, 30, 5, 1, 230, 231, 3, 244, 142, 25, 218, 239, 30, 6, 1, - 230, 231, 3, 217, 195, 30, 6, 1, 230, 231, 3, 244, 141, 30, 6, 1, 230, - 231, 3, 217, 196, 25, 206, 70, 30, 6, 1, 230, 231, 3, 244, 142, 25, 206, - 70, 30, 6, 1, 230, 231, 3, 217, 196, 25, 219, 189, 30, 6, 1, 230, 231, 3, - 244, 142, 25, 219, 189, 30, 6, 1, 230, 231, 3, 217, 196, 25, 218, 239, - 30, 6, 1, 230, 231, 3, 244, 142, 25, 218, 239, 30, 5, 1, 220, 35, 3, 217, - 195, 30, 5, 1, 220, 35, 3, 244, 141, 30, 5, 1, 220, 35, 3, 217, 196, 25, - 206, 70, 30, 5, 1, 220, 35, 3, 244, 142, 25, 206, 70, 30, 5, 1, 220, 35, - 3, 217, 196, 25, 219, 189, 30, 5, 1, 220, 35, 3, 244, 142, 25, 219, 189, - 30, 6, 1, 220, 35, 3, 217, 195, 30, 6, 1, 220, 35, 3, 244, 141, 30, 6, 1, - 220, 35, 3, 217, 196, 25, 206, 70, 30, 6, 1, 220, 35, 3, 244, 142, 25, - 206, 70, 30, 6, 1, 220, 35, 3, 217, 196, 25, 219, 189, 30, 6, 1, 220, 35, - 3, 244, 142, 25, 219, 189, 30, 5, 1, 206, 217, 3, 217, 195, 30, 5, 1, - 206, 217, 3, 244, 141, 30, 5, 1, 206, 217, 3, 217, 196, 25, 206, 70, 30, - 5, 1, 206, 217, 3, 244, 142, 25, 206, 70, 30, 5, 1, 206, 217, 3, 217, - 196, 25, 219, 189, 30, 5, 1, 206, 217, 3, 244, 142, 25, 219, 189, 30, 5, - 1, 206, 217, 3, 217, 196, 25, 218, 239, 30, 5, 1, 206, 217, 3, 244, 142, - 25, 218, 239, 30, 6, 1, 206, 217, 3, 244, 141, 30, 6, 1, 206, 217, 3, - 244, 142, 25, 206, 70, 30, 6, 1, 206, 217, 3, 244, 142, 25, 219, 189, 30, - 6, 1, 206, 217, 3, 244, 142, 25, 218, 239, 30, 5, 1, 220, 37, 3, 217, - 195, 30, 5, 1, 220, 37, 3, 244, 141, 30, 5, 1, 220, 37, 3, 217, 196, 25, - 206, 70, 30, 5, 1, 220, 37, 3, 244, 142, 25, 206, 70, 30, 5, 1, 220, 37, - 3, 217, 196, 25, 219, 189, 30, 5, 1, 220, 37, 3, 244, 142, 25, 219, 189, - 30, 5, 1, 220, 37, 3, 217, 196, 25, 218, 239, 30, 5, 1, 220, 37, 3, 244, - 142, 25, 218, 239, 30, 6, 1, 220, 37, 3, 217, 195, 30, 6, 1, 220, 37, 3, - 244, 141, 30, 6, 1, 220, 37, 3, 217, 196, 25, 206, 70, 30, 6, 1, 220, 37, - 3, 244, 142, 25, 206, 70, 30, 6, 1, 220, 37, 3, 217, 196, 25, 219, 189, - 30, 6, 1, 220, 37, 3, 244, 142, 25, 219, 189, 30, 6, 1, 220, 37, 3, 217, - 196, 25, 218, 239, 30, 6, 1, 220, 37, 3, 244, 142, 25, 218, 239, 30, 5, - 1, 251, 3, 3, 206, 70, 30, 5, 1, 251, 3, 3, 219, 189, 30, 5, 1, 241, 38, - 3, 206, 70, 30, 5, 1, 241, 38, 3, 219, 189, 30, 5, 1, 240, 249, 3, 206, - 70, 30, 5, 1, 240, 249, 3, 219, 189, 30, 5, 1, 230, 231, 3, 206, 70, 30, - 5, 1, 230, 231, 3, 219, 189, 30, 5, 1, 220, 35, 3, 206, 70, 30, 5, 1, - 220, 35, 3, 219, 189, 30, 5, 1, 206, 217, 3, 206, 70, 30, 5, 1, 206, 217, - 3, 219, 189, 30, 5, 1, 220, 37, 3, 206, 70, 30, 5, 1, 220, 37, 3, 219, - 189, 30, 5, 1, 251, 3, 3, 217, 196, 25, 202, 221, 30, 5, 1, 251, 3, 3, - 244, 142, 25, 202, 221, 30, 5, 1, 251, 3, 3, 217, 196, 25, 206, 71, 25, - 202, 221, 30, 5, 1, 251, 3, 3, 244, 142, 25, 206, 71, 25, 202, 221, 30, - 5, 1, 251, 3, 3, 217, 196, 25, 219, 190, 25, 202, 221, 30, 5, 1, 251, 3, - 3, 244, 142, 25, 219, 190, 25, 202, 221, 30, 5, 1, 251, 3, 3, 217, 196, - 25, 218, 240, 25, 202, 221, 30, 5, 1, 251, 3, 3, 244, 142, 25, 218, 240, - 25, 202, 221, 30, 6, 1, 251, 3, 3, 217, 196, 25, 217, 209, 30, 6, 1, 251, - 3, 3, 244, 142, 25, 217, 209, 30, 6, 1, 251, 3, 3, 217, 196, 25, 206, 71, - 25, 217, 209, 30, 6, 1, 251, 3, 3, 244, 142, 25, 206, 71, 25, 217, 209, - 30, 6, 1, 251, 3, 3, 217, 196, 25, 219, 190, 25, 217, 209, 30, 6, 1, 251, - 3, 3, 244, 142, 25, 219, 190, 25, 217, 209, 30, 6, 1, 251, 3, 3, 217, - 196, 25, 218, 240, 25, 217, 209, 30, 6, 1, 251, 3, 3, 244, 142, 25, 218, - 240, 25, 217, 209, 30, 5, 1, 240, 249, 3, 217, 196, 25, 202, 221, 30, 5, - 1, 240, 249, 3, 244, 142, 25, 202, 221, 30, 5, 1, 240, 249, 3, 217, 196, - 25, 206, 71, 25, 202, 221, 30, 5, 1, 240, 249, 3, 244, 142, 25, 206, 71, - 25, 202, 221, 30, 5, 1, 240, 249, 3, 217, 196, 25, 219, 190, 25, 202, - 221, 30, 5, 1, 240, 249, 3, 244, 142, 25, 219, 190, 25, 202, 221, 30, 5, - 1, 240, 249, 3, 217, 196, 25, 218, 240, 25, 202, 221, 30, 5, 1, 240, 249, - 3, 244, 142, 25, 218, 240, 25, 202, 221, 30, 6, 1, 240, 249, 3, 217, 196, - 25, 217, 209, 30, 6, 1, 240, 249, 3, 244, 142, 25, 217, 209, 30, 6, 1, - 240, 249, 3, 217, 196, 25, 206, 71, 25, 217, 209, 30, 6, 1, 240, 249, 3, - 244, 142, 25, 206, 71, 25, 217, 209, 30, 6, 1, 240, 249, 3, 217, 196, 25, - 219, 190, 25, 217, 209, 30, 6, 1, 240, 249, 3, 244, 142, 25, 219, 190, - 25, 217, 209, 30, 6, 1, 240, 249, 3, 217, 196, 25, 218, 240, 25, 217, - 209, 30, 6, 1, 240, 249, 3, 244, 142, 25, 218, 240, 25, 217, 209, 30, 5, - 1, 220, 37, 3, 217, 196, 25, 202, 221, 30, 5, 1, 220, 37, 3, 244, 142, - 25, 202, 221, 30, 5, 1, 220, 37, 3, 217, 196, 25, 206, 71, 25, 202, 221, - 30, 5, 1, 220, 37, 3, 244, 142, 25, 206, 71, 25, 202, 221, 30, 5, 1, 220, - 37, 3, 217, 196, 25, 219, 190, 25, 202, 221, 30, 5, 1, 220, 37, 3, 244, - 142, 25, 219, 190, 25, 202, 221, 30, 5, 1, 220, 37, 3, 217, 196, 25, 218, - 240, 25, 202, 221, 30, 5, 1, 220, 37, 3, 244, 142, 25, 218, 240, 25, 202, - 221, 30, 6, 1, 220, 37, 3, 217, 196, 25, 217, 209, 30, 6, 1, 220, 37, 3, - 244, 142, 25, 217, 209, 30, 6, 1, 220, 37, 3, 217, 196, 25, 206, 71, 25, - 217, 209, 30, 6, 1, 220, 37, 3, 244, 142, 25, 206, 71, 25, 217, 209, 30, - 6, 1, 220, 37, 3, 217, 196, 25, 219, 190, 25, 217, 209, 30, 6, 1, 220, - 37, 3, 244, 142, 25, 219, 190, 25, 217, 209, 30, 6, 1, 220, 37, 3, 217, - 196, 25, 218, 240, 25, 217, 209, 30, 6, 1, 220, 37, 3, 244, 142, 25, 218, - 240, 25, 217, 209, 30, 5, 1, 251, 3, 3, 205, 167, 30, 5, 1, 251, 3, 3, - 225, 170, 30, 5, 1, 251, 3, 3, 206, 71, 25, 202, 221, 30, 5, 1, 251, 3, - 3, 202, 221, 30, 5, 1, 251, 3, 3, 219, 190, 25, 202, 221, 30, 5, 1, 251, - 3, 3, 218, 239, 30, 5, 1, 251, 3, 3, 218, 240, 25, 202, 221, 30, 6, 1, - 251, 3, 3, 205, 167, 30, 6, 1, 251, 3, 3, 225, 170, 30, 6, 1, 251, 3, 3, - 206, 70, 30, 6, 1, 251, 3, 3, 219, 189, 30, 6, 1, 251, 3, 3, 217, 209, - 30, 228, 252, 30, 217, 209, 30, 217, 195, 30, 218, 239, 30, 243, 225, 25, - 218, 239, 30, 5, 1, 240, 249, 3, 206, 71, 25, 202, 221, 30, 5, 1, 240, - 249, 3, 202, 221, 30, 5, 1, 240, 249, 3, 219, 190, 25, 202, 221, 30, 5, - 1, 240, 249, 3, 218, 239, 30, 5, 1, 240, 249, 3, 218, 240, 25, 202, 221, - 30, 6, 1, 241, 38, 3, 206, 70, 30, 6, 1, 241, 38, 3, 219, 189, 30, 6, 1, - 240, 249, 3, 206, 70, 30, 6, 1, 240, 249, 3, 219, 189, 30, 6, 1, 240, - 249, 3, 217, 209, 30, 217, 196, 25, 206, 70, 30, 217, 196, 25, 219, 189, - 30, 217, 196, 25, 218, 239, 30, 5, 1, 230, 231, 3, 205, 167, 30, 5, 1, - 230, 231, 3, 225, 170, 30, 5, 1, 230, 231, 3, 243, 225, 25, 206, 70, 30, - 5, 1, 230, 231, 3, 243, 225, 25, 219, 189, 30, 5, 1, 230, 231, 3, 218, - 239, 30, 5, 1, 230, 231, 3, 243, 225, 25, 218, 239, 30, 6, 1, 230, 231, - 3, 205, 167, 30, 6, 1, 230, 231, 3, 225, 170, 30, 6, 1, 230, 231, 3, 206, - 70, 30, 6, 1, 230, 231, 3, 219, 189, 30, 244, 142, 25, 206, 70, 30, 244, - 142, 25, 219, 189, 30, 244, 142, 25, 218, 239, 30, 5, 1, 206, 217, 3, - 205, 167, 30, 5, 1, 206, 217, 3, 225, 170, 30, 5, 1, 206, 217, 3, 243, - 225, 25, 206, 70, 30, 5, 1, 206, 217, 3, 243, 225, 25, 219, 189, 30, 5, - 1, 216, 60, 3, 217, 195, 30, 5, 1, 216, 60, 3, 244, 141, 30, 5, 1, 206, - 217, 3, 218, 239, 30, 5, 1, 206, 217, 3, 243, 225, 25, 218, 239, 30, 6, - 1, 206, 217, 3, 205, 167, 30, 6, 1, 206, 217, 3, 225, 170, 30, 6, 1, 206, - 217, 3, 206, 70, 30, 6, 1, 206, 217, 3, 219, 189, 30, 6, 1, 216, 60, 3, - 244, 141, 30, 243, 225, 25, 206, 70, 30, 243, 225, 25, 219, 189, 30, 206, - 70, 30, 5, 1, 220, 37, 3, 206, 71, 25, 202, 221, 30, 5, 1, 220, 37, 3, - 202, 221, 30, 5, 1, 220, 37, 3, 219, 190, 25, 202, 221, 30, 5, 1, 220, - 37, 3, 218, 239, 30, 5, 1, 220, 37, 3, 218, 240, 25, 202, 221, 30, 6, 1, - 220, 35, 3, 206, 70, 30, 6, 1, 220, 35, 3, 219, 189, 30, 6, 1, 220, 37, - 3, 206, 70, 30, 6, 1, 220, 37, 3, 219, 189, 30, 6, 1, 220, 37, 3, 217, - 209, 30, 219, 189, 30, 244, 141, 241, 93, 217, 62, 241, 104, 217, 62, - 241, 93, 211, 228, 241, 104, 211, 228, 209, 28, 211, 228, 239, 145, 211, - 228, 212, 86, 211, 228, 240, 16, 211, 228, 217, 179, 211, 228, 209, 63, - 211, 228, 237, 146, 211, 228, 202, 85, 204, 24, 211, 228, 202, 85, 204, - 24, 221, 183, 202, 85, 204, 24, 230, 96, 227, 213, 82, 216, 7, 82, 235, - 220, 221, 184, 235, 220, 240, 16, 244, 144, 241, 93, 244, 144, 241, 104, - 244, 144, 236, 106, 142, 52, 80, 227, 114, 52, 124, 227, 114, 49, 212, - 120, 217, 31, 82, 50, 212, 120, 217, 31, 82, 212, 120, 226, 255, 217, 31, - 82, 212, 120, 236, 241, 217, 31, 82, 49, 52, 217, 31, 82, 50, 52, 217, - 31, 82, 52, 226, 255, 217, 31, 82, 52, 236, 241, 217, 31, 82, 244, 195, - 52, 244, 195, 247, 177, 208, 82, 247, 177, 118, 70, 227, 232, 120, 70, - 227, 232, 236, 106, 241, 108, 235, 218, 218, 62, 227, 115, 213, 130, 219, - 89, 213, 130, 227, 213, 241, 102, 216, 7, 241, 102, 218, 42, 243, 165, - 239, 157, 227, 213, 219, 196, 216, 7, 219, 196, 223, 73, 221, 190, 211, - 228, 218, 247, 224, 116, 54, 218, 247, 209, 153, 209, 37, 54, 217, 236, - 52, 217, 236, 208, 70, 217, 236, 216, 73, 217, 236, 216, 73, 52, 217, - 236, 216, 73, 208, 70, 217, 236, 247, 33, 212, 120, 227, 217, 250, 218, - 217, 31, 82, 212, 120, 216, 11, 250, 218, 217, 31, 82, 216, 134, 82, 52, - 240, 212, 82, 230, 247, 219, 198, 206, 243, 167, 208, 250, 247, 34, 231, - 8, 218, 62, 250, 57, 235, 221, 247, 177, 239, 138, 212, 57, 49, 51, 247, - 227, 3, 217, 41, 50, 51, 247, 227, 3, 217, 41, 52, 217, 47, 82, 217, 47, - 240, 212, 82, 240, 212, 217, 47, 82, 208, 203, 2, 240, 250, 216, 73, 218, - 126, 54, 62, 96, 247, 177, 62, 86, 247, 177, 124, 250, 59, 216, 73, 213, - 143, 246, 17, 206, 224, 120, 250, 58, 251, 18, 205, 243, 245, 231, 224, - 103, 54, 210, 153, 244, 144, 230, 239, 206, 243, 239, 198, 217, 179, 82, - 126, 70, 217, 178, 217, 58, 217, 236, 239, 147, 70, 217, 178, 239, 233, - 70, 217, 178, 120, 70, 217, 178, 239, 147, 70, 82, 242, 83, 245, 130, - 208, 81, 80, 239, 147, 243, 83, 225, 10, 13, 211, 228, 203, 238, 230, 96, - 239, 100, 250, 155, 230, 237, 208, 219, 230, 237, 213, 130, 230, 237, - 218, 76, 227, 213, 230, 207, 216, 7, 230, 207, 239, 245, 211, 18, 230, - 207, 218, 42, 243, 165, 230, 207, 231, 20, 210, 101, 210, 170, 251, 128, - 210, 101, 210, 170, 231, 20, 10, 239, 159, 213, 61, 251, 128, 10, 239, - 159, 213, 61, 223, 67, 17, 213, 62, 221, 186, 17, 213, 62, 210, 199, 202, - 84, 210, 199, 8, 5, 1, 75, 210, 199, 149, 210, 199, 170, 210, 199, 195, - 210, 199, 213, 111, 210, 199, 199, 210, 199, 222, 63, 210, 199, 91, 54, - 210, 199, 224, 102, 210, 199, 241, 35, 54, 210, 199, 49, 219, 76, 210, - 199, 50, 219, 76, 210, 199, 8, 5, 1, 223, 163, 210, 246, 202, 84, 210, - 246, 105, 210, 246, 108, 210, 246, 147, 210, 246, 149, 210, 246, 170, - 210, 246, 195, 210, 246, 213, 111, 210, 246, 199, 210, 246, 222, 63, 210, - 246, 91, 54, 210, 246, 224, 102, 210, 246, 241, 35, 54, 210, 246, 49, - 219, 76, 210, 246, 50, 219, 76, 8, 210, 246, 5, 1, 63, 8, 210, 246, 5, 1, - 74, 8, 210, 246, 5, 1, 78, 8, 210, 246, 5, 1, 203, 196, 8, 210, 246, 5, - 1, 214, 192, 8, 210, 246, 5, 1, 237, 171, 8, 210, 246, 5, 1, 230, 54, 8, - 210, 246, 5, 1, 159, 8, 210, 246, 5, 1, 226, 185, 8, 210, 246, 5, 1, 223, - 163, 8, 210, 246, 5, 1, 219, 184, 8, 210, 246, 5, 1, 194, 8, 210, 246, 5, - 1, 210, 69, 240, 229, 54, 245, 243, 54, 245, 115, 54, 239, 128, 239, 132, - 54, 227, 94, 54, 224, 117, 54, 223, 90, 54, 218, 224, 54, 215, 120, 54, - 203, 246, 54, 222, 214, 213, 29, 54, 243, 92, 54, 240, 230, 54, 229, 79, - 54, 207, 196, 54, 242, 66, 54, 238, 166, 219, 2, 54, 218, 221, 54, 237, - 225, 54, 250, 24, 54, 236, 32, 54, 246, 233, 54, 227, 84, 208, 125, 54, - 211, 209, 54, 209, 150, 54, 231, 34, 215, 120, 54, 207, 177, 227, 94, 54, - 221, 173, 131, 54, 225, 120, 54, 215, 142, 54, 228, 4, 54, 39, 49, 237, - 87, 55, 39, 50, 237, 87, 55, 39, 163, 80, 227, 115, 219, 199, 39, 212, - 228, 80, 227, 115, 219, 199, 39, 250, 194, 53, 55, 39, 246, 18, 53, 55, - 39, 49, 53, 55, 39, 50, 53, 55, 39, 215, 253, 219, 199, 39, 246, 18, 215, - 253, 219, 199, 39, 250, 194, 215, 253, 219, 199, 39, 126, 187, 55, 39, - 239, 147, 187, 55, 39, 241, 88, 246, 61, 39, 241, 88, 211, 177, 39, 241, - 88, 243, 221, 39, 241, 88, 246, 62, 249, 20, 39, 49, 50, 53, 55, 39, 241, - 88, 214, 184, 39, 241, 88, 229, 147, 39, 241, 88, 206, 214, 218, 59, 208, - 85, 39, 216, 74, 212, 1, 219, 199, 39, 52, 80, 211, 32, 219, 199, 39, - 250, 204, 97, 39, 208, 70, 206, 245, 39, 204, 27, 247, 208, 55, 39, 96, - 53, 219, 199, 39, 163, 52, 212, 1, 219, 199, 39, 86, 237, 87, 3, 150, - 242, 68, 39, 96, 237, 87, 3, 150, 242, 68, 39, 49, 53, 56, 39, 50, 53, - 56, 39, 250, 60, 55, 251, 134, 220, 69, 251, 118, 208, 173, 209, 93, 210, - 255, 169, 6, 247, 125, 244, 55, 246, 223, 246, 218, 227, 115, 97, 247, - 35, 220, 69, 247, 84, 206, 254, 240, 231, 245, 200, 214, 181, 244, 55, - 240, 90, 132, 5, 239, 75, 132, 6, 237, 171, 248, 41, 6, 237, 171, 169, 6, - 237, 171, 218, 93, 245, 200, 218, 93, 245, 201, 115, 120, 218, 167, 132, - 6, 75, 248, 41, 6, 75, 132, 6, 159, 132, 5, 159, 228, 131, 66, 248, 231, - 97, 169, 6, 223, 163, 221, 42, 54, 211, 241, 216, 146, 245, 168, 132, 6, - 219, 184, 169, 6, 219, 184, 169, 6, 217, 134, 132, 6, 146, 248, 41, 6, - 146, 169, 6, 146, 217, 243, 209, 241, 216, 86, 213, 122, 82, 209, 162, - 54, 208, 115, 131, 54, 206, 39, 169, 6, 202, 159, 219, 215, 54, 220, 59, - 54, 230, 239, 220, 59, 54, 248, 41, 6, 202, 159, 207, 174, 30, 5, 1, 230, - 230, 229, 188, 54, 250, 213, 54, 132, 6, 249, 255, 248, 41, 6, 247, 125, - 240, 255, 97, 132, 5, 74, 132, 6, 74, 132, 6, 240, 174, 207, 174, 6, 240, - 174, 132, 6, 226, 185, 132, 5, 78, 137, 97, 248, 109, 97, 238, 68, 97, - 244, 179, 97, 231, 25, 211, 239, 215, 198, 6, 217, 134, 240, 93, 54, 169, - 5, 218, 167, 169, 5, 238, 235, 169, 6, 238, 235, 169, 6, 218, 167, 169, - 223, 162, 210, 217, 207, 174, 41, 6, 239, 75, 207, 174, 41, 6, 159, 216, - 73, 41, 6, 159, 207, 174, 41, 6, 203, 124, 169, 37, 6, 245, 51, 169, 37, - 5, 245, 51, 169, 37, 5, 74, 169, 37, 5, 75, 169, 37, 5, 230, 184, 217, - 212, 227, 114, 207, 174, 250, 235, 218, 247, 54, 251, 41, 207, 174, 5, - 240, 174, 16, 35, 214, 252, 211, 239, 204, 161, 239, 138, 118, 213, 107, - 204, 161, 239, 138, 118, 222, 57, 204, 161, 239, 138, 118, 209, 143, 204, - 161, 239, 138, 118, 209, 60, 204, 161, 239, 138, 120, 209, 57, 204, 161, - 239, 138, 118, 240, 21, 204, 161, 239, 138, 120, 240, 20, 204, 161, 239, - 138, 126, 240, 20, 204, 161, 239, 138, 239, 147, 240, 20, 204, 161, 239, - 138, 118, 212, 78, 204, 161, 239, 138, 239, 233, 212, 76, 204, 161, 239, - 138, 118, 241, 138, 204, 161, 239, 138, 126, 241, 136, 204, 161, 239, - 138, 239, 233, 241, 136, 204, 161, 239, 138, 213, 112, 241, 136, 239, - 138, 221, 43, 105, 215, 210, 221, 44, 105, 215, 210, 221, 44, 108, 215, - 210, 221, 44, 147, 215, 210, 221, 44, 149, 215, 210, 221, 44, 170, 215, - 210, 221, 44, 195, 215, 210, 221, 44, 213, 111, 215, 210, 221, 44, 199, - 215, 210, 221, 44, 222, 63, 215, 210, 221, 44, 209, 152, 215, 210, 221, - 44, 241, 112, 215, 210, 221, 44, 207, 154, 215, 210, 221, 44, 240, 18, - 215, 210, 221, 44, 118, 236, 11, 215, 210, 221, 44, 239, 233, 236, 11, - 215, 210, 221, 44, 118, 209, 36, 5, 215, 210, 221, 44, 105, 5, 215, 210, - 221, 44, 108, 5, 215, 210, 221, 44, 147, 5, 215, 210, 221, 44, 149, 5, - 215, 210, 221, 44, 170, 5, 215, 210, 221, 44, 195, 5, 215, 210, 221, 44, - 213, 111, 5, 215, 210, 221, 44, 199, 5, 215, 210, 221, 44, 222, 63, 5, - 215, 210, 221, 44, 209, 152, 5, 215, 210, 221, 44, 241, 112, 5, 215, 210, - 221, 44, 207, 154, 5, 215, 210, 221, 44, 240, 18, 5, 215, 210, 221, 44, - 118, 236, 11, 5, 215, 210, 221, 44, 239, 233, 236, 11, 5, 215, 210, 221, - 44, 118, 209, 36, 215, 210, 221, 44, 118, 209, 37, 247, 126, 245, 51, - 215, 210, 221, 44, 239, 233, 209, 36, 215, 210, 221, 44, 209, 153, 209, - 36, 215, 210, 221, 44, 216, 73, 118, 236, 11, 8, 5, 1, 216, 73, 247, 125, - 215, 210, 221, 44, 212, 88, 227, 255, 18, 215, 210, 221, 44, 240, 19, - 241, 182, 18, 215, 210, 221, 44, 240, 19, 209, 36, 215, 210, 221, 44, - 118, 236, 12, 209, 36, 204, 161, 239, 138, 202, 85, 209, 57, 207, 174, - 17, 108, 207, 174, 17, 147, 96, 47, 177, 47, 86, 47, 183, 47, 49, 50, 47, - 112, 121, 47, 153, 204, 46, 47, 153, 241, 176, 47, 211, 238, 241, 176, - 47, 211, 238, 204, 46, 47, 96, 53, 3, 95, 86, 53, 3, 95, 96, 204, 76, 47, - 86, 204, 76, 47, 96, 120, 237, 62, 47, 177, 120, 237, 62, 47, 86, 120, - 237, 62, 47, 183, 120, 237, 62, 47, 96, 53, 3, 209, 248, 86, 53, 3, 209, - 248, 96, 53, 239, 120, 142, 177, 53, 239, 120, 142, 86, 53, 239, 120, - 142, 183, 53, 239, 120, 142, 112, 121, 53, 3, 248, 218, 96, 53, 3, 113, - 86, 53, 3, 113, 96, 53, 3, 227, 14, 86, 53, 3, 227, 14, 49, 50, 204, 76, - 47, 49, 50, 53, 3, 95, 183, 202, 30, 47, 177, 53, 3, 208, 211, 227, 212, - 177, 53, 3, 208, 211, 216, 5, 183, 53, 3, 208, 211, 227, 212, 183, 53, 3, - 208, 211, 216, 5, 86, 53, 3, 245, 166, 242, 68, 183, 53, 3, 245, 166, - 227, 212, 250, 194, 208, 145, 213, 146, 47, 246, 18, 208, 145, 213, 146, - 47, 153, 204, 46, 53, 208, 173, 163, 142, 96, 53, 208, 173, 248, 231, - 115, 86, 53, 208, 173, 142, 250, 194, 171, 246, 62, 47, 246, 18, 171, - 246, 62, 47, 96, 237, 87, 3, 150, 206, 212, 96, 237, 87, 3, 150, 242, 68, - 177, 237, 87, 3, 150, 216, 5, 177, 237, 87, 3, 150, 227, 212, 86, 237, - 87, 3, 150, 206, 212, 86, 237, 87, 3, 150, 242, 68, 183, 237, 87, 3, 150, - 216, 5, 183, 237, 87, 3, 150, 227, 212, 86, 53, 115, 96, 47, 177, 53, 96, - 76, 183, 47, 96, 53, 115, 86, 47, 96, 219, 146, 250, 91, 177, 219, 146, - 250, 91, 86, 219, 146, 250, 91, 183, 219, 146, 250, 91, 96, 237, 87, 115, - 86, 237, 86, 86, 237, 87, 115, 96, 237, 86, 96, 52, 53, 3, 95, 49, 50, - 52, 53, 3, 95, 86, 52, 53, 3, 95, 96, 52, 47, 177, 52, 47, 86, 52, 47, - 183, 52, 47, 49, 50, 52, 47, 112, 121, 52, 47, 153, 204, 46, 52, 47, 153, - 241, 176, 52, 47, 211, 238, 241, 176, 52, 47, 211, 238, 204, 46, 52, 47, - 96, 208, 70, 47, 86, 208, 70, 47, 96, 211, 171, 47, 86, 211, 171, 47, - 177, 53, 3, 52, 95, 183, 53, 3, 52, 95, 96, 244, 143, 47, 177, 244, 143, - 47, 86, 244, 143, 47, 183, 244, 143, 47, 96, 53, 208, 173, 142, 86, 53, - 208, 173, 142, 96, 61, 47, 177, 61, 47, 86, 61, 47, 183, 61, 47, 177, 61, - 53, 239, 120, 142, 177, 61, 53, 220, 32, 219, 26, 177, 61, 53, 220, 32, - 219, 27, 3, 236, 106, 142, 177, 61, 53, 220, 32, 219, 27, 3, 80, 142, - 177, 61, 52, 47, 177, 61, 52, 53, 220, 32, 219, 26, 86, 61, 53, 239, 120, - 204, 99, 153, 204, 46, 53, 208, 173, 245, 165, 211, 238, 241, 176, 53, - 208, 173, 245, 165, 112, 121, 61, 47, 50, 53, 3, 5, 246, 61, 183, 53, 96, - 76, 177, 47, 126, 86, 250, 91, 96, 53, 3, 80, 95, 86, 53, 3, 80, 95, 49, - 50, 53, 3, 80, 95, 96, 53, 3, 52, 80, 95, 86, 53, 3, 52, 80, 95, 49, 50, - 53, 3, 52, 80, 95, 96, 220, 6, 47, 86, 220, 6, 47, 49, 50, 220, 6, 47, - 35, 251, 14, 245, 228, 219, 69, 243, 205, 209, 83, 240, 207, 209, 83, - 243, 104, 221, 166, 240, 208, 241, 94, 213, 117, 231, 38, 223, 101, 241, - 115, 220, 69, 221, 166, 250, 232, 241, 115, 220, 69, 5, 241, 115, 220, - 69, 245, 194, 250, 82, 224, 244, 243, 104, 221, 166, 245, 196, 250, 82, - 224, 244, 5, 245, 194, 250, 82, 224, 244, 241, 84, 76, 217, 214, 223, - 162, 217, 224, 223, 162, 245, 171, 223, 162, 210, 217, 224, 103, 54, 224, - 101, 54, 70, 218, 76, 243, 137, 212, 57, 213, 118, 224, 102, 250, 60, - 219, 254, 215, 253, 219, 254, 247, 178, 219, 254, 51, 215, 204, 245, 106, - 215, 204, 239, 140, 215, 204, 217, 210, 135, 231, 27, 50, 250, 217, 250, - 217, 225, 17, 250, 217, 211, 208, 250, 217, 243, 139, 243, 104, 221, 166, - 243, 143, 219, 82, 135, 221, 166, 219, 82, 135, 227, 37, 250, 226, 227, - 37, 219, 244, 230, 244, 206, 237, 231, 2, 52, 231, 2, 208, 70, 231, 2, - 245, 188, 231, 2, 210, 189, 231, 2, 205, 178, 231, 2, 246, 18, 231, 2, - 246, 18, 245, 188, 231, 2, 250, 194, 245, 188, 231, 2, 209, 82, 248, 152, - 216, 168, 217, 211, 70, 224, 102, 240, 215, 238, 172, 217, 211, 236, 121, - 208, 228, 219, 254, 216, 73, 208, 227, 230, 239, 227, 241, 194, 212, 122, - 204, 75, 203, 226, 217, 224, 221, 166, 208, 227, 224, 103, 208, 227, 250, - 53, 156, 135, 221, 166, 250, 53, 156, 135, 250, 151, 156, 135, 250, 151, - 247, 148, 221, 166, 251, 127, 156, 135, 222, 232, 250, 151, 221, 175, - 251, 127, 156, 135, 251, 7, 156, 135, 221, 166, 251, 7, 156, 135, 251, 7, - 156, 219, 245, 156, 135, 208, 70, 208, 227, 251, 15, 156, 135, 241, 30, - 135, 238, 171, 241, 30, 135, 243, 206, 248, 103, 250, 153, 209, 93, 227, - 122, 238, 171, 156, 135, 250, 151, 156, 208, 173, 219, 245, 209, 93, 231, - 65, 220, 69, 231, 65, 76, 219, 245, 250, 151, 156, 135, 245, 243, 241, - 34, 241, 35, 245, 242, 215, 253, 231, 50, 156, 135, 215, 253, 156, 135, - 245, 159, 135, 240, 254, 241, 33, 135, 211, 95, 241, 34, 244, 38, 156, - 135, 156, 208, 173, 247, 137, 244, 56, 225, 17, 247, 136, 217, 45, 156, - 135, 221, 166, 156, 135, 235, 154, 135, 221, 166, 235, 154, 135, 211, 39, - 241, 30, 135, 227, 179, 219, 245, 156, 135, 237, 247, 219, 245, 156, 135, - 227, 179, 115, 156, 135, 237, 247, 115, 156, 135, 227, 179, 247, 148, - 221, 166, 156, 135, 237, 247, 247, 148, 221, 166, 156, 135, 223, 240, - 227, 178, 223, 240, 237, 246, 248, 103, 221, 166, 241, 30, 135, 221, 166, - 227, 178, 221, 166, 237, 246, 222, 232, 227, 179, 221, 175, 156, 135, - 222, 232, 237, 247, 221, 175, 156, 135, 227, 179, 219, 245, 241, 30, 135, - 237, 247, 219, 245, 241, 30, 135, 222, 232, 227, 179, 221, 175, 241, 30, - 135, 222, 232, 237, 247, 221, 175, 241, 30, 135, 227, 179, 219, 245, 237, - 246, 237, 247, 219, 245, 227, 178, 222, 232, 227, 179, 221, 175, 237, - 246, 222, 232, 237, 247, 221, 175, 227, 178, 217, 249, 210, 236, 217, - 250, 219, 245, 156, 135, 210, 237, 219, 245, 156, 135, 217, 250, 219, - 245, 241, 30, 135, 210, 237, 219, 245, 241, 30, 135, 243, 104, 221, 166, - 217, 252, 243, 104, 221, 166, 210, 238, 210, 245, 220, 69, 210, 198, 220, - 69, 221, 166, 34, 210, 245, 220, 69, 221, 166, 34, 210, 198, 220, 69, - 210, 245, 76, 219, 245, 156, 135, 210, 198, 76, 219, 245, 156, 135, 222, - 232, 34, 210, 245, 76, 221, 175, 156, 135, 222, 232, 34, 210, 198, 76, - 221, 175, 156, 135, 210, 245, 76, 3, 221, 166, 156, 135, 210, 198, 76, 3, - 221, 166, 156, 135, 223, 221, 223, 222, 223, 223, 223, 222, 206, 237, 51, - 231, 65, 220, 69, 51, 219, 236, 220, 69, 51, 231, 65, 76, 219, 245, 156, - 135, 51, 219, 236, 76, 219, 245, 156, 135, 51, 247, 48, 51, 245, 99, 43, - 218, 76, 43, 224, 102, 43, 208, 219, 43, 243, 137, 212, 57, 43, 70, 219, - 254, 43, 215, 253, 219, 254, 43, 250, 60, 219, 254, 43, 241, 34, 43, 244, - 144, 103, 218, 76, 103, 224, 102, 103, 208, 219, 103, 70, 219, 254, 50, - 210, 3, 49, 210, 3, 121, 210, 3, 112, 210, 3, 250, 63, 224, 77, 208, 49, - 239, 165, 208, 70, 80, 248, 231, 50, 207, 173, 52, 80, 248, 231, 52, 50, - 207, 173, 243, 104, 221, 166, 217, 205, 221, 166, 208, 49, 243, 104, 221, - 166, 239, 166, 222, 234, 52, 80, 248, 231, 52, 50, 207, 173, 217, 250, - 206, 248, 216, 117, 210, 237, 206, 248, 216, 117, 221, 172, 211, 2, 220, - 69, 245, 194, 250, 82, 221, 172, 211, 1, 221, 172, 211, 2, 76, 219, 245, - 156, 135, 245, 194, 250, 82, 221, 172, 211, 2, 219, 245, 156, 135, 219, - 236, 220, 69, 231, 65, 220, 69, 223, 228, 237, 24, 245, 205, 225, 69, - 230, 255, 203, 156, 223, 81, 221, 174, 50, 250, 218, 3, 250, 128, 50, - 208, 85, 223, 162, 227, 37, 250, 226, 223, 162, 227, 37, 219, 244, 223, - 162, 230, 244, 223, 162, 206, 237, 243, 222, 219, 254, 70, 219, 254, 211, - 95, 219, 254, 243, 137, 208, 219, 247, 234, 49, 221, 172, 240, 92, 213, - 142, 217, 224, 50, 221, 172, 240, 92, 213, 142, 217, 224, 49, 213, 142, - 217, 224, 50, 213, 142, 217, 224, 216, 73, 208, 228, 241, 34, 245, 93, - 227, 37, 219, 244, 245, 93, 227, 37, 250, 226, 52, 210, 244, 52, 210, - 197, 52, 230, 244, 52, 206, 237, 218, 103, 156, 25, 219, 82, 135, 227, - 179, 3, 243, 85, 237, 247, 3, 243, 85, 205, 242, 223, 240, 227, 178, 205, - 242, 223, 240, 237, 246, 227, 179, 156, 208, 173, 219, 245, 237, 246, - 237, 247, 156, 208, 173, 219, 245, 227, 178, 156, 208, 173, 219, 245, - 227, 178, 156, 208, 173, 219, 245, 237, 246, 156, 208, 173, 219, 245, - 217, 249, 156, 208, 173, 219, 245, 210, 236, 243, 104, 221, 166, 217, - 253, 219, 245, 241, 36, 243, 104, 221, 166, 210, 239, 219, 245, 241, 36, - 221, 166, 51, 231, 65, 76, 219, 245, 156, 135, 221, 166, 51, 219, 236, - 76, 219, 245, 156, 135, 51, 231, 65, 76, 219, 245, 221, 166, 156, 135, - 51, 219, 236, 76, 219, 245, 221, 166, 156, 135, 227, 179, 247, 148, 221, - 166, 241, 30, 135, 237, 247, 247, 148, 221, 166, 241, 30, 135, 217, 250, - 247, 148, 221, 166, 241, 30, 135, 210, 237, 247, 148, 221, 166, 241, 30, - 135, 221, 166, 221, 172, 211, 2, 220, 69, 243, 104, 221, 166, 245, 196, - 250, 82, 221, 172, 211, 1, 221, 166, 221, 172, 211, 2, 76, 219, 245, 156, - 135, 243, 104, 221, 166, 245, 196, 250, 82, 221, 172, 211, 2, 219, 245, - 241, 36, 80, 241, 108, 224, 146, 236, 106, 241, 108, 112, 50, 243, 228, - 241, 108, 121, 50, 243, 228, 241, 108, 241, 115, 76, 3, 163, 236, 106, - 95, 241, 115, 76, 3, 80, 248, 231, 250, 50, 241, 84, 76, 236, 106, 95, 5, - 241, 115, 76, 3, 80, 248, 231, 250, 50, 241, 84, 76, 236, 106, 95, 241, - 115, 76, 3, 70, 55, 241, 115, 76, 3, 219, 203, 5, 241, 115, 76, 3, 219, - 203, 241, 115, 76, 3, 206, 246, 241, 115, 76, 3, 120, 236, 106, 211, 19, - 245, 194, 3, 163, 236, 106, 95, 245, 194, 3, 80, 248, 231, 250, 50, 241, - 84, 76, 236, 106, 95, 5, 245, 194, 3, 80, 248, 231, 250, 50, 241, 84, 76, - 236, 106, 95, 245, 194, 3, 219, 203, 5, 245, 194, 3, 219, 203, 202, 160, - 221, 164, 249, 11, 224, 243, 243, 223, 54, 241, 117, 47, 236, 38, 112, - 250, 94, 121, 250, 94, 217, 218, 218, 227, 204, 72, 227, 114, 49, 246, - 226, 50, 246, 226, 49, 239, 204, 50, 239, 204, 247, 248, 50, 245, 132, - 247, 248, 49, 245, 132, 208, 145, 50, 245, 132, 208, 145, 49, 245, 132, - 216, 73, 221, 166, 54, 51, 226, 246, 250, 128, 214, 158, 214, 166, 209, - 162, 216, 147, 218, 34, 231, 31, 205, 218, 211, 177, 218, 97, 76, 230, - 254, 54, 207, 174, 221, 166, 54, 204, 82, 236, 40, 208, 145, 49, 245, - 165, 208, 145, 50, 245, 165, 247, 248, 49, 245, 165, 247, 248, 50, 245, - 165, 208, 145, 162, 231, 2, 247, 248, 162, 231, 2, 239, 115, 212, 31, - 112, 250, 95, 248, 104, 120, 236, 106, 248, 220, 219, 247, 229, 151, 241, - 26, 208, 173, 209, 93, 216, 16, 203, 197, 231, 50, 34, 216, 144, 247, - 233, 229, 149, 227, 217, 250, 218, 155, 216, 11, 250, 218, 155, 241, 26, - 208, 173, 209, 93, 227, 222, 248, 115, 215, 252, 245, 61, 251, 15, 250, - 103, 210, 100, 208, 130, 215, 125, 243, 185, 219, 237, 245, 209, 209, - 220, 212, 44, 245, 155, 245, 154, 250, 169, 239, 98, 16, 235, 203, 250, - 169, 239, 98, 16, 211, 169, 217, 62, 250, 169, 239, 98, 16, 217, 63, 241, - 36, 250, 169, 239, 98, 16, 217, 63, 243, 143, 250, 169, 239, 98, 16, 217, - 63, 243, 221, 250, 169, 239, 98, 16, 217, 63, 230, 88, 250, 169, 239, 98, - 16, 217, 63, 246, 61, 250, 169, 239, 98, 16, 246, 62, 211, 69, 250, 169, - 239, 98, 16, 246, 62, 230, 88, 250, 169, 239, 98, 16, 212, 58, 142, 250, - 169, 239, 98, 16, 249, 21, 142, 250, 169, 239, 98, 16, 217, 63, 212, 57, - 250, 169, 239, 98, 16, 217, 63, 249, 20, 250, 169, 239, 98, 16, 217, 63, - 227, 178, 250, 169, 239, 98, 16, 217, 63, 237, 246, 250, 169, 239, 98, - 16, 96, 206, 76, 250, 169, 239, 98, 16, 86, 206, 76, 250, 169, 239, 98, - 16, 217, 63, 96, 47, 250, 169, 239, 98, 16, 217, 63, 86, 47, 250, 169, - 239, 98, 16, 246, 62, 249, 20, 250, 169, 239, 98, 16, 121, 210, 4, 206, - 246, 250, 169, 239, 98, 16, 244, 38, 211, 69, 250, 169, 239, 98, 16, 217, - 63, 121, 247, 33, 250, 169, 239, 98, 16, 217, 63, 244, 37, 250, 169, 239, - 98, 16, 121, 210, 4, 230, 88, 250, 169, 239, 98, 16, 177, 206, 76, 250, - 169, 239, 98, 16, 217, 63, 177, 47, 250, 169, 239, 98, 16, 112, 210, 4, - 219, 203, 250, 169, 239, 98, 16, 244, 49, 211, 69, 250, 169, 239, 98, 16, - 217, 63, 112, 247, 33, 250, 169, 239, 98, 16, 217, 63, 244, 48, 250, 169, - 239, 98, 16, 112, 210, 4, 230, 88, 250, 169, 239, 98, 16, 183, 206, 76, - 250, 169, 239, 98, 16, 217, 63, 183, 47, 250, 169, 239, 98, 16, 217, 30, - 206, 246, 250, 169, 239, 98, 16, 244, 38, 206, 246, 250, 169, 239, 98, - 16, 243, 222, 206, 246, 250, 169, 239, 98, 16, 230, 89, 206, 246, 250, - 169, 239, 98, 16, 246, 62, 206, 246, 250, 169, 239, 98, 16, 112, 212, - 240, 230, 88, 250, 169, 239, 98, 16, 217, 30, 217, 62, 250, 169, 239, 98, - 16, 246, 62, 211, 94, 250, 169, 239, 98, 16, 217, 63, 245, 242, 250, 169, - 239, 98, 16, 112, 210, 4, 243, 231, 250, 169, 239, 98, 16, 244, 49, 243, - 231, 250, 169, 239, 98, 16, 211, 95, 243, 231, 250, 169, 239, 98, 16, - 230, 89, 243, 231, 250, 169, 239, 98, 16, 246, 62, 243, 231, 250, 169, - 239, 98, 16, 121, 212, 240, 211, 69, 250, 169, 239, 98, 16, 49, 212, 240, - 211, 69, 250, 169, 239, 98, 16, 208, 228, 243, 231, 250, 169, 239, 98, - 16, 237, 247, 243, 231, 250, 169, 239, 98, 16, 245, 234, 142, 250, 169, - 239, 98, 16, 244, 49, 208, 227, 250, 169, 239, 98, 16, 202, 29, 250, 169, - 239, 98, 16, 211, 70, 208, 227, 250, 169, 239, 98, 16, 213, 144, 206, - 246, 250, 169, 239, 98, 16, 217, 63, 221, 166, 241, 36, 250, 169, 239, - 98, 16, 217, 63, 217, 46, 250, 169, 239, 98, 16, 121, 247, 34, 208, 227, - 250, 169, 239, 98, 16, 112, 247, 34, 208, 227, 250, 169, 239, 98, 16, - 230, 230, 250, 169, 239, 98, 16, 216, 59, 250, 169, 239, 98, 16, 220, 36, - 250, 169, 239, 98, 16, 251, 3, 206, 246, 250, 169, 239, 98, 16, 241, 38, - 206, 246, 250, 169, 239, 98, 16, 230, 231, 206, 246, 250, 169, 239, 98, - 16, 220, 37, 206, 246, 250, 169, 239, 98, 16, 251, 2, 221, 166, 246, 169, - 82, 50, 250, 218, 3, 183, 202, 30, 47, 212, 210, 171, 247, 233, 248, 129, - 97, 80, 227, 115, 3, 101, 243, 85, 231, 8, 97, 245, 189, 206, 244, 97, - 243, 158, 206, 244, 97, 241, 96, 97, 245, 224, 97, 61, 51, 3, 246, 218, - 80, 227, 114, 241, 68, 97, 250, 250, 229, 152, 97, 237, 37, 97, 43, 236, - 106, 248, 231, 3, 221, 163, 43, 208, 86, 242, 70, 247, 203, 246, 62, 3, - 221, 169, 47, 206, 242, 97, 224, 40, 97, 235, 216, 97, 220, 7, 237, 170, - 97, 220, 7, 228, 129, 97, 219, 59, 97, 219, 58, 97, 243, 167, 245, 91, - 16, 239, 159, 108, 212, 5, 97, 250, 169, 239, 98, 16, 217, 62, 244, 68, - 213, 131, 229, 152, 97, 217, 238, 219, 153, 222, 208, 219, 153, 217, 234, - 214, 185, 97, 246, 33, 214, 185, 97, 49, 219, 77, 206, 221, 113, 49, 219, - 77, 240, 200, 49, 219, 77, 226, 251, 113, 50, 219, 77, 206, 221, 113, 50, - 219, 77, 240, 200, 50, 219, 77, 226, 251, 113, 49, 51, 247, 227, 206, - 221, 245, 165, 49, 51, 247, 227, 240, 200, 49, 51, 247, 227, 226, 251, - 245, 165, 50, 51, 247, 227, 206, 221, 245, 165, 50, 51, 247, 227, 240, - 200, 50, 51, 247, 227, 226, 251, 245, 165, 49, 245, 93, 247, 227, 206, - 221, 113, 49, 245, 93, 247, 227, 101, 218, 159, 49, 245, 93, 247, 227, - 226, 251, 113, 245, 93, 247, 227, 240, 200, 50, 245, 93, 247, 227, 206, - 221, 113, 50, 245, 93, 247, 227, 101, 218, 159, 50, 245, 93, 247, 227, - 226, 251, 113, 231, 3, 240, 200, 236, 106, 227, 115, 240, 200, 206, 221, - 49, 219, 245, 226, 251, 50, 245, 93, 247, 227, 214, 167, 206, 221, 50, - 219, 245, 226, 251, 49, 245, 93, 247, 227, 214, 167, 210, 218, 208, 144, - 210, 218, 247, 247, 208, 145, 51, 155, 247, 248, 51, 155, 247, 248, 51, - 247, 227, 115, 208, 145, 51, 155, 40, 16, 247, 247, 49, 80, 98, 227, 114, - 50, 80, 98, 227, 114, 236, 106, 214, 202, 227, 113, 236, 106, 214, 202, - 227, 112, 236, 106, 214, 202, 227, 111, 236, 106, 214, 202, 227, 110, - 244, 29, 16, 157, 80, 25, 208, 145, 216, 16, 244, 29, 16, 157, 80, 25, - 247, 248, 216, 16, 244, 29, 16, 157, 80, 3, 246, 61, 244, 29, 16, 157, - 121, 25, 236, 106, 3, 246, 61, 244, 29, 16, 157, 112, 25, 236, 106, 3, - 246, 61, 244, 29, 16, 157, 80, 3, 208, 85, 244, 29, 16, 157, 121, 25, - 236, 106, 3, 208, 85, 244, 29, 16, 157, 112, 25, 236, 106, 3, 208, 85, - 244, 29, 16, 157, 80, 25, 204, 75, 244, 29, 16, 157, 121, 25, 236, 106, - 3, 204, 75, 244, 29, 16, 157, 112, 25, 236, 106, 3, 204, 75, 244, 29, 16, - 157, 121, 25, 236, 105, 244, 29, 16, 157, 112, 25, 236, 105, 244, 29, 16, - 157, 80, 25, 208, 145, 227, 222, 244, 29, 16, 157, 80, 25, 247, 248, 227, - 222, 51, 239, 172, 216, 78, 97, 241, 131, 97, 80, 227, 115, 240, 200, - 224, 214, 247, 214, 224, 214, 163, 115, 212, 227, 224, 214, 212, 228, - 115, 227, 28, 224, 214, 163, 115, 120, 212, 213, 224, 214, 120, 212, 214, - 115, 227, 28, 224, 214, 120, 212, 214, 230, 97, 224, 214, 208, 66, 224, - 214, 209, 124, 224, 214, 218, 253, 241, 180, 237, 239, 239, 92, 208, 145, - 219, 76, 247, 248, 219, 76, 208, 145, 245, 93, 155, 247, 248, 245, 93, - 155, 208, 145, 208, 133, 213, 33, 155, 247, 248, 208, 133, 213, 33, 155, - 61, 208, 101, 248, 115, 215, 253, 3, 246, 61, 211, 51, 239, 215, 251, - 142, 245, 90, 241, 116, 230, 244, 244, 68, 240, 204, 97, 62, 216, 11, 52, - 208, 85, 62, 227, 217, 52, 208, 85, 62, 206, 223, 52, 208, 85, 62, 242, - 69, 52, 208, 85, 62, 216, 11, 52, 208, 86, 3, 80, 142, 62, 227, 217, 52, - 208, 86, 3, 80, 142, 62, 216, 11, 208, 86, 3, 52, 80, 142, 251, 34, 246, - 19, 211, 58, 208, 220, 246, 19, 236, 41, 3, 239, 195, 214, 241, 62, 225, - 10, 227, 217, 208, 85, 62, 225, 10, 216, 11, 208, 85, 62, 225, 10, 206, - 223, 208, 85, 62, 225, 10, 242, 69, 208, 85, 52, 80, 142, 62, 51, 35, - 211, 61, 62, 246, 62, 35, 216, 148, 16, 35, 221, 48, 16, 35, 211, 90, 76, - 237, 61, 16, 35, 211, 90, 76, 209, 112, 16, 35, 241, 84, 76, 209, 112, - 16, 35, 241, 84, 76, 208, 105, 16, 35, 241, 71, 16, 35, 251, 130, 16, 35, - 248, 128, 16, 35, 249, 19, 16, 35, 236, 106, 210, 5, 16, 35, 227, 115, - 240, 51, 16, 35, 80, 210, 5, 16, 35, 239, 159, 240, 51, 16, 35, 247, 25, - 216, 77, 16, 35, 213, 7, 219, 211, 16, 35, 213, 7, 231, 49, 16, 35, 244, - 139, 227, 105, 241, 9, 16, 35, 244, 8, 245, 184, 105, 16, 35, 244, 8, - 245, 184, 108, 16, 35, 244, 8, 245, 184, 147, 16, 35, 244, 8, 245, 184, - 149, 16, 35, 182, 251, 130, 16, 35, 210, 95, 231, 112, 16, 35, 241, 84, - 76, 208, 106, 248, 33, 16, 35, 247, 59, 16, 35, 241, 84, 76, 225, 9, 16, - 35, 210, 242, 16, 35, 241, 9, 16, 35, 240, 11, 213, 130, 16, 35, 237, - 238, 213, 130, 16, 35, 216, 149, 213, 130, 16, 35, 206, 236, 213, 130, - 16, 35, 211, 228, 16, 35, 244, 46, 248, 37, 97, 171, 247, 233, 16, 35, - 222, 211, 16, 35, 244, 47, 239, 159, 108, 16, 35, 210, 243, 239, 159, - 108, 220, 82, 113, 220, 82, 246, 194, 220, 82, 239, 162, 220, 82, 230, - 239, 239, 162, 220, 82, 248, 125, 247, 190, 220, 82, 247, 241, 208, 250, - 220, 82, 247, 224, 248, 236, 235, 153, 220, 82, 250, 237, 76, 246, 168, - 220, 82, 244, 144, 220, 82, 245, 80, 251, 134, 221, 46, 220, 82, 52, 249, - 20, 43, 17, 105, 43, 17, 108, 43, 17, 147, 43, 17, 149, 43, 17, 170, 43, - 17, 195, 43, 17, 213, 111, 43, 17, 199, 43, 17, 222, 63, 43, 42, 209, - 152, 43, 42, 241, 112, 43, 42, 207, 154, 43, 42, 209, 55, 43, 42, 239, - 141, 43, 42, 240, 22, 43, 42, 212, 82, 43, 42, 213, 108, 43, 42, 241, - 140, 43, 42, 222, 60, 43, 42, 207, 151, 102, 17, 105, 102, 17, 108, 102, - 17, 147, 102, 17, 149, 102, 17, 170, 102, 17, 195, 102, 17, 213, 111, - 102, 17, 199, 102, 17, 222, 63, 102, 42, 209, 152, 102, 42, 241, 112, - 102, 42, 207, 154, 102, 42, 209, 55, 102, 42, 239, 141, 102, 42, 240, 22, - 102, 42, 212, 82, 102, 42, 213, 108, 102, 42, 241, 140, 102, 42, 222, 60, - 102, 42, 207, 151, 17, 118, 239, 102, 211, 61, 17, 120, 239, 102, 211, - 61, 17, 126, 239, 102, 211, 61, 17, 239, 147, 239, 102, 211, 61, 17, 239, - 233, 239, 102, 211, 61, 17, 212, 88, 239, 102, 211, 61, 17, 213, 112, - 239, 102, 211, 61, 17, 241, 143, 239, 102, 211, 61, 17, 222, 64, 239, - 102, 211, 61, 42, 209, 153, 239, 102, 211, 61, 42, 241, 113, 239, 102, - 211, 61, 42, 207, 155, 239, 102, 211, 61, 42, 209, 56, 239, 102, 211, 61, - 42, 239, 142, 239, 102, 211, 61, 42, 240, 23, 239, 102, 211, 61, 42, 212, - 83, 239, 102, 211, 61, 42, 213, 109, 239, 102, 211, 61, 42, 241, 141, - 239, 102, 211, 61, 42, 222, 61, 239, 102, 211, 61, 42, 207, 152, 239, - 102, 211, 61, 102, 8, 5, 1, 63, 102, 8, 5, 1, 249, 255, 102, 8, 5, 1, - 247, 125, 102, 8, 5, 1, 245, 51, 102, 8, 5, 1, 74, 102, 8, 5, 1, 240, - 174, 102, 8, 5, 1, 239, 75, 102, 8, 5, 1, 237, 171, 102, 8, 5, 1, 75, - 102, 8, 5, 1, 230, 184, 102, 8, 5, 1, 230, 54, 102, 8, 5, 1, 159, 102, 8, - 5, 1, 226, 185, 102, 8, 5, 1, 223, 163, 102, 8, 5, 1, 78, 102, 8, 5, 1, - 219, 184, 102, 8, 5, 1, 217, 134, 102, 8, 5, 1, 146, 102, 8, 5, 1, 194, - 102, 8, 5, 1, 210, 69, 102, 8, 5, 1, 68, 102, 8, 5, 1, 206, 164, 102, 8, - 5, 1, 204, 144, 102, 8, 5, 1, 203, 196, 102, 8, 5, 1, 203, 124, 102, 8, - 5, 1, 202, 159, 43, 8, 6, 1, 63, 43, 8, 6, 1, 249, 255, 43, 8, 6, 1, 247, - 125, 43, 8, 6, 1, 245, 51, 43, 8, 6, 1, 74, 43, 8, 6, 1, 240, 174, 43, 8, - 6, 1, 239, 75, 43, 8, 6, 1, 237, 171, 43, 8, 6, 1, 75, 43, 8, 6, 1, 230, - 184, 43, 8, 6, 1, 230, 54, 43, 8, 6, 1, 159, 43, 8, 6, 1, 226, 185, 43, - 8, 6, 1, 223, 163, 43, 8, 6, 1, 78, 43, 8, 6, 1, 219, 184, 43, 8, 6, 1, - 217, 134, 43, 8, 6, 1, 146, 43, 8, 6, 1, 194, 43, 8, 6, 1, 210, 69, 43, - 8, 6, 1, 68, 43, 8, 6, 1, 206, 164, 43, 8, 6, 1, 204, 144, 43, 8, 6, 1, - 203, 196, 43, 8, 6, 1, 203, 124, 43, 8, 6, 1, 202, 159, 43, 8, 5, 1, 63, - 43, 8, 5, 1, 249, 255, 43, 8, 5, 1, 247, 125, 43, 8, 5, 1, 245, 51, 43, - 8, 5, 1, 74, 43, 8, 5, 1, 240, 174, 43, 8, 5, 1, 239, 75, 43, 8, 5, 1, - 237, 171, 43, 8, 5, 1, 75, 43, 8, 5, 1, 230, 184, 43, 8, 5, 1, 230, 54, - 43, 8, 5, 1, 159, 43, 8, 5, 1, 226, 185, 43, 8, 5, 1, 223, 163, 43, 8, 5, - 1, 78, 43, 8, 5, 1, 219, 184, 43, 8, 5, 1, 217, 134, 43, 8, 5, 1, 146, - 43, 8, 5, 1, 194, 43, 8, 5, 1, 210, 69, 43, 8, 5, 1, 68, 43, 8, 5, 1, - 206, 164, 43, 8, 5, 1, 204, 144, 43, 8, 5, 1, 203, 196, 43, 8, 5, 1, 203, - 124, 43, 8, 5, 1, 202, 159, 43, 17, 202, 84, 182, 43, 42, 241, 112, 182, - 43, 42, 207, 154, 182, 43, 42, 209, 55, 182, 43, 42, 239, 141, 182, 43, - 42, 240, 22, 182, 43, 42, 212, 82, 182, 43, 42, 213, 108, 182, 43, 42, - 241, 140, 182, 43, 42, 222, 60, 182, 43, 42, 207, 151, 52, 43, 17, 105, - 52, 43, 17, 108, 52, 43, 17, 147, 52, 43, 17, 149, 52, 43, 17, 170, 52, - 43, 17, 195, 52, 43, 17, 213, 111, 52, 43, 17, 199, 52, 43, 17, 222, 63, - 52, 43, 42, 209, 152, 182, 43, 17, 202, 84, 98, 116, 157, 236, 105, 98, - 116, 79, 236, 105, 98, 116, 157, 206, 38, 98, 116, 79, 206, 38, 98, 116, - 157, 208, 70, 244, 145, 236, 105, 98, 116, 79, 208, 70, 244, 145, 236, - 105, 98, 116, 157, 208, 70, 244, 145, 206, 38, 98, 116, 79, 208, 70, 244, - 145, 206, 38, 98, 116, 157, 217, 58, 244, 145, 236, 105, 98, 116, 79, - 217, 58, 244, 145, 236, 105, 98, 116, 157, 217, 58, 244, 145, 206, 38, - 98, 116, 79, 217, 58, 244, 145, 206, 38, 98, 116, 157, 121, 25, 216, 16, - 98, 116, 121, 157, 25, 50, 237, 49, 98, 116, 121, 79, 25, 50, 227, 134, - 98, 116, 79, 121, 25, 216, 16, 98, 116, 157, 121, 25, 227, 222, 98, 116, - 121, 157, 25, 49, 237, 49, 98, 116, 121, 79, 25, 49, 227, 134, 98, 116, - 79, 121, 25, 227, 222, 98, 116, 157, 112, 25, 216, 16, 98, 116, 112, 157, - 25, 50, 237, 49, 98, 116, 112, 79, 25, 50, 227, 134, 98, 116, 79, 112, - 25, 216, 16, 98, 116, 157, 112, 25, 227, 222, 98, 116, 112, 157, 25, 49, - 237, 49, 98, 116, 112, 79, 25, 49, 227, 134, 98, 116, 79, 112, 25, 227, - 222, 98, 116, 157, 80, 25, 216, 16, 98, 116, 80, 157, 25, 50, 237, 49, - 98, 116, 112, 79, 25, 50, 121, 227, 134, 98, 116, 121, 79, 25, 50, 112, - 227, 134, 98, 116, 80, 79, 25, 50, 227, 134, 98, 116, 121, 157, 25, 50, - 112, 237, 49, 98, 116, 112, 157, 25, 50, 121, 237, 49, 98, 116, 79, 80, - 25, 216, 16, 98, 116, 157, 80, 25, 227, 222, 98, 116, 80, 157, 25, 49, - 237, 49, 98, 116, 112, 79, 25, 49, 121, 227, 134, 98, 116, 121, 79, 25, - 49, 112, 227, 134, 98, 116, 80, 79, 25, 49, 227, 134, 98, 116, 121, 157, - 25, 49, 112, 237, 49, 98, 116, 112, 157, 25, 49, 121, 237, 49, 98, 116, - 79, 80, 25, 227, 222, 98, 116, 157, 121, 25, 236, 105, 98, 116, 49, 79, - 25, 50, 121, 227, 134, 98, 116, 50, 79, 25, 49, 121, 227, 134, 98, 116, - 121, 157, 25, 236, 106, 237, 49, 98, 116, 121, 79, 25, 236, 106, 227, - 134, 98, 116, 50, 157, 25, 49, 121, 237, 49, 98, 116, 49, 157, 25, 50, - 121, 237, 49, 98, 116, 79, 121, 25, 236, 105, 98, 116, 157, 112, 25, 236, - 105, 98, 116, 49, 79, 25, 50, 112, 227, 134, 98, 116, 50, 79, 25, 49, - 112, 227, 134, 98, 116, 112, 157, 25, 236, 106, 237, 49, 98, 116, 112, - 79, 25, 236, 106, 227, 134, 98, 116, 50, 157, 25, 49, 112, 237, 49, 98, - 116, 49, 157, 25, 50, 112, 237, 49, 98, 116, 79, 112, 25, 236, 105, 98, - 116, 157, 80, 25, 236, 105, 98, 116, 49, 79, 25, 50, 80, 227, 134, 98, - 116, 50, 79, 25, 49, 80, 227, 134, 98, 116, 80, 157, 25, 236, 106, 237, - 49, 98, 116, 112, 79, 25, 121, 236, 106, 227, 134, 98, 116, 121, 79, 25, - 112, 236, 106, 227, 134, 98, 116, 80, 79, 25, 236, 106, 227, 134, 98, - 116, 49, 112, 79, 25, 50, 121, 227, 134, 98, 116, 50, 112, 79, 25, 49, - 121, 227, 134, 98, 116, 49, 121, 79, 25, 50, 112, 227, 134, 98, 116, 50, - 121, 79, 25, 49, 112, 227, 134, 98, 116, 121, 157, 25, 112, 236, 106, - 237, 49, 98, 116, 112, 157, 25, 121, 236, 106, 237, 49, 98, 116, 50, 157, - 25, 49, 80, 237, 49, 98, 116, 49, 157, 25, 50, 80, 237, 49, 98, 116, 79, - 80, 25, 236, 105, 98, 116, 157, 52, 244, 145, 236, 105, 98, 116, 79, 52, - 244, 145, 236, 105, 98, 116, 157, 52, 244, 145, 206, 38, 98, 116, 79, 52, - 244, 145, 206, 38, 98, 116, 52, 236, 105, 98, 116, 52, 206, 38, 98, 116, - 121, 212, 120, 25, 50, 242, 78, 98, 116, 121, 52, 25, 50, 212, 119, 98, - 116, 52, 121, 25, 216, 16, 98, 116, 121, 212, 120, 25, 49, 242, 78, 98, - 116, 121, 52, 25, 49, 212, 119, 98, 116, 52, 121, 25, 227, 222, 98, 116, - 112, 212, 120, 25, 50, 242, 78, 98, 116, 112, 52, 25, 50, 212, 119, 98, - 116, 52, 112, 25, 216, 16, 98, 116, 112, 212, 120, 25, 49, 242, 78, 98, - 116, 112, 52, 25, 49, 212, 119, 98, 116, 52, 112, 25, 227, 222, 98, 116, - 80, 212, 120, 25, 50, 242, 78, 98, 116, 80, 52, 25, 50, 212, 119, 98, - 116, 52, 80, 25, 216, 16, 98, 116, 80, 212, 120, 25, 49, 242, 78, 98, - 116, 80, 52, 25, 49, 212, 119, 98, 116, 52, 80, 25, 227, 222, 98, 116, - 121, 212, 120, 25, 236, 106, 242, 78, 98, 116, 121, 52, 25, 236, 106, - 212, 119, 98, 116, 52, 121, 25, 236, 105, 98, 116, 112, 212, 120, 25, - 236, 106, 242, 78, 98, 116, 112, 52, 25, 236, 106, 212, 119, 98, 116, 52, - 112, 25, 236, 105, 98, 116, 80, 212, 120, 25, 236, 106, 242, 78, 98, 116, - 80, 52, 25, 236, 106, 212, 119, 98, 116, 52, 80, 25, 236, 105, 98, 116, - 157, 250, 129, 121, 25, 216, 16, 98, 116, 157, 250, 129, 121, 25, 227, - 222, 98, 116, 157, 250, 129, 112, 25, 227, 222, 98, 116, 157, 250, 129, - 112, 25, 216, 16, 98, 116, 157, 243, 228, 206, 221, 50, 208, 173, 226, - 251, 227, 222, 98, 116, 157, 243, 228, 206, 221, 49, 208, 173, 226, 251, - 216, 16, 98, 116, 157, 243, 228, 245, 130, 98, 116, 157, 227, 222, 98, - 116, 157, 206, 224, 98, 116, 157, 216, 16, 98, 116, 157, 242, 70, 98, - 116, 79, 227, 222, 98, 116, 79, 206, 224, 98, 116, 79, 216, 16, 98, 116, - 79, 242, 70, 98, 116, 157, 49, 25, 79, 216, 16, 98, 116, 157, 112, 25, - 79, 242, 70, 98, 116, 79, 49, 25, 157, 216, 16, 98, 116, 79, 112, 25, - 157, 242, 70, 206, 221, 162, 248, 33, 226, 251, 118, 241, 139, 248, 33, - 226, 251, 118, 217, 56, 248, 33, 226, 251, 126, 241, 137, 248, 33, 226, - 251, 162, 248, 33, 226, 251, 239, 233, 241, 137, 248, 33, 226, 251, 126, - 217, 54, 248, 33, 226, 251, 213, 112, 241, 137, 248, 33, 239, 102, 248, - 33, 49, 213, 112, 241, 137, 248, 33, 49, 126, 217, 54, 248, 33, 49, 239, - 233, 241, 137, 248, 33, 49, 162, 248, 33, 49, 126, 241, 137, 248, 33, 49, - 118, 217, 56, 248, 33, 49, 118, 241, 139, 248, 33, 50, 162, 248, 33, 157, - 213, 79, 225, 10, 213, 79, 244, 150, 213, 79, 206, 221, 118, 241, 139, - 248, 33, 50, 118, 241, 139, 248, 33, 217, 60, 226, 251, 227, 222, 217, - 60, 226, 251, 216, 16, 217, 60, 206, 221, 227, 222, 217, 60, 206, 221, - 49, 25, 226, 251, 49, 25, 226, 251, 216, 16, 217, 60, 206, 221, 49, 25, - 226, 251, 216, 16, 217, 60, 206, 221, 49, 25, 206, 221, 50, 25, 226, 251, - 227, 222, 217, 60, 206, 221, 49, 25, 206, 221, 50, 25, 226, 251, 216, 16, - 217, 60, 206, 221, 216, 16, 217, 60, 206, 221, 50, 25, 226, 251, 227, - 222, 217, 60, 206, 221, 50, 25, 226, 251, 49, 25, 226, 251, 216, 16, 62, - 211, 177, 61, 211, 177, 61, 51, 3, 215, 189, 245, 164, 61, 51, 245, 195, - 62, 5, 211, 177, 51, 3, 236, 106, 240, 9, 51, 3, 80, 240, 9, 51, 3, 219, - 229, 245, 125, 240, 9, 51, 3, 206, 221, 49, 208, 173, 226, 251, 50, 240, - 9, 51, 3, 206, 221, 50, 208, 173, 226, 251, 49, 240, 9, 51, 3, 243, 228, - 245, 125, 240, 9, 62, 5, 211, 177, 61, 5, 211, 177, 62, 216, 143, 61, - 216, 143, 62, 80, 216, 143, 61, 80, 216, 143, 62, 219, 80, 61, 219, 80, - 62, 206, 223, 208, 85, 61, 206, 223, 208, 85, 62, 206, 223, 5, 208, 85, - 61, 206, 223, 5, 208, 85, 62, 216, 11, 208, 85, 61, 216, 11, 208, 85, 62, - 216, 11, 5, 208, 85, 61, 216, 11, 5, 208, 85, 62, 216, 11, 218, 60, 61, - 216, 11, 218, 60, 62, 242, 69, 208, 85, 61, 242, 69, 208, 85, 62, 242, - 69, 5, 208, 85, 61, 242, 69, 5, 208, 85, 62, 227, 217, 208, 85, 61, 227, - 217, 208, 85, 62, 227, 217, 5, 208, 85, 61, 227, 217, 5, 208, 85, 62, - 227, 217, 218, 60, 61, 227, 217, 218, 60, 62, 243, 221, 61, 243, 221, 61, - 243, 222, 245, 195, 62, 5, 243, 221, 239, 242, 226, 246, 61, 246, 61, - 242, 83, 246, 61, 246, 62, 3, 80, 240, 9, 247, 173, 62, 246, 61, 246, 62, - 3, 49, 162, 248, 43, 246, 62, 3, 50, 162, 248, 43, 246, 62, 3, 226, 251, - 162, 248, 43, 246, 62, 3, 206, 221, 162, 248, 43, 246, 62, 3, 206, 221, - 50, 217, 60, 248, 43, 246, 62, 3, 251, 15, 247, 148, 206, 221, 49, 217, - 60, 248, 43, 49, 162, 62, 246, 61, 50, 162, 62, 246, 61, 230, 240, 247, - 177, 230, 240, 61, 246, 61, 206, 221, 162, 230, 240, 61, 246, 61, 226, - 251, 162, 230, 240, 61, 246, 61, 206, 221, 49, 217, 60, 246, 55, 250, - 128, 206, 221, 50, 217, 60, 246, 55, 250, 128, 226, 251, 50, 217, 60, - 246, 55, 250, 128, 226, 251, 49, 217, 60, 246, 55, 250, 128, 206, 221, - 162, 246, 61, 226, 251, 162, 246, 61, 62, 226, 251, 50, 208, 85, 62, 226, - 251, 49, 208, 85, 62, 206, 221, 49, 208, 85, 62, 206, 221, 50, 208, 85, - 61, 247, 177, 51, 3, 49, 162, 248, 43, 51, 3, 50, 162, 248, 43, 51, 3, - 206, 221, 49, 243, 228, 162, 248, 43, 51, 3, 226, 251, 50, 243, 228, 162, - 248, 43, 61, 51, 3, 80, 248, 55, 227, 114, 61, 206, 223, 208, 86, 3, 243, - 85, 206, 223, 208, 86, 3, 49, 162, 248, 43, 206, 223, 208, 86, 3, 50, - 162, 248, 43, 228, 8, 246, 61, 61, 51, 3, 206, 221, 49, 217, 59, 61, 51, - 3, 226, 251, 49, 217, 59, 61, 51, 3, 226, 251, 50, 217, 59, 61, 51, 3, - 206, 221, 50, 217, 59, 61, 246, 62, 3, 206, 221, 49, 217, 59, 61, 246, - 62, 3, 226, 251, 49, 217, 59, 61, 246, 62, 3, 226, 251, 50, 217, 59, 61, - 246, 62, 3, 206, 221, 50, 217, 59, 206, 221, 49, 208, 85, 206, 221, 50, - 208, 85, 226, 251, 49, 208, 85, 61, 225, 10, 211, 177, 62, 225, 10, 211, - 177, 61, 225, 10, 5, 211, 177, 62, 225, 10, 5, 211, 177, 226, 251, 50, - 208, 85, 62, 210, 215, 3, 216, 162, 246, 7, 207, 3, 212, 15, 245, 236, - 62, 211, 94, 61, 211, 94, 227, 131, 209, 17, 210, 214, 250, 78, 221, 188, - 244, 19, 221, 188, 245, 204, 219, 250, 62, 209, 161, 61, 209, 161, 248, - 248, 247, 233, 248, 248, 98, 3, 246, 168, 248, 248, 98, 3, 203, 196, 214, - 254, 207, 4, 3, 216, 191, 242, 48, 236, 47, 248, 102, 61, 212, 237, 218, - 159, 62, 212, 237, 218, 159, 213, 68, 216, 73, 215, 198, 239, 201, 237, - 56, 247, 177, 62, 49, 218, 59, 231, 35, 62, 50, 218, 59, 231, 35, 61, 49, - 218, 59, 231, 35, 61, 112, 218, 59, 231, 35, 61, 50, 218, 59, 231, 35, - 61, 121, 218, 59, 231, 35, 212, 63, 25, 245, 129, 247, 11, 54, 216, 203, - 54, 248, 62, 54, 247, 83, 250, 208, 219, 230, 245, 130, 246, 143, 216, - 59, 245, 131, 76, 227, 9, 245, 131, 76, 230, 151, 211, 95, 25, 245, 138, - 240, 75, 97, 251, 115, 213, 70, 237, 131, 25, 212, 159, 219, 33, 97, 203, - 1, 203, 76, 208, 75, 35, 237, 51, 208, 75, 35, 228, 33, 208, 75, 35, 239, - 249, 208, 75, 35, 209, 18, 208, 75, 35, 204, 16, 208, 75, 35, 204, 80, - 208, 75, 35, 224, 12, 208, 75, 35, 241, 179, 204, 37, 76, 243, 249, 61, - 239, 114, 240, 102, 61, 212, 30, 240, 102, 62, 212, 30, 240, 102, 61, - 210, 215, 3, 216, 162, 239, 245, 217, 56, 224, 29, 228, 1, 217, 56, 224, - 29, 224, 234, 240, 43, 54, 241, 179, 225, 127, 54, 230, 69, 214, 218, - 206, 205, 222, 224, 218, 73, 250, 114, 209, 205, 238, 178, 247, 57, 227, - 184, 205, 202, 227, 145, 214, 187, 215, 20, 247, 43, 250, 145, 218, 108, - 61, 246, 150, 229, 81, 61, 246, 150, 217, 48, 61, 246, 150, 215, 206, 61, - 246, 150, 248, 54, 61, 246, 150, 229, 31, 61, 246, 150, 219, 45, 62, 246, - 150, 229, 81, 62, 246, 150, 217, 48, 62, 246, 150, 215, 206, 62, 246, - 150, 248, 54, 62, 246, 150, 229, 31, 62, 246, 150, 219, 45, 62, 211, 226, - 210, 227, 61, 237, 56, 210, 227, 61, 243, 222, 210, 227, 62, 246, 5, 210, - 227, 61, 211, 226, 210, 227, 62, 237, 56, 210, 227, 62, 243, 222, 210, - 227, 61, 246, 5, 210, 227, 236, 47, 211, 182, 217, 56, 221, 160, 241, - 139, 221, 160, 248, 158, 241, 139, 221, 155, 248, 158, 212, 81, 221, 155, - 223, 195, 239, 217, 54, 223, 195, 223, 66, 54, 223, 195, 213, 57, 54, - 204, 46, 210, 89, 245, 130, 241, 176, 210, 89, 245, 130, 206, 233, 216, - 139, 97, 216, 139, 16, 35, 207, 120, 218, 90, 216, 139, 16, 35, 207, 118, - 218, 90, 216, 139, 16, 35, 207, 117, 218, 90, 216, 139, 16, 35, 207, 115, - 218, 90, 216, 139, 16, 35, 207, 113, 218, 90, 216, 139, 16, 35, 207, 111, - 218, 90, 216, 139, 16, 35, 207, 109, 218, 90, 216, 139, 16, 35, 238, 176, - 225, 70, 62, 206, 233, 216, 139, 97, 216, 140, 219, 95, 97, 219, 68, 219, - 95, 97, 218, 238, 219, 95, 54, 204, 35, 97, 243, 214, 240, 101, 243, 214, - 240, 100, 243, 214, 240, 99, 243, 214, 240, 98, 243, 214, 240, 97, 243, - 214, 240, 96, 61, 246, 62, 3, 70, 216, 16, 61, 246, 62, 3, 120, 243, 83, - 62, 246, 62, 3, 61, 70, 216, 16, 62, 246, 62, 3, 120, 61, 243, 83, 224, - 45, 35, 203, 76, 224, 45, 35, 203, 0, 243, 195, 35, 237, 248, 203, 76, - 243, 195, 35, 227, 177, 203, 0, 243, 195, 35, 227, 177, 203, 76, 243, - 195, 35, 237, 248, 203, 0, 61, 239, 225, 62, 239, 225, 237, 131, 25, 218, - 163, 250, 228, 245, 128, 210, 154, 211, 103, 76, 251, 92, 214, 203, 251, - 29, 239, 197, 238, 187, 211, 103, 76, 237, 26, 250, 42, 97, 239, 213, - 219, 207, 61, 211, 94, 126, 227, 109, 245, 181, 216, 16, 126, 227, 109, - 245, 181, 227, 222, 204, 91, 54, 138, 205, 179, 54, 242, 75, 240, 43, 54, - 242, 75, 225, 127, 54, 230, 250, 240, 43, 25, 225, 127, 54, 225, 127, 25, - 240, 43, 54, 225, 127, 3, 211, 32, 54, 225, 127, 3, 211, 32, 25, 225, - 127, 25, 240, 43, 54, 80, 225, 127, 3, 211, 32, 54, 236, 106, 225, 127, - 3, 211, 32, 54, 225, 10, 61, 246, 61, 225, 10, 62, 246, 61, 225, 10, 5, - 61, 246, 61, 225, 86, 97, 243, 135, 97, 206, 230, 219, 67, 97, 245, 247, - 239, 97, 206, 201, 222, 217, 246, 203, 219, 137, 230, 75, 205, 240, 246, - 123, 62, 224, 30, 227, 128, 213, 101, 213, 140, 217, 38, 213, 120, 212, - 10, 248, 251, 248, 217, 103, 229, 151, 61, 242, 58, 225, 122, 61, 242, - 58, 229, 81, 62, 242, 58, 225, 122, 62, 242, 58, 229, 81, 212, 16, 204, - 3, 212, 19, 210, 215, 248, 135, 246, 7, 216, 190, 62, 212, 15, 209, 19, - 246, 8, 25, 216, 190, 207, 174, 61, 212, 237, 218, 159, 207, 174, 62, - 212, 237, 218, 159, 61, 243, 222, 231, 50, 211, 177, 245, 124, 228, 15, - 243, 162, 247, 39, 219, 253, 218, 163, 247, 40, 212, 48, 237, 36, 3, 61, - 245, 130, 43, 245, 124, 228, 15, 246, 195, 221, 192, 241, 62, 250, 255, - 220, 26, 49, 204, 66, 208, 113, 62, 207, 131, 49, 204, 66, 208, 113, 61, - 207, 131, 49, 204, 66, 208, 113, 62, 49, 228, 16, 224, 233, 61, 49, 228, - 16, 224, 233, 242, 53, 212, 40, 54, 79, 61, 242, 69, 208, 85, 49, 246, - 16, 241, 62, 103, 214, 254, 240, 84, 243, 228, 231, 50, 61, 246, 62, 231, - 50, 62, 211, 177, 62, 208, 50, 216, 84, 49, 241, 61, 216, 84, 49, 241, - 60, 250, 54, 16, 35, 206, 205, 79, 246, 62, 3, 211, 32, 25, 120, 187, 55, - 218, 254, 216, 13, 230, 252, 218, 254, 227, 219, 230, 252, 218, 254, 230, - 239, 218, 254, 62, 245, 131, 220, 32, 213, 8, 212, 252, 212, 203, 246, - 90, 247, 19, 236, 231, 212, 89, 238, 188, 204, 3, 236, 23, 238, 188, 3, - 237, 101, 225, 107, 16, 35, 227, 133, 224, 12, 207, 4, 220, 32, 237, 239, - 239, 148, 239, 226, 231, 50, 236, 126, 240, 34, 215, 15, 51, 239, 147, - 245, 164, 212, 66, 235, 163, 212, 69, 218, 230, 3, 248, 251, 209, 144, - 230, 169, 248, 236, 97, 237, 59, 237, 250, 97, 239, 105, 217, 180, 245, - 100, 220, 32, 62, 211, 177, 61, 239, 226, 3, 236, 106, 101, 62, 211, 33, - 62, 215, 25, 214, 190, 206, 221, 248, 38, 214, 190, 62, 214, 190, 226, - 251, 248, 38, 214, 190, 61, 214, 190, 61, 79, 246, 169, 82, 209, 162, - 227, 47, 54, 209, 221, 242, 52, 251, 52, 241, 57, 216, 188, 239, 238, - 216, 188, 237, 123, 205, 228, 237, 123, 203, 220, 237, 123, 226, 251, 50, - 219, 8, 219, 8, 206, 221, 50, 219, 8, 61, 222, 97, 62, 222, 97, 246, 169, - 82, 79, 246, 169, 82, 223, 224, 203, 196, 79, 223, 224, 203, 196, 248, - 248, 203, 196, 79, 248, 248, 203, 196, 219, 207, 30, 245, 130, 79, 30, - 245, 130, 171, 246, 218, 245, 130, 79, 171, 246, 218, 245, 130, 8, 245, - 130, 213, 77, 61, 8, 245, 130, 219, 207, 8, 245, 130, 225, 124, 245, 130, - 211, 95, 76, 244, 137, 239, 147, 209, 180, 250, 59, 239, 147, 248, 249, - 250, 59, 79, 239, 147, 248, 249, 250, 59, 239, 147, 246, 3, 250, 59, 62, - 239, 147, 218, 61, 211, 94, 61, 239, 147, 218, 61, 211, 94, 211, 221, - 211, 42, 219, 207, 61, 211, 94, 43, 61, 211, 94, 171, 246, 218, 62, 211, - 94, 62, 246, 218, 61, 211, 94, 219, 207, 62, 211, 94, 79, 219, 207, 62, - 211, 94, 218, 118, 211, 94, 213, 77, 61, 211, 94, 79, 250, 59, 171, 246, - 218, 250, 59, 241, 143, 211, 191, 250, 59, 241, 143, 218, 61, 62, 211, - 94, 241, 143, 218, 61, 218, 118, 211, 94, 212, 88, 218, 61, 62, 211, 94, - 241, 143, 218, 61, 216, 141, 62, 211, 94, 79, 241, 143, 218, 61, 216, - 141, 62, 211, 94, 207, 155, 218, 61, 62, 211, 94, 212, 83, 218, 61, 250, - 59, 209, 180, 250, 59, 171, 246, 218, 209, 180, 250, 59, 79, 209, 180, - 250, 59, 212, 88, 218, 218, 62, 25, 61, 239, 200, 62, 239, 200, 61, 239, - 200, 241, 143, 218, 218, 219, 207, 62, 239, 200, 43, 171, 246, 218, 241, - 143, 218, 61, 211, 94, 79, 209, 180, 218, 118, 250, 59, 212, 17, 208, - 244, 208, 78, 212, 17, 79, 246, 146, 212, 17, 211, 223, 79, 211, 223, - 248, 249, 250, 59, 241, 143, 209, 180, 217, 213, 250, 59, 79, 241, 143, - 209, 180, 217, 213, 250, 59, 245, 131, 82, 213, 77, 61, 246, 61, 182, - 103, 245, 131, 82, 226, 251, 50, 242, 50, 61, 211, 177, 206, 221, 50, - 242, 50, 61, 211, 177, 226, 251, 50, 213, 77, 61, 211, 177, 206, 221, 50, - 213, 77, 61, 211, 177, 62, 217, 47, 131, 219, 233, 61, 217, 47, 131, 219, - 233, 61, 240, 212, 131, 219, 233, 62, 243, 222, 224, 103, 61, 203, 196, - 79, 240, 212, 131, 97, 157, 80, 142, 225, 10, 80, 142, 79, 80, 142, 79, - 212, 120, 207, 174, 245, 234, 217, 31, 131, 219, 233, 79, 212, 120, 245, - 234, 217, 31, 131, 219, 233, 79, 52, 207, 174, 245, 234, 217, 31, 131, - 219, 233, 79, 52, 245, 234, 217, 31, 131, 219, 233, 79, 124, 212, 120, - 245, 234, 217, 31, 131, 219, 233, 79, 124, 52, 245, 234, 217, 31, 131, - 219, 233, 245, 86, 211, 78, 219, 89, 2, 219, 233, 79, 240, 212, 131, 219, - 233, 79, 237, 56, 240, 212, 131, 219, 233, 79, 62, 237, 55, 215, 198, 79, - 62, 237, 56, 247, 177, 239, 201, 237, 55, 215, 198, 239, 201, 237, 56, - 247, 177, 225, 10, 49, 219, 77, 219, 233, 225, 10, 50, 219, 77, 219, 233, - 225, 10, 239, 214, 49, 219, 77, 219, 233, 225, 10, 239, 214, 50, 219, 77, - 219, 233, 225, 10, 227, 217, 250, 218, 247, 227, 219, 233, 225, 10, 216, - 11, 250, 218, 247, 227, 219, 233, 79, 227, 217, 250, 218, 217, 31, 131, - 219, 233, 79, 216, 11, 250, 218, 217, 31, 131, 219, 233, 79, 227, 217, - 250, 218, 247, 227, 219, 233, 79, 216, 11, 250, 218, 247, 227, 219, 233, - 157, 49, 208, 133, 213, 33, 247, 227, 219, 233, 157, 50, 208, 133, 213, - 33, 247, 227, 219, 233, 225, 10, 49, 245, 93, 247, 227, 219, 233, 225, - 10, 50, 245, 93, 247, 227, 219, 233, 243, 174, 182, 43, 17, 105, 243, - 174, 182, 43, 17, 108, 243, 174, 182, 43, 17, 147, 243, 174, 182, 43, 17, - 149, 243, 174, 182, 43, 17, 170, 243, 174, 182, 43, 17, 195, 243, 174, - 182, 43, 17, 213, 111, 243, 174, 182, 43, 17, 199, 243, 174, 182, 43, 17, - 222, 63, 243, 174, 182, 43, 42, 209, 152, 243, 174, 43, 41, 17, 105, 243, - 174, 43, 41, 17, 108, 243, 174, 43, 41, 17, 147, 243, 174, 43, 41, 17, - 149, 243, 174, 43, 41, 17, 170, 243, 174, 43, 41, 17, 195, 243, 174, 43, - 41, 17, 213, 111, 243, 174, 43, 41, 17, 199, 243, 174, 43, 41, 17, 222, - 63, 243, 174, 43, 41, 42, 209, 152, 243, 174, 182, 43, 41, 17, 105, 243, - 174, 182, 43, 41, 17, 108, 243, 174, 182, 43, 41, 17, 147, 243, 174, 182, - 43, 41, 17, 149, 243, 174, 182, 43, 41, 17, 170, 243, 174, 182, 43, 41, - 17, 195, 243, 174, 182, 43, 41, 17, 213, 111, 243, 174, 182, 43, 41, 17, - 199, 243, 174, 182, 43, 41, 17, 222, 63, 243, 174, 182, 43, 41, 42, 209, - 152, 79, 204, 26, 86, 47, 79, 91, 54, 79, 224, 103, 54, 79, 243, 137, 54, - 79, 211, 238, 241, 176, 47, 79, 86, 47, 79, 153, 241, 176, 47, 242, 63, - 218, 63, 86, 47, 79, 215, 190, 86, 47, 208, 84, 86, 47, 79, 208, 84, 86, - 47, 244, 143, 208, 84, 86, 47, 79, 244, 143, 208, 84, 86, 47, 62, 86, 47, - 209, 31, 208, 143, 86, 250, 94, 209, 31, 247, 246, 86, 250, 94, 62, 86, - 250, 94, 79, 62, 245, 86, 183, 25, 86, 47, 79, 62, 245, 86, 177, 25, 86, - 47, 211, 174, 62, 86, 47, 79, 245, 217, 62, 86, 47, 216, 10, 61, 86, 47, - 227, 216, 61, 86, 47, 249, 24, 213, 77, 61, 86, 47, 239, 117, 213, 77, - 61, 86, 47, 79, 226, 251, 216, 9, 61, 86, 47, 79, 206, 221, 216, 9, 61, - 86, 47, 221, 162, 226, 251, 216, 9, 61, 86, 47, 245, 93, 227, 14, 221, - 162, 206, 221, 216, 9, 61, 86, 47, 43, 79, 61, 86, 47, 204, 32, 86, 47, - 248, 42, 211, 238, 241, 176, 47, 248, 42, 86, 47, 248, 42, 153, 241, 176, - 47, 79, 248, 42, 211, 238, 241, 176, 47, 79, 248, 42, 86, 47, 79, 248, - 42, 153, 241, 176, 47, 209, 182, 86, 47, 79, 209, 181, 86, 47, 204, 56, - 86, 47, 79, 204, 56, 86, 47, 220, 3, 86, 47, 52, 245, 93, 227, 14, 126, - 243, 184, 250, 217, 61, 208, 86, 245, 195, 5, 61, 208, 85, 218, 233, 171, - 210, 244, 171, 210, 197, 49, 215, 93, 249, 11, 244, 43, 50, 215, 93, 249, - 11, 244, 43, 219, 245, 3, 70, 231, 6, 216, 74, 212, 1, 217, 248, 210, - 244, 210, 198, 217, 248, 212, 0, 80, 248, 231, 3, 236, 106, 95, 13, 215, - 245, 243, 227, 163, 243, 136, 13, 240, 84, 243, 227, 103, 227, 37, 250, - 226, 103, 227, 37, 219, 244, 61, 243, 222, 3, 246, 216, 243, 85, 25, 3, - 243, 85, 241, 115, 76, 220, 1, 206, 212, 226, 251, 50, 245, 166, 3, 243, - 85, 206, 221, 49, 245, 166, 3, 243, 85, 49, 219, 209, 230, 99, 50, 219, - 209, 230, 99, 239, 102, 219, 209, 230, 99, 228, 8, 112, 210, 3, 228, 8, - 121, 210, 3, 49, 25, 50, 52, 207, 173, 49, 25, 50, 210, 3, 49, 223, 228, - 163, 50, 210, 3, 163, 49, 210, 3, 112, 210, 4, 3, 246, 62, 55, 226, 247, - 243, 142, 247, 137, 236, 106, 215, 135, 61, 245, 216, 243, 221, 61, 245, - 216, 243, 222, 3, 96, 208, 254, 61, 245, 216, 243, 222, 3, 86, 208, 254, - 61, 51, 3, 96, 208, 254, 61, 51, 3, 86, 208, 254, 13, 49, 61, 51, 155, - 13, 50, 61, 51, 155, 13, 49, 250, 218, 155, 13, 50, 250, 218, 155, 13, - 49, 52, 250, 218, 155, 13, 50, 52, 250, 218, 155, 13, 49, 61, 208, 133, - 213, 33, 155, 13, 50, 61, 208, 133, 213, 33, 155, 13, 49, 239, 214, 219, - 76, 13, 50, 239, 214, 219, 76, 177, 217, 58, 47, 183, 217, 58, 47, 250, - 194, 238, 226, 246, 62, 47, 246, 18, 238, 226, 246, 62, 47, 50, 53, 3, - 43, 218, 76, 163, 96, 47, 163, 86, 47, 163, 49, 50, 47, 163, 96, 52, 47, - 163, 86, 52, 47, 163, 49, 50, 52, 47, 163, 96, 53, 239, 120, 142, 163, - 86, 53, 239, 120, 142, 163, 96, 52, 53, 239, 120, 142, 163, 86, 52, 53, - 239, 120, 142, 163, 86, 211, 171, 47, 58, 59, 248, 36, 58, 59, 243, 82, - 58, 59, 242, 210, 58, 59, 243, 81, 58, 59, 242, 146, 58, 59, 243, 17, 58, - 59, 242, 209, 58, 59, 243, 80, 58, 59, 242, 114, 58, 59, 242, 241, 58, - 59, 242, 177, 58, 59, 243, 48, 58, 59, 242, 145, 58, 59, 243, 16, 58, 59, - 242, 208, 58, 59, 243, 79, 58, 59, 242, 98, 58, 59, 242, 225, 58, 59, - 242, 161, 58, 59, 243, 32, 58, 59, 242, 129, 58, 59, 243, 0, 58, 59, 242, - 192, 58, 59, 243, 63, 58, 59, 242, 113, 58, 59, 242, 240, 58, 59, 242, - 176, 58, 59, 243, 47, 58, 59, 242, 144, 58, 59, 243, 15, 58, 59, 242, - 207, 58, 59, 243, 78, 58, 59, 242, 90, 58, 59, 242, 217, 58, 59, 242, - 153, 58, 59, 243, 24, 58, 59, 242, 121, 58, 59, 242, 248, 58, 59, 242, - 184, 58, 59, 243, 55, 58, 59, 242, 105, 58, 59, 242, 232, 58, 59, 242, - 168, 58, 59, 243, 39, 58, 59, 242, 136, 58, 59, 243, 7, 58, 59, 242, 199, - 58, 59, 243, 70, 58, 59, 242, 97, 58, 59, 242, 224, 58, 59, 242, 160, 58, - 59, 243, 31, 58, 59, 242, 128, 58, 59, 242, 255, 58, 59, 242, 191, 58, - 59, 243, 62, 58, 59, 242, 112, 58, 59, 242, 239, 58, 59, 242, 175, 58, - 59, 243, 46, 58, 59, 242, 143, 58, 59, 243, 14, 58, 59, 242, 206, 58, 59, - 243, 77, 58, 59, 242, 86, 58, 59, 242, 213, 58, 59, 242, 149, 58, 59, - 243, 20, 58, 59, 242, 117, 58, 59, 242, 244, 58, 59, 242, 180, 58, 59, - 243, 51, 58, 59, 242, 101, 58, 59, 242, 228, 58, 59, 242, 164, 58, 59, - 243, 35, 58, 59, 242, 132, 58, 59, 243, 3, 58, 59, 242, 195, 58, 59, 243, - 66, 58, 59, 242, 93, 58, 59, 242, 220, 58, 59, 242, 156, 58, 59, 243, 27, - 58, 59, 242, 124, 58, 59, 242, 251, 58, 59, 242, 187, 58, 59, 243, 58, - 58, 59, 242, 108, 58, 59, 242, 235, 58, 59, 242, 171, 58, 59, 243, 42, - 58, 59, 242, 139, 58, 59, 243, 10, 58, 59, 242, 202, 58, 59, 243, 73, 58, - 59, 242, 89, 58, 59, 242, 216, 58, 59, 242, 152, 58, 59, 243, 23, 58, 59, - 242, 120, 58, 59, 242, 247, 58, 59, 242, 183, 58, 59, 243, 54, 58, 59, - 242, 104, 58, 59, 242, 231, 58, 59, 242, 167, 58, 59, 243, 38, 58, 59, - 242, 135, 58, 59, 243, 6, 58, 59, 242, 198, 58, 59, 243, 69, 58, 59, 242, - 96, 58, 59, 242, 223, 58, 59, 242, 159, 58, 59, 243, 30, 58, 59, 242, - 127, 58, 59, 242, 254, 58, 59, 242, 190, 58, 59, 243, 61, 58, 59, 242, - 111, 58, 59, 242, 238, 58, 59, 242, 174, 58, 59, 243, 45, 58, 59, 242, - 142, 58, 59, 243, 13, 58, 59, 242, 205, 58, 59, 243, 76, 58, 59, 242, 84, - 58, 59, 242, 211, 58, 59, 242, 147, 58, 59, 243, 18, 58, 59, 242, 115, - 58, 59, 242, 242, 58, 59, 242, 178, 58, 59, 243, 49, 58, 59, 242, 99, 58, - 59, 242, 226, 58, 59, 242, 162, 58, 59, 243, 33, 58, 59, 242, 130, 58, - 59, 243, 1, 58, 59, 242, 193, 58, 59, 243, 64, 58, 59, 242, 91, 58, 59, - 242, 218, 58, 59, 242, 154, 58, 59, 243, 25, 58, 59, 242, 122, 58, 59, - 242, 249, 58, 59, 242, 185, 58, 59, 243, 56, 58, 59, 242, 106, 58, 59, - 242, 233, 58, 59, 242, 169, 58, 59, 243, 40, 58, 59, 242, 137, 58, 59, - 243, 8, 58, 59, 242, 200, 58, 59, 243, 71, 58, 59, 242, 87, 58, 59, 242, - 214, 58, 59, 242, 150, 58, 59, 243, 21, 58, 59, 242, 118, 58, 59, 242, - 245, 58, 59, 242, 181, 58, 59, 243, 52, 58, 59, 242, 102, 58, 59, 242, - 229, 58, 59, 242, 165, 58, 59, 243, 36, 58, 59, 242, 133, 58, 59, 243, 4, - 58, 59, 242, 196, 58, 59, 243, 67, 58, 59, 242, 94, 58, 59, 242, 221, 58, - 59, 242, 157, 58, 59, 243, 28, 58, 59, 242, 125, 58, 59, 242, 252, 58, - 59, 242, 188, 58, 59, 243, 59, 58, 59, 242, 109, 58, 59, 242, 236, 58, - 59, 242, 172, 58, 59, 243, 43, 58, 59, 242, 140, 58, 59, 243, 11, 58, 59, - 242, 203, 58, 59, 243, 74, 58, 59, 242, 85, 58, 59, 242, 212, 58, 59, - 242, 148, 58, 59, 243, 19, 58, 59, 242, 116, 58, 59, 242, 243, 58, 59, - 242, 179, 58, 59, 243, 50, 58, 59, 242, 100, 58, 59, 242, 227, 58, 59, - 242, 163, 58, 59, 243, 34, 58, 59, 242, 131, 58, 59, 243, 2, 58, 59, 242, - 194, 58, 59, 243, 65, 58, 59, 242, 92, 58, 59, 242, 219, 58, 59, 242, - 155, 58, 59, 243, 26, 58, 59, 242, 123, 58, 59, 242, 250, 58, 59, 242, - 186, 58, 59, 243, 57, 58, 59, 242, 107, 58, 59, 242, 234, 58, 59, 242, - 170, 58, 59, 243, 41, 58, 59, 242, 138, 58, 59, 243, 9, 58, 59, 242, 201, - 58, 59, 243, 72, 58, 59, 242, 88, 58, 59, 242, 215, 58, 59, 242, 151, 58, - 59, 243, 22, 58, 59, 242, 119, 58, 59, 242, 246, 58, 59, 242, 182, 58, - 59, 243, 53, 58, 59, 242, 103, 58, 59, 242, 230, 58, 59, 242, 166, 58, - 59, 243, 37, 58, 59, 242, 134, 58, 59, 243, 5, 58, 59, 242, 197, 58, 59, - 243, 68, 58, 59, 242, 95, 58, 59, 242, 222, 58, 59, 242, 158, 58, 59, - 243, 29, 58, 59, 242, 126, 58, 59, 242, 253, 58, 59, 242, 189, 58, 59, - 243, 60, 58, 59, 242, 110, 58, 59, 242, 237, 58, 59, 242, 173, 58, 59, - 243, 44, 58, 59, 242, 141, 58, 59, 243, 12, 58, 59, 242, 204, 58, 59, - 243, 75, 86, 207, 134, 53, 3, 80, 95, 86, 207, 134, 53, 3, 52, 80, 95, - 96, 52, 53, 3, 80, 95, 86, 52, 53, 3, 80, 95, 49, 50, 52, 53, 3, 80, 95, - 86, 207, 134, 53, 239, 120, 142, 96, 52, 53, 239, 120, 142, 86, 52, 53, - 239, 120, 142, 183, 53, 3, 236, 106, 95, 177, 53, 3, 236, 106, 95, 177, - 208, 70, 47, 183, 208, 70, 47, 96, 52, 244, 145, 47, 86, 52, 244, 145, - 47, 96, 208, 70, 244, 145, 47, 86, 208, 70, 244, 145, 47, 86, 207, 134, - 208, 70, 244, 145, 47, 86, 53, 3, 242, 83, 211, 77, 177, 53, 208, 173, - 142, 183, 53, 208, 173, 142, 86, 53, 3, 209, 249, 3, 80, 95, 86, 53, 3, - 209, 249, 3, 52, 80, 95, 86, 207, 134, 53, 3, 209, 248, 86, 207, 134, 53, - 3, 209, 249, 3, 80, 95, 86, 207, 134, 53, 3, 209, 249, 3, 52, 80, 95, 96, - 250, 96, 86, 250, 96, 96, 52, 250, 96, 86, 52, 250, 96, 96, 53, 208, 173, - 62, 243, 221, 86, 53, 208, 173, 62, 243, 221, 96, 53, 239, 120, 248, 231, - 208, 173, 62, 243, 221, 86, 53, 239, 120, 248, 231, 208, 173, 62, 243, - 221, 153, 204, 46, 25, 211, 238, 241, 176, 47, 153, 241, 176, 25, 211, - 238, 204, 46, 47, 153, 204, 46, 53, 3, 113, 153, 241, 176, 53, 3, 113, - 211, 238, 241, 176, 53, 3, 113, 211, 238, 204, 46, 53, 3, 113, 153, 204, - 46, 53, 25, 153, 241, 176, 47, 153, 241, 176, 53, 25, 211, 238, 241, 176, - 47, 211, 238, 241, 176, 53, 25, 211, 238, 204, 46, 47, 211, 238, 204, 46, - 53, 25, 153, 204, 46, 47, 215, 245, 243, 228, 245, 124, 240, 84, 243, - 227, 240, 84, 243, 228, 245, 124, 215, 245, 243, 227, 211, 238, 241, 176, - 53, 245, 124, 153, 241, 176, 47, 153, 241, 176, 53, 245, 124, 211, 238, - 241, 176, 47, 240, 84, 243, 228, 245, 124, 153, 241, 176, 47, 215, 245, - 243, 228, 245, 124, 211, 238, 241, 176, 47, 153, 241, 176, 53, 245, 124, - 153, 204, 46, 47, 153, 204, 46, 53, 245, 124, 153, 241, 176, 47, 204, 76, - 53, 218, 59, 243, 164, 216, 16, 53, 218, 59, 86, 209, 84, 245, 84, 206, - 212, 53, 218, 59, 86, 209, 84, 245, 84, 242, 68, 53, 218, 59, 183, 209, - 84, 245, 84, 227, 212, 53, 218, 59, 183, 209, 84, 245, 84, 216, 5, 216, - 8, 250, 129, 246, 18, 47, 227, 215, 250, 129, 250, 194, 47, 208, 145, - 250, 129, 250, 194, 47, 247, 248, 250, 129, 250, 194, 47, 208, 145, 250, - 129, 246, 18, 53, 3, 224, 102, 208, 145, 250, 129, 250, 194, 53, 3, 218, - 76, 226, 251, 50, 213, 145, 246, 18, 47, 226, 251, 49, 213, 145, 250, - 194, 47, 250, 194, 246, 16, 246, 62, 47, 246, 18, 246, 16, 246, 62, 47, - 86, 53, 87, 212, 228, 96, 47, 96, 53, 87, 212, 228, 86, 47, 212, 228, 86, - 53, 87, 96, 47, 86, 53, 3, 91, 56, 96, 53, 3, 91, 56, 86, 53, 209, 25, - 203, 196, 49, 50, 53, 209, 25, 5, 246, 61, 177, 207, 134, 53, 239, 120, - 5, 246, 61, 49, 150, 112, 50, 150, 121, 237, 86, 49, 150, 121, 50, 150, - 112, 237, 86, 112, 150, 50, 121, 150, 49, 237, 86, 112, 150, 49, 121, - 150, 50, 237, 86, 49, 150, 112, 50, 150, 112, 237, 86, 112, 150, 50, 121, - 150, 50, 237, 86, 49, 150, 121, 50, 150, 121, 237, 86, 112, 150, 49, 121, - 150, 49, 237, 86, 96, 237, 87, 3, 150, 112, 208, 173, 142, 86, 237, 87, - 3, 150, 112, 208, 173, 142, 177, 237, 87, 3, 150, 50, 208, 173, 142, 183, - 237, 87, 3, 150, 50, 208, 173, 142, 96, 237, 87, 3, 150, 121, 208, 173, - 142, 86, 237, 87, 3, 150, 121, 208, 173, 142, 177, 237, 87, 3, 150, 49, - 208, 173, 142, 183, 237, 87, 3, 150, 49, 208, 173, 142, 96, 237, 87, 3, - 150, 112, 239, 120, 142, 86, 237, 87, 3, 150, 112, 239, 120, 142, 177, - 237, 87, 3, 150, 50, 239, 120, 142, 183, 237, 87, 3, 150, 50, 239, 120, - 142, 96, 237, 87, 3, 150, 121, 239, 120, 142, 86, 237, 87, 3, 150, 121, - 239, 120, 142, 177, 237, 87, 3, 150, 49, 239, 120, 142, 183, 237, 87, 3, - 150, 49, 239, 120, 142, 96, 237, 87, 3, 150, 112, 87, 96, 237, 87, 3, - 150, 242, 70, 177, 237, 87, 3, 150, 49, 248, 110, 177, 237, 87, 3, 150, - 216, 16, 86, 237, 87, 3, 150, 112, 87, 86, 237, 87, 3, 150, 242, 70, 183, - 237, 87, 3, 150, 49, 248, 110, 183, 237, 87, 3, 150, 216, 16, 96, 237, - 87, 3, 150, 112, 87, 86, 237, 87, 3, 150, 206, 224, 96, 237, 87, 3, 150, - 121, 87, 86, 237, 87, 3, 150, 242, 70, 86, 237, 87, 3, 150, 112, 87, 96, - 237, 87, 3, 150, 206, 224, 86, 237, 87, 3, 150, 121, 87, 96, 237, 87, 3, - 150, 242, 70, 96, 237, 87, 3, 150, 112, 87, 163, 244, 144, 96, 237, 87, - 3, 150, 121, 248, 126, 163, 244, 144, 86, 237, 87, 3, 150, 112, 87, 163, - 244, 144, 86, 237, 87, 3, 150, 121, 248, 126, 163, 244, 144, 177, 237, - 87, 3, 150, 49, 248, 110, 183, 237, 87, 3, 150, 216, 16, 183, 237, 87, 3, - 150, 49, 248, 110, 177, 237, 87, 3, 150, 216, 16, 50, 52, 53, 3, 215, - 189, 237, 64, 241, 35, 2, 87, 86, 47, 208, 228, 219, 255, 87, 86, 47, 96, - 53, 87, 208, 228, 219, 254, 86, 53, 87, 208, 228, 219, 254, 86, 53, 87, - 251, 7, 156, 135, 227, 179, 87, 96, 47, 96, 53, 209, 25, 227, 178, 237, - 247, 87, 86, 47, 210, 245, 87, 86, 47, 96, 53, 209, 25, 210, 244, 210, - 198, 87, 96, 47, 49, 239, 244, 209, 248, 50, 239, 244, 209, 248, 112, - 239, 244, 209, 248, 121, 239, 244, 209, 248, 208, 70, 80, 248, 231, 244, - 43, 202, 160, 221, 164, 211, 188, 202, 160, 221, 164, 207, 121, 245, 242, - 49, 61, 245, 93, 155, 50, 61, 245, 93, 155, 49, 61, 219, 76, 50, 61, 219, - 76, 202, 160, 221, 164, 49, 231, 65, 155, 202, 160, 221, 164, 50, 231, - 65, 155, 202, 160, 221, 164, 49, 248, 65, 155, 202, 160, 221, 164, 50, - 248, 65, 155, 49, 51, 247, 227, 3, 206, 246, 50, 51, 247, 227, 3, 206, - 246, 49, 51, 247, 227, 3, 208, 255, 231, 50, 208, 145, 245, 165, 50, 51, - 247, 227, 3, 208, 255, 231, 50, 247, 248, 245, 165, 49, 51, 247, 227, 3, - 208, 255, 231, 50, 247, 248, 245, 165, 50, 51, 247, 227, 3, 208, 255, - 231, 50, 208, 145, 245, 165, 49, 250, 218, 247, 227, 3, 243, 85, 50, 250, - 218, 247, 227, 3, 243, 85, 49, 250, 129, 227, 179, 155, 50, 250, 129, - 237, 247, 155, 52, 49, 250, 129, 237, 247, 155, 52, 50, 250, 129, 227, - 179, 155, 49, 62, 208, 133, 213, 33, 155, 50, 62, 208, 133, 213, 33, 155, - 242, 83, 240, 40, 80, 202, 30, 227, 114, 225, 17, 250, 218, 220, 1, 227, - 222, 50, 250, 218, 206, 69, 3, 211, 177, 225, 17, 50, 250, 218, 3, 243, - 85, 250, 218, 3, 215, 94, 231, 6, 251, 126, 250, 217, 211, 208, 250, 218, - 220, 1, 227, 222, 211, 208, 250, 218, 220, 1, 206, 224, 207, 174, 250, - 217, 216, 73, 250, 217, 250, 218, 3, 206, 246, 216, 73, 250, 218, 3, 206, - 246, 220, 89, 250, 218, 220, 1, 206, 224, 220, 89, 250, 218, 220, 1, 242, - 70, 225, 17, 250, 218, 3, 171, 250, 107, 241, 81, 231, 50, 53, 218, 59, - 112, 25, 216, 16, 225, 17, 250, 218, 3, 171, 250, 107, 241, 81, 231, 50, - 53, 218, 59, 112, 25, 227, 222, 225, 17, 250, 218, 3, 171, 250, 107, 241, - 81, 231, 50, 53, 218, 59, 121, 25, 216, 16, 225, 17, 250, 218, 3, 171, - 250, 107, 241, 81, 231, 50, 53, 218, 59, 121, 25, 227, 222, 225, 17, 250, - 218, 3, 171, 250, 107, 241, 81, 231, 50, 53, 218, 59, 50, 25, 206, 224, - 225, 17, 250, 218, 3, 171, 250, 107, 241, 81, 231, 50, 53, 218, 59, 49, - 25, 206, 224, 225, 17, 250, 218, 3, 171, 250, 107, 241, 81, 231, 50, 53, - 218, 59, 50, 25, 242, 70, 225, 17, 250, 218, 3, 171, 250, 107, 241, 81, - 231, 50, 53, 218, 59, 49, 25, 242, 70, 216, 73, 241, 94, 213, 117, 241, - 94, 213, 118, 3, 219, 203, 241, 94, 213, 118, 3, 5, 246, 62, 55, 241, 94, - 213, 118, 3, 50, 53, 55, 241, 94, 213, 118, 3, 49, 53, 55, 246, 62, 3, - 236, 106, 142, 43, 80, 142, 43, 219, 81, 43, 216, 74, 212, 0, 43, 218, - 233, 246, 62, 243, 142, 247, 137, 236, 106, 248, 231, 25, 208, 145, 162, - 243, 142, 247, 137, 80, 142, 246, 62, 3, 210, 200, 203, 196, 43, 250, - 192, 243, 137, 54, 112, 53, 209, 25, 246, 61, 43, 61, 247, 177, 43, 247, - 177, 43, 227, 178, 43, 237, 246, 246, 62, 3, 5, 246, 62, 208, 173, 209, - 93, 216, 16, 246, 62, 3, 120, 236, 106, 211, 20, 208, 173, 209, 93, 216, - 16, 103, 215, 245, 243, 228, 212, 57, 103, 240, 84, 243, 228, 212, 57, - 103, 250, 59, 103, 5, 246, 61, 103, 211, 177, 120, 230, 98, 211, 175, - 208, 86, 3, 70, 55, 208, 86, 3, 206, 246, 215, 94, 231, 50, 208, 85, 208, - 86, 3, 213, 124, 250, 50, 247, 247, 50, 208, 86, 87, 49, 208, 85, 49, - 208, 86, 248, 110, 80, 142, 80, 248, 231, 248, 110, 50, 208, 85, 247, - 235, 3, 49, 162, 248, 43, 247, 235, 3, 50, 162, 248, 43, 62, 247, 234, - 23, 3, 49, 162, 248, 43, 23, 3, 50, 162, 248, 43, 61, 236, 40, 62, 236, - 40, 49, 204, 21, 240, 40, 50, 204, 21, 240, 40, 49, 52, 204, 21, 240, 40, - 50, 52, 204, 21, 240, 40, 231, 42, 231, 27, 208, 251, 115, 231, 27, 231, - 28, 222, 234, 3, 80, 142, 242, 77, 223, 228, 51, 3, 245, 187, 219, 208, - 231, 39, 250, 81, 212, 193, 217, 224, 241, 35, 2, 25, 212, 59, 219, 81, - 241, 35, 2, 25, 212, 59, 219, 82, 3, 208, 228, 55, 235, 154, 208, 173, - 25, 212, 59, 219, 81, 238, 48, 211, 93, 209, 81, 242, 69, 208, 86, 3, 49, - 162, 248, 43, 242, 69, 208, 86, 3, 50, 162, 248, 43, 62, 243, 222, 3, - 121, 47, 62, 226, 246, 61, 246, 62, 3, 121, 47, 62, 246, 62, 3, 121, 47, - 241, 20, 61, 211, 177, 241, 20, 62, 211, 177, 241, 20, 61, 243, 221, 241, - 20, 62, 243, 221, 241, 20, 61, 246, 61, 241, 20, 62, 246, 61, 215, 134, - 216, 74, 212, 1, 219, 254, 212, 1, 3, 219, 203, 216, 74, 212, 1, 3, 236, - 106, 95, 248, 73, 212, 0, 248, 73, 216, 74, 212, 0, 52, 218, 76, 208, 70, - 218, 76, 227, 217, 245, 86, 250, 218, 155, 216, 11, 245, 86, 250, 218, - 155, 208, 212, 224, 100, 223, 162, 43, 70, 219, 254, 223, 162, 43, 91, - 219, 254, 223, 162, 43, 23, 219, 254, 223, 162, 206, 238, 219, 255, 3, - 243, 85, 223, 162, 206, 238, 219, 255, 3, 218, 76, 223, 162, 51, 230, - 245, 219, 254, 223, 162, 51, 206, 238, 219, 254, 120, 227, 37, 25, 219, - 254, 120, 227, 37, 219, 245, 219, 254, 223, 162, 23, 219, 254, 224, 58, - 120, 210, 220, 210, 218, 3, 231, 2, 217, 58, 231, 3, 219, 254, 239, 252, - 219, 71, 231, 2, 231, 3, 3, 52, 95, 231, 3, 250, 15, 3, 212, 57, 246, 54, - 239, 99, 250, 194, 231, 0, 227, 115, 231, 1, 3, 216, 142, 219, 52, 250, - 104, 218, 53, 227, 115, 231, 1, 3, 213, 145, 219, 52, 250, 104, 218, 53, - 227, 115, 231, 1, 221, 166, 231, 44, 209, 93, 218, 53, 231, 3, 250, 104, - 34, 218, 63, 219, 254, 217, 52, 231, 3, 219, 254, 231, 3, 3, 96, 53, 3, - 113, 231, 3, 3, 23, 54, 231, 3, 3, 230, 244, 231, 3, 3, 206, 237, 231, 3, - 3, 219, 203, 231, 3, 3, 206, 246, 230, 99, 228, 8, 49, 208, 86, 219, 254, - 202, 160, 221, 164, 214, 198, 245, 223, 202, 160, 221, 164, 214, 198, - 218, 114, 202, 160, 221, 164, 214, 198, 217, 219, 91, 2, 3, 5, 246, 62, - 55, 91, 2, 3, 246, 53, 251, 139, 55, 91, 2, 3, 208, 228, 55, 91, 2, 3, - 70, 56, 91, 2, 3, 208, 228, 56, 91, 2, 3, 210, 246, 108, 91, 2, 3, 62, - 208, 85, 224, 103, 2, 3, 245, 234, 55, 224, 103, 2, 3, 70, 56, 224, 103, - 2, 3, 240, 84, 243, 83, 224, 103, 2, 3, 215, 245, 243, 83, 91, 2, 231, - 50, 49, 162, 246, 61, 91, 2, 231, 50, 50, 162, 246, 61, 206, 54, 219, - 245, 245, 131, 217, 224, 223, 224, 2, 3, 70, 55, 223, 224, 2, 3, 206, - 246, 213, 142, 217, 225, 3, 247, 248, 246, 15, 212, 34, 217, 224, 223, - 224, 2, 231, 50, 49, 162, 246, 61, 223, 224, 2, 231, 50, 50, 162, 246, - 61, 43, 223, 224, 2, 3, 246, 53, 251, 138, 223, 224, 2, 231, 50, 52, 246, - 61, 43, 243, 137, 54, 91, 2, 231, 50, 208, 85, 224, 103, 2, 231, 50, 208, - 85, 223, 224, 2, 231, 50, 208, 85, 230, 253, 217, 224, 216, 6, 230, 253, - 217, 224, 202, 160, 221, 164, 216, 116, 245, 223, 250, 245, 219, 245, - 245, 171, 230, 245, 3, 243, 85, 206, 238, 3, 224, 103, 54, 206, 238, 3, - 219, 203, 230, 245, 3, 219, 203, 230, 245, 3, 227, 37, 250, 226, 206, - 238, 3, 227, 37, 219, 244, 206, 238, 87, 230, 244, 230, 245, 87, 206, - 237, 206, 238, 87, 248, 231, 87, 230, 244, 230, 245, 87, 248, 231, 87, - 206, 237, 206, 238, 248, 110, 25, 230, 98, 3, 206, 237, 230, 245, 248, - 110, 25, 230, 98, 3, 230, 244, 246, 16, 206, 238, 3, 213, 123, 246, 16, - 230, 245, 3, 213, 123, 52, 51, 230, 244, 52, 51, 206, 237, 246, 16, 206, - 238, 3, 213, 124, 25, 212, 34, 217, 224, 227, 37, 25, 3, 70, 55, 227, 37, - 219, 245, 3, 70, 55, 52, 227, 37, 250, 226, 52, 227, 37, 219, 244, 120, - 230, 246, 227, 37, 250, 226, 120, 230, 246, 227, 37, 219, 244, 212, 43, - 228, 8, 219, 244, 212, 43, 228, 8, 250, 226, 227, 37, 219, 245, 219, 200, - 227, 37, 250, 226, 227, 37, 25, 3, 101, 211, 77, 227, 37, 219, 245, 3, - 101, 211, 77, 227, 37, 25, 3, 236, 106, 244, 144, 227, 37, 219, 245, 3, - 236, 106, 244, 144, 227, 37, 25, 3, 52, 219, 203, 227, 37, 25, 3, 206, - 246, 227, 37, 25, 3, 52, 206, 246, 5, 206, 51, 3, 206, 246, 227, 37, 219, - 245, 3, 52, 219, 203, 227, 37, 219, 245, 3, 52, 206, 246, 202, 160, 221, - 164, 243, 94, 250, 184, 202, 160, 221, 164, 216, 179, 250, 184, 241, 35, - 2, 3, 70, 56, 235, 154, 3, 70, 55, 208, 70, 236, 106, 248, 231, 3, 52, - 80, 95, 208, 70, 236, 106, 248, 231, 3, 208, 70, 80, 95, 208, 228, 219, - 255, 3, 70, 55, 208, 228, 219, 255, 3, 215, 245, 243, 83, 212, 129, 224, - 103, 212, 128, 245, 210, 3, 70, 55, 241, 35, 3, 250, 59, 251, 7, 156, - 208, 173, 3, 246, 53, 251, 138, 250, 151, 156, 219, 245, 156, 135, 241, - 35, 2, 87, 91, 54, 91, 2, 87, 241, 35, 54, 241, 35, 2, 87, 208, 228, 219, - 254, 52, 245, 243, 241, 36, 120, 245, 203, 241, 35, 212, 143, 126, 245, - 203, 241, 35, 212, 143, 241, 35, 2, 3, 120, 187, 87, 25, 120, 187, 56, - 241, 30, 3, 239, 147, 187, 55, 227, 179, 3, 246, 62, 231, 6, 237, 247, 3, - 246, 62, 231, 6, 227, 179, 3, 217, 47, 131, 55, 237, 247, 3, 217, 47, - 131, 55, 227, 179, 219, 245, 212, 59, 156, 135, 237, 247, 219, 245, 212, - 59, 156, 135, 227, 179, 219, 245, 212, 59, 156, 208, 173, 3, 70, 231, 6, - 237, 247, 219, 245, 212, 59, 156, 208, 173, 3, 70, 231, 6, 227, 179, 219, - 245, 212, 59, 156, 208, 173, 3, 70, 55, 237, 247, 219, 245, 212, 59, 156, - 208, 173, 3, 70, 55, 227, 179, 219, 245, 212, 59, 156, 208, 173, 3, 70, - 87, 216, 16, 237, 247, 219, 245, 212, 59, 156, 208, 173, 3, 70, 87, 227, - 222, 227, 179, 219, 245, 250, 152, 237, 247, 219, 245, 250, 152, 227, - 179, 25, 212, 118, 221, 166, 156, 135, 237, 247, 25, 212, 118, 221, 166, - 156, 135, 227, 179, 25, 221, 166, 250, 152, 237, 247, 25, 221, 166, 250, - 152, 227, 179, 87, 242, 76, 156, 87, 237, 246, 237, 247, 87, 242, 76, - 156, 87, 227, 178, 227, 179, 87, 212, 129, 219, 245, 241, 36, 237, 247, - 87, 212, 129, 219, 245, 241, 36, 227, 179, 87, 212, 129, 87, 237, 246, - 237, 247, 87, 212, 129, 87, 227, 178, 227, 179, 87, 237, 247, 87, 242, - 76, 241, 36, 237, 247, 87, 227, 179, 87, 242, 76, 241, 36, 227, 179, 87, - 212, 59, 156, 87, 237, 247, 87, 212, 59, 241, 36, 237, 247, 87, 212, 59, - 156, 87, 227, 179, 87, 212, 59, 241, 36, 212, 59, 156, 208, 173, 219, - 245, 227, 178, 212, 59, 156, 208, 173, 219, 245, 237, 246, 212, 59, 156, - 208, 173, 219, 245, 227, 179, 3, 70, 231, 6, 212, 59, 156, 208, 173, 219, - 245, 237, 247, 3, 70, 231, 6, 242, 76, 156, 208, 173, 219, 245, 227, 178, - 242, 76, 156, 208, 173, 219, 245, 237, 246, 242, 76, 212, 59, 156, 208, - 173, 219, 245, 227, 178, 242, 76, 212, 59, 156, 208, 173, 219, 245, 237, - 246, 212, 129, 219, 245, 227, 178, 212, 129, 219, 245, 237, 246, 212, - 129, 87, 227, 179, 87, 241, 35, 54, 212, 129, 87, 237, 247, 87, 241, 35, - 54, 52, 222, 221, 227, 178, 52, 222, 221, 237, 246, 52, 222, 221, 227, - 179, 3, 206, 246, 237, 247, 219, 200, 227, 178, 237, 247, 248, 110, 227, - 178, 227, 179, 246, 16, 247, 137, 245, 87, 237, 247, 246, 16, 247, 137, - 245, 87, 227, 179, 246, 16, 247, 137, 245, 88, 87, 212, 59, 241, 36, 237, - 247, 246, 16, 247, 137, 245, 88, 87, 212, 59, 241, 36, 212, 35, 209, 97, - 228, 6, 209, 97, 212, 35, 209, 98, 219, 245, 156, 135, 228, 6, 209, 98, - 219, 245, 156, 135, 241, 35, 2, 3, 247, 170, 55, 217, 250, 87, 212, 118, - 241, 35, 54, 210, 237, 87, 212, 118, 241, 35, 54, 217, 250, 87, 212, 118, - 221, 166, 156, 135, 210, 237, 87, 212, 118, 221, 166, 156, 135, 217, 250, - 87, 241, 35, 54, 210, 237, 87, 241, 35, 54, 217, 250, 87, 221, 166, 156, - 135, 210, 237, 87, 221, 166, 156, 135, 217, 250, 87, 251, 7, 156, 135, - 210, 237, 87, 251, 7, 156, 135, 217, 250, 87, 221, 166, 251, 7, 156, 135, - 210, 237, 87, 221, 166, 251, 7, 156, 135, 52, 217, 249, 52, 210, 236, - 210, 245, 3, 243, 85, 210, 198, 3, 243, 85, 210, 245, 3, 91, 2, 56, 210, - 198, 3, 91, 2, 56, 210, 245, 3, 223, 224, 2, 56, 210, 198, 3, 223, 224, - 2, 56, 210, 245, 76, 219, 245, 156, 208, 173, 3, 70, 55, 210, 198, 76, - 219, 245, 156, 208, 173, 3, 70, 55, 210, 245, 76, 87, 241, 35, 54, 210, - 198, 76, 87, 241, 35, 54, 210, 245, 76, 87, 208, 228, 219, 254, 210, 198, - 76, 87, 208, 228, 219, 254, 210, 245, 76, 87, 251, 7, 156, 135, 210, 198, - 76, 87, 251, 7, 156, 135, 210, 245, 76, 87, 221, 166, 156, 135, 210, 198, - 76, 87, 221, 166, 156, 135, 51, 49, 171, 98, 219, 254, 51, 50, 171, 98, - 219, 254, 246, 16, 210, 244, 246, 16, 210, 197, 246, 16, 210, 245, 219, - 245, 156, 135, 246, 16, 210, 198, 219, 245, 156, 135, 210, 245, 87, 210, - 197, 210, 198, 87, 210, 244, 210, 245, 87, 210, 244, 210, 198, 87, 210, - 197, 210, 198, 248, 110, 210, 244, 210, 198, 248, 110, 25, 230, 98, 247, - 137, 244, 145, 3, 210, 244, 241, 115, 76, 220, 1, 242, 68, 218, 104, 3, - 209, 177, 208, 144, 208, 102, 230, 244, 239, 160, 221, 181, 212, 228, 49, - 210, 3, 212, 228, 121, 210, 3, 212, 228, 112, 210, 3, 218, 234, 3, 194, - 80, 248, 231, 208, 70, 50, 207, 173, 52, 80, 248, 231, 49, 207, 173, 80, - 248, 231, 52, 49, 207, 173, 52, 80, 248, 231, 52, 49, 207, 173, 163, 244, - 145, 239, 120, 49, 224, 245, 76, 52, 206, 38, 212, 228, 121, 210, 4, 3, - 219, 203, 212, 228, 112, 210, 4, 3, 206, 246, 212, 228, 112, 210, 4, 87, - 212, 228, 121, 210, 3, 52, 121, 210, 3, 52, 112, 210, 3, 52, 211, 32, - 221, 166, 54, 216, 73, 52, 211, 32, 221, 166, 54, 243, 104, 221, 166, - 243, 144, 3, 216, 73, 222, 233, 212, 57, 80, 227, 115, 3, 246, 62, 55, - 80, 227, 115, 3, 246, 62, 56, 121, 210, 4, 3, 246, 62, 56, 219, 82, 3, - 236, 106, 95, 219, 82, 3, 208, 228, 219, 254, 208, 70, 80, 248, 231, 248, - 67, 216, 117, 208, 70, 80, 248, 231, 3, 236, 106, 95, 208, 70, 245, 243, - 219, 254, 208, 70, 222, 221, 227, 178, 208, 70, 222, 221, 237, 246, 242, - 76, 212, 59, 227, 179, 219, 245, 156, 135, 242, 76, 212, 59, 237, 247, - 219, 245, 156, 135, 208, 70, 212, 1, 248, 67, 216, 117, 228, 8, 208, 70, - 80, 248, 231, 219, 254, 52, 212, 1, 219, 254, 61, 80, 142, 223, 162, 61, - 80, 142, 153, 241, 176, 61, 47, 153, 204, 46, 61, 47, 211, 238, 241, 176, - 61, 47, 211, 238, 204, 46, 61, 47, 49, 50, 61, 47, 96, 62, 47, 177, 62, - 47, 183, 62, 47, 153, 241, 176, 62, 47, 153, 204, 46, 62, 47, 211, 238, - 241, 176, 62, 47, 211, 238, 204, 46, 62, 47, 49, 50, 62, 47, 112, 121, - 62, 47, 86, 53, 3, 208, 211, 242, 68, 86, 53, 3, 208, 211, 206, 212, 96, - 53, 3, 208, 211, 242, 68, 96, 53, 3, 208, 211, 206, 212, 51, 3, 208, 145, - 162, 248, 43, 51, 3, 247, 248, 162, 248, 43, 51, 3, 206, 221, 50, 243, - 228, 162, 248, 43, 51, 3, 226, 251, 49, 243, 228, 162, 248, 43, 243, 222, - 3, 49, 162, 248, 43, 243, 222, 3, 50, 162, 248, 43, 243, 222, 3, 208, - 145, 162, 248, 43, 243, 222, 3, 247, 248, 162, 248, 43, 242, 83, 211, - 177, 62, 228, 8, 211, 177, 61, 228, 8, 211, 177, 62, 205, 242, 5, 211, - 177, 61, 205, 242, 5, 211, 177, 62, 218, 255, 61, 218, 255, 61, 237, 17, - 62, 237, 17, 236, 106, 62, 237, 17, 62, 228, 8, 246, 61, 62, 225, 10, - 243, 221, 61, 225, 10, 243, 221, 62, 225, 10, 226, 246, 61, 225, 10, 226, - 246, 62, 5, 243, 221, 62, 5, 226, 246, 61, 5, 226, 246, 62, 236, 106, - 241, 109, 61, 236, 106, 241, 109, 62, 80, 241, 109, 61, 80, 241, 109, 49, - 53, 3, 5, 246, 61, 126, 96, 250, 91, 49, 53, 3, 43, 218, 76, 163, 96, - 211, 171, 47, 96, 207, 134, 53, 3, 80, 95, 96, 207, 134, 53, 3, 52, 80, - 95, 96, 207, 134, 53, 239, 120, 142, 96, 207, 134, 208, 70, 244, 145, 47, - 96, 53, 3, 242, 83, 211, 77, 96, 53, 3, 209, 249, 3, 80, 95, 96, 53, 3, - 209, 249, 3, 52, 80, 95, 96, 207, 134, 53, 3, 209, 248, 96, 207, 134, 53, - 3, 209, 249, 3, 80, 95, 96, 207, 134, 53, 3, 209, 249, 3, 52, 80, 95, 96, - 53, 209, 25, 203, 196, 204, 76, 53, 218, 59, 243, 164, 227, 222, 241, 35, - 2, 87, 96, 47, 216, 74, 208, 228, 219, 255, 87, 96, 47, 96, 53, 87, 216, - 74, 251, 7, 156, 135, 86, 53, 209, 25, 237, 246, 86, 53, 209, 25, 210, - 197, 96, 217, 58, 47, 86, 217, 58, 47, 216, 74, 208, 228, 219, 255, 87, - 86, 47, 86, 53, 87, 216, 74, 251, 7, 156, 135, 208, 228, 219, 255, 87, - 96, 47, 96, 53, 87, 251, 7, 156, 135, 96, 53, 87, 216, 74, 208, 228, 219, - 254, 86, 53, 87, 216, 74, 208, 228, 219, 254, 183, 208, 84, 202, 30, 47, - 212, 228, 212, 59, 153, 47, 212, 228, 249, 22, 211, 238, 47, 61, 225, 10, - 211, 94, 62, 5, 211, 94, 61, 5, 211, 94, 62, 216, 11, 218, 255, 61, 216, - 11, 218, 255, 79, 228, 8, 246, 61, 79, 219, 205, 3, 219, 205, 231, 6, 79, - 246, 62, 3, 246, 62, 231, 6, 79, 246, 61, 79, 43, 214, 254, 212, 59, 153, - 53, 3, 236, 115, 237, 64, 249, 22, 211, 238, 53, 3, 236, 115, 209, 248, - 212, 59, 153, 53, 3, 236, 106, 209, 248, 249, 22, 211, 238, 53, 3, 236, - 106, 209, 248, 248, 118, 53, 218, 59, 183, 209, 84, 153, 241, 175, 212, - 228, 248, 118, 53, 218, 59, 183, 209, 84, 153, 241, 175, 96, 208, 84, 47, - 177, 208, 84, 47, 86, 208, 84, 47, 183, 208, 84, 47, 49, 50, 208, 84, 47, - 112, 121, 208, 84, 47, 153, 204, 46, 208, 84, 47, 153, 241, 176, 208, 84, - 47, 211, 238, 241, 176, 208, 84, 47, 211, 238, 204, 46, 208, 84, 47, 96, - 208, 84, 244, 143, 47, 177, 208, 84, 244, 143, 47, 86, 208, 84, 244, 143, - 47, 183, 208, 84, 244, 143, 47, 246, 18, 208, 84, 171, 246, 62, 47, 250, - 194, 208, 84, 171, 246, 62, 47, 96, 208, 84, 53, 208, 173, 142, 177, 208, - 84, 53, 208, 173, 142, 86, 208, 84, 53, 208, 173, 142, 183, 208, 84, 53, - 208, 173, 142, 153, 204, 46, 208, 84, 53, 208, 173, 142, 153, 241, 176, - 208, 84, 53, 208, 173, 142, 211, 238, 241, 176, 208, 84, 53, 208, 173, - 142, 211, 238, 204, 46, 208, 84, 53, 208, 173, 142, 96, 208, 84, 53, 3, - 52, 236, 106, 95, 177, 208, 84, 53, 3, 52, 236, 106, 95, 86, 208, 84, 53, - 3, 52, 236, 106, 95, 183, 208, 84, 53, 3, 52, 236, 106, 95, 236, 106, - 210, 11, 229, 151, 80, 210, 11, 229, 151, 96, 208, 84, 53, 115, 86, 208, - 84, 47, 177, 208, 84, 53, 96, 76, 183, 208, 84, 47, 86, 208, 84, 53, 115, - 96, 208, 84, 47, 183, 208, 84, 53, 96, 76, 177, 208, 84, 47, 96, 208, 84, - 219, 146, 250, 91, 177, 208, 84, 219, 146, 250, 91, 86, 208, 84, 219, - 146, 250, 91, 183, 208, 84, 219, 146, 250, 91, 96, 62, 43, 61, 47, 177, - 62, 43, 61, 47, 86, 62, 43, 61, 47, 183, 62, 43, 61, 47, 250, 194, 208, - 84, 50, 207, 92, 47, 250, 194, 208, 84, 247, 248, 207, 92, 47, 250, 194, - 208, 84, 49, 207, 92, 47, 250, 194, 208, 84, 208, 145, 207, 92, 47, 216, - 78, 227, 222, 216, 78, 216, 16, 222, 212, 227, 222, 222, 212, 216, 16, - 239, 147, 245, 166, 250, 92, 246, 57, 250, 193, 86, 62, 47, 209, 31, 208, - 143, 96, 241, 31, 250, 94, 209, 31, 216, 12, 177, 241, 31, 250, 94, 209, - 31, 208, 143, 86, 241, 31, 250, 94, 209, 31, 227, 218, 183, 241, 31, 250, - 94, 62, 96, 241, 31, 250, 94, 62, 177, 241, 31, 250, 94, 62, 86, 241, 31, - 250, 94, 62, 183, 241, 31, 250, 94, 183, 208, 84, 53, 3, 163, 208, 211, - 227, 212, 183, 208, 84, 53, 3, 163, 208, 211, 216, 5, 177, 208, 84, 53, - 3, 163, 208, 211, 227, 212, 177, 208, 84, 53, 3, 163, 208, 211, 216, 5, - 96, 208, 84, 53, 3, 163, 208, 211, 206, 212, 86, 208, 84, 53, 3, 163, - 208, 211, 206, 212, 96, 208, 84, 53, 3, 163, 208, 211, 242, 68, 86, 208, - 84, 53, 3, 163, 208, 211, 242, 68, 62, 245, 86, 183, 25, 96, 47, 62, 245, - 86, 183, 25, 86, 47, 62, 245, 86, 177, 25, 96, 47, 62, 245, 86, 177, 25, - 86, 47, 62, 245, 86, 96, 25, 177, 47, 62, 245, 86, 86, 25, 177, 47, 62, - 245, 86, 96, 25, 183, 47, 62, 245, 86, 86, 25, 183, 47, 216, 55, 53, 121, - 227, 222, 216, 55, 53, 121, 216, 16, 216, 55, 53, 112, 227, 222, 216, 55, - 53, 112, 216, 16, 216, 55, 53, 49, 206, 224, 216, 55, 53, 50, 206, 224, - 216, 55, 53, 49, 242, 70, 216, 55, 53, 50, 242, 70, 177, 61, 53, 239, - 120, 248, 231, 3, 236, 106, 142, 112, 250, 95, 231, 50, 34, 216, 144, - 247, 233, 248, 248, 98, 3, 157, 203, 196, 43, 203, 196, 43, 26, 203, 196, - 62, 51, 246, 215, 62, 243, 222, 246, 215, 207, 174, 62, 218, 255, 236, - 106, 62, 220, 81, 62, 220, 81, 62, 225, 10, 206, 223, 208, 86, 246, 215, - 62, 225, 10, 242, 69, 208, 86, 246, 215, 62, 225, 10, 227, 217, 208, 86, - 246, 215, 62, 225, 10, 216, 11, 208, 86, 246, 215, 208, 145, 162, 62, - 246, 61, 247, 248, 162, 62, 246, 61, 157, 239, 147, 218, 61, 62, 245, 82, - 215, 198, 157, 239, 147, 218, 61, 62, 245, 82, 61, 239, 147, 218, 61, - 245, 82, 215, 198, 61, 239, 147, 218, 61, 245, 82, 51, 218, 34, 231, 31, - 206, 250, 54, 96, 207, 134, 53, 3, 208, 86, 250, 93, 177, 207, 134, 53, - 3, 208, 86, 250, 93, 86, 207, 134, 53, 3, 208, 86, 250, 93, 183, 207, - 134, 53, 3, 208, 86, 250, 93, 180, 6, 1, 250, 0, 180, 6, 1, 247, 181, - 180, 6, 1, 206, 53, 180, 6, 1, 238, 50, 180, 6, 1, 243, 108, 180, 6, 1, - 203, 24, 180, 6, 1, 202, 64, 180, 6, 1, 241, 250, 180, 6, 1, 202, 89, - 180, 6, 1, 230, 188, 180, 6, 1, 81, 230, 188, 180, 6, 1, 75, 180, 6, 1, - 243, 128, 180, 6, 1, 230, 10, 180, 6, 1, 227, 79, 180, 6, 1, 223, 167, - 180, 6, 1, 223, 69, 180, 6, 1, 220, 20, 180, 6, 1, 218, 56, 180, 6, 1, - 215, 244, 180, 6, 1, 212, 41, 180, 6, 1, 207, 161, 180, 6, 1, 207, 10, - 180, 6, 1, 239, 123, 180, 6, 1, 237, 23, 180, 6, 1, 219, 217, 180, 6, 1, - 219, 34, 180, 6, 1, 212, 202, 180, 6, 1, 207, 255, 180, 6, 1, 246, 104, - 180, 6, 1, 213, 90, 180, 6, 1, 203, 30, 180, 6, 1, 203, 32, 180, 6, 1, - 203, 64, 180, 6, 1, 211, 204, 152, 180, 6, 1, 202, 213, 180, 6, 1, 5, - 202, 183, 180, 6, 1, 5, 202, 184, 3, 209, 248, 180, 6, 1, 202, 247, 180, - 6, 1, 230, 229, 5, 202, 183, 180, 6, 1, 248, 73, 202, 183, 180, 6, 1, - 230, 229, 248, 73, 202, 183, 180, 6, 1, 239, 235, 180, 6, 1, 230, 186, - 180, 6, 1, 212, 201, 180, 6, 1, 208, 60, 63, 180, 6, 1, 227, 252, 223, - 167, 180, 5, 1, 250, 0, 180, 5, 1, 247, 181, 180, 5, 1, 206, 53, 180, 5, - 1, 238, 50, 180, 5, 1, 243, 108, 180, 5, 1, 203, 24, 180, 5, 1, 202, 64, - 180, 5, 1, 241, 250, 180, 5, 1, 202, 89, 180, 5, 1, 230, 188, 180, 5, 1, - 81, 230, 188, 180, 5, 1, 75, 180, 5, 1, 243, 128, 180, 5, 1, 230, 10, - 180, 5, 1, 227, 79, 180, 5, 1, 223, 167, 180, 5, 1, 223, 69, 180, 5, 1, - 220, 20, 180, 5, 1, 218, 56, 180, 5, 1, 215, 244, 180, 5, 1, 212, 41, - 180, 5, 1, 207, 161, 180, 5, 1, 207, 10, 180, 5, 1, 239, 123, 180, 5, 1, - 237, 23, 180, 5, 1, 219, 217, 180, 5, 1, 219, 34, 180, 5, 1, 212, 202, - 180, 5, 1, 207, 255, 180, 5, 1, 246, 104, 180, 5, 1, 213, 90, 180, 5, 1, - 203, 30, 180, 5, 1, 203, 32, 180, 5, 1, 203, 64, 180, 5, 1, 211, 204, - 152, 180, 5, 1, 202, 213, 180, 5, 1, 5, 202, 183, 180, 5, 1, 5, 202, 184, - 3, 209, 248, 180, 5, 1, 202, 247, 180, 5, 1, 230, 229, 5, 202, 183, 180, - 5, 1, 248, 73, 202, 183, 180, 5, 1, 230, 229, 248, 73, 202, 183, 180, 5, - 1, 239, 235, 180, 5, 1, 230, 186, 180, 5, 1, 212, 201, 180, 5, 1, 208, - 60, 63, 180, 5, 1, 227, 252, 223, 167, 8, 6, 1, 228, 131, 3, 52, 142, 8, - 5, 1, 228, 131, 3, 52, 142, 8, 6, 1, 228, 131, 3, 101, 208, 227, 8, 6, 1, - 219, 185, 3, 95, 8, 6, 1, 217, 1, 3, 209, 248, 8, 5, 1, 34, 3, 95, 8, 5, - 1, 210, 70, 3, 243, 228, 95, 8, 6, 1, 237, 172, 3, 244, 20, 8, 5, 1, 237, - 172, 3, 244, 20, 8, 6, 1, 230, 55, 3, 244, 20, 8, 5, 1, 230, 55, 3, 244, - 20, 8, 6, 1, 202, 160, 3, 244, 20, 8, 5, 1, 202, 160, 3, 244, 20, 8, 6, - 1, 251, 2, 8, 6, 1, 226, 186, 3, 113, 8, 6, 1, 207, 174, 63, 8, 6, 1, - 207, 174, 251, 2, 8, 5, 1, 206, 165, 3, 50, 113, 8, 6, 1, 204, 145, 3, - 113, 8, 5, 1, 204, 145, 3, 113, 8, 5, 1, 206, 165, 3, 245, 95, 8, 6, 1, - 162, 237, 171, 8, 5, 1, 162, 237, 171, 8, 5, 1, 209, 246, 218, 192, 8, 5, - 1, 188, 3, 221, 163, 8, 5, 1, 207, 174, 217, 1, 3, 209, 248, 8, 5, 1, - 158, 3, 124, 215, 253, 231, 6, 8, 1, 5, 6, 207, 174, 74, 8, 210, 246, 5, - 1, 230, 184, 65, 1, 6, 206, 164, 8, 6, 1, 215, 94, 3, 210, 169, 209, 248, - 8, 6, 1, 202, 160, 3, 210, 169, 209, 248, 84, 6, 1, 251, 24, 84, 5, 1, - 251, 24, 84, 6, 1, 205, 227, 84, 5, 1, 205, 227, 84, 6, 1, 238, 235, 84, - 5, 1, 238, 235, 84, 6, 1, 244, 180, 84, 5, 1, 244, 180, 84, 6, 1, 241, - 144, 84, 5, 1, 241, 144, 84, 6, 1, 211, 243, 84, 5, 1, 211, 243, 84, 6, - 1, 202, 99, 84, 5, 1, 202, 99, 84, 6, 1, 237, 80, 84, 5, 1, 237, 80, 84, - 6, 1, 209, 72, 84, 5, 1, 209, 72, 84, 6, 1, 235, 168, 84, 5, 1, 235, 168, - 84, 6, 1, 229, 252, 84, 5, 1, 229, 252, 84, 6, 1, 227, 248, 84, 5, 1, - 227, 248, 84, 6, 1, 224, 155, 84, 5, 1, 224, 155, 84, 6, 1, 222, 100, 84, - 5, 1, 222, 100, 84, 6, 1, 228, 225, 84, 5, 1, 228, 225, 84, 6, 1, 78, 84, - 5, 1, 78, 84, 6, 1, 218, 167, 84, 5, 1, 218, 167, 84, 6, 1, 215, 227, 84, - 5, 1, 215, 227, 84, 6, 1, 212, 132, 84, 5, 1, 212, 132, 84, 6, 1, 209, - 207, 84, 5, 1, 209, 207, 84, 6, 1, 207, 39, 84, 5, 1, 207, 39, 84, 6, 1, - 240, 26, 84, 5, 1, 240, 26, 84, 6, 1, 229, 122, 84, 5, 1, 229, 122, 84, - 6, 1, 217, 202, 84, 5, 1, 217, 202, 84, 6, 1, 220, 12, 84, 5, 1, 220, 12, - 84, 6, 1, 243, 226, 251, 30, 84, 5, 1, 243, 226, 251, 30, 84, 6, 1, 38, - 84, 251, 59, 84, 5, 1, 38, 84, 251, 59, 84, 6, 1, 245, 113, 241, 144, 84, - 5, 1, 245, 113, 241, 144, 84, 6, 1, 243, 226, 229, 252, 84, 5, 1, 243, - 226, 229, 252, 84, 6, 1, 243, 226, 222, 100, 84, 5, 1, 243, 226, 222, - 100, 84, 6, 1, 245, 113, 222, 100, 84, 5, 1, 245, 113, 222, 100, 84, 6, - 1, 38, 84, 220, 12, 84, 5, 1, 38, 84, 220, 12, 84, 6, 1, 214, 246, 84, 5, - 1, 214, 246, 84, 6, 1, 245, 128, 213, 35, 84, 5, 1, 245, 128, 213, 35, - 84, 6, 1, 38, 84, 213, 35, 84, 5, 1, 38, 84, 213, 35, 84, 6, 1, 38, 84, - 241, 7, 84, 5, 1, 38, 84, 241, 7, 84, 6, 1, 251, 43, 229, 127, 84, 5, 1, - 251, 43, 229, 127, 84, 6, 1, 243, 226, 236, 107, 84, 5, 1, 243, 226, 236, - 107, 84, 6, 1, 38, 84, 236, 107, 84, 5, 1, 38, 84, 236, 107, 84, 6, 1, - 38, 84, 152, 84, 5, 1, 38, 84, 152, 84, 6, 1, 228, 130, 152, 84, 5, 1, - 228, 130, 152, 84, 6, 1, 38, 84, 237, 42, 84, 5, 1, 38, 84, 237, 42, 84, - 6, 1, 38, 84, 237, 83, 84, 5, 1, 38, 84, 237, 83, 84, 6, 1, 38, 84, 238, - 230, 84, 5, 1, 38, 84, 238, 230, 84, 6, 1, 38, 84, 243, 131, 84, 5, 1, - 38, 84, 243, 131, 84, 6, 1, 38, 84, 213, 1, 84, 5, 1, 38, 84, 213, 1, 84, - 6, 1, 38, 221, 54, 213, 1, 84, 5, 1, 38, 221, 54, 213, 1, 84, 6, 1, 38, - 221, 54, 222, 151, 84, 5, 1, 38, 221, 54, 222, 151, 84, 6, 1, 38, 221, - 54, 220, 248, 84, 5, 1, 38, 221, 54, 220, 248, 84, 6, 1, 38, 221, 54, - 204, 77, 84, 5, 1, 38, 221, 54, 204, 77, 84, 16, 230, 18, 84, 16, 224, - 156, 215, 227, 84, 16, 218, 168, 215, 227, 84, 16, 211, 85, 84, 16, 209, - 208, 215, 227, 84, 16, 229, 123, 215, 227, 84, 16, 213, 2, 212, 132, 84, - 6, 1, 245, 113, 213, 35, 84, 5, 1, 245, 113, 213, 35, 84, 6, 1, 245, 113, - 238, 230, 84, 5, 1, 245, 113, 238, 230, 84, 39, 222, 101, 55, 84, 39, - 211, 197, 250, 67, 84, 39, 211, 197, 227, 186, 84, 6, 1, 248, 16, 229, - 127, 84, 5, 1, 248, 16, 229, 127, 84, 38, 221, 54, 239, 102, 211, 61, 84, - 38, 221, 54, 243, 167, 217, 47, 82, 84, 38, 221, 54, 231, 30, 217, 47, - 82, 84, 38, 221, 54, 206, 40, 243, 141, 84, 239, 138, 118, 237, 137, 84, - 239, 102, 211, 61, 84, 224, 25, 243, 141, 114, 5, 1, 250, 231, 114, 5, 1, - 248, 242, 114, 5, 1, 238, 234, 114, 5, 1, 243, 93, 114, 5, 1, 241, 92, - 114, 5, 1, 205, 213, 114, 5, 1, 202, 87, 114, 5, 1, 209, 230, 114, 5, 1, - 231, 49, 114, 5, 1, 230, 4, 114, 5, 1, 228, 2, 114, 5, 1, 225, 122, 114, - 5, 1, 223, 74, 114, 5, 1, 220, 31, 114, 5, 1, 219, 91, 114, 5, 1, 202, - 76, 114, 5, 1, 216, 202, 114, 5, 1, 214, 243, 114, 5, 1, 209, 218, 114, - 5, 1, 206, 255, 114, 5, 1, 218, 200, 114, 5, 1, 229, 132, 114, 5, 1, 238, - 110, 114, 5, 1, 217, 111, 114, 5, 1, 212, 255, 114, 5, 1, 246, 129, 114, - 5, 1, 247, 61, 114, 5, 1, 230, 133, 114, 5, 1, 246, 68, 114, 5, 1, 246, - 183, 114, 5, 1, 203, 180, 114, 5, 1, 230, 146, 114, 5, 1, 237, 154, 114, - 5, 1, 237, 67, 114, 5, 1, 236, 254, 114, 5, 1, 204, 62, 114, 5, 1, 237, - 92, 114, 5, 1, 236, 132, 114, 5, 1, 202, 249, 114, 5, 1, 251, 98, 208, - 247, 1, 198, 208, 247, 1, 203, 106, 208, 247, 1, 203, 105, 208, 247, 1, - 203, 95, 208, 247, 1, 203, 93, 208, 247, 1, 248, 112, 251, 140, 203, 88, - 208, 247, 1, 203, 88, 208, 247, 1, 203, 103, 208, 247, 1, 203, 100, 208, - 247, 1, 203, 102, 208, 247, 1, 203, 101, 208, 247, 1, 203, 15, 208, 247, - 1, 203, 97, 208, 247, 1, 203, 86, 208, 247, 1, 207, 200, 203, 86, 208, - 247, 1, 203, 83, 208, 247, 1, 203, 91, 208, 247, 1, 248, 112, 251, 140, - 203, 91, 208, 247, 1, 207, 200, 203, 91, 208, 247, 1, 203, 90, 208, 247, - 1, 203, 110, 208, 247, 1, 203, 84, 208, 247, 1, 207, 200, 203, 84, 208, - 247, 1, 203, 73, 208, 247, 1, 207, 200, 203, 73, 208, 247, 1, 203, 11, - 208, 247, 1, 203, 54, 208, 247, 1, 251, 71, 203, 54, 208, 247, 1, 207, - 200, 203, 54, 208, 247, 1, 203, 82, 208, 247, 1, 203, 81, 208, 247, 1, - 203, 78, 208, 247, 1, 207, 200, 203, 92, 208, 247, 1, 207, 200, 203, 76, - 208, 247, 1, 203, 74, 208, 247, 1, 202, 213, 208, 247, 1, 203, 71, 208, - 247, 1, 203, 70, 208, 247, 1, 203, 94, 208, 247, 1, 207, 200, 203, 94, - 208, 247, 1, 250, 4, 203, 94, 208, 247, 1, 203, 69, 208, 247, 1, 203, 67, - 208, 247, 1, 203, 68, 208, 247, 1, 203, 66, 208, 247, 1, 203, 65, 208, - 247, 1, 203, 104, 208, 247, 1, 203, 63, 208, 247, 1, 203, 61, 208, 247, - 1, 203, 60, 208, 247, 1, 203, 58, 208, 247, 1, 203, 55, 208, 247, 1, 209, - 199, 203, 55, 208, 247, 1, 203, 53, 208, 247, 1, 203, 52, 208, 247, 1, - 202, 247, 208, 247, 65, 1, 228, 103, 82, 208, 247, 213, 131, 82, 208, - 247, 109, 230, 96, 33, 4, 227, 48, 33, 4, 224, 81, 33, 4, 215, 225, 33, - 4, 212, 12, 33, 4, 212, 241, 33, 4, 248, 22, 33, 4, 208, 172, 33, 4, 245, - 253, 33, 4, 221, 189, 33, 4, 220, 232, 33, 4, 238, 45, 220, 97, 33, 4, - 202, 16, 33, 4, 243, 111, 33, 4, 244, 89, 33, 4, 230, 100, 33, 4, 209, - 46, 33, 4, 246, 115, 33, 4, 218, 179, 33, 4, 218, 68, 33, 4, 238, 125, - 33, 4, 238, 121, 33, 4, 238, 122, 33, 4, 238, 123, 33, 4, 211, 164, 33, - 4, 211, 119, 33, 4, 211, 132, 33, 4, 211, 163, 33, 4, 211, 137, 33, 4, - 211, 138, 33, 4, 211, 124, 33, 4, 247, 5, 33, 4, 246, 240, 33, 4, 246, - 242, 33, 4, 247, 4, 33, 4, 247, 2, 33, 4, 247, 3, 33, 4, 246, 241, 33, 4, - 201, 235, 33, 4, 201, 213, 33, 4, 201, 226, 33, 4, 201, 234, 33, 4, 201, - 229, 33, 4, 201, 230, 33, 4, 201, 218, 33, 4, 247, 0, 33, 4, 246, 243, - 33, 4, 246, 245, 33, 4, 246, 255, 33, 4, 246, 253, 33, 4, 246, 254, 33, - 4, 246, 244, 33, 4, 217, 13, 33, 4, 217, 3, 33, 4, 217, 9, 33, 4, 217, - 12, 33, 4, 217, 10, 33, 4, 217, 11, 33, 4, 217, 8, 33, 4, 228, 141, 33, - 4, 228, 133, 33, 4, 228, 136, 33, 4, 228, 140, 33, 4, 228, 137, 33, 4, - 228, 138, 33, 4, 228, 134, 33, 4, 203, 140, 33, 4, 203, 127, 33, 4, 203, - 135, 33, 4, 203, 139, 33, 4, 203, 137, 33, 4, 203, 138, 33, 4, 203, 134, - 33, 4, 237, 183, 33, 4, 237, 173, 33, 4, 237, 176, 33, 4, 237, 182, 33, - 4, 237, 178, 33, 4, 237, 179, 33, 4, 237, 175, 39, 36, 1, 248, 162, 39, - 36, 1, 206, 55, 39, 36, 1, 238, 105, 39, 36, 1, 244, 75, 39, 36, 1, 202, - 71, 39, 36, 1, 202, 92, 39, 36, 1, 173, 39, 36, 1, 241, 122, 39, 36, 1, - 241, 103, 39, 36, 1, 241, 92, 39, 36, 1, 78, 39, 36, 1, 219, 34, 39, 36, - 1, 241, 28, 39, 36, 1, 241, 17, 39, 36, 1, 209, 187, 39, 36, 1, 152, 39, - 36, 1, 208, 14, 39, 36, 1, 246, 170, 39, 36, 1, 213, 90, 39, 36, 1, 213, - 46, 39, 36, 1, 239, 235, 39, 36, 1, 241, 13, 39, 36, 1, 63, 39, 36, 1, - 231, 110, 39, 36, 1, 243, 129, 39, 36, 1, 224, 43, 207, 14, 39, 36, 1, - 203, 66, 39, 36, 1, 202, 213, 39, 36, 1, 230, 228, 63, 39, 36, 1, 227, - 86, 202, 183, 39, 36, 1, 248, 73, 202, 183, 39, 36, 1, 230, 228, 248, 73, - 202, 183, 50, 250, 218, 210, 241, 225, 88, 50, 250, 218, 242, 83, 210, - 241, 225, 88, 49, 210, 241, 155, 50, 210, 241, 155, 49, 242, 83, 210, - 241, 155, 50, 242, 83, 210, 241, 155, 216, 188, 230, 249, 225, 88, 216, - 188, 242, 83, 230, 249, 225, 88, 242, 83, 208, 103, 225, 88, 49, 208, - 103, 155, 50, 208, 103, 155, 216, 188, 211, 177, 49, 216, 188, 220, 33, - 155, 50, 216, 188, 220, 33, 155, 241, 162, 245, 163, 219, 87, 239, 161, - 219, 87, 216, 73, 239, 161, 219, 87, 235, 217, 242, 83, 220, 92, 183, - 250, 227, 177, 250, 227, 242, 83, 216, 11, 250, 217, 52, 220, 89, 235, - 220, 230, 239, 230, 247, 219, 135, 247, 223, 235, 221, 3, 243, 231, 208, - 228, 3, 215, 253, 55, 49, 124, 219, 79, 155, 50, 124, 219, 79, 155, 208, - 228, 3, 70, 55, 208, 228, 3, 70, 56, 49, 80, 248, 231, 3, 217, 41, 50, - 80, 248, 231, 3, 217, 41, 208, 145, 49, 162, 155, 208, 145, 50, 162, 155, - 247, 248, 49, 162, 155, 247, 248, 50, 162, 155, 49, 212, 154, 106, 155, - 50, 212, 154, 106, 155, 49, 52, 219, 76, 50, 52, 219, 76, 120, 187, 115, - 118, 70, 217, 178, 118, 70, 115, 120, 187, 217, 178, 103, 239, 147, 70, - 217, 178, 239, 233, 70, 82, 216, 73, 217, 47, 82, 80, 208, 227, 215, 253, - 218, 62, 203, 238, 213, 131, 101, 243, 85, 207, 174, 245, 233, 216, 188, - 243, 85, 216, 188, 245, 233, 207, 174, 213, 143, 244, 196, 3, 49, 237, - 224, 244, 196, 3, 50, 237, 224, 207, 174, 244, 195, 208, 145, 162, 214, - 168, 54, 207, 135, 244, 144, 209, 30, 244, 144, 211, 76, 239, 102, 211, - 61, 80, 212, 88, 243, 83, 204, 21, 80, 227, 114, 247, 46, 52, 235, 220, - 216, 73, 245, 233, 52, 226, 252, 217, 31, 82, 12, 40, 216, 100, 12, 40, - 246, 26, 12, 40, 214, 171, 105, 12, 40, 214, 171, 108, 12, 40, 214, 171, - 147, 12, 40, 218, 229, 12, 40, 247, 233, 12, 40, 210, 8, 12, 40, 229, 34, - 105, 12, 40, 229, 34, 108, 12, 40, 243, 138, 12, 40, 214, 175, 12, 40, 5, - 105, 12, 40, 5, 108, 12, 40, 228, 23, 105, 12, 40, 228, 23, 108, 12, 40, - 228, 23, 147, 12, 40, 228, 23, 149, 12, 40, 212, 24, 12, 40, 209, 33, 12, - 40, 212, 22, 105, 12, 40, 212, 22, 108, 12, 40, 237, 56, 105, 12, 40, - 237, 56, 108, 12, 40, 237, 123, 12, 40, 216, 178, 12, 40, 246, 112, 12, - 40, 210, 214, 12, 40, 224, 29, 12, 40, 244, 73, 12, 40, 224, 20, 12, 40, - 246, 44, 12, 40, 204, 81, 105, 12, 40, 204, 81, 108, 12, 40, 239, 249, - 12, 40, 219, 46, 105, 12, 40, 219, 46, 108, 12, 40, 212, 127, 162, 208, - 96, 208, 25, 12, 40, 245, 149, 12, 40, 243, 102, 12, 40, 230, 176, 12, - 40, 248, 15, 76, 246, 10, 12, 40, 240, 191, 12, 40, 211, 199, 105, 12, - 40, 211, 199, 108, 12, 40, 248, 244, 12, 40, 212, 134, 12, 40, 247, 122, - 212, 134, 12, 40, 222, 220, 105, 12, 40, 222, 220, 108, 12, 40, 222, 220, - 147, 12, 40, 222, 220, 149, 12, 40, 224, 227, 12, 40, 213, 37, 12, 40, - 216, 184, 12, 40, 240, 219, 12, 40, 220, 45, 12, 40, 247, 201, 105, 12, - 40, 247, 201, 108, 12, 40, 225, 15, 12, 40, 224, 24, 12, 40, 238, 1, 105, - 12, 40, 238, 1, 108, 12, 40, 238, 1, 147, 12, 40, 208, 245, 12, 40, 246, - 9, 12, 40, 204, 46, 105, 12, 40, 204, 46, 108, 12, 40, 247, 122, 214, - 165, 12, 40, 212, 127, 236, 53, 12, 40, 236, 53, 12, 40, 247, 122, 211, - 211, 12, 40, 247, 122, 213, 32, 12, 40, 239, 172, 12, 40, 247, 122, 247, - 23, 12, 40, 212, 127, 204, 101, 12, 40, 204, 102, 105, 12, 40, 204, 102, - 108, 12, 40, 246, 47, 12, 40, 247, 122, 238, 31, 12, 40, 163, 105, 12, - 40, 163, 108, 12, 40, 247, 122, 227, 28, 12, 40, 247, 122, 238, 216, 12, - 40, 224, 16, 105, 12, 40, 224, 16, 108, 12, 40, 216, 190, 12, 40, 248, - 25, 12, 40, 247, 122, 209, 224, 227, 228, 12, 40, 247, 122, 227, 229, 12, - 40, 247, 122, 204, 16, 12, 40, 247, 122, 239, 190, 12, 40, 241, 173, 105, - 12, 40, 241, 173, 108, 12, 40, 241, 173, 147, 12, 40, 247, 122, 241, 172, - 12, 40, 237, 64, 12, 40, 247, 122, 236, 49, 12, 40, 248, 11, 12, 40, 238, - 89, 12, 40, 247, 122, 239, 243, 12, 40, 247, 122, 248, 60, 12, 40, 247, - 122, 215, 1, 12, 40, 212, 127, 204, 38, 12, 40, 212, 127, 203, 44, 12, - 40, 247, 122, 239, 121, 12, 40, 230, 183, 240, 224, 12, 40, 247, 122, - 240, 224, 12, 40, 230, 183, 208, 146, 12, 40, 247, 122, 208, 146, 12, 40, - 230, 183, 242, 61, 12, 40, 247, 122, 242, 61, 12, 40, 207, 171, 12, 40, - 230, 183, 207, 171, 12, 40, 247, 122, 207, 171, 71, 40, 105, 71, 40, 227, - 114, 71, 40, 243, 85, 71, 40, 212, 57, 71, 40, 214, 170, 71, 40, 113, 71, - 40, 108, 71, 40, 227, 143, 71, 40, 225, 122, 71, 40, 227, 207, 71, 40, - 241, 67, 71, 40, 199, 71, 40, 121, 247, 233, 71, 40, 245, 151, 71, 40, - 235, 162, 71, 40, 210, 8, 71, 40, 171, 247, 233, 71, 40, 229, 33, 71, 40, - 218, 16, 71, 40, 203, 228, 71, 40, 211, 190, 71, 40, 50, 171, 247, 233, - 71, 40, 236, 255, 241, 87, 71, 40, 209, 152, 71, 40, 243, 138, 71, 40, - 214, 175, 71, 40, 246, 26, 71, 40, 217, 226, 71, 40, 251, 80, 71, 40, - 224, 7, 71, 40, 241, 87, 71, 40, 241, 179, 71, 40, 214, 197, 71, 40, 238, - 39, 71, 40, 238, 40, 212, 38, 71, 40, 240, 223, 71, 40, 248, 72, 71, 40, - 203, 250, 71, 40, 246, 133, 71, 40, 215, 207, 71, 40, 231, 45, 71, 40, - 212, 36, 71, 40, 228, 22, 71, 40, 245, 161, 71, 40, 211, 181, 71, 40, - 224, 12, 71, 40, 215, 241, 71, 40, 203, 235, 71, 40, 220, 25, 71, 40, - 207, 180, 71, 40, 242, 44, 71, 40, 212, 228, 209, 33, 71, 40, 242, 83, - 246, 26, 71, 40, 163, 211, 38, 71, 40, 120, 237, 99, 71, 40, 212, 234, - 71, 40, 247, 240, 71, 40, 212, 21, 71, 40, 247, 205, 71, 40, 211, 75, 71, - 40, 237, 55, 71, 40, 237, 138, 71, 40, 243, 88, 71, 40, 237, 123, 71, 40, - 247, 223, 71, 40, 216, 178, 71, 40, 214, 183, 71, 40, 243, 169, 71, 40, - 250, 9, 71, 40, 211, 177, 71, 40, 221, 165, 71, 40, 210, 214, 71, 40, - 214, 208, 71, 40, 224, 29, 71, 40, 208, 95, 71, 40, 228, 99, 71, 40, 211, - 61, 71, 40, 244, 73, 71, 40, 204, 61, 71, 40, 243, 114, 221, 165, 71, 40, - 245, 229, 71, 40, 239, 95, 71, 40, 246, 38, 71, 40, 211, 80, 71, 40, 204, - 80, 71, 40, 239, 249, 71, 40, 246, 34, 71, 40, 240, 67, 71, 40, 52, 203, - 196, 71, 40, 162, 208, 96, 208, 25, 71, 40, 212, 50, 71, 40, 240, 79, 71, - 40, 245, 149, 71, 40, 243, 102, 71, 40, 217, 223, 71, 40, 230, 176, 71, - 40, 224, 249, 71, 40, 208, 226, 71, 40, 210, 164, 71, 40, 227, 137, 71, - 40, 206, 191, 71, 40, 240, 24, 71, 40, 248, 15, 76, 246, 10, 71, 40, 212, - 158, 71, 40, 242, 83, 209, 144, 71, 40, 204, 33, 71, 40, 212, 65, 71, 40, - 243, 156, 71, 40, 240, 191, 71, 40, 211, 214, 71, 40, 47, 71, 40, 211, - 63, 71, 40, 211, 198, 71, 40, 208, 118, 71, 40, 238, 10, 71, 40, 247, 10, - 71, 40, 211, 98, 71, 40, 248, 244, 71, 40, 216, 52, 71, 40, 212, 134, 71, - 40, 230, 168, 71, 40, 222, 219, 71, 40, 213, 37, 71, 40, 240, 55, 71, 40, - 220, 45, 71, 40, 250, 226, 71, 40, 218, 83, 71, 40, 241, 183, 71, 40, - 247, 200, 71, 40, 225, 15, 71, 40, 224, 104, 71, 40, 213, 149, 71, 40, - 250, 98, 71, 40, 224, 24, 71, 40, 208, 150, 71, 40, 219, 252, 71, 40, - 248, 19, 71, 40, 211, 59, 71, 40, 245, 241, 71, 40, 238, 0, 71, 40, 208, - 245, 71, 40, 231, 9, 71, 40, 248, 31, 71, 40, 204, 102, 241, 87, 71, 40, - 246, 9, 71, 40, 204, 45, 71, 40, 214, 165, 71, 40, 236, 53, 71, 40, 211, - 211, 71, 40, 206, 79, 71, 40, 248, 157, 71, 40, 218, 131, 71, 40, 249, - 13, 71, 40, 213, 32, 71, 40, 216, 137, 71, 40, 215, 128, 71, 40, 239, - 172, 71, 40, 248, 17, 71, 40, 247, 23, 71, 40, 248, 48, 71, 40, 224, 26, - 71, 40, 204, 101, 71, 40, 246, 47, 71, 40, 204, 12, 71, 40, 243, 149, 71, - 40, 205, 214, 71, 40, 238, 31, 71, 40, 227, 28, 71, 40, 238, 216, 71, 40, - 224, 15, 71, 40, 212, 56, 71, 40, 212, 228, 209, 247, 248, 60, 71, 40, - 216, 190, 71, 40, 248, 25, 71, 40, 203, 219, 71, 40, 240, 102, 71, 40, - 227, 228, 71, 40, 209, 224, 227, 228, 71, 40, 227, 224, 71, 40, 211, 240, - 71, 40, 227, 229, 71, 40, 204, 16, 71, 40, 239, 190, 71, 40, 241, 172, - 71, 40, 237, 64, 71, 40, 239, 136, 71, 40, 236, 49, 71, 40, 248, 11, 71, - 40, 209, 233, 71, 40, 237, 145, 71, 40, 240, 17, 71, 40, 215, 30, 204, - 12, 71, 40, 247, 12, 71, 40, 238, 89, 71, 40, 239, 243, 71, 40, 248, 60, - 71, 40, 215, 1, 71, 40, 244, 58, 71, 40, 204, 38, 71, 40, 237, 34, 71, - 40, 203, 44, 71, 40, 224, 115, 71, 40, 248, 43, 71, 40, 241, 99, 71, 40, - 239, 121, 71, 40, 208, 67, 71, 40, 242, 46, 71, 40, 216, 172, 71, 40, - 221, 167, 71, 40, 240, 224, 71, 40, 208, 146, 71, 40, 242, 61, 71, 40, - 207, 171, 71, 40, 239, 193, 139, 244, 18, 167, 49, 208, 173, 216, 16, - 139, 244, 18, 167, 87, 208, 173, 56, 139, 244, 18, 167, 49, 208, 173, - 101, 25, 216, 16, 139, 244, 18, 167, 87, 208, 173, 101, 25, 56, 139, 244, - 18, 167, 239, 102, 210, 186, 139, 244, 18, 167, 210, 187, 239, 120, 55, - 139, 244, 18, 167, 210, 187, 239, 120, 56, 139, 244, 18, 167, 210, 187, - 239, 120, 227, 222, 139, 244, 18, 167, 210, 187, 239, 120, 206, 221, 227, - 222, 139, 244, 18, 167, 210, 187, 239, 120, 206, 221, 216, 16, 139, 244, - 18, 167, 210, 187, 239, 120, 226, 251, 227, 222, 139, 244, 18, 167, 219, - 202, 139, 211, 228, 139, 245, 233, 139, 239, 102, 211, 61, 243, 146, 82, - 230, 169, 231, 29, 211, 97, 97, 139, 230, 199, 82, 139, 246, 12, 82, 139, - 42, 202, 84, 49, 250, 218, 155, 50, 250, 218, 155, 49, 52, 250, 218, 155, - 50, 52, 250, 218, 155, 49, 245, 166, 155, 50, 245, 166, 155, 49, 61, 245, - 166, 155, 50, 61, 245, 166, 155, 49, 62, 227, 185, 155, 50, 62, 227, 185, - 155, 218, 29, 82, 238, 158, 82, 49, 208, 133, 213, 33, 155, 50, 208, 133, - 213, 33, 155, 49, 61, 227, 185, 155, 50, 61, 227, 185, 155, 49, 61, 208, - 133, 213, 33, 155, 50, 61, 208, 133, 213, 33, 155, 49, 61, 51, 155, 50, - 61, 51, 155, 204, 76, 244, 144, 216, 73, 52, 217, 237, 217, 31, 82, 52, - 217, 237, 217, 31, 82, 124, 52, 217, 237, 217, 31, 82, 218, 29, 131, 240, - 102, 237, 97, 221, 44, 105, 237, 97, 221, 44, 108, 237, 97, 221, 44, 147, - 237, 97, 221, 44, 149, 237, 97, 221, 44, 170, 237, 97, 221, 44, 195, 237, - 97, 221, 44, 213, 111, 237, 97, 221, 44, 199, 237, 97, 221, 44, 222, 63, - 139, 227, 167, 143, 82, 139, 215, 245, 143, 82, 139, 244, 27, 143, 82, - 139, 241, 66, 143, 82, 28, 212, 120, 70, 143, 82, 28, 52, 70, 143, 82, - 204, 72, 244, 144, 80, 230, 3, 216, 101, 82, 80, 230, 3, 216, 101, 3, - 205, 186, 211, 241, 82, 80, 230, 3, 216, 101, 131, 206, 221, 237, 137, - 80, 230, 3, 216, 101, 3, 205, 186, 211, 241, 131, 206, 221, 237, 137, 80, - 230, 3, 216, 101, 131, 226, 251, 237, 137, 43, 218, 29, 82, 139, 209, - 164, 227, 115, 240, 52, 213, 131, 97, 237, 97, 221, 44, 209, 152, 237, - 97, 221, 44, 207, 151, 237, 97, 221, 44, 209, 53, 80, 139, 230, 199, 82, - 225, 72, 82, 219, 71, 250, 251, 82, 139, 57, 231, 31, 139, 162, 240, 10, - 211, 228, 172, 1, 5, 63, 172, 1, 63, 172, 1, 5, 75, 172, 1, 75, 172, 1, - 5, 68, 172, 1, 68, 172, 1, 5, 74, 172, 1, 74, 172, 1, 5, 78, 172, 1, 78, - 172, 1, 173, 172, 1, 239, 8, 172, 1, 229, 100, 172, 1, 238, 81, 172, 1, - 228, 209, 172, 1, 237, 230, 172, 1, 229, 201, 172, 1, 238, 190, 172, 1, - 229, 26, 172, 1, 238, 39, 172, 1, 215, 36, 172, 1, 202, 116, 172, 1, 212, - 162, 172, 1, 202, 39, 172, 1, 211, 10, 172, 1, 202, 6, 172, 1, 214, 177, - 172, 1, 202, 92, 172, 1, 212, 13, 172, 1, 202, 17, 172, 1, 210, 22, 172, - 1, 244, 212, 172, 1, 209, 2, 172, 1, 243, 233, 172, 1, 5, 207, 203, 172, - 1, 207, 203, 172, 1, 242, 42, 172, 1, 209, 187, 172, 1, 244, 75, 172, 1, - 135, 172, 1, 243, 113, 172, 1, 201, 201, 172, 1, 222, 100, 172, 1, 221, - 84, 172, 1, 222, 240, 172, 1, 221, 191, 172, 1, 152, 172, 1, 249, 32, - 172, 1, 185, 172, 1, 237, 3, 172, 1, 248, 86, 172, 1, 218, 167, 172, 1, - 236, 26, 172, 1, 247, 193, 172, 1, 217, 191, 172, 1, 237, 67, 172, 1, - 248, 162, 172, 1, 219, 34, 172, 1, 236, 136, 172, 1, 248, 23, 172, 1, - 218, 69, 172, 1, 192, 172, 1, 224, 155, 172, 1, 223, 246, 172, 1, 225, - 20, 172, 1, 224, 82, 172, 1, 5, 198, 172, 1, 198, 172, 1, 5, 202, 213, - 172, 1, 202, 213, 172, 1, 5, 202, 247, 172, 1, 202, 247, 172, 1, 216, - 220, 172, 1, 216, 57, 172, 1, 215, 145, 172, 1, 216, 158, 172, 1, 215, - 227, 172, 1, 5, 204, 111, 172, 1, 204, 111, 172, 1, 204, 30, 172, 1, 204, - 62, 172, 1, 204, 0, 172, 1, 223, 163, 172, 1, 204, 163, 172, 1, 5, 173, - 172, 1, 5, 229, 201, 39, 229, 225, 205, 186, 211, 241, 82, 39, 229, 225, - 213, 148, 211, 241, 82, 229, 225, 205, 186, 211, 241, 82, 229, 225, 213, - 148, 211, 241, 82, 172, 230, 199, 82, 172, 205, 186, 230, 199, 82, 172, - 243, 192, 202, 228, 229, 225, 52, 235, 220, 67, 1, 5, 63, 67, 1, 63, 67, - 1, 5, 75, 67, 1, 75, 67, 1, 5, 68, 67, 1, 68, 67, 1, 5, 74, 67, 1, 74, - 67, 1, 5, 78, 67, 1, 78, 67, 1, 173, 67, 1, 239, 8, 67, 1, 229, 100, 67, - 1, 238, 81, 67, 1, 228, 209, 67, 1, 237, 230, 67, 1, 229, 201, 67, 1, - 238, 190, 67, 1, 229, 26, 67, 1, 238, 39, 67, 1, 215, 36, 67, 1, 202, - 116, 67, 1, 212, 162, 67, 1, 202, 39, 67, 1, 211, 10, 67, 1, 202, 6, 67, - 1, 214, 177, 67, 1, 202, 92, 67, 1, 212, 13, 67, 1, 202, 17, 67, 1, 210, - 22, 67, 1, 244, 212, 67, 1, 209, 2, 67, 1, 243, 233, 67, 1, 5, 207, 203, - 67, 1, 207, 203, 67, 1, 242, 42, 67, 1, 209, 187, 67, 1, 244, 75, 67, 1, - 135, 67, 1, 243, 113, 67, 1, 201, 201, 67, 1, 222, 100, 67, 1, 221, 84, - 67, 1, 222, 240, 67, 1, 221, 191, 67, 1, 152, 67, 1, 249, 32, 67, 1, 185, - 67, 1, 237, 3, 67, 1, 248, 86, 67, 1, 218, 167, 67, 1, 236, 26, 67, 1, - 247, 193, 67, 1, 217, 191, 67, 1, 237, 67, 67, 1, 248, 162, 67, 1, 219, - 34, 67, 1, 236, 136, 67, 1, 248, 23, 67, 1, 218, 69, 67, 1, 192, 67, 1, - 224, 155, 67, 1, 223, 246, 67, 1, 225, 20, 67, 1, 224, 82, 67, 1, 5, 198, - 67, 1, 198, 67, 1, 5, 202, 213, 67, 1, 202, 213, 67, 1, 5, 202, 247, 67, - 1, 202, 247, 67, 1, 216, 220, 67, 1, 216, 57, 67, 1, 215, 145, 67, 1, - 216, 158, 67, 1, 215, 227, 67, 1, 5, 204, 111, 67, 1, 204, 111, 67, 1, - 204, 30, 67, 1, 204, 62, 67, 1, 204, 0, 67, 1, 223, 163, 67, 1, 204, 163, - 67, 1, 5, 173, 67, 1, 5, 229, 201, 67, 1, 206, 86, 67, 1, 205, 230, 67, - 1, 206, 55, 67, 1, 205, 189, 67, 101, 243, 85, 229, 225, 217, 215, 211, - 241, 82, 67, 230, 199, 82, 67, 205, 186, 230, 199, 82, 67, 243, 192, 228, - 249, 248, 1, 1, 249, 255, 248, 1, 1, 219, 184, 248, 1, 1, 226, 185, 248, - 1, 1, 240, 174, 248, 1, 1, 245, 51, 248, 1, 1, 210, 69, 248, 1, 1, 223, - 163, 248, 1, 1, 159, 248, 1, 1, 239, 75, 248, 1, 1, 230, 54, 248, 1, 1, - 237, 171, 248, 1, 1, 230, 184, 248, 1, 1, 217, 134, 248, 1, 1, 203, 196, - 248, 1, 1, 202, 81, 248, 1, 1, 246, 200, 248, 1, 1, 213, 92, 248, 1, 1, - 146, 248, 1, 1, 202, 159, 248, 1, 1, 247, 125, 248, 1, 1, 194, 248, 1, 1, - 63, 248, 1, 1, 78, 248, 1, 1, 74, 248, 1, 1, 241, 147, 248, 1, 1, 251, - 64, 248, 1, 1, 241, 145, 248, 1, 1, 250, 34, 248, 1, 1, 219, 216, 248, 1, - 1, 250, 231, 248, 1, 1, 241, 92, 248, 1, 1, 250, 223, 248, 1, 1, 241, 78, - 248, 1, 1, 241, 28, 248, 1, 1, 75, 248, 1, 1, 68, 248, 1, 1, 230, 197, - 248, 1, 1, 206, 164, 248, 1, 1, 222, 205, 248, 1, 1, 238, 43, 248, 1, 1, - 231, 84, 28, 1, 229, 59, 28, 1, 211, 156, 28, 1, 229, 52, 28, 1, 222, 93, - 28, 1, 222, 91, 28, 1, 222, 90, 28, 1, 208, 240, 28, 1, 211, 145, 28, 1, - 216, 47, 28, 1, 216, 42, 28, 1, 216, 39, 28, 1, 216, 32, 28, 1, 216, 27, - 28, 1, 216, 22, 28, 1, 216, 33, 28, 1, 216, 45, 28, 1, 224, 141, 28, 1, - 218, 153, 28, 1, 211, 153, 28, 1, 218, 142, 28, 1, 212, 111, 28, 1, 211, - 150, 28, 1, 231, 106, 28, 1, 246, 74, 28, 1, 211, 160, 28, 1, 246, 138, - 28, 1, 229, 120, 28, 1, 209, 66, 28, 1, 218, 190, 28, 1, 236, 251, 28, 1, - 63, 28, 1, 251, 109, 28, 1, 198, 28, 1, 203, 99, 28, 1, 241, 55, 28, 1, - 74, 28, 1, 203, 39, 28, 1, 203, 52, 28, 1, 78, 28, 1, 204, 111, 28, 1, - 204, 107, 28, 1, 220, 73, 28, 1, 202, 247, 28, 1, 68, 28, 1, 204, 48, 28, - 1, 204, 62, 28, 1, 204, 30, 28, 1, 202, 213, 28, 1, 240, 238, 28, 1, 203, - 11, 28, 1, 75, 28, 240, 7, 28, 1, 211, 154, 28, 1, 222, 83, 28, 1, 222, - 85, 28, 1, 222, 88, 28, 1, 216, 40, 28, 1, 216, 21, 28, 1, 216, 29, 28, - 1, 216, 34, 28, 1, 216, 19, 28, 1, 224, 134, 28, 1, 224, 131, 28, 1, 224, - 135, 28, 1, 229, 246, 28, 1, 218, 148, 28, 1, 218, 134, 28, 1, 218, 140, - 28, 1, 218, 137, 28, 1, 218, 151, 28, 1, 218, 135, 28, 1, 229, 244, 28, - 1, 229, 242, 28, 1, 212, 104, 28, 1, 212, 102, 28, 1, 212, 94, 28, 1, - 212, 99, 28, 1, 212, 109, 28, 1, 219, 107, 28, 1, 211, 157, 28, 1, 203, - 29, 28, 1, 203, 25, 28, 1, 203, 26, 28, 1, 229, 245, 28, 1, 211, 158, 28, - 1, 203, 35, 28, 1, 202, 241, 28, 1, 202, 240, 28, 1, 202, 243, 28, 1, - 202, 204, 28, 1, 202, 205, 28, 1, 202, 208, 28, 1, 250, 137, 28, 1, 250, - 131, 139, 250, 205, 227, 103, 82, 139, 250, 205, 216, 74, 82, 139, 250, - 205, 118, 82, 139, 250, 205, 120, 82, 139, 250, 205, 126, 82, 139, 250, - 205, 239, 147, 82, 139, 250, 205, 208, 145, 82, 139, 250, 205, 101, 82, - 139, 250, 205, 247, 248, 82, 139, 250, 205, 239, 245, 82, 139, 250, 205, - 214, 171, 82, 139, 250, 205, 209, 61, 82, 139, 250, 205, 239, 140, 82, - 139, 250, 205, 237, 52, 82, 139, 250, 205, 241, 180, 82, 139, 250, 205, - 225, 123, 82, 248, 1, 1, 247, 193, 248, 1, 1, 202, 39, 248, 1, 1, 230, - 141, 248, 1, 1, 237, 230, 248, 1, 1, 241, 161, 248, 1, 1, 241, 75, 248, - 1, 1, 220, 18, 248, 1, 1, 220, 22, 248, 1, 1, 230, 224, 248, 1, 1, 250, - 207, 248, 1, 1, 231, 16, 248, 1, 1, 206, 229, 248, 1, 1, 231, 66, 248, 1, - 1, 222, 183, 248, 1, 1, 251, 58, 248, 1, 1, 250, 29, 248, 1, 1, 250, 247, - 248, 1, 1, 220, 39, 248, 1, 1, 220, 24, 248, 1, 1, 231, 13, 248, 1, 46, - 1, 219, 184, 248, 1, 46, 1, 210, 69, 248, 1, 46, 1, 230, 54, 248, 1, 46, - 1, 237, 171, 248, 1, 1, 238, 120, 248, 1, 1, 227, 162, 248, 1, 1, 201, - 242, 12, 211, 32, 210, 69, 12, 211, 32, 204, 41, 12, 211, 32, 203, 171, - 12, 211, 32, 247, 138, 12, 211, 32, 210, 173, 12, 211, 32, 235, 210, 12, - 211, 32, 235, 214, 12, 211, 32, 236, 35, 12, 211, 32, 235, 211, 12, 211, - 32, 210, 72, 12, 211, 32, 235, 213, 12, 211, 32, 235, 209, 12, 211, 32, - 236, 33, 12, 211, 32, 235, 212, 12, 211, 32, 235, 208, 12, 211, 32, 223, - 163, 12, 211, 32, 237, 171, 12, 211, 32, 194, 12, 211, 32, 219, 184, 12, - 211, 32, 211, 231, 12, 211, 32, 245, 51, 12, 211, 32, 235, 215, 12, 211, - 32, 237, 13, 12, 211, 32, 210, 81, 12, 211, 32, 210, 152, 12, 211, 32, - 211, 108, 12, 211, 32, 213, 98, 12, 211, 32, 219, 38, 12, 211, 32, 217, - 136, 12, 211, 32, 208, 174, 12, 211, 32, 210, 71, 12, 211, 32, 210, 163, - 12, 211, 32, 235, 223, 12, 211, 32, 235, 207, 12, 211, 32, 218, 210, 12, - 211, 32, 217, 134, 67, 1, 5, 228, 209, 67, 1, 5, 212, 162, 67, 1, 5, 211, - 10, 67, 1, 5, 135, 67, 1, 5, 221, 84, 67, 1, 5, 152, 67, 1, 5, 237, 3, - 67, 1, 5, 236, 26, 67, 1, 5, 237, 67, 67, 1, 5, 236, 136, 67, 1, 5, 223, - 246, 67, 1, 5, 216, 220, 67, 1, 5, 216, 57, 67, 1, 5, 215, 145, 67, 1, 5, - 216, 158, 67, 1, 5, 215, 227, 102, 28, 229, 59, 102, 28, 222, 93, 102, - 28, 208, 240, 102, 28, 216, 47, 102, 28, 224, 141, 102, 28, 218, 153, - 102, 28, 212, 111, 102, 28, 231, 106, 102, 28, 246, 74, 102, 28, 246, - 138, 102, 28, 229, 120, 102, 28, 209, 66, 102, 28, 218, 190, 102, 28, - 236, 251, 102, 28, 229, 60, 63, 102, 28, 222, 94, 63, 102, 28, 208, 241, - 63, 102, 28, 216, 48, 63, 102, 28, 224, 142, 63, 102, 28, 218, 154, 63, - 102, 28, 212, 112, 63, 102, 28, 231, 107, 63, 102, 28, 246, 75, 63, 102, - 28, 246, 139, 63, 102, 28, 229, 121, 63, 102, 28, 209, 67, 63, 102, 28, - 218, 191, 63, 102, 28, 236, 252, 63, 102, 28, 246, 75, 68, 102, 228, 253, - 167, 220, 54, 102, 228, 253, 167, 158, 236, 26, 102, 189, 105, 102, 189, - 108, 102, 189, 147, 102, 189, 149, 102, 189, 170, 102, 189, 195, 102, - 189, 213, 111, 102, 189, 199, 102, 189, 222, 63, 102, 189, 209, 152, 102, - 189, 224, 29, 102, 189, 239, 249, 102, 189, 204, 80, 102, 189, 203, 243, - 102, 189, 224, 220, 102, 189, 241, 179, 102, 189, 210, 214, 102, 189, - 211, 64, 102, 189, 237, 74, 102, 189, 212, 9, 102, 189, 223, 84, 102, - 189, 211, 213, 102, 189, 240, 4, 102, 189, 245, 211, 102, 189, 228, 102, - 102, 189, 216, 95, 102, 189, 247, 71, 102, 189, 211, 14, 102, 189, 210, - 196, 102, 189, 241, 65, 102, 189, 216, 87, 102, 189, 251, 10, 102, 189, - 240, 33, 102, 189, 216, 85, 102, 189, 213, 149, 102, 189, 216, 157, 43, - 189, 217, 46, 43, 189, 229, 83, 43, 189, 214, 195, 43, 189, 228, 249, 43, - 42, 209, 153, 220, 32, 62, 211, 177, 43, 42, 207, 152, 220, 32, 62, 211, - 177, 43, 42, 209, 54, 220, 32, 62, 211, 177, 43, 42, 239, 154, 220, 32, - 62, 211, 177, 43, 42, 240, 19, 220, 32, 62, 211, 177, 43, 42, 212, 75, - 220, 32, 62, 211, 177, 43, 42, 213, 106, 220, 32, 62, 211, 177, 43, 42, - 241, 135, 220, 32, 62, 211, 177, 219, 67, 54, 43, 42, 207, 152, 105, 43, - 42, 207, 152, 108, 43, 42, 207, 152, 147, 43, 42, 207, 152, 149, 43, 42, - 207, 152, 170, 43, 42, 207, 152, 195, 43, 42, 207, 152, 213, 111, 43, 42, - 207, 152, 199, 43, 42, 207, 152, 222, 63, 43, 42, 209, 53, 43, 42, 209, - 54, 105, 43, 42, 209, 54, 108, 43, 42, 209, 54, 147, 43, 42, 209, 54, - 149, 43, 42, 209, 54, 170, 43, 28, 229, 59, 43, 28, 222, 93, 43, 28, 208, - 240, 43, 28, 216, 47, 43, 28, 224, 141, 43, 28, 218, 153, 43, 28, 212, - 111, 43, 28, 231, 106, 43, 28, 246, 74, 43, 28, 246, 138, 43, 28, 229, - 120, 43, 28, 209, 66, 43, 28, 218, 190, 43, 28, 236, 251, 43, 28, 229, - 60, 63, 43, 28, 222, 94, 63, 43, 28, 208, 241, 63, 43, 28, 216, 48, 63, - 43, 28, 224, 142, 63, 43, 28, 218, 154, 63, 43, 28, 212, 112, 63, 43, 28, - 231, 107, 63, 43, 28, 246, 75, 63, 43, 28, 246, 139, 63, 43, 28, 229, - 121, 63, 43, 28, 209, 67, 63, 43, 28, 218, 191, 63, 43, 28, 236, 252, 63, - 43, 228, 253, 167, 246, 189, 43, 228, 253, 167, 230, 78, 43, 28, 231, - 107, 68, 228, 253, 211, 97, 97, 43, 189, 105, 43, 189, 108, 43, 189, 147, - 43, 189, 149, 43, 189, 170, 43, 189, 195, 43, 189, 213, 111, 43, 189, - 199, 43, 189, 222, 63, 43, 189, 209, 152, 43, 189, 224, 29, 43, 189, 239, - 249, 43, 189, 204, 80, 43, 189, 203, 243, 43, 189, 224, 220, 43, 189, - 241, 179, 43, 189, 210, 214, 43, 189, 211, 64, 43, 189, 237, 74, 43, 189, - 212, 9, 43, 189, 223, 84, 43, 189, 211, 213, 43, 189, 240, 4, 43, 189, - 245, 211, 43, 189, 228, 102, 43, 189, 214, 169, 43, 189, 225, 126, 43, - 189, 240, 42, 43, 189, 210, 226, 43, 189, 240, 216, 43, 189, 217, 233, - 43, 189, 250, 38, 43, 189, 230, 200, 43, 189, 216, 85, 43, 189, 245, 170, - 43, 189, 245, 160, 43, 189, 236, 244, 43, 189, 246, 217, 43, 189, 227, 0, - 43, 189, 227, 222, 43, 189, 216, 16, 43, 189, 225, 11, 43, 189, 216, 112, - 43, 189, 211, 14, 43, 189, 210, 196, 43, 189, 241, 65, 43, 189, 216, 87, - 43, 189, 251, 10, 43, 189, 222, 79, 43, 42, 209, 54, 195, 43, 42, 209, - 54, 213, 111, 43, 42, 209, 54, 199, 43, 42, 209, 54, 222, 63, 43, 42, - 239, 153, 43, 42, 239, 154, 105, 43, 42, 239, 154, 108, 43, 42, 239, 154, - 147, 43, 42, 239, 154, 149, 43, 42, 239, 154, 170, 43, 42, 239, 154, 195, - 43, 42, 239, 154, 213, 111, 43, 42, 239, 154, 199, 43, 42, 239, 154, 222, - 63, 43, 42, 240, 18, 139, 209, 164, 16, 35, 230, 171, 139, 209, 164, 16, - 35, 240, 54, 139, 209, 164, 16, 35, 225, 94, 139, 209, 164, 16, 35, 250, - 150, 139, 209, 164, 16, 35, 225, 63, 139, 209, 164, 16, 35, 230, 76, 139, - 209, 164, 16, 35, 230, 77, 139, 209, 164, 16, 35, 250, 30, 139, 209, 164, - 16, 35, 213, 129, 139, 209, 164, 16, 35, 220, 79, 139, 209, 164, 16, 35, - 221, 153, 139, 209, 164, 16, 35, 244, 70, 51, 237, 13, 51, 241, 24, 51, - 240, 226, 227, 120, 227, 147, 54, 43, 67, 63, 43, 67, 75, 43, 67, 68, 43, - 67, 74, 43, 67, 78, 43, 67, 173, 43, 67, 229, 100, 43, 67, 228, 209, 43, - 67, 229, 201, 43, 67, 229, 26, 43, 67, 215, 36, 43, 67, 212, 162, 43, 67, - 211, 10, 43, 67, 214, 177, 43, 67, 212, 13, 43, 67, 210, 22, 43, 67, 209, - 2, 43, 67, 207, 203, 43, 67, 209, 187, 43, 67, 135, 43, 67, 201, 201, 43, - 67, 222, 100, 43, 67, 221, 84, 43, 67, 222, 240, 43, 67, 221, 191, 43, - 67, 152, 43, 67, 237, 3, 43, 67, 236, 26, 43, 67, 237, 67, 43, 67, 236, - 136, 43, 67, 192, 43, 67, 224, 155, 43, 67, 223, 246, 43, 67, 225, 20, - 43, 67, 224, 82, 43, 67, 198, 43, 67, 202, 213, 43, 67, 202, 247, 43, 67, - 216, 220, 43, 67, 216, 57, 43, 67, 215, 145, 43, 67, 216, 158, 43, 67, - 215, 227, 43, 67, 204, 111, 43, 67, 204, 30, 43, 67, 204, 62, 43, 67, - 204, 0, 51, 250, 174, 51, 250, 83, 51, 250, 201, 51, 251, 239, 51, 231, - 18, 51, 230, 242, 51, 206, 227, 51, 240, 253, 51, 241, 158, 51, 220, 21, - 51, 220, 14, 51, 230, 16, 51, 229, 238, 51, 229, 235, 51, 238, 220, 51, - 238, 229, 51, 238, 70, 51, 238, 66, 51, 228, 132, 51, 238, 58, 51, 229, - 75, 51, 229, 74, 51, 229, 73, 51, 229, 72, 51, 237, 200, 51, 237, 199, - 51, 228, 180, 51, 228, 182, 51, 229, 194, 51, 228, 251, 51, 229, 3, 51, - 215, 17, 51, 214, 236, 51, 212, 92, 51, 213, 134, 51, 213, 133, 51, 244, - 209, 51, 244, 14, 51, 243, 86, 51, 208, 163, 51, 223, 79, 51, 221, 154, - 51, 237, 142, 51, 219, 163, 51, 219, 162, 51, 249, 29, 51, 218, 164, 51, - 218, 127, 51, 218, 128, 51, 248, 57, 51, 236, 24, 51, 236, 19, 51, 247, - 151, 51, 236, 4, 51, 237, 39, 51, 218, 220, 51, 219, 4, 51, 237, 22, 51, - 219, 0, 51, 219, 18, 51, 248, 145, 51, 218, 58, 51, 247, 253, 51, 236, - 120, 51, 218, 46, 51, 236, 111, 51, 236, 113, 51, 225, 138, 51, 225, 134, - 51, 225, 143, 51, 225, 83, 51, 225, 110, 51, 224, 121, 51, 224, 97, 51, - 224, 96, 51, 225, 0, 51, 224, 253, 51, 225, 1, 51, 203, 109, 51, 203, - 107, 51, 202, 202, 51, 215, 243, 51, 215, 247, 51, 215, 119, 51, 215, - 113, 51, 216, 109, 51, 216, 106, 51, 204, 78, 139, 209, 164, 16, 35, 236, - 43, 202, 84, 139, 209, 164, 16, 35, 236, 43, 105, 139, 209, 164, 16, 35, - 236, 43, 108, 139, 209, 164, 16, 35, 236, 43, 147, 139, 209, 164, 16, 35, - 236, 43, 149, 139, 209, 164, 16, 35, 236, 43, 170, 139, 209, 164, 16, 35, - 236, 43, 195, 139, 209, 164, 16, 35, 236, 43, 213, 111, 139, 209, 164, - 16, 35, 236, 43, 199, 139, 209, 164, 16, 35, 236, 43, 222, 63, 139, 209, - 164, 16, 35, 236, 43, 209, 152, 139, 209, 164, 16, 35, 236, 43, 241, 112, - 139, 209, 164, 16, 35, 236, 43, 207, 154, 139, 209, 164, 16, 35, 236, 43, - 209, 55, 139, 209, 164, 16, 35, 236, 43, 239, 141, 139, 209, 164, 16, 35, - 236, 43, 240, 22, 139, 209, 164, 16, 35, 236, 43, 212, 82, 139, 209, 164, - 16, 35, 236, 43, 213, 108, 139, 209, 164, 16, 35, 236, 43, 241, 140, 139, - 209, 164, 16, 35, 236, 43, 222, 60, 139, 209, 164, 16, 35, 236, 43, 207, - 151, 139, 209, 164, 16, 35, 236, 43, 207, 145, 139, 209, 164, 16, 35, - 236, 43, 207, 141, 139, 209, 164, 16, 35, 236, 43, 207, 142, 139, 209, - 164, 16, 35, 236, 43, 207, 147, 51, 236, 34, 51, 244, 212, 51, 250, 34, - 51, 142, 51, 219, 206, 51, 219, 39, 51, 243, 115, 51, 243, 116, 211, 176, - 51, 243, 116, 245, 105, 51, 230, 197, 51, 241, 27, 223, 85, 237, 40, 51, - 241, 27, 223, 85, 210, 92, 51, 241, 27, 223, 85, 209, 245, 51, 241, 27, - 223, 85, 224, 252, 51, 245, 162, 51, 219, 169, 250, 233, 51, 201, 201, - 51, 223, 247, 63, 51, 192, 51, 173, 51, 229, 204, 51, 225, 59, 51, 238, - 208, 51, 247, 76, 51, 229, 203, 51, 218, 211, 51, 222, 207, 51, 223, 247, - 240, 174, 51, 223, 247, 239, 75, 51, 224, 196, 51, 229, 146, 51, 235, - 215, 51, 229, 102, 51, 224, 157, 51, 238, 83, 51, 209, 4, 51, 223, 247, - 159, 51, 224, 90, 51, 243, 125, 51, 229, 41, 51, 239, 188, 51, 221, 229, - 51, 223, 247, 226, 185, 51, 224, 87, 51, 245, 255, 51, 229, 35, 51, 224, - 88, 211, 176, 51, 246, 0, 211, 176, 51, 226, 186, 211, 176, 51, 229, 36, - 211, 176, 51, 224, 88, 245, 105, 51, 246, 0, 245, 105, 51, 226, 186, 245, - 105, 51, 229, 36, 245, 105, 51, 226, 186, 115, 194, 51, 226, 186, 115, - 215, 94, 211, 176, 51, 185, 51, 228, 244, 51, 223, 250, 51, 238, 15, 51, - 216, 207, 51, 216, 208, 115, 194, 51, 216, 208, 115, 215, 94, 211, 176, - 51, 217, 204, 51, 221, 122, 51, 223, 247, 194, 51, 223, 248, 51, 217, - 154, 51, 221, 22, 51, 223, 247, 206, 164, 51, 223, 187, 51, 228, 170, 51, - 223, 188, 225, 0, 51, 217, 153, 51, 221, 21, 51, 223, 247, 204, 144, 51, - 223, 181, 51, 228, 168, 51, 223, 182, 225, 0, 51, 230, 55, 220, 58, 51, - 226, 186, 220, 58, 51, 250, 247, 51, 247, 229, 51, 247, 6, 51, 246, 239, - 51, 247, 126, 115, 229, 146, 51, 245, 254, 51, 244, 129, 51, 237, 184, - 51, 152, 51, 236, 35, 51, 231, 49, 51, 229, 48, 51, 229, 36, 247, 47, 51, - 228, 211, 51, 227, 52, 51, 227, 51, 51, 227, 38, 51, 226, 200, 51, 225, - 60, 212, 36, 51, 224, 120, 51, 224, 56, 51, 218, 209, 51, 218, 72, 51, - 218, 11, 51, 218, 9, 51, 211, 168, 51, 210, 177, 51, 204, 64, 51, 206, - 165, 115, 226, 185, 51, 34, 115, 226, 185, 139, 209, 164, 16, 35, 244, - 133, 105, 139, 209, 164, 16, 35, 244, 133, 108, 139, 209, 164, 16, 35, - 244, 133, 147, 139, 209, 164, 16, 35, 244, 133, 149, 139, 209, 164, 16, - 35, 244, 133, 170, 139, 209, 164, 16, 35, 244, 133, 195, 139, 209, 164, - 16, 35, 244, 133, 213, 111, 139, 209, 164, 16, 35, 244, 133, 199, 139, - 209, 164, 16, 35, 244, 133, 222, 63, 139, 209, 164, 16, 35, 244, 133, - 209, 152, 139, 209, 164, 16, 35, 244, 133, 241, 112, 139, 209, 164, 16, - 35, 244, 133, 207, 154, 139, 209, 164, 16, 35, 244, 133, 209, 55, 139, - 209, 164, 16, 35, 244, 133, 239, 141, 139, 209, 164, 16, 35, 244, 133, - 240, 22, 139, 209, 164, 16, 35, 244, 133, 212, 82, 139, 209, 164, 16, 35, - 244, 133, 213, 108, 139, 209, 164, 16, 35, 244, 133, 241, 140, 139, 209, - 164, 16, 35, 244, 133, 222, 60, 139, 209, 164, 16, 35, 244, 133, 207, - 151, 139, 209, 164, 16, 35, 244, 133, 207, 145, 139, 209, 164, 16, 35, - 244, 133, 207, 141, 139, 209, 164, 16, 35, 244, 133, 207, 142, 139, 209, - 164, 16, 35, 244, 133, 207, 147, 139, 209, 164, 16, 35, 244, 133, 207, - 148, 139, 209, 164, 16, 35, 244, 133, 207, 143, 139, 209, 164, 16, 35, - 244, 133, 207, 144, 139, 209, 164, 16, 35, 244, 133, 207, 150, 139, 209, - 164, 16, 35, 244, 133, 207, 146, 139, 209, 164, 16, 35, 244, 133, 209, - 53, 139, 209, 164, 16, 35, 244, 133, 209, 52, 51, 238, 246, 237, 16, 35, - 209, 93, 245, 142, 237, 51, 237, 16, 35, 209, 93, 216, 151, 241, 179, - 237, 16, 35, 243, 203, 250, 50, 209, 93, 248, 140, 237, 16, 35, 202, 226, - 239, 180, 237, 16, 35, 204, 103, 237, 16, 35, 245, 214, 237, 16, 35, 209, - 93, 250, 105, 237, 16, 35, 236, 127, 208, 169, 237, 16, 35, 5, 209, 231, - 237, 16, 35, 208, 97, 237, 16, 35, 219, 32, 237, 16, 35, 211, 96, 237, - 16, 35, 240, 44, 237, 16, 35, 237, 249, 218, 32, 237, 16, 35, 224, 75, - 237, 16, 35, 241, 64, 237, 16, 35, 239, 181, 237, 16, 35, 203, 236, 220, - 32, 209, 93, 244, 71, 237, 16, 35, 250, 154, 237, 16, 35, 245, 193, 237, - 16, 35, 248, 49, 209, 24, 237, 16, 35, 238, 13, 237, 16, 35, 211, 192, - 250, 173, 237, 16, 35, 216, 77, 237, 16, 35, 231, 12, 237, 16, 35, 237, - 249, 209, 231, 237, 16, 35, 224, 8, 245, 164, 237, 16, 35, 237, 249, 217, - 244, 237, 16, 35, 209, 93, 251, 143, 204, 80, 237, 16, 35, 209, 93, 246, - 24, 239, 249, 237, 16, 35, 231, 26, 237, 16, 35, 242, 20, 237, 16, 35, - 216, 80, 237, 16, 35, 237, 249, 218, 16, 237, 16, 35, 217, 221, 237, 16, - 35, 244, 149, 76, 209, 93, 227, 134, 237, 16, 35, 209, 93, 240, 82, 237, - 16, 35, 219, 250, 237, 16, 35, 220, 85, 237, 16, 35, 244, 42, 237, 16, - 35, 244, 63, 237, 16, 35, 231, 40, 237, 16, 35, 247, 217, 237, 16, 35, - 245, 235, 208, 173, 225, 3, 237, 16, 35, 238, 215, 208, 169, 237, 16, 35, - 217, 163, 206, 213, 237, 16, 35, 219, 249, 237, 16, 35, 209, 93, 204, 50, - 237, 16, 35, 216, 68, 237, 16, 35, 209, 93, 247, 12, 237, 16, 35, 209, - 93, 250, 101, 209, 18, 237, 16, 35, 209, 93, 229, 195, 211, 68, 224, 12, - 237, 16, 35, 244, 9, 237, 16, 35, 209, 93, 225, 85, 225, 139, 237, 16, - 35, 251, 144, 237, 16, 35, 209, 93, 204, 96, 237, 16, 35, 209, 93, 238, - 173, 204, 16, 237, 16, 35, 209, 93, 230, 84, 228, 33, 237, 16, 35, 243, - 153, 237, 16, 35, 227, 121, 237, 16, 35, 231, 15, 208, 24, 237, 16, 35, - 5, 217, 244, 237, 16, 35, 251, 82, 245, 226, 237, 16, 35, 248, 143, 245, - 226, 11, 4, 230, 201, 11, 4, 230, 193, 11, 4, 75, 11, 4, 230, 227, 11, 4, - 231, 108, 11, 4, 231, 91, 11, 4, 231, 110, 11, 4, 231, 109, 11, 4, 250, - 49, 11, 4, 250, 10, 11, 4, 63, 11, 4, 250, 175, 11, 4, 206, 225, 11, 4, - 206, 228, 11, 4, 206, 226, 11, 4, 219, 224, 11, 4, 219, 193, 11, 4, 78, - 11, 4, 220, 9, 11, 4, 240, 217, 11, 4, 74, 11, 4, 203, 217, 11, 4, 248, - 51, 11, 4, 248, 47, 11, 4, 248, 86, 11, 4, 248, 61, 11, 4, 248, 75, 11, - 4, 248, 74, 11, 4, 248, 77, 11, 4, 248, 76, 11, 4, 248, 209, 11, 4, 248, - 201, 11, 4, 249, 32, 11, 4, 248, 232, 11, 4, 247, 163, 11, 4, 247, 167, - 11, 4, 247, 164, 11, 4, 247, 252, 11, 4, 247, 233, 11, 4, 248, 23, 11, 4, - 248, 2, 11, 4, 248, 101, 11, 4, 248, 162, 11, 4, 248, 113, 11, 4, 247, - 147, 11, 4, 247, 143, 11, 4, 247, 193, 11, 4, 247, 162, 11, 4, 247, 155, - 11, 4, 247, 160, 11, 4, 247, 131, 11, 4, 247, 129, 11, 4, 247, 136, 11, - 4, 247, 134, 11, 4, 247, 132, 11, 4, 247, 133, 11, 4, 218, 105, 11, 4, - 218, 101, 11, 4, 218, 167, 11, 4, 218, 117, 11, 4, 218, 133, 11, 4, 218, - 160, 11, 4, 218, 156, 11, 4, 219, 55, 11, 4, 219, 44, 11, 4, 185, 11, 4, - 219, 96, 11, 4, 217, 173, 11, 4, 217, 175, 11, 4, 217, 174, 11, 4, 218, - 25, 11, 4, 218, 14, 11, 4, 218, 69, 11, 4, 218, 41, 11, 4, 217, 159, 11, - 4, 217, 155, 11, 4, 217, 191, 11, 4, 217, 172, 11, 4, 217, 164, 11, 4, - 217, 170, 11, 4, 217, 138, 11, 4, 217, 137, 11, 4, 217, 142, 11, 4, 217, - 141, 11, 4, 217, 139, 11, 4, 217, 140, 11, 4, 248, 183, 11, 4, 248, 182, - 11, 4, 248, 189, 11, 4, 248, 184, 11, 4, 248, 186, 11, 4, 248, 185, 11, - 4, 248, 188, 11, 4, 248, 187, 11, 4, 248, 195, 11, 4, 248, 194, 11, 4, - 248, 198, 11, 4, 248, 196, 11, 4, 248, 174, 11, 4, 248, 176, 11, 4, 248, - 175, 11, 4, 248, 179, 11, 4, 248, 178, 11, 4, 248, 181, 11, 4, 248, 180, - 11, 4, 248, 190, 11, 4, 248, 193, 11, 4, 248, 191, 11, 4, 248, 170, 11, - 4, 248, 169, 11, 4, 248, 177, 11, 4, 248, 173, 11, 4, 248, 171, 11, 4, - 248, 172, 11, 4, 248, 166, 11, 4, 248, 165, 11, 4, 248, 168, 11, 4, 248, - 167, 11, 4, 223, 47, 11, 4, 223, 46, 11, 4, 223, 52, 11, 4, 223, 48, 11, - 4, 223, 49, 11, 4, 223, 51, 11, 4, 223, 50, 11, 4, 223, 55, 11, 4, 223, - 54, 11, 4, 223, 57, 11, 4, 223, 56, 11, 4, 223, 43, 11, 4, 223, 42, 11, - 4, 223, 45, 11, 4, 223, 44, 11, 4, 223, 36, 11, 4, 223, 35, 11, 4, 223, - 40, 11, 4, 223, 39, 11, 4, 223, 37, 11, 4, 223, 38, 11, 4, 223, 30, 11, - 4, 223, 29, 11, 4, 223, 34, 11, 4, 223, 33, 11, 4, 223, 31, 11, 4, 223, - 32, 11, 4, 236, 180, 11, 4, 236, 179, 11, 4, 236, 185, 11, 4, 236, 181, - 11, 4, 236, 182, 11, 4, 236, 184, 11, 4, 236, 183, 11, 4, 236, 188, 11, - 4, 236, 187, 11, 4, 236, 190, 11, 4, 236, 189, 11, 4, 236, 171, 11, 4, - 236, 173, 11, 4, 236, 172, 11, 4, 236, 176, 11, 4, 236, 175, 11, 4, 236, - 178, 11, 4, 236, 177, 11, 4, 236, 167, 11, 4, 236, 166, 11, 4, 236, 174, - 11, 4, 236, 170, 11, 4, 236, 168, 11, 4, 236, 169, 11, 4, 236, 161, 11, - 4, 236, 165, 11, 4, 236, 164, 11, 4, 236, 162, 11, 4, 236, 163, 11, 4, - 224, 93, 11, 4, 224, 92, 11, 4, 224, 155, 11, 4, 224, 99, 11, 4, 224, - 127, 11, 4, 224, 145, 11, 4, 224, 143, 11, 4, 225, 71, 11, 4, 225, 66, - 11, 4, 192, 11, 4, 225, 106, 11, 4, 223, 213, 11, 4, 223, 212, 11, 4, - 223, 216, 11, 4, 223, 214, 11, 4, 224, 21, 11, 4, 223, 252, 11, 4, 224, - 82, 11, 4, 224, 27, 11, 4, 224, 207, 11, 4, 225, 20, 11, 4, 223, 193, 11, - 4, 223, 189, 11, 4, 223, 246, 11, 4, 223, 209, 11, 4, 223, 202, 11, 4, - 223, 207, 11, 4, 223, 166, 11, 4, 223, 165, 11, 4, 223, 171, 11, 4, 223, - 168, 11, 4, 239, 236, 11, 4, 239, 230, 11, 4, 240, 26, 11, 4, 239, 251, - 11, 4, 240, 73, 11, 4, 240, 64, 11, 4, 240, 108, 11, 4, 240, 78, 11, 4, - 239, 139, 11, 4, 239, 186, 11, 4, 239, 167, 11, 4, 239, 91, 11, 4, 239, - 90, 11, 4, 239, 108, 11, 4, 239, 96, 11, 4, 239, 94, 11, 4, 239, 95, 11, - 4, 239, 78, 11, 4, 239, 77, 11, 4, 239, 81, 11, 4, 239, 79, 11, 4, 205, - 196, 11, 4, 205, 191, 11, 4, 205, 230, 11, 4, 205, 205, 11, 4, 205, 219, - 11, 4, 205, 216, 11, 4, 205, 222, 11, 4, 205, 221, 11, 4, 206, 63, 11, 4, - 206, 58, 11, 4, 206, 86, 11, 4, 206, 75, 11, 4, 205, 172, 11, 4, 205, - 168, 11, 4, 205, 189, 11, 4, 205, 174, 11, 4, 205, 233, 11, 4, 206, 44, - 11, 4, 204, 157, 11, 4, 204, 155, 11, 4, 204, 163, 11, 4, 204, 160, 11, - 4, 204, 158, 11, 4, 204, 159, 11, 4, 204, 148, 11, 4, 204, 147, 11, 4, - 204, 152, 11, 4, 204, 151, 11, 4, 204, 149, 11, 4, 204, 150, 11, 4, 243, - 147, 11, 4, 243, 134, 11, 4, 243, 233, 11, 4, 243, 173, 11, 4, 243, 208, - 11, 4, 243, 213, 11, 4, 243, 212, 11, 4, 244, 140, 11, 4, 244, 134, 11, - 4, 244, 212, 11, 4, 244, 160, 11, 4, 242, 25, 11, 4, 242, 26, 11, 4, 243, - 85, 11, 4, 242, 67, 11, 4, 243, 113, 11, 4, 243, 87, 11, 4, 244, 7, 11, - 4, 244, 75, 11, 4, 244, 28, 11, 4, 242, 16, 11, 4, 242, 14, 11, 4, 242, - 42, 11, 4, 242, 24, 11, 4, 242, 19, 11, 4, 242, 22, 11, 4, 208, 200, 11, - 4, 208, 192, 11, 4, 209, 2, 11, 4, 208, 210, 11, 4, 208, 248, 11, 4, 208, - 250, 11, 4, 208, 249, 11, 4, 209, 212, 11, 4, 209, 198, 11, 4, 210, 22, - 11, 4, 209, 222, 11, 4, 207, 185, 11, 4, 207, 184, 11, 4, 207, 187, 11, - 4, 207, 186, 11, 4, 208, 131, 11, 4, 208, 121, 11, 4, 135, 11, 4, 208, - 144, 11, 4, 209, 114, 11, 4, 209, 187, 11, 4, 209, 139, 11, 4, 207, 168, - 11, 4, 207, 163, 11, 4, 207, 203, 11, 4, 207, 183, 11, 4, 207, 169, 11, - 4, 207, 181, 11, 4, 244, 92, 11, 4, 244, 91, 11, 4, 244, 97, 11, 4, 244, - 93, 11, 4, 244, 94, 11, 4, 244, 96, 11, 4, 244, 95, 11, 4, 244, 113, 11, - 4, 244, 112, 11, 4, 244, 120, 11, 4, 244, 114, 11, 4, 244, 82, 11, 4, - 244, 84, 11, 4, 244, 83, 11, 4, 244, 87, 11, 4, 244, 86, 11, 4, 244, 90, - 11, 4, 244, 88, 11, 4, 244, 105, 11, 4, 244, 108, 11, 4, 244, 106, 11, 4, - 244, 78, 11, 4, 244, 77, 11, 4, 244, 85, 11, 4, 244, 81, 11, 4, 244, 79, - 11, 4, 244, 80, 11, 4, 223, 3, 11, 4, 223, 2, 11, 4, 223, 10, 11, 4, 223, - 5, 11, 4, 223, 6, 11, 4, 223, 7, 11, 4, 223, 19, 11, 4, 223, 18, 11, 4, - 223, 25, 11, 4, 223, 20, 11, 4, 222, 251, 11, 4, 222, 250, 11, 4, 223, 1, - 11, 4, 222, 252, 11, 4, 223, 11, 11, 4, 223, 17, 11, 4, 223, 15, 11, 4, - 222, 243, 11, 4, 222, 242, 11, 4, 222, 248, 11, 4, 222, 246, 11, 4, 222, - 244, 11, 4, 222, 245, 11, 4, 236, 146, 11, 4, 236, 145, 11, 4, 236, 152, - 11, 4, 236, 147, 11, 4, 236, 149, 11, 4, 236, 148, 11, 4, 236, 151, 11, - 4, 236, 150, 11, 4, 236, 158, 11, 4, 236, 156, 11, 4, 236, 160, 11, 4, - 236, 159, 11, 4, 236, 139, 11, 4, 236, 140, 11, 4, 236, 143, 11, 4, 236, - 142, 11, 4, 236, 144, 11, 4, 236, 153, 11, 4, 236, 155, 11, 4, 236, 154, - 11, 4, 236, 138, 11, 4, 222, 52, 11, 4, 222, 50, 11, 4, 222, 100, 11, 4, - 222, 55, 11, 4, 222, 82, 11, 4, 222, 96, 11, 4, 222, 95, 11, 4, 223, 61, - 11, 4, 201, 201, 11, 4, 223, 76, 11, 4, 221, 32, 11, 4, 221, 34, 11, 4, - 221, 33, 11, 4, 221, 165, 11, 4, 221, 150, 11, 4, 221, 191, 11, 4, 221, - 176, 11, 4, 222, 209, 11, 4, 222, 240, 11, 4, 222, 225, 11, 4, 221, 27, - 11, 4, 221, 23, 11, 4, 221, 84, 11, 4, 221, 31, 11, 4, 221, 29, 11, 4, - 221, 30, 11, 4, 236, 211, 11, 4, 236, 210, 11, 4, 236, 216, 11, 4, 236, - 212, 11, 4, 236, 213, 11, 4, 236, 215, 11, 4, 236, 214, 11, 4, 236, 222, - 11, 4, 236, 220, 11, 4, 236, 224, 11, 4, 236, 223, 11, 4, 236, 203, 11, - 4, 236, 205, 11, 4, 236, 204, 11, 4, 236, 207, 11, 4, 236, 209, 11, 4, - 236, 208, 11, 4, 236, 217, 11, 4, 236, 219, 11, 4, 236, 218, 11, 4, 236, - 199, 11, 4, 236, 198, 11, 4, 236, 206, 11, 4, 236, 202, 11, 4, 236, 200, - 11, 4, 236, 201, 11, 4, 236, 193, 11, 4, 236, 192, 11, 4, 236, 197, 11, - 4, 236, 196, 11, 4, 236, 194, 11, 4, 236, 195, 11, 4, 227, 90, 11, 4, - 227, 82, 11, 4, 227, 148, 11, 4, 227, 100, 11, 4, 227, 139, 11, 4, 227, - 138, 11, 4, 227, 142, 11, 4, 227, 140, 11, 4, 228, 0, 11, 4, 227, 245, - 11, 4, 228, 113, 11, 4, 228, 11, 11, 4, 226, 217, 11, 4, 226, 216, 11, 4, - 226, 219, 11, 4, 226, 218, 11, 4, 227, 6, 11, 4, 226, 248, 11, 4, 227, - 49, 11, 4, 227, 11, 11, 4, 227, 165, 11, 4, 227, 234, 11, 4, 227, 182, - 11, 4, 226, 211, 11, 4, 226, 209, 11, 4, 226, 239, 11, 4, 226, 215, 11, - 4, 226, 213, 11, 4, 226, 214, 11, 4, 226, 190, 11, 4, 226, 189, 11, 4, - 226, 199, 11, 4, 226, 193, 11, 4, 226, 191, 11, 4, 226, 192, 11, 4, 238, - 54, 11, 4, 238, 53, 11, 4, 238, 81, 11, 4, 238, 65, 11, 4, 238, 73, 11, - 4, 238, 72, 11, 4, 238, 75, 11, 4, 238, 74, 11, 4, 238, 217, 11, 4, 238, - 212, 11, 4, 239, 8, 11, 4, 238, 227, 11, 4, 237, 205, 11, 4, 237, 204, - 11, 4, 237, 207, 11, 4, 237, 206, 11, 4, 238, 18, 11, 4, 238, 16, 11, 4, - 238, 39, 11, 4, 238, 26, 11, 4, 238, 159, 11, 4, 238, 157, 11, 4, 238, - 190, 11, 4, 238, 170, 11, 4, 237, 194, 11, 4, 237, 193, 11, 4, 237, 230, - 11, 4, 237, 203, 11, 4, 237, 195, 11, 4, 237, 202, 11, 4, 229, 64, 11, 4, - 229, 61, 11, 4, 229, 100, 11, 4, 229, 78, 11, 4, 229, 89, 11, 4, 229, 93, - 11, 4, 229, 91, 11, 4, 229, 226, 11, 4, 229, 209, 11, 4, 173, 11, 4, 229, - 253, 11, 4, 228, 187, 11, 4, 228, 192, 11, 4, 228, 189, 11, 4, 228, 250, - 11, 4, 228, 245, 11, 4, 229, 26, 11, 4, 229, 1, 11, 4, 229, 170, 11, 4, - 229, 153, 11, 4, 229, 201, 11, 4, 229, 174, 11, 4, 228, 175, 11, 4, 228, - 171, 11, 4, 228, 209, 11, 4, 228, 186, 11, 4, 228, 179, 11, 4, 228, 183, - 11, 4, 238, 141, 11, 4, 238, 140, 11, 4, 238, 145, 11, 4, 238, 142, 11, - 4, 238, 144, 11, 4, 238, 143, 11, 4, 238, 152, 11, 4, 238, 151, 11, 4, - 238, 155, 11, 4, 238, 153, 11, 4, 238, 132, 11, 4, 238, 131, 11, 4, 238, - 134, 11, 4, 238, 133, 11, 4, 238, 137, 11, 4, 238, 136, 11, 4, 238, 139, - 11, 4, 238, 138, 11, 4, 238, 147, 11, 4, 238, 146, 11, 4, 238, 150, 11, - 4, 238, 148, 11, 4, 238, 127, 11, 4, 238, 126, 11, 4, 238, 135, 11, 4, - 238, 130, 11, 4, 238, 128, 11, 4, 238, 129, 11, 4, 224, 174, 11, 4, 224, - 175, 11, 4, 224, 193, 11, 4, 224, 192, 11, 4, 224, 195, 11, 4, 224, 194, - 11, 4, 224, 165, 11, 4, 224, 167, 11, 4, 224, 166, 11, 4, 224, 170, 11, - 4, 224, 169, 11, 4, 224, 172, 11, 4, 224, 171, 11, 4, 224, 176, 11, 4, - 224, 178, 11, 4, 224, 177, 11, 4, 224, 161, 11, 4, 224, 160, 11, 4, 224, - 168, 11, 4, 224, 164, 11, 4, 224, 162, 11, 4, 224, 163, 11, 4, 235, 233, - 11, 4, 235, 232, 11, 4, 235, 239, 11, 4, 235, 234, 11, 4, 235, 236, 11, - 4, 235, 235, 11, 4, 235, 238, 11, 4, 235, 237, 11, 4, 235, 244, 11, 4, - 235, 243, 11, 4, 235, 246, 11, 4, 235, 245, 11, 4, 235, 225, 11, 4, 235, - 224, 11, 4, 235, 227, 11, 4, 235, 226, 11, 4, 235, 229, 11, 4, 235, 228, - 11, 4, 235, 231, 11, 4, 235, 230, 11, 4, 235, 240, 11, 4, 235, 242, 11, - 4, 235, 241, 11, 4, 222, 148, 11, 4, 222, 150, 11, 4, 222, 149, 11, 4, - 222, 193, 11, 4, 222, 191, 11, 4, 222, 203, 11, 4, 222, 196, 11, 4, 222, - 110, 11, 4, 222, 109, 11, 4, 222, 111, 11, 4, 222, 120, 11, 4, 222, 117, - 11, 4, 222, 128, 11, 4, 222, 122, 11, 4, 222, 184, 11, 4, 222, 190, 11, - 4, 222, 186, 11, 4, 236, 230, 11, 4, 236, 245, 11, 4, 236, 254, 11, 4, - 237, 83, 11, 4, 237, 72, 11, 4, 152, 11, 4, 237, 94, 11, 4, 236, 6, 11, - 4, 236, 5, 11, 4, 236, 8, 11, 4, 236, 7, 11, 4, 236, 46, 11, 4, 236, 37, - 11, 4, 236, 136, 11, 4, 236, 109, 11, 4, 237, 18, 11, 4, 237, 67, 11, 4, - 237, 30, 11, 4, 204, 83, 11, 4, 204, 68, 11, 4, 204, 111, 11, 4, 204, 93, - 11, 4, 203, 206, 11, 4, 203, 208, 11, 4, 203, 207, 11, 4, 203, 229, 11, - 4, 204, 0, 11, 4, 203, 239, 11, 4, 204, 42, 11, 4, 204, 62, 11, 4, 204, - 47, 11, 4, 202, 24, 11, 4, 202, 23, 11, 4, 202, 39, 11, 4, 202, 27, 11, - 4, 202, 32, 11, 4, 202, 34, 11, 4, 202, 33, 11, 4, 202, 100, 11, 4, 202, - 97, 11, 4, 202, 116, 11, 4, 202, 104, 11, 4, 201, 255, 11, 4, 202, 1, 11, - 4, 202, 0, 11, 4, 202, 13, 11, 4, 202, 12, 11, 4, 202, 17, 11, 4, 202, - 14, 11, 4, 202, 82, 11, 4, 202, 92, 11, 4, 202, 86, 11, 4, 201, 251, 11, - 4, 201, 250, 11, 4, 202, 6, 11, 4, 201, 254, 11, 4, 201, 252, 11, 4, 201, - 253, 11, 4, 201, 237, 11, 4, 201, 236, 11, 4, 201, 242, 11, 4, 201, 240, - 11, 4, 201, 238, 11, 4, 201, 239, 11, 4, 246, 50, 11, 4, 246, 43, 11, 4, - 246, 79, 11, 4, 246, 63, 11, 4, 246, 76, 11, 4, 246, 70, 11, 4, 246, 78, - 11, 4, 246, 77, 11, 4, 247, 17, 11, 4, 247, 9, 11, 4, 247, 92, 11, 4, - 247, 48, 11, 4, 245, 101, 11, 4, 245, 103, 11, 4, 245, 102, 11, 4, 245, - 158, 11, 4, 245, 148, 11, 4, 245, 254, 11, 4, 245, 175, 11, 4, 246, 202, - 11, 4, 246, 238, 11, 4, 246, 207, 11, 4, 245, 77, 11, 4, 245, 75, 11, 4, - 245, 110, 11, 4, 245, 99, 11, 4, 245, 83, 11, 4, 245, 96, 11, 4, 245, 54, - 11, 4, 245, 53, 11, 4, 245, 66, 11, 4, 245, 60, 11, 4, 245, 55, 11, 4, - 245, 57, 11, 4, 201, 220, 11, 4, 201, 219, 11, 4, 201, 226, 11, 4, 201, - 221, 11, 4, 201, 223, 11, 4, 201, 222, 11, 4, 201, 225, 11, 4, 201, 224, - 11, 4, 201, 232, 11, 4, 201, 231, 11, 4, 201, 235, 11, 4, 201, 233, 11, - 4, 201, 216, 11, 4, 201, 218, 11, 4, 201, 217, 11, 4, 201, 227, 11, 4, - 201, 230, 11, 4, 201, 228, 11, 4, 201, 209, 11, 4, 201, 213, 11, 4, 201, - 212, 11, 4, 201, 210, 11, 4, 201, 211, 11, 4, 201, 203, 11, 4, 201, 202, - 11, 4, 201, 208, 11, 4, 201, 206, 11, 4, 201, 204, 11, 4, 201, 205, 11, - 4, 220, 201, 11, 4, 220, 200, 11, 4, 220, 206, 11, 4, 220, 202, 11, 4, - 220, 203, 11, 4, 220, 205, 11, 4, 220, 204, 11, 4, 220, 211, 11, 4, 220, - 210, 11, 4, 220, 214, 11, 4, 220, 213, 11, 4, 220, 194, 11, 4, 220, 195, - 11, 4, 220, 198, 11, 4, 220, 199, 11, 4, 220, 207, 11, 4, 220, 209, 11, - 4, 220, 189, 11, 4, 220, 197, 11, 4, 220, 193, 11, 4, 220, 190, 11, 4, - 220, 191, 11, 4, 220, 184, 11, 4, 220, 183, 11, 4, 220, 188, 11, 4, 220, - 187, 11, 4, 220, 185, 11, 4, 220, 186, 11, 4, 212, 90, 11, 4, 195, 11, 4, - 212, 162, 11, 4, 212, 93, 11, 4, 212, 150, 11, 4, 212, 153, 11, 4, 212, - 151, 11, 4, 214, 225, 11, 4, 214, 211, 11, 4, 215, 36, 11, 4, 214, 233, - 11, 4, 210, 204, 11, 4, 210, 206, 11, 4, 210, 205, 11, 4, 211, 244, 11, - 4, 211, 233, 11, 4, 212, 13, 11, 4, 211, 248, 11, 4, 213, 103, 11, 4, - 214, 177, 11, 4, 213, 132, 11, 4, 210, 181, 11, 4, 210, 178, 11, 4, 211, - 10, 11, 4, 210, 203, 11, 4, 210, 185, 11, 4, 210, 193, 11, 4, 210, 83, - 11, 4, 210, 82, 11, 4, 210, 151, 11, 4, 210, 91, 11, 4, 210, 85, 11, 4, - 210, 90, 11, 4, 211, 126, 11, 4, 211, 125, 11, 4, 211, 132, 11, 4, 211, - 127, 11, 4, 211, 129, 11, 4, 211, 131, 11, 4, 211, 130, 11, 4, 211, 141, - 11, 4, 211, 139, 11, 4, 211, 164, 11, 4, 211, 142, 11, 4, 211, 121, 11, - 4, 211, 120, 11, 4, 211, 124, 11, 4, 211, 122, 11, 4, 211, 135, 11, 4, - 211, 138, 11, 4, 211, 136, 11, 4, 211, 117, 11, 4, 211, 115, 11, 4, 211, - 119, 11, 4, 211, 118, 11, 4, 211, 110, 11, 4, 211, 109, 11, 4, 211, 114, - 11, 4, 211, 113, 11, 4, 211, 111, 11, 4, 211, 112, 11, 4, 202, 75, 11, 4, - 202, 74, 11, 4, 202, 80, 11, 4, 202, 77, 11, 4, 202, 54, 11, 4, 202, 56, - 11, 4, 202, 55, 11, 4, 202, 59, 11, 4, 202, 58, 11, 4, 202, 63, 11, 4, - 202, 60, 11, 4, 202, 68, 11, 4, 202, 67, 11, 4, 202, 71, 11, 4, 202, 69, - 11, 4, 202, 50, 11, 4, 202, 49, 11, 4, 202, 57, 11, 4, 202, 53, 11, 4, - 202, 51, 11, 4, 202, 52, 11, 4, 202, 42, 11, 4, 202, 41, 11, 4, 202, 46, - 11, 4, 202, 45, 11, 4, 202, 43, 11, 4, 202, 44, 11, 4, 246, 176, 11, 4, - 246, 172, 11, 4, 246, 199, 11, 4, 246, 185, 11, 4, 246, 94, 11, 4, 246, - 93, 11, 4, 246, 96, 11, 4, 246, 95, 11, 4, 246, 109, 11, 4, 246, 108, 11, - 4, 246, 116, 11, 4, 246, 111, 11, 4, 246, 147, 11, 4, 246, 145, 11, 4, - 246, 170, 11, 4, 246, 155, 11, 4, 246, 88, 11, 4, 246, 98, 11, 4, 246, - 92, 11, 4, 246, 89, 11, 4, 246, 91, 11, 4, 246, 81, 11, 4, 246, 80, 11, - 4, 246, 85, 11, 4, 246, 84, 11, 4, 246, 82, 11, 4, 246, 83, 11, 4, 215, - 181, 11, 4, 215, 185, 11, 4, 215, 163, 11, 4, 215, 164, 11, 4, 215, 168, - 11, 4, 215, 167, 11, 4, 215, 171, 11, 4, 215, 169, 11, 4, 215, 175, 11, - 4, 215, 174, 11, 4, 215, 180, 11, 4, 215, 176, 11, 4, 215, 159, 11, 4, - 215, 157, 11, 4, 215, 165, 11, 4, 215, 162, 11, 4, 215, 160, 11, 4, 215, - 161, 11, 4, 215, 152, 11, 4, 215, 151, 11, 4, 215, 156, 11, 4, 215, 155, - 11, 4, 215, 153, 11, 4, 215, 154, 11, 4, 221, 145, 11, 4, 221, 144, 11, - 4, 221, 147, 11, 4, 221, 146, 11, 4, 221, 136, 11, 4, 221, 138, 11, 4, - 221, 137, 11, 4, 221, 140, 11, 4, 221, 139, 11, 4, 221, 143, 11, 4, 221, - 142, 11, 4, 221, 130, 11, 4, 221, 129, 11, 4, 221, 135, 11, 4, 221, 133, - 11, 4, 221, 131, 11, 4, 221, 132, 11, 4, 221, 124, 11, 4, 221, 123, 11, - 4, 221, 128, 11, 4, 221, 127, 11, 4, 221, 125, 11, 4, 221, 126, 11, 4, - 213, 53, 11, 4, 213, 48, 11, 4, 213, 90, 11, 4, 213, 64, 11, 4, 212, 188, - 11, 4, 212, 190, 11, 4, 212, 189, 11, 4, 212, 212, 11, 4, 212, 208, 11, - 4, 212, 242, 11, 4, 212, 232, 11, 4, 213, 21, 11, 4, 213, 14, 11, 4, 213, - 43, 11, 4, 213, 30, 11, 4, 212, 184, 11, 4, 212, 181, 11, 4, 212, 199, - 11, 4, 212, 187, 11, 4, 212, 185, 11, 4, 212, 186, 11, 4, 212, 165, 11, - 4, 212, 164, 11, 4, 212, 171, 11, 4, 212, 168, 11, 4, 212, 166, 11, 4, - 212, 167, 11, 4, 216, 172, 11, 4, 216, 166, 11, 4, 216, 220, 11, 4, 216, - 178, 11, 4, 215, 122, 11, 4, 215, 124, 11, 4, 215, 123, 11, 4, 215, 199, - 11, 4, 215, 187, 11, 4, 215, 227, 11, 4, 215, 203, 11, 4, 216, 66, 11, 4, - 216, 158, 11, 4, 216, 105, 11, 4, 215, 115, 11, 4, 215, 112, 11, 4, 215, - 145, 11, 4, 215, 121, 11, 4, 215, 117, 11, 4, 215, 118, 11, 4, 215, 97, - 11, 4, 215, 96, 11, 4, 215, 102, 11, 4, 215, 100, 11, 4, 215, 98, 11, 4, - 215, 99, 11, 4, 230, 131, 11, 4, 230, 130, 11, 4, 230, 141, 11, 4, 230, - 132, 11, 4, 230, 137, 11, 4, 230, 136, 11, 4, 230, 139, 11, 4, 230, 138, - 11, 4, 230, 72, 11, 4, 230, 71, 11, 4, 230, 74, 11, 4, 230, 73, 11, 4, - 230, 88, 11, 4, 230, 86, 11, 4, 230, 101, 11, 4, 230, 90, 11, 4, 230, 65, - 11, 4, 230, 63, 11, 4, 230, 82, 11, 4, 230, 70, 11, 4, 230, 67, 11, 4, - 230, 68, 11, 4, 230, 57, 11, 4, 230, 56, 11, 4, 230, 61, 11, 4, 230, 60, - 11, 4, 230, 58, 11, 4, 230, 59, 11, 4, 217, 81, 11, 4, 217, 79, 11, 4, - 217, 88, 11, 4, 217, 82, 11, 4, 217, 85, 11, 4, 217, 84, 11, 4, 217, 87, - 11, 4, 217, 86, 11, 4, 217, 32, 11, 4, 217, 29, 11, 4, 217, 34, 11, 4, - 217, 33, 11, 4, 217, 68, 11, 4, 217, 67, 11, 4, 217, 77, 11, 4, 217, 71, - 11, 4, 217, 24, 11, 4, 217, 20, 11, 4, 217, 65, 11, 4, 217, 28, 11, 4, - 217, 26, 11, 4, 217, 27, 11, 4, 217, 4, 11, 4, 217, 2, 11, 4, 217, 14, - 11, 4, 217, 7, 11, 4, 217, 5, 11, 4, 217, 6, 11, 4, 230, 120, 11, 4, 230, - 119, 11, 4, 230, 126, 11, 4, 230, 121, 11, 4, 230, 123, 11, 4, 230, 122, - 11, 4, 230, 125, 11, 4, 230, 124, 11, 4, 230, 111, 11, 4, 230, 113, 11, - 4, 230, 112, 11, 4, 230, 116, 11, 4, 230, 115, 11, 4, 230, 118, 11, 4, - 230, 117, 11, 4, 230, 107, 11, 4, 230, 106, 11, 4, 230, 114, 11, 4, 230, - 110, 11, 4, 230, 108, 11, 4, 230, 109, 11, 4, 230, 103, 11, 4, 230, 102, - 11, 4, 230, 105, 11, 4, 230, 104, 11, 4, 222, 25, 11, 4, 222, 24, 11, 4, - 222, 32, 11, 4, 222, 26, 11, 4, 222, 28, 11, 4, 222, 27, 11, 4, 222, 31, - 11, 4, 222, 29, 11, 4, 222, 14, 11, 4, 222, 15, 11, 4, 222, 20, 11, 4, - 222, 19, 11, 4, 222, 23, 11, 4, 222, 21, 11, 4, 222, 9, 11, 4, 222, 18, - 11, 4, 222, 13, 11, 4, 222, 10, 11, 4, 222, 11, 11, 4, 222, 4, 11, 4, - 222, 3, 11, 4, 222, 8, 11, 4, 222, 7, 11, 4, 222, 5, 11, 4, 222, 6, 11, - 4, 220, 236, 11, 4, 220, 235, 11, 4, 220, 248, 11, 4, 220, 240, 11, 4, - 220, 245, 11, 4, 220, 244, 11, 4, 220, 247, 11, 4, 220, 246, 11, 4, 220, - 221, 11, 4, 220, 223, 11, 4, 220, 222, 11, 4, 220, 228, 11, 4, 220, 227, - 11, 4, 220, 233, 11, 4, 220, 229, 11, 4, 220, 219, 11, 4, 220, 217, 11, - 4, 220, 226, 11, 4, 220, 220, 11, 4, 203, 162, 11, 4, 203, 161, 11, 4, - 203, 170, 11, 4, 203, 164, 11, 4, 203, 166, 11, 4, 203, 165, 11, 4, 203, - 168, 11, 4, 203, 167, 11, 4, 203, 150, 11, 4, 203, 151, 11, 4, 203, 155, - 11, 4, 203, 154, 11, 4, 203, 160, 11, 4, 203, 158, 11, 4, 203, 128, 11, - 4, 203, 126, 11, 4, 203, 141, 11, 4, 203, 131, 11, 4, 203, 129, 11, 4, - 203, 130, 11, 4, 202, 253, 11, 4, 202, 251, 11, 4, 203, 11, 11, 4, 202, - 254, 11, 4, 203, 5, 11, 4, 203, 4, 11, 4, 203, 8, 11, 4, 203, 6, 11, 4, - 202, 191, 11, 4, 202, 190, 11, 4, 202, 194, 11, 4, 202, 192, 11, 4, 202, - 227, 11, 4, 202, 223, 11, 4, 202, 247, 11, 4, 202, 231, 11, 4, 202, 182, - 11, 4, 202, 178, 11, 4, 202, 213, 11, 4, 202, 189, 11, 4, 202, 185, 11, - 4, 202, 186, 11, 4, 202, 162, 11, 4, 202, 161, 11, 4, 202, 169, 11, 4, - 202, 165, 11, 4, 202, 163, 11, 4, 202, 164, 11, 40, 217, 68, 11, 40, 227, - 148, 11, 40, 229, 64, 11, 40, 220, 240, 11, 40, 245, 60, 11, 40, 211, - 132, 11, 40, 238, 138, 11, 40, 238, 170, 11, 40, 224, 155, 11, 40, 235, - 233, 11, 40, 226, 192, 11, 40, 248, 170, 11, 40, 224, 27, 11, 40, 202, - 247, 11, 40, 217, 159, 11, 40, 235, 227, 11, 40, 209, 212, 11, 40, 239, - 8, 11, 40, 201, 254, 11, 40, 245, 54, 11, 40, 244, 80, 11, 40, 247, 160, - 11, 40, 238, 134, 11, 40, 220, 229, 11, 40, 207, 203, 11, 40, 220, 9, 11, - 40, 230, 107, 11, 40, 202, 13, 11, 40, 217, 138, 11, 40, 236, 178, 11, - 40, 202, 253, 11, 40, 204, 159, 11, 40, 212, 171, 11, 40, 206, 44, 11, - 40, 202, 116, 11, 40, 230, 101, 11, 40, 220, 193, 11, 40, 230, 105, 11, - 40, 238, 18, 11, 40, 230, 125, 11, 40, 204, 0, 11, 40, 242, 42, 11, 40, - 212, 186, 11, 40, 227, 142, 11, 40, 245, 66, 11, 40, 245, 102, 11, 40, - 246, 63, 11, 40, 235, 230, 11, 40, 213, 53, 11, 40, 201, 253, 11, 40, - 212, 232, 11, 40, 246, 170, 11, 40, 201, 223, 11, 40, 223, 51, 11, 40, - 229, 201, 227, 91, 1, 249, 32, 227, 91, 1, 185, 227, 91, 1, 218, 208, - 227, 91, 1, 244, 212, 227, 91, 1, 210, 22, 227, 91, 1, 209, 108, 227, 91, - 1, 239, 8, 227, 91, 1, 173, 227, 91, 1, 229, 144, 227, 91, 1, 230, 181, - 227, 91, 1, 247, 92, 227, 91, 1, 246, 199, 227, 91, 1, 241, 255, 227, 91, - 1, 208, 20, 227, 91, 1, 208, 10, 227, 91, 1, 192, 227, 91, 1, 201, 201, - 227, 91, 1, 228, 113, 227, 91, 1, 215, 36, 227, 91, 1, 202, 80, 227, 91, - 1, 202, 116, 227, 91, 1, 222, 203, 227, 91, 1, 152, 227, 91, 1, 203, 182, - 227, 91, 1, 237, 12, 227, 91, 1, 240, 108, 227, 91, 1, 204, 111, 227, 91, - 1, 213, 90, 227, 91, 1, 198, 227, 91, 1, 238, 119, 227, 91, 1, 63, 227, - 91, 1, 251, 109, 227, 91, 1, 74, 227, 91, 1, 240, 238, 227, 91, 1, 75, - 227, 91, 1, 78, 227, 91, 1, 68, 227, 91, 1, 207, 24, 227, 91, 1, 207, 18, - 227, 91, 1, 220, 73, 227, 91, 1, 143, 223, 170, 209, 2, 227, 91, 1, 143, - 223, 111, 218, 69, 227, 91, 1, 143, 223, 170, 245, 65, 227, 91, 1, 143, - 223, 170, 248, 23, 227, 91, 1, 143, 223, 170, 201, 201, 227, 91, 1, 143, - 223, 170, 230, 150, 227, 91, 217, 179, 245, 233, 227, 91, 217, 179, 239, - 102, 211, 61, 48, 4, 241, 161, 48, 4, 241, 157, 48, 4, 237, 48, 48, 4, - 204, 55, 48, 4, 204, 54, 48, 4, 219, 23, 48, 4, 248, 93, 48, 4, 248, 150, - 48, 4, 225, 46, 48, 4, 228, 239, 48, 4, 224, 187, 48, 4, 238, 203, 48, 4, - 240, 53, 48, 4, 206, 50, 48, 4, 209, 176, 48, 4, 209, 90, 48, 4, 243, - 247, 48, 4, 243, 244, 48, 4, 227, 226, 48, 4, 216, 135, 48, 4, 244, 61, - 48, 4, 223, 16, 48, 4, 214, 165, 48, 4, 213, 41, 48, 4, 202, 90, 48, 4, - 202, 70, 48, 4, 246, 230, 48, 4, 230, 159, 48, 4, 222, 39, 48, 4, 203, - 49, 48, 4, 229, 198, 48, 4, 222, 176, 48, 4, 238, 182, 48, 4, 225, 8, 48, - 4, 222, 235, 48, 4, 221, 0, 48, 4, 75, 48, 4, 231, 49, 48, 4, 237, 3, 48, - 4, 236, 238, 48, 4, 204, 30, 48, 4, 204, 18, 48, 4, 218, 167, 48, 4, 248, - 91, 48, 4, 248, 86, 48, 4, 225, 39, 48, 4, 228, 236, 48, 4, 224, 184, 48, - 4, 238, 199, 48, 4, 240, 26, 48, 4, 205, 230, 48, 4, 209, 2, 48, 4, 209, - 70, 48, 4, 243, 239, 48, 4, 243, 243, 48, 4, 227, 148, 48, 4, 216, 57, - 48, 4, 243, 233, 48, 4, 223, 10, 48, 4, 212, 162, 48, 4, 213, 11, 48, 4, - 202, 39, 48, 4, 202, 66, 48, 4, 246, 79, 48, 4, 230, 141, 48, 4, 222, 32, - 48, 4, 203, 11, 48, 4, 229, 100, 48, 4, 222, 168, 48, 4, 238, 81, 48, 4, - 224, 155, 48, 4, 222, 100, 48, 4, 220, 248, 48, 4, 63, 48, 4, 250, 231, - 48, 4, 222, 198, 48, 4, 152, 48, 4, 237, 126, 48, 4, 204, 111, 48, 4, - 204, 97, 48, 4, 185, 48, 4, 248, 98, 48, 4, 249, 32, 48, 4, 225, 54, 48, - 4, 228, 244, 48, 4, 228, 242, 48, 4, 224, 191, 48, 4, 238, 207, 48, 4, - 240, 108, 48, 4, 206, 86, 48, 4, 210, 22, 48, 4, 209, 108, 48, 4, 244, 1, - 48, 4, 243, 246, 48, 4, 228, 113, 48, 4, 216, 220, 48, 4, 244, 212, 48, - 4, 223, 25, 48, 4, 215, 36, 48, 4, 213, 90, 48, 4, 202, 116, 48, 4, 202, - 80, 48, 4, 247, 92, 48, 4, 230, 181, 48, 4, 222, 48, 48, 4, 198, 48, 4, - 173, 48, 4, 230, 4, 48, 4, 222, 182, 48, 4, 239, 8, 48, 4, 192, 48, 4, - 201, 201, 48, 4, 221, 11, 48, 4, 220, 18, 48, 4, 220, 13, 48, 4, 236, - 117, 48, 4, 203, 244, 48, 4, 203, 240, 48, 4, 218, 45, 48, 4, 248, 89, - 48, 4, 248, 10, 48, 4, 225, 34, 48, 4, 228, 234, 48, 4, 224, 180, 48, 4, - 238, 195, 48, 4, 239, 175, 48, 4, 205, 176, 48, 4, 208, 148, 48, 4, 209, - 42, 48, 4, 243, 236, 48, 4, 243, 241, 48, 4, 227, 18, 48, 4, 215, 208, - 48, 4, 243, 90, 48, 4, 222, 253, 48, 4, 211, 250, 48, 4, 212, 236, 48, 4, - 202, 15, 48, 4, 202, 61, 48, 4, 245, 180, 48, 4, 230, 91, 48, 4, 222, 22, - 48, 4, 202, 232, 48, 4, 229, 6, 48, 4, 222, 166, 48, 4, 238, 28, 48, 4, - 224, 35, 48, 4, 221, 180, 48, 4, 220, 230, 48, 4, 68, 48, 4, 206, 255, - 48, 4, 236, 26, 48, 4, 236, 13, 48, 4, 203, 217, 48, 4, 203, 210, 48, 4, - 217, 191, 48, 4, 248, 88, 48, 4, 247, 193, 48, 4, 225, 33, 48, 4, 228, - 232, 48, 4, 224, 179, 48, 4, 238, 194, 48, 4, 239, 108, 48, 4, 204, 163, - 48, 4, 207, 203, 48, 4, 209, 22, 48, 4, 243, 234, 48, 4, 243, 240, 48, 4, - 226, 239, 48, 4, 215, 145, 48, 4, 242, 42, 48, 4, 222, 248, 48, 4, 211, - 10, 48, 4, 212, 199, 48, 4, 202, 6, 48, 4, 202, 57, 48, 4, 245, 110, 48, - 4, 230, 82, 48, 4, 222, 18, 48, 4, 202, 213, 48, 4, 228, 209, 48, 4, 222, - 165, 48, 4, 237, 230, 48, 4, 223, 246, 48, 4, 221, 84, 48, 4, 220, 226, - 48, 4, 78, 48, 4, 220, 31, 48, 4, 222, 124, 48, 4, 236, 136, 48, 4, 236, - 120, 48, 4, 204, 0, 48, 4, 203, 245, 48, 4, 218, 69, 48, 4, 248, 90, 48, - 4, 248, 23, 48, 4, 225, 35, 48, 4, 228, 235, 48, 4, 224, 182, 48, 4, 238, - 197, 48, 4, 238, 196, 48, 4, 239, 186, 48, 4, 205, 189, 48, 4, 135, 48, - 4, 209, 47, 48, 4, 243, 237, 48, 4, 243, 242, 48, 4, 227, 49, 48, 4, 215, - 227, 48, 4, 243, 113, 48, 4, 223, 1, 48, 4, 212, 13, 48, 4, 212, 242, 48, - 4, 202, 17, 48, 4, 202, 63, 48, 4, 245, 254, 48, 4, 230, 101, 48, 4, 222, - 23, 48, 4, 202, 247, 48, 4, 229, 26, 48, 4, 222, 167, 48, 4, 238, 39, 48, - 4, 224, 82, 48, 4, 221, 191, 48, 4, 220, 233, 48, 4, 74, 48, 4, 241, 92, - 48, 4, 222, 187, 48, 4, 237, 67, 48, 4, 237, 33, 48, 4, 204, 62, 48, 4, - 204, 49, 48, 4, 219, 34, 48, 4, 248, 94, 48, 4, 248, 162, 48, 4, 225, 47, - 48, 4, 228, 240, 48, 4, 228, 238, 48, 4, 224, 188, 48, 4, 238, 204, 48, - 4, 238, 202, 48, 4, 240, 60, 48, 4, 206, 55, 48, 4, 209, 187, 48, 4, 209, - 92, 48, 4, 243, 248, 48, 4, 243, 245, 48, 4, 227, 234, 48, 4, 216, 158, - 48, 4, 244, 75, 48, 4, 223, 17, 48, 4, 214, 177, 48, 4, 213, 43, 48, 4, - 202, 92, 48, 4, 202, 71, 48, 4, 246, 238, 48, 4, 230, 161, 48, 4, 222, - 41, 48, 4, 203, 52, 48, 4, 229, 201, 48, 4, 222, 177, 48, 4, 222, 173, - 48, 4, 238, 190, 48, 4, 238, 177, 48, 4, 225, 20, 48, 4, 222, 240, 48, 4, - 221, 1, 48, 4, 222, 205, 48, 4, 227, 188, 48, 245, 233, 48, 239, 102, - 211, 61, 48, 217, 47, 82, 48, 4, 223, 0, 240, 108, 48, 4, 223, 0, 173, - 48, 4, 223, 0, 211, 250, 48, 16, 240, 49, 48, 16, 229, 196, 48, 16, 208, - 215, 48, 16, 222, 75, 48, 16, 248, 237, 48, 16, 240, 107, 48, 16, 210, - 18, 48, 16, 244, 164, 48, 16, 243, 89, 48, 16, 228, 193, 48, 16, 208, - 152, 48, 16, 243, 112, 48, 16, 230, 92, 48, 17, 202, 84, 48, 17, 105, 48, - 17, 108, 48, 17, 147, 48, 17, 149, 48, 17, 170, 48, 17, 195, 48, 17, 213, - 111, 48, 17, 199, 48, 17, 222, 63, 48, 4, 223, 0, 192, 48, 4, 223, 0, - 243, 113, 36, 6, 1, 202, 88, 36, 5, 1, 202, 88, 36, 6, 1, 241, 250, 36, - 5, 1, 241, 250, 36, 6, 1, 216, 73, 241, 252, 36, 5, 1, 216, 73, 241, 252, - 36, 6, 1, 230, 230, 36, 5, 1, 230, 230, 36, 6, 1, 243, 129, 36, 5, 1, - 243, 129, 36, 6, 1, 224, 43, 207, 14, 36, 5, 1, 224, 43, 207, 14, 36, 6, - 1, 247, 204, 220, 36, 36, 5, 1, 247, 204, 220, 36, 36, 6, 1, 222, 216, - 203, 34, 36, 5, 1, 222, 216, 203, 34, 36, 6, 1, 203, 31, 3, 249, 26, 203, - 34, 36, 5, 1, 203, 31, 3, 249, 26, 203, 34, 36, 6, 1, 230, 228, 203, 66, - 36, 5, 1, 230, 228, 203, 66, 36, 6, 1, 216, 73, 202, 213, 36, 5, 1, 216, - 73, 202, 213, 36, 6, 1, 230, 228, 63, 36, 5, 1, 230, 228, 63, 36, 6, 1, - 246, 16, 227, 86, 202, 183, 36, 5, 1, 246, 16, 227, 86, 202, 183, 36, 6, - 1, 248, 35, 202, 183, 36, 5, 1, 248, 35, 202, 183, 36, 6, 1, 230, 228, - 246, 16, 227, 86, 202, 183, 36, 5, 1, 230, 228, 246, 16, 227, 86, 202, - 183, 36, 6, 1, 202, 249, 36, 5, 1, 202, 249, 36, 6, 1, 216, 73, 208, 14, - 36, 5, 1, 216, 73, 208, 14, 36, 6, 1, 212, 7, 244, 75, 36, 5, 1, 212, 7, - 244, 75, 36, 6, 1, 212, 7, 241, 122, 36, 5, 1, 212, 7, 241, 122, 36, 6, - 1, 212, 7, 241, 103, 36, 5, 1, 212, 7, 241, 103, 36, 6, 1, 224, 47, 78, - 36, 5, 1, 224, 47, 78, 36, 6, 1, 248, 63, 78, 36, 5, 1, 248, 63, 78, 36, - 6, 1, 52, 224, 47, 78, 36, 5, 1, 52, 224, 47, 78, 36, 1, 223, 227, 78, - 39, 36, 204, 146, 39, 36, 209, 153, 224, 114, 54, 39, 36, 236, 12, 224, - 114, 54, 39, 36, 209, 37, 224, 114, 54, 212, 55, 250, 59, 39, 36, 1, 207, - 11, 231, 110, 39, 36, 1, 75, 39, 36, 1, 203, 11, 39, 36, 1, 68, 39, 36, - 1, 237, 91, 54, 39, 36, 1, 203, 30, 39, 36, 1, 212, 7, 54, 39, 36, 1, - 220, 36, 39, 36, 229, 213, 39, 36, 219, 41, 36, 229, 213, 36, 219, 41, - 36, 6, 1, 242, 9, 36, 5, 1, 242, 9, 36, 6, 1, 241, 241, 36, 5, 1, 241, - 241, 36, 6, 1, 202, 47, 36, 5, 1, 202, 47, 36, 6, 1, 246, 254, 36, 5, 1, - 246, 254, 36, 6, 1, 241, 238, 36, 5, 1, 241, 238, 36, 6, 1, 209, 188, 3, - 101, 113, 36, 5, 1, 209, 188, 3, 101, 113, 36, 6, 1, 207, 158, 36, 5, 1, - 207, 158, 36, 6, 1, 207, 245, 36, 5, 1, 207, 245, 36, 6, 1, 207, 250, 36, - 5, 1, 207, 250, 36, 6, 1, 209, 193, 36, 5, 1, 209, 193, 36, 6, 1, 235, - 251, 36, 5, 1, 235, 251, 36, 6, 1, 212, 177, 36, 5, 1, 212, 177, 36, 6, - 1, 52, 78, 36, 5, 1, 52, 78, 36, 6, 1, 245, 128, 78, 36, 5, 1, 245, 128, - 78, 65, 1, 36, 237, 91, 54, 65, 1, 36, 212, 7, 54, 39, 36, 1, 241, 154, - 39, 36, 1, 230, 228, 74, 24, 1, 63, 24, 1, 173, 24, 1, 68, 24, 1, 228, - 209, 24, 1, 241, 161, 24, 1, 216, 135, 24, 1, 210, 1, 24, 1, 78, 24, 1, - 220, 248, 24, 1, 75, 24, 1, 228, 113, 24, 1, 185, 24, 1, 216, 3, 24, 1, - 216, 50, 24, 1, 227, 225, 24, 1, 225, 7, 24, 1, 210, 18, 24, 1, 223, 23, - 24, 1, 222, 46, 24, 1, 226, 185, 24, 1, 210, 179, 24, 1, 223, 246, 24, 1, - 213, 6, 24, 1, 212, 162, 24, 1, 213, 16, 24, 1, 213, 113, 24, 1, 228, - 137, 24, 1, 229, 170, 24, 1, 221, 55, 24, 1, 221, 84, 24, 1, 222, 17, 24, - 1, 202, 229, 24, 1, 212, 199, 24, 1, 202, 187, 24, 1, 198, 24, 1, 221, - 118, 24, 1, 229, 156, 24, 1, 218, 212, 24, 1, 222, 39, 24, 1, 221, 99, - 24, 1, 217, 183, 24, 1, 203, 214, 24, 1, 219, 23, 24, 1, 240, 53, 24, 1, - 215, 145, 24, 1, 226, 239, 24, 1, 224, 155, 24, 1, 222, 100, 24, 1, 216, - 75, 24, 1, 216, 202, 24, 1, 229, 180, 24, 1, 222, 131, 24, 1, 222, 182, - 24, 1, 222, 203, 24, 1, 212, 242, 24, 1, 217, 188, 24, 1, 239, 108, 24, - 1, 239, 179, 24, 1, 204, 111, 24, 1, 201, 201, 24, 1, 227, 148, 24, 1, - 218, 167, 24, 1, 227, 10, 24, 1, 229, 26, 24, 1, 225, 44, 24, 1, 216, - 107, 24, 1, 224, 240, 24, 1, 192, 24, 1, 209, 2, 24, 1, 229, 100, 24, 1, - 224, 82, 24, 1, 225, 52, 24, 1, 209, 132, 24, 1, 228, 244, 24, 1, 209, - 152, 24, 1, 221, 86, 24, 1, 214, 251, 24, 1, 240, 104, 24, 1, 228, 246, - 24, 1, 229, 21, 24, 39, 131, 228, 255, 24, 39, 131, 207, 194, 24, 222, - 45, 24, 239, 102, 211, 61, 24, 245, 242, 24, 245, 233, 24, 213, 143, 24, - 217, 47, 82, 65, 1, 246, 128, 143, 203, 1, 218, 119, 65, 1, 246, 128, - 143, 203, 77, 218, 119, 65, 1, 246, 128, 143, 203, 1, 213, 65, 65, 1, - 246, 128, 143, 203, 77, 213, 65, 65, 1, 246, 128, 143, 203, 1, 217, 65, - 65, 1, 246, 128, 143, 203, 77, 217, 65, 65, 1, 246, 128, 143, 203, 1, - 215, 145, 65, 1, 246, 128, 143, 203, 77, 215, 145, 65, 1, 240, 198, 242, - 83, 143, 142, 65, 1, 138, 242, 83, 143, 142, 65, 1, 224, 150, 242, 83, - 143, 142, 65, 1, 124, 242, 83, 143, 142, 65, 1, 240, 197, 242, 83, 143, - 142, 65, 1, 240, 198, 242, 83, 227, 214, 143, 142, 65, 1, 138, 242, 83, - 227, 214, 143, 142, 65, 1, 224, 150, 242, 83, 227, 214, 143, 142, 65, 1, - 124, 242, 83, 227, 214, 143, 142, 65, 1, 240, 197, 242, 83, 227, 214, - 143, 142, 65, 1, 240, 198, 227, 214, 143, 142, 65, 1, 138, 227, 214, 143, - 142, 65, 1, 224, 150, 227, 214, 143, 142, 65, 1, 124, 227, 214, 143, 142, - 65, 1, 240, 197, 227, 214, 143, 142, 65, 1, 70, 80, 142, 65, 1, 70, 212, - 57, 65, 1, 70, 236, 106, 142, 65, 1, 226, 251, 50, 245, 166, 250, 217, - 65, 1, 216, 188, 112, 47, 65, 1, 216, 188, 121, 47, 65, 1, 216, 188, 240, - 212, 82, 65, 1, 216, 188, 230, 239, 240, 212, 82, 65, 1, 124, 230, 239, - 240, 212, 82, 65, 1, 211, 42, 25, 138, 208, 161, 65, 1, 211, 42, 25, 124, - 208, 161, 8, 6, 1, 241, 149, 251, 30, 8, 5, 1, 241, 149, 251, 30, 8, 6, - 1, 241, 149, 251, 59, 8, 5, 1, 241, 149, 251, 59, 8, 6, 1, 237, 31, 8, 5, - 1, 237, 31, 8, 6, 1, 207, 107, 8, 5, 1, 207, 107, 8, 6, 1, 208, 89, 8, 5, - 1, 208, 89, 8, 6, 1, 245, 107, 8, 5, 1, 245, 107, 8, 6, 1, 245, 108, 3, - 245, 233, 8, 5, 1, 245, 108, 3, 245, 233, 8, 1, 5, 6, 240, 174, 8, 1, 5, - 6, 194, 8, 6, 1, 252, 25, 8, 5, 1, 252, 25, 8, 6, 1, 250, 178, 8, 5, 1, - 250, 178, 8, 6, 1, 250, 34, 8, 5, 1, 250, 34, 8, 6, 1, 250, 18, 8, 5, 1, - 250, 18, 8, 6, 1, 250, 19, 3, 236, 106, 142, 8, 5, 1, 250, 19, 3, 236, - 106, 142, 8, 6, 1, 250, 8, 8, 5, 1, 250, 8, 8, 6, 1, 216, 73, 247, 126, - 3, 243, 85, 8, 5, 1, 216, 73, 247, 126, 3, 243, 85, 8, 6, 1, 230, 55, 3, - 95, 8, 5, 1, 230, 55, 3, 95, 8, 6, 1, 230, 55, 3, 243, 228, 95, 8, 5, 1, - 230, 55, 3, 243, 228, 95, 8, 6, 1, 230, 55, 3, 211, 32, 25, 243, 228, 95, - 8, 5, 1, 230, 55, 3, 211, 32, 25, 243, 228, 95, 8, 6, 1, 247, 203, 159, - 8, 5, 1, 247, 203, 159, 8, 6, 1, 228, 131, 3, 138, 95, 8, 5, 1, 228, 131, - 3, 138, 95, 8, 6, 1, 158, 3, 163, 211, 32, 219, 199, 8, 5, 1, 158, 3, - 163, 211, 32, 219, 199, 8, 6, 1, 158, 3, 227, 14, 8, 5, 1, 158, 3, 227, - 14, 8, 6, 1, 220, 18, 8, 5, 1, 220, 18, 8, 6, 1, 219, 185, 3, 211, 32, - 209, 25, 244, 20, 8, 5, 1, 219, 185, 3, 211, 32, 209, 25, 244, 20, 8, 6, - 1, 219, 185, 3, 239, 199, 8, 5, 1, 219, 185, 3, 239, 199, 8, 6, 1, 219, - 185, 3, 211, 170, 209, 248, 8, 5, 1, 219, 185, 3, 211, 170, 209, 248, 8, - 6, 1, 217, 135, 3, 211, 32, 209, 25, 244, 20, 8, 5, 1, 217, 135, 3, 211, - 32, 209, 25, 244, 20, 8, 6, 1, 217, 135, 3, 243, 228, 95, 8, 5, 1, 217, - 135, 3, 243, 228, 95, 8, 6, 1, 217, 1, 215, 192, 8, 5, 1, 217, 1, 215, - 192, 8, 6, 1, 215, 132, 215, 192, 8, 5, 1, 215, 132, 215, 192, 8, 6, 1, - 206, 165, 3, 243, 228, 95, 8, 5, 1, 206, 165, 3, 243, 228, 95, 8, 6, 1, - 204, 152, 8, 5, 1, 204, 152, 8, 6, 1, 205, 197, 202, 159, 8, 5, 1, 205, - 197, 202, 159, 8, 6, 1, 209, 41, 3, 95, 8, 5, 1, 209, 41, 3, 95, 8, 6, 1, - 209, 41, 3, 211, 32, 209, 25, 244, 20, 8, 5, 1, 209, 41, 3, 211, 32, 209, - 25, 244, 20, 8, 6, 1, 206, 45, 8, 5, 1, 206, 45, 8, 6, 1, 240, 250, 8, 5, - 1, 240, 250, 8, 6, 1, 230, 215, 8, 5, 1, 230, 215, 8, 6, 1, 245, 218, 8, - 5, 1, 245, 218, 65, 1, 206, 193, 8, 5, 1, 242, 32, 8, 5, 1, 226, 222, 8, - 5, 1, 223, 220, 8, 5, 1, 221, 47, 8, 5, 1, 215, 131, 8, 1, 5, 6, 215, - 131, 8, 5, 1, 207, 191, 8, 5, 1, 207, 6, 8, 6, 1, 231, 4, 245, 51, 8, 5, - 1, 231, 4, 245, 51, 8, 6, 1, 231, 4, 240, 174, 8, 5, 1, 231, 4, 240, 174, - 8, 6, 1, 231, 4, 239, 75, 8, 6, 1, 207, 174, 231, 4, 239, 75, 8, 5, 1, - 207, 174, 231, 4, 239, 75, 8, 6, 1, 207, 174, 159, 8, 5, 1, 207, 174, - 159, 8, 6, 1, 231, 4, 146, 8, 5, 1, 231, 4, 146, 8, 6, 1, 231, 4, 194, 8, - 5, 1, 231, 4, 194, 8, 6, 1, 231, 4, 210, 69, 8, 5, 1, 231, 4, 210, 69, - 65, 1, 124, 246, 53, 251, 138, 65, 1, 245, 242, 65, 1, 212, 228, 241, 35, - 54, 8, 6, 1, 214, 255, 8, 5, 1, 214, 255, 8, 6, 1, 207, 174, 237, 171, 8, - 5, 1, 228, 131, 3, 216, 79, 236, 116, 25, 248, 124, 8, 1, 212, 114, 243, - 85, 8, 6, 1, 223, 164, 3, 244, 20, 8, 5, 1, 223, 164, 3, 244, 20, 8, 6, - 1, 247, 126, 3, 142, 8, 5, 1, 247, 126, 3, 142, 8, 5, 1, 247, 126, 3, - 219, 142, 113, 8, 5, 1, 237, 172, 3, 219, 142, 113, 8, 6, 1, 66, 3, 239, - 199, 8, 5, 1, 66, 3, 239, 199, 8, 6, 1, 240, 175, 3, 95, 8, 5, 1, 240, - 175, 3, 95, 8, 6, 1, 205, 182, 251, 109, 8, 5, 1, 205, 182, 251, 109, 8, - 6, 1, 205, 182, 220, 73, 8, 5, 1, 205, 182, 220, 73, 8, 6, 1, 205, 182, - 207, 24, 8, 5, 1, 205, 182, 207, 24, 8, 6, 1, 239, 76, 3, 220, 89, 95, 8, - 5, 1, 239, 76, 3, 220, 89, 95, 8, 6, 1, 230, 55, 3, 220, 89, 95, 8, 5, 1, - 230, 55, 3, 220, 89, 95, 8, 6, 1, 223, 164, 3, 220, 89, 95, 8, 5, 1, 223, - 164, 3, 220, 89, 95, 8, 6, 1, 217, 1, 3, 220, 89, 95, 8, 5, 1, 217, 1, 3, - 220, 89, 95, 8, 6, 1, 215, 94, 3, 220, 89, 95, 8, 5, 1, 215, 94, 3, 220, - 89, 95, 8, 6, 1, 237, 172, 3, 113, 8, 6, 1, 216, 73, 171, 74, 8, 6, 1, - 132, 239, 75, 8, 6, 1, 228, 131, 3, 248, 124, 8, 6, 1, 207, 174, 230, 54, - 8, 6, 1, 207, 174, 210, 69, 8, 6, 1, 230, 185, 3, 245, 126, 8, 6, 1, 246, - 142, 8, 6, 1, 248, 106, 8, 5, 1, 248, 106, 8, 6, 1, 220, 36, 8, 5, 1, - 220, 36, 8, 241, 40, 1, 212, 154, 75, 65, 1, 6, 237, 172, 3, 95, 65, 1, - 5, 32, 220, 73, 8, 1, 5, 6, 207, 174, 226, 185, 8, 241, 40, 1, 216, 73, - 240, 174, 8, 241, 40, 1, 216, 73, 219, 184, 8, 241, 40, 1, 230, 239, 226, - 185, 8, 241, 40, 1, 235, 206, 227, 20, 8, 241, 40, 1, 250, 126, 226, 185, - 210, 149, 223, 94, 1, 63, 210, 149, 223, 94, 1, 75, 210, 149, 223, 94, 2, - 242, 11, 210, 149, 223, 94, 1, 68, 210, 149, 223, 94, 1, 74, 210, 149, - 223, 94, 1, 78, 210, 149, 223, 94, 2, 237, 85, 210, 149, 223, 94, 1, 229, - 26, 210, 149, 223, 94, 1, 229, 115, 210, 149, 223, 94, 1, 238, 39, 210, - 149, 223, 94, 1, 238, 91, 210, 149, 223, 94, 2, 250, 180, 210, 149, 223, - 94, 1, 245, 254, 210, 149, 223, 94, 1, 246, 116, 210, 149, 223, 94, 1, - 230, 101, 210, 149, 223, 94, 1, 230, 143, 210, 149, 223, 94, 1, 207, 218, - 210, 149, 223, 94, 1, 207, 224, 210, 149, 223, 94, 1, 244, 90, 210, 149, - 223, 94, 1, 244, 99, 210, 149, 223, 94, 1, 135, 210, 149, 223, 94, 1, - 209, 47, 210, 149, 223, 94, 1, 243, 113, 210, 149, 223, 94, 1, 243, 237, - 210, 149, 223, 94, 1, 221, 191, 210, 149, 223, 94, 1, 218, 69, 210, 149, - 223, 94, 1, 218, 180, 210, 149, 223, 94, 1, 248, 23, 210, 149, 223, 94, - 1, 248, 90, 210, 149, 223, 94, 1, 224, 82, 210, 149, 223, 94, 1, 215, - 227, 210, 149, 223, 94, 1, 227, 49, 210, 149, 223, 94, 1, 215, 171, 210, - 149, 223, 94, 1, 212, 13, 210, 149, 223, 94, 1, 236, 136, 210, 149, 223, - 94, 22, 2, 63, 210, 149, 223, 94, 22, 2, 75, 210, 149, 223, 94, 22, 2, - 68, 210, 149, 223, 94, 22, 2, 74, 210, 149, 223, 94, 22, 2, 220, 18, 210, - 149, 223, 94, 218, 64, 225, 92, 210, 149, 223, 94, 218, 64, 225, 91, 210, - 149, 223, 94, 218, 64, 225, 90, 210, 149, 223, 94, 218, 64, 225, 89, 153, - 231, 33, 239, 138, 118, 217, 55, 153, 231, 33, 239, 138, 118, 237, 137, - 153, 231, 33, 239, 138, 126, 217, 53, 153, 231, 33, 239, 138, 118, 212, - 80, 153, 231, 33, 239, 138, 118, 241, 138, 153, 231, 33, 239, 138, 126, - 212, 79, 153, 231, 33, 217, 56, 82, 153, 231, 33, 218, 96, 82, 153, 231, - 33, 215, 120, 82, 153, 231, 33, 217, 57, 82, 218, 204, 1, 173, 218, 204, - 1, 229, 144, 218, 204, 1, 239, 8, 218, 204, 1, 222, 203, 218, 204, 1, - 247, 92, 218, 204, 1, 246, 199, 218, 204, 1, 230, 181, 218, 204, 1, 221, - 11, 218, 204, 1, 210, 22, 218, 204, 1, 209, 108, 218, 204, 1, 244, 212, - 218, 204, 1, 201, 201, 218, 204, 1, 185, 218, 204, 1, 218, 208, 218, 204, - 1, 249, 32, 218, 204, 1, 192, 218, 204, 1, 208, 20, 218, 204, 1, 208, 10, - 218, 204, 1, 241, 255, 218, 204, 1, 204, 111, 218, 204, 1, 202, 80, 218, - 204, 1, 202, 116, 218, 204, 1, 5, 63, 218, 204, 1, 198, 218, 204, 1, 216, - 220, 218, 204, 1, 228, 113, 218, 204, 1, 213, 90, 218, 204, 1, 215, 36, - 218, 204, 1, 152, 218, 204, 1, 63, 218, 204, 1, 75, 218, 204, 1, 68, 218, - 204, 1, 74, 218, 204, 1, 78, 218, 204, 1, 217, 126, 218, 204, 1, 203, - 182, 218, 204, 1, 240, 108, 218, 204, 1, 238, 155, 218, 204, 1, 241, 161, - 218, 204, 210, 254, 1, 204, 111, 218, 204, 210, 254, 1, 198, 218, 204, 1, - 207, 241, 218, 204, 1, 207, 229, 218, 204, 1, 244, 120, 218, 204, 1, 221, - 227, 218, 204, 1, 250, 255, 198, 218, 204, 1, 205, 185, 213, 90, 218, - 204, 1, 205, 186, 152, 218, 204, 1, 250, 66, 240, 108, 218, 204, 210, - 254, 1, 216, 220, 218, 204, 210, 201, 1, 216, 220, 218, 204, 1, 247, 52, - 218, 204, 212, 120, 237, 65, 82, 218, 204, 52, 237, 65, 82, 218, 204, - 131, 213, 82, 218, 204, 131, 52, 213, 82, 214, 215, 2, 250, 180, 214, - 215, 2, 205, 199, 214, 215, 1, 63, 214, 215, 1, 252, 25, 214, 215, 1, 75, - 214, 215, 1, 231, 83, 214, 215, 1, 68, 214, 215, 1, 206, 178, 214, 215, - 1, 125, 146, 214, 215, 1, 125, 215, 186, 214, 215, 1, 125, 159, 214, 215, - 1, 125, 227, 78, 214, 215, 1, 74, 214, 215, 1, 241, 161, 214, 215, 1, - 251, 64, 214, 215, 1, 78, 214, 215, 1, 220, 18, 214, 215, 1, 250, 34, - 214, 215, 1, 173, 214, 215, 1, 229, 144, 214, 215, 1, 239, 8, 214, 215, - 1, 238, 119, 214, 215, 1, 222, 203, 214, 215, 1, 247, 92, 214, 215, 1, - 246, 199, 214, 215, 1, 230, 181, 214, 215, 1, 230, 149, 214, 215, 1, 221, - 11, 214, 215, 1, 207, 241, 214, 215, 1, 207, 229, 214, 215, 1, 244, 120, - 214, 215, 1, 244, 104, 214, 215, 1, 221, 227, 214, 215, 1, 210, 22, 214, - 215, 1, 209, 108, 214, 215, 1, 244, 212, 214, 215, 1, 244, 1, 214, 215, - 1, 201, 201, 214, 215, 1, 185, 214, 215, 1, 218, 208, 214, 215, 1, 249, - 32, 214, 215, 1, 248, 98, 214, 215, 1, 192, 214, 215, 1, 198, 214, 215, - 1, 216, 220, 214, 215, 1, 228, 113, 214, 215, 1, 206, 86, 214, 215, 1, - 213, 90, 214, 215, 1, 211, 164, 214, 215, 1, 215, 36, 214, 215, 1, 152, - 214, 215, 1, 227, 77, 214, 215, 109, 2, 237, 155, 214, 215, 22, 2, 252, - 25, 214, 215, 22, 2, 75, 214, 215, 22, 2, 231, 83, 214, 215, 22, 2, 68, - 214, 215, 22, 2, 206, 178, 214, 215, 22, 2, 125, 146, 214, 215, 22, 2, - 125, 215, 186, 214, 215, 22, 2, 125, 159, 214, 215, 22, 2, 125, 227, 78, - 214, 215, 22, 2, 74, 214, 215, 22, 2, 241, 161, 214, 215, 22, 2, 251, 64, - 214, 215, 22, 2, 78, 214, 215, 22, 2, 220, 18, 214, 215, 22, 2, 250, 34, - 214, 215, 2, 205, 204, 214, 215, 244, 166, 214, 215, 52, 244, 166, 214, - 215, 17, 202, 84, 214, 215, 17, 105, 214, 215, 17, 108, 214, 215, 17, - 147, 214, 215, 17, 149, 214, 215, 17, 170, 214, 215, 17, 195, 214, 215, - 17, 213, 111, 214, 215, 17, 199, 214, 215, 17, 222, 63, 39, 92, 17, 202, - 84, 39, 92, 17, 105, 39, 92, 17, 108, 39, 92, 17, 147, 39, 92, 17, 149, - 39, 92, 17, 170, 39, 92, 17, 195, 39, 92, 17, 213, 111, 39, 92, 17, 199, - 39, 92, 17, 222, 63, 39, 92, 1, 63, 39, 92, 1, 68, 39, 92, 1, 173, 39, - 92, 1, 201, 201, 39, 92, 1, 185, 39, 92, 1, 216, 220, 39, 92, 1, 205, - 230, 39, 92, 2, 250, 17, 92, 2, 211, 227, 247, 52, 92, 2, 247, 53, 205, - 204, 92, 2, 52, 247, 53, 205, 204, 92, 2, 247, 53, 108, 92, 2, 247, 53, - 147, 92, 2, 247, 53, 250, 17, 92, 2, 217, 162, 92, 238, 228, 240, 7, 92, - 247, 33, 92, 237, 58, 92, 2, 212, 157, 92, 230, 173, 220, 39, 229, 207, - 227, 149, 17, 202, 84, 229, 207, 227, 149, 17, 105, 229, 207, 227, 149, - 17, 108, 229, 207, 227, 149, 17, 147, 229, 207, 227, 149, 17, 149, 229, - 207, 227, 149, 17, 170, 229, 207, 227, 149, 17, 195, 229, 207, 227, 149, - 17, 213, 111, 229, 207, 227, 149, 17, 199, 229, 207, 227, 149, 17, 222, - 63, 229, 207, 227, 149, 1, 173, 229, 207, 227, 149, 1, 229, 144, 229, - 207, 227, 149, 1, 239, 8, 229, 207, 227, 149, 1, 222, 203, 229, 207, 227, - 149, 1, 215, 36, 229, 207, 227, 149, 1, 213, 90, 229, 207, 227, 149, 1, - 202, 116, 229, 207, 227, 149, 1, 221, 11, 229, 207, 227, 149, 1, 210, 22, - 229, 207, 227, 149, 1, 236, 30, 229, 207, 227, 149, 1, 201, 201, 229, - 207, 227, 149, 1, 185, 229, 207, 227, 149, 1, 218, 208, 229, 207, 227, - 149, 1, 192, 229, 207, 227, 149, 1, 244, 212, 229, 207, 227, 149, 1, 249, - 32, 229, 207, 227, 149, 1, 216, 220, 229, 207, 227, 149, 1, 198, 229, - 207, 227, 149, 1, 228, 113, 229, 207, 227, 149, 1, 204, 111, 229, 207, - 227, 149, 1, 209, 108, 229, 207, 227, 149, 1, 152, 229, 207, 227, 149, 1, - 206, 86, 229, 207, 227, 149, 1, 247, 92, 229, 207, 227, 149, 1, 63, 229, - 207, 227, 149, 1, 220, 73, 229, 207, 227, 149, 1, 75, 229, 207, 227, 149, - 1, 220, 18, 229, 207, 227, 149, 22, 207, 24, 229, 207, 227, 149, 22, 74, - 229, 207, 227, 149, 22, 68, 229, 207, 227, 149, 22, 241, 161, 229, 207, - 227, 149, 22, 78, 229, 207, 227, 149, 143, 218, 84, 229, 207, 227, 149, - 143, 247, 68, 229, 207, 227, 149, 143, 247, 69, 218, 84, 229, 207, 227, - 149, 2, 245, 70, 229, 207, 227, 149, 2, 212, 170, 216, 119, 1, 173, 216, - 119, 1, 239, 8, 216, 119, 1, 222, 203, 216, 119, 1, 210, 22, 216, 119, 1, - 244, 212, 216, 119, 1, 201, 201, 216, 119, 1, 185, 216, 119, 1, 249, 32, - 216, 119, 1, 192, 216, 119, 1, 247, 92, 216, 119, 1, 230, 181, 216, 119, - 1, 221, 11, 216, 119, 1, 215, 36, 216, 119, 1, 216, 220, 216, 119, 1, - 228, 113, 216, 119, 1, 198, 216, 119, 1, 204, 111, 216, 119, 1, 152, 216, - 119, 1, 225, 54, 216, 119, 1, 222, 182, 216, 119, 1, 223, 25, 216, 119, - 1, 220, 234, 216, 119, 1, 63, 216, 119, 22, 2, 75, 216, 119, 22, 2, 68, - 216, 119, 22, 2, 74, 216, 119, 22, 2, 251, 64, 216, 119, 22, 2, 78, 216, - 119, 22, 2, 250, 34, 216, 119, 22, 2, 240, 238, 216, 119, 22, 2, 241, - 189, 216, 119, 109, 2, 222, 205, 216, 119, 109, 2, 223, 163, 216, 119, - 109, 2, 146, 216, 119, 109, 2, 237, 171, 216, 119, 205, 204, 216, 119, - 214, 168, 82, 28, 123, 208, 236, 28, 123, 208, 235, 28, 123, 208, 233, - 28, 123, 208, 238, 28, 123, 216, 42, 28, 123, 216, 26, 28, 123, 216, 21, - 28, 123, 216, 23, 28, 123, 216, 39, 28, 123, 216, 32, 28, 123, 216, 25, - 28, 123, 216, 44, 28, 123, 216, 27, 28, 123, 216, 46, 28, 123, 216, 43, - 28, 123, 224, 137, 28, 123, 224, 128, 28, 123, 224, 131, 28, 123, 218, - 138, 28, 123, 218, 149, 28, 123, 218, 150, 28, 123, 211, 148, 28, 123, - 231, 96, 28, 123, 231, 103, 28, 123, 211, 159, 28, 123, 211, 146, 28, - 123, 218, 189, 28, 123, 236, 246, 28, 123, 211, 143, 190, 2, 219, 102, - 190, 2, 246, 235, 190, 2, 227, 242, 190, 2, 204, 20, 190, 1, 63, 190, 1, - 235, 206, 229, 211, 190, 1, 75, 190, 1, 231, 83, 190, 1, 68, 190, 1, 219, - 169, 246, 205, 190, 1, 222, 204, 227, 201, 190, 1, 222, 204, 227, 202, - 216, 173, 190, 1, 74, 190, 1, 251, 64, 190, 1, 78, 190, 1, 173, 190, 1, - 230, 44, 214, 227, 190, 1, 230, 44, 223, 205, 190, 1, 239, 8, 190, 1, - 239, 9, 223, 205, 190, 1, 222, 203, 190, 1, 247, 92, 190, 1, 247, 93, - 223, 205, 190, 1, 230, 181, 190, 1, 221, 12, 223, 205, 190, 1, 230, 182, - 225, 144, 190, 1, 221, 11, 190, 1, 207, 241, 190, 1, 207, 242, 225, 144, - 190, 1, 244, 120, 190, 1, 244, 121, 225, 144, 190, 1, 223, 111, 223, 205, - 190, 1, 210, 22, 190, 1, 210, 23, 223, 205, 190, 1, 244, 212, 190, 1, - 244, 213, 225, 144, 190, 1, 201, 201, 190, 1, 185, 190, 1, 219, 169, 223, - 205, 190, 1, 249, 32, 190, 1, 249, 33, 223, 205, 190, 1, 192, 190, 1, - 198, 190, 1, 216, 220, 190, 1, 216, 221, 251, 74, 190, 1, 228, 113, 190, - 1, 204, 111, 190, 1, 215, 37, 223, 205, 190, 1, 215, 37, 225, 144, 190, - 1, 215, 36, 190, 1, 152, 190, 2, 246, 236, 209, 155, 190, 22, 2, 209, - 214, 190, 22, 2, 208, 166, 190, 22, 2, 203, 211, 190, 22, 2, 203, 212, - 224, 251, 190, 22, 2, 210, 224, 190, 22, 2, 210, 225, 224, 239, 190, 22, - 2, 209, 235, 190, 22, 2, 243, 163, 223, 204, 190, 22, 2, 218, 249, 190, - 109, 2, 229, 173, 190, 109, 2, 219, 6, 190, 109, 2, 247, 77, 190, 219, - 115, 190, 49, 216, 93, 190, 50, 216, 93, 190, 219, 158, 250, 225, 190, - 219, 158, 225, 162, 190, 219, 158, 226, 226, 190, 219, 158, 204, 14, 190, - 219, 158, 219, 116, 190, 219, 158, 227, 106, 190, 219, 158, 226, 220, - 190, 219, 158, 251, 116, 190, 219, 158, 251, 117, 251, 116, 190, 219, - 158, 218, 107, 190, 207, 174, 219, 158, 218, 107, 190, 219, 111, 190, 17, - 202, 84, 190, 17, 105, 190, 17, 108, 190, 17, 147, 190, 17, 149, 190, 17, - 170, 190, 17, 195, 190, 17, 213, 111, 190, 17, 199, 190, 17, 222, 63, - 190, 219, 158, 208, 202, 207, 189, 190, 219, 158, 230, 211, 69, 1, 213, - 67, 238, 119, 69, 1, 213, 67, 246, 199, 69, 1, 213, 67, 230, 149, 69, 1, - 213, 67, 221, 227, 69, 1, 213, 67, 248, 98, 69, 2, 213, 67, 214, 213, 69, - 65, 1, 213, 67, 216, 136, 69, 1, 45, 228, 85, 221, 11, 69, 1, 45, 228, - 85, 240, 108, 69, 1, 45, 228, 85, 239, 8, 69, 1, 45, 228, 85, 238, 119, - 69, 1, 45, 228, 85, 230, 181, 69, 1, 45, 228, 85, 230, 149, 69, 1, 45, - 228, 85, 244, 120, 69, 1, 45, 228, 85, 244, 104, 69, 1, 45, 228, 85, 221, - 227, 69, 45, 228, 85, 17, 202, 84, 69, 45, 228, 85, 17, 105, 69, 45, 228, - 85, 17, 108, 69, 45, 228, 85, 17, 147, 69, 45, 228, 85, 17, 149, 69, 45, - 228, 85, 17, 170, 69, 45, 228, 85, 17, 195, 69, 45, 228, 85, 17, 213, - 111, 69, 45, 228, 85, 17, 199, 69, 45, 228, 85, 17, 222, 63, 69, 1, 45, - 228, 85, 227, 77, 69, 1, 45, 228, 85, 244, 212, 69, 1, 45, 228, 85, 244, - 1, 69, 1, 45, 228, 85, 249, 32, 69, 1, 45, 228, 85, 248, 98, 246, 192, 1, - 63, 246, 192, 1, 75, 246, 192, 1, 68, 246, 192, 1, 74, 246, 192, 1, 251, - 64, 246, 192, 1, 78, 246, 192, 1, 173, 246, 192, 1, 229, 144, 246, 192, - 1, 239, 8, 246, 192, 1, 238, 119, 246, 192, 1, 222, 112, 246, 192, 1, - 222, 203, 246, 192, 1, 246, 199, 246, 192, 1, 246, 144, 246, 192, 1, 230, - 181, 246, 192, 1, 230, 149, 246, 192, 1, 222, 102, 246, 192, 1, 222, 104, - 246, 192, 1, 222, 103, 246, 192, 1, 210, 22, 246, 192, 1, 209, 108, 246, - 192, 1, 244, 212, 246, 192, 1, 244, 1, 246, 192, 1, 221, 53, 246, 192, 1, - 201, 201, 246, 192, 1, 244, 120, 246, 192, 1, 185, 246, 192, 1, 218, 12, - 246, 192, 1, 218, 208, 246, 192, 1, 249, 32, 246, 192, 1, 248, 98, 246, - 192, 1, 223, 238, 246, 192, 1, 192, 246, 192, 1, 248, 198, 246, 192, 1, - 198, 246, 192, 1, 216, 220, 246, 192, 1, 228, 113, 246, 192, 1, 206, 86, - 246, 192, 1, 211, 164, 246, 192, 1, 215, 36, 246, 192, 1, 152, 246, 192, - 22, 2, 252, 25, 246, 192, 22, 2, 75, 246, 192, 22, 2, 231, 83, 246, 192, - 22, 2, 241, 145, 246, 192, 22, 2, 68, 246, 192, 22, 2, 220, 73, 246, 192, - 22, 2, 78, 246, 192, 22, 2, 251, 64, 246, 192, 22, 2, 250, 34, 246, 192, - 22, 2, 207, 24, 246, 192, 109, 2, 198, 246, 192, 109, 2, 216, 220, 246, - 192, 109, 2, 228, 113, 246, 192, 109, 2, 204, 111, 246, 192, 1, 46, 230, - 54, 246, 192, 1, 46, 239, 75, 246, 192, 1, 46, 222, 205, 246, 192, 109, - 2, 46, 222, 205, 246, 192, 1, 46, 246, 200, 246, 192, 1, 46, 210, 69, - 246, 192, 1, 46, 223, 163, 246, 192, 1, 46, 219, 184, 246, 192, 1, 46, - 203, 124, 246, 192, 1, 46, 146, 246, 192, 1, 46, 159, 246, 192, 1, 46, - 211, 167, 246, 192, 109, 2, 46, 226, 185, 246, 192, 109, 2, 46, 237, 171, - 246, 192, 17, 202, 84, 246, 192, 17, 105, 246, 192, 17, 108, 246, 192, - 17, 147, 246, 192, 17, 149, 246, 192, 17, 170, 246, 192, 17, 195, 246, - 192, 17, 213, 111, 246, 192, 17, 199, 246, 192, 17, 222, 63, 246, 192, - 217, 179, 211, 201, 246, 192, 217, 179, 244, 166, 246, 192, 217, 179, 52, - 244, 166, 246, 192, 217, 179, 208, 70, 244, 166, 69, 1, 229, 137, 239, 8, - 69, 1, 229, 137, 247, 92, 69, 1, 229, 137, 246, 199, 69, 1, 229, 137, - 230, 181, 69, 1, 229, 137, 230, 149, 69, 1, 229, 137, 221, 11, 69, 1, - 229, 137, 207, 241, 69, 1, 229, 137, 207, 229, 69, 1, 229, 137, 244, 120, - 69, 1, 229, 137, 244, 104, 69, 1, 229, 137, 244, 1, 69, 1, 229, 137, 201, - 201, 69, 1, 229, 137, 215, 36, 69, 1, 229, 137, 152, 69, 1, 229, 137, - 237, 12, 69, 1, 229, 137, 240, 108, 69, 65, 1, 229, 137, 216, 136, 69, 1, - 229, 137, 203, 182, 69, 1, 229, 137, 202, 116, 69, 1, 229, 137, 216, 220, - 69, 227, 36, 229, 137, 220, 94, 69, 227, 36, 229, 137, 217, 78, 69, 227, - 36, 229, 137, 236, 191, 69, 16, 251, 51, 240, 211, 69, 16, 251, 51, 105, - 69, 16, 251, 51, 108, 69, 1, 251, 51, 216, 220, 69, 2, 219, 98, 229, 237, - 208, 161, 69, 2, 45, 228, 85, 208, 159, 69, 2, 45, 228, 85, 208, 156, 69, - 1, 212, 178, 219, 139, 246, 199, 69, 1, 212, 178, 219, 139, 213, 90, 45, - 205, 220, 1, 124, 229, 26, 45, 205, 220, 1, 138, 229, 26, 45, 205, 220, - 1, 124, 229, 115, 45, 205, 220, 1, 138, 229, 115, 45, 205, 220, 1, 124, - 229, 124, 45, 205, 220, 1, 138, 229, 124, 45, 205, 220, 1, 124, 238, 39, - 45, 205, 220, 1, 138, 238, 39, 45, 205, 220, 1, 124, 222, 128, 45, 205, - 220, 1, 138, 222, 128, 45, 205, 220, 1, 124, 245, 254, 45, 205, 220, 1, - 138, 245, 254, 45, 205, 220, 1, 124, 246, 116, 45, 205, 220, 1, 138, 246, - 116, 45, 205, 220, 1, 124, 212, 13, 45, 205, 220, 1, 138, 212, 13, 45, - 205, 220, 1, 124, 220, 233, 45, 205, 220, 1, 138, 220, 233, 45, 205, 220, - 1, 124, 243, 113, 45, 205, 220, 1, 138, 243, 113, 45, 205, 220, 1, 124, - 135, 45, 205, 220, 1, 138, 135, 45, 205, 220, 1, 124, 209, 47, 45, 205, - 220, 1, 138, 209, 47, 45, 205, 220, 1, 124, 221, 191, 45, 205, 220, 1, - 138, 221, 191, 45, 205, 220, 1, 124, 248, 23, 45, 205, 220, 1, 138, 248, - 23, 45, 205, 220, 1, 124, 218, 69, 45, 205, 220, 1, 138, 218, 69, 45, - 205, 220, 1, 124, 218, 180, 45, 205, 220, 1, 138, 218, 180, 45, 205, 220, - 1, 124, 239, 186, 45, 205, 220, 1, 138, 239, 186, 45, 205, 220, 1, 124, - 224, 82, 45, 205, 220, 1, 138, 224, 82, 45, 205, 220, 1, 124, 202, 247, - 45, 205, 220, 1, 138, 202, 247, 45, 205, 220, 1, 124, 215, 227, 45, 205, - 220, 1, 138, 215, 227, 45, 205, 220, 1, 124, 227, 49, 45, 205, 220, 1, - 138, 227, 49, 45, 205, 220, 1, 124, 205, 189, 45, 205, 220, 1, 138, 205, - 189, 45, 205, 220, 1, 124, 236, 136, 45, 205, 220, 1, 138, 236, 136, 45, - 205, 220, 1, 124, 78, 45, 205, 220, 1, 138, 78, 45, 205, 220, 225, 141, - 230, 0, 45, 205, 220, 22, 252, 25, 45, 205, 220, 22, 75, 45, 205, 220, - 22, 207, 24, 45, 205, 220, 22, 68, 45, 205, 220, 22, 74, 45, 205, 220, - 22, 78, 45, 205, 220, 225, 141, 229, 118, 45, 205, 220, 22, 235, 171, 45, - 205, 220, 22, 207, 23, 45, 205, 220, 22, 207, 39, 45, 205, 220, 22, 250, - 32, 45, 205, 220, 22, 250, 8, 45, 205, 220, 22, 250, 231, 45, 205, 220, - 22, 250, 247, 45, 205, 220, 143, 225, 141, 241, 129, 45, 205, 220, 143, - 225, 141, 221, 52, 45, 205, 220, 143, 225, 141, 209, 47, 45, 205, 220, - 143, 225, 141, 211, 252, 45, 205, 220, 16, 229, 9, 45, 205, 220, 16, 221, - 52, 45, 205, 220, 16, 214, 253, 45, 205, 220, 16, 236, 137, 236, 131, 45, - 205, 220, 16, 229, 19, 229, 18, 225, 2, 225, 61, 1, 74, 225, 2, 225, 61, - 1, 78, 225, 2, 225, 61, 1, 246, 199, 225, 2, 225, 61, 1, 221, 11, 225, 2, - 225, 61, 1, 207, 241, 225, 2, 225, 61, 1, 207, 229, 225, 2, 225, 61, 1, - 244, 120, 225, 2, 225, 61, 1, 244, 104, 225, 2, 225, 61, 1, 221, 227, - 225, 2, 225, 61, 1, 213, 90, 225, 2, 225, 61, 1, 211, 164, 225, 2, 225, - 61, 22, 2, 231, 83, 225, 2, 225, 61, 22, 2, 206, 178, 225, 2, 225, 61, - 22, 2, 251, 245, 225, 2, 225, 61, 22, 2, 250, 34, 225, 2, 225, 61, 22, 2, - 251, 238, 225, 2, 225, 61, 246, 159, 225, 2, 225, 61, 251, 70, 229, 107, - 225, 2, 225, 61, 250, 209, 225, 2, 225, 61, 4, 216, 98, 82, 225, 2, 225, - 61, 203, 238, 216, 98, 82, 225, 2, 225, 61, 22, 2, 205, 199, 225, 2, 225, - 61, 205, 204, 33, 4, 207, 222, 33, 4, 207, 225, 33, 4, 207, 228, 33, 4, - 207, 226, 33, 4, 207, 227, 33, 4, 207, 224, 33, 4, 244, 98, 33, 4, 244, - 100, 33, 4, 244, 103, 33, 4, 244, 101, 33, 4, 244, 102, 33, 4, 244, 99, - 33, 4, 241, 242, 33, 4, 241, 246, 33, 4, 241, 254, 33, 4, 241, 251, 33, - 4, 241, 252, 33, 4, 241, 243, 33, 4, 246, 252, 33, 4, 246, 246, 33, 4, - 246, 248, 33, 4, 246, 251, 33, 4, 246, 249, 33, 4, 246, 250, 33, 4, 246, - 247, 33, 4, 248, 198, 33, 4, 248, 177, 33, 4, 248, 189, 33, 4, 248, 197, - 33, 4, 248, 192, 33, 4, 248, 193, 33, 4, 248, 181, 8, 5, 1, 248, 225, - 251, 2, 8, 5, 1, 34, 216, 71, 8, 5, 1, 248, 39, 74, 8, 5, 1, 248, 225, - 74, 8, 5, 1, 188, 3, 239, 199, 8, 5, 1, 227, 187, 240, 174, 8, 5, 1, 132, - 239, 76, 3, 245, 126, 8, 5, 1, 228, 131, 3, 230, 239, 227, 241, 194, 8, - 5, 1, 228, 131, 3, 52, 101, 208, 227, 8, 5, 1, 228, 131, 3, 101, 215, - 252, 8, 5, 1, 226, 186, 3, 245, 126, 8, 5, 1, 223, 164, 3, 245, 126, 8, - 5, 1, 241, 79, 3, 245, 126, 8, 5, 1, 248, 39, 78, 8, 5, 1, 248, 39, 158, - 3, 95, 8, 5, 1, 171, 158, 3, 95, 8, 5, 1, 230, 239, 220, 73, 8, 5, 1, - 207, 174, 220, 74, 3, 95, 8, 5, 1, 207, 174, 220, 74, 3, 236, 106, 95, 8, - 5, 1, 207, 174, 158, 220, 4, 8, 5, 1, 207, 174, 158, 220, 5, 3, 95, 8, 5, - 1, 211, 66, 146, 8, 1, 5, 6, 217, 1, 3, 50, 227, 210, 8, 5, 1, 217, 1, - 204, 3, 237, 102, 8, 5, 1, 52, 146, 8, 5, 1, 217, 1, 3, 245, 126, 8, 5, - 1, 52, 217, 1, 3, 245, 126, 8, 5, 1, 132, 146, 8, 5, 1, 132, 217, 1, 3, - 215, 252, 8, 5, 1, 248, 216, 241, 7, 8, 5, 1, 106, 3, 212, 228, 50, 227, - 210, 8, 5, 1, 106, 248, 231, 3, 212, 228, 50, 227, 210, 8, 5, 1, 207, 17, - 8, 5, 1, 207, 174, 207, 17, 8, 5, 1, 106, 3, 49, 113, 8, 5, 1, 246, 142, - 8, 5, 1, 246, 143, 3, 124, 50, 215, 252, 8, 5, 1, 246, 143, 3, 124, 49, - 213, 125, 8, 5, 1, 203, 197, 3, 124, 50, 215, 252, 8, 5, 1, 203, 197, 3, - 163, 49, 227, 210, 8, 5, 1, 203, 197, 3, 163, 49, 227, 211, 25, 124, 50, - 215, 252, 8, 5, 1, 203, 197, 3, 163, 49, 227, 211, 3, 213, 125, 8, 5, 1, - 203, 125, 3, 212, 228, 50, 227, 210, 65, 247, 215, 3, 230, 239, 247, 214, - 65, 1, 5, 237, 31, 65, 1, 5, 228, 131, 3, 230, 239, 227, 241, 194, 65, 1, - 5, 228, 131, 3, 101, 208, 227, 65, 1, 5, 106, 3, 49, 113, 8, 5, 1, 215, - 11, 203, 66, 8, 5, 1, 230, 228, 74, 8, 5, 1, 171, 220, 73, 8, 5, 1, 206, - 228, 8, 5, 1, 230, 239, 251, 2, 30, 1, 5, 6, 220, 36, 90, 5, 1, 63, 90, - 5, 1, 74, 90, 5, 1, 75, 90, 5, 1, 78, 90, 5, 1, 68, 90, 5, 1, 206, 164, - 90, 5, 1, 239, 8, 90, 5, 1, 173, 90, 5, 1, 238, 190, 90, 5, 1, 238, 81, - 90, 5, 1, 238, 39, 90, 5, 1, 237, 230, 90, 5, 1, 237, 192, 90, 5, 1, 152, - 90, 5, 1, 237, 67, 90, 5, 1, 237, 3, 90, 5, 1, 236, 136, 90, 5, 1, 236, - 26, 90, 5, 1, 235, 255, 90, 5, 1, 228, 113, 90, 5, 1, 227, 234, 90, 5, 1, - 227, 148, 90, 5, 1, 227, 49, 90, 5, 1, 226, 239, 90, 5, 1, 226, 208, 90, - 5, 1, 192, 90, 5, 1, 225, 20, 90, 5, 1, 224, 155, 90, 5, 1, 224, 82, 90, - 5, 1, 223, 246, 90, 5, 1, 201, 201, 90, 5, 1, 236, 160, 90, 5, 1, 223, - 93, 90, 5, 1, 222, 240, 90, 5, 1, 222, 100, 90, 5, 1, 221, 191, 90, 5, 1, - 221, 84, 90, 5, 1, 221, 22, 90, 5, 1, 217, 64, 90, 5, 1, 217, 50, 90, 5, - 1, 217, 43, 90, 5, 1, 217, 34, 90, 5, 1, 217, 23, 90, 5, 1, 217, 21, 90, - 5, 1, 215, 36, 90, 5, 1, 194, 90, 5, 1, 214, 177, 90, 5, 1, 212, 162, 90, - 5, 1, 212, 13, 90, 5, 1, 211, 10, 90, 5, 1, 210, 177, 90, 5, 1, 244, 212, - 90, 5, 1, 210, 22, 90, 5, 1, 244, 75, 90, 5, 1, 209, 187, 90, 5, 1, 243, - 233, 90, 5, 1, 209, 2, 90, 5, 1, 243, 113, 90, 5, 1, 242, 42, 90, 5, 1, - 242, 13, 90, 5, 1, 243, 124, 90, 5, 1, 208, 190, 90, 5, 1, 208, 189, 90, - 5, 1, 208, 178, 90, 5, 1, 208, 177, 90, 5, 1, 208, 176, 90, 5, 1, 208, - 175, 90, 5, 1, 208, 20, 90, 5, 1, 208, 14, 90, 5, 1, 207, 255, 90, 5, 1, - 207, 253, 90, 5, 1, 207, 249, 90, 5, 1, 207, 248, 90, 5, 1, 204, 111, 90, - 5, 1, 204, 62, 90, 5, 1, 204, 30, 90, 5, 1, 204, 0, 90, 5, 1, 203, 217, - 90, 5, 1, 203, 204, 90, 5, 1, 198, 225, 2, 225, 61, 1, 229, 16, 225, 2, - 225, 61, 1, 214, 253, 225, 2, 225, 61, 1, 228, 86, 225, 2, 225, 61, 1, - 224, 93, 225, 2, 225, 61, 1, 185, 225, 2, 225, 61, 1, 201, 201, 225, 2, - 225, 61, 1, 246, 134, 225, 2, 225, 61, 1, 208, 229, 225, 2, 225, 61, 1, - 229, 110, 225, 2, 225, 61, 1, 222, 118, 225, 2, 225, 61, 1, 209, 39, 225, - 2, 225, 61, 1, 204, 105, 225, 2, 225, 61, 1, 203, 76, 225, 2, 225, 61, 1, - 236, 18, 225, 2, 225, 61, 1, 206, 255, 225, 2, 225, 61, 1, 75, 225, 2, - 225, 61, 1, 218, 202, 225, 2, 225, 61, 1, 250, 45, 225, 2, 225, 61, 1, - 238, 32, 225, 2, 225, 61, 1, 230, 147, 225, 2, 225, 61, 1, 216, 197, 225, - 2, 225, 61, 1, 249, 32, 225, 2, 225, 61, 1, 230, 133, 225, 2, 225, 61, 1, - 243, 190, 225, 2, 225, 61, 1, 238, 88, 225, 2, 225, 61, 1, 243, 235, 225, - 2, 225, 61, 1, 248, 96, 225, 2, 225, 61, 1, 229, 17, 227, 19, 225, 2, - 225, 61, 1, 228, 87, 227, 19, 225, 2, 225, 61, 1, 224, 94, 227, 19, 225, - 2, 225, 61, 1, 219, 169, 227, 19, 225, 2, 225, 61, 1, 223, 111, 227, 19, - 225, 2, 225, 61, 1, 208, 230, 227, 19, 225, 2, 225, 61, 1, 222, 119, 227, - 19, 225, 2, 225, 61, 1, 235, 206, 227, 19, 225, 2, 225, 61, 22, 2, 220, - 30, 225, 2, 225, 61, 22, 2, 231, 47, 225, 2, 225, 61, 22, 2, 250, 230, - 225, 2, 225, 61, 22, 2, 203, 41, 225, 2, 225, 61, 22, 2, 211, 242, 225, - 2, 225, 61, 22, 2, 206, 252, 225, 2, 225, 61, 22, 2, 246, 157, 225, 2, - 225, 61, 22, 2, 221, 37, 225, 2, 225, 61, 246, 158, 225, 2, 225, 61, 226, - 223, 230, 190, 225, 2, 225, 61, 250, 149, 230, 190, 225, 2, 225, 61, 17, - 202, 84, 225, 2, 225, 61, 17, 105, 225, 2, 225, 61, 17, 108, 225, 2, 225, - 61, 17, 147, 225, 2, 225, 61, 17, 149, 225, 2, 225, 61, 17, 170, 225, 2, - 225, 61, 17, 195, 225, 2, 225, 61, 17, 213, 111, 225, 2, 225, 61, 17, - 199, 225, 2, 225, 61, 17, 222, 63, 28, 176, 220, 174, 28, 176, 220, 179, - 28, 176, 202, 246, 28, 176, 202, 245, 28, 176, 202, 244, 28, 176, 207, - 89, 28, 176, 207, 93, 28, 176, 202, 211, 28, 176, 202, 207, 28, 176, 240, - 237, 28, 176, 240, 235, 28, 176, 240, 236, 28, 176, 240, 233, 28, 176, - 235, 196, 28, 176, 235, 195, 28, 176, 235, 193, 28, 176, 235, 194, 28, - 176, 235, 199, 28, 176, 235, 192, 28, 176, 235, 191, 28, 176, 235, 201, - 28, 176, 250, 136, 28, 176, 250, 135, 28, 107, 222, 86, 28, 107, 222, 92, - 28, 107, 211, 145, 28, 107, 211, 144, 28, 107, 208, 235, 28, 107, 208, - 233, 28, 107, 208, 232, 28, 107, 208, 238, 28, 107, 208, 239, 28, 107, - 208, 231, 28, 107, 216, 26, 28, 107, 216, 41, 28, 107, 211, 151, 28, 107, - 216, 38, 28, 107, 216, 28, 28, 107, 216, 30, 28, 107, 216, 17, 28, 107, - 216, 18, 28, 107, 229, 243, 28, 107, 224, 136, 28, 107, 224, 130, 28, - 107, 211, 155, 28, 107, 224, 133, 28, 107, 224, 139, 28, 107, 218, 134, - 28, 107, 218, 143, 28, 107, 218, 147, 28, 107, 211, 153, 28, 107, 218, - 137, 28, 107, 218, 151, 28, 107, 218, 152, 28, 107, 212, 103, 28, 107, - 212, 106, 28, 107, 211, 149, 28, 107, 211, 147, 28, 107, 212, 101, 28, - 107, 212, 109, 28, 107, 212, 110, 28, 107, 212, 95, 28, 107, 212, 108, - 28, 107, 219, 105, 28, 107, 219, 106, 28, 107, 203, 27, 28, 107, 203, 28, - 28, 107, 246, 72, 28, 107, 246, 71, 28, 107, 211, 160, 28, 107, 218, 187, - 28, 107, 218, 186, 12, 15, 233, 74, 12, 15, 233, 73, 12, 15, 233, 72, 12, - 15, 233, 71, 12, 15, 233, 70, 12, 15, 233, 69, 12, 15, 233, 68, 12, 15, - 233, 67, 12, 15, 233, 66, 12, 15, 233, 65, 12, 15, 233, 64, 12, 15, 233, - 63, 12, 15, 233, 62, 12, 15, 233, 61, 12, 15, 233, 60, 12, 15, 233, 59, - 12, 15, 233, 58, 12, 15, 233, 57, 12, 15, 233, 56, 12, 15, 233, 55, 12, - 15, 233, 54, 12, 15, 233, 53, 12, 15, 233, 52, 12, 15, 233, 51, 12, 15, - 233, 50, 12, 15, 233, 49, 12, 15, 233, 48, 12, 15, 233, 47, 12, 15, 233, - 46, 12, 15, 233, 45, 12, 15, 233, 44, 12, 15, 233, 43, 12, 15, 233, 42, - 12, 15, 233, 41, 12, 15, 233, 40, 12, 15, 233, 39, 12, 15, 233, 38, 12, - 15, 233, 37, 12, 15, 233, 36, 12, 15, 233, 35, 12, 15, 233, 34, 12, 15, - 233, 33, 12, 15, 233, 32, 12, 15, 233, 31, 12, 15, 233, 30, 12, 15, 233, - 29, 12, 15, 233, 28, 12, 15, 233, 27, 12, 15, 233, 26, 12, 15, 233, 25, - 12, 15, 233, 24, 12, 15, 233, 23, 12, 15, 233, 22, 12, 15, 233, 21, 12, - 15, 233, 20, 12, 15, 233, 19, 12, 15, 233, 18, 12, 15, 233, 17, 12, 15, - 233, 16, 12, 15, 233, 15, 12, 15, 233, 14, 12, 15, 233, 13, 12, 15, 233, - 12, 12, 15, 233, 11, 12, 15, 233, 10, 12, 15, 233, 9, 12, 15, 233, 8, 12, - 15, 233, 7, 12, 15, 233, 6, 12, 15, 233, 5, 12, 15, 233, 4, 12, 15, 233, - 3, 12, 15, 233, 2, 12, 15, 233, 1, 12, 15, 233, 0, 12, 15, 232, 255, 12, - 15, 232, 254, 12, 15, 232, 253, 12, 15, 232, 252, 12, 15, 232, 251, 12, - 15, 232, 250, 12, 15, 232, 249, 12, 15, 232, 248, 12, 15, 232, 247, 12, - 15, 232, 246, 12, 15, 232, 245, 12, 15, 232, 244, 12, 15, 232, 243, 12, - 15, 232, 242, 12, 15, 232, 241, 12, 15, 232, 240, 12, 15, 232, 239, 12, - 15, 232, 238, 12, 15, 232, 237, 12, 15, 232, 236, 12, 15, 232, 235, 12, - 15, 232, 234, 12, 15, 232, 233, 12, 15, 232, 232, 12, 15, 232, 231, 12, - 15, 232, 230, 12, 15, 232, 229, 12, 15, 232, 228, 12, 15, 232, 227, 12, - 15, 232, 226, 12, 15, 232, 225, 12, 15, 232, 224, 12, 15, 232, 223, 12, - 15, 232, 222, 12, 15, 232, 221, 12, 15, 232, 220, 12, 15, 232, 219, 12, - 15, 232, 218, 12, 15, 232, 217, 12, 15, 232, 216, 12, 15, 232, 215, 12, - 15, 232, 214, 12, 15, 232, 213, 12, 15, 232, 212, 12, 15, 232, 211, 12, - 15, 232, 210, 12, 15, 232, 209, 12, 15, 232, 208, 12, 15, 232, 207, 12, - 15, 232, 206, 12, 15, 232, 205, 12, 15, 232, 204, 12, 15, 232, 203, 12, - 15, 232, 202, 12, 15, 232, 201, 12, 15, 232, 200, 12, 15, 232, 199, 12, - 15, 232, 198, 12, 15, 232, 197, 12, 15, 232, 196, 12, 15, 232, 195, 12, - 15, 232, 194, 12, 15, 232, 193, 12, 15, 232, 192, 12, 15, 232, 191, 12, - 15, 232, 190, 12, 15, 232, 189, 12, 15, 232, 188, 12, 15, 232, 187, 12, - 15, 232, 186, 12, 15, 232, 185, 12, 15, 232, 184, 12, 15, 232, 183, 12, - 15, 232, 182, 12, 15, 232, 181, 12, 15, 232, 180, 12, 15, 232, 179, 12, - 15, 232, 178, 12, 15, 232, 177, 12, 15, 232, 176, 12, 15, 232, 175, 12, - 15, 232, 174, 12, 15, 232, 173, 12, 15, 232, 172, 12, 15, 232, 171, 12, - 15, 232, 170, 12, 15, 232, 169, 12, 15, 232, 168, 12, 15, 232, 167, 12, - 15, 232, 166, 12, 15, 232, 165, 12, 15, 232, 164, 12, 15, 232, 163, 12, - 15, 232, 162, 12, 15, 232, 161, 12, 15, 232, 160, 12, 15, 232, 159, 12, - 15, 232, 158, 12, 15, 232, 157, 12, 15, 232, 156, 12, 15, 232, 155, 12, - 15, 232, 154, 12, 15, 232, 153, 12, 15, 232, 152, 12, 15, 232, 151, 12, - 15, 232, 150, 12, 15, 232, 149, 12, 15, 232, 148, 12, 15, 232, 147, 12, - 15, 232, 146, 12, 15, 232, 145, 12, 15, 232, 144, 12, 15, 232, 143, 12, - 15, 232, 142, 12, 15, 232, 141, 12, 15, 232, 140, 12, 15, 232, 139, 12, - 15, 232, 138, 12, 15, 232, 137, 12, 15, 232, 136, 12, 15, 232, 135, 12, - 15, 232, 134, 12, 15, 232, 133, 12, 15, 232, 132, 12, 15, 232, 131, 12, - 15, 232, 130, 12, 15, 232, 129, 12, 15, 232, 128, 12, 15, 232, 127, 12, - 15, 232, 126, 12, 15, 232, 125, 12, 15, 232, 124, 12, 15, 232, 123, 12, - 15, 232, 122, 12, 15, 232, 121, 12, 15, 232, 120, 12, 15, 232, 119, 12, - 15, 232, 118, 12, 15, 232, 117, 12, 15, 232, 116, 12, 15, 232, 115, 12, - 15, 232, 114, 12, 15, 232, 113, 12, 15, 232, 112, 12, 15, 232, 111, 12, - 15, 232, 110, 12, 15, 232, 109, 12, 15, 232, 108, 12, 15, 232, 107, 12, - 15, 232, 106, 12, 15, 232, 105, 12, 15, 232, 104, 12, 15, 232, 103, 12, - 15, 232, 102, 12, 15, 232, 101, 12, 15, 232, 100, 12, 15, 232, 99, 12, - 15, 232, 98, 12, 15, 232, 97, 12, 15, 232, 96, 12, 15, 232, 95, 12, 15, - 232, 94, 12, 15, 232, 93, 12, 15, 232, 92, 12, 15, 232, 91, 12, 15, 232, - 90, 12, 15, 232, 89, 12, 15, 232, 88, 12, 15, 232, 87, 12, 15, 232, 86, - 12, 15, 232, 85, 12, 15, 232, 84, 12, 15, 232, 83, 12, 15, 232, 82, 12, - 15, 232, 81, 12, 15, 232, 80, 12, 15, 232, 79, 12, 15, 232, 78, 12, 15, - 232, 77, 12, 15, 232, 76, 12, 15, 232, 75, 12, 15, 232, 74, 12, 15, 232, - 73, 12, 15, 232, 72, 12, 15, 232, 71, 12, 15, 232, 70, 12, 15, 232, 69, - 12, 15, 232, 68, 12, 15, 232, 67, 12, 15, 232, 66, 12, 15, 232, 65, 12, - 15, 232, 64, 12, 15, 232, 63, 12, 15, 232, 62, 12, 15, 232, 61, 12, 15, - 232, 60, 12, 15, 232, 59, 12, 15, 232, 58, 12, 15, 232, 57, 12, 15, 232, - 56, 12, 15, 232, 55, 12, 15, 232, 54, 12, 15, 232, 53, 12, 15, 232, 52, - 12, 15, 232, 51, 12, 15, 232, 50, 12, 15, 232, 49, 12, 15, 232, 48, 12, - 15, 232, 47, 12, 15, 232, 46, 12, 15, 232, 45, 12, 15, 232, 44, 12, 15, - 232, 43, 12, 15, 232, 42, 12, 15, 232, 41, 12, 15, 232, 40, 12, 15, 232, - 39, 12, 15, 232, 38, 12, 15, 232, 37, 12, 15, 232, 36, 12, 15, 232, 35, - 12, 15, 232, 34, 12, 15, 232, 33, 12, 15, 232, 32, 12, 15, 232, 31, 12, - 15, 232, 30, 12, 15, 232, 29, 12, 15, 232, 28, 12, 15, 232, 27, 12, 15, - 232, 26, 12, 15, 232, 25, 12, 15, 232, 24, 12, 15, 232, 23, 12, 15, 232, - 22, 12, 15, 232, 21, 12, 15, 232, 20, 12, 15, 232, 19, 12, 15, 232, 18, - 12, 15, 232, 17, 12, 15, 232, 16, 12, 15, 232, 15, 12, 15, 232, 14, 12, - 15, 232, 13, 12, 15, 232, 12, 12, 15, 232, 11, 12, 15, 232, 10, 12, 15, - 232, 9, 12, 15, 232, 8, 12, 15, 232, 7, 12, 15, 232, 6, 12, 15, 232, 5, - 12, 15, 232, 4, 12, 15, 232, 3, 12, 15, 232, 2, 12, 15, 232, 1, 12, 15, - 232, 0, 12, 15, 231, 255, 12, 15, 231, 254, 12, 15, 231, 253, 12, 15, - 231, 252, 12, 15, 231, 251, 12, 15, 231, 250, 12, 15, 231, 249, 12, 15, - 231, 248, 12, 15, 231, 247, 12, 15, 231, 246, 12, 15, 231, 245, 12, 15, - 231, 244, 12, 15, 231, 243, 12, 15, 231, 242, 12, 15, 231, 241, 12, 15, - 231, 240, 12, 15, 231, 239, 12, 15, 231, 238, 12, 15, 231, 237, 12, 15, - 231, 236, 12, 15, 231, 235, 12, 15, 231, 234, 12, 15, 231, 233, 12, 15, - 231, 232, 12, 15, 231, 231, 12, 15, 231, 230, 12, 15, 231, 229, 12, 15, - 231, 228, 12, 15, 231, 227, 12, 15, 231, 226, 12, 15, 231, 225, 12, 15, - 231, 224, 12, 15, 231, 223, 12, 15, 231, 222, 12, 15, 231, 221, 12, 15, - 231, 220, 12, 15, 231, 219, 12, 15, 231, 218, 12, 15, 231, 217, 12, 15, - 231, 216, 12, 15, 231, 215, 12, 15, 231, 214, 12, 15, 231, 213, 12, 15, - 231, 212, 12, 15, 231, 211, 12, 15, 231, 210, 12, 15, 231, 209, 12, 15, - 231, 208, 12, 15, 231, 207, 12, 15, 231, 206, 12, 15, 231, 205, 12, 15, - 231, 204, 12, 15, 231, 203, 12, 15, 231, 202, 12, 15, 231, 201, 12, 15, - 231, 200, 12, 15, 231, 199, 12, 15, 231, 198, 12, 15, 231, 197, 12, 15, - 231, 196, 12, 15, 231, 195, 12, 15, 231, 194, 12, 15, 231, 193, 12, 15, - 231, 192, 12, 15, 231, 191, 12, 15, 231, 190, 12, 15, 231, 189, 12, 15, - 231, 188, 12, 15, 231, 187, 12, 15, 231, 186, 12, 15, 231, 185, 12, 15, - 231, 184, 12, 15, 231, 183, 12, 15, 231, 182, 12, 15, 231, 181, 12, 15, - 231, 180, 12, 15, 231, 179, 12, 15, 231, 178, 12, 15, 231, 177, 12, 15, - 231, 176, 12, 15, 231, 175, 12, 15, 231, 174, 12, 15, 231, 173, 12, 15, - 231, 172, 12, 15, 231, 171, 12, 15, 231, 170, 12, 15, 231, 169, 12, 15, - 231, 168, 12, 15, 231, 167, 12, 15, 231, 166, 12, 15, 231, 165, 12, 15, - 231, 164, 12, 15, 231, 163, 12, 15, 231, 162, 12, 15, 231, 161, 12, 15, - 231, 160, 12, 15, 231, 159, 12, 15, 231, 158, 12, 15, 231, 157, 12, 15, - 231, 156, 12, 15, 231, 155, 12, 15, 231, 154, 12, 15, 231, 153, 12, 15, - 231, 152, 12, 15, 231, 151, 12, 15, 231, 150, 12, 15, 231, 149, 12, 15, - 231, 148, 12, 15, 231, 147, 12, 15, 231, 146, 12, 15, 231, 145, 12, 15, - 231, 144, 12, 15, 231, 143, 12, 15, 231, 142, 12, 15, 231, 141, 12, 15, - 231, 140, 12, 15, 231, 139, 12, 15, 231, 138, 12, 15, 231, 137, 12, 15, - 231, 136, 12, 15, 231, 135, 12, 15, 231, 134, 12, 15, 231, 133, 12, 15, - 231, 132, 12, 15, 231, 131, 12, 15, 231, 130, 12, 15, 231, 129, 12, 15, - 231, 128, 12, 15, 231, 127, 12, 15, 231, 126, 12, 15, 231, 125, 12, 15, - 231, 124, 12, 15, 231, 123, 12, 15, 231, 122, 12, 15, 231, 121, 12, 15, - 231, 120, 12, 15, 231, 119, 12, 15, 231, 118, 12, 15, 231, 117, 12, 15, - 231, 116, 12, 15, 231, 115, 8, 5, 32, 240, 30, 8, 5, 32, 240, 26, 8, 5, - 32, 239, 228, 8, 5, 32, 240, 29, 8, 5, 32, 240, 28, 8, 5, 32, 163, 215, - 94, 210, 69, 8, 5, 32, 211, 108, 178, 5, 32, 224, 241, 221, 152, 178, 5, - 32, 224, 241, 241, 167, 178, 5, 32, 224, 241, 231, 19, 178, 5, 32, 205, - 235, 221, 152, 178, 5, 32, 224, 241, 203, 174, 110, 1, 202, 237, 3, 236, - 232, 110, 218, 63, 230, 81, 206, 67, 110, 32, 203, 9, 202, 237, 202, 237, - 219, 54, 110, 1, 250, 250, 250, 3, 110, 1, 204, 27, 251, 30, 110, 1, 204, - 27, 244, 178, 110, 1, 204, 27, 237, 67, 110, 1, 204, 27, 230, 22, 110, 1, - 204, 27, 228, 20, 110, 1, 204, 27, 46, 224, 247, 110, 1, 204, 27, 216, - 91, 110, 1, 204, 27, 209, 203, 110, 1, 250, 250, 91, 54, 110, 1, 213, 0, - 3, 213, 0, 243, 85, 110, 1, 213, 0, 3, 212, 124, 243, 85, 110, 1, 213, 0, - 3, 244, 198, 25, 213, 0, 243, 85, 110, 1, 213, 0, 3, 244, 198, 25, 212, - 124, 243, 85, 110, 1, 137, 3, 219, 54, 110, 1, 137, 3, 217, 114, 110, 1, - 137, 3, 225, 105, 110, 1, 248, 109, 3, 244, 197, 110, 1, 238, 68, 3, 244, - 197, 110, 1, 244, 179, 3, 244, 197, 110, 1, 237, 68, 3, 225, 105, 110, 1, - 206, 60, 3, 244, 197, 110, 1, 202, 96, 3, 244, 197, 110, 1, 209, 133, 3, - 244, 197, 110, 1, 202, 237, 3, 244, 197, 110, 1, 46, 230, 23, 3, 244, - 197, 110, 1, 230, 23, 3, 244, 197, 110, 1, 228, 21, 3, 244, 197, 110, 1, - 224, 248, 3, 244, 197, 110, 1, 221, 41, 3, 244, 197, 110, 1, 214, 250, 3, - 244, 197, 110, 1, 46, 219, 35, 3, 244, 197, 110, 1, 219, 35, 3, 244, 197, - 110, 1, 208, 16, 3, 244, 197, 110, 1, 217, 75, 3, 244, 197, 110, 1, 216, - 92, 3, 244, 197, 110, 1, 213, 0, 3, 244, 197, 110, 1, 209, 204, 3, 244, - 197, 110, 1, 206, 60, 3, 236, 128, 110, 1, 248, 109, 3, 216, 200, 110, 1, - 230, 23, 3, 216, 200, 110, 1, 219, 35, 3, 216, 200, 110, 32, 137, 228, - 20, 10, 1, 137, 204, 88, 64, 18, 10, 1, 137, 204, 88, 46, 18, 10, 1, 248, - 149, 64, 18, 10, 1, 248, 149, 46, 18, 10, 1, 248, 149, 81, 18, 10, 1, - 248, 149, 174, 18, 10, 1, 219, 17, 64, 18, 10, 1, 219, 17, 46, 18, 10, 1, - 219, 17, 81, 18, 10, 1, 219, 17, 174, 18, 10, 1, 248, 137, 64, 18, 10, 1, - 248, 137, 46, 18, 10, 1, 248, 137, 81, 18, 10, 1, 248, 137, 174, 18, 10, - 1, 207, 232, 64, 18, 10, 1, 207, 232, 46, 18, 10, 1, 207, 232, 81, 18, - 10, 1, 207, 232, 174, 18, 10, 1, 209, 168, 64, 18, 10, 1, 209, 168, 46, - 18, 10, 1, 209, 168, 81, 18, 10, 1, 209, 168, 174, 18, 10, 1, 207, 234, - 64, 18, 10, 1, 207, 234, 46, 18, 10, 1, 207, 234, 81, 18, 10, 1, 207, - 234, 174, 18, 10, 1, 206, 49, 64, 18, 10, 1, 206, 49, 46, 18, 10, 1, 206, - 49, 81, 18, 10, 1, 206, 49, 174, 18, 10, 1, 219, 15, 64, 18, 10, 1, 219, - 15, 46, 18, 10, 1, 219, 15, 81, 18, 10, 1, 219, 15, 174, 18, 10, 1, 242, - 6, 64, 18, 10, 1, 242, 6, 46, 18, 10, 1, 242, 6, 81, 18, 10, 1, 242, 6, - 174, 18, 10, 1, 220, 255, 64, 18, 10, 1, 220, 255, 46, 18, 10, 1, 220, - 255, 81, 18, 10, 1, 220, 255, 174, 18, 10, 1, 209, 192, 64, 18, 10, 1, - 209, 192, 46, 18, 10, 1, 209, 192, 81, 18, 10, 1, 209, 192, 174, 18, 10, - 1, 209, 190, 64, 18, 10, 1, 209, 190, 46, 18, 10, 1, 209, 190, 81, 18, - 10, 1, 209, 190, 174, 18, 10, 1, 244, 118, 64, 18, 10, 1, 244, 118, 46, - 18, 10, 1, 244, 192, 64, 18, 10, 1, 244, 192, 46, 18, 10, 1, 242, 34, 64, - 18, 10, 1, 242, 34, 46, 18, 10, 1, 244, 116, 64, 18, 10, 1, 244, 116, 46, - 18, 10, 1, 230, 156, 64, 18, 10, 1, 230, 156, 46, 18, 10, 1, 215, 178, - 64, 18, 10, 1, 215, 178, 46, 18, 10, 1, 229, 190, 64, 18, 10, 1, 229, - 190, 46, 18, 10, 1, 229, 190, 81, 18, 10, 1, 229, 190, 174, 18, 10, 1, - 238, 252, 64, 18, 10, 1, 238, 252, 46, 18, 10, 1, 238, 252, 81, 18, 10, - 1, 238, 252, 174, 18, 10, 1, 237, 218, 64, 18, 10, 1, 237, 218, 46, 18, - 10, 1, 237, 218, 81, 18, 10, 1, 237, 218, 174, 18, 10, 1, 222, 127, 64, - 18, 10, 1, 222, 127, 46, 18, 10, 1, 222, 127, 81, 18, 10, 1, 222, 127, - 174, 18, 10, 1, 221, 179, 238, 86, 64, 18, 10, 1, 221, 179, 238, 86, 46, - 18, 10, 1, 215, 231, 64, 18, 10, 1, 215, 231, 46, 18, 10, 1, 215, 231, - 81, 18, 10, 1, 215, 231, 174, 18, 10, 1, 237, 44, 3, 89, 87, 64, 18, 10, - 1, 237, 44, 3, 89, 87, 46, 18, 10, 1, 237, 44, 238, 37, 64, 18, 10, 1, - 237, 44, 238, 37, 46, 18, 10, 1, 237, 44, 238, 37, 81, 18, 10, 1, 237, - 44, 238, 37, 174, 18, 10, 1, 237, 44, 243, 110, 64, 18, 10, 1, 237, 44, - 243, 110, 46, 18, 10, 1, 237, 44, 243, 110, 81, 18, 10, 1, 237, 44, 243, - 110, 174, 18, 10, 1, 89, 248, 224, 64, 18, 10, 1, 89, 248, 224, 46, 18, - 10, 1, 89, 248, 224, 3, 237, 128, 87, 64, 18, 10, 1, 89, 248, 224, 3, - 237, 128, 87, 46, 18, 10, 16, 70, 55, 10, 16, 70, 56, 10, 16, 120, 187, - 55, 10, 16, 120, 187, 56, 10, 16, 126, 187, 55, 10, 16, 126, 187, 56, 10, - 16, 126, 187, 218, 59, 183, 55, 10, 16, 126, 187, 218, 59, 183, 56, 10, - 16, 239, 147, 187, 55, 10, 16, 239, 147, 187, 56, 10, 16, 52, 80, 248, - 231, 56, 10, 16, 120, 187, 205, 244, 55, 10, 16, 120, 187, 205, 244, 56, - 10, 16, 215, 252, 10, 16, 5, 209, 252, 55, 10, 16, 5, 209, 252, 56, 10, - 1, 222, 206, 64, 18, 10, 1, 222, 206, 46, 18, 10, 1, 222, 206, 81, 18, - 10, 1, 222, 206, 174, 18, 10, 1, 106, 64, 18, 10, 1, 106, 46, 18, 10, 1, - 220, 74, 64, 18, 10, 1, 220, 74, 46, 18, 10, 1, 202, 214, 64, 18, 10, 1, - 202, 214, 46, 18, 10, 1, 106, 3, 237, 128, 87, 64, 18, 10, 1, 206, 56, - 64, 18, 10, 1, 206, 56, 46, 18, 10, 1, 229, 76, 220, 74, 64, 18, 10, 1, - 229, 76, 220, 74, 46, 18, 10, 1, 229, 76, 202, 214, 64, 18, 10, 1, 229, - 76, 202, 214, 46, 18, 10, 1, 188, 64, 18, 10, 1, 188, 46, 18, 10, 1, 188, - 81, 18, 10, 1, 188, 174, 18, 10, 1, 207, 16, 229, 205, 229, 76, 137, 225, - 130, 81, 18, 10, 1, 207, 16, 229, 205, 229, 76, 137, 225, 130, 174, 18, - 10, 32, 89, 3, 237, 128, 87, 3, 137, 64, 18, 10, 32, 89, 3, 237, 128, 87, - 3, 137, 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, 251, 110, 64, 18, 10, 32, - 89, 3, 237, 128, 87, 3, 251, 110, 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, - 204, 71, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 204, 71, 46, 18, 10, 32, - 89, 3, 237, 128, 87, 3, 106, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 106, - 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, 220, 74, 64, 18, 10, 32, 89, 3, - 237, 128, 87, 3, 220, 74, 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, 202, - 214, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 202, 214, 46, 18, 10, 32, - 89, 3, 237, 128, 87, 3, 188, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 188, - 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, 188, 81, 18, 10, 32, 207, 16, - 229, 76, 89, 3, 237, 128, 87, 3, 137, 225, 130, 64, 18, 10, 32, 207, 16, - 229, 76, 89, 3, 237, 128, 87, 3, 137, 225, 130, 46, 18, 10, 32, 207, 16, - 229, 76, 89, 3, 237, 128, 87, 3, 137, 225, 130, 81, 18, 10, 1, 240, 75, - 89, 64, 18, 10, 1, 240, 75, 89, 46, 18, 10, 1, 240, 75, 89, 81, 18, 10, - 1, 240, 75, 89, 174, 18, 10, 32, 89, 3, 237, 128, 87, 3, 184, 64, 18, 10, - 32, 89, 3, 237, 128, 87, 3, 151, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, - 83, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 137, 225, 130, 64, 18, 10, - 32, 89, 3, 237, 128, 87, 3, 89, 64, 18, 10, 32, 248, 139, 3, 184, 64, 18, - 10, 32, 248, 139, 3, 151, 64, 18, 10, 32, 248, 139, 3, 229, 141, 64, 18, - 10, 32, 248, 139, 3, 83, 64, 18, 10, 32, 248, 139, 3, 137, 225, 130, 64, - 18, 10, 32, 248, 139, 3, 89, 64, 18, 10, 32, 209, 170, 3, 184, 64, 18, - 10, 32, 209, 170, 3, 151, 64, 18, 10, 32, 209, 170, 3, 229, 141, 64, 18, - 10, 32, 209, 170, 3, 83, 64, 18, 10, 32, 209, 170, 3, 137, 225, 130, 64, - 18, 10, 32, 209, 170, 3, 89, 64, 18, 10, 32, 209, 89, 3, 184, 64, 18, 10, - 32, 209, 89, 3, 83, 64, 18, 10, 32, 209, 89, 3, 137, 225, 130, 64, 18, - 10, 32, 209, 89, 3, 89, 64, 18, 10, 32, 184, 3, 151, 64, 18, 10, 32, 184, - 3, 83, 64, 18, 10, 32, 151, 3, 184, 64, 18, 10, 32, 151, 3, 83, 64, 18, - 10, 32, 229, 141, 3, 184, 64, 18, 10, 32, 229, 141, 3, 151, 64, 18, 10, - 32, 229, 141, 3, 83, 64, 18, 10, 32, 214, 162, 3, 184, 64, 18, 10, 32, - 214, 162, 3, 151, 64, 18, 10, 32, 214, 162, 3, 229, 141, 64, 18, 10, 32, - 214, 162, 3, 83, 64, 18, 10, 32, 215, 29, 3, 151, 64, 18, 10, 32, 215, - 29, 3, 83, 64, 18, 10, 32, 244, 208, 3, 184, 64, 18, 10, 32, 244, 208, 3, - 151, 64, 18, 10, 32, 244, 208, 3, 229, 141, 64, 18, 10, 32, 244, 208, 3, - 83, 64, 18, 10, 32, 209, 252, 3, 151, 64, 18, 10, 32, 209, 252, 3, 83, - 64, 18, 10, 32, 202, 111, 3, 83, 64, 18, 10, 32, 251, 60, 3, 184, 64, 18, - 10, 32, 251, 60, 3, 83, 64, 18, 10, 32, 238, 115, 3, 184, 64, 18, 10, 32, - 238, 115, 3, 83, 64, 18, 10, 32, 240, 48, 3, 184, 64, 18, 10, 32, 240, - 48, 3, 151, 64, 18, 10, 32, 240, 48, 3, 229, 141, 64, 18, 10, 32, 240, - 48, 3, 83, 64, 18, 10, 32, 240, 48, 3, 137, 225, 130, 64, 18, 10, 32, - 240, 48, 3, 89, 64, 18, 10, 32, 217, 120, 3, 151, 64, 18, 10, 32, 217, - 120, 3, 83, 64, 18, 10, 32, 217, 120, 3, 137, 225, 130, 64, 18, 10, 32, - 217, 120, 3, 89, 64, 18, 10, 32, 230, 23, 3, 137, 64, 18, 10, 32, 230, - 23, 3, 184, 64, 18, 10, 32, 230, 23, 3, 151, 64, 18, 10, 32, 230, 23, 3, - 229, 141, 64, 18, 10, 32, 230, 23, 3, 228, 29, 64, 18, 10, 32, 230, 23, - 3, 83, 64, 18, 10, 32, 230, 23, 3, 137, 225, 130, 64, 18, 10, 32, 230, - 23, 3, 89, 64, 18, 10, 32, 228, 29, 3, 184, 64, 18, 10, 32, 228, 29, 3, - 151, 64, 18, 10, 32, 228, 29, 3, 229, 141, 64, 18, 10, 32, 228, 29, 3, - 83, 64, 18, 10, 32, 228, 29, 3, 137, 225, 130, 64, 18, 10, 32, 228, 29, - 3, 89, 64, 18, 10, 32, 83, 3, 184, 64, 18, 10, 32, 83, 3, 151, 64, 18, - 10, 32, 83, 3, 229, 141, 64, 18, 10, 32, 83, 3, 83, 64, 18, 10, 32, 83, - 3, 137, 225, 130, 64, 18, 10, 32, 83, 3, 89, 64, 18, 10, 32, 221, 179, 3, - 184, 64, 18, 10, 32, 221, 179, 3, 151, 64, 18, 10, 32, 221, 179, 3, 229, - 141, 64, 18, 10, 32, 221, 179, 3, 83, 64, 18, 10, 32, 221, 179, 3, 137, - 225, 130, 64, 18, 10, 32, 221, 179, 3, 89, 64, 18, 10, 32, 237, 44, 3, - 184, 64, 18, 10, 32, 237, 44, 3, 83, 64, 18, 10, 32, 237, 44, 3, 137, - 225, 130, 64, 18, 10, 32, 237, 44, 3, 89, 64, 18, 10, 32, 89, 3, 184, 64, - 18, 10, 32, 89, 3, 151, 64, 18, 10, 32, 89, 3, 229, 141, 64, 18, 10, 32, - 89, 3, 83, 64, 18, 10, 32, 89, 3, 137, 225, 130, 64, 18, 10, 32, 89, 3, - 89, 64, 18, 10, 32, 209, 101, 3, 210, 199, 137, 64, 18, 10, 32, 216, 123, - 3, 210, 199, 137, 64, 18, 10, 32, 137, 225, 130, 3, 210, 199, 137, 64, - 18, 10, 32, 213, 81, 3, 244, 171, 64, 18, 10, 32, 213, 81, 3, 229, 228, - 64, 18, 10, 32, 213, 81, 3, 240, 72, 64, 18, 10, 32, 213, 81, 3, 244, - 173, 64, 18, 10, 32, 213, 81, 3, 229, 230, 64, 18, 10, 32, 213, 81, 3, - 210, 199, 137, 64, 18, 10, 32, 89, 3, 237, 128, 87, 3, 216, 123, 46, 18, - 10, 32, 89, 3, 237, 128, 87, 3, 202, 108, 46, 18, 10, 32, 89, 3, 237, - 128, 87, 3, 83, 46, 18, 10, 32, 89, 3, 237, 128, 87, 3, 221, 179, 46, 18, - 10, 32, 89, 3, 237, 128, 87, 3, 137, 225, 130, 46, 18, 10, 32, 89, 3, - 237, 128, 87, 3, 89, 46, 18, 10, 32, 248, 139, 3, 216, 123, 46, 18, 10, - 32, 248, 139, 3, 202, 108, 46, 18, 10, 32, 248, 139, 3, 83, 46, 18, 10, - 32, 248, 139, 3, 221, 179, 46, 18, 10, 32, 248, 139, 3, 137, 225, 130, - 46, 18, 10, 32, 248, 139, 3, 89, 46, 18, 10, 32, 209, 170, 3, 216, 123, - 46, 18, 10, 32, 209, 170, 3, 202, 108, 46, 18, 10, 32, 209, 170, 3, 83, - 46, 18, 10, 32, 209, 170, 3, 221, 179, 46, 18, 10, 32, 209, 170, 3, 137, - 225, 130, 46, 18, 10, 32, 209, 170, 3, 89, 46, 18, 10, 32, 209, 89, 3, - 216, 123, 46, 18, 10, 32, 209, 89, 3, 202, 108, 46, 18, 10, 32, 209, 89, - 3, 83, 46, 18, 10, 32, 209, 89, 3, 221, 179, 46, 18, 10, 32, 209, 89, 3, - 137, 225, 130, 46, 18, 10, 32, 209, 89, 3, 89, 46, 18, 10, 32, 240, 48, - 3, 137, 225, 130, 46, 18, 10, 32, 240, 48, 3, 89, 46, 18, 10, 32, 217, - 120, 3, 137, 225, 130, 46, 18, 10, 32, 217, 120, 3, 89, 46, 18, 10, 32, - 230, 23, 3, 137, 46, 18, 10, 32, 230, 23, 3, 228, 29, 46, 18, 10, 32, - 230, 23, 3, 83, 46, 18, 10, 32, 230, 23, 3, 137, 225, 130, 46, 18, 10, - 32, 230, 23, 3, 89, 46, 18, 10, 32, 228, 29, 3, 83, 46, 18, 10, 32, 228, - 29, 3, 137, 225, 130, 46, 18, 10, 32, 228, 29, 3, 89, 46, 18, 10, 32, 83, - 3, 137, 46, 18, 10, 32, 83, 3, 83, 46, 18, 10, 32, 221, 179, 3, 216, 123, - 46, 18, 10, 32, 221, 179, 3, 202, 108, 46, 18, 10, 32, 221, 179, 3, 83, - 46, 18, 10, 32, 221, 179, 3, 221, 179, 46, 18, 10, 32, 221, 179, 3, 137, - 225, 130, 46, 18, 10, 32, 221, 179, 3, 89, 46, 18, 10, 32, 137, 225, 130, - 3, 210, 199, 137, 46, 18, 10, 32, 89, 3, 216, 123, 46, 18, 10, 32, 89, 3, - 202, 108, 46, 18, 10, 32, 89, 3, 83, 46, 18, 10, 32, 89, 3, 221, 179, 46, - 18, 10, 32, 89, 3, 137, 225, 130, 46, 18, 10, 32, 89, 3, 89, 46, 18, 10, - 32, 89, 3, 237, 128, 87, 3, 184, 81, 18, 10, 32, 89, 3, 237, 128, 87, 3, - 151, 81, 18, 10, 32, 89, 3, 237, 128, 87, 3, 229, 141, 81, 18, 10, 32, - 89, 3, 237, 128, 87, 3, 83, 81, 18, 10, 32, 89, 3, 237, 128, 87, 3, 237, - 44, 81, 18, 10, 32, 248, 139, 3, 184, 81, 18, 10, 32, 248, 139, 3, 151, - 81, 18, 10, 32, 248, 139, 3, 229, 141, 81, 18, 10, 32, 248, 139, 3, 83, - 81, 18, 10, 32, 248, 139, 3, 237, 44, 81, 18, 10, 32, 209, 170, 3, 184, - 81, 18, 10, 32, 209, 170, 3, 151, 81, 18, 10, 32, 209, 170, 3, 229, 141, - 81, 18, 10, 32, 209, 170, 3, 83, 81, 18, 10, 32, 209, 170, 3, 237, 44, - 81, 18, 10, 32, 209, 89, 3, 83, 81, 18, 10, 32, 184, 3, 151, 81, 18, 10, - 32, 184, 3, 83, 81, 18, 10, 32, 151, 3, 184, 81, 18, 10, 32, 151, 3, 83, - 81, 18, 10, 32, 229, 141, 3, 184, 81, 18, 10, 32, 229, 141, 3, 83, 81, - 18, 10, 32, 214, 162, 3, 184, 81, 18, 10, 32, 214, 162, 3, 151, 81, 18, - 10, 32, 214, 162, 3, 229, 141, 81, 18, 10, 32, 214, 162, 3, 83, 81, 18, - 10, 32, 215, 29, 3, 151, 81, 18, 10, 32, 215, 29, 3, 229, 141, 81, 18, - 10, 32, 215, 29, 3, 83, 81, 18, 10, 32, 244, 208, 3, 184, 81, 18, 10, 32, - 244, 208, 3, 151, 81, 18, 10, 32, 244, 208, 3, 229, 141, 81, 18, 10, 32, - 244, 208, 3, 83, 81, 18, 10, 32, 209, 252, 3, 151, 81, 18, 10, 32, 202, - 111, 3, 83, 81, 18, 10, 32, 251, 60, 3, 184, 81, 18, 10, 32, 251, 60, 3, - 83, 81, 18, 10, 32, 238, 115, 3, 184, 81, 18, 10, 32, 238, 115, 3, 83, - 81, 18, 10, 32, 240, 48, 3, 184, 81, 18, 10, 32, 240, 48, 3, 151, 81, 18, - 10, 32, 240, 48, 3, 229, 141, 81, 18, 10, 32, 240, 48, 3, 83, 81, 18, 10, - 32, 217, 120, 3, 151, 81, 18, 10, 32, 217, 120, 3, 83, 81, 18, 10, 32, - 230, 23, 3, 184, 81, 18, 10, 32, 230, 23, 3, 151, 81, 18, 10, 32, 230, - 23, 3, 229, 141, 81, 18, 10, 32, 230, 23, 3, 228, 29, 81, 18, 10, 32, - 230, 23, 3, 83, 81, 18, 10, 32, 228, 29, 3, 184, 81, 18, 10, 32, 228, 29, - 3, 151, 81, 18, 10, 32, 228, 29, 3, 229, 141, 81, 18, 10, 32, 228, 29, 3, - 83, 81, 18, 10, 32, 228, 29, 3, 237, 44, 81, 18, 10, 32, 83, 3, 184, 81, - 18, 10, 32, 83, 3, 151, 81, 18, 10, 32, 83, 3, 229, 141, 81, 18, 10, 32, - 83, 3, 83, 81, 18, 10, 32, 221, 179, 3, 184, 81, 18, 10, 32, 221, 179, 3, - 151, 81, 18, 10, 32, 221, 179, 3, 229, 141, 81, 18, 10, 32, 221, 179, 3, - 83, 81, 18, 10, 32, 221, 179, 3, 237, 44, 81, 18, 10, 32, 237, 44, 3, - 184, 81, 18, 10, 32, 237, 44, 3, 83, 81, 18, 10, 32, 237, 44, 3, 210, - 199, 137, 81, 18, 10, 32, 89, 3, 184, 81, 18, 10, 32, 89, 3, 151, 81, 18, - 10, 32, 89, 3, 229, 141, 81, 18, 10, 32, 89, 3, 83, 81, 18, 10, 32, 89, - 3, 237, 44, 81, 18, 10, 32, 89, 3, 237, 128, 87, 3, 83, 174, 18, 10, 32, - 89, 3, 237, 128, 87, 3, 237, 44, 174, 18, 10, 32, 248, 139, 3, 83, 174, - 18, 10, 32, 248, 139, 3, 237, 44, 174, 18, 10, 32, 209, 170, 3, 83, 174, - 18, 10, 32, 209, 170, 3, 237, 44, 174, 18, 10, 32, 209, 89, 3, 83, 174, - 18, 10, 32, 209, 89, 3, 237, 44, 174, 18, 10, 32, 214, 162, 3, 83, 174, - 18, 10, 32, 214, 162, 3, 237, 44, 174, 18, 10, 32, 213, 40, 3, 83, 174, - 18, 10, 32, 213, 40, 3, 237, 44, 174, 18, 10, 32, 230, 23, 3, 228, 29, - 174, 18, 10, 32, 230, 23, 3, 83, 174, 18, 10, 32, 228, 29, 3, 83, 174, - 18, 10, 32, 221, 179, 3, 83, 174, 18, 10, 32, 221, 179, 3, 237, 44, 174, - 18, 10, 32, 89, 3, 83, 174, 18, 10, 32, 89, 3, 237, 44, 174, 18, 10, 32, - 213, 81, 3, 240, 72, 174, 18, 10, 32, 213, 81, 3, 244, 173, 174, 18, 10, - 32, 213, 81, 3, 229, 230, 174, 18, 10, 32, 209, 252, 3, 137, 225, 130, - 64, 18, 10, 32, 209, 252, 3, 89, 64, 18, 10, 32, 251, 60, 3, 137, 225, - 130, 64, 18, 10, 32, 251, 60, 3, 89, 64, 18, 10, 32, 238, 115, 3, 137, - 225, 130, 64, 18, 10, 32, 238, 115, 3, 89, 64, 18, 10, 32, 214, 162, 3, - 137, 225, 130, 64, 18, 10, 32, 214, 162, 3, 89, 64, 18, 10, 32, 213, 40, - 3, 137, 225, 130, 64, 18, 10, 32, 213, 40, 3, 89, 64, 18, 10, 32, 151, 3, - 137, 225, 130, 64, 18, 10, 32, 151, 3, 89, 64, 18, 10, 32, 184, 3, 137, - 225, 130, 64, 18, 10, 32, 184, 3, 89, 64, 18, 10, 32, 229, 141, 3, 137, - 225, 130, 64, 18, 10, 32, 229, 141, 3, 89, 64, 18, 10, 32, 215, 29, 3, - 137, 225, 130, 64, 18, 10, 32, 215, 29, 3, 89, 64, 18, 10, 32, 244, 208, - 3, 137, 225, 130, 64, 18, 10, 32, 244, 208, 3, 89, 64, 18, 10, 32, 213, - 40, 3, 184, 64, 18, 10, 32, 213, 40, 3, 151, 64, 18, 10, 32, 213, 40, 3, - 229, 141, 64, 18, 10, 32, 213, 40, 3, 83, 64, 18, 10, 32, 213, 40, 3, - 216, 123, 64, 18, 10, 32, 214, 162, 3, 216, 123, 64, 18, 10, 32, 215, 29, - 3, 216, 123, 64, 18, 10, 32, 244, 208, 3, 216, 123, 64, 18, 10, 32, 209, - 252, 3, 137, 225, 130, 46, 18, 10, 32, 209, 252, 3, 89, 46, 18, 10, 32, - 251, 60, 3, 137, 225, 130, 46, 18, 10, 32, 251, 60, 3, 89, 46, 18, 10, - 32, 238, 115, 3, 137, 225, 130, 46, 18, 10, 32, 238, 115, 3, 89, 46, 18, - 10, 32, 214, 162, 3, 137, 225, 130, 46, 18, 10, 32, 214, 162, 3, 89, 46, - 18, 10, 32, 213, 40, 3, 137, 225, 130, 46, 18, 10, 32, 213, 40, 3, 89, - 46, 18, 10, 32, 151, 3, 137, 225, 130, 46, 18, 10, 32, 151, 3, 89, 46, - 18, 10, 32, 184, 3, 137, 225, 130, 46, 18, 10, 32, 184, 3, 89, 46, 18, - 10, 32, 229, 141, 3, 137, 225, 130, 46, 18, 10, 32, 229, 141, 3, 89, 46, - 18, 10, 32, 215, 29, 3, 137, 225, 130, 46, 18, 10, 32, 215, 29, 3, 89, - 46, 18, 10, 32, 244, 208, 3, 137, 225, 130, 46, 18, 10, 32, 244, 208, 3, - 89, 46, 18, 10, 32, 213, 40, 3, 184, 46, 18, 10, 32, 213, 40, 3, 151, 46, - 18, 10, 32, 213, 40, 3, 229, 141, 46, 18, 10, 32, 213, 40, 3, 83, 46, 18, - 10, 32, 213, 40, 3, 216, 123, 46, 18, 10, 32, 214, 162, 3, 216, 123, 46, - 18, 10, 32, 215, 29, 3, 216, 123, 46, 18, 10, 32, 244, 208, 3, 216, 123, - 46, 18, 10, 32, 213, 40, 3, 184, 81, 18, 10, 32, 213, 40, 3, 151, 81, 18, - 10, 32, 213, 40, 3, 229, 141, 81, 18, 10, 32, 213, 40, 3, 83, 81, 18, 10, - 32, 214, 162, 3, 237, 44, 81, 18, 10, 32, 213, 40, 3, 237, 44, 81, 18, - 10, 32, 209, 252, 3, 83, 81, 18, 10, 32, 214, 162, 3, 184, 174, 18, 10, - 32, 214, 162, 3, 151, 174, 18, 10, 32, 214, 162, 3, 229, 141, 174, 18, - 10, 32, 213, 40, 3, 184, 174, 18, 10, 32, 213, 40, 3, 151, 174, 18, 10, - 32, 213, 40, 3, 229, 141, 174, 18, 10, 32, 209, 252, 3, 83, 174, 18, 10, - 32, 202, 111, 3, 83, 174, 18, 10, 32, 137, 3, 240, 70, 46, 18, 10, 32, - 137, 3, 240, 70, 64, 18, 219, 231, 49, 219, 76, 219, 231, 50, 219, 76, - 10, 32, 209, 170, 3, 184, 3, 83, 81, 18, 10, 32, 209, 170, 3, 151, 3, - 184, 46, 18, 10, 32, 209, 170, 3, 151, 3, 184, 81, 18, 10, 32, 209, 170, - 3, 151, 3, 83, 81, 18, 10, 32, 209, 170, 3, 229, 141, 3, 83, 81, 18, 10, - 32, 209, 170, 3, 83, 3, 184, 81, 18, 10, 32, 209, 170, 3, 83, 3, 151, 81, - 18, 10, 32, 209, 170, 3, 83, 3, 229, 141, 81, 18, 10, 32, 184, 3, 83, 3, - 151, 46, 18, 10, 32, 184, 3, 83, 3, 151, 81, 18, 10, 32, 151, 3, 83, 3, - 89, 46, 18, 10, 32, 151, 3, 83, 3, 137, 225, 130, 46, 18, 10, 32, 214, - 162, 3, 151, 3, 184, 81, 18, 10, 32, 214, 162, 3, 184, 3, 151, 81, 18, - 10, 32, 214, 162, 3, 184, 3, 137, 225, 130, 46, 18, 10, 32, 214, 162, 3, - 83, 3, 151, 46, 18, 10, 32, 214, 162, 3, 83, 3, 151, 81, 18, 10, 32, 214, - 162, 3, 83, 3, 184, 81, 18, 10, 32, 214, 162, 3, 83, 3, 83, 46, 18, 10, - 32, 214, 162, 3, 83, 3, 83, 81, 18, 10, 32, 215, 29, 3, 151, 3, 151, 46, - 18, 10, 32, 215, 29, 3, 151, 3, 151, 81, 18, 10, 32, 215, 29, 3, 83, 3, - 83, 46, 18, 10, 32, 213, 40, 3, 151, 3, 83, 46, 18, 10, 32, 213, 40, 3, - 151, 3, 83, 81, 18, 10, 32, 213, 40, 3, 184, 3, 89, 46, 18, 10, 32, 213, - 40, 3, 83, 3, 229, 141, 46, 18, 10, 32, 213, 40, 3, 83, 3, 229, 141, 81, - 18, 10, 32, 213, 40, 3, 83, 3, 83, 46, 18, 10, 32, 213, 40, 3, 83, 3, 83, - 81, 18, 10, 32, 244, 208, 3, 151, 3, 137, 225, 130, 46, 18, 10, 32, 244, - 208, 3, 229, 141, 3, 83, 46, 18, 10, 32, 244, 208, 3, 229, 141, 3, 83, - 81, 18, 10, 32, 209, 252, 3, 83, 3, 151, 46, 18, 10, 32, 209, 252, 3, 83, - 3, 151, 81, 18, 10, 32, 209, 252, 3, 83, 3, 83, 81, 18, 10, 32, 209, 252, - 3, 83, 3, 89, 46, 18, 10, 32, 251, 60, 3, 184, 3, 83, 46, 18, 10, 32, - 251, 60, 3, 83, 3, 83, 46, 18, 10, 32, 251, 60, 3, 83, 3, 83, 81, 18, 10, - 32, 251, 60, 3, 83, 3, 137, 225, 130, 46, 18, 10, 32, 238, 115, 3, 83, 3, - 83, 46, 18, 10, 32, 238, 115, 3, 83, 3, 89, 46, 18, 10, 32, 238, 115, 3, - 83, 3, 137, 225, 130, 46, 18, 10, 32, 240, 48, 3, 229, 141, 3, 83, 46, - 18, 10, 32, 240, 48, 3, 229, 141, 3, 83, 81, 18, 10, 32, 217, 120, 3, 83, - 3, 151, 46, 18, 10, 32, 217, 120, 3, 83, 3, 83, 46, 18, 10, 32, 228, 29, - 3, 151, 3, 83, 46, 18, 10, 32, 228, 29, 3, 151, 3, 89, 46, 18, 10, 32, - 228, 29, 3, 151, 3, 137, 225, 130, 46, 18, 10, 32, 228, 29, 3, 184, 3, - 184, 81, 18, 10, 32, 228, 29, 3, 184, 3, 184, 46, 18, 10, 32, 228, 29, 3, - 229, 141, 3, 83, 46, 18, 10, 32, 228, 29, 3, 229, 141, 3, 83, 81, 18, 10, - 32, 228, 29, 3, 83, 3, 151, 46, 18, 10, 32, 228, 29, 3, 83, 3, 151, 81, - 18, 10, 32, 83, 3, 151, 3, 184, 81, 18, 10, 32, 83, 3, 151, 3, 83, 81, - 18, 10, 32, 83, 3, 151, 3, 89, 46, 18, 10, 32, 83, 3, 184, 3, 151, 81, - 18, 10, 32, 83, 3, 184, 3, 83, 81, 18, 10, 32, 83, 3, 229, 141, 3, 184, - 81, 18, 10, 32, 83, 3, 229, 141, 3, 83, 81, 18, 10, 32, 83, 3, 184, 3, - 229, 141, 81, 18, 10, 32, 237, 44, 3, 83, 3, 184, 81, 18, 10, 32, 237, - 44, 3, 83, 3, 83, 81, 18, 10, 32, 221, 179, 3, 151, 3, 83, 81, 18, 10, - 32, 221, 179, 3, 151, 3, 137, 225, 130, 46, 18, 10, 32, 221, 179, 3, 184, - 3, 83, 46, 18, 10, 32, 221, 179, 3, 184, 3, 83, 81, 18, 10, 32, 221, 179, - 3, 184, 3, 137, 225, 130, 46, 18, 10, 32, 221, 179, 3, 83, 3, 89, 46, 18, - 10, 32, 221, 179, 3, 83, 3, 137, 225, 130, 46, 18, 10, 32, 89, 3, 83, 3, - 83, 46, 18, 10, 32, 89, 3, 83, 3, 83, 81, 18, 10, 32, 248, 139, 3, 229, - 141, 3, 89, 46, 18, 10, 32, 209, 170, 3, 184, 3, 89, 46, 18, 10, 32, 209, - 170, 3, 184, 3, 137, 225, 130, 46, 18, 10, 32, 209, 170, 3, 229, 141, 3, - 89, 46, 18, 10, 32, 209, 170, 3, 229, 141, 3, 137, 225, 130, 46, 18, 10, - 32, 209, 170, 3, 83, 3, 89, 46, 18, 10, 32, 209, 170, 3, 83, 3, 137, 225, - 130, 46, 18, 10, 32, 184, 3, 83, 3, 89, 46, 18, 10, 32, 184, 3, 151, 3, - 137, 225, 130, 46, 18, 10, 32, 184, 3, 83, 3, 137, 225, 130, 46, 18, 10, - 32, 214, 162, 3, 229, 141, 3, 137, 225, 130, 46, 18, 10, 32, 215, 29, 3, - 151, 3, 89, 46, 18, 10, 32, 213, 40, 3, 151, 3, 89, 46, 18, 10, 32, 244, - 208, 3, 151, 3, 89, 46, 18, 10, 32, 228, 29, 3, 184, 3, 89, 46, 18, 10, - 32, 228, 29, 3, 83, 3, 89, 46, 18, 10, 32, 89, 3, 151, 3, 89, 46, 18, 10, - 32, 89, 3, 184, 3, 89, 46, 18, 10, 32, 89, 3, 83, 3, 89, 46, 18, 10, 32, - 83, 3, 83, 3, 89, 46, 18, 10, 32, 217, 120, 3, 83, 3, 89, 46, 18, 10, 32, - 221, 179, 3, 151, 3, 89, 46, 18, 10, 32, 217, 120, 3, 83, 3, 151, 81, 18, - 10, 32, 228, 29, 3, 151, 3, 83, 81, 18, 10, 32, 251, 60, 3, 83, 3, 89, - 46, 18, 10, 32, 230, 23, 3, 83, 3, 89, 46, 18, 10, 32, 221, 179, 3, 184, - 3, 151, 81, 18, 10, 32, 83, 3, 229, 141, 3, 89, 46, 18, 10, 32, 228, 29, - 3, 184, 3, 83, 81, 18, 10, 32, 230, 23, 3, 83, 3, 83, 46, 18, 10, 32, - 228, 29, 3, 184, 3, 83, 46, 18, 10, 32, 221, 179, 3, 184, 3, 151, 46, 18, - 10, 32, 184, 3, 151, 3, 89, 46, 18, 10, 32, 151, 3, 184, 3, 89, 46, 18, - 10, 32, 83, 3, 184, 3, 89, 46, 18, 10, 32, 240, 48, 3, 83, 3, 89, 46, 18, - 10, 32, 248, 139, 3, 151, 3, 89, 46, 18, 10, 32, 230, 23, 3, 83, 3, 83, - 81, 18, 10, 32, 251, 60, 3, 184, 3, 83, 81, 18, 10, 32, 215, 29, 3, 83, - 3, 83, 81, 18, 10, 32, 214, 162, 3, 229, 141, 3, 89, 46, 18, 10, 32, 221, - 179, 3, 184, 3, 89, 46, 18, 10, 32, 215, 4, 206, 188, 250, 82, 228, 254, - 211, 62, 2, 64, 18, 10, 32, 217, 116, 206, 188, 250, 82, 228, 254, 211, - 62, 2, 64, 18, 10, 32, 251, 13, 64, 18, 10, 32, 251, 44, 64, 18, 10, 32, - 224, 57, 64, 18, 10, 32, 215, 5, 64, 18, 10, 32, 216, 174, 64, 18, 10, - 32, 251, 33, 64, 18, 10, 32, 204, 90, 64, 18, 10, 32, 215, 4, 64, 18, 10, - 32, 215, 3, 251, 33, 204, 89, 10, 32, 230, 172, 216, 56, 54, 10, 32, 248, - 53, 250, 142, 250, 143, 57, 214, 149, 57, 214, 38, 57, 213, 226, 57, 213, - 215, 57, 213, 204, 57, 213, 193, 57, 213, 182, 57, 213, 171, 57, 213, - 160, 57, 214, 148, 57, 214, 137, 57, 214, 126, 57, 214, 115, 57, 214, - 104, 57, 214, 93, 57, 214, 82, 217, 241, 239, 159, 35, 80, 245, 233, 217, - 241, 239, 159, 35, 80, 139, 245, 233, 217, 241, 239, 159, 35, 80, 139, - 239, 102, 211, 61, 217, 241, 239, 159, 35, 80, 245, 242, 217, 241, 239, - 159, 35, 80, 213, 143, 217, 241, 239, 159, 35, 80, 240, 212, 82, 217, - 241, 239, 159, 35, 80, 217, 47, 82, 217, 241, 239, 159, 35, 80, 49, 61, - 227, 185, 155, 217, 241, 239, 159, 35, 80, 50, 61, 227, 185, 247, 225, - 217, 241, 239, 159, 35, 80, 236, 106, 241, 108, 39, 32, 49, 237, 137, 39, - 32, 50, 237, 137, 39, 52, 208, 228, 49, 237, 137, 39, 52, 208, 228, 50, - 237, 137, 39, 225, 171, 49, 237, 137, 39, 225, 171, 50, 237, 137, 39, - 245, 206, 225, 170, 39, 32, 49, 162, 56, 39, 32, 50, 162, 56, 39, 208, - 228, 49, 162, 56, 39, 208, 228, 50, 162, 56, 39, 225, 171, 49, 162, 56, - 39, 225, 171, 50, 162, 56, 39, 245, 206, 225, 171, 56, 39, 36, 208, 198, - 49, 237, 137, 39, 36, 208, 198, 50, 237, 137, 217, 241, 239, 159, 35, 80, - 120, 70, 227, 232, 217, 241, 239, 159, 35, 80, 241, 104, 244, 144, 217, - 241, 239, 159, 35, 80, 241, 93, 244, 144, 217, 241, 239, 159, 35, 80, - 124, 227, 114, 217, 241, 239, 159, 35, 80, 204, 72, 124, 227, 114, 217, - 241, 239, 159, 35, 80, 49, 219, 76, 217, 241, 239, 159, 35, 80, 50, 219, - 76, 217, 241, 239, 159, 35, 80, 49, 245, 93, 155, 217, 241, 239, 159, 35, - 80, 50, 245, 93, 155, 217, 241, 239, 159, 35, 80, 49, 208, 133, 213, 33, - 155, 217, 241, 239, 159, 35, 80, 50, 208, 133, 213, 33, 155, 217, 241, - 239, 159, 35, 80, 49, 62, 227, 185, 155, 217, 241, 239, 159, 35, 80, 50, - 62, 227, 185, 155, 217, 241, 239, 159, 35, 80, 49, 52, 250, 218, 155, - 217, 241, 239, 159, 35, 80, 50, 52, 250, 218, 155, 217, 241, 239, 159, - 35, 80, 49, 250, 218, 155, 217, 241, 239, 159, 35, 80, 50, 250, 218, 155, - 217, 241, 239, 159, 35, 80, 49, 245, 166, 155, 217, 241, 239, 159, 35, - 80, 50, 245, 166, 155, 217, 241, 239, 159, 35, 80, 49, 61, 245, 166, 155, - 217, 241, 239, 159, 35, 80, 50, 61, 245, 166, 155, 213, 121, 243, 85, 61, - 213, 121, 243, 85, 217, 241, 239, 159, 35, 80, 49, 51, 155, 217, 241, - 239, 159, 35, 80, 50, 51, 155, 244, 143, 219, 198, 246, 214, 219, 198, - 204, 72, 219, 198, 52, 204, 72, 219, 198, 244, 143, 124, 227, 114, 246, - 214, 124, 227, 114, 204, 72, 124, 227, 114, 5, 245, 233, 5, 139, 245, - 233, 5, 239, 102, 211, 61, 5, 213, 143, 5, 245, 242, 5, 217, 47, 82, 5, - 240, 212, 82, 5, 241, 104, 244, 144, 5, 49, 219, 76, 5, 50, 219, 76, 5, - 49, 245, 93, 155, 5, 50, 245, 93, 155, 5, 49, 208, 133, 213, 33, 155, 5, - 50, 208, 133, 213, 33, 155, 5, 42, 54, 5, 250, 235, 5, 250, 59, 5, 91, - 54, 5, 235, 219, 5, 227, 179, 54, 5, 237, 247, 54, 5, 241, 35, 54, 5, - 216, 74, 212, 0, 5, 243, 97, 54, 5, 218, 246, 54, 5, 245, 231, 250, 49, - 10, 240, 70, 64, 18, 10, 209, 210, 3, 240, 70, 55, 10, 244, 171, 64, 18, - 10, 209, 249, 239, 137, 10, 229, 228, 64, 18, 10, 240, 72, 64, 18, 10, - 240, 72, 174, 18, 10, 244, 173, 64, 18, 10, 244, 173, 174, 18, 10, 229, - 230, 64, 18, 10, 229, 230, 174, 18, 10, 213, 81, 64, 18, 10, 213, 81, - 174, 18, 10, 210, 223, 64, 18, 10, 210, 223, 174, 18, 10, 1, 237, 128, - 64, 18, 10, 1, 137, 3, 225, 166, 87, 64, 18, 10, 1, 137, 3, 225, 166, 87, - 46, 18, 10, 1, 137, 3, 237, 128, 87, 64, 18, 10, 1, 137, 3, 237, 128, 87, - 46, 18, 10, 1, 204, 71, 3, 237, 128, 87, 64, 18, 10, 1, 204, 71, 3, 237, - 128, 87, 46, 18, 10, 1, 137, 3, 237, 128, 248, 126, 64, 18, 10, 1, 137, - 3, 237, 128, 248, 126, 46, 18, 10, 1, 89, 3, 237, 128, 87, 64, 18, 10, 1, - 89, 3, 237, 128, 87, 46, 18, 10, 1, 89, 3, 237, 128, 87, 81, 18, 10, 1, - 89, 3, 237, 128, 87, 174, 18, 10, 1, 137, 64, 18, 10, 1, 137, 46, 18, 10, - 1, 248, 139, 64, 18, 10, 1, 248, 139, 46, 18, 10, 1, 248, 139, 81, 18, - 10, 1, 248, 139, 174, 18, 10, 1, 209, 170, 225, 99, 64, 18, 10, 1, 209, - 170, 225, 99, 46, 18, 10, 1, 209, 170, 64, 18, 10, 1, 209, 170, 46, 18, - 10, 1, 209, 170, 81, 18, 10, 1, 209, 170, 174, 18, 10, 1, 209, 89, 64, - 18, 10, 1, 209, 89, 46, 18, 10, 1, 209, 89, 81, 18, 10, 1, 209, 89, 174, - 18, 10, 1, 184, 64, 18, 10, 1, 184, 46, 18, 10, 1, 184, 81, 18, 10, 1, - 184, 174, 18, 10, 1, 151, 64, 18, 10, 1, 151, 46, 18, 10, 1, 151, 81, 18, - 10, 1, 151, 174, 18, 10, 1, 229, 141, 64, 18, 10, 1, 229, 141, 46, 18, - 10, 1, 229, 141, 81, 18, 10, 1, 229, 141, 174, 18, 10, 1, 244, 185, 64, - 18, 10, 1, 244, 185, 46, 18, 10, 1, 209, 101, 64, 18, 10, 1, 209, 101, - 46, 18, 10, 1, 216, 123, 64, 18, 10, 1, 216, 123, 46, 18, 10, 1, 202, - 108, 64, 18, 10, 1, 202, 108, 46, 18, 10, 1, 214, 162, 64, 18, 10, 1, - 214, 162, 46, 18, 10, 1, 214, 162, 81, 18, 10, 1, 214, 162, 174, 18, 10, - 1, 213, 40, 64, 18, 10, 1, 213, 40, 46, 18, 10, 1, 213, 40, 81, 18, 10, - 1, 213, 40, 174, 18, 10, 1, 215, 29, 64, 18, 10, 1, 215, 29, 46, 18, 10, - 1, 215, 29, 81, 18, 10, 1, 215, 29, 174, 18, 10, 1, 244, 208, 64, 18, 10, - 1, 244, 208, 46, 18, 10, 1, 244, 208, 81, 18, 10, 1, 244, 208, 174, 18, - 10, 1, 209, 252, 64, 18, 10, 1, 209, 252, 46, 18, 10, 1, 209, 252, 81, - 18, 10, 1, 209, 252, 174, 18, 10, 1, 202, 111, 64, 18, 10, 1, 202, 111, - 46, 18, 10, 1, 202, 111, 81, 18, 10, 1, 202, 111, 174, 18, 10, 1, 251, - 60, 64, 18, 10, 1, 251, 60, 46, 18, 10, 1, 251, 60, 81, 18, 10, 1, 251, - 60, 174, 18, 10, 1, 238, 115, 64, 18, 10, 1, 238, 115, 46, 18, 10, 1, - 238, 115, 81, 18, 10, 1, 238, 115, 174, 18, 10, 1, 240, 48, 64, 18, 10, - 1, 240, 48, 46, 18, 10, 1, 240, 48, 81, 18, 10, 1, 240, 48, 174, 18, 10, - 1, 217, 120, 64, 18, 10, 1, 217, 120, 46, 18, 10, 1, 217, 120, 81, 18, - 10, 1, 217, 120, 174, 18, 10, 1, 230, 23, 64, 18, 10, 1, 230, 23, 46, 18, - 10, 1, 230, 23, 81, 18, 10, 1, 230, 23, 174, 18, 10, 1, 228, 29, 64, 18, - 10, 1, 228, 29, 46, 18, 10, 1, 228, 29, 81, 18, 10, 1, 228, 29, 174, 18, - 10, 1, 83, 64, 18, 10, 1, 83, 46, 18, 10, 1, 83, 81, 18, 10, 1, 83, 174, - 18, 10, 1, 221, 179, 64, 18, 10, 1, 221, 179, 46, 18, 10, 1, 221, 179, - 81, 18, 10, 1, 221, 179, 174, 18, 10, 1, 237, 44, 64, 18, 10, 1, 237, 44, - 46, 18, 10, 1, 237, 44, 81, 18, 10, 1, 237, 44, 174, 18, 10, 1, 204, 71, - 64, 18, 10, 1, 204, 71, 46, 18, 10, 1, 137, 225, 130, 64, 18, 10, 1, 137, - 225, 130, 46, 18, 10, 1, 89, 64, 18, 10, 1, 89, 46, 18, 10, 1, 89, 81, - 18, 10, 1, 89, 174, 18, 10, 32, 228, 29, 3, 137, 3, 225, 166, 87, 64, 18, - 10, 32, 228, 29, 3, 137, 3, 225, 166, 87, 46, 18, 10, 32, 228, 29, 3, - 137, 3, 237, 128, 87, 64, 18, 10, 32, 228, 29, 3, 137, 3, 237, 128, 87, - 46, 18, 10, 32, 228, 29, 3, 137, 3, 237, 128, 248, 126, 64, 18, 10, 32, - 228, 29, 3, 137, 3, 237, 128, 248, 126, 46, 18, 10, 32, 228, 29, 3, 137, - 64, 18, 10, 32, 228, 29, 3, 137, 46, 18, 202, 85, 204, 24, 221, 190, 211, - 228, 154, 240, 212, 82, 154, 217, 31, 82, 154, 42, 54, 154, 243, 97, 54, - 154, 218, 246, 54, 154, 250, 235, 154, 250, 160, 154, 49, 219, 76, 154, - 50, 219, 76, 154, 250, 59, 154, 91, 54, 154, 245, 233, 154, 235, 219, - 154, 239, 102, 211, 61, 154, 212, 0, 154, 17, 202, 84, 154, 17, 105, 154, - 17, 108, 154, 17, 147, 154, 17, 149, 154, 17, 170, 154, 17, 195, 154, 17, - 213, 111, 154, 17, 199, 154, 17, 222, 63, 154, 245, 242, 154, 213, 143, - 154, 227, 179, 54, 154, 241, 35, 54, 154, 237, 247, 54, 154, 217, 47, 82, - 154, 245, 231, 250, 49, 154, 8, 6, 1, 63, 154, 8, 6, 1, 249, 255, 154, 8, - 6, 1, 247, 125, 154, 8, 6, 1, 245, 51, 154, 8, 6, 1, 74, 154, 8, 6, 1, - 240, 174, 154, 8, 6, 1, 239, 75, 154, 8, 6, 1, 237, 171, 154, 8, 6, 1, - 75, 154, 8, 6, 1, 230, 184, 154, 8, 6, 1, 230, 54, 154, 8, 6, 1, 159, - 154, 8, 6, 1, 226, 185, 154, 8, 6, 1, 223, 163, 154, 8, 6, 1, 78, 154, 8, - 6, 1, 219, 184, 154, 8, 6, 1, 217, 134, 154, 8, 6, 1, 146, 154, 8, 6, 1, - 194, 154, 8, 6, 1, 210, 69, 154, 8, 6, 1, 68, 154, 8, 6, 1, 206, 164, - 154, 8, 6, 1, 204, 144, 154, 8, 6, 1, 203, 196, 154, 8, 6, 1, 203, 124, - 154, 8, 6, 1, 202, 159, 154, 49, 51, 155, 154, 216, 74, 212, 0, 154, 50, - 51, 155, 154, 246, 53, 251, 138, 154, 124, 227, 114, 154, 237, 254, 251, - 138, 154, 8, 5, 1, 63, 154, 8, 5, 1, 249, 255, 154, 8, 5, 1, 247, 125, - 154, 8, 5, 1, 245, 51, 154, 8, 5, 1, 74, 154, 8, 5, 1, 240, 174, 154, 8, - 5, 1, 239, 75, 154, 8, 5, 1, 237, 171, 154, 8, 5, 1, 75, 154, 8, 5, 1, - 230, 184, 154, 8, 5, 1, 230, 54, 154, 8, 5, 1, 159, 154, 8, 5, 1, 226, - 185, 154, 8, 5, 1, 223, 163, 154, 8, 5, 1, 78, 154, 8, 5, 1, 219, 184, - 154, 8, 5, 1, 217, 134, 154, 8, 5, 1, 146, 154, 8, 5, 1, 194, 154, 8, 5, - 1, 210, 69, 154, 8, 5, 1, 68, 154, 8, 5, 1, 206, 164, 154, 8, 5, 1, 204, - 144, 154, 8, 5, 1, 203, 196, 154, 8, 5, 1, 203, 124, 154, 8, 5, 1, 202, - 159, 154, 49, 245, 93, 155, 154, 80, 227, 114, 154, 50, 245, 93, 155, - 154, 208, 227, 154, 49, 61, 219, 76, 154, 50, 61, 219, 76, 127, 139, 239, - 102, 211, 61, 127, 49, 245, 166, 155, 127, 50, 245, 166, 155, 127, 139, - 245, 233, 127, 67, 101, 243, 85, 127, 67, 1, 204, 0, 127, 67, 1, 5, 63, - 127, 67, 1, 5, 75, 127, 67, 1, 5, 68, 127, 67, 1, 5, 74, 127, 67, 1, 5, - 78, 127, 67, 1, 5, 198, 127, 67, 1, 5, 202, 213, 127, 67, 1, 5, 202, 247, - 127, 67, 1, 5, 207, 203, 127, 229, 225, 217, 215, 211, 241, 82, 127, 67, - 1, 63, 127, 67, 1, 75, 127, 67, 1, 68, 127, 67, 1, 74, 127, 67, 1, 78, - 127, 67, 1, 173, 127, 67, 1, 229, 100, 127, 67, 1, 228, 209, 127, 67, 1, - 229, 201, 127, 67, 1, 229, 26, 127, 67, 1, 215, 36, 127, 67, 1, 212, 162, - 127, 67, 1, 211, 10, 127, 67, 1, 214, 177, 127, 67, 1, 212, 13, 127, 67, - 1, 210, 22, 127, 67, 1, 209, 2, 127, 67, 1, 207, 203, 127, 67, 1, 209, - 187, 127, 67, 1, 135, 127, 67, 1, 201, 201, 127, 67, 1, 222, 100, 127, - 67, 1, 221, 84, 127, 67, 1, 222, 240, 127, 67, 1, 221, 191, 127, 67, 1, - 152, 127, 67, 1, 237, 3, 127, 67, 1, 236, 26, 127, 67, 1, 237, 67, 127, - 67, 1, 236, 136, 127, 67, 1, 192, 127, 67, 1, 224, 155, 127, 67, 1, 223, - 246, 127, 67, 1, 225, 20, 127, 67, 1, 224, 82, 127, 67, 1, 198, 127, 67, - 1, 202, 213, 127, 67, 1, 202, 247, 127, 67, 1, 216, 220, 127, 67, 1, 216, - 57, 127, 67, 1, 215, 145, 127, 67, 1, 216, 158, 127, 67, 1, 215, 227, - 127, 67, 1, 204, 111, 127, 67, 1, 223, 163, 127, 67, 205, 186, 211, 241, - 82, 127, 67, 213, 148, 211, 241, 82, 127, 28, 240, 7, 127, 28, 1, 229, - 59, 127, 28, 1, 211, 156, 127, 28, 1, 229, 52, 127, 28, 1, 222, 93, 127, - 28, 1, 222, 91, 127, 28, 1, 222, 90, 127, 28, 1, 208, 240, 127, 28, 1, - 211, 145, 127, 28, 1, 216, 47, 127, 28, 1, 216, 42, 127, 28, 1, 216, 39, - 127, 28, 1, 216, 32, 127, 28, 1, 216, 27, 127, 28, 1, 216, 22, 127, 28, - 1, 216, 33, 127, 28, 1, 216, 45, 127, 28, 1, 224, 141, 127, 28, 1, 218, - 153, 127, 28, 1, 211, 153, 127, 28, 1, 218, 142, 127, 28, 1, 212, 111, - 127, 28, 1, 211, 150, 127, 28, 1, 231, 106, 127, 28, 1, 246, 74, 127, 28, - 1, 211, 160, 127, 28, 1, 246, 138, 127, 28, 1, 229, 120, 127, 28, 1, 209, - 66, 127, 28, 1, 218, 190, 127, 28, 1, 236, 251, 127, 28, 1, 63, 127, 28, - 1, 251, 109, 127, 28, 1, 198, 127, 28, 1, 203, 99, 127, 28, 1, 241, 55, - 127, 28, 1, 74, 127, 28, 1, 203, 39, 127, 28, 1, 203, 52, 127, 28, 1, 78, - 127, 28, 1, 204, 111, 127, 28, 1, 204, 107, 127, 28, 1, 220, 73, 127, 28, - 1, 202, 247, 127, 28, 1, 68, 127, 28, 1, 204, 48, 127, 28, 1, 204, 62, - 127, 28, 1, 204, 30, 127, 28, 1, 202, 213, 127, 28, 1, 240, 238, 127, 28, - 1, 203, 11, 127, 28, 1, 75, 154, 246, 220, 54, 154, 218, 20, 54, 154, - 221, 166, 54, 154, 225, 170, 154, 247, 203, 142, 154, 203, 43, 54, 154, - 203, 246, 54, 127, 239, 156, 157, 206, 38, 127, 96, 47, 127, 177, 47, - 127, 86, 47, 127, 183, 47, 127, 62, 211, 177, 127, 61, 246, 61, 230, 251, - 250, 205, 250, 228, 230, 251, 250, 205, 213, 130, 230, 251, 250, 205, - 209, 138, 220, 90, 216, 96, 246, 182, 216, 96, 246, 182, 29, 66, 4, 249, - 239, 63, 29, 66, 4, 249, 208, 74, 29, 66, 4, 249, 217, 75, 29, 66, 4, - 249, 185, 78, 29, 66, 4, 249, 235, 68, 29, 66, 4, 249, 254, 244, 212, 29, - 66, 4, 249, 201, 244, 75, 29, 66, 4, 249, 241, 243, 233, 29, 66, 4, 249, - 231, 243, 113, 29, 66, 4, 249, 195, 242, 42, 29, 66, 4, 249, 189, 230, - 181, 29, 66, 4, 249, 200, 230, 161, 29, 66, 4, 249, 210, 230, 101, 29, - 66, 4, 249, 181, 230, 82, 29, 66, 4, 249, 169, 173, 29, 66, 4, 249, 202, - 229, 201, 29, 66, 4, 249, 179, 229, 100, 29, 66, 4, 249, 176, 229, 26, - 29, 66, 4, 249, 165, 228, 209, 29, 66, 4, 249, 166, 192, 29, 66, 4, 249, - 232, 225, 20, 29, 66, 4, 249, 173, 224, 155, 29, 66, 4, 249, 230, 224, - 82, 29, 66, 4, 249, 222, 223, 246, 29, 66, 4, 249, 243, 201, 201, 29, 66, - 4, 249, 221, 222, 240, 29, 66, 4, 249, 215, 222, 100, 29, 66, 4, 249, - 194, 221, 191, 29, 66, 4, 249, 191, 221, 84, 29, 66, 4, 249, 250, 185, - 29, 66, 4, 249, 174, 219, 34, 29, 66, 4, 249, 207, 218, 167, 29, 66, 4, - 249, 234, 218, 69, 29, 66, 4, 249, 196, 217, 191, 29, 66, 4, 249, 229, - 217, 126, 29, 66, 4, 249, 168, 217, 106, 29, 66, 4, 249, 224, 217, 88, - 29, 66, 4, 249, 213, 217, 77, 29, 66, 4, 249, 186, 216, 220, 29, 66, 4, - 249, 218, 216, 158, 29, 66, 4, 249, 193, 216, 57, 29, 66, 4, 249, 252, - 215, 227, 29, 66, 4, 249, 219, 215, 145, 29, 66, 4, 249, 214, 215, 36, - 29, 66, 4, 249, 237, 214, 177, 29, 66, 4, 249, 205, 212, 162, 29, 66, 4, - 249, 233, 212, 13, 29, 66, 4, 249, 188, 211, 10, 29, 66, 4, 249, 187, - 210, 22, 29, 66, 4, 249, 248, 209, 187, 29, 66, 4, 249, 209, 209, 2, 29, - 66, 4, 249, 246, 135, 29, 66, 4, 249, 177, 207, 203, 29, 66, 4, 249, 192, - 204, 111, 29, 66, 4, 249, 171, 204, 62, 29, 66, 4, 249, 206, 204, 30, 29, - 66, 4, 249, 204, 204, 0, 29, 66, 4, 249, 228, 202, 116, 29, 66, 4, 249, - 172, 202, 92, 29, 66, 4, 249, 225, 202, 17, 29, 66, 4, 249, 220, 254, 34, - 29, 66, 4, 249, 203, 253, 178, 29, 66, 4, 249, 162, 250, 34, 29, 66, 4, - 249, 175, 242, 9, 29, 66, 4, 249, 158, 242, 8, 29, 66, 4, 249, 198, 221, - 20, 29, 66, 4, 249, 216, 217, 189, 29, 66, 4, 249, 184, 217, 193, 29, 66, - 4, 249, 170, 216, 218, 29, 66, 4, 249, 212, 216, 217, 29, 66, 4, 249, - 178, 215, 226, 29, 66, 4, 249, 180, 210, 19, 29, 66, 4, 249, 160, 207, - 158, 29, 66, 4, 249, 157, 108, 29, 66, 16, 249, 227, 29, 66, 16, 249, - 226, 29, 66, 16, 249, 223, 29, 66, 16, 249, 211, 29, 66, 16, 249, 199, - 29, 66, 16, 249, 197, 29, 66, 16, 249, 190, 29, 66, 16, 249, 183, 29, 66, - 16, 249, 182, 29, 66, 16, 249, 167, 29, 66, 16, 249, 164, 29, 66, 16, - 249, 163, 29, 66, 16, 249, 161, 29, 66, 16, 249, 159, 29, 66, 133, 249, - 156, 225, 122, 29, 66, 133, 249, 155, 203, 250, 29, 66, 133, 249, 154, - 244, 58, 29, 66, 133, 249, 153, 241, 32, 29, 66, 133, 249, 152, 225, 93, - 29, 66, 133, 249, 151, 211, 101, 29, 66, 133, 249, 150, 240, 219, 29, 66, - 133, 249, 149, 216, 184, 29, 66, 133, 249, 148, 213, 42, 29, 66, 133, - 249, 147, 237, 66, 29, 66, 133, 249, 146, 211, 235, 29, 66, 133, 249, - 145, 248, 21, 29, 66, 133, 249, 144, 245, 149, 29, 66, 133, 249, 143, - 247, 179, 29, 66, 133, 249, 142, 204, 38, 29, 66, 133, 249, 141, 248, - 227, 29, 66, 133, 249, 140, 220, 41, 29, 66, 133, 249, 139, 211, 207, 29, - 66, 133, 249, 138, 245, 59, 29, 66, 224, 45, 249, 137, 229, 249, 29, 66, - 224, 45, 249, 136, 230, 2, 29, 66, 133, 249, 135, 220, 55, 29, 66, 133, - 249, 134, 204, 12, 29, 66, 133, 249, 133, 29, 66, 224, 45, 249, 132, 250, - 119, 29, 66, 224, 45, 249, 131, 224, 232, 29, 66, 133, 249, 130, 247, - 202, 29, 66, 133, 249, 129, 238, 31, 29, 66, 133, 249, 128, 29, 66, 133, - 249, 127, 203, 241, 29, 66, 133, 249, 126, 29, 66, 133, 249, 125, 29, 66, - 133, 249, 124, 236, 53, 29, 66, 133, 249, 123, 29, 66, 133, 249, 122, 29, - 66, 133, 249, 121, 29, 66, 224, 45, 249, 119, 207, 172, 29, 66, 133, 249, - 118, 29, 66, 133, 249, 117, 29, 66, 133, 249, 116, 246, 10, 29, 66, 133, - 249, 115, 29, 66, 133, 249, 114, 29, 66, 133, 249, 113, 238, 221, 29, 66, - 133, 249, 112, 250, 106, 29, 66, 133, 249, 111, 29, 66, 133, 249, 110, - 29, 66, 133, 249, 109, 29, 66, 133, 249, 108, 29, 66, 133, 249, 107, 29, - 66, 133, 249, 106, 29, 66, 133, 249, 105, 29, 66, 133, 249, 104, 29, 66, - 133, 249, 103, 29, 66, 133, 249, 102, 224, 37, 29, 66, 133, 249, 101, 29, - 66, 133, 249, 100, 208, 95, 29, 66, 133, 249, 99, 29, 66, 133, 249, 98, - 29, 66, 133, 249, 97, 29, 66, 133, 249, 96, 29, 66, 133, 249, 95, 29, 66, - 133, 249, 94, 29, 66, 133, 249, 93, 29, 66, 133, 249, 92, 29, 66, 133, - 249, 91, 29, 66, 133, 249, 90, 29, 66, 133, 249, 89, 29, 66, 133, 249, - 88, 237, 35, 29, 66, 133, 249, 67, 239, 168, 29, 66, 133, 249, 64, 248, - 204, 29, 66, 133, 249, 59, 211, 214, 29, 66, 133, 249, 58, 47, 29, 66, - 133, 249, 57, 29, 66, 133, 249, 56, 210, 155, 29, 66, 133, 249, 55, 29, - 66, 133, 249, 54, 29, 66, 133, 249, 53, 204, 34, 246, 179, 29, 66, 133, - 249, 52, 246, 179, 29, 66, 133, 249, 51, 246, 180, 239, 134, 29, 66, 133, - 249, 50, 204, 36, 29, 66, 133, 249, 49, 29, 66, 133, 249, 48, 29, 66, - 224, 45, 249, 47, 243, 168, 29, 66, 133, 249, 46, 29, 66, 133, 249, 45, - 29, 66, 133, 249, 43, 29, 66, 133, 249, 42, 29, 66, 133, 249, 41, 29, 66, - 133, 249, 40, 244, 147, 29, 66, 133, 249, 39, 29, 66, 133, 249, 38, 29, - 66, 133, 249, 37, 29, 66, 133, 249, 36, 29, 66, 133, 249, 35, 29, 66, - 133, 205, 241, 249, 120, 29, 66, 133, 205, 241, 249, 87, 29, 66, 133, - 205, 241, 249, 86, 29, 66, 133, 205, 241, 249, 85, 29, 66, 133, 205, 241, - 249, 84, 29, 66, 133, 205, 241, 249, 83, 29, 66, 133, 205, 241, 249, 82, - 29, 66, 133, 205, 241, 249, 81, 29, 66, 133, 205, 241, 249, 80, 29, 66, - 133, 205, 241, 249, 79, 29, 66, 133, 205, 241, 249, 78, 29, 66, 133, 205, - 241, 249, 77, 29, 66, 133, 205, 241, 249, 76, 29, 66, 133, 205, 241, 249, - 75, 29, 66, 133, 205, 241, 249, 74, 29, 66, 133, 205, 241, 249, 73, 29, - 66, 133, 205, 241, 249, 72, 29, 66, 133, 205, 241, 249, 71, 29, 66, 133, - 205, 241, 249, 70, 29, 66, 133, 205, 241, 249, 69, 29, 66, 133, 205, 241, - 249, 68, 29, 66, 133, 205, 241, 249, 66, 29, 66, 133, 205, 241, 249, 65, - 29, 66, 133, 205, 241, 249, 63, 29, 66, 133, 205, 241, 249, 62, 29, 66, - 133, 205, 241, 249, 61, 29, 66, 133, 205, 241, 249, 60, 29, 66, 133, 205, - 241, 249, 44, 29, 66, 133, 205, 241, 249, 34, 251, 102, 203, 238, 213, - 131, 227, 114, 251, 102, 203, 238, 213, 131, 243, 85, 251, 102, 246, 169, - 82, 251, 102, 42, 105, 251, 102, 42, 108, 251, 102, 42, 147, 251, 102, - 42, 149, 251, 102, 42, 170, 251, 102, 42, 195, 251, 102, 42, 213, 111, - 251, 102, 42, 199, 251, 102, 42, 222, 63, 251, 102, 42, 209, 152, 251, - 102, 42, 207, 151, 251, 102, 42, 209, 53, 251, 102, 42, 239, 153, 251, - 102, 42, 240, 18, 251, 102, 42, 212, 74, 251, 102, 42, 213, 105, 251, - 102, 42, 241, 134, 251, 102, 42, 222, 58, 251, 102, 42, 118, 236, 11, - 251, 102, 42, 120, 236, 11, 251, 102, 42, 126, 236, 11, 251, 102, 42, - 239, 147, 236, 11, 251, 102, 42, 239, 233, 236, 11, 251, 102, 42, 212, - 88, 236, 11, 251, 102, 42, 213, 112, 236, 11, 251, 102, 42, 241, 143, - 236, 11, 251, 102, 42, 222, 64, 236, 11, 251, 102, 42, 118, 209, 36, 251, - 102, 42, 120, 209, 36, 251, 102, 42, 126, 209, 36, 251, 102, 42, 239, - 147, 209, 36, 251, 102, 42, 239, 233, 209, 36, 251, 102, 42, 212, 88, - 209, 36, 251, 102, 42, 213, 112, 209, 36, 251, 102, 42, 241, 143, 209, - 36, 251, 102, 42, 222, 64, 209, 36, 251, 102, 42, 209, 153, 209, 36, 251, - 102, 42, 207, 152, 209, 36, 251, 102, 42, 209, 54, 209, 36, 251, 102, 42, - 239, 154, 209, 36, 251, 102, 42, 240, 19, 209, 36, 251, 102, 42, 212, 75, - 209, 36, 251, 102, 42, 213, 106, 209, 36, 251, 102, 42, 241, 135, 209, - 36, 251, 102, 42, 222, 59, 209, 36, 251, 102, 204, 51, 248, 219, 206, - 235, 251, 102, 204, 51, 239, 245, 210, 240, 251, 102, 204, 51, 214, 171, - 210, 240, 251, 102, 204, 51, 209, 61, 210, 240, 251, 102, 204, 51, 239, - 140, 210, 240, 251, 102, 242, 45, 225, 19, 239, 245, 210, 240, 251, 102, - 227, 95, 225, 19, 239, 245, 210, 240, 251, 102, 225, 19, 214, 171, 210, - 240, 251, 102, 225, 19, 209, 61, 210, 240, 30, 251, 129, 250, 36, 118, - 217, 55, 30, 251, 129, 250, 36, 118, 237, 137, 30, 251, 129, 250, 36, - 118, 242, 65, 30, 251, 129, 250, 36, 170, 30, 251, 129, 250, 36, 240, 18, - 30, 251, 129, 250, 36, 239, 233, 236, 11, 30, 251, 129, 250, 36, 239, - 233, 209, 36, 30, 251, 129, 250, 36, 240, 19, 209, 36, 30, 251, 129, 250, - 36, 239, 233, 209, 237, 30, 251, 129, 250, 36, 209, 153, 209, 237, 30, - 251, 129, 250, 36, 240, 19, 209, 237, 30, 251, 129, 250, 36, 118, 236, - 12, 209, 237, 30, 251, 129, 250, 36, 239, 233, 236, 12, 209, 237, 30, - 251, 129, 250, 36, 118, 209, 37, 209, 237, 30, 251, 129, 250, 36, 239, - 233, 209, 37, 209, 237, 30, 251, 129, 250, 36, 239, 233, 211, 88, 30, - 251, 129, 250, 36, 209, 153, 211, 88, 30, 251, 129, 250, 36, 240, 19, - 211, 88, 30, 251, 129, 250, 36, 118, 236, 12, 211, 88, 30, 251, 129, 250, - 36, 239, 233, 236, 12, 211, 88, 30, 251, 129, 250, 36, 118, 209, 37, 211, - 88, 30, 251, 129, 250, 36, 209, 153, 209, 37, 211, 88, 30, 251, 129, 250, - 36, 240, 19, 209, 37, 211, 88, 30, 251, 129, 250, 36, 209, 153, 224, 85, - 30, 251, 129, 237, 29, 118, 218, 86, 30, 251, 129, 209, 76, 105, 30, 251, - 129, 237, 25, 105, 30, 251, 129, 241, 41, 108, 30, 251, 129, 209, 76, - 108, 30, 251, 129, 245, 56, 120, 242, 64, 30, 251, 129, 241, 41, 120, - 242, 64, 30, 251, 129, 208, 61, 170, 30, 251, 129, 208, 61, 209, 152, 30, - 251, 129, 208, 61, 209, 153, 250, 255, 18, 30, 251, 129, 237, 25, 209, - 152, 30, 251, 129, 224, 222, 209, 152, 30, 251, 129, 209, 76, 209, 152, - 30, 251, 129, 209, 76, 209, 53, 30, 251, 129, 208, 61, 240, 18, 30, 251, - 129, 208, 61, 240, 19, 250, 255, 18, 30, 251, 129, 237, 25, 240, 18, 30, - 251, 129, 209, 76, 240, 18, 30, 251, 129, 209, 76, 118, 236, 11, 30, 251, - 129, 209, 76, 126, 236, 11, 30, 251, 129, 241, 41, 239, 233, 236, 11, 30, - 251, 129, 208, 61, 239, 233, 236, 11, 30, 251, 129, 209, 76, 239, 233, - 236, 11, 30, 251, 129, 247, 21, 239, 233, 236, 11, 30, 251, 129, 223, 60, - 239, 233, 236, 11, 30, 251, 129, 209, 76, 118, 209, 36, 30, 251, 129, - 209, 76, 239, 233, 209, 36, 30, 251, 129, 244, 40, 239, 233, 224, 85, 30, - 251, 129, 211, 49, 240, 19, 224, 85, 30, 118, 162, 54, 30, 118, 162, 2, - 250, 255, 18, 30, 120, 209, 58, 54, 30, 126, 217, 54, 54, 30, 203, 50, - 54, 30, 209, 238, 54, 30, 242, 66, 54, 30, 220, 87, 54, 30, 120, 220, 86, - 54, 30, 126, 220, 86, 54, 30, 239, 147, 220, 86, 54, 30, 239, 233, 220, - 86, 54, 30, 224, 216, 54, 30, 228, 139, 248, 219, 54, 30, 227, 88, 54, - 30, 219, 213, 54, 30, 203, 173, 54, 30, 250, 87, 54, 30, 250, 102, 54, - 30, 238, 7, 54, 30, 208, 23, 248, 219, 54, 30, 202, 85, 54, 30, 118, 217, - 56, 54, 30, 212, 113, 54, 215, 210, 213, 102, 54, 215, 210, 206, 249, 54, - 215, 210, 213, 135, 54, 215, 210, 213, 100, 54, 215, 210, 243, 183, 213, - 100, 54, 215, 210, 212, 135, 54, 215, 210, 244, 36, 54, 215, 210, 217, - 39, 54, 215, 210, 213, 119, 54, 215, 210, 242, 23, 54, 215, 210, 250, 82, - 54, 215, 210, 246, 213, 54, 30, 16, 209, 208, 216, 59, 218, 203, 243, - 160, 2, 219, 25, 218, 203, 243, 160, 2, 218, 78, 237, 64, 218, 203, 243, - 160, 2, 209, 211, 237, 64, 218, 203, 243, 160, 2, 247, 42, 218, 203, 243, - 160, 2, 246, 133, 218, 203, 243, 160, 2, 203, 250, 218, 203, 243, 160, 2, - 237, 35, 218, 203, 243, 160, 2, 238, 213, 218, 203, 243, 160, 2, 209, 0, - 218, 203, 243, 160, 2, 47, 218, 203, 243, 160, 2, 247, 240, 218, 203, - 243, 160, 2, 213, 8, 218, 203, 243, 160, 2, 246, 4, 218, 203, 243, 160, - 2, 225, 121, 218, 203, 243, 160, 2, 225, 68, 218, 203, 243, 160, 2, 214, - 213, 218, 203, 243, 160, 2, 227, 143, 218, 203, 243, 160, 2, 248, 5, 218, - 203, 243, 160, 2, 247, 26, 218, 91, 218, 203, 243, 160, 2, 243, 98, 218, - 203, 243, 160, 2, 245, 239, 218, 203, 243, 160, 2, 212, 46, 218, 203, - 243, 160, 2, 245, 240, 218, 203, 243, 160, 2, 248, 147, 218, 203, 243, - 160, 2, 212, 251, 218, 203, 243, 160, 2, 236, 53, 218, 203, 243, 160, 2, - 237, 1, 218, 203, 243, 160, 2, 247, 174, 227, 210, 218, 203, 243, 160, 2, - 247, 17, 218, 203, 243, 160, 2, 216, 184, 218, 203, 243, 160, 2, 241, - 186, 218, 203, 243, 160, 2, 242, 71, 218, 203, 243, 160, 2, 207, 188, - 218, 203, 243, 160, 2, 248, 150, 218, 203, 243, 160, 2, 218, 92, 208, 95, - 218, 203, 243, 160, 2, 205, 211, 218, 203, 243, 160, 2, 219, 92, 218, - 203, 243, 160, 2, 215, 201, 218, 203, 243, 160, 2, 227, 127, 218, 203, - 243, 160, 2, 219, 194, 249, 25, 218, 203, 243, 160, 2, 239, 193, 218, - 203, 243, 160, 2, 237, 255, 218, 203, 243, 160, 2, 211, 50, 218, 203, - 243, 160, 2, 5, 250, 9, 218, 203, 243, 160, 2, 204, 72, 248, 238, 218, - 203, 243, 160, 2, 39, 220, 89, 95, 226, 197, 1, 63, 226, 197, 1, 74, 226, - 197, 1, 249, 255, 226, 197, 1, 248, 99, 226, 197, 1, 239, 75, 226, 197, - 1, 245, 51, 226, 197, 1, 75, 226, 197, 1, 204, 144, 226, 197, 1, 202, - 159, 226, 197, 1, 209, 110, 226, 197, 1, 230, 184, 226, 197, 1, 230, 54, - 226, 197, 1, 217, 134, 226, 197, 1, 159, 226, 197, 1, 226, 185, 226, 197, - 1, 223, 163, 226, 197, 1, 224, 87, 226, 197, 1, 221, 228, 226, 197, 1, - 68, 226, 197, 1, 219, 184, 226, 197, 1, 229, 48, 226, 197, 1, 146, 226, - 197, 1, 194, 226, 197, 1, 210, 69, 226, 197, 1, 207, 244, 226, 197, 1, - 250, 231, 226, 197, 1, 241, 92, 226, 197, 1, 237, 171, 226, 197, 1, 203, - 196, 247, 32, 1, 63, 247, 32, 1, 219, 170, 247, 32, 1, 245, 51, 247, 32, - 1, 159, 247, 32, 1, 206, 176, 247, 32, 1, 146, 247, 32, 1, 227, 238, 247, - 32, 1, 254, 34, 247, 32, 1, 217, 134, 247, 32, 1, 249, 255, 247, 32, 1, - 226, 185, 247, 32, 1, 78, 247, 32, 1, 244, 214, 247, 32, 1, 210, 69, 247, - 32, 1, 213, 92, 247, 32, 1, 213, 91, 247, 32, 1, 194, 247, 32, 1, 247, - 124, 247, 32, 1, 68, 247, 32, 1, 221, 228, 247, 32, 1, 203, 196, 247, 32, - 1, 223, 163, 247, 32, 1, 207, 243, 247, 32, 1, 219, 184, 247, 32, 1, 211, - 167, 247, 32, 1, 75, 247, 32, 1, 74, 247, 32, 1, 206, 173, 247, 32, 1, - 230, 54, 247, 32, 1, 230, 45, 247, 32, 1, 223, 27, 247, 32, 1, 206, 178, - 247, 32, 1, 239, 75, 247, 32, 1, 239, 10, 247, 32, 1, 211, 108, 247, 32, - 1, 211, 107, 247, 32, 1, 222, 205, 247, 32, 1, 231, 83, 247, 32, 1, 247, - 123, 247, 32, 1, 207, 244, 247, 32, 1, 206, 175, 247, 32, 1, 215, 186, - 247, 32, 1, 225, 59, 247, 32, 1, 225, 58, 247, 32, 1, 225, 57, 247, 32, - 1, 225, 56, 247, 32, 1, 227, 237, 247, 32, 1, 241, 190, 247, 32, 1, 206, - 174, 84, 241, 44, 209, 35, 82, 84, 241, 44, 17, 105, 84, 241, 44, 17, - 108, 84, 241, 44, 17, 147, 84, 241, 44, 17, 149, 84, 241, 44, 17, 170, - 84, 241, 44, 17, 195, 84, 241, 44, 17, 213, 111, 84, 241, 44, 17, 199, - 84, 241, 44, 17, 222, 63, 84, 241, 44, 42, 209, 152, 84, 241, 44, 42, - 207, 151, 84, 241, 44, 42, 209, 53, 84, 241, 44, 42, 239, 153, 84, 241, - 44, 42, 240, 18, 84, 241, 44, 42, 212, 74, 84, 241, 44, 42, 213, 105, 84, - 241, 44, 42, 241, 134, 84, 241, 44, 42, 222, 58, 84, 241, 44, 42, 118, - 236, 11, 84, 241, 44, 42, 120, 236, 11, 84, 241, 44, 42, 126, 236, 11, - 84, 241, 44, 42, 239, 147, 236, 11, 84, 241, 44, 42, 239, 233, 236, 11, - 84, 241, 44, 42, 212, 88, 236, 11, 84, 241, 44, 42, 213, 112, 236, 11, - 84, 241, 44, 42, 241, 143, 236, 11, 84, 241, 44, 42, 222, 64, 236, 11, - 38, 37, 1, 63, 38, 37, 1, 248, 162, 38, 37, 1, 229, 201, 38, 37, 1, 244, - 75, 38, 37, 1, 74, 38, 37, 1, 206, 55, 38, 37, 1, 202, 92, 38, 37, 1, - 237, 67, 38, 37, 1, 209, 92, 38, 37, 1, 75, 38, 37, 1, 173, 38, 37, 1, - 241, 122, 38, 37, 1, 241, 103, 38, 37, 1, 241, 92, 38, 37, 1, 241, 7, 38, - 37, 1, 78, 38, 37, 1, 219, 34, 38, 37, 1, 213, 43, 38, 37, 1, 228, 209, - 38, 37, 1, 241, 28, 38, 37, 1, 241, 17, 38, 37, 1, 209, 187, 38, 37, 1, - 68, 38, 37, 1, 241, 125, 38, 37, 1, 218, 195, 38, 37, 1, 229, 129, 38, - 37, 1, 241, 154, 38, 37, 1, 241, 19, 38, 37, 1, 246, 170, 38, 37, 1, 231, - 83, 38, 37, 1, 206, 178, 38, 37, 1, 241, 0, 38, 37, 221, 44, 105, 38, 37, - 221, 44, 170, 38, 37, 221, 44, 209, 152, 38, 37, 221, 44, 240, 18, 238, - 17, 1, 251, 67, 238, 17, 1, 248, 255, 238, 17, 1, 238, 78, 238, 17, 1, - 244, 194, 238, 17, 1, 251, 63, 238, 17, 1, 217, 117, 238, 17, 1, 230, - 196, 238, 17, 1, 237, 150, 238, 17, 1, 209, 49, 238, 17, 1, 241, 133, - 238, 17, 1, 228, 176, 238, 17, 1, 228, 90, 238, 17, 1, 225, 114, 238, 17, - 1, 223, 62, 238, 17, 1, 230, 154, 238, 17, 1, 206, 196, 238, 17, 1, 219, - 145, 238, 17, 1, 222, 58, 238, 17, 1, 216, 196, 238, 17, 1, 214, 216, - 238, 17, 1, 209, 166, 238, 17, 1, 204, 10, 238, 17, 1, 240, 88, 238, 17, - 1, 231, 87, 238, 17, 1, 235, 252, 238, 17, 1, 219, 223, 238, 17, 1, 222, - 64, 236, 11, 38, 218, 237, 1, 250, 231, 38, 218, 237, 1, 247, 160, 38, - 218, 237, 1, 238, 248, 38, 218, 237, 1, 243, 101, 38, 218, 237, 1, 74, - 38, 218, 237, 1, 202, 62, 38, 218, 237, 1, 241, 247, 38, 218, 237, 1, - 202, 99, 38, 218, 237, 1, 241, 245, 38, 218, 237, 1, 75, 38, 218, 237, 1, - 229, 15, 38, 218, 237, 1, 227, 206, 38, 218, 237, 1, 224, 238, 38, 218, - 237, 1, 222, 228, 38, 218, 237, 1, 205, 175, 38, 218, 237, 1, 219, 22, - 38, 218, 237, 1, 216, 121, 38, 218, 237, 1, 212, 142, 38, 218, 237, 1, - 209, 250, 38, 218, 237, 1, 68, 38, 218, 237, 1, 246, 151, 38, 218, 237, - 1, 212, 235, 38, 218, 237, 1, 213, 45, 38, 218, 237, 1, 202, 215, 38, - 218, 237, 1, 203, 30, 38, 218, 237, 1, 78, 38, 218, 237, 1, 220, 18, 38, - 218, 237, 1, 241, 154, 38, 218, 237, 1, 152, 38, 218, 237, 1, 207, 254, - 38, 218, 237, 1, 206, 43, 38, 218, 237, 1, 203, 34, 38, 218, 237, 1, 203, - 32, 38, 218, 237, 1, 203, 66, 38, 218, 237, 1, 231, 110, 38, 218, 237, 1, - 202, 213, 38, 218, 237, 1, 198, 38, 218, 237, 1, 235, 171, 39, 38, 218, - 237, 1, 250, 231, 39, 38, 218, 237, 1, 243, 101, 39, 38, 218, 237, 1, - 202, 99, 39, 38, 218, 237, 1, 222, 228, 39, 38, 218, 237, 1, 212, 142, - 207, 19, 1, 251, 6, 207, 19, 1, 248, 106, 207, 19, 1, 238, 236, 207, 19, - 1, 229, 144, 207, 19, 1, 244, 37, 207, 19, 1, 236, 136, 207, 19, 1, 204, - 0, 207, 19, 1, 202, 83, 207, 19, 1, 236, 45, 207, 19, 1, 209, 132, 207, - 19, 1, 202, 236, 207, 19, 1, 230, 22, 207, 19, 1, 212, 255, 207, 19, 1, - 228, 24, 207, 19, 1, 224, 247, 207, 19, 1, 243, 253, 207, 19, 1, 221, 40, - 207, 19, 1, 202, 6, 207, 19, 1, 214, 248, 207, 19, 1, 251, 59, 207, 19, - 1, 217, 191, 207, 19, 1, 215, 27, 207, 19, 1, 217, 70, 207, 19, 1, 216, - 175, 207, 19, 1, 209, 96, 207, 19, 1, 238, 114, 207, 19, 1, 135, 207, 19, - 1, 75, 207, 19, 1, 68, 207, 19, 1, 211, 119, 207, 19, 203, 238, 243, 141, - 38, 218, 231, 2, 63, 38, 218, 231, 2, 75, 38, 218, 231, 2, 68, 38, 218, - 231, 2, 173, 38, 218, 231, 2, 228, 209, 38, 218, 231, 2, 239, 8, 38, 218, - 231, 2, 237, 230, 38, 218, 231, 2, 203, 182, 38, 218, 231, 2, 247, 92, - 38, 218, 231, 2, 230, 181, 38, 218, 231, 2, 230, 141, 38, 218, 231, 2, - 210, 22, 38, 218, 231, 2, 207, 203, 38, 218, 231, 2, 244, 212, 38, 218, - 231, 2, 243, 233, 38, 218, 231, 2, 242, 42, 38, 218, 231, 2, 209, 108, - 38, 218, 231, 2, 185, 38, 218, 231, 2, 249, 32, 38, 218, 231, 2, 240, - 108, 38, 218, 231, 2, 201, 201, 38, 218, 231, 2, 221, 84, 38, 218, 231, - 2, 192, 38, 218, 231, 2, 224, 155, 38, 218, 231, 2, 223, 246, 38, 218, - 231, 2, 198, 38, 218, 231, 2, 206, 86, 38, 218, 231, 2, 205, 230, 38, - 218, 231, 2, 216, 220, 38, 218, 231, 2, 215, 145, 38, 218, 231, 2, 228, - 113, 38, 218, 231, 2, 215, 36, 38, 218, 231, 2, 202, 116, 38, 218, 231, - 2, 213, 90, 38, 218, 231, 2, 211, 164, 38, 218, 231, 2, 152, 38, 218, - 231, 2, 250, 28, 38, 218, 231, 2, 250, 27, 38, 218, 231, 2, 250, 26, 38, - 218, 231, 2, 203, 153, 38, 218, 231, 2, 244, 190, 38, 218, 231, 2, 244, - 189, 38, 218, 231, 2, 249, 8, 38, 218, 231, 2, 247, 144, 38, 218, 231, - 203, 238, 243, 141, 38, 218, 231, 42, 105, 38, 218, 231, 42, 108, 38, - 218, 231, 42, 209, 152, 38, 218, 231, 42, 207, 151, 38, 218, 231, 42, - 236, 11, 244, 17, 6, 1, 163, 75, 244, 17, 6, 1, 163, 74, 244, 17, 6, 1, - 163, 63, 244, 17, 6, 1, 163, 251, 73, 244, 17, 6, 1, 163, 78, 244, 17, 6, - 1, 163, 220, 18, 244, 17, 6, 1, 212, 228, 75, 244, 17, 6, 1, 212, 228, - 74, 244, 17, 6, 1, 212, 228, 63, 244, 17, 6, 1, 212, 228, 251, 73, 244, - 17, 6, 1, 212, 228, 78, 244, 17, 6, 1, 212, 228, 220, 18, 244, 17, 6, 1, - 250, 8, 244, 17, 6, 1, 219, 195, 244, 17, 6, 1, 203, 217, 244, 17, 6, 1, - 203, 49, 244, 17, 6, 1, 237, 171, 244, 17, 6, 1, 219, 23, 244, 17, 6, 1, - 248, 150, 244, 17, 6, 1, 209, 176, 244, 17, 6, 1, 244, 61, 244, 17, 6, 1, - 246, 166, 244, 17, 6, 1, 230, 159, 244, 17, 6, 1, 229, 208, 244, 17, 6, - 1, 238, 211, 244, 17, 6, 1, 241, 154, 244, 17, 6, 1, 206, 50, 244, 17, 6, - 1, 240, 243, 244, 17, 6, 1, 209, 90, 244, 17, 6, 1, 241, 17, 244, 17, 6, - 1, 202, 90, 244, 17, 6, 1, 241, 7, 244, 17, 6, 1, 202, 70, 244, 17, 6, 1, - 241, 28, 244, 17, 6, 1, 241, 122, 244, 17, 6, 1, 241, 103, 244, 17, 6, 1, - 241, 92, 244, 17, 6, 1, 241, 78, 244, 17, 6, 1, 220, 57, 244, 17, 6, 1, - 240, 220, 244, 17, 5, 1, 163, 75, 244, 17, 5, 1, 163, 74, 244, 17, 5, 1, - 163, 63, 244, 17, 5, 1, 163, 251, 73, 244, 17, 5, 1, 163, 78, 244, 17, 5, - 1, 163, 220, 18, 244, 17, 5, 1, 212, 228, 75, 244, 17, 5, 1, 212, 228, - 74, 244, 17, 5, 1, 212, 228, 63, 244, 17, 5, 1, 212, 228, 251, 73, 244, - 17, 5, 1, 212, 228, 78, 244, 17, 5, 1, 212, 228, 220, 18, 244, 17, 5, 1, - 250, 8, 244, 17, 5, 1, 219, 195, 244, 17, 5, 1, 203, 217, 244, 17, 5, 1, - 203, 49, 244, 17, 5, 1, 237, 171, 244, 17, 5, 1, 219, 23, 244, 17, 5, 1, - 248, 150, 244, 17, 5, 1, 209, 176, 244, 17, 5, 1, 244, 61, 244, 17, 5, 1, - 246, 166, 244, 17, 5, 1, 230, 159, 244, 17, 5, 1, 229, 208, 244, 17, 5, - 1, 238, 211, 244, 17, 5, 1, 241, 154, 244, 17, 5, 1, 206, 50, 244, 17, 5, - 1, 240, 243, 244, 17, 5, 1, 209, 90, 244, 17, 5, 1, 241, 17, 244, 17, 5, - 1, 202, 90, 244, 17, 5, 1, 241, 7, 244, 17, 5, 1, 202, 70, 244, 17, 5, 1, - 241, 28, 244, 17, 5, 1, 241, 122, 244, 17, 5, 1, 241, 103, 244, 17, 5, 1, - 241, 92, 244, 17, 5, 1, 241, 78, 244, 17, 5, 1, 220, 57, 244, 17, 5, 1, - 240, 220, 213, 50, 1, 219, 20, 213, 50, 1, 208, 131, 213, 50, 1, 229, 96, - 213, 50, 1, 240, 53, 213, 50, 1, 209, 65, 213, 50, 1, 212, 13, 213, 50, - 1, 210, 190, 213, 50, 1, 246, 90, 213, 50, 1, 203, 51, 213, 50, 1, 236, - 9, 213, 50, 1, 248, 85, 213, 50, 1, 244, 74, 213, 50, 1, 238, 250, 213, - 50, 1, 205, 170, 213, 50, 1, 209, 71, 213, 50, 1, 202, 15, 213, 50, 1, - 225, 18, 213, 50, 1, 230, 80, 213, 50, 1, 203, 254, 213, 50, 1, 237, 159, - 213, 50, 1, 227, 33, 213, 50, 1, 224, 111, 213, 50, 1, 231, 90, 213, 50, - 1, 241, 152, 213, 50, 1, 250, 75, 213, 50, 1, 251, 113, 213, 50, 1, 220, - 31, 213, 50, 1, 203, 241, 213, 50, 1, 219, 211, 213, 50, 1, 251, 73, 213, - 50, 1, 215, 224, 213, 50, 1, 221, 40, 213, 50, 1, 241, 172, 213, 50, 1, - 251, 78, 213, 50, 1, 235, 162, 213, 50, 1, 206, 224, 213, 50, 1, 220, 95, - 213, 50, 1, 220, 10, 213, 50, 1, 220, 55, 213, 50, 1, 250, 11, 213, 50, - 1, 250, 121, 213, 50, 1, 219, 244, 213, 50, 1, 251, 54, 213, 50, 1, 241, - 21, 213, 50, 1, 250, 99, 213, 50, 1, 241, 183, 213, 50, 1, 235, 170, 213, - 50, 1, 203, 16, 219, 225, 1, 251, 30, 219, 225, 1, 249, 32, 219, 225, 1, - 210, 22, 219, 225, 1, 230, 181, 219, 225, 1, 203, 182, 219, 225, 1, 229, - 144, 219, 225, 1, 244, 60, 219, 225, 1, 216, 220, 219, 225, 1, 215, 36, - 219, 225, 1, 213, 5, 219, 225, 1, 244, 1, 219, 225, 1, 247, 7, 219, 225, - 1, 239, 8, 219, 225, 1, 240, 108, 219, 225, 1, 217, 124, 219, 225, 1, - 230, 38, 219, 225, 1, 228, 108, 219, 225, 1, 224, 124, 219, 225, 1, 221, - 24, 219, 225, 1, 204, 70, 219, 225, 1, 152, 219, 225, 1, 198, 219, 225, - 1, 63, 219, 225, 1, 74, 219, 225, 1, 75, 219, 225, 1, 78, 219, 225, 1, - 68, 219, 225, 1, 252, 25, 219, 225, 1, 241, 161, 219, 225, 1, 220, 18, - 219, 225, 17, 202, 84, 219, 225, 17, 105, 219, 225, 17, 108, 219, 225, - 17, 147, 219, 225, 17, 149, 219, 225, 17, 170, 219, 225, 17, 195, 219, - 225, 17, 213, 111, 219, 225, 17, 199, 219, 225, 17, 222, 63, 241, 118, 1, - 63, 241, 118, 1, 248, 162, 241, 118, 1, 246, 238, 241, 118, 1, 246, 170, - 241, 118, 1, 244, 75, 241, 118, 1, 223, 17, 241, 118, 1, 243, 248, 241, - 118, 1, 241, 145, 241, 118, 1, 74, 241, 118, 1, 240, 60, 241, 118, 1, - 238, 190, 241, 118, 1, 238, 52, 241, 118, 1, 237, 67, 241, 118, 1, 75, - 241, 118, 1, 230, 161, 241, 118, 1, 229, 201, 241, 118, 1, 227, 234, 241, - 118, 1, 227, 73, 241, 118, 1, 225, 20, 241, 118, 1, 222, 240, 241, 118, - 1, 201, 201, 241, 118, 1, 222, 41, 241, 118, 1, 78, 241, 118, 1, 219, 34, - 241, 118, 1, 217, 106, 241, 118, 1, 216, 158, 241, 118, 1, 215, 180, 241, - 118, 1, 214, 177, 241, 118, 1, 213, 43, 241, 118, 1, 209, 187, 241, 118, - 1, 209, 92, 241, 118, 1, 68, 241, 118, 1, 206, 55, 241, 118, 1, 203, 176, - 241, 118, 1, 203, 124, 241, 118, 1, 202, 92, 241, 118, 1, 202, 71, 241, - 118, 1, 238, 105, 241, 118, 1, 238, 111, 241, 118, 1, 229, 129, 247, 14, - 251, 31, 1, 251, 1, 247, 14, 251, 31, 1, 248, 108, 247, 14, 251, 31, 1, - 238, 69, 247, 14, 251, 31, 1, 244, 140, 247, 14, 251, 31, 1, 241, 171, - 247, 14, 251, 31, 1, 202, 102, 247, 14, 251, 31, 1, 240, 183, 247, 14, - 251, 31, 1, 202, 65, 247, 14, 251, 31, 1, 209, 213, 247, 14, 251, 31, 1, - 246, 199, 247, 14, 251, 31, 1, 202, 224, 247, 14, 251, 31, 1, 202, 80, - 247, 14, 251, 31, 1, 230, 223, 247, 14, 251, 31, 1, 213, 90, 247, 14, - 251, 31, 1, 228, 17, 247, 14, 251, 31, 1, 230, 235, 247, 14, 251, 31, 1, - 203, 172, 247, 14, 251, 31, 1, 242, 7, 247, 14, 251, 31, 1, 247, 39, 247, - 14, 251, 31, 1, 230, 142, 247, 14, 251, 31, 1, 229, 240, 247, 14, 251, - 31, 1, 226, 194, 247, 14, 251, 31, 1, 237, 14, 247, 14, 251, 31, 1, 217, - 107, 247, 14, 251, 31, 1, 250, 177, 247, 14, 251, 31, 1, 246, 107, 247, - 14, 251, 31, 1, 246, 142, 247, 14, 251, 31, 1, 245, 63, 247, 14, 251, 31, - 1, 225, 103, 247, 14, 251, 31, 1, 217, 111, 247, 14, 251, 31, 1, 221, - 151, 247, 14, 251, 31, 1, 241, 240, 247, 14, 251, 31, 1, 213, 73, 247, - 14, 251, 31, 1, 230, 162, 247, 14, 251, 31, 1, 220, 31, 247, 14, 251, 31, - 1, 207, 125, 247, 14, 251, 31, 1, 240, 83, 247, 14, 251, 31, 1, 241, 253, - 247, 14, 251, 31, 1, 246, 176, 247, 14, 251, 31, 1, 219, 9, 247, 14, 251, - 31, 1, 238, 95, 247, 14, 251, 31, 1, 216, 172, 247, 14, 251, 31, 1, 213, - 99, 247, 14, 251, 31, 1, 205, 232, 247, 14, 251, 31, 1, 208, 193, 247, - 14, 251, 31, 1, 212, 207, 247, 14, 251, 31, 1, 230, 194, 247, 14, 251, - 31, 1, 245, 64, 247, 14, 251, 31, 1, 247, 7, 247, 14, 251, 31, 1, 203, - 56, 247, 14, 251, 31, 1, 218, 102, 247, 14, 251, 31, 1, 229, 62, 247, 14, - 251, 31, 246, 49, 82, 29, 34, 2, 251, 231, 29, 34, 2, 251, 230, 29, 34, - 2, 251, 229, 29, 34, 2, 251, 228, 29, 34, 2, 251, 227, 29, 34, 2, 251, - 226, 29, 34, 2, 251, 225, 29, 34, 2, 251, 224, 29, 34, 2, 251, 223, 29, - 34, 2, 251, 222, 29, 34, 2, 251, 221, 29, 34, 2, 251, 220, 29, 34, 2, - 251, 219, 29, 34, 2, 251, 218, 29, 34, 2, 251, 217, 29, 34, 2, 251, 216, - 29, 34, 2, 251, 215, 29, 34, 2, 251, 214, 29, 34, 2, 251, 213, 29, 34, 2, - 251, 212, 29, 34, 2, 251, 211, 29, 34, 2, 251, 210, 29, 34, 2, 251, 209, - 29, 34, 2, 251, 208, 29, 34, 2, 251, 207, 29, 34, 2, 251, 206, 29, 34, 2, - 251, 205, 29, 34, 2, 254, 239, 29, 34, 2, 251, 204, 29, 34, 2, 251, 203, - 29, 34, 2, 251, 202, 29, 34, 2, 251, 201, 29, 34, 2, 251, 200, 29, 34, 2, - 251, 199, 29, 34, 2, 251, 198, 29, 34, 2, 251, 197, 29, 34, 2, 251, 196, - 29, 34, 2, 251, 195, 29, 34, 2, 251, 194, 29, 34, 2, 251, 193, 29, 34, 2, - 251, 192, 29, 34, 2, 251, 191, 29, 34, 2, 251, 190, 29, 34, 2, 251, 189, - 29, 34, 2, 251, 188, 29, 34, 2, 251, 187, 29, 34, 2, 251, 186, 29, 34, 2, - 251, 185, 29, 34, 2, 251, 184, 29, 34, 2, 251, 183, 29, 34, 2, 251, 182, - 29, 34, 2, 251, 181, 29, 34, 2, 251, 180, 29, 34, 2, 251, 179, 29, 34, 2, - 251, 178, 29, 34, 2, 251, 177, 29, 34, 2, 251, 176, 29, 34, 2, 251, 175, - 29, 34, 2, 251, 174, 29, 34, 2, 251, 173, 29, 34, 2, 251, 172, 29, 34, 2, - 251, 171, 29, 34, 2, 251, 170, 29, 34, 2, 251, 169, 29, 34, 2, 251, 168, - 29, 34, 2, 251, 167, 29, 34, 2, 251, 166, 29, 34, 2, 251, 165, 29, 34, 2, - 251, 164, 29, 34, 2, 251, 163, 29, 34, 2, 251, 162, 29, 34, 2, 254, 152, - 29, 34, 2, 251, 161, 29, 34, 2, 251, 160, 29, 34, 2, 254, 117, 29, 34, 2, - 251, 159, 29, 34, 2, 251, 158, 29, 34, 2, 251, 157, 29, 34, 2, 251, 156, - 29, 34, 2, 254, 104, 29, 34, 2, 251, 155, 29, 34, 2, 251, 154, 29, 34, 2, - 251, 153, 29, 34, 2, 251, 152, 29, 34, 2, 251, 151, 29, 34, 2, 253, 176, - 29, 34, 2, 253, 175, 29, 34, 2, 253, 174, 29, 34, 2, 253, 173, 29, 34, 2, - 253, 172, 29, 34, 2, 253, 171, 29, 34, 2, 253, 170, 29, 34, 2, 253, 169, - 29, 34, 2, 253, 167, 29, 34, 2, 253, 166, 29, 34, 2, 253, 165, 29, 34, 2, - 253, 164, 29, 34, 2, 253, 163, 29, 34, 2, 253, 162, 29, 34, 2, 253, 160, - 29, 34, 2, 253, 159, 29, 34, 2, 253, 158, 29, 34, 2, 253, 157, 29, 34, 2, - 253, 156, 29, 34, 2, 253, 155, 29, 34, 2, 253, 154, 29, 34, 2, 253, 153, - 29, 34, 2, 253, 152, 29, 34, 2, 253, 151, 29, 34, 2, 253, 150, 29, 34, 2, - 253, 149, 29, 34, 2, 253, 148, 29, 34, 2, 253, 147, 29, 34, 2, 253, 146, - 29, 34, 2, 253, 145, 29, 34, 2, 253, 144, 29, 34, 2, 253, 143, 29, 34, 2, - 253, 142, 29, 34, 2, 253, 140, 29, 34, 2, 253, 139, 29, 34, 2, 253, 138, - 29, 34, 2, 253, 134, 29, 34, 2, 253, 133, 29, 34, 2, 253, 132, 29, 34, 2, - 253, 131, 29, 34, 2, 253, 127, 29, 34, 2, 253, 126, 29, 34, 2, 253, 125, - 29, 34, 2, 253, 124, 29, 34, 2, 253, 123, 29, 34, 2, 253, 122, 29, 34, 2, - 253, 121, 29, 34, 2, 253, 120, 29, 34, 2, 253, 119, 29, 34, 2, 253, 118, - 29, 34, 2, 253, 117, 29, 34, 2, 253, 116, 29, 34, 2, 253, 115, 29, 34, 2, - 253, 114, 29, 34, 2, 253, 113, 29, 34, 2, 253, 112, 29, 34, 2, 253, 111, - 29, 34, 2, 253, 110, 29, 34, 2, 253, 109, 29, 34, 2, 253, 108, 29, 34, 2, - 253, 107, 29, 34, 2, 253, 106, 29, 34, 2, 253, 105, 29, 34, 2, 253, 103, - 29, 34, 2, 253, 102, 29, 34, 2, 253, 101, 29, 34, 2, 253, 100, 29, 34, 2, - 253, 99, 29, 34, 2, 253, 97, 29, 34, 2, 253, 96, 29, 34, 2, 253, 95, 29, - 34, 2, 253, 94, 29, 34, 2, 253, 92, 29, 34, 2, 253, 91, 29, 34, 2, 253, - 90, 29, 34, 2, 253, 56, 29, 34, 2, 253, 54, 29, 34, 2, 253, 52, 29, 34, - 2, 253, 50, 29, 34, 2, 253, 48, 29, 34, 2, 253, 46, 29, 34, 2, 253, 44, - 29, 34, 2, 253, 42, 29, 34, 2, 253, 40, 29, 34, 2, 253, 38, 29, 34, 2, - 253, 36, 29, 34, 2, 253, 33, 29, 34, 2, 253, 31, 29, 34, 2, 253, 29, 29, - 34, 2, 253, 27, 29, 34, 2, 253, 25, 29, 34, 2, 253, 23, 29, 34, 2, 253, - 21, 29, 34, 2, 253, 19, 29, 34, 2, 252, 193, 29, 34, 2, 252, 192, 29, 34, - 2, 252, 191, 29, 34, 2, 252, 190, 29, 34, 2, 252, 189, 29, 34, 2, 252, - 188, 29, 34, 2, 252, 186, 29, 34, 2, 252, 185, 29, 34, 2, 252, 184, 29, - 34, 2, 252, 183, 29, 34, 2, 252, 182, 29, 34, 2, 252, 181, 29, 34, 2, - 252, 179, 29, 34, 2, 252, 178, 29, 34, 2, 252, 174, 29, 34, 2, 252, 173, - 29, 34, 2, 252, 171, 29, 34, 2, 252, 170, 29, 34, 2, 252, 169, 29, 34, 2, - 252, 168, 29, 34, 2, 252, 167, 29, 34, 2, 252, 166, 29, 34, 2, 252, 165, - 29, 34, 2, 252, 164, 29, 34, 2, 252, 163, 29, 34, 2, 252, 162, 29, 34, 2, - 252, 161, 29, 34, 2, 252, 160, 29, 34, 2, 252, 159, 29, 34, 2, 252, 158, - 29, 34, 2, 252, 157, 29, 34, 2, 252, 156, 29, 34, 2, 252, 155, 29, 34, 2, - 252, 154, 29, 34, 2, 252, 153, 29, 34, 2, 252, 152, 29, 34, 2, 252, 151, - 29, 34, 2, 252, 150, 29, 34, 2, 252, 149, 29, 34, 2, 252, 148, 29, 34, 2, - 252, 147, 29, 34, 2, 252, 146, 29, 34, 2, 252, 145, 29, 34, 2, 252, 144, - 29, 34, 2, 252, 143, 29, 34, 2, 252, 142, 29, 34, 2, 252, 141, 29, 34, 2, - 252, 140, 29, 34, 2, 252, 139, 29, 34, 2, 252, 138, 29, 34, 2, 252, 137, - 29, 34, 2, 252, 136, 29, 34, 2, 252, 135, 29, 34, 2, 252, 134, 29, 34, 2, - 252, 133, 29, 34, 2, 252, 132, 29, 34, 2, 252, 131, 29, 34, 2, 252, 130, - 29, 34, 2, 252, 129, 29, 34, 2, 252, 128, 29, 34, 2, 252, 127, 29, 34, 2, - 252, 126, 29, 34, 2, 252, 125, 29, 34, 2, 252, 124, 29, 34, 2, 252, 123, - 29, 34, 2, 252, 122, 29, 34, 2, 252, 121, 29, 34, 2, 252, 120, 29, 34, 2, - 252, 119, 29, 34, 2, 252, 118, 29, 34, 2, 252, 117, 29, 34, 2, 252, 116, - 29, 34, 2, 252, 115, 29, 34, 2, 252, 114, 29, 34, 2, 252, 113, 29, 34, 2, - 252, 112, 29, 34, 2, 252, 111, 29, 34, 2, 252, 110, 29, 34, 2, 252, 109, - 29, 34, 2, 252, 108, 29, 34, 2, 252, 107, 29, 34, 2, 252, 106, 29, 34, 2, - 252, 105, 29, 34, 2, 252, 104, 29, 34, 2, 252, 103, 29, 34, 2, 252, 102, - 29, 34, 2, 252, 101, 29, 34, 2, 252, 100, 29, 34, 2, 252, 99, 29, 34, 2, - 252, 98, 29, 34, 2, 252, 97, 29, 34, 2, 252, 96, 29, 34, 2, 252, 95, 29, - 34, 2, 252, 94, 29, 34, 2, 252, 93, 29, 34, 2, 252, 92, 29, 34, 2, 252, - 91, 29, 34, 2, 252, 90, 29, 34, 2, 252, 89, 29, 34, 2, 252, 88, 29, 34, - 2, 252, 87, 29, 34, 2, 252, 86, 29, 34, 2, 252, 85, 29, 34, 2, 252, 84, - 29, 34, 2, 252, 83, 29, 34, 2, 252, 82, 29, 34, 2, 252, 81, 29, 34, 2, - 252, 80, 29, 34, 2, 252, 79, 29, 34, 2, 252, 78, 29, 34, 2, 252, 77, 29, - 34, 2, 252, 76, 29, 34, 2, 252, 75, 29, 34, 2, 252, 74, 29, 34, 2, 252, - 73, 29, 34, 2, 252, 72, 29, 34, 2, 252, 71, 29, 34, 2, 252, 70, 29, 34, - 2, 252, 69, 29, 34, 2, 252, 68, 29, 34, 2, 252, 67, 29, 34, 2, 252, 66, - 29, 34, 2, 252, 65, 29, 34, 2, 252, 64, 29, 34, 2, 252, 63, 29, 34, 2, - 252, 62, 29, 34, 2, 252, 61, 29, 34, 2, 252, 60, 29, 34, 2, 252, 59, 29, - 34, 2, 252, 58, 29, 34, 2, 252, 57, 29, 34, 2, 252, 56, 29, 34, 2, 252, - 55, 63, 29, 34, 2, 252, 54, 249, 255, 29, 34, 2, 252, 53, 245, 51, 29, - 34, 2, 252, 52, 74, 29, 34, 2, 252, 51, 240, 174, 29, 34, 2, 252, 50, - 237, 171, 29, 34, 2, 252, 49, 230, 184, 29, 34, 2, 252, 48, 230, 54, 29, - 34, 2, 252, 47, 159, 29, 34, 2, 252, 46, 228, 118, 29, 34, 2, 252, 45, - 228, 117, 29, 34, 2, 252, 44, 228, 116, 29, 34, 2, 252, 43, 228, 115, 29, - 34, 2, 252, 42, 204, 144, 29, 34, 2, 252, 41, 203, 196, 29, 34, 2, 252, - 40, 203, 124, 29, 34, 2, 252, 39, 220, 36, 29, 34, 2, 252, 38, 251, 147, - 29, 34, 2, 252, 37, 248, 199, 29, 34, 2, 252, 36, 244, 122, 29, 34, 2, - 252, 35, 240, 182, 29, 34, 2, 252, 34, 230, 161, 29, 34, 2, 252, 33, 29, - 34, 2, 252, 32, 29, 34, 2, 252, 31, 29, 34, 2, 252, 30, 29, 34, 2, 252, - 29, 29, 34, 2, 252, 28, 29, 34, 2, 252, 27, 29, 34, 2, 252, 26, 245, 58, - 4, 63, 245, 58, 4, 74, 245, 58, 4, 75, 245, 58, 4, 78, 245, 58, 4, 68, - 245, 58, 4, 230, 181, 245, 58, 4, 230, 101, 245, 58, 4, 173, 245, 58, 4, - 229, 201, 245, 58, 4, 229, 100, 245, 58, 4, 229, 26, 245, 58, 4, 228, - 209, 245, 58, 4, 228, 113, 245, 58, 4, 227, 234, 245, 58, 4, 227, 148, - 245, 58, 4, 227, 49, 245, 58, 4, 226, 239, 245, 58, 4, 192, 245, 58, 4, - 225, 20, 245, 58, 4, 224, 155, 245, 58, 4, 224, 82, 245, 58, 4, 223, 246, - 245, 58, 4, 201, 201, 245, 58, 4, 222, 240, 245, 58, 4, 222, 100, 245, - 58, 4, 221, 191, 245, 58, 4, 221, 84, 245, 58, 4, 185, 245, 58, 4, 219, - 34, 245, 58, 4, 218, 167, 245, 58, 4, 218, 69, 245, 58, 4, 217, 191, 245, - 58, 4, 216, 220, 245, 58, 4, 216, 158, 245, 58, 4, 216, 57, 245, 58, 4, - 215, 227, 245, 58, 4, 215, 145, 245, 58, 4, 215, 36, 245, 58, 4, 214, - 177, 245, 58, 4, 212, 162, 245, 58, 4, 212, 13, 245, 58, 4, 211, 10, 245, - 58, 4, 210, 22, 245, 58, 4, 209, 187, 245, 58, 4, 209, 2, 245, 58, 4, - 135, 245, 58, 4, 207, 203, 245, 58, 4, 204, 111, 245, 58, 4, 204, 62, - 245, 58, 4, 204, 30, 245, 58, 4, 204, 0, 245, 58, 4, 203, 182, 245, 58, - 4, 203, 176, 245, 58, 4, 202, 116, 245, 58, 4, 202, 17, 231, 51, 250, - 130, 1, 251, 28, 231, 51, 250, 130, 1, 248, 105, 231, 51, 250, 130, 1, - 238, 67, 231, 51, 250, 130, 1, 244, 177, 231, 51, 250, 130, 1, 237, 67, - 231, 51, 250, 130, 1, 204, 70, 231, 51, 250, 130, 1, 202, 95, 231, 51, - 250, 130, 1, 237, 19, 231, 51, 250, 130, 1, 209, 128, 231, 51, 250, 130, - 1, 202, 235, 231, 51, 250, 130, 1, 229, 250, 231, 51, 250, 130, 1, 228, - 19, 231, 51, 250, 130, 1, 224, 247, 231, 51, 250, 130, 1, 221, 40, 231, - 51, 250, 130, 1, 214, 249, 231, 51, 250, 130, 1, 250, 3, 231, 51, 250, - 130, 1, 219, 34, 231, 51, 250, 130, 1, 215, 26, 231, 51, 250, 130, 1, - 217, 69, 231, 51, 250, 130, 1, 216, 91, 231, 51, 250, 130, 1, 212, 255, - 231, 51, 250, 130, 1, 209, 201, 231, 51, 250, 130, 214, 168, 54, 231, 51, - 250, 130, 42, 105, 231, 51, 250, 130, 42, 108, 231, 51, 250, 130, 42, - 147, 231, 51, 250, 130, 42, 209, 152, 231, 51, 250, 130, 42, 207, 151, - 231, 51, 250, 130, 42, 118, 236, 11, 231, 51, 250, 130, 42, 118, 209, 36, - 231, 51, 250, 130, 42, 209, 153, 209, 36, 219, 134, 1, 251, 28, 219, 134, - 1, 248, 105, 219, 134, 1, 238, 67, 219, 134, 1, 244, 177, 219, 134, 1, - 237, 67, 219, 134, 1, 204, 70, 219, 134, 1, 202, 95, 219, 134, 1, 237, - 19, 219, 134, 1, 209, 128, 219, 134, 1, 202, 235, 219, 134, 1, 229, 250, - 219, 134, 1, 228, 19, 219, 134, 1, 224, 247, 219, 134, 1, 46, 221, 40, - 219, 134, 1, 221, 40, 219, 134, 1, 214, 249, 219, 134, 1, 250, 3, 219, - 134, 1, 219, 34, 219, 134, 1, 215, 26, 219, 134, 1, 217, 69, 219, 134, 1, - 216, 91, 219, 134, 1, 212, 255, 219, 134, 1, 209, 201, 219, 134, 227, - 217, 239, 212, 219, 134, 216, 11, 239, 212, 219, 134, 42, 105, 219, 134, - 42, 108, 219, 134, 42, 147, 219, 134, 42, 149, 219, 134, 42, 170, 219, - 134, 42, 209, 152, 219, 134, 42, 207, 151, 223, 102, 1, 46, 251, 28, 223, - 102, 1, 251, 28, 223, 102, 1, 46, 248, 105, 223, 102, 1, 248, 105, 223, - 102, 1, 238, 67, 223, 102, 1, 244, 177, 223, 102, 1, 46, 237, 67, 223, - 102, 1, 237, 67, 223, 102, 1, 204, 70, 223, 102, 1, 202, 95, 223, 102, 1, - 237, 19, 223, 102, 1, 209, 128, 223, 102, 1, 46, 202, 235, 223, 102, 1, - 202, 235, 223, 102, 1, 46, 229, 250, 223, 102, 1, 229, 250, 223, 102, 1, - 46, 228, 19, 223, 102, 1, 228, 19, 223, 102, 1, 46, 224, 247, 223, 102, - 1, 224, 247, 223, 102, 1, 46, 221, 40, 223, 102, 1, 221, 40, 223, 102, 1, - 214, 249, 223, 102, 1, 250, 3, 223, 102, 1, 219, 34, 223, 102, 1, 215, - 26, 223, 102, 1, 217, 69, 223, 102, 1, 216, 91, 223, 102, 1, 46, 212, - 255, 223, 102, 1, 212, 255, 223, 102, 1, 209, 201, 223, 102, 42, 105, - 223, 102, 42, 108, 223, 102, 42, 147, 223, 102, 42, 149, 223, 102, 245, - 116, 42, 149, 223, 102, 42, 170, 223, 102, 42, 209, 152, 223, 102, 42, - 207, 151, 223, 102, 42, 118, 236, 11, 237, 78, 1, 251, 28, 237, 78, 1, - 248, 105, 237, 78, 1, 238, 67, 237, 78, 1, 244, 176, 237, 78, 1, 237, 67, - 237, 78, 1, 204, 70, 237, 78, 1, 202, 94, 237, 78, 1, 237, 19, 237, 78, - 1, 209, 128, 237, 78, 1, 202, 235, 237, 78, 1, 229, 250, 237, 78, 1, 228, - 19, 237, 78, 1, 224, 247, 237, 78, 1, 221, 40, 237, 78, 1, 214, 249, 237, - 78, 1, 250, 2, 237, 78, 1, 219, 34, 237, 78, 1, 215, 26, 237, 78, 1, 217, - 69, 237, 78, 1, 212, 255, 237, 78, 1, 209, 201, 237, 78, 42, 105, 237, - 78, 42, 170, 237, 78, 42, 209, 152, 237, 78, 42, 207, 151, 237, 78, 42, - 118, 236, 11, 218, 178, 1, 251, 25, 218, 178, 1, 248, 108, 218, 178, 1, - 238, 237, 218, 178, 1, 244, 39, 218, 178, 1, 237, 67, 218, 178, 1, 204, - 77, 218, 178, 1, 202, 109, 218, 178, 1, 237, 21, 218, 178, 1, 209, 132, - 218, 178, 1, 202, 236, 218, 178, 1, 230, 22, 218, 178, 1, 228, 25, 218, - 178, 1, 224, 247, 218, 178, 1, 221, 40, 218, 178, 1, 213, 137, 218, 178, - 1, 251, 59, 218, 178, 1, 219, 34, 218, 178, 1, 215, 27, 218, 178, 1, 217, - 74, 218, 178, 1, 215, 200, 218, 178, 1, 212, 255, 218, 178, 1, 209, 207, - 218, 178, 42, 105, 218, 178, 42, 209, 152, 218, 178, 42, 207, 151, 218, - 178, 42, 118, 236, 11, 218, 178, 42, 108, 218, 178, 42, 147, 218, 178, - 203, 238, 213, 130, 226, 196, 1, 63, 226, 196, 1, 249, 255, 226, 196, 1, - 239, 75, 226, 196, 1, 245, 51, 226, 196, 1, 74, 226, 196, 1, 206, 164, - 226, 196, 1, 75, 226, 196, 1, 203, 124, 226, 196, 1, 230, 54, 226, 196, - 1, 159, 226, 196, 1, 226, 185, 226, 196, 1, 223, 163, 226, 196, 1, 78, - 226, 196, 1, 146, 226, 196, 1, 211, 167, 226, 196, 1, 210, 69, 226, 196, - 1, 68, 226, 196, 1, 240, 174, 226, 196, 1, 217, 134, 226, 196, 1, 194, - 226, 196, 1, 207, 244, 226, 196, 1, 250, 231, 226, 196, 1, 241, 92, 226, - 196, 1, 226, 199, 226, 196, 1, 221, 228, 226, 196, 1, 247, 125, 226, 196, - 208, 82, 82, 129, 236, 253, 1, 63, 129, 236, 253, 1, 74, 129, 236, 253, - 1, 75, 129, 236, 253, 1, 78, 129, 236, 253, 1, 198, 129, 236, 253, 1, - 204, 111, 129, 236, 253, 1, 249, 32, 129, 236, 253, 1, 249, 31, 129, 236, - 253, 1, 185, 129, 236, 253, 1, 192, 129, 236, 253, 1, 201, 201, 129, 236, - 253, 1, 223, 110, 129, 236, 253, 1, 222, 240, 129, 236, 253, 1, 222, 239, - 129, 236, 253, 1, 216, 220, 129, 236, 253, 1, 216, 219, 129, 236, 253, 1, - 228, 113, 129, 236, 253, 1, 229, 144, 129, 236, 253, 1, 237, 12, 129, - 236, 253, 1, 215, 36, 129, 236, 253, 1, 215, 35, 129, 236, 253, 1, 214, - 177, 129, 236, 253, 1, 173, 129, 236, 253, 1, 217, 126, 129, 236, 253, 1, - 210, 22, 129, 236, 253, 1, 210, 21, 129, 236, 253, 1, 209, 187, 129, 236, - 253, 1, 209, 186, 129, 236, 253, 1, 135, 129, 236, 253, 1, 244, 212, 129, - 236, 253, 16, 205, 224, 129, 236, 253, 16, 205, 223, 129, 191, 1, 63, - 129, 191, 1, 74, 129, 191, 1, 75, 129, 191, 1, 78, 129, 191, 1, 198, 129, - 191, 1, 204, 111, 129, 191, 1, 249, 32, 129, 191, 1, 185, 129, 191, 1, - 192, 129, 191, 1, 201, 201, 129, 191, 1, 222, 240, 129, 191, 1, 216, 220, - 129, 191, 1, 228, 113, 129, 191, 1, 229, 144, 129, 191, 1, 237, 12, 129, - 191, 1, 215, 36, 129, 191, 1, 250, 126, 215, 36, 129, 191, 1, 214, 177, - 129, 191, 1, 173, 129, 191, 1, 217, 126, 129, 191, 1, 210, 22, 129, 191, - 1, 209, 187, 129, 191, 1, 135, 129, 191, 1, 244, 212, 129, 191, 239, 138, - 241, 113, 207, 156, 129, 191, 239, 138, 118, 237, 137, 129, 191, 227, 36, - 215, 233, 129, 191, 227, 36, 231, 56, 129, 191, 42, 105, 129, 191, 42, - 108, 129, 191, 42, 147, 129, 191, 42, 149, 129, 191, 42, 170, 129, 191, - 42, 195, 129, 191, 42, 213, 111, 129, 191, 42, 199, 129, 191, 42, 222, - 63, 129, 191, 42, 209, 152, 129, 191, 42, 207, 151, 129, 191, 42, 209, - 53, 129, 191, 42, 239, 153, 129, 191, 42, 240, 18, 129, 191, 42, 212, 74, - 129, 191, 42, 213, 105, 129, 191, 42, 118, 236, 11, 129, 191, 42, 120, - 236, 11, 129, 191, 42, 126, 236, 11, 129, 191, 42, 239, 147, 236, 11, - 129, 191, 42, 239, 233, 236, 11, 129, 191, 42, 212, 88, 236, 11, 129, - 191, 42, 213, 112, 236, 11, 129, 191, 42, 241, 143, 236, 11, 129, 191, - 42, 222, 64, 236, 11, 129, 191, 42, 118, 209, 36, 129, 191, 42, 120, 209, - 36, 129, 191, 42, 126, 209, 36, 129, 191, 42, 239, 147, 209, 36, 129, - 191, 42, 239, 233, 209, 36, 129, 191, 42, 212, 88, 209, 36, 129, 191, 42, - 213, 112, 209, 36, 129, 191, 42, 241, 143, 209, 36, 129, 191, 42, 222, - 64, 209, 36, 129, 191, 42, 209, 153, 209, 36, 129, 191, 42, 207, 152, - 209, 36, 129, 191, 42, 209, 54, 209, 36, 129, 191, 42, 239, 154, 209, 36, - 129, 191, 42, 240, 19, 209, 36, 129, 191, 42, 212, 75, 209, 36, 129, 191, - 42, 213, 106, 209, 36, 129, 191, 42, 241, 135, 209, 36, 129, 191, 42, - 222, 59, 209, 36, 129, 191, 42, 118, 236, 12, 209, 36, 129, 191, 42, 120, - 236, 12, 209, 36, 129, 191, 42, 126, 236, 12, 209, 36, 129, 191, 42, 239, - 147, 236, 12, 209, 36, 129, 191, 42, 239, 233, 236, 12, 209, 36, 129, - 191, 42, 212, 88, 236, 12, 209, 36, 129, 191, 42, 213, 112, 236, 12, 209, - 36, 129, 191, 42, 241, 143, 236, 12, 209, 36, 129, 191, 42, 222, 64, 236, - 12, 209, 36, 129, 191, 239, 138, 118, 207, 157, 129, 191, 239, 138, 120, - 207, 156, 129, 191, 239, 138, 126, 207, 156, 129, 191, 239, 138, 239, - 147, 207, 156, 129, 191, 239, 138, 239, 233, 207, 156, 129, 191, 239, - 138, 212, 88, 207, 156, 129, 191, 239, 138, 213, 112, 207, 156, 129, 191, - 239, 138, 241, 143, 207, 156, 129, 191, 239, 138, 222, 64, 207, 156, 129, - 191, 239, 138, 209, 153, 207, 156, 229, 131, 1, 63, 229, 131, 22, 2, 75, - 229, 131, 22, 2, 68, 229, 131, 22, 2, 125, 146, 229, 131, 22, 2, 74, 229, - 131, 22, 2, 78, 229, 131, 22, 227, 196, 82, 229, 131, 2, 52, 215, 253, - 56, 229, 131, 2, 250, 180, 229, 131, 2, 205, 199, 229, 131, 1, 173, 229, - 131, 1, 229, 144, 229, 131, 1, 239, 8, 229, 131, 1, 238, 119, 229, 131, - 1, 247, 92, 229, 131, 1, 246, 199, 229, 131, 1, 230, 181, 229, 131, 1, - 221, 11, 229, 131, 1, 207, 241, 229, 131, 1, 207, 229, 229, 131, 1, 244, - 120, 229, 131, 1, 244, 104, 229, 131, 1, 221, 227, 229, 131, 1, 210, 22, - 229, 131, 1, 209, 108, 229, 131, 1, 244, 212, 229, 131, 1, 244, 1, 229, - 131, 1, 201, 201, 229, 131, 1, 185, 229, 131, 1, 218, 208, 229, 131, 1, - 249, 32, 229, 131, 1, 248, 98, 229, 131, 1, 192, 229, 131, 1, 198, 229, - 131, 1, 216, 220, 229, 131, 1, 228, 113, 229, 131, 1, 206, 86, 229, 131, - 1, 213, 90, 229, 131, 1, 211, 164, 229, 131, 1, 215, 36, 229, 131, 1, - 202, 116, 229, 131, 1, 152, 229, 131, 1, 229, 47, 229, 131, 1, 207, 209, - 229, 131, 2, 248, 231, 55, 229, 131, 2, 247, 13, 229, 131, 2, 70, 56, - 229, 131, 205, 204, 229, 131, 17, 105, 229, 131, 17, 108, 229, 131, 17, - 147, 229, 131, 17, 149, 229, 131, 42, 209, 152, 229, 131, 42, 207, 151, - 229, 131, 42, 118, 236, 11, 229, 131, 42, 118, 209, 36, 229, 131, 217, - 179, 243, 85, 229, 131, 217, 179, 5, 246, 61, 229, 131, 217, 179, 246, - 61, 229, 131, 217, 179, 245, 139, 142, 229, 131, 217, 179, 225, 116, 229, - 131, 217, 179, 227, 5, 229, 131, 217, 179, 244, 166, 229, 131, 217, 179, - 52, 244, 166, 229, 131, 217, 179, 227, 108, 38, 211, 238, 250, 141, 1, - 237, 67, 38, 211, 238, 250, 141, 1, 228, 19, 38, 211, 238, 250, 141, 1, - 237, 19, 38, 211, 238, 250, 141, 1, 224, 247, 38, 211, 238, 250, 141, 1, - 217, 69, 38, 211, 238, 250, 141, 1, 204, 70, 38, 211, 238, 250, 141, 1, - 212, 255, 38, 211, 238, 250, 141, 1, 216, 91, 38, 211, 238, 250, 141, 1, - 248, 105, 38, 211, 238, 250, 141, 1, 209, 201, 38, 211, 238, 250, 141, 1, - 214, 225, 38, 211, 238, 250, 141, 1, 229, 250, 38, 211, 238, 250, 141, 1, - 221, 40, 38, 211, 238, 250, 141, 1, 229, 126, 38, 211, 238, 250, 141, 1, - 215, 26, 38, 211, 238, 250, 141, 1, 214, 249, 38, 211, 238, 250, 141, 1, - 240, 60, 38, 211, 238, 250, 141, 1, 251, 30, 38, 211, 238, 250, 141, 1, - 250, 2, 38, 211, 238, 250, 141, 1, 243, 254, 38, 211, 238, 250, 141, 1, - 238, 67, 38, 211, 238, 250, 141, 1, 244, 177, 38, 211, 238, 250, 141, 1, - 238, 107, 38, 211, 238, 250, 141, 1, 209, 128, 38, 211, 238, 250, 141, 1, - 202, 94, 38, 211, 238, 250, 141, 1, 243, 251, 38, 211, 238, 250, 141, 1, - 202, 235, 38, 211, 238, 250, 141, 1, 209, 94, 38, 211, 238, 250, 141, 1, - 209, 73, 38, 211, 238, 250, 141, 42, 105, 38, 211, 238, 250, 141, 42, - 240, 18, 38, 211, 238, 250, 141, 141, 231, 31, 38, 153, 250, 141, 1, 237, - 43, 38, 153, 250, 141, 1, 228, 28, 38, 153, 250, 141, 1, 237, 148, 38, - 153, 250, 141, 1, 225, 5, 38, 153, 250, 141, 1, 217, 119, 38, 153, 250, - 141, 1, 204, 70, 38, 153, 250, 141, 1, 241, 15, 38, 153, 250, 141, 1, - 216, 122, 38, 153, 250, 141, 1, 248, 138, 38, 153, 250, 141, 1, 209, 169, - 38, 153, 250, 141, 1, 241, 16, 38, 153, 250, 141, 1, 230, 22, 38, 153, - 250, 141, 1, 221, 178, 38, 153, 250, 141, 1, 229, 140, 38, 153, 250, 141, - 1, 215, 28, 38, 153, 250, 141, 1, 241, 14, 38, 153, 250, 141, 1, 240, 47, - 38, 153, 250, 141, 1, 251, 30, 38, 153, 250, 141, 1, 251, 59, 38, 153, - 250, 141, 1, 244, 207, 38, 153, 250, 141, 1, 238, 181, 38, 153, 250, 141, - 1, 244, 184, 38, 153, 250, 141, 1, 238, 114, 38, 153, 250, 141, 1, 209, - 251, 38, 153, 250, 141, 1, 202, 107, 38, 153, 250, 141, 1, 209, 100, 38, - 153, 250, 141, 1, 203, 47, 38, 153, 250, 141, 1, 209, 88, 38, 153, 250, - 141, 1, 202, 110, 38, 153, 250, 141, 42, 105, 38, 153, 250, 141, 42, 209, - 152, 38, 153, 250, 141, 42, 207, 151, 225, 115, 1, 251, 28, 225, 115, 1, - 248, 105, 225, 115, 1, 248, 92, 225, 115, 1, 238, 67, 225, 115, 1, 238, - 92, 225, 115, 1, 244, 177, 225, 115, 1, 237, 67, 225, 115, 1, 204, 70, - 225, 115, 2, 207, 29, 225, 115, 1, 202, 95, 225, 115, 1, 202, 73, 225, - 115, 1, 230, 163, 225, 115, 1, 230, 145, 225, 115, 1, 237, 19, 225, 115, - 1, 209, 128, 225, 115, 1, 202, 235, 225, 115, 1, 229, 250, 225, 115, 1, - 203, 179, 225, 115, 1, 229, 133, 225, 115, 1, 228, 19, 225, 115, 1, 243, - 250, 225, 115, 1, 209, 99, 225, 115, 1, 224, 247, 225, 115, 1, 221, 40, - 225, 115, 1, 214, 249, 225, 115, 1, 250, 3, 225, 115, 1, 251, 234, 225, - 115, 1, 219, 34, 225, 115, 1, 240, 60, 225, 115, 1, 215, 26, 225, 115, 1, - 217, 69, 225, 115, 1, 203, 157, 225, 115, 1, 217, 95, 225, 115, 1, 216, - 91, 225, 115, 1, 212, 255, 225, 115, 1, 211, 133, 225, 115, 1, 209, 201, - 225, 115, 251, 146, 131, 55, 225, 115, 251, 146, 131, 56, 225, 115, 42, - 105, 225, 115, 42, 170, 225, 115, 42, 209, 152, 225, 115, 42, 207, 151, - 225, 115, 42, 118, 236, 11, 225, 115, 217, 179, 211, 94, 225, 115, 217, - 179, 239, 212, 225, 115, 217, 179, 52, 70, 204, 5, 243, 85, 225, 115, - 217, 179, 70, 204, 5, 243, 85, 225, 115, 217, 179, 243, 85, 225, 115, - 217, 179, 120, 243, 83, 225, 115, 217, 179, 227, 115, 240, 7, 250, 14, 1, - 63, 250, 14, 1, 252, 25, 250, 14, 1, 250, 178, 250, 14, 1, 251, 240, 250, - 14, 1, 250, 231, 250, 14, 1, 251, 241, 250, 14, 1, 251, 109, 250, 14, 1, - 251, 105, 250, 14, 1, 74, 250, 14, 1, 241, 161, 250, 14, 1, 78, 250, 14, - 1, 220, 18, 250, 14, 1, 75, 250, 14, 1, 231, 83, 250, 14, 1, 68, 250, 14, - 1, 206, 178, 250, 14, 1, 229, 201, 250, 14, 1, 203, 176, 250, 14, 1, 203, - 138, 250, 14, 1, 203, 148, 250, 14, 1, 238, 190, 250, 14, 1, 238, 150, - 250, 14, 1, 238, 105, 250, 14, 1, 246, 238, 250, 14, 1, 230, 161, 250, - 14, 1, 209, 187, 250, 14, 1, 209, 92, 250, 14, 1, 244, 75, 250, 14, 1, - 243, 248, 250, 14, 1, 207, 236, 250, 14, 1, 219, 34, 250, 14, 1, 240, 60, - 250, 14, 1, 248, 162, 250, 14, 1, 248, 94, 250, 14, 1, 222, 190, 250, 14, - 1, 222, 106, 250, 14, 1, 222, 107, 250, 14, 1, 222, 240, 250, 14, 1, 221, - 1, 250, 14, 1, 221, 222, 250, 14, 1, 225, 20, 250, 14, 1, 236, 186, 250, - 14, 1, 202, 166, 250, 14, 1, 203, 52, 250, 14, 1, 206, 55, 250, 14, 1, - 216, 158, 250, 14, 1, 227, 234, 250, 14, 1, 214, 177, 250, 14, 1, 202, - 92, 250, 14, 1, 213, 43, 250, 14, 1, 202, 71, 250, 14, 1, 212, 169, 250, - 14, 1, 211, 134, 250, 14, 1, 237, 67, 250, 14, 251, 146, 82, 208, 213, - 120, 187, 115, 118, 70, 217, 178, 5, 120, 187, 115, 118, 70, 217, 178, - 228, 8, 120, 187, 115, 118, 70, 217, 178, 228, 8, 118, 70, 115, 120, 187, - 217, 178, 228, 8, 120, 215, 250, 115, 118, 215, 253, 217, 178, 228, 8, - 118, 215, 253, 115, 120, 215, 250, 217, 178, 231, 10, 219, 70, 1, 251, - 28, 231, 10, 219, 70, 1, 248, 105, 231, 10, 219, 70, 1, 238, 67, 231, 10, - 219, 70, 1, 244, 177, 231, 10, 219, 70, 1, 237, 67, 231, 10, 219, 70, 1, - 204, 70, 231, 10, 219, 70, 1, 202, 95, 231, 10, 219, 70, 1, 237, 19, 231, - 10, 219, 70, 1, 209, 128, 231, 10, 219, 70, 1, 202, 235, 231, 10, 219, - 70, 1, 229, 250, 231, 10, 219, 70, 1, 228, 19, 231, 10, 219, 70, 1, 224, - 247, 231, 10, 219, 70, 1, 221, 40, 231, 10, 219, 70, 1, 214, 249, 231, - 10, 219, 70, 1, 250, 3, 231, 10, 219, 70, 1, 219, 34, 231, 10, 219, 70, - 1, 215, 26, 231, 10, 219, 70, 1, 217, 69, 231, 10, 219, 70, 1, 216, 91, - 231, 10, 219, 70, 1, 212, 255, 231, 10, 219, 70, 1, 209, 201, 231, 10, - 219, 70, 42, 105, 231, 10, 219, 70, 42, 108, 231, 10, 219, 70, 42, 147, - 231, 10, 219, 70, 42, 149, 231, 10, 219, 70, 42, 209, 152, 231, 10, 219, - 70, 42, 207, 151, 231, 10, 219, 70, 42, 118, 236, 11, 231, 10, 219, 70, - 42, 118, 209, 36, 231, 10, 219, 149, 1, 251, 28, 231, 10, 219, 149, 1, - 248, 105, 231, 10, 219, 149, 1, 238, 67, 231, 10, 219, 149, 1, 244, 177, - 231, 10, 219, 149, 1, 237, 67, 231, 10, 219, 149, 1, 204, 69, 231, 10, - 219, 149, 1, 202, 95, 231, 10, 219, 149, 1, 237, 19, 231, 10, 219, 149, - 1, 209, 128, 231, 10, 219, 149, 1, 202, 235, 231, 10, 219, 149, 1, 229, - 250, 231, 10, 219, 149, 1, 228, 19, 231, 10, 219, 149, 1, 224, 246, 231, - 10, 219, 149, 1, 221, 40, 231, 10, 219, 149, 1, 214, 249, 231, 10, 219, - 149, 1, 219, 34, 231, 10, 219, 149, 1, 215, 26, 231, 10, 219, 149, 1, - 212, 255, 231, 10, 219, 149, 1, 209, 201, 231, 10, 219, 149, 42, 105, - 231, 10, 219, 149, 42, 108, 231, 10, 219, 149, 42, 147, 231, 10, 219, - 149, 42, 149, 231, 10, 219, 149, 42, 209, 152, 231, 10, 219, 149, 42, - 207, 151, 231, 10, 219, 149, 42, 118, 236, 11, 231, 10, 219, 149, 42, - 118, 209, 36, 217, 203, 219, 149, 1, 251, 28, 217, 203, 219, 149, 1, 248, - 105, 217, 203, 219, 149, 1, 238, 67, 217, 203, 219, 149, 1, 244, 177, - 217, 203, 219, 149, 1, 237, 67, 217, 203, 219, 149, 1, 204, 69, 217, 203, - 219, 149, 1, 202, 95, 217, 203, 219, 149, 1, 237, 19, 217, 203, 219, 149, - 1, 202, 235, 217, 203, 219, 149, 1, 229, 250, 217, 203, 219, 149, 1, 228, - 19, 217, 203, 219, 149, 1, 224, 246, 217, 203, 219, 149, 1, 221, 40, 217, - 203, 219, 149, 1, 214, 249, 217, 203, 219, 149, 1, 219, 34, 217, 203, - 219, 149, 1, 215, 26, 217, 203, 219, 149, 1, 212, 255, 217, 203, 219, - 149, 1, 209, 201, 217, 203, 219, 149, 214, 168, 82, 217, 203, 219, 149, - 207, 174, 214, 168, 82, 217, 203, 219, 149, 239, 147, 187, 3, 245, 130, - 217, 203, 219, 149, 239, 147, 187, 3, 243, 85, 217, 203, 219, 149, 42, - 105, 217, 203, 219, 149, 42, 108, 217, 203, 219, 149, 42, 147, 217, 203, - 219, 149, 42, 149, 217, 203, 219, 149, 42, 209, 152, 217, 203, 219, 149, - 42, 207, 151, 217, 203, 219, 149, 42, 118, 236, 11, 38, 207, 178, 1, 219, - 235, 63, 38, 207, 178, 1, 203, 40, 63, 38, 207, 178, 1, 203, 40, 251, - 109, 38, 207, 178, 1, 219, 235, 75, 38, 207, 178, 1, 203, 40, 75, 38, - 207, 178, 1, 203, 40, 74, 38, 207, 178, 1, 219, 235, 78, 38, 207, 178, 1, - 219, 235, 220, 73, 38, 207, 178, 1, 203, 40, 220, 73, 38, 207, 178, 1, - 219, 235, 251, 232, 38, 207, 178, 1, 203, 40, 251, 232, 38, 207, 178, 1, - 219, 235, 251, 108, 38, 207, 178, 1, 203, 40, 251, 108, 38, 207, 178, 1, - 219, 235, 251, 81, 38, 207, 178, 1, 203, 40, 251, 81, 38, 207, 178, 1, - 219, 235, 251, 103, 38, 207, 178, 1, 203, 40, 251, 103, 38, 207, 178, 1, - 219, 235, 251, 122, 38, 207, 178, 1, 203, 40, 251, 122, 38, 207, 178, 1, - 219, 235, 251, 107, 38, 207, 178, 1, 219, 235, 240, 181, 38, 207, 178, 1, - 203, 40, 240, 181, 38, 207, 178, 1, 219, 235, 250, 8, 38, 207, 178, 1, - 203, 40, 250, 8, 38, 207, 178, 1, 219, 235, 251, 90, 38, 207, 178, 1, - 203, 40, 251, 90, 38, 207, 178, 1, 219, 235, 251, 101, 38, 207, 178, 1, - 203, 40, 251, 101, 38, 207, 178, 1, 219, 235, 220, 71, 38, 207, 178, 1, - 203, 40, 220, 71, 38, 207, 178, 1, 219, 235, 251, 39, 38, 207, 178, 1, - 203, 40, 251, 39, 38, 207, 178, 1, 219, 235, 251, 100, 38, 207, 178, 1, - 219, 235, 241, 106, 38, 207, 178, 1, 219, 235, 241, 103, 38, 207, 178, 1, - 219, 235, 250, 231, 38, 207, 178, 1, 219, 235, 251, 98, 38, 207, 178, 1, - 203, 40, 251, 98, 38, 207, 178, 1, 219, 235, 241, 70, 38, 207, 178, 1, - 203, 40, 241, 70, 38, 207, 178, 1, 219, 235, 241, 89, 38, 207, 178, 1, - 203, 40, 241, 89, 38, 207, 178, 1, 219, 235, 241, 56, 38, 207, 178, 1, - 203, 40, 241, 56, 38, 207, 178, 1, 203, 40, 250, 223, 38, 207, 178, 1, - 219, 235, 241, 78, 38, 207, 178, 1, 203, 40, 251, 97, 38, 207, 178, 1, - 219, 235, 241, 46, 38, 207, 178, 1, 219, 235, 220, 9, 38, 207, 178, 1, - 219, 235, 235, 164, 38, 207, 178, 1, 219, 235, 241, 169, 38, 207, 178, 1, - 203, 40, 241, 169, 38, 207, 178, 1, 219, 235, 250, 148, 38, 207, 178, 1, - 203, 40, 250, 148, 38, 207, 178, 1, 219, 235, 230, 226, 38, 207, 178, 1, - 203, 40, 230, 226, 38, 207, 178, 1, 219, 235, 219, 246, 38, 207, 178, 1, - 203, 40, 219, 246, 38, 207, 178, 1, 219, 235, 250, 144, 38, 207, 178, 1, - 203, 40, 250, 144, 38, 207, 178, 1, 219, 235, 251, 96, 38, 207, 178, 1, - 219, 235, 250, 81, 38, 207, 178, 1, 219, 235, 251, 94, 38, 207, 178, 1, - 219, 235, 250, 75, 38, 207, 178, 1, 203, 40, 250, 75, 38, 207, 178, 1, - 219, 235, 241, 7, 38, 207, 178, 1, 203, 40, 241, 7, 38, 207, 178, 1, 219, - 235, 250, 49, 38, 207, 178, 1, 203, 40, 250, 49, 38, 207, 178, 1, 219, - 235, 251, 91, 38, 207, 178, 1, 203, 40, 251, 91, 38, 207, 178, 1, 219, - 235, 219, 224, 38, 207, 178, 1, 219, 235, 248, 215, 38, 145, 6, 1, 63, - 38, 145, 6, 1, 252, 25, 38, 145, 6, 1, 241, 171, 38, 145, 6, 1, 250, 242, - 38, 145, 6, 1, 241, 169, 38, 145, 6, 1, 241, 89, 38, 145, 6, 1, 241, 166, - 38, 145, 6, 1, 241, 165, 38, 145, 6, 1, 250, 226, 38, 145, 6, 1, 74, 38, - 145, 6, 1, 246, 17, 74, 38, 145, 6, 1, 241, 161, 38, 145, 6, 1, 241, 154, - 38, 145, 6, 1, 241, 153, 38, 145, 6, 1, 241, 150, 38, 145, 6, 1, 241, - 147, 38, 145, 6, 1, 75, 38, 145, 6, 1, 231, 83, 38, 145, 6, 1, 241, 132, - 38, 145, 6, 1, 241, 129, 38, 145, 6, 1, 251, 47, 38, 145, 6, 1, 206, 232, - 38, 145, 6, 1, 241, 122, 38, 145, 6, 1, 241, 105, 38, 145, 6, 1, 241, - 103, 38, 145, 6, 1, 241, 92, 38, 145, 6, 1, 241, 56, 38, 145, 6, 1, 78, - 38, 145, 6, 1, 220, 18, 38, 145, 6, 1, 222, 71, 220, 73, 38, 145, 6, 1, - 215, 141, 220, 73, 38, 145, 6, 1, 220, 72, 38, 145, 6, 1, 241, 46, 38, - 145, 6, 1, 241, 97, 38, 145, 6, 1, 241, 28, 38, 145, 6, 1, 212, 228, 241, - 28, 38, 145, 6, 1, 241, 17, 38, 145, 6, 1, 240, 252, 38, 145, 6, 1, 240, - 250, 38, 145, 6, 1, 241, 70, 38, 145, 6, 1, 240, 239, 38, 145, 6, 1, 241, - 167, 38, 145, 6, 1, 68, 38, 145, 6, 1, 206, 178, 38, 145, 6, 1, 222, 71, - 207, 24, 38, 145, 6, 1, 215, 141, 207, 24, 38, 145, 6, 1, 240, 226, 38, - 145, 6, 1, 240, 181, 38, 145, 6, 1, 240, 176, 38, 145, 6, 1, 241, 69, 54, - 38, 145, 6, 1, 206, 193, 38, 145, 5, 1, 63, 38, 145, 5, 1, 252, 25, 38, - 145, 5, 1, 241, 171, 38, 145, 5, 1, 250, 242, 38, 145, 5, 1, 241, 169, - 38, 145, 5, 1, 241, 89, 38, 145, 5, 1, 241, 166, 38, 145, 5, 1, 241, 165, - 38, 145, 5, 1, 250, 226, 38, 145, 5, 1, 74, 38, 145, 5, 1, 246, 17, 74, - 38, 145, 5, 1, 241, 161, 38, 145, 5, 1, 241, 154, 38, 145, 5, 1, 241, - 153, 38, 145, 5, 1, 241, 150, 38, 145, 5, 1, 241, 147, 38, 145, 5, 1, 75, - 38, 145, 5, 1, 231, 83, 38, 145, 5, 1, 241, 132, 38, 145, 5, 1, 241, 129, - 38, 145, 5, 1, 251, 47, 38, 145, 5, 1, 206, 232, 38, 145, 5, 1, 241, 122, - 38, 145, 5, 1, 241, 105, 38, 145, 5, 1, 241, 103, 38, 145, 5, 1, 241, 92, - 38, 145, 5, 1, 241, 56, 38, 145, 5, 1, 78, 38, 145, 5, 1, 220, 18, 38, - 145, 5, 1, 222, 71, 220, 73, 38, 145, 5, 1, 215, 141, 220, 73, 38, 145, - 5, 1, 220, 72, 38, 145, 5, 1, 241, 46, 38, 145, 5, 1, 241, 97, 38, 145, - 5, 1, 241, 28, 38, 145, 5, 1, 212, 228, 241, 28, 38, 145, 5, 1, 241, 17, - 38, 145, 5, 1, 240, 252, 38, 145, 5, 1, 240, 250, 38, 145, 5, 1, 241, 70, - 38, 145, 5, 1, 240, 239, 38, 145, 5, 1, 241, 167, 38, 145, 5, 1, 68, 38, - 145, 5, 1, 206, 178, 38, 145, 5, 1, 222, 71, 207, 24, 38, 145, 5, 1, 215, - 141, 207, 24, 38, 145, 5, 1, 240, 226, 38, 145, 5, 1, 240, 181, 38, 145, - 5, 1, 240, 176, 38, 145, 5, 1, 241, 69, 54, 38, 145, 5, 1, 206, 193, 38, - 145, 42, 105, 38, 145, 42, 170, 38, 145, 42, 209, 152, 38, 145, 42, 240, - 18, 38, 145, 42, 118, 236, 11, 38, 145, 42, 118, 209, 36, 215, 129, 17, - 105, 215, 129, 17, 108, 215, 129, 17, 147, 215, 129, 17, 149, 215, 129, - 17, 170, 215, 129, 17, 195, 215, 129, 17, 213, 111, 215, 129, 17, 199, - 215, 129, 17, 222, 63, 215, 129, 42, 209, 152, 215, 129, 42, 207, 151, - 215, 129, 42, 209, 53, 215, 129, 42, 239, 153, 215, 129, 42, 240, 18, - 215, 129, 42, 212, 74, 215, 129, 42, 213, 105, 215, 129, 42, 241, 134, - 215, 129, 42, 222, 58, 215, 129, 42, 118, 236, 11, 215, 129, 42, 120, - 236, 11, 215, 129, 42, 126, 236, 11, 215, 129, 42, 239, 147, 236, 11, - 215, 129, 42, 239, 233, 236, 11, 215, 129, 42, 212, 88, 236, 11, 215, - 129, 42, 213, 112, 236, 11, 215, 129, 42, 241, 143, 236, 11, 215, 129, - 42, 222, 64, 236, 11, 215, 129, 239, 138, 118, 237, 137, 215, 129, 239, - 138, 118, 217, 55, 215, 129, 239, 138, 118, 209, 60, 215, 129, 239, 138, - 120, 209, 57, 144, 2, 247, 52, 144, 2, 250, 180, 144, 2, 205, 199, 144, - 2, 230, 135, 144, 2, 206, 222, 144, 1, 63, 144, 1, 252, 25, 144, 1, 75, - 144, 1, 231, 83, 144, 1, 68, 144, 1, 206, 178, 144, 1, 125, 146, 144, 1, - 125, 215, 186, 144, 1, 125, 159, 144, 1, 125, 227, 78, 144, 1, 74, 144, - 1, 251, 64, 144, 1, 78, 144, 1, 250, 34, 144, 1, 173, 144, 1, 229, 144, - 144, 1, 239, 8, 144, 1, 238, 119, 144, 1, 222, 203, 144, 1, 247, 92, 144, - 1, 246, 199, 144, 1, 230, 181, 144, 1, 230, 149, 144, 1, 221, 11, 144, 1, - 207, 241, 144, 1, 207, 229, 144, 1, 244, 120, 144, 1, 244, 104, 144, 1, - 221, 227, 144, 1, 210, 22, 144, 1, 209, 108, 144, 1, 244, 212, 144, 1, - 244, 1, 144, 1, 201, 201, 144, 1, 185, 144, 1, 218, 208, 144, 1, 249, 32, - 144, 1, 248, 98, 144, 1, 192, 144, 1, 198, 144, 1, 216, 220, 144, 1, 228, - 113, 144, 1, 206, 86, 144, 1, 213, 90, 144, 1, 211, 164, 144, 1, 215, 36, - 144, 1, 152, 144, 1, 227, 77, 144, 1, 38, 44, 227, 68, 144, 1, 38, 44, - 215, 185, 144, 1, 38, 44, 221, 209, 144, 22, 2, 252, 25, 144, 22, 2, 248, - 95, 252, 25, 144, 22, 2, 75, 144, 22, 2, 231, 83, 144, 22, 2, 68, 144, - 22, 2, 206, 178, 144, 22, 2, 125, 146, 144, 22, 2, 125, 215, 186, 144, - 22, 2, 125, 159, 144, 22, 2, 125, 227, 78, 144, 22, 2, 74, 144, 22, 2, - 251, 64, 144, 22, 2, 78, 144, 22, 2, 250, 34, 144, 205, 204, 144, 244, - 166, 144, 52, 244, 166, 144, 217, 179, 243, 85, 144, 217, 179, 52, 243, - 85, 144, 217, 179, 227, 114, 144, 217, 179, 245, 139, 142, 144, 217, 179, - 227, 5, 144, 42, 105, 144, 42, 108, 144, 42, 147, 144, 42, 149, 144, 42, - 170, 144, 42, 195, 144, 42, 213, 111, 144, 42, 199, 144, 42, 222, 63, - 144, 42, 209, 152, 144, 42, 207, 151, 144, 42, 209, 53, 144, 42, 239, - 153, 144, 42, 240, 18, 144, 42, 212, 74, 144, 42, 213, 105, 144, 42, 241, - 134, 144, 42, 222, 58, 144, 42, 118, 236, 11, 144, 42, 118, 209, 36, 144, - 17, 202, 84, 144, 17, 105, 144, 17, 108, 144, 17, 147, 144, 17, 149, 144, - 17, 170, 144, 17, 195, 144, 17, 213, 111, 144, 17, 199, 144, 17, 222, 63, - 144, 42, 230, 96, 230, 15, 2, 247, 52, 230, 15, 2, 250, 180, 230, 15, 2, - 205, 199, 230, 15, 1, 63, 230, 15, 1, 252, 25, 230, 15, 1, 75, 230, 15, - 1, 231, 83, 230, 15, 1, 68, 230, 15, 1, 206, 178, 230, 15, 1, 74, 230, - 15, 1, 251, 64, 230, 15, 1, 78, 230, 15, 1, 250, 34, 230, 15, 1, 173, - 230, 15, 1, 229, 144, 230, 15, 1, 239, 8, 230, 15, 1, 238, 119, 230, 15, - 1, 222, 203, 230, 15, 1, 247, 92, 230, 15, 1, 246, 199, 230, 15, 1, 230, - 181, 230, 15, 1, 230, 149, 230, 15, 1, 221, 11, 230, 15, 1, 207, 241, - 230, 15, 1, 207, 229, 230, 15, 1, 244, 120, 230, 15, 1, 244, 109, 230, - 15, 1, 244, 104, 230, 15, 1, 216, 61, 230, 15, 1, 221, 227, 230, 15, 1, - 210, 22, 230, 15, 1, 209, 108, 230, 15, 1, 244, 212, 230, 15, 1, 244, 1, - 230, 15, 1, 201, 201, 230, 15, 1, 185, 230, 15, 1, 218, 208, 230, 15, 1, - 249, 32, 230, 15, 1, 248, 98, 230, 15, 1, 192, 230, 15, 1, 198, 230, 15, - 1, 216, 220, 230, 15, 1, 228, 113, 230, 15, 1, 206, 86, 230, 15, 1, 213, - 90, 230, 15, 1, 211, 164, 230, 15, 1, 215, 36, 230, 15, 1, 152, 230, 15, - 22, 2, 252, 25, 230, 15, 22, 2, 75, 230, 15, 22, 2, 231, 83, 230, 15, 22, - 2, 68, 230, 15, 22, 2, 206, 178, 230, 15, 22, 2, 74, 230, 15, 22, 2, 251, - 64, 230, 15, 22, 2, 78, 230, 15, 22, 2, 250, 34, 230, 15, 2, 205, 204, - 230, 15, 2, 221, 51, 230, 15, 251, 146, 54, 230, 15, 241, 59, 54, 230, - 15, 42, 54, 230, 15, 214, 168, 82, 230, 15, 52, 214, 168, 82, 230, 15, - 244, 166, 230, 15, 52, 244, 166, 211, 246, 211, 254, 1, 215, 19, 211, - 246, 211, 254, 1, 209, 251, 211, 246, 211, 254, 1, 249, 5, 211, 246, 211, - 254, 1, 247, 81, 211, 246, 211, 254, 1, 244, 193, 211, 246, 211, 254, 1, - 238, 249, 211, 246, 211, 254, 1, 225, 148, 211, 246, 211, 254, 1, 222, - 200, 211, 246, 211, 254, 1, 228, 89, 211, 246, 211, 254, 1, 223, 93, 211, - 246, 211, 254, 1, 206, 82, 211, 246, 211, 254, 1, 219, 150, 211, 246, - 211, 254, 1, 203, 91, 211, 246, 211, 254, 1, 216, 199, 211, 246, 211, - 254, 1, 237, 148, 211, 246, 211, 254, 1, 230, 20, 211, 246, 211, 254, 1, - 230, 175, 211, 246, 211, 254, 1, 221, 8, 211, 246, 211, 254, 1, 251, 73, - 211, 246, 211, 254, 1, 241, 159, 211, 246, 211, 254, 1, 231, 84, 211, - 246, 211, 254, 1, 207, 18, 211, 246, 211, 254, 1, 220, 60, 211, 246, 211, - 254, 1, 241, 147, 211, 246, 211, 254, 1, 225, 161, 211, 246, 211, 254, - 17, 202, 84, 211, 246, 211, 254, 17, 105, 211, 246, 211, 254, 17, 108, - 211, 246, 211, 254, 17, 147, 211, 246, 211, 254, 17, 149, 211, 246, 211, - 254, 17, 170, 211, 246, 211, 254, 17, 195, 211, 246, 211, 254, 17, 213, - 111, 211, 246, 211, 254, 17, 199, 211, 246, 211, 254, 17, 222, 63, 246, - 193, 2, 247, 52, 246, 193, 2, 250, 180, 246, 193, 2, 205, 199, 246, 193, - 1, 252, 25, 246, 193, 1, 75, 246, 193, 1, 68, 246, 193, 1, 74, 246, 193, - 1, 230, 41, 246, 193, 1, 229, 143, 246, 193, 1, 239, 5, 246, 193, 1, 238, - 118, 246, 193, 1, 222, 202, 246, 193, 1, 247, 91, 246, 193, 1, 246, 198, - 246, 193, 1, 230, 180, 246, 193, 1, 230, 148, 246, 193, 1, 221, 10, 246, - 193, 1, 207, 240, 246, 193, 1, 207, 228, 246, 193, 1, 244, 119, 246, 193, - 1, 244, 103, 246, 193, 1, 221, 226, 246, 193, 1, 210, 18, 246, 193, 1, - 209, 107, 246, 193, 1, 244, 211, 246, 193, 1, 244, 0, 246, 193, 1, 223, - 106, 246, 193, 1, 219, 168, 246, 193, 1, 218, 207, 246, 193, 1, 249, 30, - 246, 193, 1, 248, 97, 246, 193, 1, 225, 175, 246, 193, 1, 202, 167, 246, - 193, 1, 203, 110, 246, 193, 1, 216, 216, 246, 193, 1, 228, 112, 246, 193, - 1, 204, 110, 246, 193, 1, 215, 33, 246, 193, 1, 237, 157, 246, 193, 22, - 2, 63, 246, 193, 22, 2, 75, 246, 193, 22, 2, 231, 83, 246, 193, 22, 2, - 68, 246, 193, 22, 2, 206, 178, 246, 193, 22, 2, 74, 246, 193, 22, 2, 251, - 64, 246, 193, 22, 2, 78, 246, 193, 22, 2, 250, 34, 246, 193, 22, 2, 220, - 57, 246, 193, 158, 82, 246, 193, 250, 35, 82, 246, 193, 205, 204, 246, - 193, 225, 173, 246, 193, 17, 202, 84, 246, 193, 17, 105, 246, 193, 17, - 108, 246, 193, 17, 147, 246, 193, 17, 149, 246, 193, 17, 170, 246, 193, - 17, 195, 246, 193, 17, 213, 111, 246, 193, 17, 199, 246, 193, 17, 222, - 63, 246, 193, 214, 168, 82, 246, 193, 244, 166, 246, 193, 52, 244, 166, - 246, 193, 217, 47, 82, 225, 146, 1, 63, 225, 146, 1, 75, 225, 146, 1, 68, - 225, 146, 1, 74, 225, 146, 1, 78, 225, 146, 1, 173, 225, 146, 1, 229, - 144, 225, 146, 1, 239, 8, 225, 146, 1, 238, 119, 225, 146, 1, 247, 92, - 225, 146, 1, 246, 199, 225, 146, 1, 230, 181, 225, 146, 1, 230, 149, 225, - 146, 1, 221, 11, 225, 146, 1, 207, 241, 225, 146, 1, 207, 229, 225, 146, - 1, 244, 120, 225, 146, 1, 244, 104, 225, 146, 1, 221, 227, 225, 146, 1, - 210, 22, 225, 146, 1, 209, 108, 225, 146, 1, 244, 212, 225, 146, 1, 244, - 1, 225, 146, 1, 201, 201, 225, 146, 1, 185, 225, 146, 1, 218, 208, 225, - 146, 1, 249, 32, 225, 146, 1, 248, 98, 225, 146, 1, 192, 225, 146, 1, - 216, 220, 225, 146, 1, 228, 113, 225, 146, 1, 206, 86, 225, 146, 1, 215, - 36, 225, 146, 1, 152, 225, 146, 1, 215, 185, 225, 146, 2, 221, 51, 225, - 146, 251, 146, 54, 225, 146, 214, 168, 82, 225, 146, 32, 212, 206, 181, - 2, 247, 52, 181, 2, 250, 180, 181, 2, 205, 199, 181, 1, 63, 181, 1, 252, - 25, 181, 1, 75, 181, 1, 231, 83, 181, 1, 68, 181, 1, 206, 178, 181, 1, - 125, 146, 181, 1, 125, 215, 186, 181, 1, 125, 159, 181, 1, 125, 227, 78, - 181, 1, 74, 181, 1, 251, 64, 181, 1, 78, 181, 1, 250, 34, 181, 1, 173, - 181, 1, 229, 144, 181, 1, 239, 8, 181, 1, 238, 119, 181, 1, 222, 203, - 181, 1, 247, 92, 181, 1, 246, 199, 181, 1, 230, 181, 181, 1, 230, 149, - 181, 1, 221, 11, 181, 1, 207, 241, 181, 1, 207, 229, 181, 1, 244, 120, - 181, 1, 244, 104, 181, 1, 221, 227, 181, 1, 210, 22, 181, 1, 209, 108, - 181, 1, 244, 212, 181, 1, 244, 1, 181, 1, 201, 201, 181, 1, 185, 181, 1, - 218, 208, 181, 1, 249, 32, 181, 1, 248, 98, 181, 1, 192, 181, 1, 198, - 181, 1, 216, 220, 181, 1, 228, 113, 181, 1, 227, 77, 181, 1, 206, 86, - 181, 1, 213, 90, 181, 1, 211, 164, 181, 1, 215, 36, 181, 1, 152, 181, 22, - 2, 252, 25, 181, 22, 2, 75, 181, 22, 2, 231, 83, 181, 22, 2, 68, 181, 22, - 2, 206, 178, 181, 22, 2, 125, 146, 181, 22, 2, 125, 215, 186, 181, 22, 2, - 125, 159, 181, 22, 2, 125, 227, 78, 181, 22, 2, 74, 181, 22, 2, 251, 64, - 181, 22, 2, 78, 181, 22, 2, 250, 34, 181, 2, 205, 204, 181, 2, 250, 17, - 181, 2, 230, 135, 181, 2, 206, 222, 181, 220, 39, 181, 244, 166, 181, 52, - 244, 166, 181, 251, 146, 54, 181, 213, 130, 181, 214, 239, 82, 181, 2, - 221, 51, 181, 22, 65, 82, 181, 240, 199, 212, 228, 22, 82, 181, 210, 180, - 82, 181, 17, 202, 84, 181, 17, 105, 181, 17, 108, 181, 17, 147, 181, 17, - 149, 181, 17, 170, 181, 17, 195, 181, 17, 213, 111, 181, 17, 199, 181, - 17, 222, 63, 181, 241, 128, 181, 2, 212, 157, 181, 237, 58, 181, 245, - 191, 54, 181, 214, 168, 225, 92, 181, 214, 168, 225, 91, 140, 250, 126, - 17, 105, 140, 250, 126, 17, 108, 140, 250, 126, 17, 147, 140, 250, 126, - 17, 149, 140, 250, 126, 17, 170, 140, 250, 126, 17, 195, 140, 250, 126, - 17, 213, 111, 140, 250, 126, 17, 199, 140, 250, 126, 17, 222, 63, 140, - 250, 126, 42, 209, 152, 140, 250, 126, 42, 207, 151, 140, 250, 126, 42, - 209, 53, 140, 250, 126, 42, 239, 153, 140, 250, 126, 42, 240, 18, 140, - 250, 126, 42, 212, 74, 140, 250, 126, 42, 213, 105, 140, 250, 126, 42, - 241, 134, 140, 250, 126, 42, 222, 58, 140, 250, 126, 42, 118, 236, 11, - 140, 250, 126, 42, 118, 209, 36, 229, 114, 1, 63, 229, 114, 1, 252, 25, - 229, 114, 1, 75, 229, 114, 1, 68, 229, 114, 1, 74, 229, 114, 1, 251, 64, - 229, 114, 1, 78, 229, 114, 1, 250, 34, 229, 114, 1, 173, 229, 114, 1, - 229, 144, 229, 114, 1, 239, 8, 229, 114, 1, 238, 155, 229, 114, 1, 238, - 119, 229, 114, 1, 222, 203, 229, 114, 1, 247, 92, 229, 114, 1, 246, 199, - 229, 114, 1, 230, 181, 229, 114, 1, 230, 129, 229, 114, 1, 221, 11, 229, - 114, 1, 207, 241, 229, 114, 1, 207, 229, 229, 114, 1, 244, 120, 229, 114, - 1, 244, 104, 229, 114, 1, 221, 227, 229, 114, 1, 210, 22, 229, 114, 1, - 209, 108, 229, 114, 1, 244, 212, 229, 114, 1, 244, 110, 229, 114, 1, 244, - 1, 229, 114, 1, 201, 201, 229, 114, 1, 185, 229, 114, 1, 218, 208, 229, - 114, 1, 249, 32, 229, 114, 1, 248, 198, 229, 114, 1, 248, 98, 229, 114, - 1, 192, 229, 114, 1, 198, 229, 114, 1, 216, 220, 229, 114, 1, 228, 113, - 229, 114, 1, 206, 86, 229, 114, 1, 215, 36, 229, 114, 1, 152, 229, 114, - 1, 227, 77, 229, 114, 22, 2, 252, 25, 229, 114, 22, 2, 75, 229, 114, 22, - 2, 231, 83, 229, 114, 22, 2, 68, 229, 114, 22, 2, 74, 229, 114, 22, 2, - 251, 64, 229, 114, 22, 2, 78, 229, 114, 22, 2, 250, 34, 229, 114, 2, 250, - 180, 229, 114, 2, 205, 204, 229, 114, 2, 221, 51, 229, 114, 2, 213, 80, - 229, 114, 244, 166, 229, 114, 52, 244, 166, 229, 114, 203, 238, 213, 130, - 229, 114, 214, 168, 82, 229, 114, 52, 214, 168, 82, 229, 114, 251, 146, - 54, 223, 230, 1, 63, 223, 230, 1, 75, 223, 230, 1, 68, 223, 230, 1, 74, - 223, 230, 1, 173, 223, 230, 1, 229, 144, 223, 230, 1, 239, 8, 223, 230, - 1, 238, 119, 223, 230, 1, 247, 92, 223, 230, 1, 246, 199, 223, 230, 1, - 230, 181, 223, 230, 1, 230, 129, 223, 230, 1, 221, 11, 223, 230, 1, 207, - 241, 223, 230, 1, 207, 229, 223, 230, 1, 244, 120, 223, 230, 1, 244, 110, - 223, 230, 1, 244, 104, 223, 230, 1, 221, 227, 223, 230, 1, 210, 22, 223, - 230, 1, 209, 108, 223, 230, 1, 244, 212, 223, 230, 1, 244, 1, 223, 230, - 1, 201, 201, 223, 230, 1, 185, 223, 230, 1, 218, 208, 223, 230, 1, 249, - 32, 223, 230, 1, 248, 98, 223, 230, 1, 192, 223, 230, 1, 198, 223, 230, - 1, 216, 220, 223, 230, 1, 228, 113, 223, 230, 1, 206, 86, 223, 230, 1, - 215, 36, 223, 230, 1, 152, 223, 230, 1, 215, 185, 223, 230, 1, 216, 61, - 223, 230, 214, 168, 82, 229, 106, 1, 63, 229, 106, 1, 252, 25, 229, 106, - 1, 75, 229, 106, 1, 231, 83, 229, 106, 1, 68, 229, 106, 1, 206, 178, 229, - 106, 1, 74, 229, 106, 1, 251, 64, 229, 106, 1, 78, 229, 106, 1, 250, 34, - 229, 106, 1, 173, 229, 106, 1, 229, 144, 229, 106, 1, 239, 8, 229, 106, - 1, 238, 155, 229, 106, 1, 238, 119, 229, 106, 1, 222, 203, 229, 106, 1, - 247, 92, 229, 106, 1, 246, 199, 229, 106, 1, 230, 181, 229, 106, 1, 230, - 129, 229, 106, 1, 230, 149, 229, 106, 1, 221, 11, 229, 106, 1, 207, 241, - 229, 106, 1, 207, 229, 229, 106, 1, 244, 120, 229, 106, 1, 244, 110, 229, - 106, 1, 215, 185, 229, 106, 1, 244, 104, 229, 106, 1, 221, 227, 229, 106, - 1, 210, 22, 229, 106, 1, 209, 108, 229, 106, 1, 244, 212, 229, 106, 1, - 244, 1, 229, 106, 1, 201, 201, 229, 106, 1, 185, 229, 106, 1, 218, 208, - 229, 106, 1, 249, 32, 229, 106, 1, 248, 198, 229, 106, 1, 248, 98, 229, - 106, 1, 192, 229, 106, 1, 198, 229, 106, 1, 216, 220, 229, 106, 1, 228, - 113, 229, 106, 1, 206, 86, 229, 106, 1, 213, 90, 229, 106, 1, 215, 36, - 229, 106, 1, 152, 229, 106, 2, 250, 180, 229, 106, 22, 2, 252, 25, 229, - 106, 22, 2, 75, 229, 106, 22, 2, 231, 83, 229, 106, 22, 2, 68, 229, 106, - 22, 2, 206, 178, 229, 106, 22, 2, 74, 229, 106, 22, 2, 251, 64, 229, 106, - 22, 2, 78, 229, 106, 22, 2, 250, 34, 229, 106, 2, 221, 51, 229, 106, 2, - 205, 204, 229, 106, 17, 202, 84, 229, 106, 17, 105, 229, 106, 17, 108, - 229, 106, 17, 147, 229, 106, 17, 149, 229, 106, 17, 170, 229, 106, 17, - 195, 229, 106, 17, 213, 111, 229, 106, 17, 199, 229, 106, 17, 222, 63, - 238, 6, 2, 39, 250, 181, 55, 238, 6, 2, 247, 52, 238, 6, 2, 250, 180, - 238, 6, 2, 205, 199, 238, 6, 1, 63, 238, 6, 1, 252, 25, 238, 6, 1, 75, - 238, 6, 1, 231, 83, 238, 6, 1, 68, 238, 6, 1, 206, 178, 238, 6, 1, 125, - 146, 238, 6, 1, 125, 159, 238, 6, 1, 241, 161, 238, 6, 1, 251, 64, 238, - 6, 1, 220, 18, 238, 6, 1, 250, 34, 238, 6, 1, 173, 238, 6, 1, 229, 144, - 238, 6, 1, 239, 8, 238, 6, 1, 238, 119, 238, 6, 1, 222, 203, 238, 6, 1, - 247, 92, 238, 6, 1, 246, 199, 238, 6, 1, 230, 181, 238, 6, 1, 230, 149, - 238, 6, 1, 221, 11, 238, 6, 1, 207, 241, 238, 6, 1, 207, 229, 238, 6, 1, - 244, 120, 238, 6, 1, 244, 104, 238, 6, 1, 221, 227, 238, 6, 1, 210, 22, - 238, 6, 1, 209, 108, 238, 6, 1, 244, 212, 238, 6, 1, 244, 1, 238, 6, 1, - 201, 201, 238, 6, 1, 185, 238, 6, 1, 218, 208, 238, 6, 1, 249, 32, 238, - 6, 1, 248, 98, 238, 6, 1, 192, 238, 6, 1, 198, 238, 6, 1, 216, 220, 238, - 6, 1, 228, 113, 238, 6, 1, 227, 77, 238, 6, 1, 206, 86, 238, 6, 1, 213, - 90, 238, 6, 1, 211, 164, 238, 6, 1, 215, 36, 238, 6, 1, 152, 238, 6, 2, - 221, 51, 238, 6, 2, 250, 17, 238, 6, 22, 2, 252, 25, 238, 6, 22, 2, 75, - 238, 6, 22, 2, 231, 83, 238, 6, 22, 2, 68, 238, 6, 22, 2, 206, 178, 238, - 6, 22, 2, 125, 146, 238, 6, 22, 2, 125, 215, 186, 238, 6, 22, 2, 241, - 161, 238, 6, 22, 2, 251, 64, 238, 6, 22, 2, 220, 18, 238, 6, 22, 2, 250, - 34, 238, 6, 2, 205, 204, 238, 6, 220, 39, 238, 6, 250, 35, 227, 196, 82, - 238, 6, 2, 218, 74, 238, 6, 1, 206, 52, 250, 180, 238, 6, 1, 206, 52, 52, - 250, 180, 238, 6, 1, 125, 215, 186, 238, 6, 1, 125, 227, 78, 238, 6, 22, - 2, 125, 159, 238, 6, 22, 2, 125, 227, 78, 39, 238, 6, 17, 202, 84, 39, - 238, 6, 17, 105, 39, 238, 6, 17, 108, 39, 238, 6, 17, 147, 39, 238, 6, - 17, 149, 39, 238, 6, 17, 170, 39, 238, 6, 17, 195, 39, 238, 6, 1, 63, 39, - 238, 6, 1, 173, 39, 238, 6, 1, 201, 201, 39, 238, 6, 1, 205, 230, 39, - 238, 6, 1, 185, 208, 204, 250, 209, 208, 204, 1, 63, 208, 204, 1, 252, - 25, 208, 204, 1, 75, 208, 204, 1, 231, 83, 208, 204, 1, 68, 208, 204, 1, - 206, 178, 208, 204, 1, 125, 146, 208, 204, 1, 125, 215, 186, 208, 204, 1, - 125, 159, 208, 204, 1, 125, 227, 78, 208, 204, 1, 74, 208, 204, 1, 251, - 64, 208, 204, 1, 78, 208, 204, 1, 250, 34, 208, 204, 1, 173, 208, 204, 1, - 229, 144, 208, 204, 1, 239, 8, 208, 204, 1, 238, 119, 208, 204, 1, 222, - 203, 208, 204, 1, 247, 92, 208, 204, 1, 246, 199, 208, 204, 1, 230, 181, - 208, 204, 1, 230, 149, 208, 204, 1, 221, 11, 208, 204, 1, 207, 241, 208, - 204, 1, 207, 229, 208, 204, 1, 244, 120, 208, 204, 1, 244, 104, 208, 204, - 1, 221, 227, 208, 204, 1, 210, 22, 208, 204, 1, 209, 108, 208, 204, 1, - 244, 212, 208, 204, 1, 244, 1, 208, 204, 1, 201, 201, 208, 204, 1, 185, - 208, 204, 1, 218, 208, 208, 204, 1, 249, 32, 208, 204, 1, 248, 98, 208, - 204, 1, 192, 208, 204, 1, 198, 208, 204, 1, 216, 220, 208, 204, 1, 228, - 113, 208, 204, 1, 206, 86, 208, 204, 1, 213, 90, 208, 204, 1, 211, 164, - 208, 204, 1, 215, 36, 208, 204, 1, 152, 208, 204, 22, 2, 252, 25, 208, - 204, 22, 2, 75, 208, 204, 22, 2, 231, 83, 208, 204, 22, 2, 68, 208, 204, - 22, 2, 206, 178, 208, 204, 22, 2, 125, 146, 208, 204, 22, 2, 125, 215, - 186, 208, 204, 22, 2, 125, 159, 208, 204, 22, 2, 125, 227, 78, 208, 204, - 22, 2, 74, 208, 204, 22, 2, 212, 228, 74, 208, 204, 22, 2, 251, 64, 208, - 204, 22, 2, 78, 208, 204, 22, 2, 212, 228, 78, 208, 204, 22, 2, 250, 34, - 208, 204, 2, 247, 52, 208, 204, 2, 250, 180, 208, 204, 2, 205, 199, 208, - 204, 2, 205, 204, 208, 204, 2, 221, 51, 208, 204, 2, 250, 17, 208, 204, - 237, 191, 208, 204, 251, 146, 54, 208, 204, 220, 39, 208, 204, 17, 202, - 84, 208, 204, 17, 105, 208, 204, 17, 108, 208, 204, 17, 147, 208, 204, - 17, 149, 208, 204, 17, 170, 208, 204, 17, 195, 208, 204, 17, 213, 111, - 208, 204, 17, 199, 208, 204, 17, 222, 63, 186, 1, 63, 186, 1, 252, 25, - 186, 1, 75, 186, 1, 231, 83, 186, 1, 68, 186, 1, 206, 178, 186, 1, 125, - 146, 186, 1, 125, 215, 186, 186, 1, 125, 159, 186, 1, 125, 227, 78, 186, - 1, 74, 186, 1, 251, 64, 186, 1, 78, 186, 1, 250, 34, 186, 1, 173, 186, 1, - 229, 144, 186, 1, 239, 8, 186, 1, 238, 119, 186, 1, 222, 203, 186, 1, - 247, 92, 186, 1, 246, 199, 186, 1, 230, 181, 186, 1, 230, 149, 186, 1, - 221, 11, 186, 1, 207, 241, 186, 1, 207, 229, 186, 1, 244, 120, 186, 1, - 244, 104, 186, 1, 221, 227, 186, 1, 210, 22, 186, 1, 209, 108, 186, 1, - 244, 212, 186, 1, 244, 1, 186, 1, 201, 201, 186, 1, 185, 186, 1, 218, - 208, 186, 1, 249, 32, 186, 1, 248, 98, 186, 1, 192, 186, 1, 198, 186, 1, - 216, 220, 186, 1, 228, 113, 186, 1, 206, 86, 186, 1, 213, 90, 186, 1, - 211, 164, 186, 1, 215, 36, 186, 1, 152, 186, 22, 2, 252, 25, 186, 22, 2, - 75, 186, 22, 2, 231, 83, 186, 22, 2, 68, 186, 22, 2, 206, 178, 186, 22, - 2, 125, 146, 186, 22, 2, 125, 215, 186, 186, 22, 2, 74, 186, 22, 2, 251, - 64, 186, 22, 2, 78, 186, 22, 2, 250, 34, 186, 2, 247, 52, 186, 2, 250, - 180, 186, 2, 205, 199, 186, 2, 205, 204, 186, 2, 221, 51, 186, 2, 212, - 157, 186, 244, 166, 186, 52, 244, 166, 186, 213, 131, 243, 85, 186, 213, - 131, 142, 186, 216, 98, 225, 92, 186, 216, 98, 225, 91, 186, 216, 98, - 225, 90, 186, 241, 84, 76, 209, 113, 82, 186, 214, 168, 131, 3, 208, 80, - 25, 207, 92, 219, 232, 186, 214, 168, 131, 3, 208, 80, 25, 242, 83, 245, - 137, 186, 214, 168, 131, 3, 216, 163, 25, 242, 83, 245, 137, 186, 214, - 168, 131, 3, 216, 163, 25, 242, 83, 52, 245, 137, 186, 214, 168, 131, 3, - 216, 163, 25, 242, 83, 208, 70, 245, 137, 186, 214, 168, 131, 52, 215, - 252, 186, 214, 168, 131, 52, 215, 253, 3, 216, 162, 186, 214, 168, 131, - 3, 52, 245, 137, 186, 214, 168, 131, 3, 208, 70, 245, 137, 186, 214, 168, - 131, 3, 217, 58, 245, 137, 186, 214, 168, 131, 3, 213, 128, 245, 137, - 186, 214, 168, 131, 3, 246, 59, 25, 216, 162, 186, 214, 168, 131, 3, 246, - 59, 25, 120, 241, 86, 186, 214, 168, 131, 3, 246, 59, 25, 239, 147, 241, - 86, 186, 1, 209, 32, 250, 255, 75, 186, 1, 207, 136, 250, 255, 75, 186, - 1, 207, 136, 250, 255, 231, 83, 186, 1, 250, 255, 68, 186, 22, 2, 250, - 255, 68, 186, 22, 2, 250, 255, 206, 178, 224, 74, 1, 63, 224, 74, 1, 252, - 25, 224, 74, 1, 75, 224, 74, 1, 231, 83, 224, 74, 1, 68, 224, 74, 1, 206, - 178, 224, 74, 1, 125, 146, 224, 74, 1, 125, 215, 186, 224, 74, 1, 125, - 159, 224, 74, 1, 125, 227, 78, 224, 74, 1, 74, 224, 74, 1, 251, 64, 224, - 74, 1, 78, 224, 74, 1, 250, 34, 224, 74, 1, 173, 224, 74, 1, 229, 144, - 224, 74, 1, 239, 8, 224, 74, 1, 238, 119, 224, 74, 1, 222, 203, 224, 74, - 1, 247, 92, 224, 74, 1, 246, 199, 224, 74, 1, 230, 181, 224, 74, 1, 230, - 149, 224, 74, 1, 221, 11, 224, 74, 1, 207, 241, 224, 74, 1, 207, 229, - 224, 74, 1, 244, 120, 224, 74, 1, 244, 104, 224, 74, 1, 221, 227, 224, - 74, 1, 210, 22, 224, 74, 1, 209, 108, 224, 74, 1, 244, 212, 224, 74, 1, - 244, 1, 224, 74, 1, 201, 201, 224, 74, 1, 185, 224, 74, 1, 218, 208, 224, - 74, 1, 249, 32, 224, 74, 1, 248, 98, 224, 74, 1, 192, 224, 74, 1, 198, - 224, 74, 1, 216, 220, 224, 74, 1, 228, 113, 224, 74, 1, 206, 86, 224, 74, - 1, 213, 90, 224, 74, 1, 211, 164, 224, 74, 1, 215, 36, 224, 74, 1, 152, - 224, 74, 1, 227, 77, 224, 74, 22, 2, 252, 25, 224, 74, 22, 2, 75, 224, - 74, 22, 2, 231, 83, 224, 74, 22, 2, 68, 224, 74, 22, 2, 206, 178, 224, - 74, 22, 2, 125, 146, 224, 74, 22, 2, 125, 215, 186, 224, 74, 22, 2, 125, - 159, 224, 74, 22, 2, 125, 227, 78, 224, 74, 22, 2, 74, 224, 74, 22, 2, - 251, 64, 224, 74, 22, 2, 78, 224, 74, 22, 2, 250, 34, 224, 74, 2, 250, - 180, 224, 74, 2, 205, 199, 224, 74, 2, 205, 204, 224, 74, 2, 250, 123, - 224, 74, 244, 166, 224, 74, 52, 244, 166, 224, 74, 251, 146, 54, 224, 74, - 2, 236, 0, 224, 74, 17, 202, 84, 224, 74, 17, 105, 224, 74, 17, 108, 224, - 74, 17, 147, 224, 74, 17, 149, 224, 74, 17, 170, 224, 74, 17, 195, 224, - 74, 17, 213, 111, 224, 74, 17, 199, 224, 74, 17, 222, 63, 209, 239, 1, - 63, 209, 239, 1, 252, 25, 209, 239, 1, 75, 209, 239, 1, 231, 83, 209, - 239, 1, 68, 209, 239, 1, 206, 178, 209, 239, 1, 74, 209, 239, 1, 251, 64, - 209, 239, 1, 78, 209, 239, 1, 250, 34, 209, 239, 1, 173, 209, 239, 1, - 229, 144, 209, 239, 1, 239, 8, 209, 239, 1, 238, 119, 209, 239, 1, 222, - 203, 209, 239, 1, 247, 92, 209, 239, 1, 246, 199, 209, 239, 1, 230, 181, - 209, 239, 1, 230, 149, 209, 239, 1, 221, 11, 209, 239, 1, 207, 241, 209, - 239, 1, 207, 229, 209, 239, 1, 244, 120, 209, 239, 1, 244, 104, 209, 239, - 1, 221, 227, 209, 239, 1, 210, 22, 209, 239, 1, 209, 108, 209, 239, 1, - 244, 212, 209, 239, 1, 244, 1, 209, 239, 1, 201, 201, 209, 239, 1, 185, - 209, 239, 1, 218, 208, 209, 239, 1, 249, 32, 209, 239, 1, 248, 98, 209, - 239, 1, 192, 209, 239, 1, 198, 209, 239, 1, 216, 220, 209, 239, 1, 228, - 113, 209, 239, 1, 206, 86, 209, 239, 1, 213, 90, 209, 239, 1, 215, 36, - 209, 239, 1, 152, 209, 239, 1, 215, 185, 209, 239, 2, 250, 180, 209, 239, - 2, 205, 199, 209, 239, 22, 2, 252, 25, 209, 239, 22, 2, 75, 209, 239, 22, - 2, 231, 83, 209, 239, 22, 2, 68, 209, 239, 22, 2, 206, 178, 209, 239, 22, - 2, 74, 209, 239, 22, 2, 251, 64, 209, 239, 22, 2, 78, 209, 239, 22, 2, - 250, 34, 209, 239, 2, 205, 204, 209, 239, 2, 221, 51, 209, 239, 17, 202, - 84, 209, 239, 17, 105, 209, 239, 17, 108, 209, 239, 17, 147, 209, 239, - 17, 149, 209, 239, 17, 170, 209, 239, 17, 195, 209, 239, 17, 213, 111, - 209, 239, 17, 199, 209, 239, 17, 222, 63, 251, 68, 1, 173, 251, 68, 1, - 229, 144, 251, 68, 1, 222, 203, 251, 68, 1, 201, 201, 251, 68, 1, 210, - 22, 251, 68, 1, 250, 255, 210, 22, 251, 68, 1, 185, 251, 68, 1, 218, 208, - 251, 68, 1, 249, 32, 251, 68, 1, 192, 251, 68, 1, 230, 181, 251, 68, 1, - 246, 199, 251, 68, 1, 209, 108, 251, 68, 1, 216, 220, 251, 68, 1, 228, - 113, 251, 68, 1, 215, 36, 251, 68, 1, 221, 11, 251, 68, 1, 152, 251, 68, - 1, 63, 251, 68, 1, 244, 212, 251, 68, 1, 244, 1, 251, 68, 1, 239, 8, 251, - 68, 1, 250, 255, 239, 8, 251, 68, 1, 238, 119, 251, 68, 1, 248, 98, 251, - 68, 1, 230, 149, 251, 68, 109, 2, 174, 228, 113, 251, 68, 109, 2, 174, - 216, 220, 251, 68, 109, 2, 174, 227, 135, 216, 220, 251, 68, 22, 2, 63, - 251, 68, 22, 2, 252, 25, 251, 68, 22, 2, 75, 251, 68, 22, 2, 231, 83, - 251, 68, 22, 2, 68, 251, 68, 22, 2, 206, 178, 251, 68, 22, 2, 74, 251, - 68, 22, 2, 250, 13, 251, 68, 22, 2, 78, 251, 68, 22, 2, 251, 64, 251, 68, - 22, 2, 250, 247, 251, 68, 2, 229, 86, 251, 68, 17, 202, 84, 251, 68, 17, - 105, 251, 68, 17, 108, 251, 68, 17, 147, 251, 68, 17, 149, 251, 68, 17, - 170, 251, 68, 17, 195, 251, 68, 17, 213, 111, 251, 68, 17, 199, 251, 68, - 17, 222, 63, 251, 68, 42, 209, 152, 251, 68, 42, 207, 151, 251, 68, 2, 5, - 214, 167, 251, 68, 2, 214, 167, 251, 68, 2, 215, 136, 251, 68, 16, 205, - 230, 204, 92, 246, 48, 6, 1, 222, 202, 204, 92, 246, 48, 6, 1, 63, 204, - 92, 246, 48, 6, 1, 204, 30, 204, 92, 246, 48, 6, 1, 202, 213, 204, 92, - 246, 48, 6, 1, 198, 204, 92, 246, 48, 6, 1, 202, 247, 204, 92, 246, 48, - 6, 1, 231, 83, 204, 92, 246, 48, 6, 1, 206, 178, 204, 92, 246, 48, 6, 1, - 74, 204, 92, 246, 48, 6, 1, 78, 204, 92, 246, 48, 6, 1, 250, 223, 204, - 92, 246, 48, 6, 1, 239, 8, 204, 92, 246, 48, 6, 1, 229, 26, 204, 92, 246, - 48, 6, 1, 241, 56, 204, 92, 246, 48, 6, 1, 202, 197, 204, 92, 246, 48, 6, - 1, 207, 31, 204, 92, 246, 48, 6, 1, 241, 75, 204, 92, 246, 48, 6, 1, 220, - 76, 204, 92, 246, 48, 6, 1, 207, 236, 204, 92, 246, 48, 6, 1, 221, 37, - 204, 92, 246, 48, 6, 1, 244, 212, 204, 92, 246, 48, 6, 1, 250, 49, 204, - 92, 246, 48, 6, 1, 250, 247, 204, 92, 246, 48, 6, 1, 247, 193, 204, 92, - 246, 48, 6, 1, 217, 191, 204, 92, 246, 48, 6, 1, 236, 228, 204, 92, 246, - 48, 6, 1, 236, 124, 204, 92, 246, 48, 6, 1, 236, 51, 204, 92, 246, 48, 6, - 1, 237, 92, 204, 92, 246, 48, 6, 1, 211, 116, 204, 92, 246, 48, 6, 1, - 212, 142, 204, 92, 246, 48, 6, 1, 205, 190, 204, 92, 246, 48, 5, 1, 222, - 202, 204, 92, 246, 48, 5, 1, 63, 204, 92, 246, 48, 5, 1, 204, 30, 204, - 92, 246, 48, 5, 1, 202, 213, 204, 92, 246, 48, 5, 1, 198, 204, 92, 246, - 48, 5, 1, 202, 247, 204, 92, 246, 48, 5, 1, 231, 83, 204, 92, 246, 48, 5, - 1, 206, 178, 204, 92, 246, 48, 5, 1, 74, 204, 92, 246, 48, 5, 1, 78, 204, - 92, 246, 48, 5, 1, 250, 223, 204, 92, 246, 48, 5, 1, 239, 8, 204, 92, - 246, 48, 5, 1, 229, 26, 204, 92, 246, 48, 5, 1, 241, 56, 204, 92, 246, - 48, 5, 1, 202, 197, 204, 92, 246, 48, 5, 1, 207, 31, 204, 92, 246, 48, 5, - 1, 241, 75, 204, 92, 246, 48, 5, 1, 220, 76, 204, 92, 246, 48, 5, 1, 207, - 236, 204, 92, 246, 48, 5, 1, 221, 37, 204, 92, 246, 48, 5, 1, 244, 212, - 204, 92, 246, 48, 5, 1, 250, 49, 204, 92, 246, 48, 5, 1, 250, 247, 204, - 92, 246, 48, 5, 1, 247, 193, 204, 92, 246, 48, 5, 1, 217, 191, 204, 92, - 246, 48, 5, 1, 236, 228, 204, 92, 246, 48, 5, 1, 236, 124, 204, 92, 246, - 48, 5, 1, 236, 51, 204, 92, 246, 48, 5, 1, 237, 92, 204, 92, 246, 48, 5, - 1, 211, 116, 204, 92, 246, 48, 5, 1, 212, 142, 204, 92, 246, 48, 5, 1, - 205, 190, 204, 92, 246, 48, 17, 202, 84, 204, 92, 246, 48, 17, 105, 204, - 92, 246, 48, 17, 108, 204, 92, 246, 48, 17, 147, 204, 92, 246, 48, 17, - 149, 204, 92, 246, 48, 17, 170, 204, 92, 246, 48, 17, 195, 204, 92, 246, - 48, 17, 213, 111, 204, 92, 246, 48, 17, 199, 204, 92, 246, 48, 17, 222, - 63, 204, 92, 246, 48, 42, 209, 152, 204, 92, 246, 48, 42, 207, 151, 204, - 92, 246, 48, 42, 209, 53, 204, 92, 246, 48, 42, 239, 153, 204, 92, 246, - 48, 42, 240, 18, 204, 92, 246, 48, 42, 212, 74, 204, 92, 246, 48, 42, - 213, 105, 204, 92, 246, 48, 42, 241, 134, 204, 92, 246, 48, 42, 222, 58, - 204, 92, 246, 48, 220, 39, 219, 49, 246, 66, 237, 77, 1, 185, 219, 49, - 246, 66, 237, 77, 1, 173, 219, 49, 246, 66, 237, 77, 1, 228, 113, 219, - 49, 246, 66, 237, 77, 1, 192, 219, 49, 246, 66, 237, 77, 1, 244, 212, - 219, 49, 246, 66, 237, 77, 1, 202, 116, 219, 49, 246, 66, 237, 77, 1, - 206, 86, 219, 49, 246, 66, 237, 77, 1, 222, 203, 219, 49, 246, 66, 237, - 77, 1, 152, 219, 49, 246, 66, 237, 77, 1, 239, 8, 219, 49, 246, 66, 237, - 77, 1, 229, 144, 219, 49, 246, 66, 237, 77, 1, 215, 36, 219, 49, 246, 66, - 237, 77, 1, 249, 32, 219, 49, 246, 66, 237, 77, 1, 247, 92, 219, 49, 246, - 66, 237, 77, 1, 210, 22, 219, 49, 246, 66, 237, 77, 1, 209, 108, 219, 49, - 246, 66, 237, 77, 1, 201, 201, 219, 49, 246, 66, 237, 77, 1, 218, 208, - 219, 49, 246, 66, 237, 77, 1, 216, 220, 219, 49, 246, 66, 237, 77, 1, - 240, 108, 219, 49, 246, 66, 237, 77, 1, 246, 199, 219, 49, 246, 66, 237, - 77, 1, 63, 219, 49, 246, 66, 237, 77, 1, 74, 219, 49, 246, 66, 237, 77, - 1, 75, 219, 49, 246, 66, 237, 77, 1, 78, 219, 49, 246, 66, 237, 77, 1, - 68, 219, 49, 246, 66, 237, 77, 1, 207, 39, 219, 49, 246, 66, 237, 77, 1, - 235, 171, 219, 49, 246, 66, 237, 77, 1, 46, 219, 184, 219, 49, 246, 66, - 237, 77, 1, 46, 230, 54, 219, 49, 246, 66, 237, 77, 1, 46, 210, 69, 219, - 49, 246, 66, 237, 77, 1, 46, 226, 185, 219, 49, 246, 66, 237, 77, 1, 46, - 223, 163, 219, 49, 246, 66, 237, 77, 1, 46, 159, 219, 49, 246, 66, 237, - 77, 1, 46, 204, 144, 219, 49, 246, 66, 237, 77, 1, 46, 222, 205, 219, 49, - 246, 66, 237, 77, 1, 46, 203, 124, 219, 49, 246, 66, 237, 77, 215, 245, - 143, 227, 28, 219, 49, 246, 66, 237, 77, 215, 245, 208, 161, 219, 49, - 246, 66, 237, 77, 214, 239, 238, 45, 211, 61, 219, 49, 246, 66, 237, 77, - 215, 245, 143, 163, 240, 5, 219, 49, 246, 66, 237, 77, 215, 245, 143, - 240, 5, 219, 49, 246, 66, 237, 77, 214, 239, 238, 45, 211, 62, 240, 5, - 219, 49, 246, 66, 237, 77, 214, 239, 143, 227, 28, 219, 49, 246, 66, 237, - 77, 214, 239, 208, 161, 219, 49, 246, 66, 237, 77, 214, 239, 143, 163, - 240, 5, 219, 49, 246, 66, 237, 77, 214, 239, 143, 240, 5, 219, 49, 246, - 66, 237, 77, 224, 149, 208, 161, 219, 49, 246, 66, 237, 77, 238, 45, 211, - 62, 206, 68, 219, 49, 246, 66, 237, 77, 224, 149, 143, 163, 240, 5, 219, - 49, 246, 66, 237, 77, 224, 149, 143, 240, 5, 219, 49, 246, 66, 237, 77, - 226, 254, 143, 227, 28, 219, 49, 246, 66, 237, 77, 226, 254, 208, 161, - 219, 49, 246, 66, 237, 77, 238, 45, 211, 61, 219, 49, 246, 66, 237, 77, - 226, 254, 143, 163, 240, 5, 219, 49, 246, 66, 237, 77, 226, 254, 143, - 240, 5, 219, 49, 246, 66, 237, 77, 238, 45, 211, 62, 240, 5, 9, 2, 63, 9, - 2, 34, 23, 63, 9, 2, 34, 23, 249, 15, 9, 2, 34, 23, 238, 233, 209, 141, - 9, 2, 34, 23, 152, 9, 2, 34, 23, 231, 85, 9, 2, 34, 23, 228, 93, 237, - 208, 9, 2, 34, 23, 223, 199, 9, 2, 34, 23, 215, 22, 9, 2, 254, 34, 9, 2, - 251, 232, 9, 2, 251, 233, 23, 250, 73, 9, 2, 251, 233, 23, 242, 30, 237, - 208, 9, 2, 251, 233, 23, 238, 246, 9, 2, 251, 233, 23, 238, 233, 209, - 141, 9, 2, 251, 233, 23, 152, 9, 2, 251, 233, 23, 231, 86, 237, 208, 9, - 2, 251, 233, 23, 231, 59, 9, 2, 251, 233, 23, 228, 94, 9, 2, 251, 233, - 23, 213, 27, 9, 2, 251, 233, 23, 106, 91, 106, 91, 68, 9, 2, 251, 233, - 237, 208, 9, 2, 251, 149, 9, 2, 251, 150, 23, 248, 252, 9, 2, 251, 150, - 23, 238, 233, 209, 141, 9, 2, 251, 150, 23, 225, 21, 91, 241, 92, 9, 2, - 251, 150, 23, 213, 88, 9, 2, 251, 150, 23, 209, 242, 9, 2, 251, 122, 9, - 2, 251, 47, 9, 2, 251, 48, 23, 241, 22, 9, 2, 251, 48, 23, 212, 245, 91, - 238, 55, 9, 2, 251, 39, 9, 2, 251, 40, 23, 251, 39, 9, 2, 251, 40, 23, - 243, 186, 9, 2, 251, 40, 23, 238, 55, 9, 2, 251, 40, 23, 152, 9, 2, 251, - 40, 23, 230, 27, 9, 2, 251, 40, 23, 229, 100, 9, 2, 251, 40, 23, 213, 43, - 9, 2, 251, 40, 23, 206, 186, 9, 2, 251, 36, 9, 2, 251, 28, 9, 2, 250, - 243, 9, 2, 250, 244, 23, 213, 43, 9, 2, 250, 231, 9, 2, 250, 232, 115, - 250, 231, 9, 2, 250, 232, 126, 208, 219, 9, 2, 250, 232, 91, 223, 97, - 219, 251, 250, 232, 91, 223, 96, 9, 2, 250, 232, 91, 223, 97, 211, 176, - 9, 2, 250, 200, 9, 2, 250, 170, 9, 2, 250, 138, 9, 2, 250, 139, 23, 228, - 183, 9, 2, 250, 110, 9, 2, 250, 80, 9, 2, 250, 75, 9, 2, 250, 76, 202, - 35, 209, 141, 9, 2, 250, 76, 230, 31, 209, 141, 9, 2, 250, 76, 115, 250, - 76, 207, 198, 115, 207, 198, 207, 198, 115, 207, 198, 219, 96, 9, 2, 250, - 76, 115, 250, 76, 115, 250, 75, 9, 2, 250, 76, 115, 250, 76, 115, 250, - 76, 245, 124, 250, 76, 115, 250, 76, 115, 250, 75, 9, 2, 250, 73, 9, 2, - 250, 69, 9, 2, 249, 32, 9, 2, 249, 15, 9, 2, 249, 9, 9, 2, 249, 3, 9, 2, - 248, 253, 9, 2, 248, 254, 115, 248, 253, 9, 2, 248, 252, 9, 2, 142, 9, 2, - 248, 230, 9, 2, 248, 86, 9, 2, 248, 87, 23, 63, 9, 2, 248, 87, 23, 238, - 224, 9, 2, 248, 87, 23, 231, 86, 237, 208, 9, 2, 247, 193, 9, 2, 247, - 194, 115, 247, 194, 251, 232, 9, 2, 247, 194, 115, 247, 194, 206, 255, 9, - 2, 247, 194, 245, 124, 247, 193, 9, 2, 247, 171, 9, 2, 247, 172, 115, - 247, 171, 9, 2, 247, 160, 9, 2, 247, 159, 9, 2, 244, 212, 9, 2, 244, 203, - 9, 2, 244, 204, 229, 69, 23, 34, 91, 225, 79, 9, 2, 244, 204, 229, 69, - 23, 250, 243, 9, 2, 244, 204, 229, 69, 23, 248, 252, 9, 2, 244, 204, 229, - 69, 23, 248, 86, 9, 2, 244, 204, 229, 69, 23, 239, 8, 9, 2, 244, 204, - 229, 69, 23, 239, 9, 91, 225, 79, 9, 2, 244, 204, 229, 69, 23, 238, 81, - 9, 2, 244, 204, 229, 69, 23, 238, 63, 9, 2, 244, 204, 229, 69, 23, 237, - 219, 9, 2, 244, 204, 229, 69, 23, 152, 9, 2, 244, 204, 229, 69, 23, 230, - 224, 9, 2, 244, 204, 229, 69, 23, 230, 225, 91, 226, 239, 9, 2, 244, 204, - 229, 69, 23, 230, 12, 9, 2, 244, 204, 229, 69, 23, 228, 113, 9, 2, 244, - 204, 229, 69, 23, 226, 239, 9, 2, 244, 204, 229, 69, 23, 226, 240, 91, - 225, 78, 9, 2, 244, 204, 229, 69, 23, 226, 222, 9, 2, 244, 204, 229, 69, - 23, 222, 240, 9, 2, 244, 204, 229, 69, 23, 219, 97, 91, 219, 96, 9, 2, - 244, 204, 229, 69, 23, 212, 162, 9, 2, 244, 204, 229, 69, 23, 209, 242, - 9, 2, 244, 204, 229, 69, 23, 207, 41, 91, 238, 63, 9, 2, 244, 204, 229, - 69, 23, 206, 186, 9, 2, 244, 175, 9, 2, 244, 154, 9, 2, 244, 153, 9, 2, - 244, 152, 9, 2, 243, 233, 9, 2, 243, 215, 9, 2, 243, 188, 9, 2, 243, 189, - 23, 213, 43, 9, 2, 243, 186, 9, 2, 243, 176, 9, 2, 243, 177, 229, 232, - 106, 237, 209, 243, 156, 9, 2, 243, 156, 9, 2, 242, 42, 9, 2, 242, 43, - 115, 242, 42, 9, 2, 242, 43, 237, 208, 9, 2, 242, 43, 213, 24, 9, 2, 242, - 40, 9, 2, 242, 41, 23, 241, 4, 9, 2, 242, 39, 9, 2, 242, 37, 9, 2, 242, - 36, 9, 2, 242, 35, 9, 2, 242, 31, 9, 2, 242, 29, 9, 2, 242, 30, 237, 208, - 9, 2, 242, 30, 237, 209, 237, 208, 9, 2, 242, 28, 9, 2, 242, 21, 9, 2, - 74, 9, 2, 188, 23, 219, 96, 9, 2, 188, 115, 188, 221, 41, 115, 221, 40, - 9, 2, 241, 190, 9, 2, 241, 191, 23, 34, 91, 237, 160, 91, 244, 212, 9, 2, - 241, 191, 23, 238, 224, 9, 2, 241, 191, 23, 224, 155, 9, 2, 241, 191, 23, - 215, 8, 9, 2, 241, 191, 23, 213, 43, 9, 2, 241, 191, 23, 68, 9, 2, 241, - 163, 9, 2, 241, 151, 9, 2, 241, 122, 9, 2, 241, 92, 9, 2, 241, 93, 23, - 238, 232, 9, 2, 241, 93, 23, 238, 233, 209, 141, 9, 2, 241, 93, 23, 225, - 20, 9, 2, 241, 93, 245, 124, 241, 92, 9, 2, 241, 93, 219, 251, 241, 92, - 9, 2, 241, 93, 211, 176, 9, 2, 241, 25, 9, 2, 241, 22, 9, 2, 241, 4, 9, - 2, 240, 179, 9, 2, 240, 180, 23, 63, 9, 2, 240, 180, 23, 34, 91, 228, 30, - 9, 2, 240, 180, 23, 34, 91, 228, 31, 23, 228, 30, 9, 2, 240, 180, 23, - 250, 231, 9, 2, 240, 180, 23, 249, 15, 9, 2, 240, 180, 23, 242, 30, 237, - 208, 9, 2, 240, 180, 23, 242, 30, 237, 209, 237, 208, 9, 2, 240, 180, 23, - 152, 9, 2, 240, 180, 23, 237, 160, 237, 208, 9, 2, 240, 180, 23, 231, 86, - 237, 208, 9, 2, 240, 180, 23, 229, 231, 9, 2, 240, 180, 23, 229, 232, - 211, 176, 9, 2, 240, 180, 23, 228, 207, 9, 2, 240, 180, 23, 228, 113, 9, - 2, 240, 180, 23, 228, 31, 23, 228, 30, 9, 2, 240, 180, 23, 227, 148, 9, - 2, 240, 180, 23, 226, 239, 9, 2, 240, 180, 23, 207, 40, 9, 2, 240, 180, - 23, 207, 29, 9, 2, 239, 8, 9, 2, 239, 9, 237, 208, 9, 2, 239, 6, 9, 2, - 239, 7, 23, 34, 91, 244, 213, 91, 152, 9, 2, 239, 7, 23, 34, 91, 152, 9, - 2, 239, 7, 23, 34, 91, 231, 85, 9, 2, 239, 7, 23, 251, 150, 209, 142, 91, - 210, 10, 9, 2, 239, 7, 23, 250, 231, 9, 2, 239, 7, 23, 250, 75, 9, 2, - 239, 7, 23, 250, 74, 91, 238, 246, 9, 2, 239, 7, 23, 249, 15, 9, 2, 239, - 7, 23, 248, 231, 91, 216, 220, 9, 2, 239, 7, 23, 247, 160, 9, 2, 239, 7, - 23, 247, 161, 91, 216, 220, 9, 2, 239, 7, 23, 244, 212, 9, 2, 239, 7, 23, - 243, 233, 9, 2, 239, 7, 23, 243, 189, 23, 213, 43, 9, 2, 239, 7, 23, 242, - 40, 9, 2, 239, 7, 23, 241, 122, 9, 2, 239, 7, 23, 241, 123, 91, 228, 113, - 9, 2, 239, 7, 23, 241, 92, 9, 2, 239, 7, 23, 241, 93, 23, 238, 233, 209, - 141, 9, 2, 239, 7, 23, 238, 233, 209, 141, 9, 2, 239, 7, 23, 238, 224, 9, - 2, 239, 7, 23, 238, 81, 9, 2, 239, 7, 23, 238, 79, 9, 2, 239, 7, 23, 238, - 80, 91, 63, 9, 2, 239, 7, 23, 238, 64, 91, 211, 10, 9, 2, 239, 7, 23, - 237, 160, 91, 226, 240, 91, 241, 4, 9, 2, 239, 7, 23, 237, 140, 9, 2, - 239, 7, 23, 237, 141, 91, 228, 113, 9, 2, 239, 7, 23, 237, 4, 91, 227, - 148, 9, 2, 239, 7, 23, 236, 21, 9, 2, 239, 7, 23, 231, 86, 237, 208, 9, - 2, 239, 7, 23, 230, 210, 91, 236, 27, 91, 250, 75, 9, 2, 239, 7, 23, 230, - 12, 9, 2, 239, 7, 23, 229, 231, 9, 2, 239, 7, 23, 229, 94, 9, 2, 239, 7, - 23, 229, 95, 91, 228, 30, 9, 2, 239, 7, 23, 228, 208, 91, 250, 231, 9, 2, - 239, 7, 23, 228, 113, 9, 2, 239, 7, 23, 225, 21, 91, 241, 92, 9, 2, 239, - 7, 23, 224, 155, 9, 2, 239, 7, 23, 221, 40, 9, 2, 239, 7, 23, 221, 41, - 115, 221, 40, 9, 2, 239, 7, 23, 185, 9, 2, 239, 7, 23, 215, 8, 9, 2, 239, - 7, 23, 214, 230, 9, 2, 239, 7, 23, 213, 43, 9, 2, 239, 7, 23, 213, 44, - 91, 207, 181, 9, 2, 239, 7, 23, 213, 9, 9, 2, 239, 7, 23, 210, 220, 9, 2, - 239, 7, 23, 209, 242, 9, 2, 239, 7, 23, 68, 9, 2, 239, 7, 23, 207, 29, 9, - 2, 239, 7, 23, 207, 30, 91, 242, 42, 9, 2, 239, 7, 115, 239, 6, 9, 2, - 239, 1, 9, 2, 239, 2, 245, 124, 239, 1, 9, 2, 238, 255, 9, 2, 239, 0, - 115, 239, 0, 238, 225, 115, 238, 224, 9, 2, 238, 246, 9, 2, 238, 247, - 239, 0, 115, 239, 0, 238, 225, 115, 238, 224, 9, 2, 238, 245, 9, 2, 238, - 243, 9, 2, 238, 234, 9, 2, 238, 232, 9, 2, 238, 233, 209, 141, 9, 2, 238, - 233, 115, 238, 232, 9, 2, 238, 233, 245, 124, 238, 232, 9, 2, 238, 224, - 9, 2, 238, 223, 9, 2, 238, 218, 9, 2, 238, 162, 9, 2, 238, 163, 23, 228, - 183, 9, 2, 238, 81, 9, 2, 238, 82, 23, 74, 9, 2, 238, 82, 23, 68, 9, 2, - 238, 82, 245, 124, 238, 81, 9, 2, 238, 79, 9, 2, 238, 80, 115, 238, 79, - 9, 2, 238, 80, 245, 124, 238, 79, 9, 2, 238, 76, 9, 2, 238, 63, 9, 2, - 238, 64, 237, 208, 9, 2, 238, 61, 9, 2, 238, 62, 23, 34, 91, 231, 85, 9, - 2, 238, 62, 23, 238, 233, 209, 141, 9, 2, 238, 62, 23, 231, 85, 9, 2, - 238, 62, 23, 226, 240, 91, 231, 85, 9, 2, 238, 62, 23, 185, 9, 2, 238, - 57, 9, 2, 238, 55, 9, 2, 238, 56, 245, 124, 238, 55, 9, 2, 238, 56, 23, - 249, 15, 9, 2, 238, 56, 23, 209, 242, 9, 2, 238, 56, 209, 141, 9, 2, 237, - 230, 9, 2, 237, 231, 245, 124, 237, 230, 9, 2, 237, 228, 9, 2, 237, 229, - 23, 230, 12, 9, 2, 237, 229, 23, 230, 13, 23, 231, 86, 237, 208, 9, 2, - 237, 229, 23, 221, 40, 9, 2, 237, 229, 23, 215, 9, 91, 207, 197, 9, 2, - 237, 229, 237, 208, 9, 2, 237, 219, 9, 2, 237, 220, 23, 34, 91, 228, 183, - 9, 2, 237, 220, 23, 228, 183, 9, 2, 237, 220, 115, 237, 220, 226, 230, 9, - 2, 237, 212, 9, 2, 237, 210, 9, 2, 237, 211, 23, 213, 43, 9, 2, 237, 202, - 9, 2, 237, 201, 9, 2, 237, 197, 9, 2, 237, 196, 9, 2, 152, 9, 2, 237, - 160, 209, 141, 9, 2, 237, 160, 237, 208, 9, 2, 237, 140, 9, 2, 237, 3, 9, - 2, 237, 4, 23, 250, 75, 9, 2, 237, 4, 23, 250, 73, 9, 2, 237, 4, 23, 249, - 15, 9, 2, 237, 4, 23, 243, 156, 9, 2, 237, 4, 23, 238, 255, 9, 2, 237, 4, - 23, 229, 84, 9, 2, 237, 4, 23, 221, 40, 9, 2, 237, 4, 23, 213, 43, 9, 2, - 237, 4, 23, 68, 9, 2, 236, 26, 9, 2, 236, 21, 9, 2, 236, 22, 23, 250, - 231, 9, 2, 236, 22, 23, 237, 140, 9, 2, 236, 22, 23, 229, 231, 9, 2, 236, - 22, 23, 227, 92, 9, 2, 236, 22, 23, 207, 29, 9, 2, 236, 17, 9, 2, 75, 9, - 2, 235, 206, 63, 9, 2, 235, 166, 9, 2, 231, 113, 9, 2, 231, 114, 115, - 231, 114, 247, 160, 9, 2, 231, 114, 115, 231, 114, 211, 176, 9, 2, 231, - 88, 9, 2, 231, 85, 9, 2, 231, 86, 243, 215, 9, 2, 231, 86, 216, 57, 9, 2, - 231, 86, 115, 231, 86, 212, 249, 115, 212, 249, 207, 30, 115, 207, 29, 9, - 2, 231, 86, 237, 208, 9, 2, 231, 77, 9, 2, 231, 78, 23, 238, 233, 209, - 141, 9, 2, 231, 76, 9, 2, 231, 66, 9, 2, 231, 67, 23, 209, 242, 9, 2, - 231, 67, 245, 124, 231, 66, 9, 2, 231, 67, 219, 251, 231, 66, 9, 2, 231, - 67, 211, 176, 9, 2, 231, 59, 9, 2, 231, 49, 9, 2, 230, 224, 9, 2, 230, - 209, 9, 2, 173, 9, 2, 230, 44, 23, 63, 9, 2, 230, 44, 23, 251, 122, 9, 2, - 230, 44, 23, 251, 123, 91, 228, 207, 9, 2, 230, 44, 23, 250, 73, 9, 2, - 230, 44, 23, 249, 15, 9, 2, 230, 44, 23, 248, 252, 9, 2, 230, 44, 23, - 142, 9, 2, 230, 44, 23, 248, 86, 9, 2, 230, 44, 23, 241, 22, 9, 2, 230, - 44, 23, 241, 4, 9, 2, 230, 44, 23, 239, 8, 9, 2, 230, 44, 23, 238, 246, - 9, 2, 230, 44, 23, 238, 233, 209, 141, 9, 2, 230, 44, 23, 238, 224, 9, 2, - 230, 44, 23, 238, 225, 91, 213, 89, 91, 63, 9, 2, 230, 44, 23, 238, 81, - 9, 2, 230, 44, 23, 238, 63, 9, 2, 230, 44, 23, 238, 56, 91, 214, 230, 9, - 2, 230, 44, 23, 238, 56, 245, 124, 238, 55, 9, 2, 230, 44, 23, 237, 230, - 9, 2, 230, 44, 23, 237, 201, 9, 2, 230, 44, 23, 231, 85, 9, 2, 230, 44, - 23, 231, 66, 9, 2, 230, 44, 23, 230, 12, 9, 2, 230, 44, 23, 229, 100, 9, - 2, 230, 44, 23, 229, 94, 9, 2, 230, 44, 23, 227, 148, 9, 2, 230, 44, 23, - 226, 239, 9, 2, 230, 44, 23, 225, 20, 9, 2, 230, 44, 23, 225, 21, 91, - 242, 42, 9, 2, 230, 44, 23, 225, 21, 91, 238, 81, 9, 2, 230, 44, 23, 225, - 21, 91, 209, 187, 9, 2, 230, 44, 23, 224, 155, 9, 2, 230, 44, 23, 224, - 156, 91, 221, 35, 9, 2, 230, 44, 23, 222, 240, 9, 2, 230, 44, 23, 221, - 40, 9, 2, 230, 44, 23, 218, 167, 9, 2, 230, 44, 23, 215, 145, 9, 2, 230, - 44, 23, 215, 36, 9, 2, 230, 44, 23, 214, 230, 9, 2, 230, 44, 23, 213, 90, - 9, 2, 230, 44, 23, 213, 43, 9, 2, 230, 44, 23, 213, 9, 9, 2, 230, 44, 23, - 212, 199, 9, 2, 230, 44, 23, 212, 149, 9, 2, 230, 44, 23, 210, 229, 9, 2, - 230, 44, 23, 209, 218, 9, 2, 230, 44, 23, 68, 9, 2, 230, 44, 23, 207, 40, - 9, 2, 230, 44, 23, 207, 29, 9, 2, 230, 44, 23, 207, 2, 23, 185, 9, 2, - 230, 44, 23, 206, 186, 9, 2, 230, 44, 23, 202, 39, 9, 2, 230, 42, 9, 2, - 230, 43, 245, 124, 230, 42, 9, 2, 230, 32, 9, 2, 230, 29, 9, 2, 230, 27, - 9, 2, 230, 26, 9, 2, 230, 24, 9, 2, 230, 25, 115, 230, 24, 9, 2, 230, 12, - 9, 2, 230, 13, 23, 231, 86, 237, 208, 9, 2, 230, 8, 9, 2, 230, 9, 23, - 249, 15, 9, 2, 230, 9, 245, 124, 230, 8, 9, 2, 230, 6, 9, 2, 230, 5, 9, - 2, 229, 231, 9, 2, 229, 232, 228, 95, 23, 106, 115, 228, 95, 23, 68, 9, - 2, 229, 232, 115, 229, 232, 228, 95, 23, 106, 115, 228, 95, 23, 68, 9, 2, - 229, 171, 9, 2, 229, 100, 9, 2, 229, 101, 23, 249, 15, 9, 2, 229, 101, - 23, 68, 9, 2, 229, 101, 23, 207, 29, 9, 2, 229, 94, 9, 2, 229, 84, 9, 2, - 229, 71, 9, 2, 229, 70, 9, 2, 229, 68, 9, 2, 229, 69, 115, 229, 68, 9, 2, - 228, 209, 9, 2, 228, 210, 115, 237, 4, 23, 250, 74, 228, 210, 115, 237, - 4, 23, 250, 73, 9, 2, 228, 207, 9, 2, 228, 205, 9, 2, 228, 206, 206, 69, - 18, 9, 2, 228, 204, 9, 2, 228, 196, 9, 2, 228, 197, 237, 208, 9, 2, 228, - 195, 9, 2, 228, 183, 9, 2, 228, 184, 219, 251, 228, 183, 9, 2, 228, 177, - 9, 2, 228, 155, 9, 2, 228, 113, 9, 2, 228, 94, 9, 2, 228, 95, 23, 63, 9, - 2, 228, 95, 23, 34, 91, 244, 213, 91, 152, 9, 2, 228, 95, 23, 34, 91, - 238, 224, 9, 2, 228, 95, 23, 34, 91, 228, 30, 9, 2, 228, 95, 23, 251, 39, - 9, 2, 228, 95, 23, 250, 231, 9, 2, 228, 95, 23, 250, 76, 202, 35, 209, - 141, 9, 2, 228, 95, 23, 249, 15, 9, 2, 228, 95, 23, 248, 86, 9, 2, 228, - 95, 23, 244, 154, 9, 2, 228, 95, 23, 241, 92, 9, 2, 228, 95, 23, 239, 8, - 9, 2, 228, 95, 23, 238, 224, 9, 2, 228, 95, 23, 237, 219, 9, 2, 228, 95, - 23, 237, 220, 91, 237, 219, 9, 2, 228, 95, 23, 152, 9, 2, 228, 95, 23, - 237, 140, 9, 2, 228, 95, 23, 237, 4, 23, 221, 40, 9, 2, 228, 95, 23, 231, - 86, 237, 208, 9, 2, 228, 95, 23, 231, 66, 9, 2, 228, 95, 23, 231, 67, 91, - 152, 9, 2, 228, 95, 23, 231, 67, 91, 226, 239, 9, 2, 228, 95, 23, 229, - 100, 9, 2, 228, 95, 23, 229, 84, 9, 2, 228, 95, 23, 228, 207, 9, 2, 228, - 95, 23, 228, 196, 9, 2, 228, 95, 23, 228, 197, 91, 237, 4, 91, 63, 9, 2, - 228, 95, 23, 228, 94, 9, 2, 228, 95, 23, 227, 92, 9, 2, 228, 95, 23, 226, - 239, 9, 2, 228, 95, 23, 226, 224, 9, 2, 228, 95, 23, 225, 20, 9, 2, 228, - 95, 23, 225, 21, 91, 241, 92, 9, 2, 228, 95, 23, 223, 199, 9, 2, 228, 95, - 23, 222, 240, 9, 2, 228, 95, 23, 213, 44, 91, 210, 220, 9, 2, 228, 95, - 23, 212, 245, 91, 238, 56, 91, 241, 22, 9, 2, 228, 95, 23, 212, 245, 91, - 238, 56, 209, 141, 9, 2, 228, 95, 23, 212, 197, 9, 2, 228, 95, 23, 212, - 198, 91, 212, 197, 9, 2, 228, 95, 23, 210, 220, 9, 2, 228, 95, 23, 209, - 255, 9, 2, 228, 95, 23, 209, 242, 9, 2, 228, 95, 23, 209, 188, 91, 34, - 91, 211, 11, 91, 201, 201, 9, 2, 228, 95, 23, 68, 9, 2, 228, 95, 23, 106, - 91, 63, 9, 2, 228, 95, 23, 106, 91, 106, 91, 68, 9, 2, 228, 95, 23, 207, - 41, 91, 250, 75, 9, 2, 228, 95, 23, 207, 29, 9, 2, 228, 95, 23, 206, 186, - 9, 2, 228, 95, 211, 176, 9, 2, 228, 92, 9, 2, 228, 93, 23, 213, 43, 9, 2, - 228, 93, 23, 213, 44, 91, 210, 220, 9, 2, 228, 93, 237, 208, 9, 2, 228, - 93, 237, 209, 115, 228, 93, 237, 209, 213, 43, 9, 2, 228, 88, 9, 2, 228, - 30, 9, 2, 228, 31, 23, 228, 30, 9, 2, 228, 28, 9, 2, 228, 29, 23, 228, - 183, 9, 2, 228, 29, 23, 228, 184, 91, 215, 145, 9, 2, 227, 148, 9, 2, - 227, 129, 9, 2, 227, 117, 9, 2, 227, 92, 9, 2, 226, 239, 9, 2, 226, 240, - 23, 249, 15, 9, 2, 226, 237, 9, 2, 226, 238, 23, 251, 39, 9, 2, 226, 238, - 23, 249, 15, 9, 2, 226, 238, 23, 241, 4, 9, 2, 226, 238, 23, 241, 5, 209, - 141, 9, 2, 226, 238, 23, 238, 233, 209, 141, 9, 2, 226, 238, 23, 237, 4, - 23, 249, 15, 9, 2, 226, 238, 23, 231, 66, 9, 2, 226, 238, 23, 230, 29, 9, - 2, 226, 238, 23, 230, 27, 9, 2, 226, 238, 23, 230, 28, 91, 250, 75, 9, 2, - 226, 238, 23, 229, 100, 9, 2, 226, 238, 23, 228, 114, 91, 250, 75, 9, 2, - 226, 238, 23, 228, 94, 9, 2, 226, 238, 23, 225, 21, 91, 241, 92, 9, 2, - 226, 238, 23, 222, 240, 9, 2, 226, 238, 23, 221, 84, 9, 2, 226, 238, 23, - 212, 163, 91, 250, 75, 9, 2, 226, 238, 23, 212, 141, 91, 247, 193, 9, 2, - 226, 238, 23, 207, 197, 9, 2, 226, 238, 209, 141, 9, 2, 226, 238, 245, - 124, 226, 237, 9, 2, 226, 238, 219, 251, 226, 237, 9, 2, 226, 238, 211, - 176, 9, 2, 226, 238, 213, 24, 9, 2, 226, 236, 9, 2, 226, 230, 9, 2, 226, - 231, 115, 226, 230, 9, 2, 226, 231, 219, 251, 226, 230, 9, 2, 226, 231, - 213, 24, 9, 2, 226, 227, 9, 2, 226, 224, 9, 2, 226, 222, 9, 2, 226, 223, - 115, 226, 222, 9, 2, 226, 223, 115, 226, 223, 238, 225, 115, 238, 224, 9, - 2, 192, 9, 2, 225, 177, 23, 209, 242, 9, 2, 225, 177, 237, 208, 9, 2, - 225, 176, 9, 2, 225, 148, 9, 2, 225, 100, 9, 2, 225, 79, 9, 2, 225, 78, - 9, 2, 225, 20, 9, 2, 224, 228, 9, 2, 224, 155, 9, 2, 224, 110, 9, 2, 223, - 246, 9, 2, 223, 247, 115, 223, 246, 9, 2, 223, 235, 9, 2, 223, 236, 237, - 208, 9, 2, 223, 217, 9, 2, 223, 203, 9, 2, 223, 199, 9, 2, 223, 200, 23, - 63, 9, 2, 223, 200, 23, 228, 183, 9, 2, 223, 200, 23, 202, 116, 9, 2, - 223, 200, 115, 223, 199, 9, 2, 223, 200, 115, 223, 200, 23, 34, 91, 201, - 201, 9, 2, 223, 200, 245, 124, 223, 199, 9, 2, 223, 197, 9, 2, 223, 198, - 23, 63, 9, 2, 223, 198, 23, 34, 91, 243, 233, 9, 2, 223, 198, 23, 243, - 233, 9, 2, 223, 198, 237, 208, 9, 2, 201, 201, 9, 2, 223, 109, 9, 2, 223, - 96, 9, 2, 223, 97, 230, 238, 9, 2, 223, 97, 23, 212, 200, 209, 141, 9, 2, - 223, 97, 219, 251, 223, 96, 9, 2, 223, 95, 9, 2, 223, 88, 221, 26, 9, 2, - 223, 87, 9, 2, 223, 86, 9, 2, 222, 240, 9, 2, 222, 241, 23, 63, 9, 2, - 222, 241, 23, 207, 29, 9, 2, 222, 241, 213, 24, 9, 2, 222, 100, 9, 2, - 222, 101, 23, 74, 9, 2, 222, 99, 9, 2, 222, 69, 9, 2, 222, 70, 23, 238, - 233, 209, 141, 9, 2, 222, 70, 23, 238, 225, 91, 238, 233, 209, 141, 9, 2, - 222, 65, 9, 2, 222, 66, 23, 250, 231, 9, 2, 222, 66, 23, 250, 75, 9, 2, - 222, 66, 23, 250, 76, 91, 250, 75, 9, 2, 222, 66, 23, 237, 219, 9, 2, - 222, 66, 23, 225, 21, 91, 238, 233, 209, 141, 9, 2, 222, 66, 23, 222, - 240, 9, 2, 222, 66, 23, 221, 40, 9, 2, 222, 66, 23, 213, 43, 9, 2, 222, - 66, 23, 213, 44, 91, 34, 250, 231, 9, 2, 222, 66, 23, 213, 44, 91, 250, - 75, 9, 2, 222, 66, 23, 213, 44, 91, 250, 76, 91, 250, 75, 9, 2, 222, 66, - 23, 207, 41, 91, 250, 75, 9, 2, 222, 66, 23, 206, 186, 9, 2, 222, 53, 9, - 2, 221, 84, 9, 2, 221, 56, 9, 2, 221, 40, 9, 2, 221, 41, 228, 93, 23, - 238, 224, 9, 2, 221, 41, 228, 93, 23, 225, 79, 9, 2, 221, 41, 228, 93, - 23, 215, 8, 9, 2, 221, 41, 228, 93, 23, 215, 9, 115, 221, 41, 228, 93, - 23, 215, 8, 9, 2, 221, 41, 228, 93, 23, 206, 186, 9, 2, 221, 41, 209, - 141, 9, 2, 221, 41, 115, 221, 40, 9, 2, 221, 41, 245, 124, 221, 40, 9, 2, - 221, 41, 245, 124, 221, 41, 228, 93, 115, 228, 92, 9, 2, 221, 35, 9, 2, - 221, 36, 251, 150, 23, 250, 69, 9, 2, 221, 36, 251, 150, 23, 248, 86, 9, - 2, 221, 36, 251, 150, 23, 242, 37, 9, 2, 221, 36, 251, 150, 23, 237, 219, - 9, 2, 221, 36, 251, 150, 23, 231, 86, 237, 208, 9, 2, 221, 36, 251, 150, - 23, 230, 27, 9, 2, 221, 36, 251, 150, 23, 228, 113, 9, 2, 221, 36, 251, - 150, 23, 222, 240, 9, 2, 221, 36, 251, 150, 23, 212, 138, 9, 2, 221, 36, - 251, 150, 23, 207, 40, 9, 2, 221, 36, 229, 69, 23, 248, 86, 9, 2, 221, - 36, 229, 69, 23, 248, 87, 68, 9, 2, 185, 9, 2, 219, 159, 9, 2, 219, 122, - 9, 2, 219, 96, 9, 2, 218, 222, 9, 2, 218, 167, 9, 2, 218, 168, 23, 63, 9, - 2, 218, 168, 23, 251, 232, 9, 2, 218, 168, 23, 248, 86, 9, 2, 218, 168, - 23, 247, 193, 9, 2, 218, 168, 23, 74, 9, 2, 218, 168, 23, 75, 9, 2, 218, - 168, 23, 235, 166, 9, 2, 218, 168, 23, 68, 9, 2, 218, 168, 23, 207, 40, - 9, 2, 218, 168, 245, 124, 218, 167, 9, 2, 218, 109, 9, 2, 218, 110, 23, - 230, 8, 9, 2, 218, 110, 23, 207, 29, 9, 2, 218, 110, 23, 202, 116, 9, 2, - 218, 110, 219, 251, 218, 109, 9, 2, 216, 220, 9, 2, 216, 214, 9, 2, 216, - 57, 9, 2, 215, 145, 9, 2, 215, 36, 9, 2, 215, 23, 221, 26, 9, 2, 215, 22, - 9, 2, 215, 23, 23, 63, 9, 2, 215, 23, 23, 242, 42, 9, 2, 215, 23, 23, - 242, 40, 9, 2, 215, 23, 23, 152, 9, 2, 215, 23, 23, 230, 12, 9, 2, 215, - 23, 23, 228, 183, 9, 2, 215, 23, 23, 226, 222, 9, 2, 215, 23, 23, 224, - 155, 9, 2, 215, 23, 23, 221, 40, 9, 2, 215, 23, 23, 215, 8, 9, 2, 215, - 23, 23, 213, 9, 9, 2, 215, 23, 23, 210, 10, 9, 2, 215, 23, 23, 207, 40, - 9, 2, 215, 23, 23, 207, 35, 9, 2, 215, 23, 23, 207, 6, 9, 2, 215, 23, 23, - 206, 210, 9, 2, 215, 23, 23, 206, 186, 9, 2, 215, 23, 115, 215, 22, 9, 2, - 215, 23, 237, 208, 9, 2, 215, 8, 9, 2, 215, 9, 228, 95, 23, 250, 73, 9, - 2, 214, 238, 9, 2, 214, 230, 9, 2, 213, 90, 9, 2, 213, 88, 9, 2, 213, 89, - 23, 63, 9, 2, 213, 89, 23, 249, 15, 9, 2, 213, 89, 23, 238, 55, 9, 2, - 213, 89, 23, 222, 240, 9, 2, 213, 89, 23, 212, 197, 9, 2, 213, 89, 23, - 207, 181, 9, 2, 213, 89, 23, 68, 9, 2, 213, 89, 23, 106, 91, 63, 9, 2, - 213, 86, 9, 2, 213, 84, 9, 2, 213, 59, 9, 2, 213, 43, 9, 2, 213, 44, 236, - 26, 9, 2, 213, 44, 115, 213, 44, 239, 0, 115, 239, 0, 238, 225, 115, 238, - 224, 9, 2, 213, 44, 115, 213, 44, 210, 11, 115, 210, 11, 238, 225, 115, - 238, 224, 9, 2, 213, 36, 9, 2, 213, 31, 9, 2, 213, 27, 9, 2, 213, 26, 9, - 2, 213, 23, 9, 2, 213, 9, 9, 2, 213, 10, 23, 63, 9, 2, 213, 10, 23, 231, - 66, 9, 2, 213, 3, 9, 2, 213, 4, 23, 63, 9, 2, 213, 4, 23, 248, 253, 9, 2, - 213, 4, 23, 247, 171, 9, 2, 213, 4, 23, 243, 176, 9, 2, 213, 4, 23, 238, - 224, 9, 2, 213, 4, 23, 231, 85, 9, 2, 213, 4, 23, 231, 86, 237, 208, 9, - 2, 213, 4, 23, 228, 177, 9, 2, 213, 4, 23, 226, 224, 9, 2, 213, 4, 23, - 223, 235, 9, 2, 213, 4, 23, 215, 8, 9, 2, 212, 253, 9, 2, 212, 248, 9, 2, - 212, 249, 209, 141, 9, 2, 212, 249, 115, 212, 249, 247, 161, 115, 247, - 160, 9, 2, 212, 244, 9, 2, 212, 199, 9, 2, 212, 200, 115, 230, 239, 212, - 199, 9, 2, 212, 197, 9, 2, 212, 196, 9, 2, 212, 162, 9, 2, 212, 163, 237, - 208, 9, 2, 212, 149, 9, 2, 212, 147, 9, 2, 212, 148, 115, 212, 148, 212, - 197, 9, 2, 212, 140, 9, 2, 212, 138, 9, 2, 211, 10, 9, 2, 211, 11, 115, - 211, 10, 9, 2, 210, 232, 9, 2, 210, 231, 9, 2, 210, 229, 9, 2, 210, 220, - 9, 2, 210, 219, 9, 2, 210, 193, 9, 2, 210, 192, 9, 2, 210, 22, 9, 2, 210, - 23, 250, 59, 9, 2, 210, 23, 23, 237, 3, 9, 2, 210, 23, 23, 224, 155, 9, - 2, 210, 23, 237, 208, 9, 2, 210, 10, 9, 2, 210, 11, 115, 210, 11, 222, - 101, 115, 222, 101, 243, 157, 115, 243, 156, 9, 2, 210, 11, 211, 176, 9, - 2, 209, 255, 9, 2, 160, 23, 248, 86, 9, 2, 160, 23, 237, 219, 9, 2, 160, - 23, 213, 43, 9, 2, 160, 23, 212, 199, 9, 2, 160, 23, 207, 197, 9, 2, 160, - 23, 207, 29, 9, 2, 209, 242, 9, 2, 209, 218, 9, 2, 209, 187, 9, 2, 209, - 188, 237, 208, 9, 2, 209, 2, 9, 2, 209, 3, 209, 141, 9, 2, 208, 229, 9, - 2, 208, 206, 9, 2, 208, 207, 23, 209, 242, 9, 2, 208, 207, 115, 208, 206, - 9, 2, 208, 207, 115, 208, 207, 239, 0, 115, 239, 0, 238, 225, 115, 238, - 224, 9, 2, 207, 203, 9, 2, 207, 197, 9, 2, 207, 195, 9, 2, 207, 191, 9, - 2, 207, 181, 9, 2, 207, 182, 115, 207, 182, 202, 117, 115, 202, 116, 9, - 2, 68, 9, 2, 106, 237, 219, 9, 2, 106, 106, 68, 9, 2, 106, 115, 106, 219, - 169, 115, 219, 169, 238, 225, 115, 238, 224, 9, 2, 106, 115, 106, 210, - 194, 115, 210, 193, 9, 2, 106, 115, 106, 106, 216, 73, 115, 106, 216, 72, - 9, 2, 207, 40, 9, 2, 207, 35, 9, 2, 207, 29, 9, 2, 207, 30, 228, 177, 9, - 2, 207, 30, 23, 249, 15, 9, 2, 207, 30, 23, 224, 155, 9, 2, 207, 30, 23, - 106, 91, 106, 91, 68, 9, 2, 207, 30, 23, 106, 91, 106, 91, 106, 237, 208, - 9, 2, 207, 30, 237, 208, 9, 2, 207, 30, 213, 24, 9, 2, 207, 30, 213, 25, - 23, 249, 15, 9, 2, 207, 25, 9, 2, 207, 6, 9, 2, 207, 7, 23, 228, 94, 9, - 2, 207, 7, 23, 225, 21, 91, 244, 212, 9, 2, 207, 7, 23, 213, 88, 9, 2, - 207, 7, 23, 68, 9, 2, 207, 5, 9, 2, 207, 1, 9, 2, 207, 2, 23, 229, 231, - 9, 2, 207, 2, 23, 185, 9, 2, 206, 255, 9, 2, 207, 0, 237, 208, 9, 2, 206, - 210, 9, 2, 206, 211, 245, 124, 206, 210, 9, 2, 206, 211, 213, 24, 9, 2, - 206, 208, 9, 2, 206, 209, 23, 34, 91, 152, 9, 2, 206, 209, 23, 34, 91, - 201, 201, 9, 2, 206, 209, 23, 251, 39, 9, 2, 206, 209, 23, 152, 9, 2, - 206, 209, 23, 221, 40, 9, 2, 206, 209, 23, 207, 40, 9, 2, 206, 209, 23, - 207, 41, 91, 250, 75, 9, 2, 206, 209, 23, 207, 41, 91, 248, 86, 9, 2, - 206, 207, 9, 2, 206, 204, 9, 2, 206, 203, 9, 2, 206, 199, 9, 2, 206, 200, - 23, 63, 9, 2, 206, 200, 23, 250, 69, 9, 2, 206, 200, 23, 142, 9, 2, 206, - 200, 23, 242, 31, 9, 2, 206, 200, 23, 239, 8, 9, 2, 206, 200, 23, 238, - 246, 9, 2, 206, 200, 23, 238, 233, 209, 141, 9, 2, 206, 200, 23, 238, - 224, 9, 2, 206, 200, 23, 237, 230, 9, 2, 206, 200, 23, 152, 9, 2, 206, - 200, 23, 231, 85, 9, 2, 206, 200, 23, 231, 66, 9, 2, 206, 200, 23, 230, - 209, 9, 2, 206, 200, 23, 229, 100, 9, 2, 206, 200, 23, 226, 222, 9, 2, - 206, 200, 23, 224, 110, 9, 2, 206, 200, 23, 185, 9, 2, 206, 200, 23, 213, - 43, 9, 2, 206, 200, 23, 212, 147, 9, 2, 206, 200, 23, 207, 203, 9, 2, - 206, 200, 23, 106, 91, 237, 219, 9, 2, 206, 200, 23, 207, 29, 9, 2, 206, - 200, 23, 206, 197, 9, 2, 206, 197, 9, 2, 206, 198, 23, 68, 9, 2, 206, - 186, 9, 2, 206, 187, 23, 63, 9, 2, 206, 187, 23, 228, 209, 9, 2, 206, - 187, 23, 228, 183, 9, 2, 206, 187, 23, 209, 242, 9, 2, 206, 182, 9, 2, - 206, 185, 9, 2, 206, 183, 9, 2, 206, 179, 9, 2, 206, 167, 9, 2, 206, 168, - 23, 229, 231, 9, 2, 206, 166, 9, 2, 202, 116, 9, 2, 202, 117, 209, 141, - 9, 2, 202, 117, 103, 23, 228, 183, 9, 2, 202, 112, 9, 2, 202, 105, 9, 2, - 202, 91, 9, 2, 202, 39, 9, 2, 202, 40, 115, 202, 39, 9, 2, 202, 38, 9, 2, - 202, 36, 9, 2, 202, 37, 230, 31, 209, 141, 9, 2, 202, 31, 9, 2, 202, 22, - 9, 2, 202, 6, 9, 2, 202, 4, 9, 2, 202, 5, 23, 63, 9, 2, 202, 3, 9, 2, - 202, 2, 9, 2, 229, 254, 241, 119, 9, 2, 251, 233, 23, 221, 40, 9, 2, 251, - 150, 23, 63, 9, 2, 250, 244, 23, 228, 198, 9, 2, 244, 204, 229, 69, 23, - 207, 41, 91, 225, 79, 9, 2, 244, 202, 9, 2, 243, 157, 91, 212, 199, 9, 2, - 242, 41, 23, 213, 43, 9, 2, 240, 180, 23, 237, 219, 9, 2, 240, 180, 23, - 213, 43, 9, 2, 239, 7, 23, 250, 232, 91, 230, 13, 91, 63, 9, 2, 239, 7, - 23, 250, 73, 9, 2, 238, 189, 9, 2, 238, 71, 9, 2, 236, 3, 9, 2, 230, 44, - 23, 250, 200, 9, 2, 230, 44, 23, 250, 72, 9, 2, 230, 44, 23, 238, 55, 9, - 2, 230, 44, 23, 237, 219, 9, 2, 230, 44, 23, 237, 4, 23, 250, 73, 9, 2, - 230, 44, 23, 226, 222, 9, 2, 230, 44, 23, 185, 9, 2, 230, 44, 23, 212, - 192, 9, 2, 230, 44, 23, 207, 203, 9, 2, 230, 44, 23, 206, 208, 9, 2, 228, - 95, 23, 238, 81, 9, 2, 226, 238, 213, 25, 23, 249, 15, 9, 2, 226, 238, - 23, 241, 5, 91, 228, 30, 9, 2, 226, 238, 23, 212, 199, 9, 2, 224, 227, 9, - 2, 223, 198, 23, 202, 116, 9, 2, 223, 108, 9, 2, 222, 68, 9, 2, 222, 67, - 9, 2, 222, 66, 23, 248, 253, 9, 2, 222, 66, 23, 238, 81, 9, 2, 221, 57, - 215, 198, 222, 59, 244, 54, 9, 2, 218, 223, 250, 59, 9, 2, 218, 113, 9, - 2, 215, 23, 23, 231, 86, 237, 208, 9, 2, 209, 1, 9, 2, 207, 7, 23, 225, - 20, 9, 2, 106, 68, 9, 141, 2, 120, 250, 75, 9, 141, 2, 126, 250, 75, 9, - 141, 2, 239, 147, 250, 75, 9, 141, 2, 239, 233, 250, 75, 9, 141, 2, 212, - 88, 250, 75, 9, 141, 2, 213, 112, 250, 75, 9, 141, 2, 241, 143, 250, 75, - 9, 141, 2, 222, 64, 250, 75, 9, 141, 2, 126, 243, 156, 9, 141, 2, 239, - 147, 243, 156, 9, 141, 2, 239, 233, 243, 156, 9, 141, 2, 212, 88, 243, - 156, 9, 141, 2, 213, 112, 243, 156, 9, 141, 2, 241, 143, 243, 156, 9, - 141, 2, 222, 64, 243, 156, 9, 141, 2, 239, 147, 68, 9, 141, 2, 239, 233, - 68, 9, 141, 2, 212, 88, 68, 9, 141, 2, 213, 112, 68, 9, 141, 2, 241, 143, - 68, 9, 141, 2, 222, 64, 68, 9, 141, 2, 118, 238, 164, 9, 141, 2, 120, - 238, 164, 9, 141, 2, 126, 238, 164, 9, 141, 2, 239, 147, 238, 164, 9, - 141, 2, 239, 233, 238, 164, 9, 141, 2, 212, 88, 238, 164, 9, 141, 2, 213, - 112, 238, 164, 9, 141, 2, 241, 143, 238, 164, 9, 141, 2, 222, 64, 238, - 164, 9, 141, 2, 118, 238, 161, 9, 141, 2, 120, 238, 161, 9, 141, 2, 126, - 238, 161, 9, 141, 2, 239, 147, 238, 161, 9, 141, 2, 239, 233, 238, 161, - 9, 141, 2, 120, 213, 59, 9, 141, 2, 126, 213, 59, 9, 141, 2, 126, 213, - 60, 206, 69, 18, 9, 141, 2, 239, 147, 213, 59, 9, 141, 2, 239, 233, 213, - 59, 9, 141, 2, 212, 88, 213, 59, 9, 141, 2, 213, 112, 213, 59, 9, 141, 2, - 241, 143, 213, 59, 9, 141, 2, 222, 64, 213, 59, 9, 141, 2, 118, 213, 54, - 9, 141, 2, 120, 213, 54, 9, 141, 2, 126, 213, 54, 9, 141, 2, 126, 213, - 55, 206, 69, 18, 9, 141, 2, 239, 147, 213, 54, 9, 141, 2, 239, 233, 213, - 54, 9, 141, 2, 213, 60, 23, 238, 247, 91, 243, 156, 9, 141, 2, 213, 60, - 23, 238, 247, 91, 224, 110, 9, 141, 2, 118, 247, 156, 9, 141, 2, 120, - 247, 156, 9, 141, 2, 126, 247, 156, 9, 141, 2, 126, 247, 157, 206, 69, - 18, 9, 141, 2, 239, 147, 247, 156, 9, 141, 2, 239, 233, 247, 156, 9, 141, - 2, 126, 206, 69, 239, 159, 241, 6, 9, 141, 2, 126, 206, 69, 239, 159, - 241, 3, 9, 141, 2, 239, 147, 206, 69, 239, 159, 227, 118, 9, 141, 2, 239, - 147, 206, 69, 239, 159, 227, 116, 9, 141, 2, 239, 147, 206, 69, 239, 159, - 227, 119, 63, 9, 141, 2, 239, 147, 206, 69, 239, 159, 227, 119, 249, 255, - 9, 141, 2, 212, 88, 206, 69, 239, 159, 250, 71, 9, 141, 2, 213, 112, 206, - 69, 239, 159, 231, 58, 9, 141, 2, 213, 112, 206, 69, 239, 159, 231, 60, - 63, 9, 141, 2, 213, 112, 206, 69, 239, 159, 231, 60, 249, 255, 9, 141, 2, - 241, 143, 206, 69, 239, 159, 206, 181, 9, 141, 2, 241, 143, 206, 69, 239, - 159, 206, 180, 9, 141, 2, 222, 64, 206, 69, 239, 159, 231, 74, 9, 141, 2, - 222, 64, 206, 69, 239, 159, 231, 73, 9, 141, 2, 222, 64, 206, 69, 239, - 159, 231, 72, 9, 141, 2, 222, 64, 206, 69, 239, 159, 231, 75, 63, 9, 141, - 2, 120, 250, 76, 209, 141, 9, 141, 2, 126, 250, 76, 209, 141, 9, 141, 2, - 239, 147, 250, 76, 209, 141, 9, 141, 2, 239, 233, 250, 76, 209, 141, 9, - 141, 2, 212, 88, 250, 76, 209, 141, 9, 141, 2, 118, 248, 240, 9, 141, 2, - 120, 248, 240, 9, 141, 2, 126, 248, 240, 9, 141, 2, 239, 147, 248, 240, - 9, 141, 2, 239, 147, 248, 241, 206, 69, 18, 9, 141, 2, 239, 233, 248, - 240, 9, 141, 2, 239, 233, 248, 241, 206, 69, 18, 9, 141, 2, 222, 77, 9, - 141, 2, 222, 78, 9, 141, 2, 118, 241, 2, 9, 141, 2, 120, 241, 2, 9, 141, - 2, 118, 209, 61, 243, 156, 9, 141, 2, 120, 209, 58, 243, 156, 9, 141, 2, - 239, 233, 212, 77, 243, 156, 9, 141, 2, 118, 209, 61, 206, 69, 239, 159, - 63, 9, 141, 2, 120, 209, 58, 206, 69, 239, 159, 63, 9, 141, 2, 118, 241, - 139, 250, 75, 9, 141, 2, 118, 217, 56, 250, 75, 9, 141, 2, 38, 250, 62, - 118, 212, 78, 9, 141, 2, 38, 250, 62, 118, 217, 55, 9, 141, 2, 118, 217, - 56, 237, 202, 9, 141, 2, 118, 162, 237, 202, 9, 141, 2, 241, 120, 118, - 209, 60, 9, 141, 2, 241, 120, 120, 209, 57, 9, 141, 2, 241, 120, 239, - 153, 9, 141, 2, 241, 120, 240, 18, 9, 141, 2, 239, 147, 106, 206, 69, 18, - 9, 141, 2, 239, 233, 106, 206, 69, 18, 9, 141, 2, 212, 88, 106, 206, 69, - 18, 9, 141, 2, 213, 112, 106, 206, 69, 18, 9, 141, 2, 241, 143, 106, 206, - 69, 18, 9, 141, 2, 222, 64, 106, 206, 69, 18, 9, 217, 179, 2, 38, 250, - 62, 203, 238, 243, 141, 9, 217, 179, 2, 80, 245, 242, 9, 217, 179, 2, - 243, 228, 245, 242, 9, 217, 179, 2, 243, 228, 208, 81, 9, 217, 179, 2, - 243, 228, 217, 61, 9, 2, 251, 233, 23, 221, 41, 209, 141, 9, 2, 251, 233, - 23, 212, 197, 9, 2, 251, 123, 23, 241, 4, 9, 2, 249, 16, 23, 243, 157, - 209, 141, 9, 2, 249, 4, 23, 251, 149, 9, 2, 249, 4, 23, 222, 100, 9, 2, - 249, 4, 23, 202, 116, 9, 2, 247, 194, 115, 247, 194, 23, 223, 109, 9, 2, - 244, 213, 23, 209, 242, 9, 2, 244, 204, 23, 228, 183, 9, 2, 243, 189, 23, - 231, 85, 9, 2, 243, 189, 23, 106, 106, 68, 9, 2, 243, 187, 23, 207, 29, - 9, 2, 242, 38, 23, 250, 200, 9, 2, 242, 38, 23, 250, 75, 9, 2, 242, 38, - 23, 250, 76, 250, 50, 227, 222, 9, 2, 242, 38, 23, 243, 176, 9, 2, 242, - 38, 23, 242, 31, 9, 2, 242, 38, 23, 241, 22, 9, 2, 242, 38, 23, 239, 8, - 9, 2, 242, 38, 23, 238, 81, 9, 2, 242, 38, 23, 238, 64, 237, 208, 9, 2, - 242, 38, 23, 238, 55, 9, 2, 242, 38, 23, 152, 9, 2, 242, 38, 23, 237, 3, - 9, 2, 242, 38, 23, 231, 86, 237, 208, 9, 2, 242, 38, 23, 229, 231, 9, 2, - 242, 38, 23, 228, 183, 9, 2, 242, 38, 23, 228, 177, 9, 2, 242, 38, 23, - 228, 178, 91, 229, 231, 9, 2, 242, 38, 23, 228, 82, 9, 2, 242, 38, 23, - 228, 28, 9, 2, 242, 38, 23, 228, 29, 23, 228, 183, 9, 2, 242, 38, 23, - 226, 228, 91, 238, 55, 9, 2, 242, 38, 23, 225, 79, 9, 2, 242, 38, 23, - 224, 228, 9, 2, 242, 38, 23, 224, 155, 9, 2, 242, 38, 23, 222, 100, 9, 2, - 242, 38, 23, 218, 167, 9, 2, 242, 38, 23, 213, 43, 9, 2, 242, 38, 23, - 212, 163, 237, 208, 9, 2, 241, 191, 23, 228, 183, 9, 2, 241, 191, 23, - 219, 96, 9, 2, 241, 23, 203, 196, 9, 2, 241, 5, 245, 124, 241, 4, 9, 2, - 240, 180, 213, 25, 23, 250, 75, 9, 2, 240, 180, 213, 25, 23, 237, 3, 9, - 2, 240, 180, 213, 25, 23, 231, 86, 237, 208, 9, 2, 240, 180, 213, 25, 23, - 228, 113, 9, 2, 240, 180, 213, 25, 23, 228, 30, 9, 2, 240, 180, 213, 25, - 23, 225, 20, 9, 2, 240, 180, 213, 25, 23, 224, 228, 9, 2, 240, 180, 213, - 25, 23, 211, 10, 9, 2, 240, 180, 23, 211, 10, 9, 2, 239, 7, 23, 249, 3, - 9, 2, 239, 7, 23, 243, 189, 237, 208, 9, 2, 239, 7, 23, 242, 38, 23, 231, - 86, 237, 208, 9, 2, 239, 7, 23, 242, 38, 23, 229, 231, 9, 2, 239, 7, 23, - 241, 25, 9, 2, 239, 7, 23, 239, 8, 9, 2, 239, 7, 23, 238, 225, 91, 243, - 233, 9, 2, 239, 7, 23, 238, 225, 91, 222, 240, 9, 2, 239, 7, 23, 237, - 160, 91, 63, 9, 2, 239, 7, 23, 228, 178, 91, 229, 231, 9, 2, 239, 7, 23, - 228, 28, 9, 2, 239, 7, 23, 228, 29, 23, 228, 183, 9, 2, 239, 7, 23, 226, - 227, 9, 2, 239, 7, 23, 223, 199, 9, 2, 239, 7, 23, 222, 240, 9, 2, 239, - 7, 23, 222, 241, 91, 241, 190, 9, 2, 239, 7, 23, 222, 241, 91, 238, 81, - 9, 2, 239, 7, 23, 213, 3, 9, 2, 239, 7, 23, 202, 22, 9, 2, 239, 2, 215, - 198, 222, 59, 244, 54, 9, 2, 238, 163, 23, 68, 9, 2, 238, 56, 23, 238, - 56, 245, 124, 238, 55, 9, 2, 237, 229, 23, 231, 86, 237, 208, 9, 2, 237, - 220, 91, 238, 56, 23, 209, 242, 9, 2, 237, 160, 209, 142, 237, 208, 9, 2, - 237, 4, 23, 250, 76, 115, 237, 4, 23, 250, 75, 9, 2, 230, 44, 23, 247, - 193, 9, 2, 230, 44, 23, 173, 9, 2, 230, 44, 23, 106, 106, 68, 9, 2, 230, - 44, 23, 206, 210, 9, 2, 228, 95, 23, 202, 7, 115, 202, 6, 9, 2, 228, 83, - 9, 2, 228, 81, 9, 2, 228, 80, 9, 2, 228, 79, 9, 2, 228, 78, 9, 2, 228, - 77, 9, 2, 228, 76, 9, 2, 228, 75, 115, 228, 75, 237, 208, 9, 2, 228, 74, - 9, 2, 228, 73, 115, 228, 72, 9, 2, 228, 71, 9, 2, 228, 70, 9, 2, 228, 69, - 9, 2, 228, 68, 9, 2, 228, 67, 9, 2, 228, 66, 9, 2, 228, 65, 9, 2, 228, - 64, 9, 2, 228, 63, 9, 2, 228, 62, 9, 2, 228, 61, 9, 2, 228, 60, 9, 2, - 228, 59, 9, 2, 228, 58, 9, 2, 228, 57, 9, 2, 228, 56, 9, 2, 228, 55, 9, - 2, 228, 54, 9, 2, 228, 52, 9, 2, 228, 53, 23, 237, 230, 9, 2, 228, 53, - 23, 231, 85, 9, 2, 228, 53, 23, 219, 97, 91, 226, 236, 9, 2, 228, 53, 23, - 219, 97, 91, 219, 97, 91, 226, 236, 9, 2, 228, 53, 23, 207, 41, 91, 249, - 32, 9, 2, 228, 51, 9, 2, 228, 50, 9, 2, 228, 49, 9, 2, 228, 48, 9, 2, - 228, 47, 9, 2, 228, 46, 9, 2, 228, 45, 9, 2, 228, 44, 9, 2, 228, 43, 9, - 2, 228, 42, 9, 2, 228, 40, 9, 2, 228, 41, 23, 250, 75, 9, 2, 228, 41, 23, - 249, 15, 9, 2, 228, 41, 23, 242, 30, 237, 209, 237, 208, 9, 2, 228, 41, - 23, 228, 207, 9, 2, 228, 41, 23, 228, 113, 9, 2, 228, 41, 23, 209, 218, - 9, 2, 228, 41, 23, 209, 187, 9, 2, 228, 41, 23, 207, 40, 9, 2, 228, 41, - 23, 207, 29, 9, 2, 228, 41, 23, 206, 197, 9, 2, 228, 39, 9, 2, 228, 37, - 9, 2, 228, 38, 23, 242, 40, 9, 2, 228, 38, 23, 239, 8, 9, 2, 228, 38, 23, - 231, 85, 9, 2, 228, 38, 23, 231, 86, 237, 208, 9, 2, 228, 38, 23, 222, - 100, 9, 2, 228, 38, 23, 219, 97, 91, 219, 97, 91, 226, 236, 9, 2, 228, - 38, 23, 213, 28, 91, 229, 100, 9, 2, 228, 38, 23, 207, 29, 9, 2, 228, 38, - 23, 206, 197, 9, 2, 228, 35, 9, 2, 228, 34, 9, 2, 226, 238, 237, 209, 23, - 250, 75, 9, 2, 226, 238, 23, 243, 156, 9, 2, 226, 238, 23, 237, 140, 9, - 2, 226, 238, 23, 219, 96, 9, 2, 226, 238, 23, 219, 97, 91, 219, 97, 91, - 226, 236, 9, 2, 226, 238, 23, 209, 242, 9, 2, 224, 156, 91, 202, 115, 9, - 2, 223, 200, 115, 223, 200, 23, 239, 8, 9, 2, 223, 200, 115, 223, 200, - 23, 230, 12, 9, 2, 222, 66, 23, 243, 189, 237, 208, 9, 2, 222, 66, 23, - 238, 55, 9, 2, 222, 66, 23, 237, 212, 9, 2, 222, 66, 23, 237, 3, 9, 2, - 222, 66, 23, 229, 171, 9, 2, 222, 66, 23, 228, 78, 9, 2, 222, 66, 23, - 225, 79, 9, 2, 222, 66, 23, 219, 97, 91, 219, 96, 9, 2, 222, 66, 23, 68, - 9, 2, 222, 66, 23, 106, 91, 68, 9, 2, 222, 66, 23, 206, 197, 9, 2, 215, - 23, 237, 209, 23, 152, 9, 2, 215, 23, 23, 241, 92, 9, 2, 215, 23, 23, - 213, 44, 250, 50, 227, 222, 9, 2, 215, 23, 23, 209, 242, 9, 2, 213, 87, - 209, 141, 9, 2, 213, 44, 115, 213, 43, 9, 2, 213, 44, 91, 236, 21, 9, 2, - 213, 44, 91, 223, 86, 9, 2, 213, 44, 91, 214, 230, 9, 2, 212, 198, 91, - 242, 38, 23, 222, 100, 9, 2, 212, 198, 91, 241, 191, 23, 250, 231, 9, 2, - 212, 163, 23, 209, 242, 9, 2, 209, 243, 91, 215, 22, 9, 2, 207, 192, 23, - 238, 233, 209, 141, 9, 2, 207, 192, 23, 126, 243, 156, 9, 2, 206, 209, - 230, 238, 9, 2, 206, 209, 23, 207, 29, 9, 2, 206, 200, 23, 244, 153, 9, - 2, 206, 200, 23, 228, 36, 9, 2, 206, 200, 23, 226, 236, 9, 2, 202, 115, - 9, 2, 202, 7, 115, 202, 7, 91, 214, 230, 9, 2, 202, 5, 23, 126, 243, 157, - 209, 141, 14, 7, 255, 18, 14, 7, 255, 17, 14, 7, 255, 16, 14, 7, 255, 15, - 14, 7, 255, 14, 14, 7, 255, 13, 14, 7, 255, 12, 14, 7, 255, 11, 14, 7, - 255, 10, 14, 7, 255, 9, 14, 7, 255, 8, 14, 7, 255, 7, 14, 7, 255, 6, 14, - 7, 255, 4, 14, 7, 255, 3, 14, 7, 255, 2, 14, 7, 255, 1, 14, 7, 255, 0, - 14, 7, 254, 255, 14, 7, 254, 254, 14, 7, 254, 253, 14, 7, 254, 252, 14, - 7, 254, 251, 14, 7, 254, 250, 14, 7, 254, 249, 14, 7, 254, 248, 14, 7, - 254, 247, 14, 7, 254, 246, 14, 7, 254, 245, 14, 7, 254, 244, 14, 7, 254, - 243, 14, 7, 254, 241, 14, 7, 254, 240, 14, 7, 254, 238, 14, 7, 254, 237, - 14, 7, 254, 236, 14, 7, 254, 235, 14, 7, 254, 234, 14, 7, 254, 233, 14, - 7, 254, 232, 14, 7, 254, 231, 14, 7, 254, 230, 14, 7, 254, 229, 14, 7, - 254, 228, 14, 7, 254, 227, 14, 7, 254, 225, 14, 7, 254, 224, 14, 7, 254, - 223, 14, 7, 254, 221, 14, 7, 254, 220, 14, 7, 254, 219, 14, 7, 254, 218, - 14, 7, 254, 217, 14, 7, 254, 216, 14, 7, 254, 215, 14, 7, 254, 214, 14, - 7, 254, 211, 14, 7, 254, 210, 14, 7, 254, 209, 14, 7, 254, 208, 14, 7, - 254, 207, 14, 7, 254, 206, 14, 7, 254, 205, 14, 7, 254, 204, 14, 7, 254, - 203, 14, 7, 254, 202, 14, 7, 254, 201, 14, 7, 254, 200, 14, 7, 254, 199, - 14, 7, 254, 198, 14, 7, 254, 197, 14, 7, 254, 196, 14, 7, 254, 195, 14, - 7, 254, 194, 14, 7, 254, 193, 14, 7, 254, 192, 14, 7, 254, 188, 14, 7, - 254, 187, 14, 7, 254, 186, 14, 7, 254, 185, 14, 7, 249, 253, 14, 7, 249, - 251, 14, 7, 249, 249, 14, 7, 249, 247, 14, 7, 249, 245, 14, 7, 249, 244, - 14, 7, 249, 242, 14, 7, 249, 240, 14, 7, 249, 238, 14, 7, 249, 236, 14, - 7, 247, 121, 14, 7, 247, 120, 14, 7, 247, 119, 14, 7, 247, 118, 14, 7, - 247, 117, 14, 7, 247, 116, 14, 7, 247, 115, 14, 7, 247, 114, 14, 7, 247, - 113, 14, 7, 247, 112, 14, 7, 247, 111, 14, 7, 247, 110, 14, 7, 247, 109, - 14, 7, 247, 108, 14, 7, 247, 107, 14, 7, 247, 106, 14, 7, 247, 105, 14, - 7, 247, 104, 14, 7, 247, 103, 14, 7, 247, 102, 14, 7, 247, 101, 14, 7, - 247, 100, 14, 7, 247, 99, 14, 7, 247, 98, 14, 7, 247, 97, 14, 7, 247, 96, - 14, 7, 247, 95, 14, 7, 247, 94, 14, 7, 245, 50, 14, 7, 245, 49, 14, 7, - 245, 48, 14, 7, 245, 47, 14, 7, 245, 46, 14, 7, 245, 45, 14, 7, 245, 44, - 14, 7, 245, 43, 14, 7, 245, 42, 14, 7, 245, 41, 14, 7, 245, 40, 14, 7, - 245, 39, 14, 7, 245, 38, 14, 7, 245, 37, 14, 7, 245, 36, 14, 7, 245, 35, - 14, 7, 245, 34, 14, 7, 245, 33, 14, 7, 245, 32, 14, 7, 245, 31, 14, 7, - 245, 30, 14, 7, 245, 29, 14, 7, 245, 28, 14, 7, 245, 27, 14, 7, 245, 26, - 14, 7, 245, 25, 14, 7, 245, 24, 14, 7, 245, 23, 14, 7, 245, 22, 14, 7, - 245, 21, 14, 7, 245, 20, 14, 7, 245, 19, 14, 7, 245, 18, 14, 7, 245, 17, - 14, 7, 245, 16, 14, 7, 245, 15, 14, 7, 245, 14, 14, 7, 245, 13, 14, 7, - 245, 12, 14, 7, 245, 11, 14, 7, 245, 10, 14, 7, 245, 9, 14, 7, 245, 8, - 14, 7, 245, 7, 14, 7, 245, 6, 14, 7, 245, 5, 14, 7, 245, 4, 14, 7, 245, - 3, 14, 7, 245, 2, 14, 7, 245, 1, 14, 7, 245, 0, 14, 7, 244, 255, 14, 7, - 244, 254, 14, 7, 244, 253, 14, 7, 244, 252, 14, 7, 244, 251, 14, 7, 244, - 250, 14, 7, 244, 249, 14, 7, 244, 248, 14, 7, 244, 247, 14, 7, 244, 246, - 14, 7, 244, 245, 14, 7, 244, 244, 14, 7, 244, 243, 14, 7, 244, 242, 14, - 7, 244, 241, 14, 7, 244, 240, 14, 7, 244, 239, 14, 7, 244, 238, 14, 7, - 244, 237, 14, 7, 244, 236, 14, 7, 244, 235, 14, 7, 244, 234, 14, 7, 244, - 233, 14, 7, 244, 232, 14, 7, 244, 231, 14, 7, 244, 230, 14, 7, 244, 229, - 14, 7, 244, 228, 14, 7, 244, 227, 14, 7, 244, 226, 14, 7, 244, 225, 14, - 7, 244, 224, 14, 7, 244, 223, 14, 7, 244, 222, 14, 7, 244, 221, 14, 7, - 244, 220, 14, 7, 244, 219, 14, 7, 244, 218, 14, 7, 244, 217, 14, 7, 244, - 216, 14, 7, 244, 215, 14, 7, 241, 235, 14, 7, 241, 234, 14, 7, 241, 233, - 14, 7, 241, 232, 14, 7, 241, 231, 14, 7, 241, 230, 14, 7, 241, 229, 14, - 7, 241, 228, 14, 7, 241, 227, 14, 7, 241, 226, 14, 7, 241, 225, 14, 7, - 241, 224, 14, 7, 241, 223, 14, 7, 241, 222, 14, 7, 241, 221, 14, 7, 241, - 220, 14, 7, 241, 219, 14, 7, 241, 218, 14, 7, 241, 217, 14, 7, 241, 216, - 14, 7, 241, 215, 14, 7, 241, 214, 14, 7, 241, 213, 14, 7, 241, 212, 14, - 7, 241, 211, 14, 7, 241, 210, 14, 7, 241, 209, 14, 7, 241, 208, 14, 7, - 241, 207, 14, 7, 241, 206, 14, 7, 241, 205, 14, 7, 241, 204, 14, 7, 241, - 203, 14, 7, 241, 202, 14, 7, 241, 201, 14, 7, 241, 200, 14, 7, 241, 199, - 14, 7, 241, 198, 14, 7, 241, 197, 14, 7, 241, 196, 14, 7, 241, 195, 14, - 7, 241, 194, 14, 7, 241, 193, 14, 7, 241, 192, 14, 7, 240, 173, 14, 7, - 240, 172, 14, 7, 240, 171, 14, 7, 240, 170, 14, 7, 240, 169, 14, 7, 240, - 168, 14, 7, 240, 167, 14, 7, 240, 166, 14, 7, 240, 165, 14, 7, 240, 164, - 14, 7, 240, 163, 14, 7, 240, 162, 14, 7, 240, 161, 14, 7, 240, 160, 14, - 7, 240, 159, 14, 7, 240, 158, 14, 7, 240, 157, 14, 7, 240, 156, 14, 7, - 240, 155, 14, 7, 240, 154, 14, 7, 240, 153, 14, 7, 240, 152, 14, 7, 240, - 151, 14, 7, 240, 150, 14, 7, 240, 149, 14, 7, 240, 148, 14, 7, 240, 147, - 14, 7, 240, 146, 14, 7, 240, 145, 14, 7, 240, 144, 14, 7, 240, 143, 14, - 7, 240, 142, 14, 7, 240, 141, 14, 7, 240, 140, 14, 7, 240, 139, 14, 7, - 240, 138, 14, 7, 240, 137, 14, 7, 240, 136, 14, 7, 240, 135, 14, 7, 240, - 134, 14, 7, 240, 133, 14, 7, 240, 132, 14, 7, 240, 131, 14, 7, 240, 130, - 14, 7, 240, 129, 14, 7, 240, 128, 14, 7, 240, 127, 14, 7, 240, 126, 14, - 7, 240, 125, 14, 7, 240, 124, 14, 7, 240, 123, 14, 7, 240, 122, 14, 7, - 240, 121, 14, 7, 240, 120, 14, 7, 240, 119, 14, 7, 240, 118, 14, 7, 240, - 117, 14, 7, 240, 116, 14, 7, 240, 115, 14, 7, 240, 114, 14, 7, 240, 113, - 14, 7, 240, 112, 14, 7, 240, 111, 14, 7, 240, 110, 14, 7, 240, 109, 14, - 7, 239, 74, 14, 7, 239, 73, 14, 7, 239, 72, 14, 7, 239, 71, 14, 7, 239, - 70, 14, 7, 239, 69, 14, 7, 239, 68, 14, 7, 239, 67, 14, 7, 239, 66, 14, - 7, 239, 65, 14, 7, 239, 64, 14, 7, 239, 63, 14, 7, 239, 62, 14, 7, 239, - 61, 14, 7, 239, 60, 14, 7, 239, 59, 14, 7, 239, 58, 14, 7, 239, 57, 14, - 7, 239, 56, 14, 7, 239, 55, 14, 7, 239, 54, 14, 7, 239, 53, 14, 7, 239, - 52, 14, 7, 239, 51, 14, 7, 239, 50, 14, 7, 239, 49, 14, 7, 239, 48, 14, - 7, 239, 47, 14, 7, 239, 46, 14, 7, 239, 45, 14, 7, 239, 44, 14, 7, 239, - 43, 14, 7, 239, 42, 14, 7, 239, 41, 14, 7, 239, 40, 14, 7, 239, 39, 14, - 7, 239, 38, 14, 7, 239, 37, 14, 7, 239, 36, 14, 7, 239, 35, 14, 7, 239, - 34, 14, 7, 239, 33, 14, 7, 239, 32, 14, 7, 239, 31, 14, 7, 239, 30, 14, - 7, 239, 29, 14, 7, 239, 28, 14, 7, 239, 27, 14, 7, 239, 26, 14, 7, 239, - 25, 14, 7, 239, 24, 14, 7, 239, 23, 14, 7, 239, 22, 14, 7, 239, 21, 14, - 7, 239, 20, 14, 7, 239, 19, 14, 7, 239, 18, 14, 7, 239, 17, 14, 7, 239, - 16, 14, 7, 239, 15, 14, 7, 239, 14, 14, 7, 239, 13, 14, 7, 239, 12, 14, - 7, 239, 11, 14, 7, 237, 169, 14, 7, 237, 168, 14, 7, 237, 167, 14, 7, - 237, 166, 14, 7, 237, 165, 14, 7, 237, 164, 14, 7, 237, 163, 14, 7, 237, - 162, 14, 7, 237, 161, 14, 7, 235, 190, 14, 7, 235, 189, 14, 7, 235, 188, - 14, 7, 235, 187, 14, 7, 235, 186, 14, 7, 235, 185, 14, 7, 235, 184, 14, - 7, 235, 183, 14, 7, 235, 182, 14, 7, 235, 181, 14, 7, 235, 180, 14, 7, - 235, 179, 14, 7, 235, 178, 14, 7, 235, 177, 14, 7, 235, 176, 14, 7, 235, - 175, 14, 7, 235, 174, 14, 7, 235, 173, 14, 7, 235, 172, 14, 7, 230, 53, - 14, 7, 230, 52, 14, 7, 230, 51, 14, 7, 230, 50, 14, 7, 230, 49, 14, 7, - 230, 48, 14, 7, 230, 47, 14, 7, 230, 46, 14, 7, 228, 128, 14, 7, 228, - 127, 14, 7, 228, 126, 14, 7, 228, 125, 14, 7, 228, 124, 14, 7, 228, 123, - 14, 7, 228, 122, 14, 7, 228, 121, 14, 7, 228, 120, 14, 7, 228, 119, 14, - 7, 226, 183, 14, 7, 226, 182, 14, 7, 226, 181, 14, 7, 226, 179, 14, 7, - 226, 177, 14, 7, 226, 176, 14, 7, 226, 174, 14, 7, 226, 172, 14, 7, 226, - 170, 14, 7, 226, 168, 14, 7, 226, 166, 14, 7, 226, 164, 14, 7, 226, 162, - 14, 7, 226, 161, 14, 7, 226, 159, 14, 7, 226, 157, 14, 7, 226, 156, 14, - 7, 226, 155, 14, 7, 226, 154, 14, 7, 226, 153, 14, 7, 226, 152, 14, 7, - 226, 151, 14, 7, 226, 150, 14, 7, 226, 149, 14, 7, 226, 147, 14, 7, 226, - 145, 14, 7, 226, 143, 14, 7, 226, 142, 14, 7, 226, 140, 14, 7, 226, 139, - 14, 7, 226, 137, 14, 7, 226, 136, 14, 7, 226, 134, 14, 7, 226, 132, 14, - 7, 226, 130, 14, 7, 226, 128, 14, 7, 226, 126, 14, 7, 226, 125, 14, 7, - 226, 123, 14, 7, 226, 121, 14, 7, 226, 120, 14, 7, 226, 118, 14, 7, 226, - 116, 14, 7, 226, 114, 14, 7, 226, 112, 14, 7, 226, 111, 14, 7, 226, 109, - 14, 7, 226, 107, 14, 7, 226, 105, 14, 7, 226, 104, 14, 7, 226, 102, 14, - 7, 226, 100, 14, 7, 226, 99, 14, 7, 226, 98, 14, 7, 226, 96, 14, 7, 226, - 94, 14, 7, 226, 92, 14, 7, 226, 90, 14, 7, 226, 88, 14, 7, 226, 86, 14, - 7, 226, 84, 14, 7, 226, 83, 14, 7, 226, 81, 14, 7, 226, 79, 14, 7, 226, - 77, 14, 7, 226, 75, 14, 7, 223, 160, 14, 7, 223, 159, 14, 7, 223, 158, - 14, 7, 223, 157, 14, 7, 223, 156, 14, 7, 223, 155, 14, 7, 223, 154, 14, - 7, 223, 153, 14, 7, 223, 152, 14, 7, 223, 151, 14, 7, 223, 150, 14, 7, - 223, 149, 14, 7, 223, 148, 14, 7, 223, 147, 14, 7, 223, 146, 14, 7, 223, - 145, 14, 7, 223, 144, 14, 7, 223, 143, 14, 7, 223, 142, 14, 7, 223, 141, - 14, 7, 223, 140, 14, 7, 223, 139, 14, 7, 223, 138, 14, 7, 223, 137, 14, - 7, 223, 136, 14, 7, 223, 135, 14, 7, 223, 134, 14, 7, 223, 133, 14, 7, - 223, 132, 14, 7, 223, 131, 14, 7, 223, 130, 14, 7, 223, 129, 14, 7, 223, - 128, 14, 7, 223, 127, 14, 7, 223, 126, 14, 7, 223, 125, 14, 7, 223, 124, - 14, 7, 223, 123, 14, 7, 223, 122, 14, 7, 223, 121, 14, 7, 223, 120, 14, - 7, 223, 119, 14, 7, 223, 118, 14, 7, 223, 117, 14, 7, 223, 116, 14, 7, - 223, 115, 14, 7, 223, 114, 14, 7, 223, 113, 14, 7, 223, 112, 14, 7, 221, - 252, 14, 7, 221, 251, 14, 7, 221, 250, 14, 7, 221, 249, 14, 7, 221, 248, - 14, 7, 221, 247, 14, 7, 221, 246, 14, 7, 221, 245, 14, 7, 221, 244, 14, - 7, 221, 243, 14, 7, 221, 242, 14, 7, 221, 241, 14, 7, 221, 240, 14, 7, - 221, 239, 14, 7, 221, 238, 14, 7, 221, 237, 14, 7, 221, 236, 14, 7, 221, - 235, 14, 7, 221, 234, 14, 7, 221, 233, 14, 7, 221, 232, 14, 7, 221, 231, - 14, 7, 221, 83, 14, 7, 221, 82, 14, 7, 221, 81, 14, 7, 221, 80, 14, 7, - 221, 79, 14, 7, 221, 78, 14, 7, 221, 77, 14, 7, 221, 76, 14, 7, 221, 75, - 14, 7, 221, 74, 14, 7, 221, 73, 14, 7, 221, 72, 14, 7, 221, 71, 14, 7, - 221, 70, 14, 7, 221, 69, 14, 7, 221, 68, 14, 7, 221, 67, 14, 7, 221, 66, - 14, 7, 221, 65, 14, 7, 221, 64, 14, 7, 221, 63, 14, 7, 221, 62, 14, 7, - 221, 61, 14, 7, 221, 60, 14, 7, 221, 59, 14, 7, 221, 58, 14, 7, 220, 173, - 14, 7, 220, 172, 14, 7, 220, 171, 14, 7, 220, 170, 14, 7, 220, 169, 14, - 7, 220, 168, 14, 7, 220, 167, 14, 7, 220, 166, 14, 7, 220, 165, 14, 7, - 220, 164, 14, 7, 220, 163, 14, 7, 220, 162, 14, 7, 220, 161, 14, 7, 220, - 160, 14, 7, 220, 159, 14, 7, 220, 158, 14, 7, 220, 157, 14, 7, 220, 156, - 14, 7, 220, 155, 14, 7, 220, 154, 14, 7, 220, 153, 14, 7, 220, 152, 14, - 7, 220, 151, 14, 7, 220, 150, 14, 7, 220, 149, 14, 7, 220, 148, 14, 7, - 220, 147, 14, 7, 220, 146, 14, 7, 220, 145, 14, 7, 220, 144, 14, 7, 220, - 143, 14, 7, 220, 142, 14, 7, 220, 141, 14, 7, 220, 140, 14, 7, 220, 139, - 14, 7, 220, 138, 14, 7, 220, 137, 14, 7, 220, 136, 14, 7, 220, 135, 14, - 7, 220, 134, 14, 7, 220, 133, 14, 7, 220, 132, 14, 7, 220, 131, 14, 7, - 220, 130, 14, 7, 220, 129, 14, 7, 220, 128, 14, 7, 220, 127, 14, 7, 220, - 126, 14, 7, 220, 125, 14, 7, 220, 124, 14, 7, 220, 123, 14, 7, 220, 122, - 14, 7, 220, 121, 14, 7, 220, 120, 14, 7, 220, 119, 14, 7, 220, 118, 14, - 7, 220, 117, 14, 7, 220, 116, 14, 7, 220, 115, 14, 7, 220, 114, 14, 7, - 220, 113, 14, 7, 220, 112, 14, 7, 220, 111, 14, 7, 220, 110, 14, 7, 220, - 109, 14, 7, 220, 108, 14, 7, 220, 107, 14, 7, 220, 106, 14, 7, 220, 105, - 14, 7, 220, 104, 14, 7, 220, 103, 14, 7, 220, 102, 14, 7, 220, 101, 14, - 7, 220, 100, 14, 7, 220, 99, 14, 7, 219, 183, 14, 7, 219, 182, 14, 7, - 219, 181, 14, 7, 219, 180, 14, 7, 219, 179, 14, 7, 219, 178, 14, 7, 219, - 177, 14, 7, 219, 176, 14, 7, 219, 175, 14, 7, 219, 174, 14, 7, 219, 173, - 14, 7, 219, 172, 14, 7, 219, 171, 14, 7, 217, 133, 14, 7, 217, 132, 14, - 7, 217, 131, 14, 7, 217, 130, 14, 7, 217, 129, 14, 7, 217, 128, 14, 7, - 217, 127, 14, 7, 216, 255, 14, 7, 216, 254, 14, 7, 216, 253, 14, 7, 216, - 252, 14, 7, 216, 251, 14, 7, 216, 250, 14, 7, 216, 249, 14, 7, 216, 248, - 14, 7, 216, 247, 14, 7, 216, 246, 14, 7, 216, 245, 14, 7, 216, 244, 14, - 7, 216, 243, 14, 7, 216, 242, 14, 7, 216, 241, 14, 7, 216, 240, 14, 7, - 216, 239, 14, 7, 216, 238, 14, 7, 216, 237, 14, 7, 216, 236, 14, 7, 216, - 235, 14, 7, 216, 234, 14, 7, 216, 233, 14, 7, 216, 232, 14, 7, 216, 231, - 14, 7, 216, 230, 14, 7, 216, 229, 14, 7, 216, 228, 14, 7, 216, 227, 14, - 7, 216, 226, 14, 7, 216, 225, 14, 7, 216, 224, 14, 7, 216, 223, 14, 7, - 216, 222, 14, 7, 215, 91, 14, 7, 215, 90, 14, 7, 215, 89, 14, 7, 215, 88, - 14, 7, 215, 87, 14, 7, 215, 86, 14, 7, 215, 85, 14, 7, 215, 84, 14, 7, - 215, 83, 14, 7, 215, 82, 14, 7, 215, 81, 14, 7, 215, 80, 14, 7, 215, 79, - 14, 7, 215, 78, 14, 7, 215, 77, 14, 7, 215, 76, 14, 7, 215, 75, 14, 7, - 215, 74, 14, 7, 215, 73, 14, 7, 215, 72, 14, 7, 215, 71, 14, 7, 215, 70, - 14, 7, 215, 69, 14, 7, 215, 68, 14, 7, 215, 67, 14, 7, 215, 66, 14, 7, - 215, 65, 14, 7, 215, 64, 14, 7, 215, 63, 14, 7, 215, 62, 14, 7, 215, 61, - 14, 7, 215, 60, 14, 7, 215, 59, 14, 7, 215, 58, 14, 7, 215, 57, 14, 7, - 215, 56, 14, 7, 215, 55, 14, 7, 215, 54, 14, 7, 215, 53, 14, 7, 215, 52, - 14, 7, 215, 51, 14, 7, 215, 50, 14, 7, 215, 49, 14, 7, 215, 48, 14, 7, - 215, 47, 14, 7, 215, 46, 14, 7, 215, 45, 14, 7, 215, 44, 14, 7, 215, 43, - 14, 7, 215, 42, 14, 7, 215, 41, 14, 7, 215, 40, 14, 7, 215, 39, 14, 7, - 215, 38, 14, 7, 210, 67, 14, 7, 210, 66, 14, 7, 210, 65, 14, 7, 210, 64, - 14, 7, 210, 63, 14, 7, 210, 62, 14, 7, 210, 61, 14, 7, 210, 60, 14, 7, - 210, 59, 14, 7, 210, 58, 14, 7, 210, 57, 14, 7, 210, 56, 14, 7, 210, 55, - 14, 7, 210, 54, 14, 7, 210, 53, 14, 7, 210, 52, 14, 7, 210, 51, 14, 7, - 210, 50, 14, 7, 210, 49, 14, 7, 210, 48, 14, 7, 210, 47, 14, 7, 210, 46, - 14, 7, 210, 45, 14, 7, 210, 44, 14, 7, 210, 43, 14, 7, 210, 42, 14, 7, - 210, 41, 14, 7, 210, 40, 14, 7, 210, 39, 14, 7, 210, 38, 14, 7, 210, 37, - 14, 7, 210, 36, 14, 7, 210, 35, 14, 7, 210, 34, 14, 7, 210, 33, 14, 7, - 210, 32, 14, 7, 210, 31, 14, 7, 210, 30, 14, 7, 210, 29, 14, 7, 210, 28, - 14, 7, 210, 27, 14, 7, 210, 26, 14, 7, 210, 25, 14, 7, 210, 24, 14, 7, - 207, 88, 14, 7, 207, 87, 14, 7, 207, 86, 14, 7, 207, 85, 14, 7, 207, 84, - 14, 7, 207, 83, 14, 7, 207, 82, 14, 7, 207, 81, 14, 7, 207, 80, 14, 7, - 207, 79, 14, 7, 207, 78, 14, 7, 207, 77, 14, 7, 207, 76, 14, 7, 207, 75, - 14, 7, 207, 74, 14, 7, 207, 73, 14, 7, 207, 72, 14, 7, 207, 71, 14, 7, - 207, 70, 14, 7, 207, 69, 14, 7, 207, 68, 14, 7, 207, 67, 14, 7, 207, 66, - 14, 7, 207, 65, 14, 7, 207, 64, 14, 7, 207, 63, 14, 7, 207, 62, 14, 7, - 207, 61, 14, 7, 207, 60, 14, 7, 207, 59, 14, 7, 207, 58, 14, 7, 207, 57, - 14, 7, 207, 56, 14, 7, 207, 55, 14, 7, 207, 54, 14, 7, 207, 53, 14, 7, - 207, 52, 14, 7, 207, 51, 14, 7, 207, 50, 14, 7, 207, 49, 14, 7, 207, 48, - 14, 7, 207, 47, 14, 7, 207, 46, 14, 7, 207, 45, 14, 7, 207, 44, 14, 7, - 207, 43, 14, 7, 207, 42, 14, 7, 206, 163, 14, 7, 206, 162, 14, 7, 206, - 161, 14, 7, 206, 160, 14, 7, 206, 159, 14, 7, 206, 158, 14, 7, 206, 157, - 14, 7, 206, 156, 14, 7, 206, 155, 14, 7, 206, 154, 14, 7, 206, 153, 14, - 7, 206, 152, 14, 7, 206, 151, 14, 7, 206, 150, 14, 7, 206, 149, 14, 7, - 206, 148, 14, 7, 206, 147, 14, 7, 206, 146, 14, 7, 206, 145, 14, 7, 206, - 144, 14, 7, 206, 143, 14, 7, 206, 142, 14, 7, 206, 141, 14, 7, 206, 140, - 14, 7, 206, 139, 14, 7, 206, 138, 14, 7, 206, 137, 14, 7, 206, 136, 14, - 7, 206, 135, 14, 7, 206, 134, 14, 7, 206, 133, 14, 7, 206, 132, 14, 7, - 206, 131, 14, 7, 206, 130, 14, 7, 206, 129, 14, 7, 206, 128, 14, 7, 206, - 127, 14, 7, 206, 126, 14, 7, 206, 125, 14, 7, 206, 124, 14, 7, 206, 123, - 14, 7, 206, 122, 14, 7, 206, 121, 14, 7, 206, 120, 14, 7, 206, 119, 14, - 7, 206, 118, 14, 7, 206, 117, 14, 7, 206, 116, 14, 7, 206, 115, 14, 7, - 206, 114, 14, 7, 206, 113, 14, 7, 206, 112, 14, 7, 206, 111, 14, 7, 206, - 110, 14, 7, 206, 109, 14, 7, 206, 108, 14, 7, 206, 107, 14, 7, 206, 106, - 14, 7, 206, 105, 14, 7, 206, 104, 14, 7, 206, 103, 14, 7, 206, 102, 14, - 7, 206, 101, 14, 7, 206, 100, 14, 7, 206, 99, 14, 7, 206, 98, 14, 7, 206, - 97, 14, 7, 206, 96, 14, 7, 206, 95, 14, 7, 206, 94, 14, 7, 206, 93, 14, - 7, 206, 92, 14, 7, 206, 91, 14, 7, 206, 90, 14, 7, 206, 89, 14, 7, 206, - 88, 14, 7, 206, 87, 14, 7, 204, 143, 14, 7, 204, 142, 14, 7, 204, 141, - 14, 7, 204, 140, 14, 7, 204, 139, 14, 7, 204, 138, 14, 7, 204, 137, 14, - 7, 204, 136, 14, 7, 204, 135, 14, 7, 204, 134, 14, 7, 204, 133, 14, 7, - 204, 132, 14, 7, 204, 131, 14, 7, 204, 130, 14, 7, 204, 129, 14, 7, 204, - 128, 14, 7, 204, 127, 14, 7, 204, 126, 14, 7, 204, 125, 14, 7, 204, 124, - 14, 7, 204, 123, 14, 7, 204, 122, 14, 7, 204, 121, 14, 7, 204, 120, 14, - 7, 204, 119, 14, 7, 204, 118, 14, 7, 204, 117, 14, 7, 204, 116, 14, 7, - 204, 115, 14, 7, 204, 114, 14, 7, 204, 113, 14, 7, 204, 112, 14, 7, 203, - 194, 14, 7, 203, 193, 14, 7, 203, 192, 14, 7, 203, 191, 14, 7, 203, 190, - 14, 7, 203, 189, 14, 7, 203, 188, 14, 7, 203, 187, 14, 7, 203, 186, 14, - 7, 203, 185, 14, 7, 203, 184, 14, 7, 203, 183, 14, 7, 203, 122, 14, 7, - 203, 121, 14, 7, 203, 120, 14, 7, 203, 119, 14, 7, 203, 118, 14, 7, 203, - 117, 14, 7, 203, 116, 14, 7, 203, 115, 14, 7, 203, 114, 14, 7, 202, 158, - 14, 7, 202, 157, 14, 7, 202, 156, 14, 7, 202, 155, 14, 7, 202, 154, 14, - 7, 202, 153, 14, 7, 202, 152, 14, 7, 202, 151, 14, 7, 202, 150, 14, 7, - 202, 149, 14, 7, 202, 148, 14, 7, 202, 147, 14, 7, 202, 146, 14, 7, 202, - 145, 14, 7, 202, 144, 14, 7, 202, 143, 14, 7, 202, 142, 14, 7, 202, 141, - 14, 7, 202, 140, 14, 7, 202, 139, 14, 7, 202, 138, 14, 7, 202, 137, 14, - 7, 202, 136, 14, 7, 202, 135, 14, 7, 202, 134, 14, 7, 202, 133, 14, 7, - 202, 132, 14, 7, 202, 131, 14, 7, 202, 130, 14, 7, 202, 129, 14, 7, 202, - 128, 14, 7, 202, 127, 14, 7, 202, 126, 14, 7, 202, 125, 14, 7, 202, 124, - 14, 7, 202, 123, 14, 7, 202, 122, 14, 7, 202, 121, 14, 7, 202, 120, 14, - 7, 202, 119, 14, 7, 202, 118, 14, 7, 252, 24, 14, 7, 252, 23, 14, 7, 252, - 22, 14, 7, 252, 21, 14, 7, 252, 20, 14, 7, 252, 19, 14, 7, 252, 18, 14, - 7, 252, 17, 14, 7, 252, 16, 14, 7, 252, 15, 14, 7, 252, 14, 14, 7, 252, - 13, 14, 7, 252, 12, 14, 7, 252, 11, 14, 7, 252, 10, 14, 7, 252, 9, 14, 7, - 252, 8, 14, 7, 252, 7, 14, 7, 252, 6, 14, 7, 252, 5, 14, 7, 252, 4, 14, - 7, 252, 3, 14, 7, 252, 2, 14, 7, 252, 1, 14, 7, 252, 0, 14, 7, 251, 255, - 14, 7, 251, 254, 14, 7, 251, 253, 14, 7, 251, 252, 14, 7, 251, 251, 14, - 7, 251, 250, 14, 7, 251, 249, 14, 7, 251, 248, 14, 7, 251, 247, 27, 7, - 255, 18, 27, 7, 255, 17, 27, 7, 255, 16, 27, 7, 255, 15, 27, 7, 255, 14, - 27, 7, 255, 12, 27, 7, 255, 9, 27, 7, 255, 8, 27, 7, 255, 7, 27, 7, 255, - 6, 27, 7, 255, 5, 27, 7, 255, 4, 27, 7, 255, 3, 27, 7, 255, 2, 27, 7, - 255, 1, 27, 7, 254, 255, 27, 7, 254, 254, 27, 7, 254, 253, 27, 7, 254, - 251, 27, 7, 254, 250, 27, 7, 254, 249, 27, 7, 254, 248, 27, 7, 254, 247, - 27, 7, 254, 246, 27, 7, 254, 245, 27, 7, 254, 244, 27, 7, 254, 243, 27, - 7, 254, 242, 27, 7, 254, 241, 27, 7, 254, 240, 27, 7, 254, 238, 27, 7, - 254, 237, 27, 7, 254, 236, 27, 7, 254, 235, 27, 7, 254, 233, 27, 7, 254, - 232, 27, 7, 254, 231, 27, 7, 254, 230, 27, 7, 254, 229, 27, 7, 254, 228, - 27, 7, 254, 227, 27, 7, 254, 226, 27, 7, 254, 225, 27, 7, 254, 223, 27, - 7, 254, 222, 27, 7, 254, 221, 27, 7, 254, 219, 27, 7, 254, 217, 27, 7, - 254, 216, 27, 7, 254, 215, 27, 7, 254, 214, 27, 7, 254, 213, 27, 7, 254, - 212, 27, 7, 254, 211, 27, 7, 254, 210, 27, 7, 254, 209, 27, 7, 254, 208, - 27, 7, 254, 207, 27, 7, 254, 206, 27, 7, 254, 205, 27, 7, 254, 204, 27, - 7, 254, 203, 27, 7, 254, 202, 27, 7, 254, 201, 27, 7, 254, 200, 27, 7, - 254, 199, 27, 7, 254, 198, 27, 7, 254, 197, 27, 7, 254, 196, 27, 7, 254, - 195, 27, 7, 254, 194, 27, 7, 254, 193, 27, 7, 254, 192, 27, 7, 254, 191, - 27, 7, 254, 190, 27, 7, 254, 189, 27, 7, 254, 188, 27, 7, 254, 187, 27, - 7, 254, 186, 27, 7, 254, 185, 27, 7, 254, 184, 27, 7, 254, 183, 27, 7, - 254, 182, 27, 7, 254, 181, 27, 7, 254, 180, 27, 7, 254, 179, 27, 7, 254, - 178, 27, 7, 254, 177, 27, 7, 254, 176, 27, 7, 254, 175, 27, 7, 254, 174, - 27, 7, 254, 173, 27, 7, 254, 172, 27, 7, 254, 171, 27, 7, 254, 170, 27, - 7, 254, 169, 27, 7, 254, 168, 27, 7, 254, 167, 27, 7, 254, 166, 27, 7, - 254, 165, 27, 7, 254, 164, 27, 7, 254, 163, 27, 7, 254, 162, 27, 7, 254, - 161, 27, 7, 254, 160, 27, 7, 254, 159, 27, 7, 254, 158, 27, 7, 254, 157, - 27, 7, 254, 156, 27, 7, 254, 155, 27, 7, 254, 154, 27, 7, 254, 153, 27, - 7, 254, 151, 27, 7, 254, 150, 27, 7, 254, 149, 27, 7, 254, 148, 27, 7, - 254, 147, 27, 7, 254, 146, 27, 7, 254, 145, 27, 7, 254, 144, 27, 7, 254, - 143, 27, 7, 254, 142, 27, 7, 254, 141, 27, 7, 254, 140, 27, 7, 254, 139, - 27, 7, 254, 138, 27, 7, 254, 137, 27, 7, 254, 136, 27, 7, 254, 135, 27, - 7, 254, 134, 27, 7, 254, 133, 27, 7, 254, 132, 27, 7, 254, 131, 27, 7, - 254, 130, 27, 7, 254, 129, 27, 7, 254, 128, 27, 7, 254, 127, 27, 7, 254, - 126, 27, 7, 254, 125, 27, 7, 254, 124, 27, 7, 254, 123, 27, 7, 254, 122, - 27, 7, 254, 121, 27, 7, 254, 120, 27, 7, 254, 119, 27, 7, 254, 118, 27, - 7, 254, 116, 27, 7, 254, 115, 27, 7, 254, 114, 27, 7, 254, 113, 27, 7, - 254, 112, 27, 7, 254, 111, 27, 7, 254, 110, 27, 7, 254, 109, 27, 7, 254, - 108, 27, 7, 254, 107, 27, 7, 254, 106, 27, 7, 254, 105, 27, 7, 254, 103, - 27, 7, 254, 102, 27, 7, 254, 101, 27, 7, 254, 100, 27, 7, 254, 99, 27, 7, - 254, 98, 27, 7, 254, 97, 27, 7, 254, 96, 27, 7, 254, 95, 27, 7, 254, 94, - 27, 7, 254, 93, 27, 7, 254, 92, 27, 7, 254, 91, 27, 7, 254, 90, 27, 7, - 254, 89, 27, 7, 254, 88, 27, 7, 254, 87, 27, 7, 254, 86, 27, 7, 254, 85, - 27, 7, 254, 84, 27, 7, 254, 83, 27, 7, 254, 82, 27, 7, 254, 81, 27, 7, - 254, 80, 27, 7, 254, 79, 27, 7, 254, 78, 27, 7, 254, 77, 27, 7, 254, 76, - 27, 7, 254, 75, 27, 7, 254, 74, 27, 7, 254, 73, 27, 7, 254, 72, 27, 7, - 254, 71, 27, 7, 254, 70, 27, 7, 254, 69, 27, 7, 254, 68, 27, 7, 254, 67, - 27, 7, 254, 66, 27, 7, 254, 65, 27, 7, 254, 64, 27, 7, 254, 63, 27, 7, - 254, 62, 27, 7, 254, 61, 27, 7, 254, 60, 27, 7, 254, 59, 27, 7, 254, 58, - 27, 7, 254, 57, 27, 7, 254, 56, 27, 7, 254, 55, 27, 7, 254, 54, 27, 7, - 254, 53, 27, 7, 254, 52, 27, 7, 254, 51, 27, 7, 254, 50, 27, 7, 254, 49, - 27, 7, 254, 48, 27, 7, 254, 47, 27, 7, 254, 46, 27, 7, 254, 45, 27, 7, - 254, 44, 27, 7, 254, 43, 27, 7, 254, 42, 27, 7, 254, 41, 27, 7, 254, 40, - 27, 7, 254, 39, 27, 7, 254, 38, 27, 7, 254, 37, 27, 7, 254, 36, 27, 7, - 254, 35, 27, 7, 254, 33, 27, 7, 254, 32, 27, 7, 254, 31, 27, 7, 254, 30, - 27, 7, 254, 29, 27, 7, 254, 28, 27, 7, 254, 27, 27, 7, 254, 26, 27, 7, - 254, 25, 27, 7, 254, 24, 27, 7, 254, 23, 27, 7, 254, 22, 27, 7, 254, 21, - 27, 7, 254, 20, 27, 7, 254, 19, 27, 7, 254, 18, 27, 7, 254, 17, 27, 7, - 254, 16, 27, 7, 254, 15, 27, 7, 254, 14, 27, 7, 254, 13, 27, 7, 254, 12, - 27, 7, 254, 11, 27, 7, 254, 10, 27, 7, 254, 9, 27, 7, 254, 8, 27, 7, 254, - 7, 27, 7, 254, 6, 27, 7, 254, 5, 27, 7, 254, 4, 27, 7, 254, 3, 27, 7, - 254, 2, 27, 7, 254, 1, 27, 7, 254, 0, 27, 7, 253, 255, 27, 7, 253, 254, - 27, 7, 253, 253, 27, 7, 253, 252, 27, 7, 253, 251, 27, 7, 253, 250, 27, - 7, 253, 249, 27, 7, 253, 248, 27, 7, 253, 247, 27, 7, 253, 246, 27, 7, - 253, 245, 27, 7, 253, 244, 27, 7, 253, 243, 27, 7, 253, 242, 27, 7, 253, - 241, 27, 7, 253, 240, 27, 7, 253, 239, 27, 7, 253, 238, 27, 7, 253, 237, - 27, 7, 253, 236, 27, 7, 253, 235, 27, 7, 253, 234, 27, 7, 253, 233, 27, - 7, 253, 232, 27, 7, 253, 231, 27, 7, 253, 230, 27, 7, 253, 229, 27, 7, - 253, 228, 27, 7, 253, 227, 27, 7, 253, 226, 27, 7, 253, 225, 27, 7, 253, - 224, 27, 7, 253, 223, 27, 7, 253, 222, 27, 7, 253, 221, 27, 7, 253, 220, - 27, 7, 253, 219, 27, 7, 253, 218, 27, 7, 253, 217, 27, 7, 253, 216, 27, - 7, 253, 215, 27, 7, 253, 214, 27, 7, 253, 213, 27, 7, 253, 212, 27, 7, - 253, 211, 27, 7, 253, 210, 27, 7, 253, 209, 27, 7, 253, 208, 27, 7, 253, - 207, 27, 7, 253, 206, 27, 7, 253, 205, 27, 7, 253, 204, 27, 7, 253, 203, - 27, 7, 253, 202, 27, 7, 253, 201, 27, 7, 253, 200, 27, 7, 253, 199, 27, - 7, 253, 198, 27, 7, 253, 197, 27, 7, 253, 196, 27, 7, 253, 195, 27, 7, - 253, 194, 27, 7, 253, 193, 27, 7, 253, 192, 27, 7, 253, 191, 27, 7, 253, - 190, 27, 7, 253, 189, 27, 7, 253, 188, 27, 7, 253, 187, 27, 7, 253, 186, - 27, 7, 253, 185, 27, 7, 253, 184, 27, 7, 253, 183, 27, 7, 253, 182, 27, - 7, 253, 181, 27, 7, 253, 180, 27, 7, 253, 179, 27, 7, 253, 177, 27, 7, - 253, 176, 27, 7, 253, 175, 27, 7, 253, 174, 27, 7, 253, 173, 27, 7, 253, - 172, 27, 7, 253, 171, 27, 7, 253, 170, 27, 7, 253, 169, 27, 7, 253, 168, - 27, 7, 253, 167, 27, 7, 253, 164, 27, 7, 253, 163, 27, 7, 253, 162, 27, - 7, 253, 161, 27, 7, 253, 157, 27, 7, 253, 156, 27, 7, 253, 155, 27, 7, - 253, 154, 27, 7, 253, 153, 27, 7, 253, 152, 27, 7, 253, 151, 27, 7, 253, - 150, 27, 7, 253, 149, 27, 7, 253, 148, 27, 7, 253, 147, 27, 7, 253, 146, - 27, 7, 253, 145, 27, 7, 253, 144, 27, 7, 253, 143, 27, 7, 253, 142, 27, - 7, 253, 141, 27, 7, 253, 140, 27, 7, 253, 139, 27, 7, 253, 137, 27, 7, - 253, 136, 27, 7, 253, 135, 27, 7, 253, 134, 27, 7, 253, 133, 27, 7, 253, - 132, 27, 7, 253, 131, 27, 7, 253, 130, 27, 7, 253, 129, 27, 7, 253, 128, - 27, 7, 253, 127, 27, 7, 253, 126, 27, 7, 253, 125, 27, 7, 253, 124, 27, - 7, 253, 123, 27, 7, 253, 122, 27, 7, 253, 121, 27, 7, 253, 120, 27, 7, - 253, 119, 27, 7, 253, 118, 27, 7, 253, 117, 27, 7, 253, 116, 27, 7, 253, - 115, 27, 7, 253, 114, 27, 7, 253, 113, 27, 7, 253, 112, 27, 7, 253, 111, - 27, 7, 253, 110, 27, 7, 253, 109, 27, 7, 253, 108, 27, 7, 253, 107, 27, - 7, 253, 106, 27, 7, 253, 105, 27, 7, 253, 104, 27, 7, 253, 103, 27, 7, - 253, 102, 27, 7, 253, 101, 27, 7, 253, 100, 27, 7, 253, 99, 27, 7, 253, - 98, 27, 7, 253, 97, 27, 7, 253, 96, 27, 7, 253, 95, 27, 7, 253, 94, 27, - 7, 253, 93, 27, 7, 253, 92, 27, 7, 253, 91, 27, 7, 253, 90, 27, 7, 253, - 89, 27, 7, 253, 88, 27, 7, 253, 87, 27, 7, 253, 86, 27, 7, 253, 85, 27, - 7, 253, 84, 27, 7, 253, 83, 27, 7, 253, 82, 27, 7, 253, 81, 27, 7, 253, - 80, 27, 7, 253, 79, 27, 7, 253, 78, 27, 7, 253, 77, 27, 7, 253, 76, 216, - 221, 219, 245, 216, 57, 27, 7, 253, 75, 27, 7, 253, 74, 27, 7, 253, 73, - 27, 7, 253, 72, 27, 7, 253, 71, 27, 7, 253, 70, 27, 7, 253, 69, 27, 7, - 253, 68, 27, 7, 253, 67, 27, 7, 253, 66, 27, 7, 253, 65, 27, 7, 253, 64, - 199, 27, 7, 253, 63, 27, 7, 253, 62, 27, 7, 253, 61, 27, 7, 253, 60, 27, - 7, 253, 59, 27, 7, 253, 58, 27, 7, 253, 57, 27, 7, 253, 55, 27, 7, 253, - 53, 27, 7, 253, 51, 27, 7, 253, 49, 27, 7, 253, 47, 27, 7, 253, 45, 27, - 7, 253, 43, 27, 7, 253, 41, 27, 7, 253, 39, 27, 7, 253, 37, 248, 142, - 227, 36, 82, 27, 7, 253, 35, 241, 84, 227, 36, 82, 27, 7, 253, 34, 27, 7, - 253, 32, 27, 7, 253, 30, 27, 7, 253, 28, 27, 7, 253, 26, 27, 7, 253, 24, - 27, 7, 253, 22, 27, 7, 253, 20, 27, 7, 253, 18, 27, 7, 253, 17, 27, 7, - 253, 16, 27, 7, 253, 15, 27, 7, 253, 14, 27, 7, 253, 13, 27, 7, 253, 12, - 27, 7, 253, 11, 27, 7, 253, 10, 27, 7, 253, 9, 27, 7, 253, 8, 27, 7, 253, - 7, 27, 7, 253, 6, 27, 7, 253, 5, 27, 7, 253, 4, 27, 7, 253, 3, 27, 7, - 253, 2, 27, 7, 253, 1, 27, 7, 253, 0, 27, 7, 252, 255, 27, 7, 252, 254, - 27, 7, 252, 253, 27, 7, 252, 252, 27, 7, 252, 251, 27, 7, 252, 250, 27, - 7, 252, 249, 27, 7, 252, 248, 27, 7, 252, 247, 27, 7, 252, 246, 27, 7, - 252, 245, 27, 7, 252, 244, 27, 7, 252, 243, 27, 7, 252, 242, 27, 7, 252, - 241, 27, 7, 252, 240, 27, 7, 252, 239, 27, 7, 252, 238, 27, 7, 252, 237, - 27, 7, 252, 236, 27, 7, 252, 235, 27, 7, 252, 234, 27, 7, 252, 233, 27, - 7, 252, 232, 27, 7, 252, 231, 27, 7, 252, 230, 27, 7, 252, 229, 27, 7, - 252, 228, 27, 7, 252, 227, 27, 7, 252, 226, 27, 7, 252, 225, 27, 7, 252, - 224, 27, 7, 252, 223, 27, 7, 252, 222, 27, 7, 252, 221, 27, 7, 252, 220, - 27, 7, 252, 219, 27, 7, 252, 218, 27, 7, 252, 217, 27, 7, 252, 216, 27, - 7, 252, 215, 27, 7, 252, 214, 27, 7, 252, 213, 27, 7, 252, 212, 27, 7, - 252, 211, 27, 7, 252, 210, 27, 7, 252, 209, 27, 7, 252, 208, 27, 7, 252, - 207, 27, 7, 252, 206, 27, 7, 252, 205, 27, 7, 252, 204, 27, 7, 252, 203, - 27, 7, 252, 202, 27, 7, 252, 201, 27, 7, 252, 200, 27, 7, 252, 199, 27, - 7, 252, 198, 27, 7, 252, 197, 27, 7, 252, 196, 27, 7, 252, 195, 27, 7, - 252, 194, 27, 7, 252, 193, 27, 7, 252, 192, 27, 7, 252, 191, 27, 7, 252, - 190, 27, 7, 252, 189, 27, 7, 252, 188, 27, 7, 252, 187, 27, 7, 252, 186, - 27, 7, 252, 185, 27, 7, 252, 184, 27, 7, 252, 183, 27, 7, 252, 182, 27, - 7, 252, 181, 27, 7, 252, 180, 27, 7, 252, 179, 27, 7, 252, 178, 27, 7, - 252, 177, 27, 7, 252, 176, 27, 7, 252, 175, 27, 7, 252, 174, 27, 7, 252, - 173, 27, 7, 252, 172, 27, 7, 252, 171, 27, 7, 252, 170, 27, 7, 252, 169, - 27, 7, 252, 168, 27, 7, 252, 167, 27, 7, 252, 166, 27, 7, 252, 165, 27, - 7, 252, 164, 24, 1, 218, 198, 222, 136, 224, 197, 24, 1, 218, 198, 238, - 198, 239, 178, 24, 1, 218, 198, 218, 47, 224, 198, 218, 115, 24, 1, 218, - 198, 218, 47, 224, 198, 218, 116, 24, 1, 218, 198, 223, 107, 224, 197, - 24, 1, 218, 198, 212, 195, 24, 1, 218, 198, 208, 199, 224, 197, 24, 1, - 218, 198, 220, 215, 224, 197, 24, 1, 218, 198, 212, 254, 219, 169, 222, - 32, 24, 1, 218, 198, 218, 47, 219, 169, 222, 33, 218, 115, 24, 1, 218, - 198, 218, 47, 219, 169, 222, 33, 218, 116, 24, 1, 218, 198, 225, 156, 24, - 1, 218, 198, 207, 204, 225, 157, 24, 1, 218, 198, 222, 197, 24, 1, 218, - 198, 225, 153, 24, 1, 218, 198, 225, 111, 24, 1, 218, 198, 223, 186, 24, - 1, 218, 198, 213, 114, 24, 1, 218, 198, 221, 91, 24, 1, 218, 198, 229, - 163, 24, 1, 218, 198, 222, 0, 24, 1, 218, 198, 210, 179, 24, 1, 218, 198, - 222, 135, 24, 1, 218, 198, 228, 10, 24, 1, 218, 198, 227, 176, 228, 175, - 24, 1, 218, 198, 221, 101, 224, 205, 24, 1, 218, 198, 225, 160, 24, 1, - 218, 198, 219, 62, 24, 1, 218, 198, 238, 100, 24, 1, 218, 198, 219, 125, - 24, 1, 218, 198, 224, 55, 222, 170, 24, 1, 218, 198, 220, 196, 224, 208, - 24, 1, 218, 198, 106, 202, 188, 223, 100, 24, 1, 218, 198, 238, 101, 24, - 1, 218, 198, 221, 101, 221, 102, 24, 1, 218, 198, 212, 91, 24, 1, 218, - 198, 224, 190, 24, 1, 218, 198, 224, 211, 24, 1, 218, 198, 224, 31, 24, - 1, 218, 198, 230, 21, 24, 1, 218, 198, 219, 169, 227, 223, 24, 1, 218, - 198, 223, 26, 227, 223, 24, 1, 218, 198, 218, 219, 24, 1, 218, 198, 225, - 154, 24, 1, 218, 198, 222, 74, 24, 1, 218, 198, 217, 172, 24, 1, 218, - 198, 207, 201, 24, 1, 218, 198, 226, 235, 24, 1, 218, 198, 211, 251, 24, - 1, 218, 198, 209, 117, 24, 1, 218, 198, 225, 151, 24, 1, 218, 198, 229, - 170, 24, 1, 218, 198, 223, 22, 24, 1, 218, 198, 228, 188, 24, 1, 218, - 198, 224, 32, 24, 1, 218, 198, 212, 191, 24, 1, 218, 198, 227, 29, 24, 1, - 218, 198, 239, 246, 24, 1, 218, 198, 215, 211, 24, 1, 218, 198, 228, 233, - 24, 1, 218, 198, 211, 247, 24, 1, 218, 198, 225, 107, 218, 157, 24, 1, - 218, 198, 212, 247, 24, 1, 218, 198, 221, 100, 24, 1, 218, 198, 212, 230, - 221, 111, 202, 196, 24, 1, 218, 198, 220, 237, 224, 51, 24, 1, 218, 198, - 219, 164, 24, 1, 218, 198, 222, 2, 24, 1, 218, 198, 206, 231, 24, 1, 218, - 198, 222, 173, 24, 1, 218, 198, 225, 150, 24, 1, 218, 198, 222, 44, 24, - 1, 218, 198, 225, 49, 24, 1, 218, 198, 220, 251, 24, 1, 218, 198, 209, - 121, 24, 1, 218, 198, 211, 244, 24, 1, 218, 198, 219, 165, 24, 1, 218, - 198, 221, 115, 24, 1, 218, 198, 225, 158, 24, 1, 218, 198, 220, 248, 24, - 1, 218, 198, 229, 241, 24, 1, 218, 198, 221, 118, 24, 1, 218, 198, 206, - 50, 24, 1, 218, 198, 226, 239, 24, 1, 218, 198, 222, 230, 24, 1, 218, - 198, 223, 75, 24, 1, 218, 198, 225, 48, 24, 1, 218, 197, 221, 113, 24, 1, - 218, 197, 207, 204, 225, 155, 24, 1, 218, 197, 212, 152, 24, 1, 218, 197, - 213, 118, 207, 203, 24, 1, 218, 197, 227, 31, 221, 97, 24, 1, 218, 197, - 225, 55, 225, 159, 24, 1, 218, 197, 229, 92, 24, 1, 218, 197, 203, 18, - 24, 1, 218, 197, 225, 50, 24, 1, 218, 197, 230, 7, 24, 1, 218, 197, 219, - 19, 24, 1, 218, 197, 203, 96, 227, 223, 24, 1, 218, 197, 228, 29, 221, - 111, 221, 6, 24, 1, 218, 197, 221, 94, 213, 17, 24, 1, 218, 197, 222, - 249, 222, 47, 24, 1, 218, 197, 238, 98, 24, 1, 218, 197, 218, 105, 24, 1, - 218, 197, 207, 204, 221, 109, 24, 1, 218, 197, 213, 22, 222, 42, 24, 1, - 218, 197, 213, 18, 24, 1, 218, 197, 224, 198, 209, 120, 24, 1, 218, 197, - 225, 37, 225, 51, 24, 1, 218, 197, 220, 249, 221, 97, 24, 1, 218, 197, - 229, 159, 24, 1, 218, 197, 238, 99, 24, 1, 218, 197, 229, 155, 24, 1, - 218, 197, 228, 107, 24, 1, 218, 197, 219, 65, 24, 1, 218, 197, 205, 237, - 24, 1, 218, 197, 222, 137, 223, 184, 24, 1, 218, 197, 222, 172, 225, 33, - 24, 1, 218, 197, 203, 215, 24, 1, 218, 197, 215, 12, 24, 1, 218, 197, - 210, 14, 24, 1, 218, 197, 224, 210, 24, 1, 218, 197, 222, 156, 24, 1, - 218, 197, 222, 157, 228, 7, 24, 1, 218, 197, 224, 200, 24, 1, 218, 197, - 210, 230, 24, 1, 218, 197, 225, 41, 24, 1, 218, 197, 224, 36, 24, 1, 218, - 197, 221, 9, 24, 1, 218, 197, 217, 176, 24, 1, 218, 197, 224, 209, 222, - 174, 24, 1, 218, 197, 240, 31, 24, 1, 218, 197, 225, 28, 24, 1, 218, 197, - 240, 53, 24, 1, 218, 197, 229, 167, 24, 1, 218, 197, 225, 177, 222, 36, - 24, 1, 218, 197, 225, 177, 222, 12, 24, 1, 218, 197, 227, 175, 24, 1, - 218, 197, 222, 180, 24, 1, 218, 197, 221, 120, 24, 1, 218, 197, 192, 24, - 1, 218, 197, 229, 77, 24, 1, 218, 197, 222, 125, 24, 1, 168, 222, 136, - 225, 157, 24, 1, 168, 220, 214, 24, 1, 168, 202, 196, 24, 1, 168, 204, - 95, 24, 1, 168, 222, 173, 24, 1, 168, 223, 14, 24, 1, 168, 222, 143, 24, - 1, 168, 238, 108, 24, 1, 168, 225, 45, 24, 1, 168, 238, 205, 24, 1, 168, - 220, 239, 224, 91, 224, 212, 24, 1, 168, 221, 89, 225, 36, 24, 1, 168, - 225, 42, 24, 1, 168, 218, 111, 24, 1, 168, 222, 255, 24, 1, 168, 225, 53, - 247, 88, 24, 1, 168, 229, 157, 24, 1, 168, 238, 109, 24, 1, 168, 229, - 164, 24, 1, 168, 202, 214, 223, 215, 24, 1, 168, 220, 208, 24, 1, 168, - 225, 30, 24, 1, 168, 221, 119, 24, 1, 168, 225, 36, 24, 1, 168, 203, 19, - 24, 1, 168, 228, 241, 24, 1, 168, 230, 41, 24, 1, 168, 213, 113, 24, 1, - 168, 223, 8, 24, 1, 168, 210, 12, 24, 1, 168, 222, 16, 24, 1, 168, 208, - 199, 202, 199, 24, 1, 168, 211, 5, 24, 1, 168, 222, 163, 221, 6, 24, 1, - 168, 205, 236, 24, 1, 168, 223, 78, 24, 1, 168, 225, 177, 229, 166, 24, - 1, 168, 221, 102, 24, 1, 168, 222, 158, 24, 1, 168, 228, 11, 24, 1, 168, - 225, 38, 24, 1, 168, 224, 189, 24, 1, 168, 221, 96, 24, 1, 168, 209, 116, - 24, 1, 168, 222, 160, 24, 1, 168, 239, 106, 24, 1, 168, 223, 13, 24, 1, - 168, 221, 121, 24, 1, 168, 221, 117, 24, 1, 168, 247, 169, 24, 1, 168, - 205, 238, 24, 1, 168, 225, 43, 24, 1, 168, 215, 145, 24, 1, 168, 222, 46, - 24, 1, 168, 228, 28, 24, 1, 168, 208, 196, 24, 1, 168, 221, 103, 222, - 125, 24, 1, 168, 222, 38, 24, 1, 168, 229, 170, 24, 1, 168, 222, 165, 24, - 1, 168, 225, 150, 24, 1, 168, 225, 31, 24, 1, 168, 226, 239, 24, 1, 168, - 228, 175, 24, 1, 168, 222, 44, 24, 1, 168, 222, 125, 24, 1, 168, 203, - 205, 24, 1, 168, 222, 161, 24, 1, 168, 221, 106, 24, 1, 168, 221, 98, 24, - 1, 168, 228, 190, 222, 2, 24, 1, 168, 221, 104, 24, 1, 168, 223, 21, 24, - 1, 168, 225, 177, 221, 109, 24, 1, 168, 203, 110, 24, 1, 168, 223, 20, - 24, 1, 168, 212, 194, 24, 1, 168, 213, 116, 24, 1, 168, 225, 39, 24, 1, - 168, 225, 157, 24, 1, 168, 225, 49, 24, 1, 168, 229, 158, 24, 1, 168, - 225, 40, 24, 1, 168, 229, 162, 24, 1, 168, 225, 53, 218, 162, 24, 1, 168, - 202, 179, 24, 1, 168, 222, 34, 24, 1, 168, 224, 144, 24, 1, 168, 223, - 244, 24, 1, 168, 212, 250, 24, 1, 168, 229, 181, 227, 246, 24, 1, 168, - 229, 181, 240, 66, 24, 1, 168, 222, 195, 24, 1, 168, 223, 75, 24, 1, 168, - 227, 96, 24, 1, 168, 218, 123, 24, 1, 168, 219, 9, 24, 1, 168, 209, 132, - 24, 1, 134, 225, 29, 24, 1, 134, 204, 93, 24, 1, 134, 222, 32, 24, 1, - 134, 224, 197, 24, 1, 134, 222, 30, 24, 1, 134, 227, 141, 24, 1, 134, - 222, 35, 24, 1, 134, 221, 116, 24, 1, 134, 222, 179, 24, 1, 134, 221, 6, - 24, 1, 134, 203, 216, 24, 1, 134, 222, 133, 24, 1, 134, 213, 41, 24, 1, - 134, 222, 144, 24, 1, 134, 229, 165, 24, 1, 134, 209, 118, 24, 1, 134, - 213, 20, 24, 1, 134, 222, 43, 24, 1, 134, 210, 230, 24, 1, 134, 229, 170, - 24, 1, 134, 203, 98, 24, 1, 134, 228, 191, 24, 1, 134, 214, 233, 24, 1, - 134, 224, 202, 24, 1, 134, 223, 12, 24, 1, 134, 225, 125, 24, 1, 134, - 224, 208, 24, 1, 134, 213, 115, 24, 1, 134, 203, 42, 24, 1, 134, 222, 37, - 24, 1, 134, 229, 161, 225, 32, 24, 1, 134, 222, 140, 24, 1, 134, 207, - 203, 24, 1, 134, 238, 118, 24, 1, 134, 222, 130, 24, 1, 134, 240, 32, 24, - 1, 134, 223, 16, 24, 1, 134, 224, 181, 24, 1, 134, 227, 169, 24, 1, 134, - 222, 254, 24, 1, 134, 224, 50, 24, 1, 134, 224, 185, 24, 1, 134, 217, - 156, 24, 1, 134, 224, 183, 24, 1, 134, 224, 199, 24, 1, 134, 226, 222, - 24, 1, 134, 221, 108, 24, 1, 134, 225, 52, 24, 1, 134, 228, 165, 24, 1, - 134, 220, 251, 24, 1, 134, 209, 121, 24, 1, 134, 211, 244, 24, 1, 134, - 202, 179, 24, 1, 134, 229, 162, 24, 1, 134, 216, 201, 24, 1, 134, 209, - 175, 24, 1, 134, 222, 141, 24, 1, 134, 224, 204, 24, 1, 134, 221, 107, - 24, 1, 134, 229, 160, 24, 1, 134, 218, 117, 24, 1, 134, 218, 213, 24, 1, - 134, 220, 225, 24, 1, 134, 227, 175, 24, 1, 134, 222, 180, 24, 1, 134, - 224, 201, 24, 1, 134, 222, 153, 24, 1, 134, 202, 193, 24, 1, 134, 219, - 96, 24, 1, 134, 202, 192, 24, 1, 134, 223, 21, 24, 1, 134, 221, 97, 24, - 1, 134, 211, 7, 24, 1, 134, 228, 195, 24, 1, 134, 222, 169, 24, 1, 134, - 222, 138, 24, 1, 134, 207, 185, 24, 1, 134, 224, 212, 24, 1, 134, 228, - 185, 24, 1, 134, 221, 105, 24, 1, 134, 209, 119, 24, 1, 134, 225, 152, - 24, 1, 134, 222, 178, 24, 1, 134, 227, 168, 24, 1, 134, 222, 159, 24, 1, - 134, 221, 110, 24, 1, 134, 222, 16, 24, 1, 134, 238, 102, 24, 1, 134, - 228, 209, 24, 1, 134, 216, 108, 220, 45, 24, 1, 134, 210, 1, 24, 1, 134, - 208, 141, 24, 1, 134, 220, 248, 24, 1, 134, 216, 3, 24, 1, 134, 227, 225, - 24, 1, 134, 225, 7, 24, 1, 134, 226, 185, 24, 1, 134, 210, 179, 24, 1, - 134, 223, 246, 24, 1, 134, 213, 6, 24, 1, 134, 213, 16, 24, 1, 134, 228, - 137, 24, 1, 134, 221, 84, 24, 1, 134, 212, 199, 24, 1, 134, 221, 99, 24, - 1, 134, 219, 23, 24, 1, 134, 222, 100, 24, 1, 134, 212, 229, 24, 1, 134, - 217, 171, 24, 1, 134, 223, 184, 24, 1, 134, 227, 10, 24, 1, 134, 216, - 108, 223, 239, 24, 1, 134, 209, 2, 24, 1, 134, 221, 86, 24, 1, 134, 225, - 53, 213, 111, 24, 1, 134, 214, 231, 24, 1, 134, 240, 107, 24, 1, 93, 223, - 20, 24, 1, 93, 208, 147, 24, 1, 93, 225, 42, 24, 1, 93, 228, 11, 24, 1, - 93, 205, 177, 24, 1, 93, 227, 16, 24, 1, 93, 219, 168, 24, 1, 93, 211, - 255, 24, 1, 93, 216, 176, 24, 1, 93, 221, 112, 24, 1, 93, 222, 247, 24, - 1, 93, 217, 188, 24, 1, 93, 209, 232, 24, 1, 93, 222, 146, 24, 1, 93, - 228, 237, 24, 1, 93, 203, 208, 24, 1, 93, 214, 165, 24, 1, 93, 222, 170, - 24, 1, 93, 219, 165, 24, 1, 93, 208, 148, 24, 1, 93, 228, 189, 24, 1, 93, - 227, 30, 24, 1, 93, 221, 115, 24, 1, 93, 222, 122, 24, 1, 93, 225, 158, - 24, 1, 93, 222, 139, 24, 1, 93, 222, 121, 24, 1, 93, 221, 114, 24, 1, 93, - 216, 0, 24, 1, 93, 222, 34, 24, 1, 93, 219, 21, 24, 1, 93, 215, 33, 24, - 1, 93, 222, 154, 24, 1, 93, 224, 191, 24, 1, 93, 238, 96, 24, 1, 93, 222, - 142, 24, 1, 93, 222, 45, 24, 1, 93, 225, 106, 24, 1, 93, 227, 12, 24, 1, - 93, 222, 175, 24, 1, 93, 223, 4, 24, 1, 93, 210, 0, 221, 97, 24, 1, 93, - 213, 117, 24, 1, 93, 217, 181, 24, 1, 93, 223, 24, 212, 6, 24, 1, 93, - 222, 162, 221, 6, 24, 1, 93, 203, 7, 24, 1, 93, 238, 97, 24, 1, 93, 207, - 202, 24, 1, 93, 203, 22, 24, 1, 93, 218, 69, 24, 1, 93, 207, 190, 24, 1, - 93, 229, 168, 24, 1, 93, 211, 6, 24, 1, 93, 209, 120, 24, 1, 93, 205, - 239, 24, 1, 93, 204, 43, 24, 1, 93, 228, 110, 24, 1, 93, 217, 191, 24, 1, - 93, 210, 13, 24, 1, 93, 238, 117, 24, 1, 93, 222, 185, 24, 1, 93, 213, - 19, 24, 1, 93, 224, 186, 24, 1, 93, 225, 46, 24, 1, 93, 220, 212, 24, 1, - 93, 221, 254, 24, 1, 93, 238, 201, 24, 1, 93, 207, 191, 24, 1, 93, 228, - 199, 24, 1, 93, 203, 74, 24, 1, 93, 220, 249, 246, 32, 24, 1, 93, 202, - 253, 24, 1, 93, 224, 203, 24, 1, 93, 223, 9, 24, 1, 93, 218, 158, 24, 1, - 93, 202, 198, 24, 1, 93, 227, 170, 24, 1, 93, 239, 106, 24, 1, 93, 238, - 200, 24, 1, 93, 222, 132, 24, 1, 93, 229, 170, 24, 1, 93, 225, 161, 24, - 1, 93, 222, 145, 24, 1, 93, 238, 103, 24, 1, 93, 240, 108, 24, 1, 93, - 221, 87, 24, 1, 93, 218, 214, 24, 1, 93, 203, 20, 24, 1, 93, 222, 171, - 24, 1, 93, 220, 249, 248, 103, 24, 1, 93, 220, 192, 24, 1, 93, 218, 43, - 24, 1, 93, 224, 144, 24, 1, 93, 239, 104, 24, 1, 93, 223, 100, 24, 1, 93, - 223, 244, 24, 1, 93, 238, 102, 24, 1, 93, 239, 109, 75, 24, 1, 93, 223, - 185, 24, 1, 93, 217, 187, 24, 1, 93, 222, 134, 24, 1, 93, 228, 175, 24, - 1, 93, 218, 155, 24, 1, 93, 221, 100, 24, 1, 93, 203, 21, 24, 1, 93, 222, - 155, 24, 1, 93, 219, 169, 218, 252, 24, 1, 93, 239, 109, 247, 71, 24, 1, - 93, 239, 179, 24, 1, 93, 222, 39, 24, 1, 93, 63, 24, 1, 93, 208, 141, 24, - 1, 93, 78, 24, 1, 93, 75, 24, 1, 93, 228, 9, 24, 1, 93, 219, 169, 218, - 77, 24, 1, 93, 210, 18, 24, 1, 93, 209, 219, 24, 1, 93, 223, 24, 223, - 172, 236, 38, 24, 1, 93, 212, 250, 24, 1, 93, 203, 17, 24, 1, 93, 222, - 115, 24, 1, 93, 202, 203, 24, 1, 93, 202, 230, 210, 159, 24, 1, 93, 202, - 230, 245, 151, 24, 1, 93, 202, 187, 24, 1, 93, 202, 195, 24, 1, 93, 229, - 156, 24, 1, 93, 218, 212, 24, 1, 93, 222, 40, 241, 39, 24, 1, 93, 217, - 183, 24, 1, 93, 203, 214, 24, 1, 93, 240, 53, 24, 1, 93, 206, 50, 24, 1, - 93, 226, 239, 24, 1, 93, 224, 155, 24, 1, 93, 216, 75, 24, 1, 93, 216, - 202, 24, 1, 93, 222, 114, 24, 1, 93, 222, 203, 24, 1, 93, 212, 242, 24, - 1, 93, 212, 229, 24, 1, 93, 239, 109, 216, 111, 24, 1, 93, 201, 201, 24, - 1, 93, 218, 167, 24, 1, 93, 227, 10, 24, 1, 93, 229, 26, 24, 1, 93, 224, - 240, 24, 1, 93, 192, 24, 1, 93, 225, 103, 24, 1, 93, 209, 122, 24, 1, 93, - 229, 100, 24, 1, 93, 224, 54, 24, 1, 93, 209, 152, 24, 1, 93, 240, 77, - 24, 1, 93, 238, 90, 24, 1, 218, 196, 173, 24, 1, 218, 196, 68, 24, 1, - 218, 196, 228, 209, 24, 1, 218, 196, 241, 161, 24, 1, 218, 196, 216, 135, - 24, 1, 218, 196, 210, 1, 24, 1, 218, 196, 220, 248, 24, 1, 218, 196, 228, - 113, 24, 1, 218, 196, 216, 3, 24, 1, 218, 196, 216, 50, 24, 1, 218, 196, - 225, 7, 24, 1, 218, 196, 210, 18, 24, 1, 218, 196, 223, 23, 24, 1, 218, - 196, 222, 46, 24, 1, 218, 196, 226, 185, 24, 1, 218, 196, 210, 179, 24, - 1, 218, 196, 213, 6, 24, 1, 218, 196, 212, 162, 24, 1, 218, 196, 213, - 113, 24, 1, 218, 196, 228, 137, 24, 1, 218, 196, 229, 170, 24, 1, 218, - 196, 221, 55, 24, 1, 218, 196, 221, 84, 24, 1, 218, 196, 222, 17, 24, 1, - 218, 196, 202, 229, 24, 1, 218, 196, 212, 199, 24, 1, 218, 196, 198, 24, - 1, 218, 196, 221, 118, 24, 1, 218, 196, 218, 212, 24, 1, 218, 196, 221, - 99, 24, 1, 218, 196, 203, 214, 24, 1, 218, 196, 219, 23, 24, 1, 218, 196, - 215, 145, 24, 1, 218, 196, 222, 100, 24, 1, 218, 196, 216, 75, 24, 1, - 218, 196, 229, 180, 24, 1, 218, 196, 222, 131, 24, 1, 218, 196, 222, 182, - 24, 1, 218, 196, 212, 242, 24, 1, 218, 196, 217, 188, 24, 1, 218, 196, - 239, 179, 24, 1, 218, 196, 204, 111, 24, 1, 218, 196, 227, 148, 24, 1, - 218, 196, 227, 10, 24, 1, 218, 196, 229, 26, 24, 1, 218, 196, 225, 44, - 24, 1, 218, 196, 216, 107, 24, 1, 218, 196, 192, 24, 1, 218, 196, 224, - 82, 24, 1, 218, 196, 225, 52, 24, 1, 218, 196, 209, 132, 24, 1, 218, 196, - 228, 244, 24, 1, 218, 196, 214, 251, 24, 1, 218, 196, 204, 162, 223, 249, - 1, 210, 22, 223, 249, 1, 222, 151, 223, 249, 1, 202, 247, 223, 249, 1, - 224, 112, 223, 249, 1, 249, 32, 223, 249, 1, 244, 212, 223, 249, 1, 63, - 223, 249, 1, 218, 192, 223, 249, 1, 229, 139, 223, 249, 1, 237, 95, 223, - 249, 1, 244, 188, 223, 249, 1, 246, 98, 223, 249, 1, 229, 200, 223, 249, - 1, 220, 46, 223, 249, 1, 225, 158, 223, 249, 1, 222, 68, 223, 249, 1, - 185, 223, 249, 1, 220, 18, 223, 249, 1, 78, 223, 249, 1, 215, 227, 223, - 249, 1, 213, 11, 223, 249, 1, 209, 91, 223, 249, 1, 241, 189, 223, 249, - 1, 204, 111, 223, 249, 1, 74, 223, 249, 1, 229, 26, 223, 249, 1, 228, 17, - 223, 249, 1, 228, 113, 223, 249, 1, 237, 147, 223, 249, 1, 216, 57, 223, - 249, 1, 209, 165, 223, 249, 17, 202, 84, 223, 249, 17, 105, 223, 249, 17, - 108, 223, 249, 17, 147, 223, 249, 17, 149, 223, 249, 17, 170, 223, 249, - 17, 195, 223, 249, 17, 213, 111, 223, 249, 17, 199, 223, 249, 17, 222, - 63, 223, 249, 244, 166, 223, 249, 52, 244, 166, 248, 212, 206, 83, 1, - 241, 74, 248, 212, 206, 83, 1, 173, 248, 212, 206, 83, 1, 214, 177, 248, - 212, 206, 83, 1, 240, 108, 248, 212, 206, 83, 1, 225, 47, 248, 212, 206, - 83, 1, 203, 8, 248, 212, 206, 83, 1, 238, 249, 248, 212, 206, 83, 1, 243, - 238, 248, 212, 206, 83, 1, 228, 243, 248, 212, 206, 83, 1, 230, 101, 248, - 212, 206, 83, 1, 235, 253, 248, 212, 206, 83, 1, 204, 111, 248, 212, 206, - 83, 1, 202, 17, 248, 212, 206, 83, 1, 238, 194, 248, 212, 206, 83, 1, - 243, 113, 248, 212, 206, 83, 1, 246, 238, 248, 212, 206, 83, 1, 206, 171, - 248, 212, 206, 83, 1, 135, 248, 212, 206, 83, 1, 249, 32, 248, 212, 206, - 83, 1, 204, 163, 248, 212, 206, 83, 1, 203, 46, 248, 212, 206, 83, 1, - 185, 248, 212, 206, 83, 1, 204, 108, 248, 212, 206, 83, 1, 63, 248, 212, - 206, 83, 1, 78, 248, 212, 206, 83, 1, 220, 18, 248, 212, 206, 83, 1, 68, - 248, 212, 206, 83, 1, 241, 161, 248, 212, 206, 83, 1, 74, 248, 212, 206, - 83, 1, 75, 248, 212, 206, 83, 39, 138, 208, 161, 248, 212, 206, 83, 39, - 124, 208, 161, 248, 212, 206, 83, 39, 224, 150, 208, 161, 248, 212, 206, - 83, 39, 226, 253, 208, 161, 248, 212, 206, 83, 39, 236, 242, 208, 161, - 248, 212, 206, 83, 239, 102, 211, 61, 119, 117, 22, 229, 197, 119, 117, - 22, 229, 193, 119, 117, 22, 229, 97, 119, 117, 22, 229, 63, 119, 117, 22, - 229, 218, 119, 117, 22, 229, 215, 119, 117, 22, 228, 200, 119, 117, 22, - 228, 172, 119, 117, 22, 229, 199, 119, 117, 22, 229, 154, 119, 117, 22, - 230, 17, 119, 117, 22, 230, 14, 119, 117, 22, 229, 5, 119, 117, 22, 229, - 2, 119, 117, 22, 229, 212, 119, 117, 22, 229, 210, 119, 117, 22, 228, - 202, 119, 117, 22, 228, 201, 119, 117, 22, 229, 23, 119, 117, 22, 228, - 247, 119, 117, 22, 229, 99, 119, 117, 22, 229, 98, 119, 117, 22, 230, 32, - 119, 117, 22, 229, 214, 119, 117, 22, 228, 163, 119, 117, 22, 228, 154, - 119, 117, 22, 230, 40, 119, 117, 22, 230, 33, 119, 117, 109, 206, 61, - 119, 117, 109, 221, 90, 119, 117, 109, 227, 251, 119, 117, 109, 237, 76, - 119, 117, 109, 221, 230, 119, 117, 109, 216, 167, 119, 117, 109, 222, 1, - 119, 117, 109, 217, 100, 119, 117, 109, 203, 62, 119, 117, 109, 236, 221, - 119, 117, 109, 225, 67, 119, 117, 109, 246, 174, 119, 117, 109, 223, 28, - 119, 117, 109, 236, 157, 119, 117, 109, 218, 85, 119, 117, 109, 221, 95, - 119, 117, 109, 223, 65, 119, 117, 109, 250, 34, 119, 117, 109, 203, 178, - 119, 117, 109, 247, 15, 119, 117, 131, 246, 67, 207, 199, 119, 117, 131, - 246, 67, 212, 13, 119, 117, 131, 246, 67, 229, 172, 119, 117, 131, 246, - 67, 229, 130, 119, 117, 131, 246, 67, 211, 4, 119, 117, 131, 246, 67, - 236, 123, 119, 117, 131, 246, 67, 209, 206, 119, 117, 2, 205, 173, 209, - 44, 119, 117, 2, 205, 173, 208, 9, 246, 229, 119, 117, 2, 246, 67, 246, - 163, 119, 117, 2, 205, 173, 209, 69, 119, 117, 2, 205, 173, 240, 50, 119, - 117, 2, 203, 136, 221, 85, 119, 117, 2, 203, 136, 216, 59, 119, 117, 2, - 203, 136, 208, 124, 119, 117, 2, 203, 136, 240, 89, 119, 117, 2, 205, - 173, 214, 159, 119, 117, 2, 225, 6, 211, 8, 119, 117, 2, 205, 173, 221, - 134, 119, 117, 2, 235, 167, 203, 81, 119, 117, 2, 203, 177, 119, 117, 2, - 246, 67, 207, 252, 215, 216, 119, 117, 17, 202, 84, 119, 117, 17, 105, - 119, 117, 17, 108, 119, 117, 17, 147, 119, 117, 17, 149, 119, 117, 17, - 170, 119, 117, 17, 195, 119, 117, 17, 213, 111, 119, 117, 17, 199, 119, - 117, 17, 222, 63, 119, 117, 42, 209, 147, 119, 117, 42, 236, 10, 119, - 117, 42, 209, 153, 209, 34, 119, 117, 42, 224, 113, 119, 117, 42, 236, - 12, 224, 113, 119, 117, 42, 209, 153, 248, 68, 119, 117, 42, 208, 72, - 119, 117, 2, 205, 173, 226, 234, 119, 117, 2, 203, 133, 119, 117, 2, 236, - 216, 119, 117, 2, 209, 59, 236, 216, 119, 117, 2, 201, 247, 209, 102, - 119, 117, 2, 236, 141, 119, 117, 2, 221, 148, 119, 117, 2, 203, 169, 119, - 117, 2, 221, 88, 119, 117, 2, 250, 18, 119, 117, 2, 207, 129, 246, 228, - 119, 117, 2, 225, 6, 208, 12, 119, 117, 2, 209, 207, 119, 117, 2, 227, 7, - 119, 117, 2, 223, 201, 119, 117, 2, 246, 67, 237, 143, 226, 212, 221, 93, - 221, 92, 119, 117, 2, 246, 67, 245, 109, 208, 3, 119, 117, 2, 246, 67, - 207, 127, 119, 117, 2, 246, 67, 207, 128, 246, 86, 119, 117, 2, 246, 67, - 217, 186, 244, 135, 119, 117, 2, 246, 67, 221, 141, 208, 132, 119, 117, - 246, 39, 2, 208, 7, 119, 117, 246, 39, 2, 203, 48, 119, 117, 246, 39, 2, - 227, 93, 119, 117, 246, 39, 2, 227, 250, 119, 117, 246, 39, 2, 203, 132, - 119, 117, 246, 39, 2, 229, 6, 119, 117, 246, 39, 2, 237, 73, 119, 117, - 246, 39, 2, 223, 242, 119, 117, 246, 39, 2, 209, 45, 119, 117, 246, 39, - 2, 208, 17, 119, 117, 246, 39, 2, 218, 205, 119, 117, 246, 39, 2, 229, - 142, 119, 117, 246, 39, 2, 237, 133, 119, 117, 246, 39, 2, 206, 80, 119, - 117, 246, 39, 2, 240, 86, 119, 117, 246, 39, 2, 203, 88, 119, 117, 246, - 39, 2, 207, 246, 119, 117, 246, 39, 2, 228, 158, 119, 117, 246, 39, 2, - 204, 153, 111, 1, 185, 111, 1, 249, 32, 111, 1, 11, 185, 111, 1, 218, 98, - 111, 1, 192, 111, 1, 224, 158, 111, 1, 250, 126, 192, 111, 1, 240, 108, - 111, 1, 206, 86, 111, 1, 205, 231, 111, 1, 210, 22, 111, 1, 244, 212, - 111, 1, 11, 207, 241, 111, 1, 11, 210, 22, 111, 1, 207, 241, 111, 1, 244, - 120, 111, 1, 201, 201, 111, 1, 222, 104, 111, 1, 11, 221, 227, 111, 1, - 250, 126, 201, 201, 111, 1, 221, 227, 111, 1, 221, 213, 111, 1, 228, 113, - 111, 1, 226, 198, 111, 1, 227, 161, 111, 1, 227, 150, 111, 1, 208, 187, - 111, 1, 243, 121, 111, 1, 208, 179, 111, 1, 243, 120, 111, 1, 173, 111, - 1, 239, 8, 111, 1, 11, 173, 111, 1, 217, 126, 111, 1, 217, 103, 111, 1, - 222, 203, 111, 1, 222, 152, 111, 1, 250, 126, 222, 203, 111, 1, 152, 111, - 1, 203, 182, 111, 1, 238, 119, 111, 1, 238, 94, 111, 1, 207, 251, 111, 1, - 241, 239, 111, 1, 221, 11, 111, 1, 220, 250, 111, 1, 208, 10, 111, 1, - 241, 249, 111, 1, 11, 208, 10, 111, 1, 11, 241, 249, 111, 1, 216, 133, - 208, 10, 111, 1, 213, 90, 111, 1, 211, 164, 111, 1, 202, 80, 111, 1, 202, - 8, 111, 1, 208, 20, 111, 1, 241, 255, 111, 1, 11, 208, 20, 111, 1, 215, - 36, 111, 1, 202, 116, 111, 1, 202, 9, 111, 1, 201, 235, 111, 1, 201, 215, - 111, 1, 250, 126, 201, 235, 111, 1, 201, 207, 111, 1, 201, 214, 111, 1, - 204, 111, 111, 1, 251, 73, 111, 1, 237, 12, 111, 1, 223, 70, 111, 2, 250, - 65, 111, 2, 216, 133, 205, 184, 111, 2, 216, 133, 250, 65, 111, 22, 2, - 63, 111, 22, 2, 252, 25, 111, 22, 2, 251, 69, 111, 22, 2, 250, 231, 111, - 22, 2, 250, 223, 111, 22, 2, 78, 111, 22, 2, 220, 18, 111, 22, 2, 204, 0, - 111, 22, 2, 204, 144, 111, 22, 2, 74, 111, 22, 2, 241, 92, 111, 22, 2, - 241, 78, 111, 22, 2, 220, 70, 111, 22, 2, 75, 111, 22, 2, 235, 171, 111, - 22, 2, 235, 170, 111, 22, 2, 235, 169, 111, 22, 2, 230, 234, 111, 22, 2, - 231, 110, 111, 22, 2, 231, 83, 111, 22, 2, 230, 197, 111, 22, 2, 231, 24, - 111, 22, 2, 68, 111, 22, 2, 207, 39, 111, 22, 2, 207, 38, 111, 22, 2, - 207, 37, 111, 22, 2, 206, 178, 111, 22, 2, 207, 21, 111, 22, 2, 206, 241, - 111, 22, 2, 203, 124, 111, 22, 2, 203, 11, 111, 22, 2, 251, 109, 111, 22, - 2, 251, 105, 111, 22, 2, 241, 21, 111, 22, 2, 215, 189, 241, 21, 111, 22, - 2, 241, 28, 111, 22, 2, 215, 189, 241, 28, 111, 22, 2, 251, 64, 111, 22, - 2, 241, 145, 111, 22, 2, 250, 34, 111, 22, 2, 219, 216, 111, 22, 2, 223, - 163, 111, 22, 2, 222, 205, 111, 143, 216, 16, 111, 143, 208, 145, 216, - 16, 111, 143, 55, 111, 143, 56, 111, 1, 208, 159, 111, 1, 208, 158, 111, - 1, 208, 157, 111, 1, 208, 156, 111, 1, 208, 155, 111, 1, 208, 154, 111, - 1, 208, 153, 111, 1, 216, 133, 208, 160, 111, 1, 216, 133, 208, 159, 111, - 1, 216, 133, 208, 157, 111, 1, 216, 133, 208, 156, 111, 1, 216, 133, 208, - 155, 111, 1, 216, 133, 208, 153, 67, 1, 250, 126, 74, 172, 1, 250, 126, - 203, 52, 100, 1, 237, 171, 100, 1, 203, 196, 100, 1, 219, 184, 100, 1, - 210, 69, 100, 1, 240, 174, 100, 1, 230, 54, 100, 1, 159, 100, 1, 249, - 255, 100, 1, 245, 51, 100, 1, 206, 164, 100, 1, 239, 75, 100, 1, 146, - 100, 1, 219, 185, 223, 163, 100, 1, 245, 52, 194, 100, 1, 240, 175, 223, - 163, 100, 1, 230, 55, 226, 185, 100, 1, 217, 1, 194, 100, 1, 209, 110, - 100, 1, 212, 45, 244, 2, 100, 1, 244, 2, 100, 1, 229, 48, 100, 1, 212, - 45, 230, 184, 100, 1, 236, 225, 100, 1, 227, 162, 100, 1, 216, 62, 100, - 1, 226, 185, 100, 1, 223, 163, 100, 1, 230, 184, 100, 1, 194, 100, 1, - 226, 186, 223, 163, 100, 1, 223, 164, 226, 185, 100, 1, 230, 185, 226, - 185, 100, 1, 215, 94, 230, 184, 100, 1, 226, 186, 3, 243, 85, 100, 1, - 223, 164, 3, 243, 85, 100, 1, 230, 185, 3, 243, 85, 100, 1, 230, 185, 3, - 187, 231, 7, 25, 55, 100, 1, 215, 94, 3, 243, 85, 100, 1, 215, 94, 3, 70, - 56, 100, 1, 226, 186, 194, 100, 1, 223, 164, 194, 100, 1, 230, 185, 194, - 100, 1, 215, 94, 194, 100, 1, 226, 186, 223, 164, 194, 100, 1, 223, 164, - 226, 186, 194, 100, 1, 230, 185, 226, 186, 194, 100, 1, 215, 94, 230, - 185, 194, 100, 1, 230, 185, 215, 94, 3, 243, 85, 100, 1, 230, 185, 223, - 163, 100, 1, 230, 185, 223, 164, 194, 100, 1, 215, 94, 210, 69, 100, 1, - 215, 94, 210, 70, 146, 100, 1, 215, 94, 219, 184, 100, 1, 215, 94, 219, - 185, 146, 100, 1, 210, 70, 194, 100, 1, 210, 70, 217, 1, 194, 100, 1, - 204, 144, 100, 1, 204, 40, 100, 1, 204, 145, 146, 100, 1, 215, 94, 223, - 163, 100, 1, 215, 94, 226, 185, 100, 1, 230, 55, 217, 1, 194, 100, 1, - 239, 76, 217, 1, 194, 100, 1, 215, 94, 230, 54, 100, 1, 215, 94, 230, 55, - 146, 100, 1, 63, 100, 1, 212, 45, 219, 195, 100, 1, 220, 97, 100, 1, 78, - 100, 1, 250, 176, 100, 1, 75, 100, 1, 74, 100, 1, 231, 110, 100, 1, 212, - 228, 75, 100, 1, 207, 17, 100, 1, 241, 161, 100, 1, 212, 45, 241, 147, - 100, 1, 215, 209, 75, 100, 1, 212, 45, 241, 161, 100, 1, 163, 75, 100, 1, - 203, 52, 100, 1, 68, 100, 1, 240, 238, 100, 1, 203, 147, 100, 1, 106, - 223, 163, 100, 1, 163, 68, 100, 1, 215, 209, 68, 100, 1, 207, 18, 100, 1, - 212, 45, 68, 100, 1, 220, 15, 100, 1, 219, 195, 100, 1, 219, 216, 100, 1, - 204, 111, 100, 1, 204, 0, 100, 1, 204, 30, 100, 1, 204, 53, 100, 1, 203, - 230, 100, 1, 223, 72, 68, 100, 1, 223, 72, 78, 100, 1, 223, 72, 75, 100, - 1, 223, 72, 63, 100, 1, 218, 235, 250, 231, 100, 1, 218, 235, 250, 247, - 100, 1, 212, 45, 241, 92, 100, 1, 212, 45, 250, 231, 100, 1, 212, 45, - 220, 31, 100, 1, 125, 226, 185, 100, 251, 88, 49, 236, 106, 214, 172, - 100, 251, 88, 224, 150, 236, 106, 214, 172, 100, 251, 88, 50, 236, 106, - 214, 172, 100, 251, 88, 124, 80, 214, 172, 100, 251, 88, 224, 150, 80, - 214, 172, 100, 251, 88, 138, 80, 214, 172, 100, 251, 88, 250, 40, 214, - 172, 100, 251, 88, 250, 40, 227, 213, 214, 172, 100, 251, 88, 250, 40, - 209, 226, 100, 251, 88, 250, 40, 209, 248, 100, 251, 88, 250, 40, 188, - 113, 100, 251, 88, 250, 40, 235, 206, 113, 100, 251, 88, 250, 40, 209, - 227, 113, 100, 251, 88, 138, 165, 100, 251, 88, 138, 208, 244, 165, 100, - 251, 88, 138, 237, 253, 100, 251, 88, 138, 163, 237, 253, 100, 251, 88, - 138, 243, 85, 100, 251, 88, 138, 246, 61, 100, 251, 88, 138, 227, 114, - 100, 251, 88, 138, 204, 75, 100, 251, 88, 138, 206, 38, 100, 251, 88, - 124, 165, 100, 251, 88, 124, 208, 244, 165, 100, 251, 88, 124, 237, 253, - 100, 251, 88, 124, 163, 237, 253, 100, 251, 88, 124, 243, 85, 100, 251, - 88, 124, 246, 61, 100, 251, 88, 124, 227, 114, 100, 251, 88, 124, 204, - 75, 100, 251, 88, 124, 206, 38, 100, 251, 88, 124, 47, 100, 2, 158, 3, - 245, 130, 100, 209, 68, 1, 214, 150, 100, 52, 82, 100, 217, 179, 246, - 126, 239, 102, 211, 61, 212, 215, 239, 158, 1, 219, 201, 212, 215, 239, - 158, 245, 190, 219, 201, 212, 215, 239, 158, 121, 211, 75, 212, 215, 239, - 158, 112, 211, 75, 60, 31, 16, 217, 195, 60, 31, 16, 244, 146, 60, 31, - 16, 218, 239, 60, 31, 16, 219, 192, 241, 126, 60, 31, 16, 219, 192, 243, - 171, 60, 31, 16, 206, 73, 241, 126, 60, 31, 16, 206, 73, 243, 171, 60, - 31, 16, 229, 221, 60, 31, 16, 210, 86, 60, 31, 16, 219, 83, 60, 31, 16, - 202, 219, 60, 31, 16, 202, 220, 243, 171, 60, 31, 16, 228, 226, 60, 31, - 16, 250, 171, 241, 126, 60, 31, 16, 240, 206, 241, 126, 60, 31, 16, 209, - 163, 60, 31, 16, 229, 176, 60, 31, 16, 250, 161, 60, 31, 16, 250, 162, - 243, 171, 60, 31, 16, 210, 93, 60, 31, 16, 209, 50, 60, 31, 16, 220, 42, - 250, 124, 60, 31, 16, 238, 23, 250, 124, 60, 31, 16, 217, 194, 60, 31, - 16, 246, 190, 60, 31, 16, 206, 62, 60, 31, 16, 230, 206, 250, 124, 60, - 31, 16, 229, 178, 250, 124, 60, 31, 16, 229, 177, 250, 124, 60, 31, 16, - 214, 210, 60, 31, 16, 219, 73, 60, 31, 16, 211, 84, 250, 164, 60, 31, 16, - 219, 191, 250, 124, 60, 31, 16, 206, 72, 250, 124, 60, 31, 16, 250, 165, - 250, 124, 60, 31, 16, 250, 159, 60, 31, 16, 229, 38, 60, 31, 16, 216, 69, - 60, 31, 16, 218, 165, 250, 124, 60, 31, 16, 208, 217, 60, 31, 16, 250, - 229, 60, 31, 16, 214, 153, 60, 31, 16, 210, 97, 250, 124, 60, 31, 16, - 210, 97, 224, 221, 211, 82, 60, 31, 16, 219, 186, 250, 124, 60, 31, 16, - 209, 86, 60, 31, 16, 227, 200, 60, 31, 16, 242, 2, 60, 31, 16, 208, 87, - 60, 31, 16, 209, 134, 60, 31, 16, 228, 229, 60, 31, 16, 250, 171, 240, - 206, 222, 226, 60, 31, 16, 239, 110, 250, 124, 60, 31, 16, 231, 62, 60, - 31, 16, 208, 57, 250, 124, 60, 31, 16, 229, 224, 208, 56, 60, 31, 16, - 219, 11, 60, 31, 16, 217, 199, 60, 31, 16, 229, 7, 60, 31, 16, 246, 110, - 250, 124, 60, 31, 16, 216, 177, 60, 31, 16, 219, 86, 250, 124, 60, 31, - 16, 219, 84, 250, 124, 60, 31, 16, 235, 160, 60, 31, 16, 223, 82, 60, 31, - 16, 218, 217, 60, 31, 16, 229, 8, 251, 9, 60, 31, 16, 208, 57, 251, 9, - 60, 31, 16, 211, 55, 60, 31, 16, 237, 240, 60, 31, 16, 230, 206, 222, - 226, 60, 31, 16, 220, 42, 222, 226, 60, 31, 16, 219, 192, 222, 226, 60, - 31, 16, 218, 216, 60, 31, 16, 228, 248, 60, 31, 16, 218, 215, 60, 31, 16, - 228, 228, 60, 31, 16, 219, 12, 222, 226, 60, 31, 16, 229, 177, 222, 227, - 250, 202, 60, 31, 16, 229, 178, 222, 227, 250, 202, 60, 31, 16, 202, 217, - 60, 31, 16, 250, 162, 222, 226, 60, 31, 16, 250, 163, 210, 94, 222, 226, - 60, 31, 16, 202, 218, 60, 31, 16, 228, 227, 60, 31, 16, 241, 121, 60, 31, - 16, 246, 191, 60, 31, 16, 224, 122, 230, 205, 60, 31, 16, 206, 73, 222, - 226, 60, 31, 16, 218, 165, 222, 226, 60, 31, 16, 217, 200, 222, 226, 60, - 31, 16, 220, 38, 60, 31, 16, 250, 189, 60, 31, 16, 226, 195, 60, 31, 16, - 219, 84, 222, 226, 60, 31, 16, 219, 86, 222, 226, 60, 31, 16, 240, 244, - 219, 85, 60, 31, 16, 228, 135, 60, 31, 16, 250, 190, 60, 31, 16, 208, 57, - 222, 226, 60, 31, 16, 241, 124, 60, 31, 16, 210, 97, 222, 226, 60, 31, - 16, 210, 87, 60, 31, 16, 246, 110, 222, 226, 60, 31, 16, 241, 43, 60, 31, - 16, 214, 154, 222, 226, 60, 31, 16, 203, 163, 229, 38, 60, 31, 16, 208, - 54, 60, 31, 16, 217, 201, 60, 31, 16, 208, 58, 60, 31, 16, 208, 55, 60, - 31, 16, 217, 198, 60, 31, 16, 208, 53, 60, 31, 16, 217, 197, 60, 31, 16, - 238, 22, 60, 31, 16, 250, 116, 60, 31, 16, 240, 244, 250, 116, 60, 31, - 16, 219, 186, 222, 226, 60, 31, 16, 209, 85, 241, 1, 60, 31, 16, 209, 85, - 240, 205, 60, 31, 16, 209, 87, 250, 166, 60, 31, 16, 209, 79, 230, 19, - 250, 158, 60, 31, 16, 229, 223, 60, 31, 16, 241, 80, 60, 31, 16, 203, 14, - 229, 220, 60, 31, 16, 203, 14, 250, 202, 60, 31, 16, 211, 83, 60, 31, 16, - 229, 39, 250, 202, 60, 31, 16, 243, 172, 250, 124, 60, 31, 16, 228, 230, - 250, 124, 60, 31, 16, 228, 230, 251, 9, 60, 31, 16, 228, 230, 222, 226, - 60, 31, 16, 250, 165, 222, 226, 60, 31, 16, 250, 167, 60, 31, 16, 243, - 171, 60, 31, 16, 208, 68, 60, 31, 16, 209, 125, 60, 31, 16, 228, 252, 60, - 31, 16, 227, 205, 241, 73, 246, 100, 60, 31, 16, 227, 205, 242, 3, 246, - 101, 60, 31, 16, 227, 205, 208, 71, 246, 101, 60, 31, 16, 227, 205, 209, - 136, 246, 101, 60, 31, 16, 227, 205, 231, 57, 246, 100, 60, 31, 16, 238, - 23, 222, 227, 250, 202, 60, 31, 16, 238, 23, 219, 74, 250, 112, 60, 31, - 16, 238, 23, 219, 74, 244, 6, 60, 31, 16, 243, 196, 60, 31, 16, 243, 197, - 219, 74, 250, 113, 229, 220, 60, 31, 16, 243, 197, 219, 74, 250, 113, - 250, 202, 60, 31, 16, 243, 197, 219, 74, 244, 6, 60, 31, 16, 208, 76, 60, - 31, 16, 250, 117, 60, 31, 16, 231, 64, 60, 31, 16, 243, 219, 60, 31, 16, - 251, 75, 218, 52, 250, 118, 60, 31, 16, 251, 75, 250, 115, 60, 31, 16, - 251, 75, 250, 118, 60, 31, 16, 251, 75, 224, 215, 60, 31, 16, 251, 75, - 224, 226, 60, 31, 16, 251, 75, 238, 24, 60, 31, 16, 251, 75, 238, 21, 60, - 31, 16, 251, 75, 218, 52, 238, 24, 60, 31, 16, 225, 84, 217, 207, 235, - 158, 60, 31, 16, 225, 84, 251, 11, 217, 207, 235, 158, 60, 31, 16, 225, - 84, 244, 5, 235, 158, 60, 31, 16, 225, 84, 251, 11, 244, 5, 235, 158, 60, - 31, 16, 225, 84, 208, 63, 235, 158, 60, 31, 16, 225, 84, 208, 77, 60, 31, - 16, 225, 84, 209, 130, 235, 158, 60, 31, 16, 225, 84, 209, 130, 227, 209, - 235, 158, 60, 31, 16, 225, 84, 227, 209, 235, 158, 60, 31, 16, 225, 84, - 218, 95, 235, 158, 60, 31, 16, 230, 213, 209, 156, 235, 159, 60, 31, 16, - 250, 163, 209, 156, 235, 159, 60, 31, 16, 240, 80, 209, 127, 60, 31, 16, - 240, 80, 224, 46, 60, 31, 16, 240, 80, 243, 202, 60, 31, 16, 225, 84, - 206, 66, 235, 158, 60, 31, 16, 225, 84, 217, 206, 235, 158, 60, 31, 16, - 225, 84, 218, 95, 209, 130, 235, 158, 60, 31, 16, 238, 19, 223, 164, 250, - 166, 60, 31, 16, 238, 19, 223, 164, 243, 170, 60, 31, 16, 241, 90, 230, - 19, 239, 110, 205, 171, 60, 31, 16, 231, 63, 60, 31, 16, 231, 61, 60, 31, - 16, 239, 110, 250, 125, 244, 4, 235, 157, 60, 31, 16, 239, 110, 243, 217, - 185, 60, 31, 16, 239, 110, 243, 217, 223, 82, 60, 31, 16, 239, 110, 223, - 77, 235, 158, 60, 31, 16, 239, 110, 243, 217, 243, 233, 60, 31, 16, 239, - 110, 212, 64, 243, 216, 243, 233, 60, 31, 16, 239, 110, 243, 217, 229, - 201, 60, 31, 16, 239, 110, 243, 217, 202, 17, 60, 31, 16, 239, 110, 243, - 217, 222, 101, 229, 220, 60, 31, 16, 239, 110, 243, 217, 222, 101, 250, - 202, 60, 31, 16, 239, 110, 225, 128, 246, 102, 243, 202, 60, 31, 16, 239, - 110, 225, 128, 246, 102, 224, 46, 60, 31, 16, 240, 27, 212, 64, 246, 102, - 206, 65, 60, 31, 16, 239, 110, 212, 64, 246, 102, 210, 98, 60, 31, 16, - 239, 110, 222, 229, 60, 31, 16, 246, 103, 201, 241, 60, 31, 16, 246, 103, - 229, 37, 60, 31, 16, 246, 103, 211, 219, 60, 31, 16, 239, 110, 235, 206, - 203, 13, 209, 131, 60, 31, 16, 239, 110, 241, 91, 250, 191, 60, 31, 16, - 203, 13, 208, 64, 60, 31, 16, 243, 210, 208, 64, 60, 31, 16, 243, 210, - 209, 131, 60, 31, 16, 243, 210, 250, 168, 242, 3, 243, 105, 60, 31, 16, - 243, 210, 224, 44, 209, 135, 243, 105, 60, 31, 16, 243, 210, 243, 193, - 240, 218, 243, 105, 60, 31, 16, 243, 210, 208, 74, 220, 48, 243, 105, 60, - 31, 16, 203, 13, 250, 168, 242, 3, 243, 105, 60, 31, 16, 203, 13, 224, - 44, 209, 135, 243, 105, 60, 31, 16, 203, 13, 243, 193, 240, 218, 243, - 105, 60, 31, 16, 203, 13, 208, 74, 220, 48, 243, 105, 60, 31, 16, 238, - 175, 243, 209, 60, 31, 16, 238, 175, 203, 12, 60, 31, 16, 243, 218, 250, - 168, 224, 123, 60, 31, 16, 243, 218, 250, 168, 224, 255, 60, 31, 16, 243, - 218, 243, 171, 60, 31, 16, 243, 218, 209, 77, 60, 31, 16, 212, 130, 209, - 77, 60, 31, 16, 212, 130, 209, 78, 243, 155, 60, 31, 16, 212, 130, 209, - 78, 208, 65, 60, 31, 16, 212, 130, 209, 78, 209, 123, 60, 31, 16, 212, - 130, 250, 88, 60, 31, 16, 212, 130, 250, 89, 243, 155, 60, 31, 16, 212, - 130, 250, 89, 208, 65, 60, 31, 16, 212, 130, 250, 89, 209, 123, 60, 31, - 16, 243, 194, 238, 156, 60, 31, 16, 243, 201, 219, 216, 60, 31, 16, 211, - 71, 60, 31, 16, 250, 109, 185, 60, 31, 16, 250, 109, 205, 171, 60, 31, - 16, 250, 109, 239, 8, 60, 31, 16, 250, 109, 243, 233, 60, 31, 16, 250, - 109, 229, 201, 60, 31, 16, 250, 109, 202, 17, 60, 31, 16, 250, 109, 222, - 100, 60, 31, 16, 229, 177, 222, 227, 224, 225, 60, 31, 16, 229, 178, 222, - 227, 224, 225, 60, 31, 16, 229, 177, 222, 227, 229, 220, 60, 31, 16, 229, - 178, 222, 227, 229, 220, 60, 31, 16, 229, 39, 229, 220, 60, 31, 16, 238, - 23, 222, 227, 229, 220, 31, 16, 212, 120, 248, 226, 31, 16, 52, 248, 226, - 31, 16, 46, 248, 226, 31, 16, 216, 74, 46, 248, 226, 31, 16, 244, 143, - 248, 226, 31, 16, 212, 228, 248, 226, 31, 16, 49, 216, 101, 54, 31, 16, - 50, 216, 101, 54, 31, 16, 216, 101, 243, 83, 31, 16, 244, 185, 214, 157, - 31, 16, 244, 213, 247, 45, 31, 16, 214, 157, 31, 16, 245, 250, 31, 16, - 216, 99, 240, 15, 31, 16, 216, 99, 240, 14, 31, 16, 216, 99, 240, 13, 31, - 16, 240, 36, 31, 16, 240, 37, 56, 31, 16, 247, 216, 82, 31, 16, 247, 82, - 31, 16, 247, 228, 31, 16, 155, 31, 16, 220, 28, 211, 102, 31, 16, 207, - 133, 211, 102, 31, 16, 209, 29, 211, 102, 31, 16, 239, 146, 211, 102, 31, - 16, 239, 232, 211, 102, 31, 16, 212, 87, 211, 102, 31, 16, 212, 85, 239, - 127, 31, 16, 239, 144, 239, 127, 31, 16, 239, 76, 246, 30, 31, 16, 239, - 76, 246, 31, 219, 218, 251, 0, 31, 16, 239, 76, 246, 31, 219, 218, 248, - 211, 31, 16, 247, 126, 246, 30, 31, 16, 240, 175, 246, 30, 31, 16, 240, - 175, 246, 31, 219, 218, 251, 0, 31, 16, 240, 175, 246, 31, 219, 218, 248, - 211, 31, 16, 242, 47, 246, 29, 31, 16, 242, 47, 246, 28, 31, 16, 223, - 226, 225, 19, 216, 85, 31, 16, 52, 213, 56, 31, 16, 52, 239, 216, 31, 16, - 239, 217, 206, 224, 31, 16, 239, 217, 242, 70, 31, 16, 223, 66, 206, 224, - 31, 16, 223, 66, 242, 70, 31, 16, 213, 57, 206, 224, 31, 16, 213, 57, - 242, 70, 31, 16, 217, 56, 143, 213, 56, 31, 16, 217, 56, 143, 239, 216, - 31, 16, 245, 230, 208, 221, 31, 16, 245, 78, 208, 221, 31, 16, 219, 218, - 251, 0, 31, 16, 219, 218, 248, 211, 31, 16, 217, 37, 251, 0, 31, 16, 217, - 37, 248, 211, 31, 16, 223, 229, 216, 85, 31, 16, 204, 31, 216, 85, 31, - 16, 162, 216, 85, 31, 16, 217, 56, 216, 85, 31, 16, 241, 139, 216, 85, - 31, 16, 212, 81, 216, 85, 31, 16, 209, 51, 216, 85, 31, 16, 212, 73, 216, - 85, 31, 16, 118, 236, 12, 207, 149, 216, 85, 31, 16, 203, 197, 221, 156, - 31, 16, 91, 221, 156, 31, 16, 246, 62, 203, 197, 221, 156, 31, 16, 51, - 221, 157, 204, 33, 31, 16, 51, 221, 157, 248, 43, 31, 16, 208, 86, 221, - 157, 112, 204, 33, 31, 16, 208, 86, 221, 157, 112, 248, 43, 31, 16, 208, - 86, 221, 157, 49, 204, 33, 31, 16, 208, 86, 221, 157, 49, 248, 43, 31, - 16, 208, 86, 221, 157, 50, 204, 33, 31, 16, 208, 86, 221, 157, 50, 248, - 43, 31, 16, 208, 86, 221, 157, 121, 204, 33, 31, 16, 208, 86, 221, 157, - 121, 248, 43, 31, 16, 208, 86, 221, 157, 112, 50, 204, 33, 31, 16, 208, - 86, 221, 157, 112, 50, 248, 43, 31, 16, 224, 30, 221, 157, 204, 33, 31, - 16, 224, 30, 221, 157, 248, 43, 31, 16, 208, 83, 221, 157, 121, 204, 33, - 31, 16, 208, 83, 221, 157, 121, 248, 43, 31, 16, 219, 77, 221, 156, 31, - 16, 205, 183, 221, 156, 31, 16, 221, 157, 248, 43, 31, 16, 221, 49, 221, - 156, 31, 16, 246, 1, 221, 157, 204, 33, 31, 16, 246, 1, 221, 157, 248, - 43, 31, 16, 247, 214, 31, 16, 204, 31, 221, 160, 31, 16, 162, 221, 160, - 31, 16, 217, 56, 221, 160, 31, 16, 241, 139, 221, 160, 31, 16, 212, 81, - 221, 160, 31, 16, 209, 51, 221, 160, 31, 16, 212, 73, 221, 160, 31, 16, - 118, 236, 12, 207, 149, 221, 160, 31, 16, 39, 211, 77, 31, 16, 39, 211, - 184, 211, 77, 31, 16, 39, 208, 94, 31, 16, 39, 208, 93, 31, 16, 39, 208, - 92, 31, 16, 240, 0, 208, 94, 31, 16, 240, 0, 208, 93, 31, 16, 240, 0, - 208, 92, 31, 16, 39, 250, 31, 243, 85, 31, 16, 39, 239, 224, 31, 16, 39, - 239, 223, 31, 16, 39, 239, 222, 31, 16, 39, 239, 221, 31, 16, 39, 239, - 220, 31, 16, 248, 142, 248, 159, 31, 16, 241, 84, 248, 159, 31, 16, 248, - 142, 208, 250, 31, 16, 241, 84, 208, 250, 31, 16, 248, 142, 212, 37, 31, - 16, 241, 84, 212, 37, 31, 16, 248, 142, 218, 174, 31, 16, 241, 84, 218, - 174, 31, 16, 39, 251, 138, 31, 16, 39, 211, 105, 31, 16, 39, 209, 140, - 31, 16, 39, 211, 106, 31, 16, 39, 225, 96, 31, 16, 39, 225, 95, 31, 16, - 39, 251, 137, 31, 16, 39, 227, 2, 31, 16, 250, 100, 206, 224, 31, 16, - 250, 100, 242, 70, 31, 16, 39, 243, 100, 31, 16, 39, 215, 249, 31, 16, - 39, 239, 206, 31, 16, 39, 212, 33, 31, 16, 39, 248, 120, 31, 16, 39, 52, - 208, 150, 31, 16, 39, 208, 70, 208, 150, 31, 16, 215, 254, 31, 16, 211, - 0, 31, 16, 202, 159, 31, 16, 218, 166, 31, 16, 224, 206, 31, 16, 239, - 155, 31, 16, 245, 140, 31, 16, 244, 62, 31, 16, 238, 14, 221, 161, 212, - 57, 31, 16, 238, 14, 221, 161, 221, 192, 212, 57, 31, 16, 208, 120, 31, - 16, 207, 175, 31, 16, 230, 239, 207, 175, 31, 16, 207, 176, 212, 57, 31, - 16, 207, 176, 206, 224, 31, 16, 219, 234, 211, 31, 31, 16, 219, 234, 211, - 28, 31, 16, 219, 234, 211, 27, 31, 16, 219, 234, 211, 26, 31, 16, 219, - 234, 211, 25, 31, 16, 219, 234, 211, 24, 31, 16, 219, 234, 211, 23, 31, - 16, 219, 234, 211, 22, 31, 16, 219, 234, 211, 21, 31, 16, 219, 234, 211, - 30, 31, 16, 219, 234, 211, 29, 31, 16, 237, 75, 31, 16, 222, 238, 31, 16, - 241, 84, 76, 211, 67, 31, 16, 244, 55, 212, 57, 31, 16, 39, 121, 247, - 240, 31, 16, 39, 112, 247, 240, 31, 16, 39, 237, 88, 31, 16, 39, 212, 23, - 218, 99, 31, 16, 219, 28, 82, 31, 16, 219, 28, 112, 82, 31, 16, 162, 219, - 28, 82, 31, 16, 238, 47, 206, 224, 31, 16, 238, 47, 242, 70, 31, 16, 3, - 239, 255, 31, 16, 244, 168, 31, 16, 244, 169, 251, 14, 31, 16, 225, 65, - 31, 16, 227, 20, 31, 16, 247, 211, 31, 16, 213, 147, 204, 33, 31, 16, - 213, 147, 248, 43, 31, 16, 224, 106, 31, 16, 224, 107, 248, 43, 31, 16, - 213, 141, 204, 33, 31, 16, 213, 141, 248, 43, 31, 16, 239, 93, 204, 33, - 31, 16, 239, 93, 248, 43, 31, 16, 227, 21, 218, 244, 216, 85, 31, 16, - 227, 21, 231, 54, 216, 85, 31, 16, 247, 212, 216, 85, 31, 16, 213, 147, - 216, 85, 31, 16, 224, 107, 216, 85, 31, 16, 213, 141, 216, 85, 31, 16, - 209, 154, 218, 242, 245, 104, 217, 216, 218, 243, 31, 16, 209, 154, 218, - 242, 245, 104, 217, 216, 231, 53, 31, 16, 209, 154, 218, 242, 245, 104, - 217, 216, 218, 244, 243, 181, 31, 16, 209, 154, 231, 52, 245, 104, 217, - 216, 218, 243, 31, 16, 209, 154, 231, 52, 245, 104, 217, 216, 231, 53, - 31, 16, 209, 154, 231, 52, 245, 104, 217, 216, 231, 54, 243, 181, 31, 16, - 209, 154, 231, 52, 245, 104, 217, 216, 231, 54, 243, 180, 31, 16, 209, - 154, 231, 52, 245, 104, 217, 216, 231, 54, 243, 179, 31, 16, 245, 133, - 31, 16, 237, 243, 247, 126, 246, 30, 31, 16, 237, 243, 240, 175, 246, 30, - 31, 16, 51, 249, 255, 31, 16, 205, 203, 31, 16, 218, 66, 31, 16, 246, 21, - 31, 16, 214, 200, 31, 16, 246, 25, 31, 16, 208, 138, 31, 16, 218, 36, 31, - 16, 218, 37, 239, 209, 31, 16, 214, 201, 239, 209, 31, 16, 208, 139, 216, - 82, 31, 16, 218, 225, 210, 247, 31, 16, 229, 90, 247, 126, 246, 30, 31, - 16, 229, 90, 241, 84, 76, 218, 159, 31, 16, 229, 90, 46, 221, 160, 31, - 16, 229, 90, 216, 150, 82, 31, 16, 229, 90, 204, 31, 221, 160, 31, 16, - 229, 90, 162, 221, 160, 31, 16, 229, 90, 217, 56, 221, 161, 211, 78, 242, - 70, 31, 16, 229, 90, 217, 56, 221, 161, 211, 78, 206, 224, 31, 16, 229, - 90, 241, 139, 221, 161, 211, 78, 242, 70, 31, 16, 229, 90, 241, 139, 221, - 161, 211, 78, 206, 224, 31, 16, 229, 90, 239, 217, 54, 30, 205, 188, 221, - 164, 210, 148, 30, 205, 188, 221, 164, 210, 137, 30, 205, 188, 221, 164, - 210, 127, 30, 205, 188, 221, 164, 210, 120, 30, 205, 188, 221, 164, 210, - 112, 30, 205, 188, 221, 164, 210, 106, 30, 205, 188, 221, 164, 210, 105, - 30, 205, 188, 221, 164, 210, 104, 30, 205, 188, 221, 164, 210, 103, 30, - 205, 188, 221, 164, 210, 147, 30, 205, 188, 221, 164, 210, 146, 30, 205, - 188, 221, 164, 210, 145, 30, 205, 188, 221, 164, 210, 144, 30, 205, 188, - 221, 164, 210, 143, 30, 205, 188, 221, 164, 210, 142, 30, 205, 188, 221, - 164, 210, 141, 30, 205, 188, 221, 164, 210, 140, 30, 205, 188, 221, 164, - 210, 139, 30, 205, 188, 221, 164, 210, 138, 30, 205, 188, 221, 164, 210, - 136, 30, 205, 188, 221, 164, 210, 135, 30, 205, 188, 221, 164, 210, 134, - 30, 205, 188, 221, 164, 210, 133, 30, 205, 188, 221, 164, 210, 132, 30, - 205, 188, 221, 164, 210, 111, 30, 205, 188, 221, 164, 210, 110, 30, 205, - 188, 221, 164, 210, 109, 30, 205, 188, 221, 164, 210, 108, 30, 205, 188, - 221, 164, 210, 107, 30, 231, 5, 221, 164, 210, 148, 30, 231, 5, 221, 164, - 210, 137, 30, 231, 5, 221, 164, 210, 120, 30, 231, 5, 221, 164, 210, 112, - 30, 231, 5, 221, 164, 210, 105, 30, 231, 5, 221, 164, 210, 104, 30, 231, - 5, 221, 164, 210, 146, 30, 231, 5, 221, 164, 210, 145, 30, 231, 5, 221, - 164, 210, 144, 30, 231, 5, 221, 164, 210, 143, 30, 231, 5, 221, 164, 210, - 140, 30, 231, 5, 221, 164, 210, 139, 30, 231, 5, 221, 164, 210, 138, 30, - 231, 5, 221, 164, 210, 133, 30, 231, 5, 221, 164, 210, 132, 30, 231, 5, - 221, 164, 210, 131, 30, 231, 5, 221, 164, 210, 130, 30, 231, 5, 221, 164, - 210, 129, 30, 231, 5, 221, 164, 210, 128, 30, 231, 5, 221, 164, 210, 126, - 30, 231, 5, 221, 164, 210, 125, 30, 231, 5, 221, 164, 210, 124, 30, 231, - 5, 221, 164, 210, 123, 30, 231, 5, 221, 164, 210, 122, 30, 231, 5, 221, - 164, 210, 121, 30, 231, 5, 221, 164, 210, 119, 30, 231, 5, 221, 164, 210, - 118, 30, 231, 5, 221, 164, 210, 117, 30, 231, 5, 221, 164, 210, 116, 30, - 231, 5, 221, 164, 210, 115, 30, 231, 5, 221, 164, 210, 114, 30, 231, 5, - 221, 164, 210, 113, 30, 231, 5, 221, 164, 210, 111, 30, 231, 5, 221, 164, - 210, 110, 30, 231, 5, 221, 164, 210, 109, 30, 231, 5, 221, 164, 210, 108, - 30, 231, 5, 221, 164, 210, 107, 39, 30, 31, 208, 66, 39, 30, 31, 209, - 124, 39, 30, 31, 218, 253, 30, 31, 227, 204, 224, 45, 35, 241, 179, 243, - 195, 35, 237, 50, 241, 179, 243, 195, 35, 236, 16, 241, 179, 243, 195, - 35, 241, 178, 237, 51, 243, 195, 35, 241, 178, 236, 15, 243, 195, 35, - 241, 179, 209, 126, 35, 246, 217, 209, 126, 35, 239, 102, 246, 61, 209, - 126, 35, 224, 98, 209, 126, 35, 248, 221, 209, 126, 35, 229, 195, 212, - 36, 209, 126, 35, 245, 185, 209, 126, 35, 250, 77, 209, 126, 35, 219, - 250, 209, 126, 35, 247, 221, 219, 211, 209, 126, 35, 244, 57, 219, 245, - 243, 148, 209, 126, 35, 243, 145, 209, 126, 35, 202, 225, 209, 126, 35, - 231, 40, 209, 126, 35, 219, 7, 209, 126, 35, 216, 157, 209, 126, 35, 245, - 197, 209, 126, 35, 236, 127, 249, 25, 209, 126, 35, 204, 103, 209, 126, - 35, 239, 181, 209, 126, 35, 251, 112, 209, 126, 35, 216, 114, 209, 126, - 35, 216, 89, 209, 126, 35, 241, 177, 209, 126, 35, 230, 85, 209, 126, 35, - 245, 192, 209, 126, 35, 241, 83, 209, 126, 35, 242, 15, 209, 126, 35, - 246, 186, 209, 126, 35, 244, 67, 209, 126, 35, 26, 216, 88, 209, 126, 35, - 219, 160, 209, 126, 35, 227, 208, 209, 126, 35, 246, 14, 209, 126, 35, - 229, 80, 209, 126, 35, 238, 214, 209, 126, 35, 211, 43, 209, 126, 35, - 217, 168, 209, 126, 35, 239, 101, 209, 126, 35, 216, 90, 209, 126, 35, - 227, 247, 219, 245, 224, 78, 209, 126, 35, 216, 86, 209, 126, 35, 238, - 33, 208, 173, 225, 3, 209, 126, 35, 241, 85, 209, 126, 35, 211, 56, 209, - 126, 35, 237, 245, 209, 126, 35, 241, 76, 209, 126, 35, 219, 50, 209, - 126, 35, 215, 242, 209, 126, 35, 239, 207, 209, 126, 35, 206, 64, 219, - 245, 204, 84, 209, 126, 35, 245, 202, 209, 126, 35, 225, 18, 209, 126, - 35, 240, 245, 209, 126, 35, 206, 234, 209, 126, 35, 243, 182, 209, 126, - 35, 246, 16, 224, 7, 209, 126, 35, 237, 222, 209, 126, 35, 238, 215, 231, - 49, 209, 126, 35, 225, 73, 209, 126, 35, 251, 133, 209, 126, 35, 241, - 101, 209, 126, 35, 242, 74, 209, 126, 35, 204, 82, 209, 126, 35, 212, - 115, 209, 126, 35, 231, 14, 209, 126, 35, 244, 25, 209, 126, 35, 244, - 148, 209, 126, 35, 243, 178, 209, 126, 35, 240, 209, 209, 126, 35, 213, - 104, 209, 126, 35, 211, 60, 209, 126, 35, 237, 90, 209, 126, 35, 245, - 226, 209, 126, 35, 246, 11, 209, 126, 35, 240, 87, 209, 126, 35, 251, 76, - 209, 126, 35, 245, 225, 209, 126, 35, 220, 32, 209, 93, 206, 41, 209, - 126, 35, 243, 204, 209, 126, 35, 228, 101, 209, 126, 35, 239, 150, 245, - 153, 215, 217, 206, 236, 17, 105, 245, 153, 215, 217, 206, 236, 17, 108, - 245, 153, 215, 217, 206, 236, 17, 147, 245, 153, 215, 217, 206, 236, 17, - 149, 245, 153, 215, 217, 206, 236, 17, 170, 245, 153, 215, 217, 206, 236, - 17, 195, 245, 153, 215, 217, 206, 236, 17, 213, 111, 245, 153, 215, 217, - 206, 236, 17, 199, 245, 153, 215, 217, 206, 236, 17, 222, 63, 245, 153, - 215, 217, 209, 148, 17, 105, 245, 153, 215, 217, 209, 148, 17, 108, 245, - 153, 215, 217, 209, 148, 17, 147, 245, 153, 215, 217, 209, 148, 17, 149, - 245, 153, 215, 217, 209, 148, 17, 170, 245, 153, 215, 217, 209, 148, 17, - 195, 245, 153, 215, 217, 209, 148, 17, 213, 111, 245, 153, 215, 217, 209, - 148, 17, 199, 245, 153, 215, 217, 209, 148, 17, 222, 63, 13, 26, 6, 63, - 13, 26, 6, 249, 255, 13, 26, 6, 247, 125, 13, 26, 6, 245, 51, 13, 26, 6, - 74, 13, 26, 6, 240, 174, 13, 26, 6, 239, 75, 13, 26, 6, 237, 171, 13, 26, - 6, 75, 13, 26, 6, 230, 184, 13, 26, 6, 230, 54, 13, 26, 6, 159, 13, 26, - 6, 226, 185, 13, 26, 6, 223, 163, 13, 26, 6, 78, 13, 26, 6, 219, 184, 13, - 26, 6, 217, 134, 13, 26, 6, 146, 13, 26, 6, 194, 13, 26, 6, 210, 69, 13, - 26, 6, 68, 13, 26, 6, 206, 164, 13, 26, 6, 204, 144, 13, 26, 6, 203, 196, - 13, 26, 6, 203, 124, 13, 26, 6, 202, 159, 13, 26, 5, 63, 13, 26, 5, 249, - 255, 13, 26, 5, 247, 125, 13, 26, 5, 245, 51, 13, 26, 5, 74, 13, 26, 5, - 240, 174, 13, 26, 5, 239, 75, 13, 26, 5, 237, 171, 13, 26, 5, 75, 13, 26, - 5, 230, 184, 13, 26, 5, 230, 54, 13, 26, 5, 159, 13, 26, 5, 226, 185, 13, - 26, 5, 223, 163, 13, 26, 5, 78, 13, 26, 5, 219, 184, 13, 26, 5, 217, 134, - 13, 26, 5, 146, 13, 26, 5, 194, 13, 26, 5, 210, 69, 13, 26, 5, 68, 13, - 26, 5, 206, 164, 13, 26, 5, 204, 144, 13, 26, 5, 203, 196, 13, 26, 5, - 203, 124, 13, 26, 5, 202, 159, 13, 37, 6, 63, 13, 37, 6, 249, 255, 13, - 37, 6, 247, 125, 13, 37, 6, 245, 51, 13, 37, 6, 74, 13, 37, 6, 240, 174, - 13, 37, 6, 239, 75, 13, 37, 6, 237, 171, 13, 37, 6, 75, 13, 37, 6, 230, - 184, 13, 37, 6, 230, 54, 13, 37, 6, 159, 13, 37, 6, 226, 185, 13, 37, 6, - 223, 163, 13, 37, 6, 78, 13, 37, 6, 219, 184, 13, 37, 6, 217, 134, 13, - 37, 6, 146, 13, 37, 6, 194, 13, 37, 6, 210, 69, 13, 37, 6, 68, 13, 37, 6, - 206, 164, 13, 37, 6, 204, 144, 13, 37, 6, 203, 196, 13, 37, 6, 203, 124, - 13, 37, 6, 202, 159, 13, 37, 5, 63, 13, 37, 5, 249, 255, 13, 37, 5, 247, - 125, 13, 37, 5, 245, 51, 13, 37, 5, 74, 13, 37, 5, 240, 174, 13, 37, 5, - 239, 75, 13, 37, 5, 75, 13, 37, 5, 230, 184, 13, 37, 5, 230, 54, 13, 37, - 5, 159, 13, 37, 5, 226, 185, 13, 37, 5, 223, 163, 13, 37, 5, 78, 13, 37, - 5, 219, 184, 13, 37, 5, 217, 134, 13, 37, 5, 146, 13, 37, 5, 194, 13, 37, - 5, 210, 69, 13, 37, 5, 68, 13, 37, 5, 206, 164, 13, 37, 5, 204, 144, 13, - 37, 5, 203, 196, 13, 37, 5, 203, 124, 13, 37, 5, 202, 159, 13, 26, 37, 6, - 63, 13, 26, 37, 6, 249, 255, 13, 26, 37, 6, 247, 125, 13, 26, 37, 6, 245, - 51, 13, 26, 37, 6, 74, 13, 26, 37, 6, 240, 174, 13, 26, 37, 6, 239, 75, - 13, 26, 37, 6, 237, 171, 13, 26, 37, 6, 75, 13, 26, 37, 6, 230, 184, 13, - 26, 37, 6, 230, 54, 13, 26, 37, 6, 159, 13, 26, 37, 6, 226, 185, 13, 26, - 37, 6, 223, 163, 13, 26, 37, 6, 78, 13, 26, 37, 6, 219, 184, 13, 26, 37, - 6, 217, 134, 13, 26, 37, 6, 146, 13, 26, 37, 6, 194, 13, 26, 37, 6, 210, - 69, 13, 26, 37, 6, 68, 13, 26, 37, 6, 206, 164, 13, 26, 37, 6, 204, 144, - 13, 26, 37, 6, 203, 196, 13, 26, 37, 6, 203, 124, 13, 26, 37, 6, 202, - 159, 13, 26, 37, 5, 63, 13, 26, 37, 5, 249, 255, 13, 26, 37, 5, 247, 125, - 13, 26, 37, 5, 245, 51, 13, 26, 37, 5, 74, 13, 26, 37, 5, 240, 174, 13, - 26, 37, 5, 239, 75, 13, 26, 37, 5, 237, 171, 13, 26, 37, 5, 75, 13, 26, - 37, 5, 230, 184, 13, 26, 37, 5, 230, 54, 13, 26, 37, 5, 159, 13, 26, 37, - 5, 226, 185, 13, 26, 37, 5, 223, 163, 13, 26, 37, 5, 78, 13, 26, 37, 5, - 219, 184, 13, 26, 37, 5, 217, 134, 13, 26, 37, 5, 146, 13, 26, 37, 5, - 194, 13, 26, 37, 5, 210, 69, 13, 26, 37, 5, 68, 13, 26, 37, 5, 206, 164, - 13, 26, 37, 5, 204, 144, 13, 26, 37, 5, 203, 196, 13, 26, 37, 5, 203, - 124, 13, 26, 37, 5, 202, 159, 13, 132, 6, 63, 13, 132, 6, 247, 125, 13, - 132, 6, 245, 51, 13, 132, 6, 239, 75, 13, 132, 6, 230, 184, 13, 132, 6, - 230, 54, 13, 132, 6, 223, 163, 13, 132, 6, 78, 13, 132, 6, 219, 184, 13, - 132, 6, 217, 134, 13, 132, 6, 194, 13, 132, 6, 210, 69, 13, 132, 6, 68, - 13, 132, 6, 206, 164, 13, 132, 6, 204, 144, 13, 132, 6, 203, 196, 13, - 132, 6, 203, 124, 13, 132, 6, 202, 159, 13, 132, 5, 63, 13, 132, 5, 249, - 255, 13, 132, 5, 247, 125, 13, 132, 5, 245, 51, 13, 132, 5, 240, 174, 13, - 132, 5, 237, 171, 13, 132, 5, 75, 13, 132, 5, 230, 184, 13, 132, 5, 230, - 54, 13, 132, 5, 159, 13, 132, 5, 226, 185, 13, 132, 5, 223, 163, 13, 132, - 5, 219, 184, 13, 132, 5, 217, 134, 13, 132, 5, 146, 13, 132, 5, 194, 13, - 132, 5, 210, 69, 13, 132, 5, 68, 13, 132, 5, 206, 164, 13, 132, 5, 204, - 144, 13, 132, 5, 203, 196, 13, 132, 5, 203, 124, 13, 132, 5, 202, 159, - 13, 26, 132, 6, 63, 13, 26, 132, 6, 249, 255, 13, 26, 132, 6, 247, 125, - 13, 26, 132, 6, 245, 51, 13, 26, 132, 6, 74, 13, 26, 132, 6, 240, 174, - 13, 26, 132, 6, 239, 75, 13, 26, 132, 6, 237, 171, 13, 26, 132, 6, 75, - 13, 26, 132, 6, 230, 184, 13, 26, 132, 6, 230, 54, 13, 26, 132, 6, 159, - 13, 26, 132, 6, 226, 185, 13, 26, 132, 6, 223, 163, 13, 26, 132, 6, 78, - 13, 26, 132, 6, 219, 184, 13, 26, 132, 6, 217, 134, 13, 26, 132, 6, 146, - 13, 26, 132, 6, 194, 13, 26, 132, 6, 210, 69, 13, 26, 132, 6, 68, 13, 26, - 132, 6, 206, 164, 13, 26, 132, 6, 204, 144, 13, 26, 132, 6, 203, 196, 13, - 26, 132, 6, 203, 124, 13, 26, 132, 6, 202, 159, 13, 26, 132, 5, 63, 13, - 26, 132, 5, 249, 255, 13, 26, 132, 5, 247, 125, 13, 26, 132, 5, 245, 51, - 13, 26, 132, 5, 74, 13, 26, 132, 5, 240, 174, 13, 26, 132, 5, 239, 75, - 13, 26, 132, 5, 237, 171, 13, 26, 132, 5, 75, 13, 26, 132, 5, 230, 184, - 13, 26, 132, 5, 230, 54, 13, 26, 132, 5, 159, 13, 26, 132, 5, 226, 185, - 13, 26, 132, 5, 223, 163, 13, 26, 132, 5, 78, 13, 26, 132, 5, 219, 184, - 13, 26, 132, 5, 217, 134, 13, 26, 132, 5, 146, 13, 26, 132, 5, 194, 13, - 26, 132, 5, 210, 69, 13, 26, 132, 5, 68, 13, 26, 132, 5, 206, 164, 13, - 26, 132, 5, 204, 144, 13, 26, 132, 5, 203, 196, 13, 26, 132, 5, 203, 124, - 13, 26, 132, 5, 202, 159, 13, 166, 6, 63, 13, 166, 6, 249, 255, 13, 166, - 6, 245, 51, 13, 166, 6, 74, 13, 166, 6, 240, 174, 13, 166, 6, 239, 75, - 13, 166, 6, 230, 184, 13, 166, 6, 230, 54, 13, 166, 6, 159, 13, 166, 6, - 226, 185, 13, 166, 6, 223, 163, 13, 166, 6, 78, 13, 166, 6, 219, 184, 13, - 166, 6, 217, 134, 13, 166, 6, 194, 13, 166, 6, 210, 69, 13, 166, 6, 68, - 13, 166, 6, 206, 164, 13, 166, 6, 204, 144, 13, 166, 6, 203, 196, 13, - 166, 6, 203, 124, 13, 166, 5, 63, 13, 166, 5, 249, 255, 13, 166, 5, 247, - 125, 13, 166, 5, 245, 51, 13, 166, 5, 74, 13, 166, 5, 240, 174, 13, 166, - 5, 239, 75, 13, 166, 5, 237, 171, 13, 166, 5, 75, 13, 166, 5, 230, 184, - 13, 166, 5, 230, 54, 13, 166, 5, 159, 13, 166, 5, 226, 185, 13, 166, 5, - 223, 163, 13, 166, 5, 78, 13, 166, 5, 219, 184, 13, 166, 5, 217, 134, 13, - 166, 5, 146, 13, 166, 5, 194, 13, 166, 5, 210, 69, 13, 166, 5, 68, 13, - 166, 5, 206, 164, 13, 166, 5, 204, 144, 13, 166, 5, 203, 196, 13, 166, 5, - 203, 124, 13, 166, 5, 202, 159, 13, 169, 6, 63, 13, 169, 6, 249, 255, 13, - 169, 6, 245, 51, 13, 169, 6, 74, 13, 169, 6, 240, 174, 13, 169, 6, 239, - 75, 13, 169, 6, 75, 13, 169, 6, 230, 184, 13, 169, 6, 230, 54, 13, 169, - 6, 159, 13, 169, 6, 226, 185, 13, 169, 6, 78, 13, 169, 6, 194, 13, 169, - 6, 210, 69, 13, 169, 6, 68, 13, 169, 6, 206, 164, 13, 169, 6, 204, 144, - 13, 169, 6, 203, 196, 13, 169, 6, 203, 124, 13, 169, 5, 63, 13, 169, 5, - 249, 255, 13, 169, 5, 247, 125, 13, 169, 5, 245, 51, 13, 169, 5, 74, 13, - 169, 5, 240, 174, 13, 169, 5, 239, 75, 13, 169, 5, 237, 171, 13, 169, 5, - 75, 13, 169, 5, 230, 184, 13, 169, 5, 230, 54, 13, 169, 5, 159, 13, 169, - 5, 226, 185, 13, 169, 5, 223, 163, 13, 169, 5, 78, 13, 169, 5, 219, 184, - 13, 169, 5, 217, 134, 13, 169, 5, 146, 13, 169, 5, 194, 13, 169, 5, 210, - 69, 13, 169, 5, 68, 13, 169, 5, 206, 164, 13, 169, 5, 204, 144, 13, 169, - 5, 203, 196, 13, 169, 5, 203, 124, 13, 169, 5, 202, 159, 13, 26, 166, 6, - 63, 13, 26, 166, 6, 249, 255, 13, 26, 166, 6, 247, 125, 13, 26, 166, 6, - 245, 51, 13, 26, 166, 6, 74, 13, 26, 166, 6, 240, 174, 13, 26, 166, 6, - 239, 75, 13, 26, 166, 6, 237, 171, 13, 26, 166, 6, 75, 13, 26, 166, 6, - 230, 184, 13, 26, 166, 6, 230, 54, 13, 26, 166, 6, 159, 13, 26, 166, 6, - 226, 185, 13, 26, 166, 6, 223, 163, 13, 26, 166, 6, 78, 13, 26, 166, 6, - 219, 184, 13, 26, 166, 6, 217, 134, 13, 26, 166, 6, 146, 13, 26, 166, 6, - 194, 13, 26, 166, 6, 210, 69, 13, 26, 166, 6, 68, 13, 26, 166, 6, 206, - 164, 13, 26, 166, 6, 204, 144, 13, 26, 166, 6, 203, 196, 13, 26, 166, 6, - 203, 124, 13, 26, 166, 6, 202, 159, 13, 26, 166, 5, 63, 13, 26, 166, 5, - 249, 255, 13, 26, 166, 5, 247, 125, 13, 26, 166, 5, 245, 51, 13, 26, 166, - 5, 74, 13, 26, 166, 5, 240, 174, 13, 26, 166, 5, 239, 75, 13, 26, 166, 5, - 237, 171, 13, 26, 166, 5, 75, 13, 26, 166, 5, 230, 184, 13, 26, 166, 5, - 230, 54, 13, 26, 166, 5, 159, 13, 26, 166, 5, 226, 185, 13, 26, 166, 5, - 223, 163, 13, 26, 166, 5, 78, 13, 26, 166, 5, 219, 184, 13, 26, 166, 5, - 217, 134, 13, 26, 166, 5, 146, 13, 26, 166, 5, 194, 13, 26, 166, 5, 210, - 69, 13, 26, 166, 5, 68, 13, 26, 166, 5, 206, 164, 13, 26, 166, 5, 204, - 144, 13, 26, 166, 5, 203, 196, 13, 26, 166, 5, 203, 124, 13, 26, 166, 5, - 202, 159, 13, 41, 6, 63, 13, 41, 6, 249, 255, 13, 41, 6, 247, 125, 13, - 41, 6, 245, 51, 13, 41, 6, 74, 13, 41, 6, 240, 174, 13, 41, 6, 239, 75, - 13, 41, 6, 237, 171, 13, 41, 6, 75, 13, 41, 6, 230, 184, 13, 41, 6, 230, - 54, 13, 41, 6, 159, 13, 41, 6, 226, 185, 13, 41, 6, 223, 163, 13, 41, 6, - 78, 13, 41, 6, 219, 184, 13, 41, 6, 217, 134, 13, 41, 6, 146, 13, 41, 6, - 194, 13, 41, 6, 210, 69, 13, 41, 6, 68, 13, 41, 6, 206, 164, 13, 41, 6, - 204, 144, 13, 41, 6, 203, 196, 13, 41, 6, 203, 124, 13, 41, 6, 202, 159, - 13, 41, 5, 63, 13, 41, 5, 249, 255, 13, 41, 5, 247, 125, 13, 41, 5, 245, - 51, 13, 41, 5, 74, 13, 41, 5, 240, 174, 13, 41, 5, 239, 75, 13, 41, 5, - 237, 171, 13, 41, 5, 75, 13, 41, 5, 230, 184, 13, 41, 5, 230, 54, 13, 41, - 5, 159, 13, 41, 5, 226, 185, 13, 41, 5, 223, 163, 13, 41, 5, 78, 13, 41, - 5, 219, 184, 13, 41, 5, 217, 134, 13, 41, 5, 146, 13, 41, 5, 194, 13, 41, - 5, 210, 69, 13, 41, 5, 68, 13, 41, 5, 206, 164, 13, 41, 5, 204, 144, 13, - 41, 5, 203, 196, 13, 41, 5, 203, 124, 13, 41, 5, 202, 159, 13, 41, 26, 6, - 63, 13, 41, 26, 6, 249, 255, 13, 41, 26, 6, 247, 125, 13, 41, 26, 6, 245, - 51, 13, 41, 26, 6, 74, 13, 41, 26, 6, 240, 174, 13, 41, 26, 6, 239, 75, - 13, 41, 26, 6, 237, 171, 13, 41, 26, 6, 75, 13, 41, 26, 6, 230, 184, 13, - 41, 26, 6, 230, 54, 13, 41, 26, 6, 159, 13, 41, 26, 6, 226, 185, 13, 41, - 26, 6, 223, 163, 13, 41, 26, 6, 78, 13, 41, 26, 6, 219, 184, 13, 41, 26, - 6, 217, 134, 13, 41, 26, 6, 146, 13, 41, 26, 6, 194, 13, 41, 26, 6, 210, - 69, 13, 41, 26, 6, 68, 13, 41, 26, 6, 206, 164, 13, 41, 26, 6, 204, 144, - 13, 41, 26, 6, 203, 196, 13, 41, 26, 6, 203, 124, 13, 41, 26, 6, 202, - 159, 13, 41, 26, 5, 63, 13, 41, 26, 5, 249, 255, 13, 41, 26, 5, 247, 125, - 13, 41, 26, 5, 245, 51, 13, 41, 26, 5, 74, 13, 41, 26, 5, 240, 174, 13, - 41, 26, 5, 239, 75, 13, 41, 26, 5, 237, 171, 13, 41, 26, 5, 75, 13, 41, - 26, 5, 230, 184, 13, 41, 26, 5, 230, 54, 13, 41, 26, 5, 159, 13, 41, 26, - 5, 226, 185, 13, 41, 26, 5, 223, 163, 13, 41, 26, 5, 78, 13, 41, 26, 5, - 219, 184, 13, 41, 26, 5, 217, 134, 13, 41, 26, 5, 146, 13, 41, 26, 5, - 194, 13, 41, 26, 5, 210, 69, 13, 41, 26, 5, 68, 13, 41, 26, 5, 206, 164, - 13, 41, 26, 5, 204, 144, 13, 41, 26, 5, 203, 196, 13, 41, 26, 5, 203, - 124, 13, 41, 26, 5, 202, 159, 13, 41, 37, 6, 63, 13, 41, 37, 6, 249, 255, - 13, 41, 37, 6, 247, 125, 13, 41, 37, 6, 245, 51, 13, 41, 37, 6, 74, 13, - 41, 37, 6, 240, 174, 13, 41, 37, 6, 239, 75, 13, 41, 37, 6, 237, 171, 13, - 41, 37, 6, 75, 13, 41, 37, 6, 230, 184, 13, 41, 37, 6, 230, 54, 13, 41, - 37, 6, 159, 13, 41, 37, 6, 226, 185, 13, 41, 37, 6, 223, 163, 13, 41, 37, - 6, 78, 13, 41, 37, 6, 219, 184, 13, 41, 37, 6, 217, 134, 13, 41, 37, 6, - 146, 13, 41, 37, 6, 194, 13, 41, 37, 6, 210, 69, 13, 41, 37, 6, 68, 13, - 41, 37, 6, 206, 164, 13, 41, 37, 6, 204, 144, 13, 41, 37, 6, 203, 196, - 13, 41, 37, 6, 203, 124, 13, 41, 37, 6, 202, 159, 13, 41, 37, 5, 63, 13, - 41, 37, 5, 249, 255, 13, 41, 37, 5, 247, 125, 13, 41, 37, 5, 245, 51, 13, - 41, 37, 5, 74, 13, 41, 37, 5, 240, 174, 13, 41, 37, 5, 239, 75, 13, 41, - 37, 5, 237, 171, 13, 41, 37, 5, 75, 13, 41, 37, 5, 230, 184, 13, 41, 37, - 5, 230, 54, 13, 41, 37, 5, 159, 13, 41, 37, 5, 226, 185, 13, 41, 37, 5, - 223, 163, 13, 41, 37, 5, 78, 13, 41, 37, 5, 219, 184, 13, 41, 37, 5, 217, - 134, 13, 41, 37, 5, 146, 13, 41, 37, 5, 194, 13, 41, 37, 5, 210, 69, 13, - 41, 37, 5, 68, 13, 41, 37, 5, 206, 164, 13, 41, 37, 5, 204, 144, 13, 41, - 37, 5, 203, 196, 13, 41, 37, 5, 203, 124, 13, 41, 37, 5, 202, 159, 13, - 41, 26, 37, 6, 63, 13, 41, 26, 37, 6, 249, 255, 13, 41, 26, 37, 6, 247, - 125, 13, 41, 26, 37, 6, 245, 51, 13, 41, 26, 37, 6, 74, 13, 41, 26, 37, - 6, 240, 174, 13, 41, 26, 37, 6, 239, 75, 13, 41, 26, 37, 6, 237, 171, 13, - 41, 26, 37, 6, 75, 13, 41, 26, 37, 6, 230, 184, 13, 41, 26, 37, 6, 230, - 54, 13, 41, 26, 37, 6, 159, 13, 41, 26, 37, 6, 226, 185, 13, 41, 26, 37, - 6, 223, 163, 13, 41, 26, 37, 6, 78, 13, 41, 26, 37, 6, 219, 184, 13, 41, - 26, 37, 6, 217, 134, 13, 41, 26, 37, 6, 146, 13, 41, 26, 37, 6, 194, 13, - 41, 26, 37, 6, 210, 69, 13, 41, 26, 37, 6, 68, 13, 41, 26, 37, 6, 206, - 164, 13, 41, 26, 37, 6, 204, 144, 13, 41, 26, 37, 6, 203, 196, 13, 41, - 26, 37, 6, 203, 124, 13, 41, 26, 37, 6, 202, 159, 13, 41, 26, 37, 5, 63, - 13, 41, 26, 37, 5, 249, 255, 13, 41, 26, 37, 5, 247, 125, 13, 41, 26, 37, - 5, 245, 51, 13, 41, 26, 37, 5, 74, 13, 41, 26, 37, 5, 240, 174, 13, 41, - 26, 37, 5, 239, 75, 13, 41, 26, 37, 5, 237, 171, 13, 41, 26, 37, 5, 75, - 13, 41, 26, 37, 5, 230, 184, 13, 41, 26, 37, 5, 230, 54, 13, 41, 26, 37, - 5, 159, 13, 41, 26, 37, 5, 226, 185, 13, 41, 26, 37, 5, 223, 163, 13, 41, - 26, 37, 5, 78, 13, 41, 26, 37, 5, 219, 184, 13, 41, 26, 37, 5, 217, 134, - 13, 41, 26, 37, 5, 146, 13, 41, 26, 37, 5, 194, 13, 41, 26, 37, 5, 210, - 69, 13, 41, 26, 37, 5, 68, 13, 41, 26, 37, 5, 206, 164, 13, 41, 26, 37, - 5, 204, 144, 13, 41, 26, 37, 5, 203, 196, 13, 41, 26, 37, 5, 203, 124, - 13, 41, 26, 37, 5, 202, 159, 13, 224, 41, 6, 63, 13, 224, 41, 6, 249, - 255, 13, 224, 41, 6, 247, 125, 13, 224, 41, 6, 245, 51, 13, 224, 41, 6, - 74, 13, 224, 41, 6, 240, 174, 13, 224, 41, 6, 239, 75, 13, 224, 41, 6, - 237, 171, 13, 224, 41, 6, 75, 13, 224, 41, 6, 230, 184, 13, 224, 41, 6, - 230, 54, 13, 224, 41, 6, 159, 13, 224, 41, 6, 226, 185, 13, 224, 41, 6, - 223, 163, 13, 224, 41, 6, 78, 13, 224, 41, 6, 219, 184, 13, 224, 41, 6, - 217, 134, 13, 224, 41, 6, 146, 13, 224, 41, 6, 194, 13, 224, 41, 6, 210, - 69, 13, 224, 41, 6, 68, 13, 224, 41, 6, 206, 164, 13, 224, 41, 6, 204, - 144, 13, 224, 41, 6, 203, 196, 13, 224, 41, 6, 203, 124, 13, 224, 41, 6, - 202, 159, 13, 224, 41, 5, 63, 13, 224, 41, 5, 249, 255, 13, 224, 41, 5, - 247, 125, 13, 224, 41, 5, 245, 51, 13, 224, 41, 5, 74, 13, 224, 41, 5, - 240, 174, 13, 224, 41, 5, 239, 75, 13, 224, 41, 5, 237, 171, 13, 224, 41, - 5, 75, 13, 224, 41, 5, 230, 184, 13, 224, 41, 5, 230, 54, 13, 224, 41, 5, - 159, 13, 224, 41, 5, 226, 185, 13, 224, 41, 5, 223, 163, 13, 224, 41, 5, - 78, 13, 224, 41, 5, 219, 184, 13, 224, 41, 5, 217, 134, 13, 224, 41, 5, - 146, 13, 224, 41, 5, 194, 13, 224, 41, 5, 210, 69, 13, 224, 41, 5, 68, - 13, 224, 41, 5, 206, 164, 13, 224, 41, 5, 204, 144, 13, 224, 41, 5, 203, - 196, 13, 224, 41, 5, 203, 124, 13, 224, 41, 5, 202, 159, 13, 37, 5, 243, - 84, 75, 13, 37, 5, 243, 84, 230, 184, 13, 26, 6, 251, 2, 13, 26, 6, 248, - 106, 13, 26, 6, 238, 235, 13, 26, 6, 244, 37, 13, 26, 6, 241, 37, 13, 26, - 6, 202, 83, 13, 26, 6, 240, 248, 13, 26, 6, 209, 74, 13, 26, 6, 230, 230, - 13, 26, 6, 229, 247, 13, 26, 6, 228, 24, 13, 26, 6, 223, 246, 13, 26, 6, - 221, 84, 13, 26, 6, 203, 170, 13, 26, 6, 220, 34, 13, 26, 6, 218, 167, - 13, 26, 6, 216, 59, 13, 26, 6, 209, 75, 97, 13, 26, 6, 212, 144, 13, 26, - 6, 209, 207, 13, 26, 6, 206, 216, 13, 26, 6, 218, 192, 13, 26, 6, 246, - 142, 13, 26, 6, 217, 202, 13, 26, 6, 220, 36, 13, 26, 223, 101, 13, 26, - 5, 251, 2, 13, 26, 5, 248, 106, 13, 26, 5, 238, 235, 13, 26, 5, 244, 37, - 13, 26, 5, 241, 37, 13, 26, 5, 202, 83, 13, 26, 5, 240, 248, 13, 26, 5, - 209, 74, 13, 26, 5, 230, 230, 13, 26, 5, 229, 247, 13, 26, 5, 228, 24, - 13, 26, 5, 223, 246, 13, 26, 5, 221, 84, 13, 26, 5, 203, 170, 13, 26, 5, - 220, 34, 13, 26, 5, 218, 167, 13, 26, 5, 216, 59, 13, 26, 5, 46, 212, - 144, 13, 26, 5, 212, 144, 13, 26, 5, 209, 207, 13, 26, 5, 206, 216, 13, - 26, 5, 218, 192, 13, 26, 5, 246, 142, 13, 26, 5, 217, 202, 13, 26, 5, - 220, 36, 13, 26, 219, 69, 243, 205, 13, 26, 241, 38, 97, 13, 26, 209, 75, - 97, 13, 26, 229, 248, 97, 13, 26, 218, 193, 97, 13, 26, 216, 60, 97, 13, - 26, 218, 168, 97, 13, 37, 6, 251, 2, 13, 37, 6, 248, 106, 13, 37, 6, 238, - 235, 13, 37, 6, 244, 37, 13, 37, 6, 241, 37, 13, 37, 6, 202, 83, 13, 37, - 6, 240, 248, 13, 37, 6, 209, 74, 13, 37, 6, 230, 230, 13, 37, 6, 229, - 247, 13, 37, 6, 228, 24, 13, 37, 6, 223, 246, 13, 37, 6, 221, 84, 13, 37, - 6, 203, 170, 13, 37, 6, 220, 34, 13, 37, 6, 218, 167, 13, 37, 6, 216, 59, - 13, 37, 6, 209, 75, 97, 13, 37, 6, 212, 144, 13, 37, 6, 209, 207, 13, 37, - 6, 206, 216, 13, 37, 6, 218, 192, 13, 37, 6, 246, 142, 13, 37, 6, 217, - 202, 13, 37, 6, 220, 36, 13, 37, 223, 101, 13, 37, 5, 251, 2, 13, 37, 5, - 248, 106, 13, 37, 5, 238, 235, 13, 37, 5, 244, 37, 13, 37, 5, 241, 37, - 13, 37, 5, 202, 83, 13, 37, 5, 240, 248, 13, 37, 5, 209, 74, 13, 37, 5, - 230, 230, 13, 37, 5, 229, 247, 13, 37, 5, 228, 24, 13, 37, 5, 223, 246, - 13, 37, 5, 221, 84, 13, 37, 5, 203, 170, 13, 37, 5, 220, 34, 13, 37, 5, - 218, 167, 13, 37, 5, 216, 59, 13, 37, 5, 46, 212, 144, 13, 37, 5, 212, - 144, 13, 37, 5, 209, 207, 13, 37, 5, 206, 216, 13, 37, 5, 218, 192, 13, - 37, 5, 246, 142, 13, 37, 5, 217, 202, 13, 37, 5, 220, 36, 13, 37, 219, - 69, 243, 205, 13, 37, 241, 38, 97, 13, 37, 209, 75, 97, 13, 37, 229, 248, - 97, 13, 37, 218, 193, 97, 13, 37, 216, 60, 97, 13, 37, 218, 168, 97, 13, - 26, 37, 6, 251, 2, 13, 26, 37, 6, 248, 106, 13, 26, 37, 6, 238, 235, 13, - 26, 37, 6, 244, 37, 13, 26, 37, 6, 241, 37, 13, 26, 37, 6, 202, 83, 13, - 26, 37, 6, 240, 248, 13, 26, 37, 6, 209, 74, 13, 26, 37, 6, 230, 230, 13, - 26, 37, 6, 229, 247, 13, 26, 37, 6, 228, 24, 13, 26, 37, 6, 223, 246, 13, - 26, 37, 6, 221, 84, 13, 26, 37, 6, 203, 170, 13, 26, 37, 6, 220, 34, 13, - 26, 37, 6, 218, 167, 13, 26, 37, 6, 216, 59, 13, 26, 37, 6, 209, 75, 97, - 13, 26, 37, 6, 212, 144, 13, 26, 37, 6, 209, 207, 13, 26, 37, 6, 206, - 216, 13, 26, 37, 6, 218, 192, 13, 26, 37, 6, 246, 142, 13, 26, 37, 6, - 217, 202, 13, 26, 37, 6, 220, 36, 13, 26, 37, 223, 101, 13, 26, 37, 5, - 251, 2, 13, 26, 37, 5, 248, 106, 13, 26, 37, 5, 238, 235, 13, 26, 37, 5, - 244, 37, 13, 26, 37, 5, 241, 37, 13, 26, 37, 5, 202, 83, 13, 26, 37, 5, - 240, 248, 13, 26, 37, 5, 209, 74, 13, 26, 37, 5, 230, 230, 13, 26, 37, 5, - 229, 247, 13, 26, 37, 5, 228, 24, 13, 26, 37, 5, 223, 246, 13, 26, 37, 5, - 221, 84, 13, 26, 37, 5, 203, 170, 13, 26, 37, 5, 220, 34, 13, 26, 37, 5, - 218, 167, 13, 26, 37, 5, 216, 59, 13, 26, 37, 5, 46, 212, 144, 13, 26, - 37, 5, 212, 144, 13, 26, 37, 5, 209, 207, 13, 26, 37, 5, 206, 216, 13, - 26, 37, 5, 218, 192, 13, 26, 37, 5, 246, 142, 13, 26, 37, 5, 217, 202, - 13, 26, 37, 5, 220, 36, 13, 26, 37, 219, 69, 243, 205, 13, 26, 37, 241, - 38, 97, 13, 26, 37, 209, 75, 97, 13, 26, 37, 229, 248, 97, 13, 26, 37, - 218, 193, 97, 13, 26, 37, 216, 60, 97, 13, 26, 37, 218, 168, 97, 13, 41, - 26, 6, 251, 2, 13, 41, 26, 6, 248, 106, 13, 41, 26, 6, 238, 235, 13, 41, - 26, 6, 244, 37, 13, 41, 26, 6, 241, 37, 13, 41, 26, 6, 202, 83, 13, 41, - 26, 6, 240, 248, 13, 41, 26, 6, 209, 74, 13, 41, 26, 6, 230, 230, 13, 41, - 26, 6, 229, 247, 13, 41, 26, 6, 228, 24, 13, 41, 26, 6, 223, 246, 13, 41, - 26, 6, 221, 84, 13, 41, 26, 6, 203, 170, 13, 41, 26, 6, 220, 34, 13, 41, - 26, 6, 218, 167, 13, 41, 26, 6, 216, 59, 13, 41, 26, 6, 209, 75, 97, 13, - 41, 26, 6, 212, 144, 13, 41, 26, 6, 209, 207, 13, 41, 26, 6, 206, 216, - 13, 41, 26, 6, 218, 192, 13, 41, 26, 6, 246, 142, 13, 41, 26, 6, 217, - 202, 13, 41, 26, 6, 220, 36, 13, 41, 26, 223, 101, 13, 41, 26, 5, 251, 2, - 13, 41, 26, 5, 248, 106, 13, 41, 26, 5, 238, 235, 13, 41, 26, 5, 244, 37, - 13, 41, 26, 5, 241, 37, 13, 41, 26, 5, 202, 83, 13, 41, 26, 5, 240, 248, - 13, 41, 26, 5, 209, 74, 13, 41, 26, 5, 230, 230, 13, 41, 26, 5, 229, 247, - 13, 41, 26, 5, 228, 24, 13, 41, 26, 5, 223, 246, 13, 41, 26, 5, 221, 84, - 13, 41, 26, 5, 203, 170, 13, 41, 26, 5, 220, 34, 13, 41, 26, 5, 218, 167, - 13, 41, 26, 5, 216, 59, 13, 41, 26, 5, 46, 212, 144, 13, 41, 26, 5, 212, - 144, 13, 41, 26, 5, 209, 207, 13, 41, 26, 5, 206, 216, 13, 41, 26, 5, - 218, 192, 13, 41, 26, 5, 246, 142, 13, 41, 26, 5, 217, 202, 13, 41, 26, - 5, 220, 36, 13, 41, 26, 219, 69, 243, 205, 13, 41, 26, 241, 38, 97, 13, - 41, 26, 209, 75, 97, 13, 41, 26, 229, 248, 97, 13, 41, 26, 218, 193, 97, - 13, 41, 26, 216, 60, 97, 13, 41, 26, 218, 168, 97, 13, 41, 26, 37, 6, - 251, 2, 13, 41, 26, 37, 6, 248, 106, 13, 41, 26, 37, 6, 238, 235, 13, 41, - 26, 37, 6, 244, 37, 13, 41, 26, 37, 6, 241, 37, 13, 41, 26, 37, 6, 202, - 83, 13, 41, 26, 37, 6, 240, 248, 13, 41, 26, 37, 6, 209, 74, 13, 41, 26, - 37, 6, 230, 230, 13, 41, 26, 37, 6, 229, 247, 13, 41, 26, 37, 6, 228, 24, - 13, 41, 26, 37, 6, 223, 246, 13, 41, 26, 37, 6, 221, 84, 13, 41, 26, 37, - 6, 203, 170, 13, 41, 26, 37, 6, 220, 34, 13, 41, 26, 37, 6, 218, 167, 13, - 41, 26, 37, 6, 216, 59, 13, 41, 26, 37, 6, 209, 75, 97, 13, 41, 26, 37, - 6, 212, 144, 13, 41, 26, 37, 6, 209, 207, 13, 41, 26, 37, 6, 206, 216, - 13, 41, 26, 37, 6, 218, 192, 13, 41, 26, 37, 6, 246, 142, 13, 41, 26, 37, - 6, 217, 202, 13, 41, 26, 37, 6, 220, 36, 13, 41, 26, 37, 223, 101, 13, - 41, 26, 37, 5, 251, 2, 13, 41, 26, 37, 5, 248, 106, 13, 41, 26, 37, 5, - 238, 235, 13, 41, 26, 37, 5, 244, 37, 13, 41, 26, 37, 5, 241, 37, 13, 41, - 26, 37, 5, 202, 83, 13, 41, 26, 37, 5, 240, 248, 13, 41, 26, 37, 5, 209, - 74, 13, 41, 26, 37, 5, 230, 230, 13, 41, 26, 37, 5, 229, 247, 13, 41, 26, - 37, 5, 228, 24, 13, 41, 26, 37, 5, 223, 246, 13, 41, 26, 37, 5, 221, 84, - 13, 41, 26, 37, 5, 203, 170, 13, 41, 26, 37, 5, 220, 34, 13, 41, 26, 37, - 5, 218, 167, 13, 41, 26, 37, 5, 216, 59, 13, 41, 26, 37, 5, 46, 212, 144, - 13, 41, 26, 37, 5, 212, 144, 13, 41, 26, 37, 5, 209, 207, 13, 41, 26, 37, - 5, 206, 216, 13, 41, 26, 37, 5, 218, 192, 13, 41, 26, 37, 5, 246, 142, - 13, 41, 26, 37, 5, 217, 202, 13, 41, 26, 37, 5, 220, 36, 13, 41, 26, 37, - 219, 69, 243, 205, 13, 41, 26, 37, 241, 38, 97, 13, 41, 26, 37, 209, 75, - 97, 13, 41, 26, 37, 229, 248, 97, 13, 41, 26, 37, 218, 193, 97, 13, 41, - 26, 37, 216, 60, 97, 13, 41, 26, 37, 218, 168, 97, 13, 26, 6, 243, 199, - 13, 26, 5, 243, 199, 13, 26, 17, 202, 84, 13, 26, 17, 105, 13, 26, 17, - 108, 13, 26, 17, 147, 13, 26, 17, 149, 13, 26, 17, 170, 13, 26, 17, 195, - 13, 26, 17, 213, 111, 13, 26, 17, 199, 13, 26, 17, 222, 63, 13, 169, 17, - 202, 84, 13, 169, 17, 105, 13, 169, 17, 108, 13, 169, 17, 147, 13, 169, - 17, 149, 13, 169, 17, 170, 13, 169, 17, 195, 13, 169, 17, 213, 111, 13, - 169, 17, 199, 13, 169, 17, 222, 63, 13, 41, 17, 202, 84, 13, 41, 17, 105, - 13, 41, 17, 108, 13, 41, 17, 147, 13, 41, 17, 149, 13, 41, 17, 170, 13, - 41, 17, 195, 13, 41, 17, 213, 111, 13, 41, 17, 199, 13, 41, 17, 222, 63, - 13, 41, 26, 17, 202, 84, 13, 41, 26, 17, 105, 13, 41, 26, 17, 108, 13, - 41, 26, 17, 147, 13, 41, 26, 17, 149, 13, 41, 26, 17, 170, 13, 41, 26, - 17, 195, 13, 41, 26, 17, 213, 111, 13, 41, 26, 17, 199, 13, 41, 26, 17, - 222, 63, 13, 224, 41, 17, 202, 84, 13, 224, 41, 17, 105, 13, 224, 41, 17, - 108, 13, 224, 41, 17, 147, 13, 224, 41, 17, 149, 13, 224, 41, 17, 170, - 13, 224, 41, 17, 195, 13, 224, 41, 17, 213, 111, 13, 224, 41, 17, 199, - 13, 224, 41, 17, 222, 63, 21, 128, 231, 35, 21, 237, 120, 231, 35, 21, - 237, 116, 231, 35, 21, 237, 105, 231, 35, 21, 237, 109, 231, 35, 21, 237, - 122, 231, 35, 21, 128, 122, 248, 117, 21, 237, 120, 122, 248, 117, 21, - 128, 148, 206, 248, 122, 248, 117, 21, 128, 122, 216, 188, 229, 29, 21, - 128, 122, 245, 97, 21, 128, 122, 236, 235, 21, 128, 122, 236, 236, 227, - 0, 21, 237, 120, 122, 236, 237, 21, 128, 122, 224, 148, 21, 237, 120, - 122, 224, 148, 21, 128, 122, 101, 248, 117, 21, 128, 122, 101, 216, 188, - 229, 28, 21, 128, 122, 101, 236, 235, 21, 128, 122, 112, 101, 236, 235, - 21, 128, 122, 236, 236, 101, 206, 224, 21, 128, 122, 101, 245, 207, 21, - 128, 122, 101, 245, 208, 122, 248, 117, 21, 128, 122, 101, 245, 208, 101, - 248, 117, 21, 128, 122, 101, 245, 208, 245, 97, 21, 128, 122, 101, 245, - 208, 236, 235, 21, 128, 122, 101, 245, 127, 21, 237, 120, 122, 101, 245, - 127, 21, 128, 101, 248, 118, 115, 231, 35, 21, 128, 122, 248, 118, 115, - 224, 148, 21, 128, 122, 101, 209, 21, 21, 237, 120, 122, 101, 209, 21, - 21, 128, 122, 101, 211, 53, 148, 248, 117, 21, 128, 122, 101, 248, 118, - 148, 211, 52, 21, 128, 122, 101, 148, 248, 117, 21, 128, 122, 101, 236, - 236, 211, 186, 148, 212, 155, 21, 128, 122, 112, 101, 236, 236, 148, 212, - 155, 21, 128, 122, 112, 101, 236, 236, 148, 245, 207, 21, 128, 122, 236, - 236, 101, 112, 148, 212, 155, 21, 128, 122, 101, 112, 211, 186, 148, 239, - 151, 21, 128, 122, 101, 148, 245, 97, 21, 128, 122, 101, 148, 246, 60, - 21, 128, 122, 101, 148, 236, 114, 21, 128, 122, 101, 148, 236, 235, 21, - 128, 148, 248, 104, 122, 101, 211, 52, 21, 128, 122, 101, 245, 208, 148, - 212, 155, 21, 128, 122, 101, 245, 208, 148, 212, 156, 245, 207, 21, 128, - 122, 101, 245, 208, 148, 212, 156, 248, 117, 21, 128, 101, 148, 236, 115, - 122, 206, 224, 21, 128, 122, 148, 236, 115, 101, 206, 224, 21, 128, 122, - 101, 245, 208, 236, 236, 148, 212, 155, 21, 128, 122, 101, 245, 128, 148, - 212, 155, 21, 128, 122, 101, 245, 208, 148, 239, 151, 21, 128, 122, 101, - 245, 208, 245, 98, 148, 239, 151, 21, 128, 101, 148, 245, 98, 122, 206, - 224, 21, 128, 122, 148, 245, 98, 101, 206, 224, 21, 128, 101, 148, 43, - 122, 206, 224, 21, 128, 101, 148, 43, 122, 236, 235, 21, 128, 122, 148, - 250, 216, 219, 212, 101, 206, 224, 21, 128, 122, 148, 250, 216, 231, 50, - 101, 206, 224, 21, 128, 122, 148, 43, 101, 206, 224, 21, 128, 122, 101, - 148, 245, 208, 236, 235, 21, 128, 122, 101, 148, 250, 216, 219, 211, 21, - 128, 122, 101, 148, 250, 215, 21, 128, 101, 148, 250, 216, 219, 212, 122, - 206, 224, 21, 128, 101, 148, 250, 216, 219, 212, 122, 245, 127, 21, 128, - 101, 148, 250, 216, 122, 206, 224, 21, 128, 122, 148, 236, 115, 101, 236, - 235, 21, 237, 111, 239, 147, 239, 253, 21, 237, 111, 239, 147, 239, 254, - 248, 117, 21, 237, 111, 239, 147, 239, 254, 236, 235, 21, 237, 111, 239, - 147, 239, 254, 245, 207, 21, 237, 111, 239, 147, 239, 254, 245, 208, 211, - 193, 21, 237, 118, 239, 147, 239, 254, 245, 207, 21, 128, 239, 147, 239, - 254, 245, 208, 248, 117, 21, 237, 109, 239, 147, 239, 254, 245, 207, 21, - 237, 111, 239, 233, 239, 254, 211, 185, 21, 237, 111, 237, 46, 239, 233, - 239, 254, 211, 185, 21, 237, 111, 239, 233, 239, 254, 211, 186, 239, 147, - 248, 117, 21, 237, 111, 237, 46, 239, 233, 239, 254, 211, 186, 239, 147, - 248, 117, 21, 237, 111, 239, 233, 239, 254, 211, 186, 248, 117, 21, 237, - 111, 237, 46, 239, 233, 239, 254, 211, 186, 248, 117, 21, 237, 111, 239, - 233, 239, 254, 211, 186, 148, 239, 151, 21, 237, 116, 239, 233, 239, 254, - 211, 185, 21, 237, 116, 239, 233, 239, 254, 211, 186, 220, 8, 21, 237, - 109, 239, 233, 239, 254, 211, 186, 220, 8, 21, 237, 105, 239, 233, 239, - 254, 211, 185, 21, 237, 111, 239, 233, 239, 254, 211, 186, 236, 235, 21, - 237, 111, 239, 233, 239, 254, 211, 186, 236, 236, 148, 212, 155, 21, 237, - 111, 239, 233, 239, 254, 211, 186, 236, 236, 221, 192, 209, 21, 21, 237, - 110, 21, 237, 111, 248, 104, 219, 135, 240, 94, 21, 237, 111, 237, 45, - 21, 237, 111, 148, 212, 155, 21, 237, 111, 237, 46, 148, 212, 155, 21, - 237, 111, 148, 248, 117, 21, 237, 111, 148, 239, 151, 21, 237, 111, 211, - 194, 122, 148, 212, 155, 21, 237, 111, 211, 194, 246, 217, 21, 237, 111, - 211, 194, 246, 218, 148, 212, 155, 21, 237, 111, 211, 194, 246, 218, 148, - 212, 156, 248, 117, 21, 237, 111, 211, 194, 227, 85, 21, 237, 117, 21, - 237, 118, 148, 212, 155, 21, 237, 118, 221, 192, 209, 21, 21, 237, 118, - 148, 239, 151, 21, 237, 107, 245, 94, 21, 237, 106, 21, 237, 116, 220, 8, - 21, 237, 115, 21, 237, 116, 171, 148, 212, 155, 21, 237, 116, 148, 212, - 155, 21, 237, 116, 171, 221, 192, 209, 21, 21, 237, 116, 221, 192, 209, - 21, 21, 237, 116, 171, 148, 239, 151, 21, 237, 116, 148, 239, 151, 21, - 237, 114, 220, 8, 21, 237, 113, 21, 237, 119, 21, 237, 104, 21, 237, 105, - 148, 212, 155, 21, 237, 105, 221, 192, 209, 21, 21, 237, 105, 148, 239, - 151, 21, 237, 109, 220, 8, 21, 237, 109, 171, 148, 239, 151, 21, 237, - 108, 21, 237, 109, 212, 36, 21, 237, 109, 171, 148, 212, 155, 21, 237, - 109, 148, 212, 155, 21, 237, 109, 171, 221, 192, 209, 21, 21, 237, 109, - 221, 192, 209, 21, 21, 237, 109, 148, 212, 156, 208, 127, 231, 35, 21, - 237, 109, 148, 248, 104, 101, 215, 252, 21, 237, 121, 21, 128, 122, 101, - 215, 252, 21, 237, 120, 122, 101, 215, 252, 21, 237, 109, 122, 101, 215, - 252, 21, 237, 122, 122, 101, 215, 252, 21, 237, 109, 227, 85, 21, 128, - 122, 101, 215, 253, 248, 117, 21, 128, 122, 101, 215, 253, 245, 207, 21, - 237, 109, 122, 101, 215, 253, 245, 207, 21, 128, 227, 86, 242, 70, 21, - 128, 227, 86, 121, 215, 248, 211, 52, 21, 128, 227, 86, 121, 215, 248, - 245, 85, 21, 128, 227, 86, 121, 219, 220, 246, 60, 21, 128, 227, 86, 206, - 224, 21, 128, 148, 206, 248, 227, 86, 206, 224, 21, 237, 120, 227, 86, - 206, 224, 21, 237, 105, 227, 86, 206, 224, 21, 237, 122, 227, 86, 206, - 224, 21, 128, 227, 86, 216, 188, 229, 29, 21, 128, 227, 86, 248, 117, 21, - 128, 227, 86, 208, 128, 209, 21, 21, 128, 227, 86, 209, 21, 21, 237, 109, - 227, 86, 209, 21, 21, 128, 227, 86, 122, 209, 21, 21, 237, 109, 227, 86, - 122, 209, 21, 21, 237, 122, 227, 86, 122, 148, 122, 148, 219, 211, 21, - 237, 122, 227, 86, 122, 148, 122, 209, 21, 21, 128, 227, 86, 231, 35, 21, - 237, 120, 227, 86, 231, 35, 21, 237, 109, 227, 86, 231, 35, 21, 237, 122, - 227, 86, 231, 35, 21, 128, 122, 101, 227, 85, 21, 237, 120, 122, 101, - 227, 85, 21, 237, 109, 122, 101, 227, 85, 21, 237, 109, 215, 252, 21, - 237, 122, 122, 101, 227, 85, 21, 128, 122, 101, 245, 131, 227, 85, 21, - 237, 120, 122, 101, 245, 131, 227, 85, 21, 128, 215, 253, 242, 70, 21, - 237, 109, 215, 253, 121, 122, 148, 236, 116, 224, 148, 21, 237, 122, 215, - 253, 121, 101, 148, 122, 245, 130, 21, 128, 215, 253, 206, 224, 21, 128, - 215, 253, 216, 188, 229, 29, 21, 128, 215, 253, 227, 85, 21, 237, 120, - 215, 253, 227, 85, 21, 237, 105, 215, 253, 227, 85, 21, 237, 122, 215, - 253, 227, 85, 21, 128, 215, 253, 224, 148, 21, 128, 215, 253, 101, 245, - 207, 21, 128, 215, 253, 101, 216, 188, 229, 28, 21, 128, 215, 253, 231, - 35, 21, 128, 215, 253, 209, 21, 21, 237, 107, 215, 253, 209, 21, 21, 128, - 122, 215, 253, 227, 85, 21, 237, 120, 122, 215, 253, 227, 85, 21, 237, - 114, 122, 215, 253, 227, 86, 220, 31, 21, 237, 107, 122, 215, 253, 227, - 86, 219, 211, 21, 237, 107, 122, 215, 253, 227, 86, 231, 49, 21, 237, - 107, 122, 215, 253, 227, 86, 206, 247, 21, 237, 116, 122, 215, 253, 227, - 85, 21, 237, 109, 122, 215, 253, 227, 85, 21, 237, 122, 122, 215, 253, - 227, 86, 219, 211, 21, 237, 122, 122, 215, 253, 227, 85, 21, 128, 101, - 242, 70, 21, 237, 109, 224, 148, 21, 128, 101, 206, 224, 21, 237, 120, - 101, 206, 224, 21, 128, 101, 216, 188, 229, 29, 21, 128, 101, 112, 148, - 212, 155, 21, 237, 107, 101, 209, 21, 21, 128, 101, 148, 227, 85, 21, - 128, 101, 227, 85, 21, 128, 101, 215, 253, 227, 85, 21, 237, 120, 101, - 215, 253, 227, 85, 21, 237, 114, 101, 215, 253, 227, 86, 220, 31, 21, - 237, 116, 101, 215, 253, 227, 85, 21, 237, 109, 101, 215, 253, 227, 85, - 21, 237, 122, 101, 215, 253, 227, 86, 219, 211, 21, 237, 122, 101, 215, - 253, 227, 86, 231, 49, 21, 237, 122, 101, 215, 253, 227, 85, 21, 237, - 120, 101, 215, 253, 227, 86, 248, 117, 21, 237, 118, 101, 215, 253, 227, - 86, 245, 207, 21, 237, 118, 101, 215, 253, 227, 86, 245, 208, 212, 155, - 21, 237, 107, 101, 215, 253, 227, 86, 245, 208, 219, 211, 21, 237, 107, - 101, 215, 253, 227, 86, 245, 208, 231, 49, 21, 237, 107, 101, 215, 253, - 227, 86, 245, 207, 21, 237, 109, 122, 236, 235, 21, 128, 122, 148, 212, - 155, 21, 237, 109, 122, 148, 212, 155, 21, 128, 122, 148, 212, 156, 148, - 243, 227, 21, 128, 122, 148, 212, 156, 148, 245, 207, 21, 128, 122, 148, - 212, 156, 148, 248, 117, 21, 128, 122, 148, 212, 156, 122, 248, 117, 21, - 128, 122, 148, 212, 156, 247, 251, 248, 117, 21, 128, 122, 148, 212, 156, - 122, 236, 237, 21, 128, 122, 148, 239, 152, 122, 211, 52, 21, 128, 122, - 148, 239, 152, 122, 248, 117, 21, 128, 122, 148, 113, 21, 128, 122, 148, - 245, 94, 21, 128, 122, 148, 245, 88, 148, 231, 6, 21, 237, 118, 122, 148, - 245, 88, 148, 231, 6, 21, 128, 122, 148, 245, 88, 148, 206, 247, 21, 128, - 122, 148, 246, 61, 21, 237, 116, 122, 209, 21, 21, 237, 116, 122, 148, - 220, 8, 21, 237, 109, 122, 148, 220, 8, 21, 237, 109, 122, 148, 228, 7, - 21, 237, 109, 122, 209, 21, 21, 237, 109, 122, 148, 212, 36, 21, 237, - 122, 122, 148, 219, 211, 21, 237, 122, 122, 148, 231, 49, 21, 237, 122, - 122, 209, 21, 21, 128, 209, 21, 21, 128, 148, 237, 45, 21, 128, 148, 212, - 156, 243, 227, 21, 128, 148, 212, 156, 245, 207, 21, 128, 148, 212, 156, - 248, 117, 21, 128, 148, 239, 151, 21, 128, 148, 248, 104, 122, 224, 148, - 21, 128, 148, 248, 104, 101, 215, 252, 21, 128, 148, 248, 104, 215, 253, - 227, 85, 21, 128, 148, 206, 248, 120, 239, 253, 21, 128, 148, 115, 120, - 239, 253, 21, 128, 148, 206, 248, 126, 239, 253, 21, 128, 148, 206, 248, - 239, 147, 239, 253, 21, 128, 148, 115, 239, 147, 216, 188, 229, 28, 21, - 237, 112, 21, 128, 237, 45, 21, 208, 129, 212, 119, 21, 208, 129, 223, - 225, 21, 208, 129, 248, 103, 21, 238, 2, 212, 119, 21, 238, 2, 223, 225, - 21, 238, 2, 248, 103, 21, 211, 37, 212, 119, 21, 211, 37, 223, 225, 21, - 211, 37, 248, 103, 21, 247, 201, 212, 119, 21, 247, 201, 223, 225, 21, - 247, 201, 248, 103, 21, 215, 143, 212, 119, 21, 215, 143, 223, 225, 21, - 215, 143, 248, 103, 21, 210, 189, 210, 102, 21, 210, 189, 248, 103, 21, - 211, 173, 228, 8, 212, 119, 21, 211, 173, 5, 212, 119, 21, 211, 173, 228, - 8, 223, 225, 21, 211, 173, 5, 223, 225, 21, 211, 173, 213, 126, 21, 239, - 208, 228, 8, 212, 119, 21, 239, 208, 5, 212, 119, 21, 239, 208, 228, 8, - 223, 225, 21, 239, 208, 5, 223, 225, 21, 239, 208, 213, 126, 21, 211, - 173, 239, 208, 250, 252, 21, 224, 0, 112, 121, 228, 7, 21, 224, 0, 112, - 121, 212, 36, 21, 224, 0, 112, 213, 126, 21, 224, 0, 121, 213, 126, 21, - 224, 0, 112, 121, 250, 253, 228, 7, 21, 224, 0, 112, 121, 250, 253, 212, - 36, 21, 224, 0, 212, 156, 208, 173, 212, 156, 214, 190, 21, 223, 255, - 240, 3, 245, 197, 21, 224, 1, 240, 3, 245, 197, 21, 223, 255, 212, 120, - 211, 53, 212, 36, 21, 223, 255, 212, 120, 211, 53, 225, 9, 21, 223, 255, - 212, 120, 211, 53, 228, 7, 21, 223, 255, 212, 120, 211, 53, 228, 5, 21, - 223, 255, 212, 120, 203, 221, 239, 211, 21, 223, 255, 52, 211, 52, 21, - 223, 255, 52, 203, 221, 239, 211, 21, 223, 255, 52, 250, 252, 21, 223, - 255, 52, 250, 253, 203, 221, 239, 211, 21, 223, 255, 245, 130, 21, 223, - 255, 208, 70, 211, 53, 224, 3, 21, 223, 255, 208, 70, 203, 221, 239, 211, - 21, 223, 255, 208, 70, 250, 252, 21, 223, 255, 208, 70, 250, 253, 203, - 221, 239, 211, 21, 223, 255, 248, 121, 212, 36, 21, 223, 255, 248, 121, - 225, 9, 21, 223, 255, 248, 121, 228, 7, 21, 223, 255, 245, 166, 212, 36, - 21, 223, 255, 245, 166, 225, 9, 21, 223, 255, 245, 166, 228, 7, 21, 223, - 255, 245, 166, 215, 196, 21, 223, 255, 246, 169, 212, 36, 21, 223, 255, - 246, 169, 225, 9, 21, 223, 255, 246, 169, 228, 7, 21, 223, 255, 98, 212, - 36, 21, 223, 255, 98, 225, 9, 21, 223, 255, 98, 228, 7, 21, 223, 255, - 202, 30, 212, 36, 21, 223, 255, 202, 30, 225, 9, 21, 223, 255, 202, 30, - 228, 7, 21, 223, 255, 219, 30, 212, 36, 21, 223, 255, 219, 30, 225, 9, - 21, 223, 255, 219, 30, 228, 7, 21, 208, 99, 215, 194, 212, 119, 21, 208, - 99, 215, 194, 242, 78, 21, 208, 99, 215, 194, 250, 252, 21, 208, 99, 215, - 195, 212, 119, 21, 208, 99, 215, 195, 242, 78, 21, 208, 99, 215, 195, - 250, 252, 21, 208, 99, 213, 71, 21, 208, 99, 250, 107, 211, 202, 212, - 119, 21, 208, 99, 250, 107, 211, 202, 242, 78, 21, 208, 99, 250, 107, - 211, 202, 208, 69, 21, 224, 2, 250, 12, 212, 36, 21, 224, 2, 250, 12, - 225, 9, 21, 224, 2, 250, 12, 228, 7, 21, 224, 2, 250, 12, 228, 5, 21, - 224, 2, 208, 123, 212, 36, 21, 224, 2, 208, 123, 225, 9, 21, 224, 2, 208, - 123, 228, 7, 21, 224, 2, 208, 123, 228, 5, 21, 224, 2, 248, 104, 250, 12, - 212, 36, 21, 224, 2, 248, 104, 250, 12, 225, 9, 21, 224, 2, 248, 104, - 250, 12, 228, 7, 21, 224, 2, 248, 104, 250, 12, 228, 5, 21, 224, 2, 248, - 104, 208, 123, 212, 36, 21, 224, 2, 248, 104, 208, 123, 225, 9, 21, 224, - 2, 248, 104, 208, 123, 228, 7, 21, 224, 2, 248, 104, 208, 123, 228, 5, - 21, 224, 1, 212, 120, 211, 53, 212, 36, 21, 224, 1, 212, 120, 211, 53, - 225, 9, 21, 224, 1, 212, 120, 211, 53, 228, 7, 21, 224, 1, 212, 120, 211, - 53, 228, 5, 21, 224, 1, 212, 120, 203, 221, 239, 211, 21, 224, 1, 52, - 211, 52, 21, 224, 1, 52, 203, 221, 239, 211, 21, 224, 1, 52, 250, 252, - 21, 224, 1, 52, 250, 253, 203, 221, 239, 211, 21, 224, 1, 245, 130, 21, - 224, 1, 208, 70, 211, 53, 224, 3, 21, 224, 1, 208, 70, 203, 221, 239, - 211, 21, 224, 1, 208, 70, 250, 253, 224, 3, 21, 224, 1, 208, 70, 250, - 253, 203, 221, 239, 211, 21, 224, 1, 248, 120, 21, 224, 1, 245, 166, 212, - 36, 21, 224, 1, 245, 166, 225, 9, 21, 224, 1, 245, 166, 228, 7, 21, 224, - 1, 246, 168, 21, 224, 1, 98, 212, 36, 21, 224, 1, 98, 225, 9, 21, 224, 1, - 98, 228, 7, 21, 224, 1, 202, 30, 212, 36, 21, 224, 1, 202, 30, 225, 9, - 21, 224, 1, 202, 30, 228, 7, 21, 224, 1, 219, 30, 212, 36, 21, 224, 1, - 219, 30, 225, 9, 21, 224, 1, 219, 30, 228, 7, 21, 208, 100, 215, 195, - 212, 119, 21, 208, 100, 215, 195, 242, 78, 21, 208, 100, 215, 195, 250, - 252, 21, 208, 100, 215, 194, 212, 119, 21, 208, 100, 215, 194, 242, 78, - 21, 208, 100, 215, 194, 250, 252, 21, 208, 100, 213, 71, 21, 223, 255, - 245, 88, 217, 56, 212, 36, 21, 223, 255, 245, 88, 217, 56, 225, 9, 21, - 223, 255, 245, 88, 217, 56, 228, 7, 21, 223, 255, 245, 88, 217, 56, 228, - 5, 21, 223, 255, 245, 88, 237, 136, 212, 36, 21, 223, 255, 245, 88, 237, - 136, 225, 9, 21, 223, 255, 245, 88, 237, 136, 228, 7, 21, 223, 255, 245, - 88, 237, 136, 228, 5, 21, 223, 255, 245, 88, 209, 27, 246, 62, 212, 36, - 21, 223, 255, 245, 88, 209, 27, 246, 62, 225, 9, 21, 223, 255, 236, 14, - 212, 36, 21, 223, 255, 236, 14, 225, 9, 21, 223, 255, 236, 14, 228, 7, - 21, 223, 255, 227, 15, 212, 36, 21, 223, 255, 227, 15, 225, 9, 21, 223, - 255, 227, 15, 228, 7, 21, 223, 255, 227, 15, 5, 242, 78, 21, 223, 255, - 204, 76, 245, 88, 52, 212, 36, 21, 223, 255, 204, 76, 245, 88, 52, 225, - 9, 21, 223, 255, 204, 76, 245, 88, 52, 228, 7, 21, 223, 255, 204, 76, - 245, 88, 208, 70, 212, 36, 21, 223, 255, 204, 76, 245, 88, 208, 70, 225, - 9, 21, 223, 255, 204, 76, 245, 88, 208, 70, 228, 7, 21, 223, 255, 245, - 88, 209, 84, 211, 52, 21, 223, 255, 245, 86, 245, 131, 212, 36, 21, 223, - 255, 245, 86, 245, 131, 225, 9, 21, 215, 194, 212, 119, 21, 215, 194, - 242, 78, 21, 215, 194, 250, 254, 21, 223, 255, 213, 71, 21, 223, 255, - 245, 88, 236, 229, 239, 119, 204, 99, 21, 223, 255, 236, 14, 236, 229, - 239, 119, 204, 99, 21, 223, 255, 227, 15, 236, 229, 239, 119, 204, 99, - 21, 223, 255, 204, 76, 236, 229, 239, 119, 204, 99, 21, 215, 194, 212, - 120, 236, 229, 239, 119, 204, 99, 21, 215, 194, 52, 236, 229, 239, 119, - 204, 99, 21, 215, 194, 250, 253, 236, 229, 239, 119, 204, 99, 21, 223, - 255, 245, 88, 236, 229, 246, 149, 21, 223, 255, 236, 14, 236, 229, 246, - 149, 21, 223, 255, 227, 15, 236, 229, 246, 149, 21, 223, 255, 204, 76, - 236, 229, 246, 149, 21, 215, 194, 212, 120, 236, 229, 246, 149, 21, 215, - 194, 52, 236, 229, 246, 149, 21, 215, 194, 250, 253, 236, 229, 246, 149, - 21, 223, 255, 204, 76, 243, 228, 219, 52, 212, 36, 21, 223, 255, 204, 76, - 243, 228, 219, 52, 225, 9, 21, 223, 255, 204, 76, 243, 228, 219, 52, 228, - 7, 21, 224, 1, 245, 88, 236, 229, 246, 227, 212, 36, 21, 224, 1, 245, 88, - 236, 229, 246, 227, 228, 7, 21, 224, 1, 236, 14, 236, 229, 246, 227, 5, - 242, 78, 21, 224, 1, 236, 14, 236, 229, 246, 227, 228, 8, 242, 78, 21, - 224, 1, 236, 14, 236, 229, 246, 227, 5, 208, 69, 21, 224, 1, 236, 14, - 236, 229, 246, 227, 228, 8, 208, 69, 21, 224, 1, 227, 15, 236, 229, 246, - 227, 5, 212, 119, 21, 224, 1, 227, 15, 236, 229, 246, 227, 228, 8, 212, - 119, 21, 224, 1, 227, 15, 236, 229, 246, 227, 5, 242, 78, 21, 224, 1, - 227, 15, 236, 229, 246, 227, 228, 8, 242, 78, 21, 224, 1, 204, 76, 236, - 229, 246, 227, 212, 36, 21, 224, 1, 204, 76, 236, 229, 246, 227, 228, 7, - 21, 215, 195, 212, 120, 236, 229, 246, 226, 21, 215, 195, 52, 236, 229, - 246, 226, 21, 215, 195, 250, 253, 236, 229, 246, 226, 21, 224, 1, 245, - 88, 236, 229, 239, 205, 212, 36, 21, 224, 1, 245, 88, 236, 229, 239, 205, - 228, 7, 21, 224, 1, 236, 14, 236, 229, 239, 205, 5, 242, 78, 21, 224, 1, - 236, 14, 236, 229, 239, 205, 228, 8, 242, 78, 21, 224, 1, 236, 14, 236, - 229, 239, 205, 208, 70, 5, 208, 69, 21, 224, 1, 236, 14, 236, 229, 239, - 205, 208, 70, 228, 8, 208, 69, 21, 224, 1, 227, 15, 236, 229, 239, 205, - 5, 212, 119, 21, 224, 1, 227, 15, 236, 229, 239, 205, 228, 8, 212, 119, - 21, 224, 1, 227, 15, 236, 229, 239, 205, 5, 242, 78, 21, 224, 1, 227, 15, - 236, 229, 239, 205, 228, 8, 242, 78, 21, 224, 1, 204, 76, 236, 229, 239, - 205, 212, 36, 21, 224, 1, 204, 76, 236, 229, 239, 205, 228, 7, 21, 215, - 195, 212, 120, 236, 229, 239, 204, 21, 215, 195, 52, 236, 229, 239, 204, - 21, 215, 195, 250, 253, 236, 229, 239, 204, 21, 224, 1, 245, 88, 212, 36, - 21, 224, 1, 245, 88, 225, 9, 21, 224, 1, 245, 88, 228, 7, 21, 224, 1, - 245, 88, 228, 5, 21, 224, 1, 245, 88, 245, 237, 21, 224, 1, 236, 14, 212, - 36, 21, 224, 1, 227, 15, 212, 36, 21, 224, 1, 204, 76, 212, 24, 21, 224, - 1, 204, 76, 212, 36, 21, 224, 1, 204, 76, 228, 7, 21, 215, 195, 212, 119, - 21, 215, 195, 242, 78, 21, 215, 195, 250, 252, 21, 224, 1, 213, 72, 219, - 81, 21, 223, 255, 250, 107, 246, 62, 5, 212, 119, 21, 223, 255, 250, 107, - 246, 62, 225, 10, 212, 119, 21, 223, 255, 250, 107, 246, 62, 5, 242, 78, - 21, 223, 255, 250, 107, 246, 62, 225, 10, 242, 78, 21, 224, 1, 250, 107, - 246, 62, 236, 229, 204, 100, 5, 212, 119, 21, 224, 1, 250, 107, 246, 62, - 236, 229, 204, 100, 225, 10, 212, 119, 21, 224, 1, 250, 107, 246, 62, - 236, 229, 204, 100, 228, 8, 212, 119, 21, 224, 1, 250, 107, 246, 62, 236, - 229, 204, 100, 5, 242, 78, 21, 224, 1, 250, 107, 246, 62, 236, 229, 204, - 100, 225, 10, 242, 78, 21, 224, 1, 250, 107, 246, 62, 236, 229, 204, 100, - 228, 8, 242, 78, 21, 223, 255, 203, 221, 246, 62, 239, 119, 212, 119, 21, - 223, 255, 203, 221, 246, 62, 239, 119, 242, 78, 21, 224, 1, 203, 221, - 246, 62, 236, 229, 204, 100, 212, 119, 21, 224, 1, 203, 221, 246, 62, - 236, 229, 204, 100, 242, 78, 21, 223, 255, 240, 3, 246, 59, 212, 119, 21, - 223, 255, 240, 3, 246, 59, 242, 78, 21, 224, 1, 240, 3, 246, 59, 236, - 229, 204, 100, 212, 119, 21, 224, 1, 240, 3, 246, 59, 236, 229, 204, 100, - 242, 78, 21, 242, 4, 250, 95, 212, 36, 21, 242, 4, 250, 95, 228, 7, 21, - 242, 4, 240, 74, 21, 242, 4, 212, 39, 21, 242, 4, 209, 145, 21, 242, 4, - 216, 115, 21, 242, 4, 212, 125, 21, 242, 4, 212, 126, 250, 252, 21, 242, - 4, 240, 221, 219, 221, 208, 221, 21, 242, 4, 238, 12, 21, 237, 64, 21, - 237, 65, 216, 1, 21, 237, 65, 223, 255, 211, 52, 21, 237, 65, 223, 255, - 208, 224, 21, 237, 65, 224, 1, 211, 52, 21, 237, 65, 223, 255, 245, 87, - 21, 237, 65, 224, 1, 245, 87, 21, 237, 65, 224, 4, 246, 61, 21, 240, 103, - 243, 166, 218, 34, 221, 168, 239, 152, 208, 222, 21, 240, 103, 243, 166, - 218, 34, 221, 168, 112, 219, 245, 242, 70, 21, 240, 103, 243, 166, 218, - 34, 221, 168, 112, 219, 245, 121, 208, 222, 21, 240, 190, 211, 53, 206, - 224, 21, 240, 190, 211, 53, 222, 215, 21, 240, 190, 211, 53, 242, 70, 21, - 242, 57, 240, 190, 222, 216, 242, 70, 21, 242, 57, 240, 190, 121, 222, - 215, 21, 242, 57, 240, 190, 112, 222, 215, 21, 242, 57, 240, 190, 222, - 216, 206, 224, 21, 239, 164, 222, 215, 21, 239, 164, 245, 197, 21, 239, - 164, 203, 224, 21, 240, 185, 220, 8, 21, 240, 185, 211, 172, 21, 240, - 185, 246, 15, 21, 240, 192, 248, 34, 212, 119, 21, 240, 192, 248, 34, - 223, 225, 21, 240, 185, 162, 220, 8, 21, 240, 185, 204, 27, 220, 8, 21, - 240, 185, 162, 246, 15, 21, 240, 185, 204, 25, 224, 3, 21, 240, 192, 204, - 9, 21, 240, 186, 206, 224, 21, 240, 186, 242, 70, 21, 240, 186, 239, 191, - 21, 240, 188, 211, 52, 21, 240, 188, 211, 53, 242, 78, 21, 240, 188, 211, - 53, 250, 252, 21, 240, 189, 211, 52, 21, 240, 189, 211, 53, 242, 78, 21, - 240, 189, 211, 53, 250, 252, 21, 240, 188, 245, 85, 21, 240, 189, 245, - 85, 21, 240, 188, 246, 56, 21, 246, 164, 217, 182, 21, 246, 164, 222, - 215, 21, 246, 164, 210, 234, 21, 209, 146, 246, 164, 236, 244, 21, 209, - 146, 246, 164, 224, 148, 21, 209, 146, 246, 164, 227, 0, 21, 241, 181, - 21, 221, 168, 222, 215, 21, 221, 168, 245, 197, 21, 221, 168, 203, 222, - 21, 221, 168, 204, 22, 21, 251, 55, 248, 27, 219, 211, 21, 251, 55, 210, - 233, 231, 49, 21, 251, 55, 248, 29, 5, 215, 193, 21, 251, 55, 210, 235, - 5, 215, 193, 21, 247, 216, 231, 22, 21, 247, 216, 240, 210, 21, 224, 8, - 246, 16, 222, 215, 21, 224, 8, 246, 16, 239, 151, 21, 224, 8, 246, 16, - 245, 197, 21, 224, 8, 212, 31, 21, 224, 8, 212, 32, 203, 224, 21, 224, 8, - 212, 32, 220, 8, 21, 224, 8, 239, 115, 21, 224, 8, 239, 116, 203, 224, - 21, 224, 8, 239, 116, 220, 8, 21, 224, 8, 171, 246, 61, 21, 224, 8, 171, - 239, 151, 21, 224, 8, 171, 203, 224, 21, 224, 8, 171, 219, 204, 21, 224, - 8, 171, 219, 205, 203, 224, 21, 224, 8, 171, 219, 205, 203, 59, 21, 224, - 8, 171, 216, 143, 21, 224, 8, 171, 216, 144, 203, 224, 21, 224, 8, 171, - 216, 144, 203, 59, 21, 224, 8, 229, 66, 21, 224, 8, 229, 67, 239, 151, - 21, 224, 8, 229, 67, 203, 224, 21, 224, 8, 209, 145, 21, 224, 8, 209, - 146, 239, 151, 21, 224, 8, 209, 146, 210, 234, 21, 227, 99, 217, 239, - 208, 169, 21, 227, 101, 226, 251, 115, 206, 220, 21, 227, 101, 206, 221, - 115, 226, 250, 21, 224, 8, 245, 164, 21, 224, 8, 203, 223, 212, 119, 21, - 224, 8, 203, 223, 242, 78, 21, 208, 151, 211, 72, 219, 212, 240, 76, 21, - 208, 151, 227, 144, 227, 98, 21, 208, 151, 208, 211, 248, 104, 227, 98, - 21, 208, 151, 208, 211, 208, 127, 231, 7, 224, 7, 21, 208, 151, 231, 7, - 224, 8, 216, 115, 21, 208, 151, 223, 254, 251, 79, 246, 165, 21, 208, - 151, 246, 218, 211, 72, 219, 211, 21, 208, 151, 246, 218, 231, 7, 224, 7, - 21, 209, 172, 21, 209, 173, 224, 3, 21, 209, 173, 220, 32, 208, 150, 21, - 209, 173, 220, 32, 208, 151, 224, 3, 21, 209, 173, 220, 32, 227, 98, 21, - 209, 173, 220, 32, 227, 99, 224, 3, 21, 209, 173, 248, 50, 227, 98, 21, - 223, 255, 230, 165, 21, 224, 1, 230, 165, 21, 222, 237, 21, 237, 145, 21, - 240, 213, 21, 212, 211, 236, 234, 211, 203, 21, 212, 211, 236, 234, 218, - 33, 21, 204, 98, 212, 211, 236, 234, 224, 6, 21, 239, 203, 212, 211, 236, - 234, 224, 6, 21, 212, 211, 208, 223, 239, 120, 204, 104, 21, 208, 134, - 211, 53, 211, 41, 21, 208, 134, 245, 86, 248, 120, 21, 208, 135, 207, - 137, 21, 206, 221, 248, 18, 208, 223, 239, 120, 236, 234, 230, 95, 21, - 227, 126, 245, 238, 21, 227, 126, 227, 195, 21, 227, 126, 227, 194, 21, - 227, 126, 227, 193, 21, 227, 126, 227, 192, 21, 227, 126, 227, 191, 21, - 227, 126, 227, 190, 21, 227, 126, 227, 189, 21, 240, 2, 21, 227, 45, 211, - 228, 21, 227, 46, 211, 228, 21, 227, 47, 237, 41, 21, 227, 47, 204, 23, - 21, 227, 47, 244, 24, 21, 227, 47, 237, 65, 222, 237, 21, 227, 47, 208, - 136, 21, 227, 47, 227, 125, 243, 198, 21, 245, 233, 21, 239, 102, 211, - 61, 21, 213, 143, 21, 245, 242, 21, 219, 76, 21, 240, 10, 224, 66, 21, - 240, 10, 224, 65, 21, 240, 10, 224, 64, 21, 240, 10, 224, 63, 21, 240, - 10, 224, 62, 21, 215, 197, 224, 66, 21, 215, 197, 224, 65, 21, 215, 197, - 224, 64, 21, 215, 197, 224, 63, 21, 215, 197, 224, 62, 21, 215, 197, 224, - 61, 21, 215, 197, 224, 60, 21, 215, 197, 224, 59, 21, 215, 197, 224, 73, - 21, 215, 197, 224, 72, 21, 215, 197, 224, 71, 21, 215, 197, 224, 70, 21, - 215, 197, 224, 69, 21, 215, 197, 224, 68, 21, 215, 197, 224, 67, 73, 72, - 4, 226, 184, 229, 100, 73, 72, 4, 226, 180, 173, 73, 72, 4, 226, 178, - 228, 209, 73, 72, 4, 226, 54, 229, 198, 73, 72, 4, 226, 24, 229, 201, 73, - 72, 4, 226, 43, 229, 6, 73, 72, 4, 226, 71, 229, 26, 73, 72, 4, 225, 196, - 228, 203, 73, 72, 4, 226, 175, 204, 30, 73, 72, 4, 226, 173, 204, 111, - 73, 72, 4, 226, 171, 203, 217, 73, 72, 4, 225, 249, 204, 55, 73, 72, 4, - 226, 1, 204, 62, 73, 72, 4, 226, 5, 203, 244, 73, 72, 4, 226, 74, 204, 0, - 73, 72, 4, 225, 181, 203, 213, 73, 72, 4, 225, 232, 204, 53, 73, 72, 4, - 226, 58, 203, 201, 73, 72, 4, 226, 70, 203, 203, 73, 72, 4, 225, 236, - 203, 202, 73, 72, 4, 226, 169, 224, 110, 73, 72, 4, 226, 167, 225, 122, - 73, 72, 4, 226, 165, 223, 219, 73, 72, 4, 226, 60, 224, 240, 73, 72, 4, - 226, 25, 224, 54, 73, 72, 4, 225, 221, 223, 243, 73, 72, 4, 225, 186, - 223, 237, 73, 72, 4, 226, 163, 248, 86, 73, 72, 4, 226, 160, 249, 32, 73, - 72, 4, 226, 158, 247, 193, 73, 72, 4, 225, 225, 248, 150, 73, 72, 4, 226, - 22, 248, 162, 73, 72, 4, 226, 16, 248, 10, 73, 72, 4, 225, 237, 248, 23, - 73, 72, 4, 226, 148, 75, 73, 72, 4, 226, 146, 63, 73, 72, 4, 226, 144, - 68, 73, 72, 4, 225, 212, 241, 161, 73, 72, 4, 226, 19, 74, 73, 72, 4, - 225, 210, 220, 18, 73, 72, 4, 225, 228, 78, 73, 72, 4, 225, 238, 241, - 145, 73, 72, 4, 225, 244, 231, 49, 73, 72, 4, 225, 240, 231, 49, 73, 72, - 4, 225, 180, 250, 231, 73, 72, 4, 225, 197, 241, 92, 73, 72, 4, 226, 133, - 212, 162, 73, 72, 4, 226, 131, 215, 36, 73, 72, 4, 226, 129, 211, 10, 73, - 72, 4, 225, 213, 214, 165, 73, 72, 4, 226, 3, 214, 177, 73, 72, 4, 225, - 239, 211, 250, 73, 72, 4, 226, 40, 212, 13, 73, 72, 4, 225, 179, 212, - 161, 73, 72, 4, 226, 119, 227, 148, 73, 72, 4, 226, 117, 228, 113, 73, - 72, 4, 226, 115, 226, 239, 73, 72, 4, 226, 35, 227, 226, 73, 72, 4, 226, - 46, 227, 234, 73, 72, 4, 226, 65, 227, 18, 73, 72, 4, 225, 222, 227, 49, - 73, 72, 4, 226, 9, 163, 227, 234, 73, 72, 4, 226, 141, 243, 233, 73, 72, - 4, 226, 138, 244, 212, 73, 72, 4, 226, 135, 242, 42, 73, 72, 4, 226, 30, - 244, 61, 73, 72, 4, 225, 195, 243, 90, 73, 72, 4, 225, 194, 243, 113, 73, - 72, 4, 226, 127, 209, 2, 73, 72, 4, 226, 124, 210, 22, 73, 72, 4, 226, - 122, 207, 203, 73, 72, 4, 226, 28, 209, 176, 73, 72, 4, 226, 64, 209, - 187, 73, 72, 4, 226, 15, 208, 148, 73, 72, 4, 226, 50, 135, 73, 72, 4, - 226, 113, 230, 141, 73, 72, 4, 226, 110, 230, 181, 73, 72, 4, 226, 108, - 230, 82, 73, 72, 4, 225, 218, 230, 159, 73, 72, 4, 226, 6, 230, 161, 73, - 72, 4, 225, 215, 230, 91, 73, 72, 4, 226, 56, 230, 101, 73, 72, 4, 225, - 200, 163, 230, 101, 73, 72, 4, 226, 106, 203, 11, 73, 72, 4, 226, 103, - 198, 73, 72, 4, 226, 101, 202, 213, 73, 72, 4, 226, 10, 203, 49, 73, 72, - 4, 226, 39, 203, 52, 73, 72, 4, 225, 234, 202, 232, 73, 72, 4, 225, 254, - 202, 247, 73, 72, 4, 226, 97, 240, 26, 73, 72, 4, 226, 95, 240, 108, 73, - 72, 4, 226, 93, 239, 108, 73, 72, 4, 226, 41, 240, 53, 73, 72, 4, 226, - 44, 240, 60, 73, 72, 4, 225, 242, 239, 175, 73, 72, 4, 226, 31, 239, 186, - 73, 72, 4, 225, 178, 239, 107, 73, 72, 4, 226, 18, 240, 81, 73, 72, 4, - 226, 91, 222, 68, 73, 72, 4, 226, 89, 223, 83, 73, 72, 4, 226, 87, 221, - 40, 73, 72, 4, 226, 2, 222, 230, 73, 72, 4, 225, 206, 221, 185, 73, 72, - 4, 225, 199, 237, 3, 73, 72, 4, 226, 82, 152, 73, 72, 4, 225, 189, 236, - 26, 73, 72, 4, 226, 85, 237, 48, 73, 72, 4, 226, 23, 237, 67, 73, 72, 4, - 226, 80, 236, 117, 73, 72, 4, 225, 235, 236, 136, 73, 72, 4, 226, 36, - 237, 47, 73, 72, 4, 225, 247, 236, 110, 73, 72, 4, 226, 66, 236, 238, 73, - 72, 4, 225, 245, 237, 126, 73, 72, 4, 226, 32, 236, 13, 73, 72, 4, 226, - 67, 237, 33, 73, 72, 4, 225, 182, 236, 120, 73, 72, 4, 226, 73, 236, 25, - 73, 72, 4, 226, 29, 222, 168, 73, 72, 4, 226, 78, 222, 182, 73, 72, 4, - 226, 37, 222, 165, 73, 72, 4, 226, 4, 222, 176, 73, 72, 4, 225, 229, 222, - 177, 73, 72, 4, 225, 219, 222, 166, 73, 72, 4, 225, 255, 222, 167, 73, - 72, 4, 225, 216, 222, 181, 73, 72, 4, 225, 248, 222, 164, 73, 72, 4, 226, - 33, 163, 222, 177, 73, 72, 4, 226, 13, 163, 222, 166, 73, 72, 4, 225, - 192, 163, 222, 167, 73, 72, 4, 225, 220, 238, 81, 73, 72, 4, 226, 8, 239, - 8, 73, 72, 4, 225, 207, 237, 230, 73, 72, 4, 225, 185, 238, 182, 73, 72, - 4, 225, 209, 237, 216, 73, 72, 4, 225, 208, 237, 226, 73, 72, 4, 225, - 191, 222, 187, 73, 72, 4, 226, 62, 222, 124, 73, 72, 4, 225, 198, 222, - 113, 73, 72, 4, 226, 51, 218, 167, 73, 72, 4, 226, 20, 185, 73, 72, 4, - 226, 69, 217, 191, 73, 72, 4, 226, 38, 219, 23, 73, 72, 4, 226, 68, 219, - 34, 73, 72, 4, 226, 17, 218, 45, 73, 72, 4, 226, 53, 218, 69, 73, 72, 4, - 225, 230, 225, 39, 73, 72, 4, 226, 57, 225, 54, 73, 72, 4, 225, 253, 225, - 33, 73, 72, 4, 226, 72, 225, 46, 73, 72, 4, 225, 187, 225, 46, 73, 72, 4, - 226, 47, 225, 47, 73, 72, 4, 225, 203, 225, 34, 73, 72, 4, 225, 201, 225, - 35, 73, 72, 4, 225, 188, 225, 27, 73, 72, 4, 225, 214, 163, 225, 47, 73, - 72, 4, 226, 14, 163, 225, 34, 73, 72, 4, 225, 233, 163, 225, 35, 73, 72, - 4, 225, 243, 228, 236, 73, 72, 4, 226, 27, 228, 244, 73, 72, 4, 226, 45, - 228, 232, 73, 72, 4, 226, 76, 228, 239, 73, 72, 4, 226, 11, 228, 240, 73, - 72, 4, 226, 7, 228, 234, 73, 72, 4, 225, 217, 228, 235, 73, 72, 4, 225, - 251, 238, 199, 73, 72, 4, 226, 63, 238, 207, 73, 72, 4, 225, 227, 238, - 194, 73, 72, 4, 226, 26, 238, 203, 73, 72, 4, 226, 12, 238, 204, 73, 72, - 4, 226, 48, 238, 195, 73, 72, 4, 226, 49, 238, 197, 73, 72, 4, 225, 204, - 216, 220, 73, 72, 4, 225, 252, 223, 10, 73, 72, 4, 225, 246, 223, 25, 73, - 72, 4, 225, 250, 222, 248, 73, 72, 4, 225, 184, 223, 16, 73, 72, 4, 226, - 0, 223, 17, 73, 72, 4, 226, 52, 222, 253, 73, 72, 4, 226, 55, 223, 1, 73, - 72, 4, 225, 223, 222, 48, 73, 72, 4, 225, 183, 222, 18, 73, 72, 4, 225, - 226, 222, 39, 73, 72, 4, 225, 241, 222, 22, 73, 72, 4, 225, 193, 205, - 230, 73, 72, 4, 225, 190, 206, 86, 73, 72, 4, 225, 224, 204, 163, 73, 72, - 4, 225, 202, 206, 50, 73, 72, 4, 226, 34, 206, 55, 73, 72, 4, 225, 231, - 205, 176, 73, 72, 4, 226, 42, 205, 189, 73, 72, 4, 225, 211, 220, 242, - 73, 72, 4, 226, 61, 221, 5, 73, 72, 4, 225, 205, 220, 224, 73, 72, 4, - 226, 21, 220, 253, 73, 72, 4, 226, 59, 220, 231, 73, 72, 17, 105, 73, 72, - 17, 108, 73, 72, 17, 147, 73, 72, 17, 149, 73, 72, 17, 170, 73, 72, 17, - 195, 73, 72, 17, 213, 111, 73, 72, 17, 199, 73, 72, 17, 222, 63, 73, 72, - 39, 42, 209, 174, 73, 72, 39, 42, 209, 147, 73, 72, 39, 42, 236, 10, 73, - 72, 39, 42, 209, 34, 73, 72, 39, 42, 209, 153, 209, 34, 73, 72, 39, 42, - 236, 12, 209, 34, 73, 72, 39, 42, 224, 113, 10, 13, 251, 30, 10, 13, 248, - 138, 10, 13, 230, 158, 10, 13, 244, 184, 10, 13, 204, 70, 10, 13, 202, - 107, 10, 13, 237, 148, 10, 13, 209, 251, 10, 13, 203, 47, 10, 13, 230, - 22, 10, 13, 228, 28, 10, 13, 225, 5, 10, 13, 221, 178, 10, 13, 214, 161, - 10, 13, 251, 59, 10, 13, 240, 47, 10, 13, 215, 28, 10, 13, 217, 119, 10, - 13, 216, 122, 10, 13, 213, 39, 10, 13, 209, 169, 10, 13, 209, 88, 10, 13, - 229, 140, 10, 13, 209, 100, 10, 13, 244, 207, 10, 13, 202, 110, 10, 13, - 238, 114, 10, 13, 243, 84, 248, 138, 10, 13, 243, 84, 221, 178, 10, 13, - 243, 84, 240, 47, 10, 13, 243, 84, 217, 119, 10, 13, 81, 248, 138, 10, - 13, 81, 230, 158, 10, 13, 81, 237, 43, 10, 13, 81, 237, 148, 10, 13, 81, - 203, 47, 10, 13, 81, 230, 22, 10, 13, 81, 228, 28, 10, 13, 81, 225, 5, - 10, 13, 81, 221, 178, 10, 13, 81, 214, 161, 10, 13, 81, 251, 59, 10, 13, - 81, 240, 47, 10, 13, 81, 215, 28, 10, 13, 81, 217, 119, 10, 13, 81, 213, - 39, 10, 13, 81, 209, 169, 10, 13, 81, 209, 88, 10, 13, 81, 229, 140, 10, - 13, 81, 244, 207, 10, 13, 81, 238, 114, 10, 13, 209, 247, 230, 158, 10, - 13, 209, 247, 237, 148, 10, 13, 209, 247, 203, 47, 10, 13, 209, 247, 228, - 28, 10, 13, 209, 247, 221, 178, 10, 13, 209, 247, 214, 161, 10, 13, 209, - 247, 251, 59, 10, 13, 209, 247, 215, 28, 10, 13, 209, 247, 217, 119, 10, - 13, 209, 247, 213, 39, 10, 13, 209, 247, 229, 140, 10, 13, 209, 247, 244, - 207, 10, 13, 209, 247, 238, 114, 10, 13, 209, 247, 243, 84, 221, 178, 10, - 13, 209, 247, 243, 84, 217, 119, 10, 13, 211, 40, 248, 138, 10, 13, 211, - 40, 230, 158, 10, 13, 211, 40, 237, 43, 10, 13, 211, 40, 237, 148, 10, - 13, 211, 40, 209, 251, 10, 13, 211, 40, 203, 47, 10, 13, 211, 40, 230, - 22, 10, 13, 211, 40, 225, 5, 10, 13, 211, 40, 221, 178, 10, 13, 211, 40, - 214, 161, 10, 13, 211, 40, 251, 59, 10, 13, 211, 40, 240, 47, 10, 13, - 211, 40, 215, 28, 10, 13, 211, 40, 217, 119, 10, 13, 211, 40, 213, 39, - 10, 13, 211, 40, 209, 169, 10, 13, 211, 40, 209, 88, 10, 13, 211, 40, - 229, 140, 10, 13, 211, 40, 244, 207, 10, 13, 211, 40, 202, 110, 10, 13, - 211, 40, 238, 114, 10, 13, 211, 40, 243, 84, 248, 138, 10, 13, 211, 40, - 243, 84, 240, 47, 10, 13, 227, 13, 251, 30, 10, 13, 227, 13, 248, 138, - 10, 13, 227, 13, 230, 158, 10, 13, 227, 13, 244, 184, 10, 13, 227, 13, - 237, 43, 10, 13, 227, 13, 204, 70, 10, 13, 227, 13, 202, 107, 10, 13, - 227, 13, 237, 148, 10, 13, 227, 13, 209, 251, 10, 13, 227, 13, 203, 47, - 10, 13, 227, 13, 228, 28, 10, 13, 227, 13, 225, 5, 10, 13, 227, 13, 221, - 178, 10, 13, 227, 13, 214, 161, 10, 13, 227, 13, 251, 59, 10, 13, 227, - 13, 240, 47, 10, 13, 227, 13, 215, 28, 10, 13, 227, 13, 217, 119, 10, 13, - 227, 13, 216, 122, 10, 13, 227, 13, 213, 39, 10, 13, 227, 13, 209, 169, - 10, 13, 227, 13, 209, 88, 10, 13, 227, 13, 229, 140, 10, 13, 227, 13, - 209, 100, 10, 13, 227, 13, 244, 207, 10, 13, 227, 13, 202, 110, 10, 13, - 227, 13, 238, 114, 10, 13, 169, 248, 138, 10, 13, 169, 230, 158, 10, 13, - 169, 244, 184, 10, 13, 169, 204, 70, 10, 13, 169, 202, 107, 10, 13, 169, - 237, 148, 10, 13, 169, 209, 251, 10, 13, 169, 203, 47, 10, 13, 169, 228, - 28, 10, 13, 169, 225, 5, 10, 13, 169, 221, 178, 10, 13, 169, 214, 161, - 10, 13, 169, 251, 59, 10, 13, 169, 240, 47, 10, 13, 169, 215, 28, 10, 13, - 169, 217, 119, 10, 13, 169, 216, 122, 10, 13, 169, 213, 39, 10, 13, 169, - 209, 169, 10, 13, 169, 209, 88, 10, 13, 169, 229, 140, 10, 13, 169, 209, - 100, 10, 13, 169, 244, 207, 10, 13, 169, 202, 110, 10, 13, 169, 238, 114, - 10, 13, 219, 255, 83, 3, 151, 3, 209, 209, 10, 13, 219, 255, 151, 3, 244, - 184, 225, 142, 99, 241, 176, 204, 16, 225, 142, 99, 211, 238, 204, 16, - 225, 142, 99, 204, 46, 204, 16, 225, 142, 99, 153, 204, 16, 225, 142, 99, - 216, 138, 242, 61, 225, 142, 99, 237, 244, 242, 61, 225, 142, 99, 61, - 242, 61, 225, 142, 99, 118, 76, 246, 181, 225, 142, 99, 120, 76, 246, - 181, 225, 142, 99, 126, 76, 246, 181, 225, 142, 99, 239, 147, 76, 246, - 181, 225, 142, 99, 239, 233, 76, 246, 181, 225, 142, 99, 212, 88, 76, - 246, 181, 225, 142, 99, 213, 112, 76, 246, 181, 225, 142, 99, 241, 143, - 76, 246, 181, 225, 142, 99, 222, 64, 76, 246, 181, 225, 142, 99, 118, 76, - 248, 243, 225, 142, 99, 120, 76, 248, 243, 225, 142, 99, 126, 76, 248, - 243, 225, 142, 99, 239, 147, 76, 248, 243, 225, 142, 99, 239, 233, 76, - 248, 243, 225, 142, 99, 212, 88, 76, 248, 243, 225, 142, 99, 213, 112, - 76, 248, 243, 225, 142, 99, 241, 143, 76, 248, 243, 225, 142, 99, 222, - 64, 76, 248, 243, 225, 142, 99, 118, 76, 246, 58, 225, 142, 99, 120, 76, - 246, 58, 225, 142, 99, 126, 76, 246, 58, 225, 142, 99, 239, 147, 76, 246, - 58, 225, 142, 99, 239, 233, 76, 246, 58, 225, 142, 99, 212, 88, 76, 246, - 58, 225, 142, 99, 213, 112, 76, 246, 58, 225, 142, 99, 241, 143, 76, 246, - 58, 225, 142, 99, 222, 64, 76, 246, 58, 225, 142, 99, 218, 79, 225, 142, - 99, 219, 242, 225, 142, 99, 248, 244, 225, 142, 99, 246, 99, 225, 142, - 99, 211, 183, 225, 142, 99, 210, 216, 225, 142, 99, 250, 21, 225, 142, - 99, 204, 7, 225, 142, 99, 230, 94, 225, 142, 99, 249, 25, 161, 99, 236, - 106, 249, 25, 161, 99, 236, 104, 161, 99, 236, 103, 161, 99, 236, 102, - 161, 99, 236, 101, 161, 99, 236, 100, 161, 99, 236, 99, 161, 99, 236, 98, - 161, 99, 236, 97, 161, 99, 236, 96, 161, 99, 236, 95, 161, 99, 236, 94, - 161, 99, 236, 93, 161, 99, 236, 92, 161, 99, 236, 91, 161, 99, 236, 90, - 161, 99, 236, 89, 161, 99, 236, 88, 161, 99, 236, 87, 161, 99, 236, 86, - 161, 99, 236, 85, 161, 99, 236, 84, 161, 99, 236, 83, 161, 99, 236, 82, - 161, 99, 236, 81, 161, 99, 236, 80, 161, 99, 236, 79, 161, 99, 236, 78, - 161, 99, 236, 77, 161, 99, 236, 76, 161, 99, 236, 75, 161, 99, 236, 74, - 161, 99, 236, 73, 161, 99, 236, 72, 161, 99, 236, 71, 161, 99, 236, 70, - 161, 99, 236, 69, 161, 99, 236, 68, 161, 99, 236, 67, 161, 99, 236, 66, - 161, 99, 236, 65, 161, 99, 236, 64, 161, 99, 236, 63, 161, 99, 236, 62, - 161, 99, 236, 61, 161, 99, 236, 60, 161, 99, 236, 59, 161, 99, 236, 58, - 161, 99, 236, 57, 161, 99, 236, 56, 161, 99, 80, 249, 25, 161, 99, 206, - 37, 161, 99, 206, 36, 161, 99, 206, 35, 161, 99, 206, 34, 161, 99, 206, - 33, 161, 99, 206, 32, 161, 99, 206, 31, 161, 99, 206, 30, 161, 99, 206, - 29, 161, 99, 206, 28, 161, 99, 206, 27, 161, 99, 206, 26, 161, 99, 206, - 25, 161, 99, 206, 24, 161, 99, 206, 23, 161, 99, 206, 22, 161, 99, 206, - 21, 161, 99, 206, 20, 161, 99, 206, 19, 161, 99, 206, 18, 161, 99, 206, - 17, 161, 99, 206, 16, 161, 99, 206, 15, 161, 99, 206, 14, 161, 99, 206, - 13, 161, 99, 206, 12, 161, 99, 206, 11, 161, 99, 206, 10, 161, 99, 206, - 9, 161, 99, 206, 8, 161, 99, 206, 7, 161, 99, 206, 6, 161, 99, 206, 5, - 161, 99, 206, 4, 161, 99, 206, 3, 161, 99, 206, 2, 161, 99, 206, 1, 161, - 99, 206, 0, 161, 99, 205, 255, 161, 99, 205, 254, 161, 99, 205, 253, 161, - 99, 205, 252, 161, 99, 205, 251, 161, 99, 205, 250, 161, 99, 205, 249, - 161, 99, 205, 248, 161, 99, 205, 247, 161, 99, 205, 246, 161, 99, 205, - 245, 218, 88, 247, 38, 249, 25, 218, 88, 247, 38, 251, 132, 76, 211, 225, - 218, 88, 247, 38, 120, 76, 211, 225, 218, 88, 247, 38, 126, 76, 211, 225, - 218, 88, 247, 38, 239, 147, 76, 211, 225, 218, 88, 247, 38, 239, 233, 76, - 211, 225, 218, 88, 247, 38, 212, 88, 76, 211, 225, 218, 88, 247, 38, 213, - 112, 76, 211, 225, 218, 88, 247, 38, 241, 143, 76, 211, 225, 218, 88, - 247, 38, 222, 64, 76, 211, 225, 218, 88, 247, 38, 209, 153, 76, 211, 225, - 218, 88, 247, 38, 230, 179, 76, 211, 225, 218, 88, 247, 38, 229, 32, 76, - 211, 225, 218, 88, 247, 38, 217, 49, 76, 211, 225, 218, 88, 247, 38, 229, - 82, 76, 211, 225, 218, 88, 247, 38, 251, 132, 76, 237, 53, 218, 88, 247, - 38, 120, 76, 237, 53, 218, 88, 247, 38, 126, 76, 237, 53, 218, 88, 247, - 38, 239, 147, 76, 237, 53, 218, 88, 247, 38, 239, 233, 76, 237, 53, 218, - 88, 247, 38, 212, 88, 76, 237, 53, 218, 88, 247, 38, 213, 112, 76, 237, - 53, 218, 88, 247, 38, 241, 143, 76, 237, 53, 218, 88, 247, 38, 222, 64, - 76, 237, 53, 218, 88, 247, 38, 209, 153, 76, 237, 53, 218, 88, 247, 38, - 230, 179, 76, 237, 53, 218, 88, 247, 38, 229, 32, 76, 237, 53, 218, 88, - 247, 38, 217, 49, 76, 237, 53, 218, 88, 247, 38, 229, 82, 76, 237, 53, - 218, 88, 247, 38, 216, 138, 230, 94, 218, 88, 247, 38, 251, 132, 76, 243, - 220, 218, 88, 247, 38, 120, 76, 243, 220, 218, 88, 247, 38, 126, 76, 243, - 220, 218, 88, 247, 38, 239, 147, 76, 243, 220, 218, 88, 247, 38, 239, - 233, 76, 243, 220, 218, 88, 247, 38, 212, 88, 76, 243, 220, 218, 88, 247, - 38, 213, 112, 76, 243, 220, 218, 88, 247, 38, 241, 143, 76, 243, 220, - 218, 88, 247, 38, 222, 64, 76, 243, 220, 218, 88, 247, 38, 209, 153, 76, - 243, 220, 218, 88, 247, 38, 230, 179, 76, 243, 220, 218, 88, 247, 38, - 229, 32, 76, 243, 220, 218, 88, 247, 38, 217, 49, 76, 243, 220, 218, 88, - 247, 38, 229, 82, 76, 243, 220, 218, 88, 247, 38, 62, 230, 94, 218, 88, - 247, 38, 251, 132, 76, 246, 2, 218, 88, 247, 38, 120, 76, 246, 2, 218, - 88, 247, 38, 126, 76, 246, 2, 218, 88, 247, 38, 239, 147, 76, 246, 2, - 218, 88, 247, 38, 239, 233, 76, 246, 2, 218, 88, 247, 38, 212, 88, 76, - 246, 2, 218, 88, 247, 38, 213, 112, 76, 246, 2, 218, 88, 247, 38, 241, - 143, 76, 246, 2, 218, 88, 247, 38, 222, 64, 76, 246, 2, 218, 88, 247, 38, - 209, 153, 76, 246, 2, 218, 88, 247, 38, 230, 179, 76, 246, 2, 218, 88, - 247, 38, 229, 32, 76, 246, 2, 218, 88, 247, 38, 217, 49, 76, 246, 2, 218, - 88, 247, 38, 229, 82, 76, 246, 2, 218, 88, 247, 38, 61, 230, 94, 218, 88, - 247, 38, 239, 173, 218, 88, 247, 38, 208, 48, 218, 88, 247, 38, 208, 37, - 218, 88, 247, 38, 208, 34, 218, 88, 247, 38, 208, 33, 218, 88, 247, 38, - 208, 32, 218, 88, 247, 38, 208, 31, 218, 88, 247, 38, 208, 30, 218, 88, - 247, 38, 208, 29, 218, 88, 247, 38, 208, 28, 218, 88, 247, 38, 208, 47, - 218, 88, 247, 38, 208, 46, 218, 88, 247, 38, 208, 45, 218, 88, 247, 38, - 208, 44, 218, 88, 247, 38, 208, 43, 218, 88, 247, 38, 208, 42, 218, 88, - 247, 38, 208, 41, 218, 88, 247, 38, 208, 40, 218, 88, 247, 38, 208, 39, - 218, 88, 247, 38, 208, 38, 218, 88, 247, 38, 208, 36, 218, 88, 247, 38, - 208, 35, 17, 202, 85, 239, 102, 211, 61, 17, 202, 85, 245, 233, 17, 118, - 245, 233, 17, 120, 245, 233, 17, 126, 245, 233, 17, 239, 147, 245, 233, - 17, 239, 233, 245, 233, 17, 212, 88, 245, 233, 17, 213, 112, 245, 233, - 17, 241, 143, 245, 233, 17, 222, 64, 245, 233, 243, 174, 43, 41, 17, 202, - 84, 243, 174, 182, 43, 41, 17, 202, 84, 102, 8, 6, 1, 63, 102, 8, 6, 1, - 249, 255, 102, 8, 6, 1, 247, 125, 102, 8, 6, 1, 245, 51, 102, 8, 6, 1, - 74, 102, 8, 6, 1, 240, 174, 102, 8, 6, 1, 239, 75, 102, 8, 6, 1, 237, - 171, 102, 8, 6, 1, 75, 102, 8, 6, 1, 230, 184, 102, 8, 6, 1, 230, 54, - 102, 8, 6, 1, 159, 102, 8, 6, 1, 226, 185, 102, 8, 6, 1, 223, 163, 102, - 8, 6, 1, 78, 102, 8, 6, 1, 219, 184, 102, 8, 6, 1, 217, 134, 102, 8, 6, - 1, 146, 102, 8, 6, 1, 194, 102, 8, 6, 1, 210, 69, 102, 8, 6, 1, 68, 102, - 8, 6, 1, 206, 164, 102, 8, 6, 1, 204, 144, 102, 8, 6, 1, 203, 196, 102, - 8, 6, 1, 203, 124, 102, 8, 6, 1, 202, 159, 208, 133, 213, 33, 247, 226, - 8, 6, 1, 194, 43, 37, 8, 6, 1, 247, 125, 43, 37, 8, 6, 1, 146, 43, 246, - 239, 43, 203, 198, 103, 8, 6, 1, 63, 103, 8, 6, 1, 249, 255, 103, 8, 6, - 1, 247, 125, 103, 8, 6, 1, 245, 51, 103, 8, 6, 1, 74, 103, 8, 6, 1, 240, - 174, 103, 8, 6, 1, 239, 75, 103, 8, 6, 1, 237, 171, 103, 8, 6, 1, 75, - 103, 8, 6, 1, 230, 184, 103, 8, 6, 1, 230, 54, 103, 8, 6, 1, 159, 103, 8, - 6, 1, 226, 185, 103, 8, 6, 1, 223, 163, 103, 8, 6, 1, 78, 103, 8, 6, 1, - 219, 184, 103, 8, 6, 1, 217, 134, 103, 8, 6, 1, 146, 103, 8, 6, 1, 194, - 103, 8, 6, 1, 210, 69, 103, 8, 6, 1, 68, 103, 8, 6, 1, 206, 164, 103, 8, - 6, 1, 204, 144, 103, 8, 6, 1, 203, 196, 103, 8, 6, 1, 203, 124, 103, 8, - 6, 1, 202, 159, 103, 235, 255, 103, 223, 187, 103, 214, 179, 103, 211, - 167, 103, 218, 10, 103, 204, 63, 182, 43, 8, 6, 1, 63, 182, 43, 8, 6, 1, - 249, 255, 182, 43, 8, 6, 1, 247, 125, 182, 43, 8, 6, 1, 245, 51, 182, 43, - 8, 6, 1, 74, 182, 43, 8, 6, 1, 240, 174, 182, 43, 8, 6, 1, 239, 75, 182, - 43, 8, 6, 1, 237, 171, 182, 43, 8, 6, 1, 75, 182, 43, 8, 6, 1, 230, 184, - 182, 43, 8, 6, 1, 230, 54, 182, 43, 8, 6, 1, 159, 182, 43, 8, 6, 1, 226, - 185, 182, 43, 8, 6, 1, 223, 163, 182, 43, 8, 6, 1, 78, 182, 43, 8, 6, 1, - 219, 184, 182, 43, 8, 6, 1, 217, 134, 182, 43, 8, 6, 1, 146, 182, 43, 8, - 6, 1, 194, 182, 43, 8, 6, 1, 210, 69, 182, 43, 8, 6, 1, 68, 182, 43, 8, - 6, 1, 206, 164, 182, 43, 8, 6, 1, 204, 144, 182, 43, 8, 6, 1, 203, 196, - 182, 43, 8, 6, 1, 203, 124, 182, 43, 8, 6, 1, 202, 159, 216, 188, 225, - 26, 54, 216, 188, 225, 23, 54, 182, 103, 8, 6, 1, 63, 182, 103, 8, 6, 1, - 249, 255, 182, 103, 8, 6, 1, 247, 125, 182, 103, 8, 6, 1, 245, 51, 182, - 103, 8, 6, 1, 74, 182, 103, 8, 6, 1, 240, 174, 182, 103, 8, 6, 1, 239, - 75, 182, 103, 8, 6, 1, 237, 171, 182, 103, 8, 6, 1, 75, 182, 103, 8, 6, - 1, 230, 184, 182, 103, 8, 6, 1, 230, 54, 182, 103, 8, 6, 1, 159, 182, - 103, 8, 6, 1, 226, 185, 182, 103, 8, 6, 1, 223, 163, 182, 103, 8, 6, 1, - 78, 182, 103, 8, 6, 1, 219, 184, 182, 103, 8, 6, 1, 217, 134, 182, 103, - 8, 6, 1, 146, 182, 103, 8, 6, 1, 194, 182, 103, 8, 6, 1, 210, 69, 182, - 103, 8, 6, 1, 68, 182, 103, 8, 6, 1, 206, 164, 182, 103, 8, 6, 1, 204, - 144, 182, 103, 8, 6, 1, 203, 196, 182, 103, 8, 6, 1, 203, 124, 182, 103, - 8, 6, 1, 202, 159, 245, 128, 182, 103, 8, 6, 1, 219, 184, 182, 103, 235, - 164, 182, 103, 185, 182, 103, 215, 36, 182, 103, 251, 232, 182, 103, 204, - 63, 51, 243, 132, 103, 246, 42, 103, 245, 176, 103, 239, 129, 103, 235, - 155, 103, 222, 213, 103, 222, 205, 103, 220, 51, 103, 211, 245, 103, 112, - 3, 240, 212, 82, 103, 205, 166, 216, 130, 231, 32, 16, 1, 63, 216, 130, - 231, 32, 16, 1, 249, 255, 216, 130, 231, 32, 16, 1, 247, 125, 216, 130, - 231, 32, 16, 1, 245, 51, 216, 130, 231, 32, 16, 1, 74, 216, 130, 231, 32, - 16, 1, 240, 174, 216, 130, 231, 32, 16, 1, 239, 75, 216, 130, 231, 32, - 16, 1, 237, 171, 216, 130, 231, 32, 16, 1, 75, 216, 130, 231, 32, 16, 1, - 230, 184, 216, 130, 231, 32, 16, 1, 230, 54, 216, 130, 231, 32, 16, 1, - 159, 216, 130, 231, 32, 16, 1, 226, 185, 216, 130, 231, 32, 16, 1, 223, - 163, 216, 130, 231, 32, 16, 1, 78, 216, 130, 231, 32, 16, 1, 219, 184, - 216, 130, 231, 32, 16, 1, 217, 134, 216, 130, 231, 32, 16, 1, 146, 216, - 130, 231, 32, 16, 1, 194, 216, 130, 231, 32, 16, 1, 210, 69, 216, 130, - 231, 32, 16, 1, 68, 216, 130, 231, 32, 16, 1, 206, 164, 216, 130, 231, - 32, 16, 1, 204, 144, 216, 130, 231, 32, 16, 1, 203, 196, 216, 130, 231, - 32, 16, 1, 203, 124, 216, 130, 231, 32, 16, 1, 202, 159, 51, 172, 236, - 130, 103, 67, 229, 14, 103, 67, 215, 36, 103, 12, 206, 239, 233, 100, - 103, 12, 206, 239, 233, 104, 103, 12, 206, 239, 233, 112, 103, 67, 244, - 75, 103, 12, 206, 239, 233, 119, 103, 12, 206, 239, 233, 106, 103, 12, - 206, 239, 233, 78, 103, 12, 206, 239, 233, 105, 103, 12, 206, 239, 233, - 118, 103, 12, 206, 239, 233, 92, 103, 12, 206, 239, 233, 85, 103, 12, - 206, 239, 233, 94, 103, 12, 206, 239, 233, 115, 103, 12, 206, 239, 233, - 101, 103, 12, 206, 239, 233, 117, 103, 12, 206, 239, 233, 93, 103, 12, - 206, 239, 233, 116, 103, 12, 206, 239, 233, 79, 103, 12, 206, 239, 233, - 84, 103, 12, 206, 239, 233, 77, 103, 12, 206, 239, 233, 107, 103, 12, - 206, 239, 233, 109, 103, 12, 206, 239, 233, 87, 103, 12, 206, 239, 233, - 98, 103, 12, 206, 239, 233, 96, 103, 12, 206, 239, 233, 122, 103, 12, - 206, 239, 233, 121, 103, 12, 206, 239, 233, 75, 103, 12, 206, 239, 233, - 102, 103, 12, 206, 239, 233, 120, 103, 12, 206, 239, 233, 111, 103, 12, - 206, 239, 233, 97, 103, 12, 206, 239, 233, 76, 103, 12, 206, 239, 233, - 99, 103, 12, 206, 239, 233, 81, 103, 12, 206, 239, 233, 80, 103, 12, 206, - 239, 233, 110, 103, 12, 206, 239, 233, 88, 103, 12, 206, 239, 233, 90, - 103, 12, 206, 239, 233, 91, 103, 12, 206, 239, 233, 83, 103, 12, 206, - 239, 233, 114, 103, 12, 206, 239, 233, 108, 208, 133, 213, 33, 247, 226, - 12, 206, 239, 233, 89, 208, 133, 213, 33, 247, 226, 12, 206, 239, 233, - 121, 208, 133, 213, 33, 247, 226, 12, 206, 239, 233, 119, 208, 133, 213, - 33, 247, 226, 12, 206, 239, 233, 103, 208, 133, 213, 33, 247, 226, 12, - 206, 239, 233, 86, 208, 133, 213, 33, 247, 226, 12, 206, 239, 233, 99, - 208, 133, 213, 33, 247, 226, 12, 206, 239, 233, 82, 208, 133, 213, 33, - 247, 226, 12, 206, 239, 233, 113, 208, 133, 213, 33, 247, 226, 12, 206, - 239, 233, 95, 43, 189, 251, 111, 43, 189, 251, 136, 245, 62, 239, 184, - 246, 16, 207, 3, 222, 80, 3, 211, 91, 210, 209, 115, 224, 11, 210, 208, - 246, 46, 250, 50, 242, 17, 210, 207, 115, 247, 182, 216, 189, 247, 208, - 250, 50, 222, 79, 204, 81, 204, 75, 205, 181, 224, 118, 204, 65, 241, - 180, 238, 46, 240, 228, 241, 180, 238, 46, 250, 238, 241, 180, 238, 46, - 250, 68, 238, 46, 3, 224, 231, 222, 214, 224, 30, 97, 204, 67, 245, 139, - 224, 30, 97, 239, 245, 217, 56, 224, 30, 97, 204, 67, 238, 77, 224, 30, - 97, 239, 102, 224, 30, 97, 204, 94, 238, 77, 224, 30, 97, 228, 1, 217, - 56, 224, 30, 97, 204, 94, 245, 139, 224, 30, 97, 245, 139, 224, 29, 222, - 214, 224, 30, 3, 240, 102, 239, 245, 217, 56, 224, 30, 3, 240, 102, 228, - 1, 217, 56, 224, 30, 3, 240, 102, 239, 102, 224, 30, 3, 240, 102, 210, - 215, 3, 240, 102, 238, 44, 211, 94, 212, 233, 211, 94, 209, 80, 62, 242, - 49, 61, 210, 214, 61, 210, 215, 3, 5, 246, 7, 61, 210, 215, 248, 135, - 246, 7, 61, 210, 215, 248, 135, 246, 8, 3, 216, 190, 246, 8, 3, 216, 190, - 246, 8, 3, 212, 19, 246, 8, 3, 227, 131, 246, 8, 3, 208, 137, 239, 185, - 204, 17, 248, 27, 240, 102, 236, 47, 243, 102, 210, 2, 247, 158, 246, - 148, 214, 163, 240, 222, 208, 95, 244, 69, 208, 95, 219, 135, 208, 95, - 247, 85, 236, 47, 218, 248, 207, 193, 246, 152, 248, 30, 215, 202, 237, - 2, 210, 212, 248, 30, 241, 184, 76, 225, 131, 241, 184, 76, 216, 52, 237, - 28, 239, 147, 227, 230, 246, 6, 225, 104, 227, 229, 240, 85, 227, 229, - 227, 230, 239, 192, 231, 50, 204, 16, 223, 196, 208, 165, 250, 33, 238, - 5, 224, 249, 204, 79, 209, 225, 227, 199, 248, 239, 218, 120, 216, 138, - 250, 157, 237, 244, 250, 157, 219, 29, 219, 31, 246, 153, 211, 45, 237, - 132, 212, 51, 76, 218, 100, 225, 16, 220, 32, 248, 11, 218, 21, 227, 210, - 216, 53, 245, 145, 216, 53, 248, 251, 245, 179, 216, 52, 245, 89, 25, - 216, 52, 211, 79, 247, 237, 211, 224, 247, 219, 239, 128, 239, 124, 215, - 223, 210, 165, 218, 23, 244, 163, 220, 75, 210, 183, 239, 125, 212, 204, - 239, 244, 247, 79, 3, 210, 158, 244, 13, 212, 7, 235, 163, 245, 143, 213, - 51, 235, 162, 235, 163, 245, 143, 242, 73, 245, 178, 246, 114, 142, 247, - 51, 227, 32, 245, 81, 236, 119, 218, 25, 212, 217, 248, 116, 247, 233, - 218, 26, 76, 239, 174, 245, 177, 239, 163, 25, 229, 33, 209, 184, 204, 3, - 237, 102, 215, 13, 247, 250, 25, 245, 99, 204, 13, 238, 49, 245, 251, - 238, 49, 208, 51, 242, 54, 248, 146, 223, 235, 246, 23, 248, 146, 223, - 234, 249, 28, 247, 249, 239, 163, 25, 229, 34, 3, 218, 89, 247, 250, 3, - 218, 38, 245, 167, 218, 40, 216, 54, 203, 227, 217, 242, 248, 58, 247, - 78, 230, 178, 246, 106, 208, 95, 240, 68, 246, 105, 239, 247, 239, 248, - 211, 222, 248, 250, 219, 66, 218, 39, 245, 215, 248, 251, 209, 229, 208, - 95, 245, 128, 239, 219, 218, 121, 244, 66, 230, 169, 243, 96, 247, 27, - 211, 44, 204, 17, 246, 130, 224, 30, 205, 217, 246, 204, 214, 196, 214, - 223, 238, 11, 247, 48, 237, 56, 3, 208, 211, 220, 32, 209, 93, 227, 222, - 247, 243, 76, 239, 196, 224, 119, 225, 13, 216, 110, 216, 54, 31, 229, - 150, 3, 230, 177, 211, 15, 224, 152, 227, 167, 212, 49, 245, 184, 229, - 30, 248, 158, 250, 78, 31, 221, 155, 248, 158, 244, 19, 31, 221, 155, - 240, 6, 239, 133, 251, 114, 208, 252, 247, 28, 236, 49, 240, 35, 204, 36, - 215, 213, 245, 252, 239, 239, 218, 54, 25, 239, 243, 224, 152, 223, 253, - 247, 65, 246, 65, 237, 60, 250, 85, 219, 138, 208, 145, 237, 83, 246, 51, - 209, 144, 208, 253, 246, 37, 248, 20, 218, 241, 250, 84, 205, 226, 238, - 238, 243, 167, 236, 230, 212, 42, 225, 172, 248, 69, 238, 239, 243, 213, - 247, 236, 239, 198, 218, 88, 247, 36, 31, 221, 160, 223, 226, 31, 221, - 155, 214, 209, 237, 214, 31, 229, 149, 208, 27, 205, 206, 31, 214, 189, - 215, 126, 212, 246, 3, 214, 226, 209, 149, 216, 209, 25, 248, 251, 212, - 67, 25, 212, 67, 248, 4, 248, 213, 25, 236, 112, 246, 154, 239, 225, 212, - 18, 215, 127, 210, 188, 211, 189, 225, 13, 208, 52, 236, 50, 216, 210, - 250, 239, 239, 171, 215, 139, 239, 171, 210, 160, 204, 51, 227, 136, 238, - 30, 216, 211, 224, 18, 216, 211, 247, 39, 245, 136, 248, 210, 25, 248, - 251, 205, 180, 240, 25, 236, 133, 211, 73, 25, 248, 251, 235, 163, 236, - 133, 211, 73, 25, 217, 184, 210, 9, 209, 149, 219, 156, 25, 248, 251, - 212, 20, 247, 44, 224, 12, 247, 63, 248, 161, 3, 207, 3, 247, 184, 245, - 198, 236, 39, 247, 182, 246, 45, 244, 23, 236, 39, 247, 183, 246, 35, - 247, 183, 244, 15, 244, 16, 230, 208, 223, 67, 219, 72, 211, 104, 236, - 39, 247, 183, 236, 39, 3, 238, 222, 220, 67, 247, 183, 230, 169, 218, 31, - 220, 66, 240, 227, 218, 31, 220, 66, 236, 48, 248, 235, 250, 23, 209, - 157, 225, 172, 236, 44, 227, 1, 236, 44, 245, 182, 211, 57, 214, 195, - 244, 26, 211, 57, 240, 91, 230, 189, 228, 13, 230, 169, 247, 19, 240, - 227, 247, 19, 61, 219, 3, 62, 219, 3, 204, 73, 61, 239, 225, 204, 73, 62, - 239, 225, 215, 201, 62, 215, 201, 228, 105, 249, 12, 216, 209, 25, 212, - 183, 247, 241, 25, 47, 250, 234, 241, 98, 65, 239, 234, 207, 119, 241, - 98, 65, 239, 234, 207, 116, 241, 98, 65, 239, 234, 207, 114, 241, 98, 65, - 239, 234, 207, 112, 241, 98, 65, 239, 234, 207, 110, 216, 172, 224, 9, - 219, 193, 204, 81, 247, 188, 245, 149, 208, 245, 227, 183, 216, 212, 247, - 17, 242, 61, 245, 135, 204, 39, 212, 26, 212, 24, 236, 49, 216, 184, 238, - 35, 213, 37, 224, 48, 215, 205, 246, 140, 243, 102, 218, 131, 248, 21, - 241, 114, 220, 78, 211, 202, 213, 32, 247, 187, 250, 198, 236, 118, 228, - 98, 248, 144, 239, 243, 208, 51, 239, 243, 248, 28, 207, 171, 237, 81, - 246, 141, 249, 28, 246, 141, 239, 118, 249, 28, 246, 141, 248, 60, 219, - 5, 229, 24, 218, 44, 242, 51, 247, 67, 249, 17, 247, 67, 243, 95, 224, - 10, 240, 102, 245, 150, 240, 102, 208, 246, 240, 102, 216, 213, 240, 102, - 247, 18, 240, 102, 242, 62, 240, 102, 211, 187, 204, 39, 236, 50, 240, - 102, 224, 49, 240, 102, 243, 103, 240, 102, 218, 132, 240, 102, 239, 122, - 240, 102, 237, 129, 240, 102, 203, 253, 240, 102, 248, 156, 240, 102, - 219, 120, 240, 102, 218, 132, 221, 167, 219, 46, 217, 230, 246, 125, 240, - 184, 240, 191, 241, 183, 221, 167, 224, 7, 208, 150, 61, 112, 218, 59, - 249, 23, 231, 35, 61, 121, 218, 59, 249, 23, 231, 35, 61, 49, 218, 59, - 249, 23, 231, 35, 61, 50, 218, 59, 249, 23, 231, 35, 239, 237, 237, 124, - 54, 204, 73, 237, 124, 54, 220, 52, 237, 124, 54, 209, 20, 112, 54, 209, - 20, 121, 54, 246, 36, 237, 100, 54, 171, 237, 100, 54, 245, 122, 203, - 249, 237, 83, 240, 187, 222, 236, 210, 68, 230, 160, 242, 56, 229, 85, - 248, 71, 203, 249, 246, 9, 217, 165, 237, 103, 218, 22, 225, 112, 212, - 239, 250, 46, 212, 239, 236, 243, 212, 239, 203, 249, 214, 240, 203, 249, - 248, 3, 239, 169, 247, 150, 231, 50, 212, 136, 247, 149, 231, 50, 212, - 136, 247, 232, 238, 60, 225, 122, 203, 250, 240, 82, 225, 123, 25, 203, - 251, 236, 127, 237, 99, 120, 224, 241, 236, 127, 237, 99, 120, 203, 248, - 236, 127, 237, 99, 218, 51, 220, 65, 203, 251, 3, 247, 168, 241, 181, - 247, 209, 3, 206, 46, 218, 230, 3, 248, 32, 237, 145, 225, 123, 3, 237, - 227, 218, 168, 225, 108, 225, 123, 3, 207, 180, 220, 44, 225, 122, 220, - 44, 203, 250, 249, 27, 245, 199, 203, 234, 217, 235, 230, 169, 220, 61, - 230, 169, 238, 34, 238, 89, 249, 28, 250, 221, 240, 196, 251, 20, 251, - 21, 224, 39, 231, 55, 212, 62, 231, 25, 244, 12, 218, 229, 237, 221, 244, - 167, 227, 97, 223, 91, 218, 50, 240, 103, 225, 74, 237, 144, 248, 229, - 218, 53, 210, 88, 218, 124, 229, 67, 82, 227, 1, 227, 174, 215, 252, 238, - 180, 211, 63, 229, 66, 247, 242, 245, 152, 3, 237, 55, 204, 58, 248, 154, - 237, 55, 247, 203, 237, 55, 120, 237, 53, 211, 220, 237, 55, 237, 237, - 237, 55, 237, 56, 3, 47, 248, 26, 237, 55, 237, 244, 237, 55, 203, 45, - 237, 55, 217, 166, 237, 55, 237, 56, 3, 216, 54, 216, 67, 237, 53, 237, - 56, 244, 66, 243, 222, 213, 63, 3, 34, 70, 231, 6, 241, 117, 157, 247, - 180, 250, 220, 97, 248, 12, 212, 54, 97, 245, 244, 97, 211, 196, 210, - 167, 97, 242, 49, 244, 145, 97, 218, 125, 76, 218, 45, 239, 210, 248, 83, - 243, 133, 97, 211, 212, 248, 250, 209, 38, 248, 250, 61, 239, 197, 236, - 12, 218, 57, 97, 224, 53, 249, 10, 245, 92, 240, 214, 79, 243, 97, 54, - 245, 141, 247, 37, 248, 234, 3, 203, 43, 54, 248, 234, 3, 243, 97, 54, - 248, 234, 3, 240, 230, 54, 248, 234, 3, 218, 20, 54, 224, 53, 3, 204, 11, - 246, 178, 3, 177, 208, 91, 25, 203, 43, 54, 214, 174, 218, 228, 245, 220, - 247, 207, 224, 108, 239, 202, 243, 154, 219, 248, 243, 159, 242, 12, 240, - 11, 239, 182, 171, 240, 11, 239, 182, 219, 154, 3, 245, 95, 219, 154, - 240, 95, 206, 224, 247, 72, 209, 183, 247, 72, 247, 38, 231, 35, 246, - 178, 3, 177, 208, 90, 246, 178, 3, 183, 208, 90, 248, 231, 246, 177, 246, - 22, 217, 161, 215, 191, 217, 161, 219, 94, 211, 53, 215, 133, 208, 82, - 215, 133, 248, 8, 210, 7, 227, 227, 221, 158, 221, 159, 3, 244, 65, 245, - 151, 246, 16, 248, 9, 171, 248, 9, 237, 244, 248, 9, 248, 26, 248, 9, - 219, 243, 248, 9, 248, 6, 223, 85, 249, 14, 214, 182, 224, 242, 209, 162, - 216, 152, 219, 152, 240, 65, 225, 172, 214, 222, 250, 195, 217, 185, 251, - 119, 227, 3, 246, 162, 224, 254, 219, 210, 208, 98, 231, 46, 208, 98, - 219, 161, 241, 236, 97, 231, 43, 241, 57, 241, 58, 3, 183, 53, 55, 246, - 16, 225, 137, 3, 226, 249, 239, 225, 246, 16, 225, 137, 3, 216, 188, 239, - 225, 171, 225, 137, 3, 216, 188, 239, 225, 171, 225, 137, 3, 226, 249, - 239, 225, 218, 28, 218, 29, 236, 53, 222, 210, 224, 80, 218, 176, 224, - 80, 218, 177, 3, 86, 53, 250, 50, 227, 222, 205, 229, 224, 79, 224, 80, - 218, 177, 220, 68, 221, 192, 224, 80, 218, 175, 250, 196, 3, 248, 220, - 247, 65, 247, 66, 3, 239, 218, 205, 226, 247, 65, 209, 159, 216, 204, - 205, 225, 240, 6, 217, 217, 218, 35, 211, 74, 217, 254, 248, 160, 207, - 138, 86, 250, 91, 246, 18, 86, 25, 96, 171, 246, 62, 250, 91, 246, 18, - 86, 25, 96, 171, 246, 62, 250, 92, 3, 43, 118, 219, 199, 246, 18, 183, - 25, 177, 171, 246, 62, 250, 91, 250, 194, 183, 25, 177, 171, 246, 62, - 250, 91, 124, 247, 206, 97, 138, 247, 206, 97, 211, 217, 3, 247, 58, 95, - 211, 216, 211, 217, 3, 118, 211, 241, 204, 75, 211, 217, 3, 126, 211, - 241, 204, 74, 248, 203, 241, 117, 218, 81, 227, 217, 225, 149, 238, 49, - 216, 11, 225, 149, 238, 49, 227, 43, 3, 231, 17, 219, 9, 246, 16, 227, - 43, 3, 229, 151, 229, 151, 227, 42, 171, 227, 42, 248, 128, 248, 129, 3, - 247, 58, 95, 248, 7, 227, 105, 97, 216, 205, 247, 145, 249, 26, 3, 96, - 53, 55, 241, 84, 3, 96, 53, 55, 220, 32, 3, 240, 212, 131, 3, 49, 50, 53, - 55, 211, 249, 3, 86, 53, 55, 208, 145, 3, 177, 53, 55, 221, 192, 118, - 206, 248, 241, 141, 97, 229, 148, 209, 152, 231, 11, 16, 35, 8, 6, 227, - 173, 231, 11, 16, 35, 8, 5, 227, 173, 231, 11, 16, 35, 221, 45, 231, 11, - 16, 35, 210, 102, 231, 11, 16, 35, 8, 227, 173, 239, 249, 241, 117, 208, - 140, 203, 225, 237, 130, 221, 28, 25, 248, 14, 236, 134, 218, 106, 224, - 151, 209, 160, 245, 112, 248, 251, 212, 88, 218, 61, 211, 95, 3, 101, - 243, 85, 230, 169, 16, 35, 248, 141, 208, 80, 241, 100, 62, 51, 247, 145, - 61, 51, 247, 145, 228, 8, 216, 138, 246, 61, 228, 8, 248, 26, 246, 61, - 228, 8, 219, 243, 243, 221, 228, 8, 248, 26, 243, 221, 5, 219, 243, 243, - 221, 5, 248, 26, 243, 221, 206, 223, 216, 138, 208, 85, 242, 69, 216, - 138, 208, 85, 206, 223, 5, 216, 138, 208, 85, 242, 69, 5, 216, 138, 208, - 85, 226, 251, 50, 213, 77, 61, 246, 61, 206, 221, 50, 213, 77, 61, 246, - 61, 43, 245, 131, 218, 48, 245, 131, 218, 49, 3, 237, 136, 56, 245, 131, - 218, 48, 221, 162, 49, 213, 146, 3, 126, 243, 83, 221, 162, 50, 213, 146, - 3, 126, 243, 83, 16, 35, 225, 87, 246, 184, 61, 8, 245, 130, 79, 8, 245, - 130, 246, 222, 245, 130, 220, 40, 97, 242, 72, 76, 219, 32, 230, 39, 224, - 22, 210, 96, 224, 237, 3, 222, 64, 247, 222, 247, 238, 76, 235, 222, 246, - 20, 240, 103, 118, 220, 83, 246, 20, 240, 103, 120, 220, 83, 246, 20, - 240, 103, 126, 220, 83, 246, 20, 240, 103, 239, 147, 220, 83, 246, 20, - 240, 103, 239, 233, 220, 83, 246, 20, 240, 103, 212, 88, 220, 83, 246, - 20, 240, 103, 213, 112, 220, 83, 246, 20, 240, 103, 241, 143, 220, 83, - 246, 20, 240, 103, 222, 64, 220, 83, 246, 20, 240, 103, 209, 153, 220, - 83, 246, 20, 240, 103, 241, 113, 220, 83, 246, 20, 240, 103, 207, 155, - 220, 83, 246, 20, 240, 103, 220, 27, 246, 20, 240, 103, 207, 132, 246, - 20, 240, 103, 209, 26, 246, 20, 240, 103, 239, 143, 246, 20, 240, 103, - 239, 231, 246, 20, 240, 103, 212, 84, 246, 20, 240, 103, 213, 110, 246, - 20, 240, 103, 241, 142, 246, 20, 240, 103, 222, 62, 246, 20, 240, 103, - 209, 151, 246, 20, 240, 103, 241, 111, 246, 20, 240, 103, 207, 153, 50, - 211, 216, 50, 211, 217, 3, 118, 211, 241, 204, 75, 50, 211, 217, 3, 126, - 211, 241, 204, 74, 247, 175, 247, 176, 3, 211, 241, 204, 74, 215, 251, - 248, 128, 248, 9, 247, 56, 225, 109, 246, 19, 62, 212, 63, 25, 245, 129, - 221, 192, 218, 112, 236, 126, 225, 123, 231, 50, 247, 152, 210, 228, 227, - 166, 212, 52, 219, 245, 211, 178, 244, 150, 210, 210, 211, 205, 211, 206, - 204, 59, 230, 83, 49, 237, 124, 209, 162, 216, 152, 209, 162, 216, 153, - 3, 219, 153, 50, 237, 124, 209, 162, 216, 152, 61, 208, 126, 209, 161, - 62, 208, 126, 209, 161, 209, 162, 220, 32, 208, 145, 76, 224, 76, 246, - 40, 224, 80, 218, 176, 249, 26, 76, 241, 57, 211, 100, 241, 57, 241, 58, - 3, 227, 131, 239, 189, 241, 57, 219, 10, 115, 211, 100, 241, 57, 227, - 104, 219, 93, 62, 217, 161, 226, 251, 49, 219, 8, 226, 251, 49, 248, 246, - 219, 9, 226, 251, 49, 239, 149, 219, 9, 226, 251, 49, 219, 147, 226, 251, - 49, 245, 144, 49, 203, 220, 237, 123, 207, 174, 220, 52, 237, 124, 54, - 216, 188, 237, 124, 3, 239, 254, 211, 195, 216, 73, 216, 188, 237, 124, - 3, 239, 254, 211, 195, 216, 73, 209, 20, 112, 54, 216, 73, 209, 20, 121, - 54, 216, 73, 205, 228, 237, 123, 216, 73, 237, 124, 3, 101, 240, 3, 240, - 201, 216, 188, 237, 124, 3, 219, 71, 248, 104, 101, 25, 215, 253, 239, - 253, 61, 121, 218, 59, 49, 237, 124, 231, 35, 212, 154, 61, 49, 218, 59, - 231, 35, 212, 154, 61, 50, 218, 59, 231, 35, 212, 154, 62, 49, 218, 59, - 231, 35, 212, 154, 62, 50, 218, 59, 231, 35, 62, 49, 218, 59, 249, 23, - 231, 35, 62, 50, 218, 59, 249, 23, 231, 35, 212, 154, 61, 112, 218, 59, - 231, 35, 212, 154, 61, 121, 218, 59, 231, 35, 212, 154, 62, 112, 218, 59, - 231, 35, 212, 154, 62, 121, 218, 59, 231, 35, 62, 112, 218, 59, 249, 23, - 231, 35, 62, 121, 218, 59, 249, 23, 231, 35, 244, 11, 245, 220, 229, 150, - 25, 224, 9, 126, 222, 218, 245, 219, 217, 231, 218, 67, 247, 74, 62, 237, - 91, 213, 33, 239, 202, 243, 154, 61, 237, 91, 213, 33, 239, 202, 243, - 154, 212, 7, 213, 33, 239, 202, 243, 154, 209, 221, 247, 22, 204, 6, 229, - 149, 118, 247, 146, 224, 9, 120, 247, 146, 224, 9, 126, 247, 146, 224, 9, - 208, 117, 38, 218, 228, 245, 220, 237, 91, 243, 154, 214, 184, 217, 232, - 235, 156, 240, 65, 235, 156, 219, 248, 243, 160, 235, 156, 243, 107, 3, - 209, 112, 243, 107, 3, 209, 113, 25, 218, 161, 243, 107, 3, 218, 161, - 239, 135, 3, 218, 161, 239, 135, 3, 208, 225, 239, 135, 3, 250, 232, 203, - 196, 62, 239, 182, 239, 182, 171, 239, 182, 247, 38, 122, 243, 140, 247, - 38, 240, 11, 247, 233, 240, 11, 247, 87, 241, 94, 221, 160, 241, 94, 221, - 161, 219, 153, 241, 94, 221, 161, 219, 159, 221, 160, 221, 161, 219, 153, - 221, 161, 219, 159, 241, 94, 243, 106, 241, 94, 219, 153, 241, 94, 219, - 151, 243, 106, 219, 153, 219, 151, 204, 85, 211, 202, 221, 161, 219, 159, - 211, 202, 247, 73, 219, 159, 244, 11, 204, 15, 224, 105, 225, 64, 219, - 201, 246, 18, 50, 25, 49, 213, 146, 250, 91, 247, 58, 203, 196, 231, 41, - 239, 176, 212, 72, 97, 244, 64, 239, 176, 212, 72, 97, 245, 221, 38, 229, - 151, 215, 214, 222, 210, 219, 154, 3, 43, 209, 112, 211, 65, 246, 177, - 244, 196, 229, 33, 227, 98, 211, 215, 237, 65, 231, 50, 212, 136, 126, - 216, 163, 55, 126, 216, 163, 56, 126, 216, 163, 227, 222, 126, 216, 163, - 216, 16, 49, 211, 212, 247, 192, 50, 211, 212, 247, 192, 120, 211, 212, - 247, 191, 126, 211, 212, 247, 191, 49, 209, 38, 247, 192, 50, 209, 38, - 247, 192, 49, 250, 220, 247, 192, 50, 250, 220, 247, 192, 224, 34, 247, - 192, 227, 132, 224, 34, 247, 192, 227, 132, 224, 33, 248, 248, 98, 3, - 248, 247, 248, 248, 132, 203, 196, 248, 248, 98, 3, 132, 203, 196, 248, - 248, 26, 132, 203, 196, 248, 248, 98, 3, 26, 132, 203, 196, 157, 246, - 169, 82, 248, 248, 98, 3, 26, 246, 168, 203, 233, 225, 106, 224, 14, 239, - 103, 208, 167, 208, 122, 211, 86, 76, 227, 146, 212, 137, 76, 230, 170, - 223, 251, 237, 241, 240, 102, 237, 241, 240, 103, 3, 212, 30, 240, 184, - 240, 103, 3, 209, 179, 76, 230, 85, 212, 30, 240, 103, 3, 171, 224, 7, - 212, 30, 240, 103, 3, 171, 224, 8, 25, 212, 30, 240, 184, 212, 30, 240, - 103, 3, 171, 224, 8, 25, 245, 246, 210, 166, 212, 30, 240, 103, 3, 171, - 224, 8, 25, 208, 243, 240, 184, 212, 30, 240, 103, 3, 237, 135, 212, 30, - 240, 103, 3, 236, 52, 204, 8, 240, 102, 212, 30, 240, 103, 3, 212, 30, - 240, 184, 240, 103, 214, 214, 244, 45, 239, 174, 216, 113, 240, 102, 212, - 30, 240, 103, 3, 237, 54, 240, 184, 212, 30, 240, 103, 3, 210, 210, 212, - 29, 240, 102, 222, 216, 240, 102, 240, 203, 240, 102, 206, 253, 240, 102, - 240, 103, 3, 245, 246, 210, 166, 219, 1, 240, 102, 245, 212, 240, 102, - 245, 213, 240, 102, 229, 65, 240, 102, 240, 103, 209, 23, 34, 229, 66, - 229, 65, 240, 103, 3, 212, 30, 240, 184, 229, 65, 240, 103, 3, 246, 16, - 240, 184, 240, 103, 3, 211, 16, 208, 150, 240, 103, 3, 211, 16, 208, 151, - 25, 204, 8, 240, 191, 240, 103, 3, 211, 16, 208, 151, 25, 208, 243, 240, - 184, 243, 161, 240, 102, 203, 232, 240, 102, 250, 214, 240, 102, 218, 19, - 240, 102, 245, 114, 240, 102, 218, 232, 240, 102, 240, 103, 3, 227, 17, - 76, 208, 62, 243, 161, 247, 148, 216, 113, 240, 102, 239, 114, 240, 103, - 3, 171, 224, 7, 250, 212, 240, 102, 240, 58, 240, 102, 204, 60, 240, 102, - 212, 53, 240, 102, 208, 205, 240, 102, 237, 242, 240, 102, 227, 4, 245, - 114, 240, 102, 240, 103, 3, 171, 224, 7, 236, 2, 240, 102, 240, 103, 3, - 171, 224, 8, 25, 245, 246, 210, 166, 240, 103, 214, 186, 231, 50, 240, - 59, 250, 56, 240, 102, 239, 194, 240, 102, 212, 54, 240, 102, 243, 133, - 240, 102, 240, 103, 204, 3, 224, 7, 240, 103, 3, 225, 12, 225, 76, 237, - 241, 247, 18, 240, 103, 3, 212, 30, 240, 184, 247, 18, 240, 103, 3, 209, - 179, 76, 230, 85, 212, 30, 247, 18, 240, 103, 3, 171, 224, 7, 212, 30, - 247, 18, 240, 103, 3, 237, 54, 240, 184, 247, 18, 240, 103, 3, 203, 218, - 212, 31, 229, 65, 247, 18, 240, 103, 3, 246, 16, 240, 184, 218, 19, 247, - 18, 240, 102, 245, 114, 247, 18, 240, 102, 204, 60, 247, 18, 240, 102, - 212, 47, 239, 114, 240, 102, 212, 47, 212, 30, 240, 102, 206, 218, 240, - 102, 240, 103, 3, 215, 212, 240, 184, 240, 103, 3, 221, 192, 238, 27, - 238, 160, 240, 103, 3, 220, 52, 238, 160, 218, 230, 247, 239, 244, 59, - 214, 164, 224, 48, 237, 57, 224, 48, 211, 218, 224, 48, 237, 93, 218, - 230, 216, 187, 118, 237, 123, 218, 230, 216, 187, 247, 251, 237, 100, - 231, 50, 246, 224, 218, 230, 239, 113, 218, 230, 3, 218, 19, 240, 102, - 218, 230, 3, 239, 183, 237, 99, 153, 204, 46, 218, 59, 227, 229, 211, - 238, 204, 46, 218, 59, 227, 229, 153, 241, 176, 218, 59, 227, 229, 211, - 238, 241, 176, 218, 59, 227, 229, 207, 174, 153, 204, 46, 218, 59, 227, - 229, 207, 174, 211, 238, 204, 46, 218, 59, 227, 229, 207, 174, 153, 241, - 176, 218, 59, 227, 229, 207, 174, 211, 238, 241, 176, 218, 59, 227, 229, - 153, 204, 46, 218, 59, 205, 212, 227, 229, 211, 238, 204, 46, 218, 59, - 205, 212, 227, 229, 153, 241, 176, 218, 59, 205, 212, 227, 229, 211, 238, - 241, 176, 218, 59, 205, 212, 227, 229, 79, 153, 204, 46, 218, 59, 205, - 212, 227, 229, 79, 211, 238, 204, 46, 218, 59, 205, 212, 227, 229, 79, - 153, 241, 176, 218, 59, 205, 212, 227, 229, 79, 211, 238, 241, 176, 218, - 59, 205, 212, 227, 229, 153, 204, 46, 218, 59, 247, 189, 211, 238, 204, - 46, 218, 59, 247, 189, 153, 241, 176, 218, 59, 247, 189, 211, 238, 241, - 176, 218, 59, 247, 189, 79, 153, 204, 46, 218, 59, 247, 189, 79, 211, - 238, 204, 46, 218, 59, 247, 189, 79, 153, 241, 176, 218, 59, 247, 189, - 79, 211, 238, 241, 176, 218, 59, 247, 189, 236, 125, 217, 40, 51, 219, - 233, 236, 125, 217, 40, 51, 219, 234, 231, 50, 62, 211, 177, 212, 2, 217, - 40, 51, 219, 233, 212, 2, 217, 40, 51, 219, 234, 231, 50, 62, 211, 177, - 96, 215, 218, 177, 215, 218, 86, 215, 218, 183, 215, 218, 132, 32, 240, - 251, 219, 233, 79, 132, 32, 240, 251, 219, 233, 32, 171, 240, 251, 219, - 233, 79, 32, 171, 240, 251, 219, 233, 79, 250, 236, 219, 233, 210, 169, - 250, 236, 219, 233, 41, 79, 52, 207, 174, 245, 234, 217, 31, 131, 219, - 233, 41, 79, 52, 245, 234, 217, 31, 131, 219, 233, 41, 79, 124, 52, 245, - 234, 217, 31, 131, 219, 233, 79, 230, 248, 219, 233, 41, 230, 248, 219, - 233, 79, 41, 230, 248, 219, 233, 205, 242, 79, 212, 0, 205, 242, 79, 216, - 74, 212, 0, 246, 167, 248, 20, 216, 74, 246, 167, 248, 20, 215, 218, 237, - 38, 211, 81, 227, 40, 216, 193, 247, 39, 236, 240, 208, 110, 236, 240, - 208, 111, 3, 247, 178, 221, 167, 208, 110, 224, 213, 157, 216, 194, 211, - 87, 208, 108, 208, 109, 247, 39, 247, 153, 220, 29, 247, 153, 208, 59, - 247, 154, 211, 61, 224, 109, 250, 240, 239, 250, 241, 77, 218, 51, 247, - 39, 220, 29, 218, 51, 247, 39, 209, 197, 220, 29, 209, 197, 250, 22, 220, - 29, 250, 22, 216, 145, 206, 47, 244, 41, 208, 50, 250, 86, 227, 8, 208, - 116, 224, 42, 224, 13, 216, 192, 210, 182, 216, 192, 224, 13, 247, 86, - 251, 95, 208, 107, 212, 251, 215, 188, 211, 210, 236, 106, 208, 114, 227, - 134, 80, 208, 114, 227, 134, 245, 199, 54, 218, 51, 247, 24, 216, 67, - 227, 134, 208, 82, 239, 226, 220, 32, 218, 30, 243, 88, 221, 192, 241, - 63, 54, 212, 28, 97, 221, 192, 212, 28, 97, 217, 160, 227, 87, 231, 50, - 230, 198, 218, 97, 97, 243, 114, 221, 166, 227, 87, 97, 218, 24, 204, 81, - 97, 221, 182, 204, 81, 97, 248, 82, 221, 192, 248, 81, 248, 80, 224, 13, - 248, 80, 219, 25, 221, 192, 219, 24, 246, 132, 245, 123, 224, 236, 97, - 203, 247, 97, 216, 83, 249, 28, 97, 208, 168, 204, 81, 246, 13, 212, 209, - 248, 206, 248, 204, 219, 57, 245, 183, 245, 79, 249, 7, 246, 41, 49, 226, - 229, 208, 86, 3, 215, 189, 245, 164, 217, 220, 54, 43, 231, 25, 211, 239, - 247, 231, 97, 238, 59, 97, 245, 157, 25, 228, 18, 212, 54, 251, 135, 212, - 231, 249, 6, 248, 127, 248, 128, 248, 151, 218, 97, 76, 203, 231, 237, - 131, 25, 203, 225, 213, 8, 220, 56, 242, 46, 224, 17, 216, 193, 208, 118, - 224, 19, 248, 19, 206, 223, 224, 119, 251, 52, 206, 223, 251, 52, 206, - 223, 5, 251, 52, 5, 251, 52, 221, 171, 251, 52, 251, 53, 244, 25, 251, - 53, 250, 97, 214, 221, 220, 29, 239, 250, 241, 77, 243, 211, 227, 40, - 219, 60, 212, 251, 136, 16, 35, 217, 36, 136, 16, 35, 251, 54, 136, 16, - 35, 239, 249, 136, 16, 35, 241, 179, 136, 16, 35, 204, 80, 136, 16, 35, - 250, 146, 136, 16, 35, 250, 147, 216, 132, 136, 16, 35, 250, 147, 216, - 131, 136, 16, 35, 250, 147, 205, 195, 136, 16, 35, 250, 147, 205, 194, - 136, 16, 35, 205, 209, 136, 16, 35, 205, 208, 136, 16, 35, 205, 207, 136, - 16, 35, 210, 221, 136, 16, 35, 218, 184, 210, 221, 136, 16, 35, 62, 210, - 221, 136, 16, 35, 224, 235, 210, 252, 136, 16, 35, 224, 235, 210, 251, - 136, 16, 35, 224, 235, 210, 250, 136, 16, 35, 246, 64, 136, 16, 35, 215, - 1, 136, 16, 35, 222, 51, 136, 16, 35, 205, 193, 136, 16, 35, 205, 192, - 136, 16, 35, 215, 219, 215, 1, 136, 16, 35, 215, 219, 215, 0, 136, 16, - 35, 238, 31, 136, 16, 35, 212, 133, 136, 16, 35, 230, 221, 219, 239, 136, - 16, 35, 230, 221, 219, 238, 136, 16, 35, 245, 134, 76, 230, 220, 136, 16, - 35, 216, 128, 76, 230, 220, 136, 16, 35, 245, 174, 219, 239, 136, 16, 35, - 230, 219, 219, 239, 136, 16, 35, 210, 253, 76, 245, 173, 136, 16, 35, - 245, 134, 76, 245, 173, 136, 16, 35, 245, 134, 76, 245, 172, 136, 16, 35, - 245, 174, 250, 188, 136, 16, 35, 215, 2, 76, 245, 174, 250, 188, 136, 16, - 35, 210, 253, 76, 215, 2, 76, 245, 173, 136, 16, 35, 206, 42, 136, 16, - 35, 208, 218, 219, 239, 136, 16, 35, 227, 233, 219, 239, 136, 16, 35, - 250, 187, 219, 239, 136, 16, 35, 210, 253, 76, 250, 186, 136, 16, 35, - 215, 2, 76, 250, 186, 136, 16, 35, 210, 253, 76, 215, 2, 76, 250, 186, - 136, 16, 35, 205, 210, 76, 250, 186, 136, 16, 35, 216, 128, 76, 250, 186, - 136, 16, 35, 216, 128, 76, 250, 185, 136, 16, 35, 216, 127, 136, 16, 35, - 216, 126, 136, 16, 35, 216, 125, 136, 16, 35, 216, 124, 136, 16, 35, 251, - 17, 136, 16, 35, 251, 16, 136, 16, 35, 225, 97, 136, 16, 35, 215, 7, 136, - 16, 35, 250, 90, 136, 16, 35, 216, 155, 136, 16, 35, 216, 154, 136, 16, - 35, 250, 25, 136, 16, 35, 248, 52, 219, 239, 136, 16, 35, 209, 216, 136, - 16, 35, 209, 215, 136, 16, 35, 217, 42, 227, 123, 136, 16, 35, 248, 0, - 136, 16, 35, 247, 255, 136, 16, 35, 247, 254, 136, 16, 35, 250, 249, 136, - 16, 35, 220, 55, 136, 16, 35, 211, 198, 136, 16, 35, 208, 216, 136, 16, - 35, 237, 210, 136, 16, 35, 204, 68, 136, 16, 35, 218, 18, 136, 16, 35, - 247, 70, 136, 16, 35, 207, 166, 136, 16, 35, 247, 41, 224, 23, 136, 16, - 35, 214, 199, 76, 230, 87, 136, 16, 35, 247, 83, 136, 16, 35, 208, 79, - 136, 16, 35, 211, 92, 208, 79, 136, 16, 35, 227, 39, 136, 16, 35, 212, - 11, 136, 16, 35, 206, 202, 136, 16, 35, 236, 50, 242, 27, 136, 16, 35, - 250, 70, 136, 16, 35, 218, 26, 250, 70, 136, 16, 35, 247, 210, 136, 16, - 35, 218, 17, 247, 210, 136, 16, 35, 250, 246, 136, 16, 35, 211, 48, 210, - 202, 211, 47, 136, 16, 35, 211, 48, 210, 202, 211, 46, 136, 16, 35, 210, - 249, 136, 16, 35, 217, 247, 136, 16, 35, 243, 150, 136, 16, 35, 243, 152, - 136, 16, 35, 243, 151, 136, 16, 35, 217, 169, 136, 16, 35, 217, 158, 136, - 16, 35, 245, 121, 136, 16, 35, 245, 120, 136, 16, 35, 245, 119, 136, 16, - 35, 245, 118, 136, 16, 35, 245, 117, 136, 16, 35, 251, 29, 136, 16, 35, - 248, 207, 76, 225, 81, 136, 16, 35, 248, 207, 76, 206, 74, 136, 16, 35, - 216, 81, 136, 16, 35, 236, 42, 136, 16, 35, 222, 79, 136, 16, 35, 244, - 132, 136, 16, 35, 224, 37, 136, 16, 35, 162, 242, 59, 136, 16, 35, 162, - 219, 214, 62, 227, 217, 230, 204, 50, 208, 85, 62, 206, 223, 230, 204, - 50, 208, 85, 62, 216, 11, 230, 204, 50, 208, 85, 62, 242, 69, 230, 204, - 50, 208, 85, 62, 212, 47, 5, 246, 61, 225, 10, 26, 61, 246, 61, 26, 61, - 246, 61, 79, 61, 246, 61, 205, 242, 79, 61, 246, 61, 240, 195, 79, 61, - 246, 61, 61, 246, 62, 245, 195, 62, 5, 246, 61, 215, 191, 209, 217, 62, - 208, 213, 211, 177, 62, 212, 47, 5, 211, 177, 157, 61, 211, 177, 225, 10, - 61, 211, 177, 26, 61, 211, 177, 79, 61, 211, 177, 205, 242, 79, 61, 211, - 177, 240, 195, 79, 61, 211, 177, 61, 51, 245, 195, 62, 205, 242, 5, 211, - 177, 61, 51, 245, 195, 62, 225, 10, 211, 177, 51, 209, 217, 62, 208, 213, - 243, 221, 62, 205, 242, 5, 243, 221, 62, 225, 10, 5, 243, 221, 61, 243, - 222, 245, 195, 62, 205, 242, 5, 243, 221, 61, 243, 222, 245, 195, 62, - 225, 10, 243, 221, 243, 222, 209, 217, 62, 208, 213, 226, 246, 62, 205, - 242, 5, 226, 246, 62, 225, 10, 5, 226, 246, 61, 226, 247, 245, 195, 62, - 5, 226, 246, 209, 63, 30, 245, 130, 157, 30, 245, 130, 225, 10, 30, 245, - 130, 26, 30, 245, 130, 205, 242, 26, 30, 245, 130, 205, 242, 79, 30, 245, - 130, 240, 195, 79, 30, 245, 130, 209, 63, 214, 254, 157, 214, 254, 225, - 10, 214, 254, 26, 214, 254, 79, 214, 254, 205, 242, 79, 214, 254, 240, - 195, 79, 214, 254, 157, 239, 233, 211, 191, 250, 59, 225, 10, 239, 233, - 211, 191, 250, 59, 26, 239, 233, 211, 191, 250, 59, 79, 239, 233, 211, - 191, 250, 59, 205, 242, 79, 239, 233, 211, 191, 250, 59, 240, 195, 79, - 239, 233, 211, 191, 250, 59, 157, 212, 88, 211, 191, 250, 59, 225, 10, - 212, 88, 211, 191, 250, 59, 26, 212, 88, 211, 191, 250, 59, 79, 212, 88, - 211, 191, 250, 59, 205, 242, 79, 212, 88, 211, 191, 250, 59, 240, 195, - 79, 212, 88, 211, 191, 250, 59, 157, 241, 143, 211, 191, 250, 59, 225, - 10, 241, 143, 211, 191, 250, 59, 26, 241, 143, 211, 191, 250, 59, 79, - 241, 143, 211, 191, 250, 59, 205, 242, 79, 241, 143, 211, 191, 250, 59, - 157, 126, 218, 61, 62, 211, 94, 225, 10, 126, 218, 61, 62, 211, 94, 126, - 218, 61, 62, 211, 94, 225, 10, 126, 218, 61, 218, 118, 211, 94, 157, 239, - 147, 218, 61, 62, 211, 94, 225, 10, 239, 147, 218, 61, 62, 211, 94, 239, - 147, 218, 61, 62, 211, 94, 225, 10, 239, 147, 218, 61, 218, 118, 211, 94, - 216, 74, 157, 239, 147, 218, 61, 218, 118, 211, 94, 157, 239, 233, 218, - 61, 62, 211, 94, 79, 239, 233, 218, 61, 62, 211, 94, 225, 10, 212, 88, - 218, 61, 62, 211, 94, 79, 212, 88, 218, 61, 62, 211, 94, 212, 88, 218, - 61, 218, 118, 211, 94, 225, 10, 241, 143, 218, 61, 62, 211, 94, 79, 241, - 143, 218, 61, 62, 211, 94, 205, 242, 79, 241, 143, 218, 61, 62, 211, 94, - 79, 241, 143, 218, 61, 218, 118, 211, 94, 157, 207, 155, 218, 61, 62, - 211, 94, 79, 207, 155, 218, 61, 62, 211, 94, 79, 207, 155, 218, 61, 218, - 118, 211, 94, 96, 53, 3, 5, 208, 86, 250, 94, 177, 53, 3, 5, 208, 86, - 250, 94, 86, 53, 3, 5, 208, 86, 250, 94, 183, 53, 3, 5, 208, 86, 250, 94, - 96, 53, 3, 225, 10, 208, 86, 250, 94, 177, 53, 3, 225, 10, 208, 86, 250, - 94, 86, 53, 3, 225, 10, 208, 86, 250, 94, 183, 53, 3, 225, 10, 208, 86, - 250, 94, 96, 53, 3, 228, 8, 208, 86, 250, 94, 177, 53, 3, 228, 8, 208, - 86, 250, 94, 86, 53, 3, 228, 8, 208, 86, 250, 94, 183, 53, 3, 228, 8, - 208, 86, 250, 94, 96, 53, 3, 5, 241, 31, 250, 94, 177, 53, 3, 5, 241, 31, - 250, 94, 86, 53, 3, 5, 241, 31, 250, 94, 183, 53, 3, 5, 241, 31, 250, 94, - 96, 53, 3, 241, 31, 250, 94, 177, 53, 3, 241, 31, 250, 94, 86, 53, 3, - 241, 31, 250, 94, 183, 53, 3, 241, 31, 250, 94, 79, 96, 53, 3, 241, 31, - 250, 94, 79, 177, 53, 3, 241, 31, 250, 94, 79, 86, 53, 3, 241, 31, 250, - 94, 79, 183, 53, 3, 241, 31, 250, 94, 79, 96, 53, 3, 228, 8, 241, 31, - 250, 94, 79, 177, 53, 3, 228, 8, 241, 31, 250, 94, 79, 86, 53, 3, 228, 8, - 241, 31, 250, 94, 79, 183, 53, 3, 228, 8, 241, 31, 250, 94, 96, 208, 84, - 53, 3, 223, 73, 213, 75, 177, 208, 84, 53, 3, 223, 73, 213, 75, 86, 208, - 84, 53, 3, 223, 73, 213, 75, 183, 208, 84, 53, 3, 223, 73, 213, 75, 96, - 208, 84, 53, 3, 225, 10, 213, 75, 177, 208, 84, 53, 3, 225, 10, 213, 75, - 86, 208, 84, 53, 3, 225, 10, 213, 75, 183, 208, 84, 53, 3, 225, 10, 213, - 75, 96, 208, 84, 53, 3, 26, 213, 75, 177, 208, 84, 53, 3, 26, 213, 75, - 86, 208, 84, 53, 3, 26, 213, 75, 183, 208, 84, 53, 3, 26, 213, 75, 96, - 208, 84, 53, 3, 79, 213, 75, 177, 208, 84, 53, 3, 79, 213, 75, 86, 208, - 84, 53, 3, 79, 213, 75, 183, 208, 84, 53, 3, 79, 213, 75, 96, 208, 84, - 53, 3, 205, 242, 79, 213, 75, 177, 208, 84, 53, 3, 205, 242, 79, 213, 75, - 86, 208, 84, 53, 3, 205, 242, 79, 213, 75, 183, 208, 84, 53, 3, 205, 242, - 79, 213, 75, 96, 240, 1, 47, 177, 240, 1, 47, 86, 240, 1, 47, 183, 240, - 1, 47, 96, 103, 47, 177, 103, 47, 86, 103, 47, 183, 103, 47, 96, 245, - 222, 47, 177, 245, 222, 47, 86, 245, 222, 47, 183, 245, 222, 47, 96, 79, - 245, 222, 47, 177, 79, 245, 222, 47, 86, 79, 245, 222, 47, 183, 79, 245, - 222, 47, 96, 79, 47, 177, 79, 47, 86, 79, 47, 183, 79, 47, 96, 41, 47, - 177, 41, 47, 86, 41, 47, 183, 41, 47, 153, 204, 46, 41, 47, 153, 241, - 176, 41, 47, 211, 238, 241, 176, 41, 47, 211, 238, 204, 46, 41, 47, 49, - 50, 41, 47, 112, 121, 41, 47, 204, 26, 96, 157, 150, 47, 204, 26, 177, - 157, 150, 47, 204, 26, 86, 157, 150, 47, 204, 26, 183, 157, 150, 47, 204, - 26, 153, 204, 46, 157, 150, 47, 204, 26, 153, 241, 176, 157, 150, 47, - 204, 26, 211, 238, 241, 176, 157, 150, 47, 204, 26, 211, 238, 204, 46, - 157, 150, 47, 204, 26, 96, 150, 47, 204, 26, 177, 150, 47, 204, 26, 86, - 150, 47, 204, 26, 183, 150, 47, 204, 26, 153, 204, 46, 150, 47, 204, 26, - 153, 241, 176, 150, 47, 204, 26, 211, 238, 241, 176, 150, 47, 204, 26, - 211, 238, 204, 46, 150, 47, 204, 26, 96, 225, 10, 150, 47, 204, 26, 177, - 225, 10, 150, 47, 204, 26, 86, 225, 10, 150, 47, 204, 26, 183, 225, 10, - 150, 47, 204, 26, 153, 204, 46, 225, 10, 150, 47, 204, 26, 153, 241, 176, - 225, 10, 150, 47, 204, 26, 211, 238, 241, 176, 225, 10, 150, 47, 204, 26, - 211, 238, 204, 46, 225, 10, 150, 47, 204, 26, 96, 79, 150, 47, 204, 26, - 177, 79, 150, 47, 204, 26, 86, 79, 150, 47, 204, 26, 183, 79, 150, 47, - 204, 26, 153, 204, 46, 79, 150, 47, 204, 26, 153, 241, 176, 79, 150, 47, - 204, 26, 211, 238, 241, 176, 79, 150, 47, 204, 26, 211, 238, 204, 46, 79, - 150, 47, 204, 26, 96, 205, 242, 79, 150, 47, 204, 26, 177, 205, 242, 79, - 150, 47, 204, 26, 86, 205, 242, 79, 150, 47, 204, 26, 183, 205, 242, 79, - 150, 47, 204, 26, 153, 204, 46, 205, 242, 79, 150, 47, 204, 26, 153, 241, - 176, 205, 242, 79, 150, 47, 204, 26, 211, 238, 241, 176, 205, 242, 79, - 150, 47, 204, 26, 211, 238, 204, 46, 205, 242, 79, 150, 47, 96, 208, 86, - 250, 94, 177, 208, 86, 250, 94, 86, 208, 86, 250, 94, 183, 208, 86, 250, - 94, 96, 61, 53, 204, 5, 208, 86, 250, 94, 177, 61, 53, 204, 5, 208, 86, - 250, 94, 86, 61, 53, 204, 5, 208, 86, 250, 94, 183, 61, 53, 204, 5, 208, - 86, 250, 94, 96, 53, 3, 221, 162, 209, 248, 177, 53, 3, 221, 162, 209, - 248, 86, 53, 3, 221, 162, 209, 248, 183, 53, 3, 221, 162, 209, 248, 79, - 53, 213, 76, 204, 24, 105, 79, 53, 213, 76, 204, 24, 120, 209, 57, 79, - 53, 213, 76, 204, 24, 118, 237, 137, 79, 53, 213, 76, 204, 24, 118, 209, - 60, 96, 247, 245, 61, 47, 86, 247, 248, 213, 78, 61, 47, 96, 208, 145, - 213, 78, 61, 47, 86, 208, 145, 213, 78, 61, 47, 96, 227, 216, 61, 47, 86, - 216, 10, 61, 47, 96, 216, 10, 61, 47, 86, 227, 216, 61, 47, 96, 249, 24, - 213, 77, 61, 47, 86, 249, 24, 213, 77, 61, 47, 96, 239, 117, 213, 77, 61, - 47, 86, 239, 117, 213, 77, 61, 47, 61, 53, 213, 76, 204, 24, 105, 61, 53, - 213, 76, 204, 24, 120, 209, 57, 202, 26, 240, 102, 224, 52, 240, 102, - 240, 103, 3, 209, 80, 222, 222, 240, 102, 209, 62, 240, 102, 240, 103, 3, - 237, 63, 215, 221, 240, 102, 236, 20, 240, 102, 2, 76, 209, 93, 236, 52, - 245, 146, 227, 102, 240, 102, 214, 188, 207, 179, 206, 240, 240, 102, - 246, 161, 204, 57, 12, 15, 235, 152, 12, 15, 235, 151, 12, 15, 235, 150, - 12, 15, 235, 149, 12, 15, 235, 148, 12, 15, 235, 147, 12, 15, 235, 146, - 12, 15, 235, 145, 12, 15, 235, 144, 12, 15, 235, 143, 12, 15, 235, 142, - 12, 15, 235, 141, 12, 15, 235, 140, 12, 15, 235, 139, 12, 15, 235, 138, - 12, 15, 235, 137, 12, 15, 235, 136, 12, 15, 235, 135, 12, 15, 235, 134, - 12, 15, 235, 133, 12, 15, 235, 132, 12, 15, 235, 131, 12, 15, 235, 130, - 12, 15, 235, 129, 12, 15, 235, 128, 12, 15, 235, 127, 12, 15, 235, 126, - 12, 15, 235, 125, 12, 15, 235, 124, 12, 15, 235, 123, 12, 15, 235, 122, - 12, 15, 235, 121, 12, 15, 235, 120, 12, 15, 235, 119, 12, 15, 235, 118, - 12, 15, 235, 117, 12, 15, 235, 116, 12, 15, 235, 115, 12, 15, 235, 114, - 12, 15, 235, 113, 12, 15, 235, 112, 12, 15, 235, 111, 12, 15, 235, 110, - 12, 15, 235, 109, 12, 15, 235, 108, 12, 15, 235, 107, 12, 15, 235, 106, - 12, 15, 235, 105, 12, 15, 235, 104, 12, 15, 235, 103, 12, 15, 235, 102, - 12, 15, 235, 101, 12, 15, 235, 100, 12, 15, 235, 99, 12, 15, 235, 98, 12, - 15, 235, 97, 12, 15, 235, 96, 12, 15, 235, 95, 12, 15, 235, 94, 12, 15, - 235, 93, 12, 15, 235, 92, 12, 15, 235, 91, 12, 15, 235, 90, 12, 15, 235, - 89, 12, 15, 235, 88, 12, 15, 235, 87, 12, 15, 235, 86, 12, 15, 235, 85, - 12, 15, 235, 84, 12, 15, 235, 83, 12, 15, 235, 82, 12, 15, 235, 81, 12, - 15, 235, 80, 12, 15, 235, 79, 12, 15, 235, 78, 12, 15, 235, 77, 12, 15, - 235, 76, 12, 15, 235, 75, 12, 15, 235, 74, 12, 15, 235, 73, 12, 15, 235, - 72, 12, 15, 235, 71, 12, 15, 235, 70, 12, 15, 235, 69, 12, 15, 235, 68, - 12, 15, 235, 67, 12, 15, 235, 66, 12, 15, 235, 65, 12, 15, 235, 64, 12, - 15, 235, 63, 12, 15, 235, 62, 12, 15, 235, 61, 12, 15, 235, 60, 12, 15, - 235, 59, 12, 15, 235, 58, 12, 15, 235, 57, 12, 15, 235, 56, 12, 15, 235, - 55, 12, 15, 235, 54, 12, 15, 235, 53, 12, 15, 235, 52, 12, 15, 235, 51, - 12, 15, 235, 50, 12, 15, 235, 49, 12, 15, 235, 48, 12, 15, 235, 47, 12, - 15, 235, 46, 12, 15, 235, 45, 12, 15, 235, 44, 12, 15, 235, 43, 12, 15, - 235, 42, 12, 15, 235, 41, 12, 15, 235, 40, 12, 15, 235, 39, 12, 15, 235, - 38, 12, 15, 235, 37, 12, 15, 235, 36, 12, 15, 235, 35, 12, 15, 235, 34, - 12, 15, 235, 33, 12, 15, 235, 32, 12, 15, 235, 31, 12, 15, 235, 30, 12, - 15, 235, 29, 12, 15, 235, 28, 12, 15, 235, 27, 12, 15, 235, 26, 12, 15, - 235, 25, 12, 15, 235, 24, 12, 15, 235, 23, 12, 15, 235, 22, 12, 15, 235, - 21, 12, 15, 235, 20, 12, 15, 235, 19, 12, 15, 235, 18, 12, 15, 235, 17, - 12, 15, 235, 16, 12, 15, 235, 15, 12, 15, 235, 14, 12, 15, 235, 13, 12, - 15, 235, 12, 12, 15, 235, 11, 12, 15, 235, 10, 12, 15, 235, 9, 12, 15, - 235, 8, 12, 15, 235, 7, 12, 15, 235, 6, 12, 15, 235, 5, 12, 15, 235, 4, - 12, 15, 235, 3, 12, 15, 235, 2, 12, 15, 235, 1, 12, 15, 235, 0, 12, 15, - 234, 255, 12, 15, 234, 254, 12, 15, 234, 253, 12, 15, 234, 252, 12, 15, - 234, 251, 12, 15, 234, 250, 12, 15, 234, 249, 12, 15, 234, 248, 12, 15, - 234, 247, 12, 15, 234, 246, 12, 15, 234, 245, 12, 15, 234, 244, 12, 15, - 234, 243, 12, 15, 234, 242, 12, 15, 234, 241, 12, 15, 234, 240, 12, 15, - 234, 239, 12, 15, 234, 238, 12, 15, 234, 237, 12, 15, 234, 236, 12, 15, - 234, 235, 12, 15, 234, 234, 12, 15, 234, 233, 12, 15, 234, 232, 12, 15, - 234, 231, 12, 15, 234, 230, 12, 15, 234, 229, 12, 15, 234, 228, 12, 15, - 234, 227, 12, 15, 234, 226, 12, 15, 234, 225, 12, 15, 234, 224, 12, 15, - 234, 223, 12, 15, 234, 222, 12, 15, 234, 221, 12, 15, 234, 220, 12, 15, - 234, 219, 12, 15, 234, 218, 12, 15, 234, 217, 12, 15, 234, 216, 12, 15, - 234, 215, 12, 15, 234, 214, 12, 15, 234, 213, 12, 15, 234, 212, 12, 15, - 234, 211, 12, 15, 234, 210, 12, 15, 234, 209, 12, 15, 234, 208, 12, 15, - 234, 207, 12, 15, 234, 206, 12, 15, 234, 205, 12, 15, 234, 204, 12, 15, - 234, 203, 12, 15, 234, 202, 12, 15, 234, 201, 12, 15, 234, 200, 12, 15, - 234, 199, 12, 15, 234, 198, 12, 15, 234, 197, 12, 15, 234, 196, 12, 15, - 234, 195, 12, 15, 234, 194, 12, 15, 234, 193, 12, 15, 234, 192, 12, 15, - 234, 191, 12, 15, 234, 190, 12, 15, 234, 189, 12, 15, 234, 188, 12, 15, - 234, 187, 12, 15, 234, 186, 12, 15, 234, 185, 12, 15, 234, 184, 12, 15, - 234, 183, 12, 15, 234, 182, 12, 15, 234, 181, 12, 15, 234, 180, 12, 15, - 234, 179, 12, 15, 234, 178, 12, 15, 234, 177, 12, 15, 234, 176, 12, 15, - 234, 175, 12, 15, 234, 174, 12, 15, 234, 173, 12, 15, 234, 172, 12, 15, - 234, 171, 12, 15, 234, 170, 12, 15, 234, 169, 12, 15, 234, 168, 12, 15, - 234, 167, 12, 15, 234, 166, 12, 15, 234, 165, 12, 15, 234, 164, 12, 15, - 234, 163, 12, 15, 234, 162, 12, 15, 234, 161, 12, 15, 234, 160, 12, 15, - 234, 159, 12, 15, 234, 158, 12, 15, 234, 157, 12, 15, 234, 156, 12, 15, - 234, 155, 12, 15, 234, 154, 12, 15, 234, 153, 12, 15, 234, 152, 12, 15, - 234, 151, 12, 15, 234, 150, 12, 15, 234, 149, 12, 15, 234, 148, 12, 15, - 234, 147, 12, 15, 234, 146, 12, 15, 234, 145, 12, 15, 234, 144, 12, 15, - 234, 143, 12, 15, 234, 142, 12, 15, 234, 141, 12, 15, 234, 140, 12, 15, - 234, 139, 12, 15, 234, 138, 12, 15, 234, 137, 12, 15, 234, 136, 12, 15, - 234, 135, 12, 15, 234, 134, 12, 15, 234, 133, 12, 15, 234, 132, 12, 15, - 234, 131, 12, 15, 234, 130, 12, 15, 234, 129, 12, 15, 234, 128, 12, 15, - 234, 127, 12, 15, 234, 126, 12, 15, 234, 125, 12, 15, 234, 124, 12, 15, - 234, 123, 12, 15, 234, 122, 12, 15, 234, 121, 12, 15, 234, 120, 12, 15, - 234, 119, 12, 15, 234, 118, 12, 15, 234, 117, 12, 15, 234, 116, 12, 15, - 234, 115, 12, 15, 234, 114, 12, 15, 234, 113, 12, 15, 234, 112, 12, 15, - 234, 111, 12, 15, 234, 110, 12, 15, 234, 109, 12, 15, 234, 108, 12, 15, - 234, 107, 12, 15, 234, 106, 12, 15, 234, 105, 12, 15, 234, 104, 12, 15, - 234, 103, 12, 15, 234, 102, 12, 15, 234, 101, 12, 15, 234, 100, 12, 15, - 234, 99, 12, 15, 234, 98, 12, 15, 234, 97, 12, 15, 234, 96, 12, 15, 234, - 95, 12, 15, 234, 94, 12, 15, 234, 93, 12, 15, 234, 92, 12, 15, 234, 91, - 12, 15, 234, 90, 12, 15, 234, 89, 12, 15, 234, 88, 12, 15, 234, 87, 12, - 15, 234, 86, 12, 15, 234, 85, 12, 15, 234, 84, 12, 15, 234, 83, 12, 15, - 234, 82, 12, 15, 234, 81, 12, 15, 234, 80, 12, 15, 234, 79, 12, 15, 234, - 78, 12, 15, 234, 77, 12, 15, 234, 76, 12, 15, 234, 75, 12, 15, 234, 74, - 12, 15, 234, 73, 12, 15, 234, 72, 12, 15, 234, 71, 12, 15, 234, 70, 12, - 15, 234, 69, 12, 15, 234, 68, 12, 15, 234, 67, 12, 15, 234, 66, 12, 15, - 234, 65, 12, 15, 234, 64, 12, 15, 234, 63, 12, 15, 234, 62, 12, 15, 234, - 61, 12, 15, 234, 60, 12, 15, 234, 59, 12, 15, 234, 58, 12, 15, 234, 57, - 12, 15, 234, 56, 12, 15, 234, 55, 12, 15, 234, 54, 12, 15, 234, 53, 12, - 15, 234, 52, 12, 15, 234, 51, 12, 15, 234, 50, 12, 15, 234, 49, 12, 15, - 234, 48, 12, 15, 234, 47, 12, 15, 234, 46, 12, 15, 234, 45, 12, 15, 234, - 44, 12, 15, 234, 43, 12, 15, 234, 42, 12, 15, 234, 41, 12, 15, 234, 40, - 12, 15, 234, 39, 12, 15, 234, 38, 12, 15, 234, 37, 12, 15, 234, 36, 12, - 15, 234, 35, 12, 15, 234, 34, 12, 15, 234, 33, 12, 15, 234, 32, 12, 15, - 234, 31, 12, 15, 234, 30, 12, 15, 234, 29, 12, 15, 234, 28, 12, 15, 234, - 27, 12, 15, 234, 26, 12, 15, 234, 25, 12, 15, 234, 24, 12, 15, 234, 23, - 12, 15, 234, 22, 12, 15, 234, 21, 12, 15, 234, 20, 12, 15, 234, 19, 12, - 15, 234, 18, 12, 15, 234, 17, 12, 15, 234, 16, 12, 15, 234, 15, 12, 15, - 234, 14, 12, 15, 234, 13, 12, 15, 234, 12, 12, 15, 234, 11, 12, 15, 234, - 10, 12, 15, 234, 9, 12, 15, 234, 8, 12, 15, 234, 7, 12, 15, 234, 6, 12, - 15, 234, 5, 12, 15, 234, 4, 12, 15, 234, 3, 12, 15, 234, 2, 12, 15, 234, - 1, 12, 15, 234, 0, 12, 15, 233, 255, 12, 15, 233, 254, 12, 15, 233, 253, - 12, 15, 233, 252, 12, 15, 233, 251, 12, 15, 233, 250, 12, 15, 233, 249, - 12, 15, 233, 248, 12, 15, 233, 247, 12, 15, 233, 246, 12, 15, 233, 245, - 12, 15, 233, 244, 12, 15, 233, 243, 12, 15, 233, 242, 12, 15, 233, 241, - 12, 15, 233, 240, 12, 15, 233, 239, 12, 15, 233, 238, 12, 15, 233, 237, - 12, 15, 233, 236, 12, 15, 233, 235, 12, 15, 233, 234, 12, 15, 233, 233, - 12, 15, 233, 232, 12, 15, 233, 231, 12, 15, 233, 230, 12, 15, 233, 229, - 12, 15, 233, 228, 12, 15, 233, 227, 12, 15, 233, 226, 12, 15, 233, 225, - 12, 15, 233, 224, 12, 15, 233, 223, 12, 15, 233, 222, 12, 15, 233, 221, - 12, 15, 233, 220, 12, 15, 233, 219, 12, 15, 233, 218, 12, 15, 233, 217, - 12, 15, 233, 216, 12, 15, 233, 215, 12, 15, 233, 214, 12, 15, 233, 213, - 12, 15, 233, 212, 12, 15, 233, 211, 12, 15, 233, 210, 12, 15, 233, 209, - 12, 15, 233, 208, 12, 15, 233, 207, 12, 15, 233, 206, 12, 15, 233, 205, - 12, 15, 233, 204, 12, 15, 233, 203, 12, 15, 233, 202, 12, 15, 233, 201, - 12, 15, 233, 200, 12, 15, 233, 199, 12, 15, 233, 198, 12, 15, 233, 197, - 12, 15, 233, 196, 12, 15, 233, 195, 12, 15, 233, 194, 12, 15, 233, 193, - 12, 15, 233, 192, 12, 15, 233, 191, 12, 15, 233, 190, 12, 15, 233, 189, - 12, 15, 233, 188, 12, 15, 233, 187, 12, 15, 233, 186, 12, 15, 233, 185, - 12, 15, 233, 184, 12, 15, 233, 183, 12, 15, 233, 182, 12, 15, 233, 181, - 12, 15, 233, 180, 12, 15, 233, 179, 12, 15, 233, 178, 12, 15, 233, 177, - 12, 15, 233, 176, 12, 15, 233, 175, 12, 15, 233, 174, 12, 15, 233, 173, - 12, 15, 233, 172, 12, 15, 233, 171, 12, 15, 233, 170, 12, 15, 233, 169, - 12, 15, 233, 168, 12, 15, 233, 167, 12, 15, 233, 166, 12, 15, 233, 165, - 12, 15, 233, 164, 12, 15, 233, 163, 12, 15, 233, 162, 12, 15, 233, 161, - 12, 15, 233, 160, 12, 15, 233, 159, 12, 15, 233, 158, 12, 15, 233, 157, - 12, 15, 233, 156, 12, 15, 233, 155, 12, 15, 233, 154, 12, 15, 233, 153, - 12, 15, 233, 152, 12, 15, 233, 151, 12, 15, 233, 150, 12, 15, 233, 149, - 12, 15, 233, 148, 12, 15, 233, 147, 12, 15, 233, 146, 12, 15, 233, 145, - 12, 15, 233, 144, 12, 15, 233, 143, 12, 15, 233, 142, 12, 15, 233, 141, - 12, 15, 233, 140, 12, 15, 233, 139, 12, 15, 233, 138, 12, 15, 233, 137, - 12, 15, 233, 136, 12, 15, 233, 135, 12, 15, 233, 134, 12, 15, 233, 133, - 12, 15, 233, 132, 12, 15, 233, 131, 12, 15, 233, 130, 12, 15, 233, 129, - 12, 15, 233, 128, 12, 15, 233, 127, 12, 15, 233, 126, 12, 15, 233, 125, - 12, 15, 233, 124, 12, 15, 233, 123, 228, 14, 209, 255, 160, 211, 228, - 160, 240, 212, 82, 160, 217, 31, 82, 160, 42, 54, 160, 243, 97, 54, 160, - 218, 246, 54, 160, 250, 235, 160, 250, 160, 160, 49, 219, 76, 160, 50, - 219, 76, 160, 250, 59, 160, 91, 54, 160, 245, 233, 160, 235, 219, 160, - 239, 102, 211, 61, 160, 212, 0, 160, 17, 202, 84, 160, 17, 105, 160, 17, - 108, 160, 17, 147, 160, 17, 149, 160, 17, 170, 160, 17, 195, 160, 17, - 213, 111, 160, 17, 199, 160, 17, 222, 63, 160, 245, 242, 160, 213, 143, - 160, 227, 179, 54, 160, 241, 35, 54, 160, 237, 247, 54, 160, 217, 47, 82, - 160, 245, 231, 250, 49, 160, 8, 6, 1, 63, 160, 8, 6, 1, 249, 255, 160, 8, - 6, 1, 247, 125, 160, 8, 6, 1, 245, 51, 160, 8, 6, 1, 74, 160, 8, 6, 1, - 240, 174, 160, 8, 6, 1, 239, 75, 160, 8, 6, 1, 237, 171, 160, 8, 6, 1, - 75, 160, 8, 6, 1, 230, 184, 160, 8, 6, 1, 230, 54, 160, 8, 6, 1, 159, - 160, 8, 6, 1, 226, 185, 160, 8, 6, 1, 223, 163, 160, 8, 6, 1, 78, 160, 8, - 6, 1, 219, 184, 160, 8, 6, 1, 217, 134, 160, 8, 6, 1, 146, 160, 8, 6, 1, - 194, 160, 8, 6, 1, 210, 69, 160, 8, 6, 1, 68, 160, 8, 6, 1, 206, 164, - 160, 8, 6, 1, 204, 144, 160, 8, 6, 1, 203, 196, 160, 8, 6, 1, 203, 124, - 160, 8, 6, 1, 202, 159, 160, 49, 51, 155, 160, 216, 74, 212, 0, 160, 50, - 51, 155, 160, 246, 53, 251, 138, 160, 124, 227, 114, 160, 237, 254, 251, - 138, 160, 8, 5, 1, 63, 160, 8, 5, 1, 249, 255, 160, 8, 5, 1, 247, 125, - 160, 8, 5, 1, 245, 51, 160, 8, 5, 1, 74, 160, 8, 5, 1, 240, 174, 160, 8, - 5, 1, 239, 75, 160, 8, 5, 1, 237, 171, 160, 8, 5, 1, 75, 160, 8, 5, 1, - 230, 184, 160, 8, 5, 1, 230, 54, 160, 8, 5, 1, 159, 160, 8, 5, 1, 226, - 185, 160, 8, 5, 1, 223, 163, 160, 8, 5, 1, 78, 160, 8, 5, 1, 219, 184, - 160, 8, 5, 1, 217, 134, 160, 8, 5, 1, 146, 160, 8, 5, 1, 194, 160, 8, 5, - 1, 210, 69, 160, 8, 5, 1, 68, 160, 8, 5, 1, 206, 164, 160, 8, 5, 1, 204, - 144, 160, 8, 5, 1, 203, 196, 160, 8, 5, 1, 203, 124, 160, 8, 5, 1, 202, - 159, 160, 49, 245, 93, 155, 160, 80, 227, 114, 160, 50, 245, 93, 155, - 160, 208, 227, 247, 60, 209, 255, 57, 214, 71, 57, 214, 60, 57, 214, 49, - 57, 214, 37, 57, 214, 26, 57, 214, 15, 57, 214, 4, 57, 213, 249, 57, 213, - 238, 57, 213, 230, 57, 213, 229, 57, 213, 228, 57, 213, 227, 57, 213, - 225, 57, 213, 224, 57, 213, 223, 57, 213, 222, 57, 213, 221, 57, 213, - 220, 57, 213, 219, 57, 213, 218, 57, 213, 217, 57, 213, 216, 57, 213, - 214, 57, 213, 213, 57, 213, 212, 57, 213, 211, 57, 213, 210, 57, 213, - 209, 57, 213, 208, 57, 213, 207, 57, 213, 206, 57, 213, 205, 57, 213, - 203, 57, 213, 202, 57, 213, 201, 57, 213, 200, 57, 213, 199, 57, 213, - 198, 57, 213, 197, 57, 213, 196, 57, 213, 195, 57, 213, 194, 57, 213, - 192, 57, 213, 191, 57, 213, 190, 57, 213, 189, 57, 213, 188, 57, 213, - 187, 57, 213, 186, 57, 213, 185, 57, 213, 184, 57, 213, 183, 57, 213, - 181, 57, 213, 180, 57, 213, 179, 57, 213, 178, 57, 213, 177, 57, 213, - 176, 57, 213, 175, 57, 213, 174, 57, 213, 173, 57, 213, 172, 57, 213, - 170, 57, 213, 169, 57, 213, 168, 57, 213, 167, 57, 213, 166, 57, 213, - 165, 57, 213, 164, 57, 213, 163, 57, 213, 162, 57, 213, 161, 57, 213, - 159, 57, 213, 158, 57, 213, 157, 57, 213, 156, 57, 213, 155, 57, 213, - 154, 57, 213, 153, 57, 213, 152, 57, 213, 151, 57, 213, 150, 57, 214, - 147, 57, 214, 146, 57, 214, 145, 57, 214, 144, 57, 214, 143, 57, 214, - 142, 57, 214, 141, 57, 214, 140, 57, 214, 139, 57, 214, 138, 57, 214, - 136, 57, 214, 135, 57, 214, 134, 57, 214, 133, 57, 214, 132, 57, 214, - 131, 57, 214, 130, 57, 214, 129, 57, 214, 128, 57, 214, 127, 57, 214, - 125, 57, 214, 124, 57, 214, 123, 57, 214, 122, 57, 214, 121, 57, 214, - 120, 57, 214, 119, 57, 214, 118, 57, 214, 117, 57, 214, 116, 57, 214, - 114, 57, 214, 113, 57, 214, 112, 57, 214, 111, 57, 214, 110, 57, 214, - 109, 57, 214, 108, 57, 214, 107, 57, 214, 106, 57, 214, 105, 57, 214, - 103, 57, 214, 102, 57, 214, 101, 57, 214, 100, 57, 214, 99, 57, 214, 98, - 57, 214, 97, 57, 214, 96, 57, 214, 95, 57, 214, 94, 57, 214, 92, 57, 214, - 91, 57, 214, 90, 57, 214, 89, 57, 214, 88, 57, 214, 87, 57, 214, 86, 57, - 214, 85, 57, 214, 84, 57, 214, 83, 57, 214, 81, 57, 214, 80, 57, 214, 79, - 57, 214, 78, 57, 214, 77, 57, 214, 76, 57, 214, 75, 57, 214, 74, 57, 214, - 73, 57, 214, 72, 57, 214, 70, 57, 214, 69, 57, 214, 68, 57, 214, 67, 57, - 214, 66, 57, 214, 65, 57, 214, 64, 57, 214, 63, 57, 214, 62, 57, 214, 61, - 57, 214, 59, 57, 214, 58, 57, 214, 57, 57, 214, 56, 57, 214, 55, 57, 214, - 54, 57, 214, 53, 57, 214, 52, 57, 214, 51, 57, 214, 50, 57, 214, 48, 57, - 214, 47, 57, 214, 46, 57, 214, 45, 57, 214, 44, 57, 214, 43, 57, 214, 42, - 57, 214, 41, 57, 214, 40, 57, 214, 39, 57, 214, 36, 57, 214, 35, 57, 214, - 34, 57, 214, 33, 57, 214, 32, 57, 214, 31, 57, 214, 30, 57, 214, 29, 57, - 214, 28, 57, 214, 27, 57, 214, 25, 57, 214, 24, 57, 214, 23, 57, 214, 22, - 57, 214, 21, 57, 214, 20, 57, 214, 19, 57, 214, 18, 57, 214, 17, 57, 214, - 16, 57, 214, 14, 57, 214, 13, 57, 214, 12, 57, 214, 11, 57, 214, 10, 57, - 214, 9, 57, 214, 8, 57, 214, 7, 57, 214, 6, 57, 214, 5, 57, 214, 3, 57, - 214, 2, 57, 214, 1, 57, 214, 0, 57, 213, 255, 57, 213, 254, 57, 213, 253, - 57, 213, 252, 57, 213, 251, 57, 213, 250, 57, 213, 248, 57, 213, 247, 57, - 213, 246, 57, 213, 245, 57, 213, 244, 57, 213, 243, 57, 213, 242, 57, - 213, 241, 57, 213, 240, 57, 213, 239, 57, 213, 237, 57, 213, 236, 57, - 213, 235, 57, 213, 234, 57, 213, 233, 57, 213, 232, 57, 213, 231, 221, - 48, 221, 50, 211, 90, 76, 237, 61, 212, 3, 211, 90, 76, 209, 112, 211, - 12, 241, 84, 76, 209, 112, 240, 240, 241, 84, 76, 208, 105, 241, 47, 241, - 71, 241, 72, 251, 130, 251, 131, 251, 27, 248, 131, 249, 19, 247, 199, - 167, 210, 5, 236, 106, 210, 5, 236, 31, 210, 10, 227, 115, 240, 51, 222, - 214, 227, 114, 241, 84, 76, 227, 114, 227, 163, 221, 253, 241, 50, 227, - 115, 210, 5, 80, 210, 5, 204, 165, 239, 159, 240, 51, 240, 30, 247, 25, - 216, 77, 245, 147, 213, 7, 219, 211, 227, 41, 105, 212, 13, 213, 7, 231, - 49, 227, 41, 202, 84, 212, 162, 244, 139, 227, 105, 241, 9, 243, 123, - 244, 8, 245, 184, 105, 244, 128, 244, 8, 245, 184, 108, 244, 127, 244, 8, - 245, 184, 147, 244, 126, 244, 8, 245, 184, 149, 244, 125, 182, 251, 130, - 223, 89, 210, 95, 231, 112, 210, 99, 241, 84, 76, 208, 106, 248, 33, 240, - 247, 247, 59, 247, 61, 241, 84, 76, 225, 9, 241, 48, 210, 242, 211, 3, - 241, 9, 241, 10, 231, 25, 213, 131, 149, 240, 11, 213, 130, 239, 112, - 231, 25, 213, 131, 147, 237, 238, 213, 130, 237, 235, 231, 25, 213, 131, - 108, 216, 149, 213, 130, 215, 150, 231, 25, 213, 131, 105, 206, 236, 213, - 130, 206, 193, 211, 231, 244, 46, 244, 48, 219, 157, 246, 182, 219, 159, - 138, 220, 80, 217, 240, 236, 109, 247, 218, 218, 236, 237, 27, 247, 230, - 221, 192, 247, 218, 237, 27, 223, 53, 231, 35, 231, 37, 222, 208, 227, - 114, 222, 231, 211, 90, 76, 214, 152, 250, 120, 211, 164, 241, 84, 76, - 214, 152, 250, 120, 241, 12, 167, 210, 6, 213, 117, 236, 106, 210, 6, - 213, 117, 236, 28, 167, 210, 6, 3, 230, 66, 236, 106, 210, 6, 3, 230, 66, - 236, 29, 227, 115, 210, 6, 213, 117, 80, 210, 6, 213, 117, 204, 164, 219, - 69, 227, 115, 239, 151, 219, 69, 227, 115, 242, 70, 218, 87, 219, 69, - 227, 115, 249, 18, 219, 69, 227, 115, 206, 224, 218, 82, 216, 74, 227, - 115, 240, 51, 216, 74, 231, 35, 216, 57, 212, 120, 213, 7, 108, 212, 117, - 211, 166, 212, 120, 213, 7, 147, 212, 116, 211, 165, 244, 8, 245, 184, - 211, 34, 244, 123, 217, 227, 206, 192, 105, 217, 227, 206, 190, 217, 190, - 217, 227, 206, 192, 108, 217, 227, 206, 189, 217, 189, 213, 118, 208, - 104, 211, 89, 211, 17, 247, 60, 246, 182, 247, 1, 224, 224, 204, 103, - 223, 181, 211, 90, 76, 237, 223, 250, 120, 211, 90, 76, 217, 208, 250, - 120, 211, 230, 241, 84, 76, 237, 223, 250, 120, 241, 84, 76, 217, 208, - 250, 120, 241, 45, 211, 90, 76, 211, 34, 211, 245, 212, 120, 238, 3, 167, - 230, 241, 213, 95, 212, 120, 167, 230, 241, 214, 191, 245, 184, 213, 127, - 230, 241, 245, 111, 211, 35, 209, 138, 211, 108, 220, 0, 210, 84, 245, - 232, 219, 226, 217, 228, 224, 223, 218, 72, 250, 156, 217, 222, 245, 232, - 250, 172, 223, 41, 212, 171, 8, 6, 1, 238, 119, 8, 5, 1, 238, 119, 246, - 201, 251, 8, 210, 89, 210, 248, 245, 243, 212, 68, 227, 222, 200, 1, 227, - 68, 228, 12, 1, 239, 187, 239, 178, 228, 12, 1, 239, 187, 240, 63, 228, - 12, 1, 215, 227, 228, 12, 1, 227, 49, 77, 131, 248, 45, 212, 238, 238, - 82, 224, 173, 216, 64, 239, 89, 239, 88, 239, 87, 223, 183, 201, 243, - 201, 244, 201, 246, 226, 243, 215, 235, 226, 245, 215, 237, 219, 37, 226, - 242, 215, 234, 221, 223, 224, 86, 204, 2, 226, 244, 215, 236, 239, 111, - 219, 36, 204, 52, 241, 107, 239, 99, 224, 154, 220, 32, 206, 194, 97, - 224, 154, 244, 145, 97, 96, 208, 84, 53, 3, 52, 80, 95, 86, 208, 84, 53, - 3, 52, 80, 95, 11, 4, 230, 199, 82, 217, 241, 239, 159, 35, 80, 50, 61, - 227, 185, 155, 205, 165, 205, 54, 204, 242, 204, 231, 204, 220, 204, 209, - 204, 198, 204, 187, 204, 176, 205, 164, 205, 153, 205, 142, 205, 131, - 205, 120, 205, 109, 205, 98, 247, 130, 219, 241, 82, 248, 13, 201, 245, - 9, 2, 221, 57, 209, 141, 9, 2, 221, 57, 115, 221, 57, 247, 161, 115, 247, - 160, 60, 31, 16, 239, 110, 212, 64, 246, 102, 206, 65, 205, 87, 205, 76, - 205, 65, 205, 53, 205, 42, 205, 31, 205, 20, 205, 9, 204, 254, 204, 246, - 204, 245, 204, 244, 204, 243, 204, 241, 204, 240, 204, 239, 204, 238, - 204, 237, 204, 236, 204, 235, 204, 234, 204, 233, 204, 232, 204, 230, - 204, 229, 204, 228, 204, 227, 204, 226, 204, 225, 204, 224, 204, 223, - 204, 222, 204, 221, 204, 219, 204, 218, 204, 217, 204, 216, 204, 215, - 204, 214, 204, 213, 204, 212, 204, 211, 204, 210, 204, 208, 204, 207, - 204, 206, 204, 205, 204, 204, 204, 203, 204, 202, 204, 201, 204, 200, - 204, 199, 204, 197, 204, 196, 204, 195, 204, 194, 204, 193, 204, 192, - 204, 191, 204, 190, 204, 189, 204, 188, 204, 186, 204, 185, 204, 184, - 204, 183, 204, 182, 204, 181, 204, 180, 204, 179, 204, 178, 204, 177, - 204, 175, 204, 174, 204, 173, 204, 172, 204, 171, 204, 170, 204, 169, - 204, 168, 204, 167, 204, 166, 205, 163, 205, 162, 205, 161, 205, 160, - 205, 159, 205, 158, 205, 157, 205, 156, 205, 155, 205, 154, 205, 152, - 205, 151, 205, 150, 205, 149, 205, 148, 205, 147, 205, 146, 205, 145, - 205, 144, 205, 143, 205, 141, 205, 140, 205, 139, 205, 138, 205, 137, - 205, 136, 205, 135, 205, 134, 205, 133, 205, 132, 205, 130, 205, 129, - 205, 128, 205, 127, 205, 126, 205, 125, 205, 124, 205, 123, 205, 122, - 205, 121, 205, 119, 205, 118, 205, 117, 205, 116, 205, 115, 205, 114, - 205, 113, 205, 112, 205, 111, 205, 110, 205, 108, 205, 107, 205, 106, - 205, 105, 205, 104, 205, 103, 205, 102, 205, 101, 205, 100, 205, 99, 205, - 97, 205, 96, 205, 95, 205, 94, 205, 93, 205, 92, 205, 91, 205, 90, 205, - 89, 205, 88, 205, 86, 205, 85, 205, 84, 205, 83, 205, 82, 205, 81, 205, - 80, 205, 79, 205, 78, 205, 77, 205, 75, 205, 74, 205, 73, 205, 72, 205, - 71, 205, 70, 205, 69, 205, 68, 205, 67, 205, 66, 205, 64, 205, 63, 205, - 62, 205, 61, 205, 60, 205, 59, 205, 58, 205, 57, 205, 56, 205, 55, 205, - 52, 205, 51, 205, 50, 205, 49, 205, 48, 205, 47, 205, 46, 205, 45, 205, - 44, 205, 43, 205, 41, 205, 40, 205, 39, 205, 38, 205, 37, 205, 36, 205, - 35, 205, 34, 205, 33, 205, 32, 205, 30, 205, 29, 205, 28, 205, 27, 205, - 26, 205, 25, 205, 24, 205, 23, 205, 22, 205, 21, 205, 19, 205, 18, 205, - 17, 205, 16, 205, 15, 205, 14, 205, 13, 205, 12, 205, 11, 205, 10, 205, - 8, 205, 7, 205, 6, 205, 5, 205, 4, 205, 3, 205, 2, 205, 1, 205, 0, 204, - 255, 204, 253, 204, 252, 204, 251, 204, 250, 204, 249, 204, 248, 204, - 247, 8, 6, 1, 34, 3, 225, 171, 25, 237, 253, 8, 5, 1, 34, 3, 225, 171, - 25, 237, 253, 8, 6, 1, 188, 3, 80, 227, 115, 56, 8, 5, 1, 188, 3, 80, - 227, 115, 56, 8, 6, 1, 188, 3, 80, 227, 115, 248, 126, 25, 237, 253, 8, - 5, 1, 188, 3, 80, 227, 115, 248, 126, 25, 237, 253, 8, 6, 1, 188, 3, 80, - 227, 115, 248, 126, 25, 165, 8, 5, 1, 188, 3, 80, 227, 115, 248, 126, 25, - 165, 8, 6, 1, 188, 3, 246, 53, 25, 225, 170, 8, 5, 1, 188, 3, 246, 53, - 25, 225, 170, 8, 6, 1, 188, 3, 246, 53, 25, 247, 29, 8, 5, 1, 188, 3, - 246, 53, 25, 247, 29, 8, 6, 1, 235, 206, 3, 225, 171, 25, 237, 253, 8, 5, - 1, 235, 206, 3, 225, 171, 25, 237, 253, 8, 5, 1, 235, 206, 3, 70, 87, 25, - 165, 8, 5, 1, 222, 206, 3, 208, 228, 55, 8, 6, 1, 158, 3, 80, 227, 115, - 56, 8, 5, 1, 158, 3, 80, 227, 115, 56, 8, 6, 1, 158, 3, 80, 227, 115, - 248, 126, 25, 237, 253, 8, 5, 1, 158, 3, 80, 227, 115, 248, 126, 25, 237, - 253, 8, 6, 1, 158, 3, 80, 227, 115, 248, 126, 25, 165, 8, 5, 1, 158, 3, - 80, 227, 115, 248, 126, 25, 165, 8, 6, 1, 215, 94, 3, 80, 227, 115, 56, - 8, 5, 1, 215, 94, 3, 80, 227, 115, 56, 8, 6, 1, 106, 3, 225, 171, 25, - 237, 253, 8, 5, 1, 106, 3, 225, 171, 25, 237, 253, 8, 6, 1, 34, 3, 220, - 63, 25, 165, 8, 5, 1, 34, 3, 220, 63, 25, 165, 8, 6, 1, 34, 3, 220, 63, - 25, 208, 227, 8, 5, 1, 34, 3, 220, 63, 25, 208, 227, 8, 6, 1, 188, 3, - 220, 63, 25, 165, 8, 5, 1, 188, 3, 220, 63, 25, 165, 8, 6, 1, 188, 3, - 220, 63, 25, 208, 227, 8, 5, 1, 188, 3, 220, 63, 25, 208, 227, 8, 6, 1, - 188, 3, 70, 87, 25, 165, 8, 5, 1, 188, 3, 70, 87, 25, 165, 8, 6, 1, 188, - 3, 70, 87, 25, 208, 227, 8, 5, 1, 188, 3, 70, 87, 25, 208, 227, 8, 5, 1, - 235, 206, 3, 70, 87, 25, 237, 253, 8, 5, 1, 235, 206, 3, 70, 87, 25, 208, - 227, 8, 6, 1, 235, 206, 3, 220, 63, 25, 165, 8, 5, 1, 235, 206, 3, 220, - 63, 25, 70, 87, 25, 165, 8, 6, 1, 235, 206, 3, 220, 63, 25, 208, 227, 8, - 5, 1, 235, 206, 3, 220, 63, 25, 70, 87, 25, 208, 227, 8, 6, 1, 230, 185, - 3, 208, 227, 8, 5, 1, 230, 185, 3, 70, 87, 25, 208, 227, 8, 6, 1, 228, - 131, 3, 208, 227, 8, 5, 1, 228, 131, 3, 208, 227, 8, 6, 1, 226, 186, 3, - 208, 227, 8, 5, 1, 226, 186, 3, 208, 227, 8, 6, 1, 217, 1, 3, 208, 227, - 8, 5, 1, 217, 1, 3, 208, 227, 8, 6, 1, 106, 3, 220, 63, 25, 165, 8, 5, 1, - 106, 3, 220, 63, 25, 165, 8, 6, 1, 106, 3, 220, 63, 25, 208, 227, 8, 5, - 1, 106, 3, 220, 63, 25, 208, 227, 8, 6, 1, 106, 3, 225, 171, 25, 165, 8, - 5, 1, 106, 3, 225, 171, 25, 165, 8, 6, 1, 106, 3, 225, 171, 25, 208, 227, - 8, 5, 1, 106, 3, 225, 171, 25, 208, 227, 8, 5, 1, 251, 110, 3, 237, 253, - 8, 5, 1, 171, 158, 3, 237, 253, 8, 5, 1, 171, 158, 3, 165, 8, 5, 1, 207, - 174, 206, 165, 3, 237, 253, 8, 5, 1, 207, 174, 206, 165, 3, 165, 8, 5, 1, - 214, 193, 3, 237, 253, 8, 5, 1, 214, 193, 3, 165, 8, 5, 1, 236, 115, 214, - 193, 3, 237, 253, 8, 5, 1, 236, 115, 214, 193, 3, 165, 10, 213, 127, 89, - 3, 237, 128, 87, 3, 251, 30, 10, 213, 127, 89, 3, 237, 128, 87, 3, 204, - 70, 10, 213, 127, 89, 3, 237, 128, 87, 3, 137, 225, 129, 10, 213, 127, - 89, 3, 237, 128, 87, 3, 220, 73, 10, 213, 127, 89, 3, 237, 128, 87, 3, - 68, 10, 213, 127, 89, 3, 237, 128, 87, 3, 202, 213, 10, 213, 127, 89, 3, - 237, 128, 87, 3, 74, 10, 213, 127, 89, 3, 237, 128, 87, 3, 251, 109, 10, - 213, 127, 221, 179, 3, 229, 189, 179, 1, 229, 119, 44, 109, 230, 54, 44, - 109, 222, 205, 44, 109, 247, 125, 44, 109, 221, 13, 44, 109, 207, 244, - 44, 109, 221, 228, 44, 109, 210, 69, 44, 109, 223, 163, 44, 109, 219, - 184, 44, 109, 226, 185, 44, 109, 203, 124, 44, 109, 146, 44, 109, 159, - 44, 109, 206, 164, 44, 109, 227, 69, 44, 109, 227, 78, 44, 109, 215, 186, - 44, 109, 221, 210, 44, 109, 230, 184, 44, 109, 213, 92, 44, 109, 211, - 167, 44, 109, 194, 44, 109, 237, 171, 44, 109, 228, 224, 44, 4, 230, 41, - 44, 4, 229, 100, 44, 4, 229, 87, 44, 4, 228, 209, 44, 4, 228, 174, 44, 4, - 229, 201, 44, 4, 229, 198, 44, 4, 230, 18, 44, 4, 229, 26, 44, 4, 229, 6, - 44, 4, 229, 219, 44, 4, 222, 202, 44, 4, 222, 151, 44, 4, 222, 147, 44, - 4, 222, 116, 44, 4, 222, 108, 44, 4, 222, 190, 44, 4, 222, 188, 44, 4, - 222, 199, 44, 4, 222, 128, 44, 4, 222, 123, 44, 4, 222, 192, 44, 4, 247, - 91, 44, 4, 246, 79, 44, 4, 246, 69, 44, 4, 245, 110, 44, 4, 245, 76, 44, - 4, 246, 238, 44, 4, 246, 230, 44, 4, 247, 80, 44, 4, 245, 254, 44, 4, - 245, 180, 44, 4, 247, 15, 44, 4, 221, 10, 44, 4, 220, 248, 44, 4, 220, - 243, 44, 4, 220, 226, 44, 4, 220, 218, 44, 4, 221, 1, 44, 4, 221, 0, 44, - 4, 221, 7, 44, 4, 220, 233, 44, 4, 220, 230, 44, 4, 221, 4, 44, 4, 207, - 240, 44, 4, 207, 220, 44, 4, 207, 219, 44, 4, 207, 208, 44, 4, 207, 205, - 44, 4, 207, 236, 44, 4, 207, 235, 44, 4, 207, 239, 44, 4, 207, 218, 44, - 4, 207, 217, 44, 4, 207, 238, 44, 4, 221, 226, 44, 4, 221, 212, 44, 4, - 221, 211, 44, 4, 221, 195, 44, 4, 221, 194, 44, 4, 221, 222, 44, 4, 221, - 221, 44, 4, 221, 225, 44, 4, 221, 197, 44, 4, 221, 196, 44, 4, 221, 224, - 44, 4, 210, 18, 44, 4, 209, 2, 44, 4, 208, 242, 44, 4, 207, 203, 44, 4, - 207, 165, 44, 4, 209, 187, 44, 4, 209, 176, 44, 4, 209, 250, 44, 4, 135, - 44, 4, 208, 148, 44, 4, 209, 207, 44, 4, 223, 106, 44, 4, 222, 100, 44, - 4, 222, 75, 44, 4, 221, 84, 44, 4, 221, 25, 44, 4, 222, 240, 44, 4, 222, - 235, 44, 4, 223, 92, 44, 4, 221, 191, 44, 4, 221, 180, 44, 4, 223, 65, - 44, 4, 219, 168, 44, 4, 218, 167, 44, 4, 218, 129, 44, 4, 217, 191, 44, - 4, 217, 157, 44, 4, 219, 34, 44, 4, 219, 23, 44, 4, 219, 148, 44, 4, 218, - 69, 44, 4, 218, 45, 44, 4, 219, 48, 44, 4, 225, 175, 44, 4, 224, 155, 44, - 4, 224, 125, 44, 4, 223, 246, 44, 4, 223, 192, 44, 4, 225, 20, 44, 4, - 225, 8, 44, 4, 225, 140, 44, 4, 224, 82, 44, 4, 224, 35, 44, 4, 225, 67, - 44, 4, 203, 110, 44, 4, 203, 11, 44, 4, 203, 2, 44, 4, 202, 213, 44, 4, - 202, 181, 44, 4, 203, 52, 44, 4, 203, 49, 44, 4, 203, 89, 44, 4, 202, - 247, 44, 4, 202, 232, 44, 4, 203, 62, 44, 4, 216, 216, 44, 4, 216, 57, - 44, 4, 216, 3, 44, 4, 215, 145, 44, 4, 215, 114, 44, 4, 216, 158, 44, 4, - 216, 135, 44, 4, 216, 197, 44, 4, 215, 227, 44, 4, 215, 208, 44, 4, 216, - 167, 44, 4, 228, 112, 44, 4, 227, 148, 44, 4, 227, 130, 44, 4, 226, 239, - 44, 4, 226, 210, 44, 4, 227, 234, 44, 4, 227, 226, 44, 4, 228, 86, 44, 4, - 227, 49, 44, 4, 227, 18, 44, 4, 227, 251, 44, 4, 206, 85, 44, 4, 205, - 230, 44, 4, 205, 215, 44, 4, 204, 163, 44, 4, 204, 156, 44, 4, 206, 55, - 44, 4, 206, 50, 44, 4, 206, 81, 44, 4, 205, 189, 44, 4, 205, 176, 44, 4, - 206, 61, 44, 4, 227, 67, 44, 4, 227, 62, 44, 4, 227, 61, 44, 4, 227, 58, - 44, 4, 227, 57, 44, 4, 227, 64, 44, 4, 227, 63, 44, 4, 227, 66, 44, 4, - 227, 60, 44, 4, 227, 59, 44, 4, 227, 65, 44, 4, 227, 76, 44, 4, 227, 71, - 44, 4, 227, 70, 44, 4, 227, 54, 44, 4, 227, 53, 44, 4, 227, 73, 44, 4, - 227, 72, 44, 4, 227, 75, 44, 4, 227, 56, 44, 4, 227, 55, 44, 4, 227, 74, - 44, 4, 215, 184, 44, 4, 215, 173, 44, 4, 215, 172, 44, 4, 215, 165, 44, - 4, 215, 158, 44, 4, 215, 180, 44, 4, 215, 179, 44, 4, 215, 183, 44, 4, - 215, 171, 44, 4, 215, 170, 44, 4, 215, 182, 44, 4, 221, 208, 44, 4, 221, - 203, 44, 4, 221, 202, 44, 4, 221, 199, 44, 4, 221, 198, 44, 4, 221, 205, - 44, 4, 221, 204, 44, 4, 221, 207, 44, 4, 221, 201, 44, 4, 221, 200, 44, - 4, 221, 206, 44, 4, 230, 180, 44, 4, 230, 141, 44, 4, 230, 134, 44, 4, - 230, 82, 44, 4, 230, 64, 44, 4, 230, 161, 44, 4, 230, 159, 44, 4, 230, - 174, 44, 4, 230, 101, 44, 4, 230, 91, 44, 4, 230, 167, 44, 4, 213, 85, - 44, 4, 213, 11, 44, 4, 213, 6, 44, 4, 212, 199, 44, 4, 212, 182, 44, 4, - 213, 43, 44, 4, 213, 41, 44, 4, 213, 74, 44, 4, 212, 242, 44, 4, 212, - 236, 44, 4, 213, 52, 44, 4, 211, 163, 44, 4, 211, 132, 44, 4, 211, 128, - 44, 4, 211, 119, 44, 4, 211, 116, 44, 4, 211, 138, 44, 4, 211, 137, 44, - 4, 211, 162, 44, 4, 211, 124, 44, 4, 211, 123, 44, 4, 211, 140, 44, 4, - 215, 33, 44, 4, 212, 162, 44, 4, 212, 142, 44, 4, 211, 10, 44, 4, 210, - 179, 44, 4, 214, 177, 44, 4, 214, 165, 44, 4, 215, 18, 44, 4, 212, 13, - 44, 4, 211, 250, 44, 4, 214, 217, 44, 4, 237, 157, 44, 4, 237, 3, 44, 4, - 236, 239, 44, 4, 236, 26, 44, 4, 236, 1, 44, 4, 237, 67, 44, 4, 237, 48, - 44, 4, 237, 147, 44, 4, 236, 136, 44, 4, 236, 117, 44, 4, 237, 76, 44, 4, - 228, 223, 44, 4, 228, 222, 44, 4, 228, 217, 44, 4, 228, 216, 44, 4, 228, - 213, 44, 4, 228, 212, 44, 4, 228, 219, 44, 4, 228, 218, 44, 4, 228, 221, - 44, 4, 228, 215, 44, 4, 228, 214, 44, 4, 228, 220, 44, 4, 212, 205, 140, - 109, 2, 203, 75, 140, 109, 2, 216, 186, 140, 109, 2, 216, 102, 114, 1, - 207, 95, 85, 109, 2, 245, 249, 173, 85, 109, 2, 245, 249, 229, 144, 85, - 109, 2, 245, 249, 229, 26, 85, 109, 2, 245, 249, 229, 115, 85, 109, 2, - 245, 249, 222, 128, 85, 109, 2, 245, 249, 247, 92, 85, 109, 2, 245, 249, - 246, 199, 85, 109, 2, 245, 249, 245, 254, 85, 109, 2, 245, 249, 246, 116, - 85, 109, 2, 245, 249, 220, 233, 85, 109, 2, 245, 249, 244, 212, 85, 109, - 2, 245, 249, 207, 229, 85, 109, 2, 245, 249, 243, 113, 85, 109, 2, 245, - 249, 207, 224, 85, 109, 2, 245, 249, 201, 201, 85, 109, 2, 245, 249, 210, - 22, 85, 109, 2, 245, 249, 209, 108, 85, 109, 2, 245, 249, 135, 85, 109, - 2, 245, 249, 209, 47, 85, 109, 2, 245, 249, 221, 191, 85, 109, 2, 245, - 249, 249, 32, 85, 109, 2, 245, 249, 218, 208, 85, 109, 2, 245, 249, 218, - 69, 85, 109, 2, 245, 249, 218, 180, 85, 109, 2, 245, 249, 224, 82, 85, - 109, 2, 245, 249, 202, 247, 85, 109, 2, 245, 249, 215, 227, 85, 109, 2, - 245, 249, 227, 49, 85, 109, 2, 245, 249, 205, 189, 85, 109, 2, 245, 249, - 213, 90, 85, 109, 2, 245, 249, 211, 164, 85, 109, 2, 245, 249, 215, 36, - 85, 109, 2, 245, 249, 152, 85, 109, 2, 245, 249, 228, 113, 85, 22, 2, - 245, 249, 217, 126, 85, 231, 36, 22, 2, 245, 249, 217, 65, 85, 231, 36, - 22, 2, 245, 249, 215, 102, 85, 231, 36, 22, 2, 245, 249, 215, 95, 85, - 231, 36, 22, 2, 245, 249, 217, 106, 85, 22, 2, 220, 39, 85, 22, 2, 251, - 242, 172, 1, 248, 79, 222, 203, 172, 1, 248, 79, 222, 151, 172, 1, 248, - 79, 222, 116, 172, 1, 248, 79, 222, 190, 172, 1, 248, 79, 222, 128, 67, - 1, 248, 79, 222, 203, 67, 1, 248, 79, 222, 151, 67, 1, 248, 79, 222, 116, - 67, 1, 248, 79, 222, 190, 67, 1, 248, 79, 222, 128, 67, 1, 251, 57, 246, - 238, 67, 1, 251, 57, 207, 203, 67, 1, 251, 57, 135, 67, 1, 251, 57, 219, - 184, 65, 1, 240, 198, 240, 197, 245, 188, 143, 142, 65, 1, 240, 197, 240, - 198, 245, 188, 143, 142, + 0, 208, 244, 238, 43, 81, 214, 63, 81, 41, 54, 240, 194, 54, 216, 27, 54, + 251, 89, 251, 13, 49, 216, 115, 51, 216, 115, 250, 165, 93, 54, 246, 70, + 233, 32, 236, 183, 208, 76, 209, 16, 17, 199, 81, 17, 102, 17, 105, 17, + 147, 17, 149, 17, 164, 17, 187, 17, 210, 135, 17, 192, 17, 219, 113, 246, + 79, 210, 167, 224, 241, 54, 238, 122, 54, 235, 67, 54, 214, 79, 81, 246, + 68, 250, 155, 8, 6, 1, 62, 8, 6, 1, 250, 103, 8, 6, 1, 247, 223, 8, 6, 1, + 242, 153, 8, 6, 1, 72, 8, 6, 1, 238, 5, 8, 6, 1, 236, 156, 8, 6, 1, 234, + 247, 8, 6, 1, 70, 8, 6, 1, 227, 251, 8, 6, 1, 227, 118, 8, 6, 1, 156, 8, + 6, 1, 223, 243, 8, 6, 1, 220, 214, 8, 6, 1, 74, 8, 6, 1, 216, 226, 8, 6, + 1, 214, 167, 8, 6, 1, 146, 8, 6, 1, 212, 122, 8, 6, 1, 207, 83, 8, 6, 1, + 66, 8, 6, 1, 203, 168, 8, 6, 1, 201, 147, 8, 6, 1, 200, 195, 8, 6, 1, + 200, 123, 8, 6, 1, 199, 157, 49, 52, 159, 213, 106, 209, 16, 51, 52, 159, + 246, 147, 251, 251, 128, 224, 176, 235, 74, 251, 251, 8, 4, 1, 62, 8, 4, + 1, 250, 103, 8, 4, 1, 247, 223, 8, 4, 1, 242, 153, 8, 4, 1, 72, 8, 4, 1, + 238, 5, 8, 4, 1, 236, 156, 8, 4, 1, 234, 247, 8, 4, 1, 70, 8, 4, 1, 227, + 251, 8, 4, 1, 227, 118, 8, 4, 1, 156, 8, 4, 1, 223, 243, 8, 4, 1, 220, + 214, 8, 4, 1, 74, 8, 4, 1, 216, 226, 8, 4, 1, 214, 167, 8, 4, 1, 146, 8, + 4, 1, 212, 122, 8, 4, 1, 207, 83, 8, 4, 1, 66, 8, 4, 1, 203, 168, 8, 4, + 1, 201, 147, 8, 4, 1, 200, 195, 8, 4, 1, 200, 123, 8, 4, 1, 199, 157, 49, + 242, 196, 159, 83, 224, 176, 51, 242, 196, 159, 205, 240, 218, 240, 208, + 244, 228, 50, 238, 43, 81, 247, 58, 54, 215, 56, 54, 242, 195, 54, 200, + 42, 54, 248, 46, 148, 211, 193, 54, 241, 74, 243, 19, 54, 237, 128, 217, + 29, 228, 99, 225, 23, 53, 251, 71, 214, 63, 81, 218, 215, 54, 209, 23, + 233, 33, 213, 161, 54, 222, 228, 241, 155, 54, 215, 112, 54, 207, 213, + 105, 207, 213, 147, 251, 239, 251, 251, 221, 209, 54, 215, 163, 54, 101, + 240, 182, 247, 69, 207, 213, 102, 222, 136, 217, 29, 228, 99, 213, 41, + 53, 251, 71, 214, 63, 81, 201, 164, 236, 219, 112, 214, 87, 201, 164, + 236, 219, 112, 234, 213, 201, 164, 236, 219, 126, 214, 85, 228, 50, 214, + 79, 81, 8, 6, 1, 35, 3, 235, 73, 8, 6, 1, 35, 3, 169, 8, 6, 1, 35, 3, + 246, 146, 8, 6, 1, 35, 3, 205, 240, 8, 6, 1, 35, 3, 241, 74, 8, 6, 1, 35, + 3, 213, 27, 56, 8, 6, 1, 251, 221, 8, 6, 1, 247, 224, 3, 247, 69, 8, 6, + 1, 197, 3, 235, 73, 8, 6, 1, 197, 3, 169, 8, 6, 1, 197, 3, 246, 146, 8, + 6, 1, 197, 3, 241, 74, 8, 6, 1, 233, 19, 3, 235, 73, 8, 6, 1, 233, 19, 3, + 169, 8, 6, 1, 233, 19, 3, 246, 146, 8, 6, 1, 233, 19, 3, 241, 74, 8, 6, + 1, 238, 74, 8, 6, 1, 220, 215, 3, 205, 240, 8, 6, 1, 163, 3, 235, 73, 8, + 6, 1, 163, 3, 169, 8, 6, 1, 163, 3, 246, 146, 8, 6, 1, 163, 3, 205, 240, + 8, 6, 1, 163, 3, 241, 74, 221, 19, 54, 8, 6, 1, 163, 3, 97, 8, 6, 1, 108, + 3, 235, 73, 8, 6, 1, 108, 3, 169, 8, 6, 1, 108, 3, 246, 146, 8, 6, 1, + 108, 3, 241, 74, 8, 6, 1, 200, 124, 3, 169, 8, 6, 1, 206, 54, 8, 4, 1, + 210, 79, 212, 122, 8, 4, 1, 35, 3, 235, 73, 8, 4, 1, 35, 3, 169, 8, 4, 1, + 35, 3, 246, 146, 8, 4, 1, 35, 3, 205, 240, 8, 4, 1, 35, 3, 241, 74, 8, 4, + 1, 35, 3, 213, 27, 56, 8, 4, 1, 251, 221, 8, 4, 1, 247, 224, 3, 247, 69, + 8, 4, 1, 197, 3, 235, 73, 8, 4, 1, 197, 3, 169, 8, 4, 1, 197, 3, 246, + 146, 8, 4, 1, 197, 3, 241, 74, 8, 4, 1, 233, 19, 3, 235, 73, 8, 4, 1, + 233, 19, 3, 169, 8, 4, 1, 233, 19, 3, 246, 146, 8, 4, 1, 233, 19, 3, 241, + 74, 8, 4, 1, 238, 74, 8, 4, 1, 220, 215, 3, 205, 240, 8, 4, 1, 163, 3, + 235, 73, 8, 4, 1, 163, 3, 169, 8, 4, 1, 163, 3, 246, 146, 8, 4, 1, 163, + 3, 205, 240, 8, 4, 1, 163, 3, 241, 74, 240, 235, 54, 8, 4, 1, 163, 3, 97, + 8, 4, 1, 108, 3, 235, 73, 8, 4, 1, 108, 3, 169, 8, 4, 1, 108, 3, 246, + 146, 8, 4, 1, 108, 3, 241, 74, 8, 4, 1, 200, 124, 3, 169, 8, 4, 1, 206, + 54, 8, 4, 1, 200, 124, 3, 241, 74, 8, 6, 1, 35, 3, 222, 228, 8, 4, 1, 35, + 3, 222, 228, 8, 6, 1, 35, 3, 248, 57, 8, 4, 1, 35, 3, 248, 57, 8, 6, 1, + 35, 3, 217, 110, 8, 4, 1, 35, 3, 217, 110, 8, 6, 1, 247, 224, 3, 169, 8, + 4, 1, 247, 224, 3, 169, 8, 6, 1, 247, 224, 3, 246, 146, 8, 4, 1, 247, + 224, 3, 246, 146, 8, 6, 1, 247, 224, 3, 73, 56, 8, 4, 1, 247, 224, 3, 73, + 56, 8, 6, 1, 247, 224, 3, 247, 125, 8, 4, 1, 247, 224, 3, 247, 125, 8, 6, + 1, 242, 154, 3, 247, 125, 8, 4, 1, 242, 154, 3, 247, 125, 8, 6, 1, 242, + 154, 3, 97, 8, 4, 1, 242, 154, 3, 97, 8, 6, 1, 197, 3, 222, 228, 8, 4, 1, + 197, 3, 222, 228, 8, 6, 1, 197, 3, 248, 57, 8, 4, 1, 197, 3, 248, 57, 8, + 6, 1, 197, 3, 73, 56, 8, 4, 1, 197, 3, 73, 56, 8, 6, 1, 197, 3, 217, 110, + 8, 4, 1, 197, 3, 217, 110, 8, 6, 1, 197, 3, 247, 125, 8, 4, 1, 197, 3, + 247, 125, 8, 6, 1, 236, 157, 3, 246, 146, 8, 4, 1, 236, 157, 3, 246, 146, + 8, 6, 1, 236, 157, 3, 248, 57, 8, 4, 1, 236, 157, 3, 248, 57, 8, 6, 1, + 236, 157, 3, 73, 56, 8, 4, 1, 236, 157, 3, 73, 56, 8, 6, 1, 236, 157, 3, + 247, 69, 8, 4, 1, 236, 157, 3, 247, 69, 8, 6, 1, 234, 248, 3, 246, 146, + 8, 4, 1, 234, 248, 3, 246, 146, 8, 6, 1, 234, 248, 3, 97, 8, 4, 1, 234, + 248, 3, 97, 8, 6, 1, 233, 19, 3, 205, 240, 8, 4, 1, 233, 19, 3, 205, 240, + 8, 6, 1, 233, 19, 3, 222, 228, 8, 4, 1, 233, 19, 3, 222, 228, 8, 6, 1, + 233, 19, 3, 248, 57, 8, 4, 1, 233, 19, 3, 248, 57, 8, 6, 1, 233, 19, 3, + 217, 110, 8, 4, 1, 233, 19, 3, 217, 110, 8, 6, 1, 233, 19, 3, 73, 56, 8, + 4, 1, 240, 181, 70, 8, 6, 33, 228, 149, 8, 4, 33, 228, 149, 8, 6, 1, 227, + 252, 3, 246, 146, 8, 4, 1, 227, 252, 3, 246, 146, 8, 6, 1, 227, 119, 3, + 247, 69, 8, 4, 1, 227, 119, 3, 247, 69, 8, 4, 1, 226, 37, 8, 6, 1, 225, + 193, 3, 169, 8, 4, 1, 225, 193, 3, 169, 8, 6, 1, 225, 193, 3, 247, 69, 8, + 4, 1, 225, 193, 3, 247, 69, 8, 6, 1, 225, 193, 3, 247, 125, 8, 4, 1, 225, + 193, 3, 247, 125, 8, 6, 1, 225, 193, 3, 101, 240, 182, 8, 4, 1, 225, 193, + 3, 101, 240, 182, 8, 6, 1, 225, 193, 3, 97, 8, 4, 1, 225, 193, 3, 97, 8, + 6, 1, 220, 215, 3, 169, 8, 4, 1, 220, 215, 3, 169, 8, 6, 1, 220, 215, 3, + 247, 69, 8, 4, 1, 220, 215, 3, 247, 69, 8, 6, 1, 220, 215, 3, 247, 125, + 8, 4, 1, 220, 215, 3, 247, 125, 8, 4, 1, 220, 215, 215, 30, 247, 235, + 251, 13, 8, 6, 1, 238, 165, 8, 4, 1, 238, 165, 8, 6, 1, 163, 3, 222, 228, + 8, 4, 1, 163, 3, 222, 228, 8, 6, 1, 163, 3, 248, 57, 8, 4, 1, 163, 3, + 248, 57, 8, 6, 1, 163, 3, 53, 169, 8, 4, 1, 163, 3, 53, 169, 8, 6, 33, + 217, 121, 8, 4, 33, 217, 121, 8, 6, 1, 214, 33, 3, 169, 8, 4, 1, 214, 33, + 3, 169, 8, 6, 1, 214, 33, 3, 247, 69, 8, 4, 1, 214, 33, 3, 247, 69, 8, 6, + 1, 214, 33, 3, 247, 125, 8, 4, 1, 214, 33, 3, 247, 125, 8, 6, 1, 212, + 123, 3, 169, 8, 4, 1, 212, 123, 3, 169, 8, 6, 1, 212, 123, 3, 246, 146, + 8, 4, 1, 212, 123, 3, 246, 146, 8, 6, 1, 212, 123, 3, 247, 69, 8, 4, 1, + 212, 123, 3, 247, 69, 8, 6, 1, 212, 123, 3, 247, 125, 8, 4, 1, 212, 123, + 3, 247, 125, 8, 6, 1, 207, 84, 3, 247, 69, 8, 4, 1, 207, 84, 3, 247, 69, + 8, 6, 1, 207, 84, 3, 247, 125, 8, 4, 1, 207, 84, 3, 247, 125, 8, 6, 1, + 207, 84, 3, 97, 8, 4, 1, 207, 84, 3, 97, 8, 6, 1, 108, 3, 205, 240, 8, 4, + 1, 108, 3, 205, 240, 8, 6, 1, 108, 3, 222, 228, 8, 4, 1, 108, 3, 222, + 228, 8, 6, 1, 108, 3, 248, 57, 8, 4, 1, 108, 3, 248, 57, 8, 6, 1, 108, 3, + 213, 27, 56, 8, 4, 1, 108, 3, 213, 27, 56, 8, 6, 1, 108, 3, 53, 169, 8, + 4, 1, 108, 3, 53, 169, 8, 6, 1, 108, 3, 217, 110, 8, 4, 1, 108, 3, 217, + 110, 8, 6, 1, 201, 148, 3, 246, 146, 8, 4, 1, 201, 148, 3, 246, 146, 8, + 6, 1, 200, 124, 3, 246, 146, 8, 4, 1, 200, 124, 3, 246, 146, 8, 6, 1, + 200, 124, 3, 241, 74, 8, 6, 1, 199, 158, 3, 169, 8, 4, 1, 199, 158, 3, + 169, 8, 6, 1, 199, 158, 3, 73, 56, 8, 4, 1, 199, 158, 3, 73, 56, 8, 6, 1, + 199, 158, 3, 247, 125, 8, 4, 1, 199, 158, 3, 247, 125, 8, 4, 1, 168, 212, + 122, 8, 4, 1, 68, 3, 97, 8, 6, 1, 68, 3, 117, 8, 6, 1, 68, 3, 205, 155, + 8, 4, 1, 68, 3, 205, 155, 8, 6, 1, 150, 187, 8, 4, 1, 150, 187, 8, 6, 1, + 176, 74, 8, 6, 1, 247, 224, 3, 117, 8, 4, 1, 247, 224, 3, 117, 8, 6, 1, + 251, 196, 242, 153, 8, 6, 1, 242, 154, 3, 117, 8, 6, 1, 242, 154, 3, 205, + 155, 8, 4, 1, 242, 154, 3, 205, 155, 8, 4, 1, 204, 185, 241, 136, 8, 6, + 1, 213, 105, 72, 8, 6, 1, 211, 218, 8, 6, 1, 176, 72, 8, 6, 1, 238, 6, 3, + 117, 8, 4, 1, 238, 6, 3, 117, 8, 6, 1, 236, 157, 3, 117, 8, 6, 1, 236, + 60, 8, 4, 1, 233, 69, 8, 6, 1, 228, 41, 8, 6, 1, 233, 19, 3, 97, 8, 6, 1, + 227, 119, 3, 117, 8, 4, 1, 227, 119, 3, 117, 8, 4, 1, 225, 193, 3, 148, + 8, 4, 1, 225, 89, 3, 97, 8, 6, 1, 204, 185, 223, 243, 8, 6, 1, 220, 215, + 3, 49, 117, 8, 4, 1, 220, 215, 3, 168, 51, 225, 16, 8, 6, 1, 163, 3, 101, + 205, 240, 8, 6, 1, 163, 3, 233, 124, 8, 4, 1, 163, 3, 233, 124, 8, 6, 1, + 217, 105, 8, 4, 1, 217, 105, 8, 6, 1, 216, 227, 3, 117, 8, 4, 1, 216, + 227, 3, 117, 8, 1, 199, 214, 8, 6, 1, 150, 105, 8, 4, 1, 150, 105, 8, 6, + 1, 238, 94, 8, 1, 213, 105, 238, 95, 224, 74, 8, 4, 1, 207, 84, 3, 216, + 184, 117, 8, 6, 1, 207, 84, 3, 117, 8, 4, 1, 207, 84, 3, 117, 8, 6, 1, + 207, 84, 3, 213, 111, 117, 8, 6, 1, 108, 3, 233, 124, 8, 4, 1, 108, 3, + 233, 124, 8, 6, 1, 203, 220, 8, 6, 1, 203, 169, 3, 117, 8, 6, 1, 200, + 124, 3, 117, 8, 4, 1, 200, 124, 3, 117, 8, 6, 1, 199, 158, 3, 97, 8, 4, + 1, 199, 158, 3, 97, 8, 6, 1, 238, 8, 8, 6, 1, 238, 9, 213, 104, 8, 4, 1, + 238, 9, 213, 104, 8, 4, 1, 238, 9, 3, 207, 6, 8, 1, 120, 3, 97, 8, 6, 1, + 150, 164, 8, 4, 1, 150, 164, 8, 1, 228, 50, 235, 123, 208, 77, 3, 97, 8, + 1, 200, 198, 8, 1, 241, 129, 246, 121, 8, 1, 225, 61, 246, 121, 8, 1, + 251, 102, 246, 121, 8, 1, 213, 111, 246, 121, 8, 6, 1, 239, 95, 3, 247, + 125, 8, 6, 1, 242, 154, 3, 4, 1, 199, 158, 3, 247, 125, 8, 4, 1, 239, 95, + 3, 247, 125, 8, 6, 1, 224, 142, 8, 6, 1, 225, 193, 3, 4, 1, 227, 251, 8, + 4, 1, 224, 142, 8, 6, 1, 219, 99, 8, 6, 1, 220, 215, 3, 4, 1, 227, 251, + 8, 4, 1, 219, 99, 8, 6, 1, 35, 3, 247, 125, 8, 4, 1, 35, 3, 247, 125, 8, + 6, 1, 233, 19, 3, 247, 125, 8, 4, 1, 233, 19, 3, 247, 125, 8, 6, 1, 163, + 3, 247, 125, 8, 4, 1, 163, 3, 247, 125, 8, 6, 1, 108, 3, 247, 125, 8, 4, + 1, 108, 3, 247, 125, 8, 6, 1, 108, 3, 241, 75, 26, 222, 228, 8, 4, 1, + 108, 3, 241, 75, 26, 222, 228, 8, 6, 1, 108, 3, 241, 75, 26, 169, 8, 4, + 1, 108, 3, 241, 75, 26, 169, 8, 6, 1, 108, 3, 241, 75, 26, 247, 125, 8, + 4, 1, 108, 3, 241, 75, 26, 247, 125, 8, 6, 1, 108, 3, 241, 75, 26, 235, + 73, 8, 4, 1, 108, 3, 241, 75, 26, 235, 73, 8, 4, 1, 204, 185, 72, 8, 6, + 1, 35, 3, 241, 75, 26, 222, 228, 8, 4, 1, 35, 3, 241, 75, 26, 222, 228, + 8, 6, 1, 35, 3, 73, 88, 26, 222, 228, 8, 4, 1, 35, 3, 73, 88, 26, 222, + 228, 8, 6, 1, 251, 222, 3, 222, 228, 8, 4, 1, 251, 222, 3, 222, 228, 8, + 6, 1, 236, 157, 3, 97, 8, 4, 1, 236, 157, 3, 97, 8, 6, 1, 236, 157, 3, + 247, 125, 8, 4, 1, 236, 157, 3, 247, 125, 8, 6, 1, 227, 119, 3, 247, 125, + 8, 4, 1, 227, 119, 3, 247, 125, 8, 6, 1, 163, 3, 217, 110, 8, 4, 1, 163, + 3, 217, 110, 8, 6, 1, 163, 3, 217, 111, 26, 222, 228, 8, 4, 1, 163, 3, + 217, 111, 26, 222, 228, 8, 6, 1, 238, 9, 3, 247, 125, 8, 4, 1, 238, 9, 3, + 247, 125, 8, 4, 1, 227, 252, 3, 247, 125, 8, 6, 1, 239, 94, 8, 6, 1, 242, + 154, 3, 4, 1, 199, 157, 8, 4, 1, 239, 94, 8, 6, 1, 236, 157, 3, 169, 8, + 4, 1, 236, 157, 3, 169, 8, 6, 1, 233, 66, 8, 6, 1, 200, 198, 8, 6, 1, + 220, 215, 3, 235, 73, 8, 4, 1, 220, 215, 3, 235, 73, 8, 6, 1, 35, 3, 213, + 27, 88, 26, 169, 8, 4, 1, 35, 3, 213, 27, 88, 26, 169, 8, 6, 1, 251, 222, + 3, 169, 8, 4, 1, 251, 222, 3, 169, 8, 6, 1, 163, 3, 208, 47, 26, 169, 8, + 4, 1, 163, 3, 208, 47, 26, 169, 8, 6, 1, 35, 3, 53, 235, 73, 8, 4, 1, 35, + 3, 53, 235, 73, 8, 6, 1, 35, 3, 228, 50, 248, 57, 8, 4, 1, 35, 3, 228, + 50, 248, 57, 8, 6, 1, 197, 3, 53, 235, 73, 8, 4, 1, 197, 3, 53, 235, 73, + 8, 6, 1, 197, 3, 228, 50, 248, 57, 8, 4, 1, 197, 3, 228, 50, 248, 57, 8, + 6, 1, 233, 19, 3, 53, 235, 73, 8, 4, 1, 233, 19, 3, 53, 235, 73, 8, 6, 1, + 233, 19, 3, 228, 50, 248, 57, 8, 4, 1, 233, 19, 3, 228, 50, 248, 57, 8, + 6, 1, 163, 3, 53, 235, 73, 8, 4, 1, 163, 3, 53, 235, 73, 8, 6, 1, 163, 3, + 228, 50, 248, 57, 8, 4, 1, 163, 3, 228, 50, 248, 57, 8, 6, 1, 214, 33, 3, + 53, 235, 73, 8, 4, 1, 214, 33, 3, 53, 235, 73, 8, 6, 1, 214, 33, 3, 228, + 50, 248, 57, 8, 4, 1, 214, 33, 3, 228, 50, 248, 57, 8, 6, 1, 108, 3, 53, + 235, 73, 8, 4, 1, 108, 3, 53, 235, 73, 8, 6, 1, 108, 3, 228, 50, 248, 57, + 8, 4, 1, 108, 3, 228, 50, 248, 57, 8, 6, 1, 212, 123, 3, 246, 71, 57, 8, + 4, 1, 212, 123, 3, 246, 71, 57, 8, 6, 1, 207, 84, 3, 246, 71, 57, 8, 4, + 1, 207, 84, 3, 246, 71, 57, 8, 6, 1, 199, 232, 8, 4, 1, 199, 232, 8, 6, + 1, 234, 248, 3, 247, 125, 8, 4, 1, 234, 248, 3, 247, 125, 8, 6, 1, 220, + 215, 3, 168, 51, 225, 16, 8, 4, 1, 242, 154, 3, 242, 198, 8, 6, 1, 217, + 3, 8, 4, 1, 217, 3, 8, 6, 1, 199, 158, 3, 117, 8, 4, 1, 199, 158, 3, 117, + 8, 6, 1, 35, 3, 73, 56, 8, 4, 1, 35, 3, 73, 56, 8, 6, 1, 197, 3, 247, 69, + 8, 4, 1, 197, 3, 247, 69, 8, 6, 1, 163, 3, 241, 75, 26, 222, 228, 8, 4, + 1, 163, 3, 241, 75, 26, 222, 228, 8, 6, 1, 163, 3, 205, 241, 26, 222, + 228, 8, 4, 1, 163, 3, 205, 241, 26, 222, 228, 8, 6, 1, 163, 3, 73, 56, 8, + 4, 1, 163, 3, 73, 56, 8, 6, 1, 163, 3, 73, 88, 26, 222, 228, 8, 4, 1, + 163, 3, 73, 88, 26, 222, 228, 8, 6, 1, 200, 124, 3, 222, 228, 8, 4, 1, + 200, 124, 3, 222, 228, 8, 4, 1, 225, 193, 3, 242, 198, 8, 4, 1, 220, 215, + 3, 242, 198, 8, 4, 1, 207, 84, 3, 242, 198, 8, 4, 1, 240, 181, 227, 251, + 8, 4, 1, 241, 230, 241, 34, 8, 4, 1, 214, 98, 241, 34, 8, 6, 1, 35, 3, + 97, 8, 6, 1, 247, 224, 3, 97, 8, 4, 1, 247, 224, 3, 97, 8, 6, 1, 225, + 193, 3, 148, 8, 6, 1, 207, 84, 3, 241, 71, 97, 8, 4, 1, 212, 123, 3, 207, + 183, 207, 6, 8, 4, 1, 199, 158, 3, 207, 183, 207, 6, 8, 6, 1, 235, 123, + 208, 76, 8, 4, 1, 235, 123, 208, 76, 8, 6, 1, 68, 3, 97, 8, 6, 1, 108, + 148, 8, 6, 1, 204, 185, 203, 168, 8, 6, 1, 197, 3, 97, 8, 4, 1, 197, 3, + 97, 8, 6, 1, 227, 252, 3, 97, 8, 4, 1, 227, 252, 3, 97, 8, 6, 1, 4, 214, + 168, 3, 233, 187, 207, 6, 8, 4, 1, 214, 168, 3, 233, 187, 207, 6, 8, 6, + 1, 214, 33, 3, 97, 8, 4, 1, 214, 33, 3, 97, 8, 6, 1, 200, 124, 3, 97, 8, + 4, 1, 200, 124, 3, 97, 8, 4, 1, 204, 185, 62, 8, 4, 1, 251, 112, 8, 4, 1, + 204, 185, 251, 112, 8, 4, 1, 68, 3, 117, 8, 4, 1, 176, 74, 8, 4, 1, 247, + 224, 3, 242, 198, 8, 4, 1, 242, 154, 3, 207, 6, 8, 4, 1, 242, 154, 3, + 117, 8, 4, 1, 213, 105, 72, 8, 4, 1, 211, 218, 8, 4, 1, 211, 219, 3, 117, + 8, 4, 1, 176, 72, 8, 4, 1, 213, 105, 176, 72, 8, 4, 1, 213, 105, 176, + 197, 3, 117, 8, 4, 1, 246, 110, 213, 105, 176, 72, 8, 4, 1, 240, 181, + 227, 252, 3, 97, 8, 4, 1, 236, 157, 3, 117, 8, 4, 1, 135, 236, 156, 8, 1, + 4, 6, 236, 156, 8, 4, 1, 236, 60, 8, 4, 1, 213, 214, 233, 124, 8, 4, 1, + 204, 185, 234, 247, 8, 4, 1, 234, 248, 3, 117, 8, 4, 1, 234, 104, 3, 117, + 8, 4, 1, 233, 19, 3, 97, 8, 4, 1, 228, 41, 8, 1, 4, 6, 70, 8, 4, 1, 225, + 193, 3, 101, 205, 240, 8, 4, 1, 225, 193, 3, 248, 226, 8, 4, 1, 225, 193, + 3, 213, 111, 117, 8, 4, 1, 224, 226, 8, 4, 1, 204, 185, 223, 243, 8, 4, + 1, 204, 185, 223, 244, 3, 168, 225, 16, 8, 4, 1, 223, 244, 3, 117, 8, 4, + 1, 220, 215, 3, 49, 117, 8, 4, 1, 220, 215, 3, 213, 111, 117, 8, 1, 4, 6, + 220, 214, 8, 4, 1, 249, 71, 74, 8, 1, 4, 6, 217, 121, 8, 4, 1, 246, 110, + 217, 83, 8, 4, 1, 215, 229, 8, 4, 1, 204, 185, 146, 8, 4, 1, 204, 185, + 214, 33, 3, 168, 225, 16, 8, 4, 1, 204, 185, 214, 33, 3, 117, 8, 4, 1, + 214, 33, 3, 168, 225, 16, 8, 4, 1, 214, 33, 3, 207, 6, 8, 4, 1, 214, 33, + 3, 237, 68, 8, 4, 1, 213, 105, 214, 33, 3, 237, 68, 8, 1, 4, 6, 146, 8, + 1, 4, 6, 228, 50, 146, 8, 4, 1, 212, 123, 3, 117, 8, 4, 1, 238, 94, 8, 4, + 1, 240, 181, 227, 252, 3, 208, 47, 26, 117, 8, 4, 1, 208, 190, 213, 105, + 238, 94, 8, 4, 1, 238, 95, 3, 242, 198, 8, 4, 1, 204, 185, 207, 83, 8, 4, + 1, 207, 84, 3, 213, 111, 117, 8, 4, 1, 108, 148, 8, 4, 1, 203, 220, 8, 4, + 1, 203, 169, 3, 117, 8, 4, 1, 204, 185, 203, 168, 8, 4, 1, 204, 185, 201, + 147, 8, 4, 1, 204, 185, 200, 123, 8, 1, 4, 6, 200, 123, 8, 4, 1, 199, + 158, 3, 213, 111, 117, 8, 4, 1, 199, 158, 3, 242, 198, 8, 4, 1, 238, 8, + 8, 4, 1, 238, 9, 3, 242, 198, 8, 1, 235, 123, 208, 76, 8, 1, 215, 236, + 202, 189, 236, 207, 8, 1, 228, 50, 235, 123, 208, 76, 8, 1, 208, 55, 247, + 223, 8, 1, 248, 172, 246, 121, 8, 1, 4, 6, 250, 103, 8, 4, 1, 246, 110, + 176, 72, 8, 1, 4, 6, 236, 157, 3, 117, 8, 1, 4, 6, 234, 247, 8, 4, 1, + 227, 252, 3, 242, 230, 8, 4, 1, 204, 185, 227, 118, 8, 1, 4, 6, 156, 8, + 4, 1, 214, 168, 3, 117, 8, 1, 235, 123, 208, 77, 3, 97, 8, 1, 213, 105, + 235, 123, 208, 77, 3, 97, 8, 4, 1, 239, 95, 241, 34, 8, 4, 1, 241, 102, + 241, 34, 8, 4, 1, 239, 95, 241, 35, 3, 242, 198, 8, 4, 1, 205, 34, 241, + 34, 8, 4, 1, 206, 151, 241, 34, 8, 4, 1, 206, 208, 241, 35, 3, 242, 198, + 8, 4, 1, 237, 125, 241, 34, 8, 4, 1, 224, 44, 241, 34, 8, 4, 1, 223, 245, + 241, 34, 8, 1, 248, 172, 216, 26, 8, 1, 248, 180, 216, 26, 8, 4, 1, 204, + 185, 234, 248, 3, 237, 68, 8, 4, 1, 204, 185, 234, 248, 3, 237, 69, 26, + 207, 6, 67, 1, 4, 234, 247, 67, 1, 4, 234, 248, 3, 117, 67, 1, 4, 227, + 251, 67, 1, 4, 146, 67, 1, 4, 204, 185, 146, 67, 1, 4, 204, 185, 214, 33, + 3, 117, 67, 1, 4, 6, 228, 50, 146, 67, 1, 4, 201, 147, 67, 1, 4, 200, + 123, 67, 1, 215, 14, 67, 1, 53, 215, 14, 67, 1, 204, 185, 246, 70, 67, 1, + 251, 13, 67, 1, 213, 105, 246, 70, 67, 1, 51, 167, 213, 26, 67, 1, 49, + 167, 213, 26, 67, 1, 235, 123, 208, 76, 67, 1, 213, 105, 235, 123, 208, + 76, 67, 1, 49, 250, 202, 67, 1, 51, 250, 202, 67, 1, 115, 250, 202, 67, + 1, 127, 250, 202, 67, 1, 246, 147, 251, 251, 247, 125, 67, 1, 83, 224, + 176, 67, 1, 222, 228, 67, 1, 251, 239, 251, 251, 67, 1, 235, 74, 251, + 251, 67, 1, 128, 83, 224, 176, 67, 1, 128, 222, 228, 67, 1, 128, 235, 74, + 251, 251, 67, 1, 128, 251, 239, 251, 251, 67, 1, 205, 95, 246, 79, 67, 1, + 167, 205, 95, 246, 79, 67, 1, 247, 54, 51, 167, 213, 26, 67, 1, 247, 54, + 49, 167, 213, 26, 67, 1, 115, 207, 17, 67, 1, 127, 207, 17, 67, 1, 93, + 54, 67, 1, 221, 157, 54, 248, 57, 73, 56, 213, 27, 56, 217, 110, 4, 205, + 240, 53, 251, 239, 251, 251, 67, 1, 213, 89, 117, 67, 1, 242, 235, 251, + 251, 67, 1, 4, 236, 60, 67, 1, 4, 156, 67, 1, 4, 212, 122, 67, 1, 4, 200, + 195, 67, 1, 4, 213, 105, 235, 123, 208, 76, 67, 1, 238, 29, 150, 148, 67, + 1, 122, 150, 148, 67, 1, 221, 206, 150, 148, 67, 1, 128, 150, 148, 67, 1, + 238, 28, 150, 148, 67, 1, 199, 255, 241, 126, 150, 81, 67, 1, 200, 76, + 241, 126, 150, 81, 67, 1, 202, 187, 67, 1, 204, 1, 67, 1, 53, 251, 13, + 67, 1, 128, 127, 250, 202, 67, 1, 128, 115, 250, 202, 67, 1, 128, 49, + 250, 202, 67, 1, 128, 51, 250, 202, 67, 1, 128, 213, 26, 67, 1, 101, 235, + 74, 251, 251, 67, 1, 101, 53, 235, 74, 251, 251, 67, 1, 101, 53, 251, + 239, 251, 251, 67, 1, 128, 205, 240, 67, 1, 213, 220, 246, 79, 67, 1, + 248, 244, 122, 205, 174, 67, 1, 238, 171, 122, 205, 174, 67, 1, 248, 244, + 128, 205, 174, 67, 1, 238, 171, 128, 205, 174, 67, 1, 210, 56, 67, 1, + 176, 210, 56, 67, 1, 128, 49, 48, 38, 235, 74, 251, 251, 38, 251, 239, + 251, 251, 38, 246, 147, 251, 251, 38, 205, 240, 38, 222, 228, 38, 216, + 241, 38, 248, 57, 38, 73, 56, 38, 241, 74, 38, 233, 187, 56, 38, 213, 27, + 56, 38, 53, 251, 239, 251, 251, 38, 247, 125, 38, 83, 224, 177, 56, 38, + 53, 83, 224, 177, 56, 38, 53, 235, 74, 251, 251, 38, 247, 149, 38, 228, + 50, 248, 57, 38, 204, 185, 246, 71, 56, 38, 246, 71, 56, 38, 213, 105, + 246, 71, 56, 38, 246, 71, 88, 213, 46, 38, 235, 74, 251, 252, 57, 38, + 251, 239, 251, 252, 57, 38, 49, 207, 18, 57, 38, 51, 207, 18, 57, 38, 49, + 251, 71, 56, 38, 233, 124, 38, 49, 167, 213, 27, 57, 38, 115, 207, 18, + 57, 38, 127, 207, 18, 57, 38, 93, 2, 57, 38, 221, 157, 2, 57, 38, 216, + 182, 233, 187, 57, 38, 213, 111, 233, 187, 57, 38, 73, 57, 38, 241, 75, + 57, 38, 213, 27, 57, 38, 246, 71, 57, 38, 247, 69, 38, 217, 110, 38, 83, + 224, 177, 57, 38, 248, 51, 57, 38, 228, 50, 53, 250, 235, 57, 38, 247, + 126, 57, 38, 246, 147, 251, 252, 57, 38, 248, 58, 57, 38, 228, 50, 248, + 58, 57, 38, 205, 241, 57, 38, 222, 229, 57, 38, 128, 224, 176, 38, 53, + 128, 224, 176, 38, 205, 241, 216, 242, 38, 209, 250, 208, 47, 216, 242, + 38, 168, 208, 47, 216, 242, 38, 209, 250, 209, 17, 216, 242, 38, 168, + 209, 17, 216, 242, 38, 51, 167, 213, 27, 57, 38, 228, 50, 248, 51, 57, + 38, 52, 57, 38, 211, 201, 57, 38, 200, 196, 56, 38, 83, 205, 240, 38, 53, + 216, 241, 38, 235, 74, 150, 81, 38, 251, 239, 150, 81, 38, 31, 216, 20, + 38, 31, 226, 58, 38, 31, 241, 68, 205, 162, 38, 31, 199, 219, 38, 248, + 51, 56, 38, 238, 122, 2, 57, 38, 53, 83, 224, 177, 57, 38, 49, 251, 71, + 57, 38, 218, 215, 205, 241, 56, 38, 233, 193, 56, 38, 251, 117, 160, 205, + 186, 56, 38, 49, 51, 55, 57, 38, 182, 55, 57, 38, 235, 80, 227, 161, 38, + 51, 250, 203, 56, 38, 49, 167, 213, 27, 56, 38, 237, 122, 38, 200, 196, + 57, 38, 49, 250, 203, 57, 38, 51, 250, 203, 57, 38, 51, 250, 203, 26, + 115, 250, 203, 57, 38, 51, 167, 213, 27, 56, 38, 73, 88, 213, 46, 38, + 250, 166, 57, 38, 53, 213, 27, 57, 38, 199, 27, 56, 38, 53, 248, 58, 57, + 38, 53, 248, 57, 38, 53, 222, 228, 38, 53, 222, 229, 57, 38, 53, 205, + 240, 38, 53, 228, 50, 248, 57, 38, 53, 87, 55, 57, 38, 8, 4, 1, 62, 38, + 8, 4, 1, 72, 38, 8, 4, 1, 70, 38, 8, 4, 1, 74, 38, 8, 4, 1, 66, 38, 8, 4, + 1, 247, 223, 38, 8, 4, 1, 242, 153, 38, 8, 4, 1, 234, 247, 38, 8, 4, 1, + 223, 243, 38, 8, 4, 1, 146, 38, 8, 4, 1, 207, 83, 38, 8, 4, 1, 203, 168, + 38, 8, 4, 1, 200, 195, 31, 6, 1, 234, 92, 31, 4, 1, 234, 92, 31, 6, 1, + 250, 234, 212, 16, 31, 4, 1, 250, 234, 212, 16, 31, 218, 93, 54, 31, 224, + 54, 218, 93, 54, 31, 6, 1, 216, 167, 241, 42, 31, 4, 1, 216, 167, 241, + 42, 31, 199, 219, 31, 4, 213, 105, 224, 24, 209, 164, 99, 31, 4, 239, + 180, 224, 24, 209, 164, 99, 31, 4, 213, 105, 239, 180, 224, 24, 209, 164, + 99, 31, 214, 79, 81, 31, 6, 1, 199, 225, 31, 205, 162, 31, 241, 68, 205, + 162, 31, 6, 1, 251, 113, 3, 205, 162, 31, 251, 56, 206, 177, 31, 6, 1, + 238, 125, 3, 205, 162, 31, 6, 1, 238, 80, 3, 205, 162, 31, 6, 1, 228, 42, + 3, 205, 162, 31, 6, 1, 217, 82, 3, 205, 162, 31, 6, 1, 203, 221, 3, 205, + 162, 31, 6, 1, 217, 84, 3, 205, 162, 31, 4, 1, 228, 42, 3, 241, 68, 26, + 205, 162, 31, 6, 1, 251, 112, 31, 6, 1, 248, 208, 31, 6, 1, 236, 60, 31, + 6, 1, 241, 136, 31, 6, 1, 238, 124, 31, 6, 1, 199, 80, 31, 6, 1, 238, 79, + 31, 6, 1, 206, 88, 31, 6, 1, 228, 41, 31, 6, 1, 227, 54, 31, 6, 1, 225, + 87, 31, 6, 1, 221, 41, 31, 6, 1, 218, 133, 31, 6, 1, 200, 169, 31, 6, 1, + 217, 81, 31, 6, 1, 215, 204, 31, 6, 1, 213, 90, 31, 6, 1, 209, 163, 31, + 6, 1, 206, 221, 31, 6, 1, 203, 220, 31, 6, 1, 215, 229, 31, 6, 1, 246, + 236, 31, 6, 1, 214, 235, 31, 6, 1, 217, 83, 31, 6, 1, 228, 42, 3, 241, + 67, 31, 6, 1, 203, 221, 3, 241, 67, 31, 4, 1, 251, 113, 3, 205, 162, 31, + 4, 1, 238, 125, 3, 205, 162, 31, 4, 1, 238, 80, 3, 205, 162, 31, 4, 1, + 228, 42, 3, 205, 162, 31, 4, 1, 203, 221, 3, 241, 68, 26, 205, 162, 31, + 4, 1, 251, 112, 31, 4, 1, 248, 208, 31, 4, 1, 236, 60, 31, 4, 1, 241, + 136, 31, 4, 1, 238, 124, 31, 4, 1, 199, 80, 31, 4, 1, 238, 79, 31, 4, 1, + 206, 88, 31, 4, 1, 228, 41, 31, 4, 1, 227, 54, 31, 4, 1, 225, 87, 31, 4, + 1, 221, 41, 31, 4, 1, 218, 133, 31, 4, 1, 200, 169, 31, 4, 1, 217, 81, + 31, 4, 1, 215, 204, 31, 4, 1, 213, 90, 31, 4, 1, 47, 209, 163, 31, 4, 1, + 209, 163, 31, 4, 1, 206, 221, 31, 4, 1, 203, 220, 31, 4, 1, 215, 229, 31, + 4, 1, 246, 236, 31, 4, 1, 214, 235, 31, 4, 1, 217, 83, 31, 4, 1, 228, 42, + 3, 241, 67, 31, 4, 1, 203, 221, 3, 241, 67, 31, 4, 1, 217, 82, 3, 205, + 162, 31, 4, 1, 203, 221, 3, 205, 162, 31, 4, 1, 217, 84, 3, 205, 162, 31, + 6, 227, 83, 99, 31, 248, 209, 99, 31, 206, 89, 99, 31, 203, 221, 3, 233, + 187, 99, 31, 203, 221, 3, 251, 239, 26, 233, 187, 99, 31, 203, 221, 3, + 241, 75, 26, 233, 187, 99, 31, 215, 230, 99, 31, 215, 205, 99, 31, 227, + 83, 99, 31, 1, 250, 234, 226, 62, 31, 4, 1, 250, 234, 226, 62, 31, 1, + 208, 86, 31, 4, 1, 208, 86, 31, 1, 241, 42, 31, 4, 1, 241, 42, 31, 1, + 226, 62, 31, 4, 1, 226, 62, 31, 1, 212, 16, 31, 4, 1, 212, 16, 85, 6, 1, + 210, 57, 85, 4, 1, 210, 57, 85, 6, 1, 237, 132, 85, 4, 1, 237, 132, 85, + 6, 1, 226, 190, 85, 4, 1, 226, 190, 85, 6, 1, 233, 178, 85, 4, 1, 233, + 178, 85, 6, 1, 236, 55, 85, 4, 1, 236, 55, 85, 6, 1, 210, 23, 85, 4, 1, + 210, 23, 85, 6, 1, 241, 152, 85, 4, 1, 241, 152, 31, 227, 55, 99, 31, + 213, 91, 99, 31, 224, 24, 209, 164, 99, 31, 1, 199, 225, 31, 6, 206, 89, + 99, 31, 224, 24, 238, 125, 99, 31, 213, 105, 224, 24, 238, 125, 99, 31, + 6, 1, 210, 8, 31, 4, 1, 210, 8, 31, 6, 224, 24, 209, 164, 99, 31, 6, 1, + 212, 13, 31, 4, 1, 212, 13, 31, 213, 91, 3, 208, 47, 99, 31, 6, 213, 105, + 224, 24, 209, 164, 99, 31, 6, 239, 180, 224, 24, 209, 164, 99, 31, 6, + 213, 105, 239, 180, 224, 24, 209, 164, 99, 37, 6, 1, 228, 179, 3, 235, + 73, 37, 6, 1, 228, 45, 37, 6, 1, 240, 228, 37, 6, 1, 235, 132, 37, 6, 1, + 204, 17, 228, 178, 37, 6, 1, 239, 90, 37, 6, 1, 247, 233, 70, 37, 6, 1, + 200, 9, 37, 6, 1, 227, 227, 37, 6, 1, 224, 141, 37, 6, 1, 219, 91, 37, 6, + 1, 205, 20, 37, 6, 1, 226, 111, 37, 6, 1, 233, 19, 3, 235, 73, 37, 6, 1, + 209, 250, 66, 37, 6, 1, 239, 86, 37, 6, 1, 62, 37, 6, 1, 249, 8, 37, 6, + 1, 203, 59, 37, 6, 1, 235, 185, 37, 6, 1, 241, 175, 37, 6, 1, 228, 178, + 37, 6, 1, 199, 68, 37, 6, 1, 199, 89, 37, 6, 1, 70, 37, 6, 1, 209, 250, + 70, 37, 6, 1, 161, 37, 6, 1, 238, 209, 37, 6, 1, 238, 190, 37, 6, 1, 238, + 179, 37, 6, 1, 74, 37, 6, 1, 216, 73, 37, 6, 1, 238, 115, 37, 6, 1, 238, + 104, 37, 6, 1, 206, 201, 37, 6, 1, 66, 37, 6, 1, 238, 248, 37, 6, 1, 144, + 37, 6, 1, 205, 26, 37, 6, 1, 247, 8, 37, 6, 1, 210, 114, 37, 6, 1, 210, + 68, 37, 6, 1, 234, 165, 54, 37, 6, 1, 200, 29, 37, 6, 1, 209, 23, 54, 37, + 6, 1, 72, 37, 6, 1, 199, 211, 37, 6, 1, 183, 37, 4, 1, 62, 37, 4, 1, 249, + 8, 37, 4, 1, 203, 59, 37, 4, 1, 235, 185, 37, 4, 1, 241, 175, 37, 4, 1, + 228, 178, 37, 4, 1, 199, 68, 37, 4, 1, 199, 89, 37, 4, 1, 70, 37, 4, 1, + 209, 250, 70, 37, 4, 1, 161, 37, 4, 1, 238, 209, 37, 4, 1, 238, 190, 37, + 4, 1, 238, 179, 37, 4, 1, 74, 37, 4, 1, 216, 73, 37, 4, 1, 238, 115, 37, + 4, 1, 238, 104, 37, 4, 1, 206, 201, 37, 4, 1, 66, 37, 4, 1, 238, 248, 37, + 4, 1, 144, 37, 4, 1, 205, 26, 37, 4, 1, 247, 8, 37, 4, 1, 210, 114, 37, + 4, 1, 210, 68, 37, 4, 1, 234, 165, 54, 37, 4, 1, 200, 29, 37, 4, 1, 209, + 23, 54, 37, 4, 1, 72, 37, 4, 1, 199, 211, 37, 4, 1, 183, 37, 4, 1, 228, + 179, 3, 235, 73, 37, 4, 1, 228, 45, 37, 4, 1, 240, 228, 37, 4, 1, 235, + 132, 37, 4, 1, 204, 17, 228, 178, 37, 4, 1, 239, 90, 37, 4, 1, 247, 233, + 70, 37, 4, 1, 200, 9, 37, 4, 1, 227, 227, 37, 4, 1, 224, 141, 37, 4, 1, + 219, 91, 37, 4, 1, 205, 20, 37, 4, 1, 226, 111, 37, 4, 1, 233, 19, 3, + 235, 73, 37, 4, 1, 209, 250, 66, 37, 4, 1, 239, 86, 37, 6, 1, 217, 83, + 37, 4, 1, 217, 83, 37, 6, 1, 200, 65, 37, 4, 1, 200, 65, 37, 6, 1, 228, + 39, 72, 37, 4, 1, 228, 39, 72, 37, 6, 1, 224, 148, 199, 181, 37, 4, 1, + 224, 148, 199, 181, 37, 6, 1, 228, 39, 224, 148, 199, 181, 37, 4, 1, 228, + 39, 224, 148, 199, 181, 37, 6, 1, 248, 175, 199, 181, 37, 4, 1, 248, 175, + 199, 181, 37, 6, 1, 228, 39, 248, 175, 199, 181, 37, 4, 1, 228, 39, 248, + 175, 199, 181, 37, 6, 1, 226, 31, 37, 4, 1, 226, 31, 37, 6, 1, 214, 235, + 37, 4, 1, 214, 235, 37, 6, 1, 237, 63, 37, 4, 1, 237, 63, 37, 6, 1, 227, + 253, 37, 4, 1, 227, 253, 37, 6, 1, 227, 254, 3, 53, 235, 74, 251, 251, + 37, 4, 1, 227, 254, 3, 53, 235, 74, 251, 251, 37, 6, 1, 204, 20, 37, 4, + 1, 204, 20, 37, 6, 1, 212, 221, 217, 83, 37, 4, 1, 212, 221, 217, 83, 37, + 6, 1, 217, 84, 3, 205, 210, 37, 4, 1, 217, 84, 3, 205, 210, 37, 6, 1, + 217, 11, 37, 4, 1, 217, 11, 37, 6, 1, 226, 62, 37, 4, 1, 226, 62, 37, + 206, 49, 54, 38, 37, 205, 210, 38, 37, 216, 183, 38, 37, 241, 242, 215, + 108, 38, 37, 214, 229, 215, 108, 38, 37, 215, 92, 38, 37, 233, 83, 206, + 49, 54, 38, 37, 221, 168, 54, 37, 6, 1, 209, 250, 233, 19, 3, 207, 6, 37, + 4, 1, 209, 250, 233, 19, 3, 207, 6, 37, 6, 1, 210, 163, 54, 37, 4, 1, + 210, 163, 54, 37, 6, 1, 238, 116, 3, 206, 11, 37, 4, 1, 238, 116, 3, 206, + 11, 37, 6, 1, 235, 186, 3, 203, 219, 37, 4, 1, 235, 186, 3, 203, 219, 37, + 6, 1, 235, 186, 3, 97, 37, 4, 1, 235, 186, 3, 97, 37, 6, 1, 235, 186, 3, + 101, 117, 37, 4, 1, 235, 186, 3, 101, 117, 37, 6, 1, 199, 69, 3, 241, + 119, 37, 4, 1, 199, 69, 3, 241, 119, 37, 6, 1, 199, 90, 3, 241, 119, 37, + 4, 1, 199, 90, 3, 241, 119, 37, 6, 1, 227, 108, 3, 241, 119, 37, 4, 1, + 227, 108, 3, 241, 119, 37, 6, 1, 227, 108, 3, 83, 97, 37, 4, 1, 227, 108, + 3, 83, 97, 37, 6, 1, 227, 108, 3, 97, 37, 4, 1, 227, 108, 3, 97, 37, 6, + 1, 249, 60, 161, 37, 4, 1, 249, 60, 161, 37, 6, 1, 238, 180, 3, 241, 119, + 37, 4, 1, 238, 180, 3, 241, 119, 37, 6, 33, 238, 180, 235, 185, 37, 4, + 33, 238, 180, 235, 185, 37, 6, 1, 216, 74, 3, 101, 117, 37, 4, 1, 216, + 74, 3, 101, 117, 37, 6, 1, 252, 2, 144, 37, 4, 1, 252, 2, 144, 37, 6, 1, + 238, 105, 3, 241, 119, 37, 4, 1, 238, 105, 3, 241, 119, 37, 6, 1, 206, + 202, 3, 241, 119, 37, 4, 1, 206, 202, 3, 241, 119, 37, 6, 1, 208, 68, 66, + 37, 4, 1, 208, 68, 66, 37, 6, 1, 208, 68, 108, 3, 97, 37, 4, 1, 208, 68, + 108, 3, 97, 37, 6, 1, 234, 236, 3, 241, 119, 37, 4, 1, 234, 236, 3, 241, + 119, 37, 6, 33, 206, 202, 205, 26, 37, 4, 33, 206, 202, 205, 26, 37, 6, + 1, 247, 9, 3, 241, 119, 37, 4, 1, 247, 9, 3, 241, 119, 37, 6, 1, 247, 9, + 3, 83, 97, 37, 4, 1, 247, 9, 3, 83, 97, 37, 6, 1, 210, 34, 37, 4, 1, 210, + 34, 37, 6, 1, 252, 2, 247, 8, 37, 4, 1, 252, 2, 247, 8, 37, 6, 1, 252, 2, + 247, 9, 3, 241, 119, 37, 4, 1, 252, 2, 247, 9, 3, 241, 119, 37, 1, 216, + 174, 37, 6, 1, 199, 69, 3, 248, 57, 37, 4, 1, 199, 69, 3, 248, 57, 37, 6, + 1, 227, 108, 3, 117, 37, 4, 1, 227, 108, 3, 117, 37, 6, 1, 238, 210, 3, + 207, 6, 37, 4, 1, 238, 210, 3, 207, 6, 37, 6, 1, 238, 180, 3, 117, 37, 4, + 1, 238, 180, 3, 117, 37, 6, 1, 238, 180, 3, 207, 6, 37, 4, 1, 238, 180, + 3, 207, 6, 37, 6, 1, 226, 201, 247, 8, 37, 4, 1, 226, 201, 247, 8, 37, 6, + 1, 238, 191, 3, 207, 6, 37, 4, 1, 238, 191, 3, 207, 6, 37, 4, 1, 216, + 174, 37, 6, 1, 35, 3, 248, 57, 37, 4, 1, 35, 3, 248, 57, 37, 6, 1, 35, 3, + 241, 74, 37, 4, 1, 35, 3, 241, 74, 37, 6, 33, 35, 228, 178, 37, 4, 33, + 35, 228, 178, 37, 6, 1, 228, 179, 3, 248, 57, 37, 4, 1, 228, 179, 3, 248, + 57, 37, 6, 1, 211, 218, 37, 4, 1, 211, 218, 37, 6, 1, 211, 219, 3, 241, + 74, 37, 4, 1, 211, 219, 3, 241, 74, 37, 6, 1, 199, 69, 3, 241, 74, 37, 4, + 1, 199, 69, 3, 241, 74, 37, 6, 1, 199, 90, 3, 241, 74, 37, 4, 1, 199, 90, + 3, 241, 74, 37, 6, 1, 252, 2, 239, 90, 37, 4, 1, 252, 2, 239, 90, 37, 6, + 1, 233, 19, 3, 222, 228, 37, 4, 1, 233, 19, 3, 222, 228, 37, 6, 1, 233, + 19, 3, 241, 74, 37, 4, 1, 233, 19, 3, 241, 74, 37, 6, 1, 163, 3, 241, 74, + 37, 4, 1, 163, 3, 241, 74, 37, 6, 1, 249, 71, 74, 37, 4, 1, 249, 71, 74, + 37, 6, 1, 249, 71, 163, 3, 241, 74, 37, 4, 1, 249, 71, 163, 3, 241, 74, + 37, 6, 1, 197, 3, 241, 74, 37, 4, 1, 197, 3, 241, 74, 37, 6, 1, 108, 3, + 222, 228, 37, 4, 1, 108, 3, 222, 228, 37, 6, 1, 108, 3, 241, 74, 37, 4, + 1, 108, 3, 241, 74, 37, 6, 1, 108, 3, 53, 169, 37, 4, 1, 108, 3, 53, 169, + 37, 6, 1, 247, 9, 3, 241, 74, 37, 4, 1, 247, 9, 3, 241, 74, 37, 6, 1, + 235, 186, 3, 241, 119, 37, 4, 1, 235, 186, 3, 241, 119, 37, 6, 1, 200, + 30, 3, 241, 74, 37, 4, 1, 200, 30, 3, 241, 74, 37, 6, 1, 235, 186, 3, + 208, 47, 26, 117, 37, 4, 1, 235, 186, 3, 208, 47, 26, 117, 37, 6, 1, 234, + 236, 3, 117, 37, 4, 1, 234, 236, 3, 117, 37, 6, 1, 234, 236, 3, 97, 37, + 4, 1, 234, 236, 3, 97, 37, 6, 1, 226, 72, 241, 175, 37, 4, 1, 226, 72, + 241, 175, 37, 6, 1, 226, 72, 240, 228, 37, 4, 1, 226, 72, 240, 228, 37, + 6, 1, 226, 72, 199, 18, 37, 4, 1, 226, 72, 199, 18, 37, 6, 1, 226, 72, + 239, 82, 37, 4, 1, 226, 72, 239, 82, 37, 6, 1, 226, 72, 224, 141, 37, 4, + 1, 226, 72, 224, 141, 37, 6, 1, 226, 72, 219, 91, 37, 4, 1, 226, 72, 219, + 91, 37, 6, 1, 226, 72, 209, 89, 37, 4, 1, 226, 72, 209, 89, 37, 6, 1, + 226, 72, 205, 204, 37, 4, 1, 226, 72, 205, 204, 37, 6, 1, 213, 105, 199, + 89, 37, 4, 1, 213, 105, 199, 89, 37, 6, 1, 238, 210, 3, 117, 37, 4, 1, + 238, 210, 3, 117, 37, 6, 1, 224, 223, 37, 4, 1, 224, 223, 37, 6, 1, 213, + 93, 37, 4, 1, 213, 93, 37, 6, 1, 200, 98, 37, 4, 1, 200, 98, 37, 6, 1, + 214, 159, 37, 4, 1, 214, 159, 37, 6, 1, 201, 64, 37, 4, 1, 201, 64, 37, + 6, 1, 251, 138, 161, 37, 4, 1, 251, 138, 161, 37, 6, 1, 238, 210, 3, 101, + 117, 37, 4, 1, 238, 210, 3, 101, 117, 37, 6, 1, 238, 180, 3, 101, 117, + 37, 4, 1, 238, 180, 3, 101, 117, 37, 6, 1, 216, 74, 3, 241, 119, 37, 4, + 1, 216, 74, 3, 241, 119, 37, 6, 1, 210, 35, 3, 241, 119, 37, 4, 1, 210, + 35, 3, 241, 119, 37, 6, 1, 238, 180, 3, 49, 117, 37, 4, 1, 238, 180, 3, + 49, 117, 37, 6, 1, 239, 75, 37, 4, 1, 239, 75, 37, 6, 1, 241, 224, 37, 4, + 1, 241, 224, 37, 6, 1, 238, 210, 3, 241, 119, 37, 4, 1, 238, 210, 3, 241, + 119, 184, 6, 1, 250, 109, 184, 6, 1, 248, 224, 184, 6, 1, 235, 149, 184, + 6, 1, 242, 58, 184, 6, 1, 239, 5, 184, 6, 1, 199, 114, 184, 6, 1, 238, + 241, 184, 6, 1, 238, 81, 184, 6, 1, 138, 184, 6, 1, 199, 68, 184, 6, 1, + 228, 86, 184, 6, 1, 224, 145, 184, 6, 1, 200, 173, 184, 6, 1, 247, 190, + 184, 6, 1, 226, 243, 184, 6, 1, 233, 207, 184, 6, 1, 227, 248, 184, 6, 1, + 235, 196, 184, 6, 1, 246, 254, 184, 6, 1, 222, 40, 184, 6, 1, 200, 9, + 184, 6, 1, 218, 201, 184, 6, 1, 210, 114, 184, 6, 1, 202, 193, 184, 6, 1, + 247, 37, 184, 6, 1, 216, 54, 184, 6, 1, 227, 210, 184, 6, 1, 213, 252, + 184, 6, 1, 211, 180, 184, 6, 1, 202, 238, 184, 6, 1, 205, 207, 184, 6, 1, + 213, 154, 184, 6, 1, 246, 91, 184, 6, 1, 199, 250, 184, 6, 1, 215, 139, + 184, 6, 1, 226, 254, 184, 6, 1, 217, 108, 184, 6, 1, 237, 134, 184, 67, + 1, 49, 167, 213, 26, 184, 251, 13, 184, 238, 183, 81, 184, 238, 43, 81, + 184, 246, 70, 184, 214, 79, 81, 184, 252, 3, 81, 184, 4, 1, 250, 109, + 184, 4, 1, 248, 224, 184, 4, 1, 235, 149, 184, 4, 1, 242, 58, 184, 4, 1, + 239, 5, 184, 4, 1, 199, 114, 184, 4, 1, 238, 241, 184, 4, 1, 238, 81, + 184, 4, 1, 138, 184, 4, 1, 199, 68, 184, 4, 1, 228, 86, 184, 4, 1, 224, + 145, 184, 4, 1, 200, 173, 184, 4, 1, 247, 190, 184, 4, 1, 226, 243, 184, + 4, 1, 233, 207, 184, 4, 1, 227, 248, 184, 4, 1, 235, 196, 184, 4, 1, 246, + 254, 184, 4, 1, 222, 40, 184, 4, 1, 200, 9, 184, 4, 1, 218, 201, 184, 4, + 1, 210, 114, 184, 4, 1, 202, 193, 184, 4, 1, 247, 37, 184, 4, 1, 216, 54, + 184, 4, 1, 227, 210, 184, 4, 1, 213, 252, 184, 4, 1, 211, 180, 184, 4, 1, + 202, 238, 184, 4, 1, 205, 207, 184, 4, 1, 213, 154, 184, 4, 1, 246, 91, + 184, 4, 1, 199, 250, 184, 4, 1, 215, 139, 184, 4, 1, 226, 254, 184, 4, 1, + 217, 108, 184, 4, 1, 237, 134, 184, 4, 33, 239, 6, 199, 250, 184, 236, + 183, 208, 76, 184, 233, 33, 213, 45, 184, 238, 77, 54, 225, 27, 184, 238, + 77, 54, 184, 239, 157, 54, 113, 251, 252, 238, 72, 113, 251, 252, 211, + 181, 113, 251, 252, 210, 92, 113, 251, 252, 199, 100, 214, 142, 113, 251, + 252, 199, 100, 236, 79, 113, 251, 252, 205, 222, 113, 251, 252, 213, 102, + 113, 251, 252, 199, 98, 113, 251, 252, 216, 100, 113, 251, 252, 200, 22, + 113, 251, 252, 206, 129, 113, 251, 252, 235, 247, 113, 251, 252, 235, + 248, 221, 3, 113, 251, 252, 235, 245, 113, 251, 252, 214, 143, 216, 129, + 113, 251, 252, 206, 172, 236, 8, 113, 251, 252, 216, 79, 113, 251, 252, + 250, 148, 234, 228, 113, 251, 252, 221, 13, 113, 251, 252, 222, 203, 113, + 251, 252, 222, 29, 113, 251, 252, 222, 30, 226, 255, 113, 251, 252, 241, + 251, 113, 251, 252, 214, 154, 113, 251, 252, 206, 172, 214, 137, 113, + 251, 252, 200, 32, 248, 225, 199, 231, 113, 251, 252, 217, 90, 113, 251, + 252, 228, 137, 113, 251, 252, 241, 153, 113, 251, 252, 199, 25, 113, 134, + 222, 131, 246, 155, 113, 215, 100, 210, 37, 113, 215, 100, 234, 156, 211, + 181, 113, 215, 100, 234, 156, 216, 93, 113, 215, 100, 234, 156, 214, 147, + 113, 215, 100, 234, 47, 113, 215, 100, 205, 23, 113, 215, 100, 211, 181, + 113, 215, 100, 216, 93, 113, 215, 100, 214, 147, 113, 215, 100, 233, 199, + 113, 215, 100, 233, 200, 234, 158, 36, 203, 63, 113, 215, 100, 214, 83, + 113, 215, 100, 242, 43, 217, 34, 222, 163, 113, 215, 100, 222, 19, 113, + 214, 212, 222, 160, 113, 215, 100, 213, 232, 113, 214, 212, 216, 102, + 113, 215, 100, 210, 22, 240, 182, 113, 215, 100, 209, 143, 240, 182, 113, + 214, 212, 209, 24, 216, 95, 113, 134, 203, 225, 240, 182, 113, 134, 224, + 54, 240, 182, 113, 214, 212, 218, 90, 234, 227, 113, 215, 100, 214, 148, + 214, 142, 113, 1, 251, 142, 113, 1, 248, 210, 113, 1, 235, 147, 113, 1, + 242, 23, 113, 1, 234, 139, 113, 1, 203, 63, 113, 1, 199, 92, 113, 1, 234, + 93, 113, 1, 206, 146, 113, 1, 199, 234, 113, 1, 47, 227, 86, 113, 1, 227, + 86, 113, 1, 225, 83, 113, 1, 47, 222, 47, 113, 1, 222, 47, 113, 1, 47, + 218, 89, 113, 1, 218, 89, 113, 1, 212, 19, 113, 1, 250, 107, 113, 1, 47, + 216, 73, 113, 1, 216, 73, 113, 1, 47, 205, 27, 113, 1, 205, 27, 113, 1, + 214, 106, 113, 1, 213, 123, 113, 1, 210, 21, 113, 1, 206, 217, 113, 33, + 200, 7, 53, 203, 63, 113, 33, 200, 7, 203, 64, 199, 234, 113, 33, 200, 7, + 53, 199, 234, 113, 214, 212, 235, 247, 113, 214, 212, 235, 245, 9, 41, + 54, 9, 2, 212, 12, 9, 236, 253, 222, 145, 9, 2, 212, 52, 9, 2, 212, 15, + 9, 41, 134, 56, 250, 248, 242, 210, 212, 234, 250, 248, 236, 222, 212, + 234, 9, 213, 197, 250, 248, 216, 28, 221, 170, 54, 250, 248, 216, 28, + 206, 167, 206, 51, 54, 251, 198, 54, 9, 246, 70, 9, 241, 238, 210, 154, + 9, 215, 102, 203, 44, 54, 9, 2, 221, 149, 9, 2, 212, 29, 251, 145, 201, + 88, 9, 2, 251, 145, 250, 170, 9, 2, 213, 230, 251, 144, 9, 2, 213, 238, + 251, 122, 251, 63, 9, 2, 206, 254, 9, 4, 122, 207, 9, 9, 4, 122, 33, 140, + 3, 225, 92, 3, 200, 46, 9, 4, 122, 199, 105, 9, 4, 237, 158, 9, 4, 242, + 17, 9, 4, 227, 36, 9, 210, 167, 9, 1, 81, 9, 205, 83, 73, 214, 212, 81, + 9, 214, 79, 81, 9, 1, 227, 40, 200, 46, 9, 1, 234, 203, 9, 1, 140, 3, + 222, 224, 56, 9, 1, 140, 3, 234, 204, 56, 9, 1, 201, 73, 3, 234, 204, 56, + 9, 1, 140, 3, 234, 204, 57, 9, 1, 90, 3, 234, 204, 56, 9, 1, 251, 142, 9, + 1, 248, 240, 9, 1, 206, 184, 222, 156, 9, 1, 206, 183, 9, 1, 206, 102, 9, + 1, 227, 224, 9, 1, 234, 224, 9, 1, 226, 203, 9, 1, 242, 29, 9, 1, 206, + 114, 9, 1, 213, 154, 9, 1, 199, 105, 9, 1, 211, 186, 9, 1, 210, 61, 9, 1, + 212, 56, 9, 1, 242, 52, 9, 1, 207, 9, 9, 1, 199, 108, 9, 1, 251, 171, 9, + 1, 235, 194, 9, 1, 226, 253, 3, 120, 190, 56, 9, 1, 226, 253, 3, 126, + 190, 57, 9, 1, 237, 162, 90, 3, 228, 50, 203, 168, 9, 1, 237, 162, 90, 3, + 120, 190, 56, 9, 1, 237, 162, 90, 3, 126, 190, 56, 9, 206, 223, 9, 1, + 237, 134, 9, 1, 214, 152, 9, 1, 227, 86, 9, 1, 225, 91, 9, 1, 222, 61, 9, + 1, 218, 227, 9, 1, 234, 115, 9, 1, 201, 72, 9, 1, 140, 222, 187, 9, 1, + 200, 46, 9, 237, 156, 9, 242, 15, 9, 227, 34, 9, 237, 158, 9, 242, 17, 9, + 227, 36, 9, 210, 104, 9, 207, 236, 9, 222, 222, 56, 9, 234, 204, 56, 9, + 234, 204, 57, 9, 208, 4, 251, 142, 9, 228, 50, 242, 17, 9, 134, 218, 228, + 235, 165, 9, 198, 245, 9, 22, 2, 4, 203, 169, 56, 9, 22, 2, 228, 50, 4, + 203, 169, 56, 9, 22, 2, 73, 57, 9, 213, 105, 242, 17, 9, 237, 159, 3, + 120, 240, 180, 9, 201, 74, 234, 204, 57, 250, 248, 17, 199, 81, 250, 248, + 17, 102, 250, 248, 17, 105, 250, 248, 17, 147, 250, 248, 17, 149, 250, + 248, 17, 164, 250, 248, 17, 187, 250, 248, 17, 210, 135, 250, 248, 17, + 192, 250, 248, 17, 219, 113, 9, 216, 27, 54, 9, 241, 168, 210, 154, 9, + 206, 49, 210, 154, 9, 237, 61, 215, 98, 208, 109, 9, 1, 240, 181, 248, + 240, 9, 1, 240, 181, 214, 152, 9, 1, 207, 213, 251, 142, 9, 1, 140, 201, + 89, 9, 1, 140, 3, 201, 74, 234, 204, 56, 9, 1, 140, 3, 201, 74, 234, 204, + 57, 9, 1, 122, 234, 203, 9, 1, 122, 234, 204, 251, 142, 9, 1, 122, 234, + 204, 201, 72, 9, 1, 108, 3, 234, 204, 56, 9, 1, 122, 234, 204, 200, 46, + 9, 1, 204, 245, 9, 1, 204, 243, 9, 1, 248, 250, 9, 1, 206, 184, 3, 213, + 26, 9, 1, 206, 184, 3, 126, 190, 88, 239, 165, 9, 1, 216, 54, 9, 1, 206, + 181, 9, 1, 248, 238, 9, 1, 155, 3, 234, 204, 56, 9, 1, 155, 3, 120, 190, + 83, 56, 9, 1, 218, 47, 9, 1, 239, 99, 9, 1, 155, 3, 126, 190, 56, 9, 1, + 206, 205, 9, 1, 206, 203, 9, 1, 241, 215, 9, 1, 242, 30, 3, 213, 26, 9, + 1, 242, 30, 3, 73, 57, 9, 1, 242, 30, 3, 73, 248, 228, 26, 4, 207, 9, 9, + 1, 242, 36, 9, 1, 241, 217, 9, 1, 239, 127, 9, 1, 242, 30, 3, 126, 190, + 88, 239, 165, 9, 1, 242, 30, 3, 236, 229, 190, 56, 9, 1, 212, 207, 9, 1, + 213, 155, 3, 4, 203, 168, 9, 1, 213, 155, 3, 213, 26, 9, 1, 213, 155, 3, + 73, 57, 9, 1, 213, 155, 3, 4, 203, 169, 57, 9, 1, 213, 155, 3, 73, 248, + 228, 26, 73, 56, 9, 1, 213, 155, 3, 120, 190, 56, 9, 1, 227, 221, 9, 1, + 213, 155, 3, 236, 229, 190, 56, 9, 1, 211, 187, 3, 73, 248, 228, 26, 73, + 56, 9, 1, 211, 187, 3, 126, 190, 57, 9, 1, 211, 187, 3, 126, 190, 248, + 228, 26, 126, 190, 56, 9, 1, 212, 57, 3, 120, 190, 57, 9, 1, 212, 57, 3, + 126, 190, 56, 9, 1, 207, 10, 3, 126, 190, 56, 9, 1, 251, 172, 3, 126, + 190, 56, 9, 1, 240, 181, 237, 134, 9, 1, 237, 135, 3, 73, 221, 56, 57, 9, + 1, 237, 135, 3, 73, 57, 9, 1, 203, 52, 9, 1, 237, 135, 3, 126, 190, 57, + 9, 1, 216, 52, 9, 1, 214, 153, 3, 73, 56, 9, 1, 214, 153, 3, 126, 190, + 56, 9, 1, 226, 252, 9, 1, 207, 183, 227, 86, 9, 1, 227, 87, 3, 213, 26, + 9, 1, 227, 87, 3, 73, 56, 9, 1, 219, 255, 9, 1, 227, 87, 3, 126, 190, 57, + 9, 1, 236, 76, 9, 1, 236, 77, 3, 213, 26, 9, 1, 219, 176, 9, 1, 236, 77, + 3, 120, 190, 57, 9, 1, 235, 37, 9, 1, 236, 77, 3, 126, 190, 56, 9, 1, + 225, 92, 3, 4, 203, 168, 9, 1, 225, 92, 3, 73, 56, 9, 1, 225, 92, 3, 126, + 190, 56, 9, 1, 225, 92, 3, 126, 190, 57, 9, 1, 218, 228, 3, 73, 57, 9, 1, + 218, 228, 235, 165, 9, 1, 213, 4, 9, 1, 218, 228, 3, 213, 26, 9, 1, 218, + 228, 3, 126, 190, 56, 9, 1, 234, 116, 240, 207, 9, 1, 206, 206, 3, 73, + 56, 9, 1, 234, 116, 3, 90, 56, 9, 1, 234, 116, 235, 113, 9, 1, 234, 116, + 235, 114, 3, 234, 204, 56, 9, 1, 206, 184, 222, 157, 235, 113, 9, 1, 201, + 73, 3, 213, 26, 9, 1, 226, 139, 217, 121, 9, 1, 217, 121, 9, 1, 66, 9, 1, + 199, 211, 9, 1, 226, 139, 199, 211, 9, 1, 201, 73, 3, 120, 190, 56, 9, 1, + 203, 59, 9, 1, 237, 162, 200, 46, 9, 1, 90, 3, 207, 6, 9, 1, 90, 3, 4, + 203, 168, 9, 1, 201, 73, 3, 73, 56, 9, 1, 72, 9, 1, 90, 3, 126, 190, 57, + 9, 1, 90, 249, 69, 9, 1, 90, 249, 70, 3, 234, 204, 56, 9, 236, 183, 208, + 76, 9, 1, 251, 221, 9, 4, 122, 33, 212, 57, 3, 225, 92, 3, 140, 222, 187, + 9, 4, 122, 33, 214, 153, 3, 225, 92, 3, 140, 222, 187, 9, 4, 122, 84, 82, + 19, 9, 4, 122, 225, 92, 251, 142, 9, 4, 122, 227, 224, 9, 4, 122, 126, + 240, 180, 9, 4, 122, 211, 186, 9, 238, 171, 76, 250, 111, 9, 208, 105, + 76, 212, 173, 238, 210, 234, 42, 9, 4, 122, 212, 219, 199, 81, 9, 4, 122, + 203, 223, 213, 174, 199, 81, 9, 4, 122, 240, 181, 234, 137, 76, 226, 203, + 9, 4, 122, 84, 65, 19, 9, 4, 128, 211, 186, 9, 4, 122, 222, 223, 9, 4, + 201, 72, 9, 4, 200, 46, 9, 4, 122, 200, 46, 9, 4, 122, 218, 227, 9, 215, + 134, 76, 212, 42, 9, 238, 181, 247, 56, 128, 208, 76, 9, 238, 181, 247, + 56, 122, 208, 76, 9, 212, 219, 122, 208, 77, 3, 237, 94, 247, 55, 9, 4, + 128, 222, 61, 9, 1, 242, 30, 3, 228, 50, 203, 168, 9, 1, 213, 155, 3, + 228, 50, 203, 168, 238, 33, 250, 248, 17, 199, 81, 238, 33, 250, 248, 17, + 102, 238, 33, 250, 248, 17, 105, 238, 33, 250, 248, 17, 147, 238, 33, + 250, 248, 17, 149, 238, 33, 250, 248, 17, 164, 238, 33, 250, 248, 17, + 187, 238, 33, 250, 248, 17, 210, 135, 238, 33, 250, 248, 17, 192, 238, + 33, 250, 248, 17, 219, 113, 9, 1, 210, 62, 3, 73, 57, 9, 1, 242, 53, 3, + 73, 57, 9, 1, 235, 195, 3, 73, 57, 9, 2, 209, 142, 251, 89, 9, 2, 209, + 142, 215, 63, 222, 40, 9, 1, 234, 116, 3, 228, 50, 203, 168, 207, 103, + 238, 171, 76, 216, 127, 207, 103, 207, 209, 236, 183, 208, 76, 207, 103, + 208, 6, 236, 183, 208, 76, 207, 103, 207, 209, 246, 79, 207, 103, 208, 6, + 246, 79, 207, 103, 233, 177, 246, 79, 207, 103, 246, 80, 209, 86, 225, + 28, 207, 103, 246, 80, 209, 86, 213, 46, 207, 103, 207, 209, 246, 80, + 209, 86, 225, 28, 207, 103, 208, 6, 246, 80, 209, 86, 213, 46, 207, 103, + 243, 36, 207, 103, 234, 163, 217, 140, 207, 103, 234, 163, 222, 17, 207, + 103, 234, 163, 250, 167, 207, 103, 252, 3, 81, 207, 103, 1, 251, 147, + 207, 103, 1, 207, 213, 251, 147, 207, 103, 1, 248, 207, 207, 103, 1, 236, + 66, 207, 103, 1, 236, 67, 236, 44, 207, 103, 1, 242, 26, 207, 103, 1, + 240, 181, 242, 27, 213, 20, 207, 103, 1, 234, 139, 207, 103, 1, 201, 72, + 207, 103, 1, 199, 105, 207, 103, 1, 234, 91, 207, 103, 1, 206, 142, 207, + 103, 1, 206, 143, 236, 44, 207, 103, 1, 199, 198, 207, 103, 1, 199, 199, + 234, 139, 207, 103, 1, 227, 57, 207, 103, 1, 225, 90, 207, 103, 1, 221, + 166, 207, 103, 1, 218, 89, 207, 103, 1, 210, 160, 207, 103, 1, 47, 210, + 160, 207, 103, 1, 72, 207, 103, 1, 216, 73, 207, 103, 1, 213, 105, 216, + 73, 207, 103, 1, 212, 54, 207, 103, 1, 214, 146, 207, 103, 1, 213, 20, + 207, 103, 1, 210, 21, 207, 103, 1, 206, 215, 207, 103, 1, 216, 12, 248, + 194, 207, 103, 1, 216, 12, 235, 192, 207, 103, 1, 216, 12, 241, 95, 207, + 103, 214, 225, 56, 207, 103, 214, 225, 57, 207, 103, 214, 225, 239, 179, + 207, 103, 199, 8, 56, 207, 103, 199, 8, 57, 207, 103, 199, 8, 239, 179, + 207, 103, 213, 193, 56, 207, 103, 213, 193, 57, 207, 103, 239, 180, 199, + 15, 233, 176, 207, 103, 239, 180, 199, 15, 251, 64, 207, 103, 234, 144, + 56, 207, 103, 234, 144, 57, 207, 103, 234, 143, 239, 179, 207, 103, 238, + 98, 56, 207, 103, 238, 98, 57, 207, 103, 212, 138, 207, 103, 237, 128, + 240, 182, 207, 103, 214, 57, 207, 103, 212, 167, 207, 103, 120, 83, 190, + 56, 207, 103, 120, 83, 190, 57, 207, 103, 126, 190, 56, 207, 103, 126, + 190, 57, 207, 103, 217, 138, 224, 177, 56, 207, 103, 217, 138, 224, 177, + 57, 207, 103, 220, 245, 207, 103, 249, 68, 207, 103, 1, 209, 20, 199, 75, + 207, 103, 1, 209, 20, 226, 196, 207, 103, 1, 209, 20, 237, 147, 9, 1, + 248, 241, 3, 126, 190, 233, 126, 57, 9, 1, 248, 241, 3, 73, 248, 228, 26, + 126, 190, 56, 9, 1, 248, 241, 3, 126, 190, 215, 96, 182, 57, 9, 1, 248, + 241, 3, 126, 190, 215, 96, 182, 248, 228, 26, 120, 190, 56, 9, 1, 248, + 241, 3, 120, 190, 248, 228, 26, 73, 56, 9, 1, 248, 241, 3, 228, 50, 4, + 203, 169, 57, 9, 1, 248, 241, 3, 4, 203, 168, 9, 1, 155, 3, 120, 190, 56, + 9, 1, 155, 3, 126, 190, 215, 96, 182, 57, 9, 1, 242, 30, 3, 120, 190, + 202, 248, 248, 228, 26, 4, 207, 9, 9, 1, 242, 30, 3, 228, 50, 4, 203, + 169, 57, 9, 1, 213, 155, 3, 97, 9, 1, 211, 187, 3, 236, 229, 190, 56, 9, + 1, 251, 172, 3, 120, 190, 56, 9, 1, 251, 172, 3, 126, 190, 215, 96, 191, + 56, 9, 1, 251, 172, 3, 120, 190, 202, 248, 56, 9, 1, 237, 135, 3, 120, + 190, 57, 9, 1, 237, 135, 3, 126, 190, 215, 96, 182, 57, 9, 1, 226, 253, + 3, 73, 56, 9, 1, 226, 253, 3, 126, 190, 56, 9, 1, 226, 253, 3, 126, 190, + 215, 96, 182, 57, 9, 1, 84, 3, 73, 56, 9, 1, 84, 3, 73, 57, 9, 1, 218, + 228, 3, 120, 190, 57, 9, 1, 218, 228, 3, 4, 207, 9, 9, 1, 218, 228, 3, 4, + 203, 168, 9, 1, 225, 92, 3, 148, 9, 1, 213, 155, 3, 120, 190, 202, 248, + 56, 9, 1, 213, 155, 3, 234, 204, 56, 9, 1, 211, 187, 3, 120, 190, 202, + 248, 56, 9, 1, 155, 3, 4, 9, 1, 207, 10, 57, 9, 1, 155, 3, 4, 9, 1, 207, + 10, 26, 120, 240, 180, 9, 1, 211, 187, 3, 4, 9, 1, 207, 10, 26, 120, 240, + 180, 9, 1, 213, 155, 3, 4, 9, 1, 207, 10, 26, 120, 240, 180, 9, 1, 155, + 3, 4, 9, 1, 207, 10, 56, 9, 1, 140, 3, 238, 33, 250, 248, 17, 120, 56, 9, + 1, 140, 3, 238, 33, 250, 248, 17, 126, 56, 9, 1, 237, 162, 90, 3, 238, + 33, 250, 248, 17, 120, 56, 9, 1, 237, 162, 90, 3, 238, 33, 250, 248, 17, + 126, 56, 9, 1, 237, 162, 90, 3, 238, 33, 250, 248, 17, 236, 229, 57, 9, + 1, 201, 73, 3, 238, 33, 250, 248, 17, 120, 56, 9, 1, 201, 73, 3, 238, 33, + 250, 248, 17, 126, 56, 9, 1, 90, 249, 70, 3, 238, 33, 250, 248, 17, 120, + 56, 9, 1, 90, 249, 70, 3, 238, 33, 250, 248, 17, 126, 56, 9, 1, 155, 3, + 238, 33, 250, 248, 17, 236, 229, 57, 9, 1, 211, 187, 3, 238, 33, 250, + 248, 17, 236, 229, 56, 9, 1, 211, 187, 3, 228, 50, 203, 168, 9, 1, 227, + 87, 3, 120, 190, 56, 206, 119, 1, 234, 233, 206, 119, 1, 210, 71, 206, + 119, 1, 218, 226, 206, 119, 1, 213, 248, 206, 119, 1, 249, 134, 206, 119, + 1, 224, 220, 206, 119, 1, 227, 101, 206, 119, 1, 251, 129, 206, 119, 1, + 203, 88, 206, 119, 1, 222, 60, 206, 119, 1, 237, 193, 206, 119, 1, 241, + 98, 206, 119, 1, 206, 121, 206, 119, 1, 225, 172, 206, 119, 1, 236, 85, + 206, 119, 1, 235, 119, 206, 119, 1, 211, 185, 206, 119, 1, 241, 236, 206, + 119, 1, 199, 95, 206, 119, 1, 206, 216, 206, 119, 1, 200, 109, 206, 119, + 1, 216, 86, 206, 119, 1, 227, 232, 206, 119, 1, 247, 11, 206, 119, 1, + 204, 252, 206, 119, 1, 234, 83, 206, 119, 1, 226, 206, 206, 119, 1, 206, + 120, 206, 119, 1, 199, 112, 206, 119, 1, 210, 60, 206, 119, 1, 212, 60, + 206, 119, 1, 242, 56, 206, 119, 1, 138, 206, 119, 1, 199, 14, 206, 119, + 1, 251, 168, 206, 119, 1, 235, 193, 206, 119, 1, 214, 156, 206, 119, 1, + 201, 112, 206, 119, 252, 5, 206, 119, 252, 103, 206, 119, 232, 234, 206, + 119, 238, 254, 206, 119, 204, 39, 206, 119, 217, 62, 206, 119, 239, 8, + 206, 119, 238, 24, 206, 119, 217, 137, 206, 119, 217, 145, 206, 119, 207, + 236, 206, 119, 1, 220, 157, 219, 49, 17, 199, 81, 219, 49, 17, 102, 219, + 49, 17, 105, 219, 49, 17, 147, 219, 49, 17, 149, 219, 49, 17, 164, 219, + 49, 17, 187, 219, 49, 17, 210, 135, 219, 49, 17, 192, 219, 49, 17, 219, + 113, 219, 49, 1, 62, 219, 49, 1, 238, 255, 219, 49, 1, 70, 219, 49, 1, + 72, 219, 49, 1, 66, 219, 49, 1, 217, 63, 219, 49, 1, 74, 219, 49, 1, 242, + 44, 219, 49, 1, 220, 214, 219, 49, 1, 249, 136, 219, 49, 1, 172, 219, 49, + 1, 207, 36, 219, 49, 1, 227, 248, 219, 49, 1, 247, 37, 219, 49, 1, 242, + 58, 219, 49, 1, 213, 252, 219, 49, 1, 212, 215, 219, 49, 1, 212, 64, 219, + 49, 1, 236, 32, 219, 49, 1, 237, 195, 219, 49, 1, 161, 219, 49, 1, 194, + 219, 49, 1, 220, 162, 200, 252, 219, 49, 1, 178, 219, 49, 1, 218, 60, + 219, 49, 1, 188, 219, 49, 1, 144, 219, 49, 1, 201, 114, 219, 49, 1, 183, + 219, 49, 1, 218, 61, 200, 252, 219, 49, 1, 227, 158, 227, 248, 219, 49, + 1, 227, 158, 247, 37, 219, 49, 1, 227, 158, 213, 252, 219, 49, 38, 209, + 250, 122, 205, 174, 219, 49, 38, 209, 250, 128, 205, 174, 219, 49, 38, + 209, 250, 213, 19, 205, 174, 219, 49, 38, 168, 241, 118, 205, 174, 219, + 49, 38, 168, 122, 205, 174, 219, 49, 38, 168, 128, 205, 174, 219, 49, 38, + 168, 213, 19, 205, 174, 219, 49, 38, 220, 122, 81, 219, 49, 38, 53, 73, + 56, 219, 49, 122, 150, 251, 13, 219, 49, 128, 150, 251, 13, 219, 49, 16, + 217, 64, 241, 132, 219, 49, 16, 236, 31, 219, 49, 246, 70, 219, 49, 238, + 43, 81, 219, 49, 225, 147, 212, 22, 1, 251, 149, 212, 22, 1, 248, 152, + 212, 22, 1, 236, 65, 212, 22, 1, 242, 28, 212, 22, 1, 228, 3, 212, 22, 1, + 249, 134, 212, 22, 1, 199, 84, 212, 22, 1, 228, 12, 212, 22, 1, 205, 213, + 212, 22, 1, 199, 180, 212, 22, 1, 227, 102, 212, 22, 1, 225, 169, 212, + 22, 1, 221, 166, 212, 22, 1, 218, 89, 212, 22, 1, 209, 140, 212, 22, 1, + 228, 117, 212, 22, 1, 237, 112, 212, 22, 1, 205, 30, 212, 22, 1, 214, 76, + 212, 22, 1, 213, 20, 212, 22, 1, 210, 89, 212, 22, 1, 207, 31, 212, 22, + 134, 228, 117, 212, 22, 134, 228, 116, 212, 22, 134, 217, 133, 212, 22, + 134, 242, 42, 212, 22, 67, 1, 238, 129, 199, 180, 212, 22, 134, 238, 129, + 199, 180, 212, 22, 22, 2, 168, 72, 212, 22, 22, 2, 72, 212, 22, 22, 2, + 216, 240, 252, 138, 212, 22, 22, 2, 168, 252, 138, 212, 22, 22, 2, 252, + 138, 212, 22, 22, 2, 216, 240, 62, 212, 22, 22, 2, 168, 62, 212, 22, 22, + 2, 62, 212, 22, 67, 1, 209, 250, 62, 212, 22, 22, 2, 209, 250, 62, 212, + 22, 22, 2, 168, 66, 212, 22, 22, 2, 66, 212, 22, 67, 1, 70, 212, 22, 22, + 2, 168, 70, 212, 22, 22, 2, 70, 212, 22, 22, 2, 74, 212, 22, 22, 2, 207, + 236, 212, 22, 134, 220, 17, 212, 22, 214, 212, 220, 17, 212, 22, 214, + 212, 251, 195, 212, 22, 214, 212, 251, 75, 212, 22, 214, 212, 249, 48, + 212, 22, 214, 212, 250, 149, 212, 22, 214, 212, 210, 9, 212, 22, 252, 3, + 81, 212, 22, 214, 212, 222, 50, 214, 112, 212, 22, 214, 212, 199, 22, + 212, 22, 214, 212, 214, 112, 212, 22, 214, 212, 199, 111, 212, 22, 214, + 212, 204, 181, 212, 22, 214, 212, 250, 219, 212, 22, 214, 212, 209, 24, + 222, 133, 212, 22, 214, 212, 251, 59, 222, 176, 1, 234, 210, 222, 176, 1, + 252, 89, 222, 176, 1, 251, 193, 222, 176, 1, 251, 235, 222, 176, 1, 251, + 185, 222, 176, 1, 203, 188, 222, 176, 1, 250, 105, 222, 176, 1, 228, 12, + 222, 176, 1, 250, 146, 222, 176, 1, 251, 154, 222, 176, 1, 251, 159, 222, + 176, 1, 251, 151, 222, 176, 1, 251, 101, 222, 176, 1, 251, 85, 222, 176, + 1, 250, 188, 222, 176, 1, 228, 117, 222, 176, 1, 251, 28, 222, 176, 1, + 250, 157, 222, 176, 1, 251, 1, 222, 176, 1, 250, 253, 222, 176, 1, 250, + 181, 222, 176, 1, 250, 155, 222, 176, 1, 239, 112, 222, 176, 1, 227, 94, + 222, 176, 1, 251, 171, 222, 176, 251, 199, 81, 222, 176, 202, 191, 81, + 222, 176, 236, 3, 81, 222, 176, 214, 211, 9, 1, 248, 241, 3, 4, 203, 169, + 57, 9, 1, 248, 241, 3, 234, 204, 56, 9, 1, 193, 3, 120, 190, 56, 9, 1, + 207, 10, 3, 120, 190, 56, 9, 1, 237, 135, 3, 73, 248, 228, 26, 126, 190, + 56, 9, 1, 214, 153, 3, 73, 57, 9, 1, 225, 92, 3, 53, 148, 9, 1, 84, 3, + 126, 190, 56, 9, 1, 90, 3, 120, 190, 248, 228, 26, 234, 204, 56, 9, 1, + 90, 3, 120, 190, 248, 228, 26, 73, 56, 9, 1, 213, 155, 3, 224, 74, 9, 1, + 201, 73, 3, 73, 201, 4, 9, 1, 212, 245, 200, 46, 9, 1, 128, 251, 142, 9, + 1, 242, 30, 3, 126, 190, 57, 9, 1, 212, 57, 3, 126, 190, 57, 9, 1, 236, + 77, 3, 228, 50, 97, 9, 1, 208, 68, 201, 72, 9, 1, 199, 106, 3, 228, 50, + 203, 169, 56, 9, 1, 251, 172, 3, 126, 190, 57, 9, 1, 227, 87, 3, 73, 57, + 9, 1, 248, 241, 3, 4, 84, 56, 9, 1, 216, 55, 3, 4, 84, 56, 9, 1, 206, + 184, 3, 4, 206, 184, 56, 9, 1, 213, 155, 3, 4, 218, 228, 56, 9, 1, 90, 3, + 120, 190, 248, 228, 26, 4, 218, 228, 56, 9, 1, 251, 196, 237, 134, 9, 1, + 251, 196, 214, 152, 9, 1, 251, 196, 218, 227, 9, 4, 122, 200, 238, 250, + 250, 9, 4, 122, 212, 56, 9, 4, 122, 251, 171, 9, 4, 122, 214, 152, 9, 4, + 122, 218, 228, 3, 227, 36, 9, 4, 128, 218, 228, 3, 227, 36, 9, 4, 122, + 200, 238, 250, 154, 9, 4, 122, 200, 238, 250, 187, 9, 4, 122, 200, 238, + 251, 84, 9, 4, 122, 200, 238, 212, 37, 9, 4, 122, 200, 238, 214, 116, 9, + 4, 122, 200, 238, 201, 95, 9, 4, 122, 236, 253, 222, 145, 9, 4, 122, 2, + 212, 52, 9, 240, 251, 238, 171, 76, 250, 111, 9, 204, 185, 242, 18, 57, + 9, 242, 196, 237, 158, 9, 242, 196, 242, 17, 9, 242, 196, 227, 36, 9, + 242, 196, 237, 156, 9, 242, 196, 242, 15, 9, 242, 196, 227, 34, 9, 150, + 112, 73, 56, 9, 150, 120, 190, 56, 9, 150, 224, 75, 56, 9, 150, 112, 73, + 57, 9, 150, 120, 190, 57, 9, 150, 224, 75, 57, 9, 176, 237, 156, 9, 176, + 242, 15, 9, 176, 227, 34, 9, 4, 122, 201, 72, 9, 237, 159, 3, 213, 26, 9, + 237, 159, 3, 73, 56, 9, 227, 37, 3, 73, 57, 9, 49, 250, 203, 56, 9, 51, + 250, 203, 56, 9, 49, 250, 203, 57, 9, 51, 250, 203, 57, 9, 53, 51, 250, + 203, 56, 9, 53, 51, 250, 203, 88, 3, 240, 182, 9, 51, 250, 203, 88, 3, + 240, 182, 9, 242, 18, 3, 240, 182, 9, 134, 209, 173, 218, 228, 235, 165, + 94, 2, 228, 50, 247, 149, 94, 2, 247, 149, 94, 2, 251, 33, 94, 2, 202, + 203, 94, 1, 209, 250, 62, 94, 1, 62, 94, 1, 252, 138, 94, 1, 70, 94, 1, + 228, 151, 94, 1, 66, 94, 1, 203, 182, 94, 1, 109, 146, 94, 1, 109, 156, + 94, 1, 247, 152, 72, 94, 1, 209, 250, 72, 94, 1, 72, 94, 1, 251, 176, 94, + 1, 247, 152, 74, 94, 1, 209, 250, 74, 94, 1, 74, 94, 1, 250, 139, 94, 1, + 161, 94, 1, 226, 207, 94, 1, 236, 89, 94, 1, 235, 199, 94, 1, 219, 253, + 94, 1, 247, 190, 94, 1, 247, 37, 94, 1, 227, 248, 94, 1, 227, 215, 94, 1, + 218, 60, 94, 1, 204, 253, 94, 1, 204, 241, 94, 1, 241, 220, 94, 1, 241, + 204, 94, 1, 219, 21, 94, 1, 207, 36, 94, 1, 206, 122, 94, 1, 242, 58, 94, + 1, 241, 100, 94, 1, 188, 94, 1, 219, 3, 94, 1, 172, 94, 1, 215, 245, 94, + 1, 249, 136, 94, 1, 248, 200, 94, 1, 178, 94, 1, 183, 94, 1, 213, 252, + 94, 1, 212, 215, 94, 1, 194, 94, 1, 224, 138, 94, 1, 224, 129, 94, 1, + 203, 90, 94, 1, 210, 114, 94, 1, 208, 179, 94, 1, 212, 64, 94, 1, 144, + 94, 22, 2, 217, 121, 94, 22, 2, 217, 61, 94, 2, 218, 100, 94, 2, 250, + 122, 94, 22, 2, 252, 138, 94, 22, 2, 70, 94, 22, 2, 228, 151, 94, 22, 2, + 66, 94, 22, 2, 203, 182, 94, 22, 2, 109, 146, 94, 22, 2, 109, 212, 216, + 94, 22, 2, 247, 152, 72, 94, 22, 2, 209, 250, 72, 94, 22, 2, 72, 94, 22, + 2, 251, 176, 94, 22, 2, 247, 152, 74, 94, 22, 2, 209, 250, 74, 94, 22, 2, + 74, 94, 22, 2, 250, 139, 94, 2, 202, 208, 94, 22, 2, 215, 6, 72, 94, 22, + 2, 250, 117, 94, 217, 86, 94, 208, 57, 2, 204, 33, 94, 208, 57, 2, 251, + 35, 94, 235, 74, 251, 251, 94, 251, 239, 251, 251, 94, 22, 2, 247, 152, + 168, 72, 94, 22, 2, 204, 31, 94, 22, 2, 203, 181, 94, 1, 214, 159, 94, 1, + 226, 188, 94, 1, 235, 174, 94, 1, 199, 114, 94, 1, 241, 209, 94, 1, 213, + 93, 94, 1, 237, 195, 94, 1, 199, 166, 94, 1, 109, 212, 216, 94, 1, 109, + 224, 139, 94, 22, 2, 109, 156, 94, 22, 2, 109, 224, 139, 94, 242, 10, 94, + 53, 242, 10, 94, 17, 199, 81, 94, 17, 102, 94, 17, 105, 94, 17, 147, 94, + 17, 149, 94, 17, 164, 94, 17, 187, 94, 17, 210, 135, 94, 17, 192, 94, 17, + 219, 113, 94, 252, 3, 54, 94, 2, 122, 208, 243, 240, 182, 94, 1, 247, + 152, 62, 94, 1, 217, 121, 94, 1, 217, 61, 94, 1, 250, 117, 94, 1, 204, + 31, 94, 1, 203, 181, 94, 1, 222, 138, 241, 220, 94, 1, 199, 77, 94, 1, + 80, 183, 94, 1, 235, 235, 94, 1, 227, 194, 94, 1, 235, 123, 208, 76, 94, + 1, 241, 210, 94, 1, 249, 44, 185, 251, 62, 185, 2, 247, 149, 185, 2, 251, + 33, 185, 2, 202, 203, 185, 1, 62, 185, 1, 252, 138, 185, 1, 70, 185, 1, + 228, 151, 185, 1, 66, 185, 1, 203, 182, 185, 1, 109, 146, 185, 1, 109, + 156, 185, 1, 72, 185, 1, 251, 176, 185, 1, 74, 185, 1, 250, 139, 185, 1, + 161, 185, 1, 226, 207, 185, 1, 236, 89, 185, 1, 235, 199, 185, 1, 219, + 253, 185, 1, 247, 190, 185, 1, 247, 37, 185, 1, 227, 248, 185, 1, 227, + 215, 185, 1, 218, 60, 185, 1, 204, 253, 185, 1, 204, 241, 185, 1, 241, + 220, 185, 1, 241, 204, 185, 1, 219, 21, 185, 1, 207, 36, 185, 1, 206, + 122, 185, 1, 242, 58, 185, 1, 241, 100, 185, 1, 188, 185, 1, 172, 185, 1, + 215, 245, 185, 1, 249, 136, 185, 1, 248, 200, 185, 1, 178, 185, 1, 183, + 185, 1, 213, 252, 185, 1, 194, 185, 1, 210, 114, 185, 1, 208, 179, 185, + 1, 212, 64, 185, 1, 144, 185, 2, 218, 100, 185, 2, 250, 122, 185, 22, 2, + 252, 138, 185, 22, 2, 70, 185, 22, 2, 228, 151, 185, 22, 2, 66, 185, 22, + 2, 203, 182, 185, 22, 2, 109, 146, 185, 22, 2, 109, 212, 216, 185, 22, 2, + 72, 185, 22, 2, 251, 176, 185, 22, 2, 74, 185, 22, 2, 250, 139, 185, 2, + 202, 208, 185, 1, 226, 198, 207, 36, 185, 250, 140, 225, 2, 81, 185, 1, + 212, 215, 185, 1, 213, 93, 185, 1, 199, 166, 185, 1, 109, 212, 216, 185, + 1, 109, 224, 139, 185, 22, 2, 109, 156, 185, 22, 2, 109, 224, 139, 185, + 17, 199, 81, 185, 17, 102, 185, 17, 105, 185, 17, 147, 185, 17, 149, 185, + 17, 164, 185, 17, 187, 185, 17, 210, 135, 185, 17, 192, 185, 17, 219, + 113, 185, 1, 213, 253, 3, 101, 241, 70, 185, 1, 213, 253, 3, 224, 54, + 241, 70, 185, 212, 149, 81, 185, 212, 149, 54, 185, 242, 195, 218, 92, + 102, 185, 242, 195, 218, 92, 105, 185, 242, 195, 218, 92, 147, 185, 242, + 195, 218, 92, 149, 185, 242, 195, 218, 92, 112, 224, 242, 206, 112, 206, + 107, 241, 130, 185, 242, 195, 241, 131, 209, 100, 185, 228, 13, 185, 236, + 56, 81, 235, 18, 2, 251, 234, 248, 168, 235, 18, 2, 248, 168, 235, 18, 2, + 202, 203, 235, 18, 1, 62, 235, 18, 1, 252, 138, 235, 18, 1, 70, 235, 18, + 1, 228, 151, 235, 18, 1, 66, 235, 18, 1, 203, 182, 235, 18, 1, 238, 255, + 235, 18, 1, 251, 176, 235, 18, 1, 217, 63, 235, 18, 1, 250, 139, 235, 18, + 1, 161, 235, 18, 1, 226, 207, 235, 18, 1, 236, 89, 235, 18, 1, 235, 199, + 235, 18, 1, 219, 253, 235, 18, 1, 247, 190, 235, 18, 1, 247, 37, 235, 18, + 1, 227, 248, 235, 18, 1, 227, 215, 235, 18, 1, 218, 60, 235, 18, 1, 204, + 253, 235, 18, 1, 204, 241, 235, 18, 1, 241, 220, 235, 18, 1, 241, 204, + 235, 18, 1, 219, 21, 235, 18, 1, 207, 36, 235, 18, 1, 206, 122, 235, 18, + 1, 242, 58, 235, 18, 1, 241, 100, 235, 18, 1, 188, 235, 18, 1, 172, 235, + 18, 1, 215, 245, 235, 18, 1, 249, 136, 235, 18, 1, 248, 200, 235, 18, 1, + 178, 235, 18, 1, 183, 235, 18, 1, 213, 252, 235, 18, 1, 194, 235, 18, 1, + 224, 138, 235, 18, 1, 203, 90, 235, 18, 1, 210, 114, 235, 18, 1, 212, 64, + 235, 18, 1, 144, 235, 18, 2, 218, 100, 235, 18, 22, 2, 252, 138, 235, 18, + 22, 2, 70, 235, 18, 22, 2, 228, 151, 235, 18, 22, 2, 66, 235, 18, 22, 2, + 203, 182, 235, 18, 22, 2, 238, 255, 235, 18, 22, 2, 251, 176, 235, 18, + 22, 2, 217, 63, 235, 18, 22, 2, 250, 139, 235, 18, 2, 202, 208, 235, 18, + 2, 204, 35, 235, 18, 1, 226, 188, 235, 18, 1, 235, 174, 235, 18, 1, 199, + 114, 235, 18, 1, 212, 215, 235, 18, 1, 237, 195, 235, 18, 17, 199, 81, + 235, 18, 17, 102, 235, 18, 17, 105, 235, 18, 17, 147, 235, 18, 17, 149, + 235, 18, 17, 164, 235, 18, 17, 187, 235, 18, 17, 210, 135, 235, 18, 17, + 192, 235, 18, 17, 219, 113, 235, 18, 205, 221, 235, 18, 251, 233, 235, + 18, 228, 33, 235, 18, 203, 210, 235, 18, 238, 217, 217, 68, 235, 18, 2, + 200, 84, 235, 33, 2, 247, 149, 235, 33, 2, 251, 33, 235, 33, 2, 202, 203, + 235, 33, 1, 62, 235, 33, 1, 252, 138, 235, 33, 1, 70, 235, 33, 1, 228, + 151, 235, 33, 1, 66, 235, 33, 1, 203, 182, 235, 33, 1, 109, 146, 235, 33, + 1, 109, 156, 235, 33, 22, 247, 152, 72, 235, 33, 1, 72, 235, 33, 1, 251, + 176, 235, 33, 22, 247, 152, 74, 235, 33, 1, 74, 235, 33, 1, 250, 139, + 235, 33, 1, 161, 235, 33, 1, 226, 207, 235, 33, 1, 236, 89, 235, 33, 1, + 235, 199, 235, 33, 1, 219, 253, 235, 33, 1, 247, 190, 235, 33, 1, 247, + 37, 235, 33, 1, 227, 248, 235, 33, 1, 227, 215, 235, 33, 1, 218, 60, 235, + 33, 1, 204, 253, 235, 33, 1, 204, 241, 235, 33, 1, 241, 220, 235, 33, 1, + 241, 204, 235, 33, 1, 219, 21, 235, 33, 1, 207, 36, 235, 33, 1, 206, 122, + 235, 33, 1, 242, 58, 235, 33, 1, 241, 100, 235, 33, 1, 188, 235, 33, 1, + 172, 235, 33, 1, 215, 245, 235, 33, 1, 249, 136, 235, 33, 1, 248, 200, + 235, 33, 1, 178, 235, 33, 1, 183, 235, 33, 1, 213, 252, 235, 33, 1, 194, + 235, 33, 1, 224, 138, 235, 33, 1, 203, 90, 235, 33, 1, 210, 114, 235, 33, + 1, 208, 179, 235, 33, 1, 212, 64, 235, 33, 1, 144, 235, 33, 2, 218, 100, + 235, 33, 2, 250, 122, 235, 33, 22, 2, 252, 138, 235, 33, 22, 2, 70, 235, + 33, 22, 2, 228, 151, 235, 33, 22, 2, 66, 235, 33, 22, 2, 203, 182, 235, + 33, 22, 2, 109, 146, 235, 33, 22, 2, 109, 212, 216, 235, 33, 22, 2, 247, + 152, 72, 235, 33, 22, 2, 72, 235, 33, 22, 2, 251, 176, 235, 33, 22, 2, + 247, 152, 74, 235, 33, 22, 2, 74, 235, 33, 22, 2, 250, 139, 235, 33, 2, + 202, 208, 235, 33, 217, 86, 235, 33, 1, 109, 212, 216, 235, 33, 1, 109, + 224, 139, 235, 33, 22, 2, 109, 156, 235, 33, 22, 2, 109, 224, 139, 235, + 33, 17, 199, 81, 235, 33, 17, 102, 235, 33, 17, 105, 235, 33, 17, 147, + 235, 33, 17, 149, 235, 33, 17, 164, 235, 33, 17, 187, 235, 33, 17, 210, + 135, 235, 33, 17, 192, 235, 33, 17, 219, 113, 235, 33, 252, 3, 54, 235, + 33, 212, 149, 54, 235, 33, 1, 199, 77, 217, 24, 2, 247, 149, 217, 24, 2, + 251, 33, 217, 24, 2, 202, 203, 217, 24, 1, 62, 217, 24, 1, 252, 138, 217, + 24, 1, 70, 217, 24, 1, 228, 151, 217, 24, 1, 66, 217, 24, 1, 203, 182, + 217, 24, 1, 109, 146, 217, 24, 1, 109, 156, 217, 24, 1, 72, 217, 24, 1, + 251, 176, 217, 24, 1, 74, 217, 24, 1, 250, 139, 217, 24, 1, 161, 217, 24, + 1, 226, 207, 217, 24, 1, 236, 89, 217, 24, 1, 235, 199, 217, 24, 1, 219, + 253, 217, 24, 1, 247, 190, 217, 24, 1, 247, 37, 217, 24, 1, 227, 248, + 217, 24, 1, 227, 215, 217, 24, 1, 218, 60, 217, 24, 1, 204, 253, 217, 24, + 1, 204, 241, 217, 24, 1, 241, 220, 217, 24, 1, 241, 204, 217, 24, 1, 219, + 21, 217, 24, 1, 207, 36, 217, 24, 1, 206, 122, 217, 24, 1, 242, 58, 217, + 24, 1, 241, 100, 217, 24, 1, 188, 217, 24, 1, 172, 217, 24, 1, 215, 245, + 217, 24, 1, 249, 136, 217, 24, 1, 248, 200, 217, 24, 1, 178, 217, 24, 1, + 183, 217, 24, 1, 213, 252, 217, 24, 1, 194, 217, 24, 1, 224, 138, 217, + 24, 1, 203, 90, 217, 24, 1, 210, 114, 217, 24, 1, 208, 179, 217, 24, 1, + 212, 64, 217, 24, 1, 144, 217, 24, 2, 218, 100, 217, 24, 2, 250, 122, + 217, 24, 22, 2, 252, 138, 217, 24, 22, 2, 70, 217, 24, 22, 2, 228, 151, + 217, 24, 22, 2, 66, 217, 24, 22, 2, 203, 182, 217, 24, 22, 2, 109, 146, + 217, 24, 22, 2, 109, 212, 216, 217, 24, 22, 2, 72, 217, 24, 22, 2, 251, + 176, 217, 24, 22, 2, 74, 217, 24, 22, 2, 250, 139, 217, 24, 2, 202, 208, + 217, 24, 251, 177, 225, 2, 81, 217, 24, 250, 140, 225, 2, 81, 217, 24, 1, + 212, 215, 217, 24, 1, 213, 93, 217, 24, 1, 199, 166, 217, 24, 1, 109, + 212, 216, 217, 24, 1, 109, 224, 139, 217, 24, 22, 2, 109, 156, 217, 24, + 22, 2, 109, 224, 139, 217, 24, 17, 199, 81, 217, 24, 17, 102, 217, 24, + 17, 105, 217, 24, 17, 147, 217, 24, 17, 149, 217, 24, 17, 164, 217, 24, + 17, 187, 217, 24, 17, 210, 135, 217, 24, 17, 192, 217, 24, 17, 219, 113, + 217, 24, 228, 13, 217, 24, 1, 201, 114, 217, 24, 236, 219, 112, 214, 87, + 217, 24, 236, 219, 112, 234, 213, 217, 24, 236, 219, 126, 214, 85, 217, + 24, 236, 219, 112, 209, 98, 217, 24, 236, 219, 112, 238, 227, 217, 24, + 236, 219, 126, 209, 97, 45, 2, 251, 33, 45, 2, 202, 203, 45, 1, 62, 45, + 1, 252, 138, 45, 1, 70, 45, 1, 228, 151, 45, 1, 66, 45, 1, 203, 182, 45, + 1, 72, 45, 1, 238, 255, 45, 1, 251, 176, 45, 1, 74, 45, 1, 217, 63, 45, + 1, 250, 139, 45, 1, 161, 45, 1, 219, 253, 45, 1, 247, 190, 45, 1, 227, + 248, 45, 1, 218, 60, 45, 1, 204, 253, 45, 1, 219, 21, 45, 1, 207, 36, 45, + 1, 188, 45, 1, 219, 3, 45, 1, 172, 45, 1, 178, 45, 1, 183, 45, 1, 213, + 252, 45, 1, 212, 215, 45, 1, 194, 45, 1, 224, 138, 45, 1, 224, 129, 45, + 1, 203, 90, 45, 1, 210, 114, 45, 1, 208, 179, 45, 1, 212, 64, 45, 1, 144, + 45, 22, 2, 252, 138, 45, 22, 2, 70, 45, 22, 2, 228, 151, 45, 22, 2, 66, + 45, 22, 2, 203, 182, 45, 22, 2, 72, 45, 22, 2, 238, 255, 45, 22, 2, 251, + 176, 45, 22, 2, 74, 45, 22, 2, 217, 63, 45, 22, 2, 250, 139, 45, 2, 202, + 208, 45, 217, 86, 45, 250, 140, 225, 2, 81, 45, 17, 199, 81, 45, 17, 102, + 45, 17, 105, 45, 17, 147, 45, 17, 149, 45, 17, 164, 45, 17, 187, 45, 17, + 210, 135, 45, 17, 192, 45, 17, 219, 113, 45, 41, 206, 166, 45, 41, 112, + 233, 82, 45, 41, 112, 206, 50, 45, 241, 233, 54, 45, 221, 90, 54, 45, + 200, 49, 54, 45, 241, 172, 54, 45, 242, 246, 54, 45, 250, 189, 88, 54, + 45, 212, 149, 54, 45, 41, 54, 180, 2, 38, 247, 150, 56, 180, 2, 247, 149, + 180, 2, 251, 33, 180, 2, 202, 203, 180, 1, 62, 180, 1, 252, 138, 180, 1, + 70, 180, 1, 228, 151, 180, 1, 66, 180, 1, 203, 182, 180, 1, 109, 146, + 180, 1, 109, 156, 180, 1, 72, 180, 1, 238, 255, 180, 1, 251, 176, 180, 1, + 74, 180, 1, 217, 63, 180, 1, 250, 139, 180, 1, 161, 180, 1, 226, 207, + 180, 1, 236, 89, 180, 1, 235, 199, 180, 1, 219, 253, 180, 1, 247, 190, + 180, 1, 247, 37, 180, 1, 227, 248, 180, 1, 227, 215, 180, 1, 218, 60, + 180, 1, 204, 253, 180, 1, 204, 241, 180, 1, 241, 220, 180, 1, 241, 204, + 180, 1, 219, 21, 180, 1, 207, 36, 180, 1, 206, 122, 180, 1, 242, 58, 180, + 1, 241, 100, 180, 1, 188, 180, 1, 172, 180, 1, 215, 245, 180, 1, 249, + 136, 180, 1, 248, 200, 180, 1, 178, 180, 1, 183, 180, 1, 213, 252, 180, + 1, 212, 215, 180, 1, 194, 180, 1, 224, 138, 180, 1, 224, 129, 180, 1, + 203, 90, 180, 1, 210, 114, 180, 1, 208, 179, 180, 1, 212, 64, 180, 1, + 144, 180, 2, 250, 122, 180, 22, 2, 252, 138, 180, 22, 2, 70, 180, 22, 2, + 228, 151, 180, 22, 2, 66, 180, 22, 2, 203, 182, 180, 22, 2, 109, 146, + 180, 22, 2, 109, 212, 216, 180, 22, 2, 72, 180, 22, 2, 238, 255, 180, 22, + 2, 251, 176, 180, 22, 2, 74, 180, 22, 2, 217, 63, 180, 22, 2, 250, 139, + 180, 2, 202, 208, 180, 225, 2, 81, 180, 251, 177, 225, 2, 81, 180, 1, + 205, 32, 180, 1, 239, 93, 180, 1, 212, 196, 180, 1, 109, 212, 216, 180, + 1, 109, 224, 139, 180, 22, 2, 109, 156, 180, 22, 2, 109, 224, 139, 180, + 17, 199, 81, 180, 17, 102, 180, 17, 105, 180, 17, 147, 180, 17, 149, 180, + 17, 164, 180, 17, 187, 180, 17, 210, 135, 180, 17, 192, 180, 17, 219, + 113, 180, 236, 219, 17, 199, 82, 36, 217, 125, 215, 50, 76, 149, 180, + 236, 219, 17, 112, 36, 217, 125, 215, 50, 76, 149, 180, 236, 219, 17, + 120, 36, 217, 125, 215, 50, 76, 149, 180, 236, 219, 17, 126, 36, 217, + 125, 215, 50, 76, 149, 180, 236, 219, 17, 112, 36, 238, 56, 215, 50, 76, + 149, 180, 236, 219, 17, 120, 36, 238, 56, 215, 50, 76, 149, 180, 236, + 219, 17, 126, 36, 238, 56, 215, 50, 76, 149, 180, 2, 204, 175, 227, 63, + 2, 208, 243, 247, 149, 227, 63, 2, 247, 149, 227, 63, 2, 251, 33, 227, + 63, 2, 202, 203, 227, 63, 1, 62, 227, 63, 1, 252, 138, 227, 63, 1, 70, + 227, 63, 1, 228, 151, 227, 63, 1, 66, 227, 63, 1, 203, 182, 227, 63, 1, + 109, 146, 227, 63, 1, 109, 156, 227, 63, 1, 72, 227, 63, 1, 238, 255, + 227, 63, 1, 251, 176, 227, 63, 1, 74, 227, 63, 1, 217, 63, 227, 63, 1, + 250, 139, 227, 63, 1, 161, 227, 63, 1, 226, 207, 227, 63, 1, 236, 89, + 227, 63, 1, 235, 199, 227, 63, 1, 219, 253, 227, 63, 1, 247, 190, 227, + 63, 1, 247, 37, 227, 63, 1, 227, 248, 227, 63, 1, 227, 215, 227, 63, 1, + 218, 60, 227, 63, 1, 204, 253, 227, 63, 1, 204, 241, 227, 63, 1, 241, + 220, 227, 63, 1, 241, 204, 227, 63, 1, 219, 21, 227, 63, 1, 207, 36, 227, + 63, 1, 206, 122, 227, 63, 1, 242, 58, 227, 63, 1, 241, 100, 227, 63, 1, + 188, 227, 63, 1, 172, 227, 63, 1, 215, 245, 227, 63, 1, 249, 136, 227, + 63, 1, 248, 200, 227, 63, 1, 178, 227, 63, 1, 183, 227, 63, 1, 213, 252, + 227, 63, 1, 212, 215, 227, 63, 1, 194, 227, 63, 1, 224, 138, 227, 63, 1, + 203, 90, 227, 63, 1, 210, 114, 227, 63, 1, 208, 179, 227, 63, 1, 212, 64, + 227, 63, 1, 144, 227, 63, 2, 218, 100, 227, 63, 2, 250, 122, 227, 63, 22, + 2, 252, 138, 227, 63, 22, 2, 70, 227, 63, 22, 2, 228, 151, 227, 63, 22, + 2, 66, 227, 63, 22, 2, 203, 182, 227, 63, 22, 2, 109, 146, 227, 63, 22, + 2, 109, 212, 216, 227, 63, 22, 2, 72, 227, 63, 22, 2, 238, 255, 227, 63, + 22, 2, 251, 176, 227, 63, 22, 2, 74, 227, 63, 22, 2, 217, 63, 227, 63, + 22, 2, 250, 139, 227, 63, 2, 202, 208, 227, 63, 225, 2, 81, 227, 63, 251, + 177, 225, 2, 81, 227, 63, 1, 237, 195, 227, 63, 1, 109, 212, 216, 227, + 63, 1, 109, 224, 139, 227, 63, 22, 2, 109, 156, 227, 63, 22, 2, 109, 224, + 139, 227, 63, 17, 199, 81, 227, 63, 17, 102, 227, 63, 17, 105, 227, 63, + 17, 147, 227, 63, 17, 149, 227, 63, 17, 164, 227, 63, 17, 187, 227, 63, + 17, 210, 135, 227, 63, 17, 192, 227, 63, 17, 219, 113, 227, 63, 2, 227, + 201, 227, 63, 2, 203, 226, 142, 2, 247, 149, 142, 2, 251, 33, 142, 2, + 202, 203, 142, 1, 62, 142, 1, 252, 138, 142, 1, 70, 142, 1, 228, 151, + 142, 1, 66, 142, 1, 203, 182, 142, 1, 109, 146, 142, 1, 109, 156, 142, 1, + 72, 142, 1, 238, 255, 142, 1, 251, 176, 142, 1, 74, 142, 1, 217, 63, 142, + 1, 250, 139, 142, 1, 161, 142, 1, 226, 207, 142, 1, 236, 89, 142, 1, 235, + 199, 142, 1, 219, 253, 142, 1, 247, 190, 142, 1, 247, 37, 142, 1, 227, + 248, 142, 1, 227, 215, 142, 1, 218, 60, 142, 1, 204, 253, 142, 1, 204, + 241, 142, 1, 241, 220, 142, 1, 241, 204, 142, 1, 219, 21, 142, 1, 207, + 36, 142, 1, 206, 122, 142, 1, 242, 58, 142, 1, 241, 100, 142, 1, 188, + 142, 1, 219, 3, 142, 1, 172, 142, 1, 215, 245, 142, 1, 249, 136, 142, 1, + 248, 200, 142, 1, 178, 142, 1, 183, 142, 1, 213, 252, 142, 1, 212, 215, + 142, 1, 194, 142, 1, 224, 138, 142, 1, 224, 129, 142, 1, 203, 90, 142, 1, + 210, 114, 142, 1, 208, 179, 142, 1, 212, 64, 142, 1, 144, 142, 1, 204, + 222, 142, 2, 250, 122, 142, 22, 2, 252, 138, 142, 22, 2, 70, 142, 22, 2, + 228, 151, 142, 22, 2, 66, 142, 22, 2, 203, 182, 142, 22, 2, 109, 146, + 142, 22, 2, 109, 212, 216, 142, 22, 2, 72, 142, 22, 2, 238, 255, 142, 22, + 2, 251, 176, 142, 22, 2, 74, 142, 22, 2, 217, 63, 142, 22, 2, 250, 139, + 142, 2, 202, 208, 142, 1, 73, 213, 129, 142, 2, 216, 129, 142, 1, 246, + 225, 223, 243, 142, 1, 246, 225, 200, 123, 142, 1, 246, 225, 224, 130, + 142, 250, 140, 225, 2, 81, 142, 236, 219, 112, 217, 74, 142, 236, 219, + 112, 236, 237, 142, 236, 219, 126, 238, 224, 142, 236, 219, 112, 204, + 162, 142, 236, 219, 112, 206, 157, 142, 236, 219, 126, 204, 161, 142, + 236, 219, 112, 237, 107, 142, 1, 250, 234, 228, 151, 142, 1, 109, 212, + 216, 142, 1, 109, 224, 139, 142, 22, 2, 109, 156, 142, 22, 2, 109, 224, + 139, 142, 17, 199, 81, 142, 17, 102, 142, 17, 105, 142, 17, 147, 142, 17, + 149, 142, 17, 164, 142, 17, 187, 142, 17, 210, 135, 142, 17, 192, 142, + 17, 219, 113, 142, 41, 206, 166, 142, 41, 112, 233, 82, 142, 41, 112, + 206, 50, 142, 236, 219, 112, 214, 87, 142, 236, 219, 112, 234, 213, 142, + 236, 219, 126, 214, 85, 142, 236, 219, 112, 209, 98, 142, 236, 219, 112, + 238, 227, 142, 236, 219, 126, 209, 97, 142, 241, 238, 81, 142, 1, 246, + 225, 219, 22, 142, 1, 246, 225, 220, 214, 142, 1, 246, 225, 212, 216, + 142, 1, 246, 225, 156, 142, 1, 246, 225, 224, 139, 142, 1, 246, 225, 227, + 118, 143, 2, 251, 32, 143, 2, 202, 202, 143, 1, 250, 110, 143, 1, 252, + 92, 143, 1, 251, 201, 143, 1, 251, 216, 143, 1, 228, 2, 143, 1, 228, 150, + 143, 1, 203, 173, 143, 1, 203, 176, 143, 1, 228, 28, 143, 1, 228, 29, + 143, 1, 228, 136, 143, 1, 228, 138, 143, 1, 238, 25, 143, 1, 238, 250, + 143, 1, 251, 161, 143, 1, 216, 229, 143, 1, 217, 56, 143, 1, 250, 125, + 143, 1, 251, 115, 227, 13, 143, 1, 222, 205, 227, 13, 143, 1, 251, 115, + 236, 35, 143, 1, 222, 205, 236, 35, 143, 1, 227, 62, 220, 154, 143, 1, + 212, 5, 236, 35, 143, 1, 251, 115, 247, 102, 143, 1, 222, 205, 247, 102, + 143, 1, 251, 115, 227, 230, 143, 1, 222, 205, 227, 230, 143, 1, 207, 29, + 220, 154, 143, 1, 207, 29, 212, 4, 220, 155, 143, 1, 212, 5, 227, 230, + 143, 1, 251, 115, 204, 249, 143, 1, 222, 205, 204, 249, 143, 1, 251, 115, + 241, 211, 143, 1, 222, 205, 241, 211, 143, 1, 220, 242, 220, 108, 143, 1, + 212, 5, 241, 211, 143, 1, 251, 115, 206, 209, 143, 1, 222, 205, 206, 209, + 143, 1, 251, 115, 241, 231, 143, 1, 222, 205, 241, 231, 143, 1, 242, 6, + 220, 108, 143, 1, 212, 5, 241, 231, 143, 1, 251, 115, 216, 81, 143, 1, + 222, 205, 216, 81, 143, 1, 251, 115, 249, 46, 143, 1, 222, 205, 249, 46, + 143, 1, 222, 118, 143, 1, 251, 95, 249, 46, 143, 1, 200, 56, 143, 1, 213, + 196, 143, 1, 242, 6, 225, 49, 143, 1, 203, 61, 143, 1, 207, 29, 211, 233, + 143, 1, 220, 242, 211, 233, 143, 1, 242, 6, 211, 233, 143, 1, 234, 145, + 143, 1, 220, 242, 225, 49, 143, 1, 237, 149, 143, 2, 251, 150, 143, 22, + 2, 251, 211, 143, 22, 2, 226, 232, 251, 218, 143, 22, 2, 241, 43, 251, + 218, 143, 22, 2, 226, 232, 228, 25, 143, 22, 2, 241, 43, 228, 25, 143, + 22, 2, 226, 232, 216, 209, 143, 22, 2, 241, 43, 216, 209, 143, 22, 2, + 236, 78, 143, 22, 2, 226, 73, 143, 22, 2, 241, 43, 226, 73, 143, 22, 2, + 226, 75, 241, 150, 143, 22, 2, 226, 74, 234, 234, 251, 211, 143, 22, 2, + 226, 74, 234, 234, 241, 43, 251, 211, 143, 22, 2, 226, 74, 234, 234, 236, + 34, 143, 22, 2, 236, 34, 143, 224, 151, 17, 199, 81, 143, 224, 151, 17, + 102, 143, 224, 151, 17, 105, 143, 224, 151, 17, 147, 143, 224, 151, 17, + 149, 143, 224, 151, 17, 164, 143, 224, 151, 17, 187, 143, 224, 151, 17, + 210, 135, 143, 224, 151, 17, 192, 143, 224, 151, 17, 219, 113, 143, 22, + 2, 241, 43, 236, 78, 143, 22, 2, 241, 43, 236, 34, 143, 214, 212, 226, 0, + 206, 117, 171, 226, 89, 227, 82, 206, 117, 171, 226, 179, 226, 202, 206, + 117, 171, 226, 179, 226, 171, 206, 117, 171, 226, 179, 226, 166, 206, + 117, 171, 226, 179, 226, 175, 206, 117, 171, 226, 179, 213, 217, 206, + 117, 171, 219, 179, 219, 166, 206, 117, 171, 246, 211, 247, 26, 206, 117, + 171, 246, 211, 246, 221, 206, 117, 171, 246, 211, 247, 25, 206, 117, 171, + 209, 30, 209, 29, 206, 117, 171, 246, 211, 246, 207, 206, 117, 171, 199, + 246, 199, 253, 206, 117, 171, 240, 212, 247, 34, 206, 117, 171, 205, 186, + 216, 92, 206, 117, 171, 206, 62, 206, 111, 206, 117, 171, 206, 62, 220, + 131, 206, 117, 171, 206, 62, 215, 207, 206, 117, 171, 218, 242, 220, 24, + 206, 117, 171, 240, 212, 241, 151, 206, 117, 171, 205, 186, 206, 237, + 206, 117, 171, 206, 62, 206, 29, 206, 117, 171, 206, 62, 206, 118, 206, + 117, 171, 206, 62, 206, 57, 206, 117, 171, 218, 242, 218, 133, 206, 117, + 171, 248, 125, 249, 102, 206, 117, 171, 215, 107, 215, 135, 206, 117, + 171, 215, 218, 215, 209, 206, 117, 171, 237, 14, 237, 195, 206, 117, 171, + 215, 218, 215, 238, 206, 117, 171, 237, 14, 237, 168, 206, 117, 171, 215, + 218, 212, 17, 206, 117, 171, 221, 137, 178, 206, 117, 171, 199, 246, 200, + 85, 206, 117, 171, 213, 2, 212, 174, 206, 117, 171, 212, 175, 206, 117, + 171, 224, 111, 224, 169, 206, 117, 171, 224, 42, 206, 117, 171, 201, 1, + 201, 109, 206, 117, 171, 209, 30, 212, 33, 206, 117, 171, 209, 30, 212, + 145, 206, 117, 171, 209, 30, 208, 23, 206, 117, 171, 233, 208, 234, 48, + 206, 117, 171, 224, 111, 246, 191, 206, 117, 171, 163, 251, 76, 206, 117, + 171, 233, 208, 218, 237, 206, 117, 171, 216, 186, 206, 117, 171, 211, + 255, 62, 206, 117, 171, 222, 199, 234, 201, 206, 117, 171, 211, 255, 252, + 138, 206, 117, 171, 211, 255, 251, 101, 206, 117, 171, 211, 255, 70, 206, + 117, 171, 211, 255, 228, 151, 206, 117, 171, 211, 255, 204, 31, 206, 117, + 171, 211, 255, 204, 29, 206, 117, 171, 211, 255, 66, 206, 117, 171, 211, + 255, 203, 182, 206, 117, 171, 215, 220, 206, 117, 242, 195, 16, 249, 103, + 206, 117, 171, 211, 255, 72, 206, 117, 171, 211, 255, 251, 221, 206, 117, + 171, 211, 255, 74, 206, 117, 171, 211, 255, 251, 177, 222, 193, 206, 117, + 171, 211, 255, 251, 177, 222, 194, 206, 117, 171, 225, 95, 206, 117, 171, + 222, 190, 206, 117, 171, 222, 191, 206, 117, 171, 222, 199, 238, 216, + 206, 117, 171, 222, 199, 206, 61, 206, 117, 171, 222, 199, 205, 101, 206, + 117, 171, 222, 199, 247, 13, 206, 117, 171, 206, 109, 206, 117, 171, 219, + 122, 206, 117, 171, 200, 79, 206, 117, 171, 237, 4, 206, 117, 17, 199, + 81, 206, 117, 17, 102, 206, 117, 17, 105, 206, 117, 17, 147, 206, 117, + 17, 149, 206, 117, 17, 164, 206, 117, 17, 187, 206, 117, 17, 210, 135, + 206, 117, 17, 192, 206, 117, 17, 219, 113, 206, 117, 171, 251, 72, 206, + 117, 171, 226, 176, 225, 75, 1, 226, 88, 225, 75, 1, 226, 179, 207, 225, + 225, 75, 1, 226, 179, 206, 246, 225, 75, 1, 219, 178, 225, 75, 1, 246, + 91, 225, 75, 1, 209, 30, 206, 246, 225, 75, 1, 218, 26, 225, 75, 1, 240, + 211, 225, 75, 1, 138, 225, 75, 1, 206, 62, 207, 225, 225, 75, 1, 206, 62, + 206, 246, 225, 75, 1, 218, 241, 225, 75, 1, 248, 124, 225, 75, 1, 215, + 106, 225, 75, 1, 215, 218, 207, 225, 225, 75, 1, 237, 14, 206, 246, 225, + 75, 1, 215, 218, 206, 246, 225, 75, 1, 237, 14, 207, 225, 225, 75, 1, + 221, 136, 225, 75, 1, 199, 245, 225, 75, 1, 224, 111, 224, 169, 225, 75, + 1, 224, 111, 224, 72, 225, 75, 1, 201, 0, 225, 75, 1, 209, 30, 207, 225, + 225, 75, 1, 233, 208, 207, 225, 225, 75, 1, 74, 225, 75, 1, 233, 208, + 206, 246, 225, 75, 238, 195, 225, 75, 22, 2, 62, 225, 75, 22, 2, 222, + 199, 227, 68, 225, 75, 22, 2, 252, 138, 225, 75, 22, 2, 251, 101, 225, + 75, 22, 2, 70, 225, 75, 22, 2, 228, 151, 225, 75, 22, 2, 200, 123, 225, + 75, 22, 2, 199, 167, 225, 75, 22, 2, 66, 225, 75, 22, 2, 203, 182, 225, + 75, 22, 2, 222, 199, 226, 71, 225, 75, 210, 162, 2, 224, 110, 225, 75, + 210, 162, 2, 218, 26, 225, 75, 22, 2, 72, 225, 75, 22, 2, 238, 234, 225, + 75, 22, 2, 74, 225, 75, 22, 2, 250, 112, 225, 75, 22, 2, 251, 176, 225, + 75, 226, 89, 194, 225, 75, 150, 222, 199, 238, 216, 225, 75, 150, 222, + 199, 206, 61, 225, 75, 150, 222, 199, 206, 15, 225, 75, 150, 222, 199, + 247, 110, 225, 75, 247, 155, 81, 225, 75, 219, 131, 225, 75, 17, 199, 81, + 225, 75, 17, 102, 225, 75, 17, 105, 225, 75, 17, 147, 225, 75, 17, 149, + 225, 75, 17, 164, 225, 75, 17, 187, 225, 75, 17, 210, 135, 225, 75, 17, + 192, 225, 75, 17, 219, 113, 225, 75, 233, 208, 218, 241, 225, 75, 233, + 208, 221, 136, 225, 75, 1, 226, 180, 235, 116, 225, 75, 1, 226, 180, 218, + 26, 79, 5, 217, 86, 79, 134, 235, 52, 200, 1, 221, 229, 205, 38, 62, 79, + 134, 235, 52, 200, 1, 221, 229, 255, 135, 213, 6, 249, 10, 178, 79, 134, + 235, 52, 200, 1, 221, 229, 255, 135, 235, 52, 205, 18, 178, 79, 134, 82, + 200, 1, 221, 229, 222, 78, 178, 79, 134, 246, 106, 200, 1, 221, 229, 210, + 121, 178, 79, 134, 247, 130, 200, 1, 221, 229, 215, 208, 210, 107, 178, + 79, 134, 200, 1, 221, 229, 205, 18, 210, 107, 178, 79, 134, 211, 231, + 210, 106, 79, 134, 248, 39, 200, 1, 221, 228, 79, 134, 248, 146, 210, 4, + 200, 1, 221, 228, 79, 134, 228, 54, 205, 17, 79, 134, 241, 143, 205, 18, + 248, 38, 79, 134, 210, 106, 79, 134, 218, 31, 210, 106, 79, 134, 205, 18, + 210, 106, 79, 134, 218, 31, 205, 18, 210, 106, 79, 134, 213, 29, 246, + 250, 208, 196, 210, 106, 79, 134, 213, 97, 235, 85, 210, 106, 79, 134, + 247, 130, 255, 139, 212, 179, 222, 77, 168, 247, 158, 79, 134, 235, 52, + 205, 17, 79, 224, 96, 2, 247, 35, 212, 178, 79, 224, 96, 2, 224, 221, + 212, 178, 79, 250, 161, 2, 210, 117, 236, 18, 255, 140, 212, 178, 79, + 250, 161, 2, 255, 137, 172, 79, 250, 161, 2, 211, 203, 205, 12, 79, 2, + 213, 192, 240, 225, 236, 17, 79, 2, 213, 192, 240, 225, 235, 118, 79, 2, + 213, 192, 240, 225, 235, 53, 79, 2, 213, 192, 220, 150, 236, 17, 79, 2, + 213, 192, 220, 150, 235, 118, 79, 2, 213, 192, 240, 225, 213, 192, 220, + 149, 79, 17, 199, 81, 79, 17, 102, 79, 17, 105, 79, 17, 147, 79, 17, 149, + 79, 17, 164, 79, 17, 187, 79, 17, 210, 135, 79, 17, 192, 79, 17, 219, + 113, 79, 17, 167, 102, 79, 17, 167, 105, 79, 17, 167, 147, 79, 17, 167, + 149, 79, 17, 167, 164, 79, 17, 167, 187, 79, 17, 167, 210, 135, 79, 17, + 167, 192, 79, 17, 167, 219, 113, 79, 17, 167, 199, 81, 79, 134, 248, 41, + 212, 178, 79, 134, 219, 244, 247, 225, 218, 42, 199, 16, 79, 134, 247, + 130, 255, 139, 212, 179, 247, 226, 221, 182, 247, 158, 79, 134, 219, 244, + 247, 225, 210, 118, 212, 178, 79, 134, 247, 9, 221, 228, 79, 134, 205, + 33, 255, 136, 79, 134, 235, 35, 212, 179, 234, 250, 79, 134, 235, 35, + 212, 179, 235, 0, 79, 134, 251, 77, 226, 197, 234, 250, 79, 134, 251, 77, + 226, 197, 235, 0, 79, 2, 200, 71, 205, 16, 79, 2, 222, 159, 205, 16, 79, + 1, 161, 79, 1, 226, 207, 79, 1, 236, 89, 79, 1, 235, 199, 79, 1, 219, + 253, 79, 1, 247, 190, 79, 1, 247, 37, 79, 1, 227, 248, 79, 1, 218, 60, + 79, 1, 204, 253, 79, 1, 204, 241, 79, 1, 241, 220, 79, 1, 241, 204, 79, + 1, 219, 21, 79, 1, 207, 36, 79, 1, 206, 122, 79, 1, 242, 58, 79, 1, 241, + 100, 79, 1, 188, 79, 1, 172, 79, 1, 215, 245, 79, 1, 249, 136, 79, 1, + 248, 200, 79, 1, 178, 79, 1, 205, 32, 79, 1, 205, 22, 79, 1, 239, 93, 79, + 1, 239, 87, 79, 1, 201, 114, 79, 1, 199, 77, 79, 1, 199, 114, 79, 1, 255, + 142, 79, 1, 183, 79, 1, 213, 252, 79, 1, 194, 79, 1, 210, 114, 79, 1, + 208, 179, 79, 1, 212, 64, 79, 1, 144, 79, 1, 62, 79, 1, 226, 29, 79, 1, + 237, 57, 213, 252, 79, 1, 226, 109, 79, 1, 212, 215, 79, 22, 2, 252, 138, + 79, 22, 2, 70, 79, 22, 2, 228, 151, 79, 22, 2, 66, 79, 22, 2, 203, 182, + 79, 22, 2, 109, 146, 79, 22, 2, 109, 212, 216, 79, 22, 2, 109, 156, 79, + 22, 2, 109, 224, 139, 79, 22, 2, 72, 79, 22, 2, 238, 255, 79, 22, 2, 74, + 79, 22, 2, 217, 63, 79, 2, 213, 12, 208, 25, 219, 254, 213, 1, 79, 2, + 213, 6, 249, 9, 79, 22, 2, 213, 105, 70, 79, 22, 2, 213, 105, 228, 151, + 79, 2, 218, 42, 199, 17, 220, 158, 242, 58, 79, 2, 209, 44, 225, 42, 79, + 134, 234, 215, 79, 134, 216, 173, 79, 2, 225, 45, 212, 178, 79, 2, 200, + 76, 212, 178, 79, 2, 225, 46, 205, 33, 247, 158, 79, 2, 222, 80, 247, + 158, 79, 2, 235, 56, 247, 159, 213, 95, 79, 2, 235, 56, 222, 70, 213, 95, + 79, 2, 228, 50, 222, 80, 247, 158, 79, 208, 12, 2, 225, 46, 205, 33, 247, + 158, 79, 208, 12, 2, 222, 80, 247, 158, 79, 208, 12, 2, 228, 50, 222, 80, + 247, 158, 79, 208, 12, 1, 161, 79, 208, 12, 1, 226, 207, 79, 208, 12, 1, + 236, 89, 79, 208, 12, 1, 235, 199, 79, 208, 12, 1, 219, 253, 79, 208, 12, + 1, 247, 190, 79, 208, 12, 1, 247, 37, 79, 208, 12, 1, 227, 248, 79, 208, + 12, 1, 218, 60, 79, 208, 12, 1, 204, 253, 79, 208, 12, 1, 204, 241, 79, + 208, 12, 1, 241, 220, 79, 208, 12, 1, 241, 204, 79, 208, 12, 1, 219, 21, + 79, 208, 12, 1, 207, 36, 79, 208, 12, 1, 206, 122, 79, 208, 12, 1, 242, + 58, 79, 208, 12, 1, 241, 100, 79, 208, 12, 1, 188, 79, 208, 12, 1, 172, + 79, 208, 12, 1, 215, 245, 79, 208, 12, 1, 249, 136, 79, 208, 12, 1, 248, + 200, 79, 208, 12, 1, 178, 79, 208, 12, 1, 205, 32, 79, 208, 12, 1, 205, + 22, 79, 208, 12, 1, 239, 93, 79, 208, 12, 1, 239, 87, 79, 208, 12, 1, + 201, 114, 79, 208, 12, 1, 199, 77, 79, 208, 12, 1, 199, 114, 79, 208, 12, + 1, 255, 142, 79, 208, 12, 1, 183, 79, 208, 12, 1, 213, 252, 79, 208, 12, + 1, 194, 79, 208, 12, 1, 210, 114, 79, 208, 12, 1, 208, 179, 79, 208, 12, + 1, 212, 64, 79, 208, 12, 1, 144, 79, 208, 12, 1, 62, 79, 208, 12, 1, 226, + 29, 79, 208, 12, 1, 237, 57, 201, 114, 79, 208, 12, 1, 237, 57, 183, 79, + 208, 12, 1, 237, 57, 213, 252, 79, 226, 16, 212, 176, 226, 207, 79, 226, + 16, 212, 176, 226, 208, 247, 226, 221, 182, 247, 158, 79, 247, 145, 2, + 80, 249, 1, 79, 247, 145, 2, 162, 249, 1, 79, 247, 145, 2, 247, 147, 206, + 199, 79, 247, 145, 2, 211, 230, 255, 141, 79, 16, 239, 152, 248, 36, 79, + 16, 213, 191, 213, 13, 79, 16, 216, 197, 236, 16, 79, 16, 213, 191, 213, + 14, 213, 97, 235, 84, 79, 16, 215, 208, 172, 79, 16, 218, 224, 248, 36, + 79, 16, 218, 224, 248, 37, 218, 31, 255, 138, 79, 16, 218, 224, 248, 37, + 235, 54, 255, 138, 79, 16, 218, 224, 248, 37, 247, 226, 255, 138, 79, 2, + 213, 192, 220, 150, 213, 192, 240, 224, 79, 2, 213, 192, 220, 150, 235, + 53, 79, 134, 248, 40, 210, 4, 235, 162, 221, 229, 213, 96, 79, 134, 221, + 138, 200, 1, 235, 162, 221, 229, 213, 96, 79, 134, 218, 31, 205, 17, 79, + 134, 82, 248, 63, 213, 3, 200, 1, 221, 229, 222, 78, 178, 79, 134, 246, + 106, 248, 63, 213, 3, 200, 1, 221, 229, 210, 121, 178, 213, 45, 207, 188, + 54, 225, 27, 207, 188, 54, 213, 45, 207, 188, 2, 3, 240, 180, 225, 27, + 207, 188, 2, 3, 240, 180, 79, 134, 225, 37, 222, 81, 212, 178, 79, 134, + 205, 125, 222, 81, 212, 178, 71, 1, 161, 71, 1, 226, 207, 71, 1, 236, 89, + 71, 1, 235, 199, 71, 1, 219, 253, 71, 1, 247, 190, 71, 1, 247, 37, 71, 1, + 227, 248, 71, 1, 227, 215, 71, 1, 218, 60, 71, 1, 218, 243, 71, 1, 204, + 253, 71, 1, 204, 241, 71, 1, 241, 220, 71, 1, 241, 204, 71, 1, 219, 21, + 71, 1, 207, 36, 71, 1, 206, 122, 71, 1, 242, 58, 71, 1, 241, 100, 71, 1, + 188, 71, 1, 172, 71, 1, 215, 245, 71, 1, 249, 136, 71, 1, 248, 200, 71, + 1, 178, 71, 1, 183, 71, 1, 213, 252, 71, 1, 194, 71, 1, 201, 114, 71, 1, + 212, 64, 71, 1, 144, 71, 1, 224, 138, 71, 1, 62, 71, 1, 210, 90, 62, 71, + 1, 70, 71, 1, 228, 151, 71, 1, 66, 71, 1, 203, 182, 71, 1, 72, 71, 1, + 221, 107, 72, 71, 1, 74, 71, 1, 250, 139, 71, 22, 2, 206, 248, 252, 138, + 71, 22, 2, 252, 138, 71, 22, 2, 70, 71, 22, 2, 228, 151, 71, 22, 2, 66, + 71, 22, 2, 203, 182, 71, 22, 2, 72, 71, 22, 2, 251, 176, 71, 22, 2, 221, + 107, 228, 151, 71, 22, 2, 221, 107, 74, 71, 22, 2, 197, 56, 71, 2, 251, + 33, 71, 2, 73, 57, 71, 2, 202, 203, 71, 2, 202, 208, 71, 2, 250, 185, 71, + 111, 2, 179, 183, 71, 111, 2, 179, 213, 252, 71, 111, 2, 179, 201, 114, + 71, 111, 2, 179, 144, 71, 1, 235, 69, 212, 64, 71, 17, 199, 81, 71, 17, + 102, 71, 17, 105, 71, 17, 147, 71, 17, 149, 71, 17, 164, 71, 17, 187, 71, + 17, 210, 135, 71, 17, 192, 71, 17, 219, 113, 71, 2, 224, 148, 211, 192, + 71, 2, 211, 192, 71, 16, 224, 105, 71, 16, 246, 64, 71, 16, 251, 197, 71, + 16, 235, 254, 71, 1, 210, 114, 71, 1, 208, 179, 71, 1, 109, 146, 71, 1, + 109, 212, 216, 71, 1, 109, 156, 71, 1, 109, 224, 139, 71, 22, 2, 109, + 146, 71, 22, 2, 109, 212, 216, 71, 22, 2, 109, 156, 71, 22, 2, 109, 224, + 139, 71, 1, 221, 107, 219, 253, 71, 1, 221, 107, 227, 215, 71, 1, 221, + 107, 249, 44, 71, 1, 221, 107, 249, 39, 71, 111, 2, 221, 107, 179, 188, + 71, 111, 2, 221, 107, 179, 178, 71, 111, 2, 221, 107, 179, 194, 71, 1, + 210, 120, 227, 44, 210, 114, 71, 22, 2, 210, 120, 227, 44, 238, 69, 71, + 150, 134, 210, 120, 227, 44, 234, 153, 71, 150, 134, 210, 120, 227, 44, + 227, 9, 215, 217, 71, 1, 201, 45, 214, 179, 227, 44, 206, 122, 71, 1, + 201, 45, 214, 179, 227, 44, 214, 185, 71, 22, 2, 201, 45, 214, 179, 227, + 44, 238, 69, 71, 22, 2, 201, 45, 214, 179, 227, 44, 204, 31, 71, 2, 201, + 45, 214, 179, 227, 44, 205, 173, 71, 2, 201, 45, 214, 179, 227, 44, 205, + 172, 71, 2, 201, 45, 214, 179, 227, 44, 205, 171, 71, 2, 201, 45, 214, + 179, 227, 44, 205, 170, 71, 2, 201, 45, 214, 179, 227, 44, 205, 169, 71, + 1, 239, 12, 214, 179, 227, 44, 219, 21, 71, 1, 239, 12, 214, 179, 227, + 44, 199, 174, 71, 1, 239, 12, 214, 179, 227, 44, 235, 164, 71, 22, 2, + 236, 11, 227, 44, 70, 71, 22, 2, 227, 14, 217, 121, 71, 22, 2, 227, 14, + 66, 71, 22, 2, 227, 14, 238, 255, 71, 1, 210, 90, 161, 71, 1, 210, 90, + 226, 207, 71, 1, 210, 90, 236, 89, 71, 1, 210, 90, 247, 190, 71, 1, 210, + 90, 199, 114, 71, 1, 210, 90, 218, 60, 71, 1, 210, 90, 242, 58, 71, 1, + 210, 90, 188, 71, 1, 210, 90, 215, 245, 71, 1, 210, 90, 237, 195, 71, 1, + 210, 90, 249, 136, 71, 1, 210, 90, 206, 122, 71, 1, 210, 90, 144, 71, + 111, 2, 210, 90, 179, 201, 114, 71, 22, 2, 210, 90, 252, 138, 71, 22, 2, + 210, 90, 72, 71, 22, 2, 210, 90, 197, 56, 71, 22, 2, 210, 90, 47, 200, + 123, 71, 2, 210, 90, 205, 172, 71, 2, 210, 90, 205, 171, 71, 2, 210, 90, + 205, 169, 71, 2, 210, 90, 205, 168, 71, 2, 210, 90, 243, 6, 205, 172, 71, + 2, 210, 90, 243, 6, 205, 171, 71, 2, 210, 90, 243, 6, 238, 182, 205, 174, + 71, 1, 212, 160, 216, 181, 237, 195, 71, 2, 212, 160, 216, 181, 205, 169, + 71, 210, 90, 17, 199, 81, 71, 210, 90, 17, 102, 71, 210, 90, 17, 105, 71, + 210, 90, 17, 147, 71, 210, 90, 17, 149, 71, 210, 90, 17, 164, 71, 210, + 90, 17, 187, 71, 210, 90, 17, 210, 135, 71, 210, 90, 17, 192, 71, 210, + 90, 17, 219, 113, 71, 2, 226, 200, 205, 173, 71, 2, 226, 200, 205, 171, + 71, 22, 2, 251, 163, 62, 71, 22, 2, 251, 163, 251, 176, 71, 16, 210, 90, + 102, 71, 16, 210, 90, 238, 42, 118, 6, 1, 251, 85, 118, 6, 1, 249, 88, + 118, 6, 1, 236, 59, 118, 6, 1, 240, 190, 118, 6, 1, 238, 179, 118, 6, 1, + 202, 217, 118, 6, 1, 199, 84, 118, 6, 1, 206, 244, 118, 6, 1, 228, 117, + 118, 6, 1, 227, 68, 118, 6, 1, 225, 65, 118, 6, 1, 222, 180, 118, 6, 1, + 220, 125, 118, 6, 1, 217, 78, 118, 6, 1, 216, 130, 118, 6, 1, 199, 73, + 118, 6, 1, 213, 234, 118, 6, 1, 212, 13, 118, 6, 1, 206, 232, 118, 6, 1, + 204, 5, 118, 6, 1, 215, 237, 118, 6, 1, 226, 195, 118, 6, 1, 235, 190, + 118, 6, 1, 214, 144, 118, 6, 1, 210, 21, 118, 6, 1, 246, 223, 118, 6, 1, + 247, 158, 118, 6, 1, 227, 198, 118, 6, 1, 246, 162, 118, 6, 1, 247, 21, + 118, 6, 1, 200, 179, 118, 6, 1, 227, 212, 118, 6, 1, 234, 230, 118, 6, 1, + 234, 139, 118, 6, 1, 234, 69, 118, 6, 1, 201, 64, 118, 6, 1, 234, 166, + 118, 6, 1, 233, 203, 118, 6, 1, 199, 247, 118, 6, 1, 251, 210, 118, 1, + 251, 85, 118, 1, 249, 88, 118, 1, 236, 59, 118, 1, 240, 190, 118, 1, 238, + 179, 118, 1, 202, 217, 118, 1, 199, 84, 118, 1, 206, 244, 118, 1, 228, + 117, 118, 1, 227, 68, 118, 1, 225, 65, 118, 1, 222, 180, 118, 1, 220, + 125, 118, 1, 217, 78, 118, 1, 216, 130, 118, 1, 199, 73, 118, 1, 213, + 234, 118, 1, 212, 13, 118, 1, 206, 232, 118, 1, 204, 5, 118, 1, 215, 237, + 118, 1, 226, 195, 118, 1, 235, 190, 118, 1, 214, 144, 118, 1, 210, 21, + 118, 1, 246, 223, 118, 1, 247, 158, 118, 1, 227, 198, 118, 1, 246, 162, + 118, 1, 247, 21, 118, 1, 200, 179, 118, 1, 227, 212, 118, 1, 234, 230, + 118, 1, 234, 139, 118, 1, 234, 69, 118, 1, 201, 64, 118, 1, 234, 166, + 118, 1, 233, 203, 118, 1, 237, 112, 118, 1, 199, 247, 118, 1, 238, 197, + 118, 1, 204, 185, 236, 59, 118, 1, 251, 171, 118, 216, 128, 210, 154, 67, + 1, 118, 220, 125, 118, 1, 251, 210, 118, 1, 234, 165, 54, 118, 1, 225, + 167, 54, 29, 129, 226, 121, 29, 129, 208, 171, 29, 129, 219, 143, 29, + 129, 205, 253, 29, 129, 208, 160, 29, 129, 213, 78, 29, 129, 221, 197, + 29, 129, 215, 190, 29, 129, 208, 168, 29, 129, 209, 129, 29, 129, 208, + 165, 29, 129, 228, 174, 29, 129, 246, 168, 29, 129, 208, 175, 29, 129, + 246, 232, 29, 129, 226, 183, 29, 129, 206, 80, 29, 129, 215, 227, 29, + 129, 234, 66, 29, 129, 219, 139, 29, 129, 208, 169, 29, 129, 219, 133, + 29, 129, 219, 137, 29, 129, 205, 250, 29, 129, 213, 66, 29, 129, 208, + 167, 29, 129, 213, 76, 29, 129, 227, 50, 29, 129, 221, 190, 29, 129, 227, + 53, 29, 129, 215, 185, 29, 129, 215, 183, 29, 129, 215, 171, 29, 129, + 215, 179, 29, 129, 215, 177, 29, 129, 215, 174, 29, 129, 215, 176, 29, + 129, 215, 173, 29, 129, 215, 178, 29, 129, 215, 188, 29, 129, 215, 189, + 29, 129, 215, 172, 29, 129, 215, 182, 29, 129, 227, 51, 29, 129, 227, 49, + 29, 129, 209, 122, 29, 129, 209, 120, 29, 129, 209, 112, 29, 129, 209, + 115, 29, 129, 209, 121, 29, 129, 209, 117, 29, 129, 209, 116, 29, 129, + 209, 114, 29, 129, 209, 125, 29, 129, 209, 127, 29, 129, 209, 128, 29, + 129, 209, 123, 29, 129, 209, 113, 29, 129, 209, 118, 29, 129, 209, 126, + 29, 129, 246, 214, 29, 129, 246, 212, 29, 129, 247, 48, 29, 129, 247, 46, + 29, 129, 216, 146, 29, 129, 228, 169, 29, 129, 228, 160, 29, 129, 228, + 168, 29, 129, 228, 165, 29, 129, 228, 163, 29, 129, 228, 167, 29, 129, + 208, 172, 29, 129, 228, 172, 29, 129, 228, 173, 29, 129, 228, 161, 29, + 129, 228, 166, 29, 129, 200, 28, 29, 129, 246, 167, 29, 129, 246, 215, + 29, 129, 246, 213, 29, 129, 247, 49, 29, 129, 247, 47, 29, 129, 246, 230, + 29, 129, 246, 231, 29, 129, 246, 216, 29, 129, 247, 50, 29, 129, 215, + 225, 29, 129, 227, 52, 29, 129, 208, 173, 29, 129, 200, 34, 29, 129, 226, + 112, 29, 129, 219, 135, 29, 129, 219, 141, 29, 129, 219, 140, 29, 129, + 205, 247, 29, 129, 237, 93, 29, 181, 237, 93, 29, 181, 62, 29, 181, 251, + 221, 29, 181, 183, 29, 181, 200, 98, 29, 181, 238, 142, 29, 181, 72, 29, + 181, 200, 38, 29, 181, 200, 51, 29, 181, 74, 29, 181, 201, 114, 29, 181, + 201, 110, 29, 181, 217, 121, 29, 181, 199, 245, 29, 181, 66, 29, 181, + 201, 50, 29, 181, 201, 64, 29, 181, 201, 31, 29, 181, 199, 211, 29, 181, + 238, 69, 29, 181, 200, 9, 29, 181, 70, 29, 181, 255, 133, 29, 181, 255, + 132, 29, 181, 200, 112, 29, 181, 200, 110, 29, 181, 238, 140, 29, 181, + 238, 139, 29, 181, 238, 141, 29, 181, 200, 37, 29, 181, 200, 36, 29, 181, + 217, 230, 29, 181, 217, 231, 29, 181, 217, 224, 29, 181, 217, 229, 29, + 181, 217, 227, 29, 181, 199, 239, 29, 181, 199, 238, 29, 181, 199, 237, + 29, 181, 199, 240, 29, 181, 199, 241, 29, 181, 204, 104, 29, 181, 204, + 103, 29, 181, 204, 101, 29, 181, 204, 97, 29, 181, 204, 98, 29, 181, 199, + 210, 29, 181, 199, 207, 29, 181, 199, 208, 29, 181, 199, 202, 29, 181, + 199, 203, 29, 181, 199, 204, 29, 181, 199, 206, 29, 181, 238, 63, 29, + 181, 238, 65, 29, 181, 200, 8, 29, 181, 233, 18, 29, 181, 233, 10, 29, + 181, 233, 13, 29, 181, 233, 11, 29, 181, 233, 15, 29, 181, 233, 17, 29, + 181, 250, 245, 29, 181, 250, 242, 29, 181, 250, 240, 29, 181, 250, 241, + 29, 181, 208, 176, 29, 181, 255, 134, 29, 181, 200, 111, 29, 181, 200, + 35, 29, 181, 217, 226, 29, 181, 217, 225, 29, 110, 226, 121, 29, 110, + 208, 171, 29, 110, 226, 114, 29, 110, 219, 143, 29, 110, 219, 141, 29, + 110, 219, 140, 29, 110, 205, 253, 29, 110, 213, 78, 29, 110, 213, 73, 29, + 110, 213, 70, 29, 110, 213, 63, 29, 110, 213, 58, 29, 110, 213, 53, 29, + 110, 213, 64, 29, 110, 213, 76, 29, 110, 221, 197, 29, 110, 215, 190, 29, + 110, 215, 179, 29, 110, 209, 129, 29, 110, 208, 165, 29, 110, 228, 174, + 29, 110, 246, 168, 29, 110, 246, 232, 29, 110, 226, 183, 29, 110, 206, + 80, 29, 110, 215, 227, 29, 110, 234, 66, 29, 110, 226, 115, 29, 110, 226, + 113, 29, 110, 219, 139, 29, 110, 219, 133, 29, 110, 219, 135, 29, 110, + 219, 138, 29, 110, 219, 134, 29, 110, 205, 250, 29, 110, 205, 247, 29, + 110, 213, 71, 29, 110, 213, 66, 29, 110, 213, 52, 29, 110, 213, 51, 29, + 110, 208, 167, 29, 110, 213, 68, 29, 110, 213, 67, 29, 110, 213, 60, 29, + 110, 213, 62, 29, 110, 213, 75, 29, 110, 213, 55, 29, 110, 213, 65, 29, + 110, 213, 74, 29, 110, 213, 50, 29, 110, 221, 193, 29, 110, 221, 188, 29, + 110, 221, 190, 29, 110, 221, 187, 29, 110, 221, 185, 29, 110, 221, 191, + 29, 110, 221, 196, 29, 110, 221, 194, 29, 110, 227, 53, 29, 110, 215, + 181, 29, 110, 215, 182, 29, 110, 215, 187, 29, 110, 227, 51, 29, 110, + 209, 122, 29, 110, 209, 112, 29, 110, 209, 115, 29, 110, 209, 117, 29, + 110, 216, 146, 29, 110, 228, 169, 29, 110, 228, 162, 29, 110, 208, 172, + 29, 110, 228, 170, 29, 110, 200, 28, 29, 110, 200, 24, 29, 110, 200, 25, + 29, 110, 215, 225, 29, 110, 227, 52, 29, 110, 234, 64, 29, 110, 234, 62, + 29, 110, 234, 65, 29, 110, 234, 63, 29, 110, 200, 34, 29, 110, 226, 117, + 29, 110, 226, 116, 29, 110, 226, 120, 29, 110, 226, 118, 29, 110, 226, + 119, 29, 110, 208, 169, 34, 5, 144, 34, 5, 233, 97, 34, 5, 234, 75, 34, + 5, 234, 233, 34, 5, 234, 120, 34, 5, 234, 139, 34, 5, 233, 207, 34, 5, + 233, 206, 34, 5, 194, 34, 5, 224, 42, 34, 5, 224, 210, 34, 5, 225, 175, + 34, 5, 225, 32, 34, 5, 225, 40, 34, 5, 224, 110, 34, 5, 224, 10, 34, 5, + 234, 84, 34, 5, 234, 78, 34, 5, 234, 80, 34, 5, 234, 83, 34, 5, 234, 81, + 34, 5, 234, 82, 34, 5, 234, 79, 34, 5, 234, 77, 34, 5, 178, 34, 5, 221, + 41, 34, 5, 221, 211, 34, 5, 222, 233, 34, 5, 222, 64, 34, 5, 222, 76, 34, + 5, 221, 136, 34, 5, 220, 231, 34, 5, 207, 94, 34, 5, 207, 88, 34, 5, 207, + 90, 34, 5, 207, 93, 34, 5, 207, 91, 34, 5, 207, 92, 34, 5, 207, 89, 34, + 5, 207, 87, 34, 5, 213, 252, 34, 5, 212, 175, 34, 5, 213, 88, 34, 5, 213, + 248, 34, 5, 213, 167, 34, 5, 213, 190, 34, 5, 213, 1, 34, 5, 212, 140, + 34, 5, 212, 64, 34, 5, 208, 24, 34, 5, 209, 182, 34, 5, 212, 61, 34, 5, + 211, 190, 34, 5, 211, 202, 34, 5, 209, 29, 34, 5, 207, 186, 34, 5, 210, + 114, 34, 5, 209, 220, 34, 5, 210, 33, 34, 5, 210, 109, 34, 5, 210, 63, + 34, 5, 210, 65, 34, 5, 210, 8, 34, 5, 209, 200, 34, 5, 214, 159, 34, 5, + 214, 97, 34, 5, 214, 121, 34, 5, 214, 158, 34, 5, 214, 138, 34, 5, 214, + 139, 34, 5, 214, 109, 34, 5, 214, 108, 34, 5, 214, 51, 34, 5, 214, 47, + 34, 5, 214, 50, 34, 5, 214, 48, 34, 5, 214, 49, 34, 5, 214, 135, 34, 5, + 214, 127, 34, 5, 214, 130, 34, 5, 214, 134, 34, 5, 214, 131, 34, 5, 214, + 132, 34, 5, 214, 129, 34, 5, 214, 126, 34, 5, 214, 122, 34, 5, 214, 125, + 34, 5, 214, 123, 34, 5, 214, 124, 34, 5, 249, 136, 34, 5, 248, 36, 34, 5, + 248, 188, 34, 5, 249, 134, 34, 5, 248, 252, 34, 5, 249, 8, 34, 5, 248, + 124, 34, 5, 247, 240, 34, 5, 203, 90, 34, 5, 201, 166, 34, 5, 202, 234, + 34, 5, 203, 89, 34, 5, 203, 54, 34, 5, 203, 59, 34, 5, 202, 193, 34, 5, + 201, 157, 34, 5, 207, 36, 34, 5, 204, 215, 34, 5, 206, 15, 34, 5, 207, + 32, 34, 5, 206, 190, 34, 5, 206, 201, 34, 5, 138, 34, 5, 204, 170, 34, 5, + 247, 190, 34, 5, 242, 214, 34, 5, 246, 173, 34, 5, 247, 189, 34, 5, 247, + 68, 34, 5, 247, 76, 34, 5, 246, 91, 34, 5, 242, 176, 34, 5, 200, 181, 34, + 5, 200, 151, 34, 5, 200, 169, 34, 5, 200, 180, 34, 5, 200, 174, 34, 5, + 200, 175, 34, 5, 200, 159, 34, 5, 200, 158, 34, 5, 200, 145, 34, 5, 200, + 141, 34, 5, 200, 144, 34, 5, 200, 142, 34, 5, 200, 143, 34, 5, 188, 34, + 5, 218, 133, 34, 5, 219, 150, 34, 5, 220, 157, 34, 5, 220, 29, 34, 5, + 220, 34, 34, 5, 218, 241, 34, 5, 218, 69, 34, 5, 218, 60, 34, 5, 218, 19, + 34, 5, 218, 41, 34, 5, 218, 59, 34, 5, 218, 49, 34, 5, 218, 50, 34, 5, + 218, 26, 34, 5, 218, 9, 34, 5, 235, 123, 62, 34, 5, 235, 123, 66, 34, 5, + 235, 123, 70, 34, 5, 235, 123, 252, 138, 34, 5, 235, 123, 238, 255, 34, + 5, 235, 123, 72, 34, 5, 235, 123, 74, 34, 5, 235, 123, 201, 114, 34, 5, + 161, 34, 5, 226, 15, 34, 5, 226, 163, 34, 5, 227, 105, 34, 5, 227, 5, 34, + 5, 227, 8, 34, 5, 226, 88, 34, 5, 226, 87, 34, 5, 225, 229, 34, 5, 225, + 222, 34, 5, 225, 228, 34, 5, 225, 223, 34, 5, 225, 224, 34, 5, 225, 215, + 34, 5, 225, 209, 34, 5, 225, 211, 34, 5, 225, 214, 34, 5, 225, 212, 34, + 5, 225, 213, 34, 5, 225, 210, 34, 5, 225, 208, 34, 5, 225, 204, 34, 5, + 225, 207, 34, 5, 225, 205, 34, 5, 225, 206, 34, 5, 201, 114, 34, 5, 200, + 216, 34, 5, 201, 31, 34, 5, 201, 113, 34, 5, 201, 57, 34, 5, 201, 64, 34, + 5, 201, 0, 34, 5, 200, 255, 34, 5, 215, 236, 62, 34, 5, 215, 236, 66, 34, + 5, 215, 236, 70, 34, 5, 215, 236, 252, 138, 34, 5, 215, 236, 238, 255, + 34, 5, 215, 236, 72, 34, 5, 215, 236, 74, 34, 5, 199, 114, 34, 5, 199, 3, + 34, 5, 199, 36, 34, 5, 199, 112, 34, 5, 199, 87, 34, 5, 199, 89, 34, 5, + 199, 14, 34, 5, 198, 246, 34, 5, 199, 77, 34, 5, 199, 54, 34, 5, 199, 63, + 34, 5, 199, 76, 34, 5, 199, 67, 34, 5, 199, 68, 34, 5, 199, 60, 34, 5, + 199, 45, 34, 5, 183, 34, 5, 199, 211, 34, 5, 200, 9, 34, 5, 200, 109, 34, + 5, 200, 48, 34, 5, 200, 51, 34, 5, 199, 245, 34, 5, 199, 236, 34, 5, 242, + 58, 34, 5, 239, 137, 34, 5, 241, 76, 34, 5, 242, 57, 34, 5, 241, 161, 34, + 5, 241, 175, 34, 5, 240, 211, 34, 5, 239, 104, 34, 5, 241, 220, 34, 5, + 241, 185, 34, 5, 241, 197, 34, 5, 241, 219, 34, 5, 241, 207, 34, 5, 241, + 208, 34, 5, 241, 190, 34, 5, 241, 176, 34, 5, 227, 248, 34, 5, 227, 147, + 34, 5, 227, 207, 34, 5, 227, 247, 34, 5, 227, 225, 34, 5, 227, 227, 34, + 5, 227, 166, 34, 5, 227, 126, 34, 5, 236, 89, 34, 5, 235, 50, 34, 5, 235, + 161, 34, 5, 236, 86, 34, 5, 236, 7, 34, 5, 236, 15, 34, 5, 235, 116, 34, + 5, 235, 115, 34, 5, 235, 10, 34, 5, 235, 6, 34, 5, 235, 9, 34, 5, 235, 7, + 34, 5, 235, 8, 34, 5, 235, 235, 34, 5, 235, 215, 34, 5, 235, 225, 34, 5, + 235, 234, 34, 5, 235, 229, 34, 5, 235, 230, 34, 5, 235, 219, 34, 5, 235, + 204, 34, 5, 206, 122, 34, 5, 206, 35, 34, 5, 206, 84, 34, 5, 206, 121, + 34, 5, 206, 104, 34, 5, 206, 106, 34, 5, 206, 61, 34, 5, 206, 26, 34, 5, + 247, 37, 34, 5, 246, 192, 34, 5, 246, 236, 34, 5, 247, 36, 34, 5, 247, 4, + 34, 5, 247, 8, 34, 5, 246, 210, 34, 5, 246, 181, 34, 5, 215, 245, 34, 5, + 215, 210, 34, 5, 215, 229, 34, 5, 215, 244, 34, 5, 215, 231, 34, 5, 215, + 232, 34, 5, 215, 217, 34, 5, 215, 206, 34, 5, 205, 32, 34, 5, 205, 5, 34, + 5, 205, 11, 34, 5, 205, 31, 34, 5, 205, 25, 34, 5, 205, 26, 34, 5, 205, + 9, 34, 5, 205, 3, 34, 5, 204, 113, 34, 5, 204, 105, 34, 5, 204, 109, 34, + 5, 204, 112, 34, 5, 204, 110, 34, 5, 204, 111, 34, 5, 204, 107, 34, 5, + 204, 106, 34, 5, 237, 195, 34, 5, 236, 189, 34, 5, 237, 112, 34, 5, 237, + 194, 34, 5, 237, 140, 34, 5, 237, 147, 34, 5, 237, 13, 34, 5, 236, 167, + 34, 5, 172, 34, 5, 214, 224, 34, 5, 215, 204, 34, 5, 216, 210, 34, 5, + 216, 61, 34, 5, 216, 73, 34, 5, 215, 106, 34, 5, 214, 185, 34, 5, 212, + 130, 34, 5, 220, 220, 34, 5, 236, 161, 34, 38, 236, 3, 26, 22, 225, 2, + 81, 34, 38, 22, 225, 2, 81, 34, 38, 236, 3, 81, 34, 211, 193, 81, 34, + 200, 237, 34, 236, 183, 208, 76, 34, 246, 70, 34, 210, 167, 34, 246, 79, + 34, 215, 25, 246, 79, 34, 214, 79, 81, 34, 216, 128, 210, 154, 34, 17, + 102, 34, 17, 105, 34, 17, 147, 34, 17, 149, 34, 17, 164, 34, 17, 187, 34, + 17, 210, 135, 34, 17, 192, 34, 17, 219, 113, 34, 41, 206, 166, 34, 41, + 204, 159, 34, 41, 206, 67, 34, 41, 236, 235, 34, 41, 237, 104, 34, 41, + 209, 92, 34, 41, 210, 129, 34, 41, 238, 222, 34, 41, 219, 108, 34, 41, + 233, 82, 34, 41, 206, 167, 206, 50, 34, 5, 211, 198, 220, 231, 34, 5, + 220, 227, 34, 5, 220, 228, 34, 5, 220, 229, 34, 5, 211, 198, 247, 240, + 34, 5, 247, 237, 34, 5, 247, 238, 34, 5, 247, 239, 34, 5, 211, 198, 236, + 167, 34, 5, 236, 163, 34, 5, 236, 164, 34, 5, 236, 165, 34, 5, 211, 198, + 214, 185, 34, 5, 214, 181, 34, 5, 214, 182, 34, 5, 214, 183, 34, 205, + 175, 134, 199, 248, 34, 205, 175, 134, 241, 121, 34, 205, 175, 134, 213, + 32, 34, 205, 175, 134, 209, 250, 213, 32, 34, 205, 175, 134, 241, 50, 34, + 205, 175, 134, 226, 242, 34, 205, 175, 134, 246, 218, 34, 205, 175, 134, + 234, 71, 34, 205, 175, 134, 241, 120, 34, 205, 175, 134, 225, 243, 91, 1, + 62, 91, 1, 72, 91, 1, 70, 91, 1, 74, 91, 1, 66, 91, 1, 203, 168, 91, 1, + 236, 89, 91, 1, 161, 91, 1, 236, 15, 91, 1, 235, 161, 91, 1, 235, 116, + 91, 1, 235, 50, 91, 1, 235, 12, 91, 1, 144, 91, 1, 234, 139, 91, 1, 234, + 75, 91, 1, 233, 207, 91, 1, 233, 97, 91, 1, 233, 69, 91, 1, 194, 91, 1, + 225, 40, 91, 1, 224, 210, 91, 1, 224, 110, 91, 1, 224, 42, 91, 1, 224, + 11, 91, 1, 178, 91, 1, 222, 76, 91, 1, 221, 211, 91, 1, 221, 136, 91, 1, + 221, 41, 91, 1, 188, 91, 1, 233, 231, 91, 1, 220, 144, 91, 1, 220, 34, + 91, 1, 219, 150, 91, 1, 218, 241, 91, 1, 218, 133, 91, 1, 218, 71, 91, 1, + 214, 96, 91, 1, 214, 82, 91, 1, 214, 75, 91, 1, 214, 66, 91, 1, 214, 55, + 91, 1, 214, 53, 91, 1, 212, 64, 91, 1, 212, 122, 91, 1, 211, 202, 91, 1, + 209, 182, 91, 1, 209, 29, 91, 1, 208, 24, 91, 1, 207, 191, 91, 1, 242, + 58, 91, 1, 207, 36, 91, 1, 241, 175, 91, 1, 206, 201, 91, 1, 241, 76, 91, + 1, 206, 15, 91, 1, 240, 211, 91, 1, 239, 137, 91, 1, 239, 107, 91, 1, + 240, 222, 91, 1, 205, 203, 91, 1, 205, 202, 91, 1, 205, 191, 91, 1, 205, + 190, 91, 1, 205, 189, 91, 1, 205, 188, 91, 1, 205, 32, 91, 1, 205, 26, + 91, 1, 205, 11, 91, 1, 205, 9, 91, 1, 205, 5, 91, 1, 205, 4, 91, 1, 201, + 114, 91, 1, 201, 64, 91, 1, 201, 31, 91, 1, 201, 0, 91, 1, 200, 216, 91, + 1, 200, 203, 91, 1, 183, 91, 1, 200, 51, 91, 1, 200, 9, 91, 1, 199, 245, + 91, 1, 199, 211, 91, 1, 199, 175, 91, 1, 220, 238, 91, 4, 1, 200, 51, 91, + 4, 1, 200, 9, 91, 4, 1, 199, 245, 91, 4, 1, 199, 211, 91, 4, 1, 199, 175, + 91, 4, 1, 220, 238, 20, 21, 233, 33, 20, 21, 72, 20, 21, 252, 102, 20, + 21, 70, 20, 21, 228, 151, 20, 21, 74, 20, 21, 217, 63, 20, 21, 200, 122, + 217, 63, 20, 21, 89, 238, 255, 20, 21, 89, 70, 20, 21, 62, 20, 21, 252, + 138, 20, 21, 201, 64, 20, 21, 201, 46, 201, 64, 20, 21, 201, 31, 20, 21, + 201, 46, 201, 31, 20, 21, 201, 20, 20, 21, 201, 46, 201, 20, 20, 21, 201, + 0, 20, 21, 201, 46, 201, 0, 20, 21, 200, 244, 20, 21, 201, 46, 200, 244, + 20, 21, 220, 119, 200, 244, 20, 21, 201, 114, 20, 21, 201, 46, 201, 114, + 20, 21, 201, 113, 20, 21, 201, 46, 201, 113, 20, 21, 220, 119, 201, 113, + 20, 21, 251, 176, 20, 21, 200, 122, 201, 147, 20, 21, 235, 123, 208, 76, + 20, 21, 47, 169, 20, 21, 47, 235, 73, 20, 21, 47, 248, 93, 167, 213, 26, + 20, 21, 47, 205, 158, 167, 213, 26, 20, 21, 47, 51, 167, 213, 26, 20, 21, + 47, 213, 26, 20, 21, 47, 53, 169, 20, 21, 47, 53, 209, 250, 83, 208, 34, + 20, 21, 47, 101, 240, 182, 20, 21, 47, 209, 250, 233, 177, 97, 20, 21, + 47, 215, 113, 20, 21, 47, 127, 207, 17, 20, 21, 238, 179, 20, 21, 228, + 117, 20, 21, 217, 78, 20, 21, 251, 85, 20, 21, 216, 73, 20, 21, 216, 208, + 20, 21, 215, 204, 20, 21, 215, 166, 20, 21, 215, 106, 20, 21, 215, 81, + 20, 21, 200, 122, 215, 81, 20, 21, 89, 234, 120, 20, 21, 89, 234, 75, 20, + 21, 172, 20, 21, 216, 210, 20, 21, 214, 183, 20, 21, 201, 46, 214, 183, + 20, 21, 214, 181, 20, 21, 201, 46, 214, 181, 20, 21, 214, 180, 20, 21, + 201, 46, 214, 180, 20, 21, 214, 178, 20, 21, 201, 46, 214, 178, 20, 21, + 214, 177, 20, 21, 201, 46, 214, 177, 20, 21, 214, 185, 20, 21, 201, 46, + 214, 185, 20, 21, 214, 184, 20, 21, 201, 46, 214, 184, 20, 21, 200, 122, + 214, 184, 20, 21, 216, 226, 20, 21, 201, 46, 216, 226, 20, 21, 89, 234, + 247, 20, 21, 206, 201, 20, 21, 207, 30, 20, 21, 206, 15, 20, 21, 205, + 255, 20, 21, 138, 20, 21, 205, 161, 20, 21, 200, 122, 205, 161, 20, 21, + 89, 241, 161, 20, 21, 89, 241, 76, 20, 21, 207, 36, 20, 21, 207, 32, 20, + 21, 204, 168, 20, 21, 201, 46, 204, 168, 20, 21, 204, 147, 20, 21, 201, + 46, 204, 147, 20, 21, 204, 146, 20, 21, 201, 46, 204, 146, 20, 21, 105, + 20, 21, 201, 46, 105, 20, 21, 204, 137, 20, 21, 201, 46, 204, 137, 20, + 21, 204, 170, 20, 21, 201, 46, 204, 170, 20, 21, 204, 169, 20, 21, 201, + 46, 204, 169, 20, 21, 220, 119, 204, 169, 20, 21, 207, 83, 20, 21, 204, + 248, 20, 21, 204, 232, 20, 21, 204, 230, 20, 21, 204, 253, 20, 21, 227, + 8, 20, 21, 227, 100, 20, 21, 226, 163, 20, 21, 226, 150, 20, 21, 226, 88, + 20, 21, 226, 68, 20, 21, 200, 122, 226, 68, 20, 21, 161, 20, 21, 227, + 105, 20, 21, 225, 224, 20, 21, 201, 46, 225, 224, 20, 21, 225, 222, 20, + 21, 201, 46, 225, 222, 20, 21, 225, 221, 20, 21, 201, 46, 225, 221, 20, + 21, 225, 219, 20, 21, 201, 46, 225, 219, 20, 21, 225, 218, 20, 21, 201, + 46, 225, 218, 20, 21, 225, 229, 20, 21, 201, 46, 225, 229, 20, 21, 225, + 228, 20, 21, 201, 46, 225, 228, 20, 21, 220, 119, 225, 228, 20, 21, 227, + 118, 20, 21, 225, 230, 20, 21, 208, 253, 226, 254, 20, 21, 208, 253, 226, + 151, 20, 21, 208, 253, 226, 82, 20, 21, 208, 253, 227, 84, 20, 21, 247, + 76, 20, 21, 247, 188, 20, 21, 246, 173, 20, 21, 246, 163, 20, 21, 246, + 91, 20, 21, 243, 30, 20, 21, 200, 122, 243, 30, 20, 21, 247, 190, 20, 21, + 247, 189, 20, 21, 242, 174, 20, 21, 201, 46, 242, 174, 20, 21, 242, 172, + 20, 21, 201, 46, 242, 172, 20, 21, 242, 171, 20, 21, 201, 46, 242, 171, + 20, 21, 242, 170, 20, 21, 201, 46, 242, 170, 20, 21, 242, 169, 20, 21, + 201, 46, 242, 169, 20, 21, 242, 176, 20, 21, 201, 46, 242, 176, 20, 21, + 242, 175, 20, 21, 201, 46, 242, 175, 20, 21, 220, 119, 242, 175, 20, 21, + 247, 223, 20, 21, 211, 232, 206, 124, 20, 21, 222, 76, 20, 21, 222, 232, + 20, 21, 221, 211, 20, 21, 221, 181, 20, 21, 221, 136, 20, 21, 221, 87, + 20, 21, 200, 122, 221, 87, 20, 21, 178, 20, 21, 222, 233, 20, 21, 220, + 229, 20, 21, 201, 46, 220, 229, 20, 21, 220, 227, 20, 21, 201, 46, 220, + 227, 20, 21, 220, 226, 20, 21, 201, 46, 220, 226, 20, 21, 220, 225, 20, + 21, 201, 46, 220, 225, 20, 21, 220, 224, 20, 21, 201, 46, 220, 224, 20, + 21, 220, 231, 20, 21, 201, 46, 220, 231, 20, 21, 220, 230, 20, 21, 201, + 46, 220, 230, 20, 21, 220, 119, 220, 230, 20, 21, 223, 243, 20, 21, 201, + 46, 223, 243, 20, 21, 221, 215, 20, 21, 250, 153, 223, 243, 20, 21, 211, + 232, 223, 243, 20, 21, 220, 34, 20, 21, 220, 156, 20, 21, 219, 150, 20, + 21, 219, 125, 20, 21, 218, 241, 20, 21, 218, 229, 20, 21, 200, 122, 218, + 229, 20, 21, 188, 20, 21, 220, 157, 20, 21, 218, 67, 20, 21, 201, 46, + 218, 67, 20, 21, 218, 69, 20, 21, 201, 46, 218, 69, 20, 21, 218, 68, 20, + 21, 201, 46, 218, 68, 20, 21, 220, 119, 218, 68, 20, 21, 220, 214, 20, + 21, 89, 219, 255, 20, 21, 219, 155, 20, 21, 225, 40, 20, 21, 225, 174, + 20, 21, 224, 210, 20, 21, 224, 192, 20, 21, 224, 110, 20, 21, 224, 78, + 20, 21, 200, 122, 224, 78, 20, 21, 194, 20, 21, 225, 175, 20, 21, 224, 8, + 20, 21, 201, 46, 224, 8, 20, 21, 224, 7, 20, 21, 201, 46, 224, 7, 20, 21, + 224, 6, 20, 21, 201, 46, 224, 6, 20, 21, 224, 5, 20, 21, 201, 46, 224, 5, + 20, 21, 224, 4, 20, 21, 201, 46, 224, 4, 20, 21, 224, 10, 20, 21, 201, + 46, 224, 10, 20, 21, 224, 9, 20, 21, 201, 46, 224, 9, 20, 21, 156, 20, + 21, 201, 46, 156, 20, 21, 179, 156, 20, 21, 211, 202, 20, 21, 212, 59, + 20, 21, 209, 182, 20, 21, 209, 161, 20, 21, 209, 29, 20, 21, 209, 10, 20, + 21, 200, 122, 209, 10, 20, 21, 212, 64, 20, 21, 212, 61, 20, 21, 207, + 182, 20, 21, 201, 46, 207, 182, 20, 21, 207, 176, 20, 21, 201, 46, 207, + 176, 20, 21, 207, 175, 20, 21, 201, 46, 207, 175, 20, 21, 207, 171, 20, + 21, 201, 46, 207, 171, 20, 21, 207, 170, 20, 21, 201, 46, 207, 170, 20, + 21, 207, 186, 20, 21, 201, 46, 207, 186, 20, 21, 207, 185, 20, 21, 201, + 46, 207, 185, 20, 21, 220, 119, 207, 185, 20, 21, 212, 122, 20, 21, 250, + 153, 212, 122, 20, 21, 207, 187, 20, 21, 248, 141, 212, 122, 20, 21, 221, + 80, 209, 88, 20, 21, 220, 119, 209, 79, 20, 21, 220, 119, 212, 120, 20, + 21, 220, 119, 208, 195, 20, 21, 220, 119, 208, 27, 20, 21, 220, 119, 209, + 78, 20, 21, 220, 119, 211, 205, 20, 21, 210, 65, 20, 21, 210, 33, 20, 21, + 210, 28, 20, 21, 210, 8, 20, 21, 210, 2, 20, 21, 210, 114, 20, 21, 210, + 109, 20, 21, 209, 197, 20, 21, 201, 46, 209, 197, 20, 21, 209, 196, 20, + 21, 201, 46, 209, 196, 20, 21, 209, 195, 20, 21, 201, 46, 209, 195, 20, + 21, 209, 194, 20, 21, 201, 46, 209, 194, 20, 21, 209, 193, 20, 21, 201, + 46, 209, 193, 20, 21, 209, 200, 20, 21, 201, 46, 209, 200, 20, 21, 209, + 199, 20, 21, 201, 46, 209, 199, 20, 21, 210, 116, 20, 21, 200, 51, 20, + 21, 200, 107, 20, 21, 200, 9, 20, 21, 200, 0, 20, 21, 199, 245, 20, 21, + 199, 230, 20, 21, 200, 122, 199, 230, 20, 21, 183, 20, 21, 200, 109, 20, + 21, 199, 172, 20, 21, 201, 46, 199, 172, 20, 21, 199, 171, 20, 21, 201, + 46, 199, 171, 20, 21, 199, 170, 20, 21, 201, 46, 199, 170, 20, 21, 199, + 169, 20, 21, 201, 46, 199, 169, 20, 21, 199, 168, 20, 21, 201, 46, 199, + 168, 20, 21, 199, 174, 20, 21, 201, 46, 199, 174, 20, 21, 199, 173, 20, + 21, 201, 46, 199, 173, 20, 21, 220, 119, 199, 173, 20, 21, 200, 123, 20, + 21, 248, 186, 200, 123, 20, 21, 201, 46, 200, 123, 20, 21, 211, 232, 200, + 9, 20, 21, 213, 190, 20, 21, 214, 32, 213, 190, 20, 21, 201, 46, 225, 40, + 20, 21, 213, 247, 20, 21, 213, 88, 20, 21, 213, 33, 20, 21, 213, 1, 20, + 21, 212, 238, 20, 21, 201, 46, 224, 110, 20, 21, 213, 252, 20, 21, 213, + 248, 20, 21, 201, 46, 194, 20, 21, 212, 139, 20, 21, 201, 46, 212, 139, + 20, 21, 146, 20, 21, 201, 46, 146, 20, 21, 179, 146, 20, 21, 237, 147, + 20, 21, 237, 192, 20, 21, 237, 112, 20, 21, 237, 98, 20, 21, 237, 13, 20, + 21, 237, 2, 20, 21, 237, 195, 20, 21, 237, 194, 20, 21, 236, 166, 20, 21, + 201, 46, 236, 166, 20, 21, 238, 5, 20, 21, 206, 106, 20, 21, 220, 212, + 206, 106, 20, 21, 206, 84, 20, 21, 220, 212, 206, 84, 20, 21, 206, 78, + 20, 21, 220, 212, 206, 78, 20, 21, 206, 61, 20, 21, 206, 56, 20, 21, 206, + 122, 20, 21, 206, 121, 20, 21, 206, 25, 20, 21, 201, 46, 206, 25, 20, 21, + 206, 124, 20, 21, 204, 239, 20, 21, 204, 237, 20, 21, 204, 236, 20, 21, + 204, 241, 20, 21, 204, 242, 20, 21, 204, 131, 20, 21, 204, 130, 20, 21, + 204, 129, 20, 21, 204, 133, 20, 21, 218, 88, 234, 139, 20, 21, 218, 88, + 234, 75, 20, 21, 218, 88, 234, 54, 20, 21, 218, 88, 233, 207, 20, 21, + 218, 88, 233, 188, 20, 21, 218, 88, 144, 20, 21, 218, 88, 234, 233, 20, + 21, 218, 88, 234, 247, 20, 21, 218, 87, 234, 247, 20, 21, 234, 41, 20, + 21, 214, 155, 20, 21, 214, 121, 20, 21, 214, 115, 20, 21, 214, 109, 20, + 21, 214, 104, 20, 21, 214, 159, 20, 21, 214, 158, 20, 21, 214, 167, 20, + 21, 205, 199, 20, 21, 205, 197, 20, 21, 205, 196, 20, 21, 205, 200, 20, + 21, 201, 46, 213, 190, 20, 21, 201, 46, 213, 88, 20, 21, 201, 46, 213, 1, + 20, 21, 201, 46, 213, 252, 20, 21, 219, 251, 20, 21, 219, 201, 20, 21, + 219, 197, 20, 21, 219, 178, 20, 21, 219, 173, 20, 21, 219, 253, 20, 21, + 219, 252, 20, 21, 219, 255, 20, 21, 219, 14, 20, 21, 211, 232, 210, 65, + 20, 21, 211, 232, 210, 33, 20, 21, 211, 232, 210, 8, 20, 21, 211, 232, + 210, 114, 20, 21, 200, 242, 206, 106, 20, 21, 200, 242, 206, 84, 20, 21, + 200, 242, 206, 61, 20, 21, 200, 242, 206, 122, 20, 21, 200, 242, 206, + 124, 20, 21, 224, 217, 20, 21, 224, 216, 20, 21, 224, 215, 20, 21, 224, + 214, 20, 21, 224, 223, 20, 21, 224, 222, 20, 21, 224, 224, 20, 21, 206, + 123, 206, 106, 20, 21, 206, 123, 206, 84, 20, 21, 206, 123, 206, 78, 20, + 21, 206, 123, 206, 61, 20, 21, 206, 123, 206, 56, 20, 21, 206, 123, 206, + 122, 20, 21, 206, 123, 206, 121, 20, 21, 206, 123, 206, 124, 20, 21, 251, + 162, 250, 103, 20, 21, 248, 141, 72, 20, 21, 248, 141, 70, 20, 21, 248, + 141, 74, 20, 21, 248, 141, 62, 20, 21, 248, 141, 201, 64, 20, 21, 248, + 141, 201, 31, 20, 21, 248, 141, 201, 0, 20, 21, 248, 141, 201, 114, 20, + 21, 248, 141, 220, 34, 20, 21, 248, 141, 219, 150, 20, 21, 248, 141, 218, + 241, 20, 21, 248, 141, 188, 20, 21, 248, 141, 227, 8, 20, 21, 248, 141, + 226, 163, 20, 21, 248, 141, 226, 88, 20, 21, 248, 141, 161, 20, 21, 211, + 232, 234, 139, 20, 21, 211, 232, 234, 75, 20, 21, 211, 232, 233, 207, 20, + 21, 211, 232, 144, 20, 21, 89, 235, 167, 20, 21, 89, 235, 171, 20, 21, + 89, 235, 185, 20, 21, 89, 235, 184, 20, 21, 89, 235, 173, 20, 21, 89, + 235, 199, 20, 21, 89, 212, 175, 20, 21, 89, 213, 1, 20, 21, 89, 213, 190, + 20, 21, 89, 213, 167, 20, 21, 89, 213, 88, 20, 21, 89, 213, 252, 20, 21, + 89, 200, 216, 20, 21, 89, 201, 0, 20, 21, 89, 201, 64, 20, 21, 89, 201, + 57, 20, 21, 89, 201, 31, 20, 21, 89, 201, 114, 20, 21, 89, 233, 61, 20, + 21, 89, 233, 62, 20, 21, 89, 233, 65, 20, 21, 89, 233, 64, 20, 21, 89, + 233, 63, 20, 21, 89, 233, 68, 20, 21, 89, 206, 35, 20, 21, 89, 206, 61, + 20, 21, 89, 206, 106, 20, 21, 89, 206, 104, 20, 21, 89, 206, 84, 20, 21, + 89, 206, 122, 20, 21, 89, 204, 220, 20, 21, 89, 204, 230, 20, 21, 89, + 204, 248, 20, 21, 89, 204, 247, 20, 21, 89, 204, 232, 20, 21, 89, 204, + 253, 20, 21, 89, 214, 224, 20, 21, 89, 215, 106, 20, 21, 89, 216, 73, 20, + 21, 89, 216, 61, 20, 21, 89, 215, 204, 20, 21, 89, 172, 20, 21, 89, 216, + 226, 20, 21, 89, 235, 50, 20, 21, 89, 235, 116, 20, 21, 89, 236, 15, 20, + 21, 89, 236, 7, 20, 21, 89, 235, 161, 20, 21, 89, 236, 89, 20, 21, 89, + 226, 172, 20, 21, 89, 226, 178, 20, 21, 89, 226, 192, 20, 21, 89, 226, + 191, 20, 21, 89, 226, 185, 20, 21, 89, 226, 207, 20, 21, 89, 226, 104, + 20, 21, 89, 226, 105, 20, 21, 89, 226, 108, 20, 21, 89, 226, 107, 20, 21, + 89, 226, 106, 20, 21, 89, 226, 109, 20, 21, 89, 226, 110, 20, 21, 89, + 218, 133, 20, 21, 89, 218, 241, 20, 21, 89, 220, 34, 20, 21, 89, 220, 29, + 20, 21, 89, 219, 150, 20, 21, 89, 188, 20, 21, 89, 221, 41, 20, 21, 89, + 221, 136, 20, 21, 89, 222, 76, 20, 21, 89, 222, 64, 20, 21, 89, 221, 211, + 20, 21, 89, 178, 20, 21, 89, 199, 211, 20, 21, 89, 199, 245, 20, 21, 89, + 200, 51, 20, 21, 89, 200, 48, 20, 21, 89, 200, 9, 20, 21, 89, 183, 20, + 21, 89, 227, 147, 20, 21, 211, 232, 227, 147, 20, 21, 89, 227, 166, 20, + 21, 89, 227, 227, 20, 21, 89, 227, 225, 20, 21, 89, 227, 207, 20, 21, + 211, 232, 227, 207, 20, 21, 89, 227, 248, 20, 21, 89, 227, 179, 20, 21, + 89, 227, 183, 20, 21, 89, 227, 193, 20, 21, 89, 227, 192, 20, 21, 89, + 227, 191, 20, 21, 89, 227, 194, 20, 21, 89, 224, 42, 20, 21, 89, 224, + 110, 20, 21, 89, 225, 40, 20, 21, 89, 225, 32, 20, 21, 89, 224, 210, 20, + 21, 89, 194, 20, 21, 89, 240, 215, 20, 21, 89, 240, 216, 20, 21, 89, 240, + 221, 20, 21, 89, 240, 220, 20, 21, 89, 240, 217, 20, 21, 89, 240, 222, + 20, 21, 89, 224, 213, 20, 21, 89, 224, 215, 20, 21, 89, 224, 219, 20, 21, + 89, 224, 218, 20, 21, 89, 224, 217, 20, 21, 89, 224, 223, 20, 21, 89, + 205, 194, 20, 21, 89, 205, 196, 20, 21, 89, 205, 199, 20, 21, 89, 205, + 198, 20, 21, 89, 205, 197, 20, 21, 89, 205, 200, 20, 21, 89, 205, 189, + 20, 21, 89, 205, 190, 20, 21, 89, 205, 202, 20, 21, 89, 205, 201, 20, 21, + 89, 205, 191, 20, 21, 89, 205, 203, 20, 21, 89, 199, 3, 20, 21, 89, 199, + 14, 20, 21, 89, 199, 89, 20, 21, 89, 199, 87, 20, 21, 89, 199, 36, 20, + 21, 89, 199, 114, 20, 21, 89, 199, 157, 20, 21, 89, 82, 199, 157, 20, 21, + 89, 239, 80, 20, 21, 89, 239, 81, 20, 21, 89, 239, 90, 20, 21, 89, 239, + 89, 20, 21, 89, 239, 84, 20, 21, 89, 239, 93, 20, 21, 89, 208, 24, 20, + 21, 89, 209, 29, 20, 21, 89, 211, 202, 20, 21, 89, 211, 190, 20, 21, 89, + 209, 182, 20, 21, 89, 212, 64, 20, 21, 89, 209, 220, 20, 21, 89, 210, 8, + 20, 21, 89, 210, 65, 20, 21, 89, 210, 63, 20, 21, 89, 210, 33, 20, 21, + 89, 210, 114, 20, 21, 89, 210, 116, 20, 21, 89, 205, 5, 20, 21, 89, 205, + 9, 20, 21, 89, 205, 26, 20, 21, 89, 205, 25, 20, 21, 89, 205, 11, 20, 21, + 89, 205, 32, 20, 21, 89, 246, 192, 20, 21, 89, 246, 210, 20, 21, 89, 247, + 8, 20, 21, 89, 247, 4, 20, 21, 89, 246, 236, 20, 21, 89, 247, 37, 20, 21, + 89, 204, 223, 20, 21, 89, 204, 224, 20, 21, 89, 204, 227, 20, 21, 89, + 204, 226, 20, 21, 89, 204, 225, 20, 21, 89, 204, 228, 20, 21, 246, 237, + 54, 20, 21, 236, 183, 208, 76, 20, 21, 214, 151, 20, 21, 219, 249, 20, + 21, 219, 11, 20, 21, 219, 10, 20, 21, 219, 9, 20, 21, 219, 8, 20, 21, + 219, 13, 20, 21, 219, 12, 20, 21, 200, 242, 206, 23, 20, 21, 200, 242, + 206, 22, 20, 21, 200, 242, 206, 21, 20, 21, 200, 242, 206, 20, 20, 21, + 200, 242, 206, 19, 20, 21, 200, 242, 206, 26, 20, 21, 200, 242, 206, 25, + 20, 21, 200, 242, 47, 206, 124, 20, 21, 248, 141, 201, 147, 217, 112, + 208, 245, 81, 217, 112, 1, 248, 234, 217, 112, 1, 224, 28, 217, 112, 1, + 237, 144, 217, 112, 1, 212, 44, 217, 112, 1, 219, 106, 217, 112, 1, 204, + 43, 217, 112, 1, 242, 31, 217, 112, 1, 205, 227, 217, 112, 1, 246, 82, + 217, 112, 1, 247, 63, 217, 112, 1, 221, 28, 217, 112, 1, 235, 96, 217, + 112, 1, 219, 239, 217, 112, 1, 208, 69, 217, 112, 1, 212, 168, 217, 112, + 1, 251, 173, 217, 112, 1, 217, 67, 217, 112, 1, 203, 214, 217, 112, 1, + 239, 25, 217, 112, 1, 228, 44, 217, 112, 1, 239, 26, 217, 112, 1, 217, + 33, 217, 112, 1, 204, 21, 217, 112, 1, 228, 157, 217, 112, 1, 239, 23, + 217, 112, 1, 216, 51, 217, 112, 237, 143, 81, 217, 112, 213, 105, 237, + 143, 81, 212, 157, 1, 237, 133, 237, 124, 237, 148, 238, 5, 212, 157, 1, + 203, 168, 212, 157, 1, 203, 199, 203, 215, 66, 212, 157, 1, 199, 214, + 212, 157, 1, 200, 123, 212, 157, 1, 201, 147, 212, 157, 1, 206, 28, 206, + 27, 206, 54, 212, 157, 1, 238, 74, 212, 157, 1, 251, 52, 62, 212, 157, 1, + 217, 16, 74, 212, 157, 1, 251, 255, 62, 212, 157, 1, 251, 205, 212, 157, + 1, 224, 85, 74, 212, 157, 1, 209, 243, 74, 212, 157, 1, 74, 212, 157, 1, + 217, 121, 212, 157, 1, 217, 78, 212, 157, 1, 213, 227, 213, 240, 213, + 152, 146, 212, 157, 1, 227, 23, 212, 157, 1, 247, 59, 212, 157, 1, 227, + 24, 227, 118, 212, 157, 1, 236, 156, 212, 157, 1, 238, 165, 212, 157, 1, + 236, 10, 234, 253, 236, 156, 212, 157, 1, 236, 49, 212, 157, 1, 200, 208, + 200, 199, 201, 147, 212, 157, 1, 234, 225, 234, 247, 212, 157, 1, 234, + 229, 234, 247, 212, 157, 1, 224, 87, 234, 247, 212, 157, 1, 209, 246, + 234, 247, 212, 157, 1, 220, 114, 218, 51, 220, 115, 220, 214, 212, 157, + 1, 209, 244, 220, 214, 212, 157, 1, 239, 177, 212, 157, 1, 228, 23, 228, + 27, 228, 14, 70, 212, 157, 1, 72, 212, 157, 1, 227, 218, 227, 251, 212, + 157, 1, 235, 249, 212, 157, 1, 224, 88, 251, 221, 212, 157, 1, 209, 248, + 62, 212, 157, 1, 228, 6, 238, 138, 212, 157, 1, 216, 7, 216, 32, 216, + 226, 212, 157, 1, 251, 135, 238, 136, 212, 157, 1, 208, 250, 212, 122, + 212, 157, 1, 209, 165, 224, 84, 212, 122, 212, 157, 1, 209, 242, 212, + 122, 212, 157, 1, 247, 223, 212, 157, 1, 199, 157, 212, 157, 1, 205, 208, + 205, 220, 204, 115, 207, 83, 212, 157, 1, 209, 241, 207, 83, 212, 157, 1, + 242, 153, 212, 157, 1, 248, 213, 248, 216, 248, 147, 250, 103, 212, 157, + 1, 209, 247, 250, 103, 212, 157, 1, 239, 176, 212, 157, 1, 217, 47, 212, + 157, 1, 238, 235, 238, 242, 72, 212, 157, 1, 222, 171, 222, 181, 223, + 243, 212, 157, 1, 224, 86, 223, 243, 212, 157, 1, 209, 245, 223, 243, + 212, 157, 1, 225, 55, 225, 154, 224, 95, 156, 212, 157, 1, 239, 178, 212, + 157, 1, 228, 90, 212, 157, 1, 228, 91, 212, 157, 1, 242, 45, 242, 51, + 242, 153, 212, 157, 1, 217, 9, 238, 73, 74, 212, 157, 1, 239, 21, 212, + 157, 1, 228, 43, 212, 157, 1, 242, 173, 212, 157, 1, 247, 173, 212, 157, + 1, 247, 75, 212, 157, 1, 208, 114, 212, 157, 1, 224, 83, 212, 157, 1, + 209, 240, 212, 157, 1, 232, 230, 212, 157, 1, 214, 167, 212, 157, 1, 200, + 195, 212, 157, 209, 139, 214, 211, 212, 157, 221, 21, 214, 211, 212, 157, + 242, 235, 214, 211, 212, 157, 250, 216, 99, 212, 157, 204, 172, 99, 212, + 157, 248, 232, 99, 212, 157, 1, 227, 118, 212, 157, 1, 210, 116, 212, + 157, 1, 217, 63, 212, 157, 1, 236, 212, 247, 114, 217, 15, 212, 157, 1, + 236, 212, 247, 114, 228, 26, 212, 157, 1, 236, 212, 247, 114, 238, 241, + 212, 157, 1, 236, 212, 247, 114, 251, 254, 212, 157, 1, 236, 212, 247, + 114, 251, 205, 207, 12, 1, 62, 207, 12, 1, 70, 207, 12, 1, 66, 207, 12, + 1, 161, 207, 12, 1, 236, 89, 207, 12, 1, 219, 253, 207, 12, 1, 207, 36, + 207, 12, 1, 242, 58, 207, 12, 1, 188, 207, 12, 1, 172, 207, 12, 1, 249, + 136, 207, 12, 1, 178, 207, 12, 1, 183, 207, 12, 1, 194, 207, 12, 1, 201, + 114, 207, 12, 1, 212, 64, 207, 12, 1, 144, 207, 12, 22, 2, 70, 207, 12, + 22, 2, 66, 207, 12, 2, 202, 208, 234, 170, 1, 62, 234, 170, 1, 70, 234, + 170, 1, 66, 234, 170, 1, 161, 234, 170, 1, 236, 89, 234, 170, 1, 219, + 253, 234, 170, 1, 207, 36, 234, 170, 1, 242, 58, 234, 170, 1, 188, 234, + 170, 1, 172, 234, 170, 1, 249, 136, 234, 170, 1, 178, 234, 170, 1, 183, + 234, 170, 1, 213, 252, 234, 170, 1, 194, 234, 170, 1, 201, 114, 234, 170, + 1, 212, 64, 234, 170, 1, 144, 234, 170, 22, 2, 70, 234, 170, 22, 2, 66, + 234, 170, 2, 216, 165, 215, 222, 209, 139, 214, 211, 215, 222, 53, 214, + 211, 248, 28, 1, 62, 248, 28, 1, 70, 248, 28, 1, 66, 248, 28, 1, 161, + 248, 28, 1, 236, 89, 248, 28, 1, 219, 253, 248, 28, 1, 207, 36, 248, 28, + 1, 242, 58, 248, 28, 1, 188, 248, 28, 1, 172, 248, 28, 1, 249, 136, 248, + 28, 1, 178, 248, 28, 1, 183, 248, 28, 1, 213, 252, 248, 28, 1, 194, 248, + 28, 1, 201, 114, 248, 28, 1, 212, 64, 248, 28, 1, 144, 248, 28, 22, 2, + 70, 248, 28, 22, 2, 66, 207, 11, 1, 62, 207, 11, 1, 70, 207, 11, 1, 66, + 207, 11, 1, 161, 207, 11, 1, 236, 89, 207, 11, 1, 219, 253, 207, 11, 1, + 207, 36, 207, 11, 1, 242, 58, 207, 11, 1, 188, 207, 11, 1, 172, 207, 11, + 1, 249, 136, 207, 11, 1, 178, 207, 11, 1, 183, 207, 11, 1, 194, 207, 11, + 1, 201, 114, 207, 11, 1, 212, 64, 207, 11, 22, 2, 70, 207, 11, 22, 2, 66, + 86, 1, 161, 86, 1, 226, 207, 86, 1, 226, 88, 86, 1, 226, 178, 86, 1, 219, + 178, 86, 1, 247, 190, 86, 1, 247, 37, 86, 1, 246, 91, 86, 1, 246, 210, + 86, 1, 218, 26, 86, 1, 242, 58, 86, 1, 204, 241, 86, 1, 240, 211, 86, 1, + 204, 236, 86, 1, 218, 247, 86, 1, 207, 36, 86, 1, 206, 122, 86, 1, 138, + 86, 1, 206, 61, 86, 1, 218, 241, 86, 1, 249, 136, 86, 1, 215, 245, 86, 1, + 215, 106, 86, 1, 215, 217, 86, 1, 221, 136, 86, 1, 199, 245, 86, 1, 213, + 1, 86, 1, 224, 110, 86, 1, 202, 193, 86, 1, 210, 114, 86, 1, 208, 139, + 86, 1, 212, 64, 86, 1, 144, 86, 1, 194, 86, 1, 214, 159, 86, 228, 104, + 22, 214, 145, 86, 228, 104, 22, 214, 158, 86, 228, 104, 22, 214, 121, 86, + 228, 104, 22, 214, 115, 86, 228, 104, 22, 214, 97, 86, 228, 104, 22, 214, + 67, 86, 228, 104, 22, 214, 55, 86, 228, 104, 22, 214, 54, 86, 228, 104, + 22, 212, 131, 86, 228, 104, 22, 212, 124, 86, 228, 104, 22, 224, 2, 86, + 228, 104, 22, 223, 246, 86, 228, 104, 22, 214, 139, 86, 228, 104, 22, + 214, 151, 86, 228, 104, 22, 214, 105, 204, 128, 102, 86, 228, 104, 22, + 214, 105, 204, 128, 105, 86, 228, 104, 22, 214, 141, 86, 22, 228, 88, + 251, 1, 86, 22, 228, 88, 252, 138, 86, 22, 2, 252, 138, 86, 22, 2, 70, + 86, 22, 2, 228, 151, 86, 22, 2, 200, 123, 86, 22, 2, 199, 167, 86, 22, 2, + 66, 86, 22, 2, 203, 182, 86, 22, 2, 204, 46, 86, 22, 2, 217, 121, 86, 22, + 2, 183, 86, 22, 2, 228, 178, 86, 22, 2, 72, 86, 22, 2, 251, 221, 86, 22, + 2, 251, 176, 86, 22, 2, 217, 63, 86, 22, 2, 250, 139, 86, 2, 219, 123, + 86, 2, 213, 188, 86, 2, 199, 178, 86, 2, 220, 241, 86, 2, 205, 86, 86, 2, + 249, 79, 86, 2, 212, 252, 86, 2, 205, 184, 86, 2, 227, 75, 86, 2, 251, + 178, 86, 2, 212, 14, 212, 7, 86, 2, 202, 205, 86, 2, 246, 85, 86, 2, 249, + 51, 86, 2, 226, 199, 86, 2, 249, 74, 86, 2, 247, 161, 215, 167, 225, 235, + 86, 2, 225, 9, 205, 161, 86, 2, 248, 202, 86, 2, 215, 219, 221, 38, 86, + 2, 226, 66, 86, 242, 195, 16, 213, 80, 86, 2, 250, 121, 86, 2, 250, 142, + 86, 17, 199, 81, 86, 17, 102, 86, 17, 105, 86, 17, 147, 86, 17, 149, 86, + 17, 164, 86, 17, 187, 86, 17, 210, 135, 86, 17, 192, 86, 17, 219, 113, + 86, 16, 225, 9, 250, 144, 209, 13, 86, 16, 225, 9, 250, 144, 221, 5, 86, + 16, 225, 9, 250, 144, 215, 166, 86, 16, 225, 9, 250, 144, 248, 235, 86, + 16, 225, 9, 250, 144, 248, 8, 86, 16, 225, 9, 250, 144, 215, 42, 86, 16, + 225, 9, 250, 144, 215, 36, 86, 16, 225, 9, 250, 144, 215, 34, 86, 16, + 225, 9, 250, 144, 215, 40, 86, 16, 225, 9, 250, 144, 215, 38, 92, 248, + 160, 92, 238, 195, 92, 246, 70, 92, 236, 183, 208, 76, 92, 246, 79, 92, + 236, 229, 240, 180, 92, 205, 183, 209, 23, 233, 33, 92, 209, 180, 5, 248, + 89, 222, 145, 92, 222, 177, 246, 70, 92, 222, 177, 236, 183, 208, 76, 92, + 219, 104, 92, 236, 211, 58, 211, 176, 102, 92, 236, 211, 58, 211, 176, + 105, 92, 236, 211, 58, 211, 176, 147, 92, 22, 210, 154, 92, 17, 199, 81, + 92, 17, 102, 92, 17, 105, 92, 17, 147, 92, 17, 149, 92, 17, 164, 92, 17, + 187, 92, 17, 210, 135, 92, 17, 192, 92, 17, 219, 113, 92, 1, 62, 92, 1, + 72, 92, 1, 70, 92, 1, 74, 92, 1, 66, 92, 1, 217, 121, 92, 1, 204, 31, 92, + 1, 238, 255, 92, 1, 188, 92, 1, 251, 76, 92, 1, 249, 136, 92, 1, 172, 92, + 1, 214, 159, 92, 1, 236, 89, 92, 1, 178, 92, 1, 194, 92, 1, 212, 64, 92, + 1, 210, 114, 92, 1, 207, 36, 92, 1, 242, 58, 92, 1, 247, 37, 92, 1, 227, + 248, 92, 1, 183, 92, 1, 213, 252, 92, 1, 201, 114, 92, 1, 237, 195, 92, + 1, 161, 92, 1, 226, 207, 92, 1, 205, 32, 92, 1, 199, 114, 92, 1, 234, + 233, 92, 1, 199, 7, 92, 1, 224, 223, 92, 1, 199, 63, 92, 1, 246, 236, 92, + 1, 205, 183, 168, 22, 54, 92, 1, 205, 183, 72, 92, 1, 205, 183, 70, 92, + 1, 205, 183, 74, 92, 1, 205, 183, 66, 92, 1, 205, 183, 217, 121, 92, 1, + 205, 183, 204, 31, 92, 1, 205, 183, 251, 76, 92, 1, 205, 183, 249, 136, + 92, 1, 205, 183, 172, 92, 1, 205, 183, 214, 159, 92, 1, 205, 183, 236, + 89, 92, 1, 205, 183, 178, 92, 1, 205, 183, 207, 36, 92, 1, 205, 183, 242, + 58, 92, 1, 205, 183, 247, 37, 92, 1, 205, 183, 227, 248, 92, 1, 205, 183, + 205, 32, 92, 1, 205, 183, 183, 92, 1, 205, 183, 201, 114, 92, 1, 205, + 183, 161, 92, 1, 205, 183, 236, 86, 92, 1, 205, 183, 234, 233, 92, 1, + 205, 183, 227, 206, 92, 1, 205, 183, 219, 148, 92, 1, 205, 183, 239, 93, + 92, 1, 209, 180, 72, 92, 1, 209, 180, 70, 92, 1, 209, 180, 228, 3, 92, 1, + 209, 180, 204, 31, 92, 1, 209, 180, 66, 92, 1, 209, 180, 251, 76, 92, 1, + 209, 180, 161, 92, 1, 209, 180, 236, 89, 92, 1, 209, 180, 144, 92, 1, + 209, 180, 172, 92, 1, 209, 180, 210, 114, 92, 1, 209, 180, 207, 36, 92, + 1, 209, 180, 242, 58, 92, 1, 209, 180, 227, 248, 92, 1, 209, 180, 237, + 195, 92, 1, 209, 180, 236, 86, 92, 1, 209, 180, 234, 233, 92, 1, 209, + 180, 205, 32, 92, 1, 209, 180, 199, 114, 92, 1, 209, 180, 213, 248, 92, + 1, 209, 180, 247, 37, 92, 1, 209, 180, 199, 77, 92, 1, 222, 177, 70, 92, + 1, 222, 177, 161, 92, 1, 222, 177, 213, 252, 92, 1, 222, 177, 237, 195, + 92, 1, 222, 177, 199, 77, 92, 1, 251, 134, 236, 69, 251, 34, 102, 92, 1, + 251, 134, 236, 69, 202, 204, 102, 92, 1, 251, 134, 236, 69, 242, 19, 92, + 1, 251, 134, 236, 69, 204, 41, 92, 1, 251, 134, 236, 69, 228, 50, 204, + 41, 92, 1, 251, 134, 236, 69, 249, 91, 92, 1, 251, 134, 236, 69, 126, + 249, 91, 92, 1, 251, 134, 236, 69, 62, 92, 1, 251, 134, 236, 69, 70, 92, + 1, 251, 134, 236, 69, 161, 92, 1, 251, 134, 236, 69, 219, 253, 92, 1, + 251, 134, 236, 69, 247, 190, 92, 1, 251, 134, 236, 69, 204, 253, 92, 1, + 251, 134, 236, 69, 204, 241, 92, 1, 251, 134, 236, 69, 241, 220, 92, 1, + 251, 134, 236, 69, 219, 21, 92, 1, 251, 134, 236, 69, 207, 36, 92, 1, + 251, 134, 236, 69, 242, 58, 92, 1, 251, 134, 236, 69, 172, 92, 1, 251, + 134, 236, 69, 215, 245, 92, 1, 251, 134, 236, 69, 208, 179, 92, 1, 251, + 134, 236, 69, 199, 77, 92, 1, 251, 134, 236, 69, 199, 114, 92, 1, 251, + 134, 236, 69, 251, 185, 92, 1, 205, 183, 251, 134, 236, 69, 207, 36, 92, + 1, 205, 183, 251, 134, 236, 69, 199, 77, 92, 1, 222, 177, 251, 134, 236, + 69, 235, 199, 92, 1, 222, 177, 251, 134, 236, 69, 219, 253, 92, 1, 222, + 177, 251, 134, 236, 69, 247, 190, 92, 1, 222, 177, 251, 134, 236, 69, + 227, 215, 92, 1, 222, 177, 251, 134, 236, 69, 204, 253, 92, 1, 222, 177, + 251, 134, 236, 69, 241, 204, 92, 1, 222, 177, 251, 134, 236, 69, 207, 36, + 92, 1, 222, 177, 251, 134, 236, 69, 241, 100, 92, 1, 222, 177, 251, 134, + 236, 69, 208, 179, 92, 1, 222, 177, 251, 134, 236, 69, 242, 167, 92, 1, + 222, 177, 251, 134, 236, 69, 199, 77, 92, 1, 222, 177, 251, 134, 236, 69, + 199, 114, 92, 1, 251, 134, 236, 69, 167, 66, 92, 1, 251, 134, 236, 69, + 167, 183, 92, 1, 222, 177, 251, 134, 236, 69, 248, 200, 92, 1, 251, 134, + 236, 69, 242, 46, 92, 1, 222, 177, 251, 134, 236, 69, 224, 223, 20, 21, + 216, 230, 20, 21, 250, 112, 20, 21, 252, 93, 20, 21, 201, 67, 20, 21, + 215, 48, 20, 21, 216, 82, 20, 21, 214, 176, 20, 21, 206, 210, 20, 21, + 227, 15, 20, 21, 225, 226, 20, 21, 222, 119, 20, 21, 218, 198, 20, 21, + 220, 109, 20, 21, 225, 50, 20, 21, 208, 248, 20, 21, 211, 234, 20, 21, + 209, 229, 20, 21, 210, 69, 20, 21, 209, 192, 20, 21, 199, 220, 20, 21, + 200, 57, 20, 21, 213, 197, 20, 21, 218, 66, 20, 21, 217, 100, 218, 66, + 20, 21, 218, 65, 20, 21, 217, 100, 218, 65, 20, 21, 218, 64, 20, 21, 217, + 100, 218, 64, 20, 21, 218, 63, 20, 21, 217, 100, 218, 63, 20, 21, 212, + 136, 20, 21, 212, 135, 20, 21, 212, 134, 20, 21, 212, 133, 20, 21, 212, + 132, 20, 21, 212, 140, 20, 21, 217, 100, 216, 226, 20, 21, 217, 100, 207, + 83, 20, 21, 217, 100, 227, 118, 20, 21, 217, 100, 247, 223, 20, 21, 217, + 100, 223, 243, 20, 21, 217, 100, 220, 214, 20, 21, 217, 100, 212, 122, + 20, 21, 217, 100, 210, 116, 20, 21, 239, 12, 201, 147, 20, 21, 201, 45, + 201, 147, 20, 21, 47, 4, 213, 26, 20, 21, 47, 213, 220, 240, 182, 20, 21, + 214, 32, 212, 137, 20, 21, 201, 46, 224, 78, 20, 21, 201, 46, 225, 175, + 20, 21, 206, 24, 20, 21, 206, 26, 20, 21, 204, 233, 20, 21, 204, 235, 20, + 21, 204, 240, 20, 21, 205, 193, 20, 21, 205, 195, 20, 21, 211, 232, 209, + 197, 20, 21, 211, 232, 210, 2, 20, 21, 211, 232, 233, 188, 20, 21, 89, + 235, 5, 20, 21, 89, 241, 134, 236, 7, 20, 21, 89, 236, 86, 20, 21, 89, + 235, 10, 20, 21, 211, 232, 227, 128, 20, 21, 89, 227, 126, 20, 21, 248, + 255, 241, 134, 156, 20, 21, 248, 255, 241, 134, 146, 20, 21, 89, 241, + 129, 212, 122, 224, 186, 202, 172, 224, 236, 224, 186, 1, 161, 224, 186, + 1, 226, 207, 224, 186, 1, 236, 89, 224, 186, 1, 235, 199, 224, 186, 1, + 219, 253, 224, 186, 1, 247, 190, 224, 186, 1, 247, 37, 224, 186, 1, 227, + 248, 224, 186, 1, 227, 215, 224, 186, 1, 200, 77, 224, 186, 1, 207, 36, + 224, 186, 1, 206, 122, 224, 186, 1, 242, 58, 224, 186, 1, 241, 100, 224, + 186, 1, 188, 224, 186, 1, 172, 224, 186, 1, 215, 245, 224, 186, 1, 249, + 136, 224, 186, 1, 248, 200, 224, 186, 1, 178, 224, 186, 1, 183, 224, 186, + 1, 213, 252, 224, 186, 1, 194, 224, 186, 1, 201, 114, 224, 186, 1, 210, + 114, 224, 186, 1, 208, 179, 224, 186, 1, 212, 64, 224, 186, 1, 144, 224, + 186, 1, 235, 1, 224, 186, 1, 205, 132, 224, 186, 22, 2, 62, 224, 186, 22, + 2, 70, 224, 186, 22, 2, 66, 224, 186, 22, 2, 238, 255, 224, 186, 22, 2, + 251, 176, 224, 186, 22, 2, 217, 63, 224, 186, 22, 2, 250, 139, 224, 186, + 22, 2, 72, 224, 186, 22, 2, 74, 224, 186, 208, 12, 1, 183, 224, 186, 208, + 12, 1, 213, 252, 224, 186, 208, 12, 1, 201, 114, 224, 186, 4, 1, 161, + 224, 186, 4, 1, 219, 253, 224, 186, 4, 1, 251, 33, 224, 186, 4, 1, 207, + 36, 224, 186, 4, 1, 188, 224, 186, 4, 1, 172, 224, 186, 4, 1, 178, 224, + 186, 4, 1, 213, 252, 224, 186, 4, 1, 194, 224, 186, 2, 221, 26, 224, 186, + 2, 226, 249, 224, 186, 2, 212, 62, 224, 186, 2, 224, 78, 224, 186, 238, + 43, 81, 224, 186, 214, 79, 81, 224, 186, 17, 199, 81, 224, 186, 17, 102, + 224, 186, 17, 105, 224, 186, 17, 147, 224, 186, 17, 149, 224, 186, 17, + 164, 224, 186, 17, 187, 224, 186, 17, 210, 135, 224, 186, 17, 192, 224, + 186, 17, 219, 113, 46, 225, 41, 1, 161, 46, 225, 41, 1, 200, 181, 46, + 225, 41, 1, 219, 253, 46, 225, 41, 1, 205, 32, 46, 225, 41, 1, 212, 64, + 46, 225, 41, 1, 183, 46, 225, 41, 1, 207, 36, 46, 225, 41, 1, 206, 122, + 46, 225, 41, 1, 194, 46, 225, 41, 1, 172, 46, 225, 41, 1, 215, 245, 46, + 225, 41, 1, 178, 46, 225, 41, 1, 237, 195, 46, 225, 41, 1, 203, 90, 46, + 225, 41, 1, 144, 46, 225, 41, 1, 214, 159, 46, 225, 41, 1, 226, 207, 46, + 225, 41, 1, 205, 22, 46, 225, 41, 1, 188, 46, 225, 41, 1, 62, 46, 225, + 41, 1, 70, 46, 225, 41, 1, 238, 255, 46, 225, 41, 1, 238, 241, 46, 225, + 41, 1, 66, 46, 225, 41, 1, 217, 63, 46, 225, 41, 1, 74, 46, 225, 41, 1, + 204, 31, 46, 225, 41, 1, 72, 46, 225, 41, 1, 250, 137, 46, 225, 41, 1, + 251, 176, 46, 225, 41, 1, 205, 172, 46, 225, 41, 1, 205, 171, 46, 225, + 41, 1, 205, 170, 46, 225, 41, 1, 205, 169, 46, 225, 41, 1, 205, 168, 220, + 8, 46, 224, 36, 1, 122, 214, 159, 220, 8, 46, 224, 36, 1, 128, 214, 159, + 220, 8, 46, 224, 36, 1, 122, 161, 220, 8, 46, 224, 36, 1, 122, 200, 181, + 220, 8, 46, 224, 36, 1, 122, 219, 253, 220, 8, 46, 224, 36, 1, 128, 161, + 220, 8, 46, 224, 36, 1, 128, 200, 181, 220, 8, 46, 224, 36, 1, 128, 219, + 253, 220, 8, 46, 224, 36, 1, 122, 205, 32, 220, 8, 46, 224, 36, 1, 122, + 212, 64, 220, 8, 46, 224, 36, 1, 122, 183, 220, 8, 46, 224, 36, 1, 128, + 205, 32, 220, 8, 46, 224, 36, 1, 128, 212, 64, 220, 8, 46, 224, 36, 1, + 128, 183, 220, 8, 46, 224, 36, 1, 122, 207, 36, 220, 8, 46, 224, 36, 1, + 122, 206, 122, 220, 8, 46, 224, 36, 1, 122, 188, 220, 8, 46, 224, 36, 1, + 128, 207, 36, 220, 8, 46, 224, 36, 1, 128, 206, 122, 220, 8, 46, 224, 36, + 1, 128, 188, 220, 8, 46, 224, 36, 1, 122, 172, 220, 8, 46, 224, 36, 1, + 122, 215, 245, 220, 8, 46, 224, 36, 1, 122, 178, 220, 8, 46, 224, 36, 1, + 128, 172, 220, 8, 46, 224, 36, 1, 128, 215, 245, 220, 8, 46, 224, 36, 1, + 128, 178, 220, 8, 46, 224, 36, 1, 122, 237, 195, 220, 8, 46, 224, 36, 1, + 122, 203, 90, 220, 8, 46, 224, 36, 1, 122, 194, 220, 8, 46, 224, 36, 1, + 128, 237, 195, 220, 8, 46, 224, 36, 1, 128, 203, 90, 220, 8, 46, 224, 36, + 1, 128, 194, 220, 8, 46, 224, 36, 1, 122, 144, 220, 8, 46, 224, 36, 1, + 122, 242, 58, 220, 8, 46, 224, 36, 1, 122, 249, 136, 220, 8, 46, 224, 36, + 1, 128, 144, 220, 8, 46, 224, 36, 1, 128, 242, 58, 220, 8, 46, 224, 36, + 1, 128, 249, 136, 220, 8, 46, 224, 36, 1, 122, 225, 231, 220, 8, 46, 224, + 36, 1, 122, 200, 148, 220, 8, 46, 224, 36, 1, 128, 225, 231, 220, 8, 46, + 224, 36, 1, 128, 200, 148, 220, 8, 46, 224, 36, 1, 122, 208, 23, 220, 8, + 46, 224, 36, 1, 128, 208, 23, 220, 8, 46, 224, 36, 22, 2, 22, 209, 238, + 220, 8, 46, 224, 36, 22, 2, 252, 138, 220, 8, 46, 224, 36, 22, 2, 228, + 151, 220, 8, 46, 224, 36, 22, 2, 66, 220, 8, 46, 224, 36, 22, 2, 203, + 182, 220, 8, 46, 224, 36, 22, 2, 72, 220, 8, 46, 224, 36, 22, 2, 251, + 221, 220, 8, 46, 224, 36, 22, 2, 74, 220, 8, 46, 224, 36, 22, 2, 217, + 146, 220, 8, 46, 224, 36, 22, 2, 204, 31, 220, 8, 46, 224, 36, 22, 2, + 250, 112, 220, 8, 46, 224, 36, 22, 2, 252, 93, 220, 8, 46, 224, 36, 22, + 2, 203, 174, 220, 8, 46, 224, 36, 22, 2, 216, 230, 220, 8, 46, 224, 36, + 22, 2, 217, 143, 220, 8, 46, 224, 36, 22, 2, 204, 27, 220, 8, 46, 224, + 36, 22, 2, 228, 3, 220, 8, 46, 224, 36, 1, 47, 203, 168, 220, 8, 46, 224, + 36, 1, 47, 219, 255, 220, 8, 46, 224, 36, 1, 47, 220, 214, 220, 8, 46, + 224, 36, 1, 47, 223, 243, 220, 8, 46, 224, 36, 1, 47, 227, 118, 220, 8, + 46, 224, 36, 1, 47, 242, 153, 220, 8, 46, 224, 36, 1, 47, 250, 103, 220, + 8, 46, 224, 36, 150, 222, 149, 220, 8, 46, 224, 36, 150, 222, 148, 220, + 8, 46, 224, 36, 17, 199, 81, 220, 8, 46, 224, 36, 17, 102, 220, 8, 46, + 224, 36, 17, 105, 220, 8, 46, 224, 36, 17, 147, 220, 8, 46, 224, 36, 17, + 149, 220, 8, 46, 224, 36, 17, 164, 220, 8, 46, 224, 36, 17, 187, 220, 8, + 46, 224, 36, 17, 210, 135, 220, 8, 46, 224, 36, 17, 192, 220, 8, 46, 224, + 36, 17, 219, 113, 220, 8, 46, 224, 36, 107, 17, 102, 220, 8, 46, 224, 36, + 2, 225, 160, 220, 8, 46, 224, 36, 2, 225, 159, 86, 16, 216, 90, 86, 16, + 221, 6, 226, 84, 86, 16, 215, 167, 226, 84, 86, 16, 248, 236, 226, 84, + 86, 16, 248, 9, 226, 84, 86, 16, 215, 43, 226, 84, 86, 16, 215, 37, 226, + 84, 86, 16, 215, 35, 226, 84, 86, 16, 215, 41, 226, 84, 86, 16, 215, 39, + 226, 84, 86, 16, 242, 5, 226, 84, 86, 16, 242, 1, 226, 84, 86, 16, 242, + 0, 226, 84, 86, 16, 242, 3, 226, 84, 86, 16, 242, 2, 226, 84, 86, 16, + 241, 255, 226, 84, 86, 16, 204, 178, 86, 16, 221, 6, 212, 250, 86, 16, + 215, 167, 212, 250, 86, 16, 248, 236, 212, 250, 86, 16, 248, 9, 212, 250, + 86, 16, 215, 43, 212, 250, 86, 16, 215, 37, 212, 250, 86, 16, 215, 35, + 212, 250, 86, 16, 215, 41, 212, 250, 86, 16, 215, 39, 212, 250, 86, 16, + 242, 5, 212, 250, 86, 16, 242, 1, 212, 250, 86, 16, 242, 0, 212, 250, 86, + 16, 242, 3, 212, 250, 86, 16, 242, 2, 212, 250, 86, 16, 241, 255, 212, + 250, 248, 29, 1, 161, 248, 29, 1, 236, 89, 248, 29, 1, 219, 253, 248, 29, + 1, 219, 196, 248, 29, 1, 172, 248, 29, 1, 249, 136, 248, 29, 1, 178, 248, + 29, 1, 221, 45, 248, 29, 1, 207, 36, 248, 29, 1, 242, 58, 248, 29, 1, + 188, 248, 29, 1, 218, 196, 248, 29, 1, 247, 190, 248, 29, 1, 227, 248, + 248, 29, 1, 218, 60, 248, 29, 1, 218, 52, 248, 29, 1, 183, 248, 29, 1, + 213, 252, 248, 29, 1, 194, 248, 29, 1, 203, 90, 248, 29, 1, 212, 64, 248, + 29, 1, 62, 248, 29, 1, 144, 248, 29, 22, 2, 70, 248, 29, 22, 2, 66, 248, + 29, 22, 2, 72, 248, 29, 22, 2, 74, 248, 29, 22, 2, 251, 221, 248, 29, + 216, 178, 248, 29, 238, 171, 76, 211, 192, 46, 107, 1, 122, 161, 46, 107, + 1, 122, 226, 207, 46, 107, 1, 122, 225, 215, 46, 107, 1, 128, 161, 46, + 107, 1, 128, 225, 215, 46, 107, 1, 128, 226, 207, 46, 107, 1, 219, 253, + 46, 107, 1, 122, 247, 190, 46, 107, 1, 122, 247, 37, 46, 107, 1, 128, + 247, 190, 46, 107, 1, 128, 212, 64, 46, 107, 1, 128, 247, 37, 46, 107, 1, + 218, 60, 46, 107, 1, 213, 203, 46, 107, 1, 122, 213, 201, 46, 107, 1, + 242, 58, 46, 107, 1, 128, 213, 201, 46, 107, 1, 213, 212, 46, 107, 1, + 122, 207, 36, 46, 107, 1, 122, 206, 122, 46, 107, 1, 128, 207, 36, 46, + 107, 1, 128, 206, 122, 46, 107, 1, 188, 46, 107, 1, 249, 136, 46, 107, 1, + 122, 172, 46, 107, 1, 122, 215, 245, 46, 107, 1, 122, 237, 195, 46, 107, + 1, 128, 172, 46, 107, 1, 128, 237, 195, 46, 107, 1, 128, 215, 245, 46, + 107, 1, 178, 46, 107, 1, 128, 183, 46, 107, 1, 122, 183, 46, 107, 1, 213, + 252, 46, 107, 1, 212, 170, 46, 107, 1, 194, 46, 107, 1, 224, 35, 46, 107, + 1, 201, 114, 46, 107, 1, 122, 210, 114, 46, 107, 1, 122, 208, 179, 46, + 107, 1, 122, 212, 64, 46, 107, 1, 122, 144, 46, 107, 1, 224, 138, 46, + 107, 1, 62, 46, 107, 1, 128, 144, 46, 107, 1, 70, 46, 107, 1, 228, 151, + 46, 107, 1, 66, 46, 107, 1, 203, 182, 46, 107, 1, 238, 255, 46, 107, 1, + 217, 63, 46, 107, 1, 225, 160, 46, 107, 1, 235, 69, 212, 64, 46, 107, + 111, 2, 179, 213, 252, 46, 107, 111, 2, 179, 194, 46, 107, 111, 2, 225, + 176, 206, 242, 225, 149, 46, 107, 2, 222, 199, 227, 65, 225, 149, 46, + 107, 111, 2, 47, 219, 253, 46, 107, 111, 2, 128, 172, 46, 107, 111, 2, + 122, 213, 202, 217, 34, 128, 172, 46, 107, 111, 2, 178, 46, 107, 111, 2, + 249, 136, 46, 107, 111, 2, 212, 64, 46, 107, 2, 212, 38, 46, 107, 22, 2, + 62, 46, 107, 22, 2, 222, 199, 211, 251, 46, 107, 22, 2, 252, 138, 46, + 107, 22, 2, 206, 248, 252, 138, 46, 107, 22, 2, 70, 46, 107, 22, 2, 228, + 151, 46, 107, 22, 2, 204, 31, 46, 107, 22, 2, 203, 181, 46, 107, 22, 2, + 66, 46, 107, 22, 2, 203, 182, 46, 107, 22, 2, 74, 46, 107, 22, 2, 217, + 147, 57, 46, 107, 22, 2, 216, 230, 46, 107, 22, 2, 72, 46, 107, 22, 2, + 251, 221, 46, 107, 22, 2, 217, 63, 46, 107, 22, 2, 251, 176, 46, 107, 22, + 2, 107, 251, 176, 46, 107, 22, 2, 217, 147, 56, 46, 107, 2, 222, 199, + 227, 64, 46, 107, 2, 205, 173, 46, 107, 2, 205, 172, 46, 107, 2, 226, + 168, 205, 171, 46, 107, 2, 226, 168, 205, 170, 46, 107, 2, 226, 168, 205, + 169, 46, 107, 2, 213, 253, 234, 232, 46, 107, 2, 222, 199, 212, 23, 46, + 107, 2, 226, 167, 227, 46, 46, 107, 38, 242, 217, 240, 182, 46, 107, 233, + 179, 17, 199, 81, 46, 107, 233, 179, 17, 102, 46, 107, 233, 179, 17, 105, + 46, 107, 233, 179, 17, 147, 46, 107, 233, 179, 17, 149, 46, 107, 233, + 179, 17, 164, 46, 107, 233, 179, 17, 187, 46, 107, 233, 179, 17, 210, + 135, 46, 107, 233, 179, 17, 192, 46, 107, 233, 179, 17, 219, 113, 46, + 107, 107, 17, 199, 81, 46, 107, 107, 17, 102, 46, 107, 107, 17, 105, 46, + 107, 107, 17, 147, 46, 107, 107, 17, 149, 46, 107, 107, 17, 164, 46, 107, + 107, 17, 187, 46, 107, 107, 17, 210, 135, 46, 107, 107, 17, 192, 46, 107, + 107, 17, 219, 113, 46, 107, 2, 201, 30, 46, 107, 2, 201, 29, 46, 107, 2, + 211, 238, 46, 107, 2, 226, 238, 46, 107, 2, 233, 107, 46, 107, 2, 240, + 196, 46, 107, 2, 213, 105, 212, 228, 213, 212, 46, 107, 2, 222, 199, 200, + 78, 46, 107, 2, 227, 99, 46, 107, 2, 227, 98, 46, 107, 2, 211, 246, 46, + 107, 2, 211, 245, 46, 107, 2, 234, 172, 46, 107, 2, 247, 187, 38, 239, + 172, 246, 147, 251, 251, 38, 241, 73, 38, 228, 94, 38, 191, 48, 38, 205, + 83, 240, 182, 38, 200, 194, 57, 38, 201, 22, 224, 177, 57, 38, 176, 134, + 57, 38, 53, 176, 134, 57, 38, 162, 247, 57, 208, 47, 57, 38, 208, 33, + 247, 57, 208, 47, 57, 38, 216, 117, 56, 38, 53, 216, 117, 56, 38, 216, + 117, 57, 38, 216, 117, 216, 242, 133, 2, 204, 15, 213, 82, 133, 2, 204, + 15, 247, 151, 133, 2, 247, 72, 133, 2, 207, 205, 133, 2, 248, 157, 133, + 1, 251, 157, 133, 1, 251, 158, 206, 192, 133, 1, 228, 147, 133, 1, 228, + 148, 206, 192, 133, 1, 204, 18, 133, 1, 204, 19, 206, 192, 133, 1, 213, + 253, 213, 135, 133, 1, 213, 253, 213, 136, 206, 192, 133, 1, 225, 176, + 225, 3, 133, 1, 225, 176, 225, 4, 206, 192, 133, 1, 238, 214, 133, 1, + 251, 174, 133, 1, 217, 96, 133, 1, 217, 97, 206, 192, 133, 1, 161, 133, + 1, 227, 108, 222, 202, 133, 1, 236, 89, 133, 1, 236, 90, 235, 102, 133, + 1, 219, 253, 133, 1, 247, 190, 133, 1, 247, 191, 225, 163, 133, 1, 227, + 248, 133, 1, 227, 249, 227, 219, 133, 1, 218, 60, 133, 1, 207, 37, 225, + 60, 133, 1, 207, 37, 221, 1, 222, 202, 133, 1, 242, 59, 221, 1, 251, 114, + 133, 1, 242, 59, 221, 1, 222, 202, 133, 1, 220, 162, 213, 215, 133, 1, + 207, 36, 133, 1, 207, 37, 206, 214, 133, 1, 242, 58, 133, 1, 242, 59, + 222, 221, 133, 1, 188, 133, 1, 172, 133, 1, 216, 211, 227, 58, 133, 1, + 249, 136, 133, 1, 249, 137, 226, 250, 133, 1, 178, 133, 1, 183, 133, 1, + 213, 252, 133, 1, 194, 133, 1, 201, 114, 133, 1, 212, 65, 212, 49, 133, + 1, 212, 65, 212, 2, 133, 1, 212, 64, 133, 1, 144, 133, 2, 213, 126, 133, + 22, 2, 206, 192, 133, 22, 2, 204, 14, 133, 22, 2, 204, 15, 211, 254, 133, + 22, 2, 207, 238, 133, 22, 2, 207, 239, 228, 139, 133, 22, 2, 213, 253, + 213, 135, 133, 22, 2, 213, 253, 213, 136, 206, 192, 133, 22, 2, 225, 176, + 225, 3, 133, 22, 2, 225, 176, 225, 4, 206, 192, 133, 22, 2, 206, 249, + 133, 22, 2, 206, 250, 213, 135, 133, 22, 2, 206, 250, 206, 192, 133, 22, + 2, 206, 250, 213, 136, 206, 192, 133, 22, 2, 216, 30, 133, 22, 2, 216, + 31, 206, 192, 133, 251, 230, 251, 229, 133, 1, 227, 87, 211, 253, 133, 1, + 226, 174, 211, 253, 133, 1, 204, 108, 211, 253, 133, 1, 238, 249, 211, + 253, 133, 1, 203, 60, 211, 253, 133, 1, 199, 104, 211, 253, 133, 1, 250, + 158, 211, 253, 133, 17, 199, 81, 133, 17, 102, 133, 17, 105, 133, 17, + 147, 133, 17, 149, 133, 17, 164, 133, 17, 187, 133, 17, 210, 135, 133, + 17, 192, 133, 17, 219, 113, 133, 216, 143, 133, 216, 171, 133, 201, 14, + 133, 247, 127, 216, 164, 133, 247, 127, 209, 158, 133, 247, 127, 216, + 114, 133, 216, 170, 133, 32, 16, 240, 188, 133, 32, 16, 241, 133, 133, + 32, 16, 239, 121, 133, 32, 16, 242, 8, 133, 32, 16, 242, 9, 207, 205, + 133, 32, 16, 241, 18, 133, 32, 16, 242, 50, 133, 32, 16, 241, 109, 133, + 32, 16, 242, 32, 133, 32, 16, 242, 9, 236, 9, 133, 32, 16, 38, 206, 185, + 133, 32, 16, 38, 238, 169, 133, 32, 16, 38, 226, 245, 133, 32, 16, 38, + 226, 247, 133, 32, 16, 38, 227, 223, 133, 32, 16, 38, 226, 246, 3, 227, + 223, 133, 32, 16, 38, 226, 248, 3, 227, 223, 133, 32, 16, 38, 248, 221, + 133, 32, 16, 38, 235, 106, 133, 32, 16, 213, 44, 176, 239, 131, 133, 32, + 16, 213, 44, 176, 242, 48, 133, 32, 16, 213, 44, 246, 110, 204, 207, 133, + 32, 16, 213, 44, 246, 110, 207, 2, 133, 32, 16, 225, 26, 176, 216, 157, + 133, 32, 16, 225, 26, 176, 214, 210, 133, 32, 16, 225, 26, 246, 110, 215, + 131, 133, 32, 16, 225, 26, 246, 110, 215, 117, 133, 32, 16, 225, 26, 176, + 215, 156, 207, 227, 2, 216, 140, 207, 227, 2, 216, 153, 207, 227, 2, 216, + 149, 207, 227, 1, 62, 207, 227, 1, 70, 207, 227, 1, 66, 207, 227, 1, 251, + 221, 207, 227, 1, 74, 207, 227, 1, 72, 207, 227, 1, 238, 69, 207, 227, 1, + 161, 207, 227, 1, 214, 159, 207, 227, 1, 236, 89, 207, 227, 1, 219, 253, + 207, 227, 1, 247, 190, 207, 227, 1, 227, 248, 207, 227, 1, 199, 114, 207, + 227, 1, 218, 60, 207, 227, 1, 207, 36, 207, 227, 1, 242, 58, 207, 227, 1, + 188, 207, 227, 1, 172, 207, 227, 1, 237, 195, 207, 227, 1, 203, 90, 207, + 227, 1, 249, 136, 207, 227, 1, 178, 207, 227, 1, 183, 207, 227, 1, 213, + 252, 207, 227, 1, 194, 207, 227, 1, 201, 114, 207, 227, 1, 212, 64, 207, + 227, 1, 200, 181, 207, 227, 1, 144, 207, 227, 111, 2, 216, 168, 207, 227, + 111, 2, 216, 142, 207, 227, 111, 2, 216, 139, 207, 227, 22, 2, 216, 156, + 207, 227, 22, 2, 216, 138, 207, 227, 22, 2, 216, 161, 207, 227, 22, 2, + 216, 148, 207, 227, 22, 2, 216, 169, 207, 227, 22, 2, 216, 158, 207, 227, + 2, 216, 172, 207, 227, 2, 202, 208, 207, 227, 111, 2, 216, 103, 178, 207, + 227, 111, 2, 216, 103, 201, 114, 207, 227, 1, 226, 207, 207, 227, 1, 207, + 164, 207, 227, 17, 199, 81, 207, 227, 17, 102, 207, 227, 17, 105, 207, + 227, 17, 147, 207, 227, 17, 149, 207, 227, 17, 164, 207, 227, 17, 187, + 207, 227, 17, 210, 135, 207, 227, 17, 192, 207, 227, 17, 219, 113, 207, + 227, 250, 122, 207, 227, 1, 213, 108, 207, 227, 1, 224, 233, 207, 227, 1, + 248, 200, 207, 227, 1, 47, 227, 118, 207, 227, 1, 47, 223, 243, 249, 54, + 1, 62, 249, 54, 1, 209, 150, 62, 249, 54, 1, 144, 249, 54, 1, 209, 150, + 144, 249, 54, 1, 222, 175, 144, 249, 54, 1, 249, 136, 249, 54, 1, 227, + 43, 249, 136, 249, 54, 1, 172, 249, 54, 1, 209, 150, 172, 249, 54, 1, + 188, 249, 54, 1, 222, 175, 188, 249, 54, 1, 201, 114, 249, 54, 1, 209, + 150, 201, 114, 249, 54, 1, 216, 185, 201, 114, 249, 54, 1, 236, 89, 249, + 54, 1, 209, 150, 236, 89, 249, 54, 1, 227, 248, 249, 54, 1, 242, 58, 249, + 54, 1, 213, 252, 249, 54, 1, 209, 150, 213, 252, 249, 54, 1, 178, 249, + 54, 1, 209, 150, 178, 249, 54, 1, 208, 252, 207, 36, 249, 54, 1, 218, + 219, 207, 36, 249, 54, 1, 212, 64, 249, 54, 1, 209, 150, 212, 64, 249, + 54, 1, 222, 175, 212, 64, 249, 54, 1, 183, 249, 54, 1, 209, 150, 183, + 249, 54, 1, 219, 253, 249, 54, 1, 194, 249, 54, 1, 209, 150, 194, 249, + 54, 1, 218, 60, 249, 54, 1, 247, 190, 249, 54, 1, 220, 75, 249, 54, 1, + 222, 110, 249, 54, 1, 70, 249, 54, 1, 66, 249, 54, 2, 205, 177, 249, 54, + 22, 2, 72, 249, 54, 22, 2, 216, 185, 72, 249, 54, 22, 2, 238, 255, 249, + 54, 22, 2, 70, 249, 54, 22, 2, 227, 43, 70, 249, 54, 22, 2, 74, 249, 54, + 22, 2, 227, 43, 74, 249, 54, 22, 2, 66, 249, 54, 22, 2, 108, 36, 209, + 150, 212, 64, 249, 54, 111, 2, 219, 255, 249, 54, 111, 2, 234, 247, 249, + 54, 216, 151, 249, 54, 216, 147, 249, 54, 16, 248, 166, 220, 162, 222, + 18, 249, 54, 16, 248, 166, 215, 159, 249, 54, 16, 248, 166, 227, 144, + 249, 54, 16, 248, 166, 216, 151, 224, 243, 1, 161, 224, 243, 1, 226, 102, + 224, 243, 1, 226, 207, 224, 243, 1, 236, 89, 224, 243, 1, 235, 131, 224, + 243, 1, 219, 253, 224, 243, 1, 247, 190, 224, 243, 1, 247, 37, 224, 243, + 1, 227, 248, 224, 243, 1, 218, 60, 224, 243, 1, 207, 36, 224, 243, 1, + 206, 122, 224, 243, 1, 242, 58, 224, 243, 1, 188, 224, 243, 1, 172, 224, + 243, 1, 215, 135, 224, 243, 1, 215, 245, 224, 243, 1, 237, 195, 224, 243, + 1, 237, 55, 224, 243, 1, 249, 136, 224, 243, 1, 248, 145, 224, 243, 1, + 178, 224, 243, 1, 221, 143, 224, 243, 1, 205, 32, 224, 243, 1, 205, 22, + 224, 243, 1, 239, 93, 224, 243, 1, 183, 224, 243, 1, 213, 252, 224, 243, + 1, 194, 224, 243, 1, 144, 224, 243, 1, 234, 39, 224, 243, 1, 203, 90, + 224, 243, 1, 212, 64, 224, 243, 1, 210, 114, 224, 243, 1, 201, 114, 224, + 243, 1, 62, 224, 243, 208, 12, 1, 183, 224, 243, 208, 12, 1, 213, 252, + 224, 243, 22, 2, 252, 138, 224, 243, 22, 2, 70, 224, 243, 22, 2, 74, 224, + 243, 22, 2, 217, 63, 224, 243, 22, 2, 66, 224, 243, 22, 2, 203, 182, 224, + 243, 22, 2, 72, 224, 243, 111, 2, 227, 118, 224, 243, 111, 2, 223, 243, + 224, 243, 111, 2, 156, 224, 243, 111, 2, 220, 214, 224, 243, 111, 2, 216, + 226, 224, 243, 111, 2, 146, 224, 243, 111, 2, 207, 83, 224, 243, 111, 2, + 218, 34, 224, 243, 111, 2, 227, 64, 224, 243, 2, 213, 213, 224, 243, 2, + 218, 100, 224, 243, 214, 212, 207, 34, 224, 243, 214, 212, 218, 45, 206, + 18, 207, 34, 224, 243, 214, 212, 247, 44, 224, 243, 214, 212, 205, 14, + 247, 44, 224, 243, 214, 212, 205, 13, 224, 243, 17, 199, 81, 224, 243, + 17, 102, 224, 243, 17, 105, 224, 243, 17, 147, 224, 243, 17, 149, 224, + 243, 17, 164, 224, 243, 17, 187, 224, 243, 17, 210, 135, 224, 243, 17, + 192, 224, 243, 17, 219, 113, 224, 243, 1, 204, 253, 224, 243, 1, 204, + 241, 224, 243, 1, 241, 220, 217, 94, 246, 229, 17, 199, 81, 217, 94, 246, + 229, 17, 102, 217, 94, 246, 229, 17, 105, 217, 94, 246, 229, 17, 147, + 217, 94, 246, 229, 17, 149, 217, 94, 246, 229, 17, 164, 217, 94, 246, + 229, 17, 187, 217, 94, 246, 229, 17, 210, 135, 217, 94, 246, 229, 17, + 192, 217, 94, 246, 229, 17, 219, 113, 217, 94, 246, 229, 1, 194, 217, 94, + 246, 229, 1, 250, 155, 217, 94, 246, 229, 1, 251, 193, 217, 94, 246, 229, + 1, 251, 76, 217, 94, 246, 229, 1, 251, 151, 217, 94, 246, 229, 1, 225, + 175, 217, 94, 246, 229, 1, 252, 100, 217, 94, 246, 229, 1, 252, 101, 217, + 94, 246, 229, 1, 252, 99, 217, 94, 246, 229, 1, 252, 94, 217, 94, 246, + 229, 1, 224, 210, 217, 94, 246, 229, 1, 228, 26, 217, 94, 246, 229, 1, + 228, 152, 217, 94, 246, 229, 1, 228, 47, 217, 94, 246, 229, 1, 228, 35, + 217, 94, 246, 229, 1, 224, 42, 217, 94, 246, 229, 1, 204, 38, 217, 94, + 246, 229, 1, 204, 36, 217, 94, 246, 229, 1, 203, 233, 217, 94, 246, 229, + 1, 203, 174, 217, 94, 246, 229, 1, 225, 40, 217, 94, 246, 229, 1, 238, + 133, 217, 94, 246, 229, 1, 239, 2, 217, 94, 246, 229, 1, 238, 179, 217, + 94, 246, 229, 1, 238, 108, 217, 94, 246, 229, 1, 224, 110, 217, 94, 246, + 229, 1, 217, 6, 217, 94, 246, 229, 1, 217, 142, 217, 94, 246, 229, 1, + 216, 249, 217, 94, 246, 229, 1, 217, 108, 217, 94, 246, 229, 221, 42, + 204, 218, 217, 94, 246, 229, 236, 84, 204, 219, 217, 94, 246, 229, 221, + 40, 204, 219, 217, 94, 246, 229, 213, 150, 217, 94, 246, 229, 215, 243, + 217, 94, 246, 229, 251, 184, 217, 94, 246, 229, 214, 212, 221, 36, 217, + 94, 246, 229, 214, 212, 53, 221, 36, 37, 4, 1, 212, 219, 203, 59, 37, 4, + 1, 224, 82, 241, 175, 37, 4, 1, 220, 124, 74, 37, 4, 1, 201, 28, 238, + 104, 37, 4, 1, 206, 248, 206, 201, 37, 4, 1, 206, 43, 206, 201, 37, 4, 1, + 206, 248, 234, 165, 54, 37, 4, 1, 206, 248, 200, 65, 37, 4, 1, 204, 0, + 204, 20, 207, 227, 214, 212, 248, 166, 207, 198, 207, 227, 214, 212, 248, + 166, 216, 152, 207, 227, 214, 212, 248, 166, 214, 200, 207, 227, 214, + 212, 248, 166, 247, 175, 207, 227, 214, 212, 248, 166, 224, 234, 211, + 250, 207, 227, 214, 212, 248, 166, 227, 108, 211, 250, 207, 227, 214, + 212, 248, 166, 242, 59, 211, 250, 207, 227, 214, 212, 248, 166, 249, 137, + 211, 250, 203, 56, 150, 227, 41, 203, 56, 150, 210, 81, 203, 56, 150, + 215, 23, 203, 56, 2, 219, 126, 203, 56, 2, 200, 86, 221, 202, 207, 189, + 203, 56, 150, 200, 86, 251, 189, 228, 104, 207, 189, 203, 56, 150, 200, + 86, 228, 104, 207, 189, 203, 56, 150, 200, 86, 227, 29, 228, 104, 207, + 189, 203, 56, 150, 247, 152, 57, 203, 56, 150, 200, 86, 227, 29, 228, + 104, 207, 190, 211, 220, 203, 56, 150, 53, 207, 189, 203, 56, 150, 205, + 83, 207, 189, 203, 56, 150, 227, 29, 251, 35, 203, 56, 150, 73, 57, 203, + 56, 150, 120, 190, 57, 203, 56, 150, 126, 190, 57, 203, 56, 150, 213, 34, + 227, 40, 228, 104, 207, 189, 203, 56, 150, 250, 152, 228, 104, 207, 189, + 203, 56, 2, 202, 204, 207, 189, 203, 56, 2, 202, 204, 204, 33, 203, 56, + 2, 213, 105, 202, 204, 204, 33, 203, 56, 2, 202, 204, 251, 35, 203, 56, + 2, 213, 105, 202, 204, 251, 35, 203, 56, 2, 202, 204, 204, 34, 3, 207, 6, + 203, 56, 2, 202, 204, 251, 36, 3, 207, 6, 203, 56, 2, 251, 34, 251, 50, + 203, 56, 2, 251, 34, 249, 104, 203, 56, 2, 251, 34, 203, 81, 203, 56, 2, + 251, 34, 203, 82, 3, 207, 6, 203, 56, 2, 205, 214, 203, 56, 2, 234, 87, + 168, 251, 33, 203, 56, 2, 168, 251, 33, 203, 56, 2, 212, 177, 168, 251, + 33, 203, 56, 2, 251, 34, 204, 40, 221, 27, 203, 56, 2, 250, 230, 203, 56, + 2, 212, 228, 250, 230, 203, 56, 150, 247, 152, 56, 203, 56, 2, 227, 201, + 203, 56, 2, 203, 226, 203, 56, 150, 213, 27, 56, 203, 56, 150, 53, 213, + 27, 56, 8, 1, 4, 6, 62, 8, 1, 4, 6, 251, 221, 8, 4, 1, 204, 185, 251, + 221, 8, 1, 4, 6, 249, 71, 250, 103, 8, 1, 4, 6, 247, 223, 8, 1, 4, 6, + 242, 153, 8, 1, 4, 6, 238, 74, 8, 1, 4, 6, 72, 8, 4, 1, 204, 185, 176, + 72, 8, 4, 1, 204, 185, 70, 8, 1, 4, 6, 227, 251, 8, 1, 4, 6, 227, 118, 8, + 1, 4, 6, 225, 193, 3, 97, 8, 1, 4, 6, 223, 243, 8, 1, 4, 6, 213, 105, + 220, 214, 8, 1, 4, 6, 74, 8, 1, 4, 6, 176, 74, 8, 4, 1, 209, 173, 74, 8, + 4, 1, 209, 173, 176, 74, 8, 4, 1, 209, 173, 163, 3, 97, 8, 4, 1, 204, + 185, 217, 121, 8, 1, 4, 6, 217, 3, 8, 4, 1, 205, 158, 167, 74, 8, 4, 1, + 248, 93, 167, 74, 8, 1, 4, 6, 216, 226, 8, 1, 4, 6, 213, 105, 146, 8, 1, + 4, 6, 204, 185, 146, 8, 1, 4, 6, 207, 83, 8, 1, 4, 6, 66, 8, 4, 1, 209, + 173, 66, 8, 4, 1, 209, 173, 241, 72, 66, 8, 4, 1, 209, 173, 204, 185, + 223, 243, 8, 1, 4, 6, 203, 168, 8, 1, 4, 6, 201, 147, 8, 1, 4, 6, 199, + 157, 8, 1, 4, 6, 238, 8, 8, 1, 202, 189, 225, 66, 208, 216, 8, 1, 251, + 171, 31, 1, 4, 6, 236, 60, 31, 1, 4, 6, 225, 87, 31, 1, 4, 6, 215, 204, + 31, 1, 4, 6, 213, 90, 31, 1, 4, 6, 214, 235, 37, 1, 4, 6, 238, 209, 67, + 1, 6, 62, 67, 1, 6, 251, 221, 67, 1, 6, 250, 103, 67, 1, 6, 249, 71, 250, + 103, 67, 1, 6, 242, 153, 67, 1, 6, 72, 67, 1, 6, 213, 105, 72, 67, 1, 6, + 236, 156, 67, 1, 6, 234, 247, 67, 1, 6, 70, 67, 1, 6, 227, 251, 67, 1, 6, + 227, 118, 67, 1, 6, 156, 67, 1, 6, 223, 243, 67, 1, 6, 220, 214, 67, 1, + 6, 213, 105, 220, 214, 67, 1, 6, 74, 67, 1, 6, 217, 3, 67, 1, 6, 216, + 226, 67, 1, 6, 146, 67, 1, 6, 207, 83, 67, 1, 6, 66, 67, 1, 6, 201, 147, + 67, 1, 4, 62, 67, 1, 4, 204, 185, 62, 67, 1, 4, 251, 112, 67, 1, 4, 204, + 185, 251, 221, 67, 1, 4, 250, 103, 67, 1, 4, 242, 153, 67, 1, 4, 72, 67, + 1, 4, 211, 218, 67, 1, 4, 176, 72, 67, 1, 4, 204, 185, 176, 72, 67, 1, 4, + 236, 156, 67, 1, 4, 204, 185, 70, 67, 1, 4, 227, 118, 67, 1, 4, 223, 243, + 67, 1, 4, 238, 165, 67, 1, 4, 74, 67, 1, 4, 176, 74, 67, 1, 4, 205, 158, + 167, 74, 67, 1, 4, 248, 93, 167, 74, 67, 1, 4, 216, 226, 67, 1, 4, 207, + 83, 67, 1, 4, 66, 67, 1, 4, 209, 173, 66, 67, 1, 4, 204, 185, 223, 243, + 67, 1, 4, 203, 168, 67, 1, 4, 251, 171, 67, 1, 4, 248, 208, 67, 1, 4, 31, + 236, 60, 67, 1, 4, 241, 136, 67, 1, 4, 31, 215, 229, 67, 1, 4, 246, 236, + 8, 208, 4, 4, 1, 70, 8, 208, 4, 4, 1, 146, 8, 208, 4, 4, 1, 66, 8, 208, + 4, 4, 1, 203, 168, 31, 208, 4, 4, 1, 248, 208, 31, 208, 4, 4, 1, 236, 60, + 31, 208, 4, 4, 1, 213, 90, 31, 208, 4, 4, 1, 215, 229, 31, 208, 4, 4, 1, + 246, 236, 8, 4, 1, 204, 31, 8, 4, 1, 68, 3, 101, 205, 240, 8, 4, 1, 242, + 154, 3, 101, 205, 240, 8, 4, 1, 238, 6, 3, 101, 205, 240, 8, 4, 1, 223, + 244, 3, 101, 205, 240, 8, 4, 1, 220, 215, 3, 101, 205, 240, 8, 4, 1, 216, + 227, 3, 101, 205, 240, 8, 4, 1, 214, 33, 3, 101, 205, 240, 8, 4, 1, 214, + 33, 3, 237, 69, 26, 101, 205, 240, 8, 4, 1, 212, 123, 3, 101, 205, 240, + 8, 4, 1, 207, 84, 3, 101, 205, 240, 8, 4, 1, 199, 158, 3, 101, 205, 240, + 8, 4, 1, 204, 185, 236, 156, 67, 1, 37, 238, 179, 8, 4, 1, 228, 71, 236, + 156, 8, 4, 1, 206, 125, 3, 208, 51, 8, 4, 6, 1, 233, 19, 3, 97, 8, 4, 1, + 228, 42, 3, 97, 8, 4, 1, 216, 227, 3, 97, 8, 4, 6, 1, 108, 3, 97, 8, 4, + 1, 203, 221, 3, 97, 8, 4, 1, 68, 3, 216, 184, 117, 8, 4, 1, 242, 154, 3, + 216, 184, 117, 8, 4, 1, 238, 6, 3, 216, 184, 117, 8, 4, 1, 236, 157, 3, + 216, 184, 117, 8, 4, 1, 227, 119, 3, 216, 184, 117, 8, 4, 1, 225, 193, 3, + 216, 184, 117, 8, 4, 1, 223, 244, 3, 216, 184, 117, 8, 4, 1, 220, 215, 3, + 216, 184, 117, 8, 4, 1, 216, 227, 3, 216, 184, 117, 8, 4, 1, 214, 33, 3, + 216, 184, 117, 8, 4, 1, 212, 123, 3, 216, 184, 117, 8, 4, 1, 238, 95, 3, + 216, 184, 117, 8, 4, 1, 203, 169, 3, 216, 184, 117, 8, 4, 1, 200, 196, 3, + 216, 184, 117, 8, 4, 1, 199, 158, 3, 216, 184, 117, 8, 4, 1, 35, 3, 213, + 111, 117, 8, 4, 1, 251, 113, 3, 213, 111, 117, 8, 4, 1, 242, 154, 3, 233, + 187, 26, 207, 6, 8, 4, 1, 197, 3, 213, 111, 117, 8, 4, 1, 176, 197, 3, + 213, 111, 117, 8, 4, 1, 213, 105, 176, 197, 3, 213, 111, 117, 8, 4, 1, + 211, 219, 3, 213, 111, 117, 8, 4, 1, 233, 19, 3, 213, 111, 117, 8, 4, 1, + 176, 163, 3, 213, 111, 117, 8, 4, 1, 238, 95, 3, 213, 111, 117, 8, 4, 1, + 108, 3, 213, 111, 117, 8, 4, 1, 238, 9, 3, 213, 111, 117, 67, 1, 4, 204, + 185, 251, 112, 67, 1, 4, 247, 223, 67, 1, 4, 247, 224, 3, 242, 198, 67, + 1, 4, 238, 74, 67, 1, 4, 213, 105, 176, 72, 67, 1, 4, 238, 5, 67, 1, 4, + 240, 181, 227, 252, 3, 97, 67, 1, 4, 135, 236, 156, 67, 1, 4, 204, 185, + 234, 247, 67, 1, 4, 233, 19, 3, 97, 67, 1, 4, 228, 41, 67, 1, 4, 6, 70, + 67, 1, 4, 6, 233, 19, 3, 97, 67, 1, 4, 227, 252, 3, 242, 230, 67, 1, 4, + 225, 193, 3, 213, 111, 117, 67, 1, 4, 225, 193, 3, 216, 184, 117, 67, 1, + 4, 6, 156, 67, 1, 4, 223, 244, 3, 117, 67, 1, 4, 204, 185, 223, 244, 3, + 168, 225, 16, 67, 1, 4, 220, 215, 3, 49, 117, 67, 1, 4, 220, 215, 3, 213, + 111, 117, 67, 1, 4, 6, 220, 214, 67, 1, 4, 249, 71, 74, 67, 1, 4, 215, + 229, 67, 1, 4, 212, 123, 3, 117, 67, 1, 4, 238, 94, 67, 1, 4, 207, 84, 3, + 216, 184, 117, 67, 1, 4, 108, 148, 67, 1, 4, 203, 220, 67, 1, 4, 6, 66, + 67, 1, 4, 203, 169, 3, 117, 67, 1, 4, 204, 185, 203, 168, 67, 1, 4, 199, + 157, 67, 1, 4, 199, 158, 3, 213, 111, 117, 67, 1, 4, 199, 158, 3, 242, + 198, 67, 1, 4, 238, 8, 67, 1, 4, 206, 88, 38, 239, 180, 235, 74, 251, + 251, 38, 239, 180, 251, 239, 251, 251, 38, 209, 42, 57, 38, 207, 196, 81, + 38, 222, 227, 38, 235, 71, 38, 222, 225, 38, 251, 237, 38, 235, 72, 38, + 251, 238, 38, 8, 4, 1, 214, 33, 57, 38, 248, 56, 38, 222, 226, 38, 53, + 246, 147, 56, 38, 217, 111, 56, 38, 199, 27, 57, 38, 228, 27, 57, 38, + 203, 215, 56, 38, 203, 198, 56, 38, 8, 4, 1, 237, 41, 176, 35, 56, 38, 8, + 4, 1, 251, 221, 38, 8, 4, 1, 251, 31, 38, 8, 4, 1, 250, 123, 38, 8, 4, 1, + 247, 224, 247, 69, 38, 8, 4, 1, 228, 71, 242, 153, 38, 8, 4, 1, 238, 74, + 38, 8, 4, 1, 236, 156, 38, 8, 1, 4, 6, 236, 156, 38, 8, 4, 1, 227, 118, + 38, 8, 4, 1, 156, 38, 8, 1, 4, 6, 156, 38, 8, 1, 4, 6, 223, 243, 38, 8, + 4, 1, 220, 214, 38, 8, 1, 4, 6, 220, 214, 38, 8, 1, 4, 6, 146, 38, 8, 4, + 1, 214, 33, 212, 222, 38, 8, 4, 1, 212, 122, 38, 8, 4, 1, 168, 212, 122, + 38, 8, 4, 1, 199, 157, 38, 8, 4, 1, 251, 112, 38, 8, 4, 1, 250, 103, 38, + 8, 4, 1, 248, 208, 38, 8, 4, 1, 211, 218, 38, 8, 4, 1, 238, 5, 38, 8, 4, + 1, 225, 193, 3, 53, 101, 205, 240, 38, 8, 4, 1, 163, 3, 162, 247, 57, 97, + 38, 8, 4, 1, 216, 226, 38, 8, 4, 1, 238, 94, 38, 8, 4, 1, 108, 3, 162, + 247, 57, 97, 38, 8, 4, 1, 201, 147, 38, 8, 4, 1, 35, 3, 241, 74, 38, 8, + 4, 1, 163, 3, 241, 74, 38, 8, 4, 1, 108, 3, 241, 74, 38, 115, 207, 18, + 56, 38, 241, 145, 81, 38, 53, 228, 50, 248, 58, 57, 38, 251, 117, 160, + 205, 186, 57, 38, 49, 250, 203, 56, 38, 51, 250, 203, 26, 127, 250, 203, + 57, 8, 6, 1, 35, 3, 213, 27, 57, 8, 4, 1, 35, 3, 213, 27, 57, 8, 6, 1, + 68, 3, 73, 56, 8, 4, 1, 68, 3, 73, 56, 8, 6, 1, 68, 3, 73, 57, 8, 4, 1, + 68, 3, 73, 57, 8, 6, 1, 68, 3, 224, 177, 57, 8, 4, 1, 68, 3, 224, 177, + 57, 8, 6, 1, 247, 224, 3, 247, 70, 26, 169, 8, 4, 1, 247, 224, 3, 247, + 70, 26, 169, 8, 6, 1, 242, 154, 3, 73, 56, 8, 4, 1, 242, 154, 3, 73, 56, + 8, 6, 1, 242, 154, 3, 73, 57, 8, 4, 1, 242, 154, 3, 73, 57, 8, 6, 1, 242, + 154, 3, 224, 177, 57, 8, 4, 1, 242, 154, 3, 224, 177, 57, 8, 6, 1, 242, + 154, 3, 247, 69, 8, 4, 1, 242, 154, 3, 247, 69, 8, 6, 1, 242, 154, 3, + 246, 147, 57, 8, 4, 1, 242, 154, 3, 246, 147, 57, 8, 6, 1, 197, 3, 222, + 229, 26, 235, 73, 8, 4, 1, 197, 3, 222, 229, 26, 235, 73, 8, 6, 1, 197, + 3, 222, 229, 26, 169, 8, 4, 1, 197, 3, 222, 229, 26, 169, 8, 6, 1, 197, + 3, 246, 147, 57, 8, 4, 1, 197, 3, 246, 147, 57, 8, 6, 1, 197, 3, 205, + 241, 57, 8, 4, 1, 197, 3, 205, 241, 57, 8, 6, 1, 197, 3, 247, 70, 26, + 248, 57, 8, 4, 1, 197, 3, 247, 70, 26, 248, 57, 8, 6, 1, 238, 6, 3, 73, + 56, 8, 4, 1, 238, 6, 3, 73, 56, 8, 6, 1, 236, 157, 3, 222, 228, 8, 4, 1, + 236, 157, 3, 222, 228, 8, 6, 1, 234, 248, 3, 73, 56, 8, 4, 1, 234, 248, + 3, 73, 56, 8, 6, 1, 234, 248, 3, 73, 57, 8, 4, 1, 234, 248, 3, 73, 57, 8, + 6, 1, 234, 248, 3, 241, 74, 8, 4, 1, 234, 248, 3, 241, 74, 8, 6, 1, 234, + 248, 3, 247, 69, 8, 4, 1, 234, 248, 3, 247, 69, 8, 6, 1, 234, 248, 3, + 248, 58, 57, 8, 4, 1, 234, 248, 3, 248, 58, 57, 8, 6, 1, 233, 19, 3, 205, + 241, 57, 8, 4, 1, 233, 19, 3, 205, 241, 57, 8, 6, 1, 233, 19, 3, 241, 75, + 26, 169, 8, 4, 1, 233, 19, 3, 241, 75, 26, 169, 8, 6, 1, 227, 119, 3, + 169, 8, 4, 1, 227, 119, 3, 169, 8, 6, 1, 227, 119, 3, 73, 57, 8, 4, 1, + 227, 119, 3, 73, 57, 8, 6, 1, 227, 119, 3, 224, 177, 57, 8, 4, 1, 227, + 119, 3, 224, 177, 57, 8, 6, 1, 225, 193, 3, 73, 57, 8, 4, 1, 225, 193, 3, + 73, 57, 8, 6, 1, 225, 193, 3, 73, 248, 228, 26, 222, 228, 8, 4, 1, 225, + 193, 3, 73, 248, 228, 26, 222, 228, 8, 6, 1, 225, 193, 3, 224, 177, 57, + 8, 4, 1, 225, 193, 3, 224, 177, 57, 8, 6, 1, 225, 193, 3, 246, 147, 57, + 8, 4, 1, 225, 193, 3, 246, 147, 57, 8, 6, 1, 223, 244, 3, 169, 8, 4, 1, + 223, 244, 3, 169, 8, 6, 1, 223, 244, 3, 73, 56, 8, 4, 1, 223, 244, 3, 73, + 56, 8, 6, 1, 223, 244, 3, 73, 57, 8, 4, 1, 223, 244, 3, 73, 57, 8, 6, 1, + 220, 215, 3, 73, 56, 8, 4, 1, 220, 215, 3, 73, 56, 8, 6, 1, 220, 215, 3, + 73, 57, 8, 4, 1, 220, 215, 3, 73, 57, 8, 6, 1, 220, 215, 3, 224, 177, 57, + 8, 4, 1, 220, 215, 3, 224, 177, 57, 8, 6, 1, 220, 215, 3, 246, 147, 57, + 8, 4, 1, 220, 215, 3, 246, 147, 57, 8, 6, 1, 163, 3, 205, 241, 26, 169, + 8, 4, 1, 163, 3, 205, 241, 26, 169, 8, 6, 1, 163, 3, 205, 241, 26, 241, + 74, 8, 4, 1, 163, 3, 205, 241, 26, 241, 74, 8, 6, 1, 163, 3, 222, 229, + 26, 235, 73, 8, 4, 1, 163, 3, 222, 229, 26, 235, 73, 8, 6, 1, 163, 3, + 222, 229, 26, 169, 8, 4, 1, 163, 3, 222, 229, 26, 169, 8, 6, 1, 216, 227, + 3, 169, 8, 4, 1, 216, 227, 3, 169, 8, 6, 1, 216, 227, 3, 73, 56, 8, 4, 1, + 216, 227, 3, 73, 56, 8, 6, 1, 214, 33, 3, 73, 56, 8, 4, 1, 214, 33, 3, + 73, 56, 8, 6, 1, 214, 33, 3, 73, 57, 8, 4, 1, 214, 33, 3, 73, 57, 8, 6, + 1, 214, 33, 3, 73, 248, 228, 26, 222, 228, 8, 4, 1, 214, 33, 3, 73, 248, + 228, 26, 222, 228, 8, 6, 1, 214, 33, 3, 224, 177, 57, 8, 4, 1, 214, 33, + 3, 224, 177, 57, 8, 6, 1, 212, 123, 3, 73, 56, 8, 4, 1, 212, 123, 3, 73, + 56, 8, 6, 1, 212, 123, 3, 73, 57, 8, 4, 1, 212, 123, 3, 73, 57, 8, 6, 1, + 212, 123, 3, 251, 239, 26, 73, 56, 8, 4, 1, 212, 123, 3, 251, 239, 26, + 73, 56, 8, 6, 1, 212, 123, 3, 247, 126, 26, 73, 56, 8, 4, 1, 212, 123, 3, + 247, 126, 26, 73, 56, 8, 6, 1, 212, 123, 3, 73, 248, 228, 26, 73, 56, 8, + 4, 1, 212, 123, 3, 73, 248, 228, 26, 73, 56, 8, 6, 1, 207, 84, 3, 73, 56, + 8, 4, 1, 207, 84, 3, 73, 56, 8, 6, 1, 207, 84, 3, 73, 57, 8, 4, 1, 207, + 84, 3, 73, 57, 8, 6, 1, 207, 84, 3, 224, 177, 57, 8, 4, 1, 207, 84, 3, + 224, 177, 57, 8, 6, 1, 207, 84, 3, 246, 147, 57, 8, 4, 1, 207, 84, 3, + 246, 147, 57, 8, 6, 1, 108, 3, 241, 75, 57, 8, 4, 1, 108, 3, 241, 75, 57, + 8, 6, 1, 108, 3, 205, 241, 57, 8, 4, 1, 108, 3, 205, 241, 57, 8, 6, 1, + 108, 3, 246, 147, 57, 8, 4, 1, 108, 3, 246, 147, 57, 8, 6, 1, 108, 3, + 205, 241, 26, 169, 8, 4, 1, 108, 3, 205, 241, 26, 169, 8, 6, 1, 108, 3, + 222, 229, 26, 241, 74, 8, 4, 1, 108, 3, 222, 229, 26, 241, 74, 8, 6, 1, + 203, 169, 3, 205, 240, 8, 4, 1, 203, 169, 3, 205, 240, 8, 6, 1, 203, 169, + 3, 73, 57, 8, 4, 1, 203, 169, 3, 73, 57, 8, 6, 1, 201, 148, 3, 235, 73, + 8, 4, 1, 201, 148, 3, 235, 73, 8, 6, 1, 201, 148, 3, 169, 8, 4, 1, 201, + 148, 3, 169, 8, 6, 1, 201, 148, 3, 241, 74, 8, 4, 1, 201, 148, 3, 241, + 74, 8, 6, 1, 201, 148, 3, 73, 56, 8, 4, 1, 201, 148, 3, 73, 56, 8, 6, 1, + 201, 148, 3, 73, 57, 8, 4, 1, 201, 148, 3, 73, 57, 8, 6, 1, 200, 196, 3, + 73, 56, 8, 4, 1, 200, 196, 3, 73, 56, 8, 6, 1, 200, 196, 3, 241, 74, 8, + 4, 1, 200, 196, 3, 241, 74, 8, 6, 1, 200, 124, 3, 73, 56, 8, 4, 1, 200, + 124, 3, 73, 56, 8, 6, 1, 199, 158, 3, 246, 146, 8, 4, 1, 199, 158, 3, + 246, 146, 8, 6, 1, 199, 158, 3, 73, 57, 8, 4, 1, 199, 158, 3, 73, 57, 8, + 6, 1, 199, 158, 3, 224, 177, 57, 8, 4, 1, 199, 158, 3, 224, 177, 57, 8, + 4, 1, 234, 248, 3, 224, 177, 57, 8, 4, 1, 207, 84, 3, 241, 74, 8, 4, 1, + 201, 148, 3, 213, 27, 56, 8, 4, 1, 200, 124, 3, 213, 27, 56, 8, 4, 1, 35, + 3, 51, 167, 213, 26, 8, 4, 1, 168, 212, 123, 3, 73, 56, 8, 4, 1, 168, + 212, 123, 3, 241, 71, 97, 8, 4, 1, 168, 212, 123, 3, 122, 97, 8, 6, 1, + 210, 79, 212, 122, 8, 4, 1, 241, 136, 8, 6, 1, 35, 3, 73, 57, 8, 4, 1, + 35, 3, 73, 57, 8, 6, 1, 35, 3, 233, 187, 56, 8, 4, 1, 35, 3, 233, 187, + 56, 8, 6, 1, 35, 3, 246, 147, 26, 169, 8, 4, 1, 35, 3, 246, 147, 26, 169, + 8, 6, 1, 35, 3, 246, 147, 26, 235, 73, 8, 4, 1, 35, 3, 246, 147, 26, 235, + 73, 8, 6, 1, 35, 3, 246, 147, 26, 233, 187, 56, 8, 4, 1, 35, 3, 246, 147, + 26, 233, 187, 56, 8, 6, 1, 35, 3, 246, 147, 26, 205, 240, 8, 4, 1, 35, 3, + 246, 147, 26, 205, 240, 8, 6, 1, 35, 3, 246, 147, 26, 73, 57, 8, 4, 1, + 35, 3, 246, 147, 26, 73, 57, 8, 6, 1, 35, 3, 248, 58, 26, 169, 8, 4, 1, + 35, 3, 248, 58, 26, 169, 8, 6, 1, 35, 3, 248, 58, 26, 235, 73, 8, 4, 1, + 35, 3, 248, 58, 26, 235, 73, 8, 6, 1, 35, 3, 248, 58, 26, 233, 187, 56, + 8, 4, 1, 35, 3, 248, 58, 26, 233, 187, 56, 8, 6, 1, 35, 3, 248, 58, 26, + 205, 240, 8, 4, 1, 35, 3, 248, 58, 26, 205, 240, 8, 6, 1, 35, 3, 248, 58, + 26, 73, 57, 8, 4, 1, 35, 3, 248, 58, 26, 73, 57, 8, 6, 1, 197, 3, 73, 57, + 8, 4, 1, 197, 3, 73, 57, 8, 6, 1, 197, 3, 233, 187, 56, 8, 4, 1, 197, 3, + 233, 187, 56, 8, 6, 1, 197, 3, 205, 240, 8, 4, 1, 197, 3, 205, 240, 8, 6, + 1, 197, 3, 246, 147, 26, 169, 8, 4, 1, 197, 3, 246, 147, 26, 169, 8, 6, + 1, 197, 3, 246, 147, 26, 235, 73, 8, 4, 1, 197, 3, 246, 147, 26, 235, 73, + 8, 6, 1, 197, 3, 246, 147, 26, 233, 187, 56, 8, 4, 1, 197, 3, 246, 147, + 26, 233, 187, 56, 8, 6, 1, 197, 3, 246, 147, 26, 205, 240, 8, 4, 1, 197, + 3, 246, 147, 26, 205, 240, 8, 6, 1, 197, 3, 246, 147, 26, 73, 57, 8, 4, + 1, 197, 3, 246, 147, 26, 73, 57, 8, 6, 1, 233, 19, 3, 233, 187, 56, 8, 4, + 1, 233, 19, 3, 233, 187, 56, 8, 6, 1, 233, 19, 3, 73, 57, 8, 4, 1, 233, + 19, 3, 73, 57, 8, 6, 1, 163, 3, 73, 57, 8, 4, 1, 163, 3, 73, 57, 8, 6, 1, + 163, 3, 233, 187, 56, 8, 4, 1, 163, 3, 233, 187, 56, 8, 6, 1, 163, 3, + 246, 147, 26, 169, 8, 4, 1, 163, 3, 246, 147, 26, 169, 8, 6, 1, 163, 3, + 246, 147, 26, 235, 73, 8, 4, 1, 163, 3, 246, 147, 26, 235, 73, 8, 6, 1, + 163, 3, 246, 147, 26, 233, 187, 56, 8, 4, 1, 163, 3, 246, 147, 26, 233, + 187, 56, 8, 6, 1, 163, 3, 246, 147, 26, 205, 240, 8, 4, 1, 163, 3, 246, + 147, 26, 205, 240, 8, 6, 1, 163, 3, 246, 147, 26, 73, 57, 8, 4, 1, 163, + 3, 246, 147, 26, 73, 57, 8, 6, 1, 163, 3, 233, 125, 26, 169, 8, 4, 1, + 163, 3, 233, 125, 26, 169, 8, 6, 1, 163, 3, 233, 125, 26, 235, 73, 8, 4, + 1, 163, 3, 233, 125, 26, 235, 73, 8, 6, 1, 163, 3, 233, 125, 26, 233, + 187, 56, 8, 4, 1, 163, 3, 233, 125, 26, 233, 187, 56, 8, 6, 1, 163, 3, + 233, 125, 26, 205, 240, 8, 4, 1, 163, 3, 233, 125, 26, 205, 240, 8, 6, 1, + 163, 3, 233, 125, 26, 73, 57, 8, 4, 1, 163, 3, 233, 125, 26, 73, 57, 8, + 6, 1, 108, 3, 73, 57, 8, 4, 1, 108, 3, 73, 57, 8, 6, 1, 108, 3, 233, 187, + 56, 8, 4, 1, 108, 3, 233, 187, 56, 8, 6, 1, 108, 3, 233, 125, 26, 169, 8, + 4, 1, 108, 3, 233, 125, 26, 169, 8, 6, 1, 108, 3, 233, 125, 26, 235, 73, + 8, 4, 1, 108, 3, 233, 125, 26, 235, 73, 8, 6, 1, 108, 3, 233, 125, 26, + 233, 187, 56, 8, 4, 1, 108, 3, 233, 125, 26, 233, 187, 56, 8, 6, 1, 108, + 3, 233, 125, 26, 205, 240, 8, 4, 1, 108, 3, 233, 125, 26, 205, 240, 8, 6, + 1, 108, 3, 233, 125, 26, 73, 57, 8, 4, 1, 108, 3, 233, 125, 26, 73, 57, + 8, 6, 1, 200, 124, 3, 235, 73, 8, 4, 1, 200, 124, 3, 235, 73, 8, 6, 1, + 200, 124, 3, 73, 57, 8, 4, 1, 200, 124, 3, 73, 57, 8, 6, 1, 200, 124, 3, + 233, 187, 56, 8, 4, 1, 200, 124, 3, 233, 187, 56, 8, 6, 1, 200, 124, 3, + 205, 240, 8, 4, 1, 200, 124, 3, 205, 240, 8, 6, 1, 221, 203, 224, 139, 8, + 4, 1, 221, 203, 224, 139, 8, 6, 1, 221, 203, 203, 168, 8, 4, 1, 221, 203, + 203, 168, 8, 6, 1, 200, 124, 3, 224, 74, 8, 4, 1, 200, 124, 3, 224, 74, + 31, 4, 1, 251, 113, 3, 214, 228, 31, 4, 1, 251, 113, 3, 241, 241, 31, 4, + 1, 251, 113, 3, 214, 229, 26, 203, 74, 31, 4, 1, 251, 113, 3, 241, 242, + 26, 203, 74, 31, 4, 1, 251, 113, 3, 214, 229, 26, 216, 231, 31, 4, 1, + 251, 113, 3, 241, 242, 26, 216, 231, 31, 4, 1, 251, 113, 3, 214, 229, 26, + 216, 20, 31, 4, 1, 251, 113, 3, 241, 242, 26, 216, 20, 31, 6, 1, 251, + 113, 3, 214, 228, 31, 6, 1, 251, 113, 3, 241, 241, 31, 6, 1, 251, 113, 3, + 214, 229, 26, 203, 74, 31, 6, 1, 251, 113, 3, 241, 242, 26, 203, 74, 31, + 6, 1, 251, 113, 3, 214, 229, 26, 216, 231, 31, 6, 1, 251, 113, 3, 241, + 242, 26, 216, 231, 31, 6, 1, 251, 113, 3, 214, 229, 26, 216, 20, 31, 6, + 1, 251, 113, 3, 241, 242, 26, 216, 20, 31, 4, 1, 238, 125, 3, 214, 228, + 31, 4, 1, 238, 125, 3, 241, 241, 31, 4, 1, 238, 125, 3, 214, 229, 26, + 203, 74, 31, 4, 1, 238, 125, 3, 241, 242, 26, 203, 74, 31, 4, 1, 238, + 125, 3, 214, 229, 26, 216, 231, 31, 4, 1, 238, 125, 3, 241, 242, 26, 216, + 231, 31, 6, 1, 238, 125, 3, 214, 228, 31, 6, 1, 238, 125, 3, 241, 241, + 31, 6, 1, 238, 125, 3, 214, 229, 26, 203, 74, 31, 6, 1, 238, 125, 3, 241, + 242, 26, 203, 74, 31, 6, 1, 238, 125, 3, 214, 229, 26, 216, 231, 31, 6, + 1, 238, 125, 3, 241, 242, 26, 216, 231, 31, 4, 1, 238, 80, 3, 214, 228, + 31, 4, 1, 238, 80, 3, 241, 241, 31, 4, 1, 238, 80, 3, 214, 229, 26, 203, + 74, 31, 4, 1, 238, 80, 3, 241, 242, 26, 203, 74, 31, 4, 1, 238, 80, 3, + 214, 229, 26, 216, 231, 31, 4, 1, 238, 80, 3, 241, 242, 26, 216, 231, 31, + 4, 1, 238, 80, 3, 214, 229, 26, 216, 20, 31, 4, 1, 238, 80, 3, 241, 242, + 26, 216, 20, 31, 6, 1, 238, 80, 3, 214, 228, 31, 6, 1, 238, 80, 3, 241, + 241, 31, 6, 1, 238, 80, 3, 214, 229, 26, 203, 74, 31, 6, 1, 238, 80, 3, + 241, 242, 26, 203, 74, 31, 6, 1, 238, 80, 3, 214, 229, 26, 216, 231, 31, + 6, 1, 238, 80, 3, 241, 242, 26, 216, 231, 31, 6, 1, 238, 80, 3, 214, 229, + 26, 216, 20, 31, 6, 1, 238, 80, 3, 241, 242, 26, 216, 20, 31, 4, 1, 228, + 42, 3, 214, 228, 31, 4, 1, 228, 42, 3, 241, 241, 31, 4, 1, 228, 42, 3, + 214, 229, 26, 203, 74, 31, 4, 1, 228, 42, 3, 241, 242, 26, 203, 74, 31, + 4, 1, 228, 42, 3, 214, 229, 26, 216, 231, 31, 4, 1, 228, 42, 3, 241, 242, + 26, 216, 231, 31, 4, 1, 228, 42, 3, 214, 229, 26, 216, 20, 31, 4, 1, 228, + 42, 3, 241, 242, 26, 216, 20, 31, 6, 1, 228, 42, 3, 214, 228, 31, 6, 1, + 228, 42, 3, 241, 241, 31, 6, 1, 228, 42, 3, 214, 229, 26, 203, 74, 31, 6, + 1, 228, 42, 3, 241, 242, 26, 203, 74, 31, 6, 1, 228, 42, 3, 214, 229, 26, + 216, 231, 31, 6, 1, 228, 42, 3, 241, 242, 26, 216, 231, 31, 6, 1, 228, + 42, 3, 214, 229, 26, 216, 20, 31, 6, 1, 228, 42, 3, 241, 242, 26, 216, + 20, 31, 4, 1, 217, 82, 3, 214, 228, 31, 4, 1, 217, 82, 3, 241, 241, 31, + 4, 1, 217, 82, 3, 214, 229, 26, 203, 74, 31, 4, 1, 217, 82, 3, 241, 242, + 26, 203, 74, 31, 4, 1, 217, 82, 3, 214, 229, 26, 216, 231, 31, 4, 1, 217, + 82, 3, 241, 242, 26, 216, 231, 31, 6, 1, 217, 82, 3, 214, 228, 31, 6, 1, + 217, 82, 3, 241, 241, 31, 6, 1, 217, 82, 3, 214, 229, 26, 203, 74, 31, 6, + 1, 217, 82, 3, 241, 242, 26, 203, 74, 31, 6, 1, 217, 82, 3, 214, 229, 26, + 216, 231, 31, 6, 1, 217, 82, 3, 241, 242, 26, 216, 231, 31, 4, 1, 203, + 221, 3, 214, 228, 31, 4, 1, 203, 221, 3, 241, 241, 31, 4, 1, 203, 221, 3, + 214, 229, 26, 203, 74, 31, 4, 1, 203, 221, 3, 241, 242, 26, 203, 74, 31, + 4, 1, 203, 221, 3, 214, 229, 26, 216, 231, 31, 4, 1, 203, 221, 3, 241, + 242, 26, 216, 231, 31, 4, 1, 203, 221, 3, 214, 229, 26, 216, 20, 31, 4, + 1, 203, 221, 3, 241, 242, 26, 216, 20, 31, 6, 1, 203, 221, 3, 241, 241, + 31, 6, 1, 203, 221, 3, 241, 242, 26, 203, 74, 31, 6, 1, 203, 221, 3, 241, + 242, 26, 216, 231, 31, 6, 1, 203, 221, 3, 241, 242, 26, 216, 20, 31, 4, + 1, 217, 84, 3, 214, 228, 31, 4, 1, 217, 84, 3, 241, 241, 31, 4, 1, 217, + 84, 3, 214, 229, 26, 203, 74, 31, 4, 1, 217, 84, 3, 241, 242, 26, 203, + 74, 31, 4, 1, 217, 84, 3, 214, 229, 26, 216, 231, 31, 4, 1, 217, 84, 3, + 241, 242, 26, 216, 231, 31, 4, 1, 217, 84, 3, 214, 229, 26, 216, 20, 31, + 4, 1, 217, 84, 3, 241, 242, 26, 216, 20, 31, 6, 1, 217, 84, 3, 214, 228, + 31, 6, 1, 217, 84, 3, 241, 241, 31, 6, 1, 217, 84, 3, 214, 229, 26, 203, + 74, 31, 6, 1, 217, 84, 3, 241, 242, 26, 203, 74, 31, 6, 1, 217, 84, 3, + 214, 229, 26, 216, 231, 31, 6, 1, 217, 84, 3, 241, 242, 26, 216, 231, 31, + 6, 1, 217, 84, 3, 214, 229, 26, 216, 20, 31, 6, 1, 217, 84, 3, 241, 242, + 26, 216, 20, 31, 4, 1, 251, 113, 3, 203, 74, 31, 4, 1, 251, 113, 3, 216, + 231, 31, 4, 1, 238, 125, 3, 203, 74, 31, 4, 1, 238, 125, 3, 216, 231, 31, + 4, 1, 238, 80, 3, 203, 74, 31, 4, 1, 238, 80, 3, 216, 231, 31, 4, 1, 228, + 42, 3, 203, 74, 31, 4, 1, 228, 42, 3, 216, 231, 31, 4, 1, 217, 82, 3, + 203, 74, 31, 4, 1, 217, 82, 3, 216, 231, 31, 4, 1, 203, 221, 3, 203, 74, + 31, 4, 1, 203, 221, 3, 216, 231, 31, 4, 1, 217, 84, 3, 203, 74, 31, 4, 1, + 217, 84, 3, 216, 231, 31, 4, 1, 251, 113, 3, 214, 229, 26, 199, 219, 31, + 4, 1, 251, 113, 3, 241, 242, 26, 199, 219, 31, 4, 1, 251, 113, 3, 214, + 229, 26, 203, 75, 26, 199, 219, 31, 4, 1, 251, 113, 3, 241, 242, 26, 203, + 75, 26, 199, 219, 31, 4, 1, 251, 113, 3, 214, 229, 26, 216, 232, 26, 199, + 219, 31, 4, 1, 251, 113, 3, 241, 242, 26, 216, 232, 26, 199, 219, 31, 4, + 1, 251, 113, 3, 214, 229, 26, 216, 21, 26, 199, 219, 31, 4, 1, 251, 113, + 3, 241, 242, 26, 216, 21, 26, 199, 219, 31, 6, 1, 251, 113, 3, 214, 229, + 26, 214, 242, 31, 6, 1, 251, 113, 3, 241, 242, 26, 214, 242, 31, 6, 1, + 251, 113, 3, 214, 229, 26, 203, 75, 26, 214, 242, 31, 6, 1, 251, 113, 3, + 241, 242, 26, 203, 75, 26, 214, 242, 31, 6, 1, 251, 113, 3, 214, 229, 26, + 216, 232, 26, 214, 242, 31, 6, 1, 251, 113, 3, 241, 242, 26, 216, 232, + 26, 214, 242, 31, 6, 1, 251, 113, 3, 214, 229, 26, 216, 21, 26, 214, 242, + 31, 6, 1, 251, 113, 3, 241, 242, 26, 216, 21, 26, 214, 242, 31, 4, 1, + 238, 80, 3, 214, 229, 26, 199, 219, 31, 4, 1, 238, 80, 3, 241, 242, 26, + 199, 219, 31, 4, 1, 238, 80, 3, 214, 229, 26, 203, 75, 26, 199, 219, 31, + 4, 1, 238, 80, 3, 241, 242, 26, 203, 75, 26, 199, 219, 31, 4, 1, 238, 80, + 3, 214, 229, 26, 216, 232, 26, 199, 219, 31, 4, 1, 238, 80, 3, 241, 242, + 26, 216, 232, 26, 199, 219, 31, 4, 1, 238, 80, 3, 214, 229, 26, 216, 21, + 26, 199, 219, 31, 4, 1, 238, 80, 3, 241, 242, 26, 216, 21, 26, 199, 219, + 31, 6, 1, 238, 80, 3, 214, 229, 26, 214, 242, 31, 6, 1, 238, 80, 3, 241, + 242, 26, 214, 242, 31, 6, 1, 238, 80, 3, 214, 229, 26, 203, 75, 26, 214, + 242, 31, 6, 1, 238, 80, 3, 241, 242, 26, 203, 75, 26, 214, 242, 31, 6, 1, + 238, 80, 3, 214, 229, 26, 216, 232, 26, 214, 242, 31, 6, 1, 238, 80, 3, + 241, 242, 26, 216, 232, 26, 214, 242, 31, 6, 1, 238, 80, 3, 214, 229, 26, + 216, 21, 26, 214, 242, 31, 6, 1, 238, 80, 3, 241, 242, 26, 216, 21, 26, + 214, 242, 31, 4, 1, 217, 84, 3, 214, 229, 26, 199, 219, 31, 4, 1, 217, + 84, 3, 241, 242, 26, 199, 219, 31, 4, 1, 217, 84, 3, 214, 229, 26, 203, + 75, 26, 199, 219, 31, 4, 1, 217, 84, 3, 241, 242, 26, 203, 75, 26, 199, + 219, 31, 4, 1, 217, 84, 3, 214, 229, 26, 216, 232, 26, 199, 219, 31, 4, + 1, 217, 84, 3, 241, 242, 26, 216, 232, 26, 199, 219, 31, 4, 1, 217, 84, + 3, 214, 229, 26, 216, 21, 26, 199, 219, 31, 4, 1, 217, 84, 3, 241, 242, + 26, 216, 21, 26, 199, 219, 31, 6, 1, 217, 84, 3, 214, 229, 26, 214, 242, + 31, 6, 1, 217, 84, 3, 241, 242, 26, 214, 242, 31, 6, 1, 217, 84, 3, 214, + 229, 26, 203, 75, 26, 214, 242, 31, 6, 1, 217, 84, 3, 241, 242, 26, 203, + 75, 26, 214, 242, 31, 6, 1, 217, 84, 3, 214, 229, 26, 216, 232, 26, 214, + 242, 31, 6, 1, 217, 84, 3, 241, 242, 26, 216, 232, 26, 214, 242, 31, 6, + 1, 217, 84, 3, 214, 229, 26, 216, 21, 26, 214, 242, 31, 6, 1, 217, 84, 3, + 241, 242, 26, 216, 21, 26, 214, 242, 31, 4, 1, 251, 113, 3, 202, 170, 31, + 4, 1, 251, 113, 3, 222, 228, 31, 4, 1, 251, 113, 3, 203, 75, 26, 199, + 219, 31, 4, 1, 251, 113, 3, 199, 219, 31, 4, 1, 251, 113, 3, 216, 232, + 26, 199, 219, 31, 4, 1, 251, 113, 3, 216, 20, 31, 4, 1, 251, 113, 3, 216, + 21, 26, 199, 219, 31, 6, 1, 251, 113, 3, 202, 170, 31, 6, 1, 251, 113, 3, + 222, 228, 31, 6, 1, 251, 113, 3, 203, 74, 31, 6, 1, 251, 113, 3, 216, + 231, 31, 6, 1, 251, 113, 3, 214, 242, 31, 226, 58, 31, 214, 242, 31, 214, + 228, 31, 216, 20, 31, 241, 68, 26, 216, 20, 31, 4, 1, 238, 80, 3, 203, + 75, 26, 199, 219, 31, 4, 1, 238, 80, 3, 199, 219, 31, 4, 1, 238, 80, 3, + 216, 232, 26, 199, 219, 31, 4, 1, 238, 80, 3, 216, 20, 31, 4, 1, 238, 80, + 3, 216, 21, 26, 199, 219, 31, 6, 1, 238, 125, 3, 203, 74, 31, 6, 1, 238, + 125, 3, 216, 231, 31, 6, 1, 238, 80, 3, 203, 74, 31, 6, 1, 238, 80, 3, + 216, 231, 31, 6, 1, 238, 80, 3, 214, 242, 31, 214, 229, 26, 203, 74, 31, + 214, 229, 26, 216, 231, 31, 214, 229, 26, 216, 20, 31, 4, 1, 228, 42, 3, + 202, 170, 31, 4, 1, 228, 42, 3, 222, 228, 31, 4, 1, 228, 42, 3, 241, 68, + 26, 203, 74, 31, 4, 1, 228, 42, 3, 241, 68, 26, 216, 231, 31, 4, 1, 228, + 42, 3, 216, 20, 31, 4, 1, 228, 42, 3, 241, 68, 26, 216, 20, 31, 6, 1, + 228, 42, 3, 202, 170, 31, 6, 1, 228, 42, 3, 222, 228, 31, 6, 1, 228, 42, + 3, 203, 74, 31, 6, 1, 228, 42, 3, 216, 231, 31, 241, 242, 26, 203, 74, + 31, 241, 242, 26, 216, 231, 31, 241, 242, 26, 216, 20, 31, 4, 1, 203, + 221, 3, 202, 170, 31, 4, 1, 203, 221, 3, 222, 228, 31, 4, 1, 203, 221, 3, + 241, 68, 26, 203, 74, 31, 4, 1, 203, 221, 3, 241, 68, 26, 216, 231, 31, + 4, 1, 213, 91, 3, 214, 228, 31, 4, 1, 213, 91, 3, 241, 241, 31, 4, 1, + 203, 221, 3, 216, 20, 31, 4, 1, 203, 221, 3, 241, 68, 26, 216, 20, 31, 6, + 1, 203, 221, 3, 202, 170, 31, 6, 1, 203, 221, 3, 222, 228, 31, 6, 1, 203, + 221, 3, 203, 74, 31, 6, 1, 203, 221, 3, 216, 231, 31, 6, 1, 213, 91, 3, + 241, 241, 31, 241, 68, 26, 203, 74, 31, 241, 68, 26, 216, 231, 31, 203, + 74, 31, 4, 1, 217, 84, 3, 203, 75, 26, 199, 219, 31, 4, 1, 217, 84, 3, + 199, 219, 31, 4, 1, 217, 84, 3, 216, 232, 26, 199, 219, 31, 4, 1, 217, + 84, 3, 216, 20, 31, 4, 1, 217, 84, 3, 216, 21, 26, 199, 219, 31, 6, 1, + 217, 82, 3, 203, 74, 31, 6, 1, 217, 82, 3, 216, 231, 31, 6, 1, 217, 84, + 3, 203, 74, 31, 6, 1, 217, 84, 3, 216, 231, 31, 6, 1, 217, 84, 3, 214, + 242, 31, 216, 231, 31, 241, 241, 238, 180, 214, 94, 238, 191, 214, 94, + 238, 180, 208, 244, 238, 191, 208, 244, 206, 41, 208, 244, 236, 227, 208, + 244, 209, 104, 208, 244, 237, 102, 208, 244, 214, 212, 208, 244, 206, 77, + 208, 244, 234, 222, 208, 244, 199, 82, 201, 25, 208, 244, 199, 82, 201, + 25, 218, 232, 199, 82, 201, 25, 227, 161, 225, 19, 81, 213, 37, 81, 233, + 33, 218, 233, 233, 33, 237, 102, 241, 244, 238, 180, 241, 244, 238, 191, + 241, 244, 233, 177, 148, 53, 83, 224, 176, 53, 128, 224, 176, 49, 209, + 139, 214, 63, 81, 51, 209, 139, 214, 63, 81, 209, 139, 224, 58, 214, 63, + 81, 209, 139, 234, 56, 214, 63, 81, 49, 53, 214, 63, 81, 51, 53, 214, 63, + 81, 53, 224, 58, 214, 63, 81, 53, 234, 56, 214, 63, 81, 242, 40, 53, 242, + 40, 248, 20, 205, 95, 248, 20, 112, 73, 225, 38, 120, 73, 225, 38, 233, + 177, 238, 195, 233, 31, 215, 99, 224, 177, 210, 154, 216, 128, 210, 154, + 225, 19, 238, 189, 213, 37, 238, 189, 215, 78, 241, 8, 236, 240, 225, 19, + 216, 239, 213, 37, 216, 239, 220, 124, 218, 240, 208, 244, 216, 28, 221, + 170, 54, 216, 28, 206, 167, 206, 51, 54, 215, 14, 53, 215, 14, 205, 83, + 215, 14, 213, 105, 215, 14, 213, 105, 53, 215, 14, 213, 105, 205, 83, + 215, 14, 247, 129, 209, 139, 225, 23, 251, 71, 214, 63, 81, 209, 139, + 213, 41, 251, 71, 214, 63, 81, 213, 166, 81, 53, 238, 43, 81, 228, 58, + 216, 241, 203, 248, 171, 206, 7, 247, 130, 228, 75, 215, 99, 250, 163, + 233, 34, 248, 20, 236, 219, 209, 75, 49, 52, 248, 70, 3, 214, 73, 51, 52, + 248, 70, 3, 214, 73, 53, 214, 79, 81, 214, 79, 238, 43, 81, 238, 43, 214, + 79, 81, 205, 216, 2, 238, 81, 213, 105, 215, 163, 54, 63, 98, 248, 20, + 63, 87, 248, 20, 128, 250, 165, 213, 105, 210, 167, 246, 111, 203, 228, + 120, 250, 164, 251, 128, 202, 247, 246, 68, 221, 157, 54, 207, 167, 241, + 244, 228, 50, 203, 248, 237, 25, 214, 212, 81, 126, 73, 214, 211, 214, + 90, 215, 14, 236, 229, 73, 214, 211, 237, 61, 73, 214, 211, 120, 73, 214, + 211, 236, 229, 73, 81, 239, 180, 242, 234, 205, 94, 83, 236, 229, 240, + 180, 222, 66, 13, 208, 244, 200, 238, 227, 161, 236, 181, 251, 8, 228, + 48, 205, 232, 228, 48, 210, 154, 228, 48, 215, 113, 225, 19, 228, 18, + 213, 37, 228, 18, 237, 73, 208, 33, 228, 18, 215, 78, 241, 8, 228, 18, + 228, 87, 207, 115, 207, 184, 251, 241, 207, 115, 207, 184, 228, 87, 9, + 236, 242, 210, 84, 251, 241, 9, 236, 242, 210, 84, 220, 118, 17, 210, 85, + 218, 236, 17, 210, 85, 207, 213, 199, 81, 207, 213, 8, 4, 1, 70, 207, + 213, 149, 207, 213, 164, 207, 213, 187, 207, 213, 210, 135, 207, 213, + 192, 207, 213, 219, 113, 207, 213, 93, 54, 207, 213, 221, 156, 207, 213, + 238, 122, 54, 207, 213, 49, 216, 115, 207, 213, 51, 216, 115, 207, 213, + 8, 4, 1, 220, 214, 208, 4, 199, 81, 208, 4, 102, 208, 4, 105, 208, 4, + 147, 208, 4, 149, 208, 4, 164, 208, 4, 187, 208, 4, 210, 135, 208, 4, + 192, 208, 4, 219, 113, 208, 4, 93, 54, 208, 4, 221, 156, 208, 4, 238, + 122, 54, 208, 4, 49, 216, 115, 208, 4, 51, 216, 115, 8, 208, 4, 4, 1, 62, + 8, 208, 4, 4, 1, 72, 8, 208, 4, 4, 1, 74, 8, 208, 4, 4, 1, 200, 195, 8, + 208, 4, 4, 1, 211, 218, 8, 208, 4, 4, 1, 234, 247, 8, 208, 4, 4, 1, 227, + 118, 8, 208, 4, 4, 1, 156, 8, 208, 4, 4, 1, 223, 243, 8, 208, 4, 4, 1, + 220, 214, 8, 208, 4, 4, 1, 216, 226, 8, 208, 4, 4, 1, 212, 122, 8, 208, + 4, 4, 1, 207, 83, 238, 60, 54, 246, 80, 54, 242, 219, 54, 236, 209, 236, + 213, 54, 224, 156, 54, 221, 171, 54, 220, 141, 54, 216, 5, 54, 212, 149, + 54, 200, 246, 54, 220, 8, 210, 51, 54, 240, 189, 54, 238, 61, 54, 226, + 142, 54, 204, 208, 54, 239, 163, 54, 235, 246, 216, 40, 54, 216, 2, 54, + 235, 45, 54, 250, 129, 54, 233, 103, 54, 247, 71, 54, 224, 146, 205, 138, + 54, 208, 225, 54, 206, 164, 54, 228, 102, 212, 149, 54, 204, 188, 224, + 156, 54, 218, 222, 134, 54, 222, 178, 54, 212, 172, 54, 225, 67, 54, 38, + 49, 234, 161, 56, 38, 51, 234, 161, 56, 38, 168, 83, 224, 177, 216, 242, + 38, 209, 250, 83, 224, 177, 216, 242, 38, 251, 47, 55, 56, 38, 246, 112, + 55, 56, 38, 49, 55, 56, 38, 51, 55, 56, 38, 213, 27, 216, 242, 38, 246, + 112, 213, 27, 216, 242, 38, 251, 47, 213, 27, 216, 242, 38, 126, 190, 56, + 38, 236, 229, 190, 56, 38, 238, 175, 246, 155, 38, 238, 175, 208, 193, + 38, 238, 175, 241, 64, 38, 238, 175, 246, 156, 249, 124, 38, 49, 51, 55, + 56, 38, 238, 175, 211, 209, 38, 238, 175, 226, 210, 38, 238, 175, 203, + 218, 215, 96, 205, 98, 38, 213, 106, 209, 17, 216, 242, 38, 53, 83, 208, + 47, 216, 242, 38, 251, 57, 99, 38, 205, 83, 203, 250, 38, 201, 28, 248, + 51, 56, 38, 98, 55, 216, 242, 38, 168, 53, 209, 17, 216, 242, 38, 87, + 234, 161, 3, 154, 239, 165, 38, 98, 234, 161, 3, 154, 239, 165, 38, 49, + 55, 57, 38, 51, 55, 57, 38, 250, 166, 56, 251, 247, 217, 117, 251, 231, + 205, 186, 206, 107, 208, 13, 175, 6, 247, 223, 241, 155, 247, 61, 247, + 56, 224, 177, 99, 247, 131, 217, 117, 247, 182, 204, 4, 238, 62, 243, 50, + 211, 206, 241, 155, 237, 177, 135, 4, 236, 156, 135, 6, 234, 247, 248, + 142, 6, 234, 247, 175, 6, 234, 247, 215, 130, 243, 50, 215, 130, 243, 51, + 119, 120, 215, 204, 135, 6, 70, 248, 142, 6, 70, 135, 6, 156, 135, 4, + 156, 225, 193, 68, 249, 77, 99, 175, 6, 220, 214, 218, 91, 54, 209, 1, + 213, 178, 243, 18, 135, 6, 216, 226, 175, 6, 216, 226, 175, 6, 214, 167, + 135, 6, 146, 248, 142, 6, 146, 175, 6, 146, 215, 21, 206, 255, 213, 118, + 210, 146, 81, 206, 176, 54, 205, 128, 134, 54, 203, 43, 175, 6, 199, 157, + 217, 2, 54, 217, 107, 54, 228, 50, 217, 107, 54, 248, 142, 6, 199, 157, + 204, 185, 31, 4, 1, 228, 41, 226, 251, 54, 251, 66, 54, 135, 6, 250, 103, + 248, 142, 6, 247, 223, 238, 86, 99, 135, 4, 72, 135, 6, 72, 135, 6, 238, + 5, 204, 185, 6, 238, 5, 135, 6, 223, 243, 135, 4, 74, 140, 99, 248, 211, + 99, 235, 148, 99, 242, 24, 99, 228, 92, 208, 255, 212, 228, 6, 214, 167, + 237, 180, 54, 175, 4, 215, 204, 175, 4, 236, 60, 175, 6, 236, 60, 175, 6, + 215, 204, 175, 220, 213, 207, 231, 204, 185, 43, 6, 236, 156, 204, 185, + 43, 6, 156, 213, 105, 43, 6, 156, 204, 185, 43, 6, 200, 123, 175, 39, 6, + 242, 153, 175, 39, 4, 242, 153, 175, 39, 4, 72, 175, 39, 4, 70, 175, 39, + 4, 227, 251, 214, 245, 224, 176, 204, 185, 251, 89, 216, 28, 54, 251, + 153, 204, 185, 4, 238, 5, 16, 36, 212, 22, 208, 255, 201, 164, 236, 219, + 112, 210, 131, 201, 164, 236, 219, 112, 219, 107, 201, 164, 236, 219, + 112, 206, 157, 201, 164, 236, 219, 112, 206, 74, 201, 164, 236, 219, 120, + 206, 71, 201, 164, 236, 219, 112, 237, 107, 201, 164, 236, 219, 120, 237, + 106, 201, 164, 236, 219, 126, 237, 106, 201, 164, 236, 219, 236, 229, + 237, 106, 201, 164, 236, 219, 112, 209, 96, 201, 164, 236, 219, 237, 61, + 209, 94, 201, 164, 236, 219, 112, 238, 227, 201, 164, 236, 219, 126, 238, + 225, 201, 164, 236, 219, 237, 61, 238, 225, 201, 164, 236, 219, 210, 136, + 238, 225, 236, 219, 218, 92, 102, 212, 240, 218, 93, 102, 212, 240, 218, + 93, 105, 212, 240, 218, 93, 147, 212, 240, 218, 93, 149, 212, 240, 218, + 93, 164, 212, 240, 218, 93, 187, 212, 240, 218, 93, 210, 135, 212, 240, + 218, 93, 192, 212, 240, 218, 93, 219, 113, 212, 240, 218, 93, 206, 166, + 212, 240, 218, 93, 238, 199, 212, 240, 218, 93, 204, 164, 212, 240, 218, + 93, 237, 104, 212, 240, 218, 93, 112, 233, 82, 212, 240, 218, 93, 237, + 61, 233, 82, 212, 240, 218, 93, 112, 206, 50, 4, 212, 240, 218, 93, 102, + 4, 212, 240, 218, 93, 105, 4, 212, 240, 218, 93, 147, 4, 212, 240, 218, + 93, 149, 4, 212, 240, 218, 93, 164, 4, 212, 240, 218, 93, 187, 4, 212, + 240, 218, 93, 210, 135, 4, 212, 240, 218, 93, 192, 4, 212, 240, 218, 93, + 219, 113, 4, 212, 240, 218, 93, 206, 166, 4, 212, 240, 218, 93, 238, 199, + 4, 212, 240, 218, 93, 204, 164, 4, 212, 240, 218, 93, 237, 104, 4, 212, + 240, 218, 93, 112, 233, 82, 4, 212, 240, 218, 93, 237, 61, 233, 82, 4, + 212, 240, 218, 93, 112, 206, 50, 212, 240, 218, 93, 112, 206, 51, 247, + 224, 242, 153, 212, 240, 218, 93, 237, 61, 206, 50, 212, 240, 218, 93, + 206, 167, 206, 50, 212, 240, 218, 93, 213, 105, 112, 233, 82, 8, 4, 1, + 213, 105, 247, 223, 212, 240, 218, 93, 209, 106, 225, 62, 19, 212, 240, + 218, 93, 237, 105, 239, 20, 19, 212, 240, 218, 93, 237, 105, 206, 50, + 212, 240, 218, 93, 112, 233, 83, 206, 50, 201, 164, 236, 219, 199, 82, + 206, 71, 204, 185, 17, 105, 204, 185, 17, 147, 98, 48, 182, 48, 87, 48, + 191, 48, 49, 51, 48, 115, 127, 48, 157, 201, 48, 48, 157, 239, 14, 48, + 208, 254, 239, 14, 48, 208, 254, 201, 48, 48, 98, 55, 3, 97, 87, 55, 3, + 97, 98, 201, 78, 48, 87, 201, 78, 48, 98, 120, 234, 134, 48, 182, 120, + 234, 134, 48, 87, 120, 234, 134, 48, 191, 120, 234, 134, 48, 98, 55, 3, + 207, 6, 87, 55, 3, 207, 6, 98, 55, 236, 201, 148, 182, 55, 236, 201, 148, + 87, 55, 236, 201, 148, 191, 55, 236, 201, 148, 115, 127, 55, 3, 249, 64, + 98, 55, 3, 117, 87, 55, 3, 117, 98, 55, 3, 224, 74, 87, 55, 3, 224, 74, + 49, 51, 201, 78, 48, 49, 51, 55, 3, 97, 191, 199, 27, 48, 182, 55, 3, + 205, 224, 225, 18, 182, 55, 3, 205, 224, 213, 35, 191, 55, 3, 205, 224, + 225, 18, 191, 55, 3, 205, 224, 213, 35, 87, 55, 3, 243, 16, 239, 165, + 191, 55, 3, 243, 16, 225, 18, 251, 47, 205, 158, 210, 170, 48, 246, 112, + 205, 158, 210, 170, 48, 157, 201, 48, 55, 205, 186, 168, 148, 98, 55, + 205, 186, 249, 77, 119, 87, 55, 205, 186, 148, 251, 47, 176, 246, 156, + 48, 246, 112, 176, 246, 156, 48, 98, 234, 161, 3, 154, 203, 216, 98, 234, + 161, 3, 154, 239, 165, 182, 234, 161, 3, 154, 213, 35, 182, 234, 161, 3, + 154, 225, 18, 87, 234, 161, 3, 154, 203, 216, 87, 234, 161, 3, 154, 239, + 165, 191, 234, 161, 3, 154, 213, 35, 191, 234, 161, 3, 154, 225, 18, 87, + 55, 119, 98, 48, 182, 55, 98, 76, 191, 48, 98, 55, 119, 87, 48, 98, 216, + 188, 250, 199, 182, 216, 188, 250, 199, 87, 216, 188, 250, 199, 191, 216, + 188, 250, 199, 98, 234, 161, 119, 87, 234, 160, 87, 234, 161, 119, 98, + 234, 160, 98, 53, 55, 3, 97, 49, 51, 53, 55, 3, 97, 87, 53, 55, 3, 97, + 98, 53, 48, 182, 53, 48, 87, 53, 48, 191, 53, 48, 49, 51, 53, 48, 115, + 127, 53, 48, 157, 201, 48, 53, 48, 157, 239, 14, 53, 48, 208, 254, 239, + 14, 53, 48, 208, 254, 201, 48, 53, 48, 98, 205, 83, 48, 87, 205, 83, 48, + 98, 208, 186, 48, 87, 208, 186, 48, 182, 55, 3, 53, 97, 191, 55, 3, 53, + 97, 98, 241, 243, 48, 182, 241, 243, 48, 87, 241, 243, 48, 191, 241, 243, + 48, 98, 55, 205, 186, 148, 87, 55, 205, 186, 148, 98, 64, 48, 182, 64, + 48, 87, 64, 48, 191, 64, 48, 182, 64, 55, 236, 201, 148, 182, 64, 55, + 217, 79, 216, 64, 182, 64, 55, 217, 79, 216, 65, 3, 233, 177, 148, 182, + 64, 55, 217, 79, 216, 65, 3, 83, 148, 182, 64, 53, 48, 182, 64, 53, 55, + 217, 79, 216, 64, 87, 64, 55, 236, 201, 201, 102, 157, 201, 48, 55, 205, + 186, 243, 15, 208, 254, 239, 14, 55, 205, 186, 243, 15, 115, 127, 64, 48, + 51, 55, 3, 4, 246, 155, 191, 55, 98, 76, 182, 48, 126, 87, 250, 199, 98, + 55, 3, 83, 97, 87, 55, 3, 83, 97, 49, 51, 55, 3, 83, 97, 98, 55, 3, 53, + 83, 97, 87, 55, 3, 53, 83, 97, 49, 51, 55, 3, 53, 83, 97, 98, 217, 51, + 48, 87, 217, 51, 48, 49, 51, 217, 51, 48, 36, 251, 124, 246, 65, 216, + 108, 241, 48, 206, 97, 238, 38, 206, 97, 240, 202, 218, 215, 238, 39, + 238, 181, 210, 141, 228, 106, 220, 152, 238, 202, 217, 117, 218, 215, + 251, 86, 238, 202, 217, 117, 4, 238, 202, 217, 117, 243, 44, 250, 189, + 222, 44, 240, 202, 218, 215, 243, 46, 250, 189, 222, 44, 4, 243, 44, 250, + 189, 222, 44, 238, 171, 76, 214, 247, 220, 213, 215, 1, 220, 213, 243, + 21, 220, 213, 207, 231, 221, 157, 54, 221, 155, 54, 73, 215, 113, 240, + 235, 209, 75, 210, 142, 221, 156, 250, 166, 217, 43, 213, 27, 217, 43, + 248, 21, 217, 43, 52, 212, 234, 242, 210, 212, 234, 236, 222, 212, 234, + 214, 243, 138, 228, 94, 51, 251, 70, 251, 70, 222, 73, 251, 70, 208, 224, + 251, 70, 240, 237, 240, 202, 218, 215, 240, 241, 216, 121, 138, 218, 215, + 216, 121, 138, 224, 98, 251, 79, 224, 98, 217, 33, 228, 55, 203, 241, + 228, 69, 53, 228, 69, 205, 83, 228, 69, 243, 38, 228, 69, 207, 203, 228, + 69, 202, 181, 228, 69, 246, 112, 228, 69, 246, 112, 243, 38, 228, 69, + 251, 47, 243, 38, 228, 69, 206, 96, 248, 254, 213, 200, 214, 244, 73, + 221, 156, 238, 46, 235, 252, 214, 244, 233, 192, 205, 241, 217, 43, 213, + 105, 205, 240, 228, 50, 225, 47, 212, 122, 209, 141, 201, 77, 200, 226, + 215, 1, 218, 215, 205, 240, 221, 157, 205, 240, 250, 159, 160, 138, 218, + 215, 250, 159, 160, 138, 251, 4, 160, 138, 251, 4, 247, 247, 218, 215, + 251, 240, 160, 138, 220, 26, 251, 4, 218, 224, 251, 240, 160, 138, 251, + 117, 160, 138, 218, 215, 251, 117, 160, 138, 251, 117, 160, 217, 34, 160, + 138, 205, 83, 205, 240, 251, 125, 160, 138, 238, 117, 138, 235, 251, 238, + 117, 138, 241, 49, 248, 205, 251, 6, 206, 107, 224, 184, 235, 251, 160, + 138, 251, 4, 160, 205, 186, 217, 34, 206, 107, 228, 133, 217, 117, 228, + 133, 76, 217, 34, 251, 4, 160, 138, 246, 80, 238, 121, 238, 122, 246, 79, + 213, 27, 228, 118, 160, 138, 213, 27, 160, 138, 243, 9, 138, 238, 85, + 238, 120, 138, 208, 110, 238, 121, 241, 137, 160, 138, 160, 205, 186, + 247, 235, 241, 156, 222, 73, 247, 234, 214, 77, 160, 138, 218, 215, 160, + 138, 232, 223, 138, 218, 215, 232, 223, 138, 208, 54, 238, 117, 138, 224, + 241, 217, 34, 160, 138, 235, 67, 217, 34, 160, 138, 224, 241, 119, 160, + 138, 235, 67, 119, 160, 138, 224, 241, 247, 247, 218, 215, 160, 138, 235, + 67, 247, 247, 218, 215, 160, 138, 221, 35, 224, 240, 221, 35, 235, 66, + 248, 205, 218, 215, 238, 117, 138, 218, 215, 224, 240, 218, 215, 235, 66, + 220, 26, 224, 241, 218, 224, 160, 138, 220, 26, 235, 67, 218, 224, 160, + 138, 224, 241, 217, 34, 238, 117, 138, 235, 67, 217, 34, 238, 117, 138, + 220, 26, 224, 241, 218, 224, 238, 117, 138, 220, 26, 235, 67, 218, 224, + 238, 117, 138, 224, 241, 217, 34, 235, 66, 235, 67, 217, 34, 224, 240, + 220, 26, 224, 241, 218, 224, 235, 66, 220, 26, 235, 67, 218, 224, 224, + 240, 215, 28, 207, 250, 215, 29, 217, 34, 160, 138, 207, 251, 217, 34, + 160, 138, 215, 29, 217, 34, 238, 117, 138, 207, 251, 217, 34, 238, 117, + 138, 240, 202, 218, 215, 215, 31, 240, 202, 218, 215, 207, 252, 208, 3, + 217, 117, 207, 212, 217, 117, 218, 215, 35, 208, 3, 217, 117, 218, 215, + 35, 207, 212, 217, 117, 208, 3, 76, 217, 34, 160, 138, 207, 212, 76, 217, + 34, 160, 138, 220, 26, 35, 208, 3, 76, 218, 224, 160, 138, 220, 26, 35, + 207, 212, 76, 218, 224, 160, 138, 208, 3, 76, 3, 218, 215, 160, 138, 207, + 212, 76, 3, 218, 215, 160, 138, 221, 16, 221, 17, 221, 18, 221, 17, 203, + 241, 52, 228, 133, 217, 117, 52, 217, 25, 217, 117, 52, 228, 133, 76, + 217, 34, 160, 138, 52, 217, 25, 76, 217, 34, 160, 138, 52, 247, 144, 52, + 242, 202, 44, 215, 113, 44, 221, 156, 44, 205, 232, 44, 240, 235, 209, + 75, 44, 73, 217, 43, 44, 213, 27, 217, 43, 44, 250, 166, 217, 43, 44, + 238, 121, 44, 241, 244, 95, 215, 113, 95, 221, 156, 95, 205, 232, 95, 73, + 217, 43, 51, 207, 17, 49, 207, 17, 127, 207, 17, 115, 207, 17, 250, 169, + 221, 131, 205, 61, 236, 248, 205, 83, 83, 249, 77, 51, 204, 184, 53, 83, + 249, 77, 53, 51, 204, 184, 240, 202, 218, 215, 214, 238, 218, 215, 205, + 61, 240, 202, 218, 215, 236, 249, 220, 28, 53, 83, 249, 77, 53, 51, 204, + 184, 215, 29, 203, 253, 213, 149, 207, 251, 203, 253, 213, 149, 218, 221, + 208, 16, 217, 117, 243, 44, 250, 189, 218, 221, 208, 15, 218, 221, 208, + 16, 76, 217, 34, 160, 138, 243, 44, 250, 189, 218, 221, 208, 16, 217, 34, + 160, 138, 217, 25, 217, 117, 228, 133, 217, 117, 221, 23, 234, 96, 243, + 55, 222, 125, 228, 66, 200, 155, 220, 132, 218, 223, 51, 251, 71, 3, 250, + 236, 51, 205, 98, 220, 213, 224, 98, 251, 79, 220, 213, 224, 98, 217, 33, + 220, 213, 228, 55, 220, 213, 203, 241, 241, 65, 217, 43, 73, 217, 43, + 208, 110, 217, 43, 240, 235, 205, 232, 248, 79, 49, 218, 221, 237, 179, + 210, 166, 215, 1, 51, 218, 221, 237, 179, 210, 166, 215, 1, 49, 210, 166, + 215, 1, 51, 210, 166, 215, 1, 213, 105, 205, 241, 238, 121, 242, 196, + 224, 98, 217, 33, 242, 196, 224, 98, 251, 79, 53, 208, 2, 53, 207, 211, + 53, 228, 55, 53, 203, 241, 215, 140, 160, 26, 216, 121, 138, 224, 241, 3, + 240, 182, 235, 67, 3, 240, 182, 202, 246, 221, 35, 224, 240, 202, 246, + 221, 35, 235, 66, 224, 241, 160, 205, 186, 217, 34, 235, 66, 235, 67, + 160, 205, 186, 217, 34, 224, 240, 160, 205, 186, 217, 34, 224, 240, 160, + 205, 186, 217, 34, 235, 66, 160, 205, 186, 217, 34, 215, 28, 160, 205, + 186, 217, 34, 207, 250, 240, 202, 218, 215, 215, 32, 217, 34, 238, 123, + 240, 202, 218, 215, 207, 253, 217, 34, 238, 123, 218, 215, 52, 228, 133, + 76, 217, 34, 160, 138, 218, 215, 52, 217, 25, 76, 217, 34, 160, 138, 52, + 228, 133, 76, 217, 34, 218, 215, 160, 138, 52, 217, 25, 76, 217, 34, 218, + 215, 160, 138, 224, 241, 247, 247, 218, 215, 238, 117, 138, 235, 67, 247, + 247, 218, 215, 238, 117, 138, 215, 29, 247, 247, 218, 215, 238, 117, 138, + 207, 251, 247, 247, 218, 215, 238, 117, 138, 218, 215, 218, 221, 208, 16, + 217, 117, 240, 202, 218, 215, 243, 46, 250, 189, 218, 221, 208, 15, 218, + 215, 218, 221, 208, 16, 76, 217, 34, 160, 138, 240, 202, 218, 215, 243, + 46, 250, 189, 218, 221, 208, 16, 217, 34, 238, 123, 83, 238, 195, 221, + 202, 233, 177, 238, 195, 115, 51, 241, 71, 238, 195, 127, 51, 241, 71, + 238, 195, 238, 202, 76, 3, 168, 233, 177, 97, 238, 202, 76, 3, 83, 249, + 77, 250, 156, 238, 171, 76, 233, 177, 97, 4, 238, 202, 76, 3, 83, 249, + 77, 250, 156, 238, 171, 76, 233, 177, 97, 238, 202, 76, 3, 73, 56, 238, + 202, 76, 3, 216, 246, 4, 238, 202, 76, 3, 216, 246, 238, 202, 76, 3, 203, + 251, 238, 202, 76, 3, 120, 233, 177, 208, 34, 243, 44, 3, 168, 233, 177, + 97, 243, 44, 3, 83, 249, 77, 250, 156, 238, 171, 76, 233, 177, 97, 4, + 243, 44, 3, 83, 249, 77, 250, 156, 238, 171, 76, 233, 177, 97, 243, 44, + 3, 216, 246, 4, 243, 44, 3, 216, 246, 199, 158, 218, 213, 249, 114, 222, + 43, 241, 66, 54, 238, 204, 48, 233, 109, 115, 250, 202, 127, 250, 202, + 214, 251, 216, 8, 201, 74, 224, 176, 49, 247, 64, 51, 247, 64, 49, 237, + 31, 51, 237, 31, 248, 93, 51, 242, 236, 248, 93, 49, 242, 236, 205, 158, + 51, 242, 236, 205, 158, 49, 242, 236, 213, 105, 218, 215, 54, 52, 224, + 49, 250, 236, 211, 183, 211, 191, 206, 176, 213, 179, 215, 70, 228, 99, + 202, 222, 208, 193, 215, 134, 76, 228, 65, 54, 204, 185, 218, 215, 54, + 201, 84, 233, 111, 205, 158, 49, 243, 15, 205, 158, 51, 243, 15, 248, 93, + 49, 243, 15, 248, 93, 51, 243, 15, 205, 158, 167, 228, 69, 248, 93, 167, + 228, 69, 236, 196, 209, 48, 115, 250, 203, 248, 206, 120, 233, 177, 249, + 66, 217, 36, 226, 214, 238, 113, 205, 186, 206, 107, 213, 46, 200, 196, + 228, 118, 35, 213, 176, 248, 78, 226, 212, 225, 23, 251, 71, 159, 213, + 41, 251, 71, 159, 238, 113, 205, 186, 206, 107, 225, 28, 248, 217, 213, + 26, 242, 163, 251, 125, 250, 211, 207, 114, 205, 143, 212, 154, 241, 28, + 217, 26, 243, 59, 206, 234, 209, 61, 243, 5, 243, 4, 251, 22, 236, 179, + 16, 233, 16, 251, 22, 236, 179, 16, 208, 184, 214, 94, 251, 22, 236, 179, + 16, 214, 95, 238, 123, 251, 22, 236, 179, 16, 214, 95, 240, 241, 251, 22, + 236, 179, 16, 214, 95, 241, 64, 251, 22, 236, 179, 16, 214, 95, 227, 153, + 251, 22, 236, 179, 16, 214, 95, 246, 155, 251, 22, 236, 179, 16, 246, + 156, 208, 84, 251, 22, 236, 179, 16, 246, 156, 227, 153, 251, 22, 236, + 179, 16, 209, 76, 148, 251, 22, 236, 179, 16, 249, 125, 148, 251, 22, + 236, 179, 16, 214, 95, 209, 75, 251, 22, 236, 179, 16, 214, 95, 249, 124, + 251, 22, 236, 179, 16, 214, 95, 224, 240, 251, 22, 236, 179, 16, 214, 95, + 235, 66, 251, 22, 236, 179, 16, 98, 203, 80, 251, 22, 236, 179, 16, 87, + 203, 80, 251, 22, 236, 179, 16, 214, 95, 98, 48, 251, 22, 236, 179, 16, + 214, 95, 87, 48, 251, 22, 236, 179, 16, 246, 156, 249, 124, 251, 22, 236, + 179, 16, 127, 207, 18, 203, 251, 251, 22, 236, 179, 16, 241, 137, 208, + 84, 251, 22, 236, 179, 16, 214, 95, 127, 247, 129, 251, 22, 236, 179, 16, + 214, 95, 241, 136, 251, 22, 236, 179, 16, 127, 207, 18, 227, 153, 251, + 22, 236, 179, 16, 182, 203, 80, 251, 22, 236, 179, 16, 214, 95, 182, 48, + 251, 22, 236, 179, 16, 115, 207, 18, 216, 246, 251, 22, 236, 179, 16, + 241, 149, 208, 84, 251, 22, 236, 179, 16, 214, 95, 115, 247, 129, 251, + 22, 236, 179, 16, 214, 95, 241, 148, 251, 22, 236, 179, 16, 115, 207, 18, + 227, 153, 251, 22, 236, 179, 16, 191, 203, 80, 251, 22, 236, 179, 16, + 214, 95, 191, 48, 251, 22, 236, 179, 16, 214, 62, 203, 251, 251, 22, 236, + 179, 16, 241, 137, 203, 251, 251, 22, 236, 179, 16, 241, 65, 203, 251, + 251, 22, 236, 179, 16, 227, 154, 203, 251, 251, 22, 236, 179, 16, 246, + 156, 203, 251, 251, 22, 236, 179, 16, 115, 210, 6, 227, 153, 251, 22, + 236, 179, 16, 214, 62, 214, 94, 251, 22, 236, 179, 16, 246, 156, 208, + 109, 251, 22, 236, 179, 16, 214, 95, 246, 79, 251, 22, 236, 179, 16, 115, + 207, 18, 241, 74, 251, 22, 236, 179, 16, 241, 149, 241, 74, 251, 22, 236, + 179, 16, 208, 110, 241, 74, 251, 22, 236, 179, 16, 227, 154, 241, 74, + 251, 22, 236, 179, 16, 246, 156, 241, 74, 251, 22, 236, 179, 16, 127, + 210, 6, 208, 84, 251, 22, 236, 179, 16, 49, 210, 6, 208, 84, 251, 22, + 236, 179, 16, 205, 241, 241, 74, 251, 22, 236, 179, 16, 235, 67, 241, 74, + 251, 22, 236, 179, 16, 246, 71, 148, 251, 22, 236, 179, 16, 241, 149, + 205, 240, 251, 22, 236, 179, 16, 199, 26, 251, 22, 236, 179, 16, 208, 85, + 205, 240, 251, 22, 236, 179, 16, 210, 168, 203, 251, 251, 22, 236, 179, + 16, 214, 95, 218, 215, 238, 123, 251, 22, 236, 179, 16, 214, 95, 214, 78, + 251, 22, 236, 179, 16, 127, 247, 130, 205, 240, 251, 22, 236, 179, 16, + 115, 247, 130, 205, 240, 251, 22, 236, 179, 16, 228, 41, 251, 22, 236, + 179, 16, 213, 90, 251, 22, 236, 179, 16, 217, 83, 251, 22, 236, 179, 16, + 251, 113, 203, 251, 251, 22, 236, 179, 16, 238, 125, 203, 251, 251, 22, + 236, 179, 16, 228, 42, 203, 251, 251, 22, 236, 179, 16, 217, 84, 203, + 251, 251, 22, 236, 179, 16, 251, 112, 218, 215, 247, 7, 81, 51, 251, 71, + 3, 191, 199, 27, 48, 209, 232, 176, 248, 78, 248, 231, 99, 83, 224, 177, + 3, 101, 240, 182, 228, 75, 99, 243, 39, 203, 249, 99, 241, 1, 203, 249, + 99, 238, 183, 99, 243, 74, 99, 64, 52, 3, 247, 56, 83, 224, 176, 238, + 155, 99, 251, 104, 226, 215, 99, 234, 109, 99, 44, 233, 177, 249, 77, 3, + 218, 212, 44, 205, 99, 239, 167, 248, 46, 246, 156, 3, 218, 218, 48, 203, + 247, 99, 221, 92, 99, 233, 29, 99, 217, 52, 234, 246, 99, 217, 52, 225, + 191, 99, 216, 98, 99, 216, 97, 99, 241, 10, 242, 194, 16, 236, 242, 105, + 209, 21, 99, 251, 22, 236, 179, 16, 214, 94, 241, 168, 210, 155, 226, + 215, 99, 215, 16, 216, 195, 220, 2, 216, 195, 215, 11, 211, 210, 99, 246, + 127, 211, 210, 99, 49, 216, 116, 203, 225, 117, 49, 216, 116, 238, 31, + 49, 216, 116, 224, 54, 117, 51, 216, 116, 203, 225, 117, 51, 216, 116, + 238, 31, 51, 216, 116, 224, 54, 117, 49, 52, 248, 70, 203, 225, 243, 15, + 49, 52, 248, 70, 238, 31, 49, 52, 248, 70, 224, 54, 243, 15, 51, 52, 248, + 70, 203, 225, 243, 15, 51, 52, 248, 70, 238, 31, 51, 52, 248, 70, 224, + 54, 243, 15, 49, 242, 196, 248, 70, 203, 225, 117, 49, 242, 196, 248, 70, + 101, 215, 196, 49, 242, 196, 248, 70, 224, 54, 117, 242, 196, 248, 70, + 238, 31, 51, 242, 196, 248, 70, 203, 225, 117, 51, 242, 196, 248, 70, + 101, 215, 196, 51, 242, 196, 248, 70, 224, 54, 117, 228, 70, 238, 31, + 233, 177, 224, 177, 238, 31, 203, 225, 49, 217, 34, 224, 54, 51, 242, + 196, 248, 70, 211, 192, 203, 225, 51, 217, 34, 224, 54, 49, 242, 196, + 248, 70, 211, 192, 207, 232, 205, 157, 207, 232, 248, 92, 205, 158, 52, + 159, 248, 93, 52, 159, 248, 93, 52, 248, 70, 119, 205, 158, 52, 159, 42, + 16, 248, 92, 49, 83, 100, 224, 176, 51, 83, 100, 224, 176, 233, 177, 211, + 228, 224, 175, 233, 177, 211, 228, 224, 174, 233, 177, 211, 228, 224, + 173, 233, 177, 211, 228, 224, 172, 241, 128, 16, 162, 83, 26, 205, 158, + 213, 46, 241, 128, 16, 162, 83, 26, 248, 93, 213, 46, 241, 128, 16, 162, + 83, 3, 246, 155, 241, 128, 16, 162, 127, 26, 233, 177, 3, 246, 155, 241, + 128, 16, 162, 115, 26, 233, 177, 3, 246, 155, 241, 128, 16, 162, 83, 3, + 205, 98, 241, 128, 16, 162, 127, 26, 233, 177, 3, 205, 98, 241, 128, 16, + 162, 115, 26, 233, 177, 3, 205, 98, 241, 128, 16, 162, 83, 26, 201, 77, + 241, 128, 16, 162, 127, 26, 233, 177, 3, 201, 77, 241, 128, 16, 162, 115, + 26, 233, 177, 3, 201, 77, 241, 128, 16, 162, 127, 26, 233, 176, 241, 128, + 16, 162, 115, 26, 233, 176, 241, 128, 16, 162, 83, 26, 205, 158, 225, 28, + 241, 128, 16, 162, 83, 26, 248, 93, 225, 28, 52, 236, 255, 213, 110, 99, + 238, 218, 99, 83, 224, 177, 238, 31, 222, 14, 248, 57, 222, 14, 168, 119, + 209, 249, 222, 14, 209, 250, 119, 224, 89, 222, 14, 168, 119, 120, 209, + 235, 222, 14, 120, 209, 236, 119, 224, 89, 222, 14, 120, 209, 236, 227, + 162, 222, 14, 205, 79, 222, 14, 206, 138, 222, 14, 216, 35, 239, 18, 235, + 59, 236, 173, 205, 158, 216, 115, 248, 93, 216, 115, 205, 158, 242, 196, + 159, 248, 93, 242, 196, 159, 205, 158, 205, 146, 210, 55, 159, 248, 93, + 205, 146, 210, 55, 159, 64, 205, 114, 248, 217, 213, 27, 3, 246, 155, + 208, 66, 237, 42, 251, 255, 242, 193, 238, 203, 228, 55, 241, 168, 238, + 35, 99, 63, 213, 41, 53, 205, 98, 63, 225, 23, 53, 205, 98, 63, 203, 227, + 53, 205, 98, 63, 239, 166, 53, 205, 98, 63, 213, 41, 53, 205, 99, 3, 83, + 148, 63, 225, 23, 53, 205, 99, 3, 83, 148, 63, 213, 41, 205, 99, 3, 53, + 83, 148, 251, 146, 246, 113, 208, 73, 205, 233, 246, 113, 233, 112, 3, + 237, 22, 212, 11, 63, 222, 66, 225, 23, 205, 98, 63, 222, 66, 213, 41, + 205, 98, 63, 222, 66, 203, 227, 205, 98, 63, 222, 66, 239, 166, 205, 98, + 53, 83, 148, 63, 52, 36, 208, 76, 63, 246, 156, 36, 213, 180, 215, 52, + 99, 215, 52, 217, 77, 99, 215, 52, 217, 79, 99, 215, 52, 209, 72, 99, 16, + 36, 218, 97, 16, 36, 208, 105, 76, 234, 133, 16, 36, 208, 105, 76, 206, + 126, 16, 36, 238, 171, 76, 206, 126, 16, 36, 238, 171, 76, 205, 118, 16, + 36, 238, 158, 16, 36, 251, 243, 16, 36, 248, 230, 16, 36, 249, 123, 16, + 36, 233, 177, 207, 19, 16, 36, 224, 177, 237, 138, 16, 36, 83, 207, 19, + 16, 36, 236, 242, 237, 138, 16, 36, 247, 121, 213, 109, 16, 36, 210, 29, + 216, 254, 16, 36, 210, 29, 228, 117, 16, 36, 241, 239, 224, 167, 238, 96, + 16, 36, 241, 107, 243, 34, 102, 16, 36, 241, 107, 243, 34, 105, 16, 36, + 241, 107, 243, 34, 147, 16, 36, 241, 107, 243, 34, 149, 16, 36, 189, 251, + 243, 16, 36, 207, 109, 228, 180, 16, 36, 238, 171, 76, 205, 119, 248, + 134, 16, 36, 247, 156, 16, 36, 238, 171, 76, 222, 65, 16, 36, 208, 0, 16, + 36, 238, 96, 16, 36, 237, 97, 210, 154, 16, 36, 235, 58, 210, 154, 16, + 36, 213, 181, 210, 154, 16, 36, 203, 240, 210, 154, 16, 36, 208, 244, 16, + 36, 241, 146, 248, 138, 99, 176, 248, 78, 16, 36, 220, 5, 16, 36, 241, + 147, 236, 242, 105, 16, 36, 208, 1, 236, 242, 105, 217, 131, 117, 217, + 131, 247, 32, 217, 131, 236, 245, 217, 131, 228, 50, 236, 245, 217, 131, + 248, 227, 248, 33, 217, 131, 248, 86, 206, 7, 217, 131, 248, 67, 249, 82, + 232, 222, 217, 131, 251, 91, 76, 247, 6, 217, 131, 241, 244, 217, 131, + 242, 182, 251, 247, 218, 95, 217, 131, 53, 249, 124, 44, 17, 102, 44, 17, + 105, 44, 17, 147, 44, 17, 149, 44, 17, 164, 44, 17, 187, 44, 17, 210, + 135, 44, 17, 192, 44, 17, 219, 113, 44, 41, 206, 166, 44, 41, 238, 199, + 44, 41, 204, 164, 44, 41, 206, 69, 44, 41, 236, 223, 44, 41, 237, 108, + 44, 41, 209, 100, 44, 41, 210, 132, 44, 41, 238, 229, 44, 41, 219, 110, + 44, 41, 204, 159, 106, 17, 102, 106, 17, 105, 106, 17, 147, 106, 17, 149, + 106, 17, 164, 106, 17, 187, 106, 17, 210, 135, 106, 17, 192, 106, 17, + 219, 113, 106, 41, 206, 166, 106, 41, 238, 199, 106, 41, 204, 164, 106, + 41, 206, 69, 106, 41, 236, 223, 106, 41, 237, 108, 106, 41, 209, 100, + 106, 41, 210, 132, 106, 41, 238, 229, 106, 41, 219, 110, 106, 41, 204, + 159, 17, 112, 236, 183, 208, 76, 17, 120, 236, 183, 208, 76, 17, 126, + 236, 183, 208, 76, 17, 236, 229, 236, 183, 208, 76, 17, 237, 61, 236, + 183, 208, 76, 17, 209, 106, 236, 183, 208, 76, 17, 210, 136, 236, 183, + 208, 76, 17, 238, 232, 236, 183, 208, 76, 17, 219, 114, 236, 183, 208, + 76, 41, 206, 167, 236, 183, 208, 76, 41, 238, 200, 236, 183, 208, 76, 41, + 204, 165, 236, 183, 208, 76, 41, 206, 70, 236, 183, 208, 76, 41, 236, + 224, 236, 183, 208, 76, 41, 237, 109, 236, 183, 208, 76, 41, 209, 101, + 236, 183, 208, 76, 41, 210, 133, 236, 183, 208, 76, 41, 238, 230, 236, + 183, 208, 76, 41, 219, 111, 236, 183, 208, 76, 41, 204, 160, 236, 183, + 208, 76, 106, 8, 4, 1, 62, 106, 8, 4, 1, 250, 103, 106, 8, 4, 1, 247, + 223, 106, 8, 4, 1, 242, 153, 106, 8, 4, 1, 72, 106, 8, 4, 1, 238, 5, 106, + 8, 4, 1, 236, 156, 106, 8, 4, 1, 234, 247, 106, 8, 4, 1, 70, 106, 8, 4, + 1, 227, 251, 106, 8, 4, 1, 227, 118, 106, 8, 4, 1, 156, 106, 8, 4, 1, + 223, 243, 106, 8, 4, 1, 220, 214, 106, 8, 4, 1, 74, 106, 8, 4, 1, 216, + 226, 106, 8, 4, 1, 214, 167, 106, 8, 4, 1, 146, 106, 8, 4, 1, 212, 122, + 106, 8, 4, 1, 207, 83, 106, 8, 4, 1, 66, 106, 8, 4, 1, 203, 168, 106, 8, + 4, 1, 201, 147, 106, 8, 4, 1, 200, 195, 106, 8, 4, 1, 200, 123, 106, 8, + 4, 1, 199, 157, 44, 8, 6, 1, 62, 44, 8, 6, 1, 250, 103, 44, 8, 6, 1, 247, + 223, 44, 8, 6, 1, 242, 153, 44, 8, 6, 1, 72, 44, 8, 6, 1, 238, 5, 44, 8, + 6, 1, 236, 156, 44, 8, 6, 1, 234, 247, 44, 8, 6, 1, 70, 44, 8, 6, 1, 227, + 251, 44, 8, 6, 1, 227, 118, 44, 8, 6, 1, 156, 44, 8, 6, 1, 223, 243, 44, + 8, 6, 1, 220, 214, 44, 8, 6, 1, 74, 44, 8, 6, 1, 216, 226, 44, 8, 6, 1, + 214, 167, 44, 8, 6, 1, 146, 44, 8, 6, 1, 212, 122, 44, 8, 6, 1, 207, 83, + 44, 8, 6, 1, 66, 44, 8, 6, 1, 203, 168, 44, 8, 6, 1, 201, 147, 44, 8, 6, + 1, 200, 195, 44, 8, 6, 1, 200, 123, 44, 8, 6, 1, 199, 157, 44, 8, 4, 1, + 62, 44, 8, 4, 1, 250, 103, 44, 8, 4, 1, 247, 223, 44, 8, 4, 1, 242, 153, + 44, 8, 4, 1, 72, 44, 8, 4, 1, 238, 5, 44, 8, 4, 1, 236, 156, 44, 8, 4, 1, + 234, 247, 44, 8, 4, 1, 70, 44, 8, 4, 1, 227, 251, 44, 8, 4, 1, 227, 118, + 44, 8, 4, 1, 156, 44, 8, 4, 1, 223, 243, 44, 8, 4, 1, 220, 214, 44, 8, 4, + 1, 74, 44, 8, 4, 1, 216, 226, 44, 8, 4, 1, 214, 167, 44, 8, 4, 1, 146, + 44, 8, 4, 1, 212, 122, 44, 8, 4, 1, 207, 83, 44, 8, 4, 1, 66, 44, 8, 4, + 1, 203, 168, 44, 8, 4, 1, 201, 147, 44, 8, 4, 1, 200, 195, 44, 8, 4, 1, + 200, 123, 44, 8, 4, 1, 199, 157, 44, 17, 199, 81, 189, 44, 41, 238, 199, + 189, 44, 41, 204, 164, 189, 44, 41, 206, 69, 189, 44, 41, 236, 223, 189, + 44, 41, 237, 108, 189, 44, 41, 209, 100, 189, 44, 41, 210, 132, 189, 44, + 41, 238, 229, 189, 44, 41, 219, 110, 189, 44, 41, 204, 159, 53, 44, 17, + 102, 53, 44, 17, 105, 53, 44, 17, 147, 53, 44, 17, 149, 53, 44, 17, 164, + 53, 44, 17, 187, 53, 44, 17, 210, 135, 53, 44, 17, 192, 53, 44, 17, 219, + 113, 53, 44, 41, 206, 166, 189, 44, 17, 199, 81, 100, 121, 162, 233, 176, + 100, 121, 80, 233, 176, 100, 121, 162, 203, 42, 100, 121, 80, 203, 42, + 100, 121, 162, 205, 83, 241, 245, 233, 176, 100, 121, 80, 205, 83, 241, + 245, 233, 176, 100, 121, 162, 205, 83, 241, 245, 203, 42, 100, 121, 80, + 205, 83, 241, 245, 203, 42, 100, 121, 162, 214, 90, 241, 245, 233, 176, + 100, 121, 80, 214, 90, 241, 245, 233, 176, 100, 121, 162, 214, 90, 241, + 245, 203, 42, 100, 121, 80, 214, 90, 241, 245, 203, 42, 100, 121, 162, + 127, 26, 213, 46, 100, 121, 127, 162, 26, 51, 234, 121, 100, 121, 127, + 80, 26, 51, 224, 196, 100, 121, 80, 127, 26, 213, 46, 100, 121, 162, 127, + 26, 225, 28, 100, 121, 127, 162, 26, 49, 234, 121, 100, 121, 127, 80, 26, + 49, 224, 196, 100, 121, 80, 127, 26, 225, 28, 100, 121, 162, 115, 26, + 213, 46, 100, 121, 115, 162, 26, 51, 234, 121, 100, 121, 115, 80, 26, 51, + 224, 196, 100, 121, 80, 115, 26, 213, 46, 100, 121, 162, 115, 26, 225, + 28, 100, 121, 115, 162, 26, 49, 234, 121, 100, 121, 115, 80, 26, 49, 224, + 196, 100, 121, 80, 115, 26, 225, 28, 100, 121, 162, 83, 26, 213, 46, 100, + 121, 83, 162, 26, 51, 234, 121, 100, 121, 115, 80, 26, 51, 127, 224, 196, + 100, 121, 127, 80, 26, 51, 115, 224, 196, 100, 121, 83, 80, 26, 51, 224, + 196, 100, 121, 127, 162, 26, 51, 115, 234, 121, 100, 121, 115, 162, 26, + 51, 127, 234, 121, 100, 121, 80, 83, 26, 213, 46, 100, 121, 162, 83, 26, + 225, 28, 100, 121, 83, 162, 26, 49, 234, 121, 100, 121, 115, 80, 26, 49, + 127, 224, 196, 100, 121, 127, 80, 26, 49, 115, 224, 196, 100, 121, 83, + 80, 26, 49, 224, 196, 100, 121, 127, 162, 26, 49, 115, 234, 121, 100, + 121, 115, 162, 26, 49, 127, 234, 121, 100, 121, 80, 83, 26, 225, 28, 100, + 121, 162, 127, 26, 233, 176, 100, 121, 49, 80, 26, 51, 127, 224, 196, + 100, 121, 51, 80, 26, 49, 127, 224, 196, 100, 121, 127, 162, 26, 233, + 177, 234, 121, 100, 121, 127, 80, 26, 233, 177, 224, 196, 100, 121, 51, + 162, 26, 49, 127, 234, 121, 100, 121, 49, 162, 26, 51, 127, 234, 121, + 100, 121, 80, 127, 26, 233, 176, 100, 121, 162, 115, 26, 233, 176, 100, + 121, 49, 80, 26, 51, 115, 224, 196, 100, 121, 51, 80, 26, 49, 115, 224, + 196, 100, 121, 115, 162, 26, 233, 177, 234, 121, 100, 121, 115, 80, 26, + 233, 177, 224, 196, 100, 121, 51, 162, 26, 49, 115, 234, 121, 100, 121, + 49, 162, 26, 51, 115, 234, 121, 100, 121, 80, 115, 26, 233, 176, 100, + 121, 162, 83, 26, 233, 176, 100, 121, 49, 80, 26, 51, 83, 224, 196, 100, + 121, 51, 80, 26, 49, 83, 224, 196, 100, 121, 83, 162, 26, 233, 177, 234, + 121, 100, 121, 115, 80, 26, 127, 233, 177, 224, 196, 100, 121, 127, 80, + 26, 115, 233, 177, 224, 196, 100, 121, 83, 80, 26, 233, 177, 224, 196, + 100, 121, 49, 115, 80, 26, 51, 127, 224, 196, 100, 121, 51, 115, 80, 26, + 49, 127, 224, 196, 100, 121, 49, 127, 80, 26, 51, 115, 224, 196, 100, + 121, 51, 127, 80, 26, 49, 115, 224, 196, 100, 121, 127, 162, 26, 115, + 233, 177, 234, 121, 100, 121, 115, 162, 26, 127, 233, 177, 234, 121, 100, + 121, 51, 162, 26, 49, 83, 234, 121, 100, 121, 49, 162, 26, 51, 83, 234, + 121, 100, 121, 80, 83, 26, 233, 176, 100, 121, 162, 53, 241, 245, 233, + 176, 100, 121, 80, 53, 241, 245, 233, 176, 100, 121, 162, 53, 241, 245, + 203, 42, 100, 121, 80, 53, 241, 245, 203, 42, 100, 121, 53, 233, 176, + 100, 121, 53, 203, 42, 100, 121, 127, 209, 139, 26, 51, 239, 175, 100, + 121, 127, 53, 26, 51, 209, 138, 100, 121, 53, 127, 26, 213, 46, 100, 121, + 127, 209, 139, 26, 49, 239, 175, 100, 121, 127, 53, 26, 49, 209, 138, + 100, 121, 53, 127, 26, 225, 28, 100, 121, 115, 209, 139, 26, 51, 239, + 175, 100, 121, 115, 53, 26, 51, 209, 138, 100, 121, 53, 115, 26, 213, 46, + 100, 121, 115, 209, 139, 26, 49, 239, 175, 100, 121, 115, 53, 26, 49, + 209, 138, 100, 121, 53, 115, 26, 225, 28, 100, 121, 83, 209, 139, 26, 51, + 239, 175, 100, 121, 83, 53, 26, 51, 209, 138, 100, 121, 53, 83, 26, 213, + 46, 100, 121, 83, 209, 139, 26, 49, 239, 175, 100, 121, 83, 53, 26, 49, + 209, 138, 100, 121, 53, 83, 26, 225, 28, 100, 121, 127, 209, 139, 26, + 233, 177, 239, 175, 100, 121, 127, 53, 26, 233, 177, 209, 138, 100, 121, + 53, 127, 26, 233, 176, 100, 121, 115, 209, 139, 26, 233, 177, 239, 175, + 100, 121, 115, 53, 26, 233, 177, 209, 138, 100, 121, 53, 115, 26, 233, + 176, 100, 121, 83, 209, 139, 26, 233, 177, 239, 175, 100, 121, 83, 53, + 26, 233, 177, 209, 138, 100, 121, 53, 83, 26, 233, 176, 100, 121, 162, + 250, 237, 127, 26, 213, 46, 100, 121, 162, 250, 237, 127, 26, 225, 28, + 100, 121, 162, 250, 237, 115, 26, 225, 28, 100, 121, 162, 250, 237, 115, + 26, 213, 46, 100, 121, 162, 241, 71, 203, 225, 51, 205, 186, 224, 54, + 225, 28, 100, 121, 162, 241, 71, 203, 225, 49, 205, 186, 224, 54, 213, + 46, 100, 121, 162, 241, 71, 242, 234, 100, 121, 162, 225, 28, 100, 121, + 162, 203, 228, 100, 121, 162, 213, 46, 100, 121, 162, 239, 167, 100, 121, + 80, 225, 28, 100, 121, 80, 203, 228, 100, 121, 80, 213, 46, 100, 121, 80, + 239, 167, 100, 121, 162, 49, 26, 80, 213, 46, 100, 121, 162, 115, 26, 80, + 239, 167, 100, 121, 80, 49, 26, 162, 213, 46, 100, 121, 80, 115, 26, 162, + 239, 167, 203, 225, 167, 248, 134, 224, 54, 112, 238, 228, 248, 134, 224, + 54, 112, 214, 88, 248, 134, 224, 54, 126, 238, 226, 248, 134, 224, 54, + 167, 248, 134, 224, 54, 237, 61, 238, 226, 248, 134, 224, 54, 126, 214, + 86, 248, 134, 224, 54, 210, 136, 238, 226, 248, 134, 236, 183, 248, 134, + 49, 210, 136, 238, 226, 248, 134, 49, 126, 214, 86, 248, 134, 49, 237, + 61, 238, 226, 248, 134, 49, 167, 248, 134, 49, 126, 238, 226, 248, 134, + 49, 112, 214, 88, 248, 134, 49, 112, 238, 228, 248, 134, 51, 167, 248, + 134, 162, 210, 103, 222, 66, 210, 103, 241, 250, 210, 103, 203, 225, 112, + 238, 228, 248, 134, 51, 112, 238, 228, 248, 134, 214, 92, 224, 54, 225, + 28, 214, 92, 224, 54, 213, 46, 214, 92, 203, 225, 225, 28, 214, 92, 203, + 225, 49, 26, 224, 54, 49, 26, 224, 54, 213, 46, 214, 92, 203, 225, 49, + 26, 224, 54, 213, 46, 214, 92, 203, 225, 49, 26, 203, 225, 51, 26, 224, + 54, 225, 28, 214, 92, 203, 225, 49, 26, 203, 225, 51, 26, 224, 54, 213, + 46, 214, 92, 203, 225, 213, 46, 214, 92, 203, 225, 51, 26, 224, 54, 225, + 28, 214, 92, 203, 225, 51, 26, 224, 54, 49, 26, 224, 54, 213, 46, 63, + 208, 193, 64, 208, 193, 64, 52, 3, 212, 219, 243, 14, 64, 52, 243, 45, + 63, 4, 208, 193, 52, 3, 233, 177, 237, 95, 52, 3, 83, 237, 95, 52, 3, + 217, 17, 242, 229, 237, 95, 52, 3, 203, 225, 49, 205, 186, 224, 54, 51, + 237, 95, 52, 3, 203, 225, 51, 205, 186, 224, 54, 49, 237, 95, 52, 3, 241, + 71, 242, 229, 237, 95, 63, 4, 208, 193, 64, 4, 208, 193, 63, 213, 175, + 64, 213, 175, 63, 83, 213, 175, 64, 83, 213, 175, 63, 216, 119, 64, 216, + 119, 63, 203, 227, 205, 98, 64, 203, 227, 205, 98, 63, 203, 227, 4, 205, + 98, 64, 203, 227, 4, 205, 98, 63, 213, 41, 205, 98, 64, 213, 41, 205, 98, + 63, 213, 41, 4, 205, 98, 64, 213, 41, 4, 205, 98, 63, 213, 41, 215, 97, + 64, 213, 41, 215, 97, 63, 239, 166, 205, 98, 64, 239, 166, 205, 98, 63, + 239, 166, 4, 205, 98, 64, 239, 166, 4, 205, 98, 63, 225, 23, 205, 98, 64, + 225, 23, 205, 98, 63, 225, 23, 4, 205, 98, 64, 225, 23, 4, 205, 98, 63, + 225, 23, 215, 97, 64, 225, 23, 215, 97, 63, 241, 64, 64, 241, 64, 64, + 241, 65, 243, 45, 63, 4, 241, 64, 237, 70, 224, 49, 64, 246, 155, 239, + 180, 246, 155, 246, 156, 3, 83, 237, 95, 248, 16, 63, 246, 155, 246, 156, + 3, 49, 167, 248, 144, 246, 156, 3, 51, 167, 248, 144, 246, 156, 3, 224, + 54, 167, 248, 144, 246, 156, 3, 203, 225, 167, 248, 144, 246, 156, 3, + 203, 225, 51, 214, 92, 248, 144, 246, 156, 3, 251, 125, 247, 247, 203, + 225, 49, 214, 92, 248, 144, 49, 167, 63, 246, 155, 51, 167, 63, 246, 155, + 228, 51, 248, 20, 228, 51, 64, 246, 155, 203, 225, 167, 228, 51, 64, 246, + 155, 224, 54, 167, 228, 51, 64, 246, 155, 203, 225, 49, 214, 92, 246, + 149, 250, 236, 203, 225, 51, 214, 92, 246, 149, 250, 236, 224, 54, 51, + 214, 92, 246, 149, 250, 236, 224, 54, 49, 214, 92, 246, 149, 250, 236, + 203, 225, 167, 246, 155, 224, 54, 167, 246, 155, 63, 224, 54, 51, 205, + 98, 63, 224, 54, 49, 205, 98, 63, 203, 225, 49, 205, 98, 63, 203, 225, + 51, 205, 98, 64, 248, 20, 52, 3, 49, 167, 248, 144, 52, 3, 51, 167, 248, + 144, 52, 3, 203, 225, 49, 241, 71, 167, 248, 144, 52, 3, 224, 54, 51, + 241, 71, 167, 248, 144, 64, 52, 3, 83, 248, 156, 224, 176, 64, 203, 227, + 205, 99, 3, 240, 182, 203, 227, 205, 99, 3, 49, 167, 248, 144, 203, 227, + 205, 99, 3, 51, 167, 248, 144, 225, 71, 246, 155, 64, 52, 3, 203, 225, + 49, 214, 91, 64, 52, 3, 224, 54, 49, 214, 91, 64, 52, 3, 224, 54, 51, + 214, 91, 64, 52, 3, 203, 225, 51, 214, 91, 64, 246, 156, 3, 203, 225, 49, + 214, 91, 64, 246, 156, 3, 224, 54, 49, 214, 91, 64, 246, 156, 3, 224, 54, + 51, 214, 91, 64, 246, 156, 3, 203, 225, 51, 214, 91, 203, 225, 49, 205, + 98, 203, 225, 51, 205, 98, 224, 54, 49, 205, 98, 64, 222, 66, 208, 193, + 63, 222, 66, 208, 193, 64, 222, 66, 4, 208, 193, 63, 222, 66, 4, 208, + 193, 224, 54, 51, 205, 98, 63, 207, 229, 3, 213, 194, 246, 101, 204, 9, + 209, 31, 246, 73, 63, 208, 109, 64, 208, 109, 224, 193, 206, 30, 207, + 228, 250, 184, 218, 238, 241, 118, 218, 238, 243, 54, 217, 39, 63, 206, + 175, 64, 206, 175, 249, 94, 248, 78, 249, 94, 100, 3, 247, 6, 249, 94, + 100, 3, 200, 195, 212, 24, 204, 10, 3, 213, 223, 239, 144, 233, 118, 248, + 204, 64, 210, 3, 215, 196, 63, 210, 3, 215, 196, 210, 91, 213, 105, 212, + 228, 237, 28, 234, 128, 248, 20, 63, 49, 215, 96, 228, 103, 63, 51, 215, + 96, 228, 103, 64, 49, 215, 96, 228, 103, 64, 115, 215, 96, 228, 103, 64, + 51, 215, 96, 228, 103, 64, 127, 215, 96, 228, 103, 209, 81, 26, 242, 233, + 247, 105, 54, 213, 235, 54, 248, 164, 54, 247, 181, 251, 61, 217, 18, + 242, 234, 246, 237, 213, 90, 242, 235, 76, 224, 69, 242, 235, 76, 227, + 217, 208, 110, 26, 242, 243, 237, 162, 99, 251, 228, 210, 94, 234, 207, + 26, 209, 179, 216, 72, 99, 199, 255, 200, 75, 205, 88, 36, 234, 123, 205, + 88, 36, 225, 96, 205, 88, 36, 237, 77, 205, 88, 36, 206, 31, 205, 88, 36, + 201, 16, 205, 88, 36, 201, 82, 205, 88, 36, 221, 63, 205, 88, 36, 239, + 17, 201, 38, 76, 241, 92, 64, 236, 195, 237, 189, 64, 209, 47, 237, 189, + 63, 209, 47, 237, 189, 64, 207, 229, 3, 213, 194, 237, 73, 214, 88, 221, + 81, 225, 64, 214, 88, 221, 81, 222, 34, 237, 130, 54, 239, 17, 222, 185, + 54, 227, 133, 211, 244, 203, 209, 220, 18, 215, 110, 250, 222, 206, 219, + 236, 2, 247, 154, 224, 246, 202, 206, 224, 207, 211, 212, 212, 48, 247, + 139, 250, 254, 215, 145, 64, 246, 244, 226, 144, 64, 246, 244, 214, 80, + 64, 246, 244, 212, 236, 64, 246, 244, 248, 155, 64, 246, 244, 226, 93, + 64, 246, 244, 216, 84, 63, 246, 244, 226, 144, 63, 246, 244, 214, 80, 63, + 246, 244, 212, 236, 63, 246, 244, 248, 155, 63, 246, 244, 226, 93, 63, + 246, 244, 216, 84, 63, 208, 242, 207, 241, 64, 234, 128, 207, 241, 64, + 241, 65, 207, 241, 63, 246, 98, 207, 241, 64, 208, 242, 207, 241, 63, + 234, 128, 207, 241, 63, 241, 65, 207, 241, 64, 246, 98, 207, 241, 233, + 118, 208, 198, 214, 88, 218, 209, 238, 228, 218, 209, 249, 4, 238, 228, + 218, 204, 249, 4, 209, 99, 218, 204, 220, 246, 237, 45, 54, 220, 246, + 220, 117, 54, 220, 246, 210, 79, 54, 201, 48, 207, 103, 242, 234, 239, + 14, 207, 103, 242, 234, 203, 237, 213, 171, 99, 213, 171, 16, 36, 204, + 127, 215, 127, 213, 171, 16, 36, 204, 125, 215, 127, 213, 171, 16, 36, + 204, 124, 215, 127, 213, 171, 16, 36, 204, 122, 215, 127, 213, 171, 16, + 36, 204, 120, 215, 127, 213, 171, 16, 36, 204, 118, 215, 127, 213, 171, + 16, 36, 204, 116, 215, 127, 213, 171, 16, 36, 236, 0, 222, 126, 63, 203, + 237, 213, 171, 99, 213, 172, 216, 134, 99, 216, 107, 216, 134, 99, 216, + 19, 216, 134, 54, 201, 36, 99, 241, 57, 237, 188, 241, 57, 237, 187, 241, + 57, 237, 186, 241, 57, 237, 185, 241, 57, 237, 184, 241, 57, 237, 183, + 64, 246, 156, 3, 73, 213, 46, 64, 246, 156, 3, 120, 240, 180, 63, 246, + 156, 3, 64, 73, 213, 46, 63, 246, 156, 3, 120, 64, 240, 180, 221, 97, 36, + 200, 75, 221, 97, 36, 199, 254, 241, 38, 36, 235, 68, 200, 75, 241, 38, + 36, 224, 239, 199, 254, 241, 38, 36, 224, 239, 200, 75, 241, 38, 36, 235, + 68, 199, 254, 64, 237, 53, 63, 237, 53, 234, 207, 26, 215, 200, 251, 81, + 242, 232, 207, 168, 208, 118, 76, 251, 204, 211, 229, 251, 141, 237, 24, + 236, 12, 208, 118, 76, 234, 98, 250, 147, 99, 237, 40, 216, 250, 64, 208, + 109, 126, 224, 171, 243, 31, 213, 46, 126, 224, 171, 243, 31, 225, 28, + 201, 93, 54, 122, 202, 182, 54, 239, 172, 237, 130, 54, 239, 172, 222, + 185, 54, 228, 61, 237, 130, 26, 222, 185, 54, 222, 185, 26, 237, 130, 54, + 222, 185, 3, 208, 47, 54, 222, 185, 3, 208, 47, 26, 222, 185, 26, 237, + 130, 54, 83, 222, 185, 3, 208, 47, 54, 233, 177, 222, 185, 3, 208, 47, + 54, 222, 66, 64, 246, 155, 222, 66, 63, 246, 155, 222, 66, 4, 64, 246, + 155, 222, 143, 99, 240, 233, 99, 203, 234, 216, 106, 99, 246, 84, 236, + 178, 203, 205, 220, 11, 247, 41, 216, 179, 227, 139, 202, 244, 246, 217, + 63, 221, 82, 224, 190, 210, 125, 210, 164, 214, 70, 210, 144, 209, 26, + 249, 97, 249, 63, 95, 226, 214, 64, 239, 155, 222, 180, 64, 239, 155, + 226, 144, 63, 239, 155, 222, 180, 63, 239, 155, 226, 144, 209, 32, 201, + 3, 209, 35, 207, 229, 248, 237, 246, 101, 213, 222, 63, 209, 31, 206, 32, + 246, 102, 26, 213, 222, 204, 185, 64, 210, 3, 215, 196, 204, 185, 63, + 210, 3, 215, 196, 64, 241, 65, 228, 118, 208, 193, 242, 228, 225, 78, + 241, 5, 247, 135, 217, 42, 215, 200, 247, 136, 209, 65, 234, 108, 3, 64, + 242, 234, 44, 242, 228, 225, 78, 247, 33, 218, 242, 238, 149, 251, 109, + 217, 71, 49, 201, 68, 205, 126, 63, 204, 138, 49, 201, 68, 205, 126, 64, + 204, 138, 49, 201, 68, 205, 126, 63, 49, 225, 79, 222, 33, 64, 49, 225, + 79, 222, 33, 239, 150, 209, 57, 54, 80, 64, 239, 166, 205, 98, 49, 246, + 110, 238, 149, 95, 212, 24, 237, 171, 241, 71, 228, 118, 64, 246, 156, + 228, 118, 63, 208, 193, 63, 205, 62, 213, 116, 49, 238, 148, 213, 116, + 49, 238, 147, 250, 160, 16, 36, 203, 209, 80, 246, 156, 3, 208, 47, 26, + 120, 190, 56, 216, 36, 213, 43, 228, 63, 216, 36, 225, 25, 228, 63, 216, + 36, 228, 50, 216, 36, 63, 242, 235, 217, 79, 210, 30, 210, 18, 209, 225, + 246, 184, 247, 113, 234, 46, 209, 107, 236, 13, 201, 3, 233, 94, 236, 13, + 3, 234, 176, 222, 165, 16, 36, 224, 195, 221, 63, 204, 10, 217, 79, 235, + 59, 236, 230, 237, 54, 228, 118, 233, 197, 237, 120, 212, 43, 52, 236, + 229, 243, 14, 209, 84, 232, 232, 209, 87, 216, 11, 3, 249, 97, 206, 158, + 227, 236, 249, 82, 99, 234, 131, 235, 70, 99, 236, 186, 214, 213, 242, + 203, 217, 79, 63, 208, 193, 64, 237, 54, 3, 233, 177, 101, 63, 208, 48, + 63, 212, 53, 211, 216, 203, 225, 248, 139, 211, 216, 63, 211, 216, 224, + 54, 248, 139, 211, 216, 64, 211, 216, 64, 80, 247, 7, 81, 206, 176, 224, + 108, 54, 206, 235, 239, 149, 251, 164, 238, 144, 213, 220, 237, 66, 213, + 220, 234, 199, 202, 232, 234, 199, 200, 219, 234, 199, 224, 54, 51, 216, + 46, 216, 46, 203, 225, 51, 216, 46, 64, 219, 147, 63, 219, 147, 247, 7, + 81, 80, 247, 7, 81, 221, 19, 200, 195, 80, 221, 19, 200, 195, 249, 94, + 200, 195, 80, 249, 94, 200, 195, 216, 250, 31, 242, 234, 80, 31, 242, + 234, 176, 247, 56, 242, 234, 80, 176, 247, 56, 242, 234, 8, 242, 234, + 210, 101, 64, 8, 242, 234, 216, 250, 8, 242, 234, 222, 182, 242, 234, + 208, 110, 76, 241, 237, 236, 229, 206, 194, 250, 165, 236, 229, 249, 95, + 250, 165, 80, 236, 229, 249, 95, 250, 165, 236, 229, 246, 96, 250, 165, + 63, 236, 229, 215, 98, 208, 109, 64, 236, 229, 215, 98, 208, 109, 208, + 237, 208, 57, 216, 250, 64, 208, 109, 44, 64, 208, 109, 176, 247, 56, 63, + 208, 109, 63, 247, 56, 64, 208, 109, 216, 250, 63, 208, 109, 80, 216, + 250, 63, 208, 109, 215, 155, 208, 109, 210, 101, 64, 208, 109, 80, 250, + 165, 176, 247, 56, 250, 165, 238, 232, 208, 207, 250, 165, 238, 232, 215, + 98, 63, 208, 109, 238, 232, 215, 98, 215, 155, 208, 109, 209, 106, 215, + 98, 63, 208, 109, 238, 232, 215, 98, 213, 173, 63, 208, 109, 80, 238, + 232, 215, 98, 213, 173, 63, 208, 109, 204, 165, 215, 98, 63, 208, 109, + 209, 101, 215, 98, 250, 165, 206, 194, 250, 165, 176, 247, 56, 206, 194, + 250, 165, 80, 206, 194, 250, 165, 209, 106, 215, 255, 63, 26, 64, 237, + 27, 63, 237, 27, 64, 237, 27, 238, 232, 215, 255, 216, 250, 63, 237, 27, + 44, 176, 247, 56, 238, 232, 215, 98, 208, 109, 80, 206, 194, 215, 155, + 250, 165, 209, 33, 206, 1, 205, 91, 209, 33, 80, 246, 240, 209, 33, 208, + 239, 80, 208, 239, 249, 95, 250, 165, 238, 232, 206, 194, 214, 246, 250, + 165, 80, 238, 232, 206, 194, 214, 246, 250, 165, 242, 235, 81, 210, 101, + 64, 246, 155, 189, 95, 242, 235, 81, 224, 54, 51, 239, 146, 64, 208, 193, + 203, 225, 51, 239, 146, 64, 208, 193, 224, 54, 51, 210, 101, 64, 208, + 193, 203, 225, 51, 210, 101, 64, 208, 193, 63, 214, 79, 134, 217, 21, 64, + 214, 79, 134, 217, 21, 64, 238, 43, 134, 217, 21, 63, 241, 65, 221, 157, + 64, 200, 195, 80, 238, 43, 134, 99, 162, 83, 148, 222, 66, 83, 148, 80, + 83, 148, 80, 209, 139, 204, 185, 246, 71, 214, 63, 134, 217, 21, 80, 209, + 139, 246, 71, 214, 63, 134, 217, 21, 80, 53, 204, 185, 246, 71, 214, 63, + 134, 217, 21, 80, 53, 246, 71, 214, 63, 134, 217, 21, 80, 128, 209, 139, + 246, 71, 214, 63, 134, 217, 21, 80, 128, 53, 246, 71, 214, 63, 134, 217, + 21, 242, 188, 208, 93, 216, 128, 2, 217, 21, 80, 238, 43, 134, 217, 21, + 80, 234, 128, 238, 43, 134, 217, 21, 80, 63, 234, 127, 212, 228, 80, 63, + 234, 128, 248, 20, 237, 28, 234, 127, 212, 228, 237, 28, 234, 128, 248, + 20, 222, 66, 49, 216, 116, 217, 21, 222, 66, 51, 216, 116, 217, 21, 222, + 66, 237, 41, 49, 216, 116, 217, 21, 222, 66, 237, 41, 51, 216, 116, 217, + 21, 222, 66, 225, 23, 251, 71, 248, 70, 217, 21, 222, 66, 213, 41, 251, + 71, 248, 70, 217, 21, 80, 225, 23, 251, 71, 214, 63, 134, 217, 21, 80, + 213, 41, 251, 71, 214, 63, 134, 217, 21, 80, 225, 23, 251, 71, 248, 70, + 217, 21, 80, 213, 41, 251, 71, 248, 70, 217, 21, 162, 49, 205, 146, 210, + 55, 248, 70, 217, 21, 162, 51, 205, 146, 210, 55, 248, 70, 217, 21, 222, + 66, 49, 242, 196, 248, 70, 217, 21, 222, 66, 51, 242, 196, 248, 70, 217, + 21, 241, 17, 189, 44, 17, 102, 241, 17, 189, 44, 17, 105, 241, 17, 189, + 44, 17, 147, 241, 17, 189, 44, 17, 149, 241, 17, 189, 44, 17, 164, 241, + 17, 189, 44, 17, 187, 241, 17, 189, 44, 17, 210, 135, 241, 17, 189, 44, + 17, 192, 241, 17, 189, 44, 17, 219, 113, 241, 17, 189, 44, 41, 206, 166, + 241, 17, 44, 43, 17, 102, 241, 17, 44, 43, 17, 105, 241, 17, 44, 43, 17, + 147, 241, 17, 44, 43, 17, 149, 241, 17, 44, 43, 17, 164, 241, 17, 44, 43, + 17, 187, 241, 17, 44, 43, 17, 210, 135, 241, 17, 44, 43, 17, 192, 241, + 17, 44, 43, 17, 219, 113, 241, 17, 44, 43, 41, 206, 166, 241, 17, 189, + 44, 43, 17, 102, 241, 17, 189, 44, 43, 17, 105, 241, 17, 189, 44, 43, 17, + 147, 241, 17, 189, 44, 43, 17, 149, 241, 17, 189, 44, 43, 17, 164, 241, + 17, 189, 44, 43, 17, 187, 241, 17, 189, 44, 43, 17, 210, 135, 241, 17, + 189, 44, 43, 17, 192, 241, 17, 189, 44, 43, 17, 219, 113, 241, 17, 189, + 44, 43, 41, 206, 166, 80, 201, 27, 87, 48, 80, 93, 54, 80, 221, 157, 54, + 80, 240, 235, 54, 80, 208, 254, 239, 14, 48, 80, 87, 48, 80, 157, 239, + 14, 48, 239, 160, 215, 100, 87, 48, 80, 212, 220, 87, 48, 205, 97, 87, + 48, 80, 205, 97, 87, 48, 241, 243, 205, 97, 87, 48, 80, 241, 243, 205, + 97, 87, 48, 63, 87, 48, 206, 45, 205, 156, 87, 250, 202, 206, 45, 248, + 91, 87, 250, 202, 63, 87, 250, 202, 80, 63, 242, 188, 191, 26, 87, 48, + 80, 63, 242, 188, 182, 26, 87, 48, 208, 190, 63, 87, 48, 80, 243, 67, 63, + 87, 48, 213, 40, 64, 87, 48, 225, 22, 64, 87, 48, 249, 128, 210, 101, 64, + 87, 48, 236, 198, 210, 101, 64, 87, 48, 80, 224, 54, 213, 39, 64, 87, 48, + 80, 203, 225, 213, 39, 64, 87, 48, 218, 211, 224, 54, 213, 39, 64, 87, + 48, 242, 196, 224, 74, 218, 211, 203, 225, 213, 39, 64, 87, 48, 44, 80, + 64, 87, 48, 201, 33, 87, 48, 248, 143, 208, 254, 239, 14, 48, 248, 143, + 87, 48, 248, 143, 157, 239, 14, 48, 80, 248, 143, 208, 254, 239, 14, 48, + 80, 248, 143, 87, 48, 80, 248, 143, 157, 239, 14, 48, 206, 196, 87, 48, + 80, 206, 195, 87, 48, 201, 58, 87, 48, 80, 201, 58, 87, 48, 217, 48, 87, + 48, 53, 242, 196, 224, 74, 126, 241, 27, 251, 70, 64, 205, 99, 243, 45, + 4, 64, 205, 98, 216, 14, 176, 208, 2, 176, 207, 211, 49, 212, 121, 249, + 114, 241, 142, 51, 212, 121, 249, 114, 241, 142, 217, 34, 3, 73, 228, 73, + 213, 106, 209, 17, 215, 27, 208, 2, 207, 212, 215, 27, 209, 16, 83, 249, + 77, 3, 233, 177, 97, 13, 213, 19, 241, 70, 168, 240, 234, 13, 237, 171, + 241, 70, 95, 224, 98, 251, 79, 95, 224, 98, 217, 33, 64, 241, 65, 3, 247, + 54, 240, 182, 26, 3, 240, 182, 238, 202, 76, 217, 46, 203, 216, 224, 54, + 51, 243, 16, 3, 240, 182, 203, 225, 49, 243, 16, 3, 240, 182, 49, 216, + 252, 227, 164, 51, 216, 252, 227, 164, 236, 183, 216, 252, 227, 164, 225, + 71, 115, 207, 17, 225, 71, 127, 207, 17, 49, 26, 51, 53, 204, 184, 49, + 26, 51, 207, 17, 49, 221, 23, 168, 51, 207, 17, 168, 49, 207, 17, 115, + 207, 18, 3, 246, 156, 56, 224, 50, 240, 240, 247, 235, 233, 177, 212, + 165, 64, 243, 66, 241, 64, 64, 243, 66, 241, 65, 3, 98, 206, 11, 64, 243, + 66, 241, 65, 3, 87, 206, 11, 64, 52, 3, 98, 206, 11, 64, 52, 3, 87, 206, + 11, 13, 49, 64, 52, 159, 13, 51, 64, 52, 159, 13, 49, 251, 71, 159, 13, + 51, 251, 71, 159, 13, 49, 53, 251, 71, 159, 13, 51, 53, 251, 71, 159, 13, + 49, 64, 205, 146, 210, 55, 159, 13, 51, 64, 205, 146, 210, 55, 159, 13, + 49, 237, 41, 216, 115, 13, 51, 237, 41, 216, 115, 182, 214, 90, 48, 191, + 214, 90, 48, 251, 47, 236, 51, 246, 156, 48, 246, 112, 236, 51, 246, 156, + 48, 51, 55, 3, 44, 215, 113, 168, 98, 48, 168, 87, 48, 168, 49, 51, 48, + 168, 98, 53, 48, 168, 87, 53, 48, 168, 49, 51, 53, 48, 168, 98, 55, 236, + 201, 148, 168, 87, 55, 236, 201, 148, 168, 98, 53, 55, 236, 201, 148, + 168, 87, 53, 55, 236, 201, 148, 168, 87, 208, 186, 48, 59, 60, 248, 137, + 59, 60, 240, 179, 59, 60, 240, 51, 59, 60, 240, 178, 59, 60, 239, 243, + 59, 60, 240, 114, 59, 60, 240, 50, 59, 60, 240, 177, 59, 60, 239, 211, + 59, 60, 240, 82, 59, 60, 240, 18, 59, 60, 240, 145, 59, 60, 239, 242, 59, + 60, 240, 113, 59, 60, 240, 49, 59, 60, 240, 176, 59, 60, 239, 195, 59, + 60, 240, 66, 59, 60, 240, 2, 59, 60, 240, 129, 59, 60, 239, 226, 59, 60, + 240, 97, 59, 60, 240, 33, 59, 60, 240, 160, 59, 60, 239, 210, 59, 60, + 240, 81, 59, 60, 240, 17, 59, 60, 240, 144, 59, 60, 239, 241, 59, 60, + 240, 112, 59, 60, 240, 48, 59, 60, 240, 175, 59, 60, 239, 187, 59, 60, + 240, 58, 59, 60, 239, 250, 59, 60, 240, 121, 59, 60, 239, 218, 59, 60, + 240, 89, 59, 60, 240, 25, 59, 60, 240, 152, 59, 60, 239, 202, 59, 60, + 240, 73, 59, 60, 240, 9, 59, 60, 240, 136, 59, 60, 239, 233, 59, 60, 240, + 104, 59, 60, 240, 40, 59, 60, 240, 167, 59, 60, 239, 194, 59, 60, 240, + 65, 59, 60, 240, 1, 59, 60, 240, 128, 59, 60, 239, 225, 59, 60, 240, 96, + 59, 60, 240, 32, 59, 60, 240, 159, 59, 60, 239, 209, 59, 60, 240, 80, 59, + 60, 240, 16, 59, 60, 240, 143, 59, 60, 239, 240, 59, 60, 240, 111, 59, + 60, 240, 47, 59, 60, 240, 174, 59, 60, 239, 183, 59, 60, 240, 54, 59, 60, + 239, 246, 59, 60, 240, 117, 59, 60, 239, 214, 59, 60, 240, 85, 59, 60, + 240, 21, 59, 60, 240, 148, 59, 60, 239, 198, 59, 60, 240, 69, 59, 60, + 240, 5, 59, 60, 240, 132, 59, 60, 239, 229, 59, 60, 240, 100, 59, 60, + 240, 36, 59, 60, 240, 163, 59, 60, 239, 190, 59, 60, 240, 61, 59, 60, + 239, 253, 59, 60, 240, 124, 59, 60, 239, 221, 59, 60, 240, 92, 59, 60, + 240, 28, 59, 60, 240, 155, 59, 60, 239, 205, 59, 60, 240, 76, 59, 60, + 240, 12, 59, 60, 240, 139, 59, 60, 239, 236, 59, 60, 240, 107, 59, 60, + 240, 43, 59, 60, 240, 170, 59, 60, 239, 186, 59, 60, 240, 57, 59, 60, + 239, 249, 59, 60, 240, 120, 59, 60, 239, 217, 59, 60, 240, 88, 59, 60, + 240, 24, 59, 60, 240, 151, 59, 60, 239, 201, 59, 60, 240, 72, 59, 60, + 240, 8, 59, 60, 240, 135, 59, 60, 239, 232, 59, 60, 240, 103, 59, 60, + 240, 39, 59, 60, 240, 166, 59, 60, 239, 193, 59, 60, 240, 64, 59, 60, + 240, 0, 59, 60, 240, 127, 59, 60, 239, 224, 59, 60, 240, 95, 59, 60, 240, + 31, 59, 60, 240, 158, 59, 60, 239, 208, 59, 60, 240, 79, 59, 60, 240, 15, + 59, 60, 240, 142, 59, 60, 239, 239, 59, 60, 240, 110, 59, 60, 240, 46, + 59, 60, 240, 173, 59, 60, 239, 181, 59, 60, 240, 52, 59, 60, 239, 244, + 59, 60, 240, 115, 59, 60, 239, 212, 59, 60, 240, 83, 59, 60, 240, 19, 59, + 60, 240, 146, 59, 60, 239, 196, 59, 60, 240, 67, 59, 60, 240, 3, 59, 60, + 240, 130, 59, 60, 239, 227, 59, 60, 240, 98, 59, 60, 240, 34, 59, 60, + 240, 161, 59, 60, 239, 188, 59, 60, 240, 59, 59, 60, 239, 251, 59, 60, + 240, 122, 59, 60, 239, 219, 59, 60, 240, 90, 59, 60, 240, 26, 59, 60, + 240, 153, 59, 60, 239, 203, 59, 60, 240, 74, 59, 60, 240, 10, 59, 60, + 240, 137, 59, 60, 239, 234, 59, 60, 240, 105, 59, 60, 240, 41, 59, 60, + 240, 168, 59, 60, 239, 184, 59, 60, 240, 55, 59, 60, 239, 247, 59, 60, + 240, 118, 59, 60, 239, 215, 59, 60, 240, 86, 59, 60, 240, 22, 59, 60, + 240, 149, 59, 60, 239, 199, 59, 60, 240, 70, 59, 60, 240, 6, 59, 60, 240, + 133, 59, 60, 239, 230, 59, 60, 240, 101, 59, 60, 240, 37, 59, 60, 240, + 164, 59, 60, 239, 191, 59, 60, 240, 62, 59, 60, 239, 254, 59, 60, 240, + 125, 59, 60, 239, 222, 59, 60, 240, 93, 59, 60, 240, 29, 59, 60, 240, + 156, 59, 60, 239, 206, 59, 60, 240, 77, 59, 60, 240, 13, 59, 60, 240, + 140, 59, 60, 239, 237, 59, 60, 240, 108, 59, 60, 240, 44, 59, 60, 240, + 171, 59, 60, 239, 182, 59, 60, 240, 53, 59, 60, 239, 245, 59, 60, 240, + 116, 59, 60, 239, 213, 59, 60, 240, 84, 59, 60, 240, 20, 59, 60, 240, + 147, 59, 60, 239, 197, 59, 60, 240, 68, 59, 60, 240, 4, 59, 60, 240, 131, + 59, 60, 239, 228, 59, 60, 240, 99, 59, 60, 240, 35, 59, 60, 240, 162, 59, + 60, 239, 189, 59, 60, 240, 60, 59, 60, 239, 252, 59, 60, 240, 123, 59, + 60, 239, 220, 59, 60, 240, 91, 59, 60, 240, 27, 59, 60, 240, 154, 59, 60, + 239, 204, 59, 60, 240, 75, 59, 60, 240, 11, 59, 60, 240, 138, 59, 60, + 239, 235, 59, 60, 240, 106, 59, 60, 240, 42, 59, 60, 240, 169, 59, 60, + 239, 185, 59, 60, 240, 56, 59, 60, 239, 248, 59, 60, 240, 119, 59, 60, + 239, 216, 59, 60, 240, 87, 59, 60, 240, 23, 59, 60, 240, 150, 59, 60, + 239, 200, 59, 60, 240, 71, 59, 60, 240, 7, 59, 60, 240, 134, 59, 60, 239, + 231, 59, 60, 240, 102, 59, 60, 240, 38, 59, 60, 240, 165, 59, 60, 239, + 192, 59, 60, 240, 63, 59, 60, 239, 255, 59, 60, 240, 126, 59, 60, 239, + 223, 59, 60, 240, 94, 59, 60, 240, 30, 59, 60, 240, 157, 59, 60, 239, + 207, 59, 60, 240, 78, 59, 60, 240, 14, 59, 60, 240, 141, 59, 60, 239, + 238, 59, 60, 240, 109, 59, 60, 240, 45, 59, 60, 240, 172, 87, 204, 141, + 55, 3, 83, 97, 87, 204, 141, 55, 3, 53, 83, 97, 98, 53, 55, 3, 83, 97, + 87, 53, 55, 3, 83, 97, 49, 51, 53, 55, 3, 83, 97, 87, 204, 141, 55, 236, + 201, 148, 98, 53, 55, 236, 201, 148, 87, 53, 55, 236, 201, 148, 191, 55, + 3, 233, 177, 97, 182, 55, 3, 233, 177, 97, 182, 205, 83, 48, 191, 205, + 83, 48, 98, 53, 241, 245, 48, 87, 53, 241, 245, 48, 98, 205, 83, 241, + 245, 48, 87, 205, 83, 241, 245, 48, 87, 204, 141, 205, 83, 241, 245, 48, + 87, 55, 3, 239, 180, 208, 92, 182, 55, 205, 186, 148, 191, 55, 205, 186, + 148, 87, 55, 3, 207, 7, 3, 83, 97, 87, 55, 3, 207, 7, 3, 53, 83, 97, 87, + 204, 141, 55, 3, 207, 6, 87, 204, 141, 55, 3, 207, 7, 3, 83, 97, 87, 204, + 141, 55, 3, 207, 7, 3, 53, 83, 97, 98, 250, 204, 87, 250, 204, 98, 53, + 250, 204, 87, 53, 250, 204, 98, 55, 205, 186, 63, 241, 64, 87, 55, 205, + 186, 63, 241, 64, 98, 55, 236, 201, 249, 77, 205, 186, 63, 241, 64, 87, + 55, 236, 201, 249, 77, 205, 186, 63, 241, 64, 157, 201, 48, 26, 208, 254, + 239, 14, 48, 157, 239, 14, 26, 208, 254, 201, 48, 48, 157, 201, 48, 55, + 3, 117, 157, 239, 14, 55, 3, 117, 208, 254, 239, 14, 55, 3, 117, 208, + 254, 201, 48, 55, 3, 117, 157, 201, 48, 55, 26, 157, 239, 14, 48, 157, + 239, 14, 55, 26, 208, 254, 239, 14, 48, 208, 254, 239, 14, 55, 26, 208, + 254, 201, 48, 48, 208, 254, 201, 48, 55, 26, 157, 201, 48, 48, 213, 19, + 241, 71, 242, 228, 237, 171, 241, 70, 237, 171, 241, 71, 242, 228, 213, + 19, 241, 70, 208, 254, 239, 14, 55, 242, 228, 157, 239, 14, 48, 157, 239, + 14, 55, 242, 228, 208, 254, 239, 14, 48, 237, 171, 241, 71, 242, 228, + 157, 239, 14, 48, 213, 19, 241, 71, 242, 228, 208, 254, 239, 14, 48, 157, + 239, 14, 55, 242, 228, 157, 201, 48, 48, 157, 201, 48, 55, 242, 228, 157, + 239, 14, 48, 201, 78, 55, 215, 96, 241, 7, 213, 46, 55, 215, 96, 87, 206, + 98, 242, 186, 203, 216, 55, 215, 96, 87, 206, 98, 242, 186, 239, 165, 55, + 215, 96, 191, 206, 98, 242, 186, 225, 18, 55, 215, 96, 191, 206, 98, 242, + 186, 213, 35, 213, 38, 250, 237, 246, 112, 48, 225, 21, 250, 237, 251, + 47, 48, 205, 158, 250, 237, 251, 47, 48, 248, 93, 250, 237, 251, 47, 48, + 205, 158, 250, 237, 246, 112, 55, 3, 221, 156, 205, 158, 250, 237, 251, + 47, 55, 3, 215, 113, 224, 54, 51, 210, 169, 246, 112, 48, 224, 54, 49, + 210, 169, 251, 47, 48, 251, 47, 246, 110, 246, 156, 48, 246, 112, 246, + 110, 246, 156, 48, 87, 55, 88, 209, 250, 98, 48, 98, 55, 88, 209, 250, + 87, 48, 209, 250, 87, 55, 88, 98, 48, 87, 55, 3, 93, 57, 98, 55, 3, 93, + 57, 87, 55, 206, 38, 200, 195, 49, 51, 55, 206, 38, 4, 246, 155, 182, + 204, 141, 55, 236, 201, 4, 246, 155, 49, 154, 115, 51, 154, 127, 234, + 160, 49, 154, 127, 51, 154, 115, 234, 160, 115, 154, 51, 127, 154, 49, + 234, 160, 115, 154, 49, 127, 154, 51, 234, 160, 49, 154, 115, 51, 154, + 115, 234, 160, 115, 154, 51, 127, 154, 51, 234, 160, 49, 154, 127, 51, + 154, 127, 234, 160, 115, 154, 49, 127, 154, 49, 234, 160, 98, 234, 161, + 3, 154, 115, 205, 186, 148, 87, 234, 161, 3, 154, 115, 205, 186, 148, + 182, 234, 161, 3, 154, 51, 205, 186, 148, 191, 234, 161, 3, 154, 51, 205, + 186, 148, 98, 234, 161, 3, 154, 127, 205, 186, 148, 87, 234, 161, 3, 154, + 127, 205, 186, 148, 182, 234, 161, 3, 154, 49, 205, 186, 148, 191, 234, + 161, 3, 154, 49, 205, 186, 148, 98, 234, 161, 3, 154, 115, 236, 201, 148, + 87, 234, 161, 3, 154, 115, 236, 201, 148, 182, 234, 161, 3, 154, 51, 236, + 201, 148, 191, 234, 161, 3, 154, 51, 236, 201, 148, 98, 234, 161, 3, 154, + 127, 236, 201, 148, 87, 234, 161, 3, 154, 127, 236, 201, 148, 182, 234, + 161, 3, 154, 49, 236, 201, 148, 191, 234, 161, 3, 154, 49, 236, 201, 148, + 98, 234, 161, 3, 154, 115, 88, 98, 234, 161, 3, 154, 239, 167, 182, 234, + 161, 3, 154, 49, 248, 212, 182, 234, 161, 3, 154, 213, 46, 87, 234, 161, + 3, 154, 115, 88, 87, 234, 161, 3, 154, 239, 167, 191, 234, 161, 3, 154, + 49, 248, 212, 191, 234, 161, 3, 154, 213, 46, 98, 234, 161, 3, 154, 115, + 88, 87, 234, 161, 3, 154, 203, 228, 98, 234, 161, 3, 154, 127, 88, 87, + 234, 161, 3, 154, 239, 167, 87, 234, 161, 3, 154, 115, 88, 98, 234, 161, + 3, 154, 203, 228, 87, 234, 161, 3, 154, 127, 88, 98, 234, 161, 3, 154, + 239, 167, 98, 234, 161, 3, 154, 115, 88, 168, 241, 244, 98, 234, 161, 3, + 154, 127, 248, 228, 168, 241, 244, 87, 234, 161, 3, 154, 115, 88, 168, + 241, 244, 87, 234, 161, 3, 154, 127, 248, 228, 168, 241, 244, 182, 234, + 161, 3, 154, 49, 248, 212, 191, 234, 161, 3, 154, 213, 46, 191, 234, 161, + 3, 154, 49, 248, 212, 182, 234, 161, 3, 154, 213, 46, 51, 53, 55, 3, 212, + 219, 234, 136, 238, 122, 2, 88, 87, 48, 205, 241, 217, 44, 88, 87, 48, + 98, 55, 88, 205, 241, 217, 43, 87, 55, 88, 205, 241, 217, 43, 87, 55, 88, + 251, 117, 160, 138, 224, 241, 88, 98, 48, 98, 55, 206, 38, 224, 240, 235, + 67, 88, 87, 48, 208, 3, 88, 87, 48, 98, 55, 206, 38, 208, 2, 207, 212, + 88, 98, 48, 49, 237, 72, 207, 6, 51, 237, 72, 207, 6, 115, 237, 72, 207, + 6, 127, 237, 72, 207, 6, 205, 83, 83, 249, 77, 241, 142, 199, 158, 218, + 213, 208, 204, 199, 158, 218, 213, 204, 128, 246, 79, 49, 64, 242, 196, + 159, 51, 64, 242, 196, 159, 49, 64, 216, 115, 51, 64, 216, 115, 199, 158, + 218, 213, 49, 228, 133, 159, 199, 158, 218, 213, 51, 228, 133, 159, 199, + 158, 218, 213, 49, 248, 167, 159, 199, 158, 218, 213, 51, 248, 167, 159, + 49, 52, 248, 70, 3, 203, 251, 51, 52, 248, 70, 3, 203, 251, 49, 52, 248, + 70, 3, 206, 12, 228, 118, 205, 158, 243, 15, 51, 52, 248, 70, 3, 206, 12, + 228, 118, 248, 93, 243, 15, 49, 52, 248, 70, 3, 206, 12, 228, 118, 248, + 93, 243, 15, 51, 52, 248, 70, 3, 206, 12, 228, 118, 205, 158, 243, 15, + 49, 251, 71, 248, 70, 3, 240, 182, 51, 251, 71, 248, 70, 3, 240, 182, 49, + 250, 237, 224, 241, 159, 51, 250, 237, 235, 67, 159, 53, 49, 250, 237, + 235, 67, 159, 53, 51, 250, 237, 224, 241, 159, 49, 63, 205, 146, 210, 55, + 159, 51, 63, 205, 146, 210, 55, 159, 239, 180, 237, 127, 83, 199, 27, + 224, 176, 222, 73, 251, 71, 217, 46, 225, 28, 51, 251, 71, 203, 73, 3, + 208, 193, 222, 73, 51, 251, 71, 3, 240, 182, 251, 71, 3, 212, 123, 228, + 73, 251, 239, 251, 70, 208, 224, 251, 71, 217, 46, 225, 28, 208, 224, + 251, 71, 217, 46, 203, 228, 204, 185, 251, 70, 213, 105, 251, 70, 251, + 71, 3, 203, 251, 213, 105, 251, 71, 3, 203, 251, 217, 138, 251, 71, 217, + 46, 203, 228, 217, 138, 251, 71, 217, 46, 239, 167, 222, 73, 251, 71, 3, + 176, 250, 215, 238, 168, 228, 118, 55, 215, 96, 115, 26, 213, 46, 222, + 73, 251, 71, 3, 176, 250, 215, 238, 168, 228, 118, 55, 215, 96, 115, 26, + 225, 28, 222, 73, 251, 71, 3, 176, 250, 215, 238, 168, 228, 118, 55, 215, + 96, 127, 26, 213, 46, 222, 73, 251, 71, 3, 176, 250, 215, 238, 168, 228, + 118, 55, 215, 96, 127, 26, 225, 28, 222, 73, 251, 71, 3, 176, 250, 215, + 238, 168, 228, 118, 55, 215, 96, 51, 26, 203, 228, 222, 73, 251, 71, 3, + 176, 250, 215, 238, 168, 228, 118, 55, 215, 96, 49, 26, 203, 228, 222, + 73, 251, 71, 3, 176, 250, 215, 238, 168, 228, 118, 55, 215, 96, 51, 26, + 239, 167, 222, 73, 251, 71, 3, 176, 250, 215, 238, 168, 228, 118, 55, + 215, 96, 49, 26, 239, 167, 213, 105, 238, 181, 210, 141, 238, 181, 210, + 142, 3, 216, 246, 238, 181, 210, 142, 3, 4, 246, 156, 56, 238, 181, 210, + 142, 3, 51, 55, 56, 238, 181, 210, 142, 3, 49, 55, 56, 246, 156, 3, 233, + 177, 148, 44, 83, 148, 44, 216, 120, 44, 213, 106, 209, 16, 44, 216, 14, + 246, 156, 240, 240, 247, 235, 233, 177, 249, 77, 26, 205, 158, 167, 240, + 240, 247, 235, 83, 148, 246, 156, 3, 207, 214, 200, 195, 44, 251, 45, + 240, 235, 54, 115, 55, 206, 38, 246, 155, 44, 64, 248, 20, 44, 248, 20, + 44, 224, 240, 44, 235, 66, 246, 156, 3, 4, 246, 156, 205, 186, 206, 107, + 213, 46, 246, 156, 3, 120, 233, 177, 208, 35, 205, 186, 206, 107, 213, + 46, 95, 213, 19, 241, 71, 209, 75, 95, 237, 171, 241, 71, 209, 75, 95, + 250, 165, 95, 4, 246, 155, 95, 208, 193, 120, 227, 163, 208, 191, 205, + 99, 3, 73, 56, 205, 99, 3, 203, 251, 212, 123, 228, 118, 205, 98, 205, + 99, 3, 210, 148, 250, 156, 248, 92, 51, 205, 99, 88, 49, 205, 98, 49, + 205, 99, 248, 212, 83, 148, 83, 249, 77, 248, 212, 51, 205, 98, 248, 80, + 3, 49, 167, 248, 144, 248, 80, 3, 51, 167, 248, 144, 63, 248, 79, 24, 3, + 49, 167, 248, 144, 24, 3, 51, 167, 248, 144, 64, 233, 111, 63, 233, 111, + 49, 201, 22, 237, 127, 51, 201, 22, 237, 127, 49, 53, 201, 22, 237, 127, + 51, 53, 201, 22, 237, 127, 228, 110, 228, 94, 206, 8, 119, 228, 94, 228, + 95, 220, 28, 3, 83, 148, 239, 174, 221, 23, 52, 3, 243, 37, 216, 251, + 228, 107, 250, 188, 209, 214, 215, 1, 238, 122, 2, 26, 209, 77, 216, 120, + 238, 122, 2, 26, 209, 77, 216, 121, 3, 205, 241, 56, 232, 223, 205, 186, + 26, 209, 77, 216, 120, 235, 126, 208, 108, 206, 95, 239, 166, 205, 99, 3, + 49, 167, 248, 144, 239, 166, 205, 99, 3, 51, 167, 248, 144, 63, 241, 65, + 3, 127, 48, 63, 224, 49, 64, 246, 156, 3, 127, 48, 63, 246, 156, 3, 127, + 48, 238, 107, 64, 208, 193, 238, 107, 63, 208, 193, 238, 107, 64, 241, + 64, 238, 107, 63, 241, 64, 238, 107, 64, 246, 155, 238, 107, 63, 246, + 155, 212, 164, 213, 106, 209, 17, 217, 43, 209, 17, 3, 216, 246, 213, + 106, 209, 17, 3, 233, 177, 97, 248, 175, 209, 16, 248, 175, 213, 106, + 209, 16, 53, 215, 113, 205, 83, 215, 113, 225, 23, 242, 188, 251, 71, + 159, 213, 41, 242, 188, 251, 71, 159, 205, 225, 221, 154, 220, 213, 44, + 73, 217, 43, 220, 213, 44, 93, 217, 43, 220, 213, 44, 24, 217, 43, 220, + 213, 203, 242, 217, 44, 3, 240, 182, 220, 213, 203, 242, 217, 44, 3, 215, + 113, 220, 213, 52, 228, 56, 217, 43, 220, 213, 52, 203, 242, 217, 43, + 120, 224, 98, 26, 217, 43, 120, 224, 98, 217, 34, 217, 43, 220, 213, 24, + 217, 43, 221, 110, 120, 207, 234, 207, 232, 3, 228, 69, 214, 90, 228, 70, + 217, 43, 237, 80, 216, 110, 228, 69, 228, 70, 3, 53, 97, 228, 70, 250, + 120, 3, 209, 75, 246, 148, 236, 180, 251, 47, 228, 67, 224, 177, 228, 68, + 3, 213, 174, 216, 91, 250, 212, 215, 90, 224, 177, 228, 68, 3, 210, 169, + 216, 91, 250, 212, 215, 90, 224, 177, 228, 68, 218, 215, 228, 112, 206, + 107, 215, 90, 228, 70, 250, 212, 35, 215, 100, 217, 43, 214, 84, 228, 70, + 217, 43, 228, 70, 3, 98, 55, 3, 117, 228, 70, 3, 24, 54, 228, 70, 3, 228, + 55, 228, 70, 3, 203, 241, 228, 70, 3, 216, 246, 228, 70, 3, 203, 251, + 227, 164, 225, 71, 49, 205, 99, 217, 43, 199, 158, 218, 213, 211, 224, + 243, 73, 199, 158, 218, 213, 211, 224, 215, 151, 199, 158, 218, 213, 211, + 224, 214, 252, 93, 2, 3, 4, 246, 156, 56, 93, 2, 3, 246, 147, 251, 252, + 56, 93, 2, 3, 205, 241, 56, 93, 2, 3, 73, 57, 93, 2, 3, 205, 241, 57, 93, + 2, 3, 208, 4, 105, 93, 2, 3, 63, 205, 98, 221, 157, 2, 3, 246, 71, 56, + 221, 157, 2, 3, 73, 57, 221, 157, 2, 3, 237, 171, 240, 180, 221, 157, 2, + 3, 213, 19, 240, 180, 93, 2, 228, 118, 49, 167, 246, 155, 93, 2, 228, + 118, 51, 167, 246, 155, 203, 58, 217, 34, 242, 235, 215, 1, 221, 19, 2, + 3, 73, 56, 221, 19, 2, 3, 203, 251, 210, 166, 215, 2, 3, 248, 93, 246, + 109, 209, 51, 215, 1, 221, 19, 2, 228, 118, 49, 167, 246, 155, 221, 19, + 2, 228, 118, 51, 167, 246, 155, 44, 221, 19, 2, 3, 246, 147, 251, 251, + 221, 19, 2, 228, 118, 53, 246, 155, 44, 240, 235, 54, 93, 2, 228, 118, + 205, 98, 221, 157, 2, 228, 118, 205, 98, 221, 19, 2, 228, 118, 205, 98, + 228, 64, 215, 1, 213, 36, 228, 64, 215, 1, 199, 158, 218, 213, 213, 148, + 243, 73, 251, 99, 217, 34, 243, 21, 228, 56, 3, 240, 182, 203, 242, 3, + 221, 157, 54, 203, 242, 3, 216, 246, 228, 56, 3, 216, 246, 228, 56, 3, + 224, 98, 251, 79, 203, 242, 3, 224, 98, 217, 33, 203, 242, 88, 228, 55, + 228, 56, 88, 203, 241, 203, 242, 88, 249, 77, 88, 228, 55, 228, 56, 88, + 249, 77, 88, 203, 241, 203, 242, 248, 212, 26, 227, 163, 3, 203, 241, + 228, 56, 248, 212, 26, 227, 163, 3, 228, 55, 246, 110, 203, 242, 3, 210, + 147, 246, 110, 228, 56, 3, 210, 147, 53, 52, 228, 55, 53, 52, 203, 241, + 246, 110, 203, 242, 3, 210, 148, 26, 209, 51, 215, 1, 224, 98, 26, 3, 73, + 56, 224, 98, 217, 34, 3, 73, 56, 53, 224, 98, 251, 79, 53, 224, 98, 217, + 33, 120, 228, 57, 224, 98, 251, 79, 120, 228, 57, 224, 98, 217, 33, 209, + 60, 225, 71, 217, 33, 209, 60, 225, 71, 251, 79, 224, 98, 217, 34, 216, + 243, 224, 98, 251, 79, 224, 98, 26, 3, 101, 208, 92, 224, 98, 217, 34, 3, + 101, 208, 92, 224, 98, 26, 3, 233, 177, 241, 244, 224, 98, 217, 34, 3, + 233, 177, 241, 244, 224, 98, 26, 3, 53, 216, 246, 224, 98, 26, 3, 203, + 251, 224, 98, 26, 3, 53, 203, 251, 4, 203, 55, 3, 203, 251, 224, 98, 217, + 34, 3, 53, 216, 246, 224, 98, 217, 34, 3, 53, 203, 251, 199, 158, 218, + 213, 240, 191, 251, 37, 199, 158, 218, 213, 213, 211, 251, 37, 238, 122, + 2, 3, 73, 57, 232, 223, 3, 73, 56, 205, 83, 233, 177, 249, 77, 3, 53, 83, + 97, 205, 83, 233, 177, 249, 77, 3, 205, 83, 83, 97, 205, 241, 217, 44, 3, + 73, 56, 205, 241, 217, 44, 3, 213, 19, 240, 180, 209, 148, 221, 157, 209, + 147, 243, 60, 3, 73, 56, 238, 122, 3, 250, 165, 251, 117, 160, 205, 186, + 3, 246, 147, 251, 251, 251, 4, 160, 217, 34, 160, 138, 238, 122, 2, 88, + 93, 54, 93, 2, 88, 238, 122, 54, 238, 122, 2, 88, 205, 241, 217, 43, 53, + 246, 80, 238, 123, 120, 243, 53, 238, 122, 209, 162, 126, 243, 53, 238, + 122, 209, 162, 238, 122, 2, 3, 120, 190, 88, 26, 120, 190, 57, 238, 117, + 3, 236, 229, 190, 56, 224, 241, 3, 246, 156, 228, 73, 235, 67, 3, 246, + 156, 228, 73, 224, 241, 3, 214, 79, 134, 56, 235, 67, 3, 214, 79, 134, + 56, 224, 241, 217, 34, 209, 77, 160, 138, 235, 67, 217, 34, 209, 77, 160, + 138, 224, 241, 217, 34, 209, 77, 160, 205, 186, 3, 73, 228, 73, 235, 67, + 217, 34, 209, 77, 160, 205, 186, 3, 73, 228, 73, 224, 241, 217, 34, 209, + 77, 160, 205, 186, 3, 73, 56, 235, 67, 217, 34, 209, 77, 160, 205, 186, + 3, 73, 56, 224, 241, 217, 34, 209, 77, 160, 205, 186, 3, 73, 88, 213, 46, + 235, 67, 217, 34, 209, 77, 160, 205, 186, 3, 73, 88, 225, 28, 224, 241, + 217, 34, 251, 5, 235, 67, 217, 34, 251, 5, 224, 241, 26, 209, 137, 218, + 215, 160, 138, 235, 67, 26, 209, 137, 218, 215, 160, 138, 224, 241, 26, + 218, 215, 251, 5, 235, 67, 26, 218, 215, 251, 5, 224, 241, 88, 239, 173, + 160, 88, 235, 66, 235, 67, 88, 239, 173, 160, 88, 224, 240, 224, 241, 88, + 209, 148, 217, 34, 238, 123, 235, 67, 88, 209, 148, 217, 34, 238, 123, + 224, 241, 88, 209, 148, 88, 235, 66, 235, 67, 88, 209, 148, 88, 224, 240, + 224, 241, 88, 235, 67, 88, 239, 173, 238, 123, 235, 67, 88, 224, 241, 88, + 239, 173, 238, 123, 224, 241, 88, 209, 77, 160, 88, 235, 67, 88, 209, 77, + 238, 123, 235, 67, 88, 209, 77, 160, 88, 224, 241, 88, 209, 77, 238, 123, + 209, 77, 160, 205, 186, 217, 34, 224, 240, 209, 77, 160, 205, 186, 217, + 34, 235, 66, 209, 77, 160, 205, 186, 217, 34, 224, 241, 3, 73, 228, 73, + 209, 77, 160, 205, 186, 217, 34, 235, 67, 3, 73, 228, 73, 239, 173, 160, + 205, 186, 217, 34, 224, 240, 239, 173, 160, 205, 186, 217, 34, 235, 66, + 239, 173, 209, 77, 160, 205, 186, 217, 34, 224, 240, 239, 173, 209, 77, + 160, 205, 186, 217, 34, 235, 66, 209, 148, 217, 34, 224, 240, 209, 148, + 217, 34, 235, 66, 209, 148, 88, 224, 241, 88, 238, 122, 54, 209, 148, 88, + 235, 67, 88, 238, 122, 54, 53, 220, 15, 224, 240, 53, 220, 15, 235, 66, + 53, 220, 15, 224, 241, 3, 203, 251, 235, 67, 216, 243, 224, 240, 235, 67, + 248, 212, 224, 240, 224, 241, 246, 110, 247, 235, 242, 189, 235, 67, 246, + 110, 247, 235, 242, 189, 224, 241, 246, 110, 247, 235, 242, 190, 88, 209, + 77, 238, 123, 235, 67, 246, 110, 247, 235, 242, 190, 88, 209, 77, 238, + 123, 209, 52, 206, 111, 225, 69, 206, 111, 209, 52, 206, 112, 217, 34, + 160, 138, 225, 69, 206, 112, 217, 34, 160, 138, 238, 122, 2, 3, 248, 13, + 56, 215, 29, 88, 209, 137, 238, 122, 54, 207, 251, 88, 209, 137, 238, + 122, 54, 215, 29, 88, 209, 137, 218, 215, 160, 138, 207, 251, 88, 209, + 137, 218, 215, 160, 138, 215, 29, 88, 238, 122, 54, 207, 251, 88, 238, + 122, 54, 215, 29, 88, 218, 215, 160, 138, 207, 251, 88, 218, 215, 160, + 138, 215, 29, 88, 251, 117, 160, 138, 207, 251, 88, 251, 117, 160, 138, + 215, 29, 88, 218, 215, 251, 117, 160, 138, 207, 251, 88, 218, 215, 251, + 117, 160, 138, 53, 215, 28, 53, 207, 250, 208, 3, 3, 240, 182, 207, 212, + 3, 240, 182, 208, 3, 3, 93, 2, 57, 207, 212, 3, 93, 2, 57, 208, 3, 3, + 221, 19, 2, 57, 207, 212, 3, 221, 19, 2, 57, 208, 3, 76, 217, 34, 160, + 205, 186, 3, 73, 56, 207, 212, 76, 217, 34, 160, 205, 186, 3, 73, 56, + 208, 3, 76, 88, 238, 122, 54, 207, 212, 76, 88, 238, 122, 54, 208, 3, 76, + 88, 205, 241, 217, 43, 207, 212, 76, 88, 205, 241, 217, 43, 208, 3, 76, + 88, 251, 117, 160, 138, 207, 212, 76, 88, 251, 117, 160, 138, 208, 3, 76, + 88, 218, 215, 160, 138, 207, 212, 76, 88, 218, 215, 160, 138, 52, 49, + 176, 100, 217, 43, 52, 51, 176, 100, 217, 43, 246, 110, 208, 2, 246, 110, + 207, 211, 246, 110, 208, 3, 217, 34, 160, 138, 246, 110, 207, 212, 217, + 34, 160, 138, 208, 3, 88, 207, 211, 207, 212, 88, 208, 2, 208, 3, 88, + 208, 2, 207, 212, 88, 207, 211, 207, 212, 248, 212, 208, 2, 207, 212, + 248, 212, 26, 227, 163, 247, 235, 241, 245, 3, 208, 2, 238, 202, 76, 217, + 46, 239, 165, 215, 141, 3, 206, 191, 205, 157, 205, 115, 228, 55, 236, + 243, 218, 230, 209, 250, 49, 207, 17, 209, 250, 127, 207, 17, 209, 250, + 115, 207, 17, 216, 15, 3, 212, 122, 83, 249, 77, 205, 83, 51, 204, 184, + 53, 83, 249, 77, 49, 204, 184, 83, 249, 77, 53, 49, 204, 184, 53, 83, + 249, 77, 53, 49, 204, 184, 168, 241, 245, 236, 201, 49, 222, 45, 76, 53, + 203, 42, 209, 250, 127, 207, 18, 3, 216, 246, 209, 250, 115, 207, 18, 3, + 203, 251, 209, 250, 115, 207, 18, 88, 209, 250, 127, 207, 17, 53, 127, + 207, 17, 53, 115, 207, 17, 53, 208, 47, 218, 215, 54, 213, 105, 53, 208, + 47, 218, 215, 54, 240, 202, 218, 215, 240, 242, 3, 213, 105, 220, 27, + 209, 75, 83, 224, 177, 3, 246, 156, 56, 83, 224, 177, 3, 246, 156, 57, + 127, 207, 18, 3, 246, 156, 57, 216, 121, 3, 233, 177, 97, 216, 121, 3, + 205, 241, 217, 43, 205, 83, 83, 249, 77, 248, 169, 213, 149, 205, 83, 83, + 249, 77, 3, 233, 177, 97, 205, 83, 246, 80, 217, 43, 205, 83, 220, 15, + 224, 240, 205, 83, 220, 15, 235, 66, 239, 173, 209, 77, 224, 241, 217, + 34, 160, 138, 239, 173, 209, 77, 235, 67, 217, 34, 160, 138, 205, 83, + 209, 17, 248, 169, 213, 149, 225, 71, 205, 83, 83, 249, 77, 217, 43, 53, + 209, 17, 217, 43, 64, 83, 148, 220, 213, 64, 83, 148, 157, 239, 14, 64, + 48, 157, 201, 48, 64, 48, 208, 254, 239, 14, 64, 48, 208, 254, 201, 48, + 64, 48, 49, 51, 64, 48, 98, 63, 48, 182, 63, 48, 191, 63, 48, 157, 239, + 14, 63, 48, 157, 201, 48, 63, 48, 208, 254, 239, 14, 63, 48, 208, 254, + 201, 48, 63, 48, 49, 51, 63, 48, 115, 127, 63, 48, 87, 55, 3, 205, 224, + 239, 165, 87, 55, 3, 205, 224, 203, 216, 98, 55, 3, 205, 224, 239, 165, + 98, 55, 3, 205, 224, 203, 216, 52, 3, 205, 158, 167, 248, 144, 52, 3, + 248, 93, 167, 248, 144, 52, 3, 203, 225, 51, 241, 71, 167, 248, 144, 52, + 3, 224, 54, 49, 241, 71, 167, 248, 144, 241, 65, 3, 49, 167, 248, 144, + 241, 65, 3, 51, 167, 248, 144, 241, 65, 3, 205, 158, 167, 248, 144, 241, + 65, 3, 248, 93, 167, 248, 144, 239, 180, 208, 193, 63, 225, 71, 208, 193, + 64, 225, 71, 208, 193, 63, 202, 246, 4, 208, 193, 64, 202, 246, 4, 208, + 193, 63, 216, 37, 64, 216, 37, 64, 234, 89, 63, 234, 89, 233, 177, 63, + 234, 89, 63, 225, 71, 246, 155, 63, 222, 66, 241, 64, 64, 222, 66, 241, + 64, 63, 222, 66, 224, 49, 64, 222, 66, 224, 49, 63, 4, 241, 64, 63, 4, + 224, 49, 64, 4, 224, 49, 63, 233, 177, 238, 196, 64, 233, 177, 238, 196, + 63, 83, 238, 196, 64, 83, 238, 196, 49, 55, 3, 4, 246, 155, 126, 98, 250, + 199, 49, 55, 3, 44, 215, 113, 168, 98, 208, 186, 48, 98, 204, 141, 55, 3, + 83, 97, 98, 204, 141, 55, 3, 53, 83, 97, 98, 204, 141, 55, 236, 201, 148, + 98, 204, 141, 205, 83, 241, 245, 48, 98, 55, 3, 239, 180, 208, 92, 98, + 55, 3, 207, 7, 3, 83, 97, 98, 55, 3, 207, 7, 3, 53, 83, 97, 98, 204, 141, + 55, 3, 207, 6, 98, 204, 141, 55, 3, 207, 7, 3, 83, 97, 98, 204, 141, 55, + 3, 207, 7, 3, 53, 83, 97, 98, 55, 206, 38, 200, 195, 201, 78, 55, 215, + 96, 241, 7, 225, 28, 238, 122, 2, 88, 98, 48, 213, 106, 205, 241, 217, + 44, 88, 98, 48, 98, 55, 88, 213, 106, 251, 117, 160, 138, 87, 55, 206, + 38, 235, 66, 87, 55, 206, 38, 207, 211, 98, 214, 90, 48, 87, 214, 90, 48, + 213, 106, 205, 241, 217, 44, 88, 87, 48, 87, 55, 88, 213, 106, 251, 117, + 160, 138, 205, 241, 217, 44, 88, 98, 48, 98, 55, 88, 251, 117, 160, 138, + 98, 55, 88, 213, 106, 205, 241, 217, 43, 87, 55, 88, 213, 106, 205, 241, + 217, 43, 191, 205, 97, 199, 27, 48, 209, 250, 209, 77, 157, 48, 209, 250, + 249, 126, 208, 254, 48, 64, 222, 66, 208, 109, 63, 4, 208, 109, 64, 4, + 208, 109, 63, 213, 41, 216, 37, 64, 213, 41, 216, 37, 80, 225, 71, 246, + 155, 80, 216, 248, 3, 216, 248, 228, 73, 80, 246, 156, 3, 246, 156, 228, + 73, 80, 246, 155, 80, 44, 212, 24, 209, 77, 157, 55, 3, 233, 186, 234, + 136, 249, 126, 208, 254, 55, 3, 233, 186, 207, 6, 209, 77, 157, 55, 3, + 233, 177, 207, 6, 249, 126, 208, 254, 55, 3, 233, 177, 207, 6, 248, 220, + 55, 215, 96, 191, 206, 98, 157, 239, 13, 209, 250, 248, 220, 55, 215, 96, + 191, 206, 98, 157, 239, 13, 98, 205, 97, 48, 182, 205, 97, 48, 87, 205, + 97, 48, 191, 205, 97, 48, 49, 51, 205, 97, 48, 115, 127, 205, 97, 48, + 157, 201, 48, 205, 97, 48, 157, 239, 14, 205, 97, 48, 208, 254, 239, 14, + 205, 97, 48, 208, 254, 201, 48, 205, 97, 48, 98, 205, 97, 241, 243, 48, + 182, 205, 97, 241, 243, 48, 87, 205, 97, 241, 243, 48, 191, 205, 97, 241, + 243, 48, 246, 112, 205, 97, 176, 246, 156, 48, 251, 47, 205, 97, 176, + 246, 156, 48, 98, 205, 97, 55, 205, 186, 148, 182, 205, 97, 55, 205, 186, + 148, 87, 205, 97, 55, 205, 186, 148, 191, 205, 97, 55, 205, 186, 148, + 157, 201, 48, 205, 97, 55, 205, 186, 148, 157, 239, 14, 205, 97, 55, 205, + 186, 148, 208, 254, 239, 14, 205, 97, 55, 205, 186, 148, 208, 254, 201, + 48, 205, 97, 55, 205, 186, 148, 98, 205, 97, 55, 3, 53, 233, 177, 97, + 182, 205, 97, 55, 3, 53, 233, 177, 97, 87, 205, 97, 55, 3, 53, 233, 177, + 97, 191, 205, 97, 55, 3, 53, 233, 177, 97, 233, 177, 207, 25, 226, 214, + 83, 207, 25, 226, 214, 98, 205, 97, 55, 119, 87, 205, 97, 48, 182, 205, + 97, 55, 98, 76, 191, 205, 97, 48, 87, 205, 97, 55, 119, 98, 205, 97, 48, + 191, 205, 97, 55, 98, 76, 182, 205, 97, 48, 98, 205, 97, 216, 188, 250, + 199, 182, 205, 97, 216, 188, 250, 199, 87, 205, 97, 216, 188, 250, 199, + 191, 205, 97, 216, 188, 250, 199, 98, 63, 44, 64, 48, 182, 63, 44, 64, + 48, 87, 63, 44, 64, 48, 191, 63, 44, 64, 48, 251, 47, 205, 97, 51, 204, + 99, 48, 251, 47, 205, 97, 248, 93, 204, 99, 48, 251, 47, 205, 97, 49, + 204, 99, 48, 251, 47, 205, 97, 205, 158, 204, 99, 48, 213, 110, 225, 28, + 213, 110, 213, 46, 220, 6, 225, 28, 220, 6, 213, 46, 236, 229, 243, 16, + 250, 200, 246, 151, 251, 46, 87, 63, 48, 206, 45, 205, 156, 98, 238, 118, + 250, 202, 206, 45, 213, 42, 182, 238, 118, 250, 202, 206, 45, 205, 156, + 87, 238, 118, 250, 202, 206, 45, 225, 24, 191, 238, 118, 250, 202, 63, + 98, 238, 118, 250, 202, 63, 182, 238, 118, 250, 202, 63, 87, 238, 118, + 250, 202, 63, 191, 238, 118, 250, 202, 191, 205, 97, 55, 3, 168, 205, + 224, 225, 18, 191, 205, 97, 55, 3, 168, 205, 224, 213, 35, 182, 205, 97, + 55, 3, 168, 205, 224, 225, 18, 182, 205, 97, 55, 3, 168, 205, 224, 213, + 35, 98, 205, 97, 55, 3, 168, 205, 224, 203, 216, 87, 205, 97, 55, 3, 168, + 205, 224, 203, 216, 98, 205, 97, 55, 3, 168, 205, 224, 239, 165, 87, 205, + 97, 55, 3, 168, 205, 224, 239, 165, 63, 242, 188, 191, 26, 98, 48, 63, + 242, 188, 191, 26, 87, 48, 63, 242, 188, 182, 26, 98, 48, 63, 242, 188, + 182, 26, 87, 48, 63, 242, 188, 98, 26, 182, 48, 63, 242, 188, 87, 26, + 182, 48, 63, 242, 188, 98, 26, 191, 48, 63, 242, 188, 87, 26, 191, 48, + 213, 86, 55, 127, 225, 28, 213, 86, 55, 127, 213, 46, 213, 86, 55, 115, + 225, 28, 213, 86, 55, 115, 213, 46, 213, 86, 55, 49, 203, 228, 213, 86, + 55, 51, 203, 228, 213, 86, 55, 49, 239, 167, 213, 86, 55, 51, 239, 167, + 182, 64, 55, 236, 201, 249, 77, 3, 233, 177, 148, 115, 250, 203, 228, + 118, 35, 213, 176, 248, 78, 249, 94, 100, 3, 162, 200, 195, 44, 200, 195, + 44, 27, 200, 195, 63, 52, 247, 53, 63, 241, 65, 247, 53, 204, 185, 63, + 216, 37, 233, 177, 63, 217, 130, 63, 217, 130, 63, 222, 66, 203, 227, + 205, 99, 247, 53, 63, 222, 66, 239, 166, 205, 99, 247, 53, 63, 222, 66, + 225, 23, 205, 99, 247, 53, 63, 222, 66, 213, 41, 205, 99, 247, 53, 205, + 158, 167, 63, 246, 155, 248, 93, 167, 63, 246, 155, 162, 236, 229, 215, + 98, 63, 242, 184, 212, 228, 162, 236, 229, 215, 98, 63, 242, 184, 64, + 236, 229, 215, 98, 242, 184, 212, 228, 64, 236, 229, 215, 98, 242, 184, + 52, 215, 70, 228, 99, 203, 255, 54, 98, 204, 141, 55, 3, 205, 99, 250, + 201, 182, 204, 141, 55, 3, 205, 99, 250, 201, 87, 204, 141, 55, 3, 205, + 99, 250, 201, 191, 204, 141, 55, 3, 205, 99, 250, 201, 116, 6, 1, 250, + 104, 116, 6, 1, 248, 24, 116, 6, 1, 203, 57, 116, 6, 1, 235, 130, 116, 6, + 1, 240, 206, 116, 6, 1, 200, 23, 116, 6, 1, 199, 61, 116, 6, 1, 239, 88, + 116, 6, 1, 199, 86, 116, 6, 1, 227, 255, 116, 6, 1, 82, 227, 255, 116, 6, + 1, 70, 116, 6, 1, 240, 226, 116, 6, 1, 227, 74, 116, 6, 1, 224, 140, 116, + 6, 1, 220, 218, 116, 6, 1, 220, 120, 116, 6, 1, 217, 65, 116, 6, 1, 215, + 93, 116, 6, 1, 213, 18, 116, 6, 1, 209, 58, 116, 6, 1, 204, 171, 116, 6, + 1, 204, 16, 116, 6, 1, 236, 204, 116, 6, 1, 234, 95, 116, 6, 1, 217, 4, + 116, 6, 1, 216, 73, 116, 6, 1, 209, 223, 116, 6, 1, 205, 11, 116, 6, 1, + 246, 198, 116, 6, 1, 210, 114, 116, 6, 1, 200, 29, 116, 6, 1, 200, 31, + 116, 6, 1, 200, 63, 116, 6, 1, 208, 220, 144, 116, 6, 1, 199, 211, 116, + 6, 1, 4, 199, 181, 116, 6, 1, 4, 199, 182, 3, 207, 6, 116, 6, 1, 199, + 245, 116, 6, 1, 228, 40, 4, 199, 181, 116, 6, 1, 248, 175, 199, 181, 116, + 6, 1, 228, 40, 248, 175, 199, 181, 116, 6, 1, 237, 63, 116, 6, 1, 227, + 253, 116, 6, 1, 209, 222, 116, 6, 1, 205, 73, 62, 116, 6, 1, 225, 59, + 220, 218, 116, 4, 1, 250, 104, 116, 4, 1, 248, 24, 116, 4, 1, 203, 57, + 116, 4, 1, 235, 130, 116, 4, 1, 240, 206, 116, 4, 1, 200, 23, 116, 4, 1, + 199, 61, 116, 4, 1, 239, 88, 116, 4, 1, 199, 86, 116, 4, 1, 227, 255, + 116, 4, 1, 82, 227, 255, 116, 4, 1, 70, 116, 4, 1, 240, 226, 116, 4, 1, + 227, 74, 116, 4, 1, 224, 140, 116, 4, 1, 220, 218, 116, 4, 1, 220, 120, + 116, 4, 1, 217, 65, 116, 4, 1, 215, 93, 116, 4, 1, 213, 18, 116, 4, 1, + 209, 58, 116, 4, 1, 204, 171, 116, 4, 1, 204, 16, 116, 4, 1, 236, 204, + 116, 4, 1, 234, 95, 116, 4, 1, 217, 4, 116, 4, 1, 216, 73, 116, 4, 1, + 209, 223, 116, 4, 1, 205, 11, 116, 4, 1, 246, 198, 116, 4, 1, 210, 114, + 116, 4, 1, 200, 29, 116, 4, 1, 200, 31, 116, 4, 1, 200, 63, 116, 4, 1, + 208, 220, 144, 116, 4, 1, 199, 211, 116, 4, 1, 4, 199, 181, 116, 4, 1, 4, + 199, 182, 3, 207, 6, 116, 4, 1, 199, 245, 116, 4, 1, 228, 40, 4, 199, + 181, 116, 4, 1, 248, 175, 199, 181, 116, 4, 1, 228, 40, 248, 175, 199, + 181, 116, 4, 1, 237, 63, 116, 4, 1, 227, 253, 116, 4, 1, 209, 222, 116, + 4, 1, 205, 73, 62, 116, 4, 1, 225, 59, 220, 218, 8, 6, 1, 225, 193, 3, + 53, 148, 8, 4, 1, 225, 193, 3, 53, 148, 8, 6, 1, 225, 193, 3, 101, 205, + 240, 8, 6, 1, 216, 227, 3, 97, 8, 6, 1, 214, 33, 3, 207, 6, 8, 4, 1, 35, + 3, 97, 8, 4, 1, 207, 84, 3, 241, 71, 97, 8, 6, 1, 234, 248, 3, 241, 119, + 8, 4, 1, 234, 248, 3, 241, 119, 8, 6, 1, 227, 119, 3, 241, 119, 8, 4, 1, + 227, 119, 3, 241, 119, 8, 6, 1, 199, 158, 3, 241, 119, 8, 4, 1, 199, 158, + 3, 241, 119, 8, 6, 1, 251, 112, 8, 6, 1, 223, 244, 3, 117, 8, 6, 1, 204, + 185, 62, 8, 6, 1, 204, 185, 251, 112, 8, 4, 1, 203, 169, 3, 51, 117, 8, + 6, 1, 201, 148, 3, 117, 8, 4, 1, 201, 148, 3, 117, 8, 4, 1, 203, 169, 3, + 242, 198, 8, 6, 1, 167, 234, 247, 8, 4, 1, 167, 234, 247, 8, 4, 1, 207, + 4, 215, 229, 8, 4, 1, 197, 3, 218, 212, 8, 4, 1, 204, 185, 214, 33, 3, + 207, 6, 8, 4, 1, 163, 3, 128, 213, 27, 228, 73, 8, 1, 4, 6, 204, 185, 72, + 8, 208, 4, 4, 1, 227, 251, 67, 1, 6, 203, 168, 8, 6, 1, 212, 123, 3, 207, + 183, 207, 6, 8, 6, 1, 199, 158, 3, 207, 183, 207, 6, 85, 6, 1, 251, 136, + 85, 4, 1, 251, 136, 85, 6, 1, 202, 231, 85, 4, 1, 202, 231, 85, 6, 1, + 236, 60, 85, 4, 1, 236, 60, 85, 6, 1, 242, 25, 85, 4, 1, 242, 25, 85, 6, + 1, 238, 233, 85, 4, 1, 238, 233, 85, 6, 1, 209, 3, 85, 4, 1, 209, 3, 85, + 6, 1, 199, 96, 85, 4, 1, 199, 96, 85, 6, 1, 234, 154, 85, 4, 1, 234, 154, + 85, 6, 1, 206, 86, 85, 4, 1, 206, 86, 85, 6, 1, 232, 237, 85, 4, 1, 232, + 237, 85, 6, 1, 227, 59, 85, 4, 1, 227, 59, 85, 6, 1, 225, 54, 85, 4, 1, + 225, 54, 85, 6, 1, 221, 211, 85, 4, 1, 221, 211, 85, 6, 1, 219, 150, 85, + 4, 1, 219, 150, 85, 6, 1, 226, 31, 85, 4, 1, 226, 31, 85, 6, 1, 74, 85, + 4, 1, 74, 85, 6, 1, 215, 204, 85, 4, 1, 215, 204, 85, 6, 1, 213, 1, 85, + 4, 1, 213, 1, 85, 6, 1, 209, 151, 85, 4, 1, 209, 151, 85, 6, 1, 206, 221, + 85, 4, 1, 206, 221, 85, 6, 1, 204, 46, 85, 4, 1, 204, 46, 85, 6, 1, 237, + 112, 85, 4, 1, 237, 112, 85, 6, 1, 226, 185, 85, 4, 1, 226, 185, 85, 6, + 1, 214, 235, 85, 4, 1, 214, 235, 85, 6, 1, 217, 57, 85, 4, 1, 217, 57, + 85, 6, 1, 241, 69, 251, 142, 85, 4, 1, 241, 69, 251, 142, 85, 6, 1, 40, + 85, 251, 171, 85, 4, 1, 40, 85, 251, 171, 85, 6, 1, 242, 217, 238, 233, + 85, 4, 1, 242, 217, 238, 233, 85, 6, 1, 241, 69, 227, 59, 85, 4, 1, 241, + 69, 227, 59, 85, 6, 1, 241, 69, 219, 150, 85, 4, 1, 241, 69, 219, 150, + 85, 6, 1, 242, 217, 219, 150, 85, 4, 1, 242, 217, 219, 150, 85, 6, 1, 40, + 85, 217, 57, 85, 4, 1, 40, 85, 217, 57, 85, 6, 1, 212, 16, 85, 4, 1, 212, + 16, 85, 6, 1, 242, 232, 210, 57, 85, 4, 1, 242, 232, 210, 57, 85, 6, 1, + 40, 85, 210, 57, 85, 4, 1, 40, 85, 210, 57, 85, 6, 1, 40, 85, 238, 94, + 85, 4, 1, 40, 85, 238, 94, 85, 6, 1, 251, 155, 226, 190, 85, 4, 1, 251, + 155, 226, 190, 85, 6, 1, 241, 69, 233, 178, 85, 4, 1, 241, 69, 233, 178, + 85, 6, 1, 40, 85, 233, 178, 85, 4, 1, 40, 85, 233, 178, 85, 6, 1, 40, 85, + 144, 85, 4, 1, 40, 85, 144, 85, 6, 1, 225, 192, 144, 85, 4, 1, 225, 192, + 144, 85, 6, 1, 40, 85, 234, 114, 85, 4, 1, 40, 85, 234, 114, 85, 6, 1, + 40, 85, 234, 157, 85, 4, 1, 40, 85, 234, 157, 85, 6, 1, 40, 85, 236, 55, + 85, 4, 1, 40, 85, 236, 55, 85, 6, 1, 40, 85, 240, 229, 85, 4, 1, 40, 85, + 240, 229, 85, 6, 1, 40, 85, 210, 23, 85, 4, 1, 40, 85, 210, 23, 85, 6, 1, + 40, 218, 103, 210, 23, 85, 4, 1, 40, 218, 103, 210, 23, 85, 6, 1, 40, + 218, 103, 219, 201, 85, 4, 1, 40, 218, 103, 219, 201, 85, 6, 1, 40, 218, + 103, 218, 41, 85, 4, 1, 40, 218, 103, 218, 41, 85, 6, 1, 40, 218, 103, + 201, 79, 85, 4, 1, 40, 218, 103, 201, 79, 85, 16, 227, 82, 85, 16, 221, + 212, 213, 1, 85, 16, 215, 205, 213, 1, 85, 16, 208, 100, 85, 16, 206, + 222, 213, 1, 85, 16, 226, 186, 213, 1, 85, 16, 210, 24, 209, 151, 85, 6, + 1, 242, 217, 210, 57, 85, 4, 1, 242, 217, 210, 57, 85, 6, 1, 242, 217, + 236, 55, 85, 4, 1, 242, 217, 236, 55, 85, 38, 219, 151, 56, 85, 38, 208, + 213, 250, 173, 85, 38, 208, 213, 224, 248, 85, 6, 1, 248, 117, 226, 190, + 85, 4, 1, 248, 117, 226, 190, 85, 40, 218, 103, 236, 183, 208, 76, 85, + 40, 218, 103, 241, 10, 214, 79, 81, 85, 40, 218, 103, 228, 97, 214, 79, + 81, 85, 40, 218, 103, 203, 44, 240, 239, 85, 236, 219, 112, 234, 213, 85, + 236, 183, 208, 76, 85, 221, 77, 240, 239, 118, 4, 1, 251, 85, 118, 4, 1, + 249, 88, 118, 4, 1, 236, 59, 118, 4, 1, 240, 190, 118, 4, 1, 238, 179, + 118, 4, 1, 202, 217, 118, 4, 1, 199, 84, 118, 4, 1, 206, 244, 118, 4, 1, + 228, 117, 118, 4, 1, 227, 68, 118, 4, 1, 225, 65, 118, 4, 1, 222, 180, + 118, 4, 1, 220, 125, 118, 4, 1, 217, 78, 118, 4, 1, 216, 130, 118, 4, 1, + 199, 73, 118, 4, 1, 213, 234, 118, 4, 1, 212, 13, 118, 4, 1, 206, 232, + 118, 4, 1, 204, 5, 118, 4, 1, 215, 237, 118, 4, 1, 226, 195, 118, 4, 1, + 235, 190, 118, 4, 1, 214, 144, 118, 4, 1, 210, 21, 118, 4, 1, 246, 223, + 118, 4, 1, 247, 158, 118, 4, 1, 227, 198, 118, 4, 1, 246, 162, 118, 4, 1, + 247, 21, 118, 4, 1, 200, 179, 118, 4, 1, 227, 212, 118, 4, 1, 234, 230, + 118, 4, 1, 234, 139, 118, 4, 1, 234, 69, 118, 4, 1, 201, 64, 118, 4, 1, + 234, 166, 118, 4, 1, 233, 203, 118, 4, 1, 199, 247, 118, 4, 1, 251, 210, + 206, 4, 1, 183, 206, 4, 1, 200, 105, 206, 4, 1, 200, 104, 206, 4, 1, 200, + 94, 206, 4, 1, 200, 92, 206, 4, 1, 248, 214, 251, 253, 200, 87, 206, 4, + 1, 200, 87, 206, 4, 1, 200, 102, 206, 4, 1, 200, 99, 206, 4, 1, 200, 101, + 206, 4, 1, 200, 100, 206, 4, 1, 200, 14, 206, 4, 1, 200, 96, 206, 4, 1, + 200, 85, 206, 4, 1, 204, 212, 200, 85, 206, 4, 1, 200, 82, 206, 4, 1, + 200, 90, 206, 4, 1, 248, 214, 251, 253, 200, 90, 206, 4, 1, 204, 212, + 200, 90, 206, 4, 1, 200, 89, 206, 4, 1, 200, 109, 206, 4, 1, 200, 83, + 206, 4, 1, 204, 212, 200, 83, 206, 4, 1, 200, 72, 206, 4, 1, 204, 212, + 200, 72, 206, 4, 1, 200, 9, 206, 4, 1, 200, 53, 206, 4, 1, 251, 183, 200, + 53, 206, 4, 1, 204, 212, 200, 53, 206, 4, 1, 200, 81, 206, 4, 1, 200, 80, + 206, 4, 1, 200, 77, 206, 4, 1, 204, 212, 200, 91, 206, 4, 1, 204, 212, + 200, 75, 206, 4, 1, 200, 73, 206, 4, 1, 199, 211, 206, 4, 1, 200, 70, + 206, 4, 1, 200, 69, 206, 4, 1, 200, 93, 206, 4, 1, 204, 212, 200, 93, + 206, 4, 1, 250, 108, 200, 93, 206, 4, 1, 200, 68, 206, 4, 1, 200, 66, + 206, 4, 1, 200, 67, 206, 4, 1, 200, 65, 206, 4, 1, 200, 64, 206, 4, 1, + 200, 103, 206, 4, 1, 200, 62, 206, 4, 1, 200, 60, 206, 4, 1, 200, 59, + 206, 4, 1, 200, 57, 206, 4, 1, 200, 54, 206, 4, 1, 206, 213, 200, 54, + 206, 4, 1, 200, 52, 206, 4, 1, 200, 51, 206, 4, 1, 199, 245, 206, 4, 67, + 1, 225, 166, 81, 206, 4, 210, 155, 81, 206, 4, 111, 227, 161, 34, 5, 224, + 109, 34, 5, 221, 135, 34, 5, 212, 255, 34, 5, 209, 28, 34, 5, 210, 7, 34, + 5, 248, 123, 34, 5, 205, 185, 34, 5, 246, 90, 34, 5, 218, 239, 34, 5, + 218, 25, 34, 5, 235, 123, 217, 146, 34, 5, 199, 13, 34, 5, 240, 209, 34, + 5, 241, 189, 34, 5, 227, 165, 34, 5, 206, 60, 34, 5, 246, 209, 34, 5, + 215, 216, 34, 5, 215, 105, 34, 5, 235, 205, 34, 5, 235, 201, 34, 5, 235, + 202, 34, 5, 235, 203, 34, 5, 208, 179, 34, 5, 208, 134, 34, 5, 208, 147, + 34, 5, 208, 178, 34, 5, 208, 152, 34, 5, 208, 153, 34, 5, 208, 139, 34, + 5, 247, 99, 34, 5, 247, 78, 34, 5, 247, 80, 34, 5, 247, 98, 34, 5, 247, + 96, 34, 5, 247, 97, 34, 5, 247, 79, 34, 5, 198, 232, 34, 5, 198, 210, 34, + 5, 198, 223, 34, 5, 198, 231, 34, 5, 198, 226, 34, 5, 198, 227, 34, 5, + 198, 215, 34, 5, 247, 94, 34, 5, 247, 81, 34, 5, 247, 83, 34, 5, 247, 93, + 34, 5, 247, 91, 34, 5, 247, 92, 34, 5, 247, 82, 34, 5, 214, 45, 34, 5, + 214, 35, 34, 5, 214, 41, 34, 5, 214, 44, 34, 5, 214, 42, 34, 5, 214, 43, + 34, 5, 214, 40, 34, 5, 225, 203, 34, 5, 225, 195, 34, 5, 225, 198, 34, 5, + 225, 202, 34, 5, 225, 199, 34, 5, 225, 200, 34, 5, 225, 196, 34, 5, 200, + 139, 34, 5, 200, 126, 34, 5, 200, 134, 34, 5, 200, 138, 34, 5, 200, 136, + 34, 5, 200, 137, 34, 5, 200, 133, 34, 5, 235, 3, 34, 5, 234, 249, 34, 5, + 234, 252, 34, 5, 235, 2, 34, 5, 234, 254, 34, 5, 234, 255, 34, 5, 234, + 251, 38, 37, 1, 249, 8, 38, 37, 1, 203, 59, 38, 37, 1, 235, 185, 38, 37, + 1, 241, 175, 38, 37, 1, 199, 68, 38, 37, 1, 199, 89, 38, 37, 1, 161, 38, + 37, 1, 238, 209, 38, 37, 1, 238, 190, 38, 37, 1, 238, 179, 38, 37, 1, 74, + 38, 37, 1, 216, 73, 38, 37, 1, 238, 115, 38, 37, 1, 238, 104, 38, 37, 1, + 206, 201, 38, 37, 1, 144, 38, 37, 1, 205, 26, 38, 37, 1, 247, 8, 38, 37, + 1, 210, 114, 38, 37, 1, 210, 68, 38, 37, 1, 237, 63, 38, 37, 1, 238, 100, + 38, 37, 1, 62, 38, 37, 1, 228, 178, 38, 37, 1, 240, 227, 38, 37, 1, 221, + 95, 204, 20, 38, 37, 1, 200, 65, 38, 37, 1, 199, 211, 38, 37, 1, 228, 39, + 62, 38, 37, 1, 224, 148, 199, 181, 38, 37, 1, 248, 175, 199, 181, 38, 37, + 1, 228, 39, 248, 175, 199, 181, 51, 251, 71, 207, 255, 222, 145, 51, 251, + 71, 239, 180, 207, 255, 222, 145, 49, 207, 255, 159, 51, 207, 255, 159, + 49, 239, 180, 207, 255, 159, 51, 239, 180, 207, 255, 159, 213, 220, 228, + 60, 222, 145, 213, 220, 239, 180, 228, 60, 222, 145, 239, 180, 205, 116, + 222, 145, 49, 205, 116, 159, 51, 205, 116, 159, 213, 220, 208, 193, 49, + 213, 220, 217, 80, 159, 51, 213, 220, 217, 80, 159, 239, 0, 243, 13, 216, + 126, 236, 244, 216, 126, 213, 105, 236, 244, 216, 126, 233, 30, 239, 180, + 217, 141, 191, 251, 80, 182, 251, 80, 239, 180, 213, 41, 251, 70, 53, + 217, 138, 233, 33, 228, 50, 228, 58, 216, 177, 248, 66, 233, 34, 3, 241, + 74, 205, 241, 3, 213, 27, 56, 49, 128, 216, 118, 159, 51, 128, 216, 118, + 159, 205, 241, 3, 73, 56, 205, 241, 3, 73, 57, 49, 83, 249, 77, 3, 214, + 73, 51, 83, 249, 77, 3, 214, 73, 205, 158, 49, 167, 159, 205, 158, 51, + 167, 159, 248, 93, 49, 167, 159, 248, 93, 51, 167, 159, 49, 209, 173, + 108, 159, 51, 209, 173, 108, 159, 49, 53, 216, 115, 51, 53, 216, 115, + 120, 190, 119, 112, 73, 214, 211, 112, 73, 119, 120, 190, 214, 211, 95, + 236, 229, 73, 214, 211, 237, 61, 73, 81, 213, 105, 214, 79, 81, 83, 205, + 240, 213, 27, 215, 99, 200, 238, 210, 155, 101, 240, 182, 204, 185, 246, + 70, 213, 220, 240, 182, 213, 220, 246, 70, 204, 185, 210, 167, 242, 41, + 3, 49, 235, 44, 242, 41, 3, 51, 235, 44, 204, 185, 242, 40, 205, 158, + 167, 211, 193, 54, 204, 142, 241, 244, 206, 44, 241, 244, 208, 91, 236, + 183, 208, 76, 83, 209, 106, 240, 180, 201, 22, 83, 224, 176, 247, 142, + 53, 233, 33, 213, 105, 246, 70, 53, 224, 55, 214, 63, 81, 241, 245, 3, + 49, 203, 219, 53, 207, 196, 81, 12, 42, 213, 132, 12, 42, 246, 120, 12, + 42, 211, 196, 102, 12, 42, 211, 196, 105, 12, 42, 211, 196, 147, 12, 42, + 216, 10, 12, 42, 248, 78, 12, 42, 207, 22, 12, 42, 226, 96, 102, 12, 42, + 226, 96, 105, 12, 42, 240, 236, 12, 42, 211, 200, 12, 42, 4, 102, 12, 42, + 4, 105, 12, 42, 225, 86, 102, 12, 42, 225, 86, 105, 12, 42, 225, 86, 147, + 12, 42, 225, 86, 149, 12, 42, 209, 41, 12, 42, 206, 47, 12, 42, 209, 38, + 102, 12, 42, 209, 38, 105, 12, 42, 234, 128, 102, 12, 42, 234, 128, 105, + 12, 42, 234, 199, 12, 42, 213, 210, 12, 42, 246, 206, 12, 42, 207, 228, + 12, 42, 221, 81, 12, 42, 241, 173, 12, 42, 221, 71, 12, 42, 246, 138, 12, + 42, 201, 83, 102, 12, 42, 201, 83, 105, 12, 42, 237, 77, 12, 42, 216, 85, + 102, 12, 42, 216, 85, 105, 12, 42, 209, 146, 167, 205, 109, 205, 37, 12, + 42, 242, 255, 12, 42, 240, 200, 12, 42, 227, 243, 12, 42, 248, 116, 76, + 246, 104, 12, 42, 238, 22, 12, 42, 208, 215, 102, 12, 42, 208, 215, 105, + 12, 42, 249, 90, 12, 42, 209, 153, 12, 42, 247, 220, 209, 153, 12, 42, + 220, 14, 102, 12, 42, 220, 14, 105, 12, 42, 220, 14, 147, 12, 42, 220, + 14, 149, 12, 42, 222, 27, 12, 42, 210, 59, 12, 42, 213, 216, 12, 42, 238, + 50, 12, 42, 217, 92, 12, 42, 248, 44, 102, 12, 42, 248, 44, 105, 12, 42, + 222, 71, 12, 42, 221, 76, 12, 42, 235, 77, 102, 12, 42, 235, 77, 105, 12, + 42, 235, 77, 147, 12, 42, 206, 2, 12, 42, 246, 103, 12, 42, 201, 48, 102, + 12, 42, 201, 48, 105, 12, 42, 247, 220, 211, 190, 12, 42, 209, 146, 233, + 124, 12, 42, 233, 124, 12, 42, 247, 220, 208, 227, 12, 42, 247, 220, 210, + 54, 12, 42, 236, 255, 12, 42, 247, 220, 247, 118, 12, 42, 209, 146, 201, + 104, 12, 42, 201, 105, 102, 12, 42, 201, 105, 105, 12, 42, 246, 141, 12, + 42, 247, 220, 235, 108, 12, 42, 168, 102, 12, 42, 168, 105, 12, 42, 247, + 220, 224, 89, 12, 42, 247, 220, 236, 41, 12, 42, 221, 67, 102, 12, 42, + 221, 67, 105, 12, 42, 213, 222, 12, 42, 248, 126, 12, 42, 247, 220, 206, + 238, 225, 34, 12, 42, 247, 220, 225, 35, 12, 42, 247, 220, 201, 16, 12, + 42, 247, 220, 237, 17, 12, 42, 239, 11, 102, 12, 42, 239, 11, 105, 12, + 42, 239, 11, 147, 12, 42, 247, 220, 239, 10, 12, 42, 234, 136, 12, 42, + 247, 220, 233, 120, 12, 42, 248, 112, 12, 42, 235, 169, 12, 42, 247, 220, + 237, 71, 12, 42, 247, 220, 248, 162, 12, 42, 247, 220, 212, 27, 12, 42, + 209, 146, 201, 39, 12, 42, 209, 146, 200, 43, 12, 42, 247, 220, 236, 202, + 12, 42, 227, 250, 238, 55, 12, 42, 247, 220, 238, 55, 12, 42, 227, 250, + 205, 159, 12, 42, 247, 220, 205, 159, 12, 42, 227, 250, 239, 158, 12, 42, + 247, 220, 239, 158, 12, 42, 204, 182, 12, 42, 227, 250, 204, 182, 12, 42, + 247, 220, 204, 182, 75, 42, 102, 75, 42, 224, 176, 75, 42, 240, 182, 75, + 42, 209, 75, 75, 42, 211, 195, 75, 42, 117, 75, 42, 105, 75, 42, 224, + 205, 75, 42, 222, 180, 75, 42, 225, 13, 75, 42, 238, 154, 75, 42, 192, + 75, 42, 127, 248, 78, 75, 42, 243, 1, 75, 42, 232, 231, 75, 42, 207, 22, + 75, 42, 176, 248, 78, 75, 42, 226, 95, 75, 42, 215, 51, 75, 42, 200, 228, + 75, 42, 208, 206, 75, 42, 51, 176, 248, 78, 75, 42, 234, 70, 238, 174, + 75, 42, 206, 166, 75, 42, 240, 236, 75, 42, 211, 200, 75, 42, 246, 120, + 75, 42, 215, 3, 75, 42, 251, 192, 75, 42, 221, 58, 75, 42, 238, 174, 75, + 42, 239, 17, 75, 42, 211, 223, 75, 42, 235, 116, 75, 42, 235, 117, 209, + 55, 75, 42, 238, 54, 75, 42, 248, 174, 75, 42, 200, 250, 75, 42, 246, + 227, 75, 42, 212, 237, 75, 42, 228, 113, 75, 42, 209, 53, 75, 42, 225, + 85, 75, 42, 243, 11, 75, 42, 208, 197, 75, 42, 221, 63, 75, 42, 213, 15, + 75, 42, 200, 235, 75, 42, 217, 70, 75, 42, 204, 191, 75, 42, 239, 139, + 75, 42, 209, 250, 206, 47, 75, 42, 239, 180, 246, 120, 75, 42, 168, 208, + 53, 75, 42, 120, 234, 174, 75, 42, 210, 0, 75, 42, 248, 85, 75, 42, 209, + 37, 75, 42, 248, 48, 75, 42, 208, 90, 75, 42, 234, 127, 75, 42, 234, 214, + 75, 42, 240, 185, 75, 42, 234, 199, 75, 42, 248, 66, 75, 42, 213, 210, + 75, 42, 211, 208, 75, 42, 241, 12, 75, 42, 250, 113, 75, 42, 208, 193, + 75, 42, 218, 214, 75, 42, 207, 228, 75, 42, 211, 234, 75, 42, 221, 81, + 75, 42, 205, 108, 75, 42, 225, 162, 75, 42, 208, 76, 75, 42, 241, 173, + 75, 42, 201, 63, 75, 42, 240, 212, 218, 214, 75, 42, 246, 66, 75, 42, + 236, 176, 75, 42, 246, 132, 75, 42, 208, 95, 75, 42, 201, 82, 75, 42, + 237, 77, 75, 42, 246, 128, 75, 42, 237, 154, 75, 42, 53, 200, 195, 75, + 42, 167, 205, 109, 205, 37, 75, 42, 209, 67, 75, 42, 237, 166, 75, 42, + 242, 255, 75, 42, 240, 200, 75, 42, 215, 0, 75, 42, 227, 243, 75, 42, + 222, 49, 75, 42, 205, 239, 75, 42, 207, 178, 75, 42, 224, 199, 75, 42, + 203, 195, 75, 42, 237, 110, 75, 42, 248, 116, 76, 246, 104, 75, 42, 209, + 178, 75, 42, 239, 180, 206, 158, 75, 42, 201, 34, 75, 42, 209, 83, 75, + 42, 240, 255, 75, 42, 238, 22, 75, 42, 208, 230, 75, 42, 48, 75, 42, 208, + 78, 75, 42, 208, 214, 75, 42, 205, 131, 75, 42, 235, 86, 75, 42, 247, + 104, 75, 42, 208, 113, 75, 42, 249, 90, 75, 42, 213, 83, 75, 42, 209, + 153, 75, 42, 227, 235, 75, 42, 220, 13, 75, 42, 210, 59, 75, 42, 237, + 142, 75, 42, 217, 92, 75, 42, 251, 79, 75, 42, 215, 120, 75, 42, 239, 21, + 75, 42, 248, 43, 75, 42, 222, 71, 75, 42, 221, 158, 75, 42, 210, 174, 75, + 42, 250, 206, 75, 42, 221, 76, 75, 42, 205, 163, 75, 42, 217, 41, 75, 42, + 248, 120, 75, 42, 208, 74, 75, 42, 246, 78, 75, 42, 235, 76, 75, 42, 206, + 2, 75, 42, 228, 76, 75, 42, 248, 132, 75, 42, 201, 105, 238, 174, 75, 42, + 246, 103, 75, 42, 201, 47, 75, 42, 211, 190, 75, 42, 233, 124, 75, 42, + 208, 227, 75, 42, 203, 83, 75, 42, 249, 3, 75, 42, 215, 168, 75, 42, 249, + 116, 75, 42, 210, 54, 75, 42, 213, 169, 75, 42, 212, 158, 75, 42, 236, + 255, 75, 42, 248, 118, 75, 42, 247, 118, 75, 42, 248, 149, 75, 42, 221, + 78, 75, 42, 201, 104, 75, 42, 246, 141, 75, 42, 201, 12, 75, 42, 240, + 247, 75, 42, 202, 218, 75, 42, 235, 108, 75, 42, 224, 89, 75, 42, 236, + 41, 75, 42, 221, 66, 75, 42, 209, 74, 75, 42, 209, 250, 207, 5, 248, 162, + 75, 42, 213, 222, 75, 42, 248, 126, 75, 42, 200, 218, 75, 42, 237, 189, + 75, 42, 225, 34, 75, 42, 206, 238, 225, 34, 75, 42, 225, 30, 75, 42, 209, + 0, 75, 42, 225, 35, 75, 42, 201, 16, 75, 42, 237, 17, 75, 42, 239, 10, + 75, 42, 234, 136, 75, 42, 236, 217, 75, 42, 233, 120, 75, 42, 248, 112, + 75, 42, 206, 247, 75, 42, 234, 221, 75, 42, 237, 103, 75, 42, 212, 58, + 201, 12, 75, 42, 247, 106, 75, 42, 235, 169, 75, 42, 237, 71, 75, 42, + 248, 162, 75, 42, 212, 27, 75, 42, 241, 158, 75, 42, 201, 39, 75, 42, + 234, 106, 75, 42, 200, 43, 75, 42, 221, 169, 75, 42, 248, 144, 75, 42, + 238, 186, 75, 42, 236, 202, 75, 42, 205, 80, 75, 42, 239, 142, 75, 42, + 213, 204, 75, 42, 218, 216, 75, 42, 238, 55, 75, 42, 205, 159, 75, 42, + 239, 158, 75, 42, 204, 182, 75, 42, 237, 20, 141, 241, 117, 171, 49, 205, + 186, 213, 46, 141, 241, 117, 171, 88, 205, 186, 57, 141, 241, 117, 171, + 49, 205, 186, 101, 26, 213, 46, 141, 241, 117, 171, 88, 205, 186, 101, + 26, 57, 141, 241, 117, 171, 236, 183, 207, 200, 141, 241, 117, 171, 207, + 201, 236, 201, 56, 141, 241, 117, 171, 207, 201, 236, 201, 57, 141, 241, + 117, 171, 207, 201, 236, 201, 225, 28, 141, 241, 117, 171, 207, 201, 236, + 201, 203, 225, 225, 28, 141, 241, 117, 171, 207, 201, 236, 201, 203, 225, + 213, 46, 141, 241, 117, 171, 207, 201, 236, 201, 224, 54, 225, 28, 141, + 241, 117, 171, 216, 245, 141, 208, 244, 141, 246, 70, 141, 236, 183, 208, + 76, 240, 244, 81, 227, 236, 228, 96, 208, 112, 99, 141, 228, 10, 81, 141, + 246, 106, 81, 141, 41, 199, 81, 49, 251, 71, 159, 51, 251, 71, 159, 49, + 53, 251, 71, 159, 51, 53, 251, 71, 159, 49, 243, 16, 159, 51, 243, 16, + 159, 49, 64, 243, 16, 159, 51, 64, 243, 16, 159, 49, 63, 224, 247, 159, + 51, 63, 224, 247, 159, 215, 65, 81, 235, 238, 81, 49, 205, 146, 210, 55, + 159, 51, 205, 146, 210, 55, 159, 49, 64, 224, 247, 159, 51, 64, 224, 247, + 159, 49, 64, 205, 146, 210, 55, 159, 51, 64, 205, 146, 210, 55, 159, 49, + 64, 52, 159, 51, 64, 52, 159, 201, 78, 241, 244, 213, 105, 53, 215, 15, + 214, 63, 81, 53, 215, 15, 214, 63, 81, 128, 53, 215, 15, 214, 63, 81, + 215, 65, 134, 237, 189, 234, 171, 218, 93, 102, 234, 171, 218, 93, 105, + 234, 171, 218, 93, 147, 234, 171, 218, 93, 149, 234, 171, 218, 93, 164, + 234, 171, 218, 93, 187, 234, 171, 218, 93, 210, 135, 234, 171, 218, 93, + 192, 234, 171, 218, 93, 219, 113, 141, 224, 229, 150, 81, 141, 213, 19, + 150, 81, 141, 241, 126, 150, 81, 141, 238, 153, 150, 81, 29, 209, 139, + 73, 150, 81, 29, 53, 73, 150, 81, 201, 74, 241, 244, 83, 227, 67, 213, + 133, 81, 83, 227, 67, 213, 133, 3, 202, 189, 209, 1, 81, 83, 227, 67, + 213, 133, 134, 203, 225, 234, 213, 83, 227, 67, 213, 133, 3, 202, 189, + 209, 1, 134, 203, 225, 234, 213, 83, 227, 67, 213, 133, 134, 224, 54, + 234, 213, 44, 215, 65, 81, 141, 206, 178, 224, 177, 237, 139, 210, 155, + 99, 234, 171, 218, 93, 206, 166, 234, 171, 218, 93, 204, 159, 234, 171, + 218, 93, 206, 67, 83, 141, 228, 10, 81, 222, 128, 81, 216, 110, 251, 105, + 81, 141, 58, 228, 99, 141, 167, 237, 96, 208, 244, 177, 1, 4, 62, 177, 1, + 62, 177, 1, 4, 70, 177, 1, 70, 177, 1, 4, 66, 177, 1, 66, 177, 1, 4, 72, + 177, 1, 72, 177, 1, 4, 74, 177, 1, 74, 177, 1, 161, 177, 1, 236, 89, 177, + 1, 226, 163, 177, 1, 235, 161, 177, 1, 226, 15, 177, 1, 235, 50, 177, 1, + 227, 8, 177, 1, 236, 15, 177, 1, 226, 88, 177, 1, 235, 116, 177, 1, 212, + 64, 177, 1, 199, 114, 177, 1, 209, 182, 177, 1, 199, 36, 177, 1, 208, 24, + 177, 1, 199, 3, 177, 1, 211, 202, 177, 1, 199, 89, 177, 1, 209, 29, 177, + 1, 199, 14, 177, 1, 207, 36, 177, 1, 242, 58, 177, 1, 206, 15, 177, 1, + 241, 76, 177, 1, 4, 204, 215, 177, 1, 204, 215, 177, 1, 239, 137, 177, 1, + 206, 201, 177, 1, 241, 175, 177, 1, 138, 177, 1, 240, 211, 177, 1, 188, + 177, 1, 219, 150, 177, 1, 218, 133, 177, 1, 220, 34, 177, 1, 218, 241, + 177, 1, 144, 177, 1, 249, 136, 177, 1, 172, 177, 1, 234, 75, 177, 1, 248, + 188, 177, 1, 215, 204, 177, 1, 233, 97, 177, 1, 248, 36, 177, 1, 214, + 224, 177, 1, 234, 139, 177, 1, 249, 8, 177, 1, 216, 73, 177, 1, 233, 207, + 177, 1, 248, 124, 177, 1, 215, 106, 177, 1, 178, 177, 1, 221, 211, 177, + 1, 221, 41, 177, 1, 222, 76, 177, 1, 221, 136, 177, 1, 4, 183, 177, 1, + 183, 177, 1, 4, 199, 211, 177, 1, 199, 211, 177, 1, 4, 199, 245, 177, 1, + 199, 245, 177, 1, 213, 252, 177, 1, 213, 88, 177, 1, 212, 175, 177, 1, + 213, 190, 177, 1, 213, 1, 177, 1, 4, 201, 114, 177, 1, 201, 114, 177, 1, + 201, 31, 177, 1, 201, 64, 177, 1, 201, 0, 177, 1, 220, 214, 177, 1, 201, + 166, 177, 1, 4, 161, 177, 1, 4, 227, 8, 38, 227, 32, 202, 189, 209, 1, + 81, 38, 227, 32, 210, 172, 209, 1, 81, 227, 32, 202, 189, 209, 1, 81, + 227, 32, 210, 172, 209, 1, 81, 177, 228, 10, 81, 177, 202, 189, 228, 10, + 81, 177, 241, 35, 199, 226, 227, 32, 53, 233, 33, 69, 1, 4, 62, 69, 1, + 62, 69, 1, 4, 70, 69, 1, 70, 69, 1, 4, 66, 69, 1, 66, 69, 1, 4, 72, 69, + 1, 72, 69, 1, 4, 74, 69, 1, 74, 69, 1, 161, 69, 1, 236, 89, 69, 1, 226, + 163, 69, 1, 235, 161, 69, 1, 226, 15, 69, 1, 235, 50, 69, 1, 227, 8, 69, + 1, 236, 15, 69, 1, 226, 88, 69, 1, 235, 116, 69, 1, 212, 64, 69, 1, 199, + 114, 69, 1, 209, 182, 69, 1, 199, 36, 69, 1, 208, 24, 69, 1, 199, 3, 69, + 1, 211, 202, 69, 1, 199, 89, 69, 1, 209, 29, 69, 1, 199, 14, 69, 1, 207, + 36, 69, 1, 242, 58, 69, 1, 206, 15, 69, 1, 241, 76, 69, 1, 4, 204, 215, + 69, 1, 204, 215, 69, 1, 239, 137, 69, 1, 206, 201, 69, 1, 241, 175, 69, + 1, 138, 69, 1, 240, 211, 69, 1, 188, 69, 1, 219, 150, 69, 1, 218, 133, + 69, 1, 220, 34, 69, 1, 218, 241, 69, 1, 144, 69, 1, 249, 136, 69, 1, 172, + 69, 1, 234, 75, 69, 1, 248, 188, 69, 1, 215, 204, 69, 1, 233, 97, 69, 1, + 248, 36, 69, 1, 214, 224, 69, 1, 234, 139, 69, 1, 249, 8, 69, 1, 216, 73, + 69, 1, 233, 207, 69, 1, 248, 124, 69, 1, 215, 106, 69, 1, 178, 69, 1, + 221, 211, 69, 1, 221, 41, 69, 1, 222, 76, 69, 1, 221, 136, 69, 1, 4, 183, + 69, 1, 183, 69, 1, 4, 199, 211, 69, 1, 199, 211, 69, 1, 4, 199, 245, 69, + 1, 199, 245, 69, 1, 213, 252, 69, 1, 213, 88, 69, 1, 212, 175, 69, 1, + 213, 190, 69, 1, 213, 1, 69, 1, 4, 201, 114, 69, 1, 201, 114, 69, 1, 201, + 31, 69, 1, 201, 64, 69, 1, 201, 0, 69, 1, 220, 214, 69, 1, 201, 166, 69, + 1, 4, 161, 69, 1, 4, 227, 8, 69, 1, 203, 90, 69, 1, 202, 234, 69, 1, 203, + 59, 69, 1, 202, 193, 69, 101, 240, 182, 227, 32, 214, 248, 209, 1, 81, + 69, 228, 10, 81, 69, 202, 189, 228, 10, 81, 69, 241, 35, 226, 55, 248, + 102, 1, 250, 103, 248, 102, 1, 216, 226, 248, 102, 1, 223, 243, 248, 102, + 1, 238, 5, 248, 102, 1, 242, 153, 248, 102, 1, 207, 83, 248, 102, 1, 220, + 214, 248, 102, 1, 156, 248, 102, 1, 236, 156, 248, 102, 1, 227, 118, 248, + 102, 1, 234, 247, 248, 102, 1, 227, 251, 248, 102, 1, 214, 167, 248, 102, + 1, 200, 195, 248, 102, 1, 199, 78, 248, 102, 1, 247, 38, 248, 102, 1, + 210, 116, 248, 102, 1, 146, 248, 102, 1, 199, 157, 248, 102, 1, 247, 223, + 248, 102, 1, 212, 122, 248, 102, 1, 62, 248, 102, 1, 74, 248, 102, 1, 72, + 248, 102, 1, 238, 241, 248, 102, 1, 251, 176, 248, 102, 1, 238, 234, 248, + 102, 1, 250, 139, 248, 102, 1, 217, 3, 248, 102, 1, 251, 85, 248, 102, 1, + 238, 179, 248, 102, 1, 251, 76, 248, 102, 1, 238, 165, 248, 102, 1, 238, + 115, 248, 102, 1, 70, 248, 102, 1, 66, 248, 102, 1, 228, 8, 248, 102, 1, + 203, 168, 248, 102, 1, 219, 255, 248, 102, 1, 235, 120, 248, 102, 1, 228, + 152, 29, 1, 226, 121, 29, 1, 208, 171, 29, 1, 226, 114, 29, 1, 219, 143, + 29, 1, 219, 141, 29, 1, 219, 140, 29, 1, 205, 253, 29, 1, 208, 160, 29, + 1, 213, 78, 29, 1, 213, 73, 29, 1, 213, 70, 29, 1, 213, 63, 29, 1, 213, + 58, 29, 1, 213, 53, 29, 1, 213, 64, 29, 1, 213, 76, 29, 1, 221, 197, 29, + 1, 215, 190, 29, 1, 208, 168, 29, 1, 215, 179, 29, 1, 209, 129, 29, 1, + 208, 165, 29, 1, 228, 174, 29, 1, 246, 168, 29, 1, 208, 175, 29, 1, 246, + 232, 29, 1, 226, 183, 29, 1, 206, 80, 29, 1, 215, 227, 29, 1, 234, 66, + 29, 1, 62, 29, 1, 251, 221, 29, 1, 183, 29, 1, 200, 98, 29, 1, 238, 142, + 29, 1, 72, 29, 1, 200, 38, 29, 1, 200, 51, 29, 1, 74, 29, 1, 201, 114, + 29, 1, 201, 110, 29, 1, 217, 121, 29, 1, 199, 245, 29, 1, 66, 29, 1, 201, + 50, 29, 1, 201, 64, 29, 1, 201, 31, 29, 1, 199, 211, 29, 1, 238, 69, 29, + 1, 200, 9, 29, 1, 70, 29, 237, 93, 29, 1, 208, 169, 29, 1, 219, 133, 29, + 1, 219, 135, 29, 1, 219, 138, 29, 1, 213, 71, 29, 1, 213, 52, 29, 1, 213, + 60, 29, 1, 213, 65, 29, 1, 213, 50, 29, 1, 221, 190, 29, 1, 221, 187, 29, + 1, 221, 191, 29, 1, 227, 53, 29, 1, 215, 185, 29, 1, 215, 171, 29, 1, + 215, 177, 29, 1, 215, 174, 29, 1, 215, 188, 29, 1, 215, 172, 29, 1, 227, + 51, 29, 1, 227, 49, 29, 1, 209, 122, 29, 1, 209, 120, 29, 1, 209, 112, + 29, 1, 209, 117, 29, 1, 209, 127, 29, 1, 216, 146, 29, 1, 208, 172, 29, + 1, 200, 28, 29, 1, 200, 24, 29, 1, 200, 25, 29, 1, 227, 52, 29, 1, 208, + 173, 29, 1, 200, 34, 29, 1, 199, 239, 29, 1, 199, 238, 29, 1, 199, 241, + 29, 1, 199, 202, 29, 1, 199, 203, 29, 1, 199, 206, 29, 1, 250, 245, 29, + 1, 250, 239, 141, 251, 58, 224, 165, 81, 141, 251, 58, 213, 106, 81, 141, + 251, 58, 112, 81, 141, 251, 58, 120, 81, 141, 251, 58, 126, 81, 141, 251, + 58, 236, 229, 81, 141, 251, 58, 205, 158, 81, 141, 251, 58, 101, 81, 141, + 251, 58, 248, 93, 81, 141, 251, 58, 237, 73, 81, 141, 251, 58, 211, 196, + 81, 141, 251, 58, 206, 75, 81, 141, 251, 58, 236, 222, 81, 141, 251, 58, + 234, 124, 81, 141, 251, 58, 239, 18, 81, 141, 251, 58, 222, 181, 81, 248, + 102, 1, 248, 36, 248, 102, 1, 199, 36, 248, 102, 1, 227, 207, 248, 102, + 1, 235, 50, 248, 102, 1, 238, 255, 248, 102, 1, 238, 162, 248, 102, 1, + 217, 63, 248, 102, 1, 217, 67, 248, 102, 1, 228, 35, 248, 102, 1, 251, + 60, 248, 102, 1, 228, 83, 248, 102, 1, 203, 233, 248, 102, 1, 228, 134, + 248, 102, 1, 219, 233, 248, 102, 1, 251, 170, 248, 102, 1, 250, 134, 248, + 102, 1, 251, 101, 248, 102, 1, 217, 86, 248, 102, 1, 217, 69, 248, 102, + 1, 228, 80, 248, 102, 47, 1, 216, 226, 248, 102, 47, 1, 207, 83, 248, + 102, 47, 1, 227, 118, 248, 102, 47, 1, 234, 247, 248, 102, 1, 235, 200, + 248, 102, 1, 224, 224, 248, 102, 1, 198, 239, 12, 208, 47, 207, 83, 12, + 208, 47, 201, 42, 12, 208, 47, 200, 170, 12, 208, 47, 247, 236, 12, 208, + 47, 207, 187, 12, 208, 47, 233, 23, 12, 208, 47, 233, 27, 12, 208, 47, + 233, 106, 12, 208, 47, 233, 24, 12, 208, 47, 207, 86, 12, 208, 47, 233, + 26, 12, 208, 47, 233, 22, 12, 208, 47, 233, 104, 12, 208, 47, 233, 25, + 12, 208, 47, 233, 21, 12, 208, 47, 220, 214, 12, 208, 47, 234, 247, 12, + 208, 47, 212, 122, 12, 208, 47, 216, 226, 12, 208, 47, 208, 247, 12, 208, + 47, 242, 153, 12, 208, 47, 233, 28, 12, 208, 47, 234, 85, 12, 208, 47, + 207, 95, 12, 208, 47, 207, 166, 12, 208, 47, 208, 123, 12, 208, 47, 210, + 122, 12, 208, 47, 216, 77, 12, 208, 47, 214, 169, 12, 208, 47, 205, 187, + 12, 208, 47, 207, 85, 12, 208, 47, 207, 177, 12, 208, 47, 233, 37, 12, + 208, 47, 233, 20, 12, 208, 47, 215, 247, 12, 208, 47, 214, 167, 69, 1, 4, + 226, 15, 69, 1, 4, 209, 182, 69, 1, 4, 208, 24, 69, 1, 4, 138, 69, 1, 4, + 218, 133, 69, 1, 4, 144, 69, 1, 4, 234, 75, 69, 1, 4, 233, 97, 69, 1, 4, + 234, 139, 69, 1, 4, 233, 207, 69, 1, 4, 221, 41, 69, 1, 4, 213, 252, 69, + 1, 4, 213, 88, 69, 1, 4, 212, 175, 69, 1, 4, 213, 190, 69, 1, 4, 213, 1, + 106, 29, 226, 121, 106, 29, 219, 143, 106, 29, 205, 253, 106, 29, 213, + 78, 106, 29, 221, 197, 106, 29, 215, 190, 106, 29, 209, 129, 106, 29, + 228, 174, 106, 29, 246, 168, 106, 29, 246, 232, 106, 29, 226, 183, 106, + 29, 206, 80, 106, 29, 215, 227, 106, 29, 234, 66, 106, 29, 226, 122, 62, + 106, 29, 219, 144, 62, 106, 29, 205, 254, 62, 106, 29, 213, 79, 62, 106, + 29, 221, 198, 62, 106, 29, 215, 191, 62, 106, 29, 209, 130, 62, 106, 29, + 228, 175, 62, 106, 29, 246, 169, 62, 106, 29, 246, 233, 62, 106, 29, 226, + 184, 62, 106, 29, 206, 81, 62, 106, 29, 215, 228, 62, 106, 29, 234, 67, + 62, 106, 29, 246, 169, 66, 106, 226, 59, 171, 217, 101, 106, 226, 59, + 171, 163, 233, 97, 106, 198, 198, 102, 106, 198, 198, 105, 106, 198, 198, + 147, 106, 198, 198, 149, 106, 198, 198, 164, 106, 198, 198, 187, 106, + 198, 198, 210, 135, 106, 198, 198, 192, 106, 198, 198, 219, 113, 106, + 198, 198, 206, 166, 106, 198, 198, 221, 81, 106, 198, 198, 237, 77, 106, + 198, 198, 201, 82, 106, 198, 198, 200, 243, 106, 198, 198, 222, 20, 106, + 198, 198, 239, 17, 106, 198, 198, 207, 228, 106, 198, 198, 208, 79, 106, + 198, 198, 234, 148, 106, 198, 198, 209, 25, 106, 198, 198, 220, 135, 106, + 198, 198, 208, 229, 106, 198, 198, 237, 88, 106, 198, 198, 243, 61, 106, + 198, 198, 225, 165, 106, 198, 198, 213, 127, 106, 198, 198, 247, 168, + 106, 198, 198, 208, 29, 106, 198, 198, 207, 210, 106, 198, 198, 238, 152, + 106, 198, 198, 213, 119, 106, 198, 198, 251, 120, 106, 198, 198, 237, + 119, 106, 198, 198, 213, 117, 106, 198, 198, 210, 174, 106, 198, 198, + 213, 189, 44, 198, 198, 214, 78, 44, 198, 198, 226, 146, 44, 198, 198, + 211, 221, 44, 198, 198, 226, 55, 44, 41, 206, 167, 217, 79, 63, 208, 193, + 44, 41, 204, 160, 217, 79, 63, 208, 193, 44, 41, 206, 68, 217, 79, 63, + 208, 193, 44, 41, 236, 236, 217, 79, 63, 208, 193, 44, 41, 237, 105, 217, + 79, 63, 208, 193, 44, 41, 209, 93, 217, 79, 63, 208, 193, 44, 41, 210, + 130, 217, 79, 63, 208, 193, 44, 41, 238, 223, 217, 79, 63, 208, 193, 216, + 106, 54, 44, 41, 204, 160, 102, 44, 41, 204, 160, 105, 44, 41, 204, 160, + 147, 44, 41, 204, 160, 149, 44, 41, 204, 160, 164, 44, 41, 204, 160, 187, + 44, 41, 204, 160, 210, 135, 44, 41, 204, 160, 192, 44, 41, 204, 160, 219, + 113, 44, 41, 206, 67, 44, 41, 206, 68, 102, 44, 41, 206, 68, 105, 44, 41, + 206, 68, 147, 44, 41, 206, 68, 149, 44, 41, 206, 68, 164, 44, 29, 226, + 121, 44, 29, 219, 143, 44, 29, 205, 253, 44, 29, 213, 78, 44, 29, 221, + 197, 44, 29, 215, 190, 44, 29, 209, 129, 44, 29, 228, 174, 44, 29, 246, + 168, 44, 29, 246, 232, 44, 29, 226, 183, 44, 29, 206, 80, 44, 29, 215, + 227, 44, 29, 234, 66, 44, 29, 226, 122, 62, 44, 29, 219, 144, 62, 44, 29, + 205, 254, 62, 44, 29, 213, 79, 62, 44, 29, 221, 198, 62, 44, 29, 215, + 191, 62, 44, 29, 209, 130, 62, 44, 29, 228, 175, 62, 44, 29, 246, 169, + 62, 44, 29, 246, 233, 62, 44, 29, 226, 184, 62, 44, 29, 206, 81, 62, 44, + 29, 215, 228, 62, 44, 29, 234, 67, 62, 44, 226, 59, 171, 247, 27, 44, + 226, 59, 171, 227, 143, 44, 29, 228, 175, 66, 226, 59, 208, 112, 99, 44, + 198, 198, 102, 44, 198, 198, 105, 44, 198, 198, 147, 44, 198, 198, 149, + 44, 198, 198, 164, 44, 198, 198, 187, 44, 198, 198, 210, 135, 44, 198, + 198, 192, 44, 198, 198, 219, 113, 44, 198, 198, 206, 166, 44, 198, 198, + 221, 81, 44, 198, 198, 237, 77, 44, 198, 198, 201, 82, 44, 198, 198, 200, + 243, 44, 198, 198, 222, 20, 44, 198, 198, 239, 17, 44, 198, 198, 207, + 228, 44, 198, 198, 208, 79, 44, 198, 198, 234, 148, 44, 198, 198, 209, + 25, 44, 198, 198, 220, 135, 44, 198, 198, 208, 229, 44, 198, 198, 237, + 88, 44, 198, 198, 243, 61, 44, 198, 198, 225, 165, 44, 198, 198, 211, + 194, 44, 198, 198, 222, 184, 44, 198, 198, 237, 129, 44, 198, 198, 207, + 240, 44, 198, 198, 238, 47, 44, 198, 198, 215, 10, 44, 198, 198, 250, + 143, 44, 198, 198, 228, 11, 44, 198, 198, 213, 117, 44, 198, 198, 243, + 20, 44, 198, 198, 243, 10, 44, 198, 198, 234, 59, 44, 198, 198, 247, 55, + 44, 198, 198, 224, 59, 44, 198, 198, 225, 28, 44, 198, 198, 213, 46, 44, + 198, 198, 222, 67, 44, 198, 198, 213, 144, 44, 198, 198, 208, 29, 44, + 198, 198, 207, 210, 44, 198, 198, 238, 152, 44, 198, 198, 213, 119, 44, + 198, 198, 251, 120, 44, 198, 198, 219, 129, 44, 41, 206, 68, 187, 44, 41, + 206, 68, 210, 135, 44, 41, 206, 68, 192, 44, 41, 206, 68, 219, 113, 44, + 41, 236, 235, 44, 41, 236, 236, 102, 44, 41, 236, 236, 105, 44, 41, 236, + 236, 147, 44, 41, 236, 236, 149, 44, 41, 236, 236, 164, 44, 41, 236, 236, + 187, 44, 41, 236, 236, 210, 135, 44, 41, 236, 236, 192, 44, 41, 236, 236, + 219, 113, 44, 41, 237, 104, 141, 206, 178, 16, 36, 227, 238, 141, 206, + 178, 16, 36, 237, 141, 141, 206, 178, 16, 36, 222, 152, 141, 206, 178, + 16, 36, 251, 3, 141, 206, 178, 16, 36, 222, 119, 141, 206, 178, 16, 36, + 227, 140, 141, 206, 178, 16, 36, 227, 141, 141, 206, 178, 16, 36, 250, + 135, 141, 206, 178, 16, 36, 210, 153, 141, 206, 178, 16, 36, 217, 127, + 141, 206, 178, 16, 36, 218, 202, 141, 206, 178, 16, 36, 241, 170, 52, + 234, 85, 52, 238, 111, 52, 238, 57, 224, 182, 224, 209, 54, 44, 69, 62, + 44, 69, 70, 44, 69, 66, 44, 69, 72, 44, 69, 74, 44, 69, 161, 44, 69, 226, + 163, 44, 69, 226, 15, 44, 69, 227, 8, 44, 69, 226, 88, 44, 69, 212, 64, + 44, 69, 209, 182, 44, 69, 208, 24, 44, 69, 211, 202, 44, 69, 209, 29, 44, + 69, 207, 36, 44, 69, 206, 15, 44, 69, 204, 215, 44, 69, 206, 201, 44, 69, + 138, 44, 69, 188, 44, 69, 219, 150, 44, 69, 218, 133, 44, 69, 220, 34, + 44, 69, 218, 241, 44, 69, 144, 44, 69, 234, 75, 44, 69, 233, 97, 44, 69, + 234, 139, 44, 69, 233, 207, 44, 69, 178, 44, 69, 221, 211, 44, 69, 221, + 41, 44, 69, 222, 76, 44, 69, 221, 136, 44, 69, 183, 44, 69, 199, 211, 44, + 69, 199, 245, 44, 69, 213, 252, 44, 69, 213, 88, 44, 69, 212, 175, 44, + 69, 213, 190, 44, 69, 213, 1, 44, 69, 201, 114, 44, 69, 201, 31, 44, 69, + 201, 64, 44, 69, 201, 0, 52, 251, 27, 52, 250, 190, 52, 251, 54, 52, 252, + 96, 52, 228, 85, 52, 228, 53, 52, 203, 231, 52, 238, 84, 52, 238, 252, + 52, 217, 66, 52, 217, 59, 52, 227, 80, 52, 227, 45, 52, 227, 42, 52, 236, + 45, 52, 236, 54, 52, 235, 150, 52, 235, 146, 52, 225, 194, 52, 235, 138, + 52, 226, 138, 52, 226, 137, 52, 226, 136, 52, 226, 135, 52, 235, 20, 52, + 235, 19, 52, 225, 242, 52, 225, 244, 52, 227, 1, 52, 226, 57, 52, 226, + 65, 52, 212, 45, 52, 212, 6, 52, 209, 110, 52, 210, 158, 52, 210, 157, + 52, 242, 54, 52, 241, 113, 52, 240, 183, 52, 205, 176, 52, 220, 130, 52, + 218, 203, 52, 234, 218, 52, 216, 205, 52, 216, 204, 52, 249, 133, 52, + 215, 201, 52, 215, 164, 52, 215, 165, 52, 248, 158, 52, 233, 95, 52, 233, + 90, 52, 247, 250, 52, 233, 74, 52, 234, 111, 52, 216, 1, 52, 216, 42, 52, + 234, 94, 52, 216, 38, 52, 216, 56, 52, 248, 247, 52, 215, 95, 52, 248, + 98, 52, 233, 191, 52, 215, 82, 52, 233, 182, 52, 233, 184, 52, 222, 196, + 52, 222, 192, 52, 222, 201, 52, 222, 139, 52, 222, 168, 52, 221, 176, 52, + 221, 151, 52, 221, 150, 52, 222, 56, 52, 222, 53, 52, 222, 57, 52, 200, + 108, 52, 200, 106, 52, 199, 200, 52, 213, 17, 52, 213, 21, 52, 212, 148, + 52, 212, 142, 52, 213, 141, 52, 213, 138, 52, 201, 80, 141, 206, 178, 16, + 36, 233, 114, 199, 81, 141, 206, 178, 16, 36, 233, 114, 102, 141, 206, + 178, 16, 36, 233, 114, 105, 141, 206, 178, 16, 36, 233, 114, 147, 141, + 206, 178, 16, 36, 233, 114, 149, 141, 206, 178, 16, 36, 233, 114, 164, + 141, 206, 178, 16, 36, 233, 114, 187, 141, 206, 178, 16, 36, 233, 114, + 210, 135, 141, 206, 178, 16, 36, 233, 114, 192, 141, 206, 178, 16, 36, + 233, 114, 219, 113, 141, 206, 178, 16, 36, 233, 114, 206, 166, 141, 206, + 178, 16, 36, 233, 114, 238, 199, 141, 206, 178, 16, 36, 233, 114, 204, + 164, 141, 206, 178, 16, 36, 233, 114, 206, 69, 141, 206, 178, 16, 36, + 233, 114, 236, 223, 141, 206, 178, 16, 36, 233, 114, 237, 108, 141, 206, + 178, 16, 36, 233, 114, 209, 100, 141, 206, 178, 16, 36, 233, 114, 210, + 132, 141, 206, 178, 16, 36, 233, 114, 238, 229, 141, 206, 178, 16, 36, + 233, 114, 219, 110, 141, 206, 178, 16, 36, 233, 114, 204, 159, 141, 206, + 178, 16, 36, 233, 114, 204, 153, 141, 206, 178, 16, 36, 233, 114, 204, + 148, 141, 206, 178, 16, 36, 233, 114, 204, 150, 141, 206, 178, 16, 36, + 233, 114, 204, 155, 52, 233, 105, 52, 242, 58, 52, 250, 139, 52, 148, 52, + 216, 249, 52, 216, 78, 52, 240, 213, 52, 240, 214, 208, 192, 52, 240, + 214, 242, 209, 52, 228, 8, 52, 238, 114, 220, 136, 234, 112, 52, 238, + 114, 220, 136, 207, 106, 52, 238, 114, 220, 136, 207, 3, 52, 238, 114, + 220, 136, 222, 52, 52, 243, 12, 52, 216, 211, 251, 87, 52, 188, 52, 221, + 42, 62, 52, 178, 52, 161, 52, 227, 11, 52, 222, 115, 52, 236, 33, 52, + 247, 174, 52, 227, 10, 52, 215, 248, 52, 220, 1, 52, 221, 42, 238, 5, 52, + 221, 42, 236, 156, 52, 221, 252, 52, 226, 209, 52, 233, 28, 52, 226, 165, + 52, 221, 213, 52, 235, 163, 52, 206, 17, 52, 221, 42, 156, 52, 221, 144, + 52, 240, 223, 52, 226, 103, 52, 237, 15, 52, 219, 23, 52, 221, 42, 223, + 243, 52, 221, 141, 52, 246, 92, 52, 226, 97, 52, 221, 142, 208, 192, 52, + 246, 93, 208, 192, 52, 223, 244, 208, 192, 52, 226, 98, 208, 192, 52, + 221, 142, 242, 209, 52, 246, 93, 242, 209, 52, 223, 244, 242, 209, 52, + 226, 98, 242, 209, 52, 223, 244, 119, 212, 122, 52, 223, 244, 119, 212, + 123, 208, 192, 52, 172, 52, 226, 50, 52, 221, 45, 52, 235, 91, 52, 213, + 239, 52, 213, 240, 119, 212, 122, 52, 213, 240, 119, 212, 123, 208, 192, + 52, 214, 237, 52, 218, 171, 52, 221, 42, 212, 122, 52, 221, 43, 52, 214, + 187, 52, 218, 71, 52, 221, 42, 203, 168, 52, 220, 238, 52, 225, 232, 52, + 220, 239, 222, 56, 52, 214, 186, 52, 218, 70, 52, 221, 42, 201, 147, 52, + 220, 232, 52, 225, 230, 52, 220, 233, 222, 56, 52, 227, 119, 217, 106, + 52, 223, 244, 217, 106, 52, 251, 101, 52, 248, 73, 52, 247, 100, 52, 247, + 77, 52, 247, 224, 119, 226, 209, 52, 246, 91, 52, 241, 229, 52, 235, 4, + 52, 144, 52, 233, 106, 52, 228, 117, 52, 226, 110, 52, 226, 98, 247, 143, + 52, 226, 17, 52, 224, 113, 52, 224, 112, 52, 224, 99, 52, 224, 3, 52, + 222, 116, 209, 53, 52, 221, 175, 52, 221, 108, 52, 215, 246, 52, 215, + 109, 52, 215, 46, 52, 215, 44, 52, 208, 183, 52, 207, 191, 52, 201, 66, + 52, 203, 169, 119, 223, 243, 52, 35, 119, 223, 243, 141, 206, 178, 16, + 36, 241, 233, 102, 141, 206, 178, 16, 36, 241, 233, 105, 141, 206, 178, + 16, 36, 241, 233, 147, 141, 206, 178, 16, 36, 241, 233, 149, 141, 206, + 178, 16, 36, 241, 233, 164, 141, 206, 178, 16, 36, 241, 233, 187, 141, + 206, 178, 16, 36, 241, 233, 210, 135, 141, 206, 178, 16, 36, 241, 233, + 192, 141, 206, 178, 16, 36, 241, 233, 219, 113, 141, 206, 178, 16, 36, + 241, 233, 206, 166, 141, 206, 178, 16, 36, 241, 233, 238, 199, 141, 206, + 178, 16, 36, 241, 233, 204, 164, 141, 206, 178, 16, 36, 241, 233, 206, + 69, 141, 206, 178, 16, 36, 241, 233, 236, 223, 141, 206, 178, 16, 36, + 241, 233, 237, 108, 141, 206, 178, 16, 36, 241, 233, 209, 100, 141, 206, + 178, 16, 36, 241, 233, 210, 132, 141, 206, 178, 16, 36, 241, 233, 238, + 229, 141, 206, 178, 16, 36, 241, 233, 219, 110, 141, 206, 178, 16, 36, + 241, 233, 204, 159, 141, 206, 178, 16, 36, 241, 233, 204, 153, 141, 206, + 178, 16, 36, 241, 233, 204, 148, 141, 206, 178, 16, 36, 241, 233, 204, + 150, 141, 206, 178, 16, 36, 241, 233, 204, 155, 141, 206, 178, 16, 36, + 241, 233, 204, 156, 141, 206, 178, 16, 36, 241, 233, 204, 151, 141, 206, + 178, 16, 36, 241, 233, 204, 152, 141, 206, 178, 16, 36, 241, 233, 204, + 158, 141, 206, 178, 16, 36, 241, 233, 204, 154, 141, 206, 178, 16, 36, + 241, 233, 206, 67, 141, 206, 178, 16, 36, 241, 233, 206, 66, 52, 236, 71, + 234, 88, 36, 206, 107, 242, 247, 234, 123, 234, 88, 36, 206, 107, 213, + 183, 239, 17, 234, 88, 36, 241, 46, 250, 156, 206, 107, 248, 242, 234, + 88, 36, 199, 224, 237, 7, 234, 88, 36, 201, 106, 234, 88, 36, 243, 64, + 234, 88, 36, 206, 107, 250, 213, 234, 88, 36, 233, 198, 205, 182, 234, + 88, 36, 4, 206, 245, 234, 88, 36, 205, 110, 234, 88, 36, 216, 71, 234, + 88, 36, 208, 111, 234, 88, 36, 237, 131, 234, 88, 36, 235, 69, 215, 68, + 234, 88, 36, 221, 128, 234, 88, 36, 238, 151, 234, 88, 36, 237, 8, 234, + 88, 36, 200, 236, 217, 79, 206, 107, 241, 171, 234, 88, 36, 251, 7, 234, + 88, 36, 243, 43, 234, 88, 36, 248, 150, 206, 37, 234, 88, 36, 235, 89, + 234, 88, 36, 208, 208, 251, 26, 234, 88, 36, 213, 109, 234, 88, 36, 228, + 79, 234, 88, 36, 235, 69, 206, 245, 234, 88, 36, 221, 59, 243, 14, 234, + 88, 36, 235, 69, 215, 22, 234, 88, 36, 206, 107, 252, 0, 201, 82, 234, + 88, 36, 206, 107, 246, 118, 237, 77, 234, 88, 36, 228, 93, 234, 88, 36, + 239, 114, 234, 88, 36, 213, 112, 234, 88, 36, 235, 69, 215, 51, 234, 88, + 36, 214, 254, 234, 88, 36, 241, 249, 76, 206, 107, 224, 196, 234, 88, 36, + 206, 107, 237, 169, 234, 88, 36, 217, 39, 234, 88, 36, 217, 134, 234, 88, + 36, 241, 141, 234, 88, 36, 241, 163, 234, 88, 36, 228, 108, 234, 88, 36, + 248, 60, 234, 88, 36, 246, 72, 205, 186, 222, 59, 234, 88, 36, 236, 40, + 205, 182, 234, 88, 36, 214, 196, 203, 217, 234, 88, 36, 217, 38, 234, 88, + 36, 206, 107, 201, 52, 234, 88, 36, 213, 100, 234, 88, 36, 206, 107, 247, + 106, 234, 88, 36, 206, 107, 250, 209, 206, 31, 234, 88, 36, 206, 107, + 227, 2, 208, 83, 221, 63, 234, 88, 36, 241, 108, 234, 88, 36, 206, 107, + 222, 142, 222, 197, 234, 88, 36, 252, 1, 234, 88, 36, 206, 107, 201, 99, + 234, 88, 36, 206, 107, 235, 253, 201, 16, 234, 88, 36, 206, 107, 227, + 149, 225, 96, 234, 88, 36, 240, 252, 234, 88, 36, 224, 183, 234, 88, 36, + 228, 82, 205, 36, 234, 88, 36, 4, 215, 22, 234, 88, 36, 251, 194, 246, + 63, 234, 88, 36, 248, 245, 246, 63, 11, 5, 228, 12, 11, 5, 228, 4, 11, 5, + 70, 11, 5, 228, 38, 11, 5, 228, 176, 11, 5, 228, 159, 11, 5, 228, 178, + 11, 5, 228, 177, 11, 5, 250, 155, 11, 5, 250, 114, 11, 5, 62, 11, 5, 251, + 28, 11, 5, 203, 229, 11, 5, 203, 232, 11, 5, 203, 230, 11, 5, 217, 11, + 11, 5, 216, 235, 11, 5, 74, 11, 5, 217, 54, 11, 5, 238, 48, 11, 5, 72, + 11, 5, 200, 216, 11, 5, 248, 152, 11, 5, 248, 148, 11, 5, 248, 188, 11, + 5, 248, 163, 11, 5, 248, 177, 11, 5, 248, 176, 11, 5, 248, 179, 11, 5, + 248, 178, 11, 5, 249, 55, 11, 5, 249, 47, 11, 5, 249, 136, 11, 5, 249, + 78, 11, 5, 248, 6, 11, 5, 248, 10, 11, 5, 248, 7, 11, 5, 248, 97, 11, 5, + 248, 78, 11, 5, 248, 124, 11, 5, 248, 103, 11, 5, 248, 203, 11, 5, 249, + 8, 11, 5, 248, 215, 11, 5, 247, 246, 11, 5, 247, 241, 11, 5, 248, 36, 11, + 5, 248, 5, 11, 5, 247, 254, 11, 5, 248, 3, 11, 5, 247, 229, 11, 5, 247, + 227, 11, 5, 247, 234, 11, 5, 247, 232, 11, 5, 247, 230, 11, 5, 247, 231, + 11, 5, 215, 142, 11, 5, 215, 138, 11, 5, 215, 204, 11, 5, 215, 154, 11, + 5, 215, 170, 11, 5, 215, 197, 11, 5, 215, 193, 11, 5, 216, 94, 11, 5, + 216, 83, 11, 5, 172, 11, 5, 216, 135, 11, 5, 214, 206, 11, 5, 214, 208, + 11, 5, 214, 207, 11, 5, 215, 61, 11, 5, 215, 49, 11, 5, 215, 106, 11, 5, + 215, 77, 11, 5, 214, 192, 11, 5, 214, 188, 11, 5, 214, 224, 11, 5, 214, + 205, 11, 5, 214, 197, 11, 5, 214, 203, 11, 5, 214, 171, 11, 5, 214, 170, + 11, 5, 214, 175, 11, 5, 214, 174, 11, 5, 214, 172, 11, 5, 214, 173, 11, + 5, 249, 29, 11, 5, 249, 28, 11, 5, 249, 35, 11, 5, 249, 30, 11, 5, 249, + 32, 11, 5, 249, 31, 11, 5, 249, 34, 11, 5, 249, 33, 11, 5, 249, 41, 11, + 5, 249, 40, 11, 5, 249, 44, 11, 5, 249, 42, 11, 5, 249, 20, 11, 5, 249, + 22, 11, 5, 249, 21, 11, 5, 249, 25, 11, 5, 249, 24, 11, 5, 249, 27, 11, + 5, 249, 26, 11, 5, 249, 36, 11, 5, 249, 39, 11, 5, 249, 37, 11, 5, 249, + 16, 11, 5, 249, 15, 11, 5, 249, 23, 11, 5, 249, 19, 11, 5, 249, 17, 11, + 5, 249, 18, 11, 5, 249, 12, 11, 5, 249, 11, 11, 5, 249, 14, 11, 5, 249, + 13, 11, 5, 220, 97, 11, 5, 220, 96, 11, 5, 220, 102, 11, 5, 220, 98, 11, + 5, 220, 99, 11, 5, 220, 101, 11, 5, 220, 100, 11, 5, 220, 105, 11, 5, + 220, 104, 11, 5, 220, 107, 11, 5, 220, 106, 11, 5, 220, 93, 11, 5, 220, + 92, 11, 5, 220, 95, 11, 5, 220, 94, 11, 5, 220, 86, 11, 5, 220, 85, 11, + 5, 220, 90, 11, 5, 220, 89, 11, 5, 220, 87, 11, 5, 220, 88, 11, 5, 220, + 80, 11, 5, 220, 79, 11, 5, 220, 84, 11, 5, 220, 83, 11, 5, 220, 81, 11, + 5, 220, 82, 11, 5, 233, 251, 11, 5, 233, 250, 11, 5, 234, 0, 11, 5, 233, + 252, 11, 5, 233, 253, 11, 5, 233, 255, 11, 5, 233, 254, 11, 5, 234, 3, + 11, 5, 234, 2, 11, 5, 234, 5, 11, 5, 234, 4, 11, 5, 233, 242, 11, 5, 233, + 244, 11, 5, 233, 243, 11, 5, 233, 247, 11, 5, 233, 246, 11, 5, 233, 249, + 11, 5, 233, 248, 11, 5, 233, 238, 11, 5, 233, 237, 11, 5, 233, 245, 11, + 5, 233, 241, 11, 5, 233, 239, 11, 5, 233, 240, 11, 5, 233, 232, 11, 5, + 233, 236, 11, 5, 233, 235, 11, 5, 233, 233, 11, 5, 233, 234, 11, 5, 221, + 147, 11, 5, 221, 146, 11, 5, 221, 211, 11, 5, 221, 153, 11, 5, 221, 183, + 11, 5, 221, 201, 11, 5, 221, 199, 11, 5, 222, 127, 11, 5, 222, 122, 11, + 5, 178, 11, 5, 222, 164, 11, 5, 221, 8, 11, 5, 221, 7, 11, 5, 221, 11, + 11, 5, 221, 9, 11, 5, 221, 73, 11, 5, 221, 47, 11, 5, 221, 136, 11, 5, + 221, 79, 11, 5, 222, 7, 11, 5, 222, 76, 11, 5, 220, 244, 11, 5, 220, 240, + 11, 5, 221, 41, 11, 5, 221, 4, 11, 5, 220, 253, 11, 5, 221, 2, 11, 5, + 220, 217, 11, 5, 220, 216, 11, 5, 220, 222, 11, 5, 220, 219, 11, 5, 237, + 64, 11, 5, 237, 58, 11, 5, 237, 112, 11, 5, 237, 79, 11, 5, 237, 160, 11, + 5, 237, 151, 11, 5, 237, 195, 11, 5, 237, 165, 11, 5, 236, 220, 11, 5, + 237, 13, 11, 5, 236, 250, 11, 5, 236, 172, 11, 5, 236, 171, 11, 5, 236, + 189, 11, 5, 236, 177, 11, 5, 236, 175, 11, 5, 236, 176, 11, 5, 236, 159, + 11, 5, 236, 158, 11, 5, 236, 162, 11, 5, 236, 160, 11, 5, 202, 200, 11, + 5, 202, 195, 11, 5, 202, 234, 11, 5, 202, 209, 11, 5, 202, 223, 11, 5, + 202, 220, 11, 5, 202, 226, 11, 5, 202, 225, 11, 5, 203, 67, 11, 5, 203, + 62, 11, 5, 203, 90, 11, 5, 203, 79, 11, 5, 202, 175, 11, 5, 202, 171, 11, + 5, 202, 193, 11, 5, 202, 177, 11, 5, 202, 237, 11, 5, 203, 48, 11, 5, + 201, 160, 11, 5, 201, 158, 11, 5, 201, 166, 11, 5, 201, 163, 11, 5, 201, + 161, 11, 5, 201, 162, 11, 5, 201, 151, 11, 5, 201, 150, 11, 5, 201, 155, + 11, 5, 201, 154, 11, 5, 201, 152, 11, 5, 201, 153, 11, 5, 240, 245, 11, + 5, 240, 232, 11, 5, 241, 76, 11, 5, 241, 16, 11, 5, 241, 51, 11, 5, 241, + 56, 11, 5, 241, 55, 11, 5, 241, 240, 11, 5, 241, 234, 11, 5, 242, 58, 11, + 5, 242, 4, 11, 5, 239, 119, 11, 5, 239, 120, 11, 5, 240, 182, 11, 5, 239, + 164, 11, 5, 240, 211, 11, 5, 240, 184, 11, 5, 241, 106, 11, 5, 241, 175, + 11, 5, 241, 127, 11, 5, 239, 110, 11, 5, 239, 108, 11, 5, 239, 137, 11, + 5, 239, 118, 11, 5, 239, 113, 11, 5, 239, 116, 11, 5, 205, 213, 11, 5, + 205, 205, 11, 5, 206, 15, 11, 5, 205, 223, 11, 5, 206, 5, 11, 5, 206, 7, + 11, 5, 206, 6, 11, 5, 206, 226, 11, 5, 206, 212, 11, 5, 207, 36, 11, 5, + 206, 236, 11, 5, 204, 196, 11, 5, 204, 195, 11, 5, 204, 198, 11, 5, 204, + 197, 11, 5, 205, 144, 11, 5, 205, 134, 11, 5, 138, 11, 5, 205, 157, 11, + 5, 206, 128, 11, 5, 206, 201, 11, 5, 206, 153, 11, 5, 204, 179, 11, 5, + 204, 174, 11, 5, 204, 215, 11, 5, 204, 194, 11, 5, 204, 180, 11, 5, 204, + 192, 11, 5, 241, 192, 11, 5, 241, 191, 11, 5, 241, 197, 11, 5, 241, 193, + 11, 5, 241, 194, 11, 5, 241, 196, 11, 5, 241, 195, 11, 5, 241, 213, 11, + 5, 241, 212, 11, 5, 241, 220, 11, 5, 241, 214, 11, 5, 241, 182, 11, 5, + 241, 184, 11, 5, 241, 183, 11, 5, 241, 187, 11, 5, 241, 186, 11, 5, 241, + 190, 11, 5, 241, 188, 11, 5, 241, 205, 11, 5, 241, 208, 11, 5, 241, 206, + 11, 5, 241, 178, 11, 5, 241, 177, 11, 5, 241, 185, 11, 5, 241, 181, 11, + 5, 241, 179, 11, 5, 241, 180, 11, 5, 220, 53, 11, 5, 220, 52, 11, 5, 220, + 60, 11, 5, 220, 55, 11, 5, 220, 56, 11, 5, 220, 57, 11, 5, 220, 69, 11, + 5, 220, 68, 11, 5, 220, 75, 11, 5, 220, 70, 11, 5, 220, 45, 11, 5, 220, + 44, 11, 5, 220, 51, 11, 5, 220, 46, 11, 5, 220, 61, 11, 5, 220, 67, 11, + 5, 220, 65, 11, 5, 220, 37, 11, 5, 220, 36, 11, 5, 220, 42, 11, 5, 220, + 40, 11, 5, 220, 38, 11, 5, 220, 39, 11, 5, 233, 217, 11, 5, 233, 216, 11, + 5, 233, 223, 11, 5, 233, 218, 11, 5, 233, 220, 11, 5, 233, 219, 11, 5, + 233, 222, 11, 5, 233, 221, 11, 5, 233, 229, 11, 5, 233, 227, 11, 5, 233, + 231, 11, 5, 233, 230, 11, 5, 233, 210, 11, 5, 233, 211, 11, 5, 233, 214, + 11, 5, 233, 213, 11, 5, 233, 215, 11, 5, 233, 224, 11, 5, 233, 226, 11, + 5, 233, 225, 11, 5, 233, 209, 11, 5, 219, 102, 11, 5, 219, 100, 11, 5, + 219, 150, 11, 5, 219, 105, 11, 5, 219, 132, 11, 5, 219, 146, 11, 5, 219, + 145, 11, 5, 220, 111, 11, 5, 188, 11, 5, 220, 127, 11, 5, 218, 81, 11, 5, + 218, 83, 11, 5, 218, 82, 11, 5, 218, 214, 11, 5, 218, 199, 11, 5, 218, + 241, 11, 5, 218, 225, 11, 5, 220, 3, 11, 5, 220, 34, 11, 5, 220, 19, 11, + 5, 218, 76, 11, 5, 218, 72, 11, 5, 218, 133, 11, 5, 218, 80, 11, 5, 218, + 78, 11, 5, 218, 79, 11, 5, 234, 26, 11, 5, 234, 25, 11, 5, 234, 31, 11, + 5, 234, 27, 11, 5, 234, 28, 11, 5, 234, 30, 11, 5, 234, 29, 11, 5, 234, + 37, 11, 5, 234, 35, 11, 5, 234, 39, 11, 5, 234, 38, 11, 5, 234, 18, 11, + 5, 234, 20, 11, 5, 234, 19, 11, 5, 234, 22, 11, 5, 234, 24, 11, 5, 234, + 23, 11, 5, 234, 32, 11, 5, 234, 34, 11, 5, 234, 33, 11, 5, 234, 14, 11, + 5, 234, 13, 11, 5, 234, 21, 11, 5, 234, 17, 11, 5, 234, 15, 11, 5, 234, + 16, 11, 5, 234, 8, 11, 5, 234, 7, 11, 5, 234, 12, 11, 5, 234, 11, 11, 5, + 234, 9, 11, 5, 234, 10, 11, 5, 224, 152, 11, 5, 224, 144, 11, 5, 224, + 210, 11, 5, 224, 162, 11, 5, 224, 201, 11, 5, 224, 200, 11, 5, 224, 204, + 11, 5, 224, 202, 11, 5, 225, 63, 11, 5, 225, 51, 11, 5, 194, 11, 5, 225, + 74, 11, 5, 224, 20, 11, 5, 224, 19, 11, 5, 224, 22, 11, 5, 224, 21, 11, + 5, 224, 65, 11, 5, 224, 51, 11, 5, 224, 110, 11, 5, 224, 71, 11, 5, 224, + 227, 11, 5, 225, 40, 11, 5, 224, 244, 11, 5, 224, 14, 11, 5, 224, 12, 11, + 5, 224, 42, 11, 5, 224, 18, 11, 5, 224, 16, 11, 5, 224, 17, 11, 5, 223, + 248, 11, 5, 223, 247, 11, 5, 224, 2, 11, 5, 223, 251, 11, 5, 223, 249, + 11, 5, 223, 250, 11, 5, 235, 134, 11, 5, 235, 133, 11, 5, 235, 161, 11, + 5, 235, 145, 11, 5, 235, 153, 11, 5, 235, 152, 11, 5, 235, 155, 11, 5, + 235, 154, 11, 5, 236, 42, 11, 5, 236, 37, 11, 5, 236, 89, 11, 5, 236, 52, + 11, 5, 235, 25, 11, 5, 235, 24, 11, 5, 235, 27, 11, 5, 235, 26, 11, 5, + 235, 94, 11, 5, 235, 92, 11, 5, 235, 116, 11, 5, 235, 103, 11, 5, 235, + 239, 11, 5, 235, 237, 11, 5, 236, 15, 11, 5, 235, 250, 11, 5, 235, 14, + 11, 5, 235, 13, 11, 5, 235, 50, 11, 5, 235, 23, 11, 5, 235, 15, 11, 5, + 235, 22, 11, 5, 226, 127, 11, 5, 226, 123, 11, 5, 226, 163, 11, 5, 226, + 141, 11, 5, 226, 152, 11, 5, 226, 156, 11, 5, 226, 154, 11, 5, 227, 33, + 11, 5, 227, 16, 11, 5, 161, 11, 5, 227, 60, 11, 5, 225, 249, 11, 5, 225, + 254, 11, 5, 225, 251, 11, 5, 226, 56, 11, 5, 226, 51, 11, 5, 226, 88, 11, + 5, 226, 63, 11, 5, 226, 233, 11, 5, 226, 216, 11, 5, 227, 8, 11, 5, 226, + 237, 11, 5, 225, 237, 11, 5, 225, 233, 11, 5, 226, 15, 11, 5, 225, 248, + 11, 5, 225, 241, 11, 5, 225, 245, 11, 5, 235, 221, 11, 5, 235, 220, 11, + 5, 235, 225, 11, 5, 235, 222, 11, 5, 235, 224, 11, 5, 235, 223, 11, 5, + 235, 232, 11, 5, 235, 231, 11, 5, 235, 235, 11, 5, 235, 233, 11, 5, 235, + 212, 11, 5, 235, 211, 11, 5, 235, 214, 11, 5, 235, 213, 11, 5, 235, 217, + 11, 5, 235, 216, 11, 5, 235, 219, 11, 5, 235, 218, 11, 5, 235, 227, 11, + 5, 235, 226, 11, 5, 235, 230, 11, 5, 235, 228, 11, 5, 235, 207, 11, 5, + 235, 206, 11, 5, 235, 215, 11, 5, 235, 210, 11, 5, 235, 208, 11, 5, 235, + 209, 11, 5, 221, 230, 11, 5, 221, 231, 11, 5, 221, 249, 11, 5, 221, 248, + 11, 5, 221, 251, 11, 5, 221, 250, 11, 5, 221, 221, 11, 5, 221, 223, 11, + 5, 221, 222, 11, 5, 221, 226, 11, 5, 221, 225, 11, 5, 221, 228, 11, 5, + 221, 227, 11, 5, 221, 232, 11, 5, 221, 234, 11, 5, 221, 233, 11, 5, 221, + 217, 11, 5, 221, 216, 11, 5, 221, 224, 11, 5, 221, 220, 11, 5, 221, 218, + 11, 5, 221, 219, 11, 5, 233, 47, 11, 5, 233, 46, 11, 5, 233, 53, 11, 5, + 233, 48, 11, 5, 233, 50, 11, 5, 233, 49, 11, 5, 233, 52, 11, 5, 233, 51, + 11, 5, 233, 58, 11, 5, 233, 57, 11, 5, 233, 60, 11, 5, 233, 59, 11, 5, + 233, 39, 11, 5, 233, 38, 11, 5, 233, 41, 11, 5, 233, 40, 11, 5, 233, 43, + 11, 5, 233, 42, 11, 5, 233, 45, 11, 5, 233, 44, 11, 5, 233, 54, 11, 5, + 233, 56, 11, 5, 233, 55, 11, 5, 219, 198, 11, 5, 219, 200, 11, 5, 219, + 199, 11, 5, 219, 243, 11, 5, 219, 241, 11, 5, 219, 253, 11, 5, 219, 246, + 11, 5, 219, 160, 11, 5, 219, 159, 11, 5, 219, 161, 11, 5, 219, 170, 11, + 5, 219, 167, 11, 5, 219, 178, 11, 5, 219, 172, 11, 5, 219, 234, 11, 5, + 219, 240, 11, 5, 219, 236, 11, 5, 234, 45, 11, 5, 234, 60, 11, 5, 234, + 69, 11, 5, 234, 157, 11, 5, 234, 146, 11, 5, 144, 11, 5, 234, 168, 11, 5, + 233, 76, 11, 5, 233, 75, 11, 5, 233, 78, 11, 5, 233, 77, 11, 5, 233, 117, + 11, 5, 233, 108, 11, 5, 233, 207, 11, 5, 233, 180, 11, 5, 234, 90, 11, 5, + 234, 139, 11, 5, 234, 102, 11, 5, 201, 85, 11, 5, 201, 70, 11, 5, 201, + 114, 11, 5, 201, 96, 11, 5, 200, 205, 11, 5, 200, 207, 11, 5, 200, 206, + 11, 5, 200, 229, 11, 5, 201, 0, 11, 5, 200, 239, 11, 5, 201, 43, 11, 5, + 201, 64, 11, 5, 201, 49, 11, 5, 199, 21, 11, 5, 199, 20, 11, 5, 199, 36, + 11, 5, 199, 24, 11, 5, 199, 29, 11, 5, 199, 31, 11, 5, 199, 30, 11, 5, + 199, 97, 11, 5, 199, 94, 11, 5, 199, 114, 11, 5, 199, 101, 11, 5, 198, + 252, 11, 5, 198, 254, 11, 5, 198, 253, 11, 5, 199, 10, 11, 5, 199, 9, 11, + 5, 199, 14, 11, 5, 199, 11, 11, 5, 199, 79, 11, 5, 199, 89, 11, 5, 199, + 83, 11, 5, 198, 248, 11, 5, 198, 247, 11, 5, 199, 3, 11, 5, 198, 251, 11, + 5, 198, 249, 11, 5, 198, 250, 11, 5, 198, 234, 11, 5, 198, 233, 11, 5, + 198, 239, 11, 5, 198, 237, 11, 5, 198, 235, 11, 5, 198, 236, 11, 5, 246, + 144, 11, 5, 246, 137, 11, 5, 246, 173, 11, 5, 246, 157, 11, 5, 246, 170, + 11, 5, 246, 164, 11, 5, 246, 172, 11, 5, 246, 171, 11, 5, 247, 111, 11, + 5, 247, 103, 11, 5, 247, 190, 11, 5, 247, 144, 11, 5, 242, 204, 11, 5, + 242, 206, 11, 5, 242, 205, 11, 5, 243, 8, 11, 5, 242, 253, 11, 5, 246, + 91, 11, 5, 243, 25, 11, 5, 247, 40, 11, 5, 247, 76, 11, 5, 247, 45, 11, + 5, 242, 179, 11, 5, 242, 177, 11, 5, 242, 214, 11, 5, 242, 202, 11, 5, + 242, 185, 11, 5, 242, 199, 11, 5, 242, 156, 11, 5, 242, 155, 11, 5, 242, + 168, 11, 5, 242, 162, 11, 5, 242, 157, 11, 5, 242, 159, 11, 5, 198, 217, + 11, 5, 198, 216, 11, 5, 198, 223, 11, 5, 198, 218, 11, 5, 198, 220, 11, + 5, 198, 219, 11, 5, 198, 222, 11, 5, 198, 221, 11, 5, 198, 229, 11, 5, + 198, 228, 11, 5, 198, 232, 11, 5, 198, 230, 11, 5, 198, 213, 11, 5, 198, + 215, 11, 5, 198, 214, 11, 5, 198, 224, 11, 5, 198, 227, 11, 5, 198, 225, + 11, 5, 198, 206, 11, 5, 198, 210, 11, 5, 198, 209, 11, 5, 198, 207, 11, + 5, 198, 208, 11, 5, 198, 200, 11, 5, 198, 199, 11, 5, 198, 205, 11, 5, + 198, 203, 11, 5, 198, 201, 11, 5, 198, 202, 11, 5, 217, 250, 11, 5, 217, + 249, 11, 5, 217, 255, 11, 5, 217, 251, 11, 5, 217, 252, 11, 5, 217, 254, + 11, 5, 217, 253, 11, 5, 218, 4, 11, 5, 218, 3, 11, 5, 218, 7, 11, 5, 218, + 6, 11, 5, 217, 243, 11, 5, 217, 244, 11, 5, 217, 247, 11, 5, 217, 248, + 11, 5, 218, 0, 11, 5, 218, 2, 11, 5, 217, 238, 11, 5, 217, 246, 11, 5, + 217, 242, 11, 5, 217, 239, 11, 5, 217, 240, 11, 5, 217, 233, 11, 5, 217, + 232, 11, 5, 217, 237, 11, 5, 217, 236, 11, 5, 217, 234, 11, 5, 217, 235, + 11, 5, 209, 108, 11, 5, 187, 11, 5, 209, 182, 11, 5, 209, 111, 11, 5, + 209, 169, 11, 5, 209, 172, 11, 5, 209, 170, 11, 5, 211, 251, 11, 5, 211, + 237, 11, 5, 212, 64, 11, 5, 212, 3, 11, 5, 207, 218, 11, 5, 207, 220, 11, + 5, 207, 219, 11, 5, 209, 4, 11, 5, 208, 249, 11, 5, 209, 29, 11, 5, 209, + 8, 11, 5, 210, 127, 11, 5, 211, 202, 11, 5, 210, 156, 11, 5, 207, 195, + 11, 5, 207, 192, 11, 5, 208, 24, 11, 5, 207, 217, 11, 5, 207, 199, 11, 5, + 207, 207, 11, 5, 207, 97, 11, 5, 207, 96, 11, 5, 207, 165, 11, 5, 207, + 105, 11, 5, 207, 99, 11, 5, 207, 104, 11, 5, 208, 141, 11, 5, 208, 140, + 11, 5, 208, 147, 11, 5, 208, 142, 11, 5, 208, 144, 11, 5, 208, 146, 11, + 5, 208, 145, 11, 5, 208, 156, 11, 5, 208, 154, 11, 5, 208, 179, 11, 5, + 208, 157, 11, 5, 208, 136, 11, 5, 208, 135, 11, 5, 208, 139, 11, 5, 208, + 137, 11, 5, 208, 150, 11, 5, 208, 153, 11, 5, 208, 151, 11, 5, 208, 132, + 11, 5, 208, 130, 11, 5, 208, 134, 11, 5, 208, 133, 11, 5, 208, 125, 11, + 5, 208, 124, 11, 5, 208, 129, 11, 5, 208, 128, 11, 5, 208, 126, 11, 5, + 208, 127, 11, 5, 199, 72, 11, 5, 199, 71, 11, 5, 199, 77, 11, 5, 199, 74, + 11, 5, 199, 51, 11, 5, 199, 53, 11, 5, 199, 52, 11, 5, 199, 56, 11, 5, + 199, 55, 11, 5, 199, 60, 11, 5, 199, 57, 11, 5, 199, 65, 11, 5, 199, 64, + 11, 5, 199, 68, 11, 5, 199, 66, 11, 5, 199, 47, 11, 5, 199, 46, 11, 5, + 199, 54, 11, 5, 199, 50, 11, 5, 199, 48, 11, 5, 199, 49, 11, 5, 199, 39, + 11, 5, 199, 38, 11, 5, 199, 43, 11, 5, 199, 42, 11, 5, 199, 40, 11, 5, + 199, 41, 11, 5, 247, 14, 11, 5, 247, 10, 11, 5, 247, 37, 11, 5, 247, 23, + 11, 5, 246, 188, 11, 5, 246, 187, 11, 5, 246, 190, 11, 5, 246, 189, 11, + 5, 246, 203, 11, 5, 246, 202, 11, 5, 246, 210, 11, 5, 246, 205, 11, 5, + 246, 241, 11, 5, 246, 239, 11, 5, 247, 8, 11, 5, 246, 249, 11, 5, 246, + 182, 11, 5, 246, 192, 11, 5, 246, 186, 11, 5, 246, 183, 11, 5, 246, 185, + 11, 5, 246, 175, 11, 5, 246, 174, 11, 5, 246, 179, 11, 5, 246, 178, 11, + 5, 246, 176, 11, 5, 246, 177, 11, 5, 212, 211, 11, 5, 212, 215, 11, 5, + 212, 193, 11, 5, 212, 194, 11, 5, 212, 198, 11, 5, 212, 197, 11, 5, 212, + 201, 11, 5, 212, 199, 11, 5, 212, 205, 11, 5, 212, 204, 11, 5, 212, 210, + 11, 5, 212, 206, 11, 5, 212, 189, 11, 5, 212, 187, 11, 5, 212, 195, 11, + 5, 212, 192, 11, 5, 212, 190, 11, 5, 212, 191, 11, 5, 212, 182, 11, 5, + 212, 181, 11, 5, 212, 186, 11, 5, 212, 185, 11, 5, 212, 183, 11, 5, 212, + 184, 11, 5, 218, 194, 11, 5, 218, 193, 11, 5, 218, 196, 11, 5, 218, 195, + 11, 5, 218, 185, 11, 5, 218, 187, 11, 5, 218, 186, 11, 5, 218, 189, 11, + 5, 218, 188, 11, 5, 218, 192, 11, 5, 218, 191, 11, 5, 218, 179, 11, 5, + 218, 178, 11, 5, 218, 184, 11, 5, 218, 182, 11, 5, 218, 180, 11, 5, 218, + 181, 11, 5, 218, 173, 11, 5, 218, 172, 11, 5, 218, 177, 11, 5, 218, 176, + 11, 5, 218, 174, 11, 5, 218, 175, 11, 5, 210, 75, 11, 5, 210, 70, 11, 5, + 210, 114, 11, 5, 210, 87, 11, 5, 209, 209, 11, 5, 209, 211, 11, 5, 209, + 210, 11, 5, 209, 234, 11, 5, 209, 230, 11, 5, 210, 8, 11, 5, 209, 254, + 11, 5, 210, 43, 11, 5, 210, 36, 11, 5, 210, 65, 11, 5, 210, 52, 11, 5, + 209, 205, 11, 5, 209, 202, 11, 5, 209, 220, 11, 5, 209, 208, 11, 5, 209, + 206, 11, 5, 209, 207, 11, 5, 209, 185, 11, 5, 209, 184, 11, 5, 209, 191, + 11, 5, 209, 188, 11, 5, 209, 186, 11, 5, 209, 187, 11, 5, 213, 204, 11, + 5, 213, 198, 11, 5, 213, 252, 11, 5, 213, 210, 11, 5, 212, 151, 11, 5, + 212, 153, 11, 5, 212, 152, 11, 5, 212, 229, 11, 5, 212, 217, 11, 5, 213, + 1, 11, 5, 212, 233, 11, 5, 213, 98, 11, 5, 213, 190, 11, 5, 213, 137, 11, + 5, 212, 144, 11, 5, 212, 141, 11, 5, 212, 175, 11, 5, 212, 150, 11, 5, + 212, 146, 11, 5, 212, 147, 11, 5, 212, 126, 11, 5, 212, 125, 11, 5, 212, + 131, 11, 5, 212, 129, 11, 5, 212, 127, 11, 5, 212, 128, 11, 5, 227, 196, + 11, 5, 227, 195, 11, 5, 227, 207, 11, 5, 227, 197, 11, 5, 227, 203, 11, + 5, 227, 202, 11, 5, 227, 205, 11, 5, 227, 204, 11, 5, 227, 136, 11, 5, + 227, 135, 11, 5, 227, 138, 11, 5, 227, 137, 11, 5, 227, 153, 11, 5, 227, + 151, 11, 5, 227, 166, 11, 5, 227, 155, 11, 5, 227, 129, 11, 5, 227, 127, + 11, 5, 227, 147, 11, 5, 227, 134, 11, 5, 227, 131, 11, 5, 227, 132, 11, + 5, 227, 121, 11, 5, 227, 120, 11, 5, 227, 125, 11, 5, 227, 124, 11, 5, + 227, 122, 11, 5, 227, 123, 11, 5, 214, 113, 11, 5, 214, 111, 11, 5, 214, + 121, 11, 5, 214, 114, 11, 5, 214, 118, 11, 5, 214, 117, 11, 5, 214, 120, + 11, 5, 214, 119, 11, 5, 214, 64, 11, 5, 214, 61, 11, 5, 214, 66, 11, 5, + 214, 65, 11, 5, 214, 100, 11, 5, 214, 99, 11, 5, 214, 109, 11, 5, 214, + 103, 11, 5, 214, 56, 11, 5, 214, 52, 11, 5, 214, 97, 11, 5, 214, 60, 11, + 5, 214, 58, 11, 5, 214, 59, 11, 5, 214, 36, 11, 5, 214, 34, 11, 5, 214, + 46, 11, 5, 214, 39, 11, 5, 214, 37, 11, 5, 214, 38, 11, 5, 227, 185, 11, + 5, 227, 184, 11, 5, 227, 191, 11, 5, 227, 186, 11, 5, 227, 188, 11, 5, + 227, 187, 11, 5, 227, 190, 11, 5, 227, 189, 11, 5, 227, 176, 11, 5, 227, + 178, 11, 5, 227, 177, 11, 5, 227, 181, 11, 5, 227, 180, 11, 5, 227, 183, + 11, 5, 227, 182, 11, 5, 227, 172, 11, 5, 227, 171, 11, 5, 227, 179, 11, + 5, 227, 175, 11, 5, 227, 173, 11, 5, 227, 174, 11, 5, 227, 168, 11, 5, + 227, 167, 11, 5, 227, 170, 11, 5, 227, 169, 11, 5, 219, 75, 11, 5, 219, + 74, 11, 5, 219, 82, 11, 5, 219, 76, 11, 5, 219, 78, 11, 5, 219, 77, 11, + 5, 219, 81, 11, 5, 219, 79, 11, 5, 219, 64, 11, 5, 219, 65, 11, 5, 219, + 70, 11, 5, 219, 69, 11, 5, 219, 73, 11, 5, 219, 71, 11, 5, 219, 59, 11, + 5, 219, 68, 11, 5, 219, 63, 11, 5, 219, 60, 11, 5, 219, 61, 11, 5, 219, + 54, 11, 5, 219, 53, 11, 5, 219, 58, 11, 5, 219, 57, 11, 5, 219, 55, 11, + 5, 219, 56, 11, 5, 218, 29, 11, 5, 218, 28, 11, 5, 218, 41, 11, 5, 218, + 33, 11, 5, 218, 38, 11, 5, 218, 37, 11, 5, 218, 40, 11, 5, 218, 39, 11, + 5, 218, 14, 11, 5, 218, 16, 11, 5, 218, 15, 11, 5, 218, 21, 11, 5, 218, + 20, 11, 5, 218, 26, 11, 5, 218, 22, 11, 5, 218, 12, 11, 5, 218, 10, 11, + 5, 218, 19, 11, 5, 218, 13, 11, 5, 200, 161, 11, 5, 200, 160, 11, 5, 200, + 169, 11, 5, 200, 163, 11, 5, 200, 165, 11, 5, 200, 164, 11, 5, 200, 167, + 11, 5, 200, 166, 11, 5, 200, 149, 11, 5, 200, 150, 11, 5, 200, 154, 11, + 5, 200, 153, 11, 5, 200, 159, 11, 5, 200, 157, 11, 5, 200, 127, 11, 5, + 200, 125, 11, 5, 200, 140, 11, 5, 200, 130, 11, 5, 200, 128, 11, 5, 200, + 129, 11, 5, 199, 251, 11, 5, 199, 249, 11, 5, 200, 9, 11, 5, 199, 252, + 11, 5, 200, 3, 11, 5, 200, 2, 11, 5, 200, 6, 11, 5, 200, 4, 11, 5, 199, + 189, 11, 5, 199, 188, 11, 5, 199, 192, 11, 5, 199, 190, 11, 5, 199, 225, + 11, 5, 199, 221, 11, 5, 199, 245, 11, 5, 199, 229, 11, 5, 199, 180, 11, + 5, 199, 176, 11, 5, 199, 211, 11, 5, 199, 187, 11, 5, 199, 183, 11, 5, + 199, 184, 11, 5, 199, 160, 11, 5, 199, 159, 11, 5, 199, 167, 11, 5, 199, + 163, 11, 5, 199, 161, 11, 5, 199, 162, 11, 42, 214, 100, 11, 42, 224, + 210, 11, 42, 226, 127, 11, 42, 218, 33, 11, 42, 242, 162, 11, 42, 208, + 147, 11, 42, 235, 218, 11, 42, 235, 250, 11, 42, 221, 211, 11, 42, 233, + 47, 11, 42, 223, 250, 11, 42, 249, 16, 11, 42, 221, 79, 11, 42, 199, 245, + 11, 42, 214, 192, 11, 42, 233, 41, 11, 42, 206, 226, 11, 42, 236, 89, 11, + 42, 198, 251, 11, 42, 242, 156, 11, 42, 241, 180, 11, 42, 248, 3, 11, 42, + 235, 214, 11, 42, 218, 22, 11, 42, 204, 215, 11, 42, 217, 54, 11, 42, + 227, 172, 11, 42, 199, 10, 11, 42, 214, 171, 11, 42, 233, 249, 11, 42, + 199, 251, 11, 42, 201, 162, 11, 42, 209, 191, 11, 42, 203, 48, 11, 42, + 199, 114, 11, 42, 227, 166, 11, 42, 217, 242, 11, 42, 227, 170, 11, 42, + 235, 94, 11, 42, 227, 190, 11, 42, 201, 0, 11, 42, 239, 137, 11, 42, 209, + 207, 11, 42, 224, 204, 11, 42, 242, 168, 11, 42, 242, 205, 11, 42, 246, + 157, 11, 42, 233, 44, 11, 42, 210, 75, 11, 42, 198, 250, 11, 42, 209, + 254, 11, 42, 247, 8, 11, 42, 198, 220, 11, 42, 220, 101, 11, 42, 227, 8, + 224, 153, 1, 249, 136, 224, 153, 1, 172, 224, 153, 1, 215, 245, 224, 153, + 1, 242, 58, 224, 153, 1, 207, 36, 224, 153, 1, 206, 122, 224, 153, 1, + 236, 89, 224, 153, 1, 161, 224, 153, 1, 226, 207, 224, 153, 1, 227, 248, + 224, 153, 1, 247, 190, 224, 153, 1, 247, 37, 224, 153, 1, 239, 93, 224, + 153, 1, 205, 32, 224, 153, 1, 205, 22, 224, 153, 1, 178, 224, 153, 1, + 188, 224, 153, 1, 194, 224, 153, 1, 212, 64, 224, 153, 1, 199, 77, 224, + 153, 1, 199, 114, 224, 153, 1, 219, 253, 224, 153, 1, 144, 224, 153, 1, + 200, 181, 224, 153, 1, 234, 84, 224, 153, 1, 237, 195, 224, 153, 1, 201, + 114, 224, 153, 1, 210, 114, 224, 153, 1, 183, 224, 153, 1, 235, 199, 224, + 153, 1, 62, 224, 153, 1, 251, 221, 224, 153, 1, 72, 224, 153, 1, 238, 69, + 224, 153, 1, 70, 224, 153, 1, 74, 224, 153, 1, 66, 224, 153, 1, 204, 31, + 224, 153, 1, 204, 25, 224, 153, 1, 217, 121, 224, 153, 1, 150, 220, 221, + 206, 15, 224, 153, 1, 150, 220, 162, 215, 106, 224, 153, 1, 150, 220, + 221, 242, 167, 224, 153, 1, 150, 220, 221, 248, 124, 224, 153, 1, 150, + 220, 221, 188, 224, 153, 1, 150, 220, 221, 227, 216, 224, 153, 214, 212, + 246, 70, 224, 153, 214, 212, 236, 183, 208, 76, 50, 5, 238, 255, 50, 5, + 238, 251, 50, 5, 234, 120, 50, 5, 201, 57, 50, 5, 201, 56, 50, 5, 216, + 61, 50, 5, 248, 195, 50, 5, 248, 252, 50, 5, 222, 102, 50, 5, 226, 45, + 50, 5, 221, 243, 50, 5, 236, 28, 50, 5, 237, 140, 50, 5, 203, 54, 50, 5, + 206, 190, 50, 5, 206, 104, 50, 5, 241, 90, 50, 5, 241, 87, 50, 5, 225, + 32, 50, 5, 213, 167, 50, 5, 241, 161, 50, 5, 220, 66, 50, 5, 211, 190, + 50, 5, 210, 63, 50, 5, 199, 87, 50, 5, 199, 67, 50, 5, 247, 68, 50, 5, + 227, 225, 50, 5, 219, 89, 50, 5, 200, 48, 50, 5, 227, 5, 50, 5, 219, 226, + 50, 5, 236, 7, 50, 5, 222, 64, 50, 5, 220, 29, 50, 5, 218, 49, 50, 5, 70, + 50, 5, 228, 117, 50, 5, 234, 75, 50, 5, 234, 53, 50, 5, 201, 31, 50, 5, + 201, 18, 50, 5, 215, 204, 50, 5, 248, 193, 50, 5, 248, 188, 50, 5, 222, + 95, 50, 5, 226, 42, 50, 5, 221, 240, 50, 5, 236, 24, 50, 5, 237, 112, 50, + 5, 202, 234, 50, 5, 206, 15, 50, 5, 206, 84, 50, 5, 241, 82, 50, 5, 241, + 86, 50, 5, 224, 210, 50, 5, 213, 88, 50, 5, 241, 76, 50, 5, 220, 60, 50, + 5, 209, 182, 50, 5, 210, 33, 50, 5, 199, 36, 50, 5, 199, 63, 50, 5, 246, + 173, 50, 5, 227, 207, 50, 5, 219, 82, 50, 5, 200, 9, 50, 5, 226, 163, 50, + 5, 219, 218, 50, 5, 235, 161, 50, 5, 221, 211, 50, 5, 219, 150, 50, 5, + 218, 41, 50, 5, 62, 50, 5, 251, 85, 50, 5, 219, 248, 50, 5, 144, 50, 5, + 234, 202, 50, 5, 201, 114, 50, 5, 201, 100, 50, 5, 172, 50, 5, 248, 200, + 50, 5, 249, 136, 50, 5, 222, 110, 50, 5, 226, 50, 50, 5, 226, 48, 50, 5, + 221, 247, 50, 5, 236, 32, 50, 5, 237, 195, 50, 5, 203, 90, 50, 5, 207, + 36, 50, 5, 206, 122, 50, 5, 241, 100, 50, 5, 241, 89, 50, 5, 194, 50, 5, + 213, 252, 50, 5, 242, 58, 50, 5, 220, 75, 50, 5, 212, 64, 50, 5, 210, + 114, 50, 5, 199, 114, 50, 5, 199, 77, 50, 5, 247, 190, 50, 5, 227, 248, + 50, 5, 219, 98, 50, 5, 183, 50, 5, 161, 50, 5, 227, 68, 50, 5, 219, 232, + 50, 5, 236, 89, 50, 5, 178, 50, 5, 188, 50, 5, 218, 60, 50, 5, 217, 63, + 50, 5, 217, 58, 50, 5, 233, 188, 50, 5, 200, 244, 50, 5, 200, 240, 50, 5, + 215, 81, 50, 5, 248, 191, 50, 5, 248, 111, 50, 5, 222, 90, 50, 5, 226, + 40, 50, 5, 221, 236, 50, 5, 236, 20, 50, 5, 237, 2, 50, 5, 202, 179, 50, + 5, 205, 161, 50, 5, 206, 56, 50, 5, 241, 79, 50, 5, 241, 84, 50, 5, 224, + 78, 50, 5, 212, 238, 50, 5, 240, 187, 50, 5, 220, 47, 50, 5, 209, 10, 50, + 5, 210, 2, 50, 5, 199, 12, 50, 5, 199, 58, 50, 5, 243, 30, 50, 5, 227, + 156, 50, 5, 219, 72, 50, 5, 199, 230, 50, 5, 226, 68, 50, 5, 219, 216, + 50, 5, 235, 105, 50, 5, 221, 87, 50, 5, 218, 229, 50, 5, 218, 23, 50, 5, + 66, 50, 5, 204, 5, 50, 5, 233, 97, 50, 5, 233, 84, 50, 5, 200, 216, 50, + 5, 200, 209, 50, 5, 214, 224, 50, 5, 248, 190, 50, 5, 248, 36, 50, 5, + 222, 89, 50, 5, 226, 38, 50, 5, 221, 235, 50, 5, 236, 19, 50, 5, 236, + 189, 50, 5, 201, 166, 50, 5, 204, 215, 50, 5, 206, 35, 50, 5, 241, 77, + 50, 5, 241, 83, 50, 5, 224, 42, 50, 5, 212, 175, 50, 5, 239, 137, 50, 5, + 220, 42, 50, 5, 208, 24, 50, 5, 209, 220, 50, 5, 199, 3, 50, 5, 199, 54, + 50, 5, 242, 214, 50, 5, 227, 147, 50, 5, 219, 68, 50, 5, 199, 211, 50, 5, + 226, 15, 50, 5, 219, 215, 50, 5, 235, 50, 50, 5, 221, 41, 50, 5, 218, + 133, 50, 5, 218, 19, 50, 5, 74, 50, 5, 217, 78, 50, 5, 219, 174, 50, 5, + 233, 207, 50, 5, 233, 191, 50, 5, 201, 0, 50, 5, 200, 245, 50, 5, 215, + 106, 50, 5, 248, 192, 50, 5, 248, 124, 50, 5, 222, 91, 50, 5, 226, 41, + 50, 5, 221, 238, 50, 5, 236, 22, 50, 5, 236, 21, 50, 5, 237, 13, 50, 5, + 202, 193, 50, 5, 138, 50, 5, 206, 61, 50, 5, 241, 80, 50, 5, 241, 85, 50, + 5, 224, 110, 50, 5, 213, 1, 50, 5, 240, 211, 50, 5, 220, 51, 50, 5, 209, + 29, 50, 5, 210, 8, 50, 5, 199, 14, 50, 5, 199, 60, 50, 5, 246, 91, 50, 5, + 227, 166, 50, 5, 219, 73, 50, 5, 199, 245, 50, 5, 226, 88, 50, 5, 219, + 217, 50, 5, 235, 116, 50, 5, 221, 136, 50, 5, 218, 241, 50, 5, 218, 26, + 50, 5, 72, 50, 5, 238, 179, 50, 5, 219, 237, 50, 5, 234, 139, 50, 5, 234, + 105, 50, 5, 201, 64, 50, 5, 201, 51, 50, 5, 216, 73, 50, 5, 248, 196, 50, + 5, 249, 8, 50, 5, 222, 103, 50, 5, 226, 46, 50, 5, 226, 44, 50, 5, 221, + 244, 50, 5, 236, 29, 50, 5, 236, 27, 50, 5, 237, 147, 50, 5, 203, 59, 50, + 5, 206, 201, 50, 5, 206, 106, 50, 5, 241, 91, 50, 5, 241, 88, 50, 5, 225, + 40, 50, 5, 213, 190, 50, 5, 241, 175, 50, 5, 220, 67, 50, 5, 211, 202, + 50, 5, 210, 65, 50, 5, 199, 89, 50, 5, 199, 68, 50, 5, 247, 76, 50, 5, + 227, 227, 50, 5, 219, 91, 50, 5, 200, 51, 50, 5, 227, 8, 50, 5, 219, 227, + 50, 5, 219, 223, 50, 5, 236, 15, 50, 5, 236, 1, 50, 5, 222, 76, 50, 5, + 220, 34, 50, 5, 218, 50, 50, 5, 219, 255, 50, 5, 224, 250, 50, 246, 70, + 50, 236, 183, 208, 76, 50, 214, 79, 81, 50, 5, 220, 50, 237, 195, 50, 5, + 220, 50, 161, 50, 5, 220, 50, 209, 10, 50, 16, 237, 136, 50, 16, 227, 3, + 50, 16, 205, 228, 50, 16, 219, 125, 50, 16, 249, 83, 50, 16, 237, 194, + 50, 16, 207, 32, 50, 16, 242, 8, 50, 16, 240, 186, 50, 16, 225, 255, 50, + 16, 205, 165, 50, 16, 240, 210, 50, 16, 227, 157, 50, 17, 199, 81, 50, + 17, 102, 50, 17, 105, 50, 17, 147, 50, 17, 149, 50, 17, 164, 50, 17, 187, + 50, 17, 210, 135, 50, 17, 192, 50, 17, 219, 113, 50, 5, 220, 50, 178, 50, + 5, 220, 50, 240, 211, 37, 6, 1, 199, 85, 37, 4, 1, 199, 85, 37, 6, 1, + 239, 88, 37, 4, 1, 239, 88, 37, 6, 1, 213, 105, 239, 90, 37, 4, 1, 213, + 105, 239, 90, 37, 6, 1, 228, 41, 37, 4, 1, 228, 41, 37, 6, 1, 240, 227, + 37, 4, 1, 240, 227, 37, 6, 1, 221, 95, 204, 20, 37, 4, 1, 221, 95, 204, + 20, 37, 6, 1, 248, 47, 217, 83, 37, 4, 1, 248, 47, 217, 83, 37, 6, 1, + 220, 10, 200, 33, 37, 4, 1, 220, 10, 200, 33, 37, 6, 1, 200, 30, 3, 249, + 130, 200, 33, 37, 4, 1, 200, 30, 3, 249, 130, 200, 33, 37, 6, 1, 228, 39, + 200, 65, 37, 4, 1, 228, 39, 200, 65, 37, 6, 1, 213, 105, 199, 211, 37, 4, + 1, 213, 105, 199, 211, 37, 6, 1, 228, 39, 62, 37, 4, 1, 228, 39, 62, 37, + 6, 1, 246, 110, 224, 148, 199, 181, 37, 4, 1, 246, 110, 224, 148, 199, + 181, 37, 6, 1, 248, 136, 199, 181, 37, 4, 1, 248, 136, 199, 181, 37, 6, + 1, 228, 39, 246, 110, 224, 148, 199, 181, 37, 4, 1, 228, 39, 246, 110, + 224, 148, 199, 181, 37, 6, 1, 199, 247, 37, 4, 1, 199, 247, 37, 6, 1, + 213, 105, 205, 26, 37, 4, 1, 213, 105, 205, 26, 37, 6, 1, 209, 23, 241, + 175, 37, 4, 1, 209, 23, 241, 175, 37, 6, 1, 209, 23, 238, 209, 37, 4, 1, + 209, 23, 238, 209, 37, 6, 1, 209, 23, 238, 190, 37, 4, 1, 209, 23, 238, + 190, 37, 6, 1, 221, 99, 74, 37, 4, 1, 221, 99, 74, 37, 6, 1, 248, 165, + 74, 37, 4, 1, 248, 165, 74, 37, 6, 1, 53, 221, 99, 74, 37, 4, 1, 53, 221, + 99, 74, 37, 1, 221, 22, 74, 38, 37, 201, 149, 38, 37, 206, 167, 221, 168, + 54, 38, 37, 233, 83, 221, 168, 54, 38, 37, 206, 51, 221, 168, 54, 209, + 73, 250, 165, 38, 37, 1, 204, 17, 228, 178, 38, 37, 1, 70, 38, 37, 1, + 200, 9, 38, 37, 1, 66, 38, 37, 1, 234, 165, 54, 38, 37, 1, 200, 29, 38, + 37, 1, 209, 23, 54, 38, 37, 1, 217, 83, 38, 37, 227, 20, 38, 37, 216, 80, + 37, 227, 20, 37, 216, 80, 37, 6, 1, 239, 103, 37, 4, 1, 239, 103, 37, 6, + 1, 239, 79, 37, 4, 1, 239, 79, 37, 6, 1, 199, 44, 37, 4, 1, 199, 44, 37, + 6, 1, 247, 92, 37, 4, 1, 247, 92, 37, 6, 1, 239, 76, 37, 4, 1, 239, 76, + 37, 6, 1, 206, 202, 3, 101, 117, 37, 4, 1, 206, 202, 3, 101, 117, 37, 6, + 1, 204, 168, 37, 4, 1, 204, 168, 37, 6, 1, 205, 1, 37, 4, 1, 205, 1, 37, + 6, 1, 205, 6, 37, 4, 1, 205, 6, 37, 6, 1, 206, 207, 37, 4, 1, 206, 207, + 37, 6, 1, 233, 65, 37, 4, 1, 233, 65, 37, 6, 1, 209, 197, 37, 4, 1, 209, + 197, 37, 6, 1, 53, 74, 37, 4, 1, 53, 74, 37, 6, 1, 242, 232, 74, 37, 4, + 1, 242, 232, 74, 67, 1, 37, 234, 165, 54, 67, 1, 37, 209, 23, 54, 38, 37, + 1, 238, 248, 38, 37, 1, 228, 39, 72, 25, 1, 62, 25, 1, 161, 25, 1, 66, + 25, 1, 226, 15, 25, 1, 238, 255, 25, 1, 213, 167, 25, 1, 207, 15, 25, 1, + 74, 25, 1, 218, 41, 25, 1, 70, 25, 1, 194, 25, 1, 172, 25, 1, 213, 33, + 25, 1, 213, 81, 25, 1, 225, 31, 25, 1, 222, 63, 25, 1, 207, 32, 25, 1, + 220, 73, 25, 1, 219, 96, 25, 1, 223, 243, 25, 1, 207, 193, 25, 1, 221, + 41, 25, 1, 210, 28, 25, 1, 209, 182, 25, 1, 210, 38, 25, 1, 210, 137, 25, + 1, 225, 199, 25, 1, 226, 233, 25, 1, 218, 104, 25, 1, 218, 133, 25, 1, + 219, 67, 25, 1, 199, 227, 25, 1, 209, 220, 25, 1, 199, 185, 25, 1, 183, + 25, 1, 218, 167, 25, 1, 226, 219, 25, 1, 215, 249, 25, 1, 219, 89, 25, 1, + 218, 148, 25, 1, 214, 216, 25, 1, 200, 213, 25, 1, 216, 61, 25, 1, 237, + 140, 25, 1, 212, 175, 25, 1, 224, 42, 25, 1, 221, 211, 25, 1, 219, 150, + 25, 1, 213, 107, 25, 1, 213, 234, 25, 1, 226, 243, 25, 1, 219, 181, 25, + 1, 219, 232, 25, 1, 219, 253, 25, 1, 210, 8, 25, 1, 214, 221, 25, 1, 236, + 189, 25, 1, 237, 6, 25, 1, 201, 114, 25, 1, 188, 25, 1, 224, 210, 25, 1, + 215, 204, 25, 1, 224, 70, 25, 1, 226, 88, 25, 1, 222, 100, 25, 1, 213, + 139, 25, 1, 222, 40, 25, 1, 178, 25, 1, 206, 15, 25, 1, 226, 163, 25, 1, + 221, 136, 25, 1, 222, 108, 25, 1, 206, 146, 25, 1, 226, 50, 25, 1, 206, + 166, 25, 1, 218, 135, 25, 1, 212, 21, 25, 1, 237, 191, 25, 1, 226, 52, + 25, 1, 226, 83, 25, 38, 134, 226, 61, 25, 38, 134, 204, 206, 25, 219, 95, + 25, 236, 183, 208, 76, 25, 246, 79, 25, 246, 70, 25, 210, 167, 25, 214, + 79, 81, 67, 1, 246, 222, 150, 199, 255, 215, 156, 67, 1, 246, 222, 150, + 200, 76, 215, 156, 67, 1, 246, 222, 150, 199, 255, 210, 88, 67, 1, 246, + 222, 150, 200, 76, 210, 88, 67, 1, 246, 222, 150, 199, 255, 214, 97, 67, + 1, 246, 222, 150, 200, 76, 214, 97, 67, 1, 246, 222, 150, 199, 255, 212, + 175, 67, 1, 246, 222, 150, 200, 76, 212, 175, 67, 1, 238, 29, 239, 180, + 150, 148, 67, 1, 122, 239, 180, 150, 148, 67, 1, 221, 206, 239, 180, 150, + 148, 67, 1, 128, 239, 180, 150, 148, 67, 1, 238, 28, 239, 180, 150, 148, + 67, 1, 238, 29, 239, 180, 225, 20, 150, 148, 67, 1, 122, 239, 180, 225, + 20, 150, 148, 67, 1, 221, 206, 239, 180, 225, 20, 150, 148, 67, 1, 128, + 239, 180, 225, 20, 150, 148, 67, 1, 238, 28, 239, 180, 225, 20, 150, 148, + 67, 1, 238, 29, 225, 20, 150, 148, 67, 1, 122, 225, 20, 150, 148, 67, 1, + 221, 206, 225, 20, 150, 148, 67, 1, 128, 225, 20, 150, 148, 67, 1, 238, + 28, 225, 20, 150, 148, 67, 1, 73, 83, 148, 67, 1, 73, 209, 75, 67, 1, 73, + 233, 177, 148, 67, 1, 224, 54, 51, 243, 16, 251, 70, 67, 1, 213, 220, + 115, 48, 67, 1, 213, 220, 127, 48, 67, 1, 213, 220, 238, 43, 81, 67, 1, + 213, 220, 228, 50, 238, 43, 81, 67, 1, 128, 228, 50, 238, 43, 81, 67, 1, + 208, 57, 26, 122, 205, 174, 67, 1, 208, 57, 26, 128, 205, 174, 8, 6, 1, + 238, 243, 251, 142, 8, 4, 1, 238, 243, 251, 142, 8, 6, 1, 238, 243, 251, + 171, 8, 4, 1, 238, 243, 251, 171, 8, 6, 1, 234, 103, 8, 4, 1, 234, 103, + 8, 6, 1, 204, 114, 8, 4, 1, 204, 114, 8, 6, 1, 205, 102, 8, 4, 1, 205, + 102, 8, 6, 1, 242, 211, 8, 4, 1, 242, 211, 8, 6, 1, 242, 212, 3, 246, 70, + 8, 4, 1, 242, 212, 3, 246, 70, 8, 1, 4, 6, 238, 5, 8, 1, 4, 6, 212, 122, + 8, 6, 1, 252, 138, 8, 4, 1, 252, 138, 8, 6, 1, 251, 31, 8, 4, 1, 251, 31, + 8, 6, 1, 250, 139, 8, 4, 1, 250, 139, 8, 6, 1, 250, 123, 8, 4, 1, 250, + 123, 8, 6, 1, 250, 124, 3, 233, 177, 148, 8, 4, 1, 250, 124, 3, 233, 177, + 148, 8, 6, 1, 250, 112, 8, 4, 1, 250, 112, 8, 6, 1, 213, 105, 247, 224, + 3, 240, 182, 8, 4, 1, 213, 105, 247, 224, 3, 240, 182, 8, 6, 1, 227, 119, + 3, 97, 8, 4, 1, 227, 119, 3, 97, 8, 6, 1, 227, 119, 3, 241, 71, 97, 8, 4, + 1, 227, 119, 3, 241, 71, 97, 8, 6, 1, 227, 119, 3, 208, 47, 26, 241, 71, + 97, 8, 4, 1, 227, 119, 3, 208, 47, 26, 241, 71, 97, 8, 6, 1, 248, 46, + 156, 8, 4, 1, 248, 46, 156, 8, 6, 1, 225, 193, 3, 122, 97, 8, 4, 1, 225, + 193, 3, 122, 97, 8, 6, 1, 163, 3, 168, 208, 47, 216, 242, 8, 4, 1, 163, + 3, 168, 208, 47, 216, 242, 8, 6, 1, 163, 3, 224, 74, 8, 4, 1, 163, 3, + 224, 74, 8, 6, 1, 217, 63, 8, 4, 1, 217, 63, 8, 6, 1, 216, 227, 3, 208, + 47, 206, 38, 241, 119, 8, 4, 1, 216, 227, 3, 208, 47, 206, 38, 241, 119, + 8, 6, 1, 216, 227, 3, 237, 26, 8, 4, 1, 216, 227, 3, 237, 26, 8, 6, 1, + 216, 227, 3, 208, 185, 207, 6, 8, 4, 1, 216, 227, 3, 208, 185, 207, 6, 8, + 6, 1, 214, 168, 3, 208, 47, 206, 38, 241, 119, 8, 4, 1, 214, 168, 3, 208, + 47, 206, 38, 241, 119, 8, 6, 1, 214, 168, 3, 241, 71, 97, 8, 4, 1, 214, + 168, 3, 241, 71, 97, 8, 6, 1, 214, 33, 212, 222, 8, 4, 1, 214, 33, 212, + 222, 8, 6, 1, 212, 162, 212, 222, 8, 4, 1, 212, 162, 212, 222, 8, 6, 1, + 203, 169, 3, 241, 71, 97, 8, 4, 1, 203, 169, 3, 241, 71, 97, 8, 6, 1, + 201, 155, 8, 4, 1, 201, 155, 8, 6, 1, 202, 201, 199, 157, 8, 4, 1, 202, + 201, 199, 157, 8, 6, 1, 206, 55, 3, 97, 8, 4, 1, 206, 55, 3, 97, 8, 6, 1, + 206, 55, 3, 208, 47, 206, 38, 241, 119, 8, 4, 1, 206, 55, 3, 208, 47, + 206, 38, 241, 119, 8, 6, 1, 203, 49, 8, 4, 1, 203, 49, 8, 6, 1, 238, 81, + 8, 4, 1, 238, 81, 8, 6, 1, 228, 26, 8, 4, 1, 228, 26, 8, 6, 1, 243, 68, + 8, 4, 1, 243, 68, 67, 1, 203, 197, 8, 4, 1, 239, 126, 8, 4, 1, 224, 25, + 8, 4, 1, 221, 15, 8, 4, 1, 218, 96, 8, 4, 1, 212, 161, 8, 1, 4, 6, 212, + 161, 8, 4, 1, 204, 203, 8, 4, 1, 204, 12, 8, 6, 1, 228, 71, 242, 153, 8, + 4, 1, 228, 71, 242, 153, 8, 6, 1, 228, 71, 238, 5, 8, 4, 1, 228, 71, 238, + 5, 8, 6, 1, 228, 71, 236, 156, 8, 6, 1, 204, 185, 228, 71, 236, 156, 8, + 4, 1, 204, 185, 228, 71, 236, 156, 8, 6, 1, 204, 185, 156, 8, 4, 1, 204, + 185, 156, 8, 6, 1, 228, 71, 146, 8, 4, 1, 228, 71, 146, 8, 6, 1, 228, 71, + 212, 122, 8, 4, 1, 228, 71, 212, 122, 8, 6, 1, 228, 71, 207, 83, 8, 4, 1, + 228, 71, 207, 83, 67, 1, 128, 246, 147, 251, 251, 67, 1, 246, 79, 67, 1, + 209, 250, 238, 122, 54, 8, 6, 1, 212, 25, 8, 4, 1, 212, 25, 8, 6, 1, 204, + 185, 234, 247, 8, 4, 1, 225, 193, 3, 213, 111, 233, 187, 26, 248, 226, 8, + 1, 209, 132, 240, 182, 8, 6, 1, 220, 215, 3, 241, 119, 8, 4, 1, 220, 215, + 3, 241, 119, 8, 6, 1, 247, 224, 3, 148, 8, 4, 1, 247, 224, 3, 148, 8, 4, + 1, 247, 224, 3, 216, 184, 117, 8, 4, 1, 234, 248, 3, 216, 184, 117, 8, 6, + 1, 68, 3, 237, 26, 8, 4, 1, 68, 3, 237, 26, 8, 6, 1, 238, 6, 3, 97, 8, 4, + 1, 238, 6, 3, 97, 8, 6, 1, 202, 185, 251, 221, 8, 4, 1, 202, 185, 251, + 221, 8, 6, 1, 202, 185, 217, 121, 8, 4, 1, 202, 185, 217, 121, 8, 6, 1, + 202, 185, 204, 31, 8, 4, 1, 202, 185, 204, 31, 8, 6, 1, 236, 157, 3, 217, + 138, 97, 8, 4, 1, 236, 157, 3, 217, 138, 97, 8, 6, 1, 227, 119, 3, 217, + 138, 97, 8, 4, 1, 227, 119, 3, 217, 138, 97, 8, 6, 1, 220, 215, 3, 217, + 138, 97, 8, 4, 1, 220, 215, 3, 217, 138, 97, 8, 6, 1, 214, 33, 3, 217, + 138, 97, 8, 4, 1, 214, 33, 3, 217, 138, 97, 8, 6, 1, 212, 123, 3, 217, + 138, 97, 8, 4, 1, 212, 123, 3, 217, 138, 97, 8, 6, 1, 234, 248, 3, 117, + 8, 6, 1, 213, 105, 176, 72, 8, 6, 1, 135, 236, 156, 8, 6, 1, 225, 193, 3, + 248, 226, 8, 6, 1, 4, 6, 70, 8, 6, 1, 204, 185, 227, 118, 8, 6, 1, 204, + 185, 207, 83, 8, 6, 1, 227, 252, 3, 242, 230, 8, 6, 1, 246, 236, 8, 6, 1, + 248, 208, 8, 4, 1, 248, 208, 8, 6, 1, 217, 83, 8, 4, 1, 217, 83, 8, 238, + 127, 1, 209, 173, 70, 67, 1, 6, 234, 248, 3, 97, 67, 1, 4, 33, 217, 121, + 8, 1, 4, 6, 204, 185, 223, 243, 8, 238, 127, 1, 213, 105, 238, 5, 8, 238, + 127, 1, 213, 105, 216, 226, 8, 238, 127, 1, 228, 50, 223, 243, 8, 238, + 127, 1, 233, 19, 224, 80, 8, 238, 127, 1, 250, 234, 223, 243, 207, 163, + 220, 145, 1, 62, 207, 163, 220, 145, 1, 70, 207, 163, 220, 145, 2, 239, + 105, 207, 163, 220, 145, 1, 66, 207, 163, 220, 145, 1, 72, 207, 163, 220, + 145, 1, 74, 207, 163, 220, 145, 2, 234, 159, 207, 163, 220, 145, 1, 226, + 88, 207, 163, 220, 145, 1, 226, 178, 207, 163, 220, 145, 1, 235, 116, + 207, 163, 220, 145, 1, 235, 171, 207, 163, 220, 145, 2, 251, 33, 207, + 163, 220, 145, 1, 246, 91, 207, 163, 220, 145, 1, 246, 210, 207, 163, + 220, 145, 1, 227, 166, 207, 163, 220, 145, 1, 227, 209, 207, 163, 220, + 145, 1, 204, 230, 207, 163, 220, 145, 1, 204, 236, 207, 163, 220, 145, 1, + 241, 190, 207, 163, 220, 145, 1, 241, 199, 207, 163, 220, 145, 1, 138, + 207, 163, 220, 145, 1, 206, 61, 207, 163, 220, 145, 1, 240, 211, 207, + 163, 220, 145, 1, 241, 80, 207, 163, 220, 145, 1, 218, 241, 207, 163, + 220, 145, 1, 215, 106, 207, 163, 220, 145, 1, 215, 217, 207, 163, 220, + 145, 1, 248, 124, 207, 163, 220, 145, 1, 248, 192, 207, 163, 220, 145, 1, + 221, 136, 207, 163, 220, 145, 1, 213, 1, 207, 163, 220, 145, 1, 224, 110, + 207, 163, 220, 145, 1, 212, 201, 207, 163, 220, 145, 1, 209, 29, 207, + 163, 220, 145, 1, 233, 207, 207, 163, 220, 145, 22, 2, 62, 207, 163, 220, + 145, 22, 2, 70, 207, 163, 220, 145, 22, 2, 66, 207, 163, 220, 145, 22, 2, + 72, 207, 163, 220, 145, 22, 2, 217, 63, 207, 163, 220, 145, 215, 101, + 222, 149, 207, 163, 220, 145, 215, 101, 222, 148, 207, 163, 220, 145, + 215, 101, 222, 147, 207, 163, 220, 145, 215, 101, 222, 146, 157, 228, + 101, 236, 219, 112, 214, 87, 157, 228, 101, 236, 219, 112, 234, 213, 157, + 228, 101, 236, 219, 126, 214, 85, 157, 228, 101, 236, 219, 112, 209, 98, + 157, 228, 101, 236, 219, 112, 238, 227, 157, 228, 101, 236, 219, 126, + 209, 97, 157, 228, 101, 214, 88, 81, 157, 228, 101, 215, 133, 81, 157, + 228, 101, 212, 149, 81, 157, 228, 101, 214, 89, 81, 215, 241, 1, 161, + 215, 241, 1, 226, 207, 215, 241, 1, 236, 89, 215, 241, 1, 219, 253, 215, + 241, 1, 247, 190, 215, 241, 1, 247, 37, 215, 241, 1, 227, 248, 215, 241, + 1, 218, 60, 215, 241, 1, 207, 36, 215, 241, 1, 206, 122, 215, 241, 1, + 242, 58, 215, 241, 1, 188, 215, 241, 1, 172, 215, 241, 1, 215, 245, 215, + 241, 1, 249, 136, 215, 241, 1, 178, 215, 241, 1, 205, 32, 215, 241, 1, + 205, 22, 215, 241, 1, 239, 93, 215, 241, 1, 201, 114, 215, 241, 1, 199, + 77, 215, 241, 1, 199, 114, 215, 241, 1, 4, 62, 215, 241, 1, 183, 215, + 241, 1, 213, 252, 215, 241, 1, 194, 215, 241, 1, 210, 114, 215, 241, 1, + 212, 64, 215, 241, 1, 144, 215, 241, 1, 62, 215, 241, 1, 70, 215, 241, 1, + 66, 215, 241, 1, 72, 215, 241, 1, 74, 215, 241, 1, 214, 159, 215, 241, 1, + 200, 181, 215, 241, 1, 237, 195, 215, 241, 1, 235, 235, 215, 241, 1, 238, + 255, 215, 241, 208, 12, 1, 201, 114, 215, 241, 208, 12, 1, 183, 215, 241, + 1, 204, 253, 215, 241, 1, 204, 241, 215, 241, 1, 241, 220, 215, 241, 1, + 219, 21, 215, 241, 1, 251, 109, 183, 215, 241, 1, 202, 188, 210, 114, + 215, 241, 1, 202, 189, 144, 215, 241, 1, 250, 172, 237, 195, 215, 241, + 208, 12, 1, 213, 252, 215, 241, 207, 215, 1, 213, 252, 215, 241, 1, 247, + 149, 215, 241, 209, 139, 234, 137, 81, 215, 241, 53, 234, 137, 81, 215, + 241, 134, 210, 106, 215, 241, 134, 53, 210, 106, 211, 241, 2, 251, 33, + 211, 241, 2, 202, 203, 211, 241, 1, 62, 211, 241, 1, 252, 138, 211, 241, + 1, 70, 211, 241, 1, 228, 151, 211, 241, 1, 66, 211, 241, 1, 203, 182, + 211, 241, 1, 109, 146, 211, 241, 1, 109, 212, 216, 211, 241, 1, 109, 156, + 211, 241, 1, 109, 224, 139, 211, 241, 1, 72, 211, 241, 1, 238, 255, 211, + 241, 1, 251, 176, 211, 241, 1, 74, 211, 241, 1, 217, 63, 211, 241, 1, + 250, 139, 211, 241, 1, 161, 211, 241, 1, 226, 207, 211, 241, 1, 236, 89, + 211, 241, 1, 235, 199, 211, 241, 1, 219, 253, 211, 241, 1, 247, 190, 211, + 241, 1, 247, 37, 211, 241, 1, 227, 248, 211, 241, 1, 227, 215, 211, 241, + 1, 218, 60, 211, 241, 1, 204, 253, 211, 241, 1, 204, 241, 211, 241, 1, + 241, 220, 211, 241, 1, 241, 204, 211, 241, 1, 219, 21, 211, 241, 1, 207, + 36, 211, 241, 1, 206, 122, 211, 241, 1, 242, 58, 211, 241, 1, 241, 100, + 211, 241, 1, 188, 211, 241, 1, 172, 211, 241, 1, 215, 245, 211, 241, 1, + 249, 136, 211, 241, 1, 248, 200, 211, 241, 1, 178, 211, 241, 1, 183, 211, + 241, 1, 213, 252, 211, 241, 1, 194, 211, 241, 1, 203, 90, 211, 241, 1, + 210, 114, 211, 241, 1, 208, 179, 211, 241, 1, 212, 64, 211, 241, 1, 144, + 211, 241, 1, 224, 138, 211, 241, 111, 2, 234, 231, 211, 241, 22, 2, 252, + 138, 211, 241, 22, 2, 70, 211, 241, 22, 2, 228, 151, 211, 241, 22, 2, 66, + 211, 241, 22, 2, 203, 182, 211, 241, 22, 2, 109, 146, 211, 241, 22, 2, + 109, 212, 216, 211, 241, 22, 2, 109, 156, 211, 241, 22, 2, 109, 224, 139, + 211, 241, 22, 2, 72, 211, 241, 22, 2, 238, 255, 211, 241, 22, 2, 251, + 176, 211, 241, 22, 2, 74, 211, 241, 22, 2, 217, 63, 211, 241, 22, 2, 250, + 139, 211, 241, 2, 202, 208, 211, 241, 2, 247, 149, 211, 241, 242, 10, + 211, 241, 53, 242, 10, 211, 241, 17, 199, 81, 211, 241, 17, 102, 211, + 241, 17, 105, 211, 241, 17, 147, 211, 241, 17, 149, 211, 241, 17, 164, + 211, 241, 17, 187, 211, 241, 17, 210, 135, 211, 241, 17, 192, 211, 241, + 17, 219, 113, 38, 94, 17, 199, 81, 38, 94, 17, 102, 38, 94, 17, 105, 38, + 94, 17, 147, 38, 94, 17, 149, 38, 94, 17, 164, 38, 94, 17, 187, 38, 94, + 17, 210, 135, 38, 94, 17, 192, 38, 94, 17, 219, 113, 38, 94, 1, 62, 38, + 94, 1, 66, 38, 94, 1, 161, 38, 94, 1, 188, 38, 94, 1, 172, 38, 94, 1, + 213, 252, 38, 94, 1, 202, 234, 38, 94, 2, 250, 122, 94, 2, 208, 243, 247, + 149, 94, 2, 247, 150, 202, 208, 94, 2, 53, 247, 150, 202, 208, 94, 2, + 247, 150, 105, 94, 2, 247, 150, 147, 94, 2, 247, 150, 250, 122, 94, 2, + 214, 195, 94, 236, 53, 237, 93, 94, 247, 129, 94, 234, 130, 94, 2, 209, + 177, 94, 227, 240, 217, 86, 227, 14, 224, 211, 17, 199, 81, 227, 14, 224, + 211, 17, 102, 227, 14, 224, 211, 17, 105, 227, 14, 224, 211, 17, 147, + 227, 14, 224, 211, 17, 149, 227, 14, 224, 211, 17, 164, 227, 14, 224, + 211, 17, 187, 227, 14, 224, 211, 17, 210, 135, 227, 14, 224, 211, 17, + 192, 227, 14, 224, 211, 17, 219, 113, 227, 14, 224, 211, 1, 161, 227, 14, + 224, 211, 1, 226, 207, 227, 14, 224, 211, 1, 236, 89, 227, 14, 224, 211, + 1, 219, 253, 227, 14, 224, 211, 1, 212, 64, 227, 14, 224, 211, 1, 210, + 114, 227, 14, 224, 211, 1, 199, 114, 227, 14, 224, 211, 1, 218, 60, 227, + 14, 224, 211, 1, 207, 36, 227, 14, 224, 211, 1, 233, 101, 227, 14, 224, + 211, 1, 188, 227, 14, 224, 211, 1, 172, 227, 14, 224, 211, 1, 215, 245, + 227, 14, 224, 211, 1, 178, 227, 14, 224, 211, 1, 242, 58, 227, 14, 224, + 211, 1, 249, 136, 227, 14, 224, 211, 1, 213, 252, 227, 14, 224, 211, 1, + 183, 227, 14, 224, 211, 1, 194, 227, 14, 224, 211, 1, 201, 114, 227, 14, + 224, 211, 1, 206, 122, 227, 14, 224, 211, 1, 144, 227, 14, 224, 211, 1, + 203, 90, 227, 14, 224, 211, 1, 247, 190, 227, 14, 224, 211, 1, 62, 227, + 14, 224, 211, 1, 217, 121, 227, 14, 224, 211, 1, 70, 227, 14, 224, 211, + 1, 217, 63, 227, 14, 224, 211, 22, 204, 31, 227, 14, 224, 211, 22, 72, + 227, 14, 224, 211, 22, 66, 227, 14, 224, 211, 22, 238, 255, 227, 14, 224, + 211, 22, 74, 227, 14, 224, 211, 150, 215, 121, 227, 14, 224, 211, 150, + 247, 165, 227, 14, 224, 211, 150, 247, 166, 215, 121, 227, 14, 224, 211, + 2, 242, 172, 227, 14, 224, 211, 2, 209, 190, 213, 151, 1, 161, 213, 151, + 1, 236, 89, 213, 151, 1, 219, 253, 213, 151, 1, 207, 36, 213, 151, 1, + 242, 58, 213, 151, 1, 188, 213, 151, 1, 172, 213, 151, 1, 249, 136, 213, + 151, 1, 178, 213, 151, 1, 247, 190, 213, 151, 1, 227, 248, 213, 151, 1, + 218, 60, 213, 151, 1, 212, 64, 213, 151, 1, 213, 252, 213, 151, 1, 194, + 213, 151, 1, 183, 213, 151, 1, 201, 114, 213, 151, 1, 144, 213, 151, 1, + 222, 110, 213, 151, 1, 219, 232, 213, 151, 1, 220, 75, 213, 151, 1, 218, + 27, 213, 151, 1, 62, 213, 151, 22, 2, 70, 213, 151, 22, 2, 66, 213, 151, + 22, 2, 72, 213, 151, 22, 2, 251, 176, 213, 151, 22, 2, 74, 213, 151, 22, + 2, 250, 139, 213, 151, 22, 2, 238, 69, 213, 151, 22, 2, 239, 27, 213, + 151, 111, 2, 219, 255, 213, 151, 111, 2, 220, 214, 213, 151, 111, 2, 146, + 213, 151, 111, 2, 234, 247, 213, 151, 202, 208, 213, 151, 211, 193, 81, + 29, 129, 205, 249, 29, 129, 205, 248, 29, 129, 205, 246, 29, 129, 205, + 251, 29, 129, 213, 73, 29, 129, 213, 57, 29, 129, 213, 52, 29, 129, 213, + 54, 29, 129, 213, 70, 29, 129, 213, 63, 29, 129, 213, 56, 29, 129, 213, + 75, 29, 129, 213, 58, 29, 129, 213, 77, 29, 129, 213, 74, 29, 129, 221, + 193, 29, 129, 221, 184, 29, 129, 221, 187, 29, 129, 215, 175, 29, 129, + 215, 186, 29, 129, 215, 187, 29, 129, 208, 163, 29, 129, 228, 164, 29, + 129, 228, 171, 29, 129, 208, 174, 29, 129, 208, 161, 29, 129, 215, 226, + 29, 129, 234, 61, 29, 129, 208, 158, 227, 233, 2, 216, 141, 227, 233, 2, + 247, 73, 227, 233, 2, 225, 48, 227, 233, 2, 201, 21, 227, 233, 1, 62, + 227, 233, 1, 233, 19, 227, 18, 227, 233, 1, 70, 227, 233, 1, 228, 151, + 227, 233, 1, 66, 227, 233, 1, 216, 211, 247, 43, 227, 233, 1, 219, 254, + 225, 7, 227, 233, 1, 219, 254, 225, 8, 213, 205, 227, 233, 1, 72, 227, + 233, 1, 251, 176, 227, 233, 1, 74, 227, 233, 1, 161, 227, 233, 1, 227, + 108, 211, 253, 227, 233, 1, 227, 108, 221, 0, 227, 233, 1, 236, 89, 227, + 233, 1, 236, 90, 221, 0, 227, 233, 1, 219, 253, 227, 233, 1, 247, 190, + 227, 233, 1, 247, 191, 221, 0, 227, 233, 1, 227, 248, 227, 233, 1, 218, + 61, 221, 0, 227, 233, 1, 227, 249, 222, 202, 227, 233, 1, 218, 60, 227, + 233, 1, 204, 253, 227, 233, 1, 204, 254, 222, 202, 227, 233, 1, 241, 220, + 227, 233, 1, 241, 221, 222, 202, 227, 233, 1, 220, 162, 221, 0, 227, 233, + 1, 207, 36, 227, 233, 1, 207, 37, 221, 0, 227, 233, 1, 242, 58, 227, 233, + 1, 242, 59, 222, 202, 227, 233, 1, 188, 227, 233, 1, 172, 227, 233, 1, + 216, 211, 221, 0, 227, 233, 1, 249, 136, 227, 233, 1, 249, 137, 221, 0, + 227, 233, 1, 178, 227, 233, 1, 183, 227, 233, 1, 213, 252, 227, 233, 1, + 213, 253, 251, 186, 227, 233, 1, 194, 227, 233, 1, 201, 114, 227, 233, 1, + 212, 65, 221, 0, 227, 233, 1, 212, 65, 222, 202, 227, 233, 1, 212, 64, + 227, 233, 1, 144, 227, 233, 2, 247, 74, 206, 169, 227, 233, 22, 2, 206, + 228, 227, 233, 22, 2, 205, 179, 227, 233, 22, 2, 200, 210, 227, 233, 22, + 2, 200, 211, 222, 51, 227, 233, 22, 2, 207, 238, 227, 233, 22, 2, 207, + 239, 222, 39, 227, 233, 22, 2, 206, 249, 227, 233, 22, 2, 241, 6, 220, + 255, 227, 233, 22, 2, 216, 30, 227, 233, 111, 2, 226, 236, 227, 233, 111, + 2, 216, 44, 227, 233, 111, 2, 247, 175, 227, 233, 216, 154, 227, 233, 49, + 213, 125, 227, 233, 51, 213, 125, 227, 233, 216, 200, 251, 78, 227, 233, + 216, 200, 222, 220, 227, 233, 216, 200, 224, 29, 227, 233, 216, 200, 201, + 14, 227, 233, 216, 200, 216, 155, 227, 233, 216, 200, 224, 168, 227, 233, + 216, 200, 224, 23, 227, 233, 216, 200, 251, 229, 227, 233, 216, 200, 251, + 230, 251, 229, 227, 233, 216, 200, 215, 144, 227, 233, 204, 185, 216, + 200, 215, 144, 227, 233, 216, 150, 227, 233, 17, 199, 81, 227, 233, 17, + 102, 227, 233, 17, 105, 227, 233, 17, 147, 227, 233, 17, 149, 227, 233, + 17, 164, 227, 233, 17, 187, 227, 233, 17, 210, 135, 227, 233, 17, 192, + 227, 233, 17, 219, 113, 227, 233, 216, 200, 205, 215, 204, 200, 227, 233, + 216, 200, 228, 22, 71, 1, 210, 90, 235, 199, 71, 1, 210, 90, 247, 37, 71, + 1, 210, 90, 227, 215, 71, 1, 210, 90, 219, 21, 71, 1, 210, 90, 248, 200, + 71, 2, 210, 90, 211, 239, 71, 67, 1, 210, 90, 213, 168, 71, 1, 46, 225, + 148, 218, 60, 71, 1, 46, 225, 148, 237, 195, 71, 1, 46, 225, 148, 236, + 89, 71, 1, 46, 225, 148, 235, 199, 71, 1, 46, 225, 148, 227, 248, 71, 1, + 46, 225, 148, 227, 215, 71, 1, 46, 225, 148, 241, 220, 71, 1, 46, 225, + 148, 241, 204, 71, 1, 46, 225, 148, 219, 21, 71, 46, 225, 148, 17, 199, + 81, 71, 46, 225, 148, 17, 102, 71, 46, 225, 148, 17, 105, 71, 46, 225, + 148, 17, 147, 71, 46, 225, 148, 17, 149, 71, 46, 225, 148, 17, 164, 71, + 46, 225, 148, 17, 187, 71, 46, 225, 148, 17, 210, 135, 71, 46, 225, 148, + 17, 192, 71, 46, 225, 148, 17, 219, 113, 71, 1, 46, 225, 148, 224, 138, + 71, 1, 46, 225, 148, 242, 58, 71, 1, 46, 225, 148, 241, 100, 71, 1, 46, + 225, 148, 249, 136, 71, 1, 46, 225, 148, 248, 200, 247, 30, 1, 62, 247, + 30, 1, 70, 247, 30, 1, 66, 247, 30, 1, 72, 247, 30, 1, 251, 176, 247, 30, + 1, 74, 247, 30, 1, 161, 247, 30, 1, 226, 207, 247, 30, 1, 236, 89, 247, + 30, 1, 235, 199, 247, 30, 1, 219, 162, 247, 30, 1, 219, 253, 247, 30, 1, + 247, 37, 247, 30, 1, 246, 238, 247, 30, 1, 227, 248, 247, 30, 1, 227, + 215, 247, 30, 1, 219, 152, 247, 30, 1, 219, 154, 247, 30, 1, 219, 153, + 247, 30, 1, 207, 36, 247, 30, 1, 206, 122, 247, 30, 1, 242, 58, 247, 30, + 1, 241, 100, 247, 30, 1, 218, 102, 247, 30, 1, 188, 247, 30, 1, 241, 220, + 247, 30, 1, 172, 247, 30, 1, 215, 47, 247, 30, 1, 215, 245, 247, 30, 1, + 249, 136, 247, 30, 1, 248, 200, 247, 30, 1, 221, 33, 247, 30, 1, 178, + 247, 30, 1, 249, 44, 247, 30, 1, 183, 247, 30, 1, 213, 252, 247, 30, 1, + 194, 247, 30, 1, 203, 90, 247, 30, 1, 208, 179, 247, 30, 1, 212, 64, 247, + 30, 1, 144, 247, 30, 22, 2, 252, 138, 247, 30, 22, 2, 70, 247, 30, 22, 2, + 228, 151, 247, 30, 22, 2, 238, 234, 247, 30, 22, 2, 66, 247, 30, 22, 2, + 217, 121, 247, 30, 22, 2, 74, 247, 30, 22, 2, 251, 176, 247, 30, 22, 2, + 250, 139, 247, 30, 22, 2, 204, 31, 247, 30, 111, 2, 183, 247, 30, 111, 2, + 213, 252, 247, 30, 111, 2, 194, 247, 30, 111, 2, 201, 114, 247, 30, 1, + 47, 227, 118, 247, 30, 1, 47, 236, 156, 247, 30, 1, 47, 219, 255, 247, + 30, 111, 2, 47, 219, 255, 247, 30, 1, 47, 247, 38, 247, 30, 1, 47, 207, + 83, 247, 30, 1, 47, 220, 214, 247, 30, 1, 47, 216, 226, 247, 30, 1, 47, + 200, 123, 247, 30, 1, 47, 146, 247, 30, 1, 47, 156, 247, 30, 1, 47, 208, + 182, 247, 30, 111, 2, 47, 223, 243, 247, 30, 111, 2, 47, 234, 247, 247, + 30, 17, 199, 81, 247, 30, 17, 102, 247, 30, 17, 105, 247, 30, 17, 147, + 247, 30, 17, 149, 247, 30, 17, 164, 247, 30, 17, 187, 247, 30, 17, 210, + 135, 247, 30, 17, 192, 247, 30, 17, 219, 113, 247, 30, 214, 212, 208, + 217, 247, 30, 214, 212, 242, 10, 247, 30, 214, 212, 53, 242, 10, 247, 30, + 214, 212, 205, 83, 242, 10, 71, 1, 226, 200, 236, 89, 71, 1, 226, 200, + 247, 190, 71, 1, 226, 200, 247, 37, 71, 1, 226, 200, 227, 248, 71, 1, + 226, 200, 227, 215, 71, 1, 226, 200, 218, 60, 71, 1, 226, 200, 204, 253, + 71, 1, 226, 200, 204, 241, 71, 1, 226, 200, 241, 220, 71, 1, 226, 200, + 241, 204, 71, 1, 226, 200, 241, 100, 71, 1, 226, 200, 188, 71, 1, 226, + 200, 212, 64, 71, 1, 226, 200, 144, 71, 1, 226, 200, 234, 84, 71, 1, 226, + 200, 237, 195, 71, 67, 1, 226, 200, 213, 168, 71, 1, 226, 200, 200, 181, + 71, 1, 226, 200, 199, 114, 71, 1, 226, 200, 213, 252, 71, 224, 97, 226, + 200, 217, 143, 71, 224, 97, 226, 200, 214, 110, 71, 224, 97, 226, 200, + 234, 6, 71, 16, 251, 163, 238, 42, 71, 16, 251, 163, 102, 71, 16, 251, + 163, 105, 71, 1, 251, 163, 213, 252, 71, 2, 216, 137, 227, 44, 205, 174, + 71, 2, 46, 225, 148, 205, 172, 71, 2, 46, 225, 148, 205, 169, 71, 1, 209, + 198, 216, 181, 247, 37, 71, 1, 209, 198, 216, 181, 210, 114, 46, 202, + 224, 1, 128, 226, 88, 46, 202, 224, 1, 122, 226, 88, 46, 202, 224, 1, + 128, 226, 178, 46, 202, 224, 1, 122, 226, 178, 46, 202, 224, 1, 128, 226, + 187, 46, 202, 224, 1, 122, 226, 187, 46, 202, 224, 1, 128, 235, 116, 46, + 202, 224, 1, 122, 235, 116, 46, 202, 224, 1, 128, 219, 178, 46, 202, 224, + 1, 122, 219, 178, 46, 202, 224, 1, 128, 246, 91, 46, 202, 224, 1, 122, + 246, 91, 46, 202, 224, 1, 128, 246, 210, 46, 202, 224, 1, 122, 246, 210, + 46, 202, 224, 1, 128, 209, 29, 46, 202, 224, 1, 122, 209, 29, 46, 202, + 224, 1, 128, 218, 26, 46, 202, 224, 1, 122, 218, 26, 46, 202, 224, 1, + 128, 240, 211, 46, 202, 224, 1, 122, 240, 211, 46, 202, 224, 1, 128, 138, + 46, 202, 224, 1, 122, 138, 46, 202, 224, 1, 128, 206, 61, 46, 202, 224, + 1, 122, 206, 61, 46, 202, 224, 1, 128, 218, 241, 46, 202, 224, 1, 122, + 218, 241, 46, 202, 224, 1, 128, 248, 124, 46, 202, 224, 1, 122, 248, 124, + 46, 202, 224, 1, 128, 215, 106, 46, 202, 224, 1, 122, 215, 106, 46, 202, + 224, 1, 128, 215, 217, 46, 202, 224, 1, 122, 215, 217, 46, 202, 224, 1, + 128, 237, 13, 46, 202, 224, 1, 122, 237, 13, 46, 202, 224, 1, 128, 221, + 136, 46, 202, 224, 1, 122, 221, 136, 46, 202, 224, 1, 128, 199, 245, 46, + 202, 224, 1, 122, 199, 245, 46, 202, 224, 1, 128, 213, 1, 46, 202, 224, + 1, 122, 213, 1, 46, 202, 224, 1, 128, 224, 110, 46, 202, 224, 1, 122, + 224, 110, 46, 202, 224, 1, 128, 202, 193, 46, 202, 224, 1, 122, 202, 193, + 46, 202, 224, 1, 128, 233, 207, 46, 202, 224, 1, 122, 233, 207, 46, 202, + 224, 1, 128, 74, 46, 202, 224, 1, 122, 74, 46, 202, 224, 222, 199, 227, + 64, 46, 202, 224, 22, 252, 138, 46, 202, 224, 22, 70, 46, 202, 224, 22, + 204, 31, 46, 202, 224, 22, 66, 46, 202, 224, 22, 72, 46, 202, 224, 22, + 74, 46, 202, 224, 222, 199, 226, 181, 46, 202, 224, 22, 232, 240, 46, + 202, 224, 22, 204, 30, 46, 202, 224, 22, 204, 46, 46, 202, 224, 22, 250, + 137, 46, 202, 224, 22, 250, 112, 46, 202, 224, 22, 251, 85, 46, 202, 224, + 22, 251, 101, 46, 202, 224, 150, 222, 199, 238, 216, 46, 202, 224, 150, + 222, 199, 218, 101, 46, 202, 224, 150, 222, 199, 206, 61, 46, 202, 224, + 150, 222, 199, 209, 12, 46, 202, 224, 16, 226, 71, 46, 202, 224, 16, 218, + 101, 46, 202, 224, 16, 212, 23, 46, 202, 224, 16, 233, 208, 233, 202, 46, + 202, 224, 16, 226, 81, 226, 80, 222, 58, 222, 117, 1, 72, 222, 58, 222, + 117, 1, 74, 222, 58, 222, 117, 1, 247, 37, 222, 58, 222, 117, 1, 218, 60, + 222, 58, 222, 117, 1, 204, 253, 222, 58, 222, 117, 1, 204, 241, 222, 58, + 222, 117, 1, 241, 220, 222, 58, 222, 117, 1, 241, 204, 222, 58, 222, 117, + 1, 219, 21, 222, 58, 222, 117, 1, 210, 114, 222, 58, 222, 117, 1, 208, + 179, 222, 58, 222, 117, 22, 2, 228, 151, 222, 58, 222, 117, 22, 2, 203, + 182, 222, 58, 222, 117, 22, 2, 252, 102, 222, 58, 222, 117, 22, 2, 250, + 139, 222, 58, 222, 117, 22, 2, 252, 95, 222, 58, 222, 117, 246, 253, 222, + 58, 222, 117, 251, 182, 226, 170, 222, 58, 222, 117, 251, 62, 222, 58, + 222, 117, 5, 213, 130, 81, 222, 58, 222, 117, 200, 238, 213, 130, 81, + 222, 58, 222, 117, 22, 2, 202, 203, 222, 58, 222, 117, 202, 208, 34, 5, + 204, 234, 34, 5, 204, 237, 34, 5, 204, 240, 34, 5, 204, 238, 34, 5, 204, + 239, 34, 5, 204, 236, 34, 5, 241, 198, 34, 5, 241, 200, 34, 5, 241, 203, + 34, 5, 241, 201, 34, 5, 241, 202, 34, 5, 241, 199, 34, 5, 239, 80, 34, 5, + 239, 84, 34, 5, 239, 92, 34, 5, 239, 89, 34, 5, 239, 90, 34, 5, 239, 81, + 34, 5, 247, 90, 34, 5, 247, 84, 34, 5, 247, 86, 34, 5, 247, 89, 34, 5, + 247, 87, 34, 5, 247, 88, 34, 5, 247, 85, 34, 5, 249, 44, 34, 5, 249, 23, + 34, 5, 249, 35, 34, 5, 249, 43, 34, 5, 249, 38, 34, 5, 249, 39, 34, 5, + 249, 27, 8, 4, 1, 249, 71, 251, 112, 8, 4, 1, 35, 213, 103, 8, 4, 1, 248, + 140, 72, 8, 4, 1, 249, 71, 72, 8, 4, 1, 197, 3, 237, 26, 8, 4, 1, 224, + 249, 238, 5, 8, 4, 1, 135, 236, 157, 3, 242, 230, 8, 4, 1, 225, 193, 3, + 228, 50, 225, 47, 212, 122, 8, 4, 1, 225, 193, 3, 53, 101, 205, 240, 8, + 4, 1, 225, 193, 3, 101, 213, 26, 8, 4, 1, 223, 244, 3, 242, 230, 8, 4, 1, + 220, 215, 3, 242, 230, 8, 4, 1, 238, 166, 3, 242, 230, 8, 4, 1, 248, 140, + 74, 8, 4, 1, 248, 140, 163, 3, 97, 8, 4, 1, 176, 163, 3, 97, 8, 4, 1, + 228, 50, 217, 121, 8, 4, 1, 204, 185, 217, 122, 3, 97, 8, 4, 1, 204, 185, + 217, 122, 3, 233, 177, 97, 8, 4, 1, 204, 185, 163, 217, 49, 8, 4, 1, 204, + 185, 163, 217, 50, 3, 97, 8, 4, 1, 208, 81, 146, 8, 1, 4, 6, 214, 33, 3, + 51, 225, 16, 8, 4, 1, 214, 33, 201, 3, 234, 177, 8, 4, 1, 53, 146, 8, 4, + 1, 214, 33, 3, 242, 230, 8, 4, 1, 53, 214, 33, 3, 242, 230, 8, 4, 1, 135, + 146, 8, 4, 1, 135, 214, 33, 3, 213, 26, 8, 4, 1, 249, 62, 238, 94, 8, 4, + 1, 108, 3, 209, 250, 51, 225, 16, 8, 4, 1, 108, 249, 77, 3, 209, 250, 51, + 225, 16, 8, 4, 1, 204, 23, 8, 4, 1, 204, 185, 204, 23, 8, 4, 1, 108, 3, + 49, 117, 8, 4, 1, 246, 236, 8, 4, 1, 246, 237, 3, 128, 51, 213, 26, 8, 4, + 1, 246, 237, 3, 128, 49, 210, 149, 8, 4, 1, 200, 196, 3, 128, 51, 213, + 26, 8, 4, 1, 200, 196, 3, 168, 49, 225, 16, 8, 4, 1, 200, 196, 3, 168, + 49, 225, 17, 26, 128, 51, 213, 26, 8, 4, 1, 200, 196, 3, 168, 49, 225, + 17, 3, 210, 149, 8, 4, 1, 200, 124, 3, 209, 250, 51, 225, 16, 67, 248, + 58, 3, 228, 50, 248, 57, 67, 1, 4, 234, 103, 67, 1, 4, 225, 193, 3, 228, + 50, 225, 47, 212, 122, 67, 1, 4, 225, 193, 3, 101, 205, 240, 67, 1, 4, + 108, 3, 49, 117, 8, 4, 1, 212, 39, 200, 65, 8, 4, 1, 228, 39, 72, 8, 4, + 1, 176, 217, 121, 8, 4, 1, 203, 232, 8, 4, 1, 228, 50, 251, 112, 31, 1, + 4, 6, 217, 83, 91, 4, 1, 62, 91, 4, 1, 72, 91, 4, 1, 70, 91, 4, 1, 74, + 91, 4, 1, 66, 91, 4, 1, 203, 168, 91, 4, 1, 236, 89, 91, 4, 1, 161, 91, + 4, 1, 236, 15, 91, 4, 1, 235, 161, 91, 4, 1, 235, 116, 91, 4, 1, 235, 50, + 91, 4, 1, 235, 12, 91, 4, 1, 144, 91, 4, 1, 234, 139, 91, 4, 1, 234, 75, + 91, 4, 1, 233, 207, 91, 4, 1, 233, 97, 91, 4, 1, 233, 69, 91, 4, 1, 194, + 91, 4, 1, 225, 40, 91, 4, 1, 224, 210, 91, 4, 1, 224, 110, 91, 4, 1, 224, + 42, 91, 4, 1, 224, 11, 91, 4, 1, 178, 91, 4, 1, 222, 76, 91, 4, 1, 221, + 211, 91, 4, 1, 221, 136, 91, 4, 1, 221, 41, 91, 4, 1, 188, 91, 4, 1, 233, + 231, 91, 4, 1, 220, 144, 91, 4, 1, 220, 34, 91, 4, 1, 219, 150, 91, 4, 1, + 218, 241, 91, 4, 1, 218, 133, 91, 4, 1, 218, 71, 91, 4, 1, 214, 96, 91, + 4, 1, 214, 82, 91, 4, 1, 214, 75, 91, 4, 1, 214, 66, 91, 4, 1, 214, 55, + 91, 4, 1, 214, 53, 91, 4, 1, 212, 64, 91, 4, 1, 212, 122, 91, 4, 1, 211, + 202, 91, 4, 1, 209, 182, 91, 4, 1, 209, 29, 91, 4, 1, 208, 24, 91, 4, 1, + 207, 191, 91, 4, 1, 242, 58, 91, 4, 1, 207, 36, 91, 4, 1, 241, 175, 91, + 4, 1, 206, 201, 91, 4, 1, 241, 76, 91, 4, 1, 206, 15, 91, 4, 1, 240, 211, + 91, 4, 1, 239, 137, 91, 4, 1, 239, 107, 91, 4, 1, 240, 222, 91, 4, 1, + 205, 203, 91, 4, 1, 205, 202, 91, 4, 1, 205, 191, 91, 4, 1, 205, 190, 91, + 4, 1, 205, 189, 91, 4, 1, 205, 188, 91, 4, 1, 205, 32, 91, 4, 1, 205, 26, + 91, 4, 1, 205, 11, 91, 4, 1, 205, 9, 91, 4, 1, 205, 5, 91, 4, 1, 205, 4, + 91, 4, 1, 201, 114, 91, 4, 1, 201, 64, 91, 4, 1, 201, 31, 91, 4, 1, 201, + 0, 91, 4, 1, 200, 216, 91, 4, 1, 200, 203, 91, 4, 1, 183, 222, 58, 222, + 117, 1, 226, 78, 222, 58, 222, 117, 1, 212, 23, 222, 58, 222, 117, 1, + 225, 149, 222, 58, 222, 117, 1, 221, 147, 222, 58, 222, 117, 1, 172, 222, + 58, 222, 117, 1, 188, 222, 58, 222, 117, 1, 246, 228, 222, 58, 222, 117, + 1, 205, 242, 222, 58, 222, 117, 1, 226, 173, 222, 58, 222, 117, 1, 219, + 168, 222, 58, 222, 117, 1, 206, 53, 222, 58, 222, 117, 1, 201, 108, 222, + 58, 222, 117, 1, 200, 75, 222, 58, 222, 117, 1, 233, 89, 222, 58, 222, + 117, 1, 204, 5, 222, 58, 222, 117, 1, 70, 222, 58, 222, 117, 1, 215, 239, + 222, 58, 222, 117, 1, 250, 150, 222, 58, 222, 117, 1, 235, 109, 222, 58, + 222, 117, 1, 227, 213, 222, 58, 222, 117, 1, 213, 229, 222, 58, 222, 117, + 1, 249, 136, 222, 58, 222, 117, 1, 227, 198, 222, 58, 222, 117, 1, 241, + 33, 222, 58, 222, 117, 1, 235, 168, 222, 58, 222, 117, 1, 241, 78, 222, + 58, 222, 117, 1, 248, 198, 222, 58, 222, 117, 1, 226, 79, 224, 79, 222, + 58, 222, 117, 1, 225, 150, 224, 79, 222, 58, 222, 117, 1, 221, 148, 224, + 79, 222, 58, 222, 117, 1, 216, 211, 224, 79, 222, 58, 222, 117, 1, 220, + 162, 224, 79, 222, 58, 222, 117, 1, 205, 243, 224, 79, 222, 58, 222, 117, + 1, 219, 169, 224, 79, 222, 58, 222, 117, 1, 233, 19, 224, 79, 222, 58, + 222, 117, 22, 2, 217, 76, 222, 58, 222, 117, 22, 2, 228, 115, 222, 58, + 222, 117, 22, 2, 251, 83, 222, 58, 222, 117, 22, 2, 200, 40, 222, 58, + 222, 117, 22, 2, 209, 2, 222, 58, 222, 117, 22, 2, 204, 2, 222, 58, 222, + 117, 22, 2, 246, 251, 222, 58, 222, 117, 22, 2, 218, 86, 222, 58, 222, + 117, 246, 252, 222, 58, 222, 117, 224, 26, 228, 1, 222, 58, 222, 117, + 251, 2, 228, 1, 222, 58, 222, 117, 17, 199, 81, 222, 58, 222, 117, 17, + 102, 222, 58, 222, 117, 17, 105, 222, 58, 222, 117, 17, 147, 222, 58, + 222, 117, 17, 149, 222, 58, 222, 117, 17, 164, 222, 58, 222, 117, 17, + 187, 222, 58, 222, 117, 17, 210, 135, 222, 58, 222, 117, 17, 192, 222, + 58, 222, 117, 17, 219, 113, 29, 181, 217, 223, 29, 181, 217, 228, 29, + 181, 199, 244, 29, 181, 199, 243, 29, 181, 199, 242, 29, 181, 204, 96, + 29, 181, 204, 100, 29, 181, 199, 209, 29, 181, 199, 205, 29, 181, 238, + 68, 29, 181, 238, 66, 29, 181, 238, 67, 29, 181, 238, 64, 29, 181, 233, + 9, 29, 181, 233, 8, 29, 181, 233, 6, 29, 181, 233, 7, 29, 181, 233, 12, + 29, 181, 233, 5, 29, 181, 233, 4, 29, 181, 233, 14, 29, 181, 250, 244, + 29, 181, 250, 243, 29, 110, 219, 136, 29, 110, 219, 142, 29, 110, 208, + 160, 29, 110, 208, 159, 29, 110, 205, 248, 29, 110, 205, 246, 29, 110, + 205, 245, 29, 110, 205, 251, 29, 110, 205, 252, 29, 110, 205, 244, 29, + 110, 213, 57, 29, 110, 213, 72, 29, 110, 208, 166, 29, 110, 213, 69, 29, + 110, 213, 59, 29, 110, 213, 61, 29, 110, 213, 48, 29, 110, 213, 49, 29, + 110, 227, 50, 29, 110, 221, 192, 29, 110, 221, 186, 29, 110, 208, 170, + 29, 110, 221, 189, 29, 110, 221, 195, 29, 110, 215, 171, 29, 110, 215, + 180, 29, 110, 215, 184, 29, 110, 208, 168, 29, 110, 215, 174, 29, 110, + 215, 188, 29, 110, 215, 189, 29, 110, 209, 121, 29, 110, 209, 124, 29, + 110, 208, 164, 29, 110, 208, 162, 29, 110, 209, 119, 29, 110, 209, 127, + 29, 110, 209, 128, 29, 110, 209, 113, 29, 110, 209, 126, 29, 110, 216, + 144, 29, 110, 216, 145, 29, 110, 200, 26, 29, 110, 200, 27, 29, 110, 246, + 166, 29, 110, 246, 165, 29, 110, 208, 175, 29, 110, 215, 224, 29, 110, + 215, 223, 12, 15, 230, 142, 12, 15, 230, 141, 12, 15, 230, 140, 12, 15, + 230, 139, 12, 15, 230, 138, 12, 15, 230, 137, 12, 15, 230, 136, 12, 15, + 230, 135, 12, 15, 230, 134, 12, 15, 230, 133, 12, 15, 230, 132, 12, 15, + 230, 131, 12, 15, 230, 130, 12, 15, 230, 129, 12, 15, 230, 128, 12, 15, + 230, 127, 12, 15, 230, 126, 12, 15, 230, 125, 12, 15, 230, 124, 12, 15, + 230, 123, 12, 15, 230, 122, 12, 15, 230, 121, 12, 15, 230, 120, 12, 15, + 230, 119, 12, 15, 230, 118, 12, 15, 230, 117, 12, 15, 230, 116, 12, 15, + 230, 115, 12, 15, 230, 114, 12, 15, 230, 113, 12, 15, 230, 112, 12, 15, + 230, 111, 12, 15, 230, 110, 12, 15, 230, 109, 12, 15, 230, 108, 12, 15, + 230, 107, 12, 15, 230, 106, 12, 15, 230, 105, 12, 15, 230, 104, 12, 15, + 230, 103, 12, 15, 230, 102, 12, 15, 230, 101, 12, 15, 230, 100, 12, 15, + 230, 99, 12, 15, 230, 98, 12, 15, 230, 97, 12, 15, 230, 96, 12, 15, 230, + 95, 12, 15, 230, 94, 12, 15, 230, 93, 12, 15, 230, 92, 12, 15, 230, 91, + 12, 15, 230, 90, 12, 15, 230, 89, 12, 15, 230, 88, 12, 15, 230, 87, 12, + 15, 230, 86, 12, 15, 230, 85, 12, 15, 230, 84, 12, 15, 230, 83, 12, 15, + 230, 82, 12, 15, 230, 81, 12, 15, 230, 80, 12, 15, 230, 79, 12, 15, 230, + 78, 12, 15, 230, 77, 12, 15, 230, 76, 12, 15, 230, 75, 12, 15, 230, 74, + 12, 15, 230, 73, 12, 15, 230, 72, 12, 15, 230, 71, 12, 15, 230, 70, 12, + 15, 230, 69, 12, 15, 230, 68, 12, 15, 230, 67, 12, 15, 230, 66, 12, 15, + 230, 65, 12, 15, 230, 64, 12, 15, 230, 63, 12, 15, 230, 62, 12, 15, 230, + 61, 12, 15, 230, 60, 12, 15, 230, 59, 12, 15, 230, 58, 12, 15, 230, 57, + 12, 15, 230, 56, 12, 15, 230, 55, 12, 15, 230, 54, 12, 15, 230, 53, 12, + 15, 230, 52, 12, 15, 230, 51, 12, 15, 230, 50, 12, 15, 230, 49, 12, 15, + 230, 48, 12, 15, 230, 47, 12, 15, 230, 46, 12, 15, 230, 45, 12, 15, 230, + 44, 12, 15, 230, 43, 12, 15, 230, 42, 12, 15, 230, 41, 12, 15, 230, 40, + 12, 15, 230, 39, 12, 15, 230, 38, 12, 15, 230, 37, 12, 15, 230, 36, 12, + 15, 230, 35, 12, 15, 230, 34, 12, 15, 230, 33, 12, 15, 230, 32, 12, 15, + 230, 31, 12, 15, 230, 30, 12, 15, 230, 29, 12, 15, 230, 28, 12, 15, 230, + 27, 12, 15, 230, 26, 12, 15, 230, 25, 12, 15, 230, 24, 12, 15, 230, 23, + 12, 15, 230, 22, 12, 15, 230, 21, 12, 15, 230, 20, 12, 15, 230, 19, 12, + 15, 230, 18, 12, 15, 230, 17, 12, 15, 230, 16, 12, 15, 230, 15, 12, 15, + 230, 14, 12, 15, 230, 13, 12, 15, 230, 12, 12, 15, 230, 11, 12, 15, 230, + 10, 12, 15, 230, 9, 12, 15, 230, 8, 12, 15, 230, 7, 12, 15, 230, 6, 12, + 15, 230, 5, 12, 15, 230, 4, 12, 15, 230, 3, 12, 15, 230, 2, 12, 15, 230, + 1, 12, 15, 230, 0, 12, 15, 229, 255, 12, 15, 229, 254, 12, 15, 229, 253, + 12, 15, 229, 252, 12, 15, 229, 251, 12, 15, 229, 250, 12, 15, 229, 249, + 12, 15, 229, 248, 12, 15, 229, 247, 12, 15, 229, 246, 12, 15, 229, 245, + 12, 15, 229, 244, 12, 15, 229, 243, 12, 15, 229, 242, 12, 15, 229, 241, + 12, 15, 229, 240, 12, 15, 229, 239, 12, 15, 229, 238, 12, 15, 229, 237, + 12, 15, 229, 236, 12, 15, 229, 235, 12, 15, 229, 234, 12, 15, 229, 233, + 12, 15, 229, 232, 12, 15, 229, 231, 12, 15, 229, 230, 12, 15, 229, 229, + 12, 15, 229, 228, 12, 15, 229, 227, 12, 15, 229, 226, 12, 15, 229, 225, + 12, 15, 229, 224, 12, 15, 229, 223, 12, 15, 229, 222, 12, 15, 229, 221, + 12, 15, 229, 220, 12, 15, 229, 219, 12, 15, 229, 218, 12, 15, 229, 217, + 12, 15, 229, 216, 12, 15, 229, 215, 12, 15, 229, 214, 12, 15, 229, 213, + 12, 15, 229, 212, 12, 15, 229, 211, 12, 15, 229, 210, 12, 15, 229, 209, + 12, 15, 229, 208, 12, 15, 229, 207, 12, 15, 229, 206, 12, 15, 229, 205, + 12, 15, 229, 204, 12, 15, 229, 203, 12, 15, 229, 202, 12, 15, 229, 201, + 12, 15, 229, 200, 12, 15, 229, 199, 12, 15, 229, 198, 12, 15, 229, 197, + 12, 15, 229, 196, 12, 15, 229, 195, 12, 15, 229, 194, 12, 15, 229, 193, + 12, 15, 229, 192, 12, 15, 229, 191, 12, 15, 229, 190, 12, 15, 229, 189, + 12, 15, 229, 188, 12, 15, 229, 187, 12, 15, 229, 186, 12, 15, 229, 185, + 12, 15, 229, 184, 12, 15, 229, 183, 12, 15, 229, 182, 12, 15, 229, 181, + 12, 15, 229, 180, 12, 15, 229, 179, 12, 15, 229, 178, 12, 15, 229, 177, + 12, 15, 229, 176, 12, 15, 229, 175, 12, 15, 229, 174, 12, 15, 229, 173, + 12, 15, 229, 172, 12, 15, 229, 171, 12, 15, 229, 170, 12, 15, 229, 169, + 12, 15, 229, 168, 12, 15, 229, 167, 12, 15, 229, 166, 12, 15, 229, 165, + 12, 15, 229, 164, 12, 15, 229, 163, 12, 15, 229, 162, 12, 15, 229, 161, + 12, 15, 229, 160, 12, 15, 229, 159, 12, 15, 229, 158, 12, 15, 229, 157, + 12, 15, 229, 156, 12, 15, 229, 155, 12, 15, 229, 154, 12, 15, 229, 153, + 12, 15, 229, 152, 12, 15, 229, 151, 12, 15, 229, 150, 12, 15, 229, 149, + 12, 15, 229, 148, 12, 15, 229, 147, 12, 15, 229, 146, 12, 15, 229, 145, + 12, 15, 229, 144, 12, 15, 229, 143, 12, 15, 229, 142, 12, 15, 229, 141, + 12, 15, 229, 140, 12, 15, 229, 139, 12, 15, 229, 138, 12, 15, 229, 137, + 12, 15, 229, 136, 12, 15, 229, 135, 12, 15, 229, 134, 12, 15, 229, 133, + 12, 15, 229, 132, 12, 15, 229, 131, 12, 15, 229, 130, 12, 15, 229, 129, + 12, 15, 229, 128, 12, 15, 229, 127, 12, 15, 229, 126, 12, 15, 229, 125, + 12, 15, 229, 124, 12, 15, 229, 123, 12, 15, 229, 122, 12, 15, 229, 121, + 12, 15, 229, 120, 12, 15, 229, 119, 12, 15, 229, 118, 12, 15, 229, 117, + 12, 15, 229, 116, 12, 15, 229, 115, 12, 15, 229, 114, 12, 15, 229, 113, + 12, 15, 229, 112, 12, 15, 229, 111, 12, 15, 229, 110, 12, 15, 229, 109, + 12, 15, 229, 108, 12, 15, 229, 107, 12, 15, 229, 106, 12, 15, 229, 105, + 12, 15, 229, 104, 12, 15, 229, 103, 12, 15, 229, 102, 12, 15, 229, 101, + 12, 15, 229, 100, 12, 15, 229, 99, 12, 15, 229, 98, 12, 15, 229, 97, 12, + 15, 229, 96, 12, 15, 229, 95, 12, 15, 229, 94, 12, 15, 229, 93, 12, 15, + 229, 92, 12, 15, 229, 91, 12, 15, 229, 90, 12, 15, 229, 89, 12, 15, 229, + 88, 12, 15, 229, 87, 12, 15, 229, 86, 12, 15, 229, 85, 12, 15, 229, 84, + 12, 15, 229, 83, 12, 15, 229, 82, 12, 15, 229, 81, 12, 15, 229, 80, 12, + 15, 229, 79, 12, 15, 229, 78, 12, 15, 229, 77, 12, 15, 229, 76, 12, 15, + 229, 75, 12, 15, 229, 74, 12, 15, 229, 73, 12, 15, 229, 72, 12, 15, 229, + 71, 12, 15, 229, 70, 12, 15, 229, 69, 12, 15, 229, 68, 12, 15, 229, 67, + 12, 15, 229, 66, 12, 15, 229, 65, 12, 15, 229, 64, 12, 15, 229, 63, 12, + 15, 229, 62, 12, 15, 229, 61, 12, 15, 229, 60, 12, 15, 229, 59, 12, 15, + 229, 58, 12, 15, 229, 57, 12, 15, 229, 56, 12, 15, 229, 55, 12, 15, 229, + 54, 12, 15, 229, 53, 12, 15, 229, 52, 12, 15, 229, 51, 12, 15, 229, 50, + 12, 15, 229, 49, 12, 15, 229, 48, 12, 15, 229, 47, 12, 15, 229, 46, 12, + 15, 229, 45, 12, 15, 229, 44, 12, 15, 229, 43, 12, 15, 229, 42, 12, 15, + 229, 41, 12, 15, 229, 40, 12, 15, 229, 39, 12, 15, 229, 38, 12, 15, 229, + 37, 12, 15, 229, 36, 12, 15, 229, 35, 12, 15, 229, 34, 12, 15, 229, 33, + 12, 15, 229, 32, 12, 15, 229, 31, 12, 15, 229, 30, 12, 15, 229, 29, 12, + 15, 229, 28, 12, 15, 229, 27, 12, 15, 229, 26, 12, 15, 229, 25, 12, 15, + 229, 24, 12, 15, 229, 23, 12, 15, 229, 22, 12, 15, 229, 21, 12, 15, 229, + 20, 12, 15, 229, 19, 12, 15, 229, 18, 12, 15, 229, 17, 12, 15, 229, 16, + 12, 15, 229, 15, 12, 15, 229, 14, 12, 15, 229, 13, 12, 15, 229, 12, 12, + 15, 229, 11, 12, 15, 229, 10, 12, 15, 229, 9, 12, 15, 229, 8, 12, 15, + 229, 7, 12, 15, 229, 6, 12, 15, 229, 5, 12, 15, 229, 4, 12, 15, 229, 3, + 12, 15, 229, 2, 12, 15, 229, 1, 12, 15, 229, 0, 12, 15, 228, 255, 12, 15, + 228, 254, 12, 15, 228, 253, 12, 15, 228, 252, 12, 15, 228, 251, 12, 15, + 228, 250, 12, 15, 228, 249, 12, 15, 228, 248, 12, 15, 228, 247, 12, 15, + 228, 246, 12, 15, 228, 245, 12, 15, 228, 244, 12, 15, 228, 243, 12, 15, + 228, 242, 12, 15, 228, 241, 12, 15, 228, 240, 12, 15, 228, 239, 12, 15, + 228, 238, 12, 15, 228, 237, 12, 15, 228, 236, 12, 15, 228, 235, 12, 15, + 228, 234, 12, 15, 228, 233, 12, 15, 228, 232, 12, 15, 228, 231, 12, 15, + 228, 230, 12, 15, 228, 229, 12, 15, 228, 228, 12, 15, 228, 227, 12, 15, + 228, 226, 12, 15, 228, 225, 12, 15, 228, 224, 12, 15, 228, 223, 12, 15, + 228, 222, 12, 15, 228, 221, 12, 15, 228, 220, 12, 15, 228, 219, 12, 15, + 228, 218, 12, 15, 228, 217, 12, 15, 228, 216, 12, 15, 228, 215, 12, 15, + 228, 214, 12, 15, 228, 213, 12, 15, 228, 212, 12, 15, 228, 211, 12, 15, + 228, 210, 12, 15, 228, 209, 12, 15, 228, 208, 12, 15, 228, 207, 12, 15, + 228, 206, 12, 15, 228, 205, 12, 15, 228, 204, 12, 15, 228, 203, 12, 15, + 228, 202, 12, 15, 228, 201, 12, 15, 228, 200, 12, 15, 228, 199, 12, 15, + 228, 198, 12, 15, 228, 197, 12, 15, 228, 196, 12, 15, 228, 195, 12, 15, + 228, 194, 12, 15, 228, 193, 12, 15, 228, 192, 12, 15, 228, 191, 12, 15, + 228, 190, 12, 15, 228, 189, 12, 15, 228, 188, 12, 15, 228, 187, 12, 15, + 228, 186, 12, 15, 228, 185, 12, 15, 228, 184, 12, 15, 228, 183, 8, 4, 33, + 237, 116, 8, 4, 33, 237, 112, 8, 4, 33, 237, 56, 8, 4, 33, 237, 115, 8, + 4, 33, 237, 114, 8, 4, 33, 168, 212, 123, 207, 83, 8, 4, 33, 208, 123, + 184, 4, 33, 222, 41, 218, 201, 184, 4, 33, 222, 41, 239, 5, 184, 4, 33, + 222, 41, 228, 86, 184, 4, 33, 202, 239, 218, 201, 184, 4, 33, 222, 41, + 200, 173, 113, 1, 199, 235, 3, 234, 47, 113, 215, 100, 227, 146, 203, 71, + 113, 33, 200, 7, 199, 235, 199, 235, 216, 93, 113, 1, 251, 104, 250, 107, + 113, 1, 201, 28, 251, 142, 113, 1, 201, 28, 242, 23, 113, 1, 201, 28, + 234, 139, 113, 1, 201, 28, 227, 86, 113, 1, 201, 28, 225, 83, 113, 1, + 201, 28, 47, 222, 47, 113, 1, 201, 28, 213, 123, 113, 1, 201, 28, 206, + 217, 113, 1, 251, 104, 93, 54, 113, 1, 210, 22, 3, 210, 22, 240, 182, + 113, 1, 210, 22, 3, 209, 143, 240, 182, 113, 1, 210, 22, 3, 242, 43, 26, + 210, 22, 240, 182, 113, 1, 210, 22, 3, 242, 43, 26, 209, 143, 240, 182, + 113, 1, 140, 3, 216, 93, 113, 1, 140, 3, 214, 147, 113, 1, 140, 3, 222, + 163, 113, 1, 248, 211, 3, 242, 42, 113, 1, 235, 148, 3, 242, 42, 113, 1, + 242, 24, 3, 242, 42, 113, 1, 234, 140, 3, 222, 163, 113, 1, 203, 64, 3, + 242, 42, 113, 1, 199, 93, 3, 242, 42, 113, 1, 206, 147, 3, 242, 42, 113, + 1, 199, 235, 3, 242, 42, 113, 1, 47, 227, 87, 3, 242, 42, 113, 1, 227, + 87, 3, 242, 42, 113, 1, 225, 84, 3, 242, 42, 113, 1, 222, 48, 3, 242, 42, + 113, 1, 218, 90, 3, 242, 42, 113, 1, 212, 20, 3, 242, 42, 113, 1, 47, + 216, 74, 3, 242, 42, 113, 1, 216, 74, 3, 242, 42, 113, 1, 205, 28, 3, + 242, 42, 113, 1, 214, 107, 3, 242, 42, 113, 1, 213, 124, 3, 242, 42, 113, + 1, 210, 22, 3, 242, 42, 113, 1, 206, 218, 3, 242, 42, 113, 1, 203, 64, 3, + 233, 199, 113, 1, 248, 211, 3, 213, 232, 113, 1, 227, 87, 3, 213, 232, + 113, 1, 216, 74, 3, 213, 232, 113, 33, 140, 225, 83, 9, 1, 140, 201, 90, + 65, 19, 9, 1, 140, 201, 90, 47, 19, 9, 1, 248, 251, 65, 19, 9, 1, 248, + 251, 47, 19, 9, 1, 248, 251, 82, 19, 9, 1, 248, 251, 179, 19, 9, 1, 216, + 55, 65, 19, 9, 1, 216, 55, 47, 19, 9, 1, 216, 55, 82, 19, 9, 1, 216, 55, + 179, 19, 9, 1, 248, 239, 65, 19, 9, 1, 248, 239, 47, 19, 9, 1, 248, 239, + 82, 19, 9, 1, 248, 239, 179, 19, 9, 1, 204, 244, 65, 19, 9, 1, 204, 244, + 47, 19, 9, 1, 204, 244, 82, 19, 9, 1, 204, 244, 179, 19, 9, 1, 206, 182, + 65, 19, 9, 1, 206, 182, 47, 19, 9, 1, 206, 182, 82, 19, 9, 1, 206, 182, + 179, 19, 9, 1, 204, 246, 65, 19, 9, 1, 204, 246, 47, 19, 9, 1, 204, 246, + 82, 19, 9, 1, 204, 246, 179, 19, 9, 1, 203, 53, 65, 19, 9, 1, 203, 53, + 47, 19, 9, 1, 203, 53, 82, 19, 9, 1, 203, 53, 179, 19, 9, 1, 216, 53, 65, + 19, 9, 1, 216, 53, 47, 19, 9, 1, 216, 53, 82, 19, 9, 1, 216, 53, 179, 19, + 9, 1, 239, 100, 65, 19, 9, 1, 239, 100, 47, 19, 9, 1, 239, 100, 82, 19, + 9, 1, 239, 100, 179, 19, 9, 1, 218, 48, 65, 19, 9, 1, 218, 48, 47, 19, 9, + 1, 218, 48, 82, 19, 9, 1, 218, 48, 179, 19, 9, 1, 206, 206, 65, 19, 9, 1, + 206, 206, 47, 19, 9, 1, 206, 206, 82, 19, 9, 1, 206, 206, 179, 19, 9, 1, + 206, 204, 65, 19, 9, 1, 206, 204, 47, 19, 9, 1, 206, 204, 82, 19, 9, 1, + 206, 204, 179, 19, 9, 1, 241, 218, 65, 19, 9, 1, 241, 218, 47, 19, 9, 1, + 242, 37, 65, 19, 9, 1, 242, 37, 47, 19, 9, 1, 239, 128, 65, 19, 9, 1, + 239, 128, 47, 19, 9, 1, 241, 216, 65, 19, 9, 1, 241, 216, 47, 19, 9, 1, + 227, 222, 65, 19, 9, 1, 227, 222, 47, 19, 9, 1, 212, 208, 65, 19, 9, 1, + 212, 208, 47, 19, 9, 1, 226, 253, 65, 19, 9, 1, 226, 253, 47, 19, 9, 1, + 226, 253, 82, 19, 9, 1, 226, 253, 179, 19, 9, 1, 236, 77, 65, 19, 9, 1, + 236, 77, 47, 19, 9, 1, 236, 77, 82, 19, 9, 1, 236, 77, 179, 19, 9, 1, + 235, 38, 65, 19, 9, 1, 235, 38, 47, 19, 9, 1, 235, 38, 82, 19, 9, 1, 235, + 38, 179, 19, 9, 1, 219, 177, 65, 19, 9, 1, 219, 177, 47, 19, 9, 1, 219, + 177, 82, 19, 9, 1, 219, 177, 179, 19, 9, 1, 218, 228, 235, 166, 65, 19, + 9, 1, 218, 228, 235, 166, 47, 19, 9, 1, 213, 5, 65, 19, 9, 1, 213, 5, 47, + 19, 9, 1, 213, 5, 82, 19, 9, 1, 213, 5, 179, 19, 9, 1, 234, 116, 3, 90, + 88, 65, 19, 9, 1, 234, 116, 3, 90, 88, 47, 19, 9, 1, 234, 116, 235, 114, + 65, 19, 9, 1, 234, 116, 235, 114, 47, 19, 9, 1, 234, 116, 235, 114, 82, + 19, 9, 1, 234, 116, 235, 114, 179, 19, 9, 1, 234, 116, 240, 208, 65, 19, + 9, 1, 234, 116, 240, 208, 47, 19, 9, 1, 234, 116, 240, 208, 82, 19, 9, 1, + 234, 116, 240, 208, 179, 19, 9, 1, 90, 249, 70, 65, 19, 9, 1, 90, 249, + 70, 47, 19, 9, 1, 90, 249, 70, 3, 234, 204, 88, 65, 19, 9, 1, 90, 249, + 70, 3, 234, 204, 88, 47, 19, 9, 16, 73, 56, 9, 16, 73, 57, 9, 16, 120, + 190, 56, 9, 16, 120, 190, 57, 9, 16, 126, 190, 56, 9, 16, 126, 190, 57, + 9, 16, 126, 190, 215, 96, 191, 56, 9, 16, 126, 190, 215, 96, 191, 57, 9, + 16, 236, 229, 190, 56, 9, 16, 236, 229, 190, 57, 9, 16, 53, 83, 249, 77, + 57, 9, 16, 120, 190, 202, 248, 56, 9, 16, 120, 190, 202, 248, 57, 9, 16, + 213, 26, 9, 16, 4, 207, 10, 56, 9, 16, 4, 207, 10, 57, 9, 1, 220, 0, 65, + 19, 9, 1, 220, 0, 47, 19, 9, 1, 220, 0, 82, 19, 9, 1, 220, 0, 179, 19, 9, + 1, 108, 65, 19, 9, 1, 108, 47, 19, 9, 1, 217, 122, 65, 19, 9, 1, 217, + 122, 47, 19, 9, 1, 199, 212, 65, 19, 9, 1, 199, 212, 47, 19, 9, 1, 108, + 3, 234, 204, 88, 65, 19, 9, 1, 203, 60, 65, 19, 9, 1, 203, 60, 47, 19, 9, + 1, 226, 139, 217, 122, 65, 19, 9, 1, 226, 139, 217, 122, 47, 19, 9, 1, + 226, 139, 199, 212, 65, 19, 9, 1, 226, 139, 199, 212, 47, 19, 9, 1, 197, + 65, 19, 9, 1, 197, 47, 19, 9, 1, 197, 82, 19, 9, 1, 197, 179, 19, 9, 1, + 204, 22, 227, 12, 226, 139, 140, 222, 188, 82, 19, 9, 1, 204, 22, 227, + 12, 226, 139, 140, 222, 188, 179, 19, 9, 33, 90, 3, 234, 204, 88, 3, 140, + 65, 19, 9, 33, 90, 3, 234, 204, 88, 3, 140, 47, 19, 9, 33, 90, 3, 234, + 204, 88, 3, 251, 222, 65, 19, 9, 33, 90, 3, 234, 204, 88, 3, 251, 222, + 47, 19, 9, 33, 90, 3, 234, 204, 88, 3, 201, 73, 65, 19, 9, 33, 90, 3, + 234, 204, 88, 3, 201, 73, 47, 19, 9, 33, 90, 3, 234, 204, 88, 3, 108, 65, + 19, 9, 33, 90, 3, 234, 204, 88, 3, 108, 47, 19, 9, 33, 90, 3, 234, 204, + 88, 3, 217, 122, 65, 19, 9, 33, 90, 3, 234, 204, 88, 3, 217, 122, 47, 19, + 9, 33, 90, 3, 234, 204, 88, 3, 199, 212, 65, 19, 9, 33, 90, 3, 234, 204, + 88, 3, 199, 212, 47, 19, 9, 33, 90, 3, 234, 204, 88, 3, 197, 65, 19, 9, + 33, 90, 3, 234, 204, 88, 3, 197, 47, 19, 9, 33, 90, 3, 234, 204, 88, 3, + 197, 82, 19, 9, 33, 204, 22, 226, 139, 90, 3, 234, 204, 88, 3, 140, 222, + 188, 65, 19, 9, 33, 204, 22, 226, 139, 90, 3, 234, 204, 88, 3, 140, 222, + 188, 47, 19, 9, 33, 204, 22, 226, 139, 90, 3, 234, 204, 88, 3, 140, 222, + 188, 82, 19, 9, 1, 237, 162, 90, 65, 19, 9, 1, 237, 162, 90, 47, 19, 9, + 1, 237, 162, 90, 82, 19, 9, 1, 237, 162, 90, 179, 19, 9, 33, 90, 3, 234, + 204, 88, 3, 193, 65, 19, 9, 33, 90, 3, 234, 204, 88, 3, 155, 65, 19, 9, + 33, 90, 3, 234, 204, 88, 3, 84, 65, 19, 9, 33, 90, 3, 234, 204, 88, 3, + 140, 222, 188, 65, 19, 9, 33, 90, 3, 234, 204, 88, 3, 90, 65, 19, 9, 33, + 248, 241, 3, 193, 65, 19, 9, 33, 248, 241, 3, 155, 65, 19, 9, 33, 248, + 241, 3, 226, 204, 65, 19, 9, 33, 248, 241, 3, 84, 65, 19, 9, 33, 248, + 241, 3, 140, 222, 188, 65, 19, 9, 33, 248, 241, 3, 90, 65, 19, 9, 33, + 206, 184, 3, 193, 65, 19, 9, 33, 206, 184, 3, 155, 65, 19, 9, 33, 206, + 184, 3, 226, 204, 65, 19, 9, 33, 206, 184, 3, 84, 65, 19, 9, 33, 206, + 184, 3, 140, 222, 188, 65, 19, 9, 33, 206, 184, 3, 90, 65, 19, 9, 33, + 206, 103, 3, 193, 65, 19, 9, 33, 206, 103, 3, 84, 65, 19, 9, 33, 206, + 103, 3, 140, 222, 188, 65, 19, 9, 33, 206, 103, 3, 90, 65, 19, 9, 33, + 193, 3, 155, 65, 19, 9, 33, 193, 3, 84, 65, 19, 9, 33, 155, 3, 193, 65, + 19, 9, 33, 155, 3, 84, 65, 19, 9, 33, 226, 204, 3, 193, 65, 19, 9, 33, + 226, 204, 3, 155, 65, 19, 9, 33, 226, 204, 3, 84, 65, 19, 9, 33, 211, + 187, 3, 193, 65, 19, 9, 33, 211, 187, 3, 155, 65, 19, 9, 33, 211, 187, 3, + 226, 204, 65, 19, 9, 33, 211, 187, 3, 84, 65, 19, 9, 33, 212, 57, 3, 155, + 65, 19, 9, 33, 212, 57, 3, 84, 65, 19, 9, 33, 242, 53, 3, 193, 65, 19, 9, + 33, 242, 53, 3, 155, 65, 19, 9, 33, 242, 53, 3, 226, 204, 65, 19, 9, 33, + 242, 53, 3, 84, 65, 19, 9, 33, 207, 10, 3, 155, 65, 19, 9, 33, 207, 10, + 3, 84, 65, 19, 9, 33, 199, 109, 3, 84, 65, 19, 9, 33, 251, 172, 3, 193, + 65, 19, 9, 33, 251, 172, 3, 84, 65, 19, 9, 33, 235, 195, 3, 193, 65, 19, + 9, 33, 235, 195, 3, 84, 65, 19, 9, 33, 237, 135, 3, 193, 65, 19, 9, 33, + 237, 135, 3, 155, 65, 19, 9, 33, 237, 135, 3, 226, 204, 65, 19, 9, 33, + 237, 135, 3, 84, 65, 19, 9, 33, 237, 135, 3, 140, 222, 188, 65, 19, 9, + 33, 237, 135, 3, 90, 65, 19, 9, 33, 214, 153, 3, 155, 65, 19, 9, 33, 214, + 153, 3, 84, 65, 19, 9, 33, 214, 153, 3, 140, 222, 188, 65, 19, 9, 33, + 214, 153, 3, 90, 65, 19, 9, 33, 227, 87, 3, 140, 65, 19, 9, 33, 227, 87, + 3, 193, 65, 19, 9, 33, 227, 87, 3, 155, 65, 19, 9, 33, 227, 87, 3, 226, + 204, 65, 19, 9, 33, 227, 87, 3, 225, 92, 65, 19, 9, 33, 227, 87, 3, 84, + 65, 19, 9, 33, 227, 87, 3, 140, 222, 188, 65, 19, 9, 33, 227, 87, 3, 90, + 65, 19, 9, 33, 225, 92, 3, 193, 65, 19, 9, 33, 225, 92, 3, 155, 65, 19, + 9, 33, 225, 92, 3, 226, 204, 65, 19, 9, 33, 225, 92, 3, 84, 65, 19, 9, + 33, 225, 92, 3, 140, 222, 188, 65, 19, 9, 33, 225, 92, 3, 90, 65, 19, 9, + 33, 84, 3, 193, 65, 19, 9, 33, 84, 3, 155, 65, 19, 9, 33, 84, 3, 226, + 204, 65, 19, 9, 33, 84, 3, 84, 65, 19, 9, 33, 84, 3, 140, 222, 188, 65, + 19, 9, 33, 84, 3, 90, 65, 19, 9, 33, 218, 228, 3, 193, 65, 19, 9, 33, + 218, 228, 3, 155, 65, 19, 9, 33, 218, 228, 3, 226, 204, 65, 19, 9, 33, + 218, 228, 3, 84, 65, 19, 9, 33, 218, 228, 3, 140, 222, 188, 65, 19, 9, + 33, 218, 228, 3, 90, 65, 19, 9, 33, 234, 116, 3, 193, 65, 19, 9, 33, 234, + 116, 3, 84, 65, 19, 9, 33, 234, 116, 3, 140, 222, 188, 65, 19, 9, 33, + 234, 116, 3, 90, 65, 19, 9, 33, 90, 3, 193, 65, 19, 9, 33, 90, 3, 155, + 65, 19, 9, 33, 90, 3, 226, 204, 65, 19, 9, 33, 90, 3, 84, 65, 19, 9, 33, + 90, 3, 140, 222, 188, 65, 19, 9, 33, 90, 3, 90, 65, 19, 9, 33, 206, 115, + 3, 207, 213, 140, 65, 19, 9, 33, 213, 155, 3, 207, 213, 140, 65, 19, 9, + 33, 140, 222, 188, 3, 207, 213, 140, 65, 19, 9, 33, 210, 105, 3, 242, 16, + 65, 19, 9, 33, 210, 105, 3, 227, 35, 65, 19, 9, 33, 210, 105, 3, 237, + 159, 65, 19, 9, 33, 210, 105, 3, 242, 18, 65, 19, 9, 33, 210, 105, 3, + 227, 37, 65, 19, 9, 33, 210, 105, 3, 207, 213, 140, 65, 19, 9, 33, 90, 3, + 234, 204, 88, 3, 213, 155, 47, 19, 9, 33, 90, 3, 234, 204, 88, 3, 199, + 106, 47, 19, 9, 33, 90, 3, 234, 204, 88, 3, 84, 47, 19, 9, 33, 90, 3, + 234, 204, 88, 3, 218, 228, 47, 19, 9, 33, 90, 3, 234, 204, 88, 3, 140, + 222, 188, 47, 19, 9, 33, 90, 3, 234, 204, 88, 3, 90, 47, 19, 9, 33, 248, + 241, 3, 213, 155, 47, 19, 9, 33, 248, 241, 3, 199, 106, 47, 19, 9, 33, + 248, 241, 3, 84, 47, 19, 9, 33, 248, 241, 3, 218, 228, 47, 19, 9, 33, + 248, 241, 3, 140, 222, 188, 47, 19, 9, 33, 248, 241, 3, 90, 47, 19, 9, + 33, 206, 184, 3, 213, 155, 47, 19, 9, 33, 206, 184, 3, 199, 106, 47, 19, + 9, 33, 206, 184, 3, 84, 47, 19, 9, 33, 206, 184, 3, 218, 228, 47, 19, 9, + 33, 206, 184, 3, 140, 222, 188, 47, 19, 9, 33, 206, 184, 3, 90, 47, 19, + 9, 33, 206, 103, 3, 213, 155, 47, 19, 9, 33, 206, 103, 3, 199, 106, 47, + 19, 9, 33, 206, 103, 3, 84, 47, 19, 9, 33, 206, 103, 3, 218, 228, 47, 19, + 9, 33, 206, 103, 3, 140, 222, 188, 47, 19, 9, 33, 206, 103, 3, 90, 47, + 19, 9, 33, 237, 135, 3, 140, 222, 188, 47, 19, 9, 33, 237, 135, 3, 90, + 47, 19, 9, 33, 214, 153, 3, 140, 222, 188, 47, 19, 9, 33, 214, 153, 3, + 90, 47, 19, 9, 33, 227, 87, 3, 140, 47, 19, 9, 33, 227, 87, 3, 225, 92, + 47, 19, 9, 33, 227, 87, 3, 84, 47, 19, 9, 33, 227, 87, 3, 140, 222, 188, + 47, 19, 9, 33, 227, 87, 3, 90, 47, 19, 9, 33, 225, 92, 3, 84, 47, 19, 9, + 33, 225, 92, 3, 140, 222, 188, 47, 19, 9, 33, 225, 92, 3, 90, 47, 19, 9, + 33, 84, 3, 140, 47, 19, 9, 33, 84, 3, 84, 47, 19, 9, 33, 218, 228, 3, + 213, 155, 47, 19, 9, 33, 218, 228, 3, 199, 106, 47, 19, 9, 33, 218, 228, + 3, 84, 47, 19, 9, 33, 218, 228, 3, 218, 228, 47, 19, 9, 33, 218, 228, 3, + 140, 222, 188, 47, 19, 9, 33, 218, 228, 3, 90, 47, 19, 9, 33, 140, 222, + 188, 3, 207, 213, 140, 47, 19, 9, 33, 90, 3, 213, 155, 47, 19, 9, 33, 90, + 3, 199, 106, 47, 19, 9, 33, 90, 3, 84, 47, 19, 9, 33, 90, 3, 218, 228, + 47, 19, 9, 33, 90, 3, 140, 222, 188, 47, 19, 9, 33, 90, 3, 90, 47, 19, 9, + 33, 90, 3, 234, 204, 88, 3, 193, 82, 19, 9, 33, 90, 3, 234, 204, 88, 3, + 155, 82, 19, 9, 33, 90, 3, 234, 204, 88, 3, 226, 204, 82, 19, 9, 33, 90, + 3, 234, 204, 88, 3, 84, 82, 19, 9, 33, 90, 3, 234, 204, 88, 3, 234, 116, + 82, 19, 9, 33, 248, 241, 3, 193, 82, 19, 9, 33, 248, 241, 3, 155, 82, 19, + 9, 33, 248, 241, 3, 226, 204, 82, 19, 9, 33, 248, 241, 3, 84, 82, 19, 9, + 33, 248, 241, 3, 234, 116, 82, 19, 9, 33, 206, 184, 3, 193, 82, 19, 9, + 33, 206, 184, 3, 155, 82, 19, 9, 33, 206, 184, 3, 226, 204, 82, 19, 9, + 33, 206, 184, 3, 84, 82, 19, 9, 33, 206, 184, 3, 234, 116, 82, 19, 9, 33, + 206, 103, 3, 84, 82, 19, 9, 33, 193, 3, 155, 82, 19, 9, 33, 193, 3, 84, + 82, 19, 9, 33, 155, 3, 193, 82, 19, 9, 33, 155, 3, 84, 82, 19, 9, 33, + 226, 204, 3, 193, 82, 19, 9, 33, 226, 204, 3, 84, 82, 19, 9, 33, 211, + 187, 3, 193, 82, 19, 9, 33, 211, 187, 3, 155, 82, 19, 9, 33, 211, 187, 3, + 226, 204, 82, 19, 9, 33, 211, 187, 3, 84, 82, 19, 9, 33, 212, 57, 3, 155, + 82, 19, 9, 33, 212, 57, 3, 226, 204, 82, 19, 9, 33, 212, 57, 3, 84, 82, + 19, 9, 33, 242, 53, 3, 193, 82, 19, 9, 33, 242, 53, 3, 155, 82, 19, 9, + 33, 242, 53, 3, 226, 204, 82, 19, 9, 33, 242, 53, 3, 84, 82, 19, 9, 33, + 207, 10, 3, 155, 82, 19, 9, 33, 199, 109, 3, 84, 82, 19, 9, 33, 251, 172, + 3, 193, 82, 19, 9, 33, 251, 172, 3, 84, 82, 19, 9, 33, 235, 195, 3, 193, + 82, 19, 9, 33, 235, 195, 3, 84, 82, 19, 9, 33, 237, 135, 3, 193, 82, 19, + 9, 33, 237, 135, 3, 155, 82, 19, 9, 33, 237, 135, 3, 226, 204, 82, 19, 9, + 33, 237, 135, 3, 84, 82, 19, 9, 33, 214, 153, 3, 155, 82, 19, 9, 33, 214, + 153, 3, 84, 82, 19, 9, 33, 227, 87, 3, 193, 82, 19, 9, 33, 227, 87, 3, + 155, 82, 19, 9, 33, 227, 87, 3, 226, 204, 82, 19, 9, 33, 227, 87, 3, 225, + 92, 82, 19, 9, 33, 227, 87, 3, 84, 82, 19, 9, 33, 225, 92, 3, 193, 82, + 19, 9, 33, 225, 92, 3, 155, 82, 19, 9, 33, 225, 92, 3, 226, 204, 82, 19, + 9, 33, 225, 92, 3, 84, 82, 19, 9, 33, 225, 92, 3, 234, 116, 82, 19, 9, + 33, 84, 3, 193, 82, 19, 9, 33, 84, 3, 155, 82, 19, 9, 33, 84, 3, 226, + 204, 82, 19, 9, 33, 84, 3, 84, 82, 19, 9, 33, 218, 228, 3, 193, 82, 19, + 9, 33, 218, 228, 3, 155, 82, 19, 9, 33, 218, 228, 3, 226, 204, 82, 19, 9, + 33, 218, 228, 3, 84, 82, 19, 9, 33, 218, 228, 3, 234, 116, 82, 19, 9, 33, + 234, 116, 3, 193, 82, 19, 9, 33, 234, 116, 3, 84, 82, 19, 9, 33, 234, + 116, 3, 207, 213, 140, 82, 19, 9, 33, 90, 3, 193, 82, 19, 9, 33, 90, 3, + 155, 82, 19, 9, 33, 90, 3, 226, 204, 82, 19, 9, 33, 90, 3, 84, 82, 19, 9, + 33, 90, 3, 234, 116, 82, 19, 9, 33, 90, 3, 234, 204, 88, 3, 84, 179, 19, + 9, 33, 90, 3, 234, 204, 88, 3, 234, 116, 179, 19, 9, 33, 248, 241, 3, 84, + 179, 19, 9, 33, 248, 241, 3, 234, 116, 179, 19, 9, 33, 206, 184, 3, 84, + 179, 19, 9, 33, 206, 184, 3, 234, 116, 179, 19, 9, 33, 206, 103, 3, 84, + 179, 19, 9, 33, 206, 103, 3, 234, 116, 179, 19, 9, 33, 211, 187, 3, 84, + 179, 19, 9, 33, 211, 187, 3, 234, 116, 179, 19, 9, 33, 210, 62, 3, 84, + 179, 19, 9, 33, 210, 62, 3, 234, 116, 179, 19, 9, 33, 227, 87, 3, 225, + 92, 179, 19, 9, 33, 227, 87, 3, 84, 179, 19, 9, 33, 225, 92, 3, 84, 179, + 19, 9, 33, 218, 228, 3, 84, 179, 19, 9, 33, 218, 228, 3, 234, 116, 179, + 19, 9, 33, 90, 3, 84, 179, 19, 9, 33, 90, 3, 234, 116, 179, 19, 9, 33, + 210, 105, 3, 237, 159, 179, 19, 9, 33, 210, 105, 3, 242, 18, 179, 19, 9, + 33, 210, 105, 3, 227, 37, 179, 19, 9, 33, 207, 10, 3, 140, 222, 188, 65, + 19, 9, 33, 207, 10, 3, 90, 65, 19, 9, 33, 251, 172, 3, 140, 222, 188, 65, + 19, 9, 33, 251, 172, 3, 90, 65, 19, 9, 33, 235, 195, 3, 140, 222, 188, + 65, 19, 9, 33, 235, 195, 3, 90, 65, 19, 9, 33, 211, 187, 3, 140, 222, + 188, 65, 19, 9, 33, 211, 187, 3, 90, 65, 19, 9, 33, 210, 62, 3, 140, 222, + 188, 65, 19, 9, 33, 210, 62, 3, 90, 65, 19, 9, 33, 155, 3, 140, 222, 188, + 65, 19, 9, 33, 155, 3, 90, 65, 19, 9, 33, 193, 3, 140, 222, 188, 65, 19, + 9, 33, 193, 3, 90, 65, 19, 9, 33, 226, 204, 3, 140, 222, 188, 65, 19, 9, + 33, 226, 204, 3, 90, 65, 19, 9, 33, 212, 57, 3, 140, 222, 188, 65, 19, 9, + 33, 212, 57, 3, 90, 65, 19, 9, 33, 242, 53, 3, 140, 222, 188, 65, 19, 9, + 33, 242, 53, 3, 90, 65, 19, 9, 33, 210, 62, 3, 193, 65, 19, 9, 33, 210, + 62, 3, 155, 65, 19, 9, 33, 210, 62, 3, 226, 204, 65, 19, 9, 33, 210, 62, + 3, 84, 65, 19, 9, 33, 210, 62, 3, 213, 155, 65, 19, 9, 33, 211, 187, 3, + 213, 155, 65, 19, 9, 33, 212, 57, 3, 213, 155, 65, 19, 9, 33, 242, 53, 3, + 213, 155, 65, 19, 9, 33, 207, 10, 3, 140, 222, 188, 47, 19, 9, 33, 207, + 10, 3, 90, 47, 19, 9, 33, 251, 172, 3, 140, 222, 188, 47, 19, 9, 33, 251, + 172, 3, 90, 47, 19, 9, 33, 235, 195, 3, 140, 222, 188, 47, 19, 9, 33, + 235, 195, 3, 90, 47, 19, 9, 33, 211, 187, 3, 140, 222, 188, 47, 19, 9, + 33, 211, 187, 3, 90, 47, 19, 9, 33, 210, 62, 3, 140, 222, 188, 47, 19, 9, + 33, 210, 62, 3, 90, 47, 19, 9, 33, 155, 3, 140, 222, 188, 47, 19, 9, 33, + 155, 3, 90, 47, 19, 9, 33, 193, 3, 140, 222, 188, 47, 19, 9, 33, 193, 3, + 90, 47, 19, 9, 33, 226, 204, 3, 140, 222, 188, 47, 19, 9, 33, 226, 204, + 3, 90, 47, 19, 9, 33, 212, 57, 3, 140, 222, 188, 47, 19, 9, 33, 212, 57, + 3, 90, 47, 19, 9, 33, 242, 53, 3, 140, 222, 188, 47, 19, 9, 33, 242, 53, + 3, 90, 47, 19, 9, 33, 210, 62, 3, 193, 47, 19, 9, 33, 210, 62, 3, 155, + 47, 19, 9, 33, 210, 62, 3, 226, 204, 47, 19, 9, 33, 210, 62, 3, 84, 47, + 19, 9, 33, 210, 62, 3, 213, 155, 47, 19, 9, 33, 211, 187, 3, 213, 155, + 47, 19, 9, 33, 212, 57, 3, 213, 155, 47, 19, 9, 33, 242, 53, 3, 213, 155, + 47, 19, 9, 33, 210, 62, 3, 193, 82, 19, 9, 33, 210, 62, 3, 155, 82, 19, + 9, 33, 210, 62, 3, 226, 204, 82, 19, 9, 33, 210, 62, 3, 84, 82, 19, 9, + 33, 211, 187, 3, 234, 116, 82, 19, 9, 33, 210, 62, 3, 234, 116, 82, 19, + 9, 33, 207, 10, 3, 84, 82, 19, 9, 33, 211, 187, 3, 193, 179, 19, 9, 33, + 211, 187, 3, 155, 179, 19, 9, 33, 211, 187, 3, 226, 204, 179, 19, 9, 33, + 210, 62, 3, 193, 179, 19, 9, 33, 210, 62, 3, 155, 179, 19, 9, 33, 210, + 62, 3, 226, 204, 179, 19, 9, 33, 207, 10, 3, 84, 179, 19, 9, 33, 199, + 109, 3, 84, 179, 19, 9, 33, 140, 3, 237, 157, 47, 19, 9, 33, 140, 3, 237, + 157, 65, 19, 217, 19, 49, 216, 115, 217, 19, 51, 216, 115, 9, 33, 206, + 184, 3, 193, 3, 84, 82, 19, 9, 33, 206, 184, 3, 155, 3, 193, 47, 19, 9, + 33, 206, 184, 3, 155, 3, 193, 82, 19, 9, 33, 206, 184, 3, 155, 3, 84, 82, + 19, 9, 33, 206, 184, 3, 226, 204, 3, 84, 82, 19, 9, 33, 206, 184, 3, 84, + 3, 193, 82, 19, 9, 33, 206, 184, 3, 84, 3, 155, 82, 19, 9, 33, 206, 184, + 3, 84, 3, 226, 204, 82, 19, 9, 33, 193, 3, 84, 3, 155, 47, 19, 9, 33, + 193, 3, 84, 3, 155, 82, 19, 9, 33, 155, 3, 84, 3, 90, 47, 19, 9, 33, 155, + 3, 84, 3, 140, 222, 188, 47, 19, 9, 33, 211, 187, 3, 155, 3, 193, 82, 19, + 9, 33, 211, 187, 3, 193, 3, 155, 82, 19, 9, 33, 211, 187, 3, 193, 3, 140, + 222, 188, 47, 19, 9, 33, 211, 187, 3, 84, 3, 155, 47, 19, 9, 33, 211, + 187, 3, 84, 3, 155, 82, 19, 9, 33, 211, 187, 3, 84, 3, 193, 82, 19, 9, + 33, 211, 187, 3, 84, 3, 84, 47, 19, 9, 33, 211, 187, 3, 84, 3, 84, 82, + 19, 9, 33, 212, 57, 3, 155, 3, 155, 47, 19, 9, 33, 212, 57, 3, 155, 3, + 155, 82, 19, 9, 33, 212, 57, 3, 84, 3, 84, 47, 19, 9, 33, 210, 62, 3, + 155, 3, 84, 47, 19, 9, 33, 210, 62, 3, 155, 3, 84, 82, 19, 9, 33, 210, + 62, 3, 193, 3, 90, 47, 19, 9, 33, 210, 62, 3, 84, 3, 226, 204, 47, 19, 9, + 33, 210, 62, 3, 84, 3, 226, 204, 82, 19, 9, 33, 210, 62, 3, 84, 3, 84, + 47, 19, 9, 33, 210, 62, 3, 84, 3, 84, 82, 19, 9, 33, 242, 53, 3, 155, 3, + 140, 222, 188, 47, 19, 9, 33, 242, 53, 3, 226, 204, 3, 84, 47, 19, 9, 33, + 242, 53, 3, 226, 204, 3, 84, 82, 19, 9, 33, 207, 10, 3, 84, 3, 155, 47, + 19, 9, 33, 207, 10, 3, 84, 3, 155, 82, 19, 9, 33, 207, 10, 3, 84, 3, 84, + 82, 19, 9, 33, 207, 10, 3, 84, 3, 90, 47, 19, 9, 33, 251, 172, 3, 193, 3, + 84, 47, 19, 9, 33, 251, 172, 3, 84, 3, 84, 47, 19, 9, 33, 251, 172, 3, + 84, 3, 84, 82, 19, 9, 33, 251, 172, 3, 84, 3, 140, 222, 188, 47, 19, 9, + 33, 235, 195, 3, 84, 3, 84, 47, 19, 9, 33, 235, 195, 3, 84, 3, 90, 47, + 19, 9, 33, 235, 195, 3, 84, 3, 140, 222, 188, 47, 19, 9, 33, 237, 135, 3, + 226, 204, 3, 84, 47, 19, 9, 33, 237, 135, 3, 226, 204, 3, 84, 82, 19, 9, + 33, 214, 153, 3, 84, 3, 155, 47, 19, 9, 33, 214, 153, 3, 84, 3, 84, 47, + 19, 9, 33, 225, 92, 3, 155, 3, 84, 47, 19, 9, 33, 225, 92, 3, 155, 3, 90, + 47, 19, 9, 33, 225, 92, 3, 155, 3, 140, 222, 188, 47, 19, 9, 33, 225, 92, + 3, 193, 3, 193, 82, 19, 9, 33, 225, 92, 3, 193, 3, 193, 47, 19, 9, 33, + 225, 92, 3, 226, 204, 3, 84, 47, 19, 9, 33, 225, 92, 3, 226, 204, 3, 84, + 82, 19, 9, 33, 225, 92, 3, 84, 3, 155, 47, 19, 9, 33, 225, 92, 3, 84, 3, + 155, 82, 19, 9, 33, 84, 3, 155, 3, 193, 82, 19, 9, 33, 84, 3, 155, 3, 84, + 82, 19, 9, 33, 84, 3, 155, 3, 90, 47, 19, 9, 33, 84, 3, 193, 3, 155, 82, + 19, 9, 33, 84, 3, 193, 3, 84, 82, 19, 9, 33, 84, 3, 226, 204, 3, 193, 82, + 19, 9, 33, 84, 3, 226, 204, 3, 84, 82, 19, 9, 33, 84, 3, 193, 3, 226, + 204, 82, 19, 9, 33, 234, 116, 3, 84, 3, 193, 82, 19, 9, 33, 234, 116, 3, + 84, 3, 84, 82, 19, 9, 33, 218, 228, 3, 155, 3, 84, 82, 19, 9, 33, 218, + 228, 3, 155, 3, 140, 222, 188, 47, 19, 9, 33, 218, 228, 3, 193, 3, 84, + 47, 19, 9, 33, 218, 228, 3, 193, 3, 84, 82, 19, 9, 33, 218, 228, 3, 193, + 3, 140, 222, 188, 47, 19, 9, 33, 218, 228, 3, 84, 3, 90, 47, 19, 9, 33, + 218, 228, 3, 84, 3, 140, 222, 188, 47, 19, 9, 33, 90, 3, 84, 3, 84, 47, + 19, 9, 33, 90, 3, 84, 3, 84, 82, 19, 9, 33, 248, 241, 3, 226, 204, 3, 90, + 47, 19, 9, 33, 206, 184, 3, 193, 3, 90, 47, 19, 9, 33, 206, 184, 3, 193, + 3, 140, 222, 188, 47, 19, 9, 33, 206, 184, 3, 226, 204, 3, 90, 47, 19, 9, + 33, 206, 184, 3, 226, 204, 3, 140, 222, 188, 47, 19, 9, 33, 206, 184, 3, + 84, 3, 90, 47, 19, 9, 33, 206, 184, 3, 84, 3, 140, 222, 188, 47, 19, 9, + 33, 193, 3, 84, 3, 90, 47, 19, 9, 33, 193, 3, 155, 3, 140, 222, 188, 47, + 19, 9, 33, 193, 3, 84, 3, 140, 222, 188, 47, 19, 9, 33, 211, 187, 3, 226, + 204, 3, 140, 222, 188, 47, 19, 9, 33, 212, 57, 3, 155, 3, 90, 47, 19, 9, + 33, 210, 62, 3, 155, 3, 90, 47, 19, 9, 33, 242, 53, 3, 155, 3, 90, 47, + 19, 9, 33, 225, 92, 3, 193, 3, 90, 47, 19, 9, 33, 225, 92, 3, 84, 3, 90, + 47, 19, 9, 33, 90, 3, 155, 3, 90, 47, 19, 9, 33, 90, 3, 193, 3, 90, 47, + 19, 9, 33, 90, 3, 84, 3, 90, 47, 19, 9, 33, 84, 3, 84, 3, 90, 47, 19, 9, + 33, 214, 153, 3, 84, 3, 90, 47, 19, 9, 33, 218, 228, 3, 155, 3, 90, 47, + 19, 9, 33, 214, 153, 3, 84, 3, 155, 82, 19, 9, 33, 225, 92, 3, 155, 3, + 84, 82, 19, 9, 33, 251, 172, 3, 84, 3, 90, 47, 19, 9, 33, 227, 87, 3, 84, + 3, 90, 47, 19, 9, 33, 218, 228, 3, 193, 3, 155, 82, 19, 9, 33, 84, 3, + 226, 204, 3, 90, 47, 19, 9, 33, 225, 92, 3, 193, 3, 84, 82, 19, 9, 33, + 227, 87, 3, 84, 3, 84, 47, 19, 9, 33, 225, 92, 3, 193, 3, 84, 47, 19, 9, + 33, 218, 228, 3, 193, 3, 155, 47, 19, 9, 33, 193, 3, 155, 3, 90, 47, 19, + 9, 33, 155, 3, 193, 3, 90, 47, 19, 9, 33, 84, 3, 193, 3, 90, 47, 19, 9, + 33, 237, 135, 3, 84, 3, 90, 47, 19, 9, 33, 248, 241, 3, 155, 3, 90, 47, + 19, 9, 33, 227, 87, 3, 84, 3, 84, 82, 19, 9, 33, 251, 172, 3, 193, 3, 84, + 82, 19, 9, 33, 212, 57, 3, 84, 3, 84, 82, 19, 9, 33, 211, 187, 3, 226, + 204, 3, 90, 47, 19, 9, 33, 218, 228, 3, 193, 3, 90, 47, 19, 9, 33, 212, + 30, 203, 192, 250, 189, 226, 60, 208, 77, 2, 65, 19, 9, 33, 214, 149, + 203, 192, 250, 189, 226, 60, 208, 77, 2, 65, 19, 9, 33, 251, 123, 65, 19, + 9, 33, 251, 156, 65, 19, 9, 33, 221, 109, 65, 19, 9, 33, 212, 31, 65, 19, + 9, 33, 213, 206, 65, 19, 9, 33, 251, 145, 65, 19, 9, 33, 201, 92, 65, 19, + 9, 33, 212, 30, 65, 19, 9, 33, 212, 29, 251, 145, 201, 91, 9, 33, 227, + 239, 213, 87, 54, 9, 33, 248, 154, 250, 251, 250, 252, 58, 211, 174, 58, + 211, 63, 58, 210, 251, 58, 210, 240, 58, 210, 229, 58, 210, 218, 58, 210, + 207, 58, 210, 196, 58, 210, 185, 58, 211, 173, 58, 211, 162, 58, 211, + 151, 58, 211, 140, 58, 211, 129, 58, 211, 118, 58, 211, 107, 215, 19, + 236, 242, 36, 83, 246, 70, 215, 19, 236, 242, 36, 83, 141, 246, 70, 215, + 19, 236, 242, 36, 83, 141, 236, 183, 208, 76, 215, 19, 236, 242, 36, 83, + 246, 79, 215, 19, 236, 242, 36, 83, 210, 167, 215, 19, 236, 242, 36, 83, + 238, 43, 81, 215, 19, 236, 242, 36, 83, 214, 79, 81, 215, 19, 236, 242, + 36, 83, 49, 64, 224, 247, 159, 215, 19, 236, 242, 36, 83, 51, 64, 224, + 247, 248, 68, 215, 19, 236, 242, 36, 83, 233, 177, 238, 195, 38, 33, 49, + 234, 213, 38, 33, 51, 234, 213, 38, 53, 205, 241, 49, 234, 213, 38, 53, + 205, 241, 51, 234, 213, 38, 222, 229, 49, 234, 213, 38, 222, 229, 51, + 234, 213, 38, 243, 56, 222, 228, 38, 33, 49, 167, 57, 38, 33, 51, 167, + 57, 38, 205, 241, 49, 167, 57, 38, 205, 241, 51, 167, 57, 38, 222, 229, + 49, 167, 57, 38, 222, 229, 51, 167, 57, 38, 243, 56, 222, 229, 57, 38, + 37, 205, 211, 49, 234, 213, 38, 37, 205, 211, 51, 234, 213, 215, 19, 236, + 242, 36, 83, 120, 73, 225, 38, 215, 19, 236, 242, 36, 83, 238, 191, 241, + 244, 215, 19, 236, 242, 36, 83, 238, 180, 241, 244, 215, 19, 236, 242, + 36, 83, 128, 224, 176, 215, 19, 236, 242, 36, 83, 201, 74, 128, 224, 176, + 215, 19, 236, 242, 36, 83, 49, 216, 115, 215, 19, 236, 242, 36, 83, 51, + 216, 115, 215, 19, 236, 242, 36, 83, 49, 242, 196, 159, 215, 19, 236, + 242, 36, 83, 51, 242, 196, 159, 215, 19, 236, 242, 36, 83, 49, 205, 146, + 210, 55, 159, 215, 19, 236, 242, 36, 83, 51, 205, 146, 210, 55, 159, 215, + 19, 236, 242, 36, 83, 49, 63, 224, 247, 159, 215, 19, 236, 242, 36, 83, + 51, 63, 224, 247, 159, 215, 19, 236, 242, 36, 83, 49, 53, 251, 71, 159, + 215, 19, 236, 242, 36, 83, 51, 53, 251, 71, 159, 215, 19, 236, 242, 36, + 83, 49, 251, 71, 159, 215, 19, 236, 242, 36, 83, 51, 251, 71, 159, 215, + 19, 236, 242, 36, 83, 49, 243, 16, 159, 215, 19, 236, 242, 36, 83, 51, + 243, 16, 159, 215, 19, 236, 242, 36, 83, 49, 64, 243, 16, 159, 215, 19, + 236, 242, 36, 83, 51, 64, 243, 16, 159, 210, 145, 240, 182, 64, 210, 145, + 240, 182, 215, 19, 236, 242, 36, 83, 49, 52, 159, 215, 19, 236, 242, 36, + 83, 51, 52, 159, 241, 243, 216, 241, 247, 52, 216, 241, 201, 74, 216, + 241, 53, 201, 74, 216, 241, 241, 243, 128, 224, 176, 247, 52, 128, 224, + 176, 201, 74, 128, 224, 176, 4, 246, 70, 4, 141, 246, 70, 4, 236, 183, + 208, 76, 4, 210, 167, 4, 246, 79, 4, 214, 79, 81, 4, 238, 43, 81, 4, 238, + 191, 241, 244, 4, 49, 216, 115, 4, 51, 216, 115, 4, 49, 242, 196, 159, 4, + 51, 242, 196, 159, 4, 49, 205, 146, 210, 55, 159, 4, 51, 205, 146, 210, + 55, 159, 4, 41, 54, 4, 251, 89, 4, 250, 165, 4, 93, 54, 4, 233, 32, 4, + 224, 241, 54, 4, 235, 67, 54, 4, 238, 122, 54, 4, 213, 106, 209, 16, 4, + 240, 194, 54, 4, 216, 27, 54, 4, 246, 68, 250, 155, 9, 237, 157, 65, 19, + 9, 206, 224, 3, 237, 157, 56, 9, 242, 16, 65, 19, 9, 207, 7, 236, 218, 9, + 227, 35, 65, 19, 9, 237, 159, 65, 19, 9, 237, 159, 179, 19, 9, 242, 18, + 65, 19, 9, 242, 18, 179, 19, 9, 227, 37, 65, 19, 9, 227, 37, 179, 19, 9, + 210, 105, 65, 19, 9, 210, 105, 179, 19, 9, 207, 237, 65, 19, 9, 207, 237, + 179, 19, 9, 1, 234, 204, 65, 19, 9, 1, 140, 3, 222, 224, 88, 65, 19, 9, + 1, 140, 3, 222, 224, 88, 47, 19, 9, 1, 140, 3, 234, 204, 88, 65, 19, 9, + 1, 140, 3, 234, 204, 88, 47, 19, 9, 1, 201, 73, 3, 234, 204, 88, 65, 19, + 9, 1, 201, 73, 3, 234, 204, 88, 47, 19, 9, 1, 140, 3, 234, 204, 248, 228, + 65, 19, 9, 1, 140, 3, 234, 204, 248, 228, 47, 19, 9, 1, 90, 3, 234, 204, + 88, 65, 19, 9, 1, 90, 3, 234, 204, 88, 47, 19, 9, 1, 90, 3, 234, 204, 88, + 82, 19, 9, 1, 90, 3, 234, 204, 88, 179, 19, 9, 1, 140, 65, 19, 9, 1, 140, + 47, 19, 9, 1, 248, 241, 65, 19, 9, 1, 248, 241, 47, 19, 9, 1, 248, 241, + 82, 19, 9, 1, 248, 241, 179, 19, 9, 1, 206, 184, 222, 157, 65, 19, 9, 1, + 206, 184, 222, 157, 47, 19, 9, 1, 206, 184, 65, 19, 9, 1, 206, 184, 47, + 19, 9, 1, 206, 184, 82, 19, 9, 1, 206, 184, 179, 19, 9, 1, 206, 103, 65, + 19, 9, 1, 206, 103, 47, 19, 9, 1, 206, 103, 82, 19, 9, 1, 206, 103, 179, + 19, 9, 1, 193, 65, 19, 9, 1, 193, 47, 19, 9, 1, 193, 82, 19, 9, 1, 193, + 179, 19, 9, 1, 155, 65, 19, 9, 1, 155, 47, 19, 9, 1, 155, 82, 19, 9, 1, + 155, 179, 19, 9, 1, 226, 204, 65, 19, 9, 1, 226, 204, 47, 19, 9, 1, 226, + 204, 82, 19, 9, 1, 226, 204, 179, 19, 9, 1, 242, 30, 65, 19, 9, 1, 242, + 30, 47, 19, 9, 1, 206, 115, 65, 19, 9, 1, 206, 115, 47, 19, 9, 1, 213, + 155, 65, 19, 9, 1, 213, 155, 47, 19, 9, 1, 199, 106, 65, 19, 9, 1, 199, + 106, 47, 19, 9, 1, 211, 187, 65, 19, 9, 1, 211, 187, 47, 19, 9, 1, 211, + 187, 82, 19, 9, 1, 211, 187, 179, 19, 9, 1, 210, 62, 65, 19, 9, 1, 210, + 62, 47, 19, 9, 1, 210, 62, 82, 19, 9, 1, 210, 62, 179, 19, 9, 1, 212, 57, + 65, 19, 9, 1, 212, 57, 47, 19, 9, 1, 212, 57, 82, 19, 9, 1, 212, 57, 179, + 19, 9, 1, 242, 53, 65, 19, 9, 1, 242, 53, 47, 19, 9, 1, 242, 53, 82, 19, + 9, 1, 242, 53, 179, 19, 9, 1, 207, 10, 65, 19, 9, 1, 207, 10, 47, 19, 9, + 1, 207, 10, 82, 19, 9, 1, 207, 10, 179, 19, 9, 1, 199, 109, 65, 19, 9, 1, + 199, 109, 47, 19, 9, 1, 199, 109, 82, 19, 9, 1, 199, 109, 179, 19, 9, 1, + 251, 172, 65, 19, 9, 1, 251, 172, 47, 19, 9, 1, 251, 172, 82, 19, 9, 1, + 251, 172, 179, 19, 9, 1, 235, 195, 65, 19, 9, 1, 235, 195, 47, 19, 9, 1, + 235, 195, 82, 19, 9, 1, 235, 195, 179, 19, 9, 1, 237, 135, 65, 19, 9, 1, + 237, 135, 47, 19, 9, 1, 237, 135, 82, 19, 9, 1, 237, 135, 179, 19, 9, 1, + 214, 153, 65, 19, 9, 1, 214, 153, 47, 19, 9, 1, 214, 153, 82, 19, 9, 1, + 214, 153, 179, 19, 9, 1, 227, 87, 65, 19, 9, 1, 227, 87, 47, 19, 9, 1, + 227, 87, 82, 19, 9, 1, 227, 87, 179, 19, 9, 1, 225, 92, 65, 19, 9, 1, + 225, 92, 47, 19, 9, 1, 225, 92, 82, 19, 9, 1, 225, 92, 179, 19, 9, 1, 84, + 65, 19, 9, 1, 84, 47, 19, 9, 1, 84, 82, 19, 9, 1, 84, 179, 19, 9, 1, 218, + 228, 65, 19, 9, 1, 218, 228, 47, 19, 9, 1, 218, 228, 82, 19, 9, 1, 218, + 228, 179, 19, 9, 1, 234, 116, 65, 19, 9, 1, 234, 116, 47, 19, 9, 1, 234, + 116, 82, 19, 9, 1, 234, 116, 179, 19, 9, 1, 201, 73, 65, 19, 9, 1, 201, + 73, 47, 19, 9, 1, 140, 222, 188, 65, 19, 9, 1, 140, 222, 188, 47, 19, 9, + 1, 90, 65, 19, 9, 1, 90, 47, 19, 9, 1, 90, 82, 19, 9, 1, 90, 179, 19, 9, + 33, 225, 92, 3, 140, 3, 222, 224, 88, 65, 19, 9, 33, 225, 92, 3, 140, 3, + 222, 224, 88, 47, 19, 9, 33, 225, 92, 3, 140, 3, 234, 204, 88, 65, 19, 9, + 33, 225, 92, 3, 140, 3, 234, 204, 88, 47, 19, 9, 33, 225, 92, 3, 140, 3, + 234, 204, 248, 228, 65, 19, 9, 33, 225, 92, 3, 140, 3, 234, 204, 248, + 228, 47, 19, 9, 33, 225, 92, 3, 140, 65, 19, 9, 33, 225, 92, 3, 140, 47, + 19, 199, 82, 201, 25, 218, 240, 208, 244, 158, 238, 43, 81, 158, 214, 63, + 81, 158, 41, 54, 158, 240, 194, 54, 158, 216, 27, 54, 158, 251, 89, 158, + 251, 13, 158, 49, 216, 115, 158, 51, 216, 115, 158, 250, 165, 158, 93, + 54, 158, 246, 70, 158, 233, 32, 158, 236, 183, 208, 76, 158, 209, 16, + 158, 17, 199, 81, 158, 17, 102, 158, 17, 105, 158, 17, 147, 158, 17, 149, + 158, 17, 164, 158, 17, 187, 158, 17, 210, 135, 158, 17, 192, 158, 17, + 219, 113, 158, 246, 79, 158, 210, 167, 158, 224, 241, 54, 158, 238, 122, + 54, 158, 235, 67, 54, 158, 214, 79, 81, 158, 246, 68, 250, 155, 158, 8, + 6, 1, 62, 158, 8, 6, 1, 250, 103, 158, 8, 6, 1, 247, 223, 158, 8, 6, 1, + 242, 153, 158, 8, 6, 1, 72, 158, 8, 6, 1, 238, 5, 158, 8, 6, 1, 236, 156, + 158, 8, 6, 1, 234, 247, 158, 8, 6, 1, 70, 158, 8, 6, 1, 227, 251, 158, 8, + 6, 1, 227, 118, 158, 8, 6, 1, 156, 158, 8, 6, 1, 223, 243, 158, 8, 6, 1, + 220, 214, 158, 8, 6, 1, 74, 158, 8, 6, 1, 216, 226, 158, 8, 6, 1, 214, + 167, 158, 8, 6, 1, 146, 158, 8, 6, 1, 212, 122, 158, 8, 6, 1, 207, 83, + 158, 8, 6, 1, 66, 158, 8, 6, 1, 203, 168, 158, 8, 6, 1, 201, 147, 158, 8, + 6, 1, 200, 195, 158, 8, 6, 1, 200, 123, 158, 8, 6, 1, 199, 157, 158, 49, + 52, 159, 158, 213, 106, 209, 16, 158, 51, 52, 159, 158, 246, 147, 251, + 251, 158, 128, 224, 176, 158, 235, 74, 251, 251, 158, 8, 4, 1, 62, 158, + 8, 4, 1, 250, 103, 158, 8, 4, 1, 247, 223, 158, 8, 4, 1, 242, 153, 158, + 8, 4, 1, 72, 158, 8, 4, 1, 238, 5, 158, 8, 4, 1, 236, 156, 158, 8, 4, 1, + 234, 247, 158, 8, 4, 1, 70, 158, 8, 4, 1, 227, 251, 158, 8, 4, 1, 227, + 118, 158, 8, 4, 1, 156, 158, 8, 4, 1, 223, 243, 158, 8, 4, 1, 220, 214, + 158, 8, 4, 1, 74, 158, 8, 4, 1, 216, 226, 158, 8, 4, 1, 214, 167, 158, 8, + 4, 1, 146, 158, 8, 4, 1, 212, 122, 158, 8, 4, 1, 207, 83, 158, 8, 4, 1, + 66, 158, 8, 4, 1, 203, 168, 158, 8, 4, 1, 201, 147, 158, 8, 4, 1, 200, + 195, 158, 8, 4, 1, 200, 123, 158, 8, 4, 1, 199, 157, 158, 49, 242, 196, + 159, 158, 83, 224, 176, 158, 51, 242, 196, 159, 158, 205, 240, 158, 49, + 64, 216, 115, 158, 51, 64, 216, 115, 130, 141, 236, 183, 208, 76, 130, + 49, 243, 16, 159, 130, 51, 243, 16, 159, 130, 141, 246, 70, 130, 69, 101, + 240, 182, 130, 69, 1, 201, 0, 130, 69, 1, 4, 62, 130, 69, 1, 4, 70, 130, + 69, 1, 4, 66, 130, 69, 1, 4, 72, 130, 69, 1, 4, 74, 130, 69, 1, 4, 183, + 130, 69, 1, 4, 199, 211, 130, 69, 1, 4, 199, 245, 130, 69, 1, 4, 204, + 215, 130, 227, 32, 214, 248, 209, 1, 81, 130, 69, 1, 62, 130, 69, 1, 70, + 130, 69, 1, 66, 130, 69, 1, 72, 130, 69, 1, 74, 130, 69, 1, 161, 130, 69, + 1, 226, 163, 130, 69, 1, 226, 15, 130, 69, 1, 227, 8, 130, 69, 1, 226, + 88, 130, 69, 1, 212, 64, 130, 69, 1, 209, 182, 130, 69, 1, 208, 24, 130, + 69, 1, 211, 202, 130, 69, 1, 209, 29, 130, 69, 1, 207, 36, 130, 69, 1, + 206, 15, 130, 69, 1, 204, 215, 130, 69, 1, 206, 201, 130, 69, 1, 138, + 130, 69, 1, 188, 130, 69, 1, 219, 150, 130, 69, 1, 218, 133, 130, 69, 1, + 220, 34, 130, 69, 1, 218, 241, 130, 69, 1, 144, 130, 69, 1, 234, 75, 130, + 69, 1, 233, 97, 130, 69, 1, 234, 139, 130, 69, 1, 233, 207, 130, 69, 1, + 178, 130, 69, 1, 221, 211, 130, 69, 1, 221, 41, 130, 69, 1, 222, 76, 130, + 69, 1, 221, 136, 130, 69, 1, 183, 130, 69, 1, 199, 211, 130, 69, 1, 199, + 245, 130, 69, 1, 213, 252, 130, 69, 1, 213, 88, 130, 69, 1, 212, 175, + 130, 69, 1, 213, 190, 130, 69, 1, 213, 1, 130, 69, 1, 201, 114, 130, 69, + 1, 220, 214, 130, 69, 202, 189, 209, 1, 81, 130, 69, 210, 172, 209, 1, + 81, 130, 29, 237, 93, 130, 29, 1, 226, 121, 130, 29, 1, 208, 171, 130, + 29, 1, 226, 114, 130, 29, 1, 219, 143, 130, 29, 1, 219, 141, 130, 29, 1, + 219, 140, 130, 29, 1, 205, 253, 130, 29, 1, 208, 160, 130, 29, 1, 213, + 78, 130, 29, 1, 213, 73, 130, 29, 1, 213, 70, 130, 29, 1, 213, 63, 130, + 29, 1, 213, 58, 130, 29, 1, 213, 53, 130, 29, 1, 213, 64, 130, 29, 1, + 213, 76, 130, 29, 1, 221, 197, 130, 29, 1, 215, 190, 130, 29, 1, 208, + 168, 130, 29, 1, 215, 179, 130, 29, 1, 209, 129, 130, 29, 1, 208, 165, + 130, 29, 1, 228, 174, 130, 29, 1, 246, 168, 130, 29, 1, 208, 175, 130, + 29, 1, 246, 232, 130, 29, 1, 226, 183, 130, 29, 1, 206, 80, 130, 29, 1, + 215, 227, 130, 29, 1, 234, 66, 130, 29, 1, 62, 130, 29, 1, 251, 221, 130, + 29, 1, 183, 130, 29, 1, 200, 98, 130, 29, 1, 238, 142, 130, 29, 1, 72, + 130, 29, 1, 200, 38, 130, 29, 1, 200, 51, 130, 29, 1, 74, 130, 29, 1, + 201, 114, 130, 29, 1, 201, 110, 130, 29, 1, 217, 121, 130, 29, 1, 199, + 245, 130, 29, 1, 66, 130, 29, 1, 201, 50, 130, 29, 1, 201, 64, 130, 29, + 1, 201, 31, 130, 29, 1, 199, 211, 130, 29, 1, 238, 69, 130, 29, 1, 200, + 9, 130, 29, 1, 70, 158, 247, 58, 54, 158, 215, 56, 54, 158, 218, 215, 54, + 158, 222, 228, 158, 248, 46, 148, 158, 200, 42, 54, 158, 200, 246, 54, + 130, 236, 239, 162, 203, 42, 130, 98, 48, 130, 182, 48, 130, 87, 48, 130, + 191, 48, 130, 63, 208, 193, 130, 64, 246, 155, 228, 62, 251, 58, 251, 81, + 228, 62, 251, 58, 210, 154, 228, 62, 251, 58, 206, 152, 217, 139, 213, + 128, 247, 20, 213, 128, 247, 20, 30, 68, 5, 250, 87, 62, 30, 68, 5, 250, + 56, 72, 30, 68, 5, 250, 65, 70, 30, 68, 5, 250, 33, 74, 30, 68, 5, 250, + 83, 66, 30, 68, 5, 250, 102, 242, 58, 30, 68, 5, 250, 49, 241, 175, 30, + 68, 5, 250, 89, 241, 76, 30, 68, 5, 250, 79, 240, 211, 30, 68, 5, 250, + 43, 239, 137, 30, 68, 5, 250, 37, 227, 248, 30, 68, 5, 250, 48, 227, 227, + 30, 68, 5, 250, 58, 227, 166, 30, 68, 5, 250, 29, 227, 147, 30, 68, 5, + 250, 17, 161, 30, 68, 5, 250, 50, 227, 8, 30, 68, 5, 250, 27, 226, 163, + 30, 68, 5, 250, 24, 226, 88, 30, 68, 5, 250, 13, 226, 15, 30, 68, 5, 250, + 14, 178, 30, 68, 5, 250, 80, 222, 76, 30, 68, 5, 250, 21, 221, 211, 30, + 68, 5, 250, 78, 221, 136, 30, 68, 5, 250, 70, 221, 41, 30, 68, 5, 250, + 91, 188, 30, 68, 5, 250, 69, 220, 34, 30, 68, 5, 250, 63, 219, 150, 30, + 68, 5, 250, 42, 218, 241, 30, 68, 5, 250, 39, 218, 133, 30, 68, 5, 250, + 98, 172, 30, 68, 5, 250, 22, 216, 73, 30, 68, 5, 250, 55, 215, 204, 30, + 68, 5, 250, 82, 215, 106, 30, 68, 5, 250, 44, 214, 224, 30, 68, 5, 250, + 77, 214, 159, 30, 68, 5, 250, 16, 214, 139, 30, 68, 5, 250, 72, 214, 121, + 30, 68, 5, 250, 61, 214, 109, 30, 68, 5, 250, 34, 213, 252, 30, 68, 5, + 250, 66, 213, 190, 30, 68, 5, 250, 41, 213, 88, 30, 68, 5, 250, 100, 213, + 1, 30, 68, 5, 250, 67, 212, 175, 30, 68, 5, 250, 62, 212, 64, 30, 68, 5, + 250, 85, 211, 202, 30, 68, 5, 250, 53, 209, 182, 30, 68, 5, 250, 81, 209, + 29, 30, 68, 5, 250, 36, 208, 24, 30, 68, 5, 250, 35, 207, 36, 30, 68, 5, + 250, 96, 206, 201, 30, 68, 5, 250, 57, 206, 15, 30, 68, 5, 250, 94, 138, + 30, 68, 5, 250, 25, 204, 215, 30, 68, 5, 250, 40, 201, 114, 30, 68, 5, + 250, 19, 201, 64, 30, 68, 5, 250, 54, 201, 31, 30, 68, 5, 250, 52, 201, + 0, 30, 68, 5, 250, 76, 199, 114, 30, 68, 5, 250, 20, 199, 89, 30, 68, 5, + 250, 73, 199, 14, 30, 68, 5, 250, 68, 254, 147, 30, 68, 5, 250, 51, 254, + 35, 30, 68, 5, 250, 10, 250, 139, 30, 68, 5, 250, 23, 239, 103, 30, 68, + 5, 250, 6, 239, 102, 30, 68, 5, 250, 46, 218, 69, 30, 68, 5, 250, 64, + 214, 222, 30, 68, 5, 250, 32, 214, 226, 30, 68, 5, 250, 18, 213, 250, 30, + 68, 5, 250, 60, 213, 249, 30, 68, 5, 250, 26, 213, 0, 30, 68, 5, 250, 28, + 207, 33, 30, 68, 5, 250, 8, 204, 168, 30, 68, 5, 250, 5, 105, 30, 68, 16, + 250, 75, 30, 68, 16, 250, 74, 30, 68, 16, 250, 71, 30, 68, 16, 250, 59, + 30, 68, 16, 250, 47, 30, 68, 16, 250, 45, 30, 68, 16, 250, 38, 30, 68, + 16, 250, 31, 30, 68, 16, 250, 30, 30, 68, 16, 250, 15, 30, 68, 16, 250, + 12, 30, 68, 16, 250, 11, 30, 68, 16, 250, 9, 30, 68, 16, 250, 7, 30, 68, + 136, 250, 4, 222, 180, 30, 68, 136, 250, 3, 200, 250, 30, 68, 136, 250, + 2, 241, 158, 30, 68, 136, 250, 1, 238, 119, 30, 68, 136, 250, 0, 222, + 150, 30, 68, 136, 249, 255, 208, 116, 30, 68, 136, 249, 254, 238, 50, 30, + 68, 136, 249, 253, 213, 216, 30, 68, 136, 249, 252, 210, 64, 30, 68, 136, + 249, 251, 234, 138, 30, 68, 136, 249, 250, 208, 251, 30, 68, 136, 249, + 249, 248, 122, 30, 68, 136, 249, 248, 242, 255, 30, 68, 136, 249, 247, + 248, 22, 30, 68, 136, 249, 246, 201, 39, 30, 68, 136, 249, 245, 249, 73, + 30, 68, 136, 249, 244, 217, 88, 30, 68, 136, 249, 243, 208, 223, 30, 68, + 136, 249, 242, 242, 161, 30, 68, 221, 97, 249, 241, 227, 56, 30, 68, 221, + 97, 249, 240, 227, 66, 30, 68, 136, 249, 239, 217, 103, 30, 68, 136, 249, + 238, 201, 12, 30, 68, 136, 249, 237, 30, 68, 221, 97, 249, 236, 250, 227, + 30, 68, 221, 97, 249, 235, 222, 32, 30, 68, 136, 249, 234, 248, 45, 30, + 68, 136, 249, 233, 235, 108, 30, 68, 136, 249, 232, 30, 68, 136, 249, + 231, 200, 241, 30, 68, 136, 249, 230, 30, 68, 136, 249, 229, 30, 68, 136, + 249, 228, 233, 124, 30, 68, 136, 249, 227, 30, 68, 136, 249, 226, 30, 68, + 136, 249, 225, 30, 68, 221, 97, 249, 223, 204, 183, 30, 68, 136, 249, + 222, 30, 68, 136, 249, 221, 30, 68, 136, 249, 220, 246, 104, 30, 68, 136, + 249, 219, 30, 68, 136, 249, 218, 30, 68, 136, 249, 217, 236, 46, 30, 68, + 136, 249, 216, 250, 214, 30, 68, 136, 249, 215, 30, 68, 136, 249, 214, + 30, 68, 136, 249, 213, 30, 68, 136, 249, 212, 30, 68, 136, 249, 211, 30, + 68, 136, 249, 210, 30, 68, 136, 249, 209, 30, 68, 136, 249, 208, 30, 68, + 136, 249, 207, 30, 68, 136, 249, 206, 221, 89, 30, 68, 136, 249, 205, 30, + 68, 136, 249, 204, 205, 108, 30, 68, 136, 249, 203, 30, 68, 136, 249, + 202, 30, 68, 136, 249, 201, 30, 68, 136, 249, 200, 30, 68, 136, 249, 199, + 30, 68, 136, 249, 198, 30, 68, 136, 249, 197, 30, 68, 136, 249, 196, 30, + 68, 136, 249, 195, 30, 68, 136, 249, 194, 30, 68, 136, 249, 193, 30, 68, + 136, 249, 192, 234, 107, 30, 68, 136, 249, 171, 236, 251, 30, 68, 136, + 249, 168, 249, 50, 30, 68, 136, 249, 163, 208, 230, 30, 68, 136, 249, + 162, 48, 30, 68, 136, 249, 161, 30, 68, 136, 249, 160, 207, 169, 30, 68, + 136, 249, 159, 30, 68, 136, 249, 158, 30, 68, 136, 249, 157, 201, 35, + 247, 17, 30, 68, 136, 249, 156, 247, 17, 30, 68, 136, 249, 155, 247, 18, + 236, 215, 30, 68, 136, 249, 154, 201, 37, 30, 68, 136, 249, 153, 30, 68, + 136, 249, 152, 30, 68, 221, 97, 249, 151, 241, 11, 30, 68, 136, 249, 150, + 30, 68, 136, 249, 149, 30, 68, 136, 249, 147, 30, 68, 136, 249, 146, 30, + 68, 136, 249, 145, 30, 68, 136, 249, 144, 241, 247, 30, 68, 136, 249, + 143, 30, 68, 136, 249, 142, 30, 68, 136, 249, 141, 30, 68, 136, 249, 140, + 30, 68, 136, 249, 139, 30, 68, 136, 202, 245, 249, 224, 30, 68, 136, 202, + 245, 249, 191, 30, 68, 136, 202, 245, 249, 190, 30, 68, 136, 202, 245, + 249, 189, 30, 68, 136, 202, 245, 249, 188, 30, 68, 136, 202, 245, 249, + 187, 30, 68, 136, 202, 245, 249, 186, 30, 68, 136, 202, 245, 249, 185, + 30, 68, 136, 202, 245, 249, 184, 30, 68, 136, 202, 245, 249, 183, 30, 68, + 136, 202, 245, 249, 182, 30, 68, 136, 202, 245, 249, 181, 30, 68, 136, + 202, 245, 249, 180, 30, 68, 136, 202, 245, 249, 179, 30, 68, 136, 202, + 245, 249, 178, 30, 68, 136, 202, 245, 249, 177, 30, 68, 136, 202, 245, + 249, 176, 30, 68, 136, 202, 245, 249, 175, 30, 68, 136, 202, 245, 249, + 174, 30, 68, 136, 202, 245, 249, 173, 30, 68, 136, 202, 245, 249, 172, + 30, 68, 136, 202, 245, 249, 170, 30, 68, 136, 202, 245, 249, 169, 30, 68, + 136, 202, 245, 249, 167, 30, 68, 136, 202, 245, 249, 166, 30, 68, 136, + 202, 245, 249, 165, 30, 68, 136, 202, 245, 249, 164, 30, 68, 136, 202, + 245, 249, 148, 30, 68, 136, 202, 245, 249, 138, 251, 214, 200, 238, 210, + 155, 224, 176, 251, 214, 200, 238, 210, 155, 240, 182, 251, 214, 247, 7, + 81, 251, 214, 41, 102, 251, 214, 41, 105, 251, 214, 41, 147, 251, 214, + 41, 149, 251, 214, 41, 164, 251, 214, 41, 187, 251, 214, 41, 210, 135, + 251, 214, 41, 192, 251, 214, 41, 219, 113, 251, 214, 41, 206, 166, 251, + 214, 41, 204, 159, 251, 214, 41, 206, 67, 251, 214, 41, 236, 235, 251, + 214, 41, 237, 104, 251, 214, 41, 209, 92, 251, 214, 41, 210, 129, 251, + 214, 41, 238, 222, 251, 214, 41, 219, 108, 251, 214, 41, 112, 233, 82, + 251, 214, 41, 120, 233, 82, 251, 214, 41, 126, 233, 82, 251, 214, 41, + 236, 229, 233, 82, 251, 214, 41, 237, 61, 233, 82, 251, 214, 41, 209, + 106, 233, 82, 251, 214, 41, 210, 136, 233, 82, 251, 214, 41, 238, 232, + 233, 82, 251, 214, 41, 219, 114, 233, 82, 251, 214, 41, 112, 206, 50, + 251, 214, 41, 120, 206, 50, 251, 214, 41, 126, 206, 50, 251, 214, 41, + 236, 229, 206, 50, 251, 214, 41, 237, 61, 206, 50, 251, 214, 41, 209, + 106, 206, 50, 251, 214, 41, 210, 136, 206, 50, 251, 214, 41, 238, 232, + 206, 50, 251, 214, 41, 219, 114, 206, 50, 251, 214, 41, 206, 167, 206, + 50, 251, 214, 41, 204, 160, 206, 50, 251, 214, 41, 206, 68, 206, 50, 251, + 214, 41, 236, 236, 206, 50, 251, 214, 41, 237, 105, 206, 50, 251, 214, + 41, 209, 93, 206, 50, 251, 214, 41, 210, 130, 206, 50, 251, 214, 41, 238, + 223, 206, 50, 251, 214, 41, 219, 109, 206, 50, 251, 214, 201, 53, 249, + 65, 203, 239, 251, 214, 201, 53, 237, 73, 207, 254, 251, 214, 201, 53, + 211, 196, 207, 254, 251, 214, 201, 53, 206, 75, 207, 254, 251, 214, 201, + 53, 236, 222, 207, 254, 251, 214, 239, 140, 222, 75, 237, 73, 207, 254, + 251, 214, 224, 157, 222, 75, 237, 73, 207, 254, 251, 214, 222, 75, 211, + 196, 207, 254, 251, 214, 222, 75, 206, 75, 207, 254, 31, 251, 242, 250, + 141, 112, 214, 87, 31, 251, 242, 250, 141, 112, 234, 213, 31, 251, 242, + 250, 141, 112, 239, 162, 31, 251, 242, 250, 141, 164, 31, 251, 242, 250, + 141, 237, 104, 31, 251, 242, 250, 141, 237, 61, 233, 82, 31, 251, 242, + 250, 141, 237, 61, 206, 50, 31, 251, 242, 250, 141, 237, 105, 206, 50, + 31, 251, 242, 250, 141, 237, 61, 206, 251, 31, 251, 242, 250, 141, 206, + 167, 206, 251, 31, 251, 242, 250, 141, 237, 105, 206, 251, 31, 251, 242, + 250, 141, 112, 233, 83, 206, 251, 31, 251, 242, 250, 141, 237, 61, 233, + 83, 206, 251, 31, 251, 242, 250, 141, 112, 206, 51, 206, 251, 31, 251, + 242, 250, 141, 237, 61, 206, 51, 206, 251, 31, 251, 242, 250, 141, 237, + 61, 208, 103, 31, 251, 242, 250, 141, 206, 167, 208, 103, 31, 251, 242, + 250, 141, 237, 105, 208, 103, 31, 251, 242, 250, 141, 112, 233, 83, 208, + 103, 31, 251, 242, 250, 141, 237, 61, 233, 83, 208, 103, 31, 251, 242, + 250, 141, 112, 206, 51, 208, 103, 31, 251, 242, 250, 141, 206, 167, 206, + 51, 208, 103, 31, 251, 242, 250, 141, 237, 105, 206, 51, 208, 103, 31, + 251, 242, 250, 141, 206, 167, 221, 139, 31, 251, 242, 234, 101, 112, 215, + 123, 31, 251, 242, 206, 90, 102, 31, 251, 242, 234, 97, 102, 31, 251, + 242, 238, 128, 105, 31, 251, 242, 206, 90, 105, 31, 251, 242, 242, 158, + 120, 239, 161, 31, 251, 242, 238, 128, 120, 239, 161, 31, 251, 242, 205, + 74, 164, 31, 251, 242, 205, 74, 206, 166, 31, 251, 242, 205, 74, 206, + 167, 251, 109, 19, 31, 251, 242, 234, 97, 206, 166, 31, 251, 242, 222, + 22, 206, 166, 31, 251, 242, 206, 90, 206, 166, 31, 251, 242, 206, 90, + 206, 67, 31, 251, 242, 205, 74, 237, 104, 31, 251, 242, 205, 74, 237, + 105, 251, 109, 19, 31, 251, 242, 234, 97, 237, 104, 31, 251, 242, 206, + 90, 237, 104, 31, 251, 242, 206, 90, 112, 233, 82, 31, 251, 242, 206, 90, + 126, 233, 82, 31, 251, 242, 238, 128, 237, 61, 233, 82, 31, 251, 242, + 205, 74, 237, 61, 233, 82, 31, 251, 242, 206, 90, 237, 61, 233, 82, 31, + 251, 242, 247, 115, 237, 61, 233, 82, 31, 251, 242, 220, 110, 237, 61, + 233, 82, 31, 251, 242, 206, 90, 112, 206, 50, 31, 251, 242, 206, 90, 237, + 61, 206, 50, 31, 251, 242, 241, 139, 237, 61, 221, 139, 31, 251, 242, + 208, 64, 237, 105, 221, 139, 31, 112, 167, 54, 31, 112, 167, 2, 251, 109, + 19, 31, 120, 206, 72, 54, 31, 126, 214, 86, 54, 31, 200, 49, 54, 31, 206, + 252, 54, 31, 239, 163, 54, 31, 217, 136, 54, 31, 120, 217, 135, 54, 31, + 126, 217, 135, 54, 31, 236, 229, 217, 135, 54, 31, 237, 61, 217, 135, 54, + 31, 222, 16, 54, 31, 225, 201, 249, 65, 54, 31, 224, 150, 54, 31, 217, 0, + 54, 31, 200, 172, 54, 31, 250, 195, 54, 31, 250, 210, 54, 31, 235, 83, + 54, 31, 205, 35, 249, 65, 54, 31, 199, 82, 54, 31, 112, 214, 88, 54, 31, + 209, 131, 54, 31, 228, 98, 54, 218, 235, 54, 212, 240, 210, 126, 54, 212, + 240, 203, 254, 54, 212, 240, 210, 159, 54, 212, 240, 210, 124, 54, 212, + 240, 241, 26, 210, 124, 54, 212, 240, 209, 154, 54, 212, 240, 241, 135, + 54, 212, 240, 214, 71, 54, 212, 240, 210, 143, 54, 212, 240, 239, 117, + 54, 212, 240, 250, 189, 54, 212, 240, 247, 51, 54, 31, 16, 206, 222, 213, + 90, 215, 240, 241, 3, 2, 216, 63, 215, 240, 241, 3, 2, 215, 115, 234, + 136, 215, 240, 241, 3, 2, 206, 225, 234, 136, 215, 240, 241, 3, 2, 247, + 138, 215, 240, 241, 3, 2, 246, 227, 215, 240, 241, 3, 2, 200, 250, 215, + 240, 241, 3, 2, 234, 107, 215, 240, 241, 3, 2, 236, 38, 215, 240, 241, 3, + 2, 206, 13, 215, 240, 241, 3, 2, 48, 215, 240, 241, 3, 2, 248, 85, 215, + 240, 241, 3, 2, 210, 30, 215, 240, 241, 3, 2, 246, 97, 215, 240, 241, 3, + 2, 222, 179, 215, 240, 241, 3, 2, 222, 124, 215, 240, 241, 3, 2, 211, + 239, 215, 240, 241, 3, 2, 224, 205, 215, 240, 241, 3, 2, 248, 106, 215, + 240, 241, 3, 2, 247, 122, 215, 128, 215, 240, 241, 3, 2, 240, 195, 215, + 240, 241, 3, 2, 246, 76, 215, 240, 241, 3, 2, 209, 63, 215, 240, 241, 3, + 2, 246, 77, 215, 240, 241, 3, 2, 248, 249, 215, 240, 241, 3, 2, 210, 17, + 215, 240, 241, 3, 2, 233, 124, 215, 240, 241, 3, 2, 234, 72, 215, 240, + 241, 3, 2, 248, 17, 225, 16, 215, 240, 241, 3, 2, 247, 111, 215, 240, + 241, 3, 2, 213, 216, 215, 240, 241, 3, 2, 239, 24, 215, 240, 241, 3, 2, + 239, 168, 215, 240, 241, 3, 2, 204, 199, 215, 240, 241, 3, 2, 248, 252, + 215, 240, 241, 3, 2, 215, 129, 205, 108, 215, 240, 241, 3, 2, 202, 215, + 215, 240, 241, 3, 2, 216, 131, 215, 240, 241, 3, 2, 212, 231, 215, 240, + 241, 3, 2, 224, 189, 215, 240, 241, 3, 2, 216, 236, 249, 129, 215, 240, + 241, 3, 2, 237, 20, 215, 240, 241, 3, 2, 235, 75, 215, 240, 241, 3, 2, + 208, 65, 215, 240, 241, 3, 2, 4, 250, 113, 215, 240, 241, 3, 2, 201, 74, + 249, 84, 215, 240, 241, 3, 2, 38, 217, 138, 97, 224, 0, 1, 62, 224, 0, 1, + 72, 224, 0, 1, 250, 103, 224, 0, 1, 248, 201, 224, 0, 1, 236, 156, 224, + 0, 1, 242, 153, 224, 0, 1, 70, 224, 0, 1, 201, 147, 224, 0, 1, 199, 157, + 224, 0, 1, 206, 124, 224, 0, 1, 227, 251, 224, 0, 1, 227, 118, 224, 0, 1, + 214, 167, 224, 0, 1, 156, 224, 0, 1, 223, 243, 224, 0, 1, 220, 214, 224, + 0, 1, 221, 141, 224, 0, 1, 219, 22, 224, 0, 1, 66, 224, 0, 1, 216, 226, + 224, 0, 1, 226, 110, 224, 0, 1, 146, 224, 0, 1, 212, 122, 224, 0, 1, 207, + 83, 224, 0, 1, 205, 0, 224, 0, 1, 251, 85, 224, 0, 1, 238, 179, 224, 0, + 1, 234, 247, 224, 0, 1, 200, 195, 247, 128, 1, 62, 247, 128, 1, 216, 212, + 247, 128, 1, 242, 153, 247, 128, 1, 156, 247, 128, 1, 203, 180, 247, 128, + 1, 146, 247, 128, 1, 225, 44, 247, 128, 1, 254, 147, 247, 128, 1, 214, + 167, 247, 128, 1, 250, 103, 247, 128, 1, 223, 243, 247, 128, 1, 74, 247, + 128, 1, 242, 60, 247, 128, 1, 207, 83, 247, 128, 1, 210, 116, 247, 128, + 1, 210, 115, 247, 128, 1, 212, 122, 247, 128, 1, 247, 222, 247, 128, 1, + 66, 247, 128, 1, 219, 22, 247, 128, 1, 200, 195, 247, 128, 1, 220, 214, + 247, 128, 1, 204, 255, 247, 128, 1, 216, 226, 247, 128, 1, 208, 182, 247, + 128, 1, 70, 247, 128, 1, 72, 247, 128, 1, 203, 177, 247, 128, 1, 227, + 118, 247, 128, 1, 227, 109, 247, 128, 1, 220, 77, 247, 128, 1, 203, 182, + 247, 128, 1, 236, 156, 247, 128, 1, 236, 91, 247, 128, 1, 208, 123, 247, + 128, 1, 208, 122, 247, 128, 1, 219, 255, 247, 128, 1, 228, 151, 247, 128, + 1, 247, 221, 247, 128, 1, 205, 0, 247, 128, 1, 203, 179, 247, 128, 1, + 212, 216, 247, 128, 1, 222, 115, 247, 128, 1, 222, 114, 247, 128, 1, 222, + 113, 247, 128, 1, 222, 112, 247, 128, 1, 225, 43, 247, 128, 1, 239, 28, + 247, 128, 1, 203, 178, 85, 238, 131, 206, 49, 81, 85, 238, 131, 17, 102, + 85, 238, 131, 17, 105, 85, 238, 131, 17, 147, 85, 238, 131, 17, 149, 85, + 238, 131, 17, 164, 85, 238, 131, 17, 187, 85, 238, 131, 17, 210, 135, 85, + 238, 131, 17, 192, 85, 238, 131, 17, 219, 113, 85, 238, 131, 41, 206, + 166, 85, 238, 131, 41, 204, 159, 85, 238, 131, 41, 206, 67, 85, 238, 131, + 41, 236, 235, 85, 238, 131, 41, 237, 104, 85, 238, 131, 41, 209, 92, 85, + 238, 131, 41, 210, 129, 85, 238, 131, 41, 238, 222, 85, 238, 131, 41, + 219, 108, 85, 238, 131, 41, 112, 233, 82, 85, 238, 131, 41, 120, 233, 82, + 85, 238, 131, 41, 126, 233, 82, 85, 238, 131, 41, 236, 229, 233, 82, 85, + 238, 131, 41, 237, 61, 233, 82, 85, 238, 131, 41, 209, 106, 233, 82, 85, + 238, 131, 41, 210, 136, 233, 82, 85, 238, 131, 41, 238, 232, 233, 82, 85, + 238, 131, 41, 219, 114, 233, 82, 40, 39, 1, 62, 40, 39, 1, 249, 8, 40, + 39, 1, 227, 8, 40, 39, 1, 241, 175, 40, 39, 1, 72, 40, 39, 1, 203, 59, + 40, 39, 1, 199, 89, 40, 39, 1, 234, 139, 40, 39, 1, 206, 106, 40, 39, 1, + 70, 40, 39, 1, 161, 40, 39, 1, 238, 209, 40, 39, 1, 238, 190, 40, 39, 1, + 238, 179, 40, 39, 1, 238, 94, 40, 39, 1, 74, 40, 39, 1, 216, 73, 40, 39, + 1, 210, 65, 40, 39, 1, 226, 15, 40, 39, 1, 238, 115, 40, 39, 1, 238, 104, + 40, 39, 1, 206, 201, 40, 39, 1, 66, 40, 39, 1, 238, 212, 40, 39, 1, 215, + 232, 40, 39, 1, 226, 192, 40, 39, 1, 238, 248, 40, 39, 1, 238, 106, 40, + 39, 1, 247, 8, 40, 39, 1, 228, 151, 40, 39, 1, 203, 182, 40, 39, 1, 238, + 87, 40, 39, 218, 93, 102, 40, 39, 218, 93, 164, 40, 39, 218, 93, 206, + 166, 40, 39, 218, 93, 237, 104, 235, 93, 1, 251, 179, 235, 93, 1, 249, + 101, 235, 93, 1, 235, 158, 235, 93, 1, 242, 39, 235, 93, 1, 251, 175, + 235, 93, 1, 214, 150, 235, 93, 1, 228, 7, 235, 93, 1, 234, 226, 235, 93, + 1, 206, 63, 235, 93, 1, 238, 220, 235, 93, 1, 225, 238, 235, 93, 1, 225, + 153, 235, 93, 1, 222, 172, 235, 93, 1, 220, 112, 235, 93, 1, 227, 220, + 235, 93, 1, 203, 200, 235, 93, 1, 216, 187, 235, 93, 1, 219, 108, 235, + 93, 1, 213, 228, 235, 93, 1, 211, 242, 235, 93, 1, 206, 180, 235, 93, 1, + 201, 10, 235, 93, 1, 237, 175, 235, 93, 1, 228, 155, 235, 93, 1, 233, 66, + 235, 93, 1, 217, 10, 235, 93, 1, 219, 114, 233, 82, 40, 216, 18, 1, 251, + 85, 40, 216, 18, 1, 248, 3, 40, 216, 18, 1, 236, 73, 40, 216, 18, 1, 240, + 199, 40, 216, 18, 1, 72, 40, 216, 18, 1, 199, 59, 40, 216, 18, 1, 239, + 85, 40, 216, 18, 1, 199, 96, 40, 216, 18, 1, 239, 83, 40, 216, 18, 1, 70, + 40, 216, 18, 1, 226, 77, 40, 216, 18, 1, 225, 12, 40, 216, 18, 1, 222, + 38, 40, 216, 18, 1, 220, 22, 40, 216, 18, 1, 202, 178, 40, 216, 18, 1, + 216, 60, 40, 216, 18, 1, 213, 153, 40, 216, 18, 1, 209, 161, 40, 216, 18, + 1, 207, 8, 40, 216, 18, 1, 66, 40, 216, 18, 1, 246, 245, 40, 216, 18, 1, + 210, 1, 40, 216, 18, 1, 210, 67, 40, 216, 18, 1, 199, 213, 40, 216, 18, + 1, 200, 29, 40, 216, 18, 1, 74, 40, 216, 18, 1, 217, 63, 40, 216, 18, 1, + 238, 248, 40, 216, 18, 1, 144, 40, 216, 18, 1, 205, 10, 40, 216, 18, 1, + 203, 47, 40, 216, 18, 1, 200, 33, 40, 216, 18, 1, 200, 31, 40, 216, 18, + 1, 200, 65, 40, 216, 18, 1, 228, 178, 40, 216, 18, 1, 199, 211, 40, 216, + 18, 1, 183, 40, 216, 18, 1, 232, 240, 38, 40, 216, 18, 1, 251, 85, 38, + 40, 216, 18, 1, 240, 199, 38, 40, 216, 18, 1, 199, 96, 38, 40, 216, 18, + 1, 220, 22, 38, 40, 216, 18, 1, 209, 161, 204, 26, 1, 251, 116, 204, 26, + 1, 248, 208, 204, 26, 1, 236, 61, 204, 26, 1, 226, 207, 204, 26, 1, 241, + 136, 204, 26, 1, 233, 207, 204, 26, 1, 201, 0, 204, 26, 1, 199, 80, 204, + 26, 1, 233, 116, 204, 26, 1, 206, 146, 204, 26, 1, 199, 234, 204, 26, 1, + 227, 86, 204, 26, 1, 210, 21, 204, 26, 1, 225, 87, 204, 26, 1, 222, 47, + 204, 26, 1, 241, 96, 204, 26, 1, 218, 89, 204, 26, 1, 199, 3, 204, 26, 1, + 212, 18, 204, 26, 1, 251, 171, 204, 26, 1, 214, 224, 204, 26, 1, 212, 55, + 204, 26, 1, 214, 102, 204, 26, 1, 213, 207, 204, 26, 1, 206, 110, 204, + 26, 1, 235, 194, 204, 26, 1, 138, 204, 26, 1, 70, 204, 26, 1, 66, 204, + 26, 1, 208, 134, 204, 26, 200, 238, 240, 239, 40, 216, 12, 2, 62, 40, + 216, 12, 2, 70, 40, 216, 12, 2, 66, 40, 216, 12, 2, 161, 40, 216, 12, 2, + 226, 15, 40, 216, 12, 2, 236, 89, 40, 216, 12, 2, 235, 50, 40, 216, 12, + 2, 200, 181, 40, 216, 12, 2, 247, 190, 40, 216, 12, 2, 227, 248, 40, 216, + 12, 2, 227, 207, 40, 216, 12, 2, 207, 36, 40, 216, 12, 2, 204, 215, 40, + 216, 12, 2, 242, 58, 40, 216, 12, 2, 241, 76, 40, 216, 12, 2, 239, 137, + 40, 216, 12, 2, 206, 122, 40, 216, 12, 2, 172, 40, 216, 12, 2, 249, 136, + 40, 216, 12, 2, 237, 195, 40, 216, 12, 2, 188, 40, 216, 12, 2, 218, 133, + 40, 216, 12, 2, 178, 40, 216, 12, 2, 221, 211, 40, 216, 12, 2, 221, 41, + 40, 216, 12, 2, 183, 40, 216, 12, 2, 203, 90, 40, 216, 12, 2, 202, 234, + 40, 216, 12, 2, 213, 252, 40, 216, 12, 2, 212, 175, 40, 216, 12, 2, 194, + 40, 216, 12, 2, 212, 64, 40, 216, 12, 2, 199, 114, 40, 216, 12, 2, 210, + 114, 40, 216, 12, 2, 208, 179, 40, 216, 12, 2, 144, 40, 216, 12, 2, 250, + 133, 40, 216, 12, 2, 250, 132, 40, 216, 12, 2, 250, 131, 40, 216, 12, 2, + 200, 152, 40, 216, 12, 2, 242, 35, 40, 216, 12, 2, 242, 34, 40, 216, 12, + 2, 249, 111, 40, 216, 12, 2, 247, 242, 40, 216, 12, 200, 238, 240, 239, + 40, 216, 12, 41, 102, 40, 216, 12, 41, 105, 40, 216, 12, 41, 206, 166, + 40, 216, 12, 41, 204, 159, 40, 216, 12, 41, 233, 82, 241, 116, 6, 1, 168, + 70, 241, 116, 6, 1, 168, 72, 241, 116, 6, 1, 168, 62, 241, 116, 6, 1, + 168, 251, 185, 241, 116, 6, 1, 168, 74, 241, 116, 6, 1, 168, 217, 63, + 241, 116, 6, 1, 209, 250, 70, 241, 116, 6, 1, 209, 250, 72, 241, 116, 6, + 1, 209, 250, 62, 241, 116, 6, 1, 209, 250, 251, 185, 241, 116, 6, 1, 209, + 250, 74, 241, 116, 6, 1, 209, 250, 217, 63, 241, 116, 6, 1, 250, 112, + 241, 116, 6, 1, 216, 238, 241, 116, 6, 1, 200, 216, 241, 116, 6, 1, 200, + 48, 241, 116, 6, 1, 234, 247, 241, 116, 6, 1, 216, 61, 241, 116, 6, 1, + 248, 252, 241, 116, 6, 1, 206, 190, 241, 116, 6, 1, 241, 161, 241, 116, + 6, 1, 247, 4, 241, 116, 6, 1, 227, 225, 241, 116, 6, 1, 227, 15, 241, + 116, 6, 1, 236, 36, 241, 116, 6, 1, 238, 248, 241, 116, 6, 1, 203, 54, + 241, 116, 6, 1, 238, 74, 241, 116, 6, 1, 206, 104, 241, 116, 6, 1, 238, + 104, 241, 116, 6, 1, 199, 87, 241, 116, 6, 1, 238, 94, 241, 116, 6, 1, + 199, 67, 241, 116, 6, 1, 238, 115, 241, 116, 6, 1, 238, 209, 241, 116, 6, + 1, 238, 190, 241, 116, 6, 1, 238, 179, 241, 116, 6, 1, 238, 165, 241, + 116, 6, 1, 217, 105, 241, 116, 6, 1, 238, 51, 241, 116, 4, 1, 168, 70, + 241, 116, 4, 1, 168, 72, 241, 116, 4, 1, 168, 62, 241, 116, 4, 1, 168, + 251, 185, 241, 116, 4, 1, 168, 74, 241, 116, 4, 1, 168, 217, 63, 241, + 116, 4, 1, 209, 250, 70, 241, 116, 4, 1, 209, 250, 72, 241, 116, 4, 1, + 209, 250, 62, 241, 116, 4, 1, 209, 250, 251, 185, 241, 116, 4, 1, 209, + 250, 74, 241, 116, 4, 1, 209, 250, 217, 63, 241, 116, 4, 1, 250, 112, + 241, 116, 4, 1, 216, 238, 241, 116, 4, 1, 200, 216, 241, 116, 4, 1, 200, + 48, 241, 116, 4, 1, 234, 247, 241, 116, 4, 1, 216, 61, 241, 116, 4, 1, + 248, 252, 241, 116, 4, 1, 206, 190, 241, 116, 4, 1, 241, 161, 241, 116, + 4, 1, 247, 4, 241, 116, 4, 1, 227, 225, 241, 116, 4, 1, 227, 15, 241, + 116, 4, 1, 236, 36, 241, 116, 4, 1, 238, 248, 241, 116, 4, 1, 203, 54, + 241, 116, 4, 1, 238, 74, 241, 116, 4, 1, 206, 104, 241, 116, 4, 1, 238, + 104, 241, 116, 4, 1, 199, 87, 241, 116, 4, 1, 238, 94, 241, 116, 4, 1, + 199, 67, 241, 116, 4, 1, 238, 115, 241, 116, 4, 1, 238, 209, 241, 116, 4, + 1, 238, 190, 241, 116, 4, 1, 238, 179, 241, 116, 4, 1, 238, 165, 241, + 116, 4, 1, 217, 105, 241, 116, 4, 1, 238, 51, 210, 72, 1, 216, 58, 210, + 72, 1, 205, 144, 210, 72, 1, 226, 159, 210, 72, 1, 237, 140, 210, 72, 1, + 206, 79, 210, 72, 1, 209, 29, 210, 72, 1, 207, 204, 210, 72, 1, 246, 184, + 210, 72, 1, 200, 50, 210, 72, 1, 233, 79, 210, 72, 1, 248, 187, 210, 72, + 1, 241, 174, 210, 72, 1, 236, 75, 210, 72, 1, 202, 173, 210, 72, 1, 206, + 85, 210, 72, 1, 199, 12, 210, 72, 1, 222, 74, 210, 72, 1, 227, 145, 210, + 72, 1, 200, 254, 210, 72, 1, 234, 235, 210, 72, 1, 224, 94, 210, 72, 1, + 221, 165, 210, 72, 1, 228, 158, 210, 72, 1, 238, 246, 210, 72, 1, 250, + 181, 210, 72, 1, 251, 225, 210, 72, 1, 217, 78, 210, 72, 1, 200, 241, + 210, 72, 1, 216, 254, 210, 72, 1, 251, 185, 210, 72, 1, 212, 254, 210, + 72, 1, 218, 89, 210, 72, 1, 239, 10, 210, 72, 1, 251, 190, 210, 72, 1, + 232, 231, 210, 72, 1, 203, 228, 210, 72, 1, 217, 144, 210, 72, 1, 217, + 55, 210, 72, 1, 217, 103, 210, 72, 1, 250, 115, 210, 72, 1, 250, 229, + 210, 72, 1, 217, 33, 210, 72, 1, 251, 166, 210, 72, 1, 238, 108, 210, 72, + 1, 250, 207, 210, 72, 1, 239, 21, 210, 72, 1, 232, 239, 210, 72, 1, 200, + 15, 217, 12, 1, 251, 142, 217, 12, 1, 249, 136, 217, 12, 1, 207, 36, 217, + 12, 1, 227, 248, 217, 12, 1, 200, 181, 217, 12, 1, 226, 207, 217, 12, 1, + 241, 160, 217, 12, 1, 213, 252, 217, 12, 1, 212, 64, 217, 12, 1, 210, 27, + 217, 12, 1, 241, 100, 217, 12, 1, 247, 101, 217, 12, 1, 236, 89, 217, 12, + 1, 237, 195, 217, 12, 1, 214, 157, 217, 12, 1, 227, 102, 217, 12, 1, 225, + 171, 217, 12, 1, 221, 179, 217, 12, 1, 218, 73, 217, 12, 1, 201, 72, 217, + 12, 1, 144, 217, 12, 1, 183, 217, 12, 1, 62, 217, 12, 1, 72, 217, 12, 1, + 70, 217, 12, 1, 74, 217, 12, 1, 66, 217, 12, 1, 252, 138, 217, 12, 1, + 238, 255, 217, 12, 1, 217, 63, 217, 12, 17, 199, 81, 217, 12, 17, 102, + 217, 12, 17, 105, 217, 12, 17, 147, 217, 12, 17, 149, 217, 12, 17, 164, + 217, 12, 17, 187, 217, 12, 17, 210, 135, 217, 12, 17, 192, 217, 12, 17, + 219, 113, 217, 14, 6, 1, 62, 217, 14, 6, 1, 251, 176, 217, 14, 6, 1, 251, + 171, 217, 14, 6, 1, 251, 185, 217, 14, 6, 1, 248, 72, 217, 14, 6, 1, 247, + 37, 217, 14, 6, 1, 238, 240, 217, 14, 6, 1, 72, 217, 14, 6, 1, 238, 221, + 217, 14, 6, 1, 144, 217, 14, 6, 1, 233, 36, 217, 14, 6, 1, 70, 217, 14, + 6, 1, 161, 217, 14, 6, 1, 238, 239, 217, 14, 6, 1, 225, 203, 217, 14, 6, + 1, 194, 217, 14, 6, 1, 178, 217, 14, 6, 1, 188, 217, 14, 6, 1, 74, 217, + 14, 6, 1, 217, 102, 217, 14, 6, 1, 172, 217, 14, 6, 1, 238, 238, 217, 14, + 6, 1, 212, 64, 217, 14, 6, 1, 210, 114, 217, 14, 6, 1, 207, 36, 217, 14, + 6, 1, 238, 237, 217, 14, 6, 1, 205, 32, 217, 14, 6, 1, 238, 236, 217, 14, + 6, 1, 205, 22, 217, 14, 6, 1, 241, 100, 217, 14, 6, 1, 66, 217, 14, 6, 1, + 201, 114, 217, 14, 6, 1, 226, 207, 217, 14, 6, 1, 235, 199, 217, 14, 6, + 1, 199, 114, 217, 14, 6, 1, 199, 77, 217, 14, 4, 1, 62, 217, 14, 4, 1, + 251, 176, 217, 14, 4, 1, 251, 171, 217, 14, 4, 1, 251, 185, 217, 14, 4, + 1, 248, 72, 217, 14, 4, 1, 247, 37, 217, 14, 4, 1, 238, 240, 217, 14, 4, + 1, 72, 217, 14, 4, 1, 238, 221, 217, 14, 4, 1, 144, 217, 14, 4, 1, 233, + 36, 217, 14, 4, 1, 70, 217, 14, 4, 1, 161, 217, 14, 4, 1, 238, 239, 217, + 14, 4, 1, 225, 203, 217, 14, 4, 1, 194, 217, 14, 4, 1, 178, 217, 14, 4, + 1, 188, 217, 14, 4, 1, 74, 217, 14, 4, 1, 217, 102, 217, 14, 4, 1, 172, + 217, 14, 4, 1, 238, 238, 217, 14, 4, 1, 212, 64, 217, 14, 4, 1, 210, 114, + 217, 14, 4, 1, 207, 36, 217, 14, 4, 1, 238, 237, 217, 14, 4, 1, 205, 32, + 217, 14, 4, 1, 238, 236, 217, 14, 4, 1, 205, 22, 217, 14, 4, 1, 241, 100, + 217, 14, 4, 1, 66, 217, 14, 4, 1, 201, 114, 217, 14, 4, 1, 226, 207, 217, + 14, 4, 1, 235, 199, 217, 14, 4, 1, 199, 114, 217, 14, 4, 1, 199, 77, 238, + 205, 1, 62, 238, 205, 1, 249, 8, 238, 205, 1, 247, 76, 238, 205, 1, 247, + 8, 238, 205, 1, 241, 175, 238, 205, 1, 220, 67, 238, 205, 1, 241, 91, + 238, 205, 1, 238, 234, 238, 205, 1, 72, 238, 205, 1, 237, 147, 238, 205, + 1, 236, 15, 238, 205, 1, 235, 132, 238, 205, 1, 234, 139, 238, 205, 1, + 70, 238, 205, 1, 227, 227, 238, 205, 1, 227, 8, 238, 205, 1, 225, 40, + 238, 205, 1, 224, 134, 238, 205, 1, 222, 76, 238, 205, 1, 220, 34, 238, + 205, 1, 188, 238, 205, 1, 219, 91, 238, 205, 1, 74, 238, 205, 1, 216, 73, + 238, 205, 1, 214, 139, 238, 205, 1, 213, 190, 238, 205, 1, 212, 210, 238, + 205, 1, 211, 202, 238, 205, 1, 210, 65, 238, 205, 1, 206, 201, 238, 205, + 1, 206, 106, 238, 205, 1, 66, 238, 205, 1, 203, 59, 238, 205, 1, 200, + 175, 238, 205, 1, 200, 123, 238, 205, 1, 199, 89, 238, 205, 1, 199, 68, + 238, 205, 1, 235, 185, 238, 205, 1, 235, 191, 238, 205, 1, 226, 192, 247, + 108, 251, 143, 1, 251, 111, 247, 108, 251, 143, 1, 248, 210, 247, 108, + 251, 143, 1, 235, 149, 247, 108, 251, 143, 1, 241, 240, 247, 108, 251, + 143, 1, 239, 9, 247, 108, 251, 143, 1, 199, 99, 247, 108, 251, 143, 1, + 238, 14, 247, 108, 251, 143, 1, 199, 62, 247, 108, 251, 143, 1, 206, 227, + 247, 108, 251, 143, 1, 247, 37, 247, 108, 251, 143, 1, 199, 222, 247, + 108, 251, 143, 1, 199, 77, 247, 108, 251, 143, 1, 228, 34, 247, 108, 251, + 143, 1, 210, 114, 247, 108, 251, 143, 1, 225, 80, 247, 108, 251, 143, 1, + 228, 46, 247, 108, 251, 143, 1, 200, 171, 247, 108, 251, 143, 1, 239, + 101, 247, 108, 251, 143, 1, 247, 135, 247, 108, 251, 143, 1, 227, 208, + 247, 108, 251, 143, 1, 227, 47, 247, 108, 251, 143, 1, 223, 252, 247, + 108, 251, 143, 1, 234, 86, 247, 108, 251, 143, 1, 214, 140, 247, 108, + 251, 143, 1, 251, 30, 247, 108, 251, 143, 1, 246, 201, 247, 108, 251, + 143, 1, 246, 236, 247, 108, 251, 143, 1, 242, 165, 247, 108, 251, 143, 1, + 222, 161, 247, 108, 251, 143, 1, 214, 144, 247, 108, 251, 143, 1, 218, + 200, 247, 108, 251, 143, 1, 239, 78, 247, 108, 251, 143, 1, 210, 97, 247, + 108, 251, 143, 1, 227, 228, 247, 108, 251, 143, 1, 217, 78, 247, 108, + 251, 143, 1, 204, 132, 247, 108, 251, 143, 1, 237, 170, 247, 108, 251, + 143, 1, 239, 91, 247, 108, 251, 143, 1, 247, 14, 247, 108, 251, 143, 1, + 216, 47, 247, 108, 251, 143, 1, 235, 175, 247, 108, 251, 143, 1, 213, + 204, 247, 108, 251, 143, 1, 210, 123, 247, 108, 251, 143, 1, 202, 236, + 247, 108, 251, 143, 1, 205, 206, 247, 108, 251, 143, 1, 209, 229, 247, + 108, 251, 143, 1, 228, 5, 247, 108, 251, 143, 1, 242, 166, 247, 108, 251, + 143, 1, 247, 101, 247, 108, 251, 143, 1, 200, 55, 247, 108, 251, 143, 1, + 215, 139, 247, 108, 251, 143, 1, 226, 125, 247, 108, 251, 143, 246, 143, + 81, 30, 35, 2, 252, 88, 30, 35, 2, 252, 87, 30, 35, 2, 252, 86, 30, 35, + 2, 252, 85, 30, 35, 2, 252, 84, 30, 35, 2, 252, 83, 30, 35, 2, 252, 82, + 30, 35, 2, 252, 81, 30, 35, 2, 252, 80, 30, 35, 2, 252, 79, 30, 35, 2, + 252, 78, 30, 35, 2, 252, 77, 30, 35, 2, 252, 76, 30, 35, 2, 252, 75, 30, + 35, 2, 252, 74, 30, 35, 2, 252, 73, 30, 35, 2, 252, 72, 30, 35, 2, 252, + 71, 30, 35, 2, 252, 70, 30, 35, 2, 252, 69, 30, 35, 2, 252, 68, 30, 35, + 2, 252, 67, 30, 35, 2, 252, 66, 30, 35, 2, 252, 65, 30, 35, 2, 252, 64, + 30, 35, 2, 252, 63, 30, 35, 2, 252, 62, 30, 35, 2, 255, 96, 30, 35, 2, + 252, 61, 30, 35, 2, 252, 60, 30, 35, 2, 252, 59, 30, 35, 2, 252, 58, 30, + 35, 2, 252, 57, 30, 35, 2, 252, 56, 30, 35, 2, 252, 55, 30, 35, 2, 252, + 54, 30, 35, 2, 252, 53, 30, 35, 2, 252, 52, 30, 35, 2, 252, 51, 30, 35, + 2, 252, 50, 30, 35, 2, 252, 49, 30, 35, 2, 252, 48, 30, 35, 2, 252, 47, + 30, 35, 2, 252, 46, 30, 35, 2, 252, 45, 30, 35, 2, 252, 44, 30, 35, 2, + 252, 43, 30, 35, 2, 252, 42, 30, 35, 2, 252, 41, 30, 35, 2, 252, 40, 30, + 35, 2, 252, 39, 30, 35, 2, 252, 38, 30, 35, 2, 252, 37, 30, 35, 2, 252, + 36, 30, 35, 2, 252, 35, 30, 35, 2, 252, 34, 30, 35, 2, 252, 33, 30, 35, + 2, 252, 32, 30, 35, 2, 252, 31, 30, 35, 2, 252, 30, 30, 35, 2, 252, 29, + 30, 35, 2, 252, 28, 30, 35, 2, 252, 27, 30, 35, 2, 252, 26, 30, 35, 2, + 252, 25, 30, 35, 2, 252, 24, 30, 35, 2, 252, 23, 30, 35, 2, 252, 22, 30, + 35, 2, 252, 21, 30, 35, 2, 252, 20, 30, 35, 2, 252, 19, 30, 35, 2, 255, + 9, 30, 35, 2, 252, 18, 30, 35, 2, 252, 17, 30, 35, 2, 254, 230, 30, 35, + 2, 252, 16, 30, 35, 2, 252, 15, 30, 35, 2, 252, 14, 30, 35, 2, 252, 13, + 30, 35, 2, 254, 217, 30, 35, 2, 252, 12, 30, 35, 2, 252, 11, 30, 35, 2, + 252, 10, 30, 35, 2, 252, 9, 30, 35, 2, 252, 8, 30, 35, 2, 254, 33, 30, + 35, 2, 254, 32, 30, 35, 2, 254, 31, 30, 35, 2, 254, 30, 30, 35, 2, 254, + 29, 30, 35, 2, 254, 28, 30, 35, 2, 254, 27, 30, 35, 2, 254, 26, 30, 35, + 2, 254, 24, 30, 35, 2, 254, 23, 30, 35, 2, 254, 22, 30, 35, 2, 254, 21, + 30, 35, 2, 254, 20, 30, 35, 2, 254, 19, 30, 35, 2, 254, 17, 30, 35, 2, + 254, 16, 30, 35, 2, 254, 15, 30, 35, 2, 254, 14, 30, 35, 2, 254, 13, 30, + 35, 2, 254, 12, 30, 35, 2, 254, 11, 30, 35, 2, 254, 10, 30, 35, 2, 254, + 9, 30, 35, 2, 254, 8, 30, 35, 2, 254, 7, 30, 35, 2, 254, 6, 30, 35, 2, + 254, 5, 30, 35, 2, 254, 4, 30, 35, 2, 254, 3, 30, 35, 2, 254, 2, 30, 35, + 2, 254, 1, 30, 35, 2, 254, 0, 30, 35, 2, 253, 255, 30, 35, 2, 253, 253, + 30, 35, 2, 253, 252, 30, 35, 2, 253, 251, 30, 35, 2, 253, 247, 30, 35, 2, + 253, 246, 30, 35, 2, 253, 245, 30, 35, 2, 253, 244, 30, 35, 2, 253, 240, + 30, 35, 2, 253, 239, 30, 35, 2, 253, 238, 30, 35, 2, 253, 237, 30, 35, 2, + 253, 236, 30, 35, 2, 253, 235, 30, 35, 2, 253, 234, 30, 35, 2, 253, 233, + 30, 35, 2, 253, 232, 30, 35, 2, 253, 231, 30, 35, 2, 253, 230, 30, 35, 2, + 253, 229, 30, 35, 2, 253, 228, 30, 35, 2, 253, 227, 30, 35, 2, 253, 226, + 30, 35, 2, 253, 225, 30, 35, 2, 253, 224, 30, 35, 2, 253, 223, 30, 35, 2, + 253, 222, 30, 35, 2, 253, 221, 30, 35, 2, 253, 220, 30, 35, 2, 253, 219, + 30, 35, 2, 253, 218, 30, 35, 2, 253, 216, 30, 35, 2, 253, 215, 30, 35, 2, + 253, 214, 30, 35, 2, 253, 213, 30, 35, 2, 253, 212, 30, 35, 2, 253, 210, + 30, 35, 2, 253, 209, 30, 35, 2, 253, 208, 30, 35, 2, 253, 207, 30, 35, 2, + 253, 205, 30, 35, 2, 253, 204, 30, 35, 2, 253, 203, 30, 35, 2, 253, 169, + 30, 35, 2, 253, 167, 30, 35, 2, 253, 165, 30, 35, 2, 253, 163, 30, 35, 2, + 253, 161, 30, 35, 2, 253, 159, 30, 35, 2, 253, 157, 30, 35, 2, 253, 155, + 30, 35, 2, 253, 153, 30, 35, 2, 253, 151, 30, 35, 2, 253, 149, 30, 35, 2, + 253, 146, 30, 35, 2, 253, 144, 30, 35, 2, 253, 142, 30, 35, 2, 253, 140, + 30, 35, 2, 253, 138, 30, 35, 2, 253, 136, 30, 35, 2, 253, 134, 30, 35, 2, + 253, 132, 30, 35, 2, 253, 50, 30, 35, 2, 253, 49, 30, 35, 2, 253, 48, 30, + 35, 2, 253, 47, 30, 35, 2, 253, 46, 30, 35, 2, 253, 45, 30, 35, 2, 253, + 43, 30, 35, 2, 253, 42, 30, 35, 2, 253, 41, 30, 35, 2, 253, 40, 30, 35, + 2, 253, 39, 30, 35, 2, 253, 38, 30, 35, 2, 253, 36, 30, 35, 2, 253, 35, + 30, 35, 2, 253, 31, 30, 35, 2, 253, 30, 30, 35, 2, 253, 28, 30, 35, 2, + 253, 27, 30, 35, 2, 253, 26, 30, 35, 2, 253, 25, 30, 35, 2, 253, 24, 30, + 35, 2, 253, 23, 30, 35, 2, 253, 22, 30, 35, 2, 253, 21, 30, 35, 2, 253, + 20, 30, 35, 2, 253, 19, 30, 35, 2, 253, 18, 30, 35, 2, 253, 17, 30, 35, + 2, 253, 16, 30, 35, 2, 253, 15, 30, 35, 2, 253, 14, 30, 35, 2, 253, 13, + 30, 35, 2, 253, 12, 30, 35, 2, 253, 11, 30, 35, 2, 253, 10, 30, 35, 2, + 253, 9, 30, 35, 2, 253, 8, 30, 35, 2, 253, 7, 30, 35, 2, 253, 6, 30, 35, + 2, 253, 5, 30, 35, 2, 253, 4, 30, 35, 2, 253, 3, 30, 35, 2, 253, 2, 30, + 35, 2, 253, 1, 30, 35, 2, 253, 0, 30, 35, 2, 252, 255, 30, 35, 2, 252, + 254, 30, 35, 2, 252, 253, 30, 35, 2, 252, 252, 30, 35, 2, 252, 251, 30, + 35, 2, 252, 250, 30, 35, 2, 252, 249, 30, 35, 2, 252, 248, 30, 35, 2, + 252, 247, 30, 35, 2, 252, 246, 30, 35, 2, 252, 245, 30, 35, 2, 252, 244, + 30, 35, 2, 252, 243, 30, 35, 2, 252, 242, 30, 35, 2, 252, 241, 30, 35, 2, + 252, 240, 30, 35, 2, 252, 239, 30, 35, 2, 252, 238, 30, 35, 2, 252, 237, + 30, 35, 2, 252, 236, 30, 35, 2, 252, 235, 30, 35, 2, 252, 234, 30, 35, 2, + 252, 233, 30, 35, 2, 252, 232, 30, 35, 2, 252, 231, 30, 35, 2, 252, 230, + 30, 35, 2, 252, 229, 30, 35, 2, 252, 228, 30, 35, 2, 252, 227, 30, 35, 2, + 252, 226, 30, 35, 2, 252, 225, 30, 35, 2, 252, 224, 30, 35, 2, 252, 223, + 30, 35, 2, 252, 222, 30, 35, 2, 252, 221, 30, 35, 2, 252, 220, 30, 35, 2, + 252, 219, 30, 35, 2, 252, 218, 30, 35, 2, 252, 217, 30, 35, 2, 252, 216, + 30, 35, 2, 252, 215, 30, 35, 2, 252, 214, 30, 35, 2, 252, 213, 30, 35, 2, + 252, 212, 30, 35, 2, 252, 211, 30, 35, 2, 252, 210, 30, 35, 2, 252, 209, + 30, 35, 2, 252, 208, 30, 35, 2, 252, 207, 30, 35, 2, 252, 206, 30, 35, 2, + 252, 205, 30, 35, 2, 252, 204, 30, 35, 2, 252, 203, 30, 35, 2, 252, 202, + 30, 35, 2, 252, 201, 30, 35, 2, 252, 200, 30, 35, 2, 252, 199, 30, 35, 2, + 252, 198, 30, 35, 2, 252, 197, 30, 35, 2, 252, 196, 30, 35, 2, 252, 195, + 30, 35, 2, 252, 194, 30, 35, 2, 252, 193, 30, 35, 2, 252, 192, 30, 35, 2, + 252, 191, 30, 35, 2, 252, 190, 30, 35, 2, 252, 189, 30, 35, 2, 252, 188, + 30, 35, 2, 252, 187, 30, 35, 2, 252, 186, 30, 35, 2, 252, 185, 30, 35, 2, + 252, 184, 30, 35, 2, 252, 183, 30, 35, 2, 252, 182, 30, 35, 2, 252, 181, + 30, 35, 2, 252, 180, 30, 35, 2, 252, 179, 30, 35, 2, 252, 178, 30, 35, 2, + 252, 177, 30, 35, 2, 252, 176, 30, 35, 2, 252, 175, 30, 35, 2, 252, 174, + 30, 35, 2, 252, 173, 30, 35, 2, 252, 172, 30, 35, 2, 252, 171, 30, 35, 2, + 252, 170, 30, 35, 2, 252, 169, 30, 35, 2, 252, 168, 62, 30, 35, 2, 252, + 167, 250, 103, 30, 35, 2, 252, 166, 242, 153, 30, 35, 2, 252, 165, 72, + 30, 35, 2, 252, 164, 238, 5, 30, 35, 2, 252, 163, 234, 247, 30, 35, 2, + 252, 162, 227, 251, 30, 35, 2, 252, 161, 227, 118, 30, 35, 2, 252, 160, + 156, 30, 35, 2, 252, 159, 225, 180, 30, 35, 2, 252, 158, 225, 179, 30, + 35, 2, 252, 157, 225, 178, 30, 35, 2, 252, 156, 225, 177, 30, 35, 2, 252, + 155, 201, 147, 30, 35, 2, 252, 154, 200, 195, 30, 35, 2, 252, 153, 200, + 123, 30, 35, 2, 252, 152, 217, 83, 30, 35, 2, 252, 151, 252, 4, 30, 35, + 2, 252, 150, 249, 45, 30, 35, 2, 252, 149, 241, 222, 30, 35, 2, 252, 148, + 238, 13, 30, 35, 2, 252, 147, 227, 227, 30, 35, 2, 252, 146, 30, 35, 2, + 252, 145, 30, 35, 2, 252, 144, 30, 35, 2, 252, 143, 30, 35, 2, 252, 142, + 30, 35, 2, 252, 141, 30, 35, 2, 252, 140, 30, 35, 2, 252, 139, 242, 160, + 5, 62, 242, 160, 5, 72, 242, 160, 5, 70, 242, 160, 5, 74, 242, 160, 5, + 66, 242, 160, 5, 227, 248, 242, 160, 5, 227, 166, 242, 160, 5, 161, 242, + 160, 5, 227, 8, 242, 160, 5, 226, 163, 242, 160, 5, 226, 88, 242, 160, 5, + 226, 15, 242, 160, 5, 194, 242, 160, 5, 225, 40, 242, 160, 5, 224, 210, + 242, 160, 5, 224, 110, 242, 160, 5, 224, 42, 242, 160, 5, 178, 242, 160, + 5, 222, 76, 242, 160, 5, 221, 211, 242, 160, 5, 221, 136, 242, 160, 5, + 221, 41, 242, 160, 5, 188, 242, 160, 5, 220, 34, 242, 160, 5, 219, 150, + 242, 160, 5, 218, 241, 242, 160, 5, 218, 133, 242, 160, 5, 172, 242, 160, + 5, 216, 73, 242, 160, 5, 215, 204, 242, 160, 5, 215, 106, 242, 160, 5, + 214, 224, 242, 160, 5, 213, 252, 242, 160, 5, 213, 190, 242, 160, 5, 213, + 88, 242, 160, 5, 213, 1, 242, 160, 5, 212, 175, 242, 160, 5, 212, 64, + 242, 160, 5, 211, 202, 242, 160, 5, 209, 182, 242, 160, 5, 209, 29, 242, + 160, 5, 208, 24, 242, 160, 5, 207, 36, 242, 160, 5, 206, 201, 242, 160, + 5, 206, 15, 242, 160, 5, 138, 242, 160, 5, 204, 215, 242, 160, 5, 201, + 114, 242, 160, 5, 201, 64, 242, 160, 5, 201, 31, 242, 160, 5, 201, 0, + 242, 160, 5, 200, 181, 242, 160, 5, 200, 175, 242, 160, 5, 199, 114, 242, + 160, 5, 199, 14, 228, 119, 250, 238, 1, 251, 140, 228, 119, 250, 238, 1, + 248, 207, 228, 119, 250, 238, 1, 235, 147, 228, 119, 250, 238, 1, 242, + 22, 228, 119, 250, 238, 1, 234, 139, 228, 119, 250, 238, 1, 201, 72, 228, + 119, 250, 238, 1, 199, 92, 228, 119, 250, 238, 1, 234, 91, 228, 119, 250, + 238, 1, 206, 142, 228, 119, 250, 238, 1, 199, 233, 228, 119, 250, 238, 1, + 227, 57, 228, 119, 250, 238, 1, 225, 82, 228, 119, 250, 238, 1, 222, 47, + 228, 119, 250, 238, 1, 218, 89, 228, 119, 250, 238, 1, 212, 19, 228, 119, + 250, 238, 1, 250, 107, 228, 119, 250, 238, 1, 216, 73, 228, 119, 250, + 238, 1, 212, 54, 228, 119, 250, 238, 1, 214, 101, 228, 119, 250, 238, 1, + 213, 123, 228, 119, 250, 238, 1, 210, 21, 228, 119, 250, 238, 1, 206, + 215, 228, 119, 250, 238, 211, 193, 54, 228, 119, 250, 238, 41, 102, 228, + 119, 250, 238, 41, 105, 228, 119, 250, 238, 41, 147, 228, 119, 250, 238, + 41, 206, 166, 228, 119, 250, 238, 41, 204, 159, 228, 119, 250, 238, 41, + 112, 233, 82, 228, 119, 250, 238, 41, 112, 206, 50, 228, 119, 250, 238, + 41, 206, 167, 206, 50, 216, 175, 1, 251, 140, 216, 175, 1, 248, 207, 216, + 175, 1, 235, 147, 216, 175, 1, 242, 22, 216, 175, 1, 234, 139, 216, 175, + 1, 201, 72, 216, 175, 1, 199, 92, 216, 175, 1, 234, 91, 216, 175, 1, 206, + 142, 216, 175, 1, 199, 233, 216, 175, 1, 227, 57, 216, 175, 1, 225, 82, + 216, 175, 1, 222, 47, 216, 175, 1, 47, 218, 89, 216, 175, 1, 218, 89, + 216, 175, 1, 212, 19, 216, 175, 1, 250, 107, 216, 175, 1, 216, 73, 216, + 175, 1, 212, 54, 216, 175, 1, 214, 101, 216, 175, 1, 213, 123, 216, 175, + 1, 210, 21, 216, 175, 1, 206, 215, 216, 175, 225, 23, 237, 39, 216, 175, + 213, 41, 237, 39, 216, 175, 41, 102, 216, 175, 41, 105, 216, 175, 41, + 147, 216, 175, 41, 149, 216, 175, 41, 164, 216, 175, 41, 206, 166, 216, + 175, 41, 204, 159, 220, 153, 1, 47, 251, 140, 220, 153, 1, 251, 140, 220, + 153, 1, 47, 248, 207, 220, 153, 1, 248, 207, 220, 153, 1, 235, 147, 220, + 153, 1, 242, 22, 220, 153, 1, 47, 234, 139, 220, 153, 1, 234, 139, 220, + 153, 1, 201, 72, 220, 153, 1, 199, 92, 220, 153, 1, 234, 91, 220, 153, 1, + 206, 142, 220, 153, 1, 47, 199, 233, 220, 153, 1, 199, 233, 220, 153, 1, + 47, 227, 57, 220, 153, 1, 227, 57, 220, 153, 1, 47, 225, 82, 220, 153, 1, + 225, 82, 220, 153, 1, 47, 222, 47, 220, 153, 1, 222, 47, 220, 153, 1, 47, + 218, 89, 220, 153, 1, 218, 89, 220, 153, 1, 212, 19, 220, 153, 1, 250, + 107, 220, 153, 1, 216, 73, 220, 153, 1, 212, 54, 220, 153, 1, 214, 101, + 220, 153, 1, 213, 123, 220, 153, 1, 47, 210, 21, 220, 153, 1, 210, 21, + 220, 153, 1, 206, 215, 220, 153, 41, 102, 220, 153, 41, 105, 220, 153, + 41, 147, 220, 153, 41, 149, 220, 153, 242, 220, 41, 149, 220, 153, 41, + 164, 220, 153, 41, 206, 166, 220, 153, 41, 204, 159, 220, 153, 41, 112, + 233, 82, 234, 152, 1, 251, 140, 234, 152, 1, 248, 207, 234, 152, 1, 235, + 147, 234, 152, 1, 242, 21, 234, 152, 1, 234, 139, 234, 152, 1, 201, 72, + 234, 152, 1, 199, 91, 234, 152, 1, 234, 91, 234, 152, 1, 206, 142, 234, + 152, 1, 199, 233, 234, 152, 1, 227, 57, 234, 152, 1, 225, 82, 234, 152, + 1, 222, 47, 234, 152, 1, 218, 89, 234, 152, 1, 212, 19, 234, 152, 1, 250, + 106, 234, 152, 1, 216, 73, 234, 152, 1, 212, 54, 234, 152, 1, 214, 101, + 234, 152, 1, 210, 21, 234, 152, 1, 206, 215, 234, 152, 41, 102, 234, 152, + 41, 164, 234, 152, 41, 206, 166, 234, 152, 41, 204, 159, 234, 152, 41, + 112, 233, 82, 215, 215, 1, 251, 137, 215, 215, 1, 248, 210, 215, 215, 1, + 236, 62, 215, 215, 1, 241, 138, 215, 215, 1, 234, 139, 215, 215, 1, 201, + 79, 215, 215, 1, 199, 107, 215, 215, 1, 234, 93, 215, 215, 1, 206, 146, + 215, 215, 1, 199, 234, 215, 215, 1, 227, 86, 215, 215, 1, 225, 88, 215, + 215, 1, 222, 47, 215, 215, 1, 218, 89, 215, 215, 1, 210, 161, 215, 215, + 1, 251, 171, 215, 215, 1, 216, 73, 215, 215, 1, 212, 55, 215, 215, 1, + 214, 106, 215, 215, 1, 212, 230, 215, 215, 1, 210, 21, 215, 215, 1, 206, + 221, 215, 215, 41, 102, 215, 215, 41, 206, 166, 215, 215, 41, 204, 159, + 215, 215, 41, 112, 233, 82, 215, 215, 41, 105, 215, 215, 41, 147, 215, + 215, 200, 238, 210, 154, 223, 255, 1, 62, 223, 255, 1, 250, 103, 223, + 255, 1, 236, 156, 223, 255, 1, 242, 153, 223, 255, 1, 72, 223, 255, 1, + 203, 168, 223, 255, 1, 70, 223, 255, 1, 200, 123, 223, 255, 1, 227, 118, + 223, 255, 1, 156, 223, 255, 1, 223, 243, 223, 255, 1, 220, 214, 223, 255, + 1, 74, 223, 255, 1, 146, 223, 255, 1, 208, 182, 223, 255, 1, 207, 83, + 223, 255, 1, 66, 223, 255, 1, 238, 5, 223, 255, 1, 214, 167, 223, 255, 1, + 212, 122, 223, 255, 1, 205, 0, 223, 255, 1, 251, 85, 223, 255, 1, 238, + 179, 223, 255, 1, 224, 2, 223, 255, 1, 219, 22, 223, 255, 1, 247, 223, + 223, 255, 205, 95, 81, 132, 234, 68, 1, 62, 132, 234, 68, 1, 72, 132, + 234, 68, 1, 70, 132, 234, 68, 1, 74, 132, 234, 68, 1, 183, 132, 234, 68, + 1, 201, 114, 132, 234, 68, 1, 249, 136, 132, 234, 68, 1, 249, 135, 132, + 234, 68, 1, 172, 132, 234, 68, 1, 178, 132, 234, 68, 1, 188, 132, 234, + 68, 1, 220, 161, 132, 234, 68, 1, 220, 34, 132, 234, 68, 1, 220, 33, 132, + 234, 68, 1, 213, 252, 132, 234, 68, 1, 213, 251, 132, 234, 68, 1, 194, + 132, 234, 68, 1, 226, 207, 132, 234, 68, 1, 234, 84, 132, 234, 68, 1, + 212, 64, 132, 234, 68, 1, 212, 63, 132, 234, 68, 1, 211, 202, 132, 234, + 68, 1, 161, 132, 234, 68, 1, 214, 159, 132, 234, 68, 1, 207, 36, 132, + 234, 68, 1, 207, 35, 132, 234, 68, 1, 206, 201, 132, 234, 68, 1, 206, + 200, 132, 234, 68, 1, 138, 132, 234, 68, 1, 242, 58, 132, 234, 68, 16, + 202, 228, 132, 234, 68, 16, 202, 227, 132, 242, 191, 1, 62, 132, 242, + 191, 1, 72, 132, 242, 191, 1, 70, 132, 242, 191, 1, 74, 132, 242, 191, 1, + 183, 132, 242, 191, 1, 201, 114, 132, 242, 191, 1, 249, 136, 132, 242, + 191, 1, 172, 132, 242, 191, 1, 178, 132, 242, 191, 1, 188, 132, 242, 191, + 1, 220, 34, 132, 242, 191, 1, 213, 252, 132, 242, 191, 1, 194, 132, 242, + 191, 1, 226, 207, 132, 242, 191, 1, 234, 84, 132, 242, 191, 1, 212, 64, + 132, 242, 191, 1, 250, 234, 212, 64, 132, 242, 191, 1, 211, 202, 132, + 242, 191, 1, 161, 132, 242, 191, 1, 214, 159, 132, 242, 191, 1, 207, 36, + 132, 242, 191, 1, 206, 201, 132, 242, 191, 1, 138, 132, 242, 191, 1, 242, + 58, 132, 242, 191, 236, 219, 238, 200, 204, 166, 132, 242, 191, 236, 219, + 112, 234, 213, 132, 242, 191, 224, 97, 213, 7, 132, 242, 191, 224, 97, + 228, 124, 132, 242, 191, 41, 102, 132, 242, 191, 41, 105, 132, 242, 191, + 41, 147, 132, 242, 191, 41, 149, 132, 242, 191, 41, 164, 132, 242, 191, + 41, 187, 132, 242, 191, 41, 210, 135, 132, 242, 191, 41, 192, 132, 242, + 191, 41, 219, 113, 132, 242, 191, 41, 206, 166, 132, 242, 191, 41, 204, + 159, 132, 242, 191, 41, 206, 67, 132, 242, 191, 41, 236, 235, 132, 242, + 191, 41, 237, 104, 132, 242, 191, 41, 209, 92, 132, 242, 191, 41, 210, + 129, 132, 242, 191, 41, 112, 233, 82, 132, 242, 191, 41, 120, 233, 82, + 132, 242, 191, 41, 126, 233, 82, 132, 242, 191, 41, 236, 229, 233, 82, + 132, 242, 191, 41, 237, 61, 233, 82, 132, 242, 191, 41, 209, 106, 233, + 82, 132, 242, 191, 41, 210, 136, 233, 82, 132, 242, 191, 41, 238, 232, + 233, 82, 132, 242, 191, 41, 219, 114, 233, 82, 132, 242, 191, 41, 112, + 206, 50, 132, 242, 191, 41, 120, 206, 50, 132, 242, 191, 41, 126, 206, + 50, 132, 242, 191, 41, 236, 229, 206, 50, 132, 242, 191, 41, 237, 61, + 206, 50, 132, 242, 191, 41, 209, 106, 206, 50, 132, 242, 191, 41, 210, + 136, 206, 50, 132, 242, 191, 41, 238, 232, 206, 50, 132, 242, 191, 41, + 219, 114, 206, 50, 132, 242, 191, 41, 206, 167, 206, 50, 132, 242, 191, + 41, 204, 160, 206, 50, 132, 242, 191, 41, 206, 68, 206, 50, 132, 242, + 191, 41, 236, 236, 206, 50, 132, 242, 191, 41, 237, 105, 206, 50, 132, + 242, 191, 41, 209, 93, 206, 50, 132, 242, 191, 41, 210, 130, 206, 50, + 132, 242, 191, 41, 238, 223, 206, 50, 132, 242, 191, 41, 219, 109, 206, + 50, 132, 242, 191, 41, 112, 233, 83, 206, 50, 132, 242, 191, 41, 120, + 233, 83, 206, 50, 132, 242, 191, 41, 126, 233, 83, 206, 50, 132, 242, + 191, 41, 236, 229, 233, 83, 206, 50, 132, 242, 191, 41, 237, 61, 233, 83, + 206, 50, 132, 242, 191, 41, 209, 106, 233, 83, 206, 50, 132, 242, 191, + 41, 210, 136, 233, 83, 206, 50, 132, 242, 191, 41, 238, 232, 233, 83, + 206, 50, 132, 242, 191, 41, 219, 114, 233, 83, 206, 50, 132, 242, 191, + 236, 219, 112, 204, 167, 132, 242, 191, 236, 219, 120, 204, 166, 132, + 242, 191, 236, 219, 126, 204, 166, 132, 242, 191, 236, 219, 236, 229, + 204, 166, 132, 242, 191, 236, 219, 237, 61, 204, 166, 132, 242, 191, 236, + 219, 209, 106, 204, 166, 132, 242, 191, 236, 219, 210, 136, 204, 166, + 132, 242, 191, 236, 219, 238, 232, 204, 166, 132, 242, 191, 236, 219, + 219, 114, 204, 166, 132, 242, 191, 236, 219, 206, 167, 204, 166, 226, + 194, 1, 62, 226, 194, 22, 2, 70, 226, 194, 22, 2, 66, 226, 194, 22, 2, + 109, 146, 226, 194, 22, 2, 72, 226, 194, 22, 2, 74, 226, 194, 22, 225, 2, + 81, 226, 194, 2, 53, 213, 27, 57, 226, 194, 2, 251, 33, 226, 194, 2, 202, + 203, 226, 194, 1, 161, 226, 194, 1, 226, 207, 226, 194, 1, 236, 89, 226, + 194, 1, 235, 199, 226, 194, 1, 247, 190, 226, 194, 1, 247, 37, 226, 194, + 1, 227, 248, 226, 194, 1, 218, 60, 226, 194, 1, 204, 253, 226, 194, 1, + 204, 241, 226, 194, 1, 241, 220, 226, 194, 1, 241, 204, 226, 194, 1, 219, + 21, 226, 194, 1, 207, 36, 226, 194, 1, 206, 122, 226, 194, 1, 242, 58, + 226, 194, 1, 241, 100, 226, 194, 1, 188, 226, 194, 1, 172, 226, 194, 1, + 215, 245, 226, 194, 1, 249, 136, 226, 194, 1, 248, 200, 226, 194, 1, 178, + 226, 194, 1, 183, 226, 194, 1, 213, 252, 226, 194, 1, 194, 226, 194, 1, + 203, 90, 226, 194, 1, 210, 114, 226, 194, 1, 208, 179, 226, 194, 1, 212, + 64, 226, 194, 1, 199, 114, 226, 194, 1, 144, 226, 194, 1, 226, 109, 226, + 194, 1, 204, 221, 226, 194, 2, 249, 77, 56, 226, 194, 2, 247, 107, 226, + 194, 2, 73, 57, 226, 194, 202, 208, 226, 194, 17, 102, 226, 194, 17, 105, + 226, 194, 17, 147, 226, 194, 17, 149, 226, 194, 41, 206, 166, 226, 194, + 41, 204, 159, 226, 194, 41, 112, 233, 82, 226, 194, 41, 112, 206, 50, + 226, 194, 214, 212, 240, 182, 226, 194, 214, 212, 4, 246, 155, 226, 194, + 214, 212, 246, 155, 226, 194, 214, 212, 242, 244, 148, 226, 194, 214, + 212, 222, 174, 226, 194, 214, 212, 224, 64, 226, 194, 214, 212, 242, 10, + 226, 194, 214, 212, 53, 242, 10, 226, 194, 214, 212, 224, 170, 40, 208, + 254, 250, 249, 1, 234, 139, 40, 208, 254, 250, 249, 1, 225, 82, 40, 208, + 254, 250, 249, 1, 234, 91, 40, 208, 254, 250, 249, 1, 222, 47, 40, 208, + 254, 250, 249, 1, 214, 101, 40, 208, 254, 250, 249, 1, 201, 72, 40, 208, + 254, 250, 249, 1, 210, 21, 40, 208, 254, 250, 249, 1, 213, 123, 40, 208, + 254, 250, 249, 1, 248, 207, 40, 208, 254, 250, 249, 1, 206, 215, 40, 208, + 254, 250, 249, 1, 211, 251, 40, 208, 254, 250, 249, 1, 227, 57, 40, 208, + 254, 250, 249, 1, 218, 89, 40, 208, 254, 250, 249, 1, 226, 189, 40, 208, + 254, 250, 249, 1, 212, 54, 40, 208, 254, 250, 249, 1, 212, 19, 40, 208, + 254, 250, 249, 1, 237, 147, 40, 208, 254, 250, 249, 1, 251, 142, 40, 208, + 254, 250, 249, 1, 250, 106, 40, 208, 254, 250, 249, 1, 241, 97, 40, 208, + 254, 250, 249, 1, 235, 147, 40, 208, 254, 250, 249, 1, 242, 22, 40, 208, + 254, 250, 249, 1, 235, 187, 40, 208, 254, 250, 249, 1, 206, 142, 40, 208, + 254, 250, 249, 1, 199, 91, 40, 208, 254, 250, 249, 1, 241, 94, 40, 208, + 254, 250, 249, 1, 199, 233, 40, 208, 254, 250, 249, 1, 206, 108, 40, 208, + 254, 250, 249, 1, 206, 87, 40, 208, 254, 250, 249, 41, 102, 40, 208, 254, + 250, 249, 41, 237, 104, 40, 208, 254, 250, 249, 145, 228, 99, 40, 157, + 250, 249, 1, 234, 115, 40, 157, 250, 249, 1, 225, 91, 40, 157, 250, 249, + 1, 234, 224, 40, 157, 250, 249, 1, 222, 61, 40, 157, 250, 249, 1, 214, + 152, 40, 157, 250, 249, 1, 201, 72, 40, 157, 250, 249, 1, 238, 102, 40, + 157, 250, 249, 1, 213, 154, 40, 157, 250, 249, 1, 248, 240, 40, 157, 250, + 249, 1, 206, 183, 40, 157, 250, 249, 1, 238, 103, 40, 157, 250, 249, 1, + 227, 86, 40, 157, 250, 249, 1, 218, 227, 40, 157, 250, 249, 1, 226, 203, + 40, 157, 250, 249, 1, 212, 56, 40, 157, 250, 249, 1, 238, 101, 40, 157, + 250, 249, 1, 237, 134, 40, 157, 250, 249, 1, 251, 142, 40, 157, 250, 249, + 1, 251, 171, 40, 157, 250, 249, 1, 242, 52, 40, 157, 250, 249, 1, 236, 6, + 40, 157, 250, 249, 1, 242, 29, 40, 157, 250, 249, 1, 235, 194, 40, 157, + 250, 249, 1, 207, 9, 40, 157, 250, 249, 1, 199, 105, 40, 157, 250, 249, + 1, 206, 114, 40, 157, 250, 249, 1, 200, 46, 40, 157, 250, 249, 1, 206, + 102, 40, 157, 250, 249, 1, 199, 108, 40, 157, 250, 249, 41, 102, 40, 157, + 250, 249, 41, 206, 166, 40, 157, 250, 249, 41, 204, 159, 222, 173, 1, + 251, 140, 222, 173, 1, 248, 207, 222, 173, 1, 248, 194, 222, 173, 1, 235, + 147, 222, 173, 1, 235, 172, 222, 173, 1, 242, 22, 222, 173, 1, 234, 139, + 222, 173, 1, 201, 72, 222, 173, 2, 204, 36, 222, 173, 1, 199, 92, 222, + 173, 1, 199, 70, 222, 173, 1, 227, 229, 222, 173, 1, 227, 211, 222, 173, + 1, 234, 91, 222, 173, 1, 206, 142, 222, 173, 1, 199, 233, 222, 173, 1, + 227, 57, 222, 173, 1, 200, 178, 222, 173, 1, 226, 196, 222, 173, 1, 225, + 82, 222, 173, 1, 241, 93, 222, 173, 1, 206, 113, 222, 173, 1, 222, 47, + 222, 173, 1, 218, 89, 222, 173, 1, 212, 19, 222, 173, 1, 250, 107, 222, + 173, 1, 252, 91, 222, 173, 1, 216, 73, 222, 173, 1, 237, 147, 222, 173, + 1, 212, 54, 222, 173, 1, 214, 101, 222, 173, 1, 200, 156, 222, 173, 1, + 214, 128, 222, 173, 1, 213, 123, 222, 173, 1, 210, 21, 222, 173, 1, 208, + 148, 222, 173, 1, 206, 215, 222, 173, 252, 3, 134, 56, 222, 173, 252, 3, + 134, 57, 222, 173, 41, 102, 222, 173, 41, 164, 222, 173, 41, 206, 166, + 222, 173, 41, 204, 159, 222, 173, 41, 112, 233, 82, 222, 173, 214, 212, + 208, 109, 222, 173, 214, 212, 237, 39, 222, 173, 214, 212, 53, 73, 201, + 5, 240, 182, 222, 173, 214, 212, 73, 201, 5, 240, 182, 222, 173, 214, + 212, 240, 182, 222, 173, 214, 212, 120, 240, 180, 222, 173, 214, 212, + 224, 177, 237, 93, 250, 119, 1, 62, 250, 119, 1, 252, 138, 250, 119, 1, + 251, 31, 250, 119, 1, 252, 97, 250, 119, 1, 251, 85, 250, 119, 1, 252, + 98, 250, 119, 1, 251, 221, 250, 119, 1, 251, 217, 250, 119, 1, 72, 250, + 119, 1, 238, 255, 250, 119, 1, 74, 250, 119, 1, 217, 63, 250, 119, 1, 70, + 250, 119, 1, 228, 151, 250, 119, 1, 66, 250, 119, 1, 203, 182, 250, 119, + 1, 227, 8, 250, 119, 1, 200, 175, 250, 119, 1, 200, 137, 250, 119, 1, + 200, 147, 250, 119, 1, 236, 15, 250, 119, 1, 235, 230, 250, 119, 1, 235, + 185, 250, 119, 1, 247, 76, 250, 119, 1, 227, 227, 250, 119, 1, 206, 201, + 250, 119, 1, 206, 106, 250, 119, 1, 241, 175, 250, 119, 1, 241, 91, 250, + 119, 1, 204, 248, 250, 119, 1, 216, 73, 250, 119, 1, 237, 147, 250, 119, + 1, 249, 8, 250, 119, 1, 248, 196, 250, 119, 1, 219, 240, 250, 119, 1, + 219, 156, 250, 119, 1, 219, 157, 250, 119, 1, 220, 34, 250, 119, 1, 218, + 50, 250, 119, 1, 219, 16, 250, 119, 1, 222, 76, 250, 119, 1, 234, 1, 250, + 119, 1, 199, 164, 250, 119, 1, 200, 51, 250, 119, 1, 203, 59, 250, 119, + 1, 213, 190, 250, 119, 1, 225, 40, 250, 119, 1, 211, 202, 250, 119, 1, + 199, 89, 250, 119, 1, 210, 65, 250, 119, 1, 199, 68, 250, 119, 1, 209, + 189, 250, 119, 1, 208, 149, 250, 119, 1, 234, 139, 250, 119, 252, 3, 81, + 205, 226, 120, 190, 119, 112, 73, 214, 211, 4, 120, 190, 119, 112, 73, + 214, 211, 225, 71, 120, 190, 119, 112, 73, 214, 211, 225, 71, 112, 73, + 119, 120, 190, 214, 211, 225, 71, 120, 213, 24, 119, 112, 213, 27, 214, + 211, 225, 71, 112, 213, 27, 119, 120, 213, 24, 214, 211, 228, 77, 216, + 109, 1, 251, 140, 228, 77, 216, 109, 1, 248, 207, 228, 77, 216, 109, 1, + 235, 147, 228, 77, 216, 109, 1, 242, 22, 228, 77, 216, 109, 1, 234, 139, + 228, 77, 216, 109, 1, 201, 72, 228, 77, 216, 109, 1, 199, 92, 228, 77, + 216, 109, 1, 234, 91, 228, 77, 216, 109, 1, 206, 142, 228, 77, 216, 109, + 1, 199, 233, 228, 77, 216, 109, 1, 227, 57, 228, 77, 216, 109, 1, 225, + 82, 228, 77, 216, 109, 1, 222, 47, 228, 77, 216, 109, 1, 218, 89, 228, + 77, 216, 109, 1, 212, 19, 228, 77, 216, 109, 1, 250, 107, 228, 77, 216, + 109, 1, 216, 73, 228, 77, 216, 109, 1, 212, 54, 228, 77, 216, 109, 1, + 214, 101, 228, 77, 216, 109, 1, 213, 123, 228, 77, 216, 109, 1, 210, 21, + 228, 77, 216, 109, 1, 206, 215, 228, 77, 216, 109, 41, 102, 228, 77, 216, + 109, 41, 105, 228, 77, 216, 109, 41, 147, 228, 77, 216, 109, 41, 149, + 228, 77, 216, 109, 41, 206, 166, 228, 77, 216, 109, 41, 204, 159, 228, + 77, 216, 109, 41, 112, 233, 82, 228, 77, 216, 109, 41, 112, 206, 50, 228, + 77, 216, 191, 1, 251, 140, 228, 77, 216, 191, 1, 248, 207, 228, 77, 216, + 191, 1, 235, 147, 228, 77, 216, 191, 1, 242, 22, 228, 77, 216, 191, 1, + 234, 139, 228, 77, 216, 191, 1, 201, 71, 228, 77, 216, 191, 1, 199, 92, + 228, 77, 216, 191, 1, 234, 91, 228, 77, 216, 191, 1, 206, 142, 228, 77, + 216, 191, 1, 199, 233, 228, 77, 216, 191, 1, 227, 57, 228, 77, 216, 191, + 1, 225, 82, 228, 77, 216, 191, 1, 222, 46, 228, 77, 216, 191, 1, 218, 89, + 228, 77, 216, 191, 1, 212, 19, 228, 77, 216, 191, 1, 216, 73, 228, 77, + 216, 191, 1, 212, 54, 228, 77, 216, 191, 1, 210, 21, 228, 77, 216, 191, + 1, 206, 215, 228, 77, 216, 191, 41, 102, 228, 77, 216, 191, 41, 105, 228, + 77, 216, 191, 41, 147, 228, 77, 216, 191, 41, 149, 228, 77, 216, 191, 41, + 206, 166, 228, 77, 216, 191, 41, 204, 159, 228, 77, 216, 191, 41, 112, + 233, 82, 228, 77, 216, 191, 41, 112, 206, 50, 214, 236, 216, 191, 1, 251, + 140, 214, 236, 216, 191, 1, 248, 207, 214, 236, 216, 191, 1, 235, 147, + 214, 236, 216, 191, 1, 242, 22, 214, 236, 216, 191, 1, 234, 139, 214, + 236, 216, 191, 1, 201, 71, 214, 236, 216, 191, 1, 199, 92, 214, 236, 216, + 191, 1, 234, 91, 214, 236, 216, 191, 1, 199, 233, 214, 236, 216, 191, 1, + 227, 57, 214, 236, 216, 191, 1, 225, 82, 214, 236, 216, 191, 1, 222, 46, + 214, 236, 216, 191, 1, 218, 89, 214, 236, 216, 191, 1, 212, 19, 214, 236, + 216, 191, 1, 216, 73, 214, 236, 216, 191, 1, 212, 54, 214, 236, 216, 191, + 1, 210, 21, 214, 236, 216, 191, 1, 206, 215, 214, 236, 216, 191, 211, + 193, 81, 214, 236, 216, 191, 204, 185, 211, 193, 81, 214, 236, 216, 191, + 236, 229, 190, 3, 242, 234, 214, 236, 216, 191, 236, 229, 190, 3, 240, + 182, 214, 236, 216, 191, 41, 102, 214, 236, 216, 191, 41, 105, 214, 236, + 216, 191, 41, 147, 214, 236, 216, 191, 41, 149, 214, 236, 216, 191, 41, + 206, 166, 214, 236, 216, 191, 41, 204, 159, 214, 236, 216, 191, 41, 112, + 233, 82, 40, 204, 189, 1, 217, 23, 62, 40, 204, 189, 1, 200, 39, 62, 40, + 204, 189, 1, 200, 39, 251, 221, 40, 204, 189, 1, 217, 23, 70, 40, 204, + 189, 1, 200, 39, 70, 40, 204, 189, 1, 200, 39, 72, 40, 204, 189, 1, 217, + 23, 74, 40, 204, 189, 1, 217, 23, 217, 121, 40, 204, 189, 1, 200, 39, + 217, 121, 40, 204, 189, 1, 217, 23, 252, 89, 40, 204, 189, 1, 200, 39, + 252, 89, 40, 204, 189, 1, 217, 23, 251, 220, 40, 204, 189, 1, 200, 39, + 251, 220, 40, 204, 189, 1, 217, 23, 251, 193, 40, 204, 189, 1, 200, 39, + 251, 193, 40, 204, 189, 1, 217, 23, 251, 215, 40, 204, 189, 1, 200, 39, + 251, 215, 40, 204, 189, 1, 217, 23, 251, 235, 40, 204, 189, 1, 200, 39, + 251, 235, 40, 204, 189, 1, 217, 23, 251, 219, 40, 204, 189, 1, 217, 23, + 238, 12, 40, 204, 189, 1, 200, 39, 238, 12, 40, 204, 189, 1, 217, 23, + 250, 112, 40, 204, 189, 1, 200, 39, 250, 112, 40, 204, 189, 1, 217, 23, + 251, 202, 40, 204, 189, 1, 200, 39, 251, 202, 40, 204, 189, 1, 217, 23, + 251, 213, 40, 204, 189, 1, 200, 39, 251, 213, 40, 204, 189, 1, 217, 23, + 217, 119, 40, 204, 189, 1, 200, 39, 217, 119, 40, 204, 189, 1, 217, 23, + 251, 151, 40, 204, 189, 1, 200, 39, 251, 151, 40, 204, 189, 1, 217, 23, + 251, 212, 40, 204, 189, 1, 217, 23, 238, 193, 40, 204, 189, 1, 217, 23, + 238, 190, 40, 204, 189, 1, 217, 23, 251, 85, 40, 204, 189, 1, 217, 23, + 251, 210, 40, 204, 189, 1, 200, 39, 251, 210, 40, 204, 189, 1, 217, 23, + 238, 157, 40, 204, 189, 1, 200, 39, 238, 157, 40, 204, 189, 1, 217, 23, + 238, 176, 40, 204, 189, 1, 200, 39, 238, 176, 40, 204, 189, 1, 217, 23, + 238, 143, 40, 204, 189, 1, 200, 39, 238, 143, 40, 204, 189, 1, 200, 39, + 251, 76, 40, 204, 189, 1, 217, 23, 238, 165, 40, 204, 189, 1, 200, 39, + 251, 209, 40, 204, 189, 1, 217, 23, 238, 133, 40, 204, 189, 1, 217, 23, + 217, 54, 40, 204, 189, 1, 217, 23, 232, 233, 40, 204, 189, 1, 217, 23, + 239, 7, 40, 204, 189, 1, 200, 39, 239, 7, 40, 204, 189, 1, 217, 23, 251, + 1, 40, 204, 189, 1, 200, 39, 251, 1, 40, 204, 189, 1, 217, 23, 228, 37, + 40, 204, 189, 1, 200, 39, 228, 37, 40, 204, 189, 1, 217, 23, 217, 35, 40, + 204, 189, 1, 200, 39, 217, 35, 40, 204, 189, 1, 217, 23, 250, 253, 40, + 204, 189, 1, 200, 39, 250, 253, 40, 204, 189, 1, 217, 23, 251, 208, 40, + 204, 189, 1, 217, 23, 250, 188, 40, 204, 189, 1, 217, 23, 251, 206, 40, + 204, 189, 1, 217, 23, 250, 181, 40, 204, 189, 1, 200, 39, 250, 181, 40, + 204, 189, 1, 217, 23, 238, 94, 40, 204, 189, 1, 200, 39, 238, 94, 40, + 204, 189, 1, 217, 23, 250, 155, 40, 204, 189, 1, 200, 39, 250, 155, 40, + 204, 189, 1, 217, 23, 251, 203, 40, 204, 189, 1, 200, 39, 251, 203, 40, + 204, 189, 1, 217, 23, 217, 11, 40, 204, 189, 1, 217, 23, 249, 61, 40, + 152, 6, 1, 62, 40, 152, 6, 1, 252, 138, 40, 152, 6, 1, 239, 9, 40, 152, + 6, 1, 251, 96, 40, 152, 6, 1, 239, 7, 40, 152, 6, 1, 238, 176, 40, 152, + 6, 1, 239, 4, 40, 152, 6, 1, 239, 3, 40, 152, 6, 1, 251, 79, 40, 152, 6, + 1, 72, 40, 152, 6, 1, 246, 111, 72, 40, 152, 6, 1, 238, 255, 40, 152, 6, + 1, 238, 248, 40, 152, 6, 1, 238, 247, 40, 152, 6, 1, 238, 244, 40, 152, + 6, 1, 238, 241, 40, 152, 6, 1, 70, 40, 152, 6, 1, 228, 151, 40, 152, 6, + 1, 238, 219, 40, 152, 6, 1, 238, 216, 40, 152, 6, 1, 251, 159, 40, 152, + 6, 1, 203, 236, 40, 152, 6, 1, 238, 209, 40, 152, 6, 1, 238, 192, 40, + 152, 6, 1, 238, 190, 40, 152, 6, 1, 238, 179, 40, 152, 6, 1, 238, 143, + 40, 152, 6, 1, 74, 40, 152, 6, 1, 217, 63, 40, 152, 6, 1, 219, 121, 217, + 121, 40, 152, 6, 1, 212, 171, 217, 121, 40, 152, 6, 1, 217, 120, 40, 152, + 6, 1, 238, 133, 40, 152, 6, 1, 238, 184, 40, 152, 6, 1, 238, 115, 40, + 152, 6, 1, 209, 250, 238, 115, 40, 152, 6, 1, 238, 104, 40, 152, 6, 1, + 238, 83, 40, 152, 6, 1, 238, 81, 40, 152, 6, 1, 238, 157, 40, 152, 6, 1, + 238, 70, 40, 152, 6, 1, 239, 5, 40, 152, 6, 1, 66, 40, 152, 6, 1, 203, + 182, 40, 152, 6, 1, 219, 121, 204, 31, 40, 152, 6, 1, 212, 171, 204, 31, + 40, 152, 6, 1, 238, 57, 40, 152, 6, 1, 238, 12, 40, 152, 6, 1, 238, 7, + 40, 152, 6, 1, 238, 156, 54, 40, 152, 6, 1, 203, 197, 40, 152, 4, 1, 62, + 40, 152, 4, 1, 252, 138, 40, 152, 4, 1, 239, 9, 40, 152, 4, 1, 251, 96, + 40, 152, 4, 1, 239, 7, 40, 152, 4, 1, 238, 176, 40, 152, 4, 1, 239, 4, + 40, 152, 4, 1, 239, 3, 40, 152, 4, 1, 251, 79, 40, 152, 4, 1, 72, 40, + 152, 4, 1, 246, 111, 72, 40, 152, 4, 1, 238, 255, 40, 152, 4, 1, 238, + 248, 40, 152, 4, 1, 238, 247, 40, 152, 4, 1, 238, 244, 40, 152, 4, 1, + 238, 241, 40, 152, 4, 1, 70, 40, 152, 4, 1, 228, 151, 40, 152, 4, 1, 238, + 219, 40, 152, 4, 1, 238, 216, 40, 152, 4, 1, 251, 159, 40, 152, 4, 1, + 203, 236, 40, 152, 4, 1, 238, 209, 40, 152, 4, 1, 238, 192, 40, 152, 4, + 1, 238, 190, 40, 152, 4, 1, 238, 179, 40, 152, 4, 1, 238, 143, 40, 152, + 4, 1, 74, 40, 152, 4, 1, 217, 63, 40, 152, 4, 1, 219, 121, 217, 121, 40, + 152, 4, 1, 212, 171, 217, 121, 40, 152, 4, 1, 217, 120, 40, 152, 4, 1, + 238, 133, 40, 152, 4, 1, 238, 184, 40, 152, 4, 1, 238, 115, 40, 152, 4, + 1, 209, 250, 238, 115, 40, 152, 4, 1, 238, 104, 40, 152, 4, 1, 238, 83, + 40, 152, 4, 1, 238, 81, 40, 152, 4, 1, 238, 157, 40, 152, 4, 1, 238, 70, + 40, 152, 4, 1, 239, 5, 40, 152, 4, 1, 66, 40, 152, 4, 1, 203, 182, 40, + 152, 4, 1, 219, 121, 204, 31, 40, 152, 4, 1, 212, 171, 204, 31, 40, 152, + 4, 1, 238, 57, 40, 152, 4, 1, 238, 12, 40, 152, 4, 1, 238, 7, 40, 152, 4, + 1, 238, 156, 54, 40, 152, 4, 1, 203, 197, 40, 152, 41, 102, 40, 152, 41, + 164, 40, 152, 41, 206, 166, 40, 152, 41, 237, 104, 40, 152, 41, 112, 233, + 82, 40, 152, 41, 112, 206, 50, 212, 159, 17, 102, 212, 159, 17, 105, 212, + 159, 17, 147, 212, 159, 17, 149, 212, 159, 17, 164, 212, 159, 17, 187, + 212, 159, 17, 210, 135, 212, 159, 17, 192, 212, 159, 17, 219, 113, 212, + 159, 41, 206, 166, 212, 159, 41, 204, 159, 212, 159, 41, 206, 67, 212, + 159, 41, 236, 235, 212, 159, 41, 237, 104, 212, 159, 41, 209, 92, 212, + 159, 41, 210, 129, 212, 159, 41, 238, 222, 212, 159, 41, 219, 108, 212, + 159, 41, 112, 233, 82, 212, 159, 41, 120, 233, 82, 212, 159, 41, 126, + 233, 82, 212, 159, 41, 236, 229, 233, 82, 212, 159, 41, 237, 61, 233, 82, + 212, 159, 41, 209, 106, 233, 82, 212, 159, 41, 210, 136, 233, 82, 212, + 159, 41, 238, 232, 233, 82, 212, 159, 41, 219, 114, 233, 82, 212, 159, + 236, 219, 112, 234, 213, 212, 159, 236, 219, 112, 214, 87, 212, 159, 236, + 219, 112, 206, 74, 212, 159, 236, 219, 120, 206, 71, 151, 2, 247, 149, + 151, 2, 251, 33, 151, 2, 202, 203, 151, 2, 227, 201, 151, 2, 203, 226, + 151, 1, 62, 151, 1, 252, 138, 151, 1, 70, 151, 1, 228, 151, 151, 1, 66, + 151, 1, 203, 182, 151, 1, 109, 146, 151, 1, 109, 212, 216, 151, 1, 109, + 156, 151, 1, 109, 224, 139, 151, 1, 72, 151, 1, 251, 176, 151, 1, 74, + 151, 1, 250, 139, 151, 1, 161, 151, 1, 226, 207, 151, 1, 236, 89, 151, 1, + 235, 199, 151, 1, 219, 253, 151, 1, 247, 190, 151, 1, 247, 37, 151, 1, + 227, 248, 151, 1, 227, 215, 151, 1, 218, 60, 151, 1, 204, 253, 151, 1, + 204, 241, 151, 1, 241, 220, 151, 1, 241, 204, 151, 1, 219, 21, 151, 1, + 207, 36, 151, 1, 206, 122, 151, 1, 242, 58, 151, 1, 241, 100, 151, 1, + 188, 151, 1, 172, 151, 1, 215, 245, 151, 1, 249, 136, 151, 1, 248, 200, + 151, 1, 178, 151, 1, 183, 151, 1, 213, 252, 151, 1, 194, 151, 1, 203, 90, + 151, 1, 210, 114, 151, 1, 208, 179, 151, 1, 212, 64, 151, 1, 144, 151, 1, + 224, 138, 151, 1, 40, 45, 224, 129, 151, 1, 40, 45, 212, 215, 151, 1, 40, + 45, 219, 3, 151, 22, 2, 252, 138, 151, 22, 2, 248, 197, 252, 138, 151, + 22, 2, 70, 151, 22, 2, 228, 151, 151, 22, 2, 66, 151, 22, 2, 203, 182, + 151, 22, 2, 109, 146, 151, 22, 2, 109, 212, 216, 151, 22, 2, 109, 156, + 151, 22, 2, 109, 224, 139, 151, 22, 2, 72, 151, 22, 2, 251, 176, 151, 22, + 2, 74, 151, 22, 2, 250, 139, 151, 202, 208, 151, 242, 10, 151, 53, 242, + 10, 151, 214, 212, 240, 182, 151, 214, 212, 53, 240, 182, 151, 214, 212, + 224, 176, 151, 214, 212, 242, 244, 148, 151, 214, 212, 224, 64, 151, 41, + 102, 151, 41, 105, 151, 41, 147, 151, 41, 149, 151, 41, 164, 151, 41, + 187, 151, 41, 210, 135, 151, 41, 192, 151, 41, 219, 113, 151, 41, 206, + 166, 151, 41, 204, 159, 151, 41, 206, 67, 151, 41, 236, 235, 151, 41, + 237, 104, 151, 41, 209, 92, 151, 41, 210, 129, 151, 41, 238, 222, 151, + 41, 219, 108, 151, 41, 112, 233, 82, 151, 41, 112, 206, 50, 151, 17, 199, + 81, 151, 17, 102, 151, 17, 105, 151, 17, 147, 151, 17, 149, 151, 17, 164, + 151, 17, 187, 151, 17, 210, 135, 151, 17, 192, 151, 17, 219, 113, 151, + 41, 227, 161, 227, 79, 2, 247, 149, 227, 79, 2, 251, 33, 227, 79, 2, 202, + 203, 227, 79, 1, 62, 227, 79, 1, 252, 138, 227, 79, 1, 70, 227, 79, 1, + 228, 151, 227, 79, 1, 66, 227, 79, 1, 203, 182, 227, 79, 1, 72, 227, 79, + 1, 251, 176, 227, 79, 1, 74, 227, 79, 1, 250, 139, 227, 79, 1, 161, 227, + 79, 1, 226, 207, 227, 79, 1, 236, 89, 227, 79, 1, 235, 199, 227, 79, 1, + 219, 253, 227, 79, 1, 247, 190, 227, 79, 1, 247, 37, 227, 79, 1, 227, + 248, 227, 79, 1, 227, 215, 227, 79, 1, 218, 60, 227, 79, 1, 204, 253, + 227, 79, 1, 204, 241, 227, 79, 1, 241, 220, 227, 79, 1, 241, 209, 227, + 79, 1, 241, 204, 227, 79, 1, 213, 93, 227, 79, 1, 219, 21, 227, 79, 1, + 207, 36, 227, 79, 1, 206, 122, 227, 79, 1, 242, 58, 227, 79, 1, 241, 100, + 227, 79, 1, 188, 227, 79, 1, 172, 227, 79, 1, 215, 245, 227, 79, 1, 249, + 136, 227, 79, 1, 248, 200, 227, 79, 1, 178, 227, 79, 1, 183, 227, 79, 1, + 213, 252, 227, 79, 1, 194, 227, 79, 1, 203, 90, 227, 79, 1, 210, 114, + 227, 79, 1, 208, 179, 227, 79, 1, 212, 64, 227, 79, 1, 144, 227, 79, 22, + 2, 252, 138, 227, 79, 22, 2, 70, 227, 79, 22, 2, 228, 151, 227, 79, 22, + 2, 66, 227, 79, 22, 2, 203, 182, 227, 79, 22, 2, 72, 227, 79, 22, 2, 251, + 176, 227, 79, 22, 2, 74, 227, 79, 22, 2, 250, 139, 227, 79, 2, 202, 208, + 227, 79, 2, 218, 100, 227, 79, 252, 3, 54, 227, 79, 238, 146, 54, 227, + 79, 41, 54, 227, 79, 211, 193, 81, 227, 79, 53, 211, 193, 81, 227, 79, + 242, 10, 227, 79, 53, 242, 10, 209, 6, 209, 14, 1, 212, 47, 209, 6, 209, + 14, 1, 207, 9, 209, 6, 209, 14, 1, 249, 107, 209, 6, 209, 14, 1, 247, + 179, 209, 6, 209, 14, 1, 242, 38, 209, 6, 209, 14, 1, 236, 74, 209, 6, + 209, 14, 1, 222, 206, 209, 6, 209, 14, 1, 219, 250, 209, 6, 209, 14, 1, + 225, 152, 209, 6, 209, 14, 1, 220, 144, 209, 6, 209, 14, 1, 203, 86, 209, + 6, 209, 14, 1, 216, 192, 209, 6, 209, 14, 1, 200, 90, 209, 6, 209, 14, 1, + 213, 231, 209, 6, 209, 14, 1, 234, 224, 209, 6, 209, 14, 1, 227, 84, 209, + 6, 209, 14, 1, 227, 242, 209, 6, 209, 14, 1, 218, 57, 209, 6, 209, 14, 1, + 251, 185, 209, 6, 209, 14, 1, 238, 253, 209, 6, 209, 14, 1, 228, 152, + 209, 6, 209, 14, 1, 204, 25, 209, 6, 209, 14, 1, 217, 108, 209, 6, 209, + 14, 1, 238, 241, 209, 6, 209, 14, 1, 222, 219, 209, 6, 209, 14, 17, 199, + 81, 209, 6, 209, 14, 17, 102, 209, 6, 209, 14, 17, 105, 209, 6, 209, 14, + 17, 147, 209, 6, 209, 14, 17, 149, 209, 6, 209, 14, 17, 164, 209, 6, 209, + 14, 17, 187, 209, 6, 209, 14, 17, 210, 135, 209, 6, 209, 14, 17, 192, + 209, 6, 209, 14, 17, 219, 113, 247, 31, 2, 247, 149, 247, 31, 2, 251, 33, + 247, 31, 2, 202, 203, 247, 31, 1, 252, 138, 247, 31, 1, 70, 247, 31, 1, + 66, 247, 31, 1, 72, 247, 31, 1, 227, 105, 247, 31, 1, 226, 206, 247, 31, + 1, 236, 86, 247, 31, 1, 235, 198, 247, 31, 1, 219, 252, 247, 31, 1, 247, + 189, 247, 31, 1, 247, 36, 247, 31, 1, 227, 247, 247, 31, 1, 227, 214, + 247, 31, 1, 218, 59, 247, 31, 1, 204, 252, 247, 31, 1, 204, 240, 247, 31, + 1, 241, 219, 247, 31, 1, 241, 203, 247, 31, 1, 219, 20, 247, 31, 1, 207, + 32, 247, 31, 1, 206, 121, 247, 31, 1, 242, 57, 247, 31, 1, 241, 99, 247, + 31, 1, 220, 157, 247, 31, 1, 216, 210, 247, 31, 1, 215, 244, 247, 31, 1, + 249, 134, 247, 31, 1, 248, 199, 247, 31, 1, 222, 233, 247, 31, 1, 199, + 165, 247, 31, 1, 200, 109, 247, 31, 1, 213, 248, 247, 31, 1, 225, 175, + 247, 31, 1, 201, 113, 247, 31, 1, 212, 61, 247, 31, 1, 234, 233, 247, 31, + 22, 2, 62, 247, 31, 22, 2, 70, 247, 31, 22, 2, 228, 151, 247, 31, 22, 2, + 66, 247, 31, 22, 2, 203, 182, 247, 31, 22, 2, 72, 247, 31, 22, 2, 251, + 176, 247, 31, 22, 2, 74, 247, 31, 22, 2, 250, 139, 247, 31, 22, 2, 217, + 105, 247, 31, 163, 81, 247, 31, 250, 140, 81, 247, 31, 202, 208, 247, 31, + 222, 231, 247, 31, 17, 199, 81, 247, 31, 17, 102, 247, 31, 17, 105, 247, + 31, 17, 147, 247, 31, 17, 149, 247, 31, 17, 164, 247, 31, 17, 187, 247, + 31, 17, 210, 135, 247, 31, 17, 192, 247, 31, 17, 219, 113, 247, 31, 211, + 193, 81, 247, 31, 242, 10, 247, 31, 53, 242, 10, 247, 31, 214, 79, 81, + 222, 204, 1, 62, 222, 204, 1, 70, 222, 204, 1, 66, 222, 204, 1, 72, 222, + 204, 1, 74, 222, 204, 1, 161, 222, 204, 1, 226, 207, 222, 204, 1, 236, + 89, 222, 204, 1, 235, 199, 222, 204, 1, 247, 190, 222, 204, 1, 247, 37, + 222, 204, 1, 227, 248, 222, 204, 1, 227, 215, 222, 204, 1, 218, 60, 222, + 204, 1, 204, 253, 222, 204, 1, 204, 241, 222, 204, 1, 241, 220, 222, 204, + 1, 241, 204, 222, 204, 1, 219, 21, 222, 204, 1, 207, 36, 222, 204, 1, + 206, 122, 222, 204, 1, 242, 58, 222, 204, 1, 241, 100, 222, 204, 1, 188, + 222, 204, 1, 172, 222, 204, 1, 215, 245, 222, 204, 1, 249, 136, 222, 204, + 1, 248, 200, 222, 204, 1, 178, 222, 204, 1, 213, 252, 222, 204, 1, 194, + 222, 204, 1, 203, 90, 222, 204, 1, 212, 64, 222, 204, 1, 144, 222, 204, + 1, 212, 215, 222, 204, 2, 218, 100, 222, 204, 252, 3, 54, 222, 204, 211, + 193, 81, 222, 204, 33, 209, 228, 186, 2, 247, 149, 186, 2, 251, 33, 186, + 2, 202, 203, 186, 1, 62, 186, 1, 252, 138, 186, 1, 70, 186, 1, 228, 151, + 186, 1, 66, 186, 1, 203, 182, 186, 1, 109, 146, 186, 1, 109, 212, 216, + 186, 1, 109, 156, 186, 1, 109, 224, 139, 186, 1, 72, 186, 1, 251, 176, + 186, 1, 74, 186, 1, 250, 139, 186, 1, 161, 186, 1, 226, 207, 186, 1, 236, + 89, 186, 1, 235, 199, 186, 1, 219, 253, 186, 1, 247, 190, 186, 1, 247, + 37, 186, 1, 227, 248, 186, 1, 227, 215, 186, 1, 218, 60, 186, 1, 204, + 253, 186, 1, 204, 241, 186, 1, 241, 220, 186, 1, 241, 204, 186, 1, 219, + 21, 186, 1, 207, 36, 186, 1, 206, 122, 186, 1, 242, 58, 186, 1, 241, 100, + 186, 1, 188, 186, 1, 172, 186, 1, 215, 245, 186, 1, 249, 136, 186, 1, + 248, 200, 186, 1, 178, 186, 1, 183, 186, 1, 213, 252, 186, 1, 194, 186, + 1, 224, 138, 186, 1, 203, 90, 186, 1, 210, 114, 186, 1, 208, 179, 186, 1, + 212, 64, 186, 1, 144, 186, 22, 2, 252, 138, 186, 22, 2, 70, 186, 22, 2, + 228, 151, 186, 22, 2, 66, 186, 22, 2, 203, 182, 186, 22, 2, 109, 146, + 186, 22, 2, 109, 212, 216, 186, 22, 2, 109, 156, 186, 22, 2, 109, 224, + 139, 186, 22, 2, 72, 186, 22, 2, 251, 176, 186, 22, 2, 74, 186, 22, 2, + 250, 139, 186, 2, 202, 208, 186, 2, 250, 122, 186, 2, 227, 201, 186, 2, + 203, 226, 186, 217, 86, 186, 242, 10, 186, 53, 242, 10, 186, 252, 3, 54, + 186, 210, 154, 186, 212, 9, 81, 186, 2, 218, 100, 186, 22, 67, 81, 186, + 238, 30, 209, 250, 22, 81, 186, 207, 194, 81, 186, 17, 199, 81, 186, 17, + 102, 186, 17, 105, 186, 17, 147, 186, 17, 149, 186, 17, 164, 186, 17, + 187, 186, 17, 210, 135, 186, 17, 192, 186, 17, 219, 113, 186, 238, 215, + 186, 2, 209, 177, 186, 234, 130, 186, 243, 41, 54, 186, 211, 193, 222, + 149, 186, 211, 193, 222, 148, 143, 250, 234, 17, 102, 143, 250, 234, 17, + 105, 143, 250, 234, 17, 147, 143, 250, 234, 17, 149, 143, 250, 234, 17, + 164, 143, 250, 234, 17, 187, 143, 250, 234, 17, 210, 135, 143, 250, 234, + 17, 192, 143, 250, 234, 17, 219, 113, 143, 250, 234, 41, 206, 166, 143, + 250, 234, 41, 204, 159, 143, 250, 234, 41, 206, 67, 143, 250, 234, 41, + 236, 235, 143, 250, 234, 41, 237, 104, 143, 250, 234, 41, 209, 92, 143, + 250, 234, 41, 210, 129, 143, 250, 234, 41, 238, 222, 143, 250, 234, 41, + 219, 108, 143, 250, 234, 41, 112, 233, 82, 143, 250, 234, 41, 112, 206, + 50, 226, 177, 1, 62, 226, 177, 1, 252, 138, 226, 177, 1, 70, 226, 177, 1, + 66, 226, 177, 1, 72, 226, 177, 1, 251, 176, 226, 177, 1, 74, 226, 177, 1, + 250, 139, 226, 177, 1, 161, 226, 177, 1, 226, 207, 226, 177, 1, 236, 89, + 226, 177, 1, 235, 235, 226, 177, 1, 235, 199, 226, 177, 1, 219, 253, 226, + 177, 1, 247, 190, 226, 177, 1, 247, 37, 226, 177, 1, 227, 248, 226, 177, + 1, 227, 194, 226, 177, 1, 218, 60, 226, 177, 1, 204, 253, 226, 177, 1, + 204, 241, 226, 177, 1, 241, 220, 226, 177, 1, 241, 204, 226, 177, 1, 219, + 21, 226, 177, 1, 207, 36, 226, 177, 1, 206, 122, 226, 177, 1, 242, 58, + 226, 177, 1, 241, 210, 226, 177, 1, 241, 100, 226, 177, 1, 188, 226, 177, + 1, 172, 226, 177, 1, 215, 245, 226, 177, 1, 249, 136, 226, 177, 1, 249, + 44, 226, 177, 1, 248, 200, 226, 177, 1, 178, 226, 177, 1, 183, 226, 177, + 1, 213, 252, 226, 177, 1, 194, 226, 177, 1, 203, 90, 226, 177, 1, 212, + 64, 226, 177, 1, 144, 226, 177, 1, 224, 138, 226, 177, 22, 2, 252, 138, + 226, 177, 22, 2, 70, 226, 177, 22, 2, 228, 151, 226, 177, 22, 2, 66, 226, + 177, 22, 2, 72, 226, 177, 22, 2, 251, 176, 226, 177, 22, 2, 74, 226, 177, + 22, 2, 250, 139, 226, 177, 2, 251, 33, 226, 177, 2, 202, 208, 226, 177, + 2, 218, 100, 226, 177, 2, 210, 104, 226, 177, 242, 10, 226, 177, 53, 242, + 10, 226, 177, 200, 238, 210, 154, 226, 177, 211, 193, 81, 226, 177, 53, + 211, 193, 81, 226, 177, 252, 3, 54, 226, 177, 2, 207, 236, 221, 25, 1, + 62, 221, 25, 1, 70, 221, 25, 1, 66, 221, 25, 1, 72, 221, 25, 1, 161, 221, + 25, 1, 226, 207, 221, 25, 1, 236, 89, 221, 25, 1, 235, 199, 221, 25, 1, + 247, 190, 221, 25, 1, 247, 37, 221, 25, 1, 227, 248, 221, 25, 1, 227, + 194, 221, 25, 1, 218, 60, 221, 25, 1, 204, 253, 221, 25, 1, 204, 241, + 221, 25, 1, 241, 220, 221, 25, 1, 241, 210, 221, 25, 1, 241, 204, 221, + 25, 1, 219, 21, 221, 25, 1, 207, 36, 221, 25, 1, 206, 122, 221, 25, 1, + 242, 58, 221, 25, 1, 241, 100, 221, 25, 1, 188, 221, 25, 1, 172, 221, 25, + 1, 215, 245, 221, 25, 1, 249, 136, 221, 25, 1, 248, 200, 221, 25, 1, 178, + 221, 25, 1, 183, 221, 25, 1, 213, 252, 221, 25, 1, 194, 221, 25, 1, 203, + 90, 221, 25, 1, 212, 64, 221, 25, 1, 144, 221, 25, 1, 212, 215, 221, 25, + 1, 213, 93, 221, 25, 211, 193, 81, 226, 169, 1, 62, 226, 169, 1, 252, + 138, 226, 169, 1, 70, 226, 169, 1, 228, 151, 226, 169, 1, 66, 226, 169, + 1, 203, 182, 226, 169, 1, 72, 226, 169, 1, 251, 176, 226, 169, 1, 74, + 226, 169, 1, 250, 139, 226, 169, 1, 161, 226, 169, 1, 226, 207, 226, 169, + 1, 236, 89, 226, 169, 1, 235, 235, 226, 169, 1, 235, 199, 226, 169, 1, + 219, 253, 226, 169, 1, 247, 190, 226, 169, 1, 247, 37, 226, 169, 1, 227, + 248, 226, 169, 1, 227, 194, 226, 169, 1, 227, 215, 226, 169, 1, 218, 60, + 226, 169, 1, 204, 253, 226, 169, 1, 204, 241, 226, 169, 1, 241, 220, 226, + 169, 1, 241, 210, 226, 169, 1, 212, 215, 226, 169, 1, 241, 204, 226, 169, + 1, 219, 21, 226, 169, 1, 207, 36, 226, 169, 1, 206, 122, 226, 169, 1, + 242, 58, 226, 169, 1, 241, 100, 226, 169, 1, 188, 226, 169, 1, 172, 226, + 169, 1, 215, 245, 226, 169, 1, 249, 136, 226, 169, 1, 249, 44, 226, 169, + 1, 248, 200, 226, 169, 1, 178, 226, 169, 1, 183, 226, 169, 1, 213, 252, + 226, 169, 1, 194, 226, 169, 1, 203, 90, 226, 169, 1, 210, 114, 226, 169, + 1, 212, 64, 226, 169, 1, 144, 226, 169, 2, 251, 33, 226, 169, 22, 2, 252, + 138, 226, 169, 22, 2, 70, 226, 169, 22, 2, 228, 151, 226, 169, 22, 2, 66, + 226, 169, 22, 2, 203, 182, 226, 169, 22, 2, 72, 226, 169, 22, 2, 251, + 176, 226, 169, 22, 2, 74, 226, 169, 22, 2, 250, 139, 226, 169, 2, 218, + 100, 226, 169, 2, 202, 208, 226, 169, 17, 199, 81, 226, 169, 17, 102, + 226, 169, 17, 105, 226, 169, 17, 147, 226, 169, 17, 149, 226, 169, 17, + 164, 226, 169, 17, 187, 226, 169, 17, 210, 135, 226, 169, 17, 192, 226, + 169, 17, 219, 113, 235, 82, 2, 38, 251, 34, 56, 235, 82, 2, 247, 149, + 235, 82, 2, 251, 33, 235, 82, 2, 202, 203, 235, 82, 1, 62, 235, 82, 1, + 252, 138, 235, 82, 1, 70, 235, 82, 1, 228, 151, 235, 82, 1, 66, 235, 82, + 1, 203, 182, 235, 82, 1, 109, 146, 235, 82, 1, 109, 156, 235, 82, 1, 238, + 255, 235, 82, 1, 251, 176, 235, 82, 1, 217, 63, 235, 82, 1, 250, 139, + 235, 82, 1, 161, 235, 82, 1, 226, 207, 235, 82, 1, 236, 89, 235, 82, 1, + 235, 199, 235, 82, 1, 219, 253, 235, 82, 1, 247, 190, 235, 82, 1, 247, + 37, 235, 82, 1, 227, 248, 235, 82, 1, 227, 215, 235, 82, 1, 218, 60, 235, + 82, 1, 204, 253, 235, 82, 1, 204, 241, 235, 82, 1, 241, 220, 235, 82, 1, + 241, 204, 235, 82, 1, 219, 21, 235, 82, 1, 207, 36, 235, 82, 1, 206, 122, + 235, 82, 1, 242, 58, 235, 82, 1, 241, 100, 235, 82, 1, 188, 235, 82, 1, + 172, 235, 82, 1, 215, 245, 235, 82, 1, 249, 136, 235, 82, 1, 248, 200, + 235, 82, 1, 178, 235, 82, 1, 183, 235, 82, 1, 213, 252, 235, 82, 1, 194, + 235, 82, 1, 224, 138, 235, 82, 1, 203, 90, 235, 82, 1, 210, 114, 235, 82, + 1, 208, 179, 235, 82, 1, 212, 64, 235, 82, 1, 144, 235, 82, 2, 218, 100, + 235, 82, 2, 250, 122, 235, 82, 22, 2, 252, 138, 235, 82, 22, 2, 70, 235, + 82, 22, 2, 228, 151, 235, 82, 22, 2, 66, 235, 82, 22, 2, 203, 182, 235, + 82, 22, 2, 109, 146, 235, 82, 22, 2, 109, 212, 216, 235, 82, 22, 2, 238, + 255, 235, 82, 22, 2, 251, 176, 235, 82, 22, 2, 217, 63, 235, 82, 22, 2, + 250, 139, 235, 82, 2, 202, 208, 235, 82, 217, 86, 235, 82, 250, 140, 225, + 2, 81, 235, 82, 2, 215, 111, 235, 82, 1, 203, 56, 251, 33, 235, 82, 1, + 203, 56, 53, 251, 33, 235, 82, 1, 109, 212, 216, 235, 82, 1, 109, 224, + 139, 235, 82, 22, 2, 109, 156, 235, 82, 22, 2, 109, 224, 139, 38, 235, + 82, 17, 199, 81, 38, 235, 82, 17, 102, 38, 235, 82, 17, 105, 38, 235, 82, + 17, 147, 38, 235, 82, 17, 149, 38, 235, 82, 17, 164, 38, 235, 82, 17, + 187, 38, 235, 82, 1, 62, 38, 235, 82, 1, 161, 38, 235, 82, 1, 188, 38, + 235, 82, 1, 202, 234, 38, 235, 82, 1, 172, 195, 1, 62, 195, 1, 252, 138, + 195, 1, 70, 195, 1, 228, 151, 195, 1, 66, 195, 1, 203, 182, 195, 1, 109, + 146, 195, 1, 109, 212, 216, 195, 1, 109, 156, 195, 1, 109, 224, 139, 195, + 1, 72, 195, 1, 251, 176, 195, 1, 74, 195, 1, 250, 139, 195, 1, 161, 195, + 1, 226, 207, 195, 1, 236, 89, 195, 1, 235, 199, 195, 1, 219, 253, 195, 1, + 219, 202, 195, 1, 247, 190, 195, 1, 247, 37, 195, 1, 227, 248, 195, 1, + 227, 215, 195, 1, 218, 60, 195, 1, 218, 43, 195, 1, 204, 253, 195, 1, + 204, 241, 195, 1, 241, 220, 195, 1, 241, 204, 195, 1, 219, 21, 195, 1, + 207, 36, 195, 1, 206, 122, 195, 1, 242, 58, 195, 1, 241, 100, 195, 1, + 188, 195, 1, 219, 154, 195, 1, 172, 195, 1, 215, 245, 195, 1, 249, 136, + 195, 1, 248, 200, 195, 1, 178, 195, 1, 221, 214, 195, 1, 183, 195, 1, + 213, 252, 195, 1, 213, 93, 195, 1, 194, 195, 1, 224, 223, 195, 1, 201, + 114, 195, 1, 210, 114, 195, 1, 208, 179, 195, 1, 212, 64, 195, 1, 144, + 195, 22, 2, 252, 138, 195, 22, 2, 70, 195, 22, 2, 228, 151, 195, 22, 2, + 66, 195, 22, 2, 203, 182, 195, 22, 2, 109, 146, 195, 22, 2, 109, 212, + 216, 195, 22, 2, 109, 156, 195, 22, 2, 109, 224, 139, 195, 22, 2, 72, + 195, 22, 2, 251, 176, 195, 22, 2, 74, 195, 22, 2, 250, 139, 195, 2, 202, + 208, 195, 2, 247, 149, 195, 2, 251, 33, 195, 2, 202, 203, 195, 2, 218, + 100, 195, 2, 250, 122, 195, 2, 47, 251, 33, 195, 217, 86, 195, 209, 176, + 195, 242, 10, 195, 53, 242, 10, 195, 246, 70, 195, 236, 53, 237, 93, 195, + 252, 3, 54, 195, 17, 199, 81, 195, 17, 102, 195, 17, 105, 195, 17, 147, + 195, 17, 149, 195, 17, 164, 195, 17, 187, 195, 17, 210, 135, 195, 17, + 192, 195, 17, 219, 113, 195, 215, 133, 81, 195, 228, 75, 54, 205, 217, + 251, 62, 205, 217, 1, 62, 205, 217, 1, 252, 138, 205, 217, 1, 70, 205, + 217, 1, 228, 151, 205, 217, 1, 66, 205, 217, 1, 203, 182, 205, 217, 1, + 109, 146, 205, 217, 1, 109, 212, 216, 205, 217, 1, 109, 156, 205, 217, 1, + 109, 224, 139, 205, 217, 1, 72, 205, 217, 1, 251, 176, 205, 217, 1, 74, + 205, 217, 1, 250, 139, 205, 217, 1, 161, 205, 217, 1, 226, 207, 205, 217, + 1, 236, 89, 205, 217, 1, 235, 199, 205, 217, 1, 219, 253, 205, 217, 1, + 247, 190, 205, 217, 1, 247, 37, 205, 217, 1, 227, 248, 205, 217, 1, 227, + 215, 205, 217, 1, 218, 60, 205, 217, 1, 204, 253, 205, 217, 1, 204, 241, + 205, 217, 1, 241, 220, 205, 217, 1, 241, 204, 205, 217, 1, 219, 21, 205, + 217, 1, 207, 36, 205, 217, 1, 206, 122, 205, 217, 1, 242, 58, 205, 217, + 1, 241, 100, 205, 217, 1, 188, 205, 217, 1, 172, 205, 217, 1, 215, 245, + 205, 217, 1, 249, 136, 205, 217, 1, 248, 200, 205, 217, 1, 178, 205, 217, + 1, 183, 205, 217, 1, 213, 252, 205, 217, 1, 194, 205, 217, 1, 203, 90, + 205, 217, 1, 210, 114, 205, 217, 1, 208, 179, 205, 217, 1, 212, 64, 205, + 217, 1, 144, 205, 217, 22, 2, 252, 138, 205, 217, 22, 2, 70, 205, 217, + 22, 2, 228, 151, 205, 217, 22, 2, 66, 205, 217, 22, 2, 203, 182, 205, + 217, 22, 2, 109, 146, 205, 217, 22, 2, 109, 212, 216, 205, 217, 22, 2, + 109, 156, 205, 217, 22, 2, 109, 224, 139, 205, 217, 22, 2, 72, 205, 217, + 22, 2, 209, 250, 72, 205, 217, 22, 2, 251, 176, 205, 217, 22, 2, 74, 205, + 217, 22, 2, 209, 250, 74, 205, 217, 22, 2, 250, 139, 205, 217, 2, 247, + 149, 205, 217, 2, 251, 33, 205, 217, 2, 202, 203, 205, 217, 2, 202, 208, + 205, 217, 2, 218, 100, 205, 217, 2, 250, 122, 205, 217, 235, 11, 205, + 217, 252, 3, 54, 205, 217, 217, 86, 205, 217, 17, 199, 81, 205, 217, 17, + 102, 205, 217, 17, 105, 205, 217, 17, 147, 205, 217, 17, 149, 205, 217, + 17, 164, 205, 217, 17, 187, 205, 217, 17, 210, 135, 205, 217, 17, 192, + 205, 217, 17, 219, 113, 196, 1, 62, 196, 1, 252, 138, 196, 1, 70, 196, 1, + 228, 151, 196, 1, 66, 196, 1, 203, 182, 196, 1, 109, 146, 196, 1, 109, + 212, 216, 196, 1, 109, 156, 196, 1, 109, 224, 139, 196, 1, 72, 196, 1, + 251, 176, 196, 1, 74, 196, 1, 250, 139, 196, 1, 161, 196, 1, 226, 207, + 196, 1, 236, 89, 196, 1, 235, 199, 196, 1, 219, 253, 196, 1, 247, 190, + 196, 1, 247, 37, 196, 1, 227, 248, 196, 1, 227, 215, 196, 1, 218, 60, + 196, 1, 204, 253, 196, 1, 204, 241, 196, 1, 241, 220, 196, 1, 241, 204, + 196, 1, 219, 21, 196, 1, 207, 36, 196, 1, 206, 122, 196, 1, 242, 58, 196, + 1, 241, 100, 196, 1, 188, 196, 1, 172, 196, 1, 215, 245, 196, 1, 249, + 136, 196, 1, 248, 200, 196, 1, 178, 196, 1, 183, 196, 1, 213, 252, 196, + 1, 194, 196, 1, 203, 90, 196, 1, 210, 114, 196, 1, 208, 179, 196, 1, 212, + 64, 196, 1, 144, 196, 22, 2, 252, 138, 196, 22, 2, 70, 196, 22, 2, 228, + 151, 196, 22, 2, 66, 196, 22, 2, 203, 182, 196, 22, 2, 109, 146, 196, 22, + 2, 109, 212, 216, 196, 22, 2, 72, 196, 22, 2, 251, 176, 196, 22, 2, 74, + 196, 22, 2, 250, 139, 196, 2, 247, 149, 196, 2, 251, 33, 196, 2, 202, + 203, 196, 2, 202, 208, 196, 2, 218, 100, 196, 2, 209, 177, 196, 242, 10, + 196, 53, 242, 10, 196, 210, 155, 240, 182, 196, 210, 155, 148, 196, 213, + 130, 222, 149, 196, 213, 130, 222, 148, 196, 213, 130, 222, 147, 196, + 238, 171, 76, 206, 127, 81, 196, 211, 193, 134, 3, 205, 93, 26, 204, 99, + 217, 20, 196, 211, 193, 134, 3, 205, 93, 26, 239, 180, 242, 242, 196, + 211, 193, 134, 3, 213, 195, 26, 239, 180, 242, 242, 196, 211, 193, 134, + 3, 213, 195, 26, 239, 180, 53, 242, 242, 196, 211, 193, 134, 3, 213, 195, + 26, 239, 180, 205, 83, 242, 242, 196, 211, 193, 134, 53, 213, 26, 196, + 211, 193, 134, 53, 213, 27, 3, 213, 194, 196, 211, 193, 134, 3, 53, 242, + 242, 196, 211, 193, 134, 3, 205, 83, 242, 242, 196, 211, 193, 134, 3, + 214, 90, 242, 242, 196, 211, 193, 134, 3, 210, 152, 242, 242, 196, 211, + 193, 134, 3, 246, 153, 26, 213, 194, 196, 211, 193, 134, 3, 246, 153, 26, + 120, 238, 173, 196, 211, 193, 134, 3, 246, 153, 26, 236, 229, 238, 173, + 196, 1, 206, 46, 251, 109, 70, 196, 1, 204, 143, 251, 109, 70, 196, 1, + 204, 143, 251, 109, 228, 151, 196, 1, 251, 109, 66, 196, 22, 2, 251, 109, + 66, 196, 22, 2, 251, 109, 203, 182, 221, 127, 1, 62, 221, 127, 1, 252, + 138, 221, 127, 1, 70, 221, 127, 1, 228, 151, 221, 127, 1, 66, 221, 127, + 1, 203, 182, 221, 127, 1, 109, 146, 221, 127, 1, 109, 212, 216, 221, 127, + 1, 109, 156, 221, 127, 1, 109, 224, 139, 221, 127, 1, 72, 221, 127, 1, + 251, 176, 221, 127, 1, 74, 221, 127, 1, 250, 139, 221, 127, 1, 161, 221, + 127, 1, 226, 207, 221, 127, 1, 236, 89, 221, 127, 1, 235, 199, 221, 127, + 1, 219, 253, 221, 127, 1, 247, 190, 221, 127, 1, 247, 37, 221, 127, 1, + 227, 248, 221, 127, 1, 227, 215, 221, 127, 1, 218, 60, 221, 127, 1, 204, + 253, 221, 127, 1, 204, 241, 221, 127, 1, 241, 220, 221, 127, 1, 241, 204, + 221, 127, 1, 219, 21, 221, 127, 1, 207, 36, 221, 127, 1, 206, 122, 221, + 127, 1, 242, 58, 221, 127, 1, 241, 100, 221, 127, 1, 188, 221, 127, 1, + 172, 221, 127, 1, 215, 245, 221, 127, 1, 249, 136, 221, 127, 1, 248, 200, + 221, 127, 1, 178, 221, 127, 1, 183, 221, 127, 1, 213, 252, 221, 127, 1, + 194, 221, 127, 1, 203, 90, 221, 127, 1, 210, 114, 221, 127, 1, 208, 179, + 221, 127, 1, 212, 64, 221, 127, 1, 144, 221, 127, 1, 224, 138, 221, 127, + 22, 2, 252, 138, 221, 127, 22, 2, 70, 221, 127, 22, 2, 228, 151, 221, + 127, 22, 2, 66, 221, 127, 22, 2, 203, 182, 221, 127, 22, 2, 109, 146, + 221, 127, 22, 2, 109, 212, 216, 221, 127, 22, 2, 109, 156, 221, 127, 22, + 2, 109, 224, 139, 221, 127, 22, 2, 72, 221, 127, 22, 2, 251, 176, 221, + 127, 22, 2, 74, 221, 127, 22, 2, 250, 139, 221, 127, 2, 251, 33, 221, + 127, 2, 202, 203, 221, 127, 2, 202, 208, 221, 127, 2, 250, 231, 221, 127, + 242, 10, 221, 127, 53, 242, 10, 221, 127, 252, 3, 54, 221, 127, 2, 233, + 70, 221, 127, 17, 199, 81, 221, 127, 17, 102, 221, 127, 17, 105, 221, + 127, 17, 147, 221, 127, 17, 149, 221, 127, 17, 164, 221, 127, 17, 187, + 221, 127, 17, 210, 135, 221, 127, 17, 192, 221, 127, 17, 219, 113, 92, + 248, 161, 3, 217, 21, 92, 212, 228, 248, 160, 92, 53, 248, 161, 3, 217, + 21, 92, 205, 83, 248, 161, 3, 217, 21, 92, 248, 161, 3, 53, 217, 21, 92, + 212, 228, 248, 161, 3, 217, 21, 92, 212, 228, 248, 161, 3, 53, 217, 21, + 92, 228, 50, 248, 160, 92, 228, 50, 248, 161, 3, 53, 217, 21, 92, 207, + 172, 248, 160, 92, 207, 172, 248, 161, 3, 217, 21, 92, 207, 172, 248, + 161, 3, 53, 217, 21, 92, 204, 185, 207, 172, 248, 161, 3, 53, 217, 21, + 206, 253, 1, 62, 206, 253, 1, 252, 138, 206, 253, 1, 70, 206, 253, 1, + 228, 151, 206, 253, 1, 66, 206, 253, 1, 203, 182, 206, 253, 1, 72, 206, + 253, 1, 251, 176, 206, 253, 1, 74, 206, 253, 1, 250, 139, 206, 253, 1, + 161, 206, 253, 1, 226, 207, 206, 253, 1, 236, 89, 206, 253, 1, 235, 199, + 206, 253, 1, 219, 253, 206, 253, 1, 247, 190, 206, 253, 1, 247, 37, 206, + 253, 1, 227, 248, 206, 253, 1, 227, 215, 206, 253, 1, 218, 60, 206, 253, + 1, 204, 253, 206, 253, 1, 204, 241, 206, 253, 1, 241, 220, 206, 253, 1, + 241, 204, 206, 253, 1, 219, 21, 206, 253, 1, 207, 36, 206, 253, 1, 206, + 122, 206, 253, 1, 242, 58, 206, 253, 1, 241, 100, 206, 253, 1, 188, 206, + 253, 1, 172, 206, 253, 1, 215, 245, 206, 253, 1, 249, 136, 206, 253, 1, + 248, 200, 206, 253, 1, 178, 206, 253, 1, 183, 206, 253, 1, 213, 252, 206, + 253, 1, 194, 206, 253, 1, 203, 90, 206, 253, 1, 210, 114, 206, 253, 1, + 212, 64, 206, 253, 1, 144, 206, 253, 1, 212, 215, 206, 253, 2, 251, 33, + 206, 253, 2, 202, 203, 206, 253, 22, 2, 252, 138, 206, 253, 22, 2, 70, + 206, 253, 22, 2, 228, 151, 206, 253, 22, 2, 66, 206, 253, 22, 2, 203, + 182, 206, 253, 22, 2, 72, 206, 253, 22, 2, 251, 176, 206, 253, 22, 2, 74, + 206, 253, 22, 2, 250, 139, 206, 253, 2, 202, 208, 206, 253, 2, 218, 100, + 206, 253, 17, 199, 81, 206, 253, 17, 102, 206, 253, 17, 105, 206, 253, + 17, 147, 206, 253, 17, 149, 206, 253, 17, 164, 206, 253, 17, 187, 206, + 253, 17, 210, 135, 206, 253, 17, 192, 206, 253, 17, 219, 113, 251, 180, + 1, 161, 251, 180, 1, 226, 207, 251, 180, 1, 219, 253, 251, 180, 1, 188, + 251, 180, 1, 207, 36, 251, 180, 1, 251, 109, 207, 36, 251, 180, 1, 172, + 251, 180, 1, 215, 245, 251, 180, 1, 249, 136, 251, 180, 1, 178, 251, 180, + 1, 227, 248, 251, 180, 1, 247, 37, 251, 180, 1, 206, 122, 251, 180, 1, + 213, 252, 251, 180, 1, 194, 251, 180, 1, 212, 64, 251, 180, 1, 218, 60, + 251, 180, 1, 144, 251, 180, 1, 62, 251, 180, 1, 242, 58, 251, 180, 1, + 241, 100, 251, 180, 1, 236, 89, 251, 180, 1, 251, 109, 236, 89, 251, 180, + 1, 235, 199, 251, 180, 1, 248, 200, 251, 180, 1, 227, 215, 251, 180, 111, + 2, 179, 194, 251, 180, 111, 2, 179, 213, 252, 251, 180, 111, 2, 179, 224, + 197, 213, 252, 251, 180, 22, 2, 62, 251, 180, 22, 2, 252, 138, 251, 180, + 22, 2, 70, 251, 180, 22, 2, 228, 151, 251, 180, 22, 2, 66, 251, 180, 22, + 2, 203, 182, 251, 180, 22, 2, 72, 251, 180, 22, 2, 250, 117, 251, 180, + 22, 2, 74, 251, 180, 22, 2, 251, 176, 251, 180, 22, 2, 251, 101, 251, + 180, 2, 226, 149, 251, 180, 17, 199, 81, 251, 180, 17, 102, 251, 180, 17, + 105, 251, 180, 17, 147, 251, 180, 17, 149, 251, 180, 17, 164, 251, 180, + 17, 187, 251, 180, 17, 210, 135, 251, 180, 17, 192, 251, 180, 17, 219, + 113, 251, 180, 41, 206, 166, 251, 180, 41, 204, 159, 251, 180, 2, 4, 211, + 192, 251, 180, 2, 211, 192, 251, 180, 2, 212, 166, 251, 180, 16, 202, + 234, 201, 94, 246, 142, 6, 1, 219, 252, 201, 94, 246, 142, 6, 1, 62, 201, + 94, 246, 142, 6, 1, 201, 31, 201, 94, 246, 142, 6, 1, 199, 211, 201, 94, + 246, 142, 6, 1, 183, 201, 94, 246, 142, 6, 1, 199, 245, 201, 94, 246, + 142, 6, 1, 228, 151, 201, 94, 246, 142, 6, 1, 203, 182, 201, 94, 246, + 142, 6, 1, 72, 201, 94, 246, 142, 6, 1, 74, 201, 94, 246, 142, 6, 1, 251, + 76, 201, 94, 246, 142, 6, 1, 236, 89, 201, 94, 246, 142, 6, 1, 226, 88, + 201, 94, 246, 142, 6, 1, 238, 143, 201, 94, 246, 142, 6, 1, 199, 195, + 201, 94, 246, 142, 6, 1, 204, 38, 201, 94, 246, 142, 6, 1, 238, 162, 201, + 94, 246, 142, 6, 1, 217, 124, 201, 94, 246, 142, 6, 1, 204, 248, 201, 94, + 246, 142, 6, 1, 218, 86, 201, 94, 246, 142, 6, 1, 242, 58, 201, 94, 246, + 142, 6, 1, 250, 155, 201, 94, 246, 142, 6, 1, 251, 101, 201, 94, 246, + 142, 6, 1, 248, 36, 201, 94, 246, 142, 6, 1, 214, 224, 201, 94, 246, 142, + 6, 1, 234, 43, 201, 94, 246, 142, 6, 1, 233, 195, 201, 94, 246, 142, 6, + 1, 233, 122, 201, 94, 246, 142, 6, 1, 234, 166, 201, 94, 246, 142, 6, 1, + 208, 131, 201, 94, 246, 142, 6, 1, 209, 161, 201, 94, 246, 142, 6, 1, + 202, 194, 201, 94, 246, 142, 4, 1, 219, 252, 201, 94, 246, 142, 4, 1, 62, + 201, 94, 246, 142, 4, 1, 201, 31, 201, 94, 246, 142, 4, 1, 199, 211, 201, + 94, 246, 142, 4, 1, 183, 201, 94, 246, 142, 4, 1, 199, 245, 201, 94, 246, + 142, 4, 1, 228, 151, 201, 94, 246, 142, 4, 1, 203, 182, 201, 94, 246, + 142, 4, 1, 72, 201, 94, 246, 142, 4, 1, 74, 201, 94, 246, 142, 4, 1, 251, + 76, 201, 94, 246, 142, 4, 1, 236, 89, 201, 94, 246, 142, 4, 1, 226, 88, + 201, 94, 246, 142, 4, 1, 238, 143, 201, 94, 246, 142, 4, 1, 199, 195, + 201, 94, 246, 142, 4, 1, 204, 38, 201, 94, 246, 142, 4, 1, 238, 162, 201, + 94, 246, 142, 4, 1, 217, 124, 201, 94, 246, 142, 4, 1, 204, 248, 201, 94, + 246, 142, 4, 1, 218, 86, 201, 94, 246, 142, 4, 1, 242, 58, 201, 94, 246, + 142, 4, 1, 250, 155, 201, 94, 246, 142, 4, 1, 251, 101, 201, 94, 246, + 142, 4, 1, 248, 36, 201, 94, 246, 142, 4, 1, 214, 224, 201, 94, 246, 142, + 4, 1, 234, 43, 201, 94, 246, 142, 4, 1, 233, 195, 201, 94, 246, 142, 4, + 1, 233, 122, 201, 94, 246, 142, 4, 1, 234, 166, 201, 94, 246, 142, 4, 1, + 208, 131, 201, 94, 246, 142, 4, 1, 209, 161, 201, 94, 246, 142, 4, 1, + 202, 194, 201, 94, 246, 142, 17, 199, 81, 201, 94, 246, 142, 17, 102, + 201, 94, 246, 142, 17, 105, 201, 94, 246, 142, 17, 147, 201, 94, 246, + 142, 17, 149, 201, 94, 246, 142, 17, 164, 201, 94, 246, 142, 17, 187, + 201, 94, 246, 142, 17, 210, 135, 201, 94, 246, 142, 17, 192, 201, 94, + 246, 142, 17, 219, 113, 201, 94, 246, 142, 41, 206, 166, 201, 94, 246, + 142, 41, 204, 159, 201, 94, 246, 142, 41, 206, 67, 201, 94, 246, 142, 41, + 236, 235, 201, 94, 246, 142, 41, 237, 104, 201, 94, 246, 142, 41, 209, + 92, 201, 94, 246, 142, 41, 210, 129, 201, 94, 246, 142, 41, 238, 222, + 201, 94, 246, 142, 41, 219, 108, 201, 94, 246, 142, 217, 86, 216, 88, + 246, 160, 234, 151, 1, 172, 216, 88, 246, 160, 234, 151, 1, 161, 216, 88, + 246, 160, 234, 151, 1, 194, 216, 88, 246, 160, 234, 151, 1, 178, 216, 88, + 246, 160, 234, 151, 1, 242, 58, 216, 88, 246, 160, 234, 151, 1, 199, 114, + 216, 88, 246, 160, 234, 151, 1, 203, 90, 216, 88, 246, 160, 234, 151, 1, + 219, 253, 216, 88, 246, 160, 234, 151, 1, 144, 216, 88, 246, 160, 234, + 151, 1, 236, 89, 216, 88, 246, 160, 234, 151, 1, 226, 207, 216, 88, 246, + 160, 234, 151, 1, 212, 64, 216, 88, 246, 160, 234, 151, 1, 249, 136, 216, + 88, 246, 160, 234, 151, 1, 247, 190, 216, 88, 246, 160, 234, 151, 1, 207, + 36, 216, 88, 246, 160, 234, 151, 1, 206, 122, 216, 88, 246, 160, 234, + 151, 1, 188, 216, 88, 246, 160, 234, 151, 1, 215, 245, 216, 88, 246, 160, + 234, 151, 1, 213, 252, 216, 88, 246, 160, 234, 151, 1, 237, 195, 216, 88, + 246, 160, 234, 151, 1, 247, 37, 216, 88, 246, 160, 234, 151, 1, 62, 216, + 88, 246, 160, 234, 151, 1, 72, 216, 88, 246, 160, 234, 151, 1, 70, 216, + 88, 246, 160, 234, 151, 1, 74, 216, 88, 246, 160, 234, 151, 1, 66, 216, + 88, 246, 160, 234, 151, 1, 204, 46, 216, 88, 246, 160, 234, 151, 1, 232, + 240, 216, 88, 246, 160, 234, 151, 1, 47, 216, 226, 216, 88, 246, 160, + 234, 151, 1, 47, 227, 118, 216, 88, 246, 160, 234, 151, 1, 47, 207, 83, + 216, 88, 246, 160, 234, 151, 1, 47, 223, 243, 216, 88, 246, 160, 234, + 151, 1, 47, 220, 214, 216, 88, 246, 160, 234, 151, 1, 47, 156, 216, 88, + 246, 160, 234, 151, 1, 47, 201, 147, 216, 88, 246, 160, 234, 151, 1, 47, + 219, 255, 216, 88, 246, 160, 234, 151, 1, 47, 200, 123, 216, 88, 246, + 160, 234, 151, 213, 19, 150, 224, 89, 216, 88, 246, 160, 234, 151, 213, + 19, 205, 174, 216, 88, 246, 160, 234, 151, 212, 9, 235, 123, 208, 76, + 216, 88, 246, 160, 234, 151, 213, 19, 150, 168, 237, 89, 216, 88, 246, + 160, 234, 151, 213, 19, 150, 237, 89, 216, 88, 246, 160, 234, 151, 212, + 9, 235, 123, 208, 77, 237, 89, 216, 88, 246, 160, 234, 151, 212, 9, 150, + 224, 89, 216, 88, 246, 160, 234, 151, 212, 9, 205, 174, 216, 88, 246, + 160, 234, 151, 212, 9, 150, 168, 237, 89, 216, 88, 246, 160, 234, 151, + 212, 9, 150, 237, 89, 216, 88, 246, 160, 234, 151, 221, 205, 205, 174, + 216, 88, 246, 160, 234, 151, 235, 123, 208, 77, 203, 72, 216, 88, 246, + 160, 234, 151, 221, 205, 150, 168, 237, 89, 216, 88, 246, 160, 234, 151, + 221, 205, 150, 237, 89, 216, 88, 246, 160, 234, 151, 224, 57, 150, 224, + 89, 216, 88, 246, 160, 234, 151, 224, 57, 205, 174, 216, 88, 246, 160, + 234, 151, 235, 123, 208, 76, 216, 88, 246, 160, 234, 151, 224, 57, 150, + 168, 237, 89, 216, 88, 246, 160, 234, 151, 224, 57, 150, 237, 89, 216, + 88, 246, 160, 234, 151, 235, 123, 208, 77, 237, 89, 174, 1, 62, 174, 1, + 252, 138, 174, 1, 70, 174, 1, 228, 151, 174, 1, 66, 174, 1, 203, 182, + 174, 1, 109, 146, 174, 1, 109, 212, 216, 174, 1, 109, 156, 174, 1, 72, + 174, 1, 251, 176, 174, 1, 74, 174, 1, 250, 139, 174, 1, 161, 174, 1, 226, + 207, 174, 1, 236, 89, 174, 1, 235, 199, 174, 1, 219, 253, 174, 1, 247, + 190, 174, 1, 247, 37, 174, 1, 227, 248, 174, 1, 227, 215, 174, 1, 218, + 60, 174, 1, 204, 253, 174, 1, 204, 241, 174, 1, 241, 220, 174, 1, 241, + 204, 174, 1, 219, 21, 174, 1, 207, 36, 174, 1, 206, 122, 174, 1, 242, 58, + 174, 1, 241, 100, 174, 1, 188, 174, 1, 172, 174, 1, 215, 245, 174, 1, + 249, 136, 174, 1, 248, 200, 174, 1, 178, 174, 1, 183, 174, 1, 213, 252, + 174, 1, 194, 174, 1, 203, 90, 174, 1, 210, 114, 174, 1, 208, 179, 174, 1, + 212, 64, 174, 1, 144, 174, 22, 2, 252, 138, 174, 22, 2, 70, 174, 22, 2, + 228, 151, 174, 22, 2, 66, 174, 22, 2, 203, 182, 174, 22, 2, 109, 146, + 174, 22, 2, 109, 212, 216, 174, 22, 2, 109, 156, 174, 22, 2, 72, 174, 22, + 2, 251, 176, 174, 22, 2, 74, 174, 22, 2, 250, 139, 174, 2, 247, 149, 174, + 2, 251, 33, 174, 2, 202, 203, 174, 2, 202, 208, 174, 2, 250, 122, 174, + 242, 10, 174, 53, 242, 10, 174, 200, 238, 210, 154, 174, 236, 53, 237, + 92, 174, 236, 53, 237, 91, 174, 17, 199, 81, 174, 17, 102, 174, 17, 105, + 174, 17, 147, 174, 17, 149, 174, 17, 164, 174, 17, 187, 174, 17, 210, + 135, 174, 17, 192, 174, 17, 219, 113, 174, 41, 102, 174, 41, 105, 174, + 41, 147, 174, 41, 149, 174, 41, 164, 174, 41, 187, 174, 41, 210, 135, + 174, 41, 192, 174, 41, 219, 113, 174, 41, 206, 166, 174, 41, 204, 159, + 174, 41, 206, 67, 174, 41, 236, 235, 174, 41, 237, 104, 174, 41, 209, 92, + 174, 41, 210, 129, 174, 41, 238, 222, 174, 41, 219, 108, 174, 233, 81, + 203, 240, 81, 222, 151, 234, 137, 81, 222, 151, 134, 210, 106, 222, 151, + 1, 161, 222, 151, 1, 226, 207, 222, 151, 1, 236, 89, 222, 151, 1, 219, + 253, 222, 151, 1, 247, 190, 222, 151, 1, 247, 37, 222, 151, 1, 227, 248, + 222, 151, 1, 218, 60, 222, 151, 1, 207, 36, 222, 151, 1, 206, 122, 222, + 151, 1, 242, 58, 222, 151, 1, 188, 222, 151, 1, 172, 222, 151, 1, 215, + 245, 222, 151, 1, 249, 136, 222, 151, 1, 178, 222, 151, 1, 205, 32, 222, + 151, 1, 205, 22, 222, 151, 1, 239, 93, 222, 151, 1, 201, 114, 222, 151, + 1, 199, 77, 222, 151, 1, 199, 114, 222, 151, 1, 255, 142, 222, 151, 1, + 183, 222, 151, 1, 213, 252, 222, 151, 1, 194, 222, 151, 1, 210, 114, 222, + 151, 1, 212, 64, 222, 151, 1, 144, 222, 151, 1, 62, 222, 151, 208, 12, 1, + 161, 222, 151, 208, 12, 1, 226, 207, 222, 151, 208, 12, 1, 236, 89, 222, + 151, 208, 12, 1, 219, 253, 222, 151, 208, 12, 1, 247, 190, 222, 151, 208, + 12, 1, 247, 37, 222, 151, 208, 12, 1, 227, 248, 222, 151, 208, 12, 1, + 218, 60, 222, 151, 208, 12, 1, 207, 36, 222, 151, 208, 12, 1, 206, 122, + 222, 151, 208, 12, 1, 242, 58, 222, 151, 208, 12, 1, 188, 222, 151, 208, + 12, 1, 172, 222, 151, 208, 12, 1, 215, 245, 222, 151, 208, 12, 1, 249, + 136, 222, 151, 208, 12, 1, 178, 222, 151, 208, 12, 1, 205, 32, 222, 151, + 208, 12, 1, 205, 22, 222, 151, 208, 12, 1, 239, 93, 222, 151, 208, 12, 1, + 201, 114, 222, 151, 208, 12, 1, 199, 77, 222, 151, 208, 12, 1, 199, 114, + 222, 151, 208, 12, 1, 183, 222, 151, 208, 12, 1, 213, 252, 222, 151, 208, + 12, 1, 194, 222, 151, 208, 12, 1, 210, 114, 222, 151, 208, 12, 1, 212, + 64, 222, 151, 208, 12, 1, 144, 222, 151, 208, 12, 1, 62, 222, 151, 22, 2, + 252, 138, 222, 151, 22, 2, 70, 222, 151, 22, 2, 66, 222, 151, 22, 2, 72, + 222, 151, 22, 2, 74, 222, 151, 2, 251, 33, 222, 151, 2, 247, 149, 10, 2, + 62, 10, 2, 35, 24, 62, 10, 2, 35, 24, 249, 118, 10, 2, 35, 24, 236, 58, + 206, 155, 10, 2, 35, 24, 144, 10, 2, 35, 24, 228, 153, 10, 2, 35, 24, + 225, 156, 235, 28, 10, 2, 35, 24, 220, 250, 10, 2, 35, 24, 212, 50, 10, + 2, 254, 147, 10, 2, 252, 89, 10, 2, 252, 90, 24, 250, 179, 10, 2, 252, + 90, 24, 239, 124, 235, 28, 10, 2, 252, 90, 24, 236, 71, 10, 2, 252, 90, + 24, 236, 58, 206, 155, 10, 2, 252, 90, 24, 144, 10, 2, 252, 90, 24, 228, + 154, 235, 28, 10, 2, 252, 90, 24, 228, 127, 10, 2, 252, 90, 24, 225, 157, + 10, 2, 252, 90, 24, 210, 49, 10, 2, 252, 90, 24, 108, 93, 108, 93, 66, + 10, 2, 252, 90, 235, 28, 10, 2, 252, 6, 10, 2, 252, 7, 24, 249, 98, 10, + 2, 252, 7, 24, 236, 58, 206, 155, 10, 2, 252, 7, 24, 222, 77, 93, 238, + 179, 10, 2, 252, 7, 24, 210, 112, 10, 2, 252, 7, 24, 207, 0, 10, 2, 251, + 235, 10, 2, 251, 159, 10, 2, 251, 160, 24, 238, 109, 10, 2, 251, 160, 24, + 210, 11, 93, 235, 135, 10, 2, 251, 151, 10, 2, 251, 152, 24, 251, 151, + 10, 2, 251, 152, 24, 241, 29, 10, 2, 251, 152, 24, 235, 135, 10, 2, 251, + 152, 24, 144, 10, 2, 251, 152, 24, 227, 91, 10, 2, 251, 152, 24, 226, + 163, 10, 2, 251, 152, 24, 210, 65, 10, 2, 251, 152, 24, 203, 190, 10, 2, + 251, 148, 10, 2, 251, 140, 10, 2, 251, 97, 10, 2, 251, 98, 24, 210, 65, + 10, 2, 251, 85, 10, 2, 251, 86, 119, 251, 85, 10, 2, 251, 86, 126, 205, + 232, 10, 2, 251, 86, 93, 220, 148, 217, 40, 251, 86, 93, 220, 147, 10, 2, + 251, 86, 93, 220, 148, 208, 192, 10, 2, 251, 53, 10, 2, 251, 23, 10, 2, + 250, 246, 10, 2, 250, 247, 24, 225, 245, 10, 2, 250, 218, 10, 2, 250, + 186, 10, 2, 250, 181, 10, 2, 250, 182, 199, 32, 206, 155, 10, 2, 250, + 182, 227, 95, 206, 155, 10, 2, 250, 182, 119, 250, 182, 204, 210, 119, + 204, 210, 204, 210, 119, 204, 210, 216, 135, 10, 2, 250, 182, 119, 250, + 182, 119, 250, 181, 10, 2, 250, 182, 119, 250, 182, 119, 250, 182, 242, + 228, 250, 182, 119, 250, 182, 119, 250, 181, 10, 2, 250, 179, 10, 2, 250, + 175, 10, 2, 249, 136, 10, 2, 249, 118, 10, 2, 249, 112, 10, 2, 249, 105, + 10, 2, 249, 99, 10, 2, 249, 100, 119, 249, 99, 10, 2, 249, 98, 10, 2, + 148, 10, 2, 249, 76, 10, 2, 248, 188, 10, 2, 248, 189, 24, 62, 10, 2, + 248, 189, 24, 236, 49, 10, 2, 248, 189, 24, 228, 154, 235, 28, 10, 2, + 248, 36, 10, 2, 248, 37, 119, 248, 37, 252, 89, 10, 2, 248, 37, 119, 248, + 37, 204, 5, 10, 2, 248, 37, 242, 228, 248, 36, 10, 2, 248, 14, 10, 2, + 248, 15, 119, 248, 14, 10, 2, 248, 3, 10, 2, 248, 2, 10, 2, 242, 58, 10, + 2, 242, 48, 10, 2, 242, 49, 226, 132, 24, 35, 93, 222, 135, 10, 2, 242, + 49, 226, 132, 24, 251, 97, 10, 2, 242, 49, 226, 132, 24, 249, 98, 10, 2, + 242, 49, 226, 132, 24, 248, 188, 10, 2, 242, 49, 226, 132, 24, 236, 89, + 10, 2, 242, 49, 226, 132, 24, 236, 90, 93, 222, 135, 10, 2, 242, 49, 226, + 132, 24, 235, 161, 10, 2, 242, 49, 226, 132, 24, 235, 143, 10, 2, 242, + 49, 226, 132, 24, 235, 39, 10, 2, 242, 49, 226, 132, 24, 144, 10, 2, 242, + 49, 226, 132, 24, 228, 35, 10, 2, 242, 49, 226, 132, 24, 228, 36, 93, + 224, 42, 10, 2, 242, 49, 226, 132, 24, 227, 76, 10, 2, 242, 49, 226, 132, + 24, 194, 10, 2, 242, 49, 226, 132, 24, 224, 42, 10, 2, 242, 49, 226, 132, + 24, 224, 43, 93, 222, 134, 10, 2, 242, 49, 226, 132, 24, 224, 25, 10, 2, + 242, 49, 226, 132, 24, 220, 34, 10, 2, 242, 49, 226, 132, 24, 216, 136, + 93, 216, 135, 10, 2, 242, 49, 226, 132, 24, 209, 182, 10, 2, 242, 49, + 226, 132, 24, 207, 0, 10, 2, 242, 49, 226, 132, 24, 204, 48, 93, 235, + 143, 10, 2, 242, 49, 226, 132, 24, 203, 190, 10, 2, 242, 20, 10, 2, 241, + 254, 10, 2, 241, 253, 10, 2, 241, 252, 10, 2, 241, 76, 10, 2, 241, 58, + 10, 2, 241, 31, 10, 2, 241, 32, 24, 210, 65, 10, 2, 241, 29, 10, 2, 241, + 19, 10, 2, 241, 20, 227, 39, 108, 235, 29, 240, 255, 10, 2, 240, 255, 10, + 2, 239, 137, 10, 2, 239, 138, 119, 239, 137, 10, 2, 239, 138, 235, 28, + 10, 2, 239, 138, 210, 46, 10, 2, 239, 135, 10, 2, 239, 136, 24, 238, 91, + 10, 2, 239, 134, 10, 2, 239, 131, 10, 2, 239, 130, 10, 2, 239, 129, 10, + 2, 239, 125, 10, 2, 239, 123, 10, 2, 239, 124, 235, 28, 10, 2, 239, 124, + 235, 29, 235, 28, 10, 2, 239, 122, 10, 2, 239, 115, 10, 2, 72, 10, 2, + 197, 24, 216, 135, 10, 2, 197, 119, 197, 218, 90, 119, 218, 89, 10, 2, + 239, 28, 10, 2, 239, 29, 24, 35, 93, 234, 236, 93, 242, 58, 10, 2, 239, + 29, 24, 236, 49, 10, 2, 239, 29, 24, 221, 211, 10, 2, 239, 29, 24, 212, + 35, 10, 2, 239, 29, 24, 210, 65, 10, 2, 239, 29, 24, 66, 10, 2, 239, 1, + 10, 2, 238, 245, 10, 2, 238, 209, 10, 2, 238, 179, 10, 2, 238, 180, 24, + 236, 57, 10, 2, 238, 180, 24, 236, 58, 206, 155, 10, 2, 238, 180, 24, + 222, 76, 10, 2, 238, 180, 242, 228, 238, 179, 10, 2, 238, 180, 217, 40, + 238, 179, 10, 2, 238, 180, 208, 192, 10, 2, 238, 112, 10, 2, 238, 109, + 10, 2, 238, 91, 10, 2, 238, 10, 10, 2, 238, 11, 24, 62, 10, 2, 238, 11, + 24, 35, 93, 225, 93, 10, 2, 238, 11, 24, 35, 93, 225, 94, 24, 225, 93, + 10, 2, 238, 11, 24, 251, 85, 10, 2, 238, 11, 24, 249, 118, 10, 2, 238, + 11, 24, 239, 124, 235, 28, 10, 2, 238, 11, 24, 239, 124, 235, 29, 235, + 28, 10, 2, 238, 11, 24, 144, 10, 2, 238, 11, 24, 234, 236, 235, 28, 10, + 2, 238, 11, 24, 228, 154, 235, 28, 10, 2, 238, 11, 24, 227, 38, 10, 2, + 238, 11, 24, 227, 39, 208, 192, 10, 2, 238, 11, 24, 226, 13, 10, 2, 238, + 11, 24, 194, 10, 2, 238, 11, 24, 225, 94, 24, 225, 93, 10, 2, 238, 11, + 24, 224, 210, 10, 2, 238, 11, 24, 224, 42, 10, 2, 238, 11, 24, 204, 47, + 10, 2, 238, 11, 24, 204, 36, 10, 2, 236, 89, 10, 2, 236, 90, 235, 28, 10, + 2, 236, 87, 10, 2, 236, 88, 24, 35, 93, 242, 59, 93, 144, 10, 2, 236, 88, + 24, 35, 93, 144, 10, 2, 236, 88, 24, 35, 93, 228, 153, 10, 2, 236, 88, + 24, 252, 7, 206, 156, 93, 207, 24, 10, 2, 236, 88, 24, 251, 85, 10, 2, + 236, 88, 24, 250, 181, 10, 2, 236, 88, 24, 250, 180, 93, 236, 71, 10, 2, + 236, 88, 24, 249, 118, 10, 2, 236, 88, 24, 249, 77, 93, 213, 252, 10, 2, + 236, 88, 24, 248, 3, 10, 2, 236, 88, 24, 248, 4, 93, 213, 252, 10, 2, + 236, 88, 24, 242, 58, 10, 2, 236, 88, 24, 241, 76, 10, 2, 236, 88, 24, + 241, 32, 24, 210, 65, 10, 2, 236, 88, 24, 239, 135, 10, 2, 236, 88, 24, + 238, 209, 10, 2, 236, 88, 24, 238, 210, 93, 194, 10, 2, 236, 88, 24, 238, + 179, 10, 2, 236, 88, 24, 238, 180, 24, 236, 58, 206, 155, 10, 2, 236, 88, + 24, 236, 58, 206, 155, 10, 2, 236, 88, 24, 236, 49, 10, 2, 236, 88, 24, + 235, 161, 10, 2, 236, 88, 24, 235, 159, 10, 2, 236, 88, 24, 235, 160, 93, + 62, 10, 2, 236, 88, 24, 235, 144, 93, 208, 24, 10, 2, 236, 88, 24, 234, + 236, 93, 224, 43, 93, 238, 91, 10, 2, 236, 88, 24, 234, 216, 10, 2, 236, + 88, 24, 234, 217, 93, 194, 10, 2, 236, 88, 24, 234, 76, 93, 224, 210, 10, + 2, 236, 88, 24, 233, 92, 10, 2, 236, 88, 24, 228, 154, 235, 28, 10, 2, + 236, 88, 24, 228, 21, 93, 233, 98, 93, 250, 181, 10, 2, 236, 88, 24, 227, + 76, 10, 2, 236, 88, 24, 227, 38, 10, 2, 236, 88, 24, 226, 157, 10, 2, + 236, 88, 24, 226, 158, 93, 225, 93, 10, 2, 236, 88, 24, 226, 14, 93, 251, + 85, 10, 2, 236, 88, 24, 194, 10, 2, 236, 88, 24, 222, 77, 93, 238, 179, + 10, 2, 236, 88, 24, 221, 211, 10, 2, 236, 88, 24, 218, 89, 10, 2, 236, + 88, 24, 218, 90, 119, 218, 89, 10, 2, 236, 88, 24, 172, 10, 2, 236, 88, + 24, 212, 35, 10, 2, 236, 88, 24, 212, 0, 10, 2, 236, 88, 24, 210, 65, 10, + 2, 236, 88, 24, 210, 66, 93, 204, 192, 10, 2, 236, 88, 24, 210, 31, 10, + 2, 236, 88, 24, 207, 234, 10, 2, 236, 88, 24, 207, 0, 10, 2, 236, 88, 24, + 66, 10, 2, 236, 88, 24, 204, 36, 10, 2, 236, 88, 24, 204, 37, 93, 239, + 137, 10, 2, 236, 88, 119, 236, 87, 10, 2, 236, 82, 10, 2, 236, 83, 242, + 228, 236, 82, 10, 2, 236, 80, 10, 2, 236, 81, 119, 236, 81, 236, 50, 119, + 236, 49, 10, 2, 236, 71, 10, 2, 236, 72, 236, 81, 119, 236, 81, 236, 50, + 119, 236, 49, 10, 2, 236, 70, 10, 2, 236, 68, 10, 2, 236, 59, 10, 2, 236, + 57, 10, 2, 236, 58, 206, 155, 10, 2, 236, 58, 119, 236, 57, 10, 2, 236, + 58, 242, 228, 236, 57, 10, 2, 236, 49, 10, 2, 236, 48, 10, 2, 236, 43, + 10, 2, 235, 242, 10, 2, 235, 243, 24, 225, 245, 10, 2, 235, 161, 10, 2, + 235, 162, 24, 72, 10, 2, 235, 162, 24, 66, 10, 2, 235, 162, 242, 228, + 235, 161, 10, 2, 235, 159, 10, 2, 235, 160, 119, 235, 159, 10, 2, 235, + 160, 242, 228, 235, 159, 10, 2, 235, 156, 10, 2, 235, 143, 10, 2, 235, + 144, 235, 28, 10, 2, 235, 141, 10, 2, 235, 142, 24, 35, 93, 228, 153, 10, + 2, 235, 142, 24, 236, 58, 206, 155, 10, 2, 235, 142, 24, 228, 153, 10, 2, + 235, 142, 24, 224, 43, 93, 228, 153, 10, 2, 235, 142, 24, 172, 10, 2, + 235, 137, 10, 2, 235, 135, 10, 2, 235, 136, 242, 228, 235, 135, 10, 2, + 235, 136, 24, 249, 118, 10, 2, 235, 136, 24, 207, 0, 10, 2, 235, 136, + 206, 155, 10, 2, 235, 50, 10, 2, 235, 51, 242, 228, 235, 50, 10, 2, 235, + 48, 10, 2, 235, 49, 24, 227, 76, 10, 2, 235, 49, 24, 227, 77, 24, 228, + 154, 235, 28, 10, 2, 235, 49, 24, 218, 89, 10, 2, 235, 49, 24, 212, 36, + 93, 204, 209, 10, 2, 235, 49, 235, 28, 10, 2, 235, 39, 10, 2, 235, 40, + 24, 35, 93, 225, 245, 10, 2, 235, 40, 24, 225, 245, 10, 2, 235, 40, 119, + 235, 40, 224, 33, 10, 2, 235, 32, 10, 2, 235, 30, 10, 2, 235, 31, 24, + 210, 65, 10, 2, 235, 22, 10, 2, 235, 21, 10, 2, 235, 17, 10, 2, 235, 16, + 10, 2, 144, 10, 2, 234, 236, 206, 155, 10, 2, 234, 236, 235, 28, 10, 2, + 234, 216, 10, 2, 234, 75, 10, 2, 234, 76, 24, 250, 181, 10, 2, 234, 76, + 24, 250, 179, 10, 2, 234, 76, 24, 249, 118, 10, 2, 234, 76, 24, 240, 255, + 10, 2, 234, 76, 24, 236, 80, 10, 2, 234, 76, 24, 226, 147, 10, 2, 234, + 76, 24, 218, 89, 10, 2, 234, 76, 24, 210, 65, 10, 2, 234, 76, 24, 66, 10, + 2, 233, 97, 10, 2, 233, 92, 10, 2, 233, 93, 24, 251, 85, 10, 2, 233, 93, + 24, 234, 216, 10, 2, 233, 93, 24, 227, 38, 10, 2, 233, 93, 24, 224, 154, + 10, 2, 233, 93, 24, 204, 36, 10, 2, 233, 88, 10, 2, 70, 10, 2, 233, 19, + 62, 10, 2, 232, 235, 10, 2, 228, 181, 10, 2, 228, 182, 119, 228, 182, + 248, 3, 10, 2, 228, 182, 119, 228, 182, 208, 192, 10, 2, 228, 156, 10, 2, + 228, 153, 10, 2, 228, 154, 241, 58, 10, 2, 228, 154, 213, 88, 10, 2, 228, + 154, 119, 228, 154, 210, 15, 119, 210, 15, 204, 37, 119, 204, 36, 10, 2, + 228, 154, 235, 28, 10, 2, 228, 145, 10, 2, 228, 146, 24, 236, 58, 206, + 155, 10, 2, 228, 144, 10, 2, 228, 134, 10, 2, 228, 135, 24, 207, 0, 10, + 2, 228, 135, 242, 228, 228, 134, 10, 2, 228, 135, 217, 40, 228, 134, 10, + 2, 228, 135, 208, 192, 10, 2, 228, 127, 10, 2, 228, 117, 10, 2, 228, 35, + 10, 2, 228, 20, 10, 2, 161, 10, 2, 227, 108, 24, 62, 10, 2, 227, 108, 24, + 251, 235, 10, 2, 227, 108, 24, 251, 236, 93, 226, 13, 10, 2, 227, 108, + 24, 250, 179, 10, 2, 227, 108, 24, 249, 118, 10, 2, 227, 108, 24, 249, + 98, 10, 2, 227, 108, 24, 148, 10, 2, 227, 108, 24, 248, 188, 10, 2, 227, + 108, 24, 238, 109, 10, 2, 227, 108, 24, 238, 91, 10, 2, 227, 108, 24, + 236, 89, 10, 2, 227, 108, 24, 236, 71, 10, 2, 227, 108, 24, 236, 58, 206, + 155, 10, 2, 227, 108, 24, 236, 49, 10, 2, 227, 108, 24, 236, 50, 93, 210, + 113, 93, 62, 10, 2, 227, 108, 24, 235, 161, 10, 2, 227, 108, 24, 235, + 143, 10, 2, 227, 108, 24, 235, 136, 93, 212, 0, 10, 2, 227, 108, 24, 235, + 136, 242, 228, 235, 135, 10, 2, 227, 108, 24, 235, 50, 10, 2, 227, 108, + 24, 235, 21, 10, 2, 227, 108, 24, 228, 153, 10, 2, 227, 108, 24, 228, + 134, 10, 2, 227, 108, 24, 227, 76, 10, 2, 227, 108, 24, 226, 163, 10, 2, + 227, 108, 24, 226, 157, 10, 2, 227, 108, 24, 224, 210, 10, 2, 227, 108, + 24, 224, 42, 10, 2, 227, 108, 24, 222, 76, 10, 2, 227, 108, 24, 222, 77, + 93, 239, 137, 10, 2, 227, 108, 24, 222, 77, 93, 235, 161, 10, 2, 227, + 108, 24, 222, 77, 93, 206, 201, 10, 2, 227, 108, 24, 221, 211, 10, 2, + 227, 108, 24, 221, 212, 93, 218, 84, 10, 2, 227, 108, 24, 220, 34, 10, 2, + 227, 108, 24, 218, 89, 10, 2, 227, 108, 24, 215, 204, 10, 2, 227, 108, + 24, 212, 175, 10, 2, 227, 108, 24, 212, 64, 10, 2, 227, 108, 24, 212, 0, + 10, 2, 227, 108, 24, 210, 114, 10, 2, 227, 108, 24, 210, 65, 10, 2, 227, + 108, 24, 210, 31, 10, 2, 227, 108, 24, 209, 220, 10, 2, 227, 108, 24, + 209, 168, 10, 2, 227, 108, 24, 207, 243, 10, 2, 227, 108, 24, 206, 232, + 10, 2, 227, 108, 24, 66, 10, 2, 227, 108, 24, 204, 47, 10, 2, 227, 108, + 24, 204, 36, 10, 2, 227, 108, 24, 204, 8, 24, 172, 10, 2, 227, 108, 24, + 203, 190, 10, 2, 227, 108, 24, 199, 36, 10, 2, 227, 106, 10, 2, 227, 107, + 242, 228, 227, 106, 10, 2, 227, 96, 10, 2, 227, 93, 10, 2, 227, 91, 10, + 2, 227, 90, 10, 2, 227, 88, 10, 2, 227, 89, 119, 227, 88, 10, 2, 227, 76, + 10, 2, 227, 77, 24, 228, 154, 235, 28, 10, 2, 227, 72, 10, 2, 227, 73, + 24, 249, 118, 10, 2, 227, 73, 242, 228, 227, 72, 10, 2, 227, 70, 10, 2, + 227, 69, 10, 2, 227, 38, 10, 2, 227, 39, 225, 158, 24, 108, 119, 225, + 158, 24, 66, 10, 2, 227, 39, 119, 227, 39, 225, 158, 24, 108, 119, 225, + 158, 24, 66, 10, 2, 226, 234, 10, 2, 226, 163, 10, 2, 226, 164, 24, 249, + 118, 10, 2, 226, 164, 24, 66, 10, 2, 226, 164, 24, 204, 36, 10, 2, 226, + 157, 10, 2, 226, 147, 10, 2, 226, 134, 10, 2, 226, 133, 10, 2, 226, 131, + 10, 2, 226, 132, 119, 226, 131, 10, 2, 226, 15, 10, 2, 226, 16, 119, 234, + 76, 24, 250, 180, 226, 16, 119, 234, 76, 24, 250, 179, 10, 2, 226, 13, + 10, 2, 226, 11, 10, 2, 226, 12, 203, 73, 19, 10, 2, 226, 10, 10, 2, 226, + 2, 10, 2, 226, 3, 235, 28, 10, 2, 226, 1, 10, 2, 225, 245, 10, 2, 225, + 246, 217, 40, 225, 245, 10, 2, 225, 239, 10, 2, 225, 217, 10, 2, 194, 10, + 2, 225, 157, 10, 2, 225, 158, 24, 62, 10, 2, 225, 158, 24, 35, 93, 242, + 59, 93, 144, 10, 2, 225, 158, 24, 35, 93, 236, 49, 10, 2, 225, 158, 24, + 35, 93, 225, 93, 10, 2, 225, 158, 24, 251, 151, 10, 2, 225, 158, 24, 251, + 85, 10, 2, 225, 158, 24, 250, 182, 199, 32, 206, 155, 10, 2, 225, 158, + 24, 249, 118, 10, 2, 225, 158, 24, 248, 188, 10, 2, 225, 158, 24, 241, + 254, 10, 2, 225, 158, 24, 238, 179, 10, 2, 225, 158, 24, 236, 89, 10, 2, + 225, 158, 24, 236, 49, 10, 2, 225, 158, 24, 235, 39, 10, 2, 225, 158, 24, + 235, 40, 93, 235, 39, 10, 2, 225, 158, 24, 144, 10, 2, 225, 158, 24, 234, + 216, 10, 2, 225, 158, 24, 234, 76, 24, 218, 89, 10, 2, 225, 158, 24, 228, + 154, 235, 28, 10, 2, 225, 158, 24, 228, 134, 10, 2, 225, 158, 24, 228, + 135, 93, 144, 10, 2, 225, 158, 24, 228, 135, 93, 224, 42, 10, 2, 225, + 158, 24, 226, 163, 10, 2, 225, 158, 24, 226, 147, 10, 2, 225, 158, 24, + 226, 13, 10, 2, 225, 158, 24, 226, 2, 10, 2, 225, 158, 24, 226, 3, 93, + 234, 76, 93, 62, 10, 2, 225, 158, 24, 225, 157, 10, 2, 225, 158, 24, 224, + 154, 10, 2, 225, 158, 24, 224, 42, 10, 2, 225, 158, 24, 224, 27, 10, 2, + 225, 158, 24, 222, 76, 10, 2, 225, 158, 24, 222, 77, 93, 238, 179, 10, 2, + 225, 158, 24, 220, 250, 10, 2, 225, 158, 24, 220, 34, 10, 2, 225, 158, + 24, 210, 66, 93, 207, 234, 10, 2, 225, 158, 24, 210, 11, 93, 235, 136, + 93, 238, 109, 10, 2, 225, 158, 24, 210, 11, 93, 235, 136, 206, 155, 10, + 2, 225, 158, 24, 209, 218, 10, 2, 225, 158, 24, 209, 219, 93, 209, 218, + 10, 2, 225, 158, 24, 207, 234, 10, 2, 225, 158, 24, 207, 13, 10, 2, 225, + 158, 24, 207, 0, 10, 2, 225, 158, 24, 206, 202, 93, 35, 93, 208, 25, 93, + 188, 10, 2, 225, 158, 24, 66, 10, 2, 225, 158, 24, 108, 93, 62, 10, 2, + 225, 158, 24, 108, 93, 108, 93, 66, 10, 2, 225, 158, 24, 204, 48, 93, + 250, 181, 10, 2, 225, 158, 24, 204, 36, 10, 2, 225, 158, 24, 203, 190, + 10, 2, 225, 158, 208, 192, 10, 2, 225, 155, 10, 2, 225, 156, 24, 210, 65, + 10, 2, 225, 156, 24, 210, 66, 93, 207, 234, 10, 2, 225, 156, 235, 28, 10, + 2, 225, 156, 235, 29, 119, 225, 156, 235, 29, 210, 65, 10, 2, 225, 151, + 10, 2, 225, 93, 10, 2, 225, 94, 24, 225, 93, 10, 2, 225, 91, 10, 2, 225, + 92, 24, 225, 245, 10, 2, 225, 92, 24, 225, 246, 93, 212, 175, 10, 2, 224, + 210, 10, 2, 224, 191, 10, 2, 224, 179, 10, 2, 224, 154, 10, 2, 224, 42, + 10, 2, 224, 43, 24, 249, 118, 10, 2, 224, 40, 10, 2, 224, 41, 24, 251, + 151, 10, 2, 224, 41, 24, 249, 118, 10, 2, 224, 41, 24, 238, 91, 10, 2, + 224, 41, 24, 238, 92, 206, 155, 10, 2, 224, 41, 24, 236, 58, 206, 155, + 10, 2, 224, 41, 24, 234, 76, 24, 249, 118, 10, 2, 224, 41, 24, 228, 134, + 10, 2, 224, 41, 24, 227, 93, 10, 2, 224, 41, 24, 227, 91, 10, 2, 224, 41, + 24, 227, 92, 93, 250, 181, 10, 2, 224, 41, 24, 226, 163, 10, 2, 224, 41, + 24, 225, 176, 93, 250, 181, 10, 2, 224, 41, 24, 225, 157, 10, 2, 224, 41, + 24, 222, 77, 93, 238, 179, 10, 2, 224, 41, 24, 220, 34, 10, 2, 224, 41, + 24, 218, 133, 10, 2, 224, 41, 24, 209, 183, 93, 250, 181, 10, 2, 224, 41, + 24, 209, 160, 93, 248, 36, 10, 2, 224, 41, 24, 204, 209, 10, 2, 224, 41, + 206, 155, 10, 2, 224, 41, 242, 228, 224, 40, 10, 2, 224, 41, 217, 40, + 224, 40, 10, 2, 224, 41, 208, 192, 10, 2, 224, 41, 210, 46, 10, 2, 224, + 39, 10, 2, 224, 33, 10, 2, 224, 34, 119, 224, 33, 10, 2, 224, 34, 217, + 40, 224, 33, 10, 2, 224, 34, 210, 46, 10, 2, 224, 30, 10, 2, 224, 27, 10, + 2, 224, 25, 10, 2, 224, 26, 119, 224, 25, 10, 2, 224, 26, 119, 224, 26, + 236, 50, 119, 236, 49, 10, 2, 178, 10, 2, 222, 235, 24, 207, 0, 10, 2, + 222, 235, 235, 28, 10, 2, 222, 234, 10, 2, 222, 206, 10, 2, 222, 158, 10, + 2, 222, 135, 10, 2, 222, 134, 10, 2, 222, 76, 10, 2, 222, 28, 10, 2, 221, + 211, 10, 2, 221, 164, 10, 2, 221, 41, 10, 2, 221, 42, 119, 221, 41, 10, + 2, 221, 30, 10, 2, 221, 31, 235, 28, 10, 2, 221, 12, 10, 2, 220, 254, 10, + 2, 220, 250, 10, 2, 220, 251, 24, 62, 10, 2, 220, 251, 24, 225, 245, 10, + 2, 220, 251, 24, 199, 114, 10, 2, 220, 251, 119, 220, 250, 10, 2, 220, + 251, 119, 220, 251, 24, 35, 93, 188, 10, 2, 220, 251, 242, 228, 220, 250, + 10, 2, 220, 248, 10, 2, 220, 249, 24, 62, 10, 2, 220, 249, 24, 35, 93, + 241, 76, 10, 2, 220, 249, 24, 241, 76, 10, 2, 220, 249, 235, 28, 10, 2, + 188, 10, 2, 220, 160, 10, 2, 220, 147, 10, 2, 220, 148, 228, 49, 10, 2, + 220, 148, 24, 209, 221, 206, 155, 10, 2, 220, 148, 217, 40, 220, 147, 10, + 2, 220, 146, 10, 2, 220, 139, 218, 75, 10, 2, 220, 138, 10, 2, 220, 137, + 10, 2, 220, 34, 10, 2, 220, 35, 24, 62, 10, 2, 220, 35, 24, 204, 36, 10, + 2, 220, 35, 210, 46, 10, 2, 219, 150, 10, 2, 219, 151, 24, 72, 10, 2, + 219, 149, 10, 2, 219, 119, 10, 2, 219, 120, 24, 236, 58, 206, 155, 10, 2, + 219, 120, 24, 236, 50, 93, 236, 58, 206, 155, 10, 2, 219, 115, 10, 2, + 219, 116, 24, 251, 85, 10, 2, 219, 116, 24, 250, 181, 10, 2, 219, 116, + 24, 250, 182, 93, 250, 181, 10, 2, 219, 116, 24, 235, 39, 10, 2, 219, + 116, 24, 222, 77, 93, 236, 58, 206, 155, 10, 2, 219, 116, 24, 220, 34, + 10, 2, 219, 116, 24, 218, 89, 10, 2, 219, 116, 24, 210, 65, 10, 2, 219, + 116, 24, 210, 66, 93, 35, 251, 85, 10, 2, 219, 116, 24, 210, 66, 93, 250, + 181, 10, 2, 219, 116, 24, 210, 66, 93, 250, 182, 93, 250, 181, 10, 2, + 219, 116, 24, 204, 48, 93, 250, 181, 10, 2, 219, 116, 24, 203, 190, 10, + 2, 219, 103, 10, 2, 218, 133, 10, 2, 218, 105, 10, 2, 218, 89, 10, 2, + 218, 90, 225, 156, 24, 236, 49, 10, 2, 218, 90, 225, 156, 24, 222, 135, + 10, 2, 218, 90, 225, 156, 24, 212, 35, 10, 2, 218, 90, 225, 156, 24, 212, + 36, 119, 218, 90, 225, 156, 24, 212, 35, 10, 2, 218, 90, 225, 156, 24, + 203, 190, 10, 2, 218, 90, 206, 155, 10, 2, 218, 90, 119, 218, 89, 10, 2, + 218, 90, 242, 228, 218, 89, 10, 2, 218, 90, 242, 228, 218, 90, 225, 156, + 119, 225, 155, 10, 2, 218, 84, 10, 2, 218, 85, 252, 7, 24, 250, 175, 10, + 2, 218, 85, 252, 7, 24, 248, 188, 10, 2, 218, 85, 252, 7, 24, 239, 131, + 10, 2, 218, 85, 252, 7, 24, 235, 39, 10, 2, 218, 85, 252, 7, 24, 228, + 154, 235, 28, 10, 2, 218, 85, 252, 7, 24, 227, 91, 10, 2, 218, 85, 252, + 7, 24, 194, 10, 2, 218, 85, 252, 7, 24, 220, 34, 10, 2, 218, 85, 252, 7, + 24, 209, 157, 10, 2, 218, 85, 252, 7, 24, 204, 47, 10, 2, 218, 85, 226, + 132, 24, 248, 188, 10, 2, 218, 85, 226, 132, 24, 248, 189, 66, 10, 2, + 172, 10, 2, 216, 201, 10, 2, 216, 162, 10, 2, 216, 135, 10, 2, 216, 3, + 10, 2, 215, 204, 10, 2, 215, 205, 24, 62, 10, 2, 215, 205, 24, 252, 89, + 10, 2, 215, 205, 24, 248, 188, 10, 2, 215, 205, 24, 248, 36, 10, 2, 215, + 205, 24, 72, 10, 2, 215, 205, 24, 70, 10, 2, 215, 205, 24, 232, 235, 10, + 2, 215, 205, 24, 66, 10, 2, 215, 205, 24, 204, 47, 10, 2, 215, 205, 242, + 228, 215, 204, 10, 2, 215, 146, 10, 2, 215, 147, 24, 227, 72, 10, 2, 215, + 147, 24, 204, 36, 10, 2, 215, 147, 24, 199, 114, 10, 2, 215, 147, 217, + 40, 215, 146, 10, 2, 213, 252, 10, 2, 213, 246, 10, 2, 213, 88, 10, 2, + 212, 175, 10, 2, 212, 64, 10, 2, 212, 51, 218, 75, 10, 2, 212, 50, 10, 2, + 212, 51, 24, 62, 10, 2, 212, 51, 24, 239, 137, 10, 2, 212, 51, 24, 239, + 135, 10, 2, 212, 51, 24, 144, 10, 2, 212, 51, 24, 227, 76, 10, 2, 212, + 51, 24, 225, 245, 10, 2, 212, 51, 24, 224, 25, 10, 2, 212, 51, 24, 221, + 211, 10, 2, 212, 51, 24, 218, 89, 10, 2, 212, 51, 24, 212, 35, 10, 2, + 212, 51, 24, 210, 31, 10, 2, 212, 51, 24, 207, 24, 10, 2, 212, 51, 24, + 204, 47, 10, 2, 212, 51, 24, 204, 42, 10, 2, 212, 51, 24, 204, 12, 10, 2, + 212, 51, 24, 203, 214, 10, 2, 212, 51, 24, 203, 190, 10, 2, 212, 51, 119, + 212, 50, 10, 2, 212, 51, 235, 28, 10, 2, 212, 35, 10, 2, 212, 36, 225, + 158, 24, 250, 179, 10, 2, 212, 8, 10, 2, 212, 0, 10, 2, 210, 114, 10, 2, + 210, 112, 10, 2, 210, 113, 24, 62, 10, 2, 210, 113, 24, 249, 118, 10, 2, + 210, 113, 24, 235, 135, 10, 2, 210, 113, 24, 220, 34, 10, 2, 210, 113, + 24, 209, 218, 10, 2, 210, 113, 24, 204, 192, 10, 2, 210, 113, 24, 66, 10, + 2, 210, 113, 24, 108, 93, 62, 10, 2, 210, 110, 10, 2, 210, 108, 10, 2, + 210, 82, 10, 2, 210, 65, 10, 2, 210, 66, 233, 97, 10, 2, 210, 66, 119, + 210, 66, 236, 81, 119, 236, 81, 236, 50, 119, 236, 49, 10, 2, 210, 66, + 119, 210, 66, 207, 25, 119, 207, 25, 236, 50, 119, 236, 49, 10, 2, 210, + 58, 10, 2, 210, 53, 10, 2, 210, 49, 10, 2, 210, 48, 10, 2, 210, 45, 10, + 2, 210, 31, 10, 2, 210, 32, 24, 62, 10, 2, 210, 32, 24, 228, 134, 10, 2, + 210, 25, 10, 2, 210, 26, 24, 62, 10, 2, 210, 26, 24, 249, 99, 10, 2, 210, + 26, 24, 248, 14, 10, 2, 210, 26, 24, 241, 19, 10, 2, 210, 26, 24, 236, + 49, 10, 2, 210, 26, 24, 228, 153, 10, 2, 210, 26, 24, 228, 154, 235, 28, + 10, 2, 210, 26, 24, 225, 239, 10, 2, 210, 26, 24, 224, 27, 10, 2, 210, + 26, 24, 221, 30, 10, 2, 210, 26, 24, 212, 35, 10, 2, 210, 19, 10, 2, 210, + 14, 10, 2, 210, 15, 206, 155, 10, 2, 210, 15, 119, 210, 15, 248, 4, 119, + 248, 3, 10, 2, 210, 10, 10, 2, 209, 220, 10, 2, 209, 221, 119, 228, 50, + 209, 220, 10, 2, 209, 218, 10, 2, 209, 217, 10, 2, 209, 182, 10, 2, 209, + 183, 235, 28, 10, 2, 209, 168, 10, 2, 209, 166, 10, 2, 209, 167, 119, + 209, 167, 209, 218, 10, 2, 209, 159, 10, 2, 209, 157, 10, 2, 208, 24, 10, + 2, 208, 25, 119, 208, 24, 10, 2, 207, 246, 10, 2, 207, 245, 10, 2, 207, + 243, 10, 2, 207, 234, 10, 2, 207, 233, 10, 2, 207, 207, 10, 2, 207, 206, + 10, 2, 207, 36, 10, 2, 207, 37, 250, 165, 10, 2, 207, 37, 24, 234, 75, + 10, 2, 207, 37, 24, 221, 211, 10, 2, 207, 37, 235, 28, 10, 2, 207, 24, + 10, 2, 207, 25, 119, 207, 25, 219, 151, 119, 219, 151, 241, 0, 119, 240, + 255, 10, 2, 207, 25, 208, 192, 10, 2, 207, 13, 10, 2, 165, 24, 248, 188, + 10, 2, 165, 24, 235, 39, 10, 2, 165, 24, 210, 65, 10, 2, 165, 24, 209, + 220, 10, 2, 165, 24, 204, 209, 10, 2, 165, 24, 204, 36, 10, 2, 207, 0, + 10, 2, 206, 232, 10, 2, 206, 201, 10, 2, 206, 202, 235, 28, 10, 2, 206, + 15, 10, 2, 206, 16, 206, 155, 10, 2, 205, 242, 10, 2, 205, 219, 10, 2, + 205, 220, 24, 207, 0, 10, 2, 205, 220, 119, 205, 219, 10, 2, 205, 220, + 119, 205, 220, 236, 81, 119, 236, 81, 236, 50, 119, 236, 49, 10, 2, 204, + 215, 10, 2, 204, 209, 10, 2, 204, 207, 10, 2, 204, 203, 10, 2, 204, 192, + 10, 2, 204, 193, 119, 204, 193, 199, 115, 119, 199, 114, 10, 2, 66, 10, + 2, 108, 235, 39, 10, 2, 108, 108, 66, 10, 2, 108, 119, 108, 216, 211, + 119, 216, 211, 236, 50, 119, 236, 49, 10, 2, 108, 119, 108, 207, 208, + 119, 207, 207, 10, 2, 108, 119, 108, 108, 213, 105, 119, 108, 213, 104, + 10, 2, 204, 47, 10, 2, 204, 42, 10, 2, 204, 36, 10, 2, 204, 37, 225, 239, + 10, 2, 204, 37, 24, 249, 118, 10, 2, 204, 37, 24, 221, 211, 10, 2, 204, + 37, 24, 108, 93, 108, 93, 66, 10, 2, 204, 37, 24, 108, 93, 108, 93, 108, + 235, 28, 10, 2, 204, 37, 235, 28, 10, 2, 204, 37, 210, 46, 10, 2, 204, + 37, 210, 47, 24, 249, 118, 10, 2, 204, 32, 10, 2, 204, 12, 10, 2, 204, + 13, 24, 225, 157, 10, 2, 204, 13, 24, 222, 77, 93, 242, 58, 10, 2, 204, + 13, 24, 210, 112, 10, 2, 204, 13, 24, 66, 10, 2, 204, 11, 10, 2, 204, 7, + 10, 2, 204, 8, 24, 227, 38, 10, 2, 204, 8, 24, 172, 10, 2, 204, 5, 10, 2, + 204, 6, 235, 28, 10, 2, 203, 214, 10, 2, 203, 215, 242, 228, 203, 214, + 10, 2, 203, 215, 210, 46, 10, 2, 203, 212, 10, 2, 203, 213, 24, 35, 93, + 144, 10, 2, 203, 213, 24, 35, 93, 188, 10, 2, 203, 213, 24, 251, 151, 10, + 2, 203, 213, 24, 144, 10, 2, 203, 213, 24, 218, 89, 10, 2, 203, 213, 24, + 204, 47, 10, 2, 203, 213, 24, 204, 48, 93, 250, 181, 10, 2, 203, 213, 24, + 204, 48, 93, 248, 188, 10, 2, 203, 211, 10, 2, 203, 208, 10, 2, 203, 207, + 10, 2, 203, 203, 10, 2, 203, 204, 24, 62, 10, 2, 203, 204, 24, 250, 175, + 10, 2, 203, 204, 24, 148, 10, 2, 203, 204, 24, 239, 125, 10, 2, 203, 204, + 24, 236, 89, 10, 2, 203, 204, 24, 236, 71, 10, 2, 203, 204, 24, 236, 58, + 206, 155, 10, 2, 203, 204, 24, 236, 49, 10, 2, 203, 204, 24, 235, 50, 10, + 2, 203, 204, 24, 144, 10, 2, 203, 204, 24, 228, 153, 10, 2, 203, 204, 24, + 228, 134, 10, 2, 203, 204, 24, 228, 20, 10, 2, 203, 204, 24, 226, 163, + 10, 2, 203, 204, 24, 224, 25, 10, 2, 203, 204, 24, 221, 164, 10, 2, 203, + 204, 24, 172, 10, 2, 203, 204, 24, 210, 65, 10, 2, 203, 204, 24, 209, + 166, 10, 2, 203, 204, 24, 204, 215, 10, 2, 203, 204, 24, 108, 93, 235, + 39, 10, 2, 203, 204, 24, 204, 36, 10, 2, 203, 204, 24, 203, 201, 10, 2, + 203, 201, 10, 2, 203, 202, 24, 66, 10, 2, 203, 190, 10, 2, 203, 191, 24, + 62, 10, 2, 203, 191, 24, 226, 15, 10, 2, 203, 191, 24, 225, 245, 10, 2, + 203, 191, 24, 207, 0, 10, 2, 203, 186, 10, 2, 203, 189, 10, 2, 203, 187, + 10, 2, 203, 183, 10, 2, 203, 171, 10, 2, 203, 172, 24, 227, 38, 10, 2, + 203, 170, 10, 2, 199, 114, 10, 2, 199, 115, 206, 155, 10, 2, 199, 115, + 95, 24, 225, 245, 10, 2, 199, 110, 10, 2, 199, 102, 10, 2, 199, 88, 10, + 2, 199, 36, 10, 2, 199, 37, 119, 199, 36, 10, 2, 199, 35, 10, 2, 199, 33, + 10, 2, 199, 34, 227, 95, 206, 155, 10, 2, 199, 28, 10, 2, 199, 19, 10, 2, + 199, 3, 10, 2, 199, 1, 10, 2, 199, 2, 24, 62, 10, 2, 199, 0, 10, 2, 198, + 255, 10, 2, 227, 61, 238, 206, 10, 2, 252, 90, 24, 218, 89, 10, 2, 252, + 7, 24, 62, 10, 2, 251, 98, 24, 226, 4, 10, 2, 242, 49, 226, 132, 24, 204, + 48, 93, 222, 135, 10, 2, 242, 47, 10, 2, 241, 0, 93, 209, 220, 10, 2, + 239, 136, 24, 210, 65, 10, 2, 238, 11, 24, 235, 39, 10, 2, 238, 11, 24, + 210, 65, 10, 2, 236, 88, 24, 251, 86, 93, 227, 77, 93, 62, 10, 2, 236, + 88, 24, 250, 179, 10, 2, 236, 14, 10, 2, 235, 151, 10, 2, 233, 73, 10, 2, + 227, 108, 24, 251, 53, 10, 2, 227, 108, 24, 250, 178, 10, 2, 227, 108, + 24, 235, 135, 10, 2, 227, 108, 24, 235, 39, 10, 2, 227, 108, 24, 234, 76, + 24, 250, 179, 10, 2, 227, 108, 24, 224, 25, 10, 2, 227, 108, 24, 172, 10, + 2, 227, 108, 24, 209, 213, 10, 2, 227, 108, 24, 204, 215, 10, 2, 227, + 108, 24, 203, 212, 10, 2, 225, 158, 24, 235, 161, 10, 2, 224, 41, 210, + 47, 24, 249, 118, 10, 2, 224, 41, 24, 238, 92, 93, 225, 93, 10, 2, 224, + 41, 24, 209, 220, 10, 2, 222, 27, 10, 2, 220, 249, 24, 199, 114, 10, 2, + 220, 159, 10, 2, 219, 118, 10, 2, 219, 117, 10, 2, 219, 116, 24, 249, 99, + 10, 2, 219, 116, 24, 235, 161, 10, 2, 218, 106, 212, 228, 219, 109, 241, + 154, 10, 2, 216, 4, 250, 165, 10, 2, 215, 150, 10, 2, 212, 51, 24, 228, + 154, 235, 28, 10, 2, 206, 14, 10, 2, 204, 13, 24, 222, 76, 10, 2, 108, + 66, 10, 145, 2, 120, 250, 181, 10, 145, 2, 126, 250, 181, 10, 145, 2, + 236, 229, 250, 181, 10, 145, 2, 237, 61, 250, 181, 10, 145, 2, 209, 106, + 250, 181, 10, 145, 2, 210, 136, 250, 181, 10, 145, 2, 238, 232, 250, 181, + 10, 145, 2, 219, 114, 250, 181, 10, 145, 2, 126, 240, 255, 10, 145, 2, + 236, 229, 240, 255, 10, 145, 2, 237, 61, 240, 255, 10, 145, 2, 209, 106, + 240, 255, 10, 145, 2, 210, 136, 240, 255, 10, 145, 2, 238, 232, 240, 255, + 10, 145, 2, 219, 114, 240, 255, 10, 145, 2, 236, 229, 66, 10, 145, 2, + 237, 61, 66, 10, 145, 2, 209, 106, 66, 10, 145, 2, 210, 136, 66, 10, 145, + 2, 238, 232, 66, 10, 145, 2, 219, 114, 66, 10, 145, 2, 112, 235, 244, 10, + 145, 2, 120, 235, 244, 10, 145, 2, 126, 235, 244, 10, 145, 2, 236, 229, + 235, 244, 10, 145, 2, 237, 61, 235, 244, 10, 145, 2, 209, 106, 235, 244, + 10, 145, 2, 210, 136, 235, 244, 10, 145, 2, 238, 232, 235, 244, 10, 145, + 2, 219, 114, 235, 244, 10, 145, 2, 112, 235, 241, 10, 145, 2, 120, 235, + 241, 10, 145, 2, 126, 235, 241, 10, 145, 2, 236, 229, 235, 241, 10, 145, + 2, 237, 61, 235, 241, 10, 145, 2, 120, 210, 82, 10, 145, 2, 126, 210, 82, + 10, 145, 2, 126, 210, 83, 203, 73, 19, 10, 145, 2, 236, 229, 210, 82, 10, + 145, 2, 237, 61, 210, 82, 10, 145, 2, 209, 106, 210, 82, 10, 145, 2, 210, + 136, 210, 82, 10, 145, 2, 238, 232, 210, 82, 10, 145, 2, 219, 114, 210, + 82, 10, 145, 2, 112, 210, 76, 10, 145, 2, 120, 210, 76, 10, 145, 2, 126, + 210, 76, 10, 145, 2, 126, 210, 77, 203, 73, 19, 10, 145, 2, 236, 229, + 210, 76, 10, 145, 2, 237, 61, 210, 76, 10, 145, 2, 210, 83, 24, 236, 72, + 93, 240, 255, 10, 145, 2, 210, 83, 24, 236, 72, 93, 221, 164, 10, 145, 2, + 112, 247, 255, 10, 145, 2, 120, 247, 255, 10, 145, 2, 126, 247, 255, 10, + 145, 2, 126, 248, 0, 203, 73, 19, 10, 145, 2, 236, 229, 247, 255, 10, + 145, 2, 237, 61, 247, 255, 10, 145, 2, 126, 203, 73, 236, 242, 238, 93, + 10, 145, 2, 126, 203, 73, 236, 242, 238, 90, 10, 145, 2, 236, 229, 203, + 73, 236, 242, 224, 180, 10, 145, 2, 236, 229, 203, 73, 236, 242, 224, + 178, 10, 145, 2, 236, 229, 203, 73, 236, 242, 224, 181, 62, 10, 145, 2, + 236, 229, 203, 73, 236, 242, 224, 181, 250, 103, 10, 145, 2, 209, 106, + 203, 73, 236, 242, 250, 177, 10, 145, 2, 210, 136, 203, 73, 236, 242, + 228, 126, 10, 145, 2, 210, 136, 203, 73, 236, 242, 228, 128, 62, 10, 145, + 2, 210, 136, 203, 73, 236, 242, 228, 128, 250, 103, 10, 145, 2, 238, 232, + 203, 73, 236, 242, 203, 185, 10, 145, 2, 238, 232, 203, 73, 236, 242, + 203, 184, 10, 145, 2, 219, 114, 203, 73, 236, 242, 228, 142, 10, 145, 2, + 219, 114, 203, 73, 236, 242, 228, 141, 10, 145, 2, 219, 114, 203, 73, + 236, 242, 228, 140, 10, 145, 2, 219, 114, 203, 73, 236, 242, 228, 143, + 62, 10, 145, 2, 120, 250, 182, 206, 155, 10, 145, 2, 126, 250, 182, 206, + 155, 10, 145, 2, 236, 229, 250, 182, 206, 155, 10, 145, 2, 237, 61, 250, + 182, 206, 155, 10, 145, 2, 209, 106, 250, 182, 206, 155, 10, 145, 2, 112, + 249, 86, 10, 145, 2, 120, 249, 86, 10, 145, 2, 126, 249, 86, 10, 145, 2, + 236, 229, 249, 86, 10, 145, 2, 236, 229, 249, 87, 203, 73, 19, 10, 145, + 2, 237, 61, 249, 86, 10, 145, 2, 237, 61, 249, 87, 203, 73, 19, 10, 145, + 2, 219, 127, 10, 145, 2, 219, 128, 10, 145, 2, 112, 238, 89, 10, 145, 2, + 120, 238, 89, 10, 145, 2, 112, 206, 75, 240, 255, 10, 145, 2, 120, 206, + 72, 240, 255, 10, 145, 2, 237, 61, 209, 95, 240, 255, 10, 145, 2, 112, + 206, 75, 203, 73, 236, 242, 62, 10, 145, 2, 120, 206, 72, 203, 73, 236, + 242, 62, 10, 145, 2, 112, 238, 228, 250, 181, 10, 145, 2, 112, 214, 88, + 250, 181, 10, 145, 2, 40, 250, 168, 112, 209, 96, 10, 145, 2, 40, 250, + 168, 112, 214, 87, 10, 145, 2, 112, 214, 88, 235, 22, 10, 145, 2, 112, + 167, 235, 22, 10, 145, 2, 238, 207, 112, 206, 74, 10, 145, 2, 238, 207, + 120, 206, 71, 10, 145, 2, 238, 207, 236, 235, 10, 145, 2, 238, 207, 237, + 104, 10, 145, 2, 236, 229, 108, 203, 73, 19, 10, 145, 2, 237, 61, 108, + 203, 73, 19, 10, 145, 2, 209, 106, 108, 203, 73, 19, 10, 145, 2, 210, + 136, 108, 203, 73, 19, 10, 145, 2, 238, 232, 108, 203, 73, 19, 10, 145, + 2, 219, 114, 108, 203, 73, 19, 10, 214, 212, 2, 40, 250, 168, 200, 238, + 240, 239, 10, 214, 212, 2, 83, 246, 79, 10, 214, 212, 2, 241, 71, 246, + 79, 10, 214, 212, 2, 241, 71, 205, 94, 10, 214, 212, 2, 241, 71, 214, 93, + 10, 2, 252, 90, 24, 218, 90, 206, 155, 10, 2, 252, 90, 24, 209, 218, 10, + 2, 251, 236, 24, 238, 91, 10, 2, 249, 119, 24, 241, 0, 206, 155, 10, 2, + 249, 106, 24, 252, 6, 10, 2, 249, 106, 24, 219, 150, 10, 2, 249, 106, 24, + 199, 114, 10, 2, 248, 37, 119, 248, 37, 24, 220, 160, 10, 2, 242, 59, 24, + 207, 0, 10, 2, 242, 49, 24, 225, 245, 10, 2, 241, 32, 24, 228, 153, 10, + 2, 241, 32, 24, 108, 108, 66, 10, 2, 241, 30, 24, 204, 36, 10, 2, 239, + 132, 24, 251, 53, 10, 2, 239, 132, 24, 250, 181, 10, 2, 239, 132, 24, + 250, 182, 250, 156, 225, 28, 10, 2, 239, 132, 24, 241, 19, 10, 2, 239, + 132, 24, 239, 125, 10, 2, 239, 132, 24, 238, 109, 10, 2, 239, 132, 24, + 236, 89, 10, 2, 239, 132, 24, 235, 161, 10, 2, 239, 132, 24, 235, 144, + 235, 28, 10, 2, 239, 132, 24, 235, 135, 10, 2, 239, 132, 24, 144, 10, 2, + 239, 132, 24, 234, 75, 10, 2, 239, 132, 24, 228, 154, 235, 28, 10, 2, + 239, 132, 24, 227, 38, 10, 2, 239, 132, 24, 225, 245, 10, 2, 239, 132, + 24, 225, 239, 10, 2, 239, 132, 24, 225, 240, 93, 227, 38, 10, 2, 239, + 132, 24, 225, 145, 10, 2, 239, 132, 24, 225, 91, 10, 2, 239, 132, 24, + 225, 92, 24, 225, 245, 10, 2, 239, 132, 24, 224, 31, 93, 235, 135, 10, 2, + 239, 132, 24, 222, 135, 10, 2, 239, 132, 24, 222, 28, 10, 2, 239, 132, + 24, 221, 211, 10, 2, 239, 132, 24, 219, 150, 10, 2, 239, 132, 24, 215, + 204, 10, 2, 239, 132, 24, 210, 65, 10, 2, 239, 132, 24, 209, 183, 235, + 28, 10, 2, 239, 29, 24, 225, 245, 10, 2, 239, 29, 24, 216, 135, 10, 2, + 238, 110, 200, 195, 10, 2, 238, 92, 242, 228, 238, 91, 10, 2, 238, 11, + 210, 47, 24, 250, 181, 10, 2, 238, 11, 210, 47, 24, 234, 75, 10, 2, 238, + 11, 210, 47, 24, 228, 154, 235, 28, 10, 2, 238, 11, 210, 47, 24, 194, 10, + 2, 238, 11, 210, 47, 24, 225, 93, 10, 2, 238, 11, 210, 47, 24, 222, 76, + 10, 2, 238, 11, 210, 47, 24, 222, 28, 10, 2, 238, 11, 210, 47, 24, 208, + 24, 10, 2, 238, 11, 24, 208, 24, 10, 2, 236, 88, 24, 249, 105, 10, 2, + 236, 88, 24, 241, 32, 235, 28, 10, 2, 236, 88, 24, 239, 132, 24, 228, + 154, 235, 28, 10, 2, 236, 88, 24, 239, 132, 24, 227, 38, 10, 2, 236, 88, + 24, 238, 112, 10, 2, 236, 88, 24, 236, 89, 10, 2, 236, 88, 24, 236, 50, + 93, 241, 76, 10, 2, 236, 88, 24, 236, 50, 93, 220, 34, 10, 2, 236, 88, + 24, 234, 236, 93, 62, 10, 2, 236, 88, 24, 225, 240, 93, 227, 38, 10, 2, + 236, 88, 24, 225, 91, 10, 2, 236, 88, 24, 225, 92, 24, 225, 245, 10, 2, + 236, 88, 24, 224, 30, 10, 2, 236, 88, 24, 220, 250, 10, 2, 236, 88, 24, + 220, 34, 10, 2, 236, 88, 24, 220, 35, 93, 239, 28, 10, 2, 236, 88, 24, + 220, 35, 93, 235, 161, 10, 2, 236, 88, 24, 210, 25, 10, 2, 236, 88, 24, + 199, 19, 10, 2, 236, 83, 212, 228, 219, 109, 241, 154, 10, 2, 235, 243, + 24, 66, 10, 2, 235, 136, 24, 235, 136, 242, 228, 235, 135, 10, 2, 235, + 49, 24, 228, 154, 235, 28, 10, 2, 235, 40, 93, 235, 136, 24, 207, 0, 10, + 2, 234, 236, 206, 156, 235, 28, 10, 2, 234, 76, 24, 250, 182, 119, 234, + 76, 24, 250, 181, 10, 2, 227, 108, 24, 248, 36, 10, 2, 227, 108, 24, 161, + 10, 2, 227, 108, 24, 108, 108, 66, 10, 2, 227, 108, 24, 203, 214, 10, 2, + 225, 158, 24, 199, 4, 119, 199, 3, 10, 2, 225, 146, 10, 2, 225, 144, 10, + 2, 225, 143, 10, 2, 225, 142, 10, 2, 225, 141, 10, 2, 225, 140, 10, 2, + 225, 139, 10, 2, 225, 138, 119, 225, 138, 235, 28, 10, 2, 225, 137, 10, + 2, 225, 136, 119, 225, 135, 10, 2, 225, 134, 10, 2, 225, 133, 10, 2, 225, + 132, 10, 2, 225, 131, 10, 2, 225, 130, 10, 2, 225, 129, 10, 2, 225, 128, + 10, 2, 225, 127, 10, 2, 225, 126, 10, 2, 225, 125, 10, 2, 225, 124, 10, + 2, 225, 123, 10, 2, 225, 122, 10, 2, 225, 121, 10, 2, 225, 120, 10, 2, + 225, 119, 10, 2, 225, 118, 10, 2, 225, 117, 10, 2, 225, 115, 10, 2, 225, + 116, 24, 235, 50, 10, 2, 225, 116, 24, 228, 153, 10, 2, 225, 116, 24, + 216, 136, 93, 224, 39, 10, 2, 225, 116, 24, 216, 136, 93, 216, 136, 93, + 224, 39, 10, 2, 225, 116, 24, 204, 48, 93, 249, 136, 10, 2, 225, 114, 10, + 2, 225, 113, 10, 2, 225, 112, 10, 2, 225, 111, 10, 2, 225, 110, 10, 2, + 225, 109, 10, 2, 225, 108, 10, 2, 225, 107, 10, 2, 225, 106, 10, 2, 225, + 105, 10, 2, 225, 103, 10, 2, 225, 104, 24, 250, 181, 10, 2, 225, 104, 24, + 249, 118, 10, 2, 225, 104, 24, 239, 124, 235, 29, 235, 28, 10, 2, 225, + 104, 24, 226, 13, 10, 2, 225, 104, 24, 194, 10, 2, 225, 104, 24, 206, + 232, 10, 2, 225, 104, 24, 206, 201, 10, 2, 225, 104, 24, 204, 47, 10, 2, + 225, 104, 24, 204, 36, 10, 2, 225, 104, 24, 203, 201, 10, 2, 225, 102, + 10, 2, 225, 100, 10, 2, 225, 101, 24, 239, 135, 10, 2, 225, 101, 24, 236, + 89, 10, 2, 225, 101, 24, 228, 153, 10, 2, 225, 101, 24, 228, 154, 235, + 28, 10, 2, 225, 101, 24, 219, 150, 10, 2, 225, 101, 24, 216, 136, 93, + 216, 136, 93, 224, 39, 10, 2, 225, 101, 24, 210, 50, 93, 226, 163, 10, 2, + 225, 101, 24, 204, 36, 10, 2, 225, 101, 24, 203, 201, 10, 2, 225, 98, 10, + 2, 225, 97, 10, 2, 224, 41, 235, 29, 24, 250, 181, 10, 2, 224, 41, 24, + 240, 255, 10, 2, 224, 41, 24, 234, 216, 10, 2, 224, 41, 24, 216, 135, 10, + 2, 224, 41, 24, 216, 136, 93, 216, 136, 93, 224, 39, 10, 2, 224, 41, 24, + 207, 0, 10, 2, 221, 212, 93, 199, 113, 10, 2, 220, 251, 119, 220, 251, + 24, 236, 89, 10, 2, 220, 251, 119, 220, 251, 24, 227, 76, 10, 2, 219, + 116, 24, 241, 32, 235, 28, 10, 2, 219, 116, 24, 235, 135, 10, 2, 219, + 116, 24, 235, 32, 10, 2, 219, 116, 24, 234, 75, 10, 2, 219, 116, 24, 226, + 234, 10, 2, 219, 116, 24, 225, 141, 10, 2, 219, 116, 24, 222, 135, 10, 2, + 219, 116, 24, 216, 136, 93, 216, 135, 10, 2, 219, 116, 24, 66, 10, 2, + 219, 116, 24, 108, 93, 66, 10, 2, 219, 116, 24, 203, 201, 10, 2, 212, 51, + 235, 29, 24, 144, 10, 2, 212, 51, 24, 238, 179, 10, 2, 212, 51, 24, 210, + 66, 250, 156, 225, 28, 10, 2, 212, 51, 24, 207, 0, 10, 2, 210, 111, 206, + 155, 10, 2, 210, 66, 119, 210, 65, 10, 2, 210, 66, 93, 233, 92, 10, 2, + 210, 66, 93, 220, 137, 10, 2, 210, 66, 93, 212, 0, 10, 2, 209, 219, 93, + 239, 132, 24, 219, 150, 10, 2, 209, 219, 93, 239, 29, 24, 251, 85, 10, 2, + 209, 183, 24, 207, 0, 10, 2, 207, 1, 93, 212, 50, 10, 2, 204, 204, 24, + 236, 58, 206, 155, 10, 2, 204, 204, 24, 126, 240, 255, 10, 2, 203, 213, + 228, 49, 10, 2, 203, 213, 24, 204, 36, 10, 2, 203, 204, 24, 241, 253, 10, + 2, 203, 204, 24, 225, 99, 10, 2, 203, 204, 24, 224, 39, 10, 2, 199, 113, + 10, 2, 199, 4, 119, 199, 4, 93, 212, 0, 10, 2, 199, 2, 24, 126, 241, 0, + 206, 155, 14, 7, 255, 131, 14, 7, 255, 130, 14, 7, 255, 129, 14, 7, 255, + 128, 14, 7, 255, 127, 14, 7, 255, 126, 14, 7, 255, 125, 14, 7, 255, 124, + 14, 7, 255, 123, 14, 7, 255, 122, 14, 7, 255, 121, 14, 7, 255, 120, 14, + 7, 255, 119, 14, 7, 255, 117, 14, 7, 255, 116, 14, 7, 255, 115, 14, 7, + 255, 114, 14, 7, 255, 113, 14, 7, 255, 112, 14, 7, 255, 111, 14, 7, 255, + 110, 14, 7, 255, 109, 14, 7, 255, 108, 14, 7, 255, 107, 14, 7, 255, 106, + 14, 7, 255, 105, 14, 7, 255, 104, 14, 7, 255, 103, 14, 7, 255, 102, 14, + 7, 255, 101, 14, 7, 255, 100, 14, 7, 255, 98, 14, 7, 255, 97, 14, 7, 255, + 95, 14, 7, 255, 94, 14, 7, 255, 93, 14, 7, 255, 92, 14, 7, 255, 91, 14, + 7, 255, 90, 14, 7, 255, 89, 14, 7, 255, 88, 14, 7, 255, 87, 14, 7, 255, + 86, 14, 7, 255, 85, 14, 7, 255, 84, 14, 7, 255, 82, 14, 7, 255, 81, 14, + 7, 255, 80, 14, 7, 255, 78, 14, 7, 255, 77, 14, 7, 255, 76, 14, 7, 255, + 75, 14, 7, 255, 74, 14, 7, 255, 73, 14, 7, 255, 72, 14, 7, 255, 71, 14, + 7, 255, 68, 14, 7, 255, 67, 14, 7, 255, 66, 14, 7, 255, 65, 14, 7, 255, + 64, 14, 7, 255, 63, 14, 7, 255, 62, 14, 7, 255, 61, 14, 7, 255, 60, 14, + 7, 255, 59, 14, 7, 255, 58, 14, 7, 255, 57, 14, 7, 255, 56, 14, 7, 255, + 55, 14, 7, 255, 54, 14, 7, 255, 53, 14, 7, 255, 52, 14, 7, 255, 51, 14, + 7, 255, 50, 14, 7, 255, 49, 14, 7, 255, 45, 14, 7, 255, 44, 14, 7, 255, + 43, 14, 7, 255, 42, 14, 7, 250, 101, 14, 7, 250, 99, 14, 7, 250, 97, 14, + 7, 250, 95, 14, 7, 250, 93, 14, 7, 250, 92, 14, 7, 250, 90, 14, 7, 250, + 88, 14, 7, 250, 86, 14, 7, 250, 84, 14, 7, 247, 219, 14, 7, 247, 218, 14, + 7, 247, 217, 14, 7, 247, 216, 14, 7, 247, 215, 14, 7, 247, 214, 14, 7, + 247, 213, 14, 7, 247, 212, 14, 7, 247, 211, 14, 7, 247, 210, 14, 7, 247, + 209, 14, 7, 247, 208, 14, 7, 247, 207, 14, 7, 247, 206, 14, 7, 247, 205, + 14, 7, 247, 204, 14, 7, 247, 203, 14, 7, 247, 202, 14, 7, 247, 201, 14, + 7, 247, 200, 14, 7, 247, 199, 14, 7, 247, 198, 14, 7, 247, 197, 14, 7, + 247, 196, 14, 7, 247, 195, 14, 7, 247, 194, 14, 7, 247, 193, 14, 7, 247, + 192, 14, 7, 242, 152, 14, 7, 242, 151, 14, 7, 242, 150, 14, 7, 242, 149, + 14, 7, 242, 148, 14, 7, 242, 147, 14, 7, 242, 146, 14, 7, 242, 145, 14, + 7, 242, 144, 14, 7, 242, 143, 14, 7, 242, 142, 14, 7, 242, 141, 14, 7, + 242, 140, 14, 7, 242, 139, 14, 7, 242, 138, 14, 7, 242, 137, 14, 7, 242, + 136, 14, 7, 242, 135, 14, 7, 242, 134, 14, 7, 242, 133, 14, 7, 242, 132, + 14, 7, 242, 131, 14, 7, 242, 130, 14, 7, 242, 129, 14, 7, 242, 128, 14, + 7, 242, 127, 14, 7, 242, 126, 14, 7, 242, 125, 14, 7, 242, 124, 14, 7, + 242, 123, 14, 7, 242, 122, 14, 7, 242, 121, 14, 7, 242, 120, 14, 7, 242, + 119, 14, 7, 242, 118, 14, 7, 242, 117, 14, 7, 242, 116, 14, 7, 242, 115, + 14, 7, 242, 114, 14, 7, 242, 113, 14, 7, 242, 112, 14, 7, 242, 111, 14, + 7, 242, 110, 14, 7, 242, 109, 14, 7, 242, 108, 14, 7, 242, 107, 14, 7, + 242, 106, 14, 7, 242, 105, 14, 7, 242, 104, 14, 7, 242, 103, 14, 7, 242, + 102, 14, 7, 242, 101, 14, 7, 242, 100, 14, 7, 242, 99, 14, 7, 242, 98, + 14, 7, 242, 97, 14, 7, 242, 96, 14, 7, 242, 95, 14, 7, 242, 94, 14, 7, + 242, 93, 14, 7, 242, 92, 14, 7, 242, 91, 14, 7, 242, 90, 14, 7, 242, 89, + 14, 7, 242, 88, 14, 7, 242, 87, 14, 7, 242, 86, 14, 7, 242, 85, 14, 7, + 242, 84, 14, 7, 242, 83, 14, 7, 242, 82, 14, 7, 242, 81, 14, 7, 242, 80, + 14, 7, 242, 79, 14, 7, 242, 78, 14, 7, 242, 77, 14, 7, 242, 76, 14, 7, + 242, 75, 14, 7, 242, 74, 14, 7, 242, 73, 14, 7, 242, 72, 14, 7, 242, 71, + 14, 7, 242, 70, 14, 7, 242, 69, 14, 7, 242, 68, 14, 7, 242, 67, 14, 7, + 242, 66, 14, 7, 242, 65, 14, 7, 242, 64, 14, 7, 242, 63, 14, 7, 242, 62, + 14, 7, 242, 61, 14, 7, 239, 73, 14, 7, 239, 72, 14, 7, 239, 71, 14, 7, + 239, 70, 14, 7, 239, 69, 14, 7, 239, 68, 14, 7, 239, 67, 14, 7, 239, 66, + 14, 7, 239, 65, 14, 7, 239, 64, 14, 7, 239, 63, 14, 7, 239, 62, 14, 7, + 239, 61, 14, 7, 239, 60, 14, 7, 239, 59, 14, 7, 239, 58, 14, 7, 239, 57, + 14, 7, 239, 56, 14, 7, 239, 55, 14, 7, 239, 54, 14, 7, 239, 53, 14, 7, + 239, 52, 14, 7, 239, 51, 14, 7, 239, 50, 14, 7, 239, 49, 14, 7, 239, 48, + 14, 7, 239, 47, 14, 7, 239, 46, 14, 7, 239, 45, 14, 7, 239, 44, 14, 7, + 239, 43, 14, 7, 239, 42, 14, 7, 239, 41, 14, 7, 239, 40, 14, 7, 239, 39, + 14, 7, 239, 38, 14, 7, 239, 37, 14, 7, 239, 36, 14, 7, 239, 35, 14, 7, + 239, 34, 14, 7, 239, 33, 14, 7, 239, 32, 14, 7, 239, 31, 14, 7, 239, 30, + 14, 7, 238, 4, 14, 7, 238, 3, 14, 7, 238, 2, 14, 7, 238, 1, 14, 7, 238, + 0, 14, 7, 237, 255, 14, 7, 237, 254, 14, 7, 237, 253, 14, 7, 237, 252, + 14, 7, 237, 251, 14, 7, 237, 250, 14, 7, 237, 249, 14, 7, 237, 248, 14, + 7, 237, 247, 14, 7, 237, 246, 14, 7, 237, 245, 14, 7, 237, 244, 14, 7, + 237, 243, 14, 7, 237, 242, 14, 7, 237, 241, 14, 7, 237, 240, 14, 7, 237, + 239, 14, 7, 237, 238, 14, 7, 237, 237, 14, 7, 237, 236, 14, 7, 237, 235, + 14, 7, 237, 234, 14, 7, 237, 233, 14, 7, 237, 232, 14, 7, 237, 231, 14, + 7, 237, 230, 14, 7, 237, 229, 14, 7, 237, 228, 14, 7, 237, 227, 14, 7, + 237, 226, 14, 7, 237, 225, 14, 7, 237, 224, 14, 7, 237, 223, 14, 7, 237, + 222, 14, 7, 237, 221, 14, 7, 237, 220, 14, 7, 237, 219, 14, 7, 237, 218, + 14, 7, 237, 217, 14, 7, 237, 216, 14, 7, 237, 215, 14, 7, 237, 214, 14, + 7, 237, 213, 14, 7, 237, 212, 14, 7, 237, 211, 14, 7, 237, 210, 14, 7, + 237, 209, 14, 7, 237, 208, 14, 7, 237, 207, 14, 7, 237, 206, 14, 7, 237, + 205, 14, 7, 237, 204, 14, 7, 237, 203, 14, 7, 237, 202, 14, 7, 237, 201, + 14, 7, 237, 200, 14, 7, 237, 199, 14, 7, 237, 198, 14, 7, 237, 197, 14, + 7, 237, 196, 14, 7, 236, 155, 14, 7, 236, 154, 14, 7, 236, 153, 14, 7, + 236, 152, 14, 7, 236, 151, 14, 7, 236, 150, 14, 7, 236, 149, 14, 7, 236, + 148, 14, 7, 236, 147, 14, 7, 236, 146, 14, 7, 236, 145, 14, 7, 236, 144, + 14, 7, 236, 143, 14, 7, 236, 142, 14, 7, 236, 141, 14, 7, 236, 140, 14, + 7, 236, 139, 14, 7, 236, 138, 14, 7, 236, 137, 14, 7, 236, 136, 14, 7, + 236, 135, 14, 7, 236, 134, 14, 7, 236, 133, 14, 7, 236, 132, 14, 7, 236, + 131, 14, 7, 236, 130, 14, 7, 236, 129, 14, 7, 236, 128, 14, 7, 236, 127, + 14, 7, 236, 126, 14, 7, 236, 125, 14, 7, 236, 124, 14, 7, 236, 123, 14, + 7, 236, 122, 14, 7, 236, 121, 14, 7, 236, 120, 14, 7, 236, 119, 14, 7, + 236, 118, 14, 7, 236, 117, 14, 7, 236, 116, 14, 7, 236, 115, 14, 7, 236, + 114, 14, 7, 236, 113, 14, 7, 236, 112, 14, 7, 236, 111, 14, 7, 236, 110, + 14, 7, 236, 109, 14, 7, 236, 108, 14, 7, 236, 107, 14, 7, 236, 106, 14, + 7, 236, 105, 14, 7, 236, 104, 14, 7, 236, 103, 14, 7, 236, 102, 14, 7, + 236, 101, 14, 7, 236, 100, 14, 7, 236, 99, 14, 7, 236, 98, 14, 7, 236, + 97, 14, 7, 236, 96, 14, 7, 236, 95, 14, 7, 236, 94, 14, 7, 236, 93, 14, + 7, 236, 92, 14, 7, 234, 245, 14, 7, 234, 244, 14, 7, 234, 243, 14, 7, + 234, 242, 14, 7, 234, 241, 14, 7, 234, 240, 14, 7, 234, 239, 14, 7, 234, + 238, 14, 7, 234, 237, 14, 7, 233, 3, 14, 7, 233, 2, 14, 7, 233, 1, 14, 7, + 233, 0, 14, 7, 232, 255, 14, 7, 232, 254, 14, 7, 232, 253, 14, 7, 232, + 252, 14, 7, 232, 251, 14, 7, 232, 250, 14, 7, 232, 249, 14, 7, 232, 248, + 14, 7, 232, 247, 14, 7, 232, 246, 14, 7, 232, 245, 14, 7, 232, 244, 14, + 7, 232, 243, 14, 7, 232, 242, 14, 7, 232, 241, 14, 7, 227, 117, 14, 7, + 227, 116, 14, 7, 227, 115, 14, 7, 227, 114, 14, 7, 227, 113, 14, 7, 227, + 112, 14, 7, 227, 111, 14, 7, 227, 110, 14, 7, 225, 190, 14, 7, 225, 189, + 14, 7, 225, 188, 14, 7, 225, 187, 14, 7, 225, 186, 14, 7, 225, 185, 14, + 7, 225, 184, 14, 7, 225, 183, 14, 7, 225, 182, 14, 7, 225, 181, 14, 7, + 223, 241, 14, 7, 223, 240, 14, 7, 223, 239, 14, 7, 223, 237, 14, 7, 223, + 235, 14, 7, 223, 234, 14, 7, 223, 232, 14, 7, 223, 230, 14, 7, 223, 228, + 14, 7, 223, 226, 14, 7, 223, 224, 14, 7, 223, 222, 14, 7, 223, 220, 14, + 7, 223, 219, 14, 7, 223, 217, 14, 7, 223, 215, 14, 7, 223, 214, 14, 7, + 223, 213, 14, 7, 223, 212, 14, 7, 223, 211, 14, 7, 223, 210, 14, 7, 223, + 209, 14, 7, 223, 208, 14, 7, 223, 207, 14, 7, 223, 205, 14, 7, 223, 203, + 14, 7, 223, 201, 14, 7, 223, 200, 14, 7, 223, 198, 14, 7, 223, 197, 14, + 7, 223, 195, 14, 7, 223, 194, 14, 7, 223, 192, 14, 7, 223, 190, 14, 7, + 223, 188, 14, 7, 223, 186, 14, 7, 223, 184, 14, 7, 223, 183, 14, 7, 223, + 181, 14, 7, 223, 179, 14, 7, 223, 178, 14, 7, 223, 176, 14, 7, 223, 174, + 14, 7, 223, 172, 14, 7, 223, 170, 14, 7, 223, 169, 14, 7, 223, 167, 14, + 7, 223, 165, 14, 7, 223, 163, 14, 7, 223, 162, 14, 7, 223, 160, 14, 7, + 223, 158, 14, 7, 223, 157, 14, 7, 223, 156, 14, 7, 223, 154, 14, 7, 223, + 152, 14, 7, 223, 150, 14, 7, 223, 148, 14, 7, 223, 146, 14, 7, 223, 144, + 14, 7, 223, 142, 14, 7, 223, 141, 14, 7, 223, 139, 14, 7, 223, 137, 14, + 7, 223, 135, 14, 7, 223, 133, 14, 7, 220, 211, 14, 7, 220, 210, 14, 7, + 220, 209, 14, 7, 220, 208, 14, 7, 220, 207, 14, 7, 220, 206, 14, 7, 220, + 205, 14, 7, 220, 204, 14, 7, 220, 203, 14, 7, 220, 202, 14, 7, 220, 201, + 14, 7, 220, 200, 14, 7, 220, 199, 14, 7, 220, 198, 14, 7, 220, 197, 14, + 7, 220, 196, 14, 7, 220, 195, 14, 7, 220, 194, 14, 7, 220, 193, 14, 7, + 220, 192, 14, 7, 220, 191, 14, 7, 220, 190, 14, 7, 220, 189, 14, 7, 220, + 188, 14, 7, 220, 187, 14, 7, 220, 186, 14, 7, 220, 185, 14, 7, 220, 184, + 14, 7, 220, 183, 14, 7, 220, 182, 14, 7, 220, 181, 14, 7, 220, 180, 14, + 7, 220, 179, 14, 7, 220, 178, 14, 7, 220, 177, 14, 7, 220, 176, 14, 7, + 220, 175, 14, 7, 220, 174, 14, 7, 220, 173, 14, 7, 220, 172, 14, 7, 220, + 171, 14, 7, 220, 170, 14, 7, 220, 169, 14, 7, 220, 168, 14, 7, 220, 167, + 14, 7, 220, 166, 14, 7, 220, 165, 14, 7, 220, 164, 14, 7, 220, 163, 14, + 7, 219, 46, 14, 7, 219, 45, 14, 7, 219, 44, 14, 7, 219, 43, 14, 7, 219, + 42, 14, 7, 219, 41, 14, 7, 219, 40, 14, 7, 219, 39, 14, 7, 219, 38, 14, + 7, 219, 37, 14, 7, 219, 36, 14, 7, 219, 35, 14, 7, 219, 34, 14, 7, 219, + 33, 14, 7, 219, 32, 14, 7, 219, 31, 14, 7, 219, 30, 14, 7, 219, 29, 14, + 7, 219, 28, 14, 7, 219, 27, 14, 7, 219, 26, 14, 7, 219, 25, 14, 7, 218, + 132, 14, 7, 218, 131, 14, 7, 218, 130, 14, 7, 218, 129, 14, 7, 218, 128, + 14, 7, 218, 127, 14, 7, 218, 126, 14, 7, 218, 125, 14, 7, 218, 124, 14, + 7, 218, 123, 14, 7, 218, 122, 14, 7, 218, 121, 14, 7, 218, 120, 14, 7, + 218, 119, 14, 7, 218, 118, 14, 7, 218, 117, 14, 7, 218, 116, 14, 7, 218, + 115, 14, 7, 218, 114, 14, 7, 218, 113, 14, 7, 218, 112, 14, 7, 218, 111, + 14, 7, 218, 110, 14, 7, 218, 109, 14, 7, 218, 108, 14, 7, 218, 107, 14, + 7, 217, 222, 14, 7, 217, 221, 14, 7, 217, 220, 14, 7, 217, 219, 14, 7, + 217, 218, 14, 7, 217, 217, 14, 7, 217, 216, 14, 7, 217, 215, 14, 7, 217, + 214, 14, 7, 217, 213, 14, 7, 217, 212, 14, 7, 217, 211, 14, 7, 217, 210, + 14, 7, 217, 209, 14, 7, 217, 208, 14, 7, 217, 207, 14, 7, 217, 206, 14, + 7, 217, 205, 14, 7, 217, 204, 14, 7, 217, 203, 14, 7, 217, 202, 14, 7, + 217, 201, 14, 7, 217, 200, 14, 7, 217, 199, 14, 7, 217, 198, 14, 7, 217, + 197, 14, 7, 217, 196, 14, 7, 217, 195, 14, 7, 217, 194, 14, 7, 217, 193, + 14, 7, 217, 192, 14, 7, 217, 191, 14, 7, 217, 190, 14, 7, 217, 189, 14, + 7, 217, 188, 14, 7, 217, 187, 14, 7, 217, 186, 14, 7, 217, 185, 14, 7, + 217, 184, 14, 7, 217, 183, 14, 7, 217, 182, 14, 7, 217, 181, 14, 7, 217, + 180, 14, 7, 217, 179, 14, 7, 217, 178, 14, 7, 217, 177, 14, 7, 217, 176, + 14, 7, 217, 175, 14, 7, 217, 174, 14, 7, 217, 173, 14, 7, 217, 172, 14, + 7, 217, 171, 14, 7, 217, 170, 14, 7, 217, 169, 14, 7, 217, 168, 14, 7, + 217, 167, 14, 7, 217, 166, 14, 7, 217, 165, 14, 7, 217, 164, 14, 7, 217, + 163, 14, 7, 217, 162, 14, 7, 217, 161, 14, 7, 217, 160, 14, 7, 217, 159, + 14, 7, 217, 158, 14, 7, 217, 157, 14, 7, 217, 156, 14, 7, 217, 155, 14, + 7, 217, 154, 14, 7, 217, 153, 14, 7, 217, 152, 14, 7, 217, 151, 14, 7, + 217, 150, 14, 7, 217, 149, 14, 7, 217, 148, 14, 7, 216, 225, 14, 7, 216, + 224, 14, 7, 216, 223, 14, 7, 216, 222, 14, 7, 216, 221, 14, 7, 216, 220, + 14, 7, 216, 219, 14, 7, 216, 218, 14, 7, 216, 217, 14, 7, 216, 216, 14, + 7, 216, 215, 14, 7, 216, 214, 14, 7, 216, 213, 14, 7, 214, 166, 14, 7, + 214, 165, 14, 7, 214, 164, 14, 7, 214, 163, 14, 7, 214, 162, 14, 7, 214, + 161, 14, 7, 214, 160, 14, 7, 214, 31, 14, 7, 214, 30, 14, 7, 214, 29, 14, + 7, 214, 28, 14, 7, 214, 27, 14, 7, 214, 26, 14, 7, 214, 25, 14, 7, 214, + 24, 14, 7, 214, 23, 14, 7, 214, 22, 14, 7, 214, 21, 14, 7, 214, 20, 14, + 7, 214, 19, 14, 7, 214, 18, 14, 7, 214, 17, 14, 7, 214, 16, 14, 7, 214, + 15, 14, 7, 214, 14, 14, 7, 214, 13, 14, 7, 214, 12, 14, 7, 214, 11, 14, + 7, 214, 10, 14, 7, 214, 9, 14, 7, 214, 8, 14, 7, 214, 7, 14, 7, 214, 6, + 14, 7, 214, 5, 14, 7, 214, 4, 14, 7, 214, 3, 14, 7, 214, 2, 14, 7, 214, + 1, 14, 7, 214, 0, 14, 7, 213, 255, 14, 7, 213, 254, 14, 7, 212, 119, 14, + 7, 212, 118, 14, 7, 212, 117, 14, 7, 212, 116, 14, 7, 212, 115, 14, 7, + 212, 114, 14, 7, 212, 113, 14, 7, 212, 112, 14, 7, 212, 111, 14, 7, 212, + 110, 14, 7, 212, 109, 14, 7, 212, 108, 14, 7, 212, 107, 14, 7, 212, 106, + 14, 7, 212, 105, 14, 7, 212, 104, 14, 7, 212, 103, 14, 7, 212, 102, 14, + 7, 212, 101, 14, 7, 212, 100, 14, 7, 212, 99, 14, 7, 212, 98, 14, 7, 212, + 97, 14, 7, 212, 96, 14, 7, 212, 95, 14, 7, 212, 94, 14, 7, 212, 93, 14, + 7, 212, 92, 14, 7, 212, 91, 14, 7, 212, 90, 14, 7, 212, 89, 14, 7, 212, + 88, 14, 7, 212, 87, 14, 7, 212, 86, 14, 7, 212, 85, 14, 7, 212, 84, 14, + 7, 212, 83, 14, 7, 212, 82, 14, 7, 212, 81, 14, 7, 212, 80, 14, 7, 212, + 79, 14, 7, 212, 78, 14, 7, 212, 77, 14, 7, 212, 76, 14, 7, 212, 75, 14, + 7, 212, 74, 14, 7, 212, 73, 14, 7, 212, 72, 14, 7, 212, 71, 14, 7, 212, + 70, 14, 7, 212, 69, 14, 7, 212, 68, 14, 7, 212, 67, 14, 7, 212, 66, 14, + 7, 207, 81, 14, 7, 207, 80, 14, 7, 207, 79, 14, 7, 207, 78, 14, 7, 207, + 77, 14, 7, 207, 76, 14, 7, 207, 75, 14, 7, 207, 74, 14, 7, 207, 73, 14, + 7, 207, 72, 14, 7, 207, 71, 14, 7, 207, 70, 14, 7, 207, 69, 14, 7, 207, + 68, 14, 7, 207, 67, 14, 7, 207, 66, 14, 7, 207, 65, 14, 7, 207, 64, 14, + 7, 207, 63, 14, 7, 207, 62, 14, 7, 207, 61, 14, 7, 207, 60, 14, 7, 207, + 59, 14, 7, 207, 58, 14, 7, 207, 57, 14, 7, 207, 56, 14, 7, 207, 55, 14, + 7, 207, 54, 14, 7, 207, 53, 14, 7, 207, 52, 14, 7, 207, 51, 14, 7, 207, + 50, 14, 7, 207, 49, 14, 7, 207, 48, 14, 7, 207, 47, 14, 7, 207, 46, 14, + 7, 207, 45, 14, 7, 207, 44, 14, 7, 207, 43, 14, 7, 207, 42, 14, 7, 207, + 41, 14, 7, 207, 40, 14, 7, 207, 39, 14, 7, 207, 38, 14, 7, 204, 95, 14, + 7, 204, 94, 14, 7, 204, 93, 14, 7, 204, 92, 14, 7, 204, 91, 14, 7, 204, + 90, 14, 7, 204, 89, 14, 7, 204, 88, 14, 7, 204, 87, 14, 7, 204, 86, 14, + 7, 204, 85, 14, 7, 204, 84, 14, 7, 204, 83, 14, 7, 204, 82, 14, 7, 204, + 81, 14, 7, 204, 80, 14, 7, 204, 79, 14, 7, 204, 78, 14, 7, 204, 77, 14, + 7, 204, 76, 14, 7, 204, 75, 14, 7, 204, 74, 14, 7, 204, 73, 14, 7, 204, + 72, 14, 7, 204, 71, 14, 7, 204, 70, 14, 7, 204, 69, 14, 7, 204, 68, 14, + 7, 204, 67, 14, 7, 204, 66, 14, 7, 204, 65, 14, 7, 204, 64, 14, 7, 204, + 63, 14, 7, 204, 62, 14, 7, 204, 61, 14, 7, 204, 60, 14, 7, 204, 59, 14, + 7, 204, 58, 14, 7, 204, 57, 14, 7, 204, 56, 14, 7, 204, 55, 14, 7, 204, + 54, 14, 7, 204, 53, 14, 7, 204, 52, 14, 7, 204, 51, 14, 7, 204, 50, 14, + 7, 204, 49, 14, 7, 203, 167, 14, 7, 203, 166, 14, 7, 203, 165, 14, 7, + 203, 164, 14, 7, 203, 163, 14, 7, 203, 162, 14, 7, 203, 161, 14, 7, 203, + 160, 14, 7, 203, 159, 14, 7, 203, 158, 14, 7, 203, 157, 14, 7, 203, 156, + 14, 7, 203, 155, 14, 7, 203, 154, 14, 7, 203, 153, 14, 7, 203, 152, 14, + 7, 203, 151, 14, 7, 203, 150, 14, 7, 203, 149, 14, 7, 203, 148, 14, 7, + 203, 147, 14, 7, 203, 146, 14, 7, 203, 145, 14, 7, 203, 144, 14, 7, 203, + 143, 14, 7, 203, 142, 14, 7, 203, 141, 14, 7, 203, 140, 14, 7, 203, 139, + 14, 7, 203, 138, 14, 7, 203, 137, 14, 7, 203, 136, 14, 7, 203, 135, 14, + 7, 203, 134, 14, 7, 203, 133, 14, 7, 203, 132, 14, 7, 203, 131, 14, 7, + 203, 130, 14, 7, 203, 129, 14, 7, 203, 128, 14, 7, 203, 127, 14, 7, 203, + 126, 14, 7, 203, 125, 14, 7, 203, 124, 14, 7, 203, 123, 14, 7, 203, 122, + 14, 7, 203, 121, 14, 7, 203, 120, 14, 7, 203, 119, 14, 7, 203, 118, 14, + 7, 203, 117, 14, 7, 203, 116, 14, 7, 203, 115, 14, 7, 203, 114, 14, 7, + 203, 113, 14, 7, 203, 112, 14, 7, 203, 111, 14, 7, 203, 110, 14, 7, 203, + 109, 14, 7, 203, 108, 14, 7, 203, 107, 14, 7, 203, 106, 14, 7, 203, 105, + 14, 7, 203, 104, 14, 7, 203, 103, 14, 7, 203, 102, 14, 7, 203, 101, 14, + 7, 203, 100, 14, 7, 203, 99, 14, 7, 203, 98, 14, 7, 203, 97, 14, 7, 203, + 96, 14, 7, 203, 95, 14, 7, 203, 94, 14, 7, 203, 93, 14, 7, 203, 92, 14, + 7, 203, 91, 14, 7, 201, 146, 14, 7, 201, 145, 14, 7, 201, 144, 14, 7, + 201, 143, 14, 7, 201, 142, 14, 7, 201, 141, 14, 7, 201, 140, 14, 7, 201, + 139, 14, 7, 201, 138, 14, 7, 201, 137, 14, 7, 201, 136, 14, 7, 201, 135, + 14, 7, 201, 134, 14, 7, 201, 133, 14, 7, 201, 132, 14, 7, 201, 131, 14, + 7, 201, 130, 14, 7, 201, 129, 14, 7, 201, 128, 14, 7, 201, 127, 14, 7, + 201, 126, 14, 7, 201, 125, 14, 7, 201, 124, 14, 7, 201, 123, 14, 7, 201, + 122, 14, 7, 201, 121, 14, 7, 201, 120, 14, 7, 201, 119, 14, 7, 201, 118, + 14, 7, 201, 117, 14, 7, 201, 116, 14, 7, 201, 115, 14, 7, 200, 193, 14, + 7, 200, 192, 14, 7, 200, 191, 14, 7, 200, 190, 14, 7, 200, 189, 14, 7, + 200, 188, 14, 7, 200, 187, 14, 7, 200, 186, 14, 7, 200, 185, 14, 7, 200, + 184, 14, 7, 200, 183, 14, 7, 200, 182, 14, 7, 200, 121, 14, 7, 200, 120, + 14, 7, 200, 119, 14, 7, 200, 118, 14, 7, 200, 117, 14, 7, 200, 116, 14, + 7, 200, 115, 14, 7, 200, 114, 14, 7, 200, 113, 14, 7, 199, 156, 14, 7, + 199, 155, 14, 7, 199, 154, 14, 7, 199, 153, 14, 7, 199, 152, 14, 7, 199, + 151, 14, 7, 199, 150, 14, 7, 199, 149, 14, 7, 199, 148, 14, 7, 199, 147, + 14, 7, 199, 146, 14, 7, 199, 145, 14, 7, 199, 144, 14, 7, 199, 143, 14, + 7, 199, 142, 14, 7, 199, 141, 14, 7, 199, 140, 14, 7, 199, 139, 14, 7, + 199, 138, 14, 7, 199, 137, 14, 7, 199, 136, 14, 7, 199, 135, 14, 7, 199, + 134, 14, 7, 199, 133, 14, 7, 199, 132, 14, 7, 199, 131, 14, 7, 199, 130, + 14, 7, 199, 129, 14, 7, 199, 128, 14, 7, 199, 127, 14, 7, 199, 126, 14, + 7, 199, 125, 14, 7, 199, 124, 14, 7, 199, 123, 14, 7, 199, 122, 14, 7, + 199, 121, 14, 7, 199, 120, 14, 7, 199, 119, 14, 7, 199, 118, 14, 7, 199, + 117, 14, 7, 199, 116, 14, 7, 252, 137, 14, 7, 252, 136, 14, 7, 252, 135, + 14, 7, 252, 134, 14, 7, 252, 133, 14, 7, 252, 132, 14, 7, 252, 131, 14, + 7, 252, 130, 14, 7, 252, 129, 14, 7, 252, 128, 14, 7, 252, 127, 14, 7, + 252, 126, 14, 7, 252, 125, 14, 7, 252, 124, 14, 7, 252, 123, 14, 7, 252, + 122, 14, 7, 252, 121, 14, 7, 252, 120, 14, 7, 252, 119, 14, 7, 252, 118, + 14, 7, 252, 117, 14, 7, 252, 116, 14, 7, 252, 115, 14, 7, 252, 114, 14, + 7, 252, 113, 14, 7, 252, 112, 14, 7, 252, 111, 14, 7, 252, 110, 14, 7, + 252, 109, 14, 7, 252, 108, 14, 7, 252, 107, 14, 7, 252, 106, 14, 7, 252, + 105, 14, 7, 252, 104, 28, 7, 255, 131, 28, 7, 255, 130, 28, 7, 255, 129, + 28, 7, 255, 128, 28, 7, 255, 127, 28, 7, 255, 125, 28, 7, 255, 122, 28, + 7, 255, 121, 28, 7, 255, 120, 28, 7, 255, 119, 28, 7, 255, 118, 28, 7, + 255, 117, 28, 7, 255, 116, 28, 7, 255, 115, 28, 7, 255, 114, 28, 7, 255, + 112, 28, 7, 255, 111, 28, 7, 255, 110, 28, 7, 255, 108, 28, 7, 255, 107, + 28, 7, 255, 106, 28, 7, 255, 105, 28, 7, 255, 104, 28, 7, 255, 103, 28, + 7, 255, 102, 28, 7, 255, 101, 28, 7, 255, 100, 28, 7, 255, 99, 28, 7, + 255, 98, 28, 7, 255, 97, 28, 7, 255, 95, 28, 7, 255, 94, 28, 7, 255, 93, + 28, 7, 255, 92, 28, 7, 255, 90, 28, 7, 255, 89, 28, 7, 255, 88, 28, 7, + 255, 87, 28, 7, 255, 86, 28, 7, 255, 85, 28, 7, 255, 84, 28, 7, 255, 83, + 28, 7, 255, 82, 28, 7, 255, 80, 28, 7, 255, 79, 28, 7, 255, 78, 28, 7, + 255, 76, 28, 7, 255, 74, 28, 7, 255, 73, 28, 7, 255, 72, 28, 7, 255, 71, + 28, 7, 255, 70, 28, 7, 255, 69, 28, 7, 255, 68, 28, 7, 255, 67, 28, 7, + 255, 66, 28, 7, 255, 65, 28, 7, 255, 64, 28, 7, 255, 63, 28, 7, 255, 62, + 28, 7, 255, 61, 28, 7, 255, 60, 28, 7, 255, 59, 28, 7, 255, 58, 28, 7, + 255, 57, 28, 7, 255, 56, 28, 7, 255, 55, 28, 7, 255, 54, 28, 7, 255, 53, + 28, 7, 255, 52, 28, 7, 255, 51, 28, 7, 255, 50, 28, 7, 255, 49, 28, 7, + 255, 48, 28, 7, 255, 47, 28, 7, 255, 46, 28, 7, 255, 45, 28, 7, 255, 44, + 28, 7, 255, 43, 28, 7, 255, 42, 28, 7, 255, 41, 28, 7, 255, 40, 28, 7, + 255, 39, 28, 7, 255, 38, 28, 7, 255, 37, 28, 7, 255, 36, 28, 7, 255, 35, + 28, 7, 255, 34, 28, 7, 255, 33, 28, 7, 255, 32, 28, 7, 255, 31, 28, 7, + 255, 30, 28, 7, 255, 29, 28, 7, 255, 28, 28, 7, 255, 27, 28, 7, 255, 26, + 28, 7, 255, 25, 28, 7, 255, 24, 28, 7, 255, 23, 28, 7, 255, 22, 28, 7, + 255, 21, 28, 7, 255, 20, 28, 7, 255, 19, 28, 7, 255, 18, 28, 7, 255, 17, + 28, 7, 255, 16, 28, 7, 255, 15, 28, 7, 255, 14, 28, 7, 255, 13, 28, 7, + 255, 12, 28, 7, 255, 11, 28, 7, 255, 10, 28, 7, 255, 8, 28, 7, 255, 7, + 28, 7, 255, 6, 28, 7, 255, 5, 28, 7, 255, 4, 28, 7, 255, 3, 28, 7, 255, + 2, 28, 7, 255, 1, 28, 7, 255, 0, 28, 7, 254, 255, 28, 7, 254, 254, 28, 7, + 254, 253, 28, 7, 254, 252, 28, 7, 254, 251, 28, 7, 254, 250, 28, 7, 254, + 249, 28, 7, 254, 248, 28, 7, 254, 247, 28, 7, 254, 246, 28, 7, 254, 245, + 28, 7, 254, 244, 28, 7, 254, 243, 28, 7, 254, 242, 28, 7, 254, 241, 28, + 7, 254, 240, 28, 7, 254, 239, 28, 7, 254, 238, 28, 7, 254, 237, 28, 7, + 254, 236, 28, 7, 254, 235, 28, 7, 254, 234, 28, 7, 254, 233, 28, 7, 254, + 232, 28, 7, 254, 231, 28, 7, 254, 229, 28, 7, 254, 228, 28, 7, 254, 227, + 28, 7, 254, 226, 28, 7, 254, 225, 28, 7, 254, 224, 28, 7, 254, 223, 28, + 7, 254, 222, 28, 7, 254, 221, 28, 7, 254, 220, 28, 7, 254, 219, 28, 7, + 254, 218, 28, 7, 254, 216, 28, 7, 254, 215, 28, 7, 254, 214, 28, 7, 254, + 213, 28, 7, 254, 212, 28, 7, 254, 211, 28, 7, 254, 210, 28, 7, 254, 209, + 28, 7, 254, 208, 28, 7, 254, 207, 28, 7, 254, 206, 28, 7, 254, 205, 28, + 7, 254, 204, 28, 7, 254, 203, 28, 7, 254, 202, 28, 7, 254, 201, 28, 7, + 254, 200, 28, 7, 254, 199, 28, 7, 254, 198, 28, 7, 254, 197, 28, 7, 254, + 196, 28, 7, 254, 195, 28, 7, 254, 194, 28, 7, 254, 193, 28, 7, 254, 192, + 28, 7, 254, 191, 28, 7, 254, 190, 28, 7, 254, 189, 28, 7, 254, 188, 28, + 7, 254, 187, 28, 7, 254, 186, 28, 7, 254, 185, 28, 7, 254, 184, 28, 7, + 254, 183, 28, 7, 254, 182, 28, 7, 254, 181, 28, 7, 254, 180, 28, 7, 254, + 179, 28, 7, 254, 178, 28, 7, 254, 177, 28, 7, 254, 176, 28, 7, 254, 175, + 28, 7, 254, 174, 28, 7, 254, 173, 28, 7, 254, 172, 28, 7, 254, 171, 28, + 7, 254, 170, 28, 7, 254, 169, 28, 7, 254, 168, 28, 7, 254, 167, 28, 7, + 254, 166, 28, 7, 254, 165, 28, 7, 254, 164, 28, 7, 254, 163, 28, 7, 254, + 162, 28, 7, 254, 161, 28, 7, 254, 160, 28, 7, 254, 159, 28, 7, 254, 158, + 28, 7, 254, 157, 28, 7, 254, 156, 28, 7, 254, 155, 28, 7, 254, 154, 28, + 7, 254, 153, 28, 7, 254, 152, 28, 7, 254, 151, 28, 7, 254, 150, 28, 7, + 254, 149, 28, 7, 254, 148, 28, 7, 254, 146, 28, 7, 254, 145, 28, 7, 254, + 144, 28, 7, 254, 143, 28, 7, 254, 142, 28, 7, 254, 141, 28, 7, 254, 140, + 28, 7, 254, 139, 28, 7, 254, 138, 28, 7, 254, 137, 28, 7, 254, 136, 28, + 7, 254, 135, 28, 7, 254, 134, 28, 7, 254, 133, 28, 7, 254, 132, 28, 7, + 254, 131, 28, 7, 254, 130, 28, 7, 254, 129, 28, 7, 254, 128, 28, 7, 254, + 127, 28, 7, 254, 126, 28, 7, 254, 125, 28, 7, 254, 124, 28, 7, 254, 123, + 28, 7, 254, 122, 28, 7, 254, 121, 28, 7, 254, 120, 28, 7, 254, 119, 28, + 7, 254, 118, 28, 7, 254, 117, 28, 7, 254, 116, 28, 7, 254, 115, 28, 7, + 254, 114, 28, 7, 254, 113, 28, 7, 254, 112, 28, 7, 254, 111, 28, 7, 254, + 110, 28, 7, 254, 109, 28, 7, 254, 108, 28, 7, 254, 107, 28, 7, 254, 106, + 28, 7, 254, 105, 28, 7, 254, 104, 28, 7, 254, 103, 28, 7, 254, 102, 28, + 7, 254, 101, 28, 7, 254, 100, 28, 7, 254, 99, 28, 7, 254, 98, 28, 7, 254, + 97, 28, 7, 254, 96, 28, 7, 254, 95, 28, 7, 254, 94, 28, 7, 254, 93, 28, + 7, 254, 92, 28, 7, 254, 91, 28, 7, 254, 90, 28, 7, 254, 89, 28, 7, 254, + 88, 28, 7, 254, 87, 28, 7, 254, 86, 28, 7, 254, 85, 28, 7, 254, 84, 28, + 7, 254, 83, 28, 7, 254, 82, 28, 7, 254, 81, 28, 7, 254, 80, 28, 7, 254, + 79, 28, 7, 254, 78, 28, 7, 254, 77, 28, 7, 254, 76, 28, 7, 254, 75, 28, + 7, 254, 74, 28, 7, 254, 73, 28, 7, 254, 72, 28, 7, 254, 71, 28, 7, 254, + 70, 28, 7, 254, 69, 28, 7, 254, 68, 28, 7, 254, 67, 28, 7, 254, 66, 28, + 7, 254, 65, 28, 7, 254, 64, 28, 7, 254, 63, 28, 7, 254, 62, 28, 7, 254, + 61, 28, 7, 254, 60, 28, 7, 254, 59, 28, 7, 254, 58, 28, 7, 254, 57, 28, + 7, 254, 56, 28, 7, 254, 55, 28, 7, 254, 54, 28, 7, 254, 53, 28, 7, 254, + 52, 28, 7, 254, 51, 28, 7, 254, 50, 28, 7, 254, 49, 28, 7, 254, 48, 28, + 7, 254, 47, 28, 7, 254, 46, 28, 7, 254, 45, 28, 7, 254, 44, 28, 7, 254, + 43, 28, 7, 254, 42, 28, 7, 254, 41, 28, 7, 254, 40, 28, 7, 254, 39, 28, + 7, 254, 38, 28, 7, 254, 37, 28, 7, 254, 36, 28, 7, 254, 34, 28, 7, 254, + 33, 28, 7, 254, 32, 28, 7, 254, 31, 28, 7, 254, 30, 28, 7, 254, 29, 28, + 7, 254, 28, 28, 7, 254, 27, 28, 7, 254, 26, 28, 7, 254, 25, 28, 7, 254, + 24, 28, 7, 254, 21, 28, 7, 254, 20, 28, 7, 254, 19, 28, 7, 254, 18, 28, + 7, 254, 14, 28, 7, 254, 13, 28, 7, 254, 12, 28, 7, 254, 11, 28, 7, 254, + 10, 28, 7, 254, 9, 28, 7, 254, 8, 28, 7, 254, 7, 28, 7, 254, 6, 28, 7, + 254, 5, 28, 7, 254, 4, 28, 7, 254, 3, 28, 7, 254, 2, 28, 7, 254, 1, 28, + 7, 254, 0, 28, 7, 253, 255, 28, 7, 253, 254, 28, 7, 253, 253, 28, 7, 253, + 252, 28, 7, 253, 250, 28, 7, 253, 249, 28, 7, 253, 248, 28, 7, 253, 247, + 28, 7, 253, 246, 28, 7, 253, 245, 28, 7, 253, 244, 28, 7, 253, 243, 28, + 7, 253, 242, 28, 7, 253, 241, 28, 7, 253, 240, 28, 7, 253, 239, 28, 7, + 253, 238, 28, 7, 253, 237, 28, 7, 253, 236, 28, 7, 253, 235, 28, 7, 253, + 234, 28, 7, 253, 233, 28, 7, 253, 232, 28, 7, 253, 231, 28, 7, 253, 230, + 28, 7, 253, 229, 28, 7, 253, 228, 28, 7, 253, 227, 28, 7, 253, 226, 28, + 7, 253, 225, 28, 7, 253, 224, 28, 7, 253, 223, 28, 7, 253, 222, 28, 7, + 253, 221, 28, 7, 253, 220, 28, 7, 253, 219, 28, 7, 253, 218, 28, 7, 253, + 217, 28, 7, 253, 216, 28, 7, 253, 215, 28, 7, 253, 214, 28, 7, 253, 213, + 28, 7, 253, 212, 28, 7, 253, 211, 28, 7, 253, 210, 28, 7, 253, 209, 28, + 7, 253, 208, 28, 7, 253, 207, 28, 7, 253, 206, 28, 7, 253, 205, 28, 7, + 253, 204, 28, 7, 253, 203, 28, 7, 253, 202, 28, 7, 253, 201, 28, 7, 253, + 200, 28, 7, 253, 199, 28, 7, 253, 198, 28, 7, 253, 197, 28, 7, 253, 196, + 28, 7, 253, 195, 28, 7, 253, 194, 28, 7, 253, 193, 28, 7, 253, 192, 28, + 7, 253, 191, 28, 7, 253, 190, 28, 7, 253, 189, 213, 253, 217, 34, 213, + 88, 28, 7, 253, 188, 28, 7, 253, 187, 28, 7, 253, 186, 28, 7, 253, 185, + 28, 7, 253, 184, 28, 7, 253, 183, 28, 7, 253, 182, 28, 7, 253, 181, 28, + 7, 253, 180, 28, 7, 253, 179, 28, 7, 253, 178, 28, 7, 253, 177, 192, 28, + 7, 253, 176, 28, 7, 253, 175, 28, 7, 253, 174, 28, 7, 253, 173, 28, 7, + 253, 172, 28, 7, 253, 171, 28, 7, 253, 170, 28, 7, 253, 168, 28, 7, 253, + 166, 28, 7, 253, 164, 28, 7, 253, 162, 28, 7, 253, 160, 28, 7, 253, 158, + 28, 7, 253, 156, 28, 7, 253, 154, 28, 7, 253, 152, 28, 7, 253, 150, 248, + 244, 224, 97, 81, 28, 7, 253, 148, 238, 171, 224, 97, 81, 28, 7, 253, + 147, 28, 7, 253, 145, 28, 7, 253, 143, 28, 7, 253, 141, 28, 7, 253, 139, + 28, 7, 253, 137, 28, 7, 253, 135, 28, 7, 253, 133, 28, 7, 253, 131, 28, + 7, 253, 130, 28, 7, 253, 129, 28, 7, 253, 128, 28, 7, 253, 127, 28, 7, + 253, 126, 28, 7, 253, 125, 28, 7, 253, 124, 28, 7, 253, 123, 28, 7, 253, + 122, 28, 7, 253, 121, 28, 7, 253, 120, 28, 7, 253, 119, 28, 7, 253, 118, + 28, 7, 253, 117, 28, 7, 253, 116, 28, 7, 253, 115, 28, 7, 253, 114, 28, + 7, 253, 113, 28, 7, 253, 112, 28, 7, 253, 111, 28, 7, 253, 110, 28, 7, + 253, 109, 28, 7, 253, 108, 28, 7, 253, 107, 28, 7, 253, 106, 28, 7, 253, + 105, 28, 7, 253, 104, 28, 7, 253, 103, 28, 7, 253, 102, 28, 7, 253, 101, + 28, 7, 253, 100, 28, 7, 253, 99, 28, 7, 253, 98, 28, 7, 253, 97, 28, 7, + 253, 96, 28, 7, 253, 95, 28, 7, 253, 94, 28, 7, 253, 93, 28, 7, 253, 92, + 28, 7, 253, 91, 28, 7, 253, 90, 28, 7, 253, 89, 28, 7, 253, 88, 28, 7, + 253, 87, 28, 7, 253, 86, 28, 7, 253, 85, 28, 7, 253, 84, 28, 7, 253, 83, + 28, 7, 253, 82, 28, 7, 253, 81, 28, 7, 253, 80, 28, 7, 253, 79, 28, 7, + 253, 78, 28, 7, 253, 77, 28, 7, 253, 76, 28, 7, 253, 75, 28, 7, 253, 74, + 28, 7, 253, 73, 28, 7, 253, 72, 28, 7, 253, 71, 28, 7, 253, 70, 28, 7, + 253, 69, 28, 7, 253, 68, 28, 7, 253, 67, 28, 7, 253, 66, 28, 7, 253, 65, + 28, 7, 253, 64, 28, 7, 253, 63, 28, 7, 253, 62, 28, 7, 253, 61, 28, 7, + 253, 60, 28, 7, 253, 59, 28, 7, 253, 58, 28, 7, 253, 57, 28, 7, 253, 56, + 28, 7, 253, 55, 28, 7, 253, 54, 28, 7, 253, 53, 28, 7, 253, 52, 28, 7, + 253, 51, 28, 7, 253, 50, 28, 7, 253, 49, 28, 7, 253, 48, 28, 7, 253, 47, + 28, 7, 253, 46, 28, 7, 253, 45, 28, 7, 253, 44, 28, 7, 253, 43, 28, 7, + 253, 42, 28, 7, 253, 41, 28, 7, 253, 40, 28, 7, 253, 39, 28, 7, 253, 38, + 28, 7, 253, 37, 28, 7, 253, 36, 28, 7, 253, 35, 28, 7, 253, 34, 28, 7, + 253, 33, 28, 7, 253, 32, 28, 7, 253, 31, 28, 7, 253, 30, 28, 7, 253, 29, + 28, 7, 253, 28, 28, 7, 253, 27, 28, 7, 253, 26, 28, 7, 253, 25, 28, 7, + 253, 24, 28, 7, 253, 23, 28, 7, 253, 22, 28, 7, 253, 21, 25, 1, 215, 235, + 219, 186, 221, 253, 25, 1, 215, 235, 236, 23, 237, 5, 25, 1, 215, 235, + 215, 83, 221, 254, 215, 152, 25, 1, 215, 235, 215, 83, 221, 254, 215, + 153, 25, 1, 215, 235, 220, 158, 221, 253, 25, 1, 215, 235, 209, 216, 25, + 1, 215, 235, 205, 212, 221, 253, 25, 1, 215, 235, 218, 8, 221, 253, 25, + 1, 215, 235, 210, 20, 216, 211, 219, 82, 25, 1, 215, 235, 215, 83, 216, + 211, 219, 83, 215, 152, 25, 1, 215, 235, 215, 83, 216, 211, 219, 83, 215, + 153, 25, 1, 215, 235, 222, 214, 25, 1, 215, 235, 204, 216, 222, 215, 25, + 1, 215, 235, 219, 247, 25, 1, 215, 235, 222, 211, 25, 1, 215, 235, 222, + 169, 25, 1, 215, 235, 220, 237, 25, 1, 215, 235, 210, 138, 25, 1, 215, + 235, 218, 140, 25, 1, 215, 235, 226, 226, 25, 1, 215, 235, 219, 50, 25, + 1, 215, 235, 207, 193, 25, 1, 215, 235, 219, 185, 25, 1, 215, 235, 225, + 73, 25, 1, 215, 235, 224, 238, 225, 237, 25, 1, 215, 235, 218, 150, 222, + 5, 25, 1, 215, 235, 222, 218, 25, 1, 215, 235, 216, 101, 25, 1, 215, 235, + 235, 180, 25, 1, 215, 235, 216, 166, 25, 1, 215, 235, 221, 107, 219, 220, + 25, 1, 215, 235, 217, 245, 222, 8, 25, 1, 215, 235, 108, 199, 186, 220, + 151, 25, 1, 215, 235, 235, 181, 25, 1, 215, 235, 218, 150, 218, 151, 25, + 1, 215, 235, 209, 109, 25, 1, 215, 235, 221, 246, 25, 1, 215, 235, 222, + 11, 25, 1, 215, 235, 221, 83, 25, 1, 215, 235, 227, 85, 25, 1, 215, 235, + 216, 211, 225, 29, 25, 1, 215, 235, 220, 76, 225, 29, 25, 1, 215, 235, + 216, 0, 25, 1, 215, 235, 222, 212, 25, 1, 215, 235, 219, 124, 25, 1, 215, + 235, 214, 205, 25, 1, 215, 235, 204, 213, 25, 1, 215, 235, 224, 38, 25, + 1, 215, 235, 209, 11, 25, 1, 215, 235, 206, 131, 25, 1, 215, 235, 222, + 209, 25, 1, 215, 235, 226, 233, 25, 1, 215, 235, 220, 72, 25, 1, 215, + 235, 225, 250, 25, 1, 215, 235, 221, 84, 25, 1, 215, 235, 209, 212, 25, + 1, 215, 235, 224, 90, 25, 1, 215, 235, 237, 74, 25, 1, 215, 235, 212, + 241, 25, 1, 215, 235, 226, 39, 25, 1, 215, 235, 209, 7, 25, 1, 215, 235, + 222, 165, 215, 194, 25, 1, 215, 235, 210, 13, 25, 1, 215, 235, 218, 149, + 25, 1, 215, 235, 209, 252, 218, 160, 199, 194, 25, 1, 215, 235, 218, 30, + 221, 103, 25, 1, 215, 235, 216, 206, 25, 1, 215, 235, 219, 52, 25, 1, + 215, 235, 203, 235, 25, 1, 215, 235, 219, 223, 25, 1, 215, 235, 222, 208, + 25, 1, 215, 235, 219, 94, 25, 1, 215, 235, 222, 105, 25, 1, 215, 235, + 218, 44, 25, 1, 215, 235, 206, 135, 25, 1, 215, 235, 209, 4, 25, 1, 215, + 235, 216, 207, 25, 1, 215, 235, 218, 164, 25, 1, 215, 235, 222, 216, 25, + 1, 215, 235, 218, 41, 25, 1, 215, 235, 227, 48, 25, 1, 215, 235, 218, + 167, 25, 1, 215, 235, 203, 54, 25, 1, 215, 235, 224, 42, 25, 1, 215, 235, + 220, 24, 25, 1, 215, 235, 220, 126, 25, 1, 215, 235, 222, 104, 25, 1, + 215, 234, 218, 162, 25, 1, 215, 234, 204, 216, 222, 213, 25, 1, 215, 234, + 209, 171, 25, 1, 215, 234, 210, 142, 204, 215, 25, 1, 215, 234, 224, 92, + 218, 146, 25, 1, 215, 234, 222, 111, 222, 217, 25, 1, 215, 234, 226, 155, + 25, 1, 215, 234, 200, 17, 25, 1, 215, 234, 222, 106, 25, 1, 215, 234, + 227, 71, 25, 1, 215, 234, 216, 57, 25, 1, 215, 234, 200, 95, 225, 29, 25, + 1, 215, 234, 225, 92, 218, 160, 218, 55, 25, 1, 215, 234, 218, 143, 210, + 39, 25, 1, 215, 234, 220, 43, 219, 97, 25, 1, 215, 234, 235, 178, 25, 1, + 215, 234, 215, 142, 25, 1, 215, 234, 204, 216, 218, 158, 25, 1, 215, 234, + 210, 44, 219, 92, 25, 1, 215, 234, 210, 40, 25, 1, 215, 234, 221, 254, + 206, 134, 25, 1, 215, 234, 222, 93, 222, 107, 25, 1, 215, 234, 218, 42, + 218, 146, 25, 1, 215, 234, 226, 222, 25, 1, 215, 234, 235, 179, 25, 1, + 215, 234, 226, 218, 25, 1, 215, 234, 225, 170, 25, 1, 215, 234, 216, 104, + 25, 1, 215, 234, 202, 241, 25, 1, 215, 234, 219, 187, 220, 235, 25, 1, + 215, 234, 219, 222, 222, 89, 25, 1, 215, 234, 200, 214, 25, 1, 215, 234, + 212, 40, 25, 1, 215, 234, 207, 28, 25, 1, 215, 234, 222, 10, 25, 1, 215, + 234, 219, 206, 25, 1, 215, 234, 219, 207, 225, 70, 25, 1, 215, 234, 222, + 0, 25, 1, 215, 234, 207, 244, 25, 1, 215, 234, 222, 97, 25, 1, 215, 234, + 221, 88, 25, 1, 215, 234, 218, 58, 25, 1, 215, 234, 214, 209, 25, 1, 215, + 234, 222, 9, 219, 224, 25, 1, 215, 234, 237, 117, 25, 1, 215, 234, 222, + 84, 25, 1, 215, 234, 237, 140, 25, 1, 215, 234, 226, 230, 25, 1, 215, + 234, 222, 235, 219, 86, 25, 1, 215, 234, 222, 235, 219, 62, 25, 1, 215, + 234, 224, 237, 25, 1, 215, 234, 219, 230, 25, 1, 215, 234, 218, 169, 25, + 1, 215, 234, 178, 25, 1, 215, 234, 226, 140, 25, 1, 215, 234, 219, 175, + 25, 1, 173, 219, 186, 222, 215, 25, 1, 173, 218, 7, 25, 1, 173, 199, 194, + 25, 1, 173, 201, 98, 25, 1, 173, 219, 223, 25, 1, 173, 220, 64, 25, 1, + 173, 219, 193, 25, 1, 173, 235, 188, 25, 1, 173, 222, 101, 25, 1, 173, + 236, 30, 25, 1, 173, 218, 32, 221, 145, 222, 12, 25, 1, 173, 218, 138, + 222, 92, 25, 1, 173, 222, 98, 25, 1, 173, 215, 148, 25, 1, 173, 220, 49, + 25, 1, 173, 222, 109, 247, 186, 25, 1, 173, 226, 220, 25, 1, 173, 235, + 189, 25, 1, 173, 226, 227, 25, 1, 173, 199, 212, 221, 10, 25, 1, 173, + 218, 1, 25, 1, 173, 222, 86, 25, 1, 173, 218, 168, 25, 1, 173, 222, 92, + 25, 1, 173, 200, 18, 25, 1, 173, 226, 47, 25, 1, 173, 227, 105, 25, 1, + 173, 210, 137, 25, 1, 173, 220, 58, 25, 1, 173, 207, 26, 25, 1, 173, 219, + 66, 25, 1, 173, 205, 212, 199, 197, 25, 1, 173, 208, 19, 25, 1, 173, 219, + 213, 218, 55, 25, 1, 173, 202, 240, 25, 1, 173, 220, 129, 25, 1, 173, + 222, 235, 226, 229, 25, 1, 173, 218, 151, 25, 1, 173, 219, 208, 25, 1, + 173, 225, 74, 25, 1, 173, 222, 94, 25, 1, 173, 221, 245, 25, 1, 173, 218, + 145, 25, 1, 173, 206, 130, 25, 1, 173, 219, 210, 25, 1, 173, 236, 187, + 25, 1, 173, 220, 63, 25, 1, 173, 218, 170, 25, 1, 173, 218, 166, 25, 1, + 173, 248, 12, 25, 1, 173, 202, 242, 25, 1, 173, 222, 99, 25, 1, 173, 212, + 175, 25, 1, 173, 219, 96, 25, 1, 173, 225, 91, 25, 1, 173, 205, 209, 25, + 1, 173, 218, 152, 219, 175, 25, 1, 173, 219, 88, 25, 1, 173, 226, 233, + 25, 1, 173, 219, 215, 25, 1, 173, 222, 208, 25, 1, 173, 222, 87, 25, 1, + 173, 224, 42, 25, 1, 173, 225, 237, 25, 1, 173, 219, 94, 25, 1, 173, 219, + 175, 25, 1, 173, 200, 204, 25, 1, 173, 219, 211, 25, 1, 173, 218, 155, + 25, 1, 173, 218, 147, 25, 1, 173, 225, 252, 219, 52, 25, 1, 173, 218, + 153, 25, 1, 173, 220, 71, 25, 1, 173, 222, 235, 218, 158, 25, 1, 173, + 200, 109, 25, 1, 173, 220, 70, 25, 1, 173, 209, 215, 25, 1, 173, 210, + 140, 25, 1, 173, 222, 95, 25, 1, 173, 222, 215, 25, 1, 173, 222, 105, 25, + 1, 173, 226, 221, 25, 1, 173, 222, 96, 25, 1, 173, 226, 225, 25, 1, 173, + 222, 109, 215, 199, 25, 1, 173, 199, 177, 25, 1, 173, 219, 84, 25, 1, + 173, 221, 200, 25, 1, 173, 221, 39, 25, 1, 173, 210, 16, 25, 1, 173, 226, + 244, 225, 52, 25, 1, 173, 226, 244, 237, 153, 25, 1, 173, 219, 245, 25, + 1, 173, 220, 126, 25, 1, 173, 224, 158, 25, 1, 173, 215, 160, 25, 1, 173, + 216, 47, 25, 1, 173, 206, 146, 25, 1, 137, 222, 85, 25, 1, 137, 201, 96, + 25, 1, 137, 219, 82, 25, 1, 137, 221, 253, 25, 1, 137, 219, 80, 25, 1, + 137, 224, 203, 25, 1, 137, 219, 85, 25, 1, 137, 218, 165, 25, 1, 137, + 219, 229, 25, 1, 137, 218, 55, 25, 1, 137, 200, 215, 25, 1, 137, 219, + 183, 25, 1, 137, 210, 63, 25, 1, 137, 219, 194, 25, 1, 137, 226, 228, 25, + 1, 137, 206, 132, 25, 1, 137, 210, 42, 25, 1, 137, 219, 93, 25, 1, 137, + 207, 244, 25, 1, 137, 226, 233, 25, 1, 137, 200, 97, 25, 1, 137, 225, + 253, 25, 1, 137, 212, 3, 25, 1, 137, 222, 2, 25, 1, 137, 220, 62, 25, 1, + 137, 222, 183, 25, 1, 137, 222, 8, 25, 1, 137, 210, 139, 25, 1, 137, 200, + 41, 25, 1, 137, 219, 87, 25, 1, 137, 226, 224, 222, 88, 25, 1, 137, 219, + 190, 25, 1, 137, 204, 215, 25, 1, 137, 235, 198, 25, 1, 137, 219, 180, + 25, 1, 137, 237, 118, 25, 1, 137, 220, 66, 25, 1, 137, 221, 237, 25, 1, + 137, 224, 231, 25, 1, 137, 220, 48, 25, 1, 137, 221, 102, 25, 1, 137, + 221, 241, 25, 1, 137, 214, 189, 25, 1, 137, 221, 239, 25, 1, 137, 221, + 255, 25, 1, 137, 224, 25, 25, 1, 137, 218, 157, 25, 1, 137, 222, 108, 25, + 1, 137, 225, 227, 25, 1, 137, 218, 44, 25, 1, 137, 206, 135, 25, 1, 137, + 209, 4, 25, 1, 137, 199, 177, 25, 1, 137, 226, 225, 25, 1, 137, 213, 233, + 25, 1, 137, 206, 189, 25, 1, 137, 219, 191, 25, 1, 137, 222, 4, 25, 1, + 137, 218, 156, 25, 1, 137, 226, 223, 25, 1, 137, 215, 154, 25, 1, 137, + 215, 250, 25, 1, 137, 218, 18, 25, 1, 137, 224, 237, 25, 1, 137, 219, + 230, 25, 1, 137, 222, 1, 25, 1, 137, 219, 203, 25, 1, 137, 199, 191, 25, + 1, 137, 216, 135, 25, 1, 137, 199, 190, 25, 1, 137, 220, 71, 25, 1, 137, + 218, 146, 25, 1, 137, 208, 21, 25, 1, 137, 226, 1, 25, 1, 137, 219, 219, + 25, 1, 137, 219, 188, 25, 1, 137, 204, 196, 25, 1, 137, 222, 12, 25, 1, + 137, 225, 247, 25, 1, 137, 218, 154, 25, 1, 137, 206, 133, 25, 1, 137, + 222, 210, 25, 1, 137, 219, 228, 25, 1, 137, 224, 230, 25, 1, 137, 219, + 209, 25, 1, 137, 218, 159, 25, 1, 137, 219, 66, 25, 1, 137, 235, 182, 25, + 1, 137, 226, 15, 25, 1, 137, 213, 140, 217, 92, 25, 1, 137, 207, 15, 25, + 1, 137, 205, 154, 25, 1, 137, 218, 41, 25, 1, 137, 213, 33, 25, 1, 137, + 225, 31, 25, 1, 137, 222, 63, 25, 1, 137, 223, 243, 25, 1, 137, 207, 193, + 25, 1, 137, 221, 41, 25, 1, 137, 210, 28, 25, 1, 137, 210, 38, 25, 1, + 137, 225, 199, 25, 1, 137, 218, 133, 25, 1, 137, 209, 220, 25, 1, 137, + 218, 148, 25, 1, 137, 216, 61, 25, 1, 137, 219, 150, 25, 1, 137, 209, + 251, 25, 1, 137, 214, 204, 25, 1, 137, 220, 235, 25, 1, 137, 224, 70, 25, + 1, 137, 213, 140, 221, 34, 25, 1, 137, 206, 15, 25, 1, 137, 218, 135, 25, + 1, 137, 222, 109, 210, 135, 25, 1, 137, 212, 1, 25, 1, 137, 237, 194, 25, + 1, 96, 220, 70, 25, 1, 96, 205, 160, 25, 1, 96, 222, 98, 25, 1, 96, 225, + 74, 25, 1, 96, 202, 180, 25, 1, 96, 224, 76, 25, 1, 96, 216, 210, 25, 1, + 96, 209, 15, 25, 1, 96, 213, 208, 25, 1, 96, 218, 161, 25, 1, 96, 220, + 41, 25, 1, 96, 214, 221, 25, 1, 96, 206, 246, 25, 1, 96, 219, 196, 25, 1, + 96, 226, 43, 25, 1, 96, 200, 207, 25, 1, 96, 211, 190, 25, 1, 96, 219, + 220, 25, 1, 96, 216, 207, 25, 1, 96, 205, 161, 25, 1, 96, 225, 251, 25, + 1, 96, 224, 91, 25, 1, 96, 218, 164, 25, 1, 96, 219, 172, 25, 1, 96, 222, + 216, 25, 1, 96, 219, 189, 25, 1, 96, 219, 171, 25, 1, 96, 218, 163, 25, + 1, 96, 213, 30, 25, 1, 96, 219, 84, 25, 1, 96, 216, 59, 25, 1, 96, 212, + 61, 25, 1, 96, 219, 204, 25, 1, 96, 221, 247, 25, 1, 96, 235, 176, 25, 1, + 96, 219, 192, 25, 1, 96, 219, 95, 25, 1, 96, 222, 164, 25, 1, 96, 224, + 72, 25, 1, 96, 219, 225, 25, 1, 96, 220, 54, 25, 1, 96, 207, 14, 218, + 146, 25, 1, 96, 210, 141, 25, 1, 96, 214, 214, 25, 1, 96, 220, 74, 209, + 22, 25, 1, 96, 219, 212, 218, 55, 25, 1, 96, 200, 5, 25, 1, 96, 235, 177, + 25, 1, 96, 204, 214, 25, 1, 96, 200, 21, 25, 1, 96, 215, 106, 25, 1, 96, + 204, 202, 25, 1, 96, 226, 231, 25, 1, 96, 208, 20, 25, 1, 96, 206, 134, + 25, 1, 96, 202, 243, 25, 1, 96, 201, 44, 25, 1, 96, 225, 173, 25, 1, 96, + 214, 224, 25, 1, 96, 207, 27, 25, 1, 96, 235, 197, 25, 1, 96, 219, 235, + 25, 1, 96, 210, 41, 25, 1, 96, 221, 242, 25, 1, 96, 222, 102, 25, 1, 96, + 218, 5, 25, 1, 96, 219, 48, 25, 1, 96, 236, 26, 25, 1, 96, 204, 203, 25, + 1, 96, 226, 5, 25, 1, 96, 200, 73, 25, 1, 96, 218, 42, 246, 126, 25, 1, + 96, 199, 251, 25, 1, 96, 222, 3, 25, 1, 96, 220, 59, 25, 1, 96, 215, 195, + 25, 1, 96, 199, 196, 25, 1, 96, 224, 232, 25, 1, 96, 236, 187, 25, 1, 96, + 236, 25, 25, 1, 96, 219, 182, 25, 1, 96, 226, 233, 25, 1, 96, 222, 219, + 25, 1, 96, 219, 195, 25, 1, 96, 235, 183, 25, 1, 96, 237, 195, 25, 1, 96, + 218, 136, 25, 1, 96, 215, 251, 25, 1, 96, 200, 19, 25, 1, 96, 219, 221, + 25, 1, 96, 218, 42, 248, 205, 25, 1, 96, 217, 241, 25, 1, 96, 215, 79, + 25, 1, 96, 221, 200, 25, 1, 96, 236, 185, 25, 1, 96, 220, 151, 25, 1, 96, + 221, 39, 25, 1, 96, 235, 182, 25, 1, 96, 236, 190, 70, 25, 1, 96, 220, + 236, 25, 1, 96, 214, 220, 25, 1, 96, 219, 184, 25, 1, 96, 225, 237, 25, + 1, 96, 215, 192, 25, 1, 96, 218, 149, 25, 1, 96, 200, 20, 25, 1, 96, 219, + 205, 25, 1, 96, 216, 211, 216, 33, 25, 1, 96, 236, 190, 247, 168, 25, 1, + 96, 237, 6, 25, 1, 96, 219, 89, 25, 1, 96, 62, 25, 1, 96, 205, 154, 25, + 1, 96, 74, 25, 1, 96, 70, 25, 1, 96, 225, 72, 25, 1, 96, 216, 211, 215, + 114, 25, 1, 96, 207, 32, 25, 1, 96, 206, 233, 25, 1, 96, 220, 74, 220, + 223, 233, 109, 25, 1, 96, 210, 16, 25, 1, 96, 200, 16, 25, 1, 96, 219, + 165, 25, 1, 96, 199, 201, 25, 1, 96, 199, 228, 207, 173, 25, 1, 96, 199, + 228, 243, 1, 25, 1, 96, 199, 185, 25, 1, 96, 199, 193, 25, 1, 96, 226, + 219, 25, 1, 96, 215, 249, 25, 1, 96, 219, 90, 238, 126, 25, 1, 96, 214, + 216, 25, 1, 96, 200, 213, 25, 1, 96, 237, 140, 25, 1, 96, 203, 54, 25, 1, + 96, 224, 42, 25, 1, 96, 221, 211, 25, 1, 96, 213, 107, 25, 1, 96, 213, + 234, 25, 1, 96, 219, 164, 25, 1, 96, 219, 253, 25, 1, 96, 210, 8, 25, 1, + 96, 209, 251, 25, 1, 96, 236, 190, 213, 143, 25, 1, 96, 188, 25, 1, 96, + 215, 204, 25, 1, 96, 224, 70, 25, 1, 96, 226, 88, 25, 1, 96, 222, 40, 25, + 1, 96, 178, 25, 1, 96, 222, 161, 25, 1, 96, 206, 136, 25, 1, 96, 226, + 163, 25, 1, 96, 221, 106, 25, 1, 96, 206, 166, 25, 1, 96, 237, 164, 25, + 1, 96, 235, 170, 25, 1, 215, 233, 161, 25, 1, 215, 233, 66, 25, 1, 215, + 233, 226, 15, 25, 1, 215, 233, 238, 255, 25, 1, 215, 233, 213, 167, 25, + 1, 215, 233, 207, 15, 25, 1, 215, 233, 218, 41, 25, 1, 215, 233, 194, 25, + 1, 215, 233, 213, 33, 25, 1, 215, 233, 213, 81, 25, 1, 215, 233, 222, 63, + 25, 1, 215, 233, 207, 32, 25, 1, 215, 233, 220, 73, 25, 1, 215, 233, 219, + 96, 25, 1, 215, 233, 223, 243, 25, 1, 215, 233, 207, 193, 25, 1, 215, + 233, 210, 28, 25, 1, 215, 233, 209, 182, 25, 1, 215, 233, 210, 137, 25, + 1, 215, 233, 225, 199, 25, 1, 215, 233, 226, 233, 25, 1, 215, 233, 218, + 104, 25, 1, 215, 233, 218, 133, 25, 1, 215, 233, 219, 67, 25, 1, 215, + 233, 199, 227, 25, 1, 215, 233, 209, 220, 25, 1, 215, 233, 183, 25, 1, + 215, 233, 218, 167, 25, 1, 215, 233, 215, 249, 25, 1, 215, 233, 218, 148, + 25, 1, 215, 233, 200, 213, 25, 1, 215, 233, 216, 61, 25, 1, 215, 233, + 212, 175, 25, 1, 215, 233, 219, 150, 25, 1, 215, 233, 213, 107, 25, 1, + 215, 233, 226, 243, 25, 1, 215, 233, 219, 181, 25, 1, 215, 233, 219, 232, + 25, 1, 215, 233, 210, 8, 25, 1, 215, 233, 214, 221, 25, 1, 215, 233, 237, + 6, 25, 1, 215, 233, 201, 114, 25, 1, 215, 233, 224, 210, 25, 1, 215, 233, + 224, 70, 25, 1, 215, 233, 226, 88, 25, 1, 215, 233, 222, 100, 25, 1, 215, + 233, 213, 139, 25, 1, 215, 233, 178, 25, 1, 215, 233, 221, 136, 25, 1, + 215, 233, 222, 108, 25, 1, 215, 233, 206, 146, 25, 1, 215, 233, 226, 50, + 25, 1, 215, 233, 212, 21, 25, 1, 215, 233, 201, 165, 221, 44, 1, 207, 36, + 221, 44, 1, 219, 201, 221, 44, 1, 199, 245, 221, 44, 1, 221, 166, 221, + 44, 1, 249, 136, 221, 44, 1, 242, 58, 221, 44, 1, 62, 221, 44, 1, 215, + 229, 221, 44, 1, 226, 202, 221, 44, 1, 234, 169, 221, 44, 1, 242, 33, + 221, 44, 1, 246, 192, 221, 44, 1, 227, 7, 221, 44, 1, 217, 93, 221, 44, + 1, 222, 216, 221, 44, 1, 219, 118, 221, 44, 1, 172, 221, 44, 1, 217, 63, + 221, 44, 1, 74, 221, 44, 1, 213, 1, 221, 44, 1, 210, 33, 221, 44, 1, 206, + 105, 221, 44, 1, 239, 27, 221, 44, 1, 201, 114, 221, 44, 1, 72, 221, 44, + 1, 226, 88, 221, 44, 1, 225, 80, 221, 44, 1, 194, 221, 44, 1, 234, 223, + 221, 44, 1, 213, 88, 221, 44, 1, 206, 179, 221, 44, 17, 199, 81, 221, 44, + 17, 102, 221, 44, 17, 105, 221, 44, 17, 147, 221, 44, 17, 149, 221, 44, + 17, 164, 221, 44, 17, 187, 221, 44, 17, 210, 135, 221, 44, 17, 192, 221, + 44, 17, 219, 113, 221, 44, 242, 10, 221, 44, 53, 242, 10, 249, 58, 203, + 87, 1, 238, 161, 249, 58, 203, 87, 1, 161, 249, 58, 203, 87, 1, 211, 202, + 249, 58, 203, 87, 1, 237, 195, 249, 58, 203, 87, 1, 222, 103, 249, 58, + 203, 87, 1, 200, 6, 249, 58, 203, 87, 1, 236, 74, 249, 58, 203, 87, 1, + 241, 81, 249, 58, 203, 87, 1, 226, 49, 249, 58, 203, 87, 1, 227, 166, + 249, 58, 203, 87, 1, 233, 67, 249, 58, 203, 87, 1, 201, 114, 249, 58, + 203, 87, 1, 199, 14, 249, 58, 203, 87, 1, 236, 19, 249, 58, 203, 87, 1, + 240, 211, 249, 58, 203, 87, 1, 247, 76, 249, 58, 203, 87, 1, 203, 175, + 249, 58, 203, 87, 1, 138, 249, 58, 203, 87, 1, 249, 136, 249, 58, 203, + 87, 1, 201, 166, 249, 58, 203, 87, 1, 200, 45, 249, 58, 203, 87, 1, 172, + 249, 58, 203, 87, 1, 201, 111, 249, 58, 203, 87, 1, 62, 249, 58, 203, 87, + 1, 74, 249, 58, 203, 87, 1, 217, 63, 249, 58, 203, 87, 1, 66, 249, 58, + 203, 87, 1, 238, 255, 249, 58, 203, 87, 1, 72, 249, 58, 203, 87, 1, 70, + 249, 58, 203, 87, 38, 122, 205, 174, 249, 58, 203, 87, 38, 128, 205, 174, + 249, 58, 203, 87, 38, 221, 206, 205, 174, 249, 58, 203, 87, 38, 224, 56, + 205, 174, 249, 58, 203, 87, 38, 234, 57, 205, 174, 249, 58, 203, 87, 236, + 183, 208, 76, 125, 123, 22, 227, 4, 125, 123, 22, 227, 0, 125, 123, 22, + 226, 160, 125, 123, 22, 226, 126, 125, 123, 22, 227, 25, 125, 123, 22, + 227, 22, 125, 123, 22, 226, 6, 125, 123, 22, 225, 234, 125, 123, 22, 227, + 6, 125, 123, 22, 226, 217, 125, 123, 22, 227, 81, 125, 123, 22, 227, 78, + 125, 123, 22, 226, 67, 125, 123, 22, 226, 64, 125, 123, 22, 227, 19, 125, + 123, 22, 227, 17, 125, 123, 22, 226, 8, 125, 123, 22, 226, 7, 125, 123, + 22, 226, 85, 125, 123, 22, 226, 53, 125, 123, 22, 226, 162, 125, 123, 22, + 226, 161, 125, 123, 22, 227, 96, 125, 123, 22, 227, 21, 125, 123, 22, + 225, 225, 125, 123, 22, 225, 216, 125, 123, 22, 227, 104, 125, 123, 22, + 227, 97, 125, 123, 111, 203, 65, 125, 123, 111, 218, 139, 125, 123, 111, + 225, 58, 125, 123, 111, 234, 150, 125, 123, 111, 219, 24, 125, 123, 111, + 213, 199, 125, 123, 111, 219, 51, 125, 123, 111, 214, 133, 125, 123, 111, + 200, 61, 125, 123, 111, 234, 36, 125, 123, 111, 222, 123, 125, 123, 111, + 247, 12, 125, 123, 111, 220, 78, 125, 123, 111, 233, 228, 125, 123, 111, + 215, 122, 125, 123, 111, 218, 144, 125, 123, 111, 220, 116, 125, 123, + 111, 250, 139, 125, 123, 111, 200, 177, 125, 123, 111, 247, 109, 125, + 123, 134, 246, 161, 204, 211, 125, 123, 134, 246, 161, 209, 29, 125, 123, + 134, 246, 161, 226, 235, 125, 123, 134, 246, 161, 226, 193, 125, 123, + 134, 246, 161, 208, 18, 125, 123, 134, 246, 161, 233, 194, 125, 123, 134, + 246, 161, 206, 220, 125, 123, 2, 202, 176, 206, 58, 125, 123, 2, 202, + 176, 205, 21, 247, 67, 125, 123, 2, 246, 161, 247, 1, 125, 123, 2, 202, + 176, 206, 83, 125, 123, 2, 202, 176, 237, 137, 125, 123, 2, 200, 135, + 218, 134, 125, 123, 2, 200, 135, 213, 90, 125, 123, 2, 200, 135, 205, + 137, 125, 123, 2, 200, 135, 237, 176, 125, 123, 2, 202, 176, 211, 184, + 125, 123, 2, 222, 62, 208, 22, 125, 123, 2, 202, 176, 218, 183, 125, 123, + 2, 232, 236, 200, 80, 125, 123, 2, 200, 176, 125, 123, 2, 246, 161, 205, + 8, 212, 246, 125, 123, 17, 199, 81, 125, 123, 17, 102, 125, 123, 17, 105, + 125, 123, 17, 147, 125, 123, 17, 149, 125, 123, 17, 164, 125, 123, 17, + 187, 125, 123, 17, 210, 135, 125, 123, 17, 192, 125, 123, 17, 219, 113, + 125, 123, 41, 206, 161, 125, 123, 41, 233, 80, 125, 123, 41, 206, 167, + 206, 48, 125, 123, 41, 221, 167, 125, 123, 41, 233, 83, 221, 167, 125, + 123, 41, 206, 167, 248, 170, 125, 123, 41, 205, 85, 125, 123, 2, 202, + 176, 224, 37, 125, 123, 2, 200, 132, 125, 123, 2, 234, 31, 125, 123, 2, + 206, 73, 234, 31, 125, 123, 2, 198, 244, 206, 116, 125, 123, 2, 233, 212, + 125, 123, 2, 218, 197, 125, 123, 2, 200, 168, 125, 123, 2, 218, 137, 125, + 123, 2, 250, 123, 125, 123, 2, 204, 136, 247, 66, 125, 123, 2, 222, 62, + 205, 24, 125, 123, 2, 206, 221, 125, 123, 2, 224, 67, 125, 123, 2, 220, + 252, 125, 123, 2, 246, 161, 234, 219, 224, 15, 218, 142, 218, 141, 125, + 123, 2, 246, 161, 242, 213, 205, 15, 125, 123, 2, 246, 161, 204, 134, + 125, 123, 2, 246, 161, 204, 135, 246, 180, 125, 123, 2, 246, 161, 214, + 219, 241, 235, 125, 123, 2, 246, 161, 218, 190, 205, 145, 125, 123, 246, + 133, 2, 205, 19, 125, 123, 246, 133, 2, 200, 47, 125, 123, 246, 133, 2, + 224, 155, 125, 123, 246, 133, 2, 225, 56, 125, 123, 246, 133, 2, 200, + 131, 125, 123, 246, 133, 2, 226, 68, 125, 123, 246, 133, 2, 234, 147, + 125, 123, 246, 133, 2, 221, 37, 125, 123, 246, 133, 2, 206, 59, 125, 123, + 246, 133, 2, 205, 29, 125, 123, 246, 133, 2, 215, 242, 125, 123, 246, + 133, 2, 226, 205, 125, 123, 246, 133, 2, 234, 209, 125, 123, 246, 133, 2, + 203, 84, 125, 123, 246, 133, 2, 237, 173, 125, 123, 246, 133, 2, 200, 87, + 125, 123, 246, 133, 2, 205, 2, 125, 123, 246, 133, 2, 225, 220, 125, 123, + 246, 133, 2, 201, 156, 114, 1, 172, 114, 1, 249, 136, 114, 1, 11, 172, + 114, 1, 215, 135, 114, 1, 178, 114, 1, 221, 214, 114, 1, 250, 234, 178, + 114, 1, 237, 195, 114, 1, 203, 90, 114, 1, 202, 235, 114, 1, 207, 36, + 114, 1, 242, 58, 114, 1, 11, 204, 253, 114, 1, 11, 207, 36, 114, 1, 204, + 253, 114, 1, 241, 220, 114, 1, 188, 114, 1, 219, 154, 114, 1, 11, 219, + 21, 114, 1, 250, 234, 188, 114, 1, 219, 21, 114, 1, 219, 7, 114, 1, 194, + 114, 1, 224, 1, 114, 1, 224, 223, 114, 1, 224, 212, 114, 1, 205, 200, + 114, 1, 240, 219, 114, 1, 205, 192, 114, 1, 240, 218, 114, 1, 161, 114, + 1, 236, 89, 114, 1, 11, 161, 114, 1, 214, 159, 114, 1, 214, 136, 114, 1, + 219, 253, 114, 1, 219, 202, 114, 1, 250, 234, 219, 253, 114, 1, 144, 114, + 1, 200, 181, 114, 1, 235, 199, 114, 1, 235, 174, 114, 1, 205, 7, 114, 1, + 239, 77, 114, 1, 218, 60, 114, 1, 218, 43, 114, 1, 205, 22, 114, 1, 239, + 87, 114, 1, 11, 205, 22, 114, 1, 11, 239, 87, 114, 1, 213, 165, 205, 22, + 114, 1, 210, 114, 114, 1, 208, 179, 114, 1, 199, 77, 114, 1, 199, 5, 114, + 1, 205, 32, 114, 1, 239, 93, 114, 1, 11, 205, 32, 114, 1, 212, 64, 114, + 1, 199, 114, 114, 1, 199, 6, 114, 1, 198, 232, 114, 1, 198, 212, 114, 1, + 250, 234, 198, 232, 114, 1, 198, 204, 114, 1, 198, 211, 114, 1, 201, 114, + 114, 1, 251, 185, 114, 1, 234, 84, 114, 1, 220, 121, 114, 2, 250, 171, + 114, 2, 213, 165, 202, 187, 114, 2, 213, 165, 250, 171, 114, 22, 2, 62, + 114, 22, 2, 252, 138, 114, 22, 2, 251, 181, 114, 22, 2, 251, 85, 114, 22, + 2, 251, 76, 114, 22, 2, 74, 114, 22, 2, 217, 63, 114, 22, 2, 201, 0, 114, + 22, 2, 201, 147, 114, 22, 2, 72, 114, 22, 2, 238, 179, 114, 22, 2, 238, + 165, 114, 22, 2, 217, 118, 114, 22, 2, 70, 114, 22, 2, 232, 240, 114, 22, + 2, 232, 239, 114, 22, 2, 232, 238, 114, 22, 2, 228, 45, 114, 22, 2, 228, + 178, 114, 22, 2, 228, 151, 114, 22, 2, 228, 8, 114, 22, 2, 228, 91, 114, + 22, 2, 66, 114, 22, 2, 204, 46, 114, 22, 2, 204, 45, 114, 22, 2, 204, 44, + 114, 22, 2, 203, 182, 114, 22, 2, 204, 28, 114, 22, 2, 203, 246, 114, 22, + 2, 200, 123, 114, 22, 2, 200, 9, 114, 22, 2, 251, 221, 114, 22, 2, 251, + 217, 114, 22, 2, 238, 108, 114, 22, 2, 212, 219, 238, 108, 114, 22, 2, + 238, 115, 114, 22, 2, 212, 219, 238, 115, 114, 22, 2, 251, 176, 114, 22, + 2, 238, 234, 114, 22, 2, 250, 139, 114, 22, 2, 217, 3, 114, 22, 2, 220, + 214, 114, 22, 2, 219, 255, 114, 150, 213, 46, 114, 150, 205, 158, 213, + 46, 114, 150, 56, 114, 150, 57, 114, 1, 205, 172, 114, 1, 205, 171, 114, + 1, 205, 170, 114, 1, 205, 169, 114, 1, 205, 168, 114, 1, 205, 167, 114, + 1, 205, 166, 114, 1, 213, 165, 205, 173, 114, 1, 213, 165, 205, 172, 114, + 1, 213, 165, 205, 170, 114, 1, 213, 165, 205, 169, 114, 1, 213, 165, 205, + 168, 114, 1, 213, 165, 205, 166, 18, 228, 10, 81, 18, 246, 61, 18, 246, + 60, 18, 246, 59, 18, 246, 58, 18, 246, 57, 18, 246, 56, 18, 246, 55, 18, + 246, 54, 18, 246, 53, 18, 246, 52, 18, 246, 51, 18, 246, 50, 18, 246, 49, + 18, 246, 48, 18, 246, 47, 18, 246, 46, 18, 246, 45, 18, 246, 44, 18, 246, + 43, 18, 246, 42, 18, 246, 41, 18, 246, 40, 18, 246, 39, 18, 246, 38, 18, + 246, 37, 18, 246, 36, 18, 246, 35, 18, 246, 34, 18, 246, 33, 18, 246, 32, + 18, 246, 31, 18, 246, 30, 18, 246, 29, 18, 246, 28, 18, 246, 27, 18, 246, + 26, 18, 246, 25, 18, 246, 24, 18, 246, 23, 18, 246, 22, 18, 246, 21, 18, + 246, 20, 18, 246, 19, 18, 246, 18, 18, 246, 17, 18, 246, 16, 18, 246, 15, + 18, 246, 14, 18, 246, 13, 18, 246, 12, 18, 246, 11, 18, 246, 10, 18, 246, + 9, 18, 246, 8, 18, 246, 7, 18, 246, 6, 18, 246, 5, 18, 246, 4, 18, 246, + 3, 18, 246, 2, 18, 246, 1, 18, 246, 0, 18, 245, 255, 18, 245, 254, 18, + 245, 253, 18, 245, 252, 18, 245, 251, 18, 245, 250, 18, 245, 249, 18, + 245, 248, 18, 245, 247, 18, 245, 246, 18, 245, 245, 18, 245, 244, 18, + 245, 243, 18, 245, 242, 18, 245, 241, 18, 245, 240, 18, 245, 239, 18, + 245, 238, 18, 245, 237, 18, 245, 236, 18, 245, 235, 18, 245, 234, 18, + 245, 233, 18, 245, 232, 18, 245, 231, 18, 245, 230, 18, 245, 229, 18, + 245, 228, 18, 245, 227, 18, 245, 226, 18, 245, 225, 18, 245, 224, 18, + 245, 223, 18, 245, 222, 18, 245, 221, 18, 245, 220, 18, 245, 219, 18, + 245, 218, 18, 245, 217, 18, 245, 216, 18, 245, 215, 18, 245, 214, 18, + 245, 213, 18, 245, 212, 18, 245, 211, 18, 245, 210, 18, 245, 209, 18, + 245, 208, 18, 245, 207, 18, 245, 206, 18, 245, 205, 18, 245, 204, 18, + 245, 203, 18, 245, 202, 18, 245, 201, 18, 245, 200, 18, 245, 199, 18, + 245, 198, 18, 245, 197, 18, 245, 196, 18, 245, 195, 18, 245, 194, 18, + 245, 193, 18, 245, 192, 18, 245, 191, 18, 245, 190, 18, 245, 189, 18, + 245, 188, 18, 245, 187, 18, 245, 186, 18, 245, 185, 18, 245, 184, 18, + 245, 183, 18, 245, 182, 18, 245, 181, 18, 245, 180, 18, 245, 179, 18, + 245, 178, 18, 245, 177, 18, 245, 176, 18, 245, 175, 18, 245, 174, 18, + 245, 173, 18, 245, 172, 18, 245, 171, 18, 245, 170, 18, 245, 169, 18, + 245, 168, 18, 245, 167, 18, 245, 166, 18, 245, 165, 18, 245, 164, 18, + 245, 163, 18, 245, 162, 18, 245, 161, 18, 245, 160, 18, 245, 159, 18, + 245, 158, 18, 245, 157, 18, 245, 156, 18, 245, 155, 18, 245, 154, 18, + 245, 153, 18, 245, 152, 18, 245, 151, 18, 245, 150, 18, 245, 149, 18, + 245, 148, 18, 245, 147, 18, 245, 146, 18, 245, 145, 18, 245, 144, 18, + 245, 143, 18, 245, 142, 18, 245, 141, 18, 245, 140, 18, 245, 139, 18, + 245, 138, 18, 245, 137, 18, 245, 136, 18, 245, 135, 18, 245, 134, 18, + 245, 133, 18, 245, 132, 18, 245, 131, 18, 245, 130, 18, 245, 129, 18, + 245, 128, 18, 245, 127, 18, 245, 126, 18, 245, 125, 18, 245, 124, 18, + 245, 123, 18, 245, 122, 18, 245, 121, 18, 245, 120, 18, 245, 119, 18, + 245, 118, 18, 245, 117, 18, 245, 116, 18, 245, 115, 18, 245, 114, 18, + 245, 113, 18, 245, 112, 18, 245, 111, 18, 245, 110, 18, 245, 109, 18, + 245, 108, 18, 245, 107, 18, 245, 106, 18, 245, 105, 18, 245, 104, 18, + 245, 103, 18, 245, 102, 18, 245, 101, 18, 245, 100, 18, 245, 99, 18, 245, + 98, 18, 245, 97, 18, 245, 96, 18, 245, 95, 18, 245, 94, 18, 245, 93, 18, + 245, 92, 18, 245, 91, 18, 245, 90, 18, 245, 89, 18, 245, 88, 18, 245, 87, + 18, 245, 86, 18, 245, 85, 18, 245, 84, 18, 245, 83, 18, 245, 82, 18, 245, + 81, 18, 245, 80, 18, 245, 79, 18, 245, 78, 18, 245, 77, 18, 245, 76, 18, + 245, 75, 18, 245, 74, 18, 245, 73, 18, 245, 72, 18, 245, 71, 18, 245, 70, + 18, 245, 69, 18, 245, 68, 18, 245, 67, 18, 245, 66, 18, 245, 65, 18, 245, + 64, 18, 245, 63, 18, 245, 62, 18, 245, 61, 18, 245, 60, 18, 245, 59, 18, + 245, 58, 18, 245, 57, 18, 245, 56, 18, 245, 55, 18, 245, 54, 18, 245, 53, + 18, 245, 52, 18, 245, 51, 18, 245, 50, 18, 245, 49, 18, 245, 48, 18, 245, + 47, 18, 245, 46, 18, 245, 45, 18, 245, 44, 18, 245, 43, 18, 245, 42, 18, + 245, 41, 18, 245, 40, 18, 245, 39, 18, 245, 38, 18, 245, 37, 18, 245, 36, + 18, 245, 35, 18, 245, 34, 18, 245, 33, 18, 245, 32, 18, 245, 31, 18, 245, + 30, 18, 245, 29, 18, 245, 28, 18, 245, 27, 18, 245, 26, 18, 245, 25, 18, + 245, 24, 18, 245, 23, 18, 245, 22, 18, 245, 21, 18, 245, 20, 18, 245, 19, + 18, 245, 18, 18, 245, 17, 18, 245, 16, 18, 245, 15, 18, 245, 14, 18, 245, + 13, 18, 245, 12, 18, 245, 11, 18, 245, 10, 18, 245, 9, 18, 245, 8, 18, + 245, 7, 18, 245, 6, 18, 245, 5, 18, 245, 4, 18, 245, 3, 18, 245, 2, 18, + 245, 1, 18, 245, 0, 18, 244, 255, 18, 244, 254, 18, 244, 253, 18, 244, + 252, 18, 244, 251, 18, 244, 250, 18, 244, 249, 18, 244, 248, 18, 244, + 247, 18, 244, 246, 18, 244, 245, 18, 244, 244, 18, 244, 243, 18, 244, + 242, 18, 244, 241, 18, 244, 240, 18, 244, 239, 18, 244, 238, 18, 244, + 237, 18, 244, 236, 18, 244, 235, 18, 244, 234, 18, 244, 233, 18, 244, + 232, 18, 244, 231, 18, 244, 230, 18, 244, 229, 18, 244, 228, 18, 244, + 227, 18, 244, 226, 18, 244, 225, 18, 244, 224, 18, 244, 223, 18, 244, + 222, 18, 244, 221, 18, 244, 220, 18, 244, 219, 18, 244, 218, 18, 244, + 217, 18, 244, 216, 18, 244, 215, 18, 244, 214, 18, 244, 213, 18, 244, + 212, 18, 244, 211, 18, 244, 210, 18, 244, 209, 18, 244, 208, 18, 244, + 207, 18, 244, 206, 18, 244, 205, 18, 244, 204, 18, 244, 203, 18, 244, + 202, 18, 244, 201, 18, 244, 200, 18, 244, 199, 18, 244, 198, 18, 244, + 197, 18, 244, 196, 18, 244, 195, 18, 244, 194, 18, 244, 193, 18, 244, + 192, 18, 244, 191, 18, 244, 190, 18, 244, 189, 18, 244, 188, 18, 244, + 187, 18, 244, 186, 18, 244, 185, 18, 244, 184, 18, 244, 183, 18, 244, + 182, 18, 244, 181, 18, 244, 180, 18, 244, 179, 18, 244, 178, 18, 244, + 177, 18, 244, 176, 18, 244, 175, 18, 244, 174, 18, 244, 173, 18, 244, + 172, 18, 244, 171, 18, 244, 170, 18, 244, 169, 18, 244, 168, 18, 244, + 167, 18, 244, 166, 18, 244, 165, 18, 244, 164, 18, 244, 163, 18, 244, + 162, 18, 244, 161, 18, 244, 160, 18, 244, 159, 18, 244, 158, 18, 244, + 157, 18, 244, 156, 18, 244, 155, 18, 244, 154, 18, 244, 153, 18, 244, + 152, 18, 244, 151, 18, 244, 150, 18, 244, 149, 18, 244, 148, 18, 244, + 147, 18, 244, 146, 18, 244, 145, 18, 244, 144, 18, 244, 143, 18, 244, + 142, 18, 244, 141, 18, 244, 140, 18, 244, 139, 18, 244, 138, 18, 244, + 137, 18, 244, 136, 18, 244, 135, 18, 244, 134, 18, 244, 133, 18, 244, + 132, 18, 244, 131, 18, 244, 130, 18, 244, 129, 18, 244, 128, 18, 244, + 127, 18, 244, 126, 18, 244, 125, 18, 244, 124, 18, 244, 123, 18, 244, + 122, 18, 244, 121, 18, 244, 120, 18, 244, 119, 18, 244, 118, 18, 244, + 117, 18, 244, 116, 18, 244, 115, 18, 244, 114, 18, 244, 113, 18, 244, + 112, 18, 244, 111, 18, 244, 110, 18, 244, 109, 18, 244, 108, 18, 244, + 107, 18, 244, 106, 18, 244, 105, 18, 244, 104, 18, 244, 103, 18, 244, + 102, 18, 244, 101, 18, 244, 100, 18, 244, 99, 18, 244, 98, 18, 244, 97, + 18, 244, 96, 18, 244, 95, 18, 244, 94, 18, 244, 93, 18, 244, 92, 18, 244, + 91, 18, 244, 90, 18, 244, 89, 18, 244, 88, 18, 244, 87, 18, 244, 86, 18, + 244, 85, 18, 244, 84, 18, 244, 83, 18, 244, 82, 18, 244, 81, 18, 244, 80, + 18, 244, 79, 18, 244, 78, 18, 244, 77, 18, 244, 76, 18, 244, 75, 18, 244, + 74, 18, 244, 73, 18, 244, 72, 18, 244, 71, 18, 244, 70, 18, 244, 69, 18, + 244, 68, 18, 244, 67, 18, 244, 66, 18, 244, 65, 18, 244, 64, 18, 244, 63, + 18, 244, 62, 18, 244, 61, 18, 244, 60, 18, 244, 59, 18, 244, 58, 18, 244, + 57, 18, 244, 56, 18, 244, 55, 18, 244, 54, 18, 244, 53, 18, 244, 52, 18, + 244, 51, 18, 244, 50, 18, 244, 49, 18, 244, 48, 18, 244, 47, 18, 244, 46, + 18, 244, 45, 18, 244, 44, 18, 244, 43, 18, 244, 42, 18, 244, 41, 18, 244, + 40, 18, 244, 39, 18, 244, 38, 18, 244, 37, 18, 244, 36, 18, 244, 35, 18, + 244, 34, 18, 244, 33, 18, 244, 32, 18, 244, 31, 18, 244, 30, 18, 244, 29, + 18, 244, 28, 18, 244, 27, 18, 244, 26, 18, 244, 25, 18, 244, 24, 18, 244, + 23, 18, 244, 22, 18, 244, 21, 18, 244, 20, 18, 244, 19, 18, 244, 18, 18, + 244, 17, 18, 244, 16, 18, 244, 15, 18, 244, 14, 18, 244, 13, 18, 244, 12, + 18, 244, 11, 18, 244, 10, 18, 244, 9, 18, 244, 8, 18, 244, 7, 18, 244, 6, + 18, 244, 5, 18, 244, 4, 18, 244, 3, 18, 244, 2, 18, 244, 1, 18, 244, 0, + 18, 243, 255, 18, 243, 254, 18, 243, 253, 18, 243, 252, 18, 243, 251, 18, + 243, 250, 18, 243, 249, 18, 243, 248, 18, 243, 247, 18, 243, 246, 18, + 243, 245, 18, 243, 244, 18, 243, 243, 18, 243, 242, 18, 243, 241, 18, + 243, 240, 18, 243, 239, 18, 243, 238, 18, 243, 237, 18, 243, 236, 18, + 243, 235, 18, 243, 234, 18, 243, 233, 18, 243, 232, 18, 243, 231, 18, + 243, 230, 18, 243, 229, 18, 243, 228, 18, 243, 227, 18, 243, 226, 18, + 243, 225, 18, 243, 224, 18, 243, 223, 18, 243, 222, 18, 243, 221, 18, + 243, 220, 18, 243, 219, 18, 243, 218, 18, 243, 217, 18, 243, 216, 18, + 243, 215, 18, 243, 214, 18, 243, 213, 18, 243, 212, 18, 243, 211, 18, + 243, 210, 18, 243, 209, 18, 243, 208, 18, 243, 207, 18, 243, 206, 18, + 243, 205, 18, 243, 204, 18, 243, 203, 18, 243, 202, 18, 243, 201, 18, + 243, 200, 18, 243, 199, 18, 243, 198, 18, 243, 197, 18, 243, 196, 18, + 243, 195, 18, 243, 194, 18, 243, 193, 18, 243, 192, 18, 243, 191, 18, + 243, 190, 18, 243, 189, 18, 243, 188, 18, 243, 187, 18, 243, 186, 18, + 243, 185, 18, 243, 184, 18, 243, 183, 18, 243, 182, 18, 243, 181, 18, + 243, 180, 18, 243, 179, 18, 243, 178, 18, 243, 177, 18, 243, 176, 18, + 243, 175, 18, 243, 174, 18, 243, 173, 18, 243, 172, 18, 243, 171, 18, + 243, 170, 18, 243, 169, 18, 243, 168, 18, 243, 167, 18, 243, 166, 18, + 243, 165, 18, 243, 164, 18, 243, 163, 18, 243, 162, 18, 243, 161, 18, + 243, 160, 18, 243, 159, 18, 243, 158, 18, 243, 157, 18, 243, 156, 18, + 243, 155, 18, 243, 154, 18, 243, 153, 18, 243, 152, 18, 243, 151, 18, + 243, 150, 18, 243, 149, 18, 243, 148, 18, 243, 147, 18, 243, 146, 18, + 243, 145, 18, 243, 144, 18, 243, 143, 18, 243, 142, 18, 243, 141, 18, + 243, 140, 18, 243, 139, 18, 243, 138, 18, 243, 137, 18, 243, 136, 18, + 243, 135, 18, 243, 134, 18, 243, 133, 18, 243, 132, 18, 243, 131, 18, + 243, 130, 18, 243, 129, 18, 243, 128, 18, 243, 127, 18, 243, 126, 18, + 243, 125, 18, 243, 124, 18, 243, 123, 18, 243, 122, 18, 243, 121, 18, + 243, 120, 18, 243, 119, 18, 243, 118, 18, 243, 117, 18, 243, 116, 18, + 243, 115, 18, 243, 114, 18, 243, 113, 18, 243, 112, 18, 243, 111, 18, + 243, 110, 18, 243, 109, 18, 243, 108, 18, 243, 107, 18, 243, 106, 18, + 243, 105, 18, 243, 104, 18, 243, 103, 18, 243, 102, 18, 243, 101, 18, + 243, 100, 18, 243, 99, 18, 243, 98, 18, 243, 97, 18, 243, 96, 18, 243, + 95, 18, 243, 94, 18, 243, 93, 18, 243, 92, 18, 243, 91, 18, 243, 90, 18, + 243, 89, 18, 243, 88, 18, 243, 87, 18, 243, 86, 18, 243, 85, 18, 243, 84, + 18, 243, 83, 18, 243, 82, 18, 243, 81, 18, 243, 80, 18, 243, 79, 18, 243, + 78, 18, 243, 77, 18, 243, 76, 18, 243, 75, 69, 1, 250, 234, 72, 177, 1, + 250, 234, 200, 51, 104, 1, 234, 247, 104, 1, 200, 195, 104, 1, 216, 226, + 104, 1, 207, 83, 104, 1, 238, 5, 104, 1, 227, 118, 104, 1, 156, 104, 1, + 250, 103, 104, 1, 242, 153, 104, 1, 203, 168, 104, 1, 236, 156, 104, 1, + 146, 104, 1, 216, 227, 220, 214, 104, 1, 242, 154, 212, 122, 104, 1, 238, + 6, 220, 214, 104, 1, 227, 119, 223, 243, 104, 1, 214, 33, 212, 122, 104, + 1, 206, 124, 104, 1, 209, 62, 241, 101, 104, 1, 241, 101, 104, 1, 226, + 110, 104, 1, 209, 62, 227, 251, 104, 1, 234, 40, 104, 1, 224, 224, 104, + 1, 213, 94, 104, 1, 223, 243, 104, 1, 220, 214, 104, 1, 227, 251, 104, 1, + 212, 122, 104, 1, 223, 244, 220, 214, 104, 1, 220, 215, 223, 243, 104, 1, + 227, 252, 223, 243, 104, 1, 212, 123, 227, 251, 104, 1, 223, 244, 3, 240, + 182, 104, 1, 220, 215, 3, 240, 182, 104, 1, 227, 252, 3, 240, 182, 104, + 1, 227, 252, 3, 190, 228, 74, 26, 56, 104, 1, 212, 123, 3, 240, 182, 104, + 1, 212, 123, 3, 73, 57, 104, 1, 223, 244, 212, 122, 104, 1, 220, 215, + 212, 122, 104, 1, 227, 252, 212, 122, 104, 1, 212, 123, 212, 122, 104, 1, + 223, 244, 220, 215, 212, 122, 104, 1, 220, 215, 223, 244, 212, 122, 104, + 1, 227, 252, 223, 244, 212, 122, 104, 1, 212, 123, 227, 252, 212, 122, + 104, 1, 227, 252, 212, 123, 3, 240, 182, 104, 1, 227, 252, 220, 214, 104, + 1, 227, 252, 220, 215, 212, 122, 104, 1, 212, 123, 207, 83, 104, 1, 212, + 123, 207, 84, 146, 104, 1, 212, 123, 216, 226, 104, 1, 212, 123, 216, + 227, 146, 104, 1, 207, 84, 212, 122, 104, 1, 207, 84, 214, 33, 212, 122, + 104, 1, 201, 147, 104, 1, 201, 41, 104, 1, 201, 148, 146, 104, 1, 212, + 123, 220, 214, 104, 1, 212, 123, 223, 243, 104, 1, 227, 119, 214, 33, + 212, 122, 104, 1, 236, 157, 214, 33, 212, 122, 104, 1, 212, 123, 227, + 118, 104, 1, 212, 123, 227, 119, 146, 104, 1, 62, 104, 1, 209, 62, 216, + 238, 104, 1, 217, 146, 104, 1, 74, 104, 1, 251, 29, 104, 1, 70, 104, 1, + 72, 104, 1, 228, 178, 104, 1, 209, 250, 70, 104, 1, 204, 23, 104, 1, 238, + 255, 104, 1, 209, 62, 238, 241, 104, 1, 212, 239, 70, 104, 1, 209, 62, + 238, 255, 104, 1, 168, 70, 104, 1, 200, 51, 104, 1, 66, 104, 1, 238, 69, + 104, 1, 200, 146, 104, 1, 108, 220, 214, 104, 1, 168, 66, 104, 1, 212, + 239, 66, 104, 1, 204, 25, 104, 1, 209, 62, 66, 104, 1, 217, 60, 104, 1, + 216, 238, 104, 1, 217, 3, 104, 1, 201, 114, 104, 1, 201, 0, 104, 1, 201, + 31, 104, 1, 201, 55, 104, 1, 200, 230, 104, 1, 220, 123, 66, 104, 1, 220, + 123, 74, 104, 1, 220, 123, 70, 104, 1, 220, 123, 62, 104, 1, 216, 16, + 251, 85, 104, 1, 216, 16, 251, 101, 104, 1, 209, 62, 238, 179, 104, 1, + 209, 62, 251, 85, 104, 1, 209, 62, 217, 78, 104, 1, 109, 223, 243, 104, + 251, 200, 49, 233, 177, 211, 197, 104, 251, 200, 221, 206, 233, 177, 211, + 197, 104, 251, 200, 51, 233, 177, 211, 197, 104, 251, 200, 128, 83, 211, + 197, 104, 251, 200, 221, 206, 83, 211, 197, 104, 251, 200, 122, 83, 211, + 197, 104, 251, 200, 250, 145, 211, 197, 104, 251, 200, 250, 145, 225, 19, + 211, 197, 104, 251, 200, 250, 145, 206, 240, 104, 251, 200, 250, 145, + 207, 6, 104, 251, 200, 250, 145, 197, 117, 104, 251, 200, 250, 145, 233, + 19, 117, 104, 251, 200, 250, 145, 206, 241, 117, 104, 251, 200, 122, 169, + 104, 251, 200, 122, 206, 1, 169, 104, 251, 200, 122, 235, 73, 104, 251, + 200, 122, 168, 235, 73, 104, 251, 200, 122, 240, 182, 104, 251, 200, 122, + 246, 155, 104, 251, 200, 122, 224, 176, 104, 251, 200, 122, 201, 77, 104, + 251, 200, 122, 203, 42, 104, 251, 200, 128, 169, 104, 251, 200, 128, 206, + 1, 169, 104, 251, 200, 128, 235, 73, 104, 251, 200, 128, 168, 235, 73, + 104, 251, 200, 128, 240, 182, 104, 251, 200, 128, 246, 155, 104, 251, + 200, 128, 224, 176, 104, 251, 200, 128, 201, 77, 104, 251, 200, 128, 203, + 42, 104, 251, 200, 128, 48, 104, 2, 163, 3, 242, 234, 104, 206, 82, 1, + 211, 175, 104, 53, 81, 104, 214, 212, 246, 220, 236, 183, 208, 76, 209, + 237, 236, 241, 1, 216, 244, 209, 237, 236, 241, 243, 40, 216, 244, 209, + 237, 236, 241, 127, 208, 90, 209, 237, 236, 241, 115, 208, 90, 61, 32, + 16, 214, 228, 61, 32, 16, 241, 246, 61, 32, 16, 216, 20, 61, 32, 16, 216, + 234, 238, 213, 61, 32, 16, 216, 234, 241, 14, 61, 32, 16, 203, 77, 238, + 213, 61, 32, 16, 203, 77, 241, 14, 61, 32, 16, 227, 28, 61, 32, 16, 207, + 100, 61, 32, 16, 216, 122, 61, 32, 16, 199, 217, 61, 32, 16, 199, 218, + 241, 14, 61, 32, 16, 226, 32, 61, 32, 16, 251, 24, 238, 213, 61, 32, 16, + 238, 37, 238, 213, 61, 32, 16, 206, 177, 61, 32, 16, 226, 239, 61, 32, + 16, 251, 14, 61, 32, 16, 251, 15, 241, 14, 61, 32, 16, 207, 107, 61, 32, + 16, 206, 64, 61, 32, 16, 217, 89, 250, 232, 61, 32, 16, 235, 100, 250, + 232, 61, 32, 16, 214, 227, 61, 32, 16, 247, 28, 61, 32, 16, 203, 66, 61, + 32, 16, 228, 17, 250, 232, 61, 32, 16, 226, 241, 250, 232, 61, 32, 16, + 226, 240, 250, 232, 61, 32, 16, 211, 236, 61, 32, 16, 216, 112, 61, 32, + 16, 208, 99, 251, 17, 61, 32, 16, 216, 233, 250, 232, 61, 32, 16, 203, + 76, 250, 232, 61, 32, 16, 251, 18, 250, 232, 61, 32, 16, 251, 12, 61, 32, + 16, 226, 100, 61, 32, 16, 213, 101, 61, 32, 16, 215, 202, 250, 232, 61, + 32, 16, 205, 230, 61, 32, 16, 251, 82, 61, 32, 16, 211, 178, 61, 32, 16, + 207, 111, 250, 232, 61, 32, 16, 207, 111, 222, 21, 208, 97, 61, 32, 16, + 216, 228, 250, 232, 61, 32, 16, 206, 100, 61, 32, 16, 225, 6, 61, 32, 16, + 239, 96, 61, 32, 16, 205, 100, 61, 32, 16, 206, 148, 61, 32, 16, 226, 35, + 61, 32, 16, 251, 24, 238, 37, 220, 20, 61, 32, 16, 236, 191, 250, 232, + 61, 32, 16, 228, 130, 61, 32, 16, 205, 69, 250, 232, 61, 32, 16, 227, 31, + 205, 68, 61, 32, 16, 216, 49, 61, 32, 16, 214, 232, 61, 32, 16, 226, 69, + 61, 32, 16, 246, 204, 250, 232, 61, 32, 16, 213, 209, 61, 32, 16, 216, + 125, 250, 232, 61, 32, 16, 216, 123, 250, 232, 61, 32, 16, 232, 229, 61, + 32, 16, 220, 133, 61, 32, 16, 215, 254, 61, 32, 16, 226, 70, 251, 119, + 61, 32, 16, 205, 69, 251, 119, 61, 32, 16, 208, 70, 61, 32, 16, 235, 60, + 61, 32, 16, 228, 17, 220, 20, 61, 32, 16, 217, 89, 220, 20, 61, 32, 16, + 216, 234, 220, 20, 61, 32, 16, 215, 253, 61, 32, 16, 226, 54, 61, 32, 16, + 215, 252, 61, 32, 16, 226, 34, 61, 32, 16, 216, 50, 220, 20, 61, 32, 16, + 226, 240, 220, 21, 251, 55, 61, 32, 16, 226, 241, 220, 21, 251, 55, 61, + 32, 16, 199, 215, 61, 32, 16, 251, 15, 220, 20, 61, 32, 16, 251, 16, 207, + 108, 220, 20, 61, 32, 16, 199, 216, 61, 32, 16, 226, 33, 61, 32, 16, 238, + 208, 61, 32, 16, 247, 29, 61, 32, 16, 221, 177, 228, 16, 61, 32, 16, 203, + 77, 220, 20, 61, 32, 16, 215, 202, 220, 20, 61, 32, 16, 214, 233, 220, + 20, 61, 32, 16, 217, 85, 61, 32, 16, 251, 42, 61, 32, 16, 223, 254, 61, + 32, 16, 216, 123, 220, 20, 61, 32, 16, 216, 125, 220, 20, 61, 32, 16, + 238, 75, 216, 124, 61, 32, 16, 225, 197, 61, 32, 16, 251, 43, 61, 32, 16, + 205, 69, 220, 20, 61, 32, 16, 238, 211, 61, 32, 16, 207, 111, 220, 20, + 61, 32, 16, 207, 101, 61, 32, 16, 246, 204, 220, 20, 61, 32, 16, 238, + 130, 61, 32, 16, 211, 179, 220, 20, 61, 32, 16, 200, 162, 226, 100, 61, + 32, 16, 205, 66, 61, 32, 16, 214, 234, 61, 32, 16, 205, 70, 61, 32, 16, + 205, 67, 61, 32, 16, 214, 231, 61, 32, 16, 205, 65, 61, 32, 16, 214, 230, + 61, 32, 16, 235, 99, 61, 32, 16, 250, 224, 61, 32, 16, 238, 75, 250, 224, + 61, 32, 16, 216, 228, 220, 20, 61, 32, 16, 206, 99, 238, 88, 61, 32, 16, + 206, 99, 238, 36, 61, 32, 16, 206, 101, 251, 19, 61, 32, 16, 206, 93, + 227, 83, 251, 11, 61, 32, 16, 227, 30, 61, 32, 16, 238, 167, 61, 32, 16, + 200, 13, 227, 27, 61, 32, 16, 200, 13, 251, 55, 61, 32, 16, 208, 98, 61, + 32, 16, 226, 101, 251, 55, 61, 32, 16, 241, 15, 250, 232, 61, 32, 16, + 226, 36, 250, 232, 61, 32, 16, 226, 36, 251, 119, 61, 32, 16, 226, 36, + 220, 20, 61, 32, 16, 251, 18, 220, 20, 61, 32, 16, 251, 20, 61, 32, 16, + 241, 14, 61, 32, 16, 205, 81, 61, 32, 16, 206, 139, 61, 32, 16, 226, 58, + 61, 32, 16, 225, 11, 238, 160, 246, 194, 61, 32, 16, 225, 11, 239, 97, + 246, 195, 61, 32, 16, 225, 11, 205, 84, 246, 195, 61, 32, 16, 225, 11, + 206, 150, 246, 195, 61, 32, 16, 225, 11, 228, 125, 246, 194, 61, 32, 16, + 235, 100, 220, 21, 251, 55, 61, 32, 16, 235, 100, 216, 113, 250, 220, 61, + 32, 16, 235, 100, 216, 113, 241, 105, 61, 32, 16, 241, 39, 61, 32, 16, + 241, 40, 216, 113, 250, 221, 227, 27, 61, 32, 16, 241, 40, 216, 113, 250, + 221, 251, 55, 61, 32, 16, 241, 40, 216, 113, 241, 105, 61, 32, 16, 205, + 89, 61, 32, 16, 250, 225, 61, 32, 16, 228, 132, 61, 32, 16, 241, 62, 61, + 32, 16, 251, 187, 215, 89, 250, 226, 61, 32, 16, 251, 187, 250, 223, 61, + 32, 16, 251, 187, 250, 226, 61, 32, 16, 251, 187, 222, 15, 61, 32, 16, + 251, 187, 222, 26, 61, 32, 16, 251, 187, 235, 101, 61, 32, 16, 251, 187, + 235, 98, 61, 32, 16, 251, 187, 215, 89, 235, 101, 61, 32, 16, 222, 140, + 214, 240, 232, 227, 61, 32, 16, 222, 140, 251, 121, 214, 240, 232, 227, + 61, 32, 16, 222, 140, 241, 104, 232, 227, 61, 32, 16, 222, 140, 251, 121, + 241, 104, 232, 227, 61, 32, 16, 222, 140, 205, 76, 232, 227, 61, 32, 16, + 222, 140, 205, 90, 61, 32, 16, 222, 140, 206, 144, 232, 227, 61, 32, 16, + 222, 140, 206, 144, 225, 15, 232, 227, 61, 32, 16, 222, 140, 225, 15, + 232, 227, 61, 32, 16, 222, 140, 215, 132, 232, 227, 61, 32, 16, 228, 24, + 206, 170, 232, 228, 61, 32, 16, 251, 16, 206, 170, 232, 228, 61, 32, 16, + 237, 167, 206, 141, 61, 32, 16, 237, 167, 221, 98, 61, 32, 16, 237, 167, + 241, 45, 61, 32, 16, 222, 140, 203, 70, 232, 227, 61, 32, 16, 222, 140, + 214, 239, 232, 227, 61, 32, 16, 222, 140, 215, 132, 206, 144, 232, 227, + 61, 32, 16, 235, 95, 220, 215, 251, 19, 61, 32, 16, 235, 95, 220, 215, + 241, 13, 61, 32, 16, 238, 177, 227, 83, 236, 191, 202, 174, 61, 32, 16, + 228, 131, 61, 32, 16, 228, 129, 61, 32, 16, 236, 191, 250, 233, 241, 103, + 232, 226, 61, 32, 16, 236, 191, 241, 60, 172, 61, 32, 16, 236, 191, 241, + 60, 220, 133, 61, 32, 16, 236, 191, 220, 128, 232, 227, 61, 32, 16, 236, + 191, 241, 60, 241, 76, 61, 32, 16, 236, 191, 209, 82, 241, 59, 241, 76, + 61, 32, 16, 236, 191, 241, 60, 227, 8, 61, 32, 16, 236, 191, 241, 60, + 199, 14, 61, 32, 16, 236, 191, 241, 60, 219, 151, 227, 27, 61, 32, 16, + 236, 191, 241, 60, 219, 151, 251, 55, 61, 32, 16, 236, 191, 222, 186, + 246, 196, 241, 45, 61, 32, 16, 236, 191, 222, 186, 246, 196, 221, 98, 61, + 32, 16, 237, 113, 209, 82, 246, 196, 203, 69, 61, 32, 16, 236, 191, 209, + 82, 246, 196, 207, 112, 61, 32, 16, 236, 191, 220, 23, 61, 32, 16, 246, + 197, 198, 238, 61, 32, 16, 246, 197, 226, 99, 61, 32, 16, 246, 197, 208, + 235, 61, 32, 16, 236, 191, 233, 19, 200, 12, 206, 145, 61, 32, 16, 236, + 191, 238, 178, 251, 44, 61, 32, 16, 200, 12, 205, 77, 61, 32, 16, 241, + 53, 205, 77, 61, 32, 16, 241, 53, 206, 145, 61, 32, 16, 241, 53, 251, 21, + 239, 97, 240, 203, 61, 32, 16, 241, 53, 221, 96, 206, 149, 240, 203, 61, + 32, 16, 241, 53, 241, 36, 238, 49, 240, 203, 61, 32, 16, 241, 53, 205, + 87, 217, 95, 240, 203, 61, 32, 16, 200, 12, 251, 21, 239, 97, 240, 203, + 61, 32, 16, 200, 12, 221, 96, 206, 149, 240, 203, 61, 32, 16, 200, 12, + 241, 36, 238, 49, 240, 203, 61, 32, 16, 200, 12, 205, 87, 217, 95, 240, + 203, 61, 32, 16, 235, 255, 241, 52, 61, 32, 16, 235, 255, 200, 11, 61, + 32, 16, 241, 61, 251, 21, 221, 178, 61, 32, 16, 241, 61, 251, 21, 222, + 55, 61, 32, 16, 241, 61, 241, 14, 61, 32, 16, 241, 61, 206, 91, 61, 32, + 16, 209, 149, 206, 91, 61, 32, 16, 209, 149, 206, 92, 240, 254, 61, 32, + 16, 209, 149, 206, 92, 205, 78, 61, 32, 16, 209, 149, 206, 92, 206, 137, + 61, 32, 16, 209, 149, 250, 196, 61, 32, 16, 209, 149, 250, 197, 240, 254, + 61, 32, 16, 209, 149, 250, 197, 205, 78, 61, 32, 16, 209, 149, 250, 197, + 206, 137, 61, 32, 16, 241, 37, 235, 236, 61, 32, 16, 241, 44, 217, 3, 61, + 32, 16, 208, 86, 61, 32, 16, 250, 217, 172, 61, 32, 16, 250, 217, 202, + 174, 61, 32, 16, 250, 217, 236, 89, 61, 32, 16, 250, 217, 241, 76, 61, + 32, 16, 250, 217, 227, 8, 61, 32, 16, 250, 217, 199, 14, 61, 32, 16, 250, + 217, 219, 150, 61, 32, 16, 226, 240, 220, 21, 222, 25, 61, 32, 16, 226, + 241, 220, 21, 222, 25, 61, 32, 16, 226, 240, 220, 21, 227, 27, 61, 32, + 16, 226, 241, 220, 21, 227, 27, 61, 32, 16, 226, 101, 227, 27, 61, 32, + 16, 235, 100, 220, 21, 227, 27, 32, 16, 209, 139, 249, 72, 32, 16, 53, + 249, 72, 32, 16, 47, 249, 72, 32, 16, 213, 106, 47, 249, 72, 32, 16, 241, + 243, 249, 72, 32, 16, 209, 250, 249, 72, 32, 16, 49, 213, 133, 54, 32, + 16, 51, 213, 133, 54, 32, 16, 213, 133, 240, 180, 32, 16, 242, 30, 211, + 182, 32, 16, 242, 59, 247, 141, 32, 16, 211, 182, 32, 16, 246, 87, 32, + 16, 213, 131, 237, 101, 32, 16, 213, 131, 237, 100, 32, 16, 213, 131, + 237, 99, 32, 16, 237, 122, 32, 16, 237, 123, 57, 32, 16, 248, 59, 81, 32, + 16, 247, 180, 32, 16, 248, 71, 32, 16, 159, 32, 16, 217, 73, 208, 117, + 32, 16, 204, 140, 208, 117, 32, 16, 206, 42, 208, 117, 32, 16, 236, 228, + 208, 117, 32, 16, 237, 60, 208, 117, 32, 16, 209, 105, 208, 117, 32, 16, + 209, 103, 236, 208, 32, 16, 236, 226, 236, 208, 32, 16, 236, 157, 246, + 124, 32, 16, 236, 157, 246, 125, 217, 5, 251, 110, 32, 16, 236, 157, 246, + 125, 217, 5, 249, 57, 32, 16, 247, 224, 246, 124, 32, 16, 238, 6, 246, + 124, 32, 16, 238, 6, 246, 125, 217, 5, 251, 110, 32, 16, 238, 6, 246, + 125, 217, 5, 249, 57, 32, 16, 239, 143, 246, 123, 32, 16, 239, 143, 246, + 122, 32, 16, 221, 21, 222, 75, 213, 117, 32, 16, 53, 210, 78, 32, 16, 53, + 237, 44, 32, 16, 237, 45, 203, 228, 32, 16, 237, 45, 239, 167, 32, 16, + 220, 117, 203, 228, 32, 16, 220, 117, 239, 167, 32, 16, 210, 79, 203, + 228, 32, 16, 210, 79, 239, 167, 32, 16, 214, 88, 150, 210, 78, 32, 16, + 214, 88, 150, 237, 44, 32, 16, 246, 67, 205, 234, 32, 16, 242, 180, 205, + 234, 32, 16, 217, 5, 251, 110, 32, 16, 217, 5, 249, 57, 32, 16, 214, 69, + 251, 110, 32, 16, 214, 69, 249, 57, 32, 16, 221, 24, 213, 117, 32, 16, + 201, 32, 213, 117, 32, 16, 167, 213, 117, 32, 16, 214, 88, 213, 117, 32, + 16, 238, 228, 213, 117, 32, 16, 209, 99, 213, 117, 32, 16, 206, 65, 213, + 117, 32, 16, 209, 91, 213, 117, 32, 16, 112, 233, 83, 204, 157, 213, 117, + 32, 16, 200, 196, 218, 205, 32, 16, 93, 218, 205, 32, 16, 246, 156, 200, + 196, 218, 205, 32, 16, 52, 218, 206, 201, 34, 32, 16, 52, 218, 206, 248, + 144, 32, 16, 205, 99, 218, 206, 115, 201, 34, 32, 16, 205, 99, 218, 206, + 115, 248, 144, 32, 16, 205, 99, 218, 206, 49, 201, 34, 32, 16, 205, 99, + 218, 206, 49, 248, 144, 32, 16, 205, 99, 218, 206, 51, 201, 34, 32, 16, + 205, 99, 218, 206, 51, 248, 144, 32, 16, 205, 99, 218, 206, 127, 201, 34, + 32, 16, 205, 99, 218, 206, 127, 248, 144, 32, 16, 205, 99, 218, 206, 115, + 51, 201, 34, 32, 16, 205, 99, 218, 206, 115, 51, 248, 144, 32, 16, 221, + 82, 218, 206, 201, 34, 32, 16, 221, 82, 218, 206, 248, 144, 32, 16, 205, + 96, 218, 206, 127, 201, 34, 32, 16, 205, 96, 218, 206, 127, 248, 144, 32, + 16, 216, 116, 218, 205, 32, 16, 202, 186, 218, 205, 32, 16, 218, 206, + 248, 144, 32, 16, 218, 98, 218, 205, 32, 16, 246, 94, 218, 206, 201, 34, + 32, 16, 246, 94, 218, 206, 248, 144, 32, 16, 248, 57, 32, 16, 201, 32, + 218, 209, 32, 16, 167, 218, 209, 32, 16, 214, 88, 218, 209, 32, 16, 238, + 228, 218, 209, 32, 16, 209, 99, 218, 209, 32, 16, 206, 65, 218, 209, 32, + 16, 209, 91, 218, 209, 32, 16, 112, 233, 83, 204, 157, 218, 209, 32, 16, + 38, 208, 92, 32, 16, 38, 208, 200, 208, 92, 32, 16, 38, 205, 107, 32, 16, + 38, 205, 106, 32, 16, 38, 205, 105, 32, 16, 237, 84, 205, 107, 32, 16, + 237, 84, 205, 106, 32, 16, 237, 84, 205, 105, 32, 16, 38, 250, 136, 240, + 182, 32, 16, 38, 237, 52, 32, 16, 38, 237, 51, 32, 16, 38, 237, 50, 32, + 16, 38, 237, 49, 32, 16, 38, 237, 48, 32, 16, 248, 244, 249, 5, 32, 16, + 238, 171, 249, 5, 32, 16, 248, 244, 206, 7, 32, 16, 238, 171, 206, 7, 32, + 16, 248, 244, 209, 54, 32, 16, 238, 171, 209, 54, 32, 16, 248, 244, 215, + 211, 32, 16, 238, 171, 215, 211, 32, 16, 38, 251, 251, 32, 16, 38, 208, + 120, 32, 16, 38, 206, 154, 32, 16, 38, 208, 121, 32, 16, 38, 222, 154, + 32, 16, 38, 222, 153, 32, 16, 38, 251, 250, 32, 16, 38, 224, 61, 32, 16, + 250, 208, 203, 228, 32, 16, 250, 208, 239, 167, 32, 16, 38, 240, 197, 32, + 16, 38, 213, 23, 32, 16, 38, 237, 33, 32, 16, 38, 209, 50, 32, 16, 38, + 248, 222, 32, 16, 38, 53, 205, 163, 32, 16, 38, 205, 83, 205, 163, 32, + 16, 213, 28, 32, 16, 208, 14, 32, 16, 199, 157, 32, 16, 215, 203, 32, 16, + 222, 6, 32, 16, 236, 238, 32, 16, 242, 245, 32, 16, 241, 162, 32, 16, + 235, 90, 218, 210, 209, 75, 32, 16, 235, 90, 218, 210, 218, 242, 209, 75, + 32, 16, 205, 133, 32, 16, 204, 186, 32, 16, 228, 50, 204, 186, 32, 16, + 204, 187, 209, 75, 32, 16, 204, 187, 203, 228, 32, 16, 217, 22, 208, 46, + 32, 16, 217, 22, 208, 43, 32, 16, 217, 22, 208, 42, 32, 16, 217, 22, 208, + 41, 32, 16, 217, 22, 208, 40, 32, 16, 217, 22, 208, 39, 32, 16, 217, 22, + 208, 38, 32, 16, 217, 22, 208, 37, 32, 16, 217, 22, 208, 36, 32, 16, 217, + 22, 208, 45, 32, 16, 217, 22, 208, 44, 32, 16, 234, 149, 32, 16, 220, 32, + 32, 16, 238, 171, 76, 208, 82, 32, 16, 241, 155, 209, 75, 32, 16, 38, + 127, 248, 85, 32, 16, 38, 115, 248, 85, 32, 16, 38, 234, 162, 32, 16, 38, + 209, 40, 215, 136, 32, 16, 216, 66, 81, 32, 16, 216, 66, 115, 81, 32, 16, + 167, 216, 66, 81, 32, 16, 235, 125, 203, 228, 32, 16, 235, 125, 239, 167, + 32, 16, 3, 237, 83, 32, 16, 242, 13, 32, 16, 242, 14, 251, 124, 32, 16, + 222, 121, 32, 16, 224, 80, 32, 16, 248, 54, 32, 16, 210, 171, 201, 34, + 32, 16, 210, 171, 248, 144, 32, 16, 221, 160, 32, 16, 221, 161, 248, 144, + 32, 16, 210, 165, 201, 34, 32, 16, 210, 165, 248, 144, 32, 16, 236, 174, + 201, 34, 32, 16, 236, 174, 248, 144, 32, 16, 224, 81, 216, 25, 213, 117, + 32, 16, 224, 81, 228, 122, 213, 117, 32, 16, 248, 55, 213, 117, 32, 16, + 210, 171, 213, 117, 32, 16, 221, 161, 213, 117, 32, 16, 210, 165, 213, + 117, 32, 16, 206, 168, 216, 23, 242, 207, 214, 249, 216, 24, 32, 16, 206, + 168, 216, 23, 242, 207, 214, 249, 228, 121, 32, 16, 206, 168, 216, 23, + 242, 207, 214, 249, 216, 25, 241, 24, 32, 16, 206, 168, 228, 120, 242, + 207, 214, 249, 216, 24, 32, 16, 206, 168, 228, 120, 242, 207, 214, 249, + 228, 121, 32, 16, 206, 168, 228, 120, 242, 207, 214, 249, 228, 122, 241, + 24, 32, 16, 206, 168, 228, 120, 242, 207, 214, 249, 228, 122, 241, 23, + 32, 16, 206, 168, 228, 120, 242, 207, 214, 249, 228, 122, 241, 22, 32, + 16, 242, 237, 32, 16, 235, 63, 247, 224, 246, 124, 32, 16, 235, 63, 238, + 6, 246, 124, 32, 16, 52, 250, 103, 32, 16, 202, 207, 32, 16, 215, 103, + 32, 16, 246, 115, 32, 16, 211, 226, 32, 16, 246, 119, 32, 16, 205, 151, + 32, 16, 215, 72, 32, 16, 215, 73, 237, 36, 32, 16, 211, 227, 237, 36, 32, + 16, 205, 152, 213, 114, 32, 16, 216, 6, 208, 5, 32, 16, 226, 153, 247, + 224, 246, 124, 32, 16, 226, 153, 238, 171, 76, 215, 196, 32, 16, 226, + 153, 47, 218, 209, 32, 16, 226, 153, 213, 182, 81, 32, 16, 226, 153, 201, + 32, 218, 209, 32, 16, 226, 153, 167, 218, 209, 32, 16, 226, 153, 214, 88, + 218, 210, 208, 93, 239, 167, 32, 16, 226, 153, 214, 88, 218, 210, 208, + 93, 203, 228, 32, 16, 226, 153, 238, 228, 218, 210, 208, 93, 239, 167, + 32, 16, 226, 153, 238, 228, 218, 210, 208, 93, 203, 228, 32, 16, 226, + 153, 237, 45, 54, 31, 202, 192, 218, 213, 207, 162, 31, 202, 192, 218, + 213, 207, 151, 31, 202, 192, 218, 213, 207, 141, 31, 202, 192, 218, 213, + 207, 134, 31, 202, 192, 218, 213, 207, 126, 31, 202, 192, 218, 213, 207, + 120, 31, 202, 192, 218, 213, 207, 119, 31, 202, 192, 218, 213, 207, 118, + 31, 202, 192, 218, 213, 207, 117, 31, 202, 192, 218, 213, 207, 161, 31, + 202, 192, 218, 213, 207, 160, 31, 202, 192, 218, 213, 207, 159, 31, 202, + 192, 218, 213, 207, 158, 31, 202, 192, 218, 213, 207, 157, 31, 202, 192, + 218, 213, 207, 156, 31, 202, 192, 218, 213, 207, 155, 31, 202, 192, 218, + 213, 207, 154, 31, 202, 192, 218, 213, 207, 153, 31, 202, 192, 218, 213, + 207, 152, 31, 202, 192, 218, 213, 207, 150, 31, 202, 192, 218, 213, 207, + 149, 31, 202, 192, 218, 213, 207, 148, 31, 202, 192, 218, 213, 207, 147, + 31, 202, 192, 218, 213, 207, 146, 31, 202, 192, 218, 213, 207, 125, 31, + 202, 192, 218, 213, 207, 124, 31, 202, 192, 218, 213, 207, 123, 31, 202, + 192, 218, 213, 207, 122, 31, 202, 192, 218, 213, 207, 121, 31, 228, 72, + 218, 213, 207, 162, 31, 228, 72, 218, 213, 207, 151, 31, 228, 72, 218, + 213, 207, 134, 31, 228, 72, 218, 213, 207, 126, 31, 228, 72, 218, 213, + 207, 119, 31, 228, 72, 218, 213, 207, 118, 31, 228, 72, 218, 213, 207, + 160, 31, 228, 72, 218, 213, 207, 159, 31, 228, 72, 218, 213, 207, 158, + 31, 228, 72, 218, 213, 207, 157, 31, 228, 72, 218, 213, 207, 154, 31, + 228, 72, 218, 213, 207, 153, 31, 228, 72, 218, 213, 207, 152, 31, 228, + 72, 218, 213, 207, 147, 31, 228, 72, 218, 213, 207, 146, 31, 228, 72, + 218, 213, 207, 145, 31, 228, 72, 218, 213, 207, 144, 31, 228, 72, 218, + 213, 207, 143, 31, 228, 72, 218, 213, 207, 142, 31, 228, 72, 218, 213, + 207, 140, 31, 228, 72, 218, 213, 207, 139, 31, 228, 72, 218, 213, 207, + 138, 31, 228, 72, 218, 213, 207, 137, 31, 228, 72, 218, 213, 207, 136, + 31, 228, 72, 218, 213, 207, 135, 31, 228, 72, 218, 213, 207, 133, 31, + 228, 72, 218, 213, 207, 132, 31, 228, 72, 218, 213, 207, 131, 31, 228, + 72, 218, 213, 207, 130, 31, 228, 72, 218, 213, 207, 129, 31, 228, 72, + 218, 213, 207, 128, 31, 228, 72, 218, 213, 207, 127, 31, 228, 72, 218, + 213, 207, 125, 31, 228, 72, 218, 213, 207, 124, 31, 228, 72, 218, 213, + 207, 123, 31, 228, 72, 218, 213, 207, 122, 31, 228, 72, 218, 213, 207, + 121, 38, 31, 32, 205, 79, 38, 31, 32, 206, 138, 38, 31, 32, 216, 35, 31, + 32, 225, 10, 221, 97, 36, 239, 17, 241, 38, 36, 234, 122, 239, 17, 241, + 38, 36, 233, 87, 239, 17, 241, 38, 36, 239, 16, 234, 123, 241, 38, 36, + 239, 16, 233, 86, 241, 38, 36, 239, 17, 206, 140, 36, 247, 55, 206, 140, + 36, 236, 183, 246, 155, 206, 140, 36, 221, 152, 206, 140, 36, 249, 67, + 206, 140, 36, 227, 2, 209, 53, 206, 140, 36, 243, 35, 206, 140, 36, 250, + 183, 206, 140, 36, 217, 39, 206, 140, 36, 248, 64, 216, 254, 206, 140, + 36, 241, 157, 217, 34, 240, 246, 206, 140, 36, 240, 243, 206, 140, 36, + 199, 223, 206, 140, 36, 228, 108, 206, 140, 36, 216, 45, 206, 140, 36, + 213, 189, 206, 140, 36, 243, 47, 206, 140, 36, 233, 198, 249, 129, 206, + 140, 36, 201, 106, 206, 140, 36, 237, 8, 206, 140, 36, 251, 224, 206, + 140, 36, 213, 146, 206, 140, 36, 213, 121, 206, 140, 36, 239, 15, 206, + 140, 36, 227, 150, 206, 140, 36, 243, 42, 206, 140, 36, 238, 170, 206, + 140, 36, 239, 109, 206, 140, 36, 247, 24, 206, 140, 36, 241, 167, 206, + 140, 36, 27, 213, 120, 206, 140, 36, 216, 202, 206, 140, 36, 225, 14, + 206, 140, 36, 246, 108, 206, 140, 36, 226, 143, 206, 140, 36, 236, 39, + 206, 140, 36, 208, 58, 206, 140, 36, 214, 201, 206, 140, 36, 236, 182, + 206, 140, 36, 213, 122, 206, 140, 36, 225, 53, 217, 34, 221, 132, 206, + 140, 36, 213, 118, 206, 140, 36, 235, 110, 205, 186, 222, 59, 206, 140, + 36, 238, 172, 206, 140, 36, 208, 71, 206, 140, 36, 235, 65, 206, 140, 36, + 238, 163, 206, 140, 36, 216, 89, 206, 140, 36, 213, 16, 206, 140, 36, + 237, 34, 206, 140, 36, 203, 68, 217, 34, 201, 86, 206, 140, 36, 243, 52, + 206, 140, 36, 222, 74, 206, 140, 36, 238, 76, 206, 140, 36, 203, 238, + 206, 140, 36, 241, 25, 206, 140, 36, 246, 110, 221, 58, 206, 140, 36, + 235, 42, 206, 140, 36, 236, 40, 228, 117, 206, 140, 36, 222, 129, 206, + 140, 36, 251, 246, 206, 140, 36, 238, 188, 206, 140, 36, 239, 171, 206, + 140, 36, 201, 84, 206, 140, 36, 209, 134, 206, 140, 36, 228, 81, 206, + 140, 36, 241, 124, 206, 140, 36, 241, 248, 206, 140, 36, 241, 21, 206, + 140, 36, 238, 40, 206, 140, 36, 210, 128, 206, 140, 36, 208, 75, 206, + 140, 36, 234, 164, 206, 140, 36, 246, 63, 206, 140, 36, 246, 105, 206, + 140, 36, 237, 174, 206, 140, 36, 251, 188, 206, 140, 36, 246, 62, 206, + 140, 36, 217, 79, 206, 107, 203, 45, 206, 140, 36, 241, 47, 206, 140, 36, + 225, 164, 206, 140, 36, 236, 232, 243, 3, 212, 247, 203, 240, 17, 102, + 243, 3, 212, 247, 203, 240, 17, 105, 243, 3, 212, 247, 203, 240, 17, 147, + 243, 3, 212, 247, 203, 240, 17, 149, 243, 3, 212, 247, 203, 240, 17, 164, + 243, 3, 212, 247, 203, 240, 17, 187, 243, 3, 212, 247, 203, 240, 17, 210, + 135, 243, 3, 212, 247, 203, 240, 17, 192, 243, 3, 212, 247, 203, 240, 17, + 219, 113, 243, 3, 212, 247, 206, 162, 17, 102, 243, 3, 212, 247, 206, + 162, 17, 105, 243, 3, 212, 247, 206, 162, 17, 147, 243, 3, 212, 247, 206, + 162, 17, 149, 243, 3, 212, 247, 206, 162, 17, 164, 243, 3, 212, 247, 206, + 162, 17, 187, 243, 3, 212, 247, 206, 162, 17, 210, 135, 243, 3, 212, 247, + 206, 162, 17, 192, 243, 3, 212, 247, 206, 162, 17, 219, 113, 13, 27, 6, + 62, 13, 27, 6, 250, 103, 13, 27, 6, 247, 223, 13, 27, 6, 242, 153, 13, + 27, 6, 72, 13, 27, 6, 238, 5, 13, 27, 6, 236, 156, 13, 27, 6, 234, 247, + 13, 27, 6, 70, 13, 27, 6, 227, 251, 13, 27, 6, 227, 118, 13, 27, 6, 156, + 13, 27, 6, 223, 243, 13, 27, 6, 220, 214, 13, 27, 6, 74, 13, 27, 6, 216, + 226, 13, 27, 6, 214, 167, 13, 27, 6, 146, 13, 27, 6, 212, 122, 13, 27, 6, + 207, 83, 13, 27, 6, 66, 13, 27, 6, 203, 168, 13, 27, 6, 201, 147, 13, 27, + 6, 200, 195, 13, 27, 6, 200, 123, 13, 27, 6, 199, 157, 13, 27, 4, 62, 13, + 27, 4, 250, 103, 13, 27, 4, 247, 223, 13, 27, 4, 242, 153, 13, 27, 4, 72, + 13, 27, 4, 238, 5, 13, 27, 4, 236, 156, 13, 27, 4, 234, 247, 13, 27, 4, + 70, 13, 27, 4, 227, 251, 13, 27, 4, 227, 118, 13, 27, 4, 156, 13, 27, 4, + 223, 243, 13, 27, 4, 220, 214, 13, 27, 4, 74, 13, 27, 4, 216, 226, 13, + 27, 4, 214, 167, 13, 27, 4, 146, 13, 27, 4, 212, 122, 13, 27, 4, 207, 83, + 13, 27, 4, 66, 13, 27, 4, 203, 168, 13, 27, 4, 201, 147, 13, 27, 4, 200, + 195, 13, 27, 4, 200, 123, 13, 27, 4, 199, 157, 13, 39, 6, 62, 13, 39, 6, + 250, 103, 13, 39, 6, 247, 223, 13, 39, 6, 242, 153, 13, 39, 6, 72, 13, + 39, 6, 238, 5, 13, 39, 6, 236, 156, 13, 39, 6, 234, 247, 13, 39, 6, 70, + 13, 39, 6, 227, 251, 13, 39, 6, 227, 118, 13, 39, 6, 156, 13, 39, 6, 223, + 243, 13, 39, 6, 220, 214, 13, 39, 6, 74, 13, 39, 6, 216, 226, 13, 39, 6, + 214, 167, 13, 39, 6, 146, 13, 39, 6, 212, 122, 13, 39, 6, 207, 83, 13, + 39, 6, 66, 13, 39, 6, 203, 168, 13, 39, 6, 201, 147, 13, 39, 6, 200, 195, + 13, 39, 6, 200, 123, 13, 39, 6, 199, 157, 13, 39, 4, 62, 13, 39, 4, 250, + 103, 13, 39, 4, 247, 223, 13, 39, 4, 242, 153, 13, 39, 4, 72, 13, 39, 4, + 238, 5, 13, 39, 4, 236, 156, 13, 39, 4, 70, 13, 39, 4, 227, 251, 13, 39, + 4, 227, 118, 13, 39, 4, 156, 13, 39, 4, 223, 243, 13, 39, 4, 220, 214, + 13, 39, 4, 74, 13, 39, 4, 216, 226, 13, 39, 4, 214, 167, 13, 39, 4, 146, + 13, 39, 4, 212, 122, 13, 39, 4, 207, 83, 13, 39, 4, 66, 13, 39, 4, 203, + 168, 13, 39, 4, 201, 147, 13, 39, 4, 200, 195, 13, 39, 4, 200, 123, 13, + 39, 4, 199, 157, 13, 27, 39, 6, 62, 13, 27, 39, 6, 250, 103, 13, 27, 39, + 6, 247, 223, 13, 27, 39, 6, 242, 153, 13, 27, 39, 6, 72, 13, 27, 39, 6, + 238, 5, 13, 27, 39, 6, 236, 156, 13, 27, 39, 6, 234, 247, 13, 27, 39, 6, + 70, 13, 27, 39, 6, 227, 251, 13, 27, 39, 6, 227, 118, 13, 27, 39, 6, 156, + 13, 27, 39, 6, 223, 243, 13, 27, 39, 6, 220, 214, 13, 27, 39, 6, 74, 13, + 27, 39, 6, 216, 226, 13, 27, 39, 6, 214, 167, 13, 27, 39, 6, 146, 13, 27, + 39, 6, 212, 122, 13, 27, 39, 6, 207, 83, 13, 27, 39, 6, 66, 13, 27, 39, + 6, 203, 168, 13, 27, 39, 6, 201, 147, 13, 27, 39, 6, 200, 195, 13, 27, + 39, 6, 200, 123, 13, 27, 39, 6, 199, 157, 13, 27, 39, 4, 62, 13, 27, 39, + 4, 250, 103, 13, 27, 39, 4, 247, 223, 13, 27, 39, 4, 242, 153, 13, 27, + 39, 4, 72, 13, 27, 39, 4, 238, 5, 13, 27, 39, 4, 236, 156, 13, 27, 39, 4, + 234, 247, 13, 27, 39, 4, 70, 13, 27, 39, 4, 227, 251, 13, 27, 39, 4, 227, + 118, 13, 27, 39, 4, 156, 13, 27, 39, 4, 223, 243, 13, 27, 39, 4, 220, + 214, 13, 27, 39, 4, 74, 13, 27, 39, 4, 216, 226, 13, 27, 39, 4, 214, 167, + 13, 27, 39, 4, 146, 13, 27, 39, 4, 212, 122, 13, 27, 39, 4, 207, 83, 13, + 27, 39, 4, 66, 13, 27, 39, 4, 203, 168, 13, 27, 39, 4, 201, 147, 13, 27, + 39, 4, 200, 195, 13, 27, 39, 4, 200, 123, 13, 27, 39, 4, 199, 157, 13, + 135, 6, 62, 13, 135, 6, 247, 223, 13, 135, 6, 242, 153, 13, 135, 6, 236, + 156, 13, 135, 6, 227, 251, 13, 135, 6, 227, 118, 13, 135, 6, 220, 214, + 13, 135, 6, 74, 13, 135, 6, 216, 226, 13, 135, 6, 214, 167, 13, 135, 6, + 212, 122, 13, 135, 6, 207, 83, 13, 135, 6, 66, 13, 135, 6, 203, 168, 13, + 135, 6, 201, 147, 13, 135, 6, 200, 195, 13, 135, 6, 200, 123, 13, 135, 6, + 199, 157, 13, 135, 4, 62, 13, 135, 4, 250, 103, 13, 135, 4, 247, 223, 13, + 135, 4, 242, 153, 13, 135, 4, 238, 5, 13, 135, 4, 234, 247, 13, 135, 4, + 70, 13, 135, 4, 227, 251, 13, 135, 4, 227, 118, 13, 135, 4, 156, 13, 135, + 4, 223, 243, 13, 135, 4, 220, 214, 13, 135, 4, 216, 226, 13, 135, 4, 214, + 167, 13, 135, 4, 146, 13, 135, 4, 212, 122, 13, 135, 4, 207, 83, 13, 135, + 4, 66, 13, 135, 4, 203, 168, 13, 135, 4, 201, 147, 13, 135, 4, 200, 195, + 13, 135, 4, 200, 123, 13, 135, 4, 199, 157, 13, 27, 135, 6, 62, 13, 27, + 135, 6, 250, 103, 13, 27, 135, 6, 247, 223, 13, 27, 135, 6, 242, 153, 13, + 27, 135, 6, 72, 13, 27, 135, 6, 238, 5, 13, 27, 135, 6, 236, 156, 13, 27, + 135, 6, 234, 247, 13, 27, 135, 6, 70, 13, 27, 135, 6, 227, 251, 13, 27, + 135, 6, 227, 118, 13, 27, 135, 6, 156, 13, 27, 135, 6, 223, 243, 13, 27, + 135, 6, 220, 214, 13, 27, 135, 6, 74, 13, 27, 135, 6, 216, 226, 13, 27, + 135, 6, 214, 167, 13, 27, 135, 6, 146, 13, 27, 135, 6, 212, 122, 13, 27, + 135, 6, 207, 83, 13, 27, 135, 6, 66, 13, 27, 135, 6, 203, 168, 13, 27, + 135, 6, 201, 147, 13, 27, 135, 6, 200, 195, 13, 27, 135, 6, 200, 123, 13, + 27, 135, 6, 199, 157, 13, 27, 135, 4, 62, 13, 27, 135, 4, 250, 103, 13, + 27, 135, 4, 247, 223, 13, 27, 135, 4, 242, 153, 13, 27, 135, 4, 72, 13, + 27, 135, 4, 238, 5, 13, 27, 135, 4, 236, 156, 13, 27, 135, 4, 234, 247, + 13, 27, 135, 4, 70, 13, 27, 135, 4, 227, 251, 13, 27, 135, 4, 227, 118, + 13, 27, 135, 4, 156, 13, 27, 135, 4, 223, 243, 13, 27, 135, 4, 220, 214, + 13, 27, 135, 4, 74, 13, 27, 135, 4, 216, 226, 13, 27, 135, 4, 214, 167, + 13, 27, 135, 4, 146, 13, 27, 135, 4, 212, 122, 13, 27, 135, 4, 207, 83, + 13, 27, 135, 4, 66, 13, 27, 135, 4, 203, 168, 13, 27, 135, 4, 201, 147, + 13, 27, 135, 4, 200, 195, 13, 27, 135, 4, 200, 123, 13, 27, 135, 4, 199, + 157, 13, 170, 6, 62, 13, 170, 6, 250, 103, 13, 170, 6, 242, 153, 13, 170, + 6, 72, 13, 170, 6, 238, 5, 13, 170, 6, 236, 156, 13, 170, 6, 227, 251, + 13, 170, 6, 227, 118, 13, 170, 6, 156, 13, 170, 6, 223, 243, 13, 170, 6, + 220, 214, 13, 170, 6, 74, 13, 170, 6, 216, 226, 13, 170, 6, 214, 167, 13, + 170, 6, 212, 122, 13, 170, 6, 207, 83, 13, 170, 6, 66, 13, 170, 6, 203, + 168, 13, 170, 6, 201, 147, 13, 170, 6, 200, 195, 13, 170, 6, 200, 123, + 13, 170, 4, 62, 13, 170, 4, 250, 103, 13, 170, 4, 247, 223, 13, 170, 4, + 242, 153, 13, 170, 4, 72, 13, 170, 4, 238, 5, 13, 170, 4, 236, 156, 13, + 170, 4, 234, 247, 13, 170, 4, 70, 13, 170, 4, 227, 251, 13, 170, 4, 227, + 118, 13, 170, 4, 156, 13, 170, 4, 223, 243, 13, 170, 4, 220, 214, 13, + 170, 4, 74, 13, 170, 4, 216, 226, 13, 170, 4, 214, 167, 13, 170, 4, 146, + 13, 170, 4, 212, 122, 13, 170, 4, 207, 83, 13, 170, 4, 66, 13, 170, 4, + 203, 168, 13, 170, 4, 201, 147, 13, 170, 4, 200, 195, 13, 170, 4, 200, + 123, 13, 170, 4, 199, 157, 13, 175, 6, 62, 13, 175, 6, 250, 103, 13, 175, + 6, 242, 153, 13, 175, 6, 72, 13, 175, 6, 238, 5, 13, 175, 6, 236, 156, + 13, 175, 6, 70, 13, 175, 6, 227, 251, 13, 175, 6, 227, 118, 13, 175, 6, + 156, 13, 175, 6, 223, 243, 13, 175, 6, 74, 13, 175, 6, 212, 122, 13, 175, + 6, 207, 83, 13, 175, 6, 66, 13, 175, 6, 203, 168, 13, 175, 6, 201, 147, + 13, 175, 6, 200, 195, 13, 175, 6, 200, 123, 13, 175, 4, 62, 13, 175, 4, + 250, 103, 13, 175, 4, 247, 223, 13, 175, 4, 242, 153, 13, 175, 4, 72, 13, + 175, 4, 238, 5, 13, 175, 4, 236, 156, 13, 175, 4, 234, 247, 13, 175, 4, + 70, 13, 175, 4, 227, 251, 13, 175, 4, 227, 118, 13, 175, 4, 156, 13, 175, + 4, 223, 243, 13, 175, 4, 220, 214, 13, 175, 4, 74, 13, 175, 4, 216, 226, + 13, 175, 4, 214, 167, 13, 175, 4, 146, 13, 175, 4, 212, 122, 13, 175, 4, + 207, 83, 13, 175, 4, 66, 13, 175, 4, 203, 168, 13, 175, 4, 201, 147, 13, + 175, 4, 200, 195, 13, 175, 4, 200, 123, 13, 175, 4, 199, 157, 13, 27, + 170, 6, 62, 13, 27, 170, 6, 250, 103, 13, 27, 170, 6, 247, 223, 13, 27, + 170, 6, 242, 153, 13, 27, 170, 6, 72, 13, 27, 170, 6, 238, 5, 13, 27, + 170, 6, 236, 156, 13, 27, 170, 6, 234, 247, 13, 27, 170, 6, 70, 13, 27, + 170, 6, 227, 251, 13, 27, 170, 6, 227, 118, 13, 27, 170, 6, 156, 13, 27, + 170, 6, 223, 243, 13, 27, 170, 6, 220, 214, 13, 27, 170, 6, 74, 13, 27, + 170, 6, 216, 226, 13, 27, 170, 6, 214, 167, 13, 27, 170, 6, 146, 13, 27, + 170, 6, 212, 122, 13, 27, 170, 6, 207, 83, 13, 27, 170, 6, 66, 13, 27, + 170, 6, 203, 168, 13, 27, 170, 6, 201, 147, 13, 27, 170, 6, 200, 195, 13, + 27, 170, 6, 200, 123, 13, 27, 170, 6, 199, 157, 13, 27, 170, 4, 62, 13, + 27, 170, 4, 250, 103, 13, 27, 170, 4, 247, 223, 13, 27, 170, 4, 242, 153, + 13, 27, 170, 4, 72, 13, 27, 170, 4, 238, 5, 13, 27, 170, 4, 236, 156, 13, + 27, 170, 4, 234, 247, 13, 27, 170, 4, 70, 13, 27, 170, 4, 227, 251, 13, + 27, 170, 4, 227, 118, 13, 27, 170, 4, 156, 13, 27, 170, 4, 223, 243, 13, + 27, 170, 4, 220, 214, 13, 27, 170, 4, 74, 13, 27, 170, 4, 216, 226, 13, + 27, 170, 4, 214, 167, 13, 27, 170, 4, 146, 13, 27, 170, 4, 212, 122, 13, + 27, 170, 4, 207, 83, 13, 27, 170, 4, 66, 13, 27, 170, 4, 203, 168, 13, + 27, 170, 4, 201, 147, 13, 27, 170, 4, 200, 195, 13, 27, 170, 4, 200, 123, + 13, 27, 170, 4, 199, 157, 13, 43, 6, 62, 13, 43, 6, 250, 103, 13, 43, 6, + 247, 223, 13, 43, 6, 242, 153, 13, 43, 6, 72, 13, 43, 6, 238, 5, 13, 43, + 6, 236, 156, 13, 43, 6, 234, 247, 13, 43, 6, 70, 13, 43, 6, 227, 251, 13, + 43, 6, 227, 118, 13, 43, 6, 156, 13, 43, 6, 223, 243, 13, 43, 6, 220, + 214, 13, 43, 6, 74, 13, 43, 6, 216, 226, 13, 43, 6, 214, 167, 13, 43, 6, + 146, 13, 43, 6, 212, 122, 13, 43, 6, 207, 83, 13, 43, 6, 66, 13, 43, 6, + 203, 168, 13, 43, 6, 201, 147, 13, 43, 6, 200, 195, 13, 43, 6, 200, 123, + 13, 43, 6, 199, 157, 13, 43, 4, 62, 13, 43, 4, 250, 103, 13, 43, 4, 247, + 223, 13, 43, 4, 242, 153, 13, 43, 4, 72, 13, 43, 4, 238, 5, 13, 43, 4, + 236, 156, 13, 43, 4, 234, 247, 13, 43, 4, 70, 13, 43, 4, 227, 251, 13, + 43, 4, 227, 118, 13, 43, 4, 156, 13, 43, 4, 223, 243, 13, 43, 4, 220, + 214, 13, 43, 4, 74, 13, 43, 4, 216, 226, 13, 43, 4, 214, 167, 13, 43, 4, + 146, 13, 43, 4, 212, 122, 13, 43, 4, 207, 83, 13, 43, 4, 66, 13, 43, 4, + 203, 168, 13, 43, 4, 201, 147, 13, 43, 4, 200, 195, 13, 43, 4, 200, 123, + 13, 43, 4, 199, 157, 13, 43, 27, 6, 62, 13, 43, 27, 6, 250, 103, 13, 43, + 27, 6, 247, 223, 13, 43, 27, 6, 242, 153, 13, 43, 27, 6, 72, 13, 43, 27, + 6, 238, 5, 13, 43, 27, 6, 236, 156, 13, 43, 27, 6, 234, 247, 13, 43, 27, + 6, 70, 13, 43, 27, 6, 227, 251, 13, 43, 27, 6, 227, 118, 13, 43, 27, 6, + 156, 13, 43, 27, 6, 223, 243, 13, 43, 27, 6, 220, 214, 13, 43, 27, 6, 74, + 13, 43, 27, 6, 216, 226, 13, 43, 27, 6, 214, 167, 13, 43, 27, 6, 146, 13, + 43, 27, 6, 212, 122, 13, 43, 27, 6, 207, 83, 13, 43, 27, 6, 66, 13, 43, + 27, 6, 203, 168, 13, 43, 27, 6, 201, 147, 13, 43, 27, 6, 200, 195, 13, + 43, 27, 6, 200, 123, 13, 43, 27, 6, 199, 157, 13, 43, 27, 4, 62, 13, 43, + 27, 4, 250, 103, 13, 43, 27, 4, 247, 223, 13, 43, 27, 4, 242, 153, 13, + 43, 27, 4, 72, 13, 43, 27, 4, 238, 5, 13, 43, 27, 4, 236, 156, 13, 43, + 27, 4, 234, 247, 13, 43, 27, 4, 70, 13, 43, 27, 4, 227, 251, 13, 43, 27, + 4, 227, 118, 13, 43, 27, 4, 156, 13, 43, 27, 4, 223, 243, 13, 43, 27, 4, + 220, 214, 13, 43, 27, 4, 74, 13, 43, 27, 4, 216, 226, 13, 43, 27, 4, 214, + 167, 13, 43, 27, 4, 146, 13, 43, 27, 4, 212, 122, 13, 43, 27, 4, 207, 83, + 13, 43, 27, 4, 66, 13, 43, 27, 4, 203, 168, 13, 43, 27, 4, 201, 147, 13, + 43, 27, 4, 200, 195, 13, 43, 27, 4, 200, 123, 13, 43, 27, 4, 199, 157, + 13, 43, 39, 6, 62, 13, 43, 39, 6, 250, 103, 13, 43, 39, 6, 247, 223, 13, + 43, 39, 6, 242, 153, 13, 43, 39, 6, 72, 13, 43, 39, 6, 238, 5, 13, 43, + 39, 6, 236, 156, 13, 43, 39, 6, 234, 247, 13, 43, 39, 6, 70, 13, 43, 39, + 6, 227, 251, 13, 43, 39, 6, 227, 118, 13, 43, 39, 6, 156, 13, 43, 39, 6, + 223, 243, 13, 43, 39, 6, 220, 214, 13, 43, 39, 6, 74, 13, 43, 39, 6, 216, + 226, 13, 43, 39, 6, 214, 167, 13, 43, 39, 6, 146, 13, 43, 39, 6, 212, + 122, 13, 43, 39, 6, 207, 83, 13, 43, 39, 6, 66, 13, 43, 39, 6, 203, 168, + 13, 43, 39, 6, 201, 147, 13, 43, 39, 6, 200, 195, 13, 43, 39, 6, 200, + 123, 13, 43, 39, 6, 199, 157, 13, 43, 39, 4, 62, 13, 43, 39, 4, 250, 103, + 13, 43, 39, 4, 247, 223, 13, 43, 39, 4, 242, 153, 13, 43, 39, 4, 72, 13, + 43, 39, 4, 238, 5, 13, 43, 39, 4, 236, 156, 13, 43, 39, 4, 234, 247, 13, + 43, 39, 4, 70, 13, 43, 39, 4, 227, 251, 13, 43, 39, 4, 227, 118, 13, 43, + 39, 4, 156, 13, 43, 39, 4, 223, 243, 13, 43, 39, 4, 220, 214, 13, 43, 39, + 4, 74, 13, 43, 39, 4, 216, 226, 13, 43, 39, 4, 214, 167, 13, 43, 39, 4, + 146, 13, 43, 39, 4, 212, 122, 13, 43, 39, 4, 207, 83, 13, 43, 39, 4, 66, + 13, 43, 39, 4, 203, 168, 13, 43, 39, 4, 201, 147, 13, 43, 39, 4, 200, + 195, 13, 43, 39, 4, 200, 123, 13, 43, 39, 4, 199, 157, 13, 43, 27, 39, 6, + 62, 13, 43, 27, 39, 6, 250, 103, 13, 43, 27, 39, 6, 247, 223, 13, 43, 27, + 39, 6, 242, 153, 13, 43, 27, 39, 6, 72, 13, 43, 27, 39, 6, 238, 5, 13, + 43, 27, 39, 6, 236, 156, 13, 43, 27, 39, 6, 234, 247, 13, 43, 27, 39, 6, + 70, 13, 43, 27, 39, 6, 227, 251, 13, 43, 27, 39, 6, 227, 118, 13, 43, 27, + 39, 6, 156, 13, 43, 27, 39, 6, 223, 243, 13, 43, 27, 39, 6, 220, 214, 13, + 43, 27, 39, 6, 74, 13, 43, 27, 39, 6, 216, 226, 13, 43, 27, 39, 6, 214, + 167, 13, 43, 27, 39, 6, 146, 13, 43, 27, 39, 6, 212, 122, 13, 43, 27, 39, + 6, 207, 83, 13, 43, 27, 39, 6, 66, 13, 43, 27, 39, 6, 203, 168, 13, 43, + 27, 39, 6, 201, 147, 13, 43, 27, 39, 6, 200, 195, 13, 43, 27, 39, 6, 200, + 123, 13, 43, 27, 39, 6, 199, 157, 13, 43, 27, 39, 4, 62, 13, 43, 27, 39, + 4, 250, 103, 13, 43, 27, 39, 4, 247, 223, 13, 43, 27, 39, 4, 242, 153, + 13, 43, 27, 39, 4, 72, 13, 43, 27, 39, 4, 238, 5, 13, 43, 27, 39, 4, 236, + 156, 13, 43, 27, 39, 4, 234, 247, 13, 43, 27, 39, 4, 70, 13, 43, 27, 39, + 4, 227, 251, 13, 43, 27, 39, 4, 227, 118, 13, 43, 27, 39, 4, 156, 13, 43, + 27, 39, 4, 223, 243, 13, 43, 27, 39, 4, 220, 214, 13, 43, 27, 39, 4, 74, + 13, 43, 27, 39, 4, 216, 226, 13, 43, 27, 39, 4, 214, 167, 13, 43, 27, 39, + 4, 146, 13, 43, 27, 39, 4, 212, 122, 13, 43, 27, 39, 4, 207, 83, 13, 43, + 27, 39, 4, 66, 13, 43, 27, 39, 4, 203, 168, 13, 43, 27, 39, 4, 201, 147, + 13, 43, 27, 39, 4, 200, 195, 13, 43, 27, 39, 4, 200, 123, 13, 43, 27, 39, + 4, 199, 157, 13, 221, 93, 6, 62, 13, 221, 93, 6, 250, 103, 13, 221, 93, + 6, 247, 223, 13, 221, 93, 6, 242, 153, 13, 221, 93, 6, 72, 13, 221, 93, + 6, 238, 5, 13, 221, 93, 6, 236, 156, 13, 221, 93, 6, 234, 247, 13, 221, + 93, 6, 70, 13, 221, 93, 6, 227, 251, 13, 221, 93, 6, 227, 118, 13, 221, + 93, 6, 156, 13, 221, 93, 6, 223, 243, 13, 221, 93, 6, 220, 214, 13, 221, + 93, 6, 74, 13, 221, 93, 6, 216, 226, 13, 221, 93, 6, 214, 167, 13, 221, + 93, 6, 146, 13, 221, 93, 6, 212, 122, 13, 221, 93, 6, 207, 83, 13, 221, + 93, 6, 66, 13, 221, 93, 6, 203, 168, 13, 221, 93, 6, 201, 147, 13, 221, + 93, 6, 200, 195, 13, 221, 93, 6, 200, 123, 13, 221, 93, 6, 199, 157, 13, + 221, 93, 4, 62, 13, 221, 93, 4, 250, 103, 13, 221, 93, 4, 247, 223, 13, + 221, 93, 4, 242, 153, 13, 221, 93, 4, 72, 13, 221, 93, 4, 238, 5, 13, + 221, 93, 4, 236, 156, 13, 221, 93, 4, 234, 247, 13, 221, 93, 4, 70, 13, + 221, 93, 4, 227, 251, 13, 221, 93, 4, 227, 118, 13, 221, 93, 4, 156, 13, + 221, 93, 4, 223, 243, 13, 221, 93, 4, 220, 214, 13, 221, 93, 4, 74, 13, + 221, 93, 4, 216, 226, 13, 221, 93, 4, 214, 167, 13, 221, 93, 4, 146, 13, + 221, 93, 4, 212, 122, 13, 221, 93, 4, 207, 83, 13, 221, 93, 4, 66, 13, + 221, 93, 4, 203, 168, 13, 221, 93, 4, 201, 147, 13, 221, 93, 4, 200, 195, + 13, 221, 93, 4, 200, 123, 13, 221, 93, 4, 199, 157, 13, 39, 4, 240, 181, + 70, 13, 39, 4, 240, 181, 227, 251, 13, 27, 6, 251, 112, 13, 27, 6, 248, + 208, 13, 27, 6, 236, 60, 13, 27, 6, 241, 136, 13, 27, 6, 238, 124, 13, + 27, 6, 199, 80, 13, 27, 6, 238, 79, 13, 27, 6, 206, 88, 13, 27, 6, 228, + 41, 13, 27, 6, 227, 54, 13, 27, 6, 225, 87, 13, 27, 6, 221, 41, 13, 27, + 6, 218, 133, 13, 27, 6, 200, 169, 13, 27, 6, 217, 81, 13, 27, 6, 215, + 204, 13, 27, 6, 213, 90, 13, 27, 6, 206, 89, 99, 13, 27, 6, 209, 163, 13, + 27, 6, 206, 221, 13, 27, 6, 203, 220, 13, 27, 6, 215, 229, 13, 27, 6, + 246, 236, 13, 27, 6, 214, 235, 13, 27, 6, 217, 83, 13, 27, 220, 152, 13, + 27, 4, 251, 112, 13, 27, 4, 248, 208, 13, 27, 4, 236, 60, 13, 27, 4, 241, + 136, 13, 27, 4, 238, 124, 13, 27, 4, 199, 80, 13, 27, 4, 238, 79, 13, 27, + 4, 206, 88, 13, 27, 4, 228, 41, 13, 27, 4, 227, 54, 13, 27, 4, 225, 87, + 13, 27, 4, 221, 41, 13, 27, 4, 218, 133, 13, 27, 4, 200, 169, 13, 27, 4, + 217, 81, 13, 27, 4, 215, 204, 13, 27, 4, 213, 90, 13, 27, 4, 47, 209, + 163, 13, 27, 4, 209, 163, 13, 27, 4, 206, 221, 13, 27, 4, 203, 220, 13, + 27, 4, 215, 229, 13, 27, 4, 246, 236, 13, 27, 4, 214, 235, 13, 27, 4, + 217, 83, 13, 27, 216, 108, 241, 48, 13, 27, 238, 125, 99, 13, 27, 206, + 89, 99, 13, 27, 227, 55, 99, 13, 27, 215, 230, 99, 13, 27, 213, 91, 99, + 13, 27, 215, 205, 99, 13, 39, 6, 251, 112, 13, 39, 6, 248, 208, 13, 39, + 6, 236, 60, 13, 39, 6, 241, 136, 13, 39, 6, 238, 124, 13, 39, 6, 199, 80, + 13, 39, 6, 238, 79, 13, 39, 6, 206, 88, 13, 39, 6, 228, 41, 13, 39, 6, + 227, 54, 13, 39, 6, 225, 87, 13, 39, 6, 221, 41, 13, 39, 6, 218, 133, 13, + 39, 6, 200, 169, 13, 39, 6, 217, 81, 13, 39, 6, 215, 204, 13, 39, 6, 213, + 90, 13, 39, 6, 206, 89, 99, 13, 39, 6, 209, 163, 13, 39, 6, 206, 221, 13, + 39, 6, 203, 220, 13, 39, 6, 215, 229, 13, 39, 6, 246, 236, 13, 39, 6, + 214, 235, 13, 39, 6, 217, 83, 13, 39, 220, 152, 13, 39, 4, 251, 112, 13, + 39, 4, 248, 208, 13, 39, 4, 236, 60, 13, 39, 4, 241, 136, 13, 39, 4, 238, + 124, 13, 39, 4, 199, 80, 13, 39, 4, 238, 79, 13, 39, 4, 206, 88, 13, 39, + 4, 228, 41, 13, 39, 4, 227, 54, 13, 39, 4, 225, 87, 13, 39, 4, 221, 41, + 13, 39, 4, 218, 133, 13, 39, 4, 200, 169, 13, 39, 4, 217, 81, 13, 39, 4, + 215, 204, 13, 39, 4, 213, 90, 13, 39, 4, 47, 209, 163, 13, 39, 4, 209, + 163, 13, 39, 4, 206, 221, 13, 39, 4, 203, 220, 13, 39, 4, 215, 229, 13, + 39, 4, 246, 236, 13, 39, 4, 214, 235, 13, 39, 4, 217, 83, 13, 39, 216, + 108, 241, 48, 13, 39, 238, 125, 99, 13, 39, 206, 89, 99, 13, 39, 227, 55, + 99, 13, 39, 215, 230, 99, 13, 39, 213, 91, 99, 13, 39, 215, 205, 99, 13, + 27, 39, 6, 251, 112, 13, 27, 39, 6, 248, 208, 13, 27, 39, 6, 236, 60, 13, + 27, 39, 6, 241, 136, 13, 27, 39, 6, 238, 124, 13, 27, 39, 6, 199, 80, 13, + 27, 39, 6, 238, 79, 13, 27, 39, 6, 206, 88, 13, 27, 39, 6, 228, 41, 13, + 27, 39, 6, 227, 54, 13, 27, 39, 6, 225, 87, 13, 27, 39, 6, 221, 41, 13, + 27, 39, 6, 218, 133, 13, 27, 39, 6, 200, 169, 13, 27, 39, 6, 217, 81, 13, + 27, 39, 6, 215, 204, 13, 27, 39, 6, 213, 90, 13, 27, 39, 6, 206, 89, 99, + 13, 27, 39, 6, 209, 163, 13, 27, 39, 6, 206, 221, 13, 27, 39, 6, 203, + 220, 13, 27, 39, 6, 215, 229, 13, 27, 39, 6, 246, 236, 13, 27, 39, 6, + 214, 235, 13, 27, 39, 6, 217, 83, 13, 27, 39, 220, 152, 13, 27, 39, 4, + 251, 112, 13, 27, 39, 4, 248, 208, 13, 27, 39, 4, 236, 60, 13, 27, 39, 4, + 241, 136, 13, 27, 39, 4, 238, 124, 13, 27, 39, 4, 199, 80, 13, 27, 39, 4, + 238, 79, 13, 27, 39, 4, 206, 88, 13, 27, 39, 4, 228, 41, 13, 27, 39, 4, + 227, 54, 13, 27, 39, 4, 225, 87, 13, 27, 39, 4, 221, 41, 13, 27, 39, 4, + 218, 133, 13, 27, 39, 4, 200, 169, 13, 27, 39, 4, 217, 81, 13, 27, 39, 4, + 215, 204, 13, 27, 39, 4, 213, 90, 13, 27, 39, 4, 47, 209, 163, 13, 27, + 39, 4, 209, 163, 13, 27, 39, 4, 206, 221, 13, 27, 39, 4, 203, 220, 13, + 27, 39, 4, 215, 229, 13, 27, 39, 4, 246, 236, 13, 27, 39, 4, 214, 235, + 13, 27, 39, 4, 217, 83, 13, 27, 39, 216, 108, 241, 48, 13, 27, 39, 238, + 125, 99, 13, 27, 39, 206, 89, 99, 13, 27, 39, 227, 55, 99, 13, 27, 39, + 215, 230, 99, 13, 27, 39, 213, 91, 99, 13, 27, 39, 215, 205, 99, 13, 43, + 27, 6, 251, 112, 13, 43, 27, 6, 248, 208, 13, 43, 27, 6, 236, 60, 13, 43, + 27, 6, 241, 136, 13, 43, 27, 6, 238, 124, 13, 43, 27, 6, 199, 80, 13, 43, + 27, 6, 238, 79, 13, 43, 27, 6, 206, 88, 13, 43, 27, 6, 228, 41, 13, 43, + 27, 6, 227, 54, 13, 43, 27, 6, 225, 87, 13, 43, 27, 6, 221, 41, 13, 43, + 27, 6, 218, 133, 13, 43, 27, 6, 200, 169, 13, 43, 27, 6, 217, 81, 13, 43, + 27, 6, 215, 204, 13, 43, 27, 6, 213, 90, 13, 43, 27, 6, 206, 89, 99, 13, + 43, 27, 6, 209, 163, 13, 43, 27, 6, 206, 221, 13, 43, 27, 6, 203, 220, + 13, 43, 27, 6, 215, 229, 13, 43, 27, 6, 246, 236, 13, 43, 27, 6, 214, + 235, 13, 43, 27, 6, 217, 83, 13, 43, 27, 220, 152, 13, 43, 27, 4, 251, + 112, 13, 43, 27, 4, 248, 208, 13, 43, 27, 4, 236, 60, 13, 43, 27, 4, 241, + 136, 13, 43, 27, 4, 238, 124, 13, 43, 27, 4, 199, 80, 13, 43, 27, 4, 238, + 79, 13, 43, 27, 4, 206, 88, 13, 43, 27, 4, 228, 41, 13, 43, 27, 4, 227, + 54, 13, 43, 27, 4, 225, 87, 13, 43, 27, 4, 221, 41, 13, 43, 27, 4, 218, + 133, 13, 43, 27, 4, 200, 169, 13, 43, 27, 4, 217, 81, 13, 43, 27, 4, 215, + 204, 13, 43, 27, 4, 213, 90, 13, 43, 27, 4, 47, 209, 163, 13, 43, 27, 4, + 209, 163, 13, 43, 27, 4, 206, 221, 13, 43, 27, 4, 203, 220, 13, 43, 27, + 4, 215, 229, 13, 43, 27, 4, 246, 236, 13, 43, 27, 4, 214, 235, 13, 43, + 27, 4, 217, 83, 13, 43, 27, 216, 108, 241, 48, 13, 43, 27, 238, 125, 99, + 13, 43, 27, 206, 89, 99, 13, 43, 27, 227, 55, 99, 13, 43, 27, 215, 230, + 99, 13, 43, 27, 213, 91, 99, 13, 43, 27, 215, 205, 99, 13, 43, 27, 39, 6, + 251, 112, 13, 43, 27, 39, 6, 248, 208, 13, 43, 27, 39, 6, 236, 60, 13, + 43, 27, 39, 6, 241, 136, 13, 43, 27, 39, 6, 238, 124, 13, 43, 27, 39, 6, + 199, 80, 13, 43, 27, 39, 6, 238, 79, 13, 43, 27, 39, 6, 206, 88, 13, 43, + 27, 39, 6, 228, 41, 13, 43, 27, 39, 6, 227, 54, 13, 43, 27, 39, 6, 225, + 87, 13, 43, 27, 39, 6, 221, 41, 13, 43, 27, 39, 6, 218, 133, 13, 43, 27, + 39, 6, 200, 169, 13, 43, 27, 39, 6, 217, 81, 13, 43, 27, 39, 6, 215, 204, + 13, 43, 27, 39, 6, 213, 90, 13, 43, 27, 39, 6, 206, 89, 99, 13, 43, 27, + 39, 6, 209, 163, 13, 43, 27, 39, 6, 206, 221, 13, 43, 27, 39, 6, 203, + 220, 13, 43, 27, 39, 6, 215, 229, 13, 43, 27, 39, 6, 246, 236, 13, 43, + 27, 39, 6, 214, 235, 13, 43, 27, 39, 6, 217, 83, 13, 43, 27, 39, 220, + 152, 13, 43, 27, 39, 4, 251, 112, 13, 43, 27, 39, 4, 248, 208, 13, 43, + 27, 39, 4, 236, 60, 13, 43, 27, 39, 4, 241, 136, 13, 43, 27, 39, 4, 238, + 124, 13, 43, 27, 39, 4, 199, 80, 13, 43, 27, 39, 4, 238, 79, 13, 43, 27, + 39, 4, 206, 88, 13, 43, 27, 39, 4, 228, 41, 13, 43, 27, 39, 4, 227, 54, + 13, 43, 27, 39, 4, 225, 87, 13, 43, 27, 39, 4, 221, 41, 13, 43, 27, 39, + 4, 218, 133, 13, 43, 27, 39, 4, 200, 169, 13, 43, 27, 39, 4, 217, 81, 13, + 43, 27, 39, 4, 215, 204, 13, 43, 27, 39, 4, 213, 90, 13, 43, 27, 39, 4, + 47, 209, 163, 13, 43, 27, 39, 4, 209, 163, 13, 43, 27, 39, 4, 206, 221, + 13, 43, 27, 39, 4, 203, 220, 13, 43, 27, 39, 4, 215, 229, 13, 43, 27, 39, + 4, 246, 236, 13, 43, 27, 39, 4, 214, 235, 13, 43, 27, 39, 4, 217, 83, 13, + 43, 27, 39, 216, 108, 241, 48, 13, 43, 27, 39, 238, 125, 99, 13, 43, 27, + 39, 206, 89, 99, 13, 43, 27, 39, 227, 55, 99, 13, 43, 27, 39, 215, 230, + 99, 13, 43, 27, 39, 213, 91, 99, 13, 43, 27, 39, 215, 205, 99, 13, 27, 6, + 241, 42, 13, 27, 4, 241, 42, 13, 27, 17, 199, 81, 13, 27, 17, 102, 13, + 27, 17, 105, 13, 27, 17, 147, 13, 27, 17, 149, 13, 27, 17, 164, 13, 27, + 17, 187, 13, 27, 17, 210, 135, 13, 27, 17, 192, 13, 27, 17, 219, 113, 13, + 175, 17, 199, 81, 13, 175, 17, 102, 13, 175, 17, 105, 13, 175, 17, 147, + 13, 175, 17, 149, 13, 175, 17, 164, 13, 175, 17, 187, 13, 175, 17, 210, + 135, 13, 175, 17, 192, 13, 175, 17, 219, 113, 13, 43, 17, 199, 81, 13, + 43, 17, 102, 13, 43, 17, 105, 13, 43, 17, 147, 13, 43, 17, 149, 13, 43, + 17, 164, 13, 43, 17, 187, 13, 43, 17, 210, 135, 13, 43, 17, 192, 13, 43, + 17, 219, 113, 13, 43, 27, 17, 199, 81, 13, 43, 27, 17, 102, 13, 43, 27, + 17, 105, 13, 43, 27, 17, 147, 13, 43, 27, 17, 149, 13, 43, 27, 17, 164, + 13, 43, 27, 17, 187, 13, 43, 27, 17, 210, 135, 13, 43, 27, 17, 192, 13, + 43, 27, 17, 219, 113, 13, 221, 93, 17, 199, 81, 13, 221, 93, 17, 102, 13, + 221, 93, 17, 105, 13, 221, 93, 17, 147, 13, 221, 93, 17, 149, 13, 221, + 93, 17, 164, 13, 221, 93, 17, 187, 13, 221, 93, 17, 210, 135, 13, 221, + 93, 17, 192, 13, 221, 93, 17, 219, 113, 23, 131, 228, 103, 23, 234, 196, + 228, 103, 23, 234, 192, 228, 103, 23, 234, 181, 228, 103, 23, 234, 185, + 228, 103, 23, 234, 198, 228, 103, 23, 131, 124, 248, 219, 23, 234, 196, + 124, 248, 219, 23, 131, 153, 203, 253, 124, 248, 219, 23, 131, 124, 213, + 220, 226, 91, 23, 131, 124, 242, 200, 23, 131, 124, 234, 50, 23, 131, + 124, 234, 51, 224, 59, 23, 234, 196, 124, 234, 52, 23, 131, 124, 221, + 204, 23, 234, 196, 124, 221, 204, 23, 131, 124, 101, 248, 219, 23, 131, + 124, 101, 213, 220, 226, 90, 23, 131, 124, 101, 234, 50, 23, 131, 124, + 115, 101, 234, 50, 23, 131, 124, 234, 51, 101, 203, 228, 23, 131, 124, + 101, 243, 57, 23, 131, 124, 101, 243, 58, 124, 248, 219, 23, 131, 124, + 101, 243, 58, 101, 248, 219, 23, 131, 124, 101, 243, 58, 242, 200, 23, + 131, 124, 101, 243, 58, 234, 50, 23, 131, 124, 101, 242, 231, 23, 234, + 196, 124, 101, 242, 231, 23, 131, 101, 248, 220, 119, 228, 103, 23, 131, + 124, 248, 220, 119, 221, 204, 23, 131, 124, 101, 206, 34, 23, 234, 196, + 124, 101, 206, 34, 23, 131, 124, 101, 208, 68, 153, 248, 219, 23, 131, + 124, 101, 248, 220, 153, 208, 67, 23, 131, 124, 101, 153, 248, 219, 23, + 131, 124, 101, 234, 51, 208, 202, 153, 209, 174, 23, 131, 124, 115, 101, + 234, 51, 153, 209, 174, 23, 131, 124, 115, 101, 234, 51, 153, 243, 57, + 23, 131, 124, 234, 51, 101, 115, 153, 209, 174, 23, 131, 124, 101, 115, + 208, 202, 153, 236, 233, 23, 131, 124, 101, 153, 242, 200, 23, 131, 124, + 101, 153, 246, 154, 23, 131, 124, 101, 153, 233, 185, 23, 131, 124, 101, + 153, 234, 50, 23, 131, 153, 248, 206, 124, 101, 208, 67, 23, 131, 124, + 101, 243, 58, 153, 209, 174, 23, 131, 124, 101, 243, 58, 153, 209, 175, + 243, 57, 23, 131, 124, 101, 243, 58, 153, 209, 175, 248, 219, 23, 131, + 101, 153, 233, 186, 124, 203, 228, 23, 131, 124, 153, 233, 186, 101, 203, + 228, 23, 131, 124, 101, 243, 58, 234, 51, 153, 209, 174, 23, 131, 124, + 101, 242, 232, 153, 209, 174, 23, 131, 124, 101, 243, 58, 153, 236, 233, + 23, 131, 124, 101, 243, 58, 242, 201, 153, 236, 233, 23, 131, 101, 153, + 242, 201, 124, 203, 228, 23, 131, 124, 153, 242, 201, 101, 203, 228, 23, + 131, 101, 153, 44, 124, 203, 228, 23, 131, 101, 153, 44, 124, 234, 50, + 23, 131, 124, 153, 251, 69, 216, 255, 101, 203, 228, 23, 131, 124, 153, + 251, 69, 228, 118, 101, 203, 228, 23, 131, 124, 153, 44, 101, 203, 228, + 23, 131, 124, 101, 153, 243, 58, 234, 50, 23, 131, 124, 101, 153, 251, + 69, 216, 254, 23, 131, 124, 101, 153, 251, 68, 23, 131, 101, 153, 251, + 69, 216, 255, 124, 203, 228, 23, 131, 101, 153, 251, 69, 216, 255, 124, + 242, 231, 23, 131, 101, 153, 251, 69, 124, 203, 228, 23, 131, 124, 153, + 233, 186, 101, 234, 50, 23, 234, 187, 236, 229, 237, 81, 23, 234, 187, + 236, 229, 237, 82, 248, 219, 23, 234, 187, 236, 229, 237, 82, 234, 50, + 23, 234, 187, 236, 229, 237, 82, 243, 57, 23, 234, 187, 236, 229, 237, + 82, 243, 58, 208, 209, 23, 234, 194, 236, 229, 237, 82, 243, 57, 23, 131, + 236, 229, 237, 82, 243, 58, 248, 219, 23, 234, 185, 236, 229, 237, 82, + 243, 57, 23, 234, 187, 237, 61, 237, 82, 208, 201, 23, 234, 187, 234, + 118, 237, 61, 237, 82, 208, 201, 23, 234, 187, 237, 61, 237, 82, 208, + 202, 236, 229, 248, 219, 23, 234, 187, 234, 118, 237, 61, 237, 82, 208, + 202, 236, 229, 248, 219, 23, 234, 187, 237, 61, 237, 82, 208, 202, 248, + 219, 23, 234, 187, 234, 118, 237, 61, 237, 82, 208, 202, 248, 219, 23, + 234, 187, 237, 61, 237, 82, 208, 202, 153, 236, 233, 23, 234, 192, 237, + 61, 237, 82, 208, 201, 23, 234, 192, 237, 61, 237, 82, 208, 202, 217, 53, + 23, 234, 185, 237, 61, 237, 82, 208, 202, 217, 53, 23, 234, 181, 237, 61, + 237, 82, 208, 201, 23, 234, 187, 237, 61, 237, 82, 208, 202, 234, 50, 23, + 234, 187, 237, 61, 237, 82, 208, 202, 234, 51, 153, 209, 174, 23, 234, + 187, 237, 61, 237, 82, 208, 202, 234, 51, 218, 242, 206, 34, 23, 234, + 186, 23, 234, 187, 248, 206, 216, 177, 237, 181, 23, 234, 187, 234, 117, + 23, 234, 187, 153, 209, 174, 23, 234, 187, 234, 118, 153, 209, 174, 23, + 234, 187, 153, 248, 219, 23, 234, 187, 153, 236, 233, 23, 234, 187, 208, + 210, 124, 153, 209, 174, 23, 234, 187, 208, 210, 247, 55, 23, 234, 187, + 208, 210, 247, 56, 153, 209, 174, 23, 234, 187, 208, 210, 247, 56, 153, + 209, 175, 248, 219, 23, 234, 187, 208, 210, 224, 147, 23, 234, 193, 23, + 234, 194, 153, 209, 174, 23, 234, 194, 218, 242, 206, 34, 23, 234, 194, + 153, 236, 233, 23, 234, 183, 242, 197, 23, 234, 182, 23, 234, 192, 217, + 53, 23, 234, 191, 23, 234, 192, 176, 153, 209, 174, 23, 234, 192, 153, + 209, 174, 23, 234, 192, 176, 218, 242, 206, 34, 23, 234, 192, 218, 242, + 206, 34, 23, 234, 192, 176, 153, 236, 233, 23, 234, 192, 153, 236, 233, + 23, 234, 190, 217, 53, 23, 234, 189, 23, 234, 195, 23, 234, 180, 23, 234, + 181, 153, 209, 174, 23, 234, 181, 218, 242, 206, 34, 23, 234, 181, 153, + 236, 233, 23, 234, 185, 217, 53, 23, 234, 185, 176, 153, 236, 233, 23, + 234, 184, 23, 234, 185, 209, 53, 23, 234, 185, 176, 153, 209, 174, 23, + 234, 185, 153, 209, 174, 23, 234, 185, 176, 218, 242, 206, 34, 23, 234, + 185, 218, 242, 206, 34, 23, 234, 185, 153, 209, 175, 205, 140, 228, 103, + 23, 234, 185, 153, 248, 206, 101, 213, 26, 23, 234, 197, 23, 131, 124, + 101, 213, 26, 23, 234, 196, 124, 101, 213, 26, 23, 234, 185, 124, 101, + 213, 26, 23, 234, 198, 124, 101, 213, 26, 23, 234, 185, 224, 147, 23, + 131, 124, 101, 213, 27, 248, 219, 23, 131, 124, 101, 213, 27, 243, 57, + 23, 234, 185, 124, 101, 213, 27, 243, 57, 23, 131, 224, 148, 239, 167, + 23, 131, 224, 148, 127, 213, 22, 208, 67, 23, 131, 224, 148, 127, 213, + 22, 242, 187, 23, 131, 224, 148, 127, 217, 7, 246, 154, 23, 131, 224, + 148, 203, 228, 23, 131, 153, 203, 253, 224, 148, 203, 228, 23, 234, 196, + 224, 148, 203, 228, 23, 234, 181, 224, 148, 203, 228, 23, 234, 198, 224, + 148, 203, 228, 23, 131, 224, 148, 213, 220, 226, 91, 23, 131, 224, 148, + 248, 219, 23, 131, 224, 148, 205, 141, 206, 34, 23, 131, 224, 148, 206, + 34, 23, 234, 185, 224, 148, 206, 34, 23, 131, 224, 148, 124, 206, 34, 23, + 234, 185, 224, 148, 124, 206, 34, 23, 234, 198, 224, 148, 124, 153, 124, + 153, 216, 254, 23, 234, 198, 224, 148, 124, 153, 124, 206, 34, 23, 131, + 224, 148, 228, 103, 23, 234, 196, 224, 148, 228, 103, 23, 234, 185, 224, + 148, 228, 103, 23, 234, 198, 224, 148, 228, 103, 23, 131, 124, 101, 224, + 147, 23, 234, 196, 124, 101, 224, 147, 23, 234, 185, 124, 101, 224, 147, + 23, 234, 185, 213, 26, 23, 234, 198, 124, 101, 224, 147, 23, 131, 124, + 101, 242, 235, 224, 147, 23, 234, 196, 124, 101, 242, 235, 224, 147, 23, + 131, 213, 27, 239, 167, 23, 234, 185, 213, 27, 127, 124, 153, 233, 187, + 221, 204, 23, 234, 198, 213, 27, 127, 101, 153, 124, 242, 234, 23, 131, + 213, 27, 203, 228, 23, 131, 213, 27, 213, 220, 226, 91, 23, 131, 213, 27, + 224, 147, 23, 234, 196, 213, 27, 224, 147, 23, 234, 181, 213, 27, 224, + 147, 23, 234, 198, 213, 27, 224, 147, 23, 131, 213, 27, 221, 204, 23, + 131, 213, 27, 101, 243, 57, 23, 131, 213, 27, 101, 213, 220, 226, 90, 23, + 131, 213, 27, 228, 103, 23, 131, 213, 27, 206, 34, 23, 234, 183, 213, 27, + 206, 34, 23, 131, 124, 213, 27, 224, 147, 23, 234, 196, 124, 213, 27, + 224, 147, 23, 234, 190, 124, 213, 27, 224, 148, 217, 78, 23, 234, 183, + 124, 213, 27, 224, 148, 216, 254, 23, 234, 183, 124, 213, 27, 224, 148, + 228, 117, 23, 234, 183, 124, 213, 27, 224, 148, 203, 252, 23, 234, 192, + 124, 213, 27, 224, 147, 23, 234, 185, 124, 213, 27, 224, 147, 23, 234, + 198, 124, 213, 27, 224, 148, 216, 254, 23, 234, 198, 124, 213, 27, 224, + 147, 23, 131, 101, 239, 167, 23, 234, 185, 221, 204, 23, 131, 101, 203, + 228, 23, 234, 196, 101, 203, 228, 23, 131, 101, 213, 220, 226, 91, 23, + 131, 101, 115, 153, 209, 174, 23, 234, 183, 101, 206, 34, 23, 131, 101, + 153, 224, 147, 23, 131, 101, 224, 147, 23, 131, 101, 213, 27, 224, 147, + 23, 234, 196, 101, 213, 27, 224, 147, 23, 234, 190, 101, 213, 27, 224, + 148, 217, 78, 23, 234, 192, 101, 213, 27, 224, 147, 23, 234, 185, 101, + 213, 27, 224, 147, 23, 234, 198, 101, 213, 27, 224, 148, 216, 254, 23, + 234, 198, 101, 213, 27, 224, 148, 228, 117, 23, 234, 198, 101, 213, 27, + 224, 147, 23, 234, 196, 101, 213, 27, 224, 148, 248, 219, 23, 234, 194, + 101, 213, 27, 224, 148, 243, 57, 23, 234, 194, 101, 213, 27, 224, 148, + 243, 58, 209, 174, 23, 234, 183, 101, 213, 27, 224, 148, 243, 58, 216, + 254, 23, 234, 183, 101, 213, 27, 224, 148, 243, 58, 228, 117, 23, 234, + 183, 101, 213, 27, 224, 148, 243, 57, 23, 234, 185, 124, 234, 50, 23, + 131, 124, 153, 209, 174, 23, 234, 185, 124, 153, 209, 174, 23, 131, 124, + 153, 209, 175, 153, 241, 70, 23, 131, 124, 153, 209, 175, 153, 243, 57, + 23, 131, 124, 153, 209, 175, 153, 248, 219, 23, 131, 124, 153, 209, 175, + 124, 248, 219, 23, 131, 124, 153, 209, 175, 248, 96, 248, 219, 23, 131, + 124, 153, 209, 175, 124, 234, 52, 23, 131, 124, 153, 236, 234, 124, 208, + 67, 23, 131, 124, 153, 236, 234, 124, 248, 219, 23, 131, 124, 153, 117, + 23, 131, 124, 153, 242, 197, 23, 131, 124, 153, 242, 190, 153, 228, 73, + 23, 234, 194, 124, 153, 242, 190, 153, 228, 73, 23, 131, 124, 153, 242, + 190, 153, 203, 252, 23, 131, 124, 153, 246, 155, 23, 234, 192, 124, 206, + 34, 23, 234, 192, 124, 153, 217, 53, 23, 234, 185, 124, 153, 217, 53, 23, + 234, 185, 124, 153, 225, 70, 23, 234, 185, 124, 206, 34, 23, 234, 185, + 124, 153, 209, 53, 23, 234, 198, 124, 153, 216, 254, 23, 234, 198, 124, + 153, 228, 117, 23, 234, 198, 124, 206, 34, 23, 131, 206, 34, 23, 131, + 153, 234, 117, 23, 131, 153, 209, 175, 241, 70, 23, 131, 153, 209, 175, + 243, 57, 23, 131, 153, 209, 175, 248, 219, 23, 131, 153, 236, 233, 23, + 131, 153, 248, 206, 124, 221, 204, 23, 131, 153, 248, 206, 101, 213, 26, + 23, 131, 153, 248, 206, 213, 27, 224, 147, 23, 131, 153, 203, 253, 120, + 237, 81, 23, 131, 153, 119, 120, 237, 81, 23, 131, 153, 203, 253, 126, + 237, 81, 23, 131, 153, 203, 253, 236, 229, 237, 81, 23, 131, 153, 119, + 236, 229, 213, 220, 226, 90, 23, 234, 188, 23, 131, 234, 117, 23, 205, + 142, 209, 138, 23, 205, 142, 221, 20, 23, 205, 142, 248, 205, 23, 235, + 78, 209, 138, 23, 235, 78, 221, 20, 23, 235, 78, 248, 205, 23, 208, 52, + 209, 138, 23, 208, 52, 221, 20, 23, 208, 52, 248, 205, 23, 248, 44, 209, + 138, 23, 248, 44, 221, 20, 23, 248, 44, 248, 205, 23, 212, 173, 209, 138, + 23, 212, 173, 221, 20, 23, 212, 173, 248, 205, 23, 207, 203, 207, 116, + 23, 207, 203, 248, 205, 23, 208, 189, 225, 71, 209, 138, 23, 208, 189, 4, + 209, 138, 23, 208, 189, 225, 71, 221, 20, 23, 208, 189, 4, 221, 20, 23, + 208, 189, 210, 150, 23, 237, 35, 225, 71, 209, 138, 23, 237, 35, 4, 209, + 138, 23, 237, 35, 225, 71, 221, 20, 23, 237, 35, 4, 221, 20, 23, 237, 35, + 210, 150, 23, 208, 189, 237, 35, 251, 106, 23, 221, 51, 115, 127, 225, + 70, 23, 221, 51, 115, 127, 209, 53, 23, 221, 51, 115, 210, 150, 23, 221, + 51, 127, 210, 150, 23, 221, 51, 115, 127, 251, 107, 225, 70, 23, 221, 51, + 115, 127, 251, 107, 209, 53, 23, 221, 51, 209, 175, 205, 186, 209, 175, + 211, 216, 23, 221, 50, 237, 87, 243, 47, 23, 221, 52, 237, 87, 243, 47, + 23, 221, 50, 209, 139, 208, 68, 209, 53, 23, 221, 50, 209, 139, 208, 68, + 222, 65, 23, 221, 50, 209, 139, 208, 68, 225, 70, 23, 221, 50, 209, 139, + 208, 68, 225, 68, 23, 221, 50, 209, 139, 200, 220, 237, 38, 23, 221, 50, + 53, 208, 67, 23, 221, 50, 53, 200, 220, 237, 38, 23, 221, 50, 53, 251, + 106, 23, 221, 50, 53, 251, 107, 200, 220, 237, 38, 23, 221, 50, 242, 234, + 23, 221, 50, 205, 83, 208, 68, 221, 54, 23, 221, 50, 205, 83, 200, 220, + 237, 38, 23, 221, 50, 205, 83, 251, 106, 23, 221, 50, 205, 83, 251, 107, + 200, 220, 237, 38, 23, 221, 50, 248, 223, 209, 53, 23, 221, 50, 248, 223, + 222, 65, 23, 221, 50, 248, 223, 225, 70, 23, 221, 50, 243, 16, 209, 53, + 23, 221, 50, 243, 16, 222, 65, 23, 221, 50, 243, 16, 225, 70, 23, 221, + 50, 243, 16, 212, 226, 23, 221, 50, 247, 7, 209, 53, 23, 221, 50, 247, 7, + 222, 65, 23, 221, 50, 247, 7, 225, 70, 23, 221, 50, 100, 209, 53, 23, + 221, 50, 100, 222, 65, 23, 221, 50, 100, 225, 70, 23, 221, 50, 199, 27, + 209, 53, 23, 221, 50, 199, 27, 222, 65, 23, 221, 50, 199, 27, 225, 70, + 23, 221, 50, 216, 69, 209, 53, 23, 221, 50, 216, 69, 222, 65, 23, 221, + 50, 216, 69, 225, 70, 23, 205, 112, 212, 224, 209, 138, 23, 205, 112, + 212, 224, 239, 175, 23, 205, 112, 212, 224, 251, 106, 23, 205, 112, 212, + 225, 209, 138, 23, 205, 112, 212, 225, 239, 175, 23, 205, 112, 212, 225, + 251, 106, 23, 205, 112, 210, 95, 23, 205, 112, 250, 215, 208, 218, 209, + 138, 23, 205, 112, 250, 215, 208, 218, 239, 175, 23, 205, 112, 250, 215, + 208, 218, 205, 82, 23, 221, 53, 250, 116, 209, 53, 23, 221, 53, 250, 116, + 222, 65, 23, 221, 53, 250, 116, 225, 70, 23, 221, 53, 250, 116, 225, 68, + 23, 221, 53, 205, 136, 209, 53, 23, 221, 53, 205, 136, 222, 65, 23, 221, + 53, 205, 136, 225, 70, 23, 221, 53, 205, 136, 225, 68, 23, 221, 53, 248, + 206, 250, 116, 209, 53, 23, 221, 53, 248, 206, 250, 116, 222, 65, 23, + 221, 53, 248, 206, 250, 116, 225, 70, 23, 221, 53, 248, 206, 250, 116, + 225, 68, 23, 221, 53, 248, 206, 205, 136, 209, 53, 23, 221, 53, 248, 206, + 205, 136, 222, 65, 23, 221, 53, 248, 206, 205, 136, 225, 70, 23, 221, 53, + 248, 206, 205, 136, 225, 68, 23, 221, 52, 209, 139, 208, 68, 209, 53, 23, + 221, 52, 209, 139, 208, 68, 222, 65, 23, 221, 52, 209, 139, 208, 68, 225, + 70, 23, 221, 52, 209, 139, 208, 68, 225, 68, 23, 221, 52, 209, 139, 200, + 220, 237, 38, 23, 221, 52, 53, 208, 67, 23, 221, 52, 53, 200, 220, 237, + 38, 23, 221, 52, 53, 251, 106, 23, 221, 52, 53, 251, 107, 200, 220, 237, + 38, 23, 221, 52, 242, 234, 23, 221, 52, 205, 83, 208, 68, 221, 54, 23, + 221, 52, 205, 83, 200, 220, 237, 38, 23, 221, 52, 205, 83, 251, 107, 221, + 54, 23, 221, 52, 205, 83, 251, 107, 200, 220, 237, 38, 23, 221, 52, 248, + 222, 23, 221, 52, 243, 16, 209, 53, 23, 221, 52, 243, 16, 222, 65, 23, + 221, 52, 243, 16, 225, 70, 23, 221, 52, 247, 6, 23, 221, 52, 100, 209, + 53, 23, 221, 52, 100, 222, 65, 23, 221, 52, 100, 225, 70, 23, 221, 52, + 199, 27, 209, 53, 23, 221, 52, 199, 27, 222, 65, 23, 221, 52, 199, 27, + 225, 70, 23, 221, 52, 216, 69, 209, 53, 23, 221, 52, 216, 69, 222, 65, + 23, 221, 52, 216, 69, 225, 70, 23, 205, 113, 212, 225, 209, 138, 23, 205, + 113, 212, 225, 239, 175, 23, 205, 113, 212, 225, 251, 106, 23, 205, 113, + 212, 224, 209, 138, 23, 205, 113, 212, 224, 239, 175, 23, 205, 113, 212, + 224, 251, 106, 23, 205, 113, 210, 95, 23, 221, 50, 242, 190, 214, 88, + 209, 53, 23, 221, 50, 242, 190, 214, 88, 222, 65, 23, 221, 50, 242, 190, + 214, 88, 225, 70, 23, 221, 50, 242, 190, 214, 88, 225, 68, 23, 221, 50, + 242, 190, 234, 212, 209, 53, 23, 221, 50, 242, 190, 234, 212, 222, 65, + 23, 221, 50, 242, 190, 234, 212, 225, 70, 23, 221, 50, 242, 190, 234, + 212, 225, 68, 23, 221, 50, 242, 190, 206, 40, 246, 156, 209, 53, 23, 221, + 50, 242, 190, 206, 40, 246, 156, 222, 65, 23, 221, 50, 233, 85, 209, 53, + 23, 221, 50, 233, 85, 222, 65, 23, 221, 50, 233, 85, 225, 70, 23, 221, + 50, 224, 75, 209, 53, 23, 221, 50, 224, 75, 222, 65, 23, 221, 50, 224, + 75, 225, 70, 23, 221, 50, 224, 75, 4, 239, 175, 23, 221, 50, 201, 78, + 242, 190, 53, 209, 53, 23, 221, 50, 201, 78, 242, 190, 53, 222, 65, 23, + 221, 50, 201, 78, 242, 190, 53, 225, 70, 23, 221, 50, 201, 78, 242, 190, + 205, 83, 209, 53, 23, 221, 50, 201, 78, 242, 190, 205, 83, 222, 65, 23, + 221, 50, 201, 78, 242, 190, 205, 83, 225, 70, 23, 221, 50, 242, 190, 206, + 98, 208, 67, 23, 221, 50, 242, 188, 242, 235, 209, 53, 23, 221, 50, 242, + 188, 242, 235, 222, 65, 23, 212, 224, 209, 138, 23, 212, 224, 239, 175, + 23, 212, 224, 251, 108, 23, 221, 50, 210, 95, 23, 221, 50, 242, 190, 234, + 44, 236, 200, 201, 102, 23, 221, 50, 233, 85, 234, 44, 236, 200, 201, + 102, 23, 221, 50, 224, 75, 234, 44, 236, 200, 201, 102, 23, 221, 50, 201, + 78, 234, 44, 236, 200, 201, 102, 23, 212, 224, 209, 139, 234, 44, 236, + 200, 201, 102, 23, 212, 224, 53, 234, 44, 236, 200, 201, 102, 23, 212, + 224, 251, 107, 234, 44, 236, 200, 201, 102, 23, 221, 50, 242, 190, 234, + 44, 246, 243, 23, 221, 50, 233, 85, 234, 44, 246, 243, 23, 221, 50, 224, + 75, 234, 44, 246, 243, 23, 221, 50, 201, 78, 234, 44, 246, 243, 23, 212, + 224, 209, 139, 234, 44, 246, 243, 23, 212, 224, 53, 234, 44, 246, 243, + 23, 212, 224, 251, 107, 234, 44, 246, 243, 23, 221, 50, 201, 78, 241, 71, + 216, 91, 209, 53, 23, 221, 50, 201, 78, 241, 71, 216, 91, 222, 65, 23, + 221, 50, 201, 78, 241, 71, 216, 91, 225, 70, 23, 221, 52, 242, 190, 234, + 44, 247, 65, 209, 53, 23, 221, 52, 242, 190, 234, 44, 247, 65, 225, 70, + 23, 221, 52, 233, 85, 234, 44, 247, 65, 4, 239, 175, 23, 221, 52, 233, + 85, 234, 44, 247, 65, 225, 71, 239, 175, 23, 221, 52, 233, 85, 234, 44, + 247, 65, 4, 205, 82, 23, 221, 52, 233, 85, 234, 44, 247, 65, 225, 71, + 205, 82, 23, 221, 52, 224, 75, 234, 44, 247, 65, 4, 209, 138, 23, 221, + 52, 224, 75, 234, 44, 247, 65, 225, 71, 209, 138, 23, 221, 52, 224, 75, + 234, 44, 247, 65, 4, 239, 175, 23, 221, 52, 224, 75, 234, 44, 247, 65, + 225, 71, 239, 175, 23, 221, 52, 201, 78, 234, 44, 247, 65, 209, 53, 23, + 221, 52, 201, 78, 234, 44, 247, 65, 225, 70, 23, 212, 225, 209, 139, 234, + 44, 247, 64, 23, 212, 225, 53, 234, 44, 247, 64, 23, 212, 225, 251, 107, + 234, 44, 247, 64, 23, 221, 52, 242, 190, 234, 44, 237, 32, 209, 53, 23, + 221, 52, 242, 190, 234, 44, 237, 32, 225, 70, 23, 221, 52, 233, 85, 234, + 44, 237, 32, 4, 239, 175, 23, 221, 52, 233, 85, 234, 44, 237, 32, 225, + 71, 239, 175, 23, 221, 52, 233, 85, 234, 44, 237, 32, 205, 83, 4, 205, + 82, 23, 221, 52, 233, 85, 234, 44, 237, 32, 205, 83, 225, 71, 205, 82, + 23, 221, 52, 224, 75, 234, 44, 237, 32, 4, 209, 138, 23, 221, 52, 224, + 75, 234, 44, 237, 32, 225, 71, 209, 138, 23, 221, 52, 224, 75, 234, 44, + 237, 32, 4, 239, 175, 23, 221, 52, 224, 75, 234, 44, 237, 32, 225, 71, + 239, 175, 23, 221, 52, 201, 78, 234, 44, 237, 32, 209, 53, 23, 221, 52, + 201, 78, 234, 44, 237, 32, 225, 70, 23, 212, 225, 209, 139, 234, 44, 237, + 31, 23, 212, 225, 53, 234, 44, 237, 31, 23, 212, 225, 251, 107, 234, 44, + 237, 31, 23, 221, 52, 242, 190, 209, 53, 23, 221, 52, 242, 190, 222, 65, + 23, 221, 52, 242, 190, 225, 70, 23, 221, 52, 242, 190, 225, 68, 23, 221, + 52, 242, 190, 246, 74, 23, 221, 52, 233, 85, 209, 53, 23, 221, 52, 224, + 75, 209, 53, 23, 221, 52, 201, 78, 209, 41, 23, 221, 52, 201, 78, 209, + 53, 23, 221, 52, 201, 78, 225, 70, 23, 212, 225, 209, 138, 23, 212, 225, + 239, 175, 23, 212, 225, 251, 106, 23, 221, 52, 210, 96, 216, 120, 23, + 221, 50, 250, 215, 246, 156, 4, 209, 138, 23, 221, 50, 250, 215, 246, + 156, 222, 66, 209, 138, 23, 221, 50, 250, 215, 246, 156, 4, 239, 175, 23, + 221, 50, 250, 215, 246, 156, 222, 66, 239, 175, 23, 221, 52, 250, 215, + 246, 156, 234, 44, 201, 103, 4, 209, 138, 23, 221, 52, 250, 215, 246, + 156, 234, 44, 201, 103, 222, 66, 209, 138, 23, 221, 52, 250, 215, 246, + 156, 234, 44, 201, 103, 225, 71, 209, 138, 23, 221, 52, 250, 215, 246, + 156, 234, 44, 201, 103, 4, 239, 175, 23, 221, 52, 250, 215, 246, 156, + 234, 44, 201, 103, 222, 66, 239, 175, 23, 221, 52, 250, 215, 246, 156, + 234, 44, 201, 103, 225, 71, 239, 175, 23, 221, 50, 200, 220, 246, 156, + 236, 200, 209, 138, 23, 221, 50, 200, 220, 246, 156, 236, 200, 239, 175, + 23, 221, 52, 200, 220, 246, 156, 234, 44, 201, 103, 209, 138, 23, 221, + 52, 200, 220, 246, 156, 234, 44, 201, 103, 239, 175, 23, 221, 50, 237, + 87, 246, 153, 209, 138, 23, 221, 50, 237, 87, 246, 153, 239, 175, 23, + 221, 52, 237, 87, 246, 153, 234, 44, 201, 103, 209, 138, 23, 221, 52, + 237, 87, 246, 153, 234, 44, 201, 103, 239, 175, 23, 239, 98, 250, 203, + 209, 53, 23, 239, 98, 250, 203, 225, 70, 23, 239, 98, 237, 161, 23, 239, + 98, 209, 56, 23, 239, 98, 206, 159, 23, 239, 98, 213, 147, 23, 239, 98, + 209, 144, 23, 239, 98, 209, 145, 251, 106, 23, 239, 98, 238, 52, 217, 8, + 205, 234, 23, 239, 98, 235, 88, 23, 234, 136, 23, 234, 137, 213, 31, 23, + 234, 137, 221, 50, 208, 67, 23, 234, 137, 221, 50, 205, 237, 23, 234, + 137, 221, 52, 208, 67, 23, 234, 137, 221, 50, 242, 189, 23, 234, 137, + 221, 52, 242, 189, 23, 234, 137, 221, 55, 246, 155, 23, 237, 190, 241, 9, + 215, 70, 218, 217, 236, 234, 205, 235, 23, 237, 190, 241, 9, 215, 70, + 218, 217, 115, 217, 34, 239, 167, 23, 237, 190, 241, 9, 215, 70, 218, + 217, 115, 217, 34, 127, 205, 235, 23, 238, 21, 208, 68, 203, 228, 23, + 238, 21, 208, 68, 220, 9, 23, 238, 21, 208, 68, 239, 167, 23, 239, 154, + 238, 21, 220, 10, 239, 167, 23, 239, 154, 238, 21, 127, 220, 9, 23, 239, + 154, 238, 21, 115, 220, 9, 23, 239, 154, 238, 21, 220, 10, 203, 228, 23, + 236, 247, 220, 9, 23, 236, 247, 243, 47, 23, 236, 247, 200, 223, 23, 238, + 16, 217, 53, 23, 238, 16, 208, 188, 23, 238, 16, 246, 109, 23, 238, 23, + 248, 135, 209, 138, 23, 238, 23, 248, 135, 221, 20, 23, 238, 16, 167, + 217, 53, 23, 238, 16, 201, 28, 217, 53, 23, 238, 16, 167, 246, 109, 23, + 238, 16, 201, 26, 221, 54, 23, 238, 23, 201, 9, 23, 238, 17, 203, 228, + 23, 238, 17, 239, 167, 23, 238, 17, 237, 18, 23, 238, 19, 208, 67, 23, + 238, 19, 208, 68, 239, 175, 23, 238, 19, 208, 68, 251, 106, 23, 238, 20, + 208, 67, 23, 238, 20, 208, 68, 239, 175, 23, 238, 20, 208, 68, 251, 106, + 23, 238, 19, 242, 187, 23, 238, 20, 242, 187, 23, 238, 19, 246, 150, 23, + 247, 2, 214, 215, 23, 247, 2, 220, 9, 23, 247, 2, 207, 248, 23, 206, 160, + 247, 2, 234, 59, 23, 206, 160, 247, 2, 221, 204, 23, 206, 160, 247, 2, + 224, 59, 23, 239, 19, 23, 218, 217, 220, 9, 23, 218, 217, 243, 47, 23, + 218, 217, 200, 221, 23, 218, 217, 201, 23, 23, 251, 167, 248, 128, 216, + 254, 23, 251, 167, 207, 247, 228, 117, 23, 251, 167, 248, 130, 4, 212, + 223, 23, 251, 167, 207, 249, 4, 212, 223, 23, 248, 59, 228, 89, 23, 248, + 59, 238, 41, 23, 221, 59, 246, 110, 220, 9, 23, 221, 59, 246, 110, 236, + 233, 23, 221, 59, 246, 110, 243, 47, 23, 221, 59, 209, 48, 23, 221, 59, + 209, 49, 200, 223, 23, 221, 59, 209, 49, 217, 53, 23, 221, 59, 236, 196, + 23, 221, 59, 236, 197, 200, 223, 23, 221, 59, 236, 197, 217, 53, 23, 221, + 59, 176, 246, 155, 23, 221, 59, 176, 236, 233, 23, 221, 59, 176, 200, + 223, 23, 221, 59, 176, 216, 247, 23, 221, 59, 176, 216, 248, 200, 223, + 23, 221, 59, 176, 216, 248, 200, 58, 23, 221, 59, 176, 213, 175, 23, 221, + 59, 176, 213, 176, 200, 223, 23, 221, 59, 176, 213, 176, 200, 58, 23, + 221, 59, 226, 129, 23, 221, 59, 226, 130, 236, 233, 23, 221, 59, 226, + 130, 200, 223, 23, 221, 59, 206, 159, 23, 221, 59, 206, 160, 236, 233, + 23, 221, 59, 206, 160, 207, 248, 23, 224, 161, 215, 17, 205, 182, 23, + 224, 163, 224, 54, 119, 203, 224, 23, 224, 163, 203, 225, 119, 224, 53, + 23, 221, 59, 243, 14, 23, 221, 59, 200, 222, 209, 138, 23, 221, 59, 200, + 222, 239, 175, 23, 205, 164, 208, 87, 216, 255, 237, 163, 23, 205, 164, + 224, 206, 224, 160, 23, 205, 164, 205, 224, 248, 206, 224, 160, 23, 205, + 164, 205, 224, 205, 140, 228, 74, 221, 58, 23, 205, 164, 228, 74, 221, + 59, 213, 147, 23, 205, 164, 221, 49, 251, 191, 247, 3, 23, 205, 164, 247, + 56, 208, 87, 216, 254, 23, 205, 164, 247, 56, 228, 74, 221, 58, 23, 206, + 186, 23, 206, 187, 221, 54, 23, 206, 187, 217, 79, 205, 163, 23, 206, + 187, 217, 79, 205, 164, 221, 54, 23, 206, 187, 217, 79, 224, 160, 23, + 206, 187, 217, 79, 224, 161, 221, 54, 23, 206, 187, 248, 151, 224, 160, + 23, 221, 50, 227, 231, 23, 221, 52, 227, 231, 23, 220, 31, 23, 234, 221, + 23, 238, 44, 23, 209, 233, 234, 49, 208, 219, 23, 209, 233, 234, 49, 215, + 69, 23, 201, 101, 209, 233, 234, 49, 221, 57, 23, 237, 30, 209, 233, 234, + 49, 221, 57, 23, 209, 233, 205, 236, 236, 201, 201, 107, 23, 205, 147, + 208, 68, 208, 56, 23, 205, 147, 242, 188, 248, 222, 23, 205, 148, 204, + 144, 23, 203, 225, 248, 119, 205, 236, 236, 201, 234, 49, 227, 160, 23, + 224, 188, 246, 75, 23, 224, 188, 225, 1, 23, 224, 188, 225, 0, 23, 224, + 188, 224, 255, 23, 224, 188, 224, 254, 23, 224, 188, 224, 253, 23, 224, + 188, 224, 252, 23, 224, 188, 224, 251, 23, 237, 86, 23, 224, 106, 208, + 244, 23, 224, 107, 208, 244, 23, 224, 108, 234, 113, 23, 224, 108, 201, + 24, 23, 224, 108, 241, 123, 23, 224, 108, 234, 137, 220, 31, 23, 224, + 108, 205, 149, 23, 224, 108, 224, 187, 241, 41, 23, 246, 70, 23, 236, + 183, 208, 76, 23, 210, 167, 23, 246, 79, 23, 216, 115, 23, 237, 96, 221, + 118, 23, 237, 96, 221, 117, 23, 237, 96, 221, 116, 23, 237, 96, 221, 115, + 23, 237, 96, 221, 114, 23, 212, 227, 221, 118, 23, 212, 227, 221, 117, + 23, 212, 227, 221, 116, 23, 212, 227, 221, 115, 23, 212, 227, 221, 114, + 23, 212, 227, 221, 113, 23, 212, 227, 221, 112, 23, 212, 227, 221, 111, + 23, 212, 227, 221, 125, 23, 212, 227, 221, 124, 23, 212, 227, 221, 123, + 23, 212, 227, 221, 122, 23, 212, 227, 221, 121, 23, 212, 227, 221, 120, + 23, 212, 227, 221, 119, 38, 116, 1, 250, 104, 38, 116, 1, 248, 24, 38, + 116, 1, 203, 57, 38, 116, 1, 235, 130, 38, 116, 1, 240, 206, 38, 116, 1, + 200, 23, 38, 116, 1, 199, 61, 38, 116, 1, 199, 86, 38, 116, 1, 227, 255, + 38, 116, 1, 82, 227, 255, 38, 116, 1, 70, 38, 116, 1, 240, 226, 38, 116, + 1, 227, 74, 38, 116, 1, 224, 140, 38, 116, 1, 220, 218, 38, 116, 1, 220, + 120, 38, 116, 1, 217, 65, 38, 116, 1, 215, 93, 38, 116, 1, 213, 18, 38, + 116, 1, 209, 58, 38, 116, 1, 204, 171, 38, 116, 1, 204, 16, 38, 116, 1, + 236, 204, 38, 116, 1, 234, 95, 38, 116, 1, 209, 223, 38, 116, 1, 205, 11, + 38, 116, 1, 246, 198, 38, 116, 1, 210, 114, 38, 116, 1, 200, 29, 38, 116, + 1, 200, 31, 38, 116, 1, 200, 63, 38, 116, 1, 199, 211, 38, 116, 1, 4, + 199, 181, 38, 116, 1, 199, 245, 38, 116, 1, 228, 40, 4, 199, 181, 38, + 116, 1, 248, 175, 199, 181, 38, 116, 1, 228, 40, 248, 175, 199, 181, 38, + 116, 1, 237, 63, 78, 77, 5, 223, 242, 226, 163, 78, 77, 5, 223, 238, 161, + 78, 77, 5, 223, 236, 226, 15, 78, 77, 5, 223, 112, 227, 5, 78, 77, 5, + 223, 82, 227, 8, 78, 77, 5, 223, 101, 226, 68, 78, 77, 5, 223, 129, 226, + 88, 78, 77, 5, 222, 254, 226, 9, 78, 77, 5, 223, 233, 201, 31, 78, 77, 5, + 223, 231, 201, 114, 78, 77, 5, 223, 229, 200, 216, 78, 77, 5, 223, 51, + 201, 57, 78, 77, 5, 223, 59, 201, 64, 78, 77, 5, 223, 63, 200, 244, 78, + 77, 5, 223, 132, 201, 0, 78, 77, 5, 222, 239, 200, 212, 78, 77, 5, 223, + 34, 201, 55, 78, 77, 5, 223, 116, 200, 200, 78, 77, 5, 223, 128, 200, + 202, 78, 77, 5, 223, 38, 200, 201, 78, 77, 5, 223, 227, 221, 164, 78, 77, + 5, 223, 225, 222, 180, 78, 77, 5, 223, 223, 221, 14, 78, 77, 5, 223, 118, + 222, 40, 78, 77, 5, 223, 83, 221, 106, 78, 77, 5, 223, 23, 221, 38, 78, + 77, 5, 222, 244, 221, 32, 78, 77, 5, 223, 221, 248, 188, 78, 77, 5, 223, + 218, 249, 136, 78, 77, 5, 223, 216, 248, 36, 78, 77, 5, 223, 27, 248, + 252, 78, 77, 5, 223, 80, 249, 8, 78, 77, 5, 223, 74, 248, 111, 78, 77, 5, + 223, 39, 248, 124, 78, 77, 5, 223, 206, 70, 78, 77, 5, 223, 204, 62, 78, + 77, 5, 223, 202, 66, 78, 77, 5, 223, 14, 238, 255, 78, 77, 5, 223, 77, + 72, 78, 77, 5, 223, 12, 217, 63, 78, 77, 5, 223, 30, 74, 78, 77, 5, 223, + 40, 238, 234, 78, 77, 5, 223, 46, 228, 117, 78, 77, 5, 223, 42, 228, 117, + 78, 77, 5, 222, 238, 251, 85, 78, 77, 5, 222, 255, 238, 179, 78, 77, 5, + 223, 191, 209, 182, 78, 77, 5, 223, 189, 212, 64, 78, 77, 5, 223, 187, + 208, 24, 78, 77, 5, 223, 15, 211, 190, 78, 77, 5, 223, 61, 211, 202, 78, + 77, 5, 223, 41, 209, 10, 78, 77, 5, 223, 98, 209, 29, 78, 77, 5, 222, + 237, 209, 181, 78, 77, 5, 223, 177, 224, 210, 78, 77, 5, 223, 175, 194, + 78, 77, 5, 223, 173, 224, 42, 78, 77, 5, 223, 93, 225, 32, 78, 77, 5, + 223, 104, 225, 40, 78, 77, 5, 223, 123, 224, 78, 78, 77, 5, 223, 24, 224, + 110, 78, 77, 5, 223, 67, 168, 225, 40, 78, 77, 5, 223, 199, 241, 76, 78, + 77, 5, 223, 196, 242, 58, 78, 77, 5, 223, 193, 239, 137, 78, 77, 5, 223, + 88, 241, 161, 78, 77, 5, 222, 253, 240, 187, 78, 77, 5, 222, 252, 240, + 211, 78, 77, 5, 223, 185, 206, 15, 78, 77, 5, 223, 182, 207, 36, 78, 77, + 5, 223, 180, 204, 215, 78, 77, 5, 223, 86, 206, 190, 78, 77, 5, 223, 122, + 206, 201, 78, 77, 5, 223, 73, 205, 161, 78, 77, 5, 223, 108, 138, 78, 77, + 5, 223, 171, 227, 207, 78, 77, 5, 223, 168, 227, 248, 78, 77, 5, 223, + 166, 227, 147, 78, 77, 5, 223, 20, 227, 225, 78, 77, 5, 223, 64, 227, + 227, 78, 77, 5, 223, 17, 227, 156, 78, 77, 5, 223, 114, 227, 166, 78, 77, + 5, 223, 2, 168, 227, 166, 78, 77, 5, 223, 164, 200, 9, 78, 77, 5, 223, + 161, 183, 78, 77, 5, 223, 159, 199, 211, 78, 77, 5, 223, 68, 200, 48, 78, + 77, 5, 223, 97, 200, 51, 78, 77, 5, 223, 36, 199, 230, 78, 77, 5, 223, + 56, 199, 245, 78, 77, 5, 223, 155, 237, 112, 78, 77, 5, 223, 153, 237, + 195, 78, 77, 5, 223, 151, 236, 189, 78, 77, 5, 223, 99, 237, 140, 78, 77, + 5, 223, 102, 237, 147, 78, 77, 5, 223, 44, 237, 2, 78, 77, 5, 223, 89, + 237, 13, 78, 77, 5, 222, 236, 236, 188, 78, 77, 5, 223, 76, 237, 168, 78, + 77, 5, 223, 149, 219, 118, 78, 77, 5, 223, 147, 220, 134, 78, 77, 5, 223, + 145, 218, 89, 78, 77, 5, 223, 60, 220, 24, 78, 77, 5, 223, 8, 218, 234, + 78, 77, 5, 223, 1, 234, 75, 78, 77, 5, 223, 140, 144, 78, 77, 5, 222, + 247, 233, 97, 78, 77, 5, 223, 143, 234, 120, 78, 77, 5, 223, 81, 234, + 139, 78, 77, 5, 223, 138, 233, 188, 78, 77, 5, 223, 37, 233, 207, 78, 77, + 5, 223, 94, 234, 119, 78, 77, 5, 223, 49, 233, 181, 78, 77, 5, 223, 124, + 234, 53, 78, 77, 5, 223, 47, 234, 202, 78, 77, 5, 223, 90, 233, 84, 78, + 77, 5, 223, 125, 234, 105, 78, 77, 5, 222, 240, 233, 191, 78, 77, 5, 223, + 131, 233, 96, 78, 77, 5, 223, 87, 219, 218, 78, 77, 5, 223, 136, 219, + 232, 78, 77, 5, 223, 95, 219, 215, 78, 77, 5, 223, 62, 219, 226, 78, 77, + 5, 223, 31, 219, 227, 78, 77, 5, 223, 21, 219, 216, 78, 77, 5, 223, 57, + 219, 217, 78, 77, 5, 223, 18, 219, 231, 78, 77, 5, 223, 50, 219, 214, 78, + 77, 5, 223, 91, 168, 219, 227, 78, 77, 5, 223, 71, 168, 219, 216, 78, 77, + 5, 222, 250, 168, 219, 217, 78, 77, 5, 223, 22, 235, 161, 78, 77, 5, 223, + 66, 236, 89, 78, 77, 5, 223, 9, 235, 50, 78, 77, 5, 222, 243, 236, 7, 78, + 77, 5, 223, 11, 235, 36, 78, 77, 5, 223, 10, 235, 46, 78, 77, 5, 222, + 249, 219, 237, 78, 77, 5, 223, 120, 219, 174, 78, 77, 5, 223, 0, 219, + 163, 78, 77, 5, 223, 109, 215, 204, 78, 77, 5, 223, 78, 172, 78, 77, 5, + 223, 127, 214, 224, 78, 77, 5, 223, 96, 216, 61, 78, 77, 5, 223, 126, + 216, 73, 78, 77, 5, 223, 75, 215, 81, 78, 77, 5, 223, 111, 215, 106, 78, + 77, 5, 223, 32, 222, 95, 78, 77, 5, 223, 115, 222, 110, 78, 77, 5, 223, + 55, 222, 89, 78, 77, 5, 223, 130, 222, 102, 78, 77, 5, 222, 245, 222, + 102, 78, 77, 5, 223, 105, 222, 103, 78, 77, 5, 223, 5, 222, 90, 78, 77, + 5, 223, 3, 222, 91, 78, 77, 5, 222, 246, 222, 83, 78, 77, 5, 223, 16, + 168, 222, 103, 78, 77, 5, 223, 72, 168, 222, 90, 78, 77, 5, 223, 35, 168, + 222, 91, 78, 77, 5, 223, 45, 226, 42, 78, 77, 5, 223, 85, 226, 50, 78, + 77, 5, 223, 103, 226, 38, 78, 77, 5, 223, 134, 226, 45, 78, 77, 5, 223, + 69, 226, 46, 78, 77, 5, 223, 65, 226, 40, 78, 77, 5, 223, 19, 226, 41, + 78, 77, 5, 223, 53, 236, 24, 78, 77, 5, 223, 121, 236, 32, 78, 77, 5, + 223, 29, 236, 19, 78, 77, 5, 223, 84, 236, 28, 78, 77, 5, 223, 70, 236, + 29, 78, 77, 5, 223, 106, 236, 20, 78, 77, 5, 223, 107, 236, 22, 78, 77, + 5, 223, 6, 213, 252, 78, 77, 5, 223, 54, 220, 60, 78, 77, 5, 223, 48, + 220, 75, 78, 77, 5, 223, 52, 220, 42, 78, 77, 5, 222, 242, 220, 66, 78, + 77, 5, 223, 58, 220, 67, 78, 77, 5, 223, 110, 220, 47, 78, 77, 5, 223, + 113, 220, 51, 78, 77, 5, 223, 25, 219, 98, 78, 77, 5, 222, 241, 219, 68, + 78, 77, 5, 223, 28, 219, 89, 78, 77, 5, 223, 43, 219, 72, 78, 77, 5, 222, + 251, 202, 234, 78, 77, 5, 222, 248, 203, 90, 78, 77, 5, 223, 26, 201, + 166, 78, 77, 5, 223, 4, 203, 54, 78, 77, 5, 223, 92, 203, 59, 78, 77, 5, + 223, 33, 202, 179, 78, 77, 5, 223, 100, 202, 193, 78, 77, 5, 223, 13, + 218, 35, 78, 77, 5, 223, 119, 218, 54, 78, 77, 5, 223, 7, 218, 17, 78, + 77, 5, 223, 79, 218, 46, 78, 77, 5, 223, 117, 218, 24, 78, 77, 17, 102, + 78, 77, 17, 105, 78, 77, 17, 147, 78, 77, 17, 149, 78, 77, 17, 164, 78, + 77, 17, 187, 78, 77, 17, 210, 135, 78, 77, 17, 192, 78, 77, 17, 219, 113, + 78, 77, 38, 41, 206, 188, 78, 77, 38, 41, 206, 161, 78, 77, 38, 41, 233, + 80, 78, 77, 38, 41, 206, 48, 78, 77, 38, 41, 206, 167, 206, 48, 78, 77, + 38, 41, 233, 83, 206, 48, 78, 77, 38, 41, 221, 167, 251, 227, 6, 1, 251, + 130, 251, 227, 6, 1, 242, 55, 251, 227, 6, 1, 225, 173, 251, 227, 6, 1, + 221, 180, 251, 227, 6, 1, 249, 136, 251, 227, 6, 1, 209, 133, 251, 227, + 6, 1, 216, 73, 251, 227, 6, 1, 248, 196, 251, 227, 6, 1, 213, 252, 251, + 227, 6, 1, 72, 251, 227, 6, 1, 237, 195, 251, 227, 6, 1, 70, 251, 227, 6, + 1, 74, 251, 227, 6, 1, 241, 100, 251, 227, 6, 1, 200, 10, 251, 227, 6, 1, + 201, 72, 251, 227, 6, 1, 218, 89, 251, 227, 6, 1, 227, 86, 251, 227, 6, + 1, 183, 251, 227, 6, 1, 66, 251, 227, 6, 1, 227, 199, 251, 227, 6, 1, + 246, 236, 251, 227, 6, 1, 144, 251, 227, 6, 1, 214, 157, 251, 227, 6, 1, + 236, 89, 251, 227, 6, 1, 218, 60, 251, 227, 6, 1, 204, 215, 251, 227, 6, + 1, 219, 154, 251, 227, 6, 1, 203, 90, 251, 227, 6, 1, 226, 207, 251, 227, + 6, 1, 236, 29, 251, 227, 6, 1, 199, 103, 251, 227, 6, 1, 226, 41, 251, + 227, 6, 1, 210, 114, 251, 227, 4, 1, 251, 130, 251, 227, 4, 1, 242, 55, + 251, 227, 4, 1, 225, 173, 251, 227, 4, 1, 221, 180, 251, 227, 4, 1, 249, + 136, 251, 227, 4, 1, 209, 133, 251, 227, 4, 1, 216, 73, 251, 227, 4, 1, + 248, 196, 251, 227, 4, 1, 213, 252, 251, 227, 4, 1, 72, 251, 227, 4, 1, + 237, 195, 251, 227, 4, 1, 70, 251, 227, 4, 1, 74, 251, 227, 4, 1, 241, + 100, 251, 227, 4, 1, 200, 10, 251, 227, 4, 1, 201, 72, 251, 227, 4, 1, + 218, 89, 251, 227, 4, 1, 227, 86, 251, 227, 4, 1, 183, 251, 227, 4, 1, + 66, 251, 227, 4, 1, 227, 199, 251, 227, 4, 1, 246, 236, 251, 227, 4, 1, + 144, 251, 227, 4, 1, 214, 157, 251, 227, 4, 1, 236, 89, 251, 227, 4, 1, + 218, 60, 251, 227, 4, 1, 204, 215, 251, 227, 4, 1, 219, 154, 251, 227, 4, + 1, 203, 90, 251, 227, 4, 1, 226, 207, 251, 227, 4, 1, 236, 29, 251, 227, + 4, 1, 199, 103, 251, 227, 4, 1, 226, 41, 251, 227, 4, 1, 210, 114, 251, + 227, 251, 131, 224, 250, 251, 227, 22, 224, 250, 251, 227, 236, 3, 81, + 251, 227, 234, 203, 251, 227, 111, 221, 126, 251, 227, 236, 4, 111, 221, + 126, 251, 227, 218, 100, 251, 227, 17, 199, 81, 251, 227, 17, 102, 251, + 227, 17, 105, 251, 227, 17, 147, 251, 227, 17, 149, 251, 227, 17, 164, + 251, 227, 17, 187, 251, 227, 17, 210, 135, 251, 227, 17, 192, 251, 227, + 17, 219, 113, 251, 227, 82, 238, 43, 81, 251, 227, 82, 214, 79, 81, 9, + 13, 251, 142, 9, 13, 248, 240, 9, 13, 227, 224, 9, 13, 242, 29, 9, 13, + 201, 72, 9, 13, 199, 105, 9, 13, 234, 224, 9, 13, 207, 9, 9, 13, 200, 46, + 9, 13, 227, 86, 9, 13, 225, 91, 9, 13, 222, 61, 9, 13, 218, 227, 9, 13, + 211, 186, 9, 13, 251, 171, 9, 13, 237, 134, 9, 13, 212, 56, 9, 13, 214, + 152, 9, 13, 213, 154, 9, 13, 210, 61, 9, 13, 206, 183, 9, 13, 206, 102, + 9, 13, 226, 203, 9, 13, 206, 114, 9, 13, 242, 52, 9, 13, 199, 108, 9, 13, + 235, 194, 9, 13, 240, 181, 248, 240, 9, 13, 240, 181, 218, 227, 9, 13, + 240, 181, 237, 134, 9, 13, 240, 181, 214, 152, 9, 13, 82, 248, 240, 9, + 13, 82, 227, 224, 9, 13, 82, 234, 115, 9, 13, 82, 234, 224, 9, 13, 82, + 200, 46, 9, 13, 82, 227, 86, 9, 13, 82, 225, 91, 9, 13, 82, 222, 61, 9, + 13, 82, 218, 227, 9, 13, 82, 211, 186, 9, 13, 82, 251, 171, 9, 13, 82, + 237, 134, 9, 13, 82, 212, 56, 9, 13, 82, 214, 152, 9, 13, 82, 210, 61, 9, + 13, 82, 206, 183, 9, 13, 82, 206, 102, 9, 13, 82, 226, 203, 9, 13, 82, + 242, 52, 9, 13, 82, 235, 194, 9, 13, 207, 5, 227, 224, 9, 13, 207, 5, + 234, 224, 9, 13, 207, 5, 200, 46, 9, 13, 207, 5, 225, 91, 9, 13, 207, 5, + 218, 227, 9, 13, 207, 5, 211, 186, 9, 13, 207, 5, 251, 171, 9, 13, 207, + 5, 212, 56, 9, 13, 207, 5, 214, 152, 9, 13, 207, 5, 210, 61, 9, 13, 207, + 5, 226, 203, 9, 13, 207, 5, 242, 52, 9, 13, 207, 5, 235, 194, 9, 13, 207, + 5, 240, 181, 218, 227, 9, 13, 207, 5, 240, 181, 214, 152, 9, 13, 208, 55, + 248, 240, 9, 13, 208, 55, 227, 224, 9, 13, 208, 55, 234, 115, 9, 13, 208, + 55, 234, 224, 9, 13, 208, 55, 207, 9, 9, 13, 208, 55, 200, 46, 9, 13, + 208, 55, 227, 86, 9, 13, 208, 55, 222, 61, 9, 13, 208, 55, 218, 227, 9, + 13, 208, 55, 211, 186, 9, 13, 208, 55, 251, 171, 9, 13, 208, 55, 237, + 134, 9, 13, 208, 55, 212, 56, 9, 13, 208, 55, 214, 152, 9, 13, 208, 55, + 210, 61, 9, 13, 208, 55, 206, 183, 9, 13, 208, 55, 206, 102, 9, 13, 208, + 55, 226, 203, 9, 13, 208, 55, 242, 52, 9, 13, 208, 55, 199, 108, 9, 13, + 208, 55, 235, 194, 9, 13, 208, 55, 240, 181, 248, 240, 9, 13, 208, 55, + 240, 181, 237, 134, 9, 13, 224, 73, 251, 142, 9, 13, 224, 73, 248, 240, + 9, 13, 224, 73, 227, 224, 9, 13, 224, 73, 242, 29, 9, 13, 224, 73, 234, + 115, 9, 13, 224, 73, 201, 72, 9, 13, 224, 73, 199, 105, 9, 13, 224, 73, + 234, 224, 9, 13, 224, 73, 207, 9, 9, 13, 224, 73, 200, 46, 9, 13, 224, + 73, 225, 91, 9, 13, 224, 73, 222, 61, 9, 13, 224, 73, 218, 227, 9, 13, + 224, 73, 211, 186, 9, 13, 224, 73, 251, 171, 9, 13, 224, 73, 237, 134, 9, + 13, 224, 73, 212, 56, 9, 13, 224, 73, 214, 152, 9, 13, 224, 73, 213, 154, + 9, 13, 224, 73, 210, 61, 9, 13, 224, 73, 206, 183, 9, 13, 224, 73, 206, + 102, 9, 13, 224, 73, 226, 203, 9, 13, 224, 73, 206, 114, 9, 13, 224, 73, + 242, 52, 9, 13, 224, 73, 199, 108, 9, 13, 224, 73, 235, 194, 9, 13, 175, + 248, 240, 9, 13, 175, 227, 224, 9, 13, 175, 242, 29, 9, 13, 175, 201, 72, + 9, 13, 175, 199, 105, 9, 13, 175, 234, 224, 9, 13, 175, 207, 9, 9, 13, + 175, 200, 46, 9, 13, 175, 225, 91, 9, 13, 175, 222, 61, 9, 13, 175, 218, + 227, 9, 13, 175, 211, 186, 9, 13, 175, 251, 171, 9, 13, 175, 237, 134, 9, + 13, 175, 212, 56, 9, 13, 175, 214, 152, 9, 13, 175, 213, 154, 9, 13, 175, + 210, 61, 9, 13, 175, 206, 183, 9, 13, 175, 206, 102, 9, 13, 175, 226, + 203, 9, 13, 175, 206, 114, 9, 13, 175, 242, 52, 9, 13, 175, 199, 108, 9, + 13, 175, 235, 194, 9, 13, 217, 44, 84, 3, 155, 3, 206, 223, 9, 13, 217, + 44, 155, 3, 242, 29, 222, 200, 103, 239, 14, 201, 16, 222, 200, 103, 208, + 254, 201, 16, 222, 200, 103, 201, 48, 201, 16, 222, 200, 103, 157, 201, + 16, 222, 200, 103, 213, 170, 239, 158, 222, 200, 103, 235, 64, 239, 158, + 222, 200, 103, 64, 239, 158, 222, 200, 103, 112, 76, 247, 19, 222, 200, + 103, 120, 76, 247, 19, 222, 200, 103, 126, 76, 247, 19, 222, 200, 103, + 236, 229, 76, 247, 19, 222, 200, 103, 237, 61, 76, 247, 19, 222, 200, + 103, 209, 106, 76, 247, 19, 222, 200, 103, 210, 136, 76, 247, 19, 222, + 200, 103, 238, 232, 76, 247, 19, 222, 200, 103, 219, 114, 76, 247, 19, + 222, 200, 103, 112, 76, 249, 89, 222, 200, 103, 120, 76, 249, 89, 222, + 200, 103, 126, 76, 249, 89, 222, 200, 103, 236, 229, 76, 249, 89, 222, + 200, 103, 237, 61, 76, 249, 89, 222, 200, 103, 209, 106, 76, 249, 89, + 222, 200, 103, 210, 136, 76, 249, 89, 222, 200, 103, 238, 232, 76, 249, + 89, 222, 200, 103, 219, 114, 76, 249, 89, 222, 200, 103, 112, 76, 246, + 152, 222, 200, 103, 120, 76, 246, 152, 222, 200, 103, 126, 76, 246, 152, + 222, 200, 103, 236, 229, 76, 246, 152, 222, 200, 103, 237, 61, 76, 246, + 152, 222, 200, 103, 209, 106, 76, 246, 152, 222, 200, 103, 210, 136, 76, + 246, 152, 222, 200, 103, 238, 232, 76, 246, 152, 222, 200, 103, 219, 114, + 76, 246, 152, 222, 200, 103, 215, 116, 222, 200, 103, 217, 31, 222, 200, + 103, 249, 90, 222, 200, 103, 246, 193, 222, 200, 103, 208, 199, 222, 200, + 103, 207, 230, 222, 200, 103, 250, 126, 222, 200, 103, 201, 7, 222, 200, + 103, 227, 159, 222, 200, 103, 249, 129, 166, 103, 233, 177, 249, 129, + 166, 103, 233, 175, 166, 103, 233, 174, 166, 103, 233, 173, 166, 103, + 233, 172, 166, 103, 233, 171, 166, 103, 233, 170, 166, 103, 233, 169, + 166, 103, 233, 168, 166, 103, 233, 167, 166, 103, 233, 166, 166, 103, + 233, 165, 166, 103, 233, 164, 166, 103, 233, 163, 166, 103, 233, 162, + 166, 103, 233, 161, 166, 103, 233, 160, 166, 103, 233, 159, 166, 103, + 233, 158, 166, 103, 233, 157, 166, 103, 233, 156, 166, 103, 233, 155, + 166, 103, 233, 154, 166, 103, 233, 153, 166, 103, 233, 152, 166, 103, + 233, 151, 166, 103, 233, 150, 166, 103, 233, 149, 166, 103, 233, 148, + 166, 103, 233, 147, 166, 103, 233, 146, 166, 103, 233, 145, 166, 103, + 233, 144, 166, 103, 233, 143, 166, 103, 233, 142, 166, 103, 233, 141, + 166, 103, 233, 140, 166, 103, 233, 139, 166, 103, 233, 138, 166, 103, + 233, 137, 166, 103, 233, 136, 166, 103, 233, 135, 166, 103, 233, 134, + 166, 103, 233, 133, 166, 103, 233, 132, 166, 103, 233, 131, 166, 103, + 233, 130, 166, 103, 233, 129, 166, 103, 233, 128, 166, 103, 233, 127, + 166, 103, 83, 249, 129, 166, 103, 203, 41, 166, 103, 203, 40, 166, 103, + 203, 39, 166, 103, 203, 38, 166, 103, 203, 37, 166, 103, 203, 36, 166, + 103, 203, 35, 166, 103, 203, 34, 166, 103, 203, 33, 166, 103, 203, 32, + 166, 103, 203, 31, 166, 103, 203, 30, 166, 103, 203, 29, 166, 103, 203, + 28, 166, 103, 203, 27, 166, 103, 203, 26, 166, 103, 203, 25, 166, 103, + 203, 24, 166, 103, 203, 23, 166, 103, 203, 22, 166, 103, 203, 21, 166, + 103, 203, 20, 166, 103, 203, 19, 166, 103, 203, 18, 166, 103, 203, 17, + 166, 103, 203, 16, 166, 103, 203, 15, 166, 103, 203, 14, 166, 103, 203, + 13, 166, 103, 203, 12, 166, 103, 203, 11, 166, 103, 203, 10, 166, 103, + 203, 9, 166, 103, 203, 8, 166, 103, 203, 7, 166, 103, 203, 6, 166, 103, + 203, 5, 166, 103, 203, 4, 166, 103, 203, 3, 166, 103, 203, 2, 166, 103, + 203, 1, 166, 103, 203, 0, 166, 103, 202, 255, 166, 103, 202, 254, 166, + 103, 202, 253, 166, 103, 202, 252, 166, 103, 202, 251, 166, 103, 202, + 250, 166, 103, 202, 249, 215, 125, 247, 134, 249, 129, 215, 125, 247, + 134, 251, 245, 76, 208, 241, 215, 125, 247, 134, 120, 76, 208, 241, 215, + 125, 247, 134, 126, 76, 208, 241, 215, 125, 247, 134, 236, 229, 76, 208, + 241, 215, 125, 247, 134, 237, 61, 76, 208, 241, 215, 125, 247, 134, 209, + 106, 76, 208, 241, 215, 125, 247, 134, 210, 136, 76, 208, 241, 215, 125, + 247, 134, 238, 232, 76, 208, 241, 215, 125, 247, 134, 219, 114, 76, 208, + 241, 215, 125, 247, 134, 206, 167, 76, 208, 241, 215, 125, 247, 134, 227, + 246, 76, 208, 241, 215, 125, 247, 134, 226, 94, 76, 208, 241, 215, 125, + 247, 134, 214, 81, 76, 208, 241, 215, 125, 247, 134, 226, 145, 76, 208, + 241, 215, 125, 247, 134, 251, 245, 76, 234, 125, 215, 125, 247, 134, 120, + 76, 234, 125, 215, 125, 247, 134, 126, 76, 234, 125, 215, 125, 247, 134, + 236, 229, 76, 234, 125, 215, 125, 247, 134, 237, 61, 76, 234, 125, 215, + 125, 247, 134, 209, 106, 76, 234, 125, 215, 125, 247, 134, 210, 136, 76, + 234, 125, 215, 125, 247, 134, 238, 232, 76, 234, 125, 215, 125, 247, 134, + 219, 114, 76, 234, 125, 215, 125, 247, 134, 206, 167, 76, 234, 125, 215, + 125, 247, 134, 227, 246, 76, 234, 125, 215, 125, 247, 134, 226, 94, 76, + 234, 125, 215, 125, 247, 134, 214, 81, 76, 234, 125, 215, 125, 247, 134, + 226, 145, 76, 234, 125, 215, 125, 247, 134, 213, 170, 227, 159, 215, 125, + 247, 134, 251, 245, 76, 241, 63, 215, 125, 247, 134, 120, 76, 241, 63, + 215, 125, 247, 134, 126, 76, 241, 63, 215, 125, 247, 134, 236, 229, 76, + 241, 63, 215, 125, 247, 134, 237, 61, 76, 241, 63, 215, 125, 247, 134, + 209, 106, 76, 241, 63, 215, 125, 247, 134, 210, 136, 76, 241, 63, 215, + 125, 247, 134, 238, 232, 76, 241, 63, 215, 125, 247, 134, 219, 114, 76, + 241, 63, 215, 125, 247, 134, 206, 167, 76, 241, 63, 215, 125, 247, 134, + 227, 246, 76, 241, 63, 215, 125, 247, 134, 226, 94, 76, 241, 63, 215, + 125, 247, 134, 214, 81, 76, 241, 63, 215, 125, 247, 134, 226, 145, 76, + 241, 63, 215, 125, 247, 134, 63, 227, 159, 215, 125, 247, 134, 251, 245, + 76, 246, 95, 215, 125, 247, 134, 120, 76, 246, 95, 215, 125, 247, 134, + 126, 76, 246, 95, 215, 125, 247, 134, 236, 229, 76, 246, 95, 215, 125, + 247, 134, 237, 61, 76, 246, 95, 215, 125, 247, 134, 209, 106, 76, 246, + 95, 215, 125, 247, 134, 210, 136, 76, 246, 95, 215, 125, 247, 134, 238, + 232, 76, 246, 95, 215, 125, 247, 134, 219, 114, 76, 246, 95, 215, 125, + 247, 134, 206, 167, 76, 246, 95, 215, 125, 247, 134, 227, 246, 76, 246, + 95, 215, 125, 247, 134, 226, 94, 76, 246, 95, 215, 125, 247, 134, 214, + 81, 76, 246, 95, 215, 125, 247, 134, 226, 145, 76, 246, 95, 215, 125, + 247, 134, 64, 227, 159, 215, 125, 247, 134, 237, 0, 215, 125, 247, 134, + 205, 60, 215, 125, 247, 134, 205, 49, 215, 125, 247, 134, 205, 46, 215, + 125, 247, 134, 205, 45, 215, 125, 247, 134, 205, 44, 215, 125, 247, 134, + 205, 43, 215, 125, 247, 134, 205, 42, 215, 125, 247, 134, 205, 41, 215, + 125, 247, 134, 205, 40, 215, 125, 247, 134, 205, 59, 215, 125, 247, 134, + 205, 58, 215, 125, 247, 134, 205, 57, 215, 125, 247, 134, 205, 56, 215, + 125, 247, 134, 205, 55, 215, 125, 247, 134, 205, 54, 215, 125, 247, 134, + 205, 53, 215, 125, 247, 134, 205, 52, 215, 125, 247, 134, 205, 51, 215, + 125, 247, 134, 205, 50, 215, 125, 247, 134, 205, 48, 215, 125, 247, 134, + 205, 47, 17, 199, 82, 236, 183, 208, 76, 17, 199, 82, 246, 70, 17, 112, + 246, 70, 17, 120, 246, 70, 17, 126, 246, 70, 17, 236, 229, 246, 70, 17, + 237, 61, 246, 70, 17, 209, 106, 246, 70, 17, 210, 136, 246, 70, 17, 238, + 232, 246, 70, 17, 219, 114, 246, 70, 241, 17, 44, 43, 17, 199, 81, 241, + 17, 189, 44, 43, 17, 199, 81, 106, 8, 6, 1, 62, 106, 8, 6, 1, 250, 103, + 106, 8, 6, 1, 247, 223, 106, 8, 6, 1, 242, 153, 106, 8, 6, 1, 72, 106, 8, + 6, 1, 238, 5, 106, 8, 6, 1, 236, 156, 106, 8, 6, 1, 234, 247, 106, 8, 6, + 1, 70, 106, 8, 6, 1, 227, 251, 106, 8, 6, 1, 227, 118, 106, 8, 6, 1, 156, + 106, 8, 6, 1, 223, 243, 106, 8, 6, 1, 220, 214, 106, 8, 6, 1, 74, 106, 8, + 6, 1, 216, 226, 106, 8, 6, 1, 214, 167, 106, 8, 6, 1, 146, 106, 8, 6, 1, + 212, 122, 106, 8, 6, 1, 207, 83, 106, 8, 6, 1, 66, 106, 8, 6, 1, 203, + 168, 106, 8, 6, 1, 201, 147, 106, 8, 6, 1, 200, 195, 106, 8, 6, 1, 200, + 123, 106, 8, 6, 1, 199, 157, 205, 146, 210, 55, 248, 69, 8, 6, 1, 212, + 122, 44, 39, 8, 6, 1, 247, 223, 44, 39, 8, 6, 1, 146, 44, 247, 77, 44, + 200, 197, 95, 8, 6, 1, 62, 95, 8, 6, 1, 250, 103, 95, 8, 6, 1, 247, 223, + 95, 8, 6, 1, 242, 153, 95, 8, 6, 1, 72, 95, 8, 6, 1, 238, 5, 95, 8, 6, 1, + 236, 156, 95, 8, 6, 1, 234, 247, 95, 8, 6, 1, 70, 95, 8, 6, 1, 227, 251, + 95, 8, 6, 1, 227, 118, 95, 8, 6, 1, 156, 95, 8, 6, 1, 223, 243, 95, 8, 6, + 1, 220, 214, 95, 8, 6, 1, 74, 95, 8, 6, 1, 216, 226, 95, 8, 6, 1, 214, + 167, 95, 8, 6, 1, 146, 95, 8, 6, 1, 212, 122, 95, 8, 6, 1, 207, 83, 95, + 8, 6, 1, 66, 95, 8, 6, 1, 203, 168, 95, 8, 6, 1, 201, 147, 95, 8, 6, 1, + 200, 195, 95, 8, 6, 1, 200, 123, 95, 8, 6, 1, 199, 157, 95, 233, 69, 95, + 220, 238, 95, 211, 204, 95, 208, 182, 95, 215, 45, 95, 201, 65, 189, 44, + 8, 6, 1, 62, 189, 44, 8, 6, 1, 250, 103, 189, 44, 8, 6, 1, 247, 223, 189, + 44, 8, 6, 1, 242, 153, 189, 44, 8, 6, 1, 72, 189, 44, 8, 6, 1, 238, 5, + 189, 44, 8, 6, 1, 236, 156, 189, 44, 8, 6, 1, 234, 247, 189, 44, 8, 6, 1, + 70, 189, 44, 8, 6, 1, 227, 251, 189, 44, 8, 6, 1, 227, 118, 189, 44, 8, + 6, 1, 156, 189, 44, 8, 6, 1, 223, 243, 189, 44, 8, 6, 1, 220, 214, 189, + 44, 8, 6, 1, 74, 189, 44, 8, 6, 1, 216, 226, 189, 44, 8, 6, 1, 214, 167, + 189, 44, 8, 6, 1, 146, 189, 44, 8, 6, 1, 212, 122, 189, 44, 8, 6, 1, 207, + 83, 189, 44, 8, 6, 1, 66, 189, 44, 8, 6, 1, 203, 168, 189, 44, 8, 6, 1, + 201, 147, 189, 44, 8, 6, 1, 200, 195, 189, 44, 8, 6, 1, 200, 123, 189, + 44, 8, 6, 1, 199, 157, 213, 220, 222, 82, 54, 213, 220, 222, 79, 54, 189, + 95, 8, 6, 1, 62, 189, 95, 8, 6, 1, 250, 103, 189, 95, 8, 6, 1, 247, 223, + 189, 95, 8, 6, 1, 242, 153, 189, 95, 8, 6, 1, 72, 189, 95, 8, 6, 1, 238, + 5, 189, 95, 8, 6, 1, 236, 156, 189, 95, 8, 6, 1, 234, 247, 189, 95, 8, 6, + 1, 70, 189, 95, 8, 6, 1, 227, 251, 189, 95, 8, 6, 1, 227, 118, 189, 95, + 8, 6, 1, 156, 189, 95, 8, 6, 1, 223, 243, 189, 95, 8, 6, 1, 220, 214, + 189, 95, 8, 6, 1, 74, 189, 95, 8, 6, 1, 216, 226, 189, 95, 8, 6, 1, 214, + 167, 189, 95, 8, 6, 1, 146, 189, 95, 8, 6, 1, 212, 122, 189, 95, 8, 6, 1, + 207, 83, 189, 95, 8, 6, 1, 66, 189, 95, 8, 6, 1, 203, 168, 189, 95, 8, 6, + 1, 201, 147, 189, 95, 8, 6, 1, 200, 195, 189, 95, 8, 6, 1, 200, 123, 189, + 95, 8, 6, 1, 199, 157, 242, 232, 189, 95, 8, 6, 1, 216, 226, 189, 95, + 232, 233, 189, 95, 172, 189, 95, 212, 64, 189, 95, 252, 89, 189, 95, 201, + 65, 52, 240, 230, 95, 246, 136, 95, 243, 26, 95, 236, 210, 95, 232, 224, + 95, 220, 7, 95, 219, 255, 95, 217, 98, 95, 209, 5, 95, 115, 3, 238, 43, + 81, 95, 202, 169, 95, 126, 242, 153, 95, 211, 196, 211, 209, 95, 120, + 227, 118, 95, 236, 229, 227, 118, 95, 238, 232, 227, 118, 95, 237, 61, + 215, 100, 102, 95, 210, 136, 215, 100, 102, 95, 204, 149, 215, 100, 105, + 95, 209, 93, 216, 226, 95, 112, 233, 83, 204, 160, 216, 226, 95, 8, 4, 1, + 242, 153, 95, 234, 142, 95, 234, 141, 95, 234, 74, 95, 224, 66, 95, 209, + 201, 95, 204, 24, 95, 202, 190, 213, 162, 228, 100, 16, 1, 62, 213, 162, + 228, 100, 16, 1, 250, 103, 213, 162, 228, 100, 16, 1, 247, 223, 213, 162, + 228, 100, 16, 1, 242, 153, 213, 162, 228, 100, 16, 1, 72, 213, 162, 228, + 100, 16, 1, 238, 5, 213, 162, 228, 100, 16, 1, 236, 156, 213, 162, 228, + 100, 16, 1, 234, 247, 213, 162, 228, 100, 16, 1, 70, 213, 162, 228, 100, + 16, 1, 227, 251, 213, 162, 228, 100, 16, 1, 227, 118, 213, 162, 228, 100, + 16, 1, 156, 213, 162, 228, 100, 16, 1, 223, 243, 213, 162, 228, 100, 16, + 1, 220, 214, 213, 162, 228, 100, 16, 1, 74, 213, 162, 228, 100, 16, 1, + 216, 226, 213, 162, 228, 100, 16, 1, 214, 167, 213, 162, 228, 100, 16, 1, + 146, 213, 162, 228, 100, 16, 1, 212, 122, 213, 162, 228, 100, 16, 1, 207, + 83, 213, 162, 228, 100, 16, 1, 66, 213, 162, 228, 100, 16, 1, 203, 168, + 213, 162, 228, 100, 16, 1, 201, 147, 213, 162, 228, 100, 16, 1, 200, 195, + 213, 162, 228, 100, 16, 1, 200, 123, 213, 162, 228, 100, 16, 1, 199, 157, + 52, 177, 233, 201, 95, 69, 226, 76, 95, 69, 212, 64, 95, 12, 203, 244, + 230, 169, 95, 12, 203, 244, 230, 173, 95, 12, 203, 244, 230, 181, 95, 69, + 241, 175, 95, 12, 203, 244, 230, 188, 95, 12, 203, 244, 230, 175, 95, 12, + 203, 244, 230, 147, 95, 12, 203, 244, 230, 174, 95, 12, 203, 244, 230, + 187, 95, 12, 203, 244, 230, 161, 95, 12, 203, 244, 230, 154, 95, 12, 203, + 244, 230, 163, 95, 12, 203, 244, 230, 184, 95, 12, 203, 244, 230, 170, + 95, 12, 203, 244, 230, 186, 95, 12, 203, 244, 230, 162, 95, 12, 203, 244, + 230, 185, 95, 12, 203, 244, 230, 148, 95, 12, 203, 244, 230, 153, 95, 12, + 203, 244, 230, 146, 95, 12, 203, 244, 230, 176, 95, 12, 203, 244, 230, + 178, 95, 12, 203, 244, 230, 156, 95, 12, 203, 244, 230, 167, 95, 12, 203, + 244, 230, 165, 95, 12, 203, 244, 230, 191, 95, 12, 203, 244, 230, 190, + 95, 12, 203, 244, 230, 144, 95, 12, 203, 244, 230, 171, 95, 12, 203, 244, + 230, 189, 95, 12, 203, 244, 230, 180, 95, 12, 203, 244, 230, 166, 95, 12, + 203, 244, 230, 145, 95, 12, 203, 244, 230, 168, 95, 12, 203, 244, 230, + 150, 95, 12, 203, 244, 230, 149, 95, 12, 203, 244, 230, 179, 95, 12, 203, + 244, 230, 157, 95, 12, 203, 244, 230, 159, 95, 12, 203, 244, 230, 160, + 95, 12, 203, 244, 230, 152, 95, 12, 203, 244, 230, 183, 95, 12, 203, 244, + 230, 177, 95, 12, 203, 244, 230, 143, 205, 146, 210, 55, 248, 69, 12, + 203, 244, 230, 158, 205, 146, 210, 55, 248, 69, 12, 203, 244, 230, 190, + 205, 146, 210, 55, 248, 69, 12, 203, 244, 230, 188, 205, 146, 210, 55, + 248, 69, 12, 203, 244, 230, 172, 205, 146, 210, 55, 248, 69, 12, 203, + 244, 230, 155, 205, 146, 210, 55, 248, 69, 12, 203, 244, 230, 168, 205, + 146, 210, 55, 248, 69, 12, 203, 244, 230, 151, 205, 146, 210, 55, 248, + 69, 12, 203, 244, 230, 182, 205, 146, 210, 55, 248, 69, 12, 203, 244, + 230, 164, 44, 198, 198, 251, 223, 44, 198, 198, 251, 249, 242, 164, 237, + 11, 246, 110, 204, 9, 219, 130, 3, 208, 106, 207, 223, 119, 221, 62, 207, + 222, 246, 140, 250, 156, 239, 111, 207, 221, 119, 248, 25, 213, 221, 248, + 51, 250, 156, 219, 129, 201, 83, 201, 77, 202, 184, 221, 172, 201, 67, + 239, 18, 235, 124, 238, 59, 239, 18, 235, 124, 251, 92, 239, 18, 235, + 124, 250, 174, 235, 124, 3, 222, 31, 220, 8, 221, 82, 99, 201, 69, 242, + 244, 221, 82, 99, 237, 73, 214, 88, 221, 82, 99, 201, 69, 235, 157, 221, + 82, 99, 236, 183, 221, 82, 99, 201, 97, 235, 157, 221, 82, 99, 225, 64, + 214, 88, 221, 82, 99, 201, 97, 242, 244, 221, 82, 99, 242, 244, 221, 81, + 220, 8, 221, 82, 3, 237, 189, 237, 73, 214, 88, 221, 82, 3, 237, 189, + 225, 64, 214, 88, 221, 82, 3, 237, 189, 236, 183, 221, 82, 3, 237, 189, + 207, 229, 3, 237, 189, 235, 121, 208, 109, 209, 255, 208, 109, 206, 94, + 63, 239, 145, 64, 207, 228, 64, 207, 229, 3, 4, 246, 101, 64, 207, 229, + 248, 237, 246, 101, 64, 207, 229, 248, 237, 246, 102, 3, 213, 222, 246, + 102, 3, 213, 222, 246, 102, 3, 209, 35, 246, 102, 3, 224, 193, 246, 102, + 3, 205, 150, 237, 12, 201, 17, 248, 128, 237, 189, 233, 118, 240, 200, + 207, 16, 248, 1, 246, 242, 211, 188, 238, 53, 205, 108, 241, 169, 205, + 108, 216, 177, 205, 108, 247, 183, 233, 118, 216, 29, 204, 205, 246, 246, + 248, 131, 212, 232, 234, 73, 207, 226, 248, 131, 239, 22, 76, 222, 189, + 239, 22, 76, 213, 83, 234, 100, 236, 229, 225, 36, 246, 100, 222, 162, + 225, 35, 237, 172, 225, 35, 225, 36, 237, 19, 228, 118, 201, 16, 220, + 247, 205, 178, 250, 138, 235, 81, 222, 49, 201, 81, 206, 239, 225, 5, + 249, 85, 215, 157, 213, 170, 251, 10, 235, 64, 251, 10, 216, 67, 216, 70, + 246, 247, 208, 60, 234, 208, 209, 68, 76, 215, 137, 222, 72, 217, 79, + 248, 112, 215, 57, 225, 16, 213, 84, 242, 250, 213, 84, 249, 97, 243, 29, + 213, 83, 242, 192, 26, 213, 83, 208, 94, 248, 82, 208, 240, 248, 62, 236, + 209, 236, 205, 212, 253, 207, 179, 215, 59, 242, 7, 217, 123, 207, 197, + 236, 206, 209, 226, 237, 72, 247, 177, 3, 207, 172, 241, 112, 209, 23, + 232, 232, 242, 248, 210, 73, 232, 231, 232, 232, 242, 248, 239, 170, 243, + 28, 246, 208, 148, 247, 148, 224, 93, 242, 183, 233, 190, 215, 61, 209, + 239, 248, 218, 248, 78, 215, 62, 76, 237, 1, 243, 27, 236, 246, 26, 226, + 95, 206, 198, 201, 3, 234, 177, 212, 41, 248, 95, 26, 242, 202, 201, 13, + 235, 128, 246, 88, 235, 128, 205, 63, 239, 151, 248, 248, 221, 30, 246, + 117, 248, 248, 221, 29, 249, 132, 248, 94, 236, 246, 26, 226, 96, 3, 215, + 126, 248, 95, 3, 215, 74, 243, 17, 215, 76, 213, 85, 200, 227, 215, 20, + 248, 159, 247, 176, 227, 245, 246, 200, 205, 108, 237, 155, 246, 199, + 237, 75, 237, 76, 208, 238, 249, 96, 216, 105, 215, 75, 243, 65, 249, 97, + 206, 243, 205, 108, 242, 232, 237, 47, 215, 158, 241, 166, 227, 236, 240, + 193, 247, 123, 208, 59, 201, 17, 246, 224, 221, 82, 202, 221, 247, 42, + 211, 222, 211, 249, 235, 87, 247, 144, 234, 128, 3, 205, 224, 217, 79, + 206, 107, 225, 28, 248, 88, 76, 237, 23, 221, 174, 222, 69, 213, 142, + 213, 85, 32, 226, 213, 3, 227, 244, 208, 30, 221, 208, 224, 229, 209, 66, + 243, 34, 226, 92, 249, 4, 250, 184, 32, 218, 204, 249, 4, 241, 118, 32, + 218, 204, 237, 90, 236, 214, 251, 226, 206, 9, 247, 124, 233, 120, 237, + 121, 201, 37, 212, 243, 246, 89, 237, 67, 215, 91, 26, 237, 71, 221, 208, + 221, 48, 247, 162, 246, 159, 234, 132, 250, 193, 216, 180, 205, 158, 234, + 157, 246, 145, 206, 158, 206, 10, 246, 131, 248, 121, 216, 22, 250, 191, + 202, 230, 236, 63, 241, 10, 234, 45, 209, 59, 222, 230, 248, 171, 236, + 64, 241, 56, 248, 81, 237, 25, 215, 125, 247, 132, 32, 218, 209, 221, 21, + 32, 218, 204, 211, 235, 235, 34, 32, 226, 212, 205, 39, 202, 210, 32, + 211, 214, 212, 155, 210, 12, 3, 211, 252, 206, 163, 213, 241, 26, 249, + 97, 209, 85, 26, 209, 85, 248, 105, 249, 59, 26, 233, 183, 246, 248, 237, + 53, 209, 34, 212, 156, 207, 202, 208, 205, 222, 69, 205, 64, 233, 121, + 213, 242, 251, 93, 236, 254, 212, 169, 236, 254, 207, 174, 201, 53, 224, + 198, 235, 107, 213, 243, 221, 69, 213, 243, 247, 135, 242, 241, 249, 56, + 26, 249, 97, 202, 183, 237, 111, 233, 204, 208, 88, 26, 249, 97, 232, + 232, 233, 204, 208, 88, 26, 214, 217, 207, 23, 206, 163, 216, 198, 26, + 249, 97, 209, 36, 247, 140, 221, 63, 247, 160, 249, 7, 3, 204, 9, 248, + 27, 243, 48, 233, 110, 248, 25, 246, 139, 241, 122, 233, 110, 248, 26, + 246, 129, 248, 26, 241, 114, 241, 115, 228, 19, 220, 118, 216, 111, 208, + 119, 233, 110, 248, 26, 233, 110, 3, 236, 47, 217, 115, 248, 26, 227, + 236, 215, 67, 217, 114, 238, 58, 215, 67, 217, 114, 233, 119, 249, 81, + 250, 128, 206, 171, 222, 230, 233, 115, 224, 60, 233, 115, 243, 32, 208, + 72, 211, 221, 241, 125, 208, 72, 237, 178, 228, 0, 225, 76, 227, 236, + 247, 113, 238, 58, 247, 113, 64, 216, 41, 63, 216, 41, 201, 75, 64, 237, + 53, 201, 75, 63, 237, 53, 212, 231, 63, 212, 231, 225, 168, 249, 115, + 213, 241, 26, 209, 204, 248, 86, 26, 48, 251, 88, 238, 185, 67, 237, 62, + 204, 126, 238, 185, 67, 237, 62, 204, 123, 238, 185, 67, 237, 62, 204, + 121, 238, 185, 67, 237, 62, 204, 119, 238, 185, 67, 237, 62, 204, 117, + 213, 204, 221, 60, 216, 235, 201, 83, 248, 31, 242, 255, 206, 2, 224, + 245, 213, 244, 247, 111, 239, 158, 242, 240, 201, 40, 209, 43, 209, 41, + 233, 120, 213, 216, 235, 112, 210, 59, 221, 100, 212, 235, 246, 234, 240, + 200, 215, 168, 248, 122, 238, 201, 217, 126, 208, 218, 210, 54, 248, 30, + 251, 51, 233, 189, 225, 161, 248, 246, 237, 71, 205, 63, 237, 71, 248, + 129, 204, 182, 234, 155, 246, 235, 249, 132, 246, 235, 236, 199, 249, + 132, 246, 235, 248, 162, 216, 43, 226, 86, 215, 80, 239, 148, 247, 164, + 249, 120, 247, 164, 240, 192, 221, 61, 237, 189, 243, 0, 237, 189, 206, + 3, 237, 189, 213, 245, 237, 189, 247, 112, 237, 189, 239, 159, 237, 189, + 208, 203, 201, 40, 233, 121, 237, 189, 221, 101, 237, 189, 240, 201, 237, + 189, 215, 169, 237, 189, 236, 203, 237, 189, 234, 205, 237, 189, 200, + 253, 237, 189, 249, 2, 237, 189, 216, 159, 237, 189, 215, 169, 218, 216, + 216, 85, 215, 7, 246, 219, 238, 15, 238, 22, 239, 21, 218, 216, 221, 58, + 205, 163, 64, 115, 215, 96, 249, 127, 228, 103, 64, 127, 215, 96, 249, + 127, 228, 103, 64, 49, 215, 96, 249, 127, 228, 103, 64, 51, 215, 96, 249, + 127, 228, 103, 237, 65, 234, 200, 54, 201, 75, 234, 200, 54, 217, 99, + 234, 200, 54, 206, 33, 115, 54, 206, 33, 127, 54, 246, 130, 234, 175, 54, + 176, 234, 175, 54, 242, 226, 200, 249, 234, 157, 238, 18, 220, 30, 207, + 82, 227, 226, 239, 153, 226, 148, 248, 173, 200, 249, 246, 103, 214, 198, + 234, 179, 215, 58, 222, 170, 210, 5, 250, 151, 210, 5, 234, 58, 210, 5, + 200, 249, 212, 10, 200, 249, 248, 104, 236, 252, 247, 249, 228, 118, 209, + 155, 247, 248, 228, 118, 209, 155, 248, 76, 235, 140, 222, 180, 200, 250, + 237, 169, 222, 181, 26, 200, 251, 233, 198, 234, 174, 120, 222, 41, 233, + 198, 234, 174, 120, 200, 248, 233, 198, 234, 174, 215, 88, 217, 113, 200, + 251, 3, 248, 11, 239, 19, 248, 52, 3, 203, 50, 216, 11, 3, 248, 133, 234, + 221, 222, 181, 3, 235, 47, 215, 205, 222, 166, 222, 181, 3, 204, 191, + 217, 91, 222, 180, 217, 91, 200, 250, 249, 131, 243, 49, 200, 234, 215, + 12, 227, 236, 217, 109, 227, 236, 235, 111, 235, 169, 249, 132, 251, 74, + 238, 27, 251, 132, 251, 133, 221, 91, 228, 123, 209, 80, 228, 92, 241, + 111, 216, 10, 235, 41, 242, 12, 224, 159, 220, 142, 215, 87, 237, 190, + 222, 130, 234, 220, 249, 75, 215, 90, 207, 102, 215, 161, 226, 130, 81, + 224, 60, 224, 236, 213, 26, 236, 5, 208, 78, 226, 129, 248, 87, 243, 2, + 3, 234, 127, 201, 60, 249, 0, 234, 127, 248, 46, 234, 127, 120, 234, 125, + 208, 236, 234, 127, 235, 57, 234, 127, 234, 128, 3, 48, 248, 127, 234, + 127, 235, 64, 234, 127, 200, 44, 234, 127, 214, 199, 234, 127, 234, 128, + 3, 213, 85, 213, 99, 234, 125, 234, 128, 241, 166, 241, 65, 210, 86, 3, + 35, 73, 228, 73, 238, 204, 162, 248, 23, 251, 73, 99, 248, 113, 209, 71, + 99, 246, 81, 99, 208, 212, 207, 181, 99, 239, 145, 241, 245, 99, 215, + 162, 76, 215, 81, 237, 37, 248, 185, 240, 231, 99, 208, 228, 249, 96, + 206, 52, 249, 96, 64, 237, 24, 233, 83, 215, 94, 99, 221, 105, 249, 113, + 242, 195, 238, 45, 80, 240, 194, 54, 242, 246, 247, 133, 249, 80, 3, 200, + 42, 54, 249, 80, 3, 240, 194, 54, 249, 80, 3, 238, 61, 54, 249, 80, 3, + 215, 56, 54, 221, 105, 3, 201, 11, 247, 16, 3, 182, 205, 104, 26, 200, + 42, 54, 211, 199, 216, 9, 243, 70, 248, 50, 221, 162, 237, 29, 240, 253, + 217, 37, 241, 2, 239, 106, 237, 97, 237, 9, 176, 237, 97, 237, 9, 216, + 196, 3, 242, 198, 216, 196, 237, 182, 203, 228, 247, 170, 206, 197, 247, + 170, 247, 134, 228, 103, 247, 16, 3, 182, 205, 103, 247, 16, 3, 191, 205, + 103, 249, 77, 247, 15, 246, 116, 214, 194, 212, 221, 214, 194, 216, 133, + 208, 68, 212, 163, 205, 95, 212, 163, 248, 109, 207, 21, 225, 33, 218, + 207, 218, 208, 3, 241, 165, 243, 1, 246, 110, 248, 110, 176, 248, 110, + 235, 64, 248, 110, 248, 127, 248, 110, 217, 32, 248, 110, 248, 107, 220, + 136, 249, 117, 211, 207, 222, 42, 206, 176, 213, 184, 216, 194, 237, 152, + 222, 230, 211, 248, 251, 48, 214, 218, 251, 232, 224, 62, 247, 0, 222, + 54, 216, 253, 205, 111, 228, 114, 205, 111, 216, 203, 239, 74, 99, 228, + 111, 238, 144, 238, 145, 3, 191, 55, 56, 246, 110, 222, 195, 3, 224, 52, + 237, 53, 246, 110, 222, 195, 3, 213, 220, 237, 53, 176, 222, 195, 3, 213, + 220, 237, 53, 176, 222, 195, 3, 224, 52, 237, 53, 215, 64, 215, 65, 233, + 124, 220, 4, 221, 134, 215, 213, 221, 134, 215, 214, 3, 87, 55, 250, 156, + 225, 28, 202, 233, 221, 133, 221, 134, 215, 214, 217, 116, 218, 242, 221, + 134, 215, 212, 251, 49, 3, 249, 66, 247, 162, 247, 163, 3, 237, 46, 202, + 230, 247, 162, 206, 173, 213, 236, 202, 229, 237, 90, 214, 250, 215, 71, + 208, 89, 215, 33, 249, 6, 204, 145, 87, 250, 199, 246, 112, 87, 26, 98, + 176, 246, 156, 250, 199, 246, 112, 87, 26, 98, 176, 246, 156, 250, 200, + 3, 44, 112, 216, 242, 246, 112, 191, 26, 182, 176, 246, 156, 250, 199, + 251, 47, 191, 26, 182, 176, 246, 156, 250, 199, 128, 248, 49, 99, 122, + 248, 49, 99, 208, 233, 3, 247, 155, 97, 208, 232, 208, 233, 3, 112, 209, + 1, 201, 77, 208, 233, 3, 126, 209, 1, 201, 76, 249, 49, 238, 204, 215, + 118, 225, 23, 222, 207, 235, 128, 213, 41, 222, 207, 235, 128, 224, 104, + 3, 228, 84, 216, 47, 246, 110, 224, 104, 3, 226, 214, 226, 214, 224, 103, + 176, 224, 103, 248, 230, 248, 231, 3, 247, 155, 97, 248, 108, 224, 167, + 99, 213, 237, 247, 243, 249, 130, 3, 98, 55, 56, 238, 171, 3, 98, 55, 56, + 217, 79, 3, 238, 43, 134, 3, 49, 51, 55, 56, 209, 9, 3, 87, 55, 56, 205, + 158, 3, 182, 55, 56, 218, 242, 112, 203, 253, 238, 230, 99, 226, 211, + 206, 166, 228, 78, 16, 36, 8, 6, 224, 235, 228, 78, 16, 36, 8, 4, 224, + 235, 228, 78, 16, 36, 218, 94, 228, 78, 16, 36, 207, 116, 228, 78, 16, + 36, 8, 224, 235, 237, 77, 238, 204, 205, 153, 200, 225, 234, 206, 218, + 77, 26, 248, 115, 233, 205, 215, 143, 221, 207, 206, 174, 242, 216, 249, + 97, 209, 106, 215, 98, 208, 110, 3, 101, 240, 182, 227, 236, 16, 36, 248, + 243, 205, 93, 238, 187, 63, 52, 247, 243, 64, 52, 247, 243, 225, 71, 213, + 170, 246, 155, 225, 71, 248, 127, 246, 155, 225, 71, 217, 32, 241, 64, + 225, 71, 248, 127, 241, 64, 4, 217, 32, 241, 64, 4, 248, 127, 241, 64, + 203, 227, 213, 170, 205, 98, 239, 166, 213, 170, 205, 98, 203, 227, 4, + 213, 170, 205, 98, 239, 166, 4, 213, 170, 205, 98, 224, 54, 51, 210, 101, + 64, 246, 155, 203, 225, 51, 210, 101, 64, 246, 155, 44, 242, 235, 215, + 84, 242, 235, 215, 85, 3, 234, 212, 57, 242, 235, 215, 84, 218, 211, 49, + 210, 170, 3, 126, 240, 180, 218, 211, 51, 210, 170, 3, 126, 240, 180, 16, + 36, 222, 144, 247, 22, 64, 8, 242, 234, 80, 8, 242, 234, 247, 60, 242, + 234, 217, 87, 99, 239, 169, 76, 216, 71, 227, 103, 221, 74, 207, 110, + 222, 37, 3, 219, 114, 248, 65, 248, 83, 76, 233, 35, 246, 114, 237, 190, + 112, 217, 132, 246, 114, 237, 190, 120, 217, 132, 246, 114, 237, 190, + 126, 217, 132, 246, 114, 237, 190, 236, 229, 217, 132, 246, 114, 237, + 190, 237, 61, 217, 132, 246, 114, 237, 190, 209, 106, 217, 132, 246, 114, + 237, 190, 210, 136, 217, 132, 246, 114, 237, 190, 238, 232, 217, 132, + 246, 114, 237, 190, 219, 114, 217, 132, 246, 114, 237, 190, 206, 167, + 217, 132, 246, 114, 237, 190, 238, 200, 217, 132, 246, 114, 237, 190, + 204, 165, 217, 132, 246, 114, 237, 190, 217, 72, 246, 114, 237, 190, 204, + 139, 246, 114, 237, 190, 206, 39, 246, 114, 237, 190, 236, 225, 246, 114, + 237, 190, 237, 59, 246, 114, 237, 190, 209, 102, 246, 114, 237, 190, 210, + 134, 246, 114, 237, 190, 238, 231, 246, 114, 237, 190, 219, 112, 246, + 114, 237, 190, 206, 165, 246, 114, 237, 190, 238, 198, 246, 114, 237, + 190, 204, 163, 51, 208, 232, 51, 208, 233, 3, 112, 209, 1, 201, 77, 51, + 208, 233, 3, 126, 209, 1, 201, 76, 248, 18, 248, 19, 3, 209, 1, 201, 76, + 213, 25, 248, 230, 248, 110, 247, 153, 222, 167, 246, 113, 63, 209, 81, + 26, 242, 233, 218, 242, 215, 149, 233, 197, 222, 181, 228, 118, 247, 251, + 207, 242, 224, 228, 209, 69, 217, 34, 208, 194, 241, 250, 207, 224, 208, + 221, 208, 222, 201, 61, 227, 148, 222, 181, 242, 11, 49, 234, 200, 206, + 176, 213, 184, 206, 176, 213, 185, 3, 216, 195, 51, 234, 200, 206, 176, + 213, 184, 64, 205, 139, 206, 175, 63, 205, 139, 206, 175, 206, 176, 217, + 79, 205, 158, 76, 221, 130, 246, 134, 221, 134, 215, 213, 249, 130, 76, + 238, 144, 208, 115, 238, 144, 238, 145, 3, 224, 193, 237, 16, 238, 144, + 216, 48, 119, 208, 115, 238, 144, 224, 166, 216, 132, 63, 214, 194, 224, + 54, 49, 216, 46, 224, 54, 49, 249, 92, 216, 47, 224, 54, 49, 236, 231, + 216, 47, 224, 54, 49, 216, 189, 224, 54, 49, 242, 249, 49, 200, 219, 234, + 199, 204, 185, 217, 99, 234, 200, 54, 213, 220, 234, 200, 3, 237, 82, + 208, 211, 213, 105, 213, 220, 234, 200, 3, 237, 82, 208, 211, 213, 105, + 206, 33, 115, 54, 213, 105, 206, 33, 127, 54, 213, 105, 202, 232, 234, + 199, 213, 105, 234, 200, 3, 101, 237, 87, 238, 32, 213, 220, 234, 200, 3, + 216, 110, 248, 206, 101, 26, 213, 27, 237, 81, 64, 127, 215, 96, 49, 234, + 200, 228, 103, 209, 173, 64, 49, 215, 96, 228, 103, 209, 173, 64, 51, + 215, 96, 228, 103, 209, 173, 63, 49, 215, 96, 228, 103, 209, 173, 63, 51, + 215, 96, 228, 103, 63, 49, 215, 96, 249, 127, 228, 103, 63, 51, 215, 96, + 249, 127, 228, 103, 209, 173, 64, 115, 215, 96, 228, 103, 209, 173, 64, + 127, 215, 96, 228, 103, 209, 173, 63, 115, 215, 96, 228, 103, 209, 173, + 63, 127, 215, 96, 228, 103, 63, 115, 215, 96, 249, 127, 228, 103, 63, + 127, 215, 96, 249, 127, 228, 103, 63, 234, 127, 241, 110, 243, 70, 226, + 213, 26, 221, 60, 126, 220, 12, 243, 69, 215, 8, 215, 104, 247, 172, 63, + 234, 165, 210, 55, 237, 29, 240, 253, 64, 234, 165, 210, 55, 237, 29, + 240, 253, 209, 23, 210, 55, 237, 29, 240, 253, 206, 235, 247, 117, 201, + 6, 226, 212, 112, 247, 244, 221, 60, 120, 247, 244, 221, 60, 126, 247, + 244, 221, 60, 205, 130, 40, 216, 9, 243, 70, 234, 165, 240, 253, 211, + 209, 215, 9, 232, 225, 237, 152, 232, 225, 217, 37, 241, 3, 232, 225, + 240, 205, 3, 206, 126, 240, 205, 3, 206, 127, 26, 215, 198, 240, 205, 3, + 215, 198, 236, 216, 3, 215, 198, 236, 216, 3, 205, 238, 236, 216, 3, 251, + 86, 200, 195, 63, 237, 9, 237, 9, 176, 237, 9, 247, 134, 124, 240, 238, + 247, 134, 237, 97, 248, 78, 237, 97, 247, 185, 238, 181, 218, 209, 238, + 181, 218, 210, 216, 195, 238, 181, 218, 210, 216, 201, 218, 209, 218, + 210, 216, 195, 218, 210, 216, 201, 238, 181, 240, 204, 238, 181, 216, + 195, 238, 181, 216, 193, 240, 204, 216, 195, 216, 193, 201, 87, 208, 218, + 218, 210, 216, 201, 208, 218, 247, 171, 216, 201, 241, 110, 201, 15, 221, + 159, 222, 120, 216, 244, 246, 112, 51, 26, 49, 210, 170, 250, 199, 247, + 155, 200, 195, 228, 109, 237, 3, 209, 90, 99, 241, 164, 237, 3, 209, 90, + 99, 243, 71, 40, 226, 214, 212, 244, 220, 4, 216, 196, 3, 44, 206, 126, + 208, 80, 247, 15, 242, 41, 226, 95, 224, 160, 208, 231, 234, 137, 228, + 118, 209, 155, 126, 213, 195, 56, 126, 213, 195, 57, 126, 213, 195, 225, + 28, 126, 213, 195, 213, 46, 49, 208, 228, 248, 35, 51, 208, 228, 248, 35, + 120, 208, 228, 248, 34, 126, 208, 228, 248, 34, 49, 206, 52, 248, 35, 51, + 206, 52, 248, 35, 49, 251, 73, 248, 35, 51, 251, 73, 248, 35, 221, 86, + 248, 35, 224, 194, 221, 86, 248, 35, 224, 194, 221, 85, 249, 94, 100, 3, + 249, 93, 249, 94, 135, 200, 195, 249, 94, 100, 3, 135, 200, 195, 249, 94, + 27, 135, 200, 195, 249, 94, 100, 3, 27, 135, 200, 195, 162, 247, 7, 81, + 249, 94, 100, 3, 27, 247, 6, 200, 233, 222, 164, 221, 65, 236, 184, 205, + 180, 205, 135, 208, 101, 76, 224, 208, 209, 156, 76, 227, 237, 221, 46, + 235, 61, 237, 189, 235, 61, 237, 190, 3, 209, 47, 238, 15, 237, 190, 3, + 206, 193, 76, 227, 150, 209, 47, 237, 190, 3, 176, 221, 58, 209, 47, 237, + 190, 3, 176, 221, 59, 26, 209, 47, 238, 15, 209, 47, 237, 190, 3, 176, + 221, 59, 26, 246, 83, 207, 180, 209, 47, 237, 190, 3, 176, 221, 59, 26, + 206, 0, 238, 15, 209, 47, 237, 190, 3, 234, 211, 209, 47, 237, 190, 3, + 233, 123, 201, 8, 237, 189, 209, 47, 237, 190, 3, 209, 47, 238, 15, 237, + 190, 211, 240, 241, 144, 237, 1, 213, 145, 237, 189, 209, 47, 237, 190, + 3, 234, 126, 238, 15, 209, 47, 237, 190, 3, 207, 224, 209, 46, 237, 189, + 220, 10, 237, 189, 238, 34, 237, 189, 204, 3, 237, 189, 237, 190, 3, 246, + 83, 207, 180, 216, 39, 237, 189, 243, 62, 237, 189, 243, 63, 237, 189, + 226, 128, 237, 189, 237, 190, 206, 36, 35, 226, 129, 226, 128, 237, 190, + 3, 209, 47, 238, 15, 226, 128, 237, 190, 3, 246, 110, 238, 15, 237, 190, + 3, 208, 31, 205, 163, 237, 190, 3, 208, 31, 205, 164, 26, 201, 8, 238, + 22, 237, 190, 3, 208, 31, 205, 164, 26, 206, 0, 238, 15, 241, 4, 237, + 189, 200, 232, 237, 189, 251, 67, 237, 189, 215, 55, 237, 189, 242, 218, + 237, 189, 216, 13, 237, 189, 237, 190, 3, 224, 77, 76, 205, 75, 241, 4, + 247, 247, 213, 145, 237, 189, 236, 195, 237, 190, 3, 176, 221, 58, 251, + 65, 237, 189, 237, 145, 237, 189, 201, 62, 237, 189, 209, 70, 237, 189, + 205, 218, 237, 189, 235, 62, 237, 189, 224, 63, 242, 218, 237, 189, 237, + 190, 3, 176, 221, 58, 233, 72, 237, 189, 237, 190, 3, 176, 221, 59, 26, + 246, 83, 207, 180, 237, 190, 211, 211, 228, 118, 237, 146, 250, 162, 237, + 189, 237, 21, 237, 189, 209, 71, 237, 189, 240, 231, 237, 189, 237, 190, + 201, 3, 221, 58, 237, 190, 3, 222, 68, 222, 132, 235, 61, 247, 112, 237, + 190, 3, 209, 47, 238, 15, 247, 112, 237, 190, 3, 206, 193, 76, 227, 150, + 209, 47, 247, 112, 237, 190, 3, 176, 221, 58, 209, 47, 247, 112, 237, + 190, 3, 234, 126, 238, 15, 247, 112, 237, 190, 3, 200, 217, 209, 48, 226, + 128, 247, 112, 237, 190, 3, 246, 110, 238, 15, 215, 55, 247, 112, 237, + 189, 242, 218, 247, 112, 237, 189, 201, 62, 247, 112, 237, 189, 209, 64, + 236, 195, 237, 189, 209, 64, 209, 47, 237, 189, 203, 222, 237, 189, 237, + 190, 3, 212, 242, 238, 15, 237, 190, 3, 218, 242, 235, 104, 235, 240, + 237, 190, 3, 217, 99, 235, 240, 216, 11, 248, 84, 241, 159, 211, 189, + 221, 100, 234, 129, 221, 100, 208, 234, 221, 100, 234, 167, 216, 11, 213, + 219, 112, 234, 199, 216, 11, 213, 219, 248, 96, 234, 175, 228, 118, 247, + 62, 216, 11, 236, 194, 216, 11, 3, 215, 55, 237, 189, 216, 11, 3, 237, + 10, 234, 174, 157, 201, 48, 215, 96, 225, 35, 208, 254, 201, 48, 215, 96, + 225, 35, 157, 239, 14, 215, 96, 225, 35, 208, 254, 239, 14, 215, 96, 225, + 35, 204, 185, 157, 201, 48, 215, 96, 225, 35, 204, 185, 208, 254, 201, + 48, 215, 96, 225, 35, 204, 185, 157, 239, 14, 215, 96, 225, 35, 204, 185, + 208, 254, 239, 14, 215, 96, 225, 35, 157, 201, 48, 215, 96, 202, 216, + 225, 35, 208, 254, 201, 48, 215, 96, 202, 216, 225, 35, 157, 239, 14, + 215, 96, 202, 216, 225, 35, 208, 254, 239, 14, 215, 96, 202, 216, 225, + 35, 80, 157, 201, 48, 215, 96, 202, 216, 225, 35, 80, 208, 254, 201, 48, + 215, 96, 202, 216, 225, 35, 80, 157, 239, 14, 215, 96, 202, 216, 225, 35, + 80, 208, 254, 239, 14, 215, 96, 202, 216, 225, 35, 157, 201, 48, 215, 96, + 248, 32, 208, 254, 201, 48, 215, 96, 248, 32, 157, 239, 14, 215, 96, 248, + 32, 208, 254, 239, 14, 215, 96, 248, 32, 80, 157, 201, 48, 215, 96, 248, + 32, 80, 208, 254, 201, 48, 215, 96, 248, 32, 80, 157, 239, 14, 215, 96, + 248, 32, 80, 208, 254, 239, 14, 215, 96, 248, 32, 233, 196, 214, 72, 52, + 217, 21, 233, 196, 214, 72, 52, 217, 22, 228, 118, 63, 208, 193, 209, 18, + 214, 72, 52, 217, 21, 209, 18, 214, 72, 52, 217, 22, 228, 118, 63, 208, + 193, 98, 212, 248, 182, 212, 248, 87, 212, 248, 191, 212, 248, 135, 33, + 238, 82, 217, 21, 80, 135, 33, 238, 82, 217, 21, 33, 176, 238, 82, 217, + 21, 80, 33, 176, 238, 82, 217, 21, 80, 251, 90, 217, 21, 207, 183, 251, + 90, 217, 21, 43, 80, 53, 204, 185, 246, 71, 214, 63, 134, 217, 21, 43, + 80, 53, 246, 71, 214, 63, 134, 217, 21, 43, 80, 128, 53, 246, 71, 214, + 63, 134, 217, 21, 80, 228, 59, 217, 21, 43, 228, 59, 217, 21, 80, 43, + 228, 59, 217, 21, 202, 246, 80, 209, 16, 202, 246, 80, 213, 106, 209, 16, + 247, 5, 248, 121, 213, 106, 247, 5, 248, 121, 212, 248, 234, 110, 208, + 96, 224, 101, 213, 225, 247, 135, 234, 55, 205, 123, 234, 55, 205, 124, + 3, 248, 21, 218, 216, 205, 123, 222, 13, 162, 213, 226, 208, 102, 205, + 121, 205, 122, 247, 135, 247, 252, 217, 75, 247, 252, 205, 71, 247, 253, + 208, 76, 221, 163, 251, 94, 237, 78, 238, 164, 215, 88, 247, 135, 217, + 75, 215, 88, 247, 135, 206, 211, 217, 75, 206, 211, 250, 127, 217, 75, + 250, 127, 213, 177, 203, 51, 241, 140, 205, 62, 250, 194, 224, 68, 205, + 129, 221, 94, 221, 64, 213, 224, 207, 196, 213, 224, 221, 64, 247, 184, + 251, 207, 205, 120, 210, 17, 212, 218, 208, 226, 233, 177, 205, 127, 224, + 196, 83, 205, 127, 224, 196, 243, 49, 54, 215, 88, 247, 119, 213, 99, + 224, 196, 205, 95, 237, 54, 217, 79, 215, 66, 240, 185, 218, 242, 238, + 150, 54, 209, 45, 99, 218, 242, 209, 45, 99, 214, 193, 224, 149, 228, + 118, 228, 9, 215, 134, 99, 240, 212, 218, 215, 224, 149, 99, 215, 60, + 201, 83, 99, 218, 231, 201, 83, 99, 248, 184, 218, 242, 248, 183, 248, + 182, 221, 64, 248, 182, 216, 63, 218, 242, 216, 62, 246, 226, 242, 227, + 222, 36, 99, 200, 247, 99, 213, 115, 249, 132, 99, 205, 181, 201, 83, + 246, 107, 209, 231, 249, 52, 249, 50, 216, 96, 243, 33, 242, 181, 249, + 110, 246, 135, 49, 224, 32, 205, 99, 3, 212, 219, 243, 14, 214, 253, 54, + 44, 228, 92, 208, 255, 248, 75, 99, 235, 139, 99, 243, 7, 26, 225, 81, + 209, 71, 251, 248, 209, 253, 249, 109, 248, 229, 248, 230, 248, 253, 215, + 134, 76, 200, 231, 217, 129, 54, 209, 253, 205, 72, 234, 207, 26, 200, + 225, 210, 30, 217, 104, 239, 142, 221, 68, 213, 225, 205, 131, 221, 70, + 248, 120, 203, 227, 221, 174, 251, 164, 203, 227, 251, 164, 203, 227, 4, + 251, 164, 4, 251, 164, 218, 220, 251, 164, 251, 165, 241, 124, 251, 165, + 250, 205, 211, 247, 217, 75, 237, 78, 238, 164, 241, 54, 224, 101, 216, + 99, 210, 17, 211, 215, 221, 70, 211, 215, 247, 146, 139, 16, 36, 214, 68, + 139, 16, 36, 251, 166, 139, 16, 36, 237, 77, 139, 16, 36, 239, 17, 139, + 16, 36, 201, 82, 139, 16, 36, 250, 255, 139, 16, 36, 251, 0, 213, 164, + 139, 16, 36, 251, 0, 213, 163, 139, 16, 36, 251, 0, 202, 199, 139, 16, + 36, 251, 0, 202, 198, 139, 16, 36, 202, 213, 139, 16, 36, 202, 212, 139, + 16, 36, 202, 211, 139, 16, 36, 207, 235, 139, 16, 36, 215, 221, 207, 235, + 139, 16, 36, 63, 207, 235, 139, 16, 36, 222, 35, 208, 10, 139, 16, 36, + 222, 35, 208, 9, 139, 16, 36, 222, 35, 208, 8, 139, 16, 36, 246, 158, + 139, 16, 36, 212, 27, 139, 16, 36, 219, 101, 139, 16, 36, 202, 197, 139, + 16, 36, 202, 196, 139, 16, 36, 212, 249, 212, 27, 139, 16, 36, 212, 249, + 212, 26, 139, 16, 36, 235, 108, 139, 16, 36, 209, 152, 139, 16, 36, 228, + 32, 217, 28, 139, 16, 36, 228, 32, 217, 27, 139, 16, 36, 242, 239, 76, + 228, 31, 139, 16, 36, 213, 160, 76, 228, 31, 139, 16, 36, 243, 24, 217, + 28, 139, 16, 36, 228, 30, 217, 28, 139, 16, 36, 208, 11, 76, 243, 23, + 139, 16, 36, 242, 239, 76, 243, 23, 139, 16, 36, 242, 239, 76, 243, 22, + 139, 16, 36, 243, 24, 251, 41, 139, 16, 36, 212, 28, 76, 243, 24, 251, + 41, 139, 16, 36, 208, 11, 76, 212, 28, 76, 243, 23, 139, 16, 36, 203, 46, + 139, 16, 36, 205, 231, 217, 28, 139, 16, 36, 225, 39, 217, 28, 139, 16, + 36, 251, 40, 217, 28, 139, 16, 36, 208, 11, 76, 251, 39, 139, 16, 36, + 212, 28, 76, 251, 39, 139, 16, 36, 208, 11, 76, 212, 28, 76, 251, 39, + 139, 16, 36, 202, 214, 76, 251, 39, 139, 16, 36, 213, 160, 76, 251, 39, + 139, 16, 36, 213, 160, 76, 251, 38, 139, 16, 36, 213, 159, 139, 16, 36, + 213, 158, 139, 16, 36, 213, 157, 139, 16, 36, 213, 156, 139, 16, 36, 251, + 127, 139, 16, 36, 251, 126, 139, 16, 36, 222, 155, 139, 16, 36, 212, 34, + 139, 16, 36, 250, 198, 139, 16, 36, 213, 187, 139, 16, 36, 213, 186, 139, + 16, 36, 250, 130, 139, 16, 36, 248, 153, 217, 28, 139, 16, 36, 206, 230, + 139, 16, 36, 206, 229, 139, 16, 36, 214, 74, 224, 185, 139, 16, 36, 248, + 101, 139, 16, 36, 248, 100, 139, 16, 36, 248, 99, 139, 16, 36, 251, 103, + 139, 16, 36, 217, 103, 139, 16, 36, 208, 214, 139, 16, 36, 205, 229, 139, + 16, 36, 235, 30, 139, 16, 36, 201, 70, 139, 16, 36, 215, 54, 139, 16, 36, + 247, 167, 139, 16, 36, 204, 177, 139, 16, 36, 247, 137, 221, 75, 139, 16, + 36, 211, 225, 76, 227, 152, 139, 16, 36, 247, 181, 139, 16, 36, 205, 92, + 139, 16, 36, 208, 107, 205, 92, 139, 16, 36, 224, 100, 139, 16, 36, 209, + 27, 139, 16, 36, 203, 206, 139, 16, 36, 233, 121, 239, 121, 139, 16, 36, + 250, 176, 139, 16, 36, 215, 62, 250, 176, 139, 16, 36, 248, 53, 139, 16, + 36, 215, 53, 248, 53, 139, 16, 36, 251, 100, 139, 16, 36, 208, 63, 207, + 216, 208, 62, 139, 16, 36, 208, 63, 207, 216, 208, 61, 139, 16, 36, 208, + 7, 139, 16, 36, 215, 26, 139, 16, 36, 240, 248, 139, 16, 36, 240, 250, + 139, 16, 36, 240, 249, 139, 16, 36, 214, 202, 139, 16, 36, 214, 191, 139, + 16, 36, 242, 225, 139, 16, 36, 242, 224, 139, 16, 36, 242, 223, 139, 16, + 36, 242, 222, 139, 16, 36, 242, 221, 139, 16, 36, 251, 141, 139, 16, 36, + 249, 53, 76, 222, 137, 139, 16, 36, 249, 53, 76, 203, 78, 139, 16, 36, + 213, 113, 139, 16, 36, 233, 113, 139, 16, 36, 219, 129, 139, 16, 36, 241, + 232, 139, 16, 36, 221, 89, 139, 16, 36, 167, 239, 156, 139, 16, 36, 167, + 217, 1, 63, 225, 23, 228, 15, 51, 205, 98, 63, 203, 227, 228, 15, 51, + 205, 98, 63, 213, 41, 228, 15, 51, 205, 98, 63, 239, 166, 228, 15, 51, + 205, 98, 63, 209, 64, 4, 246, 155, 222, 66, 27, 64, 246, 155, 27, 64, + 246, 155, 80, 64, 246, 155, 202, 246, 80, 64, 246, 155, 238, 26, 80, 64, + 246, 155, 64, 246, 156, 243, 45, 63, 4, 246, 155, 212, 221, 206, 231, 63, + 205, 226, 208, 193, 63, 209, 64, 4, 208, 193, 162, 64, 208, 193, 222, 66, + 64, 208, 193, 27, 64, 208, 193, 80, 64, 208, 193, 202, 246, 80, 64, 208, + 193, 238, 26, 80, 64, 208, 193, 64, 52, 243, 45, 63, 202, 246, 4, 208, + 193, 64, 52, 243, 45, 63, 222, 66, 208, 193, 52, 206, 231, 63, 205, 226, + 241, 64, 63, 202, 246, 4, 241, 64, 63, 222, 66, 4, 241, 64, 64, 241, 65, + 243, 45, 63, 202, 246, 4, 241, 64, 64, 241, 65, 243, 45, 63, 222, 66, + 241, 64, 241, 65, 206, 231, 63, 205, 226, 224, 49, 63, 202, 246, 4, 224, + 49, 63, 222, 66, 4, 224, 49, 64, 224, 50, 243, 45, 63, 4, 224, 49, 206, + 77, 31, 242, 234, 162, 31, 242, 234, 222, 66, 31, 242, 234, 27, 31, 242, + 234, 202, 246, 27, 31, 242, 234, 202, 246, 80, 31, 242, 234, 238, 26, 80, + 31, 242, 234, 206, 77, 212, 24, 162, 212, 24, 222, 66, 212, 24, 27, 212, + 24, 80, 212, 24, 202, 246, 80, 212, 24, 238, 26, 80, 212, 24, 162, 237, + 61, 208, 207, 250, 165, 222, 66, 237, 61, 208, 207, 250, 165, 27, 237, + 61, 208, 207, 250, 165, 80, 237, 61, 208, 207, 250, 165, 202, 246, 80, + 237, 61, 208, 207, 250, 165, 238, 26, 80, 237, 61, 208, 207, 250, 165, + 162, 209, 106, 208, 207, 250, 165, 222, 66, 209, 106, 208, 207, 250, 165, + 27, 209, 106, 208, 207, 250, 165, 80, 209, 106, 208, 207, 250, 165, 202, + 246, 80, 209, 106, 208, 207, 250, 165, 238, 26, 80, 209, 106, 208, 207, + 250, 165, 162, 238, 232, 208, 207, 250, 165, 222, 66, 238, 232, 208, 207, + 250, 165, 27, 238, 232, 208, 207, 250, 165, 80, 238, 232, 208, 207, 250, + 165, 202, 246, 80, 238, 232, 208, 207, 250, 165, 162, 126, 215, 98, 63, + 208, 109, 222, 66, 126, 215, 98, 63, 208, 109, 126, 215, 98, 63, 208, + 109, 222, 66, 126, 215, 98, 215, 155, 208, 109, 162, 236, 229, 215, 98, + 63, 208, 109, 222, 66, 236, 229, 215, 98, 63, 208, 109, 236, 229, 215, + 98, 63, 208, 109, 222, 66, 236, 229, 215, 98, 215, 155, 208, 109, 213, + 106, 162, 236, 229, 215, 98, 215, 155, 208, 109, 162, 237, 61, 215, 98, + 63, 208, 109, 80, 237, 61, 215, 98, 63, 208, 109, 222, 66, 209, 106, 215, + 98, 63, 208, 109, 80, 209, 106, 215, 98, 63, 208, 109, 209, 106, 215, 98, + 215, 155, 208, 109, 222, 66, 238, 232, 215, 98, 63, 208, 109, 80, 238, + 232, 215, 98, 63, 208, 109, 202, 246, 80, 238, 232, 215, 98, 63, 208, + 109, 80, 238, 232, 215, 98, 215, 155, 208, 109, 162, 204, 165, 215, 98, + 63, 208, 109, 80, 204, 165, 215, 98, 63, 208, 109, 80, 204, 165, 215, 98, + 215, 155, 208, 109, 98, 55, 3, 4, 205, 99, 250, 202, 182, 55, 3, 4, 205, + 99, 250, 202, 87, 55, 3, 4, 205, 99, 250, 202, 191, 55, 3, 4, 205, 99, + 250, 202, 98, 55, 3, 222, 66, 205, 99, 250, 202, 182, 55, 3, 222, 66, + 205, 99, 250, 202, 87, 55, 3, 222, 66, 205, 99, 250, 202, 191, 55, 3, + 222, 66, 205, 99, 250, 202, 98, 55, 3, 225, 71, 205, 99, 250, 202, 182, + 55, 3, 225, 71, 205, 99, 250, 202, 87, 55, 3, 225, 71, 205, 99, 250, 202, + 191, 55, 3, 225, 71, 205, 99, 250, 202, 98, 55, 3, 4, 238, 118, 250, 202, + 182, 55, 3, 4, 238, 118, 250, 202, 87, 55, 3, 4, 238, 118, 250, 202, 191, + 55, 3, 4, 238, 118, 250, 202, 98, 55, 3, 238, 118, 250, 202, 182, 55, 3, + 238, 118, 250, 202, 87, 55, 3, 238, 118, 250, 202, 191, 55, 3, 238, 118, + 250, 202, 80, 98, 55, 3, 238, 118, 250, 202, 80, 182, 55, 3, 238, 118, + 250, 202, 80, 87, 55, 3, 238, 118, 250, 202, 80, 191, 55, 3, 238, 118, + 250, 202, 80, 98, 55, 3, 225, 71, 238, 118, 250, 202, 80, 182, 55, 3, + 225, 71, 238, 118, 250, 202, 80, 87, 55, 3, 225, 71, 238, 118, 250, 202, + 80, 191, 55, 3, 225, 71, 238, 118, 250, 202, 98, 205, 97, 55, 3, 220, + 124, 210, 99, 182, 205, 97, 55, 3, 220, 124, 210, 99, 87, 205, 97, 55, 3, + 220, 124, 210, 99, 191, 205, 97, 55, 3, 220, 124, 210, 99, 98, 205, 97, + 55, 3, 222, 66, 210, 99, 182, 205, 97, 55, 3, 222, 66, 210, 99, 87, 205, + 97, 55, 3, 222, 66, 210, 99, 191, 205, 97, 55, 3, 222, 66, 210, 99, 98, + 205, 97, 55, 3, 27, 210, 99, 182, 205, 97, 55, 3, 27, 210, 99, 87, 205, + 97, 55, 3, 27, 210, 99, 191, 205, 97, 55, 3, 27, 210, 99, 98, 205, 97, + 55, 3, 80, 210, 99, 182, 205, 97, 55, 3, 80, 210, 99, 87, 205, 97, 55, 3, + 80, 210, 99, 191, 205, 97, 55, 3, 80, 210, 99, 98, 205, 97, 55, 3, 202, + 246, 80, 210, 99, 182, 205, 97, 55, 3, 202, 246, 80, 210, 99, 87, 205, + 97, 55, 3, 202, 246, 80, 210, 99, 191, 205, 97, 55, 3, 202, 246, 80, 210, + 99, 98, 237, 85, 48, 182, 237, 85, 48, 87, 237, 85, 48, 191, 237, 85, 48, + 98, 95, 48, 182, 95, 48, 87, 95, 48, 191, 95, 48, 98, 243, 72, 48, 182, + 243, 72, 48, 87, 243, 72, 48, 191, 243, 72, 48, 98, 80, 243, 72, 48, 182, + 80, 243, 72, 48, 87, 80, 243, 72, 48, 191, 80, 243, 72, 48, 98, 80, 48, + 182, 80, 48, 87, 80, 48, 191, 80, 48, 98, 43, 48, 182, 43, 48, 87, 43, + 48, 191, 43, 48, 157, 201, 48, 43, 48, 157, 239, 14, 43, 48, 208, 254, + 239, 14, 43, 48, 208, 254, 201, 48, 43, 48, 49, 51, 43, 48, 115, 127, 43, + 48, 201, 27, 98, 162, 154, 48, 201, 27, 182, 162, 154, 48, 201, 27, 87, + 162, 154, 48, 201, 27, 191, 162, 154, 48, 201, 27, 157, 201, 48, 162, + 154, 48, 201, 27, 157, 239, 14, 162, 154, 48, 201, 27, 208, 254, 239, 14, + 162, 154, 48, 201, 27, 208, 254, 201, 48, 162, 154, 48, 201, 27, 98, 154, + 48, 201, 27, 182, 154, 48, 201, 27, 87, 154, 48, 201, 27, 191, 154, 48, + 201, 27, 157, 201, 48, 154, 48, 201, 27, 157, 239, 14, 154, 48, 201, 27, + 208, 254, 239, 14, 154, 48, 201, 27, 208, 254, 201, 48, 154, 48, 201, 27, + 98, 222, 66, 154, 48, 201, 27, 182, 222, 66, 154, 48, 201, 27, 87, 222, + 66, 154, 48, 201, 27, 191, 222, 66, 154, 48, 201, 27, 157, 201, 48, 222, + 66, 154, 48, 201, 27, 157, 239, 14, 222, 66, 154, 48, 201, 27, 208, 254, + 239, 14, 222, 66, 154, 48, 201, 27, 208, 254, 201, 48, 222, 66, 154, 48, + 201, 27, 98, 80, 154, 48, 201, 27, 182, 80, 154, 48, 201, 27, 87, 80, + 154, 48, 201, 27, 191, 80, 154, 48, 201, 27, 157, 201, 48, 80, 154, 48, + 201, 27, 157, 239, 14, 80, 154, 48, 201, 27, 208, 254, 239, 14, 80, 154, + 48, 201, 27, 208, 254, 201, 48, 80, 154, 48, 201, 27, 98, 202, 246, 80, + 154, 48, 201, 27, 182, 202, 246, 80, 154, 48, 201, 27, 87, 202, 246, 80, + 154, 48, 201, 27, 191, 202, 246, 80, 154, 48, 201, 27, 157, 201, 48, 202, + 246, 80, 154, 48, 201, 27, 157, 239, 14, 202, 246, 80, 154, 48, 201, 27, + 208, 254, 239, 14, 202, 246, 80, 154, 48, 201, 27, 208, 254, 201, 48, + 202, 246, 80, 154, 48, 98, 205, 99, 250, 202, 182, 205, 99, 250, 202, 87, + 205, 99, 250, 202, 191, 205, 99, 250, 202, 98, 64, 55, 201, 5, 205, 99, + 250, 202, 182, 64, 55, 201, 5, 205, 99, 250, 202, 87, 64, 55, 201, 5, + 205, 99, 250, 202, 191, 64, 55, 201, 5, 205, 99, 250, 202, 98, 55, 3, + 218, 211, 207, 6, 182, 55, 3, 218, 211, 207, 6, 87, 55, 3, 218, 211, 207, + 6, 191, 55, 3, 218, 211, 207, 6, 80, 55, 210, 100, 201, 25, 102, 80, 55, + 210, 100, 201, 25, 120, 206, 71, 80, 55, 210, 100, 201, 25, 112, 234, + 213, 80, 55, 210, 100, 201, 25, 112, 206, 74, 98, 248, 90, 64, 48, 87, + 248, 93, 210, 102, 64, 48, 98, 205, 158, 210, 102, 64, 48, 87, 205, 158, + 210, 102, 64, 48, 98, 225, 22, 64, 48, 87, 213, 40, 64, 48, 98, 213, 40, + 64, 48, 87, 225, 22, 64, 48, 98, 249, 128, 210, 101, 64, 48, 87, 249, + 128, 210, 101, 64, 48, 98, 236, 198, 210, 101, 64, 48, 87, 236, 198, 210, + 101, 64, 48, 64, 55, 210, 100, 201, 25, 102, 64, 55, 210, 100, 201, 25, + 120, 206, 71, 199, 23, 237, 189, 221, 104, 237, 189, 237, 190, 3, 206, + 94, 220, 16, 237, 189, 206, 76, 237, 189, 237, 190, 3, 234, 135, 212, + 251, 237, 189, 233, 91, 237, 189, 2, 76, 206, 107, 233, 123, 247, 169, + 222, 77, 234, 199, 213, 220, 249, 130, 76, 234, 199, 225, 27, 237, 66, + 213, 45, 237, 66, 234, 173, 234, 200, 3, 124, 26, 101, 237, 82, 242, 231, + 237, 190, 3, 242, 254, 234, 157, 246, 99, 237, 189, 220, 113, 237, 189, + 212, 242, 217, 79, 206, 107, 237, 32, 225, 57, 239, 147, 237, 189, 223, + 253, 237, 189, 237, 190, 216, 176, 209, 39, 237, 189, 215, 24, 200, 250, + 210, 173, 215, 13, 222, 181, 228, 118, 204, 173, 221, 72, 246, 199, 209, + 224, 216, 11, 240, 198, 247, 116, 227, 142, 237, 126, 221, 129, 216, 34, + 200, 224, 201, 83, 215, 86, 234, 178, 201, 19, 237, 24, 239, 143, 3, 239, + 141, 246, 117, 235, 127, 204, 201, 235, 128, 208, 206, 235, 114, 220, 13, + 213, 47, 237, 73, 215, 134, 222, 69, 211, 196, 215, 134, 222, 69, 206, + 75, 215, 134, 222, 69, 248, 77, 235, 122, 222, 141, 250, 192, 203, 243, + 242, 238, 250, 118, 242, 208, 249, 121, 215, 59, 247, 120, 249, 108, 248, + 62, 235, 64, 212, 32, 210, 93, 216, 163, 76, 237, 1, 208, 28, 237, 43, + 238, 246, 235, 129, 76, 221, 173, 216, 68, 226, 124, 216, 160, 242, 251, + 224, 164, 237, 189, 211, 213, 204, 190, 203, 245, 237, 189, 239, 24, 239, + 133, 249, 55, 210, 80, 216, 237, 236, 221, 237, 189, 247, 245, 241, 158, + 235, 97, 224, 143, 213, 92, 209, 226, 208, 187, 246, 255, 201, 59, 12, + 15, 232, 221, 12, 15, 232, 220, 12, 15, 232, 219, 12, 15, 232, 218, 12, + 15, 232, 217, 12, 15, 232, 216, 12, 15, 232, 215, 12, 15, 232, 214, 12, + 15, 232, 213, 12, 15, 232, 212, 12, 15, 232, 211, 12, 15, 232, 210, 12, + 15, 232, 209, 12, 15, 232, 208, 12, 15, 232, 207, 12, 15, 232, 206, 12, + 15, 232, 205, 12, 15, 232, 204, 12, 15, 232, 203, 12, 15, 232, 202, 12, + 15, 232, 201, 12, 15, 232, 200, 12, 15, 232, 199, 12, 15, 232, 198, 12, + 15, 232, 197, 12, 15, 232, 196, 12, 15, 232, 195, 12, 15, 232, 194, 12, + 15, 232, 193, 12, 15, 232, 192, 12, 15, 232, 191, 12, 15, 232, 190, 12, + 15, 232, 189, 12, 15, 232, 188, 12, 15, 232, 187, 12, 15, 232, 186, 12, + 15, 232, 185, 12, 15, 232, 184, 12, 15, 232, 183, 12, 15, 232, 182, 12, + 15, 232, 181, 12, 15, 232, 180, 12, 15, 232, 179, 12, 15, 232, 178, 12, + 15, 232, 177, 12, 15, 232, 176, 12, 15, 232, 175, 12, 15, 232, 174, 12, + 15, 232, 173, 12, 15, 232, 172, 12, 15, 232, 171, 12, 15, 232, 170, 12, + 15, 232, 169, 12, 15, 232, 168, 12, 15, 232, 167, 12, 15, 232, 166, 12, + 15, 232, 165, 12, 15, 232, 164, 12, 15, 232, 163, 12, 15, 232, 162, 12, + 15, 232, 161, 12, 15, 232, 160, 12, 15, 232, 159, 12, 15, 232, 158, 12, + 15, 232, 157, 12, 15, 232, 156, 12, 15, 232, 155, 12, 15, 232, 154, 12, + 15, 232, 153, 12, 15, 232, 152, 12, 15, 232, 151, 12, 15, 232, 150, 12, + 15, 232, 149, 12, 15, 232, 148, 12, 15, 232, 147, 12, 15, 232, 146, 12, + 15, 232, 145, 12, 15, 232, 144, 12, 15, 232, 143, 12, 15, 232, 142, 12, + 15, 232, 141, 12, 15, 232, 140, 12, 15, 232, 139, 12, 15, 232, 138, 12, + 15, 232, 137, 12, 15, 232, 136, 12, 15, 232, 135, 12, 15, 232, 134, 12, + 15, 232, 133, 12, 15, 232, 132, 12, 15, 232, 131, 12, 15, 232, 130, 12, + 15, 232, 129, 12, 15, 232, 128, 12, 15, 232, 127, 12, 15, 232, 126, 12, + 15, 232, 125, 12, 15, 232, 124, 12, 15, 232, 123, 12, 15, 232, 122, 12, + 15, 232, 121, 12, 15, 232, 120, 12, 15, 232, 119, 12, 15, 232, 118, 12, + 15, 232, 117, 12, 15, 232, 116, 12, 15, 232, 115, 12, 15, 232, 114, 12, + 15, 232, 113, 12, 15, 232, 112, 12, 15, 232, 111, 12, 15, 232, 110, 12, + 15, 232, 109, 12, 15, 232, 108, 12, 15, 232, 107, 12, 15, 232, 106, 12, + 15, 232, 105, 12, 15, 232, 104, 12, 15, 232, 103, 12, 15, 232, 102, 12, + 15, 232, 101, 12, 15, 232, 100, 12, 15, 232, 99, 12, 15, 232, 98, 12, 15, + 232, 97, 12, 15, 232, 96, 12, 15, 232, 95, 12, 15, 232, 94, 12, 15, 232, + 93, 12, 15, 232, 92, 12, 15, 232, 91, 12, 15, 232, 90, 12, 15, 232, 89, + 12, 15, 232, 88, 12, 15, 232, 87, 12, 15, 232, 86, 12, 15, 232, 85, 12, + 15, 232, 84, 12, 15, 232, 83, 12, 15, 232, 82, 12, 15, 232, 81, 12, 15, + 232, 80, 12, 15, 232, 79, 12, 15, 232, 78, 12, 15, 232, 77, 12, 15, 232, + 76, 12, 15, 232, 75, 12, 15, 232, 74, 12, 15, 232, 73, 12, 15, 232, 72, + 12, 15, 232, 71, 12, 15, 232, 70, 12, 15, 232, 69, 12, 15, 232, 68, 12, + 15, 232, 67, 12, 15, 232, 66, 12, 15, 232, 65, 12, 15, 232, 64, 12, 15, + 232, 63, 12, 15, 232, 62, 12, 15, 232, 61, 12, 15, 232, 60, 12, 15, 232, + 59, 12, 15, 232, 58, 12, 15, 232, 57, 12, 15, 232, 56, 12, 15, 232, 55, + 12, 15, 232, 54, 12, 15, 232, 53, 12, 15, 232, 52, 12, 15, 232, 51, 12, + 15, 232, 50, 12, 15, 232, 49, 12, 15, 232, 48, 12, 15, 232, 47, 12, 15, + 232, 46, 12, 15, 232, 45, 12, 15, 232, 44, 12, 15, 232, 43, 12, 15, 232, + 42, 12, 15, 232, 41, 12, 15, 232, 40, 12, 15, 232, 39, 12, 15, 232, 38, + 12, 15, 232, 37, 12, 15, 232, 36, 12, 15, 232, 35, 12, 15, 232, 34, 12, + 15, 232, 33, 12, 15, 232, 32, 12, 15, 232, 31, 12, 15, 232, 30, 12, 15, + 232, 29, 12, 15, 232, 28, 12, 15, 232, 27, 12, 15, 232, 26, 12, 15, 232, + 25, 12, 15, 232, 24, 12, 15, 232, 23, 12, 15, 232, 22, 12, 15, 232, 21, + 12, 15, 232, 20, 12, 15, 232, 19, 12, 15, 232, 18, 12, 15, 232, 17, 12, + 15, 232, 16, 12, 15, 232, 15, 12, 15, 232, 14, 12, 15, 232, 13, 12, 15, + 232, 12, 12, 15, 232, 11, 12, 15, 232, 10, 12, 15, 232, 9, 12, 15, 232, + 8, 12, 15, 232, 7, 12, 15, 232, 6, 12, 15, 232, 5, 12, 15, 232, 4, 12, + 15, 232, 3, 12, 15, 232, 2, 12, 15, 232, 1, 12, 15, 232, 0, 12, 15, 231, + 255, 12, 15, 231, 254, 12, 15, 231, 253, 12, 15, 231, 252, 12, 15, 231, + 251, 12, 15, 231, 250, 12, 15, 231, 249, 12, 15, 231, 248, 12, 15, 231, + 247, 12, 15, 231, 246, 12, 15, 231, 245, 12, 15, 231, 244, 12, 15, 231, + 243, 12, 15, 231, 242, 12, 15, 231, 241, 12, 15, 231, 240, 12, 15, 231, + 239, 12, 15, 231, 238, 12, 15, 231, 237, 12, 15, 231, 236, 12, 15, 231, + 235, 12, 15, 231, 234, 12, 15, 231, 233, 12, 15, 231, 232, 12, 15, 231, + 231, 12, 15, 231, 230, 12, 15, 231, 229, 12, 15, 231, 228, 12, 15, 231, + 227, 12, 15, 231, 226, 12, 15, 231, 225, 12, 15, 231, 224, 12, 15, 231, + 223, 12, 15, 231, 222, 12, 15, 231, 221, 12, 15, 231, 220, 12, 15, 231, + 219, 12, 15, 231, 218, 12, 15, 231, 217, 12, 15, 231, 216, 12, 15, 231, + 215, 12, 15, 231, 214, 12, 15, 231, 213, 12, 15, 231, 212, 12, 15, 231, + 211, 12, 15, 231, 210, 12, 15, 231, 209, 12, 15, 231, 208, 12, 15, 231, + 207, 12, 15, 231, 206, 12, 15, 231, 205, 12, 15, 231, 204, 12, 15, 231, + 203, 12, 15, 231, 202, 12, 15, 231, 201, 12, 15, 231, 200, 12, 15, 231, + 199, 12, 15, 231, 198, 12, 15, 231, 197, 12, 15, 231, 196, 12, 15, 231, + 195, 12, 15, 231, 194, 12, 15, 231, 193, 12, 15, 231, 192, 12, 15, 231, + 191, 12, 15, 231, 190, 12, 15, 231, 189, 12, 15, 231, 188, 12, 15, 231, + 187, 12, 15, 231, 186, 12, 15, 231, 185, 12, 15, 231, 184, 12, 15, 231, + 183, 12, 15, 231, 182, 12, 15, 231, 181, 12, 15, 231, 180, 12, 15, 231, + 179, 12, 15, 231, 178, 12, 15, 231, 177, 12, 15, 231, 176, 12, 15, 231, + 175, 12, 15, 231, 174, 12, 15, 231, 173, 12, 15, 231, 172, 12, 15, 231, + 171, 12, 15, 231, 170, 12, 15, 231, 169, 12, 15, 231, 168, 12, 15, 231, + 167, 12, 15, 231, 166, 12, 15, 231, 165, 12, 15, 231, 164, 12, 15, 231, + 163, 12, 15, 231, 162, 12, 15, 231, 161, 12, 15, 231, 160, 12, 15, 231, + 159, 12, 15, 231, 158, 12, 15, 231, 157, 12, 15, 231, 156, 12, 15, 231, + 155, 12, 15, 231, 154, 12, 15, 231, 153, 12, 15, 231, 152, 12, 15, 231, + 151, 12, 15, 231, 150, 12, 15, 231, 149, 12, 15, 231, 148, 12, 15, 231, + 147, 12, 15, 231, 146, 12, 15, 231, 145, 12, 15, 231, 144, 12, 15, 231, + 143, 12, 15, 231, 142, 12, 15, 231, 141, 12, 15, 231, 140, 12, 15, 231, + 139, 12, 15, 231, 138, 12, 15, 231, 137, 12, 15, 231, 136, 12, 15, 231, + 135, 12, 15, 231, 134, 12, 15, 231, 133, 12, 15, 231, 132, 12, 15, 231, + 131, 12, 15, 231, 130, 12, 15, 231, 129, 12, 15, 231, 128, 12, 15, 231, + 127, 12, 15, 231, 126, 12, 15, 231, 125, 12, 15, 231, 124, 12, 15, 231, + 123, 12, 15, 231, 122, 12, 15, 231, 121, 12, 15, 231, 120, 12, 15, 231, + 119, 12, 15, 231, 118, 12, 15, 231, 117, 12, 15, 231, 116, 12, 15, 231, + 115, 12, 15, 231, 114, 12, 15, 231, 113, 12, 15, 231, 112, 12, 15, 231, + 111, 12, 15, 231, 110, 12, 15, 231, 109, 12, 15, 231, 108, 12, 15, 231, + 107, 12, 15, 231, 106, 12, 15, 231, 105, 12, 15, 231, 104, 12, 15, 231, + 103, 12, 15, 231, 102, 12, 15, 231, 101, 12, 15, 231, 100, 12, 15, 231, + 99, 12, 15, 231, 98, 12, 15, 231, 97, 12, 15, 231, 96, 12, 15, 231, 95, + 12, 15, 231, 94, 12, 15, 231, 93, 12, 15, 231, 92, 12, 15, 231, 91, 12, + 15, 231, 90, 12, 15, 231, 89, 12, 15, 231, 88, 12, 15, 231, 87, 12, 15, + 231, 86, 12, 15, 231, 85, 12, 15, 231, 84, 12, 15, 231, 83, 12, 15, 231, + 82, 12, 15, 231, 81, 12, 15, 231, 80, 12, 15, 231, 79, 12, 15, 231, 78, + 12, 15, 231, 77, 12, 15, 231, 76, 12, 15, 231, 75, 12, 15, 231, 74, 12, + 15, 231, 73, 12, 15, 231, 72, 12, 15, 231, 71, 12, 15, 231, 70, 12, 15, + 231, 69, 12, 15, 231, 68, 12, 15, 231, 67, 12, 15, 231, 66, 12, 15, 231, + 65, 12, 15, 231, 64, 12, 15, 231, 63, 12, 15, 231, 62, 12, 15, 231, 61, + 12, 15, 231, 60, 12, 15, 231, 59, 12, 15, 231, 58, 12, 15, 231, 57, 12, + 15, 231, 56, 12, 15, 231, 55, 12, 15, 231, 54, 12, 15, 231, 53, 12, 15, + 231, 52, 12, 15, 231, 51, 12, 15, 231, 50, 12, 15, 231, 49, 12, 15, 231, + 48, 12, 15, 231, 47, 12, 15, 231, 46, 12, 15, 231, 45, 12, 15, 231, 44, + 12, 15, 231, 43, 12, 15, 231, 42, 12, 15, 231, 41, 12, 15, 231, 40, 12, + 15, 231, 39, 12, 15, 231, 38, 12, 15, 231, 37, 12, 15, 231, 36, 12, 15, + 231, 35, 12, 15, 231, 34, 12, 15, 231, 33, 12, 15, 231, 32, 12, 15, 231, + 31, 12, 15, 231, 30, 12, 15, 231, 29, 12, 15, 231, 28, 12, 15, 231, 27, + 12, 15, 231, 26, 12, 15, 231, 25, 12, 15, 231, 24, 12, 15, 231, 23, 12, + 15, 231, 22, 12, 15, 231, 21, 12, 15, 231, 20, 12, 15, 231, 19, 12, 15, + 231, 18, 12, 15, 231, 17, 12, 15, 231, 16, 12, 15, 231, 15, 12, 15, 231, + 14, 12, 15, 231, 13, 12, 15, 231, 12, 12, 15, 231, 11, 12, 15, 231, 10, + 12, 15, 231, 9, 12, 15, 231, 8, 12, 15, 231, 7, 12, 15, 231, 6, 12, 15, + 231, 5, 12, 15, 231, 4, 12, 15, 231, 3, 12, 15, 231, 2, 12, 15, 231, 1, + 12, 15, 231, 0, 12, 15, 230, 255, 12, 15, 230, 254, 12, 15, 230, 253, 12, + 15, 230, 252, 12, 15, 230, 251, 12, 15, 230, 250, 12, 15, 230, 249, 12, + 15, 230, 248, 12, 15, 230, 247, 12, 15, 230, 246, 12, 15, 230, 245, 12, + 15, 230, 244, 12, 15, 230, 243, 12, 15, 230, 242, 12, 15, 230, 241, 12, + 15, 230, 240, 12, 15, 230, 239, 12, 15, 230, 238, 12, 15, 230, 237, 12, + 15, 230, 236, 12, 15, 230, 235, 12, 15, 230, 234, 12, 15, 230, 233, 12, + 15, 230, 232, 12, 15, 230, 231, 12, 15, 230, 230, 12, 15, 230, 229, 12, + 15, 230, 228, 12, 15, 230, 227, 12, 15, 230, 226, 12, 15, 230, 225, 12, + 15, 230, 224, 12, 15, 230, 223, 12, 15, 230, 222, 12, 15, 230, 221, 12, + 15, 230, 220, 12, 15, 230, 219, 12, 15, 230, 218, 12, 15, 230, 217, 12, + 15, 230, 216, 12, 15, 230, 215, 12, 15, 230, 214, 12, 15, 230, 213, 12, + 15, 230, 212, 12, 15, 230, 211, 12, 15, 230, 210, 12, 15, 230, 209, 12, + 15, 230, 208, 12, 15, 230, 207, 12, 15, 230, 206, 12, 15, 230, 205, 12, + 15, 230, 204, 12, 15, 230, 203, 12, 15, 230, 202, 12, 15, 230, 201, 12, + 15, 230, 200, 12, 15, 230, 199, 12, 15, 230, 198, 12, 15, 230, 197, 12, + 15, 230, 196, 12, 15, 230, 195, 12, 15, 230, 194, 12, 15, 230, 193, 12, + 15, 230, 192, 225, 77, 207, 13, 165, 208, 244, 165, 238, 43, 81, 165, + 214, 63, 81, 165, 41, 54, 165, 240, 194, 54, 165, 216, 27, 54, 165, 251, + 89, 165, 251, 13, 165, 49, 216, 115, 165, 51, 216, 115, 165, 250, 165, + 165, 93, 54, 165, 246, 70, 165, 233, 32, 165, 236, 183, 208, 76, 165, + 209, 16, 165, 17, 199, 81, 165, 17, 102, 165, 17, 105, 165, 17, 147, 165, + 17, 149, 165, 17, 164, 165, 17, 187, 165, 17, 210, 135, 165, 17, 192, + 165, 17, 219, 113, 165, 246, 79, 165, 210, 167, 165, 224, 241, 54, 165, + 238, 122, 54, 165, 235, 67, 54, 165, 214, 79, 81, 165, 246, 68, 250, 155, + 165, 8, 6, 1, 62, 165, 8, 6, 1, 250, 103, 165, 8, 6, 1, 247, 223, 165, 8, + 6, 1, 242, 153, 165, 8, 6, 1, 72, 165, 8, 6, 1, 238, 5, 165, 8, 6, 1, + 236, 156, 165, 8, 6, 1, 234, 247, 165, 8, 6, 1, 70, 165, 8, 6, 1, 227, + 251, 165, 8, 6, 1, 227, 118, 165, 8, 6, 1, 156, 165, 8, 6, 1, 223, 243, + 165, 8, 6, 1, 220, 214, 165, 8, 6, 1, 74, 165, 8, 6, 1, 216, 226, 165, 8, + 6, 1, 214, 167, 165, 8, 6, 1, 146, 165, 8, 6, 1, 212, 122, 165, 8, 6, 1, + 207, 83, 165, 8, 6, 1, 66, 165, 8, 6, 1, 203, 168, 165, 8, 6, 1, 201, + 147, 165, 8, 6, 1, 200, 195, 165, 8, 6, 1, 200, 123, 165, 8, 6, 1, 199, + 157, 165, 49, 52, 159, 165, 213, 106, 209, 16, 165, 51, 52, 159, 165, + 246, 147, 251, 251, 165, 128, 224, 176, 165, 235, 74, 251, 251, 165, 8, + 4, 1, 62, 165, 8, 4, 1, 250, 103, 165, 8, 4, 1, 247, 223, 165, 8, 4, 1, + 242, 153, 165, 8, 4, 1, 72, 165, 8, 4, 1, 238, 5, 165, 8, 4, 1, 236, 156, + 165, 8, 4, 1, 234, 247, 165, 8, 4, 1, 70, 165, 8, 4, 1, 227, 251, 165, 8, + 4, 1, 227, 118, 165, 8, 4, 1, 156, 165, 8, 4, 1, 223, 243, 165, 8, 4, 1, + 220, 214, 165, 8, 4, 1, 74, 165, 8, 4, 1, 216, 226, 165, 8, 4, 1, 214, + 167, 165, 8, 4, 1, 146, 165, 8, 4, 1, 212, 122, 165, 8, 4, 1, 207, 83, + 165, 8, 4, 1, 66, 165, 8, 4, 1, 203, 168, 165, 8, 4, 1, 201, 147, 165, 8, + 4, 1, 200, 195, 165, 8, 4, 1, 200, 123, 165, 8, 4, 1, 199, 157, 165, 49, + 242, 196, 159, 165, 83, 224, 176, 165, 51, 242, 196, 159, 165, 205, 240, + 247, 157, 207, 13, 58, 211, 96, 58, 211, 85, 58, 211, 74, 58, 211, 62, + 58, 211, 51, 58, 211, 40, 58, 211, 29, 58, 211, 18, 58, 211, 7, 58, 210, + 255, 58, 210, 254, 58, 210, 253, 58, 210, 252, 58, 210, 250, 58, 210, + 249, 58, 210, 248, 58, 210, 247, 58, 210, 246, 58, 210, 245, 58, 210, + 244, 58, 210, 243, 58, 210, 242, 58, 210, 241, 58, 210, 239, 58, 210, + 238, 58, 210, 237, 58, 210, 236, 58, 210, 235, 58, 210, 234, 58, 210, + 233, 58, 210, 232, 58, 210, 231, 58, 210, 230, 58, 210, 228, 58, 210, + 227, 58, 210, 226, 58, 210, 225, 58, 210, 224, 58, 210, 223, 58, 210, + 222, 58, 210, 221, 58, 210, 220, 58, 210, 219, 58, 210, 217, 58, 210, + 216, 58, 210, 215, 58, 210, 214, 58, 210, 213, 58, 210, 212, 58, 210, + 211, 58, 210, 210, 58, 210, 209, 58, 210, 208, 58, 210, 206, 58, 210, + 205, 58, 210, 204, 58, 210, 203, 58, 210, 202, 58, 210, 201, 58, 210, + 200, 58, 210, 199, 58, 210, 198, 58, 210, 197, 58, 210, 195, 58, 210, + 194, 58, 210, 193, 58, 210, 192, 58, 210, 191, 58, 210, 190, 58, 210, + 189, 58, 210, 188, 58, 210, 187, 58, 210, 186, 58, 210, 184, 58, 210, + 183, 58, 210, 182, 58, 210, 181, 58, 210, 180, 58, 210, 179, 58, 210, + 178, 58, 210, 177, 58, 210, 176, 58, 210, 175, 58, 211, 172, 58, 211, + 171, 58, 211, 170, 58, 211, 169, 58, 211, 168, 58, 211, 167, 58, 211, + 166, 58, 211, 165, 58, 211, 164, 58, 211, 163, 58, 211, 161, 58, 211, + 160, 58, 211, 159, 58, 211, 158, 58, 211, 157, 58, 211, 156, 58, 211, + 155, 58, 211, 154, 58, 211, 153, 58, 211, 152, 58, 211, 150, 58, 211, + 149, 58, 211, 148, 58, 211, 147, 58, 211, 146, 58, 211, 145, 58, 211, + 144, 58, 211, 143, 58, 211, 142, 58, 211, 141, 58, 211, 139, 58, 211, + 138, 58, 211, 137, 58, 211, 136, 58, 211, 135, 58, 211, 134, 58, 211, + 133, 58, 211, 132, 58, 211, 131, 58, 211, 130, 58, 211, 128, 58, 211, + 127, 58, 211, 126, 58, 211, 125, 58, 211, 124, 58, 211, 123, 58, 211, + 122, 58, 211, 121, 58, 211, 120, 58, 211, 119, 58, 211, 117, 58, 211, + 116, 58, 211, 115, 58, 211, 114, 58, 211, 113, 58, 211, 112, 58, 211, + 111, 58, 211, 110, 58, 211, 109, 58, 211, 108, 58, 211, 106, 58, 211, + 105, 58, 211, 104, 58, 211, 103, 58, 211, 102, 58, 211, 101, 58, 211, + 100, 58, 211, 99, 58, 211, 98, 58, 211, 97, 58, 211, 95, 58, 211, 94, 58, + 211, 93, 58, 211, 92, 58, 211, 91, 58, 211, 90, 58, 211, 89, 58, 211, 88, + 58, 211, 87, 58, 211, 86, 58, 211, 84, 58, 211, 83, 58, 211, 82, 58, 211, + 81, 58, 211, 80, 58, 211, 79, 58, 211, 78, 58, 211, 77, 58, 211, 76, 58, + 211, 75, 58, 211, 73, 58, 211, 72, 58, 211, 71, 58, 211, 70, 58, 211, 69, + 58, 211, 68, 58, 211, 67, 58, 211, 66, 58, 211, 65, 58, 211, 64, 58, 211, + 61, 58, 211, 60, 58, 211, 59, 58, 211, 58, 58, 211, 57, 58, 211, 56, 58, + 211, 55, 58, 211, 54, 58, 211, 53, 58, 211, 52, 58, 211, 50, 58, 211, 49, + 58, 211, 48, 58, 211, 47, 58, 211, 46, 58, 211, 45, 58, 211, 44, 58, 211, + 43, 58, 211, 42, 58, 211, 41, 58, 211, 39, 58, 211, 38, 58, 211, 37, 58, + 211, 36, 58, 211, 35, 58, 211, 34, 58, 211, 33, 58, 211, 32, 58, 211, 31, + 58, 211, 30, 58, 211, 28, 58, 211, 27, 58, 211, 26, 58, 211, 25, 58, 211, + 24, 58, 211, 23, 58, 211, 22, 58, 211, 21, 58, 211, 20, 58, 211, 19, 58, + 211, 17, 58, 211, 16, 58, 211, 15, 58, 211, 14, 58, 211, 13, 58, 211, 12, + 58, 211, 11, 58, 211, 10, 58, 211, 9, 58, 211, 8, 58, 211, 6, 58, 211, 5, + 58, 211, 4, 58, 211, 3, 58, 211, 2, 58, 211, 1, 58, 211, 0, 218, 97, 218, + 99, 208, 105, 76, 234, 133, 209, 19, 208, 105, 76, 206, 126, 208, 26, + 238, 171, 76, 206, 126, 238, 71, 238, 171, 76, 205, 118, 238, 134, 238, + 158, 238, 159, 251, 243, 251, 244, 251, 139, 248, 233, 249, 123, 248, 42, + 171, 207, 19, 233, 177, 207, 19, 233, 102, 207, 24, 224, 177, 237, 138, + 220, 8, 224, 176, 238, 171, 76, 224, 176, 224, 225, 219, 47, 238, 137, + 224, 177, 207, 19, 83, 207, 19, 201, 168, 236, 242, 237, 138, 237, 116, + 247, 121, 213, 109, 242, 252, 210, 29, 216, 254, 224, 102, 102, 209, 29, + 210, 29, 228, 117, 224, 102, 199, 81, 209, 182, 241, 239, 224, 167, 238, + 96, 240, 221, 241, 107, 243, 34, 102, 241, 228, 241, 107, 243, 34, 105, + 241, 227, 241, 107, 243, 34, 147, 241, 226, 241, 107, 243, 34, 149, 241, + 225, 189, 251, 243, 220, 140, 207, 109, 228, 180, 207, 113, 238, 171, 76, + 205, 119, 248, 134, 238, 78, 247, 156, 247, 158, 238, 171, 76, 222, 65, + 238, 135, 208, 0, 208, 17, 238, 96, 238, 97, 228, 92, 210, 155, 149, 237, + 97, 210, 154, 236, 193, 228, 92, 210, 155, 147, 235, 58, 210, 154, 235, + 55, 228, 92, 210, 155, 105, 213, 181, 210, 154, 212, 180, 228, 92, 210, + 155, 102, 203, 240, 210, 154, 203, 197, 208, 247, 241, 146, 241, 148, + 216, 199, 247, 20, 216, 201, 122, 217, 128, 215, 18, 233, 180, 248, 61, + 216, 17, 234, 99, 248, 74, 218, 242, 248, 61, 234, 99, 220, 103, 228, + 103, 228, 105, 220, 2, 224, 176, 220, 25, 208, 105, 76, 211, 177, 250, + 228, 208, 179, 238, 171, 76, 211, 177, 250, 228, 238, 99, 171, 207, 20, + 210, 141, 233, 177, 207, 20, 210, 141, 233, 99, 171, 207, 20, 3, 227, + 130, 233, 177, 207, 20, 3, 227, 130, 233, 100, 224, 177, 207, 20, 210, + 141, 83, 207, 20, 210, 141, 201, 167, 216, 108, 224, 177, 236, 233, 216, + 108, 224, 177, 239, 167, 215, 124, 216, 108, 224, 177, 249, 122, 216, + 108, 224, 177, 203, 228, 215, 119, 213, 106, 224, 177, 237, 138, 213, + 106, 228, 103, 213, 88, 209, 139, 210, 29, 105, 209, 136, 208, 181, 209, + 139, 210, 29, 147, 209, 135, 208, 180, 241, 107, 243, 34, 208, 49, 241, + 223, 215, 4, 203, 196, 102, 215, 4, 203, 194, 214, 223, 215, 4, 203, 196, + 105, 215, 4, 203, 193, 214, 222, 210, 142, 205, 117, 208, 104, 208, 32, + 247, 157, 247, 20, 247, 95, 222, 24, 201, 106, 220, 232, 208, 105, 76, + 235, 43, 250, 228, 208, 105, 76, 214, 241, 250, 228, 208, 246, 238, 171, + 76, 235, 43, 250, 228, 238, 171, 76, 214, 241, 250, 228, 238, 132, 208, + 105, 76, 208, 49, 209, 5, 209, 139, 235, 79, 171, 228, 52, 210, 119, 209, + 139, 171, 228, 52, 211, 217, 243, 34, 210, 151, 228, 52, 242, 215, 208, + 50, 206, 152, 208, 123, 217, 45, 207, 98, 246, 69, 217, 13, 215, 5, 222, + 23, 215, 109, 251, 9, 214, 255, 246, 69, 251, 25, 220, 91, 209, 191, 8, + 6, 1, 235, 199, 8, 4, 1, 235, 199, 247, 39, 251, 118, 207, 103, 208, 6, + 246, 80, 209, 86, 225, 28, 227, 63, 1, 224, 129, 225, 75, 1, 237, 14, + 237, 5, 225, 75, 1, 237, 14, 237, 150, 225, 75, 1, 213, 1, 225, 75, 1, + 224, 110, 79, 134, 248, 146, 210, 4, 235, 162, 221, 229, 213, 96, 236, + 170, 236, 169, 236, 168, 220, 234, 198, 240, 198, 241, 198, 243, 224, 46, + 213, 9, 224, 48, 213, 11, 216, 76, 224, 45, 213, 8, 219, 17, 221, 140, + 201, 2, 224, 47, 213, 10, 236, 192, 216, 75, 201, 54, 238, 194, 236, 180, + 221, 210, 217, 79, 203, 198, 99, 221, 210, 241, 245, 99, 98, 205, 97, 55, + 3, 53, 83, 97, 87, 205, 97, 55, 3, 53, 83, 97, 11, 5, 228, 10, 81, 215, + 19, 236, 242, 36, 83, 51, 64, 224, 247, 159, 202, 168, 202, 57, 201, 245, + 201, 234, 201, 223, 201, 212, 201, 201, 201, 190, 201, 179, 202, 167, + 202, 156, 202, 145, 202, 134, 202, 123, 202, 112, 202, 101, 247, 228, + 217, 30, 81, 248, 114, 198, 242, 10, 2, 218, 106, 206, 155, 10, 2, 218, + 106, 119, 218, 106, 248, 4, 119, 248, 3, 61, 32, 16, 236, 191, 209, 82, + 246, 196, 203, 69, 202, 90, 202, 79, 202, 68, 202, 56, 202, 45, 202, 34, + 202, 23, 202, 12, 202, 1, 201, 249, 201, 248, 201, 247, 201, 246, 201, + 244, 201, 243, 201, 242, 201, 241, 201, 240, 201, 239, 201, 238, 201, + 237, 201, 236, 201, 235, 201, 233, 201, 232, 201, 231, 201, 230, 201, + 229, 201, 228, 201, 227, 201, 226, 201, 225, 201, 224, 201, 222, 201, + 221, 201, 220, 201, 219, 201, 218, 201, 217, 201, 216, 201, 215, 201, + 214, 201, 213, 201, 211, 201, 210, 201, 209, 201, 208, 201, 207, 201, + 206, 201, 205, 201, 204, 201, 203, 201, 202, 201, 200, 201, 199, 201, + 198, 201, 197, 201, 196, 201, 195, 201, 194, 201, 193, 201, 192, 201, + 191, 201, 189, 201, 188, 201, 187, 201, 186, 201, 185, 201, 184, 201, + 183, 201, 182, 201, 181, 201, 180, 201, 178, 201, 177, 201, 176, 201, + 175, 201, 174, 201, 173, 201, 172, 201, 171, 201, 170, 201, 169, 202, + 166, 202, 165, 202, 164, 202, 163, 202, 162, 202, 161, 202, 160, 202, + 159, 202, 158, 202, 157, 202, 155, 202, 154, 202, 153, 202, 152, 202, + 151, 202, 150, 202, 149, 202, 148, 202, 147, 202, 146, 202, 144, 202, + 143, 202, 142, 202, 141, 202, 140, 202, 139, 202, 138, 202, 137, 202, + 136, 202, 135, 202, 133, 202, 132, 202, 131, 202, 130, 202, 129, 202, + 128, 202, 127, 202, 126, 202, 125, 202, 124, 202, 122, 202, 121, 202, + 120, 202, 119, 202, 118, 202, 117, 202, 116, 202, 115, 202, 114, 202, + 113, 202, 111, 202, 110, 202, 109, 202, 108, 202, 107, 202, 106, 202, + 105, 202, 104, 202, 103, 202, 102, 202, 100, 202, 99, 202, 98, 202, 97, + 202, 96, 202, 95, 202, 94, 202, 93, 202, 92, 202, 91, 202, 89, 202, 88, + 202, 87, 202, 86, 202, 85, 202, 84, 202, 83, 202, 82, 202, 81, 202, 80, + 202, 78, 202, 77, 202, 76, 202, 75, 202, 74, 202, 73, 202, 72, 202, 71, + 202, 70, 202, 69, 202, 67, 202, 66, 202, 65, 202, 64, 202, 63, 202, 62, + 202, 61, 202, 60, 202, 59, 202, 58, 202, 55, 202, 54, 202, 53, 202, 52, + 202, 51, 202, 50, 202, 49, 202, 48, 202, 47, 202, 46, 202, 44, 202, 43, + 202, 42, 202, 41, 202, 40, 202, 39, 202, 38, 202, 37, 202, 36, 202, 35, + 202, 33, 202, 32, 202, 31, 202, 30, 202, 29, 202, 28, 202, 27, 202, 26, + 202, 25, 202, 24, 202, 22, 202, 21, 202, 20, 202, 19, 202, 18, 202, 17, + 202, 16, 202, 15, 202, 14, 202, 13, 202, 11, 202, 10, 202, 9, 202, 8, + 202, 7, 202, 6, 202, 5, 202, 4, 202, 3, 202, 2, 202, 0, 201, 255, 201, + 254, 201, 253, 201, 252, 201, 251, 201, 250, 8, 6, 1, 35, 3, 222, 229, + 26, 235, 73, 8, 4, 1, 35, 3, 222, 229, 26, 235, 73, 8, 6, 1, 197, 3, 83, + 224, 177, 57, 8, 4, 1, 197, 3, 83, 224, 177, 57, 8, 6, 1, 197, 3, 83, + 224, 177, 248, 228, 26, 235, 73, 8, 4, 1, 197, 3, 83, 224, 177, 248, 228, + 26, 235, 73, 8, 6, 1, 197, 3, 83, 224, 177, 248, 228, 26, 169, 8, 4, 1, + 197, 3, 83, 224, 177, 248, 228, 26, 169, 8, 6, 1, 197, 3, 246, 147, 26, + 222, 228, 8, 4, 1, 197, 3, 246, 147, 26, 222, 228, 8, 6, 1, 197, 3, 246, + 147, 26, 247, 125, 8, 4, 1, 197, 3, 246, 147, 26, 247, 125, 8, 6, 1, 233, + 19, 3, 222, 229, 26, 235, 73, 8, 4, 1, 233, 19, 3, 222, 229, 26, 235, 73, + 8, 4, 1, 233, 19, 3, 73, 88, 26, 169, 8, 4, 1, 220, 0, 3, 205, 241, 56, + 8, 6, 1, 163, 3, 83, 224, 177, 57, 8, 4, 1, 163, 3, 83, 224, 177, 57, 8, + 6, 1, 163, 3, 83, 224, 177, 248, 228, 26, 235, 73, 8, 4, 1, 163, 3, 83, + 224, 177, 248, 228, 26, 235, 73, 8, 6, 1, 163, 3, 83, 224, 177, 248, 228, + 26, 169, 8, 4, 1, 163, 3, 83, 224, 177, 248, 228, 26, 169, 8, 6, 1, 212, + 123, 3, 83, 224, 177, 57, 8, 4, 1, 212, 123, 3, 83, 224, 177, 57, 8, 6, + 1, 108, 3, 222, 229, 26, 235, 73, 8, 4, 1, 108, 3, 222, 229, 26, 235, 73, + 8, 6, 1, 35, 3, 217, 111, 26, 169, 8, 4, 1, 35, 3, 217, 111, 26, 169, 8, + 6, 1, 35, 3, 217, 111, 26, 205, 240, 8, 4, 1, 35, 3, 217, 111, 26, 205, + 240, 8, 6, 1, 197, 3, 217, 111, 26, 169, 8, 4, 1, 197, 3, 217, 111, 26, + 169, 8, 6, 1, 197, 3, 217, 111, 26, 205, 240, 8, 4, 1, 197, 3, 217, 111, + 26, 205, 240, 8, 6, 1, 197, 3, 73, 88, 26, 169, 8, 4, 1, 197, 3, 73, 88, + 26, 169, 8, 6, 1, 197, 3, 73, 88, 26, 205, 240, 8, 4, 1, 197, 3, 73, 88, + 26, 205, 240, 8, 4, 1, 233, 19, 3, 73, 88, 26, 235, 73, 8, 4, 1, 233, 19, + 3, 73, 88, 26, 205, 240, 8, 6, 1, 233, 19, 3, 217, 111, 26, 169, 8, 4, 1, + 233, 19, 3, 217, 111, 26, 73, 88, 26, 169, 8, 6, 1, 233, 19, 3, 217, 111, + 26, 205, 240, 8, 4, 1, 233, 19, 3, 217, 111, 26, 73, 88, 26, 205, 240, 8, + 6, 1, 227, 252, 3, 205, 240, 8, 4, 1, 227, 252, 3, 73, 88, 26, 205, 240, + 8, 6, 1, 225, 193, 3, 205, 240, 8, 4, 1, 225, 193, 3, 205, 240, 8, 6, 1, + 223, 244, 3, 205, 240, 8, 4, 1, 223, 244, 3, 205, 240, 8, 6, 1, 214, 33, + 3, 205, 240, 8, 4, 1, 214, 33, 3, 205, 240, 8, 6, 1, 108, 3, 217, 111, + 26, 169, 8, 4, 1, 108, 3, 217, 111, 26, 169, 8, 6, 1, 108, 3, 217, 111, + 26, 205, 240, 8, 4, 1, 108, 3, 217, 111, 26, 205, 240, 8, 6, 1, 108, 3, + 222, 229, 26, 169, 8, 4, 1, 108, 3, 222, 229, 26, 169, 8, 6, 1, 108, 3, + 222, 229, 26, 205, 240, 8, 4, 1, 108, 3, 222, 229, 26, 205, 240, 8, 4, 1, + 251, 222, 3, 235, 73, 8, 4, 1, 176, 163, 3, 235, 73, 8, 4, 1, 176, 163, + 3, 169, 8, 4, 1, 204, 185, 203, 169, 3, 235, 73, 8, 4, 1, 204, 185, 203, + 169, 3, 169, 8, 4, 1, 211, 219, 3, 235, 73, 8, 4, 1, 211, 219, 3, 169, 8, + 4, 1, 233, 186, 211, 219, 3, 235, 73, 8, 4, 1, 233, 186, 211, 219, 3, + 169, 9, 210, 151, 90, 3, 234, 204, 88, 3, 251, 142, 9, 210, 151, 90, 3, + 234, 204, 88, 3, 201, 72, 9, 210, 151, 90, 3, 234, 204, 88, 3, 140, 222, + 187, 9, 210, 151, 90, 3, 234, 204, 88, 3, 217, 121, 9, 210, 151, 90, 3, + 234, 204, 88, 3, 66, 9, 210, 151, 90, 3, 234, 204, 88, 3, 199, 211, 9, + 210, 151, 90, 3, 234, 204, 88, 3, 72, 9, 210, 151, 90, 3, 234, 204, 88, + 3, 251, 221, 9, 210, 151, 218, 228, 3, 226, 252, 185, 1, 226, 182, 45, + 111, 227, 118, 45, 111, 219, 255, 45, 111, 247, 223, 45, 111, 218, 62, + 45, 111, 205, 0, 45, 111, 219, 22, 45, 111, 207, 83, 45, 111, 220, 214, + 45, 111, 216, 226, 45, 111, 223, 243, 45, 111, 200, 123, 45, 111, 146, + 45, 111, 156, 45, 111, 203, 168, 45, 111, 224, 130, 45, 111, 224, 139, + 45, 111, 212, 216, 45, 111, 219, 4, 45, 111, 227, 251, 45, 111, 210, 116, + 45, 111, 208, 182, 45, 111, 212, 122, 45, 111, 234, 247, 45, 111, 226, + 30, 45, 5, 227, 105, 45, 5, 226, 163, 45, 5, 226, 150, 45, 5, 226, 15, + 45, 5, 225, 236, 45, 5, 227, 8, 45, 5, 227, 5, 45, 5, 227, 82, 45, 5, + 226, 88, 45, 5, 226, 68, 45, 5, 227, 26, 45, 5, 219, 252, 45, 5, 219, + 201, 45, 5, 219, 197, 45, 5, 219, 166, 45, 5, 219, 158, 45, 5, 219, 240, + 45, 5, 219, 238, 45, 5, 219, 249, 45, 5, 219, 178, 45, 5, 219, 173, 45, + 5, 219, 242, 45, 5, 247, 189, 45, 5, 246, 173, 45, 5, 246, 163, 45, 5, + 242, 214, 45, 5, 242, 178, 45, 5, 247, 76, 45, 5, 247, 68, 45, 5, 247, + 178, 45, 5, 246, 91, 45, 5, 243, 30, 45, 5, 247, 109, 45, 5, 218, 59, 45, + 5, 218, 41, 45, 5, 218, 36, 45, 5, 218, 19, 45, 5, 218, 11, 45, 5, 218, + 50, 45, 5, 218, 49, 45, 5, 218, 56, 45, 5, 218, 26, 45, 5, 218, 23, 45, + 5, 218, 53, 45, 5, 204, 252, 45, 5, 204, 232, 45, 5, 204, 231, 45, 5, + 204, 220, 45, 5, 204, 217, 45, 5, 204, 248, 45, 5, 204, 247, 45, 5, 204, + 251, 45, 5, 204, 230, 45, 5, 204, 229, 45, 5, 204, 250, 45, 5, 219, 20, + 45, 5, 219, 6, 45, 5, 219, 5, 45, 5, 218, 245, 45, 5, 218, 244, 45, 5, + 219, 16, 45, 5, 219, 15, 45, 5, 219, 19, 45, 5, 218, 247, 45, 5, 218, + 246, 45, 5, 219, 18, 45, 5, 207, 32, 45, 5, 206, 15, 45, 5, 205, 255, 45, + 5, 204, 215, 45, 5, 204, 176, 45, 5, 206, 201, 45, 5, 206, 190, 45, 5, + 207, 8, 45, 5, 138, 45, 5, 205, 161, 45, 5, 206, 221, 45, 5, 220, 157, + 45, 5, 219, 150, 45, 5, 219, 125, 45, 5, 218, 133, 45, 5, 218, 74, 45, 5, + 220, 34, 45, 5, 220, 29, 45, 5, 220, 143, 45, 5, 218, 241, 45, 5, 218, + 229, 45, 5, 220, 116, 45, 5, 216, 210, 45, 5, 215, 204, 45, 5, 215, 166, + 45, 5, 214, 224, 45, 5, 214, 190, 45, 5, 216, 73, 45, 5, 216, 61, 45, 5, + 216, 190, 45, 5, 215, 106, 45, 5, 215, 81, 45, 5, 216, 87, 45, 5, 222, + 233, 45, 5, 221, 211, 45, 5, 221, 181, 45, 5, 221, 41, 45, 5, 220, 243, + 45, 5, 222, 76, 45, 5, 222, 64, 45, 5, 222, 198, 45, 5, 221, 136, 45, 5, + 221, 87, 45, 5, 222, 123, 45, 5, 200, 109, 45, 5, 200, 9, 45, 5, 200, 0, + 45, 5, 199, 211, 45, 5, 199, 179, 45, 5, 200, 51, 45, 5, 200, 48, 45, 5, + 200, 88, 45, 5, 199, 245, 45, 5, 199, 230, 45, 5, 200, 61, 45, 5, 213, + 248, 45, 5, 213, 88, 45, 5, 213, 33, 45, 5, 212, 175, 45, 5, 212, 143, + 45, 5, 213, 190, 45, 5, 213, 167, 45, 5, 213, 229, 45, 5, 213, 1, 45, 5, + 212, 238, 45, 5, 213, 199, 45, 5, 225, 175, 45, 5, 224, 210, 45, 5, 224, + 192, 45, 5, 224, 42, 45, 5, 224, 13, 45, 5, 225, 40, 45, 5, 225, 32, 45, + 5, 225, 149, 45, 5, 224, 110, 45, 5, 224, 78, 45, 5, 225, 58, 45, 5, 203, + 89, 45, 5, 202, 234, 45, 5, 202, 219, 45, 5, 201, 166, 45, 5, 201, 159, + 45, 5, 203, 59, 45, 5, 203, 54, 45, 5, 203, 85, 45, 5, 202, 193, 45, 5, + 202, 179, 45, 5, 203, 65, 45, 5, 224, 128, 45, 5, 224, 123, 45, 5, 224, + 122, 45, 5, 224, 119, 45, 5, 224, 118, 45, 5, 224, 125, 45, 5, 224, 124, + 45, 5, 224, 127, 45, 5, 224, 121, 45, 5, 224, 120, 45, 5, 224, 126, 45, + 5, 224, 137, 45, 5, 224, 132, 45, 5, 224, 131, 45, 5, 224, 115, 45, 5, + 224, 114, 45, 5, 224, 134, 45, 5, 224, 133, 45, 5, 224, 136, 45, 5, 224, + 117, 45, 5, 224, 116, 45, 5, 224, 135, 45, 5, 212, 214, 45, 5, 212, 203, + 45, 5, 212, 202, 45, 5, 212, 195, 45, 5, 212, 188, 45, 5, 212, 210, 45, + 5, 212, 209, 45, 5, 212, 213, 45, 5, 212, 201, 45, 5, 212, 200, 45, 5, + 212, 212, 45, 5, 219, 2, 45, 5, 218, 253, 45, 5, 218, 252, 45, 5, 218, + 249, 45, 5, 218, 248, 45, 5, 218, 255, 45, 5, 218, 254, 45, 5, 219, 1, + 45, 5, 218, 251, 45, 5, 218, 250, 45, 5, 219, 0, 45, 5, 227, 247, 45, 5, + 227, 207, 45, 5, 227, 200, 45, 5, 227, 147, 45, 5, 227, 128, 45, 5, 227, + 227, 45, 5, 227, 225, 45, 5, 227, 241, 45, 5, 227, 166, 45, 5, 227, 156, + 45, 5, 227, 234, 45, 5, 210, 109, 45, 5, 210, 33, 45, 5, 210, 28, 45, 5, + 209, 220, 45, 5, 209, 203, 45, 5, 210, 65, 45, 5, 210, 63, 45, 5, 210, + 98, 45, 5, 210, 8, 45, 5, 210, 2, 45, 5, 210, 74, 45, 5, 208, 178, 45, 5, + 208, 147, 45, 5, 208, 143, 45, 5, 208, 134, 45, 5, 208, 131, 45, 5, 208, + 153, 45, 5, 208, 152, 45, 5, 208, 177, 45, 5, 208, 139, 45, 5, 208, 138, + 45, 5, 208, 155, 45, 5, 212, 61, 45, 5, 209, 182, 45, 5, 209, 161, 45, 5, + 208, 24, 45, 5, 207, 193, 45, 5, 211, 202, 45, 5, 211, 190, 45, 5, 212, + 46, 45, 5, 209, 29, 45, 5, 209, 10, 45, 5, 211, 243, 45, 5, 234, 233, 45, + 5, 234, 75, 45, 5, 234, 54, 45, 5, 233, 97, 45, 5, 233, 71, 45, 5, 234, + 139, 45, 5, 234, 120, 45, 5, 234, 223, 45, 5, 233, 207, 45, 5, 233, 188, + 45, 5, 234, 150, 45, 5, 226, 29, 45, 5, 226, 28, 45, 5, 226, 23, 45, 5, + 226, 22, 45, 5, 226, 19, 45, 5, 226, 18, 45, 5, 226, 25, 45, 5, 226, 24, + 45, 5, 226, 27, 45, 5, 226, 21, 45, 5, 226, 20, 45, 5, 226, 26, 45, 5, + 209, 227, 143, 111, 2, 200, 74, 143, 111, 2, 213, 218, 143, 111, 2, 213, + 134, 118, 1, 204, 102, 86, 111, 2, 246, 86, 161, 86, 111, 2, 246, 86, + 226, 207, 86, 111, 2, 246, 86, 226, 88, 86, 111, 2, 246, 86, 226, 178, + 86, 111, 2, 246, 86, 219, 178, 86, 111, 2, 246, 86, 247, 190, 86, 111, 2, + 246, 86, 247, 37, 86, 111, 2, 246, 86, 246, 91, 86, 111, 2, 246, 86, 246, + 210, 86, 111, 2, 246, 86, 218, 26, 86, 111, 2, 246, 86, 242, 58, 86, 111, + 2, 246, 86, 204, 241, 86, 111, 2, 246, 86, 240, 211, 86, 111, 2, 246, 86, + 204, 236, 86, 111, 2, 246, 86, 188, 86, 111, 2, 246, 86, 207, 36, 86, + 111, 2, 246, 86, 206, 122, 86, 111, 2, 246, 86, 138, 86, 111, 2, 246, 86, + 206, 61, 86, 111, 2, 246, 86, 218, 241, 86, 111, 2, 246, 86, 249, 136, + 86, 111, 2, 246, 86, 215, 245, 86, 111, 2, 246, 86, 215, 106, 86, 111, 2, + 246, 86, 215, 217, 86, 111, 2, 246, 86, 221, 136, 86, 111, 2, 246, 86, + 199, 245, 86, 111, 2, 246, 86, 213, 1, 86, 111, 2, 246, 86, 224, 110, 86, + 111, 2, 246, 86, 202, 193, 86, 111, 2, 246, 86, 210, 114, 86, 111, 2, + 246, 86, 208, 179, 86, 111, 2, 246, 86, 212, 64, 86, 111, 2, 246, 86, + 144, 86, 111, 2, 246, 86, 194, 86, 22, 2, 246, 86, 214, 159, 86, 228, + 104, 22, 2, 246, 86, 214, 97, 86, 228, 104, 22, 2, 246, 86, 212, 131, 86, + 228, 104, 22, 2, 246, 86, 212, 124, 86, 228, 104, 22, 2, 246, 86, 214, + 139, 86, 22, 2, 217, 86, 86, 22, 2, 252, 99, 177, 1, 248, 181, 219, 253, + 177, 1, 248, 181, 219, 201, 177, 1, 248, 181, 219, 166, 177, 1, 248, 181, + 219, 240, 177, 1, 248, 181, 219, 178, 69, 1, 248, 181, 219, 253, 69, 1, + 248, 181, 219, 201, 69, 1, 248, 181, 219, 166, 69, 1, 248, 181, 219, 240, + 69, 1, 248, 181, 219, 178, 69, 1, 251, 169, 247, 76, 69, 1, 251, 169, + 204, 215, 69, 1, 251, 169, 138, 69, 1, 251, 169, 216, 226, 67, 1, 238, + 29, 238, 28, 243, 38, 150, 148, 67, 1, 238, 28, 238, 29, 243, 38, 150, + 148, }; static unsigned char phrasebook_offset1[] = { @@ -16533,20 +17649,22 @@ static unsigned char phrasebook_offset1[] = { 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 52, 87, 52, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 52, 97, 52, 52, 52, 52, 52, 98, 99, 100, - 101, 102, 103, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 104, 105, 106, - 107, 108, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 109, 110, 111, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 89, 90, 91, 92, 93, 94, 95, 96, 52, 97, 52, 98, 52, 52, 52, 99, 100, 101, + 102, 103, 104, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 105, 106, 107, + 108, 109, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 110, 111, 112, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 112, 113, 114, 115, 52, 52, 52, 116, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 113, 114, 115, 116, 52, 52, 52, 117, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 118, 119, + 120, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 121, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 122, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 52, 52, 52, 52, 52, 134, 52, + 52, 52, 52, 52, 52, 52, 135, 136, 52, 52, 52, 52, 137, 52, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 117, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 118, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 130, 52, 52, 52, 52, 52, 131, 52, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, @@ -16558,9 +17676,9 @@ static unsigned char phrasebook_offset1[] = { 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 148, 149, 150, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 142, 143, 144, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, @@ -16715,9 +17833,9 @@ static unsigned char phrasebook_offset1[] = { 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 151, 152, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 145, 146, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, @@ -16729,10 +17847,8 @@ static unsigned char phrasebook_offset1[] = { 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 147, 148, 149, - 150, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 153, 154, 155, + 156, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, @@ -16768,1214 +17884,1217 @@ static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 9, 11, 14, 17, 19, 21, 24, 27, 29, 31, 33, 35, 39, 41, 44, 46, 48, 50, 52, 54, 56, 59, 61, 64, 66, 68, 71, 74, 77, 80, 84, 88, 93, 98, 103, 107, 112, 117, 122, 126, 131, 136, 140, 145, - 150, 154, 159, 164, 168, 172, 177, 181, 186, 191, 196, 201, 206, 209, - 213, 216, 220, 223, 227, 231, 236, 241, 246, 250, 255, 260, 265, 269, - 274, 279, 283, 288, 293, 297, 302, 307, 311, 315, 320, 324, 329, 334, - 339, 344, 349, 353, 356, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 366, 371, - 374, 377, 380, 383, 386, 389, 391, 394, 400, 408, 411, 415, 418, 420, - 423, 426, 429, 432, 436, 439, 442, 445, 447, 450, 456, 464, 471, 478, - 485, 490, 497, 503, 510, 517, 524, 532, 537, 545, 552, 558, 565, 572, - 580, 587, 595, 603, 608, 616, 623, 629, 636, 643, 650, 653, 659, 666, - 672, 679, 686, 693, 698, 704, 711, 717, 724, 731, 738, 746, 751, 759, - 766, 772, 779, 786, 794, 801, 809, 817, 822, 830, 837, 843, 850, 857, - 864, 867, 873, 880, 886, 893, 900, 907, 912, 920, 927, 934, 941, 948, - 955, 962, 969, 976, 984, 992, 1000, 1008, 1016, 1024, 1032, 1040, 1047, - 1054, 1061, 1068, 1075, 1082, 1089, 1096, 1103, 1110, 1117, 1124, 1132, - 1140, 1148, 1156, 1164, 1172, 1180, 1188, 1196, 1204, 1211, 1218, 1226, - 1234, 1242, 1250, 1258, 1266, 1274, 1282, 1290, 1296, 1301, 1306, 1314, - 1322, 1330, 1338, 1343, 1350, 1357, 1365, 1373, 1381, 1389, 1398, 1407, - 1414, 1421, 1428, 1435, 1443, 1451, 1459, 1467, 1478, 1483, 1488, 1495, - 1502, 1509, 1516, 1523, 1530, 1535, 1540, 1547, 1554, 1562, 1570, 1578, - 1586, 1593, 1600, 1608, 1616, 1624, 1632, 1640, 1648, 1656, 1664, 1672, - 1680, 1687, 1694, 1701, 1708, 1715, 1722, 1729, 1736, 1744, 1752, 1759, - 1766, 1773, 1780, 1788, 1796, 1804, 1812, 1820, 1827, 1834, 1842, 1850, - 1858, 1866, 1871, 1877, 1883, 1890, 1897, 1902, 1907, 1912, 1919, 1926, - 1933, 1940, 1948, 1956, 1963, 1969, 1974, 1979, 1986, 1993, 2000, 2005, - 2010, 2015, 2022, 2029, 2036, 2043, 2050, 2057, 2065, 2075, 2083, 2090, - 2097, 2102, 2107, 2114, 2121, 2125, 2130, 2135, 2140, 2148, 2157, 2164, - 2171, 2180, 2187, 2194, 2199, 2206, 2213, 2220, 2227, 2234, 2239, 2246, - 2253, 2261, 2266, 2271, 2276, 2286, 2290, 2296, 2302, 2308, 2314, 2322, - 2335, 2343, 2348, 2358, 2363, 2368, 2378, 2383, 2390, 2397, 2405, 2413, - 2420, 2427, 2434, 2441, 2451, 2461, 2470, 2479, 2489, 2499, 2509, 2519, - 2525, 2535, 2545, 2555, 2565, 2573, 2581, 2588, 2595, 2603, 2611, 2619, - 2627, 2634, 2641, 2651, 2661, 2669, 2677, 2685, 2690, 2700, 2705, 2712, - 2719, 2724, 2729, 2737, 2745, 2755, 2765, 2772, 2779, 2788, 2797, 2805, - 2813, 2822, 2831, 2839, 2847, 2856, 2865, 2874, 2883, 2893, 2903, 2911, - 2919, 2928, 2937, 2946, 2955, 2965, 2975, 2983, 2991, 3000, 3009, 3018, - 3027, 3036, 3045, 3050, 3055, 3063, 3071, 3081, 3089, 3094, 3099, 3106, - 3113, 3120, 3127, 3134, 3141, 3151, 3161, 3171, 3181, 3188, 3195, 3205, - 3215, 3223, 3231, 3239, 3247, 3255, 3262, 3269, 3276, 3282, 3289, 3296, - 3303, 3312, 3322, 3332, 3339, 3346, 3352, 3357, 3364, 3370, 3376, 3383, - 3390, 3401, 3411, 3418, 3425, 3432, 3439, 3445, 3450, 3457, 3463, 3468, - 3476, 3484, 3491, 3497, 3502, 3509, 3514, 3521, 3530, 3539, 3548, 3555, - 3561, 3567, 3572, 3579, 3586, 3593, 3600, 3607, 3612, 3617, 3626, 3634, - 3643, 3648, 3655, 3666, 3673, 3681, 3690, 3696, 3702, 3708, 3715, 3720, - 3726, 3737, 3746, 3755, 3763, 3771, 3781, 3786, 3793, 3800, 3805, 3817, - 3826, 3834, 3841, 3850, 3855, 3860, 3867, 3874, 3881, 3888, 3894, 3903, - 3911, 3916, 3924, 3930, 3938, 3946, 3952, 3958, 3964, 3971, 3979, 3985, - 3993, 4000, 4005, 4012, 4020, 4030, 4037, 4044, 4054, 4061, 4068, 4078, - 4085, 4092, 4099, 4105, 4111, 4121, 4134, 4139, 4146, 4151, 4155, 4161, - 4170, 4177, 4182, 4187, 4191, 4196, 4202, 4206, 4212, 4218, 4224, 4230, - 4238, 4243, 4248, 4253, 4258, 4264, 4266, 4271, 4275, 4281, 4287, 4293, - 4298, 4305, 4312, 4318, 4325, 4333, 4341, 4346, 4351, 4355, 4360, 4362, - 4364, 4367, 4369, 4372, 4377, 4382, 4388, 4393, 4397, 4401, 4406, 4415, - 4421, 4426, 4432, 4437, 4443, 4451, 4459, 4463, 4467, 4472, 4478, 4484, - 4490, 4496, 4501, 4508, 4516, 4524, 4529, 4535, 4542, 4549, 4556, 4563, - 4567, 4572, 4577, 4582, 4587, 4592, 4595, 4598, 4601, 4604, 4607, 4610, - 4614, 4618, 4624, 4627, 4632, 4638, 4644, 4647, 4652, 4658, 4662, 4668, - 4674, 4680, 4686, 4691, 4696, 4701, 4704, 4710, 4715, 4720, 4724, 4729, - 4735, 4741, 4744, 4748, 4752, 4756, 4759, 4762, 4767, 4771, 4778, 4782, - 4788, 4792, 4798, 4802, 4806, 4810, 4815, 4820, 4827, 4833, 4840, 4846, - 4852, 4858, 4861, 4865, 4869, 4873, 4877, 4882, 4887, 4891, 4895, 4901, - 4905, 4909, 4914, 4920, 4925, 4931, 4935, 4942, 4947, 4951, 4956, 4961, - 4967, 4970, 4974, 4979, 4984, 4993, 4999, 5004, 5008, 5013, 5017, 5022, - 5026, 5030, 5035, 5039, 5045, 5050, 5055, 5060, 5065, 5070, 5075, 5081, - 5087, 5093, 5099, 5104, 5110, 5116, 5122, 5127, 5132, 5139, 5146, 5150, - 5156, 5163, 0, 0, 5170, 5173, 5182, 5191, 5202, 5206, 0, 0, 0, 0, 5211, - 5214, 5219, 5227, 5232, 5240, 5248, 0, 5256, 0, 5264, 5272, 5280, 5291, - 5296, 5301, 5306, 5311, 5316, 5321, 5326, 5331, 5336, 5341, 5346, 5351, - 5356, 5361, 5366, 5371, 0, 5376, 5381, 5386, 5391, 5396, 5401, 5406, - 5411, 5419, 5427, 5435, 5443, 5451, 5459, 5470, 5475, 5480, 5485, 5490, - 5495, 5500, 5505, 5510, 5515, 5520, 5525, 5530, 5535, 5540, 5545, 5550, - 5555, 5561, 5566, 5571, 5576, 5581, 5586, 5591, 5596, 5604, 5612, 5620, - 5628, 5636, 5641, 5645, 5649, 5656, 5666, 5676, 5680, 5684, 5688, 5694, - 5701, 5705, 5710, 5714, 5719, 5723, 5728, 5732, 5737, 5742, 5747, 5752, - 5757, 5762, 5767, 5772, 5777, 5782, 5787, 5792, 5797, 5802, 5807, 5811, - 5815, 5821, 5825, 5830, 5836, 5844, 5849, 5854, 5861, 5866, 5871, 5878, - 5887, 5896, 5907, 5915, 5920, 5925, 5930, 5937, 5942, 5948, 5953, 5958, - 5963, 5968, 5973, 5978, 5986, 5992, 5997, 6001, 6006, 6011, 6016, 6021, - 6026, 6031, 6036, 6040, 6046, 6050, 6055, 6060, 6065, 6069, 6074, 6079, - 6084, 6089, 6093, 6098, 6102, 6107, 6112, 6117, 6122, 6128, 6133, 6139, - 6143, 6148, 6152, 6156, 6161, 6166, 6171, 6176, 6181, 6186, 6191, 6195, - 6201, 6205, 6210, 6215, 6220, 6224, 6229, 6234, 6239, 6244, 6248, 6253, - 6257, 6262, 6267, 6272, 6277, 6283, 6288, 6294, 6298, 6303, 6307, 6315, - 6320, 6325, 6330, 6337, 6342, 6348, 6353, 6358, 6363, 6368, 6373, 6378, - 6386, 6392, 6397, 6402, 6407, 6412, 6417, 6423, 6429, 6436, 6443, 6452, - 6461, 6468, 6475, 6484, 6493, 6498, 6503, 6508, 6513, 6518, 6523, 6528, - 6533, 6544, 6555, 6560, 6565, 6572, 6579, 6587, 6595, 6600, 6605, 6610, - 6615, 6619, 6623, 6627, 6633, 6639, 6643, 6650, 6655, 6665, 6675, 6681, - 6687, 6695, 6703, 6711, 6719, 6726, 6733, 6741, 6749, 6757, 6765, 6773, - 6781, 6789, 6797, 6805, 6813, 6820, 6827, 6833, 6839, 6847, 6855, 6862, - 6869, 6877, 6885, 6891, 6897, 6905, 6913, 6921, 6929, 6935, 6941, 6949, - 6957, 6965, 6973, 6980, 6987, 6995, 7003, 7011, 7019, 7024, 7029, 7036, - 7043, 7053, 7063, 7067, 7075, 7083, 7090, 7097, 7105, 7113, 7120, 7127, - 7135, 7143, 7150, 7157, 7165, 7173, 7178, 7185, 7192, 7199, 7206, 7212, - 7218, 7226, 7234, 7239, 7244, 7252, 7260, 7268, 7276, 7284, 7292, 7299, - 7306, 7314, 7322, 7330, 7338, 7345, 7352, 7358, 7364, 7373, 7382, 7389, - 7396, 7403, 7410, 7417, 7424, 7431, 7438, 7446, 7454, 7462, 7470, 7478, - 7486, 7496, 7506, 7513, 7520, 7527, 7534, 7541, 7548, 7555, 7562, 7569, - 7576, 7583, 7590, 7597, 7604, 7611, 7618, 7625, 7632, 7639, 7646, 7653, - 7660, 7667, 7674, 7679, 7684, 7689, 7694, 7699, 7704, 7709, 7714, 7719, - 7724, 7730, 7736, 7744, 7752, 7760, 7768, 7776, 7784, 7792, 7800, 7808, - 7816, 7821, 7826, 7831, 7836, 7844, 0, 7852, 7857, 7862, 7867, 7872, - 7877, 7882, 7887, 7892, 7896, 7901, 7906, 7911, 7916, 7921, 7926, 7931, - 7936, 7941, 7946, 7951, 7956, 7961, 7966, 7971, 7976, 7981, 7986, 7991, - 7996, 8001, 8006, 8011, 8016, 8021, 8026, 8031, 8036, 0, 0, 8041, 8048, - 8051, 8055, 8059, 8062, 8066, 0, 8070, 8075, 8080, 8085, 8090, 8095, - 8100, 8105, 8110, 8114, 8119, 8124, 8129, 8134, 8139, 8144, 8149, 8154, - 8159, 8164, 8169, 8174, 8179, 8184, 8189, 8194, 8199, 8204, 8209, 8214, - 8219, 8224, 8229, 8234, 8239, 8244, 8249, 8254, 8259, 0, 8266, 8271, 0, - 0, 8274, 8280, 8286, 0, 8290, 8295, 8300, 8305, 8312, 8319, 8324, 8329, - 8334, 8339, 8344, 8349, 8354, 8361, 8366, 8373, 8380, 8385, 8392, 8397, - 8402, 8407, 8414, 8419, 8424, 8431, 8440, 8445, 8450, 8455, 8460, 8466, - 8471, 8478, 8485, 8492, 8497, 8502, 8507, 8512, 8517, 8522, 8532, 8537, - 8546, 8551, 8556, 8561, 8566, 8573, 8580, 8587, 8593, 8599, 8606, 0, 0, - 0, 0, 0, 0, 0, 0, 8613, 8617, 8621, 8625, 8629, 8633, 8637, 8641, 8645, - 8649, 8653, 8658, 8662, 8666, 8671, 8675, 8680, 8684, 8688, 8692, 8697, - 8701, 8706, 8710, 8714, 8718, 8722, 0, 0, 0, 0, 0, 8726, 8733, 8741, - 8748, 8753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8758, 8761, 8765, 8770, - 8774, 8778, 8782, 8788, 8794, 8797, 8804, 8813, 8816, 8819, 8824, 8830, - 8834, 8842, 8848, 8854, 8862, 8866, 8871, 8882, 8887, 8891, 8895, 8899, - 8902, 0, 8905, 8912, 8916, 8922, 8926, 8933, 8940, 8948, 8955, 8962, - 8966, 8970, 8976, 8980, 8984, 8988, 8992, 8996, 9000, 9004, 9008, 9012, - 9016, 9020, 9024, 9028, 9032, 9036, 9040, 9044, 9052, 9060, 9070, 9079, - 9088, 9091, 9095, 9099, 9103, 9107, 9111, 9115, 9119, 9123, 9128, 9132, - 9135, 9138, 9141, 9144, 9147, 9150, 9153, 9156, 9160, 9164, 9168, 9173, - 9178, 9184, 9187, 9194, 9203, 9208, 9213, 9220, 9226, 9231, 9235, 9239, - 9243, 9247, 9251, 9255, 9260, 9264, 9269, 9273, 9278, 9283, 9290, 9296, - 9302, 9308, 9313, 9322, 9331, 9336, 9343, 9350, 9357, 9364, 9368, 9372, - 9376, 9383, 9393, 9397, 9401, 9405, 9412, 9420, 9424, 9428, 9435, 9439, - 9443, 9447, 9454, 9461, 9473, 9477, 9481, 9485, 9495, 9504, 9508, 9516, - 9523, 9530, 9539, 9550, 9558, 9562, 9571, 9582, 9590, 9603, 9611, 9619, - 9627, 9635, 9641, 9650, 9657, 9661, 9669, 9673, 9680, 9688, 9692, 9698, - 9705, 9712, 9716, 9724, 9728, 9735, 9739, 9747, 9751, 9759, 9767, 9774, - 9782, 9790, 9797, 9803, 9807, 9814, 9822, 9828, 9835, 9842, 9848, 9858, - 9866, 9873, 9879, 9883, 9886, 9890, 9896, 9904, 9908, 9914, 9920, 9927, - 9934, 9937, 9944, 9949, 9958, 9963, 9967, 9980, 9993, 9999, 10006, 10011, - 10017, 10022, 10028, 10038, 10045, 10054, 10064, 10070, 10075, 10080, - 10084, 10088, 10093, 10098, 10104, 10112, 10120, 10131, 10136, 10145, - 10154, 10161, 10167, 10173, 10179, 10185, 10191, 10197, 10204, 10210, - 10217, 10224, 10231, 10238, 10244, 10252, 10261, 10268, 10276, 10284, - 10290, 10296, 10302, 10310, 10318, 10328, 10338, 10342, 10348, 10354, 0, - 10360, 10365, 10370, 10377, 10382, 10387, 10394, 10399, 10408, 10413, - 10418, 10423, 10428, 10433, 10440, 10445, 10452, 10457, 10462, 10467, - 10472, 10477, 10483, 10487, 10492, 10499, 10504, 10509, 10514, 10519, - 10524, 10531, 10538, 10545, 10550, 10555, 10561, 10566, 10571, 10577, - 10582, 10587, 10595, 10603, 10608, 10613, 10619, 10624, 10629, 10633, - 10639, 10643, 10647, 10653, 10659, 10664, 10669, 10676, 10683, 10687, 0, - 0, 10691, 10698, 10705, 10712, 10722, 10734, 10745, 10761, 10773, 10784, - 10792, 10799, 10809, 10824, 10835, 10841, 10850, 10858, 10869, 10879, - 10887, 10898, 10905, 10913, 10924, 10930, 10936, 10944, 10952, 10960, - 10966, 10976, 10984, 10994, 11004, 11017, 11031, 11045, 11055, 11066, - 11077, 11090, 11103, 11117, 11129, 11141, 11154, 11167, 11179, 11192, - 11201, 11209, 11214, 11219, 11224, 11229, 11234, 11239, 11244, 11249, - 11254, 11259, 11264, 11269, 11274, 11279, 11284, 11289, 11294, 11299, - 11304, 11309, 11314, 11319, 11324, 11329, 11334, 11339, 11344, 11349, - 11354, 11359, 11364, 11369, 11373, 11378, 11383, 11388, 11393, 11398, - 11402, 11406, 11410, 11414, 11418, 11422, 11426, 11430, 11434, 11438, - 11442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11447, 11452, 11456, - 11460, 11464, 11468, 11472, 11476, 11481, 11485, 11490, 11494, 11499, - 11503, 11507, 11511, 11516, 11520, 11525, 11530, 11535, 11539, 11544, - 11549, 11554, 11559, 11564, 11569, 11574, 11579, 11584, 11588, 11593, - 11600, 11604, 11609, 11614, 11618, 11623, 11627, 11634, 11641, 11648, - 11655, 11663, 11671, 11680, 11688, 11695, 11702, 11710, 11716, 11722, - 11728, 11734, 11741, 11746, 11750, 11755, 0, 0, 0, 0, 0, 11759, 11764, - 11769, 11774, 11779, 11784, 11789, 11794, 11799, 11804, 11809, 11814, - 11819, 11824, 11829, 11834, 11839, 11844, 11849, 11854, 11859, 11864, - 11869, 11874, 11879, 11884, 11889, 11897, 11904, 11910, 11915, 11923, - 11930, 11936, 11943, 11949, 11954, 11961, 11968, 11974, 11979, 11984, - 11990, 11995, 12000, 12006, 0, 0, 12011, 12017, 12023, 12029, 12035, - 12041, 12047, 12052, 12060, 12066, 12072, 12078, 12084, 12090, 12098, 0, - 12104, 12109, 12114, 12119, 12124, 12129, 12134, 12139, 12144, 12149, - 12154, 12159, 12164, 12169, 12174, 12179, 12184, 12189, 12194, 12199, - 12204, 12209, 12214, 12219, 12224, 12229, 12234, 12239, 0, 0, 12244, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12248, 12257, 12265, - 12272, 12280, 12292, 12299, 12306, 12313, 12325, 12336, 12343, 12351, - 12357, 12362, 12370, 12378, 12386, 12392, 12402, 12410, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12417, 12423, 12428, - 12433, 12438, 12443, 12448, 12453, 12458, 12463, 12468, 12473, 12478, - 12483, 12487, 12491, 12495, 12500, 12506, 12512, 12518, 12523, 12528, - 12533, 12538, 12544, 12553, 12561, 12567, 12575, 12581, 12585, 12589, - 12593, 12598, 12601, 12605, 12608, 12612, 12615, 12619, 12623, 12627, - 12632, 12637, 12640, 12644, 12649, 12654, 12657, 12661, 12664, 12668, - 12672, 12676, 12680, 12684, 12688, 12692, 12696, 12700, 12704, 12708, - 12712, 12716, 12720, 12724, 12728, 12732, 12736, 12740, 12744, 12747, - 12751, 12755, 12759, 12762, 12765, 12769, 12773, 12777, 12781, 12785, - 12789, 12793, 12797, 12801, 12804, 12809, 12814, 12818, 12822, 12827, - 12831, 12836, 12840, 12845, 12850, 12856, 12862, 12868, 12872, 12877, - 12883, 12889, 12893, 12898, 12902, 12908, 12913, 12916, 12922, 12928, - 12933, 12938, 12945, 12950, 12955, 12959, 12963, 12967, 12971, 12975, - 12979, 12983, 12987, 12992, 12997, 13002, 13008, 13011, 13015, 13019, - 13022, 13025, 13028, 13031, 13034, 13037, 13041, 13044, 13048, 13052, - 13059, 13064, 13068, 13072, 13076, 13080, 13084, 13090, 13094, 13098, - 13102, 13106, 13112, 13116, 13120, 13123, 13127, 13131, 0, 13135, 13138, - 13142, 13145, 13149, 13152, 13156, 13160, 0, 0, 13164, 13167, 0, 0, - 13171, 13174, 13178, 13181, 13185, 13189, 13193, 13197, 13201, 13205, - 13209, 13213, 13217, 13221, 13225, 13229, 13233, 13237, 13241, 13245, - 13249, 13253, 0, 13257, 13260, 13264, 13268, 13272, 13275, 13278, 0, - 13282, 0, 0, 0, 13286, 13290, 13294, 13298, 0, 0, 13301, 13305, 13309, - 13314, 13318, 13323, 13327, 13332, 13337, 0, 0, 13343, 13347, 0, 0, - 13352, 13356, 13361, 13365, 0, 0, 0, 0, 0, 0, 0, 0, 13371, 0, 0, 0, 0, - 13377, 13381, 0, 13385, 13389, 13394, 13399, 13404, 0, 0, 13410, 13414, - 13417, 13420, 13423, 13426, 13429, 13432, 13436, 13439, 13443, 13451, - 13460, 13464, 13468, 13474, 13480, 13486, 13492, 13506, 13513, 13516, 0, - 0, 0, 0, 0, 13520, 13527, 13532, 0, 13537, 13541, 13546, 13550, 13555, - 13559, 0, 0, 0, 0, 13564, 13569, 0, 0, 13574, 13579, 13584, 13588, 13593, - 13598, 13603, 13608, 13613, 13618, 13623, 13628, 13633, 13638, 13643, - 13648, 13653, 13658, 13663, 13668, 13673, 13678, 0, 13683, 13687, 13692, - 13697, 13702, 13706, 13710, 0, 13715, 13720, 0, 13725, 13730, 0, 13735, - 13740, 0, 0, 13744, 0, 13749, 13755, 13760, 13766, 13771, 0, 0, 0, 0, - 13777, 13783, 0, 0, 13789, 13795, 13801, 0, 0, 0, 13806, 0, 0, 0, 0, 0, - 0, 0, 13811, 13816, 13821, 13826, 0, 13831, 0, 0, 0, 0, 0, 0, 0, 13836, - 13841, 13845, 13849, 13853, 13857, 13861, 13865, 13870, 13874, 13879, - 13883, 13887, 13891, 13895, 13901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13906, 13911, 13916, 0, 13921, 13925, 13930, 13934, 13939, 13943, 13948, - 13953, 13958, 0, 13964, 13968, 13973, 0, 13979, 13983, 13988, 13992, - 13997, 14002, 14007, 14012, 14017, 14022, 14027, 14032, 14037, 14042, - 14047, 14052, 14057, 14062, 14067, 14072, 14077, 14082, 0, 14087, 14091, - 14096, 14101, 14106, 14110, 14114, 0, 14119, 14124, 0, 14129, 14134, - 14139, 14144, 14149, 0, 0, 14153, 14158, 14163, 14169, 14174, 14180, - 14185, 14191, 14197, 14204, 0, 14211, 14216, 14222, 0, 14229, 14234, - 14240, 0, 0, 14245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14249, - 14255, 14261, 14267, 0, 0, 14274, 14279, 14283, 14287, 14291, 14295, - 14299, 14303, 14308, 14312, 14317, 14322, 0, 0, 0, 0, 0, 0, 0, 14327, 0, - 0, 0, 0, 0, 0, 0, 14332, 14336, 14340, 0, 14344, 14347, 14351, 14354, - 14358, 14361, 14365, 14369, 0, 0, 14373, 14376, 0, 0, 14380, 14383, - 14387, 14390, 14394, 14398, 14402, 14406, 14410, 14414, 14418, 14422, - 14426, 14430, 14434, 14438, 14442, 14446, 14450, 14454, 14458, 14462, 0, - 14466, 14469, 14473, 14477, 14481, 14484, 14487, 0, 14491, 14495, 0, - 14499, 14503, 14507, 14511, 14515, 0, 0, 14518, 14522, 14526, 14531, - 14535, 14540, 14544, 14549, 14554, 0, 0, 14560, 14564, 0, 0, 14569, - 14573, 14578, 0, 0, 0, 0, 0, 0, 0, 0, 14582, 14588, 0, 0, 0, 0, 14594, - 14598, 0, 14602, 14606, 14611, 14616, 14621, 0, 0, 14627, 14631, 14634, - 14637, 14640, 14643, 14646, 14649, 14653, 14656, 14660, 14663, 14667, - 14673, 14679, 14685, 14691, 14697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14703, - 14707, 0, 14711, 14714, 14718, 14721, 14725, 14728, 0, 0, 0, 14732, - 14735, 14739, 0, 14743, 14746, 14750, 14754, 0, 0, 0, 14757, 14761, 0, - 14765, 0, 14769, 14773, 0, 0, 0, 14777, 14781, 0, 0, 0, 14785, 14789, - 14793, 0, 0, 0, 14796, 14799, 14802, 14806, 14810, 14814, 14818, 14822, - 14826, 14830, 14834, 14838, 0, 0, 0, 0, 14841, 14846, 14850, 14855, - 14859, 0, 0, 0, 14864, 14868, 14873, 0, 14878, 14882, 14887, 14892, 0, 0, - 14896, 0, 0, 0, 0, 0, 0, 14899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14905, 14909, 14912, 14915, 14918, 14921, 14924, 14927, 14931, 14934, - 14938, 14942, 14947, 14952, 14956, 14960, 14964, 14968, 14972, 14977, - 14981, 0, 0, 0, 0, 0, 14984, 14990, 14994, 14998, 0, 15002, 15005, 15009, - 15012, 15016, 15019, 15023, 15027, 0, 15031, 15034, 15038, 0, 15042, - 15045, 15049, 15053, 15056, 15060, 15064, 15068, 15072, 15076, 15080, - 15084, 15088, 15092, 15096, 15100, 15104, 15108, 15112, 15116, 15120, - 15124, 15128, 0, 15132, 15135, 15139, 15143, 15147, 15150, 15153, 15157, - 15161, 15165, 15169, 15173, 15177, 15181, 15185, 15189, 0, 0, 0, 15192, - 15196, 15201, 15205, 15210, 15214, 15219, 15224, 0, 15230, 15234, 15239, - 0, 15244, 15248, 15253, 15258, 0, 0, 0, 0, 0, 0, 0, 15262, 15266, 0, - 15272, 15276, 15280, 0, 0, 0, 0, 0, 15284, 15289, 15294, 15299, 0, 0, - 15305, 15309, 15312, 15315, 15318, 15321, 15324, 15327, 15331, 15334, 0, - 0, 0, 0, 0, 0, 0, 0, 15338, 15351, 15363, 15375, 15387, 15399, 15411, - 15423, 0, 15427, 15431, 15435, 0, 15439, 15442, 15446, 15449, 15453, - 15456, 15460, 15464, 0, 15468, 15471, 15475, 0, 15479, 15482, 15486, - 15490, 15493, 15497, 15501, 15505, 15509, 15513, 15517, 15521, 15525, - 15529, 15533, 15537, 15541, 15545, 15549, 15553, 15557, 15561, 15565, 0, - 15569, 15572, 15576, 15580, 15584, 15587, 15590, 15594, 15598, 15602, 0, - 15606, 15610, 15614, 15618, 15622, 0, 0, 15625, 15629, 15633, 15638, - 15642, 15647, 15651, 15656, 15661, 0, 15667, 15671, 15676, 0, 15681, - 15685, 15690, 15695, 0, 0, 0, 0, 0, 0, 0, 15699, 15703, 0, 0, 0, 0, 0, 0, - 0, 15709, 0, 15713, 15718, 15723, 15728, 0, 0, 15734, 15738, 15741, - 15744, 15747, 15750, 15753, 15756, 15760, 15763, 0, 15767, 15771, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15775, 15779, 15783, 0, 15787, 15790, - 15794, 15797, 15801, 15804, 15808, 15812, 0, 15816, 15819, 15823, 0, - 15827, 15830, 15834, 15838, 15841, 15845, 15849, 15853, 15857, 15861, - 15865, 15869, 15873, 15877, 15881, 15885, 15889, 15893, 15897, 15901, - 15905, 15909, 15913, 15917, 15921, 15924, 15928, 15932, 15936, 15939, - 15942, 15946, 15950, 15954, 15958, 15962, 15966, 15970, 15974, 15978, - 15981, 0, 0, 15985, 15989, 15994, 15998, 16003, 16007, 16012, 16017, 0, - 16023, 16027, 16032, 0, 16037, 16041, 16046, 16051, 16055, 0, 0, 0, 0, 0, - 0, 0, 0, 16060, 0, 0, 0, 0, 0, 0, 0, 16066, 16072, 16077, 16082, 16087, - 0, 0, 16093, 16097, 16100, 16103, 16106, 16109, 16112, 16115, 16119, - 16122, 16126, 16130, 16135, 16140, 16146, 16152, 0, 0, 0, 16158, 16162, - 16168, 16174, 16180, 16185, 16191, 0, 0, 16197, 16201, 0, 16205, 16209, - 16213, 16217, 16221, 16225, 16229, 16233, 16237, 16241, 16245, 16249, - 16253, 16257, 16261, 16265, 16269, 16273, 0, 0, 0, 16277, 16283, 16289, - 16295, 16301, 16307, 16313, 16319, 16325, 16331, 16337, 16343, 16351, - 16357, 16363, 16369, 16375, 16381, 16387, 16393, 16399, 16405, 16411, - 16417, 0, 16423, 16429, 16435, 16441, 16447, 16453, 16457, 16463, 16467, - 0, 16471, 0, 0, 16477, 16481, 16487, 16493, 16499, 16503, 16509, 0, 0, 0, - 16513, 0, 0, 0, 0, 16517, 16522, 16529, 16536, 16543, 16550, 0, 16557, 0, - 16564, 16569, 16574, 16581, 16588, 16597, 16608, 16617, 0, 0, 0, 0, 0, 0, - 16622, 16628, 16633, 16638, 16643, 16648, 16653, 16658, 16664, 16669, 0, - 0, 16675, 16682, 16689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16694, 16701, - 16708, 16715, 16722, 16729, 16736, 16743, 16750, 16757, 16764, 16771, - 16778, 16785, 16792, 16799, 16806, 16813, 16820, 16827, 16834, 16841, - 16848, 16855, 16862, 16869, 16876, 16883, 16890, 16897, 16904, 16911, - 16918, 16924, 16931, 16938, 16943, 16950, 16955, 16962, 16969, 16976, - 16983, 16990, 16997, 17003, 17010, 17015, 17021, 17028, 17035, 17042, - 17048, 17055, 17062, 17069, 17075, 17082, 0, 0, 0, 0, 17087, 17094, - 17100, 17107, 17113, 17122, 17131, 17136, 17141, 17146, 17153, 17160, - 17167, 17174, 17179, 17184, 17189, 17194, 17199, 17203, 17207, 17211, - 17215, 17219, 17223, 17228, 17232, 17237, 17242, 0, 0, 0, 0, 0, 0, 0, 0, + 150, 154, 159, 164, 168, 173, 178, 182, 187, 192, 197, 202, 207, 210, + 214, 217, 221, 224, 228, 232, 237, 242, 247, 251, 256, 261, 266, 270, + 275, 280, 284, 289, 294, 298, 303, 308, 312, 317, 322, 326, 331, 336, + 341, 346, 351, 355, 358, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 368, 373, + 376, 379, 382, 385, 388, 391, 393, 396, 402, 410, 413, 417, 420, 422, + 425, 428, 431, 434, 438, 441, 444, 447, 449, 452, 458, 466, 473, 480, + 487, 492, 499, 505, 512, 519, 526, 534, 539, 547, 554, 560, 567, 574, + 582, 589, 597, 605, 610, 618, 625, 631, 638, 645, 652, 655, 661, 668, + 674, 681, 688, 695, 700, 707, 714, 720, 727, 734, 741, 749, 754, 762, + 769, 775, 782, 789, 797, 804, 812, 820, 825, 833, 840, 846, 853, 860, + 867, 870, 876, 883, 889, 896, 903, 910, 915, 923, 930, 937, 944, 951, + 958, 965, 972, 979, 987, 995, 1003, 1011, 1019, 1027, 1035, 1043, 1050, + 1057, 1064, 1071, 1078, 1085, 1092, 1099, 1106, 1113, 1120, 1127, 1135, + 1143, 1151, 1159, 1167, 1175, 1183, 1191, 1199, 1207, 1214, 1221, 1229, + 1237, 1245, 1253, 1261, 1269, 1277, 1285, 1293, 1299, 1304, 1309, 1317, + 1325, 1333, 1341, 1346, 1353, 1360, 1368, 1376, 1384, 1392, 1401, 1410, + 1417, 1424, 1431, 1438, 1446, 1454, 1462, 1470, 1481, 1486, 1491, 1498, + 1505, 1512, 1519, 1526, 1533, 1538, 1543, 1550, 1557, 1565, 1573, 1581, + 1589, 1596, 1603, 1611, 1619, 1627, 1635, 1643, 1651, 1659, 1667, 1675, + 1683, 1690, 1697, 1704, 1711, 1718, 1725, 1732, 1739, 1747, 1755, 1762, + 1769, 1776, 1783, 1791, 1799, 1807, 1815, 1823, 1830, 1837, 1845, 1853, + 1861, 1869, 1875, 1881, 1887, 1894, 1901, 1906, 1911, 1916, 1923, 1930, + 1937, 1944, 1952, 1960, 1967, 1973, 1978, 1983, 1990, 1997, 2004, 2009, + 2014, 2019, 2026, 2033, 2040, 2047, 2054, 2061, 2069, 2079, 2087, 2094, + 2101, 2106, 2111, 2118, 2125, 2129, 2134, 2139, 2144, 2152, 2161, 2168, + 2175, 2184, 2191, 2198, 2203, 2210, 2217, 2224, 2231, 2238, 2243, 2250, + 2257, 2265, 2270, 2275, 2280, 2290, 2294, 2300, 2306, 2312, 2318, 2326, + 2339, 2347, 2352, 2362, 2367, 2372, 2382, 2387, 2394, 2401, 2409, 2417, + 2424, 2431, 2438, 2445, 2455, 2465, 2474, 2483, 2493, 2503, 2513, 2523, + 2529, 2539, 2549, 2559, 2569, 2577, 2585, 2592, 2599, 2607, 2615, 2623, + 2631, 2638, 2645, 2655, 2665, 2673, 2681, 2689, 2694, 2704, 2709, 2716, + 2723, 2728, 2733, 2741, 2749, 2759, 2769, 2776, 2783, 2792, 2801, 2809, + 2817, 2826, 2835, 2843, 2851, 2860, 2869, 2878, 2887, 2897, 2907, 2915, + 2923, 2932, 2941, 2950, 2959, 2969, 2979, 2987, 2995, 3004, 3013, 3022, + 3031, 3040, 3049, 3054, 3059, 3067, 3075, 3085, 3093, 3098, 3103, 3110, + 3117, 3124, 3131, 3138, 3145, 3155, 3165, 3175, 3185, 3192, 3199, 3209, + 3219, 3227, 3235, 3243, 3251, 3259, 3266, 3273, 3280, 3286, 3293, 3300, + 3307, 3316, 3326, 3336, 3343, 3350, 3356, 3361, 3368, 3374, 3380, 3387, + 3394, 3405, 3415, 3422, 3429, 3436, 3443, 3449, 3454, 3461, 3467, 3472, + 3480, 3488, 3495, 3501, 3506, 3513, 3518, 3525, 3534, 3543, 3552, 3559, + 3565, 3571, 3576, 3583, 3590, 3597, 3604, 3611, 3616, 3621, 3630, 3638, + 3647, 3652, 3659, 3670, 3677, 3685, 3694, 3700, 3706, 3712, 3719, 3724, + 3730, 3741, 3750, 3759, 3767, 3775, 3785, 3790, 3797, 3804, 3809, 3821, + 3830, 3838, 3845, 3854, 3859, 3864, 3871, 3878, 3885, 3892, 3898, 3907, + 3915, 3920, 3928, 3934, 3942, 3950, 3956, 3962, 3968, 3975, 3983, 3989, + 3997, 4004, 4009, 4016, 4024, 4034, 4041, 4048, 4058, 4065, 4072, 4082, + 4089, 4096, 4103, 4109, 4115, 4125, 4138, 4143, 4150, 4155, 4159, 4165, + 4174, 4181, 4186, 4191, 4195, 4200, 4206, 4210, 4216, 4222, 4228, 4234, + 4242, 4247, 4252, 4257, 4262, 4268, 4270, 4275, 4279, 4285, 4291, 4297, + 4302, 4309, 4316, 4322, 4329, 4337, 4345, 4350, 4355, 4359, 4364, 4366, + 4368, 4371, 4373, 4376, 4381, 4386, 4392, 4397, 4401, 4406, 4411, 4420, + 4426, 4431, 4437, 4442, 4448, 4456, 4464, 4468, 4472, 4477, 4483, 4489, + 4495, 4501, 4506, 4513, 4521, 4529, 4534, 4540, 4547, 4554, 4561, 4568, + 4572, 4577, 4582, 4587, 4592, 4597, 4600, 4603, 4606, 4609, 4612, 4615, + 4619, 4623, 4629, 4632, 4637, 4643, 4649, 4652, 4657, 4663, 4667, 4673, + 4679, 4685, 4691, 4696, 4701, 4706, 4709, 4715, 4720, 4725, 4729, 4734, + 4740, 4746, 4749, 4753, 4757, 4761, 4764, 4767, 4772, 4776, 4783, 4787, + 4793, 4797, 4803, 4807, 4811, 4815, 4820, 4825, 4832, 4838, 4845, 4851, + 4857, 4863, 4866, 4870, 4874, 4878, 4882, 4887, 4892, 4896, 4900, 4906, + 4910, 4914, 4919, 4925, 4930, 4936, 4940, 4947, 4952, 4956, 4961, 4966, + 4972, 4975, 4979, 4984, 4989, 4998, 5004, 5009, 5013, 5018, 5022, 5027, + 5031, 5035, 5040, 5044, 5050, 5055, 5060, 5065, 5070, 5075, 5080, 5086, + 5092, 5098, 5104, 5109, 5115, 5121, 5127, 5132, 5137, 5144, 5151, 5155, + 5161, 5168, 0, 0, 5175, 5178, 5187, 5196, 5207, 5211, 0, 0, 0, 0, 5216, + 5219, 5224, 5232, 5237, 5245, 5253, 0, 5261, 0, 5269, 5277, 5285, 5296, + 5301, 5306, 5311, 5316, 5321, 5326, 5331, 5336, 5341, 5346, 5351, 5356, + 5361, 5366, 5371, 5376, 0, 5381, 5386, 5391, 5396, 5401, 5406, 5411, + 5416, 5424, 5432, 5440, 5448, 5456, 5464, 5475, 5480, 5485, 5490, 5495, + 5500, 5505, 5510, 5515, 5520, 5525, 5530, 5535, 5540, 5545, 5550, 5555, + 5560, 5566, 5571, 5576, 5581, 5586, 5591, 5596, 5601, 5609, 5617, 5625, + 5633, 5641, 5646, 5650, 5654, 5661, 5671, 5681, 5685, 5689, 5693, 5699, + 5706, 5710, 5715, 5719, 5724, 5728, 5733, 5737, 5742, 5747, 5752, 5757, + 5762, 5767, 5772, 5777, 5782, 5787, 5792, 5797, 5802, 5807, 5812, 5816, + 5820, 5826, 5830, 5835, 5841, 5849, 5854, 5859, 5866, 5871, 5876, 5883, + 5892, 5901, 5912, 5920, 5925, 5930, 5935, 5942, 5947, 5953, 5958, 5963, + 5968, 5973, 5978, 5983, 5991, 5997, 6002, 6006, 6011, 6016, 6021, 6026, + 6031, 6036, 6041, 6045, 6051, 6055, 6060, 6065, 6070, 6074, 6079, 6084, + 6089, 6094, 6098, 6103, 6107, 6112, 6117, 6122, 6127, 6133, 6138, 6144, + 6148, 6153, 6157, 6161, 6166, 6171, 6176, 6181, 6186, 6191, 6196, 6200, + 6206, 6210, 6215, 6220, 6225, 6229, 6234, 6239, 6244, 6249, 6253, 6258, + 6262, 6267, 6272, 6277, 6282, 6288, 6293, 6299, 6303, 6308, 6312, 6320, + 6325, 6330, 6335, 6342, 6347, 6353, 6358, 6363, 6368, 6373, 6378, 6383, + 6391, 6397, 6402, 6407, 6412, 6417, 6422, 6428, 6434, 6441, 6448, 6457, + 6466, 6473, 6480, 6489, 6498, 6503, 6508, 6513, 6518, 6523, 6528, 6533, + 6538, 6549, 6560, 6565, 6570, 6577, 6584, 6592, 6600, 6605, 6610, 6615, + 6620, 6624, 6628, 6632, 6638, 6644, 6648, 6655, 6660, 6670, 6680, 6686, + 6692, 6700, 6708, 6716, 6724, 6731, 6738, 6746, 6754, 6762, 6770, 6778, + 6786, 6794, 6802, 6810, 6818, 6825, 6832, 6838, 6844, 6852, 6860, 6867, + 6874, 6882, 6890, 6896, 6902, 6910, 6918, 6926, 6934, 6940, 6946, 6954, + 6962, 6970, 6978, 6985, 6992, 7000, 7008, 7016, 7024, 7029, 7034, 7041, + 7048, 7058, 7068, 7072, 7080, 7088, 7095, 7102, 7110, 7118, 7125, 7132, + 7140, 7148, 7155, 7162, 7170, 7178, 7183, 7190, 7197, 7204, 7211, 7217, + 7223, 7231, 7239, 7244, 7249, 7257, 7265, 7273, 7281, 7289, 7297, 7304, + 7311, 7319, 7327, 7335, 7343, 7350, 7357, 7363, 7369, 7378, 7387, 7394, + 7401, 7408, 7415, 7422, 7429, 7436, 7443, 7451, 7459, 7467, 7475, 7483, + 7491, 7501, 7511, 7518, 7525, 7532, 7539, 7546, 7553, 7560, 7567, 7574, + 7581, 7588, 7595, 7602, 7609, 7616, 7623, 7630, 7637, 7644, 7651, 7658, + 7665, 7672, 7679, 7684, 7689, 7694, 7699, 7704, 7709, 7714, 7719, 7724, + 7729, 7735, 7741, 7749, 7757, 7765, 7773, 7781, 7789, 7797, 7805, 7813, + 7821, 7826, 7831, 7836, 7841, 7849, 0, 7857, 7862, 7867, 7872, 7877, + 7882, 7887, 7892, 7897, 7901, 7906, 7911, 7916, 7921, 7926, 7931, 7936, + 7941, 7946, 7951, 7956, 7961, 7966, 7971, 7976, 7981, 7986, 7991, 7996, + 8001, 8006, 8011, 8016, 8021, 8026, 8031, 8036, 8041, 0, 0, 8046, 8053, + 8056, 8060, 8064, 8067, 8071, 0, 8075, 8080, 8085, 8090, 8095, 8100, + 8105, 8110, 8115, 8119, 8124, 8129, 8134, 8139, 8144, 8149, 8154, 8159, + 8164, 8169, 8174, 8179, 8184, 8189, 8194, 8199, 8204, 8209, 8214, 8219, + 8224, 8229, 8234, 8239, 8244, 8249, 8254, 8259, 8264, 0, 8271, 8276, 0, + 0, 8279, 8285, 8291, 0, 8295, 8300, 8305, 8310, 8317, 8324, 8329, 8334, + 8339, 8344, 8349, 8354, 8359, 8366, 8371, 8378, 8385, 8390, 8397, 8402, + 8407, 8412, 8419, 8424, 8429, 8436, 8445, 8450, 8455, 8460, 8465, 8471, + 8476, 8483, 8490, 8497, 8502, 8507, 8512, 8517, 8522, 8527, 8537, 8542, + 8551, 8556, 8561, 8566, 8571, 8578, 8585, 8592, 8598, 8604, 8611, 0, 0, + 0, 0, 0, 0, 0, 0, 8618, 8622, 8626, 8630, 8634, 8638, 8642, 8646, 8650, + 8654, 8658, 8663, 8667, 8671, 8676, 8680, 8685, 8689, 8693, 8697, 8702, + 8706, 8711, 8715, 8719, 8723, 8727, 0, 0, 0, 0, 0, 8731, 8738, 8746, + 8753, 8758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8763, 8766, 8770, 8775, + 8779, 8783, 8787, 8793, 8799, 8802, 8809, 8818, 8821, 8824, 8829, 8835, + 8839, 8847, 8853, 8859, 8867, 8871, 8876, 8887, 8892, 8896, 8900, 8904, + 8907, 0, 8910, 8917, 8921, 8927, 8931, 8938, 8945, 8953, 8960, 8967, + 8971, 8975, 8981, 8985, 8989, 8993, 8997, 9001, 9005, 9009, 9013, 9017, + 9021, 9025, 9029, 9033, 9037, 9041, 9045, 9049, 9057, 9065, 9075, 9084, + 9093, 9096, 9100, 9104, 9108, 9112, 9116, 9120, 9124, 9128, 9133, 9137, + 9140, 9143, 9146, 9149, 9152, 9155, 9158, 9161, 9165, 9169, 9173, 9178, + 9183, 9189, 9192, 9199, 9208, 9213, 9218, 9225, 9231, 9236, 9240, 9244, + 9248, 9252, 9256, 9260, 9265, 9269, 9274, 9278, 9283, 9288, 9295, 9301, + 9307, 9313, 9318, 9327, 9336, 9341, 9348, 9355, 9362, 9369, 9373, 9377, + 9381, 9388, 9398, 9402, 9406, 9410, 9417, 9425, 9429, 9433, 9440, 9444, + 9448, 9452, 9459, 9466, 9478, 9482, 9486, 9490, 9500, 9509, 9513, 9521, + 9528, 9535, 9544, 9555, 9563, 9567, 9576, 9587, 9595, 9608, 9616, 9624, + 9632, 9640, 9646, 9655, 9662, 9666, 9674, 9678, 9685, 9693, 9697, 9703, + 9710, 9717, 9721, 9729, 9733, 9740, 9744, 9752, 9756, 9764, 9772, 9779, + 9787, 9795, 9802, 9808, 9812, 9819, 9827, 9833, 9840, 9847, 9853, 9863, + 9871, 9878, 9884, 9888, 9891, 9895, 9901, 9909, 9913, 9919, 9925, 9932, + 9939, 9942, 9949, 9954, 9963, 9968, 9972, 9985, 9998, 10004, 10011, + 10016, 10022, 10027, 10033, 10043, 10050, 10059, 10069, 10075, 10080, + 10085, 10089, 10093, 10098, 10103, 10109, 10117, 10125, 10136, 10141, + 10150, 10159, 10166, 10172, 10178, 10184, 10190, 10196, 10202, 10209, + 10215, 10222, 10229, 10236, 10243, 10249, 10257, 10266, 10273, 10281, + 10289, 10295, 10301, 10307, 10315, 10323, 10333, 10343, 10347, 10353, + 10359, 0, 10365, 10370, 10375, 10382, 10387, 10392, 10399, 10404, 10413, + 10418, 10423, 10428, 10433, 10438, 10445, 10450, 10457, 10462, 10467, + 10472, 10477, 10482, 10488, 10492, 10497, 10504, 10509, 10514, 10519, + 10524, 10529, 10536, 10543, 10550, 10555, 10560, 10566, 10571, 10576, + 10582, 10587, 10592, 10600, 10608, 10613, 10618, 10624, 10629, 10634, + 10638, 10644, 10648, 10652, 10658, 10664, 10669, 10674, 10681, 10688, + 10692, 0, 0, 10696, 10703, 10710, 10717, 10727, 10739, 10750, 10766, + 10778, 10789, 10797, 10804, 10814, 10829, 10840, 10846, 10855, 10863, + 10874, 10884, 10892, 10903, 10910, 10918, 10929, 10935, 10941, 10949, + 10957, 10965, 10971, 10981, 10989, 10999, 11009, 11022, 11036, 11050, + 11060, 11071, 11082, 11095, 11108, 11122, 11134, 11146, 11159, 11172, + 11184, 11197, 11206, 11214, 11219, 11224, 11229, 11234, 11239, 11244, + 11249, 11254, 11259, 11264, 11269, 11274, 11279, 11284, 11289, 11294, + 11299, 11304, 11309, 11314, 11319, 11324, 11329, 11334, 11339, 11344, + 11349, 11354, 11359, 11364, 11369, 11374, 11378, 11383, 11388, 11393, + 11398, 11403, 11407, 11411, 11415, 11419, 11423, 11427, 11431, 11435, + 11439, 11443, 11447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11452, + 11457, 11461, 11465, 11469, 11473, 11477, 11481, 11486, 11490, 11495, + 11499, 11504, 11508, 11512, 11516, 11521, 11525, 11530, 11535, 11540, + 11544, 11549, 11554, 11559, 11564, 11569, 11574, 11579, 11584, 11589, + 11593, 11597, 11604, 11608, 11613, 11617, 11621, 11626, 11630, 11637, + 11644, 11651, 11658, 11666, 11674, 11683, 11691, 11698, 11705, 11713, + 11719, 11725, 11731, 11737, 11744, 11749, 11753, 11758, 0, 0, 0, 0, 0, + 11762, 11767, 11772, 11777, 11782, 11787, 11792, 11797, 11802, 11807, + 11812, 11817, 11822, 11827, 11832, 11837, 11842, 11847, 11852, 11857, + 11862, 11867, 11872, 11877, 11882, 11887, 11892, 11900, 11907, 11913, + 11918, 11926, 11933, 11939, 11946, 11952, 11957, 11964, 11971, 11977, + 11982, 11987, 11993, 11998, 12003, 12009, 0, 0, 12014, 12020, 12026, + 12032, 12038, 12044, 12050, 12055, 12063, 12069, 12075, 12081, 12087, + 12093, 12101, 0, 12107, 12112, 12117, 12122, 12127, 12132, 12137, 12142, + 12147, 12152, 12157, 12162, 12167, 12172, 12177, 12182, 12187, 12192, + 12197, 12202, 12207, 12212, 12217, 12222, 12227, 12232, 12237, 12242, 0, + 0, 12247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17247, 17252, 0, 17259, 0, 0, 17266, 17271, 0, 17276, 0, - 0, 17283, 0, 0, 0, 0, 0, 0, 17288, 17293, 17297, 17304, 0, 17311, 17316, - 17321, 17326, 17333, 17340, 17347, 0, 17354, 17359, 17364, 0, 17371, 0, - 17378, 0, 0, 17383, 17390, 0, 17397, 17401, 17408, 17412, 17417, 17425, - 17431, 17437, 17442, 17448, 17454, 17460, 17465, 0, 17471, 17479, 17486, - 0, 0, 17493, 17498, 17504, 17509, 17515, 0, 17521, 0, 17527, 17534, - 17541, 17548, 17555, 17560, 0, 0, 17564, 17569, 17573, 17577, 17581, - 17585, 17589, 17593, 17598, 17602, 0, 0, 17607, 17613, 17619, 17626, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12251, 12260, + 12268, 12275, 12283, 12295, 12302, 12309, 12316, 12328, 12339, 12346, + 12354, 12360, 12365, 12373, 12381, 12389, 12395, 12405, 12413, 0, 12420, + 12428, 12436, 12445, 12454, 12467, 12473, 12479, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12485, 12492, 12497, 12502, + 12507, 12515, 12523, 12530, 12537, 12544, 12551, 12558, 12565, 12572, + 12578, 12586, 12592, 12597, 12602, 12607, 12612, 12617, 12622, 12627, + 12632, 12637, 12642, 12647, 12652, 12656, 12660, 12664, 12669, 12675, + 12681, 12687, 12692, 12697, 12702, 12707, 12713, 12722, 12730, 12736, + 12744, 12750, 12754, 12758, 12762, 12767, 12770, 12774, 12777, 12781, + 12784, 12788, 12792, 12796, 12801, 12806, 12809, 12813, 12818, 12823, + 12826, 12830, 12833, 12837, 12841, 12845, 12849, 12853, 12857, 12861, + 12865, 12869, 12873, 12877, 12881, 12885, 12889, 12893, 12897, 12901, + 12905, 12908, 12912, 12915, 12919, 12923, 12927, 12930, 12933, 12937, + 12941, 12944, 12948, 12952, 12956, 12960, 12964, 12968, 12971, 12976, + 12981, 12985, 12989, 12994, 12998, 13003, 13007, 13012, 13017, 13023, + 13029, 13035, 13039, 13044, 13050, 13056, 13060, 13065, 13069, 13075, + 13080, 13083, 13089, 13095, 13100, 13105, 13112, 13117, 13122, 13126, + 13130, 13134, 13138, 13142, 13146, 13150, 13154, 13159, 13164, 13169, + 13175, 13178, 13182, 13186, 13189, 13192, 13195, 13198, 13201, 13204, + 13208, 13211, 13215, 13219, 13226, 13231, 13235, 13239, 13243, 13247, + 13251, 13257, 13261, 13265, 13269, 13273, 13279, 13283, 13287, 13290, + 13294, 13298, 0, 13302, 13305, 13309, 13312, 13316, 13319, 13323, 13327, + 0, 0, 13331, 13334, 0, 0, 13338, 13341, 13345, 13348, 13352, 13356, + 13360, 13364, 13368, 13372, 13376, 13380, 13384, 13388, 13392, 13396, + 13400, 13404, 13408, 13412, 13416, 13420, 0, 13423, 13426, 13430, 13434, + 13438, 13441, 13444, 0, 13448, 0, 0, 0, 13451, 13455, 13459, 13463, 0, 0, + 13466, 13470, 13474, 13479, 13483, 13488, 13492, 13497, 13502, 0, 0, + 13508, 13512, 0, 0, 13517, 13521, 13526, 13530, 0, 0, 0, 0, 0, 0, 0, 0, + 13536, 0, 0, 0, 0, 13542, 13546, 0, 13550, 13554, 13559, 13564, 13569, 0, + 0, 13575, 13579, 13582, 13585, 13588, 13591, 13594, 13597, 13601, 13604, + 13608, 13616, 13625, 13629, 13633, 13639, 13645, 13651, 13657, 13671, + 13678, 13681, 0, 0, 0, 0, 0, 13685, 13692, 13697, 0, 13702, 13706, 13711, + 13715, 13720, 13724, 0, 0, 0, 0, 13729, 13734, 0, 0, 13739, 13744, 13749, + 13753, 13758, 13763, 13768, 13773, 13778, 13783, 13788, 13793, 13798, + 13803, 13808, 13813, 13818, 13823, 13828, 13833, 13838, 13843, 0, 13847, + 13851, 13856, 13861, 13866, 13870, 13874, 0, 13879, 13883, 0, 13888, + 13893, 0, 13898, 13903, 0, 0, 13907, 0, 13912, 13918, 13923, 13929, + 13934, 0, 0, 0, 0, 13940, 13946, 0, 0, 13952, 13958, 13964, 0, 0, 0, + 13969, 0, 0, 0, 0, 0, 0, 0, 13974, 13979, 13984, 13989, 0, 13994, 0, 0, + 0, 0, 0, 0, 0, 13999, 14004, 14008, 14012, 14016, 14020, 14024, 14028, + 14033, 14037, 14042, 14046, 14050, 14054, 14058, 14064, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14069, 14074, 14079, 0, 14084, 14088, 14093, 14097, 14102, + 14106, 14111, 14116, 14121, 0, 14127, 14131, 14136, 0, 14142, 14146, + 14151, 14155, 14160, 14165, 14170, 14175, 14180, 14185, 14190, 14195, + 14200, 14205, 14210, 14215, 14220, 14225, 14230, 14235, 14240, 14245, 0, + 14249, 14253, 14258, 14263, 14268, 14272, 14276, 0, 14281, 14285, 0, + 14290, 14295, 14300, 14305, 14310, 0, 0, 14314, 14319, 14324, 14330, + 14335, 14341, 14346, 14352, 14358, 14365, 0, 14372, 14377, 14383, 0, + 14390, 14395, 14401, 0, 0, 14406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14410, 14416, 14422, 14428, 0, 0, 14435, 14440, 14444, 14448, + 14452, 14456, 14460, 14464, 14469, 14473, 14478, 14483, 0, 0, 0, 0, 0, 0, + 0, 14488, 0, 0, 0, 0, 0, 0, 0, 14493, 14498, 14503, 0, 14508, 14512, + 14517, 14521, 14526, 14530, 14535, 14540, 0, 0, 14545, 14549, 0, 0, + 14554, 14558, 14563, 14567, 14572, 14577, 14582, 14587, 14592, 14597, + 14602, 14607, 14612, 14617, 14622, 14627, 14632, 14637, 14642, 14647, + 14652, 14657, 0, 14661, 14665, 14670, 14675, 14680, 14684, 14688, 0, + 14693, 14697, 0, 14702, 14707, 14712, 14717, 14722, 0, 0, 14726, 14731, + 14736, 14742, 14747, 14753, 14758, 14764, 14770, 0, 0, 14777, 14782, 0, + 0, 14788, 14793, 14799, 0, 0, 0, 0, 0, 0, 0, 0, 14804, 14811, 0, 0, 0, 0, + 14818, 14823, 0, 14828, 14833, 14839, 14845, 14851, 0, 0, 14858, 14863, + 14867, 14871, 14875, 14879, 14883, 14887, 14892, 14896, 14901, 14905, + 14910, 14917, 14924, 14931, 14938, 14945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14952, 14956, 0, 14960, 14963, 14967, 14970, 14974, 14977, 0, 0, 0, + 14981, 14984, 14988, 0, 14992, 14995, 14999, 15003, 0, 0, 0, 15006, + 15010, 0, 15014, 0, 15018, 15022, 0, 0, 0, 15026, 15030, 0, 0, 0, 15034, + 15037, 15041, 0, 0, 0, 15044, 15047, 15050, 15054, 15058, 15061, 15065, + 15069, 15073, 15077, 15081, 15085, 0, 0, 0, 0, 15088, 15093, 15097, + 15102, 15106, 0, 0, 0, 15111, 15115, 15120, 0, 15125, 15129, 15134, + 15139, 0, 0, 15143, 0, 0, 0, 0, 0, 0, 15146, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15152, 15156, 15159, 15162, 15165, 15168, 15171, 15174, + 15178, 15181, 15185, 15189, 15194, 15199, 15203, 15207, 15211, 15215, + 15219, 15224, 15228, 0, 0, 0, 0, 0, 15231, 15237, 15241, 15245, 0, 15249, + 15252, 15256, 15259, 15263, 15266, 15270, 15274, 0, 15278, 15281, 15285, + 0, 15289, 15292, 15296, 15300, 15303, 15307, 15311, 15315, 15319, 15323, + 15327, 15331, 15335, 15339, 15343, 15347, 15351, 15355, 15359, 15363, + 15367, 15371, 15375, 0, 15378, 15381, 15385, 15389, 15393, 15396, 15399, + 15403, 15407, 15410, 15414, 15418, 15422, 15426, 15430, 15434, 0, 0, 0, + 15437, 15441, 15446, 15450, 15455, 15459, 15464, 15469, 0, 15475, 15479, + 15484, 0, 15489, 15493, 15498, 15503, 0, 0, 0, 0, 0, 0, 0, 15507, 15511, + 0, 15517, 15521, 15525, 0, 0, 0, 0, 0, 15529, 15534, 15539, 15544, 0, 0, + 15550, 15554, 15557, 15560, 15563, 15566, 15569, 15572, 15576, 15579, 0, + 0, 0, 0, 0, 0, 0, 0, 15583, 15596, 15608, 15620, 15632, 15644, 15656, + 15668, 15672, 15679, 15684, 15689, 0, 15694, 15698, 15703, 15707, 15712, + 15716, 15721, 15726, 0, 15731, 15735, 15740, 0, 15745, 15749, 15754, + 15759, 15763, 15768, 15773, 15778, 15783, 15788, 15793, 15798, 15803, + 15808, 15813, 15818, 15823, 15828, 15833, 15838, 15843, 15848, 15853, 0, + 15857, 15861, 15866, 15871, 15876, 15880, 15884, 15889, 15894, 15898, 0, + 15903, 15908, 15913, 15918, 15923, 0, 0, 15927, 15932, 15937, 15943, + 15948, 15954, 15959, 15965, 15971, 0, 15978, 15983, 15989, 0, 15995, + 16000, 16006, 16012, 0, 0, 0, 0, 0, 0, 0, 16017, 16022, 0, 0, 0, 0, 0, 0, + 0, 16029, 0, 16034, 16040, 16046, 16052, 0, 0, 16059, 16064, 16068, + 16072, 16076, 16080, 16084, 16088, 16093, 16097, 0, 16102, 16107, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16112, 16116, 16120, 0, 16124, 16127, + 16131, 16134, 16138, 16141, 16145, 16149, 0, 16153, 16156, 16160, 0, + 16164, 16167, 16171, 16175, 16178, 16182, 16186, 16190, 16194, 16198, + 16202, 16206, 16210, 16214, 16218, 16222, 16226, 16230, 16234, 16238, + 16242, 16246, 16250, 16253, 16257, 16260, 16264, 16268, 16272, 16275, + 16278, 16282, 16286, 16289, 16293, 16297, 16301, 16305, 16309, 16313, + 16316, 0, 0, 16320, 16324, 16329, 16333, 16338, 16342, 16347, 16352, 0, + 16358, 16362, 16367, 0, 16372, 16376, 16381, 16386, 16390, 16395, 0, 0, + 0, 0, 16399, 16405, 16411, 16417, 16423, 16429, 16435, 16441, 16447, + 16453, 16459, 16465, 16471, 16476, 16481, 16486, 0, 0, 16492, 16496, + 16499, 16502, 16505, 16508, 16511, 16514, 16518, 16521, 16525, 16529, + 16534, 16539, 16545, 16551, 16557, 16563, 16569, 16575, 16579, 16585, + 16591, 16597, 16602, 16608, 0, 0, 16614, 16618, 0, 16622, 16626, 16630, + 16634, 16638, 16642, 16646, 16650, 16654, 16658, 16662, 16666, 16670, + 16674, 16678, 16682, 16686, 16690, 0, 0, 0, 16694, 16700, 16706, 16712, + 16718, 16724, 16730, 16736, 16742, 16748, 16754, 16760, 16768, 16774, + 16780, 16786, 16792, 16798, 16804, 16810, 16816, 16822, 16828, 16834, 0, + 16840, 16846, 16852, 16858, 16864, 16870, 16874, 16880, 16884, 0, 16888, + 0, 0, 16894, 16898, 16904, 16910, 16916, 16920, 16926, 0, 0, 0, 16930, 0, + 0, 0, 0, 16934, 16939, 16946, 16953, 16960, 16967, 0, 16974, 0, 16981, + 16986, 16991, 16998, 17005, 17014, 17025, 17034, 0, 0, 0, 0, 0, 0, 17039, + 17045, 17050, 17055, 17060, 17065, 17070, 17075, 17081, 17086, 0, 0, + 17092, 17099, 17106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17111, 17118, + 17125, 17132, 17139, 17146, 17153, 17160, 17167, 17174, 17181, 17188, + 17195, 17202, 17209, 17216, 17223, 17230, 17237, 17244, 17251, 17258, + 17265, 17272, 17279, 17286, 17293, 17300, 17307, 17314, 17321, 17328, + 17335, 17341, 17348, 17355, 17360, 17367, 17372, 17379, 17386, 17393, + 17400, 17407, 17414, 17420, 17427, 17432, 17438, 17445, 17452, 17459, + 17465, 17472, 17479, 17486, 17492, 17499, 0, 0, 0, 0, 17504, 17511, + 17517, 17524, 17530, 17539, 17548, 17553, 17558, 17563, 17570, 17577, + 17584, 17591, 17596, 17601, 17606, 17611, 17616, 17620, 17624, 17628, + 17632, 17636, 17640, 17645, 17649, 17654, 17659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17633, 17637, 17648, 17663, 17678, 17688, 17699, - 17712, 17723, 17729, 17737, 17747, 17753, 17761, 17765, 17771, 17777, - 17785, 17795, 17803, 17816, 17822, 17830, 17838, 17850, 17857, 17865, - 17873, 17881, 17889, 17897, 17905, 17915, 17919, 17922, 17925, 17928, - 17931, 17934, 17937, 17941, 17944, 17948, 17952, 17956, 17960, 17964, - 17968, 17972, 17977, 17981, 17986, 17991, 17997, 18007, 18021, 18031, - 18037, 18043, 18051, 18059, 18067, 18075, 18081, 18087, 18090, 18094, - 18098, 18102, 18106, 18110, 18114, 0, 18118, 18122, 18126, 18130, 18134, - 18138, 18142, 18146, 18150, 18154, 18158, 18162, 18165, 18169, 18173, - 18177, 18180, 18184, 18188, 18192, 18196, 18200, 18204, 18208, 18212, - 18215, 18219, 18223, 18227, 18231, 18235, 18238, 18241, 18245, 18251, - 18255, 0, 0, 0, 0, 18259, 18264, 18268, 18273, 18277, 18282, 18287, - 18293, 18298, 18304, 18308, 18313, 18317, 18322, 18332, 18338, 18344, - 18351, 18361, 18367, 18371, 18375, 18381, 18387, 18395, 18401, 18409, - 18417, 18425, 18435, 18443, 18453, 18458, 18464, 18470, 18476, 18482, - 18488, 18494, 0, 18500, 18506, 18512, 18518, 18524, 18530, 18536, 18542, - 18548, 18554, 18560, 18566, 18571, 18577, 18583, 18589, 18594, 18600, - 18606, 18612, 18618, 18624, 18630, 18636, 18642, 18647, 18653, 18659, - 18665, 18671, 18677, 18682, 18687, 18693, 18701, 18708, 0, 18716, 18723, - 18736, 18743, 18750, 18758, 18766, 18772, 18778, 18784, 18794, 18799, - 18805, 18815, 18825, 0, 18835, 18845, 18853, 18865, 18877, 18883, 18897, - 18912, 18917, 18922, 18930, 18938, 18946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17664, 17669, 0, 17676, 0, 0, 17683, 17688, 0, 17693, 0, + 0, 17700, 0, 0, 0, 0, 0, 0, 17705, 17710, 17714, 17721, 0, 17728, 17733, + 17738, 17743, 17750, 17757, 17764, 0, 17771, 17776, 17781, 0, 17788, 0, + 17795, 0, 0, 17800, 17807, 0, 17814, 17818, 17825, 17829, 17834, 17842, + 17848, 17854, 17859, 17865, 17871, 17877, 17882, 0, 17888, 17896, 17903, + 0, 0, 17910, 17915, 17921, 17926, 17932, 0, 17938, 0, 17943, 17950, + 17957, 17964, 17971, 17976, 0, 0, 17980, 17985, 17989, 17993, 17997, + 18001, 18005, 18009, 18014, 18018, 0, 0, 18023, 18029, 18035, 18042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 18954, 18957, 18961, 18965, 18969, 18973, 18977, 18981, 18985, - 18989, 18993, 18997, 19001, 19005, 19009, 19013, 19017, 19021, 19025, - 19029, 19033, 19037, 19040, 19044, 19048, 19052, 19055, 19058, 19062, - 19066, 19070, 19074, 19077, 19081, 19084, 19089, 19092, 19096, 19099, - 19103, 19106, 19111, 19114, 19118, 19125, 19130, 19134, 19139, 19143, - 19148, 19152, 19157, 19164, 19170, 19175, 19179, 19183, 19187, 19191, - 19195, 19200, 19206, 19212, 19217, 19223, 19227, 19230, 19233, 19236, - 19239, 19242, 19245, 19249, 19252, 19256, 19262, 19266, 19270, 19274, - 19278, 19282, 19286, 19290, 19294, 19299, 19303, 19308, 19313, 19319, - 19324, 19330, 19336, 19342, 19348, 19354, 19362, 19369, 19377, 19385, - 19394, 19403, 19414, 19424, 19434, 19445, 19456, 19466, 19476, 19486, - 19496, 19506, 19516, 19526, 19536, 19544, 19551, 19557, 19564, 19569, - 19575, 19581, 19587, 19593, 19599, 19605, 19611, 19617, 19623, 19629, - 19635, 19640, 19648, 19655, 19661, 19668, 19676, 19682, 19688, 19694, - 19700, 19708, 19716, 19726, 19734, 19742, 19748, 19753, 19758, 19763, - 19768, 19773, 19778, 19784, 19789, 19795, 19801, 19807, 19813, 19820, - 19825, 19831, 19836, 19841, 19846, 19851, 19856, 19861, 19866, 19871, - 19876, 19881, 19886, 19891, 19896, 19901, 19906, 19911, 19916, 19921, - 19926, 19931, 19936, 19941, 19946, 19951, 19956, 19961, 19966, 19971, - 19976, 19981, 19986, 19991, 19996, 20001, 20006, 20011, 20016, 0, 20021, - 0, 0, 0, 0, 0, 20026, 0, 0, 20031, 20035, 20039, 20043, 20047, 20051, - 20055, 20059, 20063, 20067, 20071, 20075, 20079, 20083, 20087, 20091, - 20095, 20099, 20103, 20107, 20111, 20115, 20119, 20123, 20127, 20131, - 20135, 20139, 20143, 20147, 20151, 20155, 20159, 20163, 20167, 20171, - 20175, 20179, 20183, 20187, 20191, 20195, 20201, 20205, 20210, 20215, - 20219, 20224, 20229, 20233, 20237, 20241, 20245, 20249, 20253, 20257, - 20261, 20265, 20269, 20273, 20277, 20281, 20285, 20289, 20293, 20297, - 20301, 20305, 20309, 20313, 20317, 20321, 20325, 20329, 20333, 20337, - 20341, 20345, 20349, 20353, 20357, 20361, 20365, 20369, 20373, 20377, - 20381, 20385, 20389, 20393, 20397, 20401, 20405, 20409, 20413, 20417, - 20421, 20425, 20429, 20433, 20437, 20441, 20445, 20449, 20453, 20457, - 20461, 20465, 20469, 20473, 20477, 20481, 20485, 20489, 20493, 20497, - 20501, 20505, 20509, 20513, 20517, 20521, 20525, 20529, 20533, 20537, - 20541, 20545, 20549, 20553, 20557, 20561, 20565, 20569, 20573, 20577, - 20581, 20585, 20589, 20593, 20597, 20601, 20605, 20609, 20613, 20617, - 20620, 20624, 20627, 20631, 20635, 20638, 20642, 20646, 20649, 20653, - 20657, 20661, 20665, 20668, 20672, 20676, 20680, 20684, 20688, 20692, - 20695, 20699, 20703, 20707, 20711, 20715, 20719, 20723, 20727, 20731, - 20735, 20739, 20743, 20747, 20751, 20755, 20759, 20763, 20767, 20771, - 20775, 20779, 20783, 20787, 20791, 20795, 20799, 20803, 20807, 20811, - 20815, 20819, 20823, 20827, 20831, 20835, 20839, 20843, 20847, 20851, - 20855, 20859, 20863, 20867, 20871, 20875, 20879, 20883, 20887, 20891, - 20895, 20899, 20903, 20907, 20911, 20915, 20919, 20923, 20927, 20931, - 20935, 20939, 20943, 20947, 20951, 20955, 20959, 20963, 20967, 20971, - 20975, 20979, 20983, 20987, 20991, 20995, 20999, 21003, 21007, 21011, - 21015, 21019, 21023, 21027, 21031, 21035, 21039, 21043, 21047, 21051, - 21055, 21059, 21063, 21067, 21071, 21075, 21079, 21083, 21087, 21091, - 21095, 21099, 21103, 21107, 21111, 21115, 21119, 21123, 21127, 21131, - 21135, 21139, 21143, 21147, 21151, 21155, 21159, 21163, 21167, 21171, - 21175, 21179, 21183, 21187, 21191, 21195, 21199, 21203, 21207, 21211, - 21215, 21219, 21223, 21227, 21231, 21235, 21239, 21243, 21247, 21250, - 21254, 21258, 21262, 21266, 21270, 21274, 21278, 21282, 21286, 21290, - 21294, 21298, 21302, 21306, 21310, 21314, 21318, 21322, 21326, 21330, - 21334, 21338, 21342, 21345, 21349, 21353, 21357, 21361, 21365, 21369, - 21373, 21377, 21381, 21385, 21389, 21393, 21397, 21401, 21405, 21409, - 21413, 21417, 21421, 21425, 21429, 21433, 21437, 21441, 21445, 21449, - 21453, 21457, 21461, 21465, 21469, 21473, 21477, 21481, 21485, 21489, - 21493, 21497, 21501, 21505, 21509, 21513, 21517, 21521, 21525, 21529, - 21533, 0, 21537, 21541, 21545, 21549, 0, 0, 21553, 21557, 21561, 21565, - 21569, 21573, 21577, 0, 21581, 0, 21585, 21589, 21593, 21597, 0, 0, - 21601, 21605, 21609, 21613, 21617, 21621, 21625, 21629, 21633, 21637, - 21641, 21645, 21649, 21653, 21657, 21661, 21665, 21669, 21673, 21677, - 21681, 21685, 21689, 21692, 21696, 21700, 21704, 21708, 21712, 21716, - 21720, 21724, 21728, 21732, 21736, 21740, 21744, 21748, 21752, 21756, - 21760, 0, 21764, 21768, 21772, 21776, 0, 0, 21780, 21784, 21788, 21792, - 21796, 21800, 21804, 21808, 21812, 21816, 21820, 21824, 21828, 21832, - 21836, 21840, 21844, 21849, 21854, 21859, 21865, 21871, 21876, 21881, - 21887, 21890, 21894, 21898, 21902, 21906, 21910, 21914, 21918, 0, 21922, - 21926, 21930, 21934, 0, 0, 21938, 21942, 21946, 21950, 21954, 21958, - 21962, 0, 21966, 0, 21970, 21974, 21978, 21982, 0, 0, 21986, 21990, - 21994, 21998, 22002, 22006, 22010, 22014, 22018, 22023, 22028, 22033, - 22039, 22045, 22050, 0, 22055, 22059, 22063, 22067, 22071, 22075, 22079, - 22083, 22087, 22091, 22095, 22099, 22103, 22107, 22111, 22115, 22119, - 22122, 22126, 22130, 22134, 22138, 22142, 22146, 22150, 22154, 22158, - 22162, 22166, 22170, 22174, 22178, 22182, 22186, 22190, 22194, 22198, - 22202, 22206, 22210, 22214, 22218, 22222, 22226, 22230, 22234, 22238, - 22242, 22246, 22250, 22254, 22258, 22262, 22266, 22270, 22274, 22278, 0, - 22282, 22286, 22290, 22294, 0, 0, 22298, 22302, 22306, 22310, 22314, - 22318, 22322, 22326, 22330, 22334, 22338, 22342, 22346, 22350, 22354, - 22358, 22362, 22366, 22370, 22374, 22378, 22382, 22386, 22390, 22394, - 22398, 22402, 22406, 22410, 22414, 22418, 22422, 22426, 22430, 22434, - 22438, 22442, 22446, 22450, 22454, 22458, 22462, 22466, 22470, 22474, - 22478, 22482, 22486, 22490, 22494, 22498, 22502, 22506, 22510, 22514, - 22518, 22522, 22525, 22529, 22533, 22537, 22541, 22545, 22549, 22553, - 22557, 22561, 0, 0, 22565, 22574, 22580, 22585, 22589, 22592, 22597, - 22600, 22603, 22606, 22611, 22615, 22620, 22623, 22626, 22629, 22632, - 22635, 22638, 22642, 22645, 22649, 22653, 22657, 22661, 22665, 22669, - 22673, 22677, 22681, 22685, 22689, 0, 0, 0, 22695, 22701, 22705, 22709, - 22713, 22719, 22723, 22727, 22731, 22737, 22741, 22745, 22749, 22755, - 22759, 22763, 22767, 22773, 22779, 22785, 22793, 22799, 22805, 22811, - 22817, 22823, 0, 0, 0, 0, 0, 0, 22829, 22832, 22835, 22838, 22841, 22844, - 22848, 22852, 22855, 22859, 22863, 22867, 22871, 22875, 22878, 22882, - 22886, 22890, 22894, 22898, 22902, 22906, 22910, 22914, 22918, 22922, - 22925, 22929, 22933, 22937, 22941, 22945, 22949, 22953, 22957, 22961, - 22965, 22969, 22973, 22977, 22981, 22985, 22989, 22993, 22997, 23001, - 23004, 23008, 23012, 23016, 23020, 23024, 23028, 23032, 23036, 23040, - 23044, 23048, 23052, 23056, 23060, 23064, 23068, 23072, 23076, 23080, - 23084, 23088, 23092, 23096, 23100, 23104, 23108, 23112, 23116, 23120, - 23124, 23128, 23132, 23136, 23139, 23143, 23147, 23151, 23155, 23159, 0, - 0, 23163, 23168, 23173, 23178, 23183, 23188, 0, 0, 23193, 23197, 23200, - 23204, 23207, 23211, 23214, 23218, 23224, 23229, 23233, 23236, 23240, - 23244, 23249, 23253, 23258, 23262, 23267, 23271, 23276, 23280, 23285, - 23291, 23295, 23300, 23304, 23309, 23315, 23319, 23325, 23331, 23335, - 23340, 23348, 23356, 23363, 23368, 23373, 23382, 23388, 23396, 23401, - 23407, 23411, 23415, 23419, 23423, 23427, 23431, 23435, 23439, 23443, - 23447, 23453, 23458, 23463, 23466, 23470, 23474, 23479, 23483, 23488, - 23492, 23497, 23501, 23506, 23510, 23515, 23519, 23524, 23528, 23533, - 23539, 23543, 23548, 23553, 23557, 23561, 23565, 23569, 23572, 23576, - 23582, 23587, 23592, 23596, 23600, 23604, 23609, 23613, 23618, 23622, - 23627, 23630, 23634, 23638, 23643, 23647, 23652, 23656, 23661, 23667, - 23671, 23675, 23679, 23683, 23687, 23691, 23695, 23699, 23703, 23707, - 23711, 23717, 23720, 23724, 23728, 23733, 23737, 23742, 23746, 23751, - 23755, 23760, 23764, 23769, 23773, 23778, 23782, 23787, 23793, 23797, - 23801, 23807, 23813, 23819, 23825, 23829, 23833, 23837, 23841, 23845, - 23849, 23855, 23859, 23863, 23867, 23872, 23876, 23881, 23885, 23890, - 23894, 23899, 23903, 23908, 23912, 23917, 23921, 23926, 23932, 23936, - 23942, 23946, 23950, 23954, 23958, 23962, 23966, 23972, 23975, 23979, - 23983, 23988, 23992, 23997, 24001, 24006, 24010, 24015, 24019, 24024, - 24028, 24033, 24037, 24042, 24048, 24052, 24057, 24061, 24067, 24073, - 24077, 24081, 24085, 24089, 24093, 24097, 24103, 24107, 24111, 24115, - 24120, 24124, 24129, 24133, 24138, 24144, 24148, 24153, 24157, 24161, - 24165, 24169, 24173, 24177, 24181, 24187, 24191, 24195, 24199, 24204, - 24208, 24213, 24217, 24222, 24226, 24231, 24235, 24240, 24244, 24249, - 24253, 24258, 24261, 24265, 24269, 24273, 24277, 24281, 24285, 24289, - 24293, 24299, 24303, 24307, 24311, 24316, 24320, 24325, 24329, 24334, - 24338, 24343, 24347, 24352, 24356, 24361, 24365, 24370, 24376, 24379, - 24384, 24388, 24393, 24399, 24405, 24411, 24417, 24423, 24429, 24435, - 24439, 24443, 24447, 24451, 24455, 24459, 24463, 24467, 24472, 24476, - 24481, 24485, 24490, 24494, 24499, 24503, 24508, 24512, 24517, 24521, - 24526, 24530, 24534, 24538, 24542, 24546, 24550, 24554, 24560, 24563, - 24567, 24571, 24576, 24580, 24585, 24589, 24594, 24598, 24603, 24607, - 24612, 24616, 24621, 24625, 24630, 24636, 24640, 24646, 24651, 24657, - 24661, 24667, 24672, 24676, 24680, 24684, 24688, 24692, 24697, 24701, - 24705, 24710, 24714, 24719, 24722, 24726, 24730, 24734, 24738, 24742, - 24746, 24750, 24754, 24758, 24762, 24766, 24771, 24775, 24779, 24785, - 24789, 24795, 24799, 24805, 24809, 24813, 24817, 24821, 24825, 24830, - 24834, 24838, 24842, 24846, 24850, 24854, 24858, 24862, 24866, 24870, - 24876, 24882, 24888, 24894, 24900, 24905, 24911, 24917, 24923, 24927, - 24931, 24935, 24939, 24943, 24947, 24951, 24955, 24959, 24963, 24967, - 24971, 24975, 24980, 24985, 24990, 24995, 24999, 25003, 25007, 25011, - 25015, 25019, 25023, 25027, 25031, 25037, 25043, 25049, 25055, 25061, - 25067, 25073, 25079, 25085, 25089, 25093, 25097, 25101, 25105, 25109, - 25113, 25119, 25125, 25131, 25137, 25143, 25149, 25155, 25161, 25167, - 25172, 25177, 25182, 25187, 25193, 25199, 25205, 25211, 25217, 25223, - 25229, 25235, 25241, 25247, 25253, 25258, 25264, 25270, 25276, 25281, - 25286, 25291, 25296, 25301, 25306, 25311, 25316, 25321, 25326, 25331, - 25336, 25341, 25346, 25351, 25356, 25361, 25366, 25371, 25376, 25381, - 25386, 25391, 25396, 25401, 25406, 25411, 25416, 25421, 25426, 25431, - 25436, 25441, 25446, 25451, 25456, 25461, 25466, 25471, 25476, 25481, - 25486, 25490, 25495, 25500, 25505, 25510, 25515, 25520, 25525, 25530, - 25535, 25540, 25545, 25550, 25555, 25560, 25565, 25570, 25575, 25580, - 25585, 25590, 25595, 25600, 25605, 25610, 25615, 25620, 25625, 25630, - 25635, 25640, 25645, 25649, 25654, 25659, 25664, 25669, 25674, 25678, - 25683, 25689, 25694, 25699, 25704, 25709, 25715, 25720, 25725, 25730, - 25735, 25740, 25745, 25750, 25755, 25760, 25765, 25770, 25775, 25780, - 25785, 25790, 25795, 25800, 25805, 25810, 25815, 25820, 25825, 25830, - 25835, 25840, 25845, 25850, 25855, 25860, 25865, 25870, 25875, 25880, - 25885, 25890, 25895, 25900, 25905, 25910, 25915, 25920, 25925, 25930, - 25935, 25941, 25946, 25951, 25956, 25961, 25966, 25971, 25976, 25981, - 25986, 25991, 25996, 26001, 26006, 26011, 26016, 26021, 26026, 26031, - 26036, 26041, 26046, 26051, 26056, 26061, 26066, 26071, 26076, 26081, - 26086, 26091, 26096, 26101, 26106, 26111, 26116, 26121, 26126, 26131, - 26137, 26141, 26145, 26149, 26153, 26157, 26161, 26165, 26169, 26175, - 26181, 26187, 26193, 26199, 26205, 26211, 26218, 26224, 26229, 26234, - 26239, 26244, 26249, 26254, 26259, 26264, 26269, 26274, 26279, 26284, - 26289, 26294, 26299, 26304, 26309, 26314, 26319, 26324, 26329, 26334, - 26339, 26344, 26349, 26354, 26359, 26364, 0, 0, 0, 26371, 26381, 26385, - 26392, 26396, 26400, 26404, 26412, 26416, 26421, 26426, 26431, 26435, - 26440, 26445, 26448, 26452, 26456, 26465, 26469, 26473, 26479, 26483, - 26487, 26495, 26499, 26507, 26513, 26519, 26525, 26531, 26541, 26547, - 26551, 26560, 26563, 26569, 26573, 26579, 26584, 26590, 26598, 26604, - 26609, 26616, 26621, 26625, 26629, 26639, 26645, 26649, 26659, 26665, - 26669, 26673, 26680, 26688, 26694, 26700, 26709, 26713, 26717, 26721, - 26729, 26736, 26740, 26744, 26748, 26752, 26756, 26760, 26764, 26768, - 26772, 26776, 26780, 26785, 26790, 26795, 26799, 26803, 26807, 26811, - 26815, 26819, 26827, 26835, 26843, 26851, 0, 0, 0, 0, 0, 0, 0, 26859, - 26863, 26867, 26871, 26875, 26880, 26885, 26890, 26895, 26900, 26904, - 26909, 26913, 0, 26917, 26922, 26927, 26932, 26936, 26941, 26946, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 26951, 26955, 26959, 26963, 26967, 26972, - 26977, 26982, 26987, 26992, 26996, 27001, 27005, 27009, 27014, 27019, - 27024, 27029, 27033, 27038, 27043, 27048, 27054, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27059, 27063, 27067, 27071, 27075, 27080, 27085, 27090, 27095, 27100, - 27104, 27109, 27113, 27117, 27122, 27127, 27132, 27137, 27141, 27146, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27151, 27155, 27159, 27163, 27167, - 27172, 27177, 27182, 27187, 27192, 27196, 27201, 27205, 0, 27209, 27214, - 27219, 0, 27224, 27229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27234, 27237, - 27241, 27245, 27249, 27253, 27257, 27261, 27265, 27269, 27273, 27277, - 27281, 27285, 27289, 27293, 27297, 27301, 27304, 27308, 27312, 27316, - 27320, 27324, 27328, 27332, 27336, 27340, 27344, 27348, 27352, 27356, - 27360, 27363, 27367, 27371, 27377, 27383, 27389, 27395, 27401, 27407, - 27413, 27419, 27425, 27431, 27437, 27443, 27449, 27455, 27464, 27473, - 27479, 27485, 27491, 27496, 27500, 27505, 27510, 27515, 27519, 27524, - 27529, 27534, 27538, 27543, 27547, 27552, 27557, 27562, 27567, 27571, - 27575, 27579, 27583, 27587, 27591, 27595, 27599, 27603, 27607, 27613, - 27617, 27621, 27625, 27629, 27633, 27641, 27647, 27651, 27657, 27661, - 27667, 27671, 0, 0, 27675, 27679, 27682, 27685, 27688, 27691, 27694, - 27697, 27701, 27704, 0, 0, 0, 0, 0, 0, 27708, 27716, 27724, 27732, 27740, - 27748, 27756, 27764, 27772, 27780, 0, 0, 0, 0, 0, 0, 27788, 27791, 27794, - 27797, 27802, 27805, 27810, 27817, 27825, 27830, 27837, 27840, 27847, - 27854, 27861, 0, 27865, 27869, 27872, 27875, 27878, 27881, 27884, 27887, - 27891, 27894, 0, 0, 0, 0, 0, 0, 27898, 27901, 27904, 27907, 27910, 27913, - 27917, 27921, 27925, 27929, 27933, 27937, 27940, 27944, 27948, 27951, - 27955, 27959, 27963, 27967, 27971, 27975, 27979, 27982, 27986, 27990, - 27994, 27997, 28001, 28005, 28009, 28013, 28017, 28021, 28025, 28029, - 28036, 28041, 28046, 28051, 28056, 28062, 28068, 28074, 28080, 28085, - 28091, 28097, 28102, 28108, 28114, 28120, 28126, 28132, 28137, 28143, - 28148, 28154, 28160, 28166, 28172, 28178, 28183, 28188, 28194, 28200, - 28205, 28211, 28216, 28222, 28227, 28232, 28238, 28244, 28250, 28256, - 28262, 28268, 28274, 28280, 28286, 28292, 28298, 28304, 28309, 28314, - 28320, 28326, 0, 0, 0, 0, 0, 0, 0, 0, 28332, 28341, 28350, 28358, 28366, - 28376, 28384, 28393, 28400, 28407, 28414, 28422, 28430, 28438, 28446, - 28454, 28462, 28470, 28478, 28485, 28493, 28501, 28509, 28517, 28525, - 28535, 28545, 28555, 28565, 28575, 28585, 28595, 28605, 28615, 28625, - 28635, 28645, 28655, 28665, 28673, 28681, 28691, 28699, 0, 0, 0, 0, 0, - 28709, 28713, 28717, 28721, 28725, 28729, 28733, 28737, 28741, 28745, - 28749, 28753, 28757, 28761, 28765, 28769, 28773, 28777, 28781, 28785, - 28789, 28793, 28797, 28801, 28807, 28811, 28817, 28821, 28827, 28831, - 28837, 28841, 28845, 28849, 28853, 28857, 28861, 28867, 28873, 28879, - 28885, 28891, 28897, 28902, 28908, 28914, 28920, 28926, 28933, 28939, - 28944, 28949, 28953, 28957, 28961, 28965, 28969, 28973, 28977, 28983, - 28989, 28995, 29000, 29007, 29012, 29017, 29023, 29028, 29035, 29042, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 29048, 29054, 29058, 29063, 29068, 29073, - 29078, 29083, 29088, 29093, 29098, 29103, 29108, 29113, 29118, 29123, - 29128, 29132, 29137, 29142, 29147, 29151, 29155, 29160, 29165, 29170, - 29175, 29180, 29185, 29189, 29194, 0, 29199, 29204, 29209, 29214, 29220, - 29226, 29232, 29238, 29243, 29248, 29254, 29261, 0, 0, 0, 0, 29268, - 29273, 29279, 29285, 29291, 29297, 29302, 29307, 29313, 29319, 29324, - 29329, 0, 0, 0, 0, 29334, 0, 0, 0, 29339, 29344, 29349, 29354, 29358, - 29362, 29366, 29370, 29374, 29378, 29383, 29387, 29392, 29397, 29403, - 29409, 29415, 29421, 29426, 29432, 29438, 29444, 29449, 29455, 29460, - 29466, 29472, 29477, 29483, 29489, 29495, 29501, 29506, 29511, 29517, - 29523, 29528, 29534, 29539, 29545, 29550, 29556, 0, 0, 29562, 29568, - 29574, 29580, 29586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29592, 29601, - 29610, 29618, 29627, 29636, 29644, 29653, 29662, 29671, 29680, 29688, - 29697, 29706, 29714, 29723, 29732, 29741, 29750, 29759, 29768, 29776, - 29785, 29793, 29801, 29810, 29818, 29827, 29836, 29845, 29854, 29863, - 29872, 29880, 29889, 29898, 29906, 29915, 29924, 29933, 29942, 29951, - 29960, 29969, 0, 0, 0, 0, 29978, 29988, 29997, 30006, 30014, 30023, - 30031, 30040, 30048, 30057, 30066, 30075, 30084, 30093, 30102, 30111, - 30120, 30129, 30138, 30147, 30156, 30165, 30174, 30183, 30192, 30200, 0, - 0, 0, 0, 0, 0, 30208, 30216, 30223, 30230, 30237, 30244, 30251, 30258, - 30266, 30273, 30281, 0, 0, 0, 30289, 30297, 30305, 30309, 30315, 30321, - 30327, 30333, 30339, 30345, 30351, 30357, 30363, 30369, 30375, 30381, - 30387, 30393, 30399, 30403, 30409, 30415, 30421, 30427, 30433, 30439, - 30445, 30451, 30457, 30463, 30469, 30475, 30481, 30487, 30493, 30497, - 30502, 30507, 30512, 30516, 30521, 30525, 30530, 30535, 30540, 30545, - 30550, 30555, 30560, 30565, 30570, 30574, 30579, 30584, 30589, 30594, - 30598, 30602, 30607, 30612, 30617, 30622, 0, 0, 30628, 30632, 30639, - 30644, 30650, 30656, 30661, 30667, 30673, 30678, 30684, 30690, 30696, - 30702, 30708, 30713, 30718, 30724, 30729, 30735, 30740, 30746, 30752, - 30758, 30764, 30769, 30774, 30779, 30785, 30791, 30796, 30802, 30808, - 30812, 30817, 30822, 30827, 30832, 30837, 30842, 30847, 30853, 30859, - 30865, 30870, 30875, 30879, 30884, 30888, 30893, 30897, 30902, 30907, - 30912, 30917, 30924, 30931, 30938, 30948, 30957, 30964, 30970, 30981, - 30986, 30992, 0, 30998, 31003, 31008, 31016, 31022, 31030, 31035, 31041, - 31047, 31053, 31058, 31064, 31069, 31076, 31082, 31087, 31093, 31099, - 31105, 31112, 31119, 31126, 31131, 31136, 31143, 31150, 31157, 31164, - 31171, 0, 0, 31178, 31185, 31192, 31198, 31204, 31210, 31216, 31222, - 31228, 31235, 31241, 0, 0, 0, 0, 0, 0, 31248, 31254, 31259, 31264, 31269, - 31274, 31279, 31284, 31290, 31295, 0, 0, 0, 0, 0, 0, 31301, 31306, 31311, - 31316, 31321, 31326, 31331, 31340, 31347, 31352, 31357, 31362, 31367, - 31372, 0, 0, 31377, 31384, 31387, 31390, 31393, 31398, 31402, 31408, - 31412, 31417, 31424, 31432, 31436, 31441, 31445, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18049, 18053, 18064, 18079, 18094, 18104, 18115, + 18128, 18139, 18145, 18153, 18163, 18169, 18177, 18181, 18187, 18193, + 18201, 18211, 18219, 18232, 18238, 18246, 18254, 18266, 18273, 18281, + 18289, 18297, 18305, 18313, 18321, 18331, 18335, 18338, 18341, 18344, + 18347, 18350, 18353, 18357, 18360, 18364, 18368, 18372, 18376, 18380, + 18384, 18388, 18393, 18397, 18402, 18407, 18413, 18423, 18437, 18447, + 18453, 18459, 18467, 18475, 18483, 18491, 18497, 18503, 18506, 18510, + 18514, 18518, 18522, 18526, 18530, 0, 18534, 18538, 18542, 18546, 18550, + 18554, 18558, 18562, 18566, 18570, 18574, 18577, 18580, 18584, 18588, + 18592, 18595, 18599, 18603, 18607, 18611, 18615, 18619, 18623, 18627, + 18630, 18634, 18637, 18641, 18645, 18649, 18652, 18655, 18659, 18665, + 18669, 0, 0, 0, 0, 18673, 18678, 18682, 18687, 18691, 18696, 18701, + 18707, 18712, 18718, 18722, 18727, 18731, 18736, 18746, 18752, 18758, + 18765, 18775, 18781, 18785, 18789, 18795, 18801, 18809, 18815, 18823, + 18831, 18839, 18849, 18857, 18867, 18872, 18878, 18884, 18890, 18896, + 18902, 18908, 0, 18914, 18920, 18926, 18932, 18938, 18944, 18950, 18956, + 18962, 18968, 18974, 18979, 18984, 18990, 18996, 19002, 19007, 19013, + 19019, 19025, 19031, 19037, 19043, 19049, 19055, 19060, 19066, 19071, + 19077, 19083, 19089, 19094, 19099, 19105, 19113, 19120, 0, 19128, 19135, + 19148, 19155, 19162, 19170, 19178, 19184, 19190, 19196, 19206, 19211, + 19217, 19227, 19237, 0, 19247, 19257, 19265, 19277, 19289, 19295, 19309, + 19324, 19329, 19334, 19342, 19350, 19358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19366, 19369, 19373, 19377, 19381, 19385, 19389, 19393, 19397, + 19401, 19405, 19409, 19413, 19417, 19421, 19425, 19429, 19433, 19437, + 19441, 19445, 19448, 19451, 19455, 19459, 19463, 19466, 19469, 19473, + 19476, 19480, 19484, 19487, 19491, 19494, 19499, 19502, 19506, 19509, + 19513, 19516, 19521, 19524, 19528, 19535, 19540, 19544, 19549, 19553, + 19558, 19562, 19567, 19574, 19580, 19585, 19589, 19593, 19597, 19601, + 19605, 19610, 19616, 19622, 19627, 19633, 19637, 19640, 19643, 19646, + 19649, 19652, 19655, 19659, 19662, 19666, 19672, 19676, 19680, 19684, + 19688, 19692, 19696, 19700, 19704, 19709, 19713, 19718, 19723, 19729, + 19734, 19740, 19746, 19752, 19758, 19764, 19771, 19778, 19785, 19793, + 19802, 19811, 19822, 19832, 19842, 19853, 19864, 19874, 19884, 19894, + 19904, 19914, 19924, 19934, 19944, 19952, 19959, 19965, 19972, 19977, + 19983, 19989, 19995, 20001, 20007, 20013, 20018, 20024, 20030, 20036, + 20042, 20047, 20055, 20062, 20068, 20075, 20083, 20089, 20095, 20101, + 20107, 20115, 20123, 20133, 20141, 20149, 20155, 20160, 20165, 20170, + 20175, 20180, 20185, 20191, 20196, 20202, 20208, 20214, 20220, 20227, + 20232, 20238, 20243, 20248, 20253, 20258, 20263, 20268, 20273, 20278, + 20283, 20288, 20293, 20298, 20303, 20308, 20313, 20318, 20323, 20328, + 20333, 20338, 20343, 20348, 20353, 20358, 20363, 20368, 20373, 20378, + 20383, 20388, 20393, 20398, 20403, 20408, 20413, 20418, 20423, 0, 20428, + 0, 0, 0, 0, 0, 20433, 0, 0, 20438, 20442, 20446, 20450, 20454, 20458, + 20462, 20466, 20470, 20474, 20478, 20482, 20486, 20490, 20494, 20498, + 20502, 20506, 20510, 20514, 20518, 20522, 20526, 20530, 20534, 20538, + 20542, 20546, 20550, 20554, 20558, 20562, 20566, 20570, 20574, 20578, + 20582, 20586, 20590, 20594, 20598, 20602, 20608, 20612, 20617, 20622, + 20626, 20631, 20636, 20640, 20644, 20648, 20652, 20656, 20660, 20664, + 20668, 20672, 20676, 20680, 20684, 20688, 20692, 20696, 20700, 20704, + 20708, 20712, 20716, 20720, 20724, 20728, 20732, 20736, 20740, 20744, + 20748, 20752, 20756, 20760, 20764, 20768, 20772, 20776, 20780, 20784, + 20788, 20792, 20796, 20800, 20804, 20808, 20812, 20816, 20820, 20824, + 20828, 20832, 20836, 20840, 20844, 20848, 20852, 20856, 20860, 20864, + 20868, 20872, 20876, 20880, 20884, 20888, 20892, 20896, 20900, 20904, + 20908, 20912, 20916, 20920, 20924, 20928, 20932, 20936, 20940, 20944, + 20948, 20952, 20956, 20960, 20964, 20968, 20972, 20976, 20980, 20984, + 20988, 20992, 20996, 21000, 21004, 21008, 21012, 21016, 21020, 21024, + 21027, 21031, 21034, 21038, 21042, 21045, 21049, 21053, 21056, 21060, + 21064, 21068, 21072, 21075, 21079, 21083, 21087, 21091, 21095, 21099, + 21102, 21106, 21110, 21114, 21118, 21122, 21126, 21130, 21134, 21138, + 21142, 21146, 21150, 21154, 21158, 21162, 21166, 21170, 21174, 21178, + 21182, 21186, 21190, 21194, 21198, 21202, 21206, 21210, 21214, 21218, + 21222, 21226, 21230, 21234, 21238, 21242, 21246, 21250, 21254, 21258, + 21262, 21266, 21270, 21274, 21278, 21282, 21286, 21290, 21294, 21298, + 21302, 21306, 21310, 21314, 21318, 21322, 21326, 21330, 21334, 21338, + 21342, 21346, 21350, 21354, 21358, 21362, 21366, 21370, 21374, 21378, + 21382, 21386, 21390, 21394, 21398, 21402, 21406, 21410, 21414, 21418, + 21422, 21426, 21430, 21434, 21438, 21442, 21446, 21450, 21454, 21458, + 21462, 21466, 21470, 21474, 21478, 21482, 21486, 21490, 21494, 21498, + 21502, 21506, 21510, 21514, 21518, 21522, 21526, 21530, 21534, 21538, + 21542, 21546, 21550, 21554, 21558, 21562, 21566, 21570, 21574, 21578, + 21582, 21586, 21590, 21594, 21598, 21602, 21606, 21610, 21614, 21618, + 21622, 21626, 21630, 21634, 21638, 21642, 21646, 21650, 21654, 21657, + 21661, 21665, 21669, 21673, 21677, 21681, 21685, 21688, 21692, 21696, + 21700, 21704, 21708, 21712, 21716, 21720, 21724, 21728, 21732, 21736, + 21740, 21744, 21748, 21751, 21755, 21759, 21763, 21767, 21771, 21775, + 21779, 21783, 21787, 21791, 21795, 21799, 21803, 21807, 21811, 21815, + 21819, 21823, 21827, 21831, 21835, 21839, 21843, 21847, 21851, 21855, + 21859, 21863, 21867, 21871, 21875, 21879, 21883, 21887, 21891, 21895, + 21899, 21903, 21907, 21911, 21915, 21919, 21923, 21927, 21931, 21935, + 21939, 0, 21943, 21947, 21951, 21955, 0, 0, 21959, 21963, 21967, 21971, + 21975, 21979, 21983, 0, 21987, 0, 21991, 21995, 21999, 22003, 0, 0, + 22007, 22011, 22015, 22019, 22023, 22027, 22031, 22035, 22039, 22043, + 22047, 22051, 22055, 22059, 22063, 22067, 22071, 22075, 22079, 22083, + 22087, 22091, 22095, 22098, 22102, 22106, 22110, 22114, 22118, 22122, + 22126, 22130, 22134, 22138, 22142, 22146, 22150, 22154, 22158, 22162, + 22166, 0, 22170, 22174, 22178, 22182, 0, 0, 22186, 22189, 22193, 22197, + 22201, 22205, 22209, 22213, 22217, 22221, 22225, 22229, 22233, 22237, + 22241, 22245, 22249, 22254, 22259, 22264, 22270, 22276, 22281, 22286, + 22292, 22295, 22299, 22303, 22307, 22311, 22315, 22319, 22323, 0, 22327, + 22331, 22335, 22339, 0, 0, 22343, 22347, 22351, 22355, 22359, 22363, + 22367, 0, 22371, 0, 22375, 22379, 22383, 22387, 0, 0, 22391, 22395, + 22399, 22403, 22407, 22411, 22415, 22419, 22423, 22428, 22433, 22438, + 22444, 22450, 22455, 0, 22460, 22464, 22468, 22472, 22476, 22480, 22484, + 22488, 22492, 22496, 22500, 22504, 22508, 22512, 22516, 22520, 22524, + 22527, 22531, 22535, 22539, 22543, 22547, 22551, 22555, 22559, 22563, + 22567, 22571, 22575, 22579, 22583, 22587, 22591, 22595, 22599, 22603, + 22607, 22611, 22615, 22619, 22623, 22627, 22631, 22635, 22639, 22643, + 22647, 22651, 22655, 22659, 22663, 22667, 22671, 22675, 22679, 22683, 0, + 22687, 22691, 22695, 22699, 0, 0, 22703, 22707, 22711, 22715, 22719, + 22723, 22727, 22731, 22735, 22739, 22743, 22747, 22751, 22755, 22759, + 22763, 22767, 22771, 22775, 22779, 22783, 22787, 22791, 22795, 22799, + 22803, 22807, 22811, 22815, 22819, 22823, 22827, 22831, 22835, 22839, + 22843, 22847, 22851, 22855, 22859, 22863, 22867, 22871, 22875, 22879, + 22883, 22887, 22891, 22895, 22899, 22903, 22907, 22911, 22915, 22919, + 22923, 22927, 22930, 22934, 22938, 22942, 22946, 22950, 22954, 22958, + 22962, 22966, 0, 0, 22970, 22979, 22985, 22990, 22994, 22997, 23002, + 23005, 23008, 23011, 23016, 23020, 23025, 23028, 23031, 23034, 23037, + 23040, 23043, 23047, 23050, 23054, 23058, 23062, 23066, 23070, 23074, + 23078, 23082, 23086, 23090, 23094, 0, 0, 0, 23100, 23106, 23110, 23114, + 23118, 23124, 23128, 23132, 23136, 23142, 23146, 23150, 23154, 23160, + 23164, 23168, 23172, 23178, 23184, 23190, 23198, 23204, 23210, 23216, + 23222, 23228, 0, 0, 0, 0, 0, 0, 23234, 23237, 23240, 23243, 23246, 23249, + 23253, 23257, 23260, 23264, 23268, 23272, 23276, 23280, 23283, 23287, + 23291, 23295, 23299, 23303, 23306, 23310, 23314, 23318, 23322, 23326, + 23329, 23333, 23337, 23341, 23345, 23348, 23352, 23356, 23360, 23364, + 23368, 23372, 23376, 23380, 23384, 23388, 23392, 23396, 23400, 23404, + 23408, 23412, 23416, 23420, 23424, 23428, 23432, 23436, 23440, 23444, + 23448, 23452, 23456, 23460, 23464, 23468, 23472, 23476, 23480, 23484, + 23488, 23492, 23496, 23500, 23504, 23508, 23512, 23516, 23520, 23524, + 23528, 23532, 23536, 23540, 23543, 23547, 23551, 23555, 23559, 23563, 0, + 0, 23567, 23572, 23577, 23582, 23587, 23592, 0, 0, 23597, 23601, 23604, + 23608, 23611, 23615, 23618, 23622, 23628, 23633, 23637, 23640, 23644, + 23648, 23654, 23658, 23664, 23668, 23674, 23678, 23684, 23688, 23694, + 23700, 23704, 23710, 23714, 23720, 23726, 23730, 23736, 23742, 23746, + 23751, 23759, 23767, 23774, 23779, 23784, 23793, 23799, 23807, 23812, + 23818, 23822, 23826, 23830, 23834, 23838, 23842, 23846, 23850, 23854, + 23858, 23864, 23869, 23874, 23877, 23881, 23885, 23891, 23895, 23901, + 23905, 23911, 23915, 23921, 23925, 23931, 23935, 23941, 23945, 23951, + 23957, 23961, 23967, 23972, 23976, 23980, 23984, 23988, 23991, 23995, + 24001, 24006, 24011, 24015, 24019, 24023, 24029, 24033, 24039, 24043, + 24049, 24052, 24057, 24061, 24067, 24071, 24077, 24081, 24087, 24093, + 24097, 24101, 24105, 24109, 24113, 24117, 24121, 24125, 24129, 24133, + 24137, 24143, 24146, 24150, 24154, 24160, 24164, 24170, 24174, 24180, + 24184, 24190, 24194, 24200, 24204, 24210, 24214, 24220, 24226, 24230, + 24234, 24240, 24246, 24252, 24258, 24262, 24266, 24270, 24274, 24278, + 24282, 24288, 24292, 24296, 24300, 24306, 24310, 24316, 24320, 24326, + 24330, 24336, 24340, 24346, 24350, 24356, 24360, 24366, 24372, 24376, + 24382, 24386, 24390, 24394, 24398, 24402, 24406, 24412, 24415, 24419, + 24423, 24429, 24433, 24439, 24443, 24449, 24453, 24459, 24463, 24469, + 24473, 24479, 24483, 24489, 24495, 24499, 24505, 24509, 24515, 24521, + 24525, 24529, 24533, 24537, 24541, 24545, 24551, 24554, 24558, 24562, + 24568, 24572, 24578, 24582, 24588, 24594, 24598, 24603, 24607, 24611, + 24615, 24619, 24623, 24627, 24631, 24637, 24640, 24644, 24648, 24654, + 24658, 24664, 24668, 24674, 24678, 24684, 24688, 24694, 24698, 24704, + 24708, 24714, 24717, 24722, 24726, 24730, 24734, 24738, 24742, 24746, + 24750, 24756, 24760, 24764, 24768, 24774, 24778, 24784, 24788, 24794, + 24798, 24804, 24808, 24814, 24818, 24824, 24828, 24834, 24840, 24844, + 24850, 24854, 24860, 24866, 24872, 24878, 24884, 24890, 24896, 24902, + 24906, 24910, 24914, 24918, 24922, 24926, 24930, 24934, 24940, 24944, + 24950, 24954, 24960, 24964, 24970, 24974, 24980, 24984, 24990, 24994, + 25000, 25004, 25008, 25012, 25016, 25020, 25024, 25028, 25034, 25037, + 25041, 25045, 25051, 25055, 25061, 25065, 25071, 25075, 25081, 25085, + 25091, 25095, 25101, 25105, 25111, 25117, 25121, 25127, 25133, 25139, + 25143, 25149, 25155, 25159, 25163, 25167, 25171, 25175, 25181, 25185, + 25189, 25194, 25198, 25204, 25207, 25212, 25216, 25220, 25224, 25228, + 25232, 25236, 25240, 25244, 25248, 25252, 25258, 25262, 25266, 25272, + 25276, 25282, 25286, 25292, 25296, 25300, 25304, 25308, 25312, 25318, + 25322, 25326, 25330, 25334, 25338, 25342, 25346, 25350, 25354, 25358, + 25364, 25370, 25376, 25382, 25388, 25393, 25399, 25405, 25411, 25415, + 25419, 25423, 25427, 25431, 25435, 25439, 25443, 25447, 25451, 25455, + 25459, 25463, 25469, 25475, 25481, 25487, 25491, 25495, 25499, 25503, + 25507, 25511, 25515, 25519, 25523, 25529, 25535, 25541, 25547, 25553, + 25559, 25565, 25571, 25577, 25581, 25585, 25589, 25593, 25597, 25601, + 25605, 25611, 25617, 25623, 25629, 25635, 25641, 25647, 25653, 25659, + 25664, 25669, 25674, 25679, 25685, 25691, 25697, 25703, 25709, 25715, + 25721, 25726, 25732, 25738, 25744, 25749, 25755, 25761, 25767, 25772, + 25777, 25782, 25787, 25792, 25797, 25802, 25807, 25812, 25817, 25822, + 25827, 25832, 25837, 25842, 25847, 25852, 25857, 25862, 25867, 25872, + 25877, 25882, 25887, 25892, 25897, 25902, 25907, 25912, 25917, 25922, + 25927, 25932, 25937, 25942, 25947, 25952, 25957, 25962, 25967, 25972, + 25977, 25981, 25986, 25991, 25996, 26001, 26006, 26011, 26016, 26021, + 26026, 26031, 26036, 26041, 26046, 26051, 26056, 26061, 26066, 26071, + 26076, 26081, 26086, 26091, 26096, 26101, 26106, 26110, 26115, 26120, + 26125, 26130, 26135, 26139, 26144, 26149, 26154, 26159, 26164, 26168, + 26173, 26179, 26184, 26189, 26194, 26199, 26205, 26210, 26215, 26220, + 26225, 26230, 26235, 26240, 26245, 26250, 26255, 26260, 26265, 26269, + 26274, 26279, 26284, 26289, 26294, 26299, 26304, 26309, 26314, 26319, + 26324, 26329, 26334, 26339, 26344, 26349, 26354, 26359, 26364, 26369, + 26374, 26379, 26384, 26389, 26394, 26399, 26404, 26409, 26414, 26419, + 26424, 26430, 26435, 26440, 26445, 26450, 26455, 26460, 26465, 26470, + 26475, 26480, 26485, 26490, 26495, 26500, 26505, 26510, 26515, 26520, + 26525, 26530, 26535, 26540, 26545, 26550, 26555, 26560, 26565, 26570, + 26575, 26580, 26585, 26590, 26595, 26600, 26605, 26610, 26615, 26620, + 26626, 26630, 26634, 26638, 26642, 26646, 26650, 26654, 26658, 26664, + 26670, 26676, 26682, 26688, 26694, 26700, 26707, 26713, 26718, 26723, + 26728, 26733, 26738, 26743, 26748, 26753, 26758, 26763, 26768, 26773, + 26778, 26783, 26788, 26793, 26798, 26803, 26808, 26813, 26818, 26823, + 26828, 26833, 26838, 26843, 26848, 26853, 0, 0, 0, 26860, 26871, 26876, + 26884, 26889, 26894, 26899, 26908, 26913, 26919, 26925, 26931, 26936, + 26942, 26948, 26952, 26957, 26962, 26972, 26977, 26982, 26989, 26994, + 26999, 27008, 27013, 27022, 27029, 27036, 27043, 27050, 27061, 27068, + 27073, 27083, 27087, 27094, 27099, 27106, 27112, 27119, 27128, 27135, + 27142, 27151, 27158, 27163, 27168, 27179, 27186, 27191, 27202, 27209, + 27214, 27219, 27227, 27236, 27243, 27250, 27260, 27265, 27270, 27275, + 27284, 27292, 27297, 27302, 27307, 27312, 27317, 27322, 27327, 27332, + 27337, 27342, 27347, 27353, 27359, 27365, 27370, 27375, 27380, 27385, + 27390, 27395, 27404, 27413, 27422, 27431, 0, 0, 0, 0, 0, 0, 0, 27440, + 27444, 27448, 27452, 27456, 27461, 27466, 27471, 27476, 27480, 27484, + 27489, 27493, 0, 27497, 27501, 27506, 27511, 27515, 27520, 27525, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 27530, 27534, 27538, 27542, 27546, 27551, + 27556, 27561, 27566, 27570, 27574, 27579, 27583, 27587, 27592, 27596, + 27601, 27606, 27610, 27615, 27620, 27625, 27631, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 27636, 27640, 27644, 27648, 27652, 27657, 27662, 27667, 27672, 27676, + 27680, 27685, 27689, 27693, 27698, 27702, 27707, 27712, 27716, 27721, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27726, 27730, 27734, 27738, 27742, + 27747, 27752, 27757, 27762, 27766, 27770, 27775, 27779, 0, 27783, 27787, + 27792, 0, 27797, 27802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27807, 27810, + 27814, 27818, 27822, 27826, 27830, 27834, 27838, 27842, 27846, 27850, + 27854, 27858, 27862, 27866, 27870, 27874, 27877, 27881, 27885, 27889, + 27893, 27897, 27901, 27905, 27909, 27913, 27917, 27921, 27925, 27929, + 27933, 27936, 27939, 27943, 27949, 27955, 27961, 27967, 27973, 27979, + 27985, 27991, 27997, 28003, 28009, 28015, 28021, 28027, 28036, 28045, + 28051, 28057, 28063, 28068, 28072, 28077, 28082, 28087, 28091, 28096, + 28101, 28106, 28110, 28115, 28119, 28124, 28129, 28134, 28139, 28143, + 28147, 28151, 28155, 28159, 28163, 28167, 28171, 28175, 28179, 28185, + 28189, 28193, 28197, 28201, 28205, 28213, 28219, 28223, 28229, 28233, + 28239, 28243, 0, 0, 28247, 28251, 28254, 28257, 28260, 28263, 28266, + 28269, 28273, 28276, 0, 0, 0, 0, 0, 0, 28280, 28288, 28296, 28304, 28312, + 28320, 28328, 28336, 28344, 28352, 0, 0, 0, 0, 0, 0, 28360, 28363, 28366, + 28369, 28374, 28377, 28382, 28389, 28397, 28402, 28409, 28412, 28419, + 28426, 28433, 0, 28437, 28441, 28444, 28447, 28450, 28453, 28456, 28459, + 28463, 28466, 0, 0, 0, 0, 0, 0, 28470, 28473, 28476, 28479, 28482, 28485, + 28489, 28493, 28497, 28500, 28504, 28508, 28511, 28515, 28519, 28522, + 28525, 28529, 28533, 28537, 28541, 28545, 28549, 28552, 28556, 28560, + 28564, 28567, 28571, 28575, 28579, 28583, 28587, 28591, 28595, 28599, + 28606, 28611, 28616, 28621, 28626, 28632, 28638, 28644, 28650, 28655, + 28661, 28667, 28672, 28678, 28684, 28690, 28696, 28702, 28707, 28713, + 28718, 28724, 28730, 28736, 28742, 28748, 28753, 28758, 28764, 28770, + 28775, 28781, 28786, 28792, 28797, 28802, 28808, 28814, 28820, 28826, + 28832, 28838, 28844, 28850, 28856, 28862, 28868, 28874, 28879, 28884, + 28890, 28896, 0, 0, 0, 0, 0, 0, 0, 0, 28902, 28911, 28920, 28928, 28936, + 28946, 28954, 28963, 28970, 28977, 28984, 28992, 29000, 29008, 29016, + 29024, 29032, 29040, 29048, 29055, 29063, 29071, 29079, 29087, 29095, + 29105, 29115, 29125, 29135, 29145, 29155, 29165, 29175, 29185, 29195, + 29205, 29215, 29225, 29235, 29243, 29251, 29261, 29269, 0, 0, 0, 0, 0, + 29279, 29283, 29287, 29291, 29295, 29299, 29303, 29307, 29311, 29315, + 29319, 29323, 29327, 29331, 29335, 29339, 29343, 29347, 29351, 29355, + 29359, 29363, 29367, 29371, 29377, 29381, 29387, 29391, 29397, 29401, + 29407, 29411, 29415, 29419, 29423, 29427, 29431, 29437, 29443, 29449, + 29455, 29461, 29467, 29473, 29479, 29485, 29491, 29497, 29504, 29510, + 29516, 29522, 29526, 29530, 29534, 29538, 29542, 29546, 29550, 29556, + 29562, 29568, 29573, 29580, 29585, 29590, 29596, 29601, 29608, 29615, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 29622, 29628, 29632, 29637, 29642, 29647, + 29652, 29657, 29662, 29667, 29672, 29677, 29682, 29687, 29692, 29697, + 29701, 29705, 29710, 29715, 29720, 29724, 29728, 29733, 29737, 29742, + 29747, 29752, 29757, 29761, 29766, 0, 29771, 29776, 29781, 29786, 29792, + 29798, 29804, 29810, 29815, 29820, 29826, 29833, 0, 0, 0, 0, 29840, + 29845, 29851, 29857, 29863, 29868, 29873, 29878, 29884, 29889, 29894, + 29899, 0, 0, 0, 0, 29904, 0, 0, 0, 29909, 29914, 29919, 29924, 29928, + 29932, 29936, 29940, 29944, 29948, 29953, 29957, 29962, 29967, 29973, + 29979, 29985, 29991, 29996, 30002, 30008, 30013, 30018, 30024, 30029, + 30035, 30041, 30046, 30052, 30058, 30064, 30069, 30074, 30079, 30085, + 30091, 30096, 30102, 30107, 30113, 30118, 30124, 0, 0, 30130, 30136, + 30142, 30148, 30154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30160, 30169, + 30178, 30186, 30195, 30204, 30212, 30221, 30230, 30239, 30248, 30256, + 30265, 30274, 30282, 30291, 30300, 30308, 30317, 30326, 30334, 30342, + 30351, 30359, 30367, 30376, 30384, 30393, 30402, 30410, 30419, 30428, + 30436, 30444, 30453, 30462, 30470, 30479, 30488, 30497, 30506, 30515, + 30524, 30533, 0, 0, 0, 0, 30542, 30552, 30561, 30570, 30578, 30587, + 30595, 30604, 30612, 30621, 30630, 30639, 30648, 30657, 30666, 30675, + 30684, 30693, 30702, 30711, 30720, 30729, 30738, 30747, 30756, 30764, 0, + 0, 0, 0, 0, 0, 30772, 30780, 30787, 30794, 30801, 30808, 30815, 30822, + 30830, 30837, 30845, 0, 0, 0, 30853, 30861, 30869, 30873, 30879, 30885, + 30891, 30897, 30903, 30909, 30915, 30921, 30927, 30933, 30939, 30945, + 30951, 30957, 30963, 30967, 30973, 30979, 30985, 30991, 30997, 31003, + 31009, 31015, 31021, 31027, 31033, 31039, 31045, 31051, 31057, 31061, + 31066, 31071, 31076, 31080, 31085, 31089, 31094, 31099, 31104, 31108, + 31113, 31118, 31123, 31128, 31133, 31137, 31142, 31146, 31151, 31156, + 31160, 31164, 31169, 31174, 31179, 31184, 0, 0, 31190, 31194, 31201, + 31206, 31212, 31218, 31223, 31229, 31235, 31240, 31246, 31252, 31258, + 31264, 31270, 31275, 31280, 31286, 31291, 31297, 31302, 31308, 31314, + 31320, 31326, 31330, 31335, 31340, 31346, 31352, 31357, 31363, 31369, + 31373, 31378, 31383, 31388, 31393, 31397, 31402, 31407, 31413, 31419, + 31425, 31430, 31435, 31439, 31444, 31448, 31453, 31457, 31462, 31467, + 31472, 31477, 31484, 31491, 31497, 31507, 31516, 31523, 31529, 31540, + 31545, 31551, 0, 31557, 31562, 31567, 31575, 31581, 31589, 31594, 31600, + 31606, 31612, 31617, 31623, 31628, 31635, 31641, 31646, 31652, 31658, + 31664, 31671, 31678, 31685, 31690, 31695, 31702, 31709, 31716, 31723, + 31730, 0, 0, 31737, 31744, 31751, 31757, 31763, 31769, 31775, 31781, + 31787, 31794, 31800, 0, 0, 0, 0, 0, 0, 31807, 31813, 31818, 31823, 31828, + 31833, 31838, 31843, 31849, 31854, 0, 0, 0, 0, 0, 0, 31860, 31865, 31870, + 31875, 31880, 31885, 31890, 31899, 31906, 31911, 31916, 31921, 31926, + 31931, 0, 0, 31936, 31943, 31946, 31949, 31952, 31957, 31961, 31967, + 31971, 31976, 31983, 31991, 31995, 32000, 32004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 31450, 31456, 31462, 31466, 31470, 31474, - 31478, 31484, 31488, 31494, 31498, 31504, 31510, 31518, 31524, 31532, - 31536, 31540, 31544, 31550, 31553, 31559, 31563, 31569, 31573, 31577, - 31583, 31587, 31593, 31597, 31603, 31611, 31619, 31627, 31633, 31637, - 31643, 31647, 31653, 31657, 31660, 31666, 31670, 31676, 31679, 31682, - 31686, 31690, 31694, 31700, 31706, 31710, 31713, 31717, 31722, 31727, - 31734, 31739, 31746, 31753, 31762, 31769, 31778, 31783, 31790, 31797, - 31806, 31811, 31818, 31823, 31829, 31835, 31841, 31847, 31853, 31859, 0, - 0, 0, 0, 31865, 31869, 31872, 31875, 31878, 31881, 31884, 31887, 31891, - 31894, 31898, 31901, 31904, 31907, 31912, 31917, 31922, 31925, 31930, - 31935, 31940, 31945, 31952, 31957, 31962, 31967, 31972, 31979, 31985, - 31991, 31997, 32003, 32009, 32018, 32027, 32033, 32039, 32047, 32055, - 32064, 32073, 32081, 32089, 32098, 32107, 0, 0, 0, 32115, 32120, 32125, - 32130, 32134, 32138, 32142, 32147, 32151, 32155, 32160, 32164, 32169, - 32174, 32179, 32184, 32189, 32194, 32199, 32204, 32209, 32214, 32218, - 32223, 32228, 32233, 32237, 32241, 32246, 32251, 32256, 32261, 32266, - 32270, 32276, 32282, 32288, 32294, 32300, 32306, 32312, 32318, 32324, - 32329, 32334, 32341, 32349, 32354, 32359, 32364, 32368, 32372, 32376, - 32380, 32384, 32388, 32393, 32397, 32402, 32406, 32411, 32416, 32421, - 32427, 32433, 32437, 32443, 32447, 32453, 32459, 32464, 32471, 32475, - 32481, 32486, 32493, 32498, 32505, 32512, 32517, 32524, 32529, 32534, - 32539, 32546, 32550, 32556, 32563, 32570, 32575, 32582, 32589, 32593, - 32599, 32604, 32609, 32616, 32621, 32626, 32631, 32636, 32640, 32644, - 32649, 32654, 32661, 32667, 32672, 32679, 32684, 32691, 32696, 32706, - 32712, 32718, 32722, 0, 0, 0, 0, 0, 0, 0, 0, 32726, 32735, 32742, 32749, - 32756, 32760, 32765, 32770, 32775, 32780, 32785, 32790, 32795, 32800, - 32805, 32810, 32815, 32820, 32825, 32829, 32834, 32839, 32844, 32849, - 32854, 32859, 32863, 32868, 32873, 32878, 32883, 32887, 32892, 32897, - 32901, 32906, 32911, 32916, 32921, 32926, 32930, 32936, 32943, 32949, - 32954, 32959, 32965, 32970, 32976, 32981, 32987, 32993, 32998, 33004, - 33010, 33015, 33021, 33027, 33033, 33038, 0, 0, 0, 33043, 33049, 33059, - 33065, 33073, 33079, 33084, 33088, 33092, 33096, 33100, 33104, 33108, - 33113, 33117, 0, 0, 0, 33122, 33127, 33132, 33137, 33144, 33150, 33156, - 33162, 33168, 33174, 33180, 33187, 33193, 33200, 33207, 33214, 33221, - 33228, 33235, 33242, 33249, 33256, 33263, 33270, 33277, 33284, 33291, - 33298, 33305, 33312, 33319, 33326, 33333, 33340, 33347, 33354, 33361, - 33368, 33375, 33382, 33389, 33396, 33403, 33410, 33418, 33426, 33434, - 33440, 33446, 33452, 33460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32009, 32015, 32021, 32025, 32029, 32033, + 32037, 32043, 32047, 32053, 32057, 32063, 32069, 32077, 32083, 32091, + 32095, 32099, 32103, 32109, 32112, 32118, 32122, 32128, 32132, 32136, + 32142, 32146, 32152, 32156, 32162, 32170, 32178, 32186, 32192, 32196, + 32202, 32206, 32212, 32215, 32218, 32224, 32228, 32234, 32237, 32240, + 32244, 32247, 32251, 32257, 32263, 32267, 32270, 32274, 32279, 32284, + 32291, 32296, 32303, 32310, 32319, 32326, 32335, 32340, 32347, 32354, + 32363, 32368, 32375, 32380, 32386, 32392, 32398, 32404, 32410, 32416, 0, + 0, 0, 0, 32422, 32426, 32429, 32432, 32435, 32438, 32441, 32444, 32448, + 32451, 32455, 32458, 32461, 32464, 32469, 32474, 32479, 32482, 32487, + 32492, 32497, 32502, 32509, 32514, 32519, 32524, 32529, 32536, 32542, + 32548, 32554, 32560, 32566, 32575, 32584, 32590, 32596, 32604, 32612, + 32621, 32630, 32638, 32646, 32655, 32664, 0, 0, 0, 32672, 32677, 32682, + 32687, 32691, 32695, 32699, 32704, 32708, 32712, 32717, 32721, 32726, + 32731, 32736, 32741, 32746, 32751, 32756, 32761, 32766, 32770, 32774, + 32779, 32784, 32789, 32793, 32797, 32802, 32806, 32811, 32816, 32821, + 32825, 32831, 32837, 32843, 32849, 32855, 32861, 32867, 32873, 32879, + 32884, 32889, 32896, 32904, 32909, 32914, 32919, 32923, 32927, 32931, + 32935, 32939, 32943, 32948, 32952, 32957, 32961, 32966, 32971, 32976, + 32982, 32988, 32992, 32998, 33002, 33008, 33014, 33019, 33026, 33030, + 33036, 33040, 33046, 33051, 33058, 33065, 33070, 33077, 33082, 33087, + 33092, 33099, 33103, 33109, 33116, 33123, 33128, 33135, 33142, 33146, + 33152, 33157, 33161, 33167, 33172, 33177, 33182, 33187, 33191, 33195, + 33200, 33205, 33212, 33218, 33223, 33230, 33235, 33242, 33247, 33257, + 33263, 33269, 33273, 0, 0, 0, 0, 0, 0, 0, 0, 33277, 33286, 33293, 33300, + 33307, 33311, 33316, 33321, 33326, 33331, 33336, 33341, 33346, 33351, + 33356, 33361, 33366, 33371, 33375, 33379, 33384, 33389, 33394, 33399, + 33404, 33409, 33413, 33418, 33423, 33428, 33433, 33437, 33442, 33446, + 33450, 33455, 33460, 33465, 33470, 33475, 33479, 33485, 33492, 33498, + 33503, 33508, 33514, 33519, 33525, 33530, 33536, 33542, 33547, 33553, + 33559, 33564, 33570, 33576, 33582, 33587, 0, 0, 0, 33592, 33598, 33608, + 33614, 33622, 33628, 33633, 33637, 33641, 33645, 33649, 33653, 33657, + 33662, 33666, 0, 0, 0, 33671, 33676, 33681, 33686, 33693, 33699, 33705, + 33711, 33717, 33723, 33729, 33736, 33742, 33749, 33755, 33762, 33769, + 33776, 33783, 33790, 33797, 33804, 33811, 33818, 33825, 33832, 33839, + 33846, 33853, 33860, 33867, 33874, 33881, 33888, 33895, 33902, 33909, + 33916, 33923, 33930, 33937, 33944, 33951, 33958, 33966, 33974, 33982, + 33988, 33994, 34000, 34008, 34017, 34024, 34031, 34037, 34044, 34051, + 34058, 34066, 34073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 33469, 33477, 33485, 33493, 33501, 33511, 33521, 33531, 0, 0, 0, 0, 0, - 0, 0, 0, 33541, 33546, 33551, 33556, 33561, 33570, 33581, 33590, 33601, - 33607, 33620, 33626, 33633, 33640, 33645, 33651, 33657, 33668, 33677, - 33684, 33691, 33700, 33707, 33716, 33726, 33736, 33743, 33750, 33757, - 33767, 33772, 33780, 33786, 33794, 33803, 33808, 33815, 33821, 33826, 0, - 33831, 33837, 0, 0, 0, 0, 0, 0, 33844, 33849, 33855, 33862, 33870, 33876, - 33882, 33888, 33893, 33900, 33906, 33912, 33918, 33926, 33932, 33940, - 33945, 33951, 33957, 33964, 33972, 33979, 33985, 33992, 33999, 34005, - 34012, 34019, 34025, 34030, 34036, 34044, 34053, 34059, 34065, 34071, - 34077, 34085, 34089, 34095, 34101, 34107, 34113, 34119, 34125, 34129, - 34134, 34139, 34146, 34151, 34155, 34161, 34166, 34171, 34175, 34180, - 34185, 34189, 34194, 34199, 34206, 34210, 34215, 34220, 34224, 34229, - 34233, 34238, 34242, 34248, 34253, 34260, 34265, 34270, 34274, 34279, - 34284, 34291, 34296, 34302, 34307, 34312, 34317, 34321, 34326, 34333, - 34340, 34345, 34350, 34354, 34360, 34367, 34372, 34377, 34382, 34388, - 34393, 34399, 34404, 34410, 34416, 34422, 34429, 34436, 34443, 34450, - 34457, 34464, 34469, 34477, 34486, 34495, 34504, 34513, 34522, 34531, - 34543, 34552, 34561, 34570, 34577, 34582, 34589, 34597, 34605, 34612, - 34619, 34626, 34633, 34641, 34650, 34659, 34668, 34677, 34686, 34695, - 34704, 34713, 34722, 34731, 34740, 34749, 34758, 34767, 34775, 34784, - 34795, 34803, 34812, 34823, 34832, 34841, 34850, 34859, 34867, 34876, - 34883, 34888, 34896, 34901, 34908, 34913, 34922, 34928, 34935, 34942, - 34947, 34952, 34960, 34968, 34977, 34986, 34991, 34998, 35009, 35017, - 35026, 35032, 35038, 35043, 35050, 35055, 35064, 35069, 35074, 35079, - 35086, 35093, 35098, 35107, 35115, 35120, 35125, 35132, 35139, 35143, - 35147, 35150, 35153, 35156, 35159, 35162, 35165, 35172, 35175, 35178, - 35183, 35187, 35191, 35195, 35199, 35203, 35212, 35218, 35224, 35230, - 35238, 35246, 35252, 35258, 35265, 35271, 35276, 35282, 35289, 35295, - 35302, 35308, 35316, 35321, 35327, 35333, 35339, 35345, 35351, 35357, - 35363, 35374, 35384, 35390, 35396, 35406, 35412, 35420, 35428, 35436, 0, - 0, 0, 0, 0, 0, 35441, 35448, 35455, 35460, 35469, 35477, 35485, 35492, - 35499, 35506, 35513, 35521, 35529, 35539, 35549, 35557, 35565, 35573, - 35581, 35590, 35599, 35607, 35615, 35624, 35633, 35643, 35653, 35662, - 35671, 35679, 35687, 35695, 35703, 35713, 35723, 35731, 35739, 35747, - 35755, 35763, 35771, 35779, 35787, 35795, 35803, 35811, 35819, 35828, - 35837, 35846, 35855, 35865, 35875, 35882, 35889, 35897, 35905, 35914, - 35923, 35931, 35939, 35951, 35963, 35972, 35981, 35990, 35999, 36006, - 36013, 36021, 36029, 36037, 36045, 36053, 36061, 36069, 36077, 36086, - 36095, 36104, 36113, 36122, 36131, 36141, 36151, 36161, 36171, 36180, - 36189, 36196, 36203, 36211, 36219, 36227, 36235, 36243, 36251, 36263, - 36275, 36284, 36293, 36301, 36309, 36317, 36325, 36336, 36347, 36358, - 36369, 36381, 36393, 36401, 36409, 36417, 36425, 36434, 36443, 36452, - 36461, 36469, 36477, 36485, 36493, 36501, 36509, 36518, 36527, 36537, - 36547, 36555, 36563, 36571, 36579, 36587, 36595, 36602, 36609, 36617, - 36625, 36633, 36641, 36649, 36657, 36665, 36673, 36681, 36689, 36697, - 36705, 36713, 36721, 36729, 36737, 36746, 36755, 36764, 36772, 36781, - 36790, 36799, 36808, 36818, 36827, 36833, 36838, 36845, 36852, 36860, - 36868, 36877, 36886, 36896, 36906, 36917, 36928, 36938, 36948, 36958, - 36968, 36977, 36986, 36996, 37006, 37017, 37028, 37038, 37048, 37058, - 37068, 37075, 37082, 37090, 37098, 37105, 37112, 37121, 37130, 37140, - 37150, 37161, 37172, 37182, 37192, 37202, 37212, 37221, 37230, 37238, - 37246, 37253, 37260, 37268, 37276, 37285, 37294, 37304, 37314, 37325, - 37336, 37346, 37356, 37366, 37376, 37385, 37394, 37404, 37414, 37425, - 37436, 37446, 37456, 37466, 37476, 37483, 37490, 37498, 37506, 37515, - 37524, 37534, 37544, 37555, 37566, 37576, 37586, 37596, 37606, 37614, - 37622, 37630, 37638, 37647, 37656, 37664, 37672, 37679, 37686, 37693, - 37700, 37708, 37716, 37724, 37732, 37743, 37754, 37765, 37776, 37787, - 37798, 37806, 37814, 37825, 37836, 37847, 37858, 37869, 37880, 37888, - 37896, 37907, 37918, 37929, 0, 0, 37940, 37948, 37956, 37967, 37978, - 37989, 0, 0, 38000, 38008, 38016, 38027, 38038, 38049, 38060, 38071, - 38082, 38090, 38098, 38109, 38120, 38131, 38142, 38153, 38164, 38172, - 38180, 38191, 38202, 38213, 38224, 38235, 38246, 38254, 38262, 38273, - 38284, 38295, 38306, 38317, 38328, 38336, 38344, 38355, 38366, 38377, 0, - 0, 38388, 38396, 38404, 38415, 38426, 38437, 0, 0, 38448, 38456, 38464, - 38475, 38486, 38497, 38508, 38519, 0, 38530, 0, 38538, 0, 38549, 0, - 38560, 38571, 38579, 38587, 38598, 38609, 38620, 38631, 38642, 38653, - 38661, 38669, 38680, 38691, 38702, 38713, 38724, 38735, 38743, 38751, - 38759, 38767, 38775, 38783, 38791, 38799, 38807, 38815, 38823, 38831, - 38839, 0, 0, 38847, 38858, 38869, 38883, 38897, 38911, 38925, 38939, - 38953, 38964, 38975, 38989, 39003, 39017, 39031, 39045, 39059, 39070, - 39081, 39095, 39109, 39123, 39137, 39151, 39165, 39176, 39187, 39201, - 39215, 39229, 39243, 39257, 39271, 39282, 39293, 39307, 39321, 39335, - 39349, 39363, 39377, 39388, 39399, 39413, 39427, 39441, 39455, 39469, - 39483, 39491, 39499, 39510, 39518, 0, 39529, 39537, 39548, 39556, 39564, - 39572, 39580, 39588, 39591, 39594, 39597, 39600, 39606, 39617, 39625, 0, - 39636, 39644, 39655, 39663, 39671, 39679, 39687, 39695, 39701, 39707, - 39713, 39721, 39729, 39740, 0, 0, 39751, 39759, 39770, 39778, 39786, - 39794, 0, 39802, 39808, 39814, 39820, 39828, 39836, 39847, 39858, 39866, - 39874, 39882, 39893, 39901, 39909, 39917, 39925, 39933, 39939, 39945, 0, - 0, 39948, 39959, 39967, 0, 39978, 39986, 39997, 40005, 40013, 40021, - 40029, 40037, 40040, 0, 40043, 40047, 40051, 40055, 40059, 40063, 40067, - 40071, 40075, 40079, 40083, 40087, 40093, 40099, 40105, 40108, 40111, - 40113, 40117, 40121, 40125, 40129, 40132, 40136, 40140, 40146, 40152, - 40159, 40166, 40171, 40176, 40182, 40188, 40190, 40193, 40195, 40199, - 40203, 40207, 40211, 40215, 40219, 40223, 40227, 40231, 40237, 40241, - 40245, 40251, 40256, 40263, 40265, 40268, 40272, 40276, 40281, 40287, - 40289, 40298, 40307, 40310, 40314, 40316, 40318, 40320, 40323, 40329, - 40331, 40335, 40339, 40346, 40353, 40357, 40362, 40367, 40372, 40377, - 40381, 40385, 40388, 40392, 40396, 40403, 40408, 40412, 40416, 40421, - 40425, 40429, 40434, 40439, 40443, 40447, 40451, 40453, 40458, 40463, - 40467, 40471, 40475, 40479, 0, 40483, 40487, 40491, 40497, 40503, 40509, - 40515, 40522, 40529, 40534, 40539, 40543, 0, 0, 40549, 40552, 40555, - 40558, 40562, 40565, 40569, 40573, 40577, 40582, 40587, 40592, 40599, - 40603, 40606, 40609, 40612, 40615, 40618, 40621, 40625, 40628, 40632, - 40636, 40640, 40645, 40650, 0, 40655, 40661, 40667, 40673, 40680, 40687, - 40694, 40701, 40707, 40714, 40721, 40728, 40734, 0, 0, 0, 40741, 40744, - 40747, 40750, 40755, 40758, 40761, 40764, 40767, 40770, 40773, 40778, - 40781, 40784, 40787, 40790, 40793, 40798, 40801, 40804, 40807, 40810, - 40813, 40818, 40821, 40824, 40829, 40834, 40838, 40841, 40844, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40847, 40852, 40857, 40864, - 40872, 40877, 40882, 40886, 40890, 40895, 40902, 40909, 40913, 40918, - 40923, 40928, 40933, 40940, 40945, 40950, 40955, 40964, 40971, 40978, - 40982, 40987, 40993, 40998, 41005, 41013, 41021, 41025, 41029, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41033, 41037, 41045, 41049, 41053, - 41058, 41062, 41066, 41070, 41072, 41076, 41080, 41084, 41089, 41093, - 41097, 41105, 41108, 41112, 41115, 41118, 41124, 41128, 41131, 41137, - 41141, 41145, 41149, 41152, 41156, 41159, 41163, 41165, 41168, 41171, - 41175, 41177, 41181, 41184, 41187, 41192, 41197, 41204, 41207, 41210, - 41214, 41219, 41222, 41225, 41228, 41232, 41237, 41241, 41244, 41246, - 41249, 41252, 41255, 41259, 41264, 41267, 41271, 41275, 41279, 41283, - 41288, 41294, 41299, 41304, 41310, 41315, 41320, 41324, 41328, 41333, - 41337, 41341, 41344, 41346, 41351, 41357, 41364, 41371, 41378, 41385, - 41392, 41399, 41406, 41413, 41421, 41428, 41436, 41443, 41450, 41458, - 41466, 41471, 41476, 41481, 41486, 41491, 41496, 41501, 41507, 41512, - 41518, 41524, 41530, 41536, 41542, 41549, 41557, 41564, 41570, 41576, - 41582, 41588, 41594, 41600, 41607, 41613, 41620, 41627, 41634, 41641, - 41648, 41656, 41665, 41673, 41684, 41692, 41700, 41709, 41716, 41725, - 41734, 41742, 41751, 41759, 41763, 0, 0, 0, 0, 41767, 41769, 41771, - 41773, 41775, 41778, 41781, 41785, 41789, 41794, 41799, 41803, 41807, - 41811, 41815, 41820, 41825, 41830, 41835, 41840, 41845, 41850, 41855, - 41860, 41865, 41871, 41875, 41879, 41884, 41889, 41894, 41899, 41903, - 41910, 41917, 41924, 41931, 41938, 41945, 41952, 41959, 41967, 41979, - 41985, 41991, 41998, 42005, 42012, 42019, 42026, 42033, 42040, 42047, - 42052, 42058, 42063, 42068, 42073, 42078, 42083, 42090, 42097, 42102, - 42108, 42113, 42116, 42119, 42122, 42125, 42129, 42133, 42138, 42143, - 42149, 42155, 42159, 42163, 42167, 42171, 42176, 42181, 42185, 42189, - 42193, 42197, 42202, 42207, 42210, 42213, 42216, 42219, 42225, 42232, - 42243, 42253, 42257, 42265, 42272, 42280, 42289, 42293, 42299, 42305, - 42309, 42314, 42319, 42325, 42331, 42337, 42344, 42348, 42352, 42357, - 42360, 42362, 42366, 42370, 42378, 42382, 42384, 42386, 42390, 42398, - 42403, 42409, 42419, 42426, 42431, 42435, 42439, 42443, 42446, 42449, - 42452, 42456, 42460, 42464, 42468, 42472, 42475, 42479, 42483, 42486, - 42488, 42491, 42493, 42497, 42501, 42503, 42509, 42512, 42517, 42521, - 42525, 42527, 42529, 42531, 42534, 42538, 42542, 42546, 42550, 42554, - 42560, 42566, 42568, 42570, 42572, 42574, 42577, 42579, 42583, 42585, - 42589, 42593, 42598, 42602, 42606, 42610, 42614, 42618, 42624, 42628, - 42638, 42648, 42652, 42658, 42665, 42669, 42673, 42676, 42681, 42685, - 42691, 42695, 42708, 42717, 42721, 42725, 42731, 42735, 42738, 42740, - 42743, 42747, 42751, 42758, 42762, 42766, 42770, 42773, 42778, 42783, - 42789, 42795, 42800, 42805, 42813, 42821, 42825, 42829, 42831, 42836, - 42840, 42844, 42852, 42860, 42867, 42874, 42883, 42892, 42898, 42904, - 42912, 42920, 42922, 42924, 42930, 42936, 42943, 42950, 42956, 42962, - 42966, 42970, 42977, 42984, 42991, 42998, 43008, 43018, 43026, 43034, - 43036, 43040, 43044, 43049, 43054, 43062, 43070, 43073, 43076, 43079, - 43082, 43085, 43090, 43094, 43099, 43104, 43107, 43110, 43113, 43116, - 43119, 43123, 43126, 43129, 43132, 43135, 43137, 43139, 43141, 43143, - 43151, 43159, 43165, 43169, 43175, 43185, 43191, 43197, 43203, 43211, - 43220, 43232, 43236, 43240, 43242, 43248, 43250, 43252, 43254, 43256, - 43262, 43265, 43271, 43277, 43281, 43285, 43289, 43292, 43296, 43300, - 43302, 43311, 43320, 43325, 43330, 43336, 43342, 43348, 43351, 43354, - 43357, 43360, 43362, 43367, 43372, 43377, 43383, 43389, 43398, 43407, - 43414, 43421, 43428, 43435, 43445, 43455, 43465, 43475, 43485, 43495, - 43504, 43513, 43522, 43531, 43539, 43551, 43562, 43578, 43581, 43587, - 43593, 43599, 43607, 43622, 43638, 43644, 43650, 43657, 43663, 43672, - 43679, 43693, 43708, 43713, 43719, 43727, 43730, 43733, 43735, 43738, - 43741, 43743, 43745, 43749, 43752, 43755, 43758, 43761, 43766, 43771, - 43776, 43781, 43786, 43789, 43791, 43793, 43795, 43799, 43803, 43807, - 43813, 43818, 43820, 43822, 43827, 43832, 43837, 43842, 43847, 43852, - 43854, 43856, 43866, 43870, 43878, 43887, 43889, 43894, 43899, 43907, - 43911, 43913, 43917, 43919, 43923, 43927, 43931, 43933, 43935, 43937, - 43944, 43953, 43962, 43971, 43980, 43989, 43998, 44007, 44016, 44024, - 44032, 44041, 44050, 44059, 44068, 44076, 44084, 44093, 44102, 44111, - 44121, 44130, 44140, 44149, 44159, 44167, 44176, 44186, 44195, 44205, - 44214, 44224, 44232, 44241, 44250, 44259, 44268, 44277, 44286, 44296, - 44305, 44314, 44323, 44333, 44342, 44351, 44360, 44369, 44379, 44389, - 44398, 44407, 44415, 44424, 44431, 44440, 44449, 44460, 44469, 44479, - 44489, 44496, 44503, 44510, 44519, 44528, 44537, 44546, 44553, 44558, - 44566, 44571, 44574, 44581, 44584, 44589, 44594, 44597, 44600, 44608, - 44611, 44616, 44619, 44627, 44632, 44640, 44643, 44646, 44649, 44654, - 44659, 44662, 44665, 44673, 44676, 44683, 44690, 44694, 44698, 44703, - 44708, 44714, 44719, 44725, 44731, 44736, 44742, 44750, 44756, 44764, - 44772, 44778, 44786, 44794, 44802, 44810, 44816, 44824, 44832, 44840, - 44844, 44850, 44864, 44878, 44882, 44886, 44890, 44894, 44904, 44908, - 44913, 44918, 44924, 44930, 44936, 44942, 44952, 44962, 44970, 44981, - 44992, 45000, 45011, 45022, 45030, 45041, 45052, 45060, 45068, 45078, - 45088, 45091, 45094, 45097, 45102, 45106, 45112, 45119, 45126, 45134, - 45141, 45145, 45149, 45153, 45157, 45159, 45163, 45167, 45172, 45177, - 45184, 45191, 45194, 45201, 45203, 45205, 45209, 45213, 45218, 45224, - 45230, 45236, 45242, 45251, 45260, 45269, 45273, 45275, 45279, 45286, - 45293, 45300, 45307, 45314, 45317, 45322, 0, 0, 0, 0, 0, 45328, 45332, - 45339, 45346, 45353, 45360, 45364, 45368, 45372, 45376, 45382, 45388, - 45393, 45399, 45405, 45411, 45417, 45425, 45432, 45439, 45446, 45453, - 45458, 45464, 45473, 45477, 45484, 45488, 45492, 45498, 45504, 45510, - 45516, 45520, 45524, 45527, 45530, 45534, 45541, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45548, 45551, 45555, - 45559, 45565, 45571, 45577, 45585, 45592, 45596, 45604, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45609, 45612, 45615, 45618, - 45621, 45624, 45627, 45631, 45634, 45638, 45642, 45646, 45650, 45654, - 45658, 45662, 45666, 45670, 45674, 45678, 45682, 45685, 45688, 45691, - 45694, 45697, 45700, 45704, 45707, 45711, 45715, 45719, 45723, 45727, - 45731, 45735, 45739, 45743, 45747, 45751, 45755, 45761, 45767, 45773, - 45780, 45787, 45794, 45801, 45808, 45815, 45822, 45829, 45836, 45843, - 45850, 45857, 45864, 45871, 45878, 45885, 45892, 45897, 45903, 45909, - 45915, 45920, 45926, 45932, 45938, 45943, 45949, 45955, 45960, 45966, - 45972, 45977, 45983, 45989, 45994, 45999, 46005, 46010, 46016, 46022, - 46028, 46034, 46040, 46045, 46051, 46057, 46063, 46068, 46074, 46080, - 46086, 46091, 46097, 46103, 46108, 46114, 46120, 46125, 46131, 46137, - 46142, 46147, 46153, 46158, 46164, 46170, 46176, 46182, 46188, 46193, - 46199, 46205, 46211, 46216, 46222, 46228, 46234, 46239, 46245, 46251, - 46256, 46262, 46268, 46273, 46279, 46285, 46290, 46295, 46301, 46306, - 46312, 46318, 46324, 46330, 46336, 46340, 46345, 46350, 46355, 46360, - 46365, 46370, 46375, 46380, 46385, 46390, 46394, 46398, 46402, 46406, - 46410, 46414, 46419, 46423, 46428, 46433, 46438, 46443, 46448, 46453, - 46458, 46467, 46476, 46485, 46494, 46503, 46512, 46521, 46530, 46537, - 46545, 46553, 46560, 46567, 46575, 46583, 46590, 46597, 46605, 46613, - 46620, 46627, 46635, 46643, 46650, 46657, 46665, 46674, 46683, 46691, - 46700, 46709, 46716, 46723, 46731, 46740, 46749, 46757, 46766, 46775, - 46782, 46789, 46798, 46807, 46816, 46825, 46834, 46843, 46850, 46857, - 46866, 46875, 46884, 46893, 46902, 46911, 46918, 46925, 46934, 46943, - 46952, 46962, 46972, 46981, 46991, 47001, 47011, 47021, 47031, 47041, - 47050, 47059, 47066, 47074, 47082, 47090, 47098, 47103, 47108, 47117, - 47125, 47132, 47141, 47149, 47156, 47165, 47173, 47180, 47189, 47197, - 47204, 47213, 47221, 47228, 47237, 47245, 47252, 47262, 47271, 47278, - 47288, 47297, 47304, 47314, 47323, 47330, 47339, 47348, 47357, 47366, - 47380, 47394, 47401, 47406, 47411, 47416, 47421, 47426, 47431, 47436, - 47441, 47449, 47457, 47465, 47473, 47478, 47485, 47492, 47499, 47504, - 47512, 47519, 47527, 47531, 47538, 47544, 47551, 47555, 47561, 47567, - 47573, 47577, 47580, 47584, 47588, 47595, 47601, 47607, 47613, 47619, - 47633, 47643, 47657, 47671, 47677, 47687, 47701, 47704, 47707, 47714, - 47722, 47728, 47733, 47741, 47753, 47765, 47773, 47777, 47781, 47784, - 47787, 47791, 47795, 47798, 47801, 47806, 47811, 47817, 47823, 47828, - 47833, 47839, 47845, 47850, 47855, 47860, 47865, 47871, 47877, 47882, - 47887, 47893, 47899, 47904, 47909, 47912, 47915, 47924, 47926, 47928, - 47931, 47935, 47941, 47943, 47946, 47953, 47960, 47968, 47976, 47986, - 48000, 48005, 48010, 48014, 48019, 48027, 48035, 48044, 48053, 48062, - 48071, 48076, 48081, 48087, 48093, 48099, 48105, 48108, 48114, 48120, - 48130, 48140, 48148, 48156, 48165, 48174, 48178, 48186, 48194, 48202, - 48210, 48219, 48228, 48237, 48246, 48251, 48256, 48261, 48266, 48271, - 48277, 48283, 48288, 48294, 48296, 48298, 48300, 48302, 48305, 48308, - 48310, 48312, 48314, 48318, 48322, 48324, 48326, 48329, 48332, 48336, - 48342, 48348, 48350, 48357, 48361, 48366, 48371, 48373, 48383, 48389, - 48395, 48401, 48407, 48413, 48419, 48424, 48427, 48430, 48433, 48435, - 48437, 48441, 48445, 48450, 48455, 48460, 48463, 48467, 48472, 48475, - 48479, 48484, 48489, 48494, 48499, 48504, 48509, 48514, 48519, 48524, - 48529, 48534, 48539, 48545, 48551, 48557, 48559, 48562, 48564, 48567, - 48569, 48571, 48573, 48575, 48577, 48579, 48581, 48583, 48585, 48587, - 48589, 48591, 48593, 48595, 48597, 48599, 48601, 48606, 48611, 48616, - 48621, 48626, 48631, 48636, 48641, 48646, 48651, 48656, 48661, 48666, - 48671, 48676, 48681, 48686, 48691, 48696, 48701, 48705, 48709, 48713, - 48719, 48725, 48730, 48735, 48740, 48746, 48752, 48757, 48765, 48773, - 48781, 48789, 48797, 48805, 48813, 48821, 48827, 48832, 48837, 48842, - 48845, 48849, 48853, 48857, 48861, 48865, 48869, 48876, 48883, 48891, - 48899, 48904, 48909, 48916, 48923, 48930, 48937, 48940, 48943, 48948, - 48950, 48954, 48959, 48961, 48963, 48965, 48967, 48972, 48975, 48977, - 48982, 48989, 48996, 48999, 49003, 49008, 49013, 49021, 49027, 49033, - 49045, 49052, 49060, 49065, 49070, 49076, 49079, 49082, 49087, 49089, - 49093, 49095, 49097, 49099, 49101, 49103, 49105, 49110, 49112, 49114, - 49116, 49118, 49122, 49124, 49127, 49132, 49137, 49142, 49147, 49153, - 49159, 49161, 49164, 49171, 49178, 49185, 49192, 49196, 49200, 49202, - 49204, 49208, 49214, 49219, 49221, 49225, 49234, 49242, 49250, 49256, - 49262, 49267, 49273, 49278, 49281, 49295, 49298, 49303, 49308, 49314, - 49324, 49326, 49332, 49338, 49342, 49349, 49353, 49355, 49357, 49361, - 49367, 49372, 49378, 49380, 49386, 49388, 49394, 49396, 49398, 49403, - 49405, 49409, 49414, 49416, 49421, 49426, 49430, 49437, 49447, 49452, - 49458, 49461, 49467, 49470, 49475, 49480, 49484, 49486, 49488, 49492, - 49496, 49500, 49504, 49509, 49511, 49516, 49519, 49522, 49525, 49529, - 49533, 49538, 49542, 49547, 49552, 49556, 49561, 49567, 49570, 49576, - 49581, 49585, 49590, 49596, 49602, 49609, 49615, 49622, 49629, 49631, - 49638, 49642, 49648, 49654, 49659, 49665, 49669, 49674, 49677, 49682, - 49688, 49695, 49703, 49710, 49719, 49729, 49736, 49742, 49746, 49753, - 49758, 49767, 49770, 49773, 49782, 49792, 49799, 49801, 49807, 49812, - 49814, 49817, 49821, 49829, 49838, 49841, 49846, 49851, 49859, 49867, - 49875, 49883, 49889, 49895, 49901, 49909, 49914, 49917, 49921, 49924, - 49936, 49946, 49957, 49966, 49977, 49987, 49996, 50002, 50010, 50014, - 50022, 50026, 50034, 50041, 50048, 50057, 50066, 50076, 50086, 50096, - 50106, 50115, 50124, 50134, 50144, 50153, 50162, 50168, 50174, 50180, - 50186, 50192, 50198, 50205, 50211, 50218, 50225, 50231, 50237, 50243, - 50249, 50255, 50261, 50268, 50274, 50281, 50288, 50295, 50302, 50309, - 50316, 50323, 50330, 50338, 50345, 50353, 50361, 50366, 50369, 50373, - 50377, 50383, 50386, 50391, 50397, 50402, 50406, 50411, 50417, 50424, - 50427, 50434, 50441, 50445, 50453, 50461, 50466, 50472, 50477, 50482, - 50489, 50496, 50504, 50512, 50521, 50525, 50534, 50539, 50543, 50550, - 50554, 50560, 50568, 50573, 50580, 50584, 50589, 50593, 50598, 50602, - 50607, 50612, 50621, 50623, 50626, 50629, 50636, 50643, 50649, 50657, - 50663, 50670, 50675, 50678, 50683, 50688, 50693, 50701, 50705, 50712, - 50720, 50728, 50733, 50738, 50744, 50749, 50754, 50760, 50765, 50768, - 50772, 50776, 50783, 50793, 50798, 50807, 50816, 50822, 50828, 50833, - 50838, 50843, 50848, 50854, 50860, 50868, 50876, 50882, 50888, 50892, - 50896, 50903, 50910, 50916, 50919, 50922, 50926, 50930, 50934, 50939, - 50945, 50951, 50958, 50965, 50970, 50974, 50978, 50982, 50986, 50990, - 50994, 50998, 51002, 51006, 51010, 51014, 51018, 51022, 51026, 51030, - 51034, 51038, 51042, 51046, 51050, 51054, 51058, 51062, 51066, 51070, - 51074, 51078, 51082, 51086, 51090, 51094, 51098, 51102, 51106, 51110, - 51114, 51118, 51122, 51126, 51130, 51134, 51138, 51142, 51146, 51150, - 51154, 51158, 51162, 51166, 51170, 51174, 51178, 51182, 51186, 51190, - 51194, 51198, 51202, 51206, 51210, 51214, 51218, 51222, 51226, 51230, - 51234, 51238, 51242, 51246, 51250, 51254, 51258, 51262, 51266, 51270, - 51274, 51278, 51282, 51286, 51290, 51294, 51298, 51302, 51306, 51310, - 51314, 51318, 51322, 51326, 51330, 51334, 51338, 51342, 51346, 51350, - 51354, 51358, 51362, 51366, 51370, 51374, 51378, 51382, 51386, 51390, - 51394, 51398, 51402, 51406, 51410, 51414, 51418, 51422, 51426, 51430, - 51434, 51438, 51442, 51446, 51450, 51454, 51458, 51462, 51466, 51470, - 51474, 51478, 51482, 51486, 51490, 51494, 51498, 51502, 51506, 51510, - 51514, 51518, 51522, 51526, 51530, 51534, 51538, 51542, 51546, 51550, - 51554, 51558, 51562, 51566, 51570, 51574, 51578, 51582, 51586, 51590, - 51594, 51598, 51602, 51606, 51610, 51614, 51618, 51622, 51626, 51630, - 51634, 51638, 51642, 51646, 51650, 51654, 51658, 51662, 51666, 51670, - 51674, 51678, 51682, 51686, 51690, 51694, 51698, 51702, 51706, 51710, - 51714, 51718, 51722, 51726, 51730, 51734, 51738, 51742, 51746, 51750, - 51754, 51758, 51762, 51766, 51770, 51774, 51778, 51782, 51786, 51790, - 51794, 51798, 51802, 51806, 51810, 51814, 51818, 51822, 51826, 51830, - 51834, 51838, 51842, 51846, 51850, 51854, 51858, 51862, 51866, 51870, - 51874, 51878, 51882, 51886, 51890, 51894, 51898, 51902, 51906, 51910, - 51914, 51918, 51922, 51926, 51930, 51934, 51938, 51942, 51946, 51950, - 51954, 51958, 51962, 51966, 51970, 51974, 51978, 51982, 51986, 51990, - 51994, 52001, 52009, 52015, 52021, 52028, 52035, 52041, 52047, 52053, - 52059, 52063, 52067, 52072, 52077, 52083, 52089, 52097, 52104, 52109, - 52114, 52122, 52131, 52138, 52148, 52159, 52162, 52165, 52169, 52173, - 52180, 52187, 52198, 52209, 52218, 52227, 52233, 52239, 52246, 52253, - 52262, 52272, 52283, 52293, 52303, 52313, 52324, 52335, 52345, 52356, - 52366, 52376, 52385, 52395, 52405, 52415, 52425, 52432, 52439, 52446, - 52453, 52463, 52473, 52481, 52489, 52496, 52503, 52510, 52517, 52524, - 52529, 52534, 52540, 52548, 52557, 52565, 52573, 52581, 52589, 52597, - 52605, 52613, 52621, 52630, 52639, 52648, 52657, 52666, 52675, 52684, - 52693, 52702, 52711, 52720, 52729, 52738, 52747, 52756, 52765, 52779, - 52794, 52808, 52823, 52837, 52851, 52865, 52879, 52889, 52900, 52910, - 52921, 52936, 52951, 52959, 52965, 52972, 52979, 52986, 52993, 52998, - 53004, 53009, 53014, 53020, 53025, 53030, 53035, 53040, 53045, 53052, - 53058, 53066, 53071, 53076, 53080, 53084, 53092, 53100, 53108, 53116, - 53123, 53130, 53143, 53156, 53169, 53182, 53190, 53198, 53204, 53210, - 53217, 53224, 53231, 53238, 53242, 53247, 53255, 53263, 53271, 53278, - 53282, 53290, 53298, 53302, 53306, 53311, 53318, 53326, 53334, 53353, - 53372, 53391, 53410, 53429, 53448, 53467, 53486, 53492, 53499, 53508, - 53516, 53524, 53530, 53533, 53536, 53541, 53544, 53564, 53571, 53577, - 53583, 53587, 53590, 53593, 53596, 53608, 53622, 53629, 53636, 53639, - 53643, 53646, 53651, 53656, 53661, 53667, 53676, 53683, 53690, 53698, - 53705, 53712, 53715, 53721, 53727, 53730, 53733, 53738, 53743, 53749, - 53755, 53759, 53764, 53771, 53775, 53781, 53785, 53789, 53797, 53809, - 53818, 53822, 53824, 53833, 53842, 53848, 53851, 53857, 53863, 53868, - 53873, 53878, 53883, 53888, 53893, 53895, 53901, 53906, 53914, 53918, - 53924, 53927, 53931, 53938, 53945, 53947, 53949, 53955, 53961, 53967, - 53976, 53985, 53992, 53999, 54005, 54012, 54017, 54022, 54027, 54033, - 54039, 54044, 54051, 54055, 54059, 54072, 54085, 54097, 54106, 54112, - 54119, 54124, 54129, 54134, 54139, 54144, 54146, 54153, 54161, 54169, - 54177, 54184, 54192, 54198, 54203, 54209, 54215, 54221, 54228, 54234, - 54242, 54250, 54258, 54266, 54274, 54280, 54286, 54295, 54299, 54308, - 54317, 54326, 54334, 54338, 54344, 54351, 54358, 54362, 54368, 54376, - 54382, 54387, 54393, 54398, 54403, 54410, 54417, 54422, 54427, 54435, - 54443, 54453, 54463, 54470, 54477, 54481, 54485, 54497, 54503, 54510, - 54515, 54520, 54527, 54534, 54540, 54546, 54556, 54563, 54571, 54579, - 54588, 54595, 54601, 54608, 54614, 54622, 54630, 54638, 54646, 54652, - 54657, 54667, 54678, 54685, 54694, 54700, 54705, 54710, 54720, 54727, - 54733, 54739, 54747, 54752, 54759, 54766, 54777, 54784, 54791, 54798, - 54805, 54812, 54820, 54828, 54841, 54854, 54866, 54878, 54892, 54906, - 54912, 54918, 54927, 54936, 54943, 54950, 54959, 54968, 54977, 54986, - 54994, 55002, 55012, 55022, 55036, 55050, 55059, 55068, 55081, 55094, - 55103, 55112, 55123, 55134, 55140, 55146, 55155, 55164, 55169, 55174, - 55182, 55188, 55194, 55202, 55210, 55223, 55236, 55240, 55244, 55252, - 55260, 55267, 55275, 55283, 55292, 55301, 55307, 55313, 55320, 55327, - 55334, 55341, 55350, 55359, 55362, 55365, 55370, 55375, 55381, 55387, - 55394, 55401, 55412, 55423, 55430, 55437, 55445, 55453, 55461, 55469, - 55477, 55485, 55491, 55497, 55501, 55505, 55513, 55521, 55526, 55531, - 55536, 55541, 55547, 55561, 55568, 55575, 55579, 55581, 55583, 55588, - 55593, 55598, 55602, 55610, 55617, 55624, 55632, 55644, 55652, 55660, - 55671, 55675, 55679, 55685, 55693, 55706, 55713, 55720, 55727, 55733, - 55740, 55749, 55758, 55764, 55770, 55776, 55786, 55796, 55804, 55813, - 55818, 55821, 55826, 55831, 55836, 55842, 55848, 55852, 55855, 55858, - 55861, 55866, 55871, 55877, 55883, 55887, 55891, 55898, 55905, 55912, - 55919, 55926, 55933, 55943, 55953, 55960, 55967, 55975, 55983, 55987, - 55992, 55997, 56003, 56009, 56012, 56015, 56018, 56021, 56026, 56031, - 56036, 56041, 56046, 56051, 56055, 56059, 56063, 56068, 56073, 56077, - 56081, 56087, 56091, 56097, 56102, 56109, 56117, 56124, 56132, 56139, - 56147, 56156, 56163, 56173, 56184, 56190, 56199, 56205, 56214, 56223, - 56229, 56235, 56239, 56243, 56252, 56261, 56268, 56275, 56284, 56293, - 56299, 56305, 56312, 56317, 56321, 56325, 56330, 56335, 56340, 56348, - 56356, 56359, 56363, 56372, 56382, 56391, 56401, 56412, 56425, 56429, - 56433, 56437, 56441, 56446, 56451, 56457, 56463, 56470, 56477, 56483, - 56489, 56495, 56501, 56509, 56517, 56524, 56531, 56538, 0, 0, 56545, - 56554, 56563, 56573, 56583, 56592, 56601, 56610, 56619, 56625, 56630, - 56639, 56649, 56658, 56668, 56675, 56682, 56689, 56696, 56701, 56706, - 56711, 56716, 56724, 56733, 56741, 56750, 56754, 56758, 56762, 56766, - 56776, 0, 0, 56779, 56788, 56797, 56806, 56815, 56821, 56827, 56833, - 56839, 56849, 56859, 56869, 56879, 56889, 56899, 56909, 56919, 56926, - 56933, 56940, 56947, 56954, 56961, 56968, 56975, 56981, 56987, 56993, - 56999, 57005, 57011, 57017, 57023, 57034, 0, 0, 0, 57044, 57051, 57054, - 57058, 57062, 57067, 57072, 57077, 57080, 57089, 57098, 57107, 0, 57116, - 57122, 57128, 57136, 57146, 57153, 57162, 57167, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57170, 57179, - 57188, 57197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57206, - 57211, 57216, 57221, 57226, 57231, 57236, 57241, 57246, 57251, 57256, - 57262, 57266, 57271, 57276, 57281, 57286, 57291, 57296, 57301, 57306, - 57311, 57316, 57321, 57326, 57331, 57336, 57341, 57346, 57351, 57356, - 57361, 57366, 57371, 57376, 57382, 57387, 57393, 57402, 57407, 57415, - 57422, 57431, 57436, 57441, 57446, 57452, 0, 57459, 57464, 57469, 57474, - 57479, 57484, 57489, 57494, 57499, 57504, 57509, 57515, 57519, 57524, - 57529, 57534, 57539, 57544, 57549, 57554, 57559, 57564, 57569, 57574, - 57579, 57584, 57589, 57594, 57599, 57604, 57609, 57614, 57619, 57624, - 57629, 57635, 57640, 57646, 57655, 57660, 57668, 57675, 57684, 57689, - 57694, 57699, 57705, 0, 57712, 57720, 57728, 57737, 57744, 57752, 57758, - 57767, 57775, 57783, 57791, 57799, 57807, 57815, 57820, 57827, 57833, - 57840, 57848, 57855, 57862, 57870, 57876, 57882, 57889, 57896, 57906, - 57916, 57923, 57930, 57935, 57945, 57955, 57960, 57965, 57970, 57975, - 57980, 57985, 57990, 57995, 58000, 58005, 58010, 58015, 58020, 58025, - 58030, 58035, 58040, 58045, 58050, 58055, 58060, 58065, 58070, 58075, - 58080, 58085, 58090, 58095, 58100, 58105, 58109, 58113, 58118, 58123, - 58128, 58133, 58138, 58143, 58148, 58153, 58158, 58163, 58168, 58173, - 58178, 58183, 58188, 58193, 58198, 58203, 58210, 58217, 58224, 58231, - 58238, 58245, 58252, 58259, 58266, 58273, 58280, 58287, 58294, 58301, - 58306, 58311, 58318, 58325, 58332, 58339, 58346, 58353, 58360, 58367, - 58374, 58381, 58388, 58395, 58401, 58407, 58413, 58419, 58426, 58433, - 58440, 58447, 58454, 58461, 58468, 58475, 58482, 58489, 58497, 58505, - 58513, 58521, 58529, 58537, 58545, 58553, 58557, 58563, 58569, 58573, - 58579, 58585, 58591, 58598, 58605, 58612, 58619, 58624, 58630, 58636, - 58643, 0, 0, 0, 0, 0, 58650, 58658, 58667, 58676, 58684, 58690, 58695, - 58700, 58705, 58710, 58715, 58720, 58725, 58730, 58735, 58740, 58745, - 58750, 58755, 58760, 58765, 58770, 58775, 58780, 58785, 58790, 58795, - 58800, 58805, 58810, 58815, 58820, 58825, 58830, 58835, 58840, 58845, - 58850, 58855, 58860, 58865, 58870, 58875, 58880, 58885, 0, 58890, 0, 0, - 0, 0, 0, 58895, 0, 0, 58900, 58904, 58909, 58914, 58919, 58924, 58933, - 58938, 58943, 58948, 58953, 58958, 58963, 58968, 58973, 58980, 58985, - 58990, 58999, 59006, 59011, 59016, 59021, 59028, 59033, 59040, 59045, - 59050, 59057, 59064, 59069, 59074, 59079, 59086, 59093, 59098, 59103, - 59108, 59113, 59118, 59125, 59132, 59137, 59142, 59147, 59152, 59157, - 59162, 59167, 59172, 59177, 59182, 59187, 59194, 59199, 59204, 0, 0, 0, - 0, 0, 0, 0, 59209, 59216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 59221, 59226, 59230, 59234, 59238, 59242, 59246, 59250, 59254, 59258, - 59262, 59266, 59272, 59276, 59280, 59284, 59288, 59292, 59296, 59300, - 59304, 59308, 59312, 59316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59320, 59324, - 59328, 59332, 59336, 59340, 59344, 0, 59348, 59352, 59356, 59360, 59364, - 59368, 59372, 0, 59376, 59380, 59384, 59388, 59392, 59396, 59400, 0, - 59404, 59408, 59412, 59416, 59420, 59424, 59428, 0, 59432, 59436, 59440, - 59444, 59448, 59452, 59456, 0, 59460, 59464, 59468, 59472, 59476, 59480, - 59484, 0, 59488, 59492, 59496, 59500, 59504, 59508, 59512, 0, 59516, - 59520, 59524, 59528, 59532, 59536, 59540, 0, 59544, 59549, 59554, 59559, - 59564, 59569, 59574, 59578, 59583, 59588, 59593, 59597, 59602, 59607, - 59612, 59617, 59621, 59626, 59631, 59636, 59641, 59646, 59651, 59655, - 59660, 59665, 59672, 59677, 59682, 59688, 59695, 59702, 59711, 59718, - 59727, 59731, 59735, 59741, 59747, 59753, 59761, 59767, 59771, 59775, - 59779, 59785, 59791, 59795, 59797, 59801, 59807, 59809, 59813, 59816, - 59819, 59825, 59830, 59834, 59838, 59843, 59849, 59854, 59859, 59864, - 59869, 59876, 59883, 59888, 59893, 59898, 59903, 59908, 59913, 59917, - 59921, 59928, 59935, 59941, 59945, 59950, 59953, 59957, 59964, 59968, - 59972, 59976, 59980, 59986, 59992, 59996, 60002, 60006, 60010, 60016, - 60021, 60026, 60028, 60031, 60035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34080, 34088, 34096, 34104, + 34112, 34122, 34132, 34142, 0, 0, 0, 0, 0, 0, 0, 0, 34152, 34157, 34162, + 34167, 34172, 34181, 34192, 34201, 34212, 34218, 34231, 34237, 34244, + 34251, 34256, 34262, 34268, 34279, 34288, 34295, 34302, 34311, 34318, + 34327, 34337, 34347, 34354, 34361, 34368, 34378, 34383, 34391, 34397, + 34405, 34414, 34419, 34426, 34432, 34437, 0, 34442, 34448, 0, 0, 0, 0, 0, + 0, 34455, 34460, 34466, 34473, 34481, 34487, 34493, 34499, 34504, 34511, + 34517, 34523, 34529, 34537, 34543, 34551, 34556, 34562, 34568, 34575, + 34583, 34590, 34596, 34603, 34610, 34616, 34623, 34630, 34636, 34641, + 34647, 34655, 34664, 34670, 34676, 34682, 34688, 34696, 34700, 34706, + 34712, 34718, 34724, 34730, 34736, 34740, 34745, 34750, 34757, 34762, + 34766, 34772, 34777, 34782, 34786, 34791, 34796, 34800, 34805, 34810, + 34817, 34821, 34826, 34831, 34835, 34840, 34844, 34849, 34853, 34859, + 34864, 34871, 34876, 34881, 34885, 34890, 34895, 34902, 34907, 34913, + 34918, 34923, 34928, 34932, 34937, 34944, 34951, 34956, 34961, 34965, + 34971, 34978, 34983, 34988, 34993, 34999, 35004, 35010, 35015, 35021, + 35027, 35033, 35040, 35047, 35054, 35061, 35068, 35075, 35080, 35088, + 35097, 35106, 35115, 35124, 35133, 35142, 35154, 35163, 35172, 35181, + 35188, 35193, 35200, 35208, 35216, 35223, 35230, 35237, 35244, 35252, + 35261, 35270, 35279, 35288, 35297, 35306, 35315, 35324, 35333, 35342, + 35351, 35360, 35369, 35378, 35386, 35395, 35406, 35414, 35423, 35434, + 35443, 35452, 35461, 35470, 35478, 35487, 35494, 35499, 35507, 35512, + 35519, 35524, 35533, 35539, 35546, 35553, 35558, 35563, 35571, 35579, + 35588, 35597, 35602, 35609, 35620, 35628, 35637, 35643, 35649, 35654, + 35661, 35666, 35675, 35680, 35685, 35690, 35697, 35704, 35709, 35718, + 35726, 35731, 35736, 35743, 35750, 35754, 35758, 35761, 35764, 35767, + 35770, 35773, 35776, 35783, 35786, 35789, 35794, 35798, 35802, 35806, + 35810, 35814, 35823, 35829, 35835, 35841, 35849, 35857, 35863, 35869, + 35876, 35882, 35887, 35893, 35900, 35906, 35913, 35919, 35927, 35933, + 35940, 35946, 35952, 35958, 35964, 35970, 35976, 35987, 35997, 36003, + 36009, 36019, 36025, 36033, 36041, 36049, 0, 0, 0, 0, 0, 36054, 36058, + 36065, 36072, 36077, 36086, 36094, 36102, 36109, 36116, 36123, 36130, + 36138, 36146, 36156, 36166, 36174, 36182, 36190, 36198, 36207, 36216, + 36224, 36232, 36241, 36250, 36260, 36270, 36279, 36288, 36296, 36304, + 36312, 36320, 36330, 36340, 36348, 36356, 36364, 36372, 36380, 36388, + 36396, 36404, 36412, 36420, 36428, 36436, 36445, 36454, 36463, 36472, + 36482, 36492, 36499, 36506, 36514, 36522, 36531, 36540, 36548, 36556, + 36568, 36580, 36589, 36598, 36607, 36616, 36623, 36630, 36638, 36646, + 36654, 36662, 36670, 36678, 36686, 36694, 36703, 36712, 36721, 36730, + 36739, 36748, 36758, 36768, 36778, 36788, 36797, 36806, 36813, 36820, + 36828, 36836, 36844, 36852, 36860, 36868, 36880, 36892, 36901, 36910, + 36918, 36926, 36934, 36942, 36953, 36964, 36975, 36986, 36998, 37010, + 37018, 37026, 37034, 37042, 37051, 37060, 37069, 37078, 37086, 37094, + 37102, 37110, 37118, 37126, 37135, 37144, 37154, 37164, 37172, 37180, + 37188, 37196, 37204, 37212, 37219, 37226, 37234, 37242, 37250, 37258, + 37266, 37274, 37282, 37290, 37298, 37306, 37314, 37322, 37330, 37338, + 37346, 37354, 37363, 37372, 37381, 37389, 37398, 37407, 37416, 37425, + 37435, 37444, 37451, 37456, 37463, 37470, 37478, 37486, 37495, 37504, + 37514, 37524, 37535, 37546, 37556, 37566, 37576, 37586, 37595, 37604, + 37614, 37624, 37635, 37646, 37656, 37666, 37676, 37686, 37693, 37700, + 37708, 37716, 37723, 37730, 37739, 37748, 37758, 37768, 37779, 37790, + 37800, 37810, 37820, 37830, 37839, 37848, 37856, 37864, 37871, 37878, + 37886, 37894, 37903, 37912, 37922, 37932, 37943, 37954, 37964, 37974, + 37984, 37994, 38003, 38012, 38022, 38032, 38043, 38054, 38064, 38074, + 38084, 38094, 38101, 38108, 38116, 38124, 38133, 38142, 38152, 38162, + 38173, 38184, 38194, 38204, 38214, 38224, 38232, 38240, 38248, 38256, + 38265, 38274, 38282, 38290, 38297, 38304, 38311, 38318, 38326, 38334, + 38342, 38350, 38361, 38372, 38383, 38394, 38405, 38416, 38424, 38432, + 38443, 38454, 38465, 38476, 38487, 38498, 38506, 38514, 38525, 38536, + 38547, 0, 0, 38558, 38566, 38574, 38585, 38596, 38607, 0, 0, 38618, + 38626, 38634, 38645, 38656, 38667, 38678, 38689, 38700, 38708, 38716, + 38727, 38738, 38749, 38760, 38771, 38782, 38790, 38798, 38809, 38820, + 38831, 38842, 38853, 38864, 38872, 38880, 38891, 38902, 38913, 38924, + 38935, 38946, 38954, 38962, 38973, 38984, 38995, 0, 0, 39006, 39014, + 39022, 39033, 39044, 39055, 0, 0, 39066, 39074, 39082, 39093, 39104, + 39115, 39126, 39137, 0, 39148, 0, 39156, 0, 39167, 0, 39178, 39189, + 39197, 39205, 39216, 39227, 39238, 39249, 39260, 39271, 39279, 39287, + 39298, 39309, 39320, 39331, 39342, 39353, 39361, 39369, 39377, 39385, + 39393, 39401, 39409, 39417, 39425, 39433, 39441, 39449, 39457, 0, 0, + 39465, 39476, 39487, 39501, 39515, 39529, 39543, 39557, 39571, 39582, + 39593, 39607, 39621, 39635, 39649, 39663, 39677, 39688, 39699, 39713, + 39727, 39741, 39755, 39769, 39783, 39794, 39805, 39819, 39833, 39847, + 39861, 39875, 39889, 39900, 39911, 39925, 39939, 39953, 39967, 39981, + 39995, 40006, 40017, 40031, 40045, 40059, 40073, 40087, 40101, 40109, + 40117, 40128, 40136, 0, 40147, 40155, 40166, 40174, 40182, 40190, 40198, + 40206, 40209, 40212, 40215, 40218, 40224, 40235, 40243, 0, 40254, 40262, + 40273, 40281, 40289, 40297, 40305, 40313, 40319, 40325, 40331, 40339, + 40347, 40358, 0, 0, 40369, 40377, 40388, 40396, 40404, 40412, 0, 40420, + 40426, 40432, 40438, 40446, 40454, 40465, 40476, 40484, 40492, 40500, + 40511, 40519, 40527, 40535, 40543, 40551, 40557, 40563, 0, 0, 40566, + 40577, 40585, 0, 40596, 40604, 40615, 40623, 40631, 40639, 40647, 40655, + 40658, 0, 40661, 40665, 40669, 40673, 40677, 40681, 40685, 40689, 40693, + 40697, 40701, 40705, 40711, 40717, 40723, 40726, 40729, 40731, 40735, + 40739, 40743, 40747, 40750, 40754, 40758, 40764, 40770, 40777, 40784, + 40789, 40794, 40800, 40806, 40808, 40811, 40813, 40817, 40821, 40825, + 40829, 40833, 40837, 40841, 40845, 40849, 40855, 40859, 40863, 40869, + 40874, 40881, 40883, 40886, 40890, 40894, 40899, 40905, 40907, 40916, + 40925, 40928, 40932, 40934, 40936, 40938, 40941, 40947, 40949, 40953, + 40957, 40964, 40971, 40975, 40980, 40985, 40990, 40995, 40999, 41003, + 41006, 41010, 41014, 41021, 41026, 41030, 41034, 41039, 41043, 41047, + 41052, 41057, 41061, 41065, 41069, 41071, 41076, 41081, 41085, 41089, + 41093, 41097, 0, 41101, 41105, 41109, 41115, 41121, 41127, 41133, 41140, + 41147, 41152, 41157, 41161, 0, 0, 41167, 41170, 41173, 41176, 41180, + 41183, 41187, 41191, 41195, 41200, 41205, 41210, 41217, 41221, 41224, + 41227, 41230, 41233, 41236, 41239, 41243, 41246, 41250, 41254, 41258, + 41263, 41268, 0, 41273, 41279, 41285, 41291, 41298, 41305, 41312, 41319, + 41325, 41332, 41339, 41346, 41353, 0, 0, 0, 41360, 41363, 41366, 41369, + 41374, 41377, 41380, 41383, 41386, 41389, 41392, 41397, 41400, 41403, + 41406, 41409, 41412, 41417, 41420, 41423, 41426, 41429, 41432, 41437, + 41440, 41443, 41448, 41453, 41457, 41460, 41463, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 41466, 41471, 41476, 41483, 41491, 41496, + 41501, 41505, 41509, 41514, 41521, 41528, 41532, 41537, 41542, 41547, + 41552, 41559, 41564, 41569, 41574, 41583, 41590, 41597, 41601, 41606, + 41612, 41617, 41624, 41632, 41640, 41644, 41648, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 41652, 41656, 41664, 41668, 41672, 41677, 41681, + 41685, 41689, 41691, 41695, 41699, 41703, 41708, 41712, 41716, 41724, + 41727, 41731, 41734, 41737, 41743, 41747, 41750, 41756, 41760, 41764, + 41768, 41771, 41775, 41778, 41782, 41784, 41787, 41790, 41794, 41796, + 41800, 41803, 41806, 41811, 41816, 41823, 41826, 41829, 41833, 41838, + 41841, 41844, 41847, 41851, 41856, 41860, 41863, 41865, 41868, 41871, + 41874, 41878, 41883, 41886, 41890, 41894, 41898, 41902, 41907, 41913, + 41918, 41923, 41929, 41934, 41939, 41943, 41947, 41952, 41956, 41960, + 41963, 41965, 41970, 41976, 41983, 41990, 41997, 42004, 42011, 42018, + 42025, 42032, 42040, 42047, 42055, 42062, 42069, 42077, 42085, 42090, + 42095, 42100, 42105, 42110, 42115, 42120, 42126, 42131, 42137, 42143, + 42149, 42155, 42161, 42168, 42176, 42183, 42189, 42195, 42201, 42207, + 42213, 42219, 42226, 42232, 42239, 42246, 42253, 42260, 42267, 42275, + 42284, 42292, 42303, 42311, 42319, 42328, 42335, 42344, 42353, 42361, + 42370, 42378, 42382, 0, 0, 0, 0, 42386, 42388, 42390, 42392, 42394, + 42397, 42400, 42404, 42408, 42413, 42418, 42422, 42426, 42430, 42434, + 42439, 42444, 42449, 42454, 42459, 42464, 42469, 42474, 42479, 42484, + 42490, 42494, 42498, 42503, 42508, 42513, 42518, 42522, 42529, 42536, + 42543, 42550, 42557, 42564, 42571, 42578, 42586, 42598, 42604, 42610, + 42617, 42624, 42631, 42638, 42645, 42652, 42659, 42666, 42671, 42677, + 42682, 42687, 42692, 42697, 42702, 42709, 42716, 42721, 42727, 42732, + 42735, 42738, 42741, 42744, 42748, 42752, 42757, 42762, 42768, 42774, + 42778, 42782, 42786, 42790, 42795, 42800, 42804, 42808, 42812, 42816, + 42821, 42826, 42829, 42832, 42835, 42838, 42844, 42851, 42862, 42872, + 42876, 42884, 42891, 42899, 42908, 42912, 42918, 42924, 42928, 42933, + 42938, 42944, 42950, 42956, 42963, 42967, 42971, 42976, 42979, 42981, + 42985, 42989, 42997, 43001, 43003, 43005, 43009, 43017, 43022, 43028, + 43038, 43045, 43050, 43054, 43058, 43062, 43065, 43068, 43071, 43075, + 43079, 43083, 43087, 43091, 43094, 43098, 43102, 43105, 43107, 43110, + 43112, 43116, 43120, 43122, 43128, 43131, 43136, 43140, 43144, 43146, + 43148, 43150, 43153, 43157, 43161, 43165, 43169, 43173, 43179, 43185, + 43187, 43189, 43191, 43193, 43196, 43198, 43202, 43204, 43208, 43212, + 43218, 43222, 43226, 43230, 43234, 43238, 43244, 43248, 43258, 43268, + 43272, 43278, 43285, 43289, 43293, 43296, 43301, 43305, 43311, 43315, + 43328, 43337, 43341, 43345, 43351, 43355, 43358, 43360, 43363, 43367, + 43371, 43378, 43382, 43386, 43390, 43393, 43398, 43403, 43409, 43415, + 43420, 43425, 43433, 43441, 43445, 43449, 43451, 43456, 43460, 43464, + 43472, 43480, 43487, 43494, 43503, 43512, 43518, 43524, 43532, 43540, + 43542, 43544, 43550, 43556, 43563, 43570, 43576, 43582, 43586, 43590, + 43597, 43604, 43611, 43618, 43628, 43638, 43646, 43654, 43656, 43660, + 43664, 43669, 43674, 43682, 43690, 43693, 43696, 43699, 43702, 43705, + 43710, 43714, 43719, 43724, 43727, 43730, 43733, 43736, 43739, 43743, + 43746, 43749, 43752, 43755, 43757, 43759, 43761, 43763, 43771, 43779, + 43785, 43789, 43795, 43805, 43811, 43817, 43823, 43831, 43840, 43852, + 43856, 43860, 43862, 43868, 43870, 43872, 43874, 43876, 43882, 43885, + 43891, 43897, 43901, 43905, 43909, 43912, 43916, 43920, 43922, 43931, + 43940, 43945, 43950, 43956, 43962, 43968, 43971, 43974, 43977, 43980, + 43982, 43987, 43992, 43997, 44003, 44009, 44018, 44027, 44034, 44041, + 44048, 44055, 44065, 44075, 44085, 44095, 44105, 44115, 44124, 44133, + 44142, 44151, 44159, 44171, 44182, 44198, 44201, 44207, 44213, 44219, + 44227, 44242, 44258, 44264, 44270, 44277, 44283, 44292, 44299, 44313, + 44328, 44333, 44339, 44347, 44350, 44353, 44355, 44358, 44361, 44363, + 44365, 44369, 44372, 44375, 44378, 44381, 44386, 44391, 44396, 44401, + 44406, 44409, 44411, 44413, 44415, 44419, 44423, 44427, 44433, 44438, + 44440, 44442, 44447, 44452, 44457, 44462, 44467, 44472, 44474, 44476, + 44486, 44490, 44498, 44507, 44509, 44514, 44519, 44527, 44531, 44533, + 44537, 44539, 44543, 44547, 44551, 44553, 44555, 44557, 44564, 44573, + 44582, 44591, 44600, 44609, 44618, 44627, 44636, 44644, 44652, 44661, + 44670, 44679, 44688, 44696, 44704, 44713, 44722, 44731, 44741, 44750, + 44760, 44769, 44779, 44787, 44796, 44806, 44815, 44825, 44834, 44844, + 44852, 44861, 44870, 44879, 44888, 44897, 44906, 44916, 44925, 44934, + 44943, 44953, 44962, 44971, 44980, 44989, 44999, 45009, 45018, 45027, + 45035, 45044, 45051, 45060, 45069, 45080, 45089, 45099, 45109, 45116, + 45123, 45130, 45139, 45148, 45157, 45166, 45173, 45178, 45186, 45191, + 45194, 45201, 45204, 45209, 45214, 45217, 45220, 45228, 45231, 45236, + 45239, 45247, 45252, 45260, 45263, 45266, 45269, 45274, 45279, 45282, + 45285, 45293, 45296, 45303, 45310, 45314, 45318, 45323, 45328, 45334, + 45339, 45345, 45351, 45356, 45362, 45370, 45376, 45384, 45392, 45398, + 45406, 45414, 45422, 45430, 45436, 45444, 45452, 45460, 45464, 45470, + 45484, 45498, 45502, 45506, 45510, 45514, 45524, 45528, 45533, 45538, + 45544, 45550, 45556, 45562, 45572, 45582, 45590, 45601, 45612, 45620, + 45631, 45642, 45650, 45661, 45672, 45680, 45688, 45698, 45708, 45711, + 45714, 45717, 45722, 45726, 45732, 45739, 45746, 45754, 45761, 45765, + 45769, 45773, 45777, 45779, 45783, 45787, 45792, 45797, 45804, 45811, + 45814, 45821, 45823, 45825, 45829, 45833, 45838, 45844, 45850, 45856, + 45862, 45871, 45880, 45889, 45893, 45895, 45899, 45906, 45913, 45920, + 45927, 45934, 45937, 45942, 45948, 45951, 45956, 45961, 0, 45966, 45970, + 45977, 45984, 45991, 45998, 46002, 46006, 46010, 46014, 46020, 46026, + 46031, 46037, 46043, 46049, 46055, 46063, 46070, 46077, 46084, 46091, + 46096, 46102, 46111, 46115, 46122, 46126, 46130, 46136, 46142, 46148, + 46154, 46158, 46162, 46165, 46168, 46172, 46179, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46186, 46189, 46193, + 46197, 46203, 46209, 46215, 46223, 46230, 46234, 46242, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46247, 46250, 46253, 46256, + 46259, 46262, 46265, 46269, 46272, 46276, 46280, 46284, 46288, 46292, + 46296, 46300, 46304, 46308, 46312, 46316, 46320, 46323, 46326, 46329, + 46332, 46335, 46338, 46342, 46345, 46349, 46353, 46357, 46361, 46365, + 46369, 46373, 46377, 46381, 46385, 46389, 46393, 46399, 46405, 46411, + 46418, 46425, 46432, 46439, 46446, 46453, 46460, 46467, 46474, 46481, + 46488, 46495, 46502, 46509, 46516, 46523, 46530, 46535, 46541, 46547, + 46553, 46558, 46564, 46570, 46576, 46581, 46587, 46593, 46598, 46604, + 46610, 46615, 46621, 46627, 46632, 46638, 46644, 46649, 46655, 46661, + 46667, 46673, 46679, 46684, 46690, 46696, 46702, 46707, 46713, 46719, + 46725, 46730, 46736, 46742, 46747, 46753, 46759, 46764, 46770, 46776, + 46781, 46787, 46793, 46798, 46804, 46810, 46816, 46822, 46828, 46833, + 46839, 46845, 46851, 46856, 46862, 46868, 46874, 46879, 46885, 46891, + 46896, 46902, 46908, 46913, 46919, 46925, 46930, 46936, 46942, 46947, + 46953, 46959, 46965, 46971, 46977, 46981, 46986, 46991, 46996, 47001, + 47006, 47011, 47016, 47021, 47026, 47031, 47035, 47039, 47043, 47047, + 47051, 47055, 47060, 47064, 47069, 47074, 47079, 47084, 47089, 47094, + 47099, 47108, 47117, 47126, 47135, 47144, 47153, 47162, 47171, 47178, + 47186, 47194, 47201, 47208, 47216, 47224, 47231, 47238, 47246, 47254, + 47261, 47268, 47276, 47284, 47291, 47298, 47306, 47315, 47324, 47332, + 47341, 47350, 47357, 47364, 47372, 47381, 47390, 47398, 47407, 47416, + 47423, 47430, 47439, 47448, 47457, 47466, 47475, 47484, 47491, 47498, + 47507, 47516, 47525, 47534, 47543, 47552, 47559, 47566, 47575, 47584, + 47593, 47603, 47613, 47622, 47632, 47642, 47652, 47662, 47672, 47682, + 47691, 47700, 47707, 47715, 47723, 47731, 47739, 47744, 47749, 47758, + 47766, 47773, 47782, 47790, 47797, 47806, 47814, 47821, 47830, 47838, + 47845, 47854, 47862, 47869, 47878, 47886, 47893, 47903, 47912, 47919, + 47929, 47938, 47945, 47955, 47964, 47971, 47980, 47989, 47998, 48007, + 48021, 48035, 48042, 48047, 48052, 48057, 48062, 48067, 48072, 48077, + 48082, 48090, 48098, 48106, 48114, 48119, 48126, 48133, 48140, 48145, + 48153, 48160, 48168, 48172, 48179, 48185, 48192, 48196, 48202, 48208, + 48214, 48218, 48221, 48225, 48229, 48236, 48242, 48248, 48254, 48260, + 48274, 48284, 48298, 48312, 48318, 48328, 48342, 48345, 48348, 48355, + 48363, 48369, 48374, 48382, 48394, 48406, 48414, 48418, 48422, 48425, + 48428, 48432, 48436, 48439, 48442, 48447, 48452, 48458, 48464, 48469, + 48474, 48480, 48486, 48491, 48496, 48501, 48506, 48512, 48518, 48523, + 48528, 48534, 48540, 48545, 48550, 48553, 48556, 48565, 48567, 48569, + 48572, 48576, 48582, 48584, 48587, 48594, 48601, 48609, 48617, 48627, + 48641, 48646, 48651, 48655, 48660, 48668, 48676, 48685, 48694, 48703, + 48712, 48717, 48722, 48728, 48734, 48740, 48746, 48749, 48755, 48761, + 48771, 48781, 48789, 48797, 48806, 48815, 48819, 48827, 48835, 48843, + 48851, 48860, 48869, 48878, 48887, 48892, 48897, 48902, 48907, 48912, + 48918, 48924, 48929, 48935, 48937, 48939, 48941, 48943, 48946, 48949, + 48951, 48953, 48955, 48959, 48963, 48965, 48967, 48970, 48973, 48977, + 48983, 48989, 48991, 48998, 49002, 49007, 49012, 49014, 49024, 49030, + 49036, 49042, 49048, 49054, 49060, 49065, 49068, 49071, 49074, 49076, + 49078, 49082, 49086, 49091, 49096, 49101, 49104, 49108, 49113, 49116, + 49120, 49125, 49130, 49135, 49140, 49145, 49150, 49155, 49160, 49165, + 49170, 49175, 49180, 49186, 49192, 49198, 49200, 49203, 49205, 49208, + 49210, 49212, 49214, 49216, 49218, 49220, 49222, 49224, 49226, 49228, + 49230, 49232, 49234, 49236, 49238, 49240, 49242, 49247, 49252, 49257, + 49262, 49267, 49272, 49277, 49282, 49287, 49292, 49297, 49302, 49307, + 49312, 49317, 49322, 49327, 49332, 49337, 49342, 49346, 49350, 49354, + 49360, 49366, 49371, 49376, 49381, 49387, 49393, 49398, 49406, 49414, + 49422, 49430, 49438, 49446, 49454, 49462, 49468, 49473, 49478, 49483, + 49486, 49490, 49494, 49498, 49502, 49506, 49510, 49517, 49524, 49532, + 49540, 49545, 49550, 49557, 49564, 49571, 49578, 49581, 49584, 49589, + 49591, 49595, 49600, 49602, 49604, 49606, 49608, 49613, 49616, 49618, + 49623, 49630, 49637, 49640, 49644, 49649, 49654, 49662, 49668, 49674, + 49686, 49693, 49701, 49706, 49711, 49717, 49720, 49723, 49728, 49730, + 49734, 49736, 49738, 49740, 49742, 49744, 49746, 49751, 49753, 49755, + 49757, 49759, 49763, 49765, 49768, 49773, 49778, 49783, 49788, 49794, + 49800, 49802, 49805, 49812, 49819, 49826, 49833, 49837, 49841, 49843, + 49845, 49849, 49855, 49860, 49862, 49866, 49875, 49883, 49891, 49897, + 49903, 49908, 49914, 49919, 49922, 49936, 49939, 49944, 49949, 49955, + 49965, 49967, 49973, 49979, 49983, 49990, 49994, 49996, 49998, 50002, + 50008, 50013, 50019, 50021, 50027, 50029, 50035, 50037, 50039, 50044, + 50046, 50050, 50055, 50057, 50062, 50067, 50071, 50078, 50088, 50093, + 50099, 50102, 50108, 50111, 50116, 50121, 50125, 50127, 50129, 50133, + 50137, 50141, 50145, 50150, 50152, 50157, 50160, 50163, 50166, 50170, + 50174, 50179, 50183, 50188, 50193, 50197, 50202, 50208, 50211, 50217, + 50222, 50226, 50231, 50237, 50243, 50250, 50256, 50263, 50270, 50272, + 50279, 50283, 50289, 50295, 50300, 50306, 50310, 50315, 50318, 50323, + 50329, 50336, 50344, 50351, 50360, 50370, 50377, 50383, 50387, 50394, + 50399, 50408, 50411, 50414, 50423, 50433, 50440, 50442, 50448, 50453, + 50455, 50458, 50462, 50470, 50479, 50482, 50487, 50492, 50500, 50508, + 50516, 50524, 50530, 50536, 50542, 50550, 50555, 50558, 50562, 50565, + 50577, 50587, 50598, 50607, 50618, 50628, 50637, 50643, 50651, 50655, + 50663, 50667, 50675, 50682, 50689, 50698, 50707, 50717, 50727, 50737, + 50747, 50756, 50765, 50775, 50785, 50794, 50803, 50809, 50815, 50821, + 50827, 50833, 50839, 50846, 50852, 50859, 50866, 50872, 50878, 50884, + 50890, 50896, 50902, 50909, 50915, 50922, 50929, 50936, 50943, 50950, + 50957, 50964, 50971, 50979, 50986, 50994, 51002, 51007, 51010, 51014, + 51018, 51024, 51027, 51032, 51038, 51043, 51047, 51052, 51058, 51065, + 51068, 51075, 51082, 51086, 51094, 51102, 51107, 51113, 51118, 51123, + 51130, 51137, 51145, 51153, 51162, 51166, 51175, 51180, 51184, 51191, + 51195, 51201, 51209, 51214, 51221, 51225, 51230, 51234, 51239, 51243, + 51248, 51253, 51262, 51264, 51267, 51270, 51277, 51284, 51290, 51298, + 51304, 51311, 51316, 51319, 51324, 51329, 51334, 51342, 51346, 51353, + 51361, 51369, 51374, 51379, 51385, 51390, 51395, 51401, 51406, 51409, + 51413, 51417, 51424, 51434, 51439, 51448, 51457, 51463, 51469, 51474, + 51479, 51484, 51489, 51495, 51501, 51509, 51517, 51523, 51529, 51533, + 51537, 51544, 51551, 51557, 51560, 51563, 51567, 51571, 51575, 51580, + 51586, 51592, 51599, 51606, 51611, 51615, 51619, 51623, 51627, 51631, + 51635, 51639, 51643, 51647, 51651, 51655, 51659, 51663, 51667, 51671, + 51675, 51679, 51683, 51687, 51691, 51695, 51699, 51703, 51707, 51711, + 51715, 51719, 51723, 51727, 51731, 51735, 51739, 51743, 51747, 51751, + 51755, 51759, 51763, 51767, 51771, 51775, 51779, 51783, 51787, 51791, + 51795, 51799, 51803, 51807, 51811, 51815, 51819, 51823, 51827, 51831, + 51835, 51839, 51843, 51847, 51851, 51855, 51859, 51863, 51867, 51871, + 51875, 51879, 51883, 51887, 51891, 51895, 51899, 51903, 51907, 51911, + 51915, 51919, 51923, 51927, 51931, 51935, 51939, 51943, 51947, 51951, + 51955, 51959, 51963, 51967, 51971, 51975, 51979, 51983, 51987, 51991, + 51995, 51999, 52003, 52007, 52011, 52015, 52019, 52023, 52027, 52031, + 52035, 52039, 52043, 52047, 52051, 52055, 52059, 52063, 52067, 52071, + 52075, 52079, 52083, 52087, 52091, 52095, 52099, 52103, 52107, 52111, + 52115, 52119, 52123, 52127, 52131, 52135, 52139, 52143, 52147, 52151, + 52155, 52159, 52163, 52167, 52171, 52175, 52179, 52183, 52187, 52191, + 52195, 52199, 52203, 52207, 52211, 52215, 52219, 52223, 52227, 52231, + 52235, 52239, 52243, 52247, 52251, 52255, 52259, 52263, 52267, 52271, + 52275, 52279, 52283, 52287, 52291, 52295, 52299, 52303, 52307, 52311, + 52315, 52319, 52323, 52327, 52331, 52335, 52339, 52343, 52347, 52351, + 52355, 52359, 52363, 52367, 52371, 52375, 52379, 52383, 52387, 52391, + 52395, 52399, 52403, 52407, 52411, 52415, 52419, 52423, 52427, 52431, + 52435, 52439, 52443, 52447, 52451, 52455, 52459, 52463, 52467, 52471, + 52475, 52479, 52483, 52487, 52491, 52495, 52499, 52503, 52507, 52511, + 52515, 52519, 52523, 52527, 52531, 52535, 52539, 52543, 52547, 52551, + 52555, 52559, 52563, 52567, 52571, 52575, 52579, 52583, 52587, 52591, + 52595, 52599, 52603, 52607, 52611, 52615, 52619, 52623, 52627, 52631, + 52635, 52642, 52650, 52656, 52662, 52669, 52676, 52682, 52688, 52694, + 52700, 52704, 52708, 52713, 52718, 52724, 52730, 52738, 52745, 52750, + 52755, 52763, 52772, 52779, 52789, 52800, 52803, 52806, 52810, 52814, + 52821, 52828, 52839, 52850, 52859, 52868, 52874, 52880, 52887, 52894, + 52903, 52913, 52924, 52934, 52944, 52954, 52965, 52976, 52986, 52997, + 53007, 53017, 53026, 53036, 53046, 53056, 53066, 53073, 53080, 53087, + 53094, 53104, 53114, 53122, 53130, 53137, 53144, 53151, 53158, 53165, + 53170, 53175, 53181, 53189, 53198, 53206, 53214, 53222, 53230, 53238, + 53246, 53254, 53262, 53271, 53280, 53289, 53298, 53307, 53316, 53325, + 53334, 53343, 53352, 53361, 53370, 53379, 53388, 53397, 53406, 53420, + 53435, 53449, 53464, 53478, 53492, 53506, 53520, 53530, 53541, 53551, + 53562, 53577, 53592, 53600, 53606, 53613, 53620, 53627, 53634, 53639, + 53645, 53650, 53655, 53661, 53666, 53671, 53676, 53681, 53686, 53693, + 53699, 53707, 53712, 53717, 53721, 53725, 53733, 53741, 53749, 53757, + 53764, 53771, 53784, 53797, 53810, 53823, 53831, 53839, 53845, 53851, + 53858, 53865, 53872, 53879, 53883, 53888, 53896, 53904, 53912, 53919, + 53923, 53931, 53939, 53943, 53947, 53952, 53959, 53967, 53975, 53994, + 54013, 54032, 54051, 54070, 54089, 54108, 54127, 54133, 54140, 54149, + 54157, 54165, 54171, 54174, 54177, 54182, 54185, 54205, 54212, 54218, + 54224, 54228, 54231, 54234, 54237, 54249, 54263, 54270, 54277, 54280, + 54284, 54287, 54292, 54297, 54302, 54308, 54317, 54324, 54331, 54339, + 54346, 54353, 54356, 54362, 54368, 54371, 54374, 54379, 54384, 54390, + 54396, 54400, 54405, 54412, 54416, 54422, 54426, 54430, 54438, 54450, + 54459, 54463, 54465, 54474, 54483, 54489, 54492, 54498, 54504, 54509, + 54514, 54519, 54524, 54529, 54534, 54536, 54542, 54547, 54555, 54559, + 54565, 54568, 54572, 54579, 54586, 54588, 54590, 54596, 54602, 54608, + 54617, 54626, 54633, 54640, 54646, 54653, 54658, 54663, 54668, 54674, + 54680, 54685, 54692, 54696, 54700, 54713, 54726, 54738, 54747, 54753, + 54760, 54765, 54770, 54775, 54780, 54785, 54787, 54794, 54802, 54810, + 54818, 54825, 54833, 54839, 54844, 54850, 54856, 54862, 54869, 54875, + 54883, 54891, 54899, 54907, 54915, 54921, 54927, 54936, 54940, 54949, + 54958, 54967, 54975, 54979, 54985, 54992, 54999, 55003, 55009, 55017, + 55023, 55028, 55034, 55039, 55044, 55051, 55058, 55063, 55068, 55076, + 55084, 55094, 55104, 55111, 55118, 55122, 55126, 55138, 55144, 55151, + 55156, 55161, 55168, 55175, 55181, 55187, 55197, 55204, 55212, 55220, + 55229, 55236, 55242, 55249, 55255, 55263, 55271, 55279, 55287, 55293, + 55298, 55308, 55319, 55326, 55335, 55341, 55346, 55351, 55361, 55368, + 55374, 55380, 55388, 55393, 55400, 55407, 55418, 55425, 55432, 55439, + 55446, 55453, 55461, 55469, 55482, 55495, 55507, 55519, 55533, 55547, + 55553, 55559, 55568, 55577, 55584, 55591, 55600, 55609, 55618, 55627, + 55635, 55643, 55653, 55663, 55677, 55691, 55700, 55709, 55722, 55735, + 55744, 55753, 55764, 55775, 55781, 55787, 55796, 55805, 55810, 55815, + 55823, 55829, 55835, 55843, 55851, 55864, 55877, 55881, 55885, 55893, + 55901, 55908, 55916, 55924, 55933, 55942, 55948, 55954, 55961, 55968, + 55975, 55982, 55991, 56000, 56003, 56006, 56011, 56016, 56022, 56028, + 56035, 56042, 56053, 56064, 56071, 56078, 56086, 56094, 56102, 56110, + 56118, 56126, 56132, 56138, 56142, 56146, 56154, 56162, 56167, 56172, + 56177, 56182, 56188, 56202, 56209, 56216, 56220, 56222, 56224, 56229, + 56234, 56239, 56244, 56252, 56259, 56266, 56274, 56286, 56294, 56302, + 56313, 56317, 56321, 56327, 56335, 56348, 56355, 56362, 56369, 56375, + 56382, 56391, 56400, 56406, 56412, 56418, 56428, 56438, 56446, 56455, + 56460, 56463, 56468, 56473, 56478, 56484, 56490, 56494, 56497, 56500, + 56503, 56508, 56513, 56519, 56525, 56529, 56533, 56540, 56547, 56554, + 56561, 56568, 56575, 56585, 56595, 56602, 56609, 56617, 56625, 56629, + 56634, 56639, 56645, 56651, 56654, 56657, 56660, 56663, 56668, 56673, + 56678, 56683, 56688, 56693, 56697, 56701, 56705, 56710, 56715, 56719, + 56723, 56729, 56733, 56739, 56744, 56751, 56759, 56766, 56774, 56781, + 56789, 56798, 56805, 56815, 56826, 56832, 56841, 56847, 56856, 56865, + 56871, 56877, 56881, 56885, 56894, 56903, 56910, 56917, 56926, 56935, + 56941, 56947, 56954, 56959, 56963, 56967, 56972, 56977, 56982, 56990, + 56998, 57001, 57005, 57014, 57024, 57033, 57043, 57054, 57067, 57071, + 57075, 57079, 57083, 57088, 57093, 57099, 57105, 57112, 57119, 57125, + 57131, 57137, 57143, 57151, 57159, 57166, 57173, 57180, 0, 0, 57187, + 57196, 57205, 57215, 57225, 57234, 57243, 57252, 57261, 57267, 57272, + 57281, 57291, 57300, 57310, 57317, 57324, 57331, 57338, 57343, 57348, + 57353, 57358, 57366, 57375, 57383, 57392, 57396, 57400, 57404, 57408, + 57418, 0, 0, 57421, 57430, 57439, 57448, 57457, 57463, 57469, 57475, + 57481, 57491, 57501, 57511, 57521, 57531, 57541, 57551, 57561, 57568, + 57575, 57582, 57589, 57596, 57603, 57610, 57617, 57623, 57629, 57635, + 57641, 57647, 57653, 57659, 57665, 57676, 0, 0, 0, 57686, 57693, 57696, + 57700, 57704, 57709, 57714, 57719, 57722, 57731, 57740, 57749, 0, 57758, + 57764, 57770, 57778, 57788, 57795, 57804, 57809, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57812, 57821, + 57830, 57839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57848, + 57853, 57858, 57863, 57868, 57873, 57878, 57883, 57888, 57893, 57898, + 57904, 57908, 57913, 57918, 57923, 57928, 57933, 57938, 57943, 57948, + 57953, 57958, 57963, 57968, 57973, 57978, 57983, 57988, 57993, 57998, + 58003, 58008, 58013, 58018, 58024, 58029, 58035, 58044, 58049, 58057, + 58064, 58073, 58078, 58083, 58088, 58094, 0, 58101, 58106, 58111, 58116, + 58121, 58126, 58131, 58136, 58141, 58146, 58151, 58157, 58161, 58166, + 58171, 58176, 58181, 58186, 58191, 58196, 58201, 58206, 58211, 58216, + 58221, 58226, 58231, 58236, 58241, 58246, 58251, 58256, 58261, 58266, + 58271, 58277, 58282, 58288, 58297, 58302, 58310, 58317, 58326, 58331, + 58336, 58341, 58347, 0, 58354, 58362, 58370, 58379, 58386, 58394, 58400, + 58409, 58417, 58425, 58433, 58441, 58449, 58457, 58462, 58469, 58475, + 58482, 58490, 58497, 58504, 58512, 58518, 58524, 58531, 58538, 58548, + 58558, 58565, 58572, 58577, 58587, 58597, 58602, 58607, 58612, 58617, + 58622, 58627, 58632, 58637, 58642, 58647, 58652, 58657, 58662, 58667, + 58672, 58677, 58682, 58687, 58692, 58697, 58702, 58707, 58712, 58717, + 58722, 58727, 58732, 58737, 58742, 58747, 58751, 58755, 58760, 58765, + 58770, 58775, 58780, 58785, 58790, 58795, 58800, 58805, 58810, 58815, + 58820, 58825, 58830, 58835, 58840, 58845, 58852, 58859, 58866, 58873, + 58880, 58887, 58894, 58901, 58908, 58915, 58922, 58929, 58936, 58943, + 58948, 58953, 58960, 58967, 58974, 58981, 58988, 58995, 59002, 59009, + 59016, 59023, 59030, 59037, 59043, 59049, 59055, 59061, 59068, 59075, + 59082, 59089, 59096, 59103, 59110, 59117, 59124, 59131, 59139, 59147, + 59155, 59163, 59171, 59179, 59187, 59195, 59199, 59205, 59211, 59215, + 59221, 59227, 59233, 59240, 59247, 59254, 59261, 59266, 59272, 59278, + 59285, 0, 0, 0, 0, 0, 59292, 59300, 59309, 59318, 59326, 59332, 59337, + 59342, 59347, 59352, 59357, 59362, 59367, 59372, 59377, 59382, 59387, + 59392, 59397, 59402, 59407, 59412, 59417, 59422, 59427, 59432, 59437, + 59442, 59447, 59452, 59457, 59462, 59467, 59472, 59477, 59482, 59487, + 59492, 59497, 59502, 59507, 59512, 59517, 59522, 59527, 0, 59532, 0, 0, + 0, 0, 0, 59537, 0, 0, 59542, 59546, 59551, 59556, 59561, 59566, 59575, + 59580, 59585, 59590, 59595, 59600, 59605, 59610, 59615, 59622, 59627, + 59632, 59641, 59648, 59653, 59658, 59663, 59670, 59675, 59682, 59687, + 59692, 59699, 59706, 59711, 59716, 59721, 59728, 59735, 59740, 59745, + 59750, 59755, 59760, 59767, 59774, 59779, 59784, 59789, 59794, 59799, + 59804, 59809, 59814, 59819, 59824, 59829, 59836, 59841, 59846, 0, 0, 0, + 0, 0, 0, 0, 59851, 59858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 59863, 59868, 59872, 59876, 59880, 59884, 59888, 59892, 59896, 59900, + 59904, 59908, 59914, 59918, 59922, 59926, 59930, 59934, 59938, 59942, + 59946, 59950, 59954, 59958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59962, 59966, + 59970, 59974, 59978, 59982, 59986, 0, 59990, 59994, 59998, 60002, 60006, + 60010, 60014, 0, 60018, 60022, 60026, 60030, 60034, 60038, 60042, 0, + 60046, 60050, 60054, 60058, 60062, 60066, 60070, 0, 60074, 60078, 60082, + 60086, 60090, 60094, 60098, 0, 60102, 60106, 60110, 60114, 60118, 60122, + 60126, 0, 60130, 60134, 60138, 60142, 60146, 60150, 60154, 0, 60158, + 60162, 60166, 60170, 60174, 60178, 60182, 0, 60186, 60191, 60196, 60201, + 60206, 60211, 60216, 60220, 60225, 60230, 60235, 60239, 60244, 60249, + 60254, 60259, 60263, 60268, 60273, 60278, 60283, 60288, 60293, 60297, + 60302, 60307, 60314, 60319, 60324, 60330, 60337, 60344, 60353, 60360, + 60369, 60373, 60377, 60383, 60389, 60395, 60403, 60409, 60413, 60417, + 60421, 60427, 60433, 60437, 60439, 60443, 60449, 60451, 60455, 60458, + 60461, 60467, 60472, 60476, 60480, 60485, 60491, 60496, 60501, 60506, + 60511, 60518, 60525, 60530, 60535, 60540, 60545, 60550, 60555, 60559, + 60563, 60570, 60577, 60583, 60587, 60592, 60595, 60599, 60606, 60610, + 60614, 60618, 60622, 60628, 60634, 60638, 60644, 60648, 60652, 60658, + 60663, 60668, 60670, 60673, 60677, 60683, 60689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 60041, 60045, 60049, 60054, 60059, 60064, 60068, 60072, 60076, 60081, - 60086, 60090, 60094, 60098, 60102, 60107, 60112, 60117, 60122, 60126, - 60130, 60135, 60140, 60145, 60150, 60154, 0, 60158, 60162, 60166, 60170, - 60174, 60178, 60182, 60187, 60192, 60196, 60201, 60206, 60215, 60219, - 60223, 60227, 60234, 60238, 60243, 60248, 60252, 60256, 60262, 60267, - 60272, 60277, 60282, 60286, 60290, 60294, 60298, 60302, 60307, 60312, - 60316, 60320, 60325, 60330, 60335, 60339, 60343, 60348, 60353, 60359, - 60365, 60369, 60375, 60381, 60385, 60391, 60397, 60402, 60407, 60411, - 60417, 60421, 60425, 60431, 60437, 60442, 60447, 60451, 60455, 60463, - 60469, 60475, 60481, 60486, 60491, 60496, 60502, 60506, 60512, 60516, - 60520, 60526, 60532, 60538, 60544, 60550, 60556, 60562, 60568, 60574, - 60580, 60586, 60592, 60596, 60602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 60608, 60611, 60615, 60619, 60623, 60627, 60630, 60633, 60637, 60641, - 60645, 60649, 60652, 60657, 60661, 60665, 60669, 60674, 60678, 60682, - 60686, 60690, 60696, 60702, 60706, 60710, 60714, 60718, 60722, 60726, - 60730, 60734, 60738, 60742, 60746, 60752, 60756, 60760, 60764, 60768, - 60772, 60776, 60780, 60784, 60788, 60792, 60796, 60800, 60804, 60808, - 60812, 60816, 60822, 60828, 60833, 60838, 60842, 60846, 60850, 60854, - 60858, 60862, 60866, 60870, 60874, 60878, 60882, 60886, 60890, 60894, - 60898, 60902, 60906, 60910, 60914, 60918, 60922, 60926, 60930, 60934, - 60940, 60944, 60948, 60952, 60956, 60960, 60964, 60968, 60972, 60977, - 60984, 60988, 60992, 60996, 61000, 61004, 61008, 61012, 61016, 61020, - 61024, 61028, 61032, 61039, 61043, 61049, 61053, 61057, 61061, 61065, - 61069, 61072, 61076, 61080, 61084, 61088, 61092, 61096, 61100, 61104, - 61108, 61112, 61116, 61120, 61124, 61128, 61132, 61136, 61140, 61144, - 61148, 61152, 61156, 61160, 61164, 61168, 61172, 61176, 61180, 61184, - 61188, 61192, 61196, 61200, 61206, 61210, 61214, 61218, 61222, 61226, - 61230, 61234, 61238, 61242, 61246, 61250, 61254, 61258, 61262, 61266, - 61270, 61274, 61278, 61282, 61286, 61290, 61294, 61298, 61302, 61306, - 61310, 61314, 61322, 61326, 61330, 61334, 61338, 61342, 61348, 61352, - 61356, 61360, 61364, 61368, 61372, 61376, 61380, 61384, 61388, 61392, - 61396, 61400, 61406, 61410, 61414, 61418, 61422, 61426, 61430, 61434, - 61438, 61442, 61446, 61450, 61454, 61458, 61462, 61466, 61470, 61474, - 61478, 61482, 61486, 61490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61494, 61503, 61511, 61522, 61532, - 61540, 61549, 61558, 61568, 61580, 61592, 61604, 0, 0, 0, 0, 61610, - 61613, 61616, 61621, 61624, 61631, 61635, 61639, 61643, 61647, 61651, - 61656, 61661, 61665, 61669, 61674, 61679, 61684, 61689, 61692, 61695, - 61701, 61707, 61712, 61717, 61724, 61731, 61735, 61739, 61743, 61751, - 61757, 61764, 61769, 61774, 61779, 61784, 61789, 61794, 61799, 61805, - 61810, 61816, 61821, 61826, 61831, 61836, 61842, 61847, 61851, 61857, - 61868, 61878, 61893, 61903, 61907, 61917, 61923, 61929, 61935, 61940, - 61943, 61948, 61952, 0, 61958, 61962, 61965, 61969, 61972, 61976, 61979, - 61983, 61986, 61990, 61993, 61996, 62000, 62004, 62008, 62012, 62016, - 62020, 62024, 62028, 62032, 62036, 62040, 62044, 62048, 62052, 62056, - 62060, 62064, 62068, 62072, 62076, 62080, 62084, 62088, 62093, 62097, - 62101, 62105, 62109, 62112, 62116, 62120, 62124, 62128, 62132, 62136, - 62139, 62143, 62146, 62150, 62154, 62158, 62162, 62166, 62170, 62174, - 62178, 62182, 62186, 62190, 62194, 62197, 62201, 62205, 62209, 62213, - 62217, 62220, 62225, 62229, 62234, 62238, 62242, 62246, 62250, 62254, - 62258, 62263, 62267, 62271, 62275, 62279, 62283, 62287, 62291, 0, 0, - 62296, 62304, 62312, 62319, 62326, 62330, 62336, 62341, 62346, 62350, - 62353, 62357, 62360, 62364, 62367, 62371, 62374, 62378, 62381, 62384, - 62388, 62392, 62396, 62400, 62404, 62408, 62412, 62416, 62420, 62424, - 62428, 62432, 62436, 62440, 62444, 62448, 62452, 62456, 62460, 62464, - 62468, 62472, 62476, 62481, 62485, 62489, 62493, 62497, 62500, 62504, - 62508, 62512, 62516, 62520, 62524, 62527, 62531, 62534, 62538, 62542, - 62546, 62550, 62554, 62558, 62562, 62566, 62570, 62574, 62578, 62582, - 62585, 62589, 62593, 62597, 62601, 62605, 62608, 62613, 62617, 62622, - 62626, 62630, 62634, 62638, 62642, 62646, 62651, 62655, 62659, 62663, - 62667, 62671, 62675, 62679, 62684, 62688, 62692, 62696, 62700, 62704, - 62711, 62715, 62721, 0, 0, 0, 0, 0, 62726, 62731, 62736, 62741, 62746, - 62751, 62756, 62761, 62765, 62770, 62775, 62780, 62785, 62790, 62795, - 62800, 62805, 62810, 62814, 62819, 62824, 62828, 62832, 62836, 62840, - 62845, 62850, 62855, 62860, 62865, 62870, 62875, 62880, 62885, 62890, - 62894, 62898, 62903, 62908, 62913, 62918, 0, 0, 0, 62923, 62927, 62931, - 62935, 62939, 62943, 62947, 62951, 62955, 62959, 62963, 62967, 62971, - 62975, 62979, 62983, 62987, 62991, 62995, 62999, 63003, 63007, 63011, - 63015, 63019, 63023, 63027, 63031, 63035, 63039, 63043, 63046, 63050, - 63053, 63057, 63061, 63064, 63068, 63072, 63075, 63079, 63083, 63087, - 63091, 63094, 63098, 63102, 63106, 63110, 63114, 63118, 63121, 63124, - 63128, 63132, 63136, 63140, 63144, 63148, 63152, 63156, 63160, 63164, - 63168, 63172, 63176, 63180, 63184, 63188, 63192, 63196, 63200, 63204, - 63208, 63212, 63216, 63220, 63224, 63228, 63232, 63236, 63240, 63244, - 63248, 63252, 63256, 63260, 63264, 63268, 63272, 63276, 63280, 63284, - 63288, 0, 63292, 63298, 63304, 63309, 63314, 63319, 63325, 63331, 63336, - 63342, 63348, 63354, 63360, 63366, 63372, 63378, 63384, 63389, 63394, - 63399, 63404, 63409, 63414, 63419, 63424, 63429, 63434, 63439, 63444, - 63449, 63454, 63459, 63464, 63469, 63474, 63479, 63484, 63490, 63496, - 63502, 63508, 63513, 63518, 0, 0, 0, 0, 0, 63523, 63528, 63533, 63538, - 63543, 63548, 63553, 63558, 63563, 63568, 63573, 63578, 63583, 63588, - 63593, 63598, 63603, 63608, 63612, 63617, 63622, 63627, 63632, 63637, - 63642, 63647, 63652, 63657, 63662, 63667, 63672, 63677, 63682, 63687, - 63692, 63697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63702, 63707, 63712, - 63717, 63721, 63726, 63730, 63735, 63740, 63745, 63750, 63755, 63760, - 63765, 63770, 63775, 63780, 63784, 63788, 63792, 63796, 63800, 63804, - 63808, 63812, 63816, 63820, 63824, 63828, 63832, 63836, 63841, 63846, - 63851, 63856, 63861, 63866, 63871, 63876, 63881, 63886, 63891, 63896, - 63901, 63906, 63911, 63917, 0, 63924, 63927, 63930, 63933, 63936, 63939, - 63942, 63946, 63949, 63953, 63957, 63961, 63965, 63969, 63973, 63977, - 63981, 63985, 63989, 63993, 63997, 64001, 64005, 64009, 64013, 64017, - 64021, 64025, 64029, 64033, 64037, 64041, 64045, 64049, 64053, 64057, - 64061, 64065, 64069, 64073, 64077, 64086, 64095, 64104, 64113, 64122, - 64131, 64140, 64149, 64152, 64157, 64162, 64167, 64172, 64177, 64182, - 64188, 64193, 64199, 64203, 64208, 64213, 64218, 64223, 64228, 64232, - 64236, 64240, 64244, 64248, 64252, 64256, 64260, 64264, 64268, 64272, - 64276, 64280, 64284, 64289, 64294, 64299, 64304, 64309, 64314, 64319, - 64324, 64329, 64334, 64339, 64344, 64349, 64354, 64360, 64366, 64371, - 64376, 64379, 64382, 64385, 64388, 64391, 64394, 64398, 64401, 64405, - 64409, 64413, 64417, 64421, 64425, 64429, 64433, 64437, 64441, 64445, - 64449, 64453, 64457, 64461, 64465, 64469, 64473, 64477, 64481, 64485, - 64489, 64493, 64497, 64501, 64505, 64509, 64513, 64517, 64521, 64525, - 64529, 64533, 64537, 64541, 64545, 64549, 64553, 64557, 64561, 64565, - 64570, 64576, 64581, 64587, 64591, 64596, 64601, 64606, 64611, 64616, - 64621, 64627, 64632, 64638, 64642, 64649, 64656, 64663, 64670, 64677, - 64684, 64691, 64698, 64705, 64712, 64719, 64726, 64729, 64732, 64735, - 64740, 64743, 64746, 64749, 64752, 64755, 64758, 64762, 64766, 64770, - 64774, 64778, 64782, 64786, 64790, 64794, 64798, 64802, 64806, 64810, - 64813, 64817, 64821, 64825, 64829, 64833, 64836, 64840, 64844, 64848, - 64852, 64855, 64859, 64863, 64867, 64871, 64874, 64878, 64882, 64886, - 64890, 64894, 64898, 64902, 64906, 64910, 64914, 0, 64918, 64921, 64924, - 64927, 64930, 64933, 64936, 64939, 64942, 64945, 64948, 64951, 64954, - 64957, 64960, 64963, 64966, 64969, 64972, 64975, 64978, 64981, 64984, - 64987, 64990, 64993, 64996, 64999, 65002, 65005, 65008, 65011, 65014, - 65017, 65020, 65023, 65026, 65029, 65032, 65035, 65038, 65041, 65044, - 65047, 65050, 65053, 65056, 65059, 65062, 65065, 65068, 65071, 65074, - 65077, 65080, 65083, 65086, 65089, 65092, 65095, 65098, 65101, 65104, - 65107, 65110, 65113, 65116, 65119, 65122, 65125, 65128, 65131, 65134, - 65137, 65140, 65143, 65146, 65149, 65152, 65155, 65158, 65161, 65164, - 65167, 65170, 65173, 65176, 65179, 65182, 65191, 65199, 65207, 65215, - 65223, 65231, 65239, 65248, 65256, 65265, 65274, 65283, 65292, 65301, - 65310, 65319, 65328, 65337, 65346, 65355, 65364, 65373, 65382, 65391, - 65400, 65403, 65406, 65409, 65411, 65414, 65417, 65420, 65425, 65430, - 65433, 65440, 65447, 65454, 65461, 65464, 65469, 65472, 65476, 65478, - 65480, 65483, 65486, 65489, 65492, 65495, 65498, 65501, 65506, 65511, - 65514, 65517, 65520, 65523, 65526, 65529, 65532, 65536, 65539, 65542, - 65545, 65548, 65551, 65556, 65559, 65562, 65565, 65570, 65575, 65580, - 65585, 65590, 65595, 65600, 65605, 65610, 65618, 65620, 65623, 65626, - 65629, 65632, 65637, 65645, 65648, 65651, 65655, 65658, 65661, 65664, - 65669, 65672, 65675, 65680, 65683, 65686, 65691, 65694, 65697, 65702, - 65707, 65712, 65715, 65718, 65721, 65724, 65730, 65733, 65736, 65739, - 65741, 65744, 65747, 65750, 65755, 65758, 65761, 65764, 65767, 65770, - 65775, 65778, 65781, 65784, 65787, 65790, 65793, 65796, 65799, 65802, - 65808, 65813, 65821, 65829, 65837, 65845, 65853, 65861, 65870, 65878, - 65887, 65896, 65905, 65914, 65923, 65932, 65941, 65950, 65959, 65968, - 65977, 65986, 65995, 66004, 66013, 66022, 66031, 66040, 66049, 66058, - 66067, 66076, 66085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 60693, 60697, 60701, 60706, 60711, 60716, 60720, 60724, 60728, + 60733, 60738, 60742, 60746, 60750, 60754, 60759, 60764, 60769, 60774, + 60778, 60782, 60787, 60792, 60797, 60802, 60806, 0, 60810, 60814, 60818, + 60822, 60826, 60830, 60834, 60839, 60844, 60848, 60853, 60858, 60867, + 60871, 60875, 60879, 60886, 60890, 60895, 60900, 60904, 60908, 60914, + 60919, 60924, 60929, 60934, 60938, 60942, 60946, 60950, 60954, 60959, + 60964, 60968, 60972, 60977, 60982, 60987, 60991, 60995, 61000, 61005, + 61011, 61017, 61021, 61027, 61033, 61037, 61043, 61049, 61054, 61059, + 61063, 61069, 61073, 61077, 61083, 61089, 61094, 61099, 61103, 61107, + 61115, 61121, 61127, 61133, 61138, 61143, 61148, 61154, 61158, 61164, + 61168, 61172, 61178, 61184, 61190, 61196, 61202, 61208, 61214, 61220, + 61226, 61232, 61238, 61244, 61248, 61254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 61260, 61263, 61267, 61271, 61275, 61279, 61282, 61285, 61289, + 61293, 61297, 61301, 61304, 61309, 61313, 61317, 61321, 61326, 61330, + 61334, 61338, 61342, 61348, 61354, 61358, 61362, 61366, 61370, 61374, + 61378, 61382, 61386, 61390, 61394, 61398, 61404, 61408, 61412, 61416, + 61420, 61424, 61428, 61432, 61436, 61440, 61444, 61448, 61452, 61456, + 61460, 61464, 61468, 61474, 61480, 61485, 61490, 61494, 61498, 61502, + 61506, 61510, 61514, 61518, 61522, 61526, 61530, 61534, 61538, 61542, + 61546, 61550, 61554, 61558, 61562, 61566, 61570, 61574, 61578, 61582, + 61586, 61592, 61596, 61600, 61604, 61608, 61612, 61616, 61620, 61624, + 61629, 61636, 61640, 61644, 61648, 61652, 61656, 61660, 61664, 61668, + 61672, 61676, 61680, 61684, 61691, 61695, 61701, 61705, 61709, 61713, + 61717, 61721, 61724, 61728, 61732, 61736, 61740, 61744, 61748, 61752, + 61756, 61760, 61764, 61768, 61772, 61776, 61780, 61784, 61788, 61792, + 61796, 61800, 61804, 61808, 61812, 61816, 61820, 61824, 61828, 61832, + 61836, 61840, 61844, 61848, 61852, 61858, 61862, 61866, 61870, 61874, + 61878, 61882, 61886, 61890, 61894, 61898, 61902, 61906, 61910, 61914, + 61918, 61922, 61926, 61930, 61934, 61938, 61942, 61946, 61950, 61954, + 61958, 61962, 61966, 61974, 61978, 61982, 61986, 61990, 61994, 62000, + 62004, 62008, 62012, 62016, 62020, 62024, 62028, 62032, 62036, 62040, + 62044, 62048, 62052, 62058, 62062, 62066, 62070, 62074, 62078, 62082, + 62086, 62090, 62094, 62098, 62102, 62106, 62110, 62114, 62118, 62122, + 62126, 62130, 62134, 62138, 62142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62146, 62155, 62163, 62174, 62184, + 62192, 62201, 62210, 62220, 62232, 62244, 62256, 0, 0, 0, 0, 62262, + 62265, 62268, 62273, 62276, 62283, 62287, 62291, 62295, 62299, 62303, + 62308, 62313, 62317, 62321, 62326, 62331, 62336, 62341, 62344, 62347, + 62353, 62359, 62364, 62369, 62376, 62383, 62387, 62391, 62395, 62403, + 62409, 62416, 62421, 62426, 62431, 62436, 62441, 62446, 62451, 62457, + 62462, 62468, 62473, 62478, 62483, 62488, 62494, 62499, 62503, 62509, + 62520, 62530, 62545, 62555, 62559, 62569, 62575, 62581, 62587, 62592, + 62595, 62600, 62604, 0, 62610, 62614, 62617, 62621, 62624, 62628, 62631, + 62635, 62638, 62642, 62645, 62648, 62652, 62656, 62660, 62664, 62668, + 62672, 62676, 62680, 62684, 62688, 62692, 62696, 62700, 62704, 62708, + 62712, 62716, 62720, 62724, 62728, 62732, 62736, 62740, 62745, 62749, + 62753, 62757, 62761, 62764, 62768, 62771, 62775, 62779, 62783, 62787, + 62790, 62794, 62797, 62801, 62805, 62809, 62813, 62817, 62821, 62825, + 62829, 62833, 62837, 62841, 62845, 62848, 62852, 62856, 62860, 62864, + 62868, 62871, 62876, 62880, 62885, 62889, 62893, 62897, 62901, 62905, + 62909, 62914, 62918, 62922, 62926, 62930, 62934, 62938, 62942, 0, 0, + 62947, 62955, 62963, 62970, 62977, 62981, 62987, 62992, 62997, 63001, + 63004, 63008, 63011, 63015, 63018, 63022, 63025, 63029, 63032, 63035, + 63039, 63043, 63047, 63051, 63055, 63059, 63063, 63067, 63071, 63075, + 63079, 63083, 63087, 63091, 63095, 63099, 63103, 63107, 63111, 63115, + 63119, 63123, 63127, 63132, 63136, 63140, 63144, 63148, 63151, 63155, + 63158, 63162, 63166, 63170, 63174, 63177, 63181, 63184, 63188, 63192, + 63196, 63200, 63204, 63208, 63212, 63216, 63220, 63224, 63228, 63232, + 63235, 63239, 63243, 63247, 63251, 63255, 63258, 63263, 63267, 63272, + 63276, 63280, 63284, 63288, 63292, 63296, 63301, 63305, 63309, 63313, + 63317, 63321, 63325, 63329, 63334, 63338, 63342, 63346, 63350, 63354, + 63361, 63365, 63371, 0, 0, 0, 0, 0, 63376, 63381, 63386, 63391, 63396, + 63401, 63406, 63411, 63415, 63420, 63425, 63430, 63435, 63440, 63445, + 63450, 63455, 63460, 63464, 63469, 63474, 63479, 63483, 63487, 63491, + 63496, 63501, 63506, 63511, 63516, 63521, 63526, 63531, 63536, 63541, + 63545, 63549, 63554, 63559, 63564, 63569, 0, 0, 0, 63574, 63578, 63582, + 63586, 63590, 63594, 63598, 63602, 63606, 63610, 63614, 63618, 63622, + 63626, 63630, 63634, 63638, 63642, 63646, 63650, 63654, 63658, 63662, + 63666, 63670, 63674, 63678, 63682, 63686, 63690, 63694, 63697, 63701, + 63704, 63708, 63712, 63715, 63719, 63723, 63726, 63730, 63734, 63738, + 63742, 63745, 63749, 63753, 63757, 63761, 63765, 63769, 63772, 63775, + 63779, 63783, 63787, 63791, 63795, 63799, 63803, 63807, 63811, 63815, + 63819, 63823, 63827, 63831, 63835, 63839, 63843, 63847, 63851, 63855, + 63859, 63863, 63867, 63871, 63875, 63879, 63883, 63887, 63891, 63895, + 63899, 63903, 63907, 63911, 63915, 63919, 63923, 63927, 63931, 63935, + 63939, 0, 63943, 63949, 63955, 63960, 63965, 63970, 63976, 63982, 63987, + 63993, 63999, 64005, 64011, 64017, 64023, 64029, 64035, 64040, 64045, + 64050, 64055, 64060, 64065, 64070, 64075, 64080, 64085, 64090, 64095, + 64100, 64105, 64110, 64115, 64120, 64125, 64130, 64135, 64141, 64147, + 64153, 64159, 64164, 64169, 0, 0, 0, 0, 0, 64174, 64179, 64184, 64189, + 64194, 64199, 64204, 64209, 64214, 64219, 64224, 64229, 64234, 64239, + 64244, 64249, 64254, 64259, 64264, 64269, 64274, 64279, 64284, 64289, + 64294, 64299, 64304, 64309, 64314, 64319, 64324, 64329, 64334, 64339, + 64344, 64349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64354, 64359, 64364, + 64369, 64373, 64378, 64382, 64387, 64392, 64397, 64402, 64407, 64412, + 64417, 64422, 64427, 64432, 64436, 64440, 64444, 64448, 64452, 64456, + 64460, 64464, 64468, 64472, 64476, 64480, 64484, 64488, 64493, 64498, + 64503, 64508, 64513, 64518, 64523, 64528, 64533, 64538, 64543, 64548, + 64553, 64558, 64563, 64569, 0, 64576, 64580, 64584, 64588, 64592, 64596, + 64600, 64605, 64609, 64614, 64619, 64624, 64629, 64634, 64639, 64644, + 64649, 64654, 64659, 64664, 64669, 64674, 64679, 64684, 64689, 64694, + 64699, 64704, 64709, 64714, 64719, 64724, 64729, 64734, 64739, 64744, + 64749, 64754, 64759, 64764, 64769, 64778, 64787, 64796, 64805, 64814, + 64823, 64832, 64841, 64844, 64849, 64854, 64859, 64864, 64869, 64874, + 64880, 64885, 64891, 64895, 64900, 64905, 64910, 64915, 64920, 64924, + 64928, 64932, 64936, 64940, 64944, 64948, 64952, 64956, 64960, 64964, + 64968, 64972, 64976, 64981, 64986, 64991, 64996, 65001, 65006, 65011, + 65016, 65021, 65026, 65031, 65036, 65041, 65046, 65052, 65058, 65063, + 65068, 65072, 65076, 65080, 65084, 65088, 65092, 65097, 65101, 65106, + 65111, 65116, 65121, 65126, 65131, 65136, 65141, 65146, 65151, 65156, + 65161, 65166, 65171, 65176, 65181, 65186, 65191, 65196, 65201, 65206, + 65211, 65216, 65221, 65226, 65231, 65236, 65241, 65246, 65251, 65256, + 65261, 65266, 65271, 65276, 65281, 65286, 65291, 65296, 65301, 65306, + 65311, 65317, 65322, 65328, 65332, 65337, 65342, 65347, 65352, 65357, + 65362, 65368, 65373, 65379, 65383, 65390, 65397, 65404, 65411, 65418, + 65425, 65432, 65439, 65446, 65453, 65460, 65467, 65470, 65473, 65476, + 65481, 65484, 65487, 65490, 65493, 65496, 65499, 65503, 65507, 65511, + 65515, 65519, 65523, 65527, 65531, 65535, 65539, 65543, 65547, 65551, + 65554, 65557, 65561, 65565, 65569, 65573, 65576, 65580, 65584, 65588, + 65592, 65595, 65599, 65603, 65607, 65611, 65614, 65618, 65622, 65626, + 65630, 65634, 65638, 65642, 65646, 65650, 65654, 0, 65658, 65661, 65664, + 65667, 65670, 65673, 65676, 65679, 65682, 65685, 65688, 65691, 65694, + 65697, 65700, 65703, 65706, 65709, 65712, 65715, 65718, 65721, 65724, + 65727, 65730, 65733, 65736, 65739, 65742, 65745, 65748, 65751, 65754, + 65757, 65760, 65763, 65766, 65769, 65772, 65775, 65778, 65781, 65784, + 65787, 65790, 65793, 65796, 65799, 65802, 65805, 65808, 65811, 65814, + 65817, 65820, 65823, 65826, 65829, 65832, 65835, 65838, 65841, 65844, + 65847, 65850, 65853, 65856, 65859, 65862, 65865, 65868, 65871, 65874, + 65877, 65880, 65883, 65886, 65889, 65892, 65895, 65898, 65901, 65904, + 65907, 65910, 65913, 65916, 65919, 65922, 65931, 65939, 65947, 65955, + 65963, 65971, 65979, 65988, 65996, 66005, 66014, 66023, 66032, 66041, + 66050, 66059, 66068, 66077, 66086, 66095, 66104, 66113, 66122, 66131, + 66140, 66143, 66146, 66149, 66151, 66154, 66157, 66160, 66165, 66170, + 66173, 66180, 66187, 66194, 66201, 66204, 66209, 66211, 66215, 66217, + 66219, 66222, 66225, 66228, 66231, 66234, 66237, 66240, 66245, 66250, + 66253, 66256, 66259, 66262, 66265, 66268, 66271, 66275, 66278, 66281, + 66284, 66287, 66290, 66295, 66298, 66301, 66304, 66309, 66314, 66319, + 66324, 66329, 66334, 66339, 66344, 66350, 66358, 66360, 66363, 66366, + 66369, 66372, 66378, 66386, 66389, 66392, 66397, 66400, 66403, 66406, + 66411, 66414, 66417, 66422, 66425, 66428, 66433, 66436, 66439, 66444, + 66449, 66454, 66457, 66460, 66463, 66466, 66472, 66475, 66478, 66481, + 66483, 66486, 66489, 66492, 66497, 66500, 66503, 66506, 66509, 66512, + 66517, 66520, 66523, 66526, 66529, 66532, 66535, 66538, 66541, 66544, + 66550, 66555, 66563, 66571, 66579, 66587, 66595, 66603, 66612, 66620, + 66629, 66638, 66647, 66656, 66665, 66674, 66683, 66692, 66701, 66710, + 66719, 66728, 66737, 66746, 66755, 66764, 66773, 66782, 66791, 66800, + 66809, 66818, 66827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17994,305 +19113,305 @@ static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66088, 66097, 66106, 66117, 66124, 66129, 66134, 66141, 66148, 66154, - 66159, 66164, 66169, 66174, 66181, 66186, 66191, 66196, 66207, 66212, - 66217, 66224, 66229, 66236, 66241, 66246, 66253, 66260, 66267, 66276, - 66285, 66290, 66295, 66300, 66307, 66312, 66322, 66329, 66334, 66339, - 66344, 66349, 66354, 66359, 66368, 66375, 66382, 66387, 66394, 66399, - 66406, 66415, 66426, 66431, 66440, 66445, 66452, 66461, 66470, 66475, - 66480, 66487, 66493, 66500, 66507, 66511, 66515, 66518, 66522, 66526, - 66530, 66534, 66538, 66542, 66546, 66549, 66553, 66557, 66561, 66565, - 66569, 66573, 66576, 66580, 66584, 66587, 66591, 66595, 66599, 66603, - 66607, 66611, 66615, 66619, 66623, 66627, 66631, 66635, 66639, 66643, - 66647, 66651, 66655, 66659, 66663, 66667, 66671, 66675, 66679, 66683, - 66687, 66691, 66695, 66699, 66703, 66707, 66711, 66715, 66719, 66723, - 66727, 66731, 66735, 66739, 66743, 66747, 66751, 66755, 66759, 66763, - 66766, 66770, 66774, 66778, 66782, 66786, 66790, 66794, 66798, 66802, - 66806, 66810, 66814, 66818, 66822, 66826, 66830, 66834, 66838, 66842, - 66846, 66850, 66854, 66858, 66862, 66866, 66870, 66874, 66878, 66882, - 66886, 66890, 66894, 66898, 66902, 66906, 66910, 66914, 66918, 66922, - 66926, 66930, 66934, 66938, 66942, 66946, 66950, 66954, 66958, 66962, - 66966, 66970, 66974, 66978, 66982, 66986, 66990, 66994, 66998, 67002, - 67006, 67010, 67014, 67018, 67022, 67026, 67030, 67034, 67038, 67042, - 67046, 67050, 67054, 67058, 67062, 67066, 67070, 67074, 67078, 67082, - 67086, 67090, 67094, 67098, 67102, 67106, 67110, 67114, 67118, 67122, - 67126, 67130, 67134, 67138, 67142, 67146, 67150, 67154, 67158, 67162, - 67166, 67170, 67174, 67178, 67182, 67186, 67190, 67194, 67198, 67202, - 67206, 67210, 67214, 67218, 67222, 67226, 67230, 67234, 67237, 67241, - 67245, 67249, 67253, 67257, 67261, 67265, 67269, 67273, 67277, 67281, - 67285, 67289, 67293, 67297, 67301, 67305, 67309, 67313, 67317, 67321, - 67325, 67329, 67333, 67337, 67341, 67345, 67349, 67353, 67357, 67361, - 67365, 67369, 67373, 67377, 67381, 67385, 67389, 67393, 67397, 67401, - 67405, 67409, 67413, 67417, 67421, 67425, 67429, 67433, 67437, 67441, - 67445, 67449, 67453, 67457, 67461, 67465, 67469, 67473, 67477, 67481, - 67485, 67489, 67493, 67497, 67501, 67505, 67509, 67513, 67517, 67521, - 67525, 67529, 67533, 67537, 67541, 67545, 67549, 67553, 67557, 67561, - 67565, 67569, 67573, 67577, 67581, 67585, 67589, 67593, 67597, 67601, - 67605, 67609, 67613, 67617, 67621, 67625, 67629, 67633, 67637, 67641, - 67645, 67649, 67653, 67657, 67661, 67665, 67669, 67673, 67677, 67681, - 67685, 67689, 67693, 67697, 67700, 67704, 67708, 67712, 67716, 67720, - 67724, 67728, 67732, 67736, 67740, 67744, 67748, 67752, 67756, 67760, - 67764, 67768, 67772, 67776, 67780, 67784, 67788, 67792, 67796, 67800, - 67804, 67808, 67812, 67816, 67820, 67824, 67828, 67832, 67836, 67840, - 67844, 67848, 67852, 67856, 67860, 67864, 67868, 67872, 67876, 67880, - 67884, 67888, 67892, 67896, 67900, 67904, 67908, 67912, 67916, 67920, - 67924, 67928, 67932, 67936, 67940, 67944, 67948, 67952, 67956, 67960, - 67964, 67968, 67972, 67976, 67980, 67984, 67988, 67992, 67996, 68000, - 68004, 68008, 68012, 68016, 68020, 68024, 68028, 68032, 68036, 68040, - 68044, 68048, 68052, 68056, 68060, 68064, 68068, 68072, 68076, 68080, - 68084, 68088, 68092, 68096, 68100, 68104, 68108, 68112, 68116, 68120, - 68124, 68128, 68132, 68136, 68140, 68144, 68148, 68152, 68156, 68160, - 68164, 68168, 68172, 68176, 68180, 68184, 68188, 68192, 68196, 68200, - 68204, 68208, 68212, 68216, 68220, 68224, 68228, 68232, 68236, 68240, - 68244, 68248, 68252, 68256, 68260, 68264, 68268, 68272, 68276, 68280, - 68284, 68288, 68292, 68296, 68300, 68304, 68308, 68312, 68316, 68320, - 68324, 68328, 68332, 68336, 68340, 68344, 68348, 68352, 68356, 68360, - 68364, 68368, 68372, 68376, 68380, 68384, 68388, 68392, 68396, 68400, - 68404, 68408, 68412, 68416, 68420, 68424, 68428, 68432, 68436, 68440, - 68444, 68448, 68452, 68456, 68460, 68464, 68468, 68472, 68476, 68480, - 68484, 68488, 68492, 68496, 68500, 68504, 68508, 68512, 68516, 68520, - 68524, 68528, 68532, 68536, 68540, 68544, 68548, 68552, 68555, 68559, - 68563, 68567, 68571, 68575, 68579, 68583, 68587, 68591, 68595, 68599, - 68603, 68607, 68611, 68615, 68619, 68623, 68627, 68631, 68635, 68639, - 68643, 68647, 68651, 68655, 68659, 68663, 68667, 68671, 68675, 68679, - 68683, 68687, 68691, 68695, 68699, 68703, 68707, 68711, 68715, 68719, - 68723, 68727, 68731, 68735, 68739, 68743, 68747, 68751, 68755, 68759, - 68763, 68767, 68771, 68775, 68779, 68783, 68787, 68791, 68795, 68799, - 68803, 68807, 68811, 68815, 68819, 68823, 68827, 68831, 68835, 68839, - 68843, 68847, 68851, 68855, 68859, 68863, 68867, 68871, 68875, 68879, - 68883, 68887, 68891, 68895, 68899, 68903, 68907, 68911, 68915, 68919, - 68923, 68927, 68931, 68935, 68939, 68943, 68947, 68951, 68955, 68959, - 68963, 68967, 68971, 68975, 68979, 68983, 68987, 68991, 68995, 68999, - 69003, 69007, 69010, 69014, 69018, 69022, 69026, 69030, 69034, 69038, - 69042, 69046, 69050, 69054, 69058, 69062, 69066, 69070, 69074, 69078, - 69082, 69086, 69090, 69094, 69098, 69102, 69106, 69110, 69114, 69118, - 69122, 69126, 69130, 69134, 69138, 69142, 69146, 69150, 69154, 69158, - 69162, 69166, 69170, 69174, 69178, 69182, 69186, 69190, 69194, 69198, - 69202, 69206, 69210, 69214, 69218, 69222, 69226, 69230, 69234, 69238, - 69242, 69246, 69250, 69254, 69258, 69262, 69266, 69270, 69274, 69278, - 69282, 69286, 69290, 69294, 69298, 69302, 69306, 69310, 69314, 69318, - 69322, 69326, 69330, 69334, 69338, 69342, 69346, 69350, 69354, 69358, - 69362, 69366, 69370, 69374, 69378, 69382, 69386, 69390, 69394, 69398, - 69402, 69406, 69410, 69414, 69418, 69422, 69426, 69430, 69434, 69438, - 69442, 69446, 69450, 69454, 69458, 69462, 69466, 69470, 69474, 69478, - 69482, 69486, 69490, 69494, 69498, 69502, 69506, 69510, 69514, 69518, - 69522, 69526, 69530, 69534, 69538, 69542, 69546, 69550, 69554, 69558, - 69562, 69566, 69570, 69574, 69578, 69582, 69586, 69590, 69594, 69598, - 69602, 69606, 69610, 69613, 69617, 69621, 69625, 69629, 69633, 69637, - 69641, 69645, 69649, 69653, 69657, 69661, 69665, 69669, 69673, 69677, - 69681, 69685, 69689, 69693, 69697, 69701, 69705, 69709, 69713, 69717, - 69721, 69725, 69729, 69733, 69737, 69741, 69745, 69749, 69753, 69757, - 69761, 69765, 69769, 69773, 69777, 69781, 69785, 69789, 69793, 69797, - 69801, 69805, 69809, 69813, 69817, 69821, 69825, 69829, 69833, 69837, - 69841, 69845, 69849, 69853, 69857, 69861, 69865, 69869, 69873, 69877, - 69881, 69885, 69889, 69893, 69897, 69901, 69905, 69909, 69913, 69917, - 69921, 69925, 69929, 69933, 69937, 69941, 69945, 69949, 69953, 69957, - 69961, 69965, 69969, 69973, 69977, 69981, 69985, 69989, 69993, 69997, - 70001, 70005, 70009, 70013, 70017, 70021, 70025, 70029, 70033, 70037, - 70041, 70045, 70049, 70053, 70057, 70061, 70065, 70069, 70073, 70077, - 70081, 70085, 70089, 70093, 70097, 70101, 70105, 70109, 70113, 70117, - 70121, 70125, 70129, 70133, 70137, 70141, 70145, 70149, 70153, 70157, - 70161, 70165, 70169, 70173, 70177, 70181, 70185, 70189, 70193, 70197, - 70201, 70205, 70209, 70213, 70217, 70221, 70225, 70229, 70233, 70237, - 70241, 70245, 70249, 70253, 70257, 70261, 70265, 70269, 70273, 70277, - 70281, 70285, 70289, 70293, 70297, 70301, 70305, 70309, 70313, 70317, - 70321, 70325, 70329, 70333, 70337, 70341, 70345, 70349, 70353, 70357, - 70361, 70365, 70369, 70373, 70377, 70381, 70385, 70389, 70393, 70397, - 70401, 70405, 70409, 70413, 70417, 70421, 70425, 70429, 70433, 70437, - 70441, 70445, 70449, 70453, 70457, 70461, 70465, 70469, 70473, 70477, - 70481, 70485, 70489, 70493, 70497, 70501, 70505, 70509, 70513, 70517, - 70521, 70525, 70529, 70533, 70537, 70541, 70545, 70549, 70553, 70557, - 70561, 70565, 70569, 70573, 70577, 70581, 70585, 70589, 70593, 70597, - 70601, 70605, 70609, 70613, 70617, 70621, 70625, 70629, 70633, 70637, - 70641, 70645, 70649, 70653, 70657, 70661, 70665, 70669, 70673, 70677, - 70681, 70685, 70689, 70693, 70697, 70701, 70705, 70709, 70713, 70717, - 70721, 70725, 70729, 70733, 70737, 70741, 70745, 70749, 70753, 70757, - 70761, 70765, 70769, 70773, 70777, 70781, 70785, 70789, 70793, 70797, - 70801, 70805, 70809, 70813, 70817, 70821, 70825, 70829, 70833, 70837, - 70841, 70845, 70849, 70853, 70857, 70861, 70865, 70869, 70873, 70877, - 70881, 70885, 70889, 70893, 70897, 70901, 70905, 70909, 70913, 70917, - 70921, 70925, 70929, 70933, 70937, 70941, 70945, 70949, 70953, 70957, - 70961, 70965, 70969, 70973, 70977, 70981, 70985, 70989, 70993, 70997, - 71001, 71005, 71009, 71013, 71017, 71021, 71025, 71029, 71033, 71037, - 71041, 71045, 71049, 71053, 71057, 71061, 71065, 71069, 71073, 71077, - 71081, 71085, 71089, 71093, 71097, 71101, 71105, 71109, 71113, 71117, - 71121, 71125, 71129, 71133, 71137, 71141, 71145, 71149, 71153, 0, 0, 0, - 71157, 71161, 71165, 71169, 71173, 71177, 71181, 71185, 71189, 71193, - 71197, 71201, 71205, 71209, 71213, 71217, 71221, 71225, 71229, 71233, - 71237, 71241, 71245, 71249, 71253, 71257, 71261, 71265, 71269, 71273, - 71277, 71281, 71285, 71289, 71293, 71297, 71301, 71305, 71309, 71313, - 71317, 71321, 71325, 71329, 71333, 71337, 71341, 71345, 71349, 71353, - 71357, 71361, 71365, 71369, 71373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71377, - 71382, 71386, 71391, 71396, 71401, 71406, 71411, 71415, 71420, 71425, - 71430, 71435, 71440, 71445, 71450, 71454, 71459, 71464, 71469, 71474, - 71479, 71484, 71488, 71493, 71498, 71503, 71508, 71513, 71517, 71522, - 71526, 71531, 71535, 71540, 71544, 71548, 71552, 71557, 71562, 71567, - 71575, 71583, 71591, 71599, 71607, 71615, 71621, 71629, 71633, 71637, - 71641, 71645, 71649, 71653, 71657, 71661, 71665, 71669, 71673, 71677, - 71681, 71685, 71689, 71693, 71697, 71701, 71705, 71709, 71713, 71717, - 71721, 71725, 71729, 71733, 71737, 71741, 71745, 71749, 71753, 71757, - 71761, 71765, 71769, 71773, 71776, 71780, 71784, 71788, 71792, 71796, - 71800, 71804, 71808, 71812, 71816, 71820, 71824, 71828, 71832, 71836, - 71840, 71844, 71848, 71852, 71856, 71860, 71864, 71868, 71872, 71876, - 71880, 71884, 71888, 71892, 71896, 71900, 71904, 71908, 71912, 71916, - 71920, 71923, 71927, 71931, 71934, 71938, 71942, 71946, 71949, 71953, - 71957, 71961, 71965, 71969, 71973, 71977, 71981, 71985, 71989, 71993, - 71997, 72001, 72005, 72009, 72013, 72017, 72021, 72025, 72029, 72033, - 72037, 72041, 72045, 72048, 72051, 72055, 72059, 72063, 72066, 72070, - 72074, 72078, 72082, 72086, 72090, 72094, 72098, 72102, 72106, 72110, - 72114, 72118, 72122, 72126, 72130, 72134, 72138, 72142, 72146, 72150, - 72154, 72158, 72162, 72166, 72170, 72174, 72178, 72182, 72186, 72190, - 72194, 72198, 72202, 72206, 72210, 72214, 72218, 72221, 72225, 72229, - 72233, 72237, 72241, 72245, 72249, 72253, 72257, 72261, 72265, 72269, - 72273, 72277, 72281, 72285, 72289, 72293, 72297, 72301, 72305, 72309, - 72313, 72317, 72321, 72325, 72329, 72333, 72337, 72341, 72345, 72349, - 72353, 72357, 72361, 72365, 72368, 72372, 72376, 72380, 72384, 72388, - 72392, 72396, 72400, 72404, 72408, 72412, 72416, 72420, 72424, 72428, - 72432, 72435, 72439, 72443, 72447, 72451, 72455, 72459, 72463, 72467, - 72471, 72475, 72479, 72483, 72487, 72491, 72495, 72499, 72503, 72507, - 72511, 72515, 72519, 72522, 72526, 72530, 72534, 72538, 72542, 72546, - 72550, 72554, 72558, 72562, 72566, 72570, 72574, 72578, 72582, 72586, - 72590, 72594, 72598, 72602, 72606, 72610, 72614, 72618, 72622, 72626, - 72630, 72634, 72638, 72642, 72646, 72650, 72654, 72658, 72662, 72666, - 72670, 72674, 72678, 72682, 72686, 72690, 72694, 72697, 72702, 72706, - 72712, 72717, 72723, 72727, 72731, 72735, 72739, 72743, 72747, 72751, - 72755, 72759, 72763, 72767, 72771, 72775, 72779, 72782, 72785, 72788, - 72791, 72794, 72797, 72801, 72804, 72808, 72813, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72819, 72824, 72829, 72834, 72839, - 72846, 72853, 72858, 72863, 72868, 72873, 72880, 72887, 72894, 72901, - 72908, 72915, 72925, 72935, 72942, 72949, 72956, 72963, 72969, 72975, - 72984, 72993, 73000, 73007, 73018, 73029, 73034, 73039, 73046, 73053, - 73060, 73067, 73074, 73081, 73088, 73095, 73101, 73107, 73113, 73119, - 73126, 73133, 73138, 73142, 73149, 73156, 73163, 73167, 73174, 73178, - 73183, 73187, 73193, 73198, 73204, 73209, 73213, 73217, 73220, 73223, - 73228, 73233, 73238, 73243, 73248, 73253, 73258, 73263, 73268, 73273, - 73281, 73289, 73294, 73299, 73304, 73309, 73314, 73319, 73324, 73329, - 73334, 73339, 73344, 73349, 73354, 73359, 73365, 73371, 73377, 73383, - 73388, 73394, 73397, 73400, 73403, 73407, 73411, 73415, 73419, 73422, - 73426, 73429, 73433, 73436, 73440, 73444, 73448, 73452, 73456, 73460, - 73464, 73468, 73472, 73476, 73480, 73484, 73488, 73492, 73496, 73500, - 73504, 73508, 73512, 73516, 73520, 73524, 73527, 73531, 73535, 73539, - 73543, 73547, 73551, 73555, 73559, 73563, 73567, 73571, 73575, 73579, - 73583, 73587, 73591, 73595, 73599, 73603, 73607, 73611, 73615, 73619, - 73623, 73627, 73631, 73635, 73639, 73643, 73647, 73651, 73655, 73658, - 73662, 73666, 73670, 73674, 73678, 73682, 73686, 73690, 73694, 73698, - 73702, 73706, 73711, 73716, 73719, 73724, 73727, 73730, 73733, 0, 0, 0, - 0, 0, 0, 0, 0, 73737, 73746, 73755, 73764, 73773, 73782, 73791, 73800, - 73809, 73817, 73824, 73832, 73839, 73847, 73857, 73866, 73876, 73885, - 73895, 73903, 73910, 73918, 73925, 73933, 73938, 73943, 73949, 73958, - 73964, 73970, 73977, 73986, 73994, 74002, 74010, 74017, 74024, 74031, - 74038, 74043, 74048, 74053, 74058, 74063, 74068, 74073, 74078, 74086, - 74094, 74100, 74105, 74110, 74115, 74120, 74125, 74130, 74135, 74140, - 74145, 74154, 74163, 74168, 74173, 74183, 74193, 74200, 74207, 74216, - 74225, 74237, 74249, 74255, 74261, 74269, 74277, 74287, 74297, 74304, - 74311, 74316, 74321, 74333, 74345, 74353, 74361, 74371, 74381, 74393, - 74405, 74414, 74423, 74430, 74437, 74444, 74451, 74460, 74469, 74474, - 74479, 74486, 74493, 74500, 74507, 74519, 74531, 74536, 74541, 74546, - 74551, 74556, 74561, 74566, 74571, 74575, 74580, 74585, 74590, 74595, - 74600, 74606, 74611, 74616, 74623, 74630, 74637, 74644, 74651, 74660, - 74669, 74675, 74681, 74687, 74693, 74699, 74705, 74712, 74719, 74726, - 74730, 74737, 74742, 74747, 74754, 74767, 74773, 74781, 74789, 74796, - 74803, 74812, 74821, 74828, 74835, 74842, 74849, 74856, 74863, 74870, - 74877, 74884, 74891, 74900, 74909, 74918, 74927, 74936, 74945, 74954, - 74963, 74972, 74981, 74988, 74995, 75001, 0, 0, 75009, 75016, 75023, - 75031, 75036, 75041, 75046, 75051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66830, 66839, 66848, 66859, 66866, 66871, 66876, 66883, 66890, 66896, + 66901, 66906, 66911, 66916, 66923, 66928, 66933, 66938, 66949, 66954, + 66959, 66966, 66971, 66978, 66983, 66988, 66995, 67002, 67009, 67018, + 67027, 67032, 67037, 67042, 67049, 67054, 67064, 67071, 67076, 67081, + 67086, 67091, 67096, 67101, 67110, 67117, 67124, 67129, 67136, 67141, + 67148, 67157, 67168, 67173, 67182, 67187, 67194, 67203, 67212, 67217, + 67222, 67229, 67235, 67242, 67249, 67253, 67257, 67260, 67264, 67268, + 67272, 67276, 67280, 67284, 67288, 67291, 67295, 67299, 67303, 67307, + 67311, 67315, 67318, 67322, 67326, 67329, 67333, 67337, 67341, 67345, + 67349, 67353, 67357, 67361, 67365, 67369, 67373, 67377, 67381, 67385, + 67389, 67393, 67397, 67401, 67405, 67409, 67413, 67417, 67421, 67425, + 67429, 67433, 67437, 67441, 67445, 67449, 67453, 67457, 67461, 67465, + 67469, 67473, 67477, 67481, 67485, 67489, 67493, 67497, 67501, 67505, + 67508, 67512, 67516, 67520, 67524, 67528, 67532, 67536, 67540, 67544, + 67548, 67552, 67556, 67560, 67564, 67568, 67572, 67576, 67580, 67584, + 67588, 67592, 67596, 67600, 67604, 67608, 67612, 67616, 67620, 67624, + 67628, 67632, 67636, 67640, 67644, 67648, 67652, 67656, 67660, 67664, + 67668, 67672, 67676, 67680, 67684, 67688, 67692, 67696, 67700, 67704, + 67708, 67712, 67716, 67720, 67724, 67728, 67732, 67736, 67740, 67744, + 67748, 67752, 67756, 67760, 67764, 67768, 67772, 67776, 67780, 67784, + 67788, 67792, 67796, 67800, 67804, 67808, 67812, 67816, 67820, 67824, + 67828, 67832, 67836, 67840, 67844, 67848, 67852, 67856, 67860, 67864, + 67868, 67872, 67876, 67880, 67884, 67888, 67892, 67896, 67900, 67904, + 67908, 67912, 67916, 67920, 67924, 67928, 67932, 67936, 67940, 67944, + 67948, 67952, 67956, 67960, 67964, 67968, 67972, 67976, 67979, 67983, + 67987, 67991, 67995, 67999, 68003, 68007, 68011, 68015, 68019, 68023, + 68027, 68031, 68035, 68039, 68043, 68047, 68051, 68055, 68059, 68063, + 68067, 68071, 68075, 68079, 68083, 68087, 68091, 68095, 68099, 68103, + 68107, 68111, 68115, 68119, 68123, 68127, 68131, 68135, 68139, 68143, + 68147, 68151, 68155, 68159, 68163, 68167, 68171, 68175, 68179, 68183, + 68187, 68191, 68195, 68199, 68203, 68207, 68211, 68215, 68219, 68223, + 68227, 68231, 68235, 68239, 68243, 68247, 68251, 68255, 68259, 68263, + 68267, 68271, 68275, 68279, 68283, 68287, 68291, 68295, 68299, 68303, + 68307, 68311, 68315, 68319, 68323, 68327, 68331, 68335, 68339, 68343, + 68347, 68351, 68355, 68359, 68363, 68367, 68371, 68375, 68379, 68383, + 68387, 68391, 68395, 68399, 68403, 68407, 68411, 68415, 68419, 68423, + 68427, 68431, 68435, 68439, 68442, 68446, 68450, 68454, 68458, 68462, + 68466, 68470, 68474, 68478, 68482, 68486, 68490, 68494, 68498, 68502, + 68506, 68510, 68514, 68518, 68522, 68526, 68530, 68534, 68538, 68542, + 68546, 68550, 68554, 68558, 68562, 68566, 68570, 68574, 68578, 68582, + 68586, 68590, 68594, 68598, 68602, 68606, 68610, 68614, 68618, 68622, + 68626, 68630, 68634, 68638, 68642, 68646, 68650, 68654, 68658, 68662, + 68666, 68670, 68674, 68678, 68682, 68686, 68690, 68694, 68698, 68702, + 68706, 68710, 68714, 68718, 68722, 68726, 68730, 68734, 68738, 68742, + 68746, 68750, 68754, 68758, 68762, 68766, 68770, 68774, 68778, 68782, + 68786, 68790, 68794, 68798, 68801, 68805, 68809, 68813, 68817, 68821, + 68825, 68829, 68833, 68837, 68841, 68845, 68849, 68853, 68857, 68861, + 68865, 68869, 68873, 68877, 68881, 68885, 68889, 68893, 68897, 68901, + 68905, 68909, 68913, 68917, 68921, 68925, 68929, 68933, 68937, 68941, + 68945, 68949, 68953, 68957, 68961, 68965, 68969, 68973, 68977, 68981, + 68985, 68989, 68993, 68997, 69001, 69005, 69009, 69013, 69017, 69021, + 69025, 69029, 69033, 69037, 69040, 69044, 69048, 69052, 69056, 69060, + 69064, 69068, 69072, 69076, 69080, 69084, 69088, 69092, 69096, 69100, + 69104, 69108, 69112, 69116, 69120, 69124, 69128, 69132, 69136, 69140, + 69144, 69148, 69152, 69156, 69160, 69164, 69168, 69172, 69176, 69180, + 69184, 69188, 69192, 69196, 69200, 69204, 69208, 69212, 69216, 69220, + 69224, 69228, 69232, 69236, 69240, 69244, 69248, 69252, 69256, 69260, + 69264, 69268, 69272, 69276, 69280, 69284, 69288, 69292, 69295, 69299, + 69303, 69307, 69311, 69315, 69319, 69323, 69327, 69331, 69335, 69339, + 69343, 69347, 69351, 69355, 69359, 69363, 69367, 69371, 69375, 69379, + 69383, 69387, 69391, 69395, 69399, 69403, 69407, 69411, 69415, 69419, + 69423, 69427, 69431, 69435, 69439, 69443, 69447, 69451, 69455, 69459, + 69463, 69467, 69471, 69475, 69479, 69483, 69487, 69491, 69495, 69499, + 69503, 69507, 69511, 69515, 69519, 69523, 69527, 69531, 69535, 69539, + 69543, 69547, 69551, 69555, 69559, 69563, 69567, 69571, 69575, 69579, + 69583, 69587, 69591, 69595, 69599, 69603, 69607, 69611, 69615, 69619, + 69623, 69627, 69631, 69635, 69639, 69643, 69647, 69651, 69655, 69659, + 69663, 69667, 69671, 69675, 69679, 69683, 69687, 69691, 69695, 69699, + 69703, 69707, 69711, 69715, 69719, 69723, 69727, 69731, 69735, 69739, + 69743, 69747, 69750, 69754, 69758, 69762, 69766, 69770, 69774, 69778, + 69782, 69786, 69790, 69794, 69798, 69802, 69806, 69810, 69814, 69818, + 69822, 69826, 69830, 69834, 69838, 69842, 69846, 69850, 69854, 69858, + 69862, 69866, 69870, 69874, 69878, 69882, 69886, 69890, 69894, 69898, + 69902, 69906, 69910, 69914, 69918, 69922, 69926, 69930, 69934, 69938, + 69942, 69946, 69950, 69954, 69958, 69962, 69966, 69970, 69974, 69978, + 69982, 69986, 69990, 69994, 69998, 70002, 70006, 70010, 70014, 70018, + 70022, 70026, 70030, 70034, 70038, 70042, 70046, 70050, 70054, 70058, + 70062, 70066, 70070, 70074, 70078, 70082, 70086, 70090, 70094, 70098, + 70102, 70106, 70110, 70114, 70118, 70122, 70126, 70130, 70134, 70138, + 70142, 70146, 70150, 70154, 70158, 70162, 70166, 70170, 70174, 70178, + 70182, 70186, 70190, 70194, 70198, 70202, 70206, 70210, 70214, 70218, + 70222, 70226, 70230, 70234, 70238, 70242, 70246, 70250, 70254, 70258, + 70262, 70266, 70270, 70274, 70278, 70282, 70286, 70290, 70294, 70298, + 70302, 70306, 70310, 70314, 70318, 70322, 70326, 70330, 70334, 70338, + 70342, 70346, 70350, 70353, 70357, 70361, 70365, 70369, 70373, 70377, + 70381, 70385, 70389, 70393, 70397, 70401, 70405, 70409, 70413, 70417, + 70421, 70425, 70429, 70433, 70437, 70441, 70445, 70449, 70453, 70457, + 70461, 70465, 70469, 70473, 70477, 70481, 70485, 70489, 70493, 70497, + 70501, 70505, 70509, 70513, 70517, 70521, 70525, 70529, 70533, 70537, + 70541, 70545, 70549, 70553, 70557, 70561, 70565, 70569, 70573, 70577, + 70581, 70585, 70589, 70593, 70597, 70601, 70605, 70609, 70613, 70617, + 70621, 70625, 70629, 70633, 70637, 70641, 70645, 70649, 70653, 70657, + 70661, 70665, 70669, 70673, 70677, 70681, 70685, 70689, 70693, 70697, + 70701, 70705, 70709, 70713, 70717, 70721, 70725, 70729, 70733, 70737, + 70741, 70745, 70749, 70753, 70757, 70761, 70765, 70769, 70773, 70777, + 70781, 70785, 70789, 70793, 70797, 70801, 70805, 70809, 70813, 70817, + 70821, 70825, 70829, 70833, 70837, 70841, 70845, 70849, 70853, 70857, + 70861, 70865, 70869, 70873, 70877, 70881, 70885, 70889, 70893, 70897, + 70901, 70905, 70909, 70913, 70917, 70921, 70925, 70929, 70933, 70937, + 70941, 70945, 70949, 70953, 70957, 70961, 70965, 70969, 70973, 70977, + 70981, 70985, 70989, 70993, 70997, 71001, 71005, 71009, 71013, 71017, + 71021, 71025, 71029, 71033, 71037, 71041, 71045, 71049, 71053, 71057, + 71061, 71065, 71069, 71073, 71077, 71081, 71085, 71089, 71093, 71097, + 71101, 71105, 71109, 71113, 71117, 71121, 71125, 71129, 71133, 71137, + 71141, 71145, 71149, 71153, 71157, 71161, 71165, 71169, 71173, 71177, + 71181, 71185, 71189, 71193, 71197, 71201, 71205, 71209, 71213, 71217, + 71221, 71225, 71229, 71233, 71237, 71241, 71245, 71249, 71253, 71257, + 71261, 71265, 71269, 71273, 71277, 71281, 71285, 71289, 71293, 71297, + 71301, 71305, 71309, 71313, 71317, 71321, 71325, 71329, 71333, 71337, + 71341, 71345, 71349, 71353, 71357, 71361, 71365, 71369, 71373, 71377, + 71381, 71385, 71389, 71393, 71397, 71401, 71405, 71409, 71413, 71417, + 71421, 71425, 71429, 71433, 71437, 71441, 71445, 71449, 71453, 71457, + 71461, 71465, 71469, 71473, 71477, 71481, 71485, 71489, 71493, 71497, + 71501, 71505, 71509, 71513, 71517, 71521, 71525, 71529, 71533, 71537, + 71541, 71545, 71549, 71553, 71557, 71561, 71565, 71569, 71573, 71577, + 71581, 71585, 71589, 71593, 71597, 71601, 71605, 71609, 71613, 71617, + 71621, 71625, 71629, 71633, 71637, 71641, 71645, 71649, 71653, 71657, + 71661, 71665, 71669, 71673, 71677, 71681, 71685, 71689, 71693, 71697, + 71701, 71705, 71709, 71713, 71717, 71721, 71725, 71729, 71733, 71737, + 71741, 71745, 71749, 71753, 71757, 71761, 71765, 71769, 71773, 71777, + 71781, 71785, 71789, 71793, 71797, 71801, 71805, 71809, 71813, 71817, + 71821, 71825, 71829, 71833, 71837, 71841, 71845, 71849, 71853, 71857, + 71861, 71865, 71869, 71873, 71877, 71881, 71885, 71889, 71893, 0, 0, 0, + 71897, 71901, 71905, 71909, 71913, 71917, 71921, 71925, 71929, 71933, + 71937, 71941, 71945, 71949, 71953, 71957, 71961, 71965, 71969, 71973, + 71977, 71981, 71985, 71989, 71993, 71997, 72001, 72005, 72009, 72013, + 72017, 72021, 72025, 72029, 72033, 72037, 72041, 72045, 72049, 72053, + 72057, 72061, 72065, 72069, 72073, 72077, 72081, 72085, 72089, 72093, + 72097, 72101, 72105, 72109, 72113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72117, + 72122, 72126, 72131, 72136, 72141, 72146, 72151, 72155, 72160, 72165, + 72170, 72175, 72180, 72185, 72190, 72194, 72198, 72202, 72207, 72212, + 72217, 72222, 72226, 72231, 72236, 72241, 72246, 72251, 72255, 72260, + 72264, 72269, 72273, 72278, 72282, 72286, 72290, 72295, 72300, 72305, + 72313, 72321, 72329, 72337, 72344, 72352, 72358, 72366, 72370, 72374, + 72378, 72382, 72386, 72390, 72394, 72398, 72402, 72406, 72410, 72414, + 72418, 72422, 72426, 72430, 72434, 72438, 72442, 72446, 72450, 72454, + 72458, 72462, 72466, 72470, 72474, 72478, 72482, 72486, 72490, 72494, + 72498, 72502, 72506, 72510, 72513, 72517, 72521, 72525, 72529, 72533, + 72537, 72541, 72545, 72549, 72553, 72557, 72561, 72565, 72569, 72573, + 72577, 72581, 72585, 72589, 72593, 72597, 72601, 72605, 72609, 72613, + 72617, 72621, 72625, 72629, 72633, 72637, 72641, 72645, 72649, 72653, + 72657, 72660, 72664, 72668, 72671, 72675, 72679, 72683, 72686, 72690, + 72694, 72698, 72702, 72706, 72710, 72714, 72718, 72722, 72726, 72730, + 72734, 72738, 72741, 72745, 72749, 72753, 72757, 72761, 72765, 72769, + 72773, 72777, 72781, 72784, 72787, 72791, 72795, 72799, 72802, 72805, + 72809, 72813, 72817, 72821, 72825, 72829, 72833, 72837, 72841, 72845, + 72849, 72853, 72857, 72861, 72865, 72869, 72873, 72877, 72881, 72885, + 72889, 72893, 72897, 72901, 72905, 72909, 72913, 72917, 72921, 72925, + 72929, 72933, 72937, 72941, 72945, 72949, 72953, 72956, 72960, 72964, + 72968, 72972, 72976, 72980, 72984, 72988, 72992, 72996, 73000, 73004, + 73008, 73012, 73016, 73020, 73024, 73028, 73032, 73036, 73040, 73044, + 73048, 73052, 73056, 73060, 73064, 73068, 73072, 73076, 73080, 73084, + 73088, 73092, 73096, 73100, 73103, 73107, 73111, 73115, 73119, 73123, + 73127, 73131, 73135, 73139, 73143, 73147, 73151, 73155, 73159, 73163, + 73167, 73170, 73174, 73178, 73182, 73186, 73190, 73194, 73198, 73202, + 73206, 73210, 73214, 73218, 73222, 73226, 73230, 73234, 73238, 73242, + 73246, 73250, 73254, 73257, 73261, 73265, 73269, 73273, 73277, 73281, + 73285, 73289, 73293, 73297, 73301, 73305, 73309, 73313, 73317, 73321, + 73325, 73329, 73333, 73337, 73341, 73345, 73349, 73353, 73357, 73361, + 73365, 73369, 73373, 73377, 73381, 73385, 73389, 73393, 73397, 73401, + 73405, 73409, 73413, 73417, 73421, 73425, 73429, 73432, 73437, 73441, + 73447, 73452, 73458, 73462, 73466, 73470, 73474, 73478, 73482, 73486, + 73490, 73494, 73498, 73502, 73506, 73510, 73514, 73517, 73520, 73523, + 73526, 73529, 73532, 73536, 73539, 73543, 73548, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73554, 73559, 73564, 73569, 73574, + 73581, 73588, 73593, 73598, 73603, 73608, 73615, 73622, 73629, 73636, + 73643, 73650, 73660, 73670, 73677, 73684, 73691, 73698, 73704, 73710, + 73719, 73728, 73735, 73742, 73753, 73764, 73769, 73774, 73781, 73788, + 73795, 73802, 73809, 73816, 73823, 73830, 73836, 73842, 73848, 73854, + 73861, 73868, 73873, 73877, 73884, 73891, 73898, 73902, 73909, 73913, + 73918, 73922, 73928, 73933, 73939, 73944, 73948, 73952, 73955, 73958, + 73963, 73968, 73973, 73978, 73983, 73988, 73993, 73998, 74003, 74008, + 74016, 74024, 74029, 74034, 74039, 74044, 74049, 74054, 74059, 74064, + 74069, 74074, 74079, 74084, 74089, 74094, 74100, 74106, 74112, 74118, + 74123, 74129, 74132, 74135, 74138, 74142, 74146, 74150, 74154, 74157, + 74161, 74164, 74167, 74170, 74174, 74178, 74182, 74186, 74190, 74194, + 74198, 74202, 74206, 74210, 74214, 74218, 74222, 74226, 74230, 74234, + 74238, 74242, 74246, 74250, 74254, 74258, 74261, 74265, 74269, 74273, + 74277, 74281, 74285, 74289, 74293, 74297, 74301, 74305, 74309, 74313, + 74317, 74321, 74325, 74329, 74333, 74337, 74341, 74345, 74349, 74353, + 74357, 74360, 74364, 74368, 74372, 74376, 74380, 74384, 74388, 74391, + 74395, 74399, 74403, 74407, 74411, 74415, 74419, 74423, 74427, 74431, + 74435, 74439, 74444, 74449, 74452, 74457, 74460, 74463, 74466, 0, 0, 0, + 0, 0, 0, 0, 0, 74470, 74479, 74488, 74497, 74506, 74515, 74524, 74533, + 74542, 74550, 74557, 74565, 74572, 74580, 74590, 74599, 74609, 74618, + 74628, 74636, 74643, 74651, 74658, 74666, 74671, 74676, 74682, 74691, + 74697, 74703, 74710, 74719, 74727, 74735, 74743, 74750, 74757, 74764, + 74771, 74776, 74781, 74786, 74791, 74796, 74801, 74806, 74811, 74819, + 74827, 74833, 74839, 74844, 74849, 74854, 74859, 74864, 74869, 74874, + 74879, 74888, 74897, 74902, 74907, 74917, 74927, 74934, 74941, 74950, + 74959, 74971, 74983, 74989, 74995, 75003, 75011, 75021, 75031, 75038, + 75045, 75050, 75055, 75067, 75079, 75087, 75095, 75105, 75115, 75127, + 75139, 75148, 75157, 75164, 75171, 75178, 75185, 75194, 75203, 75208, + 75213, 75220, 75227, 75234, 75241, 75253, 75265, 75270, 75275, 75280, + 75285, 75290, 75295, 75300, 75305, 75309, 75314, 75319, 75324, 75329, + 75334, 75340, 75345, 75350, 75357, 75364, 75371, 75378, 75385, 75394, + 75403, 75409, 75415, 75421, 75427, 75434, 75441, 75448, 75455, 75462, + 75466, 75473, 75478, 75483, 75490, 75503, 75509, 75517, 75525, 75532, + 75539, 75548, 75557, 75564, 75571, 75578, 75585, 75592, 75599, 75606, + 75613, 75620, 75627, 75636, 75645, 75654, 75663, 75672, 75681, 75690, + 75699, 75708, 75717, 75724, 75731, 75737, 75745, 0, 75751, 75758, 75765, + 75773, 75778, 75783, 75788, 75793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 75056, 75063, 75070, 75076, 75084, 75092, 75100, 75108, 75116, - 75124, 75130, 75136, 75143, 75149, 75155, 75161, 75168, 75175, 75182, - 75189, 75196, 75203, 75210, 75217, 75224, 75231, 75238, 75245, 75252, - 75259, 75265, 75272, 75279, 75286, 75293, 75300, 75307, 75314, 75321, - 75328, 75335, 75342, 75349, 75356, 75363, 75370, 75377, 75384, 75391, - 75399, 75407, 75415, 75423, 0, 0, 0, 0, 75431, 75439, 75447, 75455, - 75463, 75471, 75479, 75485, 75491, 75497, 0, 0, 0, 0, 0, 0, 75503, 75507, - 75512, 75517, 75522, 75527, 75532, 75537, 75542, 75547, 75552, 75557, - 75562, 75566, 75571, 75576, 75580, 75585, 75590, 75595, 75600, 75605, - 75610, 75615, 75619, 75624, 75629, 75634, 75639, 75643, 75647, 75651, - 75655, 75659, 75663, 75668, 75673, 75678, 75683, 75688, 75695, 75701, - 75706, 75711, 75716, 75721, 75727, 75734, 75740, 75747, 75754, 75761, - 75766, 75773, 75779, 75784, 0, 0, 0, 0, 0, 0, 0, 0, 75790, 75795, 75800, - 75804, 75809, 75813, 75818, 75822, 75827, 75832, 75838, 75843, 75849, - 75853, 75858, 75863, 75867, 75872, 75877, 75881, 75886, 75891, 75896, - 75901, 75906, 75911, 75916, 75921, 75926, 75931, 75936, 75941, 75946, - 75951, 75956, 75961, 75966, 75971, 75976, 75980, 75985, 75990, 75995, - 75999, 76003, 76008, 76013, 76018, 76023, 76028, 76033, 76037, 76042, - 76048, 76054, 76059, 76065, 76070, 76076, 76082, 76089, 76095, 76102, - 76107, 76113, 76119, 76124, 76130, 76136, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76141, 76145, 76150, 76155, 76159, 76163, 76167, 76171, 76175, 76179, - 76184, 76188, 0, 0, 0, 0, 0, 0, 76193, 76198, 76202, 76206, 76210, 76214, - 76218, 76222, 76227, 76231, 76236, 76240, 76244, 76248, 76253, 76257, - 76262, 76267, 76272, 76278, 76284, 76291, 76296, 76301, 76307, 76311, - 76316, 76319, 76322, 76326, 0, 0, 76331, 76338, 76344, 76350, 76356, - 76362, 76368, 76374, 76381, 76387, 76394, 76400, 76407, 76414, 76421, - 76428, 76435, 76442, 76449, 76456, 76463, 76470, 76476, 76483, 76489, - 76496, 76503, 76510, 76516, 76523, 76530, 76537, 76543, 76550, 76557, - 76563, 76570, 76576, 76583, 76590, 76596, 76602, 76609, 76615, 76622, - 76629, 76638, 76645, 76652, 76656, 76661, 76666, 76671, 76676, 76681, - 76685, 76690, 76694, 76699, 76704, 76709, 76714, 76719, 76724, 76728, - 76733, 76737, 76742, 76747, 76752, 76757, 76761, 76766, 76771, 76776, - 76782, 76787, 76793, 76799, 76805, 76811, 76817, 76822, 76828, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76832, 76837, 76841, 76845, 76849, 76853, 76857, - 76861, 76865, 76869, 76873, 76877, 76881, 76885, 76889, 76893, 76897, - 76901, 76905, 76909, 76913, 76917, 76921, 76925, 76929, 76933, 76937, - 76941, 76945, 76949, 0, 0, 0, 76953, 76957, 76961, 76965, 76969, 76972, - 76978, 76981, 76985, 76988, 76994, 77000, 77008, 77011, 77015, 77018, - 77021, 77027, 77033, 77037, 77043, 77047, 77051, 77057, 77061, 77067, - 77073, 77077, 77081, 77087, 77091, 77097, 77103, 77107, 77113, 77117, - 77123, 77127, 77130, 77136, 77140, 77146, 77149, 77152, 77156, 77162, - 77166, 77170, 77176, 77182, 77186, 77189, 77195, 77200, 77205, 77210, - 77217, 77222, 77229, 77234, 77241, 77246, 77251, 77256, 77261, 77264, - 77268, 77272, 77277, 77282, 77287, 77292, 77297, 77302, 77307, 77312, - 77319, 77324, 0, 77331, 77334, 77338, 77341, 77344, 77347, 77350, 77353, - 77356, 77360, 77363, 0, 0, 0, 0, 77367, 77374, 77379, 77385, 77391, - 77397, 77403, 77409, 77415, 77422, 77429, 77436, 77443, 77450, 77457, - 77464, 77471, 77478, 77485, 77492, 77498, 77504, 77510, 77516, 77522, - 77528, 77535, 77541, 77548, 77555, 77562, 77569, 77576, 0, 77583, 77587, - 77591, 77595, 77599, 77604, 77608, 77612, 77617, 77622, 77627, 77632, - 77637, 77642, 77647, 77652, 77657, 77662, 77667, 77672, 77677, 77682, - 77687, 77692, 77697, 77702, 77707, 77711, 77716, 77721, 77726, 77731, - 77736, 77740, 77745, 77749, 77754, 77759, 77764, 77769, 77774, 77778, - 77784, 77789, 77795, 77801, 77806, 77812, 77817, 77823, 77829, 77835, - 77840, 77846, 77852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77858, 77864, 77870, - 77876, 77883, 77889, 77895, 77901, 77907, 77913, 77918, 77923, 77929, - 77936, 0, 0, 77943, 77948, 77952, 77956, 77960, 77964, 77968, 77972, - 77977, 77981, 0, 0, 77986, 77992, 77998, 78005, 78013, 78019, 78025, - 78031, 78037, 78043, 78049, 78055, 78061, 78067, 78073, 78079, 78085, - 78091, 78096, 78102, 78108, 78115, 78121, 78127, 78133, 78140, 78147, - 78154, 78160, 78165, 78170, 78176, 78184, 78191, 78198, 78206, 78214, - 78221, 78228, 78235, 78242, 78249, 78256, 78263, 78270, 78277, 78284, - 78291, 78298, 78305, 78312, 78319, 78326, 78333, 78340, 78347, 78354, - 78360, 78366, 78373, 78380, 78387, 78394, 78401, 78408, 78415, 78422, - 78429, 78436, 78443, 78450, 78457, 78464, 78471, 78478, 78485, 78492, - 78499, 78506, 78513, 78520, 78527, 78534, 78540, 78546, 78553, 78559, - 78564, 78570, 78575, 78580, 78585, 78592, 78598, 78604, 78610, 78616, - 78622, 78628, 78634, 78642, 78650, 78658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78666, 78672, 78678, 78684, - 78692, 78700, 78706, 78712, 78719, 78726, 78733, 78740, 78747, 78754, - 78761, 78768, 78775, 78783, 78791, 78799, 78807, 78815, 78821, 78829, - 78835, 78843, 78852, 78860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78866, 78870, - 78874, 78878, 78882, 78886, 0, 0, 78890, 78894, 78898, 78902, 78906, - 78910, 0, 0, 78914, 78918, 78922, 78926, 78930, 78934, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 78938, 78942, 78946, 78950, 78954, 78958, 78962, 0, 78966, - 78970, 78974, 78978, 78982, 78986, 78990, 0, 78994, 79001, 79007, 79013, - 79019, 79026, 79033, 79042, 79053, 79063, 79072, 79080, 79088, 79096, - 79102, 79110, 79117, 79124, 79133, 79144, 79152, 79162, 79168, 79178, - 79187, 79192, 79200, 79209, 79214, 79223, 79230, 79240, 79252, 79257, - 79264, 79271, 79276, 79286, 79296, 79306, 79316, 79331, 79344, 79355, - 79363, 79368, 79379, 79388, 79395, 79402, 79408, 79414, 79419, 79426, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 79432, 79436, 79440, 79444, 79448, 79452, - 79457, 79462, 79466, 79471, 79476, 79481, 79486, 79491, 79495, 79500, - 79505, 79510, 79515, 79520, 79525, 79530, 79535, 79540, 79545, 79550, - 79554, 79559, 79564, 79569, 79574, 79579, 79584, 79589, 79594, 79599, - 79604, 79609, 79614, 79619, 79624, 79629, 79634, 79639, 79644, 79649, - 79653, 79658, 79663, 79668, 79673, 79678, 79683, 79688, 79693, 79698, - 79703, 79708, 79713, 79718, 79723, 79728, 79733, 79738, 79743, 79748, - 79753, 79758, 79763, 79768, 79773, 79778, 79783, 79788, 79793, 79798, - 79803, 79808, 79813, 79818, 79822, 79829, 79836, 79843, 79850, 79856, - 79863, 79870, 79877, 79884, 79891, 79898, 79905, 79912, 79919, 79926, - 79932, 79939, 79946, 79953, 79960, 79967, 79974, 79981, 79988, 79995, - 80002, 80009, 80018, 80027, 80036, 80045, 80054, 80063, 80072, 80081, - 80089, 80097, 80105, 80113, 80121, 80129, 80137, 80145, 80151, 80159, 0, - 0, 80167, 80174, 80180, 80186, 80192, 80198, 80204, 80210, 80217, 80223, + 0, 0, 75798, 75805, 75812, 75818, 75826, 75834, 75842, 75850, 75858, + 75866, 75872, 75878, 75885, 75891, 75897, 75903, 75910, 75917, 75924, + 75931, 75938, 75945, 75952, 75959, 75966, 75973, 75980, 75987, 75994, + 76001, 76007, 76014, 76021, 76028, 76035, 76042, 76049, 76056, 76063, + 76070, 76077, 76084, 76091, 76098, 76105, 76112, 76119, 76126, 76133, + 76141, 76149, 76157, 76165, 0, 0, 0, 0, 76173, 76181, 76189, 76197, + 76205, 76213, 76221, 76227, 76233, 76239, 0, 0, 0, 0, 0, 0, 76245, 76249, + 76254, 76259, 76264, 76269, 76274, 76279, 76284, 76289, 76294, 76299, + 76303, 76307, 76312, 76317, 76321, 76326, 76331, 76336, 76341, 76346, + 76351, 76356, 76360, 76365, 76369, 76374, 76379, 76383, 76387, 76391, + 76395, 76399, 76403, 76408, 76413, 76418, 76423, 76428, 76435, 76441, + 76446, 76451, 76456, 76461, 76467, 76474, 76480, 76487, 76494, 76501, + 76506, 76513, 76519, 76524, 0, 0, 0, 0, 0, 0, 0, 0, 76530, 76535, 76540, + 76544, 76549, 76553, 76558, 76562, 76567, 76572, 76578, 76583, 76589, + 76593, 76598, 76603, 76607, 76612, 76617, 76621, 76626, 76631, 76636, + 76641, 76646, 76651, 76656, 76661, 76666, 76671, 76676, 76681, 76686, + 76691, 76696, 76701, 76706, 76711, 76715, 76719, 76724, 76729, 76734, + 76738, 76742, 76747, 76751, 76756, 76761, 76766, 76771, 76775, 76780, + 76786, 76792, 76797, 76803, 76808, 76814, 76820, 76827, 76833, 76840, + 76845, 76851, 76857, 76862, 76868, 76874, 76879, 0, 0, 0, 0, 0, 0, 0, 0, + 76884, 76888, 76893, 76898, 76902, 76906, 76910, 76914, 76918, 76922, + 76927, 76931, 0, 0, 0, 0, 0, 0, 76936, 76941, 76945, 76949, 76953, 76957, + 76961, 76965, 76970, 76974, 76979, 76983, 76987, 76991, 76995, 76999, + 77004, 77009, 77014, 77020, 77026, 77033, 77038, 77043, 77049, 77053, + 77058, 77061, 77064, 77068, 0, 0, 77073, 77080, 77086, 77092, 77098, + 77104, 77110, 77116, 77123, 77129, 77136, 77142, 77149, 77156, 77163, + 77170, 77177, 77184, 77191, 77198, 77205, 77211, 77217, 77224, 77230, + 77237, 77244, 77251, 77257, 77263, 77270, 77277, 77283, 77290, 77297, + 77303, 77310, 77316, 77323, 77330, 77336, 77342, 77349, 77355, 77362, + 77369, 77378, 77385, 77392, 77396, 77401, 77406, 77411, 77416, 77420, + 77424, 77429, 77433, 77438, 77443, 77448, 77453, 77458, 77462, 77466, + 77471, 77475, 77480, 77485, 77490, 77495, 77499, 77504, 77509, 77514, + 77520, 77525, 77531, 77537, 77543, 77549, 77555, 77560, 77566, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 77570, 77575, 77579, 77583, 77587, 77591, 77595, + 77599, 77603, 77607, 77611, 77615, 77619, 77623, 77627, 77631, 77635, + 77639, 77643, 77647, 77651, 77655, 77659, 77663, 77667, 77671, 77675, + 77679, 77683, 77687, 0, 0, 0, 77691, 77696, 77701, 77706, 77711, 77715, + 77722, 77726, 77731, 77735, 77742, 77749, 77758, 77762, 77767, 77771, + 77775, 77782, 77789, 77794, 77801, 77806, 77811, 77818, 77823, 77830, + 77837, 77842, 77847, 77854, 77859, 77866, 77873, 77878, 77885, 77890, + 77897, 77901, 77905, 77912, 77917, 77924, 77928, 77932, 77937, 77944, + 77948, 77953, 77960, 77967, 77972, 77976, 77983, 77989, 77995, 78001, + 78009, 78015, 78023, 78029, 78037, 78043, 78049, 78055, 78061, 78065, + 78070, 78075, 78081, 78087, 78093, 78099, 78105, 78111, 78117, 78123, + 78131, 78137, 0, 78145, 78149, 78154, 78158, 78162, 78166, 78170, 78174, + 78178, 78183, 78187, 0, 0, 0, 0, 78192, 78200, 78206, 78212, 78218, + 78224, 78230, 78236, 78242, 78249, 78256, 78263, 78270, 78277, 78284, + 78291, 78298, 78305, 78312, 78319, 78325, 78331, 78337, 78343, 78349, + 78355, 78362, 78368, 78375, 78382, 78389, 78396, 78403, 0, 78410, 78414, + 78418, 78422, 78426, 78431, 78435, 78439, 78444, 78449, 78454, 78459, + 78464, 78469, 78474, 78479, 78484, 78489, 78494, 78499, 78504, 78509, + 78514, 78519, 78524, 78528, 78533, 78537, 78542, 78547, 78552, 78557, + 78562, 78566, 78571, 78575, 78580, 78584, 78589, 78594, 78599, 78603, + 78609, 78614, 78620, 78626, 78631, 78637, 78642, 78648, 78654, 78660, + 78665, 78671, 78676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78682, 78688, 78694, + 78700, 78707, 78713, 78719, 78725, 78731, 78737, 78742, 78747, 78753, + 78760, 0, 0, 78767, 78772, 78776, 78780, 78784, 78788, 78792, 78796, + 78801, 78805, 0, 0, 78810, 78816, 78822, 78829, 78837, 78843, 78849, + 78855, 78861, 78867, 78873, 78879, 78885, 78891, 78897, 78903, 78908, + 78914, 78919, 78925, 78931, 78938, 78944, 78950, 78956, 78963, 78970, + 78977, 78983, 78988, 78993, 78999, 79007, 79014, 79021, 79029, 79037, + 79044, 79051, 79058, 79065, 79072, 79079, 79086, 79093, 79100, 79107, + 79114, 79121, 79128, 79135, 79142, 79149, 79156, 79163, 79170, 79177, + 79183, 79189, 79196, 79203, 79210, 79217, 79224, 79231, 79238, 79245, + 79252, 79259, 79266, 79273, 79280, 79287, 79294, 79301, 79308, 79315, + 79322, 79329, 79336, 79343, 79350, 79357, 79363, 79369, 79376, 79382, + 79387, 79393, 79398, 79403, 79408, 79415, 79421, 79427, 79433, 79439, + 79445, 79451, 79457, 79465, 79473, 79481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79489, 79495, 79501, 79507, + 79515, 79523, 79529, 79535, 79542, 79549, 79556, 79563, 79570, 79577, + 79584, 79591, 79598, 79606, 79614, 79622, 79630, 79638, 79644, 79652, + 79658, 79666, 79675, 79683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79689, 79693, + 79697, 79701, 79705, 79709, 0, 0, 79713, 79717, 79721, 79725, 79729, + 79733, 0, 0, 79737, 79741, 79745, 79749, 79753, 79757, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 79761, 79765, 79769, 79773, 79777, 79781, 79785, 0, 79789, + 79793, 79797, 79801, 79805, 79809, 79813, 0, 79817, 79824, 79830, 79836, + 79842, 79849, 79856, 79865, 79877, 79887, 79896, 79904, 79912, 79920, + 79926, 79934, 79941, 79948, 79957, 79968, 79976, 79986, 79992, 80002, + 80011, 80016, 80024, 80033, 80038, 80047, 80054, 80064, 80076, 80081, + 80088, 80095, 80100, 80110, 80120, 80130, 80140, 80155, 80168, 80179, + 80187, 80192, 80204, 80213, 80220, 80227, 80233, 80239, 80244, 80251, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 80257, 80261, 80265, 80269, 80273, 80277, + 80282, 80287, 80291, 80296, 80301, 80306, 80311, 80316, 80320, 80325, + 80330, 80335, 80340, 80345, 80349, 80354, 80359, 80364, 80369, 80374, + 80378, 80383, 80388, 80393, 80398, 80402, 80407, 80412, 80417, 80422, + 80427, 80432, 80437, 80442, 80447, 80452, 80457, 80462, 80467, 80472, + 80477, 80482, 80487, 80492, 80497, 80502, 80507, 80512, 80517, 80522, + 80527, 80532, 80537, 80542, 80547, 80552, 80557, 80562, 80567, 80572, + 80577, 80582, 80587, 80592, 80597, 80602, 80607, 80612, 80617, 80622, + 80627, 80632, 80637, 80642, 80646, 80653, 80660, 80667, 80674, 80680, + 80686, 80693, 80700, 80707, 80714, 80721, 80728, 80735, 80742, 80749, + 80755, 80762, 80769, 80776, 80783, 80790, 80797, 80804, 80811, 80818, + 80825, 80832, 80841, 80850, 80859, 80868, 80877, 80886, 80895, 80904, + 80912, 80920, 80928, 80936, 80944, 80952, 80960, 80968, 80974, 80982, 0, + 0, 80990, 80997, 81003, 81009, 81015, 81021, 81027, 81033, 81040, 81046, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18300,624 +19419,657 @@ static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80230, 80234, 80238, 80242, - 80246, 80250, 80254, 80258, 80262, 80266, 80270, 80274, 80278, 80282, - 80286, 80290, 80294, 80298, 80302, 80306, 80310, 80314, 80318, 0, 0, 0, - 0, 80322, 80326, 80330, 80334, 80338, 80342, 80346, 80350, 80354, 80358, - 80362, 80366, 80370, 80374, 80378, 80382, 80386, 80390, 80394, 80398, - 80402, 80406, 80410, 80414, 80418, 80422, 80426, 80430, 80434, 80438, - 80442, 80446, 80450, 80454, 80458, 80462, 80466, 80470, 80474, 80478, - 80482, 80486, 80490, 80494, 80498, 80502, 80506, 80510, 80514, 0, 0, 0, - 0, 80518, 80522, 80526, 80530, 80534, 80538, 80542, 80546, 80550, 80554, - 80558, 80562, 80566, 80570, 80574, 80578, 80582, 80586, 80590, 80594, - 80598, 80602, 80606, 80610, 80614, 80618, 80622, 80626, 80630, 80634, - 80638, 80642, 80646, 80650, 80654, 80658, 80662, 80666, 80670, 80674, - 80678, 80682, 80686, 80690, 80694, 80698, 80702, 80706, 80710, 80714, - 80718, 80722, 80726, 80730, 80734, 80738, 80742, 80746, 80750, 80754, - 80758, 80762, 80766, 80770, 80774, 80778, 80782, 80786, 80790, 80794, - 80798, 80802, 80806, 80810, 80814, 80818, 80822, 80826, 80830, 80834, - 80838, 80842, 80846, 80850, 80854, 80858, 80862, 80866, 80870, 80874, - 80878, 80882, 80886, 80890, 80894, 80898, 80902, 80906, 80910, 80914, - 80918, 80922, 80926, 80930, 80934, 80938, 80942, 80946, 80950, 80954, - 80958, 80962, 80966, 80970, 80974, 80978, 80982, 80986, 80990, 80994, - 80998, 81002, 81006, 81010, 81014, 81018, 81022, 81026, 81030, 81034, - 81038, 81042, 81046, 81050, 81054, 81058, 81062, 81066, 81070, 81074, - 81078, 81082, 81086, 81090, 81094, 81098, 81102, 81106, 81110, 81114, - 81118, 81122, 81126, 81130, 81134, 81138, 81142, 81146, 81150, 81154, - 81158, 81162, 81166, 81170, 81174, 81178, 81182, 81186, 81190, 81194, - 81198, 81202, 81206, 81210, 81214, 81218, 81222, 81226, 81230, 81234, - 81238, 81242, 81246, 81250, 81254, 81258, 81262, 81266, 81270, 81274, - 81278, 81282, 81286, 81290, 81294, 81298, 81302, 81306, 81310, 81314, - 81318, 81322, 81326, 81330, 81334, 81338, 81342, 81346, 81350, 81354, - 81358, 81362, 81366, 81370, 81374, 81378, 81382, 81386, 81390, 81394, - 81398, 81402, 81406, 81410, 81414, 81418, 81422, 81426, 81430, 81434, - 81438, 81442, 81446, 81450, 81454, 81458, 81462, 81466, 81470, 81474, - 81478, 81482, 81486, 81490, 81494, 81498, 81502, 81506, 81510, 81514, - 81518, 81522, 81526, 81530, 81534, 81538, 81542, 81546, 81550, 81554, - 81558, 81562, 81566, 81570, 81574, 81578, 81582, 81586, 81590, 81594, - 81598, 81602, 81606, 81610, 81614, 81618, 81622, 81626, 81630, 81634, - 81638, 81642, 81646, 81650, 81654, 81658, 81662, 81666, 81670, 81674, - 81678, 81682, 81686, 81690, 81694, 81698, 81702, 81706, 81710, 81714, - 81718, 81722, 81726, 81730, 81734, 81738, 81742, 81746, 81750, 81754, - 81758, 81762, 81766, 81770, 81774, 81778, 81782, 81786, 81790, 81794, - 81798, 81802, 81806, 81810, 81814, 81818, 81822, 81826, 81830, 81834, - 81838, 81842, 81846, 81850, 81854, 81858, 81862, 81866, 81870, 81874, - 81878, 81882, 81886, 81890, 81894, 81898, 81902, 81906, 81910, 81914, - 81918, 81922, 81926, 81930, 81934, 81938, 81942, 81946, 81950, 81954, - 81958, 81962, 81966, 81970, 81974, 81978, 0, 0, 81982, 81986, 81990, - 81994, 81998, 82002, 82006, 82010, 82014, 82018, 82022, 82026, 82030, - 82034, 82038, 82042, 82046, 82050, 82054, 82058, 82062, 82066, 82070, - 82074, 82078, 82082, 82086, 82090, 82094, 82098, 82102, 82106, 82110, - 82114, 82118, 82122, 82126, 82130, 82134, 82138, 82142, 82146, 82150, - 82154, 82158, 82162, 82166, 82170, 82174, 82178, 82182, 82186, 82190, - 82194, 82198, 82202, 82206, 82210, 82214, 82218, 82222, 82226, 82230, - 82234, 82238, 82242, 82246, 82250, 82254, 82258, 82262, 82266, 82270, - 82274, 82278, 82282, 82286, 82290, 82294, 82298, 82302, 82306, 82310, - 82314, 82318, 82322, 82326, 82330, 82334, 82338, 82342, 82346, 82350, - 82354, 82358, 82362, 82366, 82370, 82374, 82378, 82382, 82386, 82390, - 82394, 82398, 82402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82406, - 82411, 82416, 82421, 82426, 82431, 82439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 82444, 82451, 82458, 82465, 82472, 0, 0, 0, 0, 0, 82479, 82486, - 82493, 82503, 82509, 82515, 82521, 82527, 82533, 82539, 82546, 82552, - 82558, 82564, 82573, 82582, 82594, 82606, 82612, 82618, 82624, 82631, - 82638, 82645, 82652, 82659, 0, 82666, 82673, 82680, 82688, 82695, 0, - 82702, 0, 82709, 82716, 0, 82723, 82731, 0, 82738, 82745, 82752, 82759, - 82766, 82773, 82780, 82787, 82794, 82801, 82806, 82813, 82820, 82826, - 82832, 82838, 82844, 82850, 82856, 82862, 82868, 82874, 82880, 82886, - 82892, 82898, 82904, 82910, 82916, 82922, 82928, 82934, 82940, 82946, - 82952, 82958, 82964, 82970, 82976, 82982, 82988, 82994, 83000, 83006, - 83012, 83018, 83024, 83030, 83036, 83042, 83048, 83054, 83060, 83066, - 83072, 83078, 83084, 83090, 83096, 83102, 83108, 83114, 83120, 83126, - 83132, 83138, 83144, 83150, 83156, 83162, 83168, 83174, 83180, 83186, - 83192, 83198, 83204, 83210, 83216, 83222, 83228, 83234, 83240, 83246, - 83252, 83258, 83264, 83270, 83276, 83284, 83292, 83298, 83304, 83310, - 83316, 83325, 83334, 83342, 83350, 83358, 83366, 83374, 83382, 83390, - 83398, 83405, 83412, 83423, 83434, 83438, 83442, 83447, 83452, 83457, - 83462, 83470, 83478, 83484, 83490, 83497, 83504, 83511, 83515, 83521, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83527, 83533, 83539, - 83545, 83551, 83556, 83561, 83567, 83573, 83579, 83585, 83594, 83600, - 83606, 83614, 83622, 83630, 83638, 83643, 83648, 83653, 83658, 83671, - 83684, 83695, 83706, 83718, 83730, 83742, 83754, 83765, 83776, 83788, - 83800, 83812, 83824, 83835, 83846, 83857, 83874, 83891, 83908, 83915, - 83922, 83929, 83936, 83947, 83958, 83969, 83982, 83993, 84001, 84009, - 84018, 84026, 84036, 84044, 84052, 84060, 84069, 84077, 84087, 84095, - 84103, 84111, 84121, 84129, 84136, 84143, 84150, 84157, 84165, 84173, - 84181, 84189, 84197, 84206, 84214, 84222, 84230, 84238, 84246, 84255, - 84263, 84271, 84279, 84287, 84295, 84303, 84311, 84319, 84327, 84335, - 84344, 84352, 84362, 84370, 84378, 84386, 84396, 84404, 84412, 84420, - 84428, 84437, 84446, 84454, 84464, 84472, 84480, 84488, 84497, 84505, - 84515, 84523, 84530, 84537, 84545, 84552, 84561, 84568, 84576, 84584, - 84593, 84601, 84611, 84619, 84627, 84635, 84645, 84653, 84660, 84667, - 84675, 84682, 84691, 84698, 84708, 84718, 84729, 84738, 84747, 84756, - 84765, 84774, 84784, 84796, 84808, 84819, 84831, 84844, 84855, 84864, - 84873, 84881, 84890, 84900, 84908, 84917, 84926, 84934, 84943, 84953, - 84961, 84970, 84979, 84987, 84996, 85006, 85014, 85024, 85032, 85042, - 85050, 85058, 85067, 85075, 85085, 85093, 85101, 85111, 85119, 85126, - 85133, 85142, 85151, 85159, 85168, 85178, 85186, 85197, 85205, 85213, - 85220, 85228, 85237, 85244, 85255, 85266, 85278, 85289, 85301, 85309, - 85317, 85326, 85334, 85343, 85351, 85359, 85368, 85376, 85385, 85393, - 85400, 85407, 85414, 85421, 85429, 85437, 85445, 85453, 85462, 85470, - 85478, 85487, 85495, 85503, 85511, 85520, 85528, 85536, 85544, 85552, - 85560, 85568, 85576, 85584, 85592, 85601, 85609, 85617, 85625, 85633, - 85641, 85650, 85659, 85667, 85675, 85683, 85692, 85700, 85709, 85716, - 85723, 85731, 85738, 85746, 85754, 85763, 85771, 85780, 85788, 85796, - 85806, 85813, 85820, 85828, 85835, 85843, 85854, 85866, 85874, 85883, - 85891, 85900, 85908, 85917, 85925, 85934, 85942, 85951, 85960, 85968, - 85976, 85984, 85993, 86000, 86008, 86017, 86026, 86035, 86045, 86053, - 86063, 86071, 86081, 86089, 86099, 86107, 86117, 86125, 86134, 86141, - 86150, 86157, 86167, 86175, 86185, 86193, 86203, 86211, 86219, 86227, - 86236, 86244, 86253, 86262, 86271, 86280, 86290, 86298, 86308, 86316, - 86326, 86334, 86344, 86352, 86362, 86370, 86379, 86386, 86395, 86402, - 86412, 86420, 86430, 86438, 86448, 86456, 86464, 86472, 86481, 86489, - 86498, 86507, 86516, 86525, 86533, 86541, 86550, 86558, 86567, 86576, - 86584, 86592, 86600, 86609, 86617, 86625, 86634, 86642, 86650, 86658, - 86666, 86671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86676, - 86686, 86696, 86706, 86716, 86727, 86737, 86747, 86758, 86767, 86776, - 86785, 86796, 86806, 86816, 86828, 86838, 86848, 86858, 86868, 86878, - 86888, 86898, 86908, 86918, 86928, 86938, 86949, 86960, 86970, 86980, - 86992, 87003, 87014, 87024, 87034, 87044, 87054, 87064, 87074, 87084, - 87096, 87106, 87116, 87128, 87139, 87150, 87160, 87170, 87180, 87190, - 87202, 87212, 87222, 87233, 87244, 87254, 87264, 87273, 87282, 87291, - 87300, 87309, 87319, 0, 0, 87329, 87339, 87349, 87359, 87369, 87381, - 87391, 87401, 87413, 87423, 87435, 87444, 87453, 87464, 87474, 87486, - 87497, 87510, 87520, 87532, 87541, 87552, 87563, 87576, 87586, 87596, - 87606, 87616, 87626, 87635, 87644, 87653, 87662, 87672, 87682, 87692, - 87702, 87712, 87722, 87732, 87742, 87752, 87762, 87772, 87782, 87791, - 87800, 87809, 87819, 87829, 87839, 87849, 87859, 87870, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81053, 81057, 81061, 81065, + 81069, 81073, 81077, 81081, 81085, 81089, 81093, 81097, 81101, 81105, + 81109, 81113, 81117, 81121, 81125, 81129, 81133, 81137, 81141, 0, 0, 0, + 0, 81145, 81149, 81153, 81157, 81161, 81165, 81169, 81173, 81177, 81181, + 81185, 81189, 81193, 81197, 81201, 81205, 81209, 81213, 81217, 81221, + 81225, 81229, 81233, 81237, 81241, 81245, 81249, 81253, 81257, 81261, + 81265, 81269, 81273, 81277, 81281, 81285, 81289, 81293, 81297, 81301, + 81305, 81309, 81313, 81317, 81321, 81325, 81329, 81333, 81337, 0, 0, 0, + 0, 81341, 81345, 81349, 81353, 81357, 81361, 81365, 81369, 81373, 81377, + 81381, 81385, 81389, 81393, 81397, 81401, 81405, 81409, 81413, 81417, + 81421, 81425, 81429, 81433, 81437, 81441, 81445, 81449, 81453, 81457, + 81461, 81465, 81469, 81473, 81477, 81481, 81485, 81489, 81493, 81497, + 81501, 81505, 81509, 81513, 81517, 81521, 81525, 81529, 81533, 81537, + 81541, 81545, 81549, 81553, 81557, 81561, 81565, 81569, 81573, 81577, + 81581, 81585, 81589, 81593, 81597, 81601, 81605, 81609, 81613, 81617, + 81621, 81625, 81629, 81633, 81637, 81641, 81645, 81649, 81653, 81657, + 81661, 81665, 81669, 81673, 81677, 81681, 81685, 81689, 81693, 81697, + 81701, 81705, 81709, 81713, 81717, 81721, 81725, 81729, 81733, 81737, + 81741, 81745, 81749, 81753, 81757, 81761, 81765, 81769, 81773, 81777, + 81781, 81785, 81789, 81793, 81797, 81801, 81805, 81809, 81813, 81817, + 81821, 81825, 81829, 81833, 81837, 81841, 81845, 81849, 81853, 81857, + 81861, 81865, 81869, 81873, 81877, 81881, 81885, 81889, 81893, 81897, + 81901, 81905, 81909, 81913, 81917, 81921, 81925, 81929, 81933, 81937, + 81941, 81945, 81949, 81953, 81957, 81961, 81965, 81969, 81973, 81977, + 81981, 81985, 81989, 81993, 81997, 82001, 82005, 82009, 82013, 82017, + 82021, 82025, 82029, 82033, 82037, 82041, 82045, 82049, 82053, 82057, + 82061, 82065, 82069, 82073, 82077, 82081, 82085, 82089, 82093, 82097, + 82101, 82105, 82109, 82113, 82117, 82121, 82125, 82129, 82133, 82137, + 82141, 82145, 82149, 82153, 82157, 82161, 82165, 82169, 82173, 82177, + 82181, 82185, 82189, 82193, 82197, 82201, 82205, 82209, 82213, 82217, + 82221, 82225, 82229, 82233, 82237, 82241, 82245, 82249, 82253, 82257, + 82261, 82265, 82269, 82273, 82277, 82281, 82285, 82289, 82293, 82297, + 82301, 82305, 82309, 82313, 82317, 82321, 82325, 82329, 82333, 82337, + 82341, 82345, 82349, 82353, 82357, 82361, 82365, 82369, 82373, 82377, + 82381, 82385, 82389, 82393, 82397, 82401, 82405, 82409, 82413, 82417, + 82421, 82425, 82429, 82433, 82437, 82441, 82445, 82449, 82453, 82457, + 82461, 82465, 82469, 82473, 82477, 82481, 82485, 82489, 82493, 82497, + 82501, 82505, 82509, 82513, 82517, 82521, 82525, 82529, 82533, 82537, + 82541, 82545, 82549, 82553, 82557, 82561, 82565, 82569, 82573, 82577, + 82581, 82585, 82589, 82593, 82597, 82601, 82605, 82609, 82613, 82617, + 82621, 82625, 82629, 82633, 82637, 82641, 82645, 82649, 82653, 82657, + 82661, 82665, 82669, 82673, 82677, 82681, 82685, 82689, 82693, 82697, + 82701, 82705, 82709, 82713, 82717, 82721, 82725, 82729, 82733, 82737, + 82741, 82745, 82749, 82753, 82757, 82761, 82765, 82769, 82773, 82777, + 82781, 82785, 82789, 82793, 82797, 82801, 0, 0, 82805, 82809, 82813, + 82817, 82821, 82825, 82829, 82833, 82837, 82841, 82845, 82849, 82853, + 82857, 82861, 82865, 82869, 82873, 82877, 82881, 82885, 82889, 82893, + 82897, 82901, 82905, 82909, 82913, 82917, 82921, 82925, 82929, 82933, + 82937, 82941, 82945, 82949, 82953, 82957, 82961, 82965, 82969, 82973, + 82977, 82981, 82985, 82989, 82993, 82997, 83001, 83005, 83009, 83013, + 83017, 83021, 83025, 83029, 83033, 83037, 83041, 83045, 83049, 83053, + 83057, 83061, 83065, 83069, 83073, 83077, 83081, 83085, 83089, 83093, + 83097, 83101, 83105, 83109, 83113, 83117, 83121, 83125, 83129, 83133, + 83137, 83141, 83145, 83149, 83153, 83157, 83161, 83165, 83169, 83173, + 83177, 83181, 83185, 83189, 83193, 83197, 83201, 83205, 83209, 83213, + 83217, 83221, 83225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83229, + 83234, 83239, 83244, 83249, 83254, 83262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83267, 83274, 83281, 83288, 83295, 0, 0, 0, 0, 0, 83302, 83309, + 83316, 83326, 83332, 83338, 83344, 83350, 83356, 83362, 83369, 83375, + 83381, 83387, 83396, 83405, 83417, 83429, 83435, 83441, 83447, 83454, + 83461, 83468, 83475, 83482, 0, 83489, 83496, 83503, 83511, 83518, 0, + 83525, 0, 83532, 83539, 0, 83546, 83554, 0, 83561, 83568, 83575, 83582, + 83589, 83596, 83603, 83610, 83617, 83624, 83629, 83636, 83643, 83649, + 83655, 83661, 83667, 83673, 83679, 83685, 83691, 83697, 83703, 83709, + 83715, 83721, 83727, 83733, 83739, 83745, 83751, 83757, 83763, 83769, + 83775, 83781, 83787, 83793, 83799, 83805, 83811, 83817, 83823, 83829, + 83835, 83841, 83847, 83853, 83859, 83865, 83871, 83877, 83883, 83889, + 83895, 83901, 83907, 83913, 83919, 83925, 83931, 83937, 83943, 83949, + 83955, 83961, 83967, 83973, 83979, 83985, 83991, 83997, 84003, 84009, + 84015, 84021, 84027, 84033, 84039, 84045, 84051, 84057, 84063, 84069, + 84075, 84081, 84087, 84093, 84099, 84107, 84115, 84121, 84127, 84133, + 84139, 84148, 84157, 84165, 84173, 84181, 84189, 84197, 84205, 84213, + 84221, 84228, 84235, 84246, 84257, 84261, 84265, 84270, 84275, 84280, + 84285, 84293, 84301, 84307, 84313, 84320, 84327, 84334, 84338, 84344, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84350, 84356, 84362, + 84368, 84374, 84379, 84384, 84390, 84396, 84402, 84408, 84417, 84423, + 84429, 84437, 84445, 84453, 84461, 84466, 84471, 84476, 84481, 84494, + 84507, 84518, 84529, 84541, 84553, 84565, 84577, 84588, 84599, 84611, + 84623, 84635, 84647, 84658, 84669, 84680, 84697, 84714, 84731, 84738, + 84745, 84752, 84759, 84770, 84781, 84792, 84805, 84816, 84824, 84832, + 84841, 84849, 84859, 84867, 84875, 84883, 84892, 84900, 84910, 84918, + 84926, 84934, 84944, 84952, 84959, 84966, 84973, 84980, 84988, 84996, + 85004, 85012, 85020, 85029, 85037, 85045, 85053, 85061, 85069, 85078, + 85086, 85094, 85102, 85110, 85118, 85126, 85134, 85142, 85150, 85158, + 85167, 85175, 85185, 85193, 85201, 85209, 85219, 85227, 85235, 85243, + 85251, 85260, 85269, 85277, 85287, 85295, 85303, 85311, 85320, 85328, + 85338, 85346, 85353, 85360, 85368, 85375, 85384, 85391, 85399, 85407, + 85416, 85424, 85434, 85442, 85450, 85458, 85468, 85476, 85483, 85490, + 85498, 85505, 85514, 85521, 85531, 85541, 85552, 85561, 85570, 85579, + 85588, 85597, 85607, 85619, 85631, 85642, 85654, 85667, 85678, 85687, + 85696, 85704, 85713, 85723, 85731, 85740, 85749, 85757, 85766, 85776, + 85784, 85793, 85802, 85810, 85819, 85829, 85837, 85847, 85855, 85865, + 85873, 85881, 85890, 85898, 85908, 85916, 85924, 85934, 85942, 85949, + 85956, 85965, 85974, 85982, 85991, 86001, 86009, 86020, 86028, 86036, + 86043, 86051, 86060, 86067, 86078, 86089, 86101, 86112, 86124, 86132, + 86140, 86149, 86157, 86166, 86174, 86182, 86191, 86199, 86208, 86216, + 86223, 86230, 86237, 86244, 86252, 86260, 86268, 86276, 86285, 86293, + 86301, 86310, 86318, 86326, 86334, 86343, 86351, 86359, 86367, 86375, + 86383, 86391, 86399, 86407, 86415, 86424, 86432, 86440, 86448, 86456, + 86464, 86473, 86482, 86490, 86498, 86506, 86515, 86523, 86532, 86539, + 86546, 86554, 86561, 86569, 86577, 86586, 86594, 86603, 86611, 86619, + 86629, 86636, 86643, 86651, 86658, 86666, 86677, 86689, 86697, 86706, + 86714, 86723, 86731, 86740, 86748, 86757, 86765, 86774, 86783, 86791, + 86799, 86807, 86816, 86823, 86831, 86840, 86849, 86858, 86868, 86876, + 86886, 86894, 86904, 86912, 86922, 86930, 86940, 86948, 86957, 86964, + 86973, 86980, 86990, 86998, 87008, 87016, 87026, 87034, 87042, 87050, + 87059, 87067, 87076, 87085, 87094, 87103, 87113, 87121, 87131, 87139, + 87149, 87157, 87167, 87175, 87185, 87193, 87202, 87209, 87218, 87225, + 87235, 87243, 87253, 87261, 87271, 87279, 87287, 87295, 87304, 87312, + 87321, 87330, 87339, 87348, 87356, 87364, 87373, 87381, 87390, 87399, + 87407, 87415, 87423, 87432, 87440, 87448, 87457, 87465, 87473, 87481, + 87489, 87494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87499, + 87509, 87519, 87529, 87539, 87550, 87560, 87570, 87581, 87590, 87599, + 87608, 87619, 87629, 87639, 87651, 87661, 87671, 87681, 87691, 87701, + 87711, 87721, 87731, 87741, 87751, 87761, 87772, 87783, 87793, 87803, + 87815, 87826, 87837, 87847, 87857, 87867, 87877, 87887, 87897, 87907, + 87919, 87929, 87939, 87951, 87962, 87973, 87983, 87993, 88003, 88013, + 88025, 88035, 88045, 88056, 88067, 88077, 88087, 88096, 88105, 88114, + 88123, 88132, 88142, 0, 0, 88152, 88162, 88172, 88182, 88192, 88204, + 88214, 88224, 88236, 88246, 88258, 88267, 88276, 88287, 88297, 88309, + 88320, 88333, 88343, 88355, 88364, 88375, 88386, 88399, 88409, 88419, + 88429, 88439, 88449, 88458, 88467, 88476, 88485, 88495, 88505, 88515, + 88525, 88535, 88545, 88555, 88565, 88575, 88585, 88595, 88605, 88614, + 88623, 88632, 88642, 88652, 88662, 88672, 88682, 88693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87880, 87895, 87910, 87916, 87922, 87928, - 87934, 87940, 87946, 87952, 87958, 87966, 87970, 87973, 0, 0, 87981, - 87984, 87987, 87990, 87993, 87996, 87999, 88002, 88005, 88008, 88011, - 88014, 88017, 88020, 88023, 88026, 88029, 88037, 88046, 88057, 88065, - 88073, 88082, 88091, 88102, 88114, 0, 0, 0, 0, 0, 0, 88124, 88129, 88134, - 88141, 88148, 88154, 88160, 88165, 88170, 88175, 88181, 88187, 88193, - 88199, 88205, 88212, 88219, 88229, 88239, 88249, 88258, 88269, 88278, - 88287, 88297, 88307, 88319, 88331, 88342, 88353, 88364, 88375, 88385, - 88395, 88405, 88415, 88426, 88437, 88441, 88446, 88455, 88464, 88468, - 88472, 88476, 88481, 88486, 88491, 88496, 88499, 88503, 0, 88508, 88511, - 88514, 88518, 88522, 88527, 88531, 88535, 88540, 88545, 88552, 88559, - 88562, 88565, 88568, 88571, 88574, 88578, 88582, 0, 88586, 88591, 88595, - 88599, 0, 0, 0, 0, 88604, 88609, 88616, 88621, 88626, 0, 88631, 88636, - 88641, 88646, 88651, 88656, 88661, 88666, 88671, 88676, 88681, 88687, - 88696, 88705, 88714, 88723, 88733, 88743, 88753, 88763, 88772, 88781, - 88790, 88799, 88804, 88809, 88815, 88821, 88827, 88833, 88841, 88849, - 88855, 88861, 88867, 88873, 88879, 88885, 88891, 88897, 88902, 88907, - 88912, 88917, 88922, 88927, 88932, 88937, 88943, 88949, 88955, 88961, - 88967, 88973, 88979, 88985, 88991, 88997, 89003, 89009, 89015, 89021, - 89027, 89033, 89039, 89045, 89051, 89057, 89063, 89069, 89075, 89081, - 89087, 89093, 89099, 89105, 89111, 89117, 89123, 89129, 89135, 89141, - 89147, 89153, 89159, 89165, 89171, 89177, 89183, 89189, 89195, 89201, - 89207, 89213, 89219, 89225, 89231, 89237, 89243, 89249, 89255, 89261, - 89267, 89273, 89279, 89285, 89291, 89297, 89302, 89307, 89312, 89317, - 89323, 89329, 89335, 89341, 89347, 89353, 89359, 89365, 89371, 89377, - 89384, 89391, 89396, 89401, 89406, 89411, 89423, 89435, 89447, 89459, - 89472, 89485, 89493, 0, 0, 89501, 0, 89509, 89513, 89517, 89520, 89524, - 89528, 89531, 89534, 89538, 89542, 89545, 89548, 89551, 89554, 89559, - 89562, 89566, 89569, 89572, 89575, 89578, 89581, 89584, 89588, 89591, - 89595, 89598, 89601, 89605, 89609, 89613, 89617, 89622, 89627, 89633, - 89639, 89645, 89650, 89656, 89662, 89668, 89673, 89679, 89685, 89690, - 89696, 89702, 89707, 89713, 89719, 89724, 89729, 89735, 89740, 89746, - 89752, 89758, 89764, 89770, 89774, 89779, 89783, 89788, 89792, 89797, - 89802, 89808, 89814, 89820, 89825, 89831, 89837, 89843, 89848, 89854, - 89860, 89865, 89871, 89877, 89882, 89888, 89894, 89899, 89904, 89910, - 89915, 89921, 89927, 89933, 89939, 89945, 89950, 89954, 89959, 89962, - 89967, 89972, 89978, 89983, 89988, 89992, 89997, 90002, 90007, 90012, - 90017, 90022, 90027, 90032, 90038, 90044, 90050, 90058, 90062, 90066, - 90070, 90074, 90078, 90082, 90087, 90092, 90097, 90102, 90107, 90112, - 90117, 90122, 90127, 90132, 90137, 90142, 90147, 90151, 90156, 90161, - 90166, 90171, 90176, 90180, 90185, 90190, 90195, 90200, 90204, 90209, - 90214, 90219, 90224, 90228, 90233, 90238, 90243, 90248, 90253, 90258, - 90263, 90268, 90273, 90280, 90287, 90291, 90296, 90301, 90306, 90311, - 90316, 90321, 90326, 90331, 90336, 90341, 90346, 90351, 90356, 90361, - 90366, 90371, 90376, 90381, 90386, 90391, 90396, 90401, 90406, 90411, - 90416, 90421, 90426, 90431, 90436, 0, 0, 0, 90441, 90445, 90450, 90454, - 90459, 90464, 0, 0, 90468, 90473, 90478, 90482, 90487, 90492, 0, 0, - 90497, 90502, 90506, 90511, 90516, 90521, 0, 0, 90526, 90531, 90536, 0, - 0, 0, 90540, 90544, 90548, 90552, 90555, 90559, 90563, 0, 90567, 90573, - 90576, 90579, 90582, 90585, 90589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90593, - 90599, 90605, 90611, 90617, 0, 0, 90621, 90627, 90633, 90639, 90645, - 90651, 90658, 90665, 90672, 90679, 90686, 90693, 0, 90700, 90707, 90714, - 90720, 90727, 90734, 90741, 90748, 90754, 90761, 90768, 90775, 90782, - 90789, 90796, 90803, 90810, 90817, 90823, 90830, 90837, 90844, 90851, - 90858, 90865, 90872, 0, 90879, 90886, 90893, 90900, 90907, 90914, 90921, - 90928, 90935, 90942, 90949, 90956, 90963, 90970, 90976, 90983, 90990, - 90997, 91004, 0, 91011, 91018, 0, 91025, 91032, 91039, 91046, 91053, - 91060, 91067, 91074, 91081, 91088, 91095, 91102, 91109, 91116, 91123, 0, - 0, 91129, 91134, 91139, 91144, 91149, 91154, 91159, 91164, 91169, 91174, - 91179, 91184, 91189, 91194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91199, 91206, - 91213, 91220, 91227, 91234, 91241, 91248, 91255, 91262, 91269, 91276, - 91283, 91290, 91297, 91304, 91311, 91318, 91325, 91332, 91340, 91348, - 91355, 91362, 91367, 91375, 91383, 91390, 91397, 91402, 91409, 91414, - 91419, 91426, 91431, 91436, 91441, 91449, 91454, 91459, 91466, 91471, - 91476, 91483, 91490, 91495, 91500, 91505, 91510, 91515, 91520, 91525, - 91530, 91535, 91542, 91547, 91554, 91559, 91564, 91569, 91574, 91579, - 91584, 91589, 91594, 91599, 91604, 91609, 91616, 91623, 91630, 91637, - 91643, 91648, 91655, 91660, 91665, 91674, 91681, 91690, 91697, 91702, - 91707, 91715, 91720, 91725, 91730, 91735, 91740, 91747, 91752, 91757, - 91762, 91767, 91772, 91779, 91786, 91793, 91800, 91807, 91814, 91821, - 91828, 91835, 91842, 91849, 91856, 91863, 91870, 91877, 91884, 91891, - 91898, 91905, 91912, 91919, 91926, 91933, 91940, 91947, 91954, 91961, - 91968, 0, 0, 0, 0, 0, 91975, 91983, 91991, 0, 0, 0, 0, 91996, 92000, - 92004, 92008, 92012, 92016, 92020, 92025, 92029, 92034, 92039, 92044, - 92049, 92054, 92059, 92064, 92069, 92074, 92079, 92085, 92091, 92097, - 92104, 92111, 92118, 92125, 92132, 92139, 92145, 92151, 92157, 92164, - 92171, 92178, 92185, 92192, 92199, 92206, 92213, 92220, 92227, 92234, - 92241, 92248, 92255, 0, 0, 0, 92262, 92270, 92278, 92286, 92294, 92302, - 92312, 92322, 92330, 92338, 92346, 92354, 92362, 92368, 92375, 92384, - 92393, 92402, 92411, 92420, 92429, 92439, 92450, 92460, 92471, 92480, - 92489, 92498, 92508, 92519, 92529, 92540, 92551, 92560, 92568, 92574, - 92580, 92586, 92592, 92600, 92608, 92614, 92621, 92631, 92638, 92645, - 92652, 92659, 92666, 92676, 92683, 92690, 92698, 92706, 92715, 92724, - 92733, 92742, 92751, 92759, 92768, 92777, 92786, 92790, 92797, 92802, - 92807, 92811, 92815, 92819, 92823, 92828, 92833, 92839, 92845, 92849, - 92855, 92859, 92863, 92867, 92871, 92875, 92879, 92885, 92889, 92894, 0, - 0, 0, 92898, 92903, 92908, 92913, 92918, 92925, 92930, 92935, 92940, - 92945, 92950, 92955, 0, 0, 0, 0, 92960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88703, 88718, 88733, 88739, 88745, 88751, + 88757, 88763, 88769, 88775, 88781, 88789, 88793, 88796, 0, 0, 88804, + 88807, 88810, 88813, 88816, 88819, 88822, 88825, 88828, 88831, 88834, + 88837, 88840, 88843, 88846, 88849, 88852, 88860, 88869, 88880, 88888, + 88896, 88905, 88914, 88925, 88937, 0, 0, 0, 0, 0, 0, 88947, 88952, 88957, + 88964, 88971, 88977, 88983, 88988, 88993, 88998, 89004, 89010, 89016, + 89022, 89028, 89035, 89042, 89052, 89062, 89072, 89081, 89092, 89101, + 89110, 89120, 89130, 89142, 89154, 89165, 89176, 89187, 89198, 89208, + 89218, 89228, 89238, 89249, 89260, 89264, 89269, 89278, 89287, 89291, + 89295, 89299, 89304, 89309, 89314, 89319, 89322, 89326, 0, 89331, 89334, + 89337, 89341, 89345, 89350, 89354, 89358, 89363, 89368, 89375, 89382, + 89385, 89388, 89391, 89394, 89397, 89401, 89405, 0, 89409, 89414, 89418, + 89422, 0, 0, 0, 0, 89427, 89432, 89439, 89444, 89449, 0, 89454, 89459, + 89464, 89469, 89474, 89479, 89484, 89489, 89494, 89499, 89504, 89510, + 89519, 89528, 89537, 89546, 89556, 89566, 89576, 89586, 89595, 89604, + 89613, 89622, 89627, 89632, 89638, 89644, 89650, 89656, 89664, 89672, + 89678, 89684, 89690, 89696, 89702, 89708, 89714, 89720, 89725, 89730, + 89735, 89740, 89745, 89750, 89755, 89760, 89766, 89772, 89778, 89784, + 89790, 89796, 89802, 89808, 89814, 89820, 89826, 89832, 89838, 89844, + 89850, 89856, 89862, 89868, 89874, 89880, 89886, 89892, 89898, 89904, + 89910, 89916, 89922, 89928, 89934, 89940, 89946, 89952, 89958, 89964, + 89970, 89976, 89982, 89988, 89994, 90000, 90006, 90012, 90018, 90024, + 90030, 90036, 90042, 90048, 90054, 90060, 90066, 90072, 90078, 90084, + 90090, 90096, 90102, 90108, 90114, 90120, 90125, 90130, 90135, 90140, + 90146, 90152, 90158, 90164, 90170, 90176, 90182, 90188, 90194, 90200, + 90207, 90214, 90219, 90224, 90229, 90234, 90246, 90258, 90270, 90282, + 90295, 90308, 90316, 0, 0, 90324, 0, 90332, 90336, 90340, 90343, 90347, + 90351, 90354, 90357, 90361, 90365, 90368, 90371, 90374, 90377, 90382, + 90385, 90389, 90392, 90395, 90398, 90401, 90404, 90407, 90411, 90414, + 90418, 90421, 90424, 90428, 90432, 90436, 90440, 90445, 90450, 90456, + 90462, 90468, 90473, 90479, 90485, 90491, 90496, 90502, 90508, 90513, + 90519, 90525, 90530, 90536, 90542, 90547, 90553, 90559, 90564, 90570, + 90576, 90582, 90588, 90594, 90598, 90603, 90607, 90612, 90616, 90621, + 90626, 90632, 90638, 90644, 90649, 90655, 90661, 90667, 90672, 90678, + 90684, 90689, 90695, 90701, 90706, 90712, 90718, 90723, 90729, 90735, + 90740, 90746, 90752, 90758, 90764, 90770, 90775, 90779, 90784, 90787, + 90792, 90797, 90803, 90808, 90813, 90817, 90822, 90827, 90832, 90837, + 90842, 90847, 90852, 90857, 90863, 90869, 90875, 90883, 90887, 90891, + 90895, 90899, 90903, 90907, 90912, 90917, 90922, 90927, 90932, 90937, + 90942, 90947, 90952, 90957, 90962, 90967, 90972, 90976, 90980, 90985, + 90990, 90995, 91000, 91004, 91009, 91014, 91019, 91024, 91028, 91033, + 91038, 91043, 91048, 91052, 91057, 91062, 91067, 91072, 91077, 91082, + 91087, 91092, 91097, 91104, 91111, 91115, 91120, 91125, 91130, 91135, + 91140, 91145, 91150, 91155, 91160, 91165, 91170, 91175, 91180, 91185, + 91190, 91195, 91200, 91205, 91210, 91215, 91220, 91225, 91230, 91235, + 91240, 91245, 91250, 91255, 91260, 0, 0, 0, 91265, 91269, 91274, 91278, + 91283, 91288, 0, 0, 91292, 91297, 91302, 91306, 91311, 91316, 0, 0, + 91321, 91326, 91330, 91335, 91340, 91345, 0, 0, 91350, 91355, 91360, 0, + 0, 0, 91364, 91368, 91372, 91376, 91379, 91383, 91387, 0, 91391, 91397, + 91400, 91403, 91406, 91409, 91413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91417, + 91423, 91429, 91435, 91441, 0, 0, 91445, 91451, 91457, 91463, 91469, + 91475, 91482, 91489, 91496, 91503, 91510, 91517, 0, 91524, 91531, 91538, + 91544, 91551, 91558, 91565, 91572, 91578, 91585, 91592, 91599, 91606, + 91612, 91619, 91626, 91633, 91640, 91646, 91653, 91660, 91667, 91674, + 91681, 91688, 91695, 0, 91702, 91709, 91716, 91723, 91730, 91737, 91744, + 91751, 91758, 91765, 91772, 91779, 91786, 91793, 91799, 91806, 91813, + 91820, 91827, 0, 91834, 91841, 0, 91848, 91855, 91862, 91869, 91876, + 91883, 91890, 91897, 91904, 91911, 91918, 91925, 91932, 91939, 91946, 0, + 0, 91952, 91957, 91962, 91967, 91972, 91977, 91982, 91987, 91992, 91997, + 92002, 92007, 92012, 92017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92022, 92029, + 92036, 92043, 92050, 92057, 92064, 92071, 92078, 92085, 92092, 92099, + 92106, 92113, 92120, 92127, 92134, 92141, 92148, 92155, 92163, 92171, + 92178, 92185, 92190, 92198, 92206, 92213, 92220, 92225, 92232, 92237, + 92242, 92249, 92254, 92259, 92264, 92272, 92277, 92282, 92289, 92294, + 92299, 92306, 92313, 92318, 92323, 92328, 92333, 92338, 92343, 92348, + 92353, 92358, 92365, 92370, 92377, 92382, 92387, 92392, 92397, 92402, + 92407, 92412, 92417, 92422, 92427, 92432, 92439, 92446, 92453, 92460, + 92466, 92471, 92478, 92483, 92488, 92497, 92504, 92513, 92520, 92525, + 92530, 92538, 92543, 92548, 92553, 92558, 92563, 92570, 92575, 92580, + 92585, 92590, 92595, 92602, 92609, 92616, 92623, 92630, 92637, 92644, + 92651, 92658, 92665, 92672, 92679, 92686, 92693, 92700, 92707, 92714, + 92721, 92728, 92735, 92742, 92749, 92756, 92763, 92770, 92777, 92784, + 92791, 0, 0, 0, 0, 0, 92798, 92806, 92814, 0, 0, 0, 0, 92819, 92823, + 92827, 92831, 92835, 92839, 92843, 92848, 92852, 92857, 92862, 92867, + 92872, 92877, 92882, 92887, 92892, 92897, 92902, 92908, 92914, 92920, + 92927, 92934, 92941, 92948, 92955, 92962, 92968, 92974, 92980, 92987, + 92994, 93001, 93008, 93015, 93022, 93029, 93036, 93043, 93050, 93057, + 93064, 93071, 93078, 0, 0, 0, 93085, 93093, 93101, 93109, 93117, 93125, + 93135, 93145, 93153, 93161, 93169, 93177, 93185, 93191, 93198, 93207, + 93216, 93225, 93234, 93243, 93252, 93262, 93273, 93283, 93294, 93303, + 93312, 93321, 93331, 93342, 93352, 93363, 93374, 93383, 93391, 93397, + 93403, 93409, 93415, 93423, 93431, 93437, 93444, 93454, 93461, 93468, + 93475, 93482, 93489, 93499, 93506, 93513, 93521, 93529, 93538, 93547, + 93556, 93565, 93574, 93582, 93591, 93600, 93609, 93613, 93620, 93625, + 93630, 93634, 93638, 93642, 93646, 93651, 93656, 93662, 93668, 93672, + 93678, 93682, 93686, 93690, 93694, 93698, 93702, 93708, 93712, 93717, + 93721, 93725, 0, 93728, 93733, 93738, 93743, 93748, 93755, 93760, 93765, + 93770, 93775, 93780, 93785, 0, 0, 0, 0, 93790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92966, 92973, 92982, 92991, 92998, - 93005, 93012, 93019, 93026, 93033, 93039, 93046, 93053, 93060, 93067, - 93074, 93081, 93088, 93095, 93104, 93111, 93118, 93125, 93132, 93139, - 93146, 93153, 93160, 93169, 93176, 93183, 93190, 93197, 93204, 93211, - 93220, 93227, 93234, 93241, 93248, 93257, 93264, 93271, 93278, 93286, - 93295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93796, 93803, 93812, 93821, + 93828, 93835, 93842, 93849, 93856, 93863, 93869, 93876, 93883, 93890, + 93897, 93904, 93911, 93918, 93925, 93934, 93941, 93948, 93955, 93962, + 93969, 93976, 93983, 93990, 93999, 94006, 94013, 94020, 94027, 94034, + 94041, 94050, 94057, 94064, 94071, 94078, 94087, 94094, 94101, 94108, + 94116, 94125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93304, 93308, 93312, 93317, 93322, - 93327, 93332, 93336, 93341, 93346, 93351, 93356, 93361, 93366, 93370, - 93375, 93380, 93385, 93390, 93394, 93399, 93404, 93408, 93412, 93417, - 93422, 93427, 93432, 93437, 0, 0, 0, 93442, 93446, 93451, 93456, 93460, - 93465, 93469, 93474, 93479, 93484, 93489, 93494, 93498, 93503, 93508, - 93513, 93518, 93522, 93527, 93531, 93536, 93541, 93546, 93551, 93556, - 93561, 93565, 93569, 93574, 93579, 93584, 93589, 93594, 93599, 93604, - 93609, 93614, 93619, 93624, 93629, 93634, 93639, 93644, 93649, 93654, - 93659, 93664, 93669, 93674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 93679, 93685, 93690, 93695, 93700, 93705, 93710, 93715, 93721, 93726, - 93732, 93738, 93744, 93750, 93756, 93762, 93768, 93774, 93780, 93786, - 93793, 93800, 93807, 93815, 93823, 93831, 93839, 93847, 0, 0, 0, 0, - 93855, 93859, 93864, 93869, 93874, 93878, 93883, 93888, 93893, 93898, - 93902, 93906, 93911, 93916, 93921, 93926, 93930, 93935, 93940, 93945, - 93950, 93955, 93960, 93964, 93969, 93974, 93979, 93984, 93989, 93994, - 93999, 94004, 94009, 94014, 94019, 94025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94031, 94036, 94041, 94046, 94051, 94056, 94061, 94066, 94071, - 94076, 94081, 94086, 94091, 94096, 94101, 94106, 94111, 94116, 94121, - 94126, 94131, 94136, 94141, 94146, 94151, 94156, 94161, 0, 0, 0, 0, 0, - 94168, 94174, 94180, 94186, 94192, 94197, 94203, 94209, 94215, 94221, - 94226, 94232, 94238, 94244, 94250, 94256, 94262, 94268, 94274, 94280, - 94285, 94291, 94297, 94303, 94309, 94315, 94320, 94326, 94332, 94337, - 94343, 94349, 94355, 94361, 94367, 94373, 94379, 94384, 94390, 94397, - 94404, 94411, 94418, 0, 0, 0, 0, 0, 94425, 94430, 94435, 94440, 94445, - 94450, 94455, 94460, 94465, 94470, 94475, 94480, 94485, 94490, 94495, - 94500, 94505, 94510, 94515, 94520, 94525, 94530, 94535, 94540, 94545, - 94550, 94555, 94559, 94563, 94567, 0, 94572, 94578, 94583, 94588, 94593, - 94598, 94604, 94610, 94616, 94622, 94628, 94634, 94640, 94646, 94652, - 94658, 94664, 94670, 94676, 94681, 94687, 94693, 94699, 94705, 94710, - 94716, 94722, 94727, 94733, 94739, 94745, 94751, 94757, 94763, 94769, - 94775, 94781, 0, 0, 0, 0, 94786, 94792, 94798, 94804, 94810, 94816, - 94822, 94828, 94834, 94841, 94846, 94851, 94857, 94863, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94134, 94138, 94142, 94147, + 94152, 94157, 94162, 94166, 94171, 94176, 94181, 94186, 94191, 94196, + 94200, 94205, 94210, 94215, 94220, 94224, 94229, 94234, 94238, 94243, + 94248, 94253, 94258, 94263, 94268, 0, 0, 0, 94273, 94277, 94282, 94287, + 94291, 94296, 94300, 94305, 94310, 94315, 94320, 94325, 94329, 94334, + 94339, 94344, 94349, 94354, 94359, 94363, 94368, 94373, 94378, 94383, + 94388, 94393, 94397, 94401, 94406, 94411, 94416, 94421, 94426, 94431, + 94436, 94441, 94446, 94451, 94456, 94461, 94466, 94471, 94476, 94481, + 94486, 94491, 94496, 94501, 94506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 94511, 94517, 94522, 94527, 94532, 94537, 94542, 94547, 94553, + 94558, 94564, 94570, 94576, 94582, 94588, 94594, 94600, 94606, 94612, + 94618, 94625, 94632, 94639, 94647, 94655, 94663, 94671, 94679, 0, 0, 0, + 0, 94687, 94691, 94696, 94701, 94706, 94710, 94715, 94720, 94725, 94730, + 94734, 94738, 94743, 94748, 94753, 94758, 94762, 94767, 94772, 94777, + 94782, 94787, 94792, 94796, 94801, 94806, 94811, 94816, 94821, 94826, + 94831, 94836, 94841, 94846, 94851, 94857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 94863, 94868, 94873, 94878, 94883, 94888, 94893, 94898, 94903, + 94908, 94913, 94918, 94923, 94928, 94933, 94938, 94943, 94948, 94953, + 94958, 94963, 94968, 94973, 94978, 94983, 94988, 94993, 0, 0, 0, 0, 0, + 95000, 95006, 95012, 95018, 95024, 95029, 95035, 95041, 95047, 95053, + 95058, 95064, 95070, 95076, 95082, 95088, 95094, 95100, 95106, 95112, + 95117, 95123, 95129, 95135, 95141, 95147, 95152, 95158, 95164, 95169, + 95175, 95181, 95187, 95193, 95199, 95205, 95211, 95216, 95222, 95229, + 95236, 95243, 95250, 0, 0, 0, 0, 0, 95257, 95262, 95267, 95272, 95277, + 95282, 95287, 95292, 95297, 95302, 95307, 95312, 95317, 95322, 95327, + 95332, 95337, 95342, 95347, 95352, 95357, 95362, 95367, 95372, 95377, + 95382, 95387, 95391, 95395, 95399, 0, 95404, 95410, 95415, 95420, 95425, + 95430, 95436, 95442, 95448, 95454, 95460, 95466, 95472, 95478, 95484, + 95490, 95496, 95502, 95508, 95513, 95519, 95525, 95530, 95536, 95541, + 95547, 95553, 95558, 95564, 95570, 95576, 95582, 95587, 95593, 95599, + 95605, 95611, 0, 0, 0, 0, 95616, 95622, 95628, 95634, 95640, 95646, + 95652, 95658, 95664, 95671, 95676, 95681, 95687, 95693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94869, 94875, 94881, 94887, 94894, - 94900, 94907, 94914, 94921, 94928, 94936, 94943, 94951, 94957, 94963, - 94969, 94975, 94981, 94987, 94993, 94999, 95005, 95011, 95017, 95023, - 95029, 95035, 95041, 95047, 95053, 95059, 95065, 95071, 95077, 95083, - 95089, 95095, 95101, 95107, 95113, 95119, 95125, 95131, 95137, 95144, - 95150, 95157, 95164, 95171, 95178, 95186, 95193, 95201, 95207, 95213, - 95219, 95225, 95231, 95237, 95243, 95249, 95255, 95261, 95267, 95273, - 95279, 95285, 95291, 95297, 95303, 95309, 95315, 95321, 95327, 95333, - 95339, 95345, 95351, 95357, 95363, 95369, 95374, 95379, 95384, 95389, - 95394, 95399, 95404, 95409, 95414, 95419, 95424, 95429, 95434, 95439, - 95444, 95449, 95454, 95459, 95464, 95469, 95474, 95479, 95484, 95489, - 95494, 95499, 95504, 95509, 95514, 95519, 95524, 95529, 95534, 95539, - 95544, 95549, 95554, 95559, 95564, 95569, 95574, 95579, 95584, 95589, - 95594, 95599, 95604, 95609, 95614, 95619, 95624, 95629, 95634, 95639, - 95644, 95649, 95654, 95659, 95664, 95669, 95674, 95679, 95684, 95689, - 95694, 95699, 95704, 95709, 95713, 95717, 95721, 95725, 95729, 95733, - 95737, 95742, 95747, 0, 0, 95752, 95757, 95761, 95765, 95769, 95773, - 95777, 95781, 95786, 95790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95699, 95705, 95711, 95717, 95724, + 95730, 95737, 95744, 95751, 95758, 95766, 95773, 95781, 95787, 95793, + 95799, 95805, 95811, 95817, 95823, 95829, 95835, 95841, 95847, 95853, + 95859, 95865, 95871, 95877, 95883, 95889, 95895, 95901, 95907, 95913, + 95919, 95925, 95931, 95937, 95943, 95949, 95955, 95961, 95967, 95974, + 95980, 95987, 95994, 96001, 96008, 96016, 96023, 96031, 96037, 96043, + 96049, 96055, 96061, 96067, 96073, 96079, 96085, 96091, 96097, 96103, + 96109, 96115, 96121, 96127, 96133, 96139, 96145, 96151, 96157, 96163, + 96169, 96175, 96181, 96187, 96193, 96199, 96204, 96209, 96214, 96219, + 96224, 96229, 96234, 96239, 96244, 96249, 96254, 96259, 96264, 96269, + 96274, 96279, 96284, 96289, 96294, 96299, 96304, 96309, 96314, 96319, + 96324, 96329, 96334, 96339, 96344, 96349, 96354, 96359, 96364, 96369, + 96374, 96379, 96384, 96389, 96394, 96399, 96404, 96409, 96414, 96419, + 96424, 96429, 96434, 96439, 96444, 96449, 96454, 96459, 96464, 96469, + 96474, 96479, 96484, 96489, 96494, 96499, 96504, 96509, 96514, 96519, + 96524, 96529, 96534, 96539, 96543, 96547, 96551, 96555, 96559, 96563, + 96567, 96572, 96577, 0, 0, 96582, 96587, 96591, 96595, 96599, 96603, + 96607, 96611, 96616, 96620, 0, 0, 0, 0, 0, 0, 96625, 96630, 96636, 96642, + 96648, 96654, 96660, 96666, 96671, 96677, 96682, 96688, 96693, 96698, + 96704, 96710, 96715, 96720, 96725, 96730, 96736, 96741, 96747, 96753, + 96759, 96765, 96771, 96777, 96783, 96789, 96795, 96800, 96806, 96812, + 96818, 96824, 0, 0, 0, 0, 96830, 96835, 96841, 96847, 96853, 96859, + 96865, 96871, 96876, 96882, 96887, 96893, 96898, 96903, 96909, 96915, + 96920, 96925, 96930, 96935, 96941, 96946, 96952, 96958, 96964, 96970, + 96976, 96982, 96988, 96994, 97000, 97005, 97011, 97017, 97023, 97029, 0, + 0, 0, 0, 97035, 97039, 97044, 97049, 97054, 97059, 97064, 97069, 97074, + 97078, 97083, 97088, 97093, 97098, 97102, 97107, 97112, 97117, 97122, + 97127, 97132, 97136, 97141, 97145, 97150, 97155, 97160, 97165, 97170, + 97175, 97180, 97185, 97189, 97194, 97199, 97204, 97209, 97214, 97219, + 97224, 0, 0, 0, 0, 0, 0, 0, 0, 97229, 97236, 97243, 97250, 97257, 97264, + 97271, 97278, 97285, 97292, 97299, 97306, 97313, 97320, 97327, 97334, + 97341, 97348, 97355, 97362, 97369, 97376, 97383, 97390, 97397, 97404, + 97411, 97418, 97425, 97432, 97439, 97446, 97453, 97460, 97467, 97474, + 97481, 97488, 97495, 97502, 97509, 97516, 97523, 97530, 97537, 97544, + 97551, 97558, 97565, 97572, 97579, 97586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 95795, 95799, 95804, 95809, 95814, 95819, 95824, 95829, 95834, 95838, - 95843, 95848, 95853, 95858, 95862, 95867, 95872, 95877, 95882, 95887, - 95892, 95897, 95902, 95906, 95911, 95916, 95921, 95926, 95931, 95936, - 95941, 95946, 95950, 95955, 95960, 95965, 95970, 95975, 95980, 95985, 0, - 0, 0, 0, 0, 0, 0, 0, 95990, 95997, 96004, 96011, 96018, 96025, 96032, - 96039, 96046, 96053, 96060, 96067, 96074, 96081, 96088, 96095, 96102, - 96109, 96116, 96123, 96130, 96137, 96144, 96151, 96158, 96165, 96172, - 96179, 96186, 96193, 96200, 96207, 96214, 96221, 96228, 96235, 96242, - 96249, 96256, 96263, 96270, 96277, 96284, 96291, 96298, 96305, 96312, - 96319, 96326, 96333, 96340, 96347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 97600, 97605, 97610, 97615, 97620, 97625, 97630, 97635, 97640, + 97645, 97650, 97655, 97660, 97665, 97670, 97675, 97680, 97685, 97690, + 97695, 97700, 97705, 97710, 97715, 97720, 97725, 97730, 97735, 97740, + 97745, 97750, 97755, 97760, 97765, 97770, 97775, 97780, 97785, 97790, + 97795, 97800, 97805, 97810, 97815, 97820, 97825, 97830, 97835, 97840, + 97845, 97850, 97855, 97860, 97865, 97870, 97875, 97880, 97885, 97890, + 97895, 97900, 97905, 97910, 97915, 97920, 97925, 97930, 97935, 97940, + 97945, 97950, 97955, 97960, 97965, 97970, 97975, 97980, 97985, 97990, + 97995, 98000, 98005, 98010, 98015, 98020, 98025, 98030, 98035, 98040, + 98045, 98050, 98055, 98060, 98065, 98070, 98075, 98080, 98085, 98090, + 98095, 98100, 98105, 98110, 98115, 98120, 98125, 98130, 98135, 98140, + 98145, 98150, 98155, 98160, 98165, 98170, 98175, 98180, 98185, 98190, + 98195, 98200, 98205, 98210, 98215, 98220, 98225, 98230, 98235, 98240, + 98245, 98250, 98255, 98260, 98265, 98270, 98275, 98280, 98285, 98290, + 98295, 98300, 98305, 98310, 98315, 98320, 98325, 98330, 98335, 98340, + 98345, 98350, 98355, 98360, 98365, 98370, 98375, 98380, 98385, 98390, + 98395, 98400, 98405, 98410, 98415, 98420, 98425, 98430, 98435, 98440, + 98445, 98450, 98455, 98460, 98465, 98470, 98475, 98480, 98485, 98490, + 98495, 98500, 98505, 98510, 98515, 98520, 98525, 98530, 98535, 98540, + 98545, 98550, 98555, 98560, 98565, 98570, 98575, 98580, 98585, 98590, + 98595, 98600, 98605, 98610, 98615, 98620, 98625, 98630, 98635, 98640, + 98645, 98650, 98655, 98660, 98665, 98670, 98675, 98680, 98685, 98690, + 98695, 98700, 98705, 98710, 98715, 98720, 98725, 98730, 98735, 98740, + 98745, 98750, 98755, 98760, 98765, 98770, 98775, 98780, 98785, 98790, + 98795, 98800, 98805, 98810, 98815, 98820, 98825, 98830, 98835, 98840, + 98845, 98850, 98855, 98860, 98865, 98870, 98875, 98880, 98885, 98890, + 98895, 98900, 98905, 98910, 98915, 98920, 98925, 98930, 98935, 98940, + 98945, 98950, 98955, 98960, 98965, 98970, 98975, 98980, 98985, 98990, + 98995, 99000, 99005, 99010, 99015, 99020, 99025, 99030, 99035, 99040, + 99045, 99050, 99055, 99060, 99065, 99070, 99075, 99080, 99085, 99090, + 99095, 99100, 99105, 99110, 99115, 99120, 99125, 99130, 99135, 99140, + 99145, 99150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99155, 99161, 99168, 99175, + 99181, 99188, 99195, 99202, 99209, 99215, 99222, 99229, 99236, 99243, + 99250, 99257, 99264, 99271, 99278, 99285, 99292, 99299, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99306, 99311, 99316, 99321, 99326, 99331, 99336, 99341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 96361, 96366, 96371, 96376, 96381, 96386, 96391, 96396, 96401, - 96406, 96411, 96416, 96421, 96426, 96431, 96436, 96441, 96446, 96451, - 96456, 96461, 96466, 96471, 96476, 96481, 96486, 96491, 96496, 96501, - 96506, 96511, 96516, 96521, 96526, 96531, 96536, 96541, 96546, 96551, - 96556, 96561, 96566, 96571, 96576, 96581, 96586, 96591, 96596, 96601, - 96606, 96611, 96616, 96621, 96626, 96631, 96636, 96641, 96646, 96651, - 96656, 96661, 96666, 96671, 96676, 96681, 96686, 96691, 96696, 96701, - 96706, 96711, 96716, 96721, 96726, 96731, 96736, 96741, 96746, 96751, - 96756, 96761, 96766, 96771, 96776, 96781, 96786, 96791, 96796, 96801, - 96806, 96811, 96816, 96821, 96826, 96831, 96836, 96841, 96846, 96851, - 96856, 96861, 96866, 96871, 96876, 96881, 96886, 96891, 96896, 96901, - 96906, 96911, 96916, 96921, 96926, 96931, 96936, 96941, 96946, 96951, - 96956, 96961, 96966, 96971, 96976, 96981, 96986, 96991, 96996, 97001, - 97006, 97011, 97016, 97021, 97026, 97031, 97036, 97041, 97046, 97051, - 97056, 97061, 97066, 97071, 97076, 97081, 97086, 97091, 97096, 97101, - 97106, 97111, 97116, 97121, 97126, 97131, 97136, 97141, 97146, 97151, - 97156, 97161, 97166, 97171, 97176, 97181, 97186, 97191, 97196, 97201, - 97206, 97211, 97216, 97221, 97226, 97231, 97236, 97241, 97246, 97251, - 97256, 97261, 97266, 97271, 97276, 97281, 97286, 97291, 97296, 97301, - 97306, 97311, 97316, 97321, 97326, 97331, 97336, 97341, 97346, 97351, - 97356, 97361, 97366, 97371, 97376, 97381, 97386, 97391, 97396, 97401, - 97406, 97411, 97416, 97421, 97426, 97431, 97436, 97441, 97446, 97451, - 97456, 97461, 97466, 97471, 97476, 97481, 97486, 97491, 97496, 97501, - 97506, 97511, 97516, 97521, 97526, 97531, 97536, 97541, 97546, 97551, - 97556, 97561, 97566, 97571, 97576, 97581, 97586, 97591, 97596, 97601, - 97606, 97611, 97616, 97621, 97626, 97631, 97636, 97641, 97646, 97651, - 97656, 97661, 97666, 97671, 97676, 97681, 97686, 97691, 97696, 97701, - 97706, 97711, 97716, 97721, 97726, 97731, 97736, 97741, 97746, 97751, - 97756, 97761, 97766, 97771, 97776, 97781, 97786, 97791, 97796, 97801, - 97806, 97811, 97816, 97821, 97826, 97831, 97836, 97841, 97846, 97851, - 97856, 97861, 97866, 97871, 97876, 97881, 97886, 97891, 97896, 97901, - 97906, 97911, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97916, 97922, 97929, 97936, - 97942, 97949, 97956, 97963, 97970, 97976, 97983, 97990, 97997, 98004, - 98011, 98018, 98025, 98032, 98039, 98046, 98053, 98060, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 98067, 98072, 98077, 98082, 98087, 98092, 98097, 98102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 99346, 99350, 99354, 99358, 99362, 99366, 0, 0, 99371, + 0, 99376, 99380, 99385, 99390, 99395, 99400, 99404, 99409, 99414, 99419, + 99424, 99428, 99433, 99438, 99443, 99448, 99452, 99457, 99462, 99467, + 99472, 99476, 99481, 99486, 99491, 99496, 99501, 99506, 99511, 99516, + 99521, 99526, 99531, 99536, 99541, 99546, 99551, 99556, 99561, 99565, + 99570, 99575, 99580, 99585, 0, 99590, 99595, 0, 0, 0, 99600, 0, 0, 99605, + 99610, 99617, 99624, 99631, 99638, 99645, 99652, 99659, 99666, 99673, + 99680, 99687, 99694, 99701, 99708, 99715, 99722, 99729, 99736, 99743, + 99750, 99757, 0, 99764, 99771, 99777, 99783, 99789, 99796, 99803, 99811, + 99819, 99828, 99833, 99838, 99843, 99848, 99853, 99858, 99863, 99868, + 99873, 99878, 99883, 99888, 99893, 99899, 99904, 99909, 99914, 99919, + 99924, 99929, 99934, 99939, 99944, 99950, 99956, 99960, 99964, 99968, + 99972, 99976, 99981, 99986, 99992, 99997, 100003, 100008, 100013, 100018, + 100024, 100029, 100034, 100039, 100044, 100049, 100055, 100060, 100066, + 100071, 100077, 100082, 100088, 100093, 100099, 100104, 100109, 100114, + 100119, 100124, 100129, 100134, 100140, 100145, 0, 0, 0, 0, 0, 0, 0, 0, + 100150, 100154, 100158, 100162, 100166, 100172, 100176, 100181, 100186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 98107, 98111, 98115, 98119, 98123, 98127, 0, 0, 98132, - 0, 98137, 98141, 98146, 98151, 98156, 98161, 98166, 98171, 98176, 98181, - 98186, 98190, 98195, 98200, 98205, 98210, 98215, 98220, 98225, 98230, - 98235, 98239, 98244, 98249, 98254, 98259, 98264, 98269, 98274, 98279, - 98284, 98289, 98294, 98299, 98304, 98309, 98314, 98319, 98324, 98328, - 98333, 98338, 98343, 98348, 0, 98353, 98358, 0, 0, 0, 98363, 0, 0, 98368, - 98373, 98380, 98387, 98394, 98401, 98408, 98415, 98422, 98429, 98436, - 98443, 98450, 98457, 98464, 98471, 98478, 98485, 98492, 98499, 98506, - 98513, 98520, 0, 98527, 98534, 98540, 98546, 98552, 98559, 98566, 98574, - 98582, 98591, 98596, 98601, 98606, 98611, 98616, 98621, 98626, 98631, - 98636, 98641, 98646, 98651, 98656, 98662, 98667, 98672, 98677, 98682, - 98687, 98692, 98697, 98702, 98707, 98713, 98719, 98723, 98727, 98731, - 98735, 98739, 98744, 98749, 98755, 98760, 98766, 98771, 98776, 98781, - 98787, 98792, 98797, 98802, 98807, 98812, 98818, 98823, 98829, 98834, - 98840, 98845, 98851, 98856, 98862, 98867, 98872, 98877, 98882, 98887, - 98892, 98897, 98903, 98908, 0, 0, 0, 0, 0, 0, 0, 0, 98913, 98917, 98921, - 98925, 98929, 98935, 98939, 98944, 98949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 100192, 100197, 100202, 100207, 100212, 100217, 100222, 100227, 100232, + 100237, 100242, 100247, 100252, 100257, 100262, 100267, 100272, 100277, + 100282, 0, 100287, 100292, 0, 0, 0, 0, 0, 100297, 100301, 100305, 100310, + 100315, 100321, 100326, 100331, 100336, 100341, 100346, 100351, 100356, + 100361, 100366, 100371, 100376, 100381, 100386, 100391, 100396, 100401, + 100406, 100411, 100416, 100421, 100426, 100431, 100435, 100440, 100445, + 100451, 100455, 0, 0, 0, 100459, 100465, 100469, 100474, 100479, 100484, + 100488, 100493, 100497, 100502, 100507, 100511, 100516, 100521, 100525, + 100529, 100534, 100539, 100543, 100548, 100553, 100558, 100563, 100568, + 100573, 100578, 100583, 0, 0, 0, 0, 0, 100588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98955, 98960, 98965, 98970, - 98975, 98980, 98985, 98990, 98995, 99000, 99005, 99010, 99015, 99020, - 99025, 99030, 99035, 99040, 99045, 0, 99050, 99055, 0, 0, 0, 0, 0, 99060, - 99064, 99068, 99073, 99078, 99084, 99089, 99094, 99099, 99104, 99109, - 99114, 99119, 99124, 99129, 99134, 99139, 99144, 99149, 99154, 99159, - 99164, 99169, 99174, 99179, 99184, 99189, 99194, 99198, 99203, 99208, - 99214, 99218, 0, 0, 0, 99222, 99228, 99232, 99237, 99242, 99247, 99251, - 99256, 99260, 99265, 99270, 99274, 99279, 99284, 99288, 99292, 99297, - 99302, 99306, 99311, 99316, 99320, 99325, 99330, 99335, 99340, 99345, 0, - 0, 0, 0, 0, 99350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99355, - 99360, 99365, 99370, 99375, 99380, 99386, 99392, 99398, 99403, 99408, - 99414, 99420, 99426, 99432, 99438, 99444, 99450, 99456, 99462, 99468, - 99474, 99480, 99485, 99491, 99497, 99503, 99509, 99515, 99520, 99526, - 99532, 99538, 99542, 99546, 99550, 99554, 99558, 99563, 99568, 99572, - 99576, 99581, 99586, 99591, 99596, 99601, 99606, 99611, 99618, 99623, - 99627, 99632, 99637, 99642, 99646, 0, 0, 0, 0, 99651, 99659, 99666, - 99672, 99678, 99682, 99686, 99690, 99694, 99698, 99702, 99707, 99711, - 99716, 99721, 99726, 99731, 99736, 99741, 99746, 0, 0, 99751, 99757, - 99763, 99769, 99776, 99783, 99790, 99797, 99804, 99811, 99817, 99823, - 99829, 99836, 99843, 99850, 99857, 99864, 99871, 99878, 99885, 99892, - 99899, 99906, 99913, 99920, 99927, 99934, 99942, 99950, 99958, 99967, - 99976, 99985, 99994, 100003, 100012, 100019, 100026, 100033, 100041, - 100049, 100057, 100065, 100073, 100081, 100089, 100093, 100098, 100103, - 0, 100109, 100114, 0, 0, 0, 0, 0, 100119, 100125, 100132, 100137, 100142, - 100146, 100151, 100156, 0, 100161, 100166, 100171, 0, 100176, 100181, - 100186, 100191, 100196, 100201, 100206, 100211, 100216, 100221, 100226, - 100231, 100235, 100240, 100245, 100250, 100254, 100258, 100263, 100268, - 100273, 100278, 100283, 100288, 100293, 100297, 100302, 0, 0, 0, 0, - 100307, 100313, 100318, 0, 0, 0, 0, 100323, 100327, 100331, 100335, - 100339, 100343, 100348, 100353, 100359, 0, 0, 0, 0, 0, 0, 0, 0, 100365, - 100371, 100378, 100384, 100391, 100397, 100403, 100409, 100416, 0, 0, 0, - 0, 0, 0, 0, 100422, 100430, 100438, 100446, 100454, 100462, 100470, - 100478, 100486, 100494, 100502, 100510, 100518, 100526, 100534, 100542, - 100550, 100558, 100566, 100574, 100582, 100590, 100598, 100606, 100614, - 100622, 100630, 100638, 100646, 100654, 100661, 100669, 100677, 100684, - 100691, 100698, 100705, 100712, 100719, 100726, 100733, 100740, 100747, - 100754, 100761, 100768, 100775, 100782, 100789, 100796, 100803, 100810, - 100817, 100824, 100831, 100838, 100845, 100852, 100859, 100866, 100873, - 100880, 100886, 100893, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100900, 100905, 100910, - 100915, 100920, 100925, 100930, 100935, 100940, 100945, 100950, 100955, - 100960, 100965, 100970, 100975, 100980, 100985, 100990, 100995, 101000, - 101005, 101010, 101015, 101020, 101025, 101030, 101035, 101040, 101045, - 101050, 101055, 101060, 101065, 101070, 101075, 101080, 101085, 101091, - 0, 0, 0, 0, 101097, 101101, 101105, 101110, 101115, 101121, 101127, - 101133, 101143, 101152, 101158, 101165, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 101173, 101177, 101182, 101187, 101192, 101197, 101202, 101207, 101212, - 101216, 101221, 101225, 101230, 101234, 101239, 101243, 101248, 101253, - 101258, 101263, 101268, 101273, 101278, 101283, 101288, 101293, 101298, - 101303, 101308, 101313, 101318, 101323, 101328, 101333, 101338, 101343, - 101348, 101353, 101358, 101363, 101368, 101373, 101378, 101383, 101388, - 101393, 101398, 101403, 101408, 101413, 101418, 101423, 101428, 101433, - 0, 0, 0, 101438, 101443, 101452, 101460, 101469, 101478, 101489, 101500, - 101507, 101514, 101521, 101528, 101535, 101542, 101549, 101556, 101563, - 101570, 101577, 101584, 101591, 101598, 101605, 101612, 101619, 101626, - 101633, 101640, 101647, 0, 0, 101654, 101660, 101666, 101672, 101678, - 101685, 101692, 101700, 101708, 101715, 101722, 101729, 101736, 101743, - 101750, 101757, 101764, 101771, 101778, 101785, 101792, 101799, 101806, - 101813, 101820, 101827, 101834, 0, 0, 0, 0, 0, 101841, 101847, 101853, - 101859, 101865, 101872, 101879, 101887, 101895, 101902, 101909, 101916, - 101923, 101930, 101937, 101944, 101951, 101958, 101965, 101972, 101979, - 101986, 101993, 102000, 102007, 102014, 0, 0, 0, 0, 0, 0, 0, 102021, - 102028, 102037, 102047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102057, - 102063, 102069, 102075, 102081, 102088, 102095, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 100593, 100598, 100603, 100608, 100613, 100618, + 100624, 100630, 100636, 100641, 100646, 100651, 100657, 100663, 100669, + 100675, 100681, 100686, 100692, 100698, 100704, 100710, 100716, 100721, + 100727, 100733, 100739, 100745, 100751, 100756, 100762, 100768, 100774, + 100779, 100784, 100789, 100794, 100799, 100805, 100811, 100816, 100821, + 100826, 100832, 100838, 100843, 100849, 100855, 100861, 100869, 100875, + 100880, 100886, 100892, 100898, 100903, 0, 0, 0, 0, 100909, 100918, + 100926, 100933, 100940, 100945, 100950, 100955, 100960, 100965, 100970, + 100976, 100981, 100987, 100993, 100999, 101005, 101011, 101017, 101023, + 0, 0, 101029, 101036, 101043, 101050, 101058, 101066, 101074, 101082, + 101090, 101098, 101105, 101112, 101119, 101127, 101135, 101143, 101151, + 101159, 101167, 101175, 101183, 101191, 101199, 101207, 101215, 101223, + 101231, 101239, 101248, 101257, 101266, 101276, 101286, 101296, 101306, + 101316, 101326, 101334, 101342, 101350, 101359, 101368, 101377, 101386, + 101395, 101404, 101413, 101417, 101422, 101427, 0, 101433, 101438, 0, 0, + 0, 0, 0, 101443, 101449, 101456, 101461, 101466, 101470, 101475, 101480, + 0, 101485, 101490, 101495, 0, 101500, 101505, 101510, 101515, 101520, + 101525, 101530, 101535, 101540, 101545, 101550, 101554, 101558, 101563, + 101568, 101573, 101577, 101581, 101586, 101590, 101595, 101600, 101605, + 101610, 101615, 101619, 101624, 0, 0, 0, 0, 101629, 101635, 101640, 0, 0, + 0, 0, 101645, 101649, 101653, 101657, 101661, 101665, 101670, 101675, + 101681, 0, 0, 0, 0, 0, 0, 0, 0, 101687, 101693, 101700, 101706, 101713, + 101719, 101725, 101731, 101738, 0, 0, 0, 0, 0, 0, 0, 101744, 101752, + 101760, 101768, 101776, 101784, 101792, 101800, 101808, 101816, 101824, + 101832, 101840, 101848, 101856, 101864, 101872, 101880, 101888, 101896, + 101904, 101912, 101920, 101928, 101936, 101944, 101952, 101960, 101968, + 101976, 101983, 101991, 101999, 102006, 102013, 102020, 102027, 102034, + 102041, 102048, 102055, 102062, 102069, 102076, 102083, 102090, 102097, + 102104, 102111, 102118, 102125, 102132, 102139, 102146, 102153, 102160, + 102167, 102174, 102181, 102188, 102195, 102202, 102208, 102215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 102222, 102227, 102232, 102237, 102242, 102247, 102252, + 102257, 102262, 102267, 102272, 102277, 102282, 102287, 102292, 102297, + 102302, 102307, 102312, 102317, 102322, 102327, 102332, 102337, 102342, + 102347, 102352, 102357, 102362, 102367, 102372, 102377, 102382, 102387, + 102392, 102397, 102402, 102407, 102413, 0, 0, 0, 0, 102419, 102423, + 102427, 102432, 102437, 102443, 102449, 102455, 102465, 102474, 102480, + 102487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102495, 102499, 102504, 102509, + 102514, 102519, 102524, 102529, 102534, 102538, 102543, 102547, 102552, + 102556, 102561, 102565, 102570, 102575, 102580, 102585, 102590, 102595, + 102600, 102605, 102610, 102615, 102620, 102625, 102630, 102635, 102640, + 102645, 102650, 102655, 102660, 102665, 102670, 102675, 102680, 102685, + 102690, 102695, 102700, 102705, 102710, 102715, 102720, 102725, 102730, + 102735, 102740, 102745, 102750, 102755, 0, 0, 0, 102760, 102765, 102774, + 102782, 102791, 102800, 102811, 102822, 102829, 102836, 102843, 102850, + 102857, 102864, 102871, 102878, 102885, 102892, 102899, 102906, 102913, + 102920, 102927, 102934, 102941, 102948, 102955, 102962, 102969, 0, 0, + 102976, 102982, 102988, 102994, 103000, 103007, 103014, 103022, 103030, + 103037, 103044, 103051, 103058, 103065, 103072, 103079, 103086, 103093, + 103100, 103107, 103114, 103121, 103128, 103135, 103142, 103149, 103156, + 0, 0, 0, 0, 0, 103163, 103169, 103175, 103181, 103187, 103194, 103201, + 103209, 103217, 103224, 103231, 103238, 103245, 103252, 103259, 103266, + 103273, 103280, 103287, 103294, 103301, 103308, 103315, 103322, 103329, + 103336, 0, 0, 0, 0, 0, 0, 0, 103343, 103350, 103359, 103369, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 103379, 103385, 103391, 103397, 103403, 103410, + 103417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 102103, 102110, 102117, 102125, 102132, 102139, 102146, 102153, 102161, - 102169, 102177, 102185, 102193, 102201, 102209, 102217, 102225, 102233, - 102241, 102249, 102257, 102265, 102273, 102281, 102289, 102297, 102305, - 102313, 102321, 102329, 102337, 102345, 102353, 102361, 102369, 102377, - 102385, 102393, 102401, 102409, 102417, 102425, 102433, 102441, 102449, - 102457, 102465, 102473, 102481, 102489, 102497, 102505, 102513, 102521, - 102529, 102537, 102545, 102553, 102561, 102569, 102577, 102585, 102593, - 102601, 102609, 102617, 102625, 102633, 102641, 102649, 102657, 102665, - 102673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103425, 103432, 103439, 103447, 103454, + 103461, 103468, 103475, 103483, 103491, 103499, 103507, 103515, 103523, + 103531, 103539, 103547, 103555, 103563, 103571, 103579, 103587, 103595, + 103603, 103611, 103619, 103627, 103635, 103643, 103651, 103659, 103667, + 103675, 103683, 103691, 103699, 103707, 103715, 103723, 103731, 103739, + 103747, 103755, 103763, 103771, 103779, 103787, 103795, 103803, 103811, + 103819, 103827, 103835, 103843, 103851, 103859, 103867, 103875, 103883, + 103891, 103899, 103907, 103915, 103923, 103931, 103939, 103947, 103955, + 103963, 103971, 103979, 103987, 103995, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 102681, 102686, 102692, 102698, 102704, - 102710, 102716, 102722, 102728, 102734, 102739, 102746, 102752, 102758, - 102764, 102770, 102776, 102781, 102787, 102793, 102799, 102805, 102811, - 102817, 102823, 102829, 102835, 102841, 102846, 102852, 102860, 102868, - 102874, 102880, 102886, 102892, 102900, 102906, 102912, 102918, 102924, - 102930, 102936, 102941, 102947, 102955, 102963, 102969, 102975, 102981, - 102988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102994, 102999, 103005, - 103011, 103017, 103023, 103029, 103035, 103041, 103047, 103052, 103059, - 103065, 103071, 103077, 103083, 103089, 103094, 103100, 103106, 103112, - 103118, 103124, 103130, 103136, 103142, 103148, 103154, 103159, 103165, - 103173, 103181, 103187, 103193, 103199, 103205, 103213, 103219, 103225, - 103231, 103237, 103243, 103249, 103254, 103260, 103268, 103276, 103282, - 103288, 103294, 103301, 0, 0, 0, 0, 0, 0, 0, 103307, 103311, 103315, - 103320, 103325, 103331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104003, + 104008, 104014, 104020, 104026, 104032, 104038, 104044, 104050, 104056, + 104061, 104068, 104074, 104080, 104086, 104092, 104098, 104103, 104109, + 104115, 104121, 104127, 104133, 104139, 104145, 104151, 104157, 104163, + 104168, 104174, 104182, 104190, 104196, 104202, 104208, 104214, 104222, + 104228, 104234, 104240, 104246, 104252, 104258, 104263, 104269, 104277, + 104285, 104291, 104297, 104303, 104310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 104316, 104321, 104327, 104333, 104339, 104345, 104351, 104357, + 104363, 104369, 104374, 104381, 104387, 104393, 104399, 104405, 104411, + 104416, 104422, 104428, 104434, 104440, 104446, 104452, 104458, 104464, + 104470, 104476, 104481, 104487, 104495, 104503, 104509, 104515, 104521, + 104527, 104535, 104541, 104547, 104553, 104559, 104565, 104571, 104576, + 104582, 104590, 104598, 104604, 104610, 104616, 104623, 0, 0, 0, 0, 0, 0, + 0, 104629, 104633, 104637, 104642, 104647, 104653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 103337, 103341, 103345, 103349, 103353, 103357, - 103361, 103366, 103370, 103375, 103380, 103385, 103390, 103395, 103400, - 103405, 103410, 103415, 103420, 103426, 103432, 103438, 103445, 103452, - 103459, 103466, 103473, 103480, 103487, 103494, 103501, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104659, 104663, + 104667, 104671, 104675, 104679, 104683, 104688, 104692, 104697, 104702, + 104707, 104712, 104717, 104722, 104727, 104732, 104737, 104742, 104748, + 104754, 104760, 104767, 104774, 104781, 104788, 104795, 104802, 104809, + 104816, 104823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104830, 104834, 104838, 104842, + 104846, 104850, 104853, 104857, 104860, 104864, 104867, 104871, 104875, + 104880, 104884, 104889, 104892, 104896, 104899, 104903, 104906, 104910, + 104914, 104918, 104922, 104926, 104930, 104934, 104938, 104942, 104946, + 104950, 104954, 104958, 104962, 104966, 104970, 104974, 104978, 104981, + 104984, 104988, 104992, 104996, 104999, 105002, 105006, 105009, 105013, + 105017, 105021, 105025, 105028, 105032, 105038, 105044, 105050, 105055, + 105062, 105066, 105071, 105075, 105080, 105085, 105091, 105096, 105102, + 105106, 105111, 105115, 105120, 105123, 105126, 105130, 105135, 105141, + 105146, 105152, 0, 0, 0, 0, 105157, 105160, 105163, 105166, 105169, + 105172, 105175, 105179, 105182, 105186, 105190, 105194, 105198, 105202, + 105206, 105210, 105214, 105218, 105222, 105227, 105232, 105236, 105239, + 105242, 105245, 105248, 105251, 105254, 105258, 105261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 105265, 105269, 105274, 105279, 105284, + 105288, 105293, 105297, 105302, 105306, 105311, 105315, 105320, 105324, + 105329, 105333, 105338, 105343, 105348, 105353, 105358, 105363, 105368, + 105373, 105378, 105383, 105388, 105393, 105398, 105403, 105408, 105413, + 105418, 105423, 105428, 105433, 105437, 105441, 105446, 105451, 105456, + 105460, 105464, 105469, 105473, 105478, 105483, 105488, 105493, 105497, + 105503, 105508, 105514, 105519, 105525, 105530, 105536, 105541, 105547, + 105552, 105557, 105562, 105567, 105571, 105576, 105582, 105586, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105591, 105598, 105605, 105612, 105619, + 105626, 105633, 105640, 105647, 105654, 105661, 105668, 105675, 105682, + 105689, 105696, 105703, 105710, 105717, 105724, 105731, 105738, 105745, + 105752, 105759, 0, 0, 0, 0, 0, 0, 0, 105766, 105773, 105779, 105785, + 105791, 105797, 105803, 105809, 105816, 105822, 0, 0, 0, 0, 0, 0, 105829, + 105834, 105839, 105844, 105849, 105853, 105857, 105861, 105866, 105871, + 105876, 105881, 105886, 105891, 105896, 105901, 105906, 105911, 105916, + 105921, 105926, 105931, 105936, 105941, 105946, 105951, 105956, 105961, + 105966, 105971, 105976, 105981, 105986, 105991, 105996, 106001, 106006, + 106011, 106016, 106021, 106026, 106031, 106037, 106042, 106048, 106053, + 106059, 106064, 106070, 106076, 106080, 106085, 106089, 0, 106093, + 106098, 106102, 106106, 106110, 106114, 106118, 106122, 106127, 106131, + 106136, 106141, 106145, 106150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 106155, 106159, 106163, 106167, 106171, 106175, 106179, 106184, 106189, + 106194, 106199, 106204, 106209, 106214, 106219, 106224, 106229, 106234, + 106239, 106244, 106249, 106254, 106259, 106264, 106268, 106272, 106277, + 106282, 106287, 106291, 106296, 106300, 106305, 106310, 106314, 106319, + 106324, 106329, 106334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106339, 106343, + 106347, 106351, 106354, 106358, 106361, 106365, 106368, 106372, 106376, + 106381, 106385, 106390, 106393, 106397, 106400, 106404, 106407, 106411, + 106415, 106419, 106423, 106427, 106431, 106435, 106439, 106443, 106447, + 106451, 106455, 106459, 106463, 106467, 106471, 106475, 106479, 106482, + 106485, 106489, 106493, 106497, 106500, 106503, 106507, 106510, 106514, + 106518, 106522, 106526, 106530, 106533, 106538, 106542, 106547, 106551, + 106556, 106561, 106567, 106572, 106578, 106582, 106587, 106591, 106596, + 106600, 106604, 106608, 106612, 106615, 106618, 106622, 106626, 106629, + 106633, 106637, 106641, 106648, 0, 0, 106652, 106656, 106659, 106662, + 106665, 106668, 106671, 106674, 106678, 106681, 106685, 106688, 106692, + 106695, 106699, 106704, 0, 106709, 106714, 106719, 106724, 106729, + 106734, 106739, 106745, 106750, 106756, 106762, 106768, 106774, 106780, + 106786, 106792, 106798, 106804, 106810, 106817, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 106824, 106828, 106833, 106837, 106841, 106845, 106850, 106854, + 106859, 106863, 106868, 106873, 106878, 106883, 106888, 106893, 106898, + 106903, 0, 106908, 106913, 106918, 106923, 106928, 106933, 106938, + 106943, 106948, 106953, 106958, 106963, 106967, 106971, 106976, 106981, + 106986, 106991, 106995, 106999, 107004, 107008, 107013, 107018, 107022, + 107027, 107033, 107038, 107044, 107049, 107054, 107060, 107065, 107071, + 107076, 107081, 107086, 107091, 107095, 107100, 107106, 107111, 107117, + 107122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 103508, 103512, 103516, 103520, 103524, 103528, 103531, 103535, - 103538, 103542, 103545, 103549, 103553, 103558, 103562, 103567, 103570, - 103574, 103577, 103581, 103584, 103588, 103592, 103596, 103600, 103604, - 103608, 103612, 103616, 103620, 103624, 103628, 103632, 103636, 103640, - 103644, 103648, 103652, 103656, 103660, 103663, 103667, 103671, 103675, - 103678, 103681, 103685, 103689, 103693, 103697, 103701, 103705, 103708, - 103712, 103718, 103724, 103730, 103735, 103742, 103746, 103751, 103755, - 103760, 103765, 103771, 103776, 103782, 103786, 103791, 103795, 103800, - 103803, 103806, 103810, 103815, 103821, 103826, 103832, 0, 0, 0, 0, - 103837, 103840, 103843, 103846, 103849, 103852, 103855, 103859, 103862, - 103866, 103870, 103874, 103878, 103882, 103886, 103890, 103894, 103898, - 103902, 103907, 103912, 103916, 103919, 103922, 103925, 103928, 103931, - 103934, 103938, 103941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 103945, 103949, 103954, 103959, 103964, 103968, 103973, 103977, 103982, - 103986, 103991, 103995, 104000, 104004, 104009, 104013, 104018, 104023, - 104028, 104033, 104038, 104043, 104048, 104053, 104058, 104063, 104068, - 104073, 104078, 104083, 104088, 104093, 104098, 104103, 104108, 104113, - 104118, 104122, 104127, 104132, 104137, 104141, 104145, 104150, 104155, - 104160, 104165, 104170, 104175, 104179, 104185, 104190, 104196, 104201, - 104207, 104212, 104218, 104223, 104229, 104234, 104239, 104244, 104249, - 104253, 104258, 104264, 104268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 104273, 104280, 104287, 104294, 104301, 104308, 104315, 104322, 104329, - 104336, 104343, 104350, 104357, 104364, 104371, 104378, 104385, 104392, - 104399, 104406, 104413, 104420, 104427, 104434, 104441, 0, 0, 0, 0, 0, 0, - 0, 104448, 104455, 104461, 104467, 104473, 104479, 104485, 104491, - 104498, 104504, 0, 0, 0, 0, 0, 0, 104511, 104516, 104521, 104526, 104531, - 104535, 104539, 104543, 104548, 104553, 104558, 104563, 104568, 104573, - 104578, 104583, 104588, 104593, 104598, 104603, 104608, 104613, 104618, - 104623, 104628, 104633, 104638, 104643, 104648, 104653, 104658, 104663, - 104668, 104673, 104678, 104683, 104688, 104693, 104698, 104703, 104708, - 104713, 104719, 104724, 104730, 104735, 104741, 104746, 104752, 104758, - 104762, 104767, 104771, 0, 104775, 104780, 104784, 104788, 104792, - 104796, 104800, 104804, 104809, 104813, 104818, 104823, 104827, 104832, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104837, 104841, 104845, 104849, - 104853, 104857, 104861, 104866, 104871, 104876, 104881, 104886, 104891, - 104896, 104901, 104906, 104911, 104916, 104921, 104926, 104931, 104936, - 104941, 104946, 104951, 104955, 104960, 104965, 104970, 104974, 104979, - 104984, 104989, 104994, 104998, 105003, 105008, 105013, 105018, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 105023, 105027, 105031, 105035, 105038, 105042, 105045, - 105049, 105052, 105056, 105060, 105065, 105069, 105074, 105077, 105081, - 105084, 105088, 105091, 105095, 105099, 105103, 105107, 105111, 105115, - 105119, 105123, 105127, 105131, 105135, 105139, 105143, 105147, 105151, - 105155, 105159, 105163, 105167, 105170, 105174, 105178, 105182, 105185, - 105188, 105192, 105196, 105200, 105204, 105208, 105212, 105216, 105219, - 105224, 105228, 105233, 105237, 105242, 105247, 105253, 105258, 105264, - 105268, 105273, 105277, 105282, 105286, 105290, 105294, 105298, 105301, - 105304, 105308, 105312, 105315, 105319, 105323, 105327, 105334, 0, 0, - 105338, 105342, 105345, 105348, 105351, 105354, 105357, 105360, 105364, - 105367, 105371, 105374, 105378, 105381, 105385, 105390, 0, 105395, - 105400, 105405, 105410, 105415, 105420, 105425, 105431, 105436, 105442, - 105448, 105454, 105460, 105466, 105472, 105478, 105484, 105490, 105496, - 105503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105510, 105514, 105519, 105523, - 105527, 105531, 105536, 105540, 105545, 105549, 105554, 105559, 105564, - 105569, 105574, 105579, 105584, 105589, 0, 105594, 105599, 105604, - 105609, 105614, 105619, 105624, 105629, 105634, 105639, 105644, 105649, - 105654, 105658, 105663, 105668, 105673, 105678, 105682, 105686, 105691, - 105696, 105701, 105706, 105710, 105715, 105721, 105726, 105732, 105737, - 105742, 105748, 105753, 105759, 105764, 105769, 105774, 105779, 105783, - 105788, 105794, 105799, 105805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107127, 107131, + 107135, 107139, 107143, 107147, 107152, 0, 107157, 0, 107162, 107167, + 107172, 107177, 0, 107182, 107187, 107192, 107197, 107202, 107207, + 107212, 107217, 107222, 107227, 107232, 107237, 107241, 107245, 107250, + 0, 107255, 107260, 107264, 107268, 107273, 107277, 107282, 107287, + 107291, 107296, 107301, 0, 0, 0, 0, 0, 0, 107306, 107310, 107315, 107319, + 107324, 107328, 107333, 107337, 107342, 107346, 107351, 107355, 107360, + 107365, 107370, 107375, 107380, 107385, 107390, 107395, 107400, 107405, + 107410, 107415, 107420, 107425, 107430, 107435, 107440, 107445, 107450, + 107455, 107460, 107465, 107469, 107473, 107478, 107483, 107488, 107493, + 107497, 107501, 107506, 107510, 107515, 107520, 107525, 107529, 107534, + 107540, 107545, 107551, 107556, 107562, 107567, 107573, 107578, 107584, + 107589, 0, 0, 0, 0, 0, 107594, 107599, 107603, 107607, 107611, 107615, + 107619, 107623, 107628, 107632, 0, 0, 0, 0, 0, 0, 107637, 107644, 107649, + 107654, 0, 107659, 107663, 107668, 107672, 107677, 107681, 107686, + 107691, 0, 0, 107696, 107701, 0, 0, 107706, 107711, 107716, 107720, + 107725, 107730, 107735, 107740, 107745, 107750, 107755, 107760, 107765, + 107770, 107775, 107780, 107785, 107790, 107795, 107800, 107805, 107810, + 0, 107814, 107818, 107823, 107828, 107833, 107837, 107841, 0, 107846, + 107850, 0, 107855, 107860, 107865, 107870, 107875, 0, 0, 107879, 107884, + 107889, 107895, 107900, 107906, 107911, 107917, 107923, 0, 0, 107930, + 107936, 0, 0, 107942, 107948, 107954, 0, 0, 107959, 0, 0, 0, 0, 0, 0, + 107963, 0, 0, 0, 0, 0, 107970, 107975, 107982, 107990, 107996, 108002, + 108008, 0, 0, 108015, 108021, 108026, 108031, 108036, 108041, 108046, 0, + 0, 0, 108051, 108056, 108061, 108066, 108072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 105810, 105814, 105818, 105822, 105826, 105830, 105835, 0, - 105840, 0, 105845, 105850, 105855, 105860, 0, 105865, 105870, 105875, - 105880, 105885, 105890, 105895, 105900, 105905, 105910, 105915, 105920, - 105925, 105929, 105934, 0, 105939, 105944, 105948, 105952, 105957, - 105962, 105967, 105972, 105976, 105981, 105986, 0, 0, 0, 0, 0, 0, 105991, - 105995, 106000, 106004, 106009, 106013, 106018, 106022, 106027, 106031, - 106036, 106040, 106045, 106050, 106055, 106060, 106065, 106070, 106075, - 106080, 106085, 106090, 106095, 106100, 106105, 106110, 106115, 106120, - 106125, 106130, 106135, 106140, 106145, 106150, 106155, 106159, 106164, - 106169, 106174, 106179, 106183, 106187, 106192, 106197, 106202, 106207, - 106212, 106216, 106221, 106227, 106232, 106238, 106243, 106249, 106254, - 106260, 106265, 106271, 106276, 0, 0, 0, 0, 0, 106281, 106286, 106290, - 106294, 106298, 106302, 106306, 106310, 106315, 106319, 0, 0, 0, 0, 0, 0, - 106324, 106331, 106336, 106341, 0, 106346, 106350, 106355, 106359, - 106364, 106368, 106373, 106378, 0, 0, 106383, 106388, 0, 0, 106393, - 106398, 106403, 106407, 106412, 106417, 106422, 106427, 106432, 106437, - 106442, 106447, 106452, 106457, 106462, 106467, 106472, 106477, 106482, - 106487, 106492, 106497, 0, 106502, 106506, 106511, 106516, 106521, - 106525, 106529, 0, 106534, 106539, 0, 106544, 106549, 106554, 106559, - 106564, 0, 0, 106568, 106573, 106578, 106584, 106589, 106595, 106600, - 106606, 106612, 0, 0, 106619, 106625, 0, 0, 106631, 106637, 106643, 0, 0, - 106648, 0, 0, 0, 0, 0, 0, 106652, 0, 0, 0, 0, 0, 106659, 106664, 106671, - 106679, 106685, 106691, 106697, 0, 0, 106704, 106710, 106715, 106720, - 106725, 106730, 106735, 0, 0, 0, 106740, 106745, 106750, 106756, 106762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108077, 108080, 108084, 108087, 108091, + 108094, 108098, 108102, 108107, 108111, 108116, 108119, 108123, 108126, + 108130, 108133, 108137, 108141, 108145, 108149, 108153, 108157, 108161, + 108165, 108169, 108173, 108177, 108181, 108185, 108189, 108193, 108197, + 108201, 108205, 108209, 108213, 108216, 108220, 108223, 108227, 108231, + 108235, 108238, 108242, 108245, 108249, 108253, 108256, 108260, 108264, + 108268, 108272, 108276, 108279, 108284, 108288, 108293, 108297, 108302, + 108307, 108313, 108318, 108324, 108328, 108333, 108337, 108342, 108346, + 108350, 108354, 108358, 108362, 108366, 108371, 108374, 108377, 108380, + 108384, 108387, 108392, 108396, 108400, 108403, 108406, 108409, 108412, + 108415, 108418, 108422, 108425, 0, 108429, 0, 108433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 108437, 108441, 108445, 108450, 108454, 108459, 108463, + 108468, 108473, 108479, 108484, 108490, 108494, 108499, 108503, 108508, + 108512, 108517, 108522, 108527, 108532, 108537, 108542, 108547, 108552, + 108557, 108562, 108567, 108572, 108577, 108582, 108587, 108592, 108597, + 108602, 108606, 108610, 108615, 108620, 108625, 108629, 108633, 108638, + 108642, 108647, 108652, 108657, 108662, 108666, 108672, 108677, 108683, + 108688, 108694, 108700, 108707, 108713, 108720, 108725, 108732, 108738, + 108743, 108750, 108756, 108761, 108766, 108771, 108776, 108781, 108786, + 108790, 108795, 0, 0, 0, 0, 0, 0, 0, 0, 108799, 108804, 108808, 108812, + 108816, 108820, 108824, 108828, 108833, 108837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108842, 108845, 108849, 108852, + 108856, 108859, 108863, 108867, 108872, 108876, 108881, 108884, 108888, + 108891, 108895, 108898, 108902, 108906, 108910, 108914, 108918, 108922, + 108926, 108930, 108934, 108938, 108942, 108946, 108950, 108954, 108958, + 108962, 108966, 108970, 108973, 108976, 108980, 108984, 108988, 108991, + 108994, 108998, 109001, 109005, 109009, 109013, 109017, 109020, 109025, + 109029, 109034, 109038, 109043, 109048, 0, 0, 109054, 109058, 109063, + 109067, 109072, 109076, 109080, 109084, 109088, 109092, 109096, 109099, + 109103, 109108, 109112, 109117, 109122, 109127, 109134, 109146, 109158, + 109170, 109183, 109197, 109204, 109214, 109222, 109231, 109240, 109249, + 109259, 109270, 109282, 109289, 109296, 109304, 109309, 109315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 106767, 106771, 106775, 106780, 106784, 106789, 106793, 106798, - 106803, 106809, 106814, 106820, 106824, 106829, 106833, 106838, 106842, - 106847, 106852, 106857, 106862, 106867, 106872, 106877, 106882, 106887, - 106892, 106897, 106902, 106907, 106912, 106917, 106922, 106927, 106932, - 106937, 106941, 106946, 106951, 106956, 106960, 106964, 106969, 106974, - 106979, 106984, 106989, 106994, 106998, 107004, 107009, 107015, 107020, - 107026, 107032, 107039, 107045, 107052, 107057, 107064, 107070, 107075, - 107082, 107088, 107093, 107098, 107103, 107108, 107113, 107118, 107122, - 107127, 0, 0, 0, 0, 0, 0, 0, 0, 107131, 107136, 107140, 107144, 107148, - 107152, 107156, 107160, 107165, 107169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 109322, 109326, 109331, 109335, 109340, 109344, + 109349, 109354, 109360, 109365, 109371, 109375, 109380, 109384, 109389, + 109393, 109398, 109403, 109408, 109413, 109418, 109423, 109428, 109433, + 109438, 109443, 109448, 109453, 109458, 109463, 109468, 109473, 109478, + 109483, 109487, 109491, 109496, 109501, 109506, 109510, 109514, 109519, + 109523, 109528, 109533, 109538, 109543, 109547, 109552, 109558, 109563, + 109569, 109574, 109580, 109586, 109593, 109599, 109606, 109611, 109617, + 109622, 109628, 109633, 109638, 109643, 109648, 109652, 109657, 109662, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109667, 109672, 109676, 109680, 109684, + 109688, 109692, 109696, 109701, 109705, 0, 0, 0, 0, 0, 0, 109710, 109716, + 109721, 109728, 109736, 109743, 109751, 109760, 109765, 109774, 109779, + 109787, 109796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 109807, 109811, 109816, 109820, 109825, 109829, 109834, 109838, 109843, + 109847, 109852, 109856, 109861, 109866, 109871, 109876, 109881, 109886, + 109891, 109896, 109901, 109906, 109911, 109916, 109921, 109926, 109931, + 109936, 109941, 109946, 109950, 109954, 109959, 109964, 109969, 109973, + 109977, 109982, 109986, 109991, 109996, 110001, 110005, 110010, 110015, + 110020, 110026, 110031, 110037, 110042, 110048, 110053, 110059, 110064, + 110070, 110075, 0, 0, 0, 0, 0, 0, 0, 0, 110080, 110085, 110089, 110093, + 110097, 110101, 110105, 110109, 110114, 110118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110123, + 110127, 110132, 110137, 110141, 110146, 110153, 110157, 110162, 110167, + 110171, 110176, 110181, 110186, 110191, 110195, 110200, 110205, 110209, + 110213, 110218, 110223, 110228, 110235, 110240, 110245, 0, 0, 0, 110250, + 110256, 110263, 110272, 110277, 110283, 110288, 110294, 110299, 110305, + 110310, 110316, 110321, 110327, 110333, 0, 0, 0, 0, 110338, 110343, + 110347, 110351, 110355, 110359, 110363, 110367, 110372, 110376, 110381, + 110386, 110391, 110397, 110402, 110407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107174, 107177, 107181, 107184, 107188, - 107191, 107195, 107199, 107204, 107208, 107213, 107216, 107220, 107223, - 107227, 107230, 107234, 107238, 107242, 107246, 107250, 107254, 107258, - 107262, 107266, 107270, 107274, 107278, 107282, 107286, 107290, 107294, - 107298, 107302, 107306, 107309, 107313, 107317, 107321, 107324, 107327, - 107331, 107335, 107339, 107343, 107347, 107351, 107354, 107359, 107363, - 107368, 107372, 107377, 107382, 0, 0, 107388, 107392, 107397, 107401, - 107406, 107410, 107414, 107418, 107422, 107426, 107430, 107433, 107437, - 107442, 107446, 107451, 107456, 107461, 107468, 107480, 107492, 107504, - 107517, 107531, 107538, 107548, 107556, 107565, 107574, 107583, 107593, - 107604, 107616, 107623, 107630, 107638, 107643, 107649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 107656, 107660, 107665, 107669, 107674, 107678, 107683, - 107688, 107694, 107699, 107705, 107709, 107714, 107718, 107723, 107727, - 107732, 107737, 107742, 107747, 107752, 107757, 107762, 107767, 107772, - 107777, 107782, 107787, 107792, 107797, 107802, 107807, 107812, 107817, - 107822, 107826, 107831, 107836, 107841, 107845, 107849, 107854, 107859, - 107864, 107869, 107874, 107879, 107883, 107888, 107894, 107899, 107905, - 107910, 107916, 107922, 107929, 107935, 107942, 107947, 107953, 107958, - 107964, 107969, 107974, 107979, 107984, 107988, 107993, 107998, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 108003, 108008, 108012, 108016, 108020, 108024, - 108028, 108032, 108037, 108041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 108046, 108050, 108055, 108059, 108064, 108068, 108073, 108077, 108082, - 108086, 108091, 108095, 108100, 108105, 108110, 108115, 108120, 108125, - 108130, 108135, 108140, 108145, 108150, 108155, 108160, 108165, 108170, - 108175, 108180, 108185, 108190, 108194, 108199, 108204, 108209, 108213, - 108217, 108222, 108227, 108232, 108237, 108242, 108246, 108251, 108256, - 108261, 108267, 108272, 108278, 108283, 108289, 108294, 108300, 108305, - 108311, 108316, 0, 0, 0, 0, 0, 0, 0, 0, 108321, 108326, 108330, 108334, - 108338, 108342, 108346, 108350, 108355, 108359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108364, - 108368, 108373, 108378, 108383, 108388, 108395, 108399, 108404, 108409, - 108413, 108418, 108423, 108428, 108433, 108438, 108443, 108448, 108452, - 108456, 108461, 108466, 108471, 108478, 108483, 108488, 0, 0, 0, 108493, - 108500, 108507, 108516, 108521, 108527, 108532, 108538, 108543, 108549, - 108554, 108560, 108565, 108571, 108577, 0, 0, 0, 0, 108582, 108587, - 108591, 108595, 108599, 108603, 108607, 108611, 108616, 108620, 108625, - 108630, 108635, 108641, 108646, 108651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 110412, 110420, 110427, 110435, 110443, 110450, 110458, + 110466, 110474, 110481, 110488, 110496, 110504, 110512, 110520, 110528, + 110536, 110544, 110552, 110560, 110568, 110576, 110584, 110592, 110600, + 110608, 110616, 110624, 110632, 110640, 110648, 110656, 110664, 110672, + 110679, 110687, 110695, 110702, 110710, 110718, 110726, 110733, 110740, + 110748, 110756, 110764, 110772, 110780, 110788, 110796, 110804, 110812, + 110820, 110828, 110836, 110844, 110852, 110860, 110868, 110876, 110884, + 110892, 110900, 110908, 110916, 110923, 110929, 110935, 110941, 110947, + 110953, 110959, 110966, 110972, 110979, 110986, 110993, 111000, 111007, + 111014, 111021, 111028, 111035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 111042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18925,1151 +20077,1274 @@ static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 111048, 111056, 111064, 111072, 111080, 111089, 111098, 111107, + 111116, 111124, 111133, 111142, 111151, 111160, 111169, 111178, 111187, + 111195, 111204, 111213, 111222, 111231, 111239, 111247, 111255, 111263, + 111271, 111280, 111289, 111299, 111309, 111319, 111329, 111339, 111348, + 111358, 111368, 111378, 111389, 111399, 111411, 111423, 111434, 111448, + 111459, 111469, 111481, 111492, 111502, 111514, 111526, 111537, 111548, + 111558, 111568, 111580, 111591, 0, 0, 0, 0, 0, 0, 0, 111603, 111606, + 111610, 111613, 111617, 111620, 111624, 111628, 111633, 0, 111637, + 111640, 111644, 111647, 111651, 111654, 111658, 111662, 111666, 111670, + 111674, 111678, 111682, 111686, 111690, 111694, 111698, 111702, 111706, + 111710, 111714, 111718, 111722, 111726, 111729, 111732, 111736, 111740, + 111744, 111747, 111750, 111754, 111757, 111761, 111765, 111769, 111773, + 111776, 111781, 111785, 111790, 111794, 111799, 111804, 111810, 0, + 111815, 111819, 111824, 111828, 111833, 111837, 111841, 111845, 111849, + 111853, 111856, 111860, 111865, 111870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 111875, 111879, 111882, 111885, 111888, 111891, 111894, 111897, 111901, + 111904, 111908, 111911, 111914, 111917, 111920, 111923, 111926, 111930, + 111933, 111937, 111941, 111945, 111949, 111953, 111957, 111961, 111965, + 111969, 111973, 0, 0, 0, 111979, 111984, 111989, 111993, 111998, 112003, + 112008, 112013, 112018, 112023, 112028, 112033, 112038, 112043, 112047, + 112051, 112056, 112061, 112065, 112070, 112075, 112080, 112085, 112090, + 112095, 112100, 112104, 112109, 112113, 112118, 112123, 112127, 0, 0, + 112131, 112137, 112144, 112151, 112158, 112165, 112172, 112179, 112186, + 112193, 112200, 112207, 112213, 112219, 112226, 112233, 112239, 112246, + 112253, 112260, 112267, 112274, 0, 112281, 112287, 112294, 112300, + 112307, 112314, 112320, 112326, 112332, 112337, 112342, 112347, 112352, + 112357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 108656, 108664, 108671, 108679, 108687, 108694, 108702, - 108710, 108718, 108725, 108732, 108740, 108748, 108756, 108764, 108772, - 108780, 108788, 108796, 108804, 108812, 108820, 108828, 108836, 108844, - 108852, 108860, 108868, 108876, 108884, 108892, 108900, 108908, 108916, - 108923, 108931, 108939, 108946, 108954, 108962, 108970, 108977, 108984, - 108992, 109000, 109008, 109016, 109024, 109032, 109040, 109048, 109056, - 109064, 109072, 109080, 109088, 109096, 109104, 109112, 109120, 109128, - 109136, 109144, 109152, 109160, 109167, 109173, 109179, 109185, 109191, - 109197, 109203, 109210, 109216, 109223, 109230, 109237, 109244, 109251, - 109258, 109265, 109272, 109279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112362, 112365, 112370, 112376, 112384, 112389, 112395, 112403, + 112409, 112415, 112419, 112423, 112430, 112439, 112446, 112455, 112461, + 112470, 112477, 112484, 112491, 112501, 112507, 112511, 112518, 112527, + 112537, 112544, 112551, 112555, 112559, 112566, 112576, 112580, 112587, + 112594, 112601, 112607, 112614, 112621, 112628, 112635, 112639, 112643, + 112647, 112654, 112658, 112665, 112672, 112686, 112695, 112699, 112703, + 112707, 112714, 112718, 112722, 112726, 112734, 112742, 112761, 112771, + 112791, 112795, 112799, 112803, 112807, 112811, 112815, 112819, 112826, + 112830, 112833, 112837, 112841, 112847, 112854, 112863, 112867, 112876, + 112885, 112893, 112897, 112904, 112908, 112912, 112916, 112920, 112931, + 112940, 112949, 112958, 112967, 112979, 112988, 112997, 113006, 113014, + 113023, 113035, 113044, 113052, 113061, 113073, 113082, 113091, 113103, + 113112, 113121, 113133, 113142, 113146, 113150, 113154, 113158, 113162, + 113166, 113170, 113177, 113181, 113185, 113196, 113200, 113204, 113211, + 113217, 113223, 113227, 113234, 113238, 113242, 113246, 113250, 113254, + 113258, 113264, 113272, 113276, 113280, 113283, 113289, 113299, 113303, + 113315, 113322, 113329, 113336, 113343, 113349, 113353, 113357, 113361, + 113365, 113372, 113381, 113388, 113396, 113404, 113410, 113414, 113418, + 113422, 113426, 113432, 113441, 113453, 113460, 113467, 113476, 113487, + 113493, 113502, 113511, 113518, 113527, 113534, 113540, 113550, 113557, + 113564, 113571, 113578, 113582, 113588, 113592, 113603, 113611, 113620, + 113632, 113639, 113646, 113656, 113663, 113673, 113680, 113690, 113697, + 113704, 113714, 113721, 113728, 113737, 113744, 113756, 113765, 113772, + 113779, 113786, 113795, 113805, 113818, 113825, 113834, 113844, 113851, + 113860, 113873, 113880, 113887, 113894, 113904, 113914, 113920, 113930, + 113937, 113944, 113954, 113960, 113967, 113974, 113981, 113991, 113998, + 114005, 114012, 114018, 114025, 114035, 114042, 114046, 114054, 114058, + 114070, 114074, 114088, 114092, 114096, 114100, 114104, 114110, 114117, + 114125, 114129, 114133, 114137, 114141, 114148, 114152, 114158, 114164, + 114172, 114176, 114183, 114191, 114195, 114199, 114205, 114209, 114218, + 114227, 114234, 114244, 114250, 114254, 114258, 114266, 114273, 114280, + 114286, 114290, 114298, 114302, 114309, 114321, 114328, 114338, 114344, + 114348, 114357, 114364, 114373, 114377, 114381, 114388, 114392, 114396, + 114400, 114404, 114407, 114413, 114419, 114423, 114427, 114434, 114441, + 114448, 114455, 114462, 114469, 114476, 114483, 114489, 114493, 114497, + 114504, 114511, 114518, 114525, 114532, 114536, 114539, 114544, 114548, + 114552, 114561, 114570, 114574, 114578, 114584, 114590, 114607, 114613, + 114617, 114626, 114630, 114634, 114641, 114649, 114657, 114663, 114667, + 114671, 114675, 114679, 114682, 114688, 114695, 114705, 114712, 114719, + 114726, 114732, 114739, 114746, 114753, 114760, 114767, 114776, 114783, + 114795, 114802, 114809, 114819, 114830, 114837, 114844, 114851, 114858, + 114865, 114872, 114879, 114886, 114893, 114900, 114910, 114920, 114930, + 114937, 114947, 114954, 114961, 114968, 114975, 114982, 114989, 114996, + 115003, 115010, 115017, 115024, 115031, 115038, 115044, 115051, 115058, + 115067, 115074, 115081, 115085, 115093, 115097, 115101, 115105, 115109, + 115113, 115120, 115124, 115133, 115137, 115144, 115152, 115156, 115160, + 115164, 115177, 115193, 115197, 115201, 115208, 115214, 115221, 115225, + 115229, 115233, 115237, 115241, 115248, 115252, 115270, 115274, 115278, + 115285, 115289, 115293, 115299, 115303, 115307, 115315, 115319, 115323, + 115326, 115330, 115336, 115347, 115356, 115365, 115372, 115379, 115390, + 115397, 115404, 115411, 115418, 115425, 115432, 115439, 115449, 115455, + 115462, 115472, 115481, 115488, 115497, 115507, 115514, 115521, 115528, + 115535, 115547, 115554, 115561, 115568, 115575, 115582, 115592, 115599, + 115606, 115616, 115629, 115641, 115648, 115658, 115665, 115672, 115679, + 115693, 115699, 115707, 115717, 115727, 115734, 115741, 115747, 115751, + 115758, 115768, 115774, 115787, 115791, 115795, 115802, 115806, 115813, + 115823, 115827, 115831, 115835, 115839, 115843, 115850, 115854, 115861, + 115868, 115875, 115884, 115893, 115903, 115910, 115917, 115924, 115934, + 115941, 115951, 115958, 115968, 115975, 115982, 115992, 116002, 116009, + 116015, 116023, 116031, 116037, 116043, 116047, 116051, 116058, 116066, + 116072, 116076, 116080, 116084, 116091, 116103, 116106, 116113, 116119, + 116123, 116127, 116131, 116135, 116139, 116143, 116147, 116151, 116155, + 116159, 116166, 116170, 116176, 116180, 116184, 116188, 116194, 116201, + 116208, 116215, 116226, 116234, 116238, 116244, 116253, 116260, 116266, + 116269, 116273, 116277, 116283, 116292, 116300, 116304, 116310, 116314, + 116318, 116322, 116328, 116335, 116341, 116345, 116351, 116355, 116359, + 116368, 116380, 116384, 116391, 116398, 116408, 116415, 116427, 116434, + 116441, 116448, 116459, 116469, 116482, 116492, 116499, 116503, 116507, + 116511, 116515, 116524, 116533, 116542, 116559, 116568, 116574, 116581, + 116589, 116602, 116606, 116615, 116624, 116633, 116642, 116653, 116662, + 116670, 116679, 116688, 116697, 116706, 116716, 116719, 116723, 116727, + 116731, 116735, 116739, 116745, 116752, 116759, 116766, 116772, 116778, + 116785, 116791, 116798, 116806, 116810, 116817, 116824, 116831, 116839, + 116843, 116847, 116851, 116855, 116859, 116865, 116869, 116875, 116882, + 116889, 116895, 116902, 116909, 116916, 116923, 116930, 116937, 116944, + 116951, 116958, 116965, 116972, 116979, 116986, 116993, 116999, 117003, + 117012, 117016, 117020, 117024, 117028, 117034, 117041, 117048, 117055, + 117062, 117069, 117075, 117083, 117087, 117091, 117095, 117099, 117105, + 117122, 117139, 117143, 117147, 117151, 117155, 117159, 117163, 117169, + 117176, 117180, 117186, 117193, 117200, 117207, 117214, 117221, 117230, + 117237, 117244, 117251, 117258, 117262, 117266, 117272, 117284, 117288, + 117292, 117301, 117305, 117309, 117313, 117319, 117323, 117327, 117336, + 117340, 117344, 117348, 117355, 117359, 117363, 117367, 117371, 117375, + 117379, 117383, 117387, 117393, 117400, 117407, 117413, 117417, 117434, + 117440, 117444, 117450, 117456, 117462, 117468, 117474, 117480, 117484, + 117488, 117492, 117498, 117502, 117508, 117512, 117516, 117523, 117530, + 117547, 117551, 117555, 117559, 117563, 117567, 117579, 117582, 117587, + 117592, 117607, 117617, 117629, 117633, 117637, 117641, 117647, 117654, + 117661, 117671, 117683, 117689, 117695, 117704, 117708, 117712, 117719, + 117729, 117736, 117742, 117746, 117750, 117757, 117763, 117767, 117773, + 117777, 117785, 117791, 117795, 117803, 117811, 117818, 117824, 117831, + 117838, 117848, 117858, 117862, 117866, 117870, 117874, 117880, 117887, + 117893, 117900, 117907, 117914, 117923, 117930, 117937, 117943, 117950, + 117957, 117964, 117971, 117978, 117985, 117991, 117998, 118005, 118012, + 118021, 118028, 118035, 118039, 118045, 118049, 118055, 118062, 118069, + 118076, 118080, 118084, 118088, 118092, 118096, 118103, 118107, 118111, + 118117, 118125, 118129, 118133, 118137, 118141, 118148, 118152, 118156, + 118164, 118168, 118172, 118176, 118180, 118186, 118190, 118194, 118200, + 118207, 118213, 118220, 118232, 118236, 118243, 118250, 118257, 118264, + 118276, 118283, 118287, 118291, 118295, 118302, 118309, 118316, 118323, + 118333, 118340, 118346, 118353, 118360, 118367, 118374, 118383, 118393, + 118400, 118404, 118411, 118415, 118419, 118423, 118430, 118437, 118447, + 118453, 118457, 118466, 118470, 118477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118481, 118487, + 118493, 118500, 118507, 118514, 118521, 118528, 118535, 118541, 118548, + 118555, 118562, 118569, 118576, 118583, 118589, 118595, 118601, 118607, + 118613, 118619, 118625, 118631, 118637, 118644, 118651, 118658, 118665, + 118672, 118679, 118685, 118691, 118697, 118704, 118711, 118717, 118723, + 118732, 118739, 118746, 118753, 118760, 118767, 118774, 118780, 118786, + 118792, 118801, 118808, 118815, 118826, 118837, 118843, 118849, 118855, + 118864, 118871, 118878, 118888, 118898, 118909, 118920, 118932, 118945, + 118956, 118967, 118979, 118992, 119003, 119014, 119025, 119036, 119047, + 119059, 119067, 119075, 119084, 119093, 119102, 119108, 119114, 119120, + 119127, 119137, 119144, 119154, 119159, 119164, 119170, 119176, 119184, + 119192, 119201, 119212, 119223, 119231, 119239, 119248, 119257, 119265, + 119272, 119280, 119288, 119295, 119302, 119311, 119320, 119329, 119338, + 119347, 0, 119356, 119367, 119374, 119382, 119390, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119398, 119407, 119414, 119421, 119430, 119437, 119444, + 119451, 119461, 119468, 119475, 119482, 119490, 119497, 119504, 119511, + 119522, 119529, 119536, 119543, 119550, 119557, 119566, 119573, 119579, + 119586, 119595, 119602, 119609, 119616, 119626, 119633, 119640, 119650, + 119660, 119667, 119674, 119681, 119688, 119695, 119702, 119711, 119718, + 119725, 119731, 119739, 119748, 119757, 119768, 119776, 119785, 119794, + 119803, 119812, 119819, 119826, 119835, 119847, 119857, 119864, 119871, + 119881, 119891, 119900, 119910, 119917, 119927, 119934, 119941, 119948, + 119958, 119968, 119975, 119982, 119992, 119998, 120009, 120018, 120028, + 120036, 120049, 120056, 120062, 120070, 120077, 120087, 120091, 120095, + 120099, 120103, 120107, 120111, 120115, 120124, 120128, 120135, 120139, + 120143, 120147, 120151, 120155, 120159, 120163, 120167, 120171, 120175, + 120179, 120183, 120187, 120191, 120195, 120199, 120203, 120207, 120211, + 120218, 120225, 120235, 120248, 120258, 120262, 120266, 120270, 120274, + 120278, 120282, 120286, 120290, 120294, 120298, 120302, 120309, 120316, + 120327, 120334, 120340, 120347, 120354, 120361, 120368, 120375, 120379, + 120383, 120390, 120397, 120404, 120413, 120420, 120433, 120443, 120450, + 120457, 120461, 120465, 120474, 120481, 120488, 120495, 120508, 120515, + 120522, 120532, 120542, 120551, 120558, 120565, 120572, 120579, 120586, + 120593, 120603, 120609, 120617, 120624, 120632, 120639, 120650, 120657, + 120663, 120670, 120677, 120684, 120691, 120701, 120711, 120718, 120725, + 120734, 120742, 120748, 120755, 120762, 120769, 120776, 120780, 120790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 109292, 109300, 109308, 109317, 109325, 109334, 109343, 109352, - 109361, 109369, 109378, 109387, 109396, 109405, 109414, 109423, 109432, - 109441, 109450, 109459, 109468, 109477, 109485, 109493, 109501, 109509, - 109517, 109526, 109535, 109545, 109555, 109565, 109575, 109585, 109594, - 109604, 109614, 109624, 109635, 109645, 109657, 109669, 109680, 109694, - 109705, 109715, 109727, 109738, 109748, 109760, 109772, 109783, 109794, - 109804, 109814, 109826, 109837, 0, 0, 0, 0, 0, 0, 0, 109849, 109852, - 109857, 109863, 109871, 109876, 109882, 109890, 109896, 109902, 109906, - 109910, 109917, 109926, 109933, 109942, 109948, 109957, 109964, 109971, - 109978, 109988, 109994, 109998, 110005, 110014, 110024, 110031, 110038, - 110042, 110046, 110053, 110063, 110067, 110074, 110081, 110088, 110094, - 110101, 110108, 110115, 110122, 110126, 110130, 110134, 110141, 110145, - 110152, 110159, 110173, 110182, 110186, 110190, 110194, 110201, 110205, - 110209, 110213, 110221, 110229, 110248, 110258, 110278, 110282, 110286, - 110290, 110294, 110298, 110302, 110306, 110313, 110317, 110320, 110324, - 110328, 110334, 110341, 110350, 110354, 110363, 110372, 110380, 110384, - 110391, 110395, 110399, 110403, 110407, 110418, 110427, 110436, 110445, - 110454, 110466, 110475, 110484, 110493, 110501, 110510, 110522, 110531, - 110540, 110549, 110561, 110570, 110579, 110591, 110600, 110609, 110621, - 110630, 110634, 110638, 110642, 110646, 110650, 110654, 110658, 110665, - 110669, 110673, 110684, 110688, 110692, 110699, 110705, 110711, 110715, - 110722, 110726, 110730, 110734, 110738, 110742, 110746, 110752, 110760, - 110764, 110768, 110771, 110777, 110787, 110791, 110803, 110810, 110817, - 110824, 110831, 110837, 110841, 110845, 110849, 110853, 110860, 110869, - 110876, 110884, 110892, 110898, 110902, 110906, 110910, 110914, 110920, - 110929, 110941, 110948, 110955, 110964, 110975, 110981, 110990, 110999, - 111006, 111015, 111022, 111029, 111039, 111046, 111053, 111060, 111067, - 111071, 111077, 111081, 111092, 111100, 111109, 111121, 111128, 111135, - 111145, 111152, 111162, 111169, 111179, 111186, 111193, 111203, 111210, - 111217, 111227, 111234, 111246, 111255, 111262, 111269, 111276, 111285, - 111295, 111308, 111315, 111325, 111335, 111342, 111351, 111364, 111371, - 111378, 111385, 111395, 111405, 111412, 111422, 111429, 111436, 111446, - 111452, 111459, 111466, 111473, 111483, 111490, 111497, 111504, 111510, - 111517, 111527, 111534, 111538, 111546, 111550, 111562, 111566, 111580, - 111584, 111588, 111592, 111596, 111602, 111609, 111617, 111621, 111625, - 111629, 111633, 111640, 111644, 111650, 111656, 111664, 111668, 111675, - 111683, 111687, 111691, 111697, 111701, 111710, 111719, 111726, 111736, - 111742, 111746, 111750, 111758, 111765, 111772, 111778, 111782, 111790, - 111794, 111801, 111813, 111820, 111830, 111836, 111840, 111849, 111856, - 111865, 111869, 111873, 111880, 111884, 111888, 111892, 111896, 111899, - 111905, 111911, 111915, 111919, 111926, 111933, 111940, 111947, 111954, - 111961, 111968, 111975, 111981, 111985, 111989, 111996, 112003, 112010, - 112017, 112024, 112028, 112031, 112036, 112040, 112044, 112053, 112062, - 112066, 112070, 112076, 112082, 112099, 112105, 112109, 112118, 112122, - 112126, 112133, 112141, 112149, 112155, 112159, 112163, 112167, 112171, - 112174, 112180, 112187, 112197, 112204, 112211, 112218, 112224, 112231, - 112238, 112245, 112252, 112259, 112268, 112275, 112287, 112294, 112301, - 112311, 112322, 112329, 112336, 112343, 112350, 112357, 112364, 112371, - 112378, 112385, 112392, 112402, 112412, 112422, 112429, 112439, 112446, - 112453, 112460, 112467, 112474, 112481, 112488, 112495, 112502, 112509, - 112516, 112523, 112530, 112536, 112543, 112550, 112559, 112566, 112573, - 112577, 112585, 112589, 112593, 112597, 112601, 112605, 112612, 112616, - 112625, 112629, 112636, 112644, 112648, 112652, 112656, 112669, 112685, - 112689, 112693, 112700, 112706, 112713, 112717, 112721, 112725, 112729, - 112733, 112740, 112744, 112762, 112766, 112770, 112777, 112781, 112785, - 112791, 112795, 112799, 112807, 112811, 112815, 112819, 112823, 112829, - 112840, 112849, 112858, 112865, 112872, 112883, 112890, 112897, 112904, - 112911, 112918, 112925, 112932, 112942, 112948, 112955, 112965, 112974, - 112981, 112990, 113000, 113007, 113014, 113021, 113028, 113040, 113047, - 113054, 113061, 113068, 113075, 113085, 113092, 113099, 113109, 113122, - 113134, 113141, 113151, 113158, 113165, 113172, 113187, 113193, 113201, - 113211, 113221, 113228, 113235, 113241, 113245, 113252, 113262, 113268, - 113281, 113285, 113289, 113296, 113300, 113307, 113317, 113321, 113325, - 113329, 113333, 113337, 113344, 113348, 113355, 113362, 113369, 113378, - 113387, 113397, 113404, 113411, 113418, 113428, 113435, 113445, 113452, - 113462, 113469, 113476, 113486, 113496, 113503, 113509, 113517, 113525, - 113531, 113537, 113541, 113545, 113552, 113560, 113566, 113570, 113574, - 113578, 113585, 113597, 113600, 113607, 113613, 113617, 113621, 113625, - 113629, 113633, 113637, 113641, 113645, 113649, 113653, 113660, 113664, - 113670, 113674, 113678, 113682, 113688, 113695, 113702, 113709, 113721, - 113729, 113733, 113739, 113748, 113755, 113761, 113765, 113769, 113773, - 113779, 113788, 113796, 113800, 113806, 113810, 113814, 113818, 113824, - 113831, 113837, 113841, 113847, 113851, 113855, 113864, 113876, 113880, - 113887, 113894, 113904, 113911, 113923, 113930, 113937, 113944, 113955, - 113965, 113978, 113988, 113995, 113999, 114003, 114007, 114011, 114020, - 114029, 114038, 114055, 114064, 114070, 114077, 114085, 114098, 114102, - 114111, 114120, 114129, 114138, 114149, 114158, 114167, 114176, 114185, - 114194, 114203, 114213, 114216, 114220, 114224, 114228, 114232, 114236, - 114242, 114249, 114256, 114263, 114269, 114275, 114282, 114288, 114295, - 114303, 114307, 114314, 114321, 114328, 114336, 114340, 114344, 114348, - 114352, 114356, 114362, 114366, 114372, 114379, 114386, 114392, 114399, - 114406, 114413, 114420, 114427, 114434, 114441, 114448, 114455, 114462, - 114469, 114476, 114483, 114490, 114496, 114500, 114509, 114513, 114517, - 114521, 114525, 114531, 114538, 114545, 114552, 114559, 114566, 114572, - 114580, 114584, 114588, 114592, 114596, 114602, 114619, 114636, 114640, - 114644, 114648, 114652, 114656, 114660, 114666, 114673, 114677, 114683, - 114690, 114697, 114704, 114711, 114718, 114727, 114734, 114741, 114748, - 114755, 114759, 114763, 114769, 114781, 114785, 114789, 114798, 114802, - 114806, 114810, 114816, 114820, 114824, 114833, 114837, 114841, 114845, - 114852, 114856, 114860, 114864, 114868, 114872, 114876, 114880, 114884, - 114890, 114897, 114904, 114910, 114914, 114931, 114937, 114941, 114947, - 114953, 114959, 114965, 114971, 114977, 114981, 114985, 114989, 114995, - 114999, 115005, 115009, 115013, 115020, 115027, 115044, 115048, 115052, - 115056, 115060, 115064, 115076, 115079, 115084, 115089, 115104, 115114, - 115126, 115130, 115134, 115138, 115144, 115151, 115158, 115168, 115180, - 115186, 115192, 115201, 115205, 115209, 115216, 115226, 115233, 115239, - 115243, 115247, 115254, 115260, 115264, 115270, 115274, 115282, 115288, - 115292, 115300, 115309, 115316, 115322, 115329, 115336, 115346, 115356, - 115360, 115364, 115368, 115372, 115378, 115385, 115391, 115398, 115405, - 115412, 115421, 115428, 115435, 115441, 115448, 115455, 115462, 115469, - 115476, 115483, 115489, 115496, 115503, 115510, 115519, 115526, 115533, - 115537, 115543, 115547, 115553, 115560, 115567, 115574, 115578, 115582, - 115586, 115590, 115594, 115601, 115605, 115609, 115615, 115623, 115627, - 115631, 115635, 115639, 115646, 115650, 115654, 115662, 115666, 115670, - 115674, 115678, 115684, 115688, 115692, 115698, 115705, 115711, 115718, - 115730, 115734, 115741, 115748, 115755, 115762, 115774, 115781, 115785, - 115789, 115793, 115800, 115807, 115814, 115821, 115831, 115838, 115844, - 115851, 115858, 115865, 115872, 115881, 115891, 115898, 115902, 115909, - 115913, 115917, 115921, 115928, 115935, 115945, 115951, 115955, 115964, - 115968, 115975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115979, 115985, 115991, 115998, 116005, - 116012, 116019, 116026, 116033, 116039, 116046, 116053, 116060, 116067, - 116074, 116081, 116087, 116093, 116099, 116105, 116111, 116117, 116123, - 116129, 116135, 116142, 116149, 116156, 116163, 116170, 116177, 116183, - 116189, 116195, 116202, 116209, 116215, 116221, 116230, 116237, 116244, - 116251, 116258, 116265, 116272, 116278, 116284, 116290, 116299, 116306, - 116313, 116324, 116335, 116341, 116347, 116353, 116362, 116369, 116376, - 116386, 116396, 116407, 116418, 116430, 116443, 116454, 116465, 116477, - 116490, 116501, 116512, 116523, 116534, 116545, 116557, 116565, 116573, - 116582, 116591, 116600, 116606, 116612, 116618, 116625, 116635, 116642, - 116652, 116657, 116662, 116668, 116674, 116682, 116690, 116699, 116710, - 116721, 116729, 116737, 116746, 116755, 116763, 116770, 116778, 116786, - 116793, 116800, 116809, 116818, 116827, 116836, 116845, 0, 116854, - 116865, 116872, 116880, 116888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116896, - 116905, 116912, 116919, 116928, 116935, 116942, 116949, 116959, 116966, - 116973, 116980, 116988, 116995, 117002, 117009, 117020, 117027, 117034, - 117041, 117048, 117055, 117064, 117071, 117077, 117084, 117093, 117100, - 117107, 117114, 117124, 117131, 117138, 117148, 117158, 117165, 117172, - 117179, 117186, 117193, 117200, 117209, 117216, 117223, 117229, 117237, - 117246, 117255, 117266, 117275, 117284, 117293, 117302, 117311, 117318, - 117325, 117334, 117346, 117356, 117363, 117370, 117380, 117390, 117399, - 117409, 117416, 117426, 117433, 117440, 117447, 117457, 117467, 117474, - 117481, 117491, 117497, 117508, 117517, 117527, 117535, 117548, 117555, - 117561, 117569, 117576, 117586, 117590, 117594, 117598, 117602, 117606, - 117610, 117614, 117623, 117627, 117634, 117638, 117642, 117646, 117650, - 117654, 117658, 117662, 117666, 117670, 117674, 117678, 117682, 117686, - 117690, 117694, 117698, 117702, 117706, 117710, 117717, 117724, 117734, - 117747, 117757, 117761, 117765, 117769, 117773, 117777, 117781, 117785, - 117789, 117793, 117797, 117801, 117808, 117815, 117826, 117833, 117840, - 117847, 117854, 117861, 117868, 117875, 117879, 117883, 117890, 117897, - 117904, 117913, 117920, 117933, 117943, 117950, 117957, 117961, 117965, - 117974, 117981, 117988, 117995, 118008, 118015, 118022, 118032, 118042, - 118051, 118058, 118065, 118072, 118079, 118086, 118093, 118103, 118109, - 118117, 118124, 118132, 118139, 118150, 118157, 118163, 118170, 118177, - 118184, 118191, 118201, 118211, 118218, 118225, 118234, 118242, 118248, - 118255, 118262, 118269, 118276, 118280, 118290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120800, + 120804, 120808, 120812, 120816, 120820, 120824, 120828, 120832, 120836, + 120840, 120844, 120848, 120852, 120856, 120860, 120864, 120868, 120872, + 120876, 120880, 120884, 120888, 120892, 120896, 120900, 120904, 120908, + 120912, 120916, 120920, 120924, 120928, 120932, 120936, 120940, 120944, + 120948, 120952, 120956, 120960, 120964, 120968, 120972, 120976, 120980, + 120984, 120988, 120992, 120996, 121000, 121004, 121008, 121012, 121016, + 121020, 121024, 121028, 121032, 121036, 121040, 121044, 121048, 121052, + 121056, 121060, 121064, 121068, 121072, 121076, 121080, 121084, 121088, + 121092, 121096, 121100, 121104, 121108, 121112, 121116, 121120, 121124, + 121128, 121132, 121136, 121140, 121144, 121148, 121152, 121156, 121160, + 121164, 121168, 121172, 121176, 121180, 121184, 121188, 121192, 121196, + 121200, 121204, 121208, 121212, 121216, 121220, 121224, 121228, 121232, + 121236, 121240, 121244, 121248, 121252, 121256, 121260, 121264, 121268, + 121272, 121276, 121280, 121284, 121288, 121292, 121296, 121300, 121304, + 121308, 121312, 121316, 121320, 121324, 121328, 121332, 121336, 121340, + 121344, 121348, 121352, 121356, 121360, 121364, 121368, 121372, 121376, + 121380, 121384, 121388, 121392, 121396, 121400, 121404, 121408, 121412, + 121416, 121420, 121424, 121428, 121432, 121436, 121440, 121444, 121448, + 121452, 121456, 121460, 121464, 121468, 121472, 121476, 121480, 121484, + 121488, 121492, 121496, 121500, 121504, 121508, 121512, 121516, 121520, + 121524, 121528, 121532, 121536, 121540, 121544, 121548, 121552, 121556, + 121560, 121564, 121568, 121572, 121576, 121580, 121584, 121588, 121592, + 121596, 121600, 121604, 121608, 121612, 121616, 121620, 121624, 121628, + 121632, 121636, 121640, 121644, 121648, 121652, 121656, 121660, 121664, + 121668, 121672, 121676, 121680, 121684, 121688, 121692, 121696, 121700, + 121704, 121708, 121712, 121716, 121720, 121724, 121728, 121732, 121736, + 121740, 121744, 121748, 121752, 121756, 121760, 121764, 121768, 121772, + 121776, 121780, 121784, 121788, 121792, 121796, 121800, 121804, 121808, + 121812, 121816, 121820, 121824, 121828, 121832, 121836, 121840, 121844, + 121848, 121852, 121856, 121860, 121864, 121868, 121872, 121876, 121880, + 121884, 121888, 121892, 121896, 121900, 121904, 121908, 121912, 121916, + 121920, 121924, 121928, 121932, 121936, 121940, 121944, 121948, 121952, + 121956, 121960, 121964, 121968, 121972, 121976, 121980, 121984, 121988, + 121992, 121996, 122000, 122004, 122008, 122012, 122016, 122020, 122024, + 122028, 122032, 122036, 122040, 122044, 122048, 122052, 122056, 122060, + 122064, 122068, 122072, 122076, 122080, 122084, 122088, 122092, 122096, + 122100, 122104, 122108, 122112, 122116, 122120, 122124, 122128, 122132, + 122136, 122140, 122144, 122148, 122152, 122156, 122160, 122164, 122168, + 122172, 122176, 122180, 122184, 122188, 122192, 122196, 122200, 122204, + 122208, 122212, 122216, 122220, 122224, 122228, 122232, 122236, 122240, + 122244, 122248, 122252, 122256, 122260, 122264, 122268, 122272, 122276, + 122280, 122284, 122288, 122292, 122296, 122300, 122304, 122308, 122312, + 122316, 122320, 122324, 122328, 122332, 122336, 122340, 122344, 122348, + 122352, 122356, 122360, 122364, 122368, 122372, 122376, 122380, 122384, + 122388, 122392, 122396, 122400, 122404, 122408, 122412, 122416, 122420, + 122424, 122428, 122432, 122436, 122440, 122444, 122448, 122452, 122456, + 122460, 122464, 122468, 122472, 122476, 122480, 122484, 122488, 122492, + 122496, 122500, 122504, 122508, 122512, 122516, 122520, 122524, 122528, + 122532, 122536, 122540, 122544, 122548, 122552, 122556, 122560, 122564, + 122568, 122572, 122576, 122580, 122584, 122588, 122592, 122596, 122600, + 122604, 122608, 122612, 122616, 122620, 122624, 122628, 122632, 122636, + 122640, 122644, 122648, 122652, 122656, 122660, 122664, 122668, 122672, + 122676, 122680, 122684, 122688, 122692, 122696, 122700, 122704, 122708, + 122712, 122716, 122720, 122724, 122728, 122732, 122736, 122740, 122744, + 122748, 122752, 122756, 122760, 122764, 122768, 122772, 122776, 122780, + 122784, 122788, 122792, 122796, 122800, 122804, 122808, 122812, 122816, + 122820, 122824, 122828, 122832, 122836, 122840, 122844, 122848, 122852, + 122856, 122860, 122864, 122868, 122872, 122876, 122880, 122884, 122888, + 122892, 122896, 122900, 122904, 122908, 122912, 122916, 122920, 122924, + 122928, 122932, 122936, 122940, 122944, 122948, 122952, 122956, 122960, + 122964, 122968, 122972, 122976, 122980, 122984, 122988, 122992, 122996, + 123000, 123004, 123008, 123012, 123016, 123020, 123024, 123028, 123032, + 123036, 123040, 123044, 123048, 123052, 123056, 123060, 123064, 123068, + 123072, 123076, 123080, 123084, 123088, 123092, 123096, 123100, 123104, + 123108, 123112, 123116, 123120, 123124, 123128, 123132, 123136, 123140, + 123144, 123148, 123152, 123156, 123160, 123164, 123168, 123172, 123176, + 123180, 123184, 123188, 123192, 123196, 123200, 123204, 123208, 123212, + 123216, 123220, 123224, 123228, 123232, 123236, 123240, 123244, 123248, + 123252, 123256, 123260, 123264, 123268, 123272, 123276, 123280, 123284, + 123288, 123292, 123296, 123300, 123304, 123308, 123312, 123316, 123320, + 123324, 123328, 123332, 123336, 123340, 123344, 123348, 123352, 123356, + 123360, 123364, 123368, 123372, 123376, 123380, 123384, 123388, 123392, + 123396, 123400, 123404, 123408, 123412, 123416, 123420, 123424, 123428, + 123432, 123436, 123440, 123444, 123448, 123452, 123456, 123460, 123464, + 123468, 123472, 123476, 123480, 123484, 123488, 123492, 123496, 123500, + 123504, 123508, 123512, 123516, 123520, 123524, 123528, 123532, 123536, + 123540, 123544, 123548, 123552, 123556, 123560, 123564, 123568, 123572, + 123576, 123580, 123584, 123588, 123592, 123596, 123600, 123604, 123608, + 123612, 123616, 123620, 123624, 123628, 123632, 123636, 123640, 123644, + 123648, 123652, 123656, 123660, 123664, 123668, 123672, 123676, 123680, + 123684, 123688, 123692, 123696, 123700, 123704, 123708, 123712, 123716, + 123720, 123724, 123728, 123732, 123736, 123740, 123744, 123748, 123752, + 123756, 123760, 123764, 123768, 123772, 123776, 123780, 123784, 123788, + 123792, 123796, 123800, 123804, 123808, 123812, 123816, 123820, 123824, + 123828, 123832, 123836, 123840, 123844, 123848, 123852, 123856, 123860, + 123864, 123868, 123872, 123876, 123880, 123884, 123888, 123892, 123896, + 123900, 123904, 123908, 123912, 123916, 123920, 123924, 123928, 123932, + 123936, 123940, 123944, 123948, 123952, 123956, 123960, 123964, 123968, + 123972, 123976, 123980, 123984, 123988, 123992, 123996, 124000, 124004, + 124008, 124012, 124016, 124020, 124024, 124028, 124032, 124036, 124040, + 124044, 124048, 124052, 124056, 124060, 124064, 124068, 124072, 124076, + 124080, 124084, 124088, 124092, 124096, 124100, 124104, 124108, 124112, + 124116, 124120, 124124, 124128, 124132, 124136, 124140, 124144, 124148, + 124152, 124156, 124160, 124164, 124168, 124172, 124176, 124180, 124184, + 124188, 124192, 124196, 124200, 124204, 124208, 124212, 124216, 124220, + 124224, 124228, 124232, 124236, 124240, 124244, 124248, 124252, 124256, + 124260, 124264, 124268, 124272, 124276, 124280, 124284, 124288, 124292, + 124296, 124300, 124304, 124308, 124312, 124316, 124320, 124324, 124328, + 124332, 124336, 124340, 124344, 124348, 124352, 124356, 124360, 124364, + 124368, 124372, 124376, 124380, 124384, 124388, 124392, 124396, 124400, + 124404, 124408, 124412, 124416, 124420, 124424, 124428, 124432, 124436, + 124440, 124444, 124448, 124452, 124456, 124460, 124464, 124468, 124472, + 124476, 124480, 124484, 124488, 124492, 124496, 124500, 124504, 124508, + 124512, 124516, 124520, 124524, 124528, 124532, 124536, 124540, 124544, + 124548, 124552, 124556, 124560, 124564, 124568, 124572, 124576, 124580, + 124584, 124588, 124592, 124596, 124600, 124604, 124608, 124612, 124616, + 124620, 124624, 124628, 124632, 124636, 124640, 124644, 124648, 124652, + 124656, 124660, 124664, 124668, 124672, 124676, 124680, 124684, 124688, + 124692, 124696, 124700, 124704, 124708, 124712, 124716, 124720, 124724, + 124728, 124732, 124736, 124740, 124744, 124748, 124752, 124756, 124760, + 124764, 124768, 124772, 124776, 124780, 124784, 124788, 124792, 124796, + 124800, 124804, 124808, 124812, 124816, 124820, 124824, 124828, 124832, + 124836, 124840, 124844, 124848, 124852, 124856, 124860, 124864, 124868, + 124872, 124876, 124880, 124884, 124888, 124892, 124896, 124900, 124904, + 124908, 124912, 124916, 124920, 124924, 124928, 124932, 124936, 124940, + 124944, 124948, 124952, 124956, 124960, 124964, 124968, 124972, 124976, + 124980, 124984, 124988, 124992, 124996, 125000, 125004, 125008, 125012, + 125016, 125020, 125024, 125028, 125032, 125036, 125040, 125044, 125048, + 125052, 125056, 125060, 125064, 125068, 125072, 125076, 125080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118300, 118304, 118308, 118312, - 118316, 118320, 118324, 118328, 118332, 118336, 118340, 118344, 118348, - 118352, 118356, 118360, 118364, 118368, 118372, 118376, 118380, 118384, - 118388, 118392, 118396, 118400, 118404, 118408, 118412, 118416, 118420, - 118424, 118428, 118432, 118436, 118440, 118444, 118448, 118452, 118456, - 118460, 118464, 118468, 118472, 118476, 118480, 118484, 118488, 118492, - 118496, 118500, 118504, 118508, 118512, 118516, 118520, 118524, 118528, - 118532, 118536, 118540, 118544, 118548, 118552, 118556, 118560, 118564, - 118568, 118572, 118576, 118580, 118584, 118588, 118592, 118596, 118600, - 118604, 118608, 118612, 118616, 118620, 118624, 118628, 118632, 118636, - 118640, 118644, 118648, 118652, 118656, 118660, 118664, 118668, 118672, - 118676, 118680, 118684, 118688, 118692, 118696, 118700, 118704, 118708, - 118712, 118716, 118720, 118724, 118728, 118732, 118736, 118740, 118744, - 118748, 118752, 118756, 118760, 118764, 118768, 118772, 118776, 118780, - 118784, 118788, 118792, 118796, 118800, 118804, 118808, 118812, 118816, - 118820, 118824, 118828, 118832, 118836, 118840, 118844, 118848, 118852, - 118856, 118860, 118864, 118868, 118872, 118876, 118880, 118884, 118888, - 118892, 118896, 118900, 118904, 118908, 118912, 118916, 118920, 118924, - 118928, 118932, 118936, 118940, 118944, 118948, 118952, 118956, 118960, - 118964, 118968, 118972, 118976, 118980, 118984, 118988, 118992, 118996, - 119000, 119004, 119008, 119012, 119016, 119020, 119024, 119028, 119032, - 119036, 119040, 119044, 119048, 119052, 119056, 119060, 119064, 119068, - 119072, 119076, 119080, 119084, 119088, 119092, 119096, 119100, 119104, - 119108, 119112, 119116, 119120, 119124, 119128, 119132, 119136, 119140, - 119144, 119148, 119152, 119156, 119160, 119164, 119168, 119172, 119176, - 119180, 119184, 119188, 119192, 119196, 119200, 119204, 119208, 119212, - 119216, 119220, 119224, 119228, 119232, 119236, 119240, 119244, 119248, - 119252, 119256, 119260, 119264, 119268, 119272, 119276, 119280, 119284, - 119288, 119292, 119296, 119300, 119304, 119308, 119312, 119316, 119320, - 119324, 119328, 119332, 119336, 119340, 119344, 119348, 119352, 119356, - 119360, 119364, 119368, 119372, 119376, 119380, 119384, 119388, 119392, - 119396, 119400, 119404, 119408, 119412, 119416, 119420, 119424, 119428, - 119432, 119436, 119440, 119444, 119448, 119452, 119456, 119460, 119464, - 119468, 119472, 119476, 119480, 119484, 119488, 119492, 119496, 119500, - 119504, 119508, 119512, 119516, 119520, 119524, 119528, 119532, 119536, - 119540, 119544, 119548, 119552, 119556, 119560, 119564, 119568, 119572, - 119576, 119580, 119584, 119588, 119592, 119596, 119600, 119604, 119608, - 119612, 119616, 119620, 119624, 119628, 119632, 119636, 119640, 119644, - 119648, 119652, 119656, 119660, 119664, 119668, 119672, 119676, 119680, - 119684, 119688, 119692, 119696, 119700, 119704, 119708, 119712, 119716, - 119720, 119724, 119728, 119732, 119736, 119740, 119744, 119748, 119752, - 119756, 119760, 119764, 119768, 119772, 119776, 119780, 119784, 119788, - 119792, 119796, 119800, 119804, 119808, 119812, 119816, 119820, 119824, - 119828, 119832, 119836, 119840, 119844, 119848, 119852, 119856, 119860, - 119864, 119868, 119872, 119876, 119880, 119884, 119888, 119892, 119896, - 119900, 119904, 119908, 119912, 119916, 119920, 119924, 119928, 119932, - 119936, 119940, 119944, 119948, 119952, 119956, 119960, 119964, 119968, - 119972, 119976, 119980, 119984, 119988, 119992, 119996, 120000, 120004, - 120008, 120012, 120016, 120020, 120024, 120028, 120032, 120036, 120040, - 120044, 120048, 120052, 120056, 120060, 120064, 120068, 120072, 120076, - 120080, 120084, 120088, 120092, 120096, 120100, 120104, 120108, 120112, - 120116, 120120, 120124, 120128, 120132, 120136, 120140, 120144, 120148, - 120152, 120156, 120160, 120164, 120168, 120172, 120176, 120180, 120184, - 120188, 120192, 120196, 120200, 120204, 120208, 120212, 120216, 120220, - 120224, 120228, 120232, 120236, 120240, 120244, 120248, 120252, 120256, - 120260, 120264, 120268, 120272, 120276, 120280, 120284, 120288, 120292, - 120296, 120300, 120304, 120308, 120312, 120316, 120320, 120324, 120328, - 120332, 120336, 120340, 120344, 120348, 120352, 120356, 120360, 120364, - 120368, 120372, 120376, 120380, 120384, 120388, 120392, 120396, 120400, - 120404, 120408, 120412, 120416, 120420, 120424, 120428, 120432, 120436, - 120440, 120444, 120448, 120452, 120456, 120460, 120464, 120468, 120472, - 120476, 120480, 120484, 120488, 120492, 120496, 120500, 120504, 120508, - 120512, 120516, 120520, 120524, 120528, 120532, 120536, 120540, 120544, - 120548, 120552, 120556, 120560, 120564, 120568, 120572, 120576, 120580, - 120584, 120588, 120592, 120596, 120600, 120604, 120608, 120612, 120616, - 120620, 120624, 120628, 120632, 120636, 120640, 120644, 120648, 120652, - 120656, 120660, 120664, 120668, 120672, 120676, 120680, 120684, 120688, - 120692, 120696, 120700, 120704, 120708, 120712, 120716, 120720, 120724, - 120728, 120732, 120736, 120740, 120744, 120748, 120752, 120756, 120760, - 120764, 120768, 120772, 120776, 120780, 120784, 120788, 120792, 120796, - 120800, 120804, 120808, 120812, 120816, 120820, 120824, 120828, 120832, - 120836, 120840, 120844, 120848, 120852, 120856, 120860, 120864, 120868, - 120872, 120876, 120880, 120884, 120888, 120892, 120896, 120900, 120904, - 120908, 120912, 120916, 120920, 120924, 120928, 120932, 120936, 120940, - 120944, 120948, 120952, 120956, 120960, 120964, 120968, 120972, 120976, - 120980, 120984, 120988, 120992, 120996, 121000, 121004, 121008, 121012, - 121016, 121020, 121024, 121028, 121032, 121036, 121040, 121044, 121048, - 121052, 121056, 121060, 121064, 121068, 121072, 121076, 121080, 121084, - 121088, 121092, 121096, 121100, 121104, 121108, 121112, 121116, 121120, - 121124, 121128, 121132, 121136, 121140, 121144, 121148, 121152, 121156, - 121160, 121164, 121168, 121172, 121176, 121180, 121184, 121188, 121192, - 121196, 121200, 121204, 121208, 121212, 121216, 121220, 121224, 121228, - 121232, 121236, 121240, 121244, 121248, 121252, 121256, 121260, 121264, - 121268, 121272, 121276, 121280, 121284, 121288, 121292, 121296, 121300, - 121304, 121308, 121312, 121316, 121320, 121324, 121328, 121332, 121336, - 121340, 121344, 121348, 121352, 121356, 121360, 121364, 121368, 121372, - 121376, 121380, 121384, 121388, 121392, 121396, 121400, 121404, 121408, - 121412, 121416, 121420, 121424, 121428, 121432, 121436, 121440, 121444, - 121448, 121452, 121456, 121460, 121464, 121468, 121472, 121476, 121480, - 121484, 121488, 121492, 121496, 121500, 121504, 121508, 121512, 121516, - 121520, 121524, 121528, 121532, 121536, 121540, 121544, 121548, 121552, - 121556, 121560, 121564, 121568, 121572, 121576, 121580, 121584, 121588, - 121592, 121596, 121600, 121604, 121608, 121612, 121616, 121620, 121624, - 121628, 121632, 121636, 121640, 121644, 121648, 121652, 121656, 121660, - 121664, 121668, 121672, 121676, 121680, 121684, 121688, 121692, 121696, - 121700, 121704, 121708, 121712, 121716, 121720, 121724, 121728, 121732, - 121736, 121740, 121744, 121748, 121752, 121756, 121760, 121764, 121768, - 121772, 121776, 121780, 121784, 121788, 121792, 121796, 121800, 121804, - 121808, 121812, 121816, 121820, 121824, 121828, 121832, 121836, 121840, - 121844, 121848, 121852, 121856, 121860, 121864, 121868, 121872, 121876, - 121880, 121884, 121888, 121892, 121896, 121900, 121904, 121908, 121912, - 121916, 121920, 121924, 121928, 121932, 121936, 121940, 121944, 121948, - 121952, 121956, 121960, 121964, 121968, 121972, 121976, 121980, 121984, - 121988, 121992, 121996, 122000, 122004, 122008, 122012, 122016, 122020, - 122024, 122028, 122032, 122036, 122040, 122044, 122048, 122052, 122056, - 122060, 122064, 122068, 122072, 122076, 122080, 122084, 122088, 122092, - 122096, 122100, 122104, 122108, 122112, 122116, 122120, 122124, 122128, - 122132, 122136, 122140, 122144, 122148, 122152, 122156, 122160, 122164, - 122168, 122172, 122176, 122180, 122184, 122188, 122192, 122196, 122200, - 122204, 122208, 122212, 122216, 122220, 122224, 122228, 122232, 122236, - 122240, 122244, 122248, 122252, 122256, 122260, 122264, 122268, 122272, - 122276, 122280, 122284, 122288, 122292, 122296, 122300, 122304, 122308, - 122312, 122316, 122320, 122324, 122328, 122332, 122336, 122340, 122344, - 122348, 122352, 122356, 122360, 122364, 122368, 122372, 122376, 122380, - 122384, 122388, 122392, 122396, 122400, 122404, 122408, 122412, 122416, - 122420, 122424, 122428, 122432, 122436, 122440, 122444, 122448, 122452, - 122456, 122460, 122464, 122468, 122472, 122476, 122480, 122484, 122488, - 122492, 122496, 122500, 122504, 122508, 122512, 122516, 122520, 122524, - 122528, 122532, 122536, 122540, 122544, 122548, 122552, 122556, 122560, - 122564, 122568, 122572, 122576, 122580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125084, 125088, 125092, 125096, + 125100, 125104, 125108, 125112, 125116, 125120, 125124, 125128, 125132, + 125136, 125140, 125144, 125148, 125152, 125156, 125160, 125164, 125168, + 125172, 125176, 125180, 125184, 125188, 125192, 125196, 125200, 125204, + 125208, 125212, 125216, 125220, 125224, 125228, 125232, 125236, 125240, + 125244, 125248, 125252, 125256, 125260, 125264, 125268, 125272, 125276, + 125280, 125284, 125288, 125292, 125296, 125300, 125304, 125308, 125312, + 125316, 125320, 125324, 125328, 125332, 125336, 125340, 125344, 125348, + 125352, 125356, 125360, 125364, 125368, 125372, 125376, 125380, 125384, + 125388, 125392, 125396, 125400, 125404, 125408, 125412, 125416, 125420, + 125424, 125428, 125432, 125436, 125440, 125444, 125448, 125452, 125456, + 125460, 125464, 125468, 125472, 125476, 125480, 125484, 125488, 125492, + 125496, 125500, 125504, 125508, 125512, 125516, 125520, 125524, 125528, + 125532, 125536, 125540, 125544, 125548, 125552, 125556, 125560, 125564, + 125568, 125572, 125576, 125580, 125584, 125588, 125592, 125596, 125600, + 125604, 125608, 125612, 125616, 125620, 125624, 125628, 125632, 125636, + 125640, 125644, 125648, 125652, 125656, 125660, 125664, 125668, 125672, + 125676, 125680, 125684, 125688, 125692, 125696, 125700, 125704, 125708, + 125712, 125716, 125720, 125724, 125728, 125732, 125736, 125740, 125744, + 125748, 125752, 125756, 125760, 125764, 125768, 125772, 125776, 125780, + 125784, 125788, 125792, 125796, 125800, 125804, 125808, 125812, 125816, + 125820, 125824, 125828, 125832, 125836, 125840, 125844, 125848, 125852, + 125856, 125860, 125864, 125868, 125872, 125876, 125880, 125884, 125888, + 125892, 125896, 125900, 125904, 125908, 125912, 125916, 125920, 125924, + 125928, 125932, 125936, 125940, 125944, 125948, 125952, 125956, 125960, + 125964, 125968, 125972, 125976, 125980, 125984, 125988, 125992, 125996, + 126000, 126004, 126008, 126012, 126016, 126020, 126024, 126028, 126032, + 126036, 126040, 126044, 126048, 126052, 126056, 126060, 126064, 126068, + 126072, 126076, 126080, 126084, 126088, 126092, 126096, 126100, 126104, + 126108, 126112, 126116, 126120, 126124, 126128, 126132, 126136, 126140, + 126144, 126148, 126152, 126156, 126160, 126164, 126168, 126172, 126176, + 126180, 126184, 126188, 126192, 126196, 126200, 126204, 126208, 126212, + 126216, 126220, 126224, 126228, 126232, 126236, 126240, 126244, 126248, + 126252, 126256, 126260, 126264, 126268, 126272, 126276, 126280, 126284, + 126288, 126292, 126296, 126300, 126304, 126308, 126312, 126316, 126320, + 126324, 126328, 126332, 126336, 126340, 126344, 126348, 126352, 126356, + 126360, 126364, 126368, 126372, 126376, 126380, 126384, 126388, 126392, + 126396, 126400, 126404, 126408, 126412, 126416, 126420, 126424, 126428, + 126432, 126436, 126440, 126444, 126448, 126452, 126456, 126460, 126464, + 126468, 126472, 126476, 126480, 126484, 126488, 126492, 126496, 126500, + 126504, 126508, 126512, 126516, 126520, 126524, 126528, 126532, 126536, + 126540, 126544, 126548, 126552, 126556, 126560, 126564, 126568, 126572, + 126576, 126580, 126584, 126588, 126592, 126596, 126600, 126604, 126608, + 126612, 126616, 126620, 126624, 126628, 126632, 126636, 126640, 126644, + 126648, 126652, 126656, 126660, 126664, 126668, 126672, 126676, 126680, + 126684, 126688, 126692, 126696, 126700, 126704, 126708, 126712, 126716, + 126720, 126724, 126728, 126732, 126736, 126740, 126744, 126748, 126752, + 126756, 126760, 126764, 126768, 126772, 126776, 126780, 126784, 126788, + 126792, 126796, 126800, 126804, 126808, 126812, 126816, 126826, 126830, + 126834, 126838, 126842, 126846, 126850, 126854, 126858, 126862, 126866, + 126870, 126875, 126879, 126883, 126887, 126891, 126895, 126899, 126903, + 126907, 126911, 126915, 126919, 126923, 126927, 126931, 126935, 126939, + 126948, 126957, 126961, 126965, 126969, 126973, 126977, 126981, 126985, + 126989, 126993, 126997, 127001, 127005, 127009, 127013, 127017, 127021, + 127025, 127029, 127033, 127037, 127041, 127045, 127049, 127053, 127057, + 127061, 127065, 127069, 127073, 127077, 127081, 127085, 127089, 127093, + 127097, 127101, 127105, 127109, 127113, 127117, 127121, 127125, 127129, + 127133, 127137, 127141, 127145, 127149, 127153, 127157, 127161, 127165, + 127169, 127173, 127177, 127181, 127185, 127189, 127193, 127197, 127201, + 127205, 127209, 127213, 127217, 127221, 127225, 127229, 127233, 127237, + 127241, 127245, 127249, 127253, 127257, 127261, 127265, 127269, 127273, + 127277, 127281, 127285, 127289, 127293, 127297, 127301, 127305, 127309, + 127313, 127317, 127321, 127325, 127329, 127333, 127337, 127341, 127345, + 127349, 127353, 127357, 127361, 127365, 127369, 127373, 127377, 127381, + 127385, 127389, 127393, 127397, 127401, 127405, 127409, 127413, 127417, + 127421, 127425, 127429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 122584, 122588, 122592, 122596, 122600, 122604, 122608, - 122612, 122616, 122620, 122624, 122628, 122632, 122636, 122640, 122644, - 122648, 122652, 122656, 122660, 122664, 122668, 122672, 122676, 122680, - 122684, 122688, 122692, 122696, 122700, 122704, 122708, 122712, 122716, - 122720, 122724, 122728, 122732, 122736, 122740, 122744, 122748, 122752, - 122756, 122760, 122764, 122768, 122772, 122776, 122780, 122784, 122788, - 122792, 122796, 122800, 122804, 122808, 122812, 122816, 122820, 122824, - 122828, 122832, 122836, 122840, 122844, 122848, 122852, 122856, 122860, - 122864, 122868, 122872, 122876, 122880, 122884, 122888, 122892, 122896, - 122900, 122904, 122908, 122912, 122916, 122920, 122924, 122928, 122932, - 122936, 122940, 122944, 122948, 122952, 122956, 122960, 122964, 122968, - 122972, 122976, 122980, 122984, 122988, 122992, 122996, 123000, 123004, - 123008, 123012, 123016, 123020, 123024, 123028, 123032, 123036, 123040, - 123044, 123048, 123052, 123056, 123060, 123064, 123068, 123072, 123076, - 123080, 123084, 123088, 123092, 123096, 123100, 123104, 123108, 123112, - 123116, 123120, 123124, 123128, 123132, 123136, 123140, 123144, 123148, - 123152, 123156, 123160, 123164, 123168, 123172, 123176, 123180, 123184, - 123188, 123192, 123196, 123200, 123204, 123208, 123212, 123216, 123220, - 123224, 123228, 123232, 123236, 123240, 123244, 123248, 123252, 123256, - 123260, 123264, 123268, 123272, 123276, 123280, 123284, 123288, 123292, - 123296, 123300, 123304, 123308, 123312, 123316, 123320, 123324, 123328, - 123332, 123336, 123340, 123344, 123348, 123352, 123356, 123360, 123364, - 123368, 123372, 123376, 123380, 123384, 123388, 123392, 123396, 123400, - 123404, 123408, 123412, 123416, 123420, 123424, 123428, 123432, 123436, - 123440, 123444, 123448, 123452, 123456, 123460, 123464, 123468, 123472, - 123476, 123480, 123484, 123488, 123492, 123496, 123500, 123504, 123508, - 123512, 123516, 123520, 123524, 123528, 123532, 123536, 123540, 123544, - 123548, 123552, 123556, 123560, 123564, 123568, 123572, 123576, 123580, - 123584, 123588, 123592, 123596, 123600, 123604, 123608, 123612, 123616, - 123620, 123624, 123628, 123632, 123636, 123640, 123644, 123648, 123652, - 123656, 123660, 123664, 123668, 123672, 123676, 123680, 123684, 123688, - 123692, 123696, 123700, 123704, 123708, 123712, 123716, 123720, 123724, - 123728, 123732, 123736, 123740, 123744, 123748, 123752, 123756, 123760, - 123764, 123768, 123772, 123776, 123780, 123784, 123788, 123792, 123796, - 123800, 123804, 123808, 123812, 123816, 123820, 123824, 123828, 123832, - 123836, 123840, 123844, 123848, 123852, 123856, 123860, 123864, 123868, - 123872, 123876, 123880, 123884, 123888, 123892, 123896, 123900, 123904, - 123908, 123912, 123916, 123920, 123924, 123928, 123932, 123936, 123940, - 123944, 123948, 123952, 123956, 123960, 123964, 123968, 123972, 123976, - 123980, 123984, 123988, 123992, 123996, 124000, 124004, 124008, 124012, - 124016, 124020, 124024, 124028, 124032, 124036, 124040, 124044, 124048, - 124052, 124056, 124060, 124064, 124068, 124072, 124076, 124080, 124084, - 124088, 124092, 124096, 124100, 124104, 124108, 124112, 124116, 124120, - 124124, 124128, 124132, 124136, 124140, 124144, 124148, 124152, 124156, - 124160, 124164, 124168, 124172, 124176, 124180, 124184, 124188, 124192, - 124196, 124200, 124204, 124208, 124212, 124216, 124220, 124224, 124228, - 124232, 124236, 124240, 124244, 124248, 124252, 124256, 124260, 124264, - 124268, 124272, 124276, 124280, 124284, 124288, 124292, 124296, 124300, - 124304, 124308, 124312, 124316, 124326, 124330, 124334, 124338, 124342, - 124346, 124350, 124354, 124358, 124362, 124366, 124370, 124375, 124379, - 124383, 124387, 124391, 124395, 124399, 124403, 124407, 124411, 124415, - 124419, 124423, 124427, 124431, 124435, 124439, 124448, 124457, 124461, - 124465, 124469, 124473, 124477, 124481, 124485, 124489, 124493, 124497, - 124501, 124505, 124509, 124513, 124517, 124521, 124525, 124529, 124533, - 124537, 124541, 124545, 124549, 124553, 124557, 124561, 124565, 124569, - 124573, 124577, 124581, 124585, 124589, 124593, 124597, 124601, 124605, - 124609, 124613, 124617, 124621, 124625, 124629, 124633, 124637, 124641, - 124645, 124649, 124653, 124657, 124661, 124665, 124669, 124673, 124677, - 124681, 124685, 124689, 124693, 124697, 124701, 124705, 124709, 124713, - 124717, 124721, 124725, 124729, 124733, 124737, 124741, 124745, 124749, - 124753, 124757, 124761, 124765, 124769, 124773, 124777, 124781, 124785, - 124789, 124793, 124797, 124801, 124805, 124809, 124813, 124817, 124821, - 124825, 124829, 124833, 124837, 124841, 124845, 124849, 124853, 124857, - 124861, 124865, 124869, 124873, 124877, 124881, 124885, 124889, 124893, - 124897, 124901, 124905, 124909, 124913, 124917, 124921, 124925, 124929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 127433, 127441, 127449, 127459, 127469, 127477, 127483, 127491, + 127499, 127509, 127521, 127533, 127539, 127547, 127553, 127559, 127565, + 127571, 127577, 127583, 127589, 127595, 127601, 127607, 127613, 127621, + 127629, 127635, 127641, 127647, 127653, 127661, 127669, 127678, 127684, + 127692, 127698, 127704, 127710, 127716, 127722, 127730, 127738, 127744, + 127750, 127756, 127762, 127768, 127774, 127780, 127786, 127792, 127798, + 127804, 127810, 127816, 127822, 127828, 127834, 127840, 127846, 127852, + 127860, 127866, 127872, 127882, 127890, 127896, 127902, 127908, 127914, + 127920, 127926, 127932, 127938, 127944, 127950, 127956, 127962, 127968, + 127974, 127980, 127986, 127992, 127998, 128004, 128010, 128016, 128022, + 128030, 128036, 128044, 128052, 128060, 128066, 128072, 128078, 128084, + 128090, 128098, 128108, 128116, 128124, 128130, 128136, 128144, 128152, + 128158, 128166, 128174, 128182, 128188, 128194, 128200, 128206, 128212, + 128218, 128226, 128234, 128240, 128246, 128252, 128258, 128264, 128272, + 128278, 128284, 128290, 128296, 128302, 128308, 128316, 128322, 128328, + 128334, 128340, 128348, 128356, 128362, 128368, 128374, 128379, 128385, + 128391, 128398, 128403, 128408, 128413, 128418, 128423, 128428, 128433, + 128438, 128443, 128452, 128459, 128464, 128469, 128474, 128481, 128486, + 128491, 128496, 128503, 128508, 128513, 128518, 128523, 128528, 128533, + 128538, 128543, 128548, 128553, 128558, 128565, 128570, 128577, 128582, + 128587, 128594, 128599, 128604, 128609, 128614, 128619, 128624, 128629, + 128634, 128639, 128644, 128649, 128654, 128659, 128664, 128669, 128674, + 128679, 128684, 128689, 128696, 128701, 128706, 128711, 128716, 128721, + 128726, 128731, 128736, 128741, 128746, 128751, 128756, 128761, 128768, + 128773, 128778, 128785, 128790, 128795, 128800, 128805, 128810, 128815, + 128820, 128825, 128830, 128835, 128842, 128847, 128852, 128857, 128862, + 128867, 128874, 128881, 128886, 128891, 128896, 128901, 128906, 128911, + 128916, 128921, 128926, 128931, 128936, 128941, 128946, 128951, 128956, + 128961, 128966, 128971, 128976, 128981, 128986, 128991, 128996, 129001, + 129006, 129011, 129016, 129021, 129026, 129031, 129036, 129041, 129046, + 129051, 129056, 129061, 129068, 129073, 129078, 129083, 129088, 129093, + 129098, 129103, 129108, 129113, 129118, 129123, 129128, 129133, 129138, + 129143, 129148, 129153, 129158, 129163, 129168, 129173, 129178, 129183, + 129188, 129193, 129198, 129203, 129208, 129213, 129218, 129223, 129228, + 129233, 129238, 129243, 129248, 129253, 129258, 129263, 129268, 129273, + 129278, 129283, 129288, 129293, 129298, 129303, 129308, 129313, 129318, + 129323, 129328, 129333, 129338, 129343, 129348, 129353, 129358, 129365, + 129370, 129375, 129380, 129385, 129390, 129395, 129400, 129405, 129410, + 129415, 129420, 129425, 129430, 129435, 129440, 129445, 129450, 129455, + 129460, 129465, 129470, 129477, 129482, 129487, 129494, 129499, 129504, + 129509, 129514, 129519, 129524, 129529, 129534, 129539, 129544, 129549, + 129554, 129559, 129564, 129569, 129574, 129579, 129584, 129589, 129594, + 129599, 129604, 129609, 129614, 129619, 129624, 129629, 129634, 129639, + 129644, 129649, 129654, 129659, 129664, 129669, 129674, 129679, 129684, + 129689, 129694, 129699, 129704, 129709, 129716, 129721, 129726, 129733, + 129740, 129745, 129750, 129755, 129760, 129765, 129770, 129775, 129780, + 129785, 129790, 129795, 129800, 129805, 129810, 129815, 129820, 129825, + 129830, 129835, 129840, 129845, 129850, 129855, 129860, 129865, 129872, + 129877, 129882, 129887, 129892, 129897, 129902, 129907, 129912, 129917, + 129922, 129927, 129932, 129937, 129942, 129947, 129952, 129957, 129962, + 129969, 129974, 129979, 129984, 129989, 129994, 129999, 130004, 130010, + 130015, 130020, 130025, 130030, 130035, 130040, 130045, 130050, 130057, + 130064, 130069, 130074, 130078, 130083, 130087, 130091, 130096, 130103, + 130108, 130113, 130122, 130127, 130132, 130137, 130142, 130149, 130156, + 130161, 130166, 130171, 130176, 130183, 130188, 130193, 130198, 130203, + 130208, 130213, 130218, 130223, 130228, 130233, 130238, 130243, 130250, + 130254, 130259, 130264, 130269, 130274, 130278, 130283, 130288, 130293, + 130298, 130303, 130308, 130313, 130318, 130323, 130329, 130335, 130341, + 130347, 130353, 130358, 130364, 130370, 130376, 130382, 130388, 130394, + 130400, 130406, 130412, 130418, 130424, 130430, 130436, 130442, 130448, + 130454, 130460, 130466, 130471, 130477, 130483, 130489, 130495, 130501, + 130507, 130513, 130519, 130525, 130531, 130537, 130543, 130549, 130555, + 130561, 130567, 130573, 130579, 130585, 130591, 130596, 130602, 130608, + 130614, 130620, 130626, 0, 0, 0, 0, 0, 0, 0, 130632, 130637, 130642, + 130647, 130652, 130657, 130662, 130666, 130671, 130676, 130681, 130686, + 130691, 130696, 130701, 130706, 130711, 130715, 130720, 130724, 130729, + 130734, 130739, 130744, 130749, 130753, 130758, 130763, 130767, 130772, + 130777, 0, 130782, 130787, 130791, 130795, 130799, 130803, 130807, + 130811, 130816, 130820, 0, 0, 0, 0, 130825, 130829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130834, 130841, + 130847, 130854, 130861, 130868, 130875, 130882, 130889, 130896, 130903, + 130910, 130917, 130924, 130931, 130938, 130945, 130952, 130958, 130965, + 130972, 130979, 130985, 130992, 130998, 131004, 131011, 131017, 131024, + 131030, 0, 0, 131036, 131044, 131052, 131061, 131070, 131079, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 131087, 131092, 131097, 131102, 131107, 131112, 131117, + 131122, 131127, 131132, 131137, 131142, 131147, 131152, 131157, 131162, + 131167, 131172, 131177, 131182, 131187, 131192, 131197, 131202, 131207, + 131212, 131217, 131222, 131227, 131232, 131237, 131242, 131247, 131252, + 131257, 131262, 131267, 131272, 131277, 131282, 131287, 131292, 131297, + 131302, 131307, 131312, 131317, 131322, 131327, 131334, 131341, 131348, + 131355, 131362, 131369, 131376, 131383, 131392, 131399, 131406, 131413, + 131420, 131427, 131434, 131441, 131448, 131455, 131462, 131469, 131474, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131483, 131488, 131492, 131496, 131500, + 131504, 131508, 131512, 131517, 131521, 0, 131526, 131531, 131536, + 131543, 131548, 131555, 131562, 0, 131567, 131574, 131579, 131584, + 131591, 131598, 131603, 131608, 131613, 131618, 131623, 131630, 131637, + 131642, 131647, 131652, 131665, 131674, 131681, 131690, 131699, 0, 0, 0, + 0, 0, 131708, 131715, 131722, 131729, 131736, 131743, 131750, 131757, + 131764, 131771, 131778, 131785, 131792, 131799, 131806, 131813, 131820, + 131827, 131834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124933, 124941, - 124949, 124959, 124969, 124977, 124983, 124991, 124999, 125009, 125021, - 125033, 125039, 125047, 125053, 125059, 125065, 125071, 125077, 125083, - 125089, 125095, 125101, 125107, 125113, 125121, 125129, 125135, 125141, - 125147, 125153, 125161, 125169, 125178, 125184, 125192, 125198, 125204, - 125210, 125216, 125222, 125230, 125238, 125244, 125250, 125256, 125262, - 125268, 125274, 125280, 125286, 125292, 125298, 125304, 125310, 125316, - 125322, 125328, 125334, 125340, 125346, 125352, 125360, 125366, 125372, - 125382, 125390, 125396, 125402, 125408, 125414, 125420, 125426, 125432, - 125438, 125444, 125450, 125456, 125462, 125468, 125474, 125480, 125486, - 125492, 125498, 125504, 125510, 125516, 125522, 125530, 125536, 125544, - 125552, 125560, 125566, 125572, 125578, 125584, 125590, 125598, 125608, - 125616, 125624, 125630, 125636, 125644, 125652, 125658, 125666, 125674, - 125682, 125688, 125694, 125700, 125706, 125712, 125718, 125726, 125734, - 125740, 125746, 125752, 125758, 125764, 125772, 125778, 125784, 125790, - 125796, 125802, 125808, 125816, 125822, 125828, 125834, 125840, 125848, - 125856, 125862, 125868, 125874, 125879, 125885, 125891, 125898, 125903, - 125908, 125913, 125918, 125923, 125928, 125933, 125938, 125943, 125952, - 125959, 125964, 125969, 125974, 125981, 125986, 125991, 125996, 126003, - 126008, 126013, 126018, 126023, 126028, 126033, 126038, 126043, 126048, - 126053, 126058, 126065, 126070, 126077, 126082, 126087, 126094, 126099, - 126104, 126109, 126114, 126119, 126124, 126129, 126134, 126139, 126144, - 126149, 126154, 126159, 126164, 126169, 126174, 126179, 126184, 126189, - 126196, 126201, 126206, 126211, 126216, 126221, 126226, 126231, 126236, - 126241, 126246, 126251, 126256, 126261, 126268, 126273, 126278, 126285, - 126290, 126295, 126300, 126305, 126310, 126315, 126320, 126325, 126330, - 126335, 126342, 126347, 126352, 126357, 126362, 126367, 126374, 126381, - 126386, 126391, 126396, 126401, 126406, 126411, 126416, 126421, 126426, - 126431, 126436, 126441, 126446, 126451, 126456, 126461, 126466, 126471, - 126476, 126481, 126486, 126491, 126496, 126501, 126506, 126511, 126516, - 126521, 126526, 126531, 126536, 126541, 126546, 126551, 126556, 126561, - 126568, 126573, 126578, 126583, 126588, 126593, 126598, 126603, 126608, - 126613, 126618, 126623, 126628, 126633, 126638, 126643, 126648, 126653, - 126658, 126663, 126668, 126673, 126678, 126683, 126688, 126693, 126698, - 126703, 126708, 126713, 126718, 126723, 126728, 126733, 126738, 126743, - 126748, 126753, 126758, 126763, 126768, 126773, 126778, 126783, 126788, - 126793, 126798, 126803, 126808, 126813, 126818, 126823, 126828, 126833, - 126838, 126843, 126848, 126853, 126858, 126865, 126870, 126875, 126880, - 126885, 126890, 126895, 126900, 126905, 126910, 126915, 126920, 126925, - 126930, 126935, 126940, 126945, 126950, 126955, 126960, 126965, 126970, - 126977, 126982, 126987, 126994, 126999, 127004, 127009, 127014, 127019, - 127024, 127029, 127034, 127039, 127044, 127049, 127054, 127059, 127064, - 127069, 127074, 127079, 127084, 127089, 127094, 127099, 127104, 127109, - 127114, 127119, 127124, 127129, 127134, 127139, 127144, 127149, 127154, - 127159, 127164, 127169, 127174, 127179, 127184, 127189, 127194, 127199, - 127204, 127209, 127216, 127221, 127226, 127233, 127240, 127245, 127250, - 127255, 127260, 127265, 127270, 127275, 127280, 127285, 127290, 127295, - 127300, 127305, 127310, 127315, 127320, 127325, 127330, 127335, 127340, - 127345, 127350, 127355, 127360, 127365, 127372, 127377, 127382, 127387, - 127392, 127397, 127402, 127407, 127412, 127417, 127422, 127427, 127432, - 127437, 127442, 127447, 127452, 127457, 127462, 127469, 127474, 127479, - 127484, 127489, 127494, 127499, 127504, 127510, 127515, 127520, 127525, - 127530, 127535, 127540, 127545, 127550, 127557, 127564, 127569, 127574, - 127578, 127583, 127587, 127591, 127596, 127603, 127608, 127613, 127622, - 127627, 127632, 127637, 127642, 127649, 127656, 127661, 127666, 127671, - 127676, 127683, 127688, 127693, 127698, 127703, 127708, 127713, 127718, - 127723, 127728, 127733, 127738, 127743, 127750, 127755, 127760, 127765, - 127770, 127775, 127779, 127784, 127789, 127794, 127799, 127804, 127809, - 127814, 127819, 127824, 127830, 127836, 127842, 127848, 127854, 127860, - 127866, 127872, 127878, 127884, 127890, 127896, 127902, 127908, 127914, - 127920, 127926, 127932, 127938, 127944, 127950, 127956, 127962, 127968, - 127973, 127979, 127985, 127991, 127997, 128003, 128009, 128015, 128021, - 128027, 128033, 128039, 128045, 128051, 128057, 128063, 128069, 128075, - 128081, 128087, 128093, 128098, 128104, 128110, 128116, 128122, 128128, - 0, 0, 0, 0, 0, 0, 0, 128134, 128139, 128144, 128149, 128154, 128159, - 128164, 128168, 128173, 128178, 128183, 128188, 128193, 128198, 128203, - 128208, 128213, 128217, 128222, 128226, 128231, 128236, 128241, 128246, - 128251, 128255, 128260, 128265, 128270, 128275, 128280, 0, 128285, - 128290, 128294, 128298, 128302, 128306, 128310, 128314, 128319, 128323, - 0, 0, 0, 0, 128328, 128332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131841, + 131844, 131848, 131852, 131856, 131859, 131863, 131868, 131872, 131876, + 131880, 131884, 131888, 131893, 131898, 131902, 131906, 131909, 131913, + 131918, 131923, 131927, 131931, 131934, 131938, 131942, 131946, 131950, + 131954, 131958, 131962, 131965, 131969, 131973, 131977, 131981, 131985, + 131989, 131995, 131998, 132002, 132006, 132010, 132014, 132018, 132022, + 132026, 132030, 132034, 132039, 132044, 132050, 132054, 132058, 132062, + 132066, 132070, 132074, 132079, 132083, 132087, 132091, 132095, 132099, + 132105, 132109, 132113, 132117, 132121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 132125, 132129, 132133, 132139, 132145, 132149, 132154, 132159, 132164, + 132169, 132173, 132178, 132183, 132188, 132192, 132197, 132202, 132207, + 132211, 132216, 132221, 132226, 132231, 132236, 132241, 132246, 132251, + 132255, 132260, 132265, 132270, 132275, 132280, 132285, 132290, 132295, + 132300, 132305, 132310, 132317, 132322, 132329, 132334, 132339, 132344, + 132349, 132354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132359, + 132363, 132369, 132372, 132375, 132379, 132383, 132387, 132391, 132395, + 132399, 132403, 132409, 132415, 132421, 132427, 132433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132443, 132446, + 132449, 132452, 132455, 132458, 132461, 132464, 132467, 132470, 132473, + 132476, 132479, 132482, 132485, 132488, 132491, 132494, 132497, 132500, + 132503, 132506, 132509, 132512, 132515, 132518, 132521, 132524, 132527, + 132530, 132533, 132536, 132539, 132542, 132545, 132548, 132551, 132554, + 132557, 132560, 132563, 132566, 132569, 132572, 132575, 132578, 132581, + 132584, 132587, 132590, 132593, 132596, 132599, 132602, 132605, 132608, + 132611, 132614, 132617, 132620, 132623, 132626, 132629, 132632, 132635, + 132638, 132641, 132644, 132647, 132650, 132653, 132656, 132659, 132662, + 132665, 132668, 132671, 132674, 132677, 132680, 132683, 132686, 132689, + 132692, 132695, 132698, 132701, 132704, 132707, 132710, 132713, 132716, + 132719, 132722, 132725, 132728, 132731, 132734, 132737, 132740, 132743, + 132746, 132749, 132752, 132755, 132758, 132761, 132764, 132767, 132770, + 132773, 132776, 132779, 132782, 132785, 132788, 132791, 132794, 132797, + 132800, 132803, 132806, 132809, 132812, 132815, 132818, 132821, 132824, + 132827, 132830, 132833, 132836, 132839, 132842, 132845, 132848, 132851, + 132854, 132857, 132860, 132863, 132866, 132869, 132872, 132875, 132878, + 132881, 132884, 132887, 132890, 132893, 132896, 132899, 132902, 132905, + 132908, 132911, 132914, 132917, 132920, 132923, 132926, 132929, 132932, + 132935, 132938, 132941, 132944, 132947, 132950, 132953, 132956, 132959, + 132962, 132965, 132968, 132971, 132974, 132977, 132980, 132983, 132986, + 132989, 132992, 132995, 132998, 133001, 133004, 133007, 133010, 133013, + 133016, 133019, 133022, 133025, 133028, 133031, 133034, 133037, 133040, + 133043, 133046, 133049, 133052, 133055, 133058, 133061, 133064, 133067, + 133070, 133073, 133076, 133079, 133082, 133085, 133088, 133091, 133094, + 133097, 133100, 133103, 133106, 133109, 133112, 133115, 133118, 133121, + 133124, 133127, 133130, 133133, 133136, 133139, 133142, 133145, 133148, + 133151, 133154, 133157, 133160, 133163, 133166, 133169, 133172, 133175, + 133178, 133181, 133184, 133187, 133190, 133193, 133196, 133199, 133202, + 133205, 133208, 133211, 133214, 133217, 133220, 133223, 133226, 133229, + 133232, 133235, 133238, 133241, 133244, 133247, 133250, 133253, 133256, + 133259, 133262, 133265, 133268, 133271, 133274, 133277, 133280, 133283, + 133286, 133289, 133292, 133295, 133298, 133301, 133304, 133307, 133310, + 133313, 133316, 133319, 133322, 133325, 133328, 133331, 133334, 133337, + 133340, 133343, 133346, 133349, 133352, 133355, 133358, 133361, 133364, + 133367, 133370, 133373, 133376, 133379, 133382, 133385, 133388, 133391, + 133394, 133397, 133400, 133403, 133406, 133409, 133412, 133415, 133418, + 133421, 133424, 133427, 133430, 133433, 133436, 133439, 133442, 133445, + 133448, 133451, 133454, 133457, 133460, 133463, 133466, 133469, 133472, + 133475, 133478, 133481, 133484, 133487, 133490, 133493, 133496, 133499, + 133502, 133505, 133508, 133511, 133514, 133517, 133520, 133523, 133526, + 133529, 133532, 133535, 133538, 133541, 133544, 133547, 133550, 133553, + 133556, 133559, 133562, 133565, 133568, 133571, 133574, 133577, 133580, + 133583, 133586, 133589, 133592, 133595, 133598, 133601, 133604, 133607, + 133610, 133613, 133616, 133619, 133622, 133625, 133628, 133631, 133634, + 133637, 133640, 133643, 133646, 133649, 133652, 133655, 133658, 133661, + 133664, 133667, 133670, 133673, 133676, 133679, 133682, 133685, 133688, + 133691, 133694, 133697, 133700, 133703, 133706, 133709, 133712, 133715, + 133718, 133721, 133724, 133727, 133730, 133733, 133736, 133739, 133742, + 133745, 133748, 133751, 133754, 133757, 133760, 133763, 133766, 133769, + 133772, 133775, 133778, 133781, 133784, 133787, 133790, 133793, 133796, + 133799, 133802, 133805, 133808, 133811, 133814, 133817, 133820, 133823, + 133826, 133829, 133832, 133835, 133838, 133841, 133844, 133847, 133850, + 133853, 133856, 133859, 133862, 133865, 133868, 133871, 133874, 133877, + 133880, 133883, 133886, 133889, 133892, 133895, 133898, 133901, 133904, + 133907, 133910, 133913, 133916, 133919, 133922, 133925, 133928, 133931, + 133934, 133937, 133940, 133943, 133946, 133949, 133952, 133955, 133958, + 133961, 133964, 133967, 133970, 133973, 133976, 133979, 133982, 133985, + 133988, 133991, 133994, 133997, 134000, 134003, 134006, 134009, 134012, + 134015, 134018, 134021, 134024, 134027, 134030, 134033, 134036, 134039, + 134042, 134045, 134048, 134051, 134054, 134057, 134060, 134063, 134066, + 134069, 134072, 134075, 134078, 134081, 134084, 134087, 134090, 134093, + 134096, 134099, 134102, 134105, 134108, 134111, 134114, 134117, 134120, + 134123, 134126, 134129, 134132, 134135, 134138, 134141, 134144, 134147, + 134150, 134153, 134156, 134159, 134162, 134165, 134168, 134171, 134174, + 134177, 134180, 134183, 134186, 134189, 134192, 134195, 134198, 134201, + 134204, 134207, 134210, 134213, 134216, 134219, 134222, 134225, 134228, + 134231, 134234, 134237, 134240, 134243, 134246, 134249, 134252, 134255, + 134258, 134261, 134264, 134267, 134270, 134273, 134276, 134279, 134282, + 134285, 134288, 134291, 134294, 134297, 134300, 134303, 134306, 134309, + 134312, 134315, 134318, 134321, 134324, 134327, 134330, 134333, 134336, + 134339, 134342, 134345, 134348, 134351, 134354, 134357, 134360, 134363, + 134366, 134369, 134372, 134375, 134378, 134381, 134384, 134387, 134390, + 134393, 134396, 134399, 134402, 134405, 134408, 134411, 134414, 134417, + 134420, 134423, 134426, 134429, 134432, 134435, 134438, 134441, 134444, + 134447, 134450, 134453, 134456, 134459, 134462, 134465, 134468, 134471, + 134474, 134477, 134480, 134483, 134486, 134489, 134492, 134495, 134498, + 134501, 134504, 134507, 134510, 134513, 134516, 134519, 134522, 134525, + 134528, 134531, 134534, 134537, 134540, 134543, 134546, 134549, 134552, + 134555, 134558, 134561, 134564, 134567, 134570, 134573, 134576, 134579, + 134582, 134585, 134588, 134591, 134594, 134597, 134600, 134603, 134606, + 134609, 134612, 134615, 134618, 134621, 134624, 134627, 134630, 134633, + 134636, 134639, 134642, 134645, 134648, 134651, 134654, 134657, 134660, + 134663, 134666, 134669, 134672, 134675, 134678, 134681, 134684, 134687, + 134690, 134693, 134696, 134699, 134702, 134705, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 134708, 134713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 128337, 128344, 128350, 128357, 128364, - 128371, 128378, 128385, 128392, 128399, 128406, 128413, 128420, 128427, - 128434, 128441, 128448, 128455, 128461, 128468, 128475, 128482, 128488, - 128495, 128501, 128507, 128514, 128520, 128527, 128533, 0, 0, 128539, - 128547, 128555, 128564, 128573, 128582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 128590, 128595, 128600, 128605, 128610, 128615, 128620, 128625, 128630, - 128635, 128640, 128645, 128650, 128655, 128660, 128665, 128670, 128675, - 128680, 128685, 128690, 128695, 128700, 128705, 128710, 128715, 128720, - 128725, 128730, 128735, 128740, 128745, 128750, 128755, 128760, 128765, - 128770, 128775, 128780, 128785, 128790, 128795, 128800, 128805, 128810, - 128815, 128820, 128825, 128830, 128837, 128844, 128851, 128858, 128865, - 128872, 128879, 128886, 128895, 128902, 128909, 128916, 128923, 128930, - 128937, 128944, 128951, 128958, 128965, 128972, 128977, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 128986, 128991, 128995, 128999, 129003, 129007, 129011, - 129015, 129020, 129024, 0, 129029, 129034, 129039, 129046, 129051, - 129058, 129065, 0, 129070, 129077, 129082, 129087, 129094, 129101, - 129106, 129111, 129116, 129121, 129126, 129133, 129140, 129145, 129150, - 129155, 129168, 129177, 129184, 129193, 129202, 0, 0, 0, 0, 0, 129211, - 129218, 129225, 129232, 129239, 129246, 129253, 129260, 129267, 129274, - 129281, 129288, 129295, 129302, 129309, 129316, 129323, 129330, 129337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129344, 129347, 129351, - 129355, 129359, 129362, 129366, 129371, 129375, 129379, 129383, 129387, - 129391, 129396, 129401, 129405, 129409, 129413, 129417, 129422, 129428, - 129432, 129436, 129440, 129444, 129448, 129452, 129456, 129460, 129464, - 129468, 129471, 129475, 129479, 129483, 129487, 129491, 129495, 129501, - 129504, 129508, 129512, 129516, 129520, 129524, 129528, 129532, 129536, - 129540, 129545, 129550, 129556, 129560, 129564, 129568, 129572, 129576, - 129580, 129585, 129589, 129593, 129597, 129601, 129605, 129611, 129615, - 129619, 129623, 129627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129631, 129635, - 129639, 129645, 129651, 129655, 129660, 129665, 129670, 129675, 129679, - 129684, 129689, 129694, 129698, 129703, 129708, 129713, 129717, 129722, - 129727, 129732, 129737, 129742, 129747, 129752, 129757, 129761, 129766, - 129771, 129776, 129781, 129786, 129791, 129796, 129801, 129806, 129811, - 129816, 129823, 129828, 129835, 129840, 129845, 129850, 129855, 129860, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129865, 129869, 129875, - 129878, 129881, 129885, 129889, 129893, 129897, 129901, 129905, 129909, - 129915, 129921, 129927, 129933, 129939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129945, 129950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 134719, 134723, 134727, 134731, 134735, 134739, 134743, 134746, 134750, + 134754, 134758, 134762, 134765, 134771, 134777, 134783, 134789, 134795, + 134799, 134805, 134809, 134813, 134819, 134823, 134827, 134831, 134835, + 134839, 134843, 134847, 134853, 134859, 134865, 134871, 134878, 134885, + 134892, 134902, 134909, 134916, 134922, 134928, 134934, 134940, 134948, + 134956, 134964, 134972, 134981, 134987, 134995, 135001, 135008, 135014, + 135021, 135027, 135035, 135039, 135043, 135048, 135054, 135060, 135068, + 135076, 135082, 135089, 135092, 135098, 135102, 135105, 135109, 135112, + 135115, 135119, 135124, 135128, 135132, 135138, 135143, 135149, 135153, + 135157, 135160, 135164, 135168, 135173, 135177, 135182, 135186, 135191, + 135195, 135199, 135203, 135207, 135211, 135215, 135219, 135223, 135228, + 135233, 135238, 135243, 135249, 135255, 135261, 135267, 135273, 0, 0, 0, + 0, 0, 135278, 135286, 135295, 135303, 135310, 135318, 135325, 135332, + 135341, 135348, 135355, 135362, 135370, 0, 0, 0, 135378, 135383, 135390, + 135396, 135403, 135409, 135415, 135421, 135427, 0, 0, 0, 0, 0, 0, 0, + 135433, 135438, 135445, 135451, 135458, 135464, 135470, 135476, 135482, + 135488, 0, 0, 135493, 135499, 135505, 135508, 135517, 135524, 135532, + 135539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135546, + 135551, 135556, 135561, 135568, 135575, 135582, 135589, 135594, 135599, + 135604, 135609, 135616, 135621, 135628, 135635, 135640, 135645, 135650, + 135657, 135662, 135667, 135674, 135681, 135686, 135691, 135696, 135703, + 135710, 135717, 135722, 135727, 135734, 135741, 135748, 135755, 135760, + 135765, 135770, 135777, 135782, 135787, 135792, 135799, 135808, 135815, + 135820, 135825, 135830, 135835, 135840, 135845, 135854, 135861, 135866, + 135873, 135880, 135885, 135890, 135895, 135902, 135907, 135914, 135921, + 135926, 135931, 135936, 135943, 135950, 135955, 135960, 135967, 135974, + 135981, 135986, 135991, 135996, 136001, 136008, 136017, 136026, 136031, + 136038, 136047, 136052, 136057, 136062, 136067, 136074, 136081, 136088, + 136095, 136100, 136105, 136110, 136117, 136124, 136131, 136136, 136141, + 136148, 136153, 136160, 136165, 136172, 136177, 136184, 136191, 136196, + 136201, 136206, 136211, 136216, 136221, 136226, 136231, 136236, 136243, + 136250, 136257, 136264, 136271, 136280, 136285, 136290, 136297, 136304, + 136309, 136316, 136323, 136330, 136337, 136344, 136351, 136356, 136361, + 136366, 136371, 136376, 136385, 136394, 136403, 136412, 136421, 136430, + 136439, 136448, 136453, 136464, 136475, 136484, 136489, 136494, 136499, + 136504, 136513, 136520, 136527, 136534, 136541, 136548, 136555, 136564, + 136573, 136584, 136593, 136604, 136613, 136620, 136629, 136640, 136649, + 136658, 136667, 136676, 136683, 136690, 136697, 136706, 136715, 136726, + 136735, 136744, 136755, 136760, 136765, 136776, 136784, 136793, 136802, + 136811, 136822, 136831, 136840, 136851, 136862, 136873, 136884, 136895, + 136906, 136913, 136920, 136927, 136934, 136945, 136954, 136961, 136968, + 136975, 136986, 136997, 137008, 137019, 137030, 137041, 137052, 137063, + 137070, 137077, 137086, 137095, 137102, 137109, 137116, 137125, 137134, + 137143, 137150, 137159, 137168, 137177, 137184, 137191, 137196, 137202, + 137209, 137216, 137223, 137230, 137237, 137244, 137253, 137262, 137271, + 137280, 137287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137296, 137302, 137307, + 137312, 137319, 137325, 137331, 137337, 137343, 137349, 137355, 137361, + 137365, 137369, 137375, 137381, 137387, 137391, 137396, 137401, 137405, + 137409, 137412, 137418, 137424, 137430, 137436, 137442, 137448, 137454, + 137460, 137466, 137476, 137486, 137492, 137498, 137508, 137518, 137524, + 0, 0, 137530, 137538, 137543, 137548, 137554, 137560, 137566, 137572, + 137578, 137584, 137591, 137598, 137604, 137610, 137616, 137622, 137628, + 137634, 137640, 137646, 137651, 137657, 137663, 137669, 137675, 137681, + 137690, 137696, 137701, 137709, 137716, 137723, 137732, 137741, 137750, + 137759, 137768, 137777, 137786, 137795, 137805, 137815, 137823, 137831, + 137840, 137849, 137855, 137861, 137867, 137873, 137881, 137889, 137893, + 137899, 137904, 137910, 137916, 137922, 137928, 137934, 137943, 137948, + 137955, 137960, 137965, 137970, 137976, 137982, 137988, 137995, 138000, + 138005, 138010, 138015, 138020, 138026, 138032, 138038, 138044, 138050, + 138056, 138062, 138068, 138073, 138078, 138083, 138088, 138093, 138098, + 138103, 138108, 138114, 138120, 138125, 138130, 138135, 138140, 138145, + 138151, 138158, 138162, 138166, 138170, 138174, 138178, 138182, 138186, + 138190, 138198, 138208, 138212, 138216, 138222, 138228, 138234, 138240, + 138246, 138252, 138258, 138264, 138270, 138276, 138282, 138288, 138294, + 138300, 138304, 138308, 138315, 138321, 138327, 138333, 138338, 138345, + 138350, 138356, 138362, 138368, 138374, 138379, 138383, 138389, 138393, + 138397, 138401, 138407, 138413, 138417, 138423, 138429, 138435, 138441, + 138447, 138455, 138463, 138469, 138475, 138481, 138487, 138499, 138511, + 138525, 138537, 138549, 138563, 138577, 138591, 138595, 138603, 138611, + 138616, 138620, 138624, 138628, 138632, 138636, 138640, 138644, 138650, + 138656, 138662, 138668, 138676, 138685, 138692, 138699, 138707, 138714, + 138726, 138738, 138750, 138762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 138769, 138776, 138783, 138790, 138797, + 138804, 138811, 138818, 138825, 138832, 138839, 138846, 138853, 138860, + 138867, 138874, 138881, 138888, 138895, 138902, 138909, 138916, 138923, + 138930, 138937, 138944, 138951, 138958, 138965, 138972, 138979, 138986, + 138993, 139000, 139007, 139014, 139021, 139028, 139035, 139042, 139049, + 139056, 139063, 139070, 139077, 139084, 139091, 139098, 139105, 139112, + 139119, 139126, 139133, 139140, 139147, 139154, 139161, 139168, 139175, + 139182, 139189, 139196, 139203, 139210, 139217, 139224, 139231, 139236, + 139241, 139246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 129956, 129960, 129964, 129968, 129972, 129976, - 129980, 129983, 129987, 129991, 129995, 129999, 130002, 130008, 130013, - 130019, 130025, 130030, 130034, 130040, 130044, 130048, 130054, 130058, - 130062, 130066, 130070, 130074, 130078, 130081, 130087, 130093, 130099, - 130105, 130112, 130119, 130126, 130136, 130143, 130150, 130155, 130160, - 130165, 130170, 130177, 130184, 130191, 130198, 130207, 130213, 130220, - 130226, 130233, 130239, 130246, 130251, 130258, 130262, 130266, 130271, - 130277, 130283, 130290, 130297, 130303, 130310, 130313, 130319, 130323, - 130326, 130330, 130333, 130336, 130340, 130345, 130349, 130353, 130359, - 130364, 130370, 130374, 130378, 130381, 130385, 130389, 130394, 130398, - 130403, 130407, 130412, 130416, 130420, 130424, 130428, 130432, 130436, - 130440, 130444, 130449, 130454, 130459, 130464, 130470, 130476, 130482, - 130488, 130494, 0, 0, 0, 0, 0, 130499, 130507, 130516, 130524, 130531, - 130539, 130546, 130553, 130562, 130569, 130576, 130583, 130591, 0, 0, 0, - 130599, 130604, 130611, 130617, 130624, 130630, 130636, 130642, 130648, - 0, 0, 0, 0, 0, 0, 0, 130654, 130659, 130666, 130672, 130679, 130685, - 130691, 130697, 130703, 130709, 0, 0, 130714, 130720, 130726, 130729, - 130738, 130745, 130753, 130760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 139250, 139255, 139262, 139269, 139276, 139283, 139288, 139293, 139300, + 139305, 139310, 139317, 139322, 139327, 139332, 139339, 139348, 139353, + 139358, 139363, 139368, 139373, 139378, 139385, 139390, 139395, 139400, + 139405, 139410, 139415, 139420, 139425, 139430, 139435, 139440, 139445, + 139451, 139456, 139461, 139466, 139471, 139476, 139481, 139486, 139491, + 139496, 139505, 139510, 139519, 139524, 139529, 139534, 139539, 139544, + 139549, 139554, 139563, 139568, 139573, 139578, 139583, 139588, 139595, + 139600, 139607, 139612, 139617, 139622, 139627, 139632, 139637, 139642, + 139647, 139652, 139657, 139662, 139667, 139672, 139677, 139682, 139687, + 139692, 139697, 139702, 139711, 139716, 139721, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 139726, 139734, 139742, 139750, 139758, 139766, 139774, 139783, + 139791, 139800, 139808, 139816, 139824, 139832, 139840, 139848, 139857, + 139865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 130767, 130772, 130777, 130782, 130789, 130796, 130803, - 130810, 130815, 130820, 130825, 130830, 130837, 130842, 130849, 130856, - 130861, 130866, 130871, 130878, 130883, 130888, 130895, 130902, 130907, - 130912, 130917, 130924, 130931, 130938, 130943, 130948, 130955, 130962, - 130969, 130976, 130981, 130986, 130991, 130998, 131003, 131008, 131013, - 131020, 131029, 131036, 131041, 131046, 131051, 131056, 131061, 131066, - 131075, 131082, 131087, 131094, 131101, 131106, 131111, 131116, 131123, - 131128, 131135, 131142, 131147, 131152, 131157, 131164, 131171, 131176, - 131181, 131188, 131195, 131202, 131207, 131212, 131217, 131222, 131229, - 131238, 131247, 131252, 131259, 131268, 131273, 131278, 131283, 131288, - 131295, 131302, 131309, 131316, 131321, 131326, 131331, 131338, 131345, - 131352, 131357, 131362, 131369, 131374, 131381, 131386, 131393, 131398, - 131405, 131412, 131417, 131422, 131427, 131432, 131437, 131442, 131447, - 131452, 131457, 131464, 131471, 131478, 131485, 131492, 131501, 131506, - 131511, 131518, 131525, 131530, 131537, 131544, 131551, 131558, 131565, - 131572, 131577, 131582, 131587, 131592, 131597, 131606, 131615, 131624, - 131633, 131642, 131651, 131660, 131669, 131674, 131685, 131696, 131705, - 131710, 131715, 131720, 131725, 131734, 131741, 131748, 131755, 131762, - 131769, 131776, 131785, 131794, 131805, 131814, 131825, 131834, 131841, - 131850, 131861, 131870, 131879, 131888, 131897, 131904, 131911, 131918, - 131927, 131936, 131947, 131956, 131965, 131976, 131981, 131986, 131997, - 132005, 132014, 132023, 132032, 132043, 132052, 132061, 132072, 132083, - 132094, 132105, 132116, 132127, 132134, 132141, 132148, 132155, 132166, - 132175, 132182, 132189, 132196, 132207, 132218, 132229, 132240, 132251, - 132262, 132273, 132284, 132291, 132298, 132307, 132316, 132323, 132330, - 132337, 132346, 132355, 132364, 132371, 132380, 132389, 132398, 132405, - 132412, 132417, 132423, 132430, 132437, 132444, 132451, 132458, 132465, - 132474, 132483, 132492, 132501, 132508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132517, 132523, 132528, 132533, 132540, 132546, 132552, 132558, 132564, - 132570, 132576, 132582, 132586, 132590, 132596, 132602, 132608, 132612, - 132617, 132622, 132626, 132630, 132633, 132639, 132645, 132651, 132657, - 132663, 132669, 132675, 132681, 132687, 132697, 132707, 132713, 132719, - 132729, 132739, 132745, 0, 0, 132751, 132759, 132764, 132769, 132775, - 132781, 132787, 132793, 132799, 132805, 132812, 132819, 132825, 132831, - 132837, 132843, 132849, 132855, 132861, 132867, 132872, 132878, 132884, - 132890, 132896, 132902, 132911, 132917, 132922, 132930, 132937, 132944, - 132953, 132962, 132971, 132980, 132989, 132998, 133007, 133016, 133026, - 133036, 133044, 133052, 133061, 133070, 133076, 133082, 133088, 133094, - 133102, 133110, 133114, 133120, 133125, 133131, 133137, 133143, 133149, - 133155, 133164, 133169, 133176, 133181, 133186, 133191, 133197, 133203, - 133209, 133216, 133221, 133226, 133231, 133236, 133241, 133247, 133253, - 133259, 133265, 133271, 133277, 133283, 133289, 133294, 133299, 133304, - 133309, 133314, 133319, 133324, 133329, 133335, 133341, 133346, 133351, - 133356, 133361, 133366, 133372, 133379, 133383, 133387, 133391, 133395, - 133399, 133403, 133407, 133411, 133419, 133429, 133433, 133437, 133443, - 133449, 133455, 133461, 133467, 133473, 133479, 133485, 133491, 133497, - 133503, 133509, 133515, 133521, 133525, 133529, 133536, 133542, 133548, - 133554, 133559, 133566, 133571, 133577, 133583, 133589, 133595, 133600, - 133604, 133610, 133614, 133618, 133622, 133628, 133634, 133638, 133644, - 133650, 133656, 133662, 133668, 133676, 133684, 133690, 133696, 133702, - 133708, 133720, 133732, 133746, 133758, 133770, 133784, 133798, 133812, - 133816, 133824, 133832, 133837, 133841, 133845, 133849, 133853, 133857, - 133861, 133865, 133871, 133877, 133883, 133889, 133897, 133906, 133913, - 133920, 133928, 133935, 133947, 133959, 133971, 133983, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133990, 133997, - 134004, 134011, 134018, 134025, 134032, 134039, 134046, 134053, 134060, - 134067, 134074, 134081, 134088, 134095, 134102, 134109, 134116, 134123, - 134130, 134137, 134144, 134151, 134158, 134165, 134172, 134179, 134186, - 134193, 134200, 134207, 134214, 134221, 134228, 134235, 134242, 134249, - 134256, 134263, 134270, 134277, 134284, 134291, 134298, 134305, 134312, - 134319, 134326, 134333, 134340, 134347, 134354, 134361, 134368, 134375, - 134382, 134389, 134396, 134403, 134410, 134417, 134424, 134431, 134438, - 134445, 134452, 134457, 134462, 134467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 139874, 139878, 139883, 139888, 139893, 139897, 139902, 139907, 139912, + 139916, 139921, 139926, 139930, 139935, 139940, 139944, 139949, 139954, + 139958, 139963, 139968, 139972, 139977, 139982, 139987, 139992, 139997, + 140001, 140006, 140011, 140016, 140020, 140025, 140030, 140035, 140039, + 140044, 140049, 140053, 140058, 140063, 140067, 140072, 140077, 140081, + 140086, 140091, 140095, 140100, 140105, 140110, 140115, 140120, 140124, + 140129, 140134, 140139, 140143, 140148, 140153, 140158, 140162, 140167, + 140172, 140176, 140181, 140186, 140190, 140195, 140200, 140204, 140209, + 140214, 140218, 140223, 140228, 140233, 140238, 140243, 140247, 140252, + 140257, 140262, 140266, 140271, 0, 140276, 140280, 140285, 140290, + 140294, 140299, 140304, 140308, 140313, 140318, 140322, 140327, 140332, + 140336, 140341, 140346, 140351, 140356, 140361, 140366, 140372, 140378, + 140384, 140389, 140395, 140401, 140407, 140412, 140418, 140424, 140429, + 140435, 140441, 140446, 140452, 140458, 140463, 140469, 140475, 140480, + 140486, 140492, 140498, 140504, 140510, 140515, 140521, 140527, 140533, + 140538, 140544, 140550, 140556, 140561, 140567, 140573, 140578, 140584, + 140590, 140595, 140601, 140607, 140612, 140618, 140624, 140629, 140635, + 140641, 140647, 140653, 140659, 0, 140663, 140668, 0, 0, 140673, 0, 0, + 140678, 140683, 0, 0, 140688, 140693, 140697, 140702, 0, 140707, 140712, + 140717, 140721, 140726, 140731, 140736, 140741, 140746, 140750, 140755, + 140760, 0, 140765, 0, 140770, 140775, 140779, 140784, 140789, 140793, + 140798, 0, 140803, 140808, 140813, 140817, 140822, 140827, 140831, + 140836, 140841, 140846, 140851, 140856, 140861, 140867, 140873, 140879, + 140884, 140890, 140896, 140902, 140907, 140913, 140919, 140924, 140930, + 140936, 140941, 140947, 140953, 140958, 140964, 140970, 140975, 140981, + 140987, 140993, 140999, 141005, 141010, 141016, 141022, 141028, 141033, + 141039, 141045, 141051, 141056, 141062, 141068, 141073, 141079, 141085, + 141090, 141096, 141102, 141107, 141113, 141119, 141124, 141130, 141136, + 141142, 141148, 141154, 141158, 0, 141163, 141168, 141172, 141177, 0, 0, + 141182, 141187, 141192, 141196, 141201, 141206, 141210, 141215, 0, + 141220, 141225, 141230, 141234, 141239, 141244, 141249, 0, 141254, + 141258, 141263, 141268, 141273, 141277, 141282, 141287, 141292, 141296, + 141301, 141306, 141310, 141315, 141320, 141324, 141329, 141334, 141338, + 141343, 141348, 141352, 141357, 141362, 141367, 141372, 141377, 141381, + 0, 141386, 141391, 141395, 141400, 0, 141405, 141409, 141414, 141419, + 141423, 0, 141428, 0, 0, 0, 141432, 141437, 141442, 141446, 141451, + 141456, 141461, 0, 141466, 141470, 141475, 141480, 141485, 141489, + 141494, 141499, 141504, 141508, 141513, 141518, 141522, 141527, 141532, + 141536, 141541, 141546, 141550, 141555, 141560, 141564, 141569, 141574, + 141579, 141584, 141589, 141594, 141600, 141606, 141612, 141617, 141623, + 141629, 141635, 141640, 141646, 141652, 141657, 141663, 141669, 141674, + 141680, 141686, 141691, 141697, 141703, 141708, 141714, 141720, 141726, + 141732, 141738, 141743, 141749, 141755, 141761, 141766, 141772, 141778, + 141784, 141789, 141795, 141801, 141806, 141812, 141818, 141823, 141829, + 141835, 141840, 141846, 141852, 141857, 141863, 141869, 141875, 141881, + 141887, 141891, 141896, 141901, 141906, 141910, 141915, 141920, 141925, + 141929, 141934, 141939, 141943, 141948, 141953, 141957, 141962, 141967, + 141971, 141976, 141981, 141985, 141990, 141995, 142000, 142005, 142010, + 142014, 142019, 142024, 142029, 142033, 142038, 142043, 142048, 142052, + 142057, 142062, 142066, 142071, 142076, 142080, 142085, 142090, 142094, + 142099, 142104, 142108, 142113, 142118, 142123, 142128, 142133, 142138, + 142144, 142150, 142156, 142161, 142167, 142173, 142179, 142184, 142190, + 142196, 142201, 142207, 142213, 142218, 142224, 142230, 142235, 142241, + 142247, 142252, 142258, 142264, 142270, 142276, 142282, 142287, 142293, + 142299, 142305, 142310, 142316, 142322, 142328, 142333, 142339, 142345, + 142350, 142356, 142362, 142367, 142373, 142379, 142384, 142390, 142396, + 142401, 142407, 142413, 142419, 142425, 142431, 142436, 142442, 142448, + 142454, 142459, 142465, 142471, 142477, 142482, 142488, 142494, 142499, + 142505, 142511, 142516, 142522, 142528, 142533, 142539, 142545, 142550, + 142556, 142562, 142568, 142574, 142580, 142585, 142591, 142597, 142603, + 142608, 142614, 142620, 142626, 142631, 142637, 142643, 142648, 142654, + 142660, 142665, 142671, 142677, 142682, 142688, 142694, 142699, 142705, + 142711, 142717, 142723, 142729, 142735, 142742, 142749, 142756, 142762, + 142769, 142776, 142783, 142789, 142796, 142803, 142809, 142816, 142823, + 142829, 142836, 142843, 142849, 142856, 142863, 142869, 142876, 142883, + 142890, 142897, 142904, 142910, 142917, 142924, 142931, 142937, 142944, + 142951, 142958, 142964, 142971, 142978, 142984, 142991, 142998, 143004, + 143011, 143018, 143024, 143031, 143038, 143044, 143051, 143058, 143065, + 143072, 143079, 143084, 143090, 143096, 143102, 143107, 143113, 143119, + 143125, 143130, 143136, 143142, 143147, 143153, 143159, 143164, 143170, + 143176, 143181, 143187, 143193, 143198, 143204, 143210, 143216, 143222, + 143228, 143233, 143239, 143245, 143251, 143256, 143262, 143268, 143274, + 143279, 143285, 143291, 143296, 143302, 143308, 143313, 143319, 143325, + 143330, 143336, 143342, 143347, 143353, 143359, 143365, 143371, 143377, + 143383, 0, 0, 143390, 143395, 143400, 143405, 143410, 143415, 143420, + 143425, 143430, 143435, 143440, 143445, 143450, 143455, 143460, 143465, + 143470, 143475, 143481, 143486, 143491, 143496, 143501, 143506, 143511, + 143516, 143520, 143525, 143530, 143535, 143540, 143545, 143550, 143555, + 143560, 143565, 143570, 143575, 143580, 143585, 143590, 143595, 143600, + 143605, 143611, 143616, 143621, 143626, 143631, 143636, 143641, 143646, + 143652, 143657, 143662, 143667, 143672, 143677, 143682, 143687, 143692, + 143697, 143702, 143707, 143712, 143717, 143722, 143727, 143732, 143737, + 143742, 143747, 143752, 143757, 143762, 143767, 143773, 143778, 143783, + 143788, 143793, 143798, 143803, 143808, 143812, 143817, 143822, 143827, + 143832, 143837, 143842, 143847, 143852, 143857, 143862, 143867, 143872, + 143877, 143882, 143887, 143892, 143897, 143903, 143908, 143913, 143918, + 143923, 143928, 143933, 143938, 143944, 143949, 143954, 143959, 143964, + 143969, 143974, 143980, 143986, 143992, 143998, 144004, 144010, 144016, + 144022, 144028, 144034, 144040, 144046, 144052, 144058, 144064, 144070, + 144076, 144083, 144089, 144095, 144101, 144107, 144113, 144119, 144125, + 144130, 144136, 144142, 144148, 144154, 144160, 144166, 144172, 144178, + 144184, 144190, 144196, 144202, 144208, 144214, 144220, 144226, 144232, + 144239, 144245, 144251, 144257, 144263, 144269, 144275, 144281, 144288, + 144294, 144300, 144306, 144312, 144318, 144324, 144330, 144336, 144342, + 144348, 144354, 144360, 144366, 144372, 144378, 144384, 144390, 144396, + 144402, 144408, 144414, 144420, 144426, 144433, 144439, 144445, 144451, + 144457, 144463, 144469, 144475, 144480, 144486, 144492, 144498, 144504, + 144510, 144516, 144522, 144528, 144534, 144540, 144546, 144552, 144558, + 144564, 144570, 144576, 144582, 144589, 144595, 144601, 144607, 144613, + 144619, 144625, 144631, 144638, 144644, 144650, 144656, 144662, 144668, + 144674, 144681, 144688, 144695, 144702, 144709, 144716, 144723, 144730, + 144737, 144744, 144751, 144758, 144765, 144772, 144779, 144786, 144793, + 144801, 144808, 144815, 144822, 144829, 144836, 144843, 144850, 144856, + 144863, 144870, 144877, 144884, 144891, 144898, 144905, 144912, 144919, + 144926, 144933, 144940, 144947, 144954, 144961, 144968, 144975, 144983, + 144990, 144997, 145004, 145011, 145018, 145025, 145032, 145040, 145047, + 145054, 145061, 145068, 145075, 145082, 145087, 0, 0, 145092, 145097, + 145101, 145105, 145109, 145113, 145117, 145121, 145126, 145130, 145135, + 145140, 145144, 145148, 145152, 145156, 145160, 145164, 145169, 145173, + 145178, 145183, 145187, 145191, 145195, 145199, 145203, 145207, 145212, + 145216, 145221, 145227, 145232, 145237, 145242, 145247, 145252, 145257, + 145263, 145268, 145274, 145280, 145285, 145290, 145295, 145300, 145305, + 145310, 145316, 145321, 145327, 145331, 145336, 145341, 145346, 145351, + 145356, 145361, 145367, 145375, 145382, 145387, 145392, 145399, 145405, + 145410, 145416, 145422, 145430, 145436, 145443, 145451, 145457, 145466, + 145475, 145483, 145491, 145497, 145504, 145512, 145520, 145526, 145533, + 145542, 145551, 145558, 145569, 145579, 145589, 145599, 145609, 145616, + 145623, 145630, 145637, 145646, 145655, 145666, 145677, 145686, 145695, + 145706, 145715, 145724, 145735, 145744, 145753, 145761, 145769, 145780, + 145791, 145799, 145808, 145817, 145824, 145835, 145846, 145855, 145864, + 145871, 145880, 145889, 145898, 145909, 145918, 145928, 145937, 145946, + 145957, 145970, 145985, 145996, 146009, 146021, 146030, 146041, 146052, + 146061, 146072, 146086, 146101, 146104, 146113, 146118, 146124, 146132, + 146138, 146144, 146153, 146160, 146170, 146182, 146189, 146192, 146198, + 146205, 146211, 146216, 146219, 146224, 146227, 146234, 146240, 146248, + 146255, 146262, 146268, 146273, 146276, 146279, 146282, 146288, 146295, + 146301, 146306, 146313, 146316, 146321, 146328, 146334, 146342, 146349, + 146359, 146368, 146371, 146377, 146384, 146391, 146398, 146403, 146411, + 146419, 146428, 146434, 146443, 146452, 146461, 146467, 146476, 146483, + 146490, 146497, 146505, 146511, 146519, 146525, 146532, 146539, 146547, + 146558, 146568, 146574, 146581, 146588, 146595, 146601, 146608, 146615, + 146620, 146627, 146635, 146644, 146650, 146662, 146673, 146679, 146687, + 146693, 146700, 146707, 146714, 146720, 146727, 146736, 146742, 146748, + 146755, 146762, 146770, 146780, 146790, 146800, 146810, 146818, 146826, + 146836, 146844, 146849, 146854, 146859, 146865, 146872, 146879, 146885, + 146891, 146896, 146903, 146911, 146921, 146929, 146937, 146947, 146957, + 146965, 146975, 146985, 146997, 147009, 147021, 147031, 147037, 147043, + 147050, 147059, 147068, 147077, 147086, 147096, 147105, 147114, 147123, + 147128, 147134, 147143, 147153, 147162, 147168, 147174, 147181, 147188, + 147195, 147201, 147208, 147215, 147222, 147228, 147232, 147237, 147244, + 147251, 147258, 147263, 147271, 147279, 147288, 147296, 147303, 147311, + 147320, 147330, 147333, 147337, 147342, 147347, 147352, 147357, 147362, + 147367, 147372, 147377, 147382, 147387, 147392, 147397, 147402, 147407, + 147412, 147417, 147422, 147429, 147435, 147442, 147448, 147453, 147460, + 147466, 147473, 147479, 147484, 147491, 147498, 147505, 147511, 147517, + 147526, 147535, 147546, 147553, 147560, 147569, 147578, 147587, 147596, + 147605, 147611, 147619, 147625, 147635, 147640, 147649, 147658, 147665, + 147676, 147683, 147690, 147697, 147704, 147711, 147718, 147725, 147732, + 147739, 147746, 147752, 147758, 147764, 147771, 147778, 147785, 147792, + 147799, 147806, 147813, 147820, 147827, 147834, 147841, 147848, 147853, + 147862, 147871, 147880, 147887, 147894, 147901, 147908, 147915, 147922, + 147929, 147936, 147945, 147954, 147963, 147972, 147981, 147990, 147999, + 148008, 148017, 148026, 148035, 148044, 148053, 148059, 148067, 148073, + 148083, 148088, 148097, 148106, 148115, 148126, 148131, 148138, 148145, + 148152, 148157, 148163, 148169, 148175, 148182, 148189, 148196, 148203, + 148210, 148217, 148224, 148231, 148238, 148245, 148252, 148259, 148264, + 148273, 148282, 148291, 148300, 148309, 148318, 148327, 148336, 148347, + 148358, 148365, 148372, 148379, 148386, 148393, 148400, 148408, 148418, + 148428, 148438, 148449, 148460, 148471, 148480, 148489, 148498, 148503, + 148508, 148513, 148518, 148529, 148540, 148551, 148562, 148573, 148583, + 148594, 148603, 148612, 148621, 148630, 148639, 148647, 148656, 148667, + 148678, 148689, 148700, 148711, 148723, 148736, 148748, 148761, 148773, + 148786, 148798, 148811, 148822, 148833, 148842, 148850, 148859, 148870, + 148881, 148893, 148906, 148920, 148935, 148947, 148960, 148972, 148985, + 148996, 149007, 149016, 149024, 149033, 149040, 149047, 149054, 149061, + 149068, 149075, 149082, 149089, 149096, 149103, 149108, 149113, 149118, + 149125, 149135, 149146, 149156, 149167, 149181, 149196, 149211, 149225, + 149240, 149255, 149266, 149277, 149290, 149303, 149312, 149321, 149334, + 149347, 149354, 149361, 149366, 149371, 149376, 149381, 149386, 149393, + 149402, 149407, 149410, 149415, 149422, 149429, 149436, 149443, 149450, + 149457, 149470, 149484, 149499, 149506, 149513, 149520, 149529, 149537, + 149545, 149554, 149559, 149564, 149569, 149574, 149579, 149584, 149591, + 149598, 149604, 149611, 149617, 149624, 149629, 149634, 149639, 149644, + 149649, 149656, 149663, 149668, 149675, 149682, 149687, 149692, 149697, + 149702, 149707, 149712, 149719, 149726, 149733, 149736, 149741, 149746, + 149751, 149756, 149763, 149770, 149778, 149786, 149791, 149796, 149803, + 149810, 149817, 149822, 149829, 149836, 149841, 149848, 149855, 149861, + 149867, 149873, 149879, 149887, 149895, 149901, 149909, 149917, 149922, + 149929, 149936, 149941, 149948, 149955, 149962, 149970, 149978, 149983, + 149990, 149997, 150006, 150013, 150022, 150033, 150042, 150051, 150060, + 150069, 150072, 150077, 150084, 150093, 150100, 150109, 150116, 150121, + 150126, 150129, 150132, 150135, 150142, 150149, 150158, 150167, 150176, + 150183, 150190, 150195, 150208, 150213, 150218, 150223, 150228, 150233, + 150238, 150243, 150248, 150251, 150256, 150261, 150266, 150271, 150276, + 150283, 150288, 150295, 150298, 150303, 150306, 150309, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 150312, 150317, 150322, 150327, 150332, 0, + 150337, 150342, 150347, 150352, 150357, 150362, 150367, 150372, 150377, + 150382, 150387, 150392, 150397, 150402, 150407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 150412, 150417, 150422, 150427, 150432, 150437, 150442, 0, 150447, + 150452, 150457, 150463, 150467, 150472, 150477, 150482, 150487, 150492, + 150497, 150502, 150507, 150512, 150517, 150522, 150527, 0, 0, 150532, + 150537, 150542, 150547, 150552, 150557, 150562, 0, 150567, 150572, 0, + 150578, 150583, 150591, 150598, 150607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 134471, 134476, 134483, 134490, 134497, 134504, - 134509, 134514, 134521, 134526, 134531, 134538, 134543, 134548, 134553, - 134560, 134569, 134574, 134579, 134584, 134589, 134594, 134599, 134606, - 134611, 134616, 134621, 134626, 134631, 134636, 134641, 134646, 134651, - 134656, 134661, 134666, 134672, 134677, 134682, 134687, 134692, 134697, - 134702, 134707, 134712, 134717, 134726, 134731, 134740, 134745, 134750, - 134755, 134760, 134765, 134770, 134775, 134784, 134789, 134794, 134799, - 134804, 134809, 134816, 134821, 134828, 134833, 134838, 134843, 134848, - 134853, 134858, 134863, 134868, 134873, 134878, 134883, 134888, 134893, - 134898, 134903, 134908, 134913, 134918, 134923, 134932, 134937, 134942, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 134947, 134955, 134963, 134971, 134979, - 134987, 134995, 135004, 135012, 135021, 135029, 135037, 135045, 135053, - 135061, 135069, 135078, 135086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 135095, 135099, 135104, 135109, 135114, 135118, - 135123, 135128, 135133, 135137, 135142, 135147, 135151, 135156, 135161, - 135165, 135170, 135175, 135179, 135183, 135188, 135192, 135197, 135202, - 135207, 135212, 135217, 135221, 135226, 135231, 135236, 135240, 135245, - 135250, 135255, 135259, 135264, 135269, 135273, 135278, 135283, 135287, - 135292, 135297, 135301, 135305, 135310, 135314, 135319, 135324, 135329, - 135334, 135339, 135343, 135348, 135353, 135358, 135362, 135367, 135372, - 135377, 135381, 135386, 135391, 135395, 135400, 135405, 135409, 135414, - 135419, 135423, 135427, 135432, 135436, 135441, 135446, 135451, 135456, - 135461, 135465, 135470, 135475, 135480, 135484, 135489, 0, 135494, - 135498, 135503, 135508, 135512, 135517, 135522, 135526, 135531, 135536, - 135540, 135544, 135549, 135553, 135558, 135563, 135568, 135573, 135578, - 135583, 135589, 135595, 135601, 135606, 135612, 135618, 135624, 135629, - 135635, 135641, 135646, 135652, 135658, 135663, 135669, 135675, 135680, - 135685, 135691, 135696, 135702, 135708, 135714, 135720, 135726, 135731, - 135737, 135743, 135749, 135754, 135760, 135766, 135772, 135777, 135783, - 135789, 135794, 135800, 135806, 135811, 135817, 135823, 135828, 135833, - 135839, 135844, 135850, 135856, 135862, 135868, 135874, 0, 135878, - 135883, 0, 0, 135888, 0, 0, 135893, 135898, 0, 0, 135903, 135908, 135912, - 135917, 0, 135922, 135926, 135931, 135935, 135940, 135945, 135950, - 135955, 135960, 135964, 135969, 135974, 0, 135979, 0, 135984, 135989, - 135993, 135998, 136003, 136007, 136012, 0, 136017, 136022, 136027, - 136031, 136035, 136040, 136044, 136049, 136054, 136059, 136064, 136069, - 136074, 136080, 136086, 136092, 136097, 136103, 136109, 136115, 136120, - 136126, 136132, 136137, 136143, 136149, 136154, 136160, 136166, 136171, - 136176, 136182, 136187, 136193, 136199, 136205, 136211, 136217, 136222, - 136228, 136234, 136240, 136245, 136251, 136257, 136263, 136268, 136274, - 136280, 136285, 136291, 136297, 136302, 136308, 136314, 136319, 136324, - 136330, 136335, 136341, 136347, 136353, 136359, 136365, 136369, 0, - 136374, 136379, 136383, 136388, 0, 0, 136393, 136398, 136403, 136407, - 136412, 136417, 136421, 136426, 0, 136431, 136435, 136440, 136444, - 136449, 136454, 136459, 0, 136464, 136468, 136473, 136478, 136483, - 136487, 136492, 136497, 136502, 136506, 136511, 136516, 136520, 136525, - 136530, 136534, 136539, 136544, 136548, 136552, 136557, 136561, 136566, - 136571, 136576, 136581, 136586, 136590, 0, 136595, 136600, 136604, - 136609, 0, 136614, 136618, 136623, 136628, 136632, 0, 136637, 0, 0, 0, - 136641, 136645, 136650, 136654, 136659, 136664, 136669, 0, 136674, - 136678, 136683, 136688, 136693, 136697, 136702, 136707, 136712, 136716, - 136721, 136726, 136730, 136735, 136740, 136744, 136749, 136754, 136758, - 136762, 136767, 136771, 136776, 136781, 136786, 136791, 136796, 136801, - 136807, 136813, 136819, 136824, 136830, 136836, 136842, 136847, 136853, - 136859, 136864, 136870, 136876, 136881, 136887, 136893, 136898, 136903, - 136909, 136914, 136920, 136926, 136932, 136938, 136944, 136949, 136955, - 136961, 136967, 136972, 136978, 136984, 136990, 136995, 137001, 137007, - 137012, 137018, 137024, 137029, 137035, 137041, 137046, 137051, 137057, - 137062, 137068, 137074, 137080, 137086, 137092, 137096, 137101, 137106, - 137111, 137115, 137120, 137125, 137130, 137134, 137139, 137144, 137148, - 137153, 137158, 137162, 137167, 137172, 137176, 137180, 137185, 137189, - 137194, 137199, 137204, 137209, 137214, 137218, 137223, 137228, 137233, - 137237, 137242, 137247, 137252, 137256, 137261, 137266, 137270, 137275, - 137280, 137284, 137289, 137294, 137298, 137302, 137307, 137311, 137316, - 137321, 137326, 137331, 137336, 137341, 137347, 137353, 137359, 137364, - 137370, 137376, 137382, 137387, 137393, 137399, 137404, 137410, 137416, - 137421, 137427, 137433, 137438, 137443, 137449, 137454, 137460, 137466, - 137472, 137478, 137484, 137489, 137495, 137501, 137507, 137512, 137518, - 137524, 137530, 137535, 137541, 137547, 137552, 137558, 137564, 137569, - 137575, 137581, 137586, 137591, 137597, 137602, 137608, 137614, 137620, - 137626, 137632, 137637, 137643, 137649, 137655, 137660, 137666, 137672, - 137678, 137683, 137689, 137695, 137700, 137706, 137712, 137717, 137723, - 137729, 137734, 137739, 137745, 137750, 137756, 137762, 137768, 137774, - 137780, 137785, 137791, 137797, 137803, 137808, 137814, 137820, 137826, - 137831, 137837, 137843, 137848, 137854, 137860, 137865, 137871, 137877, - 137882, 137887, 137893, 137898, 137904, 137910, 137916, 137922, 137928, - 137934, 137941, 137948, 137955, 137961, 137968, 137975, 137982, 137988, - 137995, 138002, 138008, 138015, 138022, 138028, 138035, 138042, 138048, - 138054, 138061, 138067, 138074, 138081, 138088, 138095, 138102, 138108, - 138115, 138122, 138129, 138135, 138142, 138149, 138156, 138162, 138169, - 138176, 138182, 138189, 138196, 138202, 138209, 138216, 138222, 138228, - 138235, 138241, 138248, 138255, 138262, 138269, 138276, 138281, 138287, - 138293, 138299, 138304, 138310, 138316, 138322, 138327, 138333, 138339, - 138344, 138350, 138356, 138361, 138367, 138373, 138378, 138383, 138389, - 138394, 138400, 138406, 138412, 138418, 138424, 138429, 138435, 138441, - 138447, 138452, 138458, 138464, 138470, 138475, 138481, 138487, 138492, - 138498, 138504, 138509, 138515, 138521, 138526, 138531, 138537, 138542, - 138548, 138554, 138560, 138566, 138572, 138578, 0, 0, 138585, 138590, - 138595, 138600, 138605, 138610, 138615, 138620, 138625, 138630, 138635, - 138640, 138645, 138650, 138655, 138660, 138665, 138670, 138676, 138681, - 138686, 138691, 138696, 138701, 138706, 138711, 138715, 138720, 138725, - 138730, 138735, 138740, 138745, 138750, 138755, 138760, 138765, 138770, - 138775, 138780, 138785, 138790, 138795, 138800, 138806, 138811, 138816, - 138821, 138826, 138831, 138836, 138841, 138847, 138852, 138857, 138862, - 138867, 138872, 138877, 138882, 138887, 138892, 138897, 138902, 138907, - 138912, 138917, 138922, 138927, 138932, 138937, 138942, 138947, 138952, - 138957, 138962, 138968, 138973, 138978, 138983, 138988, 138993, 138998, - 139003, 139007, 139012, 139017, 139022, 139027, 139032, 139037, 139042, - 139047, 139052, 139057, 139062, 139067, 139072, 139077, 139082, 139087, - 139092, 139098, 139103, 139108, 139113, 139118, 139123, 139128, 139133, - 139139, 139144, 139149, 139154, 139159, 139164, 139169, 139175, 139181, - 139187, 139193, 139199, 139205, 139211, 139217, 139223, 139229, 139235, - 139241, 139247, 139253, 139259, 139265, 139271, 139278, 139284, 139290, - 139296, 139302, 139308, 139314, 139320, 139325, 139331, 139337, 139343, - 139349, 139355, 139361, 139367, 139373, 139379, 139385, 139391, 139397, - 139403, 139409, 139415, 139421, 139427, 139434, 139440, 139446, 139452, - 139458, 139464, 139470, 139476, 139483, 139489, 139495, 139501, 139507, - 139513, 139519, 139525, 139531, 139537, 139543, 139549, 139555, 139561, - 139567, 139573, 139579, 139585, 139591, 139597, 139603, 139609, 139615, - 139621, 139628, 139634, 139640, 139646, 139652, 139658, 139664, 139670, - 139675, 139681, 139687, 139693, 139699, 139705, 139711, 139717, 139723, - 139729, 139735, 139741, 139747, 139753, 139759, 139765, 139771, 139777, - 139784, 139790, 139796, 139802, 139808, 139814, 139820, 139826, 139833, - 139839, 139845, 139851, 139857, 139863, 139869, 139876, 139883, 139890, - 139897, 139904, 139911, 139918, 139925, 139932, 139939, 139946, 139953, - 139960, 139967, 139974, 139981, 139988, 139996, 140003, 140010, 140017, - 140024, 140031, 140038, 140045, 140051, 140058, 140065, 140072, 140079, - 140086, 140093, 140100, 140107, 140114, 140121, 140128, 140135, 140142, - 140149, 140156, 140163, 140170, 140178, 140185, 140192, 140199, 140206, - 140213, 140220, 140227, 140235, 140242, 140249, 140256, 140263, 140270, - 140277, 140282, 0, 0, 140287, 140292, 140296, 140300, 140304, 140308, - 140312, 140316, 140321, 140325, 140330, 140335, 140339, 140343, 140347, - 140351, 140355, 140359, 140364, 140368, 140373, 140378, 140382, 140386, - 140390, 140394, 140398, 140402, 140407, 140411, 140416, 140422, 140427, - 140432, 140437, 140442, 140447, 140452, 140458, 140463, 140469, 140475, - 140480, 140485, 140490, 140495, 140500, 140505, 140511, 140516, 140522, - 140526, 140531, 140536, 140541, 140546, 140551, 140556, 140562, 140570, - 140577, 140582, 140587, 140594, 140600, 140605, 140611, 140617, 140625, - 140631, 140638, 140646, 140652, 140661, 140670, 140678, 140686, 140692, - 140699, 140707, 140715, 140721, 140728, 140737, 140746, 140753, 140764, - 140774, 140784, 140794, 140804, 140811, 140818, 140825, 140832, 140841, - 140850, 140861, 140872, 140881, 140890, 140901, 140910, 140919, 140930, - 140939, 140948, 140956, 140964, 140975, 140986, 140994, 141003, 141012, - 141019, 141030, 141041, 141050, 141059, 141066, 141075, 141084, 141093, - 141104, 141113, 141123, 141132, 141141, 141152, 141165, 141180, 141191, - 141204, 141216, 141225, 141236, 141247, 141256, 141267, 141281, 141296, - 141299, 141308, 141313, 141319, 141327, 141333, 141339, 141348, 141355, - 141365, 141377, 141384, 141387, 141393, 141400, 141406, 141411, 141414, - 141419, 141422, 141429, 141435, 141443, 141450, 141457, 141463, 141468, - 141471, 141474, 141477, 141483, 141490, 141496, 141501, 141508, 141511, - 141516, 141523, 141529, 141537, 141544, 141554, 141563, 141566, 141572, - 141579, 141586, 141593, 141598, 141606, 141614, 141623, 141629, 141638, - 141647, 141656, 141662, 141671, 141678, 141685, 141692, 141700, 141706, - 141714, 141720, 141727, 141734, 141742, 141753, 141763, 141769, 141776, - 141783, 141790, 141796, 141803, 141810, 141815, 141822, 141830, 141839, - 141845, 141857, 141868, 141874, 141882, 141888, 141895, 141902, 141909, - 141915, 141922, 141931, 141937, 141943, 141950, 141957, 141965, 141975, - 141985, 141995, 142005, 142013, 142021, 142031, 142039, 142044, 142049, - 142054, 142060, 142067, 142074, 142080, 142086, 142091, 142098, 142106, - 142116, 142124, 142132, 142142, 142152, 142160, 142170, 142180, 142192, - 142204, 142216, 142226, 142232, 142238, 142245, 142254, 142263, 142272, - 142281, 142291, 142300, 142309, 142318, 142323, 142329, 142338, 142348, - 142357, 142363, 142369, 142376, 142383, 142390, 142396, 142403, 142410, - 142417, 142423, 142427, 142432, 142439, 142446, 142453, 142458, 142466, - 142474, 142483, 142491, 142498, 142506, 142515, 142525, 142528, 142532, - 142537, 142542, 142547, 142552, 142557, 142562, 142567, 142572, 142577, - 142582, 142587, 142592, 142597, 142602, 142607, 142612, 142617, 142624, - 142630, 142637, 142643, 142648, 142655, 142661, 142668, 142674, 142679, - 142686, 142693, 142700, 142706, 142712, 142721, 142730, 142741, 142748, - 142755, 142764, 142773, 142782, 142791, 142800, 142806, 142814, 142820, - 142830, 142835, 142844, 142853, 142860, 142871, 142878, 142885, 142892, - 142899, 142906, 142913, 142920, 142927, 142934, 142941, 142947, 142953, - 142959, 142966, 142973, 142980, 142987, 142994, 143001, 143008, 143015, - 143022, 143029, 143036, 143043, 143048, 143057, 143066, 143075, 143082, - 143089, 143096, 143103, 143110, 143117, 143124, 143131, 143140, 143149, - 143158, 143167, 143176, 143185, 143194, 143203, 143212, 143221, 143230, - 143239, 143248, 143254, 143262, 143268, 143278, 143283, 143292, 143301, - 143310, 143321, 143326, 143333, 143340, 143347, 143352, 143358, 143364, - 143370, 143377, 143384, 143391, 143398, 143405, 143412, 143419, 143426, - 143433, 143440, 143447, 143454, 143459, 143468, 143477, 143486, 143495, - 143504, 143513, 143522, 143531, 143542, 143553, 143560, 143567, 143574, - 143581, 143588, 143595, 143603, 143613, 143623, 143633, 143644, 143655, - 143666, 143675, 143684, 143693, 143698, 143703, 143708, 143713, 143724, - 143735, 143746, 143757, 143768, 143778, 143789, 143798, 143807, 143816, - 143825, 143834, 143842, 143851, 143862, 143873, 143884, 143895, 143906, - 143918, 143931, 143943, 143956, 143968, 143981, 143993, 144006, 144017, - 144028, 144037, 144045, 144054, 144065, 144076, 144088, 144101, 144115, - 144130, 144142, 144155, 144167, 144180, 144191, 144202, 144211, 144219, - 144228, 144235, 144242, 144249, 144256, 144263, 144270, 144277, 144284, - 144291, 144298, 144303, 144308, 144313, 144320, 144330, 144341, 144351, - 144362, 144376, 144391, 144406, 144420, 144435, 144450, 144461, 144472, - 144485, 144498, 144507, 144516, 144529, 144542, 144549, 144556, 144561, - 144566, 144571, 144576, 144581, 144588, 144597, 144602, 144605, 144610, - 144617, 144624, 144631, 144638, 144645, 144652, 144665, 144679, 144694, - 144701, 144708, 144715, 144724, 144732, 144740, 144749, 144754, 144759, - 144764, 144769, 144774, 144779, 144786, 144793, 144799, 144806, 144812, - 144819, 144824, 144829, 144834, 144839, 144844, 144851, 144858, 144863, - 144870, 144877, 144882, 144887, 144892, 144897, 144902, 144907, 144914, - 144921, 144928, 144931, 144936, 144941, 144946, 144951, 144958, 144965, - 144973, 144981, 144986, 144991, 144998, 145005, 145012, 145017, 145024, - 145031, 145036, 145043, 145050, 145056, 145062, 145068, 145074, 145082, - 145090, 145096, 145104, 145112, 145117, 145124, 145131, 145136, 145143, - 145150, 145157, 145165, 145173, 145178, 145185, 145192, 145201, 145208, - 145217, 145228, 145237, 145246, 145255, 145264, 145267, 145272, 145279, - 145288, 145295, 145304, 145311, 145316, 145321, 145324, 145327, 145330, - 145337, 145344, 145353, 145362, 145371, 145378, 145385, 145390, 145403, - 145408, 145413, 145418, 145423, 145428, 145433, 145438, 145443, 145446, - 145451, 145456, 145461, 145466, 145471, 145478, 145483, 145490, 145493, - 145498, 145501, 145504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 145507, 145512, 145517, 145522, 145527, 0, 145532, 145537, 145542, - 145547, 145552, 145557, 145562, 145567, 145572, 145577, 145582, 145587, - 145592, 145597, 145602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150612, 150619, 150625, 150632, 150639, + 150646, 150653, 150660, 150667, 150674, 150681, 150688, 150695, 150702, + 150709, 150716, 150723, 150730, 150737, 150744, 150751, 150758, 150765, + 150772, 150779, 150786, 150793, 150800, 150807, 150814, 150821, 150828, + 150835, 150842, 150849, 150855, 150861, 150867, 150874, 150880, 150887, + 150893, 150900, 150907, 150914, 150921, 150928, 150935, 150942, 150949, + 150956, 150963, 150970, 150977, 150984, 150991, 150997, 151004, 151011, + 151018, 151025, 151032, 151040, 151047, 151054, 151061, 151068, 151075, + 151082, 151089, 151096, 151103, 151110, 151117, 151124, 151130, 151137, + 151144, 151151, 151158, 151165, 151172, 151179, 151187, 151194, 151200, + 151207, 151214, 151221, 151228, 151235, 151242, 151249, 151256, 151263, + 151270, 151277, 151284, 151291, 151298, 151305, 151312, 151319, 151326, + 151333, 151340, 151346, 151353, 151360, 151367, 151374, 151381, 151388, + 151395, 151402, 151409, 151416, 151423, 151430, 151437, 151444, 151451, + 151458, 151465, 151472, 151479, 151486, 151493, 151500, 151508, 151516, + 151524, 151531, 151538, 151545, 151552, 151559, 151566, 151573, 151580, + 151587, 151594, 151600, 151607, 151614, 151621, 151628, 151635, 151642, + 151649, 151656, 151663, 151670, 151677, 151684, 151691, 151698, 151706, + 151714, 151722, 151729, 151736, 151743, 151750, 151757, 151764, 151771, + 151778, 151785, 151792, 151799, 151806, 151813, 151820, 151827, 151834, + 151841, 151848, 151855, 151862, 151869, 151876, 151883, 151890, 151897, + 151904, 151911, 151918, 151925, 151932, 151939, 151946, 151953, 151960, + 151967, 151974, 151981, 0, 0, 151988, 151992, 151996, 152000, 152004, + 152008, 152012, 152017, 152021, 152026, 152032, 152038, 152044, 152050, + 152058, 152066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152072, + 152078, 152084, 152090, 152096, 152102, 152108, 152114, 152120, 152126, + 152131, 152137, 152142, 152147, 152153, 152159, 152165, 152171, 152177, + 152182, 152187, 152193, 152199, 152204, 152210, 152216, 152222, 152228, + 152234, 152240, 152246, 152252, 152258, 152264, 152270, 152276, 152282, + 152288, 152294, 152300, 152306, 152312, 152318, 152324, 152329, 152335, + 152340, 152345, 152351, 152357, 152363, 152369, 152375, 152380, 152385, + 152391, 152397, 152402, 152408, 152414, 152420, 152426, 152432, 152438, + 152444, 152450, 152456, 152462, 152468, 152474, 152479, 152484, 152488, + 152493, 152500, 0, 0, 0, 0, 0, 152504, 152509, 152513, 152517, 152521, + 152525, 152529, 152533, 152538, 152542, 0, 0, 0, 0, 152547, 152553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145607, 145614, 145620, - 145627, 145634, 145641, 145648, 145655, 145662, 145669, 145676, 145683, - 145690, 145697, 145704, 145711, 145718, 145725, 145732, 145739, 145746, - 145753, 145760, 145767, 145774, 145781, 145788, 145795, 145802, 145809, - 145816, 145823, 145830, 145837, 145844, 145850, 145856, 145862, 145869, - 145875, 145882, 145888, 145895, 145902, 145909, 145916, 145923, 145930, - 145937, 145944, 145951, 145958, 145965, 145972, 145979, 145986, 145993, - 146000, 146007, 146014, 146021, 146028, 146036, 146043, 146050, 146057, - 146064, 146071, 146078, 146085, 146092, 146099, 146106, 146113, 146120, - 146126, 146133, 146140, 146147, 146154, 146161, 146168, 146175, 146183, - 146190, 146196, 146203, 146210, 146217, 146224, 146231, 146238, 146245, - 146252, 146259, 146266, 146273, 146280, 146287, 146294, 146301, 146308, - 146315, 146322, 146329, 146336, 146342, 146349, 146356, 146363, 146370, - 146377, 146384, 146391, 146398, 146405, 146412, 146419, 146426, 146433, - 146440, 146447, 146454, 146461, 146468, 146475, 146482, 146489, 146496, - 146504, 146512, 146520, 146527, 146534, 146541, 146548, 146555, 146562, - 146569, 146576, 146583, 146590, 146596, 146603, 146610, 146617, 146624, - 146631, 146638, 146645, 146652, 146659, 146666, 146673, 146680, 146687, - 146694, 146702, 146710, 146718, 146725, 146732, 146739, 146746, 146753, - 146760, 146767, 146774, 146781, 146788, 146795, 146802, 146809, 146816, - 146823, 146830, 146837, 146844, 146851, 146858, 146865, 146872, 146879, - 146886, 146893, 146900, 146907, 146914, 146921, 146928, 146935, 146942, - 146949, 146956, 146963, 146970, 146977, 0, 0, 146984, 146988, 146992, - 146996, 147000, 147004, 147008, 147013, 147017, 147022, 147028, 147034, - 147040, 147046, 147054, 147062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 147068, 147072, 147076, 147080, 0, 147084, 147088, 147092, - 147096, 147100, 147104, 147108, 147112, 147116, 147120, 147124, 147128, - 147132, 147136, 147140, 147144, 147148, 147152, 147156, 147160, 147164, - 147168, 147172, 147176, 147182, 147188, 147194, 0, 147200, 147205, 0, - 147210, 0, 0, 147215, 0, 147220, 147225, 147230, 147235, 147240, 147245, - 147250, 147255, 147260, 147265, 0, 147270, 147275, 147280, 147285, 0, - 147290, 0, 147295, 0, 0, 0, 0, 0, 0, 147300, 0, 0, 0, 0, 147306, 0, - 147312, 0, 147318, 0, 147324, 147330, 147336, 0, 147342, 147348, 0, - 147354, 0, 0, 147360, 0, 147366, 0, 147372, 0, 147378, 0, 147386, 0, - 147394, 147400, 0, 147406, 0, 0, 147412, 147418, 147424, 147430, 0, - 147436, 147442, 147448, 147454, 147460, 147466, 147472, 0, 147478, - 147484, 147490, 147496, 0, 147502, 147508, 147514, 147520, 0, 147528, 0, - 147536, 147542, 147548, 147554, 147560, 147566, 147572, 147578, 147584, - 147590, 0, 147596, 147602, 147608, 147614, 147620, 147626, 147632, - 147638, 147644, 147650, 147656, 147662, 147668, 147674, 147680, 147686, - 147692, 0, 0, 0, 0, 0, 147698, 147703, 147708, 0, 147713, 147718, 147723, - 147728, 147733, 0, 147738, 147743, 147748, 147753, 147758, 147763, - 147768, 147773, 147778, 147783, 147788, 147793, 147798, 147803, 147808, - 147813, 147818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 147823, 147833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 147841, 147848, 147855, 147862, 147868, 147875, 147882, - 147888, 147895, 147902, 147909, 147917, 147925, 147933, 147941, 147949, - 147957, 147964, 147971, 147978, 147986, 147994, 148002, 148010, 148018, - 148026, 148033, 148040, 148047, 148055, 148063, 148071, 148079, 148087, - 148095, 148100, 148105, 148110, 148115, 148120, 148125, 148130, 148135, - 148140, 0, 0, 0, 0, 148145, 148151, 148155, 148159, 148163, 148167, - 148171, 148175, 148179, 148183, 148187, 148191, 148195, 148199, 148203, - 148207, 148211, 148215, 148219, 148223, 148227, 148231, 148235, 148239, - 148243, 148247, 148251, 148255, 148259, 148263, 148267, 148271, 148275, - 148279, 148283, 148287, 148291, 148295, 148299, 148303, 148307, 148311, - 148315, 148319, 148323, 148327, 148331, 148335, 148339, 148343, 148347, - 148352, 148356, 148360, 148364, 148368, 148372, 148376, 148380, 148384, - 148388, 148392, 148396, 148400, 148404, 148408, 148412, 148416, 148420, - 148424, 148428, 148432, 148436, 148440, 148444, 148448, 148452, 148456, - 148460, 148464, 148468, 148472, 148476, 148480, 148484, 148488, 148492, - 148496, 148500, 148504, 148508, 148512, 148516, 148520, 148524, 148528, - 148532, 148536, 148540, 148544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 148548, 148554, 148563, 148571, 148579, 148588, 148597, 148606, 148615, - 148624, 148633, 148642, 148651, 148660, 148669, 0, 0, 148678, 148687, - 148695, 148703, 148712, 148721, 148730, 148739, 148748, 148757, 148766, - 148775, 148784, 148793, 148802, 0, 148810, 148819, 148827, 148835, - 148844, 148853, 148862, 148871, 148880, 148889, 148898, 148907, 148916, - 148925, 148934, 0, 148941, 148950, 148958, 148966, 148975, 148984, - 148993, 149002, 149011, 149020, 149029, 149038, 149047, 149056, 149065, - 149072, 149078, 149084, 149090, 149096, 149102, 149108, 149114, 149120, - 149126, 149132, 149138, 149144, 149150, 149156, 149162, 149168, 149174, - 149180, 149186, 149192, 149198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149204, - 149211, 149216, 149220, 149224, 149228, 149233, 149238, 149243, 149248, - 149253, 149258, 149265, 0, 0, 0, 149273, 149278, 149284, 149290, 149296, - 149301, 149307, 149313, 149319, 149324, 149330, 149336, 149341, 149347, - 149353, 149358, 149364, 149370, 149375, 149380, 149386, 149391, 149397, - 149403, 149409, 149415, 149421, 149431, 149438, 149444, 149447, 0, - 149450, 149455, 149461, 149467, 149473, 149478, 149484, 149490, 149496, - 149501, 149507, 149513, 149518, 149524, 149530, 149535, 149541, 149547, - 149552, 149557, 149563, 149568, 149574, 149580, 149586, 149592, 149598, - 149601, 149604, 149607, 149610, 149613, 149616, 149622, 149629, 149636, - 149643, 149649, 149656, 149663, 149670, 149676, 149683, 149690, 149696, - 149703, 149710, 149716, 149723, 149730, 149736, 149742, 149749, 149755, - 149762, 149769, 149776, 149783, 149790, 149795, 0, 0, 0, 0, 149800, - 149806, 149813, 149820, 149827, 149833, 149840, 149847, 149854, 149860, - 149867, 149874, 149880, 149887, 149894, 149900, 149907, 149914, 149920, - 149926, 149933, 149939, 149946, 149953, 149960, 149967, 149974, 149983, - 149987, 149990, 149994, 149998, 150002, 150005, 150008, 150011, 150014, - 150017, 150020, 150023, 150026, 150029, 150035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150038, 150045, - 150053, 150061, 150069, 150076, 150084, 150092, 150100, 150107, 150115, - 150123, 150130, 150138, 150146, 150153, 150161, 150169, 150176, 150183, - 150191, 150198, 150206, 150214, 150222, 150230, 150238, 150242, 150246, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150250, 150256, 150262, 150268, - 150272, 150278, 150284, 150290, 150296, 150302, 150308, 150314, 150320, - 150326, 150332, 150338, 150344, 150350, 150356, 150362, 150368, 150374, - 150380, 150386, 150392, 150398, 150404, 150410, 150416, 150422, 150428, - 150434, 150440, 150446, 150452, 150458, 150464, 150470, 150476, 150482, - 150488, 150494, 150500, 0, 0, 0, 0, 0, 150506, 150517, 150528, 150539, - 150550, 150561, 150572, 150583, 150594, 0, 0, 0, 0, 0, 0, 0, 150605, - 150609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152559, 152563, 152567, 152571, + 0, 152575, 152579, 152583, 152587, 152591, 152595, 152599, 152603, + 152607, 152611, 152615, 152619, 152623, 152627, 152631, 152635, 152639, + 152643, 152647, 152651, 152655, 152659, 152663, 152667, 152673, 152679, + 152685, 0, 152691, 152696, 0, 152701, 0, 0, 152706, 0, 152711, 152716, + 152721, 152726, 152731, 152736, 152741, 152746, 152751, 152756, 0, + 152761, 152766, 152771, 152776, 0, 152781, 0, 152786, 0, 0, 0, 0, 0, 0, + 152791, 0, 0, 0, 0, 152797, 0, 152803, 0, 152809, 0, 152815, 152821, + 152827, 0, 152833, 152839, 0, 152845, 0, 0, 152851, 0, 152857, 0, 152863, + 0, 152869, 0, 152877, 0, 152885, 152891, 0, 152897, 0, 0, 152903, 152909, + 152915, 152921, 0, 152927, 152933, 152939, 152945, 152951, 152957, + 152963, 0, 152969, 152975, 152981, 152987, 0, 152993, 152999, 153005, + 153011, 0, 153019, 0, 153027, 153033, 153039, 153045, 153051, 153057, + 153063, 153069, 153075, 153081, 0, 153087, 153093, 153099, 153105, + 153111, 153117, 153123, 153129, 153135, 153141, 153147, 153153, 153159, + 153165, 153171, 153177, 153183, 0, 0, 0, 0, 0, 153189, 153194, 153199, 0, + 153204, 153209, 153214, 153219, 153224, 0, 153229, 153234, 153239, + 153244, 153249, 153254, 153259, 153264, 153269, 153274, 153279, 153284, + 153289, 153294, 153299, 153304, 153309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153314, 153324, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153332, 153339, 153346, 153353, + 153359, 153366, 153373, 153379, 153386, 153393, 153400, 153408, 153416, + 153424, 153432, 153440, 153448, 153455, 153462, 153469, 153477, 153485, + 153493, 153501, 153509, 153517, 153524, 153531, 153538, 153546, 153554, + 153562, 153570, 153578, 153586, 153591, 153596, 153601, 153606, 153611, + 153616, 153621, 153626, 153631, 0, 0, 0, 0, 153636, 153642, 153646, + 153650, 153654, 153658, 153662, 153666, 153670, 153674, 153678, 153682, + 153686, 153690, 153694, 153698, 153702, 153706, 153710, 153714, 153718, + 153722, 153726, 153730, 153734, 153738, 153742, 153746, 153750, 153754, + 153758, 153762, 153766, 153770, 153774, 153778, 153782, 153786, 153790, + 153794, 153798, 153802, 153806, 153810, 153814, 153818, 153822, 153826, + 153830, 153834, 153838, 153843, 153847, 153851, 153855, 153859, 153863, + 153867, 153871, 153875, 153879, 153883, 153887, 153891, 153895, 153899, + 153903, 153907, 153911, 153915, 153919, 153923, 153927, 153931, 153935, + 153939, 153943, 153947, 153951, 153955, 153959, 153963, 153967, 153971, + 153975, 153979, 153983, 153987, 153991, 153995, 153999, 154003, 154007, + 154011, 154015, 154019, 154023, 154027, 154031, 154035, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 154039, 154045, 154054, 154062, 154070, 154079, 154088, + 154097, 154106, 154115, 154124, 154133, 154142, 154151, 154160, 0, 0, + 154169, 154178, 154186, 154194, 154203, 154212, 154221, 154230, 154239, + 154248, 154257, 154266, 154275, 154284, 154293, 0, 154301, 154310, + 154318, 154326, 154335, 154344, 154353, 154362, 154371, 154380, 154389, + 154398, 154407, 154416, 154425, 0, 154432, 154441, 154449, 154457, + 154466, 154475, 154484, 154493, 154502, 154511, 154520, 154529, 154538, + 154547, 154556, 154563, 154569, 154575, 154581, 154587, 154593, 154599, + 154605, 154611, 154617, 154623, 154629, 154635, 154641, 154647, 154653, + 154659, 154665, 154671, 154677, 154683, 154689, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 154695, 154702, 154707, 154711, 154715, 154719, 154724, 154729, + 154734, 154739, 154744, 154749, 154756, 0, 0, 0, 154764, 154769, 154775, + 154781, 154787, 154792, 154798, 154804, 154810, 154815, 154821, 154827, + 154832, 154838, 154844, 154849, 154855, 154861, 154866, 154872, 154878, + 154883, 154889, 154895, 154901, 154907, 154913, 154924, 154931, 154937, + 154940, 0, 154943, 154948, 154954, 154960, 154966, 154971, 154977, + 154983, 154989, 154994, 155000, 155006, 155011, 155017, 155023, 155028, + 155034, 155040, 155045, 155051, 155057, 155062, 155068, 155074, 155080, + 155086, 155092, 155095, 155098, 155101, 155104, 155107, 155110, 155116, + 155123, 155130, 155137, 155143, 155150, 155157, 155164, 155170, 155177, + 155184, 155190, 155197, 155204, 155210, 155217, 155224, 155230, 155237, + 155244, 155250, 155257, 155264, 155271, 155278, 155285, 155290, 0, 0, 0, + 0, 155295, 155301, 155308, 155315, 155322, 155328, 155335, 155342, + 155349, 155355, 155362, 155369, 155375, 155382, 155389, 155395, 155402, + 155409, 155415, 155422, 155429, 155435, 155442, 155449, 155456, 155463, + 155470, 155479, 155483, 155486, 155490, 155494, 155498, 155501, 155504, + 155507, 155510, 155513, 155516, 155519, 155522, 155525, 155531, 155534, + 155538, 155543, 155547, 155552, 155557, 155563, 155569, 155575, 155580, + 155588, 155594, 155597, 155600, 155603, 155606, 155609, 155612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 155615, 155622, 155630, 155638, 155646, 155653, 155661, + 155669, 155677, 155684, 155692, 155700, 155707, 155715, 155723, 155730, + 155738, 155746, 155753, 155761, 155769, 155776, 155784, 155792, 155800, + 155808, 155816, 155820, 155824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 155828, 155834, 155840, 155846, 155850, 155856, 155862, 155868, 155874, + 155880, 155886, 155892, 155898, 155904, 155910, 155916, 155922, 155928, + 155934, 155940, 155946, 155952, 155958, 155964, 155970, 155976, 155982, + 155988, 155994, 156000, 156006, 156012, 156018, 156024, 156030, 156036, + 156042, 156048, 156054, 156060, 156066, 156072, 156078, 156084, 0, 0, 0, + 0, 156090, 156101, 156112, 156123, 156134, 156145, 156156, 156167, + 156178, 0, 0, 0, 0, 0, 0, 0, 156189, 156194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 150613, 150615, 150617, 150621, 150626, 150631, - 150633, 150639, 150644, 150646, 150652, 150656, 150658, 150662, 150668, - 150674, 150680, 150685, 150690, 150697, 150704, 150711, 150716, 150723, - 150730, 150737, 150741, 150748, 150757, 150766, 150773, 150778, 150782, - 150786, 150788, 150791, 150794, 150801, 150808, 150818, 150823, 150828, - 150833, 150838, 150840, 150846, 150850, 150852, 150854, 150856, 150858, - 150862, 150866, 150870, 150872, 150876, 150878, 150882, 150884, 150886, - 150888, 150890, 150895, 150900, 150902, 150908, 150912, 150916, 150924, - 150926, 150928, 150930, 150932, 150934, 150936, 150938, 150940, 150942, - 150944, 150948, 150952, 150954, 150956, 150958, 150960, 150962, 150967, - 150973, 150977, 150981, 150985, 150989, 150994, 150998, 151000, 151002, - 151006, 151012, 151014, 151016, 151018, 151022, 151031, 151037, 151041, - 151045, 151047, 151049, 151052, 151054, 151056, 151058, 151062, 151064, - 151068, 151073, 151075, 151080, 151086, 151093, 151097, 151101, 151105, - 151109, 151115, 151119, 151127, 151134, 151136, 151138, 151142, 151146, - 151148, 151152, 151156, 151158, 151162, 151164, 151168, 151172, 151176, - 151180, 151184, 151188, 151192, 151196, 151202, 151206, 151210, 151221, - 151226, 151230, 151234, 151240, 151244, 151248, 151252, 151259, 151266, - 151270, 151274, 151278, 151282, 151286, 151293, 151295, 151299, 151301, - 151303, 151307, 151311, 151315, 151317, 151321, 151325, 151329, 151333, - 151337, 151339, 151343, 151345, 151351, 151354, 151359, 151361, 151363, - 151366, 151368, 151370, 151373, 151380, 151387, 151394, 151399, 151403, - 151405, 151407, 151409, 151413, 151415, 151419, 151423, 151427, 151429, - 151433, 151435, 151439, 151443, 151450, 151452, 151461, 151470, 151479, - 151485, 151487, 151492, 151496, 151500, 151502, 151508, 151512, 151514, - 151518, 151522, 151524, 151528, 151533, 151537, 151543, 151549, 151551, - 151553, 151559, 151561, 151565, 151569, 151571, 151575, 151577, 151581, - 151585, 151589, 151592, 151595, 151600, 151605, 151607, 151610, 151612, - 151619, 151623, 151625, 151632, 151639, 151646, 151653, 151660, 151662, - 151664, 151666, 151670, 151672, 151674, 151676, 151678, 151680, 151682, - 151684, 151686, 151688, 151690, 151692, 151694, 151696, 151698, 151700, - 151702, 151704, 151706, 151708, 151710, 151712, 151714, 151718, 151720, - 151722, 151724, 151728, 151730, 151734, 151736, 151738, 151742, 151746, - 151752, 151754, 151756, 151758, 151760, 151764, 151768, 151770, 151774, - 151778, 151782, 151786, 151790, 151794, 151798, 151802, 151806, 151810, - 151814, 151818, 151822, 151826, 151830, 151834, 151838, 151842, 151844, - 151846, 151848, 151850, 151852, 151854, 151856, 151864, 151872, 151880, - 151888, 151893, 151898, 151903, 151907, 151911, 151916, 151920, 151922, - 151926, 151928, 151930, 151932, 151934, 151936, 151938, 151940, 151944, - 151946, 151948, 151950, 151954, 151958, 151962, 151966, 151970, 151972, - 151978, 151984, 151986, 151988, 151990, 151992, 151994, 152003, 152010, - 152017, 152021, 152028, 152033, 152040, 152049, 152054, 152058, 152062, - 152064, 152068, 152070, 152074, 152078, 152080, 152084, 152088, 152092, - 152094, 152096, 152102, 152104, 152106, 152108, 152112, 152116, 152118, - 152122, 152124, 152126, 152129, 152133, 152135, 152139, 152141, 152143, - 152148, 152150, 152154, 152158, 152161, 152165, 152169, 152173, 152177, - 152181, 152185, 152189, 152194, 152198, 152202, 152211, 152216, 152219, - 152221, 152224, 152227, 152232, 152234, 152237, 152242, 152246, 152249, - 152253, 152257, 152260, 152265, 152269, 152273, 152277, 152281, 152287, - 152293, 152299, 152305, 152310, 152320, 152322, 152326, 152328, 152330, - 152334, 152338, 152340, 152344, 152349, 152354, 152360, 152362, 152366, - 152370, 152376, 152382, 152386, 152388, 152390, 152394, 152396, 152400, - 152404, 152408, 152410, 152412, 152419, 152423, 152426, 152430, 152434, - 152438, 152440, 152444, 152446, 152448, 152452, 152454, 152458, 152462, - 152468, 152472, 152476, 152480, 152482, 152485, 152489, 152495, 152504, - 152513, 152521, 152529, 152531, 152535, 152537, 152541, 152552, 152556, - 152562, 152568, 152573, 152575, 152580, 152584, 152586, 152588, 152590, - 152594, 152598, 152602, 152607, 152617, 152632, 152642, 152652, 152656, - 152660, 152666, 152668, 152676, 152684, 152686, 152690, 152696, 152702, - 152709, 152716, 152718, 152720, 152723, 152725, 152731, 152733, 152736, - 152740, 152746, 152752, 152763, 152769, 152775, 152783, 152787, 152795, - 152803, 152809, 152815, 152822, 152824, 152828, 152830, 152832, 152837, - 152839, 152841, 152843, 152845, 152849, 152859, 152865, 152869, 152873, - 152877, 152883, 152889, 152895, 152901, 152906, 152911, 152917, 152923, - 152930, 152937, 152945, 152953, 152958, 152966, 152970, 152979, 152988, - 152994, 152998, 153002, 153006, 153009, 153014, 153016, 153018, 153020, - 153027, 153032, 153039, 153046, 153053, 153061, 153069, 153077, 153085, - 153093, 153101, 153109, 153117, 153125, 153131, 153137, 153143, 153149, - 153155, 153161, 153167, 153173, 153179, 153185, 153191, 153197, 153200, - 153209, 153218, 153220, 153227, 153231, 153233, 153235, 153239, 153245, - 153249, 153251, 153261, 153267, 153271, 153273, 153277, 0, 153279, - 153286, 153293, 153300, 153305, 153310, 153319, 153325, 153330, 153334, - 153339, 153343, 153350, 153354, 153357, 153362, 153369, 153376, 153381, - 153386, 153391, 153398, 153407, 153418, 153424, 153430, 153436, 153446, - 153461, 153470, 153478, 153486, 153494, 153502, 153510, 153518, 153526, - 153534, 153542, 153550, 153558, 0, 153566, 153570, 153575, 153580, - 153582, 153586, 153595, 153604, 153612, 153616, 153620, 153625, 153630, - 153635, 153637, 153642, 153646, 153648, 153652, 153656, 153662, 153667, - 153675, 153680, 153685, 153690, 153697, 153700, 153702, 153705, 153710, - 153716, 153720, 153724, 153730, 153736, 153738, 153742, 153746, 153750, - 153754, 153758, 153760, 153762, 153764, 153766, 153772, 153778, 153782, - 153784, 153786, 153788, 153797, 153801, 153808, 153815, 153817, 153820, - 153824, 153830, 153834, 153838, 153840, 153848, 153852, 153856, 153861, - 153866, 153871, 153876, 153881, 153886, 153891, 153896, 153901, 153906, - 153910, 153916, 153920, 153926, 153931, 153938, 153944, 153952, 153956, - 153963, 153967, 153971, 153975, 153980, 153985, 153987, 153991, 154000, - 154008, 154016, 154029, 154042, 154055, 154062, 154069, 154073, 154082, - 154090, 154094, 154103, 154110, 154114, 154118, 154122, 154126, 154133, - 154137, 154141, 154145, 154149, 154156, 154165, 154174, 154181, 154193, - 154205, 154209, 154213, 154217, 154221, 154225, 154229, 154237, 154245, - 154253, 154257, 154261, 154265, 154269, 154273, 154277, 154283, 154289, - 154293, 154304, 154312, 154316, 154320, 154324, 154328, 154334, 154341, - 154352, 154362, 154372, 154383, 154392, 154403, 154409, 154415, 154421, - 154427, 154433, 154437, 154444, 154453, 154460, 154466, 154470, 154474, - 154478, 154487, 154499, 154503, 154510, 154517, 154524, 154532, 154539, - 154547, 154556, 154566, 154575, 154585, 154594, 154604, 154613, 154623, - 154633, 154644, 154654, 154665, 154672, 154680, 154687, 154695, 154703, - 154712, 154720, 154729, 154736, 154748, 154755, 154767, 154770, 154773, - 154776, 154779, 154785, 154792, 154798, 154805, 154810, 154816, 154828, - 154838, 154849, 154854, 154859, 154865, 154870, 154877, 154881, 154887, - 154889, 154891, 154895, 154899, 154903, 154912, 154914, 154916, 154919, - 154921, 154923, 154927, 154929, 154933, 154935, 154939, 154941, 154943, - 154947, 154951, 154957, 154959, 154963, 154965, 154969, 154973, 154977, - 154981, 154983, 154985, 154989, 154993, 154997, 155001, 155003, 155005, - 155007, 155013, 155018, 155021, 155029, 155037, 155039, 155044, 155047, - 155052, 155063, 155070, 155075, 155080, 155082, 155086, 155088, 155092, - 155094, 155098, 155102, 155105, 155108, 155110, 155113, 155115, 155119, - 155121, 155123, 155125, 155129, 155131, 155135, 155138, 155145, 155148, - 155153, 155156, 155159, 155164, 155168, 155172, 155176, 155178, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155183, 155188, 155190, 155194, - 155196, 155200, 155204, 155210, 155214, 155219, 155222, 155226, 155230, - 0, 0, 0, 155234, 155236, 155242, 155246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 155250, 155255, 155260, 155265, 155270, 155275, 155280, 155287, - 155294, 155301, 155308, 155313, 155318, 155323, 155328, 155335, 155341, - 155348, 155355, 155362, 155367, 155372, 155377, 155382, 155387, 155394, - 155401, 155406, 155411, 155418, 155425, 155433, 155441, 155448, 155455, - 155463, 155471, 155479, 155486, 155496, 155507, 155512, 155519, 155526, - 155533, 155541, 155549, 155560, 155568, 155576, 155584, 155589, 155594, - 155599, 155604, 155609, 155614, 155619, 155624, 155629, 155634, 155639, - 155644, 155651, 155656, 155661, 155668, 155673, 155678, 155683, 155688, - 155693, 155698, 155703, 155708, 155713, 155718, 155723, 155728, 155735, - 155743, 155748, 155753, 155760, 155765, 155770, 155775, 155782, 155787, - 155794, 155799, 155806, 155811, 155820, 155829, 155834, 155839, 155844, - 155849, 155854, 155859, 155864, 155869, 155874, 155879, 155884, 155889, - 155894, 155902, 155910, 155915, 155920, 155925, 155930, 155935, 155941, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155947, 155955, 155963, 155971, - 155979, 155985, 155991, 155995, 155999, 156005, 156011, 156020, 156024, - 156029, 156035, 156039, 156044, 156048, 156052, 156058, 156064, 156074, - 156083, 156086, 156091, 156097, 156103, 156114, 156124, 156128, 156133, - 156139, 156145, 156154, 156159, 156163, 156168, 156172, 156178, 156184, - 156190, 156194, 156197, 156201, 156204, 156207, 156212, 156217, 156224, - 156232, 156239, 156246, 156255, 156264, 156271, 156279, 156286, 156293, - 156302, 156311, 156318, 156326, 156333, 156340, 156349, 156356, 156364, - 156370, 156379, 156387, 156396, 156403, 156413, 156424, 156432, 156440, - 156449, 156457, 156465, 156474, 156482, 156492, 156501, 156509, 156517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156526, 156534, - 156542, 156550, 156558, 156567, 156576, 156585, 156594, 156603, 156612, - 156621, 0, 0, 0, 0, 156630, 156638, 156646, 156654, 156662, 156669, - 156676, 156683, 156690, 156698, 156706, 156714, 156722, 156732, 156742, - 156752, 156762, 156771, 156780, 156789, 156798, 156807, 156816, 156825, - 156834, 156842, 156850, 156858, 156866, 156874, 156882, 156890, 156898, - 156908, 156918, 156928, 156938, 156942, 156946, 156950, 156954, 156957, - 156960, 156963, 156966, 156970, 156974, 156978, 156982, 156987, 156992, - 156997, 157002, 157005, 157008, 157011, 0, 0, 0, 0, 0, 0, 0, 0, 157014, - 157017, 157020, 157023, 157026, 157031, 157036, 157042, 157048, 157052, - 0, 0, 0, 0, 0, 0, 157056, 157062, 157068, 157074, 157080, 157088, 157096, - 157105, 157114, 157119, 157124, 157129, 157134, 157141, 157148, 157156, - 157164, 157171, 157178, 157185, 157192, 157201, 157210, 157220, 157230, - 157236, 157242, 157248, 157254, 157262, 157270, 157279, 157288, 157296, - 157304, 157312, 157320, 157330, 157340, 157351, 0, 0, 0, 0, 0, 0, 0, 0, - 157362, 157367, 157372, 157377, 157382, 157391, 157400, 157409, 157418, - 157425, 157432, 157439, 157446, 157453, 157462, 157471, 157480, 157485, - 157492, 157499, 157506, 157511, 157516, 157521, 157526, 157533, 157540, - 157547, 157554, 157561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157570, 157574, 157578, 157583, 157587, - 157591, 157596, 157600, 157604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156199, + 156201, 156203, 156207, 156212, 156217, 156219, 156225, 156230, 156232, + 156238, 156242, 156244, 156248, 156254, 156260, 156266, 156271, 156276, + 156283, 156290, 156297, 156302, 156309, 156316, 156323, 156327, 156334, + 156343, 156352, 156359, 156364, 156368, 156372, 156374, 156377, 156380, + 156387, 156394, 156404, 156409, 156414, 156419, 156424, 156426, 156432, + 156436, 156438, 156440, 156442, 156444, 156448, 156452, 156456, 156458, + 156462, 156464, 156468, 156470, 156472, 156474, 156476, 156481, 156486, + 156488, 156494, 156498, 156502, 156510, 156512, 156514, 156516, 156518, + 156520, 156522, 156524, 156526, 156528, 156530, 156534, 156538, 156540, + 156542, 156544, 156546, 156548, 156553, 156559, 156563, 156567, 156571, + 156575, 156580, 156584, 156586, 156588, 156592, 156598, 156600, 156602, + 156604, 156608, 156617, 156623, 156627, 156631, 156633, 156635, 156638, + 156640, 156642, 156644, 156648, 156650, 156654, 156659, 156661, 156666, + 156672, 156679, 156683, 156687, 156691, 156695, 156701, 156705, 156713, + 156720, 156722, 156724, 156728, 156732, 156734, 156738, 156742, 156744, + 156748, 156750, 156754, 156758, 156762, 156766, 156770, 156774, 156778, + 156782, 156788, 156792, 156796, 156807, 156812, 156816, 156820, 156826, + 156830, 156834, 156838, 156845, 156852, 156856, 156860, 156864, 156868, + 156872, 156879, 156881, 156885, 156887, 156889, 156893, 156897, 156901, + 156903, 156907, 156911, 156915, 156919, 156923, 156925, 156929, 156931, + 156937, 156940, 156945, 156947, 156949, 156952, 156954, 156956, 156959, + 156966, 156973, 156980, 156985, 156989, 156991, 156993, 156995, 156999, + 157001, 157005, 157009, 157013, 157015, 157019, 157021, 157025, 157029, + 157036, 157038, 157047, 157056, 157065, 157071, 157073, 157078, 157082, + 157086, 157088, 157094, 157098, 157100, 157104, 157108, 157110, 157114, + 157119, 157123, 157129, 157135, 157137, 157139, 157145, 157147, 157151, + 157155, 157157, 157161, 157163, 157167, 157171, 157175, 157178, 157181, + 157186, 157191, 157193, 157196, 157198, 157205, 157209, 157211, 157218, + 157225, 157232, 157239, 157246, 157248, 157250, 157252, 157256, 157258, + 157260, 157262, 157264, 157266, 157268, 157270, 157272, 157274, 157276, + 157278, 157280, 157282, 157284, 157286, 157288, 157290, 157292, 157294, + 157296, 157298, 157300, 157304, 157306, 157308, 157310, 157314, 157316, + 157320, 157322, 157324, 157328, 157332, 157338, 157340, 157342, 157344, + 157346, 157350, 157354, 157356, 157360, 157364, 157368, 157372, 157376, + 157380, 157384, 157388, 157392, 157396, 157400, 157404, 157408, 157412, + 157416, 157420, 157424, 157428, 157430, 157432, 157434, 157436, 157438, + 157440, 157442, 157450, 157458, 157466, 157474, 157479, 157484, 157489, + 157493, 157497, 157502, 157506, 157508, 157512, 157514, 157516, 157518, + 157520, 157522, 157524, 157526, 157530, 157532, 157534, 157536, 157540, + 157544, 157548, 157552, 157556, 157558, 157564, 157570, 157572, 157574, + 157576, 157578, 157580, 157589, 157596, 157603, 157607, 157614, 157619, + 157626, 157635, 157640, 157644, 157648, 157650, 157654, 157656, 157660, + 157664, 157666, 157670, 157674, 157678, 157680, 157682, 157688, 157690, + 157692, 157694, 157698, 157702, 157704, 157708, 157710, 157712, 157715, + 157719, 157721, 157725, 157727, 157729, 157734, 157736, 157740, 157744, + 157747, 157751, 157755, 157759, 157763, 157767, 157771, 157775, 157780, + 157784, 157788, 157797, 157802, 157805, 157807, 157810, 157813, 157818, + 157820, 157823, 157828, 157832, 157835, 157839, 157843, 157846, 157851, + 157855, 157859, 157863, 157867, 157873, 157879, 157885, 157891, 157896, + 157906, 157908, 157912, 157914, 157916, 157920, 157924, 157926, 157930, + 157935, 157940, 157946, 157948, 157952, 157956, 157962, 157968, 157972, + 157974, 157976, 157980, 157982, 157986, 157990, 157994, 157996, 157998, + 158005, 158009, 158012, 158016, 158020, 158024, 158026, 158030, 158032, + 158034, 158038, 158040, 158044, 158048, 158054, 158058, 158062, 158066, + 158068, 158071, 158075, 158081, 158090, 158099, 158107, 158115, 158117, + 158121, 158123, 158127, 158138, 158142, 158148, 158154, 158159, 158161, + 158166, 158170, 158172, 158174, 158176, 158180, 158184, 158188, 158193, + 158203, 158218, 158228, 158238, 158242, 158246, 158252, 158254, 158262, + 158270, 158272, 158276, 158282, 158288, 158295, 158302, 158304, 158306, + 158309, 158311, 158317, 158319, 158322, 158326, 158332, 158338, 158349, + 158355, 158361, 158369, 158373, 158381, 158389, 158395, 158401, 158408, + 158410, 158414, 158416, 158418, 158423, 158425, 158427, 158429, 158431, + 158435, 158445, 158451, 158455, 158459, 158463, 158469, 158475, 158481, + 158487, 158492, 158497, 158503, 158509, 158516, 158523, 158531, 158539, + 158544, 158552, 158556, 158565, 158574, 158580, 158584, 158588, 158592, + 158595, 158600, 158602, 158604, 158606, 158613, 158618, 158625, 158632, + 158639, 158647, 158655, 158663, 158671, 158679, 158687, 158695, 158703, + 158711, 158717, 158723, 158729, 158735, 158741, 158747, 158753, 158759, + 158765, 158771, 158777, 158783, 158786, 158795, 158804, 158806, 158813, + 158817, 158819, 158821, 158825, 158831, 158835, 158837, 158847, 158853, + 158857, 158859, 158863, 158865, 158869, 158876, 158883, 158890, 158895, + 158900, 158909, 158915, 158920, 158924, 158929, 158933, 158940, 158944, + 158947, 158952, 158959, 158966, 158971, 158976, 158981, 158988, 158997, + 159008, 159014, 159020, 159026, 159036, 159051, 159060, 159068, 159076, + 159084, 159092, 159100, 159108, 159116, 159124, 159132, 159140, 159148, + 159156, 159159, 159163, 159168, 159173, 159175, 159179, 159188, 159197, + 159205, 159209, 159213, 159218, 159223, 159228, 159230, 159235, 159239, + 159241, 159245, 159249, 159255, 159260, 159268, 159273, 159278, 159283, + 159290, 159293, 159295, 159298, 159303, 159309, 159313, 159317, 159323, + 159329, 159331, 159335, 159339, 159343, 159347, 159351, 159353, 159355, + 159357, 159359, 159365, 159371, 159375, 159377, 159379, 159381, 159390, + 159394, 159401, 159408, 159410, 159413, 159417, 159423, 159427, 159431, + 159433, 159441, 159445, 159449, 159454, 159459, 159464, 159469, 159474, + 159479, 159484, 159489, 159494, 159499, 159503, 159509, 159513, 159519, + 159524, 159531, 159537, 159545, 159549, 159556, 159560, 159564, 159568, + 159573, 159578, 159580, 159584, 159593, 159601, 159609, 159622, 159635, + 159648, 159655, 159662, 159666, 159675, 159683, 159687, 159696, 159703, + 159707, 159711, 159715, 159719, 159726, 159730, 159734, 159738, 159742, + 159749, 159758, 159767, 159774, 159786, 159798, 159802, 159806, 159810, + 159814, 159818, 159822, 159830, 159838, 159846, 159850, 159854, 159858, + 159862, 159866, 159870, 159876, 159882, 159886, 159897, 159905, 159909, + 159913, 159917, 159921, 159927, 159934, 159945, 159955, 159965, 159976, + 159985, 159996, 160002, 160008, 160014, 160020, 160026, 160030, 160037, + 160046, 160053, 160059, 160063, 160067, 160071, 160080, 160092, 160096, + 160103, 160110, 160117, 160125, 160132, 160140, 160149, 160159, 160168, + 160178, 160187, 160197, 160206, 160216, 160226, 160237, 160247, 160258, + 160265, 160273, 160280, 160288, 160296, 160305, 160313, 160322, 160329, + 160341, 160348, 160360, 160363, 160366, 160369, 160372, 160378, 160385, + 160391, 160398, 160403, 160409, 160421, 160431, 160442, 160447, 160452, + 160458, 160463, 160470, 160474, 160480, 160482, 160484, 160488, 160492, + 160496, 160505, 160507, 160509, 160512, 160514, 160516, 160520, 160522, + 160526, 160528, 160532, 160534, 160536, 160540, 160544, 160550, 160552, + 160556, 160558, 160562, 160566, 160570, 160574, 160576, 160578, 160582, + 160586, 160590, 160594, 160596, 160598, 160600, 160606, 160611, 160614, + 160622, 160630, 160632, 160637, 160640, 160645, 160656, 160663, 160668, + 160673, 160675, 160679, 160681, 160685, 160687, 160691, 160695, 160698, + 160701, 160703, 160706, 160708, 160712, 160714, 160716, 160718, 160722, + 160724, 160728, 160731, 160738, 160741, 160746, 160749, 160752, 160757, + 160761, 160765, 160769, 160771, 160776, 160779, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 160783, 160788, 160790, 160794, 160796, 160800, 160804, + 160810, 160814, 160819, 160822, 160826, 160830, 0, 0, 0, 160834, 160836, + 160842, 160846, 160850, 160852, 160856, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 160858, 160863, 160868, 160873, 160878, 160883, 160888, 160895, 160902, + 160909, 160916, 160921, 160926, 160931, 160936, 160943, 160949, 160956, + 160963, 160970, 160975, 160980, 160985, 160990, 160995, 161002, 161009, + 161014, 161019, 161026, 161033, 161041, 161049, 161056, 161063, 161071, + 161079, 161087, 161094, 161104, 161115, 161120, 161127, 161134, 161141, + 161149, 161157, 161168, 161176, 161184, 161192, 161197, 161202, 161207, + 161212, 161217, 161222, 161227, 161232, 161237, 161242, 161247, 161252, + 161259, 161264, 161269, 161276, 161281, 161286, 161291, 161296, 161301, + 161306, 161311, 161316, 161321, 161326, 161331, 161336, 161343, 161351, + 161356, 161361, 161368, 161373, 161378, 161383, 161390, 161395, 161402, + 161407, 161414, 161419, 161428, 161437, 161442, 161447, 161452, 161457, + 161462, 161467, 161472, 161477, 161482, 161487, 161492, 161497, 161502, + 161510, 161518, 161523, 161528, 161533, 161538, 161543, 161549, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 161555, 161563, 161571, 161579, 161587, + 161593, 161599, 161603, 161607, 161613, 161619, 161628, 161632, 161637, + 161643, 161647, 161652, 161656, 161660, 161666, 161672, 161682, 161691, + 161694, 161699, 161705, 161711, 161722, 161732, 161736, 161741, 161747, + 161753, 161762, 161767, 161771, 161776, 161780, 161786, 161792, 161798, + 161802, 161805, 161809, 161812, 161815, 161820, 161825, 161832, 161840, + 161847, 161854, 161863, 161872, 161879, 161887, 161894, 161901, 161910, + 161919, 161926, 161934, 161941, 161948, 161957, 161964, 161972, 161978, + 161987, 161995, 162004, 162011, 162021, 162032, 162040, 162048, 162057, + 162065, 162073, 162082, 162090, 162100, 162109, 162117, 162125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162134, 162142, 162150, + 162158, 162166, 162175, 162184, 162193, 162202, 162211, 162220, 162229, + 0, 0, 0, 0, 162238, 162246, 162254, 162262, 162270, 162277, 162284, + 162291, 162298, 162306, 162314, 162322, 162330, 162340, 162350, 162360, + 162370, 162379, 162388, 162397, 162406, 162415, 162424, 162433, 162442, + 162450, 162458, 162466, 162474, 162482, 162490, 162498, 162506, 162516, + 162526, 162536, 162546, 162550, 162554, 162558, 162562, 162565, 162568, + 162571, 162574, 162578, 162582, 162586, 162590, 162595, 162600, 162605, + 162610, 162613, 162616, 162619, 0, 0, 0, 0, 0, 0, 0, 0, 162622, 162625, + 162628, 162631, 162634, 162639, 162644, 162650, 162656, 162660, 0, 0, 0, + 0, 0, 0, 162664, 162670, 162676, 162682, 162688, 162696, 162704, 162713, + 162722, 162727, 162732, 162737, 162742, 162749, 162756, 162764, 162772, + 162779, 162786, 162793, 162800, 162809, 162818, 162828, 162838, 162844, + 162850, 162856, 162862, 162870, 162878, 162887, 162896, 162904, 162912, + 162920, 162928, 162938, 162948, 162959, 0, 0, 0, 0, 0, 0, 0, 0, 162970, + 162975, 162980, 162985, 162990, 162999, 163008, 163017, 163026, 163033, + 163040, 163047, 163054, 163061, 163070, 163079, 163088, 163093, 163100, + 163107, 163114, 163119, 163124, 163129, 163134, 163141, 163148, 163155, + 163162, 163169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157610, 157612, - 157616, 157618, 157620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157624, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 163178, 163182, 163186, 163191, 163195, 163199, + 163204, 163208, 163212, 163218, 163224, 163231, 163235, 163239, 163241, + 0, 163251, 163258, 163262, 163266, 163276, 163280, 163284, 163288, 0, 0, + 0, 0, 0, 0, 0, 0, 163292, 0, 0, 163296, 163298, 163300, 163306, 163310, + 163312, 163318, 163320, 163322, 163326, 163328, 163332, 0, 163334, + 163338, 163343, 163347, 163351, 163353, 163357, 163359, 163365, 163371, + 163377, 163381, 0, 0, 0, 0, 163387, 163389, 163391, 163393, 163395, + 163397, 163399, 163403, 163407, 163414, 163418, 163420, 163425, 163427, + 163429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163431, 163433, 163437, 163439, 163441, + 163445, 163447, 163449, 163451, 163453, 163455, 163459, 163461, 163463, + 163465, 163467, 163469, 163471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 163473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157628, 157632, 157636, 157640, - 157644, 157648, 157652, 157656, 157660, 157664, 157668, 157672, 157676, - 157680, 157684, 157688, 157692, 157696, 157700, 157704, 157708, 157712, - 157716, 157720, 157724, 157728, 157732, 157736, 157740, 157744, 157748, - 157752, 157756, 157760, 157764, 157768, 157772, 157776, 157780, 157784, - 157788, 157792, 157796, 157800, 157804, 157808, 157812, 157816, 157820, - 157824, 157828, 157832, 157836, 157840, 157844, 157848, 157852, 157856, - 157860, 157864, 157868, 157872, 157876, 157880, 157884, 157888, 157892, - 157896, 157900, 157904, 157908, 157912, 157916, 157920, 157924, 157928, - 157932, 157936, 157940, 157944, 157948, 157952, 157956, 157960, 157964, - 157968, 157972, 157976, 157980, 157984, 157988, 157992, 157996, 158000, - 158004, 158008, 158012, 158016, 158020, 158024, 158028, 158032, 158036, - 158040, 158044, 158048, 158052, 158056, 158060, 158064, 158068, 158072, - 158076, 158080, 158084, 158088, 158092, 158096, 158100, 158104, 158108, - 158112, 158116, 158120, 158124, 158128, 158132, 158136, 158140, 158144, - 158148, 158152, 158156, 158160, 158164, 158168, 158172, 158176, 158180, - 158184, 158188, 158192, 158196, 158200, 158204, 158208, 158212, 158216, - 158220, 158224, 158228, 158232, 158236, 158240, 158244, 158248, 158252, - 158256, 158260, 158264, 158268, 158272, 158276, 158280, 158284, 158288, - 158292, 158296, 158300, 158304, 158308, 158312, 158316, 158320, 158324, - 158328, 158332, 158336, 158340, 158344, 158348, 158352, 158356, 158360, - 158364, 158368, 158372, 158376, 158380, 158384, 158388, 158392, 158396, - 158400, 158404, 158408, 158412, 158416, 158420, 158424, 158428, 158432, - 158436, 158440, 158444, 158448, 158452, 158456, 158460, 158464, 158468, - 158472, 158476, 158480, 158484, 158488, 158492, 158496, 158500, 158504, - 158508, 158512, 158516, 158520, 158524, 158528, 158532, 158536, 158540, - 158544, 158548, 158552, 158556, 158560, 158564, 158568, 158572, 158576, - 158580, 158584, 158588, 158592, 158596, 158600, 158604, 158608, 158612, - 158616, 158620, 158624, 158628, 158632, 158636, 158640, 158644, 158648, - 158652, 158656, 158660, 158664, 158668, 158672, 158676, 158680, 158684, - 158688, 158692, 158696, 158700, 158704, 158708, 158712, 158716, 158720, - 158724, 158728, 158732, 158736, 158740, 158744, 158748, 158752, 158756, - 158760, 158764, 158768, 158772, 158776, 158780, 158784, 158788, 158792, - 158796, 158800, 158804, 158808, 158812, 158816, 158820, 158824, 158828, - 158832, 158836, 158840, 158844, 158848, 158852, 158856, 158860, 158864, - 158868, 158872, 158876, 158880, 158884, 158888, 158892, 158896, 158900, - 158904, 158908, 158912, 158916, 158920, 158924, 158928, 158932, 158936, - 158940, 158944, 158948, 158952, 158956, 158960, 158964, 158968, 158972, - 158976, 158980, 158984, 158988, 158992, 158996, 159000, 159004, 159008, - 159012, 159016, 159020, 159024, 159028, 159032, 159036, 159040, 159044, - 159048, 159052, 159056, 159060, 159064, 159068, 159072, 159076, 159080, - 159084, 159088, 159092, 159096, 159100, 159104, 159108, 159112, 159116, - 159120, 159124, 159128, 159132, 159136, 159140, 159144, 159148, 159152, - 159156, 159160, 159164, 159168, 159172, 159176, 159180, 159184, 159188, - 159192, 159196, 159200, 159204, 159208, 159212, 159216, 159220, 159224, - 159228, 159232, 159236, 159240, 159244, 159248, 159252, 159256, 159260, - 159264, 159268, 159272, 159276, 159280, 159284, 159288, 159292, 159296, - 159300, 159304, 159308, 159312, 159316, 159320, 159324, 159328, 159332, - 159336, 159340, 159344, 159348, 159352, 159356, 159360, 159364, 159368, - 159372, 159376, 159380, 159384, 159388, 159392, 159396, 159400, 159404, - 159408, 159412, 159416, 159420, 159424, 159428, 159432, 159436, 159440, - 159444, 159448, 159452, 159456, 159460, 159464, 159468, 159472, 159476, - 159480, 159484, 159488, 159492, 159496, 159500, 159504, 159508, 159512, - 159516, 159520, 159524, 159528, 159532, 159536, 159540, 159544, 159548, - 159552, 159556, 159560, 159564, 159568, 159572, 159576, 159580, 159584, - 159588, 159592, 159596, 159600, 159604, 159608, 159612, 159616, 159620, - 159624, 159628, 159632, 159636, 159640, 159644, 159648, 159652, 159656, - 159660, 159664, 159668, 159672, 159676, 159680, 159684, 159688, 159692, - 159696, 159700, 159704, 159708, 159712, 159716, 159720, 159724, 159728, - 159732, 159736, 159740, 159744, 159748, 159752, 159756, 159760, 159764, - 159768, 159772, 159776, 159780, 159784, 159788, 159792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 163477, 163481, 163485, 163489, 163493, 163497, 163501, 163505, + 163509, 163513, 163517, 163521, 163525, 163529, 163533, 163537, 163541, + 163545, 163549, 163553, 163557, 163561, 163565, 163569, 163573, 163577, + 163581, 163585, 163589, 163593, 163597, 163601, 163605, 163609, 163613, + 163617, 163621, 163625, 163629, 163633, 163637, 163641, 163645, 163649, + 163653, 163657, 163661, 163665, 163669, 163673, 163677, 163681, 163685, + 163689, 163693, 163697, 163701, 163705, 163709, 163713, 163717, 163721, + 163725, 163729, 163733, 163737, 163741, 163745, 163749, 163753, 163757, + 163761, 163765, 163769, 163773, 163777, 163781, 163785, 163789, 163793, + 163797, 163801, 163805, 163809, 163813, 163817, 163821, 163825, 163829, + 163833, 163837, 163841, 163845, 163849, 163853, 163857, 163861, 163865, + 163869, 163873, 163877, 163881, 163885, 163889, 163893, 163897, 163901, + 163905, 163909, 163913, 163917, 163921, 163925, 163929, 163933, 163937, + 163941, 163945, 163949, 163953, 163957, 163961, 163965, 163969, 163973, + 163977, 163981, 163985, 163989, 163993, 163997, 164001, 164005, 164009, + 164013, 164017, 164021, 164025, 164029, 164033, 164037, 164041, 164045, + 164049, 164053, 164057, 164061, 164065, 164069, 164073, 164077, 164081, + 164085, 164089, 164093, 164097, 164101, 164105, 164109, 164113, 164117, + 164121, 164125, 164129, 164133, 164137, 164141, 164145, 164149, 164153, + 164157, 164161, 164165, 164169, 164173, 164177, 164181, 164185, 164189, + 164193, 164197, 164201, 164205, 164209, 164213, 164217, 164221, 164225, + 164229, 164233, 164237, 164241, 164245, 164249, 164253, 164257, 164261, + 164265, 164269, 164273, 164277, 164281, 164285, 164289, 164293, 164297, + 164301, 164305, 164309, 164313, 164317, 164321, 164325, 164329, 164333, + 164337, 164341, 164345, 164349, 164353, 164357, 164361, 164365, 164369, + 164373, 164377, 164381, 164385, 164389, 164393, 164397, 164401, 164405, + 164409, 164413, 164417, 164421, 164425, 164429, 164433, 164437, 164441, + 164445, 164449, 164453, 164457, 164461, 164465, 164469, 164473, 164477, + 164481, 164485, 164489, 164493, 164497, 164501, 164505, 164509, 164513, + 164517, 164521, 164525, 164529, 164533, 164537, 164541, 164545, 164549, + 164553, 164557, 164561, 164565, 164569, 164573, 164577, 164581, 164585, + 164589, 164593, 164597, 164601, 164605, 164609, 164613, 164617, 164621, + 164625, 164629, 164633, 164637, 164641, 164645, 164649, 164653, 164657, + 164661, 164665, 164669, 164673, 164677, 164681, 164685, 164689, 164693, + 164697, 164701, 164705, 164709, 164713, 164717, 164721, 164725, 164729, + 164733, 164737, 164741, 164745, 164749, 164753, 164757, 164761, 164765, + 164769, 164773, 164777, 164781, 164785, 164789, 164793, 164797, 164801, + 164805, 164809, 164813, 164817, 164821, 164825, 164829, 164833, 164837, + 164841, 164845, 164849, 164853, 164857, 164861, 164865, 164869, 164873, + 164877, 164881, 164885, 164889, 164893, 164897, 164901, 164905, 164909, + 164913, 164917, 164921, 164925, 164929, 164933, 164937, 164941, 164945, + 164949, 164953, 164957, 164961, 164965, 164969, 164973, 164977, 164981, + 164985, 164989, 164993, 164997, 165001, 165005, 165009, 165013, 165017, + 165021, 165025, 165029, 165033, 165037, 165041, 165045, 165049, 165053, + 165057, 165061, 165065, 165069, 165073, 165077, 165081, 165085, 165089, + 165093, 165097, 165101, 165105, 165109, 165113, 165117, 165121, 165125, + 165129, 165133, 165137, 165141, 165145, 165149, 165153, 165157, 165161, + 165165, 165169, 165173, 165177, 165181, 165185, 165189, 165193, 165197, + 165201, 165205, 165209, 165213, 165217, 165221, 165225, 165229, 165233, + 165237, 165241, 165245, 165249, 165253, 165257, 165261, 165265, 165269, + 165273, 165277, 165281, 165285, 165289, 165293, 165297, 165301, 165305, + 165309, 165313, 165317, 165321, 165325, 165329, 165333, 165337, 165341, + 165345, 165349, 165353, 165357, 165361, 165365, 165369, 165373, 165377, + 165381, 165385, 165389, 165393, 165397, 165401, 165405, 165409, 165413, + 165417, 165421, 165425, 165429, 165433, 165437, 165441, 165445, 165449, + 165453, 165457, 165461, 165465, 165469, 165473, 165477, 165481, 165485, + 165489, 165493, 165497, 165501, 165505, 165509, 165513, 165517, 165521, + 165525, 165529, 165533, 165537, 165541, 165545, 165549, 165553, 165557, + 165561, 165565, 165569, 165573, 165577, 165581, 165585, 165589, 165593, + 165597, 165601, 165605, 165609, 165613, 165617, 165621, 165625, 165629, + 165633, 165637, 165641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -20078,3186 +21353,3279 @@ static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 159796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159800, 159803, 159807, 159811, - 159814, 159818, 159822, 159825, 159828, 159832, 159836, 159839, 159842, - 159845, 159848, 159853, 159856, 159860, 159863, 159866, 159869, 159872, - 159875, 159878, 159882, 159885, 159889, 159892, 159895, 159899, 159903, - 159907, 159911, 159916, 159921, 159927, 159933, 159939, 159944, 159950, - 159956, 159962, 159967, 159973, 159979, 159984, 159990, 159996, 160001, - 160007, 160013, 160018, 160023, 160029, 160034, 160040, 160046, 160052, - 160058, 160064, 160068, 160073, 160077, 160082, 160086, 160091, 160096, - 160102, 160108, 160114, 160119, 160125, 160131, 160137, 160142, 160148, - 160154, 160159, 160165, 160171, 160176, 160182, 160188, 160193, 160198, - 160204, 160209, 160215, 160221, 160227, 160233, 160239, 160244, 160248, - 160253, 160256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 165649, 165652, 165656, 165660, 165663, 165667, 165671, 165674, + 165677, 165681, 165685, 165688, 165691, 165694, 165697, 165702, 165705, + 165709, 165712, 165715, 165718, 165721, 165724, 165727, 165731, 165734, + 165738, 165741, 165744, 165748, 165752, 165756, 165760, 165765, 165770, + 165776, 165782, 165788, 165793, 165799, 165805, 165811, 165816, 165822, + 165828, 165833, 165839, 165845, 165850, 165856, 165862, 165867, 165873, + 165879, 165884, 165890, 165896, 165902, 165908, 165914, 165918, 165923, + 165927, 165932, 165936, 165941, 165946, 165952, 165958, 165964, 165969, + 165975, 165981, 165987, 165992, 165998, 166004, 166009, 166015, 166021, + 166026, 166032, 166038, 166043, 166049, 166055, 166060, 166066, 166072, + 166078, 166084, 166090, 166095, 166099, 166104, 166107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160260, 160263, 160266, 160269, - 160272, 160275, 160278, 160281, 160284, 160287, 160290, 160293, 160296, - 160299, 160302, 160305, 160308, 160311, 160314, 160317, 160320, 160323, - 160326, 160329, 160332, 160335, 160338, 160341, 160344, 160347, 160350, - 160353, 160356, 160359, 160362, 160365, 160368, 160371, 160374, 160377, - 160380, 160383, 160386, 160389, 160392, 160395, 160398, 160401, 160404, - 160407, 160410, 160413, 160416, 160419, 160422, 160425, 160428, 160431, - 160434, 160437, 160440, 160443, 160446, 160449, 160452, 160455, 160458, - 160461, 160464, 160467, 160470, 160473, 160476, 160479, 160482, 160485, - 160488, 160491, 160494, 160497, 160500, 160503, 160506, 160509, 160512, - 160515, 160518, 160521, 160524, 160527, 160530, 160533, 160536, 160539, - 160542, 160545, 160548, 160551, 160554, 160557, 160560, 160563, 160566, - 160569, 160572, 160575, 160578, 160581, 160584, 160587, 160590, 160593, - 160596, 160599, 160602, 160605, 160608, 160611, 160614, 160617, 160620, - 160623, 160626, 160629, 160632, 160635, 160638, 160641, 160644, 160647, - 160650, 160653, 160656, 160659, 160662, 160665, 160668, 160671, 160674, - 160677, 160680, 160683, 160686, 160689, 160692, 160695, 160698, 160701, - 160704, 160707, 160710, 160713, 160716, 160719, 160722, 160725, 160728, - 160731, 160734, 160737, 160740, 160743, 160746, 160749, 160752, 160755, - 160758, 160761, 160764, 160767, 160770, 160773, 160776, 160779, 160782, - 160785, 160788, 160791, 160794, 160797, 160800, 160803, 160806, 160809, - 160812, 160815, 160818, 160821, 160824, 160827, 160830, 160833, 160836, - 160839, 160842, 160845, 160848, 160851, 160854, 160857, 160860, 160863, - 160866, 160869, 160872, 160875, 160878, 160881, 160884, 160887, 160890, - 160893, 160896, 160899, 160902, 160905, 160908, 160911, 160914, 160917, - 160920, 160923, 160926, 160929, 160932, 160935, 160938, 160941, 160944, - 160947, 160950, 160953, 160956, 160959, 160962, 160965, 160968, 160971, - 160974, 160977, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160980, - 160982, 160984, 160989, 160991, 160996, 160998, 161003, 161005, 161010, - 161012, 161014, 161016, 161018, 161020, 161022, 161024, 161026, 161028, - 161031, 161035, 161037, 161039, 161043, 161047, 161052, 161054, 161056, - 161058, 161062, 161065, 161067, 161071, 161073, 161077, 161079, 161083, - 161086, 161088, 161092, 161096, 161098, 161104, 161106, 161111, 161113, - 161118, 161120, 161125, 161127, 161132, 161134, 161137, 161139, 161143, - 161145, 161152, 161154, 161156, 161158, 161163, 161165, 161167, 161169, - 161171, 161173, 161178, 161182, 161184, 161189, 161193, 161195, 161200, - 161204, 161206, 161211, 161215, 161217, 161219, 161221, 161223, 161227, - 161229, 161234, 161236, 161242, 161244, 161250, 161252, 161254, 161256, - 161260, 161262, 161269, 161271, 161278, 161280, 161285, 161291, 161293, - 161299, 161306, 161308, 161314, 161319, 161321, 161327, 161333, 161335, - 161341, 161347, 161349, 161355, 161359, 161361, 161366, 161368, 161370, - 161375, 161377, 161379, 161385, 161387, 161392, 161396, 161398, 161403, - 161407, 161409, 161415, 161417, 161421, 161423, 161427, 161429, 161436, - 161443, 161445, 161452, 161459, 161461, 161466, 161468, 161475, 161477, - 161482, 161484, 161490, 161492, 161496, 161498, 161504, 161506, 161510, - 161512, 161518, 161520, 161522, 161524, 161529, 161534, 161536, 161538, - 161548, 161552, 161559, 161566, 161571, 161576, 161588, 161590, 161592, - 161594, 161596, 161598, 161600, 161602, 161604, 161606, 161608, 161610, - 161612, 161614, 161616, 161618, 161620, 161622, 161624, 161626, 161628, - 161630, 161636, 161643, 161648, 161656, 161664, 161669, 161680, 161682, - 161684, 161686, 161688, 161690, 161692, 161694, 161696, 161698, 161700, - 161702, 161704, 161706, 161708, 161710, 161712, 161717, 161719, 161721, - 161727, 161739, 161750, 161752, 161754, 161756, 161758, 161760, 161762, - 161764, 161766, 161768, 161770, 161772, 161774, 161776, 161778, 161780, - 161782, 161784, 161786, 161788, 161790, 161792, 161794, 161796, 161798, - 161800, 161802, 161804, 161806, 161808, 161810, 161812, 161814, 161816, - 161818, 161820, 161822, 161824, 161826, 161828, 161830, 161832, 161834, - 161836, 161838, 161840, 161842, 161844, 161846, 161848, 161850, 161852, - 161854, 161856, 161858, 161860, 161862, 161864, 161866, 161868, 161870, - 161872, 161874, 161876, 161878, 161880, 161882, 161884, 161886, 161888, - 161890, 161892, 161894, 161896, 161898, 161900, 161902, 161904, 161906, - 161908, 161910, 161912, 161914, 161916, 161918, 161920, 161922, 161924, - 161926, 161928, 161930, 161932, 161934, 161936, 161938, 161940, 161942, - 161944, 161946, 161948, 161950, 161952, 161954, 161956, 161958, 161960, - 161962, 161964, 161966, 161968, 161970, 161972, 161974, 161976, 161978, - 161980, 161982, 161984, 161986, 161988, 161990, 161992, 161994, 161996, - 161998, 162000, 162002, 162004, 162006, 162008, 162010, 162012, 162014, - 162016, 162018, 162020, 162022, 162024, 162026, 162028, 162030, 162032, - 162034, 162036, 162038, 162040, 162042, 162044, 162046, 162048, 162050, - 162052, 162054, 162056, 162058, 162060, 162062, 162064, 162066, 162068, - 162070, 162072, 162074, 162076, 162078, 162080, 162082, 162084, 162086, - 162088, 162090, 162092, 162094, 162096, 162098, 162100, 162102, 162104, - 162106, 162108, 162110, 162112, 162114, 162116, 162118, 162120, 162122, - 162124, 162126, 162128, 162130, 162132, 162134, 162136, 162138, 162140, - 162142, 162144, 162146, 162148, 162150, 162152, 162154, 162156, 162158, - 162160, 162162, 162164, 162166, 162168, 162170, 162172, 162174, 162176, - 162178, 162180, 162182, 162184, 162186, 162188, 162190, 162192, 162194, - 162196, 162198, 162200, 162202, 162204, 162206, 162208, 162210, 162212, - 162214, 162216, 162218, 162220, 162222, 162224, 162226, 162228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 162230, 162240, 162250, 162259, 162268, 162281, 162294, 162306, - 162318, 162328, 162338, 162348, 162358, 162369, 162380, 162390, 162399, - 162408, 162417, 162430, 162443, 162455, 162467, 162477, 162487, 162497, - 162507, 162516, 162525, 162535, 162545, 162554, 162563, 162573, 162583, - 162592, 162601, 162611, 162621, 162632, 162643, 162653, 162666, 162677, - 162691, 162699, 162710, 162718, 162726, 162734, 162742, 162750, 162758, - 162767, 162776, 162786, 162796, 162805, 162814, 162824, 162834, 162842, - 162850, 162857, 162867, 162876, 162884, 162891, 162901, 162910, 162921, - 162932, 162944, 162955, 162965, 162976, 162986, 162997, 163005, 163009, - 163013, 163017, 163021, 163025, 163029, 163033, 163037, 163041, 163045, - 163049, 163053, 163056, 163059, 163063, 163067, 163071, 163075, 163079, - 163083, 163087, 163091, 163094, 163098, 163102, 163106, 163110, 163114, - 163118, 163122, 163126, 163130, 163134, 163138, 163142, 163146, 163150, - 163154, 163158, 163162, 163166, 163170, 163174, 163178, 163182, 163186, - 163190, 163194, 163198, 163202, 163206, 163210, 163214, 163218, 163222, - 163226, 163230, 163234, 163238, 163242, 163246, 163250, 163254, 163258, - 163262, 163266, 163270, 163274, 163278, 163282, 163286, 163290, 163294, - 163298, 163302, 163306, 163310, 163314, 163318, 163322, 163326, 163330, - 163334, 163338, 163342, 163346, 163350, 163354, 163358, 163362, 163366, - 163370, 163374, 163378, 163382, 163386, 163390, 163394, 163398, 163401, - 163405, 163409, 163413, 163417, 163421, 163425, 163429, 163433, 163437, - 163441, 163445, 163449, 163453, 163457, 163461, 163465, 163469, 163473, - 163477, 163481, 163485, 163489, 163493, 163497, 163501, 163505, 163509, - 163513, 163517, 163521, 163525, 163529, 163533, 163537, 163541, 163545, - 163549, 163553, 163557, 163561, 163565, 163569, 163573, 163577, 163581, - 163585, 163589, 163593, 163597, 163601, 163605, 163609, 163613, 163617, - 163621, 163625, 163629, 163633, 163637, 163641, 163645, 163649, 163653, - 163657, 163661, 163665, 163669, 163673, 163677, 163681, 163685, 163689, - 163693, 163697, 163701, 163705, 163709, 163713, 163717, 163721, 163725, - 163729, 163733, 163737, 163741, 163745, 163749, 163753, 163757, 163761, - 163765, 163769, 163773, 163777, 163781, 163785, 163789, 163793, 163797, - 163801, 163805, 163809, 163813, 163817, 163821, 163825, 163829, 163833, - 163837, 163841, 163845, 163849, 163853, 163857, 163861, 163865, 163869, - 163873, 163877, 163881, 163885, 163889, 163893, 163897, 163901, 163905, - 163909, 163913, 163917, 163921, 163925, 163929, 163933, 163937, 163941, - 163945, 163949, 163953, 163957, 163961, 163965, 163969, 163973, 163977, - 163981, 163985, 163989, 163993, 163997, 164001, 164005, 164009, 164013, - 164017, 164021, 164025, 164029, 164033, 164037, 164041, 164045, 164049, - 164053, 164057, 164061, 164065, 164069, 164073, 164077, 164081, 164085, - 164089, 164093, 164097, 164101, 164105, 164109, 164113, 164117, 164121, - 164125, 164129, 164133, 164137, 164141, 164145, 164149, 164153, 164157, - 164161, 164165, 164170, 164175, 164180, 164184, 164190, 164197, 164204, - 164211, 164218, 164225, 164232, 164239, 164246, 164253, 164260, 164267, - 164274, 164281, 164288, 164295, 164302, 164308, 164315, 164322, 164329, - 164336, 164343, 164350, 164357, 164364, 164371, 164378, 164385, 164392, - 164399, 164406, 164412, 164419, 164426, 164435, 164444, 164453, 164462, - 164467, 164472, 164478, 164484, 164490, 164496, 164502, 164508, 164514, - 164520, 164526, 164532, 164538, 164544, 164549, 164555, 164565, 0, 0, 0, + 0, 0, 166111, 166114, 166117, 166120, 166123, 166126, 166129, 166132, + 166135, 166138, 166141, 166144, 166147, 166150, 166153, 166156, 166159, + 166162, 166165, 166168, 166171, 166174, 166177, 166180, 166183, 166186, + 166189, 166192, 166195, 166198, 166201, 166204, 166207, 166210, 166213, + 166216, 166219, 166222, 166225, 166228, 166231, 166234, 166237, 166240, + 166243, 166246, 166249, 166252, 166255, 166258, 166261, 166264, 166267, + 166270, 166273, 166276, 166279, 166282, 166285, 166288, 166291, 166294, + 166297, 166300, 166303, 166306, 166309, 166312, 166315, 166318, 166321, + 166324, 166327, 166330, 166333, 166336, 166339, 166342, 166345, 166348, + 166351, 166354, 166357, 166360, 166363, 166366, 166369, 166372, 166375, + 166378, 166381, 166384, 166387, 166390, 166393, 166396, 166399, 166402, + 166405, 166408, 166411, 166414, 166417, 166420, 166423, 166426, 166429, + 166432, 166435, 166438, 166441, 166444, 166447, 166450, 166453, 166456, + 166459, 166462, 166465, 166468, 166471, 166474, 166477, 166480, 166483, + 166486, 166489, 166492, 166495, 166498, 166501, 166504, 166507, 166510, + 166513, 166516, 166519, 166522, 166525, 166528, 166531, 166534, 166537, + 166540, 166543, 166546, 166549, 166552, 166555, 166558, 166561, 166564, + 166567, 166570, 166573, 166576, 166579, 166582, 166585, 166588, 166591, + 166594, 166597, 166600, 166603, 166606, 166609, 166612, 166615, 166618, + 166621, 166624, 166627, 166630, 166633, 166636, 166639, 166642, 166645, + 166648, 166651, 166654, 166657, 166660, 166663, 166666, 166669, 166672, + 166675, 166678, 166681, 166684, 166687, 166690, 166693, 166696, 166699, + 166702, 166705, 166708, 166711, 166714, 166717, 166720, 166723, 166726, + 166729, 166732, 166735, 166738, 166741, 166744, 166747, 166750, 166753, + 166756, 166759, 166762, 166765, 166768, 166771, 166774, 166777, 166780, + 166783, 166786, 166789, 166792, 166795, 166798, 166801, 166804, 166807, + 166810, 166813, 166816, 166819, 166822, 166825, 166828, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166831, 166833, 166835, 166840, 166842, + 166847, 166849, 166854, 166856, 166861, 166863, 166865, 166867, 166869, + 166871, 166873, 166875, 166877, 166879, 166882, 166886, 166888, 166890, + 166894, 166898, 166903, 166905, 166907, 166909, 166913, 166916, 166918, + 166922, 166924, 166928, 166930, 166934, 166937, 166939, 166943, 166947, + 166949, 166955, 166957, 166962, 166964, 166969, 166971, 166976, 166978, + 166983, 166985, 166988, 166990, 166994, 166996, 167003, 167005, 167007, + 167009, 167014, 167016, 167018, 167020, 167022, 167024, 167029, 167033, + 167035, 167040, 167044, 167046, 167051, 167055, 167057, 167062, 167066, + 167068, 167070, 167072, 167074, 167078, 167080, 167085, 167087, 167093, + 167095, 167101, 167103, 167105, 167107, 167111, 167113, 167120, 167122, + 167129, 167131, 167136, 167142, 167144, 167150, 167157, 167159, 167165, + 167170, 167172, 167178, 167184, 167186, 167192, 167198, 167200, 167206, + 167210, 167212, 167217, 167219, 167221, 167226, 167228, 167230, 167236, + 167238, 167243, 167247, 167249, 167254, 167258, 167260, 167266, 167268, + 167272, 167274, 167278, 167280, 167287, 167294, 167296, 167303, 167310, + 167312, 167317, 167319, 167326, 167328, 167333, 167335, 167341, 167343, + 167347, 167349, 167355, 167357, 167361, 167363, 167369, 167371, 167373, + 167375, 167380, 167385, 167387, 167389, 167399, 167404, 167411, 167418, + 167423, 167428, 167440, 167442, 167444, 167446, 167448, 167450, 167452, + 167454, 167456, 167458, 167460, 167462, 167464, 167466, 167468, 167470, + 167472, 167474, 167476, 167478, 167480, 167482, 167488, 167495, 167500, + 167508, 167516, 167521, 167532, 167534, 167536, 167538, 167540, 167542, + 167544, 167546, 167548, 167550, 167552, 167554, 167556, 167558, 167560, + 167562, 167564, 167569, 167571, 167573, 167579, 167591, 167602, 167604, + 167606, 167608, 167610, 167612, 167614, 167616, 167618, 167620, 167622, + 167624, 167626, 167628, 167630, 167632, 167634, 167636, 167638, 167640, + 167642, 167644, 167646, 167648, 167650, 167652, 167654, 167656, 167658, + 167660, 167662, 167664, 167666, 167668, 167670, 167672, 167674, 167676, + 167678, 167680, 167682, 167684, 167686, 167688, 167690, 167692, 167694, + 167696, 167698, 167700, 167702, 167704, 167706, 167708, 167710, 167712, + 167714, 167716, 167718, 167720, 167722, 167724, 167726, 167728, 167730, + 167732, 167734, 167736, 167738, 167740, 167742, 167744, 167746, 167748, + 167750, 167752, 167754, 167756, 167758, 167760, 167762, 167764, 167766, + 167768, 167770, 167772, 167774, 167776, 167778, 167780, 167782, 167784, + 167786, 167788, 167790, 167792, 167794, 167796, 167798, 167800, 167802, + 167804, 167806, 167808, 167810, 167812, 167814, 167816, 167818, 167820, + 167822, 167824, 167826, 167828, 167830, 167832, 167834, 167836, 167838, + 167840, 167842, 167844, 167846, 167848, 167850, 167852, 167854, 167856, + 167858, 167860, 167862, 167864, 167866, 167868, 167870, 167872, 167874, + 167876, 167878, 167880, 167882, 167884, 167886, 167888, 167890, 167892, + 167894, 167896, 167898, 167900, 167902, 167904, 167906, 167908, 167910, + 167912, 167914, 167916, 167918, 167920, 167922, 167924, 167926, 167928, + 167930, 167932, 167934, 167936, 167938, 167940, 167942, 167944, 167946, + 167948, 167950, 167952, 167954, 167956, 167958, 167960, 167962, 167964, + 167966, 167968, 167970, 167972, 167974, 167976, 167978, 167980, 167982, + 167984, 167986, 167988, 167990, 167992, 167994, 167996, 167998, 168000, + 168002, 168004, 168006, 168008, 168010, 168012, 168014, 168016, 168018, + 168020, 168022, 168024, 168026, 168028, 168030, 168032, 168034, 168036, + 168038, 168040, 168042, 168044, 168046, 168048, 168050, 168052, 168054, + 168056, 168058, 168060, 168062, 168064, 168066, 168068, 168070, 168072, + 168074, 168076, 168078, 168080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168082, 168092, 168102, + 168111, 168120, 168133, 168146, 168158, 168170, 168180, 168190, 168200, + 168210, 168221, 168232, 168242, 168251, 168260, 168269, 168282, 168295, + 168307, 168319, 168329, 168339, 168349, 168359, 168368, 168377, 168387, + 168397, 168406, 168415, 168425, 168435, 168444, 168453, 168463, 168473, + 168484, 168495, 168505, 168518, 168529, 168543, 168551, 168562, 168570, + 168578, 168586, 168594, 168602, 168610, 168619, 168628, 168638, 168648, + 168657, 168666, 168676, 168686, 168694, 168702, 168709, 168719, 168728, + 168736, 168743, 168753, 168762, 168773, 168784, 168796, 168807, 168817, + 168828, 168838, 168849, 168857, 168861, 168865, 168869, 168873, 168877, + 168881, 168885, 168889, 168893, 168897, 168901, 168905, 168908, 168911, + 168915, 168919, 168923, 168927, 168931, 168935, 168939, 168943, 168947, + 168951, 168955, 168959, 168963, 168967, 168971, 168975, 168979, 168983, + 168987, 168991, 168995, 168999, 169003, 169007, 169011, 169015, 169019, + 169023, 169027, 169031, 169035, 169039, 169043, 169047, 169051, 169055, + 169059, 169063, 169067, 169071, 169075, 169079, 169083, 169087, 169091, + 169095, 169099, 169103, 169107, 169111, 169115, 169119, 169123, 169127, + 169131, 169135, 169139, 169143, 169147, 169151, 169155, 169159, 169163, + 169167, 169171, 169175, 169179, 169183, 169187, 169191, 169195, 169199, + 169203, 169207, 169211, 169215, 169219, 169223, 169227, 169231, 169235, + 169239, 169243, 169247, 169251, 169254, 169258, 169262, 169266, 169270, + 169274, 169278, 169282, 169286, 169290, 169294, 169298, 169302, 169306, + 169310, 169314, 169318, 169322, 169326, 169330, 169334, 169338, 169342, + 169346, 169350, 169354, 169358, 169362, 169366, 169370, 169374, 169378, + 169382, 169386, 169390, 169394, 169398, 169402, 169406, 169410, 169414, + 169418, 169422, 169426, 169430, 169434, 169438, 169442, 169446, 169450, + 169454, 169458, 169462, 169466, 169470, 169474, 169478, 169482, 169486, + 169490, 169494, 169498, 169502, 169506, 169510, 169514, 169518, 169522, + 169526, 169530, 169534, 169538, 169542, 169546, 169550, 169554, 169558, + 169562, 169566, 169570, 169574, 169578, 169582, 169586, 169590, 169594, + 169598, 169602, 169606, 169610, 169614, 169618, 169622, 169626, 169630, + 169634, 169638, 169642, 169646, 169650, 169654, 169658, 169662, 169666, + 169670, 169674, 169678, 169682, 169686, 169690, 169694, 169698, 169702, + 169706, 169710, 169714, 169718, 169722, 169726, 169730, 169734, 169738, + 169742, 169746, 169750, 169754, 169758, 169762, 169766, 169770, 169774, + 169778, 169782, 169786, 169790, 169794, 169798, 169802, 169806, 169810, + 169814, 169818, 169822, 169826, 169830, 169834, 169838, 169842, 169846, + 169850, 169854, 169858, 169862, 169866, 169870, 169874, 169878, 169882, + 169886, 169890, 169894, 169898, 169902, 169906, 169910, 169914, 169918, + 169922, 169926, 169930, 169934, 169938, 169942, 169946, 169950, 169954, + 169958, 169962, 169966, 169970, 169974, 169978, 169982, 169986, 169990, + 169994, 169998, 170002, 170006, 170010, 170014, 170018, 170023, 170028, + 170033, 170037, 170043, 170050, 170057, 170064, 170071, 170078, 170085, + 170092, 170099, 170106, 170113, 170120, 170127, 170134, 170140, 170147, + 170154, 170160, 170167, 170174, 170181, 170188, 170195, 170202, 170209, + 170216, 170223, 170230, 170237, 170244, 170251, 170258, 170264, 170270, + 170277, 170286, 170295, 170304, 170313, 170318, 170323, 170329, 170335, + 170341, 170347, 170353, 170359, 170365, 170371, 170377, 170383, 170389, + 170395, 170400, 170406, 170416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; /* name->code dictionary */ static unsigned int code_hash[] = { - 74224, 4851, 125138, 78156, 78499, 72391, 7929, 66910, 194682, 127766, + 74224, 4851, 125138, 78156, 78499, 72391, 7929, 8999, 194682, 127766, 78500, 66480, 64038, 42833, 74529, 12064, 72385, 596, 983821, 69850, - 13192, 8651, 120217, 126542, 120218, 12995, 64865, 1373, 119856, 113752, + 13192, 8651, 120217, 66789, 120218, 12995, 64865, 1373, 70740, 113752, 5816, 119067, 64810, 4231, 6825, 42897, 4233, 4234, 4232, 120889, 74415, - 120210, 6384, 70351, 78108, 8851, 67698, 128553, 82954, 41601, 8874, - 72392, 7748, 125083, 0, 127026, 127939, 41603, 9784, 0, 9188, 41600, 0, - 120618, 128343, 1457, 3535, 128635, 6381, 0, 0, 65240, 11951, 0, 3404, - 983079, 70487, 72411, 1759, 120853, 41076, 68383, 69972, 119205, 66577, - 94014, 127764, 65859, 0, 7404, 0, 0, 69970, 128387, 65908, 9834, 3055, - 9852, 128360, 65288, 121291, 11398, 0, 92417, 93016, 128380, 127337, 603, - 74398, 43548, 0, 71865, 917824, 3350, 120817, 64318, 194698, 78121, 3390, - 74483, 43265, 92399, 917830, 78573, 118803, 1919, 3400, 120651, 83296, - 11647, 83298, 66446, 64141, 8562, 2121, 64138, 4043, 8712, 64134, 64133, - 11297, 983688, 983152, 11966, 64128, 66286, 93042, 128830, 64132, 10867, - 64130, 64129, 121255, 43374, 9779, 2764, 66002, 10167, 9471, 83458, - 66021, 74509, 0, 5457, 5440, 8857, 93981, 65282, 2843, 5355, 68858, - 983342, 69971, 5194, 11657, 43984, 128292, 113724, 128872, 0, 0, 72393, - 10717, 64570, 5630, 5396, 64143, 10682, 83300, 10602, 800, 42499, 66186, - 0, 0, 64930, 11631, 64146, 64145, 64144, 762, 13172, 75008, 77928, 43929, - 10906, 1353, 6960, 83032, 128779, 5828, 8724, 917806, 8933, 1601, 42244, - 858, 7080, 64109, 64108, 8090, 70455, 72388, 74606, 587, 917907, 82971, - 0, 0, 0, 78214, 2750, 74218, 556, 64158, 64157, 78707, 12213, 83290, - 2760, 83284, 83285, 78708, 83287, 64156, 64155, 42496, 83283, 64151, - 64150, 12679, 10053, 10421, 11093, 64153, 64152, 125016, 0, 4839, 68527, - 0, 1874, 119016, 120091, 6577, 64125, 64124, 64123, 0, 127531, 92534, - 7007, 7590, 65443, 9036, 78847, 64122, 66389, 66609, 121347, 64117, - 64116, 6287, 64114, 2725, 64120, 64119, 43981, 42128, 127842, 1177, - 65601, 12322, 64106, 69640, 92895, 64102, 7859, 1945, 64099, 0, 10453, - 64104, 7188, 7997, 0, 7389, 983161, 8705, 64097, 64096, 9571, 528, - 128545, 44017, 11429, 71347, 0, 983077, 120864, 73841, 83339, 83340, - 9056, 64313, 6188, 74360, 6155, 64068, 1823, 64066, 64065, 64072, 64071, - 63, 7233, 92212, 72414, 41904, 6639, 64064, 983775, 128344, 121388, 1176, - 118959, 127930, 8162, 127019, 128197, 92747, 120519, 42931, 66242, 11415, - 4333, 9855, 64112, 64642, 0, 5388, 0, 121271, 983649, 7714, 66222, 69902, + 100413, 6384, 70351, 78108, 8851, 67698, 128553, 82954, 41601, 8874, + 72392, 7748, 125083, 0, 127026, 127939, 41603, 9784, 0, 9188, 41600, + 983981, 120618, 128343, 1457, 3535, 128635, 6381, 100872, 66797, 65240, + 11951, 0, 3404, 983079, 70487, 72411, 1759, 120853, 41076, 68383, 69972, + 119205, 66577, 94014, 127764, 65859, 125253, 7404, 125248, 128308, 69970, + 120648, 65908, 9834, 3055, 2234, 128360, 65288, 121291, 11398, 0, 92417, + 93016, 128380, 127337, 603, 74398, 43548, 0, 71865, 129366, 3350, 120817, + 64318, 120699, 78121, 3390, 74483, 43265, 92399, 917830, 78573, 118803, + 1919, 3400, 120651, 83296, 11647, 83298, 66446, 64141, 8562, 2121, 64138, + 4043, 8712, 64134, 64133, 11297, 983688, 983152, 11966, 64128, 66286, + 93042, 128830, 64132, 10867, 64130, 64129, 121255, 43374, 9779, 2764, + 66002, 10167, 9471, 83458, 66021, 74509, 983308, 5457, 5440, 8857, 93981, + 65282, 2843, 5355, 68858, 100530, 69971, 5194, 11657, 43984, 128292, + 100529, 128872, 0, 983907, 72393, 10717, 64570, 5630, 5396, 64143, 10682, + 83300, 10602, 800, 42499, 66186, 0, 128146, 64930, 11631, 64146, 64145, + 64144, 762, 13172, 75008, 77928, 43929, 10906, 1353, 6960, 83032, 100423, + 5828, 8724, 122916, 8933, 1601, 42244, 858, 7080, 64109, 64108, 8090, + 70455, 72388, 74606, 587, 194649, 82971, 983808, 129345, 194795, 78214, + 2750, 74218, 556, 64158, 64157, 78707, 12213, 83290, 2760, 83284, 83285, + 77934, 83287, 64156, 64155, 42496, 83283, 64151, 64150, 12679, 10053, + 10421, 11093, 64153, 64152, 125016, 0, 4839, 68527, 125091, 1874, 119016, + 120091, 6577, 64125, 64124, 64123, 120188, 127531, 92534, 7007, 7590, + 65443, 9036, 78847, 64122, 66389, 66609, 121347, 64117, 64116, 6287, + 64114, 2725, 64120, 64119, 43981, 42128, 127842, 1177, 65601, 12322, + 64106, 69640, 92895, 64102, 7859, 1945, 64099, 983482, 10453, 64104, + 7188, 7997, 128600, 7389, 983161, 8705, 64097, 64096, 9571, 528, 128545, + 44017, 11429, 71347, 0, 983077, 120864, 73841, 83339, 83340, 9056, 64313, + 6188, 74360, 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, + 74953, 72414, 41904, 6639, 64064, 983775, 128344, 121388, 1176, 118959, + 127930, 8162, 127019, 128197, 92747, 120519, 42931, 66242, 11415, 4333, + 9855, 64112, 64642, 0, 5388, 983405, 121271, 917907, 7714, 66222, 69902, 7768, 72403, 4199, 64708, 65064, 70117, 0, 8708, 9560, 64077, 64076, - 8996, 4992, 4471, 42622, 64079, 64078, 92179, 71878, 126570, 121256, - 64615, 41915, 0, 12075, 42041, 194825, 5174, 983217, 0, 127557, 3123, - 125100, 12685, 119216, 8408, 64704, 83328, 0, 9223, 0, 41616, 67999, - 73797, 83327, 1116, 75067, 43049, 7136, 43050, 8548, 120485, 0, 75031, - 917622, 128168, 13115, 43675, 64091, 9322, 83338, 83331, 64095, 64094, - 8111, 66247, 42332, 64089, 64088, 6199, 67249, 66398, 11434, 64083, - 64082, 11329, 7737, 64087, 64086, 64085, 64084, 83033, 9927, 41335, 4118, - 1797, 83312, 41334, 0, 46, 43448, 83309, 298, 83303, 83304, 83305, 42627, - 125011, 32, 6187, 83037, 11495, 11459, 3665, 83036, 42871, 0, 19923, - 74335, 0, 127192, 66239, 42264, 64403, 4412, 7240, 83314, 71444, 983468, - 65758, 12750, 4181, 8544, 83461, 68053, 83407, 120198, 69809, 6181, - 65014, 983422, 128484, 983196, 3639, 119588, 118851, 83039, 118904, - 10073, 120206, 83038, 127186, 68409, 42844, 7498, 1098, 92565, 120205, 0, - 128915, 10207, 8789, 93070, 120338, 92973, 128325, 9234, 917895, 6182, - 983475, 65058, 120319, 983480, 68064, 917831, 5471, 9461, 5573, 118936, - 5473, 44, 0, 66244, 94072, 0, 66238, 12844, 66894, 1622, 7767, 1900, - 41339, 11458, 119061, 0, 6581, 5576, 128618, 43855, 41337, 0, 41631, - 8947, 68390, 69683, 41694, 983848, 72396, 7908, 0, 10408, 6579, 917872, - 64618, 0, 120147, 2138, 6583, 7761, 70005, 120504, 194828, 128961, 5058, - 41010, 9992, 128299, 5057, 917941, 0, 74538, 5054, 118951, 194971, 78606, - 0, 1437, 41617, 658, 3497, 128509, 7486, 5061, 5060, 4235, 127878, - 128322, 128529, 12113, 4236, 4727, 128487, 0, 7693, 10749, 120332, 7488, - 5773, 978, 128134, 983699, 41619, 10239, 68611, 71864, 66209, 127233, - 74135, 9748, 983956, 127524, 0, 983316, 194676, 194675, 128081, 0, - 983313, 983302, 0, 127865, 0, 92776, 9341, 78821, 2379, 11325, 917902, - 64668, 67854, 8125, 120545, 6743, 83164, 917940, 2369, 83406, 983323, - 127966, 119235, 71868, 73936, 7008, 43660, 120346, 0, 43841, 2367, - 127827, 983857, 264, 2375, 8060, 6194, 119858, 1844, 119084, 129049, - 6019, 128975, 0, 6961, 0, 70435, 67171, 8800, 127332, 42862, 4463, 65581, - 6192, 119610, 42771, 0, 92333, 725, 65042, 93014, 120800, 74942, 12892, - 0, 67149, 74899, 73931, 0, 120495, 127261, 12224, 983128, 129061, 5074, - 5073, 121164, 8983, 118981, 74493, 71231, 5072, 74547, 6198, 11614, 0, - 196, 983154, 0, 983936, 4929, 120342, 129145, 0, 127987, 121455, 42847, - 92953, 0, 67754, 4934, 983981, 41323, 9758, 0, 92289, 70181, 42584, 0, - 4329, 41321, 4979, 3048, 7752, 41320, 983042, 64667, 12819, 983870, 5071, - 127915, 3642, 67334, 5070, 10042, 113813, 3987, 5068, 983460, 8909, - 78650, 78649, 69917, 10636, 73981, 11806, 43167, 4531, 1245, 9105, 66463, - 4921, 120219, 4926, 65544, 73884, 121359, 128028, 0, 64709, 83269, - 128854, 78880, 4922, 325, 992, 119568, 4925, 127218, 0, 9526, 4920, - 128617, 948, 0, 120208, 4930, 127857, 92175, 120275, 4933, 113779, - 121049, 118985, 4928, 983149, 83514, 74770, 120194, 126548, 722, 194934, - 19908, 12637, 127485, 82999, 8753, 1509, 0, 5468, 9511, 43493, 127477, - 1672, 6205, 10864, 74586, 127480, 70103, 92694, 78555, 127468, 73863, - 126577, 68336, 41607, 120115, 1679, 120116, 120180, 92761, 127462, 7005, - 41609, 9580, 70431, 401, 69949, 43779, 6968, 5761, 342, 8553, 127900, - 8143, 127115, 11983, 92249, 624, 74508, 4057, 43788, 5078, 74258, 12478, - 0, 5076, 128702, 82991, 0, 8295, 685, 9025, 1524, 12618, 0, 5539, 129182, - 92523, 71435, 7138, 120552, 43504, 194611, 66914, 65794, 12520, 8058, - 9732, 92480, 5080, 64775, 5036, 5035, 120590, 42604, 983656, 0, 8074, - 275, 13291, 1907, 78838, 4432, 121313, 5033, 120341, 120818, 4836, 3888, - 73792, 10729, 64546, 127262, 43704, 127264, 92957, 67588, 68061, 124983, - 70360, 8858, 6409, 7663, 120252, 128100, 119007, 0, 66321, 94052, 12814, - 127248, 3432, 10218, 0, 6094, 7641, 42445, 128792, 92487, 42406, 1676, - 67362, 74862, 67365, 5030, 67364, 118810, 195008, 73869, 9622, 113763, - 69944, 6787, 67361, 983270, 0, 68319, 10544, 12919, 71484, 72397, 0, 0, - 69906, 120789, 983041, 947, 67695, 67367, 128528, 10969, 67228, 7613, - 92562, 119936, 4795, 119930, 7018, 7376, 120181, 120192, 120268, 0, - 43567, 74056, 120266, 11833, 119919, 7216, 65232, 7217, 251, 7218, 7895, - 4395, 43538, 119926, 119834, 119928, 7213, 68476, 7214, 7215, 5879, - 74141, 8880, 7685, 66459, 120173, 65540, 67359, 625, 8187, 42861, 1113, - 7236, 7915, 3630, 120176, 8179, 70163, 67886, 9316, 10980, 2489, 65624, - 8150, 1359, 67652, 70464, 127330, 73756, 5042, 5041, 42769, 12084, - 127324, 127321, 74410, 127319, 127320, 127317, 121284, 127315, 12283, - 1616, 3795, 67732, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 128280, - 67724, 3239, 66893, 128818, 0, 8431, 0, 42164, 71229, 11778, 12620, 6826, - 73773, 70169, 5040, 127969, 0, 67094, 78420, 0, 5039, 983241, 78418, 0, - 5038, 0, 983862, 13184, 43960, 120931, 64648, 0, 9359, 78416, 917623, - 128770, 65157, 6662, 0, 70182, 3863, 73909, 4835, 55266, 43432, 127822, - 4309, 7127, 194569, 0, 194568, 1301, 0, 42589, 569, 128804, 73813, 711, - 4389, 7133, 120643, 73880, 11610, 11368, 0, 194570, 41331, 1006, 74240, - 67224, 1550, 8201, 70453, 7627, 5499, 5031, 77908, 42738, 65784, 43957, - 65267, 3758, 0, 65781, 64734, 67222, 2440, 43955, 70787, 8449, 0, 5008, - 983572, 2118, 126508, 12121, 8255, 5512, 73875, 2128, 2130, 2131, 2126, - 2133, 1119, 121250, 2114, 2116, 2455, 113798, 2122, 2123, 2124, 2125, - 127486, 8714, 983820, 2113, 195049, 2115, 128177, 127907, 43713, 5052, - 66220, 5821, 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, - 388, 41115, 735, 6637, 5907, 65088, 0, 12726, 74594, 9117, 983181, 12003, - 5513, 5109, 5053, 74230, 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, - 71251, 92237, 74807, 983062, 5048, 5047, 194837, 983380, 74201, 92313, - 194802, 74497, 82982, 8089, 6929, 639, 82981, 68179, 64442, 70180, 82984, - 4599, 41402, 6674, 43397, 43294, 1476, 648, 0, 65819, 3233, 0, 41782, - 6951, 94017, 129197, 3530, 9750, 128317, 120991, 6656, 42618, 70175, - 5046, 8512, 65856, 74261, 8967, 0, 5045, 42026, 1916, 7986, 5044, 120556, - 9006, 13128, 5043, 121335, 7853, 67808, 74004, 9669, 12341, 12703, 8402, - 128883, 119070, 70174, 41750, 3586, 64508, 43148, 0, 127971, 119606, - 67983, 13296, 517, 0, 128467, 194946, 41528, 123, 65454, 0, 121326, - 74478, 10531, 7784, 41526, 10829, 73991, 8057, 1126, 73895, 194857, - 194591, 0, 3925, 4251, 8069, 10517, 71112, 489, 71110, 4250, 92266, - 120452, 43151, 983178, 92738, 66200, 0, 0, 125026, 74298, 128879, 983476, - 8711, 6183, 83448, 983952, 72402, 120448, 7623, 118925, 66376, 9235, - 12760, 74176, 69662, 66445, 43540, 10062, 3743, 11514, 11078, 0, 12136, - 0, 126597, 120434, 194850, 7726, 195095, 19922, 267, 3393, 42198, 1371, - 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, 10652, 41612, 41077, 3402, - 9050, 3398, 128424, 983350, 0, 3391, 41075, 2476, 0, 128017, 0, 10625, - 129106, 12767, 13017, 78743, 64261, 64934, 70152, 13014, 13013, 121198, - 6673, 0, 0, 121324, 12438, 0, 983344, 83106, 71128, 120062, 9053, 13015, - 74523, 0, 704, 66215, 6195, 74949, 6660, 78758, 917760, 74861, 42212, - 12629, 11435, 0, 55256, 65538, 67343, 121437, 129086, 43876, 92941, - 65448, 78100, 12948, 119001, 128595, 43949, 120048, 78099, 127085, 0, - 128320, 4287, 8276, 4902, 1131, 983606, 78458, 66728, 1816, 43952, 42533, - 168, 42845, 4898, 64298, 43950, 78105, 4901, 1821, 43951, 578, 3653, - 128946, 791, 9162, 6977, 74196, 78889, 70160, 0, 73731, 8354, 43590, - 119303, 983451, 7557, 119108, 67378, 8234, 7241, 128608, 113735, 119167, - 194996, 12811, 65925, 3946, 78078, 10998, 78080, 673, 194867, 64397, - 128276, 74599, 78449, 8890, 194977, 194976, 2448, 78085, 10267, 8424, - 2452, 78083, 67217, 8729, 78456, 0, 7845, 126564, 71302, 4408, 4122, - 6772, 11039, 8723, 65896, 71310, 119302, 731, 119304, 71904, 2438, 64855, - 119300, 119299, 1175, 0, 42135, 373, 119172, 2119, 11457, 11521, 7723, - 128639, 0, 0, 41952, 93023, 5273, 2127, 5269, 6337, 5202, 2404, 5267, - 42823, 11291, 19915, 5277, 12963, 70320, 6189, 4125, 1314, 12133, 120340, - 118873, 1271, 983640, 129112, 66024, 41482, 3864, 9204, 0, 3879, 0, - 12978, 4166, 4574, 128111, 7567, 7459, 78128, 41390, 5384, 41882, 67647, - 70154, 5759, 194869, 121413, 41388, 64446, 41392, 64288, 41387, 67201, - 8706, 5552, 68837, 700, 0, 5553, 0, 7088, 5356, 7499, 68007, 66596, - 74066, 67251, 10263, 5554, 0, 12344, 10311, 78113, 6665, 11115, 121035, - 7618, 8517, 11455, 78440, 64632, 64447, 5555, 78088, 78093, 78091, 0, - 42803, 65033, 9143, 6668, 67288, 67995, 195069, 656, 195071, 65037, 4577, - 64624, 0, 0, 71912, 194908, 4269, 73885, 917775, 42846, 69644, 950, 0, - 92273, 66580, 77992, 66683, 10554, 119008, 119121, 6832, 5098, 917768, - 194668, 70403, 5097, 4935, 9848, 10381, 0, 67296, 92896, 3651, 0, 67294, - 70848, 5102, 5101, 10269, 12983, 8138, 4517, 1932, 5100, 1439, 12093, - 1247, 10034, 121340, 5099, 78373, 1441, 42087, 3063, 650, 119953, 7838, - 0, 128655, 195040, 119142, 9031, 70829, 78427, 9078, 8545, 66356, 128799, - 194923, 9154, 9118, 126543, 119586, 2676, 2277, 128422, 68237, 6190, - 8599, 125118, 69918, 10795, 9857, 7014, 9856, 195033, 71903, 12129, - 126651, 8481, 83068, 6202, 67711, 10920, 113726, 5203, 195039, 195038, - 5108, 5107, 65818, 66019, 9762, 11205, 5541, 74772, 0, 12613, 5284, 6657, - 207, 121206, 4275, 74819, 854, 68147, 74381, 66816, 78786, 5103, 127861, - 64348, 41368, 43974, 488, 69811, 0, 71339, 10157, 194612, 43034, 11438, - 64674, 0, 70158, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, - 5105, 65266, 69720, 6476, 5104, 983749, 304, 3176, 78871, 70149, 932, - 113683, 6567, 238, 69656, 78432, 194595, 19905, 43850, 195015, 78870, - 41044, 67640, 67302, 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, - 93039, 8803, 309, 6622, 8151, 10858, 78706, 67636, 70171, 12568, 127917, - 12553, 10814, 43275, 6950, 9712, 68680, 43970, 126535, 65165, 92725, 0, - 66466, 124986, 127784, 0, 66725, 6191, 11351, 10437, 11316, 67634, 43763, + 8996, 4992, 4471, 42622, 64079, 64078, 92179, 71878, 100377, 121256, + 64615, 41915, 100375, 12075, 42041, 125084, 5174, 983217, 100372, 74186, + 3123, 125100, 12685, 119216, 8408, 64704, 83328, 122891, 9223, 0, 41616, + 67999, 73797, 83327, 1116, 75067, 43049, 7136, 43050, 8548, 120485, + 983871, 75031, 917622, 128168, 13115, 43675, 64091, 9322, 83338, 83331, + 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 67249, 66398, + 11434, 64083, 64082, 11329, 7737, 64087, 64086, 64085, 64084, 83033, + 9927, 41335, 4118, 1797, 83312, 41334, 0, 46, 43448, 78591, 298, 83303, + 83304, 83305, 42627, 125011, 32, 6187, 83037, 11495, 11459, 3665, 83036, + 42871, 118902, 19923, 74335, 0, 127192, 66239, 42264, 64403, 4412, 7240, + 83314, 71444, 119321, 65758, 12750, 4181, 8544, 83461, 68053, 83407, + 120198, 69809, 6181, 65014, 100750, 128484, 983196, 3639, 119588, 118851, + 83039, 118904, 10073, 120206, 83038, 127186, 68409, 42844, 7498, 1098, + 92565, 120205, 917773, 128915, 10207, 8789, 93070, 120338, 92973, 128325, + 9234, 917895, 6182, 983475, 65058, 120319, 983211, 68064, 917831, 5471, + 9461, 5573, 118936, 5473, 44, 0, 66244, 94072, 0, 66238, 12844, 66894, + 1622, 7767, 1900, 41339, 11458, 119061, 983183, 6581, 5576, 128618, + 43855, 41337, 983772, 41631, 8947, 68390, 69683, 41694, 917787, 72396, + 7908, 0, 10408, 6579, 127890, 64618, 0, 120147, 2138, 6583, 7761, 70005, + 120504, 194828, 66802, 5058, 41010, 9992, 128299, 5057, 69892, 0, 74538, + 5054, 118951, 194971, 78606, 0, 1437, 41617, 658, 3497, 71365, 7486, + 5061, 5060, 4235, 127878, 128322, 128529, 12113, 4236, 4727, 128487, 0, + 7693, 10749, 120332, 7488, 5773, 978, 128134, 128693, 41619, 10239, + 68611, 71864, 66209, 127233, 74135, 9748, 100383, 127524, 125218, 983316, + 194676, 194675, 128081, 70681, 100385, 72811, 83354, 127865, 120999, + 92776, 9341, 78821, 2379, 11325, 100386, 64668, 67854, 8125, 120545, + 6743, 83164, 917940, 2369, 83406, 983323, 127966, 100543, 71868, 73936, + 7008, 43660, 120346, 0, 43841, 2367, 127827, 128275, 264, 2375, 8060, + 6194, 119858, 1844, 119084, 129049, 6019, 128975, 983557, 6961, 0, 70435, + 67171, 8800, 127332, 42862, 4463, 65581, 6192, 100744, 42771, 127983, + 92333, 725, 65042, 93014, 120800, 74942, 12892, 125212, 67149, 74899, + 73931, 0, 120495, 127261, 12224, 983128, 129061, 5074, 5073, 121164, + 8983, 118981, 74493, 70723, 5072, 74547, 6198, 11614, 125251, 196, + 983154, 128805, 128263, 4929, 120342, 129145, 100794, 100747, 121455, + 42847, 92953, 0, 67754, 4934, 128338, 41323, 9758, 128211, 92289, 70181, + 42584, 0, 4329, 41321, 4979, 3048, 7752, 41320, 917952, 64667, 12819, + 983597, 5071, 127915, 3642, 67334, 5070, 10042, 113813, 3987, 5068, + 983460, 8909, 78650, 78649, 69917, 10636, 73981, 11806, 43167, 4531, + 1245, 9105, 66463, 4921, 120219, 4926, 65544, 73884, 121359, 121267, + 127972, 64709, 83269, 128854, 78880, 4922, 325, 992, 119568, 4925, + 127218, 983059, 9526, 4920, 128617, 948, 0, 70706, 4930, 127857, 92175, + 119886, 4933, 113779, 121049, 118985, 4928, 983149, 83514, 74770, 120194, + 126548, 722, 194934, 19908, 12637, 127485, 82999, 8753, 1509, 125264, + 5468, 9511, 43493, 127477, 1672, 6205, 10864, 74586, 127480, 70103, + 92694, 78555, 127468, 73863, 126577, 68336, 41607, 92627, 1679, 120116, + 120180, 78837, 127462, 7005, 41609, 9580, 70431, 401, 69949, 43779, 6968, + 5761, 342, 8553, 92256, 8143, 120979, 11983, 74208, 624, 74508, 4057, + 43788, 5078, 74258, 12478, 120250, 5076, 128702, 82991, 0, 8295, 685, + 9025, 1524, 12618, 0, 5539, 100907, 92523, 71435, 7138, 120552, 43504, + 125197, 66914, 65794, 12520, 8058, 9732, 92480, 5080, 64775, 5036, 5035, + 100429, 42604, 100428, 0, 8074, 275, 13291, 1907, 74370, 4432, 121313, + 5033, 120341, 120818, 4836, 3888, 73792, 10729, 64546, 127262, 43704, + 127264, 92957, 2274, 68061, 100422, 70360, 8858, 6409, 7663, 78069, + 128100, 119007, 100424, 66321, 94052, 12814, 127248, 3432, 10218, 0, + 6094, 7641, 42445, 128792, 92487, 42406, 1676, 67362, 74862, 67365, 5030, + 67364, 118810, 195008, 73869, 9622, 113763, 69944, 6787, 67361, 194930, + 0, 68319, 10544, 12919, 71484, 72397, 983641, 0, 69906, 100857, 983041, + 947, 67695, 67367, 128528, 10969, 67228, 7613, 92562, 119936, 4795, + 100431, 7018, 7376, 120181, 120192, 120268, 120189, 43567, 74056, 120266, + 11833, 119919, 7216, 65232, 7217, 251, 7218, 7895, 4395, 43538, 100433, + 100860, 119928, 7213, 68476, 7214, 7215, 5879, 74141, 8880, 7685, 66459, + 120173, 65540, 67359, 625, 8187, 42861, 1113, 7236, 7915, 3630, 120176, + 8179, 70163, 67886, 9316, 10980, 2489, 65624, 8150, 1359, 67652, 70464, + 127330, 73756, 5042, 5041, 42769, 12084, 127324, 127321, 74410, 127319, + 127320, 127317, 121284, 127315, 12283, 1616, 3795, 67732, 8795, 66245, + 120838, 0, 0, 1138, 73905, 12677, 128280, 67724, 3239, 66893, 128818, + 194624, 8431, 0, 42164, 71229, 11778, 12620, 6826, 73773, 70169, 5040, + 127969, 0, 67094, 78420, 127036, 5039, 983241, 78418, 983936, 5038, + 917990, 983862, 13184, 43960, 70695, 64648, 126641, 9359, 78416, 917623, + 128770, 65157, 6662, 100604, 70182, 3863, 73909, 4835, 55266, 43432, + 127822, 4309, 7127, 118841, 129074, 194568, 1301, 0, 42589, 569, 128804, + 73813, 711, 4389, 7133, 120643, 73880, 11610, 11368, 0, 128436, 41331, + 1006, 74240, 67224, 1550, 8201, 70453, 7627, 5499, 5031, 77908, 42738, + 65784, 43957, 65267, 3758, 983844, 65781, 64734, 67222, 2440, 43955, + 70787, 8449, 983684, 5008, 983572, 2118, 122896, 12121, 8255, 5512, + 73875, 2128, 2130, 2131, 2126, 2133, 1119, 121250, 2114, 2116, 2455, + 113798, 2122, 2123, 2124, 2125, 127486, 8714, 983820, 2113, 195049, 2115, + 128177, 127748, 43713, 5052, 66220, 5821, 6186, 65778, 65775, 5051, + 65773, 1429, 42647, 5050, 302, 388, 41115, 735, 6637, 5907, 65088, 0, + 12726, 74594, 9117, 983181, 12003, 5513, 5109, 5053, 74230, 5510, 78451, + 0, 78447, 2470, 78437, 0, 1925, 71251, 92237, 74807, 983062, 5048, 5047, + 194837, 121275, 74201, 78743, 194802, 74497, 65933, 8089, 6929, 639, + 82981, 68179, 64442, 70180, 82984, 4599, 41402, 6674, 43397, 43294, 1476, + 648, 0, 65819, 3233, 0, 41782, 6951, 74306, 129197, 3530, 9750, 128317, + 120991, 6656, 42618, 70175, 5046, 8512, 65856, 74261, 8967, 100516, 5045, + 42026, 1916, 7986, 5044, 120556, 9006, 13128, 5043, 121335, 7853, 67808, + 74004, 9669, 12341, 12703, 8402, 128883, 119070, 70174, 41750, 3586, + 64508, 43148, 0, 127971, 119606, 67983, 13296, 517, 983878, 125017, + 100565, 41528, 123, 65454, 127215, 121326, 74478, 10531, 7784, 41526, + 10829, 73991, 8057, 1126, 73895, 100803, 194591, 983379, 3925, 4251, + 8069, 10517, 71112, 489, 71110, 4250, 92266, 120452, 43151, 983178, + 92738, 66200, 983626, 127905, 125026, 74298, 128879, 126625, 8711, 6183, + 83448, 983952, 72402, 120448, 7623, 100809, 66376, 9235, 12760, 74176, + 69662, 66445, 43540, 10062, 3743, 11514, 11078, 0, 12136, 983799, 126597, + 120434, 119052, 7726, 195095, 19922, 267, 3393, 42198, 1371, 122919, + 69233, 2458, 100435, 6201, 0, 41074, 4266, 10652, 41612, 41077, 3402, + 9050, 3398, 128424, 127083, 194894, 3391, 41075, 2476, 129129, 74990, 0, + 10625, 70715, 12767, 13017, 78741, 64261, 64934, 70152, 13014, 13013, + 121198, 6673, 0, 0, 121324, 12438, 0, 983344, 83106, 71128, 120062, 9053, + 13015, 74523, 0, 704, 66215, 6195, 74949, 6660, 78758, 917760, 74861, + 42212, 12629, 11435, 0, 55256, 65538, 66809, 121437, 129086, 43876, + 92941, 65448, 78100, 12948, 119001, 119926, 43949, 120048, 78099, 127085, + 127964, 128320, 4287, 8276, 4902, 1131, 983606, 78458, 66728, 1816, + 43952, 42533, 168, 42845, 4898, 64298, 43950, 78105, 4901, 1821, 43951, + 578, 3653, 100476, 791, 9162, 6977, 74196, 78889, 70160, 0, 73731, 8354, + 43590, 119303, 983451, 7557, 119108, 67378, 8234, 7241, 128608, 113735, + 119167, 194996, 12811, 65925, 3946, 78078, 10998, 66807, 673, 194867, + 64397, 119235, 74599, 78449, 8890, 194977, 119322, 2448, 78085, 10267, + 8424, 2452, 78083, 67217, 8729, 78456, 0, 7845, 125117, 71302, 4408, + 4122, 6772, 11039, 8723, 65896, 71310, 119302, 731, 119304, 71904, 2438, + 64855, 119300, 119299, 1175, 129136, 42135, 373, 119172, 2119, 11457, + 11521, 7723, 128639, 125242, 0, 41952, 93023, 5273, 2127, 5269, 6337, + 5202, 2404, 5267, 42823, 11291, 19915, 5277, 12963, 70320, 6189, 4125, + 1314, 12133, 120340, 118873, 1271, 983556, 129112, 66024, 41482, 2434, + 9204, 917558, 3879, 194868, 12978, 4166, 4574, 128111, 7567, 7459, 78128, + 41390, 5384, 41882, 67647, 70154, 5759, 194869, 121413, 41388, 64446, + 41392, 64288, 41387, 67201, 8706, 5552, 68837, 700, 0, 5553, 0, 7088, + 5356, 7499, 68007, 66596, 74066, 67251, 10263, 5554, 0, 12344, 10311, + 78113, 6665, 11115, 121035, 7618, 8517, 11455, 78440, 64632, 64447, 5555, + 78088, 66810, 78091, 0, 42803, 65033, 9143, 6668, 67288, 67995, 194986, + 656, 128574, 65037, 4577, 64624, 129354, 120264, 71912, 194908, 4269, + 73885, 917775, 42846, 69644, 950, 195085, 92273, 66580, 77992, 66683, + 10554, 3417, 101057, 6832, 5098, 917768, 194668, 70403, 5097, 4935, 9848, + 10381, 0, 67296, 72798, 3651, 0, 67294, 70848, 5102, 5101, 10269, 12983, + 8138, 4517, 1932, 5100, 1439, 12093, 1247, 10034, 121340, 5099, 78373, + 1441, 42087, 3063, 650, 119953, 7838, 983669, 128655, 195040, 119142, + 9031, 70829, 78427, 9078, 8545, 66356, 128799, 194923, 9154, 9118, + 126543, 119586, 2676, 2277, 128422, 68237, 6190, 8599, 125118, 69918, + 10795, 9857, 7014, 9856, 195033, 71903, 12129, 126651, 8481, 83068, 6202, + 67711, 10920, 113726, 5203, 195039, 129328, 5108, 5107, 65818, 66019, + 9762, 11205, 5541, 74772, 0, 12613, 5284, 6657, 207, 121206, 4275, 74819, + 854, 68147, 74381, 66816, 78786, 5103, 127861, 64348, 41368, 43974, 488, + 69811, 100911, 71339, 10157, 194612, 43034, 11438, 64674, 0, 70158, + 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, 5105, 65266, 69720, + 6476, 5104, 194734, 304, 3176, 78871, 70149, 932, 113683, 6567, 238, + 69656, 78432, 194595, 19905, 43850, 195015, 78870, 41044, 67640, 67302, + 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 93039, 8803, 309, + 6622, 8151, 10858, 78706, 67636, 70171, 12568, 127917, 12553, 10814, + 43275, 6950, 9712, 68680, 43970, 126535, 65165, 92725, 983822, 66466, + 124986, 127784, 128534, 66725, 6191, 11351, 10437, 11316, 67634, 43763, 0, 41754, 67635, 9370, 2720, 194600, 68462, 8232, 118817, 121056, 3222, - 121439, 121137, 0, 66663, 983047, 93067, 10834, 983127, 0, 65732, 94095, - 917547, 92682, 67679, 120734, 67309, 7781, 41383, 64568, 67311, 120738, + 121439, 121137, 0, 66663, 127928, 93067, 10834, 127547, 0, 65732, 94095, + 917547, 92682, 67679, 101021, 67309, 7781, 41383, 64568, 67311, 120738, 12077, 74433, 64586, 917620, 42396, 55255, 3475, 67260, 2479, 67306, 3632, 120728, 10698, 8376, 3648, 67263, 74844, 67639, 3636, 67894, 3650, - 8837, 65229, 1843, 42283, 43250, 41562, 9100, 74548, 68826, 3640, 127190, - 42321, 7284, 92880, 118987, 194950, 194949, 74115, 194951, 126649, - 194953, 42080, 2529, 0, 983784, 66010, 42083, 74952, 68398, 194957, - 67619, 66367, 194958, 9634, 92380, 9988, 0, 41068, 0, 4295, 65264, 68006, - 0, 67835, 0, 785, 8236, 128647, 9027, 68160, 67623, 64383, 120265, 925, - 127156, 0, 41985, 41071, 9586, 120988, 41984, 9217, 128372, 92510, 92218, - 9186, 2067, 4016, 983803, 0, 381, 12936, 0, 42077, 92985, 69880, 5184, - 42078, 194607, 10810, 128531, 4585, 19943, 5860, 67633, 121334, 127104, - 812, 3615, 72401, 5178, 44000, 92436, 78807, 5188, 74287, 67629, 3605, - 10692, 1166, 64429, 42639, 924, 127793, 67631, 42616, 120670, 2442, - 10703, 67317, 67632, 67316, 12771, 12736, 12753, 66708, 73933, 67626, - 42401, 194865, 69872, 127373, 42288, 12751, 74906, 8542, 13145, 194963, - 2468, 66706, 41294, 3626, 3883, 64388, 42479, 71220, 41117, 0, 92580, - 128624, 74939, 67624, 127976, 1290, 0, 65585, 2715, 806, 65208, 41884, - 917883, 1318, 64731, 78004, 0, 0, 66325, 3465, 2405, 9240, 983858, 12756, - 65259, 0, 983781, 12752, 5833, 1432, 11246, 41883, 73912, 9799, 917893, - 41886, 2480, 127906, 2062, 67326, 6494, 5537, 78656, 0, 194587, 124969, - 1211, 0, 120971, 67269, 118832, 12318, 129024, 113796, 68005, 10622, - 983779, 0, 68821, 6566, 71195, 0, 73780, 119196, 64864, 0, 78660, 0, - 8284, 13081, 119206, 3589, 42051, 4035, 6492, 83003, 4265, 6642, 3977, - 74186, 41778, 836, 92947, 2488, 125096, 4582, 0, 71426, 41777, 12926, - 983379, 7528, 10550, 113761, 92706, 983955, 10961, 93977, 1374, 64878, - 119014, 67720, 42389, 41374, 2286, 917604, 78492, 41377, 127909, 195047, - 400, 12597, 120586, 128097, 129071, 6661, 917961, 64827, 0, 73817, 390, - 0, 71301, 127292, 3473, 7718, 113755, 68814, 0, 55285, 73784, 66394, 0, - 11969, 120461, 127841, 6365, 1887, 6763, 92551, 8080, 7006, 0, 118902, - 6757, 64351, 1544, 67156, 6766, 64677, 120716, 67088, 6146, 74031, 771, - 120682, 0, 12812, 13168, 42272, 12200, 66423, 7904, 0, 953, 12917, - 119560, 12300, 67089, 11491, 9724, 10341, 983773, 9524, 7490, 11389, - 7489, 3379, 0, 7487, 194624, 471, 7484, 7482, 6753, 7480, 5764, 7478, - 7477, 6501, 7475, 6918, 7473, 7472, 2474, 7470, 7468, 10232, 10615, - 10213, 127288, 92357, 10049, 11834, 3544, 983785, 6017, 65311, 74935, - 120216, 13306, 10533, 7870, 73949, 7625, 194882, 120544, 0, 127950, - 92660, 983356, 77889, 0, 19961, 2472, 42665, 92341, 121133, 2139, 4256, - 120776, 74380, 43836, 42675, 42658, 12845, 6666, 70508, 65138, 119355, - 67862, 0, 65671, 7083, 120008, 8066, 7678, 74865, 125134, 120321, 127283, - 983396, 7186, 0, 120555, 0, 445, 120566, 66849, 125141, 0, 8330, 0, 0, - 42797, 113736, 120215, 83001, 3902, 0, 1770, 43959, 125067, 1560, 43958, - 92167, 4584, 73843, 0, 11712, 10866, 67092, 1118, 71334, 74888, 0, 1081, - 7436, 11147, 7252, 70093, 5996, 69921, 4903, 68142, 41386, 5162, 119189, - 1330, 128613, 7139, 0, 12047, 41384, 0, 0, 1848, 4334, 6324, 41975, - 64777, 10674, 12308, 12186, 0, 0, 983741, 12715, 68002, 194576, 83256, - 2018, 66672, 41979, 66685, 119157, 68000, 78490, 0, 126984, 68001, 9334, - 92705, 70800, 70101, 7975, 0, 77957, 0, 43494, 4884, 66597, 69732, 0, - 121010, 6313, 65513, 69857, 0, 0, 0, 2345, 43697, 463, 0, 127890, 68178, - 3117, 5460, 121423, 128717, 983389, 0, 42279, 127142, 126503, 78415, - 983228, 68524, 983386, 13248, 125027, 983843, 43956, 128415, 983153, - 121009, 5663, 71120, 128472, 128958, 0, 2482, 1471, 194583, 113747, - 42247, 12378, 73925, 69664, 71427, 12374, 121357, 127067, 0, 118828, - 2460, 71882, 11944, 12376, 92342, 64679, 92893, 12380, 10557, 64473, - 5870, 11122, 2024, 127180, 983391, 71879, 539, 0, 120302, 70120, 3853, - 65180, 127923, 120796, 120245, 92324, 0, 8659, 0, 12474, 67241, 9503, - 194969, 2478, 120248, 4162, 0, 4260, 12953, 69633, 82966, 12470, 92640, - 74189, 2742, 12476, 11798, 10946, 127310, 5000, 113687, 983579, 128190, - 69672, 8213, 43824, 7771, 6161, 68018, 6709, 194967, 78885, 119243, - 68235, 120582, 78547, 113709, 10301, 10333, 10397, 119044, 0, 73791, 0, - 83030, 0, 121482, 119123, 4014, 12842, 73952, 12015, 127290, 8275, 3893, - 74903, 120927, 12210, 7221, 42147, 74868, 74550, 71215, 64747, 118841, - 128086, 12516, 4444, 0, 92271, 74537, 10892, 8231, 0, 6473, 41968, 78388, - 41973, 3591, 41969, 83008, 2453, 118899, 92666, 64705, 71068, 0, 10349, - 10413, 43591, 41962, 3202, 74353, 129175, 8316, 129174, 0, 94060, 687, - 93055, 129074, 0, 1840, 127809, 68671, 11121, 4883, 285, 4723, 11175, - 92692, 4459, 74577, 42921, 41720, 11089, 240, 19906, 0, 42323, 74640, - 9743, 120232, 13134, 93065, 128956, 65931, 92579, 128329, 42634, 983345, - 43437, 3081, 11463, 120154, 0, 195013, 10445, 121322, 92969, 66717, 2614, - 9125, 71125, 1729, 129034, 72420, 65221, 63883, 43334, 64852, 124929, - 65194, 66201, 0, 66578, 5001, 41879, 74427, 4121, 5003, 884, 66700, - 63879, 4943, 5150, 73889, 73764, 4039, 643, 3086, 92533, 42448, 42299, - 58, 120084, 917952, 120083, 63873, 8491, 0, 0, 983623, 4530, 42409, 7126, - 194575, 2721, 120073, 119096, 19929, 118941, 128797, 92975, 4242, 4264, - 120077, 120530, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 983199, - 9754, 119102, 4437, 73948, 127074, 983240, 55280, 42174, 127954, 42430, - 0, 983452, 42355, 66026, 4306, 41380, 68432, 92586, 68314, 66667, 119351, - 194982, 121172, 42200, 42566, 70000, 128928, 5088, 6948, 0, 8524, 125040, - 0, 12385, 0, 74926, 69646, 1386, 64580, 11480, 6116, 65039, 65038, 12392, - 65036, 8064, 127558, 12101, 5822, 119004, 2080, 710, 77999, 11663, 1666, - 42091, 119657, 12383, 43671, 42092, 68418, 4289, 127897, 63896, 12061, - 42096, 43621, 3362, 12377, 119934, 983834, 68449, 7461, 73901, 1244, 331, - 73786, 12683, 10662, 0, 8112, 0, 65852, 74629, 12379, 127107, 92930, - 41964, 42208, 63843, 2084, 41965, 70089, 65866, 4327, 0, 63840, 66413, - 41220, 13032, 92980, 584, 12933, 43177, 12373, 69855, 13000, 1351, 2935, - 8698, 12665, 0, 1930, 0, 78229, 12427, 66514, 69859, 13031, 0, 63901, 0, - 3657, 119611, 65202, 6000, 113786, 12426, 121058, 119935, 41740, 12428, - 41283, 41916, 119210, 128318, 0, 12429, 6727, 983948, 7562, 125129, 5170, - 983915, 41755, 676, 0, 66704, 66664, 9978, 66491, 3536, 0, 9752, 92397, - 6162, 78320, 69228, 10113, 41829, 65886, 5159, 12422, 41832, 439, 3072, - 917828, 42207, 74549, 11796, 40970, 41830, 125021, 70151, 8308, 917797, - 70807, 119258, 67864, 113696, 917800, 12336, 4135, 67231, 341, 2727, - 4129, 3539, 0, 63861, 0, 7913, 0, 63859, 4131, 63868, 129085, 63867, + 8837, 65229, 1843, 42283, 43250, 41562, 9100, 74548, 68826, 3640, 92411, + 42321, 7284, 92880, 118987, 194783, 100897, 74115, 194951, 125199, + 194953, 42080, 2529, 983909, 983471, 66010, 42083, 74952, 68398, 194957, + 67619, 66367, 100899, 9634, 92380, 9988, 0, 41068, 0, 4295, 65264, 68006, + 0, 67835, 100900, 785, 8236, 128647, 9027, 68160, 67623, 64383, 120265, + 925, 127156, 0, 41985, 41071, 9586, 120988, 41984, 9217, 128372, 92510, + 92218, 9186, 2067, 4016, 128848, 129182, 381, 12936, 983736, 42077, + 92985, 69880, 5184, 42078, 194607, 10810, 128531, 4585, 19943, 5860, + 67633, 121334, 127104, 812, 3615, 72401, 5178, 44000, 92436, 78807, 5188, + 74287, 67629, 3605, 10692, 1166, 64429, 42639, 924, 127793, 67631, 42616, + 120670, 2442, 10703, 67317, 67632, 67316, 12771, 12736, 12753, 66708, + 73933, 67626, 42401, 194865, 69872, 127373, 42288, 12751, 74906, 8542, + 13145, 194963, 2468, 66706, 41294, 3626, 3883, 64388, 42479, 71220, + 41117, 100893, 92580, 128624, 74939, 67624, 127976, 1290, 100591, 65585, + 2715, 806, 65208, 41884, 917883, 1318, 64731, 78004, 0, 0, 66325, 3465, + 2405, 9240, 983858, 12756, 65259, 0, 983781, 12752, 5833, 1432, 11246, + 41883, 73912, 9799, 917893, 41886, 2480, 127906, 2062, 67326, 6494, 5537, + 78656, 983275, 70661, 124969, 1211, 0, 120971, 67269, 118832, 12318, + 129024, 113796, 68005, 10622, 983779, 0, 68821, 6566, 71195, 0, 73780, + 119196, 64864, 0, 78660, 129052, 8284, 13081, 119206, 3589, 42051, 4035, + 6492, 83003, 4265, 6642, 3977, 72743, 41778, 836, 92947, 2488, 125096, + 4582, 0, 71426, 41777, 12926, 72708, 7528, 10550, 113761, 92706, 983955, + 10961, 93977, 1374, 64878, 119014, 67720, 42389, 2273, 2286, 917604, + 78492, 41377, 127909, 195047, 400, 12597, 100482, 128097, 129071, 6661, + 917961, 64827, 0, 73817, 390, 119617, 71301, 127292, 3473, 7718, 113755, + 66742, 125139, 55285, 73784, 66394, 0, 11969, 120461, 127841, 6365, 1887, + 6763, 92551, 8080, 7006, 0, 92763, 6757, 64351, 1544, 67156, 6766, 64677, + 120716, 67088, 6146, 74031, 771, 120682, 194650, 12812, 13168, 42272, + 12200, 66423, 7904, 128715, 953, 12917, 72704, 12300, 67089, 11491, 9724, + 10341, 983773, 9524, 7490, 11389, 7489, 3379, 128775, 7487, 72716, 471, + 7484, 7482, 6753, 7480, 5764, 7478, 7477, 6501, 7475, 6918, 7473, 7472, + 2474, 7470, 7468, 10232, 10615, 10213, 127288, 92357, 10049, 11834, 3544, + 983390, 6017, 65311, 74935, 120216, 13306, 10533, 7870, 73949, 7625, + 100936, 120544, 0, 127950, 92660, 983356, 77889, 0, 19961, 2472, 42665, + 92341, 121133, 2139, 4256, 120776, 74380, 43836, 42675, 42658, 12845, + 6666, 70508, 65138, 119355, 67862, 0, 65671, 7083, 120008, 8066, 7678, + 74865, 125134, 120321, 127283, 127872, 7186, 72751, 120555, 72763, 445, + 119028, 66849, 125031, 917840, 8330, 0, 125018, 42797, 113736, 120215, + 83001, 3902, 0, 1770, 43959, 101039, 1560, 43958, 92167, 4584, 73843, + 122911, 11712, 10866, 67092, 1118, 71334, 74888, 983476, 1081, 7436, + 11147, 7252, 70093, 5996, 69921, 4903, 68142, 41386, 5162, 119189, 1330, + 126600, 7139, 0, 12047, 7675, 983847, 128797, 1848, 4334, 6324, 41975, + 64777, 10674, 12308, 12186, 0, 113795, 72807, 12715, 68002, 194576, + 83256, 2018, 66672, 41979, 66685, 119157, 68000, 78490, 129140, 126984, + 68001, 9334, 92705, 70800, 70101, 7975, 100910, 77957, 9214, 43494, 4884, + 66597, 69732, 0, 92958, 6313, 65513, 69857, 100908, 127799, 128757, 2345, + 43697, 463, 0, 121281, 68178, 3117, 5460, 121423, 127955, 983389, 0, + 42279, 127142, 126503, 78415, 983228, 8221, 983386, 13248, 125027, + 983843, 43956, 128415, 129093, 121009, 5663, 71120, 128472, 128958, + 127854, 2482, 1471, 194583, 113747, 42247, 12378, 73925, 69664, 71427, + 12374, 121357, 127067, 0, 118828, 2460, 71882, 11944, 12376, 92342, + 64679, 92893, 12380, 10557, 64473, 5870, 11122, 2024, 127180, 983391, + 71879, 539, 100933, 100932, 70120, 3853, 65180, 72730, 100939, 100938, + 92324, 983742, 8659, 0, 12474, 67241, 9503, 100941, 2478, 100943, 4162, + 100945, 4260, 12953, 69633, 82966, 12470, 92640, 74189, 2742, 12476, + 11798, 10946, 127310, 5000, 113687, 983579, 128190, 69672, 8213, 43824, + 7771, 6161, 68018, 6709, 92249, 78885, 119243, 68235, 83388, 78547, + 100921, 10301, 10333, 10397, 100925, 100928, 73791, 120238, 83030, 0, + 121482, 119123, 4014, 12842, 73952, 12015, 127290, 8275, 3893, 74903, + 120927, 12210, 7221, 42147, 74868, 74550, 71215, 64747, 100919, 128086, + 12516, 4444, 0, 92271, 74537, 10892, 8231, 0, 6473, 41968, 78388, 41973, + 3591, 41969, 83008, 2453, 118899, 92666, 64705, 71068, 0, 10349, 10413, + 43591, 41962, 3202, 74353, 129175, 8316, 129174, 0, 94060, 687, 93055, + 100705, 0, 1840, 121224, 68671, 11121, 4883, 285, 4723, 11175, 92692, + 4459, 74577, 42921, 41720, 11089, 240, 19906, 917770, 42323, 74640, 9743, + 120232, 13134, 93065, 128956, 65931, 92579, 128329, 42634, 983345, 43437, + 3081, 11463, 120154, 0, 194567, 10445, 121322, 92969, 66717, 2614, 9125, + 71125, 1729, 129034, 72420, 65221, 63883, 43334, 64852, 100915, 65194, + 66201, 100916, 66578, 5001, 41879, 74427, 4121, 5003, 884, 66700, 63879, + 4943, 5150, 73889, 73764, 4039, 643, 3086, 92533, 42448, 42299, 58, + 120084, 100355, 101026, 63873, 8491, 194643, 100891, 983623, 4530, 42409, + 7126, 100894, 2721, 120073, 119096, 19929, 118941, 127326, 92975, 4242, + 4264, 120077, 100902, 66179, 42412, 65941, 13114, 64522, 10740, 3094, + 120225, 9754, 119102, 4437, 73948, 127074, 119186, 55280, 42174, 127954, + 42430, 127835, 983452, 42355, 66026, 4306, 41380, 68432, 92586, 68314, + 66667, 119351, 100677, 121172, 42200, 42566, 70000, 100881, 5088, 6948, + 0, 8524, 72736, 0, 12385, 917855, 74926, 69646, 1386, 64580, 11480, 6116, + 65039, 65038, 12392, 65036, 8064, 127558, 12101, 5822, 119004, 2080, 710, + 77999, 11663, 1666, 42091, 74067, 12383, 43671, 42092, 68418, 4289, + 100885, 63896, 12061, 42096, 43621, 3362, 12377, 119934, 128586, 68449, + 7461, 73901, 1244, 331, 73786, 12683, 10662, 128778, 8112, 0, 65852, + 74629, 12379, 127107, 92930, 41964, 42208, 63843, 2084, 41965, 70089, + 65866, 4327, 63848, 63840, 66413, 41220, 13032, 92980, 584, 12933, 43177, + 12373, 69855, 13000, 1351, 2935, 8698, 12665, 100877, 1930, 100879, + 78229, 12427, 66514, 69859, 13031, 100571, 63901, 100587, 3657, 119611, + 65202, 6000, 113786, 12426, 121058, 74013, 41740, 12428, 41283, 41916, + 119210, 128318, 0, 12429, 6727, 100873, 7562, 100853, 5170, 78249, 41755, + 676, 100856, 66704, 66664, 9978, 66491, 3536, 83047, 9752, 92397, 6162, + 78320, 69228, 10113, 41829, 65886, 5159, 12422, 41832, 439, 3072, 917828, + 42207, 74549, 11796, 40970, 41830, 125021, 70151, 8308, 100694, 70807, + 119258, 67864, 113696, 917800, 12336, 4135, 67231, 341, 2727, 4129, 3539, + 100861, 63861, 70683, 7913, 100766, 63859, 4131, 63868, 100366, 63867, 4133, 11371, 210, 4600, 983897, 74560, 4137, 8082, 78506, 119062, 78504, 6704, 4591, 128029, 43873, 120753, 9680, 12937, 120623, 561, 12159, 195, 68321, 41501, 194581, 42031, 5719, 7172, 42687, 8368, 128306, 41499, - 93068, 71047, 42242, 41498, 917794, 42025, 78565, 65805, 42463, 67182, + 93068, 71047, 42242, 41498, 128178, 42025, 78565, 65805, 42463, 67182, 2924, 67183, 120510, 0, 983972, 92766, 73941, 67186, 42330, 67187, 3969, - 121405, 0, 7169, 1992, 9652, 73977, 7246, 42086, 126615, 2219, 121349, 0, - 128801, 67180, 127569, 327, 121277, 9042, 917777, 917776, 65148, 12433, - 917781, 120222, 83129, 12431, 8668, 12434, 67194, 113812, 5999, 75013, - 7712, 12432, 128243, 43653, 1726, 1015, 74079, 8212, 128065, 113754, - 42423, 119066, 194613, 72398, 66709, 121061, 8811, 927, 92532, 0, 12436, - 120087, 42021, 0, 67644, 1299, 12240, 42350, 65143, 0, 195016, 127972, - 78197, 11348, 0, 78037, 9194, 983184, 0, 19914, 12179, 128740, 2296, - 128932, 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 11178, - 917584, 41503, 127478, 11265, 68295, 120756, 194922, 67285, 5664, 3972, - 120891, 128583, 129408, 67284, 12416, 917764, 119608, 10816, 917769, - 11210, 12418, 8586, 3882, 8532, 917771, 1573, 68081, 119847, 4596, 66339, - 12417, 66001, 65343, 126491, 12414, 8287, 68219, 195017, 68108, 1143, - 119169, 119846, 12415, 6626, 42763, 917594, 118884, 9021, 120783, 119931, - 11724, 127787, 0, 71122, 126619, 0, 983661, 8027, 10997, 9171, 12741, - 11400, 43943, 194799, 66833, 128239, 983707, 92557, 93976, 127523, - 120190, 1324, 67608, 128214, 42368, 983873, 7715, 3881, 41487, 12118, - 42514, 68651, 128210, 128594, 3009, 41476, 41489, 69825, 3007, 1448, - 3018, 194809, 3889, 8521, 5083, 5082, 119859, 78255, 8519, 121226, 3014, - 5081, 65853, 120715, 194992, 68014, 69951, 5079, 64802, 42210, 4597, - 65532, 11828, 120185, 12371, 11105, 8407, 67163, 10805, 8518, 10779, - 120188, 71303, 121240, 12367, 42170, 0, 67290, 629, 1924, 127098, 12037, - 67158, 5987, 8462, 8005, 12365, 63933, 69735, 120815, 12369, 10649, - 67981, 5077, 120174, 10880, 63927, 5075, 121109, 127300, 65075, 0, 11007, - 70851, 66659, 92607, 917933, 66684, 128063, 3434, 4954, 1904, 92679, - 5266, 126980, 5272, 10499, 4507, 9578, 63923, 120177, 7979, 0, 9831, 0, - 194926, 461, 9803, 42282, 4504, 1505, 127893, 6325, 5276, 43021, 120488, - 0, 55236, 92659, 66461, 5177, 41324, 12055, 8722, 120805, 41327, 983732, - 66695, 4114, 409, 4383, 8900, 8948, 41325, 74930, 721, 10182, 9108, - 71311, 0, 119185, 42229, 74963, 121014, 5998, 0, 42353, 74825, 0, 12587, - 94104, 78571, 74889, 71328, 128955, 41576, 42215, 78570, 74037, 0, 8578, - 5995, 7573, 41575, 74789, 74752, 63944, 63949, 64767, 2670, 4167, 194796, - 11723, 0, 74120, 126642, 65076, 938, 43414, 73854, 11737, 9721, 0, 67179, - 67168, 11742, 2419, 67177, 11493, 12334, 92494, 4153, 12302, 10793, 5250, - 12407, 11978, 4404, 9189, 12401, 42007, 5775, 6759, 65806, 43997, 0, - 42002, 12404, 68092, 74928, 4940, 12410, 7683, 1167, 73729, 4983, 120507, - 861, 67699, 74880, 68297, 983807, 43757, 43370, 129298, 0, 11956, 124967, - 121263, 70815, 9616, 6631, 92338, 12816, 43759, 42218, 12710, 68674, - 12721, 4101, 66185, 0, 5992, 7616, 195044, 0, 12577, 93017, 128289, 853, + 101072, 983961, 7169, 1992, 9652, 73977, 7246, 42086, 126615, 2219, + 121349, 0, 128801, 67180, 127569, 327, 121277, 9042, 120843, 917776, + 65148, 12433, 917781, 120222, 74206, 12431, 8668, 12434, 67194, 113812, + 5999, 75013, 7712, 12432, 120885, 43653, 1726, 1015, 74079, 8212, 128065, + 113754, 42423, 119066, 194613, 72398, 66709, 121061, 8811, 927, 92532, + 983637, 12436, 101056, 42021, 194610, 67644, 1299, 12240, 42350, 65143, + 101058, 195016, 100566, 78197, 11348, 0, 78037, 9194, 100870, 0, 19914, + 12179, 100569, 2296, 100596, 63836, 63832, 72793, 10967, 63816, 2594, + 3444, 63817, 11178, 917584, 41503, 120087, 11265, 68295, 120756, 100600, + 67285, 5664, 3972, 100985, 128583, 129408, 67284, 12416, 917764, 119608, + 10816, 127289, 11210, 12418, 8586, 3882, 8532, 917771, 1573, 68081, + 119847, 4596, 66339, 12417, 66001, 65343, 126491, 12414, 8287, 68219, + 195017, 68108, 1143, 119169, 119846, 12415, 6626, 42763, 917594, 118884, + 9021, 120783, 119931, 11724, 127787, 120191, 71122, 126619, 0, 983661, + 8027, 10997, 9171, 12741, 11400, 43943, 100674, 66833, 100805, 127779, + 92557, 93976, 119844, 120190, 1324, 67608, 128214, 42368, 101062, 7715, + 2271, 41487, 12118, 42514, 68651, 128210, 128594, 3009, 41476, 41489, + 69825, 3007, 1448, 3018, 194807, 3889, 8521, 5083, 5082, 119859, 78255, + 8519, 72711, 3014, 5081, 65853, 120715, 194992, 68014, 69951, 5079, + 64802, 42210, 4597, 65532, 11828, 120185, 12371, 11105, 8407, 67163, + 10805, 8518, 10779, 100801, 71303, 121240, 12367, 42170, 128215, 67290, + 629, 1924, 127098, 12037, 67158, 5987, 8462, 8005, 12365, 63933, 69735, + 100888, 12369, 10649, 67981, 5077, 120174, 10880, 63927, 5075, 121109, + 127300, 65075, 0, 11007, 70851, 66659, 92607, 100607, 66684, 128063, + 3434, 4954, 1904, 92679, 5266, 126980, 5272, 10499, 4507, 9578, 63923, + 120177, 7979, 0, 9831, 0, 120589, 461, 9803, 42282, 4504, 1505, 127893, + 6325, 5276, 43021, 120488, 0, 55236, 92659, 66461, 5177, 41324, 12055, + 8722, 120805, 41327, 129332, 66695, 4114, 409, 4383, 8900, 8948, 41325, + 74930, 721, 10182, 9108, 71311, 0, 3419, 42229, 74963, 100627, 5998, 0, + 42353, 74825, 0, 12587, 94104, 78571, 74889, 71328, 100629, 41576, 42215, + 78570, 74037, 0, 8578, 5995, 7573, 41575, 74789, 74752, 63944, 63949, + 64767, 2670, 4167, 194796, 11723, 983439, 74120, 119000, 65076, 938, + 43414, 73854, 11737, 9721, 983262, 67179, 67168, 11742, 2419, 67177, + 11493, 12334, 92494, 4153, 12302, 10793, 5250, 12407, 11978, 4404, 9189, + 12401, 42007, 5775, 6759, 65806, 43997, 122922, 42002, 12404, 68092, + 74928, 4940, 12410, 7683, 1167, 73729, 4983, 120507, 861, 67699, 74880, + 68297, 983807, 43757, 43370, 129298, 128307, 11956, 124967, 121263, + 70815, 9616, 6631, 92338, 12816, 43759, 42218, 12710, 68674, 12721, 4101, + 66185, 983269, 5992, 7616, 195044, 983392, 12577, 93017, 100880, 853, 42693, 194647, 119027, 983284, 5016, 43535, 63893, 42835, 9491, 917913, - 0, 917914, 0, 12712, 7105, 127807, 65060, 66875, 9900, 7750, 917946, + 100875, 917914, 0, 12712, 7105, 127807, 65060, 66875, 9900, 7750, 917946, 127896, 74619, 119265, 983587, 64778, 12585, 10565, 128151, 12177, - 119843, 983260, 0, 77824, 0, 4900, 127874, 12878, 92630, 8984, 4119, + 119843, 118891, 0, 77824, 0, 4900, 125245, 12878, 92630, 8984, 4119, 74768, 8971, 78593, 43113, 9702, 66852, 11025, 9245, 13048, 4927, 4138, - 74185, 92481, 92710, 12397, 77827, 119040, 13054, 12394, 0, 0, 194954, - 13053, 118974, 3948, 10781, 1546, 0, 5010, 1680, 10507, 78590, 78583, - 92431, 121037, 126644, 194915, 7267, 127479, 74833, 128181, 5993, 2819, - 128788, 12706, 71063, 1893, 7266, 63915, 7264, 7265, 0, 1363, 983580, - 42923, 63910, 63996, 3077, 120018, 0, 1512, 69929, 12589, 41479, 128313, - 71048, 43339, 73776, 9836, 120727, 983909, 41481, 43335, 7832, 42343, - 3090, 43337, 817, 1664, 1850, 83177, 3079, 11340, 42408, 42447, 74932, - 74044, 42307, 12386, 42304, 917555, 83428, 12389, 121079, 92366, 41996, - 11526, 63985, 5864, 1147, 43849, 42887, 1987, 92718, 5480, 7858, 11653, - 4116, 12391, 66193, 121383, 4939, 12384, 0, 127778, 41686, 63905, 119601, - 70285, 67398, 128820, 12649, 120022, 0, 8247, 507, 91, 2042, 120775, - 43643, 121445, 66028, 10036, 41844, 119813, 774, 119829, 77840, 119815, - 5994, 12539, 0, 78375, 120597, 119833, 983105, 78377, 983237, 917628, - 7719, 6026, 2486, 128312, 119808, 162, 0, 65219, 41073, 9687, 41681, - 6304, 119812, 66196, 194881, 5262, 0, 55233, 12681, 42379, 0, 7534, - 12219, 2226, 70499, 42810, 10492, 121510, 121148, 121509, 43119, 0, - 78537, 12403, 2500, 70145, 83246, 4899, 12729, 983399, 194619, 74113, + 74185, 92481, 92710, 12397, 77827, 119040, 13054, 12394, 66182, 0, + 194937, 13053, 118974, 3948, 10781, 1546, 0, 5010, 1680, 10507, 78590, + 78583, 92431, 121037, 126644, 194915, 7267, 127479, 74833, 128181, 5993, + 2819, 128788, 12706, 71063, 1893, 7266, 63915, 7264, 7265, 983673, 1363, + 983580, 42923, 13109, 63996, 3077, 120018, 0, 1512, 69929, 12589, 41479, + 101031, 71048, 43339, 73776, 9836, 119607, 917817, 41481, 43335, 7832, + 42343, 3090, 43337, 817, 1664, 1850, 83177, 3079, 11340, 42408, 42447, + 74932, 74044, 42307, 12386, 42304, 917555, 83428, 12389, 121079, 92366, + 41996, 11526, 63985, 5864, 1147, 43849, 42887, 1987, 92718, 5480, 7858, + 11653, 4116, 12391, 66193, 121383, 4939, 12384, 120184, 127778, 41686, + 63905, 119601, 70285, 67398, 100884, 12649, 120022, 0, 8247, 507, 91, + 2042, 120775, 43643, 121445, 66028, 10036, 41844, 70680, 774, 119829, + 77840, 119815, 5994, 12539, 0, 78375, 120597, 119833, 983105, 78377, + 917823, 917628, 7719, 6026, 2486, 101019, 119808, 162, 0, 65219, 41073, + 9687, 41681, 6304, 119812, 66196, 119089, 5262, 0, 55233, 12681, 42379, + 0, 7534, 12219, 2226, 70499, 42810, 10492, 121510, 121148, 121509, 43119, + 0, 78537, 12403, 2500, 70145, 83246, 4899, 12729, 983399, 194619, 74113, 2343, 4103, 19946, 74112, 77851, 13112, 129046, 74834, 12859, 70087, 120148, 66369, 5861, 127758, 11999, 12400, 43641, 128183, 12645, 5146, 11320, 68410, 6748, 65040, 194786, 64184, 12974, 64183, 67613, 120645, - 5147, 125019, 0, 74524, 128356, 1928, 0, 67649, 5991, 3445, 67609, 4976, - 64176, 0, 67610, 8241, 0, 77868, 4206, 0, 78662, 129029, 128298, 67277, - 10138, 67238, 128785, 8897, 120234, 1422, 8357, 4124, 77862, 65836, - 120641, 127926, 77859, 0, 120930, 1123, 963, 41553, 10120, 12405, 120150, - 92664, 398, 13278, 9723, 6366, 120311, 7945, 129126, 4402, 9970, 12402, - 93062, 42392, 1305, 12408, 92384, 44007, 128563, 127216, 41464, 12411, - 12969, 67268, 41465, 121092, 8528, 1575, 0, 63955, 165, 3024, 41467, - 119163, 70119, 9093, 128535, 6833, 92574, 63958, 0, 9148, 9692, 4096, 53, - 8296, 6750, 66855, 128410, 9594, 120308, 120938, 43527, 121192, 727, - 74192, 93060, 5805, 0, 6726, 0, 42176, 12370, 11655, 119095, 10591, 2280, - 983234, 12372, 120642, 120307, 71209, 92343, 983872, 12366, 10963, 6066, - 1329, 0, 3052, 9220, 121045, 64478, 194701, 10803, 4132, 120306, 68474, - 92473, 983247, 120712, 74837, 120155, 1499, 0, 8055, 42740, 63965, - 120305, 63962, 74042, 8924, 43123, 5988, 3660, 63969, 11781, 42718, 8788, - 1357, 64851, 65743, 92894, 8774, 70337, 127086, 9941, 120172, 92748, - 1933, 69655, 9564, 120016, 92435, 73866, 0, 121241, 2487, 67614, 3121, - 1804, 3311, 67615, 70081, 78302, 12220, 67616, 92769, 120020, 194594, - 68200, 6675, 128144, 0, 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, - 510, 64663, 0, 121500, 4561, 2101, 1398, 917972, 92554, 74034, 41569, - 92684, 11406, 8167, 12127, 120505, 840, 983283, 69992, 7101, 6967, 0, - 194898, 9796, 127000, 333, 69891, 0, 8144, 2117, 0, 121155, 12406, - 917970, 19931, 66388, 6678, 7769, 983124, 12621, 0, 127366, 10227, 4764, - 43101, 9981, 0, 40986, 4127, 66487, 983576, 42202, 12754, 195021, 983191, - 0, 94097, 67594, 2048, 12944, 4050, 67595, 917967, 43102, 10581, 11184, - 4533, 127212, 74003, 6490, 0, 12038, 0, 0, 68225, 65461, 9798, 69704, - 128912, 1948, 69841, 0, 952, 128235, 125107, 983354, 70296, 6449, 9494, - 120313, 0, 43098, 4843, 8142, 64160, 4098, 64170, 983341, 0, 3436, - 119973, 0, 12817, 67597, 6676, 3930, 42615, 66407, 69991, 67598, 0, 0, 0, - 65591, 41581, 65916, 1453, 194993, 121458, 127859, 8500, 42222, 120142, - 73743, 120400, 4317, 11543, 67676, 64676, 0, 127833, 67606, 119083, - 121083, 42217, 13102, 0, 66003, 6672, 0, 0, 66880, 77912, 63841, 9613, - 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, 42056, 10228, 64957, - 11281, 0, 3807, 1469, 66640, 65381, 42197, 4988, 42372, 0, 9598, 904, - 352, 42225, 1451, 8061, 8453, 4134, 83485, 67223, 66576, 127916, 127831, - 10520, 8575, 9960, 1201, 127289, 12846, 127291, 68040, 11919, 64962, - 127081, 43739, 127281, 8511, 9460, 823, 11587, 12305, 0, 64695, 127305, - 12387, 1253, 13183, 65766, 500, 42783, 65765, 64208, 64369, 65760, 65761, - 70334, 11606, 64784, 11702, 66498, 9821, 64304, 127369, 5152, 11048, - 7533, 68366, 64410, 92305, 0, 4323, 70276, 92669, 71332, 120158, 42587, - 42214, 41394, 11188, 4763, 4112, 118935, 0, 5260, 43143, 94038, 326, - 120131, 68423, 119218, 10771, 2876, 74074, 92530, 128460, 41398, 7382, - 9802, 127077, 127076, 453, 41396, 120524, 13159, 12140, 9572, 983132, - 7003, 194883, 42334, 7704, 125069, 125020, 43144, 4123, 8494, 43146, - 9977, 0, 121283, 65759, 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, - 9521, 9589, 64755, 0, 64020, 126604, 10464, 0, 92968, 194610, 64514, - 11528, 64024, 128072, 679, 64013, 983555, 5850, 758, 7536, 120538, 92234, - 41441, 10693, 64006, 75044, 64005, 4058, 119019, 126487, 64660, 128176, - 119050, 0, 983069, 1139, 43298, 64027, 64029, 8970, 0, 9934, 128685, - 10774, 67104, 42201, 12421, 128216, 127006, 1852, 3057, 64046, 73744, - 64034, 64039, 68065, 0, 983690, 92913, 92322, 7645, 12854, 74338, 3496, - 0, 121323, 113710, 9102, 627, 127795, 6158, 8327, 74553, 66632, 12419, - 13309, 11570, 127811, 19960, 11696, 0, 1018, 118970, 129075, 194897, - 1682, 43863, 194896, 42756, 6765, 194906, 67717, 74358, 73814, 11412, - 6768, 10728, 119982, 71316, 71099, 43311, 64966, 11577, 127832, 43040, - 1833, 11576, 70054, 74779, 0, 185, 65085, 74533, 64754, 119334, 7535, - 8085, 42525, 119944, 9749, 41701, 6131, 1949, 4117, 7847, 120489, 120997, - 64483, 65693, 983711, 983495, 128615, 69695, 42240, 128587, 121352, - 42864, 126498, 43168, 41868, 1184, 0, 815, 11484, 127535, 67840, 983651, - 0, 66197, 983474, 10986, 64683, 128549, 128454, 3455, 126530, 0, 9879, 0, - 0, 4158, 70307, 68166, 0, 128091, 0, 0, 69645, 332, 118808, 83368, 5142, - 2407, 69643, 42199, 0, 92404, 74373, 83372, 55217, 71457, 63870, 43163, - 0, 0, 12985, 42867, 1834, 120387, 92461, 69817, 10940, 65249, 70385, - 8662, 120324, 0, 2652, 120527, 7164, 10784, 195093, 67674, 0, 83359, - 92482, 194749, 74562, 917505, 1828, 74474, 120019, 68078, 8531, 12499, - 6280, 12324, 72434, 65238, 68374, 4832, 65573, 43851, 6279, 12508, 12904, - 12502, 9161, 128555, 1620, 11247, 3601, 121301, 83353, 67246, 609, 11555, - 83456, 12496, 11980, 74181, 4343, 12505, 82960, 127863, 0, 11377, 239, - 128114, 637, 0, 128678, 42671, 0, 93032, 83095, 43565, 71306, 126493, - 12696, 128256, 917600, 94062, 12929, 0, 712, 0, 4197, 983206, 42818, - 126632, 70306, 120490, 70333, 119137, 1506, 43562, 119913, 92491, 68076, - 12651, 120917, 64628, 74517, 12058, 74084, 194633, 7494, 0, 4924, 65592, - 118844, 194823, 127088, 355, 9719, 127087, 13066, 64796, 121077, 983297, - 12033, 42178, 194754, 69760, 42571, 92635, 11430, 0, 70299, 121508, - 124951, 68324, 3178, 126488, 128633, 92704, 917566, 9080, 120943, 67697, - 195101, 68209, 72418, 11082, 71485, 5699, 83373, 66000, 9488, 65166, - 119112, 70477, 11170, 68662, 128120, 71313, 0, 5265, 69235, 83384, 11487, - 67858, 12464, 983365, 43045, 983831, 70345, 43345, 983276, 10770, 118994, - 6807, 465, 9829, 69997, 74348, 0, 43346, 8116, 795, 120352, 72412, 12462, - 10930, 10831, 121320, 118952, 64362, 74334, 93056, 83047, 983933, 12468, - 8607, 1008, 118948, 10092, 125122, 128851, 67855, 55257, 73771, 1766, - 11282, 11996, 1820, 4547, 0, 11202, 120243, 128345, 13223, 74934, 64595, + 5147, 125019, 917624, 74524, 128356, 1928, 0, 67649, 5991, 3445, 67609, + 4976, 64176, 74966, 67610, 8241, 983900, 77868, 4206, 127352, 78662, + 129029, 128298, 67277, 10138, 67238, 128785, 8897, 120234, 1422, 8357, + 4124, 77862, 65836, 120641, 127926, 77859, 100912, 120930, 1123, 963, + 41553, 10120, 12405, 120150, 92664, 398, 13278, 9723, 6366, 120311, 7945, + 129126, 4402, 9970, 12402, 93062, 42392, 1305, 12408, 92384, 44007, + 128465, 127216, 41464, 12411, 12969, 67268, 41465, 121092, 8528, 1575, 0, + 63955, 165, 3024, 41467, 119163, 70119, 9093, 100620, 6833, 92574, 63958, + 120931, 9148, 9692, 4096, 53, 8296, 6750, 66855, 128410, 9594, 120308, + 120938, 43527, 100611, 727, 74192, 93060, 5805, 0, 6726, 127387, 42176, + 12370, 11655, 119095, 10591, 2280, 983234, 12372, 120642, 120307, 71209, + 92343, 983872, 12366, 10963, 6066, 1329, 0, 3052, 9220, 121045, 64478, + 194701, 10803, 4132, 120306, 68474, 92473, 100876, 118923, 74837, 120155, + 1499, 121299, 8055, 42740, 63965, 74338, 63962, 74042, 8924, 43123, 5988, + 3660, 63969, 11781, 42718, 8788, 1357, 64851, 65743, 92894, 8774, 70337, + 127086, 9941, 120172, 92748, 1933, 69655, 9564, 120016, 92435, 73866, + 983932, 121241, 2487, 67614, 3121, 1804, 3311, 67615, 70081, 78302, + 12220, 67616, 92769, 120020, 194594, 68200, 6675, 128144, 983282, 67592, + 120685, 0, 64771, 1198, 9132, 983709, 64619, 510, 64663, 94033, 121500, + 4561, 2101, 1398, 195051, 92554, 74034, 41569, 92684, 11406, 8167, 12127, + 120505, 840, 983283, 69992, 7101, 6967, 0, 194898, 9796, 127000, 333, + 69891, 127145, 8144, 2117, 0, 70712, 12406, 917970, 19931, 66388, 6678, + 7769, 983124, 12621, 0, 127366, 10227, 4764, 43101, 9981, 74157, 40986, + 4127, 66487, 983576, 42202, 12754, 195021, 983191, 100628, 94097, 67594, + 2048, 12944, 4050, 67595, 917967, 43102, 10581, 11184, 4533, 127212, + 74003, 6490, 983857, 12038, 0, 0, 68225, 65461, 9798, 69704, 128912, + 1948, 69841, 0, 952, 128235, 125107, 983354, 70296, 6449, 9494, 120313, + 70738, 43098, 4843, 8142, 64160, 4098, 64170, 128871, 917621, 3436, + 66780, 0, 12817, 67597, 6676, 3930, 42615, 66407, 69991, 67598, 983336, + 0, 0, 65591, 41581, 65916, 1453, 121189, 121458, 127859, 8500, 42222, + 101047, 73743, 120143, 4317, 11543, 67676, 64676, 100697, 127833, 67606, + 119083, 121083, 42217, 13102, 128736, 66003, 6672, 0, 0, 66880, 77912, + 63841, 9613, 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, 42056, + 10228, 64957, 11281, 128312, 3807, 1469, 66640, 65381, 42197, 4988, + 42372, 72786, 9598, 904, 352, 42225, 1451, 8061, 8453, 4134, 83485, + 67223, 66576, 127916, 127568, 10520, 8575, 9960, 1201, 125235, 12846, + 127291, 68040, 11919, 64962, 100695, 43739, 101041, 8511, 9460, 823, + 11587, 12305, 0, 64695, 127305, 12387, 1253, 13183, 65766, 500, 42783, + 65765, 64208, 64369, 65760, 65761, 70334, 11606, 64784, 11702, 66498, + 9821, 64304, 127369, 5152, 11048, 7533, 68366, 64410, 92305, 127852, + 4323, 70276, 92669, 71332, 120158, 42587, 42214, 41394, 11188, 4763, + 4112, 118935, 0, 5260, 43143, 94038, 326, 120131, 68423, 119218, 10771, + 2876, 74074, 92530, 128460, 41398, 7382, 9802, 127077, 127076, 453, + 41396, 120524, 13159, 12140, 9572, 129085, 7003, 194883, 42334, 7704, + 125069, 125020, 43144, 4123, 8494, 43146, 9977, 0, 121283, 65759, 10765, + 64061, 4465, 9808, 64056, 65582, 4126, 0, 9521, 9589, 64755, 125200, + 64020, 126604, 10464, 194980, 92968, 72847, 64514, 11528, 64024, 128072, + 679, 64013, 129314, 5850, 758, 7536, 120538, 92234, 41441, 10693, 64006, + 75044, 64005, 4058, 119019, 126487, 64660, 128176, 119050, 0, 195023, + 1139, 43298, 64027, 64029, 8970, 0, 9934, 128685, 10774, 67104, 42201, + 12421, 119109, 125270, 1852, 3057, 64046, 73744, 64034, 64039, 68065, + 127075, 983690, 72773, 92322, 7645, 12854, 72772, 3496, 0, 121323, + 113710, 9102, 627, 127795, 6158, 8327, 74553, 66632, 12419, 13309, 11570, + 127811, 19960, 11696, 92913, 1018, 118970, 129075, 194897, 1682, 43863, + 194896, 42756, 6765, 194906, 67717, 74358, 73814, 11412, 6768, 10728, + 119982, 71316, 71099, 43311, 64966, 11577, 127832, 43040, 1833, 11576, + 70054, 74779, 0, 185, 65085, 74533, 64754, 119334, 7535, 8085, 42525, + 119944, 9749, 41701, 6131, 1949, 4117, 7847, 120489, 120997, 64483, + 65693, 983711, 127120, 74288, 69695, 42240, 128587, 121352, 42864, + 101037, 43168, 41868, 1184, 121285, 815, 11484, 127535, 67840, 983651, + 129340, 66197, 983474, 10986, 64683, 128549, 128454, 3455, 126530, + 119664, 9879, 0, 983215, 4158, 70307, 68166, 0, 128091, 194982, 0, 66799, + 332, 118808, 83368, 5142, 2407, 69643, 42199, 92386, 92404, 74373, 83372, + 55217, 71457, 63870, 43163, 0, 917763, 12985, 42867, 1834, 120387, 92461, + 69817, 10940, 65249, 70385, 8662, 120324, 0, 2652, 120527, 7164, 10784, + 195093, 67674, 917942, 83359, 92482, 194749, 74562, 917505, 1828, 74474, + 120019, 68078, 8531, 12499, 6280, 12324, 72434, 65238, 68374, 4832, + 65573, 43851, 6279, 12508, 12904, 12502, 9161, 128555, 1620, 11247, 3601, + 121301, 83353, 67246, 609, 11555, 83456, 12496, 11980, 74181, 4343, + 12505, 82960, 127863, 125258, 11377, 239, 128114, 637, 0, 128678, 42671, + 0, 93032, 83095, 43565, 71306, 126493, 7298, 128256, 917600, 94062, + 12929, 0, 712, 0, 4197, 983206, 42818, 126632, 70306, 120490, 70333, + 119137, 1506, 43562, 119913, 92491, 68076, 12651, 120917, 64628, 74517, + 12058, 74084, 194633, 7494, 128780, 4924, 65592, 118844, 194823, 127088, + 355, 9719, 66762, 13066, 64796, 78663, 983297, 12033, 42178, 194754, + 69760, 42571, 92635, 11430, 0, 70299, 121508, 124951, 68324, 3178, + 126488, 128633, 92704, 917566, 9080, 120943, 67697, 195101, 68209, 72418, + 11082, 71485, 5699, 83373, 66000, 9488, 65166, 119112, 70477, 11170, + 68662, 100505, 71313, 0, 5265, 69235, 83384, 11487, 67858, 12464, 983365, + 43045, 983201, 70345, 43345, 120657, 10770, 118994, 6807, 465, 9829, + 69997, 74348, 121403, 43346, 8116, 795, 120352, 72412, 12462, 10930, + 10831, 121320, 118952, 64362, 74334, 93056, 10112, 983933, 12468, 8607, + 1008, 118948, 10092, 120539, 128851, 67855, 55257, 73771, 1766, 11282, + 11996, 1820, 4547, 100709, 11202, 120243, 128345, 13223, 74934, 64595, 127294, 83374, 68489, 4345, 12616, 917784, 128947, 983155, 74467, 0, - 983819, 128291, 5382, 127779, 0, 67233, 119060, 64953, 5406, 19920, - 69897, 66510, 3590, 194835, 1130, 917766, 120977, 42016, 11823, 43023, - 121002, 118896, 7742, 127374, 13280, 71323, 9326, 73826, 5310, 43509, - 78584, 92229, 8959, 43589, 6747, 66723, 64757, 8568, 194684, 120496, - 73816, 83060, 128418, 42670, 0, 11621, 12460, 1326, 120631, 83393, 43063, + 73955, 128291, 5382, 121390, 0, 67233, 119060, 64953, 5406, 19920, 69897, + 66510, 3590, 194835, 1130, 128689, 120977, 42016, 11823, 43023, 121002, + 118896, 7742, 127374, 13280, 71323, 9326, 73826, 5310, 43509, 78584, + 92229, 8959, 43589, 6747, 66723, 64757, 8568, 194684, 120496, 73816, + 83060, 128418, 42670, 127539, 11621, 12460, 1326, 120631, 83393, 43063, 43239, 65678, 194840, 73917, 7843, 69783, 11689, 5410, 5783, 10468, 8403, 5400, 11594, 120405, 68333, 83390, 10491, 69842, 64412, 0, 128012, 5587, 42865, 64404, 8268, 4923, 65086, 8981, 12382, 42133, 120755, 9706, 69738, - 70294, 66610, 10461, 12103, 0, 8642, 83388, 42766, 83387, 2210, 9983, - 128689, 94009, 0, 0, 0, 7398, 41515, 0, 11802, 8041, 1461, 910, 119133, - 0, 6749, 3658, 93964, 120525, 0, 7617, 194841, 12888, 127983, 67668, - 13143, 0, 9193, 11097, 5703, 128247, 41517, 41504, 41519, 10016, 64305, - 0, 65864, 623, 781, 670, 10660, 5769, 613, 7543, 120279, 477, 41083, - 92521, 0, 592, 1578, 12459, 43449, 0, 0, 8225, 121191, 654, 11345, 653, - 652, 0, 647, 83266, 633, 120744, 983809, 126472, 12480, 43243, 194909, - 39, 12487, 121247, 120529, 74199, 12482, 0, 12489, 119607, 3195, 5550, - 129121, 7897, 127089, 1203, 74396, 1813, 64544, 41311, 12090, 983634, - 2877, 121518, 70496, 1675, 69840, 0, 0, 119078, 10070, 10595, 0, 119077, - 194777, 121162, 67170, 120790, 118787, 43244, 92233, 917835, 983916, - 119561, 983078, 194914, 194921, 128160, 9939, 0, 983151, 77860, 128948, - 83440, 270, 0, 10714, 118983, 72437, 0, 119942, 119338, 65372, 73803, - 74038, 68251, 6273, 66679, 364, 9595, 71440, 0, 0, 707, 194839, 128409, - 9282, 11163, 224, 128588, 68670, 9332, 4966, 68677, 194586, 68644, - 983131, 3841, 67357, 67341, 10732, 68640, 850, 4972, 127181, 12890, 2909, - 68619, 44008, 68627, 120699, 11544, 10203, 9608, 0, 917943, 11962, - 121397, 12507, 1196, 67684, 67100, 777, 120187, 4375, 65271, 67678, 0, - 12198, 917887, 64824, 119343, 127243, 9454, 63778, 8658, 42528, 70073, - 2705, 128680, 41520, 195098, 120379, 11986, 7765, 42502, 8280, 74520, - 2701, 0, 120240, 5767, 0, 195018, 9809, 8353, 63747, 66701, 63772, - 121233, 63745, 1748, 63770, 121419, 121078, 0, 65542, 63766, 55244, 3061, - 78609, 63764, 63787, 9067, 6096, 0, 7694, 0, 7257, 63768, 3485, 12987, - 127781, 127522, 120628, 63807, 1591, 0, 6386, 63783, 120990, 125041, - 92535, 0, 0, 68249, 74575, 127010, 65719, 13083, 64574, 65012, 121452, + 70294, 66610, 10461, 12103, 0, 8642, 70701, 42766, 83387, 2210, 9983, + 119963, 94009, 129299, 0, 128810, 7398, 41515, 983880, 11802, 8041, 1461, + 910, 119133, 983327, 6749, 3658, 93964, 120525, 127363, 7617, 194841, + 12888, 100501, 67668, 13143, 127975, 9193, 11097, 5703, 128247, 41517, + 41504, 41519, 10016, 64305, 983593, 65864, 623, 781, 670, 10660, 5769, + 613, 7543, 100787, 477, 41083, 92521, 194593, 592, 1578, 12459, 43449, + 128628, 0, 8225, 121191, 654, 11345, 653, 652, 0, 647, 83266, 633, + 120744, 72788, 126472, 12480, 43243, 194909, 39, 12487, 121247, 120529, + 74199, 12482, 983770, 12489, 100917, 3195, 5550, 128172, 7897, 127089, + 1203, 74396, 1813, 64544, 41311, 12090, 983634, 2877, 121518, 70496, + 1675, 69840, 0, 0, 119078, 10070, 10595, 0, 119077, 194777, 121162, + 67170, 120790, 118787, 43244, 92233, 917835, 125193, 119561, 983078, + 194914, 194921, 128160, 9939, 121511, 125195, 77860, 128948, 83440, 270, + 983309, 10714, 118983, 72437, 0, 119942, 119338, 65372, 73803, 74038, + 68251, 6273, 66679, 364, 9595, 71440, 0, 0, 707, 119649, 100400, 9282, + 11163, 224, 72799, 68670, 9332, 4966, 68677, 70674, 68644, 127214, 3841, + 67357, 67341, 10732, 68640, 850, 4972, 127181, 12890, 2909, 68619, 44008, + 68627, 101023, 11544, 10203, 9608, 0, 917943, 11962, 121397, 12507, 1196, + 67684, 67100, 777, 120187, 4375, 65271, 67678, 101024, 12198, 917887, + 64824, 119343, 126608, 9454, 63778, 8658, 42528, 70073, 2705, 128680, + 41520, 195098, 120379, 11986, 7765, 42502, 8280, 74520, 2701, 983333, + 120240, 5767, 0, 195018, 9809, 8353, 63747, 66701, 63772, 121233, 63745, + 1748, 63770, 121419, 121078, 0, 65542, 63766, 55244, 3061, 78609, 63764, + 63787, 9067, 6096, 0, 7694, 983776, 7257, 63768, 3485, 12987, 127781, + 127522, 120628, 63807, 1591, 127140, 6386, 63783, 120990, 125041, 92535, + 122884, 0, 68249, 74575, 100997, 65719, 13083, 64574, 65012, 121452, 1640, 12495, 66691, 7624, 3138, 10996, 11171, 1922, 127275, 12498, 10987, - 69936, 69939, 3894, 65543, 129183, 194842, 128112, 493, 0, 43197, 1717, - 4228, 479, 10303, 74020, 0, 917935, 10335, 3520, 917932, 12490, 64315, - 92170, 127039, 12493, 6233, 42681, 1002, 12491, 83519, 64911, 83521, - 2096, 65120, 83516, 78219, 83270, 8378, 11632, 68838, 66213, 63864, - 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, - 92672, 66240, 78041, 66233, 8928, 983552, 7909, 66234, 11605, 63759, - 127308, 66208, 67339, 13002, 63803, 244, 11542, 12898, 12494, 73761, - 12492, 12669, 94070, 0, 74153, 120310, 128278, 120680, 4882, 13040, - 983362, 8612, 4885, 74053, 127830, 13042, 4880, 64662, 2429, 1360, 248, - 129066, 63797, 92394, 42358, 0, 7292, 0, 63756, 42786, 66693, 0, 1870, - 78040, 470, 78038, 78035, 78036, 70028, 78034, 4579, 69232, 0, 12511, - 74453, 12514, 0, 71130, 7239, 7001, 8623, 94011, 125137, 128048, 7378, - 12512, 11615, 6104, 0, 120900, 659, 6098, 0, 12234, 83511, 67358, 8311, - 12510, 7669, 13039, 83509, 12513, 10202, 12471, 0, 8747, 121385, 70193, - 128354, 2323, 0, 2319, 77917, 12477, 77916, 2311, 7666, 4415, 237, 6281, - 127280, 983311, 83020, 2309, 1312, 8173, 83013, 12469, 83015, 78505, - 64335, 10609, 83011, 78006, 9397, 11524, 9395, 9396, 9393, 9394, 9391, - 9392, 9389, 6209, 9387, 9388, 4932, 9386, 9383, 9384, 6740, 127990, - 65451, 8185, 128931, 194843, 43024, 43336, 67659, 2313, 128167, 7948, - 9236, 77942, 0, 0, 10570, 43473, 6289, 10484, 83006, 83007, 11998, 12082, - 10924, 3147, 83004, 66406, 12524, 119081, 2310, 11818, 9381, 9382, 9379, - 9380, 9377, 9378, 9375, 9376, 1683, 9374, 983778, 9372, 12444, 74256, 0, - 13016, 8210, 121062, 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, - 120630, 4155, 121090, 120704, 42030, 5007, 12522, 43088, 0, 4951, 113826, - 127217, 983202, 9922, 43309, 11211, 12525, 983473, 12016, 65770, 9548, - 67665, 403, 78230, 12503, 194689, 127191, 11030, 43916, 92567, 65691, - 63998, 1819, 10496, 0, 0, 119920, 0, 129143, 121072, 12506, 983838, - 11146, 71477, 12500, 44023, 12509, 64393, 78830, 3389, 10589, 6608, - 11208, 120236, 78395, 78394, 74069, 71446, 78391, 3608, 8281, 113732, - 1107, 113745, 9076, 8862, 69743, 41052, 13084, 64766, 43217, 7803, 13222, - 74165, 74782, 43499, 8546, 11553, 63995, 13177, 9043, 6303, 113664, 498, - 64471, 77987, 92974, 12529, 8042, 43899, 2344, 12528, 8031, 2414, 74506, - 69719, 3231, 917836, 6422, 66512, 69653, 12530, 2537, 78405, 41429, - 12658, 13036, 65772, 0, 78738, 41433, 4719, 469, 917810, 4363, 3313, - 41428, 78407, 2023, 1772, 78224, 78225, 65706, 10051, 64812, 78220, - 74237, 9920, 12215, 82978, 4931, 1951, 12497, 119363, 9607, 70368, 9663, - 66838, 119634, 6503, 41110, 983467, 1491, 66847, 129169, 127304, 41061, - 70454, 194838, 127187, 65026, 41993, 41509, 11045, 65028, 71181, 66476, - 41108, 9738, 41995, 1075, 1958, 12535, 41992, 41506, 127002, 41687, 0, - 120717, 127776, 9940, 127299, 7692, 983833, 8008, 41131, 330, 8566, - 65083, 6839, 9816, 126517, 12532, 78550, 78546, 3508, 127058, 43235, - 120351, 127298, 64139, 78231, 6411, 12910, 67710, 66644, 13028, 6737, - 12537, 0, 43506, 64136, 12536, 2350, 13029, 78233, 120914, 43897, 13030, - 6702, 4527, 71250, 12538, 128810, 983645, 65599, 65717, 9966, 93046, - 4948, 12484, 4032, 121177, 12623, 0, 6207, 983225, 6117, 65930, 8412, - 127183, 7438, 1296, 2325, 41511, 121020, 10149, 74118, 0, 120233, 12481, - 121280, 12488, 66713, 0, 41556, 64414, 118802, 2354, 42619, 73766, - 119244, 6295, 901, 41510, 7953, 0, 65032, 41513, 120209, 11927, 66584, - 78559, 78560, 78557, 71459, 83034, 67603, 848, 9868, 67220, 6424, 78568, - 67226, 69922, 70190, 78563, 78564, 2352, 67219, 893, 64576, 11289, 1407, - 67973, 983193, 13026, 6762, 78579, 70192, 13023, 8903, 9777, 66715, 1871, - 8099, 127984, 0, 1343, 917999, 120784, 9325, 6818, 6283, 11738, 0, 72436, - 113713, 11741, 917986, 75043, 9216, 8263, 11279, 83023, 83024, 83025, - 13021, 64494, 3136, 194758, 194757, 194760, 13022, 42737, 9956, 0, 43954, - 74552, 10014, 0, 41260, 119340, 13020, 10024, 194764, 74583, 74340, - 69681, 0, 43001, 8029, 0, 0, 983780, 3335, 119341, 9209, 9776, 120526, - 194748, 5215, 42644, 3333, 1632, 194751, 64849, 3342, 78582, 5363, 12957, - 78581, 4156, 0, 127329, 6421, 78039, 1611, 78589, 13018, 74257, 78588, - 74542, 3337, 4537, 67895, 11736, 0, 68608, 6482, 4214, 73790, 11945, - 43925, 13046, 8838, 425, 4025, 10709, 78595, 2108, 2392, 13047, 92745, 0, - 6819, 13049, 6499, 92243, 12424, 68614, 65827, 13050, 9924, 194745, 6507, + 69936, 69939, 3894, 65543, 129183, 194842, 120793, 493, 118925, 43197, + 1717, 4228, 479, 10303, 74020, 0, 917935, 10335, 3520, 917932, 12490, + 64315, 92170, 127039, 12493, 6233, 42681, 1002, 12491, 83519, 64911, + 83521, 2096, 65120, 83516, 78219, 83270, 8378, 11632, 68838, 66213, + 63864, 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, + 66218, 92672, 66240, 78041, 66233, 8928, 983552, 7909, 66234, 11605, + 63759, 127308, 66208, 67339, 13002, 63803, 244, 11542, 12898, 12494, + 73761, 12492, 12669, 94070, 0, 74153, 120310, 126513, 120472, 4882, + 13040, 983362, 8612, 4885, 74053, 127830, 13042, 4880, 64662, 2429, 1360, + 248, 101018, 63793, 92394, 42358, 0, 7292, 101017, 63756, 42786, 66693, + 917598, 1870, 78040, 470, 78038, 78035, 78036, 70028, 78034, 4579, 69232, + 0, 12511, 74453, 12514, 983947, 70656, 7239, 7001, 8623, 94011, 125137, + 128048, 7378, 12512, 11615, 6104, 101011, 120900, 659, 6098, 100948, + 12234, 83511, 67358, 8311, 12510, 7669, 13039, 83509, 12513, 10202, + 12471, 0, 8747, 121385, 70193, 100946, 2323, 128147, 2319, 77917, 12477, + 77916, 2311, 7666, 4415, 237, 6281, 127280, 100940, 83020, 2309, 1312, + 8173, 83013, 12469, 83015, 78505, 64335, 10609, 83011, 78006, 9397, + 11524, 9395, 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, 9388, 4932, + 9386, 9383, 9384, 6740, 127990, 65451, 8185, 128931, 194843, 43024, + 43336, 67659, 2313, 74446, 7948, 9236, 77942, 128899, 0, 10570, 43473, + 6289, 10484, 83006, 83007, 11998, 12082, 10924, 3147, 83004, 66406, + 12524, 119081, 2310, 11818, 9381, 9382, 9379, 9380, 9377, 9378, 9375, + 9376, 1683, 9374, 983778, 9372, 12444, 74256, 0, 13016, 8210, 121062, + 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, 120630, 4155, 121090, + 120704, 42030, 5007, 12522, 43088, 0, 4951, 113826, 127217, 983202, 9922, + 43309, 11211, 12525, 195035, 12016, 65770, 9548, 67665, 403, 78230, + 11021, 194689, 125250, 11030, 43916, 92567, 65691, 63998, 1819, 10496, 0, + 194657, 119920, 0, 129143, 121072, 12506, 194605, 11146, 71477, 12500, + 44023, 12509, 64393, 78830, 3389, 10589, 6608, 11208, 120236, 78395, + 78394, 74069, 71446, 78391, 3608, 8281, 113732, 1107, 113745, 9076, 8862, + 69743, 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782, 43499, + 8546, 11553, 63995, 13177, 9043, 6303, 113664, 498, 64471, 77987, 92974, + 12529, 8042, 43899, 2344, 12528, 8031, 2414, 74506, 69719, 3231, 194569, + 6422, 66512, 69653, 12530, 2537, 78405, 41429, 12658, 13036, 65772, 0, + 78738, 41433, 4719, 469, 917810, 4363, 3313, 41428, 78407, 2023, 1772, + 78224, 78225, 65706, 10051, 64812, 78220, 74237, 9920, 12215, 82978, + 4931, 1951, 12497, 119363, 9607, 70368, 9663, 66838, 119634, 6503, 41110, + 125232, 1491, 66847, 129169, 127304, 41061, 70454, 194838, 121014, 65026, + 41993, 41509, 11045, 65028, 71181, 66476, 41108, 9738, 41995, 1075, 1958, + 12535, 41992, 41506, 127002, 41687, 127398, 120717, 127776, 9940, 100419, + 7692, 120680, 8008, 41131, 330, 8566, 65083, 6839, 9816, 126517, 12532, + 78550, 78546, 3508, 127058, 43235, 120351, 127298, 64139, 78231, 6411, + 12910, 67710, 66644, 13028, 6737, 12537, 100417, 43506, 64136, 12536, + 2350, 13029, 78233, 120914, 43897, 13030, 6702, 4527, 71250, 12538, + 100416, 129352, 65599, 65717, 9966, 93046, 4948, 12484, 4032, 121177, + 12623, 120207, 6207, 194726, 6117, 65930, 8412, 127183, 7438, 1296, 2325, + 41511, 121020, 10149, 74118, 0, 119625, 12481, 121280, 12488, 66713, 0, + 41556, 64414, 118802, 2354, 42619, 73766, 72757, 6295, 901, 41510, 7953, + 983465, 65032, 41513, 120209, 11927, 66584, 78559, 78560, 78557, 71459, + 83034, 67603, 848, 9868, 67220, 6424, 78568, 67226, 69922, 70190, 78563, + 78564, 2352, 67219, 893, 64576, 11289, 1407, 67973, 983193, 13026, 6762, + 78579, 70192, 13023, 8903, 9777, 66715, 1871, 8099, 127984, 129367, 1343, + 128438, 120784, 9325, 6818, 6283, 11738, 120210, 72436, 113713, 11741, + 129196, 75043, 9216, 8263, 11279, 83023, 83024, 83025, 13021, 64494, + 3136, 194758, 194757, 194760, 13022, 42737, 9956, 100746, 43954, 74552, + 10014, 0, 41260, 119340, 13020, 10024, 194764, 74583, 74340, 69681, 0, + 43001, 8029, 0, 983639, 983780, 3335, 119341, 9209, 9776, 120526, 128404, + 5215, 42644, 3333, 1632, 194751, 64849, 3342, 78582, 5363, 12957, 78581, + 4156, 0, 127329, 6421, 78039, 1611, 78589, 13018, 74257, 78588, 74542, + 3337, 4537, 67895, 11736, 983789, 68608, 6482, 4214, 73790, 11945, 43925, + 13046, 8838, 425, 4025, 10709, 78595, 2108, 2392, 13047, 92745, 125040, + 6819, 13049, 6499, 92243, 12424, 68614, 65827, 13050, 9924, 128378, 6507, 127919, 94073, 128069, 3277, 8929, 4947, 41055, 0, 194722, 194721, 194724, 13045, 64626, 66034, 7751, 194727, 8371, 121036, 3997, 12806, 8768, 13044, 0, 12420, 4024, 128000, 41054, 1078, 9757, 69736, 41057, - 68307, 917842, 0, 0, 983791, 92210, 92411, 129303, 41496, 0, 9165, 1572, - 11911, 124990, 118842, 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, - 5831, 0, 120865, 13043, 8056, 70108, 65681, 208, 127382, 41514, 0, - 121048, 983884, 10699, 6408, 92227, 7825, 5661, 82972, 82973, 3603, - 41109, 2398, 3548, 82969, 82970, 119933, 82964, 3115, 9918, 127823, 8294, - 42912, 0, 127287, 194726, 4876, 65804, 0, 0, 43468, 121221, 41558, 41471, - 73950, 8158, 9944, 41472, 120298, 13051, 78689, 3143, 194674, 6701, - 41559, 1896, 65215, 13052, 194680, 5665, 78594, 119071, 7025, 63974, 0, - 74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382, 1564, 73924, 1121, - 78319, 63959, 0, 9942, 13231, 983578, 64752, 4732, 194666, 11596, 78142, - 65187, 1626, 63983, 10110, 64772, 42024, 6420, 42028, 92294, 10509, 2795, - 4910, 129193, 69231, 64753, 6275, 93957, 118830, 63978, 11044, 3229, - 6423, 42774, 0, 0, 68526, 12823, 2331, 127788, 7085, 6137, 0, 7524, - 120721, 917809, 8346, 128438, 8338, 128315, 65043, 77982, 822, 70412, - 9903, 64721, 42722, 69877, 82956, 78655, 66882, 82959, 78484, 41265, - 5311, 1795, 965, 118791, 10587, 43962, 11278, 78632, 74111, 128095, - 12946, 121076, 71921, 120349, 6294, 3144, 113706, 127967, 65019, 74078, - 73990, 65111, 983960, 748, 41067, 2330, 535, 3148, 12375, 78799, 194629, - 10556, 2475, 12388, 4889, 8968, 67863, 3593, 74076, 82949, 2342, 82951, - 82944, 65206, 4894, 82947, 4890, 121059, 64433, 581, 4893, 42929, 6571, - 65545, 4888, 4157, 78048, 78049, 64651, 78047, 0, 10119, 6415, 42893, 0, - 69702, 983937, 0, 11375, 64746, 2332, 78063, 412, 78061, 42928, 42880, - 43587, 121098, 0, 0, 70461, 65197, 78066, 12203, 78064, 78065, 8913, - 65854, 4875, 65811, 75024, 120389, 71854, 9344, 8826, 92916, 120395, - 13104, 67828, 11997, 120393, 78075, 0, 3134, 83096, 65696, 72432, 121412, - 66217, 121190, 8334, 92755, 83207, 3449, 121264, 13100, 78414, 78413, - 83216, 66405, 70430, 83089, 83203, 127250, 1908, 120167, 4328, 10734, - 127014, 83198, 67825, 7804, 78272, 10811, 6250, 11339, 4914, 11367, - 83510, 78054, 4917, 74516, 74208, 64285, 4912, 5464, 127836, 83100, 2361, - 7971, 78072, 78073, 55243, 78071, 983575, 8086, 74317, 6707, 8319, 2312, - 40977, 10960, 40962, 8305, 12573, 71131, 40980, 983964, 13202, 127816, - 12582, 78282, 983048, 69856, 42438, 55221, 6288, 78280, 127946, 5653, - 42400, 10891, 7698, 5658, 70401, 70039, 0, 70460, 4913, 71060, 128562, - 71333, 42326, 121119, 12728, 92685, 42478, 2327, 0, 12563, 42287, 12705, - 120829, 83081, 12588, 8821, 6153, 2867, 83085, 66312, 698, 83076, 83087, - 10356, 70017, 128570, 651, 12641, 83138, 125098, 120710, 129064, 41552, - 65115, 78465, 78467, 78463, 74905, 127516, 78461, 92960, 66927, 64945, - 4716, 43277, 120932, 78474, 12340, 120568, 120928, 194700, 55264, 41211, - 120676, 8703, 5462, 83195, 83185, 10101, 0, 70049, 8479, 4151, 41933, - 83189, 0, 66254, 120821, 68497, 0, 128654, 113799, 83159, 74050, 42651, - 127371, 0, 0, 83225, 83218, 12278, 75011, 128405, 0, 2700, 12576, 7842, - 12899, 83155, 0, 2699, 129304, 73845, 2985, 83149, 68648, 83146, 12192, - 119314, 0, 66489, 9827, 119310, 8609, 119308, 67426, 119306, 11481, - 41210, 119305, 0, 35, 70838, 67431, 66694, 68479, 78477, 67428, 43596, - 6090, 64257, 7812, 10534, 0, 78485, 73848, 67975, 4272, 78321, 40967, - 40964, 917825, 12704, 78487, 43306, 0, 64497, 12138, 7930, 0, 2292, - 68216, 194871, 121390, 5244, 4189, 92697, 67596, 127504, 4188, 1879, - 70463, 968, 0, 43743, 0, 8873, 2279, 127100, 917827, 65555, 12574, 0, - 92749, 92753, 74490, 127099, 11838, 75001, 0, 0, 42682, 12578, 12720, 0, - 41227, 0, 12346, 127101, 64848, 69950, 917950, 7251, 0, 120382, 118850, + 68307, 917842, 127897, 0, 983791, 92210, 72735, 129303, 41496, 194574, + 9165, 1572, 11911, 124990, 118842, 2346, 13270, 8958, 983416, 9646, 3773, + 43183, 6401, 5831, 194723, 120865, 13043, 8056, 70108, 65681, 208, + 127382, 41514, 121124, 121048, 983884, 10699, 6408, 92227, 7825, 5661, + 82972, 82973, 3603, 41109, 2398, 3548, 82969, 82970, 119933, 82964, 3115, + 9918, 72723, 8294, 42912, 194745, 125185, 126483, 4876, 65804, 0, 100583, + 43468, 121221, 41558, 41471, 73950, 8158, 9944, 41472, 120298, 13051, + 78689, 3143, 194674, 6701, 41559, 1896, 65215, 13052, 119930, 5665, + 78594, 83129, 7025, 63974, 100464, 74352, 74161, 4154, 9863, 43550, + 12310, 5662, 42382, 1564, 73924, 1121, 78319, 63959, 983184, 9942, 13231, + 983250, 64752, 4732, 194666, 11596, 78142, 65187, 1626, 63983, 10110, + 64772, 42024, 6420, 42028, 92294, 10509, 2795, 4910, 129193, 69231, + 64753, 6275, 93957, 118830, 63978, 11044, 3229, 6423, 42774, 100455, 0, + 68526, 12823, 2331, 127788, 7085, 6137, 0, 7524, 120721, 113703, 8346, + 78802, 8338, 128315, 65043, 77982, 822, 70412, 9903, 64721, 42722, 69877, + 82956, 78655, 66882, 82959, 78484, 41265, 5311, 1795, 965, 118791, 10587, + 43962, 11278, 78632, 74111, 128095, 12946, 121076, 71921, 120349, 6294, + 3144, 113706, 127967, 65019, 74078, 73990, 65111, 917954, 748, 41067, + 2330, 535, 3148, 12375, 78799, 129313, 10556, 2475, 12388, 4889, 8968, + 67863, 3593, 74076, 72750, 2342, 82951, 82944, 65206, 4894, 82947, 4890, + 121059, 64433, 581, 4893, 42929, 6571, 65545, 4888, 4157, 78048, 70735, + 64651, 78047, 917806, 10119, 6415, 42893, 983068, 69702, 983937, 0, + 11375, 64746, 2332, 78063, 412, 78061, 42928, 42880, 43587, 121098, 0, 0, + 70461, 65197, 78066, 12203, 78064, 78065, 8913, 65854, 4875, 65811, + 75024, 120389, 71854, 9344, 8826, 92916, 120395, 13104, 67828, 11997, + 120393, 78075, 0, 3134, 83096, 65696, 72432, 100631, 66217, 121190, 8334, + 92755, 83207, 3449, 83214, 13100, 78414, 78413, 83216, 66405, 70430, + 83089, 83203, 127250, 1908, 120167, 4328, 10734, 127014, 70709, 67825, + 7804, 78272, 10811, 6250, 11339, 4914, 11367, 83510, 78054, 4917, 70686, + 72816, 64285, 4912, 5464, 127836, 83100, 2361, 7971, 78072, 78073, 55243, + 78071, 194693, 8086, 74317, 6707, 8319, 2312, 40977, 10960, 40962, 8305, + 12573, 71131, 40980, 983964, 13202, 127816, 12582, 78282, 983048, 69856, + 42438, 55221, 6288, 78280, 127946, 5653, 42400, 10891, 7698, 5658, 70401, + 70039, 0, 70460, 4913, 71060, 128562, 71333, 42326, 121119, 12728, 92685, + 42478, 2327, 0, 12563, 42287, 12705, 100483, 83081, 12588, 8821, 6153, + 2867, 83085, 66312, 698, 83076, 83087, 10356, 70017, 128570, 651, 12641, + 72809, 125098, 100639, 129064, 41552, 65115, 78465, 78467, 78463, 74905, + 127516, 78461, 92960, 66927, 64945, 4716, 43277, 72745, 78474, 12340, + 120568, 70721, 70719, 55264, 41211, 120676, 8703, 5462, 83195, 83185, + 10101, 120441, 70049, 8479, 4151, 41933, 83189, 0, 66254, 120821, 68497, + 0, 128654, 113799, 83159, 74050, 42651, 127371, 0, 0, 83225, 83218, + 12278, 70716, 128405, 0, 2700, 12576, 7842, 12899, 83155, 0, 2699, + 129304, 72718, 2985, 83149, 68648, 83146, 12192, 119314, 129062, 66489, + 9827, 119310, 8609, 119308, 67426, 119306, 11481, 41210, 119305, 125207, + 35, 70838, 67431, 66694, 68479, 78477, 67428, 43596, 6090, 64257, 7812, + 10534, 0, 78485, 73848, 67975, 4272, 78321, 40967, 40964, 124983, 12704, + 78487, 43306, 0, 64497, 12138, 7930, 0, 2292, 68216, 194871, 72737, 5244, + 4189, 92697, 67596, 127504, 4188, 1879, 70463, 968, 0, 43743, 983685, + 8873, 2279, 127100, 917827, 65555, 12574, 121103, 92749, 92753, 74490, + 127099, 11838, 66787, 0, 120664, 42682, 12578, 12720, 983698, 41227, + 72765, 12346, 127101, 64848, 69950, 917950, 7251, 113792, 120382, 118850, 119141, 128461, 66015, 67332, 959, 8885, 12564, 66457, 78808, 9469, 9632, - 92231, 74761, 64323, 127335, 128842, 0, 11132, 310, 120924, 41281, 10976, - 0, 71325, 128364, 74266, 10054, 6497, 8574, 917823, 9012, 19958, 74420, - 65089, 13215, 12730, 65163, 64260, 374, 43195, 816, 92783, 0, 83191, - 41934, 7465, 74615, 92752, 127895, 4715, 6101, 71089, 41936, 82967, 4879, - 43965, 65446, 0, 307, 127147, 9585, 5374, 127962, 128059, 0, 129189, - 126618, 120390, 74953, 65567, 120614, 1929, 120984, 12142, 194696, 12236, - 41419, 194618, 120610, 12982, 75003, 5378, 75004, 120957, 41421, 75005, - 4462, 0, 126599, 128092, 821, 0, 2498, 5800, 120157, 67758, 1760, 2421, - 4469, 2324, 828, 3611, 78400, 757, 1185, 0, 78770, 43597, 10628, 74808, - 68849, 7999, 43971, 11217, 121224, 10634, 10942, 7713, 2348, 0, 64374, - 4380, 128284, 83061, 9982, 64324, 41240, 862, 64468, 78462, 1810, 3673, - 5137, 194617, 0, 7277, 65622, 65069, 7566, 64688, 67143, 194592, 74957, - 43912, 128385, 4748, 92228, 129185, 194601, 42260, 5871, 119075, 121278, - 74576, 44019, 194720, 128189, 3967, 71098, 13137, 8775, 127945, 0, 2963, - 917785, 8410, 4454, 723, 83084, 966, 4449, 92330, 92238, 75022, 7819, - 2320, 194589, 339, 4968, 194590, 120399, 8075, 55276, 83057, 8047, 0, - 78827, 12634, 41542, 78780, 7466, 6705, 12174, 42610, 124934, 74452, - 983763, 1584, 66645, 6045, 6729, 120640, 65218, 11559, 194983, 78062, - 7537, 124991, 11370, 125093, 10330, 78798, 10394, 92236, 74194, 0, - 127929, 9780, 0, 11117, 74993, 77950, 67091, 7074, 92648, 194579, 194582, - 11414, 68781, 2531, 13034, 129159, 0, 4211, 1259, 7517, 70866, 70198, - 83122, 40996, 13037, 7092, 641, 5219, 83125, 194566, 11064, 41129, - 121253, 42850, 13035, 9075, 92387, 5466, 74293, 74530, 64098, 65793, - 4535, 121267, 4271, 78417, 127059, 6769, 41410, 127257, 64262, 6767, - 41407, 66273, 917816, 6755, 118864, 9046, 120886, 126608, 70830, 0, - 83232, 0, 67675, 983694, 83234, 121254, 64338, 2563, 13033, 247, 83229, - 0, 12338, 4651, 67355, 11270, 0, 74630, 11933, 70107, 0, 41903, 43447, - 11001, 73827, 42255, 83243, 83238, 69821, 41905, 67350, 0, 10775, 9793, - 5009, 128774, 42269, 64587, 983063, 42535, 69812, 64529, 41408, 42853, - 3877, 120795, 42674, 8147, 43566, 119021, 67342, 10236, 65918, 43782, - 78769, 78060, 64506, 69652, 118921, 4747, 83251, 69844, 43200, 5832, - 71208, 83250, 5141, 42600, 71866, 43203, 127208, 120129, 43286, 0, - 128211, 43778, 7657, 41305, 71132, 43781, 11303, 65547, 128609, 7031, - 859, 128488, 83262, 83237, 6059, 126985, 55235, 194817, 8535, 128638, - 65196, 125084, 66032, 11488, 120481, 120786, 42233, 64140, 9946, 7667, - 194792, 11822, 128591, 11135, 983600, 0, 1788, 1579, 120482, 71298, 0, - 983461, 0, 9028, 119571, 69234, 71061, 92545, 1285, 64882, 41242, 70086, - 83111, 12640, 83112, 7401, 0, 12625, 68198, 0, 70082, 3940, 41597, 43754, - 3396, 12642, 8665, 983610, 983609, 12630, 1653, 917815, 10153, 0, 6166, - 70825, 118989, 129409, 8815, 66673, 65046, 9285, 913, 42259, 11180, - 119318, 2142, 68454, 42485, 94012, 7878, 8211, 42293, 64377, 120478, - 92643, 121118, 194673, 12032, 0, 9725, 983491, 78431, 5263, 12818, 78430, - 41939, 10022, 65387, 78419, 42777, 10139, 980, 43698, 65386, 2208, 68848, - 43701, 43198, 7184, 92542, 128423, 128875, 10085, 74979, 0, 67394, 6634, - 92373, 125085, 83413, 8072, 119321, 43700, 0, 8872, 7783, 917991, 12398, - 8237, 0, 0, 12395, 0, 126977, 74891, 9914, 2217, 92323, 73975, 6367, - 6351, 66688, 92740, 68766, 0, 64735, 41243, 92199, 7808, 1829, 126541, - 41937, 4358, 43272, 6353, 0, 0, 120422, 93045, 1710, 120140, 0, 65607, - 67234, 49, 6627, 0, 6258, 10683, 78672, 9741, 78329, 5649, 78441, 43443, - 64418, 1643, 65213, 8405, 3470, 67244, 13213, 42452, 78331, 78013, 78445, - 125124, 1072, 78457, 78452, 78454, 6576, 41988, 41132, 65675, 1080, - 70824, 9886, 55225, 1101, 68404, 12309, 55227, 71082, 12632, 1086, 1869, - 78685, 7680, 0, 65458, 120714, 12639, 3380, 8123, 1091, 12638, 7977, - 4501, 41099, 0, 66309, 120141, 92758, 1494, 113716, 126613, 0, 11693, - 71255, 10494, 92655, 65872, 12363, 11386, 113727, 0, 0, 78771, 64582, 0, - 73794, 67395, 8022, 120989, 120462, 74106, 12413, 66883, 917994, 93035, - 75007, 5570, 1881, 7210, 120425, 1012, 43752, 0, 120709, 7208, 66442, + 92231, 74761, 64323, 127335, 74102, 2266, 11132, 310, 120924, 41281, + 10976, 101069, 71325, 125279, 74266, 10054, 6497, 8574, 101087, 9012, + 19958, 74420, 65089, 13215, 12730, 65163, 64260, 374, 43195, 816, 92783, + 0, 83191, 41934, 7465, 74615, 92752, 70666, 4715, 6101, 71089, 41936, + 82967, 4879, 43965, 65446, 0, 307, 127147, 9585, 5374, 127962, 128059, + 100472, 129189, 100471, 120390, 70727, 65567, 100964, 1929, 120984, + 12142, 194696, 12236, 41419, 194618, 120610, 12982, 75003, 5378, 75004, + 120957, 41421, 75005, 4462, 0, 126599, 128092, 821, 125030, 2498, 5800, + 100834, 67758, 1760, 2421, 4469, 2324, 828, 3611, 78400, 757, 1185, + 128274, 78770, 43597, 10628, 74808, 68849, 7999, 43971, 11217, 100849, + 10634, 10942, 7713, 2348, 0, 64374, 4380, 128284, 83061, 9982, 64324, + 41240, 862, 64468, 78462, 1810, 3673, 5137, 194617, 120481, 7277, 65622, + 65069, 7566, 64688, 67143, 194592, 74957, 43912, 100825, 4748, 92228, + 100826, 100829, 42260, 5871, 119075, 121278, 74576, 44019, 194720, + 128189, 3967, 71098, 13137, 8775, 127945, 0, 2963, 917785, 8410, 4454, + 723, 83084, 966, 4449, 92330, 92238, 75022, 7819, 2320, 129312, 339, + 4968, 194590, 120399, 8075, 55276, 83057, 8047, 195050, 78827, 12634, + 41542, 78780, 7466, 6705, 12174, 42610, 124934, 74452, 120482, 1584, + 66645, 6045, 6729, 78417, 65218, 11559, 194983, 78062, 7537, 124991, + 11370, 125093, 10330, 78798, 10394, 92236, 74194, 100808, 127929, 9780, + 0, 11117, 74993, 77950, 67091, 7074, 92648, 194579, 100495, 11414, 68781, + 2531, 13034, 100819, 128523, 4211, 1259, 7517, 70866, 70198, 83122, + 40996, 13037, 7092, 641, 5219, 83125, 194566, 11064, 41129, 100496, + 42850, 13035, 9075, 92387, 5466, 74293, 74530, 64098, 65793, 4535, + 100491, 4271, 72881, 100798, 6769, 41410, 100799, 64262, 6767, 41407, + 66273, 917816, 6755, 118864, 9046, 101086, 72803, 70830, 0, 83232, 0, + 67675, 983694, 83234, 100534, 64338, 2563, 13033, 247, 83229, 100791, + 12338, 4651, 67355, 11270, 0, 74630, 11933, 70107, 0, 41903, 43447, + 11001, 73827, 42255, 83243, 83238, 69821, 41905, 67350, 100806, 10775, + 9793, 5009, 128774, 42269, 64587, 983063, 42535, 69812, 64529, 41408, + 42853, 3877, 120795, 42674, 8147, 43566, 119021, 67342, 10236, 65918, + 43782, 78769, 78060, 64506, 69652, 100781, 4747, 83251, 69844, 43200, + 5832, 71208, 83250, 5141, 42600, 71866, 43203, 127208, 100541, 43286, + 126494, 120789, 43778, 7657, 41305, 71132, 43781, 11303, 65547, 128609, + 7031, 859, 92313, 83262, 83237, 6059, 126985, 55235, 194817, 8535, + 128638, 65196, 122910, 66032, 11488, 72838, 100788, 42233, 64140, 9946, + 7667, 100549, 11822, 128349, 11135, 983600, 0, 1788, 1579, 100507, 71298, + 0, 917537, 983839, 9028, 119571, 69234, 71061, 92545, 1285, 64882, 41242, + 70086, 83111, 12640, 83112, 7401, 100767, 12625, 68198, 83184, 70082, + 3940, 41597, 7296, 3396, 12642, 8665, 983610, 120208, 12630, 1653, + 100567, 10153, 100777, 6166, 70825, 118989, 129409, 8815, 66673, 65046, + 9285, 913, 42259, 11180, 119318, 2142, 68454, 42485, 94012, 7878, 8211, + 42293, 64377, 120478, 92643, 121118, 194673, 12032, 100771, 9725, 100773, + 78431, 5263, 12818, 78430, 41939, 10022, 65387, 78419, 42777, 10139, 980, + 43698, 65386, 2208, 68848, 43701, 43198, 7184, 92542, 128423, 100527, + 10085, 74979, 0, 67394, 6634, 92373, 125085, 83413, 8072, 100752, 43700, + 128202, 7304, 7783, 917991, 12398, 8237, 194893, 0, 12395, 120279, + 126977, 74891, 9914, 2217, 92323, 73975, 6367, 6351, 66688, 92740, 68766, + 983848, 64735, 41243, 92199, 7808, 1829, 126541, 41937, 4358, 43272, + 6353, 0, 0, 120422, 93045, 1710, 120140, 0, 65607, 67234, 49, 6627, + 983120, 6258, 10683, 78672, 9741, 78329, 5649, 78441, 43443, 64418, 1643, + 65213, 8405, 3470, 67244, 13213, 42452, 78331, 78013, 78445, 125124, + 1072, 78457, 78452, 78454, 6576, 41988, 41132, 65675, 1080, 70824, 9886, + 55225, 1101, 68404, 12309, 55227, 71082, 12632, 1086, 1869, 78685, 7680, + 101093, 65458, 120714, 12639, 3380, 8123, 1091, 12638, 7977, 4501, 41099, + 0, 66309, 120141, 92758, 1494, 113716, 126613, 0, 11693, 71255, 10494, + 92655, 65872, 12363, 11386, 113727, 128789, 0, 78771, 64582, 101098, + 73794, 67395, 8022, 101099, 120462, 74106, 12413, 66883, 917994, 93035, + 75007, 5570, 1881, 7210, 120425, 1012, 43752, 0, 101094, 7208, 66442, 5569, 195007, 42339, 92997, 6063, 67888, 69981, 119594, 6053, 65602, 0, - 92201, 64727, 9160, 70301, 0, 92905, 92180, 10503, 70387, 3423, 3870, - 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 92204, 983116, 0, - 74961, 78333, 120117, 120118, 120099, 92385, 65087, 5571, 3674, 9740, - 9121, 5568, 71464, 120108, 42085, 10107, 42159, 42870, 113700, 589, 7050, - 983800, 43281, 10233, 41263, 66251, 65729, 66253, 126497, 74099, 42645, - 92331, 121358, 8583, 121123, 5847, 6928, 128074, 0, 0, 0, 0, 66592, - 12204, 917962, 19966, 77856, 42561, 120626, 129170, 66854, 8120, 70311, - 194585, 0, 70308, 41063, 120417, 10664, 0, 8369, 0, 4551, 194964, 3369, - 74971, 121094, 9673, 66334, 65580, 10478, 118960, 12517, 557, 9457, - 12034, 68496, 6355, 12519, 41004, 0, 74937, 74094, 917888, 125060, 77970, - 92171, 127219, 128175, 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, - 92281, 10441, 73836, 0, 43990, 5493, 0, 74319, 0, 66635, 12019, 0, 1618, - 0, 120474, 9645, 10430, 126636, 5853, 13063, 10363, 983898, 12956, - 113666, 120729, 11314, 917582, 12060, 128648, 78392, 12826, 6329, 0, - 10514, 65517, 74395, 2707, 8309, 0, 127054, 78398, 43570, 2697, 43420, - 78396, 68247, 2695, 42171, 70809, 68334, 0, 67617, 118971, 0, 2693, - 12125, 12766, 120409, 1164, 113729, 70283, 41918, 77849, 67150, 8687, - 66009, 12178, 7053, 92540, 7469, 0, 5248, 12218, 69988, 6427, 42884, - 41123, 11176, 0, 42873, 41126, 9991, 41128, 74371, 127031, 983932, 9873, - 0, 42877, 7994, 64762, 2053, 42843, 6591, 9340, 128841, 1589, 128691, - 296, 67712, 78852, 121409, 67841, 74370, 128504, 8922, 128068, 43829, - 12700, 74836, 0, 12579, 0, 12575, 6416, 5656, 2891, 13262, 65590, 5299, - 78837, 11473, 5449, 1252, 127328, 78404, 41431, 74369, 65373, 5295, - 917569, 68320, 1223, 1642, 174, 78399, 883, 4161, 12691, 42603, 41413, - 3212, 41459, 3211, 74810, 41425, 74598, 78412, 74450, 9728, 3846, 8070, - 6150, 6636, 4370, 128619, 129158, 74178, 74587, 74117, 195094, 0, 113748, - 4986, 12189, 127512, 67648, 120499, 94001, 4257, 12104, 71176, 6220, - 9004, 65561, 983881, 77949, 0, 68135, 917576, 77946, 83453, 69679, 69684, - 9890, 78561, 12971, 78453, 92556, 73898, 11979, 70051, 71897, 83451, 0, - 9635, 12600, 8871, 67366, 68491, 0, 6469, 74227, 118900, 65304, 4679, - 10230, 64300, 64867, 3427, 4240, 67376, 67375, 67374, 67373, 42916, - 129155, 128279, 67377, 7282, 78728, 65733, 4445, 67372, 67371, 3494, - 67369, 6555, 129148, 77976, 0, 0, 78566, 0, 983189, 65898, 983246, 65312, - 5447, 0, 12895, 65593, 4010, 83154, 41106, 74357, 64448, 93994, 41105, - 74114, 65820, 6232, 68233, 126625, 0, 43608, 119091, 78118, 6538, 4335, + 92201, 64727, 9160, 70301, 195071, 92905, 92180, 10503, 70387, 3423, + 3870, 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 92204, + 983116, 121084, 74961, 78333, 119132, 120118, 120099, 92385, 65087, 5571, + 3674, 9740, 9121, 5568, 71464, 120108, 42085, 10107, 42159, 42870, + 113700, 589, 7050, 983800, 43281, 10233, 41263, 66251, 65729, 66253, + 126497, 74099, 42645, 92331, 121358, 8583, 121123, 5847, 6928, 128074, 0, + 0, 0, 0, 66592, 12204, 917962, 19966, 77856, 42561, 120626, 129170, + 66854, 8120, 70311, 129154, 0, 70308, 41063, 120417, 10664, 0, 8369, + 128278, 4551, 122912, 3369, 74971, 121094, 9673, 66334, 65580, 10478, + 118960, 12517, 557, 9457, 12034, 68496, 6355, 12519, 41004, 0, 74937, + 74094, 124948, 100478, 77970, 92171, 127219, 125254, 12111, 3927, 119880, + 12515, 1474, 67893, 5492, 6923, 92281, 10441, 66798, 983831, 43990, 5493, + 983618, 71130, 917766, 66635, 12019, 0, 1618, 0, 120474, 9645, 10430, + 126636, 5853, 13063, 10363, 983898, 12956, 113666, 120729, 11314, 125271, + 12060, 128648, 78392, 12826, 6329, 195097, 10514, 65517, 74395, 2707, + 8309, 0, 127054, 78398, 43570, 2697, 43420, 78396, 68247, 2695, 42171, + 70809, 68334, 983444, 67617, 118971, 0, 2693, 12125, 12766, 120409, 1164, + 113729, 70283, 41918, 77849, 67150, 8687, 66009, 12178, 7053, 92540, + 7469, 72795, 5248, 12218, 69988, 6427, 42884, 41123, 11176, 0, 42873, + 41126, 9991, 41128, 70703, 127031, 126508, 9873, 0, 42877, 7994, 64762, + 2053, 42843, 6591, 9340, 128841, 1589, 128691, 296, 67712, 78852, 121409, + 67841, 71314, 128504, 8922, 128068, 43829, 12700, 74836, 0, 12579, 0, + 12575, 6416, 5656, 2891, 13262, 65590, 5299, 70732, 11473, 5449, 1252, + 127328, 78404, 41431, 74369, 65373, 5295, 917569, 68320, 1223, 1642, 174, + 78399, 883, 4161, 12691, 42603, 41413, 3212, 41459, 3211, 74810, 41425, + 74598, 78412, 74450, 9728, 3846, 8070, 6150, 6636, 4370, 128619, 129158, + 74178, 74587, 74117, 195094, 0, 113748, 4986, 12189, 119599, 67648, + 120499, 94001, 4257, 12104, 71176, 6220, 9004, 65561, 983881, 77949, 0, + 68135, 917576, 77946, 83453, 69679, 69684, 9890, 78561, 12971, 78453, + 92556, 73898, 11979, 70051, 71897, 83451, 127187, 9635, 12600, 8871, + 67366, 68491, 0, 6469, 74227, 118900, 65304, 4679, 10230, 64300, 64867, + 3427, 4240, 67376, 67375, 67374, 67373, 42916, 129155, 127489, 67377, + 7282, 78728, 65733, 4445, 67372, 67371, 3494, 67369, 3416, 129148, 77976, + 195010, 983192, 78566, 0, 127047, 65898, 983246, 65312, 5447, 100895, + 12895, 64382, 4010, 83154, 41106, 74357, 64448, 93994, 41105, 70677, + 65820, 6232, 68233, 101104, 101103, 43608, 101105, 78118, 6538, 4335, 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, 12155, 983674, - 42878, 11500, 67405, 128152, 74578, 0, 65832, 128667, 0, 70789, 67333, - 119230, 4586, 0, 350, 10951, 0, 509, 67336, 983879, 92307, 0, 0, 5133, - 67382, 0, 9500, 0, 4957, 64741, 2422, 2212, 983080, 67381, 67380, 2496, - 11516, 944, 67817, 3890, 12168, 1438, 67813, 68335, 70003, 41947, 1220, - 120828, 74946, 70854, 74058, 1571, 42630, 41949, 42805, 8270, 943, 564, - 0, 312, 41980, 983944, 128295, 70797, 8877, 269, 4429, 6272, 9617, 1460, - 6954, 78657, 41120, 65121, 10862, 6060, 41119, 41416, 74355, 4173, 0, - 82948, 0, 1906, 121169, 11532, 74073, 127338, 0, 1985, 6296, 9582, 75071, - 64287, 128406, 78115, 11428, 1730, 2457, 917808, 19918, 10469, 0, 68088, - 7703, 8840, 8035, 120711, 0, 92230, 983357, 6129, 128437, 78586, 128268, - 0, 7874, 8681, 119092, 11206, 13136, 0, 0, 70102, 63886, 70450, 9605, - 71308, 13220, 67348, 67354, 5514, 74960, 9228, 67349, 67356, 67346, 5240, - 9811, 10012, 3096, 0, 0, 74526, 66676, 65873, 0, 128179, 0, 9501, 120832, - 1272, 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 68759, - 70312, 195085, 68820, 12193, 70400, 127240, 121373, 0, 983355, 19935, - 120733, 92162, 68801, 127955, 83133, 93057, 5275, 120195, 128632, 8637, - 43682, 0, 3789, 63880, 11471, 43554, 65862, 11474, 66332, 66603, 68784, - 2426, 12042, 92194, 983911, 9537, 3961, 12115, 77953, 2605, 4500, 64561, - 55224, 4981, 74644, 0, 41646, 11667, 42686, 74991, 42362, 64686, 4499, - 41649, 7589, 128776, 0, 3237, 0, 66895, 68296, 8541, 78298, 70034, 41866, - 0, 983814, 94056, 11174, 69924, 43555, 2823, 9559, 10060, 41940, 8299, - 41945, 7132, 41941, 3308, 7190, 64880, 8614, 65220, 41493, 128679, 41699, - 10762, 43780, 12999, 119245, 128494, 8106, 4128, 0, 6274, 4494, 983082, - 4012, 10395, 983591, 43633, 65447, 78260, 120973, 11004, 695, 739, 696, - 7611, 121073, 42755, 74802, 9227, 7506, 7510, 69937, 691, 738, 7511, - 7512, 7515, 3868, 688, 41847, 690, 2548, 737, 974, 8003, 7406, 127353, - 120166, 128688, 3985, 66425, 65860, 41851, 7051, 69777, 4682, 71873, - 12809, 6406, 4685, 92505, 10879, 10347, 4680, 6341, 0, 3851, 8132, 74325, - 119263, 120855, 127948, 41958, 119176, 917908, 194855, 0, 42657, 71075, - 7643, 42373, 11714, 67587, 43568, 983175, 11717, 7650, 10594, 64951, - 7647, 7649, 128155, 7646, 0, 78082, 9651, 126475, 3891, 127205, 0, 2337, + 42878, 11500, 67405, 128152, 74578, 0, 65832, 126978, 0, 70789, 67333, + 119230, 4586, 194922, 350, 10951, 101081, 509, 67336, 100904, 92307, + 100903, 0, 5133, 67382, 128827, 9500, 100906, 4957, 64741, 2422, 2212, + 983080, 67381, 67380, 2496, 11516, 944, 67817, 3890, 12168, 1438, 67813, + 68335, 70003, 41947, 1220, 120828, 74946, 70854, 74058, 1571, 42630, + 41949, 42805, 8270, 943, 564, 0, 312, 41980, 983944, 128295, 70797, 8877, + 269, 4429, 6272, 9617, 1460, 6954, 78657, 41120, 65121, 10862, 6060, + 41119, 41416, 74355, 4173, 0, 82948, 0, 1906, 121169, 11532, 74073, + 101068, 101067, 1985, 6296, 9582, 75071, 64287, 128406, 70717, 11428, + 1730, 2457, 917808, 19918, 10469, 101076, 68088, 7703, 8840, 8035, + 120711, 194602, 92230, 983357, 6129, 127065, 78586, 128268, 194965, 7874, + 8681, 72800, 11206, 13136, 0, 129305, 70102, 63886, 70450, 9605, 71308, + 13220, 67348, 67354, 5514, 74960, 9228, 67349, 67356, 67346, 5240, 9811, + 10012, 3096, 917809, 0, 74526, 66676, 65873, 194608, 128179, 100918, + 9501, 120275, 1272, 64536, 65465, 64654, 7467, 100920, 1467, 10158, + 10040, 74096, 9519, 68759, 70312, 101052, 68820, 12193, 70400, 127240, + 121373, 72817, 983355, 19935, 120733, 92162, 68801, 100682, 83133, 93057, + 5275, 101063, 128632, 8637, 43682, 128576, 3789, 63880, 11471, 43554, + 65862, 11474, 66332, 66603, 68784, 2426, 12042, 92194, 121187, 9537, + 3961, 12115, 77953, 2605, 4500, 64561, 55224, 4981, 74644, 0, 41646, + 11667, 42686, 74991, 42362, 64686, 4499, 41649, 7589, 128776, 128271, + 3237, 0, 66895, 68296, 8541, 78298, 70034, 41866, 0, 127509, 94056, + 11174, 69924, 43555, 2823, 9559, 10060, 41940, 8299, 41945, 7132, 41941, + 3308, 7190, 64880, 8614, 65220, 41493, 128679, 41699, 10762, 43780, + 12999, 119245, 70689, 8106, 4128, 983751, 6274, 4494, 983082, 4012, + 10395, 983591, 43633, 65447, 78260, 120973, 11004, 695, 739, 696, 7611, + 121073, 42755, 74802, 9227, 7506, 7510, 69937, 691, 738, 7511, 7512, + 7515, 3868, 688, 41847, 690, 2548, 737, 974, 8003, 7406, 127353, 120166, + 128688, 3985, 66425, 65860, 41851, 7051, 69777, 4682, 71873, 12809, 6406, + 4685, 92505, 10879, 10347, 4680, 6341, 125217, 3851, 8132, 74325, 119263, + 120855, 127948, 41958, 119176, 917908, 194855, 0, 42657, 71075, 7643, + 42373, 11714, 67587, 43568, 983175, 11717, 7650, 10594, 64951, 7647, + 7649, 128155, 7646, 0, 78082, 9651, 126475, 3891, 127205, 983803, 2337, 1735, 74324, 11134, 2363, 121008, 92443, 43561, 67706, 128032, 74146, 1860, 7495, 7580, 5812, 7497, 7584, 119140, 127853, 78753, 120347, 7727, - 0, 8498, 69818, 8949, 3065, 42719, 7135, 1569, 92375, 12534, 12124, 7690, - 0, 12533, 983796, 6418, 4543, 78086, 6969, 128444, 74800, 71051, 67974, - 10859, 128650, 983801, 63894, 120760, 12282, 66192, 983583, 74592, 8850, - 74275, 9238, 10617, 68063, 917909, 92625, 917801, 12791, 0, 94069, - 127843, 4447, 71065, 12793, 12900, 92377, 10950, 983449, 74639, 12790, - 41400, 119128, 66607, 12792, 42232, 119239, 1744, 12789, 10366, 12317, - 41310, 120730, 41399, 0, 0, 55258, 0, 12690, 127763, 0, 43672, 127840, - 41652, 2974, 9010, 11315, 983808, 278, 121204, 41405, 43871, 0, 10077, - 63853, 74557, 42586, 0, 0, 6002, 67335, 43553, 11189, 67338, 67337, - 12787, 41308, 7934, 65306, 120263, 120940, 94042, 8646, 128257, 77829, - 71360, 0, 6413, 6550, 113759, 1940, 2809, 43637, 220, 65193, 43551, - 10678, 10044, 68841, 128121, 983816, 68290, 6403, 5707, 10393, 127532, 0, - 66614, 0, 0, 0, 10297, 0, 3742, 67331, 3959, 0, 120466, 0, 2467, 68806, - 6003, 63844, 6663, 8040, 983220, 43758, 4182, 78171, 4676, 120501, 9210, - 0, 2510, 0, 10208, 78168, 92361, 11540, 43546, 6692, 6837, 41060, 128018, - 4668, 9083, 0, 0, 78144, 1559, 63831, 9677, 67340, 67347, 65256, 67345, - 67344, 983352, 983266, 365, 12056, 43027, 120423, 41716, 128236, 67352, - 67351, 5516, 2845, 7717, 8036, 41717, 67353, 544, 12045, 6278, 74632, - 5515, 129186, 120884, 983051, 65339, 43221, 2211, 0, 5517, 70116, 74225, - 74841, 67884, 128414, 67890, 67885, 67880, 67881, 67882, 67883, 120199, - 118883, 67879, 127188, 1902, 67887, 9638, 12976, 126546, 12483, 12368, - 41769, 42726, 41765, 7361, 6667, 67874, 7556, 67878, 74351, 11264, 989, - 42677, 67889, 93040, 1311, 128949, 4326, 11000, 63824, 13068, 10932, - 128880, 6917, 78155, 120837, 949, 77882, 917968, 6148, 8605, 42253, - 78177, 66906, 0, 42715, 71432, 70282, 983373, 63871, 0, 41796, 1269, - 6530, 121414, 65057, 70493, 5144, 12221, 42716, 68299, 4431, 4331, - 983729, 128675, 41834, 5279, 121362, 10336, 8312, 0, 42701, 92959, 0, - 78165, 66036, 70166, 120937, 6428, 42270, 983726, 983596, 43059, 42666, - 5256, 1067, 255, 12131, 128742, 9493, 74990, 41014, 11793, 194920, - 121195, 74394, 43460, 10653, 42723, 983854, 119632, 70427, 6560, 7016, - 74274, 69986, 43556, 3929, 67977, 6614, 2768, 92504, 9746, 5135, 11811, - 12796, 11953, 0, 69761, 5139, 346, 74303, 6305, 12795, 4675, 5168, 78552, + 983658, 8498, 69818, 8949, 3065, 42719, 7135, 1569, 92375, 12534, 12124, + 7690, 0, 12533, 983796, 6418, 4543, 78086, 6969, 128444, 74800, 71051, + 67974, 10859, 128650, 983801, 63894, 120760, 12282, 66192, 983583, 74592, + 8850, 74275, 9238, 10617, 68063, 917909, 92625, 917801, 12791, 128976, + 94069, 127843, 4447, 71065, 12793, 12900, 92377, 10950, 100878, 74639, + 12790, 41400, 119128, 66607, 12792, 42232, 119239, 1744, 12789, 10366, + 12317, 41310, 100865, 41399, 100822, 126649, 55258, 0, 12690, 120083, 0, + 43672, 127840, 41652, 2974, 9010, 11315, 119658, 278, 121204, 41405, + 43871, 100867, 10077, 63853, 70667, 42586, 917886, 74114, 6002, 67335, + 43553, 11189, 67338, 67337, 12787, 41308, 7934, 65306, 120263, 120940, + 94042, 8646, 128257, 77829, 71360, 0, 6413, 6550, 113759, 1940, 2809, + 43637, 220, 65193, 43551, 10678, 10044, 68841, 128121, 983350, 68290, + 6403, 5707, 10393, 127532, 0, 66614, 0, 122921, 127912, 10297, 195057, + 3742, 67331, 3959, 0, 120466, 0, 2467, 68806, 6003, 63844, 6663, 8040, + 983220, 43758, 4182, 78171, 4676, 120501, 9210, 0, 2510, 0, 10208, 78168, + 92361, 11540, 43546, 6692, 6837, 41060, 101097, 4668, 9083, 983244, 0, + 78144, 1559, 63831, 9677, 67340, 67347, 65256, 67345, 67344, 983352, + 983266, 365, 12056, 43027, 120423, 41716, 120258, 67352, 67351, 5516, + 2845, 7717, 8036, 41717, 67353, 544, 12045, 6278, 74632, 5515, 129186, + 120884, 983051, 65339, 43221, 2211, 120541, 5517, 70116, 74225, 74841, + 67884, 128414, 67890, 67885, 67880, 67881, 67882, 67883, 120199, 118883, + 67879, 121448, 1902, 67887, 9638, 12976, 74394, 12483, 12368, 41769, + 42726, 41765, 7361, 6667, 67874, 7556, 67878, 74351, 11264, 989, 42677, + 67889, 93040, 1311, 100882, 4326, 11000, 63824, 13068, 10932, 100643, + 6917, 78155, 120837, 949, 77882, 917968, 6148, 8605, 42253, 78177, 66906, + 100644, 42715, 71432, 70282, 100647, 63871, 128296, 41796, 1269, 6530, + 101049, 65057, 70493, 5144, 12221, 42716, 68299, 4431, 4331, 101045, + 128675, 41834, 5279, 121362, 10336, 8312, 0, 42701, 92959, 0, 78165, + 66036, 70166, 100387, 6428, 42270, 983726, 983163, 43059, 42666, 5256, + 1067, 255, 12131, 128742, 9493, 73894, 41014, 11793, 126467, 78740, + 70728, 43460, 10653, 42723, 125216, 100658, 70427, 6560, 7016, 74274, + 69986, 43556, 3929, 67977, 6614, 2768, 92504, 9746, 5135, 11811, 12796, + 11953, 127380, 69761, 5139, 346, 74303, 6305, 12795, 4675, 5168, 78552, 43845, 74315, 74361, 8253, 8817, 1136, 917931, 43563, 92232, 128914, - 66410, 7392, 8230, 9365, 71194, 127109, 983607, 66915, 128402, 4041, 0, + 66410, 7392, 8230, 9365, 71194, 127109, 194878, 66915, 128402, 4041, 0, 2357, 43240, 12786, 229, 43834, 119884, 44004, 7142, 119881, 12350, 65554, 119882, 71305, 119876, 12785, 63863, 43795, 7770, 10712, 64853, 12686, 43831, 42375, 65780, 124944, 66352, 10470, 71119, 11059, 10791, - 917944, 450, 119328, 127254, 10432, 12097, 5450, 64691, 1233, 0, 44009, + 72724, 450, 119328, 127254, 10432, 12097, 5450, 64691, 1233, 0, 44009, 78284, 66338, 66395, 917832, 1839, 118799, 983219, 10927, 1701, 983664, 2388, 41749, 41761, 5453, 8361, 119865, 895, 5444, 41763, 64889, 7143, - 92493, 78677, 983137, 92429, 69983, 66432, 8801, 3053, 4340, 983044, - 128013, 65812, 120675, 70001, 41824, 67985, 120203, 92600, 127053, 42700, - 194805, 127980, 194807, 78676, 92356, 194808, 127844, 0, 4493, 4336, - 129171, 2314, 43602, 78826, 119325, 194811, 42439, 64638, 42327, 43528, + 92493, 78677, 983137, 92429, 69983, 66432, 8801, 3053, 4340, 194849, + 125189, 65812, 100633, 70001, 41824, 67985, 120203, 92600, 127053, 42700, + 194805, 127403, 128040, 78676, 92356, 194808, 127844, 0, 4493, 4336, + 129171, 2314, 43602, 41808, 119325, 194811, 42439, 64638, 42327, 43528, 4489, 68750, 125116, 194793, 1912, 42385, 10306, 10370, 0, 194761, 8867, 10250, 10258, 2712, 1635, 71064, 1410, 78763, 983252, 118878, 983567, - 128715, 9919, 120528, 559, 128157, 41825, 121274, 74641, 4892, 74016, + 100988, 9919, 120528, 559, 128157, 41825, 121274, 74641, 4892, 74016, 121502, 6542, 41957, 128865, 5777, 127167, 759, 65749, 2079, 65248, - 12788, 64487, 64552, 93063, 10223, 42062, 121279, 0, 74246, 3668, 65754, + 12788, 64487, 64552, 93063, 10223, 42062, 100640, 0, 74246, 3668, 65754, 43560, 12226, 67991, 65149, 2340, 41959, 71463, 194785, 194788, 43618, - 65747, 10937, 2962, 0, 2321, 3587, 65745, 67236, 8921, 9952, 128941, 0, - 42714, 9951, 43409, 194770, 2949, 66012, 194775, 194774, 2958, 68359, - 41820, 2300, 2395, 120061, 9976, 120043, 120050, 71896, 68220, 128143, + 65747, 10937, 2962, 121171, 2321, 3587, 65745, 67236, 8921, 9952, 128941, + 0, 42714, 9951, 43409, 100668, 2949, 66012, 194582, 194774, 2958, 68359, + 41820, 2300, 2395, 120061, 9976, 100975, 120050, 71896, 68220, 128143, 42809, 42807, 70798, 66290, 10198, 4150, 64371, 8318, 41790, 67976, - 41898, 2360, 41794, 917942, 70796, 92163, 93033, 0, 2418, 983098, 2411, - 11336, 799, 63823, 10276, 10308, 10372, 917541, 41772, 42813, 2317, + 41898, 2360, 41794, 100663, 70796, 92163, 93033, 983648, 2418, 983098, + 2411, 11336, 799, 63823, 10276, 10308, 10372, 194604, 41772, 42813, 2317, 10260, 118980, 55284, 78686, 127177, 10384, 194794, 121147, 129111, 7753, - 2351, 6655, 64489, 69931, 70199, 77872, 4443, 42779, 230, 0, 68067, + 2351, 6655, 64489, 69931, 70199, 77872, 4443, 42779, 230, 127015, 68067, 43549, 4855, 42150, 65739, 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 78198, 2049, 10098, 917779, 74145, 127943, 10264, 10280, - 9184, 10376, 7013, 4467, 78684, 917554, 92260, 41887, 0, 4862, 9735, + 9184, 10376, 7013, 4467, 78684, 917554, 92260, 41887, 101025, 4862, 9735, 6537, 120591, 74286, 3914, 92178, 68823, 9065, 12961, 0, 120456, 92253, - 128204, 289, 128714, 4694, 11420, 4690, 0, 120514, 917978, 4693, 73893, - 42724, 69977, 4688, 120454, 128507, 0, 67994, 8238, 3110, 120162, 3565, - 120163, 6528, 78387, 43035, 69898, 218, 983850, 1520, 0, 4786, 983168, - 43225, 4602, 92400, 78167, 10088, 6548, 121157, 120156, 43978, 8988, - 8888, 92724, 74812, 69709, 983967, 10666, 0, 73902, 69740, 121436, 0, - 9975, 113704, 119902, 4689, 8932, 0, 65560, 119209, 74441, 78810, 0, 0, - 67987, 0, 128828, 0, 67989, 119029, 10065, 8207, 71900, 92613, 128011, - 121028, 662, 128720, 9244, 194863, 83183, 119261, 983430, 0, 120901, - 917838, 41929, 0, 71084, 66674, 41926, 69994, 120443, 10513, 64637, - 194862, 68013, 52, 13118, 6475, 195004, 83479, 12095, 10225, 4812, 92578, - 128486, 67992, 74085, 0, 3978, 128425, 917945, 74015, 11582, 92768, - 12281, 127043, 6544, 13241, 93961, 69782, 125014, 194860, 11765, 65258, - 10369, 0, 1585, 7192, 10249, 422, 1500, 2036, 986, 194859, 64394, 5781, - 5599, 64294, 2494, 120450, 4861, 74021, 64334, 78203, 127808, 0, 83444, - 65102, 8961, 65842, 10243, 10245, 71907, 120410, 0, 120453, 64821, 9478, - 2508, 92683, 0, 202, 128246, 74131, 1242, 65514, 121170, 63940, 121363, - 64533, 71883, 120446, 67842, 11990, 92405, 63939, 43375, 65440, 2504, 0, - 78671, 64829, 93020, 6943, 917934, 5859, 0, 2858, 983363, 74294, 983914, - 69239, 0, 67871, 12992, 2753, 1936, 70078, 67701, 2751, 12662, 2763, - 8953, 64701, 10731, 12922, 7052, 917839, 66424, 63992, 0, 63920, 74128, - 2856, 119910, 47, 69908, 71053, 65858, 194806, 0, 67829, 7899, 0, 8417, - 43798, 7072, 74195, 0, 4033, 121289, 43992, 121081, 0, 212, 64600, 1903, - 12320, 83484, 120894, 194563, 0, 8915, 2759, 945, 6689, 93064, 0, 0, - 118798, 1291, 74828, 0, 120435, 9531, 13155, 8505, 68379, 12062, 128198, - 121216, 65487, 92189, 41837, 120611, 8246, 128874, 93066, 0, 120433, 0, - 63935, 73962, 120806, 64787, 43524, 0, 64426, 983092, 194948, 917866, - 917788, 65664, 6693, 9843, 0, 8674, 119887, 128812, 92715, 70788, 1320, - 121461, 1673, 4811, 92383, 5986, 9338, 3046, 74480, 5985, 917928, 119598, - 9820, 119892, 12187, 983841, 71041, 5984, 0, 43308, 4393, 67650, 983227, - 0, 74822, 0, 74826, 64733, 983214, 127898, 3491, 67146, 121142, 128219, - 3514, 65485, 72428, 7492, 128860, 74605, 92483, 7514, 983369, 126585, - 194731, 7502, 7587, 68353, 63921, 121178, 63925, 120161, 7610, 219, - 128158, 78722, 692, 43588, 68485, 41635, 43241, 9688, 7147, 9535, 0, - 93991, 0, 64530, 0, 64610, 11804, 0, 7149, 7453, 0, 8013, 66396, 92301, - 0, 8895, 5253, 70025, 5458, 917629, 2866, 129045, 127860, 11098, 68433, - 6700, 120484, 0, 120583, 194824, 8962, 77960, 9641, 43694, 7059, 983677, - 63997, 9604, 78700, 7441, 63826, 67970, 83435, 64392, 92626, 983687, - 2844, 74610, 41974, 67397, 12139, 67971, 0, 0, 3358, 65295, 983899, 3104, - 194734, 0, 121304, 983235, 5308, 83434, 290, 0, 121338, 2862, 2792, - 195088, 92963, 77984, 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, - 1814, 78464, 10240, 66285, 74305, 128382, 74528, 65903, 71454, 42646, - 7606, 2591, 2837, 4341, 43513, 64482, 92524, 8163, 65270, 0, 77932, 0, - 9112, 74431, 863, 9490, 75037, 128349, 43323, 120513, 119897, 9071, + 128204, 289, 101029, 4694, 11420, 4690, 122899, 100789, 917978, 4693, + 73893, 42724, 69977, 4688, 120454, 128507, 983813, 67994, 8238, 3110, + 120162, 3565, 120163, 6528, 78387, 43035, 69898, 218, 983850, 1520, 0, + 4786, 983168, 43225, 4602, 92400, 78167, 10088, 6548, 121157, 120156, + 43978, 8988, 8888, 65727, 74812, 69709, 983967, 10666, 0, 73902, 69740, + 121436, 0, 9975, 113704, 119902, 4689, 8932, 125238, 65560, 119209, + 74441, 78810, 122881, 128707, 67987, 0, 121021, 0, 67989, 119029, 10065, + 8207, 71900, 92613, 128011, 101090, 662, 125221, 9244, 194863, 83183, + 119261, 983430, 917889, 120901, 917838, 41929, 0, 71084, 66674, 41926, + 69994, 120443, 10513, 64637, 194862, 68013, 52, 13118, 6475, 195004, + 83479, 12095, 10225, 4812, 92578, 128486, 67992, 74085, 0, 3978, 128425, + 917945, 74015, 11582, 92768, 12281, 127043, 6544, 13241, 93961, 69782, + 125014, 128808, 11765, 65258, 10369, 983498, 1585, 7192, 10249, 422, + 1500, 2036, 986, 194859, 64394, 5781, 5599, 64294, 2494, 120450, 4861, + 74021, 64334, 78203, 127808, 0, 72871, 65102, 8961, 65842, 10243, 10245, + 71907, 120410, 100671, 120453, 64821, 9478, 2508, 92683, 0, 202, 128246, + 74131, 1242, 65514, 121170, 63940, 121363, 64533, 71883, 120446, 67842, + 11990, 92405, 63939, 43375, 65440, 2504, 0, 78671, 64829, 93020, 6943, + 917934, 5859, 983980, 2858, 983363, 66781, 983914, 69239, 983380, 67871, + 12992, 2753, 1936, 70078, 67701, 2751, 12662, 2763, 8953, 64701, 10731, + 12922, 7052, 917839, 66424, 63992, 0, 63920, 74128, 2856, 119910, 47, + 69908, 71053, 65858, 100863, 129033, 67829, 7899, 983575, 8417, 43798, + 7072, 74195, 0, 4033, 121289, 43992, 121081, 983315, 212, 64600, 1903, + 12320, 83484, 120894, 194563, 100979, 8915, 2759, 945, 6689, 93064, 0, + 983756, 118798, 1291, 74828, 0, 120435, 9531, 13155, 8505, 68379, 12062, + 121253, 121216, 65487, 92189, 41837, 120611, 8246, 128874, 93066, 100680, + 120433, 194570, 63935, 73962, 120806, 64787, 43524, 121431, 64426, + 983092, 194948, 2230, 917788, 65664, 6693, 9843, 0, 8674, 100869, 120858, + 92715, 70788, 1320, 121461, 1673, 4811, 92383, 5986, 9338, 3046, 74480, + 5985, 917928, 119598, 9820, 119892, 12187, 983841, 71041, 5984, 0, 43308, + 4393, 67650, 113787, 127013, 74822, 0, 74826, 64733, 983214, 127898, + 3491, 67146, 121142, 128219, 3514, 65485, 72428, 7492, 128860, 74605, + 72768, 7514, 983369, 126585, 194731, 7502, 7587, 68353, 63921, 121178, + 63925, 120161, 7610, 219, 128158, 78722, 692, 43588, 68485, 41635, 43241, + 9688, 7147, 9535, 194989, 93991, 983945, 64530, 0, 64610, 11804, 917918, + 7149, 7453, 119560, 8013, 66396, 92301, 0, 8895, 5253, 70025, 5458, + 194651, 2866, 118805, 127860, 11098, 68433, 6700, 120484, 129308, 120583, + 194824, 8962, 77960, 9641, 43694, 7059, 983677, 63997, 9604, 78700, 7441, + 63826, 67970, 83435, 64392, 92626, 983687, 2844, 74610, 41974, 67397, + 12139, 67971, 127166, 983834, 3358, 65295, 983292, 3104, 100779, 0, + 121304, 983235, 5308, 83434, 290, 0, 121338, 2862, 2792, 92483, 92963, + 77984, 3268, 66591, 0, 6552, 42367, 7035, 120558, 101008, 917971, 1814, + 78464, 10240, 66285, 74305, 128382, 74528, 65903, 71454, 42646, 7606, + 2591, 2837, 4341, 43513, 64482, 92524, 8163, 65270, 194825, 77932, 0, + 9112, 72721, 863, 9490, 75037, 128037, 43323, 120513, 119897, 9071, 68054, 0, 3654, 7789, 9637, 121136, 2535, 65504, 7653, 40993, 92415, 66587, 124987, 0, 92401, 43927, 11006, 12927, 7807, 8073, 120980, 10629, - 127869, 74088, 3056, 10823, 127267, 92391, 8762, 10508, 69689, 73770, - 43969, 43193, 10737, 3463, 120975, 983351, 66633, 8695, 4815, 11322, - 5811, 12345, 7049, 118811, 5195, 195081, 0, 66639, 92939, 0, 0, 128041, - 67903, 67739, 1262, 120165, 6561, 19939, 128673, 0, 127318, 119906, - 70300, 0, 983097, 0, 983667, 119907, 64612, 11991, 120654, 0, 92943, - 1502, 917568, 127988, 9107, 127316, 5702, 3655, 67661, 8430, 0, 71223, - 120758, 0, 74057, 9603, 128079, 5254, 120742, 7724, 74388, 68375, 10796, - 5129, 0, 70816, 590, 7579, 5614, 5893, 92280, 11720, 92496, 11721, 70804, - 4798, 121468, 119316, 66038, 4793, 67851, 11726, 127541, 74204, 68610, - 68824, 68626, 894, 300, 120875, 12306, 66235, 8004, 0, 119574, 2562, - 70156, 120856, 42503, 92900, 11652, 917813, 917799, 119241, 64699, - 126569, 5096, 5095, 2863, 3424, 92244, 10454, 42530, 5094, 70873, 0, - 13156, 129057, 10832, 5093, 0, 69852, 72430, 5092, 10708, 11327, 0, 5091, - 176, 0, 9153, 4104, 78599, 78601, 1215, 42712, 5744, 12272, 9832, 11777, - 71299, 66817, 42881, 0, 8980, 118988, 67861, 8844, 7209, 0, 0, 4278, - 128809, 0, 119160, 70821, 9074, 4348, 0, 65558, 65946, 8113, 7087, 5255, - 1786, 661, 128116, 0, 917925, 74423, 71345, 586, 74414, 64359, 1267, - 128269, 65468, 194966, 65731, 0, 72405, 3621, 92932, 66666, 64211, 0, - 6562, 12928, 194904, 1228, 65490, 11383, 0, 127953, 70343, 1714, 74406, - 120751, 0, 121113, 983976, 66225, 70110, 70867, 42660, 11436, 2070, 64, - 120694, 121025, 10291, 10323, 2826, 113809, 126510, 0, 42008, 9708, - 42710, 0, 42011, 41999, 92164, 12206, 5839, 1702, 1240, 74065, 6286, - 9689, 983969, 65833, 77848, 0, 1765, 0, 128622, 65588, 92350, 983281, 0, - 8401, 983924, 42014, 127307, 7030, 120969, 10479, 64959, 2852, 0, 121225, - 0, 70819, 128586, 917951, 6963, 126704, 12667, 64540, 74786, 10147, - 12935, 127568, 126483, 121281, 0, 0, 78757, 0, 113815, 121302, 0, 9994, - 12467, 2864, 64719, 1148, 10435, 11462, 41675, 7084, 2765, 78466, 43382, - 0, 120719, 128188, 92516, 66662, 0, 78133, 9364, 194685, 74416, 127797, - 0, 77988, 263, 10449, 41288, 0, 41839, 78385, 983742, 70313, 129140, - 6931, 69722, 43261, 7177, 70105, 92652, 0, 0, 4262, 10285, 10722, 42020, - 126575, 6806, 6992, 42019, 0, 41290, 983716, 750, 0, 71304, 10163, 63913, - 71300, 7032, 5954, 64931, 4314, 128600, 198, 68453, 730, 120094, 63907, - 77993, 70818, 13165, 7107, 74171, 42804, 678, 8240, 78015, 125005, 41378, - 11008, 6938, 70026, 92637, 2097, 66246, 120560, 70823, 194990, 983604, - 3892, 68632, 69642, 6712, 66045, 41470, 64805, 0, 983213, 126511, 64801, - 127818, 497, 12100, 5953, 92667, 7796, 69669, 43254, 73831, 0, 10293, - 5952, 1281, 43747, 0, 121399, 10677, 604, 41097, 9182, 1859, 0, 92603, - 3425, 127488, 126523, 2836, 983738, 0, 9707, 113718, 43202, 0, 0, 65199, - 1738, 128311, 67707, 2832, 92702, 9670, 11101, 0, 66374, 917956, 119552, - 2822, 68122, 4436, 92519, 983081, 73752, 70305, 64872, 92340, 1331, 0, 0, - 121377, 12708, 917954, 5090, 5089, 127977, 917953, 119109, 0, 70826, 319, - 118847, 43479, 9477, 0, 0, 5087, 74886, 7640, 96, 5086, 983597, 92379, 0, - 5085, 64286, 92665, 113717, 41422, 119617, 119901, 42356, 3772, 119042, - 0, 5011, 0, 983329, 126587, 0, 120698, 118874, 6677, 7601, 0, 591, 64419, - 118953, 92262, 118895, 70799, 70084, 0, 10939, 6106, 6933, 41271, 6760, - 71343, 4534, 41270, 128876, 67138, 65574, 194947, 9224, 67140, 3671, - 8976, 67139, 0, 41275, 6372, 82997, 55261, 7963, 6371, 0, 568, 92368, - 41273, 121448, 74531, 6728, 0, 9715, 129297, 8258, 11753, 74820, 0, 9602, - 118919, 42, 11191, 43688, 68243, 0, 7458, 0, 0, 65385, 67135, 67134, - 11958, 11165, 917822, 125087, 6254, 42721, 66336, 8045, 11550, 195064, - 67132, 67131, 42858, 11789, 65868, 5557, 10133, 9737, 13109, 0, 9467, - 5558, 8878, 43844, 195036, 7451, 6706, 10146, 0, 9086, 64566, 983185, - 64584, 7437, 7454, 12594, 73749, 68362, 4546, 7731, 0, 70048, 74243, - 125092, 3805, 0, 67128, 44001, 41008, 128052, 6307, 19949, 67129, 7544, - 124989, 43469, 121095, 983735, 10152, 64422, 65091, 67124, 7602, 64729, - 0, 43521, 0, 42302, 43711, 43523, 41447, 5559, 68483, 8704, 2397, 5556, - 0, 0, 0, 9011, 9630, 11166, 0, 93998, 5506, 92498, 1911, 66652, 67686, + 101004, 74088, 3056, 10823, 127267, 92391, 8762, 10508, 69689, 73770, + 43969, 43193, 10737, 3463, 72858, 194790, 66633, 8695, 4815, 11322, 5811, + 12345, 7049, 118811, 5195, 195081, 194958, 66639, 92939, 83193, 121010, + 128041, 67903, 67739, 1262, 120165, 6561, 19939, 128673, 0, 127318, + 119906, 70300, 0, 983097, 0, 983667, 119907, 64612, 11991, 120654, + 917866, 92943, 1502, 917568, 127988, 9107, 122904, 5702, 3655, 67661, + 8430, 0, 71223, 120758, 118963, 74057, 9603, 128079, 5254, 120742, 7724, + 74388, 68375, 10796, 5129, 0, 70816, 590, 7579, 5614, 5893, 92280, 11720, + 92496, 11721, 70804, 4798, 121468, 119316, 66038, 4793, 67851, 11726, + 127541, 74204, 68610, 68824, 68626, 894, 300, 120875, 12306, 66235, 8004, + 127189, 119574, 2562, 70156, 120856, 42503, 92900, 11652, 917813, 917799, + 119241, 64699, 126569, 5096, 5095, 2863, 3424, 92244, 10454, 42530, 5094, + 70873, 0, 13156, 129057, 10832, 5093, 194839, 69852, 72430, 5092, 10708, + 11327, 0, 5091, 176, 113810, 9153, 4104, 78599, 78601, 1215, 42712, 5744, + 12272, 9832, 11777, 71299, 66817, 42881, 983785, 8980, 118988, 67861, + 8844, 7209, 983741, 0, 4278, 128809, 0, 119160, 70821, 9074, 4348, + 917872, 65558, 65946, 8113, 7087, 5255, 1786, 661, 128116, 917857, + 917925, 74423, 71345, 586, 74414, 64359, 1267, 128269, 65468, 125234, + 65731, 983899, 72405, 3621, 92932, 66666, 64211, 129351, 6562, 12928, + 121306, 1228, 65490, 11383, 0, 127953, 70343, 1714, 74406, 120751, 0, + 121113, 127389, 66225, 70110, 70867, 42660, 11436, 2070, 64, 120694, + 121025, 10291, 10323, 2826, 100526, 126510, 127557, 42008, 9708, 42710, + 0, 42011, 41999, 92164, 12206, 5839, 1702, 1240, 74065, 6286, 9689, + 983969, 65833, 77848, 0, 1765, 983301, 128622, 65588, 92350, 983281, 0, + 8401, 983924, 42014, 125230, 7030, 120969, 10479, 64959, 2852, 72728, + 121225, 0, 70819, 119887, 125227, 6963, 126704, 12667, 64540, 74786, + 10147, 12935, 127401, 119185, 72812, 71265, 128779, 78757, 0, 113815, + 121302, 122892, 9994, 12467, 2864, 64719, 1148, 10435, 11462, 41675, + 7084, 2765, 78466, 43382, 983815, 120719, 128188, 92516, 66662, 0, 78133, + 9364, 194685, 74416, 127797, 0, 77988, 263, 10449, 41288, 0, 41839, + 78385, 100693, 70313, 127476, 6931, 69722, 43261, 7177, 70105, 92652, + 119895, 0, 4262, 10285, 10722, 42020, 126575, 6806, 6992, 42019, 195056, + 41290, 983716, 750, 121088, 71304, 10163, 63913, 71300, 7032, 5954, + 64931, 4314, 100636, 198, 68453, 730, 100635, 63907, 77993, 70818, 13165, + 7107, 74171, 42804, 678, 8240, 78015, 125005, 41378, 11008, 6938, 70026, + 92637, 2097, 66246, 120560, 70823, 194990, 983604, 3892, 68632, 69642, + 6712, 66045, 41470, 64805, 0, 983213, 126511, 64801, 127818, 497, 12100, + 5953, 92667, 7796, 69669, 43254, 73831, 128243, 10293, 5952, 1281, 43747, + 0, 121399, 10677, 604, 41097, 9182, 1859, 0, 72856, 3425, 127488, 72725, + 2836, 983738, 0, 9707, 70742, 43202, 0, 0, 65199, 1738, 119891, 67707, + 2832, 92702, 9670, 11101, 983795, 66374, 100704, 119552, 2822, 68122, + 4436, 92519, 983081, 73752, 70305, 64872, 92340, 1331, 917955, 983706, + 121377, 12708, 129333, 5090, 5089, 127977, 3200, 100984, 0, 70826, 319, + 118847, 43479, 9477, 0, 194881, 5087, 74886, 7640, 96, 5086, 127763, + 92379, 0, 5085, 64286, 92665, 113717, 41422, 100710, 119901, 42356, 3772, + 119042, 119909, 5011, 194882, 194742, 126587, 0, 120698, 118874, 6677, + 7601, 194725, 591, 64419, 118953, 92262, 118895, 70799, 70084, 125111, + 10939, 6106, 6933, 41271, 6760, 71343, 4534, 41270, 128876, 67138, 65574, + 194947, 9224, 67140, 3671, 8976, 67139, 0, 41275, 6372, 82997, 55261, + 7963, 6371, 0, 568, 92368, 41273, 120322, 74531, 6728, 983609, 9715, + 120975, 8258, 11753, 74820, 983965, 9602, 118919, 42, 11191, 43688, + 68243, 0, 7458, 73972, 983960, 65385, 67135, 67134, 11958, 11165, 194698, + 125087, 6254, 42721, 66336, 8045, 11550, 195064, 67132, 12696, 42858, + 11789, 65868, 5557, 10133, 9737, 7300, 0, 9467, 5558, 8878, 43844, + 195036, 7451, 6706, 10146, 100762, 9086, 64566, 983185, 64584, 7437, + 7454, 12594, 73749, 68362, 4546, 7731, 0, 70048, 74243, 125092, 3805, 0, + 67128, 44001, 41008, 128052, 6307, 19949, 67129, 7544, 124989, 43469, + 121095, 983735, 10152, 64422, 65091, 67124, 7602, 64729, 0, 43521, + 120772, 42302, 43711, 43523, 41447, 5559, 68483, 8704, 2397, 5556, 0, 0, + 66801, 9011, 9630, 11166, 0, 93998, 5506, 92498, 1911, 66652, 67686, 9961, 8845, 66698, 68325, 10792, 8889, 121402, 2098, 0, 64751, 70309, - 66622, 126626, 0, 74364, 68816, 129152, 983805, 42909, 7552, 70092, - 194567, 65384, 7223, 4559, 93015, 1956, 43138, 7024, 65728, 43490, 1210, - 195077, 65175, 10184, 43140, 43654, 0, 983233, 125045, 38, 8533, 66669, - 119124, 983295, 983792, 0, 4357, 0, 70289, 917863, 74233, 9967, 78884, - 42860, 119838, 10941, 65721, 6962, 0, 83279, 113808, 0, 11014, 120126, - 8942, 12000, 69224, 92267, 128536, 11974, 67363, 42772, 42650, 11650, - 5013, 92663, 68810, 66210, 118914, 6613, 92476, 0, 11193, 983770, 0, - 64714, 71479, 70802, 12162, 12120, 43476, 983766, 11024, 74811, 66228, - 10563, 92954, 127196, 43522, 2462, 92955, 1837, 125086, 63972, 6957, 0, - 113820, 4952, 65718, 64405, 5504, 65720, 65714, 65715, 65716, 128026, - 75016, 127119, 3109, 63975, 74028, 127213, 8107, 67154, 1127, 455, 0, - 63968, 127835, 3483, 119593, 1989, 983176, 69678, 9104, 3503, 65375, - 68300, 6694, 42633, 1864, 0, 74306, 41446, 2540, 7736, 121434, 74064, + 66622, 126626, 0, 70724, 68816, 129152, 124953, 42909, 7552, 70092, + 127490, 65384, 7223, 4559, 93015, 1956, 43138, 7024, 65728, 43490, 1210, + 195077, 65175, 10184, 43140, 43654, 917902, 128558, 125045, 38, 8533, + 66669, 119124, 983295, 983792, 0, 4357, 0, 70289, 917863, 74233, 9967, + 78884, 42860, 119323, 10941, 65721, 6962, 0, 83279, 113808, 0, 11014, + 120126, 8942, 12000, 69224, 92267, 128536, 11974, 67363, 42772, 42650, + 11650, 5013, 92663, 68810, 66210, 118914, 6613, 92476, 0, 11193, 194677, + 72754, 64714, 71479, 70802, 12162, 12120, 43476, 983766, 11024, 74811, + 66228, 10563, 92954, 127196, 43522, 2462, 92955, 1837, 125086, 63972, + 6957, 0, 113820, 4952, 65718, 64405, 5504, 65720, 65714, 65715, 65716, + 72877, 75016, 127119, 3109, 63975, 74028, 127213, 8107, 67154, 1127, 455, + 0, 63968, 72860, 3483, 119593, 1989, 983176, 69678, 9104, 3503, 65375, + 68300, 6694, 42633, 1864, 0, 72810, 41446, 2540, 7736, 121434, 74064, 128601, 10521, 70786, 42173, 9705, 74124, 8604, 6955, 10916, 43684, 6149, 3887, 19956, 1411, 2824, 0, 10106, 127862, 1403, 125053, 1347, 9631, - 74444, 983753, 127997, 92951, 74897, 8640, 0, 258, 1654, 0, 0, 983479, - 43314, 0, 0, 4042, 11478, 2873, 63977, 11522, 41668, 8549, 10861, 121053, - 63976, 70377, 68623, 67082, 67081, 41391, 67084, 83465, 376, 6987, 9221, - 0, 0, 8823, 128697, 12943, 65185, 41869, 12619, 128067, 10154, 983043, - 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, 120620, 82950, 69791, - 127161, 11916, 65016, 0, 69671, 42115, 121057, 12288, 78057, 67080, 1493, - 42111, 7553, 4097, 128199, 13080, 0, 65808, 6610, 6030, 8059, 7508, - 13131, 67074, 67073, 128506, 8794, 41278, 41629, 12154, 75073, 41277, - 64658, 983456, 64380, 6625, 42911, 19904, 0, 121305, 71193, 65371, 7078, - 128699, 833, 128228, 6369, 194815, 10979, 41953, 983370, 41434, 6062, 0, - 0, 19916, 6913, 933, 1341, 9842, 6720, 65744, 71200, 983592, 121223, - 126567, 7405, 10105, 65810, 0, 41632, 7493, 55290, 92890, 41622, 0, 0, - 119556, 74584, 7632, 9716, 19954, 9805, 5990, 900, 0, 63957, 119638, 0, - 3612, 0, 64376, 93987, 5389, 92597, 0, 65938, 2839, 9621, 582, 0, 74368, - 3749, 6949, 7569, 74061, 83222, 83223, 6956, 4403, 19962, 65559, 3299, - 121005, 194939, 119127, 9002, 0, 74372, 74236, 8478, 7598, 546, 42469, - 65569, 1918, 9542, 472, 7716, 10319, 10383, 6996, 43077, 63952, 8425, - 3602, 8328, 11764, 83199, 83200, 65065, 41183, 12907, 10271, 10287, 684, - 43525, 127996, 2854, 83214, 4592, 65755, 83217, 67120, 11963, 43620, - 67117, 78249, 67123, 67122, 67121, 9881, 43115, 65757, 3415, 69677, - 67116, 8648, 128377, 6741, 43047, 119900, 13180, 78077, 418, 120653, - 64495, 10295, 10327, 10391, 41752, 66846, 8641, 41449, 83194, 74100, - 83186, 10911, 6942, 120879, 1024, 42849, 41751, 69776, 8941, 983556, - 4554, 66892, 9023, 11685, 121476, 9928, 67109, 66865, 11437, 43741, - 67113, 67112, 63967, 129056, 41206, 12624, 9049, 41185, 43166, 121275, - 8159, 92619, 11686, 71478, 65224, 4565, 4655, 119553, 129090, 92183, - 64523, 10343, 10407, 92764, 66671, 11466, 0, 128003, 42890, 74013, 12050, - 68201, 2860, 0, 127934, 70828, 42792, 5743, 10424, 12065, 42872, 121401, - 43875, 67103, 8875, 0, 67102, 67105, 7531, 12847, 2413, 118917, 67404, - 962, 0, 12855, 41196, 42564, 127975, 1582, 983715, 5508, 0, 120904, - 74588, 10801, 69876, 92354, 119207, 7173, 496, 10439, 4313, 64607, 69638, - 7860, 128049, 906, 42793, 2842, 6405, 64722, 13132, 798, 64694, 12801, - 8406, 1153, 83263, 64788, 83265, 8054, 9174, 67087, 67086, 9964, 67096, - 41611, 4642, 66574, 11556, 42512, 0, 78857, 42089, 74613, 9008, 0, - 126592, 195096, 42079, 83248, 77924, 42513, 77927, 42842, 73985, 65285, - 68338, 83239, 83240, 83241, 83242, 983590, 11335, 64069, 42093, 3920, - 917869, 0, 11110, 83255, 4580, 41967, 83258, 64384, 83252, 83253, 3021, - 42004, 983096, 83249, 42317, 41998, 0, 6946, 194755, 92967, 128455, + 74444, 194946, 127997, 92951, 74897, 8640, 100976, 258, 1654, 0, 0, + 983479, 43314, 127987, 70699, 4042, 11478, 2873, 63977, 11522, 41668, + 8549, 10861, 121053, 63976, 70377, 68623, 67082, 67081, 41391, 67084, + 67588, 376, 6987, 9221, 0, 0, 8823, 128697, 12943, 65185, 41869, 12619, + 128067, 10154, 917921, 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, + 72831, 82950, 69791, 127161, 11916, 65016, 0, 69671, 42115, 121057, + 12288, 78057, 67080, 1493, 42111, 7553, 4097, 128199, 13080, 0, 65808, + 6610, 6030, 8059, 7508, 13131, 67074, 67073, 128506, 8794, 41278, 41629, + 12154, 75073, 41277, 64658, 128112, 64380, 6625, 42911, 19904, 0, 121305, + 71193, 65371, 7078, 128699, 833, 128228, 6369, 194815, 10979, 41953, + 194935, 41434, 6062, 0, 0, 19916, 6913, 933, 1341, 9842, 6720, 65744, + 71200, 128645, 121223, 121245, 7405, 10105, 65810, 0, 41632, 7493, 55290, + 92890, 41622, 70704, 0, 119556, 74584, 7632, 9716, 19954, 9805, 5990, + 900, 100757, 63957, 119638, 983977, 3612, 70687, 64376, 93987, 5389, + 92597, 0, 65938, 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, + 83222, 83223, 6956, 4403, 19962, 65559, 3299, 65686, 128561, 119127, + 9002, 983422, 74372, 74236, 8478, 7598, 546, 42469, 65569, 1918, 9542, + 472, 7716, 10319, 10383, 6996, 43077, 63952, 8425, 3602, 8328, 11764, + 83199, 83200, 65065, 41183, 12907, 10271, 10287, 684, 43525, 100531, + 2854, 66747, 4592, 65755, 83217, 67120, 11963, 43620, 67117, 66736, + 67123, 67122, 67121, 9881, 43115, 65757, 3415, 69677, 67116, 8648, + 100995, 6741, 43047, 100460, 13180, 78077, 418, 66754, 64495, 10295, + 10327, 10391, 41752, 66846, 8641, 41449, 83194, 74100, 83186, 10911, + 6942, 120879, 1024, 42849, 41751, 69776, 8941, 101032, 4554, 66892, 9023, + 11685, 121476, 9928, 67109, 66865, 11437, 43741, 67113, 67112, 63967, + 129056, 41206, 12624, 9049, 41185, 43166, 100840, 8159, 92619, 11686, + 71478, 65224, 4565, 4655, 119553, 129090, 92183, 64523, 10343, 10407, + 92764, 66671, 11466, 0, 100837, 42890, 72844, 2261, 68201, 2860, 0, + 127934, 70828, 42792, 5743, 10424, 12065, 42872, 121401, 43875, 67103, + 8875, 0, 67102, 67105, 7531, 12847, 2413, 100522, 67404, 962, 917814, + 12855, 41196, 42564, 101009, 1582, 100842, 5508, 100492, 120904, 74588, + 10801, 69876, 92354, 119207, 7173, 496, 10439, 4313, 64607, 69638, 7860, + 128049, 906, 42793, 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, + 1153, 83263, 64788, 83265, 8054, 9174, 67087, 67086, 9964, 67096, 41611, + 4642, 66574, 11556, 42512, 0, 78857, 42089, 74613, 9008, 0, 101028, + 100468, 42079, 83248, 77924, 42513, 77927, 42842, 73985, 65285, 68338, + 83239, 83240, 83241, 83242, 983590, 11335, 64069, 42093, 3920, 100504, + 100850, 11110, 83255, 4580, 41967, 83258, 64384, 83252, 83253, 3021, + 42004, 983096, 83249, 42317, 41998, 128756, 6946, 194755, 92967, 128455, 128193, 65204, 0, 68113, 42690, 9880, 42010, 74824, 64589, 10111, 64875, - 127880, 68035, 43998, 11360, 83233, 74182, 83235, 83228, 42149, 83230, + 127880, 68035, 43998, 11360, 83233, 74182, 70691, 83228, 42149, 83230, 68508, 917993, 64941, 77919, 120421, 128077, 74885, 55247, 4110, 66005, 6959, 10929, 42907, 128080, 66703, 77921, 8617, 41982, 6025, 69242, - 121068, 194854, 125139, 0, 9597, 42099, 43172, 983378, 10117, 983169, - 92297, 41636, 194889, 73738, 120681, 8301, 0, 0, 187, 128237, 65669, - 128339, 4963, 0, 68765, 0, 8964, 65676, 7775, 983849, 41948, 125003, 0, - 83236, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 42663, 120616, - 41766, 74948, 65882, 78849, 41760, 1189, 905, 480, 10985, 41733, 67859, - 9629, 6742, 1745, 43625, 73835, 7888, 83405, 3980, 70373, 42656, 41507, - 8806, 7023, 0, 74279, 9447, 78651, 7867, 69218, 6236, 127162, 0, 10505, - 126638, 12851, 83489, 348, 5474, 121382, 3103, 0, 41753, 71109, 128604, - 0, 78844, 78845, 41739, 78843, 42515, 10931, 41756, 43347, 42560, 5391, - 41746, 119147, 92591, 41259, 5561, 69930, 2691, 68752, 65553, 7933, 5562, - 69800, 128265, 41262, 128146, 64421, 74846, 41251, 127242, 0, 3979, - 71248, 194899, 68331, 917912, 68847, 983697, 83382, 74633, 41266, 68836, - 66566, 128836, 10585, 65741, 41737, 2275, 2666, 121232, 41738, 831, 419, - 13126, 10716, 83400, 42822, 0, 6434, 74857, 6939, 7766, 6432, 128106, - 69932, 916, 769, 41742, 11968, 74805, 6433, 5563, 547, 1943, 6439, 5560, - 4994, 487, 126537, 4497, 3754, 83072, 83105, 9039, 0, 41776, 0, 8716, - 1595, 41615, 121001, 0, 74260, 74860, 42854, 43219, 83311, 121107, 12185, - 113810, 70072, 68355, 68357, 68421, 42856, 8634, 0, 119988, 4209, 75057, - 68832, 65879, 41538, 65612, 68822, 669, 5679, 68813, 68815, 68811, 68812, - 68804, 5678, 11821, 68802, 6711, 460, 121513, 0, 983463, 70114, 120747, - 194718, 121519, 78050, 119022, 0, 121515, 121514, 7782, 9044, 4974, - 11760, 78494, 7577, 65711, 41912, 1216, 0, 127017, 5792, 126643, 128319, - 78501, 0, 2933, 12244, 983702, 5683, 917896, 120895, 78119, 1549, 0, - 983223, 120398, 5682, 6206, 8670, 10256, 5680, 69935, 10001, 67237, - 69768, 1449, 10241, 78290, 119587, 194891, 10552, 64342, 41922, 70330, - 8584, 68030, 5567, 2717, 83179, 71448, 5564, 42886, 41908, 42882, 5565, - 917611, 120881, 0, 65708, 65709, 5566, 69803, 65704, 65705, 11904, 42875, - 43373, 42539, 5942, 8468, 120561, 10361, 10425, 65697, 65698, 65699, - 68052, 66598, 110592, 64664, 10647, 78702, 78703, 78690, 457, 78502, - 65701, 1934, 43006, 83280, 8802, 78710, 65130, 11747, 78709, 6087, 78705, - 78716, 41757, 78711, 8043, 8950, 65694, 64485, 43534, 10457, 0, 11961, - 78725, 66850, 78723, 78720, 78721, 127899, 65515, 9499, 10035, 13069, + 121068, 128979, 121398, 917979, 9597, 42099, 43172, 983378, 10117, 70733, + 92297, 41636, 194889, 73738, 92724, 8301, 0, 0, 187, 128237, 65669, + 128339, 4963, 127996, 68765, 128198, 8964, 65676, 7775, 194763, 41948, + 125003, 0, 83236, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 42663, + 120616, 41766, 74948, 65882, 78849, 41760, 1189, 905, 480, 10985, 41733, + 67859, 9629, 6742, 1745, 43625, 73835, 7888, 83405, 3980, 70373, 42656, + 41507, 8806, 7023, 72734, 74279, 9447, 70702, 7867, 69218, 6236, 127162, + 983608, 10505, 126638, 12851, 83489, 348, 5474, 121382, 3103, 0, 41753, + 71109, 128604, 0, 78844, 78845, 41739, 78843, 42515, 10931, 41756, 43347, + 42560, 5391, 41746, 100967, 92591, 41259, 5561, 69930, 2691, 68752, + 65553, 7933, 5562, 69800, 128265, 41262, 100823, 64421, 74846, 41251, + 127242, 0, 3979, 71248, 129415, 68331, 917912, 68847, 983697, 83382, + 74633, 41266, 68836, 66566, 128836, 10585, 65741, 41737, 2275, 2666, + 121232, 41738, 831, 419, 13126, 10716, 83400, 42822, 0, 6434, 74857, + 6939, 7766, 6432, 128106, 69932, 916, 769, 41742, 11968, 74805, 6433, + 5563, 547, 1943, 6439, 5560, 4994, 487, 126537, 4497, 3754, 83072, 83105, + 9039, 70678, 41776, 127391, 8716, 1595, 41615, 74431, 128902, 74260, + 74860, 42854, 43219, 83311, 121107, 12185, 113724, 70072, 68355, 68357, + 68421, 42856, 8634, 0, 119988, 4209, 75057, 68832, 65879, 41538, 65612, + 68822, 669, 5679, 68813, 68815, 68811, 68812, 68804, 5678, 11821, 68802, + 6711, 460, 121513, 0, 983463, 70114, 120747, 194718, 121519, 78050, + 119022, 983829, 121515, 121514, 7782, 9044, 4974, 11760, 78494, 7577, + 65711, 41912, 1216, 125088, 100411, 5792, 121364, 100393, 78501, 0, 2933, + 12244, 983702, 5683, 100392, 100397, 78119, 1549, 70670, 100415, 120398, + 5682, 6206, 8670, 10256, 5680, 69935, 10001, 67237, 69768, 1449, 10241, + 78290, 70708, 194891, 10552, 64342, 41922, 70330, 8584, 68030, 5567, + 2717, 68814, 71448, 5564, 42886, 41908, 42882, 5565, 917611, 120881, 0, + 65708, 65709, 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, + 5942, 8468, 100729, 10361, 10425, 65697, 65698, 65699, 68052, 66598, + 100686, 64664, 10647, 78702, 78703, 78690, 457, 78502, 65701, 1934, + 43006, 83280, 8802, 78710, 65130, 11747, 78709, 6087, 78705, 78716, + 41757, 78711, 8043, 8950, 65694, 64485, 43534, 10457, 128552, 11961, + 78725, 66850, 78723, 78720, 78721, 119898, 65515, 9499, 10035, 13069, 71309, 0, 9889, 68184, 42806, 125061, 7256, 0, 68094, 1667, 42161, - 120981, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, 8101, 3610, + 100958, 42428, 0, 6934, 100702, 10802, 64861, 6556, 78390, 0, 8101, 3610, 68420, 41748, 4995, 955, 65907, 119208, 5350, 64339, 78306, 64549, 10875, - 125052, 5477, 65692, 0, 128532, 120397, 12896, 10456, 68298, 0, 3874, 0, - 0, 983619, 120331, 128773, 113665, 65603, 83272, 65687, 0, 41038, 74009, - 9207, 42239, 8536, 78740, 78324, 78726, 74432, 724, 83058, 1455, 78749, - 7183, 64583, 78747, 68443, 4175, 78741, 43614, 69801, 939, 75021, 43520, - 68613, 74569, 917958, 0, 70168, 78764, 78760, 10788, 6088, 78759, 78755, - 190, 119899, 12593, 0, 8188, 64408, 0, 4417, 121303, 92261, 6370, 125128, - 7827, 68441, 6965, 128581, 128868, 13201, 128205, 69896, 78868, 74382, - 11841, 7918, 73988, 0, 113668, 917884, 1728, 983705, 43764, 178, 12972, - 74620, 113671, 71103, 11168, 983383, 113672, 78327, 75042, 65690, 8382, - 71107, 119054, 194968, 9252, 917889, 4652, 68371, 0, 121327, 74070, - 13065, 9923, 10806, 194596, 11763, 70016, 120688, 6723, 78187, 0, 6993, - 71044, 121312, 8333, 121329, 0, 11390, 0, 74464, 0, 92320, 74080, 983317, - 69911, 11910, 92559, 8278, 8963, 4034, 128560, 983113, 65344, 120517, - 41747, 0, 128110, 8677, 0, 12707, 9350, 66037, 128180, 8836, 12315, - 12747, 8300, 194562, 124984, 7491, 8856, 71361, 0, 43150, 127768, 120404, - 65389, 120402, 120403, 10813, 2592, 12853, 43269, 7263, 83308, 6536, - 120238, 71891, 65516, 12321, 120391, 120388, 55287, 10007, 120246, 9588, - 68494, 1596, 120383, 41994, 65801, 128808, 6838, 3561, 119867, 0, 10613, - 6697, 12805, 41928, 40981, 10804, 78409, 5006, 64328, 0, 9931, 0, 8825, + 125052, 5477, 65692, 983276, 119092, 120397, 12896, 10456, 68298, 121195, + 3874, 0, 125204, 100994, 120331, 100993, 100673, 65603, 83272, 65687, 0, + 41038, 74009, 9207, 42239, 8536, 70671, 78324, 78726, 74432, 724, 83058, + 1455, 78749, 7183, 64583, 78747, 68443, 4175, 78323, 43614, 69801, 939, + 75021, 43520, 68613, 74569, 917958, 194658, 70168, 78764, 78760, 10788, + 6088, 78759, 78755, 190, 119899, 12593, 100735, 8188, 64408, 0, 4417, + 121303, 92261, 6370, 100436, 7827, 68441, 6965, 128581, 128868, 13201, + 100430, 69896, 78868, 74382, 11841, 7918, 72742, 101006, 113668, 917884, + 1728, 983705, 43764, 178, 12972, 74620, 113671, 71103, 11168, 983383, + 113672, 78327, 75042, 65690, 8382, 71107, 119054, 100381, 9252, 100379, + 4652, 68371, 100382, 121327, 74070, 13065, 9923, 10806, 194596, 11763, + 70016, 120688, 6723, 78187, 100388, 6993, 71044, 121312, 8333, 121329, 0, + 11390, 983136, 74464, 127910, 92320, 74080, 100442, 69911, 11910, 92559, + 8278, 8963, 4034, 128560, 983113, 65344, 120517, 41747, 128342, 128110, + 8677, 120564, 12707, 9350, 66037, 128180, 8836, 12315, 12747, 8300, + 194562, 124984, 7491, 8856, 71361, 127913, 43150, 127768, 120404, 65389, + 66779, 66777, 10813, 2592, 12853, 43269, 7263, 83308, 6536, 100962, + 71891, 65516, 12321, 120391, 120388, 55287, 2237, 120246, 9588, 68494, + 1596, 120383, 41994, 65801, 100874, 6838, 3561, 72753, 0, 10613, 6697, + 12805, 41928, 40981, 10804, 78409, 5006, 64328, 100966, 9931, 0, 8825, 74555, 65940, 43259, 126586, 6107, 83455, 119177, 77941, 78401, 119270, 11783, 335, 120227, 64689, 438, 4510, 5765, 8721, 119570, 119227, 6092, - 12840, 43112, 8876, 120231, 8096, 10284, 120935, 0, 0, 10380, 8733, - 10316, 70121, 41602, 917575, 92308, 74831, 93984, 0, 68482, 65399, - 917820, 64591, 42405, 83466, 120820, 843, 11541, 128326, 70321, 2065, - 41935, 74496, 41902, 0, 983306, 215, 41258, 77875, 43159, 1953, 9579, - 41938, 1256, 3910, 9407, 6242, 0, 83464, 41257, 41900, 8675, 10700, 8805, - 1742, 113722, 9333, 8202, 72399, 0, 983197, 127252, 0, 73882, 499, - 983049, 43467, 0, 43818, 83482, 1712, 5932, 77845, 41762, 983103, 0, - 11967, 1775, 125006, 75009, 11118, 121391, 128009, 9458, 92935, 6470, - 9180, 120380, 43176, 128307, 0, 42782, 0, 124999, 983135, 128309, 73849, - 120669, 9414, 74647, 73782, 73969, 565, 42484, 5794, 201, 2662, 42292, - 194870, 8254, 0, 10975, 43518, 120625, 74763, 1022, 4108, 3880, 74247, - 127153, 0, 92263, 917980, 7507, 983118, 43149, 71059, 65031, 7961, 1636, - 0, 65029, 65024, 119099, 12473, 6534, 120633, 99, 98, 97, 68226, 67584, - 4049, 74163, 127065, 7090, 83274, 7892, 127064, 10777, 917803, 65310, - 65562, 66599, 66722, 194955, 8039, 3363, 66594, 43434, 127062, 71191, - 12596, 66595, 42258, 42570, 5593, 119148, 120534, 92425, 10100, 6061, - 64854, 119, 118, 117, 116, 12998, 122, 121, 120, 111, 110, 109, 108, 115, - 114, 113, 112, 103, 102, 101, 100, 107, 106, 105, 104, 6436, 73974, 534, - 41212, 67713, 1536, 64093, 73970, 77930, 121093, 0, 6020, 12716, 127112, - 12744, 475, 120394, 13266, 127813, 127111, 78842, 73926, 66291, 10645, - 1212, 6543, 983309, 8134, 42935, 2913, 73870, 127113, 1866, 983229, - 71892, 120996, 8923, 1645, 12059, 66585, 71297, 3196, 72404, 194827, - 5935, 1250, 127066, 8174, 9787, 6733, 9859, 7916, 9861, 9860, 5258, 1882, - 1892, 6731, 10882, 405, 11454, 73911, 113787, 73819, 41169, 8939, 41245, - 128775, 41170, 1454, 11369, 6477, 12157, 120861, 0, 0, 41172, 7855, 0, - 71472, 10480, 43258, 126596, 77936, 8264, 12610, 983310, 645, 126616, - 7609, 40973, 69943, 73833, 69948, 5824, 984, 77918, 10688, 5851, 0, 7729, - 73982, 120518, 83473, 195086, 43369, 983177, 128140, 68415, 77861, 4538, - 93978, 43141, 983769, 82976, 74214, 73886, 67709, 917599, 71918, 43005, - 71114, 9552, 0, 70129, 129173, 12997, 83477, 0, 128897, 195030, 2381, - 12883, 10994, 10529, 41906, 0, 74618, 0, 12425, 10661, 10856, 9614, 2428, - 41478, 8582, 10064, 73930, 82977, 70437, 121251, 64896, 119162, 1952, - 92181, 8455, 10082, 11575, 128450, 119566, 128093, 12808, 12183, 6145, - 75020, 64929, 74985, 71916, 74984, 43186, 42509, 0, 3922, 9187, 83277, - 83278, 10191, 83271, 11752, 3353, 9358, 983462, 71366, 66680, 120090, - 8248, 7931, 8558, 9795, 68380, 120047, 983056, 83470, 120081, 119052, - 41027, 120086, 71449, 120088, 7366, 7019, 70378, 0, 11751, 120078, 78294, - 64657, 8657, 83472, 8594, 120068, 0, 983789, 120069, 120072, 120071, 0, - 113711, 43154, 41029, 119956, 11332, 65380, 7728, 94077, 11294, 0, 66665, - 7851, 0, 8375, 8699, 127949, 42524, 68419, 9085, 94041, 7504, 9327, 6160, - 73842, 983864, 194929, 8088, 128937, 74012, 66562, 0, 4439, 6926, 72423, - 12924, 128227, 42369, 4350, 65491, 65145, 9041, 43559, 64577, 10826, - 127476, 11296, 983285, 983409, 0, 65825, 9577, 68199, 983393, 64670, - 983121, 78056, 6793, 11295, 70409, 78053, 73872, 78055, 119993, 10902, 0, - 0, 78070, 11200, 10472, 2995, 121438, 120138, 64682, 2371, 78069, 118893, - 259, 1009, 70405, 2402, 2333, 6440, 194741, 113757, 65125, 41244, 70407, - 13271, 9103, 2278, 983146, 194728, 129120, 0, 10219, 74968, 194740, 0, - 67718, 43178, 127070, 41261, 119362, 43640, 8613, 0, 94049, 6736, 83439, - 41492, 12005, 69927, 127068, 1890, 120056, 0, 83443, 0, 7293, 7991, - 74052, 10578, 121141, 78076, 128620, 67368, 69928, 71850, 78800, 92653, - 64445, 42668, 6635, 128308, 6164, 65170, 74936, 121182, 7676, 11664, 0, - 93025, 69707, 93022, 118812, 0, 71096, 128045, 9175, 11925, 78045, 9088, - 119145, 64545, 1396, 120664, 7546, 3847, 71088, 93037, 4985, 13288, 672, - 8098, 43196, 194746, 120723, 128126, 42655, 74043, 65072, 1577, 11772, - 13041, 5928, 4525, 10658, 65911, 1266, 10180, 194711, 128371, 12622, - 127234, 124948, 0, 121214, 127139, 13310, 773, 19933, 1539, 0, 74969, - 42731, 67972, 74970, 71066, 983200, 3051, 5862, 7823, 92478, 92746, - 120411, 3250, 43991, 69687, 66649, 9510, 66237, 983304, 0, 41066, 64673, - 917963, 92381, 128636, 3505, 8707, 74925, 6725, 120802, 121296, 75041, - 3471, 66391, 5479, 882, 6686, 119584, 11613, 120772, 42754, 74608, - 125029, 83433, 121237, 120845, 0, 83431, 3225, 917996, 4433, 41156, - 43973, 43173, 1443, 4381, 0, 983642, 10926, 11756, 11757, 64879, 121106, - 42654, 127848, 13227, 120320, 10021, 5160, 1387, 0, 92644, 41418, 128933, - 65914, 6721, 217, 917955, 917960, 121082, 10443, 10789, 41158, 119257, - 4274, 11143, 41483, 0, 41250, 128904, 42179, 128375, 5931, 11744, 11215, - 74446, 41252, 66682, 0, 119637, 41249, 1366, 64635, 65047, 12466, 983458, - 120813, 4397, 128037, 128336, 41296, 9545, 41291, 120893, 0, 41485, 3511, - 41282, 5923, 10400, 0, 120493, 760, 0, 12088, 5786, 68252, 42256, 119869, - 67145, 417, 41474, 119562, 41565, 74965, 5934, 74572, 66583, 74904, - 64877, 2284, 64481, 78614, 66013, 41956, 43455, 67240, 194656, 0, 0, - 42273, 5819, 0, 128056, 0, 119129, 983100, 65910, 127747, 10246, 120816, - 65785, 1237, 10274, 4552, 119576, 128287, 0, 1375, 66705, 43573, 65260, - 3329, 0, 42811, 10312, 69845, 120794, 7840, 0, 43630, 10252, 119242, - 128104, 43185, 0, 4396, 195051, 119880, 10769, 9676, 119041, 0, 9753, - 92762, 8944, 983164, 0, 10473, 983823, 120472, 6072, 43025, 10299, - 128436, 68845, 120608, 66326, 67412, 92952, 0, 43811, 9330, 120596, 7222, + 12840, 43112, 8876, 120231, 8096, 10284, 120935, 100970, 70713, 10380, + 8733, 10316, 70121, 41602, 917575, 92308, 74831, 93984, 983830, 68482, + 65399, 917820, 64591, 42405, 83466, 120820, 843, 11541, 100810, 70321, + 2065, 41935, 74496, 41902, 125060, 983306, 215, 41258, 77875, 43159, + 1953, 9579, 41938, 1256, 3910, 9407, 6242, 0, 83464, 41257, 41900, 8675, + 10700, 8805, 1742, 113722, 9333, 8202, 72399, 121027, 983197, 113809, + 100989, 73882, 499, 983049, 43467, 194927, 43818, 83482, 1712, 5932, + 77845, 41762, 129372, 0, 11967, 1775, 125006, 75009, 11118, 121391, + 100982, 9458, 92935, 6470, 9180, 120380, 43176, 100414, 100986, 42782, + 100440, 101036, 101035, 100581, 73849, 101040, 9414, 74647, 73782, 73969, + 565, 42484, 5794, 201, 2662, 42292, 101044, 8254, 101046, 10975, 43518, + 100954, 74763, 1022, 4108, 3880, 74247, 100951, 100991, 92263, 917980, + 7507, 100638, 43149, 71059, 65031, 7961, 1636, 0, 65029, 65024, 119099, + 12473, 6534, 120633, 99, 98, 97, 68226, 67584, 4049, 74163, 100955, 7090, + 83274, 7892, 101030, 10777, 917803, 65310, 65562, 66599, 66722, 194955, + 8039, 3363, 66594, 43434, 100960, 71191, 12596, 66595, 42258, 42570, + 5593, 119148, 120534, 92425, 10100, 6061, 64854, 119, 118, 117, 116, + 12998, 122, 121, 120, 111, 110, 109, 108, 115, 114, 113, 112, 103, 102, + 101, 100, 107, 106, 105, 104, 6436, 73974, 534, 41212, 67713, 1536, + 64093, 73970, 77930, 121093, 0, 6020, 12716, 127112, 12744, 475, 120394, + 13266, 127813, 101073, 78842, 70503, 66291, 10645, 1212, 6543, 125220, + 8134, 42935, 2913, 73870, 127113, 1866, 983229, 71892, 120996, 8923, + 1645, 12059, 66585, 71297, 3196, 72404, 194733, 5935, 1250, 127066, 8174, + 9787, 6733, 9859, 7916, 9861, 9860, 5258, 1882, 1892, 6731, 10882, 405, + 11454, 73911, 101020, 73819, 41169, 8939, 41245, 83465, 41170, 1454, + 11369, 6477, 12157, 120861, 0, 0, 41172, 7855, 100961, 71472, 10480, + 43258, 126596, 77936, 8264, 12610, 983310, 645, 100992, 7609, 40973, + 69943, 73833, 69948, 5824, 984, 77918, 10688, 5851, 100836, 7729, 73982, + 101001, 83473, 101003, 43369, 101005, 100973, 68415, 77861, 4538, 93978, + 43141, 100972, 82976, 74214, 73886, 67709, 917599, 71918, 43005, 71114, + 9552, 0, 70129, 129173, 12997, 83477, 194943, 128897, 100737, 2381, + 12883, 10994, 10529, 41906, 100981, 74618, 100983, 12425, 10661, 10856, + 9614, 2428, 41478, 8582, 10064, 73930, 82977, 70437, 121251, 64896, + 100956, 1952, 92181, 8455, 10082, 11575, 100957, 119566, 100817, 12808, + 12183, 6145, 75020, 64929, 74985, 71916, 74984, 43186, 42509, 0, 3922, + 9187, 83277, 83278, 10191, 83271, 11752, 3353, 9358, 128980, 71366, + 66680, 100813, 8248, 7931, 8558, 9795, 68380, 100812, 100977, 83470, + 120081, 100971, 41027, 100811, 71449, 120088, 7366, 7019, 70378, 0, + 11751, 120078, 78294, 64657, 8657, 83472, 8594, 100969, 100968, 100978, + 100820, 100914, 120071, 0, 113711, 43154, 41029, 119956, 11332, 65380, + 7728, 94077, 11294, 100980, 66665, 7851, 0, 8375, 8699, 121097, 42524, + 68419, 9085, 94041, 7504, 9327, 6160, 73842, 983864, 194929, 8088, 70698, + 74012, 66562, 0, 4439, 6926, 72423, 12924, 100974, 42369, 4350, 65491, + 65145, 9041, 43559, 64577, 10826, 100959, 11296, 983285, 983409, 0, + 65825, 9577, 68199, 82982, 64670, 983121, 78056, 6793, 11295, 70409, + 78053, 73872, 78055, 100815, 10902, 0, 0, 78070, 11200, 10472, 2995, + 100953, 120138, 64682, 2371, 72720, 118893, 259, 1009, 70405, 2402, 2333, + 6440, 125247, 100963, 65125, 41244, 70407, 13271, 9103, 2278, 983146, + 194728, 7301, 983693, 10219, 74968, 194740, 0, 67718, 43178, 127070, + 41261, 119362, 43640, 8613, 194895, 94049, 6736, 83439, 41492, 12005, + 69927, 127068, 1890, 120056, 983302, 83443, 983044, 7293, 7991, 74052, + 10578, 121141, 78076, 128620, 67368, 69928, 71850, 78800, 92653, 64445, + 42668, 6635, 100792, 6164, 65170, 74936, 121182, 7676, 11664, 128684, + 93025, 69707, 93022, 118812, 983233, 71096, 128045, 9175, 11925, 78045, + 9088, 119145, 64545, 1396, 120220, 7546, 3847, 71088, 93037, 4985, 13288, + 672, 8098, 43196, 100796, 120723, 128126, 42655, 74043, 65072, 1577, + 11772, 13041, 5928, 4525, 10658, 65911, 1266, 10180, 194711, 128371, + 12622, 127234, 120566, 194798, 121214, 127139, 13310, 773, 19933, 1539, + 983351, 74969, 42731, 67972, 74970, 71066, 983200, 3051, 5862, 7823, + 92478, 92746, 120411, 3250, 43991, 69687, 66649, 9510, 66237, 983304, + 194748, 41066, 64673, 917963, 92381, 128636, 3505, 8707, 74925, 6725, + 120802, 121296, 75041, 3471, 66391, 5479, 882, 6686, 119584, 11613, + 101106, 42754, 74608, 125029, 83433, 121237, 120845, 0, 83431, 3225, + 917996, 4433, 41156, 43973, 43173, 1443, 4381, 127949, 983642, 10926, + 11756, 11757, 64879, 121106, 42654, 127848, 13227, 120320, 10021, 5160, + 1387, 983730, 92644, 41418, 66749, 65914, 6721, 217, 72829, 917960, + 100965, 10443, 10789, 41158, 119257, 4274, 11143, 41483, 0, 41250, + 128563, 42179, 128375, 5931, 11744, 11215, 70676, 41252, 66682, 983680, + 119637, 41249, 1366, 64635, 65047, 12466, 74319, 120813, 4397, 100445, + 128336, 41296, 9545, 41291, 120893, 0, 41485, 3511, 41282, 5923, 10400, + 0, 120493, 760, 127188, 12088, 5786, 68252, 42256, 100446, 67145, 417, + 41474, 119562, 41565, 74965, 5934, 74572, 66583, 74904, 64877, 2284, + 64481, 78614, 66013, 41956, 43455, 67240, 194656, 0, 127153, 42273, 5819, + 0, 128056, 0, 119129, 983100, 65910, 127747, 10246, 120816, 65785, 1237, + 10274, 4552, 119576, 128287, 0, 1375, 66705, 43573, 65260, 3329, 0, + 42811, 10312, 69845, 120794, 7840, 0, 43630, 10252, 119242, 128104, + 43185, 0, 4396, 100532, 100535, 10769, 9676, 100536, 100539, 9753, 92762, + 8944, 983164, 121450, 10473, 983823, 100542, 6072, 43025, 10299, 100546, + 68845, 100548, 66326, 67412, 92952, 72808, 43811, 9330, 120596, 7222, 10283, 10315, 10379, 4996, 127902, 13281, 66517, 7865, 10087, 78343, 74938, 43324, 0, 0, 7565, 66363, 12952, 64806, 43180, 74967, 7414, 77929, - 43982, 74288, 622, 74023, 885, 43405, 1602, 0, 983731, 852, 0, 12160, - 83491, 10212, 65435, 129092, 12071, 9609, 12156, 917983, 917984, 43586, + 43982, 70741, 622, 74023, 885, 43405, 1602, 0, 71267, 852, 0, 12160, + 83491, 10212, 65435, 126603, 12071, 9609, 12156, 917983, 917984, 43586, 11035, 10411, 917988, 10255, 6710, 10279, 4194, 10375, 43853, 128599, 4315, 12644, 83490, 77937, 43639, 43343, 67408, 128945, 11501, 41177, - 121180, 128866, 43431, 127097, 92413, 8715, 0, 41179, 983358, 43313, - 120230, 41176, 128780, 994, 983045, 8452, 77973, 73966, 66890, 70812, - 5921, 0, 2597, 92423, 5922, 118903, 66873, 4186, 92531, 119967, 127105, - 6718, 127029, 4406, 74601, 8480, 9192, 9747, 121040, 4413, 92196, 42268, - 3198, 5924, 5920, 92469, 6921, 78081, 74007, 42869, 8418, 11681, 43169, - 10176, 0, 742, 74881, 2893, 10772, 65276, 5937, 1914, 2553, 11682, 6756, - 125104, 121126, 8363, 0, 2993, 7772, 3916, 4301, 120494, 1141, 42407, - 7417, 718, 7572, 973, 119599, 120718, 3235, 2415, 43164, 0, 8018, 42333, - 74756, 10675, 6937, 42486, 43381, 65390, 10067, 120849, 1202, 0, 983910, - 65863, 0, 68484, 94013, 78182, 64542, 3260, 73829, 65388, 9945, 8419, - 78042, 6738, 0, 43681, 69728, 2059, 92422, 0, 55237, 1431, 119194, 66565, - 10821, 0, 12804, 128076, 8229, 1235, 3307, 11472, 78089, 78184, 4544, - 71228, 917982, 129188, 1740, 78097, 8758, 985, 12872, 64511, 78094, - 12068, 78102, 71226, 10141, 74922, 63761, 8785, 4476, 65071, 63763, - 12655, 8907, 9147, 78106, 78103, 78104, 120898, 119572, 10665, 64616, - 41572, 127979, 127160, 983554, 41573, 83160, 3931, 120295, 74143, 83156, - 83157, 83158, 78460, 11982, 0, 83067, 128381, 92712, 64484, 119266, - 41167, 0, 41735, 94019, 717, 10754, 83168, 83169, 72413, 83163, 63767, - 83165, 1780, 6936, 0, 83161, 819, 10611, 9694, 126978, 71474, 0, 127871, - 129069, 8343, 8342, 8345, 8344, 6578, 7009, 7523, 6922, 8348, 8347, 7525, - 3346, 8339, 128165, 128208, 575, 268, 78111, 8563, 5754, 120343, 41541, - 65565, 8336, 5936, 7290, 78117, 8337, 8341, 308, 11388, 7522, 83151, - 78123, 65466, 11090, 6953, 0, 83375, 74973, 78132, 5926, 68250, 78130, - 78126, 78127, 78124, 78125, 9038, 7887, 43456, 7830, 11651, 13093, 64002, - 983559, 65742, 12874, 119597, 11590, 0, 74048, 67379, 8595, 9835, 917947, - 43703, 13097, 0, 64643, 13283, 12697, 74975, 12381, 3488, 5933, 10033, - 71101, 66241, 65570, 119154, 12297, 71212, 1955, 127970, 5349, 42538, 0, - 124932, 7411, 9462, 128150, 0, 128465, 43920, 42736, 121017, 5756, - 128324, 7638, 41642, 42764, 983717, 43109, 7637, 5752, 11213, 83481, - 73832, 128827, 83486, 128231, 78334, 917957, 7636, 65171, 9124, 983210, - 78892, 120798, 291, 0, 983221, 2027, 66230, 10080, 78136, 10403, 70869, - 4640, 64713, 10224, 120429, 11183, 120431, 120430, 0, 128351, 127489, - 127138, 0, 92499, 0, 119094, 74213, 7824, 0, 194648, 41274, 5778, 6302, - 121432, 0, 12680, 119130, 1417, 67242, 93041, 9452, 128153, 74393, 11552, - 0, 127855, 128217, 65391, 128614, 10172, 65453, 63789, 41264, 78658, - 6426, 4641, 9179, 64819, 55278, 41255, 42036, 41469, 41269, 120412, - 41267, 4646, 67759, 865, 42034, 78274, 78273, 4645, 42033, 78270, 127982, - 983172, 43948, 195100, 68840, 78674, 1659, 919, 42784, 1671, 127892, - 6069, 9219, 128558, 1661, 13120, 63784, 69819, 10140, 9713, 119143, 0, - 71462, 94050, 2306, 10485, 118943, 6068, 10612, 195099, 119567, 67705, - 92561, 41462, 120470, 195079, 5422, 128234, 983629, 128611, 83474, 10229, - 10635, 826, 83475, 195082, 127003, 195084, 71455, 6483, 92211, 1808, - 7848, 113788, 8100, 78227, 71198, 78670, 13301, 78667, 9667, 78665, - 67704, 983921, 11003, 9904, 83410, 983919, 120690, 9144, 10921, 92992, - 78680, 9840, 65131, 78678, 71092, 10313, 83408, 83500, 64320, 10265, - 67252, 10962, 66904, 43008, 8945, 78683, 120995, 41, 195072, 1792, - 120515, 195073, 8655, 68254, 92544, 77951, 12066, 67258, 385, 4152, 2585, - 127804, 119068, 3126, 917852, 73983, 10957, 127037, 11160, 119116, - 127873, 13157, 0, 128024, 3570, 129187, 7443, 118804, 44006, 6997, 68004, - 126631, 7879, 8739, 11075, 917971, 65216, 70196, 69795, 2593, 8463, 7810, - 128543, 7839, 92612, 78806, 75064, 9691, 4411, 78802, 121219, 120854, - 43442, 69851, 65254, 10066, 983889, 72419, 0, 0, 13061, 8016, 78687, - 19932, 64831, 0, 113684, 12390, 119171, 1634, 68115, 65070, 11056, - 983574, 119925, 983099, 41165, 11328, 12450, 983811, 41166, 0, 12456, - 119914, 171, 5941, 12452, 194709, 12458, 12531, 78779, 43013, 63800, - 74162, 119320, 120483, 9969, 120767, 12454, 63806, 42132, 12063, 78425, - 78424, 3230, 68773, 983497, 75025, 5209, 297, 5810, 8522, 8415, 119937, - 78429, 78428, 7077, 2497, 128651, 960, 74156, 6981, 92374, 12938, 4292, - 78893, 74815, 10512, 0, 74814, 78875, 127505, 78876, 2503, 73778, 1762, - 69794, 2495, 74911, 5844, 68031, 118838, 127947, 12654, 4663, 1899, - 78877, 2507, 64121, 8726, 65594, 92972, 0, 119000, 8892, 78872, 92339, - 71232, 983073, 5782, 420, 127348, 917871, 43796, 10797, 63794, 0, 128533, - 64814, 63796, 43861, 0, 66581, 119204, 41608, 128479, 121144, 63792, - 4659, 120788, 77971, 43676, 74944, 69673, 121029, 11129, 92929, 329, - 77968, 92707, 83496, 7399, 0, 41188, 13244, 67692, 42167, 7435, 78193, - 5380, 119086, 69225, 1155, 11365, 43126, 77972, 0, 65684, 0, 5601, 65192, - 42765, 63752, 0, 7987, 69676, 1172, 69799, 6786, 43601, 120476, 74126, - 5603, 0, 4473, 121085, 72426, 124947, 65347, 65346, 65345, 128548, - 119213, 5347, 69802, 917973, 73868, 70852, 10588, 0, 0, 63755, 128271, - 5343, 78422, 120661, 4555, 5341, 83459, 70071, 74916, 5351, 78675, 43104, - 65244, 121365, 64541, 42519, 68134, 128916, 126986, 74765, 128979, - 127510, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, - 42172, 41086, 65363, 65362, 65361, 11912, 43410, 11323, 65357, 11800, - 65355, 5345, 11103, 65352, 65351, 761, 65349, 19959, 69718, 63856, - 126635, 2423, 74518, 64647, 77959, 11957, 4699, 126573, 128670, 983787, - 0, 64605, 0, 68074, 983977, 4916, 128568, 380, 10958, 66563, 77955, - 69773, 9773, 13167, 12918, 41096, 73980, 69245, 78254, 83450, 10684, 0, - 125063, 92906, 7946, 12541, 8182, 67586, 69780, 0, 128207, 0, 983654, - 9005, 1225, 6630, 0, 0, 118854, 68011, 8847, 92371, 65876, 5535, 8329, - 74590, 125036, 92609, 0, 66874, 3127, 2595, 65713, 42013, 121211, 5607, - 41089, 128626, 0, 70292, 2665, 11304, 43751, 74200, 4970, 8764, 120459, - 8934, 92726, 41566, 4492, 67271, 65011, 41090, 0, 83417, 1188, 7254, - 1100, 0, 67270, 41081, 2912, 11749, 67282, 67281, 67280, 3572, 10023, - 4959, 13079, 0, 67275, 9729, 125110, 121042, 67278, 43361, 127355, 67276, - 11803, 7996, 9907, 41450, 13304, 83392, 83369, 41451, 83370, 11095, 8273, - 74322, 3451, 70291, 972, 41453, 68164, 119327, 73883, 68022, 73945, - 83363, 2288, 19955, 9538, 83366, 69807, 0, 129095, 0, 83381, 11396, - 83385, 11019, 0, 128416, 121205, 68020, 41078, 71365, 261, 5927, 7791, - 128681, 7362, 0, 10696, 70124, 6073, 9838, 118920, 0, 6075, 93995, 282, - 119178, 6437, 68830, 121459, 9801, 66399, 74177, 0, 917959, 3474, 67287, - 0, 67286, 6081, 83469, 78874, 67289, 67283, 83471, 70002, 42930, 0, - 93013, 8751, 11499, 67297, 7816, 12636, 4665, 12628, 4670, 67298, 120272, - 68017, 9642, 10912, 958, 67293, 11387, 67291, 4666, 70792, 4915, 67715, - 4669, 0, 68099, 13287, 4664, 10836, 120550, 75053, 69775, 0, 43595, 7450, - 0, 917875, 8664, 9697, 3606, 83446, 983978, 917874, 64815, 1063, 120250, - 67312, 9772, 7255, 8886, 1389, 127932, 120257, 120258, 120259, 12941, - 42661, 83438, 120255, 120256, 12301, 67836, 69820, 41102, 64428, 120262, - 66602, 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 70340, 83437, 8608, - 42789, 120613, 83436, 0, 71906, 11307, 66707, 67301, 67300, 11745, 7919, - 67304, 1641, 0, 0, 8966, 128900, 74919, 5908, 71870, 67853, 6744, 67310, - 1699, 67308, 67307, 67314, 67313, 6306, 10169, 71324, 119251, 10068, - 3766, 2389, 67305, 120455, 6611, 257, 43170, 13153, 0, 42386, 983815, - 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, 10541, 5622, - 120436, 8477, 3760, 1718, 9442, 66433, 3776, 917837, 41435, 4352, 67324, - 2435, 71211, 5621, 120385, 4201, 3778, 4203, 4202, 4205, 4204, 120447, - 3768, 41774, 765, 41440, 3764, 8473, 6373, 8469, 120438, 12947, 4564, - 119049, 74623, 74271, 73753, 8374, 127201, 0, 6829, 5225, 66901, 127385, - 0, 0, 119615, 67319, 67318, 3162, 43507, 11771, 67322, 67321, 67320, - 42614, 5353, 5625, 74179, 67315, 0, 1010, 64572, 41780, 42623, 64277, - 69942, 6952, 67329, 67328, 67327, 2590, 5629, 65552, 7551, 10325, 5632, - 10471, 120038, 120027, 120028, 120025, 5628, 120031, 970, 120029, 4772, - 2400, 5627, 120017, 67330, 120023, 64275, 120021, 8786, 113693, 203, - 74365, 0, 0, 69985, 78350, 113703, 64378, 42054, 128575, 0, 554, 119649, - 11358, 71172, 12182, 42048, 11065, 125114, 73891, 83423, 83019, 5694, - 7689, 69798, 9323, 4325, 3047, 10317, 175, 120962, 93029, 69764, 0, 0, - 1243, 42154, 5431, 6652, 917561, 67753, 43651, 129129, 68118, 68093, - 1129, 126574, 0, 65900, 1986, 7846, 78804, 8661, 75058, 65255, 93992, - 3845, 4490, 118969, 6649, 74136, 1456, 7530, 11977, 7249, 8366, 0, 7756, - 12342, 120697, 51, 41516, 0, 8570, 9568, 71318, 456, 7026, 8145, 1168, - 9251, 9082, 119964, 64055, 42781, 3866, 12323, 41512, 73805, 68121, - 917850, 41494, 92316, 4660, 67114, 10405, 127195, 78803, 0, 129176, - 42040, 73918, 119627, 7944, 41454, 12605, 0, 42205, 41455, 236, 64051, - 78867, 8214, 83421, 113784, 120037, 41457, 983970, 119589, 1969, 2384, - 8097, 128019, 7413, 68012, 78029, 8766, 43864, 78079, 5854, 125000, - 10583, 0, 119989, 127556, 10416, 68070, 3872, 83424, 983839, 8429, - 121230, 118806, 2838, 6429, 0, 83426, 0, 128478, 0, 194620, 94005, 11096, - 83422, 10553, 1662, 8483, 120396, 43605, 5892, 43418, 67819, 73742, 66, - 65, 68, 67, 70, 69, 72, 71, 74, 73, 76, 75, 78, 77, 80, 79, 82, 81, 84, - 83, 86, 85, 88, 87, 90, 89, 119862, 10357, 7385, 8170, 1704, 8556, - 917975, 9659, 0, 0, 0, 9556, 0, 4503, 11353, 9647, 125015, 78185, 128959, - 0, 71437, 78886, 0, 0, 74229, 66593, 6438, 83364, 9109, 78882, 1289, - 64599, 118915, 68009, 128302, 65507, 2447, 119911, 128694, 128042, - 126545, 66589, 0, 6334, 128369, 0, 19937, 917793, 1322, 92359, 5675, 254, - 0, 0, 69686, 42425, 8918, 64003, 5716, 42312, 0, 194692, 6972, 42826, - 74409, 42464, 120567, 66899, 67155, 74796, 64400, 64693, 128805, 67687, - 65429, 9515, 4435, 0, 42522, 0, 68008, 11785, 7412, 43867, 41978, 1412, - 4594, 1391, 10536, 8067, 9901, 7103, 128293, 7102, 71428, 120748, 3140, - 127276, 7960, 43271, 121099, 12518, 10909, 127508, 1428, 12472, 67254, - 67253, 7699, 12393, 67257, 0, 67256, 67255, 8223, 0, 4261, 121460, - 120910, 74308, 983827, 113712, 67153, 983571, 128046, 43419, 983471, - 64554, 10574, 3878, 67691, 42352, 1752, 73785, 128171, 42506, 128541, - 10199, 917865, 125142, 68021, 65919, 0, 6695, 720, 324, 0, 129035, 43406, - 983736, 1464, 40985, 0, 7974, 0, 43474, 68082, 64488, 128977, 120951, - 64041, 74787, 0, 78865, 92258, 65597, 121416, 78863, 0, 1302, 66288, - 78861, 119134, 0, 67152, 5204, 74774, 43404, 11835, 120923, 3995, 68360, - 65608, 3714, 92190, 120026, 67262, 10999, 11750, 67259, 43251, 67264, - 43301, 0, 120557, 8130, 8672, 10845, 11964, 121268, 128014, 92173, 0, - 68455, 42863, 73839, 127529, 0, 67700, 917812, 113701, 43645, 468, 612, - 0, 64401, 66448, 68376, 0, 1674, 0, 5823, 128625, 12280, 70367, 540, - 74564, 119017, 66422, 8432, 78873, 11073, 0, 64316, 0, 121070, 820, + 121180, 128866, 43431, 127097, 92413, 8715, 983398, 41179, 983358, 43313, + 120230, 41176, 101007, 994, 100448, 8452, 77973, 73966, 66890, 70812, + 5921, 100804, 2597, 66776, 5922, 118903, 66873, 4186, 92531, 73741, + 127105, 6718, 127029, 4406, 74601, 8480, 9192, 9747, 121040, 4413, 92196, + 42268, 3198, 5924, 5920, 92469, 6921, 78081, 74007, 42869, 8418, 11681, + 43169, 10176, 983640, 742, 74881, 2893, 10772, 65276, 5937, 1914, 2553, + 11682, 6756, 125104, 121126, 8363, 0, 2993, 7772, 3916, 4301, 100517, + 1141, 42407, 7417, 718, 7572, 973, 100500, 120718, 3235, 2415, 43164, + 125099, 8018, 42333, 74756, 10675, 6937, 42486, 43381, 65390, 10067, + 100868, 1202, 100557, 128364, 65863, 119250, 68484, 94013, 78182, 64542, + 3260, 73829, 65388, 9945, 8419, 78042, 6738, 122882, 43681, 69728, 2059, + 92422, 100502, 55237, 1431, 100503, 66565, 10821, 100508, 12804, 100510, + 8229, 1235, 3307, 11472, 78089, 78184, 4544, 71228, 194626, 129188, 1740, + 78097, 8758, 985, 12872, 64511, 78094, 12068, 78102, 71226, 10141, 74922, + 63761, 8785, 4476, 65071, 63763, 12655, 8907, 9147, 78106, 78103, 78104, + 120898, 119572, 10665, 64616, 41572, 127979, 127160, 983127, 41573, + 83160, 3931, 120295, 74143, 83156, 83157, 83158, 78460, 11982, 983483, + 83067, 128381, 92712, 64484, 119266, 41167, 983366, 41735, 94019, 717, + 10754, 72740, 83169, 72413, 83163, 63767, 83165, 1780, 6936, 0, 83161, + 819, 10611, 9694, 125228, 71474, 0, 127871, 129069, 8343, 8342, 8345, + 8344, 6578, 7009, 7523, 6922, 8348, 8347, 7525, 3346, 8339, 128165, + 72705, 575, 268, 78111, 8563, 5754, 120343, 41541, 65565, 8336, 5936, + 7290, 78117, 8337, 8341, 308, 11388, 7522, 83151, 78123, 65466, 11090, + 6953, 125240, 83375, 74973, 78132, 5926, 68250, 78130, 78126, 78127, + 78124, 78125, 9038, 7887, 43456, 7830, 11651, 13093, 64002, 983559, + 65742, 12874, 100473, 11590, 100475, 74048, 67379, 8595, 9835, 100456, + 43703, 13097, 127197, 64643, 13283, 12697, 74975, 12381, 3488, 5933, + 10033, 71101, 66241, 65570, 78336, 12297, 71212, 1955, 127970, 5349, + 42538, 0, 124932, 7411, 9462, 128150, 100453, 100452, 43920, 42736, + 70747, 5756, 128324, 7638, 41642, 42764, 120444, 43109, 7637, 5752, + 11213, 83481, 73832, 100463, 83486, 100465, 78334, 121034, 7636, 65171, + 9124, 917957, 78892, 120798, 291, 0, 83488, 2027, 66230, 10080, 78136, + 10403, 70869, 4640, 64713, 10224, 120429, 11183, 120431, 120430, 983223, + 128351, 72845, 127138, 0, 92499, 0, 119094, 74213, 7824, 0, 194648, + 41274, 5778, 6302, 100367, 0, 12680, 119130, 1417, 67242, 93041, 9452, + 128153, 74393, 11552, 0, 127855, 121380, 65391, 128614, 10172, 65453, + 63789, 41264, 78658, 6426, 4641, 9179, 64819, 55278, 41255, 42036, 41469, + 41269, 120412, 41267, 4646, 67759, 865, 42034, 78274, 78273, 4645, 42033, + 78270, 127982, 983172, 43948, 195100, 68840, 78674, 1659, 919, 42784, + 1671, 127892, 6069, 9219, 100461, 1661, 13120, 63784, 69819, 10140, 9713, + 119143, 983359, 71462, 94050, 2306, 10485, 118943, 6068, 10612, 195099, + 119567, 67705, 92561, 41462, 120470, 195079, 5422, 128234, 983629, + 127770, 83474, 10229, 10635, 826, 83475, 195082, 92603, 121149, 71455, + 6483, 92211, 1808, 7848, 113788, 8100, 78227, 71198, 78670, 13301, 78667, + 9667, 78665, 67704, 983921, 11003, 9904, 83410, 983919, 120690, 9144, + 10921, 92992, 78680, 9840, 65131, 78678, 71092, 10313, 83408, 83500, + 64320, 10265, 67252, 10962, 66904, 43008, 8945, 78683, 120995, 41, + 194866, 1792, 120515, 195073, 8655, 68254, 92544, 77951, 12066, 67258, + 385, 4152, 2585, 127804, 119068, 3126, 917852, 73983, 10957, 127037, + 11160, 119116, 127873, 13157, 983645, 128024, 3570, 129187, 7443, 118804, + 44006, 6997, 68004, 126631, 7879, 8739, 11075, 195046, 65216, 70196, + 69795, 2593, 8463, 7810, 128543, 7839, 92612, 78806, 75064, 9691, 4411, + 71276, 72837, 120854, 43442, 69851, 65254, 10066, 122897, 72419, 121411, + 120886, 13061, 8016, 78687, 19932, 64831, 194975, 113684, 12390, 119171, + 1634, 68115, 65070, 11056, 983574, 119925, 983099, 41165, 11328, 12450, + 983811, 41166, 93971, 12456, 119194, 171, 5941, 12452, 194709, 12458, + 12531, 78779, 43013, 63800, 74162, 119320, 120483, 9969, 120767, 12454, + 63806, 42132, 12063, 78425, 78424, 3230, 68773, 128595, 75025, 5209, 297, + 5810, 8522, 8415, 119937, 78429, 78428, 7077, 2497, 128651, 960, 74156, + 6981, 92374, 12938, 4292, 78893, 74815, 10512, 0, 72866, 78875, 78049, + 72841, 2503, 73778, 1762, 69794, 2495, 74911, 5844, 68031, 118838, + 127947, 12654, 4663, 1899, 78877, 2507, 64121, 8726, 65594, 92972, + 120424, 71272, 8892, 78872, 92339, 71232, 983073, 5782, 420, 127348, + 917871, 43796, 10797, 63794, 194967, 125223, 64814, 63796, 43861, 0, + 66581, 119204, 41608, 128479, 121144, 63792, 4659, 120788, 77971, 43676, + 74944, 69673, 121029, 11129, 92929, 329, 77968, 92707, 83496, 7399, 0, + 41188, 13244, 67692, 42167, 7435, 78193, 5380, 119086, 69225, 1155, + 11365, 43126, 77972, 120862, 65684, 0, 5601, 65192, 42765, 63752, 0, + 7987, 69676, 1172, 69799, 6786, 43601, 120476, 74126, 5603, 0, 4473, + 121085, 72426, 124947, 65347, 65346, 65345, 128548, 66741, 5347, 69802, + 917973, 73868, 70852, 10588, 0, 128420, 63755, 126643, 5343, 78422, + 120661, 4555, 5341, 83459, 70071, 74916, 5351, 78675, 43104, 65244, + 121365, 64541, 42519, 68134, 128916, 126986, 74765, 66785, 127510, 6638, + 129363, 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, 42172, + 41086, 65363, 65362, 65361, 11912, 43410, 11323, 65357, 11800, 65355, + 5345, 11103, 65352, 65351, 761, 65349, 19959, 69718, 63856, 126635, 2423, + 74518, 64647, 77959, 11957, 4699, 126573, 128670, 983787, 0, 64605, 0, + 68074, 127307, 4916, 128568, 380, 10958, 66563, 77955, 69773, 9773, + 13167, 12918, 41096, 73980, 69245, 78254, 66737, 10684, 122913, 125063, + 92906, 7946, 12541, 8182, 67586, 69780, 129422, 128207, 983644, 128613, + 9005, 1225, 6630, 0, 983491, 118854, 68011, 8847, 92371, 65876, 5535, + 8329, 74590, 125036, 92609, 0, 66874, 3127, 2595, 65713, 42013, 121211, + 5607, 41089, 128626, 983396, 70292, 2665, 11304, 43751, 74200, 4970, + 8764, 120459, 8934, 92726, 41566, 4492, 67271, 65011, 41090, 0, 83417, + 1188, 7254, 1100, 129180, 67270, 41081, 2912, 11749, 67282, 67281, 67280, + 3572, 10023, 4959, 13079, 124978, 67275, 9729, 125110, 121042, 67278, + 43361, 127355, 67276, 11803, 7996, 9907, 41450, 13304, 83392, 83369, + 41451, 83370, 11095, 8273, 74322, 3451, 70291, 972, 41453, 68164, 119327, + 73883, 68022, 73945, 83363, 2288, 19955, 9538, 83366, 69807, 125246, + 129095, 0, 83381, 11396, 83385, 11019, 121218, 128416, 121205, 68020, + 41078, 66758, 261, 5927, 7791, 128681, 7362, 125256, 10696, 70124, 6073, + 9838, 118920, 917878, 6075, 93995, 282, 119178, 6437, 68830, 121459, + 9801, 66399, 74177, 66791, 917959, 3474, 67287, 0, 67286, 6081, 83469, + 78874, 67289, 67283, 83471, 70002, 42930, 129413, 93013, 8751, 11499, + 67297, 7816, 12636, 4665, 12628, 4670, 67298, 120272, 68017, 9642, 10912, + 958, 67293, 11387, 67291, 4666, 70792, 4915, 67715, 4669, 0, 68099, + 13287, 4664, 10836, 120550, 75053, 69775, 0, 43595, 7450, 74173, 917875, + 8664, 9697, 3606, 83446, 983978, 917874, 64815, 1063, 119088, 67312, + 9772, 7255, 8886, 1389, 100833, 120257, 119202, 120259, 12941, 42661, + 83438, 120255, 101101, 12301, 67836, 69820, 41102, 64428, 120262, 66602, + 66788, 1017, 66600, 523, 505, 1447, 74436, 0, 70340, 66793, 8608, 42789, + 70868, 83436, 983480, 71906, 11307, 66707, 67301, 67300, 11745, 7919, + 67304, 1641, 126523, 0, 8966, 128900, 74919, 5908, 71870, 67853, 6744, + 67310, 1699, 67308, 67307, 67314, 67313, 6306, 10169, 71324, 119251, + 10068, 3766, 2389, 67305, 120455, 6611, 257, 43170, 13153, 0, 42386, + 917974, 9436, 2599, 983747, 6496, 9449, 5930, 11476, 11033, 11447, 10541, + 5622, 120436, 8477, 3760, 1718, 9442, 66433, 3776, 917837, 41435, 4352, + 67324, 2435, 71211, 5621, 120385, 4201, 3778, 4203, 4202, 4205, 4204, + 120447, 3768, 41774, 765, 41440, 3764, 8473, 6373, 8469, 120438, 12947, + 4564, 100470, 74623, 74271, 73753, 8374, 127201, 0, 6829, 5225, 66901, + 127385, 0, 0, 119615, 67319, 67318, 3162, 43507, 11771, 67322, 67321, + 67320, 42614, 5353, 5625, 74179, 67315, 0, 1010, 64572, 41780, 42623, + 64277, 69942, 6952, 67329, 67328, 67327, 2590, 5629, 65552, 7551, 10325, + 5632, 10471, 120038, 120027, 120028, 120025, 5628, 120031, 970, 120029, + 4772, 2400, 5627, 74364, 67330, 120023, 64275, 120021, 8786, 113693, 203, + 74365, 0, 0, 69985, 78350, 101065, 64378, 42054, 128575, 194993, 554, + 83422, 11358, 71172, 12182, 42048, 11065, 125114, 73891, 83423, 83019, + 5694, 7689, 66784, 9323, 4325, 3047, 10317, 175, 120962, 93029, 69764, 0, + 120625, 1243, 42154, 5431, 6652, 917561, 67753, 43651, 127801, 68118, + 68093, 1129, 72846, 100707, 65900, 1986, 7846, 78804, 8661, 75058, 65255, + 93992, 3845, 4490, 118969, 6649, 74136, 1456, 7530, 11977, 7249, 8366, + 983612, 7756, 12342, 120697, 51, 41516, 0, 8570, 9568, 71318, 456, 7026, + 8145, 1168, 9251, 9082, 119964, 64055, 42781, 3866, 12323, 41512, 73805, + 68121, 917850, 41494, 92316, 4660, 67114, 10405, 127195, 78803, 100439, + 129176, 42040, 73918, 119627, 7944, 41454, 12605, 0, 42205, 41455, 236, + 64051, 78867, 8214, 83421, 113784, 120037, 41457, 983481, 119589, 1969, + 2384, 8097, 128019, 7413, 68012, 72820, 8766, 43864, 72824, 5854, 125000, + 10583, 0, 119989, 72819, 10416, 68070, 3872, 83424, 127399, 8429, 121230, + 118806, 2838, 6429, 121077, 83426, 72835, 100420, 0, 194620, 94005, + 11096, 83420, 10553, 1662, 8483, 120396, 43605, 5892, 43418, 67819, + 73742, 66, 65, 68, 67, 70, 69, 72, 71, 74, 73, 76, 75, 78, 77, 80, 79, + 82, 81, 84, 83, 86, 85, 88, 87, 90, 89, 119862, 10357, 7385, 8170, 1704, + 8556, 917975, 9659, 0, 100736, 0, 9556, 0, 4503, 11353, 9647, 125015, + 68288, 128959, 917976, 71437, 78886, 983288, 983496, 74229, 66593, 6438, + 83364, 9109, 78882, 1289, 64599, 118915, 68009, 128302, 65507, 2447, + 119911, 128694, 128042, 126545, 66589, 983875, 6334, 128369, 917919, + 19937, 917793, 1322, 92359, 5675, 254, 124964, 0, 69686, 42425, 8918, + 64003, 5716, 42312, 120090, 100552, 6972, 42826, 74409, 42464, 120567, + 66899, 67155, 74796, 64400, 64693, 128437, 67687, 65429, 9515, 4435, + 983367, 42522, 0, 68008, 11785, 7412, 43867, 41978, 1412, 4594, 1391, + 10536, 8067, 9901, 7103, 128293, 7102, 71428, 120748, 3140, 127276, 7960, + 43271, 121099, 12518, 10909, 127508, 1428, 12472, 67254, 67253, 7699, + 12393, 67257, 0, 67256, 67255, 8223, 0, 4261, 78784, 120910, 74308, + 983827, 113712, 67153, 125252, 72744, 43419, 72748, 64554, 10574, 3878, + 67691, 42352, 1752, 73785, 128171, 42506, 128541, 10199, 917865, 125142, + 68021, 65919, 127102, 6695, 720, 324, 0, 129035, 43406, 125269, 1464, + 40985, 0, 7974, 0, 43474, 68082, 64488, 128977, 120951, 3420, 74787, 0, + 78865, 92258, 65597, 121416, 78863, 0, 1302, 66288, 78861, 119134, + 120274, 67152, 5204, 74774, 43404, 11835, 120923, 3995, 68360, 65608, + 3714, 92190, 120026, 67262, 10999, 11750, 67259, 43251, 67264, 43301, 0, + 120557, 8130, 8672, 10845, 11964, 121268, 128014, 92173, 120710, 68455, + 42863, 73839, 119929, 0, 67700, 917812, 113701, 43645, 468, 612, 0, + 64401, 66448, 68376, 128208, 1674, 917581, 5823, 128625, 12280, 70367, + 540, 74564, 119017, 66422, 8432, 78873, 11073, 0, 64316, 0, 121001, 820, 41741, 983477, 120667, 124981, 64684, 126992, 3359, 7800, 69934, 65177, 6226, 353, 12396, 121176, 119612, 64742, 128682, 78879, 983478, 127938, - 12412, 19941, 0, 120277, 70352, 1884, 9481, 42418, 70059, 41157, 983142, - 1195, 64898, 7924, 119870, 41151, 2010, 71430, 41328, 42344, 0, 12409, 0, - 4360, 121023, 9739, 128550, 69933, 73921, 917631, 42521, 8539, 128606, 0, - 118986, 127148, 4788, 121345, 68023, 65734, 983457, 43790, 120274, 13075, - 74429, 94063, 64569, 43532, 10837, 2492, 127197, 118901, 68637, 41136, - 43785, 11813, 9649, 41154, 113731, 5128, 4038, 41143, 65604, 64859, - 41592, 6771, 1648, 5435, 67295, 6734, 41343, 119848, 65439, 12709, 6986, - 92364, 68015, 120533, 41349, 70021, 12581, 10374, 5175, 0, 73806, 10254, - 113681, 10278, 10262, 69858, 41346, 120870, 607, 0, 68182, 128846, 12923, - 10314, 10282, 65477, 10378, 120297, 40976, 8265, 129149, 78639, 40975, - 5840, 42838, 74987, 40978, 121386, 92945, 128020, 119809, 0, 66444, - 10538, 120810, 2550, 119836, 6779, 129130, 0, 3525, 6824, 118886, 983582, - 0, 5619, 65822, 113751, 113738, 7455, 71424, 5616, 11486, 9656, 0, 0, - 10727, 5615, 120873, 120551, 42380, 64895, 43693, 66451, 808, 5455, - 11347, 0, 1026, 5620, 194887, 0, 11350, 5617, 0, 9225, 64639, 127073, - 9145, 128060, 1338, 120581, 983158, 12739, 4603, 3084, 70408, 92484, - 9858, 6037, 983465, 3974, 78213, 10290, 983704, 3083, 10322, 129048, - 129030, 75038, 41036, 66897, 0, 43321, 65606, 127071, 41032, 42388, 0, - 64700, 10011, 1445, 40961, 0, 119105, 0, 40960, 194907, 67727, 125106, - 2223, 64952, 10402, 128358, 125049, 92304, 10603, 0, 983403, 71438, 0, - 6714, 10083, 127069, 121019, 78367, 69976, 0, 43872, 9073, 42585, 64302, - 10704, 65030, 4787, 129031, 74829, 0, 65423, 121306, 128118, 9570, 55260, - 9525, 2689, 917626, 65426, 194872, 917624, 43740, 121163, 40966, 120009, - 13286, 3998, 42598, 42596, 503, 71433, 8735, 2690, 66488, 42836, 127150, - 41954, 917615, 1652, 772, 6688, 8310, 65428, 3487, 43416, 3585, 10194, - 43320, 119159, 73955, 92315, 6468, 41976, 9720, 74964, 11179, 41970, - 66255, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, 13038, 43699, 0, - 41488, 128087, 8527, 194917, 12362, 12435, 12360, 41053, 3266, 0, 12356, - 8616, 41466, 42924, 2227, 11450, 983691, 3638, 12354, 67299, 3216, 83099, - 2358, 83092, 8633, 71201, 983745, 119182, 69244, 83090, 70375, 11759, - 194903, 6368, 74823, 67303, 41423, 8078, 10504, 83104, 41698, 42237, - 983454, 7002, 83101, 41430, 42267, 41051, 41484, 0, 71467, 41050, 41473, + 12412, 19941, 0, 120277, 70352, 1884, 9481, 42418, 70059, 41157, 195058, + 1195, 64898, 7924, 119870, 41151, 2010, 71430, 41328, 42344, 0, 12409, + 120712, 4360, 121023, 9739, 128550, 69933, 73921, 917631, 42521, 8539, + 128606, 0, 118986, 127148, 4788, 121345, 68023, 65734, 983457, 43790, + 119869, 13075, 74429, 94063, 64569, 43532, 10837, 2492, 72762, 118901, + 68637, 41136, 43785, 11813, 9649, 41154, 113731, 5128, 4038, 41143, + 65604, 64859, 41592, 6771, 1648, 5435, 67295, 6734, 41343, 119848, 65439, + 12709, 6986, 66761, 68015, 120533, 41349, 70021, 12581, 10374, 5175, 0, + 73806, 10254, 113681, 10278, 10262, 69858, 41346, 120870, 607, 983621, + 68182, 128846, 12923, 10314, 10282, 65477, 10378, 120297, 40976, 8265, + 129149, 78639, 40975, 5840, 42838, 74987, 40978, 78174, 92945, 128020, + 119809, 120891, 66444, 10538, 120810, 2550, 119836, 6779, 129091, 917815, + 3525, 6824, 118886, 983582, 119838, 5619, 65822, 113751, 113738, 7455, + 71424, 5616, 11486, 9656, 0, 0, 10727, 5615, 120873, 120551, 42380, + 64895, 43693, 66451, 808, 5455, 11347, 72760, 1026, 5620, 194887, 0, + 11350, 5617, 7299, 9225, 64639, 127073, 9145, 41344, 1338, 120581, + 983158, 12739, 4603, 3084, 70408, 92484, 9858, 6037, 100376, 3974, 78213, + 10290, 983704, 3083, 10322, 129048, 129030, 75038, 41036, 66897, 100374, + 43321, 65606, 127071, 41032, 42388, 100619, 64700, 10011, 1445, 40961, 0, + 119105, 917969, 40960, 194907, 67727, 125106, 2223, 64952, 10402, 119213, + 125049, 92304, 10603, 0, 983403, 71438, 128500, 6714, 10083, 127069, + 121019, 78367, 69976, 983655, 43872, 9073, 42585, 64302, 10704, 65030, + 4787, 121279, 74829, 0, 65423, 74988, 128118, 9570, 55260, 9525, 2689, + 917626, 65426, 194872, 66740, 43740, 121163, 40966, 120009, 13286, 3998, + 42598, 42596, 503, 71433, 8735, 2690, 66488, 42836, 127150, 41954, + 917615, 1652, 772, 6688, 8310, 65428, 3487, 43416, 3585, 10194, 43320, + 72756, 66757, 92315, 6468, 41976, 9720, 74964, 11179, 41970, 66255, 5836, + 12358, 129421, 4355, 9048, 12180, 65027, 64680, 13038, 43699, 0, 41488, + 128087, 8527, 194917, 12362, 12435, 12360, 41053, 3266, 0, 12356, 8616, + 41466, 42924, 2227, 11450, 120734, 3638, 12354, 67299, 3216, 83099, 2358, + 83092, 8633, 71201, 983745, 119182, 69244, 83090, 70375, 11759, 194903, + 6368, 72834, 67303, 41423, 8078, 10504, 83104, 41698, 42237, 983454, + 7002, 83101, 41430, 42267, 41051, 41484, 129362, 71467, 41050, 8872, 10466, 13099, 71445, 70371, 120897, 6435, 74331, 11362, 128973, 83088, 65382, 92770, 41420, 83083, 3625, 74915, 41409, 71441, 69639, 2041, 9178, - 9672, 41427, 43541, 43317, 74924, 0, 128557, 41424, 917598, 120546, 0, - 128212, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, 0, 127538, 0, 78251, - 124943, 42290, 3275, 92472, 42329, 68850, 74901, 0, 127951, 92388, 69649, - 10989, 74234, 113781, 10598, 7410, 2669, 903, 0, 2920, 0, 127232, 74603, - 64504, 19928, 0, 128411, 3917, 983119, 11732, 0, 983180, 41448, 41461, - 128823, 0, 113721, 113758, 8819, 12663, 0, 41184, 74014, 232, 74835, - 120646, 9168, 65786, 0, 83293, 121007, 9094, 983926, 11758, 68425, 71886, - 1064, 42467, 128044, 10115, 19924, 92711, 113682, 7862, 64551, 13224, - 8516, 41862, 66650, 7561, 78618, 69793, 1878, 0, 71434, 2911, 83074, - 41178, 5427, 64823, 83062, 83066, 3787, 41174, 83055, 41458, 67147, - 41463, 42413, 11292, 2406, 775, 0, 65584, 69923, 6074, 9618, 68056, - 121480, 43440, 74539, 194901, 41436, 3656, 917805, 120600, 41456, 67694, - 1599, 11333, 83139, 6703, 8513, 83134, 1613, 83136, 68456, 12598, 83131, - 83132, 78745, 74500, 41460, 10145, 10542, 9937, 78746, 67144, 9905, - 83145, 65730, 83147, 120374, 8427, 83142, 55246, 120376, 42895, 11497, - 64687, 74008, 42592, 3871, 983584, 128305, 9111, 5741, 83325, 120987, - 120366, 119111, 11150, 0, 120368, 128855, 11648, 83126, 83127, 83128, - 41587, 70391, 83123, 71108, 42113, 983588, 127155, 12172, 83121, 71443, - 65298, 65723, 68289, 73871, 65724, 7928, 120354, 983095, 41595, 73730, - 64671, 42118, 73830, 66042, 10355, 983110, 7875, 983669, 41598, 3993, - 121269, 1545, 40971, 536, 127075, 43029, 0, 121000, 65173, 65286, 0, - 70331, 195012, 0, 94065, 0, 41375, 5402, 83035, 128192, 1687, 120503, - 917817, 0, 78194, 64326, 40969, 10526, 73747, 8323, 40968, 1339, 11731, - 78756, 127108, 65460, 12242, 128513, 8020, 10843, 11554, 917867, 0, 8266, - 41006, 65722, 83041, 10710, 74045, 118942, 67667, 64567, 119155, 83313, - 128778, 71889, 67857, 120687, 0, 92958, 11755, 66305, 68332, 0, 10917, - 93979, 0, 11272, 2040, 41247, 41326, 195060, 1741, 42370, 1227, 83119, - 83120, 11413, 126583, 83115, 5283, 1586, 4978, 68050, 1984, 11830, 43819, - 92293, 40984, 42904, 9373, 0, 12916, 6284, 194888, 41663, 983093, 0, - 68313, 9237, 9385, 41648, 0, 128953, 2299, 41666, 1830, 73783, 2056, - 41287, 92610, 0, 71917, 42219, 68086, 120327, 41987, 41676, 983059, - 120823, 126553, 41670, 0, 92590, 2796, 55291, 11683, 9902, 74521, 67988, - 11451, 82995, 78855, 42631, 2359, 71890, 67844, 74164, 41238, 548, 11405, - 13133, 64368, 127270, 120925, 66272, 397, 43622, 42139, 9547, 9590, - 128238, 1614, 43661, 64356, 66307, 6651, 1358, 120871, 428, 9620, 1466, - 78112, 10982, 113785, 1333, 7104, 407, 6425, 128834, 74253, 127993, 0, 0, - 5804, 11976, 8554, 92721, 0, 70167, 9057, 42294, 41218, 125097, 121290, - 78137, 1883, 10952, 8048, 70443, 41225, 92621, 42915, 128616, 128512, - 128629, 4407, 74648, 65809, 11837, 194821, 8448, 7141, 74183, 120334, - 12675, 12659, 74634, 42363, 120624, 68077, 55273, 10766, 12012, 2386, - 64732, 9170, 917821, 9123, 64585, 10296, 119158, 7140, 10977, 127378, - 4164, 9081, 0, 120569, 42049, 42042, 8709, 128283, 126477, 120637, 42419, - 64799, 42047, 0, 194820, 8470, 11807, 65897, 577, 0, 983760, 74300, 0, - 68087, 74840, 126474, 0, 128791, 92224, 8736, 1414, 42643, 9683, 43486, - 74344, 0, 2536, 983941, 66330, 121238, 0, 0, 0, 0, 0, 194830, 66317, - 69945, 66315, 2106, 67809, 11273, 120986, 43004, 7541, 82988, 0, 961, - 64307, 66324, 64906, 125080, 3106, 65917, 41284, 1696, 983130, 891, - 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 120878, 0, 0, - 194826, 92688, 3566, 2322, 120371, 70831, 11449, 128187, 42868, 41285, - 3547, 0, 0, 113746, 983400, 43216, 6089, 78682, 68490, 120578, 4170, - 1029, 127761, 127036, 119224, 42374, 0, 744, 92883, 113739, 0, 65823, - 127826, 11182, 3551, 92938, 983891, 4623, 55268, 128738, 4598, 983162, - 65136, 127136, 0, 128169, 10851, 120876, 6179, 92602, 6180, 0, 11952, - 74579, 78648, 11972, 78646, 78647, 78644, 78645, 177, 78643, 6176, - 120580, 983696, 125135, 6177, 9020, 78652, 78653, 6178, 120249, 120242, - 128027, 67673, 2214, 8754, 127051, 120237, 2137, 43081, 194663, 119114, - 9136, 66889, 4401, 41280, 70801, 8974, 2308, 194750, 74149, 128327, 2318, - 983183, 66361, 8198, 65626, 64360, 12601, 42536, 43931, 120827, 43930, - 92462, 6970, 5404, 43332, 3667, 7936, 12925, 126989, 6385, 128482, - 128403, 118949, 10874, 65505, 120002, 129151, 42053, 2075, 42057, 11083, - 42052, 0, 67266, 67651, 121104, 9665, 92300, 983666, 13181, 917617, 0, 0, - 70088, 74148, 0, 70419, 120225, 120229, 120224, 74172, 41145, 66404, - 94096, 74422, 41148, 8683, 7594, 113686, 75033, 119090, 10869, 43458, - 41146, 92407, 11441, 121456, 3512, 119633, 92965, 8103, 78140, 120847, - 65184, 11780, 41563, 42796, 129055, 69742, 41544, 65146, 71314, 0, 78109, - 129177, 19942, 983244, 118908, 7988, 10436, 74273, 3271, 73804, 64711, 0, - 94064, 983071, 128652, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, - 127774, 0, 128861, 8514, 0, 0, 0, 74346, 66697, 0, 11684, 0, 92486, - 917603, 0, 42043, 43232, 66677, 74927, 42046, 74157, 4036, 126481, 0, - 128213, 194861, 83355, 11954, 70348, 1450, 12986, 1340, 0, 65441, 92722, - 0, 0, 125117, 0, 917542, 73812, 83053, 6539, 92948, 126607, 120702, - 92390, 0, 120492, 41190, 3973, 119365, 4575, 41193, 7982, 429, 917979, - 78891, 0, 194848, 65792, 128408, 83282, 6417, 118918, 78178, 0, 128970, - 0, 0, 4919, 10590, 128556, 7755, 0, 92942, 64548, 120506, 1621, 10214, - 65126, 68253, 127004, 983616, 12188, 983668, 1617, 8050, 0, 5015, 0, - 119174, 42590, 70354, 1756, 78181, 0, 65768, 6352, 41892, 0, 7555, 13103, - 5408, 2817, 1214, 69919, 92335, 121208, 0, 68224, 120872, 41764, 7957, - 8689, 64723, 1056, 42896, 74147, 3559, 983918, 55286, 7073, 65850, 12327, - 70853, 119028, 0, 128122, 128442, 2341, 8450, 8484, 8474, 194884, 68322, - 70079, 8461, 67721, 12153, 12799, 0, 43709, 43708, 9451, 7571, 13073, - 43847, 0, 681, 983254, 703, 127518, 3272, 8781, 12894, 70077, 11709, - 92288, 70514, 983900, 83175, 71436, 11338, 120768, 3276, 128968, 917989, - 65928, 0, 121367, 65021, 64795, 74574, 0, 10047, 78814, 3262, 78811, - 42711, 0, 0, 68478, 163, 576, 9895, 1655, 70131, 74591, 78815, 78816, - 66888, 0, 0, 70513, 10039, 120426, 5626, 5623, 5717, 5776, 43488, 83497, - 66885, 41591, 11036, 65252, 92382, 0, 0, 120111, 67848, 128128, 983595, - 983472, 8887, 127521, 7295, 11031, 983336, 43157, 0, 8946, 10348, 10412, - 8755, 119152, 0, 5718, 13221, 0, 0, 78135, 70515, 917616, 8810, 74499, - 686, 0, 71362, 4619, 118954, 6654, 73769, 74426, 0, 12040, 65689, 10128, - 65118, 68029, 119151, 74205, 92651, 128902, 2401, 68144, 8792, 983648, - 68044, 65455, 0, 74328, 0, 74561, 120763, 12886, 120952, 66624, 126578, - 43557, 10300, 10161, 10396, 71210, 78602, 118945, 9984, 73851, 3010, - 6441, 70349, 1458, 41475, 72429, 93975, 127910, 11479, 121355, 120356, - 6350, 12864, 69674, 71473, 1061, 64780, 2001, 43111, 55230, 124946, 4052, - 113673, 7626, 0, 120907, 1045, 0, 5631, 41113, 127544, 0, 43707, 74127, - 0, 983718, 8486, 0, 73758, 2335, 4362, 983195, 126561, 69221, 1025, - 127277, 42625, 70325, 78084, 41443, 0, 128206, 0, 1774, 1523, 121330, - 68059, 41445, 78236, 11207, 8567, 41442, 3988, 74843, 78237, 118910, 0, - 65274, 8564, 78199, 78238, 127515, 121272, 0, 43446, 0, 66513, 6256, - 917807, 579, 55218, 10206, 78195, 6375, 2673, 983886, 11814, 0, 4488, - 128716, 120554, 68451, 10444, 118846, 127334, 11799, 74407, 68466, 4487, - 127849, 42832, 1032, 120267, 43450, 78257, 7203, 124998, 614, 70361, - 127215, 120615, 119622, 78262, 127271, 127323, 0, 43121, 127211, 128366, - 92513, 1050, 7549, 121260, 82994, 9314, 70365, 92898, 68039, 127061, - 10057, 70434, 127313, 128577, 66504, 120963, 82992, 2307, 128456, 64333, - 127312, 128230, 73873, 983710, 94035, 0, 127973, 128708, 70446, 10360, - 6746, 120473, 92245, 440, 0, 13085, 9233, 74216, 0, 127785, 9957, 128285, - 66447, 8046, 64963, 65777, 10125, 74212, 42819, 10910, 120424, 1521, - 9896, 93965, 10487, 69878, 12527, 68737, 7970, 125073, 128660, 0, 65769, - 5243, 9849, 5239, 65771, 121429, 0, 5237, 69714, 68756, 10103, 5247, - 4769, 129302, 118977, 12873, 2283, 92931, 0, 3008, 4896, 128102, 12087, - 0, 55231, 41103, 92256, 64565, 4773, 120846, 78549, 70074, 4770, 66891, - 917567, 8731, 65378, 66911, 120619, 9122, 128033, 126600, 4774, 3019, - 9997, 12834, 0, 9456, 10215, 120547, 0, 78556, 0, 121332, 74776, 4281, - 4768, 120572, 41535, 4099, 9017, 69993, 983692, 78095, 2225, 78096, - 118946, 121097, 0, 78098, 0, 42814, 880, 0, 113764, 66870, 2134, 0, - 10116, 9877, 92329, 128960, 0, 7095, 8379, 74116, 6778, 0, 78090, 8243, - 2427, 128141, 7093, 0, 11585, 195003, 9962, 82990, 12223, 128485, 92430, - 1434, 120254, 5637, 11573, 0, 0, 0, 19951, 83389, 74419, 0, 194686, - 55283, 0, 70363, 74437, 1156, 8740, 83295, 3782, 64331, 0, 41370, 1014, - 8261, 120956, 917596, 10835, 917966, 65536, 83294, 120463, 125051, 7702, - 118824, 128976, 43010, 65779, 65783, 1150, 10547, 5700, 0, 120603, 65383, - 2339, 42594, 5697, 118788, 75018, 128576, 74923, 42257, 5696, 92677, - 120465, 3862, 9643, 0, 70183, 7634, 65167, 9845, 0, 0, 5701, 9722, 41490, - 128719, 1426, 68217, 983614, 68447, 42204, 55270, 8571, 67403, 78067, - 43859, 78818, 92719, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, 43194, - 64712, 10744, 78887, 990, 5647, 0, 7387, 78734, 41114, 11477, 5646, - 12879, 11018, 128362, 3945, 92589, 983466, 194989, 78883, 0, 78212, - 127746, 1020, 73763, 983835, 78731, 5648, 64748, 120920, 78733, 10205, - 3545, 983585, 6984, 128008, 74051, 128901, 43242, 120458, 2667, 128173, - 125037, 0, 9911, 0, 65020, 10097, 119166, 127145, 983662, 118836, 983748, - 78208, 1140, 78426, 0, 10159, 0, 0, 8128, 128644, 68326, 194911, 1815, - 19910, 890, 124935, 3267, 92291, 0, 10123, 121398, 4410, 1041, 10576, - 6354, 92581, 580, 74232, 983746, 128347, 0, 0, 128098, 19938, 65906, - 127819, 917811, 0, 3298, 5375, 10142, 0, 8215, 92633, 6134, 41246, 64402, - 983147, 69899, 194938, 0, 121426, 41382, 917927, 128653, 5173, 65348, - 527, 121174, 113782, 78469, 128250, 78797, 11915, 0, 0, 10072, 0, 42695, - 2329, 42250, 0, 11187, 69667, 12245, 1568, 94033, 83460, 0, 113705, - 917910, 11201, 92708, 74769, 126470, 67680, 9069, 6144, 0, 119840, 73822, - 0, 128010, 64917, 41521, 118934, 494, 13250, 92250, 65098, 6364, 956, - 113792, 12830, 10462, 73740, 73734, 0, 0, 983739, 66449, 13263, 74281, - 69217, 13171, 127796, 120564, 0, 63885, 127251, 1044, 41276, 128363, 0, - 0, 42068, 11795, 124985, 0, 127202, 0, 42450, 3907, 0, 64526, 11829, - 68197, 12295, 0, 11475, 70329, 3020, 11537, 0, 66441, 120761, 7098, - 125071, 0, 1057, 566, 42696, 127239, 3016, 42274, 43464, 66490, 12921, - 66571, 78472, 71207, 3006, 4620, 127237, 983330, 0, 0, 64659, 0, 127749, - 55253, 6357, 6362, 8626, 71337, 2216, 9090, 65377, 41596, 0, 42920, 1698, - 0, 64477, 917853, 43813, 1053, 0, 78269, 0, 92977, 1052, 1051, 459, 1060, - 74349, 66479, 67689, 66871, 917845, 70327, 42490, 689, 6508, 4163, 42298, - 8639, 66641, 4246, 0, 43514, 12130, 983308, 42337, 64596, 64375, 66481, - 127850, 983144, 127828, 6359, 0, 43471, 983768, 0, 83345, 75065, 0, 6358, - 6361, 1926, 6356, 92627, 7898, 8110, 10935, 0, 10069, 5830, 127773, - 43685, 74307, 0, 42910, 83301, 8693, 78611, 119565, 128621, 120413, - 92192, 121454, 65894, 194694, 0, 64296, 983681, 983644, 194959, 119187, - 2135, 11836, 0, 0, 78869, 42313, 5579, 92412, 70384, 129113, 43854, - 71913, 5578, 11840, 128115, 42023, 6234, 5669, 92275, 78620, 121171, - 68833, 92254, 68202, 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 2220, - 42465, 41330, 194987, 5795, 65512, 68774, 65702, 68770, 120801, 65251, - 68228, 65710, 128399, 128429, 67672, 68783, 5370, 70465, 2931, 1638, - 10966, 10188, 65878, 118848, 0, 69694, 69879, 74585, 8172, 42017, 92756, - 10844, 121016, 128195, 92424, 6374, 119998, 121075, 286, 78023, 1062, 0, - 119999, 0, 7395, 127783, 1070, 64900, 7153, 6095, 41865, 194640, 3015, + 9672, 41427, 43541, 43317, 74924, 917777, 128557, 41424, 119563, 120546, + 983888, 128212, 0, 41417, 1261, 0, 128261, 12102, 119662, 41401, 128932, + 127538, 113767, 78251, 124943, 42290, 3275, 92472, 42329, 68850, 74901, + 121005, 127951, 92388, 69649, 10989, 74234, 113781, 10598, 7410, 2669, + 903, 195091, 2920, 0, 127232, 74603, 64504, 19928, 0, 128411, 3917, + 78185, 11732, 128512, 72797, 41448, 41461, 128823, 0, 113721, 113758, + 8819, 12663, 0, 41184, 74014, 232, 74835, 120646, 9168, 65786, 0, 83293, + 121007, 9094, 917794, 11758, 68425, 71886, 1064, 42467, 128044, 10115, + 19924, 92711, 113682, 7862, 64551, 13224, 8516, 41862, 66650, 7561, + 78618, 69793, 1878, 128641, 71434, 2911, 72758, 41178, 5427, 64823, + 78615, 83066, 3787, 41174, 83055, 41458, 67147, 41463, 42413, 11292, + 2406, 775, 0, 65584, 69923, 6074, 9618, 68056, 121480, 43440, 74539, + 194901, 41436, 3656, 917805, 120600, 41456, 67694, 1599, 11333, 83139, + 6703, 8513, 83134, 1613, 83136, 68456, 12598, 83131, 83132, 78745, 74500, + 41460, 10145, 10542, 9937, 78746, 67144, 9905, 83145, 65730, 83147, + 120374, 8427, 83142, 55246, 120376, 42895, 11497, 64687, 74008, 42592, + 3871, 983584, 128305, 9111, 5741, 83325, 120987, 120366, 119111, 11150, + 194876, 120368, 128855, 11648, 83126, 83127, 83128, 41587, 70391, 83123, + 71108, 42113, 917956, 127155, 12172, 83121, 71443, 65298, 65723, 68289, + 73871, 65724, 7928, 120354, 983095, 41595, 73730, 64671, 42118, 73830, + 66042, 10355, 121501, 7875, 100390, 41598, 3993, 121269, 1545, 40971, + 536, 72874, 43029, 0, 121000, 65173, 65286, 121254, 70331, 195012, 0, + 94065, 0, 41375, 5402, 83035, 128192, 1687, 120503, 128559, 0, 78194, + 64326, 40969, 10526, 73747, 8323, 40968, 1339, 11731, 78756, 127108, + 65460, 12242, 128513, 8020, 10843, 11554, 917867, 0, 8266, 41006, 65722, + 83041, 10710, 74045, 118942, 67667, 64567, 119155, 83313, 70729, 71889, + 67857, 100582, 0, 92418, 11755, 66305, 68332, 0, 10917, 93979, 0, 11272, + 2040, 41247, 41326, 195060, 1741, 42370, 1227, 83119, 83120, 11413, + 126583, 83115, 5283, 1586, 4978, 68050, 1984, 11830, 43819, 92293, 40984, + 42904, 9373, 0, 12916, 6284, 194888, 41663, 127895, 983045, 68313, 9237, + 9385, 41648, 0, 128953, 2299, 41666, 1830, 73783, 2056, 41287, 92610, + 983299, 71917, 42219, 68086, 120327, 41987, 41676, 125219, 72840, 126553, + 41670, 0, 92590, 2796, 55291, 11683, 9902, 74521, 67988, 11451, 82995, + 78855, 42631, 2359, 71890, 67844, 74164, 41238, 548, 11405, 13133, 64368, + 127270, 120925, 66272, 397, 43622, 42139, 9547, 9590, 128238, 1614, + 43661, 64356, 66307, 6651, 1358, 120871, 428, 9620, 1466, 78112, 10982, + 113785, 1333, 7104, 407, 6425, 128834, 74253, 127993, 0, 983151, 5804, + 11976, 8554, 92721, 0, 70167, 9057, 42294, 41218, 125097, 121290, 78137, + 1883, 10952, 8048, 70443, 41225, 92621, 42915, 128616, 128319, 128629, + 4407, 74648, 65809, 11837, 194821, 8448, 7141, 74183, 120334, 12675, + 12659, 74634, 42363, 120624, 68077, 55273, 10766, 12012, 2386, 64732, + 9170, 917821, 9123, 64585, 10296, 119158, 7140, 10977, 127378, 4164, + 9081, 0, 120569, 42049, 42042, 8709, 128283, 126477, 120637, 42419, + 64799, 42047, 129414, 194820, 8470, 11807, 65897, 577, 0, 126616, 74300, + 0, 68087, 74840, 126474, 917539, 128791, 92224, 8736, 1414, 42643, 9683, + 43486, 74344, 0, 2536, 983941, 66330, 121238, 72869, 120562, 119558, 0, + 0, 127831, 66317, 69945, 66315, 2106, 67809, 11273, 120986, 43004, 7541, + 82988, 194738, 961, 64307, 66324, 64906, 125080, 3106, 65917, 41284, + 1696, 983130, 891, 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, + 10936, 119255, 0, 0, 194826, 92688, 3566, 2322, 120371, 70831, 11449, + 128187, 42868, 41285, 3547, 983717, 0, 113746, 983400, 43216, 6089, + 78682, 68490, 120578, 4170, 1029, 127761, 100384, 119224, 42374, 983571, + 744, 92883, 113739, 194924, 65823, 127826, 11182, 3551, 92938, 983891, + 4623, 55268, 128738, 4598, 983162, 65136, 127136, 0, 128169, 10851, + 120876, 6179, 92602, 6180, 0, 11952, 74579, 78648, 11972, 78646, 78647, + 78644, 78645, 177, 78643, 6176, 120580, 983696, 125135, 6177, 9020, + 78652, 78653, 6178, 120249, 120242, 128027, 67673, 2214, 8754, 122894, + 100689, 2137, 43081, 194663, 119114, 9136, 66889, 4401, 41280, 70801, + 8974, 2308, 194750, 74149, 101050, 2318, 120693, 66361, 8198, 65626, + 64360, 12601, 42536, 43931, 120827, 43930, 92462, 6970, 5404, 43332, + 3667, 7936, 12925, 126989, 6385, 128482, 128403, 72861, 10874, 65505, + 120002, 72785, 42053, 2075, 42057, 11083, 42052, 0, 67266, 67651, 121104, + 9665, 92300, 983666, 13181, 917617, 0, 128937, 70088, 74148, 0, 70419, + 72868, 120229, 120224, 74172, 41145, 66404, 94096, 74422, 41148, 8683, + 7594, 113686, 75033, 119090, 10869, 43458, 41146, 92407, 11441, 121456, + 3512, 119633, 92965, 8103, 78140, 120847, 65184, 11780, 41563, 42796, + 129055, 69742, 41544, 65146, 66803, 0, 78109, 129177, 19942, 126618, + 118908, 7988, 10436, 74273, 3271, 73804, 64711, 120824, 94064, 983071, + 128652, 3804, 13070, 11557, 42044, 120859, 1095, 0, 3599, 127774, 0, + 128861, 8514, 0, 917579, 0, 74346, 66697, 128385, 11684, 983148, 92486, + 917603, 0, 42043, 43232, 66677, 74927, 42046, 72862, 4036, 126481, + 129373, 128213, 194861, 83355, 11954, 70348, 1450, 12986, 1340, 0, 65441, + 92722, 0, 127062, 72865, 100818, 917542, 73812, 72875, 6539, 73836, + 126607, 120702, 92390, 0, 120492, 41190, 3973, 119365, 4575, 41193, 7982, + 429, 122903, 78891, 127874, 194848, 65792, 128408, 83282, 6417, 118918, + 78178, 0, 128970, 66786, 0, 4919, 10590, 128093, 7755, 0, 92942, 64548, + 120506, 1621, 10214, 65126, 68253, 120689, 983616, 12188, 983668, 1617, + 8050, 195031, 5015, 0, 119174, 42590, 70354, 1756, 78181, 983910, 65768, + 6352, 41892, 125186, 7555, 13103, 5408, 2817, 1214, 69919, 92335, 121208, + 0, 42926, 120872, 41764, 7957, 8689, 64723, 1056, 42896, 74147, 3559, + 119162, 55286, 7073, 65850, 12327, 70853, 113720, 0, 128122, 72761, 2341, + 8450, 8484, 8474, 72885, 68322, 70079, 8461, 67721, 12153, 12799, 0, + 43709, 43708, 9451, 7571, 13073, 43847, 0, 681, 983254, 703, 127518, + 3272, 8781, 12894, 70077, 11709, 92288, 70514, 127059, 83175, 71436, + 11338, 72790, 3276, 128968, 120233, 65928, 0, 121367, 65021, 64795, + 74574, 0, 10047, 78814, 3262, 78811, 42711, 0, 983490, 68478, 163, 576, + 9895, 1655, 70131, 74591, 78815, 78816, 66888, 0, 0, 70513, 10039, + 120426, 5626, 5623, 5717, 5776, 43488, 83497, 66885, 41591, 11036, 65252, + 92382, 0, 0, 120111, 67848, 127309, 983595, 983472, 8887, 127521, 7295, + 11031, 125255, 43157, 100451, 8946, 10348, 10412, 8755, 119152, 67343, + 5718, 13221, 983341, 983278, 78135, 70515, 917616, 8810, 74499, 686, + 194776, 71362, 4619, 118954, 6654, 73769, 74426, 127523, 12040, 65689, + 10128, 65118, 68029, 119151, 74205, 92651, 128138, 2401, 68144, 8792, + 983179, 68044, 65455, 129315, 74328, 0, 74561, 120763, 12886, 120952, + 66624, 126578, 43557, 10300, 10161, 10396, 71210, 78602, 78774, 9984, + 73851, 3010, 6441, 70349, 1458, 41475, 72429, 93975, 100814, 11479, + 121355, 120356, 6350, 12864, 69674, 71473, 1061, 64780, 2001, 43111, + 55230, 100454, 4052, 113673, 7626, 983890, 120907, 1045, 195086, 5631, + 41113, 120494, 0, 43707, 74127, 0, 983718, 8486, 0, 73758, 2335, 4362, + 983195, 126561, 69221, 1025, 127277, 42625, 70325, 78084, 41443, 129130, + 128206, 0, 1774, 1523, 121330, 68059, 41445, 78236, 11207, 8567, 41442, + 3988, 74843, 78237, 118910, 983067, 65274, 8564, 78199, 78238, 127515, + 121272, 0, 43446, 983346, 66513, 6256, 917807, 579, 55218, 10206, 78195, + 6375, 2673, 983886, 11814, 0, 4488, 128716, 120554, 68451, 10444, 118846, + 127334, 11799, 74407, 68466, 4487, 127849, 42832, 1032, 120267, 43450, + 78257, 7203, 124998, 614, 70361, 126633, 120615, 119622, 78262, 127271, + 127323, 0, 43121, 127211, 127003, 92513, 1050, 7549, 121260, 82994, 9314, + 70365, 92898, 68039, 127061, 10057, 70434, 127313, 128577, 66504, 120963, + 82992, 2307, 128456, 64333, 127312, 119900, 73873, 983126, 94035, 983083, + 127973, 128708, 70446, 10360, 6746, 120473, 92245, 440, 128826, 13085, + 9233, 74216, 983566, 101089, 9957, 125213, 66447, 8046, 64963, 65777, + 10125, 74212, 42819, 10910, 100466, 1521, 9896, 93965, 10487, 69878, + 12527, 68737, 7970, 125073, 128660, 7303, 65769, 5243, 9849, 5239, 65771, + 121429, 0, 5237, 69714, 68756, 10103, 5247, 4769, 129302, 118977, 12873, + 2283, 92931, 100525, 3008, 4896, 128102, 12087, 983240, 55231, 41103, + 75011, 64565, 4773, 120846, 78549, 70074, 4770, 66891, 917567, 8731, + 65378, 66911, 120619, 9122, 128033, 119071, 4774, 3019, 9997, 12834, 0, + 9456, 10215, 120547, 120413, 78556, 126990, 121332, 74776, 4281, 4768, + 120572, 41535, 4099, 9017, 69993, 983692, 78095, 2225, 78096, 118946, + 120252, 0, 78098, 0, 42814, 880, 128926, 113764, 66870, 2134, 127388, + 10116, 9877, 70679, 128960, 0, 7095, 8379, 74116, 6778, 121155, 78090, + 8243, 2427, 128141, 7093, 983879, 11585, 195003, 9962, 82990, 12223, + 128485, 92430, 1434, 120254, 5637, 11573, 0, 0, 0, 19951, 83389, 74419, + 128530, 194686, 55283, 0, 70363, 74437, 1156, 8740, 83295, 3782, 64331, + 0, 41370, 1014, 8261, 120956, 917596, 10835, 125239, 65536, 83294, + 120463, 125051, 7702, 118824, 7302, 43010, 65779, 65783, 1150, 10547, + 5700, 0, 120603, 65383, 2339, 42594, 5697, 118788, 75018, 120471, 74923, + 42257, 5696, 92677, 120465, 3862, 9643, 917951, 70183, 7634, 65167, 9845, + 0, 0, 5701, 9722, 41490, 128719, 1426, 68217, 128668, 68447, 42204, + 55270, 8571, 67403, 78067, 43859, 78818, 92719, 43182, 12184, 0, 42022, + 0, 10281, 917798, 5650, 43194, 64712, 10744, 78887, 990, 5647, 0, 7387, + 78734, 41114, 11477, 5646, 12879, 11018, 128362, 3945, 92589, 983466, + 70664, 78883, 128128, 78212, 127746, 1020, 73763, 983835, 78731, 5648, + 64748, 120920, 42236, 10205, 3545, 129121, 6984, 127771, 74051, 128901, + 43242, 120458, 2667, 128173, 125037, 194746, 9911, 120590, 65020, 10097, + 119166, 78696, 983662, 118836, 983748, 78208, 1140, 78426, 128205, 10159, + 0, 0, 8128, 72857, 68326, 194911, 1815, 19910, 890, 124935, 3267, 92291, + 917629, 10123, 72882, 4410, 1041, 10576, 6354, 92581, 580, 74232, 983746, + 128347, 72884, 0, 128098, 19938, 65906, 127819, 72883, 128858, 3298, + 5375, 10142, 100421, 8215, 92633, 6134, 41246, 64402, 983147, 69899, + 194938, 983602, 121426, 41382, 917926, 128653, 5173, 65348, 527, 121174, + 113782, 78469, 128250, 78797, 11915, 121386, 0, 10072, 0, 42695, 2329, + 42250, 0, 11187, 69667, 12245, 1568, 66806, 83460, 983189, 113705, + 128532, 11201, 92708, 74769, 126470, 67680, 9069, 6144, 121246, 119840, + 70700, 121438, 66783, 64917, 41521, 118934, 494, 13250, 92250, 65098, + 6364, 956, 66794, 12830, 10462, 73740, 73734, 129109, 0, 983739, 66449, + 13263, 74281, 69217, 13171, 127796, 70714, 100942, 63885, 127251, 1044, + 41276, 128363, 0, 0, 42068, 11795, 124985, 0, 127202, 0, 42450, 3907, + 124995, 64526, 11829, 68197, 12295, 0, 11475, 70329, 3020, 11537, 0, + 66441, 120761, 7098, 125071, 0, 1057, 566, 42696, 127239, 3016, 42274, + 43464, 66490, 12921, 66571, 78472, 71207, 3006, 4620, 127237, 983330, + 120107, 129350, 64659, 917917, 127749, 55253, 6357, 6362, 8626, 71337, + 2216, 9090, 65377, 41596, 0, 42920, 1698, 0, 64477, 917853, 43813, 1053, + 100432, 78269, 100434, 92977, 1052, 1051, 459, 1060, 74349, 66479, 67689, + 66871, 917845, 70327, 42490, 689, 6508, 4163, 42298, 8639, 66641, 4246, + 100449, 43514, 12130, 100450, 42337, 64596, 64375, 66481, 127850, 983144, + 127828, 6359, 0, 43471, 983768, 0, 83345, 75065, 917953, 6358, 6361, + 1926, 6356, 72855, 7898, 8110, 10935, 0, 10069, 5830, 100425, 43685, + 74307, 100426, 42910, 83301, 8693, 78611, 119565, 128621, 119587, 92192, + 121454, 65894, 194694, 0, 64296, 983681, 983394, 194959, 119187, 2135, + 11836, 0, 129361, 78869, 42313, 5579, 92412, 70384, 129113, 43854, 71913, + 5578, 11840, 128115, 42023, 6234, 5669, 92275, 78620, 101038, 68833, + 92254, 68202, 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 2220, 42465, + 41330, 194945, 5795, 65512, 68774, 65702, 68770, 120801, 65251, 68228, + 65710, 128399, 94176, 67672, 68783, 5370, 70465, 2931, 1638, 10966, + 10188, 65878, 118848, 0, 69694, 69879, 74585, 8172, 42017, 92756, 10844, + 121016, 128195, 92424, 6374, 92636, 100438, 286, 78023, 1062, 0, 119999, + 100437, 7395, 127783, 1070, 64900, 7153, 6095, 41865, 128928, 3015, 68743, 68740, 5211, 68805, 6400, 68749, 68748, 68760, 8189, 11276, 68754, 70284, 372, 128829, 68761, 113783, 42102, 41585, 127751, 0, 42101, 276, 78402, 67427, 33, 67425, 67424, 9007, 67430, 41588, 66033, 427, 10763, - 118819, 70872, 127884, 983943, 1031, 6257, 92489, 42104, 0, 983980, 2328, - 66837, 1071, 42899, 125088, 74848, 120857, 113793, 194981, 1047, 0, - 194943, 42908, 128480, 69723, 10651, 70356, 0, 125113, 72433, 66829, - 70817, 5711, 41633, 12098, 65571, 9166, 0, 5710, 128551, 6790, 65168, - 13216, 983150, 69716, 69726, 0, 64611, 41623, 195001, 5715, 69654, 71915, - 0, 5712, 2761, 41620, 68124, 3074, 5722, 0, 8643, 68525, 0, 118906, 2757, - 11067, 9718, 66419, 8910, 10689, 6479, 0, 0, 71173, 78607, 9196, 69670, - 125070, 0, 128338, 120335, 118911, 0, 94043, 129194, 0, 0, 120010, 73795, - 8701, 68130, 119616, 120522, 0, 42477, 194994, 12123, 4495, 43569, 0, - 129296, 0, 64946, 10992, 0, 74566, 70336, 113688, 9318, 93986, 13249, - 42902, 73808, 0, 65457, 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, - 70366, 120005, 119585, 121212, 5084, 121189, 121134, 75062, 0, 733, - 74646, 78014, 68767, 78435, 11204, 0, 9218, 1731, 0, 92937, 71070, 67990, - 983125, 0, 0, 70323, 121371, 92492, 5155, 120000, 5358, 983744, 0, - 917767, 64424, 71236, 3840, 64314, 41432, 121316, 78315, 68430, 67980, - 43253, 65943, 0, 3371, 10988, 127960, 8771, 1479, 0, 0, 1109, 11580, - 43657, 64601, 12205, 92782, 0, 64507, 8868, 399, 67978, 74842, 983286, - 121336, 12149, 13088, 551, 0, 10156, 12119, 92572, 118916, 2544, 65074, - 119211, 983298, 0, 78011, 351, 68764, 0, 128713, 55229, 0, 74268, 78008, - 128094, 0, 42377, 0, 0, 0, 113767, 74320, 9013, 4054, 0, 194580, 113740, - 0, 73960, 5585, 65881, 2549, 74469, 74457, 11104, 5584, 8358, 126473, - 64215, 66864, 10919, 70480, 7980, 126601, 113698, 2218, 41800, 5589, - 82983, 2664, 41613, 5586, 118890, 0, 11356, 121120, 194833, 43452, 67245, + 118819, 70872, 127884, 100990, 1031, 6257, 92489, 42104, 100396, 100395, + 2328, 66837, 1071, 42899, 74418, 74848, 120857, 113793, 100401, 1047, + 100403, 100402, 42908, 100404, 69723, 10651, 70356, 100408, 125113, + 72433, 66829, 70817, 5711, 41633, 12098, 65571, 9166, 0, 5710, 128551, + 6790, 65168, 13216, 100935, 69716, 69726, 0, 64611, 41623, 195001, 5715, + 69654, 71915, 983720, 5712, 2761, 41620, 68124, 3074, 5722, 100389, 8643, + 68525, 0, 118906, 2757, 11067, 9718, 66419, 8910, 10689, 6479, 125196, + 129178, 71173, 78607, 9196, 69670, 125070, 0, 125184, 120335, 118911, + 41645, 94043, 129194, 127087, 128480, 113770, 73795, 8701, 68130, 119616, + 120522, 43754, 42477, 100459, 12123, 4495, 43569, 0, 129296, 74557, + 64946, 10992, 0, 74566, 70336, 113688, 9318, 93986, 13249, 42902, 73808, + 983335, 65457, 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 70366, + 120005, 100369, 100368, 5084, 100370, 121134, 75062, 983462, 733, 74646, + 78014, 68767, 78435, 11204, 0, 9218, 1731, 100380, 92937, 71070, 67990, + 983125, 983370, 0, 70323, 121371, 92492, 5155, 120000, 5358, 128515, + 129316, 194981, 64424, 71236, 3840, 64314, 41432, 121316, 78315, 68430, + 67980, 43253, 65943, 100373, 3371, 10988, 100378, 8771, 1479, 100357, + 100360, 1109, 11580, 43657, 64601, 12205, 92782, 0, 64507, 8868, 399, + 67978, 74842, 983286, 121336, 12149, 13088, 551, 194972, 10156, 12119, + 92572, 118916, 2544, 65074, 119211, 100354, 100353, 78011, 351, 68764, + 917981, 128713, 55229, 0, 74268, 66790, 127327, 100361, 42377, 100363, + 100362, 100365, 100364, 74320, 9013, 4054, 0, 194580, 113740, 3447, + 73960, 5585, 65881, 2549, 74469, 74457, 11104, 5584, 8358, 126473, 64215, + 66864, 10919, 70480, 7980, 100723, 113698, 2218, 41800, 5589, 82983, + 2664, 41613, 5586, 118890, 74522, 11356, 121120, 128175, 43452, 67245, 92993, 42573, 66879, 83329, 67810, 69767, 78752, 74392, 8135, 6450, - 10055, 77996, 119948, 983173, 119225, 5657, 0, 9626, 121453, 77994, - 10179, 5654, 12939, 92573, 120799, 71860, 0, 5652, 10945, 194599, 66486, - 0, 3661, 7863, 0, 68069, 983675, 70332, 127194, 5659, 194606, 78692, - 66729, 5655, 983626, 42168, 121131, 1055, 71171, 71888, 66310, 74030, - 70516, 12146, 70362, 73956, 11618, 0, 42720, 92949, 10272, 10304, 10368, - 42518, 594, 10244, 10248, 7407, 74978, 64870, 74191, 3467, 71073, 7881, - 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, 69222, 65927, 0, 70036, - 69696, 69769, 64656, 917995, 0, 92409, 70056, 5666, 65227, 5318, 63994, - 119596, 9091, 10798, 78664, 78508, 10186, 983265, 7732, 983724, 64556, 0, - 983979, 5668, 74445, 74982, 74645, 5670, 113795, 127297, 11820, 2992, - 7826, 5667, 19952, 120807, 74981, 12749, 74551, 67757, 0, 66496, 4361, - 119260, 1306, 9286, 1497, 128286, 94004, 70359, 0, 3571, 13247, 5874, - 7973, 66353, 68435, 78278, 67896, 43192, 74621, 78265, 553, 113768, - 127012, 93053, 5829, 0, 4587, 78285, 65912, 194919, 12746, 128671, 70338, - 119924, 5633, 119927, 74259, 94102, 94099, 64905, 94105, 9512, 94103, - 12742, 6443, 983806, 0, 9135, 128863, 41564, 121517, 55219, 128832, - 983851, 194877, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, - 128903, 124936, 128390, 83215, 2425, 65182, 128769, 43636, 5221, 78410, - 328, 121031, 68736, 69815, 5636, 119917, 5329, 121293, 5638, 83166, 7940, - 64938, 43223, 43760, 5635, 3373, 2986, 78292, 74223, 3437, 68763, 6203, - 4247, 71169, 11920, 8274, 68240, 983658, 1657, 41561, 68778, 78295, 5639, - 2954, 5660, 5640, 78303, 983685, 71179, 42227, 68301, 83322, 41637, - 67872, 121105, 78310, 41625, 43362, 78309, 120713, 11705, 5642, 0, 5486, - 0, 4356, 11710, 0, 12051, 69938, 0, 5641, 8259, 126994, 1058, 0, 67630, - 0, 128927, 1144, 78750, 127293, 42228, 983714, 73890, 118972, 127352, - 2800, 83209, 5645, 64964, 8652, 2547, 66484, 43634, 121356, 5608, 65890, - 43808, 194972, 67621, 64932, 9000, 71204, 67235, 92673, 1865, 128706, - 5613, 66401, 121145, 0, 5610, 983226, 71199, 65826, 2069, 0, 10787, - 43999, 2997, 119932, 5609, 78316, 65319, 78313, 12316, 5875, 2412, 83206, - 8186, 9807, 74269, 66294, 13130, 65874, 71855, 5807, 113678, 10030, 5306, - 12364, 118863, 92970, 11704, 83202, 92583, 10211, 0, 120579, 0, 121063, - 11706, 9710, 125022, 82985, 120655, 413, 65623, 7118, 83167, 9133, 74262, - 917964, 1042, 125068, 64779, 12171, 119240, 6185, 64776, 4984, 121266, + 10055, 77996, 101033, 983173, 119225, 5657, 100443, 9626, 121453, 77994, + 10179, 5654, 12939, 92573, 120799, 71860, 917939, 5652, 10945, 194599, + 66486, 983360, 3661, 7863, 0, 68069, 101084, 70332, 127194, 5659, 194606, + 78692, 66729, 5655, 121012, 42168, 121131, 1055, 71171, 71888, 66310, + 74030, 70516, 12146, 70362, 73956, 11618, 72709, 42720, 92949, 10272, + 10304, 10368, 42518, 594, 10244, 10248, 7407, 74978, 64870, 74191, 3467, + 71073, 7881, 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, 69222, 65927, + 194978, 70036, 69696, 69769, 64656, 917995, 0, 92409, 70056, 5666, 65227, + 5318, 63994, 119596, 9091, 10798, 78664, 78508, 10186, 983265, 7732, + 983724, 64556, 0, 983979, 5668, 74445, 74982, 74645, 5670, 100830, + 127297, 11820, 2992, 7826, 5667, 19952, 120807, 74981, 12749, 74551, + 67757, 2263, 66496, 4361, 119260, 1306, 9286, 1497, 128286, 94004, 70359, + 0, 3571, 13247, 5874, 7973, 66353, 68435, 78278, 67896, 43192, 74621, + 78265, 553, 113768, 127012, 93053, 5829, 983247, 4587, 78285, 65912, + 194919, 12746, 72806, 70338, 119924, 5633, 119927, 74259, 94102, 94099, + 64905, 94105, 9512, 94103, 12742, 6443, 983806, 0, 9135, 128863, 41564, + 121517, 55219, 128832, 983851, 128026, 12148, 0, 78297, 0, 64256, 119914, + 11669, 0, 5634, 4524, 128903, 124936, 128390, 83215, 2425, 65182, 128769, + 43636, 5221, 78410, 328, 121031, 68736, 69815, 5636, 119917, 5329, + 121293, 5638, 83166, 7940, 64938, 43223, 43760, 5635, 3373, 2986, 78292, + 74223, 3437, 68763, 6203, 4247, 71169, 11920, 8274, 68240, 194741, 1657, + 41561, 68778, 78295, 5639, 2954, 5660, 5640, 78303, 121420, 71179, 42227, + 68301, 83168, 41637, 67872, 121105, 78310, 41625, 43362, 78309, 100731, + 11705, 5642, 100732, 5486, 100734, 4356, 11710, 100739, 12051, 69938, + 100740, 5641, 8259, 126994, 1058, 0, 67630, 101016, 128927, 1144, 78750, + 127293, 42228, 983714, 73890, 118972, 100550, 2800, 83209, 5645, 64964, + 8652, 2547, 66484, 43634, 121356, 5608, 65890, 43808, 128335, 67621, + 64932, 9000, 71204, 67235, 92673, 1865, 128706, 5613, 66401, 100721, + 100724, 5610, 100726, 71199, 65826, 2069, 100730, 10787, 43999, 2997, + 119932, 5609, 78316, 65319, 78313, 12316, 5875, 2412, 83206, 8186, 9807, + 74269, 66294, 13130, 65874, 71855, 5807, 113678, 10030, 5306, 12364, + 118863, 92970, 11704, 83202, 92583, 10211, 0, 120579, 0, 121063, 11706, + 9710, 125022, 82985, 120655, 413, 65623, 7118, 83167, 9133, 74262, + 917964, 1042, 125068, 64779, 12171, 119240, 6185, 64776, 4984, 83198, 708, 11391, 0, 12241, 92720, 83399, 1308, 121258, 2534, 810, 125089, - 120933, 128016, 71849, 71869, 1917, 3000, 125140, 120184, 120739, 2364, + 120933, 128016, 71849, 71869, 1917, 3000, 125140, 70694, 120739, 2364, 66387, 74470, 66618, 65680, 66411, 10027, 71841, 128154, 12337, 74283, 127368, 983167, 2980, 755, 69774, 931, 13124, 68068, 6363, 2748, 121022, - 0, 65041, 92276, 44011, 8730, 194997, 127854, 78312, 7274, 119250, 92988, - 7275, 78304, 935, 127052, 65840, 377, 42325, 11649, 127363, 65253, 64301, + 0, 65041, 92276, 44011, 8730, 194997, 100711, 78312, 7274, 100712, 92988, + 7275, 78304, 935, 100719, 65840, 377, 42325, 11649, 100489, 65253, 64301, 128835, 78308, 42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 78300, - 194998, 194912, 10673, 68779, 7248, 68786, 43515, 1781, 5496, 3627, 62, - 1649, 67876, 964, 121034, 66403, 78226, 66393, 92897, 70355, 66409, 0, - 83398, 43689, 127911, 13142, 78812, 42415, 66575, 4542, 69909, 43547, - 83028, 0, 7677, 2991, 4946, 42454, 11565, 7949, 0, 69759, 11341, 42494, - 3073, 65625, 9714, 11692, 4657, 0, 70810, 6478, 9898, 43673, 65237, 6241, - 7106, 4877, 129108, 6238, 0, 10548, 127049, 4409, 0, 0, 64798, 70805, - 5346, 128240, 94047, 6237, 4874, 66851, 9176, 92882, 121153, 65231, - 65884, 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 11203, - 983159, 5685, 0, 2461, 11052, 7091, 5342, 8317, 121446, 68163, 5340, - 120559, 127820, 43635, 73928, 125001, 71069, 83318, 0, 83317, 65482, - 121394, 9142, 0, 68506, 0, 10938, 0, 118790, 1182, 2542, 4826, 0, 126648, - 72438, 529, 8580, 127490, 0, 10586, 10790, 10839, 66023, 41593, 41207, - 68744, 983825, 41594, 225, 42828, 0, 67821, 121200, 11376, 74379, 10721, - 67664, 3438, 42097, 68862, 11084, 3194, 41870, 266, 78305, 120183, 41873, - 120575, 11324, 120531, 0, 8420, 64918, 128839, 41871, 41338, 3734, 7734, - 43683, 8750, 66605, 66011, 92514, 40965, 127937, 983216, 5161, 10572, - 917558, 42906, 0, 64349, 7287, 42162, 120406, 983643, 126605, 11167, - 69220, 12359, 43429, 41369, 1697, 12191, 0, 68633, 7286, 0, 68635, 10031, - 113766, 9870, 67726, 8620, 65824, 917855, 11938, 121308, 7285, 983557, - 119577, 42678, 66842, 43677, 41583, 0, 65799, 92623, 0, 129168, 128267, - 78169, 66199, 0, 3609, 68624, 70280, 832, 120693, 120770, 78473, 66007, - 78471, 65703, 71256, 128517, 42732, 5180, 92699, 41395, 41530, 11691, - 64773, 92214, 74002, 127790, 120548, 128645, 6348, 243, 13200, 120160, - 6024, 92309, 9979, 10037, 41529, 10648, 8538, 43687, 0, 917844, 4285, - 66195, 121370, 4230, 92886, 7367, 43256, 92353, 7563, 42376, 983271, - 68442, 120512, 0, 0, 214, 128578, 0, 74856, 65893, 12208, 9973, 128386, - 66311, 65589, 128277, 2603, 0, 70155, 78622, 70047, 127273, 6022, 195023, - 2884, 0, 11620, 0, 43, 195020, 12682, 1016, 41107, 0, 41121, 3885, 92, - 65456, 64608, 0, 74801, 70855, 2074, 113742, 78283, 0, 12453, 70847, - 983826, 74241, 126568, 6791, 12457, 78268, 0, 66278, 0, 78279, 0, 0, - 92358, 66637, 7995, 8759, 43421, 78277, 12449, 128552, 71224, 43868, - 8752, 3197, 4720, 10165, 113765, 119249, 113715, 11595, 64893, 118905, - 43435, 124964, 125030, 4993, 0, 6168, 10934, 1946, 741, 120650, 5494, - 4639, 127559, 1990, 11107, 4498, 74169, 67736, 83273, 127272, 69734, - 2960, 73779, 0, 8969, 128117, 43424, 73959, 126464, 2950, 119579, 6210, - 65753, 370, 121360, 0, 0, 4953, 195009, 121054, 113708, 0, 69230, 0, - 195010, 65688, 74951, 5063, 3517, 2964, 43663, 917762, 6344, 74791, - 10566, 10144, 66333, 8252, 729, 66016, 78253, 0, 71317, 64923, 120571, - 43669, 9032, 78263, 78264, 0, 41215, 0, 65883, 0, 917774, 74914, 3761, 0, - 0, 70068, 120408, 12912, 119012, 3850, 128191, 983256, 128389, 0, 0, 908, - 0, 8611, 121384, 0, 74642, 43691, 41197, 0, 8978, 120540, 119135, 41586, - 10527, 70426, 917848, 3848, 78739, 74917, 127536, 65241, 5336, 74883, - 128786, 663, 0, 10780, 0, 0, 78767, 983259, 127163, 68193, 347, 0, - 917544, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 68046, 12143, - 69657, 78512, 128493, 11153, 41804, 78523, 0, 78525, 0, 128859, 41584, - 10681, 0, 120979, 73938, 73781, 128022, 4800, 66661, 0, 66306, 64715, - 66384, 9518, 6609, 10434, 70845, 11319, 1097, 128964, 917564, 41730, - 129181, 121501, 73847, 74845, 65172, 41728, 41721, 194780, 194769, - 121499, 41203, 127056, 13110, 41726, 194856, 67077, 1000, 69651, 127509, - 41140, 1209, 73978, 125059, 73750, 1073, 6321, 77878, 41138, 983968, - 68213, 78000, 12167, 1115, 41605, 9794, 119904, 67671, 55248, 12237, - 78787, 66314, 6587, 9290, 78782, 78783, 9231, 78781, 2959, 7926, 0, - 917601, 128833, 64398, 71124, 119970, 12311, 119181, 78796, 68768, 78794, - 78795, 68434, 78793, 66670, 113797, 128579, 12290, 120169, 129093, - 119873, 42142, 9968, 8205, 0, 5131, 113694, 9627, 43646, 78542, 78535, - 983212, 1944, 1248, 10148, 127755, 119990, 119991, 12701, 78376, 11308, - 119995, 983493, 113702, 66836, 65305, 65100, 4031, 42794, 120003, 7075, - 8154, 119985, 120007, 41817, 73934, 42275, 120011, 120012, 78526, 120014, - 120015, 6041, 120520, 41899, 983288, 8002, 128367, 4364, 73732, 983570, - 64332, 120976, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 68246, 7279, - 12041, 1418, 10885, 12673, 121152, 121381, 9660, 917929, 13012, 4571, - 917588, 0, 118940, 12078, 2970, 129122, 10933, 0, 77870, 121243, 77841, - 0, 41599, 70159, 121342, 120885, 12950, 92160, 3486, 983973, 78311, 4239, - 128073, 127799, 66511, 68066, 2637, 64629, 8460, 66834, 8476, 983975, 0, - 68312, 78489, 65673, 1019, 78495, 4148, 0, 12289, 0, 4316, 0, 13119, - 8488, 5412, 66243, 9935, 92777, 73864, 983203, 41734, 8206, 74081, 9163, - 3286, 9072, 5867, 13302, 7622, 7120, 41736, 92546, 41731, 0, 7400, 5416, - 68663, 118924, 10817, 0, 41539, 127284, 66853, 73963, 41855, 41867, - 65564, 11277, 65892, 11536, 10620, 92272, 7115, 66030, 73932, 5498, - 63876, 41536, 0, 68204, 92587, 3459, 8997, 194719, 92714, 0, 127782, - 92512, 0, 66377, 69781, 0, 124972, 78511, 3161, 295, 71257, 0, 92223, - 121328, 78742, 9016, 43454, 63903, 63902, 43501, 68210, 3971, 983959, - 70063, 2952, 78765, 11038, 10901, 63900, 63899, 63898, 68095, 667, 12332, - 63887, 6086, 41722, 0, 5172, 0, 983280, 4159, 983562, 0, 9815, 63884, - 19934, 63882, 41198, 8555, 63878, 63877, 42460, 6050, 42708, 63881, - 63872, 120941, 42421, 195035, 41723, 63875, 63874, 11460, 7432, 1913, - 41913, 63852, 66869, 128971, 42348, 73892, 6752, 446, 41911, 127901, - 63851, 63850, 41910, 128637, 63846, 2972, 12932, 7262, 69968, 63849, - 63848, 63847, 113749, 6570, 8302, 7259, 63842, 4178, 10746, 7250, 13214, - 10041, 8105, 63892, 127780, 69969, 1105, 4180, 127786, 12094, 9497, 0, - 63891, 63890, 63889, 63888, 5538, 9987, 0, 92739, 1678, 13274, 552, - 118834, 44010, 10785, 0, 11192, 4557, 74459, 9159, 10171, 13125, 63860, - 5540, 63858, 63865, 281, 13242, 63862, 74154, 0, 5536, 65568, 9574, 1388, - 71902, 0, 1077, 195000, 65099, 11531, 5834, 0, 0, 917789, 0, 42773, - 121331, 0, 0, 119220, 120912, 3663, 127027, 1112, 70335, 8686, 126611, - 5334, 65081, 43249, 74778, 127968, 11077, 125017, 6509, 0, 5327, 78776, - 19907, 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 43746, 73748, - 63866, 78626, 1915, 4846, 67755, 66371, 118984, 42105, 2990, 120128, 805, - 69238, 64438, 12070, 8760, 1117, 113750, 12212, 120123, 65174, 42357, - 63835, 63834, 983947, 78240, 12225, 63838, 63837, 983853, 70173, 63833, - 6042, 66360, 8083, 128166, 983733, 63821, 63820, 63819, 63818, 983904, - 5227, 9047, 63822, 74797, 6091, 0, 10691, 560, 5643, 8226, 119578, 63812, - 63811, 63810, 63809, 2289, 63815, 63814, 63813, 6047, 1597, 120143, 780, - 206, 70126, 4936, 65147, 8168, 63930, 2076, 1093, 9882, 63934, 2082, - 63932, 75050, 63929, 3546, 1605, 77934, 9806, 43472, 77933, 8400, 11343, - 2086, 0, 63926, 2984, 5968, 9287, 0, 4618, 42209, 11137, 13169, 5290, - 2089, 1695, 10743, 1088, 63825, 7268, 1084, 1085, 63829, 1083, 10131, - 7283, 0, 63970, 121165, 1092, 4754, 7273, 5252, 44016, 43627, 127921, - 128920, 7408, 11809, 83220, 121181, 0, 2965, 7258, 8808, 66572, 1089, - 4187, 63937, 42119, 42120, 11106, 940, 5787, 10099, 63938, 0, 74494, - 12463, 2994, 125136, 118827, 68522, 9664, 70834, 77940, 67892, 77938, - 74343, 67370, 0, 660, 10127, 666, 9022, 5532, 43667, 5533, 12580, 78507, - 6118, 222, 979, 3884, 983394, 74151, 83227, 6502, 983855, 11085, 121261, - 63951, 12465, 917862, 0, 128782, 63946, 1707, 63924, 12461, 63950, 63897, - 63948, 63947, 63945, 6038, 63943, 63942, 64685, 63895, 65838, 2276, 7776, - 94076, 121086, 92464, 120444, 69730, 801, 43165, 1690, 63919, 63918, - 63917, 13277, 43659, 12951, 120638, 9906, 2054, 2334, 78515, 63916, 5483, - 63914, 69737, 63911, 5484, 63909, 63908, 2539, 120102, 43980, 5485, 0, - 42697, 9061, 5534, 10672, 4502, 68057, 253, 0, 68208, 120439, 9203, - 74231, 0, 11530, 68634, 68668, 121242, 11127, 0, 10474, 43426, 13257, - 42354, 128099, 983698, 70044, 195065, 0, 8413, 66841, 0, 5693, 7272, 0, - 13209, 64470, 65831, 74350, 195063, 0, 0, 0, 126639, 120097, 0, 94078, - 66840, 127165, 66608, 3111, 41863, 8804, 42913, 78347, 7270, 0, 66606, - 6628, 1076, 7433, 1436, 73844, 55226, 128353, 63982, 7393, 12807, 43413, - 63906, 1598, 63904, 71187, 70393, 41729, 4423, 1307, 113692, 10515, - 41589, 128698, 128918, 6218, 92917, 1430, 0, 126513, 120606, 78754, 5413, - 7619, 3255, 3493, 74032, 11549, 10735, 41743, 73937, 6801, 983633, 4518, - 10990, 65073, 5167, 4481, 3771, 67093, 2710, 983593, 66277, 41724, 67716, - 43073, 41690, 12479, 983635, 8380, 121071, 71852, 70046, 1628, 121229, - 128817, 129067, 65262, 6333, 10783, 11172, 121473, 63855, 70840, 113679, - 0, 5339, 74323, 120946, 13004, 66843, 4457, 0, 127756, 194818, 127116, - 5684, 8678, 10914, 43632, 5689, 65807, 70814, 68464, 12633, 12870, 69705, - 65183, 5688, 11926, 6033, 6310, 5686, 119076, 74251, 0, 120647, 128930, - 50, 10558, 9871, 42612, 43655, 74403, 983818, 74284, 66468, 66905, 13259, - 4448, 119150, 121406, 83349, 70043, 1321, 0, 10640, 11539, 1151, 121186, - 917607, 124958, 127079, 71106, 127852, 0, 0, 983075, 12501, 64604, - 128657, 11527, 118870, 8812, 983706, 11538, 8673, 12650, 11020, 0, 66467, - 2105, 8087, 78163, 69632, 9894, 127137, 127856, 69995, 4636, 55262, - 78513, 4515, 2382, 0, 127055, 983695, 113780, 0, 118968, 12277, 121239, - 11995, 92553, 121006, 12158, 70170, 8741, 10197, 68780, 92426, 121285, - 6531, 83051, 127846, 473, 43415, 92936, 983650, 1873, 1087, 124966, 0, - 74280, 78527, 66439, 43218, 983123, 194716, 7237, 12504, 71113, 126559, - 128748, 120887, 9489, 0, 70843, 4384, 74220, 63845, 2058, 69741, 13295, - 43191, 128030, 128571, 1154, 3857, 1205, 0, 0, 6055, 12958, 120706, - 74168, 128388, 70846, 4421, 10592, 0, 495, 66400, 41712, 7983, 70833, - 93997, 983332, 6347, 78715, 7654, 41710, 4196, 0, 437, 41709, 73772, - 70832, 0, 9465, 13290, 119180, 4997, 64306, 121309, 0, 4999, 194642, - 67401, 126582, 4711, 120769, 120602, 2739, 0, 8044, 74313, 194643, 41789, - 128142, 10809, 66279, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, - 13058, 120449, 12875, 983804, 92186, 13229, 71845, 10575, 43399, 194577, - 0, 41791, 1104, 0, 983725, 10655, 983334, 983561, 120164, 0, 1082, - 121024, 8428, 6569, 0, 0, 78534, 69849, 6783, 194671, 12993, 8049, 41548, - 44021, 6458, 64728, 128882, 4761, 63828, 4766, 64623, 1273, 43407, - 120677, 118876, 195045, 6912, 1313, 6322, 10483, 128627, 41545, 126465, - 92449, 0, 11216, 121307, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527, - 71910, 66320, 70161, 74907, 0, 0, 41537, 66453, 8303, 8282, 11817, 73857, - 10003, 73859, 65904, 7363, 1686, 0, 70115, 11467, 3664, 65921, 64299, - 124939, 128462, 128001, 4324, 126, 42246, 75030, 69984, 67725, 65926, - 7744, 68859, 74277, 66283, 78052, 43817, 6966, 43822, 8136, 0, 65600, - 1633, 0, 126614, 4762, 1103, 70827, 70157, 4765, 983494, 13078, 0, 4760, - 63827, 2050, 10871, 43199, 1102, 194652, 42236, 128867, 127072, 11546, - 74794, 337, 121196, 42591, 8627, 12279, 1111, 0, 75047, 4707, 68206, - 10143, 7883, 121444, 7880, 4522, 8645, 5704, 13010, 69796, 8304, 92982, - 194688, 119575, 2293, 70195, 66654, 129077, 92676, 0, 13008, 121194, - 4385, 128736, 13011, 125004, 92569, 119161, 13009, 160, 2677, 70388, - 983282, 41793, 65763, 74221, 70790, 41792, 42770, 94054, 65762, 118829, - 43821, 5709, 128296, 71076, 43816, 983087, 983896, 1079, 3867, 5708, 0, - 0, 43797, 5706, 64768, 5705, 8791, 4005, 121091, 10237, 10991, 128816, - 43459, 9173, 917581, 917580, 13170, 12540, 129178, 42605, 120765, 126617, - 68647, 917572, 10058, 68058, 74867, 67730, 127078, 3339, 11448, 1106, - 917591, 917540, 917593, 3340, 74017, 917586, 120994, 129141, 120541, - 10605, 1309, 63966, 120743, 1754, 92226, 13246, 864, 983171, 118926, - 8972, 119918, 7849, 120092, 83130, 13240, 195068, 5192, 4338, 67982, - 10948, 66825, 13199, 92575, 1236, 13208, 13261, 13189, 13188, 93993, - 71847, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, - 63780, 63779, 1583, 119923, 13260, 4550, 120598, 64205, 129107, 71071, - 41522, 41523, 68523, 983772, 118923, 11354, 94071, 0, 42795, 0, 119195, - 11394, 194646, 13236, 13272, 13194, 1334, 69926, 4479, 1178, 65586, - 68311, 66681, 119193, 4601, 0, 127885, 983765, 66828, 128972, 127839, - 74580, 6809, 63786, 6031, 67402, 63791, 63790, 1145, 63788, 7910, 63785, - 43153, 754, 10192, 13105, 8183, 120741, 2037, 0, 64710, 10747, 125, - 120803, 64890, 983064, 127376, 0, 41719, 63758, 3523, 1074, 13258, 9536, - 71056, 0, 4427, 74242, 63757, 43145, 12217, 63754, 41532, 1349, 63750, - 63749, 129025, 0, 127928, 63753, 63802, 41084, 120622, 68133, 41930, - 63805, 63804, 11140, 63801, 41082, 8140, 63798, 6260, 0, 128391, 94074, - 63793, 11988, 3898, 92246, 10201, 12238, 63795, 42194, 10367, 12521, - 10431, 42114, 41932, 1068, 0, 12523, 12945, 983331, 42203, 7950, 3124, - 63771, 42787, 4386, 11148, 6973, 2793, 12475, 129180, 75056, 63769, 9530, - 121248, 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 113674, 64803, - 0, 8742, 195029, 11053, 128796, 63744, 128107, 128942, 7588, 63748, 1693, - 63746, 43204, 5055, 68426, 42063, 1090, 68803, 120778, 11665, 74133, - 4558, 65685, 9523, 983453, 63857, 71216, 11513, 0, 6157, 63775, 63774, - 63773, 13191, 12170, 3500, 3139, 68071, 3170, 12485, 43891, 10872, 43892, - 13006, 43933, 120074, 0, 941, 0, 129079, 120967, 65541, 11063, 0, 8228, - 0, 42065, 128368, 43889, 94039, 129299, 92455, 7386, 0, 64444, 70295, - 119863, 43603, 94075, 65397, 288, 83409, 0, 0, 10025, 69915, 2918, 66820, - 65300, 119871, 9883, 64726, 2790, 65395, 3793, 983620, 127829, 65393, - 120592, 74138, 83505, 92751, 75019, 74139, 78777, 65394, 11548, 5270, - 983238, 65396, 74998, 65813, 13256, 1282, 120771, 75012, 0, 10888, - 120934, 65242, 0, 3330, 0, 0, 68340, 0, 0, 71202, 3304, 42753, 92588, - 70298, 74643, 1627, 0, 127765, 194735, 5371, 13116, 0, 1826, 118794, 0, - 43094, 70023, 43650, 94037, 68317, 9035, 11141, 917977, 128005, 0, 92207, - 68125, 74898, 164, 68309, 94067, 94000, 6958, 0, 43116, 67719, 70019, - 13245, 0, 68808, 66818, 0, 70031, 11099, 12666, 13175, 13207, 120414, - 66014, 120428, 7447, 5929, 0, 65509, 129192, 7449, 11306, 0, 73920, 3180, - 125102, 63808, 9054, 971, 13062, 71090, 0, 65195, 10164, 92252, 74428, - 983321, 78146, 92611, 0, 70204, 0, 10045, 12882, 13275, 2303, 11057, - 917976, 13276, 125133, 41525, 78150, 7271, 11444, 126479, 127904, 121203, - 12229, 11680, 92956, 43411, 73751, 0, 64813, 195089, 0, 10476, 3858, - 64175, 3932, 64958, 120432, 983678, 73989, 68192, 0, 69847, 369, 74908, - 41784, 119175, 64163, 77997, 0, 92645, 65474, 4796, 12292, 126595, 65479, - 128631, 41781, 10486, 41480, 43002, 9899, 92608, 0, 404, 12821, 3741, 0, - 5788, 8092, 68212, 41222, 1831, 66020, 3982, 0, 4388, 194913, 746, - 118826, 74783, 0, 12018, 65294, 127545, 194925, 68835, 983488, 4422, - 4708, 3799, 74292, 119357, 121146, 74430, 0, 11700, 4374, 120377, 121151, - 1364, 0, 8038, 120883, 917597, 12868, 69814, 70425, 6735, 73979, 13174, + 194998, 100929, 10673, 68779, 7248, 68786, 43515, 1781, 5496, 3627, 62, + 1649, 67876, 964, 100696, 66403, 78226, 66393, 92897, 70355, 66409, + 983484, 83398, 43689, 100701, 13142, 78812, 42415, 66575, 4542, 69909, + 43547, 83028, 0, 7677, 2991, 4946, 42454, 11565, 7949, 127545, 69759, + 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 70810, 6478, 9898, + 41039, 65237, 6241, 7106, 4877, 100681, 6238, 100683, 10548, 100685, + 4409, 100687, 100690, 64798, 70805, 5346, 128240, 94047, 6237, 4874, + 66851, 9176, 92882, 121153, 65231, 65884, 12678, 78748, 118912, 11378, + 44018, 42785, 2408, 3251, 11203, 983159, 5685, 0, 2461, 11052, 7091, + 5342, 8317, 121446, 68163, 5340, 120559, 125206, 43635, 73928, 125001, + 71069, 83318, 0, 83317, 65482, 121394, 9142, 983177, 68506, 195084, + 10938, 0, 118790, 1182, 2542, 4826, 0, 126648, 72438, 529, 8580, 66769, + 125058, 10586, 10790, 10839, 66023, 41593, 41207, 68744, 120620, 41594, + 225, 42828, 983632, 67821, 121200, 11376, 72729, 10721, 67664, 3438, + 42097, 68862, 11084, 3194, 41870, 266, 78305, 120183, 41873, 71271, + 11324, 120531, 983976, 8420, 64918, 128839, 41871, 41338, 3734, 7734, + 43683, 8750, 66605, 66011, 92514, 40965, 100672, 100675, 5161, 10572, + 100676, 42906, 100678, 64349, 7287, 42162, 100660, 983613, 126605, 11167, + 69220, 12359, 43429, 41369, 1697, 12191, 0, 68633, 7286, 194695, 68635, + 10031, 113766, 9870, 67726, 8620, 65824, 100651, 11938, 100653, 7285, + 100655, 100654, 42678, 66842, 43677, 41583, 0, 65799, 92623, 70693, + 128131, 128267, 78169, 66199, 100664, 3609, 68624, 70280, 832, 100667, + 120770, 78473, 66007, 78471, 65703, 71256, 128517, 42732, 5180, 92699, + 41395, 41530, 11691, 64773, 92214, 74002, 127790, 120548, 128478, 6348, + 243, 13200, 120160, 6024, 92309, 9979, 10037, 41529, 10648, 8538, 43687, + 120880, 917844, 4285, 66195, 121370, 4230, 92886, 7367, 43256, 92353, + 7563, 42376, 983271, 68442, 120512, 0, 0, 214, 128578, 0, 74856, 65893, + 12208, 9973, 128386, 66311, 65589, 128277, 2603, 125205, 70155, 78622, + 70047, 127273, 6022, 100485, 2884, 0, 11620, 0, 43, 195020, 12682, 1016, + 41107, 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 70855, 2074, 113742, + 78283, 128737, 12453, 70847, 983826, 74241, 126568, 6791, 12457, 78268, + 0, 66278, 983633, 78279, 0, 127932, 92358, 66637, 7995, 8759, 43421, + 78277, 12449, 122908, 71224, 43868, 8752, 3197, 4720, 10165, 113765, + 119249, 113715, 11595, 64893, 118905, 43435, 83309, 121414, 4993, 129360, + 6168, 10934, 1946, 741, 120650, 5494, 4639, 70668, 1990, 11107, 4498, + 74169, 67736, 70658, 127272, 69734, 2960, 73779, 195076, 8969, 128117, + 43424, 73959, 126464, 2950, 119579, 6210, 65753, 370, 121360, 983654, + 120928, 4953, 195009, 121054, 113708, 122888, 69230, 0, 122900, 65688, + 74951, 5063, 3517, 2964, 43663, 917762, 6344, 74791, 10566, 10144, 66333, + 8252, 729, 66016, 78253, 0, 71317, 64923, 66744, 43669, 9032, 78263, + 78264, 0, 41215, 0, 65883, 983873, 917774, 74914, 3761, 0, 0, 70068, + 120408, 12912, 119012, 3850, 128191, 127282, 128389, 0, 983342, 908, 0, + 8611, 101074, 983699, 74642, 43691, 41197, 128812, 8978, 120540, 119135, + 41586, 10527, 70426, 917848, 3848, 78739, 74917, 127536, 65241, 5336, + 74883, 128786, 663, 0, 10780, 128395, 0, 78767, 119626, 100922, 68193, + 347, 0, 917544, 78775, 64675, 41582, 72792, 78744, 65579, 12980, 68046, + 12143, 69657, 78512, 128493, 11153, 41804, 78523, 119168, 78525, 0, + 128859, 41584, 10681, 0, 120094, 73938, 73781, 128022, 4800, 66661, + 125038, 66306, 64715, 66384, 9518, 6609, 10434, 70845, 11319, 1097, + 128964, 917564, 41730, 129181, 92512, 73847, 74845, 65172, 41728, 41721, + 194780, 194769, 121499, 41203, 127056, 13110, 41726, 129072, 67077, 1000, + 69651, 83520, 41140, 1209, 73978, 125059, 73750, 1073, 6321, 77878, + 41138, 983968, 68213, 78000, 12167, 1115, 41605, 9794, 119904, 67671, + 55248, 12237, 78787, 66314, 6587, 9290, 78782, 78783, 9231, 78781, 2959, + 7926, 0, 917601, 128833, 64398, 71124, 71274, 12311, 119181, 78796, + 68768, 78794, 78795, 68434, 78793, 66670, 113797, 128579, 12290, 120169, + 128233, 119873, 3937, 9968, 8205, 0, 5131, 113694, 9627, 43646, 78542, + 78535, 983212, 1944, 1248, 10148, 127755, 119990, 119991, 12701, 78376, + 11308, 119995, 983493, 113702, 66836, 65305, 65100, 4031, 42794, 120003, + 7075, 8154, 119985, 120007, 41817, 73934, 42275, 120011, 120012, 78526, + 120014, 120015, 6041, 120520, 41899, 983287, 8002, 128367, 4364, 73732, + 983570, 64332, 120976, 7813, 9064, 119986, 10124, 7526, 8601, 7281, + 68246, 7279, 12041, 1418, 10885, 12673, 101080, 121381, 9660, 917929, + 13012, 4571, 128331, 0, 118940, 12078, 2970, 129122, 10933, 0, 77870, + 121243, 77841, 100358, 41599, 70159, 121342, 100706, 12950, 92160, 3486, + 983973, 66782, 4239, 128073, 126592, 66511, 68066, 2637, 64629, 8460, + 66834, 8476, 983975, 917989, 68312, 78489, 65673, 1019, 78495, 4148, 0, + 12289, 0, 4316, 0, 13119, 8488, 5412, 66243, 9935, 92777, 73864, 983203, + 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 7120, 41736, + 92546, 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, 127284, + 66853, 73963, 41855, 41867, 65564, 11277, 65892, 11536, 10620, 92272, + 7115, 66030, 73932, 5498, 63876, 41536, 917587, 66738, 92587, 3459, 8997, + 194719, 92714, 127238, 13060, 78301, 0, 66377, 69781, 120159, 124972, + 78511, 3161, 295, 71257, 0, 92223, 121328, 78742, 9016, 43454, 63903, + 63902, 43501, 68210, 3971, 983959, 70063, 2952, 78765, 11038, 10901, + 63900, 63899, 63898, 68095, 667, 12332, 63887, 6086, 41722, 0, 5172, 0, + 983280, 4159, 983562, 0, 9815, 63884, 19934, 63882, 41198, 8555, 63878, + 63877, 42460, 6050, 42708, 63881, 63872, 120941, 42421, 129335, 41723, + 63875, 63874, 11460, 7432, 1913, 41913, 63852, 66869, 128971, 42348, + 73892, 6752, 446, 41911, 127901, 63851, 63850, 41910, 128637, 63846, + 2972, 12932, 7262, 69968, 63849, 41384, 63847, 113749, 6570, 8302, 7259, + 63842, 4178, 10746, 7250, 13214, 10041, 8105, 63892, 127780, 69969, 1105, + 4180, 127786, 12094, 9497, 128396, 63891, 63890, 63889, 63888, 5538, + 9987, 0, 92739, 1678, 13274, 552, 118834, 44010, 10785, 0, 11192, 4557, + 74459, 9159, 10171, 13125, 63860, 5540, 63858, 63865, 281, 13242, 63862, + 74154, 128387, 5536, 65568, 9574, 1388, 71902, 983915, 1077, 195000, + 65099, 11531, 5834, 0, 917549, 917789, 0, 42773, 121331, 0, 0, 119220, + 120912, 3663, 127027, 1112, 70335, 8686, 126611, 5334, 65081, 43249, + 74778, 127968, 11077, 92515, 6509, 120117, 5327, 78776, 19907, 63869, + 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 43746, 73748, 63866, 78626, + 1915, 4846, 67755, 66371, 118984, 42105, 2990, 120128, 805, 69238, 64438, + 12070, 8760, 1117, 113750, 12212, 120123, 65174, 42357, 63835, 63834, + 983592, 78240, 12225, 63838, 63837, 100458, 70173, 63833, 6042, 66360, + 8083, 128166, 983733, 63821, 63820, 63819, 63818, 983332, 5227, 9047, + 63822, 74797, 6091, 983322, 10691, 560, 5643, 8226, 119578, 63812, 63811, + 63810, 63809, 2289, 63815, 63814, 63813, 6047, 1597, 78876, 780, 206, + 70126, 4936, 65147, 8168, 63930, 2076, 1093, 9882, 63934, 2082, 63932, + 75050, 63929, 3546, 1605, 66811, 9806, 43472, 77933, 8400, 11343, 2086, + 0, 63926, 2984, 5968, 9287, 72791, 4618, 42209, 11137, 13169, 5290, 2089, + 1695, 10743, 1088, 63825, 7268, 1084, 1085, 63829, 1083, 10131, 7283, + 120109, 63970, 121165, 1092, 4754, 7273, 5252, 44016, 43627, 127921, + 128920, 7408, 11809, 83220, 121181, 194716, 2965, 7258, 8808, 66572, + 1089, 4187, 63937, 42119, 42120, 11106, 940, 5787, 10099, 63938, 983849, + 74494, 12463, 2994, 125136, 118827, 68522, 9664, 70834, 77940, 67892, + 77938, 74343, 67370, 72714, 660, 10127, 666, 9022, 5532, 43667, 5533, + 12580, 78507, 6118, 222, 979, 3884, 983319, 72706, 83227, 6502, 983762, + 11085, 121261, 63951, 12465, 917862, 0, 128782, 63946, 1707, 63924, + 12461, 63950, 63897, 63948, 63947, 63945, 6038, 63943, 63942, 64685, + 63895, 65838, 2276, 7776, 94076, 121086, 92464, 66792, 69730, 801, 43165, + 1690, 63919, 63918, 63917, 13277, 43659, 12951, 120638, 9906, 2054, 2334, + 66800, 63916, 5483, 63914, 69737, 63911, 5484, 63909, 63908, 2539, + 120102, 43980, 5485, 194873, 42697, 9061, 5534, 10672, 4502, 68057, 253, + 0, 68208, 120439, 9203, 74231, 100708, 11530, 68634, 68668, 121242, + 11127, 0, 10474, 43426, 13257, 42354, 128099, 120106, 70044, 127110, + 66808, 8413, 66841, 0, 5693, 7272, 129307, 13209, 64470, 65831, 74350, + 195063, 0, 0, 0, 113665, 120097, 127960, 94078, 66840, 127165, 66608, + 3111, 41863, 8804, 42913, 78347, 7270, 0, 66606, 6628, 1076, 7433, 1436, + 73844, 55226, 128353, 63982, 7393, 12807, 43413, 63906, 1598, 63904, + 71187, 70393, 41729, 4423, 1307, 113692, 10515, 41589, 128698, 128918, + 6218, 92917, 1430, 0, 100700, 120606, 78754, 5413, 7619, 3255, 3493, + 74032, 11549, 10735, 41743, 73937, 6801, 100743, 4518, 10990, 65073, + 5167, 4481, 3771, 67093, 2710, 917847, 66277, 41724, 67716, 43073, 41690, + 12479, 983635, 8380, 121071, 71852, 70046, 1628, 121229, 128817, 129067, + 65262, 6333, 10783, 11172, 121473, 63855, 70840, 113679, 0, 5339, 74323, + 120946, 13004, 66843, 4457, 100901, 127756, 194818, 127116, 5684, 8678, + 10914, 43632, 5689, 65807, 70814, 68464, 12633, 12870, 69705, 65183, + 5688, 11926, 6033, 6310, 5686, 119076, 74251, 128908, 120647, 128930, 50, + 10558, 9871, 42612, 43655, 74403, 983818, 74284, 66468, 66905, 13259, + 4448, 119150, 121406, 83349, 70043, 1321, 100987, 10640, 11539, 1151, + 121186, 917607, 124958, 127079, 71106, 118949, 0, 983920, 983075, 12501, + 64604, 128657, 11527, 118870, 8812, 125141, 11538, 8673, 12650, 11020, 0, + 66467, 2105, 8087, 72712, 69632, 9894, 127137, 127856, 69995, 4636, + 55262, 78513, 4515, 2382, 0, 127055, 983695, 113780, 983456, 118968, + 12277, 121239, 11995, 92553, 120675, 12158, 70170, 8741, 10197, 68780, + 92426, 119610, 6531, 83051, 127846, 473, 43415, 92936, 124949, 1873, + 1087, 124966, 71275, 74280, 78527, 66439, 43218, 983123, 127792, 7237, + 12504, 71113, 126559, 128748, 120887, 9489, 120069, 70843, 4384, 74220, + 63845, 2058, 69741, 13295, 43191, 128030, 128571, 1154, 3857, 1205, + 128955, 0, 6055, 12958, 120706, 74168, 128388, 70846, 4421, 10592, 0, + 495, 66400, 41712, 7983, 70833, 93997, 70696, 6347, 78715, 7654, 41710, + 4196, 194704, 437, 41709, 73772, 70832, 0, 9465, 13290, 119180, 4997, + 64306, 121309, 0, 4999, 194642, 67401, 126582, 4711, 120769, 100469, + 2739, 0, 8044, 74313, 128230, 41789, 128142, 10809, 66279, 128740, 0, + 1779, 6600, 6601, 41543, 5325, 642, 64187, 13058, 120449, 12875, 983804, + 92186, 13229, 71845, 10575, 43399, 100467, 0, 41791, 1104, 127922, + 983725, 10655, 983334, 983561, 120164, 63960, 1082, 121024, 8428, 6569, + 128429, 0, 78534, 69849, 6783, 194671, 12993, 8049, 41548, 44021, 6458, + 64728, 128882, 4761, 63828, 4766, 64623, 1273, 43407, 120677, 118876, + 195045, 6912, 1313, 6322, 10483, 128627, 41545, 126465, 92449, 125209, + 11216, 121307, 194851, 78624, 3484, 74337, 0, 983225, 8503, 5122, 41527, + 71910, 66320, 70161, 74907, 194856, 0, 41537, 66453, 8303, 8282, 11817, + 73857, 10003, 73859, 65904, 7363, 1686, 122920, 70115, 11467, 3664, + 65921, 64299, 124939, 128462, 128001, 4324, 126, 42246, 75030, 69984, + 67725, 65926, 7744, 68859, 74277, 66283, 78052, 43817, 6966, 43822, 8136, + 0, 65600, 1633, 128301, 126614, 4762, 1103, 70827, 70157, 4765, 983494, + 13078, 983270, 4760, 63827, 2050, 10871, 43199, 1102, 194652, 6555, + 128867, 127072, 11546, 74794, 337, 121196, 42591, 8627, 12279, 1111, + 983856, 75047, 4707, 68206, 10143, 7883, 121444, 7880, 4522, 8645, 5704, + 13010, 69796, 8304, 92982, 194688, 119575, 2293, 70195, 66654, 129077, + 92676, 0, 13008, 121194, 4385, 100462, 13011, 125004, 92569, 119161, + 13009, 160, 2677, 70388, 127785, 41793, 65763, 74221, 70790, 41792, + 42770, 94054, 65762, 118829, 43821, 5709, 125222, 71076, 43816, 983087, + 195005, 1079, 3867, 5708, 0, 0, 43797, 5706, 64768, 5705, 8791, 4005, + 121091, 10237, 10991, 128816, 43459, 9173, 121152, 121219, 13170, 12540, + 125233, 42605, 120765, 126617, 68647, 917572, 10058, 68058, 74867, 67730, + 127078, 3339, 11448, 1106, 917591, 917540, 128311, 3340, 74017, 917586, + 120994, 129141, 92979, 10605, 1309, 63966, 120743, 1754, 92226, 13246, + 864, 917582, 118926, 8972, 100444, 7849, 120092, 83130, 13240, 195068, + 5192, 4338, 67982, 10948, 66825, 13199, 92575, 1236, 13208, 13261, 13189, + 13188, 93993, 71847, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, + 63782, 63781, 63780, 63779, 1583, 119923, 13260, 4550, 120598, 64205, + 129107, 71071, 41522, 41523, 68523, 129108, 66759, 11354, 94071, 0, + 42795, 128061, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 69926, + 4479, 1178, 65586, 68311, 66681, 119193, 4601, 0, 127885, 195038, 66828, + 128972, 127839, 74580, 6809, 63786, 6031, 67402, 63791, 63790, 1145, + 63788, 7910, 63785, 43153, 754, 10192, 13105, 8183, 120741, 2037, 125122, + 64710, 10747, 125, 120803, 64890, 66805, 127376, 0, 41719, 63758, 3523, + 1074, 13258, 9536, 71056, 0, 4427, 74242, 63757, 43145, 12217, 63754, + 41532, 1349, 63750, 63749, 129025, 128773, 101014, 63753, 63802, 41084, + 72784, 68133, 41930, 63805, 63804, 11140, 63801, 41082, 8140, 63798, + 6260, 78826, 128391, 66765, 11439, 11988, 3898, 92246, 10201, 12238, + 63795, 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, + 983331, 42203, 7950, 3124, 63771, 42787, 4386, 11148, 6973, 2793, 12475, + 125241, 75056, 63769, 9530, 121248, 12232, 13135, 8596, 5681, 63762, + 4595, 63760, 792, 113674, 64803, 100512, 8742, 195029, 11053, 128796, + 63744, 128107, 128942, 7588, 63748, 1693, 63746, 43204, 5055, 68426, + 42063, 1090, 68803, 120778, 11665, 74133, 4558, 65685, 9523, 195053, + 63857, 71216, 11513, 0, 6157, 63775, 63774, 63773, 13191, 12170, 3500, + 3139, 68071, 3170, 12485, 43891, 10872, 43892, 13006, 43933, 120074, + 100650, 941, 0, 129079, 120967, 65541, 11063, 983198, 8228, 73988, 42065, + 122893, 43889, 94039, 127041, 92455, 7386, 0, 64444, 70295, 119863, + 43603, 94075, 65397, 288, 83409, 0, 0, 10025, 69915, 2918, 66820, 65300, + 119871, 9883, 64726, 2790, 65395, 3793, 983620, 127829, 65393, 120592, + 74138, 83505, 92751, 75019, 74139, 78777, 65394, 11548, 5270, 128149, + 65396, 74998, 65813, 13256, 1282, 120771, 75012, 120157, 10888, 120934, + 65242, 0, 3330, 129417, 0, 68340, 124931, 983605, 71202, 3304, 42753, + 92588, 70298, 74643, 1627, 129120, 127765, 194735, 5371, 13116, 983777, + 1826, 118794, 983497, 43094, 70023, 43650, 94037, 68317, 9035, 11141, + 917977, 128005, 0, 72733, 68125, 74898, 164, 68309, 94067, 94000, 6958, + 100634, 43116, 67719, 70019, 13245, 100637, 68808, 66818, 128009, 70031, + 11099, 12666, 13175, 13207, 120414, 66014, 120428, 7447, 5929, 983473, + 65509, 129192, 7449, 11306, 0, 73920, 3180, 125102, 63808, 9054, 971, + 13062, 71090, 0, 65195, 10164, 92252, 74428, 983321, 78146, 92611, 0, + 70204, 125129, 10045, 12882, 13275, 2303, 11057, 124994, 13276, 125133, + 41525, 78150, 7271, 11444, 126479, 127904, 119091, 12229, 11680, 92956, + 43411, 73751, 0, 64813, 195089, 983495, 10476, 3858, 64175, 3932, 64958, + 120432, 983678, 73989, 68192, 0, 69847, 369, 74908, 41784, 119175, 64163, + 77997, 72707, 92645, 65474, 4796, 12292, 126595, 65479, 128631, 41781, + 10486, 41480, 43002, 9899, 92608, 983870, 404, 12821, 3741, 0, 5788, + 8092, 68212, 41222, 1831, 66020, 3982, 0, 4388, 194913, 746, 118826, + 74783, 0, 12018, 65294, 124946, 194925, 68835, 983488, 4422, 4708, 3799, + 74292, 119357, 121146, 74430, 0, 11700, 4374, 120377, 121151, 1364, + 983317, 8038, 120883, 917597, 12868, 69814, 70425, 6735, 73979, 13174, 73968, 13225, 194902, 69808, 65835, 0, 2365, 7841, 71476, 42855, 118856, - 42866, 0, 0, 127986, 66438, 41785, 12617, 64172, 13173, 4372, 119354, - 983920, 983568, 128871, 127821, 67685, 128062, 12965, 384, 64512, 10404, - 10340, 119352, 1556, 5274, 13210, 120125, 10017, 9733, 41787, 983245, - 121149, 41373, 68486, 12303, 128476, 13232, 13233, 349, 4863, 41371, - 11656, 0, 120703, 119883, 12861, 4398, 8543, 65618, 92737, 1096, 43852, - 121433, 42688, 12441, 12355, 119348, 119347, 4318, 10452, 92902, 8032, - 13243, 13237, 12719, 126646, 119101, 121156, 64884, 92909, 119345, 8597, - 71100, 129062, 9864, 0, 120785, 119874, 94107, 13195, 41452, 64961, 7722, - 0, 10459, 119878, 124949, 119879, 66590, 128123, 41533, 66337, 128663, - 92184, 0, 4965, 43445, 917536, 67856, 0, 43638, 78536, 121187, 6261, - 119342, 43147, 66570, 1957, 10420, 982, 2756, 13292, 13206, 125064, - 917795, 2925, 73809, 13056, 92914, 13212, 43238, 121396, 13190, 13187, - 92541, 13198, 118793, 121089, 5242, 119179, 64476, 1694, 8216, 71369, - 6770, 43331, 0, 65620, 983728, 43544, 126466, 0, 41444, 65621, 69955, - 9197, 5246, 119106, 13185, 9709, 120323, 120322, 12314, 65616, 5238, - 43825, 71085, 119337, 5236, 40979, 983140, 71874, 8286, 128537, 3936, - 119331, 11699, 41347, 69739, 13235, 8842, 41248, 0, 4379, 13239, 12692, - 7969, 127266, 7219, 71875, 128251, 120509, 92907, 66224, 734, 2979, - 120303, 65619, 9872, 957, 64921, 1846, 66631, 41477, 119256, 71192, - 74511, 41770, 1670, 6442, 120317, 42446, 5379, 120318, 41163, 74832, - 11136, 71876, 11506, 128395, 42841, 13267, 128421, 0, 41775, 0, 7130, - 41773, 0, 10663, 70130, 0, 983974, 6151, 12110, 42673, 65572, 65293, - 65250, 13265, 13264, 64518, 0, 6100, 127964, 92647, 5808, 65922, 67814, - 12967, 66041, 5612, 4583, 70004, 43386, 68097, 64575, 126637, 11965, - 194930, 68358, 71483, 69789, 42653, 83181, 68102, 9698, 7814, 71045, - 119651, 128514, 0, 41921, 118858, 9756, 6985, 66418, 66621, 74219, 66412, - 128822, 118997, 8012, 5674, 12353, 66421, 12361, 5677, 5588, 92348, - 41925, 128124, 41920, 5673, 83113, 5676, 41923, 12694, 118978, 5672, - 1294, 0, 78059, 983962, 42511, 1727, 120725, 42436, 121400, 121183, 0, - 74222, 8718, 3550, 736, 10268, 4505, 5873, 74090, 5826, 55232, 5813, - 129032, 92889, 5841, 5837, 55234, 194864, 3105, 12829, 5838, 5796, 0, - 119592, 5793, 0, 5866, 5797, 41011, 5865, 93009, 7956, 598, 0, 64649, - 5806, 42398, 0, 9037, 5671, 120041, 983257, 83478, 983929, 83184, 0, 847, - 128242, 9529, 83018, 66657, 6980, 78483, 43510, 78122, 92219, 0, 67411, - 78486, 83017, 127260, 120039, 42683, 71848, 983055, 7114, 126521, 0, - 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 6792, 43201, 75059, - 19963, 5698, 194768, 983272, 92933, 71887, 5644, 10292, 65546, 69727, - 68141, 8372, 0, 65116, 0, 70304, 10175, 10388, 42799, 94100, 41013, - 10568, 0, 983618, 2869, 917843, 41015, 74473, 2785, 4366, 0, 10954, - 41802, 983652, 42608, 78468, 9884, 4759, 73768, 120296, 10266, 41359, - 1170, 43365, 69810, 73908, 1609, 902, 92773, 63936, 83247, 11661, 8122, - 5818, 83245, 0, 3861, 9540, 11028, 2554, 5158, 5714, 2213, 983966, 0, - 807, 43079, 78092, 78475, 976, 5511, 64553, 120863, 42155, 983319, 41356, - 74110, 118801, 71043, 120080, 8676, 983293, 94002, 5582, 451, 63941, + 42866, 101077, 0, 127986, 66438, 41785, 12617, 64172, 13173, 4372, + 119354, 194940, 983568, 127253, 127821, 67685, 128062, 12965, 384, 64512, + 10404, 10340, 41473, 1556, 5274, 13210, 120125, 10017, 9733, 41787, + 983245, 70684, 41373, 68486, 12303, 128476, 13232, 13233, 349, 4863, + 41371, 11656, 983691, 120703, 119883, 12861, 4398, 8543, 65618, 92737, + 1096, 43852, 121433, 42688, 12441, 12355, 119348, 119347, 4318, 10452, + 92902, 8032, 13243, 13237, 12719, 126646, 119101, 121156, 64884, 92909, + 119345, 8597, 71100, 127559, 9864, 983943, 120785, 119874, 94107, 13195, + 41452, 64961, 7722, 0, 10459, 119878, 72830, 119879, 66590, 128123, + 41533, 66337, 128663, 92184, 983860, 4965, 43445, 917536, 67856, 0, + 43638, 78536, 72719, 6261, 119342, 43147, 66570, 1957, 10420, 982, 2756, + 13292, 13206, 125064, 917795, 2925, 73809, 13056, 92914, 13212, 43238, + 121396, 13190, 13187, 92541, 13198, 118793, 121089, 5242, 119179, 64476, + 1694, 8216, 71369, 6770, 43331, 0, 65620, 194629, 43544, 100441, 0, + 41444, 65621, 69955, 9197, 5246, 119106, 13185, 9709, 120323, 100924, + 12314, 65616, 5238, 43825, 71085, 119337, 5236, 40979, 983140, 71874, + 8286, 121292, 3936, 119331, 11699, 41347, 69739, 13235, 8842, 41248, + 100490, 4379, 13239, 12692, 7969, 127266, 7219, 71875, 128251, 120509, + 92907, 66224, 734, 2979, 120303, 65619, 9872, 957, 64921, 1846, 66631, + 41477, 119256, 71192, 74511, 41770, 1670, 6442, 120317, 42446, 5379, + 120318, 41163, 74832, 11136, 71876, 11506, 65934, 42841, 13267, 128421, + 124988, 41775, 0, 7130, 41773, 917888, 10663, 70130, 125225, 983974, + 6151, 12110, 42673, 65572, 65293, 65250, 13265, 13264, 64518, 0, 6100, + 100493, 92647, 5808, 65922, 67814, 12967, 66041, 5612, 4583, 70004, + 43386, 68097, 64575, 126637, 11965, 70720, 68358, 71483, 69789, 42653, + 83181, 68102, 9698, 7814, 71045, 119651, 128514, 917915, 41921, 118858, + 9756, 6985, 66418, 66621, 74219, 66412, 128822, 70718, 8012, 5674, 12353, + 66421, 12361, 5677, 5588, 92348, 41925, 128124, 41920, 5673, 83113, 5676, + 41923, 12694, 118978, 5672, 1294, 120878, 78059, 983962, 42511, 1727, + 120725, 42436, 100497, 121183, 0, 74222, 8718, 3550, 736, 10268, 4505, + 5873, 74090, 5826, 55232, 5813, 120086, 92889, 5841, 5837, 55234, 194864, + 3105, 12829, 5838, 5796, 983840, 119592, 5793, 0, 5866, 5797, 41011, + 5865, 93009, 7956, 598, 983260, 64649, 5806, 42398, 0, 9037, 5671, + 120041, 983257, 83478, 983929, 71266, 917618, 847, 125065, 9529, 83018, + 66657, 6980, 78483, 43510, 78122, 92219, 0, 67411, 78486, 83017, 127260, + 120039, 42683, 71848, 101095, 7114, 126521, 0, 43190, 65463, 1554, 70657, + 42611, 42563, 101071, 5651, 2929, 6792, 43201, 75059, 19963, 5698, + 194768, 120730, 92933, 71887, 5644, 10292, 65546, 69727, 68141, 8372, + 100800, 65116, 0, 70304, 10175, 10388, 42799, 94100, 41013, 10568, + 917565, 127400, 2869, 917843, 41015, 74473, 2785, 4366, 0, 10954, 41802, + 983652, 42608, 78468, 9884, 4759, 73768, 120296, 10266, 41359, 1170, + 43365, 69810, 73908, 1609, 902, 92773, 63936, 83247, 11661, 8122, 5818, + 83245, 0, 3861, 9540, 11028, 2554, 5158, 5714, 2213, 983966, 121028, 807, + 43079, 78092, 78475, 976, 5511, 64553, 120863, 42155, 128951, 41356, + 74110, 118801, 71043, 120080, 8676, 100519, 94002, 5582, 451, 63941, 5798, 9349, 42018, 127858, 128521, 78681, 43609, 5906, 120553, 1440, 0, - 128853, 74933, 70342, 11005, 194699, 66656, 66044, 194636, 120079, - 128793, 0, 43393, 10094, 70164, 11529, 10857, 92944, 66436, 6546, 93, - 8102, 67323, 68405, 0, 194714, 8171, 118888, 119097, 82996, 917543, 383, - 7154, 41656, 43495, 94040, 67162, 5187, 71296, 71086, 11286, 68620, - 64217, 0, 5232, 0, 41009, 127377, 41005, 983810, 0, 128471, 8292, 125108, - 4980, 8860, 71054, 10028, 65291, 7076, 13182, 194705, 74912, 127974, - 10631, 11244, 7972, 68042, 78785, 0, 7900, 128590, 11309, 3806, 4198, - 42725, 0, 67656, 9995, 0, 92552, 0, 12931, 121110, 42684, 74285, 2088, - 64213, 64366, 65156, 8814, 42238, 74771, 127920, 194713, 12836, 0, - 113800, 74342, 8593, 0, 0, 68445, 13255, 121333, 128843, 7464, 0, 65865, - 0, 194650, 127144, 92395, 9342, 120464, 70376, 64516, 0, 78792, 10129, - 41007, 74375, 983701, 40995, 12209, 41012, 83501, 0, 83257, 69724, 40992, - 92264, 119136, 68653, 43558, 5522, 75026, 61, 120959, 74105, 3633, - 120082, 65162, 41234, 12089, 78281, 9771, 83281, 13251, 128701, 0, 6262, - 2784, 42743, 71078, 8126, 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, - 119623, 43266, 7108, 194779, 10890, 74481, 65834, 8324, 118944, 64417, - 74817, 127465, 64737, 74853, 983659, 8930, 66678, 67216, 1193, 10056, - 1800, 13253, 13252, 7829, 120992, 121175, 7743, 83502, 124996, 77904, - 77913, 77905, 9034, 6039, 129139, 10075, 0, 41018, 65683, 10338, 66469, - 0, 0, 194637, 42815, 92984, 41966, 0, 127471, 0, 11792, 43064, 41025, - 911, 7539, 0, 40963, 120339, 65159, 64390, 0, 983160, 5520, 11662, - 127473, 65330, 42812, 983215, 0, 12326, 71081, 194638, 42808, 128337, - 9348, 64901, 983861, 983892, 121050, 66839, 0, 0, 121004, 43702, 983148, - 5857, 65342, 92727, 119120, 83503, 8644, 121227, 83332, 11186, 74296, - 41909, 0, 66900, 2791, 69663, 1891, 69824, 66397, 41907, 66647, 118939, - 8761, 12942, 5748, 92713, 10773, 70868, 83174, 8796, 78149, 6412, 2061, - 8520, 13146, 127096, 63931, 83275, 65902, 2882, 83334, 0, 12843, 4520, - 120345, 92459, 0, 983660, 0, 73860, 83335, 0, 64345, 0, 9201, 128314, - 70871, 0, 917864, 43679, 121026, 65117, 92270, 0, 10427, 121506, 3844, - 6842, 9755, 1110, 6612, 12222, 93030, 128789, 983638, 92928, 783, 194935, + 128853, 74933, 70342, 11005, 194699, 66656, 66044, 194586, 120079, + 127249, 120797, 43393, 10094, 70164, 11529, 10857, 92944, 66436, 6546, + 93, 8102, 67323, 68405, 0, 194714, 8171, 118888, 119097, 82996, 917543, + 383, 7154, 41656, 43495, 94040, 67162, 5187, 71296, 71086, 11286, 68620, + 64217, 0, 5232, 0, 41009, 127377, 41005, 983810, 43205, 120829, 8292, + 125108, 4980, 8860, 71054, 10028, 65291, 7076, 13182, 194705, 74912, + 127974, 10631, 11244, 7972, 68042, 78785, 0, 7900, 128590, 11309, 3806, + 4198, 42725, 983311, 67656, 9995, 120072, 92552, 0, 12931, 121110, 42684, + 74285, 2088, 64213, 64366, 65156, 8814, 42238, 74771, 127920, 194713, + 12836, 125214, 113800, 74342, 8593, 120640, 0, 68445, 13255, 121333, + 128843, 7464, 101066, 65865, 0, 128535, 127144, 92395, 9342, 120464, + 70376, 64516, 0, 78792, 10129, 41007, 74375, 983701, 40995, 12209, 41012, + 83501, 0, 83257, 69724, 40992, 92264, 119136, 68653, 43558, 5522, 75026, + 61, 120959, 74105, 3633, 120082, 65162, 41234, 12089, 78281, 9771, 83281, + 13251, 128701, 0, 6262, 2784, 42743, 71078, 8126, 66483, 0, 194662, 441, + 42621, 70660, 0, 41002, 40999, 119623, 43266, 7108, 194779, 10890, 74481, + 65834, 8324, 118944, 64417, 74817, 127465, 64737, 74853, 983659, 8930, + 66678, 67216, 1193, 10056, 1800, 13253, 13252, 7829, 120992, 121175, + 7743, 83502, 124996, 77904, 77913, 77905, 9034, 6039, 129139, 10075, + 983765, 41018, 65683, 10338, 66469, 0, 0, 194637, 42815, 92984, 41966, 0, + 127471, 125188, 11792, 43064, 41025, 911, 7539, 983487, 40963, 100447, + 65159, 64390, 0, 983160, 5520, 11662, 127473, 65330, 42812, 119912, + 126647, 12326, 71081, 194638, 42808, 128337, 9348, 64901, 983861, 983892, + 121050, 66839, 0, 0, 121004, 43702, 100807, 5857, 65342, 92727, 119120, + 83503, 8644, 121227, 83332, 11186, 74296, 41909, 0, 66900, 2791, 69663, + 1891, 69824, 66397, 41907, 66647, 118939, 8761, 12942, 5748, 92713, + 10773, 70206, 83174, 8796, 78149, 6412, 2061, 8520, 13146, 72805, 63931, + 83275, 65902, 2882, 83334, 128285, 12843, 4520, 120345, 92459, 129092, + 983660, 120068, 73860, 83335, 128289, 64345, 983554, 9201, 128314, 70871, + 983809, 917864, 43679, 121026, 65117, 92270, 983636, 10427, 121506, 3844, + 6842, 9755, 1110, 6612, 12222, 93030, 101051, 983638, 92928, 783, 119577, 92185, 127221, 73855, 68032, 65056, 3620, 41180, 68378, 4556, 67839, 68480, 194933, 74250, 0, 67657, 10510, 4382, 66482, 67823, 0, 127527, - 9177, 8902, 93958, 9839, 120700, 12891, 983755, 983636, 63999, 2016, + 9177, 8902, 93958, 9839, 120700, 12891, 983755, 983239, 63999, 2016, 41917, 9788, 63928, 67696, 1862, 65800, 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, 66017, 4508, 64883, 92456, 92522, 127814, 120834, 64592, 74276, 67688, 6784, 78788, 68181, 0, 71218, 113821, 66366, 12147, 9024, 66378, 66472, 124976, 64289, 65289, 78151, 66658, 71935, 64509, 78152, 113697, 126505, 11051, 194928, 0, 11355, 65885, 121319, 127941, - 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, 9963, 68649, 126609, 4040, - 120570, 6167, 74519, 63922, 6594, 983740, 0, 0, 3624, 43036, 129472, - 6387, 63990, 19947, 63988, 41955, 126990, 63993, 10440, 9611, 65605, - 6803, 120968, 7738, 63986, 11446, 63984, 92641, 3435, 78164, 43814, - 43810, 7029, 64258, 41292, 118898, 12748, 42742, 9517, 11518, 83292, - 78790, 983381, 67993, 63956, 42458, 63954, 63953, 63960, 9591, 4516, - 10217, 68370, 11469, 69697, 42306, 2723, 118947, 0, 92325, 0, 68079, - 121344, 11397, 2880, 70806, 917829, 2872, 0, 83321, 3498, 4378, 917539, - 4270, 0, 65551, 68205, 6633, 43387, 0, 5230, 194991, 0, 983040, 194910, - 121392, 8161, 393, 12013, 0, 983198, 119103, 415, 63964, 63963, 42345, - 92310, 5183, 1877, 42498, 0, 2927, 71058, 63961, 4472, 983299, 0, 78159, - 69699, 127301, 42340, 4756, 128078, 7081, 10730, 7691, 10331, 63830, - 119625, 42922, 42103, 8628, 9813, 78654, 42453, 1604, 9565, 10539, 69701, - 65764, 41415, 65767, 129196, 8457, 42301, 11372, 64873, 11992, 0, 0, - 63980, 11801, 3622, 195092, 64336, 12017, 10463, 63981, 4967, 64189, - 1966, 43628, 983908, 983294, 83267, 121052, 63971, 4347, 4416, 42098, - 11009, 10694, 63973, 402, 92213, 13147, 128692, 42100, 64646, 13228, 0, - 41875, 3515, 74252, 11805, 983157, 11302, 6259, 43395, 0, 83323, 194670, - 120836, 92351, 74813, 74425, 11299, 1561, 118881, 92318, 64942, 93021, - 194733, 70411, 78718, 121140, 74301, 68825, 11280, 128489, 69784, 74060, - 128392, 0, 119664, 5145, 12486, 65018, 66516, 5409, 127379, 124988, 7402, - 5399, 9685, 74089, 7952, 5401, 0, 66616, 66832, 92966, 120852, 5405, - 127875, 64866, 120965, 119583, 119122, 78784, 74248, 11330, 194723, - 64690, 3254, 983166, 128944, 92696, 42390, 43678, 194725, 129127, 65077, - 129059, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 83021, 3377, 0, 0, - 74354, 194578, 78228, 983722, 983762, 42691, 127886, 120948, 68091, - 128404, 75023, 1379, 246, 74649, 983761, 3788, 92520, 11041, 67202, - 66304, 0, 121213, 8917, 42403, 301, 0, 128500, 127046, 0, 0, 113822, - 10656, 125042, 65214, 92987, 42567, 92217, 13163, 983204, 120831, 74597, - 3182, 0, 0, 0, 65034, 65889, 42169, 4755, 74244, 194574, 11443, 983603, - 66319, 6841, 608, 600, 0, 1219, 3934, 64206, 11483, 74510, 119117, 74485, - 42442, 65470, 983907, 64202, 13160, 7759, 42482, 485, 69982, 70505, 9828, - 0, 43505, 42280, 0, 9351, 7778, 64379, 7496, 42431, 6916, 1208, 0, - 119631, 11002, 42470, 0, 68315, 0, 0, 74041, 83144, 70045, 43539, 5411, - 42196, 0, 0, 0, 9150, 66831, 42393, 13086, 1310, 66848, 9337, 12052, - 10643, 55271, 128951, 12166, 2546, 194683, 213, 118852, 65611, 83316, - 194822, 194756, 74310, 6554, 94059, 11914, 5452, 0, 0, 92772, 0, 917880, - 194681, 92560, 2713, 119564, 9650, 43330, 121033, 128505, 1406, 125007, - 42925, 74638, 194593, 66256, 4143, 128136, 194762, 65748, 4141, 9682, - 65287, 1508, 127013, 8779, 10569, 8725, 13299, 66638, 65750, 42263, 4145, - 6380, 65751, 66613, 43994, 65738, 55250, 9185, 9550, 42932, 43403, 0, 0, - 194783, 65736, 41951, 64816, 65756, 983205, 12955, 10596, 2888, 83190, 0, - 121354, 9657, 9019, 121154, 0, 2878, 5390, 0, 194961, 67325, 68679, - 43552, 7501, 6328, 194960, 10429, 10365, 0, 0, 41946, 7503, 5235, 803, - 68381, 0, 0, 8986, 43838, 10632, 11934, 11452, 1332, 0, 194970, 126647, - 0, 118887, 1791, 5191, 9288, 64822, 2892, 83192, 43394, 555, 0, 0, 66646, - 128980, 119002, 13151, 74512, 7289, 74055, 64161, 8854, 64162, 5858, - 41927, 10582, 120457, 1784, 1361, 120921, 121516, 7905, 0, 64868, 128813, - 13158, 92166, 7211, 71884, 9371, 73973, 128441, 6828, 1625, 7664, 128768, - 1342, 68440, 64171, 92642, 10903, 983496, 0, 92527, 0, 70438, 4482, - 41606, 128934, 125033, 121475, 0, 64381, 983940, 194974, 195090, 42245, - 126467, 41972, 0, 444, 983439, 9127, 66687, 66619, 126489, 78025, 0, - 11349, 40991, 917570, 0, 70177, 120830, 0, 1197, 128282, 1149, 68316, 0, - 983258, 40990, 43765, 121262, 3492, 917906, 118784, 129026, 0, 983566, - 12838, 67208, 19948, 41677, 3099, 0, 0, 41087, 0, 0, 983261, 119059, - 12036, 41309, 128161, 0, 8152, 0, 41550, 12227, 983613, 0, 12828, 127511, - 75015, 120964, 120708, 0, 0, 10386, 75068, 119955, 127303, 92680, 983134, - 68154, 127876, 1743, 0, 0, 92239, 65186, 917571, 0, 9606, 0, 70052, - 64439, 128864, 68062, 92686, 983875, 0, 43866, 128881, 0, 3395, 9362, - 10878, 43260, 0, 78362, 64830, 0, 125046, 41091, 3426, 1344, 8870, - 121100, 71344, 4735, 11111, 6119, 12822, 42699, 0, 983824, 74818, 1423, - 128923, 42637, 41080, 0, 12039, 10559, 128634, 118892, 0, 9472, 67734, - 11929, 126557, 7170, 9596, 6130, 128826, 43629, 11579, 71475, 0, 92501, - 125081, 78046, 66699, 64440, 1004, 92584, 194736, 43234, 66008, 12627, 0, - 68414, 74614, 43619, 43303, 11300, 43304, 9686, 5890, 11776, 7558, 70109, - 65627, 0, 10718, 13154, 3461, 9139, 0, 983094, 0, 119023, 65365, 73877, - 65628, 78019, 119272, 83118, 41708, 12860, 2641, 12069, 10838, 5403, - 10352, 70085, 10061, 43237, 125057, 5140, 209, 128847, 41704, 41056, - 43078, 127789, 118809, 67232, 10899, 65469, 70125, 0, 0, 2410, 993, - 83117, 120589, 120689, 78693, 0, 0, 7232, 0, 119253, 124963, 7110, 74462, - 2066, 10489, 42166, 43463, 10659, 3600, 68863, 4224, 1336, 41518, 121311, - 0, 0, 0, 41139, 64820, 92538, 12966, 41134, 0, 0, 119153, 120441, 272, - 4263, 8793, 983856, 0, 41502, 128133, 983, 12549, 124940, 0, 1190, 4109, - 1335, 841, 5888, 41358, 64863, 9544, 43481, 0, 120926, 70027, 2099, 5120, - 2409, 7799, 0, 74424, 0, 121041, 4731, 92279, 66629, 128127, 92525, 1255, - 4149, 9247, 74977, 9913, 983828, 121101, 64914, 917787, 65101, 113714, - 11694, 92475, 11690, 5835, 127164, 66625, 10842, 41354, 42123, 43097, - 11688, 66634, 1094, 194, 64692, 917900, 8180, 125055, 0, 9972, 73865, - 4519, 6114, 10898, 43072, 92465, 0, 93960, 983324, 126581, 10695, 0, - 7540, 0, 881, 7857, 6067, 65164, 0, 917897, 129134, 13311, 68403, 41857, - 64321, 8359, 83286, 12689, 983312, 11245, 128105, 983314, 71859, 68183, - 983415, 194829, 1287, 5436, 0, 71097, 74142, 92328, 74152, 70205, 6051, - 10497, 69668, 8985, 12109, 82962, 128908, 93043, 121013, 0, 3652, 10537, - 120282, 1276, 120440, 6549, 279, 73745, 0, 128664, 83244, 1489, 0, 0, 0, - 3899, 1007, 42124, 43828, 42122, 92337, 92367, 0, 11985, 1345, 78600, - 119832, 917563, 8956, 43083, 94057, 42138, 78610, 129131, 6430, 78608, - 78604, 78605, 6285, 78603, 78612, 78613, 65942, 492, 8685, 128481, - 121270, 0, 75027, 43712, 2582, 11470, 64538, 7444, 78615, 78616, 2297, 0, - 73837, 119823, 2527, 119824, 197, 2799, 92594, 41944, 83152, 9933, 74011, - 66515, 767, 5524, 7028, 0, 92168, 119827, 119817, 92950, 78633, 10896, 0, - 1799, 120497, 6971, 74336, 128342, 0, 65340, 118979, 41551, 2434, 94018, - 118823, 65353, 0, 4631, 118996, 0, 6407, 113737, 6338, 43214, 0, 7570, 0, - 3192, 120330, 8414, 983392, 93983, 195043, 0, 0, 9164, 66612, 93959, - 3171, 6623, 4961, 68396, 886, 55216, 8654, 78832, 9993, 74390, 64603, - 70066, 69241, 9599, 78629, 43084, 78627, 78628, 78625, 2399, 69693, 8994, - 10944, 41208, 983713, 41168, 8178, 74859, 3367, 92334, 42510, 78641, - 78636, 6804, 70475, 1947, 917579, 0, 92681, 42759, 11068, 1705, 9331, 0, - 74798, 9181, 65359, 125065, 8017, 119831, 65096, 66720, 68223, 43475, - 917548, 4909, 12126, 127540, 120696, 4904, 92961, 43503, 1365, 9253, - 42757, 43436, 7462, 127772, 0, 0, 83173, 66845, 64415, 120500, 83172, - 5398, 125035, 127386, 93953, 127362, 983782, 119015, 83171, 127007, 9476, - 983887, 120695, 12763, 126603, 3629, 120844, 13005, 11181, 3628, 0, 0, - 92502, 3469, 42107, 42116, 917578, 64809, 2928, 4905, 9853, 851, 9040, - 120372, 64665, 43086, 9114, 43870, 42583, 9315, 4822, 4906, 3852, 2847, - 119821, 3236, 11317, 1251, 7777, 41852, 11410, 10964, 0, 43222, 12646, - 120269, 10259, 9865, 65821, 75046, 6018, 68293, 125010, 12276, 119110, - 68372, 128255, 92259, 71893, 0, 119828, 10467, 0, 2443, 10918, 78217, - 77947, 1001, 9241, 1927, 0, 124942, 73987, 127882, 71895, 93012, 7992, - 77943, 43939, 12867, 128649, 8260, 77945, 7519, 11505, 12274, 8904, 518, - 65857, 128361, 128674, 13204, 4387, 857, 121252, 65369, 0, 92336, 43125, - 11842, 0, 71072, 121462, 0, 5136, 1968, 128906, 126627, 1337, 64967, - 1629, 0, 796, 66506, 0, 74123, 12877, 120649, 42314, 43388, 43826, 43944, - 6120, 478, 65151, 68128, 128147, 43082, 6016, 0, 42284, 71894, 4276, - 1206, 3619, 41638, 69691, 3843, 12011, 8853, 3361, 0, 490, 10715, 7578, - 68384, 92754, 65350, 10530, 12348, 8653, 68245, 42435, 6154, 9551, 65354, - 78522, 784, 42397, 334, 121084, 42416, 65356, 65273, 43937, 69666, 4442, - 10364, 43935, 778, 41626, 42455, 7989, 74063, 3227, 69907, 43932, 11102, - 2915, 11502, 41022, 41702, 10309, 127035, 75032, 120273, 6975, 0, 5415, - 12176, 983709, 74193, 3462, 43940, 42629, 78691, 71175, 43942, 127256, - 9759, 127255, 70057, 121442, 8114, 78698, 78697, 78696, 78695, 8710, - 42495, 118956, 70189, 4051, 10460, 43364, 71206, 1356, 12161, 42713, - 128857, 127268, 1619, 9703, 43152, 42489, 42112, 64436, 1875, 10808, - 42109, 120284, 41860, 64862, 13305, 64907, 5289, 13144, 128658, 983224, - 5575, 9675, 71129, 5940, 226, 2649, 6336, 983279, 92979, 43236, 3382, - 42449, 6498, 1658, 11936, 78232, 113814, 11269, 10151, 73759, 43100, - 69888, 65508, 983143, 0, 121451, 8935, 78234, 0, 983757, 0, 616, 74753, - 65178, 4684, 78701, 119653, 74631, 126551, 124992, 6048, 74460, 42110, + 41214, 129331, 12299, 101075, 7500, 4506, 7773, 0, 0, 9963, 68649, + 126609, 4040, 120570, 6167, 74519, 63922, 6594, 983740, 113734, 127899, + 3624, 43036, 129472, 6387, 63990, 19947, 63988, 41955, 110592, 63993, + 10440, 9611, 65605, 6803, 120968, 7738, 63986, 11446, 63984, 92641, 3435, + 78164, 43814, 43810, 7029, 64258, 41292, 118898, 12748, 42742, 9517, + 11518, 83292, 78790, 983381, 67993, 63956, 42458, 63954, 63953, 12503, + 9591, 4516, 10217, 68370, 11469, 69697, 42306, 2723, 118947, 0, 92325, + 125067, 68079, 121344, 11397, 2880, 70806, 917829, 2872, 0, 83321, 3498, + 4378, 128743, 4270, 0, 65551, 68205, 6633, 43387, 0, 5230, 194991, 0, + 83322, 126612, 121392, 8161, 393, 12013, 983221, 100509, 119103, 415, + 63964, 63963, 42345, 92310, 5183, 1877, 42498, 0, 2927, 71058, 63961, + 4472, 101054, 0, 78159, 69699, 101055, 42340, 4756, 128078, 7081, 10730, + 7691, 10331, 63830, 83450, 42922, 42103, 8628, 9813, 78654, 42453, 1604, + 9565, 10539, 69701, 65764, 41415, 65767, 100506, 8457, 42301, 11372, + 64873, 11992, 194874, 129306, 63980, 11801, 3622, 128904, 64336, 12017, + 10463, 63981, 4967, 64189, 1966, 43628, 72794, 101060, 83267, 121052, + 63971, 4347, 4416, 42098, 11009, 10694, 63973, 402, 92213, 13147, 128692, + 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 983157, 11302, 6259, + 43395, 983373, 83323, 128358, 120836, 92351, 74813, 74425, 11299, 1561, + 118881, 92318, 64942, 93021, 127049, 70411, 78718, 100930, 74301, 68825, + 11280, 128489, 69784, 74060, 128392, 194988, 72752, 5145, 12486, 65018, + 66516, 5409, 127379, 119057, 7402, 5399, 9685, 74089, 7952, 5401, 101053, + 66616, 66832, 92966, 120852, 5405, 127875, 64866, 120965, 119583, 119122, + 2235, 74248, 11330, 129123, 64690, 3254, 983166, 128944, 92696, 42390, + 43678, 101000, 129127, 65077, 129059, 6388, 3355, 9508, 9867, 5723, + 11520, 5611, 83021, 3377, 0, 983845, 74354, 194578, 78228, 983722, + 128368, 42691, 127886, 120948, 68091, 121166, 75023, 1379, 246, 74649, + 983761, 3788, 92520, 11041, 67202, 66304, 0, 121213, 8917, 42403, 301, + 119935, 119826, 127046, 0, 0, 113822, 10656, 125042, 65214, 92987, 42567, + 92217, 13163, 983204, 120831, 74597, 3182, 983607, 983926, 0, 65034, + 65889, 42169, 4755, 74244, 74631, 11443, 983603, 66319, 6841, 608, 600, + 0, 1219, 3934, 64206, 11483, 74510, 119117, 74485, 42442, 65470, 100538, + 64202, 13160, 7759, 42482, 485, 69982, 70505, 9828, 78311, 43505, 42280, + 0, 9351, 7778, 64379, 7496, 42431, 6916, 1208, 0, 119631, 11002, 42470, + 128913, 68315, 983838, 121159, 74041, 83144, 70045, 43539, 5411, 42196, + 0, 0, 128949, 9150, 66831, 42393, 13086, 1310, 66848, 9337, 12052, 10643, + 55271, 72727, 12166, 2546, 194683, 213, 118852, 65611, 83316, 194822, + 100733, 74310, 6554, 83053, 11914, 5452, 983649, 0, 92772, 127544, + 917880, 194681, 92560, 2713, 119564, 9650, 43330, 121033, 128505, 1406, + 125007, 42925, 74638, 125190, 66256, 4143, 128136, 194762, 65748, 4141, + 9682, 65287, 1508, 100533, 8779, 10569, 8725, 13299, 66638, 65750, 42263, + 4145, 6380, 65751, 66613, 43994, 65738, 55250, 9185, 9550, 42932, 43403, + 100623, 100622, 100625, 65736, 41951, 64816, 65756, 72731, 12955, 10596, + 2888, 83190, 0, 121354, 9657, 9019, 121154, 0, 2878, 5390, 100698, + 194961, 67325, 68679, 43552, 7501, 6328, 194960, 10429, 10365, 983631, + 128216, 41946, 7503, 5235, 803, 68381, 0, 100575, 8986, 43838, 10632, + 11934, 11452, 1332, 120709, 194970, 120602, 0, 118887, 1791, 5191, 9288, + 64822, 2892, 83192, 43394, 555, 129418, 128474, 66646, 128327, 119002, + 13151, 74512, 7289, 72739, 64161, 8854, 64162, 5858, 41927, 10582, + 120457, 1784, 1361, 120921, 121516, 7905, 0, 64868, 128813, 13158, 92166, + 7211, 71884, 9371, 73973, 128441, 6828, 1625, 7664, 127809, 1342, 68440, + 64171, 92642, 10903, 983449, 917818, 92527, 129374, 70438, 4482, 41606, + 128934, 125033, 121475, 983854, 64381, 100540, 194974, 100612, 42245, + 100614, 41972, 100616, 444, 100618, 9127, 66687, 66619, 126489, 78025, + 126606, 11349, 40991, 917570, 129132, 70177, 120830, 983450, 1197, + 128282, 1149, 68316, 128010, 983258, 40990, 43765, 121262, 3492, 917906, + 118784, 129026, 129346, 100592, 12838, 67208, 19948, 41677, 3099, 100598, + 100597, 41087, 100599, 0, 983261, 119059, 12036, 41309, 125210, 100603, + 8152, 100605, 41550, 12227, 100545, 100609, 12828, 127511, 75015, 120964, + 120708, 0, 194611, 10386, 75068, 119955, 127303, 92680, 983134, 68154, + 127876, 1743, 194860, 0, 92239, 65186, 917571, 0, 9606, 0, 70052, 64439, + 128864, 68062, 92686, 100585, 100584, 43866, 100586, 100589, 3395, 9362, + 10878, 43260, 0, 78362, 64830, 100866, 125046, 41091, 3426, 1344, 8870, + 121100, 71344, 4735, 11111, 6119, 12822, 42699, 120745, 983824, 74818, + 1423, 128923, 42637, 41080, 983210, 12039, 10559, 128634, 118892, 194910, + 9472, 67734, 11929, 126557, 7170, 9596, 6130, 125268, 43629, 11579, + 71475, 0, 92501, 125081, 78046, 66699, 64440, 1004, 92584, 194736, 43234, + 66008, 12627, 0, 68414, 74614, 43619, 43303, 11300, 43304, 9686, 5890, + 11776, 7558, 70109, 65627, 72876, 10718, 13154, 3461, 9139, 74947, + 983094, 0, 119023, 65365, 73877, 65628, 78019, 119272, 83118, 41708, + 12860, 2641, 12069, 10838, 5403, 10352, 70085, 10061, 43237, 125057, + 5140, 209, 128847, 41704, 41056, 43078, 127789, 118809, 67232, 10899, + 65469, 70125, 100574, 100573, 2410, 993, 83117, 100577, 100580, 78693, + 100560, 100559, 7232, 0, 119253, 124963, 7110, 74462, 2066, 10489, 42166, + 43463, 10659, 3600, 68863, 4224, 1336, 41518, 121311, 0, 917589, 983794, + 41139, 64820, 92538, 12966, 41134, 100553, 100556, 100555, 100558, 272, + 4263, 8793, 983385, 0, 41502, 128133, 983, 12549, 100563, 100562, 1190, + 4109, 1335, 841, 5888, 41358, 64863, 9544, 43481, 0, 120926, 70027, 2099, + 5120, 2409, 7799, 983954, 74424, 983896, 121041, 4731, 92279, 66629, + 128127, 92525, 1255, 4149, 9247, 74977, 9913, 983828, 101027, 64914, + 125002, 65101, 113714, 11694, 92475, 11690, 5835, 127096, 66625, 10842, + 41354, 42123, 43097, 11688, 66634, 1094, 194, 64692, 917900, 8180, + 125055, 983912, 9972, 73865, 4519, 6114, 10898, 43072, 92465, 0, 93960, + 983324, 74055, 10695, 129058, 7540, 0, 881, 7857, 6067, 65164, 917949, + 917897, 128326, 13311, 68403, 41857, 64321, 8359, 83286, 12689, 983312, + 11245, 128105, 983314, 71859, 68183, 983415, 194829, 1287, 5436, 983065, + 71097, 74142, 92328, 74152, 70205, 6051, 10497, 69668, 8985, 12109, + 82962, 127397, 93043, 121013, 0, 3652, 10537, 120282, 1276, 120440, 6549, + 279, 73745, 127823, 128664, 83244, 1489, 120622, 0, 0, 3899, 1007, 42124, + 43828, 42122, 92337, 92367, 125187, 11985, 1345, 78600, 119832, 917563, + 8956, 43083, 94057, 42138, 78610, 129131, 6430, 78608, 78604, 78605, + 6285, 78603, 78612, 78613, 65942, 492, 8685, 128481, 121270, 0, 75027, + 43712, 2582, 11470, 64538, 7444, 72863, 78616, 2297, 129341, 73837, + 119823, 2527, 119824, 197, 2799, 92594, 41944, 83152, 9933, 74011, 66515, + 767, 5524, 7028, 195065, 92168, 119827, 119817, 92950, 78633, 10896, + 63910, 1799, 120497, 6971, 74336, 70731, 0, 65340, 118979, 41551, 2262, + 94018, 118823, 65353, 100479, 4631, 118996, 195027, 6407, 113737, 6338, + 43214, 127163, 7570, 121017, 3192, 120330, 8414, 983388, 93983, 195043, + 0, 0, 9164, 66612, 93959, 3171, 6623, 4961, 68396, 886, 55216, 8654, + 78832, 9993, 74390, 64603, 70066, 69241, 9599, 78629, 43084, 78627, + 78628, 78625, 2399, 69693, 8994, 10944, 41208, 983713, 41168, 8178, + 74859, 3367, 92334, 42510, 78641, 78636, 6804, 70475, 1947, 72770, 0, + 92681, 42759, 11068, 1705, 9331, 0, 74798, 9181, 65359, 72722, 8017, + 119831, 65096, 66720, 68223, 43475, 917548, 4909, 12126, 127540, 101015, + 4904, 92961, 43503, 1365, 9253, 42757, 43436, 7462, 127772, 0, 0, 83173, + 66845, 64415, 120500, 83172, 5398, 125035, 127386, 93953, 127362, 983782, + 119015, 83171, 127007, 9476, 983066, 120695, 12763, 100523, 3629, 120844, + 13005, 11181, 3628, 119834, 0, 92502, 3469, 42107, 42116, 917578, 64809, + 2928, 4905, 9853, 851, 9040, 120372, 64665, 43086, 9114, 43870, 42583, + 9315, 4822, 4906, 3852, 2847, 119821, 3236, 11317, 1251, 7777, 41852, + 11410, 10964, 0, 43222, 12646, 120269, 10259, 9865, 65821, 75046, 6018, + 68293, 125010, 12276, 119110, 68372, 128255, 92259, 71893, 119813, + 119828, 10467, 983814, 2443, 10918, 78217, 77947, 1001, 9241, 1927, 0, + 124942, 73987, 127882, 71895, 93012, 7992, 77943, 43939, 12867, 128649, + 8260, 77945, 7519, 11505, 12274, 8904, 518, 65857, 128361, 128674, 13204, + 4387, 857, 121252, 65369, 0, 92336, 43125, 11842, 0, 71072, 121462, 0, + 5136, 1968, 128906, 126627, 1337, 64967, 1629, 0, 796, 66506, 128442, + 74123, 12877, 120649, 42314, 43388, 43826, 43944, 6120, 478, 65151, + 68128, 119044, 43082, 6016, 0, 42284, 71894, 4276, 1206, 3619, 41638, + 69691, 3843, 12011, 8853, 3361, 83179, 490, 10715, 7578, 68384, 92754, + 65350, 10530, 12348, 8653, 68245, 42435, 6154, 9551, 65354, 78522, 784, + 42397, 334, 72732, 42416, 65356, 65273, 43937, 69666, 4442, 10364, 43935, + 778, 41626, 42455, 7989, 74063, 3227, 69907, 43932, 11102, 2915, 11502, + 41022, 41702, 10309, 127035, 75032, 120273, 6975, 128793, 5415, 12176, + 120653, 74193, 3462, 43940, 42629, 78691, 71175, 43942, 127256, 9759, + 127255, 70057, 121442, 8114, 78698, 78697, 74823, 78695, 8710, 42495, + 118956, 70189, 4051, 10460, 43364, 71206, 1356, 12161, 42713, 128857, + 127268, 1619, 9703, 43152, 42489, 42112, 64436, 1875, 10808, 42109, + 120284, 41860, 64862, 13305, 64907, 5289, 13144, 128658, 983224, 5575, + 9675, 71129, 5940, 226, 2649, 6336, 983279, 65593, 43236, 3382, 42449, + 6498, 1658, 11936, 78232, 100409, 11269, 10151, 73759, 43100, 69888, + 65508, 129411, 0, 121451, 8935, 78234, 129337, 120451, 0, 616, 74753, + 65178, 4684, 78701, 119653, 2236, 126551, 124992, 6048, 74460, 42110, 73965, 10870, 8557, 11054, 68664, 75051, 9681, 4475, 67429, 41142, 2100, - 125024, 120731, 6035, 73796, 7651, 6846, 64443, 983957, 983296, 917987, + 125024, 120731, 6035, 73796, 7651, 6846, 64443, 983957, 194941, 917987, 0, 118966, 74144, 40997, 68488, 10392, 10328, 40998, 43462, 74488, 71182, - 9800, 8979, 0, 13307, 41000, 0, 5114, 6487, 3386, 129094, 10344, 0, 5115, - 5394, 43246, 78243, 5113, 66505, 41200, 128582, 4425, 194669, 0, 0, - 43074, 73799, 129076, 78147, 5112, 12173, 78545, 128771, 66824, 65338, - 983676, 0, 119582, 4474, 128936, 43093, 43964, 1587, 0, 127372, 64475, - 119217, 1369, 983672, 9959, 7927, 43963, 4560, 120793, 67811, 92277, - 983621, 64948, 4430, 43961, 42601, 4514, 66434, 93955, 8194, 65462, - 10626, 10965, 120905, 8893, 983303, 12542, 0, 65341, 67703, 65829, 7925, - 119822, 10475, 113825, 127011, 1352, 11069, 7707, 127560, 126486, 65279, - 127102, 68207, 74956, 7099, 6040, 67681, 10071, 78554, 9336, 43750, - 121074, 8899, 7798, 64474, 64259, 69873, 65188, 7820, 43018, 127082, - 128898, 7746, 1492, 78551, 10884, 75075, 66866, 5127, 11285, 42501, 5495, - 4273, 43095, 41426, 10849, 5730, 2999, 6342, 68636, 74304, 371, 64373, - 6023, 169, 5497, 11708, 75028, 128603, 6323, 129065, 8224, 128417, 8938, - 6043, 12738, 120671, 983076, 5321, 68645, 194798, 120251, 2589, 74332, - 1689, 7802, 4683, 74318, 42704, 92940, 11905, 983615, 0, 128516, 128163, - 74513, 6049, 0, 4027, 834, 118962, 1803, 983822, 1503, 78336, 127173, - 71312, 5731, 1381, 2387, 126610, 70808, 8289, 64525, 65817, 2881, 43142, - 0, 9601, 2879, 9668, 9766, 0, 5729, 129110, 71230, 6036, 64881, 4026, - 9361, 127091, 2887, 70389, 3526, 6298, 119851, 77897, 120095, 78519, - 118964, 8572, 6021, 77896, 128288, 71174, 43155, 0, 71197, 3146, 10959, - 9483, 83219, 77893, 10981, 166, 917841, 8635, 917840, 10623, 408, 119058, - 127507, 13298, 127253, 7426, 41641, 12717, 983795, 7607, 10639, 43396, - 129300, 119089, 41643, 74134, 983054, 8713, 41640, 10221, 41645, 66293, - 6645, 646, 66726, 66711, 42129, 68255, 77901, 3472, 8697, 0, 120936, - 121069, 0, 118859, 0, 5809, 1950, 119356, 92432, 68339, 128943, 42136, - 121440, 0, 0, 0, 3247, 92402, 65017, 128794, 68428, 66668, 0, 121112, - 10983, 0, 128787, 0, 41567, 119852, 0, 0, 78446, 119853, 127922, 0, 8285, - 126516, 4509, 121043, 66471, 12216, 128806, 40988, 83221, 74809, 41727, - 0, 42848, 2396, 128083, 194892, 74018, 917538, 64940, 7027, 3886, 0, + 9800, 8979, 119156, 13307, 41000, 0, 5114, 6487, 3386, 70730, 10344, + 125032, 5115, 5394, 43246, 78243, 5113, 66505, 41200, 128582, 4425, + 194669, 100405, 0, 43074, 73799, 129076, 78147, 5112, 12173, 3446, + 128771, 66824, 65338, 128969, 0, 119582, 4474, 128936, 43093, 6282, 1587, + 0, 100554, 64475, 119217, 1369, 983672, 9959, 7927, 43963, 4560, 66910, + 67811, 92277, 120614, 64948, 4430, 43961, 42601, 4514, 66434, 93955, + 8194, 65462, 10626, 10965, 120905, 8893, 983303, 12542, 194857, 65341, + 67703, 65829, 7925, 119822, 10475, 113825, 127011, 1352, 11069, 7707, + 127560, 126486, 65279, 100407, 68207, 74956, 7099, 6040, 67681, 10071, + 78554, 9336, 43750, 121074, 8899, 7798, 64474, 64259, 69873, 65188, 7820, + 43018, 100410, 128898, 7746, 1492, 78551, 10884, 75075, 66866, 5127, + 11285, 42501, 5495, 4273, 43095, 41426, 10849, 5730, 2999, 6342, 68636, + 74304, 371, 64373, 6023, 169, 5497, 11708, 75028, 128603, 6323, 129065, + 8224, 128417, 8938, 6043, 12738, 120671, 983076, 5321, 68645, 6553, + 120251, 2589, 74332, 1689, 7802, 4683, 74318, 42704, 92940, 11905, + 983615, 0, 128516, 127017, 74513, 6049, 128239, 4027, 834, 118962, 1803, + 128120, 1503, 72769, 127173, 71312, 5731, 1381, 2387, 126610, 70808, + 8289, 64525, 65817, 2881, 43142, 0, 9601, 2879, 9668, 9766, 0, 5729, + 129110, 71230, 6036, 64881, 4026, 9361, 127091, 2887, 70389, 3526, 6298, + 119851, 77897, 120095, 78519, 118964, 8572, 6021, 77896, 128288, 71174, + 43155, 983816, 71197, 3146, 10959, 9483, 83219, 77893, 10981, 166, + 917841, 8635, 128714, 10623, 408, 100480, 127507, 13298, 126518, 7426, + 41641, 12717, 120658, 7607, 10639, 43396, 129300, 119053, 41643, 74134, + 983054, 8713, 41640, 10221, 9852, 66293, 6645, 646, 66726, 66711, 42129, + 68255, 77901, 3472, 8697, 0, 120936, 121069, 129168, 118859, 125203, + 5809, 1950, 119356, 92432, 68339, 128943, 42136, 121440, 0, 0, 0, 3247, + 92402, 65017, 128794, 68428, 66668, 194884, 121112, 10983, 917767, + 128700, 0, 41567, 119852, 0, 0, 78446, 119853, 127907, 0, 8285, 126516, + 4509, 121043, 66471, 12216, 128806, 40988, 83221, 74809, 41727, 917825, + 42848, 2396, 128083, 194892, 74018, 917538, 64940, 7027, 3886, 983259, 42457, 92888, 83299, 996, 68123, 94058, 4249, 92410, 69650, 11707, 8222, - 73825, 7939, 71213, 92460, 127801, 121408, 128359, 8534, 69853, 40983, 0, - 121421, 0, 7201, 12561, 120866, 42371, 12558, 1540, 917549, 10052, 40982, - 119841, 0, 1488, 71177, 0, 194831, 917559, 128401, 0, 1563, 128034, 9619, - 120840, 917905, 120954, 127872, 71363, 3560, 7797, 6070, 10006, 128922, - 2922, 6082, 70147, 65009, 983942, 12567, 66712, 0, 41412, 128131, 119591, - 3607, 9200, 10046, 9612, 42153, 8218, 9485, 0, 2032, 78354, 83462, - 119131, 0, 0, 67826, 43085, 6057, 508, 93968, 92989, 67968, 0, 92198, 0, - 128831, 638, 6083, 119072, 124950, 0, 2305, 78348, 68096, 917772, 6056, - 6659, 67969, 983290, 6085, 0, 0, 3915, 41634, 0, 41639, 63912, 11941, - 983783, 4028, 1787, 42180, 43096, 43753, 3249, 1768, 93982, 12328, 501, - 93985, 10601, 0, 583, 0, 41977, 0, 66004, 66416, 6505, 74010, 983250, - 13064, 55267, 119113, 6500, 5526, 65049, 0, 12990, 0, 92376, 12745, 9678, - 121108, 120587, 9869, 83150, 1771, 128965, 8936, 92964, 0, 4208, 78341, - 78567, 78342, 67742, 983208, 74101, 128605, 11762, 0, 70096, 6835, 68010, - 66475, 120260, 5027, 78172, 128878, 119830, 5069, 73736, 5028, 9897, - 92774, 73739, 5026, 983255, 68639, 6331, 10079, 8931, 0, 1415, 8866, - 41901, 74790, 78138, 119361, 983564, 43106, 5029, 65309, 1580, 3598, - 68424, 41070, 77903, 7658, 3440, 78215, 1562, 128656, 127175, 119358, - 1716, 983679, 10600, 78558, 620, 41001, 6028, 70445, 42892, 0, 71116, - 5024, 74945, 41003, 68137, 5025, 69892, 983209, 75039, 118885, 127956, + 73825, 7939, 71213, 92460, 72747, 67131, 128359, 8534, 69853, 40983, 0, + 121421, 0, 7201, 12561, 120866, 42371, 11844, 1540, 194827, 10052, 40982, + 119841, 0, 1488, 71177, 0, 194831, 917559, 128401, 194920, 1563, 128034, + 9619, 120840, 129416, 120954, 121460, 71363, 3560, 7797, 6070, 10006, + 128922, 2922, 6082, 70147, 65009, 983942, 12567, 66712, 0, 41412, 78651, + 119591, 3607, 9200, 10046, 9612, 42153, 8218, 9485, 66764, 2032, 78354, + 83462, 119131, 0, 0, 67826, 43085, 6057, 508, 93968, 92989, 67968, + 917941, 92198, 0, 128831, 638, 6083, 119072, 124950, 70144, 2305, 78348, + 68096, 917772, 6056, 6659, 67969, 983290, 6085, 0, 0, 3915, 41634, + 128227, 41639, 63912, 11941, 983783, 4028, 1787, 42180, 43096, 43753, + 3249, 1768, 93982, 12328, 501, 93985, 10601, 983294, 583, 119352, 41977, + 0, 66004, 66416, 6505, 74010, 917833, 13064, 55267, 119113, 6500, 5526, + 65049, 128028, 12990, 983901, 92376, 12745, 9678, 121108, 120587, 9869, + 83150, 1771, 128965, 8936, 92964, 125273, 4208, 78341, 78567, 78342, + 67742, 983208, 74101, 128605, 11762, 129317, 70096, 6835, 68010, 66475, + 120260, 5027, 78172, 128878, 119830, 5069, 73736, 5028, 9897, 92774, + 73739, 5026, 983255, 68639, 6331, 10079, 8931, 0, 1415, 8866, 41901, + 74790, 78138, 119361, 983564, 43106, 5029, 65309, 1580, 3598, 68424, + 41070, 77903, 7658, 3440, 78215, 1562, 128656, 127175, 119358, 1716, + 983679, 10600, 78558, 620, 41001, 6028, 70445, 42892, 983313, 71116, + 5024, 74945, 41003, 68137, 5025, 7297, 917824, 75039, 118885, 127956, 65557, 0, 74541, 128924, 11599, 128209, 11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, 70273, 11569, 65275, 8906, 43945, 5755, 2636, 71203, 10815, 11619, 2301, 41540, 7815, 11616, 6979, 12080, 7721, 11604, - 7869, 1592, 0, 42152, 78498, 41048, 917763, 829, 0, 92406, 19950, 66886, - 64131, 6616, 0, 118875, 10953, 391, 0, 69785, 482, 42296, 11588, 0, - 43606, 71185, 68397, 66370, 74282, 42335, 69786, 72421, 82998, 7538, - 5315, 83367, 42491, 92901, 42061, 128002, 4576, 0, 68417, 43809, 4277, 0, - 3563, 64472, 42338, 368, 42058, 3960, 11043, 11337, 78209, 120244, 63989, - 3958, 12132, 1849, 0, 9921, 42451, 4253, 41147, 42064, 11959, 42404, - 41160, 121481, 3618, 78338, 194924, 43300, 5156, 92629, 70350, 929, 6827, - 42035, 42437, 1555, 0, 8691, 66435, 2215, 41662, 94010, 119262, 0, - 128824, 93952, 4578, 64513, 41664, 983734, 42578, 71049, 41661, 78351, - 43267, 9356, 0, 194880, 983401, 1286, 10166, 983117, 0, 64707, 128925, - 42476, 7730, 11156, 128522, 42483, 129083, 74940, 42324, 42291, 10020, - 43359, 0, 6641, 525, 41627, 917923, 8763, 128304, 41628, 533, 11931, - 65225, 8321, 42504, 42581, 0, 6915, 42310, 4377, 8559, 128321, 8587, - 121318, 13193, 64350, 11666, 8679, 41924, 1576, 7735, 92398, 0, 73840, - 83153, 11374, 78043, 10889, 43461, 7757, 42462, 120226, 10029, 66493, - 2718, 4168, 43904, 13308, 120112, 0, 1179, 4440, 43902, 77948, 363, - 11015, 43903, 77944, 43857, 83049, 66692, 120826, 0, 66492, 6593, 64625, - 41963, 92177, 119329, 0, 10013, 64434, 75010, 127095, 9492, 11782, 64382, - 12833, 77830, 0, 1297, 41630, 630, 120960, 983923, 120774, 70165, 1043, - 43652, 66223, 10090, 0, 124945, 313, 121483, 41881, 194658, 42311, 7445, - 43906, 5750, 10759, 9419, 55222, 9405, 11268, 42919, 9398, 8526, 9399, - 9422, 43894, 66495, 69990, 983885, 92990, 41718, 10707, 1603, 983703, - 119003, 0, 631, 77952, 69703, 13161, 65272, 71067, 10546, 74210, 78101, - 11600, 77961, 2797, 43924, 42427, 306, 714, 3058, 42381, 77962, 127080, - 12351, 42395, 0, 11607, 127528, 11198, 66821, 77967, 9157, 73765, 66364, - 42433, 77964, 7603, 12803, 180, 42141, 0, 120612, 66494, 12674, 8244, - 362, 92439, 43890, 8037, 43777, 11535, 126539, 43893, 5185, 7165, 5521, - 10334, 2093, 71329, 10302, 125131, 10104, 1027, 5181, 128435, 5117, - 10523, 1446, 42320, 6845, 991, 5189, 42472, 41647, 120105, 1722, 5581, - 42898, 3405, 0, 194644, 5523, 43915, 42620, 92447, 74943, 9549, 0, 10549, - 43923, 9661, 42933, 74884, 77910, 78068, 43921, 0, 71184, 983070, 41991, - 983893, 0, 7630, 9846, 7684, 10350, 128453, 1174, 77981, 42733, 77978, - 77980, 66485, 77977, 42277, 77974, 42456, 43909, 74438, 12330, 128272, 0, - 42417, 42383, 66630, 41344, 6293, 0, 66252, 43908, 74443, 127894, 10209, - 8313, 4195, 74435, 1316, 66690, 75072, 6332, 64894, 983156, 65871, 67250, - 1736, 983684, 3901, 12228, 120151, 65200, 3383, 10446, 78241, 693, 9130, - 314, 64149, 42420, 11949, 127200, 120152, 11026, 120516, 5332, 6940, - 64154, 12635, 124980, 42706, 1751, 273, 8165, 13166, 83307, 78840, 71368, - 12824, 43911, 4528, 5320, 6301, 43662, 6133, 9339, 9463, 42346, 10922, - 64560, 3757, 0, 0, 74302, 65869, 73760, 2569, 74976, 2326, 65740, 2565, - 42459, 7596, 7921, 983868, 73862, 127981, 41848, 2567, 66006, 92622, - 4044, 92646, 43953, 12233, 983871, 1023, 474, 194940, 119818, 0, 0, + 7869, 1592, 0, 42152, 78498, 41048, 126466, 829, 0, 92406, 19950, 66886, + 64131, 6616, 120796, 118875, 10953, 391, 983103, 69785, 482, 42296, + 11588, 128591, 43606, 71185, 68397, 66370, 74282, 42335, 69786, 12050, + 82998, 7538, 5315, 83367, 42491, 92901, 42061, 128002, 4576, 0, 68417, + 43809, 4277, 0, 3563, 64472, 42338, 368, 42058, 3960, 11043, 11337, + 78209, 120244, 63989, 3958, 12132, 1849, 127338, 9921, 42451, 4253, + 41147, 42064, 11959, 42404, 41160, 121481, 3618, 78338, 93956, 43300, + 5156, 92629, 70350, 929, 6827, 42035, 42437, 1555, 67847, 8691, 66435, + 2215, 41662, 94010, 119262, 0, 128824, 93952, 4578, 64513, 41664, 983734, + 42578, 71049, 41661, 78351, 43267, 9356, 0, 194880, 983401, 1286, 10166, + 983117, 0, 64707, 128925, 42476, 7730, 11156, 128522, 42483, 129083, + 74940, 42324, 42291, 10020, 43359, 72827, 6641, 525, 41627, 917923, 8763, + 128304, 41628, 533, 11931, 65225, 8321, 42504, 42581, 0, 6915, 42310, + 4377, 8559, 128321, 8587, 121318, 13193, 64350, 11666, 8679, 41924, 1576, + 7735, 92398, 0, 73840, 83153, 11374, 78043, 10889, 43461, 7757, 42462, + 120226, 10029, 66493, 2718, 4168, 43904, 13308, 120112, 0, 1179, 4440, + 43902, 77948, 363, 11015, 43903, 77944, 43857, 83049, 66692, 120826, 0, + 66492, 6593, 64625, 41963, 92177, 119329, 113794, 10013, 64434, 75010, + 127095, 9492, 11782, 9212, 12833, 77830, 70692, 1297, 41630, 630, 120960, + 983923, 120774, 70165, 1043, 43652, 66223, 10090, 125249, 124945, 313, + 121483, 41881, 194575, 42311, 7445, 43906, 5750, 10759, 9419, 55222, + 9405, 11268, 42919, 9398, 8526, 9399, 9422, 43894, 66495, 69990, 983885, + 92990, 41718, 10707, 1603, 983703, 119003, 101061, 631, 77952, 69703, + 13161, 65272, 71067, 10546, 74210, 78101, 11600, 77961, 2797, 43924, + 42427, 306, 714, 3058, 42381, 77962, 127080, 12351, 42395, 0, 11607, + 127528, 11198, 66821, 77967, 9157, 73765, 66364, 42433, 77964, 7603, + 12803, 180, 42141, 0, 120612, 66494, 12674, 8244, 362, 92439, 43890, + 8037, 43777, 11535, 126539, 43893, 5185, 7165, 5521, 10334, 2093, 71329, + 10302, 125131, 10104, 1027, 5181, 128435, 5117, 10523, 1446, 42320, 6845, + 991, 5189, 42472, 41647, 120105, 1722, 5581, 42898, 3405, 0, 194644, + 5523, 43915, 42620, 92447, 74943, 9549, 0, 10549, 43923, 9661, 42933, + 74884, 77910, 78068, 43921, 0, 71184, 983070, 41991, 129369, 0, 7630, + 9846, 7684, 10350, 128453, 1174, 77981, 42733, 77978, 77980, 66485, + 77977, 42277, 77974, 42456, 43909, 74438, 12330, 128272, 0, 42417, 42383, + 66630, 3407, 6293, 0, 66252, 43908, 74443, 127894, 10209, 8313, 4195, + 74435, 1316, 66690, 75072, 6332, 64894, 983156, 65871, 67250, 1736, + 121006, 3901, 12228, 120151, 65200, 3383, 10446, 78241, 693, 9130, 314, + 64149, 42420, 11949, 127200, 120152, 11026, 120516, 5332, 6940, 64154, + 12635, 124980, 42706, 1751, 273, 8165, 13166, 83307, 78840, 71368, 12824, + 43911, 4528, 5320, 6301, 43662, 6133, 9339, 9463, 42346, 10922, 64560, + 3757, 0, 94059, 74302, 65869, 73760, 2569, 74976, 2326, 65740, 2565, + 42459, 7596, 7921, 126567, 73862, 127981, 41848, 2567, 66006, 92622, + 4044, 92646, 43953, 12233, 113814, 1023, 474, 125272, 119818, 983744, 0, 42487, 65556, 121168, 127866, 42295, 128203, 121474, 71322, 92518, 2222, - 66499, 0, 5417, 12275, 10895, 0, 274, 0, 1858, 983455, 0, 55251, 10118, - 3133, 127771, 71857, 121201, 9610, 8068, 8197, 917545, 699, 0, 41665, - 5868, 128710, 92695, 42182, 7581, 19940, 43668, 41667, 128057, 0, 1923, - 65583, 65802, 93970, 64597, 43444, 78129, 68751, 0, 6464, 7036, 2996, - 1937, 983751, 68481, 41835, 4047, 41842, 0, 64107, 77965, 119837, 11017, - 120601, 0, 293, 77966, 92169, 64791, 41827, 42466, 43422, 10579, 8560, - 71350, 65413, 77963, 4803, 12964, 1739, 1941, 3900, 128967, 1713, 77969, - 121292, 73957, 11407, 42441, 41971, 6297, 120098, 64105, 120565, 42481, - 11716, 66473, 7179, 42289, 125095, 64103, 969, 0, 9352, 71481, 6165, - 64100, 917819, 6632, 73861, 42402, 74327, 7806, 113762, 8914, 66908, - 124954, 3183, 1435, 64876, 2969, 6046, 64441, 6208, 67849, 5746, 66408, - 0, 64416, 42422, 83506, 983046, 7082, 73775, 338, 5059, 121369, 83524, - 42328, 10767, 128862, 8115, 83454, 74758, 0, 8227, 2073, 1218, 917790, - 983230, 65848, 92884, 83517, 69863, 128328, 126987, 4486, 128082, 917796, - 0, 10925, 0, 83515, 83507, 124952, 42309, 10257, 65191, 10273, 7668, - 10305, 42461, 74882, 42349, 8832, 78051, 64127, 10644, 42662, 78828, - 42278, 74451, 126988, 69874, 7794, 119214, 42429, 6377, 42316, 119026, - 3669, 3968, 42468, 71319, 69658, 0, 65402, 119581, 194973, 128747, 64933, - 194627, 41960, 6699, 42903, 128755, 125013, 6823, 42391, 1588, 43502, - 8409, 78223, 19967, 65398, 787, 71315, 128335, 127744, 6115, 2078, 41654, - 42480, 917949, 92650, 41655, 65401, 43975, 72427, 0, 113816, 644, 65500, - 41657, 10778, 3659, 9533, 184, 1553, 13107, 65484, 69648, 10502, 66296, - 0, 0, 41554, 0, 8220, 128432, 41557, 0, 128938, 11070, 119221, 5157, - 4020, 73858, 41555, 9514, 64818, 65103, 64641, 64303, 78131, 7520, 73888, - 74377, 11029, 66651, 983068, 128492, 118930, 64527, 121395, 7877, 12723, - 983798, 68776, 120096, 74602, 9955, 119557, 4055, 42817, 0, 65212, 11715, - 12190, 12319, 78630, 0, 78631, 9502, 65427, 125048, 65424, 12607, 120966, - 9734, 65425, 0, 121431, 127357, 74890, 78836, 10112, 10827, 194635, 9866, - 74527, 66675, 118867, 8625, 64346, 11290, 10477, 67738, 8636, 983927, - 8315, 65444, 983793, 195011, 74595, 6152, 78820, 73947, 6629, 125056, - 120171, 0, 74589, 43993, 128346, 69790, 64435, 64955, 43690, 11046, - 11490, 42730, 4485, 71126, 128194, 64926, 0, 983133, 43830, 5869, 12437, - 42728, 0, 7040, 3588, 0, 12825, 121158, 0, 12725, 74092, 127106, 78634, + 66499, 129336, 5417, 12275, 10895, 0, 274, 983226, 1858, 983455, 0, + 55251, 10118, 3133, 126498, 71857, 121201, 9610, 8068, 8197, 917545, 699, + 0, 41665, 5868, 128710, 92695, 42182, 7581, 19940, 43668, 41667, 128057, + 0, 1923, 65583, 65802, 93970, 64597, 43444, 78129, 68751, 917836, 6464, + 7036, 2996, 1937, 127050, 68481, 41835, 4047, 41842, 0, 64107, 77965, + 119837, 11017, 120601, 983169, 293, 77966, 92169, 64791, 41827, 42466, + 43422, 10579, 8560, 71350, 65413, 77963, 4803, 12964, 1739, 1941, 3900, + 128967, 1713, 77969, 94017, 73957, 11407, 42441, 41971, 6297, 120098, + 64105, 120565, 42481, 11716, 66473, 7179, 42289, 125095, 64103, 969, 0, + 9352, 71481, 6165, 64100, 917819, 6632, 72828, 42402, 74327, 7806, + 113762, 8914, 66908, 124954, 3183, 1435, 64876, 2969, 6046, 64441, 6208, + 67849, 5746, 66408, 127402, 64416, 42422, 83506, 983046, 7082, 73775, + 338, 5059, 121369, 83524, 42328, 10767, 128862, 8115, 83454, 74758, 0, + 8227, 2073, 1218, 917790, 983230, 65848, 92884, 83517, 69863, 128328, + 126987, 4486, 119973, 917796, 0, 10925, 0, 83515, 83507, 124952, 42309, + 10257, 65191, 10273, 7668, 10305, 42461, 74882, 42349, 8832, 78051, + 64127, 10644, 42662, 78828, 42278, 74451, 126988, 69874, 7794, 119214, + 42429, 6377, 42316, 119026, 3669, 3968, 42468, 71319, 69658, 128170, + 65402, 119581, 194973, 128747, 64933, 194627, 41960, 6699, 42903, 128755, + 125013, 6823, 42391, 1588, 43502, 8409, 78223, 19967, 65398, 787, 71315, + 121145, 127744, 6115, 2078, 41654, 42480, 129031, 92650, 41655, 65401, + 43975, 72427, 0, 113816, 644, 65500, 41657, 10778, 3659, 9533, 184, 1553, + 13107, 65484, 69648, 10502, 66296, 0, 0, 41554, 0, 8220, 128432, 41557, + 983882, 128938, 11070, 119221, 5157, 4020, 73858, 41555, 9514, 64818, + 65103, 64641, 64303, 78131, 7520, 73888, 74377, 11029, 66651, 127346, + 128492, 118930, 64527, 121395, 7877, 12723, 983798, 68776, 120096, 73954, + 9955, 119557, 4055, 42817, 0, 65212, 11715, 12190, 12319, 78630, 71270, + 78631, 9502, 65427, 125048, 65424, 12607, 120966, 9734, 65425, 92207, + 78834, 127357, 74890, 72822, 3448, 10827, 194635, 9866, 74527, 66675, + 118867, 8625, 64346, 11290, 10477, 67738, 8636, 983927, 8315, 65444, + 983793, 195011, 74595, 6152, 78820, 73947, 6629, 125056, 120171, 0, + 74589, 43993, 128346, 69790, 64435, 64955, 43690, 11046, 11490, 42730, + 4485, 71126, 126588, 64926, 120168, 983133, 43830, 5869, 12437, 42728, 0, + 7040, 3588, 63797, 12825, 121158, 72864, 12725, 74092, 127106, 78634, 223, 78635, 69675, 120119, 42444, 128449, 64499, 65245, 129104, 1171, 128802, 69717, 120113, 1805, 8772, 43820, 0, 9930, 65247, 78619, 74954, 2338, 120032, 118853, 0, 42676, 0, 64800, 13092, 11185, 68126, 1213, 128419, 64075, 797, 64074, 8734, 4212, 83005, 64387, 4115, 71331, 5005, 64070, 64073, 10679, 83000, 77954, 9402, 64276, 426, 83358, 83010, 8251, - 10136, 65436, 0, 2120, 43302, 1224, 0, 65576, 70795, 10701, 1764, 3101, - 127815, 12858, 120159, 120101, 11373, 6378, 71093, 120103, 8663, 9312, - 41644, 4539, 2129, 70785, 9222, 121479, 118907, 4259, 9092, 74567, 41961, - 128515, 12724, 66357, 42331, 64935, 0, 0, 1293, 7947, 2132, 983767, - 71858, 72440, 2454, 42717, 3613, 128837, 71117, 0, 65888, 8816, 10978, - 10840, 0, 10668, 113723, 43087, 12595, 120304, 983114, 8822, 0, 1157, - 64903, 8638, 127265, 917886, 127905, 0, 69848, 8235, 120316, 4405, 10086, - 120247, 11128, 69216, 121065, 65430, 71321, 6079, 6817, 10764, 120314, - 64291, 120315, 998, 120312, 11062, 1317, 64327, 1558, 194572, 1991, 7882, - 42254, 128954, 41700, 530, 0, 10428, 119335, 12002, 119336, 5742, 43076, - 4692, 64630, 41823, 4007, 5004, 74033, 7896, 751, 6595, 6596, 120325, - 66373, 983249, 128746, 64908, 92691, 6311, 93019, 12004, 119192, 12049, - 43108, 120326, 71083, 41705, 92188, 6598, 121298, 6599, 66822, 93031, - 42148, 118825, 66027, 121055, 6597, 9412, 8340, 11824, 64745, 2281, - 69904, 128495, 1988, 5407, 67865, 2430, 41678, 93059, 83114, 2336, - 983903, 0, 67169, 120442, 127092, 1921, 10947, 19927, 70390, 65406, - 983464, 19913, 4284, 13217, 0, 43789, 12841, 9229, 10956, 42285, 41674, - 19964, 41679, 65084, 3521, 124957, 5774, 8325, 69864, 65403, 983089, - 1854, 10794, 93054, 67660, 69846, 194765, 78359, 5280, 0, 4344, 12905, - 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, 12934, - 41682, 65432, 41693, 0, 6071, 65434, 127467, 4804, 4053, 0, 127469, - 194653, 41696, 467, 69823, 127463, 69797, 121403, 121294, 8421, 127472, - 69682, 43705, 502, 75029, 65431, 119056, 69954, 12043, 1303, 316, 7364, - 2029, 2136, 119246, 11533, 64365, 43480, 92639, 4860, 70372, 127877, - 42488, 70339, 9583, 128849, 5546, 8019, 73856, 983840, 124960, 120839, - 5544, 2355, 12150, 65725, 5543, 75034, 63751, 12137, 5548, 77985, 0, - 65727, 68388, 65726, 6077, 128352, 65452, 0, 11301, 11214, 65952, 78010, - 9874, 78007, 983115, 1319, 3050, 65410, 67399, 92606, 78016, 78017, - 42830, 43996, 66716, 83050, 4691, 92242, 9345, 621, 83512, 128222, 0, - 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, 10545, 119118, 10887, - 3786, 65409, 8894, 43179, 71042, 7923, 3716, 92363, 9996, 8508, 127794, - 7012, 8195, 127834, 9566, 0, 3722, 983374, 41707, 8493, 545, 9575, 41379, - 10050, 12718, 69854, 8859, 6820, 74345, 65110, 120740, 128978, 55282, - 9119, 2787, 7920, 70091, 4021, 2012, 7985, 0, 119663, 917792, 0, 78021, - 78022, 410, 78020, 1802, 78018, 74107, 74895, 41659, 41671, 1827, 0, - 64396, 10126, 12116, 41673, 120370, 11422, 71846, 120373, 3860, 120367, - 68412, 41345, 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, - 2104, 64858, 361, 120357, 845, 92174, 41560, 11970, 4562, 128473, 2926, - 68495, 4569, 74130, 128659, 43487, 194630, 611, 74129, 64871, 118891, - 65629, 0, 194858, 74854, 0, 70466, 67392, 66385, 71439, 6291, 0, 68487, - 41669, 7094, 121051, 0, 120999, 74054, 127754, 128917, 0, 839, 121315, - 7695, 8769, 65246, 4829, 67756, 4859, 64467, 0, 83525, 118998, 7206, - 119636, 6647, 43986, 83518, 69766, 194664, 64764, 4210, 128300, 127936, - 804, 83520, 0, 12298, 70344, 66653, 126983, 64924, 10091, 67200, 9468, + 10136, 65436, 100862, 2120, 43302, 1224, 0, 65576, 70795, 10701, 1764, + 3101, 125192, 12858, 74767, 120101, 11373, 6378, 71093, 120103, 8663, + 9312, 41644, 4539, 2129, 70785, 9222, 121479, 118907, 4259, 9092, 74567, + 41961, 121361, 12724, 66357, 42331, 64935, 72867, 120582, 1293, 7947, + 2132, 983767, 71858, 72440, 2454, 42717, 3613, 128837, 71117, 0, 65888, + 8816, 10978, 10840, 0, 10668, 72826, 43087, 12595, 120304, 983114, 8822, + 0, 1157, 64903, 8638, 127265, 129106, 120669, 100399, 69848, 8235, + 120316, 4405, 10086, 120247, 11128, 69216, 121065, 65430, 71321, 6079, + 6817, 10764, 120314, 64291, 120315, 998, 120312, 11062, 1317, 64327, + 1558, 194572, 1991, 7882, 42254, 128954, 41700, 530, 0, 10428, 119335, + 12002, 119336, 5742, 43076, 4692, 64630, 41823, 4007, 5004, 74033, 7896, + 751, 6595, 6596, 120325, 66373, 129066, 128746, 64908, 92691, 6311, + 93019, 12004, 119192, 12049, 43108, 120326, 71083, 41705, 92188, 6598, + 121298, 6599, 66822, 93031, 42148, 118825, 66027, 121055, 6597, 9412, + 8340, 11824, 64745, 2281, 69904, 128495, 1988, 5407, 67865, 2430, 41678, + 93059, 83114, 2336, 983903, 0, 67169, 120442, 127092, 1921, 10947, 19927, + 70390, 65406, 983464, 19913, 4284, 13217, 0, 43789, 12841, 9229, 10956, + 42285, 41674, 19964, 41679, 65084, 3521, 124957, 5774, 8325, 69864, + 65403, 983089, 1854, 10794, 93054, 67660, 69846, 194765, 78359, 5280, 0, + 4344, 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, + 12934, 41682, 65432, 41693, 983434, 6071, 65434, 119008, 4804, 4053, + 120237, 127469, 194653, 41696, 467, 69823, 127463, 69797, 120043, 121294, + 8421, 127472, 69682, 43705, 502, 75029, 65431, 119056, 69954, 12043, + 1303, 316, 7364, 2029, 2136, 119246, 11533, 64365, 43480, 92639, 4860, + 70372, 127877, 42488, 70339, 9583, 128849, 5546, 8019, 73856, 128194, + 124960, 120839, 5544, 2355, 12150, 65725, 5543, 75034, 63751, 12137, + 5548, 77985, 983555, 10007, 68388, 65726, 6077, 128352, 65452, 100391, + 11301, 11214, 65952, 78010, 9874, 78007, 194732, 1319, 3050, 65410, + 67399, 92606, 78016, 78017, 42830, 43996, 66716, 83050, 4691, 92242, + 9345, 621, 83512, 128222, 122889, 65411, 917541, 41182, 73881, 65408, + 73899, 78024, 9474, 10545, 119118, 10887, 3786, 65409, 8894, 43179, + 71042, 7923, 3716, 92363, 9996, 8508, 127794, 7012, 8195, 127834, 9566, + 119867, 3722, 983374, 41707, 8493, 545, 9575, 41379, 10050, 12718, 69854, + 8859, 6820, 74345, 65110, 120740, 128978, 55282, 9119, 2787, 7920, 70091, + 4021, 2012, 7985, 78093, 119663, 917792, 983951, 78021, 78022, 410, + 78020, 1802, 78018, 74107, 74895, 41659, 41671, 1827, 0, 64396, 10126, + 12116, 41673, 68524, 11422, 71846, 120373, 3860, 120367, 68412, 41345, + 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, 2104, 64858, + 361, 120357, 845, 92174, 41560, 11970, 4562, 128473, 2926, 68495, 4569, + 74130, 128659, 43487, 194630, 611, 74129, 64871, 100909, 65629, 0, + 194858, 74854, 66750, 70466, 67392, 66385, 71439, 6291, 0, 68487, 41669, + 7094, 121051, 121408, 119041, 74054, 127754, 128917, 0, 839, 121315, + 7695, 8769, 65246, 4829, 67756, 4859, 64467, 983461, 83525, 118998, 7206, + 119636, 6647, 43986, 72738, 69766, 194664, 64764, 4210, 128300, 127936, + 804, 66746, 0, 12298, 70344, 66653, 126983, 64924, 10091, 67200, 9468, 67206, 67205, 67204, 67203, 92503, 12839, 64669, 92202, 71851, 1279, - 1425, 6224, 119229, 11049, 127123, 71480, 42649, 8482, 92440, 0, 5032, - 67209, 11940, 67207, 664, 120437, 5034, 92495, 70200, 127525, 42702, - 70194, 93061, 13294, 67873, 64869, 6032, 67218, 9115, 7430, 77837, 70191, - 120819, 68387, 120168, 73913, 120170, 41161, 5518, 4174, 10993, 41162, - 77836, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, 67741, - 128800, 524, 0, 74029, 788, 74027, 194667, 71881, 0, 1663, 10419, 42901, - 42636, 67211, 67210, 129147, 120656, 67215, 67214, 67213, 67212, 0, - 67897, 74039, 0, 0, 11395, 0, 119107, 43612, 64344, 194732, 0, 10855, - 5445, 9355, 67221, 65198, 7391, 8989, 221, 65686, 983874, 119238, 8010, - 7191, 4962, 69772, 8855, 74612, 70820, 64469, 92592, 10555, 67227, 43333, - 67225, 128483, 120427, 10451, 67229, 67653, 7245, 12443, 74405, 9947, - 120149, 78317, 3873, 8367, 77842, 120146, 43433, 43649, 11987, 83343, - 983581, 11010, 11164, 74059, 74062, 6217, 5896, 43846, 7682, 74049, 1462, - 10235, 0, 0, 983325, 43441, 127924, 127777, 42595, 126641, 74402, 118860, - 78661, 120419, 92497, 66287, 120420, 92378, 120549, 119082, 64295, - 120418, 0, 64765, 73923, 83210, 120662, 69920, 194702, 6216, 67230, - 10755, 9455, 11155, 8124, 127042, 9470, 6944, 121125, 0, 69680, 2828, 0, - 531, 42638, 194804, 917856, 120961, 43428, 8204, 3614, 2827, 9696, - 120365, 0, 8728, 4354, 10904, 78562, 19936, 7833, 120691, 120850, 42599, - 42597, 42709, 68829, 125012, 0, 8537, 127306, 0, 9354, 121244, 121348, - 41199, 10121, 2028, 74950, 120253, 69715, 128525, 3062, 0, 74447, 12608, - 983657, 66440, 7545, 9700, 11948, 92205, 120777, 120502, 41155, 68306, - 74071, 0, 983459, 12713, 127519, 70402, 0, 78772, 113770, 1734, 0, 78141, - 127040, 64594, 2456, 231, 68227, 74167, 542, 917981, 118786, 983859, - 194797, 1230, 125018, 121343, 3597, 4446, 10584, 74235, 92215, 4037, - 67737, 8352, 78436, 5687, 127018, 64515, 121378, 194801, 55265, 67846, - 78434, 9704, 0, 194573, 70080, 71338, 0, 8660, 126478, 0, 128569, 78773, - 74482, 4483, 1709, 69721, 9909, 6080, 194851, 120358, 1746, 1315, 8667, - 983101, 0, 13140, 65899, 10604, 0, 4480, 11266, 121114, 1226, 6930, - 67979, 195019, 6360, 10897, 41230, 605, 68302, 74785, 69875, 0, 121478, + 1425, 6224, 119229, 11049, 127123, 71480, 42649, 8482, 92440, 983710, + 5032, 67209, 11940, 67207, 664, 120437, 5034, 92495, 70200, 122901, + 42702, 70194, 93061, 13294, 67873, 64869, 6032, 67218, 9115, 7430, 77837, + 70191, 120819, 68387, 100645, 73913, 120170, 41161, 5518, 4174, 10993, + 41162, 77836, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, + 67741, 128800, 524, 128667, 74029, 788, 74027, 194667, 71881, 120370, + 1663, 10419, 42901, 42636, 67211, 67210, 129147, 120656, 67215, 67214, + 67213, 67212, 128828, 67897, 74039, 0, 0, 11395, 194904, 119107, 43612, + 64344, 129370, 0, 10855, 5445, 9355, 67221, 65198, 7391, 8989, 221, + 43673, 983874, 119238, 8010, 7191, 4962, 69772, 8855, 74612, 70820, + 64469, 92592, 10555, 67227, 43333, 67225, 128483, 120427, 10451, 67229, + 67653, 7245, 12443, 74405, 9947, 120149, 78317, 3873, 8367, 77842, + 120146, 43433, 43649, 11987, 83343, 983581, 11010, 11164, 74059, 74062, + 6217, 5896, 43846, 7682, 74049, 1462, 10235, 983918, 0, 983325, 43441, + 127924, 127777, 42595, 72804, 74402, 118860, 78661, 120419, 92497, 66287, + 120420, 92378, 120549, 119082, 64295, 120418, 0, 64765, 73923, 83210, + 120662, 69920, 125278, 6216, 67230, 10755, 9455, 11155, 8124, 127042, + 9470, 6944, 121125, 917982, 69680, 2828, 0, 531, 42638, 194804, 917856, + 120961, 43428, 8204, 3614, 2827, 9696, 120365, 0, 8728, 4354, 10904, + 78562, 19936, 7833, 120691, 120850, 42599, 42597, 42709, 68829, 125012, + 0, 8537, 127306, 983729, 9354, 121244, 121348, 41199, 10121, 2028, 74950, + 120253, 69715, 128525, 3062, 983663, 74447, 12608, 983657, 66440, 7545, + 9700, 11948, 92205, 120777, 120502, 41155, 68306, 74071, 128722, 92372, + 12713, 127519, 70402, 0, 78772, 113709, 1734, 0, 78141, 127040, 64594, + 2456, 231, 68227, 74167, 542, 120586, 100851, 983859, 194797, 1230, + 73845, 121343, 3597, 4446, 10584, 74235, 92215, 4037, 67737, 8352, 78436, + 5687, 127018, 64515, 121378, 194801, 55265, 67846, 78434, 9704, 983585, + 194573, 70080, 71338, 120575, 8660, 126478, 127010, 128467, 78773, 74482, + 4483, 1709, 69721, 9909, 6080, 128167, 120358, 1746, 1315, 8667, 983101, + 0, 13140, 65899, 10604, 118786, 4480, 11266, 121114, 1226, 6930, 67979, + 195019, 6360, 10897, 41230, 605, 68302, 74785, 69875, 120849, 121478, 41500, 0, 311, 11453, 6221, 10608, 64943, 67682, 10877, 118868, 64885, - 74272, 0, 194672, 128559, 120736, 74312, 345, 124933, 74456, 64606, 9917, - 0, 74855, 5037, 119912, 1776, 8422, 128935, 118814, 41508, 41201, 323, - 43328, 0, 42698, 1295, 194853, 4625, 77855, 4630, 13117, 83002, 128772, - 65123, 11293, 2668, 11288, 0, 42640, 65666, 2519, 92369, 65420, 92479, 0, - 4252, 5049, 42659, 119011, 706, 7754, 10854, 8738, 983949, 65419, 0, - 128496, 649, 65421, 0, 66702, 983721, 12670, 1013, 0, 64919, 705, 0, - 65422, 127803, 1183, 126519, 7017, 42852, 917826, 8157, 9736, 64503, - 65418, 129050, 983878, 74035, 194918, 11913, 73874, 6696, 120916, 8920, - 119298, 128426, 7962, 12211, 9837, 2051, 66227, 0, 4184, 119825, 128598, - 10177, 73777, 1857, 194657, 4626, 8464, 8472, 68844, 4629, 8499, 74627, - 78322, 4624, 7818, 118861, 128108, 0, 7805, 128754, 94007, 6935, 92292, - 78325, 78326, 78323, 43327, 43989, 119046, 8492, 8250, 8459, 0, 8497, - 8496, 83499, 74582, 75052, 78339, 9543, 67860, 78332, 77832, 65849, - 77831, 983961, 194649, 12451, 74376, 8684, 128301, 6102, 0, 5298, 917847, - 5294, 0, 83016, 68043, 195062, 9949, 83014, 43617, 119215, 0, 12073, 0, - 128646, 77863, 13108, 120617, 11439, 41468, 83012, 0, 5292, 55272, - 983883, 1939, 5302, 3970, 917877, 12455, 1793, 124982, 0, 75036, 6643, - 92477, 65263, 0, 78330, 41293, 78328, 65923, 78835, 13219, 9569, 129041, - 74383, 0, 74197, 129089, 5500, 8813, 0, 128612, 68860, 5322, 120944, - 78340, 43631, 5324, 66443, 3784, 41614, 65269, 6230, 78349, 78345, 13282, - 3360, 78344, 11523, 0, 92488, 9926, 7197, 128248, 68429, 42894, 41821, - 1249, 78360, 78361, 78356, 78358, 78353, 64899, 64763, 41149, 41807, - 43162, 41815, 41150, 128911, 10571, 10096, 67161, 67160, 67159, 6947, - 41152, 887, 9249, 6565, 78510, 41990, 78509, 41811, 67157, 93966, 6670, - 67175, 67174, 0, 43092, 43325, 67178, 10168, 67176, 9781, 68248, 9190, - 128497, 9666, 8269, 65944, 74005, 13019, 11670, 69860, 315, 12813, - 129132, 72409, 78256, 72408, 78352, 0, 75063, 0, 0, 1378, 9509, 194634, - 92996, 72407, 3066, 92220, 67847, 72406, 92355, 917890, 78365, 8787, - 67189, 194616, 41618, 194615, 78261, 127384, 0, 64652, 121222, 121012, 0, - 78366, 42088, 71040, 195061, 7176, 43756, 10137, 6121, 10995, 78259, - 71050, 8119, 64874, 71052, 78174, 128690, 128630, 74525, 0, 0, 12930, + 74272, 128076, 194672, 121202, 100652, 74312, 345, 124933, 74456, 64606, + 9917, 125244, 74855, 5037, 100998, 1776, 8422, 128935, 118814, 41508, + 41201, 323, 43328, 917849, 42698, 1295, 194853, 4625, 77855, 4630, 13117, + 83002, 128772, 65123, 11293, 2668, 11288, 0, 42640, 65666, 2519, 92369, + 65420, 92479, 127191, 4252, 5049, 42659, 119011, 706, 7754, 10854, 8738, + 129318, 65419, 0, 128496, 649, 65421, 122880, 66702, 983721, 12670, 1013, + 70707, 64919, 705, 72825, 65422, 127803, 1183, 126519, 7017, 42852, + 917826, 8157, 9736, 64503, 65418, 129050, 128090, 74035, 78836, 11913, + 73874, 6696, 120916, 8920, 119298, 128426, 7962, 12211, 9837, 2051, + 66227, 983272, 4184, 119825, 128598, 10177, 73777, 1857, 127773, 4626, + 8464, 8472, 68844, 4629, 8499, 74627, 78322, 4624, 7818, 118861, 128108, + 0, 7805, 128754, 94007, 6935, 92292, 78325, 78326, 78079, 43327, 43989, + 119046, 8492, 8250, 8459, 0, 8497, 8496, 83499, 74582, 70690, 78339, + 9543, 67860, 78332, 77832, 65849, 77831, 128615, 100412, 12451, 74376, + 8684, 100515, 6102, 128046, 5298, 128721, 5294, 83235, 83016, 68043, + 194899, 9949, 83014, 43617, 119215, 127030, 12073, 120736, 128017, 77863, + 13108, 71231, 2260, 41468, 83012, 0, 5292, 55272, 983883, 1939, 5302, + 3970, 129348, 12455, 1793, 124982, 0, 75036, 6643, 92477, 65263, 0, + 78330, 41293, 78328, 65923, 78835, 13219, 9569, 129041, 74383, 0, 74197, + 129089, 5500, 8813, 983414, 128612, 68860, 5322, 120944, 78340, 43631, + 5324, 66443, 3784, 41614, 65269, 6230, 78349, 78345, 13282, 3360, 78344, + 2231, 72726, 92488, 9926, 7197, 128248, 68429, 42894, 41821, 1249, 78360, + 78361, 78356, 78358, 78353, 64899, 64763, 41149, 41807, 43162, 41815, + 41150, 128911, 10571, 10096, 67161, 67160, 67159, 6947, 41152, 887, 9249, + 6565, 78510, 41990, 78509, 41811, 67157, 93966, 6670, 67175, 67174, 0, + 43092, 43325, 67178, 10168, 67176, 9781, 68248, 9190, 120981, 9666, 8269, + 65944, 74005, 13019, 11670, 69860, 315, 12813, 128556, 72409, 78256, + 72408, 78352, 92212, 75063, 72839, 0, 1378, 9509, 194634, 92996, 72407, + 3066, 92220, 2270, 72406, 92355, 917890, 78365, 8787, 67189, 72818, + 41618, 194615, 78261, 127384, 0, 64652, 121222, 72833, 125226, 78366, + 42088, 71040, 195061, 7176, 43756, 10137, 6121, 10995, 78259, 71050, + 8119, 64874, 71052, 43964, 128690, 128630, 74525, 72843, 100783, 12930, 1394, 74514, 128413, 74515, 983727, 67184, 2998, 9527, 67181, 65190, 12977, 42090, 67185, 983647, 119100, 41236, 92235, 42005, 42003, 41237, 5848, 67193, 67192, 3670, 67190, 67197, 67196, 67195, 7890, 128070, - 11298, 43315, 983315, 6229, 1593, 0, 125120, 619, 4635, 65080, 127158, + 11298, 43315, 77871, 6229, 1593, 0, 125120, 619, 4635, 65080, 127158, 12194, 4120, 65337, 65336, 128407, 11808, 67199, 67198, 9366, 42790, 42006, 119115, 65327, 65326, 65325, 10757, 1507, 42216, 65321, 65320, 43947, 65334, 43946, 65332, 65331, 42059, 65329, 42689, 92427, 9128, - 94045, 42073, 6785, 64590, 983830, 4371, 7196, 65318, 2035, 65316, 4106, - 65314, 65313, 42074, 127847, 41228, 120862, 65609, 41241, 7903, 41239, - 43533, 78459, 7189, 0, 0, 43941, 12357, 42802, 78450, 8487, 9131, 66292, - 4615, 12695, 127752, 0, 12175, 0, 64535, 0, 7809, 0, 121351, 562, 12169, - 6590, 69762, 66455, 64738, 3219, 68654, 121096, 128281, 1037, 128677, - 2025, 128263, 13098, 78442, 10637, 4568, 549, 1570, 43839, 2835, 83052, - 10624, 43623, 11072, 83045, 128523, 83046, 12606, 78433, 2825, 83048, - 10825, 8079, 2821, 41046, 92327, 7365, 83043, 120593, 13071, 121288, 452, - 41049, 42840, 6346, 2831, 5461, 74596, 11465, 5212, 917917, 64703, - 119191, 42308, 7181, 0, 41332, 0, 12333, 41047, 1668, 119849, 121150, - 128275, 1187, 983387, 42628, 78575, 82953, 71863, 82955, 3240, 128518, - 12151, 0, 11591, 41065, 5323, 8166, 0, 118932, 0, 66827, 1623, 65297, - 128856, 571, 0, 4918, 0, 5288, 127295, 1541, 65048, 1909, 8864, 0, 66402, - 10736, 92508, 11571, 7615, 70476, 92296, 4237, 92576, 1035, 65815, 68083, - 3567, 701, 65936, 3489, 120899, 70462, 70172, 11403, 0, 0, 82986, 3796, - 6800, 70472, 3994, 11421, 74611, 195076, 195078, 68036, 0, 0, 64857, - 83508, 2855, 74418, 66308, 41621, 68214, 83513, 127817, 10654, 82945, - 119226, 12164, 3246, 7906, 43972, 65847, 7182, 0, 13024, 66276, 74270, - 83069, 125090, 121115, 0, 1496, 747, 0, 942, 2378, 43136, 83031, 8466, - 83075, 9320, 8001, 1232, 8139, 11617, 74637, 0, 11409, 68373, 6382, - 126500, 64634, 92362, 70202, 11612, 93008, 67600, 2374, 94066, 8475, - 11609, 66313, 92568, 0, 5286, 119297, 83059, 983253, 64925, 120283, - 127204, 118982, 71905, 7705, 11942, 11305, 127203, 3309, 82979, 9206, - 82980, 113824, 6802, 70353, 41653, 1280, 1241, 7168, 12096, 0, 66615, - 42565, 41651, 0, 917627, 83042, 41650, 66507, 66470, 74472, 12914, 41491, - 43901, 94106, 6078, 9954, 78822, 1475, 119247, 9938, 6084, 917546, 41064, - 41062, 0, 113680, 3256, 10189, 42076, 43252, 78823, 68089, 8727, 120922, - 65875, 0, 0, 127762, 10562, 74215, 43065, 120906, 0, 3248, 74297, 3261, - 9015, 71351, 0, 3635, 64337, 92759, 125054, 0, 7195, 83346, 2007, 64431, - 195075, 0, 92197, 127090, 635, 0, 129082, 65613, 77909, 92420, 73997, - 128510, 121457, 43905, 7984, 8600, 74434, 127770, 4176, 70050, 2034, - 78423, 11154, 65891, 127038, 0, 318, 2038, 128544, 78596, 194602, 3649, - 13149, 42145, 42798, 3634, 120291, 71885, 67677, 120124, 7866, 75045, - 11402, 42146, 94032, 74238, 42664, 2849, 127034, 0, 7938, 12960, 1761, - 11812, 65379, 68386, 128185, 1159, 71183, 69729, 0, 120797, 7178, 120851, - 983836, 41680, 128469, 83098, 11534, 1514, 11668, 67891, 9313, 7015, - 128490, 67877, 194561, 12989, 66474, 9368, 12848, 1624, 43270, 0, 74278, - 10818, 83091, 9953, 194895, 78421, 1194, 3242, 9761, 9555, 8598, 120299, - 6169, 12871, 1551, 2798, 65176, 4958, 42752, 119025, 917924, 67875, - 120301, 3495, 66648, 125079, 83354, 68364, 120779, 4891, 0, 10641, 0, - 73746, 120945, 68352, 0, 73787, 128858, 127094, 7199, 11131, 0, 0, 0, - 983852, 126979, 42685, 42679, 193, 78789, 0, 0, 42667, 0, 5271, 68323, - 92517, 83356, 1362, 13297, 0, 71880, 0, 983333, 73789, 0, 6658, 4426, 0, - 66830, 983842, 83103, 7276, 42163, 5220, 0, 78621, 67822, 2416, 3310, - 42703, 83107, 379, 0, 43755, 70504, 43647, 3223, 65492, 1284, 194771, - 4549, 194738, 0, 71253, 70784, 10807, 9558, 93027, 0, 8515, 8688, 12866, - 65308, 3294, 83143, 8529, 128101, 43385, 7564, 0, 43329, 83148, 92458, - 73757, 66456, 42359, 128439, 2031, 983890, 7202, 128232, 12676, 42729, - 74777, 3215, 120982, 7710, 1610, 73801, 128807, 0, 65682, 0, 43917, - 65924, 9974, 228, 43922, 1501, 127994, 64395, 5179, 7200, 6225, 118927, - 42999, 1725, 65533, 8196, 7476, 74399, 0, 66868, 7152, 8502, 5762, 1967, - 7483, 43898, 0, 8104, 70128, 7474, 43914, 83080, 126507, 10414, 13001, - 8141, 983239, 42537, 1557, 43594, 128642, 6330, 6805, 8631, 2545, 42934, - 127166, 0, 74190, 128477, 70410, 983786, 42762, 194708, 42914, 1650, 262, - 1637, 128502, 7901, 3238, 83026, 41861, 0, 120211, 65158, 10860, 74959, - 43658, 7527, 83086, 43319, 6419, 0, 45, 0, 64588, 93989, 127753, 119810, - 7194, 5291, 0, 43666, 13129, 128684, 9084, 121039, 8737, 983165, 12881, - 75066, 12906, 9639, 7912, 2620, 983882, 3564, 0, 69978, 179, 43644, - 75049, 64756, 2853, 78443, 118813, 129042, 70347, 119009, 2850, 8084, - 983085, 73850, 2801, 92284, 42069, 119839, 74754, 83522, 42072, 92736, - 119842, 10398, 83386, 83523, 8377, 119312, 8245, 68401, 3158, 92396, - 3983, 43656, 923, 119857, 92470, 292, 11119, 119845, 119844, 3221, 1763, - 92463, 4612, 67729, 119850, 7253, 70456, 68391, 75002, 10782, 3637, - 12996, 43542, 113676, 64578, 83449, 3228, 69636, 8783, 983632, 119614, + 94045, 42073, 6785, 64590, 983135, 4371, 7196, 65318, 2035, 65316, 4106, + 65314, 65313, 42074, 127847, 41228, 100359, 65609, 41241, 7903, 41239, + 43533, 78459, 7189, 100418, 983227, 43941, 12357, 42802, 78450, 8487, + 9131, 66292, 4615, 12695, 127752, 0, 12175, 0, 64535, 0, 7809, 983887, + 121351, 562, 12169, 6590, 69762, 66455, 64738, 3219, 68654, 121096, + 128281, 1037, 128677, 2025, 119159, 13098, 78442, 10637, 4568, 549, 1570, + 43839, 2835, 83052, 10624, 43623, 11072, 83045, 120561, 83046, 12606, + 78433, 2825, 83048, 10825, 8079, 2821, 41046, 92327, 7365, 83043, 120593, + 13071, 121288, 452, 41049, 42840, 6346, 2831, 5461, 74596, 11465, 5212, + 118945, 64703, 119191, 42308, 7181, 128276, 41332, 0, 12333, 41047, 1668, + 119849, 121150, 127295, 1187, 128875, 42628, 78575, 82953, 71863, 82955, + 3240, 128518, 9213, 0, 11591, 41065, 5323, 8166, 70739, 118932, 127111, + 66827, 1623, 65297, 128856, 571, 0, 4918, 0, 5288, 127081, 1541, 65048, + 1909, 8864, 0, 66402, 10736, 92508, 11571, 7615, 70476, 92296, 4237, + 92576, 1035, 65815, 68083, 3567, 701, 65936, 3489, 120899, 70462, 70172, + 11403, 0, 0, 82986, 3796, 6800, 70472, 3994, 11421, 74611, 127911, + 195078, 68036, 70659, 0, 64857, 83508, 2855, 70697, 66308, 41621, 68214, + 83513, 127817, 10654, 82945, 119226, 12164, 3246, 7906, 43972, 65847, + 7182, 0, 13024, 66276, 74270, 83069, 125090, 121115, 0, 1496, 747, + 917999, 942, 2378, 43136, 83031, 8466, 83074, 9320, 8001, 1232, 8139, + 11617, 74637, 0, 11409, 68373, 6382, 126500, 64634, 92362, 70202, 11612, + 93008, 67600, 2374, 94066, 8475, 11609, 66313, 92568, 0, 5286, 119297, + 83059, 983253, 64925, 120283, 127204, 118982, 71905, 7705, 11942, 11305, + 127203, 3309, 82979, 9206, 82980, 113824, 6802, 70353, 41653, 1280, 1241, + 7168, 12096, 0, 66615, 42565, 41651, 983869, 917627, 83042, 41650, 66507, + 66470, 74472, 12914, 41491, 43901, 94106, 6078, 9954, 78822, 1475, + 119247, 9938, 6084, 917546, 41064, 41062, 0, 113680, 3256, 10189, 42076, + 43252, 78823, 68089, 8727, 120922, 65875, 917916, 129349, 127762, 10562, + 74215, 43065, 120906, 0, 3248, 74297, 3261, 9015, 71351, 113718, 3635, + 64337, 92759, 125054, 0, 7195, 83346, 2007, 64431, 195075, 194670, 92197, + 127090, 635, 983118, 129082, 65613, 77909, 92420, 73997, 127980, 121457, + 43905, 7984, 8600, 74434, 121047, 4176, 70050, 2034, 78423, 11154, 65891, + 127038, 0, 318, 2038, 128544, 78596, 129094, 3649, 13149, 42145, 42798, + 3634, 120291, 71885, 67677, 120124, 7866, 75045, 11402, 42146, 94032, + 74238, 42664, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, 68386, + 128185, 1159, 71183, 69729, 0, 66768, 7178, 120851, 983836, 41680, + 128469, 83098, 11534, 1514, 11668, 67891, 9313, 7015, 128490, 67877, + 194561, 12989, 66474, 9368, 12848, 1624, 43270, 0, 74278, 10818, 83091, + 9953, 128008, 78421, 1194, 3242, 9761, 9555, 8598, 120299, 6169, 12871, + 1551, 2798, 65176, 4958, 42752, 119025, 917924, 67875, 120301, 3495, + 66648, 125079, 78708, 68364, 120779, 4891, 917933, 10641, 125265, 73746, + 120945, 68352, 0, 73787, 120195, 127094, 7199, 11131, 120617, 194700, 0, + 983852, 126979, 42685, 42679, 193, 78789, 0, 0, 42667, 983868, 5271, + 68323, 92517, 83356, 1362, 13297, 118862, 71880, 195090, 194969, 73789, + 120989, 6658, 4426, 127093, 66830, 983842, 83103, 7276, 42163, 5220, + 100670, 78621, 67822, 2416, 3310, 42703, 83107, 379, 129159, 43755, + 70504, 43647, 3223, 65492, 1284, 194771, 4549, 11523, 0, 71253, 70784, + 10807, 9558, 93027, 128003, 8515, 8688, 12866, 65308, 3294, 83143, 8529, + 128101, 43385, 7564, 917986, 43329, 83148, 92458, 73757, 66456, 42359, + 128439, 2031, 127394, 7202, 128232, 12676, 42729, 74777, 3215, 120982, + 7710, 1610, 73801, 128807, 0, 65682, 0, 43917, 65924, 9974, 228, 43922, + 1501, 127512, 64395, 5179, 7200, 6225, 118927, 42999, 1725, 65533, 8196, + 7476, 74399, 0, 66868, 7152, 8502, 5762, 1967, 7483, 43898, 0, 8104, + 70128, 7474, 43914, 83080, 126507, 10414, 13001, 8141, 194949, 42537, + 1557, 43594, 128642, 6330, 6805, 8631, 2545, 42934, 92203, 125211, 74190, + 128477, 70410, 983786, 42762, 194708, 42914, 1650, 262, 1637, 128502, + 7901, 3238, 83026, 41861, 983763, 120211, 65158, 10860, 74959, 43658, + 7527, 83086, 43319, 6419, 0, 45, 128060, 64588, 93989, 127753, 119810, + 7194, 5291, 100398, 43666, 13129, 126639, 9084, 72717, 8737, 983165, + 12881, 75066, 12906, 9639, 7912, 2620, 194830, 3564, 127393, 69978, 179, + 43644, 75049, 64756, 2853, 78443, 118813, 129042, 70347, 119009, 2850, + 8084, 983085, 73850, 2801, 92284, 42069, 119839, 74754, 83522, 42072, + 92736, 119842, 10398, 83386, 83523, 8377, 119312, 8245, 68401, 3158, + 92396, 3983, 43656, 923, 119857, 92470, 292, 11119, 119845, 72715, 3221, + 1763, 92463, 4612, 67729, 119850, 7253, 70456, 68391, 75002, 10782, 3637, + 12996, 43542, 113676, 64578, 83449, 3228, 69636, 8783, 983093, 119614, 2731, 0, 120833, 78585, 4102, 7696, 73878, 121417, 128132, 70813, 43316, 4177, 11283, 9089, 120918, 73996, 121111, 64500, 43674, 0, 64947, 1856, - 0, 0, 6379, 917804, 11142, 127176, 3208, 12975, 74775, 127380, 983931, - 92389, 74072, 55269, 0, 124962, 983683, 2033, 78577, 78576, 82965, 55254, - 7740, 82974, 70448, 126555, 73964, 68505, 93988, 67612, 65674, 128244, - 94110, 41689, 0, 74006, 64909, 6646, 11790, 74019, 128520, 128066, - 128031, 8561, 4573, 121375, 5326, 92571, 120605, 7230, 8257, 121415, - 8778, 41688, 0, 65776, 2071, 8314, 6459, 43511, 7628, 65092, 73903, - 64355, 11342, 128561, 0, 983434, 128226, 127001, 0, 11810, 13164, 10723, - 967, 983335, 120985, 11946, 983602, 3257, 127209, 12307, 1845, 129072, - 43526, 0, 119573, 1886, 42342, 10089, 870, 7648, 3499, 7662, 7652, 876, - 871, 877, 7665, 878, 42015, 879, 43692, 4563, 0, 917892, 7591, 65887, - 867, 9520, 872, 7656, 868, 873, 7642, 7659, 869, 874, 7644, 120674, 875, - 790, 128303, 118938, 195053, 93038, 66182, 194623, 5429, 195055, 66180, - 126480, 66181, 68452, 983291, 127214, 42067, 0, 5433, 10657, 7911, - 125119, 1547, 66176, 42012, 120576, 5425, 4977, 9999, 5317, 5423, 4611, - 125094, 67637, 127286, 9679, 74122, 92978, 917585, 0, 66194, 4418, 66184, - 4628, 4245, 119648, 0, 127263, 1851, 124995, 83320, 11908, 0, 9360, - 118897, 120874, 42776, 66187, 12837, 8829, 7711, 11112, 0, 92321, 43318, - 92302, 8809, 69881, 0, 126518, 120604, 983052, 983277, 983433, 128412, 0, - 120577, 7427, 9958, 4588, 43680, 0, 74484, 127185, 2433, 128602, 69973, - 3352, 74363, 128668, 121341, 793, 74404, 11197, 305, 567, 67662, 842, - 69979, 8208, 68308, 41695, 1647, 118877, 70841, 7837, 917625, 818, 5337, - 194628, 917621, 41376, 119978, 68742, 120594, 74086, 68777, 70179, - 917613, 10973, 66359, 1372, 127172, 917608, 4969, 1254, 917605, 194654, - 93967, 917602, 65228, 78221, 126612, 67723, 2840, 983905, 78829, 983939, - 66887, 3245, 9068, 68194, 64725, 121161, 128051, 12991, 124971, 2651, - 68016, 983267, 127326, 125038, 70835, 0, 70844, 43648, 120812, 917833, - 43322, 92662, 0, 0, 64372, 92698, 3226, 655, 752, 7457, 7456, 7452, 3285, - 74894, 11152, 92903, 65610, 2391, 92908, 92248, 671, 250, 7434, 618, 668, - 610, 42800, 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, - 128340, 128266, 64749, 67850, 2107, 128290, 74249, 4605, 128174, 983192, - 43372, 65945, 127249, 11113, 119590, 0, 0, 70495, 987, 6927, 11572, - 42261, 11464, 3365, 9971, 0, 983951, 128297, 0, 78762, 127867, 121368, - 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0, 4627, 119269, 5208, 0, - 70090, 10332, 2424, 7976, 9156, 0, 3244, 5529, 69647, 73894, 128852, - 5432, 64965, 5527, 42315, 10516, 7790, 5528, 128838, 42140, 120281, 0, - 983777, 43545, 9887, 121477, 4000, 7429, 7428, 665, 7424, 3206, 120278, - 7884, 0, 128566, 74910, 128666, 211, 2509, 92904, 70822, 68672, 3220, - 42235, 78480, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 127258, - 5852, 0, 78482, 127259, 1708, 0, 78481, 2623, 11943, 128700, 69226, - 69974, 4698, 66509, 1066, 119921, 4701, 983876, 120285, 70447, 94111, - 8267, 0, 1421, 66426, 7516, 127552, 2625, 983641, 8034, 74309, 0, 3631, - 10955, 7850, 120293, 8416, 0, 983065, 0, 43384, 12660, 128693, 128270, 0, - 74850, 41069, 70185, 128156, 12099, 4310, 10032, 6252, 713, 7990, 983489, - 3990, 125050, 983264, 66368, 5017, 64956, 7071, 0, 70457, 1030, 118800, - 92563, 9513, 41059, 9357, 74988, 1773, 77939, 120350, 124961, 6339, 7745, - 9844, 127220, 64650, 94, 1880, 74766, 113719, 8908, 983222, 128707, - 65913, 78470, 10752, 13003, 68769, 126572, 41307, 8732, 120336, 0, 1757, - 6964, 4696, 0, 120333, 64785, 7394, 3641, 5419, 128055, 0, 127883, - 194707, 120344, 43988, 70423, 8610, 43062, 7592, 856, 74299, 936, 13289, - 69894, 43171, 1459, 128224, 65243, 78638, 19953, 129078, 1504, 70064, 0, - 12913, 74206, 7529, 128745, 127868, 70203, 120782, 4113, 120929, 2372, - 336, 0, 7509, 12152, 194885, 682, 7655, 41505, 0, 64743, 10593, 1703, - 92467, 77911, 8033, 69953, 0, 9810, 127269, 120013, 12970, 0, 42351, - 10109, 74535, 74068, 74921, 0, 92690, 0, 65068, 74291, 1965, 7069, 43312, - 0, 73887, 11130, 2087, 64370, 6314, 41714, 8501, 11145, 121117, 74239, - 41317, 92614, 2091, 74545, 2090, 69912, 9353, 7117, 2077, 77886, 11161, - 10498, 2083, 77888, 71196, 0, 119236, 634, 124970, 92290, 194886, 69779, - 4165, 8746, 195048, 9654, 12856, 6924, 7660, 7066, 194693, 70415, 128135, - 41037, 42692, 7786, 12959, 41039, 127483, 124965, 680, 2302, 128200, - 1181, 7056, 3174, 67248, 0, 92668, 65665, 127375, 113776, 6920, 0, 92295, - 126606, 118965, 68318, 64644, 126981, 74119, 68238, 41028, 74025, 6231, + 100572, 127812, 6379, 917804, 11142, 127176, 3208, 12975, 74775, 119121, + 983931, 92389, 74072, 55269, 0, 124962, 983329, 2033, 78577, 78576, + 82965, 55254, 7740, 82974, 70448, 126555, 73964, 68505, 93988, 67612, + 65674, 127552, 94110, 41689, 983410, 74006, 64909, 6646, 11790, 74019, + 128520, 128066, 128031, 8561, 4573, 121375, 5326, 92571, 120605, 7230, + 8257, 121415, 8778, 41688, 0, 65776, 2071, 8314, 6459, 43511, 7628, + 65092, 73903, 64355, 11342, 100579, 983732, 194939, 128226, 127001, + 127944, 11810, 13164, 10723, 967, 100481, 120985, 11946, 129032, 3257, + 127209, 12307, 1845, 100578, 43526, 983084, 119573, 1886, 42342, 10089, + 870, 7648, 3499, 7662, 7652, 876, 871, 877, 7665, 878, 42015, 879, 43692, + 4563, 983249, 917892, 7591, 65887, 867, 9520, 872, 7656, 868, 873, 7642, + 7659, 869, 874, 7644, 120674, 875, 790, 121082, 118938, 100427, 93038, + 66177, 194623, 5429, 195055, 66180, 126480, 66181, 68452, 194966, 119244, + 42067, 119993, 5433, 10657, 7911, 125119, 1547, 66176, 42012, 120576, + 5425, 4977, 9999, 5317, 5423, 4611, 125094, 67637, 127286, 9679, 74122, + 92978, 917585, 0, 66194, 4418, 66184, 4628, 4245, 119648, 0, 127263, + 1851, 120823, 83320, 11908, 0, 9360, 118897, 120874, 42776, 66187, 12837, + 8829, 7711, 11112, 128787, 92321, 43318, 92302, 8809, 69881, 128564, + 125229, 120604, 983052, 983238, 983433, 128412, 0, 120577, 7427, 9958, + 4588, 43680, 0, 74484, 127185, 2433, 128602, 69973, 3352, 74363, 126601, + 121341, 793, 74404, 11197, 305, 567, 67662, 842, 69979, 8208, 68308, + 41695, 1647, 118877, 70841, 7837, 917625, 818, 5337, 128377, 127989, + 41376, 119978, 68742, 120594, 74086, 68777, 70179, 917613, 10973, 66359, + 1372, 127172, 917608, 4969, 1254, 195006, 194654, 93967, 917602, 65228, + 78221, 72746, 67723, 2840, 128842, 78829, 983939, 66887, 3245, 9068, + 68194, 64725, 121161, 128051, 12991, 124971, 2651, 68016, 983267, 72873, + 100601, 70835, 0, 70844, 43648, 120812, 194854, 43322, 92662, 0, 0, + 64372, 92698, 3226, 655, 752, 7457, 7456, 7452, 3285, 74894, 11152, + 92903, 65610, 2391, 92908, 92248, 671, 250, 7434, 618, 668, 610, 42800, + 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 128340, + 100741, 64749, 67850, 2107, 128290, 74249, 4605, 128174, 100745, 43372, + 65945, 72710, 11113, 119590, 0, 100749, 70495, 987, 6927, 11572, 42261, + 11464, 3365, 9971, 70673, 127942, 128297, 0, 78762, 127867, 121368, + 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0, 4627, 119269, 5208, + 113690, 70090, 10332, 2424, 7976, 9156, 0, 3244, 5529, 69647, 42142, + 128852, 5432, 64965, 5527, 42315, 10516, 7790, 5528, 128838, 42140, + 120281, 0, 195088, 43545, 9887, 121477, 4000, 7429, 7428, 665, 7424, + 3206, 120278, 7884, 0, 128566, 74910, 128666, 211, 2509, 92904, 70822, + 68672, 3220, 42235, 78480, 10690, 8951, 5214, 42474, 8118, 983833, 7048, + 4590, 127258, 5852, 983819, 78482, 127259, 1708, 0, 78481, 2623, 11943, + 121140, 69226, 69974, 4698, 66509, 1066, 119921, 4701, 100564, 120285, + 70447, 94111, 8267, 0, 1421, 66426, 7516, 120406, 2625, 128242, 8034, + 74309, 194715, 3631, 10955, 7850, 120293, 8416, 127032, 120613, 983578, + 43384, 12660, 122883, 128270, 0, 74850, 41069, 70185, 128156, 12099, + 4310, 10032, 6252, 713, 7990, 983489, 3990, 125050, 983264, 66368, 5017, + 64956, 7071, 0, 70457, 1030, 118800, 92563, 9513, 41059, 9357, 70675, + 1773, 77939, 120350, 124961, 6339, 7745, 9844, 127220, 64650, 94, 1880, + 74766, 113719, 8908, 983222, 128236, 65913, 78470, 10752, 13003, 68769, + 126572, 41307, 8732, 120336, 100669, 1757, 6964, 4696, 0, 120333, 64785, + 7394, 3641, 5419, 128055, 0, 127883, 194707, 120344, 43988, 70423, 8610, + 43062, 7592, 856, 74299, 936, 13289, 69894, 43171, 1459, 128224, 65243, + 78638, 19953, 129078, 1504, 70064, 72421, 12913, 70722, 7529, 120608, + 127868, 70203, 120782, 4113, 120929, 2372, 336, 0, 7509, 12152, 194885, + 682, 7655, 41505, 983753, 64743, 10593, 1703, 92467, 77911, 8033, 69953, + 0, 9810, 127269, 120013, 12970, 983205, 42351, 10109, 74535, 74068, + 74921, 0, 92690, 122886, 65068, 74291, 1965, 7069, 43312, 0, 73887, + 11130, 2087, 64370, 6314, 41714, 8501, 11145, 121117, 74239, 41317, + 92614, 2091, 74545, 2090, 69912, 9353, 7117, 2077, 77886, 11161, 10498, + 2083, 77888, 71196, 0, 119236, 634, 124970, 92290, 194886, 69779, 4165, + 8746, 195048, 9654, 12856, 6924, 7660, 7066, 127051, 70415, 128135, + 41037, 42692, 7786, 12959, 2233, 127483, 124965, 680, 2302, 128200, 1181, + 7056, 3174, 67248, 983171, 92668, 65665, 100594, 113776, 6920, 0, 92295, + 70672, 118965, 68318, 64644, 126981, 74119, 68238, 41028, 74025, 6231, 2613, 65302, 40989, 68239, 68230, 68234, 42760, 0, 43896, 0, 40987, 4667, - 0, 71843, 8828, 77995, 70506, 1246, 4746, 128501, 128508, 11021, 4749, - 92675, 917882, 921, 4744, 0, 12702, 242, 0, 1566, 8217, 127210, 64653, - 78386, 74617, 74036, 74505, 43274, 5313, 951, 74568, 92983, 983867, 7604, - 983292, 4009, 70277, 71844, 120562, 0, 983720, 64860, 119138, 119069, 0, - 127370, 4048, 983598, 83009, 70024, 1646, 77890, 64534, 73995, 120705, - 129047, 119890, 2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894, - 2975, 74442, 9822, 983935, 55220, 10084, 73943, 118840, 0, 917562, 78299, - 3399, 9851, 917609, 11909, 9059, 0, 7687, 0, 6789, 127767, 0, 71842, - 70178, 92314, 0, 1777, 9151, 1137, 66867, 749, 42366, 70444, 5385, 70791, - 72435, 70127, 83377, 5989, 128905, 74636, 120848, 0, 41685, 69223, 0, - 9769, 41684, 194737, 519, 119231, 11740, 5766, 0, 0, 2600, 8848, 70416, - 41297, 0, 3666, 70420, 41300, 74468, 65160, 0, 69688, 69771, 74479, 0, - 6558, 127149, 128064, 69765, 92775, 252, 0, 41302, 119350, 83504, 118839, - 69763, 68762, 11729, 8719, 9060, 129091, 120139, 10761, 0, 0, 129410, - 118792, 11734, 93011, 11730, 113741, 9593, 5757, 2403, 64808, 55275, 0, - 11728, 43572, 983139, 0, 7764, 68741, 11094, 120825, 0, 43489, 4282, - 8298, 0, 0, 70328, 194986, 70324, 64449, 0, 126650, 63854, 8456, 65587, - 70442, 65670, 983963, 78250, 0, 7774, 10607, 9792, 983869, 70326, 0, - 71460, 120764, 70322, 10019, 74762, 0, 3458, 4365, 70053, 983712, 3647, - 120207, 2602, 128341, 121103, 125043, 41135, 83498, 0, 121325, 64631, - 172, 4971, 41219, 41137, 1889, 7238, 6545, 126476, 77926, 7597, 10528, - 75054, 0, 3732, 73910, 194588, 5344, 983971, 43366, 43363, 9062, 119252, + 121212, 71843, 8828, 77995, 70506, 1246, 4746, 128501, 128508, 2269, + 4749, 92675, 917882, 921, 4744, 0, 12702, 242, 100595, 1566, 8217, + 127210, 64653, 78386, 74617, 74036, 74505, 43274, 5313, 951, 74568, + 92983, 983867, 7604, 128266, 4009, 70277, 71844, 120115, 126642, 94074, + 64860, 100551, 119069, 0, 127370, 4048, 983598, 83009, 70024, 1646, + 77890, 64534, 73995, 120705, 129047, 119890, 2579, 119905, 3177, 11357, + 9099, 4107, 3441, 119894, 2975, 74442, 9822, 983935, 55220, 10084, 73943, + 118840, 983728, 917562, 78299, 3399, 9851, 917609, 11909, 9059, 0, 7687, + 127052, 6789, 127767, 0, 71842, 70178, 92314, 0, 1777, 9151, 1137, 66867, + 749, 42366, 70444, 5385, 70791, 72435, 70127, 83377, 5989, 128905, 74636, + 120848, 0, 41685, 69223, 0, 9769, 41684, 194737, 519, 119231, 11740, + 5766, 0, 0, 2600, 8848, 70416, 41297, 0, 3666, 70420, 41300, 74468, + 65160, 0, 69688, 69771, 74479, 0, 6558, 127149, 128064, 69765, 92775, + 252, 983142, 41302, 100371, 83504, 118839, 69763, 68762, 11729, 8719, + 9060, 125077, 120139, 10761, 0, 0, 129410, 118792, 11734, 93011, 11730, + 113741, 9593, 5757, 2403, 64808, 55275, 0, 11728, 43572, 983139, 129412, + 7764, 68741, 11094, 120825, 983758, 43489, 4282, 8298, 0, 0, 70328, + 113691, 70324, 64449, 0, 126650, 63854, 8456, 65587, 70442, 65670, + 983180, 78250, 0, 7774, 10607, 9792, 101102, 70326, 0, 71460, 120764, + 70322, 10019, 74762, 0, 3458, 4365, 70053, 983712, 3647, 83437, 2602, + 128341, 100717, 125043, 41135, 83498, 120815, 121325, 64631, 172, 4971, + 41219, 41137, 1889, 7238, 6545, 126476, 77926, 7597, 10528, 75054, + 121405, 3732, 73910, 194588, 5344, 983971, 43366, 43363, 9062, 119252, 121441, 92528, 0, 64479, 9232, 92596, 83330, 113707, 194712, 10900, 41531, 1263, 3720, 12048, 74075, 64292, 41524, 7227, 119635, 6099, 41534, - 0, 127354, 127345, 299, 83022, 8525, 127347, 3524, 917565, 8831, 127349, - 92564, 3075, 67867, 94053, 0, 66362, 0, 64353, 70440, 0, 5845, 121310, 0, - 121185, 2581, 8200, 65114, 68460, 983693, 43283, 5551, 0, 120735, 983201, - 6340, 118855, 121027, 78134, 8680, 7204, 70065, 2588, 2914, 7011, 55281, - 0, 2471, 194631, 2883, 2749, 119563, 73774, 10913, 83116, 983086, 8666, - 675, 42493, 121297, 43571, 0, 6219, 128584, 9980, 41232, 10928, 0, 41153, - 41229, 118967, 0, 3738, 94016, 983243, 12711, 3181, 66212, 74289, 68472, - 42857, 8262, 93036, 0, 74476, 0, 42347, 12092, 9615, 7234, 74047, 983088, - 128137, 43744, 0, 0, 73846, 2934, 12722, 120762, 922, 43983, 74507, - 983126, 74461, 3218, 120471, 74290, 120469, 64562, 120475, 8569, 11404, - 11932, 73728, 3214, 11212, 120468, 12128, 3207, 65486, 78729, 1901, - 78727, 65667, 120460, 7425, 3205, 68003, 78737, 78736, 78735, 43383, - 69940, 65459, 2606, 78730, 73897, 129043, 11496, 1173, 0, 41272, 119661, - 0, 0, 83178, 120737, 120953, 194773, 983322, 378, 2610, 983328, 65079, - 983327, 65695, 121220, 37, 7068, 0, 120480, 68236, 3209, 120477, 120835, - 10638, 9768, 69952, 119909, 71486, 92225, 983953, 983340, 0, 43840, 0, 0, - 5233, 983337, 64792, 71233, 128223, 126633, 128919, 7060, 9847, 120144, - 1685, 595, 83197, 70428, 1292, 8940, 7380, 11088, 0, 10004, 126997, 0, - 6541, 43837, 71465, 121030, 3243, 9014, 5606, 125032, 538, 64620, 5602, - 8467, 74391, 6547, 71466, 8203, 66420, 68241, 8458, 65211, 8495, 92311, - 127481, 917552, 779, 78314, 64367, 2465, 69901, 8193, 55279, 9730, 9280, - 120913, 7065, 74155, 4346, 113690, 73798, 504, 125115, 92414, 8982, 0, - 121471, 119170, 782, 129028, 10883, 128446, 194852, 732, 3737, 121188, - 1548, 68650, 92507, 1832, 5604, 5735, 41141, 119020, 4376, 983372, 11787, - 3745, 917868, 119885, 42888, 65712, 127913, 3869, 11937, 5725, 127539, - 1783, 7416, 5728, 0, 128457, 119554, 11918, 66567, 5724, 127965, 5727, - 78521, 121121, 0, 764, 0, 121011, 43531, 113670, 9033, 127182, 42532, - 6223, 11042, 120749, 11423, 74852, 119861, 68303, 43465, 0, 74767, 6559, - 64557, 71348, 92649, 120648, 43019, 43477, 10238, 74491, 128711, 43377, - 92282, 71346, 1478, 9783, 11825, 2607, 64740, 113689, 7739, 74543, - 917765, 67393, 0, 6132, 0, 63765, 128396, 70058, 41144, 71899, 92438, - 43537, 6761, 10093, 4369, 917791, 128394, 194776, 8820, 3947, 0, 65299, - 11515, 526, 128103, 41295, 194603, 125002, 194932, 113691, 7688, 917786, - 7686, 8288, 11815, 983188, 121411, 983384, 1543, 3713, 41221, 12423, - 42281, 78544, 74024, 12293, 983680, 64357, 11794, 42082, 128125, 1737, - 8987, 42081, 0, 7205, 83264, 9335, 12850, 119173, 6553, 7055, 68041, - 8277, 0, 67751, 5475, 74795, 6780, 65067, 0, 1327, 1160, 42084, 93963, - 41217, 119660, 10018, 360, 129070, 983865, 68176, 5863, 3137, 0, 4147, - 983170, 41216, 7844, 2616, 70197, 68461, 65234, 68341, 13076, 3135, - 983289, 78143, 119139, 3142, 92451, 94068, 10819, 119580, 10183, 74635, - 2608, 1470, 73967, 94008, 6227, 121257, 83268, 65236, 917878, 6163, - 983558, 113728, 127314, 128138, 983236, 8603, 127959, 119866, 3306, - 10876, 43392, 83187, 127931, 5751, 127517, 6222, 0, 127466, 12086, 7403, - 1600, 64309, 64939, 0, 64783, 92658, 11310, 0, 8882, 119903, 0, 2570, - 7021, 74902, 194742, 43110, 0, 1234, 6540, 6974, 92750, 0, 983211, 5002, - 983563, 41286, 69946, 74465, 71074, 43585, 113720, 6551, 983375, 128229, - 983274, 41289, 125130, 71080, 127958, 8977, 602, 120814, 0, 128350, - 128661, 194890, 983377, 41279, 0, 0, 94108, 11081, 43615, 0, 0, 127888, - 983612, 12727, 43895, 0, 78397, 9475, 7112, 65105, 0, 9633, 10886, 43592, - 7831, 983829, 194571, 0, 73915, 8076, 43048, 8290, 8291, 43051, 92570, 0, - 2596, 43584, 120983, 13113, 0, 127757, 2393, 7058, 9087, 74067, 68673, - 41574, 78337, 70498, 42900, 6376, 0, 0, 0, 0, 9854, 127748, 64696, 73879, - 128220, 120752, 6994, 0, 1720, 0, 0, 0, 6529, 7063, 983179, 3751, 9120, - 983487, 68038, 1798, 709, 0, 1354, 1876, 13152, 6557, 12430, 8137, 94098, - 67752, 70850, 119057, 245, 121066, 11456, 41233, 7070, 0, 94046, 6136, - 68304, 65677, 8682, 41235, 92595, 42045, 9804, 118963, 432, 3595, 127015, - 65437, 0, 74455, 42399, 983136, 0, 128274, 0, 119658, 128184, 0, 0, - 77894, 8797, 0, 9052, 64888, 7167, 2356, 95, 74784, 10580, 0, 42286, - 71123, 64640, 69999, 94109, 120877, 74137, 70035, 10063, 12652, 12199, - 74622, 43492, 2566, 11971, 983737, 120882, 1065, 0, 127005, 43400, 2576, - 66696, 66819, 83333, 43604, 127891, 0, 3201, 514, 74502, 70032, 2921, - 43215, 64493, 5772, 12968, 70055, 194944, 70310, 43398, 2580, 195025, - 41341, 41223, 6564, 1463, 41342, 0, 5293, 70020, 127870, 3733, 11346, 0, - 12054, 0, 74098, 42827, 195074, 13091, 0, 128580, 0, 917915, 127961, - 127025, 128334, 74821, 71104, 66295, 68037, 0, 121116, 13090, 66643, 0, - 1270, 1132, 42360, 0, 74096, 66655, 42569, 127824, 66898, 64761, 0, - 41021, 8510, 42432, 119898, 119317, 194782, 194641, 64496, 74109, 70030, - 9915, 983083, 983218, 7061, 41336, 3854, 69700, 13141, 68413, 43401, - 42319, 13082, 78114, 7067, 68221, 127881, 127383, 127171, 0, 120745, - 74209, 9029, 43543, 70836, 2353, 6308, 129154, 74792, 2611, 119186, - 66881, 127241, 65063, 43664, 92319, 66627, 92912, 4484, 8509, 118976, - 11066, 65233, 127146, 41224, 41017, 128149, 3747, 10522, 0, 194876, 1691, - 41226, 74962, 12107, 7100, 10905, 65010, 121299, 697, 66018, 9284, 4244, - 983343, 93058, 74781, 13121, 120036, 0, 12010, 128573, 128221, 120949, - 121032, 0, 127193, 65816, 68111, 118950, 127933, 65668, 92257, 6618, - 3562, 66365, 0, 42234, 12648, 78110, 7123, 70038, 5785, 9198, 9764, - 41316, 65877, 7383, 13230, 41299, 0, 0, 68365, 128258, 195027, 0, 0, - 13122, 0, 191, 70060, 8585, 8000, 64411, 120652, 42889, 64850, 41072, - 41578, 983104, 41577, 0, 10002, 121364, 6533, 73802, 41570, 917919, 683, - 396, 41580, 68146, 983067, 12901, 43058, 0, 343, 7129, 42680, 41360, - 78154, 983397, 4743, 69987, 0, 74040, 74108, 8743, 1724, 1433, 119322, - 128665, 3739, 6263, 71349, 128811, 3964, 6592, 121424, 68288, 66040, + 0, 127354, 127345, 299, 83022, 8525, 127347, 3524, 128717, 8831, 127349, + 92564, 3075, 67867, 94053, 0, 66362, 0, 64353, 70440, 983970, 5845, + 121310, 127937, 121185, 2581, 8200, 65114, 68460, 74858, 43283, 5551, 0, + 120735, 129423, 6340, 118855, 100602, 78134, 8680, 7204, 70065, 2588, + 2914, 7011, 55281, 0, 2471, 194631, 2883, 2749, 100852, 73774, 10913, + 83116, 983086, 8666, 675, 42493, 121297, 43571, 0, 6219, 128584, 9980, + 41232, 10928, 0, 41153, 41229, 118967, 0, 3738, 94016, 983243, 12711, + 3181, 66212, 74289, 68472, 42857, 8262, 93036, 983676, 74476, 0, 42347, + 12092, 9615, 7234, 74047, 128768, 128137, 43744, 100610, 0, 73846, 2934, + 12722, 120762, 922, 43983, 74507, 983110, 74461, 3218, 101002, 74290, + 120469, 64562, 120475, 8569, 11404, 11932, 73728, 3214, 11212, 120468, + 12128, 3207, 65486, 78729, 1901, 78727, 65667, 120460, 7425, 3205, 68003, + 78737, 78736, 78735, 43383, 69940, 65459, 2606, 78730, 73897, 129043, + 11496, 1173, 0, 41272, 119661, 983853, 983893, 83178, 100728, 120953, + 194773, 194601, 378, 2610, 983328, 65079, 194879, 65695, 121220, 37, + 7068, 0, 120480, 68236, 3209, 120477, 120835, 10638, 9768, 69952, 100621, + 71486, 92225, 128494, 983340, 100905, 43840, 0, 101096, 5233, 100624, + 64792, 71233, 128223, 100626, 128919, 7060, 9847, 120144, 1685, 595, + 83197, 70428, 1292, 8940, 7380, 11088, 92948, 10004, 126997, 0, 6541, + 43837, 71465, 121030, 3243, 9014, 5606, 119585, 538, 64620, 5602, 8467, + 74391, 6547, 71466, 8203, 66420, 68241, 8458, 65211, 8495, 92311, 127481, + 917552, 779, 78314, 64367, 2465, 69901, 8193, 55279, 9730, 9280, 120913, + 7065, 74155, 4346, 100570, 73798, 504, 125115, 92414, 8982, 0, 121471, + 119170, 782, 129028, 10883, 128446, 194852, 732, 3737, 121188, 1548, + 68650, 92507, 1832, 5604, 5735, 41141, 119020, 4376, 983372, 11787, 3745, + 917868, 119885, 42888, 65712, 100606, 3869, 11937, 5725, 100608, 1783, + 7416, 5728, 128569, 128457, 119554, 11918, 66567, 5724, 127965, 5727, + 78521, 121121, 128488, 764, 0, 121011, 43531, 113670, 9033, 127182, + 42532, 6223, 11042, 120749, 11423, 74852, 119861, 68303, 43465, 194819, + 72854, 6559, 64557, 71348, 92649, 66763, 43019, 43477, 10238, 74491, + 128711, 43377, 92282, 71346, 1478, 9783, 11825, 2607, 64740, 113689, + 7739, 74543, 917765, 67393, 100588, 6132, 0, 63765, 100590, 70058, 41144, + 71899, 92438, 43537, 6761, 10093, 4369, 917791, 70682, 100561, 8820, + 3947, 122898, 65299, 11515, 526, 128103, 41295, 194603, 100931, 194932, + 78393, 7688, 917786, 7686, 8288, 11815, 983188, 100934, 983384, 1543, + 3713, 41221, 12423, 42281, 78544, 74024, 12293, 194589, 64357, 11794, + 42082, 70744, 1737, 8987, 42081, 0, 7205, 83264, 9335, 12850, 119173, + 2272, 7055, 68041, 8277, 0, 67751, 5475, 74795, 6780, 65067, 0, 1327, + 1160, 42084, 93963, 41217, 119660, 10018, 360, 129070, 100617, 68176, + 5863, 3137, 0, 4147, 983170, 41216, 7844, 2616, 70197, 68461, 65234, + 68341, 13076, 3135, 983289, 78143, 119139, 3142, 92451, 94068, 10819, + 119580, 10183, 74635, 2608, 1470, 73967, 94008, 6227, 121257, 83268, + 65236, 120256, 6163, 129297, 113728, 127314, 73822, 983236, 8603, 127959, + 119866, 3306, 10876, 43392, 83187, 127931, 5751, 127517, 6222, 100716, + 127466, 12086, 7403, 1600, 64309, 64939, 0, 64783, 92658, 11310, 983307, + 8882, 119903, 78518, 2570, 7021, 74902, 128880, 43110, 0, 1234, 6540, + 6974, 92750, 127396, 100923, 5002, 983563, 41286, 69946, 74465, 71074, + 43585, 100927, 6551, 983375, 128229, 983047, 41289, 125130, 71080, + 100521, 8977, 602, 120814, 100630, 128350, 128661, 194890, 983377, 41279, + 0, 0, 94108, 11081, 43615, 0, 101022, 127888, 194994, 12727, 43895, 0, + 78397, 9475, 7112, 65105, 127556, 9633, 10886, 43592, 7831, 66751, + 194571, 122885, 73915, 8076, 43048, 8290, 8291, 43051, 92570, 983895, + 2596, 43584, 120983, 13113, 983731, 127757, 2393, 7058, 9087, 4136, + 68673, 41574, 78337, 70498, 42900, 6376, 0, 194912, 127820, 0, 9854, + 101088, 64696, 73879, 128220, 120752, 6994, 0, 1720, 917797, 0, 0, 6529, + 7063, 118917, 3751, 9120, 194628, 68038, 1798, 709, 0, 1354, 1876, 13152, + 6557, 12430, 8137, 94098, 67752, 70850, 100832, 245, 100831, 11456, + 41233, 7070, 71264, 94046, 6136, 68304, 65677, 8682, 41235, 92595, 42045, + 9804, 100642, 432, 3595, 100784, 65437, 0, 74455, 42399, 100646, 100641, + 100649, 983949, 100648, 128184, 100786, 194587, 77894, 8797, 983956, + 9052, 64888, 7167, 2356, 95, 74784, 10580, 100845, 42286, 71123, 64640, + 69999, 94109, 120877, 74137, 70035, 10063, 12652, 12199, 74622, 43492, + 2566, 11971, 983737, 120882, 1065, 120768, 127005, 43400, 2576, 66696, + 66819, 83333, 43604, 127891, 0, 3201, 514, 74502, 70032, 2921, 43215, + 64493, 5772, 12968, 70055, 194944, 70310, 43398, 2580, 128497, 41341, + 41223, 6564, 1463, 41342, 195092, 5293, 70020, 127870, 3733, 11346, 0, + 12054, 100824, 74098, 42827, 195074, 13091, 0, 128580, 100821, 100828, + 127961, 127025, 128334, 74821, 71104, 66295, 68037, 983905, 121116, + 13090, 66643, 128820, 1270, 1132, 42360, 194968, 66752, 66655, 42569, + 120571, 66898, 64761, 100776, 41021, 8510, 42432, 100778, 119317, 194782, + 194641, 64496, 74109, 70030, 9915, 69798, 983218, 7061, 41336, 3854, + 69700, 13141, 68413, 43401, 42319, 13082, 78114, 7067, 68221, 127881, + 127383, 127171, 121207, 100765, 74209, 9029, 43543, 70836, 2353, 6308, + 70662, 74792, 2611, 100768, 66881, 127241, 65063, 43664, 92319, 66627, + 92912, 4484, 8509, 118976, 11066, 65233, 127146, 41224, 41017, 120514, + 3747, 10522, 917811, 119970, 1691, 41226, 74962, 12107, 7100, 10905, + 65010, 74602, 697, 66018, 9284, 4244, 983343, 93058, 74781, 13121, + 120036, 0, 12010, 128573, 128221, 120949, 121032, 983132, 127193, 65816, + 68111, 118950, 127933, 65668, 92257, 6618, 3562, 66365, 0, 42234, 12648, + 78110, 7123, 70038, 5785, 9198, 9764, 41316, 65877, 7383, 13230, 41299, + 0, 983150, 68365, 128258, 195026, 983402, 0, 13122, 127546, 191, 70060, + 8585, 8000, 64411, 120652, 42889, 64850, 41072, 41578, 983104, 41577, + 983371, 10002, 100754, 6533, 73802, 41570, 100756, 683, 396, 41580, + 68146, 127815, 12901, 43058, 100760, 343, 7129, 42680, 41360, 78154, + 127082, 4743, 69987, 100761, 74040, 74108, 8743, 1724, 1433, 100751, + 128665, 3739, 6263, 71349, 128811, 3964, 6592, 120701, 65108, 66040, 82946, 42568, 69806, 128113, 1778, 3956, 128443, 42070, 6563, 43075, - 9018, 94006, 983398, 12067, 41312, 92763, 5547, 8916, 120869, 128950, + 9018, 94006, 121424, 12067, 41312, 92761, 5547, 8916, 120869, 128950, 8175, 94034, 284, 8108, 934, 128039, 74001, 173, 66460, 7174, 92703, - 118822, 1750, 128686, 4394, 68368, 1807, 983888, 92298, 0, 5889, 128795, - 7180, 0, 67127, 0, 67126, 42471, 6982, 1721, 44022, 7891, 42243, 42160, - 2583, 4512, 119360, 65230, 128109, 0, 917630, 3855, 194810, 11767, - 127998, 0, 74295, 194651, 0, 92416, 3975, 67125, 74087, 74989, 12672, - 3798, 2703, 194608, 0, 2109, 9774, 1275, 0, 983750, 41095, 3962, 68242, - 2932, 41101, 3954, 6457, 4513, 74536, 127189, 73994, 73992, 1468, 120033, - 983057, 41803, 127999, 41846, 127244, 55238, 7633, 41849, 68385, 4320, - 3224, 113734, 92741, 66281, 42531, 74593, 1510, 128384, 8256, 0, 11393, - 0, 8879, 128075, 92474, 8770, 72416, 120811, 72415, 1910, 8671, 78374, - 4283, 68842, 120824, 68361, 78318, 2654, 7893, 195006, 128241, 0, 72394, - 65106, 42761, 12857, 4581, 8411, 78372, 78371, 78370, 78369, 78368, - 74475, 983444, 0, 1733, 4392, 2568, 10786, 69661, 0, 8184, 41486, 0, - 7396, 7116, 0, 69788, 0, 7185, 7965, 119144, 128447, 92347, 195066, - 41350, 9129, 983448, 0, 2294, 64501, 68034, 83326, 10481, 0, 70022, 7171, - 0, 340, 71105, 93972, 67360, 0, 92200, 128249, 124979, 6764, 127487, - 128393, 0, 92509, 128962, 65203, 11392, 119098, 119359, 119073, 3210, 0, - 0, 118795, 82958, 94101, 127484, 917619, 119149, 0, 10043, 121215, 1186, + 118822, 1750, 128686, 4394, 68368, 1807, 78545, 92298, 101082, 5889, + 128795, 7180, 101083, 67127, 101091, 67126, 42471, 6982, 1721, 44022, + 7891, 42243, 42160, 2583, 4512, 119360, 65230, 128109, 983467, 917630, + 3855, 194810, 11767, 127998, 983589, 74295, 194577, 100797, 92416, 3975, + 67125, 74087, 74989, 12672, 3798, 2703, 100793, 0, 2109, 9774, 1275, + 194964, 983750, 41095, 3962, 68242, 2932, 41101, 3954, 6457, 4513, 74536, + 100947, 73994, 73992, 1468, 120033, 983057, 41803, 127999, 41846, 127244, + 55238, 7633, 41849, 68385, 4320, 3224, 100755, 92741, 66281, 42531, + 74593, 1510, 128384, 8256, 983043, 11393, 0, 8879, 128075, 92474, 8770, + 72416, 120811, 72415, 1910, 8671, 78374, 4283, 68842, 72787, 68361, + 78318, 2654, 7893, 129151, 128241, 100802, 72394, 65106, 42761, 12857, + 4581, 8411, 78372, 78371, 78370, 78369, 78368, 74475, 983143, 0, 1733, + 4392, 2568, 10786, 69661, 0, 8184, 41486, 128644, 7396, 7116, 0, 69788, + 100790, 7185, 7965, 119144, 128447, 92347, 195066, 41350, 9129, 983448, + 983619, 2294, 64501, 68034, 83326, 10481, 0, 70022, 7171, 0, 340, 71105, + 93972, 67360, 194942, 92200, 128249, 124979, 6764, 120804, 128393, 0, + 92509, 128962, 65203, 11392, 119098, 119359, 119073, 3210, 0, 100632, + 118795, 82958, 94101, 127484, 917619, 119149, 73926, 10043, 121215, 1186, 41571, 6999, 617, 9464, 125123, 3675, 5207, 65062, 5213, 74616, 2617, - 41348, 41568, 128803, 3253, 120535, 0, 8630, 121209, 0, 5596, 5545, 7288, - 2586, 64887, 119826, 5217, 71336, 128687, 917614, 121038, 64293, 68098, - 2635, 92760, 83137, 983846, 0, 92742, 7835, 70040, 120707, 194988, 92285, - 64558, 127122, 121425, 67083, 67085, 70099, 71118, 5784, 983102, 195050, - 983812, 70033, 4011, 194565, 68101, 124978, 7864, 4254, 65095, 983498, - 5600, 3903, 127083, 10447, 5598, 1207, 120521, 66689, 3501, 42582, 43600, - 129054, 127103, 1124, 5597, 194778, 194772, 9321, 983486, 75040, 983484, - 67400, 1719, 68356, 68354, 9671, 1125, 4399, 68775, 66274, 983490, 7631, - 5488, 7128, 120532, 0, 5491, 118797, 8937, 43044, 2604, 74187, 5490, - 43046, 5489, 7212, 11768, 43043, 6300, 127121, 7122, 983090, 4390, 454, - 41397, 0, 9875, 7593, 194791, 92274, 118913, 7207, 0, 65901, 2394, 2575, - 119184, 3746, 11016, 65752, 92757, 0, 43423, 128683, 11989, 118889, - 127791, 127995, 78296, 0, 8249, 128172, 11109, 78531, 6640, 74806, 2598, - 513, 127118, 6586, 8656, 129301, 69792, 65008, 194597, 71111, 78383, - 194795, 127474, 92515, 68475, 93973, 194584, 63799, 78637, 12647, 917606, - 128043, 69893, 1036, 68090, 92419, 1723, 68215, 74217, 0, 41579, 2444, - 120722, 10705, 73876, 195054, 74486, 983469, 740, 119222, 194978, 194984, - 0, 4238, 11071, 9459, 43936, 43938, 78139, 194985, 8121, 10438, 74487, - 42574, 13285, 43967, 11907, 43928, 5690, 92255, 5116, 0, 43181, 13095, - 77925, 43926, 64498, 0, 9506, 6978, 70176, 74931, 0, 113743, 78379, - 43934, 127845, 1122, 317, 0, 71055, 120621, 0, 1920, 0, 10173, 827, 0, 0, - 78378, 119600, 5223, 1304, 0, 83526, 5226, 12602, 94044, 5880, 9329, - 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, 69229, 9674, 5695, - 41711, 64627, 19909, 71077, 74604, 5691, 287, 866, 233, 68138, 983443, - 42816, 94036, 65140, 68028, 83093, 8830, 6568, 42300, 10524, 41175, - 83094, 983447, 68827, 5296, 983446, 42492, 43402, 92466, 3302, 0, 74858, - 6516, 6515, 6514, 6513, 6512, 0, 7856, 8690, 983686, 70870, 12122, - 119602, 43976, 194937, 1785, 69925, 68622, 65153, 68809, 5138, 983637, - 71922, 118869, 0, 4540, 41181, 917920, 6200, 0, 5134, 69980, 322, 4643, - 5132, 121184, 6389, 120998, 5143, 83205, 8790, 120911, 120121, 128695, - 71168, 8869, 69916, 93069, 42060, 71326, 9648, 83109, 71170, 10270, - 10286, 10318, 10382, 43529, 66477, 194800, 128534, 74170, 0, 3234, 43835, - 917818, 70111, 43139, 118815, 127084, 120627, 8767, 68231, 74489, 9695, - 72439, 5201, 75061, 6215, 12714, 6214, 13101, 0, 194999, 65268, 7661, 0, + 41348, 41568, 128803, 3253, 120535, 0, 8630, 121209, 194770, 5596, 5545, + 7288, 2586, 64887, 100896, 5217, 71336, 128687, 100898, 121038, 64293, + 68098, 2635, 92760, 83137, 983846, 0, 92742, 7835, 70040, 120707, 194950, + 92285, 64558, 127122, 121425, 67083, 67085, 70099, 71118, 5784, 983102, + 100854, 983812, 70033, 4011, 194565, 68101, 100859, 7864, 4254, 65095, + 120017, 5600, 3903, 100892, 10447, 5598, 1207, 120521, 66689, 3501, + 42582, 43600, 129054, 100913, 1124, 5597, 194778, 194772, 9321, 983486, + 75040, 917972, 67400, 1719, 68356, 68354, 9671, 1125, 4399, 68775, 66274, + 92165, 7631, 5488, 7128, 120532, 120339, 5491, 118797, 8937, 43044, 2604, + 74187, 5490, 43046, 5489, 7212, 11768, 43043, 6300, 127121, 7122, 983090, + 4390, 454, 41397, 983055, 9875, 7593, 194791, 92274, 118913, 7207, + 125062, 65901, 2394, 2575, 119184, 3746, 11016, 65752, 92757, 0, 43423, + 128683, 11989, 118889, 127791, 127995, 78296, 68224, 8249, 2232, 11109, + 78531, 6640, 74806, 2598, 513, 100714, 6586, 8656, 129301, 69792, 65008, + 194597, 71111, 78383, 127252, 127474, 66755, 68475, 93973, 72859, 63799, + 78637, 12647, 917606, 128043, 69893, 1036, 68090, 92419, 1723, 68215, + 74217, 0, 41579, 2444, 120722, 10705, 73876, 195054, 74486, 983469, 740, + 119222, 120305, 194984, 0, 4238, 11071, 9459, 43936, 43938, 78139, + 194985, 8121, 10438, 74487, 42574, 13285, 43967, 11907, 43928, 5690, + 92255, 5116, 128013, 43181, 13095, 77925, 43926, 64498, 0, 9506, 6978, + 70176, 74931, 0, 113743, 78379, 43934, 127845, 1122, 317, 194870, 71055, + 120621, 0, 1920, 129339, 10173, 827, 125236, 0, 78378, 119600, 5223, + 1304, 0, 83526, 5226, 12602, 94044, 5880, 9329, 7758, 9239, 41173, 5224, + 5487, 1222, 5692, 41725, 69229, 9674, 5695, 41711, 64627, 19909, 71077, + 74604, 5691, 287, 866, 233, 68138, 983443, 42816, 94036, 65140, 68028, + 83093, 8830, 6568, 42300, 10524, 41175, 83094, 983447, 68827, 5296, + 983446, 42492, 43402, 92466, 3302, 0, 72842, 6516, 6515, 6514, 6513, + 6512, 0, 7856, 8690, 983686, 70870, 12122, 119602, 43976, 125194, 1785, + 69925, 68622, 65153, 68809, 5138, 129420, 71922, 118869, 100883, 4540, + 41181, 917920, 6200, 82949, 5134, 69980, 322, 4643, 5132, 121184, 6389, + 120998, 5143, 83205, 8790, 120911, 120121, 128695, 71168, 8869, 69916, + 93069, 42060, 71326, 9648, 83109, 71170, 10270, 10286, 10318, 10382, + 43529, 66477, 194800, 125231, 74170, 0, 3234, 43835, 100886, 70111, + 43139, 118815, 127084, 120627, 8767, 68231, 74489, 9695, 72439, 5201, + 75061, 6215, 12714, 6214, 13101, 127869, 194999, 65268, 7661, 121308, 120909, 11027, 128596, 10059, 10511, 42075, 9767, 789, 1749, 78890, - 67115, 983670, 320, 0, 8647, 83054, 3049, 0, 6471, 42071, 43156, 9925, - 127356, 118894, 66478, 4960, 5549, 127359, 127346, 8485, 4671, 5418, + 66766, 983670, 320, 0, 8647, 83054, 3049, 0, 6471, 42071, 43156, 9925, + 127356, 118894, 66478, 4960, 5549, 127359, 100996, 8485, 4671, 5418, 127350, 3351, 120892, 127351, 10610, 5414, 3064, 6212, 4286, 5421, 127344, 9554, 68051, 94048, 66896, 6653, 83044, 83102, 64510, 6213, - 12885, 0, 119045, 64720, 917873, 120759, 73741, 12603, 7131, 11108, 4566, - 7518, 9317, 3801, 10342, 10406, 124938, 119259, 42576, 0, 5200, 92946, - 121435, 983895, 9183, 127361, 74458, 66282, 395, 5482, 5198, 4349, 10390, - 74202, 5196, 43224, 6113, 42009, 5205, 128383, 43307, 70297, 118973, - 70467, 12134, 121167, 0, 118843, 9126, 435, 983624, 12014, 10377, 8093, - 9079, 3203, 192, 65109, 3385, 125075, 64430, 5383, 10294, 10326, 127309, - 5738, 120089, 3336, 78355, 5361, 3623, 41159, 83378, 68112, 7872, 8581, - 0, 1260, 3149, 5359, 120134, 74955, 7914, 5357, 71190, 74339, 2624, 5364, - 983608, 11431, 120030, 9101, 11058, 78288, 67107, 78293, 42271, 78289, - 42917, 67111, 129179, 65566, 6717, 10619, 43360, 78291, 78384, 11832, - 78382, 78381, 78380, 69861, 9319, 7097, 119055, 77906, 3232, 73824, - 74581, 78087, 0, 71205, 41889, 92453, 129144, 1161, 41895, 74103, 9701, - 8622, 125025, 0, 68772, 120588, 5012, 71453, 41362, 69862, 68507, 11921, - 0, 11769, 68782, 68609, 41364, 120947, 74228, 41352, 41361, 917903, - 41366, 0, 3356, 11611, 917, 68422, 119915, 7134, 8199, 78389, 119618, - 677, 119916, 917876, 71482, 127169, 68747, 0, 68738, 3349, 74125, 7022, - 8927, 4739, 92599, 5802, 194874, 8615, 0, 128058, 491, 74401, 10190, - 68755, 65837, 68800, 8426, 11092, 9891, 0, 42497, 7113, 7586, 42305, - 10852, 0, 42648, 4606, 68448, 9095, 7741, 12684, 41885, 1046, 7124, - 128610, 68753, 5815, 5171, 65539, 68612, 6932, 74267, 42394, 41878, - 74849, 74947, 72424, 5169, 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, - 8905, 4136, 4871, 78287, 120663, 9833, 0, 113730, 1128, 65920, 917879, - 9711, 7057, 9408, 9409, 9410, 9411, 3662, 9413, 3378, 9415, 9416, 9417, - 9418, 6320, 9420, 9421, 5897, 9423, 5165, 5126, 41385, 983938, 41389, - 127963, 8955, 3374, 9400, 9401, 7119, 9403, 9404, 3507, 9406, 7629, - 983617, 19925, 42669, 68463, 183, 43985, 2631, 70811, 10627, 41130, - 71079, 3996, 0, 71442, 128913, 119313, 119307, 78768, 6580, 4332, 64825, - 66329, 10726, 66686, 41125, 5899, 41365, 127206, 12085, 66902, 574, - 126705, 77825, 73828, 5448, 41058, 5446, 65932, 41322, 42211, 5442, 4190, - 77834, 77835, 5451, 77833, 3616, 77828, 68817, 77838, 7708, 74759, 2228, - 65867, 10345, 10409, 4191, 120378, 77844, 73800, 42181, 77843, 77839, - 2060, 121193, 7111, 11788, 65376, 68129, 10415, 74102, 983625, 205, - 83040, 10351, 67151, 0, 9862, 6588, 43257, 64697, 73998, 41355, 5505, - 74966, 5503, 8021, 128035, 7125, 9819, 41357, 8011, 42885, 5507, 12044, - 92636, 0, 10026, 5472, 7109, 1191, 13106, 5470, 10329, 5476, 8991, 66322, - 69778, 11133, 42874, 8550, 42876, 5592, 2919, 129052, 2675, 5595, 78411, - 43762, 4367, 127912, 917782, 5478, 5904, 5594, 0, 74150, 7291, 5590, - 43761, 13067, 118909, 75069, 983108, 9731, 69731, 64633, 77857, 77854, - 71217, 77852, 71227, 77850, 10750, 43714, 77858, 7137, 0, 66909, 12887, - 10551, 194564, 77866, 77867, 77864, 77865, 9929, 5199, 9936, 1120, 42387, - 0, 1444, 9486, 7554, 65839, 55252, 73972, 1442, 129080, 5894, 70069, - 128672, 41171, 92511, 70358, 1323, 13162, 120599, 3334, 128704, 92709, - 77881, 66022, 0, 69770, 1651, 120364, 8861, 0, 0, 1142, 983112, 8271, 0, - 983058, 126645, 12903, 78406, 4002, 43626, 10442, 10676, 3344, 128910, - 194787, 12920, 194560, 70497, 194687, 66642, 1277, 66876, 7871, 67106, - 71487, 78853, 129068, 78854, 120360, 983492, 11784, 0, 78012, 4700, - 43856, 78858, 120359, 11012, 983627, 78856, 78448, 77879, 4973, 8784, - 77877, 74804, 77874, 77869, 77871, 42440, 71225, 43118, 119875, 42364, - 6774, 6773, 917560, 120369, 10346, 10410, 78859, 9243, 2464, 74263, 6108, - 3372, 0, 6247, 43117, 70364, 7121, 74166, 124973, 120355, 92537, 194846, - 119877, 195034, 70357, 119922, 0, 67119, 3354, 195037, 4192, 9289, - 118999, 41191, 3876, 0, 70067, 120660, 43696, 43380, 0, 983091, 983965, - 983758, 11603, 983954, 75074, 6589, 128564, 82975, 120993, 67812, 983700, - 0, 129087, 42572, 128264, 10630, 74827, 1963, 11622, 118882, 11654, - 121287, 7550, 10686, 5903, 67098, 78009, 41329, 9662, 917937, 64698, - 3366, 10399, 917938, 5542, 11013, 127927, 71062, 194677, 71461, 67090, - 6925, 0, 0, 92892, 71856, 11568, 983673, 43367, 64579, 917930, 7852, - 11138, 0, 6754, 6312, 77956, 64672, 65296, 0, 118957, 0, 416, 12296, - 68457, 73834, 68177, 11050, 10984, 92208, 0, 0, 92182, 129146, 983605, - 9532, 66355, 119264, 68073, 113695, 64343, 195032, 92744, 195031, 0, - 194847, 195057, 11445, 68294, 2112, 128741, 128814, 10185, 1021, 128130, - 9507, 10210, 74544, 8023, 1200, 12243, 78001, 5282, 78003, 9624, 11545, - 0, 120276, 3343, 4424, 11047, 1885, 43268, 3896, 78444, 66497, 2947, 392, - 7894, 4391, 68139, 121064, 13059, 74816, 77998, 3381, 7942, 0, 69219, - 92433, 3558, 129190, 3913, 70429, 121376, 78235, 7044, 1265, 0, 6309, - 7045, 7175, 7047, 78239, 11791, 983122, 917587, 8221, 78307, 41864, 0, 0, - 67075, 71219, 167, 983906, 78301, 983653, 74211, 41897, 67072, 0, 917583, - 127140, 67076, 2493, 0, 113778, 121245, 78107, 64354, 0, 8777, 127940, - 406, 8884, 2385, 78210, 92450, 917590, 917573, 43030, 42027, 12114, 0, - 128597, 64936, 194695, 119267, 120629, 10561, 128940, 8365, 120539, - 983774, 65841, 120787, 11601, 0, 74121, 128896, 83176, 7834, 74159, 0, - 917574, 10298, 6624, 4908, 917577, 1639, 120842, 0, 70803, 6327, 6724, - 124953, 66354, 92566, 69910, 4817, 11087, 194759, 92536, 7043, 9600, - 11022, 0, 0, 0, 983599, 0, 73954, 7548, 64794, 42050, 12291, 55289, - 128781, 12343, 657, 67110, 42705, 4461, 1134, 1838, 78438, 2057, 0, 4468, - 92891, 194945, 83056, 4456, 5206, 10720, 0, 42523, 127520, 0, 93044, - 129411, 65550, 260, 4816, 67658, 10687, 0, 4821, 4466, 0, 83182, 4818, - 129058, 41403, 119977, 72422, 128458, 41406, 43273, 74160, 69805, 73939, - 92638, 119984, 119979, 41404, 1165, 119980, 4451, 13087, 0, 11284, - 119987, 70097, 65155, 43014, 5439, 9363, 70070, 3375, 128448, 5900, - 93990, 7889, 2722, 42262, 983481, 0, 67078, 128451, 2282, 121422, 127810, - 11401, 67079, 0, 68459, 125028, 983141, 0, 70150, 65438, 0, 7280, 127887, - 68055, 70146, 4868, 8297, 119966, 70148, 125008, 128744, 43161, 70144, - 92360, 0, 5182, 0, 120542, 0, 0, 4226, 70186, 12135, 5732, 4464, 195083, - 71330, 977, 4458, 43827, 92971, 64770, 74838, 0, 344, 0, 121228, 1395, - 64279, 0, 92240, 121179, 786, 126995, 43174, 64340, 83077, 194767, 73971, - 43026, 7612, 10132, 64413, 65025, 0, 0, 0, 93956, 983917, 68444, 0, - 92437, 124928, 92549, 10204, 92656, 83078, 119271, 128431, 1399, 121463, - 65217, 121465, 8852, 120808, 241, 121469, 4907, 128427, 983639, 7932, - 9727, 128463, 74255, 8748, 0, 128428, 983631, 0, 42780, 55263, 113677, - 983560, 4217, 93034, 8650, 127991, 120673, 128215, 69900, 118872, 43099, - 3965, 119119, 6719, 128007, 13300, 78439, 93971, 43057, 66588, 118991, - 66289, 120902, 73815, 4420, 983120, 6410, 7760, 0, 70468, 128752, 120684, - 121246, 7294, 128218, 43869, 120859, 9066, 121321, 11993, 43188, 2626, - 7762, 983866, 118831, 92899, 92601, 42825, 41854, 5304, 70290, 78516, - 6919, 8619, 119655, 10038, 66454, 9592, 42851, 120537, 1542, 92303, - 128819, 0, 127327, 121199, 74311, 78497, 0, 10181, 124937, 43624, 129060, - 7779, 917551, 10195, 9479, 6029, 128374, 92268, 2224, 0, 65577, 8993, - 66358, 0, 42378, 3368, 606, 127030, 7697, 69237, 69787, 2030, 70106, - 6027, 8370, 4322, 0, 65207, 0, 70386, 127903, 983339, 983338, 2735, - 42831, 77935, 70439, 74866, 8881, 119047, 0, 70433, 73946, 0, 194703, 0, + 12885, 127375, 119045, 64720, 917873, 120759, 70737, 12603, 7131, 11108, + 4566, 7518, 9317, 3801, 10342, 10406, 124938, 119259, 42576, 125237, + 5200, 92946, 121435, 983683, 9183, 127361, 74458, 66282, 395, 5482, 5198, + 4349, 10390, 74202, 5196, 43224, 6113, 42009, 5205, 128383, 43307, 70297, + 118973, 70467, 12134, 121167, 0, 118843, 9126, 435, 983624, 12014, 10377, + 8093, 9079, 3203, 192, 65109, 3385, 125075, 64430, 5383, 10294, 10326, + 120932, 5738, 120089, 3336, 78355, 5361, 3623, 41159, 83378, 68112, 7872, + 8581, 983771, 1260, 3149, 5359, 120134, 74955, 7914, 5357, 71190, 74339, + 2624, 5364, 128881, 11431, 100659, 9101, 11058, 78288, 67107, 78293, + 42271, 78289, 42917, 67111, 129179, 65566, 6717, 10619, 43360, 78291, + 78384, 11832, 78382, 78381, 78380, 69861, 9319, 7097, 119055, 77906, + 3232, 73824, 74581, 78087, 983817, 71205, 41889, 92453, 129144, 1161, + 41895, 74103, 9701, 8622, 125025, 0, 68772, 120588, 5012, 71453, 41362, + 69862, 68507, 11921, 0, 11769, 68782, 68609, 41364, 120947, 74228, 41352, + 41361, 917903, 41366, 194809, 3356, 11611, 917, 68422, 119915, 7134, + 8199, 78389, 119618, 677, 119916, 917876, 71482, 127169, 68747, 0, 68738, + 3349, 74125, 7022, 8927, 4739, 92599, 5802, 120047, 8615, 0, 128058, 491, + 74401, 10190, 68755, 65837, 68800, 8426, 11092, 9891, 0, 42497, 7113, + 7586, 42305, 10852, 917580, 42648, 4606, 68448, 9095, 7741, 12684, 41885, + 1046, 7124, 128610, 68753, 5815, 5171, 65539, 68612, 6932, 74267, 42394, + 41878, 74849, 72789, 72424, 5169, 11935, 0, 0, 3175, 120822, 1537, + 119049, 5176, 8905, 2267, 4871, 78287, 120663, 9833, 194850, 113730, + 1128, 65920, 917879, 9711, 7057, 9408, 9409, 9410, 9411, 3662, 9413, + 3378, 9415, 9416, 9417, 9418, 6320, 9420, 9421, 5897, 9423, 5165, 5126, + 41385, 194844, 41389, 127963, 8955, 3374, 9400, 9401, 7119, 9403, 9404, + 3507, 9406, 7629, 983617, 19925, 42669, 68463, 183, 43985, 2631, 70811, + 10627, 41130, 71079, 3996, 0, 71442, 100864, 119313, 119307, 78768, 6580, + 4332, 64825, 66329, 10726, 66686, 41125, 5899, 41365, 127206, 12085, + 66902, 574, 126705, 77825, 73828, 5448, 41058, 5446, 65932, 41322, 42211, + 5442, 4190, 77834, 77835, 5451, 77833, 3616, 77828, 68817, 77838, 7708, + 74759, 2228, 65867, 10345, 10409, 4191, 120378, 77844, 73800, 42181, + 77843, 77839, 2060, 121193, 7111, 11788, 65376, 68129, 10415, 72741, + 195025, 205, 83040, 10351, 67151, 0, 9862, 6588, 43257, 64697, 73998, + 41355, 5505, 70736, 5503, 8021, 128035, 7125, 9819, 41357, 8011, 42885, + 5507, 12044, 92364, 100742, 10026, 5472, 7109, 1191, 13106, 5470, 10329, + 5476, 8991, 66322, 69778, 11133, 42874, 8550, 42876, 5592, 2919, 74516, + 2675, 5595, 78411, 43762, 4367, 83518, 917782, 5478, 5904, 5594, 0, + 74150, 7291, 5590, 43761, 13067, 118909, 75069, 983108, 9731, 69731, + 64633, 77857, 77854, 71217, 77852, 71227, 77850, 10750, 43714, 77858, + 7137, 0, 66909, 12887, 10551, 194564, 77866, 77867, 77864, 77865, 9929, + 5199, 9936, 1120, 42387, 0, 1444, 9486, 7554, 65839, 55252, 72832, 1442, + 129080, 5894, 70069, 128672, 41171, 92511, 70358, 1323, 13162, 120599, + 3334, 128704, 92709, 77881, 66022, 70705, 69770, 1651, 120364, 8861, 0, + 917588, 1142, 983112, 8271, 0, 983058, 126645, 12903, 78406, 4002, 43626, + 10442, 10676, 3344, 128910, 194787, 12920, 194560, 70497, 194687, 66642, + 1277, 66876, 7871, 67106, 71487, 78853, 129068, 78854, 120360, 983492, + 11784, 0, 78012, 4700, 43856, 78858, 120359, 11012, 983627, 78856, 78448, + 77879, 4973, 8784, 77877, 74804, 77874, 77869, 66743, 42440, 71225, + 43118, 119875, 42364, 6774, 6773, 917560, 120369, 10346, 10410, 78859, + 9243, 2464, 74263, 6108, 3372, 122890, 6247, 43117, 70364, 7121, 74166, + 124973, 120355, 92537, 194846, 119877, 195034, 70357, 119922, 0, 67119, + 3354, 195037, 4192, 9289, 118999, 41191, 3876, 0, 70067, 120660, 43696, + 43380, 983625, 983091, 129342, 128450, 11603, 129347, 75074, 6589, + 127360, 82975, 120993, 67812, 127190, 194680, 129087, 42572, 128264, + 10630, 74827, 1963, 11622, 118882, 11654, 121287, 7550, 10686, 5903, + 67098, 78009, 41329, 9662, 917937, 64698, 3366, 10399, 917938, 5542, + 11013, 127927, 71062, 125224, 71461, 67090, 6925, 983274, 0, 92892, + 71856, 11568, 983131, 43367, 64579, 917930, 7852, 11138, 0, 6754, 6312, + 77956, 64672, 65296, 0, 118957, 0, 416, 12296, 68457, 73834, 68177, + 11050, 10984, 92208, 983216, 917822, 92182, 129146, 194636, 9532, 66355, + 119264, 68073, 113695, 64343, 195032, 92744, 127243, 0, 194847, 78838, + 11445, 68294, 2112, 128741, 128814, 10185, 1021, 128130, 9507, 10210, + 74544, 8023, 1200, 12243, 78001, 5282, 72850, 9624, 11545, 0, 120276, + 3343, 4424, 11047, 1885, 43268, 3896, 78444, 66497, 2947, 392, 7894, + 4391, 68139, 121064, 13059, 74816, 77998, 3381, 7942, 0, 69219, 92433, + 3558, 129190, 3913, 70429, 121376, 78235, 7044, 1265, 194660, 6309, 7045, + 7175, 7047, 78239, 11791, 983122, 194584, 3881, 78307, 41864, 127395, + 125208, 67075, 71219, 167, 121101, 72755, 983653, 74211, 41897, 67072, 0, + 917583, 66745, 67076, 2493, 0, 113778, 120530, 78107, 64354, 917593, + 8777, 127940, 406, 8884, 2385, 78210, 92450, 917590, 917573, 43030, + 42027, 12114, 0, 128597, 64936, 100763, 119267, 3421, 10561, 128940, + 8365, 74294, 983774, 65841, 120787, 11601, 0, 74121, 128896, 83176, 7834, + 74159, 0, 917574, 10298, 6624, 4908, 917577, 1639, 120842, 983586, 70803, + 6327, 6724, 71269, 66354, 92566, 69910, 4817, 11087, 194759, 92536, 7043, + 9600, 11022, 128427, 129344, 128354, 983599, 983209, 66771, 7548, 64794, + 42050, 12291, 55289, 128781, 12343, 657, 67110, 42705, 4461, 1134, 1838, + 78438, 2057, 0, 4468, 92891, 127372, 83056, 4456, 5206, 10720, 0, 42523, + 127520, 0, 93044, 128430, 65550, 260, 4816, 67658, 10687, 129319, 4821, + 4466, 0, 83182, 4818, 125257, 41403, 119977, 72422, 128458, 41406, 43273, + 74160, 69805, 73939, 92638, 119984, 119979, 41404, 1165, 119980, 4451, + 13087, 0, 11284, 119987, 70097, 65155, 43014, 5439, 9363, 70070, 3375, + 128448, 5900, 93990, 7889, 2722, 42262, 128313, 0, 67078, 128451, 2282, + 121422, 127810, 11401, 67079, 0, 68459, 125028, 983141, 0, 70150, 65438, + 983760, 7280, 127887, 68055, 70146, 4868, 8297, 119966, 70148, 125008, + 128744, 43161, 66739, 92360, 195070, 5182, 194692, 120542, 72764, 128588, + 4226, 70186, 12135, 5732, 4464, 195083, 71330, 977, 4458, 43827, 92971, + 64770, 74838, 0, 344, 121466, 121228, 1395, 64279, 0, 92240, 121179, 786, + 126995, 43174, 64340, 83077, 194767, 73971, 43026, 7612, 10132, 64413, + 65025, 0, 983468, 128303, 74151, 983917, 68444, 0, 92437, 124928, 92549, + 10204, 92656, 83078, 119271, 128431, 1399, 121463, 65217, 121465, 8852, + 120808, 241, 121469, 4907, 128161, 917927, 7932, 9727, 128463, 74255, + 8748, 0, 128428, 128646, 0, 42780, 55263, 113677, 119856, 4217, 93034, + 8650, 127991, 120673, 72878, 69900, 118872, 43099, 3965, 119119, 6719, + 128007, 13300, 78439, 72836, 43057, 66588, 118991, 66289, 120902, 73815, + 4420, 128533, 6410, 7760, 100999, 70468, 128752, 120684, 100528, 7294, + 128218, 43869, 68204, 9066, 121321, 11993, 43188, 2626, 7762, 983866, + 118831, 92899, 92601, 42825, 41854, 5304, 70290, 78516, 6919, 8619, + 119655, 10038, 66454, 9592, 42851, 120537, 1542, 92303, 128819, 0, + 124940, 121199, 74311, 78497, 121412, 10181, 124937, 43624, 129060, 7779, + 917551, 10195, 9479, 6029, 128374, 92268, 2224, 101079, 65577, 8993, + 66358, 0, 42378, 3368, 606, 66804, 7697, 69237, 69787, 2030, 70106, 6027, + 8370, 4322, 0, 65207, 120629, 70386, 127903, 983339, 983338, 2735, 42831, + 77935, 70439, 74866, 8881, 119047, 129364, 70433, 73946, 0, 194703, 0, 68140, 983928, 9576, 70288, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063, 7709, 41112, 119868, 66560, 8381, 4572, 12876, 66561, 128921, - 6758, 66031, 1615, 5855, 809, 127117, 92283, 128316, 128004, 5799, - 128929, 70100, 128607, 7260, 983326, 43031, 64425, 65128, 78819, 64386, - 65257, 74909, 68616, 120607, 9347, 83360, 6532, 0, 917918, 120860, - 127060, 65828, 120006, 283, 68665, 78813, 532, 78663, 78817, 128021, - 120609, 0, 3370, 917881, 11361, 5443, 71431, 8153, 73767, 0, 10741, - 121503, 2298, 0, 125039, 65495, 64706, 983320, 43344, 983318, 7144, 9466, - 78866, 9824, 67142, 128963, 67133, 67130, 915, 43425, 67292, 43865, - 68232, 983111, 120888, 43264, 67136, 67137, 0, 43038, 78864, 6730, 78862, - 68161, 64550, 5186, 7360, 127837, 70451, 12108, 120644, 65124, 43127, - 66043, 0, 6326, 43107, 77826, 0, 42562, 0, 128821, 128178, 120919, 11485, - 6103, 92468, 983307, 11718, 983305, 12889, 92657, 125034, 120635, 127157, - 121128, 55245, 128709, 1630, 83027, 65483, 120634, 12565, 0, 65476, - 70369, 983072, 83029, 9283, 7700, 917537, 9690, 65499, 0, 64593, 512, - 3376, 68080, 0, 128253, 77892, 632, 12940, 77891, 42529, 78587, 194604, - 5957, 110593, 8926, 983301, 983300, 128273, 10745, 10174, 7379, 64581, - 5386, 120686, 11713, 10633, 69708, 5056, 0, 0, 0, 120773, 94055, 9812, 0, - 4460, 78791, 124956, 71307, 128038, 0, 121135, 127174, 64278, 92370, - 43466, 0, 0, 64389, 2953, 70122, 1801, 12835, 74847, 120867, 73823, - 83110, 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 66299, - 983287, 71447, 12106, 120972, 74207, 1755, 10482, 12863, 77898, 1163, - 2951, 9522, 67816, 78266, 66604, 983860, 3384, 69227, 10702, 830, 77902, - 77899, 77900, 8451, 83324, 0, 0, 66458, 128957, 128870, 74896, 0, 2908, - 0, 11177, 64902, 4243, 92454, 12239, 121003, 124959, 4441, 0, 82968, - 73940, 64352, 127513, 125031, 411, 983275, 9199, 983273, 4056, 118992, - 41890, 128592, 2730, 41604, 128355, 5428, 194743, 3364, 42265, 64437, - 127935, 118816, 71458, 9684, 216, 71367, 1401, 128053, 44012, 92628, - 71456, 92585, 9158, 66878, 11126, 5768, 0, 983759, 0, 484, 194739, 0, 0, - 65895, 125076, 121380, 3338, 73935, 572, 7041, 2736, 67605, 127543, - 93962, 2794, 8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, - 5456, 5509, 77846, 194747, 9534, 129109, 129040, 0, 3430, 0, 42905, - 78717, 74929, 981, 129184, 4330, 73929, 120536, 1824, 10908, 126506, - 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547, 128259, 674, 63991, - 983251, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 8364, 5123, 119628, - 5281, 5469, 5121, 77989, 118993, 0, 5130, 83180, 128357, 77990, 0, - 120726, 1221, 2733, 11746, 77991, 5216, 119268, 0, 128475, 92187, 3468, - 7033, 9230, 5939, 128397, 0, 5803, 71867, 68400, 7278, 10321, 10289, - 64613, 10385, 41706, 0, 0, 917939, 0, 11739, 77986, 41981, 92743, 5938, - 0, 43766, 12448, 7576, 10401, 10337, 73852, 124994, 13057, 0, 126976, - 129081, 10009, 0, 41703, 120950, 12165, 129191, 0, 9885, 0, 8077, 92620, - 127908, 121044, 194995, 0, 92457, 129138, 4220, 10725, 10433, 0, 68395, - 4987, 64519, 121265, 125078, 0, 194813, 128574, 10970, 11733, 0, 120792, - 126490, 19944, 74356, 9009, 8551, 92345, 11468, 64636, 7575, 0, 2724, - 128899, 0, 12313, 11151, 515, 119947, 42791, 63987, 78286, 119943, - 119940, 119941, 119938, 9775, 4046, 4589, 4521, 68629, 9141, 917904, - 78850, 2741, 64399, 6197, 1370, 0, 120841, 0, 125062, 983441, 120843, - 6184, 8606, 3303, 41372, 11786, 9473, 66203, 66177, 92446, 11593, 43007, - 4478, 66178, 0, 0, 2744, 0, 4477, 78267, 814, 42066, 66183, 66204, 43786, - 119961, 66198, 41880, 66188, 11623, 78148, 11955, 66190, 66191, 41111, - 66189, 73788, 7788, 4847, 983428, 127759, 0, 128433, 2221, 1581, 6535, + 6758, 66031, 1615, 5855, 809, 127117, 92283, 72853, 128004, 5799, 128929, + 70100, 128607, 7260, 983326, 43031, 64425, 65128, 78819, 64386, 65257, + 74909, 68616, 120607, 9347, 83360, 6532, 0, 195062, 120860, 127060, + 65828, 120006, 283, 68665, 78813, 532, 78642, 78817, 128021, 120609, 0, + 3370, 917881, 11361, 5443, 71431, 8153, 73767, 0, 10741, 121503, 2298, 0, + 125039, 65495, 64706, 983320, 43344, 983318, 7144, 9466, 78866, 9824, + 67142, 128963, 67133, 67130, 915, 43425, 67292, 43865, 68232, 983111, + 120888, 43264, 67136, 67137, 0, 43038, 78864, 6730, 78862, 68161, 64550, + 5186, 7360, 127837, 70451, 12108, 120644, 65124, 43127, 66043, 0, 6326, + 43107, 77826, 0, 42562, 0, 128821, 120328, 120919, 11485, 6103, 92468, + 121075, 11718, 983305, 12889, 92657, 125034, 120635, 101070, 121128, + 55245, 128709, 1630, 83027, 65483, 120634, 12565, 0, 65476, 70369, + 983072, 83029, 9283, 7700, 121192, 9690, 65499, 0, 64593, 512, 3376, + 68080, 0, 128253, 77892, 632, 12940, 77891, 42529, 78587, 101078, 5957, + 110593, 8926, 195072, 983300, 128273, 10745, 10174, 7379, 64581, 5386, + 120686, 11713, 10633, 69708, 5056, 100679, 127824, 12151, 120773, 94055, + 9812, 0, 4460, 78791, 124956, 71307, 128038, 0, 121135, 127174, 64278, + 92370, 43466, 0, 66760, 64389, 2953, 70122, 1801, 12835, 74847, 120867, + 73823, 83110, 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 66299, + 194775, 71447, 12106, 120972, 74207, 1755, 10482, 12863, 77898, 1163, + 2951, 9522, 67816, 78266, 66604, 101059, 3384, 69227, 10702, 830, 77902, + 77899, 77900, 8451, 83324, 0, 0, 66458, 128957, 127301, 74896, 0, 2908, + 983558, 11177, 64902, 4243, 92454, 12239, 121003, 124959, 4441, 124929, + 82968, 73940, 64352, 127513, 121066, 411, 127525, 9199, 983273, 4056, + 118992, 41890, 128592, 2730, 41604, 128355, 5428, 194743, 3364, 42265, + 64437, 127935, 118816, 71458, 9684, 216, 71367, 1401, 128053, 44012, + 92628, 71456, 92585, 9158, 66878, 11126, 5768, 101064, 983759, 0, 484, + 194739, 0, 0, 65895, 125076, 100524, 3338, 73935, 572, 7041, 2736, 67605, + 127543, 93962, 2794, 8807, 64491, 77847, 5438, 5222, 5381, 43114, 128705, + 5193, 5125, 5456, 5509, 77846, 194747, 9534, 66767, 129040, 119967, 3430, + 983397, 42905, 78717, 74929, 981, 129184, 4330, 73929, 120536, 1824, + 10908, 126506, 7034, 41683, 64617, 119138, 73754, 3957, 64358, 64547, + 128259, 674, 63991, 983251, 2946, 5354, 5251, 5328, 5307, 3759, 11411, + 8364, 5123, 119628, 5281, 5469, 5121, 77989, 118993, 0, 5130, 83180, + 128357, 77990, 0, 120726, 1221, 2733, 11746, 77991, 5216, 119268, 0, + 128475, 92187, 3468, 7033, 9230, 5939, 128397, 120010, 5803, 71867, + 68400, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 67115, 66753, + 11739, 77986, 41981, 92743, 5938, 0, 43766, 12448, 7576, 10401, 10337, + 73852, 100684, 13057, 983277, 126976, 129081, 10009, 917905, 41703, + 120950, 12165, 129191, 983757, 9885, 194814, 8077, 92620, 127908, 121044, + 194995, 0, 92457, 129138, 4220, 10725, 10433, 0, 68395, 4987, 64519, + 121265, 125078, 129185, 194813, 124999, 10970, 11733, 0, 120792, 126490, + 19944, 74356, 9009, 8551, 92345, 11468, 64636, 7575, 0, 2724, 100889, + 127390, 12313, 11151, 515, 119947, 42791, 63987, 78286, 119943, 119940, + 119941, 100890, 9775, 4046, 4589, 4521, 68629, 9141, 917904, 78850, 2741, + 64399, 6197, 1370, 983948, 120841, 0, 100887, 983441, 71273, 6184, 8606, + 3303, 41372, 11786, 9473, 66203, 3422, 92446, 11593, 43007, 4478, 66178, + 0, 0, 2744, 0, 4477, 78267, 814, 42066, 66183, 66204, 43786, 119961, + 66198, 41880, 66188, 11623, 78148, 11955, 66190, 66191, 41111, 66189, + 73788, 7788, 4847, 128366, 127759, 70725, 128433, 2221, 1581, 6535, 78161, 12954, 430, 78160, 55259, 73944, 128036, 5278, 4945, 42883, 4950, 983440, 68625, 983438, 7269, 128499, 5964, 12908, 124997, 0, 74764, - 43512, 119146, 194936, 4949, 983431, 443, 983429, 4944, 5467, 119603, - 70865, 65137, 6044, 65392, 0, 4213, 0, 41303, 917556, 194931, 119962, - 41306, 73984, 2698, 127159, 0, 12072, 3193, 0, 41304, 824, 128676, 12091, - 67118, 78894, 119816, 4673, 64804, 4678, 119820, 119819, 65059, 43860, - 6739, 66844, 5481, 3490, 1199, 119811, 8356, 69947, 67702, 4677, 12688, - 3102, 0, 4672, 78173, 78175, 5531, 68367, 42575, 78170, 78166, 4674, - 4548, 44005, 71087, 68658, 119946, 8025, 68630, 127024, 1855, 127475, - 68669, 118990, 92445, 127554, 126630, 127339, 119652, 2745, 11797, - 983419, 128159, 9202, 4654, 6840, 983416, 68638, 73993, 10525, 4649, - 65209, 121512, 121511, 4648, 43080, 75070, 121507, 983406, 6246, 64950, - 7828, 4650, 6777, 6776, 6775, 4653, 7822, 70287, 74624, 43187, 8669, - 120659, 6821, 65093, 983565, 78881, 2716, 983412, 983060, 70503, 194952, - 68369, 120054, 11060, 8547, 2711, 42165, 78027, 78026, 6836, 983423, 0, - 4662, 78033, 78032, 9149, 9146, 599, 2081, 78031, 78030, 194962, 4656, - 10130, 68450, 7811, 40994, 194965, 6414, 5967, 4658, 3725, 5713, 5814, - 4661, 42434, 983413, 128737, 11190, 64904, 9026, 10833, 74864, 7547, - 4867, 11100, 10008, 10222, 3054, 194956, 9744, 78860, 7605, 4622, 119656, - 43888, 70303, 983395, 69905, 67188, 9045, 78888, 4225, 19926, 68831, - 12880, 65307, 4617, 68757, 983388, 41732, 4616, 10518, 10423, 10359, - 983382, 5958, 0, 983435, 4215, 9789, 119619, 4321, 4621, 195028, 41313, - 522, 5368, 11139, 65803, 128546, 5366, 12201, 5372, 121060, 119949, - 194975, 7720, 7390, 2696, 983402, 0, 4638, 983407, 1790, 78242, 5965, - 64363, 66569, 68646, 68477, 5376, 1835, 5335, 121505, 128089, 4633, 0, - 68119, 1180, 4632, 67191, 5387, 5333, 0, 125132, 42094, 5331, 4634, - 11928, 983594, 5338, 4637, 128170, 5971, 42414, 43500, 1268, 65097, - 42361, 0, 0, 73853, 1427, 128440, 0, 5970, 3431, 0, 10358, 10422, 4758, - 983376, 1608, 2738, 125066, 10455, 4753, 74026, 11344, 4222, 6240, 5231, - 74384, 66611, 68377, 6248, 983364, 67815, 78878, 42318, 92582, 5229, - 4757, 0, 126576, 2728, 4752, 64563, 65235, 5234, 0, 128145, 128926, - 10713, 7166, 0, 2622, 7460, 83124, 67101, 126495, 8954, 74760, 65189, - 2632, 42617, 10108, 1011, 5574, 1853, 2709, 65139, 5577, 128966, 0, - 118871, 68641, 8965, 7635, 42177, 5316, 0, 5314, 6451, 5572, 66464, 5312, - 0, 5525, 5330, 5319, 68292, 127311, 65066, 44003, 68437, 983482, 43843, - 120498, 127851, 43918, 74851, 74022, 983424, 64609, 68643, 67410, 128593, - 5721, 74892, 5519, 8632, 66465, 11267, 73961, 92278, 5720, 78778, 1692, - 4219, 4610, 8696, 4305, 0, 4609, 43478, 4614, 541, 983242, 5287, 5309, - 5285, 68389, 5961, 4647, 56, 4216, 10577, 41381, 601, 4613, 120479, - 983348, 9208, 4608, 43966, 41124, 5190, 67628, 66826, 68145, 7086, 0, - 67998, 67620, 93047, 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 67722, - 8992, 42593, 128260, 1782, 67622, 68114, 119939, 0, 68180, 5501, 119952, - 42508, 7442, 43665, 359, 41253, 68392, 6239, 43900, 41256, 74132, 67740, - 0, 71178, 917550, 9346, 69660, 41254, 128047, 43291, 3767, 5737, 0, 4865, - 0, 5740, 917997, 5736, 4368, 64724, 7193, 67097, 128844, 5739, 41024, - 4866, 983880, 73904, 121420, 4869, 120563, 129172, 4223, 128201, 6650, - 126509, 0, 120212, 119872, 4870, 120445, 68661, 6716, 78176, 68667, - 68382, 68676, 127925, 10122, 4864, 66568, 4144, 7937, 83193, 6245, 68652, - 2732, 42734, 745, 68045, 195097, 92195, 4777, 7821, 129136, 68631, 42775, + 43512, 119146, 194936, 4949, 983431, 443, 122902, 4944, 5467, 119603, + 70865, 65137, 6044, 65392, 983119, 4213, 0, 41303, 917556, 194931, + 119962, 41306, 73984, 2698, 127159, 0, 12072, 3193, 0, 41304, 824, + 128676, 12091, 67118, 78894, 119816, 4673, 64804, 4678, 119820, 119819, + 65059, 43860, 6739, 66844, 5481, 3490, 1199, 119811, 8356, 69947, 67702, + 4677, 12688, 3102, 0, 4672, 78173, 78175, 5531, 68367, 42575, 78170, + 78166, 4674, 4548, 44005, 71087, 68658, 119946, 8025, 68630, 127024, + 1855, 127475, 68669, 118990, 92445, 127554, 126630, 127339, 119652, 2745, + 11797, 983419, 128159, 9202, 4654, 6840, 122909, 68638, 73993, 10525, + 4649, 65209, 121512, 120245, 4648, 43080, 75070, 121507, 983406, 6246, + 64950, 7828, 4650, 6777, 6776, 6775, 4653, 7822, 70287, 74624, 43187, + 8669, 120659, 6821, 65093, 983565, 78881, 2716, 983412, 983060, 66756, + 194952, 68369, 120054, 11060, 8547, 2711, 42165, 78027, 78026, 6836, + 983423, 983421, 4662, 78033, 78032, 9149, 9146, 599, 2081, 78031, 78030, + 194962, 4656, 10130, 68450, 7811, 40994, 194702, 6414, 5967, 4658, 3725, + 5713, 5814, 4661, 42434, 983413, 118997, 11190, 64904, 9026, 10833, + 74864, 7547, 4867, 11100, 10008, 10222, 3054, 194956, 9744, 78860, 7605, + 4622, 119656, 43888, 70303, 983395, 69905, 67188, 9045, 78888, 4225, + 19926, 68831, 12880, 65307, 4617, 68757, 78008, 41732, 4616, 10518, + 10423, 10359, 983382, 5958, 0, 983435, 4215, 9789, 119619, 4321, 4621, + 195028, 41313, 522, 5368, 11139, 65803, 128546, 5366, 12201, 5372, + 121060, 119948, 127064, 7720, 7390, 2696, 119657, 983115, 4638, 983407, + 1790, 78242, 5965, 64363, 66569, 68646, 68477, 5376, 1835, 5335, 121505, + 128089, 4633, 983418, 68119, 1180, 4632, 67191, 5387, 5333, 0, 125132, + 42094, 5331, 4634, 11928, 100952, 5338, 4637, 121070, 5971, 42414, 43500, + 1268, 65097, 42361, 128510, 917605, 73853, 1427, 128440, 0, 5970, 3431, + 983417, 10358, 10422, 4758, 983376, 1608, 2738, 125066, 10455, 4753, + 74026, 11344, 4222, 6240, 5231, 74384, 66611, 68377, 6248, 983364, 67815, + 78878, 42318, 92582, 5229, 4757, 125215, 126576, 2728, 4752, 64563, + 65235, 5234, 0, 128145, 127487, 10713, 7166, 0, 2622, 7460, 83124, 67101, + 126495, 8954, 74760, 65189, 2632, 42617, 10108, 1011, 5574, 1853, 2709, + 65139, 5577, 128966, 983088, 118871, 68641, 8965, 7635, 42177, 5316, + 917877, 5314, 6451, 5572, 66464, 5312, 127006, 5525, 5330, 5319, 68292, + 127311, 65066, 44003, 68437, 127299, 43843, 120498, 127851, 43918, 74851, + 74022, 983424, 64609, 68643, 67410, 128593, 5721, 74892, 5519, 8632, + 66465, 11267, 73961, 92278, 5720, 78778, 1692, 4219, 4610, 8696, 4305, + 75052, 4609, 43478, 4614, 541, 983242, 5287, 5309, 5285, 68389, 5961, + 4647, 56, 4216, 10577, 41381, 601, 4613, 120479, 983348, 9208, 4608, + 43966, 41124, 5190, 67628, 66826, 68145, 7086, 2265, 67998, 67620, 93047, + 2734, 11074, 0, 67627, 43593, 128758, 67625, 5960, 67722, 8992, 42593, + 128260, 1782, 67622, 68114, 119939, 0, 68180, 5501, 119952, 42508, 7442, + 43665, 359, 41253, 68392, 6239, 43900, 41256, 74132, 67740, 129309, + 71178, 917550, 9346, 69660, 41254, 128047, 43291, 3767, 5737, 917896, + 4865, 0, 5740, 917997, 5736, 4368, 64724, 7193, 67097, 128844, 5739, + 41024, 4866, 983855, 73904, 70726, 4869, 120563, 129172, 4223, 128201, + 6650, 126509, 0, 120212, 119872, 4870, 120445, 68661, 6716, 78176, 68667, + 68382, 68676, 127925, 10122, 4864, 66568, 4144, 7937, 72821, 6245, 68652, + 2732, 42734, 745, 68045, 128933, 92195, 4777, 7821, 128870, 68631, 42775, 194661, 128445, 120679, 3097, 120908, 5966, 121197, 4778, 126469, 10863, 127506, 4781, 92986, 64407, 128503, 128323, 8577, 71221, 68196, 43285, - 10216, 4782, 983485, 983411, 120757, 68618, 12325, 43056, 8717, 0, 0, - 4776, 73818, 11492, 8700, 129128, 13176, 68363, 10426, 67247, 71091, + 10216, 4782, 983485, 983411, 120757, 68618, 12325, 43056, 8717, 127118, + 0, 4776, 73818, 11492, 8700, 129128, 13176, 68363, 10426, 67247, 71091, 10362, 194706, 1715, 4849, 8242, 9561, 73922, 43278, 42635, 0, 127207, - 5963, 917926, 983483, 0, 4850, 73900, 1607, 466, 4853, 118995, 4854, + 5963, 120786, 125201, 0, 4850, 73900, 1607, 466, 4853, 118995, 4854, 127918, 5164, 73807, 1350, 5124, 64420, 1993, 5362, 8471, 2708, 92471, - 12445, 3785, 234, 3199, 121273, 41268, 4848, 2530, 74941, 2068, 1964, 0, - 73762, 10458, 983417, 8576, 78543, 0, 2704, 4794, 121102, 68211, 8322, - 4797, 5753, 0, 2694, 4792, 0, 2439, 65104, 69804, 983426, 303, 74625, - 68229, 983427, 2437, 78659, 4221, 4844, 92216, 0, 0, 0, 70042, 74095, - 43292, 0, 2441, 10739, 65090, 194622, 70436, 118929, 2451, 2714, 119326, - 0, 43379, 4937, 43376, 753, 5849, 10597, 43089, 11722, 9248, 92555, - 42879, 11725, 917969, 0, 2726, 3107, 73958, 4941, 64937, 119233, 9140, - 1408, 5261, 4607, 194715, 181, 983432, 4942, 9539, 4938, 0, 65201, 5259, - 9369, 64185, 4142, 5257, 983601, 6844, 4964, 5264, 64178, 64177, 12979, - 41411, 64182, 64181, 64180, 64179, 9482, 4873, 41231, 1822, 42526, - 127989, 12758, 3865, 194660, 121129, 10500, 0, 119024, 78028, 92408, - 9830, 43642, 389, 10893, 7521, 127879, 4872, 5463, 128119, 3125, 9567, 0, - 4878, 5459, 4604, 119650, 9557, 5465, 68617, 0, 11494, 126492, 9563, - 10865, 74570, 43279, 64186, 68521, 78714, 64191, 64190, 8898, 64188, - 129153, 41030, 74226, 78713, 74600, 74994, 917834, 0, 78805, 41031, - 78801, 11960, 6745, 3082, 983269, 78539, 73919, 10573, 41744, 7079, 5856, - 67838, 5163, 78809, 128162, 1817, 66724, 78538, 119010, 10564, 7763, - 13077, 41813, 4400, 41745, 64207, 10275, 8925, 10371, 10307, 41814, 4248, - 77979, 0, 4541, 6299, 64204, 64203, 64201, 64200, 64199, 64198, 126471, - 42156, 78688, 0, 64193, 64192, 65223, 9943, 64197, 64196, 64195, 64194, - 12231, 42652, 64174, 64173, 78189, 846, 78186, 9965, 74495, 83492, 83493, - 83494, 2543, 12163, 3108, 9745, 64167, 64166, 64165, 64164, 2110, 92176, - 64169, 64168, 64949, 10972, 10251, 10247, 42768, 715, 2295, 43299, 9453, - 5348, 10943, 66390, 0, 11352, 550, 9910, 125127, 0, 66579, 11551, 128464, - 195080, 9504, 7187, 82957, 10373, 983418, 120375, 10261, 10253, 6404, - 10277, 78183, 11984, 1552, 65222, 6998, 78180, 71429, 3128, 4789, 5067, - 5066, 118849, 4784, 0, 8827, 1146, 5065, 69890, 78192, 68136, 78190, - 43412, 5064, 2431, 0, 9450, 1809, 0, 78200, 78201, 5062, 1264, 64817, - 13254, 11697, 126598, 9785, 64716, 0, 3933, 74559, 4740, 7954, 0, 125023, - 42609, 119855, 74175, 66912, 127016, 0, 121300, 42130, 121046, 5151, - 121346, 83488, 0, 93980, 917802, 7620, 3800, 65122, 83487, 83480, 8355, + 12445, 3785, 234, 3199, 121273, 41268, 4848, 2530, 74941, 2068, 1964, + 128217, 73762, 10458, 128125, 8576, 78543, 0, 2704, 4794, 121102, 68211, + 8322, 4797, 5753, 0, 2694, 4792, 128163, 2439, 65104, 69804, 983426, 303, + 74625, 68229, 983420, 2437, 78659, 4221, 4844, 92216, 983805, 0, 0, + 70042, 74095, 43292, 983656, 2441, 10739, 65090, 194622, 70436, 118929, + 2451, 2714, 119326, 0, 43379, 4937, 43376, 753, 5849, 10597, 43089, + 11722, 9248, 92555, 42879, 11725, 120687, 0, 2726, 3107, 73958, 4941, + 64937, 119233, 9140, 1408, 5261, 4607, 129353, 181, 983432, 4942, 9539, + 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 983601, 6844, 4964, 5264, + 64178, 64177, 12979, 41411, 64182, 64181, 64180, 64179, 9482, 4873, + 41231, 1822, 42526, 92344, 12758, 3865, 122918, 121129, 10500, 0, 119024, + 78028, 78003, 9830, 43642, 389, 10893, 7521, 127879, 4872, 5463, 128119, + 3125, 9567, 983291, 4878, 5459, 4604, 119650, 9557, 5465, 68617, 0, + 11494, 126492, 9563, 10865, 74570, 43279, 64186, 68521, 78714, 64191, + 64190, 8898, 64188, 129153, 41030, 74226, 78713, 74600, 74994, 917834, 0, + 78805, 41031, 78801, 11960, 6745, 3082, 126581, 78539, 73919, 10573, + 41744, 7079, 5856, 67838, 5163, 78809, 128162, 1817, 66724, 78538, + 119010, 10564, 7763, 13077, 41813, 4400, 41745, 64207, 10275, 8925, + 10371, 10307, 41814, 4248, 77979, 72802, 4541, 6299, 64204, 64203, 64201, + 64200, 64199, 64198, 126471, 42156, 78688, 0, 64193, 64192, 65223, 9943, + 64197, 64196, 64195, 64194, 12231, 42652, 64174, 64173, 78189, 846, + 78186, 9965, 74495, 83492, 83493, 83494, 2543, 12163, 3108, 9745, 64167, + 64166, 64165, 64164, 2110, 92176, 64169, 64168, 64949, 10972, 10251, + 10247, 42768, 715, 2295, 43299, 9453, 5348, 10943, 66390, 0, 11352, 550, + 9910, 125127, 0, 66579, 11551, 128464, 195080, 9504, 7187, 82957, 10373, + 983153, 120375, 10261, 10253, 6404, 10277, 78183, 11984, 1552, 65222, + 6998, 78180, 71429, 3128, 4789, 5067, 5066, 118849, 4784, 128394, 8827, + 1146, 5065, 69890, 78192, 68136, 78190, 43412, 5064, 2431, 194926, 9450, + 1809, 983588, 78200, 78201, 5062, 1264, 64817, 13254, 11697, 126598, + 9785, 64716, 128279, 3933, 74559, 4740, 7954, 128739, 101100, 42609, + 119855, 74175, 66912, 127016, 0, 121300, 42130, 121046, 5151, 121346, + 70743, 983715, 93980, 917802, 7620, 3800, 65122, 83487, 83480, 8355, 7854, 83483, 954, 64927, 4185, 41045, 127141, 41438, 41439, 68666, 10711, - 4593, 82993, 120584, 983410, 64774, 8053, 10532, 66727, 983414, 0, 78642, - 64759, 1325, 5166, 9888, 127800, 5148, 42834, 0, 78205, 78206, 43787, - 78204, 43913, 3119, 917814, 0, 3060, 64135, 9986, 74996, 77876, 636, - 11698, 83476, 82961, 9916, 11701, 7836, 42741, 64137, 8320, 78640, 8863, - 70201, 119960, 1477, 43289, 68492, 67164, 8618, 983404, 9908, 74972, 0, - 0, 3937, 12312, 0, 983405, 0, 64781, 912, 6349, 4536, 93954, 74532, - 126594, 6244, 92209, 71341, 3935, 120665, 128969, 0, 11950, 5392, 42248, - 65129, 68656, 5397, 128310, 12046, 12599, 67407, 128261, 5395, 0, 5393, - 354, 68615, 77853, 74366, 121404, 0, 42039, 113817, 0, 64142, 626, 0, - 5895, 0, 43910, 5780, 0, 10220, 121337, 43907, 71121, 43297, 70188, 4311, - 4644, 8818, 78158, 128186, 128869, 7145, 3918, 66452, 3797, 1644, 92346, - 9658, 4140, 11385, 65947, 6455, 9030, 813, 119945, 68131, 4146, 119957, - 5360, 2466, 0, 67669, 94020, 6249, 42117, 68828, 92206, 128023, 119255, - 74046, 43745, 4911, 988, 71180, 0, 983470, 43061, 7054, 64147, 983847, - 64920, 68195, 6698, 118933, 92506, 0, 70849, 11981, 12202, 195087, 11032, - 67654, 6093, 11608, 975, 66415, 65843, 170, 0, 67239, 4169, 0, 41859, - 6058, 120401, 13203, 120657, 70507, 125091, 68657, 9818, 10178, 10324, - 42106, 5898, 74540, 4738, 41856, 7062, 127120, 4737, 11779, 4742, 83425, - 68758, 68342, 83420, 9825, 6448, 6715, 127008, 4831, 83418, 83419, 67731, - 5300, 4741, 42108, 127057, 64159, 4736, 64148, 92634, 849, 92191, 78491, - 43288, 0, 66620, 127533, 127331, 65549, 9496, 64598, 118866, 983368, - 7876, 68132, 66280, 3928, 917870, 43378, 10706, 7198, 120890, 4842, - 12053, 128129, 68746, 4841, 0, 4171, 12008, 6251, 3923, 1490, 83411, - 83412, 126512, 40972, 5245, 70794, 10114, 42001, 41888, 4845, 8332, - 40974, 64347, 4840, 9077, 78346, 1747, 917849, 4825, 69240, 121443, - 68655, 0, 983390, 0, 0, 68628, 983349, 9850, 118937, 367, 1472, 917859, - 6687, 1274, 195022, 5905, 12339, 8919, 73953, 10907, 65261, 11023, - 119559, 4830, 9134, 78666, 64126, 43011, 83297, 78669, 64101, 0, 128434, - 4824, 10614, 119659, 126993, 1888, 1960, 7861, 83416, 78524, 41836, - 43012, 6052, 6064, 54, 43009, 12214, 83260, 6211, 120386, 358, 41997, - 41833, 11442, 10758, 65774, 113823, 120384, 64115, 92221, 70018, 983611, - 983708, 119053, 0, 12765, 64118, 126998, 12962, 0, 126580, 4017, 12827, - 5241, 120392, 0, 41118, 3924, 983894, 11366, 129084, 0, 0, 83401, 41116, + 4593, 82993, 120584, 128669, 64774, 8053, 10532, 66727, 127505, 983594, + 66795, 64759, 1325, 5166, 9888, 127800, 5148, 42834, 0, 78205, 78206, + 43787, 78204, 43913, 3119, 127257, 0, 3060, 64135, 9986, 74996, 77876, + 636, 11698, 83476, 82961, 9916, 11701, 7836, 42741, 64137, 8320, 78640, + 8863, 70201, 119960, 1477, 43289, 68492, 67164, 8618, 983404, 9908, + 74972, 0, 119147, 3414, 12312, 120832, 120727, 121264, 64781, 912, 6349, + 4536, 93954, 74532, 126594, 6244, 92209, 71341, 3935, 120665, 128316, 0, + 11950, 5392, 42248, 65129, 68656, 5397, 128310, 12046, 12599, 67407, + 126542, 5395, 72870, 5393, 354, 68615, 77853, 74366, 121404, 121266, + 42039, 113817, 128671, 64142, 626, 128244, 5895, 983573, 43910, 5780, 0, + 10220, 121337, 43907, 71121, 43297, 70188, 4311, 4644, 8818, 78158, + 128186, 128869, 7145, 3918, 66452, 3797, 1644, 92346, 9658, 4140, 11385, + 65947, 6455, 9030, 813, 119945, 68131, 4146, 119957, 5360, 2466, 70669, + 67669, 94020, 6249, 42117, 68828, 92206, 128023, 101048, 74046, 43745, + 4911, 988, 71180, 983337, 983470, 43061, 7054, 64147, 101042, 64920, + 68195, 6698, 118933, 92506, 0, 70849, 11981, 12202, 195087, 11032, 67654, + 6093, 11608, 975, 66415, 65843, 170, 0, 67239, 4169, 119938, 41859, 6058, + 120401, 13203, 120402, 70507, 120403, 68657, 9818, 10178, 10324, 42106, + 5898, 74540, 4738, 41856, 7062, 120142, 4737, 11779, 4742, 83425, 68758, + 68342, 41374, 9825, 6448, 6715, 127008, 4831, 83418, 83419, 67731, 5300, + 4741, 42108, 127057, 64159, 4736, 64148, 92634, 849, 92191, 78491, 43288, + 0, 66620, 127533, 127331, 65549, 9496, 64598, 118866, 983368, 7876, + 68132, 66280, 3928, 917870, 43378, 10706, 7198, 120890, 4842, 12053, + 128129, 68746, 4841, 129334, 4171, 12008, 6251, 3923, 1490, 83411, 83412, + 126512, 40972, 5245, 70794, 10114, 42001, 41888, 4845, 8332, 40974, + 64347, 4840, 9077, 78346, 1747, 72851, 4825, 69240, 121443, 68655, 0, + 128537, 0, 0, 68628, 983349, 9850, 118937, 367, 1472, 917859, 6687, 1274, + 195022, 5905, 12339, 8919, 73953, 10907, 65261, 11023, 119559, 4830, + 9134, 78666, 64126, 43011, 83297, 78669, 64101, 0, 128434, 4824, 10614, + 119659, 126993, 1888, 1960, 7861, 83416, 78524, 41836, 43012, 6052, 6064, + 54, 43009, 12214, 83260, 6211, 120386, 358, 41997, 41833, 11442, 10758, + 65774, 113823, 120384, 64115, 92221, 70018, 983611, 983708, 92408, + 128082, 12765, 64118, 126998, 12962, 119632, 126580, 4017, 12827, 5241, + 120392, 127900, 41118, 3924, 983894, 11366, 129084, 0, 0, 83401, 41116, 83403, 83404, 83397, 11363, 12057, 11917, 1567, 74000, 4721, 83396, - 66202, 8957, 4139, 70512, 0, 983074, 0, 0, 12740, 121470, 4722, 6816, - 124974, 12759, 4725, 67099, 4726, 83467, 83468, 983622, 70029, 83463, - 74913, 12755, 12762, 4015, 67690, 8052, 476, 0, 74893, 128294, 64212, - 41020, 1382, 64209, 64216, 44002, 64214, 1656, 41831, 127553, 125121, - 41843, 8720, 3908, 1452, 13111, 983421, 64067, 92287, 8552, 64113, 41845, - 3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 119085, 83302, - 917610, 7935, 2420, 0, 1114, 78120, 67585, 70104, 70432, 83447, 74920, - 3938, 120057, 65417, 64717, 120060, 71920, 65415, 66884, 6292, 65303, - 7955, 6452, 4713, 128196, 66249, 917885, 194766, 129073, 65152, 719, - 120044, 78623, 120042, 6713, 4532, 65412, 69822, 10868, 4717, 2349, 5902, - 66450, 4712, 75055, 917899, 65400, 65416, 8155, 4718, 3942, 4714, 9625, - 0, 6383, 194744, 12006, 128565, 194789, 0, 113756, 0, 65414, 6454, 1229, - 83457, 66437, 66025, 78699, 83452, 42500, 120508, 4809, 9623, 129137, - 78694, 121173, 128777, 917858, 65405, 68159, 12893, 78617, 5365, 4545, - 8901, 92421, 119555, 4813, 128262, 194729, 5925, 4808, 64330, 128400, - 65475, 83432, 68244, 4814, 83427, 4810, 83429, 83430, 64928, 10543, - 71249, 3522, 71335, 414, 65404, 0, 83442, 6456, 73820, 83445, 6691, - 42193, 66284, 83441, 0, 68337, 0, 43858, 43832, 118820, 9751, 65407, - 128085, 11770, 3919, 120724, 0, 65061, 983945, 917894, 129142, 12235, - 128572, 92701, 121087, 64092, 68739, 64080, 129063, 64090, 983586, 69913, - 10162, 10310, 121210, 8454, 121387, 42038, 387, 41363, 12737, 0, 4780, - 43368, 0, 64310, 64621, 6732, 78116, 0, 121295, 195024, 92193, 8896, 0, - 375, 6976, 66582, 119005, 74997, 127325, 983436, 119202, 119203, 12526, - 43120, 2315, 0, 1938, 119197, 128452, 4529, 119200, 119201, 119198, - 119199, 69692, 129124, 69698, 13150, 64492, 128974, 78761, 2291, 12902, - 0, 42891, 66327, 70502, 917857, 10799, 69690, 2587, 66372, 128628, 4193, - 66823, 4241, 129195, 7998, 83276, 0, 127009, 126640, 2316, 118821, 0, - 983934, 0, 64297, 74799, 92442, 74140, 128148, 5373, 128798, 70370, 3762, - 10015, 120672, 119232, 125109, 41590, 0, 70098, 3780, 7485, 5779, 917898, - 42037, 0, 3906, 12349, 74793, 8326, 127333, 65498, 3763, 6983, 5618, 0, - 3779, 983194, 43613, 70132, 0, 83288, 78335, 83289, 0, 280, 74558, - 121353, 67396, 13072, 1894, 83291, 67735, 65478, 43310, 7231, 0, 11773, - 0, 119165, 11144, 917778, 2551, 0, 6453, 10200, 6235, 983752, 119237, - 71877, 128669, 4470, 11826, 917557, 7780, 5369, 118958, 5249, 983066, - 5367, 8756, 127143, 119183, 5377, 120585, 68143, 1688, 78245, 5218, - 69685, 983756, 0, 113794, 44020, 6808, 41319, 1300, 10650, 41692, 64505, - 2290, 71057, 119624, 1465, 10850, 3943, 0, 41205, 41315, 118961, 119333, - 67148, 5352, 113753, 0, 8839, 41314, 7384, 7785, 41204, 127322, 41209, - 69637, 92241, 43607, 71254, 0, 5420, 3897, 10134, 120381, 74417, 4018, - 7150, 68127, 71425, 0, 121427, 127864, 127526, 2561, 68621, 3542, 7148, + 66202, 8957, 4139, 70512, 127115, 983074, 0, 122907, 12740, 121470, 4722, + 6816, 124974, 12759, 4725, 67099, 4726, 83467, 83468, 983622, 70029, + 83463, 74913, 12755, 12762, 4015, 67690, 8052, 476, 0, 74893, 128294, + 64212, 41020, 1382, 64209, 64216, 44002, 64214, 1656, 41831, 127553, + 125121, 41843, 8720, 3908, 1452, 13111, 195096, 64067, 92287, 8552, + 64113, 41845, 3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, + 119085, 83302, 917610, 7935, 2420, 73861, 1114, 78120, 67585, 70104, + 70432, 83447, 74920, 3938, 120057, 65417, 64717, 120060, 71920, 65415, + 66884, 6292, 65303, 7955, 6452, 4713, 128196, 66249, 917885, 194766, + 129073, 65152, 719, 120044, 78623, 120042, 6713, 4532, 65412, 69822, + 10868, 4717, 2349, 5902, 66450, 4712, 75055, 917899, 65400, 65416, 8155, + 4718, 3942, 4714, 9625, 983293, 6383, 194744, 12006, 128565, 194789, + 121226, 113756, 983458, 65414, 6454, 1229, 83457, 66437, 66025, 78699, + 83452, 42500, 120508, 4809, 9623, 129137, 78694, 121173, 128777, 917858, + 65405, 68159, 12893, 78617, 5365, 4545, 8901, 92421, 119555, 4813, + 128262, 194729, 5925, 4808, 64330, 128400, 65475, 83432, 68244, 4814, + 83427, 4810, 83429, 83430, 64928, 10543, 71249, 3522, 71335, 414, 65404, + 92329, 83442, 6456, 73820, 83445, 6691, 42193, 66284, 83441, 0, 68337, 0, + 43858, 43832, 118820, 9751, 65407, 128085, 11770, 3919, 120724, 983596, + 65061, 78115, 917894, 129142, 12235, 128572, 92701, 121087, 64092, 68739, + 64080, 129063, 64090, 125267, 69913, 10162, 10310, 121210, 8454, 121387, + 42038, 387, 41363, 12737, 0, 4780, 43368, 0, 64310, 64621, 6732, 78116, + 0, 121295, 195024, 92193, 8896, 0, 375, 6976, 66582, 119005, 74997, + 127325, 983436, 113757, 119203, 12526, 43120, 2315, 0, 1938, 119197, + 128452, 4529, 119200, 119201, 119198, 119199, 69692, 129124, 69698, + 13150, 64492, 128974, 78761, 2291, 12902, 128140, 42891, 66327, 70502, + 129425, 10799, 69690, 2587, 66372, 100576, 4193, 66823, 4241, 129195, + 7998, 83276, 0, 127009, 126640, 2316, 118821, 0, 983934, 127478, 64297, + 74799, 92442, 74140, 128148, 5373, 128798, 70370, 3762, 10015, 120672, + 119232, 125109, 41590, 983865, 70098, 3780, 7485, 5779, 917898, 42037, 0, + 3906, 12349, 74793, 8326, 127333, 65498, 3763, 6983, 5618, 0, 3779, + 983194, 43613, 70132, 0, 83288, 78335, 83289, 129419, 280, 74558, 121353, + 67396, 13072, 1894, 83291, 67735, 65478, 43310, 7231, 0, 11773, 121314, + 119165, 11144, 917778, 2551, 0, 6453, 10200, 6235, 983752, 119237, 71877, + 72886, 4470, 11826, 917557, 7780, 5369, 118958, 5249, 119949, 5367, 8756, + 127143, 119183, 5377, 120585, 68143, 1688, 78245, 5218, 69685, 194918, 0, + 100780, 44020, 6808, 41319, 1300, 10650, 41692, 64505, 2290, 71057, + 119624, 1465, 10850, 3943, 127537, 41205, 41315, 118961, 119333, 67148, + 5352, 113753, 0, 8839, 41314, 7384, 7785, 41204, 127322, 41209, 69637, + 92241, 43607, 71254, 83444, 5420, 3897, 10134, 120381, 74417, 4018, 7150, + 68127, 71425, 70688, 121427, 127864, 127526, 2561, 68621, 3542, 7148, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 120750, 78751, 7146, - 983682, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, - 983437, 69641, 10753, 10830, 119339, 615, 64490, 7574, 74082, 77922, 0, - 12909, 43016, 64559, 127028, 0, 121231, 67996, 2020, 128790, 4022, - 128783, 120701, 77923, 126593, 41691, 0, 75060, 74329, 0, 64622, 9070, 0, - 68411, 3911, 42829, 43122, 1033, 74440, 983813, 7000, 3904, 983628, - 73737, 125105, 118931, 119630, 13123, 10846, 3450, 127360, 7397, 118807, - 917891, 42778, 10000, 41088, 449, 0, 3777, 68458, 113725, 9636, 0, 10738, - 69634, 9367, 593, 41085, 3999, 65226, 41713, 12764, 983723, 64409, 3596, - 129044, 128090, 9763, 120280, 74609, 12347, 124, 12981, 41127, 2092, - 92687, 0, 127555, 194632, 10820, 43987, 0, 128907, 1769, 41715, 2463, - 71214, 83070, 12770, 71222, 1538, 92617, 43124, 194614, 195058, 7795, - 120300, 129053, 4828, 1258, 127802, 2006, 0, 121130, 9498, 127032, - 127033, 120289, 120288, 3939, 120290, 8846, 8943, 120287, 120286, 2650, - 4491, 1961, 42602, 11525, 120292, 1959, 120294, 55228, 11774, 41016, - 983262, 68675, 128054, 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, - 41019, 127944, 0, 65292, 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, - 70864, 118879, 55223, 0, 128071, 41826, 8865, 6402, 113827, 13279, 7917, - 74755, 917948, 7733, 983408, 4998, 68493, 92332, 41950, 0, 4268, 194790, - 195056, 70061, 4013, 128718, 10881, 0, 983163, 0, 74788, 2014, 2432, - 71901, 9765, 195052, 0, 917854, 195059, 78357, 65281, 127825, 10949, 0, - 0, 119315, 2015, 121088, 92765, 71840, 66318, 43233, 917992, 42517, - 68060, 0, 0, 12698, 8094, 10135, 65909, 6474, 794, 43497, 12656, 66335, - 119353, 67279, 1665, 71853, 4833, 917985, 71188, 127367, 121464, 189, - 12611, 0, 983420, 2859, 4838, 983930, 4834, 65078, 0, 92991, 4837, 67413, - 770, 92671, 811, 70062, 41042, 83073, 41318, 64427, 73999, 67693, 78848, - 3895, 92615, 74341, 3976, 128466, 42859, 10193, 3116, 7747, 78488, 0, - 43496, 0, 121015, 43686, 78846, 41877, 983743, 2871, 64614, 68843, 999, - 983844, 6345, 41876, 2663, 2017, 121234, 67824, 11040, 10150, 120678, - 64308, 1522, 597, 4775, 12555, 12571, 12550, 12583, 12560, 2019, 12556, - 12584, 3092, 0, 12562, 4783, 12566, 12569, 12554, 83344, 10812, 78851, 0, - 83342, 3078, 1402, 0, 83348, 0, 125072, 119248, 394, 3088, 83347, 92172, + 983682, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 127287, 10506, + 983437, 69641, 10753, 10830, 119339, 615, 64490, 7574, 74082, 77922, + 983298, 12909, 43016, 64559, 127028, 128309, 121231, 67996, 2020, 128790, + 4022, 128783, 100748, 77923, 126593, 41691, 0, 75060, 74329, 0, 64622, + 9070, 983876, 68411, 3911, 42829, 43122, 1033, 74440, 125191, 7000, 3904, + 983628, 73737, 125105, 118931, 119630, 13123, 10846, 3450, 120518, 7397, + 118807, 917891, 42778, 10000, 41088, 449, 128509, 3777, 68458, 113725, + 9636, 0, 10738, 69634, 9367, 593, 41085, 3999, 65226, 41713, 12764, + 983723, 64409, 3596, 129044, 120895, 9763, 120280, 74609, 12347, 124, + 12981, 41127, 2092, 92687, 0, 127555, 194632, 10820, 43987, 0, 128907, + 1769, 41715, 2463, 71214, 83070, 12770, 71222, 1538, 92617, 43124, + 194614, 194585, 7795, 120300, 129053, 4828, 1258, 127802, 2006, 101034, + 121130, 9498, 100494, 127033, 120289, 120288, 3939, 120290, 8846, 8943, + 120287, 120286, 2650, 4491, 1961, 42602, 11525, 120292, 1959, 120294, + 55228, 11774, 41016, 917944, 68675, 128054, 1511, 9324, 78211, 10519, + 66331, 3454, 19930, 78163, 41019, 126546, 983671, 65292, 6822, 12862, + 983707, 0, 42143, 41828, 78207, 65531, 70864, 118879, 55223, 0, 128071, + 41826, 8865, 6402, 113827, 13279, 7917, 74755, 917948, 7733, 983408, + 4998, 68493, 92332, 41950, 0, 4268, 127923, 83075, 70061, 4013, 128718, + 10881, 0, 129045, 125266, 74788, 2014, 2432, 71901, 9765, 195052, 0, + 917854, 195059, 78357, 65281, 127825, 10949, 0, 0, 119315, 2015, 100871, + 92765, 71840, 66318, 43233, 917992, 42517, 68060, 983614, 983904, 12698, + 8094, 10135, 65909, 6474, 794, 43497, 12656, 66335, 119353, 67279, 1665, + 71853, 4833, 917985, 71188, 127367, 121464, 189, 12611, 0, 128094, 2859, + 4838, 983930, 4834, 65078, 0, 92991, 4837, 67413, 770, 92671, 811, 70062, + 41042, 83073, 41318, 64427, 73999, 67693, 78848, 3895, 92615, 74341, + 3976, 128466, 42859, 10193, 3116, 7747, 78488, 0, 43496, 983069, 121015, + 43686, 78846, 41877, 983743, 2871, 64614, 68843, 999, 125198, 6345, + 41876, 2663, 2017, 121234, 67824, 11040, 10150, 120678, 64308, 1522, 597, + 4775, 12555, 12571, 12550, 12583, 12560, 2019, 12556, 12584, 3092, + 983832, 12562, 4783, 12566, 12569, 12554, 83344, 10812, 78851, 126574, + 83342, 3078, 1402, 0, 83348, 0, 125072, 74371, 394, 3088, 83347, 92172, 917965, 3991, 64391, 83341, 128524, 424, 66328, 1999, 69659, 73914, 0, - 127534, 66903, 128468, 42231, 2209, 125103, 0, 0, 41840, 66913, 2377, + 125128, 66903, 128468, 42231, 2209, 125103, 0, 0, 41840, 66913, 2377, 1298, 64011, 12572, 11318, 12557, 12559, 12570, 7479, 1003, 2373, 9446, - 7481, 9448, 48, 983084, 9480, 481, 0, 9438, 9439, 9440, 9441, 8465, 9443, - 9444, 9445, 9430, 9431, 9432, 9433, 9434, 9435, 3984, 9437, 129135, + 7481, 9448, 48, 78029, 9480, 481, 100615, 9438, 9439, 9440, 9441, 8465, + 9443, 9444, 9445, 9430, 9431, 9432, 9433, 9434, 9435, 3984, 9437, 129135, 92934, 9424, 9425, 9426, 9427, 9428, 9429, 64758, 2362, 9655, 128050, 2004, 9096, 9782, 70842, 9172, 83071, 19965, 0, 5955, 67666, 1108, 0, - 74773, 78271, 128909, 64782, 3926, 92448, 65210, 8798, 0, 92165, 1392, - 983817, 120838, 127364, 10606, 8065, 118805, 10353, 10417, 127238, - 128739, 64524, 92418, 4019, 0, 125082, 43280, 8219, 68402, 1812, 119963, - 121067, 128430, 120939, 42410, 74448, 119132, 6054, 10697, 3169, 42297, - 42322, 10642, 3909, 9950, 128848, 128139, 983263, 68678, 74986, 983790, - 1049, 43517, 65707, 2304, 41806, 92326, 42336, 3921, 0, 11775, 64760, - 11766, 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, 36, 0, - 5153, 41805, 0, 73735, 763, 41808, 64910, 121389, 2009, 0, 127985, 74245, - 9640, 119951, 0, 69895, 8621, 120523, 12852, 3031, 983050, 64361, 129088, - 182, 66414, 92716, 92598, 119950, 42613, 9058, 366, 0, 9892, 5969, 11754, - 10848, 4570, 65301, 44013, 4255, 127889, 10102, 41189, 4003, 41026, - 68109, 13293, 41192, 69635, 124977, 42251, 0, 42534, 65179, 11287, 6128, - 113811, 11034, 10923, 64423, 125058, 65506, 983912, 65861, 74083, 66872, - 9932, 43516, 83063, 83065, 83064, 9817, 0, 71234, 0, 12117, 66586, 4183, - 10540, 66250, 9063, 127045, 128547, 119954, 113685, 12897, 3792, 2011, - 121418, 6065, 43160, 128379, 120595, 8692, 41186, 41816, 41023, 41818, - 41187, 11659, 7922, 12614, 2005, 8523, 78002, 120035, 7513, 1863, 4710, - 0, 5956, 7621, 78005, 92624, 4705, 716, 74918, 0, 4704, 120040, 93024, - 42241, 161, 43977, 74546, 66214, 4706, 74077, 69914, 42672, 4709, 10680, - 119065, 43293, 68771, 983190, 119164, 120328, 83319, 10187, 1700, 119223, - 83315, 0, 74980, 4004, 917595, 10968, 43296, 128331, 8506, 113744, - 194812, 126996, 1005, 937, 78216, 4734, 2870, 121350, 78218, 983109, - 7463, 4729, 0, 235, 1384, 4728, 74887, 70494, 92490, 74449, 8109, 43105, - 128623, 4730, 447, 13186, 1513, 4733, 120415, 92548, 0, 42527, 12911, - 43427, 1383, 8565, 2469, 120024, 6690, 6156, 68117, 43439, 7993, 4288, - 120416, 2674, 13238, 11922, 0, 92529, 3510, 13234, 983832, 120407, 5605, + 74773, 78271, 128909, 64782, 3926, 92448, 65210, 8798, 129365, 83062, + 1392, 127782, 120696, 127364, 10606, 8065, 70710, 10353, 10417, 100613, + 125023, 64524, 70711, 4019, 100950, 125082, 43280, 8219, 68402, 1812, + 100949, 121067, 100944, 120939, 42410, 74448, 101085, 6054, 10697, 3169, + 42297, 42322, 10642, 3909, 9950, 128231, 128139, 983263, 68678, 74986, + 983790, 1049, 43517, 65707, 2304, 41806, 92326, 42336, 3921, 0, 11775, + 64760, 11766, 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, + 36, 0, 5153, 41805, 119153, 73735, 763, 9211, 64910, 121389, 2009, 0, + 127985, 74245, 9640, 119951, 127316, 69895, 8621, 120523, 12852, 3031, + 983050, 64361, 129088, 182, 66414, 92716, 92598, 119950, 42613, 9058, + 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 44013, 4255, 127889, + 10102, 41189, 4003, 41026, 68109, 13293, 41192, 69635, 124977, 42251, + 983963, 42534, 65179, 11287, 6128, 113811, 11034, 10923, 64423, 101092, + 65506, 119248, 65861, 74083, 66872, 9932, 43516, 83063, 83065, 83064, + 9817, 100937, 71234, 70749, 12117, 66586, 4183, 10540, 66250, 9063, + 127045, 128547, 119954, 113685, 12897, 3792, 2011, 121418, 6065, 43160, + 128379, 120595, 8692, 41186, 41816, 41023, 41818, 41187, 11659, 7922, + 12614, 2005, 8523, 72852, 120035, 7513, 1863, 4710, 120030, 5956, 7621, + 78005, 92624, 4705, 716, 74918, 983453, 4704, 120040, 93024, 42241, 161, + 43977, 74546, 66214, 4706, 74077, 69914, 42672, 4709, 10680, 119065, + 43293, 68771, 195030, 119164, 100770, 83319, 10187, 1700, 119223, 83315, + 0, 74980, 4004, 917595, 10968, 43296, 72823, 8506, 113744, 194812, + 126996, 1005, 937, 78216, 4734, 2870, 121350, 78218, 983109, 7463, 4729, + 983393, 235, 1384, 4728, 74887, 70494, 92490, 74449, 8109, 43105, 128623, + 4730, 447, 13186, 1513, 4733, 120415, 92548, 0, 42527, 12911, 43427, + 1383, 8565, 2469, 120024, 6690, 6156, 68117, 43439, 7993, 4288, 120416, + 2674, 13238, 11922, 128409, 92529, 3510, 13234, 129368, 120407, 5605, 42095, 11364, 92286, 1380, 65617, 11162, 120261, 13196, 13197, 120309, 67708, 9495, 119346, 127154, 5959, 67984, 73976, 66275, 43371, 6941, 119349, 13205, 13211, 5801, 12769, 65905, 41697, 1283, 82952, 4779, 983922, 3719, 4006, 983569, 19957, 71186, 2021, 119332, 43877, 83140, 43028, 65493, 41838, 3875, 5962, 64341, 92616, 9814, 43457, 5827, 3314, - 7787, 71189, 65494, 68153, 126991, 194697, 120636, 64531, 120692, 194626, - 128753, 983958, 66316, 65467, 5771, 41298, 983794, 9742, 521, 0, 10800, - 92222, 8404, 194625, 483, 7096, 7089, 66323, 928, 0, 0, 119018, 10599, - 11586, 3989, 10971, 43748, 65782, 9841, 8843, 12145, 67261, 10074, 78548, - 93999, 3769, 0, 0, 128703, 983107, 9573, 917998, 65290, 8849, 119254, - 65855, 65112, 1796, 71046, 0, 69665, 8164, 41301, 3502, 83135, 7388, - 10621, 73838, 78553, 5825, 13007, 68165, 92203, 92915, 12661, 7608, - 10354, 10418, 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, - 1390, 70184, 194704, 421, 43536, 5846, 120120, 4130, 127775, 7595, 42588, - 7600, 74400, 66035, 195091, 0, 65851, 42607, 124955, 92403, 3168, 67733, - 42134, 11831, 2370, 2846, 92605, 128084, 0, 120132, 127745, 1836, 0, - 121207, 92558, 3740, 69843, 6290, 65374, 120451, 2390, 3944, 66628, - 119006, 0, 6135, 3118, 74265, 119093, 83310, 77975, 0, 8127, 8975, 64739, - 7943, 124968, 119234, 10618, 2584, 0, 0, 128225, 9998, 120573, 83306, 0, - 127750, 43508, 6204, 127044, 121374, 8279, 8776, 64954, 4975, 70075, - 120130, 4267, 1631, 42206, 77983, 128015, 195046, 65700, 66386, 0, 64645, - 0, 92887, 126588, 12586, 0, 9242, 120100, 0, 4523, 5842, 10495, 3122, - 983797, 7793, 78275, 9328, 119104, 78393, 12604, 92885, 6615, 2285, - 92344, 3986, 44025, 0, 8912, 64555, 7409, 92247, 983360, 9541, 78276, - 113669, 11275, 8540, 11498, 120868, 983359, 41040, 2459, 127302, 13060, - 41041, 74413, 983138, 0, 77931, 68427, 10450, 12551, 41043, 7020, 120353, - 3765, 92881, 917612, 1606, 120348, 92299, 3093, 68436, 128040, 983061, - 119613, 0, 0, 4312, 74091, 120337, 74983, 11923, 4023, 68399, 5763, - 94015, 4827, 10894, 12810, 64406, 118785, 4455, 74321, 433, 119620, - 66660, 2499, 67167, 67166, 118837, 11973, 13089, 4293, 120329, 42224, - 42758, 12196, 42837, 42226, 119319, 127992, 119126, 5817, 127806, 55277, - 3120, 9797, 0, 0, 11086, 10389, 126485, 128784, 4895, 65358, 124941, - 4359, 585, 2383, 3509, 70037, 486, 4290, 5758, 127546, 121160, 983106, - 7004, 113667, 65880, 126514, 119048, 2380, 11380, 983863, 93996, 2376, - 78841, 83402, 0, 5197, 70839, 127047, 127048, 2366, 127050, 119604, - 70837, 120045, 0, 128554, 0, 917846, 0, 0, 0, 74188, 71342, 78455, 75048, - 113675, 74900, 120046, 127542, 120049, 983366, 1847, 120978, 10339, - 983367, 42384, 121379, 4227, 74158, 0, 74498, 43032, 121124, 42365, 0, - 12671, 11384, 120059, 74264, 120058, 64797, 983347, 5820, 983346, 120052, + 7787, 71189, 65494, 68153, 126991, 194697, 120636, 64531, 120692, 72879, + 128753, 983958, 66316, 65467, 5771, 41298, 83138, 9742, 521, 983911, + 10800, 92222, 8404, 194625, 483, 7096, 7089, 66323, 928, 983908, 64041, + 119018, 10599, 11586, 3989, 10971, 43748, 65782, 9841, 8843, 12145, + 67261, 10074, 78548, 93999, 3769, 127958, 0, 128703, 983107, 9573, + 917998, 65290, 8849, 119254, 65855, 65112, 1796, 71046, 983428, 69665, + 8164, 41301, 3502, 83135, 7388, 10621, 73838, 78553, 5825, 13007, 68165, + 72749, 92915, 12661, 7608, 10354, 10418, 42411, 2022, 983429, 1409, + 12195, 4001, 3112, 10824, 120639, 1390, 70184, 78515, 421, 43536, 5846, + 120120, 4130, 127775, 7595, 42588, 7600, 74400, 66035, 194799, 0, 65851, + 42607, 124955, 92403, 3168, 67733, 42134, 11831, 2370, 2846, 92605, + 128084, 0, 120132, 127745, 1836, 0, 100782, 92558, 3740, 69843, 6290, + 65374, 100785, 2390, 3944, 66628, 119006, 983916, 6135, 3118, 74265, + 119093, 83310, 77975, 983889, 8127, 8975, 64739, 7943, 124968, 119234, + 10618, 2584, 0, 0, 128225, 9998, 120573, 83306, 0, 127750, 43508, 6204, + 127044, 121374, 8279, 8776, 64954, 4975, 70075, 120130, 4267, 1631, + 42206, 77983, 128015, 194753, 65700, 66386, 0, 64645, 0, 92887, 119154, + 12586, 0, 9242, 120100, 0, 4523, 5842, 10495, 3122, 983797, 7793, 78275, + 9328, 119104, 70685, 12604, 92885, 6615, 2285, 66796, 3986, 44025, 0, + 8912, 64555, 7409, 92247, 983190, 9541, 78276, 113669, 11275, 8540, + 11498, 120868, 128540, 41040, 2459, 127302, 12558, 41041, 74413, 983138, + 0, 77931, 68427, 10450, 12551, 41043, 7020, 120353, 3765, 92881, 917612, + 1606, 120348, 92299, 3093, 68436, 100718, 983061, 119613, 983938, 194756, + 4312, 74091, 120337, 74983, 11923, 4023, 68399, 5763, 94015, 4827, 10894, + 12810, 64406, 118785, 4455, 74321, 433, 119620, 66660, 2499, 67167, + 67166, 118837, 11973, 13089, 4293, 120329, 42224, 42758, 12196, 42837, + 42226, 119319, 127992, 119126, 5817, 127806, 55277, 3120, 9797, 0, 0, + 11086, 10389, 126485, 128784, 4895, 65358, 124941, 4359, 585, 2383, 3509, + 70037, 486, 4290, 5758, 100775, 121160, 983106, 7004, 113667, 65880, + 126514, 119048, 2380, 11380, 983863, 93996, 2376, 78841, 83402, 983256, + 5197, 70839, 120248, 127048, 2366, 100713, 119604, 70837, 120045, 0, + 128554, 0, 917846, 100715, 0, 0, 74188, 71342, 78455, 75048, 113675, + 74900, 120046, 127542, 120049, 100774, 1847, 120978, 10339, 100772, + 42384, 121379, 4227, 74158, 0, 74498, 43032, 100926, 42365, 194833, + 12671, 11384, 120059, 74264, 120058, 64797, 983347, 5820, 128018, 120052, 120065, 128825, 120064, 120053, 42137, 9893, 2754, 12664, 120063, 121286, 7377, 120051, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 121132, - 68660, 0, 10853, 926, 983371, 74184, 120915, 120055, 119301, 43175, 0, - 43037, 41798, 41035, 11583, 127769, 41801, 119088, 119605, 520, 4200, - 12699, 8331, 70118, 3091, 41034, 66298, 70293, 8360, 983445, 78044, 321, - 4229, 64543, 128470, 65563, 194873, 917974, 2861, 43793, 10095, 121428, - 9195, 92386, 1861, 0, 73733, 917780, 68839, 43041, 0, 43794, 128530, - 3859, 12181, 41660, 8209, 70793, 73867, 12973, 75014, 74757, 127514, - 41658, 128376, 121235, 5760, 113699, 743, 4414, 120766, 0, 42632, 127236, - 65161, 73896, 128589, 0, 1405, 119063, 43220, 43341, 0, 19919, 70278, - 64532, 65367, 43710, 11199, 125077, 3513, 71115, 70341, 43342, 119064, - 65529, 65364, 83208, 83170, 6485, 1397, 194781, 41986, 92678, 83204, - 83212, 74097, 83213, 7471, 12079, 67997, 6843, 43287, 92317, 0, 67406, - 120239, 194678, 71914, 1099, 10490, 83201, 10501, 65181, 74463, 128952, - 464, 41624, 65283, 67663, 78222, 1346, 194609, 65679, 64573, 64897, 423, - 1818, 65144, 82963, 8272, 127812, 19911, 4218, 3087, 64960, 121447, - 43564, 0, 983182, 9584, 10465, 983902, 74359, 12626, 9106, 0, 42642, - 71235, 64750, 9390, 0, 41797, 194730, 128333, 265, 41795, 64666, 74628, - 43530, 2752, 127365, 128459, 126482, 59, 983671, 121410, 11149, 78074, - 77873, 41810, 83162, 7010, 0, 41809, 41495, 119364, 5877, 42252, 42213, - 8009, 3305, 43033, 511, 92700, 43848, 13127, 120067, 983946, 74397, - 120235, 128641, 65915, 1400, 41812, 10685, 75017, 2103, 10387, 4453, - 43276, 917783, 11169, 128939, 6481, 41213, 0, 0, 129133, 119929, 41983, - 74198, 6617, 9116, 119654, 92995, 462, 68110, 10493, 121449, 8129, 92994, - 128365, 74471, 6644, 11658, 0, 128245, 3452, 11906, 9581, 1385, 3098, 0, - 119013, 43340, 11123, 41033, 6493, 42626, 0, 129051, 11426, 77887, 1681, - 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, 41841, 43338, 0, - 119323, 5726, 64915, 42175, 983913, 0, 41497, 65044, 120109, 2851, 43017, - 983589, 120896, 4373, 78058, 0, 9587, 1789, 6671, 128840, 3100, 0, 65360, - 917589, 92365, 128202, 64922, 0, 8190, 12083, 0, 83141, 6506, 64312, - 74374, 2368, 983187, 4419, 121259, 119125, 3439, 1825, 1192, 120106, - 8891, 3080, 120228, 2347, 5430, 120107, 8990, 2848, 92981, 121372, 73942, - 249, 0, 0, 0, 120658, 119324, 128712, 8883, 119860, 728, 11173, 995, 0, - 121047, 64826, 124931, 917798, 128348, 0, 19945, 8091, 558, 0, 12273, - 194814, 67714, 12112, 67272, 67265, 67273, 67274, 12335, 120104, 68019, - 3443, 3129, 67267, 2102, 65445, 78258, 64891, 0, 7725, 65108, 11120, - 9205, 8624, 69246, 12446, 43295, 128519, 41894, 0, 6277, 41672, 41893, - 10010, 127381, 3540, 121450, 835, 71340, 69816, 119854, 74408, 0, 67108, - 5426, 4258, 83188, 120858, 5424, 92306, 8283, 127978, 5434, 83196, - 129027, 19917, 11408, 0, 11947, 128330, 1404, 3095, 11432, 121122, 3464, - 6486, 4819, 128233, 129123, 570, 8095, 3672, 119864, 1498, 67866, 0, - 128539, 431, 67820, 0, 128182, 128096, 68167, 983663, 13096, 128643, - 121018, 43408, 9516, 128538, 5268, 42230, 42220, 0, 4450, 120511, 11547, - 43417, 128542, 356, 3477, 227, 10488, 68203, 382, 11418, 0, 5878, 983799, - 0, 0, 0, 6484, 2541, 66039, 113777, 78157, 92723, 3549, 195067, 9110, - 119665, 2743, 0, 43290, 128585, 9097, 195026, 43015, 8782, 0, 776, 2524, - 42707, 8573, 120903, 126494, 0, 71102, 42694, 64944, 8952, 3856, 118818, - 125111, 5872, 6495, 129125, 0, 0, 92543, 67173, 67172, 12849, 3953, 1897, - 93071, 65094, 11994, 4339, 74556, 92654, 67843, 0, 0, 119087, 68473, - 74104, 5228, 119835, 7868, 43184, 0, 120955, 73986, 43438, 0, 43022, - 917553, 1162, 74995, 2671, 128567, 127198, 92632, 92631, 118865, 4553, - 73811, 983573, 195005, 118928, 68085, 19921, 73821, 11424, 195002, 4567, - 41891, 0, 983788, 55249, 4820, 65239, 194662, 0, 194665, 43042, 119212, - 1377, 12869, 4897, 42821, 9250, 70272, 4438, 64385, 0, 1753, 11331, 6147, - 194941, 43282, 8833, 69998, 0, 6504, 78408, 121166, 10719, 70275, 1898, - 1413, 42443, 0, 802, 12141, 121138, 83097, 6648, 10671, 2528, 0, 64789, - 9169, 838, 68819, 68807, 844, 5014, 66297, 256, 68818, 9990, 128398, - 42739, 917851, 7542, 65464, 9726, 83224, 6489, 10048, 74326, 78719, - 66573, 0, 78724, 78712, 11761, 121314, 83226, 41094, 0, 77958, 194893, - 78403, 92689, 6196, 6945, 93969, 120942, 67095, 120491, 11816, 68846, - 5733, 2930, 70274, 127179, 41098, 92771, 41093, 68834, 66626, 588, 9760, - 125099, 194717, 1238, 200, 983207, 1660, 73916, 0, 67141, 74362, 0, - 92485, 124930, 0, 74999, 3394, 194894, 120668, 0, 69996, 127358, 66219, + 68660, 0, 10853, 926, 983296, 74184, 120915, 120055, 119301, 43175, + 127103, 43037, 41798, 41035, 11583, 127769, 41801, 100498, 119605, 520, + 4200, 12699, 8331, 70118, 3091, 41034, 66298, 70293, 8360, 983445, 78044, + 321, 4229, 64543, 128470, 65563, 100764, 129310, 2861, 43793, 10095, + 121428, 9195, 72767, 1861, 983056, 73733, 917780, 68839, 43041, 0, 43794, + 100769, 3859, 12181, 41660, 8209, 70793, 73867, 12973, 75014, 74757, + 127514, 41658, 128376, 121235, 5760, 113699, 743, 4414, 120766, 0, 42632, + 127236, 65161, 73896, 128589, 100593, 1405, 119063, 43220, 43341, 194792, + 19919, 70278, 64532, 65367, 43710, 11199, 121400, 3513, 71115, 70341, + 43342, 119064, 65529, 65364, 83208, 83170, 6485, 1397, 194781, 41986, + 92678, 83204, 83212, 74097, 83213, 7471, 12079, 67997, 6843, 43287, + 92317, 0, 67406, 120239, 194678, 71914, 1099, 10490, 83201, 10501, 65181, + 74463, 128952, 464, 41624, 65283, 67663, 78222, 1346, 194609, 65679, + 64573, 64897, 423, 1818, 65144, 82963, 8272, 121203, 19911, 4218, 3087, + 64960, 121447, 43564, 983749, 983182, 9584, 10465, 983902, 74359, 12626, + 9106, 983064, 42642, 71235, 64750, 9390, 120737, 41797, 194730, 128333, + 265, 41795, 64666, 74628, 43530, 2752, 127365, 128459, 126482, 59, + 983427, 121410, 11149, 78074, 77873, 41810, 83162, 7010, 0, 41809, 41495, + 119364, 5877, 42252, 42213, 8009, 3305, 43033, 511, 92700, 43848, 13127, + 120067, 983946, 74397, 120235, 100835, 65915, 1400, 41812, 10685, 75017, + 2103, 10387, 4453, 43276, 917783, 11169, 128939, 6481, 41213, 0, 100839, + 129133, 100838, 41983, 74198, 6617, 9116, 119654, 92995, 462, 68110, + 10493, 121449, 8129, 92994, 128365, 74471, 6644, 11658, 0, 128245, 3452, + 11906, 9581, 1385, 3098, 100457, 119013, 43340, 11123, 41033, 6493, + 42626, 0, 129051, 11426, 77887, 1681, 118789, 1204, 3755, 64661, 7235, + 10170, 3966, 8911, 101013, 41841, 43338, 194954, 100848, 5726, 64915, + 42175, 983913, 0, 41497, 65044, 100844, 2851, 43017, 100484, 120896, + 4373, 78058, 0, 9587, 1789, 6671, 128840, 3100, 0, 65360, 101012, 92365, + 120937, 64922, 100486, 8190, 12083, 0, 83141, 6506, 64312, 74374, 2368, + 983187, 4419, 121259, 119125, 3439, 1825, 1192, 100488, 8891, 3080, + 120228, 2347, 5430, 100487, 8990, 2848, 92981, 121372, 73942, 249, + 983040, 917869, 983825, 74814, 119324, 128712, 8883, 119860, 728, 11173, + 995, 0, 100657, 64826, 100656, 129371, 128348, 0, 19945, 8091, 558, + 129134, 12273, 129156, 67714, 12112, 67272, 67265, 67273, 67274, 12335, + 120104, 68019, 3443, 3129, 67267, 2102, 65445, 78258, 64891, 195069, + 7725, 11843, 11120, 9205, 8624, 69246, 12446, 43295, 128519, 41894, 0, + 6277, 41672, 41893, 10010, 127381, 3540, 100827, 835, 71340, 69816, + 119854, 74408, 0, 67108, 5426, 4258, 83188, 100758, 5424, 92306, 8283, + 127978, 5434, 83196, 129027, 19917, 11408, 127392, 11947, 128330, 1404, + 3095, 11432, 121122, 3464, 6486, 4819, 100759, 127404, 570, 8095, 3672, + 119864, 1498, 67866, 0, 128539, 431, 67820, 78080, 128182, 128096, 68167, + 983459, 13096, 128643, 121018, 43408, 9516, 128538, 5268, 42230, 42220, + 0, 4450, 120511, 11547, 43417, 128542, 356, 3477, 227, 10488, 68203, 382, + 11418, 120681, 5878, 917860, 0, 0, 194877, 6484, 2541, 66039, 113777, + 78157, 92723, 3549, 195067, 9110, 119665, 2743, 121432, 43290, 128585, + 9097, 74379, 43015, 8782, 0, 776, 2524, 42707, 8573, 120903, 100666, 0, + 71102, 42694, 64944, 8952, 3856, 118818, 100662, 5872, 6495, 129125, + 127467, 0, 92543, 67173, 67172, 12849, 3953, 1897, 93071, 65094, 11994, + 4339, 74556, 92654, 67843, 128946, 0, 119087, 68473, 66778, 5228, 119835, + 7868, 43184, 0, 120955, 73986, 43438, 0, 43022, 917553, 1162, 74995, + 2671, 128567, 127198, 92632, 92631, 118865, 4553, 73811, 917947, 113723, + 118928, 68085, 19921, 73821, 11424, 195002, 4567, 41891, 127004, 983788, + 55249, 4820, 65239, 129338, 0, 101043, 43042, 119212, 1377, 12869, 4897, + 42821, 9250, 70272, 4438, 64385, 0, 1753, 11331, 6147, 128611, 43282, + 8833, 69998, 0, 6504, 78408, 100688, 10719, 70275, 1898, 1413, 42443, + 983387, 802, 12141, 121138, 83097, 6648, 10671, 2528, 72880, 64789, 9169, + 838, 68819, 68807, 844, 5014, 66297, 256, 68818, 9990, 128398, 42739, + 917851, 7542, 65464, 9726, 83224, 6489, 10048, 74326, 78719, 66573, 0, + 78724, 78712, 11761, 70665, 83226, 41094, 0, 77958, 119918, 78403, 92689, + 6196, 6945, 93969, 120942, 67095, 120491, 11816, 68846, 5733, 2930, + 70274, 127179, 41098, 92771, 41093, 68834, 66626, 588, 9760, 100568, + 194717, 1238, 200, 983207, 1660, 73916, 0, 67141, 74362, 983784, 92485, + 124930, 0, 74999, 3394, 70734, 120668, 100477, 69996, 127358, 66219, 72425, 43284, 68072, 7817, 1841, 11055, 66835, 194979, 74607, 1669, - 10776, 74534, 7701, 194980, 983450, 74992, 1732, 4030, 983442, 3963, - 65335, 127530, 41768, 6491, 65333, 65324, 914, 65323, 8071, 3538, 983845, - 2287, 65328, 92441, 74367, 7614, 0, 11819, 71908, 12009, 12399, 121217, - 67852, 65537, 0, 10841, 43430, 5301, 0, 92618, 5734, 8960, 0, 70123, - 65317, 77880, 0, 5876, 70374, 12304, 0, 0, 65315, 92670, 128511, 71862, - 0, 127957, 119621, 11114, 71909, 12447, 64486, 121236, 126562, 983129, 0, - 121393, 983802, 42767, 10915, 983174, 12007, 43695, 68033, 11975, 194878, - 0, 92604, 2555, 8629, 128640, 41133, 41872, 43706, 4496, 194879, 83108, - 120241, 128164, 0, 0, 983553, 64730, 70041, 66714, 68222, 0, 70076, - 65596, 67837, 11416, 4280, 67655, 8765, 12784, 7792, 1393, 78191, 11157, - 74386, 127274, 8233, 12820, 983730, 6683, 125112, 3442, 12144, 2841, - 12543, 0, 1473, 42820, 64329, 120880, 67243, 68642, 6488, 357, 1048, - 41100, 72417, 41104, 94003, 3406, 1054, 71320, 1040, 65450, 983385, 4434, - 1069, 194784, 118862, 65737, 121202, 128705, 0, 83211, 9693, 41943, - 68305, 41931, 41759, 12757, 4353, 983353, 1059, 9790, 8995, 119974, - 917770, 65937, 78572, 41758, 10646, 121159, 118833, 92372, 70424, 74830, - 78569, 12743, 983689, 6480, 917761, 41779, 42580, 66601, 12207, 77895, - 6335, 43919, 11312, 64807, 92962, 69989, 41767, 119629, 983764, 43020, - 74974, 3955, 74254, 120632, 983754, 917861, 70187, 69975, 9770, 9246, - 12230, 125047, 129105, 78580, 10448, 41783, 41786, 127093, 12797, 2755, - 64571, 78578, 194927, 4857, 983577, 4428, 12794, 73755, 128061, 78574, 0, - 11116, 43842, 5747, 78825, 70471, 7978, 41092, 74571, 0, 11924, 43812, - 42144, 65015, 0, 563, 0, 129412, 12798, 11271, 57, 92717, 83495, 917860, - 119043, 917618, 94051, 43137, 694, 983719, 9876, 0, 119168, 0, 70392, - 64537, 127914, 277, 74385, 7229, 12761, 983145, 74466, 13025, 64811, - 8757, 78824, 78188, 1574, 7381, 0, 2525, 4852, 5749, 68465, 13027, 42824, - 120574, 1039, 7151, 10155, 5745, 188, 41858, 11592, 129156, 69725, 9055, - 41853, 4858, 75000, 917990, 436, 4771, 917936, 2786, 93028, 4856, 8051, - 92500, 119609, 71327, 9644, 71133, 125009, 128873, 194916, 120732, 66710, - 68084, 983361, 73906, 67409, 127114, 917916, 10234, 5843, 11939, 70346, - 42157, 0, 3157, 194659, 68393, 75035, 3504, 70422, 0, 10822, 5149, 66029, - 10226, 65142, 128025, 3594, 42424, 124993, 40, 12657, 983665, 0, 386, - 121467, 8834, 120974, 12815, 43574, 121430, 73907, 127792, 70113, 7220, - 11839, 121143, 74316, 194752, 65322, 4304, 74503, 8160, 74314, 194753, - 121276, 0, 128526, 1348, 92349, 78597, 121139, 13303, 70406, 92392, - 128474, 7599, 1278, 43616, 13269, 127805, 127110, 74387, 78179, 78598, - 74492, 6097, 7568, 8780, 4982, 127464, 74501, 194763, 78592, 68745, 2672, - 3735, 127470, 13138, 42266, 9484, 10724, 41202, 71364, 128370, 43742, - 128373, 9487, 119959, 68785, 3842, 71911, 78668, 12442, 6193, 9791, - 119344, 0, 42516, 7228, 7559, 74803, 66721, 7873, 11399, 119219, 194691, - 70006, 194690, 127537, 3604, 120683, 119188, 128877, 78540, 78541, 42507, - 1962, 43305, 78476, 42505, 11660, 121021, 2072, 92312, 6995, 74173, 5437, - 74174, 10669, 8702, 7964, 92352, 983776, 199, 68075, 4105, 194845, - 127942, 75006, 194710, 67818, 13148, 7560, 78479, 9226, 78478, 195070, - 6472, 65814, 71919, 121218, 4724, 128491, 195041, 9191, 194645, 64432, - 120270, 82987, 119190, 10196, 7886, 0, 6585, 0, 6680, 195042, 983425, - 71872, 6679, 74412, 92251, 194866, 74421, 11382, 128254, 43862, 78591, - 113733, 194679, 194832, 6681, 127482, 12693, 194836, 42727, 78196, - 128252, 43874, 65442, 68047, 69733, 9989, 43248, 66248, 194816, 0, 11321, - 128845, 120809, 194819, 5297, 7042, 13284, 6112, 7968, 93010, 73927, - 92444, 127336, 65746, 118796, 69889, 74389, 128696, 4342, 42839, 121339, - 1677, 917592, 82989, 126590, 83415, 11091, 11011, 2719, 0, 0, 119595, - 10160, 0, 129150, 7585, 65169, 2052, 4308, 83414, 43000, 7505, 543, - 64916, 64736, 118835, 0, 64655, 983053, 118922, 2064, 0, 43158, 7902, - 983231, 65265, 194639, 121080, 127170, 127041, 128006, 92550, 983186, - 12994, 92728, 10828, 74378, 6228, 4307, 3482, 128527, 83231, 72389, - 83079, 506, 74573, 41194, 65735, 2055, 43255, 41195, 0, 8169, 121407, - 8841, 983747, 516, 93974, 2063, 119051, 34, 128850, 120186, 11504, 1612, - 74333, 120182, 11827, 67165, 12001, 120178, 10242, 64564, 120179, 67986, - 6584, 7749, 11037, 128743, 1758, 119074, 10667, 10560, 120197, 92593, - 1935, 11517, 120193, 120196, 83082, 1931, 120189, 74839, 120191, 1217, - 64702, 12643, 825, 127838, 194905, 12294, 92428, 78834, 9138, 78831, - 78833, 12631, 71871, 11080, 74554, 64000, 5591, 1239, 127199, 11313, - 194803, 3403, 983655, 120271, 64364, 92269, 121282, 72431, 8998, 12988, - 119983, 9152, 92161, 0, 126484, 67589, 41850, 64290, 3433, 92393, 12615, - 1594, 42192, 6914, 66392, 0, 119569, 74565, 41353, 67602, 67611, 4337, 0, - 127296, 918, 65035, 41351, 7681, 194900, 42577, 41393, 12668, 72395, - 2477, 127285, 121249, 118880, 0, 67604, 67683, 127235, 573, 127282, - 120543, 11417, 92661, 119814, 119309, 67599, 0, 72410, 67607, 11482, 0, - 3981, 3357, 0, 42223, 4207, 1288, 78503, 78839, 67728, 77907, 11589, + 10776, 74534, 7701, 194976, 100474, 74992, 1732, 4030, 983442, 3963, + 65335, 127530, 41768, 6491, 65333, 65324, 914, 65323, 8071, 3538, 195013, + 2287, 65328, 92441, 74367, 7614, 983953, 11819, 71908, 12009, 12399, + 121217, 67852, 65537, 78002, 10841, 43430, 5301, 0, 92618, 5734, 8960, 0, + 70123, 65317, 77880, 983199, 5876, 70374, 12304, 129355, 0, 65315, 92670, + 128511, 71862, 0, 127957, 119621, 11114, 71909, 12447, 64486, 121236, + 126562, 983129, 0, 121393, 983802, 42767, 10915, 983174, 12007, 43695, + 68033, 11975, 101010, 128745, 92604, 2555, 8629, 128640, 41133, 41872, + 43706, 4496, 100692, 83108, 120241, 128164, 100691, 0, 983553, 64730, + 70041, 66714, 68222, 0, 70076, 65596, 67837, 11416, 4280, 67655, 8765, + 12784, 7792, 1393, 78191, 11157, 74386, 127274, 8233, 12820, 100847, + 6683, 125112, 3442, 12144, 2841, 12543, 100699, 1473, 42820, 64329, + 100816, 67243, 68642, 6488, 357, 1048, 41100, 72417, 41104, 94003, 3406, + 1054, 71320, 1040, 65450, 113769, 4434, 1069, 194784, 100703, 65737, + 120129, 120302, 0, 83211, 9693, 41943, 68305, 41931, 41759, 12757, 4353, + 983353, 1059, 9790, 8995, 119974, 917769, 65937, 78572, 41758, 10646, + 100665, 118833, 2268, 70424, 74830, 78569, 12743, 983689, 6480, 917761, + 41779, 42580, 66601, 12207, 77895, 6335, 43919, 11312, 64807, 92962, + 69989, 41767, 119629, 983764, 43020, 74974, 3955, 74254, 120632, 983754, + 917861, 70187, 69975, 9770, 9246, 12230, 125047, 129105, 78580, 10448, + 41783, 41786, 70663, 12797, 2755, 64571, 78578, 127994, 4857, 983577, + 4428, 12794, 73755, 100722, 78574, 0, 11116, 43842, 5747, 78825, 70471, + 7978, 41092, 74571, 0, 11924, 43812, 42144, 65015, 100725, 563, 0, + 100795, 12798, 11271, 57, 92717, 83495, 100727, 119043, 71268, 94051, + 43137, 694, 983719, 9876, 128720, 83273, 0, 70392, 64537, 127914, 277, + 74385, 7229, 12761, 983145, 74466, 13025, 64811, 8757, 78824, 78188, + 1574, 7381, 194616, 2525, 4852, 5749, 68465, 13027, 42824, 120574, 1039, + 7151, 10155, 5745, 188, 41858, 11592, 100661, 69725, 9055, 41853, 4858, + 75000, 92896, 436, 4771, 917936, 2786, 93028, 4856, 8051, 92500, 119609, + 71327, 9644, 71133, 125009, 128873, 194916, 120732, 66710, 68084, 983361, + 73906, 67409, 127114, 917614, 10234, 5843, 11939, 70346, 42157, 0, 3157, + 194659, 68393, 75035, 3504, 70422, 983042, 10822, 5149, 66029, 10226, + 65142, 128025, 3594, 42424, 124993, 40, 12657, 983665, 0, 386, 121467, + 8834, 120974, 12815, 43574, 121430, 73907, 100513, 70113, 7220, 11839, + 121143, 74316, 194752, 65322, 4304, 74503, 8160, 74314, 100511, 121276, + 983940, 128526, 1348, 92349, 78597, 121139, 13303, 70406, 92392, 121384, + 7599, 1278, 43616, 13269, 127805, 92423, 74387, 78179, 78598, 74492, + 6097, 7568, 8780, 4982, 127464, 74501, 100720, 78592, 68745, 2672, 3735, + 127470, 13138, 42266, 9484, 10724, 41202, 71364, 128370, 43742, 128373, + 9487, 119959, 68785, 3842, 71911, 78668, 12442, 6193, 9791, 119344, + 100520, 42516, 7228, 7559, 74803, 66721, 7873, 11399, 119219, 194691, + 70006, 194690, 100518, 3604, 120683, 119188, 128877, 78540, 78541, 42507, + 1962, 43305, 78476, 42505, 11660, 119597, 2072, 92312, 6995, 72801, 5437, + 74174, 10669, 8702, 7964, 92352, 100514, 199, 68075, 4105, 194845, 3864, + 75006, 194710, 67818, 13148, 7560, 78479, 9226, 78478, 128471, 6472, + 65814, 71919, 100855, 4724, 128491, 195041, 9191, 194645, 64432, 120270, + 82987, 119190, 10196, 7886, 0, 6585, 194640, 6680, 195042, 983425, 71872, + 6679, 74412, 92251, 119350, 74421, 11382, 128254, 43862, 75001, 113733, + 194679, 194832, 6681, 127482, 12693, 194836, 42727, 78196, 128252, 43874, + 65442, 68047, 69733, 9989, 43248, 66248, 194816, 127534, 11321, 128845, + 120809, 122895, 5297, 7042, 13284, 6112, 7968, 93010, 73927, 92444, + 127336, 65746, 118796, 69889, 74389, 128696, 4342, 42839, 121339, 1677, + 917592, 82989, 126590, 83415, 11091, 11011, 2719, 0, 0, 119595, 10160, 0, + 129150, 7585, 65169, 2052, 4308, 83414, 43000, 7505, 543, 64916, 64736, + 118835, 194665, 64655, 983053, 118922, 2064, 917966, 43158, 7902, 983231, + 65265, 194639, 121080, 127170, 122915, 128006, 92550, 983186, 12994, + 92728, 10828, 74378, 6228, 4307, 3482, 128527, 83231, 72389, 83079, 506, + 74573, 41194, 65735, 2055, 43255, 41195, 0, 8169, 121407, 8841, 66770, + 516, 93974, 2063, 119051, 34, 128850, 120186, 11504, 1612, 74333, 120182, + 11827, 67165, 12001, 120178, 10242, 64564, 120179, 67986, 6584, 7749, + 11037, 127157, 1758, 119074, 10667, 10560, 120197, 92593, 1935, 11517, + 120193, 120196, 83082, 1931, 100499, 74839, 74104, 1217, 64702, 12643, + 825, 127838, 194905, 12294, 92428, 66748, 9138, 78831, 78833, 12631, + 71871, 11080, 74554, 64000, 5591, 1239, 127199, 11313, 194803, 3403, + 126564, 120271, 64364, 92269, 121282, 72431, 8998, 12988, 119983, 9152, + 92161, 0, 126484, 67589, 41850, 64290, 3433, 92393, 12615, 1594, 42192, + 6914, 66392, 125202, 119569, 74565, 41353, 67602, 67611, 4337, 0, 127296, + 918, 65035, 41351, 7681, 194900, 42577, 41393, 12668, 72395, 2477, + 127285, 121249, 118880, 0, 67604, 67683, 127235, 573, 127281, 120543, + 11417, 92661, 119814, 119309, 67599, 0, 72410, 67607, 11482, 128961, + 3981, 3357, 127164, 42223, 4207, 1288, 78503, 78839, 67728, 77907, 11589, 42195, 74477, 119997, 127178, 64602, 67618, 92539, 121366, 42788, 68416, - 64480, 194875, 8423, 3348, 448, 66907, 9717, 119311, 0, 997, 0, 0, 92577, - 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, 127760, 72390, 0, - 119228, 12035, 0, 2818, 0, 74411, 73793, 983278, 4172, 71252, 119992, - 8373, 10873, 12197, 125074, 195014, 92265, 69706, 128540, 6834, 74347, - 74958, 129033, 126982, 74563, 64828, 11419, 194868, 766, 1257, 194598, - 118845, 11381, 3265, 66617, 3274, 126629, 83254, 71861, 983950, 74522, - 41989, 121317, 0, 113769, 3263, 917922, 65672, 69243, 3270, 64539, 11489, - 917911, 0, 0, 71127, 9505, 65518, 128498, 756, 194605, 0, 0, 194621, - 7261, 92547, 186, 0, 119156, 5770, 13179, 65830, 12612, 12949, 64856, - 12800, 983901, 74203, 64718, 11507, 78673, 92434, 74626, 113760, 11578, - 983837, 119296, 120970, 121127, 125101, 0, 70083, 9254, 66877, 1794, - 68310, 64521, 5624, 120220, 120221, 119958, 120223, 3617, 66636, 64886, - 94061, 68659, 120213, 120214, 1872, 66508, 120467, 41079, 10748, 5502, - 119330, 4452, 128088, 983771, 92526, 4511, 120958, 983877, 64678, 11425, - 0, 43245, 1231, 68861, 69903, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, - 9546, 0, 128332, 70421, 120200, 65205, 120202, 64063, 9878, 74780, - 119626, 78202, 64058, 8799, 42131, 128662, 64062, 1028, 64060, 64059, - 837, 10567, 72384, 43103, 0, 120754, 11427, 2902, 64043, 64042, 43749, - 10756, 64047, 42606, 64045, 64044, 43979, 10076, 64040, 43060, 194942, - 1034, 3392, 83336, 43091, 64033, 64032, 42735, 43498, 64037, 64036, - 64035, 4291, 129157, 64015, 64014, 64681, 83394, 83395, 78145, 71898, - 43090, 83391, 3476, 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, - 64517, 78153, 2538, 64009, 204, 0, 4802, 4111, 8239, 9098, 4805, 64001, - 64057, 7885, 7247, 64054, 983268, 0, 4767, 9343, 64049, 64048, 120034, - 1133, 64053, 64052, 43453, 64050, 41340, 118975, 83261, 10005, 12329, - 41333, 83259, 8489, 1942, 917921, 194834, 42520, 65510, 125044, 68291, - 10760, 64023, 64022, 64021, 6582, 43670, 127798, 64025, 9167, 42151, - 78244, 983232, 2026, 64019, 64018, 64017, 64016, 12768, 121361, 7582, - 78252, 78248, 77914, 78246, 78247, 120791, 77915, 78766, 6788, 13094, - 77920, 7532, 41414, 78520, 3179, 78518, 64769, 78514, 78517, 11461, - 74454, 10751, 9051, 120720, 6708, 10535, 118955, 68218, 55274, 2008, - 64031, 64030, 294, 41874, 83383, 64790, 65929, 83376, 83337, 83379, - 83380, 64028, 8146, 64026, 41788, 194844, 0, 4351, 6343, 43247, 119888, - 70153, 119886, 119891, 72387, 119889, 11433, 119895, 119896, 194655, - 7801, 65578, 83361, 12915, 43968, 3297, 9699, 83357, 1135, 83350, 83351, - 83352, 1995, 6722, 983925, 128815, 2552, 41546, 60, 68394, 8649, 41549, - 78496, 72386, 83371, 6682, 83365, 78679, 43833, 41547, 983630, 2013, - 83362, 78530, 78532, 78528, 78529, 12832, 78493, 8081, 8362, 3537, - 119908, 9137, 7155, 8999, 917901, 78533, 3466, 0, 121466, 1996, 0, 3453, - 6282, 0, 2002, 2000, 120175, 537, 92976, 4179, 65119, 1998, 120746, 1842, - 0, 92674, 9628, 68446, 12081, 9826, 64502, 1767, 0, 983248, 120001, - 120201, 983646, 124975, 127952, 3059, 44024, 120204, 43491, 92693, 0, - 121472, 92452, 4100, 920, 1811, 1355, 43189, 0, 3592, 10078, 0, 78162, - 119558, 8592, 65870, 66417, 74504, 10742, 72400, 42918, 1994, 9281, 3296, - 12865, 1997, 1895, + 64480, 194875, 8423, 3348, 448, 66907, 9717, 119311, 100738, 997, 119998, + 917910, 92577, 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, + 127760, 72390, 120713, 119228, 12035, 983906, 2818, 0, 74411, 73793, + 129424, 4172, 71252, 119992, 8373, 10873, 12197, 125074, 195014, 92265, + 69706, 100858, 6834, 74347, 74958, 69645, 126982, 74563, 64828, 11419, + 126570, 766, 1257, 194598, 118845, 11381, 3265, 66617, 3274, 126629, + 83254, 71861, 983950, 72796, 41989, 121317, 194806, 3418, 3263, 917922, + 65672, 69243, 3270, 64539, 11489, 917911, 0, 0, 71127, 9505, 65518, + 128498, 756, 120400, 125243, 983700, 194621, 7261, 92547, 186, 983769, + 72771, 5770, 13179, 65830, 12612, 12949, 64856, 12800, 127529, 74203, + 64718, 11507, 78673, 92434, 74626, 113760, 11578, 983837, 119296, 120970, + 121127, 125101, 0, 70083, 9254, 66877, 1794, 68310, 64521, 5624, 72766, + 120221, 119958, 120223, 3617, 66636, 64886, 94061, 68659, 120213, 120214, + 1872, 66508, 120467, 41079, 10748, 5502, 119330, 4452, 128088, 983560, + 92526, 4511, 120958, 983877, 64678, 11425, 0, 43245, 1231, 68861, 69903, + 983643, 9003, 8192, 0, 5305, 9653, 10616, 8694, 9546, 983237, 128332, + 70421, 120200, 65205, 120202, 64063, 9878, 74780, 119058, 78202, 64058, + 8799, 42131, 128662, 64062, 1028, 64060, 64059, 837, 10567, 72384, 43103, + 100352, 120754, 11427, 2902, 64043, 64042, 43749, 10756, 64047, 42606, + 64045, 64044, 43979, 10076, 64040, 43060, 100356, 1034, 3392, 83336, + 43091, 64033, 64032, 42735, 43498, 64037, 64036, 64035, 4291, 129157, + 64015, 64014, 64681, 83394, 83395, 78145, 71898, 43090, 83391, 3476, + 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, 64517, 78153, 2538, + 64009, 204, 100841, 4802, 4111, 8239, 9098, 4805, 64001, 64057, 7885, + 7247, 64054, 983268, 118921, 4767, 9343, 64049, 64048, 120034, 1133, + 64053, 64052, 43453, 64050, 41340, 118975, 83261, 10005, 12329, 41333, + 83259, 8489, 1942, 100843, 194834, 42520, 65510, 125044, 68291, 10760, + 64023, 64022, 64021, 6582, 43670, 127798, 64025, 9167, 42151, 78244, + 983232, 2026, 64019, 64018, 64017, 64016, 12768, 100537, 7582, 78252, + 78248, 77914, 78246, 78247, 120791, 77915, 78766, 6788, 13094, 77920, + 7532, 41414, 78520, 3179, 70745, 64769, 78514, 78517, 11461, 74454, + 10751, 9051, 120720, 6708, 10535, 118955, 68218, 55274, 2008, 64031, + 64030, 294, 41874, 83383, 64790, 65929, 83376, 83337, 83379, 83380, + 64028, 8146, 64026, 41788, 100406, 983650, 4351, 6343, 43247, 119888, + 70153, 100753, 78733, 72387, 119889, 11433, 100544, 119896, 194655, 7801, + 65578, 83361, 12915, 43968, 3297, 9699, 83357, 1135, 83350, 83351, 83352, + 1995, 6722, 983925, 128815, 2552, 41546, 60, 68394, 8649, 41549, 78496, + 72386, 83371, 6682, 83365, 78679, 43833, 41547, 983630, 2013, 83362, + 78530, 78532, 78528, 78529, 12832, 78493, 8081, 8362, 3537, 119908, 9137, + 7155, 2264, 917901, 78533, 3466, 194987, 121039, 1996, 983675, 3453, + 3412, 0, 2002, 2000, 120175, 537, 92976, 4179, 65119, 1998, 120746, 1842, + 0, 92674, 9628, 68446, 12081, 9826, 64502, 1767, 3413, 983248, 120001, + 120201, 983646, 124975, 127952, 3059, 44024, 120204, 43491, 92693, + 100547, 121472, 92452, 4100, 920, 1811, 1355, 43189, 0, 3592, 10078, + 100394, 78162, 100846, 8592, 65870, 66417, 74504, 10742, 72400, 42918, + 1994, 9281, 3296, 12865, 1997, 1895, }; #define code_magic 47 -- cgit v1.2.1 From 4f3920fccc1a41608c9615ec78038232b0382f8f Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Thu, 15 Sep 2016 20:19:47 +0300 Subject: Issue #28114: Fix a crash in parse_envlist() when env contains byte strings Patch by Eryk Sun. --- Modules/posixmodule.c | 56 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 17 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 43e3c77cbb..32d097872b 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -4729,28 +4729,31 @@ free_string_array(EXECV_CHAR **array, Py_ssize_t count) PyMem_DEL(array); } -static -int fsconvert_strdup(PyObject *o, EXECV_CHAR**out) +static int +fsconvert_strdup(PyObject *o, EXECV_CHAR **out) { Py_ssize_t size; + PyObject *ub; + int result = 0; #if defined(HAVE_WEXECV) || defined(HAVE_WSPAWNV) - *out = PyUnicode_AsWideCharString(o, &size); - if (!*out) + if (!PyUnicode_FSDecoder(o, &ub)) return 0; + *out = PyUnicode_AsWideCharString(ub, &size); + if (*out) + result = 1; #else - PyObject *bytes; - if (!PyUnicode_FSConverter(o, &bytes)) + if (!PyUnicode_FSConverter(o, &ub)) return 0; - size = PyBytes_GET_SIZE(bytes); - *out = PyMem_Malloc(size+1); - if (!*out) { + size = PyBytes_GET_SIZE(ub); + *out = PyMem_Malloc(size + 1); + if (*out) { + memcpy(*out, PyBytes_AS_STRING(ub), size + 1); + result = 1; + } else PyErr_NoMemory(); - return 0; - } - memcpy(*out, PyBytes_AsString(bytes), size+1); - Py_DECREF(bytes); #endif - return 1; + Py_DECREF(ub); + return result; } #endif @@ -4760,7 +4763,7 @@ parse_envlist(PyObject* env, Py_ssize_t *envc_ptr) { Py_ssize_t i, pos, envc; PyObject *keys=NULL, *vals=NULL; - PyObject *key, *val, *keyval; + PyObject *key, *val, *key2, *val2, *keyval; EXECV_CHAR **envlist; i = PyMapping_Size(env); @@ -4790,7 +4793,26 @@ parse_envlist(PyObject* env, Py_ssize_t *envc_ptr) if (!key || !val) goto error; - keyval = PyUnicode_FromFormat("%U=%U", key, val); +#if defined(HAVE_WEXECV) || defined(HAVE_WSPAWNV) + if (!PyUnicode_FSDecoder(key, &key2)) + goto error; + if (!PyUnicode_FSDecoder(val, &val2)) { + Py_DECREF(key2); + goto error; + } + keyval = PyUnicode_FromFormat("%U=%U", key2, val2); +#else + if (!PyUnicode_FSConverter(key, &key2)) + goto error; + if (!PyUnicode_FSConverter(val, &val2)) { + Py_DECREF(key2); + goto error; + } + keyval = PyBytes_FromFormat("%s=%s", PyBytes_AS_STRING(key2), + PyBytes_AS_STRING(val2)); +#endif + Py_DECREF(key2); + Py_DECREF(val2); if (!keyval) goto error; @@ -4798,7 +4820,7 @@ parse_envlist(PyObject* env, Py_ssize_t *envc_ptr) Py_DECREF(keyval); goto error; } - + Py_DECREF(keyval); } Py_DECREF(vals); -- cgit v1.2.1 From 772efee82991c09e48737aae39aca2705a04aa83 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Thu, 15 Sep 2016 20:45:16 +0300 Subject: Issue #28156: Export os.getpid() conditionally Patch by Ed Schouten. --- Modules/clinic/posixmodule.c.h | 10 +++++++++- Modules/posixmodule.c | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index fdb3970425..72d7834211 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -2349,6 +2349,8 @@ os_getgid(PyObject *module, PyObject *Py_UNUSED(ignored)) #endif /* defined(HAVE_GETGID) */ +#if defined(HAVE_GETPID) + PyDoc_STRVAR(os_getpid__doc__, "getpid($module, /)\n" "--\n" @@ -2367,6 +2369,8 @@ os_getpid(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_getpid_impl(module); } +#endif /* defined(HAVE_GETPID) */ + #if defined(HAVE_GETGROUPS) PyDoc_STRVAR(os_getgroups__doc__, @@ -5841,6 +5845,10 @@ exit: #define OS_GETGID_METHODDEF #endif /* !defined(OS_GETGID_METHODDEF) */ +#ifndef OS_GETPID_METHODDEF + #define OS_GETPID_METHODDEF +#endif /* !defined(OS_GETPID_METHODDEF) */ + #ifndef OS_GETGROUPS_METHODDEF #define OS_GETGROUPS_METHODDEF #endif /* !defined(OS_GETGROUPS_METHODDEF) */ @@ -6140,4 +6148,4 @@ exit: #ifndef OS_GETRANDOM_METHODDEF #define OS_GETRANDOM_METHODDEF #endif /* !defined(OS_GETRANDOM_METHODDEF) */ -/*[clinic end generated code: output=dfa6bc9d1f2db750 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b9ed5703d2feb0d9 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 32d097872b..84566d80ad 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -5895,6 +5895,7 @@ os_getgid_impl(PyObject *module) #endif /* HAVE_GETGID */ +#ifdef HAVE_GETPID /*[clinic input] os.getpid @@ -5907,6 +5908,7 @@ os_getpid_impl(PyObject *module) { return PyLong_FromPid(getpid()); } +#endif /* HAVE_GETPID */ #ifdef HAVE_GETGROUPLIST -- cgit v1.2.1 From 8d9c31e48a0eda1a5f16fca31aebd970074fcd27 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 17 Sep 2016 12:22:41 -0700 Subject: Issue #28192: Don't import readline in isolated mode --- Modules/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/main.c b/Modules/main.c index 0b82f480a6..6986d94b42 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -703,7 +703,8 @@ Py_Main(int argc, wchar_t **argv) PySys_SetArgv(argc-_PyOS_optind, argv+_PyOS_optind); if ((Py_InspectFlag || (command == NULL && filename == NULL && module == NULL)) && - isatty(fileno(stdin))) { + isatty(fileno(stdin)) && + !Py_IsolatedFlag) { PyObject *v; v = PyImport_ImportModule("readline"); if (v == NULL) -- cgit v1.2.1 From 562cfab80352a94996094a39e18064a637b8fda9 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 17 Sep 2016 13:51:23 -0700 Subject: Issue #28161: Opening CON for write access fails Issue #28162: WindowsConsoleIO readall() fails if first line starts with Ctrl+Z Issue #28163: WindowsConsoleIO fileno() passes wrong flags to _open_osfhandle Issue #28164: _PyIO_get_console_type fails for various paths --- Modules/_io/winconsoleio.c | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/winconsoleio.c b/Modules/_io/winconsoleio.c index 2527ff13ca..7d13be5040 100644 --- a/Modules/_io/winconsoleio.c +++ b/Modules/_io/winconsoleio.c @@ -22,6 +22,7 @@ #define WIN32_LEAN_AND_MEAN #include +#include #include "_iomodule.h" @@ -68,27 +69,34 @@ char _PyIO_get_console_type(PyObject *path_or_fd) { return _get_console_type(handle); } - PyObject *decoded = Py_None; - Py_INCREF(decoded); + PyObject *decoded, *decoded_upper; int d = PyUnicode_FSDecoder(path_or_fd, &decoded); if (!d) { PyErr_Clear(); + return '\0'; + } + if (!PyUnicode_Check(decoded)) { Py_CLEAR(decoded); return '\0'; } + decoded_upper = PyObject_CallMethod(decoded, "upper", ""); + Py_CLEAR(decoded); + if (!decoded_upper) { + PyErr_Clear(); + return '\0'; + } char m = '\0'; - if (!PyUnicode_Check(decoded)) { - return '\0'; - } else if (PyUnicode_CompareWithASCIIString(decoded, "CONIN$") == 0) { + if (PyUnicode_CompareWithASCIIString(decoded_upper, "CONIN$") == 0) { m = 'r'; - } else if (PyUnicode_CompareWithASCIIString(decoded, "CONOUT$") == 0 || - PyUnicode_CompareWithASCIIString(decoded, "CON") == 0) { + } else if (PyUnicode_CompareWithASCIIString(decoded_upper, "CONOUT$") == 0) { m = 'w'; + } else if (PyUnicode_CompareWithASCIIString(decoded_upper, "CON") == 0) { + m = 'x'; } - Py_CLEAR(decoded); + Py_CLEAR(decoded_upper); return m; } @@ -227,6 +235,7 @@ _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, { const char *s; wchar_t *name = NULL; + char console_type = '\0'; int ret = 0; int rwa = 0; int fd = -1; @@ -270,6 +279,7 @@ _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, Py_ssize_t length; name = PyUnicode_AsWideCharString(decodedname, &length); + console_type = _PyIO_get_console_type(decodedname); Py_CLEAR(decodedname); if (name == NULL) return -1; @@ -294,12 +304,16 @@ _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, goto bad_mode; rwa = 1; self->readable = 1; + if (console_type == 'x') + console_type = 'r'; break; case 'w': if (rwa) goto bad_mode; rwa = 1; self->writable = 1; + if (console_type == 'x') + console_type = 'w'; break; default: PyErr_Format(PyExc_ValueError, @@ -327,7 +341,7 @@ _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, } if (self->writable) - access |= GENERIC_WRITE; + access = GENERIC_WRITE; Py_BEGIN_ALLOW_THREADS /* Attempt to open for read/write initially, then fall back @@ -347,12 +361,15 @@ _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, } } - if (self->writable && _get_console_type(self->handle) != 'w') { + if (console_type == '\0') + console_type = _get_console_type(self->handle); + + if (self->writable && console_type != 'w') { PyErr_SetString(PyExc_ValueError, "Cannot open console input buffer for writing"); goto error; } - if (self->readable && _get_console_type(self->handle) != 'r') { + if (self->readable && console_type != 'r') { PyErr_SetString(PyExc_ValueError, "Cannot open console output buffer for reading"); goto error; @@ -440,9 +457,9 @@ _io__WindowsConsoleIO_fileno_impl(winconsoleio *self) if (self->fd < 0 && self->handle != INVALID_HANDLE_VALUE) { _Py_BEGIN_SUPPRESS_IPH if (self->writable) - self->fd = _open_osfhandle((intptr_t)self->handle, 'wb'); + self->fd = _open_osfhandle((intptr_t)self->handle, _O_WRONLY | _O_BINARY); else - self->fd = _open_osfhandle((intptr_t)self->handle, 'rb'); + self->fd = _open_osfhandle((intptr_t)self->handle, _O_RDONLY | _O_BINARY); _Py_END_SUPPRESS_IPH } if (self->fd < 0) @@ -776,7 +793,7 @@ _io__WindowsConsoleIO_readall_impl(winconsoleio *self) len += n; } - if (len > 0 && buf[0] == '\x1a' && _buflen(self) == 0) { + if (len == 0 || buf[0] == '\x1a' && _buflen(self) == 0) { /* when the result starts with ^Z we return an empty buffer */ PyMem_Free(buf); return PyBytes_FromStringAndSize(NULL, 0); -- cgit v1.2.1 From 43134a0dac6bc410a9c63e42d5ad209165ae0bcf Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 18 Sep 2016 18:12:21 -0700 Subject: stop using Py_LL and Py_ULL --- Modules/_datetimemodule.c | 2 +- Modules/sha512module.c | 166 +++++++++++++++++++++++----------------------- 2 files changed, 84 insertions(+), 84 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 381835ddd2..1a63a01991 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4206,7 +4206,7 @@ typedef struct tm *(*TM_FUNC)(const time_t *timer, struct tm*); * 23 hours at 1969-09-30 13:00:00 in Kwajalein. */ static long long max_fold_seconds = 24 * 3600; /* NB: date(1970,1,1).toordinal() == 719163 */ -static long long epoch = Py_LL(719163) * 24 * 60 * 60; +static long long epoch = 719163LL * 24 * 60 * 60; static long long utc_to_seconds(int year, int month, int day, diff --git a/Modules/sha512module.c b/Modules/sha512module.c index f5f9e18768..17775ae57b 100644 --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -119,12 +119,12 @@ static void SHAcopy(SHAobject *src, SHAobject *dest) /* Various logical functions */ #define ROR64(x, y) \ - ( ((((x) & Py_ULL(0xFFFFFFFFFFFFFFFF))>>((unsigned long long)(y) & 63)) | \ - ((x)<<((unsigned long long)(64-((y) & 63))))) & Py_ULL(0xFFFFFFFFFFFFFFFF)) + ( ((((x) & 0xFFFFFFFFFFFFFFFFULL)>>((unsigned long long)(y) & 63)) | \ + ((x)<<((unsigned long long)(64-((y) & 63))))) & 0xFFFFFFFFFFFFFFFFULL) #define Ch(x,y,z) (z ^ (x & (y ^ z))) #define Maj(x,y,z) (((x | y) & z) | (x & y)) #define S(x, n) ROR64((x),(n)) -#define R(x, n) (((x) & Py_ULL(0xFFFFFFFFFFFFFFFF)) >> ((unsigned long long)n)) +#define R(x, n) (((x) & 0xFFFFFFFFFFFFFFFFULL) >> ((unsigned long long)n)) #define Sigma0(x) (S(x, 28) ^ S(x, 34) ^ S(x, 39)) #define Sigma1(x) (S(x, 14) ^ S(x, 18) ^ S(x, 41)) #define Gamma0(x) (S(x, 1) ^ S(x, 8) ^ R(x, 7)) @@ -156,86 +156,86 @@ sha512_transform(SHAobject *sha_info) d += t0; \ h = t0 + t1; - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,Py_ULL(0x428a2f98d728ae22)); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],1,Py_ULL(0x7137449123ef65cd)); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],2,Py_ULL(0xb5c0fbcfec4d3b2f)); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],3,Py_ULL(0xe9b5dba58189dbbc)); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],4,Py_ULL(0x3956c25bf348b538)); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],5,Py_ULL(0x59f111f1b605d019)); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],6,Py_ULL(0x923f82a4af194f9b)); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],7,Py_ULL(0xab1c5ed5da6d8118)); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],8,Py_ULL(0xd807aa98a3030242)); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],9,Py_ULL(0x12835b0145706fbe)); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],10,Py_ULL(0x243185be4ee4b28c)); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],11,Py_ULL(0x550c7dc3d5ffb4e2)); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],12,Py_ULL(0x72be5d74f27b896f)); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],13,Py_ULL(0x80deb1fe3b1696b1)); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],14,Py_ULL(0x9bdc06a725c71235)); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],15,Py_ULL(0xc19bf174cf692694)); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],16,Py_ULL(0xe49b69c19ef14ad2)); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],17,Py_ULL(0xefbe4786384f25e3)); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],18,Py_ULL(0x0fc19dc68b8cd5b5)); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],19,Py_ULL(0x240ca1cc77ac9c65)); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],20,Py_ULL(0x2de92c6f592b0275)); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],21,Py_ULL(0x4a7484aa6ea6e483)); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],22,Py_ULL(0x5cb0a9dcbd41fbd4)); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],23,Py_ULL(0x76f988da831153b5)); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],24,Py_ULL(0x983e5152ee66dfab)); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],25,Py_ULL(0xa831c66d2db43210)); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],26,Py_ULL(0xb00327c898fb213f)); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],27,Py_ULL(0xbf597fc7beef0ee4)); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],28,Py_ULL(0xc6e00bf33da88fc2)); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],29,Py_ULL(0xd5a79147930aa725)); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],30,Py_ULL(0x06ca6351e003826f)); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],31,Py_ULL(0x142929670a0e6e70)); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],32,Py_ULL(0x27b70a8546d22ffc)); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],33,Py_ULL(0x2e1b21385c26c926)); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],34,Py_ULL(0x4d2c6dfc5ac42aed)); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],35,Py_ULL(0x53380d139d95b3df)); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],36,Py_ULL(0x650a73548baf63de)); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],37,Py_ULL(0x766a0abb3c77b2a8)); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],38,Py_ULL(0x81c2c92e47edaee6)); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],39,Py_ULL(0x92722c851482353b)); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],40,Py_ULL(0xa2bfe8a14cf10364)); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],41,Py_ULL(0xa81a664bbc423001)); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],42,Py_ULL(0xc24b8b70d0f89791)); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],43,Py_ULL(0xc76c51a30654be30)); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],44,Py_ULL(0xd192e819d6ef5218)); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],45,Py_ULL(0xd69906245565a910)); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],46,Py_ULL(0xf40e35855771202a)); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],47,Py_ULL(0x106aa07032bbd1b8)); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],48,Py_ULL(0x19a4c116b8d2d0c8)); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],49,Py_ULL(0x1e376c085141ab53)); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],50,Py_ULL(0x2748774cdf8eeb99)); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],51,Py_ULL(0x34b0bcb5e19b48a8)); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],52,Py_ULL(0x391c0cb3c5c95a63)); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],53,Py_ULL(0x4ed8aa4ae3418acb)); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],54,Py_ULL(0x5b9cca4f7763e373)); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],55,Py_ULL(0x682e6ff3d6b2b8a3)); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],56,Py_ULL(0x748f82ee5defb2fc)); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],57,Py_ULL(0x78a5636f43172f60)); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],58,Py_ULL(0x84c87814a1f0ab72)); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],59,Py_ULL(0x8cc702081a6439ec)); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],60,Py_ULL(0x90befffa23631e28)); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],61,Py_ULL(0xa4506cebde82bde9)); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],62,Py_ULL(0xbef9a3f7b2c67915)); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,Py_ULL(0xc67178f2e372532b)); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],64,Py_ULL(0xca273eceea26619c)); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],65,Py_ULL(0xd186b8c721c0c207)); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],66,Py_ULL(0xeada7dd6cde0eb1e)); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],67,Py_ULL(0xf57d4f7fee6ed178)); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],68,Py_ULL(0x06f067aa72176fba)); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],69,Py_ULL(0x0a637dc5a2c898a6)); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],70,Py_ULL(0x113f9804bef90dae)); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],71,Py_ULL(0x1b710b35131c471b)); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],72,Py_ULL(0x28db77f523047d84)); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],73,Py_ULL(0x32caab7b40c72493)); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],74,Py_ULL(0x3c9ebe0a15c9bebc)); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],75,Py_ULL(0x431d67c49c100d4c)); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],76,Py_ULL(0x4cc5d4becb3e42b6)); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],77,Py_ULL(0x597f299cfc657e2a)); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],78,Py_ULL(0x5fcb6fab3ad6faec)); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],79,Py_ULL(0x6c44198c4a475817)); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,0x428a2f98d728ae22ULL); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],1,0x7137449123ef65cdULL); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],2,0xb5c0fbcfec4d3b2fULL); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],3,0xe9b5dba58189dbbcULL); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],4,0x3956c25bf348b538ULL); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],5,0x59f111f1b605d019ULL); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],6,0x923f82a4af194f9bULL); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],7,0xab1c5ed5da6d8118ULL); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],8,0xd807aa98a3030242ULL); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],9,0x12835b0145706fbeULL); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],10,0x243185be4ee4b28cULL); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],11,0x550c7dc3d5ffb4e2ULL); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],12,0x72be5d74f27b896fULL); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],13,0x80deb1fe3b1696b1ULL); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],14,0x9bdc06a725c71235ULL); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],15,0xc19bf174cf692694ULL); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],16,0xe49b69c19ef14ad2ULL); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],17,0xefbe4786384f25e3ULL); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],18,0x0fc19dc68b8cd5b5ULL); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],19,0x240ca1cc77ac9c65ULL); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],20,0x2de92c6f592b0275ULL); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],21,0x4a7484aa6ea6e483ULL); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],22,0x5cb0a9dcbd41fbd4ULL); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],23,0x76f988da831153b5ULL); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],24,0x983e5152ee66dfabULL); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],25,0xa831c66d2db43210ULL); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],26,0xb00327c898fb213fULL); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],27,0xbf597fc7beef0ee4ULL); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],28,0xc6e00bf33da88fc2ULL); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],29,0xd5a79147930aa725ULL); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],30,0x06ca6351e003826fULL); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],31,0x142929670a0e6e70ULL); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],32,0x27b70a8546d22ffcULL); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],33,0x2e1b21385c26c926ULL); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],34,0x4d2c6dfc5ac42aedULL); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],35,0x53380d139d95b3dfULL); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],36,0x650a73548baf63deULL); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],37,0x766a0abb3c77b2a8ULL); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],38,0x81c2c92e47edaee6ULL); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],39,0x92722c851482353bULL); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],40,0xa2bfe8a14cf10364ULL); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],41,0xa81a664bbc423001ULL); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],42,0xc24b8b70d0f89791ULL); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],43,0xc76c51a30654be30ULL); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],44,0xd192e819d6ef5218ULL); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],45,0xd69906245565a910ULL); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],46,0xf40e35855771202aULL); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],47,0x106aa07032bbd1b8ULL); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],48,0x19a4c116b8d2d0c8ULL); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],49,0x1e376c085141ab53ULL); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],50,0x2748774cdf8eeb99ULL); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],51,0x34b0bcb5e19b48a8ULL); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],52,0x391c0cb3c5c95a63ULL); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],53,0x4ed8aa4ae3418acbULL); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],54,0x5b9cca4f7763e373ULL); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],55,0x682e6ff3d6b2b8a3ULL); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],56,0x748f82ee5defb2fcULL); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],57,0x78a5636f43172f60ULL); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],58,0x84c87814a1f0ab72ULL); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],59,0x8cc702081a6439ecULL); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],60,0x90befffa23631e28ULL); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],61,0xa4506cebde82bde9ULL); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],62,0xbef9a3f7b2c67915ULL); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,0xc67178f2e372532bULL); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],64,0xca273eceea26619cULL); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],65,0xd186b8c721c0c207ULL); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],66,0xeada7dd6cde0eb1eULL); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],67,0xf57d4f7fee6ed178ULL); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],68,0x06f067aa72176fbaULL); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],69,0x0a637dc5a2c898a6ULL); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],70,0x113f9804bef90daeULL); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],71,0x1b710b35131c471bULL); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],72,0x28db77f523047d84ULL); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],73,0x32caab7b40c72493ULL); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],74,0x3c9ebe0a15c9bebcULL); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],75,0x431d67c49c100d4cULL); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],76,0x4cc5d4becb3e42b6ULL); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],77,0x597f299cfc657e2aULL); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],78,0x5fcb6fab3ad6faecULL); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],79,0x6c44198c4a475817ULL); #undef RND -- cgit v1.2.1 From b03e7e664401971a2852b522273d32cae445f7cd Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 19 Sep 2016 11:55:44 +0200 Subject: Fix memory leak in path_converter() Issue #28200: Replace PyUnicode_AsWideCharString() with PyUnicode_AsUnicodeAndSize(). --- Modules/posixmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index ba54249684..470ee92fa1 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -920,7 +920,7 @@ path_converter(PyObject *o, void *p) if (is_unicode) { #ifdef MS_WINDOWS - wide = PyUnicode_AsWideCharString(o, &length); + wide = PyUnicode_AsUnicodeAndSize(o, &length); if (!wide) { goto exit; } -- cgit v1.2.1 From 3d8dfb6ef387e38b2fdf2ea172742197da6803c4 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 19 Sep 2016 22:20:13 -0700 Subject: revert expat changes --- Modules/expat/pyexpatns.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/expat/pyexpatns.h b/Modules/expat/pyexpatns.h index cfb742ee00..999c5c730a 100644 --- a/Modules/expat/pyexpatns.h +++ b/Modules/expat/pyexpatns.h @@ -26,7 +26,7 @@ * http://lxr.mozilla.org/seamonkey/source/modules/libimg/png/mozpngconf.h#115 * * The list of relevant exported symbols can be had with this command: - * + * nm pyexpat.so \ | grep -v " [a-zBUA] " \ | grep -v "_fini\|_init\|initpyexpat" -- cgit v1.2.1 From a57fe851b0eaecba2b49390200a01bc3bc7c549c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 20 Sep 2016 23:00:59 +0200 Subject: Fix memleak in os.getrandom() Issue #27778: Fix a memory leak in os.getrandom() when the getrandom() is interrupted by a signal and a signal handler raises a Python exception. Modify also os_getrandom_impl() to avoid the temporary buffer, use directly a Python bytes object. --- Modules/posixmodule.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 470ee92fa1..28d30b0f9a 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12047,42 +12047,50 @@ static PyObject * os_getrandom_impl(PyObject *module, Py_ssize_t size, int flags) /*[clinic end generated code: output=b3a618196a61409c input=59bafac39c594947]*/ { - char *buffer; - Py_ssize_t n; PyObject *bytes; + Py_ssize_t n; if (size < 0) { errno = EINVAL; return posix_error(); } - buffer = PyMem_Malloc(size); - if (buffer == NULL) { + bytes = PyBytes_FromStringAndSize(NULL, size); + if (bytes == NULL) { PyErr_NoMemory(); return NULL; } while (1) { - n = syscall(SYS_getrandom, buffer, size, flags); + n = syscall(SYS_getrandom, + PyBytes_AS_STRING(bytes), + PyBytes_GET_SIZE(bytes), + flags); if (n < 0 && errno == EINTR) { if (PyErr_CheckSignals() < 0) { - return NULL; + goto error; } + + /* getrandom() was interrupted by a signal: retry */ continue; } break; } if (n < 0) { - PyMem_Free(buffer); PyErr_SetFromErrno(PyExc_OSError); - return NULL; + goto error; } - bytes = PyBytes_FromStringAndSize(buffer, n); - PyMem_Free(buffer); + if (n != size) { + _PyBytes_Resize(&bytes, n); + } return bytes; + +error: + Py_DECREF(bytes); + return NULL; } #endif /* HAVE_GETRANDOM_SYSCALL */ -- cgit v1.2.1 From 8a7b0c85c0206348c8922009fc26930e0052054a Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 21 Sep 2016 14:36:44 +0200 Subject: Don't define PY_WITH_KECCAK --- Modules/_sha3/sha3module.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c index 04ac6318b2..11aaa1f6b0 100644 --- a/Modules/_sha3/sha3module.c +++ b/Modules/_sha3/sha3module.c @@ -136,8 +136,6 @@ class _sha3.shake_256 "SHA3object *" "&SHAKE256type" /* The structure for storing SHA3 info */ -#define PY_WITH_KECCAK 0 - typedef struct { PyObject_HEAD SHA3_state hash_state; -- cgit v1.2.1 From 491968ae74c1e7faf2822ad42a8eddcb615343b7 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Sat, 24 Sep 2016 10:48:05 +0200 Subject: Finish GC code for SSLSession and increase test coverage --- Modules/_ssl.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index fc7a989a8d..4755c97d95 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -149,10 +149,12 @@ static int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne) } #ifndef OPENSSL_NO_COMP +/* LCOV_EXCL_START */ static int COMP_get_type(const COMP_METHOD *meth) { return meth->type; } +/* LCOV_EXCL_END */ #endif static pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx) @@ -2408,8 +2410,7 @@ PySSL_get_session(PySSLSocket *self, void *closure) { Py_RETURN_NONE; } #endif - - pysess = PyObject_New(PySSLSession, &PySSLSession_Type); + pysess = PyObject_GC_New(PySSLSession, &PySSLSession_Type); if (pysess == NULL) { SSL_SESSION_free(session); return NULL; @@ -2419,6 +2420,7 @@ PySSL_get_session(PySSLSocket *self, void *closure) { pysess->ctx = self->ctx; Py_INCREF(pysess->ctx); pysess->session = session; + PyObject_GC_Track(pysess); return (PyObject *)pysess; } @@ -4289,11 +4291,12 @@ static PyTypeObject PySSLMemoryBIO_Type = { static void PySSLSession_dealloc(PySSLSession *self) { + PyObject_GC_UnTrack(self); Py_XDECREF(self->ctx); if (self->session != NULL) { SSL_SESSION_free(self->session); } - PyObject_Del(self); + PyObject_GC_Del(self); } static PyObject * @@ -4455,7 +4458,7 @@ static PyTypeObject PySSLSession_Type = { 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /*tp_flags*/ 0, /*tp_doc*/ (traverseproc)PySSLSession_traverse, /*tp_traverse*/ (inquiry)PySSLSession_clear, /*tp_clear*/ @@ -4590,6 +4593,7 @@ _ssl_RAND_status_impl(PyObject *module) } #ifndef OPENSSL_NO_EGD +/* LCOV_EXCL_START */ /*[clinic input] _ssl.RAND_egd path: object(converter="PyUnicode_FSConverter") @@ -4615,6 +4619,7 @@ _ssl_RAND_egd_impl(PyObject *module, PyObject *path) } return PyLong_FromLong(bytes); } +/* LCOV_EXCL_STOP */ #endif /* OPENSSL_NO_EGD */ -- cgit v1.2.1 From b0dc7d5f04e7e4e8db865e994953dcfe5e9b6abb Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Sat, 24 Sep 2016 12:07:21 +0200 Subject: Typo --- Modules/_ssl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 4755c97d95..b198857060 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -154,7 +154,7 @@ static int COMP_get_type(const COMP_METHOD *meth) { return meth->type; } -/* LCOV_EXCL_END */ +/* LCOV_EXCL_STOP */ #endif static pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx) -- cgit v1.2.1 From 6bf14c47b10de875bf240fdba889ba2519b9aff7 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 26 Sep 2016 14:08:47 +0200 Subject: Issue #28277: remove linefeed character from iomodule.h. Patch by Michael Felt --- Modules/_io/_iomodule.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h index 5d3da29ce1..4ed9ebf66a 100644 --- a/Modules/_io/_iomodule.h +++ b/Modules/_io/_iomodule.h @@ -153,7 +153,7 @@ extern PyObject *_PyIO_get_locale_module(_PyIO_State *); #ifdef MS_WINDOWS extern char _PyIO_get_console_type(PyObject *); -#endif +#endif extern PyObject *_PyIO_str_close; extern PyObject *_PyIO_str_closed; -- cgit v1.2.1 From ada5f796e97b5a38b43571134f846366876ae54d Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Wed, 28 Sep 2016 17:31:35 -0400 Subject: Issue #28148: Stop using localtime() and gmtime() in the time module. Introduced platform independent _PyTime_localtime API that is similar to POSIX localtime_r, but available on all platforms. Patch by Ed Schouten. --- Modules/_datetimemodule.c | 67 +++++++++++------------------------------------ Modules/timemodule.c | 55 ++++++++++---------------------------- 2 files changed, 30 insertions(+), 92 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 1a63a01991..5ddf6504c5 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -9,18 +9,6 @@ #ifdef MS_WINDOWS # include /* struct timeval */ -static struct tm *localtime_r(const time_t *timep, struct tm *result) -{ - if (localtime_s(result, timep) == 0) - return result; - return NULL; -} -static struct tm *gmtime_r(const time_t *timep, struct tm *result) -{ - if (gmtime_s(result, timep) == 0) - return result; - return NULL; -} #endif /* Differentiate between building the core module and building extension @@ -2529,15 +2517,8 @@ date_local_from_object(PyObject *cls, PyObject *obj) if (_PyTime_ObjectToTime_t(obj, &t, _PyTime_ROUND_FLOOR) == -1) return NULL; - if (localtime_r(&t, &tm) == NULL) { - /* unconvertible time */ -#ifdef EINVAL - if (errno == 0) - errno = EINVAL; -#endif - PyErr_SetFromErrno(PyExc_OSError); + if (_PyTime_localtime(t, &tm) != 0) return NULL; - } return PyObject_CallFunction(cls, "iii", tm.tm_year + 1900, @@ -4199,8 +4180,9 @@ datetime_new(PyTypeObject *type, PyObject *args, PyObject *kw) return self; } -/* TM_FUNC is the shared type of localtime_r() and gmtime_r(). */ -typedef struct tm *(*TM_FUNC)(const time_t *timer, struct tm*); +/* TM_FUNC is the shared type of _PyTime_localtime() and + * _PyTime_gmtime(). */ +typedef int (*TM_FUNC)(time_t timer, struct tm*); /* As of version 2015f max fold in IANA database is * 23 hours at 1969-09-30 13:00:00 in Kwajalein. */ @@ -4229,10 +4211,8 @@ local(long long u) return -1; } /* XXX: add bounds checking */ - if (localtime_r(&t, &local_time) == NULL) { - PyErr_SetFromErrno(PyExc_OSError); + if (_PyTime_localtime(t, &local_time) != 0) return -1; - } return utc_to_seconds(local_time.tm_year + 1900, local_time.tm_mon + 1, local_time.tm_mday, @@ -4252,13 +4232,8 @@ datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us, struct tm tm; int year, month, day, hour, minute, second, fold = 0; - if (f(&timet, &tm) == NULL) { -#ifdef EINVAL - if (errno == 0) - errno = EINVAL; -#endif - return PyErr_SetFromErrno(PyExc_OSError); - } + if (f(timet, &tm) != 0) + return NULL; year = tm.tm_year + 1900; month = tm.tm_mon + 1; @@ -4273,7 +4248,7 @@ datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us, */ second = Py_MIN(59, tm.tm_sec); - if (tzinfo == Py_None && f == localtime_r) { + if (tzinfo == Py_None && f == _PyTime_localtime) { long long probe_seconds, result_seconds, transition; result_seconds = utc_to_seconds(year, month, day, @@ -4361,7 +4336,8 @@ datetime_datetime_now_impl(PyTypeObject *type, PyObject *tz) return NULL; self = datetime_best_possible((PyObject *)type, - tz == Py_None ? localtime_r : gmtime_r, + tz == Py_None ? _PyTime_localtime : + _PyTime_gmtime, tz); if (self != NULL && tz != Py_None) { /* Convert UTC to tzinfo's zone. */ @@ -4376,7 +4352,7 @@ datetime_datetime_now_impl(PyTypeObject *type, PyObject *tz) static PyObject * datetime_utcnow(PyObject *cls, PyObject *dummy) { - return datetime_best_possible(cls, gmtime_r, Py_None); + return datetime_best_possible(cls, _PyTime_gmtime, Py_None); } /* Return new local datetime from timestamp (Python timestamp -- a double). */ @@ -4395,7 +4371,8 @@ datetime_fromtimestamp(PyObject *cls, PyObject *args, PyObject *kw) return NULL; self = datetime_from_timestamp(cls, - tzinfo == Py_None ? localtime_r : gmtime_r, + tzinfo == Py_None ? _PyTime_localtime : + _PyTime_gmtime, timestamp, tzinfo); if (self != NULL && tzinfo != Py_None) { @@ -4413,7 +4390,7 @@ datetime_utcfromtimestamp(PyObject *cls, PyObject *args) PyObject *result = NULL; if (PyArg_ParseTuple(args, "O:utcfromtimestamp", ×tamp)) - result = datetime_from_timestamp(cls, gmtime_r, timestamp, + result = datetime_from_timestamp(cls, _PyTime_gmtime, timestamp, Py_None); return result; } @@ -5040,14 +5017,8 @@ local_timezone_from_timestamp(time_t timestamp) PyObject *nameo = NULL; const char *zone = NULL; - if (localtime_r(×tamp, &local_time_tm) == NULL) { -#ifdef EINVAL - if (errno == 0) - errno = EINVAL; -#endif - PyErr_SetFromErrno(PyExc_OSError); + if (_PyTime_localtime(timestamp, &local_time_tm) != 0) return NULL; - } #ifdef HAVE_STRUCT_TM_TM_ZONE zone = local_time_tm.tm_zone; delta = new_delta(0, local_time_tm.tm_gmtoff, 0, 1); @@ -5067,14 +5038,8 @@ local_timezone_from_timestamp(time_t timestamp) if (local_time == NULL) { return NULL; } - if (gmtime_r(×tamp, &utc_time_tm) == NULL) { -#ifdef EINVAL - if (errno == 0) - errno = EINVAL; -#endif - PyErr_SetFromErrno(PyExc_OSError); + if (_PyTime_gmtime(timestamp, &utc_time_tm) != 0) return NULL; - } utc_time = new_datetime(utc_time_tm.tm_year + 1900, utc_time_tm.tm_mon + 1, utc_time_tm.tm_mday, diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 8194fd9a35..f0708338e8 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -343,21 +343,14 @@ static PyObject * time_gmtime(PyObject *self, PyObject *args) { time_t when; - struct tm buf, *local; + struct tm buf; if (!parse_time_t_args(args, "|O:gmtime", &when)) return NULL; errno = 0; - local = gmtime(&when); - if (local == NULL) { -#ifdef EINVAL - if (errno == 0) - errno = EINVAL; -#endif - return PyErr_SetFromErrno(PyExc_OSError); - } - buf = *local; + if (_PyTime_gmtime(when, &buf) != 0) + return NULL; #ifdef HAVE_STRUCT_TM_TM_ZONE return tmtotuple(&buf); #else @@ -388,26 +381,6 @@ GMT). When 'seconds' is not passed in, convert the current time instead.\n\ If the platform supports the tm_gmtoff and tm_zone, they are available as\n\ attributes only."); -static int -pylocaltime(time_t *timep, struct tm *result) -{ - struct tm *local; - - assert (timep != NULL); - local = localtime(timep); - if (local == NULL) { - /* unconvertible time */ -#ifdef EINVAL - if (errno == 0) - errno = EINVAL; -#endif - PyErr_SetFromErrno(PyExc_OSError); - return -1; - } - *result = *local; - return 0; -} - static PyObject * time_localtime(PyObject *self, PyObject *args) { @@ -416,7 +389,7 @@ time_localtime(PyObject *self, PyObject *args) if (!parse_time_t_args(args, "|O:localtime", &when)) return NULL; - if (pylocaltime(&when, &buf) == -1) + if (_PyTime_localtime(when, &buf) != 0) return NULL; #ifdef HAVE_STRUCT_TM_TM_ZONE return tmtotuple(&buf); @@ -611,7 +584,7 @@ time_strftime(PyObject *self, PyObject *args) if (tup == NULL) { time_t tt = time(NULL); - if (pylocaltime(&tt, &buf) == -1) + if (_PyTime_localtime(tt, &buf) != 0) return NULL; } else if (!gettmarg(tup, &buf) || !checktm(&buf)) @@ -796,7 +769,7 @@ time_asctime(PyObject *self, PyObject *args) return NULL; if (tup == NULL) { time_t tt = time(NULL); - if (pylocaltime(&tt, &buf) == -1) + if (_PyTime_localtime(tt, &buf) != 0) return NULL; } else if (!gettmarg(tup, &buf) || !checktm(&buf)) @@ -818,7 +791,7 @@ time_ctime(PyObject *self, PyObject *args) struct tm buf; if (!parse_time_t_args(args, "|O:ctime", &tt)) return NULL; - if (pylocaltime(&tt, &buf) == -1) + if (_PyTime_localtime(tt, &buf) != 0) return NULL; return _asctime(&buf); } @@ -1239,18 +1212,18 @@ PyInit_timezone(PyObject *m) { { #define YEAR ((time_t)((365 * 24 + 6) * 3600)) time_t t; - struct tm *p; + struct tm p; long janzone, julyzone; char janname[10], julyname[10]; t = (time((time_t *)0) / YEAR) * YEAR; - p = localtime(&t); - get_zone(janname, 9, p); - janzone = -get_gmtoff(t, p); + _PyTime_localtime(t, &p); + get_zone(janname, 9, &p); + janzone = -get_gmtoff(t, &p); janname[9] = '\0'; t += YEAR/2; - p = localtime(&t); - get_zone(julyname, 9, p); - julyzone = -get_gmtoff(t, p); + _PyTime_localtime(t, &p); + get_zone(julyname, 9, &p); + julyzone = -get_gmtoff(t, &p); julyname[9] = '\0'; if( janzone < julyzone ) { -- cgit v1.2.1 From 181452835f33daf12f643dc2ba9ed90a8a339e08 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 29 Sep 2016 22:12:35 +0200 Subject: Fix xml.etree.ElementTree.Element.getiterator() Issue #28314: Fix function declaration (C flags) for the getiterator() method of xml.etree.ElementTree.Element. --- Modules/_elementtree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index dd8417a1ac..3362195ed6 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -3702,7 +3702,7 @@ static PyMethodDef element_methods[] = { _ELEMENTTREE_ELEMENT_ITERTEXT_METHODDEF _ELEMENTTREE_ELEMENT_ITERFIND_METHODDEF - {"getiterator", (PyCFunction)_elementtree_Element_iter, METH_VARARGS|METH_KEYWORDS, _elementtree_Element_iter__doc__}, + {"getiterator", (PyCFunction)_elementtree_Element_iter, METH_FASTCALL, _elementtree_Element_iter__doc__}, _ELEMENTTREE_ELEMENT_GETCHILDREN_METHODDEF _ELEMENTTREE_ELEMENT_ITEMS_METHODDEF -- cgit v1.2.1 From 3d0d1e31a864f8eac69b4fd63ccd947fb0d7c58b Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Mon, 3 Oct 2016 09:04:58 -0700 Subject: Issue #28217: Adds _testconsole module to test console input. Fixes some issues found by the tests. --- Modules/_io/_iomodule.h | 3 ++- Modules/_io/winconsoleio.c | 54 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 45 insertions(+), 12 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h index 4ed9ebf66a..daaebd2ab6 100644 --- a/Modules/_io/_iomodule.h +++ b/Modules/_io/_iomodule.h @@ -22,7 +22,8 @@ extern PyTypeObject PyIncrementalNewlineDecoder_Type; #ifndef Py_LIMITED_API #ifdef MS_WINDOWS extern PyTypeObject PyWindowsConsoleIO_Type; -#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type)) +PyAPI_DATA(PyObject *) _PyWindowsConsoleIO_Type; +#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), (PyTypeObject*)_PyWindowsConsoleIO_Type)) #endif /* MS_WINDOWS */ #endif /* Py_LIMITED_API */ diff --git a/Modules/_io/winconsoleio.c b/Modules/_io/winconsoleio.c index 0bf4ddf7e1..ee7a1b20a0 100644 --- a/Modules/_io/winconsoleio.c +++ b/Modules/_io/winconsoleio.c @@ -39,6 +39,11 @@ /* BUFMAX determines how many bytes can be read in one go. */ #define BUFMAX (32*1024*1024) +/* SMALLBUF determines how many utf-8 characters will be + buffered within the stream, in order to support reads + of less than one character */ +#define SMALLBUF 4 + char _get_console_type(HANDLE handle) { DWORD mode, peek_count; @@ -125,7 +130,8 @@ typedef struct { unsigned int blksize; PyObject *weakreflist; PyObject *dict; - char buf[4]; + char buf[SMALLBUF]; + wchar_t wbuf; } winconsoleio; PyTypeObject PyWindowsConsoleIO_Type; @@ -500,11 +506,11 @@ _io__WindowsConsoleIO_writable_impl(winconsoleio *self) static DWORD _buflen(winconsoleio *self) { - for (DWORD i = 0; i < 4; ++i) { + for (DWORD i = 0; i < SMALLBUF; ++i) { if (!self->buf[i]) return i; } - return 4; + return SMALLBUF; } static DWORD @@ -513,12 +519,10 @@ _copyfrombuf(winconsoleio *self, char *buf, DWORD len) DWORD n = 0; while (self->buf[0] && len--) { - n += 1; - buf[0] = self->buf[0]; - self->buf[0] = self->buf[1]; - self->buf[1] = self->buf[2]; - self->buf[2] = self->buf[3]; - self->buf[3] = 0; + buf[n++] = self->buf[0]; + for (int i = 1; i < SMALLBUF; ++i) + self->buf[i - 1] = self->buf[i]; + self->buf[SMALLBUF - 1] = 0; } return n; @@ -531,10 +535,13 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) { wchar_t *buf = (wchar_t*)PyMem_Malloc(maxlen * sizeof(wchar_t)); if (!buf) goto error; + *readlen = 0; + //DebugBreak(); Py_BEGIN_ALLOW_THREADS - for (DWORD off = 0; off < maxlen; off += BUFSIZ) { + DWORD off = 0; + while (off < maxlen) { DWORD n, len = min(maxlen - off, BUFSIZ); SetLastError(0); BOOL res = ReadConsoleW(handle, &buf[off], len, &n, NULL); @@ -550,7 +557,7 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) { err = 0; HANDLE hInterruptEvent = _PyOS_SigintEvent(); if (WaitForSingleObjectEx(hInterruptEvent, 100, FALSE) - == WAIT_OBJECT_0) { + == WAIT_OBJECT_0) { ResetEvent(hInterruptEvent); Py_BLOCK_THREADS sig = PyErr_CheckSignals(); @@ -568,7 +575,30 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) { /* If the buffer ended with a newline, break out */ if (buf[*readlen - 1] == '\n') break; + /* If the buffer ends with a high surrogate, expand the + buffer and read an extra character. */ + WORD char_type; + if (off + BUFSIZ >= maxlen && + GetStringTypeW(CT_CTYPE3, &buf[*readlen - 1], 1, &char_type) && + char_type == C3_HIGHSURROGATE) { + wchar_t *newbuf; + maxlen += 1; + Py_BLOCK_THREADS + newbuf = (wchar_t*)PyMem_Realloc(buf, maxlen * sizeof(wchar_t)); + Py_UNBLOCK_THREADS + if (!newbuf) { + sig = -1; + break; + } + buf = newbuf; + /* Only advance by n and not BUFSIZ in this case */ + off += n; + continue; + } + + off += BUFSIZ; } + Py_END_ALLOW_THREADS if (sig) @@ -1110,4 +1140,6 @@ PyTypeObject PyWindowsConsoleIO_Type = { 0, /* tp_finalize */ }; +PyAPI_DATA(PyObject *) _PyWindowsConsoleIO_Type = (PyObject*)&PyWindowsConsoleIO_Type; + #endif /* MS_WINDOWS */ -- cgit v1.2.1 From 516aa230aff72ee43e5507278f513e2c1472f293 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 8 Oct 2016 20:16:57 +0300 Subject: Issue #27998: Fixed bytes path support in os.scandir() on Windows. Patch by Eryk Sun. --- Modules/posixmodule.c | 89 +++++++++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 46 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 01194aa850..ef17981ff7 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1337,29 +1337,39 @@ win32_error_object(const char* function, PyObject* filename) #endif /* MS_WINDOWS */ static PyObject * -path_error(path_t *path) +path_object_error(PyObject *path) { #ifdef MS_WINDOWS - return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, - 0, path->object); + return PyErr_SetExcFromWindowsErrWithFilenameObject( + PyExc_OSError, 0, path); #else - return PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object); + return PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path); #endif } - static PyObject * -path_error2(path_t *path, path_t *path2) +path_object_error2(PyObject *path, PyObject *path2) { #ifdef MS_WINDOWS - return PyErr_SetExcFromWindowsErrWithFilenameObjects(PyExc_OSError, - 0, path->object, path2->object); + return PyErr_SetExcFromWindowsErrWithFilenameObjects( + PyExc_OSError, 0, path, path2); #else - return PyErr_SetFromErrnoWithFilenameObjects(PyExc_OSError, - path->object, path2->object); + return PyErr_SetFromErrnoWithFilenameObjects(PyExc_OSError, path, path2); #endif } +static PyObject * +path_error(path_t *path) +{ + return path_object_error(path->object); +} + +static PyObject * +path_error2(path_t *path, path_t *path2) +{ + return path_object_error2(path->object, path2->object); +} + /* POSIX generic methods */ @@ -11152,41 +11162,26 @@ static PyObject * DirEntry_fetch_stat(DirEntry *self, int follow_symlinks) { int result; - struct _Py_stat_struct st; + STRUCT_STAT st; + PyObject *ub; #ifdef MS_WINDOWS - const wchar_t *path; - - path = PyUnicode_AsUnicode(self->path); - if (!path) - return NULL; - - if (follow_symlinks) - result = win32_stat(path, &st); - else - result = win32_lstat(path, &st); - - if (result != 0) { - return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, - 0, self->path); - } + if (PyUnicode_FSDecoder(self->path, &ub)) { + const wchar_t *path = PyUnicode_AsUnicode(ub); #else /* POSIX */ - PyObject *bytes; - const char *path; - - if (!PyUnicode_FSConverter(self->path, &bytes)) + if (PyUnicode_FSConverter(self->path, &ub)) { + const char *path = PyBytes_AS_STRING(ub); +#endif + if (follow_symlinks) + result = STAT(path, &st); + else + result = LSTAT(path, &st); + Py_DECREF(ub); + } else return NULL; - path = PyBytes_AS_STRING(bytes); - - if (follow_symlinks) - result = STAT(path, &st); - else - result = LSTAT(path, &st); - Py_DECREF(bytes); if (result != 0) - return PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, self->path); -#endif + return path_object_error(self->path); return _pystat_fromstructstat(&st); } @@ -11356,17 +11351,19 @@ DirEntry_inode(DirEntry *self) { #ifdef MS_WINDOWS if (!self->got_file_index) { + PyObject *unicode; const wchar_t *path; - struct _Py_stat_struct stat; + STRUCT_STAT stat; + int result; - path = PyUnicode_AsUnicode(self->path); - if (!path) + if (!PyUnicode_FSDecoder(self->path, &unicode)) return NULL; + path = PyUnicode_AsUnicode(unicode); + result = LSTAT(path, &stat); + Py_DECREF(unicode); - if (win32_lstat(path, &stat) != 0) { - return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, - 0, self->path); - } + if (result != 0) + return path_object_error(self->path); self->win32_file_index = stat.st_ino; self->got_file_index = 1; -- cgit v1.2.1 From 9f35fd9eea76fa28832eb7a934ba8698f87e2037 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 8 Oct 2016 12:37:33 -0700 Subject: Issue #28162: Fixes Ctrl+Z handling in console readall() --- Modules/_io/winconsoleio.c | 49 +++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 20 deletions(-) (limited to 'Modules') diff --git a/Modules/_io/winconsoleio.c b/Modules/_io/winconsoleio.c index ee7a1b20a0..4666a3867a 100644 --- a/Modules/_io/winconsoleio.c +++ b/Modules/_io/winconsoleio.c @@ -816,44 +816,53 @@ _io__WindowsConsoleIO_readall_impl(winconsoleio *self) PyMem_Free(subbuf); - /* when the read starts with ^Z or is empty we break */ - if (n == 0 || buf[len] == '\x1a') + /* when the read is empty we break */ + if (n == 0) break; len += n; } - if (len == 0 || buf[0] == '\x1a' && _buflen(self) == 0) { + if (len == 0 && _buflen(self) == 0) { /* when the result starts with ^Z we return an empty buffer */ PyMem_Free(buf); return PyBytes_FromStringAndSize(NULL, 0); } - Py_BEGIN_ALLOW_THREADS - bytes_size = WideCharToMultiByte(CP_UTF8, 0, buf, len, - NULL, 0, NULL, NULL); - Py_END_ALLOW_THREADS + if (len) { + Py_BEGIN_ALLOW_THREADS + bytes_size = WideCharToMultiByte(CP_UTF8, 0, buf, len, + NULL, 0, NULL, NULL); + Py_END_ALLOW_THREADS - if (!bytes_size) { - DWORD err = GetLastError(); - PyMem_Free(buf); - return PyErr_SetFromWindowsErr(err); + if (!bytes_size) { + DWORD err = GetLastError(); + PyMem_Free(buf); + return PyErr_SetFromWindowsErr(err); + } + } else { + bytes_size = 0; } bytes_size += _buflen(self); bytes = PyBytes_FromStringAndSize(NULL, bytes_size); rn = _copyfrombuf(self, PyBytes_AS_STRING(bytes), bytes_size); - Py_BEGIN_ALLOW_THREADS - bytes_size = WideCharToMultiByte(CP_UTF8, 0, buf, len, - &PyBytes_AS_STRING(bytes)[rn], bytes_size - rn, NULL, NULL); - Py_END_ALLOW_THREADS + if (len) { + Py_BEGIN_ALLOW_THREADS + bytes_size = WideCharToMultiByte(CP_UTF8, 0, buf, len, + &PyBytes_AS_STRING(bytes)[rn], bytes_size - rn, NULL, NULL); + Py_END_ALLOW_THREADS - if (!bytes_size) { - DWORD err = GetLastError(); - PyMem_Free(buf); - Py_CLEAR(bytes); - return PyErr_SetFromWindowsErr(err); + if (!bytes_size) { + DWORD err = GetLastError(); + PyMem_Free(buf); + Py_CLEAR(bytes); + return PyErr_SetFromWindowsErr(err); + } + + /* add back the number of preserved bytes */ + bytes_size += rn; } PyMem_Free(buf); -- cgit v1.2.1 From 553d3108ffde8deed850a944a66a344c2fb14fd2 Mon Sep 17 00:00:00 2001 From: INADA Naoki Date: Sun, 9 Oct 2016 14:44:47 +0900 Subject: Issue #26801: Added C implementation of asyncio.Future. Original patch by Yury Selivanov. --- Modules/Setup.dist | 1 + Modules/_futuresmodule.c | 1034 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1035 insertions(+) create mode 100644 Modules/_futuresmodule.c (limited to 'Modules') diff --git a/Modules/Setup.dist b/Modules/Setup.dist index e17ff1212b..518af74b2a 100644 --- a/Modules/Setup.dist +++ b/Modules/Setup.dist @@ -181,6 +181,7 @@ _symtable symtablemodule.c #_datetime _datetimemodule.c # datetime accelerator #_bisect _bisectmodule.c # Bisection algorithms #_heapq _heapqmodule.c # Heap queue algorithm +#_futures _futuresmodule.c # Fast asyncio Future #unicodedata unicodedata.c # static Unicode character database diff --git a/Modules/_futuresmodule.c b/Modules/_futuresmodule.c new file mode 100644 index 0000000000..88953ff8c6 --- /dev/null +++ b/Modules/_futuresmodule.c @@ -0,0 +1,1034 @@ +#include "Python.h" +#include "structmember.h" + + +/* identifiers used from some functions */ +_Py_IDENTIFIER(call_soon); + + +/* State of the _futures module */ +static int _futuremod_ready; +static PyObject *traceback_extract_stack; +static PyObject *asyncio_get_event_loop; +static PyObject *asyncio_repr_info_func; +static PyObject *asyncio_InvalidStateError; +static PyObject *asyncio_CancelledError; + + +/* Get FutureIter from Future */ +static PyObject* new_future_iter(PyObject *fut); + + +/* make sure module state is initialized and ready to be used. */ +static int +_FuturesMod_EnsureState(void) +{ + if (!_futuremod_ready) { + PyErr_SetString(PyExc_RuntimeError, + "_futures module wasn't properly initialized"); + return -1; + } + return 0; +} + + +typedef enum { + STATE_PENDING, + STATE_CANCELLED, + STATE_FINISHED +} fut_state; + + +typedef struct { + PyObject_HEAD + PyObject *fut_loop; + PyObject *fut_callbacks; + PyObject *fut_exception; + PyObject *fut_result; + PyObject *fut_source_tb; + fut_state fut_state; + int fut_log_tb; + int fut_blocking; + PyObject *dict; + PyObject *fut_weakreflist; +} FutureObj; + + +static int +_schedule_callbacks(FutureObj *fut) +{ + Py_ssize_t len; + PyObject* iters; + int i; + + if (fut->fut_callbacks == NULL) { + PyErr_SetString(PyExc_RuntimeError, "NULL callbacks"); + return -1; + } + + len = PyList_GET_SIZE(fut->fut_callbacks); + if (len == 0) { + return 0; + } + + iters = PyList_GetSlice(fut->fut_callbacks, 0, len); + if (iters == NULL) { + return -1; + } + if (PyList_SetSlice(fut->fut_callbacks, 0, len, NULL) < 0) { + Py_DECREF(iters); + return -1; + } + + for (i = 0; i < len; i++) { + PyObject *handle = NULL; + PyObject *cb = PyList_GET_ITEM(iters, i); + + handle = _PyObject_CallMethodId( + fut->fut_loop, &PyId_call_soon, "OO", cb, fut, NULL); + + if (handle == NULL) { + Py_DECREF(iters); + return -1; + } + else { + Py_DECREF(handle); + } + } + + Py_DECREF(iters); + return 0; +} + +static int +FutureObj_init(FutureObj *fut, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"loop", NULL}; + PyObject *loop = NULL; + PyObject *res = NULL; + _Py_IDENTIFIER(get_debug); + + if (_FuturesMod_EnsureState()) { + return -1; + } + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|$O", kwlist, &loop)) { + return -1; + } + if (loop == NULL || loop == Py_None) { + loop = PyObject_CallObject(asyncio_get_event_loop, NULL); + if (loop == NULL) { + return -1; + } + } + else { + Py_INCREF(loop); + } + Py_CLEAR(fut->fut_loop); + fut->fut_loop = loop; + + res = _PyObject_CallMethodId(fut->fut_loop, &PyId_get_debug, "()", NULL); + if (res == NULL) { + return -1; + } + if (PyObject_IsTrue(res)) { + Py_CLEAR(res); + fut->fut_source_tb = PyObject_CallObject(traceback_extract_stack, NULL); + if (fut->fut_source_tb == NULL) { + return -1; + } + } + else { + Py_CLEAR(res); + } + + fut->fut_callbacks = PyList_New(0); + if (fut->fut_callbacks == NULL) { + return -1; + } + return 0; +} + +static int +FutureObj_clear(FutureObj *fut) +{ + Py_CLEAR(fut->fut_loop); + Py_CLEAR(fut->fut_callbacks); + Py_CLEAR(fut->fut_result); + Py_CLEAR(fut->fut_exception); + Py_CLEAR(fut->fut_source_tb); + Py_CLEAR(fut->dict); + return 0; +} + +static int +FutureObj_traverse(FutureObj *fut, visitproc visit, void *arg) +{ + Py_VISIT(fut->fut_loop); + Py_VISIT(fut->fut_callbacks); + Py_VISIT(fut->fut_result); + Py_VISIT(fut->fut_exception); + Py_VISIT(fut->fut_source_tb); + Py_VISIT(fut->dict); + return 0; +} + +PyDoc_STRVAR(pydoc_result, + "Return the result this future represents.\n" + "\n" + "If the future has been cancelled, raises CancelledError. If the\n" + "future's result isn't yet available, raises InvalidStateError. If\n" + "the future is done and has an exception set, this exception is raised." +); + +static PyObject * +FutureObj_result(FutureObj *fut, PyObject *arg) +{ + if (fut->fut_state == STATE_CANCELLED) { + PyErr_SetString(asyncio_CancelledError, ""); + return NULL; + } + + if (fut->fut_state != STATE_FINISHED) { + PyErr_SetString(asyncio_InvalidStateError, "Result is not ready."); + return NULL; + } + + fut->fut_log_tb = 0; + if (fut->fut_exception != NULL) { + PyObject *type = NULL; + type = PyExceptionInstance_Class(fut->fut_exception); + PyErr_SetObject(type, fut->fut_exception); + return NULL; + } + + Py_INCREF(fut->fut_result); + return fut->fut_result; +} + +PyDoc_STRVAR(pydoc_exception, + "Return the exception that was set on this future.\n" + "\n" + "The exception (or None if no exception was set) is returned only if\n" + "the future is done. If the future has been cancelled, raises\n" + "CancelledError. If the future isn't done yet, raises\n" + "InvalidStateError." +); + +static PyObject * +FutureObj_exception(FutureObj *fut, PyObject *arg) +{ + if (_FuturesMod_EnsureState()) { + return NULL; + } + + if (fut->fut_state == STATE_CANCELLED) { + PyErr_SetString(asyncio_CancelledError, ""); + return NULL; + } + + if (fut->fut_state != STATE_FINISHED) { + PyErr_SetString(asyncio_InvalidStateError, "Result is not ready."); + return NULL; + } + + if (fut->fut_exception != NULL) { + fut->fut_log_tb = 0; + Py_INCREF(fut->fut_exception); + return fut->fut_exception; + } + + Py_RETURN_NONE; +} + +PyDoc_STRVAR(pydoc_set_result, + "Mark the future done and set its result.\n" + "\n" + "If the future is already done when this method is called, raises\n" + "InvalidStateError." +); + +static PyObject * +FutureObj_set_result(FutureObj *fut, PyObject *res) +{ + if (_FuturesMod_EnsureState()) { + return NULL; + } + + if (fut->fut_state != STATE_PENDING) { + PyErr_SetString(asyncio_InvalidStateError, "invalid state"); + return NULL; + } + + Py_INCREF(res); + fut->fut_result = res; + fut->fut_state = STATE_FINISHED; + + if (_schedule_callbacks(fut) == -1) { + return NULL; + } + Py_RETURN_NONE; +} + +PyDoc_STRVAR(pydoc_set_exception, + "Mark the future done and set an exception.\n" + "\n" + "If the future is already done when this method is called, raises\n" + "InvalidStateError." +); + +static PyObject * +FutureObj_set_exception(FutureObj *fut, PyObject *exc) +{ + PyObject *exc_val = NULL; + + if (_FuturesMod_EnsureState()) { + return NULL; + } + + if (fut->fut_state != STATE_PENDING) { + PyErr_SetString(asyncio_InvalidStateError, "invalid state"); + return NULL; + } + + if (PyExceptionClass_Check(exc)) { + exc_val = PyObject_CallObject(exc, NULL); + if (exc_val == NULL) { + return NULL; + } + } + else { + exc_val = exc; + Py_INCREF(exc_val); + } + if (!PyExceptionInstance_Check(exc_val)) { + Py_DECREF(exc_val); + PyErr_SetString(PyExc_TypeError, "invalid exception object"); + return NULL; + } + if ((PyObject*)Py_TYPE(exc_val) == PyExc_StopIteration) { + Py_DECREF(exc_val); + PyErr_SetString(PyExc_TypeError, + "StopIteration interacts badly with generators " + "and cannot be raised into a Future"); + return NULL; + } + + fut->fut_exception = exc_val; + fut->fut_state = STATE_FINISHED; + + if (_schedule_callbacks(fut) == -1) { + return NULL; + } + + fut->fut_log_tb = 1; + Py_RETURN_NONE; +} + +PyDoc_STRVAR(pydoc_add_done_callback, + "Add a callback to be run when the future becomes done.\n" + "\n" + "The callback is called with a single argument - the future object. If\n" + "the future is already done when this is called, the callback is\n" + "scheduled with call_soon."; +); + +static PyObject * +FutureObj_add_done_callback(FutureObj *fut, PyObject *arg) +{ + if (fut->fut_state != STATE_PENDING) { + PyObject *handle = _PyObject_CallMethodId( + fut->fut_loop, &PyId_call_soon, "OO", arg, fut, NULL); + + if (handle == NULL) { + return NULL; + } + else { + Py_DECREF(handle); + } + } + else { + int err = PyList_Append(fut->fut_callbacks, arg); + if (err != 0) { + return NULL; + } + } + Py_RETURN_NONE; +} + +PyDoc_STRVAR(pydoc_remove_done_callback, + "Remove all instances of a callback from the \"call when done\" list.\n" + "\n" + "Returns the number of callbacks removed." +); + +static PyObject * +FutureObj_remove_done_callback(FutureObj *fut, PyObject *arg) +{ + PyObject *newlist; + Py_ssize_t len, i, j=0; + + len = PyList_GET_SIZE(fut->fut_callbacks); + if (len == 0) { + return PyLong_FromSsize_t(0); + } + + newlist = PyList_New(len); + if (newlist == NULL) { + return NULL; + } + + for (i = 0; i < len; i++) { + int ret; + PyObject *item = PyList_GET_ITEM(fut->fut_callbacks, i); + + if ((ret = PyObject_RichCompareBool(arg, item, Py_EQ)) < 0) { + goto fail; + } + if (ret == 0) { + Py_INCREF(item); + PyList_SET_ITEM(newlist, j, item); + j++; + } + } + + if (PyList_SetSlice(newlist, j, len, NULL) < 0) { + goto fail; + } + if (PyList_SetSlice(fut->fut_callbacks, 0, len, newlist) < 0) { + goto fail; + } + Py_DECREF(newlist); + return PyLong_FromSsize_t(len - j); + +fail: + Py_DECREF(newlist); + return NULL; +} + +PyDoc_STRVAR(pydoc_cancel, + "Cancel the future and schedule callbacks.\n" + "\n" + "If the future is already done or cancelled, return False. Otherwise,\n" + "change the future's state to cancelled, schedule the callbacks and\n" + "return True." +); + +static PyObject * +FutureObj_cancel(FutureObj *fut, PyObject *arg) +{ + if (fut->fut_state != STATE_PENDING) { + Py_RETURN_FALSE; + } + fut->fut_state = STATE_CANCELLED; + + if (_schedule_callbacks(fut) == -1) { + return NULL; + } + + Py_RETURN_TRUE; +} + +PyDoc_STRVAR(pydoc_cancelled, "Return True if the future was cancelled."); + +static PyObject * +FutureObj_cancelled(FutureObj *fut, PyObject *arg) +{ + if (fut->fut_state == STATE_CANCELLED) { + Py_RETURN_TRUE; + } + else { + Py_RETURN_FALSE; + } +} + +PyDoc_STRVAR(pydoc_done, + "Return True if the future is done.\n" + "\n" + "Done means either that a result / exception are available, or that the\n" + "future was cancelled." +); + +static PyObject * +FutureObj_done(FutureObj *fut, PyObject *arg) +{ + if (fut->fut_state == STATE_PENDING) { + Py_RETURN_FALSE; + } + else { + Py_RETURN_TRUE; + } +} + +static PyObject * +FutureObj_get_blocking(FutureObj *fut) +{ + if (fut->fut_blocking) { + Py_RETURN_TRUE; + } + else { + Py_RETURN_FALSE; + } +} + +static int +FutureObj_set_blocking(FutureObj *fut, PyObject *val) +{ + int is_true = PyObject_IsTrue(val); + if (is_true < 0) { + return -1; + } + fut->fut_blocking = is_true; + return 0; +} + +static PyObject * +FutureObj_get_log_traceback(FutureObj *fut) +{ + if (fut->fut_log_tb) { + Py_RETURN_TRUE; + } + else { + Py_RETURN_FALSE; + } +} + +static PyObject * +FutureObj_get_loop(FutureObj *fut) +{ + if (fut->fut_loop == NULL) { + Py_RETURN_NONE; + } + Py_INCREF(fut->fut_loop); + return fut->fut_loop; +} + +static PyObject * +FutureObj_get_callbacks(FutureObj *fut) +{ + if (fut->fut_callbacks == NULL) { + Py_RETURN_NONE; + } + Py_INCREF(fut->fut_callbacks); + return fut->fut_callbacks; +} + +static PyObject * +FutureObj_get_result(FutureObj *fut) +{ + if (fut->fut_result == NULL) { + Py_RETURN_NONE; + } + Py_INCREF(fut->fut_result); + return fut->fut_result; +} + +static PyObject * +FutureObj_get_exception(FutureObj *fut) +{ + if (fut->fut_exception == NULL) { + Py_RETURN_NONE; + } + Py_INCREF(fut->fut_exception); + return fut->fut_exception; +} + +static PyObject * +FutureObj_get_source_traceback(FutureObj *fut) +{ + if (fut->fut_source_tb == NULL) { + Py_RETURN_NONE; + } + Py_INCREF(fut->fut_source_tb); + return fut->fut_source_tb; +} + +static PyObject * +FutureObj_get_state(FutureObj *fut) +{ + _Py_IDENTIFIER(PENDING); + _Py_IDENTIFIER(CANCELLED); + _Py_IDENTIFIER(FINISHED); + PyObject *ret = NULL; + + switch (fut->fut_state) { + case STATE_PENDING: + ret = _PyUnicode_FromId(&PyId_PENDING); + break; + case STATE_CANCELLED: + ret = _PyUnicode_FromId(&PyId_CANCELLED); + break; + case STATE_FINISHED: + ret = _PyUnicode_FromId(&PyId_FINISHED); + break; + default: + assert (0); + } + Py_INCREF(ret); + return ret; +} + +static PyObject* +FutureObj__repr_info(FutureObj *fut) +{ + if (asyncio_repr_info_func == NULL) { + return PyList_New(0); + } + return PyObject_CallFunctionObjArgs(asyncio_repr_info_func, fut, NULL); +} + +static PyObject * +FutureObj_repr(FutureObj *fut) +{ + _Py_IDENTIFIER(_repr_info); + + PyObject *_repr_info = _PyUnicode_FromId(&PyId__repr_info); // borrowed + if (_repr_info == NULL) { + return NULL; + } + + PyObject *rinfo = PyObject_CallMethodObjArgs((PyObject*)fut, _repr_info, + NULL); + if (rinfo == NULL) { + return NULL; + } + + PyObject *sp = PyUnicode_FromString(" "); + if (sp == NULL) { + Py_DECREF(rinfo); + return NULL; + } + + PyObject *rinfo_s = PyUnicode_Join(sp, rinfo); + Py_DECREF(sp); + Py_DECREF(rinfo); + if (rinfo_s == NULL) { + return NULL; + } + + PyObject *rstr = NULL; + PyObject *type_name = PyObject_GetAttrString((PyObject*)Py_TYPE(fut), + "__name__"); + if (type_name != NULL) { + rstr = PyUnicode_FromFormat("<%S %S>", type_name, rinfo_s); + Py_DECREF(type_name); + } + Py_DECREF(rinfo_s); + return rstr; +} + +static void +FutureObj_finalize(FutureObj *fut) +{ + _Py_IDENTIFIER(call_exception_handler); + _Py_IDENTIFIER(message); + _Py_IDENTIFIER(exception); + _Py_IDENTIFIER(future); + _Py_IDENTIFIER(source_traceback); + + if (!fut->fut_log_tb) { + return; + } + assert(fut->fut_exception != NULL); + fut->fut_log_tb = 0;; + + PyObject *error_type, *error_value, *error_traceback; + /* Save the current exception, if any. */ + PyErr_Fetch(&error_type, &error_value, &error_traceback); + + PyObject *context = NULL; + PyObject *type_name = NULL; + PyObject *message = NULL; + PyObject *func = NULL; + PyObject *res = NULL; + + context = PyDict_New(); + if (context == NULL) { + goto finally; + } + + type_name = PyObject_GetAttrString((PyObject*)Py_TYPE(fut), "__name__"); + if (type_name == NULL) { + goto finally; + } + + message = PyUnicode_FromFormat( + "%S exception was never retrieved", type_name); + if (message == NULL) { + goto finally; + } + + if (_PyDict_SetItemId(context, &PyId_message, message) < 0 || + _PyDict_SetItemId(context, &PyId_exception, fut->fut_exception) < 0 || + _PyDict_SetItemId(context, &PyId_future, (PyObject*)fut) < 0) { + goto finally; + } + if (fut->fut_source_tb != NULL) { + if (_PyDict_SetItemId(context, &PyId_source_traceback, + fut->fut_source_tb) < 0) { + goto finally; + } + } + + func = _PyObject_GetAttrId(fut->fut_loop, &PyId_call_exception_handler); + if (func != NULL) { + res = _PyObject_CallArg1(func, context); + if (res == NULL) { + PyErr_WriteUnraisable(func); + } + } + +finally: + Py_CLEAR(context); + Py_CLEAR(type_name); + Py_CLEAR(message); + Py_CLEAR(func); + Py_CLEAR(res); + + /* Restore the saved exception. */ + PyErr_Restore(error_type, error_value, error_traceback); +} + + +static PyAsyncMethods FutureType_as_async = { + (unaryfunc)new_future_iter, /* am_await */ + 0, /* am_aiter */ + 0 /* am_anext */ +}; + +static PyMethodDef FutureType_methods[] = { + {"_repr_info", (PyCFunction)FutureObj__repr_info, METH_NOARGS, NULL}, + {"add_done_callback", + (PyCFunction)FutureObj_add_done_callback, + METH_O, pydoc_add_done_callback}, + {"remove_done_callback", + (PyCFunction)FutureObj_remove_done_callback, + METH_O, pydoc_remove_done_callback}, + {"set_result", + (PyCFunction)FutureObj_set_result, METH_O, pydoc_set_result}, + {"set_exception", + (PyCFunction)FutureObj_set_exception, METH_O, pydoc_set_exception}, + {"cancel", (PyCFunction)FutureObj_cancel, METH_NOARGS, pydoc_cancel}, + {"cancelled", + (PyCFunction)FutureObj_cancelled, METH_NOARGS, pydoc_cancelled}, + {"done", (PyCFunction)FutureObj_done, METH_NOARGS, pydoc_done}, + {"result", (PyCFunction)FutureObj_result, METH_NOARGS, pydoc_result}, + {"exception", + (PyCFunction)FutureObj_exception, METH_NOARGS, pydoc_exception}, + {NULL, NULL} /* Sentinel */ +}; + +static PyGetSetDef FutureType_getsetlist[] = { + {"_state", (getter)FutureObj_get_state, NULL, NULL}, + {"_asyncio_future_blocking", (getter)FutureObj_get_blocking, + (setter)FutureObj_set_blocking, NULL}, + {"_loop", (getter)FutureObj_get_loop, NULL, NULL}, + {"_callbacks", (getter)FutureObj_get_callbacks, NULL, NULL}, + {"_result", (getter)FutureObj_get_result, NULL, NULL}, + {"_exception", (getter)FutureObj_get_exception, NULL, NULL}, + {"_log_traceback", (getter)FutureObj_get_log_traceback, NULL, NULL}, + {"_source_traceback", (getter)FutureObj_get_source_traceback, NULL, NULL}, + {NULL} /* Sentinel */ +}; + +static void FutureObj_dealloc(PyObject *self); + +static PyTypeObject FutureType = { + PyVarObject_HEAD_INIT(0, 0) + "_futures.Future", + sizeof(FutureObj), /* tp_basicsize */ + .tp_dealloc = FutureObj_dealloc, + .tp_as_async = &FutureType_as_async, + .tp_repr = (reprfunc)FutureObj_repr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE + | Py_TPFLAGS_HAVE_FINALIZE, + .tp_doc = "Fast asyncio.Future implementation.", + .tp_traverse = (traverseproc)FutureObj_traverse, + .tp_clear = (inquiry)FutureObj_clear, + .tp_weaklistoffset = offsetof(FutureObj, fut_weakreflist), + .tp_iter = (getiterfunc)new_future_iter, + .tp_methods = FutureType_methods, + .tp_getset = FutureType_getsetlist, + .tp_dictoffset = offsetof(FutureObj, dict), + .tp_init = (initproc)FutureObj_init, + .tp_new = PyType_GenericNew, + .tp_finalize = (destructor)FutureObj_finalize, +}; + +static void +FutureObj_dealloc(PyObject *self) +{ + FutureObj *fut = (FutureObj *)self; + + if (Py_TYPE(fut) == &FutureType) { + /* When fut is subclass of Future, finalizer is called from + * subtype_dealloc. + */ + if (PyObject_CallFinalizerFromDealloc(self) < 0) { + // resurrected. + return; + } + } + + if (fut->fut_weakreflist != NULL) { + PyObject_ClearWeakRefs(self); + } + + FutureObj_clear(fut); + Py_TYPE(fut)->tp_free(fut); +} + + +/*********************** Future Iterator **************************/ + +typedef struct { + PyObject_HEAD + FutureObj *future; +} futureiterobject; + +static void +FutureIter_dealloc(futureiterobject *it) +{ + _PyObject_GC_UNTRACK(it); + Py_XDECREF(it->future); + PyObject_GC_Del(it); +} + +static PyObject * +FutureIter_iternext(futureiterobject *it) +{ + PyObject *res; + FutureObj *fut = it->future; + + if (fut == NULL) { + return NULL; + } + + if (fut->fut_state == STATE_PENDING) { + if (!fut->fut_blocking) { + fut->fut_blocking = 1; + Py_INCREF(fut); + return (PyObject *)fut; + } + PyErr_Format(PyExc_AssertionError, + "yield from wasn't used with future"); + return NULL; + } + + res = FutureObj_result(fut, NULL); + if (res != NULL) { + // normal result + PyErr_SetObject(PyExc_StopIteration, res); + Py_DECREF(res); + } + + it->future = NULL; + Py_DECREF(fut); + return NULL; +} + +static PyObject * +FutureIter_send(futureiterobject *self, PyObject *arg) +{ + if (arg != Py_None) { + PyErr_Format(PyExc_TypeError, + "can't send non-None value to a FutureIter"); + return NULL; + } + return FutureIter_iternext(self); +} + +static PyObject * +FutureIter_throw(futureiterobject *self, PyObject *args) +{ + PyObject *type=NULL, *val=NULL, *tb=NULL; + if (!PyArg_ParseTuple(args, "O|OO", &type, &val, &tb)) + return NULL; + + if (val == Py_None) { + val = NULL; + } + if (tb == Py_None) { + tb = NULL; + } + + Py_CLEAR(self->future); + + if (tb != NULL) { + PyErr_Restore(type, val, tb); + } + else if (val != NULL) { + PyErr_SetObject(type, val); + } + else { + if (PyExceptionClass_Check(type)) { + val = PyObject_CallObject(type, NULL); + } + else { + val = type; + assert (PyExceptionInstance_Check(val)); + type = (PyObject*)Py_TYPE(val); + assert (PyExceptionClass_Check(type)); + } + PyErr_SetObject(type, val); + } + return FutureIter_iternext(self); +} + +static PyObject * +FutureIter_close(futureiterobject *self, PyObject *arg) +{ + Py_CLEAR(self->future); + Py_RETURN_NONE; +} + +static int +FutureIter_traverse(futureiterobject *it, visitproc visit, void *arg) +{ + Py_VISIT(it->future); + return 0; +} + +static PyMethodDef FutureIter_methods[] = { + {"send", (PyCFunction)FutureIter_send, METH_O, NULL}, + {"throw", (PyCFunction)FutureIter_throw, METH_VARARGS, NULL}, + {"close", (PyCFunction)FutureIter_close, METH_NOARGS, NULL}, + {NULL, NULL} /* Sentinel */ +}; + +static PyTypeObject FutureIterType = { + PyVarObject_HEAD_INIT(0, 0) + "_futures.FutureIter", + sizeof(futureiterobject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)FutureIter_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_as_async */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ + 0, /* tp_doc */ + (traverseproc)FutureIter_traverse, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc)FutureIter_iternext, /* tp_iternext */ + FutureIter_methods, /* tp_methods */ + 0, /* tp_members */ +}; + +static PyObject * +new_future_iter(PyObject *fut) +{ + futureiterobject *it; + + if (!PyObject_TypeCheck(fut, &FutureType)) { + PyErr_BadInternalCall(); + return NULL; + } + it = PyObject_GC_New(futureiterobject, &FutureIterType); + if (it == NULL) { + return NULL; + } + Py_INCREF(fut); + it->future = (FutureObj*)fut; + _PyObject_GC_TRACK(it); + return (PyObject*)it; +} + +/*********************** Module **************************/ + +PyDoc_STRVAR(module_doc, "Fast asyncio.Future implementation.\n"); + +PyObject * +_init_module(PyObject *self, PyObject *args) +{ + PyObject *extract_stack; + PyObject *get_event_loop; + PyObject *repr_info_func; + PyObject *invalidStateError; + PyObject *cancelledError; + + if (!PyArg_UnpackTuple(args, "_init_module", 5, 5, + &extract_stack, + &get_event_loop, + &repr_info_func, + &invalidStateError, + &cancelledError)) { + return NULL; + } + + Py_INCREF(extract_stack); + Py_XSETREF(traceback_extract_stack, extract_stack); + + Py_INCREF(get_event_loop); + Py_XSETREF(asyncio_get_event_loop, get_event_loop); + + Py_INCREF(repr_info_func); + Py_XSETREF(asyncio_repr_info_func, repr_info_func); + + Py_INCREF(invalidStateError); + Py_XSETREF(asyncio_InvalidStateError, invalidStateError); + + Py_INCREF(cancelledError); + Py_XSETREF(asyncio_CancelledError, cancelledError); + + _futuremod_ready = 1; + + Py_RETURN_NONE; +} + + +static struct PyMethodDef futuresmod_methods[] = { + {"_init_module", _init_module, METH_VARARGS, NULL}, + {NULL, NULL} +}; + + +static struct PyModuleDef _futuresmodule = { + PyModuleDef_HEAD_INIT, /* m_base */ + "_futures", /* m_name */ + module_doc, /* m_doc */ + -1, /* m_size */ + futuresmod_methods, /* m_methods */ + NULL, /* m_slots */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; + + +PyMODINIT_FUNC +PyInit__futures(void) +{ + if (PyType_Ready(&FutureType) < 0) { + return NULL; + } + if (PyType_Ready(&FutureIterType) < 0) { + return NULL; + } + + PyObject *m = PyModule_Create(&_futuresmodule); + if (m == NULL) { + return NULL; + } + + Py_INCREF(&FutureType); + if (PyModule_AddObject(m, "Future", (PyObject *)&FutureType) < 0) { + Py_DECREF(&FutureType); + return NULL; + } + + return m; +} -- cgit v1.2.1 From 01c29c2b0cbe7645628250701cdda38f6d751d66 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Mon, 10 Oct 2016 00:38:21 +0000 Subject: Issue #28394: More typo fixes for 3.6+ --- Modules/posixmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index ef17981ff7..7aae5c7d81 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -770,7 +770,7 @@ dir_fd_converter(PyObject *o, void *p) * path.narrow * Points to the path if it was expressed as bytes, * or it was Unicode and was encoded to bytes. (On Windows, - * is an non-zero integer if the path was expressed as bytes. + * is a non-zero integer if the path was expressed as bytes. * The type is deliberately incompatible to prevent misuse.) * path.fd * Contains a file descriptor if path.accept_fd was true -- cgit v1.2.1 From f1b533a440479cefb5ab6e844305034b0583103e Mon Sep 17 00:00:00 2001 From: INADA Naoki Date: Tue, 11 Oct 2016 02:12:34 +0900 Subject: Issue #28405: Fix compile error for _futuresmodule.c on Cygwin. Patch by Masayuki Yamamoto. --- Modules/_futuresmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_futuresmodule.c b/Modules/_futuresmodule.c index 88953ff8c6..3e91a3c8b8 100644 --- a/Modules/_futuresmodule.c +++ b/Modules/_futuresmodule.c @@ -943,7 +943,7 @@ new_future_iter(PyObject *fut) } Py_INCREF(fut); it->future = (FutureObj*)fut; - _PyObject_GC_TRACK(it); + PyObject_GC_Track(it); return (PyObject*)it; } -- cgit v1.2.1 From 0075ecd72c7ec5b985727cb66c13c300c0632a01 Mon Sep 17 00:00:00 2001 From: doko Date: Tue, 11 Oct 2016 08:06:26 +0200 Subject: - Modules/Setup.dist: Add the _blake2 module --- Modules/Setup.dist | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Modules') diff --git a/Modules/Setup.dist b/Modules/Setup.dist index 518af74b2a..3211bef762 100644 --- a/Modules/Setup.dist +++ b/Modules/Setup.dist @@ -251,6 +251,8 @@ _symtable symtablemodule.c #_sha256 sha256module.c #_sha512 sha512module.c +# _blake module +#_blake2 _blake2/blake2module.c _blake2/blake2b_impl.c _blake2/blake2s_impl.c # The _tkinter module. # -- cgit v1.2.1 From a691252a91c4f93fd5bb5f7149f3ae15ec8734cf Mon Sep 17 00:00:00 2001 From: INADA Naoki Date: Sat, 15 Oct 2016 15:39:19 +0900 Subject: Issue #28428: Rename _futures module to _asyncio. It will have more speedup functions or classes other than asyncio.Future. --- Modules/Setup.dist | 2 +- Modules/_asynciomodule.c | 1034 ++++++++++++++++++++++++++++++++++++++++++++++ Modules/_futuresmodule.c | 1034 ---------------------------------------------- 3 files changed, 1035 insertions(+), 1035 deletions(-) create mode 100644 Modules/_asynciomodule.c delete mode 100644 Modules/_futuresmodule.c (limited to 'Modules') diff --git a/Modules/Setup.dist b/Modules/Setup.dist index 3211bef762..8b87fc8143 100644 --- a/Modules/Setup.dist +++ b/Modules/Setup.dist @@ -181,7 +181,7 @@ _symtable symtablemodule.c #_datetime _datetimemodule.c # datetime accelerator #_bisect _bisectmodule.c # Bisection algorithms #_heapq _heapqmodule.c # Heap queue algorithm -#_futures _futuresmodule.c # Fast asyncio Future +#_asyncio _asynciomodule.c # Fast asyncio Future #unicodedata unicodedata.c # static Unicode character database diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c new file mode 100644 index 0000000000..ce576e5799 --- /dev/null +++ b/Modules/_asynciomodule.c @@ -0,0 +1,1034 @@ +#include "Python.h" +#include "structmember.h" + + +/* identifiers used from some functions */ +_Py_IDENTIFIER(call_soon); + + +/* State of the _asyncio module */ +static int _asynciomod_ready; +static PyObject *traceback_extract_stack; +static PyObject *asyncio_get_event_loop; +static PyObject *asyncio_repr_info_func; +static PyObject *asyncio_InvalidStateError; +static PyObject *asyncio_CancelledError; + + +/* Get FutureIter from Future */ +static PyObject* new_future_iter(PyObject *fut); + + +/* make sure module state is initialized and ready to be used. */ +static int +_AsyncioMod_EnsureState(void) +{ + if (!_asynciomod_ready) { + PyErr_SetString(PyExc_RuntimeError, + "_asyncio module wasn't properly initialized"); + return -1; + } + return 0; +} + + +typedef enum { + STATE_PENDING, + STATE_CANCELLED, + STATE_FINISHED +} fut_state; + + +typedef struct { + PyObject_HEAD + PyObject *fut_loop; + PyObject *fut_callbacks; + PyObject *fut_exception; + PyObject *fut_result; + PyObject *fut_source_tb; + fut_state fut_state; + int fut_log_tb; + int fut_blocking; + PyObject *dict; + PyObject *fut_weakreflist; +} FutureObj; + + +static int +_schedule_callbacks(FutureObj *fut) +{ + Py_ssize_t len; + PyObject* iters; + int i; + + if (fut->fut_callbacks == NULL) { + PyErr_SetString(PyExc_RuntimeError, "NULL callbacks"); + return -1; + } + + len = PyList_GET_SIZE(fut->fut_callbacks); + if (len == 0) { + return 0; + } + + iters = PyList_GetSlice(fut->fut_callbacks, 0, len); + if (iters == NULL) { + return -1; + } + if (PyList_SetSlice(fut->fut_callbacks, 0, len, NULL) < 0) { + Py_DECREF(iters); + return -1; + } + + for (i = 0; i < len; i++) { + PyObject *handle = NULL; + PyObject *cb = PyList_GET_ITEM(iters, i); + + handle = _PyObject_CallMethodId( + fut->fut_loop, &PyId_call_soon, "OO", cb, fut, NULL); + + if (handle == NULL) { + Py_DECREF(iters); + return -1; + } + else { + Py_DECREF(handle); + } + } + + Py_DECREF(iters); + return 0; +} + +static int +FutureObj_init(FutureObj *fut, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"loop", NULL}; + PyObject *loop = NULL; + PyObject *res = NULL; + _Py_IDENTIFIER(get_debug); + + if (_AsyncioMod_EnsureState()) { + return -1; + } + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|$O", kwlist, &loop)) { + return -1; + } + if (loop == NULL || loop == Py_None) { + loop = PyObject_CallObject(asyncio_get_event_loop, NULL); + if (loop == NULL) { + return -1; + } + } + else { + Py_INCREF(loop); + } + Py_CLEAR(fut->fut_loop); + fut->fut_loop = loop; + + res = _PyObject_CallMethodId(fut->fut_loop, &PyId_get_debug, "()", NULL); + if (res == NULL) { + return -1; + } + if (PyObject_IsTrue(res)) { + Py_CLEAR(res); + fut->fut_source_tb = PyObject_CallObject(traceback_extract_stack, NULL); + if (fut->fut_source_tb == NULL) { + return -1; + } + } + else { + Py_CLEAR(res); + } + + fut->fut_callbacks = PyList_New(0); + if (fut->fut_callbacks == NULL) { + return -1; + } + return 0; +} + +static int +FutureObj_clear(FutureObj *fut) +{ + Py_CLEAR(fut->fut_loop); + Py_CLEAR(fut->fut_callbacks); + Py_CLEAR(fut->fut_result); + Py_CLEAR(fut->fut_exception); + Py_CLEAR(fut->fut_source_tb); + Py_CLEAR(fut->dict); + return 0; +} + +static int +FutureObj_traverse(FutureObj *fut, visitproc visit, void *arg) +{ + Py_VISIT(fut->fut_loop); + Py_VISIT(fut->fut_callbacks); + Py_VISIT(fut->fut_result); + Py_VISIT(fut->fut_exception); + Py_VISIT(fut->fut_source_tb); + Py_VISIT(fut->dict); + return 0; +} + +PyDoc_STRVAR(pydoc_result, + "Return the result this future represents.\n" + "\n" + "If the future has been cancelled, raises CancelledError. If the\n" + "future's result isn't yet available, raises InvalidStateError. If\n" + "the future is done and has an exception set, this exception is raised." +); + +static PyObject * +FutureObj_result(FutureObj *fut, PyObject *arg) +{ + if (fut->fut_state == STATE_CANCELLED) { + PyErr_SetString(asyncio_CancelledError, ""); + return NULL; + } + + if (fut->fut_state != STATE_FINISHED) { + PyErr_SetString(asyncio_InvalidStateError, "Result is not ready."); + return NULL; + } + + fut->fut_log_tb = 0; + if (fut->fut_exception != NULL) { + PyObject *type = NULL; + type = PyExceptionInstance_Class(fut->fut_exception); + PyErr_SetObject(type, fut->fut_exception); + return NULL; + } + + Py_INCREF(fut->fut_result); + return fut->fut_result; +} + +PyDoc_STRVAR(pydoc_exception, + "Return the exception that was set on this future.\n" + "\n" + "The exception (or None if no exception was set) is returned only if\n" + "the future is done. If the future has been cancelled, raises\n" + "CancelledError. If the future isn't done yet, raises\n" + "InvalidStateError." +); + +static PyObject * +FutureObj_exception(FutureObj *fut, PyObject *arg) +{ + if (_AsyncioMod_EnsureState()) { + return NULL; + } + + if (fut->fut_state == STATE_CANCELLED) { + PyErr_SetString(asyncio_CancelledError, ""); + return NULL; + } + + if (fut->fut_state != STATE_FINISHED) { + PyErr_SetString(asyncio_InvalidStateError, "Result is not ready."); + return NULL; + } + + if (fut->fut_exception != NULL) { + fut->fut_log_tb = 0; + Py_INCREF(fut->fut_exception); + return fut->fut_exception; + } + + Py_RETURN_NONE; +} + +PyDoc_STRVAR(pydoc_set_result, + "Mark the future done and set its result.\n" + "\n" + "If the future is already done when this method is called, raises\n" + "InvalidStateError." +); + +static PyObject * +FutureObj_set_result(FutureObj *fut, PyObject *res) +{ + if (_AsyncioMod_EnsureState()) { + return NULL; + } + + if (fut->fut_state != STATE_PENDING) { + PyErr_SetString(asyncio_InvalidStateError, "invalid state"); + return NULL; + } + + Py_INCREF(res); + fut->fut_result = res; + fut->fut_state = STATE_FINISHED; + + if (_schedule_callbacks(fut) == -1) { + return NULL; + } + Py_RETURN_NONE; +} + +PyDoc_STRVAR(pydoc_set_exception, + "Mark the future done and set an exception.\n" + "\n" + "If the future is already done when this method is called, raises\n" + "InvalidStateError." +); + +static PyObject * +FutureObj_set_exception(FutureObj *fut, PyObject *exc) +{ + PyObject *exc_val = NULL; + + if (_AsyncioMod_EnsureState()) { + return NULL; + } + + if (fut->fut_state != STATE_PENDING) { + PyErr_SetString(asyncio_InvalidStateError, "invalid state"); + return NULL; + } + + if (PyExceptionClass_Check(exc)) { + exc_val = PyObject_CallObject(exc, NULL); + if (exc_val == NULL) { + return NULL; + } + } + else { + exc_val = exc; + Py_INCREF(exc_val); + } + if (!PyExceptionInstance_Check(exc_val)) { + Py_DECREF(exc_val); + PyErr_SetString(PyExc_TypeError, "invalid exception object"); + return NULL; + } + if ((PyObject*)Py_TYPE(exc_val) == PyExc_StopIteration) { + Py_DECREF(exc_val); + PyErr_SetString(PyExc_TypeError, + "StopIteration interacts badly with generators " + "and cannot be raised into a Future"); + return NULL; + } + + fut->fut_exception = exc_val; + fut->fut_state = STATE_FINISHED; + + if (_schedule_callbacks(fut) == -1) { + return NULL; + } + + fut->fut_log_tb = 1; + Py_RETURN_NONE; +} + +PyDoc_STRVAR(pydoc_add_done_callback, + "Add a callback to be run when the future becomes done.\n" + "\n" + "The callback is called with a single argument - the future object. If\n" + "the future is already done when this is called, the callback is\n" + "scheduled with call_soon."; +); + +static PyObject * +FutureObj_add_done_callback(FutureObj *fut, PyObject *arg) +{ + if (fut->fut_state != STATE_PENDING) { + PyObject *handle = _PyObject_CallMethodId( + fut->fut_loop, &PyId_call_soon, "OO", arg, fut, NULL); + + if (handle == NULL) { + return NULL; + } + else { + Py_DECREF(handle); + } + } + else { + int err = PyList_Append(fut->fut_callbacks, arg); + if (err != 0) { + return NULL; + } + } + Py_RETURN_NONE; +} + +PyDoc_STRVAR(pydoc_remove_done_callback, + "Remove all instances of a callback from the \"call when done\" list.\n" + "\n" + "Returns the number of callbacks removed." +); + +static PyObject * +FutureObj_remove_done_callback(FutureObj *fut, PyObject *arg) +{ + PyObject *newlist; + Py_ssize_t len, i, j=0; + + len = PyList_GET_SIZE(fut->fut_callbacks); + if (len == 0) { + return PyLong_FromSsize_t(0); + } + + newlist = PyList_New(len); + if (newlist == NULL) { + return NULL; + } + + for (i = 0; i < len; i++) { + int ret; + PyObject *item = PyList_GET_ITEM(fut->fut_callbacks, i); + + if ((ret = PyObject_RichCompareBool(arg, item, Py_EQ)) < 0) { + goto fail; + } + if (ret == 0) { + Py_INCREF(item); + PyList_SET_ITEM(newlist, j, item); + j++; + } + } + + if (PyList_SetSlice(newlist, j, len, NULL) < 0) { + goto fail; + } + if (PyList_SetSlice(fut->fut_callbacks, 0, len, newlist) < 0) { + goto fail; + } + Py_DECREF(newlist); + return PyLong_FromSsize_t(len - j); + +fail: + Py_DECREF(newlist); + return NULL; +} + +PyDoc_STRVAR(pydoc_cancel, + "Cancel the future and schedule callbacks.\n" + "\n" + "If the future is already done or cancelled, return False. Otherwise,\n" + "change the future's state to cancelled, schedule the callbacks and\n" + "return True." +); + +static PyObject * +FutureObj_cancel(FutureObj *fut, PyObject *arg) +{ + if (fut->fut_state != STATE_PENDING) { + Py_RETURN_FALSE; + } + fut->fut_state = STATE_CANCELLED; + + if (_schedule_callbacks(fut) == -1) { + return NULL; + } + + Py_RETURN_TRUE; +} + +PyDoc_STRVAR(pydoc_cancelled, "Return True if the future was cancelled."); + +static PyObject * +FutureObj_cancelled(FutureObj *fut, PyObject *arg) +{ + if (fut->fut_state == STATE_CANCELLED) { + Py_RETURN_TRUE; + } + else { + Py_RETURN_FALSE; + } +} + +PyDoc_STRVAR(pydoc_done, + "Return True if the future is done.\n" + "\n" + "Done means either that a result / exception are available, or that the\n" + "future was cancelled." +); + +static PyObject * +FutureObj_done(FutureObj *fut, PyObject *arg) +{ + if (fut->fut_state == STATE_PENDING) { + Py_RETURN_FALSE; + } + else { + Py_RETURN_TRUE; + } +} + +static PyObject * +FutureObj_get_blocking(FutureObj *fut) +{ + if (fut->fut_blocking) { + Py_RETURN_TRUE; + } + else { + Py_RETURN_FALSE; + } +} + +static int +FutureObj_set_blocking(FutureObj *fut, PyObject *val) +{ + int is_true = PyObject_IsTrue(val); + if (is_true < 0) { + return -1; + } + fut->fut_blocking = is_true; + return 0; +} + +static PyObject * +FutureObj_get_log_traceback(FutureObj *fut) +{ + if (fut->fut_log_tb) { + Py_RETURN_TRUE; + } + else { + Py_RETURN_FALSE; + } +} + +static PyObject * +FutureObj_get_loop(FutureObj *fut) +{ + if (fut->fut_loop == NULL) { + Py_RETURN_NONE; + } + Py_INCREF(fut->fut_loop); + return fut->fut_loop; +} + +static PyObject * +FutureObj_get_callbacks(FutureObj *fut) +{ + if (fut->fut_callbacks == NULL) { + Py_RETURN_NONE; + } + Py_INCREF(fut->fut_callbacks); + return fut->fut_callbacks; +} + +static PyObject * +FutureObj_get_result(FutureObj *fut) +{ + if (fut->fut_result == NULL) { + Py_RETURN_NONE; + } + Py_INCREF(fut->fut_result); + return fut->fut_result; +} + +static PyObject * +FutureObj_get_exception(FutureObj *fut) +{ + if (fut->fut_exception == NULL) { + Py_RETURN_NONE; + } + Py_INCREF(fut->fut_exception); + return fut->fut_exception; +} + +static PyObject * +FutureObj_get_source_traceback(FutureObj *fut) +{ + if (fut->fut_source_tb == NULL) { + Py_RETURN_NONE; + } + Py_INCREF(fut->fut_source_tb); + return fut->fut_source_tb; +} + +static PyObject * +FutureObj_get_state(FutureObj *fut) +{ + _Py_IDENTIFIER(PENDING); + _Py_IDENTIFIER(CANCELLED); + _Py_IDENTIFIER(FINISHED); + PyObject *ret = NULL; + + switch (fut->fut_state) { + case STATE_PENDING: + ret = _PyUnicode_FromId(&PyId_PENDING); + break; + case STATE_CANCELLED: + ret = _PyUnicode_FromId(&PyId_CANCELLED); + break; + case STATE_FINISHED: + ret = _PyUnicode_FromId(&PyId_FINISHED); + break; + default: + assert (0); + } + Py_INCREF(ret); + return ret; +} + +static PyObject* +FutureObj__repr_info(FutureObj *fut) +{ + if (asyncio_repr_info_func == NULL) { + return PyList_New(0); + } + return PyObject_CallFunctionObjArgs(asyncio_repr_info_func, fut, NULL); +} + +static PyObject * +FutureObj_repr(FutureObj *fut) +{ + _Py_IDENTIFIER(_repr_info); + + PyObject *_repr_info = _PyUnicode_FromId(&PyId__repr_info); // borrowed + if (_repr_info == NULL) { + return NULL; + } + + PyObject *rinfo = PyObject_CallMethodObjArgs((PyObject*)fut, _repr_info, + NULL); + if (rinfo == NULL) { + return NULL; + } + + PyObject *sp = PyUnicode_FromString(" "); + if (sp == NULL) { + Py_DECREF(rinfo); + return NULL; + } + + PyObject *rinfo_s = PyUnicode_Join(sp, rinfo); + Py_DECREF(sp); + Py_DECREF(rinfo); + if (rinfo_s == NULL) { + return NULL; + } + + PyObject *rstr = NULL; + PyObject *type_name = PyObject_GetAttrString((PyObject*)Py_TYPE(fut), + "__name__"); + if (type_name != NULL) { + rstr = PyUnicode_FromFormat("<%S %S>", type_name, rinfo_s); + Py_DECREF(type_name); + } + Py_DECREF(rinfo_s); + return rstr; +} + +static void +FutureObj_finalize(FutureObj *fut) +{ + _Py_IDENTIFIER(call_exception_handler); + _Py_IDENTIFIER(message); + _Py_IDENTIFIER(exception); + _Py_IDENTIFIER(future); + _Py_IDENTIFIER(source_traceback); + + if (!fut->fut_log_tb) { + return; + } + assert(fut->fut_exception != NULL); + fut->fut_log_tb = 0;; + + PyObject *error_type, *error_value, *error_traceback; + /* Save the current exception, if any. */ + PyErr_Fetch(&error_type, &error_value, &error_traceback); + + PyObject *context = NULL; + PyObject *type_name = NULL; + PyObject *message = NULL; + PyObject *func = NULL; + PyObject *res = NULL; + + context = PyDict_New(); + if (context == NULL) { + goto finally; + } + + type_name = PyObject_GetAttrString((PyObject*)Py_TYPE(fut), "__name__"); + if (type_name == NULL) { + goto finally; + } + + message = PyUnicode_FromFormat( + "%S exception was never retrieved", type_name); + if (message == NULL) { + goto finally; + } + + if (_PyDict_SetItemId(context, &PyId_message, message) < 0 || + _PyDict_SetItemId(context, &PyId_exception, fut->fut_exception) < 0 || + _PyDict_SetItemId(context, &PyId_future, (PyObject*)fut) < 0) { + goto finally; + } + if (fut->fut_source_tb != NULL) { + if (_PyDict_SetItemId(context, &PyId_source_traceback, + fut->fut_source_tb) < 0) { + goto finally; + } + } + + func = _PyObject_GetAttrId(fut->fut_loop, &PyId_call_exception_handler); + if (func != NULL) { + res = _PyObject_CallArg1(func, context); + if (res == NULL) { + PyErr_WriteUnraisable(func); + } + } + +finally: + Py_CLEAR(context); + Py_CLEAR(type_name); + Py_CLEAR(message); + Py_CLEAR(func); + Py_CLEAR(res); + + /* Restore the saved exception. */ + PyErr_Restore(error_type, error_value, error_traceback); +} + + +static PyAsyncMethods FutureType_as_async = { + (unaryfunc)new_future_iter, /* am_await */ + 0, /* am_aiter */ + 0 /* am_anext */ +}; + +static PyMethodDef FutureType_methods[] = { + {"_repr_info", (PyCFunction)FutureObj__repr_info, METH_NOARGS, NULL}, + {"add_done_callback", + (PyCFunction)FutureObj_add_done_callback, + METH_O, pydoc_add_done_callback}, + {"remove_done_callback", + (PyCFunction)FutureObj_remove_done_callback, + METH_O, pydoc_remove_done_callback}, + {"set_result", + (PyCFunction)FutureObj_set_result, METH_O, pydoc_set_result}, + {"set_exception", + (PyCFunction)FutureObj_set_exception, METH_O, pydoc_set_exception}, + {"cancel", (PyCFunction)FutureObj_cancel, METH_NOARGS, pydoc_cancel}, + {"cancelled", + (PyCFunction)FutureObj_cancelled, METH_NOARGS, pydoc_cancelled}, + {"done", (PyCFunction)FutureObj_done, METH_NOARGS, pydoc_done}, + {"result", (PyCFunction)FutureObj_result, METH_NOARGS, pydoc_result}, + {"exception", + (PyCFunction)FutureObj_exception, METH_NOARGS, pydoc_exception}, + {NULL, NULL} /* Sentinel */ +}; + +static PyGetSetDef FutureType_getsetlist[] = { + {"_state", (getter)FutureObj_get_state, NULL, NULL}, + {"_asyncio_future_blocking", (getter)FutureObj_get_blocking, + (setter)FutureObj_set_blocking, NULL}, + {"_loop", (getter)FutureObj_get_loop, NULL, NULL}, + {"_callbacks", (getter)FutureObj_get_callbacks, NULL, NULL}, + {"_result", (getter)FutureObj_get_result, NULL, NULL}, + {"_exception", (getter)FutureObj_get_exception, NULL, NULL}, + {"_log_traceback", (getter)FutureObj_get_log_traceback, NULL, NULL}, + {"_source_traceback", (getter)FutureObj_get_source_traceback, NULL, NULL}, + {NULL} /* Sentinel */ +}; + +static void FutureObj_dealloc(PyObject *self); + +static PyTypeObject FutureType = { + PyVarObject_HEAD_INIT(0, 0) + "_asyncio.Future", + sizeof(FutureObj), /* tp_basicsize */ + .tp_dealloc = FutureObj_dealloc, + .tp_as_async = &FutureType_as_async, + .tp_repr = (reprfunc)FutureObj_repr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE + | Py_TPFLAGS_HAVE_FINALIZE, + .tp_doc = "Fast asyncio.Future implementation.", + .tp_traverse = (traverseproc)FutureObj_traverse, + .tp_clear = (inquiry)FutureObj_clear, + .tp_weaklistoffset = offsetof(FutureObj, fut_weakreflist), + .tp_iter = (getiterfunc)new_future_iter, + .tp_methods = FutureType_methods, + .tp_getset = FutureType_getsetlist, + .tp_dictoffset = offsetof(FutureObj, dict), + .tp_init = (initproc)FutureObj_init, + .tp_new = PyType_GenericNew, + .tp_finalize = (destructor)FutureObj_finalize, +}; + +static void +FutureObj_dealloc(PyObject *self) +{ + FutureObj *fut = (FutureObj *)self; + + if (Py_TYPE(fut) == &FutureType) { + /* When fut is subclass of Future, finalizer is called from + * subtype_dealloc. + */ + if (PyObject_CallFinalizerFromDealloc(self) < 0) { + // resurrected. + return; + } + } + + if (fut->fut_weakreflist != NULL) { + PyObject_ClearWeakRefs(self); + } + + FutureObj_clear(fut); + Py_TYPE(fut)->tp_free(fut); +} + + +/*********************** Future Iterator **************************/ + +typedef struct { + PyObject_HEAD + FutureObj *future; +} futureiterobject; + +static void +FutureIter_dealloc(futureiterobject *it) +{ + _PyObject_GC_UNTRACK(it); + Py_XDECREF(it->future); + PyObject_GC_Del(it); +} + +static PyObject * +FutureIter_iternext(futureiterobject *it) +{ + PyObject *res; + FutureObj *fut = it->future; + + if (fut == NULL) { + return NULL; + } + + if (fut->fut_state == STATE_PENDING) { + if (!fut->fut_blocking) { + fut->fut_blocking = 1; + Py_INCREF(fut); + return (PyObject *)fut; + } + PyErr_Format(PyExc_AssertionError, + "yield from wasn't used with future"); + return NULL; + } + + res = FutureObj_result(fut, NULL); + if (res != NULL) { + // normal result + PyErr_SetObject(PyExc_StopIteration, res); + Py_DECREF(res); + } + + it->future = NULL; + Py_DECREF(fut); + return NULL; +} + +static PyObject * +FutureIter_send(futureiterobject *self, PyObject *arg) +{ + if (arg != Py_None) { + PyErr_Format(PyExc_TypeError, + "can't send non-None value to a FutureIter"); + return NULL; + } + return FutureIter_iternext(self); +} + +static PyObject * +FutureIter_throw(futureiterobject *self, PyObject *args) +{ + PyObject *type=NULL, *val=NULL, *tb=NULL; + if (!PyArg_ParseTuple(args, "O|OO", &type, &val, &tb)) + return NULL; + + if (val == Py_None) { + val = NULL; + } + if (tb == Py_None) { + tb = NULL; + } + + Py_CLEAR(self->future); + + if (tb != NULL) { + PyErr_Restore(type, val, tb); + } + else if (val != NULL) { + PyErr_SetObject(type, val); + } + else { + if (PyExceptionClass_Check(type)) { + val = PyObject_CallObject(type, NULL); + } + else { + val = type; + assert (PyExceptionInstance_Check(val)); + type = (PyObject*)Py_TYPE(val); + assert (PyExceptionClass_Check(type)); + } + PyErr_SetObject(type, val); + } + return FutureIter_iternext(self); +} + +static PyObject * +FutureIter_close(futureiterobject *self, PyObject *arg) +{ + Py_CLEAR(self->future); + Py_RETURN_NONE; +} + +static int +FutureIter_traverse(futureiterobject *it, visitproc visit, void *arg) +{ + Py_VISIT(it->future); + return 0; +} + +static PyMethodDef FutureIter_methods[] = { + {"send", (PyCFunction)FutureIter_send, METH_O, NULL}, + {"throw", (PyCFunction)FutureIter_throw, METH_VARARGS, NULL}, + {"close", (PyCFunction)FutureIter_close, METH_NOARGS, NULL}, + {NULL, NULL} /* Sentinel */ +}; + +static PyTypeObject FutureIterType = { + PyVarObject_HEAD_INIT(0, 0) + "_asyncio.FutureIter", + sizeof(futureiterobject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)FutureIter_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_as_async */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ + 0, /* tp_doc */ + (traverseproc)FutureIter_traverse, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc)FutureIter_iternext, /* tp_iternext */ + FutureIter_methods, /* tp_methods */ + 0, /* tp_members */ +}; + +static PyObject * +new_future_iter(PyObject *fut) +{ + futureiterobject *it; + + if (!PyObject_TypeCheck(fut, &FutureType)) { + PyErr_BadInternalCall(); + return NULL; + } + it = PyObject_GC_New(futureiterobject, &FutureIterType); + if (it == NULL) { + return NULL; + } + Py_INCREF(fut); + it->future = (FutureObj*)fut; + PyObject_GC_Track(it); + return (PyObject*)it; +} + +/*********************** Module **************************/ + +PyDoc_STRVAR(module_doc, "asyncio speedups.\n"); + +PyObject * +_init_module(PyObject *self, PyObject *args) +{ + PyObject *extract_stack; + PyObject *get_event_loop; + PyObject *repr_info_func; + PyObject *invalidStateError; + PyObject *cancelledError; + + if (!PyArg_UnpackTuple(args, "_init_module", 5, 5, + &extract_stack, + &get_event_loop, + &repr_info_func, + &invalidStateError, + &cancelledError)) { + return NULL; + } + + Py_INCREF(extract_stack); + Py_XSETREF(traceback_extract_stack, extract_stack); + + Py_INCREF(get_event_loop); + Py_XSETREF(asyncio_get_event_loop, get_event_loop); + + Py_INCREF(repr_info_func); + Py_XSETREF(asyncio_repr_info_func, repr_info_func); + + Py_INCREF(invalidStateError); + Py_XSETREF(asyncio_InvalidStateError, invalidStateError); + + Py_INCREF(cancelledError); + Py_XSETREF(asyncio_CancelledError, cancelledError); + + _asynciomod_ready = 1; + + Py_RETURN_NONE; +} + + +static struct PyMethodDef asynciomod_methods[] = { + {"_init_module", _init_module, METH_VARARGS, NULL}, + {NULL, NULL} +}; + + +static struct PyModuleDef _asynciomodule = { + PyModuleDef_HEAD_INIT, /* m_base */ + "_asyncio", /* m_name */ + module_doc, /* m_doc */ + -1, /* m_size */ + asynciomod_methods, /* m_methods */ + NULL, /* m_slots */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; + + +PyMODINIT_FUNC +PyInit__asyncio(void) +{ + if (PyType_Ready(&FutureType) < 0) { + return NULL; + } + if (PyType_Ready(&FutureIterType) < 0) { + return NULL; + } + + PyObject *m = PyModule_Create(&_asynciomodule); + if (m == NULL) { + return NULL; + } + + Py_INCREF(&FutureType); + if (PyModule_AddObject(m, "Future", (PyObject *)&FutureType) < 0) { + Py_DECREF(&FutureType); + return NULL; + } + + return m; +} diff --git a/Modules/_futuresmodule.c b/Modules/_futuresmodule.c deleted file mode 100644 index 3e91a3c8b8..0000000000 --- a/Modules/_futuresmodule.c +++ /dev/null @@ -1,1034 +0,0 @@ -#include "Python.h" -#include "structmember.h" - - -/* identifiers used from some functions */ -_Py_IDENTIFIER(call_soon); - - -/* State of the _futures module */ -static int _futuremod_ready; -static PyObject *traceback_extract_stack; -static PyObject *asyncio_get_event_loop; -static PyObject *asyncio_repr_info_func; -static PyObject *asyncio_InvalidStateError; -static PyObject *asyncio_CancelledError; - - -/* Get FutureIter from Future */ -static PyObject* new_future_iter(PyObject *fut); - - -/* make sure module state is initialized and ready to be used. */ -static int -_FuturesMod_EnsureState(void) -{ - if (!_futuremod_ready) { - PyErr_SetString(PyExc_RuntimeError, - "_futures module wasn't properly initialized"); - return -1; - } - return 0; -} - - -typedef enum { - STATE_PENDING, - STATE_CANCELLED, - STATE_FINISHED -} fut_state; - - -typedef struct { - PyObject_HEAD - PyObject *fut_loop; - PyObject *fut_callbacks; - PyObject *fut_exception; - PyObject *fut_result; - PyObject *fut_source_tb; - fut_state fut_state; - int fut_log_tb; - int fut_blocking; - PyObject *dict; - PyObject *fut_weakreflist; -} FutureObj; - - -static int -_schedule_callbacks(FutureObj *fut) -{ - Py_ssize_t len; - PyObject* iters; - int i; - - if (fut->fut_callbacks == NULL) { - PyErr_SetString(PyExc_RuntimeError, "NULL callbacks"); - return -1; - } - - len = PyList_GET_SIZE(fut->fut_callbacks); - if (len == 0) { - return 0; - } - - iters = PyList_GetSlice(fut->fut_callbacks, 0, len); - if (iters == NULL) { - return -1; - } - if (PyList_SetSlice(fut->fut_callbacks, 0, len, NULL) < 0) { - Py_DECREF(iters); - return -1; - } - - for (i = 0; i < len; i++) { - PyObject *handle = NULL; - PyObject *cb = PyList_GET_ITEM(iters, i); - - handle = _PyObject_CallMethodId( - fut->fut_loop, &PyId_call_soon, "OO", cb, fut, NULL); - - if (handle == NULL) { - Py_DECREF(iters); - return -1; - } - else { - Py_DECREF(handle); - } - } - - Py_DECREF(iters); - return 0; -} - -static int -FutureObj_init(FutureObj *fut, PyObject *args, PyObject *kwds) -{ - static char *kwlist[] = {"loop", NULL}; - PyObject *loop = NULL; - PyObject *res = NULL; - _Py_IDENTIFIER(get_debug); - - if (_FuturesMod_EnsureState()) { - return -1; - } - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|$O", kwlist, &loop)) { - return -1; - } - if (loop == NULL || loop == Py_None) { - loop = PyObject_CallObject(asyncio_get_event_loop, NULL); - if (loop == NULL) { - return -1; - } - } - else { - Py_INCREF(loop); - } - Py_CLEAR(fut->fut_loop); - fut->fut_loop = loop; - - res = _PyObject_CallMethodId(fut->fut_loop, &PyId_get_debug, "()", NULL); - if (res == NULL) { - return -1; - } - if (PyObject_IsTrue(res)) { - Py_CLEAR(res); - fut->fut_source_tb = PyObject_CallObject(traceback_extract_stack, NULL); - if (fut->fut_source_tb == NULL) { - return -1; - } - } - else { - Py_CLEAR(res); - } - - fut->fut_callbacks = PyList_New(0); - if (fut->fut_callbacks == NULL) { - return -1; - } - return 0; -} - -static int -FutureObj_clear(FutureObj *fut) -{ - Py_CLEAR(fut->fut_loop); - Py_CLEAR(fut->fut_callbacks); - Py_CLEAR(fut->fut_result); - Py_CLEAR(fut->fut_exception); - Py_CLEAR(fut->fut_source_tb); - Py_CLEAR(fut->dict); - return 0; -} - -static int -FutureObj_traverse(FutureObj *fut, visitproc visit, void *arg) -{ - Py_VISIT(fut->fut_loop); - Py_VISIT(fut->fut_callbacks); - Py_VISIT(fut->fut_result); - Py_VISIT(fut->fut_exception); - Py_VISIT(fut->fut_source_tb); - Py_VISIT(fut->dict); - return 0; -} - -PyDoc_STRVAR(pydoc_result, - "Return the result this future represents.\n" - "\n" - "If the future has been cancelled, raises CancelledError. If the\n" - "future's result isn't yet available, raises InvalidStateError. If\n" - "the future is done and has an exception set, this exception is raised." -); - -static PyObject * -FutureObj_result(FutureObj *fut, PyObject *arg) -{ - if (fut->fut_state == STATE_CANCELLED) { - PyErr_SetString(asyncio_CancelledError, ""); - return NULL; - } - - if (fut->fut_state != STATE_FINISHED) { - PyErr_SetString(asyncio_InvalidStateError, "Result is not ready."); - return NULL; - } - - fut->fut_log_tb = 0; - if (fut->fut_exception != NULL) { - PyObject *type = NULL; - type = PyExceptionInstance_Class(fut->fut_exception); - PyErr_SetObject(type, fut->fut_exception); - return NULL; - } - - Py_INCREF(fut->fut_result); - return fut->fut_result; -} - -PyDoc_STRVAR(pydoc_exception, - "Return the exception that was set on this future.\n" - "\n" - "The exception (or None if no exception was set) is returned only if\n" - "the future is done. If the future has been cancelled, raises\n" - "CancelledError. If the future isn't done yet, raises\n" - "InvalidStateError." -); - -static PyObject * -FutureObj_exception(FutureObj *fut, PyObject *arg) -{ - if (_FuturesMod_EnsureState()) { - return NULL; - } - - if (fut->fut_state == STATE_CANCELLED) { - PyErr_SetString(asyncio_CancelledError, ""); - return NULL; - } - - if (fut->fut_state != STATE_FINISHED) { - PyErr_SetString(asyncio_InvalidStateError, "Result is not ready."); - return NULL; - } - - if (fut->fut_exception != NULL) { - fut->fut_log_tb = 0; - Py_INCREF(fut->fut_exception); - return fut->fut_exception; - } - - Py_RETURN_NONE; -} - -PyDoc_STRVAR(pydoc_set_result, - "Mark the future done and set its result.\n" - "\n" - "If the future is already done when this method is called, raises\n" - "InvalidStateError." -); - -static PyObject * -FutureObj_set_result(FutureObj *fut, PyObject *res) -{ - if (_FuturesMod_EnsureState()) { - return NULL; - } - - if (fut->fut_state != STATE_PENDING) { - PyErr_SetString(asyncio_InvalidStateError, "invalid state"); - return NULL; - } - - Py_INCREF(res); - fut->fut_result = res; - fut->fut_state = STATE_FINISHED; - - if (_schedule_callbacks(fut) == -1) { - return NULL; - } - Py_RETURN_NONE; -} - -PyDoc_STRVAR(pydoc_set_exception, - "Mark the future done and set an exception.\n" - "\n" - "If the future is already done when this method is called, raises\n" - "InvalidStateError." -); - -static PyObject * -FutureObj_set_exception(FutureObj *fut, PyObject *exc) -{ - PyObject *exc_val = NULL; - - if (_FuturesMod_EnsureState()) { - return NULL; - } - - if (fut->fut_state != STATE_PENDING) { - PyErr_SetString(asyncio_InvalidStateError, "invalid state"); - return NULL; - } - - if (PyExceptionClass_Check(exc)) { - exc_val = PyObject_CallObject(exc, NULL); - if (exc_val == NULL) { - return NULL; - } - } - else { - exc_val = exc; - Py_INCREF(exc_val); - } - if (!PyExceptionInstance_Check(exc_val)) { - Py_DECREF(exc_val); - PyErr_SetString(PyExc_TypeError, "invalid exception object"); - return NULL; - } - if ((PyObject*)Py_TYPE(exc_val) == PyExc_StopIteration) { - Py_DECREF(exc_val); - PyErr_SetString(PyExc_TypeError, - "StopIteration interacts badly with generators " - "and cannot be raised into a Future"); - return NULL; - } - - fut->fut_exception = exc_val; - fut->fut_state = STATE_FINISHED; - - if (_schedule_callbacks(fut) == -1) { - return NULL; - } - - fut->fut_log_tb = 1; - Py_RETURN_NONE; -} - -PyDoc_STRVAR(pydoc_add_done_callback, - "Add a callback to be run when the future becomes done.\n" - "\n" - "The callback is called with a single argument - the future object. If\n" - "the future is already done when this is called, the callback is\n" - "scheduled with call_soon."; -); - -static PyObject * -FutureObj_add_done_callback(FutureObj *fut, PyObject *arg) -{ - if (fut->fut_state != STATE_PENDING) { - PyObject *handle = _PyObject_CallMethodId( - fut->fut_loop, &PyId_call_soon, "OO", arg, fut, NULL); - - if (handle == NULL) { - return NULL; - } - else { - Py_DECREF(handle); - } - } - else { - int err = PyList_Append(fut->fut_callbacks, arg); - if (err != 0) { - return NULL; - } - } - Py_RETURN_NONE; -} - -PyDoc_STRVAR(pydoc_remove_done_callback, - "Remove all instances of a callback from the \"call when done\" list.\n" - "\n" - "Returns the number of callbacks removed." -); - -static PyObject * -FutureObj_remove_done_callback(FutureObj *fut, PyObject *arg) -{ - PyObject *newlist; - Py_ssize_t len, i, j=0; - - len = PyList_GET_SIZE(fut->fut_callbacks); - if (len == 0) { - return PyLong_FromSsize_t(0); - } - - newlist = PyList_New(len); - if (newlist == NULL) { - return NULL; - } - - for (i = 0; i < len; i++) { - int ret; - PyObject *item = PyList_GET_ITEM(fut->fut_callbacks, i); - - if ((ret = PyObject_RichCompareBool(arg, item, Py_EQ)) < 0) { - goto fail; - } - if (ret == 0) { - Py_INCREF(item); - PyList_SET_ITEM(newlist, j, item); - j++; - } - } - - if (PyList_SetSlice(newlist, j, len, NULL) < 0) { - goto fail; - } - if (PyList_SetSlice(fut->fut_callbacks, 0, len, newlist) < 0) { - goto fail; - } - Py_DECREF(newlist); - return PyLong_FromSsize_t(len - j); - -fail: - Py_DECREF(newlist); - return NULL; -} - -PyDoc_STRVAR(pydoc_cancel, - "Cancel the future and schedule callbacks.\n" - "\n" - "If the future is already done or cancelled, return False. Otherwise,\n" - "change the future's state to cancelled, schedule the callbacks and\n" - "return True." -); - -static PyObject * -FutureObj_cancel(FutureObj *fut, PyObject *arg) -{ - if (fut->fut_state != STATE_PENDING) { - Py_RETURN_FALSE; - } - fut->fut_state = STATE_CANCELLED; - - if (_schedule_callbacks(fut) == -1) { - return NULL; - } - - Py_RETURN_TRUE; -} - -PyDoc_STRVAR(pydoc_cancelled, "Return True if the future was cancelled."); - -static PyObject * -FutureObj_cancelled(FutureObj *fut, PyObject *arg) -{ - if (fut->fut_state == STATE_CANCELLED) { - Py_RETURN_TRUE; - } - else { - Py_RETURN_FALSE; - } -} - -PyDoc_STRVAR(pydoc_done, - "Return True if the future is done.\n" - "\n" - "Done means either that a result / exception are available, or that the\n" - "future was cancelled." -); - -static PyObject * -FutureObj_done(FutureObj *fut, PyObject *arg) -{ - if (fut->fut_state == STATE_PENDING) { - Py_RETURN_FALSE; - } - else { - Py_RETURN_TRUE; - } -} - -static PyObject * -FutureObj_get_blocking(FutureObj *fut) -{ - if (fut->fut_blocking) { - Py_RETURN_TRUE; - } - else { - Py_RETURN_FALSE; - } -} - -static int -FutureObj_set_blocking(FutureObj *fut, PyObject *val) -{ - int is_true = PyObject_IsTrue(val); - if (is_true < 0) { - return -1; - } - fut->fut_blocking = is_true; - return 0; -} - -static PyObject * -FutureObj_get_log_traceback(FutureObj *fut) -{ - if (fut->fut_log_tb) { - Py_RETURN_TRUE; - } - else { - Py_RETURN_FALSE; - } -} - -static PyObject * -FutureObj_get_loop(FutureObj *fut) -{ - if (fut->fut_loop == NULL) { - Py_RETURN_NONE; - } - Py_INCREF(fut->fut_loop); - return fut->fut_loop; -} - -static PyObject * -FutureObj_get_callbacks(FutureObj *fut) -{ - if (fut->fut_callbacks == NULL) { - Py_RETURN_NONE; - } - Py_INCREF(fut->fut_callbacks); - return fut->fut_callbacks; -} - -static PyObject * -FutureObj_get_result(FutureObj *fut) -{ - if (fut->fut_result == NULL) { - Py_RETURN_NONE; - } - Py_INCREF(fut->fut_result); - return fut->fut_result; -} - -static PyObject * -FutureObj_get_exception(FutureObj *fut) -{ - if (fut->fut_exception == NULL) { - Py_RETURN_NONE; - } - Py_INCREF(fut->fut_exception); - return fut->fut_exception; -} - -static PyObject * -FutureObj_get_source_traceback(FutureObj *fut) -{ - if (fut->fut_source_tb == NULL) { - Py_RETURN_NONE; - } - Py_INCREF(fut->fut_source_tb); - return fut->fut_source_tb; -} - -static PyObject * -FutureObj_get_state(FutureObj *fut) -{ - _Py_IDENTIFIER(PENDING); - _Py_IDENTIFIER(CANCELLED); - _Py_IDENTIFIER(FINISHED); - PyObject *ret = NULL; - - switch (fut->fut_state) { - case STATE_PENDING: - ret = _PyUnicode_FromId(&PyId_PENDING); - break; - case STATE_CANCELLED: - ret = _PyUnicode_FromId(&PyId_CANCELLED); - break; - case STATE_FINISHED: - ret = _PyUnicode_FromId(&PyId_FINISHED); - break; - default: - assert (0); - } - Py_INCREF(ret); - return ret; -} - -static PyObject* -FutureObj__repr_info(FutureObj *fut) -{ - if (asyncio_repr_info_func == NULL) { - return PyList_New(0); - } - return PyObject_CallFunctionObjArgs(asyncio_repr_info_func, fut, NULL); -} - -static PyObject * -FutureObj_repr(FutureObj *fut) -{ - _Py_IDENTIFIER(_repr_info); - - PyObject *_repr_info = _PyUnicode_FromId(&PyId__repr_info); // borrowed - if (_repr_info == NULL) { - return NULL; - } - - PyObject *rinfo = PyObject_CallMethodObjArgs((PyObject*)fut, _repr_info, - NULL); - if (rinfo == NULL) { - return NULL; - } - - PyObject *sp = PyUnicode_FromString(" "); - if (sp == NULL) { - Py_DECREF(rinfo); - return NULL; - } - - PyObject *rinfo_s = PyUnicode_Join(sp, rinfo); - Py_DECREF(sp); - Py_DECREF(rinfo); - if (rinfo_s == NULL) { - return NULL; - } - - PyObject *rstr = NULL; - PyObject *type_name = PyObject_GetAttrString((PyObject*)Py_TYPE(fut), - "__name__"); - if (type_name != NULL) { - rstr = PyUnicode_FromFormat("<%S %S>", type_name, rinfo_s); - Py_DECREF(type_name); - } - Py_DECREF(rinfo_s); - return rstr; -} - -static void -FutureObj_finalize(FutureObj *fut) -{ - _Py_IDENTIFIER(call_exception_handler); - _Py_IDENTIFIER(message); - _Py_IDENTIFIER(exception); - _Py_IDENTIFIER(future); - _Py_IDENTIFIER(source_traceback); - - if (!fut->fut_log_tb) { - return; - } - assert(fut->fut_exception != NULL); - fut->fut_log_tb = 0;; - - PyObject *error_type, *error_value, *error_traceback; - /* Save the current exception, if any. */ - PyErr_Fetch(&error_type, &error_value, &error_traceback); - - PyObject *context = NULL; - PyObject *type_name = NULL; - PyObject *message = NULL; - PyObject *func = NULL; - PyObject *res = NULL; - - context = PyDict_New(); - if (context == NULL) { - goto finally; - } - - type_name = PyObject_GetAttrString((PyObject*)Py_TYPE(fut), "__name__"); - if (type_name == NULL) { - goto finally; - } - - message = PyUnicode_FromFormat( - "%S exception was never retrieved", type_name); - if (message == NULL) { - goto finally; - } - - if (_PyDict_SetItemId(context, &PyId_message, message) < 0 || - _PyDict_SetItemId(context, &PyId_exception, fut->fut_exception) < 0 || - _PyDict_SetItemId(context, &PyId_future, (PyObject*)fut) < 0) { - goto finally; - } - if (fut->fut_source_tb != NULL) { - if (_PyDict_SetItemId(context, &PyId_source_traceback, - fut->fut_source_tb) < 0) { - goto finally; - } - } - - func = _PyObject_GetAttrId(fut->fut_loop, &PyId_call_exception_handler); - if (func != NULL) { - res = _PyObject_CallArg1(func, context); - if (res == NULL) { - PyErr_WriteUnraisable(func); - } - } - -finally: - Py_CLEAR(context); - Py_CLEAR(type_name); - Py_CLEAR(message); - Py_CLEAR(func); - Py_CLEAR(res); - - /* Restore the saved exception. */ - PyErr_Restore(error_type, error_value, error_traceback); -} - - -static PyAsyncMethods FutureType_as_async = { - (unaryfunc)new_future_iter, /* am_await */ - 0, /* am_aiter */ - 0 /* am_anext */ -}; - -static PyMethodDef FutureType_methods[] = { - {"_repr_info", (PyCFunction)FutureObj__repr_info, METH_NOARGS, NULL}, - {"add_done_callback", - (PyCFunction)FutureObj_add_done_callback, - METH_O, pydoc_add_done_callback}, - {"remove_done_callback", - (PyCFunction)FutureObj_remove_done_callback, - METH_O, pydoc_remove_done_callback}, - {"set_result", - (PyCFunction)FutureObj_set_result, METH_O, pydoc_set_result}, - {"set_exception", - (PyCFunction)FutureObj_set_exception, METH_O, pydoc_set_exception}, - {"cancel", (PyCFunction)FutureObj_cancel, METH_NOARGS, pydoc_cancel}, - {"cancelled", - (PyCFunction)FutureObj_cancelled, METH_NOARGS, pydoc_cancelled}, - {"done", (PyCFunction)FutureObj_done, METH_NOARGS, pydoc_done}, - {"result", (PyCFunction)FutureObj_result, METH_NOARGS, pydoc_result}, - {"exception", - (PyCFunction)FutureObj_exception, METH_NOARGS, pydoc_exception}, - {NULL, NULL} /* Sentinel */ -}; - -static PyGetSetDef FutureType_getsetlist[] = { - {"_state", (getter)FutureObj_get_state, NULL, NULL}, - {"_asyncio_future_blocking", (getter)FutureObj_get_blocking, - (setter)FutureObj_set_blocking, NULL}, - {"_loop", (getter)FutureObj_get_loop, NULL, NULL}, - {"_callbacks", (getter)FutureObj_get_callbacks, NULL, NULL}, - {"_result", (getter)FutureObj_get_result, NULL, NULL}, - {"_exception", (getter)FutureObj_get_exception, NULL, NULL}, - {"_log_traceback", (getter)FutureObj_get_log_traceback, NULL, NULL}, - {"_source_traceback", (getter)FutureObj_get_source_traceback, NULL, NULL}, - {NULL} /* Sentinel */ -}; - -static void FutureObj_dealloc(PyObject *self); - -static PyTypeObject FutureType = { - PyVarObject_HEAD_INIT(0, 0) - "_futures.Future", - sizeof(FutureObj), /* tp_basicsize */ - .tp_dealloc = FutureObj_dealloc, - .tp_as_async = &FutureType_as_async, - .tp_repr = (reprfunc)FutureObj_repr, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE - | Py_TPFLAGS_HAVE_FINALIZE, - .tp_doc = "Fast asyncio.Future implementation.", - .tp_traverse = (traverseproc)FutureObj_traverse, - .tp_clear = (inquiry)FutureObj_clear, - .tp_weaklistoffset = offsetof(FutureObj, fut_weakreflist), - .tp_iter = (getiterfunc)new_future_iter, - .tp_methods = FutureType_methods, - .tp_getset = FutureType_getsetlist, - .tp_dictoffset = offsetof(FutureObj, dict), - .tp_init = (initproc)FutureObj_init, - .tp_new = PyType_GenericNew, - .tp_finalize = (destructor)FutureObj_finalize, -}; - -static void -FutureObj_dealloc(PyObject *self) -{ - FutureObj *fut = (FutureObj *)self; - - if (Py_TYPE(fut) == &FutureType) { - /* When fut is subclass of Future, finalizer is called from - * subtype_dealloc. - */ - if (PyObject_CallFinalizerFromDealloc(self) < 0) { - // resurrected. - return; - } - } - - if (fut->fut_weakreflist != NULL) { - PyObject_ClearWeakRefs(self); - } - - FutureObj_clear(fut); - Py_TYPE(fut)->tp_free(fut); -} - - -/*********************** Future Iterator **************************/ - -typedef struct { - PyObject_HEAD - FutureObj *future; -} futureiterobject; - -static void -FutureIter_dealloc(futureiterobject *it) -{ - _PyObject_GC_UNTRACK(it); - Py_XDECREF(it->future); - PyObject_GC_Del(it); -} - -static PyObject * -FutureIter_iternext(futureiterobject *it) -{ - PyObject *res; - FutureObj *fut = it->future; - - if (fut == NULL) { - return NULL; - } - - if (fut->fut_state == STATE_PENDING) { - if (!fut->fut_blocking) { - fut->fut_blocking = 1; - Py_INCREF(fut); - return (PyObject *)fut; - } - PyErr_Format(PyExc_AssertionError, - "yield from wasn't used with future"); - return NULL; - } - - res = FutureObj_result(fut, NULL); - if (res != NULL) { - // normal result - PyErr_SetObject(PyExc_StopIteration, res); - Py_DECREF(res); - } - - it->future = NULL; - Py_DECREF(fut); - return NULL; -} - -static PyObject * -FutureIter_send(futureiterobject *self, PyObject *arg) -{ - if (arg != Py_None) { - PyErr_Format(PyExc_TypeError, - "can't send non-None value to a FutureIter"); - return NULL; - } - return FutureIter_iternext(self); -} - -static PyObject * -FutureIter_throw(futureiterobject *self, PyObject *args) -{ - PyObject *type=NULL, *val=NULL, *tb=NULL; - if (!PyArg_ParseTuple(args, "O|OO", &type, &val, &tb)) - return NULL; - - if (val == Py_None) { - val = NULL; - } - if (tb == Py_None) { - tb = NULL; - } - - Py_CLEAR(self->future); - - if (tb != NULL) { - PyErr_Restore(type, val, tb); - } - else if (val != NULL) { - PyErr_SetObject(type, val); - } - else { - if (PyExceptionClass_Check(type)) { - val = PyObject_CallObject(type, NULL); - } - else { - val = type; - assert (PyExceptionInstance_Check(val)); - type = (PyObject*)Py_TYPE(val); - assert (PyExceptionClass_Check(type)); - } - PyErr_SetObject(type, val); - } - return FutureIter_iternext(self); -} - -static PyObject * -FutureIter_close(futureiterobject *self, PyObject *arg) -{ - Py_CLEAR(self->future); - Py_RETURN_NONE; -} - -static int -FutureIter_traverse(futureiterobject *it, visitproc visit, void *arg) -{ - Py_VISIT(it->future); - return 0; -} - -static PyMethodDef FutureIter_methods[] = { - {"send", (PyCFunction)FutureIter_send, METH_O, NULL}, - {"throw", (PyCFunction)FutureIter_throw, METH_VARARGS, NULL}, - {"close", (PyCFunction)FutureIter_close, METH_NOARGS, NULL}, - {NULL, NULL} /* Sentinel */ -}; - -static PyTypeObject FutureIterType = { - PyVarObject_HEAD_INIT(0, 0) - "_futures.FutureIter", - sizeof(futureiterobject), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)FutureIter_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_as_async */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ - 0, /* tp_doc */ - (traverseproc)FutureIter_traverse, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - PyObject_SelfIter, /* tp_iter */ - (iternextfunc)FutureIter_iternext, /* tp_iternext */ - FutureIter_methods, /* tp_methods */ - 0, /* tp_members */ -}; - -static PyObject * -new_future_iter(PyObject *fut) -{ - futureiterobject *it; - - if (!PyObject_TypeCheck(fut, &FutureType)) { - PyErr_BadInternalCall(); - return NULL; - } - it = PyObject_GC_New(futureiterobject, &FutureIterType); - if (it == NULL) { - return NULL; - } - Py_INCREF(fut); - it->future = (FutureObj*)fut; - PyObject_GC_Track(it); - return (PyObject*)it; -} - -/*********************** Module **************************/ - -PyDoc_STRVAR(module_doc, "Fast asyncio.Future implementation.\n"); - -PyObject * -_init_module(PyObject *self, PyObject *args) -{ - PyObject *extract_stack; - PyObject *get_event_loop; - PyObject *repr_info_func; - PyObject *invalidStateError; - PyObject *cancelledError; - - if (!PyArg_UnpackTuple(args, "_init_module", 5, 5, - &extract_stack, - &get_event_loop, - &repr_info_func, - &invalidStateError, - &cancelledError)) { - return NULL; - } - - Py_INCREF(extract_stack); - Py_XSETREF(traceback_extract_stack, extract_stack); - - Py_INCREF(get_event_loop); - Py_XSETREF(asyncio_get_event_loop, get_event_loop); - - Py_INCREF(repr_info_func); - Py_XSETREF(asyncio_repr_info_func, repr_info_func); - - Py_INCREF(invalidStateError); - Py_XSETREF(asyncio_InvalidStateError, invalidStateError); - - Py_INCREF(cancelledError); - Py_XSETREF(asyncio_CancelledError, cancelledError); - - _futuremod_ready = 1; - - Py_RETURN_NONE; -} - - -static struct PyMethodDef futuresmod_methods[] = { - {"_init_module", _init_module, METH_VARARGS, NULL}, - {NULL, NULL} -}; - - -static struct PyModuleDef _futuresmodule = { - PyModuleDef_HEAD_INIT, /* m_base */ - "_futures", /* m_name */ - module_doc, /* m_doc */ - -1, /* m_size */ - futuresmod_methods, /* m_methods */ - NULL, /* m_slots */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL, /* m_free */ -}; - - -PyMODINIT_FUNC -PyInit__futures(void) -{ - if (PyType_Ready(&FutureType) < 0) { - return NULL; - } - if (PyType_Ready(&FutureIterType) < 0) { - return NULL; - } - - PyObject *m = PyModule_Create(&_futuresmodule); - if (m == NULL) { - return NULL; - } - - Py_INCREF(&FutureType); - if (PyModule_AddObject(m, "Future", (PyObject *)&FutureType) < 0) { - Py_DECREF(&FutureType); - return NULL; - } - - return m; -} -- cgit v1.2.1 From d339e1514cdf5dfaf7e16e5b5341bd5f9a199b58 Mon Sep 17 00:00:00 2001 From: INADA Naoki Date: Tue, 18 Oct 2016 11:48:14 +0900 Subject: Issue #28452: Remove _asyncio._init_module function --- Modules/_asynciomodule.c | 121 +++++++++++++++++++++-------------------------- 1 file changed, 55 insertions(+), 66 deletions(-) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index ce576e5799..d1d9c5425e 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -7,7 +7,6 @@ _Py_IDENTIFIER(call_soon); /* State of the _asyncio module */ -static int _asynciomod_ready; static PyObject *traceback_extract_stack; static PyObject *asyncio_get_event_loop; static PyObject *asyncio_repr_info_func; @@ -19,19 +18,6 @@ static PyObject *asyncio_CancelledError; static PyObject* new_future_iter(PyObject *fut); -/* make sure module state is initialized and ready to be used. */ -static int -_AsyncioMod_EnsureState(void) -{ - if (!_asynciomod_ready) { - PyErr_SetString(PyExc_RuntimeError, - "_asyncio module wasn't properly initialized"); - return -1; - } - return 0; -} - - typedef enum { STATE_PENDING, STATE_CANCELLED, @@ -108,10 +94,6 @@ FutureObj_init(FutureObj *fut, PyObject *args, PyObject *kwds) PyObject *res = NULL; _Py_IDENTIFIER(get_debug); - if (_AsyncioMod_EnsureState()) { - return -1; - } - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|$O", kwlist, &loop)) { return -1; } @@ -218,10 +200,6 @@ PyDoc_STRVAR(pydoc_exception, static PyObject * FutureObj_exception(FutureObj *fut, PyObject *arg) { - if (_AsyncioMod_EnsureState()) { - return NULL; - } - if (fut->fut_state == STATE_CANCELLED) { PyErr_SetString(asyncio_CancelledError, ""); return NULL; @@ -251,10 +229,6 @@ PyDoc_STRVAR(pydoc_set_result, static PyObject * FutureObj_set_result(FutureObj *fut, PyObject *res) { - if (_AsyncioMod_EnsureState()) { - return NULL; - } - if (fut->fut_state != STATE_PENDING) { PyErr_SetString(asyncio_InvalidStateError, "invalid state"); return NULL; @@ -282,10 +256,6 @@ FutureObj_set_exception(FutureObj *fut, PyObject *exc) { PyObject *exc_val = NULL; - if (_AsyncioMod_EnsureState()) { - return NULL; - } - if (fut->fut_state != STATE_PENDING) { PyErr_SetString(asyncio_InvalidStateError, "invalid state"); return NULL; @@ -949,59 +919,75 @@ new_future_iter(PyObject *fut) /*********************** Module **************************/ -PyDoc_STRVAR(module_doc, "asyncio speedups.\n"); - -PyObject * -_init_module(PyObject *self, PyObject *args) +static int +init_module(void) { - PyObject *extract_stack; - PyObject *get_event_loop; - PyObject *repr_info_func; - PyObject *invalidStateError; - PyObject *cancelledError; - - if (!PyArg_UnpackTuple(args, "_init_module", 5, 5, - &extract_stack, - &get_event_loop, - &repr_info_func, - &invalidStateError, - &cancelledError)) { - return NULL; - } + PyObject *module = NULL; - Py_INCREF(extract_stack); - Py_XSETREF(traceback_extract_stack, extract_stack); + module = PyImport_ImportModule("traceback"); + if (module == NULL) { + return -1; + } + // new reference + traceback_extract_stack = PyObject_GetAttrString(module, "extract_stack"); + if (traceback_extract_stack == NULL) { + goto fail; + } + Py_DECREF(module); - Py_INCREF(get_event_loop); - Py_XSETREF(asyncio_get_event_loop, get_event_loop); + module = PyImport_ImportModule("asyncio.events"); + if (module == NULL) { + goto fail; + } + asyncio_get_event_loop = PyObject_GetAttrString(module, "get_event_loop"); + if (asyncio_get_event_loop == NULL) { + goto fail; + } + Py_DECREF(module); - Py_INCREF(repr_info_func); - Py_XSETREF(asyncio_repr_info_func, repr_info_func); + module = PyImport_ImportModule("asyncio.futures"); + if (module == NULL) { + goto fail; + } + asyncio_repr_info_func = PyObject_GetAttrString(module, + "_future_repr_info"); + if (asyncio_repr_info_func == NULL) { + goto fail; + } - Py_INCREF(invalidStateError); - Py_XSETREF(asyncio_InvalidStateError, invalidStateError); + asyncio_InvalidStateError = PyObject_GetAttrString(module, + "InvalidStateError"); + if (asyncio_InvalidStateError == NULL) { + goto fail; + } - Py_INCREF(cancelledError); - Py_XSETREF(asyncio_CancelledError, cancelledError); + asyncio_CancelledError = PyObject_GetAttrString(module, "CancelledError"); + if (asyncio_CancelledError == NULL) { + goto fail; + } - _asynciomod_ready = 1; + Py_DECREF(module); + return 0; - Py_RETURN_NONE; +fail: + Py_CLEAR(traceback_extract_stack); + Py_CLEAR(asyncio_get_event_loop); + Py_CLEAR(asyncio_repr_info_func); + Py_CLEAR(asyncio_InvalidStateError); + Py_CLEAR(asyncio_CancelledError); + Py_CLEAR(module); + return -1; } -static struct PyMethodDef asynciomod_methods[] = { - {"_init_module", _init_module, METH_VARARGS, NULL}, - {NULL, NULL} -}; - +PyDoc_STRVAR(module_doc, "Accelerator module for asyncio"); static struct PyModuleDef _asynciomodule = { PyModuleDef_HEAD_INIT, /* m_base */ "_asyncio", /* m_name */ module_doc, /* m_doc */ -1, /* m_size */ - asynciomod_methods, /* m_methods */ + NULL, /* m_methods */ NULL, /* m_slots */ NULL, /* m_traverse */ NULL, /* m_clear */ @@ -1012,6 +998,9 @@ static struct PyModuleDef _asynciomodule = { PyMODINIT_FUNC PyInit__asyncio(void) { + if (init_module() < 0) { + return NULL; + } if (PyType_Ready(&FutureType) < 0) { return NULL; } -- cgit v1.2.1 From c891f6c70b79a47f8c807fd501ab10254ae16108 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Tue, 18 Oct 2016 16:03:52 -0400 Subject: Issue #28471: Fix crash (GIL state related) in socket.setblocking --- Modules/socketmodule.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index d25bd7f798..f53eadeb6c 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -622,6 +622,7 @@ set_gaierror(int error) static int internal_setblocking(PySocketSockObject *s, int block) { + int result = -1; #ifdef MS_WINDOWS u_long arg; #endif @@ -641,34 +642,39 @@ internal_setblocking(PySocketSockObject *s, int block) #if (defined(HAVE_SYS_IOCTL_H) && defined(FIONBIO)) block = !block; if (ioctl(s->sock_fd, FIONBIO, (unsigned int *)&block) == -1) - goto error; + goto done; #else delay_flag = fcntl(s->sock_fd, F_GETFL, 0); if (delay_flag == -1) - goto error; + goto done; if (block) new_delay_flag = delay_flag & (~O_NONBLOCK); else new_delay_flag = delay_flag | O_NONBLOCK; if (new_delay_flag != delay_flag) if (fcntl(s->sock_fd, F_SETFL, new_delay_flag) == -1) - goto error; + goto done; #endif #else /* MS_WINDOWS */ arg = !block; if (ioctlsocket(s->sock_fd, FIONBIO, &arg) != 0) - goto error; + goto done; #endif /* MS_WINDOWS */ + + result = 0; + + done: Py_END_ALLOW_THREADS - return 0; - error: + if (result) { #ifndef MS_WINDOWS - PyErr_SetFromErrno(PyExc_OSError); + PyErr_SetFromErrno(PyExc_OSError); #else - PyErr_SetExcFromWindowsErr(PyExc_OSError, WSAGetLastError()); + PyErr_SetExcFromWindowsErr(PyExc_OSError, WSAGetLastError()); #endif - return -1; + } + + return result; } static int -- cgit v1.2.1 From d7cf73174de78cd7031b866f8dfe1ebcb7833bc1 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Thu, 20 Oct 2016 00:48:23 +0000 Subject: Issue #28480: Avoid label at end of compound statement --without-threads Based on patch by Masayuki Yamamoto. --- Modules/socketmodule.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index f53eadeb6c..2620d5673b 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -664,6 +664,7 @@ internal_setblocking(PySocketSockObject *s, int block) result = 0; done: + ; /* necessary for --without-threads flag */ Py_END_ALLOW_THREADS if (result) { -- cgit v1.2.1 From 50b3560ec96d48ae8588fb7cae40e00df7ecb0a3 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Thu, 20 Oct 2016 15:54:20 -0400 Subject: Issue #28492: Fix how StopIteration is raised in _asyncio.Future --- Modules/_asynciomodule.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index d1d9c5425e..d9fe63d320 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -787,9 +787,26 @@ FutureIter_iternext(futureiterobject *it) res = FutureObj_result(fut, NULL); if (res != NULL) { - // normal result - PyErr_SetObject(PyExc_StopIteration, res); + /* The result of the Future is not an exception. + + We cunstruct an exception instance manually with + PyObject_CallFunctionObjArgs and pass it to PyErr_SetObject + (similarly to what genobject.c does). + + This is to handle a situation when "res" is a tuple, in which + case PyErr_SetObject would set the value of StopIteration to + the first element of the tuple. + + (See PyErr_SetObject/_PyErr_CreateException code for details.) + */ + PyObject *e = PyObject_CallFunctionObjArgs( + PyExc_StopIteration, res, NULL); Py_DECREF(res); + if (e == NULL) { + return NULL; + } + PyErr_SetObject(PyExc_StopIteration, e); + Py_DECREF(e); } it->future = NULL; -- cgit v1.2.1 From ad050b5377201453e644dbac898ab3212b2cac55 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Thu, 20 Oct 2016 16:33:19 -0400 Subject: Issue #28493: Fix typos in _asynciomodule.c Thanks to St?phane Wirtel! --- Modules/_asynciomodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index d9fe63d320..37298cc464 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -789,11 +789,11 @@ FutureIter_iternext(futureiterobject *it) if (res != NULL) { /* The result of the Future is not an exception. - We cunstruct an exception instance manually with + We construct an exception instance manually with PyObject_CallFunctionObjArgs and pass it to PyErr_SetObject (similarly to what genobject.c does). - This is to handle a situation when "res" is a tuple, in which + We do this to handle a situation when "res" is a tuple, in which case PyErr_SetObject would set the value of StopIteration to the first element of the tuple. -- cgit v1.2.1 From 3888fec2a7d9d5688a9ada16652bdbc11449869f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 21 Oct 2016 17:09:17 +0300 Subject: Issue #28410: Added _PyErr_FormatFromCause() -- the helper for raising new exception with setting current exception as __cause__. _PyErr_FormatFromCause(exception, format, args...) is equivalent to Python raise exception(format % args) from sys.exc_info()[1] --- Modules/zipimport.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'Modules') diff --git a/Modules/zipimport.c b/Modules/zipimport.c index 7473a8fe87..59046aaae4 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -907,10 +907,8 @@ read_directory(PyObject *archive) fp = _Py_fopen_obj(archive, "rb"); if (fp == NULL) { if (PyErr_ExceptionMatches(PyExc_OSError)) { - PyObject *exc, *val, *tb; - PyErr_Fetch(&exc, &val, &tb); - PyErr_Format(ZipImportError, "can't open Zip file: %R", archive); - _PyErr_ChainExceptions(exc, val, tb); + _PyErr_FormatFromCause(ZipImportError, + "can't open Zip file: %R", archive); } return NULL; } -- cgit v1.2.1 From 803fc1fc4ac0569109097e10fcd7e031a6da3211 Mon Sep 17 00:00:00 2001 From: INADA Naoki Date: Tue, 25 Oct 2016 19:00:45 +0900 Subject: Issue #28430: Fix iterator of C implemented asyncio.Future doesn't accept non-None value is passed to it.send(val). --- Modules/_asynciomodule.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 37298cc464..a3c96c8d4a 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -815,13 +815,11 @@ FutureIter_iternext(futureiterobject *it) } static PyObject * -FutureIter_send(futureiterobject *self, PyObject *arg) +FutureIter_send(futureiterobject *self, PyObject *unused) { - if (arg != Py_None) { - PyErr_Format(PyExc_TypeError, - "can't send non-None value to a FutureIter"); - return NULL; - } + /* Future.__iter__ doesn't care about values that are pushed to the + * generator, it just returns "self.result(). + */ return FutureIter_iternext(self); } -- cgit v1.2.1 From 4b9446e7b8800e914a2180cfb8f701f7e6a382d1 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Fri, 28 Oct 2016 12:52:37 -0400 Subject: Issue #28544: Implement asyncio.Task in C. This implementation provides additional 10-20% speed boost for asyncio programs. The patch also fixes _asynciomodule.c to use Arguments Clinic, and makes '_schedule_callbacks' an overridable method (as it was in 3.5). --- Modules/_asynciomodule.c | 2050 +++++++++++++++++++++++++++++++------ Modules/clinic/_asynciomodule.c.h | 520 ++++++++++ 2 files changed, 2256 insertions(+), 314 deletions(-) create mode 100644 Modules/clinic/_asynciomodule.c.h (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index a3c96c8d4a..d9419df3b5 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -2,20 +2,35 @@ #include "structmember.h" +/*[clinic input] +module _asyncio +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=8fd17862aa989c69]*/ + + /* identifiers used from some functions */ +_Py_IDENTIFIER(add_done_callback); _Py_IDENTIFIER(call_soon); +_Py_IDENTIFIER(cancel); +_Py_IDENTIFIER(send); +_Py_IDENTIFIER(throw); +_Py_IDENTIFIER(_step); +_Py_IDENTIFIER(_schedule_callbacks); +_Py_IDENTIFIER(_wakeup); /* State of the _asyncio module */ +static PyObject *all_tasks; +static PyDictObject *current_tasks; static PyObject *traceback_extract_stack; static PyObject *asyncio_get_event_loop; -static PyObject *asyncio_repr_info_func; +static PyObject *asyncio_future_repr_info_func; +static PyObject *asyncio_task_repr_info_func; +static PyObject *asyncio_task_get_stack_func; +static PyObject *asyncio_task_print_stack_func; static PyObject *asyncio_InvalidStateError; static PyObject *asyncio_CancelledError; - - -/* Get FutureIter from Future */ -static PyObject* new_future_iter(PyObject *fut); +static PyObject *inspect_isgenerator; typedef enum { @@ -24,24 +39,57 @@ typedef enum { STATE_FINISHED } fut_state; +#define FutureObj_HEAD(prefix) \ + PyObject_HEAD \ + PyObject *prefix##_loop; \ + PyObject *prefix##_callbacks; \ + PyObject *prefix##_exception; \ + PyObject *prefix##_result; \ + PyObject *prefix##_source_tb; \ + fut_state prefix##_state; \ + int prefix##_log_tb; \ + int prefix##_blocking; \ + PyObject *dict; \ + PyObject *prefix##_weakreflist; typedef struct { - PyObject_HEAD - PyObject *fut_loop; - PyObject *fut_callbacks; - PyObject *fut_exception; - PyObject *fut_result; - PyObject *fut_source_tb; - fut_state fut_state; - int fut_log_tb; - int fut_blocking; - PyObject *dict; - PyObject *fut_weakreflist; + FutureObj_HEAD(fut) } FutureObj; +typedef struct { + FutureObj_HEAD(task) + PyObject *task_fut_waiter; + PyObject *task_coro; + int task_must_cancel; + int task_log_destroy_pending; +} TaskObj; + +typedef struct { + PyObject_HEAD + TaskObj *sw_task; + PyObject *sw_arg; +} TaskSendMethWrapper; + +typedef struct { + PyObject_HEAD + TaskObj *ww_task; +} TaskWakeupMethWrapper; + + +#include "clinic/_asynciomodule.c.h" + + +/*[clinic input] +class _asyncio.Future "FutureObj *" "&Future_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=00d3e4abca711e0f]*/ + +/* Get FutureIter from Future */ +static PyObject* future_new_iter(PyObject *); +static inline int future_call_schedule_callbacks(FutureObj *); static int -_schedule_callbacks(FutureObj *fut) +future_schedule_callbacks(FutureObj *fut) { Py_ssize_t len; PyObject* iters; @@ -87,16 +135,11 @@ _schedule_callbacks(FutureObj *fut) } static int -FutureObj_init(FutureObj *fut, PyObject *args, PyObject *kwds) +future_init(FutureObj *fut, PyObject *loop) { - static char *kwlist[] = {"loop", NULL}; - PyObject *loop = NULL; PyObject *res = NULL; _Py_IDENTIFIER(get_debug); - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|$O", kwlist, &loop)) { - return -1; - } if (loop == NULL || loop == Py_None) { loop = PyObject_CallObject(asyncio_get_event_loop, NULL); if (loop == NULL) { @@ -128,106 +171,12 @@ FutureObj_init(FutureObj *fut, PyObject *args, PyObject *kwds) if (fut->fut_callbacks == NULL) { return -1; } - return 0; -} - -static int -FutureObj_clear(FutureObj *fut) -{ - Py_CLEAR(fut->fut_loop); - Py_CLEAR(fut->fut_callbacks); - Py_CLEAR(fut->fut_result); - Py_CLEAR(fut->fut_exception); - Py_CLEAR(fut->fut_source_tb); - Py_CLEAR(fut->dict); - return 0; -} -static int -FutureObj_traverse(FutureObj *fut, visitproc visit, void *arg) -{ - Py_VISIT(fut->fut_loop); - Py_VISIT(fut->fut_callbacks); - Py_VISIT(fut->fut_result); - Py_VISIT(fut->fut_exception); - Py_VISIT(fut->fut_source_tb); - Py_VISIT(fut->dict); return 0; } -PyDoc_STRVAR(pydoc_result, - "Return the result this future represents.\n" - "\n" - "If the future has been cancelled, raises CancelledError. If the\n" - "future's result isn't yet available, raises InvalidStateError. If\n" - "the future is done and has an exception set, this exception is raised." -); - -static PyObject * -FutureObj_result(FutureObj *fut, PyObject *arg) -{ - if (fut->fut_state == STATE_CANCELLED) { - PyErr_SetString(asyncio_CancelledError, ""); - return NULL; - } - - if (fut->fut_state != STATE_FINISHED) { - PyErr_SetString(asyncio_InvalidStateError, "Result is not ready."); - return NULL; - } - - fut->fut_log_tb = 0; - if (fut->fut_exception != NULL) { - PyObject *type = NULL; - type = PyExceptionInstance_Class(fut->fut_exception); - PyErr_SetObject(type, fut->fut_exception); - return NULL; - } - - Py_INCREF(fut->fut_result); - return fut->fut_result; -} - -PyDoc_STRVAR(pydoc_exception, - "Return the exception that was set on this future.\n" - "\n" - "The exception (or None if no exception was set) is returned only if\n" - "the future is done. If the future has been cancelled, raises\n" - "CancelledError. If the future isn't done yet, raises\n" - "InvalidStateError." -); - -static PyObject * -FutureObj_exception(FutureObj *fut, PyObject *arg) -{ - if (fut->fut_state == STATE_CANCELLED) { - PyErr_SetString(asyncio_CancelledError, ""); - return NULL; - } - - if (fut->fut_state != STATE_FINISHED) { - PyErr_SetString(asyncio_InvalidStateError, "Result is not ready."); - return NULL; - } - - if (fut->fut_exception != NULL) { - fut->fut_log_tb = 0; - Py_INCREF(fut->fut_exception); - return fut->fut_exception; - } - - Py_RETURN_NONE; -} - -PyDoc_STRVAR(pydoc_set_result, - "Mark the future done and set its result.\n" - "\n" - "If the future is already done when this method is called, raises\n" - "InvalidStateError." -); - static PyObject * -FutureObj_set_result(FutureObj *fut, PyObject *res) +future_set_result(FutureObj *fut, PyObject *res) { if (fut->fut_state != STATE_PENDING) { PyErr_SetString(asyncio_InvalidStateError, "invalid state"); @@ -238,21 +187,14 @@ FutureObj_set_result(FutureObj *fut, PyObject *res) fut->fut_result = res; fut->fut_state = STATE_FINISHED; - if (_schedule_callbacks(fut) == -1) { + if (future_call_schedule_callbacks(fut) == -1) { return NULL; } Py_RETURN_NONE; } -PyDoc_STRVAR(pydoc_set_exception, - "Mark the future done and set an exception.\n" - "\n" - "If the future is already done when this method is called, raises\n" - "InvalidStateError." -); - static PyObject * -FutureObj_set_exception(FutureObj *fut, PyObject *exc) +future_set_exception(FutureObj *fut, PyObject *exc) { PyObject *exc_val = NULL; @@ -287,7 +229,7 @@ FutureObj_set_exception(FutureObj *fut, PyObject *exc) fut->fut_exception = exc_val; fut->fut_state = STATE_FINISHED; - if (_schedule_callbacks(fut) == -1) { + if (future_call_schedule_callbacks(fut) == -1) { return NULL; } @@ -295,16 +237,50 @@ FutureObj_set_exception(FutureObj *fut, PyObject *exc) Py_RETURN_NONE; } -PyDoc_STRVAR(pydoc_add_done_callback, - "Add a callback to be run when the future becomes done.\n" - "\n" - "The callback is called with a single argument - the future object. If\n" - "the future is already done when this is called, the callback is\n" - "scheduled with call_soon."; -); +static int +future_get_result(FutureObj *fut, PyObject **result) +{ + PyObject *exc; + + if (fut->fut_state == STATE_CANCELLED) { + exc = _PyObject_CallNoArg(asyncio_CancelledError); + if (exc == NULL) { + return -1; + } + *result = exc; + return 1; + } + + if (fut->fut_state != STATE_FINISHED) { + PyObject *msg = PyUnicode_FromString("Result is not ready."); + if (msg == NULL) { + return -1; + } + + exc = _PyObject_CallArg1(asyncio_InvalidStateError, msg); + Py_DECREF(msg); + if (exc == NULL) { + return -1; + } + + *result = exc; + return 1; + } + + fut->fut_log_tb = 0; + if (fut->fut_exception != NULL) { + Py_INCREF(fut->fut_exception); + *result = fut->fut_exception; + return 1; + } + + Py_INCREF(fut->fut_result); + *result = fut->fut_result; + return 0; +} static PyObject * -FutureObj_add_done_callback(FutureObj *fut, PyObject *arg) +future_add_done_callback(FutureObj *fut, PyObject *arg) { if (fut->fut_state != STATE_PENDING) { PyObject *handle = _PyObject_CallMethodId( @@ -326,19 +302,216 @@ FutureObj_add_done_callback(FutureObj *fut, PyObject *arg) Py_RETURN_NONE; } -PyDoc_STRVAR(pydoc_remove_done_callback, - "Remove all instances of a callback from the \"call when done\" list.\n" - "\n" - "Returns the number of callbacks removed." -); +static PyObject * +future_cancel(FutureObj *fut) +{ + if (fut->fut_state != STATE_PENDING) { + Py_RETURN_FALSE; + } + fut->fut_state = STATE_CANCELLED; + + if (future_call_schedule_callbacks(fut) == -1) { + return NULL; + } + + Py_RETURN_TRUE; +} + +/*[clinic input] +_asyncio.Future.__init__ + + * + loop: 'O' = NULL + +This class is *almost* compatible with concurrent.futures.Future. + + Differences: + + - result() and exception() do not take a timeout argument and + raise an exception when the future isn't done yet. + + - Callbacks registered with add_done_callback() are always called + via the event loop's call_soon_threadsafe(). + + - This class is not compatible with the wait() and as_completed() + methods in the concurrent.futures package. +[clinic start generated code]*/ + +static int +_asyncio_Future___init___impl(FutureObj *self, PyObject *loop) +/*[clinic end generated code: output=9ed75799eaccb5d6 input=8e1681f23605be2d]*/ + +{ + return future_init(self, loop); +} + +static int +FutureObj_clear(FutureObj *fut) +{ + Py_CLEAR(fut->fut_loop); + Py_CLEAR(fut->fut_callbacks); + Py_CLEAR(fut->fut_result); + Py_CLEAR(fut->fut_exception); + Py_CLEAR(fut->fut_source_tb); + Py_CLEAR(fut->dict); + return 0; +} + +static int +FutureObj_traverse(FutureObj *fut, visitproc visit, void *arg) +{ + Py_VISIT(fut->fut_loop); + Py_VISIT(fut->fut_callbacks); + Py_VISIT(fut->fut_result); + Py_VISIT(fut->fut_exception); + Py_VISIT(fut->fut_source_tb); + Py_VISIT(fut->dict); + return 0; +} + +/*[clinic input] +_asyncio.Future.result + +Return the result this future represents. + +If the future has been cancelled, raises CancelledError. If the +future's result isn't yet available, raises InvalidStateError. If +the future is done and has an exception set, this exception is raised. +[clinic start generated code]*/ + +static PyObject * +_asyncio_Future_result_impl(FutureObj *self) +/*[clinic end generated code: output=f35f940936a4b1e5 input=49ecf9cf5ec50dc5]*/ +{ + PyObject *result; + int res = future_get_result(self, &result); + + if (res == -1) { + return NULL; + } + + if (res == 0) { + return result; + } + + assert(res == 1); + + PyErr_SetObject(PyExceptionInstance_Class(result), result); + Py_DECREF(result); + return NULL; +} + +/*[clinic input] +_asyncio.Future.exception + +Return the exception that was set on this future. + +The exception (or None if no exception was set) is returned only if +the future is done. If the future has been cancelled, raises +CancelledError. If the future isn't done yet, raises +InvalidStateError. +[clinic start generated code]*/ + +static PyObject * +_asyncio_Future_exception_impl(FutureObj *self) +/*[clinic end generated code: output=88b20d4f855e0710 input=733547a70c841c68]*/ +{ + if (self->fut_state == STATE_CANCELLED) { + PyErr_SetString(asyncio_CancelledError, ""); + return NULL; + } + + if (self->fut_state != STATE_FINISHED) { + PyErr_SetString(asyncio_InvalidStateError, "Result is not ready."); + return NULL; + } + + if (self->fut_exception != NULL) { + self->fut_log_tb = 0; + Py_INCREF(self->fut_exception); + return self->fut_exception; + } + + Py_RETURN_NONE; +} + +/*[clinic input] +_asyncio.Future.set_result + + res: 'O' + / + +Mark the future done and set its result. + +If the future is already done when this method is called, raises +InvalidStateError. +[clinic start generated code]*/ + +static PyObject * +_asyncio_Future_set_result(FutureObj *self, PyObject *res) +/*[clinic end generated code: output=a620abfc2796bfb6 input=8619565e0503357e]*/ +{ + return future_set_result(self, res); +} + +/*[clinic input] +_asyncio.Future.set_exception + + exception: 'O' + / + +Mark the future done and set an exception. + +If the future is already done when this method is called, raises +InvalidStateError. +[clinic start generated code]*/ + +static PyObject * +_asyncio_Future_set_exception(FutureObj *self, PyObject *exception) +/*[clinic end generated code: output=f1c1b0cd321be360 input=1377dbe15e6ea186]*/ +{ + return future_set_exception(self, exception); +} + +/*[clinic input] +_asyncio.Future.add_done_callback + + fn: 'O' + / + +Add a callback to be run when the future becomes done. + +The callback is called with a single argument - the future object. If +the future is already done when this is called, the callback is +scheduled with call_soon. +[clinic start generated code]*/ + +static PyObject * +_asyncio_Future_add_done_callback(FutureObj *self, PyObject *fn) +/*[clinic end generated code: output=819e09629b2ec2b5 input=8cce187e32cec6a8]*/ +{ + return future_add_done_callback(self, fn); +} + +/*[clinic input] +_asyncio.Future.remove_done_callback + + fn: 'O' + / + +Remove all instances of a callback from the "call when done" list. + +Returns the number of callbacks removed. +[clinic start generated code]*/ static PyObject * -FutureObj_remove_done_callback(FutureObj *fut, PyObject *arg) +_asyncio_Future_remove_done_callback(FutureObj *self, PyObject *fn) +/*[clinic end generated code: output=5ab1fb52b24ef31f input=3fedb73e1409c31c]*/ { PyObject *newlist; Py_ssize_t len, i, j=0; - len = PyList_GET_SIZE(fut->fut_callbacks); + len = PyList_GET_SIZE(self->fut_callbacks); if (len == 0) { return PyLong_FromSsize_t(0); } @@ -350,9 +523,9 @@ FutureObj_remove_done_callback(FutureObj *fut, PyObject *arg) for (i = 0; i < len; i++) { int ret; - PyObject *item = PyList_GET_ITEM(fut->fut_callbacks, i); + PyObject *item = PyList_GET_ITEM(self->fut_callbacks, i); - if ((ret = PyObject_RichCompareBool(arg, item, Py_EQ)) < 0) { + if ((ret = PyObject_RichCompareBool(fn, item, Py_EQ)) < 0) { goto fail; } if (ret == 0) { @@ -365,7 +538,7 @@ FutureObj_remove_done_callback(FutureObj *fut, PyObject *arg) if (PyList_SetSlice(newlist, j, len, NULL) < 0) { goto fail; } - if (PyList_SetSlice(fut->fut_callbacks, 0, len, newlist) < 0) { + if (PyList_SetSlice(self->fut_callbacks, 0, len, newlist) < 0) { goto fail; } Py_DECREF(newlist); @@ -376,35 +549,34 @@ fail: return NULL; } -PyDoc_STRVAR(pydoc_cancel, - "Cancel the future and schedule callbacks.\n" - "\n" - "If the future is already done or cancelled, return False. Otherwise,\n" - "change the future's state to cancelled, schedule the callbacks and\n" - "return True." -); +/*[clinic input] +_asyncio.Future.cancel -static PyObject * -FutureObj_cancel(FutureObj *fut, PyObject *arg) -{ - if (fut->fut_state != STATE_PENDING) { - Py_RETURN_FALSE; - } - fut->fut_state = STATE_CANCELLED; +Cancel the future and schedule callbacks. - if (_schedule_callbacks(fut) == -1) { - return NULL; - } +If the future is already done or cancelled, return False. Otherwise, +change the future's state to cancelled, schedule the callbacks and +return True. +[clinic start generated code]*/ - Py_RETURN_TRUE; +static PyObject * +_asyncio_Future_cancel_impl(FutureObj *self) +/*[clinic end generated code: output=e45b932ba8bd68a1 input=515709a127995109]*/ +{ + return future_cancel(self); } -PyDoc_STRVAR(pydoc_cancelled, "Return True if the future was cancelled."); +/*[clinic input] +_asyncio.Future.cancelled + +Return True if the future was cancelled. +[clinic start generated code]*/ static PyObject * -FutureObj_cancelled(FutureObj *fut, PyObject *arg) +_asyncio_Future_cancelled_impl(FutureObj *self) +/*[clinic end generated code: output=145197ced586357d input=943ab8b7b7b17e45]*/ { - if (fut->fut_state == STATE_CANCELLED) { + if (self->fut_state == STATE_CANCELLED) { Py_RETURN_TRUE; } else { @@ -412,17 +584,20 @@ FutureObj_cancelled(FutureObj *fut, PyObject *arg) } } -PyDoc_STRVAR(pydoc_done, - "Return True if the future is done.\n" - "\n" - "Done means either that a result / exception are available, or that the\n" - "future was cancelled." -); +/*[clinic input] +_asyncio.Future.done + +Return True if the future is done. + +Done means either that a result / exception are available, or that the +future was cancelled. +[clinic start generated code]*/ static PyObject * -FutureObj_done(FutureObj *fut, PyObject *arg) +_asyncio_Future_done_impl(FutureObj *self) +/*[clinic end generated code: output=244c5ac351145096 input=28d7b23fdb65d2ac]*/ { - if (fut->fut_state == STATE_PENDING) { + if (self->fut_state == STATE_PENDING) { Py_RETURN_FALSE; } else { @@ -538,13 +713,31 @@ FutureObj_get_state(FutureObj *fut) return ret; } -static PyObject* -FutureObj__repr_info(FutureObj *fut) +/*[clinic input] +_asyncio.Future._repr_info +[clinic start generated code]*/ + +static PyObject * +_asyncio_Future__repr_info_impl(FutureObj *self) +/*[clinic end generated code: output=fa69e901bd176cfb input=f21504d8e2ae1ca2]*/ +{ + return PyObject_CallFunctionObjArgs( + asyncio_future_repr_info_func, self, NULL); +} + +/*[clinic input] +_asyncio.Future._schedule_callbacks +[clinic start generated code]*/ + +static PyObject * +_asyncio_Future__schedule_callbacks_impl(FutureObj *self) +/*[clinic end generated code: output=5e8958d89ea1c5dc input=4f5f295f263f4a88]*/ { - if (asyncio_repr_info_func == NULL) { - return PyList_New(0); + int ret = future_schedule_callbacks(self); + if (ret == -1) { + return NULL; } - return PyObject_CallFunctionObjArgs(asyncio_repr_info_func, fut, NULL); + Py_RETURN_NONE; } static PyObject * @@ -661,43 +854,39 @@ finally: static PyAsyncMethods FutureType_as_async = { - (unaryfunc)new_future_iter, /* am_await */ + (unaryfunc)future_new_iter, /* am_await */ 0, /* am_aiter */ 0 /* am_anext */ }; static PyMethodDef FutureType_methods[] = { - {"_repr_info", (PyCFunction)FutureObj__repr_info, METH_NOARGS, NULL}, - {"add_done_callback", - (PyCFunction)FutureObj_add_done_callback, - METH_O, pydoc_add_done_callback}, - {"remove_done_callback", - (PyCFunction)FutureObj_remove_done_callback, - METH_O, pydoc_remove_done_callback}, - {"set_result", - (PyCFunction)FutureObj_set_result, METH_O, pydoc_set_result}, - {"set_exception", - (PyCFunction)FutureObj_set_exception, METH_O, pydoc_set_exception}, - {"cancel", (PyCFunction)FutureObj_cancel, METH_NOARGS, pydoc_cancel}, - {"cancelled", - (PyCFunction)FutureObj_cancelled, METH_NOARGS, pydoc_cancelled}, - {"done", (PyCFunction)FutureObj_done, METH_NOARGS, pydoc_done}, - {"result", (PyCFunction)FutureObj_result, METH_NOARGS, pydoc_result}, - {"exception", - (PyCFunction)FutureObj_exception, METH_NOARGS, pydoc_exception}, + _ASYNCIO_FUTURE_RESULT_METHODDEF + _ASYNCIO_FUTURE_EXCEPTION_METHODDEF + _ASYNCIO_FUTURE_SET_RESULT_METHODDEF + _ASYNCIO_FUTURE_SET_EXCEPTION_METHODDEF + _ASYNCIO_FUTURE_ADD_DONE_CALLBACK_METHODDEF + _ASYNCIO_FUTURE_REMOVE_DONE_CALLBACK_METHODDEF + _ASYNCIO_FUTURE_CANCEL_METHODDEF + _ASYNCIO_FUTURE_CANCELLED_METHODDEF + _ASYNCIO_FUTURE_DONE_METHODDEF + _ASYNCIO_FUTURE__REPR_INFO_METHODDEF + _ASYNCIO_FUTURE__SCHEDULE_CALLBACKS_METHODDEF {NULL, NULL} /* Sentinel */ }; -static PyGetSetDef FutureType_getsetlist[] = { - {"_state", (getter)FutureObj_get_state, NULL, NULL}, - {"_asyncio_future_blocking", (getter)FutureObj_get_blocking, - (setter)FutureObj_set_blocking, NULL}, - {"_loop", (getter)FutureObj_get_loop, NULL, NULL}, - {"_callbacks", (getter)FutureObj_get_callbacks, NULL, NULL}, - {"_result", (getter)FutureObj_get_result, NULL, NULL}, - {"_exception", (getter)FutureObj_get_exception, NULL, NULL}, - {"_log_traceback", (getter)FutureObj_get_log_traceback, NULL, NULL}, +#define FUTURE_COMMON_GETSETLIST \ + {"_state", (getter)FutureObj_get_state, NULL, NULL}, \ + {"_asyncio_future_blocking", (getter)FutureObj_get_blocking, \ + (setter)FutureObj_set_blocking, NULL}, \ + {"_loop", (getter)FutureObj_get_loop, NULL, NULL}, \ + {"_callbacks", (getter)FutureObj_get_callbacks, NULL, NULL}, \ + {"_result", (getter)FutureObj_get_result, NULL, NULL}, \ + {"_exception", (getter)FutureObj_get_exception, NULL, NULL}, \ + {"_log_traceback", (getter)FutureObj_get_log_traceback, NULL, NULL}, \ {"_source_traceback", (getter)FutureObj_get_source_traceback, NULL, NULL}, + +static PyGetSetDef FutureType_getsetlist[] = { + FUTURE_COMMON_GETSETLIST {NULL} /* Sentinel */ }; @@ -712,26 +901,47 @@ static PyTypeObject FutureType = { .tp_repr = (reprfunc)FutureObj_repr, .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_FINALIZE, - .tp_doc = "Fast asyncio.Future implementation.", + .tp_doc = _asyncio_Future___init____doc__, .tp_traverse = (traverseproc)FutureObj_traverse, .tp_clear = (inquiry)FutureObj_clear, .tp_weaklistoffset = offsetof(FutureObj, fut_weakreflist), - .tp_iter = (getiterfunc)new_future_iter, + .tp_iter = (getiterfunc)future_new_iter, .tp_methods = FutureType_methods, .tp_getset = FutureType_getsetlist, .tp_dictoffset = offsetof(FutureObj, dict), - .tp_init = (initproc)FutureObj_init, + .tp_init = (initproc)_asyncio_Future___init__, .tp_new = PyType_GenericNew, .tp_finalize = (destructor)FutureObj_finalize, }; -static void -FutureObj_dealloc(PyObject *self) -{ - FutureObj *fut = (FutureObj *)self; +#define Future_CheckExact(obj) (Py_TYPE(obj) == &FutureType) - if (Py_TYPE(fut) == &FutureType) { - /* When fut is subclass of Future, finalizer is called from +static inline int +future_call_schedule_callbacks(FutureObj *fut) +{ + if (Future_CheckExact(fut)) { + return future_schedule_callbacks(fut); + } + else { + /* `fut` is a subclass of Future */ + PyObject *ret = _PyObject_CallMethodId( + (PyObject*)fut, &PyId__schedule_callbacks, NULL); + if (ret == NULL) { + return -1; + } + + Py_DECREF(ret); + return 0; + } +} + +static void +FutureObj_dealloc(PyObject *self) +{ + FutureObj *fut = (FutureObj *)self; + + if (Future_CheckExact(fut)) { + /* When fut is subclass of Future, finalizer is called from * subtype_dealloc. */ if (PyObject_CallFinalizerFromDealloc(self) < 0) { @@ -744,7 +954,7 @@ FutureObj_dealloc(PyObject *self) PyObject_ClearWeakRefs(self); } - FutureObj_clear(fut); + (void)FutureObj_clear(fut); Py_TYPE(fut)->tp_free(fut); } @@ -759,7 +969,7 @@ typedef struct { static void FutureIter_dealloc(futureiterobject *it) { - _PyObject_GC_UNTRACK(it); + PyObject_GC_UnTrack(it); Py_XDECREF(it->future); PyObject_GC_Del(it); } @@ -785,7 +995,7 @@ FutureIter_iternext(futureiterobject *it) return NULL; } - res = FutureObj_result(fut, NULL); + res = _asyncio_Future_result_impl(fut); if (res != NULL) { /* The result of the Future is not an exception. @@ -884,37 +1094,19 @@ static PyMethodDef FutureIter_methods[] = { static PyTypeObject FutureIterType = { PyVarObject_HEAD_INIT(0, 0) "_asyncio.FutureIter", - sizeof(futureiterobject), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)FutureIter_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_as_async */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ - 0, /* tp_doc */ - (traverseproc)FutureIter_traverse, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - PyObject_SelfIter, /* tp_iter */ - (iternextfunc)FutureIter_iternext, /* tp_iternext */ - FutureIter_methods, /* tp_methods */ - 0, /* tp_members */ + .tp_basicsize = sizeof(futureiterobject), + .tp_itemsize = 0, + .tp_dealloc = (destructor)FutureIter_dealloc, + .tp_getattro = PyObject_GenericGetAttr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_traverse = (traverseproc)FutureIter_traverse, + .tp_iter = PyObject_SelfIter, + .tp_iternext = (iternextfunc)FutureIter_iternext, + .tp_methods = FutureIter_methods, }; static PyObject * -new_future_iter(PyObject *fut) +future_new_iter(PyObject *fut) { futureiterobject *it; @@ -932,105 +1124,1335 @@ new_future_iter(PyObject *fut) return (PyObject*)it; } -/*********************** Module **************************/ + +/*********************** Task **************************/ + + +/*[clinic input] +class _asyncio.Task "TaskObj *" "&Task_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=719dcef0fcc03b37]*/ + +static int task_call_step_soon(TaskObj *, PyObject *); +static inline PyObject * task_call_wakeup(TaskObj *, PyObject *); +static inline PyObject * task_call_step(TaskObj *, PyObject *); +static PyObject * task_wakeup(TaskObj *, PyObject *); +static PyObject * task_step(TaskObj *, PyObject *); + +/* ----- Task._step wrapper */ static int -init_module(void) +TaskSendMethWrapper_clear(TaskSendMethWrapper *o) { - PyObject *module = NULL; + Py_CLEAR(o->sw_task); + Py_CLEAR(o->sw_arg); + return 0; +} - module = PyImport_ImportModule("traceback"); - if (module == NULL) { - return -1; +static void +TaskSendMethWrapper_dealloc(TaskSendMethWrapper *o) +{ + PyObject_GC_UnTrack(o); + (void)TaskSendMethWrapper_clear(o); + Py_TYPE(o)->tp_free(o); +} + +static PyObject * +TaskSendMethWrapper_call(TaskSendMethWrapper *o, + PyObject *args, PyObject *kwds) +{ + return task_call_step(o->sw_task, o->sw_arg); +} + +static int +TaskSendMethWrapper_traverse(TaskSendMethWrapper *o, + visitproc visit, void *arg) +{ + Py_VISIT(o->sw_task); + Py_VISIT(o->sw_arg); + return 0; +} + +static PyObject * +TaskSendMethWrapper_get___self__(TaskSendMethWrapper *o) +{ + if (o->sw_task) { + Py_INCREF(o->sw_task); + return (PyObject*)o->sw_task; } - // new reference - traceback_extract_stack = PyObject_GetAttrString(module, "extract_stack"); - if (traceback_extract_stack == NULL) { - goto fail; + Py_RETURN_NONE; +} + +static PyGetSetDef TaskSendMethWrapper_getsetlist[] = { + {"__self__", (getter)TaskSendMethWrapper_get___self__, NULL, NULL}, + {NULL} /* Sentinel */ +}; + +PyTypeObject TaskSendMethWrapper_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "TaskSendMethWrapper", + .tp_basicsize = sizeof(TaskSendMethWrapper), + .tp_itemsize = 0, + .tp_getset = TaskSendMethWrapper_getsetlist, + .tp_dealloc = (destructor)TaskSendMethWrapper_dealloc, + .tp_call = (ternaryfunc)TaskSendMethWrapper_call, + .tp_getattro = PyObject_GenericGetAttr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_traverse = (traverseproc)TaskSendMethWrapper_traverse, + .tp_clear = (inquiry)TaskSendMethWrapper_clear, +}; + +static PyObject * +TaskSendMethWrapper_new(TaskObj *task, PyObject *arg) +{ + TaskSendMethWrapper *o; + o = PyObject_GC_New(TaskSendMethWrapper, &TaskSendMethWrapper_Type); + if (o == NULL) { + return NULL; } - Py_DECREF(module); - module = PyImport_ImportModule("asyncio.events"); - if (module == NULL) { - goto fail; + Py_INCREF(task); + o->sw_task = task; + + Py_XINCREF(arg); + o->sw_arg = arg; + + PyObject_GC_Track(o); + return (PyObject*) o; +} + +/* ----- Task._wakeup wrapper */ + +static PyObject * +TaskWakeupMethWrapper_call(TaskWakeupMethWrapper *o, + PyObject *args, PyObject *kwds) +{ + PyObject *fut; + + if (!PyArg_ParseTuple(args, "O|", &fut)) { + return NULL; } - asyncio_get_event_loop = PyObject_GetAttrString(module, "get_event_loop"); - if (asyncio_get_event_loop == NULL) { - goto fail; + + return task_call_wakeup(o->ww_task, fut); +} + +static int +TaskWakeupMethWrapper_clear(TaskWakeupMethWrapper *o) +{ + Py_CLEAR(o->ww_task); + return 0; +} + +static int +TaskWakeupMethWrapper_traverse(TaskWakeupMethWrapper *o, + visitproc visit, void *arg) +{ + Py_VISIT(o->ww_task); + return 0; +} + +static void +TaskWakeupMethWrapper_dealloc(TaskWakeupMethWrapper *o) +{ + PyObject_GC_UnTrack(o); + (void)TaskWakeupMethWrapper_clear(o); + Py_TYPE(o)->tp_free(o); +} + +PyTypeObject TaskWakeupMethWrapper_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "TaskWakeupMethWrapper", + .tp_basicsize = sizeof(TaskWakeupMethWrapper), + .tp_itemsize = 0, + .tp_dealloc = (destructor)TaskWakeupMethWrapper_dealloc, + .tp_call = (ternaryfunc)TaskWakeupMethWrapper_call, + .tp_getattro = PyObject_GenericGetAttr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_traverse = (traverseproc)TaskWakeupMethWrapper_traverse, + .tp_clear = (inquiry)TaskWakeupMethWrapper_clear, +}; + +static PyObject * +TaskWakeupMethWrapper_new(TaskObj *task) +{ + TaskWakeupMethWrapper *o; + o = PyObject_GC_New(TaskWakeupMethWrapper, &TaskWakeupMethWrapper_Type); + if (o == NULL) { + return NULL; } - Py_DECREF(module); - module = PyImport_ImportModule("asyncio.futures"); - if (module == NULL) { - goto fail; + Py_INCREF(task); + o->ww_task = task; + + PyObject_GC_Track(o); + return (PyObject*) o; +} + +/* ----- Task */ + +/*[clinic input] +_asyncio.Task.__init__ + + coro: 'O' + * + loop: 'O' = NULL + +A coroutine wrapped in a Future. +[clinic start generated code]*/ + +static int +_asyncio_Task___init___impl(TaskObj *self, PyObject *coro, PyObject *loop) +/*[clinic end generated code: output=9f24774c2287fc2f input=71d8d28c201a18cd]*/ +{ + PyObject *res; + _Py_IDENTIFIER(add); + + if (future_init((FutureObj*)self, loop)) { + return -1; } - asyncio_repr_info_func = PyObject_GetAttrString(module, - "_future_repr_info"); - if (asyncio_repr_info_func == NULL) { - goto fail; + + self->task_fut_waiter = NULL; + self->task_must_cancel = 0; + self->task_log_destroy_pending = 1; + + Py_INCREF(coro); + self->task_coro = coro; + + if (task_call_step_soon(self, NULL)) { + return -1; } - asyncio_InvalidStateError = PyObject_GetAttrString(module, - "InvalidStateError"); - if (asyncio_InvalidStateError == NULL) { - goto fail; + res = _PyObject_CallMethodId(all_tasks, &PyId_add, "O", self, NULL); + if (res == NULL) { + return -1; } + Py_DECREF(res); - asyncio_CancelledError = PyObject_GetAttrString(module, "CancelledError"); - if (asyncio_CancelledError == NULL) { - goto fail; + return 0; +} + +static int +TaskObj_clear(TaskObj *task) +{ + (void)FutureObj_clear((FutureObj*) task); + Py_CLEAR(task->task_coro); + Py_CLEAR(task->task_fut_waiter); + return 0; +} + +static int +TaskObj_traverse(TaskObj *task, visitproc visit, void *arg) +{ + Py_VISIT(task->task_coro); + Py_VISIT(task->task_fut_waiter); + (void)FutureObj_traverse((FutureObj*) task, visit, arg); + return 0; +} + +static PyObject * +TaskObj_get_log_destroy_pending(TaskObj *task) +{ + if (task->task_log_destroy_pending) { + Py_RETURN_TRUE; } + else { + Py_RETURN_FALSE; + } +} - Py_DECREF(module); +static int +TaskObj_set_log_destroy_pending(TaskObj *task, PyObject *val) +{ + int is_true = PyObject_IsTrue(val); + if (is_true < 0) { + return -1; + } + task->task_log_destroy_pending = is_true; return 0; +} -fail: - Py_CLEAR(traceback_extract_stack); - Py_CLEAR(asyncio_get_event_loop); - Py_CLEAR(asyncio_repr_info_func); - Py_CLEAR(asyncio_InvalidStateError); - Py_CLEAR(asyncio_CancelledError); - Py_CLEAR(module); - return -1; +static PyObject * +TaskObj_get_must_cancel(TaskObj *task) +{ + if (task->task_must_cancel) { + Py_RETURN_TRUE; + } + else { + Py_RETURN_FALSE; + } } +static PyObject * +TaskObj_get_coro(TaskObj *task) +{ + if (task->task_coro) { + Py_INCREF(task->task_coro); + return task->task_coro; + } -PyDoc_STRVAR(module_doc, "Accelerator module for asyncio"); + Py_RETURN_NONE; +} -static struct PyModuleDef _asynciomodule = { - PyModuleDef_HEAD_INIT, /* m_base */ - "_asyncio", /* m_name */ - module_doc, /* m_doc */ - -1, /* m_size */ - NULL, /* m_methods */ - NULL, /* m_slots */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL, /* m_free */ -}; +static PyObject * +TaskObj_get_fut_waiter(TaskObj *task) +{ + if (task->task_fut_waiter) { + Py_INCREF(task->task_fut_waiter); + return task->task_fut_waiter; + } + Py_RETURN_NONE; +} -PyMODINIT_FUNC -PyInit__asyncio(void) +/*[clinic input] +@classmethod +_asyncio.Task.current_task + + loop: 'O' = NULL + +Return the currently running task in an event loop or None. + +By default the current task for the current event loop is returned. + +None is returned when called not in the context of a Task. +[clinic start generated code]*/ + +static PyObject * +_asyncio_Task_current_task_impl(PyTypeObject *type, PyObject *loop) +/*[clinic end generated code: output=99fbe7332c516e03 input=cd784537f02cf833]*/ { - if (init_module() < 0) { - return NULL; + PyObject *res; + + if (loop == NULL) { + loop = PyObject_CallObject(asyncio_get_event_loop, NULL); + if (loop == NULL) { + return NULL; + } + + res = PyDict_GetItem((PyObject*)current_tasks, loop); + Py_DECREF(loop); } - if (PyType_Ready(&FutureType) < 0) { - return NULL; + else { + res = PyDict_GetItem((PyObject*)current_tasks, loop); } - if (PyType_Ready(&FutureIterType) < 0) { - return NULL; + + if (res == NULL) { + Py_RETURN_NONE; + } + else { + Py_INCREF(res); + return res; } +} - PyObject *m = PyModule_Create(&_asynciomodule); - if (m == NULL) { +static PyObject * +task_all_tasks(PyObject *loop) +{ + PyObject *task; + PyObject *task_loop; + PyObject *set; + PyObject *iter; + + assert(loop != NULL); + + set = PySet_New(NULL); + if (set == NULL) { return NULL; } - Py_INCREF(&FutureType); - if (PyModule_AddObject(m, "Future", (PyObject *)&FutureType) < 0) { - Py_DECREF(&FutureType); + iter = PyObject_GetIter(all_tasks); + if (iter == NULL) { + goto fail; + } + + while ((task = PyIter_Next(iter))) { + task_loop = PyObject_GetAttrString(task, "_loop"); + if (task_loop == NULL) { + Py_DECREF(task); + goto fail; + } + if (task_loop == loop) { + if (PySet_Add(set, task) == -1) { + Py_DECREF(task_loop); + Py_DECREF(task); + goto fail; + } + } + Py_DECREF(task_loop); + Py_DECREF(task); + } + + Py_DECREF(iter); + return set; + +fail: + Py_XDECREF(set); + Py_XDECREF(iter); + return NULL; +} + +/*[clinic input] +@classmethod +_asyncio.Task.all_tasks + + loop: 'O' = NULL + +Return a set of all tasks for an event loop. + +By default all tasks for the current event loop are returned. +[clinic start generated code]*/ + +static PyObject * +_asyncio_Task_all_tasks_impl(PyTypeObject *type, PyObject *loop) +/*[clinic end generated code: output=11f9b20749ccca5d input=cd64aa5f88bd5c49]*/ +{ + PyObject *res; + + if (loop == NULL) { + loop = PyObject_CallObject(asyncio_get_event_loop, NULL); + if (loop == NULL) { + return NULL; + } + + res = task_all_tasks(loop); + Py_DECREF(loop); + } + else { + res = task_all_tasks(loop); + } + + return res; +} + +/*[clinic input] +_asyncio.Task._repr_info +[clinic start generated code]*/ + +static PyObject * +_asyncio_Task__repr_info_impl(TaskObj *self) +/*[clinic end generated code: output=6a490eb66d5ba34b input=3c6d051ed3ddec8b]*/ +{ + return PyObject_CallFunctionObjArgs( + asyncio_task_repr_info_func, self, NULL); +} + +/*[clinic input] +_asyncio.Task.cancel + +Request that this task cancel itself. + +This arranges for a CancelledError to be thrown into the +wrapped coroutine on the next cycle through the event loop. +The coroutine then has a chance to clean up or even deny +the request using try/except/finally. + +Unlike Future.cancel, this does not guarantee that the +task will be cancelled: the exception might be caught and +acted upon, delaying cancellation of the task or preventing +cancellation completely. The task may also return a value or +raise a different exception. + +Immediately after this method is called, Task.cancelled() will +not return True (unless the task was already cancelled). A +task will be marked as cancelled when the wrapped coroutine +terminates with a CancelledError exception (even if cancel() +was not called). +[clinic start generated code]*/ + +static PyObject * +_asyncio_Task_cancel_impl(TaskObj *self) +/*[clinic end generated code: output=6bfc0479da9d5757 input=13f9bf496695cb52]*/ +{ + if (self->task_state != STATE_PENDING) { + Py_RETURN_FALSE; + } + + if (self->task_fut_waiter) { + PyObject *res; + int is_true; + + res = _PyObject_CallMethodId( + self->task_fut_waiter, &PyId_cancel, NULL); + if (res == NULL) { + return NULL; + } + + is_true = PyObject_IsTrue(res); + Py_DECREF(res); + if (is_true < 0) { + return NULL; + } + + if (is_true) { + Py_RETURN_TRUE; + } + } + + self->task_must_cancel = 1; + Py_RETURN_TRUE; +} + +/*[clinic input] +_asyncio.Task.get_stack + + * + limit: 'O' = None + +Return the list of stack frames for this task's coroutine. + +If the coroutine is not done, this returns the stack where it is +suspended. If the coroutine has completed successfully or was +cancelled, this returns an empty list. If the coroutine was +terminated by an exception, this returns the list of traceback +frames. + +The frames are always ordered from oldest to newest. + +The optional limit gives the maximum number of frames to +return; by default all available frames are returned. Its +meaning differs depending on whether a stack or a traceback is +returned: the newest frames of a stack are returned, but the +oldest frames of a traceback are returned. (This matches the +behavior of the traceback module.) + +For reasons beyond our control, only one stack frame is +returned for a suspended coroutine. +[clinic start generated code]*/ + +static PyObject * +_asyncio_Task_get_stack_impl(TaskObj *self, PyObject *limit) +/*[clinic end generated code: output=c9aeeeebd1e18118 input=b1920230a766d17a]*/ +{ + return PyObject_CallFunctionObjArgs( + asyncio_task_get_stack_func, self, limit, NULL); +} + +/*[clinic input] +_asyncio.Task.print_stack + + * + limit: 'O' = None + file: 'O' = None + +Print the stack or traceback for this task's coroutine. + +This produces output similar to that of the traceback module, +for the frames retrieved by get_stack(). The limit argument +is passed to get_stack(). The file argument is an I/O stream +to which the output is written; by default output is written +to sys.stderr. +[clinic start generated code]*/ + +static PyObject * +_asyncio_Task_print_stack_impl(TaskObj *self, PyObject *limit, + PyObject *file) +/*[clinic end generated code: output=7339e10314cd3f4d input=19f1e99ab5400bc3]*/ +{ + return PyObject_CallFunctionObjArgs( + asyncio_task_print_stack_func, self, limit, file, NULL); +} + +/*[clinic input] +_asyncio.Task._step + + exc: 'O' = NULL +[clinic start generated code]*/ + +static PyObject * +_asyncio_Task__step_impl(TaskObj *self, PyObject *exc) +/*[clinic end generated code: output=7ed23f0cefd5ae42 input=ada4b2324e5370af]*/ +{ + return task_step(self, exc == Py_None ? NULL : exc); +} + +/*[clinic input] +_asyncio.Task._wakeup + + fut: 'O' +[clinic start generated code]*/ + +static PyObject * +_asyncio_Task__wakeup_impl(TaskObj *self, PyObject *fut) +/*[clinic end generated code: output=75cb341c760fd071 input=11ee4918a5bdbf21]*/ +{ + return task_wakeup(self, fut); +} + +static void +TaskObj_finalize(TaskObj *task) +{ + _Py_IDENTIFIER(call_exception_handler); + _Py_IDENTIFIER(task); + _Py_IDENTIFIER(message); + _Py_IDENTIFIER(source_traceback); + + PyObject *message = NULL; + PyObject *context = NULL; + PyObject *func = NULL; + PyObject *res = NULL; + + PyObject *error_type, *error_value, *error_traceback; + + if (task->task_state != STATE_PENDING || !task->task_log_destroy_pending) { + goto done; + } + + /* Save the current exception, if any. */ + PyErr_Fetch(&error_type, &error_value, &error_traceback); + + context = PyDict_New(); + if (context == NULL) { + goto finally; + } + + message = PyUnicode_FromString("Task was destroyed but it is pending!"); + if (message == NULL) { + goto finally; + } + + if (_PyDict_SetItemId(context, &PyId_message, message) < 0 || + _PyDict_SetItemId(context, &PyId_task, (PyObject*)task) < 0) + { + goto finally; + } + + if (task->task_source_tb != NULL) { + if (_PyDict_SetItemId(context, &PyId_source_traceback, + task->task_source_tb) < 0) + { + goto finally; + } + } + + func = _PyObject_GetAttrId(task->task_loop, &PyId_call_exception_handler); + if (func != NULL) { + res = _PyObject_CallArg1(func, context); + if (res == NULL) { + PyErr_WriteUnraisable(func); + } + } + +finally: + Py_CLEAR(context); + Py_CLEAR(message); + Py_CLEAR(func); + Py_CLEAR(res); + + /* Restore the saved exception. */ + PyErr_Restore(error_type, error_value, error_traceback); + +done: + FutureObj_finalize((FutureObj*)task); +} + +static void TaskObj_dealloc(PyObject *); /* Needs Task_CheckExact */ + +static PyMethodDef TaskType_methods[] = { + _ASYNCIO_FUTURE_RESULT_METHODDEF + _ASYNCIO_FUTURE_EXCEPTION_METHODDEF + _ASYNCIO_FUTURE_SET_RESULT_METHODDEF + _ASYNCIO_FUTURE_SET_EXCEPTION_METHODDEF + _ASYNCIO_FUTURE_ADD_DONE_CALLBACK_METHODDEF + _ASYNCIO_FUTURE_REMOVE_DONE_CALLBACK_METHODDEF + _ASYNCIO_FUTURE_CANCELLED_METHODDEF + _ASYNCIO_FUTURE_DONE_METHODDEF + _ASYNCIO_TASK_CURRENT_TASK_METHODDEF + _ASYNCIO_TASK_ALL_TASKS_METHODDEF + _ASYNCIO_TASK_CANCEL_METHODDEF + _ASYNCIO_TASK_GET_STACK_METHODDEF + _ASYNCIO_TASK_PRINT_STACK_METHODDEF + _ASYNCIO_TASK__WAKEUP_METHODDEF + _ASYNCIO_TASK__STEP_METHODDEF + _ASYNCIO_TASK__REPR_INFO_METHODDEF + {NULL, NULL} /* Sentinel */ +}; + +static PyGetSetDef TaskType_getsetlist[] = { + FUTURE_COMMON_GETSETLIST + {"_log_destroy_pending", (getter)TaskObj_get_log_destroy_pending, + (setter)TaskObj_set_log_destroy_pending, NULL}, + {"_must_cancel", (getter)TaskObj_get_must_cancel, NULL, NULL}, + {"_coro", (getter)TaskObj_get_coro, NULL, NULL}, + {"_fut_waiter", (getter)TaskObj_get_fut_waiter, NULL, NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject TaskType = { + PyVarObject_HEAD_INIT(0, 0) + "_asyncio.Task", + sizeof(TaskObj), /* tp_basicsize */ + .tp_base = &FutureType, + .tp_dealloc = TaskObj_dealloc, + .tp_as_async = &FutureType_as_async, + .tp_repr = (reprfunc)FutureObj_repr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE + | Py_TPFLAGS_HAVE_FINALIZE, + .tp_doc = _asyncio_Task___init____doc__, + .tp_traverse = (traverseproc)TaskObj_traverse, + .tp_clear = (inquiry)TaskObj_clear, + .tp_weaklistoffset = offsetof(TaskObj, task_weakreflist), + .tp_iter = (getiterfunc)future_new_iter, + .tp_methods = TaskType_methods, + .tp_getset = TaskType_getsetlist, + .tp_dictoffset = offsetof(TaskObj, dict), + .tp_init = (initproc)_asyncio_Task___init__, + .tp_new = PyType_GenericNew, + .tp_finalize = (destructor)TaskObj_finalize, +}; + +#define Task_CheckExact(obj) (Py_TYPE(obj) == &TaskType) + +static void +TaskObj_dealloc(PyObject *self) +{ + TaskObj *task = (TaskObj *)self; + + if (Task_CheckExact(self)) { + /* When fut is subclass of Task, finalizer is called from + * subtype_dealloc. + */ + if (PyObject_CallFinalizerFromDealloc(self) < 0) { + // resurrected. + return; + } + } + + if (task->task_weakreflist != NULL) { + PyObject_ClearWeakRefs(self); + } + + (void)TaskObj_clear(task); + Py_TYPE(task)->tp_free(task); +} + +static inline PyObject * +task_call_wakeup(TaskObj *task, PyObject *fut) +{ + if (Task_CheckExact(task)) { + return task_wakeup(task, fut); + } + else { + /* `task` is a subclass of Task */ + return _PyObject_CallMethodId( + (PyObject*)task, &PyId__wakeup, "O", fut, NULL); + } +} + +static inline PyObject * +task_call_step(TaskObj *task, PyObject *arg) +{ + if (Task_CheckExact(task)) { + return task_step(task, arg); + } + else { + /* `task` is a subclass of Task */ + if (arg == NULL) { + arg = Py_None; + } + return _PyObject_CallMethodId( + (PyObject*)task, &PyId__step, "O", arg, NULL); + } +} + +static int +task_call_step_soon(TaskObj *task, PyObject *arg) +{ + PyObject *handle; + + PyObject *cb = TaskSendMethWrapper_new(task, arg); + if (cb == NULL) { + return -1; + } + + handle = _PyObject_CallMethodId( + task->task_loop, &PyId_call_soon, "O", cb, NULL); + Py_DECREF(cb); + if (handle == NULL) { + return -1; + } + + Py_DECREF(handle); + return 0; +} + +static PyObject * +task_set_error_soon(TaskObj *task, PyObject *et, const char *format, ...) +{ + PyObject* msg; + + va_list vargs; +#ifdef HAVE_STDARG_PROTOTYPES + va_start(vargs, format); +#else + va_start(vargs); +#endif + msg = PyUnicode_FromFormatV(format, vargs); + va_end(vargs); + + if (msg == NULL) { + return NULL; + } + + PyObject *e = PyObject_CallFunctionObjArgs(et, msg, NULL); + Py_DECREF(msg); + if (e == NULL) { + return NULL; + } + + if (task_call_step_soon(task, e) == -1) { + Py_DECREF(e); + return NULL; + } + + Py_DECREF(e); + Py_RETURN_NONE; +} + +static PyObject * +task_step_impl(TaskObj *task, PyObject *exc) +{ + int res; + int clear_exc = 0; + PyObject *result = NULL; + PyObject *coro = task->task_coro; + PyObject *o; + + if (task->task_state != STATE_PENDING) { + PyErr_Format(PyExc_AssertionError, + "_step(): already done: %R %R", + task, + exc ? exc : Py_None); + goto fail; + } + + if (task->task_must_cancel) { + assert(exc != Py_None); + + if (exc) { + /* Check if exc is a CancelledError */ + res = PyObject_IsInstance(exc, asyncio_CancelledError); + if (res == -1) { + /* An error occurred, abort */ + goto fail; + } + if (res == 0) { + /* exc is not CancelledError; reset it to NULL */ + exc = NULL; + } + } + + if (!exc) { + /* exc was not a CancelledError */ + exc = PyObject_CallFunctionObjArgs(asyncio_CancelledError, NULL); + if (!exc) { + goto fail; + } + clear_exc = 1; + } + + task->task_must_cancel = 0; + } + + Py_CLEAR(task->task_fut_waiter); + + if (exc == NULL) { + if (PyGen_CheckExact(coro) || PyCoro_CheckExact(coro)) { + result = _PyGen_Send((PyGenObject*)coro, Py_None); + } + else { + result = _PyObject_CallMethodIdObjArgs( + coro, &PyId_send, Py_None, NULL); + } + } + else { + result = _PyObject_CallMethodIdObjArgs( + coro, &PyId_throw, exc, NULL); + if (clear_exc) { + /* We created 'exc' during this call */ + Py_CLEAR(exc); + } + } + + if (result == NULL) { + PyObject *et, *ev, *tb; + + if (_PyGen_FetchStopIterationValue(&o) == 0) { + /* The error is StopIteration and that means that + the underlying coroutine has resolved */ + PyObject *res = future_set_result((FutureObj*)task, o); + Py_DECREF(o); + if (res == NULL) { + return NULL; + } + Py_DECREF(res); + Py_RETURN_NONE; + } + + if (PyErr_ExceptionMatches(asyncio_CancelledError)) { + /* CancelledError */ + PyErr_Clear(); + return future_cancel((FutureObj*)task); + } + + /* Some other exception; pop it and call Task.set_exception() */ + PyErr_Fetch(&et, &ev, &tb); + assert(et); + if (!ev || !PyObject_TypeCheck(ev, (PyTypeObject *) et)) { + PyErr_NormalizeException(&et, &ev, &tb); + } + o = future_set_exception((FutureObj*)task, ev); + if (!o) { + /* An exception in Task.set_exception() */ + Py_XDECREF(et); + Py_XDECREF(tb); + Py_XDECREF(ev); + goto fail; + } + assert(o == Py_None); + Py_CLEAR(o); + + if (!PyErr_GivenExceptionMatches(et, PyExc_Exception)) { + /* We've got a BaseException; re-raise it */ + PyErr_Restore(et, ev, tb); + goto fail; + } + + Py_XDECREF(et); + Py_XDECREF(tb); + Py_XDECREF(ev); + + Py_RETURN_NONE; + } + + if (result == (PyObject*)task) { + /* We have a task that wants to await on itself */ + goto self_await; + } + + /* Check if `result` is FutureObj or TaskObj (and not a subclass) */ + if (Future_CheckExact(result) || Task_CheckExact(result)) { + PyObject *wrapper; + PyObject *res; + FutureObj *fut = (FutureObj*)result; + + /* Check if `result` future is attached to a different loop */ + if (fut->fut_loop != task->task_loop) { + goto different_loop; + } + + if (fut->fut_blocking) { + fut->fut_blocking = 0; + + /* result.add_done_callback(task._wakeup) */ + wrapper = TaskWakeupMethWrapper_new(task); + if (wrapper == NULL) { + goto fail; + } + res = future_add_done_callback((FutureObj*)result, wrapper); + Py_DECREF(wrapper); + if (res == NULL) { + goto fail; + } + Py_DECREF(res); + + /* task._fut_waiter = result */ + task->task_fut_waiter = result; /* no incref is necessary */ + + if (task->task_must_cancel) { + PyObject *r; + r = future_cancel(fut); + if (r == NULL) { + return NULL; + } + if (r == Py_True) { + task->task_must_cancel = 0; + } + Py_DECREF(r); + } + + Py_RETURN_NONE; + } + else { + goto yield_insteadof_yf; + } + } + + /* Check if `result` is a Future-compatible object */ + o = PyObject_GetAttrString(result, "_asyncio_future_blocking"); + if (o == NULL) { + if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } + else { + goto fail; + } + } + else { + if (o == Py_None) { + Py_CLEAR(o); + } + else { + /* `result` is a Future-compatible object */ + PyObject *wrapper; + PyObject *res; + + int blocking = PyObject_IsTrue(o); + Py_CLEAR(o); + if (blocking < 0) { + goto fail; + } + + /* Check if `result` future is attached to a different loop */ + PyObject *oloop = PyObject_GetAttrString(result, "_loop"); + if (oloop == NULL) { + goto fail; + } + if (oloop != task->task_loop) { + Py_DECREF(oloop); + goto different_loop; + } + else { + Py_DECREF(oloop); + } + + if (blocking) { + /* result._asyncio_future_blocking = False */ + if (PyObject_SetAttrString( + result, "_asyncio_future_blocking", Py_False) == -1) { + goto fail; + } + + /* result.add_done_callback(task._wakeup) */ + wrapper = TaskWakeupMethWrapper_new(task); + if (wrapper == NULL) { + goto fail; + } + res = _PyObject_CallMethodId( + result, &PyId_add_done_callback, "O", wrapper, NULL); + Py_DECREF(wrapper); + if (res == NULL) { + goto fail; + } + Py_DECREF(res); + + /* task._fut_waiter = result */ + task->task_fut_waiter = result; /* no incref is necessary */ + + if (task->task_must_cancel) { + PyObject *r; + int is_true; + r = _PyObject_CallMethodId(result, &PyId_cancel, NULL); + if (r == NULL) { + return NULL; + } + is_true = PyObject_IsTrue(r); + Py_DECREF(r); + if (is_true < 0) { + return NULL; + } + else if (is_true) { + task->task_must_cancel = 0; + } + } + + Py_RETURN_NONE; + } + else { + goto yield_insteadof_yf; + } + } + } + + /* Check if `result` is None */ + if (result == Py_None) { + /* Bare yield relinquishes control for one event loop iteration. */ + if (task_call_step_soon(task, NULL)) { + goto fail; + } + return result; + } + + /* Check if `result` is a generator */ + o = PyObject_CallFunctionObjArgs(inspect_isgenerator, result, NULL); + if (o == NULL) { + /* An exception in inspect.isgenerator */ + goto fail; + } + res = PyObject_IsTrue(o); + Py_CLEAR(o); + if (res == -1) { + /* An exception while checking if 'val' is True */ + goto fail; + } + if (res == 1) { + /* `result` is a generator */ + PyObject *ret; + ret = task_set_error_soon( + task, PyExc_RuntimeError, + "yield was used instead of yield from for " + "generator in task %R with %S", task, result); + Py_DECREF(result); + return ret; + } + + /* The `result` is none of the above */ + Py_DECREF(result); + return task_set_error_soon( + task, PyExc_RuntimeError, "Task got bad yield: %R", result); + +self_await: + o = task_set_error_soon( + task, PyExc_RuntimeError, + "Task cannot await on itself: %R", task); + Py_DECREF(result); + return o; + +yield_insteadof_yf: + o = task_set_error_soon( + task, PyExc_RuntimeError, + "yield was used instead of yield from " + "in task %R with %R", + task, result); + Py_DECREF(result); + return o; + +different_loop: + o = task_set_error_soon( + task, PyExc_RuntimeError, + "Task %R got Future %R attached to a different loop", + task, result); + Py_DECREF(result); + return o; + +fail: + Py_XDECREF(result); + return NULL; +} + +static PyObject * +task_step(TaskObj *task, PyObject *exc) +{ + PyObject *res; + PyObject *ot; + + if (PyDict_SetItem((PyObject *)current_tasks, + task->task_loop, (PyObject*)task) == -1) + { + return NULL; + } + + res = task_step_impl(task, exc); + + if (res == NULL) { + PyObject *et, *ev, *tb; + PyErr_Fetch(&et, &ev, &tb); + ot = _PyDict_Pop(current_tasks, task->task_loop, NULL); + if (ot == NULL) { + Py_XDECREF(et); + Py_XDECREF(tb); + Py_XDECREF(ev); + return NULL; + } + Py_DECREF(ot); + PyErr_Restore(et, ev, tb); + return NULL; + } + else { + ot = _PyDict_Pop(current_tasks, task->task_loop, NULL); + if (ot == NULL) { + Py_DECREF(res); + return NULL; + } + else { + Py_DECREF(ot); + return res; + } + } +} + +static PyObject * +task_wakeup(TaskObj *task, PyObject *o) +{ + assert(o); + + if (Future_CheckExact(o) || Task_CheckExact(o)) { + PyObject *fut_result = NULL; + int res = future_get_result((FutureObj*)o, &fut_result); + PyObject *result; + + switch(res) { + case -1: + assert(fut_result == NULL); + return NULL; + case 0: + Py_DECREF(fut_result); + return task_call_step(task, NULL); + default: + assert(res == 1); + result = task_call_step(task, fut_result); + Py_DECREF(fut_result); + return result; + } + } + + PyObject *fut_result = PyObject_CallMethod(o, "result", NULL); + if (fut_result == NULL) { + PyObject *et, *ev, *tb; + PyObject *res; + + PyErr_Fetch(&et, &ev, &tb); + if (!ev || !PyObject_TypeCheck(ev, (PyTypeObject *) et)) { + PyErr_NormalizeException(&et, &ev, &tb); + } + + res = task_call_step(task, ev); + + Py_XDECREF(et); + Py_XDECREF(tb); + Py_XDECREF(ev); + + return res; + } + else { + Py_DECREF(fut_result); + return task_call_step(task, NULL); + } +} + + +/*********************** Module **************************/ + + +static void +module_free(void *m) +{ + Py_CLEAR(current_tasks); + Py_CLEAR(all_tasks); + Py_CLEAR(traceback_extract_stack); + Py_CLEAR(asyncio_get_event_loop); + Py_CLEAR(asyncio_future_repr_info_func); + Py_CLEAR(asyncio_task_repr_info_func); + Py_CLEAR(asyncio_task_get_stack_func); + Py_CLEAR(asyncio_task_print_stack_func); + Py_CLEAR(asyncio_InvalidStateError); + Py_CLEAR(asyncio_CancelledError); + Py_CLEAR(inspect_isgenerator); +} + +static int +module_init(void) +{ + PyObject *module = NULL; + PyObject *cls; + +#define WITH_MOD(NAME) \ + Py_CLEAR(module); \ + module = PyImport_ImportModule(NAME); \ + if (module == NULL) { \ + return -1; \ + } + +#define GET_MOD_ATTR(VAR, NAME) \ + VAR = PyObject_GetAttrString(module, NAME); \ + if (VAR == NULL) { \ + goto fail; \ + } + + WITH_MOD("asyncio.events") + GET_MOD_ATTR(asyncio_get_event_loop, "get_event_loop") + + WITH_MOD("asyncio.base_futures") + GET_MOD_ATTR(asyncio_future_repr_info_func, "_future_repr_info") + GET_MOD_ATTR(asyncio_InvalidStateError, "InvalidStateError") + GET_MOD_ATTR(asyncio_CancelledError, "CancelledError") + + WITH_MOD("asyncio.base_tasks") + GET_MOD_ATTR(asyncio_task_repr_info_func, "_task_repr_info") + GET_MOD_ATTR(asyncio_task_get_stack_func, "_task_get_stack") + GET_MOD_ATTR(asyncio_task_print_stack_func, "_task_print_stack") + + WITH_MOD("inspect") + GET_MOD_ATTR(inspect_isgenerator, "isgenerator") + + WITH_MOD("traceback") + GET_MOD_ATTR(traceback_extract_stack, "extract_stack") + + WITH_MOD("weakref") + GET_MOD_ATTR(cls, "WeakSet") + all_tasks = PyObject_CallObject(cls, NULL); + Py_CLEAR(cls); + if (all_tasks == NULL) { + goto fail; + } + + current_tasks = (PyDictObject *)PyDict_New(); + if (current_tasks == NULL) { + goto fail; + } + + Py_CLEAR(module); + return 0; + +fail: + Py_CLEAR(module); + module_free(NULL); + return -1; + +#undef WITH_MOD +#undef GET_MOD_ATTR +} + +PyDoc_STRVAR(module_doc, "Accelerator module for asyncio"); + +static struct PyModuleDef _asynciomodule = { + PyModuleDef_HEAD_INIT, /* m_base */ + "_asyncio", /* m_name */ + module_doc, /* m_doc */ + -1, /* m_size */ + NULL, /* m_methods */ + NULL, /* m_slots */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + (freefunc)module_free /* m_free */ +}; + + +PyMODINIT_FUNC +PyInit__asyncio(void) +{ + if (module_init() < 0) { + return NULL; + } + if (PyType_Ready(&FutureType) < 0) { + return NULL; + } + if (PyType_Ready(&FutureIterType) < 0) { + return NULL; + } + if (PyType_Ready(&TaskSendMethWrapper_Type) < 0) { + return NULL; + } + if(PyType_Ready(&TaskWakeupMethWrapper_Type) < 0) { + return NULL; + } + if (PyType_Ready(&TaskType) < 0) { + return NULL; + } + + PyObject *m = PyModule_Create(&_asynciomodule); + if (m == NULL) { + return NULL; + } + + Py_INCREF(&FutureType); + if (PyModule_AddObject(m, "Future", (PyObject *)&FutureType) < 0) { + Py_DECREF(&FutureType); + return NULL; + } + + Py_INCREF(&TaskType); + if (PyModule_AddObject(m, "Task", (PyObject *)&TaskType) < 0) { + Py_DECREF(&TaskType); return NULL; } diff --git a/Modules/clinic/_asynciomodule.c.h b/Modules/clinic/_asynciomodule.c.h new file mode 100644 index 0000000000..052d252331 --- /dev/null +++ b/Modules/clinic/_asynciomodule.c.h @@ -0,0 +1,520 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_asyncio_Future___init____doc__, +"Future(*, loop=None)\n" +"--\n" +"\n" +"This class is *almost* compatible with concurrent.futures.Future.\n" +"\n" +" Differences:\n" +"\n" +" - result() and exception() do not take a timeout argument and\n" +" raise an exception when the future isn\'t done yet.\n" +"\n" +" - Callbacks registered with add_done_callback() are always called\n" +" via the event loop\'s call_soon_threadsafe().\n" +"\n" +" - This class is not compatible with the wait() and as_completed()\n" +" methods in the concurrent.futures package."); + +static int +_asyncio_Future___init___impl(FutureObj *self, PyObject *loop); + +static int +_asyncio_Future___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static const char * const _keywords[] = {"loop", NULL}; + static _PyArg_Parser _parser = {"|$O:Future", _keywords, 0}; + PyObject *loop = NULL; + + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + &loop)) { + goto exit; + } + return_value = _asyncio_Future___init___impl((FutureObj *)self, loop); + +exit: + return return_value; +} + +PyDoc_STRVAR(_asyncio_Future_result__doc__, +"result($self, /)\n" +"--\n" +"\n" +"Return the result this future represents.\n" +"\n" +"If the future has been cancelled, raises CancelledError. If the\n" +"future\'s result isn\'t yet available, raises InvalidStateError. If\n" +"the future is done and has an exception set, this exception is raised."); + +#define _ASYNCIO_FUTURE_RESULT_METHODDEF \ + {"result", (PyCFunction)_asyncio_Future_result, METH_NOARGS, _asyncio_Future_result__doc__}, + +static PyObject * +_asyncio_Future_result_impl(FutureObj *self); + +static PyObject * +_asyncio_Future_result(FutureObj *self, PyObject *Py_UNUSED(ignored)) +{ + return _asyncio_Future_result_impl(self); +} + +PyDoc_STRVAR(_asyncio_Future_exception__doc__, +"exception($self, /)\n" +"--\n" +"\n" +"Return the exception that was set on this future.\n" +"\n" +"The exception (or None if no exception was set) is returned only if\n" +"the future is done. If the future has been cancelled, raises\n" +"CancelledError. If the future isn\'t done yet, raises\n" +"InvalidStateError."); + +#define _ASYNCIO_FUTURE_EXCEPTION_METHODDEF \ + {"exception", (PyCFunction)_asyncio_Future_exception, METH_NOARGS, _asyncio_Future_exception__doc__}, + +static PyObject * +_asyncio_Future_exception_impl(FutureObj *self); + +static PyObject * +_asyncio_Future_exception(FutureObj *self, PyObject *Py_UNUSED(ignored)) +{ + return _asyncio_Future_exception_impl(self); +} + +PyDoc_STRVAR(_asyncio_Future_set_result__doc__, +"set_result($self, res, /)\n" +"--\n" +"\n" +"Mark the future done and set its result.\n" +"\n" +"If the future is already done when this method is called, raises\n" +"InvalidStateError."); + +#define _ASYNCIO_FUTURE_SET_RESULT_METHODDEF \ + {"set_result", (PyCFunction)_asyncio_Future_set_result, METH_O, _asyncio_Future_set_result__doc__}, + +PyDoc_STRVAR(_asyncio_Future_set_exception__doc__, +"set_exception($self, exception, /)\n" +"--\n" +"\n" +"Mark the future done and set an exception.\n" +"\n" +"If the future is already done when this method is called, raises\n" +"InvalidStateError."); + +#define _ASYNCIO_FUTURE_SET_EXCEPTION_METHODDEF \ + {"set_exception", (PyCFunction)_asyncio_Future_set_exception, METH_O, _asyncio_Future_set_exception__doc__}, + +PyDoc_STRVAR(_asyncio_Future_add_done_callback__doc__, +"add_done_callback($self, fn, /)\n" +"--\n" +"\n" +"Add a callback to be run when the future becomes done.\n" +"\n" +"The callback is called with a single argument - the future object. If\n" +"the future is already done when this is called, the callback is\n" +"scheduled with call_soon."); + +#define _ASYNCIO_FUTURE_ADD_DONE_CALLBACK_METHODDEF \ + {"add_done_callback", (PyCFunction)_asyncio_Future_add_done_callback, METH_O, _asyncio_Future_add_done_callback__doc__}, + +PyDoc_STRVAR(_asyncio_Future_remove_done_callback__doc__, +"remove_done_callback($self, fn, /)\n" +"--\n" +"\n" +"Remove all instances of a callback from the \"call when done\" list.\n" +"\n" +"Returns the number of callbacks removed."); + +#define _ASYNCIO_FUTURE_REMOVE_DONE_CALLBACK_METHODDEF \ + {"remove_done_callback", (PyCFunction)_asyncio_Future_remove_done_callback, METH_O, _asyncio_Future_remove_done_callback__doc__}, + +PyDoc_STRVAR(_asyncio_Future_cancel__doc__, +"cancel($self, /)\n" +"--\n" +"\n" +"Cancel the future and schedule callbacks.\n" +"\n" +"If the future is already done or cancelled, return False. Otherwise,\n" +"change the future\'s state to cancelled, schedule the callbacks and\n" +"return True."); + +#define _ASYNCIO_FUTURE_CANCEL_METHODDEF \ + {"cancel", (PyCFunction)_asyncio_Future_cancel, METH_NOARGS, _asyncio_Future_cancel__doc__}, + +static PyObject * +_asyncio_Future_cancel_impl(FutureObj *self); + +static PyObject * +_asyncio_Future_cancel(FutureObj *self, PyObject *Py_UNUSED(ignored)) +{ + return _asyncio_Future_cancel_impl(self); +} + +PyDoc_STRVAR(_asyncio_Future_cancelled__doc__, +"cancelled($self, /)\n" +"--\n" +"\n" +"Return True if the future was cancelled."); + +#define _ASYNCIO_FUTURE_CANCELLED_METHODDEF \ + {"cancelled", (PyCFunction)_asyncio_Future_cancelled, METH_NOARGS, _asyncio_Future_cancelled__doc__}, + +static PyObject * +_asyncio_Future_cancelled_impl(FutureObj *self); + +static PyObject * +_asyncio_Future_cancelled(FutureObj *self, PyObject *Py_UNUSED(ignored)) +{ + return _asyncio_Future_cancelled_impl(self); +} + +PyDoc_STRVAR(_asyncio_Future_done__doc__, +"done($self, /)\n" +"--\n" +"\n" +"Return True if the future is done.\n" +"\n" +"Done means either that a result / exception are available, or that the\n" +"future was cancelled."); + +#define _ASYNCIO_FUTURE_DONE_METHODDEF \ + {"done", (PyCFunction)_asyncio_Future_done, METH_NOARGS, _asyncio_Future_done__doc__}, + +static PyObject * +_asyncio_Future_done_impl(FutureObj *self); + +static PyObject * +_asyncio_Future_done(FutureObj *self, PyObject *Py_UNUSED(ignored)) +{ + return _asyncio_Future_done_impl(self); +} + +PyDoc_STRVAR(_asyncio_Future__repr_info__doc__, +"_repr_info($self, /)\n" +"--\n" +"\n"); + +#define _ASYNCIO_FUTURE__REPR_INFO_METHODDEF \ + {"_repr_info", (PyCFunction)_asyncio_Future__repr_info, METH_NOARGS, _asyncio_Future__repr_info__doc__}, + +static PyObject * +_asyncio_Future__repr_info_impl(FutureObj *self); + +static PyObject * +_asyncio_Future__repr_info(FutureObj *self, PyObject *Py_UNUSED(ignored)) +{ + return _asyncio_Future__repr_info_impl(self); +} + +PyDoc_STRVAR(_asyncio_Future__schedule_callbacks__doc__, +"_schedule_callbacks($self, /)\n" +"--\n" +"\n"); + +#define _ASYNCIO_FUTURE__SCHEDULE_CALLBACKS_METHODDEF \ + {"_schedule_callbacks", (PyCFunction)_asyncio_Future__schedule_callbacks, METH_NOARGS, _asyncio_Future__schedule_callbacks__doc__}, + +static PyObject * +_asyncio_Future__schedule_callbacks_impl(FutureObj *self); + +static PyObject * +_asyncio_Future__schedule_callbacks(FutureObj *self, PyObject *Py_UNUSED(ignored)) +{ + return _asyncio_Future__schedule_callbacks_impl(self); +} + +PyDoc_STRVAR(_asyncio_Task___init____doc__, +"Task(coro, *, loop=None)\n" +"--\n" +"\n" +"A coroutine wrapped in a Future."); + +static int +_asyncio_Task___init___impl(TaskObj *self, PyObject *coro, PyObject *loop); + +static int +_asyncio_Task___init__(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + static const char * const _keywords[] = {"coro", "loop", NULL}; + static _PyArg_Parser _parser = {"O|$O:Task", _keywords, 0}; + PyObject *coro; + PyObject *loop = NULL; + + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + &coro, &loop)) { + goto exit; + } + return_value = _asyncio_Task___init___impl((TaskObj *)self, coro, loop); + +exit: + return return_value; +} + +PyDoc_STRVAR(_asyncio_Task_current_task__doc__, +"current_task($type, /, loop=None)\n" +"--\n" +"\n" +"Return the currently running task in an event loop or None.\n" +"\n" +"By default the current task for the current event loop is returned.\n" +"\n" +"None is returned when called not in the context of a Task."); + +#define _ASYNCIO_TASK_CURRENT_TASK_METHODDEF \ + {"current_task", (PyCFunction)_asyncio_Task_current_task, METH_FASTCALL|METH_CLASS, _asyncio_Task_current_task__doc__}, + +static PyObject * +_asyncio_Task_current_task_impl(PyTypeObject *type, PyObject *loop); + +static PyObject * +_asyncio_Task_current_task(PyTypeObject *type, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"loop", NULL}; + static _PyArg_Parser _parser = {"|O:current_task", _keywords, 0}; + PyObject *loop = NULL; + + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, + &loop)) { + goto exit; + } + return_value = _asyncio_Task_current_task_impl(type, loop); + +exit: + return return_value; +} + +PyDoc_STRVAR(_asyncio_Task_all_tasks__doc__, +"all_tasks($type, /, loop=None)\n" +"--\n" +"\n" +"Return a set of all tasks for an event loop.\n" +"\n" +"By default all tasks for the current event loop are returned."); + +#define _ASYNCIO_TASK_ALL_TASKS_METHODDEF \ + {"all_tasks", (PyCFunction)_asyncio_Task_all_tasks, METH_FASTCALL|METH_CLASS, _asyncio_Task_all_tasks__doc__}, + +static PyObject * +_asyncio_Task_all_tasks_impl(PyTypeObject *type, PyObject *loop); + +static PyObject * +_asyncio_Task_all_tasks(PyTypeObject *type, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"loop", NULL}; + static _PyArg_Parser _parser = {"|O:all_tasks", _keywords, 0}; + PyObject *loop = NULL; + + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, + &loop)) { + goto exit; + } + return_value = _asyncio_Task_all_tasks_impl(type, loop); + +exit: + return return_value; +} + +PyDoc_STRVAR(_asyncio_Task__repr_info__doc__, +"_repr_info($self, /)\n" +"--\n" +"\n"); + +#define _ASYNCIO_TASK__REPR_INFO_METHODDEF \ + {"_repr_info", (PyCFunction)_asyncio_Task__repr_info, METH_NOARGS, _asyncio_Task__repr_info__doc__}, + +static PyObject * +_asyncio_Task__repr_info_impl(TaskObj *self); + +static PyObject * +_asyncio_Task__repr_info(TaskObj *self, PyObject *Py_UNUSED(ignored)) +{ + return _asyncio_Task__repr_info_impl(self); +} + +PyDoc_STRVAR(_asyncio_Task_cancel__doc__, +"cancel($self, /)\n" +"--\n" +"\n" +"Request that this task cancel itself.\n" +"\n" +"This arranges for a CancelledError to be thrown into the\n" +"wrapped coroutine on the next cycle through the event loop.\n" +"The coroutine then has a chance to clean up or even deny\n" +"the request using try/except/finally.\n" +"\n" +"Unlike Future.cancel, this does not guarantee that the\n" +"task will be cancelled: the exception might be caught and\n" +"acted upon, delaying cancellation of the task or preventing\n" +"cancellation completely. The task may also return a value or\n" +"raise a different exception.\n" +"\n" +"Immediately after this method is called, Task.cancelled() will\n" +"not return True (unless the task was already cancelled). A\n" +"task will be marked as cancelled when the wrapped coroutine\n" +"terminates with a CancelledError exception (even if cancel()\n" +"was not called)."); + +#define _ASYNCIO_TASK_CANCEL_METHODDEF \ + {"cancel", (PyCFunction)_asyncio_Task_cancel, METH_NOARGS, _asyncio_Task_cancel__doc__}, + +static PyObject * +_asyncio_Task_cancel_impl(TaskObj *self); + +static PyObject * +_asyncio_Task_cancel(TaskObj *self, PyObject *Py_UNUSED(ignored)) +{ + return _asyncio_Task_cancel_impl(self); +} + +PyDoc_STRVAR(_asyncio_Task_get_stack__doc__, +"get_stack($self, /, *, limit=None)\n" +"--\n" +"\n" +"Return the list of stack frames for this task\'s coroutine.\n" +"\n" +"If the coroutine is not done, this returns the stack where it is\n" +"suspended. If the coroutine has completed successfully or was\n" +"cancelled, this returns an empty list. If the coroutine was\n" +"terminated by an exception, this returns the list of traceback\n" +"frames.\n" +"\n" +"The frames are always ordered from oldest to newest.\n" +"\n" +"The optional limit gives the maximum number of frames to\n" +"return; by default all available frames are returned. Its\n" +"meaning differs depending on whether a stack or a traceback is\n" +"returned: the newest frames of a stack are returned, but the\n" +"oldest frames of a traceback are returned. (This matches the\n" +"behavior of the traceback module.)\n" +"\n" +"For reasons beyond our control, only one stack frame is\n" +"returned for a suspended coroutine."); + +#define _ASYNCIO_TASK_GET_STACK_METHODDEF \ + {"get_stack", (PyCFunction)_asyncio_Task_get_stack, METH_FASTCALL, _asyncio_Task_get_stack__doc__}, + +static PyObject * +_asyncio_Task_get_stack_impl(TaskObj *self, PyObject *limit); + +static PyObject * +_asyncio_Task_get_stack(TaskObj *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"limit", NULL}; + static _PyArg_Parser _parser = {"|$O:get_stack", _keywords, 0}; + PyObject *limit = Py_None; + + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, + &limit)) { + goto exit; + } + return_value = _asyncio_Task_get_stack_impl(self, limit); + +exit: + return return_value; +} + +PyDoc_STRVAR(_asyncio_Task_print_stack__doc__, +"print_stack($self, /, *, limit=None, file=None)\n" +"--\n" +"\n" +"Print the stack or traceback for this task\'s coroutine.\n" +"\n" +"This produces output similar to that of the traceback module,\n" +"for the frames retrieved by get_stack(). The limit argument\n" +"is passed to get_stack(). The file argument is an I/O stream\n" +"to which the output is written; by default output is written\n" +"to sys.stderr."); + +#define _ASYNCIO_TASK_PRINT_STACK_METHODDEF \ + {"print_stack", (PyCFunction)_asyncio_Task_print_stack, METH_FASTCALL, _asyncio_Task_print_stack__doc__}, + +static PyObject * +_asyncio_Task_print_stack_impl(TaskObj *self, PyObject *limit, + PyObject *file); + +static PyObject * +_asyncio_Task_print_stack(TaskObj *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"limit", "file", NULL}; + static _PyArg_Parser _parser = {"|$OO:print_stack", _keywords, 0}; + PyObject *limit = Py_None; + PyObject *file = Py_None; + + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, + &limit, &file)) { + goto exit; + } + return_value = _asyncio_Task_print_stack_impl(self, limit, file); + +exit: + return return_value; +} + +PyDoc_STRVAR(_asyncio_Task__step__doc__, +"_step($self, /, exc=None)\n" +"--\n" +"\n"); + +#define _ASYNCIO_TASK__STEP_METHODDEF \ + {"_step", (PyCFunction)_asyncio_Task__step, METH_FASTCALL, _asyncio_Task__step__doc__}, + +static PyObject * +_asyncio_Task__step_impl(TaskObj *self, PyObject *exc); + +static PyObject * +_asyncio_Task__step(TaskObj *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"exc", NULL}; + static _PyArg_Parser _parser = {"|O:_step", _keywords, 0}; + PyObject *exc = NULL; + + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, + &exc)) { + goto exit; + } + return_value = _asyncio_Task__step_impl(self, exc); + +exit: + return return_value; +} + +PyDoc_STRVAR(_asyncio_Task__wakeup__doc__, +"_wakeup($self, /, fut)\n" +"--\n" +"\n"); + +#define _ASYNCIO_TASK__WAKEUP_METHODDEF \ + {"_wakeup", (PyCFunction)_asyncio_Task__wakeup, METH_FASTCALL, _asyncio_Task__wakeup__doc__}, + +static PyObject * +_asyncio_Task__wakeup_impl(TaskObj *self, PyObject *fut); + +static PyObject * +_asyncio_Task__wakeup(TaskObj *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"fut", NULL}; + static _PyArg_Parser _parser = {"O:_wakeup", _keywords, 0}; + PyObject *fut; + + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, + &fut)) { + goto exit; + } + return_value = _asyncio_Task__wakeup_impl(self, fut); + +exit: + return return_value; +} +/*[clinic end generated code: output=8f036321bb083066 input=a9049054013a1b77]*/ -- cgit v1.2.1 From 8d0b58b2b34e15f5060c17e51907bae2ee0f871e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 28 Oct 2016 19:13:52 +0200 Subject: Issue #28544: Fix _asynciomodule.c on Windows PyType_Ready() sets the reference to &PyType_Type. &PyType_Type cannot be resolved at compilation time (not on Windows?). --- Modules/_asynciomodule.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index d9419df3b5..f60692382d 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -893,7 +893,7 @@ static PyGetSetDef FutureType_getsetlist[] = { static void FutureObj_dealloc(PyObject *self); static PyTypeObject FutureType = { - PyVarObject_HEAD_INIT(0, 0) + PyVarObject_HEAD_INIT(NULL, 0) "_asyncio.Future", sizeof(FutureObj), /* tp_basicsize */ .tp_dealloc = FutureObj_dealloc, @@ -1092,7 +1092,7 @@ static PyMethodDef FutureIter_methods[] = { }; static PyTypeObject FutureIterType = { - PyVarObject_HEAD_INIT(0, 0) + PyVarObject_HEAD_INIT(NULL, 0) "_asyncio.FutureIter", .tp_basicsize = sizeof(futureiterobject), .tp_itemsize = 0, @@ -1189,7 +1189,7 @@ static PyGetSetDef TaskSendMethWrapper_getsetlist[] = { }; PyTypeObject TaskSendMethWrapper_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) + PyVarObject_HEAD_INIT(NULL, 0) "TaskSendMethWrapper", .tp_basicsize = sizeof(TaskSendMethWrapper), .tp_itemsize = 0, @@ -1260,7 +1260,7 @@ TaskWakeupMethWrapper_dealloc(TaskWakeupMethWrapper *o) } PyTypeObject TaskWakeupMethWrapper_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) + PyVarObject_HEAD_INIT(NULL, 0) "TaskWakeupMethWrapper", .tp_basicsize = sizeof(TaskWakeupMethWrapper), .tp_itemsize = 0, @@ -1778,7 +1778,7 @@ static PyGetSetDef TaskType_getsetlist[] = { }; static PyTypeObject TaskType = { - PyVarObject_HEAD_INIT(0, 0) + PyVarObject_HEAD_INIT(NULL, 0) "_asyncio.Task", sizeof(TaskObj), /* tp_basicsize */ .tp_base = &FutureType, -- cgit v1.2.1 From 00df4f07d475db9ded8aa922e3b9ae3d2cf7740d Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Fri, 28 Oct 2016 19:01:21 -0400 Subject: Issue #28544: Pass `PyObject*` to _PyDict_Pop, not `PyDictObject*` --- Modules/_asynciomodule.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index f60692382d..6278b25693 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -21,7 +21,7 @@ _Py_IDENTIFIER(_wakeup); /* State of the _asyncio module */ static PyObject *all_tasks; -static PyDictObject *current_tasks; +static PyObject *current_tasks; static PyObject *traceback_extract_stack; static PyObject *asyncio_get_event_loop; static PyObject *asyncio_future_repr_info_func; @@ -1429,11 +1429,11 @@ _asyncio_Task_current_task_impl(PyTypeObject *type, PyObject *loop) return NULL; } - res = PyDict_GetItem((PyObject*)current_tasks, loop); + res = PyDict_GetItem(current_tasks, loop); Py_DECREF(loop); } else { - res = PyDict_GetItem((PyObject*)current_tasks, loop); + res = PyDict_GetItem(current_tasks, loop); } if (res == NULL) { @@ -2235,7 +2235,7 @@ task_step(TaskObj *task, PyObject *exc) PyObject *res; PyObject *ot; - if (PyDict_SetItem((PyObject *)current_tasks, + if (PyDict_SetItem(current_tasks, task->task_loop, (PyObject*)task) == -1) { return NULL; @@ -2385,7 +2385,7 @@ module_init(void) goto fail; } - current_tasks = (PyDictObject *)PyDict_New(); + current_tasks = PyDict_New(); if (current_tasks == NULL) { goto fail; } -- cgit v1.2.1 From 4c15e6d1f229f49509c40e9a90e35fc4c0661768 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 29 Oct 2016 09:05:39 +0200 Subject: Issue #28544: Fix inefficient call to _PyObject_CallMethodId() "()" format string creates an empty list of argument but requires extra work to parse the format string. --- Modules/_asynciomodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 6278b25693..18dd37b5a8 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -152,7 +152,7 @@ future_init(FutureObj *fut, PyObject *loop) Py_CLEAR(fut->fut_loop); fut->fut_loop = loop; - res = _PyObject_CallMethodId(fut->fut_loop, &PyId_get_debug, "()", NULL); + res = _PyObject_CallMethodId(fut->fut_loop, &PyId_get_debug, NULL); if (res == NULL) { return -1; } -- cgit v1.2.1 From 93efefd659c461bf8e8468136f9cd9c4476f522b Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 6 Nov 2016 13:18:24 +0200 Subject: Issue #28123: _PyDict_GetItem_KnownHash() now can raise an exception as PyDict_GetItemWithError(). Patch by Xiang Zhang. --- Modules/_collectionsmodule.c | 2 ++ Modules/_testcapimodule.c | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) (limited to 'Modules') diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 9ed6f14bec..6608798247 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -2300,6 +2300,8 @@ _count_elements(PyObject *self, PyObject *args) oldval = _PyDict_GetItem_KnownHash(mapping, key, hash); if (oldval == NULL) { + if (PyErr_Occurred()) + goto done; if (_PyDict_SetItem_KnownHash(mapping, key, one, hash) < 0) goto done; } else { diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 74422a2f8d..ecbec972ca 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -238,6 +238,26 @@ test_dict_iteration(PyObject* self) return Py_None; } +static PyObject* +dict_getitem_knownhash(PyObject *self, PyObject *args) +{ + PyObject *mp, *key, *result; + Py_ssize_t hash; + + if (!PyArg_ParseTuple(args, "OOn:dict_getitem_knownhash", + &mp, &key, &hash)) { + return NULL; + } + + result = _PyDict_GetItem_KnownHash(mp, key, (Py_hash_t)hash); + if (result == NULL && !PyErr_Occurred()) { + _PyErr_SetKeyError(key); + return NULL; + } + + Py_XINCREF(result); + return result; +} /* Issue #4701: Check that PyObject_Hash implicitly calls * PyType_Ready if it hasn't already been called @@ -4003,6 +4023,7 @@ static PyMethodDef TestMethods[] = { {"test_datetime_capi", test_datetime_capi, METH_NOARGS}, {"test_list_api", (PyCFunction)test_list_api, METH_NOARGS}, {"test_dict_iteration", (PyCFunction)test_dict_iteration,METH_NOARGS}, + {"dict_getitem_knownhash", dict_getitem_knownhash, METH_VARARGS}, {"test_lazy_hash_inheritance", (PyCFunction)test_lazy_hash_inheritance,METH_NOARGS}, {"test_long_api", (PyCFunction)test_long_api, METH_NOARGS}, {"test_xincref_doesnt_leak",(PyCFunction)test_xincref_doesnt_leak, METH_NOARGS}, -- cgit v1.2.1 From 3fe2dfe742982363e36829366c75279ce47a4f17 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Tue, 8 Nov 2016 19:04:57 -0500 Subject: Issue #26081: Fix refleak in _asyncio.Future.__iter__().throw. --- Modules/_asynciomodule.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 7df6fa5008..df81b105ec 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -1044,14 +1044,16 @@ FutureIter_throw(futureiterobject *self, PyObject *args) else { if (PyExceptionClass_Check(type)) { val = PyObject_CallObject(type, NULL); + PyErr_SetObject(type, val); + Py_DECREF(val); } else { val = type; assert (PyExceptionInstance_Check(val)); type = (PyObject*)Py_TYPE(val); assert (PyExceptionClass_Check(type)); + PyErr_SetObject(type, val); } - PyErr_SetObject(type, val); } return FutureIter_iternext(self); } -- cgit v1.2.1 From e55f77ab4d77946c2cb298fe1a80e4e86db9a165 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 14 Nov 2016 00:15:44 -0800 Subject: correctly emulate error semantics of gen.throw in FutureIter_throw --- Modules/_asynciomodule.c | 53 +++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 19 deletions(-) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index df81b105ec..b65fc02ebd 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -1031,31 +1031,46 @@ FutureIter_throw(futureiterobject *self, PyObject *args) } if (tb == Py_None) { tb = NULL; + } else if (tb != NULL && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, "throw() third argument must be a traceback"); + return NULL; } - Py_CLEAR(self->future); + Py_INCREF(type); + Py_XINCREF(val); + Py_XINCREF(tb); - if (tb != NULL) { - PyErr_Restore(type, val, tb); - } - else if (val != NULL) { - PyErr_SetObject(type, val); - } - else { - if (PyExceptionClass_Check(type)) { - val = PyObject_CallObject(type, NULL); - PyErr_SetObject(type, val); - Py_DECREF(val); - } - else { - val = type; - assert (PyExceptionInstance_Check(val)); - type = (PyObject*)Py_TYPE(val); - assert (PyExceptionClass_Check(type)); - PyErr_SetObject(type, val); + if (PyExceptionClass_Check(type)) { + PyErr_NormalizeException(&type, &val, &tb); + } else if (PyExceptionInstance_Check(type)) { + if (val) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto fail; } + val = type; + type = PyExceptionInstance_Class(type); + Py_INCREF(type); + if (tb == NULL) + tb = PyException_GetTraceback(val); + } else { + PyErr_SetString(PyExc_TypeError, + "exceptions must be classes deriving BaseException or " + "instances of such a class"); + goto fail; } + + Py_CLEAR(self->future); + + PyErr_Restore(type, val, tb); + return FutureIter_iternext(self); + + fail: + Py_DECREF(type); + Py_XDECREF(val); + Py_XDECREF(tb); + return NULL; } static PyObject * -- cgit v1.2.1 From f67383d9e5dac2d1f1cb8d1d3cbbf28b8faca9fa Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 19 Nov 2016 18:53:19 -0800 Subject: Issue #28732: Raise ValueError when os.spawn*() is passed an empty tuple of arguments --- Modules/posixmodule.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index a89da7091b..0482f2bbd0 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -5042,6 +5042,11 @@ os_spawnv_impl(PyObject *module, int mode, path_t *path, PyObject *argv) "spawnv() arg 2 must be a tuple or list"); return NULL; } + if (argc == 0) { + PyErr_SetString(PyExc_ValueError, + "spawnv() arg 2 cannot be empty"); + return NULL; + } argvlist = PyMem_NEW(EXECV_CHAR *, argc+1); if (argvlist == NULL) { @@ -5127,6 +5132,11 @@ os_spawnve_impl(PyObject *module, int mode, path_t *path, PyObject *argv, "spawnve() arg 2 must be a tuple or list"); goto fail_0; } + if (argc == 0) { + PyErr_SetString(PyExc_ValueError, + "spawnve() arg 2 cannot be empty"); + goto fail_0; + } if (!PyMapping_Check(env)) { PyErr_SetString(PyExc_TypeError, "spawnve() arg 3 must be a mapping object"); -- cgit v1.2.1 From 57c0f2e61c8a5893c37e576a3a03ba5e57c1132c Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 20 Nov 2016 09:13:07 +0200 Subject: Replaced outdated macros _PyUnicode_AsString and _PyUnicode_AsStringAndSize with PyUnicode_AsUTF8 and PyUnicode_AsUTF8AndSize. --- Modules/_ctypes/_ctypes.c | 12 ++++++------ Modules/_ctypes/stgdict.c | 2 +- Modules/_datetimemodule.c | 4 ++-- Modules/_io/stringio.c | 2 +- Modules/_io/textio.c | 4 ++-- Modules/_pickle.c | 2 +- Modules/_sqlite/connection.c | 4 ++-- Modules/_sqlite/cursor.c | 4 ++-- Modules/_sqlite/row.c | 4 ++-- Modules/_sqlite/statement.c | 6 +++--- Modules/cjkcodecs/cjkcodecs.h | 2 +- Modules/cjkcodecs/multibytecodec.c | 4 ++-- Modules/parsermodule.c | 4 ++-- Modules/posixmodule.c | 2 +- Modules/socketmodule.c | 2 +- Modules/syslogmodule.c | 4 ++-- Modules/timemodule.c | 2 +- 17 files changed, 32 insertions(+), 32 deletions(-) (limited to 'Modules') diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 65c950e4c9..4807e4f51d 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -1723,7 +1723,7 @@ c_void_p_from_param(PyObject *type, PyObject *value) if (stgd && CDataObject_Check(value) && stgd->proto && PyUnicode_Check(stgd->proto)) { PyCArgObject *parg; - switch (_PyUnicode_AsString(stgd->proto)[0]) { + switch (PyUnicode_AsUTF8(stgd->proto)[0]) { case 'z': /* c_char_p */ case 'Z': /* c_wchar_p */ parg = PyCArgObject_new(); @@ -1835,7 +1835,7 @@ PyCSimpleType_paramfunc(CDataObject *self) dict = PyObject_stgdict((PyObject *)self); assert(dict); /* Cannot be NULL for CDataObject instances */ - fmt = _PyUnicode_AsString(dict->proto); + fmt = PyUnicode_AsUTF8(dict->proto); assert(fmt); fd = _ctypes_get_fielddesc(fmt); @@ -2059,7 +2059,7 @@ PyCSimpleType_from_param(PyObject *type, PyObject *value) assert(dict); /* I think we can rely on this being a one-character string */ - fmt = _PyUnicode_AsString(dict->proto); + fmt = PyUnicode_AsUTF8(dict->proto); assert(fmt); fd = _ctypes_get_fielddesc(fmt); @@ -3128,7 +3128,7 @@ _check_outarg_type(PyObject *arg, Py_ssize_t index) /* simple pointer types, c_void_p, c_wchar_p, BSTR, ... */ && PyUnicode_Check(dict->proto) /* We only allow c_void_p, c_char_p and c_wchar_p as a simple output parameter type */ - && (strchr("PzZ", _PyUnicode_AsString(dict->proto)[0]))) { + && (strchr("PzZ", PyUnicode_AsUTF8(dict->proto)[0]))) { return 1; } @@ -3218,7 +3218,7 @@ _get_name(PyObject *obj, const char **pname) return *pname ? 1 : 0; } if (PyUnicode_Check(obj)) { - *pname = _PyUnicode_AsString(obj); + *pname = PyUnicode_AsUTF8(obj); return *pname ? 1 : 0; } PyErr_SetString(PyExc_TypeError, @@ -5233,7 +5233,7 @@ cast_check_pointertype(PyObject *arg) dict = PyType_stgdict(arg); if (dict) { if (PyUnicode_Check(dict->proto) - && (strchr("sPzUZXO", _PyUnicode_AsString(dict->proto)[0]))) { + && (strchr("sPzUZXO", PyUnicode_AsUTF8(dict->proto)[0]))) { /* simple pointer types, c_void_p, c_wchar_p, BSTR, ... */ return 1; } diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c index 6c0fda901a..716d1e9e8e 100644 --- a/Modules/_ctypes/stgdict.c +++ b/Modules/_ctypes/stgdict.c @@ -489,7 +489,7 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct if (isStruct && !isPacked) { char *fieldfmt = dict->format ? dict->format : "B"; - char *fieldname = _PyUnicode_AsString(name); + char *fieldname = PyUnicode_AsUTF8(name); char *ptr; Py_ssize_t len; char *buf; diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 5ddf6504c5..d0ddcc2daa 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -1219,7 +1219,7 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple, assert(object && format && timetuple); assert(PyUnicode_Check(format)); /* Convert the input format to a C string and size */ - pin = _PyUnicode_AsStringAndSize(format, &flen); + pin = PyUnicode_AsUTF8AndSize(format, &flen); if (!pin) return NULL; @@ -1287,7 +1287,7 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple, } assert(Zreplacement != NULL); assert(PyUnicode_Check(Zreplacement)); - ptoappend = _PyUnicode_AsStringAndSize(Zreplacement, + ptoappend = PyUnicode_AsUTF8AndSize(Zreplacement, &ntoappend); if (ptoappend == NULL) goto Done; diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c index ecf6dc1963..8542efd972 100644 --- a/Modules/_io/stringio.c +++ b/Modules/_io/stringio.c @@ -708,7 +708,7 @@ _io_StringIO___init___impl(stringio *self, PyObject *value, Py_TYPE(newline_obj)->tp_name); return -1; } - newline = _PyUnicode_AsString(newline_obj); + newline = PyUnicode_AsUTF8(newline_obj); if (newline == NULL) return -1; } diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 2f55eb0595..1c7200b0ae 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -921,7 +921,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, Py_CLEAR(self->encoding); } if (self->encoding != NULL) { - encoding = _PyUnicode_AsString(self->encoding); + encoding = PyUnicode_AsUTF8(self->encoding); if (encoding == NULL) goto error; } @@ -964,7 +964,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, } self->writetranslate = (newline == NULL || newline[0] != '\0'); if (!self->readuniversal && self->readnl) { - self->writenl = _PyUnicode_AsString(self->readnl); + self->writenl = PyUnicode_AsUTF8(self->readnl); if (self->writenl == NULL) goto error; if (!strcmp(self->writenl, "\n")) diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 54b1856f8b..79113e0a93 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1951,7 +1951,7 @@ save_long(PicklerObject *self, PyObject *obj) if (repr == NULL) goto error; - string = _PyUnicode_AsStringAndSize(repr, &size); + string = PyUnicode_AsUTF8AndSize(repr, &size); if (string == NULL) goto error; diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index f37de42975..1c6aa54c22 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -505,7 +505,7 @@ _pysqlite_set_result(sqlite3_context* context, PyObject* py_val) } else if (PyFloat_Check(py_val)) { sqlite3_result_double(context, PyFloat_AsDouble(py_val)); } else if (PyUnicode_Check(py_val)) { - const char *str = _PyUnicode_AsString(py_val); + const char *str = PyUnicode_AsUTF8(py_val); if (str == NULL) return -1; sqlite3_result_text(context, str, -1, SQLITE_TRANSIENT); @@ -1527,7 +1527,7 @@ pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args) } } - uppercase_name_str = _PyUnicode_AsString(uppercase_name); + uppercase_name_str = PyUnicode_AsUTF8(uppercase_name); if (!uppercase_name_str) goto finally; diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index c7169f6d6e..39f7a6508c 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -465,7 +465,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* pysqlite_statement_reset(self->statement); } - operation_cstr = _PyUnicode_AsStringAndSize(operation, &operation_len); + operation_cstr = PyUnicode_AsUTF8AndSize(operation, &operation_len); if (operation_cstr == NULL) goto error; @@ -689,7 +689,7 @@ PyObject* pysqlite_cursor_executescript(pysqlite_Cursor* self, PyObject* args) self->reset = 0; if (PyUnicode_Check(script_obj)) { - script_cstr = _PyUnicode_AsString(script_obj); + script_cstr = PyUnicode_AsUTF8(script_obj); if (!script_cstr) { return NULL; } diff --git a/Modules/_sqlite/row.c b/Modules/_sqlite/row.c index 07584e30e5..53342f3444 100644 --- a/Modules/_sqlite/row.c +++ b/Modules/_sqlite/row.c @@ -98,7 +98,7 @@ PyObject* pysqlite_row_subscript(pysqlite_Row* self, PyObject* idx) Py_XINCREF(item); return item; } else if (PyUnicode_Check(idx)) { - key = _PyUnicode_AsString(idx); + key = PyUnicode_AsUTF8(idx); if (key == NULL) return NULL; @@ -108,7 +108,7 @@ PyObject* pysqlite_row_subscript(pysqlite_Row* self, PyObject* idx) PyObject *obj; obj = PyTuple_GET_ITEM(self->description, i); obj = PyTuple_GET_ITEM(obj, 0); - compare_key = _PyUnicode_AsString(obj); + compare_key = PyUnicode_AsUTF8(obj); if (!compare_key) { return NULL; } diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c index 7b980135ed..0df661b9c7 100644 --- a/Modules/_sqlite/statement.c +++ b/Modules/_sqlite/statement.c @@ -59,7 +59,7 @@ int pysqlite_statement_create(pysqlite_Statement* self, pysqlite_Connection* con self->st = NULL; self->in_use = 0; - sql_cstr = _PyUnicode_AsStringAndSize(sql, &sql_cstr_len); + sql_cstr = PyUnicode_AsUTF8AndSize(sql, &sql_cstr_len); if (sql_cstr == NULL) { rc = PYSQLITE_SQL_WRONG_TYPE; return rc; @@ -152,7 +152,7 @@ int pysqlite_statement_bind_parameter(pysqlite_Statement* self, int pos, PyObjec rc = sqlite3_bind_double(self->st, pos, PyFloat_AsDouble(parameter)); break; case TYPE_UNICODE: - string = _PyUnicode_AsStringAndSize(parameter, &buflen); + string = PyUnicode_AsUTF8AndSize(parameter, &buflen); if (string == NULL) return -1; if (buflen > INT_MAX) { @@ -325,7 +325,7 @@ int pysqlite_statement_recompile(pysqlite_Statement* self, PyObject* params) Py_ssize_t sql_len; sqlite3_stmt* new_st; - sql_cstr = _PyUnicode_AsStringAndSize(self->sql, &sql_len); + sql_cstr = PyUnicode_AsUTF8AndSize(self->sql, &sql_len); if (sql_cstr == NULL) { rc = PYSQLITE_SQL_WRONG_TYPE; return rc; diff --git a/Modules/cjkcodecs/cjkcodecs.h b/Modules/cjkcodecs/cjkcodecs.h index b72a3f0028..2ae28ecbe2 100644 --- a/Modules/cjkcodecs/cjkcodecs.h +++ b/Modules/cjkcodecs/cjkcodecs.h @@ -267,7 +267,7 @@ getcodec(PyObject *self, PyObject *encoding) "encoding name must be a string."); return NULL; } - enc = _PyUnicode_AsString(encoding); + enc = PyUnicode_AsUTF8(encoding); if (enc == NULL) return NULL; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index f5c842154b..d1da189ddd 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -85,7 +85,7 @@ call_error_callback(PyObject *errors, PyObject *exc) const char *str; assert(PyUnicode_Check(errors)); - str = _PyUnicode_AsString(errors); + str = PyUnicode_AsUTF8(errors); if (str == NULL) return NULL; cb = PyCodec_LookupError(str); @@ -138,7 +138,7 @@ codecctx_errors_set(MultibyteStatefulCodecContext *self, PyObject *value, return -1; } - str = _PyUnicode_AsString(value); + str = PyUnicode_AsUTF8(value); if (str == NULL) return -1; diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 82770a52ff..b2566951d0 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -912,7 +912,7 @@ build_node_children(PyObject *tuple, node *root, int *line_num) Py_DECREF(o); } } - temp_str = _PyUnicode_AsStringAndSize(temp, &len); + temp_str = PyUnicode_AsUTF8AndSize(temp, &len); if (temp_str == NULL) { Py_DECREF(temp); Py_XDECREF(elem); @@ -1013,7 +1013,7 @@ build_node_tree(PyObject *tuple) if (res && encoding) { Py_ssize_t len; const char *temp; - temp = _PyUnicode_AsStringAndSize(encoding, &len); + temp = PyUnicode_AsUTF8AndSize(encoding, &len); if (temp == NULL) { Py_DECREF(res); Py_DECREF(encoding); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index acef3c31e8..ae251025cb 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -9325,7 +9325,7 @@ conv_confname(PyObject *arg, int *valuep, struct constdef *table, "configuration names must be strings or integers"); return 0; } - confname = _PyUnicode_AsString(arg); + confname = PyUnicode_AsUTF8(arg); if (confname == NULL) return 0; while (lo < hi) { diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index c9a38cc24c..4c1d8f0034 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -5989,7 +5989,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args, PyObject* kwargs) PyOS_snprintf(pbuf, sizeof(pbuf), "%ld", value); pptr = pbuf; } else if (PyUnicode_Check(pobj)) { - pptr = _PyUnicode_AsString(pobj); + pptr = PyUnicode_AsUTF8(pobj); if (pptr == NULL) goto err; } else if (PyBytes_Check(pobj)) { diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c index f2d44ff5e6..7afca58d0e 100644 --- a/Modules/syslogmodule.c +++ b/Modules/syslogmodule.c @@ -139,7 +139,7 @@ syslog_openlog(PyObject * self, PyObject * args, PyObject *kwds) * If NULL, just let openlog figure it out (probably using C argv[0]). */ if (S_ident_o) { - ident = _PyUnicode_AsString(S_ident_o); + ident = PyUnicode_AsUTF8(S_ident_o); if (ident == NULL) return NULL; } @@ -167,7 +167,7 @@ syslog_syslog(PyObject * self, PyObject * args) return NULL; } - message = _PyUnicode_AsString(message_object); + message = PyUnicode_AsUTF8(message_object); if (message == NULL) return NULL; diff --git a/Modules/timemodule.c b/Modules/timemodule.c index f0708338e8..db0ab5805c 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -441,7 +441,7 @@ gettmarg(PyObject *args, struct tm *p) if (Py_TYPE(args) == &StructTimeType) { PyObject *item; item = PyTuple_GET_ITEM(args, 9); - p->tm_zone = item == Py_None ? NULL : _PyUnicode_AsString(item); + p->tm_zone = item == Py_None ? NULL : PyUnicode_AsUTF8(item); item = PyTuple_GET_ITEM(args, 10); p->tm_gmtoff = item == Py_None ? 0 : PyLong_AsLong(item); if (PyErr_Occurred()) -- cgit v1.2.1 From 457668cddd4cb03d8ae6865ec49c3d7ffe9a8da8 Mon Sep 17 00:00:00 2001 From: INADA Naoki Date: Mon, 21 Nov 2016 20:57:14 +0900 Subject: Issue #28532: Show sys.version when -V option is supplied twice --- Modules/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/main.c b/Modules/main.c index 6986d94b42..d75f64a65f 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -74,6 +74,7 @@ static const char usage_3[] = "\ -v : verbose (trace import statements); also PYTHONVERBOSE=x\n\ can be supplied multiple times to increase verbosity\n\ -V : print the Python version number and exit (also --version)\n\ + when given twice, print more information about the build\n\ -W arg : warning control; arg is action:message:category:module:lineno\n\ also PYTHONWARNINGS=arg\n\ -x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\ @@ -512,7 +513,7 @@ Py_Main(int argc, wchar_t **argv) return usage(0, argv[0]); if (version) { - printf("Python %s\n", PY_VERSION); + printf("Python %s\n", version >= 2 ? Py_GetVersion() : PY_VERSION); return 0; } -- cgit v1.2.1 From 3481b2443d72c41a7356937952f69d647284a3c0 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 21 Nov 2016 16:35:08 +0100 Subject: Implement rich comparison for _sre.SRE_Pattern Issue #28727: Regular expression patterns, _sre.SRE_Pattern objects created by re.compile(), become comparable (only x==y and x!=y operators). This change should fix the issue #18383: don't duplicate warning filters when the warnings module is reloaded (thing usually only done in unit tests). --- Modules/_sre.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 67 insertions(+), 6 deletions(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 69c7bc0de6..c1e9fa6e6b 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -1506,14 +1506,12 @@ _sre_compile_impl(PyObject *module, PyObject *pattern, int flags, self->groups = groups; - Py_XINCREF(groupindex); + Py_INCREF(groupindex); self->groupindex = groupindex; - Py_XINCREF(indexgroup); + Py_INCREF(indexgroup); self->indexgroup = indexgroup; - self->weakreflist = NULL; - if (!_validate(self)) { Py_DECREF(self); return NULL; @@ -2649,6 +2647,69 @@ pattern_scanner(PatternObject *self, PyObject *string, Py_ssize_t pos, Py_ssize_ return (PyObject*) scanner; } +static Py_hash_t +pattern_hash(PatternObject *self) +{ + Py_hash_t hash, hash2; + + hash = PyObject_Hash(self->pattern); + if (hash == -1) { + return -1; + } + + hash2 = _Py_HashBytes(self->code, sizeof(self->code[0]) * self->codesize); + hash ^= hash2; + + hash ^= self->flags; + hash ^= self->isbytes; + hash ^= self->codesize; + + if (hash == -1) { + hash = -2; + } + return hash; +} + +static PyObject* +pattern_richcompare(PyObject *lefto, PyObject *righto, int op) +{ + PatternObject *left, *right; + int cmp; + + if (op != Py_EQ && op != Py_NE) { + Py_RETURN_NOTIMPLEMENTED; + } + + if (Py_TYPE(lefto) != &Pattern_Type || Py_TYPE(righto) != &Pattern_Type) { + Py_RETURN_NOTIMPLEMENTED; + } + left = (PatternObject *)lefto; + right = (PatternObject *)righto; + + cmp = (left->flags == right->flags + && left->isbytes == right->isbytes + && left->codesize && right->codesize); + if (cmp) { + /* Compare the code and the pattern because the same pattern can + produce different codes depending on the locale used to compile the + pattern when the re.LOCALE flag is used. Don't compare groups, + indexgroup nor groupindex: they are derivated from the pattern. */ + cmp = (memcmp(left->code, right->code, + sizeof(left->code[0]) * left->codesize) == 0); + } + if (cmp) { + cmp = PyObject_RichCompareBool(left->pattern, right->pattern, + Py_EQ); + if (cmp < 0) { + return NULL; + } + } + if (op == Py_NE) { + cmp = !cmp; + } + return PyBool_FromLong(cmp); +} + #include "clinic/_sre.c.h" static PyMethodDef pattern_methods[] = { @@ -2693,7 +2754,7 @@ static PyTypeObject Pattern_Type = { 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ - 0, /* tp_hash */ + (hashfunc)pattern_hash, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ @@ -2703,7 +2764,7 @@ static PyTypeObject Pattern_Type = { pattern_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ - 0, /* tp_richcompare */ + pattern_richcompare, /* tp_richcompare */ offsetof(PatternObject, weakreflist), /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ -- cgit v1.2.1 From 75b90aa64b1879fb7681a2d3fb64340aa7eaf625 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 22 Nov 2016 00:29:42 +0200 Subject: Issue #28752: Restored the __reduce__() methods of datetime objects. --- Modules/_datetimemodule.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index d0ddcc2daa..c09cce9da7 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3955,15 +3955,21 @@ time_getstate(PyDateTime_Time *self, int proto) } static PyObject * -time_reduce(PyDateTime_Time *self, PyObject *args) +time_reduce_ex(PyDateTime_Time *self, PyObject *args) { - int proto = 0; - if (!PyArg_ParseTuple(args, "|i:__reduce_ex__", &proto)) + int proto; + if (!PyArg_ParseTuple(args, "i:__reduce_ex__", &proto)) return NULL; return Py_BuildValue("(ON)", Py_TYPE(self), time_getstate(self, proto)); } +static PyObject * +time_reduce(PyDateTime_Time *self, PyObject *arg) +{ + return Py_BuildValue("(ON)", Py_TYPE(self), time_getstate(self, 2)); +} + static PyMethodDef time_methods[] = { {"isoformat", (PyCFunction)time_isoformat, METH_VARARGS | METH_KEYWORDS, @@ -3989,9 +3995,12 @@ static PyMethodDef time_methods[] = { {"replace", (PyCFunction)time_replace, METH_VARARGS | METH_KEYWORDS, PyDoc_STR("Return time with new specified fields.")}, - {"__reduce_ex__", (PyCFunction)time_reduce, METH_VARARGS, + {"__reduce_ex__", (PyCFunction)time_reduce_ex, METH_VARARGS, PyDoc_STR("__reduce_ex__(proto) -> (cls, state)")}, + {"__reduce__", (PyCFunction)time_reduce, METH_NOARGS, + PyDoc_STR("__reduce__() -> (cls, state)")}, + {NULL, NULL} }; @@ -5420,15 +5429,21 @@ datetime_getstate(PyDateTime_DateTime *self, int proto) } static PyObject * -datetime_reduce(PyDateTime_DateTime *self, PyObject *args) +datetime_reduce_ex(PyDateTime_DateTime *self, PyObject *args) { - int proto = 0; - if (!PyArg_ParseTuple(args, "|i:__reduce_ex__", &proto)) + int proto; + if (!PyArg_ParseTuple(args, "i:__reduce_ex__", &proto)) return NULL; return Py_BuildValue("(ON)", Py_TYPE(self), datetime_getstate(self, proto)); } +static PyObject * +datetime_reduce(PyDateTime_DateTime *self, PyObject *arg) +{ + return Py_BuildValue("(ON)", Py_TYPE(self), datetime_getstate(self, 2)); +} + static PyMethodDef datetime_methods[] = { /* Class methods: */ @@ -5503,9 +5518,12 @@ static PyMethodDef datetime_methods[] = { {"astimezone", (PyCFunction)datetime_astimezone, METH_VARARGS | METH_KEYWORDS, PyDoc_STR("tz -> convert to local time in new timezone tz\n")}, - {"__reduce_ex__", (PyCFunction)datetime_reduce, METH_VARARGS, + {"__reduce_ex__", (PyCFunction)datetime_reduce_ex, METH_VARARGS, PyDoc_STR("__reduce_ex__(proto) -> (cls, state)")}, + {"__reduce__", (PyCFunction)datetime_reduce, METH_NOARGS, + PyDoc_STR("__reduce__() -> (cls, state)")}, + {NULL, NULL} }; -- cgit v1.2.1 From 2970b7895c51700cc335e59e7b4a141cc9b35a75 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Nov 2016 15:23:00 +0100 Subject: Issue #28727: Fix typo in pattern_richcompare() Typo catched by Serhiy Storchaka, thanks! --- Modules/_sre.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index c1e9fa6e6b..1b7741696d 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2688,7 +2688,7 @@ pattern_richcompare(PyObject *lefto, PyObject *righto, int op) cmp = (left->flags == right->flags && left->isbytes == right->isbytes - && left->codesize && right->codesize); + && left->codesize == right->codesize); if (cmp) { /* Compare the code and the pattern because the same pattern can produce different codes depending on the locale used to compile the -- cgit v1.2.1 From 4d83386bceca38593641c1921fb175a541fb88c2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Nov 2016 15:30:38 +0100 Subject: Issue #28727: Optimize pattern_richcompare() for a==a A pattern is equal to itself. --- Modules/_sre.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Modules') diff --git a/Modules/_sre.c b/Modules/_sre.c index 1b7741696d..979e61fb53 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2683,6 +2683,12 @@ pattern_richcompare(PyObject *lefto, PyObject *righto, int op) if (Py_TYPE(lefto) != &Pattern_Type || Py_TYPE(righto) != &Pattern_Type) { Py_RETURN_NOTIMPLEMENTED; } + + if (lefto == righto) { + /* a pattern is equal to itself */ + return PyBool_FromLong(op == Py_EQ); + } + left = (PatternObject *)lefto; right = (PatternObject *)righto; -- cgit v1.2.1 From f9ee584b267111fb7d8af4f0b46c5db991f854f5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 29 Nov 2016 16:55:04 +0100 Subject: Add TCP_CONGESTION and TCP_USER_TIMEOUT Issue #26273: Add new socket.TCP_CONGESTION (Linux 2.6.13) and socket.TCP_USER_TIMEOUT (Linux 2.6.37) constants. Patch written by Omar Sandoval. --- Modules/socketmodule.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Modules') diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 4c1d8f0034..f4edc062fd 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -7512,6 +7512,12 @@ PyInit__socket(void) #ifdef TCP_FASTOPEN PyModule_AddIntMacro(m, TCP_FASTOPEN); #endif +#ifdef TCP_CONGESTION + PyModule_AddIntMacro(m, TCP_CONGESTION); +#endif +#ifdef TCP_USER_TIMEOUT + PyModule_AddIntMacro(m, TCP_USER_TIMEOUT); +#endif /* IPX options */ #ifdef IPX_TYPE -- cgit v1.2.1 From 720946323027f5bfb31c006cc9b3ce983af8291f Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Thu, 1 Dec 2016 11:36:22 -0500 Subject: Issue #28843: Fix asyncio C Task to handle exceptions __traceback__. --- Modules/_asynciomodule.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index b65fc02ebd..4e8f74a3c9 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -1042,6 +1042,8 @@ FutureIter_throw(futureiterobject *self, PyObject *args) if (PyExceptionClass_Check(type)) { PyErr_NormalizeException(&type, &val, &tb); + /* No need to call PyException_SetTraceback since we'll be calling + PyErr_Restore for `type`, `val`, and `tb`. */ } else if (PyExceptionInstance_Check(type)) { if (val) { PyErr_SetString(PyExc_TypeError, @@ -2003,6 +2005,9 @@ task_step_impl(TaskObj *task, PyObject *exc) if (!ev || !PyObject_TypeCheck(ev, (PyTypeObject *) et)) { PyErr_NormalizeException(&et, &ev, &tb); } + if (tb != NULL) { + PyException_SetTraceback(ev, tb); + } o = future_set_exception((FutureObj*)task, ev); if (!o) { /* An exception in Task.set_exception() */ -- cgit v1.2.1 From e3044884ae67bbd61f8a6cf1c0413d06132fe0ac Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 14 Dec 2016 11:22:05 -0800 Subject: Fixes maximum usable length of buffer for formatting time zone in localtime(). --- Modules/timemodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/timemodule.c b/Modules/timemodule.c index db0ab5805c..ebd44ad525 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -398,7 +398,7 @@ time_localtime(PyObject *self, PyObject *args) struct tm local = buf; char zone[100]; int gmtoff; - strftime(zone, sizeof(buf), "%Z", &buf); + strftime(zone, sizeof(zone), "%Z", &buf); gmtoff = timegm(&buf) - when; return tmtotuple(&local, zone, gmtoff); } -- cgit v1.2.1 From 989519add09449166ba5188ca98cdef99f28aa01 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 15 Dec 2016 09:05:11 +0100 Subject: _asyncio uses _PyObject_CallMethodIdObjArgs() Issue #28920: Replace _PyObject_CallMethodId(obj, meth, "O", arg) with _PyObject_CallMethodIdObjArgs(obj, meth, arg, NULL) to avoid _PyObject_CallMethodId() special case when arg is a tuple. If arg is a tuple, _PyObject_CallMethodId() unpacks the tuple: obj.meth(*arg). --- Modules/_asynciomodule.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'Modules') diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 4e8f74a3c9..fff90468a5 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -1327,7 +1327,7 @@ _asyncio_Task___init___impl(TaskObj *self, PyObject *coro, PyObject *loop) return -1; } - res = _PyObject_CallMethodId(all_tasks, &PyId_add, "O", self, NULL); + res = _PyObject_CallMethodIdObjArgs(all_tasks, &PyId_add, self, NULL); if (res == NULL) { return -1; } @@ -1838,8 +1838,8 @@ task_call_wakeup(TaskObj *task, PyObject *fut) } else { /* `task` is a subclass of Task */ - return _PyObject_CallMethodId( - (PyObject*)task, &PyId__wakeup, "O", fut, NULL); + return _PyObject_CallMethodIdObjArgs((PyObject*)task, &PyId__wakeup, + fut, NULL); } } @@ -1854,8 +1854,8 @@ task_call_step(TaskObj *task, PyObject *arg) if (arg == NULL) { arg = Py_None; } - return _PyObject_CallMethodId( - (PyObject*)task, &PyId__step, "O", arg, NULL); + return _PyObject_CallMethodIdObjArgs((PyObject*)task, &PyId__step, + arg, NULL); } } @@ -1869,8 +1869,8 @@ task_call_step_soon(TaskObj *task, PyObject *arg) return -1; } - handle = _PyObject_CallMethodId( - task->task_loop, &PyId_call_soon, "O", cb, NULL); + handle = _PyObject_CallMethodIdObjArgs(task->task_loop, &PyId_call_soon, + cb, NULL); Py_DECREF(cb); if (handle == NULL) { return -1; @@ -2135,8 +2135,9 @@ task_step_impl(TaskObj *task, PyObject *exc) if (wrapper == NULL) { goto fail; } - res = _PyObject_CallMethodId( - result, &PyId_add_done_callback, "O", wrapper, NULL); + res = _PyObject_CallMethodIdObjArgs(result, + &PyId_add_done_callback, + wrapper, NULL); Py_DECREF(wrapper); if (res == NULL) { goto fail; -- cgit v1.2.1 From 88be25781a6930a8ef45fb23eb1f2d4025f29799 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 15 Dec 2016 17:21:23 +0100 Subject: Fix a memory leak in split-table dictionaries Issue #28147: Fix a memory leak in split-table dictionaries: setattr() must not convert combined table into split table. Patch written by INADA Naoki. --- Modules/_testcapimodule.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'Modules') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index ecfc0858c1..f09205f63c 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -259,6 +259,19 @@ dict_getitem_knownhash(PyObject *self, PyObject *args) return result; } +static PyObject* +dict_hassplittable(PyObject *self, PyObject *arg) +{ + if (!PyDict_Check(arg)) { + PyErr_Format(PyExc_TypeError, + "dict_hassplittable() argument must be dict, not '%s'", + arg->ob_type->tp_name); + return NULL; + } + + return PyBool_FromLong(_PyDict_HasSplitTable((PyDictObject*)arg)); +} + /* Issue #4701: Check that PyObject_Hash implicitly calls * PyType_Ready if it hasn't already been called */ @@ -4024,6 +4037,7 @@ static PyMethodDef TestMethods[] = { {"test_list_api", (PyCFunction)test_list_api, METH_NOARGS}, {"test_dict_iteration", (PyCFunction)test_dict_iteration,METH_NOARGS}, {"dict_getitem_knownhash", dict_getitem_knownhash, METH_VARARGS}, + {"dict_hassplittable", dict_hassplittable, METH_O}, {"test_lazy_hash_inheritance", (PyCFunction)test_lazy_hash_inheritance,METH_NOARGS}, {"test_long_api", (PyCFunction)test_long_api, METH_NOARGS}, {"test_xincref_doesnt_leak",(PyCFunction)test_xincref_doesnt_leak, METH_NOARGS}, -- cgit v1.2.1 From 6ed09e25a422f7eb9093c248769b763ca823c144 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 28 Dec 2016 15:41:09 -0800 Subject: Issue #28768: Fix implicit declaration of function _setmode. Patch by Masayuki Yamamoto --- Modules/_io/fileio.c | 3 +++ Modules/main.c | 3 +++ 2 files changed, 6 insertions(+) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 54cfb7fa7d..6854a44e2d 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -9,6 +9,9 @@ #ifdef HAVE_SYS_STAT_H #include #endif +#ifdef HAVE_IO_H +#include +#endif #ifdef HAVE_FCNTL_H #include #endif diff --git a/Modules/main.c b/Modules/main.c index d75f64a65f..4cbe376975 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -7,6 +7,9 @@ #if defined(MS_WINDOWS) || defined(__CYGWIN__) #include +#ifdef HAVE_IO_H +#include +#endif #ifdef HAVE_FCNTL_H #include #endif -- cgit v1.2.1 From 665a02ced10494464e83c734d38526867be0d9ce Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 28 Dec 2016 20:02:35 -0800 Subject: fix error check, so that Random.seed actually uses OS randomness (closes #29085) --- Modules/_randommodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 63759d5562..0d3282db8f 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -245,7 +245,7 @@ random_seed(RandomObject *self, PyObject *args) return NULL; if (arg == NULL || arg == Py_None) { - if (random_seed_urandom(self) >= 0) { + if (random_seed_urandom(self) < 0) { PyErr_Clear(); /* Reading system entropy failed, fall back on the worst entropy: -- cgit v1.2.1 From 3fa413fa53e44d89d4876a8238ba28d0a224cd98 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 3 Jan 2017 23:47:12 +0100 Subject: Issue #29140: Fix hash(datetime.time) Fix time_hash() function: replace DATE_xxx() macros with TIME_xxx() macros. Before, the hash function used a wrong value for microseconds if fold is set (equal to 1). --- Modules/_datetimemodule.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Modules') diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index c09cce9da7..291920dc0f 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3843,11 +3843,11 @@ time_hash(PyDateTime_Time *self) { if (self->hashcode == -1) { PyObject *offset, *self0; - if (DATE_GET_FOLD(self)) { - self0 = new_time_ex2(DATE_GET_HOUR(self), - DATE_GET_MINUTE(self), - DATE_GET_SECOND(self), - DATE_GET_MICROSECOND(self), + if (TIME_GET_FOLD(self)) { + self0 = new_time_ex2(TIME_GET_HOUR(self), + TIME_GET_MINUTE(self), + TIME_GET_SECOND(self), + TIME_GET_MICROSECOND(self), HASTZINFO(self) ? self->tzinfo : Py_None, 0, Py_TYPE(self)); if (self0 == NULL) -- cgit v1.2.1 From e27f8a0a61e315ea1ff9aa4a01477d43f1edef6d Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Sun, 8 Jan 2017 01:11:27 +0100 Subject: Revert part of 3cb3e224b692 in code that I maintain. --- Modules/_testbuffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_testbuffer.c b/Modules/_testbuffer.c index 13d3cccfa4..43db8a8e53 100644 --- a/Modules/_testbuffer.c +++ b/Modules/_testbuffer.c @@ -13,7 +13,7 @@ PyObject *Struct = NULL; PyObject *calcsize = NULL; /* cache simple format string */ -static const char simple_fmt[] = "B"; +static const char *simple_fmt = "B"; PyObject *simple_format = NULL; #define SIMPLE_FORMAT(fmt) (fmt == NULL || strcmp(fmt, "B") == 0) #define FIX_FORMAT(fmt) (fmt == NULL ? "B" : fmt) -- cgit v1.2.1 From 0b95f201b7f904a8749eed20390e2b8164616c94 Mon Sep 17 00:00:00 2001 From: Stefan Krah Date: Sun, 8 Jan 2017 01:36:00 +0100 Subject: Add comment why the change in d83884b3a427 wasn't necessary. --- Modules/_testbuffer.c | 1 + 1 file changed, 1 insertion(+) (limited to 'Modules') diff --git a/Modules/_testbuffer.c b/Modules/_testbuffer.c index 43db8a8e53..4e1ce6851a 100644 --- a/Modules/_testbuffer.c +++ b/Modules/_testbuffer.c @@ -850,6 +850,7 @@ seq_as_ssize_array(PyObject *seq, Py_ssize_t len, int is_shape) Py_ssize_t *dest; Py_ssize_t x, i; + /* ndim = len <= ND_MAX_NDIM, so PyMem_New() is actually not needed. */ dest = PyMem_New(Py_ssize_t, len); if (dest == NULL) { PyErr_NoMemory(); -- cgit v1.2.1 From 9bc3d0b51b40160cfed36dbf717ba1d674d901aa Mon Sep 17 00:00:00 2001 From: Xiang Zhang Date: Sun, 8 Jan 2017 23:26:57 +0800 Subject: Issue #29034: Fix memory leak and use-after-free in path_converter. --- Modules/posixmodule.c | 109 ++++++++++++++++++++++++++------------------------ 1 file changed, 56 insertions(+), 53 deletions(-) (limited to 'Modules') diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index ae251025cb..33ee70d8d5 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -785,7 +785,9 @@ dir_fd_converter(PyObject *o, void *p) * The length of the path in characters, if specified as * a string. * path.object - * The original object passed in. + * The original object passed in (if get a PathLike object, + * the result of PyOS_FSPath() is treated as the original object). + * Own a reference to the object. * path.cleanup * For internal use only. May point to a temporary object. * (Pay no attention to the man behind the curtain.) @@ -836,24 +838,22 @@ typedef struct { #endif static void -path_cleanup(path_t *path) { - if (path->cleanup) { - Py_CLEAR(path->cleanup); - } +path_cleanup(path_t *path) +{ + Py_CLEAR(path->object); + Py_CLEAR(path->cleanup); } static int path_converter(PyObject *o, void *p) { path_t *path = (path_t *)p; - PyObject *bytes, *to_cleanup = NULL; - Py_ssize_t length; + PyObject *bytes = NULL; + Py_ssize_t length = 0; int is_index, is_buffer, is_bytes, is_unicode; - /* Default to failure, forcing explicit signaling of succcess. */ - int ret = 0; const char *narrow; #ifdef MS_WINDOWS - PyObject *wo; + PyObject *wo = NULL; const wchar_t *wide; #endif @@ -870,7 +870,9 @@ path_converter(PyObject *o, void *p) } /* Ensure it's always safe to call path_cleanup(). */ - path->cleanup = NULL; + path->object = path->cleanup = NULL; + /* path->object owns a reference to the original object */ + Py_INCREF(o); if ((o == Py_None) && path->nullable) { path->wide = NULL; @@ -879,10 +881,8 @@ path_converter(PyObject *o, void *p) #else path->narrow = NULL; #endif - path->length = 0; - path->object = o; path->fd = -1; - return 1; + goto success_exit; } /* Only call this here so that we don't treat the return value of @@ -899,10 +899,11 @@ path_converter(PyObject *o, void *p) func = _PyObject_LookupSpecial(o, &PyId___fspath__); if (NULL == func) { - goto error_exit; + goto error_format; } - - o = to_cleanup = PyObject_CallFunctionObjArgs(func, NULL); + /* still owns a reference to the original object */ + Py_DECREF(o); + o = _PyObject_CallNoArg(func); Py_DECREF(func); if (NULL == o) { goto error_exit; @@ -914,7 +915,7 @@ path_converter(PyObject *o, void *p) is_bytes = 1; } else { - goto error_exit; + goto error_format; } } @@ -922,26 +923,24 @@ path_converter(PyObject *o, void *p) #ifdef MS_WINDOWS wide = PyUnicode_AsUnicodeAndSize(o, &length); if (!wide) { - goto exit; + goto error_exit; } if (length > 32767) { FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows"); - goto exit; + goto error_exit; } if (wcslen(wide) != length) { FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s"); - goto exit; + goto error_exit; } path->wide = wide; - path->length = length; - path->object = o; + path->narrow = FALSE; path->fd = -1; - ret = 1; - goto exit; + goto success_exit; #else if (!PyUnicode_FSConverter(o, &bytes)) { - goto exit; + goto error_exit; } #endif } @@ -961,16 +960,16 @@ path_converter(PyObject *o, void *p) path->nullable ? "string, bytes, os.PathLike or None" : "string, bytes or os.PathLike", Py_TYPE(o)->tp_name)) { - goto exit; + goto error_exit; } bytes = PyBytes_FromObject(o); if (!bytes) { - goto exit; + goto error_exit; } } else if (is_index) { if (!_fd_converter(o, &path->fd)) { - goto exit; + goto error_exit; } path->wide = NULL; #ifdef MS_WINDOWS @@ -978,13 +977,10 @@ path_converter(PyObject *o, void *p) #else path->narrow = NULL; #endif - path->length = 0; - path->object = o; - ret = 1; - goto exit; + goto success_exit; } else { - error_exit: + error_format: PyErr_Format(PyExc_TypeError, "%s%s%s should be %s, not %.200s", path->function_name ? path->function_name : "", path->function_name ? ": " : "", @@ -995,15 +991,14 @@ path_converter(PyObject *o, void *p) path->nullable ? "string, bytes, os.PathLike or None" : "string, bytes or os.PathLike", Py_TYPE(o)->tp_name); - goto exit; + goto error_exit; } length = PyBytes_GET_SIZE(bytes); narrow = PyBytes_AS_STRING(bytes); if ((size_t)length != strlen(narrow)) { FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s"); - Py_DECREF(bytes); - goto exit; + goto error_exit; } #ifdef MS_WINDOWS @@ -1012,43 +1007,51 @@ path_converter(PyObject *o, void *p) length ); if (!wo) { - goto exit; + goto error_exit; } - wide = PyUnicode_AsWideCharString(wo, &length); - Py_DECREF(wo); - + wide = PyUnicode_AsUnicodeAndSize(wo, &length); if (!wide) { - goto exit; + goto error_exit; } if (length > 32767) { FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows"); - goto exit; + goto error_exit; } if (wcslen(wide) != length) { FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s"); - goto exit; + goto error_exit; } path->wide = wide; path->narrow = TRUE; + path->cleanup = wo; + Py_DECREF(bytes); #else path->wide = NULL; path->narrow = narrow; -#endif - path->length = length; - path->object = o; - path->fd = -1; if (bytes == o) { + /* Still a reference owned by path->object, don't have to + worry about path->narrow is used after free. */ Py_DECREF(bytes); - ret = 1; } else { path->cleanup = bytes; - ret = Py_CLEANUP_SUPPORTED; } - exit: - Py_XDECREF(to_cleanup); - return ret; +#endif + path->fd = -1; + + success_exit: + path->length = length; + path->object = o; + return Py_CLEANUP_SUPPORTED; + + error_exit: + Py_XDECREF(o); + Py_XDECREF(bytes); +#ifdef MS_WINDOWS + Py_XDECREF(wo); +#endif + return 0; } static void -- cgit v1.2.1 From 01a053991ffed3ca4a8cb22838b36782df70629f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 8 Jan 2017 17:28:20 -0800 Subject: Issue #29203: functools.lru_cache() now respects PEP 468 --- Modules/_functoolsmodule.c | 49 +++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 31 deletions(-) (limited to 'Modules') diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 2269d05da8..ca61fcd8b0 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -704,8 +704,8 @@ static PyTypeObject lru_cache_type; static PyObject * lru_cache_make_key(PyObject *args, PyObject *kwds, int typed) { - PyObject *key, *sorted_items; - Py_ssize_t key_size, pos, key_pos; + PyObject *key, *keyword, *value; + Py_ssize_t key_size, pos, key_pos, kwds_size; /* short path, key will match args anyway, which is a tuple */ if (!typed && !kwds) { @@ -713,28 +713,18 @@ lru_cache_make_key(PyObject *args, PyObject *kwds, int typed) return args; } - if (kwds && PyDict_Size(kwds) > 0) { - sorted_items = PyDict_Items(kwds); - if (!sorted_items) - return NULL; - if (PyList_Sort(sorted_items) < 0) { - Py_DECREF(sorted_items); - return NULL; - } - } else - sorted_items = NULL; + kwds_size = kwds ? PyDict_Size(kwds) : 0; + assert(kwds_size >= 0); key_size = PyTuple_GET_SIZE(args); - if (sorted_items) - key_size += PyList_GET_SIZE(sorted_items); + if (kwds_size) + key_size += kwds_size * 2 + 1; if (typed) - key_size *= 2; - if (sorted_items) - key_size++; + key_size += PyTuple_GET_SIZE(args) + kwds_size; key = PyTuple_New(key_size); if (key == NULL) - goto done; + return NULL; key_pos = 0; for (pos = 0; pos < PyTuple_GET_SIZE(args); ++pos) { @@ -742,14 +732,16 @@ lru_cache_make_key(PyObject *args, PyObject *kwds, int typed) Py_INCREF(item); PyTuple_SET_ITEM(key, key_pos++, item); } - if (sorted_items) { + if (kwds_size) { Py_INCREF(kwd_mark); PyTuple_SET_ITEM(key, key_pos++, kwd_mark); - for (pos = 0; pos < PyList_GET_SIZE(sorted_items); ++pos) { - PyObject *item = PyList_GET_ITEM(sorted_items, pos); - Py_INCREF(item); - PyTuple_SET_ITEM(key, key_pos++, item); + for (pos = 0; PyDict_Next(kwds, &pos, &keyword, &value);) { + Py_INCREF(keyword); + PyTuple_SET_ITEM(key, key_pos++, keyword); + Py_INCREF(value); + PyTuple_SET_ITEM(key, key_pos++, value); } + assert(key_pos == PyTuple_GET_SIZE(args) + kwds_size * 2 + 1); } if (typed) { for (pos = 0; pos < PyTuple_GET_SIZE(args); ++pos) { @@ -757,20 +749,15 @@ lru_cache_make_key(PyObject *args, PyObject *kwds, int typed) Py_INCREF(item); PyTuple_SET_ITEM(key, key_pos++, item); } - if (sorted_items) { - for (pos = 0; pos < PyList_GET_SIZE(sorted_items); ++pos) { - PyObject *tp_items = PyList_GET_ITEM(sorted_items, pos); - PyObject *item = (PyObject *)Py_TYPE(PyTuple_GET_ITEM(tp_items, 1)); + if (kwds_size) { + for (pos = 0; PyDict_Next(kwds, &pos, &keyword, &value);) { + PyObject *item = (PyObject *)Py_TYPE(value); Py_INCREF(item); PyTuple_SET_ITEM(key, key_pos++, item); } } } assert(key_pos == key_size); - -done: - if (sorted_items) - Py_DECREF(sorted_items); return key; } -- cgit v1.2.1